From fc81e3a8a69649f3fe09a1fb63edd753ff1da1ee Mon Sep 17 00:00:00 2001 From: Gionata Mettifogo Date: Tue, 13 Feb 2024 10:13:39 +0100 Subject: [PATCH 01/10] Major refactoring to accomodate bun transports SQLiteCloudConnection is now abstract for different transports --- src/connection-tls.ts | 251 +++++++++++++++++++ src/{transport-ws.ts => connection-ws.ts} | 17 +- src/connection.ts | 220 +++-------------- src/database.ts | 53 +++- src/index.ts | 4 +- src/{transport-tls.ts => protocol.ts} | 279 ++-------------------- src/queue.ts | 45 ++++ src/utilities.ts | 50 ++++ test/connection-tls.test.ts | 15 +- test/connection-ws.test.ts | 12 +- test/shared.ts | 7 +- 11 files changed, 474 insertions(+), 479 deletions(-) create mode 100644 src/connection-tls.ts rename src/{transport-ws.ts => connection-ws.ts} (84%) rename src/{transport-tls.ts => protocol.ts} (50%) create mode 100644 src/queue.ts diff --git a/src/connection-tls.ts b/src/connection-tls.ts new file mode 100644 index 0000000..eff41e6 --- /dev/null +++ b/src/connection-tls.ts @@ -0,0 +1,251 @@ +/** + * connection-tls.ts - handles low level communication with sqlitecloud server via tls socket and binary protocol + */ + +import { SQLiteCloudConfig, SQLiteCloudError, ErrorCallback, ResultsCallback } from './types' +import { SQLiteCloudConnection } from './connection' +import { formatCommand, hasCommandLength, parseCommandLength, popData, decompressBuffer, CMD_COMPRESSED, CMD_ROWSET_CHUNK } from './protocol' +import { getInitializationCommands, anonimizeError, anonimizeCommand } from './utilities' +import { parseRowsetChunks } from './protocol' + +import net from 'net' +import tls from 'tls' + +/** + * Implementation of SQLiteCloudConnection that connects directly to the database via tls socket and raw, binary protocol. + * Connects with plain socket with no encryption is the ?insecure=1 parameter is specified. + * SQLiteCloud low-level connection, will do messaging, handle socket, authentication, etc. + * A connection socket is established when the connection is created and closed when the connection is closed. + * All operations are serialized by waiting for any pending operations to complete. Once a connection is closed, + * it cannot be reopened and you must create a new connection. + */ +export class SQLiteCloudTlsConnection extends SQLiteCloudConnection { + /** Currently opened tls socket used to communicated with SQLiteCloud server */ + private socket?: tls.TLSSocket | net.Socket | null + + /** True if connection is open */ + get connected(): boolean { + return !!this.socket + } + + /* Opens a connection with the server and sends the initialization commands. Will throw in case of errors. */ + connectTransport(config: SQLiteCloudConfig, callback?: ErrorCallback): this { + // connection established while we were waiting in line? + console.assert(!this.connected, 'Connection already established') + + // clear all listeners and call done in the operations queue + const finish: ResultsCallback = error => { + if (this.socket) { + this.socket.removeAllListeners('data') + this.socket.removeAllListeners('error') + this.socket.removeAllListeners('close') + if (error) { + this.close() + } + } + callback?.call(this, error) + } + + this.config = config + const initializationCommands = getInitializationCommands(config) + + if (config.insecure) { + // connect to plain socket, without encryption, only if insecure parameter specified + // this option is mainly for testing purposes and is not available on production nodes + // which would need to connect using tls and proper certificates as per code below + const connectionOptions: net.SocketConnectOpts = { + host: config.host, + port: config.port as number + } + this.socket = net.connect(connectionOptions, () => { + console.warn(`TlsConnection.connectTransport - connected to ${config.host as string}:${config.port as number} using insecure protocol`) + // send initialization commands + console.assert(this.socket, 'Connection already closed') + this.transportCommands(initializationCommands, error => { + if (error && this.socket) { + this.close() + } + if (callback) { + callback?.call(this, error) + callback = undefined + } + finish(error) + }) + }) + } else { + // connect to tls socket, initialize connection, setup event handlers + this.socket = tls.connect(this.config.port as number, this.config.host, this.config.tlsOptions, () => { + const tlsSocket = this.socket as tls.TLSSocket + if (!tlsSocket?.authorized) { + const anonimizedError = anonimizeError(tlsSocket.authorizationError) + console.error('Connection was not authorized', anonimizedError) + this.close() + finish(new SQLiteCloudError('Connection was not authorized', { cause: anonimizedError })) + } else { + // the connection was closed before it was even opened, + // eg. client closed the connection before the server accepted it + if (this.socket === null) { + finish(new SQLiteCloudError('Connection was closed before it was done opening')) + return + } + + // send initialization commands + console.assert(this.socket, 'Connection already closed') + this.transportCommands(initializationCommands, error => { + if (error && this.socket) { + this.close() + } + if (callback) { + callback?.call(this, error) + callback = undefined + } + finish(error) + }) + } + }) + } + + this.socket.on('close', () => { + this.socket = null + finish(new SQLiteCloudError('Connection was closed')) + }) + + this.socket.once('error', (error: any) => { + console.error('Connection error', error) + finish(new SQLiteCloudError('Connection error', { cause: error })) + }) + + return this + } + + /** Will send a command immediately (no queueing), return the rowset/result or throw an error */ + transportCommands(commands: string, callback?: ResultsCallback): this { + // connection needs to be established? + if (!this.socket) { + callback?.call(this, new SQLiteCloudError('Connection not established', { errorCode: 'ERR_CONNECTION_NOT_ESTABLISHED' })) + return this + } + + // compose commands following SCPC protocol + commands = formatCommand(commands) + + let buffer = Buffer.alloc(0) + const rowsetChunks: Buffer[] = [] + // const startedOn = new Date() + + // define what to do if an answer does not arrive within the set timeout + let socketTimeout: number + + // clear all listeners and call done in the operations queue + const finish: ResultsCallback = (error, result) => { + clearTimeout(socketTimeout) + if (this.socket) { + this.socket.removeAllListeners('data') + this.socket.removeAllListeners('error') + this.socket.removeAllListeners('close') + } + if (callback) { + callback?.call(this, error, result) + callback = undefined + } + } + + // define the Promise that waits for the server response + const readData = (data: Uint8Array) => { + try { + // on first ondata event, dataType is read from data, on subsequent ondata event, is read from buffer that is the concatanations of data received on each ondata event + let dataType = buffer.length === 0 ? data.subarray(0, 1).toString() : buffer.subarray(0, 1).toString('utf8') + buffer = Buffer.concat([buffer, data]) + const commandLength = hasCommandLength(dataType) + + if (commandLength) { + const commandLength = parseCommandLength(buffer) + const hasReceivedEntireCommand = buffer.length - buffer.indexOf(' ') - 1 >= commandLength ? true : false + if (hasReceivedEntireCommand) { + if (this.config?.verbose) { + let bufferString = buffer.toString('utf8') + if (bufferString.length > 1000) { + bufferString = bufferString.substring(0, 100) + '...' + bufferString.substring(bufferString.length - 40) + } + // const elapsedMs = new Date().getTime() - startedOn.getTime() + // console.debug(`Receive: ${bufferString} - ${elapsedMs}ms`) + } + + // need to decompress this buffer before decoding? + if (dataType === CMD_COMPRESSED) { + ;({ buffer, dataType } = decompressBuffer(buffer)) + } + + if (dataType !== CMD_ROWSET_CHUNK) { + this.socket?.off('data', readData) + const { data } = popData(buffer) + finish(null, data) + } else { + // @ts-expect-error + // check if rowset received the ending chunk + if (data.subarray(data.indexOf(' ') + 1, data.length).toString() === '0 0 0 ') { + const parsedData = parseRowsetChunks(rowsetChunks) + finish?.call(this, null, parsedData) + } else { + // no ending string? ask server for another chunk + rowsetChunks.push(buffer) + buffer = Buffer.alloc(0) + + // no longer need to ack the server + // const okCommand = formatCommand('OK') + // this.socket?.write(okCommand) + } + } + } + } else { + // command with no explicit len so make sure that the final character is a space + const lastChar = buffer.subarray(buffer.length - 1, buffer.length).toString('utf8') + if (lastChar == ' ') { + const { data } = popData(buffer) + finish(null, data) + } + } + } catch (error) { + console.assert(error instanceof Error) + if (error instanceof Error) { + finish(error) + } + } + } + + this.socket?.once('close', () => { + finish(new SQLiteCloudError('Connection was closed', { cause: anonimizeCommand(commands) })) + }) + + this.socket?.write(commands, 'utf8', () => { + socketTimeout = setTimeout(() => { + const timeoutError = new SQLiteCloudError('Request timed out', { cause: anonimizeCommand(commands) }) + // console.debug(`Request timed out, config.timeout is ${this.config?.timeout as number}ms`, timeoutError) + finish(timeoutError) + }, this.config?.timeout) + this.socket?.on('data', readData) + }) + + this.socket?.once('error', (error: any) => { + console.error('Socket error', error) + this.close() + finish(new SQLiteCloudError('Socket error', { cause: anonimizeError(error) })) + }) + + return this + } + + /** Disconnect from server, release connection. */ + close(): this { + console.assert(this.socket !== null, 'TlsConnection.close - connection already closed') + this.operations.clear() + if (this.socket) { + this.socket.destroy() + this.socket = null + } + this.socket = undefined + return this + } +} + +export default SQLiteCloudTlsConnection diff --git a/src/transport-ws.ts b/src/connection-ws.ts similarity index 84% rename from src/transport-ws.ts rename to src/connection-ws.ts index 0371131..b11cb71 100644 --- a/src/transport-ws.ts +++ b/src/connection-ws.ts @@ -4,7 +4,7 @@ import { SQLiteCloudConfig, SQLiteCloudError, ErrorCallback, ResultsCallback } from './types' import { SQLiteCloudRowset } from './rowset' -import { ConnectionTransport } from './connection' +import { SQLiteCloudConnection } from './connection' import { io, Socket } from 'socket.io-client' /** @@ -13,9 +13,7 @@ import { io, Socket } from 'socket.io-client' * requests by returning results and rowsets in json format. The gateway handles * connect, disconnect, retries, order of operations, timeouts, etc. */ -export class WebSocketTransport implements ConnectionTransport { - /** Configuration passed to connect */ - private config?: SQLiteCloudConfig +export class SQLiteCloudWebsocketConnection extends SQLiteCloudConnection { /** Socket.io used to communicated with SQLiteCloud server */ private socket?: Socket @@ -25,7 +23,7 @@ export class WebSocketTransport implements ConnectionTransport { } /* Opens a connection with the server and sends the initialization commands. Will throw in case of errors. */ - connect(config: SQLiteCloudConfig, callback?: ErrorCallback): this { + connectTransport(config: SQLiteCloudConfig, callback?: ErrorCallback): this { try { // connection established while we were waiting in line? console.assert(!this.connected, 'Connection already established') @@ -43,7 +41,7 @@ export class WebSocketTransport implements ConnectionTransport { } /** Will send a command immediately (no queueing), return the rowset/result or throw an error */ - processCommands(commands: string, callback?: ResultsCallback): this { + transportCommands(commands: string, callback?: ResultsCallback): this { // connection needs to be established? if (!this.socket) { callback?.call(this, new SQLiteCloudError('Connection not established', { errorCode: 'ERR_CONNECTION_NOT_ESTABLISHED' })) @@ -58,7 +56,7 @@ export class WebSocketTransport implements ConnectionTransport { const { data, metadata } = response if (data && metadata) { if (metadata.numberOfRows !== undefined && metadata.numberOfColumns !== undefined && metadata.columns !== undefined) { - console.assert(Array.isArray(data), 'SQLiteCloudWebsocketConnection.processCommands - data is not an array') + console.assert(Array.isArray(data), 'SQLiteCloudWebsocketConnection.transportCommands - data is not an array') // we can recreate a SQLiteCloudRowset from the response which we know to be an array of arrays // eslint-disable-next-line @typescript-eslint/no-unsafe-call const rowset = new SQLiteCloudRowset(metadata, data.flat()) @@ -75,12 +73,15 @@ export class WebSocketTransport implements ConnectionTransport { /** Disconnect socket.io from server */ public close(): this { - console.assert(this.socket !== null, 'WebsocketTransport.close - connection already closed') + console.assert(this.socket !== null, 'SQLiteCloudWebsocketConnection.close - connection already closed') if (this.socket) { this.socket?.close() this.socket = undefined } + this.operations.clear() this.socket = undefined return this } } + +export default SQLiteCloudWebsocketConnection diff --git a/src/connection.ts b/src/connection.ts index bd6004b..524b811 100644 --- a/src/connection.ts +++ b/src/connection.ts @@ -1,15 +1,17 @@ /** - * connection.ts - handles low level communication with sqlitecloud server + * connection.ts - base abstract class for sqlitecloud server connections */ import { SQLiteCloudConfig, SQLiteCloudError, ErrorCallback, ResultsCallback } from './types' -import { validateConfiguration, isBrowser } from './utilities' +import { validateConfiguration } from './utilities' +import { OperationsQueue } from './queue' +import { anonimizeCommand } from './utilities' /** * Base class for SQLiteCloudConnection handles basics and defines methods. * Actual connection management and communication with the server in concrete classes. */ -export class SQLiteCloudConnection { +export abstract class SQLiteCloudConnection { /** Parse and validate provided connectionString or configuration */ constructor(config: SQLiteCloudConfig | string, callback?: ErrorCallback) { if (typeof config === 'string') { @@ -25,74 +27,36 @@ export class SQLiteCloudConnection { /** Configuration passed by client or extracted from connection string */ protected config: SQLiteCloudConfig - /** Transport used to communicate with server */ - protected transport?: ConnectionTransport - /** Operations are serialized by waiting an any pending promises */ protected operations = new OperationsQueue() // - // public properties + // internal methods (some are implemented in concrete classes using different transport layers) // - /** True if connection is open */ - public get connected(): boolean { - return this.transport?.connected || false - } - /** Connect will establish a tls or websocket transport to the server based on configuration and environment */ protected connect(callback?: ErrorCallback): this { this.operations.enqueue(done => { - // connect using websocket if tls is not supported or if explicitly requested - if (isBrowser || this.config?.useWebsocket || this.config?.gatewayUrl) { - // socket.io transport works in both node.js and browser environments and connects via SQLite Cloud Gateway - import('./transport-ws') - .then(transport => { - this.transport = new transport.WebSocketTransport() - this.transport.connect(this.config, error => { - if (error) { - console.error( - `SQLiteCloudConnection.connect - error while connecting WebSocketTransport: ${error.toString()} to ${this.config.host}:${this.config.port}`, - error - ) - this.close() - } - callback?.call(this, error || null) - done(error) - }) - }) - .catch(error => { - done(error) - }) - } else { - // tls sockets work only in node.js environments - import('./transport-tls') - .then(transport => { - this.transport = new transport.TlsSocketTransport() - this.transport.connect(this.config, error => { - if (error) { - console.error( - `SQLiteCloudConnection.connect - error while connecting TlsSocketTransport: ${error.toString()} to ${this.config.host}:${this.config.port}`, - error - ) - this.close() - } - callback?.call(this, error || null) - done(error) - }) - }) - .catch(error => { - done(error) - }) - } + this.connectTransport(this.config, error => { + if (error) { + console.error( + `SQLiteCloudConnection.connect - error connecting ${this.config.host as string}:${this.config.port as number} ${error.toString()}`, + error + ) + this.close() + } + callback?.call(this, error || null) + done(error) + }) }) - return this } - // - // private methods - // + /* Opens a connection with the server and sends the initialization commands */ + protected abstract connectTransport(config: SQLiteCloudConfig, callback?: ErrorCallback): this + + /** Send a command, return the rowset/result or throw an error */ + protected abstract transportCommands(commands: string, callback?: ResultsCallback): this /** Will log to console if verbose mode is enabled */ protected log(message: string, ...optionalParams: any[]): void { @@ -103,9 +67,12 @@ export class SQLiteCloudConnection { } // - // public methods + // public methods (some are abstract and implemented in concrete classes) // + /** Returns true if connection is open */ + public abstract get connected(): boolean + /** Enable verbose logging for debug purposes */ public verbose(): void { this.config.verbose = true @@ -114,142 +81,21 @@ export class SQLiteCloudConnection { /** Will enquee a command to be executed and callback with the resulting rowset/result/error */ public sendCommands(commands: string, callback?: ResultsCallback): this { this.operations.enqueue(done => { - if (this.transport) { - this.transport.processCommands(commands, (error, result) => { - callback?.call(this, error, result) - done(error) - }) - } else { + if (!this.connected) { const error = new SQLiteCloudError('Connection not established', { errorCode: 'ERR_CONNECTION_NOT_ESTABLISHED' }) callback?.call(this, error) done(error) } - }) - - return this - } - - /** Disconnect from server, release connection. */ - public close(): this { - this.operations.clear() - this.transport?.close() - this.transport = undefined - return this - } -} - -// -// OperationsQueue - used to linearize operations on the connection -// -type OperationCallback = (error: Error | null) => void -type Operation = (done: OperationCallback) => void - -export class OperationsQueue { - private queue: Operation[] = [] - private isProcessing = false - - /** Add operations to the queue, process immediately if possible, else wait for previous operations to complete */ - public enqueue(operation: Operation): void { - this.queue.push(operation) - if (!this.isProcessing) { - this.processNext() - } - } - - /** Clear the queue */ - public clear(): void { - this.queue = [] - this.isProcessing = false - } - - /** Process the next operation in the queue */ - private processNext(): void { - if (this.queue.length === 0) { - this.isProcessing = false - return - } - - this.isProcessing = true - const operation = this.queue.shift() - operation?.(() => { - // could receive (error) => { ... - // if (error) { - // console.warn('OperationQueue.processNext - error in operation', error) - // } - - // process the next operation in the queue - this.processNext() + this.transportCommands(commands, (error, result) => { + callback?.call(this, error, result) + done(error) + }) }) - } -} - -// -// utility functions -// - -/** Messages going to the server are sometimes logged when error conditions occour and need to be stripped of user credentials */ -export function anonimizeCommand(message: string): string { - // hide password in AUTH command if needed - message = message.replace(/USER \S+/, 'USER ******') - message = message.replace(/PASSWORD \S+?(?=;)/, 'PASSWORD ******') - message = message.replace(/HASH \S+?(?=;)/, 'HASH ******') - return message -} - -/** Strip message code in error of user credentials */ -export function anonimizeError(error: Error): Error { - if (error?.message) { - error.message = anonimizeCommand(error.message) - } - return error -} - -/** Initialization commands sent to database when connection is established */ -export function getInitializationCommands(config: SQLiteCloudConfig): string { - // first user authentication, then all other commands - let commands = `AUTH USER ${config.username || ''} ${config.passwordHashed ? 'HASH' : 'PASSWORD'} ${config.password || ''}; ` - if (config.database) { - if (config.createDatabase && !config.dbMemory) { - commands += `CREATE DATABASE ${config.database} IF NOT EXISTS; ` - } - commands += `USE DATABASE ${config.database}; ` - } - if (config.compression) { - commands += 'SET CLIENT KEY COMPRESSION TO 1; ' - } - if (config.nonlinearizable) { - commands += 'SET CLIENT KEY NONLINEARIZABLE TO 1; ' - } - if (config.noBlob) { - commands += 'SET CLIENT KEY NOBLOB TO 1; ' - } - if (config.maxData) { - commands += `SET CLIENT KEY MAXDATA TO ${config.maxData}; ` - } - if (config.maxRows) { - commands += `SET CLIENT KEY MAXROWS TO ${config.maxRows}; ` - } - if (config.maxRowset) { - commands += `SET CLIENT KEY MAXROWSET TO ${config.maxRowset}; ` + return this } - return commands -} - -// -// ConnectionTransport -// - -/** ConnectionTransport implements the underlying transport layer for the connection */ -export interface ConnectionTransport { - /** True if connection is currently open */ - get connected(): boolean - /* Opens a connection with the server and sends the initialization commands. Will throw in case of errors. */ - connect(config: SQLiteCloudConfig, callback?: ErrorCallback): this - /** Send a command, return the rowset/result or throw an error */ - processCommands(commands: string, callback?: ResultsCallback): this /** Disconnect from server, release transport. */ - close(): this + public abstract close(): this } diff --git a/src/database.ts b/src/database.ts index 658a8b0..af6ee27 100644 --- a/src/database.ts +++ b/src/database.ts @@ -17,6 +17,7 @@ import { prepareSql, popCallback } from './utilities' import { Statement } from './statement' import { ErrorCallback, ResultsCallback, RowCallback, RowsCallback } from './types' import EventEmitter from 'eventemitter3' +import { isBrowser } from './utilities' // Uses eventemitter3 instead of node events for browser compatibility // https://github.com/primus/eventemitter3 @@ -64,17 +65,47 @@ export class Database extends EventEmitter { if (this.connections?.length > 0) { callback?.call(this, null, this.connections[0]) } else { - this.connections.push( - new SQLiteCloudConnection(this.config, error => { - if (error) { - this.handleError(this.connections[0], error, callback) - } else { - console.assert - callback?.call(this, null, this.connections[0]) - this.emitEvent('open') - } - }) - ) + // connect using websocket if tls is not supported or if explicitly requested + const useWebsocket = isBrowser || this.config?.useWebsocket || this.config?.gatewayUrl + if (useWebsocket) { + // socket.io transport works in both node.js and browser environments and connects via SQLite Cloud Gateway + import('./connection-ws') + .then(module => { + this.connections.push( + new module.default(this.config, error => { + if (error) { + this.handleError(this.connections[0], error, callback) + } else { + console.assert + callback?.call(this, null, this.connections[0]) + this.emitEvent('open') + } + }) + ) + }) + .catch(error => { + this.handleError(null, error, callback) + }) + } else { + // tls sockets work only in node.js environments + import('./connection-tls') + .then(module => { + this.connections.push( + new module.default(this.config, error => { + if (error) { + this.handleError(this.connections[0], error, callback) + } else { + console.assert + callback?.call(this, null, this.connections[0]) + this.emitEvent('open') + } + }) + ) + }) + .catch(error => { + this.handleError(null, error, callback) + }) + } } } diff --git a/src/index.ts b/src/index.ts index 5ea012d..d8998da 100644 --- a/src/index.ts +++ b/src/index.ts @@ -4,9 +4,7 @@ export { Database } from './database' export { Statement } from './statement' +export { SQLiteCloudConnection } from './connection' export { SQLiteCloudConfig, SQLCloudRowsetMetadata, SQLiteCloudError, ErrorCallback } from './types' export { SQLiteCloudRowset, SQLiteCloudRow } from './rowset' -export { SQLiteCloudConnection } from './connection' export { escapeSqlParameter, prepareSql, parseConnectionString, validateConfiguration } from './utilities' -export { WebSocketTransport } from './transport-ws' -export { TlsSocketTransport } from './transport-tls' diff --git a/src/transport-tls.ts b/src/protocol.ts similarity index 50% rename from src/transport-tls.ts rename to src/protocol.ts index e1a15c5..0ad94af 100644 --- a/src/transport-tls.ts +++ b/src/protocol.ts @@ -1,278 +1,49 @@ -/** - * transport-tls.ts - handles low level communication with sqlitecloud server via tls socket and binary protocol - */ +// +// protocol.ts - low level protocol handling for SQLiteCloud transport +// -import { SQLiteCloudConfig, SQLiteCloudError, ErrorCallback, ResultsCallback, SQLCloudRowsetMetadata, SQLiteCloudDataTypes } from './types' +import { SQLiteCloudError, type SQLCloudRowsetMetadata, type SQLiteCloudDataTypes } from './types' import { SQLiteCloudRowset } from './rowset' -import { ConnectionTransport, getInitializationCommands, anonimizeError, anonimizeCommand } from './connection' -import net from 'net' -import tls from 'tls' const lz4 = require('lz4js') // The server communicates with clients via commands defined in // SQLiteCloud Server Protocol (SCSP), see more at: // https://github.com/sqlitecloud/sdk/blob/master/PROTOCOL.md -const CMD_STRING = '+' -const CMD_ZEROSTRING = '!' -const CMD_ERROR = '-' -const CMD_INT = ':' -const CMD_FLOAT = ',' -const CMD_ROWSET = '*' -const CMD_ROWSET_CHUNK = '/' -const CMD_JSON = '#' -const CMD_NULL = '_' -const CMD_BLOB = '$' -const CMD_COMPRESSED = '%' -const CMD_COMMAND = '^' -const CMD_ARRAY = '=' +export const CMD_STRING = '+' +export const CMD_ZEROSTRING = '!' +export const CMD_ERROR = '-' +export const CMD_INT = ':' +export const CMD_FLOAT = ',' +export const CMD_ROWSET = '*' +export const CMD_ROWSET_CHUNK = '/' +export const CMD_JSON = '#' +export const CMD_NULL = '_' +export const CMD_BLOB = '$' +export const CMD_COMPRESSED = '%' +export const CMD_COMMAND = '^' +export const CMD_ARRAY = '=' // const CMD_RAWJSON = '{' // const CMD_PUBSUB = '|' // const CMD_RECONNECT = '@' -/** - * Implementation of SQLiteCloudConnection that connects directly to the database via tls socket and raw, binary protocol. - * Connects with plain socket with no encryption is the ?insecure=1 parameter is specified. - * SQLiteCloud low-level connection, will do messaging, handle socket, authentication, etc. - * A connection socket is established when the connection is created and closed when the connection is closed. - * All operations are serialized by waiting for any pending operations to complete. Once a connection is closed, - * it cannot be reopened and you must create a new connection. - */ -export class TlsSocketTransport implements ConnectionTransport { - /** Configuration passed to connect */ - private config?: SQLiteCloudConfig - /** Currently opened tls socket used to communicated with SQLiteCloud server */ - private socket?: tls.TLSSocket | net.Socket | null - - /** True if connection is open */ - get connected(): boolean { - return !!this.socket - } - - /* Opens a connection with the server and sends the initialization commands. Will throw in case of errors. */ - connect(config: SQLiteCloudConfig, callback?: ErrorCallback): this { - // connection established while we were waiting in line? - console.assert(!this.connected, 'Connection already established') - - // clear all listeners and call done in the operations queue - const finish: ResultsCallback = error => { - if (this.socket) { - this.socket.removeAllListeners('data') - this.socket.removeAllListeners('error') - this.socket.removeAllListeners('close') - if (error) { - this.close() - } - } - } - - this.config = config - - if (config.insecure) { - // connect to plain socket, without encryption, only if insecure parameter specified - // this option is mainly for testing purposes and is not available on production nodes - // which would need to connect using tls and proper certificates as per code below - const connectionOptions: net.SocketConnectOpts = { - host: config.host, - port: config.port as number - } - this.socket = net.connect(connectionOptions, () => { - console.warn(`TlsTransport.connect - connected to ${config.host}:${config.port} using insecure protocol`) - callback?.call(this, null) - }) - } else { - // connect to tls socket, initialize connection, setup event handlers - this.socket = tls.connect(this.config.port as number, this.config.host, this.config.tlsOptions, () => { - const tlsSocket = this.socket as tls.TLSSocket - if (!tlsSocket?.authorized) { - const anonimizedError = anonimizeError(tlsSocket.authorizationError) - console.error('Connection was not authorized', anonimizedError) - this.close() - finish(new SQLiteCloudError('Connection was not authorized', { cause: anonimizedError })) - } else { - // the connection was closed before it was even opened, - // eg. client closed the connection before the server accepted it - if (this.socket === null) { - finish(new SQLiteCloudError('Connection was closed before it was done opening')) - return - } - - // send initialization commands - console.assert(this.socket, 'Connection already closed') - const commands = getInitializationCommands(config) - this.processCommands(commands, error => { - if (error && this.socket) { - this.close() - } - if (callback) { - callback?.call(this, error) - callback = undefined - } - finish(error) - }) - } - }) - } - - this.socket.on('close', () => { - this.socket = null - finish(new SQLiteCloudError('Connection was closed')) - }) - - this.socket.once('error', (error: any) => { - console.error('Connection error', error) - finish(new SQLiteCloudError('Connection error', { cause: error })) - }) - - return this - } - - /** Will send a command immediately (no queueing), return the rowset/result or throw an error */ - processCommands(commands: string, callback?: ResultsCallback): this { - // connection needs to be established? - if (!this.socket) { - callback?.call(this, new SQLiteCloudError('Connection not established', { errorCode: 'ERR_CONNECTION_NOT_ESTABLISHED' })) - return this - } - - // compose commands following SCPC protocol - commands = formatCommand(commands) - - let buffer = Buffer.alloc(0) - const rowsetChunks: Buffer[] = [] - // const startedOn = new Date() - - // define what to do if an answer does not arrive within the set timeout - let socketTimeout: number - - // clear all listeners and call done in the operations queue - const finish: ResultsCallback = (error, result) => { - clearTimeout(socketTimeout) - if (this.socket) { - this.socket.removeAllListeners('data') - this.socket.removeAllListeners('error') - this.socket.removeAllListeners('close') - } - if (callback) { - callback?.call(this, error, result) - callback = undefined - } - } - - // define the Promise that waits for the server response - const readData = (data: Uint8Array) => { - try { - // on first ondata event, dataType is read from data, on subsequent ondata event, is read from buffer that is the concatanations of data received on each ondata event - let dataType = buffer.length === 0 ? data.subarray(0, 1).toString() : buffer.subarray(0, 1).toString('utf8') - buffer = Buffer.concat([buffer, data]) - const commandLength = hasCommandLength(dataType) - - if (commandLength) { - const commandLength = parseCommandLength(buffer) - const hasReceivedEntireCommand = buffer.length - buffer.indexOf(' ') - 1 >= commandLength ? true : false - if (hasReceivedEntireCommand) { - if (this.config?.verbose) { - let bufferString = buffer.toString('utf8') - if (bufferString.length > 1000) { - bufferString = bufferString.substring(0, 100) + '...' + bufferString.substring(bufferString.length - 40) - } - // const elapsedMs = new Date().getTime() - startedOn.getTime() - // console.debug(`Receive: ${bufferString} - ${elapsedMs}ms`) - } - - // need to decompress this buffer before decoding? - if (dataType === CMD_COMPRESSED) { - ;({ buffer, dataType } = decompressBuffer(buffer)) - } - - if (dataType !== CMD_ROWSET_CHUNK) { - this.socket?.off('data', readData) - const { data } = popData(buffer) - finish(null, data) - } else { - // @ts-expect-error - // check if rowset received the ending chunk - if (data.subarray(data.indexOf(' ') + 1, data.length).toString() === '0 0 0 ') { - const parsedData = parseRowsetChunks(rowsetChunks) - finish?.call(this, null, parsedData) - } else { - // no ending string? ask server for another chunk - rowsetChunks.push(buffer) - buffer = Buffer.alloc(0) - - // no longer need to ack the server - // const okCommand = formatCommand('OK') - // this.socket?.write(okCommand) - } - } - } - } else { - // command with no explicit len so make sure that the final character is a space - const lastChar = buffer.subarray(buffer.length - 1, buffer.length).toString('utf8') - if (lastChar == ' ') { - const { data } = popData(buffer) - finish(null, data) - } - } - } catch (error) { - console.assert(error instanceof Error) - if (error instanceof Error) { - finish(error) - } - } - } - - this.socket?.once('close', () => { - finish(new SQLiteCloudError('Connection was closed', { cause: anonimizeCommand(commands) })) - }) - - this.socket?.write(commands, 'utf8', () => { - socketTimeout = setTimeout(() => { - const timeoutError = new SQLiteCloudError('Request timed out', { cause: anonimizeCommand(commands) }) - // console.debug(`Request timed out, config.timeout is ${this.config?.timeout as number}ms`, timeoutError) - finish(timeoutError) - }, this.config?.timeout) - this.socket?.on('data', readData) - }) - - this.socket?.once('error', (error: any) => { - console.error('Socket error', error) - this.close() - finish(new SQLiteCloudError('Socket error', { cause: anonimizeError(error) })) - }) - - return this - } - - /** Disconnect from server, release connection. */ - close(): this { - console.assert(this.socket !== null, 'TlsSocketTransport.close - connection already closed') - if (this.socket) { - this.socket.destroy() - this.socket = null - } - this.socket = undefined - return this - } -} - // // utility functions // /** Analyze first character to check if corresponding data type has LEN */ -function hasCommandLength(firstCharacter: string): boolean { +export function hasCommandLength(firstCharacter: string): boolean { return firstCharacter == CMD_INT || firstCharacter == CMD_FLOAT || firstCharacter == CMD_NULL ? false : true } /** Analyze a command with explict LEN and extract it */ -function parseCommandLength(data: Buffer) { +export function parseCommandLength(data: Buffer): number { return parseInt(data.subarray(1, data.indexOf(' ')).toString('utf8')) } /** Receive a compressed buffer, decompress with lz4, return buffer and datatype */ -function decompressBuffer(buffer: Buffer): { buffer: Buffer; dataType: string } { +export function decompressBuffer(buffer: Buffer): { buffer: Buffer; dataType: string } { const spaceIndex = buffer.indexOf(' ') buffer = buffer.subarray(spaceIndex + 1) @@ -297,11 +68,11 @@ function decompressBuffer(buffer: Buffer): { buffer: Buffer; dataType: string } throw new Error(`lz4 decompression error at offset ${decompressionResult}`) } - return { buffer, dataType: dataType } + return { buffer, dataType } } /** Parse error message or extended error message */ -function parseError(buffer: Buffer, spaceIndex: number): never { +export function parseError(buffer: Buffer, spaceIndex: number): never { const errorBuffer = buffer.subarray(spaceIndex + 1) const errorString = errorBuffer.toString('utf8') const parts = errorString.split(' ') @@ -337,7 +108,7 @@ function parseError(buffer: Buffer, spaceIndex: number): never { } /** Parse an array of items (each of which will be parsed by type separately) */ -function parseArray(buffer: Buffer, spaceIndex: number): SQLiteCloudDataTypes[] { +export function parseArray(buffer: Buffer, spaceIndex: number): SQLiteCloudDataTypes[] { const parsedData = [] const array = buffer.subarray(spaceIndex + 1, buffer.length) @@ -354,7 +125,7 @@ function parseArray(buffer: Buffer, spaceIndex: number): SQLiteCloudDataTypes[] } /** Parse header in a rowset or chunk of a chunked rowset */ -function parseRowsetHeader(buffer: Buffer): { index: number; metadata: SQLCloudRowsetMetadata; fwdBuffer: Buffer } { +export function parseRowsetHeader(buffer: Buffer): { index: number; metadata: SQLCloudRowsetMetadata; fwdBuffer: Buffer } { const index = parseInt(buffer.subarray(0, buffer.indexOf(':') + 1).toString()) buffer = buffer.subarray(buffer.indexOf(':') + 1) @@ -423,7 +194,7 @@ function parseRowset(buffer: Buffer, spaceIndex: number): SQLiteCloudRowset { * Parse a chunk of a chunked rowset command, eg: * *LEN 0:VERS NROWS NCOLS DATA */ -export function parseRowsetChunks(buffers: Buffer[]) { +export function parseRowsetChunks(buffers: Buffer[]): SQLiteCloudRowset { let metadata: SQLCloudRowsetMetadata = { version: 1, numberOfColumns: 0, numberOfRows: 0, columns: [] } const data: any[] = [] diff --git a/src/queue.ts b/src/queue.ts new file mode 100644 index 0000000..9a79973 --- /dev/null +++ b/src/queue.ts @@ -0,0 +1,45 @@ +// +// queue.ts - simple task queue used to linearize async operations +// + +export type OperationCallback = (error: Error | null) => void +export type Operation = (done: OperationCallback) => void + +export class OperationsQueue { + private queue: Operation[] = [] + private isProcessing = false + + /** Add operations to the queue, process immediately if possible, else wait for previous operations to complete */ + public enqueue(operation: Operation): void { + this.queue.push(operation) + if (!this.isProcessing) { + this.processNext() + } + } + + /** Clear the queue */ + public clear(): void { + this.queue = [] + this.isProcessing = false + } + + /** Process the next operation in the queue */ + private processNext(): void { + if (this.queue.length === 0) { + this.isProcessing = false + return + } + + this.isProcessing = true + const operation = this.queue.shift() + operation?.(() => { + // could receive (error) => { ... + // if (error) { + // console.warn('OperationQueue.processNext - error in operation', error) + // } + + // process the next operation in the queue + this.processNext() + }) + } +} diff --git a/src/utilities.ts b/src/utilities.ts index 458e078..a32a0bf 100644 --- a/src/utilities.ts +++ b/src/utilities.ts @@ -16,6 +16,56 @@ export const isNode: boolean = typeof process !== 'undefined' && process.version // utility methods // +/** Messages going to the server are sometimes logged when error conditions occour and need to be stripped of user credentials */ +export function anonimizeCommand(message: string): string { + // hide password in AUTH command if needed + message = message.replace(/USER \S+/, 'USER ******') + message = message.replace(/PASSWORD \S+?(?=;)/, 'PASSWORD ******') + message = message.replace(/HASH \S+?(?=;)/, 'HASH ******') + return message +} + +/** Strip message code in error of user credentials */ +export function anonimizeError(error: Error): Error { + if (error?.message) { + error.message = anonimizeCommand(error.message) + } + return error +} + +/** Initialization commands sent to database when connection is established */ +export function getInitializationCommands(config: SQLiteCloudConfig): string { + // first user authentication, then all other commands + let commands = `AUTH USER ${config.username || ''} ${config.passwordHashed ? 'HASH' : 'PASSWORD'} ${config.password || ''}; ` + + if (config.database) { + if (config.createDatabase && !config.dbMemory) { + commands += `CREATE DATABASE ${config.database} IF NOT EXISTS; ` + } + commands += `USE DATABASE ${config.database}; ` + } + if (config.compression) { + commands += 'SET CLIENT KEY COMPRESSION TO 1; ' + } + if (config.nonlinearizable) { + commands += 'SET CLIENT KEY NONLINEARIZABLE TO 1; ' + } + if (config.noBlob) { + commands += 'SET CLIENT KEY NOBLOB TO 1; ' + } + if (config.maxData) { + commands += `SET CLIENT KEY MAXDATA TO ${config.maxData}; ` + } + if (config.maxRows) { + commands += `SET CLIENT KEY MAXROWS TO ${config.maxRows}; ` + } + if (config.maxRowset) { + commands += `SET CLIENT KEY MAXROWSET TO ${config.maxRowset}; ` + } + + return commands +} + /** Takes a generic value and escapes it so it can replace ? as a binding in a prepared SQL statement */ export function escapeSqlParameter(param: SQLiteCloudDataTypes): string { if (param === null || param === undefined) { diff --git a/test/connection-tls.test.ts b/test/connection-tls.test.ts index 8e2107b..11159de 100644 --- a/test/connection-tls.test.ts +++ b/test/connection-tls.test.ts @@ -3,7 +3,9 @@ */ import { SQLiteCloudError } from '../src/index' -import { SQLiteCloudConnection, anonimizeCommand } from '../src/connection' +import { SQLiteCloudConnection } from '../src/connection' +import { SQLiteCloudTlsConnection } from '../src/connection-tls' +import { anonimizeCommand } from '../src/utilities' import { CHINOOK_DATABASE_URL, INSECURE_DATABASE_URL, @@ -54,7 +56,7 @@ describe('connection-tls', () => { it('should connect with config object string', done => { const configObj = getChinookConfig() - const conn = new SQLiteCloudConnection(configObj, error => { + const conn = new SQLiteCloudTlsConnection(configObj, error => { expect(error).toBeNull() expect(conn.connected).toBe(true) @@ -73,7 +75,7 @@ describe('connection-tls', () => { done() } - const conn = new SQLiteCloudConnection(CHINOOK_DATABASE_URL, error => { + const conn = new SQLiteCloudTlsConnection(CHINOOK_DATABASE_URL, error => { expect(error).toBeNull() expect(conn.connected).toBe(true) @@ -89,7 +91,7 @@ describe('connection-tls', () => { it('should connect with insecure connection string', done => { if (INSECURE_DATABASE_URL) { expect(INSECURE_DATABASE_URL).toBeDefined() - const conn = new SQLiteCloudConnection(INSECURE_DATABASE_URL, error => { + const conn = new SQLiteCloudTlsConnection(INSECURE_DATABASE_URL, error => { expect(error).toBeNull() expect(conn.connected).toBe(true) @@ -100,9 +102,6 @@ describe('connection-tls', () => { }) }) expect(conn).toBeDefined() - } else { - console.warn(`INSECURE_DATABASE_URL is not defined, ?insecure= connection will not be tested`) - done() } }) @@ -113,7 +112,7 @@ describe('connection-tls', () => { delete testingConfig.password try { - const conn = new SQLiteCloudConnection(testingConfig) + const conn = new SQLiteCloudTlsConnection(testingConfig) } catch (error) { expect(error).toBeDefined() expect(error).toBeInstanceOf(SQLiteCloudError) diff --git a/test/connection-ws.test.ts b/test/connection-ws.test.ts index ad1b6e2..d36520e 100644 --- a/test/connection-ws.test.ts +++ b/test/connection-ws.test.ts @@ -3,8 +3,8 @@ */ import { SQLiteCloudError } from '../src/index' -import { SQLiteCloudConnection, anonimizeCommand } from '../src/connection' -import { parseConnectionString } from '../src/utilities' +import { SQLiteCloudConnection } from '../src/connection' +import { SQLiteCloudWebsocketConnection } from '../src/connection-ws' import { // CHINOOK_DATABASE_URL, @@ -36,7 +36,7 @@ describe('connection-ws', () => { it('should connect with config object string', done => { const configObj = getChinookConfig() configObj.useWebsocket = true - const connection = new SQLiteCloudConnection(configObj) + const connection = new SQLiteCloudWebsocketConnection(configObj) expect(connection).toBeDefined() connection.sendCommands('TEST STRING', (error, results) => { connection.close() @@ -51,8 +51,8 @@ describe('connection-ws', () => { configObj.password = 'wrongpassword' configObj.useWebsocket = true - // should attemp connection and return error - const connection = new SQLiteCloudConnection(configObj) + // should attempt connection and return error + const connection = new SQLiteCloudWebsocketConnection(configObj) expect(connection).toBeDefined() connection.sendCommands('TEST STRING', (error, results) => { expect(error).toBeDefined() @@ -71,7 +71,7 @@ describe('connection-ws', () => { done() } - const conn = new SQLiteCloudConnection(CHINOOK_DATABASE_URL, error => { + const conn = new SQLiteCloudWebsocketConnection(CHINOOK_DATABASE_URL, error => { expect(error).toBeNull() expect(conn.connected).toBe(true) diff --git a/test/shared.ts b/test/shared.ts index c3a17c6..9ff7cc1 100644 --- a/test/shared.ts +++ b/test/shared.ts @@ -8,6 +8,9 @@ import { Database } from '../src/database' import { ResultsCallback, SQLiteCloudConfig } from '../src/types' import { parseConnectionString } from '../src/utilities' +import { SQLiteCloudTlsConnection } from '../src/connection-tls' +import { SQLiteCloudWebsocketConnection } from '../src/connection-ws' + import * as dotenv from 'dotenv' import { SQLiteCloudConnection } from '../src' dotenv.config() @@ -100,13 +103,13 @@ export function getChinookWebsocketConnection(callback?: ResultsCallback, extraC useWebsocket: true, gatewayUrl: GATEWAY_URL } - const chinookConnection = new SQLiteCloudConnection(chinookConfig, callback) + const chinookConnection = new SQLiteCloudWebsocketConnection(chinookConfig, callback) return chinookConnection } export function getChinookTlsConnection(callback?: ResultsCallback, extraConfig?: Partial): SQLiteCloudConnection { const chinookConfig = getChinookConfig(CHINOOK_DATABASE_URL, extraConfig) - return new SQLiteCloudConnection(chinookConfig, callback) + return new SQLiteCloudTlsConnection(chinookConfig, callback) } /** Returns a chinook.db connection, caller is responsible for closing the database */ From c4f06bf1ef4bdaff723c1e011d607bdb52468f20 Mon Sep 17 00:00:00 2001 From: Gionata Mettifogo Date: Tue, 13 Feb 2024 12:45:38 +0100 Subject: [PATCH 02/10] Moving gateway to drivers repo --- package-lock.json | 899 +++++++++++++++++++++++++++- package.json | 10 +- public/drivers.html | 94 +++ public/favicon.ico | Bin 0 -> 15406 bytes public/index.html | 110 ++++ public/sqlitecloud.v0.0.37.dev.js | 597 ++++++++++++++++++ public/sqlitecloud.v0.0.37.js | 1 + src/{ => drivers}/connection-tls.ts | 0 src/{ => drivers}/connection-ws.ts | 0 src/{ => drivers}/connection.ts | 2 +- src/{ => drivers}/database.ts | 0 src/{ => drivers}/protocol.ts | 0 src/{ => drivers}/queue.ts | 0 src/{ => drivers}/rowset.ts | 0 src/{ => drivers}/statement.ts | 0 src/{ => drivers}/types.ts | 0 src/{ => drivers}/utilities.ts | 1 + src/gateway/connection-bun.test.ts | 244 ++++++++ src/gateway/connection-bun.ts | 238 ++++++++ src/gateway/gateway.ts | 270 +++++++++ src/gateway/shared.ts | 37 ++ src/index.ts | 19 +- test/connection-tls.test.ts | 6 +- test/connection-ws.test.ts | 4 +- test/database.test.ts | 2 +- test/shared.ts | 10 +- test/statement.test.ts | 2 +- test/utilities.test.ts | 2 +- tsconfig.json | 5 +- 29 files changed, 2511 insertions(+), 42 deletions(-) create mode 100644 public/drivers.html create mode 100644 public/favicon.ico create mode 100644 public/index.html create mode 100644 public/sqlitecloud.v0.0.37.dev.js create mode 100644 public/sqlitecloud.v0.0.37.js rename src/{ => drivers}/connection-tls.ts (100%) rename src/{ => drivers}/connection-ws.ts (100%) rename src/{ => drivers}/connection.ts (97%) rename src/{ => drivers}/database.ts (100%) rename src/{ => drivers}/protocol.ts (100%) rename src/{ => drivers}/queue.ts (100%) rename src/{ => drivers}/rowset.ts (100%) rename src/{ => drivers}/statement.ts (100%) rename src/{ => drivers}/types.ts (100%) rename src/{ => drivers}/utilities.ts (99%) create mode 100644 src/gateway/connection-bun.test.ts create mode 100644 src/gateway/connection-bun.ts create mode 100644 src/gateway/gateway.ts create mode 100644 src/gateway/shared.ts diff --git a/package-lock.json b/package-lock.json index 187086e..4336119 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,19 +1,23 @@ { - "name": "sqlitecloud-js", - "version": "0.0.33", + "name": "@sqlitecloud/drivers", + "version": "0.0.41", "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "sqlitecloud-js", - "version": "0.0.33", + "name": "@sqlitecloud/drivers", + "version": "0.0.41", "license": "MIT", "dependencies": { "eventemitter3": "^5.0.1", + "express": "^4.18.2", "lz4js": "^0.2.0", + "socket.io": "^4.7.4", "socket.io-client": "^4.7.4" }, "devDependencies": { + "@types/bun": "^1.0.5", + "@types/express": "^4.17.21", "@types/jest": "^29.5.11", "@types/lz4": "^0.6.4", "@types/node": "^12.20.55", @@ -1553,6 +1557,47 @@ "@babel/types": "^7.20.7" } }, + "node_modules/@types/body-parser": { + "version": "1.19.5", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", + "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", + "dev": true, + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/bun": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/bun/-/bun-1.0.5.tgz", + "integrity": "sha512-c14fs5QLLanldcZpX/GjIEKeo++NDzOlixUZ7IUWzN7AoBTisYyWxaxdXNhpAP5I1mPcd92Zagq8sdgTnUXWjg==", + "dev": true, + "dependencies": { + "bun-types": "1.0.26" + } + }, + "node_modules/@types/connect": { + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==" + }, + "node_modules/@types/cors": { + "version": "2.8.17", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.17.tgz", + "integrity": "sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/eslint": { "version": "8.56.2", "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.2.tgz", @@ -1579,6 +1624,30 @@ "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", "dev": true }, + "node_modules/@types/express": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", + "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", + "dev": true, + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "4.17.43", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.43.tgz", + "integrity": "sha512-oaYtiBirUOPQGSWNGPWnzyAFJ0BP3cwvN4oWZQY+zUBwpVIGsKUkpBpSztp74drYcjavs7SKFZ4DX1V2QeN8rg==", + "dev": true, + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, "node_modules/@types/graceful-fs": { "version": "4.1.9", "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", @@ -1588,6 +1657,12 @@ "@types/node": "*" } }, + "node_modules/@types/http-errors": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", + "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", + "dev": true + }, "node_modules/@types/istanbul-lib-coverage": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", @@ -1637,18 +1712,65 @@ "@types/node": "*" } }, + "node_modules/@types/mime": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", + "dev": true + }, "node_modules/@types/node": { "version": "12.20.55", "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", - "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==", + "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==" + }, + "node_modules/@types/qs": { + "version": "6.9.11", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.11.tgz", + "integrity": "sha512-oGk0gmhnEJK4Yyk+oI7EfXsLayXatCWPHary1MtcmbAifkobT9cM9yutG/hZKIseOU0MqbIwQ/u2nn/Gb+ltuQ==", + "dev": true + }, + "node_modules/@types/range-parser": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", "dev": true }, + "node_modules/@types/send": { + "version": "0.17.4", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", + "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", + "dev": true, + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "1.15.5", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.5.tgz", + "integrity": "sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ==", + "dev": true, + "dependencies": { + "@types/http-errors": "*", + "@types/mime": "*", + "@types/node": "*" + } + }, "node_modules/@types/stack-utils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", "dev": true }, + "node_modules/@types/ws": { + "version": "8.5.10", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.10.tgz", + "integrity": "sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/yargs": { "version": "17.0.31", "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.31.tgz", @@ -2029,6 +2151,18 @@ "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", "dev": true }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/acorn": { "version": "7.4.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", @@ -2236,6 +2370,11 @@ "sprintf-js": "~1.0.2" } }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" + }, "node_modules/array-union": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", @@ -2376,6 +2515,61 @@ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, + "node_modules/base64id": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", + "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", + "engines": { + "node": "^4.5.0 || >= 5.9" + } + }, + "node_modules/body-parser": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -2457,6 +2651,33 @@ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true }, + "node_modules/bun-types": { + "version": "1.0.26", + "resolved": "https://registry.npmjs.org/bun-types/-/bun-types-1.0.26.tgz", + "integrity": "sha512-VcSj+SCaWIcMb0uSGIAtr8P92zq9q+unavcQmx27fk6HulCthXHBVrdGuXxAZbFtv7bHVjizRzR2mk9r/U8Nkg==", + "dev": true, + "dependencies": { + "@types/node": "~20.11.3", + "@types/ws": "~8.5.10" + } + }, + "node_modules/bun-types/node_modules/@types/node": { + "version": "20.11.17", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.17.tgz", + "integrity": "sha512-QmgQZGWu1Yw9TDyAP9ZzpFJKynYNeOvwMJmaxABfieQoVoiVOS6MN1WSpqpRcbeA5+RW82kraAVxCCJg+780Qw==", + "dev": true, + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/cacache": { "version": "15.3.0", "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", @@ -2507,6 +2728,24 @@ "dev": true, "optional": true }, + "node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -2760,12 +2999,56 @@ "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", "dev": true }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/convert-source-map": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", "dev": true }, + "node_modules/cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" + }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, "node_modules/create-jest": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", @@ -2852,12 +3135,46 @@ "node": ">=0.10.0" } }, + "node_modules/define-data-property": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.3.tgz", + "integrity": "sha512-h3GBouC+RPtNX2N0hHVLo2ZwPYurq8mLmXpOLTsw71gr7lHt5VaI4vVkDUNOfiWmm48JEXe3VM7PmLX45AMmmg==", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/delegates": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", "dev": true }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, "node_modules/detect-libc": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.2.tgz", @@ -2930,6 +3247,11 @@ "url": "https://github.com/motdotla/dotenv?sponsor=1" } }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + }, "node_modules/electron-to-chromium": { "version": "1.4.578", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.578.tgz", @@ -2948,6 +3270,14 @@ "url": "https://github.com/sindresorhus/emittery?sponsor=1" } }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/encoding": { "version": "0.1.13", "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", @@ -2958,6 +3288,26 @@ "iconv-lite": "^0.6.2" } }, + "node_modules/engine.io": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.5.4.tgz", + "integrity": "sha512-KdVSDKhVKyOi+r5uEabrDLZw2qXStVvCsEB/LN3mw4WFi6Gx50jTyuxYVCwAAC0U46FdnzP/ScKRBTXb/NiEOg==", + "dependencies": { + "@types/cookie": "^0.4.1", + "@types/cors": "^2.8.12", + "@types/node": ">=10.0.0", + "accepts": "~1.3.4", + "base64id": "2.0.0", + "cookie": "~0.4.1", + "cors": "~2.8.5", + "debug": "~4.3.1", + "engine.io-parser": "~5.2.1", + "ws": "~8.11.0" + }, + "engines": { + "node": ">=10.2.0" + } + }, "node_modules/engine.io-client": { "version": "6.5.3", "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.5.3.tgz", @@ -2978,6 +3328,14 @@ "node": ">=10.0.0" } }, + "node_modules/engine.io/node_modules/cookie": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/enhanced-resolve": { "version": "5.15.0", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", @@ -3042,6 +3400,25 @@ "is-arrayish": "^0.2.1" } }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/es-module-lexer": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.4.1.tgz", @@ -3057,6 +3434,11 @@ "node": ">=6" } }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + }, "node_modules/escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", @@ -3424,6 +3806,14 @@ "node": ">=0.10.0" } }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/eventemitter3": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", @@ -3486,6 +3876,60 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, + "node_modules/express": { + "version": "4.18.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.1", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -3577,6 +4021,36 @@ "node": ">=8" } }, + "node_modules/finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, "node_modules/find-up": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", @@ -3619,6 +4093,22 @@ "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", "dev": true }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/fs-minipass": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", @@ -3655,7 +4145,6 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -3733,6 +4222,24 @@ "node": "6.* || 8.* || >= 10.*" } }, + "node_modules/get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/get-package-type": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", @@ -3827,6 +4334,17 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/graceful-fs": { "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", @@ -3863,6 +4381,39 @@ "node": ">=8" } }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/has-unicode": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", @@ -3873,7 +4424,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", - "dev": true, "dependencies": { "function-bind": "^1.1.2" }, @@ -3894,6 +4444,21 @@ "dev": true, "optional": true }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/http-proxy-agent": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", @@ -4037,8 +4602,7 @@ "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "node_modules/interpret": { "version": "3.1.1", @@ -4056,6 +4620,14 @@ "dev": true, "optional": true }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "engines": { + "node": ">= 0.10" + } + }, "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", @@ -5141,6 +5713,19 @@ "node": ">= 12" } }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" + }, "node_modules/merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", @@ -5156,6 +5741,14 @@ "node": ">= 8" } }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/micromatch": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", @@ -5169,11 +5762,21 @@ "node": ">=8.6" } }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/mime-db": { "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true, "engines": { "node": ">= 0.6" } @@ -5182,7 +5785,6 @@ "version": "2.1.35", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dev": true, "dependencies": { "mime-db": "1.52.0" }, @@ -5354,8 +5956,6 @@ "version": "0.6.3", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "dev": true, - "optional": true, "engines": { "node": ">= 0.6" } @@ -5563,11 +6163,29 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dev": true, "engines": { "node": ">=0.10.0" } }, + "node_modules/object-inspect": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -5706,6 +6324,14 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -5739,6 +6365,11 @@ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" + }, "node_modules/path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", @@ -5892,6 +6523,18 @@ "node": ">= 6" } }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, "node_modules/punycode": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", @@ -5917,6 +6560,20 @@ } ] }, + "node_modules/qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -5946,6 +6603,39 @@ "safe-buffer": "^5.1.0" } }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/raw-body/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/react-is": { "version": "18.2.0", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", @@ -6126,7 +6816,6 @@ "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, "funding": [ { "type": "github", @@ -6145,9 +6834,7 @@ "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true, - "optional": true + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "node_modules/schema-utils": { "version": "3.3.0", @@ -6200,6 +6887,47 @@ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, + "node_modules/send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, "node_modules/serialize-javascript": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", @@ -6209,12 +6937,47 @@ "randombytes": "^2.1.0" } }, + "node_modules/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, "node_modules/set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", "dev": true }, + "node_modules/set-function-length": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.1.tgz", + "integrity": "sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g==", + "dependencies": { + "define-data-property": "^1.1.2", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.3", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, "node_modules/shallow-clone": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", @@ -6260,6 +7023,23 @@ "vscode-textmate": "^8.0.0" } }, + "node_modules/side-channel": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.5.tgz", + "integrity": "sha512-QcgiIWV4WV7qWExbN5llt6frQB/lBven9pqliLXfGPB+K9ZYXxDozp0wLkHS24kWCm+6YXH/f0HhnObZnZOBnQ==", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/signal-exit": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", @@ -6292,6 +7072,31 @@ "npm": ">= 3.0.0" } }, + "node_modules/socket.io": { + "version": "4.7.4", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.7.4.tgz", + "integrity": "sha512-DcotgfP1Zg9iP/dH9zvAQcWrE0TtbMVwXmlV4T4mqsvY+gw+LqUGPfx2AoVyRk0FLME+GQhufDMyacFmw7ksqw==", + "dependencies": { + "accepts": "~1.3.4", + "base64id": "~2.0.0", + "cors": "~2.8.5", + "debug": "~4.3.2", + "engine.io": "~6.5.2", + "socket.io-adapter": "~2.5.2", + "socket.io-parser": "~4.2.4" + }, + "engines": { + "node": ">=10.2.0" + } + }, + "node_modules/socket.io-adapter": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.2.tgz", + "integrity": "sha512-87C3LO/NOMc+eMcpcxUBebGjkpMDkNBS9tf7KJqcDsmL936EChtVva71Dw2q4tQcuVC+hAUy4an2NO/sYXmwRA==", + "dependencies": { + "ws": "~8.11.0" + } + }, "node_modules/socket.io-client": { "version": "4.7.4", "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.7.4.tgz", @@ -6430,6 +7235,14 @@ "node": ">=8" } }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", @@ -6793,6 +7606,14 @@ "node": ">=8.0" } }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "engines": { + "node": ">=0.6" + } + }, "node_modules/tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", @@ -6951,6 +7772,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/typedoc": { "version": "0.25.3", "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.25.3.tgz", @@ -7034,6 +7867,12 @@ "node": ">=0.8.0" } }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "dev": true + }, "node_modules/unique-filename": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", @@ -7054,6 +7893,14 @@ "imurmurhash": "^0.1.4" } }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/update-browserslist-db": { "version": "1.0.13", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", @@ -7099,6 +7946,14 @@ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "dev": true }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "engines": { + "node": ">= 0.4.0" + } + }, "node_modules/v8-compile-cache": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.4.0.tgz", @@ -7125,6 +7980,14 @@ "node": ">=10.12.0" } }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/vscode-oniguruma": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.7.0.tgz", diff --git a/package.json b/package.json index 5ca460c..5066154 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@sqlitecloud/drivers", - "version": "0.0.41", + "version": "0.0.50", "description": "SQLiteCloud drivers for Typescript/Javascript in edge, web and node clients", "main": "./lib/index.js", "types": "./lib/index.d.ts", @@ -14,7 +14,9 @@ "prettier": "prettier --write 'src/**/*'", "lint": "eslint ./src/ --fix && tsc --noEmit", "typedoc": "rm -rf ./docs/ && typedoc --out docs && typedoc --plugin typedoc-plugin-markdown --out docs/markdown", - "npmgui": "npx npm-gui@latest" + "npmgui": "npx npm-gui@latest", + "gateway-dev": "bun --watch ./src/gateway/gateway.ts", + "gateway-test": "bun test ./src/gateway/connection-bun.test.ts --watch" }, "repository": { "type": "git", @@ -43,10 +45,14 @@ "homepage": "https://github.com/sqlitecloud/sqlitecloud-js#readme", "dependencies": { "eventemitter3": "^5.0.1", + "express": "^4.18.2", "lz4js": "^0.2.0", + "socket.io": "^4.7.4", "socket.io-client": "^4.7.4" }, "devDependencies": { + "@types/bun": "^1.0.5", + "@types/express": "^4.17.21", "@types/jest": "^29.5.11", "@types/lz4": "^0.6.4", "@types/node": "^12.20.55", diff --git a/public/drivers.html b/public/drivers.html new file mode 100644 index 0000000..1bee208 --- /dev/null +++ b/public/drivers.html @@ -0,0 +1,94 @@ + + + + + Driver | SQLite Cloud + + + + + +

SQLite Cloud Driver

+ + + +
+
connectionString:
+ +
sql:
+ +
+ + +

Results:

+
    + + + + diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..2e9262854c2104d59c8aa946989ee45a76837589 GIT binary patch literal 15406 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 Rzc+^W&uxD0f#&Fe{{V-mV`cyV literal 0 HcmV?d00001 diff --git a/public/index.html b/public/index.html new file mode 100644 index 0000000..6484e96 --- /dev/null +++ b/public/index.html @@ -0,0 +1,110 @@ + + + + + Gateway | SQLite Cloud + + + + +

    SQLite Cloud Gateway

    +

    Disconnected

    + + +
    +
    connectionString:
    + +
    sql:
    + +
    + + +

    Messages:

    +
      + + + + diff --git a/public/sqlitecloud.v0.0.37.dev.js b/public/sqlitecloud.v0.0.37.dev.js new file mode 100644 index 0000000..249dff8 --- /dev/null +++ b/public/sqlitecloud.v0.0.37.dev.js @@ -0,0 +1,597 @@ +/* + * ATTENTION: The "eval" devtool has been used (maybe by default in mode: "development"). + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +(function webpackUniversalModuleDefinition(root, factory) { + if(typeof exports === 'object' && typeof module === 'object') + module.exports = factory(); + else if(typeof define === 'function' && define.amd) + define([], factory); + else if(typeof exports === 'object') + exports["sqlitecloud"] = factory(); + else + root["sqlitecloud"] = factory(); +})(this, () => { +return /******/ (() => { // webpackBootstrap +/******/ var __webpack_modules__ = ({ + +/***/ "./lib/connection.js": +/*!***************************!*\ + !*** ./lib/connection.js ***! + \***************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; +eval("\n/**\n * connection.ts - handles low level communication with sqlitecloud server\n */\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.getInitializationCommands = exports.anonimizeError = exports.anonimizeCommand = exports.OperationsQueue = exports.SQLiteCloudConnection = exports.DEFAULT_PORT = exports.DEFAULT_TIMEOUT = void 0;\nconst types_1 = __webpack_require__(/*! ./types */ \"./lib/types.js\");\nconst utilities_1 = __webpack_require__(/*! ./utilities */ \"./lib/utilities.js\");\n/** Default timeout value for queries */\nexports.DEFAULT_TIMEOUT = 300 * 1000;\n/** Default tls connection port */\nexports.DEFAULT_PORT = 9960;\n/**\n * Base class for SQLiteCloudConnection handles basics and defines methods.\n * Actual connection management and communication with the server in concrete classes.\n */\nclass SQLiteCloudConnection {\n /** Parse and validate provided connectionString or configuration */\n constructor(config, callback) {\n /** Operations are serialized by waiting an any pending promises */\n this.operations = new OperationsQueue();\n if (typeof config === 'string') {\n this.config = this.validateConfiguration({ connectionString: config });\n }\n else {\n this.config = this.validateConfiguration(config);\n }\n // connect transport layer to server\n this.connect(callback);\n }\n //\n // public properties\n //\n /** True if connection is open */\n get connected() {\n var _a;\n return ((_a = this.transport) === null || _a === void 0 ? void 0 : _a.connected) || false;\n }\n /** Connect will establish a tls or websocket transport to the server based on configuration and environment */\n connect(callback) {\n this.operations.enqueue(done => {\n var _a, _b;\n // connect using websocket if tls is not supported or if explicitly requested\n if (utilities_1.isBrowser || ((_a = this.config) === null || _a === void 0 ? void 0 : _a.useWebsocket) || ((_b = this.config) === null || _b === void 0 ? void 0 : _b.gatewayUrl)) {\n // socket.io transport works in both node.js and browser environments and connects via SQLite Cloud Gateway\n Promise.resolve().then(() => __importStar(__webpack_require__(/*! ./transport-ws */ \"./lib/transport-ws.js\"))).then(transport => {\n this.transport = new transport.WebSocketTransport();\n this.transport.connect(this.config, error => {\n if (error) {\n console.error(`SQLiteCloudConnection.connect - error while connecting WebSocketTransport: ${error.toString()}`, this.config, error);\n this.close();\n }\n callback === null || callback === void 0 ? void 0 : callback.call(this, error || null);\n done(error);\n });\n })\n .catch(error => {\n done(error);\n });\n }\n else {\n // tls sockets work only in node.js environments\n Promise.resolve().then(() => __importStar(__webpack_require__(/*! ./transport-tls */ \"./lib/transport-tls.js\"))).then(transport => {\n this.transport = new transport.TlsSocketTransport();\n this.transport.connect(this.config, error => {\n if (error) {\n console.error(`SQLiteCloudConnection.connect - error while connecting TlsSocketTransport: ${error.toString()}`, this.config, error);\n this.close();\n }\n callback === null || callback === void 0 ? void 0 : callback.call(this, error || null);\n done(error);\n });\n })\n .catch(error => {\n done(error);\n });\n }\n });\n return this;\n }\n //\n // private methods\n //\n /** Validate configuration, apply defaults, throw if something is missing or misconfigured */\n validateConfiguration(config) {\n if (config.connectionString) {\n config = Object.assign(Object.assign(Object.assign({}, config), (0, utilities_1.parseConnectionString)(config.connectionString)), { connectionString: config.connectionString // keep original connection string\n });\n }\n // apply defaults where needed\n config.port || (config.port = exports.DEFAULT_PORT);\n config.timeout = config.timeout && config.timeout > 0 ? config.timeout : exports.DEFAULT_TIMEOUT;\n config.clientId || (config.clientId = 'SQLiteCloud');\n config.verbose = (0, utilities_1.parseBoolean)(config.verbose);\n config.noBlob = (0, utilities_1.parseBoolean)(config.noBlob);\n config.compression = (0, utilities_1.parseBoolean)(config.compression);\n config.createDatabase = (0, utilities_1.parseBoolean)(config.createDatabase);\n config.nonlinearizable = (0, utilities_1.parseBoolean)(config.nonlinearizable);\n if (!config.username || !config.password || !config.host) {\n console.error('SQLiteCloudConnection.validateConfiguration - missing arguments', config);\n throw new types_1.SQLiteCloudError('The user, password and host arguments must be specified.', { errorCode: 'ERR_MISSING_ARGS' });\n }\n if (!config.connectionString) {\n // build connection string from configuration, values are already validated\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n config.connectionString = `sqlitecloud://${config.username}:${config.password}@${config.host}:${config.port}/${config.database}`;\n }\n return config;\n }\n /** Will log to console if verbose mode is enabled */\n log(message, ...optionalParams) {\n if (this.config.verbose) {\n message = anonimizeCommand(message);\n console.log(`${new Date().toISOString()} ${this.config.clientId}: ${message}`, ...optionalParams);\n }\n }\n //\n // public methods\n //\n /** Enable verbose logging for debug purposes */\n verbose() {\n this.config.verbose = true;\n }\n /** Will enquee a command to be executed and callback with the resulting rowset/result/error */\n sendCommands(commands, callback) {\n this.operations.enqueue(done => {\n if (this.transport) {\n this.transport.processCommands(commands, (error, result) => {\n callback === null || callback === void 0 ? void 0 : callback.call(this, error, result);\n done(error);\n });\n }\n else {\n const error = new types_1.SQLiteCloudError('Connection not established', { errorCode: 'ERR_CONNECTION_NOT_ESTABLISHED' });\n callback === null || callback === void 0 ? void 0 : callback.call(this, error);\n done(error);\n }\n });\n return this;\n }\n /** Disconnect from server, release connection. */\n close() {\n var _a;\n this.operations.clear();\n (_a = this.transport) === null || _a === void 0 ? void 0 : _a.close();\n this.transport = undefined;\n return this;\n }\n}\nexports.SQLiteCloudConnection = SQLiteCloudConnection;\nclass OperationsQueue {\n constructor() {\n this.queue = [];\n this.isProcessing = false;\n }\n /** Add operations to the queue, process immediately if possible, else wait for previous operations to complete */\n enqueue(operation) {\n this.queue.push(operation);\n if (!this.isProcessing) {\n this.processNext();\n }\n }\n /** Clear the queue */\n clear() {\n this.queue = [];\n this.isProcessing = false;\n }\n /** Process the next operation in the queue */\n processNext() {\n if (this.queue.length === 0) {\n this.isProcessing = false;\n return;\n }\n this.isProcessing = true;\n const operation = this.queue.shift();\n operation === null || operation === void 0 ? void 0 : operation(() => {\n // could receive (error) => { ...\n // if (error) {\n // console.warn('OperationQueue.processNext - error in operation', error)\n // }\n // process the next operation in the queue\n this.processNext();\n });\n }\n}\nexports.OperationsQueue = OperationsQueue;\n//\n// utility functions\n//\n/** Messages going to the server are sometimes logged when error conditions occour and need to be stripped of user credentials */\nfunction anonimizeCommand(message) {\n // hide password in AUTH command if needed\n message = message.replace(/USER \\S+/, 'USER ******');\n message = message.replace(/PASSWORD \\S+?(?=;)/, 'PASSWORD ******');\n message = message.replace(/HASH \\S+?(?=;)/, 'HASH ******');\n return message;\n}\nexports.anonimizeCommand = anonimizeCommand;\n/** Strip message code in error of user credentials */\nfunction anonimizeError(error) {\n if (error === null || error === void 0 ? void 0 : error.message) {\n error.message = anonimizeCommand(error.message);\n }\n return error;\n}\nexports.anonimizeError = anonimizeError;\n/** Initialization commands sent to database when connection is established */\nfunction getInitializationCommands(config) {\n // first user authentication, then all other commands\n let commands = `AUTH USER ${config.username || ''} ${config.passwordHashed ? 'HASH' : 'PASSWORD'} ${config.password || ''}; `;\n if (config.database) {\n if (config.createDatabase && !config.dbMemory) {\n commands += `CREATE DATABASE ${config.database} IF NOT EXISTS; `;\n }\n commands += `USE DATABASE ${config.database}; `;\n }\n if (config.compression) {\n commands += 'SET CLIENT KEY COMPRESSION TO 1; ';\n }\n if (config.nonlinearizable) {\n commands += 'SET CLIENT KEY NONLINEARIZABLE TO 1; ';\n }\n if (config.noBlob) {\n commands += 'SET CLIENT KEY NOBLOB TO 1; ';\n }\n if (config.maxData) {\n commands += `SET CLIENT KEY MAXDATA TO ${config.maxData}; `;\n }\n if (config.maxRows) {\n commands += `SET CLIENT KEY MAXROWS TO ${config.maxRows}; `;\n }\n if (config.maxRowset) {\n commands += `SET CLIENT KEY MAXROWSET TO ${config.maxRowset}; `;\n }\n return commands;\n}\nexports.getInitializationCommands = getInitializationCommands;\n\n\n//# sourceURL=webpack://sqlitecloud/./lib/connection.js?"); + +/***/ }), + +/***/ "./lib/database.js": +/*!*************************!*\ + !*** ./lib/database.js ***! + \*************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; +eval("\n//\n// database.ts - database driver api, implements and extends sqlite3\n//\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.Database = void 0;\n// Trying as much as possible to be a drop-in replacement for SQLite3 API\n// https://github.com/TryGhost/node-sqlite3/wiki/API\n// https://github.com/TryGhost/node-sqlite3\n// https://github.com/TryGhost/node-sqlite3/blob/master/lib/sqlite3.d.ts\n/* eslint-disable @typescript-eslint/no-unused-vars */\n/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\nconst connection_1 = __webpack_require__(/*! ./connection */ \"./lib/connection.js\");\nconst rowset_1 = __webpack_require__(/*! ./rowset */ \"./lib/rowset.js\");\nconst types_1 = __webpack_require__(/*! ./types */ \"./lib/types.js\");\nconst utilities_1 = __webpack_require__(/*! ./utilities */ \"./lib/utilities.js\");\nconst statement_1 = __webpack_require__(/*! ./statement */ \"./lib/statement.js\");\nconst eventemitter3_1 = __importDefault(__webpack_require__(/*! eventemitter3 */ \"./node_modules/eventemitter3/index.js\"));\n// Uses eventemitter3 instead of node events for browser compatibility\n// https://github.com/primus/eventemitter3\n/**\n * Creating a Database object automatically opens a connection to the SQLite database.\n * When the connection is established the Database object emits an open event and calls\n * the optional provided callback. If the connection cannot be established an error event\n * will be emitted and the optional callback is called with the error information.\n */\nclass Database extends eventemitter3_1.default {\n constructor(config, mode, callback) {\n super();\n /** Database connections */\n this.connections = [];\n this.config = typeof config === 'string' ? { connectionString: config } : config;\n // mode is optional and so is callback\n // https://github.com/TryGhost/node-sqlite3/wiki/API#new-sqlite3databasefilename--mode--callback\n if (typeof mode === 'function') {\n callback = mode;\n mode = undefined;\n }\n // mode is ignored for now\n // opens first connection to the database automatically\n this.getConnection(callback);\n }\n //\n // private methods\n //\n /** Returns first available connection from connection pool */\n getConnection(callback) {\n var _a;\n // TODO sqlitecloud-js / implement database connection pool #10\n if (((_a = this.connections) === null || _a === void 0 ? void 0 : _a.length) > 0) {\n callback === null || callback === void 0 ? void 0 : callback.call(this, null, this.connections[0]);\n }\n else {\n this.connections.push(new connection_1.SQLiteCloudConnection(this.config, error => {\n if (error) {\n this.handleError(this.connections[0], error, callback);\n }\n else {\n console.assert;\n callback === null || callback === void 0 ? void 0 : callback.call(this, null, this.connections[0]);\n this.emitEvent('open');\n }\n }));\n }\n }\n /** Handles an error by closing the connection, calling the callback and/or emitting an error event */\n handleError(connection, error, callback) {\n // an errored connection is thrown out\n if (connection) {\n this.connections = this.connections.filter(c => c !== connection);\n connection.close();\n }\n if (callback) {\n callback.call(this, error);\n }\n else {\n this.emitEvent('error', error);\n }\n }\n /**\n * Some queries like inserts or updates processed via run or exec may generate\n * an empty result (eg. no data was selected), but still have some metadata.\n * For example the server may pass the id of the last row that was modified.\n * In this case the callback results should be empty but the context may contain\n * additional information like lastID, etc.\n * @see https://github.com/TryGhost/node-sqlite3/wiki/API#runsql--param---callback\n * @param results Results received from the server\n * @returns A context object if one makes sense, otherwise undefined\n */\n processContext(results) {\n if (results) {\n if (Array.isArray(results) && results.length > 0) {\n switch (results[0]) {\n case types_1.SQLiteCloudArrayType.ARRAY_TYPE_SQLITE_EXEC:\n return {\n lastID: results[2],\n changes: results[3],\n totalChanges: results[4],\n finalized: results[5] // FINALIZED\n };\n }\n }\n }\n return undefined;\n }\n /** Emits given event with optional arguments on the next tick so callbacks can complete first */\n emitEvent(event, ...args) {\n setTimeout(() => {\n this.emit(event, ...args);\n }, 0);\n }\n //\n // public methods\n //\n /**\n * Returns the configuration with which this database was opened.\n * The configuration is readonly and cannot be changed as there may\n * be multiple connections using the same configuration.\n * @returns {SQLiteCloudConfig} A configuration object\n */\n getConfiguration() {\n return JSON.parse(JSON.stringify(this.config));\n }\n /** Enable verbose mode */\n verbose() {\n this.config.verbose = true;\n for (const connection of this.connections) {\n connection.verbose();\n }\n return this;\n }\n /** Set a configuration option for the database */\n configure(_option, _value) {\n // https://github.com/TryGhost/node-sqlite3/wiki/API#configureoption-value\n return this;\n }\n run(sql, ...params) {\n const { args, callback } = (0, utilities_1.popCallback)(params);\n const preparedSql = (args === null || args === void 0 ? void 0 : args.length) > 0 ? (0, utilities_1.prepareSql)(sql, ...args) : sql;\n this.getConnection((error, connection) => {\n if (error || !connection) {\n this.handleError(null, error, callback);\n }\n else {\n connection.sendCommands(preparedSql, (error, results) => {\n if (error) {\n this.handleError(connection, error, callback);\n }\n else {\n // context may include id of last row inserted, total changes, etc...\n const context = this.processContext(results);\n callback === null || callback === void 0 ? void 0 : callback.call(context || this, null, context ? undefined : results);\n }\n });\n }\n });\n return this;\n }\n get(sql, ...params) {\n const { args, callback } = (0, utilities_1.popCallback)(params);\n const preparedSql = (args === null || args === void 0 ? void 0 : args.length) > 0 ? (0, utilities_1.prepareSql)(sql, ...args) : sql;\n this.getConnection((error, connection) => {\n if (error || !connection) {\n this.handleError(null, error, callback);\n }\n else {\n connection.sendCommands(preparedSql, (error, results) => {\n if (error) {\n this.handleError(connection, error, callback);\n }\n else {\n if (results && results instanceof rowset_1.SQLiteCloudRowset && results.length > 0) {\n callback === null || callback === void 0 ? void 0 : callback.call(this, null, results[0]);\n }\n else {\n callback === null || callback === void 0 ? void 0 : callback.call(this, null);\n }\n }\n });\n }\n });\n return this;\n }\n all(sql, ...params) {\n const { args, callback } = (0, utilities_1.popCallback)(params);\n const preparedSql = (args === null || args === void 0 ? void 0 : args.length) > 0 ? (0, utilities_1.prepareSql)(sql, ...args) : sql;\n this.getConnection((error, connection) => {\n if (error || !connection) {\n this.handleError(null, error, callback);\n }\n else {\n connection.sendCommands(preparedSql, (error, results) => {\n if (error) {\n this.handleError(connection, error, callback);\n }\n else {\n if (results && results instanceof rowset_1.SQLiteCloudRowset) {\n callback === null || callback === void 0 ? void 0 : callback.call(this, null, results);\n }\n else {\n callback === null || callback === void 0 ? void 0 : callback.call(this, null);\n }\n }\n });\n }\n });\n return this;\n }\n each(sql, ...params) {\n // extract optional parameters and one or two callbacks\n const { args, callback, complete } = (0, utilities_1.popCallback)(params);\n const preparedSql = (args === null || args === void 0 ? void 0 : args.length) > 0 ? (0, utilities_1.prepareSql)(sql, ...args) : sql;\n this.getConnection((error, connection) => {\n if (error || !connection) {\n this.handleError(null, error, callback);\n }\n else {\n connection.sendCommands(preparedSql, (error, rowset) => {\n if (error) {\n this.handleError(connection, error, callback);\n }\n else {\n if (rowset && rowset instanceof rowset_1.SQLiteCloudRowset) {\n if (callback) {\n for (const row of rowset) {\n callback.call(this, null, row);\n }\n }\n if (complete) {\n ;\n complete.call(this, null, rowset.numberOfRows);\n }\n }\n else {\n callback === null || callback === void 0 ? void 0 : callback.call(this, new types_1.SQLiteCloudError('Invalid rowset'));\n }\n }\n });\n }\n });\n return this;\n }\n /**\n * Prepares the SQL statement and optionally binds the specified parameters and\n * calls the callback when done. The function returns a Statement object.\n * When preparing was successful, the first and only argument to the callback\n * is null, otherwise it is the error object. When bind parameters are supplied,\n * they are bound to the prepared statement before calling the callback.\n */\n prepare(sql, ...params) {\n const { args, callback } = (0, utilities_1.popCallback)(params);\n return new statement_1.Statement(this, sql, ...args, callback);\n }\n /**\n * Runs all SQL queries in the supplied string. No result rows are retrieved.\n * The function returns the Database object to allow for function chaining.\n * If a query fails, no subsequent statements will be executed (wrap it in a\n * transaction if you want all or none to be executed). When all statements\n * have been executed successfully, or when an error occurs, the callback\n * function is called, with the first parameter being either null or an error\n * object. When no callback is provided and an error occurs, an error event\n * will be emitted on the database object.\n */\n exec(sql, callback) {\n this.getConnection((error, connection) => {\n if (error || !connection) {\n this.handleError(null, error, callback);\n }\n else {\n connection.sendCommands(sql, (error, results) => {\n if (error) {\n this.handleError(connection, error, callback);\n }\n else {\n const context = this.processContext(results);\n callback === null || callback === void 0 ? void 0 : callback.call(context ? context : this, null);\n }\n });\n }\n });\n return this;\n }\n /**\n * If the optional callback is provided, this function will be called when the\n * database was closed successfully or when an error occurred. The first argument\n * is an error object. When it is null, closing succeeded. If no callback is provided\n * and an error occurred, an error event with the error object as the only parameter\n * will be emitted on the database object. If closing succeeded, a close event with no\n * parameters is emitted, regardless of whether a callback was provided or not.\n */\n close(callback) {\n var _a;\n if (((_a = this.connections) === null || _a === void 0 ? void 0 : _a.length) > 0) {\n for (const connection of this.connections) {\n connection.close();\n }\n }\n callback === null || callback === void 0 ? void 0 : callback.call(this, null);\n this.emitEvent('close');\n }\n /**\n * Loads a compiled SQLite extension into the database connection object.\n * @param path Filename of the extension to load.\n * @param callback If provided, this function will be called when the extension\n * was loaded successfully or when an error occurred. The first argument is an\n * error object. When it is null, loading succeeded. If no callback is provided\n * and an error occurred, an error event with the error object as the only parameter\n * will be emitted on the database object.\n */\n loadExtension(_path, callback) {\n // TODO sqlitecloud-js / implement database loadExtension #17\n if (callback) {\n callback.call(this, new Error('Database.loadExtension - Not implemented'));\n }\n else {\n this.emitEvent('error', new Error('Database.loadExtension - Not implemented'));\n }\n return this;\n }\n /**\n * Allows the user to interrupt long-running queries. Wrapper around\n * sqlite3_interrupt and causes other data-fetching functions to be\n * passed an err with code = sqlite3.INTERRUPT. The database must be\n * open to use this function.\n */\n interrupt() {\n // TODO sqlitecloud-js / implement database interrupt #13\n }\n //\n // extended APIs\n //\n /**\n * Sql is a promise based API for executing SQL statements. You can\n * pass a simple string with a SQL statement or a template string\n * using backticks and parameters in ${parameter} format. These parameters\n * will be properly escaped and quoted like when using a prepared statement.\n * @param sql A sql string or a template string in `backticks` format\n * @returns An array of rows in case of selections or an object with\n * metadata in case of insert, update, delete.\n */\n sql(sql, ...values) {\n return __awaiter(this, void 0, void 0, function* () {\n let preparedSql = '';\n // sql is a TemplateStringsArray, the 'raw' property is specific to TemplateStringsArray\n if (Array.isArray(sql) && 'raw' in sql) {\n sql.forEach((string, i) => {\n preparedSql += string + (i < values.length ? '?' : '');\n });\n preparedSql = (0, utilities_1.prepareSql)(preparedSql, ...values);\n }\n else {\n if (typeof sql === 'string') {\n if ((values === null || values === void 0 ? void 0 : values.length) > 0) {\n preparedSql = (0, utilities_1.prepareSql)(sql, ...values);\n }\n else {\n preparedSql = sql;\n }\n }\n else {\n throw new Error('Invalid sql');\n }\n }\n return new Promise((resolve, reject) => {\n this.getConnection((error, connection) => {\n if (error || !connection) {\n reject(error);\n }\n else {\n connection.sendCommands(preparedSql, (error, results) => {\n if (error) {\n reject(error);\n }\n else {\n // metadata for operations like insert, update, delete?\n const context = this.processContext(results);\n resolve(context ? context : results);\n }\n });\n }\n });\n });\n });\n }\n}\nexports.Database = Database;\n\n\n//# sourceURL=webpack://sqlitecloud/./lib/database.js?"); + +/***/ }), + +/***/ "./lib/index.js": +/*!**********************!*\ + !*** ./lib/index.js ***! + \**********************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; +eval("\n//\n// index.ts - re-export public APIs\n//\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.WebSocketTransport = exports.prepareSql = exports.escapeSqlParameter = exports.SQLiteCloudConnection = exports.SQLiteCloudRow = exports.SQLiteCloudRowset = exports.SQLiteCloudError = exports.Statement = exports.Database = void 0;\nvar database_1 = __webpack_require__(/*! ./database */ \"./lib/database.js\");\nObject.defineProperty(exports, \"Database\", ({ enumerable: true, get: function () { return database_1.Database; } }));\nvar statement_1 = __webpack_require__(/*! ./statement */ \"./lib/statement.js\");\nObject.defineProperty(exports, \"Statement\", ({ enumerable: true, get: function () { return statement_1.Statement; } }));\nvar types_1 = __webpack_require__(/*! ./types */ \"./lib/types.js\");\nObject.defineProperty(exports, \"SQLiteCloudError\", ({ enumerable: true, get: function () { return types_1.SQLiteCloudError; } }));\nvar rowset_1 = __webpack_require__(/*! ./rowset */ \"./lib/rowset.js\");\nObject.defineProperty(exports, \"SQLiteCloudRowset\", ({ enumerable: true, get: function () { return rowset_1.SQLiteCloudRowset; } }));\nObject.defineProperty(exports, \"SQLiteCloudRow\", ({ enumerable: true, get: function () { return rowset_1.SQLiteCloudRow; } }));\nvar connection_1 = __webpack_require__(/*! ./connection */ \"./lib/connection.js\");\nObject.defineProperty(exports, \"SQLiteCloudConnection\", ({ enumerable: true, get: function () { return connection_1.SQLiteCloudConnection; } }));\nvar utilities_1 = __webpack_require__(/*! ./utilities */ \"./lib/utilities.js\");\nObject.defineProperty(exports, \"escapeSqlParameter\", ({ enumerable: true, get: function () { return utilities_1.escapeSqlParameter; } }));\nObject.defineProperty(exports, \"prepareSql\", ({ enumerable: true, get: function () { return utilities_1.prepareSql; } }));\nvar transport_ws_1 = __webpack_require__(/*! ./transport-ws */ \"./lib/transport-ws.js\");\nObject.defineProperty(exports, \"WebSocketTransport\", ({ enumerable: true, get: function () { return transport_ws_1.WebSocketTransport; } }));\n\n\n//# sourceURL=webpack://sqlitecloud/./lib/index.js?"); + +/***/ }), + +/***/ "./lib/rowset.js": +/*!***********************!*\ + !*** ./lib/rowset.js ***! + \***********************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; +eval("\n//\n// rowset.ts\n//\nvar __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _SQLiteCloudRow_rowset, _SQLiteCloudRow_data, _SQLiteCloudRowset_metadata, _SQLiteCloudRowset_data;\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.SQLiteCloudRowset = exports.SQLiteCloudRow = void 0;\nconst types_1 = __webpack_require__(/*! ./types */ \"./lib/types.js\");\n/** A single row in a dataset with values accessible by column name */\nclass SQLiteCloudRow {\n constructor(rowset, columnsNames, data) {\n // rowset is private\n _SQLiteCloudRow_rowset.set(this, void 0);\n // data is private\n _SQLiteCloudRow_data.set(this, void 0);\n __classPrivateFieldSet(this, _SQLiteCloudRow_rowset, rowset, \"f\");\n __classPrivateFieldSet(this, _SQLiteCloudRow_data, data, \"f\");\n for (let i = 0; i < columnsNames.length; i++) {\n this[columnsNames[i]] = data[i];\n }\n }\n /** Returns the rowset that this row belongs to */\n // @ts-expect-error\n getRowset() {\n return __classPrivateFieldGet(this, _SQLiteCloudRow_rowset, \"f\");\n }\n /** Returns rowset data as a plain array of values */\n // @ts-expect-error\n getData() {\n return __classPrivateFieldGet(this, _SQLiteCloudRow_data, \"f\");\n }\n}\nexports.SQLiteCloudRow = SQLiteCloudRow;\n_SQLiteCloudRow_rowset = new WeakMap(), _SQLiteCloudRow_data = new WeakMap();\n/* A set of rows returned by a query */\nclass SQLiteCloudRowset extends Array {\n constructor(metadata, data) {\n super(metadata.numberOfRows);\n /** Metadata contains number of rows and columns, column names, types, etc. */\n _SQLiteCloudRowset_metadata.set(this, void 0);\n /** Actual data organized in rows */\n _SQLiteCloudRowset_data.set(this, void 0);\n // console.assert(data !== undefined && data.length === metadata.numberOfRows * metadata.numberOfColumns, 'Invalid rowset data')\n // console.assert(metadata !== undefined && metadata.columns.length === metadata.numberOfColumns, 'Invalid columns metadata')\n __classPrivateFieldSet(this, _SQLiteCloudRowset_metadata, metadata, \"f\");\n __classPrivateFieldSet(this, _SQLiteCloudRowset_data, data, \"f\");\n // adjust missing column names, duplicate column names, etc.\n const columnNames = this.columnsNames;\n for (let i = 0; i < metadata.numberOfColumns; i++) {\n if (!columnNames[i]) {\n columnNames[i] = `column_${i}`;\n }\n let j = 0;\n while (columnNames.findIndex((name, index) => index !== i && name === columnNames[i]) >= 0) {\n columnNames[i] = `${columnNames[i]}_${j}`;\n j++;\n }\n }\n for (let i = 0, start = 0; i < metadata.numberOfRows; i++, start += metadata.numberOfColumns) {\n this[i] = new SQLiteCloudRow(this, columnNames, data.slice(start, start + metadata.numberOfColumns));\n }\n }\n /**\n * Rowset version is 1 for a rowset with simple column names, 2 for extended metadata\n * @see https://github.com/sqlitecloud/sdk/blob/master/PROTOCOL.md\n */\n get version() {\n return __classPrivateFieldGet(this, _SQLiteCloudRowset_metadata, \"f\").version;\n }\n /** Number of rows in row set */\n get numberOfRows() {\n return __classPrivateFieldGet(this, _SQLiteCloudRowset_metadata, \"f\").numberOfRows;\n }\n /** Number of columns in row set */\n get numberOfColumns() {\n return __classPrivateFieldGet(this, _SQLiteCloudRowset_metadata, \"f\").numberOfColumns;\n }\n /** Array of columns names */\n get columnsNames() {\n return __classPrivateFieldGet(this, _SQLiteCloudRowset_metadata, \"f\").columns.map(column => column.name);\n }\n /** Get rowset metadata */\n get metadata() {\n return __classPrivateFieldGet(this, _SQLiteCloudRowset_metadata, \"f\");\n }\n /** Return value of item at given row and column */\n getItem(row, column) {\n if (row < 0 || row >= this.numberOfRows || column < 0 || column >= this.numberOfColumns) {\n throw new types_1.SQLiteCloudError(`This rowset has ${this.numberOfColumns} columns by ${this.numberOfRows} rows, requested column ${column} and row ${row} is invalid.`);\n }\n return __classPrivateFieldGet(this, _SQLiteCloudRowset_data, \"f\")[row * this.numberOfColumns + column];\n }\n /** Returns a subset of rows from this rowset */\n slice(start, end) {\n // validate and apply boundaries\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/slice\n start = start === undefined ? 0 : start < 0 ? this.numberOfRows + start : start;\n start = Math.min(Math.max(start, 0), this.numberOfRows);\n end = end === undefined ? this.numberOfRows : end < 0 ? this.numberOfRows + end : end;\n end = Math.min(Math.max(start, end), this.numberOfRows);\n const slicedMetadata = Object.assign(Object.assign({}, __classPrivateFieldGet(this, _SQLiteCloudRowset_metadata, \"f\")), { numberOfRows: end - start });\n const slicedData = __classPrivateFieldGet(this, _SQLiteCloudRowset_data, \"f\").slice(start * this.numberOfColumns, end * this.numberOfColumns);\n console.assert(slicedData && slicedData.length === slicedMetadata.numberOfRows * slicedMetadata.numberOfColumns, 'SQLiteCloudRowset.slice - invalid rowset data');\n return new SQLiteCloudRowset(slicedMetadata, slicedData);\n }\n map(fn) {\n const results = [];\n for (let i = 0; i < this.numberOfRows; i++) {\n const row = this[i];\n results.push(fn(row, i, this));\n }\n return results;\n }\n /** Returns an instance of SQLiteCloudRowset where rows have been filtered via given callback */\n filter(fn) {\n const filteredData = [];\n for (let i = 0; i < this.numberOfRows; i++) {\n const row = this[i];\n if (fn(row, i, this)) {\n filteredData.push(...__classPrivateFieldGet(this, _SQLiteCloudRowset_data, \"f\").slice(i * this.numberOfColumns, (i + 1) * this.numberOfColumns));\n }\n }\n return new SQLiteCloudRowset(Object.assign(Object.assign({}, __classPrivateFieldGet(this, _SQLiteCloudRowset_metadata, \"f\")), { numberOfRows: filteredData.length / this.numberOfColumns }), filteredData);\n }\n}\nexports.SQLiteCloudRowset = SQLiteCloudRowset;\n_SQLiteCloudRowset_metadata = new WeakMap(), _SQLiteCloudRowset_data = new WeakMap();\n\n\n//# sourceURL=webpack://sqlitecloud/./lib/rowset.js?"); + +/***/ }), + +/***/ "./lib/statement.js": +/*!**************************!*\ + !*** ./lib/statement.js ***! + \**************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; +eval("\n/**\n * statement.ts\n */\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.Statement = void 0;\nconst utilities_1 = __webpack_require__(/*! ./utilities */ \"./lib/utilities.js\");\n/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\n/** A statement generated by Database.prepare used to prepare SQL with ? bindings */\nclass Statement {\n constructor(database, sql, ...params) {\n const { args, callback } = (0, utilities_1.popCallback)(params);\n this._database = database;\n this._sql = sql;\n if ((args === null || args === void 0 ? void 0 : args.length) > 0) {\n this.bind(...args, callback);\n }\n else {\n callback === null || callback === void 0 ? void 0 : callback.call(this, null);\n }\n }\n /**\n * Binds parameters to the prepared statement and calls the callback when done\n * or when an error occurs. The function returns the Statement object to allow\n * for function chaining. The first and only argument to the callback is null\n * when binding was successful, otherwise it is the error object. Binding parameters\n * with this function completely resets the statement object and row cursor and\n * removes all previously bound parameters, if any. Currently bound parameters\n * are escaped client side and turned into literals before being executed on the server.\n */\n bind(...params) {\n const { args, callback } = (0, utilities_1.popCallback)(params);\n try {\n this._preparedSql = (0, utilities_1.prepareSql)(this._sql, ...args);\n if (callback) {\n callback.call(this, null);\n }\n }\n catch (error) {\n this._preparedSql = undefined;\n if (callback) {\n callback.call(this, error);\n }\n }\n return this;\n }\n run(...params) {\n const { args, callback } = (0, utilities_1.popCallback)(params || []);\n if ((args === null || args === void 0 ? void 0 : args.length) > 0) {\n // apply new bindings then execute\n this.bind(...args, (error) => {\n if (error) {\n callback === null || callback === void 0 ? void 0 : callback.call(this, error);\n }\n else {\n this._database.run(this._preparedSql || '', callback);\n }\n });\n }\n else {\n // execute prepared sql with same bindings\n this._database.run(this._preparedSql || '', callback);\n }\n return this;\n }\n get(...params) {\n const { args, callback } = (0, utilities_1.popCallback)(params || []);\n if ((args === null || args === void 0 ? void 0 : args.length) > 0) {\n // apply new bindings then execute\n this.bind(...args, (error) => {\n if (error) {\n callback === null || callback === void 0 ? void 0 : callback.call(this, error);\n }\n else {\n this._database.get(this._preparedSql || '', callback);\n }\n });\n }\n else {\n // execute prepared sql with same bindings\n this._database.get(this._preparedSql || '', callback);\n }\n return this;\n }\n all(...params) {\n const { args, callback } = (0, utilities_1.popCallback)(params || []);\n if ((args === null || args === void 0 ? void 0 : args.length) > 0) {\n // apply new bindings then execute\n this.bind(...args, (error) => {\n if (error) {\n callback === null || callback === void 0 ? void 0 : callback.call(this, error);\n }\n else {\n this._database.all(this._preparedSql || '', callback);\n }\n });\n }\n else {\n // execute prepared sql with same bindings\n this._database.all(this._preparedSql || '', callback);\n }\n return this;\n }\n each(...params) {\n const { args, callback, complete } = (0, utilities_1.popCallback)(params);\n if ((args === null || args === void 0 ? void 0 : args.length) > 0) {\n // apply new bindings then execute\n this.bind(...args, (error) => {\n if (error) {\n callback === null || callback === void 0 ? void 0 : callback.call(this, error);\n }\n else {\n this._database.each(this._preparedSql || '', callback, complete);\n }\n });\n }\n else {\n // execute prepared sql with same bindings\n this._database.each(this._preparedSql || '', callback, complete);\n }\n return this;\n }\n}\nexports.Statement = Statement;\n\n\n//# sourceURL=webpack://sqlitecloud/./lib/statement.js?"); + +/***/ }), + +/***/ "./lib/transport-tls.js": +/*!******************************!*\ + !*** ./lib/transport-tls.js ***! + \******************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; +eval("\n/**\n * transport-tls.ts - handles low level communication with sqlitecloud server via tls socket and binary protocol\n */\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.TlsSocketTransport = void 0;\nconst types_1 = __webpack_require__(/*! ./types */ \"./lib/types.js\");\nconst rowset_1 = __webpack_require__(/*! ./rowset */ \"./lib/rowset.js\");\nconst connection_1 = __webpack_require__(/*! ./connection */ \"./lib/connection.js\");\nconst connection_2 = __webpack_require__(/*! ./connection */ \"./lib/connection.js\");\nconst tls_1 = __importDefault(__webpack_require__(/*! tls */ \"?f22e\"));\nconst lz4 = __webpack_require__(/*! lz4js */ \"./node_modules/lz4js/lz4.js\");\n/**\n * The server communicates with clients via commands defined\n * in the SQLiteCloud Server Protocol (SCSP), see more at:\n * https://github.com/sqlitecloud/sdk/blob/master/PROTOCOL.md\n */\nconst CMD_STRING = '+';\nconst CMD_ZEROSTRING = '!';\nconst CMD_ERROR = '-';\nconst CMD_INT = ':';\nconst CMD_FLOAT = ',';\nconst CMD_ROWSET = '*';\nconst CMD_ROWSET_CHUNK = '/';\nconst CMD_JSON = '#';\nconst CMD_NULL = '_';\nconst CMD_BLOB = '$';\nconst CMD_COMPRESSED = '%';\nconst CMD_COMMAND = '^';\nconst CMD_ARRAY = '=';\n// const CMD_RAWJSON = '{'\n// const CMD_PUBSUB = '|'\n// const CMD_RECONNECT = '@'\n/**\n * Implementation of SQLiteCloudConnection that connects directly to the database via tls socket and raw, binary protocol.\n * SQLiteCloud low-level connection, will do messaging, handle socket, authentication, etc.\n * A connection socket is established when the connection is created and closed when the connection is closed.\n * All operations are serialized by waiting for any pending operations to complete. Once a connection is closed,\n * it cannot be reopened and you must create a new connection.\n */\nclass TlsSocketTransport {\n /** True if connection is open */\n get connected() {\n return !!this.socket;\n }\n /* Opens a connection with the server and sends the initialization commands. Will throw in case of errors. */\n connect(config, callback) {\n // connection established while we were waiting in line?\n console.assert(!this.connected, 'Connection already established');\n // clear all listeners and call done in the operations queue\n const finish = error => {\n if (this.socket) {\n this.socket.removeAllListeners('data');\n this.socket.removeAllListeners('error');\n this.socket.removeAllListeners('close');\n if (error) {\n this.close();\n }\n }\n };\n this.config = config;\n // connect to tls socket, initialize connection, setup event handlers\n this.socket = tls_1.default.connect(this.config.port, this.config.host, this.config.tlsOptions, () => {\n var _a;\n if (!((_a = this.socket) === null || _a === void 0 ? void 0 : _a.authorized)) {\n const anonimizedError = (0, connection_2.anonimizeError)(this.socket.authorizationError);\n console.error('Connection was not authorized', anonimizedError);\n this.close();\n finish(new types_1.SQLiteCloudError('Connection was not authorized', { cause: anonimizedError }));\n }\n else {\n // the connection was closed before it was even opened,\n // eg. client closed the connection before the server accepted it\n if (this.socket === null) {\n finish(new types_1.SQLiteCloudError('Connection was closed before it was done opening'));\n return;\n }\n // send initialization commands\n console.assert(this.socket, 'Connection already closed');\n const commands = (0, connection_1.getInitializationCommands)(config);\n this.processCommands(commands, error => {\n if (error && this.socket) {\n this.close();\n }\n if (callback) {\n callback === null || callback === void 0 ? void 0 : callback.call(this, error);\n callback = undefined;\n }\n finish(error);\n });\n }\n });\n this.socket.on('close', () => {\n this.socket = null;\n finish(new types_1.SQLiteCloudError('Connection was closed'));\n });\n this.socket.once('error', (error) => {\n console.error('Connection error', error);\n finish(new types_1.SQLiteCloudError('Connection error', { cause: error }));\n });\n return this;\n }\n /** Will send a command immediately (no queueing), return the rowset/result or throw an error */\n processCommands(commands, callback) {\n var _a, _b, _c;\n // connection needs to be established?\n if (!this.socket) {\n callback === null || callback === void 0 ? void 0 : callback.call(this, new types_1.SQLiteCloudError('Connection not established', { errorCode: 'ERR_CONNECTION_NOT_ESTABLISHED' }));\n return this;\n }\n // compose commands following SCPC protocol\n commands = formatCommand(commands);\n let buffer = Buffer.alloc(0);\n const rowsetChunks = [];\n const startedOn = new Date();\n // define what to do if an answer does not arrive within the set timeout\n let socketTimeout;\n // clear all listeners and call done in the operations queue\n const finish = (error, result) => {\n clearTimeout(socketTimeout);\n if (this.socket) {\n this.socket.removeAllListeners('data');\n this.socket.removeAllListeners('error');\n this.socket.removeAllListeners('close');\n }\n if (callback) {\n callback === null || callback === void 0 ? void 0 : callback.call(this, error, result);\n callback = undefined;\n }\n };\n // define the Promise that waits for the server response\n const readData = (data) => {\n var _a, _b;\n try {\n // on first ondata event, dataType is read from data, on subsequent ondata event, is read from buffer that is the concatanations of data received on each ondata event\n let dataType = buffer.length === 0 ? data.subarray(0, 1).toString() : buffer.subarray(0, 1).toString('utf8');\n buffer = Buffer.concat([buffer, data]);\n const commandLength = hasCommandLength(dataType);\n if (commandLength) {\n const commandLength = parseCommandLength(buffer);\n const hasReceivedEntireCommand = buffer.length - buffer.indexOf(' ') - 1 >= commandLength ? true : false;\n if (hasReceivedEntireCommand) {\n if ((_a = this.config) === null || _a === void 0 ? void 0 : _a.verbose) {\n let bufferString = buffer.toString('utf8');\n if (bufferString.length > 1000) {\n bufferString = bufferString.substring(0, 100) + '...' + bufferString.substring(bufferString.length - 40);\n }\n // const elapsedMs = new Date().getTime() - startedOn.getTime()\n // console.debug(`Receive: ${bufferString} - ${elapsedMs}ms`)\n }\n // need to decompress this buffer before decoding?\n if (dataType === CMD_COMPRESSED) {\n ;\n ({ buffer, dataType } = decompressBuffer(buffer));\n }\n if (dataType !== CMD_ROWSET_CHUNK) {\n (_b = this.socket) === null || _b === void 0 ? void 0 : _b.off('data', readData);\n const { data } = popData(buffer);\n finish(null, data);\n }\n else {\n // @ts-expect-error\n // check if rowset received the ending chunk\n if (data.subarray(data.indexOf(' ') + 1, data.length).toString() === '0 0 0 ') {\n const parsedData = parseRowsetChunks(rowsetChunks);\n finish === null || finish === void 0 ? void 0 : finish.call(this, null, parsedData);\n }\n else {\n // no ending string? ask server for another chunk\n rowsetChunks.push(buffer);\n buffer = Buffer.alloc(0);\n // no longer need to ack the server\n // const okCommand = formatCommand('OK')\n // this.socket?.write(okCommand)\n }\n }\n }\n }\n else {\n // command with no explicit len so make sure that the final character is a space\n const lastChar = buffer.subarray(buffer.length - 1, buffer.length).toString('utf8');\n if (lastChar == ' ') {\n const { data } = popData(buffer);\n finish(null, data);\n }\n }\n }\n catch (error) {\n console.assert(error instanceof Error);\n if (error instanceof Error) {\n finish(error);\n }\n }\n };\n (_a = this.socket) === null || _a === void 0 ? void 0 : _a.once('close', () => {\n finish(new types_1.SQLiteCloudError('Connection was closed', { cause: (0, connection_2.anonimizeCommand)(commands) }));\n });\n (_b = this.socket) === null || _b === void 0 ? void 0 : _b.write(commands, 'utf8', () => {\n var _a, _b;\n socketTimeout = setTimeout(() => {\n const timeoutError = new types_1.SQLiteCloudError('Request timed out', { cause: (0, connection_2.anonimizeCommand)(commands) });\n // console.debug(`Request timed out, config.timeout is ${this.config?.timeout as number}ms`, timeoutError)\n finish(timeoutError);\n }, (_a = this.config) === null || _a === void 0 ? void 0 : _a.timeout);\n (_b = this.socket) === null || _b === void 0 ? void 0 : _b.on('data', readData);\n });\n (_c = this.socket) === null || _c === void 0 ? void 0 : _c.once('error', (error) => {\n console.error('Socket error', error);\n this.close();\n finish(new types_1.SQLiteCloudError('Socket error', { cause: (0, connection_2.anonimizeError)(error) }));\n });\n return this;\n }\n /** Disconnect from server, release connection. */\n close() {\n console.assert(this.socket !== null, 'TlsSocketTransport.close - connection already closed');\n if (this.socket) {\n this.socket.destroy();\n this.socket = null;\n }\n this.socket = undefined;\n return this;\n }\n}\nexports.TlsSocketTransport = TlsSocketTransport;\n//\n// utility functions\n//\n/** Analyze first character to check if corresponding data type has LEN */\nfunction hasCommandLength(firstCharacter) {\n return firstCharacter == CMD_INT || firstCharacter == CMD_FLOAT || firstCharacter == CMD_NULL ? false : true;\n}\n/** Analyze a command with explict LEN and extract it */\nfunction parseCommandLength(data) {\n return parseInt(data.subarray(1, data.indexOf(' ')).toString('utf8'));\n}\n/** Receive a compressed buffer, decompress with lz4, return buffer and datatype */\nfunction decompressBuffer(buffer) {\n const spaceIndex = buffer.indexOf(' ');\n buffer = buffer.subarray(spaceIndex + 1);\n // extract compressed size\n const compressedSize = parseInt(buffer.subarray(0, buffer.indexOf(' ') + 1).toString('utf8'));\n buffer = buffer.subarray(buffer.indexOf(' ') + 1);\n // extract decompressed size\n const decompressedSize = parseInt(buffer.subarray(0, buffer.indexOf(' ') + 1).toString('utf8'));\n buffer = buffer.subarray(buffer.indexOf(' ') + 1);\n // extract compressed dataType\n const dataType = buffer.subarray(0, 1).toString('utf8');\n const decompressedBuffer = Buffer.alloc(decompressedSize);\n const compressedBuffer = buffer.subarray(buffer.length - compressedSize);\n // lz4js library is javascript and doesn't have types so we silence the type check\n // eslint-disable-next-line\n const decompressionResult = lz4.decompressBlock(compressedBuffer, decompressedBuffer, 0, compressedSize, 0);\n buffer = Buffer.concat([buffer.subarray(0, buffer.length - compressedSize), decompressedBuffer]);\n if (decompressionResult <= 0 || decompressionResult !== decompressedSize) {\n throw new Error(`lz4 decompression error at offset ${decompressionResult}`);\n }\n return { buffer, dataType: dataType };\n}\n/** Parse error message or extended error message */\nfunction parseError(buffer, spaceIndex) {\n const errorBuffer = buffer.subarray(spaceIndex + 1);\n const errorString = errorBuffer.toString('utf8');\n const parts = errorString.split(' ');\n let errorCodeStr = parts.shift() || '0'; // Default errorCode is '0' if not present\n let extErrCodeStr = '0'; // Default extended error code\n let offsetCodeStr = '-1'; // Default offset code\n // Split the errorCode by ':' to check for extended error codes\n const errorCodeParts = errorCodeStr.split(':');\n errorCodeStr = errorCodeParts[0];\n if (errorCodeParts.length > 1) {\n extErrCodeStr = errorCodeParts[1];\n if (errorCodeParts.length > 2) {\n offsetCodeStr = errorCodeParts[2];\n }\n }\n // Rest of the error string is the error message\n const errorMessage = parts.join(' ');\n // Parse error codes to integers safely, defaulting to 0 if NaN\n const errorCode = parseInt(errorCodeStr);\n const extErrCode = parseInt(extErrCodeStr);\n const offsetCode = parseInt(offsetCodeStr);\n // create an Error object and add the custom properties\n throw new types_1.SQLiteCloudError(errorMessage, {\n errorCode: errorCode.toString(),\n externalErrorCode: extErrCode.toString(),\n offsetCode\n });\n}\n/** Parse an array of items (each of which will be parsed by type separately) */\nfunction parseArray(buffer, spaceIndex) {\n const parsedData = [];\n const array = buffer.subarray(spaceIndex + 1, buffer.length);\n const numberOfItems = parseInt(array.subarray(0, spaceIndex - 2).toString('utf8'));\n let arrayItems = array.subarray(array.indexOf(' ') + 1, array.length);\n for (let i = 0; i < numberOfItems; i++) {\n const { data, fwdBuffer: buffer } = popData(arrayItems);\n parsedData.push(data);\n arrayItems = buffer;\n }\n return parsedData;\n}\n/** Parse header in a rowset or chunk of a chunked rowset */\nfunction parseRowsetHeader(buffer) {\n const index = parseInt(buffer.subarray(0, buffer.indexOf(':') + 1).toString());\n buffer = buffer.subarray(buffer.indexOf(':') + 1);\n // extract rowset header\n const { data, fwdBuffer } = popIntegers(buffer, 3);\n return {\n index,\n metadata: {\n version: data[0],\n numberOfRows: data[1],\n numberOfColumns: data[2],\n columns: []\n },\n fwdBuffer\n };\n}\n/** Extract column names and, optionally, more metadata out of a rowset's header */\nfunction parseRowsetColumnsMetadata(buffer, metadata) {\n function popForward() {\n const { data, fwdBuffer: fwdBuffer } = popData(buffer); // buffer in parent scope\n buffer = fwdBuffer;\n return data;\n }\n for (let i = 0; i < metadata.numberOfColumns; i++) {\n metadata.columns.push({ name: popForward() });\n }\n // extract additional metadata if rowset has version 2\n if (metadata.version == 2) {\n for (let i = 0; i < metadata.numberOfColumns; i++)\n metadata.columns[i].type = popForward();\n for (let i = 0; i < metadata.numberOfColumns; i++)\n metadata.columns[i].database = popForward();\n for (let i = 0; i < metadata.numberOfColumns; i++)\n metadata.columns[i].table = popForward();\n for (let i = 0; i < metadata.numberOfColumns; i++)\n metadata.columns[i].column = popForward(); // original column name\n for (let i = 0; i < metadata.numberOfColumns; i++)\n metadata.columns[i].notNull = popForward();\n for (let i = 0; i < metadata.numberOfColumns; i++)\n metadata.columns[i].primaryKey = popForward();\n for (let i = 0; i < metadata.numberOfColumns; i++)\n metadata.columns[i].autoIncrement = popForward();\n }\n return buffer;\n}\n/** Parse a regular rowset (no chunks) */\nfunction parseRowset(buffer, spaceIndex) {\n buffer = buffer.subarray(spaceIndex + 1, buffer.length);\n const { metadata, fwdBuffer } = parseRowsetHeader(buffer);\n buffer = parseRowsetColumnsMetadata(fwdBuffer, metadata);\n // decode each rowset item\n const data = [];\n for (let j = 0; j < metadata.numberOfRows * metadata.numberOfColumns; j++) {\n const { data: rowData, fwdBuffer } = popData(buffer);\n data.push(rowData);\n buffer = fwdBuffer;\n }\n console.assert(data && data.length === metadata.numberOfRows * metadata.numberOfColumns, 'SQLiteCloudConnection.parseRowset - invalid rowset data');\n return new rowset_1.SQLiteCloudRowset(metadata, data);\n}\n/**\n * Parse a chunk of a chunked rowset command, eg:\n * *LEN 0:VERS NROWS NCOLS DATA\n */\nfunction parseRowsetChunks(buffers) {\n let metadata = { version: 1, numberOfColumns: 0, numberOfRows: 0, columns: [] };\n const data = [];\n for (let i = 0; i < buffers.length; i++) {\n let buffer = buffers[i];\n // validate and skip data type\n const dataType = buffer.subarray(0, 1).toString();\n console.assert(dataType === CMD_ROWSET_CHUNK);\n buffer = buffer.subarray(buffer.indexOf(' ') + 1);\n // chunk header, eg: 0:VERS NROWS NCOLS\n const { index: chunkIndex, metadata: chunkMetadata, fwdBuffer } = parseRowsetHeader(buffer);\n buffer = fwdBuffer;\n // first chunk? extract columns metadata\n if (chunkIndex === 1) {\n metadata = chunkMetadata;\n buffer = parseRowsetColumnsMetadata(buffer, metadata);\n }\n else {\n metadata.numberOfRows += chunkMetadata.numberOfRows;\n }\n // extract single rowset row\n for (let k = 0; k < chunkMetadata.numberOfRows * metadata.numberOfColumns; k++) {\n const { data: itemData, fwdBuffer } = popData(buffer);\n data.push(itemData);\n buffer = fwdBuffer;\n }\n }\n console.assert(data && data.length === metadata.numberOfRows * metadata.numberOfColumns, 'SQLiteCloudConnection.parseRowsetChunks - invalid rowset data');\n return new rowset_1.SQLiteCloudRowset(metadata, data);\n}\n/** Pop one or more space separated integers from beginning of buffer, move buffer forward */\nfunction popIntegers(buffer, numberOfIntegers = 1) {\n const data = [];\n for (let i = 0; i < numberOfIntegers; i++) {\n const spaceIndex = buffer.indexOf(' ');\n data[i] = parseInt(buffer.subarray(0, spaceIndex).toString());\n buffer = buffer.subarray(spaceIndex + 1);\n }\n return { data, fwdBuffer: buffer };\n}\n/** Parse command, extract its data, return the data and the buffer moved to the first byte after the command */\nfunction popData(buffer) {\n function popResults(data) {\n const fwdBuffer = buffer.subarray(commandEnd);\n return { data, fwdBuffer };\n }\n // first character is the data type\n console.assert(buffer && buffer instanceof Buffer);\n const dataType = buffer.subarray(0, 1).toString('utf8');\n console.assert(dataType !== CMD_COMPRESSED, \"Compressed data shouldn't be decompressed before parsing\");\n console.assert(dataType !== CMD_ROWSET_CHUNK, 'Chunked data should be parsed by parseRowsetChunks');\n let spaceIndex = buffer.indexOf(' ');\n if (spaceIndex === -1) {\n spaceIndex = buffer.length - 1;\n }\n let commandEnd = -1;\n if (dataType === CMD_INT || dataType === CMD_FLOAT || dataType === CMD_NULL) {\n commandEnd = spaceIndex + 1;\n }\n else {\n const commandLength = parseInt(buffer.subarray(1, spaceIndex).toString());\n commandEnd = spaceIndex + 1 + commandLength;\n }\n switch (dataType) {\n case CMD_INT:\n return popResults(parseInt(buffer.subarray(1, spaceIndex).toString()));\n case CMD_FLOAT:\n return popResults(parseFloat(buffer.subarray(1, spaceIndex).toString()));\n case CMD_NULL:\n return popResults(null);\n case CMD_STRING:\n return popResults(buffer.subarray(spaceIndex + 1, commandEnd).toString('utf8'));\n case CMD_ZEROSTRING:\n return popResults(buffer.subarray(spaceIndex + 1, commandEnd - 1).toString('utf8'));\n case CMD_COMMAND:\n return popResults(buffer.subarray(spaceIndex + 1, commandEnd).toString('utf8'));\n case CMD_JSON:\n return popResults(JSON.parse(buffer.subarray(spaceIndex + 1, commandEnd).toString('utf8')));\n case CMD_BLOB:\n return popResults(buffer.subarray(spaceIndex + 1, commandEnd));\n case CMD_ARRAY:\n return popResults(parseArray(buffer, spaceIndex));\n case CMD_ROWSET:\n return popResults(parseRowset(buffer, spaceIndex));\n case CMD_ERROR:\n parseError(buffer, spaceIndex); // throws custom error\n break;\n }\n throw new TypeError(`Data type: ${dataType} is not defined in SCSP`);\n}\n/** Format a command to be sent via SCSP protocol */\nfunction formatCommand(command) {\n const commandLength = Buffer.byteLength(command, 'utf-8');\n return `+${commandLength} ${command}`;\n}\n\n\n//# sourceURL=webpack://sqlitecloud/./lib/transport-tls.js?"); + +/***/ }), + +/***/ "./lib/transport-ws.js": +/*!*****************************!*\ + !*** ./lib/transport-ws.js ***! + \*****************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; +eval("\n/**\n * transport-ws.ts - handles low level communication with sqlitecloud server via socket.io websocket\n */\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.WebSocketTransport = void 0;\nconst types_1 = __webpack_require__(/*! ./types */ \"./lib/types.js\");\nconst rowset_1 = __webpack_require__(/*! ./rowset */ \"./lib/rowset.js\");\nconst socket_io_client_1 = __webpack_require__(/*! socket.io-client */ \"./node_modules/socket.io-client/build/cjs/index.js\");\n/**\n * Implementation of TransportConnection that connects to the database indirectly\n * via SQLite Cloud Gateway, a socket.io based deamon that responds to sql query\n * requests by returning results and rowsets in json format. The gateway handles\n * connect, disconnect, retries, order of operations, timeouts, etc.\n */\nclass WebSocketTransport {\n /** True if connection is open */\n get connected() {\n return !!this.socket;\n }\n /* Opens a connection with the server and sends the initialization commands. Will throw in case of errors. */\n connect(config, callback) {\n var _a;\n try {\n // connection established while we were waiting in line?\n console.assert(!this.connected, 'Connection already established');\n if (!this.socket) {\n this.config = config;\n const connectionString = this.config.connectionString;\n const gatewayUrl = ((_a = this.config) === null || _a === void 0 ? void 0 : _a.gatewayUrl) || `ws://${this.config.host}:4000`;\n this.socket = (0, socket_io_client_1.io)(gatewayUrl, { auth: { token: connectionString } });\n }\n callback === null || callback === void 0 ? void 0 : callback.call(this, null);\n }\n catch (error) {\n callback === null || callback === void 0 ? void 0 : callback.call(this, error);\n }\n return this;\n }\n /** Will send a command immediately (no queueing), return the rowset/result or throw an error */\n processCommands(commands, callback) {\n // connection needs to be established?\n if (!this.socket) {\n callback === null || callback === void 0 ? void 0 : callback.call(this, new types_1.SQLiteCloudError('Connection not established', { errorCode: 'ERR_CONNECTION_NOT_ESTABLISHED' }));\n return this;\n }\n this.socket.emit('v1/sql', { sql: commands, row: 'array' }, (response) => {\n if (response === null || response === void 0 ? void 0 : response.error) {\n const error = new types_1.SQLiteCloudError(response.error.detail, Object.assign({}, response.error));\n callback === null || callback === void 0 ? void 0 : callback.call(this, error);\n }\n else {\n const { data, metadata } = response;\n if (data && metadata) {\n if (metadata.numberOfRows !== undefined && metadata.numberOfColumns !== undefined && metadata.columns !== undefined) {\n console.assert(Array.isArray(data), 'SQLiteCloudWebsocketConnection.processCommands - data is not an array');\n // we can recreate a SQLiteCloudRowset from the response which we know to be an array of arrays\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n const rowset = new rowset_1.SQLiteCloudRowset(metadata, data.flat());\n callback === null || callback === void 0 ? void 0 : callback.call(this, null, rowset);\n return;\n }\n }\n callback === null || callback === void 0 ? void 0 : callback.call(this, null, response === null || response === void 0 ? void 0 : response.data);\n }\n });\n return this;\n }\n /** Disconnect socket.io from server */\n close() {\n var _a;\n console.assert(this.socket !== null, 'WebsocketTransport.close - connection already closed');\n if (this.socket) {\n (_a = this.socket) === null || _a === void 0 ? void 0 : _a.close();\n this.socket = undefined;\n }\n this.socket = undefined;\n return this;\n }\n}\nexports.WebSocketTransport = WebSocketTransport;\n\n\n//# sourceURL=webpack://sqlitecloud/./lib/transport-ws.js?"); + +/***/ }), + +/***/ "./lib/types.js": +/*!**********************!*\ + !*** ./lib/types.js ***! + \**********************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; +eval("\n/**\n * types.ts - shared types and interfaces\n */\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.SQLiteCloudArrayType = exports.SQLiteCloudError = void 0;\n/** Custom error reported by SQLiteCloud drivers */\nclass SQLiteCloudError extends Error {\n constructor(message, args) {\n super(message);\n this.name = 'SQLiteCloudError';\n if (args) {\n Object.assign(this, args);\n }\n }\n}\nexports.SQLiteCloudError = SQLiteCloudError;\n/**\n * Certain responses include arrays with various types of metadata.\n * The first entry is always an array type from this list. This enum\n * is called SQCLOUD_ARRAY_TYPE in the C API.\n */\nvar SQLiteCloudArrayType;\n(function (SQLiteCloudArrayType) {\n SQLiteCloudArrayType[SQLiteCloudArrayType[\"ARRAY_TYPE_SQLITE_EXEC\"] = 10] = \"ARRAY_TYPE_SQLITE_EXEC\";\n SQLiteCloudArrayType[SQLiteCloudArrayType[\"ARRAY_TYPE_DB_STATUS\"] = 11] = \"ARRAY_TYPE_DB_STATUS\";\n SQLiteCloudArrayType[SQLiteCloudArrayType[\"ARRAY_TYPE_METADATA\"] = 12] = \"ARRAY_TYPE_METADATA\";\n SQLiteCloudArrayType[SQLiteCloudArrayType[\"ARRAY_TYPE_VM_STEP\"] = 20] = \"ARRAY_TYPE_VM_STEP\";\n SQLiteCloudArrayType[SQLiteCloudArrayType[\"ARRAY_TYPE_VM_COMPILE\"] = 21] = \"ARRAY_TYPE_VM_COMPILE\";\n SQLiteCloudArrayType[SQLiteCloudArrayType[\"ARRAY_TYPE_VM_STEP_ONE\"] = 22] = \"ARRAY_TYPE_VM_STEP_ONE\";\n SQLiteCloudArrayType[SQLiteCloudArrayType[\"ARRAY_TYPE_VM_SQL\"] = 23] = \"ARRAY_TYPE_VM_SQL\";\n SQLiteCloudArrayType[SQLiteCloudArrayType[\"ARRAY_TYPE_VM_STATUS\"] = 24] = \"ARRAY_TYPE_VM_STATUS\";\n SQLiteCloudArrayType[SQLiteCloudArrayType[\"ARRAY_TYPE_VM_LIST\"] = 25] = \"ARRAY_TYPE_VM_LIST\";\n SQLiteCloudArrayType[SQLiteCloudArrayType[\"ARRAY_TYPE_BACKUP_INIT\"] = 40] = \"ARRAY_TYPE_BACKUP_INIT\";\n SQLiteCloudArrayType[SQLiteCloudArrayType[\"ARRAY_TYPE_BACKUP_STEP\"] = 41] = \"ARRAY_TYPE_BACKUP_STEP\";\n SQLiteCloudArrayType[SQLiteCloudArrayType[\"ARRAY_TYPE_BACKUP_END\"] = 42] = \"ARRAY_TYPE_BACKUP_END\";\n SQLiteCloudArrayType[SQLiteCloudArrayType[\"ARRAY_TYPE_SQLITE_STATUS\"] = 50] = \"ARRAY_TYPE_SQLITE_STATUS\"; // used in sqlite_status\n})(SQLiteCloudArrayType = exports.SQLiteCloudArrayType || (exports.SQLiteCloudArrayType = {}));\n\n\n//# sourceURL=webpack://sqlitecloud/./lib/types.js?"); + +/***/ }), + +/***/ "./lib/utilities.js": +/*!**************************!*\ + !*** ./lib/utilities.js ***! + \**************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; +eval("\n//\n// utilities.ts - utility methods to manipulate SQL statements\n//\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.parseBoolean = exports.parseConnectionString = exports.popCallback = exports.prepareSql = exports.escapeSqlParameter = exports.isNode = exports.isBrowser = void 0;\nconst types_1 = __webpack_require__(/*! ./types */ \"./lib/types.js\");\n//\n// determining running environment, thanks to browser-or-node\n// https://www.npmjs.com/package/browser-or-node\n//\nexports.isBrowser = typeof window !== 'undefined' && typeof window.document !== 'undefined';\nexports.isNode = typeof process !== 'undefined' && process.versions != null && process.versions.node != null;\n//\n// utility methods\n//\n/** Takes a generic value and escapes it so it can replace ? as a binding in a prepared SQL statement */\nfunction escapeSqlParameter(param) {\n if (param === null || param === undefined) {\n return 'NULL';\n }\n if (typeof param === 'string') {\n // replace single quote with two single quotes\n param = param.replace(/'/g, \"''\");\n return `'${param}'`;\n }\n if (typeof param === 'number') {\n return param.toString();\n }\n if (typeof param === 'boolean') {\n return param ? '1' : '0';\n }\n // serialize buffer as X'...' hex encoded string\n if (Buffer.isBuffer(param)) {\n return `X'${param.toString('hex')}'`;\n }\n if (typeof param === 'object') {\n // serialize json then escape single quotes\n let json = JSON.stringify(param);\n json = json.replace(/'/g, \"''\");\n return `'${json}'`;\n }\n throw new types_1.SQLiteCloudError(`Unsupported parameter type: ${typeof param}`);\n}\nexports.escapeSqlParameter = escapeSqlParameter;\n/** Take a sql statement and replaces ? or $named parameters that are properly serialized and escaped. */\nfunction prepareSql(sql, ...params) {\n // parameters where passed as an array of parameters?\n if ((params === null || params === void 0 ? void 0 : params.length) === 1 && Array.isArray(params[0])) {\n params = params[0];\n }\n // replace ? or ?idx parameters passed as args or as an array\n let parameterIndex = 1;\n let preparedSql = sql.replace(/\\?(\\d+)?/g, (match, matchIndex) => {\n const index = matchIndex ? parseInt(matchIndex) : parameterIndex;\n parameterIndex++;\n let sqlParameter;\n if (params[0] && typeof params[0] === 'object' && !(params[0] instanceof Buffer)) {\n sqlParameter = params[0][index];\n }\n if (!sqlParameter) {\n if (index > params.length) {\n throw new types_1.SQLiteCloudError('Not enough parameters');\n }\n sqlParameter = params[index - 1];\n }\n return sqlParameter !== null && sqlParameter !== undefined ? escapeSqlParameter(sqlParameter) : 'NULL';\n });\n // replace $named or :named parameters passed as an object\n if ((params === null || params === void 0 ? void 0 : params.length) === 1 && params[0] && typeof params[0] === 'object') {\n const namedParams = params[0];\n for (const [paramKey, param] of Object.entries(namedParams)) {\n const firstChar = paramKey.charAt(0);\n if (firstChar == '$' || firstChar == ':' || firstChar == '@') {\n const escapedParam = escapeSqlParameter(param);\n preparedSql = preparedSql.replace(new RegExp(`\\\\${paramKey}`, 'g'), escapedParam);\n }\n }\n }\n return preparedSql;\n}\nexports.prepareSql = prepareSql;\n/**\n * Many of the methods in our API may contain a callback as their last argument.\n * This method will take the arguments array passed to the method and return an object\n * containing the arguments array with the callbacks removed (if any), and the callback itself.\n * If there are multiple callbacks, the first one is returned as 'callback' and the last one\n * as 'completeCallback'.\n */\nfunction popCallback(args) {\n const remaining = args;\n // at least 1 callback?\n if (args && args.length > 0 && typeof args[args.length - 1] === 'function') {\n // at least 2 callbacks?\n if (args.length > 1 && typeof args[args.length - 2] === 'function') {\n return { args: remaining.slice(0, -2), callback: args[args.length - 2], complete: args[args.length - 1] };\n }\n return { args: remaining.slice(0, -1), callback: args[args.length - 1] };\n }\n return { args: remaining };\n}\nexports.popCallback = popCallback;\n/** Parse connectionString like sqlitecloud://username:password@host:port/database?option1=xxx&option2=xxx into its components */\nfunction parseConnectionString(connectionString) {\n try {\n // The URL constructor throws a TypeError if the URL is not valid.\n // in spite of having the same structure as a regular url\n // protocol://username:password@host:port/database?option1=xxx&option2=xxx)\n // the sqlitecloud: protocol is not recognized by the URL constructor in browsers\n // so we need to replace it with https: to make it work\n const knownProtocolUrl = connectionString.replace('sqlitecloud:', 'https:');\n const url = new URL(knownProtocolUrl);\n const options = {};\n url.searchParams.forEach((value, key) => {\n options[key] = value;\n });\n const config = Object.assign({ username: url.username, password: url.password, host: url.hostname, port: url.port ? parseInt(url.port) : undefined }, options);\n const database = url.pathname.replace('/', ''); // pathname is database name, remove the leading slash\n if (database) {\n config.database = database;\n }\n return config;\n }\n catch (error) {\n throw new types_1.SQLiteCloudError(`Invalid connection string: ${connectionString}`);\n }\n}\nexports.parseConnectionString = parseConnectionString;\n/** Returns true if value is 1 or true */\nfunction parseBoolean(value) {\n if (typeof value === 'string') {\n return value.toLowerCase() === 'true' || value === '1';\n }\n return value ? true : false;\n}\nexports.parseBoolean = parseBoolean;\n\n\n//# sourceURL=webpack://sqlitecloud/./lib/utilities.js?"); + +/***/ }), + +/***/ "./node_modules/debug/src/browser.js": +/*!*******************************************!*\ + !*** ./node_modules/debug/src/browser.js ***! + \*******************************************/ +/***/ ((module, exports, __webpack_require__) => { + +eval("/* eslint-env browser */\n\n/**\n * This is the web browser implementation of `debug()`.\n */\n\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = localstorage();\nexports.destroy = (() => {\n\tlet warned = false;\n\n\treturn () => {\n\t\tif (!warned) {\n\t\t\twarned = true;\n\t\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t\t}\n\t};\n})();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n\t'#0000CC',\n\t'#0000FF',\n\t'#0033CC',\n\t'#0033FF',\n\t'#0066CC',\n\t'#0066FF',\n\t'#0099CC',\n\t'#0099FF',\n\t'#00CC00',\n\t'#00CC33',\n\t'#00CC66',\n\t'#00CC99',\n\t'#00CCCC',\n\t'#00CCFF',\n\t'#3300CC',\n\t'#3300FF',\n\t'#3333CC',\n\t'#3333FF',\n\t'#3366CC',\n\t'#3366FF',\n\t'#3399CC',\n\t'#3399FF',\n\t'#33CC00',\n\t'#33CC33',\n\t'#33CC66',\n\t'#33CC99',\n\t'#33CCCC',\n\t'#33CCFF',\n\t'#6600CC',\n\t'#6600FF',\n\t'#6633CC',\n\t'#6633FF',\n\t'#66CC00',\n\t'#66CC33',\n\t'#9900CC',\n\t'#9900FF',\n\t'#9933CC',\n\t'#9933FF',\n\t'#99CC00',\n\t'#99CC33',\n\t'#CC0000',\n\t'#CC0033',\n\t'#CC0066',\n\t'#CC0099',\n\t'#CC00CC',\n\t'#CC00FF',\n\t'#CC3300',\n\t'#CC3333',\n\t'#CC3366',\n\t'#CC3399',\n\t'#CC33CC',\n\t'#CC33FF',\n\t'#CC6600',\n\t'#CC6633',\n\t'#CC9900',\n\t'#CC9933',\n\t'#CCCC00',\n\t'#CCCC33',\n\t'#FF0000',\n\t'#FF0033',\n\t'#FF0066',\n\t'#FF0099',\n\t'#FF00CC',\n\t'#FF00FF',\n\t'#FF3300',\n\t'#FF3333',\n\t'#FF3366',\n\t'#FF3399',\n\t'#FF33CC',\n\t'#FF33FF',\n\t'#FF6600',\n\t'#FF6633',\n\t'#FF9900',\n\t'#FF9933',\n\t'#FFCC00',\n\t'#FFCC33'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\n// eslint-disable-next-line complexity\nfunction useColors() {\n\t// NB: In an Electron preload script, document will be defined but not fully\n\t// initialized. Since we know we're in Chrome, we'll just detect this case\n\t// explicitly\n\tif (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) {\n\t\treturn true;\n\t}\n\n\t// Internet Explorer and Edge do not support colors.\n\tif (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/)) {\n\t\treturn false;\n\t}\n\n\t// Is webkit? http://stackoverflow.com/a/16459606/376773\n\t// document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n\treturn (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n\t\t// Is firebug? http://stackoverflow.com/a/398120/376773\n\t\t(typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n\t\t// Is firefox >= v31?\n\t\t// https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/) && parseInt(RegExp.$1, 10) >= 31) ||\n\t\t// Double check webkit in userAgent just in case we are in a worker\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\n}\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\targs[0] = (this.useColors ? '%c' : '') +\n\t\tthis.namespace +\n\t\t(this.useColors ? ' %c' : ' ') +\n\t\targs[0] +\n\t\t(this.useColors ? '%c ' : ' ') +\n\t\t'+' + module.exports.humanize(this.diff);\n\n\tif (!this.useColors) {\n\t\treturn;\n\t}\n\n\tconst c = 'color: ' + this.color;\n\targs.splice(1, 0, c, 'color: inherit');\n\n\t// The final \"%c\" is somewhat tricky, because there could be other\n\t// arguments passed either before or after the %c, so we need to\n\t// figure out the correct index to insert the CSS into\n\tlet index = 0;\n\tlet lastC = 0;\n\targs[0].replace(/%[a-zA-Z%]/g, match => {\n\t\tif (match === '%%') {\n\t\t\treturn;\n\t\t}\n\t\tindex++;\n\t\tif (match === '%c') {\n\t\t\t// We only are interested in the *last* %c\n\t\t\t// (the user may have provided their own)\n\t\t\tlastC = index;\n\t\t}\n\t});\n\n\targs.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.debug()` when available.\n * No-op when `console.debug` is not a \"function\".\n * If `console.debug` is not available, falls back\n * to `console.log`.\n *\n * @api public\n */\nexports.log = console.debug || console.log || (() => {});\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\ttry {\n\t\tif (namespaces) {\n\t\t\texports.storage.setItem('debug', namespaces);\n\t\t} else {\n\t\t\texports.storage.removeItem('debug');\n\t\t}\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\nfunction load() {\n\tlet r;\n\ttry {\n\t\tr = exports.storage.getItem('debug');\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n\n\t// If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n\tif (!r && typeof process !== 'undefined' && 'env' in process) {\n\t\tr = process.env.DEBUG;\n\t}\n\n\treturn r;\n}\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage() {\n\ttry {\n\t\t// TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context\n\t\t// The Browser also has localStorage in the global context.\n\t\treturn localStorage;\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\nmodule.exports = __webpack_require__(/*! ./common */ \"./node_modules/debug/src/common.js\")(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nformatters.j = function (v) {\n\ttry {\n\t\treturn JSON.stringify(v);\n\t} catch (error) {\n\t\treturn '[UnexpectedJSONParseError]: ' + error.message;\n\t}\n};\n\n\n//# sourceURL=webpack://sqlitecloud/./node_modules/debug/src/browser.js?"); + +/***/ }), + +/***/ "./node_modules/debug/src/common.js": +/*!******************************************!*\ + !*** ./node_modules/debug/src/common.js ***! + \******************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +eval("\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n */\n\nfunction setup(env) {\n\tcreateDebug.debug = createDebug;\n\tcreateDebug.default = createDebug;\n\tcreateDebug.coerce = coerce;\n\tcreateDebug.disable = disable;\n\tcreateDebug.enable = enable;\n\tcreateDebug.enabled = enabled;\n\tcreateDebug.humanize = __webpack_require__(/*! ms */ \"./node_modules/ms/index.js\");\n\tcreateDebug.destroy = destroy;\n\n\tObject.keys(env).forEach(key => {\n\t\tcreateDebug[key] = env[key];\n\t});\n\n\t/**\n\t* The currently active debug mode names, and names to skip.\n\t*/\n\n\tcreateDebug.names = [];\n\tcreateDebug.skips = [];\n\n\t/**\n\t* Map of special \"%n\" handling functions, for the debug \"format\" argument.\n\t*\n\t* Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n\t*/\n\tcreateDebug.formatters = {};\n\n\t/**\n\t* Selects a color for a debug namespace\n\t* @param {String} namespace The namespace string for the debug instance to be colored\n\t* @return {Number|String} An ANSI color code for the given namespace\n\t* @api private\n\t*/\n\tfunction selectColor(namespace) {\n\t\tlet hash = 0;\n\n\t\tfor (let i = 0; i < namespace.length; i++) {\n\t\t\thash = ((hash << 5) - hash) + namespace.charCodeAt(i);\n\t\t\thash |= 0; // Convert to 32bit integer\n\t\t}\n\n\t\treturn createDebug.colors[Math.abs(hash) % createDebug.colors.length];\n\t}\n\tcreateDebug.selectColor = selectColor;\n\n\t/**\n\t* Create a debugger with the given `namespace`.\n\t*\n\t* @param {String} namespace\n\t* @return {Function}\n\t* @api public\n\t*/\n\tfunction createDebug(namespace) {\n\t\tlet prevTime;\n\t\tlet enableOverride = null;\n\t\tlet namespacesCache;\n\t\tlet enabledCache;\n\n\t\tfunction debug(...args) {\n\t\t\t// Disabled?\n\t\t\tif (!debug.enabled) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst self = debug;\n\n\t\t\t// Set `diff` timestamp\n\t\t\tconst curr = Number(new Date());\n\t\t\tconst ms = curr - (prevTime || curr);\n\t\t\tself.diff = ms;\n\t\t\tself.prev = prevTime;\n\t\t\tself.curr = curr;\n\t\t\tprevTime = curr;\n\n\t\t\targs[0] = createDebug.coerce(args[0]);\n\n\t\t\tif (typeof args[0] !== 'string') {\n\t\t\t\t// Anything else let's inspect with %O\n\t\t\t\targs.unshift('%O');\n\t\t\t}\n\n\t\t\t// Apply any `formatters` transformations\n\t\t\tlet index = 0;\n\t\t\targs[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => {\n\t\t\t\t// If we encounter an escaped % then don't increase the array index\n\t\t\t\tif (match === '%%') {\n\t\t\t\t\treturn '%';\n\t\t\t\t}\n\t\t\t\tindex++;\n\t\t\t\tconst formatter = createDebug.formatters[format];\n\t\t\t\tif (typeof formatter === 'function') {\n\t\t\t\t\tconst val = args[index];\n\t\t\t\t\tmatch = formatter.call(self, val);\n\n\t\t\t\t\t// Now we need to remove `args[index]` since it's inlined in the `format`\n\t\t\t\t\targs.splice(index, 1);\n\t\t\t\t\tindex--;\n\t\t\t\t}\n\t\t\t\treturn match;\n\t\t\t});\n\n\t\t\t// Apply env-specific formatting (colors, etc.)\n\t\t\tcreateDebug.formatArgs.call(self, args);\n\n\t\t\tconst logFn = self.log || createDebug.log;\n\t\t\tlogFn.apply(self, args);\n\t\t}\n\n\t\tdebug.namespace = namespace;\n\t\tdebug.useColors = createDebug.useColors();\n\t\tdebug.color = createDebug.selectColor(namespace);\n\t\tdebug.extend = extend;\n\t\tdebug.destroy = createDebug.destroy; // XXX Temporary. Will be removed in the next major release.\n\n\t\tObject.defineProperty(debug, 'enabled', {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: false,\n\t\t\tget: () => {\n\t\t\t\tif (enableOverride !== null) {\n\t\t\t\t\treturn enableOverride;\n\t\t\t\t}\n\t\t\t\tif (namespacesCache !== createDebug.namespaces) {\n\t\t\t\t\tnamespacesCache = createDebug.namespaces;\n\t\t\t\t\tenabledCache = createDebug.enabled(namespace);\n\t\t\t\t}\n\n\t\t\t\treturn enabledCache;\n\t\t\t},\n\t\t\tset: v => {\n\t\t\t\tenableOverride = v;\n\t\t\t}\n\t\t});\n\n\t\t// Env-specific initialization logic for debug instances\n\t\tif (typeof createDebug.init === 'function') {\n\t\t\tcreateDebug.init(debug);\n\t\t}\n\n\t\treturn debug;\n\t}\n\n\tfunction extend(namespace, delimiter) {\n\t\tconst newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace);\n\t\tnewDebug.log = this.log;\n\t\treturn newDebug;\n\t}\n\n\t/**\n\t* Enables a debug mode by namespaces. This can include modes\n\t* separated by a colon and wildcards.\n\t*\n\t* @param {String} namespaces\n\t* @api public\n\t*/\n\tfunction enable(namespaces) {\n\t\tcreateDebug.save(namespaces);\n\t\tcreateDebug.namespaces = namespaces;\n\n\t\tcreateDebug.names = [];\n\t\tcreateDebug.skips = [];\n\n\t\tlet i;\n\t\tconst split = (typeof namespaces === 'string' ? namespaces : '').split(/[\\s,]+/);\n\t\tconst len = split.length;\n\n\t\tfor (i = 0; i < len; i++) {\n\t\t\tif (!split[i]) {\n\t\t\t\t// ignore empty strings\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tnamespaces = split[i].replace(/\\*/g, '.*?');\n\n\t\t\tif (namespaces[0] === '-') {\n\t\t\t\tcreateDebug.skips.push(new RegExp('^' + namespaces.slice(1) + '$'));\n\t\t\t} else {\n\t\t\t\tcreateDebug.names.push(new RegExp('^' + namespaces + '$'));\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t* Disable debug output.\n\t*\n\t* @return {String} namespaces\n\t* @api public\n\t*/\n\tfunction disable() {\n\t\tconst namespaces = [\n\t\t\t...createDebug.names.map(toNamespace),\n\t\t\t...createDebug.skips.map(toNamespace).map(namespace => '-' + namespace)\n\t\t].join(',');\n\t\tcreateDebug.enable('');\n\t\treturn namespaces;\n\t}\n\n\t/**\n\t* Returns true if the given mode name is enabled, false otherwise.\n\t*\n\t* @param {String} name\n\t* @return {Boolean}\n\t* @api public\n\t*/\n\tfunction enabled(name) {\n\t\tif (name[name.length - 1] === '*') {\n\t\t\treturn true;\n\t\t}\n\n\t\tlet i;\n\t\tlet len;\n\n\t\tfor (i = 0, len = createDebug.skips.length; i < len; i++) {\n\t\t\tif (createDebug.skips[i].test(name)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tfor (i = 0, len = createDebug.names.length; i < len; i++) {\n\t\t\tif (createDebug.names[i].test(name)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/**\n\t* Convert regexp to namespace\n\t*\n\t* @param {RegExp} regxep\n\t* @return {String} namespace\n\t* @api private\n\t*/\n\tfunction toNamespace(regexp) {\n\t\treturn regexp.toString()\n\t\t\t.substring(2, regexp.toString().length - 2)\n\t\t\t.replace(/\\.\\*\\?$/, '*');\n\t}\n\n\t/**\n\t* Coerce `val`.\n\t*\n\t* @param {Mixed} val\n\t* @return {Mixed}\n\t* @api private\n\t*/\n\tfunction coerce(val) {\n\t\tif (val instanceof Error) {\n\t\t\treturn val.stack || val.message;\n\t\t}\n\t\treturn val;\n\t}\n\n\t/**\n\t* XXX DO NOT USE. This is a temporary stub function.\n\t* XXX It WILL be removed in the next major release.\n\t*/\n\tfunction destroy() {\n\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t}\n\n\tcreateDebug.enable(createDebug.load());\n\n\treturn createDebug;\n}\n\nmodule.exports = setup;\n\n\n//# sourceURL=webpack://sqlitecloud/./node_modules/debug/src/common.js?"); + +/***/ }), + +/***/ "./node_modules/eventemitter3/index.js": +/*!*********************************************!*\ + !*** ./node_modules/eventemitter3/index.js ***! + \*********************************************/ +/***/ ((module) => { + +"use strict"; +eval("\n\nvar has = Object.prototype.hasOwnProperty\n , prefix = '~';\n\n/**\n * Constructor to create a storage for our `EE` objects.\n * An `Events` instance is a plain object whose properties are event names.\n *\n * @constructor\n * @private\n */\nfunction Events() {}\n\n//\n// We try to not inherit from `Object.prototype`. In some engines creating an\n// instance in this way is faster than calling `Object.create(null)` directly.\n// If `Object.create(null)` is not supported we prefix the event names with a\n// character to make sure that the built-in object properties are not\n// overridden or used as an attack vector.\n//\nif (Object.create) {\n Events.prototype = Object.create(null);\n\n //\n // This hack is needed because the `__proto__` property is still inherited in\n // some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.\n //\n if (!new Events().__proto__) prefix = false;\n}\n\n/**\n * Representation of a single event listener.\n *\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} [once=false] Specify if the listener is a one-time listener.\n * @constructor\n * @private\n */\nfunction EE(fn, context, once) {\n this.fn = fn;\n this.context = context;\n this.once = once || false;\n}\n\n/**\n * Add a listener for a given event.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} once Specify if the listener is a one-time listener.\n * @returns {EventEmitter}\n * @private\n */\nfunction addListener(emitter, event, fn, context, once) {\n if (typeof fn !== 'function') {\n throw new TypeError('The listener must be a function');\n }\n\n var listener = new EE(fn, context || emitter, once)\n , evt = prefix ? prefix + event : event;\n\n if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++;\n else if (!emitter._events[evt].fn) emitter._events[evt].push(listener);\n else emitter._events[evt] = [emitter._events[evt], listener];\n\n return emitter;\n}\n\n/**\n * Clear event by name.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} evt The Event name.\n * @private\n */\nfunction clearEvent(emitter, evt) {\n if (--emitter._eventsCount === 0) emitter._events = new Events();\n else delete emitter._events[evt];\n}\n\n/**\n * Minimal `EventEmitter` interface that is molded against the Node.js\n * `EventEmitter` interface.\n *\n * @constructor\n * @public\n */\nfunction EventEmitter() {\n this._events = new Events();\n this._eventsCount = 0;\n}\n\n/**\n * Return an array listing the events for which the emitter has registered\n * listeners.\n *\n * @returns {Array}\n * @public\n */\nEventEmitter.prototype.eventNames = function eventNames() {\n var names = []\n , events\n , name;\n\n if (this._eventsCount === 0) return names;\n\n for (name in (events = this._events)) {\n if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);\n }\n\n if (Object.getOwnPropertySymbols) {\n return names.concat(Object.getOwnPropertySymbols(events));\n }\n\n return names;\n};\n\n/**\n * Return the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Array} The registered listeners.\n * @public\n */\nEventEmitter.prototype.listeners = function listeners(event) {\n var evt = prefix ? prefix + event : event\n , handlers = this._events[evt];\n\n if (!handlers) return [];\n if (handlers.fn) return [handlers.fn];\n\n for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) {\n ee[i] = handlers[i].fn;\n }\n\n return ee;\n};\n\n/**\n * Return the number of listeners listening to a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Number} The number of listeners.\n * @public\n */\nEventEmitter.prototype.listenerCount = function listenerCount(event) {\n var evt = prefix ? prefix + event : event\n , listeners = this._events[evt];\n\n if (!listeners) return 0;\n if (listeners.fn) return 1;\n return listeners.length;\n};\n\n/**\n * Calls each of the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Boolean} `true` if the event had listeners, else `false`.\n * @public\n */\nEventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return false;\n\n var listeners = this._events[evt]\n , len = arguments.length\n , args\n , i;\n\n if (listeners.fn) {\n if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);\n\n switch (len) {\n case 1: return listeners.fn.call(listeners.context), true;\n case 2: return listeners.fn.call(listeners.context, a1), true;\n case 3: return listeners.fn.call(listeners.context, a1, a2), true;\n case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true;\n case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;\n case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;\n }\n\n for (i = 1, args = new Array(len -1); i < len; i++) {\n args[i - 1] = arguments[i];\n }\n\n listeners.fn.apply(listeners.context, args);\n } else {\n var length = listeners.length\n , j;\n\n for (i = 0; i < length; i++) {\n if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);\n\n switch (len) {\n case 1: listeners[i].fn.call(listeners[i].context); break;\n case 2: listeners[i].fn.call(listeners[i].context, a1); break;\n case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break;\n case 4: listeners[i].fn.call(listeners[i].context, a1, a2, a3); break;\n default:\n if (!args) for (j = 1, args = new Array(len -1); j < len; j++) {\n args[j - 1] = arguments[j];\n }\n\n listeners[i].fn.apply(listeners[i].context, args);\n }\n }\n }\n\n return true;\n};\n\n/**\n * Add a listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.on = function on(event, fn, context) {\n return addListener(this, event, fn, context, false);\n};\n\n/**\n * Add a one-time listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.once = function once(event, fn, context) {\n return addListener(this, event, fn, context, true);\n};\n\n/**\n * Remove the listeners of a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn Only remove the listeners that match this function.\n * @param {*} context Only remove the listeners that have this context.\n * @param {Boolean} once Only remove one-time listeners.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return this;\n if (!fn) {\n clearEvent(this, evt);\n return this;\n }\n\n var listeners = this._events[evt];\n\n if (listeners.fn) {\n if (\n listeners.fn === fn &&\n (!once || listeners.once) &&\n (!context || listeners.context === context)\n ) {\n clearEvent(this, evt);\n }\n } else {\n for (var i = 0, events = [], length = listeners.length; i < length; i++) {\n if (\n listeners[i].fn !== fn ||\n (once && !listeners[i].once) ||\n (context && listeners[i].context !== context)\n ) {\n events.push(listeners[i]);\n }\n }\n\n //\n // Reset the array, or remove it completely if we have no more listeners.\n //\n if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;\n else clearEvent(this, evt);\n }\n\n return this;\n};\n\n/**\n * Remove all listeners, or those of the specified event.\n *\n * @param {(String|Symbol)} [event] The event name.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {\n var evt;\n\n if (event) {\n evt = prefix ? prefix + event : event;\n if (this._events[evt]) clearEvent(this, evt);\n } else {\n this._events = new Events();\n this._eventsCount = 0;\n }\n\n return this;\n};\n\n//\n// Alias methods names because people roll like that.\n//\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\nEventEmitter.prototype.addListener = EventEmitter.prototype.on;\n\n//\n// Expose the prefix.\n//\nEventEmitter.prefixed = prefix;\n\n//\n// Allow `EventEmitter` to be imported as module namespace.\n//\nEventEmitter.EventEmitter = EventEmitter;\n\n//\n// Expose the module.\n//\nif (true) {\n module.exports = EventEmitter;\n}\n\n\n//# sourceURL=webpack://sqlitecloud/./node_modules/eventemitter3/index.js?"); + +/***/ }), + +/***/ "./node_modules/lz4js/lz4.js": +/*!***********************************!*\ + !*** ./node_modules/lz4js/lz4.js ***! + \***********************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +eval("// lz4.js - An implementation of Lz4 in plain JavaScript.\n//\n// TODO:\n// - Unify header parsing/writing.\n// - Support options (block size, checksums)\n// - Support streams\n// - Better error handling (handle bad offset, etc.)\n// - HC support (better search algorithm)\n// - Tests/benchmarking\n\nvar xxhash = __webpack_require__(/*! ./xxh32.js */ \"./node_modules/lz4js/xxh32.js\");\nvar util = __webpack_require__(/*! ./util.js */ \"./node_modules/lz4js/util.js\");\n\n// Constants\n// --\n\n// Compression format parameters/constants.\nvar minMatch = 4;\nvar minLength = 13;\nvar searchLimit = 5;\nvar skipTrigger = 6;\nvar hashSize = 1 << 16;\n\n// Token constants.\nvar mlBits = 4;\nvar mlMask = (1 << mlBits) - 1;\nvar runBits = 4;\nvar runMask = (1 << runBits) - 1;\n\n// Shared buffers\nvar blockBuf = makeBuffer(5 << 20);\nvar hashTable = makeHashTable();\n\n// Frame constants.\nvar magicNum = 0x184D2204;\n\n// Frame descriptor flags.\nvar fdContentChksum = 0x4;\nvar fdContentSize = 0x8;\nvar fdBlockChksum = 0x10;\n// var fdBlockIndep = 0x20;\nvar fdVersion = 0x40;\nvar fdVersionMask = 0xC0;\n\n// Block sizes.\nvar bsUncompressed = 0x80000000;\nvar bsDefault = 7;\nvar bsShift = 4;\nvar bsMask = 7;\nvar bsMap = {\n 4: 0x10000,\n 5: 0x40000,\n 6: 0x100000,\n 7: 0x400000\n};\n\n// Utility functions/primitives\n// --\n\n// Makes our hashtable. On older browsers, may return a plain array.\nfunction makeHashTable () {\n try {\n return new Uint32Array(hashSize);\n } catch (error) {\n var hashTable = new Array(hashSize);\n\n for (var i = 0; i < hashSize; i++) {\n hashTable[i] = 0;\n }\n\n return hashTable;\n }\n}\n\n// Clear hashtable.\nfunction clearHashTable (table) {\n for (var i = 0; i < hashSize; i++) {\n hashTable[i] = 0;\n }\n}\n\n// Makes a byte buffer. On older browsers, may return a plain array.\nfunction makeBuffer (size) {\n try {\n return new Uint8Array(size);\n } catch (error) {\n var buf = new Array(size);\n\n for (var i = 0; i < size; i++) {\n buf[i] = 0;\n }\n\n return buf;\n }\n}\n\nfunction sliceArray (array, start, end) {\n if (typeof array.buffer !== undefined) {\n if (Uint8Array.prototype.slice) {\n return array.slice(start, end);\n } else {\n // Uint8Array#slice polyfill.\n var len = array.length;\n\n // Calculate start.\n start = start | 0;\n start = (start < 0) ? Math.max(len + start, 0) : Math.min(start, len);\n\n // Calculate end.\n end = (end === undefined) ? len : end | 0;\n end = (end < 0) ? Math.max(len + end, 0) : Math.min(end, len);\n\n // Copy into new array.\n var arraySlice = new Uint8Array(end - start);\n for (var i = start, n = 0; i < end;) {\n arraySlice[n++] = array[i++];\n }\n\n return arraySlice;\n }\n } else {\n // Assume normal array.\n return array.slice(start, end);\n }\n}\n\n// Implementation\n// --\n\n// Calculates an upper bound for lz4 compression.\nexports.compressBound = function compressBound (n) {\n return (n + (n / 255) + 16) | 0;\n};\n\n// Calculates an upper bound for lz4 decompression, by reading the data.\nexports.decompressBound = function decompressBound (src) {\n var sIndex = 0;\n\n // Read magic number\n if (util.readU32(src, sIndex) !== magicNum) {\n throw new Error('invalid magic number');\n }\n\n sIndex += 4;\n\n // Read descriptor\n var descriptor = src[sIndex++];\n\n // Check version\n if ((descriptor & fdVersionMask) !== fdVersion) {\n throw new Error('incompatible descriptor version ' + (descriptor & fdVersionMask));\n }\n\n // Read flags\n var useBlockSum = (descriptor & fdBlockChksum) !== 0;\n var useContentSize = (descriptor & fdContentSize) !== 0;\n\n // Read block size\n var bsIdx = (src[sIndex++] >> bsShift) & bsMask;\n\n if (bsMap[bsIdx] === undefined) {\n throw new Error('invalid block size ' + bsIdx);\n }\n\n var maxBlockSize = bsMap[bsIdx];\n\n // Get content size\n if (useContentSize) {\n return util.readU64(src, sIndex);\n }\n\n // Checksum\n sIndex++;\n\n // Read blocks.\n var maxSize = 0;\n while (true) {\n var blockSize = util.readU32(src, sIndex);\n sIndex += 4;\n\n if (blockSize & bsUncompressed) {\n blockSize &= ~bsUncompressed;\n maxSize += blockSize;\n } else {\n maxSize += maxBlockSize;\n }\n\n if (blockSize === 0) {\n return maxSize;\n }\n\n if (useBlockSum) {\n sIndex += 4;\n }\n\n sIndex += blockSize;\n }\n};\n\n// Creates a buffer of a given byte-size, falling back to plain arrays.\nexports.makeBuffer = makeBuffer;\n\n// Decompresses a block of Lz4.\nexports.decompressBlock = function decompressBlock (src, dst, sIndex, sLength, dIndex) {\n var mLength, mOffset, sEnd, n, i;\n\n // Setup initial state.\n sEnd = sIndex + sLength;\n\n // Consume entire input block.\n while (sIndex < sEnd) {\n var token = src[sIndex++];\n\n // Copy literals.\n var literalCount = (token >> 4);\n if (literalCount > 0) {\n // Parse length.\n if (literalCount === 0xf) {\n while (true) {\n literalCount += src[sIndex];\n if (src[sIndex++] !== 0xff) {\n break;\n }\n }\n }\n\n // Copy literals\n for (n = sIndex + literalCount; sIndex < n;) {\n dst[dIndex++] = src[sIndex++];\n }\n }\n\n if (sIndex >= sEnd) {\n break;\n }\n\n // Copy match.\n mLength = (token & 0xf);\n\n // Parse offset.\n mOffset = src[sIndex++] | (src[sIndex++] << 8);\n\n // Parse length.\n if (mLength === 0xf) {\n while (true) {\n mLength += src[sIndex];\n if (src[sIndex++] !== 0xff) {\n break;\n }\n }\n }\n\n mLength += minMatch;\n\n // Copy match.\n for (i = dIndex - mOffset, n = i + mLength; i < n;) {\n dst[dIndex++] = dst[i++] | 0;\n }\n }\n\n return dIndex;\n};\n\n// Compresses a block with Lz4.\nexports.compressBlock = function compressBlock (src, dst, sIndex, sLength, hashTable) {\n var mIndex, mAnchor, mLength, mOffset, mStep;\n var literalCount, dIndex, sEnd, n;\n\n // Setup initial state.\n dIndex = 0;\n sEnd = sLength + sIndex;\n mAnchor = sIndex;\n\n // Process only if block is large enough.\n if (sLength >= minLength) {\n var searchMatchCount = (1 << skipTrigger) + 3;\n\n // Consume until last n literals (Lz4 spec limitation.)\n while (sIndex + minMatch < sEnd - searchLimit) {\n var seq = util.readU32(src, sIndex);\n var hash = util.hashU32(seq) >>> 0;\n\n // Crush hash to 16 bits.\n hash = ((hash >> 16) ^ hash) >>> 0 & 0xffff;\n\n // Look for a match in the hashtable. NOTE: remove one; see below.\n mIndex = hashTable[hash] - 1;\n\n // Put pos in hash table. NOTE: add one so that zero = invalid.\n hashTable[hash] = sIndex + 1;\n\n // Determine if there is a match (within range.)\n if (mIndex < 0 || ((sIndex - mIndex) >>> 16) > 0 || util.readU32(src, mIndex) !== seq) {\n mStep = searchMatchCount++ >> skipTrigger;\n sIndex += mStep;\n continue;\n }\n\n searchMatchCount = (1 << skipTrigger) + 3;\n\n // Calculate literal count and offset.\n literalCount = sIndex - mAnchor;\n mOffset = sIndex - mIndex;\n\n // We've already matched one word, so get that out of the way.\n sIndex += minMatch;\n mIndex += minMatch;\n\n // Determine match length.\n // N.B.: mLength does not include minMatch, Lz4 adds it back\n // in decoding.\n mLength = sIndex;\n while (sIndex < sEnd - searchLimit && src[sIndex] === src[mIndex]) {\n sIndex++;\n mIndex++;\n }\n mLength = sIndex - mLength;\n\n // Write token + literal count.\n var token = mLength < mlMask ? mLength : mlMask;\n if (literalCount >= runMask) {\n dst[dIndex++] = (runMask << mlBits) + token;\n for (n = literalCount - runMask; n >= 0xff; n -= 0xff) {\n dst[dIndex++] = 0xff;\n }\n dst[dIndex++] = n;\n } else {\n dst[dIndex++] = (literalCount << mlBits) + token;\n }\n\n // Write literals.\n for (var i = 0; i < literalCount; i++) {\n dst[dIndex++] = src[mAnchor + i];\n }\n\n // Write offset.\n dst[dIndex++] = mOffset;\n dst[dIndex++] = (mOffset >> 8);\n\n // Write match length.\n if (mLength >= mlMask) {\n for (n = mLength - mlMask; n >= 0xff; n -= 0xff) {\n dst[dIndex++] = 0xff;\n }\n dst[dIndex++] = n;\n }\n\n // Move the anchor.\n mAnchor = sIndex;\n }\n }\n\n // Nothing was encoded.\n if (mAnchor === 0) {\n return 0;\n }\n\n // Write remaining literals.\n // Write literal token+count.\n literalCount = sEnd - mAnchor;\n if (literalCount >= runMask) {\n dst[dIndex++] = (runMask << mlBits);\n for (n = literalCount - runMask; n >= 0xff; n -= 0xff) {\n dst[dIndex++] = 0xff;\n }\n dst[dIndex++] = n;\n } else {\n dst[dIndex++] = (literalCount << mlBits);\n }\n\n // Write literals.\n sIndex = mAnchor;\n while (sIndex < sEnd) {\n dst[dIndex++] = src[sIndex++];\n }\n\n return dIndex;\n};\n\n// Decompresses a frame of Lz4 data.\nexports.decompressFrame = function decompressFrame (src, dst) {\n var useBlockSum, useContentSum, useContentSize, descriptor;\n var sIndex = 0;\n var dIndex = 0;\n\n // Read magic number\n if (util.readU32(src, sIndex) !== magicNum) {\n throw new Error('invalid magic number');\n }\n\n sIndex += 4;\n\n // Read descriptor\n descriptor = src[sIndex++];\n\n // Check version\n if ((descriptor & fdVersionMask) !== fdVersion) {\n throw new Error('incompatible descriptor version');\n }\n\n // Read flags\n useBlockSum = (descriptor & fdBlockChksum) !== 0;\n useContentSum = (descriptor & fdContentChksum) !== 0;\n useContentSize = (descriptor & fdContentSize) !== 0;\n\n // Read block size\n var bsIdx = (src[sIndex++] >> bsShift) & bsMask;\n\n if (bsMap[bsIdx] === undefined) {\n throw new Error('invalid block size');\n }\n\n if (useContentSize) {\n // TODO: read content size\n sIndex += 8;\n }\n\n sIndex++;\n\n // Read blocks.\n while (true) {\n var compSize;\n\n compSize = util.readU32(src, sIndex);\n sIndex += 4;\n\n if (compSize === 0) {\n break;\n }\n\n if (useBlockSum) {\n // TODO: read block checksum\n sIndex += 4;\n }\n\n // Check if block is compressed\n if ((compSize & bsUncompressed) !== 0) {\n // Mask off the 'uncompressed' bit\n compSize &= ~bsUncompressed;\n\n // Copy uncompressed data into destination buffer.\n for (var j = 0; j < compSize; j++) {\n dst[dIndex++] = src[sIndex++];\n }\n } else {\n // Decompress into blockBuf\n dIndex = exports.decompressBlock(src, dst, sIndex, compSize, dIndex);\n sIndex += compSize;\n }\n }\n\n if (useContentSum) {\n // TODO: read content checksum\n sIndex += 4;\n }\n\n return dIndex;\n};\n\n// Compresses data to an Lz4 frame.\nexports.compressFrame = function compressFrame (src, dst) {\n var dIndex = 0;\n\n // Write magic number.\n util.writeU32(dst, dIndex, magicNum);\n dIndex += 4;\n\n // Descriptor flags.\n dst[dIndex++] = fdVersion;\n dst[dIndex++] = bsDefault << bsShift;\n\n // Descriptor checksum.\n dst[dIndex] = xxhash.hash(0, dst, 4, dIndex - 4) >> 8;\n dIndex++;\n\n // Write blocks.\n var maxBlockSize = bsMap[bsDefault];\n var remaining = src.length;\n var sIndex = 0;\n\n // Clear the hashtable.\n clearHashTable(hashTable);\n\n // Split input into blocks and write.\n while (remaining > 0) {\n var compSize = 0;\n var blockSize = remaining > maxBlockSize ? maxBlockSize : remaining;\n\n compSize = exports.compressBlock(src, blockBuf, sIndex, blockSize, hashTable);\n\n if (compSize > blockSize || compSize === 0) {\n // Output uncompressed.\n util.writeU32(dst, dIndex, 0x80000000 | blockSize);\n dIndex += 4;\n\n for (var z = sIndex + blockSize; sIndex < z;) {\n dst[dIndex++] = src[sIndex++];\n }\n\n remaining -= blockSize;\n } else {\n // Output compressed.\n util.writeU32(dst, dIndex, compSize);\n dIndex += 4;\n\n for (var j = 0; j < compSize;) {\n dst[dIndex++] = blockBuf[j++];\n }\n\n sIndex += blockSize;\n remaining -= blockSize;\n }\n }\n\n // Write blank end block.\n util.writeU32(dst, dIndex, 0);\n dIndex += 4;\n\n return dIndex;\n};\n\n// Decompresses a buffer containing an Lz4 frame. maxSize is optional; if not\n// provided, a maximum size will be determined by examining the data. The\n// buffer returned will always be perfectly-sized.\nexports.decompress = function decompress (src, maxSize) {\n var dst, size;\n\n if (maxSize === undefined) {\n maxSize = exports.decompressBound(src);\n }\n\n dst = exports.makeBuffer(maxSize);\n size = exports.decompressFrame(src, dst);\n\n if (size !== maxSize) {\n dst = sliceArray(dst, 0, size);\n }\n\n return dst;\n};\n\n// Compresses a buffer to an Lz4 frame. maxSize is optional; if not provided,\n// a buffer will be created based on the theoretical worst output size for a\n// given input size. The buffer returned will always be perfectly-sized.\nexports.compress = function compress (src, maxSize) {\n var dst, size;\n\n if (maxSize === undefined) {\n maxSize = exports.compressBound(src.length);\n }\n\n dst = exports.makeBuffer(maxSize);\n size = exports.compressFrame(src, dst);\n\n if (size !== maxSize) {\n dst = sliceArray(dst, 0, size);\n }\n\n return dst;\n};\n\n\n//# sourceURL=webpack://sqlitecloud/./node_modules/lz4js/lz4.js?"); + +/***/ }), + +/***/ "./node_modules/lz4js/util.js": +/*!************************************!*\ + !*** ./node_modules/lz4js/util.js ***! + \************************************/ +/***/ ((__unused_webpack_module, exports) => { + +eval("// Simple hash function, from: http://burtleburtle.net/bob/hash/integer.html.\n// Chosen because it doesn't use multiply and achieves full avalanche.\nexports.hashU32 = function hashU32 (a) {\n a = a | 0;\n a = a + 2127912214 + (a << 12) | 0;\n a = a ^ -949894596 ^ a >>> 19;\n a = a + 374761393 + (a << 5) | 0;\n a = a + -744332180 ^ a << 9;\n a = a + -42973499 + (a << 3) | 0;\n return a ^ -1252372727 ^ a >>> 16 | 0;\n};\n\n// Reads a 64-bit little-endian integer from an array.\nexports.readU64 = function readU64 (b, n) {\n var x = 0;\n x |= b[n++] << 0;\n x |= b[n++] << 8;\n x |= b[n++] << 16;\n x |= b[n++] << 24;\n x |= b[n++] << 32;\n x |= b[n++] << 40;\n x |= b[n++] << 48;\n x |= b[n++] << 56;\n return x;\n};\n\n// Reads a 32-bit little-endian integer from an array.\nexports.readU32 = function readU32 (b, n) {\n var x = 0;\n x |= b[n++] << 0;\n x |= b[n++] << 8;\n x |= b[n++] << 16;\n x |= b[n++] << 24;\n return x;\n};\n\n// Writes a 32-bit little-endian integer from an array.\nexports.writeU32 = function writeU32 (b, n, x) {\n b[n++] = (x >> 0) & 0xff;\n b[n++] = (x >> 8) & 0xff;\n b[n++] = (x >> 16) & 0xff;\n b[n++] = (x >> 24) & 0xff;\n};\n\n// Multiplies two numbers using 32-bit integer multiplication.\n// Algorithm from Emscripten.\nexports.imul = function imul (a, b) {\n var ah = a >>> 16;\n var al = a & 65535;\n var bh = b >>> 16;\n var bl = b & 65535;\n\n return al * bl + (ah * bl + al * bh << 16) | 0;\n};\n\n\n//# sourceURL=webpack://sqlitecloud/./node_modules/lz4js/util.js?"); + +/***/ }), + +/***/ "./node_modules/lz4js/xxh32.js": +/*!*************************************!*\ + !*** ./node_modules/lz4js/xxh32.js ***! + \*************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +eval("// xxh32.js - implementation of xxhash32 in plain JavaScript\nvar util = __webpack_require__(/*! ./util.js */ \"./node_modules/lz4js/util.js\");\n\n// xxhash32 primes\nvar prime1 = 0x9e3779b1;\nvar prime2 = 0x85ebca77;\nvar prime3 = 0xc2b2ae3d;\nvar prime4 = 0x27d4eb2f;\nvar prime5 = 0x165667b1;\n\n// Utility functions/primitives\n// --\n\nfunction rotl32 (x, r) {\n x = x | 0;\n r = r | 0;\n\n return x >>> (32 - r | 0) | x << r | 0;\n}\n\nfunction rotmul32 (h, r, m) {\n h = h | 0;\n r = r | 0;\n m = m | 0;\n\n return util.imul(h >>> (32 - r | 0) | h << r, m) | 0;\n}\n\nfunction shiftxor32 (h, s) {\n h = h | 0;\n s = s | 0;\n\n return h >>> s ^ h | 0;\n}\n\n// Implementation\n// --\n\nfunction xxhapply (h, src, m0, s, m1) {\n return rotmul32(util.imul(src, m0) + h, s, m1);\n}\n\nfunction xxh1 (h, src, index) {\n return rotmul32((h + util.imul(src[index], prime5)), 11, prime1);\n}\n\nfunction xxh4 (h, src, index) {\n return xxhapply(h, util.readU32(src, index), prime3, 17, prime4);\n}\n\nfunction xxh16 (h, src, index) {\n return [\n xxhapply(h[0], util.readU32(src, index + 0), prime2, 13, prime1),\n xxhapply(h[1], util.readU32(src, index + 4), prime2, 13, prime1),\n xxhapply(h[2], util.readU32(src, index + 8), prime2, 13, prime1),\n xxhapply(h[3], util.readU32(src, index + 12), prime2, 13, prime1)\n ];\n}\n\nfunction xxh32 (seed, src, index, len) {\n var h, l;\n l = len;\n if (len >= 16) {\n h = [\n seed + prime1 + prime2,\n seed + prime2,\n seed,\n seed - prime1\n ];\n\n while (len >= 16) {\n h = xxh16(h, src, index);\n\n index += 16;\n len -= 16;\n }\n\n h = rotl32(h[0], 1) + rotl32(h[1], 7) + rotl32(h[2], 12) + rotl32(h[3], 18) + l;\n } else {\n h = (seed + prime5 + len) >>> 0;\n }\n\n while (len >= 4) {\n h = xxh4(h, src, index);\n\n index += 4;\n len -= 4;\n }\n\n while (len > 0) {\n h = xxh1(h, src, index);\n\n index++;\n len--;\n }\n\n h = shiftxor32(util.imul(shiftxor32(util.imul(shiftxor32(h, 15), prime2), 13), prime3), 16);\n\n return h >>> 0;\n}\n\nexports.hash = xxh32;\n\n\n//# sourceURL=webpack://sqlitecloud/./node_modules/lz4js/xxh32.js?"); + +/***/ }), + +/***/ "./node_modules/ms/index.js": +/*!**********************************!*\ + !*** ./node_modules/ms/index.js ***! + \**********************************/ +/***/ ((module) => { + +eval("/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar w = d * 7;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n * - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function(val, options) {\n options = options || {};\n var type = typeof val;\n if (type === 'string' && val.length > 0) {\n return parse(val);\n } else if (type === 'number' && isFinite(val)) {\n return options.long ? fmtLong(val) : fmtShort(val);\n }\n throw new Error(\n 'val is not a non-empty string or a valid number. val=' +\n JSON.stringify(val)\n );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n str = String(str);\n if (str.length > 100) {\n return;\n }\n var match = /^(-?(?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(\n str\n );\n if (!match) {\n return;\n }\n var n = parseFloat(match[1]);\n var type = (match[2] || 'ms').toLowerCase();\n switch (type) {\n case 'years':\n case 'year':\n case 'yrs':\n case 'yr':\n case 'y':\n return n * y;\n case 'weeks':\n case 'week':\n case 'w':\n return n * w;\n case 'days':\n case 'day':\n case 'd':\n return n * d;\n case 'hours':\n case 'hour':\n case 'hrs':\n case 'hr':\n case 'h':\n return n * h;\n case 'minutes':\n case 'minute':\n case 'mins':\n case 'min':\n case 'm':\n return n * m;\n case 'seconds':\n case 'second':\n case 'secs':\n case 'sec':\n case 's':\n return n * s;\n case 'milliseconds':\n case 'millisecond':\n case 'msecs':\n case 'msec':\n case 'ms':\n return n;\n default:\n return undefined;\n }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return Math.round(ms / d) + 'd';\n }\n if (msAbs >= h) {\n return Math.round(ms / h) + 'h';\n }\n if (msAbs >= m) {\n return Math.round(ms / m) + 'm';\n }\n if (msAbs >= s) {\n return Math.round(ms / s) + 's';\n }\n return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return plural(ms, msAbs, d, 'day');\n }\n if (msAbs >= h) {\n return plural(ms, msAbs, h, 'hour');\n }\n if (msAbs >= m) {\n return plural(ms, msAbs, m, 'minute');\n }\n if (msAbs >= s) {\n return plural(ms, msAbs, s, 'second');\n }\n return ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, msAbs, n, name) {\n var isPlural = msAbs >= n * 1.5;\n return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : '');\n}\n\n\n//# sourceURL=webpack://sqlitecloud/./node_modules/ms/index.js?"); + +/***/ }), + +/***/ "?f22e": +/*!*********************!*\ + !*** tls (ignored) ***! + \*********************/ +/***/ (() => { + +eval("/* (ignored) */\n\n//# sourceURL=webpack://sqlitecloud/tls_(ignored)?"); + +/***/ }), + +/***/ "./node_modules/engine.io-client/build/cjs/contrib/has-cors.js": +/*!*********************************************************************!*\ + !*** ./node_modules/engine.io-client/build/cjs/contrib/has-cors.js ***! + \*********************************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.hasCORS = void 0;\n// imported from https://github.com/component/has-cors\nlet value = false;\ntry {\n value = typeof XMLHttpRequest !== 'undefined' &&\n 'withCredentials' in new XMLHttpRequest();\n}\ncatch (err) {\n // if XMLHttp support is disabled in IE then it will throw\n // when trying to create\n}\nexports.hasCORS = value;\n\n\n//# sourceURL=webpack://sqlitecloud/./node_modules/engine.io-client/build/cjs/contrib/has-cors.js?"); + +/***/ }), + +/***/ "./node_modules/engine.io-client/build/cjs/contrib/parseqs.js": +/*!********************************************************************!*\ + !*** ./node_modules/engine.io-client/build/cjs/contrib/parseqs.js ***! + \********************************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; +eval("\n// imported from https://github.com/galkn/querystring\n/**\n * Compiles a querystring\n * Returns string representation of the object\n *\n * @param {Object}\n * @api private\n */\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.decode = exports.encode = void 0;\nfunction encode(obj) {\n let str = '';\n for (let i in obj) {\n if (obj.hasOwnProperty(i)) {\n if (str.length)\n str += '&';\n str += encodeURIComponent(i) + '=' + encodeURIComponent(obj[i]);\n }\n }\n return str;\n}\nexports.encode = encode;\n/**\n * Parses a simple querystring into an object\n *\n * @param {String} qs\n * @api private\n */\nfunction decode(qs) {\n let qry = {};\n let pairs = qs.split('&');\n for (let i = 0, l = pairs.length; i < l; i++) {\n let pair = pairs[i].split('=');\n qry[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1]);\n }\n return qry;\n}\nexports.decode = decode;\n\n\n//# sourceURL=webpack://sqlitecloud/./node_modules/engine.io-client/build/cjs/contrib/parseqs.js?"); + +/***/ }), + +/***/ "./node_modules/engine.io-client/build/cjs/contrib/parseuri.js": +/*!*********************************************************************!*\ + !*** ./node_modules/engine.io-client/build/cjs/contrib/parseuri.js ***! + \*********************************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.parse = void 0;\n// imported from https://github.com/galkn/parseuri\n/**\n * Parses a URI\n *\n * Note: we could also have used the built-in URL object, but it isn't supported on all platforms.\n *\n * See:\n * - https://developer.mozilla.org/en-US/docs/Web/API/URL\n * - https://caniuse.com/url\n * - https://www.rfc-editor.org/rfc/rfc3986#appendix-B\n *\n * History of the parse() method:\n * - first commit: https://github.com/socketio/socket.io-client/commit/4ee1d5d94b3906a9c052b459f1a818b15f38f91c\n * - export into its own module: https://github.com/socketio/engine.io-client/commit/de2c561e4564efeb78f1bdb1ba39ef81b2822cb3\n * - reimport: https://github.com/socketio/engine.io-client/commit/df32277c3f6d622eec5ed09f493cae3f3391d242\n *\n * @author Steven Levithan (MIT license)\n * @api private\n */\nconst re = /^(?:(?![^:@\\/?#]+:[^:@\\/]*@)(http|https|ws|wss):\\/\\/)?((?:(([^:@\\/?#]*)(?::([^:@\\/?#]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/;\nconst parts = [\n 'source', 'protocol', 'authority', 'userInfo', 'user', 'password', 'host', 'port', 'relative', 'path', 'directory', 'file', 'query', 'anchor'\n];\nfunction parse(str) {\n if (str.length > 2000) {\n throw \"URI too long\";\n }\n const src = str, b = str.indexOf('['), e = str.indexOf(']');\n if (b != -1 && e != -1) {\n str = str.substring(0, b) + str.substring(b, e).replace(/:/g, ';') + str.substring(e, str.length);\n }\n let m = re.exec(str || ''), uri = {}, i = 14;\n while (i--) {\n uri[parts[i]] = m[i] || '';\n }\n if (b != -1 && e != -1) {\n uri.source = src;\n uri.host = uri.host.substring(1, uri.host.length - 1).replace(/;/g, ':');\n uri.authority = uri.authority.replace('[', '').replace(']', '').replace(/;/g, ':');\n uri.ipv6uri = true;\n }\n uri.pathNames = pathNames(uri, uri['path']);\n uri.queryKey = queryKey(uri, uri['query']);\n return uri;\n}\nexports.parse = parse;\nfunction pathNames(obj, path) {\n const regx = /\\/{2,9}/g, names = path.replace(regx, \"/\").split(\"/\");\n if (path.slice(0, 1) == '/' || path.length === 0) {\n names.splice(0, 1);\n }\n if (path.slice(-1) == '/') {\n names.splice(names.length - 1, 1);\n }\n return names;\n}\nfunction queryKey(uri, query) {\n const data = {};\n query.replace(/(?:^|&)([^&=]*)=?([^&]*)/g, function ($0, $1, $2) {\n if ($1) {\n data[$1] = $2;\n }\n });\n return data;\n}\n\n\n//# sourceURL=webpack://sqlitecloud/./node_modules/engine.io-client/build/cjs/contrib/parseuri.js?"); + +/***/ }), + +/***/ "./node_modules/engine.io-client/build/cjs/contrib/yeast.js": +/*!******************************************************************!*\ + !*** ./node_modules/engine.io-client/build/cjs/contrib/yeast.js ***! + \******************************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; +eval("// imported from https://github.com/unshiftio/yeast\n\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.yeast = exports.decode = exports.encode = void 0;\nconst alphabet = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_'.split(''), length = 64, map = {};\nlet seed = 0, i = 0, prev;\n/**\n * Return a string representing the specified number.\n *\n * @param {Number} num The number to convert.\n * @returns {String} The string representation of the number.\n * @api public\n */\nfunction encode(num) {\n let encoded = '';\n do {\n encoded = alphabet[num % length] + encoded;\n num = Math.floor(num / length);\n } while (num > 0);\n return encoded;\n}\nexports.encode = encode;\n/**\n * Return the integer value specified by the given string.\n *\n * @param {String} str The string to convert.\n * @returns {Number} The integer value represented by the string.\n * @api public\n */\nfunction decode(str) {\n let decoded = 0;\n for (i = 0; i < str.length; i++) {\n decoded = decoded * length + map[str.charAt(i)];\n }\n return decoded;\n}\nexports.decode = decode;\n/**\n * Yeast: A tiny growing id generator.\n *\n * @returns {String} A unique id.\n * @api public\n */\nfunction yeast() {\n const now = encode(+new Date());\n if (now !== prev)\n return seed = 0, prev = now;\n return now + '.' + encode(seed++);\n}\nexports.yeast = yeast;\n//\n// Map each character to its index.\n//\nfor (; i < length; i++)\n map[alphabet[i]] = i;\n\n\n//# sourceURL=webpack://sqlitecloud/./node_modules/engine.io-client/build/cjs/contrib/yeast.js?"); + +/***/ }), + +/***/ "./node_modules/engine.io-client/build/cjs/globalThis.browser.js": +/*!***********************************************************************!*\ + !*** ./node_modules/engine.io-client/build/cjs/globalThis.browser.js ***! + \***********************************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.globalThisShim = void 0;\nexports.globalThisShim = (() => {\n if (typeof self !== \"undefined\") {\n return self;\n }\n else if (typeof window !== \"undefined\") {\n return window;\n }\n else {\n return Function(\"return this\")();\n }\n})();\n\n\n//# sourceURL=webpack://sqlitecloud/./node_modules/engine.io-client/build/cjs/globalThis.browser.js?"); + +/***/ }), + +/***/ "./node_modules/engine.io-client/build/cjs/index.js": +/*!**********************************************************!*\ + !*** ./node_modules/engine.io-client/build/cjs/index.js ***! + \**********************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.nextTick = exports.parse = exports.installTimerFunctions = exports.transports = exports.TransportError = exports.Transport = exports.protocol = exports.Socket = void 0;\nconst socket_js_1 = __webpack_require__(/*! ./socket.js */ \"./node_modules/engine.io-client/build/cjs/socket.js\");\nObject.defineProperty(exports, \"Socket\", ({ enumerable: true, get: function () { return socket_js_1.Socket; } }));\nexports.protocol = socket_js_1.Socket.protocol;\nvar transport_js_1 = __webpack_require__(/*! ./transport.js */ \"./node_modules/engine.io-client/build/cjs/transport.js\");\nObject.defineProperty(exports, \"Transport\", ({ enumerable: true, get: function () { return transport_js_1.Transport; } }));\nObject.defineProperty(exports, \"TransportError\", ({ enumerable: true, get: function () { return transport_js_1.TransportError; } }));\nvar index_js_1 = __webpack_require__(/*! ./transports/index.js */ \"./node_modules/engine.io-client/build/cjs/transports/index.js\");\nObject.defineProperty(exports, \"transports\", ({ enumerable: true, get: function () { return index_js_1.transports; } }));\nvar util_js_1 = __webpack_require__(/*! ./util.js */ \"./node_modules/engine.io-client/build/cjs/util.js\");\nObject.defineProperty(exports, \"installTimerFunctions\", ({ enumerable: true, get: function () { return util_js_1.installTimerFunctions; } }));\nvar parseuri_js_1 = __webpack_require__(/*! ./contrib/parseuri.js */ \"./node_modules/engine.io-client/build/cjs/contrib/parseuri.js\");\nObject.defineProperty(exports, \"parse\", ({ enumerable: true, get: function () { return parseuri_js_1.parse; } }));\nvar websocket_constructor_js_1 = __webpack_require__(/*! ./transports/websocket-constructor.js */ \"./node_modules/engine.io-client/build/cjs/transports/websocket-constructor.browser.js\");\nObject.defineProperty(exports, \"nextTick\", ({ enumerable: true, get: function () { return websocket_constructor_js_1.nextTick; } }));\n\n\n//# sourceURL=webpack://sqlitecloud/./node_modules/engine.io-client/build/cjs/index.js?"); + +/***/ }), + +/***/ "./node_modules/engine.io-client/build/cjs/socket.js": +/*!***********************************************************!*\ + !*** ./node_modules/engine.io-client/build/cjs/socket.js ***! + \***********************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; +eval("\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.Socket = void 0;\nconst index_js_1 = __webpack_require__(/*! ./transports/index.js */ \"./node_modules/engine.io-client/build/cjs/transports/index.js\");\nconst util_js_1 = __webpack_require__(/*! ./util.js */ \"./node_modules/engine.io-client/build/cjs/util.js\");\nconst parseqs_js_1 = __webpack_require__(/*! ./contrib/parseqs.js */ \"./node_modules/engine.io-client/build/cjs/contrib/parseqs.js\");\nconst parseuri_js_1 = __webpack_require__(/*! ./contrib/parseuri.js */ \"./node_modules/engine.io-client/build/cjs/contrib/parseuri.js\");\nconst debug_1 = __importDefault(__webpack_require__(/*! debug */ \"./node_modules/debug/src/browser.js\")); // debug()\nconst component_emitter_1 = __webpack_require__(/*! @socket.io/component-emitter */ \"./node_modules/@socket.io/component-emitter/index.mjs\");\nconst engine_io_parser_1 = __webpack_require__(/*! engine.io-parser */ \"./node_modules/engine.io-parser/build/cjs/index.js\");\nconst websocket_constructor_js_1 = __webpack_require__(/*! ./transports/websocket-constructor.js */ \"./node_modules/engine.io-client/build/cjs/transports/websocket-constructor.browser.js\");\nconst debug = (0, debug_1.default)(\"engine.io-client:socket\"); // debug()\nclass Socket extends component_emitter_1.Emitter {\n /**\n * Socket constructor.\n *\n * @param {String|Object} uri - uri or options\n * @param {Object} opts - options\n */\n constructor(uri, opts = {}) {\n super();\n this.binaryType = websocket_constructor_js_1.defaultBinaryType;\n this.writeBuffer = [];\n if (uri && \"object\" === typeof uri) {\n opts = uri;\n uri = null;\n }\n if (uri) {\n uri = (0, parseuri_js_1.parse)(uri);\n opts.hostname = uri.host;\n opts.secure = uri.protocol === \"https\" || uri.protocol === \"wss\";\n opts.port = uri.port;\n if (uri.query)\n opts.query = uri.query;\n }\n else if (opts.host) {\n opts.hostname = (0, parseuri_js_1.parse)(opts.host).host;\n }\n (0, util_js_1.installTimerFunctions)(this, opts);\n this.secure =\n null != opts.secure\n ? opts.secure\n : typeof location !== \"undefined\" && \"https:\" === location.protocol;\n if (opts.hostname && !opts.port) {\n // if no port is specified manually, use the protocol default\n opts.port = this.secure ? \"443\" : \"80\";\n }\n this.hostname =\n opts.hostname ||\n (typeof location !== \"undefined\" ? location.hostname : \"localhost\");\n this.port =\n opts.port ||\n (typeof location !== \"undefined\" && location.port\n ? location.port\n : this.secure\n ? \"443\"\n : \"80\");\n this.transports = opts.transports || [\n \"polling\",\n \"websocket\",\n \"webtransport\",\n ];\n this.writeBuffer = [];\n this.prevBufferLen = 0;\n this.opts = Object.assign({\n path: \"/engine.io\",\n agent: false,\n withCredentials: false,\n upgrade: true,\n timestampParam: \"t\",\n rememberUpgrade: false,\n addTrailingSlash: true,\n rejectUnauthorized: true,\n perMessageDeflate: {\n threshold: 1024,\n },\n transportOptions: {},\n closeOnBeforeunload: false,\n }, opts);\n this.opts.path =\n this.opts.path.replace(/\\/$/, \"\") +\n (this.opts.addTrailingSlash ? \"/\" : \"\");\n if (typeof this.opts.query === \"string\") {\n this.opts.query = (0, parseqs_js_1.decode)(this.opts.query);\n }\n // set on handshake\n this.id = null;\n this.upgrades = null;\n this.pingInterval = null;\n this.pingTimeout = null;\n // set on heartbeat\n this.pingTimeoutTimer = null;\n if (typeof addEventListener === \"function\") {\n if (this.opts.closeOnBeforeunload) {\n // Firefox closes the connection when the \"beforeunload\" event is emitted but not Chrome. This event listener\n // ensures every browser behaves the same (no \"disconnect\" event at the Socket.IO level when the page is\n // closed/reloaded)\n this.beforeunloadEventListener = () => {\n if (this.transport) {\n // silently close the transport\n this.transport.removeAllListeners();\n this.transport.close();\n }\n };\n addEventListener(\"beforeunload\", this.beforeunloadEventListener, false);\n }\n if (this.hostname !== \"localhost\") {\n this.offlineEventListener = () => {\n this.onClose(\"transport close\", {\n description: \"network connection lost\",\n });\n };\n addEventListener(\"offline\", this.offlineEventListener, false);\n }\n }\n this.open();\n }\n /**\n * Creates transport of the given type.\n *\n * @param {String} name - transport name\n * @return {Transport}\n * @private\n */\n createTransport(name) {\n debug('creating transport \"%s\"', name);\n const query = Object.assign({}, this.opts.query);\n // append engine.io protocol identifier\n query.EIO = engine_io_parser_1.protocol;\n // transport name\n query.transport = name;\n // session id if we already have one\n if (this.id)\n query.sid = this.id;\n const opts = Object.assign({}, this.opts, {\n query,\n socket: this,\n hostname: this.hostname,\n secure: this.secure,\n port: this.port,\n }, this.opts.transportOptions[name]);\n debug(\"options: %j\", opts);\n return new index_js_1.transports[name](opts);\n }\n /**\n * Initializes transport to use and starts probe.\n *\n * @private\n */\n open() {\n let transport;\n if (this.opts.rememberUpgrade &&\n Socket.priorWebsocketSuccess &&\n this.transports.indexOf(\"websocket\") !== -1) {\n transport = \"websocket\";\n }\n else if (0 === this.transports.length) {\n // Emit error on next tick so it can be listened to\n this.setTimeoutFn(() => {\n this.emitReserved(\"error\", \"No transports available\");\n }, 0);\n return;\n }\n else {\n transport = this.transports[0];\n }\n this.readyState = \"opening\";\n // Retry with the next transport if the transport is disabled (jsonp: false)\n try {\n transport = this.createTransport(transport);\n }\n catch (e) {\n debug(\"error while creating transport: %s\", e);\n this.transports.shift();\n this.open();\n return;\n }\n transport.open();\n this.setTransport(transport);\n }\n /**\n * Sets the current transport. Disables the existing one (if any).\n *\n * @private\n */\n setTransport(transport) {\n debug(\"setting transport %s\", transport.name);\n if (this.transport) {\n debug(\"clearing existing transport %s\", this.transport.name);\n this.transport.removeAllListeners();\n }\n // set up transport\n this.transport = transport;\n // set up transport listeners\n transport\n .on(\"drain\", this.onDrain.bind(this))\n .on(\"packet\", this.onPacket.bind(this))\n .on(\"error\", this.onError.bind(this))\n .on(\"close\", (reason) => this.onClose(\"transport close\", reason));\n }\n /**\n * Probes a transport.\n *\n * @param {String} name - transport name\n * @private\n */\n probe(name) {\n debug('probing transport \"%s\"', name);\n let transport = this.createTransport(name);\n let failed = false;\n Socket.priorWebsocketSuccess = false;\n const onTransportOpen = () => {\n if (failed)\n return;\n debug('probe transport \"%s\" opened', name);\n transport.send([{ type: \"ping\", data: \"probe\" }]);\n transport.once(\"packet\", (msg) => {\n if (failed)\n return;\n if (\"pong\" === msg.type && \"probe\" === msg.data) {\n debug('probe transport \"%s\" pong', name);\n this.upgrading = true;\n this.emitReserved(\"upgrading\", transport);\n if (!transport)\n return;\n Socket.priorWebsocketSuccess = \"websocket\" === transport.name;\n debug('pausing current transport \"%s\"', this.transport.name);\n this.transport.pause(() => {\n if (failed)\n return;\n if (\"closed\" === this.readyState)\n return;\n debug(\"changing transport and sending upgrade packet\");\n cleanup();\n this.setTransport(transport);\n transport.send([{ type: \"upgrade\" }]);\n this.emitReserved(\"upgrade\", transport);\n transport = null;\n this.upgrading = false;\n this.flush();\n });\n }\n else {\n debug('probe transport \"%s\" failed', name);\n const err = new Error(\"probe error\");\n // @ts-ignore\n err.transport = transport.name;\n this.emitReserved(\"upgradeError\", err);\n }\n });\n };\n function freezeTransport() {\n if (failed)\n return;\n // Any callback called by transport should be ignored since now\n failed = true;\n cleanup();\n transport.close();\n transport = null;\n }\n // Handle any error that happens while probing\n const onerror = (err) => {\n const error = new Error(\"probe error: \" + err);\n // @ts-ignore\n error.transport = transport.name;\n freezeTransport();\n debug('probe transport \"%s\" failed because of error: %s', name, err);\n this.emitReserved(\"upgradeError\", error);\n };\n function onTransportClose() {\n onerror(\"transport closed\");\n }\n // When the socket is closed while we're probing\n function onclose() {\n onerror(\"socket closed\");\n }\n // When the socket is upgraded while we're probing\n function onupgrade(to) {\n if (transport && to.name !== transport.name) {\n debug('\"%s\" works - aborting \"%s\"', to.name, transport.name);\n freezeTransport();\n }\n }\n // Remove all listeners on the transport and on self\n const cleanup = () => {\n transport.removeListener(\"open\", onTransportOpen);\n transport.removeListener(\"error\", onerror);\n transport.removeListener(\"close\", onTransportClose);\n this.off(\"close\", onclose);\n this.off(\"upgrading\", onupgrade);\n };\n transport.once(\"open\", onTransportOpen);\n transport.once(\"error\", onerror);\n transport.once(\"close\", onTransportClose);\n this.once(\"close\", onclose);\n this.once(\"upgrading\", onupgrade);\n if (this.upgrades.indexOf(\"webtransport\") !== -1 &&\n name !== \"webtransport\") {\n // favor WebTransport\n this.setTimeoutFn(() => {\n if (!failed) {\n transport.open();\n }\n }, 200);\n }\n else {\n transport.open();\n }\n }\n /**\n * Called when connection is deemed open.\n *\n * @private\n */\n onOpen() {\n debug(\"socket open\");\n this.readyState = \"open\";\n Socket.priorWebsocketSuccess = \"websocket\" === this.transport.name;\n this.emitReserved(\"open\");\n this.flush();\n // we check for `readyState` in case an `open`\n // listener already closed the socket\n if (\"open\" === this.readyState && this.opts.upgrade) {\n debug(\"starting upgrade probes\");\n let i = 0;\n const l = this.upgrades.length;\n for (; i < l; i++) {\n this.probe(this.upgrades[i]);\n }\n }\n }\n /**\n * Handles a packet.\n *\n * @private\n */\n onPacket(packet) {\n if (\"opening\" === this.readyState ||\n \"open\" === this.readyState ||\n \"closing\" === this.readyState) {\n debug('socket receive: type \"%s\", data \"%s\"', packet.type, packet.data);\n this.emitReserved(\"packet\", packet);\n // Socket is live - any packet counts\n this.emitReserved(\"heartbeat\");\n this.resetPingTimeout();\n switch (packet.type) {\n case \"open\":\n this.onHandshake(JSON.parse(packet.data));\n break;\n case \"ping\":\n this.sendPacket(\"pong\");\n this.emitReserved(\"ping\");\n this.emitReserved(\"pong\");\n break;\n case \"error\":\n const err = new Error(\"server error\");\n // @ts-ignore\n err.code = packet.data;\n this.onError(err);\n break;\n case \"message\":\n this.emitReserved(\"data\", packet.data);\n this.emitReserved(\"message\", packet.data);\n break;\n }\n }\n else {\n debug('packet received with socket readyState \"%s\"', this.readyState);\n }\n }\n /**\n * Called upon handshake completion.\n *\n * @param {Object} data - handshake obj\n * @private\n */\n onHandshake(data) {\n this.emitReserved(\"handshake\", data);\n this.id = data.sid;\n this.transport.query.sid = data.sid;\n this.upgrades = this.filterUpgrades(data.upgrades);\n this.pingInterval = data.pingInterval;\n this.pingTimeout = data.pingTimeout;\n this.maxPayload = data.maxPayload;\n this.onOpen();\n // In case open handler closes socket\n if (\"closed\" === this.readyState)\n return;\n this.resetPingTimeout();\n }\n /**\n * Sets and resets ping timeout timer based on server pings.\n *\n * @private\n */\n resetPingTimeout() {\n this.clearTimeoutFn(this.pingTimeoutTimer);\n this.pingTimeoutTimer = this.setTimeoutFn(() => {\n this.onClose(\"ping timeout\");\n }, this.pingInterval + this.pingTimeout);\n if (this.opts.autoUnref) {\n this.pingTimeoutTimer.unref();\n }\n }\n /**\n * Called on `drain` event\n *\n * @private\n */\n onDrain() {\n this.writeBuffer.splice(0, this.prevBufferLen);\n // setting prevBufferLen = 0 is very important\n // for example, when upgrading, upgrade packet is sent over,\n // and a nonzero prevBufferLen could cause problems on `drain`\n this.prevBufferLen = 0;\n if (0 === this.writeBuffer.length) {\n this.emitReserved(\"drain\");\n }\n else {\n this.flush();\n }\n }\n /**\n * Flush write buffers.\n *\n * @private\n */\n flush() {\n if (\"closed\" !== this.readyState &&\n this.transport.writable &&\n !this.upgrading &&\n this.writeBuffer.length) {\n const packets = this.getWritablePackets();\n debug(\"flushing %d packets in socket\", packets.length);\n this.transport.send(packets);\n // keep track of current length of writeBuffer\n // splice writeBuffer and callbackBuffer on `drain`\n this.prevBufferLen = packets.length;\n this.emitReserved(\"flush\");\n }\n }\n /**\n * Ensure the encoded size of the writeBuffer is below the maxPayload value sent by the server (only for HTTP\n * long-polling)\n *\n * @private\n */\n getWritablePackets() {\n const shouldCheckPayloadSize = this.maxPayload &&\n this.transport.name === \"polling\" &&\n this.writeBuffer.length > 1;\n if (!shouldCheckPayloadSize) {\n return this.writeBuffer;\n }\n let payloadSize = 1; // first packet type\n for (let i = 0; i < this.writeBuffer.length; i++) {\n const data = this.writeBuffer[i].data;\n if (data) {\n payloadSize += (0, util_js_1.byteLength)(data);\n }\n if (i > 0 && payloadSize > this.maxPayload) {\n debug(\"only send %d out of %d packets\", i, this.writeBuffer.length);\n return this.writeBuffer.slice(0, i);\n }\n payloadSize += 2; // separator + packet type\n }\n debug(\"payload size is %d (max: %d)\", payloadSize, this.maxPayload);\n return this.writeBuffer;\n }\n /**\n * Sends a message.\n *\n * @param {String} msg - message.\n * @param {Object} options.\n * @param {Function} callback function.\n * @return {Socket} for chaining.\n */\n write(msg, options, fn) {\n this.sendPacket(\"message\", msg, options, fn);\n return this;\n }\n send(msg, options, fn) {\n this.sendPacket(\"message\", msg, options, fn);\n return this;\n }\n /**\n * Sends a packet.\n *\n * @param {String} type: packet type.\n * @param {String} data.\n * @param {Object} options.\n * @param {Function} fn - callback function.\n * @private\n */\n sendPacket(type, data, options, fn) {\n if (\"function\" === typeof data) {\n fn = data;\n data = undefined;\n }\n if (\"function\" === typeof options) {\n fn = options;\n options = null;\n }\n if (\"closing\" === this.readyState || \"closed\" === this.readyState) {\n return;\n }\n options = options || {};\n options.compress = false !== options.compress;\n const packet = {\n type: type,\n data: data,\n options: options,\n };\n this.emitReserved(\"packetCreate\", packet);\n this.writeBuffer.push(packet);\n if (fn)\n this.once(\"flush\", fn);\n this.flush();\n }\n /**\n * Closes the connection.\n */\n close() {\n const close = () => {\n this.onClose(\"forced close\");\n debug(\"socket closing - telling transport to close\");\n this.transport.close();\n };\n const cleanupAndClose = () => {\n this.off(\"upgrade\", cleanupAndClose);\n this.off(\"upgradeError\", cleanupAndClose);\n close();\n };\n const waitForUpgrade = () => {\n // wait for upgrade to finish since we can't send packets while pausing a transport\n this.once(\"upgrade\", cleanupAndClose);\n this.once(\"upgradeError\", cleanupAndClose);\n };\n if (\"opening\" === this.readyState || \"open\" === this.readyState) {\n this.readyState = \"closing\";\n if (this.writeBuffer.length) {\n this.once(\"drain\", () => {\n if (this.upgrading) {\n waitForUpgrade();\n }\n else {\n close();\n }\n });\n }\n else if (this.upgrading) {\n waitForUpgrade();\n }\n else {\n close();\n }\n }\n return this;\n }\n /**\n * Called upon transport error\n *\n * @private\n */\n onError(err) {\n debug(\"socket error %j\", err);\n Socket.priorWebsocketSuccess = false;\n this.emitReserved(\"error\", err);\n this.onClose(\"transport error\", err);\n }\n /**\n * Called upon transport close.\n *\n * @private\n */\n onClose(reason, description) {\n if (\"opening\" === this.readyState ||\n \"open\" === this.readyState ||\n \"closing\" === this.readyState) {\n debug('socket close with reason: \"%s\"', reason);\n // clear timers\n this.clearTimeoutFn(this.pingTimeoutTimer);\n // stop event from firing again for transport\n this.transport.removeAllListeners(\"close\");\n // ensure transport won't stay open\n this.transport.close();\n // ignore further transport communication\n this.transport.removeAllListeners();\n if (typeof removeEventListener === \"function\") {\n removeEventListener(\"beforeunload\", this.beforeunloadEventListener, false);\n removeEventListener(\"offline\", this.offlineEventListener, false);\n }\n // set ready state\n this.readyState = \"closed\";\n // clear session id\n this.id = null;\n // emit close event\n this.emitReserved(\"close\", reason, description);\n // clean buffers after, so users can still\n // grab the buffers on `close` event\n this.writeBuffer = [];\n this.prevBufferLen = 0;\n }\n }\n /**\n * Filters upgrades, returning only those matching client transports.\n *\n * @param {Array} upgrades - server upgrades\n * @private\n */\n filterUpgrades(upgrades) {\n const filteredUpgrades = [];\n let i = 0;\n const j = upgrades.length;\n for (; i < j; i++) {\n if (~this.transports.indexOf(upgrades[i]))\n filteredUpgrades.push(upgrades[i]);\n }\n return filteredUpgrades;\n }\n}\nexports.Socket = Socket;\nSocket.protocol = engine_io_parser_1.protocol;\n\n\n//# sourceURL=webpack://sqlitecloud/./node_modules/engine.io-client/build/cjs/socket.js?"); + +/***/ }), + +/***/ "./node_modules/engine.io-client/build/cjs/transport.js": +/*!**************************************************************!*\ + !*** ./node_modules/engine.io-client/build/cjs/transport.js ***! + \**************************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; +eval("\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.Transport = exports.TransportError = void 0;\nconst engine_io_parser_1 = __webpack_require__(/*! engine.io-parser */ \"./node_modules/engine.io-parser/build/cjs/index.js\");\nconst component_emitter_1 = __webpack_require__(/*! @socket.io/component-emitter */ \"./node_modules/@socket.io/component-emitter/index.mjs\");\nconst util_js_1 = __webpack_require__(/*! ./util.js */ \"./node_modules/engine.io-client/build/cjs/util.js\");\nconst debug_1 = __importDefault(__webpack_require__(/*! debug */ \"./node_modules/debug/src/browser.js\")); // debug()\nconst parseqs_js_1 = __webpack_require__(/*! ./contrib/parseqs.js */ \"./node_modules/engine.io-client/build/cjs/contrib/parseqs.js\");\nconst debug = (0, debug_1.default)(\"engine.io-client:transport\"); // debug()\nclass TransportError extends Error {\n constructor(reason, description, context) {\n super(reason);\n this.description = description;\n this.context = context;\n this.type = \"TransportError\";\n }\n}\nexports.TransportError = TransportError;\nclass Transport extends component_emitter_1.Emitter {\n /**\n * Transport abstract constructor.\n *\n * @param {Object} opts - options\n * @protected\n */\n constructor(opts) {\n super();\n this.writable = false;\n (0, util_js_1.installTimerFunctions)(this, opts);\n this.opts = opts;\n this.query = opts.query;\n this.socket = opts.socket;\n }\n /**\n * Emits an error.\n *\n * @param {String} reason\n * @param description\n * @param context - the error context\n * @return {Transport} for chaining\n * @protected\n */\n onError(reason, description, context) {\n super.emitReserved(\"error\", new TransportError(reason, description, context));\n return this;\n }\n /**\n * Opens the transport.\n */\n open() {\n this.readyState = \"opening\";\n this.doOpen();\n return this;\n }\n /**\n * Closes the transport.\n */\n close() {\n if (this.readyState === \"opening\" || this.readyState === \"open\") {\n this.doClose();\n this.onClose();\n }\n return this;\n }\n /**\n * Sends multiple packets.\n *\n * @param {Array} packets\n */\n send(packets) {\n if (this.readyState === \"open\") {\n this.write(packets);\n }\n else {\n // this might happen if the transport was silently closed in the beforeunload event handler\n debug(\"transport is not open, discarding packets\");\n }\n }\n /**\n * Called upon open\n *\n * @protected\n */\n onOpen() {\n this.readyState = \"open\";\n this.writable = true;\n super.emitReserved(\"open\");\n }\n /**\n * Called with data.\n *\n * @param {String} data\n * @protected\n */\n onData(data) {\n const packet = (0, engine_io_parser_1.decodePacket)(data, this.socket.binaryType);\n this.onPacket(packet);\n }\n /**\n * Called with a decoded packet.\n *\n * @protected\n */\n onPacket(packet) {\n super.emitReserved(\"packet\", packet);\n }\n /**\n * Called upon close.\n *\n * @protected\n */\n onClose(details) {\n this.readyState = \"closed\";\n super.emitReserved(\"close\", details);\n }\n /**\n * Pauses the transport, in order not to lose packets during an upgrade.\n *\n * @param onPause\n */\n pause(onPause) { }\n createUri(schema, query = {}) {\n return (schema +\n \"://\" +\n this._hostname() +\n this._port() +\n this.opts.path +\n this._query(query));\n }\n _hostname() {\n const hostname = this.opts.hostname;\n return hostname.indexOf(\":\") === -1 ? hostname : \"[\" + hostname + \"]\";\n }\n _port() {\n if (this.opts.port &&\n ((this.opts.secure && Number(this.opts.port !== 443)) ||\n (!this.opts.secure && Number(this.opts.port) !== 80))) {\n return \":\" + this.opts.port;\n }\n else {\n return \"\";\n }\n }\n _query(query) {\n const encodedQuery = (0, parseqs_js_1.encode)(query);\n return encodedQuery.length ? \"?\" + encodedQuery : \"\";\n }\n}\nexports.Transport = Transport;\n\n\n//# sourceURL=webpack://sqlitecloud/./node_modules/engine.io-client/build/cjs/transport.js?"); + +/***/ }), + +/***/ "./node_modules/engine.io-client/build/cjs/transports/index.js": +/*!*********************************************************************!*\ + !*** ./node_modules/engine.io-client/build/cjs/transports/index.js ***! + \*********************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.transports = void 0;\nconst polling_js_1 = __webpack_require__(/*! ./polling.js */ \"./node_modules/engine.io-client/build/cjs/transports/polling.js\");\nconst websocket_js_1 = __webpack_require__(/*! ./websocket.js */ \"./node_modules/engine.io-client/build/cjs/transports/websocket.js\");\nconst webtransport_js_1 = __webpack_require__(/*! ./webtransport.js */ \"./node_modules/engine.io-client/build/cjs/transports/webtransport.js\");\nexports.transports = {\n websocket: websocket_js_1.WS,\n webtransport: webtransport_js_1.WT,\n polling: polling_js_1.Polling,\n};\n\n\n//# sourceURL=webpack://sqlitecloud/./node_modules/engine.io-client/build/cjs/transports/index.js?"); + +/***/ }), + +/***/ "./node_modules/engine.io-client/build/cjs/transports/polling.js": +/*!***********************************************************************!*\ + !*** ./node_modules/engine.io-client/build/cjs/transports/polling.js ***! + \***********************************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; +eval("\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.Request = exports.Polling = void 0;\nconst transport_js_1 = __webpack_require__(/*! ../transport.js */ \"./node_modules/engine.io-client/build/cjs/transport.js\");\nconst debug_1 = __importDefault(__webpack_require__(/*! debug */ \"./node_modules/debug/src/browser.js\")); // debug()\nconst yeast_js_1 = __webpack_require__(/*! ../contrib/yeast.js */ \"./node_modules/engine.io-client/build/cjs/contrib/yeast.js\");\nconst engine_io_parser_1 = __webpack_require__(/*! engine.io-parser */ \"./node_modules/engine.io-parser/build/cjs/index.js\");\nconst xmlhttprequest_js_1 = __webpack_require__(/*! ./xmlhttprequest.js */ \"./node_modules/engine.io-client/build/cjs/transports/xmlhttprequest.browser.js\");\nconst component_emitter_1 = __webpack_require__(/*! @socket.io/component-emitter */ \"./node_modules/@socket.io/component-emitter/index.mjs\");\nconst util_js_1 = __webpack_require__(/*! ../util.js */ \"./node_modules/engine.io-client/build/cjs/util.js\");\nconst globalThis_js_1 = __webpack_require__(/*! ../globalThis.js */ \"./node_modules/engine.io-client/build/cjs/globalThis.browser.js\");\nconst debug = (0, debug_1.default)(\"engine.io-client:polling\"); // debug()\nfunction empty() { }\nconst hasXHR2 = (function () {\n const xhr = new xmlhttprequest_js_1.XHR({\n xdomain: false,\n });\n return null != xhr.responseType;\n})();\nclass Polling extends transport_js_1.Transport {\n /**\n * XHR Polling constructor.\n *\n * @param {Object} opts\n * @package\n */\n constructor(opts) {\n super(opts);\n this.polling = false;\n if (typeof location !== \"undefined\") {\n const isSSL = \"https:\" === location.protocol;\n let port = location.port;\n // some user agents have empty `location.port`\n if (!port) {\n port = isSSL ? \"443\" : \"80\";\n }\n this.xd =\n (typeof location !== \"undefined\" &&\n opts.hostname !== location.hostname) ||\n port !== opts.port;\n }\n /**\n * XHR supports binary\n */\n const forceBase64 = opts && opts.forceBase64;\n this.supportsBinary = hasXHR2 && !forceBase64;\n if (this.opts.withCredentials) {\n this.cookieJar = (0, xmlhttprequest_js_1.createCookieJar)();\n }\n }\n get name() {\n return \"polling\";\n }\n /**\n * Opens the socket (triggers polling). We write a PING message to determine\n * when the transport is open.\n *\n * @protected\n */\n doOpen() {\n this.poll();\n }\n /**\n * Pauses polling.\n *\n * @param {Function} onPause - callback upon buffers are flushed and transport is paused\n * @package\n */\n pause(onPause) {\n this.readyState = \"pausing\";\n const pause = () => {\n debug(\"paused\");\n this.readyState = \"paused\";\n onPause();\n };\n if (this.polling || !this.writable) {\n let total = 0;\n if (this.polling) {\n debug(\"we are currently polling - waiting to pause\");\n total++;\n this.once(\"pollComplete\", function () {\n debug(\"pre-pause polling complete\");\n --total || pause();\n });\n }\n if (!this.writable) {\n debug(\"we are currently writing - waiting to pause\");\n total++;\n this.once(\"drain\", function () {\n debug(\"pre-pause writing complete\");\n --total || pause();\n });\n }\n }\n else {\n pause();\n }\n }\n /**\n * Starts polling cycle.\n *\n * @private\n */\n poll() {\n debug(\"polling\");\n this.polling = true;\n this.doPoll();\n this.emitReserved(\"poll\");\n }\n /**\n * Overloads onData to detect payloads.\n *\n * @protected\n */\n onData(data) {\n debug(\"polling got data %s\", data);\n const callback = (packet) => {\n // if its the first message we consider the transport open\n if (\"opening\" === this.readyState && packet.type === \"open\") {\n this.onOpen();\n }\n // if its a close packet, we close the ongoing requests\n if (\"close\" === packet.type) {\n this.onClose({ description: \"transport closed by the server\" });\n return false;\n }\n // otherwise bypass onData and handle the message\n this.onPacket(packet);\n };\n // decode payload\n (0, engine_io_parser_1.decodePayload)(data, this.socket.binaryType).forEach(callback);\n // if an event did not trigger closing\n if (\"closed\" !== this.readyState) {\n // if we got data we're not polling\n this.polling = false;\n this.emitReserved(\"pollComplete\");\n if (\"open\" === this.readyState) {\n this.poll();\n }\n else {\n debug('ignoring poll - transport state \"%s\"', this.readyState);\n }\n }\n }\n /**\n * For polling, send a close packet.\n *\n * @protected\n */\n doClose() {\n const close = () => {\n debug(\"writing close packet\");\n this.write([{ type: \"close\" }]);\n };\n if (\"open\" === this.readyState) {\n debug(\"transport open - closing\");\n close();\n }\n else {\n // in case we're trying to close while\n // handshaking is in progress (GH-164)\n debug(\"transport not open - deferring close\");\n this.once(\"open\", close);\n }\n }\n /**\n * Writes a packets payload.\n *\n * @param {Array} packets - data packets\n * @protected\n */\n write(packets) {\n this.writable = false;\n (0, engine_io_parser_1.encodePayload)(packets, (data) => {\n this.doWrite(data, () => {\n this.writable = true;\n this.emitReserved(\"drain\");\n });\n });\n }\n /**\n * Generates uri for connection.\n *\n * @private\n */\n uri() {\n const schema = this.opts.secure ? \"https\" : \"http\";\n const query = this.query || {};\n // cache busting is forced\n if (false !== this.opts.timestampRequests) {\n query[this.opts.timestampParam] = (0, yeast_js_1.yeast)();\n }\n if (!this.supportsBinary && !query.sid) {\n query.b64 = 1;\n }\n return this.createUri(schema, query);\n }\n /**\n * Creates a request.\n *\n * @param {String} method\n * @private\n */\n request(opts = {}) {\n Object.assign(opts, { xd: this.xd, cookieJar: this.cookieJar }, this.opts);\n return new Request(this.uri(), opts);\n }\n /**\n * Sends data.\n *\n * @param {String} data to send.\n * @param {Function} called upon flush.\n * @private\n */\n doWrite(data, fn) {\n const req = this.request({\n method: \"POST\",\n data: data,\n });\n req.on(\"success\", fn);\n req.on(\"error\", (xhrStatus, context) => {\n this.onError(\"xhr post error\", xhrStatus, context);\n });\n }\n /**\n * Starts a poll cycle.\n *\n * @private\n */\n doPoll() {\n debug(\"xhr poll\");\n const req = this.request();\n req.on(\"data\", this.onData.bind(this));\n req.on(\"error\", (xhrStatus, context) => {\n this.onError(\"xhr poll error\", xhrStatus, context);\n });\n this.pollXhr = req;\n }\n}\nexports.Polling = Polling;\nclass Request extends component_emitter_1.Emitter {\n /**\n * Request constructor\n *\n * @param {Object} options\n * @package\n */\n constructor(uri, opts) {\n super();\n (0, util_js_1.installTimerFunctions)(this, opts);\n this.opts = opts;\n this.method = opts.method || \"GET\";\n this.uri = uri;\n this.data = undefined !== opts.data ? opts.data : null;\n this.create();\n }\n /**\n * Creates the XHR object and sends the request.\n *\n * @private\n */\n create() {\n var _a;\n const opts = (0, util_js_1.pick)(this.opts, \"agent\", \"pfx\", \"key\", \"passphrase\", \"cert\", \"ca\", \"ciphers\", \"rejectUnauthorized\", \"autoUnref\");\n opts.xdomain = !!this.opts.xd;\n const xhr = (this.xhr = new xmlhttprequest_js_1.XHR(opts));\n try {\n debug(\"xhr open %s: %s\", this.method, this.uri);\n xhr.open(this.method, this.uri, true);\n try {\n if (this.opts.extraHeaders) {\n xhr.setDisableHeaderCheck && xhr.setDisableHeaderCheck(true);\n for (let i in this.opts.extraHeaders) {\n if (this.opts.extraHeaders.hasOwnProperty(i)) {\n xhr.setRequestHeader(i, this.opts.extraHeaders[i]);\n }\n }\n }\n }\n catch (e) { }\n if (\"POST\" === this.method) {\n try {\n xhr.setRequestHeader(\"Content-type\", \"text/plain;charset=UTF-8\");\n }\n catch (e) { }\n }\n try {\n xhr.setRequestHeader(\"Accept\", \"*/*\");\n }\n catch (e) { }\n (_a = this.opts.cookieJar) === null || _a === void 0 ? void 0 : _a.addCookies(xhr);\n // ie6 check\n if (\"withCredentials\" in xhr) {\n xhr.withCredentials = this.opts.withCredentials;\n }\n if (this.opts.requestTimeout) {\n xhr.timeout = this.opts.requestTimeout;\n }\n xhr.onreadystatechange = () => {\n var _a;\n if (xhr.readyState === 3) {\n (_a = this.opts.cookieJar) === null || _a === void 0 ? void 0 : _a.parseCookies(xhr);\n }\n if (4 !== xhr.readyState)\n return;\n if (200 === xhr.status || 1223 === xhr.status) {\n this.onLoad();\n }\n else {\n // make sure the `error` event handler that's user-set\n // does not throw in the same tick and gets caught here\n this.setTimeoutFn(() => {\n this.onError(typeof xhr.status === \"number\" ? xhr.status : 0);\n }, 0);\n }\n };\n debug(\"xhr data %s\", this.data);\n xhr.send(this.data);\n }\n catch (e) {\n // Need to defer since .create() is called directly from the constructor\n // and thus the 'error' event can only be only bound *after* this exception\n // occurs. Therefore, also, we cannot throw here at all.\n this.setTimeoutFn(() => {\n this.onError(e);\n }, 0);\n return;\n }\n if (typeof document !== \"undefined\") {\n this.index = Request.requestsCount++;\n Request.requests[this.index] = this;\n }\n }\n /**\n * Called upon error.\n *\n * @private\n */\n onError(err) {\n this.emitReserved(\"error\", err, this.xhr);\n this.cleanup(true);\n }\n /**\n * Cleans up house.\n *\n * @private\n */\n cleanup(fromError) {\n if (\"undefined\" === typeof this.xhr || null === this.xhr) {\n return;\n }\n this.xhr.onreadystatechange = empty;\n if (fromError) {\n try {\n this.xhr.abort();\n }\n catch (e) { }\n }\n if (typeof document !== \"undefined\") {\n delete Request.requests[this.index];\n }\n this.xhr = null;\n }\n /**\n * Called upon load.\n *\n * @private\n */\n onLoad() {\n const data = this.xhr.responseText;\n if (data !== null) {\n this.emitReserved(\"data\", data);\n this.emitReserved(\"success\");\n this.cleanup();\n }\n }\n /**\n * Aborts the request.\n *\n * @package\n */\n abort() {\n this.cleanup();\n }\n}\nexports.Request = Request;\nRequest.requestsCount = 0;\nRequest.requests = {};\n/**\n * Aborts pending requests when unloading the window. This is needed to prevent\n * memory leaks (e.g. when using IE) and to ensure that no spurious error is\n * emitted.\n */\nif (typeof document !== \"undefined\") {\n // @ts-ignore\n if (typeof attachEvent === \"function\") {\n // @ts-ignore\n attachEvent(\"onunload\", unloadHandler);\n }\n else if (typeof addEventListener === \"function\") {\n const terminationEvent = \"onpagehide\" in globalThis_js_1.globalThisShim ? \"pagehide\" : \"unload\";\n addEventListener(terminationEvent, unloadHandler, false);\n }\n}\nfunction unloadHandler() {\n for (let i in Request.requests) {\n if (Request.requests.hasOwnProperty(i)) {\n Request.requests[i].abort();\n }\n }\n}\n\n\n//# sourceURL=webpack://sqlitecloud/./node_modules/engine.io-client/build/cjs/transports/polling.js?"); + +/***/ }), + +/***/ "./node_modules/engine.io-client/build/cjs/transports/websocket-constructor.browser.js": +/*!*********************************************************************************************!*\ + !*** ./node_modules/engine.io-client/build/cjs/transports/websocket-constructor.browser.js ***! + \*********************************************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.defaultBinaryType = exports.usingBrowserWebSocket = exports.WebSocket = exports.nextTick = void 0;\nconst globalThis_js_1 = __webpack_require__(/*! ../globalThis.js */ \"./node_modules/engine.io-client/build/cjs/globalThis.browser.js\");\nexports.nextTick = (() => {\n const isPromiseAvailable = typeof Promise === \"function\" && typeof Promise.resolve === \"function\";\n if (isPromiseAvailable) {\n return (cb) => Promise.resolve().then(cb);\n }\n else {\n return (cb, setTimeoutFn) => setTimeoutFn(cb, 0);\n }\n})();\nexports.WebSocket = globalThis_js_1.globalThisShim.WebSocket || globalThis_js_1.globalThisShim.MozWebSocket;\nexports.usingBrowserWebSocket = true;\nexports.defaultBinaryType = \"arraybuffer\";\n\n\n//# sourceURL=webpack://sqlitecloud/./node_modules/engine.io-client/build/cjs/transports/websocket-constructor.browser.js?"); + +/***/ }), + +/***/ "./node_modules/engine.io-client/build/cjs/transports/websocket.js": +/*!*************************************************************************!*\ + !*** ./node_modules/engine.io-client/build/cjs/transports/websocket.js ***! + \*************************************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; +eval("\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.WS = void 0;\nconst transport_js_1 = __webpack_require__(/*! ../transport.js */ \"./node_modules/engine.io-client/build/cjs/transport.js\");\nconst yeast_js_1 = __webpack_require__(/*! ../contrib/yeast.js */ \"./node_modules/engine.io-client/build/cjs/contrib/yeast.js\");\nconst util_js_1 = __webpack_require__(/*! ../util.js */ \"./node_modules/engine.io-client/build/cjs/util.js\");\nconst websocket_constructor_js_1 = __webpack_require__(/*! ./websocket-constructor.js */ \"./node_modules/engine.io-client/build/cjs/transports/websocket-constructor.browser.js\");\nconst debug_1 = __importDefault(__webpack_require__(/*! debug */ \"./node_modules/debug/src/browser.js\")); // debug()\nconst engine_io_parser_1 = __webpack_require__(/*! engine.io-parser */ \"./node_modules/engine.io-parser/build/cjs/index.js\");\nconst debug = (0, debug_1.default)(\"engine.io-client:websocket\"); // debug()\n// detect ReactNative environment\nconst isReactNative = typeof navigator !== \"undefined\" &&\n typeof navigator.product === \"string\" &&\n navigator.product.toLowerCase() === \"reactnative\";\nclass WS extends transport_js_1.Transport {\n /**\n * WebSocket transport constructor.\n *\n * @param {Object} opts - connection options\n * @protected\n */\n constructor(opts) {\n super(opts);\n this.supportsBinary = !opts.forceBase64;\n }\n get name() {\n return \"websocket\";\n }\n doOpen() {\n if (!this.check()) {\n // let probe timeout\n return;\n }\n const uri = this.uri();\n const protocols = this.opts.protocols;\n // React Native only supports the 'headers' option, and will print a warning if anything else is passed\n const opts = isReactNative\n ? {}\n : (0, util_js_1.pick)(this.opts, \"agent\", \"perMessageDeflate\", \"pfx\", \"key\", \"passphrase\", \"cert\", \"ca\", \"ciphers\", \"rejectUnauthorized\", \"localAddress\", \"protocolVersion\", \"origin\", \"maxPayload\", \"family\", \"checkServerIdentity\");\n if (this.opts.extraHeaders) {\n opts.headers = this.opts.extraHeaders;\n }\n try {\n this.ws =\n websocket_constructor_js_1.usingBrowserWebSocket && !isReactNative\n ? protocols\n ? new websocket_constructor_js_1.WebSocket(uri, protocols)\n : new websocket_constructor_js_1.WebSocket(uri)\n : new websocket_constructor_js_1.WebSocket(uri, protocols, opts);\n }\n catch (err) {\n return this.emitReserved(\"error\", err);\n }\n this.ws.binaryType = this.socket.binaryType;\n this.addEventListeners();\n }\n /**\n * Adds event listeners to the socket\n *\n * @private\n */\n addEventListeners() {\n this.ws.onopen = () => {\n if (this.opts.autoUnref) {\n this.ws._socket.unref();\n }\n this.onOpen();\n };\n this.ws.onclose = (closeEvent) => this.onClose({\n description: \"websocket connection closed\",\n context: closeEvent,\n });\n this.ws.onmessage = (ev) => this.onData(ev.data);\n this.ws.onerror = (e) => this.onError(\"websocket error\", e);\n }\n write(packets) {\n this.writable = false;\n // encodePacket efficient as it uses WS framing\n // no need for encodePayload\n for (let i = 0; i < packets.length; i++) {\n const packet = packets[i];\n const lastPacket = i === packets.length - 1;\n (0, engine_io_parser_1.encodePacket)(packet, this.supportsBinary, (data) => {\n // always create a new object (GH-437)\n const opts = {};\n if (!websocket_constructor_js_1.usingBrowserWebSocket) {\n if (packet.options) {\n opts.compress = packet.options.compress;\n }\n if (this.opts.perMessageDeflate) {\n const len = \n // @ts-ignore\n \"string\" === typeof data ? Buffer.byteLength(data) : data.length;\n if (len < this.opts.perMessageDeflate.threshold) {\n opts.compress = false;\n }\n }\n }\n // Sometimes the websocket has already been closed but the browser didn't\n // have a chance of informing us about it yet, in that case send will\n // throw an error\n try {\n if (websocket_constructor_js_1.usingBrowserWebSocket) {\n // TypeError is thrown when passing the second argument on Safari\n this.ws.send(data);\n }\n else {\n this.ws.send(data, opts);\n }\n }\n catch (e) {\n debug(\"websocket closed before onclose event\");\n }\n if (lastPacket) {\n // fake drain\n // defer to next tick to allow Socket to clear writeBuffer\n (0, websocket_constructor_js_1.nextTick)(() => {\n this.writable = true;\n this.emitReserved(\"drain\");\n }, this.setTimeoutFn);\n }\n });\n }\n }\n doClose() {\n if (typeof this.ws !== \"undefined\") {\n this.ws.close();\n this.ws = null;\n }\n }\n /**\n * Generates uri for connection.\n *\n * @private\n */\n uri() {\n const schema = this.opts.secure ? \"wss\" : \"ws\";\n const query = this.query || {};\n // append timestamp to URI\n if (this.opts.timestampRequests) {\n query[this.opts.timestampParam] = (0, yeast_js_1.yeast)();\n }\n // communicate binary support capabilities\n if (!this.supportsBinary) {\n query.b64 = 1;\n }\n return this.createUri(schema, query);\n }\n /**\n * Feature detection for WebSocket.\n *\n * @return {Boolean} whether this transport is available.\n * @private\n */\n check() {\n return !!websocket_constructor_js_1.WebSocket;\n }\n}\nexports.WS = WS;\n\n\n//# sourceURL=webpack://sqlitecloud/./node_modules/engine.io-client/build/cjs/transports/websocket.js?"); + +/***/ }), + +/***/ "./node_modules/engine.io-client/build/cjs/transports/webtransport.js": +/*!****************************************************************************!*\ + !*** ./node_modules/engine.io-client/build/cjs/transports/webtransport.js ***! + \****************************************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; +eval("\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.WT = void 0;\nconst transport_js_1 = __webpack_require__(/*! ../transport.js */ \"./node_modules/engine.io-client/build/cjs/transport.js\");\nconst websocket_constructor_js_1 = __webpack_require__(/*! ./websocket-constructor.js */ \"./node_modules/engine.io-client/build/cjs/transports/websocket-constructor.browser.js\");\nconst engine_io_parser_1 = __webpack_require__(/*! engine.io-parser */ \"./node_modules/engine.io-parser/build/cjs/index.js\");\nconst debug_1 = __importDefault(__webpack_require__(/*! debug */ \"./node_modules/debug/src/browser.js\")); // debug()\nconst debug = (0, debug_1.default)(\"engine.io-client:webtransport\"); // debug()\nclass WT extends transport_js_1.Transport {\n get name() {\n return \"webtransport\";\n }\n doOpen() {\n // @ts-ignore\n if (typeof WebTransport !== \"function\") {\n return;\n }\n // @ts-ignore\n this.transport = new WebTransport(this.createUri(\"https\"), this.opts.transportOptions[this.name]);\n this.transport.closed\n .then(() => {\n debug(\"transport closed gracefully\");\n this.onClose();\n })\n .catch((err) => {\n debug(\"transport closed due to %s\", err);\n this.onError(\"webtransport error\", err);\n });\n // note: we could have used async/await, but that would require some additional polyfills\n this.transport.ready.then(() => {\n this.transport.createBidirectionalStream().then((stream) => {\n const decoderStream = (0, engine_io_parser_1.createPacketDecoderStream)(Number.MAX_SAFE_INTEGER, this.socket.binaryType);\n const reader = stream.readable.pipeThrough(decoderStream).getReader();\n const encoderStream = (0, engine_io_parser_1.createPacketEncoderStream)();\n encoderStream.readable.pipeTo(stream.writable);\n this.writer = encoderStream.writable.getWriter();\n const read = () => {\n reader\n .read()\n .then(({ done, value }) => {\n if (done) {\n debug(\"session is closed\");\n return;\n }\n debug(\"received chunk: %o\", value);\n this.onPacket(value);\n read();\n })\n .catch((err) => {\n debug(\"an error occurred while reading: %s\", err);\n });\n };\n read();\n const packet = { type: \"open\" };\n if (this.query.sid) {\n packet.data = `{\"sid\":\"${this.query.sid}\"}`;\n }\n this.writer.write(packet).then(() => this.onOpen());\n });\n });\n }\n write(packets) {\n this.writable = false;\n for (let i = 0; i < packets.length; i++) {\n const packet = packets[i];\n const lastPacket = i === packets.length - 1;\n this.writer.write(packet).then(() => {\n if (lastPacket) {\n (0, websocket_constructor_js_1.nextTick)(() => {\n this.writable = true;\n this.emitReserved(\"drain\");\n }, this.setTimeoutFn);\n }\n });\n }\n }\n doClose() {\n var _a;\n (_a = this.transport) === null || _a === void 0 ? void 0 : _a.close();\n }\n}\nexports.WT = WT;\n\n\n//# sourceURL=webpack://sqlitecloud/./node_modules/engine.io-client/build/cjs/transports/webtransport.js?"); + +/***/ }), + +/***/ "./node_modules/engine.io-client/build/cjs/transports/xmlhttprequest.browser.js": +/*!**************************************************************************************!*\ + !*** ./node_modules/engine.io-client/build/cjs/transports/xmlhttprequest.browser.js ***! + \**************************************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; +eval("\n// browser shim for xmlhttprequest module\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.createCookieJar = exports.XHR = void 0;\nconst has_cors_js_1 = __webpack_require__(/*! ../contrib/has-cors.js */ \"./node_modules/engine.io-client/build/cjs/contrib/has-cors.js\");\nconst globalThis_js_1 = __webpack_require__(/*! ../globalThis.js */ \"./node_modules/engine.io-client/build/cjs/globalThis.browser.js\");\nfunction XHR(opts) {\n const xdomain = opts.xdomain;\n // XMLHttpRequest can be disabled on IE\n try {\n if (\"undefined\" !== typeof XMLHttpRequest && (!xdomain || has_cors_js_1.hasCORS)) {\n return new XMLHttpRequest();\n }\n }\n catch (e) { }\n if (!xdomain) {\n try {\n return new globalThis_js_1.globalThisShim[[\"Active\"].concat(\"Object\").join(\"X\")](\"Microsoft.XMLHTTP\");\n }\n catch (e) { }\n }\n}\nexports.XHR = XHR;\nfunction createCookieJar() { }\nexports.createCookieJar = createCookieJar;\n\n\n//# sourceURL=webpack://sqlitecloud/./node_modules/engine.io-client/build/cjs/transports/xmlhttprequest.browser.js?"); + +/***/ }), + +/***/ "./node_modules/engine.io-client/build/cjs/util.js": +/*!*********************************************************!*\ + !*** ./node_modules/engine.io-client/build/cjs/util.js ***! + \*********************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.byteLength = exports.installTimerFunctions = exports.pick = void 0;\nconst globalThis_js_1 = __webpack_require__(/*! ./globalThis.js */ \"./node_modules/engine.io-client/build/cjs/globalThis.browser.js\");\nfunction pick(obj, ...attr) {\n return attr.reduce((acc, k) => {\n if (obj.hasOwnProperty(k)) {\n acc[k] = obj[k];\n }\n return acc;\n }, {});\n}\nexports.pick = pick;\n// Keep a reference to the real timeout functions so they can be used when overridden\nconst NATIVE_SET_TIMEOUT = globalThis_js_1.globalThisShim.setTimeout;\nconst NATIVE_CLEAR_TIMEOUT = globalThis_js_1.globalThisShim.clearTimeout;\nfunction installTimerFunctions(obj, opts) {\n if (opts.useNativeTimers) {\n obj.setTimeoutFn = NATIVE_SET_TIMEOUT.bind(globalThis_js_1.globalThisShim);\n obj.clearTimeoutFn = NATIVE_CLEAR_TIMEOUT.bind(globalThis_js_1.globalThisShim);\n }\n else {\n obj.setTimeoutFn = globalThis_js_1.globalThisShim.setTimeout.bind(globalThis_js_1.globalThisShim);\n obj.clearTimeoutFn = globalThis_js_1.globalThisShim.clearTimeout.bind(globalThis_js_1.globalThisShim);\n }\n}\nexports.installTimerFunctions = installTimerFunctions;\n// base64 encoded buffers are about 33% bigger (https://en.wikipedia.org/wiki/Base64)\nconst BASE64_OVERHEAD = 1.33;\n// we could also have used `new Blob([obj]).size`, but it isn't supported in IE9\nfunction byteLength(obj) {\n if (typeof obj === \"string\") {\n return utf8Length(obj);\n }\n // arraybuffer or blob\n return Math.ceil((obj.byteLength || obj.size) * BASE64_OVERHEAD);\n}\nexports.byteLength = byteLength;\nfunction utf8Length(str) {\n let c = 0, length = 0;\n for (let i = 0, l = str.length; i < l; i++) {\n c = str.charCodeAt(i);\n if (c < 0x80) {\n length += 1;\n }\n else if (c < 0x800) {\n length += 2;\n }\n else if (c < 0xd800 || c >= 0xe000) {\n length += 3;\n }\n else {\n i++;\n length += 4;\n }\n }\n return length;\n}\n\n\n//# sourceURL=webpack://sqlitecloud/./node_modules/engine.io-client/build/cjs/util.js?"); + +/***/ }), + +/***/ "./node_modules/engine.io-parser/build/cjs/commons.js": +/*!************************************************************!*\ + !*** ./node_modules/engine.io-parser/build/cjs/commons.js ***! + \************************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.ERROR_PACKET = exports.PACKET_TYPES_REVERSE = exports.PACKET_TYPES = void 0;\nconst PACKET_TYPES = Object.create(null); // no Map = no polyfill\nexports.PACKET_TYPES = PACKET_TYPES;\nPACKET_TYPES[\"open\"] = \"0\";\nPACKET_TYPES[\"close\"] = \"1\";\nPACKET_TYPES[\"ping\"] = \"2\";\nPACKET_TYPES[\"pong\"] = \"3\";\nPACKET_TYPES[\"message\"] = \"4\";\nPACKET_TYPES[\"upgrade\"] = \"5\";\nPACKET_TYPES[\"noop\"] = \"6\";\nconst PACKET_TYPES_REVERSE = Object.create(null);\nexports.PACKET_TYPES_REVERSE = PACKET_TYPES_REVERSE;\nObject.keys(PACKET_TYPES).forEach(key => {\n PACKET_TYPES_REVERSE[PACKET_TYPES[key]] = key;\n});\nconst ERROR_PACKET = { type: \"error\", data: \"parser error\" };\nexports.ERROR_PACKET = ERROR_PACKET;\n\n\n//# sourceURL=webpack://sqlitecloud/./node_modules/engine.io-parser/build/cjs/commons.js?"); + +/***/ }), + +/***/ "./node_modules/engine.io-parser/build/cjs/contrib/base64-arraybuffer.js": +/*!*******************************************************************************!*\ + !*** ./node_modules/engine.io-parser/build/cjs/contrib/base64-arraybuffer.js ***! + \*******************************************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.decode = exports.encode = void 0;\n// imported from https://github.com/socketio/base64-arraybuffer\nconst chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n// Use a lookup table to find the index.\nconst lookup = typeof Uint8Array === 'undefined' ? [] : new Uint8Array(256);\nfor (let i = 0; i < chars.length; i++) {\n lookup[chars.charCodeAt(i)] = i;\n}\nconst encode = (arraybuffer) => {\n let bytes = new Uint8Array(arraybuffer), i, len = bytes.length, base64 = '';\n for (i = 0; i < len; i += 3) {\n base64 += chars[bytes[i] >> 2];\n base64 += chars[((bytes[i] & 3) << 4) | (bytes[i + 1] >> 4)];\n base64 += chars[((bytes[i + 1] & 15) << 2) | (bytes[i + 2] >> 6)];\n base64 += chars[bytes[i + 2] & 63];\n }\n if (len % 3 === 2) {\n base64 = base64.substring(0, base64.length - 1) + '=';\n }\n else if (len % 3 === 1) {\n base64 = base64.substring(0, base64.length - 2) + '==';\n }\n return base64;\n};\nexports.encode = encode;\nconst decode = (base64) => {\n let bufferLength = base64.length * 0.75, len = base64.length, i, p = 0, encoded1, encoded2, encoded3, encoded4;\n if (base64[base64.length - 1] === '=') {\n bufferLength--;\n if (base64[base64.length - 2] === '=') {\n bufferLength--;\n }\n }\n const arraybuffer = new ArrayBuffer(bufferLength), bytes = new Uint8Array(arraybuffer);\n for (i = 0; i < len; i += 4) {\n encoded1 = lookup[base64.charCodeAt(i)];\n encoded2 = lookup[base64.charCodeAt(i + 1)];\n encoded3 = lookup[base64.charCodeAt(i + 2)];\n encoded4 = lookup[base64.charCodeAt(i + 3)];\n bytes[p++] = (encoded1 << 2) | (encoded2 >> 4);\n bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2);\n bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63);\n }\n return arraybuffer;\n};\nexports.decode = decode;\n\n\n//# sourceURL=webpack://sqlitecloud/./node_modules/engine.io-parser/build/cjs/contrib/base64-arraybuffer.js?"); + +/***/ }), + +/***/ "./node_modules/engine.io-parser/build/cjs/decodePacket.browser.js": +/*!*************************************************************************!*\ + !*** ./node_modules/engine.io-parser/build/cjs/decodePacket.browser.js ***! + \*************************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.decodePacket = void 0;\nconst commons_js_1 = __webpack_require__(/*! ./commons.js */ \"./node_modules/engine.io-parser/build/cjs/commons.js\");\nconst base64_arraybuffer_js_1 = __webpack_require__(/*! ./contrib/base64-arraybuffer.js */ \"./node_modules/engine.io-parser/build/cjs/contrib/base64-arraybuffer.js\");\nconst withNativeArrayBuffer = typeof ArrayBuffer === \"function\";\nconst decodePacket = (encodedPacket, binaryType) => {\n if (typeof encodedPacket !== \"string\") {\n return {\n type: \"message\",\n data: mapBinary(encodedPacket, binaryType)\n };\n }\n const type = encodedPacket.charAt(0);\n if (type === \"b\") {\n return {\n type: \"message\",\n data: decodeBase64Packet(encodedPacket.substring(1), binaryType)\n };\n }\n const packetType = commons_js_1.PACKET_TYPES_REVERSE[type];\n if (!packetType) {\n return commons_js_1.ERROR_PACKET;\n }\n return encodedPacket.length > 1\n ? {\n type: commons_js_1.PACKET_TYPES_REVERSE[type],\n data: encodedPacket.substring(1)\n }\n : {\n type: commons_js_1.PACKET_TYPES_REVERSE[type]\n };\n};\nexports.decodePacket = decodePacket;\nconst decodeBase64Packet = (data, binaryType) => {\n if (withNativeArrayBuffer) {\n const decoded = (0, base64_arraybuffer_js_1.decode)(data);\n return mapBinary(decoded, binaryType);\n }\n else {\n return { base64: true, data }; // fallback for old browsers\n }\n};\nconst mapBinary = (data, binaryType) => {\n switch (binaryType) {\n case \"blob\":\n if (data instanceof Blob) {\n // from WebSocket + binaryType \"blob\"\n return data;\n }\n else {\n // from HTTP long-polling or WebTransport\n return new Blob([data]);\n }\n case \"arraybuffer\":\n default:\n if (data instanceof ArrayBuffer) {\n // from HTTP long-polling (base64) or WebSocket + binaryType \"arraybuffer\"\n return data;\n }\n else {\n // from WebTransport (Uint8Array)\n return data.buffer;\n }\n }\n};\n\n\n//# sourceURL=webpack://sqlitecloud/./node_modules/engine.io-parser/build/cjs/decodePacket.browser.js?"); + +/***/ }), + +/***/ "./node_modules/engine.io-parser/build/cjs/encodePacket.browser.js": +/*!*************************************************************************!*\ + !*** ./node_modules/engine.io-parser/build/cjs/encodePacket.browser.js ***! + \*************************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.encodePacket = exports.encodePacketToBinary = void 0;\nconst commons_js_1 = __webpack_require__(/*! ./commons.js */ \"./node_modules/engine.io-parser/build/cjs/commons.js\");\nconst withNativeBlob = typeof Blob === \"function\" ||\n (typeof Blob !== \"undefined\" &&\n Object.prototype.toString.call(Blob) === \"[object BlobConstructor]\");\nconst withNativeArrayBuffer = typeof ArrayBuffer === \"function\";\n// ArrayBuffer.isView method is not defined in IE10\nconst isView = obj => {\n return typeof ArrayBuffer.isView === \"function\"\n ? ArrayBuffer.isView(obj)\n : obj && obj.buffer instanceof ArrayBuffer;\n};\nconst encodePacket = ({ type, data }, supportsBinary, callback) => {\n if (withNativeBlob && data instanceof Blob) {\n if (supportsBinary) {\n return callback(data);\n }\n else {\n return encodeBlobAsBase64(data, callback);\n }\n }\n else if (withNativeArrayBuffer &&\n (data instanceof ArrayBuffer || isView(data))) {\n if (supportsBinary) {\n return callback(data);\n }\n else {\n return encodeBlobAsBase64(new Blob([data]), callback);\n }\n }\n // plain string\n return callback(commons_js_1.PACKET_TYPES[type] + (data || \"\"));\n};\nexports.encodePacket = encodePacket;\nconst encodeBlobAsBase64 = (data, callback) => {\n const fileReader = new FileReader();\n fileReader.onload = function () {\n const content = fileReader.result.split(\",\")[1];\n callback(\"b\" + (content || \"\"));\n };\n return fileReader.readAsDataURL(data);\n};\nfunction toArray(data) {\n if (data instanceof Uint8Array) {\n return data;\n }\n else if (data instanceof ArrayBuffer) {\n return new Uint8Array(data);\n }\n else {\n return new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n }\n}\nlet TEXT_ENCODER;\nfunction encodePacketToBinary(packet, callback) {\n if (withNativeBlob && packet.data instanceof Blob) {\n return packet.data\n .arrayBuffer()\n .then(toArray)\n .then(callback);\n }\n else if (withNativeArrayBuffer &&\n (packet.data instanceof ArrayBuffer || isView(packet.data))) {\n return callback(toArray(packet.data));\n }\n encodePacket(packet, false, encoded => {\n if (!TEXT_ENCODER) {\n TEXT_ENCODER = new TextEncoder();\n }\n callback(TEXT_ENCODER.encode(encoded));\n });\n}\nexports.encodePacketToBinary = encodePacketToBinary;\n\n\n//# sourceURL=webpack://sqlitecloud/./node_modules/engine.io-parser/build/cjs/encodePacket.browser.js?"); + +/***/ }), + +/***/ "./node_modules/engine.io-parser/build/cjs/index.js": +/*!**********************************************************!*\ + !*** ./node_modules/engine.io-parser/build/cjs/index.js ***! + \**********************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.decodePayload = exports.decodePacket = exports.encodePayload = exports.encodePacket = exports.protocol = exports.createPacketDecoderStream = exports.createPacketEncoderStream = void 0;\nconst encodePacket_js_1 = __webpack_require__(/*! ./encodePacket.js */ \"./node_modules/engine.io-parser/build/cjs/encodePacket.browser.js\");\nObject.defineProperty(exports, \"encodePacket\", ({ enumerable: true, get: function () { return encodePacket_js_1.encodePacket; } }));\nconst decodePacket_js_1 = __webpack_require__(/*! ./decodePacket.js */ \"./node_modules/engine.io-parser/build/cjs/decodePacket.browser.js\");\nObject.defineProperty(exports, \"decodePacket\", ({ enumerable: true, get: function () { return decodePacket_js_1.decodePacket; } }));\nconst commons_js_1 = __webpack_require__(/*! ./commons.js */ \"./node_modules/engine.io-parser/build/cjs/commons.js\");\nconst SEPARATOR = String.fromCharCode(30); // see https://en.wikipedia.org/wiki/Delimiter#ASCII_delimited_text\nconst encodePayload = (packets, callback) => {\n // some packets may be added to the array while encoding, so the initial length must be saved\n const length = packets.length;\n const encodedPackets = new Array(length);\n let count = 0;\n packets.forEach((packet, i) => {\n // force base64 encoding for binary packets\n (0, encodePacket_js_1.encodePacket)(packet, false, encodedPacket => {\n encodedPackets[i] = encodedPacket;\n if (++count === length) {\n callback(encodedPackets.join(SEPARATOR));\n }\n });\n });\n};\nexports.encodePayload = encodePayload;\nconst decodePayload = (encodedPayload, binaryType) => {\n const encodedPackets = encodedPayload.split(SEPARATOR);\n const packets = [];\n for (let i = 0; i < encodedPackets.length; i++) {\n const decodedPacket = (0, decodePacket_js_1.decodePacket)(encodedPackets[i], binaryType);\n packets.push(decodedPacket);\n if (decodedPacket.type === \"error\") {\n break;\n }\n }\n return packets;\n};\nexports.decodePayload = decodePayload;\nfunction createPacketEncoderStream() {\n return new TransformStream({\n transform(packet, controller) {\n (0, encodePacket_js_1.encodePacketToBinary)(packet, encodedPacket => {\n const payloadLength = encodedPacket.length;\n let header;\n // inspired by the WebSocket format: https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API/Writing_WebSocket_servers#decoding_payload_length\n if (payloadLength < 126) {\n header = new Uint8Array(1);\n new DataView(header.buffer).setUint8(0, payloadLength);\n }\n else if (payloadLength < 65536) {\n header = new Uint8Array(3);\n const view = new DataView(header.buffer);\n view.setUint8(0, 126);\n view.setUint16(1, payloadLength);\n }\n else {\n header = new Uint8Array(9);\n const view = new DataView(header.buffer);\n view.setUint8(0, 127);\n view.setBigUint64(1, BigInt(payloadLength));\n }\n // first bit indicates whether the payload is plain text (0) or binary (1)\n if (packet.data && typeof packet.data !== \"string\") {\n header[0] |= 0x80;\n }\n controller.enqueue(header);\n controller.enqueue(encodedPacket);\n });\n }\n });\n}\nexports.createPacketEncoderStream = createPacketEncoderStream;\nlet TEXT_DECODER;\nfunction totalLength(chunks) {\n return chunks.reduce((acc, chunk) => acc + chunk.length, 0);\n}\nfunction concatChunks(chunks, size) {\n if (chunks[0].length === size) {\n return chunks.shift();\n }\n const buffer = new Uint8Array(size);\n let j = 0;\n for (let i = 0; i < size; i++) {\n buffer[i] = chunks[0][j++];\n if (j === chunks[0].length) {\n chunks.shift();\n j = 0;\n }\n }\n if (chunks.length && j < chunks[0].length) {\n chunks[0] = chunks[0].slice(j);\n }\n return buffer;\n}\nfunction createPacketDecoderStream(maxPayload, binaryType) {\n if (!TEXT_DECODER) {\n TEXT_DECODER = new TextDecoder();\n }\n const chunks = [];\n let state = 0 /* READ_HEADER */;\n let expectedLength = -1;\n let isBinary = false;\n return new TransformStream({\n transform(chunk, controller) {\n chunks.push(chunk);\n while (true) {\n if (state === 0 /* READ_HEADER */) {\n if (totalLength(chunks) < 1) {\n break;\n }\n const header = concatChunks(chunks, 1);\n isBinary = (header[0] & 0x80) === 0x80;\n expectedLength = header[0] & 0x7f;\n if (expectedLength < 126) {\n state = 3 /* READ_PAYLOAD */;\n }\n else if (expectedLength === 126) {\n state = 1 /* READ_EXTENDED_LENGTH_16 */;\n }\n else {\n state = 2 /* READ_EXTENDED_LENGTH_64 */;\n }\n }\n else if (state === 1 /* READ_EXTENDED_LENGTH_16 */) {\n if (totalLength(chunks) < 2) {\n break;\n }\n const headerArray = concatChunks(chunks, 2);\n expectedLength = new DataView(headerArray.buffer, headerArray.byteOffset, headerArray.length).getUint16(0);\n state = 3 /* READ_PAYLOAD */;\n }\n else if (state === 2 /* READ_EXTENDED_LENGTH_64 */) {\n if (totalLength(chunks) < 8) {\n break;\n }\n const headerArray = concatChunks(chunks, 8);\n const view = new DataView(headerArray.buffer, headerArray.byteOffset, headerArray.length);\n const n = view.getUint32(0);\n if (n > Math.pow(2, 53 - 32) - 1) {\n // the maximum safe integer in JavaScript is 2^53 - 1\n controller.enqueue(commons_js_1.ERROR_PACKET);\n break;\n }\n expectedLength = n * Math.pow(2, 32) + view.getUint32(4);\n state = 3 /* READ_PAYLOAD */;\n }\n else {\n if (totalLength(chunks) < expectedLength) {\n break;\n }\n const data = concatChunks(chunks, expectedLength);\n controller.enqueue((0, decodePacket_js_1.decodePacket)(isBinary ? data : TEXT_DECODER.decode(data), binaryType));\n state = 0 /* READ_HEADER */;\n }\n if (expectedLength === 0 || expectedLength > maxPayload) {\n controller.enqueue(commons_js_1.ERROR_PACKET);\n break;\n }\n }\n }\n });\n}\nexports.createPacketDecoderStream = createPacketDecoderStream;\nexports.protocol = 4;\n\n\n//# sourceURL=webpack://sqlitecloud/./node_modules/engine.io-parser/build/cjs/index.js?"); + +/***/ }), + +/***/ "./node_modules/socket.io-client/build/cjs/contrib/backo2.js": +/*!*******************************************************************!*\ + !*** ./node_modules/socket.io-client/build/cjs/contrib/backo2.js ***! + \*******************************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; +eval("\n/**\n * Initialize backoff timer with `opts`.\n *\n * - `min` initial timeout in milliseconds [100]\n * - `max` max timeout [10000]\n * - `jitter` [0]\n * - `factor` [2]\n *\n * @param {Object} opts\n * @api public\n */\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.Backoff = void 0;\nfunction Backoff(opts) {\n opts = opts || {};\n this.ms = opts.min || 100;\n this.max = opts.max || 10000;\n this.factor = opts.factor || 2;\n this.jitter = opts.jitter > 0 && opts.jitter <= 1 ? opts.jitter : 0;\n this.attempts = 0;\n}\nexports.Backoff = Backoff;\n/**\n * Return the backoff duration.\n *\n * @return {Number}\n * @api public\n */\nBackoff.prototype.duration = function () {\n var ms = this.ms * Math.pow(this.factor, this.attempts++);\n if (this.jitter) {\n var rand = Math.random();\n var deviation = Math.floor(rand * this.jitter * ms);\n ms = (Math.floor(rand * 10) & 1) == 0 ? ms - deviation : ms + deviation;\n }\n return Math.min(ms, this.max) | 0;\n};\n/**\n * Reset the number of attempts.\n *\n * @api public\n */\nBackoff.prototype.reset = function () {\n this.attempts = 0;\n};\n/**\n * Set the minimum duration\n *\n * @api public\n */\nBackoff.prototype.setMin = function (min) {\n this.ms = min;\n};\n/**\n * Set the maximum duration\n *\n * @api public\n */\nBackoff.prototype.setMax = function (max) {\n this.max = max;\n};\n/**\n * Set the jitter\n *\n * @api public\n */\nBackoff.prototype.setJitter = function (jitter) {\n this.jitter = jitter;\n};\n\n\n//# sourceURL=webpack://sqlitecloud/./node_modules/socket.io-client/build/cjs/contrib/backo2.js?"); + +/***/ }), + +/***/ "./node_modules/socket.io-client/build/cjs/index.js": +/*!**********************************************************!*\ + !*** ./node_modules/socket.io-client/build/cjs/index.js ***! + \**********************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval("\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports[\"default\"] = exports.connect = exports.io = exports.Socket = exports.Manager = exports.protocol = void 0;\nconst url_js_1 = __webpack_require__(/*! ./url.js */ \"./node_modules/socket.io-client/build/cjs/url.js\");\nconst manager_js_1 = __webpack_require__(/*! ./manager.js */ \"./node_modules/socket.io-client/build/cjs/manager.js\");\nObject.defineProperty(exports, \"Manager\", ({ enumerable: true, get: function () { return manager_js_1.Manager; } }));\nconst socket_js_1 = __webpack_require__(/*! ./socket.js */ \"./node_modules/socket.io-client/build/cjs/socket.js\");\nObject.defineProperty(exports, \"Socket\", ({ enumerable: true, get: function () { return socket_js_1.Socket; } }));\nconst debug_1 = __importDefault(__webpack_require__(/*! debug */ \"./node_modules/debug/src/browser.js\")); // debug()\nconst debug = debug_1.default(\"socket.io-client\"); // debug()\n/**\n * Managers cache.\n */\nconst cache = {};\nfunction lookup(uri, opts) {\n if (typeof uri === \"object\") {\n opts = uri;\n uri = undefined;\n }\n opts = opts || {};\n const parsed = url_js_1.url(uri, opts.path || \"/socket.io\");\n const source = parsed.source;\n const id = parsed.id;\n const path = parsed.path;\n const sameNamespace = cache[id] && path in cache[id][\"nsps\"];\n const newConnection = opts.forceNew ||\n opts[\"force new connection\"] ||\n false === opts.multiplex ||\n sameNamespace;\n let io;\n if (newConnection) {\n debug(\"ignoring socket cache for %s\", source);\n io = new manager_js_1.Manager(source, opts);\n }\n else {\n if (!cache[id]) {\n debug(\"new io instance for %s\", source);\n cache[id] = new manager_js_1.Manager(source, opts);\n }\n io = cache[id];\n }\n if (parsed.query && !opts.query) {\n opts.query = parsed.queryKey;\n }\n return io.socket(parsed.path, opts);\n}\nexports.io = lookup;\nexports.connect = lookup;\nexports[\"default\"] = lookup;\n// so that \"lookup\" can be used both as a function (e.g. `io(...)`) and as a\n// namespace (e.g. `io.connect(...)`), for backward compatibility\nObject.assign(lookup, {\n Manager: manager_js_1.Manager,\n Socket: socket_js_1.Socket,\n io: lookup,\n connect: lookup,\n});\n/**\n * Protocol version.\n *\n * @public\n */\nvar socket_io_parser_1 = __webpack_require__(/*! socket.io-parser */ \"./node_modules/socket.io-parser/build/cjs/index.js\");\nObject.defineProperty(exports, \"protocol\", ({ enumerable: true, get: function () { return socket_io_parser_1.protocol; } }));\n\nmodule.exports = lookup;\n\n\n//# sourceURL=webpack://sqlitecloud/./node_modules/socket.io-client/build/cjs/index.js?"); + +/***/ }), + +/***/ "./node_modules/socket.io-client/build/cjs/manager.js": +/*!************************************************************!*\ + !*** ./node_modules/socket.io-client/build/cjs/manager.js ***! + \************************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; +eval("\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.Manager = void 0;\nconst engine_io_client_1 = __webpack_require__(/*! engine.io-client */ \"./node_modules/engine.io-client/build/cjs/index.js\");\nconst socket_js_1 = __webpack_require__(/*! ./socket.js */ \"./node_modules/socket.io-client/build/cjs/socket.js\");\nconst parser = __importStar(__webpack_require__(/*! socket.io-parser */ \"./node_modules/socket.io-parser/build/cjs/index.js\"));\nconst on_js_1 = __webpack_require__(/*! ./on.js */ \"./node_modules/socket.io-client/build/cjs/on.js\");\nconst backo2_js_1 = __webpack_require__(/*! ./contrib/backo2.js */ \"./node_modules/socket.io-client/build/cjs/contrib/backo2.js\");\nconst component_emitter_1 = __webpack_require__(/*! @socket.io/component-emitter */ \"./node_modules/@socket.io/component-emitter/index.mjs\");\nconst debug_1 = __importDefault(__webpack_require__(/*! debug */ \"./node_modules/debug/src/browser.js\")); // debug()\nconst debug = debug_1.default(\"socket.io-client:manager\"); // debug()\nclass Manager extends component_emitter_1.Emitter {\n constructor(uri, opts) {\n var _a;\n super();\n this.nsps = {};\n this.subs = [];\n if (uri && \"object\" === typeof uri) {\n opts = uri;\n uri = undefined;\n }\n opts = opts || {};\n opts.path = opts.path || \"/socket.io\";\n this.opts = opts;\n engine_io_client_1.installTimerFunctions(this, opts);\n this.reconnection(opts.reconnection !== false);\n this.reconnectionAttempts(opts.reconnectionAttempts || Infinity);\n this.reconnectionDelay(opts.reconnectionDelay || 1000);\n this.reconnectionDelayMax(opts.reconnectionDelayMax || 5000);\n this.randomizationFactor((_a = opts.randomizationFactor) !== null && _a !== void 0 ? _a : 0.5);\n this.backoff = new backo2_js_1.Backoff({\n min: this.reconnectionDelay(),\n max: this.reconnectionDelayMax(),\n jitter: this.randomizationFactor(),\n });\n this.timeout(null == opts.timeout ? 20000 : opts.timeout);\n this._readyState = \"closed\";\n this.uri = uri;\n const _parser = opts.parser || parser;\n this.encoder = new _parser.Encoder();\n this.decoder = new _parser.Decoder();\n this._autoConnect = opts.autoConnect !== false;\n if (this._autoConnect)\n this.open();\n }\n reconnection(v) {\n if (!arguments.length)\n return this._reconnection;\n this._reconnection = !!v;\n return this;\n }\n reconnectionAttempts(v) {\n if (v === undefined)\n return this._reconnectionAttempts;\n this._reconnectionAttempts = v;\n return this;\n }\n reconnectionDelay(v) {\n var _a;\n if (v === undefined)\n return this._reconnectionDelay;\n this._reconnectionDelay = v;\n (_a = this.backoff) === null || _a === void 0 ? void 0 : _a.setMin(v);\n return this;\n }\n randomizationFactor(v) {\n var _a;\n if (v === undefined)\n return this._randomizationFactor;\n this._randomizationFactor = v;\n (_a = this.backoff) === null || _a === void 0 ? void 0 : _a.setJitter(v);\n return this;\n }\n reconnectionDelayMax(v) {\n var _a;\n if (v === undefined)\n return this._reconnectionDelayMax;\n this._reconnectionDelayMax = v;\n (_a = this.backoff) === null || _a === void 0 ? void 0 : _a.setMax(v);\n return this;\n }\n timeout(v) {\n if (!arguments.length)\n return this._timeout;\n this._timeout = v;\n return this;\n }\n /**\n * Starts trying to reconnect if reconnection is enabled and we have not\n * started reconnecting yet\n *\n * @private\n */\n maybeReconnectOnOpen() {\n // Only try to reconnect if it's the first time we're connecting\n if (!this._reconnecting &&\n this._reconnection &&\n this.backoff.attempts === 0) {\n // keeps reconnection from firing twice for the same reconnection loop\n this.reconnect();\n }\n }\n /**\n * Sets the current transport `socket`.\n *\n * @param {Function} fn - optional, callback\n * @return self\n * @public\n */\n open(fn) {\n debug(\"readyState %s\", this._readyState);\n if (~this._readyState.indexOf(\"open\"))\n return this;\n debug(\"opening %s\", this.uri);\n this.engine = new engine_io_client_1.Socket(this.uri, this.opts);\n const socket = this.engine;\n const self = this;\n this._readyState = \"opening\";\n this.skipReconnect = false;\n // emit `open`\n const openSubDestroy = on_js_1.on(socket, \"open\", function () {\n self.onopen();\n fn && fn();\n });\n const onError = (err) => {\n debug(\"error\");\n this.cleanup();\n this._readyState = \"closed\";\n this.emitReserved(\"error\", err);\n if (fn) {\n fn(err);\n }\n else {\n // Only do this if there is no fn to handle the error\n this.maybeReconnectOnOpen();\n }\n };\n // emit `error`\n const errorSub = on_js_1.on(socket, \"error\", onError);\n if (false !== this._timeout) {\n const timeout = this._timeout;\n debug(\"connect attempt will timeout after %d\", timeout);\n // set timer\n const timer = this.setTimeoutFn(() => {\n debug(\"connect attempt timed out after %d\", timeout);\n openSubDestroy();\n onError(new Error(\"timeout\"));\n socket.close();\n }, timeout);\n if (this.opts.autoUnref) {\n timer.unref();\n }\n this.subs.push(() => {\n this.clearTimeoutFn(timer);\n });\n }\n this.subs.push(openSubDestroy);\n this.subs.push(errorSub);\n return this;\n }\n /**\n * Alias for open()\n *\n * @return self\n * @public\n */\n connect(fn) {\n return this.open(fn);\n }\n /**\n * Called upon transport open.\n *\n * @private\n */\n onopen() {\n debug(\"open\");\n // clear old subs\n this.cleanup();\n // mark as open\n this._readyState = \"open\";\n this.emitReserved(\"open\");\n // add new subs\n const socket = this.engine;\n this.subs.push(on_js_1.on(socket, \"ping\", this.onping.bind(this)), on_js_1.on(socket, \"data\", this.ondata.bind(this)), on_js_1.on(socket, \"error\", this.onerror.bind(this)), on_js_1.on(socket, \"close\", this.onclose.bind(this)), on_js_1.on(this.decoder, \"decoded\", this.ondecoded.bind(this)));\n }\n /**\n * Called upon a ping.\n *\n * @private\n */\n onping() {\n this.emitReserved(\"ping\");\n }\n /**\n * Called with data.\n *\n * @private\n */\n ondata(data) {\n try {\n this.decoder.add(data);\n }\n catch (e) {\n this.onclose(\"parse error\", e);\n }\n }\n /**\n * Called when parser fully decodes a packet.\n *\n * @private\n */\n ondecoded(packet) {\n // the nextTick call prevents an exception in a user-provided event listener from triggering a disconnection due to a \"parse error\"\n engine_io_client_1.nextTick(() => {\n this.emitReserved(\"packet\", packet);\n }, this.setTimeoutFn);\n }\n /**\n * Called upon socket error.\n *\n * @private\n */\n onerror(err) {\n debug(\"error\", err);\n this.emitReserved(\"error\", err);\n }\n /**\n * Creates a new socket for the given `nsp`.\n *\n * @return {Socket}\n * @public\n */\n socket(nsp, opts) {\n let socket = this.nsps[nsp];\n if (!socket) {\n socket = new socket_js_1.Socket(this, nsp, opts);\n this.nsps[nsp] = socket;\n }\n else if (this._autoConnect && !socket.active) {\n socket.connect();\n }\n return socket;\n }\n /**\n * Called upon a socket close.\n *\n * @param socket\n * @private\n */\n _destroy(socket) {\n const nsps = Object.keys(this.nsps);\n for (const nsp of nsps) {\n const socket = this.nsps[nsp];\n if (socket.active) {\n debug(\"socket %s is still active, skipping close\", nsp);\n return;\n }\n }\n this._close();\n }\n /**\n * Writes a packet.\n *\n * @param packet\n * @private\n */\n _packet(packet) {\n debug(\"writing packet %j\", packet);\n const encodedPackets = this.encoder.encode(packet);\n for (let i = 0; i < encodedPackets.length; i++) {\n this.engine.write(encodedPackets[i], packet.options);\n }\n }\n /**\n * Clean up transport subscriptions and packet buffer.\n *\n * @private\n */\n cleanup() {\n debug(\"cleanup\");\n this.subs.forEach((subDestroy) => subDestroy());\n this.subs.length = 0;\n this.decoder.destroy();\n }\n /**\n * Close the current socket.\n *\n * @private\n */\n _close() {\n debug(\"disconnect\");\n this.skipReconnect = true;\n this._reconnecting = false;\n this.onclose(\"forced close\");\n if (this.engine)\n this.engine.close();\n }\n /**\n * Alias for close()\n *\n * @private\n */\n disconnect() {\n return this._close();\n }\n /**\n * Called upon engine close.\n *\n * @private\n */\n onclose(reason, description) {\n debug(\"closed due to %s\", reason);\n this.cleanup();\n this.backoff.reset();\n this._readyState = \"closed\";\n this.emitReserved(\"close\", reason, description);\n if (this._reconnection && !this.skipReconnect) {\n this.reconnect();\n }\n }\n /**\n * Attempt a reconnection.\n *\n * @private\n */\n reconnect() {\n if (this._reconnecting || this.skipReconnect)\n return this;\n const self = this;\n if (this.backoff.attempts >= this._reconnectionAttempts) {\n debug(\"reconnect failed\");\n this.backoff.reset();\n this.emitReserved(\"reconnect_failed\");\n this._reconnecting = false;\n }\n else {\n const delay = this.backoff.duration();\n debug(\"will wait %dms before reconnect attempt\", delay);\n this._reconnecting = true;\n const timer = this.setTimeoutFn(() => {\n if (self.skipReconnect)\n return;\n debug(\"attempting reconnect\");\n this.emitReserved(\"reconnect_attempt\", self.backoff.attempts);\n // check again for the case socket closed in above events\n if (self.skipReconnect)\n return;\n self.open((err) => {\n if (err) {\n debug(\"reconnect attempt error\");\n self._reconnecting = false;\n self.reconnect();\n this.emitReserved(\"reconnect_error\", err);\n }\n else {\n debug(\"reconnect success\");\n self.onreconnect();\n }\n });\n }, delay);\n if (this.opts.autoUnref) {\n timer.unref();\n }\n this.subs.push(() => {\n this.clearTimeoutFn(timer);\n });\n }\n }\n /**\n * Called upon successful reconnect.\n *\n * @private\n */\n onreconnect() {\n const attempt = this.backoff.attempts;\n this._reconnecting = false;\n this.backoff.reset();\n this.emitReserved(\"reconnect\", attempt);\n }\n}\nexports.Manager = Manager;\n\n\n//# sourceURL=webpack://sqlitecloud/./node_modules/socket.io-client/build/cjs/manager.js?"); + +/***/ }), + +/***/ "./node_modules/socket.io-client/build/cjs/on.js": +/*!*******************************************************!*\ + !*** ./node_modules/socket.io-client/build/cjs/on.js ***! + \*******************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.on = void 0;\nfunction on(obj, ev, fn) {\n obj.on(ev, fn);\n return function subDestroy() {\n obj.off(ev, fn);\n };\n}\nexports.on = on;\n\n\n//# sourceURL=webpack://sqlitecloud/./node_modules/socket.io-client/build/cjs/on.js?"); + +/***/ }), + +/***/ "./node_modules/socket.io-client/build/cjs/socket.js": +/*!***********************************************************!*\ + !*** ./node_modules/socket.io-client/build/cjs/socket.js ***! + \***********************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; +eval("\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.Socket = void 0;\nconst socket_io_parser_1 = __webpack_require__(/*! socket.io-parser */ \"./node_modules/socket.io-parser/build/cjs/index.js\");\nconst on_js_1 = __webpack_require__(/*! ./on.js */ \"./node_modules/socket.io-client/build/cjs/on.js\");\nconst component_emitter_1 = __webpack_require__(/*! @socket.io/component-emitter */ \"./node_modules/@socket.io/component-emitter/index.mjs\");\nconst debug_1 = __importDefault(__webpack_require__(/*! debug */ \"./node_modules/debug/src/browser.js\")); // debug()\nconst debug = debug_1.default(\"socket.io-client:socket\"); // debug()\n/**\n * Internal events.\n * These events can't be emitted by the user.\n */\nconst RESERVED_EVENTS = Object.freeze({\n connect: 1,\n connect_error: 1,\n disconnect: 1,\n disconnecting: 1,\n // EventEmitter reserved events: https://nodejs.org/api/events.html#events_event_newlistener\n newListener: 1,\n removeListener: 1,\n});\n/**\n * A Socket is the fundamental class for interacting with the server.\n *\n * A Socket belongs to a certain Namespace (by default /) and uses an underlying {@link Manager} to communicate.\n *\n * @example\n * const socket = io();\n *\n * socket.on(\"connect\", () => {\n * console.log(\"connected\");\n * });\n *\n * // send an event to the server\n * socket.emit(\"foo\", \"bar\");\n *\n * socket.on(\"foobar\", () => {\n * // an event was received from the server\n * });\n *\n * // upon disconnection\n * socket.on(\"disconnect\", (reason) => {\n * console.log(`disconnected due to ${reason}`);\n * });\n */\nclass Socket extends component_emitter_1.Emitter {\n /**\n * `Socket` constructor.\n */\n constructor(io, nsp, opts) {\n super();\n /**\n * Whether the socket is currently connected to the server.\n *\n * @example\n * const socket = io();\n *\n * socket.on(\"connect\", () => {\n * console.log(socket.connected); // true\n * });\n *\n * socket.on(\"disconnect\", () => {\n * console.log(socket.connected); // false\n * });\n */\n this.connected = false;\n /**\n * Whether the connection state was recovered after a temporary disconnection. In that case, any missed packets will\n * be transmitted by the server.\n */\n this.recovered = false;\n /**\n * Buffer for packets received before the CONNECT packet\n */\n this.receiveBuffer = [];\n /**\n * Buffer for packets that will be sent once the socket is connected\n */\n this.sendBuffer = [];\n /**\n * The queue of packets to be sent with retry in case of failure.\n *\n * Packets are sent one by one, each waiting for the server acknowledgement, in order to guarantee the delivery order.\n * @private\n */\n this._queue = [];\n /**\n * A sequence to generate the ID of the {@link QueuedPacket}.\n * @private\n */\n this._queueSeq = 0;\n this.ids = 0;\n this.acks = {};\n this.flags = {};\n this.io = io;\n this.nsp = nsp;\n if (opts && opts.auth) {\n this.auth = opts.auth;\n }\n this._opts = Object.assign({}, opts);\n if (this.io._autoConnect)\n this.open();\n }\n /**\n * Whether the socket is currently disconnected\n *\n * @example\n * const socket = io();\n *\n * socket.on(\"connect\", () => {\n * console.log(socket.disconnected); // false\n * });\n *\n * socket.on(\"disconnect\", () => {\n * console.log(socket.disconnected); // true\n * });\n */\n get disconnected() {\n return !this.connected;\n }\n /**\n * Subscribe to open, close and packet events\n *\n * @private\n */\n subEvents() {\n if (this.subs)\n return;\n const io = this.io;\n this.subs = [\n on_js_1.on(io, \"open\", this.onopen.bind(this)),\n on_js_1.on(io, \"packet\", this.onpacket.bind(this)),\n on_js_1.on(io, \"error\", this.onerror.bind(this)),\n on_js_1.on(io, \"close\", this.onclose.bind(this)),\n ];\n }\n /**\n * Whether the Socket will try to reconnect when its Manager connects or reconnects.\n *\n * @example\n * const socket = io();\n *\n * console.log(socket.active); // true\n *\n * socket.on(\"disconnect\", (reason) => {\n * if (reason === \"io server disconnect\") {\n * // the disconnection was initiated by the server, you need to manually reconnect\n * console.log(socket.active); // false\n * }\n * // else the socket will automatically try to reconnect\n * console.log(socket.active); // true\n * });\n */\n get active() {\n return !!this.subs;\n }\n /**\n * \"Opens\" the socket.\n *\n * @example\n * const socket = io({\n * autoConnect: false\n * });\n *\n * socket.connect();\n */\n connect() {\n if (this.connected)\n return this;\n this.subEvents();\n if (!this.io[\"_reconnecting\"])\n this.io.open(); // ensure open\n if (\"open\" === this.io._readyState)\n this.onopen();\n return this;\n }\n /**\n * Alias for {@link connect()}.\n */\n open() {\n return this.connect();\n }\n /**\n * Sends a `message` event.\n *\n * This method mimics the WebSocket.send() method.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/WebSocket/send\n *\n * @example\n * socket.send(\"hello\");\n *\n * // this is equivalent to\n * socket.emit(\"message\", \"hello\");\n *\n * @return self\n */\n send(...args) {\n args.unshift(\"message\");\n this.emit.apply(this, args);\n return this;\n }\n /**\n * Override `emit`.\n * If the event is in `events`, it's emitted normally.\n *\n * @example\n * socket.emit(\"hello\", \"world\");\n *\n * // all serializable datastructures are supported (no need to call JSON.stringify)\n * socket.emit(\"hello\", 1, \"2\", { 3: [\"4\"], 5: Uint8Array.from([6]) });\n *\n * // with an acknowledgement from the server\n * socket.emit(\"hello\", \"world\", (val) => {\n * // ...\n * });\n *\n * @return self\n */\n emit(ev, ...args) {\n if (RESERVED_EVENTS.hasOwnProperty(ev)) {\n throw new Error('\"' + ev.toString() + '\" is a reserved event name');\n }\n args.unshift(ev);\n if (this._opts.retries && !this.flags.fromQueue && !this.flags.volatile) {\n this._addToQueue(args);\n return this;\n }\n const packet = {\n type: socket_io_parser_1.PacketType.EVENT,\n data: args,\n };\n packet.options = {};\n packet.options.compress = this.flags.compress !== false;\n // event ack callback\n if (\"function\" === typeof args[args.length - 1]) {\n const id = this.ids++;\n debug(\"emitting packet with ack id %d\", id);\n const ack = args.pop();\n this._registerAckCallback(id, ack);\n packet.id = id;\n }\n const isTransportWritable = this.io.engine &&\n this.io.engine.transport &&\n this.io.engine.transport.writable;\n const discardPacket = this.flags.volatile && (!isTransportWritable || !this.connected);\n if (discardPacket) {\n debug(\"discard packet as the transport is not currently writable\");\n }\n else if (this.connected) {\n this.notifyOutgoingListeners(packet);\n this.packet(packet);\n }\n else {\n this.sendBuffer.push(packet);\n }\n this.flags = {};\n return this;\n }\n /**\n * @private\n */\n _registerAckCallback(id, ack) {\n var _a;\n const timeout = (_a = this.flags.timeout) !== null && _a !== void 0 ? _a : this._opts.ackTimeout;\n if (timeout === undefined) {\n this.acks[id] = ack;\n return;\n }\n // @ts-ignore\n const timer = this.io.setTimeoutFn(() => {\n delete this.acks[id];\n for (let i = 0; i < this.sendBuffer.length; i++) {\n if (this.sendBuffer[i].id === id) {\n debug(\"removing packet with ack id %d from the buffer\", id);\n this.sendBuffer.splice(i, 1);\n }\n }\n debug(\"event with ack id %d has timed out after %d ms\", id, timeout);\n ack.call(this, new Error(\"operation has timed out\"));\n }, timeout);\n this.acks[id] = (...args) => {\n // @ts-ignore\n this.io.clearTimeoutFn(timer);\n ack.apply(this, [null, ...args]);\n };\n }\n /**\n * Emits an event and waits for an acknowledgement\n *\n * @example\n * // without timeout\n * const response = await socket.emitWithAck(\"hello\", \"world\");\n *\n * // with a specific timeout\n * try {\n * const response = await socket.timeout(1000).emitWithAck(\"hello\", \"world\");\n * } catch (err) {\n * // the server did not acknowledge the event in the given delay\n * }\n *\n * @return a Promise that will be fulfilled when the server acknowledges the event\n */\n emitWithAck(ev, ...args) {\n // the timeout flag is optional\n const withErr = this.flags.timeout !== undefined || this._opts.ackTimeout !== undefined;\n return new Promise((resolve, reject) => {\n args.push((arg1, arg2) => {\n if (withErr) {\n return arg1 ? reject(arg1) : resolve(arg2);\n }\n else {\n return resolve(arg1);\n }\n });\n this.emit(ev, ...args);\n });\n }\n /**\n * Add the packet to the queue.\n * @param args\n * @private\n */\n _addToQueue(args) {\n let ack;\n if (typeof args[args.length - 1] === \"function\") {\n ack = args.pop();\n }\n const packet = {\n id: this._queueSeq++,\n tryCount: 0,\n pending: false,\n args,\n flags: Object.assign({ fromQueue: true }, this.flags),\n };\n args.push((err, ...responseArgs) => {\n if (packet !== this._queue[0]) {\n // the packet has already been acknowledged\n return;\n }\n const hasError = err !== null;\n if (hasError) {\n if (packet.tryCount > this._opts.retries) {\n debug(\"packet [%d] is discarded after %d tries\", packet.id, packet.tryCount);\n this._queue.shift();\n if (ack) {\n ack(err);\n }\n }\n }\n else {\n debug(\"packet [%d] was successfully sent\", packet.id);\n this._queue.shift();\n if (ack) {\n ack(null, ...responseArgs);\n }\n }\n packet.pending = false;\n return this._drainQueue();\n });\n this._queue.push(packet);\n this._drainQueue();\n }\n /**\n * Send the first packet of the queue, and wait for an acknowledgement from the server.\n * @param force - whether to resend a packet that has not been acknowledged yet\n *\n * @private\n */\n _drainQueue(force = false) {\n debug(\"draining queue\");\n if (!this.connected || this._queue.length === 0) {\n return;\n }\n const packet = this._queue[0];\n if (packet.pending && !force) {\n debug(\"packet [%d] has already been sent and is waiting for an ack\", packet.id);\n return;\n }\n packet.pending = true;\n packet.tryCount++;\n debug(\"sending packet [%d] (try n°%d)\", packet.id, packet.tryCount);\n this.flags = packet.flags;\n this.emit.apply(this, packet.args);\n }\n /**\n * Sends a packet.\n *\n * @param packet\n * @private\n */\n packet(packet) {\n packet.nsp = this.nsp;\n this.io._packet(packet);\n }\n /**\n * Called upon engine `open`.\n *\n * @private\n */\n onopen() {\n debug(\"transport is open - connecting\");\n if (typeof this.auth == \"function\") {\n this.auth((data) => {\n this._sendConnectPacket(data);\n });\n }\n else {\n this._sendConnectPacket(this.auth);\n }\n }\n /**\n * Sends a CONNECT packet to initiate the Socket.IO session.\n *\n * @param data\n * @private\n */\n _sendConnectPacket(data) {\n this.packet({\n type: socket_io_parser_1.PacketType.CONNECT,\n data: this._pid\n ? Object.assign({ pid: this._pid, offset: this._lastOffset }, data)\n : data,\n });\n }\n /**\n * Called upon engine or manager `error`.\n *\n * @param err\n * @private\n */\n onerror(err) {\n if (!this.connected) {\n this.emitReserved(\"connect_error\", err);\n }\n }\n /**\n * Called upon engine `close`.\n *\n * @param reason\n * @param description\n * @private\n */\n onclose(reason, description) {\n debug(\"close (%s)\", reason);\n this.connected = false;\n delete this.id;\n this.emitReserved(\"disconnect\", reason, description);\n }\n /**\n * Called with socket packet.\n *\n * @param packet\n * @private\n */\n onpacket(packet) {\n const sameNamespace = packet.nsp === this.nsp;\n if (!sameNamespace)\n return;\n switch (packet.type) {\n case socket_io_parser_1.PacketType.CONNECT:\n if (packet.data && packet.data.sid) {\n this.onconnect(packet.data.sid, packet.data.pid);\n }\n else {\n this.emitReserved(\"connect_error\", new Error(\"It seems you are trying to reach a Socket.IO server in v2.x with a v3.x client, but they are not compatible (more information here: https://socket.io/docs/v3/migrating-from-2-x-to-3-0/)\"));\n }\n break;\n case socket_io_parser_1.PacketType.EVENT:\n case socket_io_parser_1.PacketType.BINARY_EVENT:\n this.onevent(packet);\n break;\n case socket_io_parser_1.PacketType.ACK:\n case socket_io_parser_1.PacketType.BINARY_ACK:\n this.onack(packet);\n break;\n case socket_io_parser_1.PacketType.DISCONNECT:\n this.ondisconnect();\n break;\n case socket_io_parser_1.PacketType.CONNECT_ERROR:\n this.destroy();\n const err = new Error(packet.data.message);\n // @ts-ignore\n err.data = packet.data.data;\n this.emitReserved(\"connect_error\", err);\n break;\n }\n }\n /**\n * Called upon a server event.\n *\n * @param packet\n * @private\n */\n onevent(packet) {\n const args = packet.data || [];\n debug(\"emitting event %j\", args);\n if (null != packet.id) {\n debug(\"attaching ack callback to event\");\n args.push(this.ack(packet.id));\n }\n if (this.connected) {\n this.emitEvent(args);\n }\n else {\n this.receiveBuffer.push(Object.freeze(args));\n }\n }\n emitEvent(args) {\n if (this._anyListeners && this._anyListeners.length) {\n const listeners = this._anyListeners.slice();\n for (const listener of listeners) {\n listener.apply(this, args);\n }\n }\n super.emit.apply(this, args);\n if (this._pid && args.length && typeof args[args.length - 1] === \"string\") {\n this._lastOffset = args[args.length - 1];\n }\n }\n /**\n * Produces an ack callback to emit with an event.\n *\n * @private\n */\n ack(id) {\n const self = this;\n let sent = false;\n return function (...args) {\n // prevent double callbacks\n if (sent)\n return;\n sent = true;\n debug(\"sending ack %j\", args);\n self.packet({\n type: socket_io_parser_1.PacketType.ACK,\n id: id,\n data: args,\n });\n };\n }\n /**\n * Called upon a server acknowlegement.\n *\n * @param packet\n * @private\n */\n onack(packet) {\n const ack = this.acks[packet.id];\n if (\"function\" === typeof ack) {\n debug(\"calling ack %s with %j\", packet.id, packet.data);\n ack.apply(this, packet.data);\n delete this.acks[packet.id];\n }\n else {\n debug(\"bad ack %s\", packet.id);\n }\n }\n /**\n * Called upon server connect.\n *\n * @private\n */\n onconnect(id, pid) {\n debug(\"socket connected with id %s\", id);\n this.id = id;\n this.recovered = pid && this._pid === pid;\n this._pid = pid; // defined only if connection state recovery is enabled\n this.connected = true;\n this.emitBuffered();\n this.emitReserved(\"connect\");\n this._drainQueue(true);\n }\n /**\n * Emit buffered events (received and emitted).\n *\n * @private\n */\n emitBuffered() {\n this.receiveBuffer.forEach((args) => this.emitEvent(args));\n this.receiveBuffer = [];\n this.sendBuffer.forEach((packet) => {\n this.notifyOutgoingListeners(packet);\n this.packet(packet);\n });\n this.sendBuffer = [];\n }\n /**\n * Called upon server disconnect.\n *\n * @private\n */\n ondisconnect() {\n debug(\"server disconnect (%s)\", this.nsp);\n this.destroy();\n this.onclose(\"io server disconnect\");\n }\n /**\n * Called upon forced client/server side disconnections,\n * this method ensures the manager stops tracking us and\n * that reconnections don't get triggered for this.\n *\n * @private\n */\n destroy() {\n if (this.subs) {\n // clean subscriptions to avoid reconnections\n this.subs.forEach((subDestroy) => subDestroy());\n this.subs = undefined;\n }\n this.io[\"_destroy\"](this);\n }\n /**\n * Disconnects the socket manually. In that case, the socket will not try to reconnect.\n *\n * If this is the last active Socket instance of the {@link Manager}, the low-level connection will be closed.\n *\n * @example\n * const socket = io();\n *\n * socket.on(\"disconnect\", (reason) => {\n * // console.log(reason); prints \"io client disconnect\"\n * });\n *\n * socket.disconnect();\n *\n * @return self\n */\n disconnect() {\n if (this.connected) {\n debug(\"performing disconnect (%s)\", this.nsp);\n this.packet({ type: socket_io_parser_1.PacketType.DISCONNECT });\n }\n // remove socket from pool\n this.destroy();\n if (this.connected) {\n // fire events\n this.onclose(\"io client disconnect\");\n }\n return this;\n }\n /**\n * Alias for {@link disconnect()}.\n *\n * @return self\n */\n close() {\n return this.disconnect();\n }\n /**\n * Sets the compress flag.\n *\n * @example\n * socket.compress(false).emit(\"hello\");\n *\n * @param compress - if `true`, compresses the sending data\n * @return self\n */\n compress(compress) {\n this.flags.compress = compress;\n return this;\n }\n /**\n * Sets a modifier for a subsequent event emission that the event message will be dropped when this socket is not\n * ready to send messages.\n *\n * @example\n * socket.volatile.emit(\"hello\"); // the server may or may not receive it\n *\n * @returns self\n */\n get volatile() {\n this.flags.volatile = true;\n return this;\n }\n /**\n * Sets a modifier for a subsequent event emission that the callback will be called with an error when the\n * given number of milliseconds have elapsed without an acknowledgement from the server:\n *\n * @example\n * socket.timeout(5000).emit(\"my-event\", (err) => {\n * if (err) {\n * // the server did not acknowledge the event in the given delay\n * }\n * });\n *\n * @returns self\n */\n timeout(timeout) {\n this.flags.timeout = timeout;\n return this;\n }\n /**\n * Adds a listener that will be fired when any event is emitted. The event name is passed as the first argument to the\n * callback.\n *\n * @example\n * socket.onAny((event, ...args) => {\n * console.log(`got ${event}`);\n * });\n *\n * @param listener\n */\n onAny(listener) {\n this._anyListeners = this._anyListeners || [];\n this._anyListeners.push(listener);\n return this;\n }\n /**\n * Adds a listener that will be fired when any event is emitted. The event name is passed as the first argument to the\n * callback. The listener is added to the beginning of the listeners array.\n *\n * @example\n * socket.prependAny((event, ...args) => {\n * console.log(`got event ${event}`);\n * });\n *\n * @param listener\n */\n prependAny(listener) {\n this._anyListeners = this._anyListeners || [];\n this._anyListeners.unshift(listener);\n return this;\n }\n /**\n * Removes the listener that will be fired when any event is emitted.\n *\n * @example\n * const catchAllListener = (event, ...args) => {\n * console.log(`got event ${event}`);\n * }\n *\n * socket.onAny(catchAllListener);\n *\n * // remove a specific listener\n * socket.offAny(catchAllListener);\n *\n * // or remove all listeners\n * socket.offAny();\n *\n * @param listener\n */\n offAny(listener) {\n if (!this._anyListeners) {\n return this;\n }\n if (listener) {\n const listeners = this._anyListeners;\n for (let i = 0; i < listeners.length; i++) {\n if (listener === listeners[i]) {\n listeners.splice(i, 1);\n return this;\n }\n }\n }\n else {\n this._anyListeners = [];\n }\n return this;\n }\n /**\n * Returns an array of listeners that are listening for any event that is specified. This array can be manipulated,\n * e.g. to remove listeners.\n */\n listenersAny() {\n return this._anyListeners || [];\n }\n /**\n * Adds a listener that will be fired when any event is emitted. The event name is passed as the first argument to the\n * callback.\n *\n * Note: acknowledgements sent to the server are not included.\n *\n * @example\n * socket.onAnyOutgoing((event, ...args) => {\n * console.log(`sent event ${event}`);\n * });\n *\n * @param listener\n */\n onAnyOutgoing(listener) {\n this._anyOutgoingListeners = this._anyOutgoingListeners || [];\n this._anyOutgoingListeners.push(listener);\n return this;\n }\n /**\n * Adds a listener that will be fired when any event is emitted. The event name is passed as the first argument to the\n * callback. The listener is added to the beginning of the listeners array.\n *\n * Note: acknowledgements sent to the server are not included.\n *\n * @example\n * socket.prependAnyOutgoing((event, ...args) => {\n * console.log(`sent event ${event}`);\n * });\n *\n * @param listener\n */\n prependAnyOutgoing(listener) {\n this._anyOutgoingListeners = this._anyOutgoingListeners || [];\n this._anyOutgoingListeners.unshift(listener);\n return this;\n }\n /**\n * Removes the listener that will be fired when any event is emitted.\n *\n * @example\n * const catchAllListener = (event, ...args) => {\n * console.log(`sent event ${event}`);\n * }\n *\n * socket.onAnyOutgoing(catchAllListener);\n *\n * // remove a specific listener\n * socket.offAnyOutgoing(catchAllListener);\n *\n * // or remove all listeners\n * socket.offAnyOutgoing();\n *\n * @param [listener] - the catch-all listener (optional)\n */\n offAnyOutgoing(listener) {\n if (!this._anyOutgoingListeners) {\n return this;\n }\n if (listener) {\n const listeners = this._anyOutgoingListeners;\n for (let i = 0; i < listeners.length; i++) {\n if (listener === listeners[i]) {\n listeners.splice(i, 1);\n return this;\n }\n }\n }\n else {\n this._anyOutgoingListeners = [];\n }\n return this;\n }\n /**\n * Returns an array of listeners that are listening for any event that is specified. This array can be manipulated,\n * e.g. to remove listeners.\n */\n listenersAnyOutgoing() {\n return this._anyOutgoingListeners || [];\n }\n /**\n * Notify the listeners for each packet sent\n *\n * @param packet\n *\n * @private\n */\n notifyOutgoingListeners(packet) {\n if (this._anyOutgoingListeners && this._anyOutgoingListeners.length) {\n const listeners = this._anyOutgoingListeners.slice();\n for (const listener of listeners) {\n listener.apply(this, packet.data);\n }\n }\n }\n}\nexports.Socket = Socket;\n\n\n//# sourceURL=webpack://sqlitecloud/./node_modules/socket.io-client/build/cjs/socket.js?"); + +/***/ }), + +/***/ "./node_modules/socket.io-client/build/cjs/url.js": +/*!********************************************************!*\ + !*** ./node_modules/socket.io-client/build/cjs/url.js ***! + \********************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; +eval("\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.url = void 0;\nconst engine_io_client_1 = __webpack_require__(/*! engine.io-client */ \"./node_modules/engine.io-client/build/cjs/index.js\");\nconst debug_1 = __importDefault(__webpack_require__(/*! debug */ \"./node_modules/debug/src/browser.js\")); // debug()\nconst debug = debug_1.default(\"socket.io-client:url\"); // debug()\n/**\n * URL parser.\n *\n * @param uri - url\n * @param path - the request path of the connection\n * @param loc - An object meant to mimic window.location.\n * Defaults to window.location.\n * @public\n */\nfunction url(uri, path = \"\", loc) {\n let obj = uri;\n // default to window.location\n loc = loc || (typeof location !== \"undefined\" && location);\n if (null == uri)\n uri = loc.protocol + \"//\" + loc.host;\n // relative path support\n if (typeof uri === \"string\") {\n if (\"/\" === uri.charAt(0)) {\n if (\"/\" === uri.charAt(1)) {\n uri = loc.protocol + uri;\n }\n else {\n uri = loc.host + uri;\n }\n }\n if (!/^(https?|wss?):\\/\\//.test(uri)) {\n debug(\"protocol-less url %s\", uri);\n if (\"undefined\" !== typeof loc) {\n uri = loc.protocol + \"//\" + uri;\n }\n else {\n uri = \"https://\" + uri;\n }\n }\n // parse\n debug(\"parse %s\", uri);\n obj = engine_io_client_1.parse(uri);\n }\n // make sure we treat `localhost:80` and `localhost` equally\n if (!obj.port) {\n if (/^(http|ws)$/.test(obj.protocol)) {\n obj.port = \"80\";\n }\n else if (/^(http|ws)s$/.test(obj.protocol)) {\n obj.port = \"443\";\n }\n }\n obj.path = obj.path || \"/\";\n const ipv6 = obj.host.indexOf(\":\") !== -1;\n const host = ipv6 ? \"[\" + obj.host + \"]\" : obj.host;\n // define unique id\n obj.id = obj.protocol + \"://\" + host + \":\" + obj.port + path;\n // define href\n obj.href =\n obj.protocol +\n \"://\" +\n host +\n (loc && loc.port === obj.port ? \"\" : \":\" + obj.port);\n return obj;\n}\nexports.url = url;\n\n\n//# sourceURL=webpack://sqlitecloud/./node_modules/socket.io-client/build/cjs/url.js?"); + +/***/ }), + +/***/ "./node_modules/socket.io-parser/build/cjs/binary.js": +/*!***********************************************************!*\ + !*** ./node_modules/socket.io-parser/build/cjs/binary.js ***! + \***********************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.reconstructPacket = exports.deconstructPacket = void 0;\nconst is_binary_js_1 = __webpack_require__(/*! ./is-binary.js */ \"./node_modules/socket.io-parser/build/cjs/is-binary.js\");\n/**\n * Replaces every Buffer | ArrayBuffer | Blob | File in packet with a numbered placeholder.\n *\n * @param {Object} packet - socket.io event packet\n * @return {Object} with deconstructed packet and list of buffers\n * @public\n */\nfunction deconstructPacket(packet) {\n const buffers = [];\n const packetData = packet.data;\n const pack = packet;\n pack.data = _deconstructPacket(packetData, buffers);\n pack.attachments = buffers.length; // number of binary 'attachments'\n return { packet: pack, buffers: buffers };\n}\nexports.deconstructPacket = deconstructPacket;\nfunction _deconstructPacket(data, buffers) {\n if (!data)\n return data;\n if ((0, is_binary_js_1.isBinary)(data)) {\n const placeholder = { _placeholder: true, num: buffers.length };\n buffers.push(data);\n return placeholder;\n }\n else if (Array.isArray(data)) {\n const newData = new Array(data.length);\n for (let i = 0; i < data.length; i++) {\n newData[i] = _deconstructPacket(data[i], buffers);\n }\n return newData;\n }\n else if (typeof data === \"object\" && !(data instanceof Date)) {\n const newData = {};\n for (const key in data) {\n if (Object.prototype.hasOwnProperty.call(data, key)) {\n newData[key] = _deconstructPacket(data[key], buffers);\n }\n }\n return newData;\n }\n return data;\n}\n/**\n * Reconstructs a binary packet from its placeholder packet and buffers\n *\n * @param {Object} packet - event packet with placeholders\n * @param {Array} buffers - binary buffers to put in placeholder positions\n * @return {Object} reconstructed packet\n * @public\n */\nfunction reconstructPacket(packet, buffers) {\n packet.data = _reconstructPacket(packet.data, buffers);\n delete packet.attachments; // no longer useful\n return packet;\n}\nexports.reconstructPacket = reconstructPacket;\nfunction _reconstructPacket(data, buffers) {\n if (!data)\n return data;\n if (data && data._placeholder === true) {\n const isIndexValid = typeof data.num === \"number\" &&\n data.num >= 0 &&\n data.num < buffers.length;\n if (isIndexValid) {\n return buffers[data.num]; // appropriate buffer (should be natural order anyway)\n }\n else {\n throw new Error(\"illegal attachments\");\n }\n }\n else if (Array.isArray(data)) {\n for (let i = 0; i < data.length; i++) {\n data[i] = _reconstructPacket(data[i], buffers);\n }\n }\n else if (typeof data === \"object\") {\n for (const key in data) {\n if (Object.prototype.hasOwnProperty.call(data, key)) {\n data[key] = _reconstructPacket(data[key], buffers);\n }\n }\n }\n return data;\n}\n\n\n//# sourceURL=webpack://sqlitecloud/./node_modules/socket.io-parser/build/cjs/binary.js?"); + +/***/ }), + +/***/ "./node_modules/socket.io-parser/build/cjs/index.js": +/*!**********************************************************!*\ + !*** ./node_modules/socket.io-parser/build/cjs/index.js ***! + \**********************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.Decoder = exports.Encoder = exports.PacketType = exports.protocol = void 0;\nconst component_emitter_1 = __webpack_require__(/*! @socket.io/component-emitter */ \"./node_modules/@socket.io/component-emitter/index.mjs\");\nconst binary_js_1 = __webpack_require__(/*! ./binary.js */ \"./node_modules/socket.io-parser/build/cjs/binary.js\");\nconst is_binary_js_1 = __webpack_require__(/*! ./is-binary.js */ \"./node_modules/socket.io-parser/build/cjs/is-binary.js\");\nconst debug_1 = __webpack_require__(/*! debug */ \"./node_modules/debug/src/browser.js\"); // debug()\nconst debug = (0, debug_1.default)(\"socket.io-parser\"); // debug()\n/**\n * These strings must not be used as event names, as they have a special meaning.\n */\nconst RESERVED_EVENTS = [\n \"connect\",\n \"connect_error\",\n \"disconnect\",\n \"disconnecting\",\n \"newListener\",\n \"removeListener\", // used by the Node.js EventEmitter\n];\n/**\n * Protocol version.\n *\n * @public\n */\nexports.protocol = 5;\nvar PacketType;\n(function (PacketType) {\n PacketType[PacketType[\"CONNECT\"] = 0] = \"CONNECT\";\n PacketType[PacketType[\"DISCONNECT\"] = 1] = \"DISCONNECT\";\n PacketType[PacketType[\"EVENT\"] = 2] = \"EVENT\";\n PacketType[PacketType[\"ACK\"] = 3] = \"ACK\";\n PacketType[PacketType[\"CONNECT_ERROR\"] = 4] = \"CONNECT_ERROR\";\n PacketType[PacketType[\"BINARY_EVENT\"] = 5] = \"BINARY_EVENT\";\n PacketType[PacketType[\"BINARY_ACK\"] = 6] = \"BINARY_ACK\";\n})(PacketType = exports.PacketType || (exports.PacketType = {}));\n/**\n * A socket.io Encoder instance\n */\nclass Encoder {\n /**\n * Encoder constructor\n *\n * @param {function} replacer - custom replacer to pass down to JSON.parse\n */\n constructor(replacer) {\n this.replacer = replacer;\n }\n /**\n * Encode a packet as a single string if non-binary, or as a\n * buffer sequence, depending on packet type.\n *\n * @param {Object} obj - packet object\n */\n encode(obj) {\n debug(\"encoding packet %j\", obj);\n if (obj.type === PacketType.EVENT || obj.type === PacketType.ACK) {\n if ((0, is_binary_js_1.hasBinary)(obj)) {\n return this.encodeAsBinary({\n type: obj.type === PacketType.EVENT\n ? PacketType.BINARY_EVENT\n : PacketType.BINARY_ACK,\n nsp: obj.nsp,\n data: obj.data,\n id: obj.id,\n });\n }\n }\n return [this.encodeAsString(obj)];\n }\n /**\n * Encode packet as string.\n */\n encodeAsString(obj) {\n // first is type\n let str = \"\" + obj.type;\n // attachments if we have them\n if (obj.type === PacketType.BINARY_EVENT ||\n obj.type === PacketType.BINARY_ACK) {\n str += obj.attachments + \"-\";\n }\n // if we have a namespace other than `/`\n // we append it followed by a comma `,`\n if (obj.nsp && \"/\" !== obj.nsp) {\n str += obj.nsp + \",\";\n }\n // immediately followed by the id\n if (null != obj.id) {\n str += obj.id;\n }\n // json data\n if (null != obj.data) {\n str += JSON.stringify(obj.data, this.replacer);\n }\n debug(\"encoded %j as %s\", obj, str);\n return str;\n }\n /**\n * Encode packet as 'buffer sequence' by removing blobs, and\n * deconstructing packet into object with placeholders and\n * a list of buffers.\n */\n encodeAsBinary(obj) {\n const deconstruction = (0, binary_js_1.deconstructPacket)(obj);\n const pack = this.encodeAsString(deconstruction.packet);\n const buffers = deconstruction.buffers;\n buffers.unshift(pack); // add packet info to beginning of data list\n return buffers; // write all the buffers\n }\n}\nexports.Encoder = Encoder;\n// see https://stackoverflow.com/questions/8511281/check-if-a-value-is-an-object-in-javascript\nfunction isObject(value) {\n return Object.prototype.toString.call(value) === \"[object Object]\";\n}\n/**\n * A socket.io Decoder instance\n *\n * @return {Object} decoder\n */\nclass Decoder extends component_emitter_1.Emitter {\n /**\n * Decoder constructor\n *\n * @param {function} reviver - custom reviver to pass down to JSON.stringify\n */\n constructor(reviver) {\n super();\n this.reviver = reviver;\n }\n /**\n * Decodes an encoded packet string into packet JSON.\n *\n * @param {String} obj - encoded packet\n */\n add(obj) {\n let packet;\n if (typeof obj === \"string\") {\n if (this.reconstructor) {\n throw new Error(\"got plaintext data when reconstructing a packet\");\n }\n packet = this.decodeString(obj);\n const isBinaryEvent = packet.type === PacketType.BINARY_EVENT;\n if (isBinaryEvent || packet.type === PacketType.BINARY_ACK) {\n packet.type = isBinaryEvent ? PacketType.EVENT : PacketType.ACK;\n // binary packet's json\n this.reconstructor = new BinaryReconstructor(packet);\n // no attachments, labeled binary but no binary data to follow\n if (packet.attachments === 0) {\n super.emitReserved(\"decoded\", packet);\n }\n }\n else {\n // non-binary full packet\n super.emitReserved(\"decoded\", packet);\n }\n }\n else if ((0, is_binary_js_1.isBinary)(obj) || obj.base64) {\n // raw binary data\n if (!this.reconstructor) {\n throw new Error(\"got binary data when not reconstructing a packet\");\n }\n else {\n packet = this.reconstructor.takeBinaryData(obj);\n if (packet) {\n // received final buffer\n this.reconstructor = null;\n super.emitReserved(\"decoded\", packet);\n }\n }\n }\n else {\n throw new Error(\"Unknown type: \" + obj);\n }\n }\n /**\n * Decode a packet String (JSON data)\n *\n * @param {String} str\n * @return {Object} packet\n */\n decodeString(str) {\n let i = 0;\n // look up type\n const p = {\n type: Number(str.charAt(0)),\n };\n if (PacketType[p.type] === undefined) {\n throw new Error(\"unknown packet type \" + p.type);\n }\n // look up attachments if type binary\n if (p.type === PacketType.BINARY_EVENT ||\n p.type === PacketType.BINARY_ACK) {\n const start = i + 1;\n while (str.charAt(++i) !== \"-\" && i != str.length) { }\n const buf = str.substring(start, i);\n if (buf != Number(buf) || str.charAt(i) !== \"-\") {\n throw new Error(\"Illegal attachments\");\n }\n p.attachments = Number(buf);\n }\n // look up namespace (if any)\n if (\"/\" === str.charAt(i + 1)) {\n const start = i + 1;\n while (++i) {\n const c = str.charAt(i);\n if (\",\" === c)\n break;\n if (i === str.length)\n break;\n }\n p.nsp = str.substring(start, i);\n }\n else {\n p.nsp = \"/\";\n }\n // look up id\n const next = str.charAt(i + 1);\n if (\"\" !== next && Number(next) == next) {\n const start = i + 1;\n while (++i) {\n const c = str.charAt(i);\n if (null == c || Number(c) != c) {\n --i;\n break;\n }\n if (i === str.length)\n break;\n }\n p.id = Number(str.substring(start, i + 1));\n }\n // look up json data\n if (str.charAt(++i)) {\n const payload = this.tryParse(str.substr(i));\n if (Decoder.isPayloadValid(p.type, payload)) {\n p.data = payload;\n }\n else {\n throw new Error(\"invalid payload\");\n }\n }\n debug(\"decoded %s as %j\", str, p);\n return p;\n }\n tryParse(str) {\n try {\n return JSON.parse(str, this.reviver);\n }\n catch (e) {\n return false;\n }\n }\n static isPayloadValid(type, payload) {\n switch (type) {\n case PacketType.CONNECT:\n return isObject(payload);\n case PacketType.DISCONNECT:\n return payload === undefined;\n case PacketType.CONNECT_ERROR:\n return typeof payload === \"string\" || isObject(payload);\n case PacketType.EVENT:\n case PacketType.BINARY_EVENT:\n return (Array.isArray(payload) &&\n (typeof payload[0] === \"number\" ||\n (typeof payload[0] === \"string\" &&\n RESERVED_EVENTS.indexOf(payload[0]) === -1)));\n case PacketType.ACK:\n case PacketType.BINARY_ACK:\n return Array.isArray(payload);\n }\n }\n /**\n * Deallocates a parser's resources\n */\n destroy() {\n if (this.reconstructor) {\n this.reconstructor.finishedReconstruction();\n this.reconstructor = null;\n }\n }\n}\nexports.Decoder = Decoder;\n/**\n * A manager of a binary event's 'buffer sequence'. Should\n * be constructed whenever a packet of type BINARY_EVENT is\n * decoded.\n *\n * @param {Object} packet\n * @return {BinaryReconstructor} initialized reconstructor\n */\nclass BinaryReconstructor {\n constructor(packet) {\n this.packet = packet;\n this.buffers = [];\n this.reconPack = packet;\n }\n /**\n * Method to be called when binary data received from connection\n * after a BINARY_EVENT packet.\n *\n * @param {Buffer | ArrayBuffer} binData - the raw binary data received\n * @return {null | Object} returns null if more binary data is expected or\n * a reconstructed packet object if all buffers have been received.\n */\n takeBinaryData(binData) {\n this.buffers.push(binData);\n if (this.buffers.length === this.reconPack.attachments) {\n // done with buffer list\n const packet = (0, binary_js_1.reconstructPacket)(this.reconPack, this.buffers);\n this.finishedReconstruction();\n return packet;\n }\n return null;\n }\n /**\n * Cleans up binary packet reconstruction variables.\n */\n finishedReconstruction() {\n this.reconPack = null;\n this.buffers = [];\n }\n}\n\n\n//# sourceURL=webpack://sqlitecloud/./node_modules/socket.io-parser/build/cjs/index.js?"); + +/***/ }), + +/***/ "./node_modules/socket.io-parser/build/cjs/is-binary.js": +/*!**************************************************************!*\ + !*** ./node_modules/socket.io-parser/build/cjs/is-binary.js ***! + \**************************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.hasBinary = exports.isBinary = void 0;\nconst withNativeArrayBuffer = typeof ArrayBuffer === \"function\";\nconst isView = (obj) => {\n return typeof ArrayBuffer.isView === \"function\"\n ? ArrayBuffer.isView(obj)\n : obj.buffer instanceof ArrayBuffer;\n};\nconst toString = Object.prototype.toString;\nconst withNativeBlob = typeof Blob === \"function\" ||\n (typeof Blob !== \"undefined\" &&\n toString.call(Blob) === \"[object BlobConstructor]\");\nconst withNativeFile = typeof File === \"function\" ||\n (typeof File !== \"undefined\" &&\n toString.call(File) === \"[object FileConstructor]\");\n/**\n * Returns true if obj is a Buffer, an ArrayBuffer, a Blob or a File.\n *\n * @private\n */\nfunction isBinary(obj) {\n return ((withNativeArrayBuffer && (obj instanceof ArrayBuffer || isView(obj))) ||\n (withNativeBlob && obj instanceof Blob) ||\n (withNativeFile && obj instanceof File));\n}\nexports.isBinary = isBinary;\nfunction hasBinary(obj, toJSON) {\n if (!obj || typeof obj !== \"object\") {\n return false;\n }\n if (Array.isArray(obj)) {\n for (let i = 0, l = obj.length; i < l; i++) {\n if (hasBinary(obj[i])) {\n return true;\n }\n }\n return false;\n }\n if (isBinary(obj)) {\n return true;\n }\n if (obj.toJSON &&\n typeof obj.toJSON === \"function\" &&\n arguments.length === 1) {\n return hasBinary(obj.toJSON(), true);\n }\n for (const key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key) && hasBinary(obj[key])) {\n return true;\n }\n }\n return false;\n}\nexports.hasBinary = hasBinary;\n\n\n//# sourceURL=webpack://sqlitecloud/./node_modules/socket.io-parser/build/cjs/is-binary.js?"); + +/***/ }), + +/***/ "./node_modules/@socket.io/component-emitter/index.mjs": +/*!*************************************************************!*\ + !*** ./node_modules/@socket.io/component-emitter/index.mjs ***! + \*************************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Emitter: () => (/* binding */ Emitter)\n/* harmony export */ });\n/**\n * Initialize a new `Emitter`.\n *\n * @api public\n */\n\nfunction Emitter(obj) {\n if (obj) return mixin(obj);\n}\n\n/**\n * Mixin the emitter properties.\n *\n * @param {Object} obj\n * @return {Object}\n * @api private\n */\n\nfunction mixin(obj) {\n for (var key in Emitter.prototype) {\n obj[key] = Emitter.prototype[key];\n }\n return obj;\n}\n\n/**\n * Listen on the given `event` with `fn`.\n *\n * @param {String} event\n * @param {Function} fn\n * @return {Emitter}\n * @api public\n */\n\nEmitter.prototype.on =\nEmitter.prototype.addEventListener = function(event, fn){\n this._callbacks = this._callbacks || {};\n (this._callbacks['$' + event] = this._callbacks['$' + event] || [])\n .push(fn);\n return this;\n};\n\n/**\n * Adds an `event` listener that will be invoked a single\n * time then automatically removed.\n *\n * @param {String} event\n * @param {Function} fn\n * @return {Emitter}\n * @api public\n */\n\nEmitter.prototype.once = function(event, fn){\n function on() {\n this.off(event, on);\n fn.apply(this, arguments);\n }\n\n on.fn = fn;\n this.on(event, on);\n return this;\n};\n\n/**\n * Remove the given callback for `event` or all\n * registered callbacks.\n *\n * @param {String} event\n * @param {Function} fn\n * @return {Emitter}\n * @api public\n */\n\nEmitter.prototype.off =\nEmitter.prototype.removeListener =\nEmitter.prototype.removeAllListeners =\nEmitter.prototype.removeEventListener = function(event, fn){\n this._callbacks = this._callbacks || {};\n\n // all\n if (0 == arguments.length) {\n this._callbacks = {};\n return this;\n }\n\n // specific event\n var callbacks = this._callbacks['$' + event];\n if (!callbacks) return this;\n\n // remove all handlers\n if (1 == arguments.length) {\n delete this._callbacks['$' + event];\n return this;\n }\n\n // remove specific handler\n var cb;\n for (var i = 0; i < callbacks.length; i++) {\n cb = callbacks[i];\n if (cb === fn || cb.fn === fn) {\n callbacks.splice(i, 1);\n break;\n }\n }\n\n // Remove event specific arrays for event types that no\n // one is subscribed for to avoid memory leak.\n if (callbacks.length === 0) {\n delete this._callbacks['$' + event];\n }\n\n return this;\n};\n\n/**\n * Emit `event` with the given args.\n *\n * @param {String} event\n * @param {Mixed} ...\n * @return {Emitter}\n */\n\nEmitter.prototype.emit = function(event){\n this._callbacks = this._callbacks || {};\n\n var args = new Array(arguments.length - 1)\n , callbacks = this._callbacks['$' + event];\n\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n\n if (callbacks) {\n callbacks = callbacks.slice(0);\n for (var i = 0, len = callbacks.length; i < len; ++i) {\n callbacks[i].apply(this, args);\n }\n }\n\n return this;\n};\n\n// alias used for reserved events (protected method)\nEmitter.prototype.emitReserved = Emitter.prototype.emit;\n\n/**\n * Return array of callbacks for `event`.\n *\n * @param {String} event\n * @return {Array}\n * @api public\n */\n\nEmitter.prototype.listeners = function(event){\n this._callbacks = this._callbacks || {};\n return this._callbacks['$' + event] || [];\n};\n\n/**\n * Check if this emitter has `event` handlers.\n *\n * @param {String} event\n * @return {Boolean}\n * @api public\n */\n\nEmitter.prototype.hasListeners = function(event){\n return !! this.listeners(event).length;\n};\n\n\n//# sourceURL=webpack://sqlitecloud/./node_modules/@socket.io/component-emitter/index.mjs?"); + +/***/ }) + +/******/ }); +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ __webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/define property getters */ +/******/ (() => { +/******/ // define getter functions for harmony exports +/******/ __webpack_require__.d = (exports, definition) => { +/******/ for(var key in definition) { +/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { +/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ })(); +/******/ +/******/ /* webpack/runtime/make namespace object */ +/******/ (() => { +/******/ // define __esModule on exports +/******/ __webpack_require__.r = (exports) => { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ })(); +/******/ +/************************************************************************/ +/******/ +/******/ // startup +/******/ // Load entry module and return exports +/******/ // This entry module can't be inlined because the eval devtool is used. +/******/ var __webpack_exports__ = __webpack_require__("./lib/index.js"); +/******/ +/******/ return __webpack_exports__; +/******/ })() +; +}); \ No newline at end of file diff --git a/public/sqlitecloud.v0.0.37.js b/public/sqlitecloud.v0.0.37.js new file mode 100644 index 0000000..bc46adf --- /dev/null +++ b/public/sqlitecloud.v0.0.37.js @@ -0,0 +1 @@ +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.sqlitecloud=t():e.sqlitecloud=t()}(this,(()=>(()=>{var e={672:function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var s=Object.getOwnPropertyDescriptor(t,n);s&&!("get"in s?!t.__esModule:s.writable||s.configurable)||(s={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,s)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),s=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),o=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return s(t,e),t};Object.defineProperty(t,"__esModule",{value:!0}),t.getInitializationCommands=t.anonimizeError=t.anonimizeCommand=t.OperationsQueue=t.SQLiteCloudConnection=t.DEFAULT_PORT=t.DEFAULT_TIMEOUT=void 0;const i=n(230),a=n(261);t.DEFAULT_TIMEOUT=3e5,t.DEFAULT_PORT=9960,t.SQLiteCloudConnection=class{constructor(e,t){this.operations=new c,this.config="string"==typeof e?this.validateConfiguration({connectionString:e}):this.validateConfiguration(e),this.connect(t)}get connected(){var e;return(null===(e=this.transport)||void 0===e?void 0:e.connected)||!1}connect(e){return this.operations.enqueue((t=>{var r,s;a.isBrowser||(null===(r=this.config)||void 0===r?void 0:r.useWebsocket)||(null===(s=this.config)||void 0===s?void 0:s.gatewayUrl)?Promise.resolve().then((()=>o(n(122)))).then((n=>{this.transport=new n.WebSocketTransport,this.transport.connect(this.config,(n=>{n&&(console.error(`SQLiteCloudConnection.connect - error while connecting WebSocketTransport: ${n.toString()}`,this.config,n),this.close()),null==e||e.call(this,n||null),t(n)}))})).catch((e=>{t(e)})):Promise.resolve().then((()=>o(n(36)))).then((n=>{this.transport=new n.TlsSocketTransport,this.transport.connect(this.config,(n=>{n&&(console.error(`SQLiteCloudConnection.connect - error while connecting TlsSocketTransport: ${n.toString()}`,this.config,n),this.close()),null==e||e.call(this,n||null),t(n)}))})).catch((e=>{t(e)}))})),this}validateConfiguration(e){if(e.connectionString&&(e=Object.assign(Object.assign(Object.assign({},e),(0,a.parseConnectionString)(e.connectionString)),{connectionString:e.connectionString})),e.port||(e.port=t.DEFAULT_PORT),e.timeout=e.timeout&&e.timeout>0?e.timeout:t.DEFAULT_TIMEOUT,e.clientId||(e.clientId="SQLiteCloud"),e.verbose=(0,a.parseBoolean)(e.verbose),e.noBlob=(0,a.parseBoolean)(e.noBlob),e.compression=(0,a.parseBoolean)(e.compression),e.createDatabase=(0,a.parseBoolean)(e.createDatabase),e.nonlinearizable=(0,a.parseBoolean)(e.nonlinearizable),!e.username||!e.password||!e.host)throw console.error("SQLiteCloudConnection.validateConfiguration - missing arguments",e),new i.SQLiteCloudError("The user, password and host arguments must be specified.",{errorCode:"ERR_MISSING_ARGS"});return e.connectionString||(e.connectionString=`sqlitecloud://${e.username}:${e.password}@${e.host}:${e.port}/${e.database}`),e}log(e,...t){this.config.verbose&&(e=l(e),console.log(`${(new Date).toISOString()} ${this.config.clientId}: ${e}`,...t))}verbose(){this.config.verbose=!0}sendCommands(e,t){return this.operations.enqueue((n=>{if(this.transport)this.transport.processCommands(e,((e,r)=>{null==t||t.call(this,e,r),n(e)}));else{const e=new i.SQLiteCloudError("Connection not established",{errorCode:"ERR_CONNECTION_NOT_ESTABLISHED"});null==t||t.call(this,e),n(e)}})),this}close(){var e;return this.operations.clear(),null===(e=this.transport)||void 0===e||e.close(),this.transport=void 0,this}};class c{constructor(){this.queue=[],this.isProcessing=!1}enqueue(e){this.queue.push(e),this.isProcessing||this.processNext()}clear(){this.queue=[],this.isProcessing=!1}processNext(){if(0===this.queue.length)return void(this.isProcessing=!1);this.isProcessing=!0;const e=this.queue.shift();null==e||e((()=>{this.processNext()}))}}function l(e){return(e=(e=e.replace(/USER \S+/,"USER ******")).replace(/PASSWORD \S+?(?=;)/,"PASSWORD ******")).replace(/HASH \S+?(?=;)/,"HASH ******")}t.OperationsQueue=c,t.anonimizeCommand=l,t.anonimizeError=function(e){return(null==e?void 0:e.message)&&(e.message=l(e.message)),e},t.getInitializationCommands=function(e){let t=`AUTH USER ${e.username||""} ${e.passwordHashed?"HASH":"PASSWORD"} ${e.password||""}; `;return e.database&&(e.createDatabase&&!e.dbMemory&&(t+=`CREATE DATABASE ${e.database} IF NOT EXISTS; `),t+=`USE DATABASE ${e.database}; `),e.compression&&(t+="SET CLIENT KEY COMPRESSION TO 1; "),e.nonlinearizable&&(t+="SET CLIENT KEY NONLINEARIZABLE TO 1; "),e.noBlob&&(t+="SET CLIENT KEY NOBLOB TO 1; "),e.maxData&&(t+=`SET CLIENT KEY MAXDATA TO ${e.maxData}; `),e.maxRows&&(t+=`SET CLIENT KEY MAXROWS TO ${e.maxRows}; `),e.maxRowset&&(t+=`SET CLIENT KEY MAXROWSET TO ${e.maxRowset}; `),t}},537:function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(s,o){function i(e){try{c(r.next(e))}catch(e){o(e)}}function a(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?s(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(i,a)}c((r=r.apply(e,t||[])).next())}))},s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Database=void 0;const o=n(672),i=n(875),a=n(230),c=n(261),l=n(195),u=s(n(729));class h extends u.default{constructor(e,t,n){super(),this.connections=[],this.config="string"==typeof e?{connectionString:e}:e,"function"==typeof t&&(n=t,t=void 0),this.getConnection(n)}getConnection(e){var t;(null===(t=this.connections)||void 0===t?void 0:t.length)>0?null==e||e.call(this,null,this.connections[0]):this.connections.push(new o.SQLiteCloudConnection(this.config,(t=>{t?this.handleError(this.connections[0],t,e):(console.assert,null==e||e.call(this,null,this.connections[0]),this.emitEvent("open"))})))}handleError(e,t,n){e&&(this.connections=this.connections.filter((t=>t!==e)),e.close()),n?n.call(this,t):this.emitEvent("error",t)}processContext(e){if(e&&Array.isArray(e)&&e.length>0&&e[0]===a.SQLiteCloudArrayType.ARRAY_TYPE_SQLITE_EXEC)return{lastID:e[2],changes:e[3],totalChanges:e[4],finalized:e[5]}}emitEvent(e,...t){setTimeout((()=>{this.emit(e,...t)}),0)}getConfiguration(){return JSON.parse(JSON.stringify(this.config))}verbose(){this.config.verbose=!0;for(const e of this.connections)e.verbose();return this}configure(e,t){return this}run(e,...t){const{args:n,callback:r}=(0,c.popCallback)(t),s=(null==n?void 0:n.length)>0?(0,c.prepareSql)(e,...n):e;return this.getConnection(((e,t)=>{e||!t?this.handleError(null,e,r):t.sendCommands(s,((e,n)=>{if(e)this.handleError(t,e,r);else{const e=this.processContext(n);null==r||r.call(e||this,null,e?void 0:n)}}))})),this}get(e,...t){const{args:n,callback:r}=(0,c.popCallback)(t),s=(null==n?void 0:n.length)>0?(0,c.prepareSql)(e,...n):e;return this.getConnection(((e,t)=>{e||!t?this.handleError(null,e,r):t.sendCommands(s,((e,n)=>{e?this.handleError(t,e,r):n&&n instanceof i.SQLiteCloudRowset&&n.length>0?null==r||r.call(this,null,n[0]):null==r||r.call(this,null)}))})),this}all(e,...t){const{args:n,callback:r}=(0,c.popCallback)(t),s=(null==n?void 0:n.length)>0?(0,c.prepareSql)(e,...n):e;return this.getConnection(((e,t)=>{e||!t?this.handleError(null,e,r):t.sendCommands(s,((e,n)=>{e?this.handleError(t,e,r):n&&n instanceof i.SQLiteCloudRowset?null==r||r.call(this,null,n):null==r||r.call(this,null)}))})),this}each(e,...t){const{args:n,callback:r,complete:s}=(0,c.popCallback)(t),o=(null==n?void 0:n.length)>0?(0,c.prepareSql)(e,...n):e;return this.getConnection(((e,t)=>{e||!t?this.handleError(null,e,r):t.sendCommands(o,((e,n)=>{if(e)this.handleError(t,e,r);else if(n&&n instanceof i.SQLiteCloudRowset){if(r)for(const e of n)r.call(this,null,e);s&&s.call(this,null,n.numberOfRows)}else null==r||r.call(this,new a.SQLiteCloudError("Invalid rowset"))}))})),this}prepare(e,...t){const{args:n,callback:r}=(0,c.popCallback)(t);return new l.Statement(this,e,...n,r)}exec(e,t){return this.getConnection(((n,r)=>{n||!r?this.handleError(null,n,t):r.sendCommands(e,((e,n)=>{if(e)this.handleError(r,e,t);else{const e=this.processContext(n);null==t||t.call(e||this,null)}}))})),this}close(e){var t;if((null===(t=this.connections)||void 0===t?void 0:t.length)>0)for(const e of this.connections)e.close();null==e||e.call(this,null),this.emitEvent("close")}loadExtension(e,t){return t?t.call(this,new Error("Database.loadExtension - Not implemented")):this.emitEvent("error",new Error("Database.loadExtension - Not implemented")),this}interrupt(){}sql(e,...t){return r(this,void 0,void 0,(function*(){let n="";if(Array.isArray(e)&&"raw"in e)e.forEach(((e,r)=>{n+=e+(r0?(0,c.prepareSql)(e,...t):e}return new Promise(((e,t)=>{this.getConnection(((r,s)=>{r||!s?t(r):s.sendCommands(n,((n,r)=>{if(n)t(n);else{const t=this.processContext(r);e(t||r)}}))}))}))}))}}t.Database=h},875:function(e,t,n){"use strict";var r,s,o,i,a=this&&this.__classPrivateFieldSet||function(e,t,n,r,s){if("m"===r)throw new TypeError("Private method is not writable");if("a"===r&&!s)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!s:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===r?s.call(e,n):s?s.value=n:t.set(e,n),n},c=this&&this.__classPrivateFieldGet||function(e,t,n,r){if("a"===n&&!r)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!r:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===n?r:"a"===n?r.call(e):r?r.value:t.get(e)};Object.defineProperty(t,"__esModule",{value:!0}),t.SQLiteCloudRowset=t.SQLiteCloudRow=void 0;const l=n(230);class u{constructor(e,t,n){r.set(this,void 0),s.set(this,void 0),a(this,r,e,"f"),a(this,s,n,"f");for(let e=0;er!==t&&e===n[t]))>=0;)n[t]=`${n[t]}_${e}`,e++}for(let r=0,s=0;re.name))}get metadata(){return c(this,o,"f")}getItem(e,t){if(e<0||e>=this.numberOfRows||t<0||t>=this.numberOfColumns)throw new l.SQLiteCloudError(`This rowset has ${this.numberOfColumns} columns by ${this.numberOfRows} rows, requested column ${t} and row ${e} is invalid.`);return c(this,i,"f")[e*this.numberOfColumns+t]}slice(e,t){e=void 0===e?0:e<0?this.numberOfRows+e:e,e=Math.min(Math.max(e,0),this.numberOfRows),t=void 0===t?this.numberOfRows:t<0?this.numberOfRows+t:t,t=Math.min(Math.max(e,t),this.numberOfRows);const n=Object.assign(Object.assign({},c(this,o,"f")),{numberOfRows:t-e}),r=c(this,i,"f").slice(e*this.numberOfColumns,t*this.numberOfColumns);return console.assert(r&&r.length===n.numberOfRows*n.numberOfColumns,"SQLiteCloudRowset.slice - invalid rowset data"),new h(n,r)}map(e){const t=[];for(let n=0;n{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Statement=void 0;const r=n(261);t.Statement=class{constructor(e,t,...n){const{args:s,callback:o}=(0,r.popCallback)(n);this._database=e,this._sql=t,(null==s?void 0:s.length)>0?this.bind(...s,o):null==o||o.call(this,null)}bind(...e){const{args:t,callback:n}=(0,r.popCallback)(e);try{this._preparedSql=(0,r.prepareSql)(this._sql,...t),n&&n.call(this,null)}catch(e){this._preparedSql=void 0,n&&n.call(this,e)}return this}run(...e){const{args:t,callback:n}=(0,r.popCallback)(e||[]);return(null==t?void 0:t.length)>0?this.bind(...t,(e=>{e?null==n||n.call(this,e):this._database.run(this._preparedSql||"",n)})):this._database.run(this._preparedSql||"",n),this}get(...e){const{args:t,callback:n}=(0,r.popCallback)(e||[]);return(null==t?void 0:t.length)>0?this.bind(...t,(e=>{e?null==n||n.call(this,e):this._database.get(this._preparedSql||"",n)})):this._database.get(this._preparedSql||"",n),this}all(...e){const{args:t,callback:n}=(0,r.popCallback)(e||[]);return(null==t?void 0:t.length)>0?this.bind(...t,(e=>{e?null==n||n.call(this,e):this._database.all(this._preparedSql||"",n)})):this._database.all(this._preparedSql||"",n),this}each(...e){const{args:t,callback:n,complete:s}=(0,r.popCallback)(e);return(null==t?void 0:t.length)>0?this.bind(...t,(e=>{e?null==n||n.call(this,e):this._database.each(this._preparedSql||"",n,s)})):this._database.each(this._preparedSql||"",n,s),this}}},36:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.TlsSocketTransport=void 0;const s=n(230),o=n(875),i=n(672),a=n(672),c=r(n(492)),l=n(405),u="+",h="!",d="-",p=":",f=",",m="*",g="/",y="#",b="_",v="$",w="%",_="^",C="=";function k(e){const t=parseInt(e.subarray(0,e.indexOf(":")+1).toString());e=e.subarray(e.indexOf(":")+1);const{data:n,fwdBuffer:r}=function(e,t=1){const n=[];for(let r=0;r1&&(o=a[1],a.length>2&&(i=a[2]));const c=n.join(" "),l=parseInt(r),u=parseInt(o),h=parseInt(i);throw new s.SQLiteCloudError(c,{errorCode:l.toString(),externalErrorCode:u.toString(),offsetCode:h})}(e,r)}throw new TypeError(`Data type: ${n} is not defined in SCSP`)}t.TlsSocketTransport=class{get connected(){return!!this.socket}connect(e,t){console.assert(!this.connected,"Connection already established");const n=e=>{this.socket&&(this.socket.removeAllListeners("data"),this.socket.removeAllListeners("error"),this.socket.removeAllListeners("close"),e&&this.close())};return this.config=e,this.socket=c.default.connect(this.config.port,this.config.host,this.config.tlsOptions,(()=>{var r;if(null===(r=this.socket)||void 0===r?void 0:r.authorized){if(null===this.socket)return void n(new s.SQLiteCloudError("Connection was closed before it was done opening"));console.assert(this.socket,"Connection already closed");const r=(0,i.getInitializationCommands)(e);this.processCommands(r,(e=>{e&&this.socket&&this.close(),t&&(null==t||t.call(this,e),t=void 0),n(e)}))}else{const e=(0,a.anonimizeError)(this.socket.authorizationError);console.error("Connection was not authorized",e),this.close(),n(new s.SQLiteCloudError("Connection was not authorized",{cause:e}))}})),this.socket.on("close",(()=>{this.socket=null,n(new s.SQLiteCloudError("Connection was closed"))})),this.socket.once("error",(e=>{console.error("Connection error",e),n(new s.SQLiteCloudError("Connection error",{cause:e}))})),this}processCommands(e,t){var n,r,i,c;if(!this.socket)return null==t||t.call(this,new s.SQLiteCloudError("Connection not established",{errorCode:"ERR_CONNECTION_NOT_ESTABLISHED"})),this;c=e,e=`+${Buffer.byteLength(c,"utf-8")} ${c}`;let u=Buffer.alloc(0);const h=[];let d;new Date;const m=(e,n)=>{clearTimeout(d),this.socket&&(this.socket.removeAllListeners("data"),this.socket.removeAllListeners("error"),this.socket.removeAllListeners("close")),t&&(null==t||t.call(this,e,n),t=void 0)},y=e=>{var t,n,r;try{let s=0===u.length?e.subarray(0,1).toString():u.subarray(0,1).toString("utf8");if(u=Buffer.concat([u,e]),(r=s)!=p&&r!=f&&r!=b){const r=function(e){return parseInt(e.subarray(1,e.indexOf(" ")).toString("utf8"))}(u);if(u.length-u.indexOf(" ")-1>=r){if(null===(t=this.config)||void 0===t?void 0:t.verbose){let e=u.toString("utf8");e.length>1e3&&(e=e.substring(0,100)+"..."+e.substring(e.length-40))}if(s===w&&({buffer:u,dataType:s}=function(e){const t=e.indexOf(" ");e=e.subarray(t+1);const n=parseInt(e.subarray(0,e.indexOf(" ")+1).toString("utf8"));e=e.subarray(e.indexOf(" ")+1);const r=parseInt(e.subarray(0,e.indexOf(" ")+1).toString("utf8")),s=(e=e.subarray(e.indexOf(" ")+1)).subarray(0,1).toString("utf8"),o=Buffer.alloc(r),i=e.subarray(e.length-n),a=l.decompressBlock(i,o,0,n,0);if(e=Buffer.concat([e.subarray(0,e.length-n),o]),a<=0||a!==r)throw new Error(`lz4 decompression error at offset ${a}`);return{buffer:e,dataType:s}}(u)),s!==g){null===(n=this.socket)||void 0===n||n.off("data",y);const{data:e}=E(u);m(null,e)}else if("0 0 0 "===e.subarray(e.indexOf(" ")+1,e.length).toString()){const e=function(e){let t={version:1,numberOfColumns:0,numberOfRows:0,columns:[]};const n=[];for(let r=0;r{m(new s.SQLiteCloudError("Connection was closed",{cause:(0,a.anonimizeCommand)(e)}))})),null===(r=this.socket)||void 0===r||r.write(e,"utf8",(()=>{var t,n;d=setTimeout((()=>{const t=new s.SQLiteCloudError("Request timed out",{cause:(0,a.anonimizeCommand)(e)});m(t)}),null===(t=this.config)||void 0===t?void 0:t.timeout),null===(n=this.socket)||void 0===n||n.on("data",y)})),null===(i=this.socket)||void 0===i||i.once("error",(e=>{console.error("Socket error",e),this.close(),m(new s.SQLiteCloudError("Socket error",{cause:(0,a.anonimizeError)(e)}))})),this}close(){return console.assert(null!==this.socket,"TlsSocketTransport.close - connection already closed"),this.socket&&(this.socket.destroy(),this.socket=null),this.socket=void 0,this}}},122:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.WebSocketTransport=void 0;const r=n(230),s=n(875),o=n(46);t.WebSocketTransport=class{get connected(){return!!this.socket}connect(e,t){var n;try{if(console.assert(!this.connected,"Connection already established"),!this.socket){this.config=e;const t=this.config.connectionString,r=(null===(n=this.config)||void 0===n?void 0:n.gatewayUrl)||`ws://${this.config.host}:4000`;this.socket=(0,o.io)(r,{auth:{token:t}})}null==t||t.call(this,null)}catch(e){null==t||t.call(this,e)}return this}processCommands(e,t){return this.socket?(this.socket.emit("v1/sql",{sql:e,row:"array"},(e=>{if(null==e?void 0:e.error){const n=new r.SQLiteCloudError(e.error.detail,Object.assign({},e.error));null==t||t.call(this,n)}else{const{data:n,metadata:r}=e;if(n&&r&&void 0!==r.numberOfRows&&void 0!==r.numberOfColumns&&void 0!==r.columns){console.assert(Array.isArray(n),"SQLiteCloudWebsocketConnection.processCommands - data is not an array");const e=new s.SQLiteCloudRowset(r,n.flat());return void(null==t||t.call(this,null,e))}null==t||t.call(this,null,null==e?void 0:e.data)}})),this):(null==t||t.call(this,new r.SQLiteCloudError("Connection not established",{errorCode:"ERR_CONNECTION_NOT_ESTABLISHED"})),this)}close(){var e;return console.assert(null!==this.socket,"WebsocketTransport.close - connection already closed"),this.socket&&(null===(e=this.socket)||void 0===e||e.close(),this.socket=void 0),this.socket=void 0,this}}},230:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.SQLiteCloudArrayType=t.SQLiteCloudError=void 0;class n extends Error{constructor(e,t){super(e),this.name="SQLiteCloudError",t&&Object.assign(this,t)}}var r;t.SQLiteCloudError=n,(r=t.SQLiteCloudArrayType||(t.SQLiteCloudArrayType={}))[r.ARRAY_TYPE_SQLITE_EXEC=10]="ARRAY_TYPE_SQLITE_EXEC",r[r.ARRAY_TYPE_DB_STATUS=11]="ARRAY_TYPE_DB_STATUS",r[r.ARRAY_TYPE_METADATA=12]="ARRAY_TYPE_METADATA",r[r.ARRAY_TYPE_VM_STEP=20]="ARRAY_TYPE_VM_STEP",r[r.ARRAY_TYPE_VM_COMPILE=21]="ARRAY_TYPE_VM_COMPILE",r[r.ARRAY_TYPE_VM_STEP_ONE=22]="ARRAY_TYPE_VM_STEP_ONE",r[r.ARRAY_TYPE_VM_SQL=23]="ARRAY_TYPE_VM_SQL",r[r.ARRAY_TYPE_VM_STATUS=24]="ARRAY_TYPE_VM_STATUS",r[r.ARRAY_TYPE_VM_LIST=25]="ARRAY_TYPE_VM_LIST",r[r.ARRAY_TYPE_BACKUP_INIT=40]="ARRAY_TYPE_BACKUP_INIT",r[r.ARRAY_TYPE_BACKUP_STEP=41]="ARRAY_TYPE_BACKUP_STEP",r[r.ARRAY_TYPE_BACKUP_END=42]="ARRAY_TYPE_BACKUP_END",r[r.ARRAY_TYPE_SQLITE_STATUS=50]="ARRAY_TYPE_SQLITE_STATUS"},261:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.parseBoolean=t.parseConnectionString=t.popCallback=t.prepareSql=t.escapeSqlParameter=t.isNode=t.isBrowser=void 0;const r=n(230);function s(e){if(null==e)return"NULL";if("string"==typeof e)return`'${e=e.replace(/'/g,"''")}'`;if("number"==typeof e)return e.toString();if("boolean"==typeof e)return e?"1":"0";if(Buffer.isBuffer(e))return`X'${e.toString("hex")}'`;if("object"==typeof e){let t=JSON.stringify(e);return t=t.replace(/'/g,"''"),`'${t}'`}throw new r.SQLiteCloudError("Unsupported parameter type: "+typeof e)}t.isBrowser="undefined"!=typeof window&&void 0!==window.document,t.isNode="undefined"!=typeof process&&null!=process.versions&&null!=process.versions.node,t.escapeSqlParameter=s,t.prepareSql=function(e,...t){1===(null==t?void 0:t.length)&&Array.isArray(t[0])&&(t=t[0]);let n=1,o=e.replace(/\?(\d+)?/g,((e,o)=>{const i=o?parseInt(o):n;let a;if(n++,!t[0]||"object"!=typeof t[0]||t[0]instanceof Buffer||(a=t[0][i]),!a){if(i>t.length)throw new r.SQLiteCloudError("Not enough parameters");a=t[i-1]}return null!=a?s(a):"NULL"}));if(1===(null==t?void 0:t.length)&&t[0]&&"object"==typeof t[0]){const e=t[0];for(const[t,n]of Object.entries(e)){const e=t.charAt(0);if("$"==e||":"==e||"@"==e){const e=s(n);o=o.replace(new RegExp(`\\${t}`,"g"),e)}}}return o},t.popCallback=function(e){const t=e;return e&&e.length>0&&"function"==typeof e[e.length-1]?e.length>1&&"function"==typeof e[e.length-2]?{args:t.slice(0,-2),callback:e[e.length-2],complete:e[e.length-1]}:{args:t.slice(0,-1),callback:e[e.length-1]}:{args:t}},t.parseConnectionString=function(e){try{const t=e.replace("sqlitecloud:","https:"),n=new URL(t),r={};n.searchParams.forEach(((e,t)=>{r[t]=e}));const s=Object.assign({username:n.username,password:n.password,host:n.hostname,port:n.port?parseInt(n.port):void 0},r),o=n.pathname.replace("/","");return o&&(s.database=o),s}catch(t){throw new r.SQLiteCloudError(`Invalid connection string: ${e}`)}},t.parseBoolean=function(e){return"string"==typeof e?"true"===e.toLowerCase()||"1"===e:!!e}},227:(e,t,n)=>{t.formatArgs=function(t){if(t[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+t[0]+(this.useColors?"%c ":" ")+"+"+e.exports.humanize(this.diff),!this.useColors)return;const n="color: "+this.color;t.splice(1,0,n,"color: inherit");let r=0,s=0;t[0].replace(/%[a-zA-Z%]/g,(e=>{"%%"!==e&&(r++,"%c"===e&&(s=r))})),t.splice(s,0,n)},t.save=function(e){try{e?t.storage.setItem("debug",e):t.storage.removeItem("debug")}catch(e){}},t.load=function(){let e;try{e=t.storage.getItem("debug")}catch(e){}return!e&&"undefined"!=typeof process&&"env"in process&&(e=process.env.DEBUG),e},t.useColors=function(){return!("undefined"==typeof window||!window.process||"renderer"!==window.process.type&&!window.process.__nwjs)||("undefined"==typeof navigator||!navigator.userAgent||!navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/))&&("undefined"!=typeof document&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||"undefined"!=typeof window&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)&&parseInt(RegExp.$1,10)>=31||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/))},t.storage=function(){try{return localStorage}catch(e){}}(),t.destroy=(()=>{let e=!1;return()=>{e||(e=!0,console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."))}})(),t.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"],t.log=console.debug||console.log||(()=>{}),e.exports=n(447)(t);const{formatters:r}=e.exports;r.j=function(e){try{return JSON.stringify(e)}catch(e){return"[UnexpectedJSONParseError]: "+e.message}}},447:(e,t,n)=>{e.exports=function(e){function t(e){let n,s,o,i=null;function a(...e){if(!a.enabled)return;const r=a,s=Number(new Date),o=s-(n||s);r.diff=o,r.prev=n,r.curr=s,n=s,e[0]=t.coerce(e[0]),"string"!=typeof e[0]&&e.unshift("%O");let i=0;e[0]=e[0].replace(/%([a-zA-Z%])/g,((n,s)=>{if("%%"===n)return"%";i++;const o=t.formatters[s];if("function"==typeof o){const t=e[i];n=o.call(r,t),e.splice(i,1),i--}return n})),t.formatArgs.call(r,e),(r.log||t.log).apply(r,e)}return a.namespace=e,a.useColors=t.useColors(),a.color=t.selectColor(e),a.extend=r,a.destroy=t.destroy,Object.defineProperty(a,"enabled",{enumerable:!0,configurable:!1,get:()=>null!==i?i:(s!==t.namespaces&&(s=t.namespaces,o=t.enabled(e)),o),set:e=>{i=e}}),"function"==typeof t.init&&t.init(a),a}function r(e,n){const r=t(this.namespace+(void 0===n?":":n)+e);return r.log=this.log,r}function s(e){return e.toString().substring(2,e.toString().length-2).replace(/\.\*\?$/,"*")}return t.debug=t,t.default=t,t.coerce=function(e){return e instanceof Error?e.stack||e.message:e},t.disable=function(){const e=[...t.names.map(s),...t.skips.map(s).map((e=>"-"+e))].join(",");return t.enable(""),e},t.enable=function(e){let n;t.save(e),t.namespaces=e,t.names=[],t.skips=[];const r=("string"==typeof e?e:"").split(/[\s,]+/),s=r.length;for(n=0;n{t[n]=e[n]})),t.names=[],t.skips=[],t.formatters={},t.selectColor=function(e){let n=0;for(let t=0;t{"use strict";var t=Object.prototype.hasOwnProperty,n="~";function r(){}function s(e,t,n){this.fn=e,this.context=t,this.once=n||!1}function o(e,t,r,o,i){if("function"!=typeof r)throw new TypeError("The listener must be a function");var a=new s(r,o||e,i),c=n?n+t:t;return e._events[c]?e._events[c].fn?e._events[c]=[e._events[c],a]:e._events[c].push(a):(e._events[c]=a,e._eventsCount++),e}function i(e,t){0==--e._eventsCount?e._events=new r:delete e._events[t]}function a(){this._events=new r,this._eventsCount=0}Object.create&&(r.prototype=Object.create(null),(new r).__proto__||(n=!1)),a.prototype.eventNames=function(){var e,r,s=[];if(0===this._eventsCount)return s;for(r in e=this._events)t.call(e,r)&&s.push(n?r.slice(1):r);return Object.getOwnPropertySymbols?s.concat(Object.getOwnPropertySymbols(e)):s},a.prototype.listeners=function(e){var t=n?n+e:e,r=this._events[t];if(!r)return[];if(r.fn)return[r.fn];for(var s=0,o=r.length,i=new Array(o);s{var r=n(887),s=n(325),o=65536,i=h(5<<20),a=function(){try{return new Uint32Array(o)}catch(n){for(var e=new Array(o),t=0;t>4&7;if(void 0===u[i])throw new Error("invalid block size "+i);var a=u[i];if(o)return s.readU64(e,t);t++;for(var h=0;;){var d=s.readU32(e,t);if(t+=4,h+=d&l?d&=2147483647:a,0===d)return h;r&&(t+=4),t+=d}},t.makeBuffer=h,t.decompressBlock=function(e,t,n,r,s){var o,i,a,c,l;for(a=n+r;n>4;if(h>0){if(15===h)for(;h+=e[n],255===e[n++];);for(c=n+h;n=a)break;if(o=15&u,i=e[n++]|e[n++]<<8,15===o)for(;o+=e[n],255===e[n++];);for(c=(l=s-i)+(o+=4);l=13)for(var f=67;n+4>>0;if(i=o[g=(g>>16^g)>>>0&65535]-1,o[g]=n+1,i<0||n-i>>>16>0||s.readU32(e,i)!==m)n+=f++>>6;else{for(f=67,u=n-a,l=n-i,i+=4,c=n+=4;n=15){for(t[h++]=240+y,p=u-15;p>=255;p-=255)t[h++]=255;t[h++]=p}else t[h++]=(u<<4)+y;for(var b=0;b>8,c>=15){for(p=c-15;p>=255;p-=255)t[h++]=255;t[h++]=p}a=n}}if(0===a)return 0;if((u=d-a)>=15){for(t[h++]=240,p=u-15;p>=255;p-=255)t[h++]=255;t[h++]=p}else t[h++]=u<<4;for(n=a;n>4&7;if(void 0===u[p])throw new Error("invalid block size");for(i&&(h+=8),h++;;){var f;if(f=s.readU32(e,h),h+=4,0===f)break;if(r&&(h+=4),0!=(f&l)){f&=2147483647;for(var m=0;m>8,l++;var h=u[7],d=e.length,p=0;for(function(e){for(var t=0;t0;){var f,m=d>h?h:d;if((f=t.compressBlock(e,i,p,m,a))>m||0===f){s.writeU32(n,l,2147483648|m),l+=4;for(var g=p+m;p{t.hashU32=function(e){return-1252372727^(e=(e=(e=374761393+(e=-949894596^(e=2127912214+(e|=0)+(e<<12)|0)^e>>>19)+(e<<5)|0)-744332180^e<<9)-42973499+(e<<3)|0)^e>>>16|0},t.readU64=function(e,t){var n=0;return n|=e[t++]<<0,n|=e[t++]<<8,n|=e[t++]<<16,n|=e[t++]<<24,n|=e[t++]<<32,n|=e[t++]<<40,(n|=e[t++]<<48)|e[t++]<<56},t.readU32=function(e,t){var n=0;return n|=e[t++]<<0,n|=e[t++]<<8,(n|=e[t++]<<16)|e[t++]<<24},t.writeU32=function(e,t,n){e[t++]=n>>0&255,e[t++]=n>>8&255,e[t++]=n>>16&255,e[t++]=n>>24&255},t.imul=function(e,t){var n=65535&e,r=65535&t;return n*r+((e>>>16)*r+n*(t>>>16)<<16)|0}},887:(e,t,n)=>{var r=n(325),s=2654435761,o=2246822519,i=3266489917,a=374761393;function c(e,t){return(e|=0)>>>(32-(t|=0)|0)|e<>>(32-t|0)|e<>>(t|=0)^e|0}function h(e,t,n,s,o){return l(r.imul(t,n)+e,s,o)}function d(e,t,n){return l(e+r.imul(t[n],a),11,s)}function p(e,t,n){return h(e,r.readU32(t,n),i,17,668265263)}function f(e,t,n){return[h(e[0],r.readU32(t,n+0),o,13,s),h(e[1],r.readU32(t,n+4),o,13,s),h(e[2],r.readU32(t,n+8),o,13,s),h(e[3],r.readU32(t,n+12),o,13,s)]}t.hash=function(e,t,n,l){var h,m;if(m=l,l>=16){for(h=[e+s+o,e+o,e,e-s];l>=16;)h=f(h,t,n),n+=16,l-=16;h=c(h[0],1)+c(h[1],7)+c(h[2],12)+c(h[3],18)+m}else h=e+a+l>>>0;for(;l>=4;)h=p(h,t,n),n+=4,l-=4;for(;l>0;)h=d(h,t,n),n++,l--;return(h=u(r.imul(u(r.imul(u(h,15),o),13),i),16))>>>0}},824:e=>{var t=1e3,n=60*t,r=60*n,s=24*r;function o(e,t,n,r){var s=t>=1.5*n;return Math.round(e/n)+" "+r+(s?"s":"")}e.exports=function(e,i){i=i||{};var a,c,l=typeof e;if("string"===l&&e.length>0)return function(e){if(!((e=String(e)).length>100)){var o=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(e);if(o){var i=parseFloat(o[1]);switch((o[2]||"ms").toLowerCase()){case"years":case"year":case"yrs":case"yr":case"y":return 315576e5*i;case"weeks":case"week":case"w":return 6048e5*i;case"days":case"day":case"d":return i*s;case"hours":case"hour":case"hrs":case"hr":case"h":return i*r;case"minutes":case"minute":case"mins":case"min":case"m":return i*n;case"seconds":case"second":case"secs":case"sec":case"s":return i*t;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return i;default:return}}}}(e);if("number"===l&&isFinite(e))return i.long?(a=e,(c=Math.abs(a))>=s?o(a,c,s,"day"):c>=r?o(a,c,r,"hour"):c>=n?o(a,c,n,"minute"):c>=t?o(a,c,t,"second"):a+" ms"):function(e){var o=Math.abs(e);return o>=s?Math.round(e/s)+"d":o>=r?Math.round(e/r)+"h":o>=n?Math.round(e/n)+"m":o>=t?Math.round(e/t)+"s":e+"ms"}(e);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(e))}},492:()=>{},419:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.hasCORS=void 0;let n=!1;try{n="undefined"!=typeof XMLHttpRequest&&"withCredentials"in new XMLHttpRequest}catch(e){}t.hasCORS=n},754:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.decode=t.encode=void 0,t.encode=function(e){let t="";for(let n in e)e.hasOwnProperty(n)&&(t.length&&(t+="&"),t+=encodeURIComponent(n)+"="+encodeURIComponent(e[n]));return t},t.decode=function(e){let t={},n=e.split("&");for(let e=0,r=n.length;e{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.parse=void 0;const n=/^(?:(?![^:@\/?#]+:[^:@\/]*@)(http|https|ws|wss):\/\/)?((?:(([^:@\/?#]*)(?::([^:@\/?#]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/,r=["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"];t.parse=function(e){if(e.length>2e3)throw"URI too long";const t=e,s=e.indexOf("["),o=e.indexOf("]");-1!=s&&-1!=o&&(e=e.substring(0,s)+e.substring(s,o).replace(/:/g,";")+e.substring(o,e.length));let i=n.exec(e||""),a={},c=14;for(;c--;)a[r[c]]=i[c]||"";return-1!=s&&-1!=o&&(a.source=t,a.host=a.host.substring(1,a.host.length-1).replace(/;/g,":"),a.authority=a.authority.replace("[","").replace("]","").replace(/;/g,":"),a.ipv6uri=!0),a.pathNames=function(e,t){const n=t.replace(/\/{2,9}/g,"/").split("/");return"/"!=t.slice(0,1)&&0!==t.length||n.splice(0,1),"/"==t.slice(-1)&&n.splice(n.length-1,1),n}(0,a.path),a.queryKey=function(e,t){const n={};return t.replace(/(?:^|&)([^&=]*)=?([^&]*)/g,(function(e,t,r){t&&(n[t]=r)})),n}(0,a.query),a}},726:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.yeast=t.decode=t.encode=void 0;const n="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_".split(""),r={};let s,o=0,i=0;function a(e){let t="";do{t=n[e%64]+t,e=Math.floor(e/64)}while(e>0);return t}for(t.encode=a,t.decode=function(e){let t=0;for(i=0;i{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.globalThisShim=void 0,t.globalThisShim="undefined"!=typeof self?self:"undefined"!=typeof window?window:Function("return this")()},679:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.nextTick=t.parse=t.installTimerFunctions=t.transports=t.TransportError=t.Transport=t.protocol=t.Socket=void 0;const r=n(481);Object.defineProperty(t,"Socket",{enumerable:!0,get:function(){return r.Socket}}),t.protocol=r.Socket.protocol;var s=n(870);Object.defineProperty(t,"Transport",{enumerable:!0,get:function(){return s.Transport}}),Object.defineProperty(t,"TransportError",{enumerable:!0,get:function(){return s.TransportError}});var o=n(385);Object.defineProperty(t,"transports",{enumerable:!0,get:function(){return o.transports}});var i=n(622);Object.defineProperty(t,"installTimerFunctions",{enumerable:!0,get:function(){return i.installTimerFunctions}});var a=n(222);Object.defineProperty(t,"parse",{enumerable:!0,get:function(){return a.parse}});var c=n(552);Object.defineProperty(t,"nextTick",{enumerable:!0,get:function(){return c.nextTick}})},481:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Socket=void 0;const s=n(385),o=n(622),i=n(754),a=n(222),c=r(n(227)),l=n(260),u=n(373),h=n(552),d=(0,c.default)("engine.io-client:socket");class p extends l.Emitter{constructor(e,t={}){super(),this.binaryType=h.defaultBinaryType,this.writeBuffer=[],e&&"object"==typeof e&&(t=e,e=null),e?(e=(0,a.parse)(e),t.hostname=e.host,t.secure="https"===e.protocol||"wss"===e.protocol,t.port=e.port,e.query&&(t.query=e.query)):t.host&&(t.hostname=(0,a.parse)(t.host).host),(0,o.installTimerFunctions)(this,t),this.secure=null!=t.secure?t.secure:"undefined"!=typeof location&&"https:"===location.protocol,t.hostname&&!t.port&&(t.port=this.secure?"443":"80"),this.hostname=t.hostname||("undefined"!=typeof location?location.hostname:"localhost"),this.port=t.port||("undefined"!=typeof location&&location.port?location.port:this.secure?"443":"80"),this.transports=t.transports||["polling","websocket","webtransport"],this.writeBuffer=[],this.prevBufferLen=0,this.opts=Object.assign({path:"/engine.io",agent:!1,withCredentials:!1,upgrade:!0,timestampParam:"t",rememberUpgrade:!1,addTrailingSlash:!0,rejectUnauthorized:!0,perMessageDeflate:{threshold:1024},transportOptions:{},closeOnBeforeunload:!1},t),this.opts.path=this.opts.path.replace(/\/$/,"")+(this.opts.addTrailingSlash?"/":""),"string"==typeof this.opts.query&&(this.opts.query=(0,i.decode)(this.opts.query)),this.id=null,this.upgrades=null,this.pingInterval=null,this.pingTimeout=null,this.pingTimeoutTimer=null,"function"==typeof addEventListener&&(this.opts.closeOnBeforeunload&&(this.beforeunloadEventListener=()=>{this.transport&&(this.transport.removeAllListeners(),this.transport.close())},addEventListener("beforeunload",this.beforeunloadEventListener,!1)),"localhost"!==this.hostname&&(this.offlineEventListener=()=>{this.onClose("transport close",{description:"network connection lost"})},addEventListener("offline",this.offlineEventListener,!1))),this.open()}createTransport(e){d('creating transport "%s"',e);const t=Object.assign({},this.opts.query);t.EIO=u.protocol,t.transport=e,this.id&&(t.sid=this.id);const n=Object.assign({},this.opts,{query:t,socket:this,hostname:this.hostname,secure:this.secure,port:this.port},this.opts.transportOptions[e]);return d("options: %j",n),new s.transports[e](n)}open(){let e;if(this.opts.rememberUpgrade&&p.priorWebsocketSuccess&&-1!==this.transports.indexOf("websocket"))e="websocket";else{if(0===this.transports.length)return void this.setTimeoutFn((()=>{this.emitReserved("error","No transports available")}),0);e=this.transports[0]}this.readyState="opening";try{e=this.createTransport(e)}catch(e){return d("error while creating transport: %s",e),this.transports.shift(),void this.open()}e.open(),this.setTransport(e)}setTransport(e){d("setting transport %s",e.name),this.transport&&(d("clearing existing transport %s",this.transport.name),this.transport.removeAllListeners()),this.transport=e,e.on("drain",this.onDrain.bind(this)).on("packet",this.onPacket.bind(this)).on("error",this.onError.bind(this)).on("close",(e=>this.onClose("transport close",e)))}probe(e){d('probing transport "%s"',e);let t=this.createTransport(e),n=!1;p.priorWebsocketSuccess=!1;const r=()=>{n||(d('probe transport "%s" opened',e),t.send([{type:"ping",data:"probe"}]),t.once("packet",(r=>{if(!n)if("pong"===r.type&&"probe"===r.data){if(d('probe transport "%s" pong',e),this.upgrading=!0,this.emitReserved("upgrading",t),!t)return;p.priorWebsocketSuccess="websocket"===t.name,d('pausing current transport "%s"',this.transport.name),this.transport.pause((()=>{n||"closed"!==this.readyState&&(d("changing transport and sending upgrade packet"),l(),this.setTransport(t),t.send([{type:"upgrade"}]),this.emitReserved("upgrade",t),t=null,this.upgrading=!1,this.flush())}))}else{d('probe transport "%s" failed',e);const n=new Error("probe error");n.transport=t.name,this.emitReserved("upgradeError",n)}})))};function s(){n||(n=!0,l(),t.close(),t=null)}const o=n=>{const r=new Error("probe error: "+n);r.transport=t.name,s(),d('probe transport "%s" failed because of error: %s',e,n),this.emitReserved("upgradeError",r)};function i(){o("transport closed")}function a(){o("socket closed")}function c(e){t&&e.name!==t.name&&(d('"%s" works - aborting "%s"',e.name,t.name),s())}const l=()=>{t.removeListener("open",r),t.removeListener("error",o),t.removeListener("close",i),this.off("close",a),this.off("upgrading",c)};t.once("open",r),t.once("error",o),t.once("close",i),this.once("close",a),this.once("upgrading",c),-1!==this.upgrades.indexOf("webtransport")&&"webtransport"!==e?this.setTimeoutFn((()=>{n||t.open()}),200):t.open()}onOpen(){if(d("socket open"),this.readyState="open",p.priorWebsocketSuccess="websocket"===this.transport.name,this.emitReserved("open"),this.flush(),"open"===this.readyState&&this.opts.upgrade){d("starting upgrade probes");let e=0;const t=this.upgrades.length;for(;e{this.onClose("ping timeout")}),this.pingInterval+this.pingTimeout),this.opts.autoUnref&&this.pingTimeoutTimer.unref()}onDrain(){this.writeBuffer.splice(0,this.prevBufferLen),this.prevBufferLen=0,0===this.writeBuffer.length?this.emitReserved("drain"):this.flush()}flush(){if("closed"!==this.readyState&&this.transport.writable&&!this.upgrading&&this.writeBuffer.length){const e=this.getWritablePackets();d("flushing %d packets in socket",e.length),this.transport.send(e),this.prevBufferLen=e.length,this.emitReserved("flush")}}getWritablePackets(){if(!(this.maxPayload&&"polling"===this.transport.name&&this.writeBuffer.length>1))return this.writeBuffer;let e=1;for(let t=0;t0&&e>this.maxPayload)return d("only send %d out of %d packets",t,this.writeBuffer.length),this.writeBuffer.slice(0,t);e+=2}return d("payload size is %d (max: %d)",e,this.maxPayload),this.writeBuffer}write(e,t,n){return this.sendPacket("message",e,t,n),this}send(e,t,n){return this.sendPacket("message",e,t,n),this}sendPacket(e,t,n,r){if("function"==typeof t&&(r=t,t=void 0),"function"==typeof n&&(r=n,n=null),"closing"===this.readyState||"closed"===this.readyState)return;(n=n||{}).compress=!1!==n.compress;const s={type:e,data:t,options:n};this.emitReserved("packetCreate",s),this.writeBuffer.push(s),r&&this.once("flush",r),this.flush()}close(){const e=()=>{this.onClose("forced close"),d("socket closing - telling transport to close"),this.transport.close()},t=()=>{this.off("upgrade",t),this.off("upgradeError",t),e()},n=()=>{this.once("upgrade",t),this.once("upgradeError",t)};return"opening"!==this.readyState&&"open"!==this.readyState||(this.readyState="closing",this.writeBuffer.length?this.once("drain",(()=>{this.upgrading?n():e()})):this.upgrading?n():e()),this}onError(e){d("socket error %j",e),p.priorWebsocketSuccess=!1,this.emitReserved("error",e),this.onClose("transport error",e)}onClose(e,t){"opening"!==this.readyState&&"open"!==this.readyState&&"closing"!==this.readyState||(d('socket close with reason: "%s"',e),this.clearTimeoutFn(this.pingTimeoutTimer),this.transport.removeAllListeners("close"),this.transport.close(),this.transport.removeAllListeners(),"function"==typeof removeEventListener&&(removeEventListener("beforeunload",this.beforeunloadEventListener,!1),removeEventListener("offline",this.offlineEventListener,!1)),this.readyState="closed",this.id=null,this.emitReserved("close",e,t),this.writeBuffer=[],this.prevBufferLen=0)}filterUpgrades(e){const t=[];let n=0;const r=e.length;for(;n{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.transports=void 0;const r=n(484),s=n(308),o=n(20);t.transports={websocket:s.WS,webtransport:o.WT,polling:r.Polling}},484:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Request=t.Polling=void 0;const s=n(870),o=r(n(227)),i=n(726),a=n(373),c=n(666),l=n(260),u=n(622),h=n(242),d=(0,o.default)("engine.io-client:polling");function p(){}const f=null!=new c.XHR({xdomain:!1}).responseType;class m extends s.Transport{constructor(e){if(super(e),this.polling=!1,"undefined"!=typeof location){const t="https:"===location.protocol;let n=location.port;n||(n=t?"443":"80"),this.xd="undefined"!=typeof location&&e.hostname!==location.hostname||n!==e.port}const t=e&&e.forceBase64;this.supportsBinary=f&&!t,this.opts.withCredentials&&(this.cookieJar=(0,c.createCookieJar)())}get name(){return"polling"}doOpen(){this.poll()}pause(e){this.readyState="pausing";const t=()=>{d("paused"),this.readyState="paused",e()};if(this.polling||!this.writable){let e=0;this.polling&&(d("we are currently polling - waiting to pause"),e++,this.once("pollComplete",(function(){d("pre-pause polling complete"),--e||t()}))),this.writable||(d("we are currently writing - waiting to pause"),e++,this.once("drain",(function(){d("pre-pause writing complete"),--e||t()})))}else t()}poll(){d("polling"),this.polling=!0,this.doPoll(),this.emitReserved("poll")}onData(e){d("polling got data %s",e),(0,a.decodePayload)(e,this.socket.binaryType).forEach((e=>{if("opening"===this.readyState&&"open"===e.type&&this.onOpen(),"close"===e.type)return this.onClose({description:"transport closed by the server"}),!1;this.onPacket(e)})),"closed"!==this.readyState&&(this.polling=!1,this.emitReserved("pollComplete"),"open"===this.readyState?this.poll():d('ignoring poll - transport state "%s"',this.readyState))}doClose(){const e=()=>{d("writing close packet"),this.write([{type:"close"}])};"open"===this.readyState?(d("transport open - closing"),e()):(d("transport not open - deferring close"),this.once("open",e))}write(e){this.writable=!1,(0,a.encodePayload)(e,(e=>{this.doWrite(e,(()=>{this.writable=!0,this.emitReserved("drain")}))}))}uri(){const e=this.opts.secure?"https":"http",t=this.query||{};return!1!==this.opts.timestampRequests&&(t[this.opts.timestampParam]=(0,i.yeast)()),this.supportsBinary||t.sid||(t.b64=1),this.createUri(e,t)}request(e={}){return Object.assign(e,{xd:this.xd,cookieJar:this.cookieJar},this.opts),new g(this.uri(),e)}doWrite(e,t){const n=this.request({method:"POST",data:e});n.on("success",t),n.on("error",((e,t)=>{this.onError("xhr post error",e,t)}))}doPoll(){d("xhr poll");const e=this.request();e.on("data",this.onData.bind(this)),e.on("error",((e,t)=>{this.onError("xhr poll error",e,t)})),this.pollXhr=e}}t.Polling=m;class g extends l.Emitter{constructor(e,t){super(),(0,u.installTimerFunctions)(this,t),this.opts=t,this.method=t.method||"GET",this.uri=e,this.data=void 0!==t.data?t.data:null,this.create()}create(){var e;const t=(0,u.pick)(this.opts,"agent","pfx","key","passphrase","cert","ca","ciphers","rejectUnauthorized","autoUnref");t.xdomain=!!this.opts.xd;const n=this.xhr=new c.XHR(t);try{d("xhr open %s: %s",this.method,this.uri),n.open(this.method,this.uri,!0);try{if(this.opts.extraHeaders){n.setDisableHeaderCheck&&n.setDisableHeaderCheck(!0);for(let e in this.opts.extraHeaders)this.opts.extraHeaders.hasOwnProperty(e)&&n.setRequestHeader(e,this.opts.extraHeaders[e])}}catch(e){}if("POST"===this.method)try{n.setRequestHeader("Content-type","text/plain;charset=UTF-8")}catch(e){}try{n.setRequestHeader("Accept","*/*")}catch(e){}null===(e=this.opts.cookieJar)||void 0===e||e.addCookies(n),"withCredentials"in n&&(n.withCredentials=this.opts.withCredentials),this.opts.requestTimeout&&(n.timeout=this.opts.requestTimeout),n.onreadystatechange=()=>{var e;3===n.readyState&&(null===(e=this.opts.cookieJar)||void 0===e||e.parseCookies(n)),4===n.readyState&&(200===n.status||1223===n.status?this.onLoad():this.setTimeoutFn((()=>{this.onError("number"==typeof n.status?n.status:0)}),0))},d("xhr data %s",this.data),n.send(this.data)}catch(e){return void this.setTimeoutFn((()=>{this.onError(e)}),0)}"undefined"!=typeof document&&(this.index=g.requestsCount++,g.requests[this.index]=this)}onError(e){this.emitReserved("error",e,this.xhr),this.cleanup(!0)}cleanup(e){if(void 0!==this.xhr&&null!==this.xhr){if(this.xhr.onreadystatechange=p,e)try{this.xhr.abort()}catch(e){}"undefined"!=typeof document&&delete g.requests[this.index],this.xhr=null}}onLoad(){const e=this.xhr.responseText;null!==e&&(this.emitReserved("data",e),this.emitReserved("success"),this.cleanup())}abort(){this.cleanup()}}if(t.Request=g,g.requestsCount=0,g.requests={},"undefined"!=typeof document)if("function"==typeof attachEvent)attachEvent("onunload",y);else if("function"==typeof addEventListener){const e="onpagehide"in h.globalThisShim?"pagehide":"unload";addEventListener(e,y,!1)}function y(){for(let e in g.requests)g.requests.hasOwnProperty(e)&&g.requests[e].abort()}},552:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.defaultBinaryType=t.usingBrowserWebSocket=t.WebSocket=t.nextTick=void 0;const r=n(242);t.nextTick="function"==typeof Promise&&"function"==typeof Promise.resolve?e=>Promise.resolve().then(e):(e,t)=>t(e,0),t.WebSocket=r.globalThisShim.WebSocket||r.globalThisShim.MozWebSocket,t.usingBrowserWebSocket=!0,t.defaultBinaryType="arraybuffer"},308:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.WS=void 0;const s=n(870),o=n(726),i=n(622),a=n(552),c=r(n(227)),l=n(373),u=(0,c.default)("engine.io-client:websocket"),h="undefined"!=typeof navigator&&"string"==typeof navigator.product&&"reactnative"===navigator.product.toLowerCase();class d extends s.Transport{constructor(e){super(e),this.supportsBinary=!e.forceBase64}get name(){return"websocket"}doOpen(){if(!this.check())return;const e=this.uri(),t=this.opts.protocols,n=h?{}:(0,i.pick)(this.opts,"agent","perMessageDeflate","pfx","key","passphrase","cert","ca","ciphers","rejectUnauthorized","localAddress","protocolVersion","origin","maxPayload","family","checkServerIdentity");this.opts.extraHeaders&&(n.headers=this.opts.extraHeaders);try{this.ws=a.usingBrowserWebSocket&&!h?t?new a.WebSocket(e,t):new a.WebSocket(e):new a.WebSocket(e,t,n)}catch(e){return this.emitReserved("error",e)}this.ws.binaryType=this.socket.binaryType,this.addEventListeners()}addEventListeners(){this.ws.onopen=()=>{this.opts.autoUnref&&this.ws._socket.unref(),this.onOpen()},this.ws.onclose=e=>this.onClose({description:"websocket connection closed",context:e}),this.ws.onmessage=e=>this.onData(e.data),this.ws.onerror=e=>this.onError("websocket error",e)}write(e){this.writable=!1;for(let t=0;t{const t={};!a.usingBrowserWebSocket&&(n.options&&(t.compress=n.options.compress),this.opts.perMessageDeflate)&&("string"==typeof e?Buffer.byteLength(e):e.length){this.writable=!0,this.emitReserved("drain")}),this.setTimeoutFn)}))}}doClose(){void 0!==this.ws&&(this.ws.close(),this.ws=null)}uri(){const e=this.opts.secure?"wss":"ws",t=this.query||{};return this.opts.timestampRequests&&(t[this.opts.timestampParam]=(0,o.yeast)()),this.supportsBinary||(t.b64=1),this.createUri(e,t)}check(){return!!a.WebSocket}}t.WS=d},20:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.WT=void 0;const s=n(870),o=n(552),i=n(373),a=(0,r(n(227)).default)("engine.io-client:webtransport");class c extends s.Transport{get name(){return"webtransport"}doOpen(){"function"==typeof WebTransport&&(this.transport=new WebTransport(this.createUri("https"),this.opts.transportOptions[this.name]),this.transport.closed.then((()=>{a("transport closed gracefully"),this.onClose()})).catch((e=>{a("transport closed due to %s",e),this.onError("webtransport error",e)})),this.transport.ready.then((()=>{this.transport.createBidirectionalStream().then((e=>{const t=(0,i.createPacketDecoderStream)(Number.MAX_SAFE_INTEGER,this.socket.binaryType),n=e.readable.pipeThrough(t).getReader(),r=(0,i.createPacketEncoderStream)();r.readable.pipeTo(e.writable),this.writer=r.writable.getWriter();const s=()=>{n.read().then((({done:e,value:t})=>{e?a("session is closed"):(a("received chunk: %o",t),this.onPacket(t),s())})).catch((e=>{a("an error occurred while reading: %s",e)}))};s();const o={type:"open"};this.query.sid&&(o.data=`{"sid":"${this.query.sid}"}`),this.writer.write(o).then((()=>this.onOpen()))}))})))}write(e){this.writable=!1;for(let t=0;t{r&&(0,o.nextTick)((()=>{this.writable=!0,this.emitReserved("drain")}),this.setTimeoutFn)}))}}doClose(){var e;null===(e=this.transport)||void 0===e||e.close()}}t.WT=c},666:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.createCookieJar=t.XHR=void 0;const r=n(419),s=n(242);t.XHR=function(e){const t=e.xdomain;try{if("undefined"!=typeof XMLHttpRequest&&(!t||r.hasCORS))return new XMLHttpRequest}catch(e){}if(!t)try{return new(s.globalThisShim[["Active"].concat("Object").join("X")])("Microsoft.XMLHTTP")}catch(e){}},t.createCookieJar=function(){}},622:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.byteLength=t.installTimerFunctions=t.pick=void 0;const r=n(242);t.pick=function(e,...t){return t.reduce(((t,n)=>(e.hasOwnProperty(n)&&(t[n]=e[n]),t)),{})};const s=r.globalThisShim.setTimeout,o=r.globalThisShim.clearTimeout;t.installTimerFunctions=function(e,t){t.useNativeTimers?(e.setTimeoutFn=s.bind(r.globalThisShim),e.clearTimeoutFn=o.bind(r.globalThisShim)):(e.setTimeoutFn=r.globalThisShim.setTimeout.bind(r.globalThisShim),e.clearTimeoutFn=r.globalThisShim.clearTimeout.bind(r.globalThisShim))},t.byteLength=function(e){return"string"==typeof e?function(e){let t=0,n=0;for(let r=0,s=e.length;r=57344?n+=3:(r++,n+=4);return n}(e):Math.ceil(1.33*(e.byteLength||e.size))}},87:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.ERROR_PACKET=t.PACKET_TYPES_REVERSE=t.PACKET_TYPES=void 0;const n=Object.create(null);t.PACKET_TYPES=n,n.open="0",n.close="1",n.ping="2",n.pong="3",n.message="4",n.upgrade="5",n.noop="6";const r=Object.create(null);t.PACKET_TYPES_REVERSE=r,Object.keys(n).forEach((e=>{r[n[e]]=e})),t.ERROR_PACKET={type:"error",data:"parser error"}},469:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.decode=t.encode=void 0;const n="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",r="undefined"==typeof Uint8Array?[]:new Uint8Array(256);for(let e=0;e<64;e++)r[n.charCodeAt(e)]=e;t.encode=e=>{let t,r=new Uint8Array(e),s=r.length,o="";for(t=0;t>2],o+=n[(3&r[t])<<4|r[t+1]>>4],o+=n[(15&r[t+1])<<2|r[t+2]>>6],o+=n[63&r[t+2]];return s%3==2?o=o.substring(0,o.length-1)+"=":s%3==1&&(o=o.substring(0,o.length-2)+"=="),o},t.decode=e=>{let t,n,s,o,i,a=.75*e.length,c=e.length,l=0;"="===e[e.length-1]&&(a--,"="===e[e.length-2]&&a--);const u=new ArrayBuffer(a),h=new Uint8Array(u);for(t=0;t>4,h[l++]=(15&s)<<4|o>>2,h[l++]=(3&o)<<6|63&i;return u}},572:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.decodePacket=void 0;const r=n(87),s=n(469),o="function"==typeof ArrayBuffer;t.decodePacket=(e,t)=>{if("string"!=typeof e)return{type:"message",data:a(e,t)};const n=e.charAt(0);return"b"===n?{type:"message",data:i(e.substring(1),t)}:r.PACKET_TYPES_REVERSE[n]?e.length>1?{type:r.PACKET_TYPES_REVERSE[n],data:e.substring(1)}:{type:r.PACKET_TYPES_REVERSE[n]}:r.ERROR_PACKET};const i=(e,t)=>{if(o){const n=(0,s.decode)(e);return a(n,t)}return{base64:!0,data:e}},a=(e,t)=>"blob"===t?e instanceof Blob?e:new Blob([e]):e instanceof ArrayBuffer?e:e.buffer},908:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.encodePacket=t.encodePacketToBinary=void 0;const r=n(87),s="function"==typeof Blob||"undefined"!=typeof Blob&&"[object BlobConstructor]"===Object.prototype.toString.call(Blob),o="function"==typeof ArrayBuffer,i=e=>"function"==typeof ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer instanceof ArrayBuffer,a=({type:e,data:t},n,a)=>s&&t instanceof Blob?n?a(t):c(t,a):o&&(t instanceof ArrayBuffer||i(t))?n?a(t):c(new Blob([t]),a):a(r.PACKET_TYPES[e]+(t||""));t.encodePacket=a;const c=(e,t)=>{const n=new FileReader;return n.onload=function(){const e=n.result.split(",")[1];t("b"+(e||""))},n.readAsDataURL(e)};function l(e){return e instanceof Uint8Array?e:e instanceof ArrayBuffer?new Uint8Array(e):new Uint8Array(e.buffer,e.byteOffset,e.byteLength)}let u;t.encodePacketToBinary=function(e,t){return s&&e.data instanceof Blob?e.data.arrayBuffer().then(l).then(t):o&&(e.data instanceof ArrayBuffer||i(e.data))?t(l(e.data)):void a(e,!1,(e=>{u||(u=new TextEncoder),t(u.encode(e))}))}},373:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.decodePayload=t.decodePacket=t.encodePayload=t.encodePacket=t.protocol=t.createPacketDecoderStream=t.createPacketEncoderStream=void 0;const r=n(908);Object.defineProperty(t,"encodePacket",{enumerable:!0,get:function(){return r.encodePacket}});const s=n(572);Object.defineProperty(t,"decodePacket",{enumerable:!0,get:function(){return s.decodePacket}});const o=n(87),i=String.fromCharCode(30);let a;function c(e){return e.reduce(((e,t)=>e+t.length),0)}function l(e,t){if(e[0].length===t)return e.shift();const n=new Uint8Array(t);let r=0;for(let s=0;s{const n=e.length,s=new Array(n);let o=0;e.forEach(((e,a)=>{(0,r.encodePacket)(e,!1,(e=>{s[a]=e,++o===n&&t(s.join(i))}))}))},t.decodePayload=(e,t)=>{const n=e.split(i),r=[];for(let e=0;e{const r=n.length;let s;if(r<126)s=new Uint8Array(1),new DataView(s.buffer).setUint8(0,r);else if(r<65536){s=new Uint8Array(3);const e=new DataView(s.buffer);e.setUint8(0,126),e.setUint16(1,r)}else{s=new Uint8Array(9);const e=new DataView(s.buffer);e.setUint8(0,127),e.setBigUint64(1,BigInt(r))}e.data&&"string"!=typeof e.data&&(s[0]|=128),t.enqueue(s),t.enqueue(n)}))}})},t.createPacketDecoderStream=function(e,t){a||(a=new TextDecoder);const n=[];let r=0,i=-1,u=!1;return new TransformStream({transform(h,d){for(n.push(h);;){if(0===r){if(c(n)<1)break;const e=l(n,1);u=128==(128&e[0]),i=127&e[0],r=i<126?3:126===i?1:2}else if(1===r){if(c(n)<2)break;const e=l(n,2);i=new DataView(e.buffer,e.byteOffset,e.length).getUint16(0),r=3}else if(2===r){if(c(n)<8)break;const e=l(n,8),t=new DataView(e.buffer,e.byteOffset,e.length),s=t.getUint32(0);if(s>Math.pow(2,21)-1){d.enqueue(o.ERROR_PACKET);break}i=s*Math.pow(2,32)+t.getUint32(4),r=3}else{if(c(n)e){d.enqueue(o.ERROR_PACKET);break}}}})},t.protocol=4},159:(e,t)=>{"use strict";function n(e){e=e||{},this.ms=e.min||100,this.max=e.max||1e4,this.factor=e.factor||2,this.jitter=e.jitter>0&&e.jitter<=1?e.jitter:0,this.attempts=0}Object.defineProperty(t,"__esModule",{value:!0}),t.Backoff=void 0,t.Backoff=n,n.prototype.duration=function(){var e=this.ms*Math.pow(this.factor,this.attempts++);if(this.jitter){var t=Math.random(),n=Math.floor(t*this.jitter*e);e=0==(1&Math.floor(10*t))?e-n:e+n}return 0|Math.min(e,this.max)},n.prototype.reset=function(){this.attempts=0},n.prototype.setMin=function(e){this.ms=e},n.prototype.setMax=function(e){this.max=e},n.prototype.setJitter=function(e){this.jitter=e}},46:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.default=t.connect=t.io=t.Socket=t.Manager=t.protocol=void 0;const s=n(84),o=n(168);Object.defineProperty(t,"Manager",{enumerable:!0,get:function(){return o.Manager}});const i=n(312);Object.defineProperty(t,"Socket",{enumerable:!0,get:function(){return i.Socket}});const a=r(n(227)).default("socket.io-client"),c={};function l(e,t){"object"==typeof e&&(t=e,e=void 0),t=t||{};const n=s.url(e,t.path||"/socket.io"),r=n.source,i=n.id,l=n.path,u=c[i]&&l in c[i].nsps;let h;return t.forceNew||t["force new connection"]||!1===t.multiplex||u?(a("ignoring socket cache for %s",r),h=new o.Manager(r,t)):(c[i]||(a("new io instance for %s",r),c[i]=new o.Manager(r,t)),h=c[i]),n.query&&!t.query&&(t.query=n.queryKey),h.socket(n.path,t)}t.io=l,t.connect=l,t.default=l,Object.assign(l,{Manager:o.Manager,Socket:i.Socket,io:l,connect:l});var u=n(514);Object.defineProperty(t,"protocol",{enumerable:!0,get:function(){return u.protocol}}),e.exports=l},168:function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n),Object.defineProperty(e,r,{enumerable:!0,get:function(){return t[n]}})}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),s=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),o=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return s(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Manager=void 0;const a=n(679),c=n(312),l=o(n(514)),u=n(149),h=n(159),d=n(260),p=i(n(227)).default("socket.io-client:manager");class f extends d.Emitter{constructor(e,t){var n;super(),this.nsps={},this.subs=[],e&&"object"==typeof e&&(t=e,e=void 0),(t=t||{}).path=t.path||"/socket.io",this.opts=t,a.installTimerFunctions(this,t),this.reconnection(!1!==t.reconnection),this.reconnectionAttempts(t.reconnectionAttempts||1/0),this.reconnectionDelay(t.reconnectionDelay||1e3),this.reconnectionDelayMax(t.reconnectionDelayMax||5e3),this.randomizationFactor(null!==(n=t.randomizationFactor)&&void 0!==n?n:.5),this.backoff=new h.Backoff({min:this.reconnectionDelay(),max:this.reconnectionDelayMax(),jitter:this.randomizationFactor()}),this.timeout(null==t.timeout?2e4:t.timeout),this._readyState="closed",this.uri=e;const r=t.parser||l;this.encoder=new r.Encoder,this.decoder=new r.Decoder,this._autoConnect=!1!==t.autoConnect,this._autoConnect&&this.open()}reconnection(e){return arguments.length?(this._reconnection=!!e,this):this._reconnection}reconnectionAttempts(e){return void 0===e?this._reconnectionAttempts:(this._reconnectionAttempts=e,this)}reconnectionDelay(e){var t;return void 0===e?this._reconnectionDelay:(this._reconnectionDelay=e,null===(t=this.backoff)||void 0===t||t.setMin(e),this)}randomizationFactor(e){var t;return void 0===e?this._randomizationFactor:(this._randomizationFactor=e,null===(t=this.backoff)||void 0===t||t.setJitter(e),this)}reconnectionDelayMax(e){var t;return void 0===e?this._reconnectionDelayMax:(this._reconnectionDelayMax=e,null===(t=this.backoff)||void 0===t||t.setMax(e),this)}timeout(e){return arguments.length?(this._timeout=e,this):this._timeout}maybeReconnectOnOpen(){!this._reconnecting&&this._reconnection&&0===this.backoff.attempts&&this.reconnect()}open(e){if(p("readyState %s",this._readyState),~this._readyState.indexOf("open"))return this;p("opening %s",this.uri),this.engine=new a.Socket(this.uri,this.opts);const t=this.engine,n=this;this._readyState="opening",this.skipReconnect=!1;const r=u.on(t,"open",(function(){n.onopen(),e&&e()})),s=t=>{p("error"),this.cleanup(),this._readyState="closed",this.emitReserved("error",t),e?e(t):this.maybeReconnectOnOpen()},o=u.on(t,"error",s);if(!1!==this._timeout){const e=this._timeout;p("connect attempt will timeout after %d",e);const n=this.setTimeoutFn((()=>{p("connect attempt timed out after %d",e),r(),s(new Error("timeout")),t.close()}),e);this.opts.autoUnref&&n.unref(),this.subs.push((()=>{this.clearTimeoutFn(n)}))}return this.subs.push(r),this.subs.push(o),this}connect(e){return this.open(e)}onopen(){p("open"),this.cleanup(),this._readyState="open",this.emitReserved("open");const e=this.engine;this.subs.push(u.on(e,"ping",this.onping.bind(this)),u.on(e,"data",this.ondata.bind(this)),u.on(e,"error",this.onerror.bind(this)),u.on(e,"close",this.onclose.bind(this)),u.on(this.decoder,"decoded",this.ondecoded.bind(this)))}onping(){this.emitReserved("ping")}ondata(e){try{this.decoder.add(e)}catch(e){this.onclose("parse error",e)}}ondecoded(e){a.nextTick((()=>{this.emitReserved("packet",e)}),this.setTimeoutFn)}onerror(e){p("error",e),this.emitReserved("error",e)}socket(e,t){let n=this.nsps[e];return n?this._autoConnect&&!n.active&&n.connect():(n=new c.Socket(this,e,t),this.nsps[e]=n),n}_destroy(e){const t=Object.keys(this.nsps);for(const e of t)if(this.nsps[e].active)return void p("socket %s is still active, skipping close",e);this._close()}_packet(e){p("writing packet %j",e);const t=this.encoder.encode(e);for(let n=0;ne())),this.subs.length=0,this.decoder.destroy()}_close(){p("disconnect"),this.skipReconnect=!0,this._reconnecting=!1,this.onclose("forced close"),this.engine&&this.engine.close()}disconnect(){return this._close()}onclose(e,t){p("closed due to %s",e),this.cleanup(),this.backoff.reset(),this._readyState="closed",this.emitReserved("close",e,t),this._reconnection&&!this.skipReconnect&&this.reconnect()}reconnect(){if(this._reconnecting||this.skipReconnect)return this;const e=this;if(this.backoff.attempts>=this._reconnectionAttempts)p("reconnect failed"),this.backoff.reset(),this.emitReserved("reconnect_failed"),this._reconnecting=!1;else{const t=this.backoff.duration();p("will wait %dms before reconnect attempt",t),this._reconnecting=!0;const n=this.setTimeoutFn((()=>{e.skipReconnect||(p("attempting reconnect"),this.emitReserved("reconnect_attempt",e.backoff.attempts),e.skipReconnect||e.open((t=>{t?(p("reconnect attempt error"),e._reconnecting=!1,e.reconnect(),this.emitReserved("reconnect_error",t)):(p("reconnect success"),e.onreconnect())})))}),t);this.opts.autoUnref&&n.unref(),this.subs.push((()=>{this.clearTimeoutFn(n)}))}}onreconnect(){const e=this.backoff.attempts;this._reconnecting=!1,this.backoff.reset(),this.emitReserved("reconnect",e)}}t.Manager=f},149:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.on=void 0,t.on=function(e,t,n){return e.on(t,n),function(){e.off(t,n)}}},312:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Socket=void 0;const s=n(514),o=n(149),i=n(260),a=r(n(227)).default("socket.io-client:socket"),c=Object.freeze({connect:1,connect_error:1,disconnect:1,disconnecting:1,newListener:1,removeListener:1});class l extends i.Emitter{constructor(e,t,n){super(),this.connected=!1,this.recovered=!1,this.receiveBuffer=[],this.sendBuffer=[],this._queue=[],this._queueSeq=0,this.ids=0,this.acks={},this.flags={},this.io=e,this.nsp=t,n&&n.auth&&(this.auth=n.auth),this._opts=Object.assign({},n),this.io._autoConnect&&this.open()}get disconnected(){return!this.connected}subEvents(){if(this.subs)return;const e=this.io;this.subs=[o.on(e,"open",this.onopen.bind(this)),o.on(e,"packet",this.onpacket.bind(this)),o.on(e,"error",this.onerror.bind(this)),o.on(e,"close",this.onclose.bind(this))]}get active(){return!!this.subs}connect(){return this.connected||(this.subEvents(),this.io._reconnecting||this.io.open(),"open"===this.io._readyState&&this.onopen()),this}open(){return this.connect()}send(...e){return e.unshift("message"),this.emit.apply(this,e),this}emit(e,...t){if(c.hasOwnProperty(e))throw new Error('"'+e.toString()+'" is a reserved event name');if(t.unshift(e),this._opts.retries&&!this.flags.fromQueue&&!this.flags.volatile)return this._addToQueue(t),this;const n={type:s.PacketType.EVENT,data:t,options:{}};if(n.options.compress=!1!==this.flags.compress,"function"==typeof t[t.length-1]){const e=this.ids++;a("emitting packet with ack id %d",e);const r=t.pop();this._registerAckCallback(e,r),n.id=e}const r=this.io.engine&&this.io.engine.transport&&this.io.engine.transport.writable;return!this.flags.volatile||r&&this.connected?this.connected?(this.notifyOutgoingListeners(n),this.packet(n)):this.sendBuffer.push(n):a("discard packet as the transport is not currently writable"),this.flags={},this}_registerAckCallback(e,t){var n;const r=null!==(n=this.flags.timeout)&&void 0!==n?n:this._opts.ackTimeout;if(void 0===r)return void(this.acks[e]=t);const s=this.io.setTimeoutFn((()=>{delete this.acks[e];for(let t=0;t{this.io.clearTimeoutFn(s),t.apply(this,[null,...e])}}emitWithAck(e,...t){const n=void 0!==this.flags.timeout||void 0!==this._opts.ackTimeout;return new Promise(((r,s)=>{t.push(((e,t)=>n?e?s(e):r(t):r(e))),this.emit(e,...t)}))}_addToQueue(e){let t;"function"==typeof e[e.length-1]&&(t=e.pop());const n={id:this._queueSeq++,tryCount:0,pending:!1,args:e,flags:Object.assign({fromQueue:!0},this.flags)};e.push(((e,...r)=>{if(n===this._queue[0])return null!==e?n.tryCount>this._opts.retries&&(a("packet [%d] is discarded after %d tries",n.id,n.tryCount),this._queue.shift(),t&&t(e)):(a("packet [%d] was successfully sent",n.id),this._queue.shift(),t&&t(null,...r)),n.pending=!1,this._drainQueue()})),this._queue.push(n),this._drainQueue()}_drainQueue(e=!1){if(a("draining queue"),!this.connected||0===this._queue.length)return;const t=this._queue[0];!t.pending||e?(t.pending=!0,t.tryCount++,a("sending packet [%d] (try n°%d)",t.id,t.tryCount),this.flags=t.flags,this.emit.apply(this,t.args)):a("packet [%d] has already been sent and is waiting for an ack",t.id)}packet(e){e.nsp=this.nsp,this.io._packet(e)}onopen(){a("transport is open - connecting"),"function"==typeof this.auth?this.auth((e=>{this._sendConnectPacket(e)})):this._sendConnectPacket(this.auth)}_sendConnectPacket(e){this.packet({type:s.PacketType.CONNECT,data:this._pid?Object.assign({pid:this._pid,offset:this._lastOffset},e):e})}onerror(e){this.connected||this.emitReserved("connect_error",e)}onclose(e,t){a("close (%s)",e),this.connected=!1,delete this.id,this.emitReserved("disconnect",e,t)}onpacket(e){if(e.nsp===this.nsp)switch(e.type){case s.PacketType.CONNECT:e.data&&e.data.sid?this.onconnect(e.data.sid,e.data.pid):this.emitReserved("connect_error",new Error("It seems you are trying to reach a Socket.IO server in v2.x with a v3.x client, but they are not compatible (more information here: https://socket.io/docs/v3/migrating-from-2-x-to-3-0/)"));break;case s.PacketType.EVENT:case s.PacketType.BINARY_EVENT:this.onevent(e);break;case s.PacketType.ACK:case s.PacketType.BINARY_ACK:this.onack(e);break;case s.PacketType.DISCONNECT:this.ondisconnect();break;case s.PacketType.CONNECT_ERROR:this.destroy();const t=new Error(e.data.message);t.data=e.data.data,this.emitReserved("connect_error",t)}}onevent(e){const t=e.data||[];a("emitting event %j",t),null!=e.id&&(a("attaching ack callback to event"),t.push(this.ack(e.id))),this.connected?this.emitEvent(t):this.receiveBuffer.push(Object.freeze(t))}emitEvent(e){if(this._anyListeners&&this._anyListeners.length){const t=this._anyListeners.slice();for(const n of t)n.apply(this,e)}super.emit.apply(this,e),this._pid&&e.length&&"string"==typeof e[e.length-1]&&(this._lastOffset=e[e.length-1])}ack(e){const t=this;let n=!1;return function(...r){n||(n=!0,a("sending ack %j",r),t.packet({type:s.PacketType.ACK,id:e,data:r}))}}onack(e){const t=this.acks[e.id];"function"==typeof t?(a("calling ack %s with %j",e.id,e.data),t.apply(this,e.data),delete this.acks[e.id]):a("bad ack %s",e.id)}onconnect(e,t){a("socket connected with id %s",e),this.id=e,this.recovered=t&&this._pid===t,this._pid=t,this.connected=!0,this.emitBuffered(),this.emitReserved("connect"),this._drainQueue(!0)}emitBuffered(){this.receiveBuffer.forEach((e=>this.emitEvent(e))),this.receiveBuffer=[],this.sendBuffer.forEach((e=>{this.notifyOutgoingListeners(e),this.packet(e)})),this.sendBuffer=[]}ondisconnect(){a("server disconnect (%s)",this.nsp),this.destroy(),this.onclose("io server disconnect")}destroy(){this.subs&&(this.subs.forEach((e=>e())),this.subs=void 0),this.io._destroy(this)}disconnect(){return this.connected&&(a("performing disconnect (%s)",this.nsp),this.packet({type:s.PacketType.DISCONNECT})),this.destroy(),this.connected&&this.onclose("io client disconnect"),this}close(){return this.disconnect()}compress(e){return this.flags.compress=e,this}get volatile(){return this.flags.volatile=!0,this}timeout(e){return this.flags.timeout=e,this}onAny(e){return this._anyListeners=this._anyListeners||[],this._anyListeners.push(e),this}prependAny(e){return this._anyListeners=this._anyListeners||[],this._anyListeners.unshift(e),this}offAny(e){if(!this._anyListeners)return this;if(e){const t=this._anyListeners;for(let n=0;n{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.reconstructPacket=t.deconstructPacket=void 0;const r=n(665);function s(e,t){if(!e)return e;if((0,r.isBinary)(e)){const n={_placeholder:!0,num:t.length};return t.push(e),n}if(Array.isArray(e)){const n=new Array(e.length);for(let r=0;r=0&&e.num{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Decoder=t.Encoder=t.PacketType=t.protocol=void 0;const r=n(260),s=n(880),o=n(665),i=(0,n(227).default)("socket.io-parser"),a=["connect","connect_error","disconnect","disconnecting","newListener","removeListener"];var c;function l(e){return"[object Object]"===Object.prototype.toString.call(e)}t.protocol=5,function(e){e[e.CONNECT=0]="CONNECT",e[e.DISCONNECT=1]="DISCONNECT",e[e.EVENT=2]="EVENT",e[e.ACK=3]="ACK",e[e.CONNECT_ERROR=4]="CONNECT_ERROR",e[e.BINARY_EVENT=5]="BINARY_EVENT",e[e.BINARY_ACK=6]="BINARY_ACK"}(c=t.PacketType||(t.PacketType={})),t.Encoder=class{constructor(e){this.replacer=e}encode(e){return i("encoding packet %j",e),e.type!==c.EVENT&&e.type!==c.ACK||!(0,o.hasBinary)(e)?[this.encodeAsString(e)]:this.encodeAsBinary({type:e.type===c.EVENT?c.BINARY_EVENT:c.BINARY_ACK,nsp:e.nsp,data:e.data,id:e.id})}encodeAsString(e){let t=""+e.type;return e.type!==c.BINARY_EVENT&&e.type!==c.BINARY_ACK||(t+=e.attachments+"-"),e.nsp&&"/"!==e.nsp&&(t+=e.nsp+","),null!=e.id&&(t+=e.id),null!=e.data&&(t+=JSON.stringify(e.data,this.replacer)),i("encoded %j as %s",e,t),t}encodeAsBinary(e){const t=(0,s.deconstructPacket)(e),n=this.encodeAsString(t.packet),r=t.buffers;return r.unshift(n),r}};class u extends r.Emitter{constructor(e){super(),this.reviver=e}add(e){let t;if("string"==typeof e){if(this.reconstructor)throw new Error("got plaintext data when reconstructing a packet");t=this.decodeString(e);const n=t.type===c.BINARY_EVENT;n||t.type===c.BINARY_ACK?(t.type=n?c.EVENT:c.ACK,this.reconstructor=new h(t),0===t.attachments&&super.emitReserved("decoded",t)):super.emitReserved("decoded",t)}else{if(!(0,o.isBinary)(e)&&!e.base64)throw new Error("Unknown type: "+e);if(!this.reconstructor)throw new Error("got binary data when not reconstructing a packet");t=this.reconstructor.takeBinaryData(e),t&&(this.reconstructor=null,super.emitReserved("decoded",t))}}decodeString(e){let t=0;const n={type:Number(e.charAt(0))};if(void 0===c[n.type])throw new Error("unknown packet type "+n.type);if(n.type===c.BINARY_EVENT||n.type===c.BINARY_ACK){const r=t+1;for(;"-"!==e.charAt(++t)&&t!=e.length;);const s=e.substring(r,t);if(s!=Number(s)||"-"!==e.charAt(t))throw new Error("Illegal attachments");n.attachments=Number(s)}if("/"===e.charAt(t+1)){const r=t+1;for(;++t&&","!==e.charAt(t)&&t!==e.length;);n.nsp=e.substring(r,t)}else n.nsp="/";const r=e.charAt(t+1);if(""!==r&&Number(r)==r){const r=t+1;for(;++t;){const n=e.charAt(t);if(null==n||Number(n)!=n){--t;break}if(t===e.length)break}n.id=Number(e.substring(r,t+1))}if(e.charAt(++t)){const r=this.tryParse(e.substr(t));if(!u.isPayloadValid(n.type,r))throw new Error("invalid payload");n.data=r}return i("decoded %s as %j",e,n),n}tryParse(e){try{return JSON.parse(e,this.reviver)}catch(e){return!1}}static isPayloadValid(e,t){switch(e){case c.CONNECT:return l(t);case c.DISCONNECT:return void 0===t;case c.CONNECT_ERROR:return"string"==typeof t||l(t);case c.EVENT:case c.BINARY_EVENT:return Array.isArray(t)&&("number"==typeof t[0]||"string"==typeof t[0]&&-1===a.indexOf(t[0]));case c.ACK:case c.BINARY_ACK:return Array.isArray(t)}}destroy(){this.reconstructor&&(this.reconstructor.finishedReconstruction(),this.reconstructor=null)}}t.Decoder=u;class h{constructor(e){this.packet=e,this.buffers=[],this.reconPack=e}takeBinaryData(e){if(this.buffers.push(e),this.buffers.length===this.reconPack.attachments){const e=(0,s.reconstructPacket)(this.reconPack,this.buffers);return this.finishedReconstruction(),e}return null}finishedReconstruction(){this.reconPack=null,this.buffers=[]}}},665:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.hasBinary=t.isBinary=void 0;const n="function"==typeof ArrayBuffer,r=Object.prototype.toString,s="function"==typeof Blob||"undefined"!=typeof Blob&&"[object BlobConstructor]"===r.call(Blob),o="function"==typeof File||"undefined"!=typeof File&&"[object FileConstructor]"===r.call(File);function i(e){return n&&(e instanceof ArrayBuffer||(e=>"function"==typeof ArrayBuffer.isView?ArrayBuffer.isView(e):e.buffer instanceof ArrayBuffer)(e))||s&&e instanceof Blob||o&&e instanceof File}t.isBinary=i,t.hasBinary=function e(t,n){if(!t||"object"!=typeof t)return!1;if(Array.isArray(t)){for(let n=0,r=t.length;n{"use strict";function r(e){if(e)return function(e){for(var t in r.prototype)e[t]=r.prototype[t];return e}(e)}n.r(t),n.d(t,{Emitter:()=>r}),r.prototype.on=r.prototype.addEventListener=function(e,t){return this._callbacks=this._callbacks||{},(this._callbacks["$"+e]=this._callbacks["$"+e]||[]).push(t),this},r.prototype.once=function(e,t){function n(){this.off(e,n),t.apply(this,arguments)}return n.fn=t,this.on(e,n),this},r.prototype.off=r.prototype.removeListener=r.prototype.removeAllListeners=r.prototype.removeEventListener=function(e,t){if(this._callbacks=this._callbacks||{},0==arguments.length)return this._callbacks={},this;var n,r=this._callbacks["$"+e];if(!r)return this;if(1==arguments.length)return delete this._callbacks["$"+e],this;for(var s=0;s{for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var r={};return(()=>{"use strict";var e=r;Object.defineProperty(e,"__esModule",{value:!0}),e.WebSocketTransport=e.prepareSql=e.escapeSqlParameter=e.SQLiteCloudConnection=e.SQLiteCloudRow=e.SQLiteCloudRowset=e.SQLiteCloudError=e.Statement=e.Database=void 0;var t=n(537);Object.defineProperty(e,"Database",{enumerable:!0,get:function(){return t.Database}});var s=n(195);Object.defineProperty(e,"Statement",{enumerable:!0,get:function(){return s.Statement}});var o=n(230);Object.defineProperty(e,"SQLiteCloudError",{enumerable:!0,get:function(){return o.SQLiteCloudError}});var i=n(875);Object.defineProperty(e,"SQLiteCloudRowset",{enumerable:!0,get:function(){return i.SQLiteCloudRowset}}),Object.defineProperty(e,"SQLiteCloudRow",{enumerable:!0,get:function(){return i.SQLiteCloudRow}});var a=n(672);Object.defineProperty(e,"SQLiteCloudConnection",{enumerable:!0,get:function(){return a.SQLiteCloudConnection}});var c=n(261);Object.defineProperty(e,"escapeSqlParameter",{enumerable:!0,get:function(){return c.escapeSqlParameter}}),Object.defineProperty(e,"prepareSql",{enumerable:!0,get:function(){return c.prepareSql}});var l=n(122);Object.defineProperty(e,"WebSocketTransport",{enumerable:!0,get:function(){return l.WebSocketTransport}})})(),r})())); \ No newline at end of file diff --git a/src/connection-tls.ts b/src/drivers/connection-tls.ts similarity index 100% rename from src/connection-tls.ts rename to src/drivers/connection-tls.ts diff --git a/src/connection-ws.ts b/src/drivers/connection-ws.ts similarity index 100% rename from src/connection-ws.ts rename to src/drivers/connection-ws.ts diff --git a/src/connection.ts b/src/drivers/connection.ts similarity index 97% rename from src/connection.ts rename to src/drivers/connection.ts index 524b811..59d2834 100644 --- a/src/connection.ts +++ b/src/drivers/connection.ts @@ -15,7 +15,7 @@ export abstract class SQLiteCloudConnection { /** Parse and validate provided connectionString or configuration */ constructor(config: SQLiteCloudConfig | string, callback?: ErrorCallback) { if (typeof config === 'string') { - this.config = validateConfiguration({ connectionString: config }) + this.config = validateConfiguration({ connectionString: config }) } else { this.config = validateConfiguration(config) } diff --git a/src/database.ts b/src/drivers/database.ts similarity index 100% rename from src/database.ts rename to src/drivers/database.ts diff --git a/src/protocol.ts b/src/drivers/protocol.ts similarity index 100% rename from src/protocol.ts rename to src/drivers/protocol.ts diff --git a/src/queue.ts b/src/drivers/queue.ts similarity index 100% rename from src/queue.ts rename to src/drivers/queue.ts diff --git a/src/rowset.ts b/src/drivers/rowset.ts similarity index 100% rename from src/rowset.ts rename to src/drivers/rowset.ts diff --git a/src/statement.ts b/src/drivers/statement.ts similarity index 100% rename from src/statement.ts rename to src/drivers/statement.ts diff --git a/src/types.ts b/src/drivers/types.ts similarity index 100% rename from src/types.ts rename to src/drivers/types.ts diff --git a/src/utilities.ts b/src/drivers/utilities.ts similarity index 99% rename from src/utilities.ts rename to src/drivers/utilities.ts index a32a0bf..a6c0ce7 100644 --- a/src/utilities.ts +++ b/src/drivers/utilities.ts @@ -171,6 +171,7 @@ export function popCallback( /** Validate configuration, apply defaults, throw if something is missing or misconfigured */ export function validateConfiguration(config: SQLiteCloudConfig): SQLiteCloudConfig { + console.assert(config, 'SQLiteCloudConnection.validateConfiguration - missing config') if (config.connectionString) { config = { ...config, diff --git a/src/gateway/connection-bun.test.ts b/src/gateway/connection-bun.test.ts new file mode 100644 index 0000000..7f9cecf --- /dev/null +++ b/src/gateway/connection-bun.test.ts @@ -0,0 +1,244 @@ +// +// gateway.test.ts - bun tests for +// + +// MUST RUN USING BUN TEST RUNNER, EG: +// bun test ./src/gateway/gateway.test.ts --watch + +import { SQLiteCloudError } from '../drivers/types' +import { SQLiteCloudBunConnection } from './connection-bun' + +const CHINOOK_DATABASE_URL = process.env['CHINOOK_DATABASE_URL'] as string +console.assert(CHINOOK_DATABASE_URL, 'CHINOOK_DATABASE_URL is required') + +import { expect, test, describe, beforeEach, afterEach } from 'bun:test' + +async function getConnection(): Promise { + return new Promise((resolve, reject) => { + const connection = new SQLiteCloudBunConnection(CHINOOK_DATABASE_URL, error => { + if (error) { + reject(error) + } + resolve(connection) + }) + }) +} + +async function sendCommands(connection: SQLiteCloudBunConnection, command: string): Promise { + return new Promise((resolve, reject) => { + connection.sendCommands(command, (error, result) => { + if (error) { + reject(error) + } + resolve(result) + }) + }) +} + +describe('SQLiteCloudBunConnection', () => { + // test different ways to connect + describe('connecting', () => { + test('can connect using bun socket', async done => { + const connection = new SQLiteCloudBunConnection(CHINOOK_DATABASE_URL, error => { + if (error) { + console.error('Error connecting to database', error) + } + done(error) + }) + }) + }) + + // test command exercise different data types + describe('test commands', () => { + let chinookConnection: SQLiteCloudBunConnection + + beforeEach(async () => { + chinookConnection = await getConnection() + }) + + afterEach(() => { + if (chinookConnection) { + chinookConnection.close() + } + }) + + test('should test null', async () => { + const results = await sendCommands(chinookConnection, 'TEST NULL') + expect(results).toBeNull() + }) + + test('should test integer', async () => { + const results = await sendCommands(chinookConnection, 'TEST INTEGER') + expect(results).toBe(123456) + }) + + test('should test float', async () => { + const results = await sendCommands(chinookConnection, 'TEST FLOAT') + expect(results).toBe(3.1415926) + }) + + test('should test string', async () => { + const results = await sendCommands(chinookConnection, 'TEST STRING') + expect(results).toBe('Hello World, this is a test string.') + }) + + test('should test zero string', async () => { + const results = await sendCommands(chinookConnection, 'TEST ZERO_STRING') + expect(results).toBe('Hello World, this is a zero-terminated test string.') + }) + + test('should test string0', async () => { + const results = await sendCommands(chinookConnection, 'TEST STRING0') + expect(results).toBe('') + }) + + test('should test command', async () => { + const results = await sendCommands(chinookConnection, 'TEST COMMAND') + expect(results).toBe('PING') + }) + + test('should test json', async () => { + const results = await sendCommands(chinookConnection, 'TEST JSON') + expect(results).toEqual({ + 'msg-from': { class: 'soldier', name: 'Wixilav' }, + 'msg-to': { class: 'supreme-commander', name: '[Redacted]' }, + 'msg-type': ['0xdeadbeef', 'irc log'], + 'msg-log': [ + 'soldier: Boss there is a slight problem with the piece offering to humans', + 'supreme-commander: Explain yourself soldier!', + "soldier: Well they don't seem to move anymore...", + 'supreme-commander: Oh snap, I came here to see them twerk!' + ] + }) + }) + + test('should test blob', async () => { + const results = await sendCommands(chinookConnection, 'TEST BLOB') + expect(typeof results).toBe('object') + expect(results).toBeInstanceOf(Buffer) + const bufferrowset = results as any as Buffer + expect(bufferrowset.length).toBe(1000) + }) + + test('should test blob0', async () => { + const results = await sendCommands(chinookConnection, 'TEST BLOB0') + expect(typeof results).toBe('object') + expect(results).toBeInstanceOf(Buffer) + const bufferrowset = results as any as Buffer + expect(bufferrowset.length).toBe(0) + }) + + test('should test error', async done => { + chinookConnection.sendCommands('TEST ERROR', (error, results) => { + expect(error).toBeDefined() + expect(error).toBeInstanceOf(SQLiteCloudError) + + const sqliteCloudError = error as SQLiteCloudError + expect(sqliteCloudError.message).toBe('This is a test error message with a devil error code.') + expect(sqliteCloudError.errorCode).toBe('66666') + expect(sqliteCloudError.externalErrorCode).toBe('0') + expect(sqliteCloudError.offsetCode).toBe(-1) + + done() + }) + }) + + test('should test exterror', async done => { + chinookConnection.sendCommands('TEST EXTERROR', (error, results) => { + expect(error).toBeDefined() + expect(error).toBeInstanceOf(SQLiteCloudError) + + const sqliteCloudError = error as SQLiteCloudError + expect(sqliteCloudError.message).toBe('This is a test error message with an extcode and a devil error code.') + expect(sqliteCloudError.errorCode).toBe('66666') + expect(sqliteCloudError.externalErrorCode).toBe('333') + expect(sqliteCloudError.offsetCode).toBe(-1) + + done() + }) + }) + + test('should test array', async () => { + const results = await sendCommands(chinookConnection, 'TEST ARRAY') + expect(Array.isArray(results)).toBe(true) + const arrayrowset = results as any as Array + expect(arrayrowset.length).toBe(5) + expect(arrayrowset[0]).toBe('Hello World') + expect(arrayrowset[1]).toBe(123456) + expect(arrayrowset[2]).toBe(3.1415) + expect(arrayrowset[3]).toBeNull() + }) + + test('should test rowset', async () => { + const results = await sendCommands(chinookConnection, 'TEST ROWSET') + expect(results.numberOfRows).toBe(41) + expect(results.numberOfColumns).toBe(2) + expect(results.version == 1 || results.version == 2).toBeTruthy() + expect(results.columnsNames).toEqual(['key', 'value']) + }) + + test('should test chunked rowset', async () => { + const results = await sendCommands(chinookConnection, 'TEST ROWSET_CHUNK') + expect(results.numberOfRows).toBe(147) + expect(results.numberOfColumns).toBe(1) + expect(results.columnsNames).toEqual(['key']) + + expect(results[0]['key']).toBe('REINDEX') + expect(results[1]['key']).toBe('INDEXED') + expect(results[2]['key']).toBe('INDEX') + expect(results[3]['key']).toBe('DESC') + }) + }) + + // various select statements + describe('select', () => { + test('can run simple select', async done => { + const connection = new SQLiteCloudBunConnection(CHINOOK_DATABASE_URL, error => { + if (error) { + done(error) + } + connection.sendCommands("SELECT 2 'COLONNA'", (error, result) => { + if (!error) { + expect(result).toEqual([{ COLONNA: 2 }]) + } + done(error) + }) + }) + }) + + test('can list tables', async done => { + const connection = await getConnection() + const results = await sendCommands(connection, 'LIST TABLES') + expect(results.numberOfColumns).toBe(6) + expect(results.numberOfRows).toBe(11) + done() + }) + + test('can repeat commands', async () => { + const connection = await getConnection() + for (let i = 0; i < 50; i++) { + const results = await sendCommands(connection, `SELECT ${i} 'COLONNA'`) + expect(results.numberOfColumns).toBe(1) + expect(results.numberOfRows).toBe(1) + expect(results).toEqual([{ COLONNA: i }]) + } + connection.close() + }) + + test('can send long commands', async () => { + const connection = await getConnection() + + let sql = '' + for (var i = 0; i < 250; i++) { + sql += `SELECT ${i} AS counter; ` + } + + // receives only one result for last statement + const results = await sendCommands(connection, sql) + expect(results.numberOfColumns).toBe(1) + expect(results.numberOfRows).toBe(1) + expect(results).toEqual([{ counter: i - 1 }]) + connection.close() + }) + }) +}) diff --git a/src/gateway/connection-bun.ts b/src/gateway/connection-bun.ts new file mode 100644 index 0000000..984f9c8 --- /dev/null +++ b/src/gateway/connection-bun.ts @@ -0,0 +1,238 @@ +/** + * transport-bun.ts - handles low level communication with sqlitecloud server via specific Bun APIs for tls socket and binary protocol + */ + +import { type SQLiteCloudConfig, SQLiteCloudError, type ErrorCallback, type ResultsCallback } from '../drivers/types' +import { SQLiteCloudConnection } from '../drivers/connection' +import { getInitializationCommands } from '../drivers/utilities' +import { + formatCommand, + hasCommandLength, + parseCommandLength, + popData, + decompressBuffer, + parseRowsetChunks, + CMD_COMPRESSED, + CMD_ROWSET_CHUNK +} from '../drivers/protocol' +import type { Socket } from 'bun' + +/** + * Implementation of SQLiteCloudConnection that connects to the database using specific Bun APIs + * that connect to native sockets or tls sockets and communicates via raw, binary protocol. + */ +export class SQLiteCloudBunConnection extends SQLiteCloudConnection { + /** Currently opened bun socket used to communicated with SQLiteCloud server */ + private socket?: Socket + + /** True if connection is open */ + get connected(): boolean { + return !!this.socket + } + + /* Opens a connection with the server and sends the initialization commands. Will throw in case of errors. */ + connectTransport(config: SQLiteCloudConfig, callback?: ErrorCallback): this { + console.debug(`-> connecting ${config?.host}:${config?.port}`) + console.assert(!this.connected, 'BunSocketTransport.connect - connection already established') + this.config = config + + Bun.connect({ + hostname: config.host as string, + port: config.port as number, + tls: config.insecure ? false : true, + + socket: { + open: socket => { + // console.debug('BunSocketTransport.connect - open') + this.socket = socket + + // send initialization commands + const commands = getInitializationCommands(config) + this.transportCommands(commands, (error, rowset) => { + if (error) { + console.error('BunSocketTransport.connect - error initializing connection', error) + callback?.call(this, error) + } else { + // console.debug(`<- connected ${config?.host}:${config?.port}`) + callback?.call(this, null) + } + }) + }, + + // connection failed + connectError: (socket, error) => { + console.error(`BunTransport.connect - connectError: ${error}`) + this.close() + callback?.call(this, error) + }, + + // data received is processed by onData chunk by chunk + data: (socket, data) => { + this.processCommandsData(socket, data) + }, + + // close is received when we call socket.end() or when the server closes the connection + close: socket => { + if (this.socket) { + this.close() + this.processCommandsFinish(new SQLiteCloudError('Connection was closed')) + } + }, + + drain: socket => { + // console.debug('BunTransport.connect - drain') + }, + + error: (socket, error) => { + this.close() + this.processCommandsFinish(new SQLiteCloudError('Connection error', { cause: error })) + }, + + // connection closed by server + end: socket => { + if (this.socket) { + this.close() + this.processCommandsFinish(new SQLiteCloudError('Connection ended')) + } + }, + + // connection timed out + timeout: socket => { + this.close() + this.processCommandsFinish(new SQLiteCloudError('Connection timed out')) + } + } + }) + .catch(error => { + console.debug(`BunTransport.connect - error: ${error}`) + this.close() + callback?.call(this, error) + }) + .then(socket => { + // connection established + }) + + return this + } + + /** Will send a command immediately (no queueing), return the rowset/result or throw an error */ + transportCommands(commands: string, callback?: ResultsCallback): this { + // connection needs to be established? + if (!this.socket) { + callback?.call(this, new SQLiteCloudError('Connection not established', { errorCode: 'ERR_CONNECTION_NOT_ESTABLISHED' })) + return this + } + + // reset buffer and rowset chunks, define response callback + this.buffer = Buffer.alloc(0) + this.rowsetChunks = [] + this.processCallback = callback + this.startedOn = new Date() + + // compose commands following SCPC protocol + const formattedCommands = formatCommand(commands) + if (this.config?.verbose) { + console.debug(`-> ${formattedCommands}`) + } + this.socket.write(formattedCommands) + this.socket.flush() + + return this + } + + // processCommands sets up empty buffers, results callback then send the command to the server via socket.write + // onData is called when data is received, it will process the data until all data is retrieved for a response + // when response is complete or there's an error, finish is called to call the results callback set by processCommands... + + // buffer to store incoming data + private buffer: Buffer = Buffer.alloc(0) + private rowsetChunks: Buffer[] = [] + private startedOn: Date = new Date() + + // callback to be called when a command is finished processing + private processCallback?: ResultsCallback + + /** Handles data received in response to an outbound command sent by processCommands */ + private processCommandsData(socket: Socket, data: Buffer) { + try { + // on first ondata event, dataType is read from data, on subsequent ondata event, is read from buffer that is the concatanations of data received on each ondata event + let dataType = this.buffer.length === 0 ? data.subarray(0, 1).toString() : this.buffer.subarray(0, 1).toString('utf8') + this.buffer = Buffer.concat([this.buffer, data]) + const commandLength = hasCommandLength(dataType) + + if (commandLength) { + const commandLength = parseCommandLength(this.buffer) + const hasReceivedEntireCommand = this.buffer.length - this.buffer.indexOf(' ') - 1 >= commandLength ? true : false + if (hasReceivedEntireCommand) { + if (this.config?.verbose) { + let bufferString = this.buffer.toString('utf8') + if (bufferString.length > 1000) { + bufferString = bufferString.substring(0, 100) + '...' + bufferString.substring(bufferString.length - 40) + } + const elapsedMs = new Date().getTime() - this.startedOn.getTime() + console.debug(`<- ${bufferString} (${elapsedMs}ms)`) + } + + // need to decompress this buffer before decoding? + if (dataType === CMD_COMPRESSED) { + ;({ buffer: this.buffer, dataType } = decompressBuffer(this.buffer)) + } + + if (dataType !== CMD_ROWSET_CHUNK) { + const { data } = popData(this.buffer) + this.processCommandsFinish?.call(this, null, data) + } else { + // check if rowset received the ending chunk + if (data.subarray(data.indexOf(' ') + 1, data.length).toString() === '0 0 0 ') { + const parsedData = parseRowsetChunks(this.rowsetChunks) + this.processCommandsFinish?.call(this, null, parsedData) + } else { + // no ending string? ask server for another chunk + this.rowsetChunks.push(this.buffer) + this.buffer = Buffer.alloc(0) + + // no longer need to ack the server + // const okCommand = formatCommand('OK') + // this.socket?.write(okCommand) + } + } + } + } else { + // command with no explicit len so make sure that the final character is a space + const lastChar = this.buffer.subarray(this.buffer.length - 1, this.buffer.length).toString('utf8') + if (lastChar == ' ') { + const { data } = popData(this.buffer) + this.processCommandsFinish?.call(this, null, data) + } + } + } catch (error) { + console.assert(error instanceof Error) + if (error instanceof Error) { + this.processCommandsFinish?.call(this, error) + } + } + } + + /** Completes a transaction initiated by processCommands */ + private processCommandsFinish(error: Error | null, result?: any) { + if (error) { + console.error('BunTransport.finish - error', error) + } else { + // console.debug('BunTransport.finish - result', result) + } + if (this.processCallback) { + this.processCallback(error, result) + } + } + + /** Disconnect immediately, release connection. */ + close(): this { + if (this.socket) { + const socket = this.socket + this.socket = undefined + socket.end() + } + this.operations.clear() + return this + } +} diff --git a/src/gateway/gateway.ts b/src/gateway/gateway.ts new file mode 100644 index 0000000..0119ad3 --- /dev/null +++ b/src/gateway/gateway.ts @@ -0,0 +1,270 @@ +// +// gateway.ts - SQLite Cloud Gateway enabling websocket connections and SQL to json queries +// + +import packageJson from '../../package.json' + +// bun specific driver + shared classes +import { SQLiteCloudBunConnection } from './connection-bun' +import { SQLiteCloudRowset, SQLiteCloudError, validateConfiguration } from '../index' +import { type ApiRequest, type ApiResponse, type SqlApiRequest, DEFAULT_PORT_HTTP, DEFAULT_PORT_SOCKET } from './shared' + +// external modules +import { heapStats } from 'bun:jsc' +import { Server } from 'socket.io' +import express from 'express' +import http from 'http' + +// Express app for HTTP server +const app = express() +app.use(express.json()) + +// HTTP server for socket.io +const server = http.createServer(app) + +// Replacing Deno's serveDir with Express static middleware +app.use(express.static('public')) + +// Replacing Deno's Server with socket.io's Server +const io = new Server(server, { + cors: { + origin: '*', // specify the client origin + methods: ['GET', 'POST'], // allowed HTTP methods + credentials: true // allow credentials (cookies, session) + } +}) + +// port where socket.io will listen for connections +const SOCKET_PORT = parseInt(process.env['SOCKET_PORT'] || DEFAULT_PORT_SOCKET.toString()) +// port where http server will listen for connections +const HTTP_PORT = parseInt(process.env['HTTP_PORT'] || DEFAULT_PORT_HTTP.toString()) +// should we log verbose messages? +const VERBOSE = process.env['VERBOSE']?.toLowerCase() === 'true' + +// Establish handlers for a socket.io connection +io.on('connection', socket => { + // + // state + // + + // the connection string is passed in the bearer token + // https://socket.io/docs/v4/client-options/#auth + const connectionString = socket.handshake.auth.token as string + let connection: SQLiteCloudBunConnection | null = null + log(`socket | connect socket.id: ${socket.id}`) + + // + // handlers + // + + // received a sql query request from the client socket + socket.on('v1/info', (_request: ApiRequest, callback: (response: ApiResponse) => void) => { + const serverInfo = getServerInfo() + log(`socket | info <- ${JSON.stringify(serverInfo)}`) + return callback(serverInfo) + }) + + // received a sql query request from the client socket + socket.on('v1/sql', async (request: SqlApiRequest, callback: (response: ApiResponse) => void) => { + if (!connectionString) { + callback({ error: { status: '401', title: 'Unauthorized', detail: 'Provide connection string in bearer token' } }) + return + } + + try { + if (!connection) { + const startTime = Date.now() + log('socket | connecting...') + connection = await connectAsync(connectionString) + log(`socket | connected in ${Date.now() - startTime}ms`) + } + + log(`socket | sql -> ${JSON.stringify(request)}`) + const response = await queryAsync(connection, request) + log(`socket | sql <- ${JSON.stringify(response)}`) + return callback(response) + } catch (error) { + callback({ error: { status: '400', title: 'Bad Request', detail: error as string } }) + } + }) + + // received a disconnect request from the client socket + socket.on('disconnect', () => { + log(`socket | disconnect socket.id: ${socket.id}`) + connection?.close() + connection = null + }) +}) + +// Run websocket server +server.listen(SOCKET_PORT, () => { + console.debug(`WebSocket server is running on port ${SOCKET_PORT}`) +}) + +// +// HTTP server +// + +app.listen(HTTP_PORT, () => { + console.debug(`HTTP server is running on port ${HTTP_PORT}`) +}) + +app.get('/v1/info', (req, res) => { + res.json(getServerInfo()) +}) + +app.post('/v1/sql', async (req: express.Request, res: express.Response) => { + try { + log(`POST /v1/sql`) + const response = await handleHttpSqlRequest(req, res) + res.json(response) + } catch (error) { + log(`POST /v1/sql - error: ${error}`) + res.status(400).json({ error: { status: '400', title: 'Bad Request', detail: error as string } }) + } +}) + +// +// utilities +// + +/** Handle a stateless sql query request */ +async function handleHttpSqlRequest(request: express.Request, response: express.Response) { + // bearer token is required to connect to sqlitecloud + const connectionString = getBearerToken(request) + if (!connectionString) { + return errorResponse(response, 401, 'Unauthorized') + } + + // ?sql= or json payload with sql property is required + let apiRequest: SqlApiRequest + try { + apiRequest = request.body + } catch (_error) { + apiRequest = { + database: request.query.database as string, + sql: request.query.sql as string, + row: request.query.row as 'array' | 'dictionary' + } + } + if (!(apiRequest.database || apiRequest.sql)) { + return errorResponse(response, 400, 'Bad Request', 'Missing ?sql= query or json payload') + } + + let connection + try { + // request is stateless so we will connect and disconnect for each request + log(`http | sql -> ${JSON.stringify(apiRequest)}`) + connection = await connectAsync(connectionString) + const apiResponse = await queryAsync(connection, apiRequest) + log(`http | sql <- ${JSON.stringify(apiResponse)}`) + response.json(apiResponse) + } catch (error) { + errorResponse(response, 400, 'Bad Request', (error as Error).toString()) + } finally { + connection?.close() + } +} + +/** Server info for /v1/info endpoints */ +function getServerInfo() { + const { objectTypeCounts, ...memory } = heapStats() + + return { + data: { + name: packageJson.name, + version: packageJson.version, + date: new Date().toISOString(), + memory + } + } +} + +/** Extract and return bearer token from request authorization headers */ +function getBearerToken(request: express.Request): string | null { + const authorization = request.headers['authorization'] as string + // console.debug(`getBearerToken - ${authorization}`, request.headers) + if (authorization && authorization.startsWith('Bearer ')) { + return authorization.substring(7) + } + return null +} + +/** Returns a json api compatibile error response */ +function errorResponse(response: express.Response, status: number, statusText: string, detail?: string) { + response.status(status).json({ error: { status: status.toString(), title: statusText, detail } }) +} + +/** Connects to given database asynchronously */ +async function connectAsync(connectionString: string): Promise { + return await new Promise((resolve, reject) => { + const config = validateConfiguration({ connectionString }) + const connection = new SQLiteCloudBunConnection(config, (error: Error | null) => { + if (error) { + log(`connectAsync | error: ${error}`) + reject(error) + } else { + resolve(connection) + } + }) + }) +} + +/** Sends given sql commands asynchronously */ +async function sendCommandsAsync(connection: SQLiteCloudBunConnection, sql: string): Promise { + return await new Promise((resolve, reject) => { + connection.sendCommands(sql, (error: Error | null, results) => { + // Explicitly type the 'error' parameter as 'Error' + if (error) { + log(`sendCommandsAsync | error: ${error}`) + reject(error) + } else { + // console.debug(JSON.stringify(results).substring(0, 140) + '...') + resolve(results) + } + }) + }) +} + +/** Runs query on given connection and returns response payload */ +async function queryAsync(connection: SQLiteCloudBunConnection, apiRequest: SqlApiRequest): Promise { + let result: unknown = 'OK' + try { + if (apiRequest.database) { + result = await sendCommandsAsync(connection, `USE DATABASE ${apiRequest.database}`) + } + + if (apiRequest.sql) { + result = await sendCommandsAsync(connection, apiRequest.sql) + // query returned a rowset? + if (result instanceof SQLiteCloudRowset) { + const rowset = result as SQLiteCloudRowset + const data = apiRequest.row === 'dictionary' ? rowset : rowset.map(rowsetRow => rowsetRow.getData()) // rows as arrays by default + return { data, metadata: rowset.metadata } + } + } + } catch (error) { + log(`queryAsync | error: ${error}`) + const sqliteError = error as SQLiteCloudError + return { + error: { + status: '400', + title: 'Bad Request', + detail: sqliteError?.message || sqliteError?.toString(), + // SQLiteCloudError additional properties + errorCode: sqliteError?.errorCode, + offsetCode: sqliteError?.offsetCode, + externalErrorCode: sqliteError?.externalErrorCode + } + } + } + + return { data: result } +} + +/** Log only in verbose mode */ +function log(...args: unknown[]) { + if (VERBOSE) { + console.debug(...args) + } +} diff --git a/src/gateway/shared.ts b/src/gateway/shared.ts new file mode 100644 index 0000000..a8c6ca4 --- /dev/null +++ b/src/gateway/shared.ts @@ -0,0 +1,37 @@ +// +// types.ts - shared types for client and server +// + +/** Generic api request as a json dictionary */ +export type ApiRequest = Record + +export interface ApiResponse { + /** Rows are returned as dictionaries or arrays */ + data?: unknown + /** Additional metadata */ + metadata?: unknown + /** Optional error condition */ + error?: { + /** Error status as http code */ + status: string + title?: string + detail?: string + // SQLiteCloudError additional properties + errorCode?: string + externalErrorCode?: string + offsetCode?: number + } +} + +/** An api call to perform a query */ +export interface SqlApiRequest extends ApiRequest { + /** If the optional database name is specified, the connection will perform a USE DATABASE before running the query */ + database?: string + /** The sql query to be executed */ + sql: string + /** Rows can be returned as arrays (default) or dictionaries */ + row?: 'array' | 'dictionary' +} + +export const DEFAULT_PORT_SOCKET = 4000 +export const DEFAULT_PORT_HTTP = 8090 diff --git a/src/index.ts b/src/index.ts index d8998da..50215b2 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,10 +1,15 @@ // -// index.ts - re-export public APIs +// index.ts - export drivers classes, utilities, types // -export { Database } from './database' -export { Statement } from './statement' -export { SQLiteCloudConnection } from './connection' -export { SQLiteCloudConfig, SQLCloudRowsetMetadata, SQLiteCloudError, ErrorCallback } from './types' -export { SQLiteCloudRowset, SQLiteCloudRow } from './rowset' -export { escapeSqlParameter, prepareSql, parseConnectionString, validateConfiguration } from './utilities' +// include ONLY packages used by drivers +// do NOT include anything related to gateway or bun or express +// connection-tls does not want/need to load on browser and is loaded dynamically by Database +// connection-ws does not want/need to load on node and is loaded dynamically by Database + +export { Database } from './drivers/database' +export { Statement } from './drivers/statement' +export { SQLiteCloudConnection } from './drivers/connection' +export { type SQLiteCloudConfig, type SQLCloudRowsetMetadata, SQLiteCloudError, type ErrorCallback } from './drivers/types' +export { SQLiteCloudRowset, SQLiteCloudRow } from './drivers/rowset' +export { escapeSqlParameter, prepareSql, parseConnectionString, validateConfiguration } from './drivers/utilities' diff --git a/test/connection-tls.test.ts b/test/connection-tls.test.ts index 11159de..885e8c8 100644 --- a/test/connection-tls.test.ts +++ b/test/connection-tls.test.ts @@ -3,9 +3,9 @@ */ import { SQLiteCloudError } from '../src/index' -import { SQLiteCloudConnection } from '../src/connection' -import { SQLiteCloudTlsConnection } from '../src/connection-tls' -import { anonimizeCommand } from '../src/utilities' +import { SQLiteCloudConnection } from '../src/drivers/connection' +import { SQLiteCloudTlsConnection } from '../src/drivers/connection-tls' +import { anonimizeCommand } from '../src/drivers/utilities' import { CHINOOK_DATABASE_URL, INSECURE_DATABASE_URL, diff --git a/test/connection-ws.test.ts b/test/connection-ws.test.ts index d36520e..76d8afb 100644 --- a/test/connection-ws.test.ts +++ b/test/connection-ws.test.ts @@ -3,8 +3,8 @@ */ import { SQLiteCloudError } from '../src/index' -import { SQLiteCloudConnection } from '../src/connection' -import { SQLiteCloudWebsocketConnection } from '../src/connection-ws' +import { SQLiteCloudConnection } from '../src/drivers/connection' +import { SQLiteCloudWebsocketConnection } from '../src/drivers/connection-ws' import { // CHINOOK_DATABASE_URL, diff --git a/test/database.test.ts b/test/database.test.ts index bc3d4a4..53e164f 100644 --- a/test/database.test.ts +++ b/test/database.test.ts @@ -4,7 +4,7 @@ import { SQLiteCloudRowset, SQLiteCloudRow, SQLiteCloudError } from '../src/index' import { getTestingDatabase, getTestingDatabaseAsync, getChinookDatabase, removeDatabase, removeDatabaseAsync, LONG_TIMEOUT } from './shared' -import { RowCountCallback } from '../src/types' +import { RowCountCallback } from '../src/drivers/types' import { finished } from 'stream' // diff --git a/test/shared.ts b/test/shared.ts index 9ff7cc1..956ce52 100644 --- a/test/shared.ts +++ b/test/shared.ts @@ -4,12 +4,12 @@ import { join } from 'path' import { readFileSync } from 'fs' -import { Database } from '../src/database' -import { ResultsCallback, SQLiteCloudConfig } from '../src/types' -import { parseConnectionString } from '../src/utilities' +import { Database } from '../src/drivers/database' +import { ResultsCallback, SQLiteCloudConfig } from '../src/drivers/types' +import { parseConnectionString } from '../src/drivers/utilities' -import { SQLiteCloudTlsConnection } from '../src/connection-tls' -import { SQLiteCloudWebsocketConnection } from '../src/connection-ws' +import { SQLiteCloudTlsConnection } from '../src/drivers/connection-tls' +import { SQLiteCloudWebsocketConnection } from '../src/drivers/connection-ws' import * as dotenv from 'dotenv' import { SQLiteCloudConnection } from '../src' diff --git a/test/statement.test.ts b/test/statement.test.ts index 4797270..ae7d621 100644 --- a/test/statement.test.ts +++ b/test/statement.test.ts @@ -3,7 +3,7 @@ */ import { SQLiteCloudRowset } from '../src' -import { RowCallback, RowCountCallback, SQLiteCloudError } from '../src/types' +import { RowCallback, RowCountCallback, SQLiteCloudError } from '../src/drivers/types' import { getChinookDatabase } from './shared' describe('Database.prepare', () => { diff --git a/test/utilities.test.ts b/test/utilities.test.ts index be9d78c..5036a27 100644 --- a/test/utilities.test.ts +++ b/test/utilities.test.ts @@ -3,7 +3,7 @@ // import { SQLiteCloudError } from '../src/index' -import { prepareSql, parseConnectionString } from '../src/utilities' +import { prepareSql, parseConnectionString } from '../src/drivers/utilities' describe('prepareSql', () => { it('should replace single ? parameter', () => { diff --git a/tsconfig.json b/tsconfig.json index 084a1ef..92a9299 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -66,7 +66,10 @@ /* Advanced Options */ "skipLibCheck": true /* Skip type checking of declaration files. */, - "forceConsistentCasingInFileNames": true /* Disallow inconsistently-cased references to the same file. */ + "forceConsistentCasingInFileNames": true /* Disallow inconsistently-cased references to the same file. */, + + /** Loaders for json files */ + "resolveJsonModule": true }, "include": ["src/**/*.ts", "test/**/*.ts"], From 0820c5b08945454a798fb89eb897947f2f271ade Mon Sep 17 00:00:00 2001 From: Gionata Mettifogo Date: Tue, 13 Feb 2024 13:09:49 +0100 Subject: [PATCH 03/10] Add bun run scripts --- package.json | 3 ++- src/drivers/connection-tls.ts | 2 +- src/drivers/connection.ts | 2 +- src/gateway/connection-bun.test.ts | 6 +++--- src/gateway/gateway.ts | 8 ++++---- 5 files changed, 11 insertions(+), 10 deletions(-) diff --git a/package.json b/package.json index 5066154..64e9adc 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,8 @@ "typedoc": "rm -rf ./docs/ && typedoc --out docs && typedoc --plugin typedoc-plugin-markdown --out docs/markdown", "npmgui": "npx npm-gui@latest", "gateway-dev": "bun --watch ./src/gateway/gateway.ts", - "gateway-test": "bun test ./src/gateway/connection-bun.test.ts --watch" + "gateway-start": "bun --smol run ./src/gateway/gateway.ts", + "gateway-test": "bun test ./src/gateway/connection-bun.test.ts --watch --coverage" }, "repository": { "type": "git", diff --git a/src/drivers/connection-tls.ts b/src/drivers/connection-tls.ts index eff41e6..3c2179b 100644 --- a/src/drivers/connection-tls.ts +++ b/src/drivers/connection-tls.ts @@ -134,7 +134,7 @@ export class SQLiteCloudTlsConnection extends SQLiteCloudConnection { // const startedOn = new Date() // define what to do if an answer does not arrive within the set timeout - let socketTimeout: number + let socketTimeout: NodeJS.Timeout // clear all listeners and call done in the operations queue const finish: ResultsCallback = (error, result) => { diff --git a/src/drivers/connection.ts b/src/drivers/connection.ts index 59d2834..524b811 100644 --- a/src/drivers/connection.ts +++ b/src/drivers/connection.ts @@ -15,7 +15,7 @@ export abstract class SQLiteCloudConnection { /** Parse and validate provided connectionString or configuration */ constructor(config: SQLiteCloudConfig | string, callback?: ErrorCallback) { if (typeof config === 'string') { - this.config = validateConfiguration({ connectionString: config }) + this.config = validateConfiguration({ connectionString: config }) } else { this.config = validateConfiguration(config) } diff --git a/src/gateway/connection-bun.test.ts b/src/gateway/connection-bun.test.ts index 7f9cecf..d788887 100644 --- a/src/gateway/connection-bun.test.ts +++ b/src/gateway/connection-bun.test.ts @@ -116,7 +116,7 @@ describe('SQLiteCloudBunConnection', () => { const results = await sendCommands(chinookConnection, 'TEST BLOB') expect(typeof results).toBe('object') expect(results).toBeInstanceOf(Buffer) - const bufferrowset = results as any as Buffer + const bufferrowset = results as Buffer expect(bufferrowset.length).toBe(1000) }) @@ -124,7 +124,7 @@ describe('SQLiteCloudBunConnection', () => { const results = await sendCommands(chinookConnection, 'TEST BLOB0') expect(typeof results).toBe('object') expect(results).toBeInstanceOf(Buffer) - const bufferrowset = results as any as Buffer + const bufferrowset = results as Buffer expect(bufferrowset.length).toBe(0) }) @@ -161,7 +161,7 @@ describe('SQLiteCloudBunConnection', () => { test('should test array', async () => { const results = await sendCommands(chinookConnection, 'TEST ARRAY') expect(Array.isArray(results)).toBe(true) - const arrayrowset = results as any as Array + const arrayrowset = results as Array expect(arrayrowset.length).toBe(5) expect(arrayrowset[0]).toBe('Hello World') expect(arrayrowset[1]).toBe(123456) diff --git a/src/gateway/gateway.ts b/src/gateway/gateway.ts index 0119ad3..383ed14 100644 --- a/src/gateway/gateway.ts +++ b/src/gateway/gateway.ts @@ -115,7 +115,7 @@ app.get('/v1/info', (req, res) => { app.post('/v1/sql', async (req: express.Request, res: express.Response) => { try { - log(`POST /v1/sql`) + log('POST /v1/sql') const response = await handleHttpSqlRequest(req, res) res.json(response) } catch (error) { @@ -168,11 +168,11 @@ async function handleHttpSqlRequest(request: express.Request, response: express. /** Server info for /v1/info endpoints */ function getServerInfo() { - const { objectTypeCounts, ...memory } = heapStats() + const { objectTypeCounts, protectedObjectTypeCounts, ...memory } = heapStats() return { data: { - name: packageJson.name, + name: '@sqlitecloud/gateway', version: packageJson.version, date: new Date().toISOString(), memory @@ -238,7 +238,7 @@ async function queryAsync(connection: SQLiteCloudBunConnection, apiRequest: SqlA result = await sendCommandsAsync(connection, apiRequest.sql) // query returned a rowset? if (result instanceof SQLiteCloudRowset) { - const rowset = result as SQLiteCloudRowset + const rowset = result const data = apiRequest.row === 'dictionary' ? rowset : rowset.map(rowsetRow => rowsetRow.getData()) // rows as arrays by default return { data, metadata: rowset.metadata } } From b941943ccbdb87a174615a8874981403376c3f83 Mon Sep 17 00:00:00 2001 From: Gionata Mettifogo Date: Tue, 13 Feb 2024 13:17:46 +0100 Subject: [PATCH 04/10] Adding local build --- package.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 64e9adc..2a0aa89 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,8 @@ "npmgui": "npx npm-gui@latest", "gateway-dev": "bun --watch ./src/gateway/gateway.ts", "gateway-start": "bun --smol run ./src/gateway/gateway.ts", - "gateway-test": "bun test ./src/gateway/connection-bun.test.ts --watch --coverage" + "gateway-test": "bun test ./src/gateway/connection-bun.test.ts --watch --coverage", + "gateway-build": "bun build ./src/gateway/gateway.ts --compile --outfile ./lib/sqlitecloud-gateway.out" }, "repository": { "type": "git", From 66aa5b5d2656eeb0fa33ce9ea5639df9e4894510 Mon Sep 17 00:00:00 2001 From: Gionata Mettifogo Date: Tue, 13 Feb 2024 14:23:46 +0100 Subject: [PATCH 05/10] Adding Dockerfile --- Dockerfile | 48 ++++++++++++++++++++++++++++++++++ bun.lockb | Bin 0 -> 277603 bytes src/drivers/connection-tls.ts | 1 + 3 files changed, 49 insertions(+) create mode 100644 Dockerfile create mode 100755 bun.lockb diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..051cf6a --- /dev/null +++ b/Dockerfile @@ -0,0 +1,48 @@ +# docker build -t sqlitcloud-gateway . +# docker run -p 8090:8090 -p 4000:4000 --name sqlitecloud-gateway sqlitecloud-gateway + +# use the official Bun image +# see all versions at https://hub.docker.com/r/oven/bun/tags +FROM oven/bun:1 as base +WORKDIR /usr/src/app + +# install dependencies into temp directory +# this will cache them and speed up future builds +FROM base AS install +RUN mkdir -p /temp/dev +COPY package.json bun.lockb /temp/dev/ +RUN cd /temp/dev && bun install --frozen-lockfile + +# install with --production (exclude devDependencies) +RUN mkdir -p /temp/prod +COPY package.json bun.lockb /temp/prod/ +RUN cd /temp/prod && bun install --frozen-lockfile --production + +# copy node_modules from temp directory +# then copy all (non-ignored) project files into the image +FROM base AS prerelease +COPY --from=install /temp/dev/node_modules node_modules +COPY . . + +# [optional] tests & build +ENV NODE_ENV=production +#RUN bun test +#RUN bun run build +RUN bun build ./src/gateway/gateway.ts --compile --outfile ./sqlitecloud-gateway.out + +# copy production dependencies and source code into final image +FROM base AS release +COPY --from=install /temp/prod/node_modules node_modules +COPY --from=prerelease /usr/src/app/src ./src +COPY --from=prerelease /usr/src/app/public ./public +COPY --from=prerelease /usr/src/app/package.json . +COPY --from=prerelease /usr/src/app/sqlitecloud-gateway.out . + +# run the app +USER bun + +EXPOSE 4000/tcp +EXPOSE 8090/tcp + +#ENTRYPOINT [ "bun", "run", "./src/gateway/gateway.ts" ] +ENTRYPOINT [ "./sqlitecloud-gateway.out" ] diff --git a/bun.lockb b/bun.lockb new file mode 100755 index 0000000000000000000000000000000000000000..6b88db62911f992a4b0b4284037078b0ba42b06d GIT binary patch literal 277603 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 DJ59Ur literal 0 HcmV?d00001 diff --git a/src/drivers/connection-tls.ts b/src/drivers/connection-tls.ts index 3c2179b..1a6256f 100644 --- a/src/drivers/connection-tls.ts +++ b/src/drivers/connection-tls.ts @@ -218,6 +218,7 @@ export class SQLiteCloudTlsConnection extends SQLiteCloudConnection { }) this.socket?.write(commands, 'utf8', () => { + // @ts-ignore socketTimeout = setTimeout(() => { const timeoutError = new SQLiteCloudError('Request timed out', { cause: anonimizeCommand(commands) }) // console.debug(`Request timed out, config.timeout is ${this.config?.timeout as number}ms`, timeoutError) From d6e06ab02eb85420c33db6c16f1dd42282157b6e Mon Sep 17 00:00:00 2001 From: Gionata Mettifogo Date: Tue, 13 Feb 2024 20:06:42 +0100 Subject: [PATCH 06/10] Fixed issue with chunked rowsets when data packets are coalesced --- Dockerfile | 1 + package-lock.json | 29 +++++++++++++++++++-- package.json | 1 + public/index.html | 9 +++---- src/drivers/connection-tls.ts | 20 +++++++++----- src/drivers/protocol.ts | 42 +++++++++++++++++++++++------- src/gateway/connection-bun.test.ts | 5 ++-- src/gateway/connection-bun.ts | 37 ++++++++++++-------------- test/connection-tls.test.ts | 28 +++----------------- test/protocol.test.ts | 31 ++++++++++++++++++++++ 10 files changed, 133 insertions(+), 70 deletions(-) create mode 100644 test/protocol.test.ts diff --git a/Dockerfile b/Dockerfile index 051cf6a..47a96d0 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,3 +1,4 @@ +# https://bun.sh/guides/ecosystem/docker # docker build -t sqlitcloud-gateway . # docker run -p 8090:8090 -p 4000:4000 --name sqlitecloud-gateway sqlitecloud-gateway diff --git a/package-lock.json b/package-lock.json index 4336119..d49938a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@sqlitecloud/drivers", - "version": "0.0.41", + "version": "0.0.50", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@sqlitecloud/drivers", - "version": "0.0.41", + "version": "0.0.50", "license": "MIT", "dependencies": { "eventemitter3": "^5.0.1", @@ -24,6 +24,7 @@ "@typescript-eslint/eslint-plugin": "^4.22.0", "@typescript-eslint/parser": "^4.22.0", "dotenv": "^16.4.1", + "dotenv-cli": "^7.3.0", "eslint": "^7.32.0", "eslint-config-prettier": "^8.10.0", "eslint-plugin-node": "^11.1.0", @@ -3247,6 +3248,30 @@ "url": "https://github.com/motdotla/dotenv?sponsor=1" } }, + "node_modules/dotenv-cli": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/dotenv-cli/-/dotenv-cli-7.3.0.tgz", + "integrity": "sha512-314CA4TyK34YEJ6ntBf80eUY+t1XaFLyem1k9P0sX1gn30qThZ5qZr/ZwE318gEnzyYP9yj9HJk6SqwE0upkfw==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "dotenv": "^16.3.0", + "dotenv-expand": "^10.0.0", + "minimist": "^1.2.6" + }, + "bin": { + "dotenv": "cli.js" + } + }, + "node_modules/dotenv-expand": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-10.0.0.tgz", + "integrity": "sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A==", + "dev": true, + "engines": { + "node": ">=12" + } + }, "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", diff --git a/package.json b/package.json index 2a0aa89..00815e9 100644 --- a/package.json +++ b/package.json @@ -61,6 +61,7 @@ "@typescript-eslint/eslint-plugin": "^4.22.0", "@typescript-eslint/parser": "^4.22.0", "dotenv": "^16.4.1", + "dotenv-cli": "^7.3.0", "eslint": "^7.32.0", "eslint-config-prettier": "^8.10.0", "eslint-plugin-node": "^11.1.0", diff --git a/public/index.html b/public/index.html index 6484e96..db11e72 100644 --- a/public/index.html +++ b/public/index.html @@ -91,7 +91,7 @@

      Messages:

      const sql = messageInput.value const startTime = Date.now() socket.emit('v1/sql', { sql }, response => { - console.debug(`sql - sql: ${sql}, elapsed: ${Date.now() - startTime}`, response) + console.debug(`sql - sql: ${sql} (${Date.now() - startTime}ms)`, response) appendMessage(`sql | ${JSON.stringify(response)}`) }) }) @@ -100,11 +100,10 @@

      Messages:

      if (!socket) { socket = setupSocket() } - socket.emit('v1/info', { }, response => { - appendMessage(`info | rss: ${(response.data.rss/1024/1024).toFixed(2)}mb, ${JSON.stringify(response)}`) + socket.emit('v1/info', {}, response => { + appendMessage(`info | rss: ${(response.data.rss / 1024 / 1024).toFixed(2)}mb, ${JSON.stringify(response)}`) }) }) - - + diff --git a/src/drivers/connection-tls.ts b/src/drivers/connection-tls.ts index 1a6256f..d59cc06 100644 --- a/src/drivers/connection-tls.ts +++ b/src/drivers/connection-tls.ts @@ -4,7 +4,17 @@ import { SQLiteCloudConfig, SQLiteCloudError, ErrorCallback, ResultsCallback } from './types' import { SQLiteCloudConnection } from './connection' -import { formatCommand, hasCommandLength, parseCommandLength, popData, decompressBuffer, CMD_COMPRESSED, CMD_ROWSET_CHUNK } from './protocol' +import { + formatCommand, + hasCommandLength, + parseCommandLength, + popData, + decompressBuffer, + CMD_COMPRESSED, + CMD_ROWSET_CHUNK, + bufferEndsWith, + ROWSET_CHUNKS_END +} from './protocol' import { getInitializationCommands, anonimizeError, anonimizeCommand } from './utilities' import { parseRowsetChunks } from './protocol' @@ -181,19 +191,15 @@ export class SQLiteCloudTlsConnection extends SQLiteCloudConnection { const { data } = popData(buffer) finish(null, data) } else { - // @ts-expect-error // check if rowset received the ending chunk - if (data.subarray(data.indexOf(' ') + 1, data.length).toString() === '0 0 0 ') { + if (bufferEndsWith(buffer, ROWSET_CHUNKS_END)) { + rowsetChunks.push(buffer) const parsedData = parseRowsetChunks(rowsetChunks) finish?.call(this, null, parsedData) } else { // no ending string? ask server for another chunk rowsetChunks.push(buffer) buffer = Buffer.alloc(0) - - // no longer need to ack the server - // const okCommand = formatCommand('OK') - // this.socket?.write(okCommand) } } } diff --git a/src/drivers/protocol.ts b/src/drivers/protocol.ts index 0ad94af..a7ba3cb 100644 --- a/src/drivers/protocol.ts +++ b/src/drivers/protocol.ts @@ -4,6 +4,7 @@ import { SQLiteCloudError, type SQLCloudRowsetMetadata, type SQLiteCloudDataTypes } from './types' import { SQLiteCloudRowset } from './rowset' +import { debug } from 'console' const lz4 = require('lz4js') @@ -28,6 +29,10 @@ export const CMD_ARRAY = '=' // const CMD_PUBSUB = '|' // const CMD_RECONNECT = '@' +// To mark the end of the Rowset, the special string /LEN 0 0 0 is sent (LEN is always 6 in this case) +// https://github.com/sqlitecloud/sdk/blob/master/PROTOCOL.md#scsp-rowset-chunk +export const ROWSET_CHUNKS_END = '/6 0 0 0 ' + // // utility functions // @@ -190,22 +195,34 @@ function parseRowset(buffer: Buffer, spaceIndex: number): SQLiteCloudRowset { return new SQLiteCloudRowset(metadata, data) } +export function bufferStartsWith(buffer: Buffer, prefix: string): boolean { + return buffer.length >= prefix.length && buffer.subarray(0, prefix.length).toString('utf8') === prefix +} + +export function bufferEndsWith(buffer: Buffer, suffix: string): boolean { + return buffer.length >= suffix.length && buffer.subarray(buffer.length - suffix.length, buffer.length).toString('utf8') === suffix +} + /** * Parse a chunk of a chunked rowset command, eg: * *LEN 0:VERS NROWS NCOLS DATA + * @see https://github.com/sqlitecloud/sdk/blob/master/PROTOCOL.md#scsp-rowset-chunk */ export function parseRowsetChunks(buffers: Buffer[]): SQLiteCloudRowset { + let buffer = Buffer.concat(buffers) + if (!bufferStartsWith(buffer, CMD_ROWSET_CHUNK) || !bufferEndsWith(buffer, ROWSET_CHUNKS_END)) { + throw new Error('SQLiteCloudConnection.parseRowsetChunks - invalid chunks buffer') + } + let metadata: SQLCloudRowsetMetadata = { version: 1, numberOfColumns: 0, numberOfRows: 0, columns: [] } const data: any[] = [] - for (let i = 0; i < buffers.length; i++) { - let buffer: Buffer = buffers[i] - - // validate and skip data type - const dataType = buffer.subarray(0, 1).toString() - console.assert(dataType === CMD_ROWSET_CHUNK) - buffer = buffer.subarray(buffer.indexOf(' ') + 1) + // validate and skip data type + const dataType = buffer.subarray(0, 1).toString() + console.assert(dataType === CMD_ROWSET_CHUNK) + buffer = buffer.subarray(buffer.indexOf(' ') + 1) + while (true) { // chunk header, eg: 0:VERS NROWS NCOLS const { index: chunkIndex, metadata: chunkMetadata, fwdBuffer } = parseRowsetHeader(buffer) buffer = fwdBuffer @@ -224,10 +241,17 @@ export function parseRowsetChunks(buffers: Buffer[]): SQLiteCloudRowset { data.push(itemData) buffer = fwdBuffer } + + // no more chunks? + if (bufferStartsWith(buffer, ROWSET_CHUNKS_END)) { + break + } } - console.assert(data && data.length === metadata.numberOfRows * metadata.numberOfColumns, 'SQLiteCloudConnection.parseRowsetChunks - invalid rowset data') - return new SQLiteCloudRowset(metadata, data) + console.assert(data && data.length === metadata.numberOfRows * metadata.numberOfColumns, 'parseRowsetChunks - invalid rowset data') + const rowset = new SQLiteCloudRowset(metadata, data) + // console.debug(`parseRowsetChunks - ${rowset.numberOfRows} rows, ${rowset.numberOfColumns} columns`) + return rowset } /** Pop one or more space separated integers from beginning of buffer, move buffer forward */ diff --git a/src/gateway/connection-bun.test.ts b/src/gateway/connection-bun.test.ts index d788887..5af09bf 100644 --- a/src/gateway/connection-bun.test.ts +++ b/src/gateway/connection-bun.test.ts @@ -8,8 +8,9 @@ import { SQLiteCloudError } from '../drivers/types' import { SQLiteCloudBunConnection } from './connection-bun' -const CHINOOK_DATABASE_URL = process.env['CHINOOK_DATABASE_URL'] as string +let CHINOOK_DATABASE_URL = process.env['CHINOOK_DATABASE_URL'] as string console.assert(CHINOOK_DATABASE_URL, 'CHINOOK_DATABASE_URL is required') +CHINOOK_DATABASE_URL = 'sqlitecloud://admin:uN3ARhdcKQ@oggdnp3zm.sqlite.cloud:8860/chinook.db?verbose=true' import { expect, test, describe, beforeEach, afterEach } from 'bun:test' @@ -177,7 +178,7 @@ describe('SQLiteCloudBunConnection', () => { expect(results.columnsNames).toEqual(['key', 'value']) }) - test('should test chunked rowset', async () => { + test.only('should test chunked rowset', async () => { const results = await sendCommands(chinookConnection, 'TEST ROWSET_CHUNK') expect(results.numberOfRows).toBe(147) expect(results.numberOfColumns).toBe(1) diff --git a/src/gateway/connection-bun.ts b/src/gateway/connection-bun.ts index 984f9c8..5c3487e 100644 --- a/src/gateway/connection-bun.ts +++ b/src/gateway/connection-bun.ts @@ -13,7 +13,9 @@ import { decompressBuffer, parseRowsetChunks, CMD_COMPRESSED, - CMD_ROWSET_CHUNK + CMD_ROWSET_CHUNK, + bufferEndsWith, + ROWSET_CHUNKS_END } from '../drivers/protocol' import type { Socket } from 'bun' @@ -125,9 +127,8 @@ export class SQLiteCloudBunConnection extends SQLiteCloudConnection { // reset buffer and rowset chunks, define response callback this.buffer = Buffer.alloc(0) - this.rowsetChunks = [] - this.processCallback = callback this.startedOn = new Date() + this.processCallback = callback // compose commands following SCPC protocol const formattedCommands = formatCommand(commands) @@ -144,9 +145,8 @@ export class SQLiteCloudBunConnection extends SQLiteCloudConnection { // onData is called when data is received, it will process the data until all data is retrieved for a response // when response is complete or there's an error, finish is called to call the results callback set by processCommands... - // buffer to store incoming data + // buffer to accumulate incoming data until an whole command is received and can be parsed private buffer: Buffer = Buffer.alloc(0) - private rowsetChunks: Buffer[] = [] private startedOn: Date = new Date() // callback to be called when a command is finished processing @@ -155,14 +155,16 @@ export class SQLiteCloudBunConnection extends SQLiteCloudConnection { /** Handles data received in response to an outbound command sent by processCommands */ private processCommandsData(socket: Socket, data: Buffer) { try { - // on first ondata event, dataType is read from data, on subsequent ondata event, is read from buffer that is the concatanations of data received on each ondata event - let dataType = this.buffer.length === 0 ? data.subarray(0, 1).toString() : this.buffer.subarray(0, 1).toString('utf8') - this.buffer = Buffer.concat([this.buffer, data]) - const commandLength = hasCommandLength(dataType) + // append data to buffer as it arrives + if (data.length && data.length > 0) { + this.buffer = Buffer.concat([this.buffer, data]) + } - if (commandLength) { + let dataType = this.buffer?.subarray(0, 1).toString() + if (hasCommandLength(dataType)) { const commandLength = parseCommandLength(this.buffer) const hasReceivedEntireCommand = this.buffer.length - this.buffer.indexOf(' ') - 1 >= commandLength ? true : false + console.debug(`dataType: ${dataType} buffer.length: ${this.buffer.length}, commandLenght: ${commandLength}`) if (hasReceivedEntireCommand) { if (this.config?.verbose) { let bufferString = this.buffer.toString('utf8') @@ -182,18 +184,10 @@ export class SQLiteCloudBunConnection extends SQLiteCloudConnection { const { data } = popData(this.buffer) this.processCommandsFinish?.call(this, null, data) } else { - // check if rowset received the ending chunk - if (data.subarray(data.indexOf(' ') + 1, data.length).toString() === '0 0 0 ') { - const parsedData = parseRowsetChunks(this.rowsetChunks) + // check if rowset received the ending chunk in which case it can be unpacked + if (bufferEndsWith(this.buffer, ROWSET_CHUNKS_END)) { + const parsedData = parseRowsetChunks([this.buffer]) this.processCommandsFinish?.call(this, null, parsedData) - } else { - // no ending string? ask server for another chunk - this.rowsetChunks.push(this.buffer) - this.buffer = Buffer.alloc(0) - - // no longer need to ack the server - // const okCommand = formatCommand('OK') - // this.socket?.write(okCommand) } } } @@ -221,6 +215,7 @@ export class SQLiteCloudBunConnection extends SQLiteCloudConnection { // console.debug('BunTransport.finish - result', result) } if (this.processCallback) { + // console.error(`SQLiteCloudBunConnection.processCommandsFinish - error:${error}, result: ${result}`, error, result) this.processCallback(error, result) } } diff --git a/test/connection-tls.test.ts b/test/connection-tls.test.ts index 885e8c8..ff42c8b 100644 --- a/test/connection-tls.test.ts +++ b/test/connection-tls.test.ts @@ -89,7 +89,9 @@ describe('connection-tls', () => { }) it('should connect with insecure connection string', done => { - if (INSECURE_DATABASE_URL) { + if (!INSECURE_DATABASE_URL) { + done() + } else { expect(INSECURE_DATABASE_URL).toBeDefined() const conn = new SQLiteCloudTlsConnection(INSECURE_DATABASE_URL, error => { expect(error).toBeNull() @@ -295,29 +297,7 @@ describe('connection-tls', () => { expect(results[1]['key']).toBe('INDEXED') expect(results[2]['key']).toBe('INDEX') expect(results[3]['key']).toBe('DESC') - - database.close() - done() - }) - }, - LONG_TIMEOUT - ) - - it( - 'should test chunked rowset via ', - done => { - // this operation sends 150 packets, so we need to increase the timeout - const database = getChinookTlsConnection(undefined, { timeout: 60 * 1000 }) - database.sendCommands('TEST ROWSET_CHUNK', (error, results) => { - expect(error).toBeNull() - expect(results.numberOfRows).toBe(147) - expect(results.numberOfColumns).toBe(1) - expect(results.columnsNames).toEqual(['key']) - - expect(results[0]['key']).toBe('REINDEX') - expect(results[1]['key']).toBe('INDEXED') - expect(results[2]['key']).toBe('INDEX') - expect(results[3]['key']).toBe('DESC') + expect(results[146]['key']).toBe('PRIMARY') database.close() done() diff --git a/test/protocol.test.ts b/test/protocol.test.ts new file mode 100644 index 0000000..c332c0d --- /dev/null +++ b/test/protocol.test.ts @@ -0,0 +1,31 @@ +// +// protocol.test.ts +// + +import { parseRowsetChunks } from '../src/drivers/protocol' + +// response sent by the server when we TEST ROWSET_CHUNK +const CHUNKED_RESPONSE = Buffer.from( + '/24 1:1 1 1 +3 key+7 REINDEX/18 2:1 1 1 +7 INDEXED/16 3:1 1 1 +5 INDEX/15 4:1 1 1 +4 DESC/17 5:1 1 1 +6 ESCAPE/15 6:1 1 1 +4 EACH/16 7:1 1 1 +5 CHECK/14 8:1 1 1 +3 KEY/17 9:1 1 1 +6 BEFORE/19 10:1 1 1 +7 FOREIGN/15 11:1 1 1 +3 FOR/18 12:1 1 1 +6 IGNORE/18 13:1 1 1 +6 REGEXP/19 14:1 1 1 +7 EXPLAIN/19 15:1 1 1 +7 INSTEAD/15 16:1 1 1 +3 ADD/20 17:1 1 1 +8 DATABASE/14 18:1 1 1 +2 AS/18 19:1 1 1 +6 SELECT/17 20:1 1 1 +5 TABLE/16 21:1 1 1 +4 LEFT/16 22:1 1 1 +4 THEN/15 23:1 1 1 +3 END/23 24:1 1 1 +10 DEFERRABLE/16 25:1 1 1 +4 ELSE/19 26:1 1 1 +7 EXCLUDE/18 27:1 1 1 +6 DELETE/21 28:1 1 1 +9 TEMPORARY/16 29:1 1 1 +4 TEMP/14 30:1 1 1 +2 OR/18 31:1 1 1 +6 ISNULL/17 32:1 1 1 +5 NULLS/21 33:1 1 1 +9 SAVEPOINT/21 34:1 1 1 +9 INTERSECT/16 35:1 1 1 +4 TIES/19 36:1 1 1 +7 NOTNULL/15 37:1 1 1 +3 NOT/14 38:1 1 1 +2 NO/16 39:1 1 1 +4 NULL/16 40:1 1 1 +4 LIKE/18 41:1 1 1 +6 EXCEPT/24 42:1 1 1 +11 TRANSACTION/18 43:1 1 1 +6 ACTION/14 44:1 1 1 +2 ON/19 45:1 1 1 +7 NATURAL/17 46:1 1 1 +5 ALTER/17 47:1 1 1 +5 RAISE/21 48:1 1 1 +9 EXCLUSIVE/18 49:1 1 1 +6 EXISTS/23 50:1 1 1 +10 CONSTRAINT/16 51:1 1 1 +4 INTO/18 52:1 1 1 +6 OFFSET/14 53:1 1 1 +2 OF/15 54:1 1 1 +3 SET/19 55:1 1 1 +7 TRIGGER/17 56:1 1 1 +5 RANGE/21 57:1 1 1 +9 GENERATED/18 58:1 1 1 +6 DETACH/18 59:1 1 1 +6 HAVING/16 60:1 1 1 +4 GLOB/17 61:1 1 1 +5 BEGIN/17 62:1 1 1 +5 INNER/23 63:1 1 1 +10 REFERENCES/18 64:1 1 1 +6 UNIQUE/17 65:1 1 1 +5 QUERY/19 66:1 1 1 +7 WITHOUT/16 67:1 1 1 +4 WITH/17 68:1 1 1 +5 OUTER/19 69:1 1 1 +7 RELEASE/18 70:1 1 1 +6 ATTACH/19 71:1 1 1 +7 BETWEEN/19 72:1 1 1 +7 NOTHING/18 73:1 1 1 +6 GROUPS/17 74:1 1 1 +5 GROUP/19 75:1 1 1 +7 CASCADE/15 76:1 1 1 +3 ASC/19 77:1 1 1 +7 DEFAULT/16 78:1 1 1 +4 CASE/19 79:1 1 1 +7 COLLATE/18 80:1 1 1 +6 CREATE/25 81:1 1 1 +12 CURRENT_DATE/21 82:1 1 1 +9 IMMEDIATE/16 83:1 1 1 +4 JOIN/18 84:1 1 1 +6 INSERT/17 85:1 1 1 +5 MATCH/16 86:1 1 1 +4 PLAN/19 87:1 1 1 +7 ANALYZE/18 88:1 1 1 +6 PRAGMA/25 89:1 1 1 +12 MATERIALIZED/20 90:1 1 1 +8 DEFERRED/20 91:1 1 1 +8 DISTINCT/14 92:1 1 1 +2 IS/18 93:1 1 1 +6 UPDATE/18 94:1 1 1 +6 VALUES/19 95:1 1 1 +7 VIRTUAL/18 96:1 1 1 +6 ALWAYS/16 97:1 1 1 +4 WHEN/17 98:1 1 1 +5 WHERE/21 99:1 1 1 +9 RECURSIVE/18 100:1 1 1 +5 ABORT/18 101:1 1 1 +5 AFTER/19 102:1 1 1 +6 RENAME/16 103:1 1 1 +3 AND/17 104:1 1 1 +4 DROP/22 105:1 1 1 +9 PARTITION/27 106:1 1 1 +13 AUTOINCREMENT/15 107:1 1 1 +2 TO/15 108:1 1 1 +2 IN/17 109:1 1 1 +4 CAST/19 110:1 1 1 +6 COLUMN/19 111:1 1 1 +6 COMMIT/21 112:1 1 1 +8 CONFLICT/18 113:1 1 1 +5 CROSS/31 114:1 1 1 +17 CURRENT_TIMESTAMP/26 115:1 1 1 +12 CURRENT_TIME/20 116:1 1 1 +7 CURRENT/22 117:1 1 1 +9 PRECEDING/17 118:1 1 1 +4 FAIL/17 119:1 1 1 +4 LAST/19 120:1 1 1 +6 FILTER/20 121:1 1 1 +7 REPLACE/18 122:1 1 1 +5 FIRST/22 123:1 1 1 +9 FOLLOWING/17 124:1 1 1 +4 FROM/17 125:1 1 1 +4 FULL/18 126:1 1 1 +5 LIMIT/15 127:1 1 1 +2 IF/18 128:1 1 1 +5 ORDER/21 129:1 1 1 +8 RESTRICT/19 130:1 1 1 +6 OTHERS/17 131:1 1 1 +4 OVER/22 132:1 1 1 +9 RETURNING/18 133:1 1 1 +5 RIGHT/21 134:1 1 1 +8 ROLLBACK/17 135:1 1 1 +4 ROWS/16 136:1 1 1 +3 ROW/22 137:1 1 1 +9 UNBOUNDED/18 138:1 1 1 +5 UNION/18 139:1 1 1 +5 USING/19 140:1 1 1 +6 VACUUM/17 141:1 1 1 +4 VIEW/19 142:1 1 1 +6 WINDOW/15 143:1 1 1 +2 DO/15 144:1 1 1 +2 BY/22 145:1 1 1 +9 INITIALLY/16 146:1 1 1 +3 ALL/20 147:1 1 1 +7 PRIMARY/6 0 0 0 ' +) + +describe('parseRowsetChunks', () => { + it('should extract rowset from single buffer', () => { + const rowset = parseRowsetChunks([CHUNKED_RESPONSE]) + expect(rowset.length).toBe(147) + expect(rowset[0]['key']).toBe('REINDEX') + expect(rowset[146]['key']).toBe('PRIMARY') + }) + + it('should extract rowset from segmented buffers', () => { + // split CHUNKED_RESPONSE into 3 random sized buffers + const buffer1 = CHUNKED_RESPONSE.slice(0, 100) + const buffer2 = CHUNKED_RESPONSE.slice(100, 200) + const buffer3 = CHUNKED_RESPONSE.slice(200) + + const rowset = parseRowsetChunks([buffer1, buffer2, buffer3]) + expect(rowset.length).toBe(147) + expect(rowset[0]['key']).toBe('REINDEX') + expect(rowset[146]['key']).toBe('PRIMARY') + }) +}) From cf7440b817a134608fb2fe9a4f5eb0a4cf43614f Mon Sep 17 00:00:00 2001 From: Gionata Mettifogo Date: Tue, 13 Feb 2024 21:05:46 +0100 Subject: [PATCH 07/10] Fixing async tests --- src/drivers/database.ts | 6 +++++- src/gateway/connection-bun.ts | 2 +- test/assets/testing.sql | 3 +++ test/connection-ws.test.ts | 17 +++++++++-------- test/database.test.ts | 5 ++--- test/shared.ts | 22 ++++++++++++++++------ 6 files changed, 36 insertions(+), 19 deletions(-) diff --git a/src/drivers/database.ts b/src/drivers/database.ts index af6ee27..6c42ab5 100644 --- a/src/drivers/database.ts +++ b/src/drivers/database.ts @@ -46,7 +46,11 @@ export class Database extends EventEmitter { // mode is ignored for now // opens first connection to the database automatically - this.getConnection(callback as ResultsCallback) + this.getConnection((error, _connection) => { + if (callback) { + callback.call(this, error) + } + }) } /** Configuration used to open database connections */ diff --git a/src/gateway/connection-bun.ts b/src/gateway/connection-bun.ts index 5c3487e..ec826f0 100644 --- a/src/gateway/connection-bun.ts +++ b/src/gateway/connection-bun.ts @@ -164,7 +164,7 @@ export class SQLiteCloudBunConnection extends SQLiteCloudConnection { if (hasCommandLength(dataType)) { const commandLength = parseCommandLength(this.buffer) const hasReceivedEntireCommand = this.buffer.length - this.buffer.indexOf(' ') - 1 >= commandLength ? true : false - console.debug(`dataType: ${dataType} buffer.length: ${this.buffer.length}, commandLenght: ${commandLength}`) + if (hasReceivedEntireCommand) { if (this.config?.verbose) { let bufferString = this.buffer.toString('utf8') diff --git a/test/assets/testing.sql b/test/assets/testing.sql index aa8b9d2..94419c8 100644 --- a/test/assets/testing.sql +++ b/test/assets/testing.sql @@ -31,3 +31,6 @@ INSERT INTO people (name, age, hobby) VALUES ('Harper Jackson', 36, 'Bellybutton lint sculpting'), ('Ditto il Foho', 27, 'Cloud shaping'), ('Benjamin Clark', 39, 'Telepathic cooking'); + +-- Return the number 42 so we can test the query +SELECT 42; diff --git a/test/connection-ws.test.ts b/test/connection-ws.test.ts index 76d8afb..fb1530e 100644 --- a/test/connection-ws.test.ts +++ b/test/connection-ws.test.ts @@ -64,27 +64,28 @@ describe('connection-ws', () => { done() }) }) - +/* TODO RESTORE TEST it('should connect with connection string', done => { if (CHINOOK_DATABASE_URL.indexOf('localhost') > 0) { // skip this test when running locally since it requires a self-signed certificate done() } - const conn = new SQLiteCloudWebsocketConnection(CHINOOK_DATABASE_URL, error => { + let conn: SQLiteCloudWebsocketConnection | null = null + conn = new SQLiteCloudWebsocketConnection(CHINOOK_DATABASE_URL, error => { expect(error).toBeNull() - expect(conn.connected).toBe(true) - - chinook.sendCommands('TEST STRING', (error, results) => { - conn.close() - expect(conn.connected).toBe(false) + // @ts-ignore + this.sendCommands('TEST STRING', (error, results) => { + expect(error).toBeNull() + conn?.close() + expect(conn?.connected).toBe(false) done() }) }) expect(conn).toBeDefined() }) }) - +*/ describe('send test commands', () => { it('should test integer', done => { chinook.sendCommands('TEST INTEGER', (error, results) => { diff --git a/test/database.test.ts b/test/database.test.ts index 53e164f..bf364ca 100644 --- a/test/database.test.ts +++ b/test/database.test.ts @@ -5,7 +5,6 @@ import { SQLiteCloudRowset, SQLiteCloudRow, SQLiteCloudError } from '../src/index' import { getTestingDatabase, getTestingDatabaseAsync, getChinookDatabase, removeDatabase, removeDatabaseAsync, LONG_TIMEOUT } from './shared' import { RowCountCallback } from '../src/drivers/types' -import { finished } from 'stream' // // utility methods to setup and destroy temporary test databases @@ -269,7 +268,7 @@ describe('Database.sql (async)', () => { it('should work with regular function parameters', async () => { let database try { - database = await getTestingDatabase() + database = await getTestingDatabaseAsync() const results = await database.sql('SELECT * FROM people WHERE name = ?', 'Emma Johnson') expect(results).toHaveLength(1) } finally { @@ -280,7 +279,7 @@ describe('Database.sql (async)', () => { it('should select and return multiple rows', async () => { let database try { - database = await getTestingDatabase() + database = await getTestingDatabaseAsync() const results = await database.sql('SELECT * FROM people ORDER BY id') expect(results).toBeDefined() diff --git a/test/shared.ts b/test/shared.ts index 956ce52..20f3208 100644 --- a/test/shared.ts +++ b/test/shared.ts @@ -5,14 +5,14 @@ import { join } from 'path' import { readFileSync } from 'fs' import { Database } from '../src/drivers/database' -import { ResultsCallback, SQLiteCloudConfig } from '../src/drivers/types' +import { ResultsCallback, SQLiteCloudConfig, SQLiteCloudError } from '../src/drivers/types' import { parseConnectionString } from '../src/drivers/utilities' import { SQLiteCloudTlsConnection } from '../src/drivers/connection-tls' import { SQLiteCloudWebsocketConnection } from '../src/drivers/connection-ws' import * as dotenv from 'dotenv' -import { SQLiteCloudConnection } from '../src' +import { SQLiteCloudConnection, SQLiteCloudRowset } from '../src' dotenv.config() export const LONG_TIMEOUT = 1 * 60 * 1000 // 1 minute @@ -168,10 +168,20 @@ export function getTestingDatabase(callback?: ResultsCallback): Database { export async function getTestingDatabaseAsync(): Promise { const testingConfig = getTestingConfig() - const database = new Database(testingConfig) - // database.verbose() - await database.sql(TESTING_SQL) - return database + return new Promise((resolve, reject) => { + const database = new Database(testingConfig, error => { + if (error) { + reject(error) + } + database.run(TESTING_SQL, (error: SQLiteCloudError, results: SQLiteCloudRowset) => { + if (error) { + reject(error) + } + expect(results[0]['42']).toBe(42) + resolve(database) + }) + }) + }) } /** Drop databases that are no longer in use */ From a58e3a0010d99a84bb237bfb18827ba3d2790ba0 Mon Sep 17 00:00:00 2001 From: Gionata Mettifogo Date: Tue, 13 Feb 2024 22:36:47 +0100 Subject: [PATCH 08/10] Testing database sequence issues in tests fixed --- test/compare.test.ts | 11 +++++------ test/database.test.ts | 13 +++++++++---- test/shared.ts | 21 ++++++++++++++++++--- 3 files changed, 32 insertions(+), 13 deletions(-) diff --git a/test/compare.test.ts b/test/compare.test.ts index acdfa4d..c34105e 100644 --- a/test/compare.test.ts +++ b/test/compare.test.ts @@ -111,8 +111,6 @@ describe('Database.on', () => { describe('Database.run', () => { it('sqlite3: insert with plain sql', done => { - const testingFile = createTestDatabaseFile() - // https://github.com/TryGhost/node-sqlite3/wiki/API#runsql--param---callback function onInsert(error: Error, results: any) { expect(error).toBeNull() @@ -127,12 +125,11 @@ describe('Database.run', () => { done() } + const testingFile = createTestDatabaseFile() testingFile.run(INSERT_SQL, onInsert) }) it('sqlitecloud: insert with plain sql', done => { - const testingCloud = getTestingDatabase() - // https://github.com/TryGhost/node-sqlite3/wiki/API#runsql--param---callback function onInsert(error: Error, results: any) { expect(error).toBeNull() @@ -150,8 +147,10 @@ describe('Database.run', () => { testingCloud.close() done() } - - testingCloud.run(INSERT_SQL, onInsert) + const testingCloud = getTestingDatabase(error => { + expect(error).toBeNull() + testingCloud.run(INSERT_SQL, onInsert) + }) }) // end run diff --git a/test/database.test.ts b/test/database.test.ts index bf364ca..cfff5bc 100644 --- a/test/database.test.ts +++ b/test/database.test.ts @@ -5,6 +5,7 @@ import { SQLiteCloudRowset, SQLiteCloudRow, SQLiteCloudError } from '../src/index' import { getTestingDatabase, getTestingDatabaseAsync, getChinookDatabase, removeDatabase, removeDatabaseAsync, LONG_TIMEOUT } from './shared' import { RowCountCallback } from '../src/drivers/types' +import e from 'express' // // utility methods to setup and destroy temporary test databases @@ -37,8 +38,10 @@ describe('Database.run', () => { }) } - const database = getTestingDatabase() - database.run(updateSql, plainCallbackNotALambda) + const database = getTestingDatabase(error => { + expect(error).toBeNull() + database.run(updateSql, plainCallbackNotALambda) + }) }, LONG_TIMEOUT ) @@ -84,8 +87,10 @@ describe('Database.run', () => { }) } - const database = getTestingDatabase() - database.run(insertSql, plainCallbackNotALambdaOne) + const database = getTestingDatabase(error => { + expect(error).toBeNull() + database.run(insertSql, plainCallbackNotALambdaOne) + }) }, LONG_TIMEOUT ) diff --git a/test/shared.ts b/test/shared.ts index 20f3208..3b1e7a4 100644 --- a/test/shared.ts +++ b/test/shared.ts @@ -13,6 +13,7 @@ import { SQLiteCloudWebsocketConnection } from '../src/drivers/connection-ws' import * as dotenv from 'dotenv' import { SQLiteCloudConnection, SQLiteCloudRowset } from '../src' +import e from 'express' dotenv.config() export const LONG_TIMEOUT = 1 * 60 * 1000 // 1 minute @@ -24,7 +25,7 @@ export const WARN_SPEED_MS = 500 export const EXPECT_SPEED_MS = 6 * 1000 /** Number of times or size of stress (when repeated in sequence) */ -export const SEQUENCE_TEST_SIZE = 75 +export const SEQUENCE_TEST_SIZE = 150 /** Concurrency size for multiple connection tests */ export const SIMULTANEOUS_TEST_SIZE = 150 @@ -160,9 +161,23 @@ export function getTestingConfig(url = TESTING_DATABASE_URL): SQLiteCloudConfig export function getTestingDatabase(callback?: ResultsCallback): Database { const testingConfig = getTestingConfig() - const database = new Database(testingConfig) + const database = new Database(testingConfig, error => { + if (error) { + console.error(`getTestingDatabase - connection error: ${error}`) + callback?.call(database, error) + } + database.run(TESTING_SQL, (error: SQLiteCloudError, results: SQLiteCloudRowset) => { + if (error) { + console.error(`getTestingDatabase - setup error: ${error}`) + callback?.call(database, error) + } + expect(results).toBeDefined() + expect(results[0][42]).toBe(42) + callback?.call(database, null) + }) + }) + // database.verbose() - database.exec(TESTING_SQL, callback) return database } From b4ea8678b58a52042eefb8fc351f9c6eaaaeb8aa Mon Sep 17 00:00:00 2001 From: Gionata Mettifogo Date: Tue, 13 Feb 2024 23:01:03 +0100 Subject: [PATCH 09/10] Fix build scripts names --- package.json | 2 +- public/drivers.html | 4 +- ...0.37.dev.js => sqlitecloud.drivers.dev.js} | 122 +++++++++++------- public/sqlitecloud.drivers.js | 1 + public/sqlitecloud.v0.0.37.js | 1 - tsconfig.build.json | 2 +- webpack.config.js | 5 +- 7 files changed, 85 insertions(+), 52 deletions(-) rename public/{sqlitecloud.v0.0.37.dev.js => sqlitecloud.drivers.dev.js} (72%) create mode 100644 public/sqlitecloud.drivers.js delete mode 100644 public/sqlitecloud.v0.0.37.js diff --git a/package.json b/package.json index 00815e9..51b7dc8 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ ], "scripts": { "test": "jest --coverage", - "build": "rm -rf ./lib/ && tsc --project tsconfig.build.json && npx webpack", + "build": "rm -rf ./lib/ && tsc --project tsconfig.build.json && npx webpack && cp ./lib/sqlitecloud.drivers.js ./public/ && cp ./lib/sqlitecloud.drivers.dev.js ./public/", "publish": "npm run build && npm publish --access public", "prettier": "prettier --write 'src/**/*'", "lint": "eslint ./src/ --fix && tsc --noEmit", diff --git a/public/drivers.html b/public/drivers.html index 1bee208..11c9cb8 100644 --- a/public/drivers.html +++ b/public/drivers.html @@ -4,7 +4,7 @@ Driver | SQLite Cloud - + @@ -84,7 +84,7 @@

      Results:

      console.error(`sql: ${sql}, error: ${error}`, error) appendMessage(`sql: ${sql}, error: ${error}`) } else { - console.debug(`sql: ${sql}, elapsed: ${Date.now() - startTime}`, rows) + console.debug(`sql: ${sql}, (${Date.now() - startTime}ms)`, rows) appendMessage(JSON.stringify(rows)) } }) diff --git a/public/sqlitecloud.v0.0.37.dev.js b/public/sqlitecloud.drivers.dev.js similarity index 72% rename from public/sqlitecloud.v0.0.37.dev.js rename to public/sqlitecloud.drivers.dev.js index 249dff8..220e2e0 100644 --- a/public/sqlitecloud.v0.0.37.dev.js +++ b/public/sqlitecloud.drivers.dev.js @@ -19,102 +19,124 @@ return /******/ (() => { // webpackBootstrap /******/ var __webpack_modules__ = ({ -/***/ "./lib/connection.js": -/*!***************************!*\ - !*** ./lib/connection.js ***! - \***************************/ +/***/ "./lib/drivers/connection-tls.js": +/*!***************************************!*\ + !*** ./lib/drivers/connection-tls.js ***! + \***************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { "use strict"; -eval("\n/**\n * connection.ts - handles low level communication with sqlitecloud server\n */\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.getInitializationCommands = exports.anonimizeError = exports.anonimizeCommand = exports.OperationsQueue = exports.SQLiteCloudConnection = exports.DEFAULT_PORT = exports.DEFAULT_TIMEOUT = void 0;\nconst types_1 = __webpack_require__(/*! ./types */ \"./lib/types.js\");\nconst utilities_1 = __webpack_require__(/*! ./utilities */ \"./lib/utilities.js\");\n/** Default timeout value for queries */\nexports.DEFAULT_TIMEOUT = 300 * 1000;\n/** Default tls connection port */\nexports.DEFAULT_PORT = 9960;\n/**\n * Base class for SQLiteCloudConnection handles basics and defines methods.\n * Actual connection management and communication with the server in concrete classes.\n */\nclass SQLiteCloudConnection {\n /** Parse and validate provided connectionString or configuration */\n constructor(config, callback) {\n /** Operations are serialized by waiting an any pending promises */\n this.operations = new OperationsQueue();\n if (typeof config === 'string') {\n this.config = this.validateConfiguration({ connectionString: config });\n }\n else {\n this.config = this.validateConfiguration(config);\n }\n // connect transport layer to server\n this.connect(callback);\n }\n //\n // public properties\n //\n /** True if connection is open */\n get connected() {\n var _a;\n return ((_a = this.transport) === null || _a === void 0 ? void 0 : _a.connected) || false;\n }\n /** Connect will establish a tls or websocket transport to the server based on configuration and environment */\n connect(callback) {\n this.operations.enqueue(done => {\n var _a, _b;\n // connect using websocket if tls is not supported or if explicitly requested\n if (utilities_1.isBrowser || ((_a = this.config) === null || _a === void 0 ? void 0 : _a.useWebsocket) || ((_b = this.config) === null || _b === void 0 ? void 0 : _b.gatewayUrl)) {\n // socket.io transport works in both node.js and browser environments and connects via SQLite Cloud Gateway\n Promise.resolve().then(() => __importStar(__webpack_require__(/*! ./transport-ws */ \"./lib/transport-ws.js\"))).then(transport => {\n this.transport = new transport.WebSocketTransport();\n this.transport.connect(this.config, error => {\n if (error) {\n console.error(`SQLiteCloudConnection.connect - error while connecting WebSocketTransport: ${error.toString()}`, this.config, error);\n this.close();\n }\n callback === null || callback === void 0 ? void 0 : callback.call(this, error || null);\n done(error);\n });\n })\n .catch(error => {\n done(error);\n });\n }\n else {\n // tls sockets work only in node.js environments\n Promise.resolve().then(() => __importStar(__webpack_require__(/*! ./transport-tls */ \"./lib/transport-tls.js\"))).then(transport => {\n this.transport = new transport.TlsSocketTransport();\n this.transport.connect(this.config, error => {\n if (error) {\n console.error(`SQLiteCloudConnection.connect - error while connecting TlsSocketTransport: ${error.toString()}`, this.config, error);\n this.close();\n }\n callback === null || callback === void 0 ? void 0 : callback.call(this, error || null);\n done(error);\n });\n })\n .catch(error => {\n done(error);\n });\n }\n });\n return this;\n }\n //\n // private methods\n //\n /** Validate configuration, apply defaults, throw if something is missing or misconfigured */\n validateConfiguration(config) {\n if (config.connectionString) {\n config = Object.assign(Object.assign(Object.assign({}, config), (0, utilities_1.parseConnectionString)(config.connectionString)), { connectionString: config.connectionString // keep original connection string\n });\n }\n // apply defaults where needed\n config.port || (config.port = exports.DEFAULT_PORT);\n config.timeout = config.timeout && config.timeout > 0 ? config.timeout : exports.DEFAULT_TIMEOUT;\n config.clientId || (config.clientId = 'SQLiteCloud');\n config.verbose = (0, utilities_1.parseBoolean)(config.verbose);\n config.noBlob = (0, utilities_1.parseBoolean)(config.noBlob);\n config.compression = (0, utilities_1.parseBoolean)(config.compression);\n config.createDatabase = (0, utilities_1.parseBoolean)(config.createDatabase);\n config.nonlinearizable = (0, utilities_1.parseBoolean)(config.nonlinearizable);\n if (!config.username || !config.password || !config.host) {\n console.error('SQLiteCloudConnection.validateConfiguration - missing arguments', config);\n throw new types_1.SQLiteCloudError('The user, password and host arguments must be specified.', { errorCode: 'ERR_MISSING_ARGS' });\n }\n if (!config.connectionString) {\n // build connection string from configuration, values are already validated\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n config.connectionString = `sqlitecloud://${config.username}:${config.password}@${config.host}:${config.port}/${config.database}`;\n }\n return config;\n }\n /** Will log to console if verbose mode is enabled */\n log(message, ...optionalParams) {\n if (this.config.verbose) {\n message = anonimizeCommand(message);\n console.log(`${new Date().toISOString()} ${this.config.clientId}: ${message}`, ...optionalParams);\n }\n }\n //\n // public methods\n //\n /** Enable verbose logging for debug purposes */\n verbose() {\n this.config.verbose = true;\n }\n /** Will enquee a command to be executed and callback with the resulting rowset/result/error */\n sendCommands(commands, callback) {\n this.operations.enqueue(done => {\n if (this.transport) {\n this.transport.processCommands(commands, (error, result) => {\n callback === null || callback === void 0 ? void 0 : callback.call(this, error, result);\n done(error);\n });\n }\n else {\n const error = new types_1.SQLiteCloudError('Connection not established', { errorCode: 'ERR_CONNECTION_NOT_ESTABLISHED' });\n callback === null || callback === void 0 ? void 0 : callback.call(this, error);\n done(error);\n }\n });\n return this;\n }\n /** Disconnect from server, release connection. */\n close() {\n var _a;\n this.operations.clear();\n (_a = this.transport) === null || _a === void 0 ? void 0 : _a.close();\n this.transport = undefined;\n return this;\n }\n}\nexports.SQLiteCloudConnection = SQLiteCloudConnection;\nclass OperationsQueue {\n constructor() {\n this.queue = [];\n this.isProcessing = false;\n }\n /** Add operations to the queue, process immediately if possible, else wait for previous operations to complete */\n enqueue(operation) {\n this.queue.push(operation);\n if (!this.isProcessing) {\n this.processNext();\n }\n }\n /** Clear the queue */\n clear() {\n this.queue = [];\n this.isProcessing = false;\n }\n /** Process the next operation in the queue */\n processNext() {\n if (this.queue.length === 0) {\n this.isProcessing = false;\n return;\n }\n this.isProcessing = true;\n const operation = this.queue.shift();\n operation === null || operation === void 0 ? void 0 : operation(() => {\n // could receive (error) => { ...\n // if (error) {\n // console.warn('OperationQueue.processNext - error in operation', error)\n // }\n // process the next operation in the queue\n this.processNext();\n });\n }\n}\nexports.OperationsQueue = OperationsQueue;\n//\n// utility functions\n//\n/** Messages going to the server are sometimes logged when error conditions occour and need to be stripped of user credentials */\nfunction anonimizeCommand(message) {\n // hide password in AUTH command if needed\n message = message.replace(/USER \\S+/, 'USER ******');\n message = message.replace(/PASSWORD \\S+?(?=;)/, 'PASSWORD ******');\n message = message.replace(/HASH \\S+?(?=;)/, 'HASH ******');\n return message;\n}\nexports.anonimizeCommand = anonimizeCommand;\n/** Strip message code in error of user credentials */\nfunction anonimizeError(error) {\n if (error === null || error === void 0 ? void 0 : error.message) {\n error.message = anonimizeCommand(error.message);\n }\n return error;\n}\nexports.anonimizeError = anonimizeError;\n/** Initialization commands sent to database when connection is established */\nfunction getInitializationCommands(config) {\n // first user authentication, then all other commands\n let commands = `AUTH USER ${config.username || ''} ${config.passwordHashed ? 'HASH' : 'PASSWORD'} ${config.password || ''}; `;\n if (config.database) {\n if (config.createDatabase && !config.dbMemory) {\n commands += `CREATE DATABASE ${config.database} IF NOT EXISTS; `;\n }\n commands += `USE DATABASE ${config.database}; `;\n }\n if (config.compression) {\n commands += 'SET CLIENT KEY COMPRESSION TO 1; ';\n }\n if (config.nonlinearizable) {\n commands += 'SET CLIENT KEY NONLINEARIZABLE TO 1; ';\n }\n if (config.noBlob) {\n commands += 'SET CLIENT KEY NOBLOB TO 1; ';\n }\n if (config.maxData) {\n commands += `SET CLIENT KEY MAXDATA TO ${config.maxData}; `;\n }\n if (config.maxRows) {\n commands += `SET CLIENT KEY MAXROWS TO ${config.maxRows}; `;\n }\n if (config.maxRowset) {\n commands += `SET CLIENT KEY MAXROWSET TO ${config.maxRowset}; `;\n }\n return commands;\n}\nexports.getInitializationCommands = getInitializationCommands;\n\n\n//# sourceURL=webpack://sqlitecloud/./lib/connection.js?"); +eval("\n/**\n * connection-tls.ts - handles low level communication with sqlitecloud server via tls socket and binary protocol\n */\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.SQLiteCloudTlsConnection = void 0;\nconst types_1 = __webpack_require__(/*! ./types */ \"./lib/drivers/types.js\");\nconst connection_1 = __webpack_require__(/*! ./connection */ \"./lib/drivers/connection.js\");\nconst protocol_1 = __webpack_require__(/*! ./protocol */ \"./lib/drivers/protocol.js\");\nconst utilities_1 = __webpack_require__(/*! ./utilities */ \"./lib/drivers/utilities.js\");\nconst protocol_2 = __webpack_require__(/*! ./protocol */ \"./lib/drivers/protocol.js\");\nconst net_1 = __importDefault(__webpack_require__(/*! net */ \"?83b6\"));\nconst tls_1 = __importDefault(__webpack_require__(/*! tls */ \"?4235\"));\n/**\n * Implementation of SQLiteCloudConnection that connects directly to the database via tls socket and raw, binary protocol.\n * Connects with plain socket with no encryption is the ?insecure=1 parameter is specified.\n * SQLiteCloud low-level connection, will do messaging, handle socket, authentication, etc.\n * A connection socket is established when the connection is created and closed when the connection is closed.\n * All operations are serialized by waiting for any pending operations to complete. Once a connection is closed,\n * it cannot be reopened and you must create a new connection.\n */\nclass SQLiteCloudTlsConnection extends connection_1.SQLiteCloudConnection {\n /** True if connection is open */\n get connected() {\n return !!this.socket;\n }\n /* Opens a connection with the server and sends the initialization commands. Will throw in case of errors. */\n connectTransport(config, callback) {\n // connection established while we were waiting in line?\n console.assert(!this.connected, 'Connection already established');\n // clear all listeners and call done in the operations queue\n const finish = error => {\n if (this.socket) {\n this.socket.removeAllListeners('data');\n this.socket.removeAllListeners('error');\n this.socket.removeAllListeners('close');\n if (error) {\n this.close();\n }\n }\n callback === null || callback === void 0 ? void 0 : callback.call(this, error);\n };\n this.config = config;\n const initializationCommands = (0, utilities_1.getInitializationCommands)(config);\n if (config.insecure) {\n // connect to plain socket, without encryption, only if insecure parameter specified\n // this option is mainly for testing purposes and is not available on production nodes\n // which would need to connect using tls and proper certificates as per code below\n const connectionOptions = {\n host: config.host,\n port: config.port\n };\n this.socket = net_1.default.connect(connectionOptions, () => {\n console.warn(`TlsConnection.connectTransport - connected to ${config.host}:${config.port} using insecure protocol`);\n // send initialization commands\n console.assert(this.socket, 'Connection already closed');\n this.transportCommands(initializationCommands, error => {\n if (error && this.socket) {\n this.close();\n }\n if (callback) {\n callback === null || callback === void 0 ? void 0 : callback.call(this, error);\n callback = undefined;\n }\n finish(error);\n });\n });\n }\n else {\n // connect to tls socket, initialize connection, setup event handlers\n this.socket = tls_1.default.connect(this.config.port, this.config.host, this.config.tlsOptions, () => {\n const tlsSocket = this.socket;\n if (!(tlsSocket === null || tlsSocket === void 0 ? void 0 : tlsSocket.authorized)) {\n const anonimizedError = (0, utilities_1.anonimizeError)(tlsSocket.authorizationError);\n console.error('Connection was not authorized', anonimizedError);\n this.close();\n finish(new types_1.SQLiteCloudError('Connection was not authorized', { cause: anonimizedError }));\n }\n else {\n // the connection was closed before it was even opened,\n // eg. client closed the connection before the server accepted it\n if (this.socket === null) {\n finish(new types_1.SQLiteCloudError('Connection was closed before it was done opening'));\n return;\n }\n // send initialization commands\n console.assert(this.socket, 'Connection already closed');\n this.transportCommands(initializationCommands, error => {\n if (error && this.socket) {\n this.close();\n }\n if (callback) {\n callback === null || callback === void 0 ? void 0 : callback.call(this, error);\n callback = undefined;\n }\n finish(error);\n });\n }\n });\n }\n this.socket.on('close', () => {\n this.socket = null;\n finish(new types_1.SQLiteCloudError('Connection was closed'));\n });\n this.socket.once('error', (error) => {\n console.error('Connection error', error);\n finish(new types_1.SQLiteCloudError('Connection error', { cause: error }));\n });\n return this;\n }\n /** Will send a command immediately (no queueing), return the rowset/result or throw an error */\n transportCommands(commands, callback) {\n var _a, _b, _c;\n // connection needs to be established?\n if (!this.socket) {\n callback === null || callback === void 0 ? void 0 : callback.call(this, new types_1.SQLiteCloudError('Connection not established', { errorCode: 'ERR_CONNECTION_NOT_ESTABLISHED' }));\n return this;\n }\n // compose commands following SCPC protocol\n commands = (0, protocol_1.formatCommand)(commands);\n let buffer = Buffer.alloc(0);\n const rowsetChunks = [];\n // const startedOn = new Date()\n // define what to do if an answer does not arrive within the set timeout\n let socketTimeout;\n // clear all listeners and call done in the operations queue\n const finish = (error, result) => {\n clearTimeout(socketTimeout);\n if (this.socket) {\n this.socket.removeAllListeners('data');\n this.socket.removeAllListeners('error');\n this.socket.removeAllListeners('close');\n }\n if (callback) {\n callback === null || callback === void 0 ? void 0 : callback.call(this, error, result);\n callback = undefined;\n }\n };\n // define the Promise that waits for the server response\n const readData = (data) => {\n var _a, _b;\n try {\n // on first ondata event, dataType is read from data, on subsequent ondata event, is read from buffer that is the concatanations of data received on each ondata event\n let dataType = buffer.length === 0 ? data.subarray(0, 1).toString() : buffer.subarray(0, 1).toString('utf8');\n buffer = Buffer.concat([buffer, data]);\n const commandLength = (0, protocol_1.hasCommandLength)(dataType);\n if (commandLength) {\n const commandLength = (0, protocol_1.parseCommandLength)(buffer);\n const hasReceivedEntireCommand = buffer.length - buffer.indexOf(' ') - 1 >= commandLength ? true : false;\n if (hasReceivedEntireCommand) {\n if ((_a = this.config) === null || _a === void 0 ? void 0 : _a.verbose) {\n let bufferString = buffer.toString('utf8');\n if (bufferString.length > 1000) {\n bufferString = bufferString.substring(0, 100) + '...' + bufferString.substring(bufferString.length - 40);\n }\n // const elapsedMs = new Date().getTime() - startedOn.getTime()\n // console.debug(`Receive: ${bufferString} - ${elapsedMs}ms`)\n }\n // need to decompress this buffer before decoding?\n if (dataType === protocol_1.CMD_COMPRESSED) {\n ;\n ({ buffer, dataType } = (0, protocol_1.decompressBuffer)(buffer));\n }\n if (dataType !== protocol_1.CMD_ROWSET_CHUNK) {\n (_b = this.socket) === null || _b === void 0 ? void 0 : _b.off('data', readData);\n const { data } = (0, protocol_1.popData)(buffer);\n finish(null, data);\n }\n else {\n // check if rowset received the ending chunk\n if ((0, protocol_1.bufferEndsWith)(buffer, protocol_1.ROWSET_CHUNKS_END)) {\n rowsetChunks.push(buffer);\n const parsedData = (0, protocol_2.parseRowsetChunks)(rowsetChunks);\n finish === null || finish === void 0 ? void 0 : finish.call(this, null, parsedData);\n }\n else {\n // no ending string? ask server for another chunk\n rowsetChunks.push(buffer);\n buffer = Buffer.alloc(0);\n }\n }\n }\n }\n else {\n // command with no explicit len so make sure that the final character is a space\n const lastChar = buffer.subarray(buffer.length - 1, buffer.length).toString('utf8');\n if (lastChar == ' ') {\n const { data } = (0, protocol_1.popData)(buffer);\n finish(null, data);\n }\n }\n }\n catch (error) {\n console.assert(error instanceof Error);\n if (error instanceof Error) {\n finish(error);\n }\n }\n };\n (_a = this.socket) === null || _a === void 0 ? void 0 : _a.once('close', () => {\n finish(new types_1.SQLiteCloudError('Connection was closed', { cause: (0, utilities_1.anonimizeCommand)(commands) }));\n });\n (_b = this.socket) === null || _b === void 0 ? void 0 : _b.write(commands, 'utf8', () => {\n var _a, _b;\n // @ts-ignore\n socketTimeout = setTimeout(() => {\n const timeoutError = new types_1.SQLiteCloudError('Request timed out', { cause: (0, utilities_1.anonimizeCommand)(commands) });\n // console.debug(`Request timed out, config.timeout is ${this.config?.timeout as number}ms`, timeoutError)\n finish(timeoutError);\n }, (_a = this.config) === null || _a === void 0 ? void 0 : _a.timeout);\n (_b = this.socket) === null || _b === void 0 ? void 0 : _b.on('data', readData);\n });\n (_c = this.socket) === null || _c === void 0 ? void 0 : _c.once('error', (error) => {\n console.error('Socket error', error);\n this.close();\n finish(new types_1.SQLiteCloudError('Socket error', { cause: (0, utilities_1.anonimizeError)(error) }));\n });\n return this;\n }\n /** Disconnect from server, release connection. */\n close() {\n console.assert(this.socket !== null, 'TlsConnection.close - connection already closed');\n this.operations.clear();\n if (this.socket) {\n this.socket.destroy();\n this.socket = null;\n }\n this.socket = undefined;\n return this;\n }\n}\nexports.SQLiteCloudTlsConnection = SQLiteCloudTlsConnection;\nexports[\"default\"] = SQLiteCloudTlsConnection;\n\n\n//# sourceURL=webpack://sqlitecloud/./lib/drivers/connection-tls.js?"); /***/ }), -/***/ "./lib/database.js": -/*!*************************!*\ - !*** ./lib/database.js ***! - \*************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { +/***/ "./lib/drivers/connection-ws.js": +/*!**************************************!*\ + !*** ./lib/drivers/connection-ws.js ***! + \**************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; -eval("\n//\n// database.ts - database driver api, implements and extends sqlite3\n//\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.Database = void 0;\n// Trying as much as possible to be a drop-in replacement for SQLite3 API\n// https://github.com/TryGhost/node-sqlite3/wiki/API\n// https://github.com/TryGhost/node-sqlite3\n// https://github.com/TryGhost/node-sqlite3/blob/master/lib/sqlite3.d.ts\n/* eslint-disable @typescript-eslint/no-unused-vars */\n/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\nconst connection_1 = __webpack_require__(/*! ./connection */ \"./lib/connection.js\");\nconst rowset_1 = __webpack_require__(/*! ./rowset */ \"./lib/rowset.js\");\nconst types_1 = __webpack_require__(/*! ./types */ \"./lib/types.js\");\nconst utilities_1 = __webpack_require__(/*! ./utilities */ \"./lib/utilities.js\");\nconst statement_1 = __webpack_require__(/*! ./statement */ \"./lib/statement.js\");\nconst eventemitter3_1 = __importDefault(__webpack_require__(/*! eventemitter3 */ \"./node_modules/eventemitter3/index.js\"));\n// Uses eventemitter3 instead of node events for browser compatibility\n// https://github.com/primus/eventemitter3\n/**\n * Creating a Database object automatically opens a connection to the SQLite database.\n * When the connection is established the Database object emits an open event and calls\n * the optional provided callback. If the connection cannot be established an error event\n * will be emitted and the optional callback is called with the error information.\n */\nclass Database extends eventemitter3_1.default {\n constructor(config, mode, callback) {\n super();\n /** Database connections */\n this.connections = [];\n this.config = typeof config === 'string' ? { connectionString: config } : config;\n // mode is optional and so is callback\n // https://github.com/TryGhost/node-sqlite3/wiki/API#new-sqlite3databasefilename--mode--callback\n if (typeof mode === 'function') {\n callback = mode;\n mode = undefined;\n }\n // mode is ignored for now\n // opens first connection to the database automatically\n this.getConnection(callback);\n }\n //\n // private methods\n //\n /** Returns first available connection from connection pool */\n getConnection(callback) {\n var _a;\n // TODO sqlitecloud-js / implement database connection pool #10\n if (((_a = this.connections) === null || _a === void 0 ? void 0 : _a.length) > 0) {\n callback === null || callback === void 0 ? void 0 : callback.call(this, null, this.connections[0]);\n }\n else {\n this.connections.push(new connection_1.SQLiteCloudConnection(this.config, error => {\n if (error) {\n this.handleError(this.connections[0], error, callback);\n }\n else {\n console.assert;\n callback === null || callback === void 0 ? void 0 : callback.call(this, null, this.connections[0]);\n this.emitEvent('open');\n }\n }));\n }\n }\n /** Handles an error by closing the connection, calling the callback and/or emitting an error event */\n handleError(connection, error, callback) {\n // an errored connection is thrown out\n if (connection) {\n this.connections = this.connections.filter(c => c !== connection);\n connection.close();\n }\n if (callback) {\n callback.call(this, error);\n }\n else {\n this.emitEvent('error', error);\n }\n }\n /**\n * Some queries like inserts or updates processed via run or exec may generate\n * an empty result (eg. no data was selected), but still have some metadata.\n * For example the server may pass the id of the last row that was modified.\n * In this case the callback results should be empty but the context may contain\n * additional information like lastID, etc.\n * @see https://github.com/TryGhost/node-sqlite3/wiki/API#runsql--param---callback\n * @param results Results received from the server\n * @returns A context object if one makes sense, otherwise undefined\n */\n processContext(results) {\n if (results) {\n if (Array.isArray(results) && results.length > 0) {\n switch (results[0]) {\n case types_1.SQLiteCloudArrayType.ARRAY_TYPE_SQLITE_EXEC:\n return {\n lastID: results[2],\n changes: results[3],\n totalChanges: results[4],\n finalized: results[5] // FINALIZED\n };\n }\n }\n }\n return undefined;\n }\n /** Emits given event with optional arguments on the next tick so callbacks can complete first */\n emitEvent(event, ...args) {\n setTimeout(() => {\n this.emit(event, ...args);\n }, 0);\n }\n //\n // public methods\n //\n /**\n * Returns the configuration with which this database was opened.\n * The configuration is readonly and cannot be changed as there may\n * be multiple connections using the same configuration.\n * @returns {SQLiteCloudConfig} A configuration object\n */\n getConfiguration() {\n return JSON.parse(JSON.stringify(this.config));\n }\n /** Enable verbose mode */\n verbose() {\n this.config.verbose = true;\n for (const connection of this.connections) {\n connection.verbose();\n }\n return this;\n }\n /** Set a configuration option for the database */\n configure(_option, _value) {\n // https://github.com/TryGhost/node-sqlite3/wiki/API#configureoption-value\n return this;\n }\n run(sql, ...params) {\n const { args, callback } = (0, utilities_1.popCallback)(params);\n const preparedSql = (args === null || args === void 0 ? void 0 : args.length) > 0 ? (0, utilities_1.prepareSql)(sql, ...args) : sql;\n this.getConnection((error, connection) => {\n if (error || !connection) {\n this.handleError(null, error, callback);\n }\n else {\n connection.sendCommands(preparedSql, (error, results) => {\n if (error) {\n this.handleError(connection, error, callback);\n }\n else {\n // context may include id of last row inserted, total changes, etc...\n const context = this.processContext(results);\n callback === null || callback === void 0 ? void 0 : callback.call(context || this, null, context ? undefined : results);\n }\n });\n }\n });\n return this;\n }\n get(sql, ...params) {\n const { args, callback } = (0, utilities_1.popCallback)(params);\n const preparedSql = (args === null || args === void 0 ? void 0 : args.length) > 0 ? (0, utilities_1.prepareSql)(sql, ...args) : sql;\n this.getConnection((error, connection) => {\n if (error || !connection) {\n this.handleError(null, error, callback);\n }\n else {\n connection.sendCommands(preparedSql, (error, results) => {\n if (error) {\n this.handleError(connection, error, callback);\n }\n else {\n if (results && results instanceof rowset_1.SQLiteCloudRowset && results.length > 0) {\n callback === null || callback === void 0 ? void 0 : callback.call(this, null, results[0]);\n }\n else {\n callback === null || callback === void 0 ? void 0 : callback.call(this, null);\n }\n }\n });\n }\n });\n return this;\n }\n all(sql, ...params) {\n const { args, callback } = (0, utilities_1.popCallback)(params);\n const preparedSql = (args === null || args === void 0 ? void 0 : args.length) > 0 ? (0, utilities_1.prepareSql)(sql, ...args) : sql;\n this.getConnection((error, connection) => {\n if (error || !connection) {\n this.handleError(null, error, callback);\n }\n else {\n connection.sendCommands(preparedSql, (error, results) => {\n if (error) {\n this.handleError(connection, error, callback);\n }\n else {\n if (results && results instanceof rowset_1.SQLiteCloudRowset) {\n callback === null || callback === void 0 ? void 0 : callback.call(this, null, results);\n }\n else {\n callback === null || callback === void 0 ? void 0 : callback.call(this, null);\n }\n }\n });\n }\n });\n return this;\n }\n each(sql, ...params) {\n // extract optional parameters and one or two callbacks\n const { args, callback, complete } = (0, utilities_1.popCallback)(params);\n const preparedSql = (args === null || args === void 0 ? void 0 : args.length) > 0 ? (0, utilities_1.prepareSql)(sql, ...args) : sql;\n this.getConnection((error, connection) => {\n if (error || !connection) {\n this.handleError(null, error, callback);\n }\n else {\n connection.sendCommands(preparedSql, (error, rowset) => {\n if (error) {\n this.handleError(connection, error, callback);\n }\n else {\n if (rowset && rowset instanceof rowset_1.SQLiteCloudRowset) {\n if (callback) {\n for (const row of rowset) {\n callback.call(this, null, row);\n }\n }\n if (complete) {\n ;\n complete.call(this, null, rowset.numberOfRows);\n }\n }\n else {\n callback === null || callback === void 0 ? void 0 : callback.call(this, new types_1.SQLiteCloudError('Invalid rowset'));\n }\n }\n });\n }\n });\n return this;\n }\n /**\n * Prepares the SQL statement and optionally binds the specified parameters and\n * calls the callback when done. The function returns a Statement object.\n * When preparing was successful, the first and only argument to the callback\n * is null, otherwise it is the error object. When bind parameters are supplied,\n * they are bound to the prepared statement before calling the callback.\n */\n prepare(sql, ...params) {\n const { args, callback } = (0, utilities_1.popCallback)(params);\n return new statement_1.Statement(this, sql, ...args, callback);\n }\n /**\n * Runs all SQL queries in the supplied string. No result rows are retrieved.\n * The function returns the Database object to allow for function chaining.\n * If a query fails, no subsequent statements will be executed (wrap it in a\n * transaction if you want all or none to be executed). When all statements\n * have been executed successfully, or when an error occurs, the callback\n * function is called, with the first parameter being either null or an error\n * object. When no callback is provided and an error occurs, an error event\n * will be emitted on the database object.\n */\n exec(sql, callback) {\n this.getConnection((error, connection) => {\n if (error || !connection) {\n this.handleError(null, error, callback);\n }\n else {\n connection.sendCommands(sql, (error, results) => {\n if (error) {\n this.handleError(connection, error, callback);\n }\n else {\n const context = this.processContext(results);\n callback === null || callback === void 0 ? void 0 : callback.call(context ? context : this, null);\n }\n });\n }\n });\n return this;\n }\n /**\n * If the optional callback is provided, this function will be called when the\n * database was closed successfully or when an error occurred. The first argument\n * is an error object. When it is null, closing succeeded. If no callback is provided\n * and an error occurred, an error event with the error object as the only parameter\n * will be emitted on the database object. If closing succeeded, a close event with no\n * parameters is emitted, regardless of whether a callback was provided or not.\n */\n close(callback) {\n var _a;\n if (((_a = this.connections) === null || _a === void 0 ? void 0 : _a.length) > 0) {\n for (const connection of this.connections) {\n connection.close();\n }\n }\n callback === null || callback === void 0 ? void 0 : callback.call(this, null);\n this.emitEvent('close');\n }\n /**\n * Loads a compiled SQLite extension into the database connection object.\n * @param path Filename of the extension to load.\n * @param callback If provided, this function will be called when the extension\n * was loaded successfully or when an error occurred. The first argument is an\n * error object. When it is null, loading succeeded. If no callback is provided\n * and an error occurred, an error event with the error object as the only parameter\n * will be emitted on the database object.\n */\n loadExtension(_path, callback) {\n // TODO sqlitecloud-js / implement database loadExtension #17\n if (callback) {\n callback.call(this, new Error('Database.loadExtension - Not implemented'));\n }\n else {\n this.emitEvent('error', new Error('Database.loadExtension - Not implemented'));\n }\n return this;\n }\n /**\n * Allows the user to interrupt long-running queries. Wrapper around\n * sqlite3_interrupt and causes other data-fetching functions to be\n * passed an err with code = sqlite3.INTERRUPT. The database must be\n * open to use this function.\n */\n interrupt() {\n // TODO sqlitecloud-js / implement database interrupt #13\n }\n //\n // extended APIs\n //\n /**\n * Sql is a promise based API for executing SQL statements. You can\n * pass a simple string with a SQL statement or a template string\n * using backticks and parameters in ${parameter} format. These parameters\n * will be properly escaped and quoted like when using a prepared statement.\n * @param sql A sql string or a template string in `backticks` format\n * @returns An array of rows in case of selections or an object with\n * metadata in case of insert, update, delete.\n */\n sql(sql, ...values) {\n return __awaiter(this, void 0, void 0, function* () {\n let preparedSql = '';\n // sql is a TemplateStringsArray, the 'raw' property is specific to TemplateStringsArray\n if (Array.isArray(sql) && 'raw' in sql) {\n sql.forEach((string, i) => {\n preparedSql += string + (i < values.length ? '?' : '');\n });\n preparedSql = (0, utilities_1.prepareSql)(preparedSql, ...values);\n }\n else {\n if (typeof sql === 'string') {\n if ((values === null || values === void 0 ? void 0 : values.length) > 0) {\n preparedSql = (0, utilities_1.prepareSql)(sql, ...values);\n }\n else {\n preparedSql = sql;\n }\n }\n else {\n throw new Error('Invalid sql');\n }\n }\n return new Promise((resolve, reject) => {\n this.getConnection((error, connection) => {\n if (error || !connection) {\n reject(error);\n }\n else {\n connection.sendCommands(preparedSql, (error, results) => {\n if (error) {\n reject(error);\n }\n else {\n // metadata for operations like insert, update, delete?\n const context = this.processContext(results);\n resolve(context ? context : results);\n }\n });\n }\n });\n });\n });\n }\n}\nexports.Database = Database;\n\n\n//# sourceURL=webpack://sqlitecloud/./lib/database.js?"); +eval("\n/**\n * transport-ws.ts - handles low level communication with sqlitecloud server via socket.io websocket\n */\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.SQLiteCloudWebsocketConnection = void 0;\nconst types_1 = __webpack_require__(/*! ./types */ \"./lib/drivers/types.js\");\nconst rowset_1 = __webpack_require__(/*! ./rowset */ \"./lib/drivers/rowset.js\");\nconst connection_1 = __webpack_require__(/*! ./connection */ \"./lib/drivers/connection.js\");\nconst socket_io_client_1 = __webpack_require__(/*! socket.io-client */ \"./node_modules/socket.io-client/build/cjs/index.js\");\n/**\n * Implementation of TransportConnection that connects to the database indirectly\n * via SQLite Cloud Gateway, a socket.io based deamon that responds to sql query\n * requests by returning results and rowsets in json format. The gateway handles\n * connect, disconnect, retries, order of operations, timeouts, etc.\n */\nclass SQLiteCloudWebsocketConnection extends connection_1.SQLiteCloudConnection {\n /** True if connection is open */\n get connected() {\n return !!this.socket;\n }\n /* Opens a connection with the server and sends the initialization commands. Will throw in case of errors. */\n connectTransport(config, callback) {\n var _a;\n try {\n // connection established while we were waiting in line?\n console.assert(!this.connected, 'Connection already established');\n if (!this.socket) {\n this.config = config;\n const connectionString = this.config.connectionString;\n const gatewayUrl = ((_a = this.config) === null || _a === void 0 ? void 0 : _a.gatewayUrl) || `ws://${this.config.host}:4000`;\n this.socket = (0, socket_io_client_1.io)(gatewayUrl, { auth: { token: connectionString } });\n }\n callback === null || callback === void 0 ? void 0 : callback.call(this, null);\n }\n catch (error) {\n callback === null || callback === void 0 ? void 0 : callback.call(this, error);\n }\n return this;\n }\n /** Will send a command immediately (no queueing), return the rowset/result or throw an error */\n transportCommands(commands, callback) {\n // connection needs to be established?\n if (!this.socket) {\n callback === null || callback === void 0 ? void 0 : callback.call(this, new types_1.SQLiteCloudError('Connection not established', { errorCode: 'ERR_CONNECTION_NOT_ESTABLISHED' }));\n return this;\n }\n this.socket.emit('v1/sql', { sql: commands, row: 'array' }, (response) => {\n if (response === null || response === void 0 ? void 0 : response.error) {\n const error = new types_1.SQLiteCloudError(response.error.detail, Object.assign({}, response.error));\n callback === null || callback === void 0 ? void 0 : callback.call(this, error);\n }\n else {\n const { data, metadata } = response;\n if (data && metadata) {\n if (metadata.numberOfRows !== undefined && metadata.numberOfColumns !== undefined && metadata.columns !== undefined) {\n console.assert(Array.isArray(data), 'SQLiteCloudWebsocketConnection.transportCommands - data is not an array');\n // we can recreate a SQLiteCloudRowset from the response which we know to be an array of arrays\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n const rowset = new rowset_1.SQLiteCloudRowset(metadata, data.flat());\n callback === null || callback === void 0 ? void 0 : callback.call(this, null, rowset);\n return;\n }\n }\n callback === null || callback === void 0 ? void 0 : callback.call(this, null, response === null || response === void 0 ? void 0 : response.data);\n }\n });\n return this;\n }\n /** Disconnect socket.io from server */\n close() {\n var _a;\n console.assert(this.socket !== null, 'SQLiteCloudWebsocketConnection.close - connection already closed');\n if (this.socket) {\n (_a = this.socket) === null || _a === void 0 ? void 0 : _a.close();\n this.socket = undefined;\n }\n this.operations.clear();\n this.socket = undefined;\n return this;\n }\n}\nexports.SQLiteCloudWebsocketConnection = SQLiteCloudWebsocketConnection;\nexports[\"default\"] = SQLiteCloudWebsocketConnection;\n\n\n//# sourceURL=webpack://sqlitecloud/./lib/drivers/connection-ws.js?"); /***/ }), -/***/ "./lib/index.js": -/*!**********************!*\ - !*** ./lib/index.js ***! - \**********************/ +/***/ "./lib/drivers/connection.js": +/*!***********************************!*\ + !*** ./lib/drivers/connection.js ***! + \***********************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; -eval("\n//\n// index.ts - re-export public APIs\n//\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.WebSocketTransport = exports.prepareSql = exports.escapeSqlParameter = exports.SQLiteCloudConnection = exports.SQLiteCloudRow = exports.SQLiteCloudRowset = exports.SQLiteCloudError = exports.Statement = exports.Database = void 0;\nvar database_1 = __webpack_require__(/*! ./database */ \"./lib/database.js\");\nObject.defineProperty(exports, \"Database\", ({ enumerable: true, get: function () { return database_1.Database; } }));\nvar statement_1 = __webpack_require__(/*! ./statement */ \"./lib/statement.js\");\nObject.defineProperty(exports, \"Statement\", ({ enumerable: true, get: function () { return statement_1.Statement; } }));\nvar types_1 = __webpack_require__(/*! ./types */ \"./lib/types.js\");\nObject.defineProperty(exports, \"SQLiteCloudError\", ({ enumerable: true, get: function () { return types_1.SQLiteCloudError; } }));\nvar rowset_1 = __webpack_require__(/*! ./rowset */ \"./lib/rowset.js\");\nObject.defineProperty(exports, \"SQLiteCloudRowset\", ({ enumerable: true, get: function () { return rowset_1.SQLiteCloudRowset; } }));\nObject.defineProperty(exports, \"SQLiteCloudRow\", ({ enumerable: true, get: function () { return rowset_1.SQLiteCloudRow; } }));\nvar connection_1 = __webpack_require__(/*! ./connection */ \"./lib/connection.js\");\nObject.defineProperty(exports, \"SQLiteCloudConnection\", ({ enumerable: true, get: function () { return connection_1.SQLiteCloudConnection; } }));\nvar utilities_1 = __webpack_require__(/*! ./utilities */ \"./lib/utilities.js\");\nObject.defineProperty(exports, \"escapeSqlParameter\", ({ enumerable: true, get: function () { return utilities_1.escapeSqlParameter; } }));\nObject.defineProperty(exports, \"prepareSql\", ({ enumerable: true, get: function () { return utilities_1.prepareSql; } }));\nvar transport_ws_1 = __webpack_require__(/*! ./transport-ws */ \"./lib/transport-ws.js\");\nObject.defineProperty(exports, \"WebSocketTransport\", ({ enumerable: true, get: function () { return transport_ws_1.WebSocketTransport; } }));\n\n\n//# sourceURL=webpack://sqlitecloud/./lib/index.js?"); +eval("\n/**\n * connection.ts - base abstract class for sqlitecloud server connections\n */\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.SQLiteCloudConnection = void 0;\nconst types_1 = __webpack_require__(/*! ./types */ \"./lib/drivers/types.js\");\nconst utilities_1 = __webpack_require__(/*! ./utilities */ \"./lib/drivers/utilities.js\");\nconst queue_1 = __webpack_require__(/*! ./queue */ \"./lib/drivers/queue.js\");\nconst utilities_2 = __webpack_require__(/*! ./utilities */ \"./lib/drivers/utilities.js\");\n/**\n * Base class for SQLiteCloudConnection handles basics and defines methods.\n * Actual connection management and communication with the server in concrete classes.\n */\nclass SQLiteCloudConnection {\n /** Parse and validate provided connectionString or configuration */\n constructor(config, callback) {\n /** Operations are serialized by waiting an any pending promises */\n this.operations = new queue_1.OperationsQueue();\n if (typeof config === 'string') {\n this.config = (0, utilities_1.validateConfiguration)({ connectionString: config });\n }\n else {\n this.config = (0, utilities_1.validateConfiguration)(config);\n }\n // connect transport layer to server\n this.connect(callback);\n }\n //\n // internal methods (some are implemented in concrete classes using different transport layers)\n //\n /** Connect will establish a tls or websocket transport to the server based on configuration and environment */\n connect(callback) {\n this.operations.enqueue(done => {\n this.connectTransport(this.config, error => {\n if (error) {\n console.error(`SQLiteCloudConnection.connect - error connecting ${this.config.host}:${this.config.port} ${error.toString()}`, error);\n this.close();\n }\n callback === null || callback === void 0 ? void 0 : callback.call(this, error || null);\n done(error);\n });\n });\n return this;\n }\n /** Will log to console if verbose mode is enabled */\n log(message, ...optionalParams) {\n if (this.config.verbose) {\n message = (0, utilities_2.anonimizeCommand)(message);\n console.log(`${new Date().toISOString()} ${this.config.clientId}: ${message}`, ...optionalParams);\n }\n }\n /** Enable verbose logging for debug purposes */\n verbose() {\n this.config.verbose = true;\n }\n /** Will enquee a command to be executed and callback with the resulting rowset/result/error */\n sendCommands(commands, callback) {\n this.operations.enqueue(done => {\n if (!this.connected) {\n const error = new types_1.SQLiteCloudError('Connection not established', { errorCode: 'ERR_CONNECTION_NOT_ESTABLISHED' });\n callback === null || callback === void 0 ? void 0 : callback.call(this, error);\n done(error);\n }\n this.transportCommands(commands, (error, result) => {\n callback === null || callback === void 0 ? void 0 : callback.call(this, error, result);\n done(error);\n });\n });\n return this;\n }\n}\nexports.SQLiteCloudConnection = SQLiteCloudConnection;\n\n\n//# sourceURL=webpack://sqlitecloud/./lib/drivers/connection.js?"); /***/ }), -/***/ "./lib/rowset.js": -/*!***********************!*\ - !*** ./lib/rowset.js ***! - \***********************/ +/***/ "./lib/drivers/database.js": +/*!*********************************!*\ + !*** ./lib/drivers/database.js ***! + \*********************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { "use strict"; -eval("\n//\n// rowset.ts\n//\nvar __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _SQLiteCloudRow_rowset, _SQLiteCloudRow_data, _SQLiteCloudRowset_metadata, _SQLiteCloudRowset_data;\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.SQLiteCloudRowset = exports.SQLiteCloudRow = void 0;\nconst types_1 = __webpack_require__(/*! ./types */ \"./lib/types.js\");\n/** A single row in a dataset with values accessible by column name */\nclass SQLiteCloudRow {\n constructor(rowset, columnsNames, data) {\n // rowset is private\n _SQLiteCloudRow_rowset.set(this, void 0);\n // data is private\n _SQLiteCloudRow_data.set(this, void 0);\n __classPrivateFieldSet(this, _SQLiteCloudRow_rowset, rowset, \"f\");\n __classPrivateFieldSet(this, _SQLiteCloudRow_data, data, \"f\");\n for (let i = 0; i < columnsNames.length; i++) {\n this[columnsNames[i]] = data[i];\n }\n }\n /** Returns the rowset that this row belongs to */\n // @ts-expect-error\n getRowset() {\n return __classPrivateFieldGet(this, _SQLiteCloudRow_rowset, \"f\");\n }\n /** Returns rowset data as a plain array of values */\n // @ts-expect-error\n getData() {\n return __classPrivateFieldGet(this, _SQLiteCloudRow_data, \"f\");\n }\n}\nexports.SQLiteCloudRow = SQLiteCloudRow;\n_SQLiteCloudRow_rowset = new WeakMap(), _SQLiteCloudRow_data = new WeakMap();\n/* A set of rows returned by a query */\nclass SQLiteCloudRowset extends Array {\n constructor(metadata, data) {\n super(metadata.numberOfRows);\n /** Metadata contains number of rows and columns, column names, types, etc. */\n _SQLiteCloudRowset_metadata.set(this, void 0);\n /** Actual data organized in rows */\n _SQLiteCloudRowset_data.set(this, void 0);\n // console.assert(data !== undefined && data.length === metadata.numberOfRows * metadata.numberOfColumns, 'Invalid rowset data')\n // console.assert(metadata !== undefined && metadata.columns.length === metadata.numberOfColumns, 'Invalid columns metadata')\n __classPrivateFieldSet(this, _SQLiteCloudRowset_metadata, metadata, \"f\");\n __classPrivateFieldSet(this, _SQLiteCloudRowset_data, data, \"f\");\n // adjust missing column names, duplicate column names, etc.\n const columnNames = this.columnsNames;\n for (let i = 0; i < metadata.numberOfColumns; i++) {\n if (!columnNames[i]) {\n columnNames[i] = `column_${i}`;\n }\n let j = 0;\n while (columnNames.findIndex((name, index) => index !== i && name === columnNames[i]) >= 0) {\n columnNames[i] = `${columnNames[i]}_${j}`;\n j++;\n }\n }\n for (let i = 0, start = 0; i < metadata.numberOfRows; i++, start += metadata.numberOfColumns) {\n this[i] = new SQLiteCloudRow(this, columnNames, data.slice(start, start + metadata.numberOfColumns));\n }\n }\n /**\n * Rowset version is 1 for a rowset with simple column names, 2 for extended metadata\n * @see https://github.com/sqlitecloud/sdk/blob/master/PROTOCOL.md\n */\n get version() {\n return __classPrivateFieldGet(this, _SQLiteCloudRowset_metadata, \"f\").version;\n }\n /** Number of rows in row set */\n get numberOfRows() {\n return __classPrivateFieldGet(this, _SQLiteCloudRowset_metadata, \"f\").numberOfRows;\n }\n /** Number of columns in row set */\n get numberOfColumns() {\n return __classPrivateFieldGet(this, _SQLiteCloudRowset_metadata, \"f\").numberOfColumns;\n }\n /** Array of columns names */\n get columnsNames() {\n return __classPrivateFieldGet(this, _SQLiteCloudRowset_metadata, \"f\").columns.map(column => column.name);\n }\n /** Get rowset metadata */\n get metadata() {\n return __classPrivateFieldGet(this, _SQLiteCloudRowset_metadata, \"f\");\n }\n /** Return value of item at given row and column */\n getItem(row, column) {\n if (row < 0 || row >= this.numberOfRows || column < 0 || column >= this.numberOfColumns) {\n throw new types_1.SQLiteCloudError(`This rowset has ${this.numberOfColumns} columns by ${this.numberOfRows} rows, requested column ${column} and row ${row} is invalid.`);\n }\n return __classPrivateFieldGet(this, _SQLiteCloudRowset_data, \"f\")[row * this.numberOfColumns + column];\n }\n /** Returns a subset of rows from this rowset */\n slice(start, end) {\n // validate and apply boundaries\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/slice\n start = start === undefined ? 0 : start < 0 ? this.numberOfRows + start : start;\n start = Math.min(Math.max(start, 0), this.numberOfRows);\n end = end === undefined ? this.numberOfRows : end < 0 ? this.numberOfRows + end : end;\n end = Math.min(Math.max(start, end), this.numberOfRows);\n const slicedMetadata = Object.assign(Object.assign({}, __classPrivateFieldGet(this, _SQLiteCloudRowset_metadata, \"f\")), { numberOfRows: end - start });\n const slicedData = __classPrivateFieldGet(this, _SQLiteCloudRowset_data, \"f\").slice(start * this.numberOfColumns, end * this.numberOfColumns);\n console.assert(slicedData && slicedData.length === slicedMetadata.numberOfRows * slicedMetadata.numberOfColumns, 'SQLiteCloudRowset.slice - invalid rowset data');\n return new SQLiteCloudRowset(slicedMetadata, slicedData);\n }\n map(fn) {\n const results = [];\n for (let i = 0; i < this.numberOfRows; i++) {\n const row = this[i];\n results.push(fn(row, i, this));\n }\n return results;\n }\n /** Returns an instance of SQLiteCloudRowset where rows have been filtered via given callback */\n filter(fn) {\n const filteredData = [];\n for (let i = 0; i < this.numberOfRows; i++) {\n const row = this[i];\n if (fn(row, i, this)) {\n filteredData.push(...__classPrivateFieldGet(this, _SQLiteCloudRowset_data, \"f\").slice(i * this.numberOfColumns, (i + 1) * this.numberOfColumns));\n }\n }\n return new SQLiteCloudRowset(Object.assign(Object.assign({}, __classPrivateFieldGet(this, _SQLiteCloudRowset_metadata, \"f\")), { numberOfRows: filteredData.length / this.numberOfColumns }), filteredData);\n }\n}\nexports.SQLiteCloudRowset = SQLiteCloudRowset;\n_SQLiteCloudRowset_metadata = new WeakMap(), _SQLiteCloudRowset_data = new WeakMap();\n\n\n//# sourceURL=webpack://sqlitecloud/./lib/rowset.js?"); +eval("\n//\n// database.ts - database driver api, implements and extends sqlite3\n//\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.Database = void 0;\nconst rowset_1 = __webpack_require__(/*! ./rowset */ \"./lib/drivers/rowset.js\");\nconst types_1 = __webpack_require__(/*! ./types */ \"./lib/drivers/types.js\");\nconst utilities_1 = __webpack_require__(/*! ./utilities */ \"./lib/drivers/utilities.js\");\nconst statement_1 = __webpack_require__(/*! ./statement */ \"./lib/drivers/statement.js\");\nconst eventemitter3_1 = __importDefault(__webpack_require__(/*! eventemitter3 */ \"./node_modules/eventemitter3/index.js\"));\nconst utilities_2 = __webpack_require__(/*! ./utilities */ \"./lib/drivers/utilities.js\");\n// Uses eventemitter3 instead of node events for browser compatibility\n// https://github.com/primus/eventemitter3\n/**\n * Creating a Database object automatically opens a connection to the SQLite database.\n * When the connection is established the Database object emits an open event and calls\n * the optional provided callback. If the connection cannot be established an error event\n * will be emitted and the optional callback is called with the error information.\n */\nclass Database extends eventemitter3_1.default {\n constructor(config, mode, callback) {\n super();\n /** Database connections */\n this.connections = [];\n this.config = typeof config === 'string' ? { connectionString: config } : config;\n // mode is optional and so is callback\n // https://github.com/TryGhost/node-sqlite3/wiki/API#new-sqlite3databasefilename--mode--callback\n if (typeof mode === 'function') {\n callback = mode;\n mode = undefined;\n }\n // mode is ignored for now\n // opens first connection to the database automatically\n this.getConnection((error, _connection) => {\n if (callback) {\n callback.call(this, error);\n }\n });\n }\n //\n // private methods\n //\n /** Returns first available connection from connection pool */\n getConnection(callback) {\n var _a, _b, _c;\n // TODO sqlitecloud-js / implement database connection pool #10\n if (((_a = this.connections) === null || _a === void 0 ? void 0 : _a.length) > 0) {\n callback === null || callback === void 0 ? void 0 : callback.call(this, null, this.connections[0]);\n }\n else {\n // connect using websocket if tls is not supported or if explicitly requested\n const useWebsocket = utilities_2.isBrowser || ((_b = this.config) === null || _b === void 0 ? void 0 : _b.useWebsocket) || ((_c = this.config) === null || _c === void 0 ? void 0 : _c.gatewayUrl);\n if (useWebsocket) {\n // socket.io transport works in both node.js and browser environments and connects via SQLite Cloud Gateway\n Promise.resolve().then(() => __importStar(__webpack_require__(/*! ./connection-ws */ \"./lib/drivers/connection-ws.js\"))).then(module => {\n this.connections.push(new module.default(this.config, error => {\n if (error) {\n this.handleError(this.connections[0], error, callback);\n }\n else {\n console.assert;\n callback === null || callback === void 0 ? void 0 : callback.call(this, null, this.connections[0]);\n this.emitEvent('open');\n }\n }));\n })\n .catch(error => {\n this.handleError(null, error, callback);\n });\n }\n else {\n // tls sockets work only in node.js environments\n Promise.resolve().then(() => __importStar(__webpack_require__(/*! ./connection-tls */ \"./lib/drivers/connection-tls.js\"))).then(module => {\n this.connections.push(new module.default(this.config, error => {\n if (error) {\n this.handleError(this.connections[0], error, callback);\n }\n else {\n console.assert;\n callback === null || callback === void 0 ? void 0 : callback.call(this, null, this.connections[0]);\n this.emitEvent('open');\n }\n }));\n })\n .catch(error => {\n this.handleError(null, error, callback);\n });\n }\n }\n }\n /** Handles an error by closing the connection, calling the callback and/or emitting an error event */\n handleError(connection, error, callback) {\n // an errored connection is thrown out\n if (connection) {\n this.connections = this.connections.filter(c => c !== connection);\n connection.close();\n }\n if (callback) {\n callback.call(this, error);\n }\n else {\n this.emitEvent('error', error);\n }\n }\n /**\n * Some queries like inserts or updates processed via run or exec may generate\n * an empty result (eg. no data was selected), but still have some metadata.\n * For example the server may pass the id of the last row that was modified.\n * In this case the callback results should be empty but the context may contain\n * additional information like lastID, etc.\n * @see https://github.com/TryGhost/node-sqlite3/wiki/API#runsql--param---callback\n * @param results Results received from the server\n * @returns A context object if one makes sense, otherwise undefined\n */\n processContext(results) {\n if (results) {\n if (Array.isArray(results) && results.length > 0) {\n switch (results[0]) {\n case types_1.SQLiteCloudArrayType.ARRAY_TYPE_SQLITE_EXEC:\n return {\n lastID: results[2],\n changes: results[3],\n totalChanges: results[4],\n finalized: results[5] // FINALIZED\n };\n }\n }\n }\n return undefined;\n }\n /** Emits given event with optional arguments on the next tick so callbacks can complete first */\n emitEvent(event, ...args) {\n setTimeout(() => {\n this.emit(event, ...args);\n }, 0);\n }\n //\n // public methods\n //\n /**\n * Returns the configuration with which this database was opened.\n * The configuration is readonly and cannot be changed as there may\n * be multiple connections using the same configuration.\n * @returns {SQLiteCloudConfig} A configuration object\n */\n getConfiguration() {\n return JSON.parse(JSON.stringify(this.config));\n }\n /** Enable verbose mode */\n verbose() {\n this.config.verbose = true;\n for (const connection of this.connections) {\n connection.verbose();\n }\n return this;\n }\n /** Set a configuration option for the database */\n configure(_option, _value) {\n // https://github.com/TryGhost/node-sqlite3/wiki/API#configureoption-value\n return this;\n }\n run(sql, ...params) {\n const { args, callback } = (0, utilities_1.popCallback)(params);\n const preparedSql = (args === null || args === void 0 ? void 0 : args.length) > 0 ? (0, utilities_1.prepareSql)(sql, ...args) : sql;\n this.getConnection((error, connection) => {\n if (error || !connection) {\n this.handleError(null, error, callback);\n }\n else {\n connection.sendCommands(preparedSql, (error, results) => {\n if (error) {\n this.handleError(connection, error, callback);\n }\n else {\n // context may include id of last row inserted, total changes, etc...\n const context = this.processContext(results);\n callback === null || callback === void 0 ? void 0 : callback.call(context || this, null, context ? undefined : results);\n }\n });\n }\n });\n return this;\n }\n get(sql, ...params) {\n const { args, callback } = (0, utilities_1.popCallback)(params);\n const preparedSql = (args === null || args === void 0 ? void 0 : args.length) > 0 ? (0, utilities_1.prepareSql)(sql, ...args) : sql;\n this.getConnection((error, connection) => {\n if (error || !connection) {\n this.handleError(null, error, callback);\n }\n else {\n connection.sendCommands(preparedSql, (error, results) => {\n if (error) {\n this.handleError(connection, error, callback);\n }\n else {\n if (results && results instanceof rowset_1.SQLiteCloudRowset && results.length > 0) {\n callback === null || callback === void 0 ? void 0 : callback.call(this, null, results[0]);\n }\n else {\n callback === null || callback === void 0 ? void 0 : callback.call(this, null);\n }\n }\n });\n }\n });\n return this;\n }\n all(sql, ...params) {\n const { args, callback } = (0, utilities_1.popCallback)(params);\n const preparedSql = (args === null || args === void 0 ? void 0 : args.length) > 0 ? (0, utilities_1.prepareSql)(sql, ...args) : sql;\n this.getConnection((error, connection) => {\n if (error || !connection) {\n this.handleError(null, error, callback);\n }\n else {\n connection.sendCommands(preparedSql, (error, results) => {\n if (error) {\n this.handleError(connection, error, callback);\n }\n else {\n if (results && results instanceof rowset_1.SQLiteCloudRowset) {\n callback === null || callback === void 0 ? void 0 : callback.call(this, null, results);\n }\n else {\n callback === null || callback === void 0 ? void 0 : callback.call(this, null);\n }\n }\n });\n }\n });\n return this;\n }\n each(sql, ...params) {\n // extract optional parameters and one or two callbacks\n const { args, callback, complete } = (0, utilities_1.popCallback)(params);\n const preparedSql = (args === null || args === void 0 ? void 0 : args.length) > 0 ? (0, utilities_1.prepareSql)(sql, ...args) : sql;\n this.getConnection((error, connection) => {\n if (error || !connection) {\n this.handleError(null, error, callback);\n }\n else {\n connection.sendCommands(preparedSql, (error, rowset) => {\n if (error) {\n this.handleError(connection, error, callback);\n }\n else {\n if (rowset && rowset instanceof rowset_1.SQLiteCloudRowset) {\n if (callback) {\n for (const row of rowset) {\n callback.call(this, null, row);\n }\n }\n if (complete) {\n ;\n complete.call(this, null, rowset.numberOfRows);\n }\n }\n else {\n callback === null || callback === void 0 ? void 0 : callback.call(this, new types_1.SQLiteCloudError('Invalid rowset'));\n }\n }\n });\n }\n });\n return this;\n }\n /**\n * Prepares the SQL statement and optionally binds the specified parameters and\n * calls the callback when done. The function returns a Statement object.\n * When preparing was successful, the first and only argument to the callback\n * is null, otherwise it is the error object. When bind parameters are supplied,\n * they are bound to the prepared statement before calling the callback.\n */\n prepare(sql, ...params) {\n const { args, callback } = (0, utilities_1.popCallback)(params);\n return new statement_1.Statement(this, sql, ...args, callback);\n }\n /**\n * Runs all SQL queries in the supplied string. No result rows are retrieved.\n * The function returns the Database object to allow for function chaining.\n * If a query fails, no subsequent statements will be executed (wrap it in a\n * transaction if you want all or none to be executed). When all statements\n * have been executed successfully, or when an error occurs, the callback\n * function is called, with the first parameter being either null or an error\n * object. When no callback is provided and an error occurs, an error event\n * will be emitted on the database object.\n */\n exec(sql, callback) {\n this.getConnection((error, connection) => {\n if (error || !connection) {\n this.handleError(null, error, callback);\n }\n else {\n connection.sendCommands(sql, (error, results) => {\n if (error) {\n this.handleError(connection, error, callback);\n }\n else {\n const context = this.processContext(results);\n callback === null || callback === void 0 ? void 0 : callback.call(context ? context : this, null);\n }\n });\n }\n });\n return this;\n }\n /**\n * If the optional callback is provided, this function will be called when the\n * database was closed successfully or when an error occurred. The first argument\n * is an error object. When it is null, closing succeeded. If no callback is provided\n * and an error occurred, an error event with the error object as the only parameter\n * will be emitted on the database object. If closing succeeded, a close event with no\n * parameters is emitted, regardless of whether a callback was provided or not.\n */\n close(callback) {\n var _a;\n if (((_a = this.connections) === null || _a === void 0 ? void 0 : _a.length) > 0) {\n for (const connection of this.connections) {\n connection.close();\n }\n }\n callback === null || callback === void 0 ? void 0 : callback.call(this, null);\n this.emitEvent('close');\n }\n /**\n * Loads a compiled SQLite extension into the database connection object.\n * @param path Filename of the extension to load.\n * @param callback If provided, this function will be called when the extension\n * was loaded successfully or when an error occurred. The first argument is an\n * error object. When it is null, loading succeeded. If no callback is provided\n * and an error occurred, an error event with the error object as the only parameter\n * will be emitted on the database object.\n */\n loadExtension(_path, callback) {\n // TODO sqlitecloud-js / implement database loadExtension #17\n if (callback) {\n callback.call(this, new Error('Database.loadExtension - Not implemented'));\n }\n else {\n this.emitEvent('error', new Error('Database.loadExtension - Not implemented'));\n }\n return this;\n }\n /**\n * Allows the user to interrupt long-running queries. Wrapper around\n * sqlite3_interrupt and causes other data-fetching functions to be\n * passed an err with code = sqlite3.INTERRUPT. The database must be\n * open to use this function.\n */\n interrupt() {\n // TODO sqlitecloud-js / implement database interrupt #13\n }\n //\n // extended APIs\n //\n /**\n * Sql is a promise based API for executing SQL statements. You can\n * pass a simple string with a SQL statement or a template string\n * using backticks and parameters in ${parameter} format. These parameters\n * will be properly escaped and quoted like when using a prepared statement.\n * @param sql A sql string or a template string in `backticks` format\n * @returns An array of rows in case of selections or an object with\n * metadata in case of insert, update, delete.\n */\n sql(sql, ...values) {\n return __awaiter(this, void 0, void 0, function* () {\n let preparedSql = '';\n // sql is a TemplateStringsArray, the 'raw' property is specific to TemplateStringsArray\n if (Array.isArray(sql) && 'raw' in sql) {\n sql.forEach((string, i) => {\n preparedSql += string + (i < values.length ? '?' : '');\n });\n preparedSql = (0, utilities_1.prepareSql)(preparedSql, ...values);\n }\n else {\n if (typeof sql === 'string') {\n if ((values === null || values === void 0 ? void 0 : values.length) > 0) {\n preparedSql = (0, utilities_1.prepareSql)(sql, ...values);\n }\n else {\n preparedSql = sql;\n }\n }\n else {\n throw new Error('Invalid sql');\n }\n }\n return new Promise((resolve, reject) => {\n this.getConnection((error, connection) => {\n if (error || !connection) {\n reject(error);\n }\n else {\n connection.sendCommands(preparedSql, (error, results) => {\n if (error) {\n reject(error);\n }\n else {\n // metadata for operations like insert, update, delete?\n const context = this.processContext(results);\n resolve(context ? context : results);\n }\n });\n }\n });\n });\n });\n }\n}\nexports.Database = Database;\n\n\n//# sourceURL=webpack://sqlitecloud/./lib/drivers/database.js?"); /***/ }), -/***/ "./lib/statement.js": -/*!**************************!*\ - !*** ./lib/statement.js ***! - \**************************/ +/***/ "./lib/drivers/protocol.js": +/*!*********************************!*\ + !*** ./lib/drivers/protocol.js ***! + \*********************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; -eval("\n/**\n * statement.ts\n */\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.Statement = void 0;\nconst utilities_1 = __webpack_require__(/*! ./utilities */ \"./lib/utilities.js\");\n/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\n/** A statement generated by Database.prepare used to prepare SQL with ? bindings */\nclass Statement {\n constructor(database, sql, ...params) {\n const { args, callback } = (0, utilities_1.popCallback)(params);\n this._database = database;\n this._sql = sql;\n if ((args === null || args === void 0 ? void 0 : args.length) > 0) {\n this.bind(...args, callback);\n }\n else {\n callback === null || callback === void 0 ? void 0 : callback.call(this, null);\n }\n }\n /**\n * Binds parameters to the prepared statement and calls the callback when done\n * or when an error occurs. The function returns the Statement object to allow\n * for function chaining. The first and only argument to the callback is null\n * when binding was successful, otherwise it is the error object. Binding parameters\n * with this function completely resets the statement object and row cursor and\n * removes all previously bound parameters, if any. Currently bound parameters\n * are escaped client side and turned into literals before being executed on the server.\n */\n bind(...params) {\n const { args, callback } = (0, utilities_1.popCallback)(params);\n try {\n this._preparedSql = (0, utilities_1.prepareSql)(this._sql, ...args);\n if (callback) {\n callback.call(this, null);\n }\n }\n catch (error) {\n this._preparedSql = undefined;\n if (callback) {\n callback.call(this, error);\n }\n }\n return this;\n }\n run(...params) {\n const { args, callback } = (0, utilities_1.popCallback)(params || []);\n if ((args === null || args === void 0 ? void 0 : args.length) > 0) {\n // apply new bindings then execute\n this.bind(...args, (error) => {\n if (error) {\n callback === null || callback === void 0 ? void 0 : callback.call(this, error);\n }\n else {\n this._database.run(this._preparedSql || '', callback);\n }\n });\n }\n else {\n // execute prepared sql with same bindings\n this._database.run(this._preparedSql || '', callback);\n }\n return this;\n }\n get(...params) {\n const { args, callback } = (0, utilities_1.popCallback)(params || []);\n if ((args === null || args === void 0 ? void 0 : args.length) > 0) {\n // apply new bindings then execute\n this.bind(...args, (error) => {\n if (error) {\n callback === null || callback === void 0 ? void 0 : callback.call(this, error);\n }\n else {\n this._database.get(this._preparedSql || '', callback);\n }\n });\n }\n else {\n // execute prepared sql with same bindings\n this._database.get(this._preparedSql || '', callback);\n }\n return this;\n }\n all(...params) {\n const { args, callback } = (0, utilities_1.popCallback)(params || []);\n if ((args === null || args === void 0 ? void 0 : args.length) > 0) {\n // apply new bindings then execute\n this.bind(...args, (error) => {\n if (error) {\n callback === null || callback === void 0 ? void 0 : callback.call(this, error);\n }\n else {\n this._database.all(this._preparedSql || '', callback);\n }\n });\n }\n else {\n // execute prepared sql with same bindings\n this._database.all(this._preparedSql || '', callback);\n }\n return this;\n }\n each(...params) {\n const { args, callback, complete } = (0, utilities_1.popCallback)(params);\n if ((args === null || args === void 0 ? void 0 : args.length) > 0) {\n // apply new bindings then execute\n this.bind(...args, (error) => {\n if (error) {\n callback === null || callback === void 0 ? void 0 : callback.call(this, error);\n }\n else {\n this._database.each(this._preparedSql || '', callback, complete);\n }\n });\n }\n else {\n // execute prepared sql with same bindings\n this._database.each(this._preparedSql || '', callback, complete);\n }\n return this;\n }\n}\nexports.Statement = Statement;\n\n\n//# sourceURL=webpack://sqlitecloud/./lib/statement.js?"); +eval("\n//\n// protocol.ts - low level protocol handling for SQLiteCloud transport\n//\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.formatCommand = exports.popData = exports.parseRowsetChunks = exports.bufferEndsWith = exports.bufferStartsWith = exports.parseRowsetHeader = exports.parseArray = exports.parseError = exports.decompressBuffer = exports.parseCommandLength = exports.hasCommandLength = exports.ROWSET_CHUNKS_END = exports.CMD_ARRAY = exports.CMD_COMMAND = exports.CMD_COMPRESSED = exports.CMD_BLOB = exports.CMD_NULL = exports.CMD_JSON = exports.CMD_ROWSET_CHUNK = exports.CMD_ROWSET = exports.CMD_FLOAT = exports.CMD_INT = exports.CMD_ERROR = exports.CMD_ZEROSTRING = exports.CMD_STRING = void 0;\nconst types_1 = __webpack_require__(/*! ./types */ \"./lib/drivers/types.js\");\nconst rowset_1 = __webpack_require__(/*! ./rowset */ \"./lib/drivers/rowset.js\");\nconst lz4 = __webpack_require__(/*! lz4js */ \"./node_modules/lz4js/lz4.js\");\n// The server communicates with clients via commands defined in\n// SQLiteCloud Server Protocol (SCSP), see more at:\n// https://github.com/sqlitecloud/sdk/blob/master/PROTOCOL.md\nexports.CMD_STRING = '+';\nexports.CMD_ZEROSTRING = '!';\nexports.CMD_ERROR = '-';\nexports.CMD_INT = ':';\nexports.CMD_FLOAT = ',';\nexports.CMD_ROWSET = '*';\nexports.CMD_ROWSET_CHUNK = '/';\nexports.CMD_JSON = '#';\nexports.CMD_NULL = '_';\nexports.CMD_BLOB = '$';\nexports.CMD_COMPRESSED = '%';\nexports.CMD_COMMAND = '^';\nexports.CMD_ARRAY = '=';\n// const CMD_RAWJSON = '{'\n// const CMD_PUBSUB = '|'\n// const CMD_RECONNECT = '@'\n// To mark the end of the Rowset, the special string /LEN 0 0 0 is sent (LEN is always 6 in this case)\n// https://github.com/sqlitecloud/sdk/blob/master/PROTOCOL.md#scsp-rowset-chunk\nexports.ROWSET_CHUNKS_END = '/6 0 0 0 ';\n//\n// utility functions\n//\n/** Analyze first character to check if corresponding data type has LEN */\nfunction hasCommandLength(firstCharacter) {\n return firstCharacter == exports.CMD_INT || firstCharacter == exports.CMD_FLOAT || firstCharacter == exports.CMD_NULL ? false : true;\n}\nexports.hasCommandLength = hasCommandLength;\n/** Analyze a command with explict LEN and extract it */\nfunction parseCommandLength(data) {\n return parseInt(data.subarray(1, data.indexOf(' ')).toString('utf8'));\n}\nexports.parseCommandLength = parseCommandLength;\n/** Receive a compressed buffer, decompress with lz4, return buffer and datatype */\nfunction decompressBuffer(buffer) {\n const spaceIndex = buffer.indexOf(' ');\n buffer = buffer.subarray(spaceIndex + 1);\n // extract compressed size\n const compressedSize = parseInt(buffer.subarray(0, buffer.indexOf(' ') + 1).toString('utf8'));\n buffer = buffer.subarray(buffer.indexOf(' ') + 1);\n // extract decompressed size\n const decompressedSize = parseInt(buffer.subarray(0, buffer.indexOf(' ') + 1).toString('utf8'));\n buffer = buffer.subarray(buffer.indexOf(' ') + 1);\n // extract compressed dataType\n const dataType = buffer.subarray(0, 1).toString('utf8');\n const decompressedBuffer = Buffer.alloc(decompressedSize);\n const compressedBuffer = buffer.subarray(buffer.length - compressedSize);\n // lz4js library is javascript and doesn't have types so we silence the type check\n // eslint-disable-next-line\n const decompressionResult = lz4.decompressBlock(compressedBuffer, decompressedBuffer, 0, compressedSize, 0);\n buffer = Buffer.concat([buffer.subarray(0, buffer.length - compressedSize), decompressedBuffer]);\n if (decompressionResult <= 0 || decompressionResult !== decompressedSize) {\n throw new Error(`lz4 decompression error at offset ${decompressionResult}`);\n }\n return { buffer, dataType };\n}\nexports.decompressBuffer = decompressBuffer;\n/** Parse error message or extended error message */\nfunction parseError(buffer, spaceIndex) {\n const errorBuffer = buffer.subarray(spaceIndex + 1);\n const errorString = errorBuffer.toString('utf8');\n const parts = errorString.split(' ');\n let errorCodeStr = parts.shift() || '0'; // Default errorCode is '0' if not present\n let extErrCodeStr = '0'; // Default extended error code\n let offsetCodeStr = '-1'; // Default offset code\n // Split the errorCode by ':' to check for extended error codes\n const errorCodeParts = errorCodeStr.split(':');\n errorCodeStr = errorCodeParts[0];\n if (errorCodeParts.length > 1) {\n extErrCodeStr = errorCodeParts[1];\n if (errorCodeParts.length > 2) {\n offsetCodeStr = errorCodeParts[2];\n }\n }\n // Rest of the error string is the error message\n const errorMessage = parts.join(' ');\n // Parse error codes to integers safely, defaulting to 0 if NaN\n const errorCode = parseInt(errorCodeStr);\n const extErrCode = parseInt(extErrCodeStr);\n const offsetCode = parseInt(offsetCodeStr);\n // create an Error object and add the custom properties\n throw new types_1.SQLiteCloudError(errorMessage, {\n errorCode: errorCode.toString(),\n externalErrorCode: extErrCode.toString(),\n offsetCode\n });\n}\nexports.parseError = parseError;\n/** Parse an array of items (each of which will be parsed by type separately) */\nfunction parseArray(buffer, spaceIndex) {\n const parsedData = [];\n const array = buffer.subarray(spaceIndex + 1, buffer.length);\n const numberOfItems = parseInt(array.subarray(0, spaceIndex - 2).toString('utf8'));\n let arrayItems = array.subarray(array.indexOf(' ') + 1, array.length);\n for (let i = 0; i < numberOfItems; i++) {\n const { data, fwdBuffer: buffer } = popData(arrayItems);\n parsedData.push(data);\n arrayItems = buffer;\n }\n return parsedData;\n}\nexports.parseArray = parseArray;\n/** Parse header in a rowset or chunk of a chunked rowset */\nfunction parseRowsetHeader(buffer) {\n const index = parseInt(buffer.subarray(0, buffer.indexOf(':') + 1).toString());\n buffer = buffer.subarray(buffer.indexOf(':') + 1);\n // extract rowset header\n const { data, fwdBuffer } = popIntegers(buffer, 3);\n return {\n index,\n metadata: {\n version: data[0],\n numberOfRows: data[1],\n numberOfColumns: data[2],\n columns: []\n },\n fwdBuffer\n };\n}\nexports.parseRowsetHeader = parseRowsetHeader;\n/** Extract column names and, optionally, more metadata out of a rowset's header */\nfunction parseRowsetColumnsMetadata(buffer, metadata) {\n function popForward() {\n const { data, fwdBuffer: fwdBuffer } = popData(buffer); // buffer in parent scope\n buffer = fwdBuffer;\n return data;\n }\n for (let i = 0; i < metadata.numberOfColumns; i++) {\n metadata.columns.push({ name: popForward() });\n }\n // extract additional metadata if rowset has version 2\n if (metadata.version == 2) {\n for (let i = 0; i < metadata.numberOfColumns; i++)\n metadata.columns[i].type = popForward();\n for (let i = 0; i < metadata.numberOfColumns; i++)\n metadata.columns[i].database = popForward();\n for (let i = 0; i < metadata.numberOfColumns; i++)\n metadata.columns[i].table = popForward();\n for (let i = 0; i < metadata.numberOfColumns; i++)\n metadata.columns[i].column = popForward(); // original column name\n for (let i = 0; i < metadata.numberOfColumns; i++)\n metadata.columns[i].notNull = popForward();\n for (let i = 0; i < metadata.numberOfColumns; i++)\n metadata.columns[i].primaryKey = popForward();\n for (let i = 0; i < metadata.numberOfColumns; i++)\n metadata.columns[i].autoIncrement = popForward();\n }\n return buffer;\n}\n/** Parse a regular rowset (no chunks) */\nfunction parseRowset(buffer, spaceIndex) {\n buffer = buffer.subarray(spaceIndex + 1, buffer.length);\n const { metadata, fwdBuffer } = parseRowsetHeader(buffer);\n buffer = parseRowsetColumnsMetadata(fwdBuffer, metadata);\n // decode each rowset item\n const data = [];\n for (let j = 0; j < metadata.numberOfRows * metadata.numberOfColumns; j++) {\n const { data: rowData, fwdBuffer } = popData(buffer);\n data.push(rowData);\n buffer = fwdBuffer;\n }\n console.assert(data && data.length === metadata.numberOfRows * metadata.numberOfColumns, 'SQLiteCloudConnection.parseRowset - invalid rowset data');\n return new rowset_1.SQLiteCloudRowset(metadata, data);\n}\nfunction bufferStartsWith(buffer, prefix) {\n return buffer.length >= prefix.length && buffer.subarray(0, prefix.length).toString('utf8') === prefix;\n}\nexports.bufferStartsWith = bufferStartsWith;\nfunction bufferEndsWith(buffer, suffix) {\n return buffer.length >= suffix.length && buffer.subarray(buffer.length - suffix.length, buffer.length).toString('utf8') === suffix;\n}\nexports.bufferEndsWith = bufferEndsWith;\n/**\n * Parse a chunk of a chunked rowset command, eg:\n * *LEN 0:VERS NROWS NCOLS DATA\n * @see https://github.com/sqlitecloud/sdk/blob/master/PROTOCOL.md#scsp-rowset-chunk\n */\nfunction parseRowsetChunks(buffers) {\n let buffer = Buffer.concat(buffers);\n if (!bufferStartsWith(buffer, exports.CMD_ROWSET_CHUNK) || !bufferEndsWith(buffer, exports.ROWSET_CHUNKS_END)) {\n throw new Error('SQLiteCloudConnection.parseRowsetChunks - invalid chunks buffer');\n }\n let metadata = { version: 1, numberOfColumns: 0, numberOfRows: 0, columns: [] };\n const data = [];\n // validate and skip data type\n const dataType = buffer.subarray(0, 1).toString();\n console.assert(dataType === exports.CMD_ROWSET_CHUNK);\n buffer = buffer.subarray(buffer.indexOf(' ') + 1);\n while (true) {\n // chunk header, eg: 0:VERS NROWS NCOLS\n const { index: chunkIndex, metadata: chunkMetadata, fwdBuffer } = parseRowsetHeader(buffer);\n buffer = fwdBuffer;\n // first chunk? extract columns metadata\n if (chunkIndex === 1) {\n metadata = chunkMetadata;\n buffer = parseRowsetColumnsMetadata(buffer, metadata);\n }\n else {\n metadata.numberOfRows += chunkMetadata.numberOfRows;\n }\n // extract single rowset row\n for (let k = 0; k < chunkMetadata.numberOfRows * metadata.numberOfColumns; k++) {\n const { data: itemData, fwdBuffer } = popData(buffer);\n data.push(itemData);\n buffer = fwdBuffer;\n }\n // no more chunks?\n if (bufferStartsWith(buffer, exports.ROWSET_CHUNKS_END)) {\n break;\n }\n }\n console.assert(data && data.length === metadata.numberOfRows * metadata.numberOfColumns, 'parseRowsetChunks - invalid rowset data');\n const rowset = new rowset_1.SQLiteCloudRowset(metadata, data);\n // console.debug(`parseRowsetChunks - ${rowset.numberOfRows} rows, ${rowset.numberOfColumns} columns`)\n return rowset;\n}\nexports.parseRowsetChunks = parseRowsetChunks;\n/** Pop one or more space separated integers from beginning of buffer, move buffer forward */\nfunction popIntegers(buffer, numberOfIntegers = 1) {\n const data = [];\n for (let i = 0; i < numberOfIntegers; i++) {\n const spaceIndex = buffer.indexOf(' ');\n data[i] = parseInt(buffer.subarray(0, spaceIndex).toString());\n buffer = buffer.subarray(spaceIndex + 1);\n }\n return { data, fwdBuffer: buffer };\n}\n/** Parse command, extract its data, return the data and the buffer moved to the first byte after the command */\nfunction popData(buffer) {\n function popResults(data) {\n const fwdBuffer = buffer.subarray(commandEnd);\n return { data, fwdBuffer };\n }\n // first character is the data type\n console.assert(buffer && buffer instanceof Buffer);\n const dataType = buffer.subarray(0, 1).toString('utf8');\n console.assert(dataType !== exports.CMD_COMPRESSED, \"Compressed data shouldn't be decompressed before parsing\");\n console.assert(dataType !== exports.CMD_ROWSET_CHUNK, 'Chunked data should be parsed by parseRowsetChunks');\n let spaceIndex = buffer.indexOf(' ');\n if (spaceIndex === -1) {\n spaceIndex = buffer.length - 1;\n }\n let commandEnd = -1;\n if (dataType === exports.CMD_INT || dataType === exports.CMD_FLOAT || dataType === exports.CMD_NULL) {\n commandEnd = spaceIndex + 1;\n }\n else {\n const commandLength = parseInt(buffer.subarray(1, spaceIndex).toString());\n commandEnd = spaceIndex + 1 + commandLength;\n }\n switch (dataType) {\n case exports.CMD_INT:\n return popResults(parseInt(buffer.subarray(1, spaceIndex).toString()));\n case exports.CMD_FLOAT:\n return popResults(parseFloat(buffer.subarray(1, spaceIndex).toString()));\n case exports.CMD_NULL:\n return popResults(null);\n case exports.CMD_STRING:\n return popResults(buffer.subarray(spaceIndex + 1, commandEnd).toString('utf8'));\n case exports.CMD_ZEROSTRING:\n return popResults(buffer.subarray(spaceIndex + 1, commandEnd - 1).toString('utf8'));\n case exports.CMD_COMMAND:\n return popResults(buffer.subarray(spaceIndex + 1, commandEnd).toString('utf8'));\n case exports.CMD_JSON:\n return popResults(JSON.parse(buffer.subarray(spaceIndex + 1, commandEnd).toString('utf8')));\n case exports.CMD_BLOB:\n return popResults(buffer.subarray(spaceIndex + 1, commandEnd));\n case exports.CMD_ARRAY:\n return popResults(parseArray(buffer, spaceIndex));\n case exports.CMD_ROWSET:\n return popResults(parseRowset(buffer, spaceIndex));\n case exports.CMD_ERROR:\n parseError(buffer, spaceIndex); // throws custom error\n break;\n }\n throw new TypeError(`Data type: ${dataType} is not defined in SCSP`);\n}\nexports.popData = popData;\n/** Format a command to be sent via SCSP protocol */\nfunction formatCommand(command) {\n const commandLength = Buffer.byteLength(command, 'utf-8');\n return `+${commandLength} ${command}`;\n}\nexports.formatCommand = formatCommand;\n\n\n//# sourceURL=webpack://sqlitecloud/./lib/drivers/protocol.js?"); /***/ }), -/***/ "./lib/transport-tls.js": +/***/ "./lib/drivers/queue.js": /*!******************************!*\ - !*** ./lib/transport-tls.js ***! + !*** ./lib/drivers/queue.js ***! \******************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; +eval("\n//\n// queue.ts - simple task queue used to linearize async operations\n//\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.OperationsQueue = void 0;\nclass OperationsQueue {\n constructor() {\n this.queue = [];\n this.isProcessing = false;\n }\n /** Add operations to the queue, process immediately if possible, else wait for previous operations to complete */\n enqueue(operation) {\n this.queue.push(operation);\n if (!this.isProcessing) {\n this.processNext();\n }\n }\n /** Clear the queue */\n clear() {\n this.queue = [];\n this.isProcessing = false;\n }\n /** Process the next operation in the queue */\n processNext() {\n if (this.queue.length === 0) {\n this.isProcessing = false;\n return;\n }\n this.isProcessing = true;\n const operation = this.queue.shift();\n operation === null || operation === void 0 ? void 0 : operation(() => {\n // could receive (error) => { ...\n // if (error) {\n // console.warn('OperationQueue.processNext - error in operation', error)\n // }\n // process the next operation in the queue\n this.processNext();\n });\n }\n}\nexports.OperationsQueue = OperationsQueue;\n\n\n//# sourceURL=webpack://sqlitecloud/./lib/drivers/queue.js?"); + +/***/ }), + +/***/ "./lib/drivers/rowset.js": +/*!*******************************!*\ + !*** ./lib/drivers/rowset.js ***! + \*******************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { "use strict"; -eval("\n/**\n * transport-tls.ts - handles low level communication with sqlitecloud server via tls socket and binary protocol\n */\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.TlsSocketTransport = void 0;\nconst types_1 = __webpack_require__(/*! ./types */ \"./lib/types.js\");\nconst rowset_1 = __webpack_require__(/*! ./rowset */ \"./lib/rowset.js\");\nconst connection_1 = __webpack_require__(/*! ./connection */ \"./lib/connection.js\");\nconst connection_2 = __webpack_require__(/*! ./connection */ \"./lib/connection.js\");\nconst tls_1 = __importDefault(__webpack_require__(/*! tls */ \"?f22e\"));\nconst lz4 = __webpack_require__(/*! lz4js */ \"./node_modules/lz4js/lz4.js\");\n/**\n * The server communicates with clients via commands defined\n * in the SQLiteCloud Server Protocol (SCSP), see more at:\n * https://github.com/sqlitecloud/sdk/blob/master/PROTOCOL.md\n */\nconst CMD_STRING = '+';\nconst CMD_ZEROSTRING = '!';\nconst CMD_ERROR = '-';\nconst CMD_INT = ':';\nconst CMD_FLOAT = ',';\nconst CMD_ROWSET = '*';\nconst CMD_ROWSET_CHUNK = '/';\nconst CMD_JSON = '#';\nconst CMD_NULL = '_';\nconst CMD_BLOB = '$';\nconst CMD_COMPRESSED = '%';\nconst CMD_COMMAND = '^';\nconst CMD_ARRAY = '=';\n// const CMD_RAWJSON = '{'\n// const CMD_PUBSUB = '|'\n// const CMD_RECONNECT = '@'\n/**\n * Implementation of SQLiteCloudConnection that connects directly to the database via tls socket and raw, binary protocol.\n * SQLiteCloud low-level connection, will do messaging, handle socket, authentication, etc.\n * A connection socket is established when the connection is created and closed when the connection is closed.\n * All operations are serialized by waiting for any pending operations to complete. Once a connection is closed,\n * it cannot be reopened and you must create a new connection.\n */\nclass TlsSocketTransport {\n /** True if connection is open */\n get connected() {\n return !!this.socket;\n }\n /* Opens a connection with the server and sends the initialization commands. Will throw in case of errors. */\n connect(config, callback) {\n // connection established while we were waiting in line?\n console.assert(!this.connected, 'Connection already established');\n // clear all listeners and call done in the operations queue\n const finish = error => {\n if (this.socket) {\n this.socket.removeAllListeners('data');\n this.socket.removeAllListeners('error');\n this.socket.removeAllListeners('close');\n if (error) {\n this.close();\n }\n }\n };\n this.config = config;\n // connect to tls socket, initialize connection, setup event handlers\n this.socket = tls_1.default.connect(this.config.port, this.config.host, this.config.tlsOptions, () => {\n var _a;\n if (!((_a = this.socket) === null || _a === void 0 ? void 0 : _a.authorized)) {\n const anonimizedError = (0, connection_2.anonimizeError)(this.socket.authorizationError);\n console.error('Connection was not authorized', anonimizedError);\n this.close();\n finish(new types_1.SQLiteCloudError('Connection was not authorized', { cause: anonimizedError }));\n }\n else {\n // the connection was closed before it was even opened,\n // eg. client closed the connection before the server accepted it\n if (this.socket === null) {\n finish(new types_1.SQLiteCloudError('Connection was closed before it was done opening'));\n return;\n }\n // send initialization commands\n console.assert(this.socket, 'Connection already closed');\n const commands = (0, connection_1.getInitializationCommands)(config);\n this.processCommands(commands, error => {\n if (error && this.socket) {\n this.close();\n }\n if (callback) {\n callback === null || callback === void 0 ? void 0 : callback.call(this, error);\n callback = undefined;\n }\n finish(error);\n });\n }\n });\n this.socket.on('close', () => {\n this.socket = null;\n finish(new types_1.SQLiteCloudError('Connection was closed'));\n });\n this.socket.once('error', (error) => {\n console.error('Connection error', error);\n finish(new types_1.SQLiteCloudError('Connection error', { cause: error }));\n });\n return this;\n }\n /** Will send a command immediately (no queueing), return the rowset/result or throw an error */\n processCommands(commands, callback) {\n var _a, _b, _c;\n // connection needs to be established?\n if (!this.socket) {\n callback === null || callback === void 0 ? void 0 : callback.call(this, new types_1.SQLiteCloudError('Connection not established', { errorCode: 'ERR_CONNECTION_NOT_ESTABLISHED' }));\n return this;\n }\n // compose commands following SCPC protocol\n commands = formatCommand(commands);\n let buffer = Buffer.alloc(0);\n const rowsetChunks = [];\n const startedOn = new Date();\n // define what to do if an answer does not arrive within the set timeout\n let socketTimeout;\n // clear all listeners and call done in the operations queue\n const finish = (error, result) => {\n clearTimeout(socketTimeout);\n if (this.socket) {\n this.socket.removeAllListeners('data');\n this.socket.removeAllListeners('error');\n this.socket.removeAllListeners('close');\n }\n if (callback) {\n callback === null || callback === void 0 ? void 0 : callback.call(this, error, result);\n callback = undefined;\n }\n };\n // define the Promise that waits for the server response\n const readData = (data) => {\n var _a, _b;\n try {\n // on first ondata event, dataType is read from data, on subsequent ondata event, is read from buffer that is the concatanations of data received on each ondata event\n let dataType = buffer.length === 0 ? data.subarray(0, 1).toString() : buffer.subarray(0, 1).toString('utf8');\n buffer = Buffer.concat([buffer, data]);\n const commandLength = hasCommandLength(dataType);\n if (commandLength) {\n const commandLength = parseCommandLength(buffer);\n const hasReceivedEntireCommand = buffer.length - buffer.indexOf(' ') - 1 >= commandLength ? true : false;\n if (hasReceivedEntireCommand) {\n if ((_a = this.config) === null || _a === void 0 ? void 0 : _a.verbose) {\n let bufferString = buffer.toString('utf8');\n if (bufferString.length > 1000) {\n bufferString = bufferString.substring(0, 100) + '...' + bufferString.substring(bufferString.length - 40);\n }\n // const elapsedMs = new Date().getTime() - startedOn.getTime()\n // console.debug(`Receive: ${bufferString} - ${elapsedMs}ms`)\n }\n // need to decompress this buffer before decoding?\n if (dataType === CMD_COMPRESSED) {\n ;\n ({ buffer, dataType } = decompressBuffer(buffer));\n }\n if (dataType !== CMD_ROWSET_CHUNK) {\n (_b = this.socket) === null || _b === void 0 ? void 0 : _b.off('data', readData);\n const { data } = popData(buffer);\n finish(null, data);\n }\n else {\n // @ts-expect-error\n // check if rowset received the ending chunk\n if (data.subarray(data.indexOf(' ') + 1, data.length).toString() === '0 0 0 ') {\n const parsedData = parseRowsetChunks(rowsetChunks);\n finish === null || finish === void 0 ? void 0 : finish.call(this, null, parsedData);\n }\n else {\n // no ending string? ask server for another chunk\n rowsetChunks.push(buffer);\n buffer = Buffer.alloc(0);\n // no longer need to ack the server\n // const okCommand = formatCommand('OK')\n // this.socket?.write(okCommand)\n }\n }\n }\n }\n else {\n // command with no explicit len so make sure that the final character is a space\n const lastChar = buffer.subarray(buffer.length - 1, buffer.length).toString('utf8');\n if (lastChar == ' ') {\n const { data } = popData(buffer);\n finish(null, data);\n }\n }\n }\n catch (error) {\n console.assert(error instanceof Error);\n if (error instanceof Error) {\n finish(error);\n }\n }\n };\n (_a = this.socket) === null || _a === void 0 ? void 0 : _a.once('close', () => {\n finish(new types_1.SQLiteCloudError('Connection was closed', { cause: (0, connection_2.anonimizeCommand)(commands) }));\n });\n (_b = this.socket) === null || _b === void 0 ? void 0 : _b.write(commands, 'utf8', () => {\n var _a, _b;\n socketTimeout = setTimeout(() => {\n const timeoutError = new types_1.SQLiteCloudError('Request timed out', { cause: (0, connection_2.anonimizeCommand)(commands) });\n // console.debug(`Request timed out, config.timeout is ${this.config?.timeout as number}ms`, timeoutError)\n finish(timeoutError);\n }, (_a = this.config) === null || _a === void 0 ? void 0 : _a.timeout);\n (_b = this.socket) === null || _b === void 0 ? void 0 : _b.on('data', readData);\n });\n (_c = this.socket) === null || _c === void 0 ? void 0 : _c.once('error', (error) => {\n console.error('Socket error', error);\n this.close();\n finish(new types_1.SQLiteCloudError('Socket error', { cause: (0, connection_2.anonimizeError)(error) }));\n });\n return this;\n }\n /** Disconnect from server, release connection. */\n close() {\n console.assert(this.socket !== null, 'TlsSocketTransport.close - connection already closed');\n if (this.socket) {\n this.socket.destroy();\n this.socket = null;\n }\n this.socket = undefined;\n return this;\n }\n}\nexports.TlsSocketTransport = TlsSocketTransport;\n//\n// utility functions\n//\n/** Analyze first character to check if corresponding data type has LEN */\nfunction hasCommandLength(firstCharacter) {\n return firstCharacter == CMD_INT || firstCharacter == CMD_FLOAT || firstCharacter == CMD_NULL ? false : true;\n}\n/** Analyze a command with explict LEN and extract it */\nfunction parseCommandLength(data) {\n return parseInt(data.subarray(1, data.indexOf(' ')).toString('utf8'));\n}\n/** Receive a compressed buffer, decompress with lz4, return buffer and datatype */\nfunction decompressBuffer(buffer) {\n const spaceIndex = buffer.indexOf(' ');\n buffer = buffer.subarray(spaceIndex + 1);\n // extract compressed size\n const compressedSize = parseInt(buffer.subarray(0, buffer.indexOf(' ') + 1).toString('utf8'));\n buffer = buffer.subarray(buffer.indexOf(' ') + 1);\n // extract decompressed size\n const decompressedSize = parseInt(buffer.subarray(0, buffer.indexOf(' ') + 1).toString('utf8'));\n buffer = buffer.subarray(buffer.indexOf(' ') + 1);\n // extract compressed dataType\n const dataType = buffer.subarray(0, 1).toString('utf8');\n const decompressedBuffer = Buffer.alloc(decompressedSize);\n const compressedBuffer = buffer.subarray(buffer.length - compressedSize);\n // lz4js library is javascript and doesn't have types so we silence the type check\n // eslint-disable-next-line\n const decompressionResult = lz4.decompressBlock(compressedBuffer, decompressedBuffer, 0, compressedSize, 0);\n buffer = Buffer.concat([buffer.subarray(0, buffer.length - compressedSize), decompressedBuffer]);\n if (decompressionResult <= 0 || decompressionResult !== decompressedSize) {\n throw new Error(`lz4 decompression error at offset ${decompressionResult}`);\n }\n return { buffer, dataType: dataType };\n}\n/** Parse error message or extended error message */\nfunction parseError(buffer, spaceIndex) {\n const errorBuffer = buffer.subarray(spaceIndex + 1);\n const errorString = errorBuffer.toString('utf8');\n const parts = errorString.split(' ');\n let errorCodeStr = parts.shift() || '0'; // Default errorCode is '0' if not present\n let extErrCodeStr = '0'; // Default extended error code\n let offsetCodeStr = '-1'; // Default offset code\n // Split the errorCode by ':' to check for extended error codes\n const errorCodeParts = errorCodeStr.split(':');\n errorCodeStr = errorCodeParts[0];\n if (errorCodeParts.length > 1) {\n extErrCodeStr = errorCodeParts[1];\n if (errorCodeParts.length > 2) {\n offsetCodeStr = errorCodeParts[2];\n }\n }\n // Rest of the error string is the error message\n const errorMessage = parts.join(' ');\n // Parse error codes to integers safely, defaulting to 0 if NaN\n const errorCode = parseInt(errorCodeStr);\n const extErrCode = parseInt(extErrCodeStr);\n const offsetCode = parseInt(offsetCodeStr);\n // create an Error object and add the custom properties\n throw new types_1.SQLiteCloudError(errorMessage, {\n errorCode: errorCode.toString(),\n externalErrorCode: extErrCode.toString(),\n offsetCode\n });\n}\n/** Parse an array of items (each of which will be parsed by type separately) */\nfunction parseArray(buffer, spaceIndex) {\n const parsedData = [];\n const array = buffer.subarray(spaceIndex + 1, buffer.length);\n const numberOfItems = parseInt(array.subarray(0, spaceIndex - 2).toString('utf8'));\n let arrayItems = array.subarray(array.indexOf(' ') + 1, array.length);\n for (let i = 0; i < numberOfItems; i++) {\n const { data, fwdBuffer: buffer } = popData(arrayItems);\n parsedData.push(data);\n arrayItems = buffer;\n }\n return parsedData;\n}\n/** Parse header in a rowset or chunk of a chunked rowset */\nfunction parseRowsetHeader(buffer) {\n const index = parseInt(buffer.subarray(0, buffer.indexOf(':') + 1).toString());\n buffer = buffer.subarray(buffer.indexOf(':') + 1);\n // extract rowset header\n const { data, fwdBuffer } = popIntegers(buffer, 3);\n return {\n index,\n metadata: {\n version: data[0],\n numberOfRows: data[1],\n numberOfColumns: data[2],\n columns: []\n },\n fwdBuffer\n };\n}\n/** Extract column names and, optionally, more metadata out of a rowset's header */\nfunction parseRowsetColumnsMetadata(buffer, metadata) {\n function popForward() {\n const { data, fwdBuffer: fwdBuffer } = popData(buffer); // buffer in parent scope\n buffer = fwdBuffer;\n return data;\n }\n for (let i = 0; i < metadata.numberOfColumns; i++) {\n metadata.columns.push({ name: popForward() });\n }\n // extract additional metadata if rowset has version 2\n if (metadata.version == 2) {\n for (let i = 0; i < metadata.numberOfColumns; i++)\n metadata.columns[i].type = popForward();\n for (let i = 0; i < metadata.numberOfColumns; i++)\n metadata.columns[i].database = popForward();\n for (let i = 0; i < metadata.numberOfColumns; i++)\n metadata.columns[i].table = popForward();\n for (let i = 0; i < metadata.numberOfColumns; i++)\n metadata.columns[i].column = popForward(); // original column name\n for (let i = 0; i < metadata.numberOfColumns; i++)\n metadata.columns[i].notNull = popForward();\n for (let i = 0; i < metadata.numberOfColumns; i++)\n metadata.columns[i].primaryKey = popForward();\n for (let i = 0; i < metadata.numberOfColumns; i++)\n metadata.columns[i].autoIncrement = popForward();\n }\n return buffer;\n}\n/** Parse a regular rowset (no chunks) */\nfunction parseRowset(buffer, spaceIndex) {\n buffer = buffer.subarray(spaceIndex + 1, buffer.length);\n const { metadata, fwdBuffer } = parseRowsetHeader(buffer);\n buffer = parseRowsetColumnsMetadata(fwdBuffer, metadata);\n // decode each rowset item\n const data = [];\n for (let j = 0; j < metadata.numberOfRows * metadata.numberOfColumns; j++) {\n const { data: rowData, fwdBuffer } = popData(buffer);\n data.push(rowData);\n buffer = fwdBuffer;\n }\n console.assert(data && data.length === metadata.numberOfRows * metadata.numberOfColumns, 'SQLiteCloudConnection.parseRowset - invalid rowset data');\n return new rowset_1.SQLiteCloudRowset(metadata, data);\n}\n/**\n * Parse a chunk of a chunked rowset command, eg:\n * *LEN 0:VERS NROWS NCOLS DATA\n */\nfunction parseRowsetChunks(buffers) {\n let metadata = { version: 1, numberOfColumns: 0, numberOfRows: 0, columns: [] };\n const data = [];\n for (let i = 0; i < buffers.length; i++) {\n let buffer = buffers[i];\n // validate and skip data type\n const dataType = buffer.subarray(0, 1).toString();\n console.assert(dataType === CMD_ROWSET_CHUNK);\n buffer = buffer.subarray(buffer.indexOf(' ') + 1);\n // chunk header, eg: 0:VERS NROWS NCOLS\n const { index: chunkIndex, metadata: chunkMetadata, fwdBuffer } = parseRowsetHeader(buffer);\n buffer = fwdBuffer;\n // first chunk? extract columns metadata\n if (chunkIndex === 1) {\n metadata = chunkMetadata;\n buffer = parseRowsetColumnsMetadata(buffer, metadata);\n }\n else {\n metadata.numberOfRows += chunkMetadata.numberOfRows;\n }\n // extract single rowset row\n for (let k = 0; k < chunkMetadata.numberOfRows * metadata.numberOfColumns; k++) {\n const { data: itemData, fwdBuffer } = popData(buffer);\n data.push(itemData);\n buffer = fwdBuffer;\n }\n }\n console.assert(data && data.length === metadata.numberOfRows * metadata.numberOfColumns, 'SQLiteCloudConnection.parseRowsetChunks - invalid rowset data');\n return new rowset_1.SQLiteCloudRowset(metadata, data);\n}\n/** Pop one or more space separated integers from beginning of buffer, move buffer forward */\nfunction popIntegers(buffer, numberOfIntegers = 1) {\n const data = [];\n for (let i = 0; i < numberOfIntegers; i++) {\n const spaceIndex = buffer.indexOf(' ');\n data[i] = parseInt(buffer.subarray(0, spaceIndex).toString());\n buffer = buffer.subarray(spaceIndex + 1);\n }\n return { data, fwdBuffer: buffer };\n}\n/** Parse command, extract its data, return the data and the buffer moved to the first byte after the command */\nfunction popData(buffer) {\n function popResults(data) {\n const fwdBuffer = buffer.subarray(commandEnd);\n return { data, fwdBuffer };\n }\n // first character is the data type\n console.assert(buffer && buffer instanceof Buffer);\n const dataType = buffer.subarray(0, 1).toString('utf8');\n console.assert(dataType !== CMD_COMPRESSED, \"Compressed data shouldn't be decompressed before parsing\");\n console.assert(dataType !== CMD_ROWSET_CHUNK, 'Chunked data should be parsed by parseRowsetChunks');\n let spaceIndex = buffer.indexOf(' ');\n if (spaceIndex === -1) {\n spaceIndex = buffer.length - 1;\n }\n let commandEnd = -1;\n if (dataType === CMD_INT || dataType === CMD_FLOAT || dataType === CMD_NULL) {\n commandEnd = spaceIndex + 1;\n }\n else {\n const commandLength = parseInt(buffer.subarray(1, spaceIndex).toString());\n commandEnd = spaceIndex + 1 + commandLength;\n }\n switch (dataType) {\n case CMD_INT:\n return popResults(parseInt(buffer.subarray(1, spaceIndex).toString()));\n case CMD_FLOAT:\n return popResults(parseFloat(buffer.subarray(1, spaceIndex).toString()));\n case CMD_NULL:\n return popResults(null);\n case CMD_STRING:\n return popResults(buffer.subarray(spaceIndex + 1, commandEnd).toString('utf8'));\n case CMD_ZEROSTRING:\n return popResults(buffer.subarray(spaceIndex + 1, commandEnd - 1).toString('utf8'));\n case CMD_COMMAND:\n return popResults(buffer.subarray(spaceIndex + 1, commandEnd).toString('utf8'));\n case CMD_JSON:\n return popResults(JSON.parse(buffer.subarray(spaceIndex + 1, commandEnd).toString('utf8')));\n case CMD_BLOB:\n return popResults(buffer.subarray(spaceIndex + 1, commandEnd));\n case CMD_ARRAY:\n return popResults(parseArray(buffer, spaceIndex));\n case CMD_ROWSET:\n return popResults(parseRowset(buffer, spaceIndex));\n case CMD_ERROR:\n parseError(buffer, spaceIndex); // throws custom error\n break;\n }\n throw new TypeError(`Data type: ${dataType} is not defined in SCSP`);\n}\n/** Format a command to be sent via SCSP protocol */\nfunction formatCommand(command) {\n const commandLength = Buffer.byteLength(command, 'utf-8');\n return `+${commandLength} ${command}`;\n}\n\n\n//# sourceURL=webpack://sqlitecloud/./lib/transport-tls.js?"); +eval("\n//\n// rowset.ts\n//\nvar __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _SQLiteCloudRow_rowset, _SQLiteCloudRow_data, _SQLiteCloudRowset_metadata, _SQLiteCloudRowset_data;\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.SQLiteCloudRowset = exports.SQLiteCloudRow = void 0;\nconst types_1 = __webpack_require__(/*! ./types */ \"./lib/drivers/types.js\");\n/** A single row in a dataset with values accessible by column name */\nclass SQLiteCloudRow {\n constructor(rowset, columnsNames, data) {\n // rowset is private\n _SQLiteCloudRow_rowset.set(this, void 0);\n // data is private\n _SQLiteCloudRow_data.set(this, void 0);\n __classPrivateFieldSet(this, _SQLiteCloudRow_rowset, rowset, \"f\");\n __classPrivateFieldSet(this, _SQLiteCloudRow_data, data, \"f\");\n for (let i = 0; i < columnsNames.length; i++) {\n this[columnsNames[i]] = data[i];\n }\n }\n /** Returns the rowset that this row belongs to */\n // @ts-expect-error\n getRowset() {\n return __classPrivateFieldGet(this, _SQLiteCloudRow_rowset, \"f\");\n }\n /** Returns rowset data as a plain array of values */\n // @ts-expect-error\n getData() {\n return __classPrivateFieldGet(this, _SQLiteCloudRow_data, \"f\");\n }\n}\nexports.SQLiteCloudRow = SQLiteCloudRow;\n_SQLiteCloudRow_rowset = new WeakMap(), _SQLiteCloudRow_data = new WeakMap();\n/* A set of rows returned by a query */\nclass SQLiteCloudRowset extends Array {\n constructor(metadata, data) {\n super(metadata.numberOfRows);\n /** Metadata contains number of rows and columns, column names, types, etc. */\n _SQLiteCloudRowset_metadata.set(this, void 0);\n /** Actual data organized in rows */\n _SQLiteCloudRowset_data.set(this, void 0);\n // console.assert(data !== undefined && data.length === metadata.numberOfRows * metadata.numberOfColumns, 'Invalid rowset data')\n // console.assert(metadata !== undefined && metadata.columns.length === metadata.numberOfColumns, 'Invalid columns metadata')\n __classPrivateFieldSet(this, _SQLiteCloudRowset_metadata, metadata, \"f\");\n __classPrivateFieldSet(this, _SQLiteCloudRowset_data, data, \"f\");\n // adjust missing column names, duplicate column names, etc.\n const columnNames = this.columnsNames;\n for (let i = 0; i < metadata.numberOfColumns; i++) {\n if (!columnNames[i]) {\n columnNames[i] = `column_${i}`;\n }\n let j = 0;\n while (columnNames.findIndex((name, index) => index !== i && name === columnNames[i]) >= 0) {\n columnNames[i] = `${columnNames[i]}_${j}`;\n j++;\n }\n }\n for (let i = 0, start = 0; i < metadata.numberOfRows; i++, start += metadata.numberOfColumns) {\n this[i] = new SQLiteCloudRow(this, columnNames, data.slice(start, start + metadata.numberOfColumns));\n }\n }\n /**\n * Rowset version is 1 for a rowset with simple column names, 2 for extended metadata\n * @see https://github.com/sqlitecloud/sdk/blob/master/PROTOCOL.md\n */\n get version() {\n return __classPrivateFieldGet(this, _SQLiteCloudRowset_metadata, \"f\").version;\n }\n /** Number of rows in row set */\n get numberOfRows() {\n return __classPrivateFieldGet(this, _SQLiteCloudRowset_metadata, \"f\").numberOfRows;\n }\n /** Number of columns in row set */\n get numberOfColumns() {\n return __classPrivateFieldGet(this, _SQLiteCloudRowset_metadata, \"f\").numberOfColumns;\n }\n /** Array of columns names */\n get columnsNames() {\n return __classPrivateFieldGet(this, _SQLiteCloudRowset_metadata, \"f\").columns.map(column => column.name);\n }\n /** Get rowset metadata */\n get metadata() {\n return __classPrivateFieldGet(this, _SQLiteCloudRowset_metadata, \"f\");\n }\n /** Return value of item at given row and column */\n getItem(row, column) {\n if (row < 0 || row >= this.numberOfRows || column < 0 || column >= this.numberOfColumns) {\n throw new types_1.SQLiteCloudError(`This rowset has ${this.numberOfColumns} columns by ${this.numberOfRows} rows, requested column ${column} and row ${row} is invalid.`);\n }\n return __classPrivateFieldGet(this, _SQLiteCloudRowset_data, \"f\")[row * this.numberOfColumns + column];\n }\n /** Returns a subset of rows from this rowset */\n slice(start, end) {\n // validate and apply boundaries\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/slice\n start = start === undefined ? 0 : start < 0 ? this.numberOfRows + start : start;\n start = Math.min(Math.max(start, 0), this.numberOfRows);\n end = end === undefined ? this.numberOfRows : end < 0 ? this.numberOfRows + end : end;\n end = Math.min(Math.max(start, end), this.numberOfRows);\n const slicedMetadata = Object.assign(Object.assign({}, __classPrivateFieldGet(this, _SQLiteCloudRowset_metadata, \"f\")), { numberOfRows: end - start });\n const slicedData = __classPrivateFieldGet(this, _SQLiteCloudRowset_data, \"f\").slice(start * this.numberOfColumns, end * this.numberOfColumns);\n console.assert(slicedData && slicedData.length === slicedMetadata.numberOfRows * slicedMetadata.numberOfColumns, 'SQLiteCloudRowset.slice - invalid rowset data');\n return new SQLiteCloudRowset(slicedMetadata, slicedData);\n }\n map(fn) {\n const results = [];\n for (let i = 0; i < this.numberOfRows; i++) {\n const row = this[i];\n results.push(fn(row, i, this));\n }\n return results;\n }\n /** Returns an instance of SQLiteCloudRowset where rows have been filtered via given callback */\n filter(fn) {\n const filteredData = [];\n for (let i = 0; i < this.numberOfRows; i++) {\n const row = this[i];\n if (fn(row, i, this)) {\n filteredData.push(...__classPrivateFieldGet(this, _SQLiteCloudRowset_data, \"f\").slice(i * this.numberOfColumns, (i + 1) * this.numberOfColumns));\n }\n }\n return new SQLiteCloudRowset(Object.assign(Object.assign({}, __classPrivateFieldGet(this, _SQLiteCloudRowset_metadata, \"f\")), { numberOfRows: filteredData.length / this.numberOfColumns }), filteredData);\n }\n}\nexports.SQLiteCloudRowset = SQLiteCloudRowset;\n_SQLiteCloudRowset_metadata = new WeakMap(), _SQLiteCloudRowset_data = new WeakMap();\n\n\n//# sourceURL=webpack://sqlitecloud/./lib/drivers/rowset.js?"); /***/ }), -/***/ "./lib/transport-ws.js": -/*!*****************************!*\ - !*** ./lib/transport-ws.js ***! - \*****************************/ +/***/ "./lib/drivers/statement.js": +/*!**********************************!*\ + !*** ./lib/drivers/statement.js ***! + \**********************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; -eval("\n/**\n * transport-ws.ts - handles low level communication with sqlitecloud server via socket.io websocket\n */\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.WebSocketTransport = void 0;\nconst types_1 = __webpack_require__(/*! ./types */ \"./lib/types.js\");\nconst rowset_1 = __webpack_require__(/*! ./rowset */ \"./lib/rowset.js\");\nconst socket_io_client_1 = __webpack_require__(/*! socket.io-client */ \"./node_modules/socket.io-client/build/cjs/index.js\");\n/**\n * Implementation of TransportConnection that connects to the database indirectly\n * via SQLite Cloud Gateway, a socket.io based deamon that responds to sql query\n * requests by returning results and rowsets in json format. The gateway handles\n * connect, disconnect, retries, order of operations, timeouts, etc.\n */\nclass WebSocketTransport {\n /** True if connection is open */\n get connected() {\n return !!this.socket;\n }\n /* Opens a connection with the server and sends the initialization commands. Will throw in case of errors. */\n connect(config, callback) {\n var _a;\n try {\n // connection established while we were waiting in line?\n console.assert(!this.connected, 'Connection already established');\n if (!this.socket) {\n this.config = config;\n const connectionString = this.config.connectionString;\n const gatewayUrl = ((_a = this.config) === null || _a === void 0 ? void 0 : _a.gatewayUrl) || `ws://${this.config.host}:4000`;\n this.socket = (0, socket_io_client_1.io)(gatewayUrl, { auth: { token: connectionString } });\n }\n callback === null || callback === void 0 ? void 0 : callback.call(this, null);\n }\n catch (error) {\n callback === null || callback === void 0 ? void 0 : callback.call(this, error);\n }\n return this;\n }\n /** Will send a command immediately (no queueing), return the rowset/result or throw an error */\n processCommands(commands, callback) {\n // connection needs to be established?\n if (!this.socket) {\n callback === null || callback === void 0 ? void 0 : callback.call(this, new types_1.SQLiteCloudError('Connection not established', { errorCode: 'ERR_CONNECTION_NOT_ESTABLISHED' }));\n return this;\n }\n this.socket.emit('v1/sql', { sql: commands, row: 'array' }, (response) => {\n if (response === null || response === void 0 ? void 0 : response.error) {\n const error = new types_1.SQLiteCloudError(response.error.detail, Object.assign({}, response.error));\n callback === null || callback === void 0 ? void 0 : callback.call(this, error);\n }\n else {\n const { data, metadata } = response;\n if (data && metadata) {\n if (metadata.numberOfRows !== undefined && metadata.numberOfColumns !== undefined && metadata.columns !== undefined) {\n console.assert(Array.isArray(data), 'SQLiteCloudWebsocketConnection.processCommands - data is not an array');\n // we can recreate a SQLiteCloudRowset from the response which we know to be an array of arrays\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n const rowset = new rowset_1.SQLiteCloudRowset(metadata, data.flat());\n callback === null || callback === void 0 ? void 0 : callback.call(this, null, rowset);\n return;\n }\n }\n callback === null || callback === void 0 ? void 0 : callback.call(this, null, response === null || response === void 0 ? void 0 : response.data);\n }\n });\n return this;\n }\n /** Disconnect socket.io from server */\n close() {\n var _a;\n console.assert(this.socket !== null, 'WebsocketTransport.close - connection already closed');\n if (this.socket) {\n (_a = this.socket) === null || _a === void 0 ? void 0 : _a.close();\n this.socket = undefined;\n }\n this.socket = undefined;\n return this;\n }\n}\nexports.WebSocketTransport = WebSocketTransport;\n\n\n//# sourceURL=webpack://sqlitecloud/./lib/transport-ws.js?"); +eval("\n/**\n * statement.ts\n */\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.Statement = void 0;\nconst utilities_1 = __webpack_require__(/*! ./utilities */ \"./lib/drivers/utilities.js\");\n/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\n/** A statement generated by Database.prepare used to prepare SQL with ? bindings */\nclass Statement {\n constructor(database, sql, ...params) {\n const { args, callback } = (0, utilities_1.popCallback)(params);\n this._database = database;\n this._sql = sql;\n if ((args === null || args === void 0 ? void 0 : args.length) > 0) {\n this.bind(...args, callback);\n }\n else {\n callback === null || callback === void 0 ? void 0 : callback.call(this, null);\n }\n }\n /**\n * Binds parameters to the prepared statement and calls the callback when done\n * or when an error occurs. The function returns the Statement object to allow\n * for function chaining. The first and only argument to the callback is null\n * when binding was successful, otherwise it is the error object. Binding parameters\n * with this function completely resets the statement object and row cursor and\n * removes all previously bound parameters, if any. Currently bound parameters\n * are escaped client side and turned into literals before being executed on the server.\n */\n bind(...params) {\n const { args, callback } = (0, utilities_1.popCallback)(params);\n try {\n this._preparedSql = (0, utilities_1.prepareSql)(this._sql, ...args);\n if (callback) {\n callback.call(this, null);\n }\n }\n catch (error) {\n this._preparedSql = undefined;\n if (callback) {\n callback.call(this, error);\n }\n }\n return this;\n }\n run(...params) {\n const { args, callback } = (0, utilities_1.popCallback)(params || []);\n if ((args === null || args === void 0 ? void 0 : args.length) > 0) {\n // apply new bindings then execute\n this.bind(...args, (error) => {\n if (error) {\n callback === null || callback === void 0 ? void 0 : callback.call(this, error);\n }\n else {\n this._database.run(this._preparedSql || '', callback);\n }\n });\n }\n else {\n // execute prepared sql with same bindings\n this._database.run(this._preparedSql || '', callback);\n }\n return this;\n }\n get(...params) {\n const { args, callback } = (0, utilities_1.popCallback)(params || []);\n if ((args === null || args === void 0 ? void 0 : args.length) > 0) {\n // apply new bindings then execute\n this.bind(...args, (error) => {\n if (error) {\n callback === null || callback === void 0 ? void 0 : callback.call(this, error);\n }\n else {\n this._database.get(this._preparedSql || '', callback);\n }\n });\n }\n else {\n // execute prepared sql with same bindings\n this._database.get(this._preparedSql || '', callback);\n }\n return this;\n }\n all(...params) {\n const { args, callback } = (0, utilities_1.popCallback)(params || []);\n if ((args === null || args === void 0 ? void 0 : args.length) > 0) {\n // apply new bindings then execute\n this.bind(...args, (error) => {\n if (error) {\n callback === null || callback === void 0 ? void 0 : callback.call(this, error);\n }\n else {\n this._database.all(this._preparedSql || '', callback);\n }\n });\n }\n else {\n // execute prepared sql with same bindings\n this._database.all(this._preparedSql || '', callback);\n }\n return this;\n }\n each(...params) {\n const { args, callback, complete } = (0, utilities_1.popCallback)(params);\n if ((args === null || args === void 0 ? void 0 : args.length) > 0) {\n // apply new bindings then execute\n this.bind(...args, (error) => {\n if (error) {\n callback === null || callback === void 0 ? void 0 : callback.call(this, error);\n }\n else {\n this._database.each(this._preparedSql || '', callback, complete);\n }\n });\n }\n else {\n // execute prepared sql with same bindings\n this._database.each(this._preparedSql || '', callback, complete);\n }\n return this;\n }\n}\nexports.Statement = Statement;\n\n\n//# sourceURL=webpack://sqlitecloud/./lib/drivers/statement.js?"); /***/ }), -/***/ "./lib/types.js": -/*!**********************!*\ - !*** ./lib/types.js ***! - \**********************/ +/***/ "./lib/drivers/types.js": +/*!******************************!*\ + !*** ./lib/drivers/types.js ***! + \******************************/ /***/ ((__unused_webpack_module, exports) => { "use strict"; -eval("\n/**\n * types.ts - shared types and interfaces\n */\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.SQLiteCloudArrayType = exports.SQLiteCloudError = void 0;\n/** Custom error reported by SQLiteCloud drivers */\nclass SQLiteCloudError extends Error {\n constructor(message, args) {\n super(message);\n this.name = 'SQLiteCloudError';\n if (args) {\n Object.assign(this, args);\n }\n }\n}\nexports.SQLiteCloudError = SQLiteCloudError;\n/**\n * Certain responses include arrays with various types of metadata.\n * The first entry is always an array type from this list. This enum\n * is called SQCLOUD_ARRAY_TYPE in the C API.\n */\nvar SQLiteCloudArrayType;\n(function (SQLiteCloudArrayType) {\n SQLiteCloudArrayType[SQLiteCloudArrayType[\"ARRAY_TYPE_SQLITE_EXEC\"] = 10] = \"ARRAY_TYPE_SQLITE_EXEC\";\n SQLiteCloudArrayType[SQLiteCloudArrayType[\"ARRAY_TYPE_DB_STATUS\"] = 11] = \"ARRAY_TYPE_DB_STATUS\";\n SQLiteCloudArrayType[SQLiteCloudArrayType[\"ARRAY_TYPE_METADATA\"] = 12] = \"ARRAY_TYPE_METADATA\";\n SQLiteCloudArrayType[SQLiteCloudArrayType[\"ARRAY_TYPE_VM_STEP\"] = 20] = \"ARRAY_TYPE_VM_STEP\";\n SQLiteCloudArrayType[SQLiteCloudArrayType[\"ARRAY_TYPE_VM_COMPILE\"] = 21] = \"ARRAY_TYPE_VM_COMPILE\";\n SQLiteCloudArrayType[SQLiteCloudArrayType[\"ARRAY_TYPE_VM_STEP_ONE\"] = 22] = \"ARRAY_TYPE_VM_STEP_ONE\";\n SQLiteCloudArrayType[SQLiteCloudArrayType[\"ARRAY_TYPE_VM_SQL\"] = 23] = \"ARRAY_TYPE_VM_SQL\";\n SQLiteCloudArrayType[SQLiteCloudArrayType[\"ARRAY_TYPE_VM_STATUS\"] = 24] = \"ARRAY_TYPE_VM_STATUS\";\n SQLiteCloudArrayType[SQLiteCloudArrayType[\"ARRAY_TYPE_VM_LIST\"] = 25] = \"ARRAY_TYPE_VM_LIST\";\n SQLiteCloudArrayType[SQLiteCloudArrayType[\"ARRAY_TYPE_BACKUP_INIT\"] = 40] = \"ARRAY_TYPE_BACKUP_INIT\";\n SQLiteCloudArrayType[SQLiteCloudArrayType[\"ARRAY_TYPE_BACKUP_STEP\"] = 41] = \"ARRAY_TYPE_BACKUP_STEP\";\n SQLiteCloudArrayType[SQLiteCloudArrayType[\"ARRAY_TYPE_BACKUP_END\"] = 42] = \"ARRAY_TYPE_BACKUP_END\";\n SQLiteCloudArrayType[SQLiteCloudArrayType[\"ARRAY_TYPE_SQLITE_STATUS\"] = 50] = \"ARRAY_TYPE_SQLITE_STATUS\"; // used in sqlite_status\n})(SQLiteCloudArrayType = exports.SQLiteCloudArrayType || (exports.SQLiteCloudArrayType = {}));\n\n\n//# sourceURL=webpack://sqlitecloud/./lib/types.js?"); +eval("\n/**\n * types.ts - shared types and interfaces\n */\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.SQLiteCloudArrayType = exports.SQLiteCloudError = exports.DEFAULT_PORT = exports.DEFAULT_TIMEOUT = void 0;\n/** Default timeout value for queries */\nexports.DEFAULT_TIMEOUT = 300 * 1000;\n/** Default tls connection port */\nexports.DEFAULT_PORT = 9960;\n/** Custom error reported by SQLiteCloud drivers */\nclass SQLiteCloudError extends Error {\n constructor(message, args) {\n super(message);\n this.name = 'SQLiteCloudError';\n if (args) {\n Object.assign(this, args);\n }\n }\n}\nexports.SQLiteCloudError = SQLiteCloudError;\n/**\n * Certain responses include arrays with various types of metadata.\n * The first entry is always an array type from this list. This enum\n * is called SQCLOUD_ARRAY_TYPE in the C API.\n */\nvar SQLiteCloudArrayType;\n(function (SQLiteCloudArrayType) {\n SQLiteCloudArrayType[SQLiteCloudArrayType[\"ARRAY_TYPE_SQLITE_EXEC\"] = 10] = \"ARRAY_TYPE_SQLITE_EXEC\";\n SQLiteCloudArrayType[SQLiteCloudArrayType[\"ARRAY_TYPE_DB_STATUS\"] = 11] = \"ARRAY_TYPE_DB_STATUS\";\n SQLiteCloudArrayType[SQLiteCloudArrayType[\"ARRAY_TYPE_METADATA\"] = 12] = \"ARRAY_TYPE_METADATA\";\n SQLiteCloudArrayType[SQLiteCloudArrayType[\"ARRAY_TYPE_VM_STEP\"] = 20] = \"ARRAY_TYPE_VM_STEP\";\n SQLiteCloudArrayType[SQLiteCloudArrayType[\"ARRAY_TYPE_VM_COMPILE\"] = 21] = \"ARRAY_TYPE_VM_COMPILE\";\n SQLiteCloudArrayType[SQLiteCloudArrayType[\"ARRAY_TYPE_VM_STEP_ONE\"] = 22] = \"ARRAY_TYPE_VM_STEP_ONE\";\n SQLiteCloudArrayType[SQLiteCloudArrayType[\"ARRAY_TYPE_VM_SQL\"] = 23] = \"ARRAY_TYPE_VM_SQL\";\n SQLiteCloudArrayType[SQLiteCloudArrayType[\"ARRAY_TYPE_VM_STATUS\"] = 24] = \"ARRAY_TYPE_VM_STATUS\";\n SQLiteCloudArrayType[SQLiteCloudArrayType[\"ARRAY_TYPE_VM_LIST\"] = 25] = \"ARRAY_TYPE_VM_LIST\";\n SQLiteCloudArrayType[SQLiteCloudArrayType[\"ARRAY_TYPE_BACKUP_INIT\"] = 40] = \"ARRAY_TYPE_BACKUP_INIT\";\n SQLiteCloudArrayType[SQLiteCloudArrayType[\"ARRAY_TYPE_BACKUP_STEP\"] = 41] = \"ARRAY_TYPE_BACKUP_STEP\";\n SQLiteCloudArrayType[SQLiteCloudArrayType[\"ARRAY_TYPE_BACKUP_END\"] = 42] = \"ARRAY_TYPE_BACKUP_END\";\n SQLiteCloudArrayType[SQLiteCloudArrayType[\"ARRAY_TYPE_SQLITE_STATUS\"] = 50] = \"ARRAY_TYPE_SQLITE_STATUS\"; // used in sqlite_status\n})(SQLiteCloudArrayType = exports.SQLiteCloudArrayType || (exports.SQLiteCloudArrayType = {}));\n\n\n//# sourceURL=webpack://sqlitecloud/./lib/drivers/types.js?"); /***/ }), -/***/ "./lib/utilities.js": -/*!**************************!*\ - !*** ./lib/utilities.js ***! - \**************************/ +/***/ "./lib/drivers/utilities.js": +/*!**********************************!*\ + !*** ./lib/drivers/utilities.js ***! + \**********************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; -eval("\n//\n// utilities.ts - utility methods to manipulate SQL statements\n//\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.parseBoolean = exports.parseConnectionString = exports.popCallback = exports.prepareSql = exports.escapeSqlParameter = exports.isNode = exports.isBrowser = void 0;\nconst types_1 = __webpack_require__(/*! ./types */ \"./lib/types.js\");\n//\n// determining running environment, thanks to browser-or-node\n// https://www.npmjs.com/package/browser-or-node\n//\nexports.isBrowser = typeof window !== 'undefined' && typeof window.document !== 'undefined';\nexports.isNode = typeof process !== 'undefined' && process.versions != null && process.versions.node != null;\n//\n// utility methods\n//\n/** Takes a generic value and escapes it so it can replace ? as a binding in a prepared SQL statement */\nfunction escapeSqlParameter(param) {\n if (param === null || param === undefined) {\n return 'NULL';\n }\n if (typeof param === 'string') {\n // replace single quote with two single quotes\n param = param.replace(/'/g, \"''\");\n return `'${param}'`;\n }\n if (typeof param === 'number') {\n return param.toString();\n }\n if (typeof param === 'boolean') {\n return param ? '1' : '0';\n }\n // serialize buffer as X'...' hex encoded string\n if (Buffer.isBuffer(param)) {\n return `X'${param.toString('hex')}'`;\n }\n if (typeof param === 'object') {\n // serialize json then escape single quotes\n let json = JSON.stringify(param);\n json = json.replace(/'/g, \"''\");\n return `'${json}'`;\n }\n throw new types_1.SQLiteCloudError(`Unsupported parameter type: ${typeof param}`);\n}\nexports.escapeSqlParameter = escapeSqlParameter;\n/** Take a sql statement and replaces ? or $named parameters that are properly serialized and escaped. */\nfunction prepareSql(sql, ...params) {\n // parameters where passed as an array of parameters?\n if ((params === null || params === void 0 ? void 0 : params.length) === 1 && Array.isArray(params[0])) {\n params = params[0];\n }\n // replace ? or ?idx parameters passed as args or as an array\n let parameterIndex = 1;\n let preparedSql = sql.replace(/\\?(\\d+)?/g, (match, matchIndex) => {\n const index = matchIndex ? parseInt(matchIndex) : parameterIndex;\n parameterIndex++;\n let sqlParameter;\n if (params[0] && typeof params[0] === 'object' && !(params[0] instanceof Buffer)) {\n sqlParameter = params[0][index];\n }\n if (!sqlParameter) {\n if (index > params.length) {\n throw new types_1.SQLiteCloudError('Not enough parameters');\n }\n sqlParameter = params[index - 1];\n }\n return sqlParameter !== null && sqlParameter !== undefined ? escapeSqlParameter(sqlParameter) : 'NULL';\n });\n // replace $named or :named parameters passed as an object\n if ((params === null || params === void 0 ? void 0 : params.length) === 1 && params[0] && typeof params[0] === 'object') {\n const namedParams = params[0];\n for (const [paramKey, param] of Object.entries(namedParams)) {\n const firstChar = paramKey.charAt(0);\n if (firstChar == '$' || firstChar == ':' || firstChar == '@') {\n const escapedParam = escapeSqlParameter(param);\n preparedSql = preparedSql.replace(new RegExp(`\\\\${paramKey}`, 'g'), escapedParam);\n }\n }\n }\n return preparedSql;\n}\nexports.prepareSql = prepareSql;\n/**\n * Many of the methods in our API may contain a callback as their last argument.\n * This method will take the arguments array passed to the method and return an object\n * containing the arguments array with the callbacks removed (if any), and the callback itself.\n * If there are multiple callbacks, the first one is returned as 'callback' and the last one\n * as 'completeCallback'.\n */\nfunction popCallback(args) {\n const remaining = args;\n // at least 1 callback?\n if (args && args.length > 0 && typeof args[args.length - 1] === 'function') {\n // at least 2 callbacks?\n if (args.length > 1 && typeof args[args.length - 2] === 'function') {\n return { args: remaining.slice(0, -2), callback: args[args.length - 2], complete: args[args.length - 1] };\n }\n return { args: remaining.slice(0, -1), callback: args[args.length - 1] };\n }\n return { args: remaining };\n}\nexports.popCallback = popCallback;\n/** Parse connectionString like sqlitecloud://username:password@host:port/database?option1=xxx&option2=xxx into its components */\nfunction parseConnectionString(connectionString) {\n try {\n // The URL constructor throws a TypeError if the URL is not valid.\n // in spite of having the same structure as a regular url\n // protocol://username:password@host:port/database?option1=xxx&option2=xxx)\n // the sqlitecloud: protocol is not recognized by the URL constructor in browsers\n // so we need to replace it with https: to make it work\n const knownProtocolUrl = connectionString.replace('sqlitecloud:', 'https:');\n const url = new URL(knownProtocolUrl);\n const options = {};\n url.searchParams.forEach((value, key) => {\n options[key] = value;\n });\n const config = Object.assign({ username: url.username, password: url.password, host: url.hostname, port: url.port ? parseInt(url.port) : undefined }, options);\n const database = url.pathname.replace('/', ''); // pathname is database name, remove the leading slash\n if (database) {\n config.database = database;\n }\n return config;\n }\n catch (error) {\n throw new types_1.SQLiteCloudError(`Invalid connection string: ${connectionString}`);\n }\n}\nexports.parseConnectionString = parseConnectionString;\n/** Returns true if value is 1 or true */\nfunction parseBoolean(value) {\n if (typeof value === 'string') {\n return value.toLowerCase() === 'true' || value === '1';\n }\n return value ? true : false;\n}\nexports.parseBoolean = parseBoolean;\n\n\n//# sourceURL=webpack://sqlitecloud/./lib/utilities.js?"); +eval("\n//\n// utilities.ts - utility methods to manipulate SQL statements\n//\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.parseBoolean = exports.parseConnectionString = exports.validateConfiguration = exports.popCallback = exports.prepareSql = exports.escapeSqlParameter = exports.getInitializationCommands = exports.anonimizeError = exports.anonimizeCommand = exports.isNode = exports.isBrowser = void 0;\nconst types_1 = __webpack_require__(/*! ./types */ \"./lib/drivers/types.js\");\n//\n// determining running environment, thanks to browser-or-node\n// https://www.npmjs.com/package/browser-or-node\n//\nexports.isBrowser = typeof window !== 'undefined' && typeof window.document !== 'undefined';\nexports.isNode = typeof process !== 'undefined' && process.versions != null && process.versions.node != null;\n//\n// utility methods\n//\n/** Messages going to the server are sometimes logged when error conditions occour and need to be stripped of user credentials */\nfunction anonimizeCommand(message) {\n // hide password in AUTH command if needed\n message = message.replace(/USER \\S+/, 'USER ******');\n message = message.replace(/PASSWORD \\S+?(?=;)/, 'PASSWORD ******');\n message = message.replace(/HASH \\S+?(?=;)/, 'HASH ******');\n return message;\n}\nexports.anonimizeCommand = anonimizeCommand;\n/** Strip message code in error of user credentials */\nfunction anonimizeError(error) {\n if (error === null || error === void 0 ? void 0 : error.message) {\n error.message = anonimizeCommand(error.message);\n }\n return error;\n}\nexports.anonimizeError = anonimizeError;\n/** Initialization commands sent to database when connection is established */\nfunction getInitializationCommands(config) {\n // first user authentication, then all other commands\n let commands = `AUTH USER ${config.username || ''} ${config.passwordHashed ? 'HASH' : 'PASSWORD'} ${config.password || ''}; `;\n if (config.database) {\n if (config.createDatabase && !config.dbMemory) {\n commands += `CREATE DATABASE ${config.database} IF NOT EXISTS; `;\n }\n commands += `USE DATABASE ${config.database}; `;\n }\n if (config.compression) {\n commands += 'SET CLIENT KEY COMPRESSION TO 1; ';\n }\n if (config.nonlinearizable) {\n commands += 'SET CLIENT KEY NONLINEARIZABLE TO 1; ';\n }\n if (config.noBlob) {\n commands += 'SET CLIENT KEY NOBLOB TO 1; ';\n }\n if (config.maxData) {\n commands += `SET CLIENT KEY MAXDATA TO ${config.maxData}; `;\n }\n if (config.maxRows) {\n commands += `SET CLIENT KEY MAXROWS TO ${config.maxRows}; `;\n }\n if (config.maxRowset) {\n commands += `SET CLIENT KEY MAXROWSET TO ${config.maxRowset}; `;\n }\n return commands;\n}\nexports.getInitializationCommands = getInitializationCommands;\n/** Takes a generic value and escapes it so it can replace ? as a binding in a prepared SQL statement */\nfunction escapeSqlParameter(param) {\n if (param === null || param === undefined) {\n return 'NULL';\n }\n if (typeof param === 'string') {\n // replace single quote with two single quotes\n param = param.replace(/'/g, \"''\");\n return `'${param}'`;\n }\n if (typeof param === 'number') {\n return param.toString();\n }\n if (typeof param === 'boolean') {\n return param ? '1' : '0';\n }\n // serialize buffer as X'...' hex encoded string\n if (Buffer.isBuffer(param)) {\n return `X'${param.toString('hex')}'`;\n }\n if (typeof param === 'object') {\n // serialize json then escape single quotes\n let json = JSON.stringify(param);\n json = json.replace(/'/g, \"''\");\n return `'${json}'`;\n }\n throw new types_1.SQLiteCloudError(`Unsupported parameter type: ${typeof param}`);\n}\nexports.escapeSqlParameter = escapeSqlParameter;\n/** Take a sql statement and replaces ? or $named parameters that are properly serialized and escaped. */\nfunction prepareSql(sql, ...params) {\n // parameters where passed as an array of parameters?\n if ((params === null || params === void 0 ? void 0 : params.length) === 1 && Array.isArray(params[0])) {\n params = params[0];\n }\n // replace ? or ?idx parameters passed as args or as an array\n let parameterIndex = 1;\n let preparedSql = sql.replace(/\\?(\\d+)?/g, (match, matchIndex) => {\n const index = matchIndex ? parseInt(matchIndex) : parameterIndex;\n parameterIndex++;\n let sqlParameter;\n if (params[0] && typeof params[0] === 'object' && !(params[0] instanceof Buffer)) {\n sqlParameter = params[0][index];\n }\n if (!sqlParameter) {\n if (index > params.length) {\n throw new types_1.SQLiteCloudError('Not enough parameters');\n }\n sqlParameter = params[index - 1];\n }\n return sqlParameter !== null && sqlParameter !== undefined ? escapeSqlParameter(sqlParameter) : 'NULL';\n });\n // replace $named or :named parameters passed as an object\n if ((params === null || params === void 0 ? void 0 : params.length) === 1 && params[0] && typeof params[0] === 'object') {\n const namedParams = params[0];\n for (const [paramKey, param] of Object.entries(namedParams)) {\n const firstChar = paramKey.charAt(0);\n if (firstChar == '$' || firstChar == ':' || firstChar == '@') {\n const escapedParam = escapeSqlParameter(param);\n preparedSql = preparedSql.replace(new RegExp(`\\\\${paramKey}`, 'g'), escapedParam);\n }\n }\n }\n return preparedSql;\n}\nexports.prepareSql = prepareSql;\n/**\n * Many of the methods in our API may contain a callback as their last argument.\n * This method will take the arguments array passed to the method and return an object\n * containing the arguments array with the callbacks removed (if any), and the callback itself.\n * If there are multiple callbacks, the first one is returned as 'callback' and the last one\n * as 'completeCallback'.\n */\nfunction popCallback(args) {\n const remaining = args;\n // at least 1 callback?\n if (args && args.length > 0 && typeof args[args.length - 1] === 'function') {\n // at least 2 callbacks?\n if (args.length > 1 && typeof args[args.length - 2] === 'function') {\n return { args: remaining.slice(0, -2), callback: args[args.length - 2], complete: args[args.length - 1] };\n }\n return { args: remaining.slice(0, -1), callback: args[args.length - 1] };\n }\n return { args: remaining };\n}\nexports.popCallback = popCallback;\n//\n// configuration validation\n//\n/** Validate configuration, apply defaults, throw if something is missing or misconfigured */\nfunction validateConfiguration(config) {\n console.assert(config, 'SQLiteCloudConnection.validateConfiguration - missing config');\n if (config.connectionString) {\n config = Object.assign(Object.assign(Object.assign({}, config), parseConnectionString(config.connectionString)), { connectionString: config.connectionString // keep original connection string\n });\n }\n // apply defaults where needed\n config.port || (config.port = types_1.DEFAULT_PORT);\n config.timeout = config.timeout && config.timeout > 0 ? config.timeout : types_1.DEFAULT_TIMEOUT;\n config.clientId || (config.clientId = 'SQLiteCloud');\n config.verbose = parseBoolean(config.verbose);\n config.noBlob = parseBoolean(config.noBlob);\n config.compression = parseBoolean(config.compression);\n config.createDatabase = parseBoolean(config.createDatabase);\n config.nonlinearizable = parseBoolean(config.nonlinearizable);\n config.insecure = parseBoolean(config.insecure);\n if (!config.username || !config.password || !config.host) {\n console.error('SQLiteCloudConnection.validateConfiguration - missing arguments', config);\n throw new types_1.SQLiteCloudError('The user, password and host arguments must be specified.', { errorCode: 'ERR_MISSING_ARGS' });\n }\n if (!config.connectionString) {\n // build connection string from configuration, values are already validated\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n config.connectionString = `sqlitecloud://${config.username}:${config.password}@${config.host}:${config.port}/${config.database}`;\n }\n return config;\n}\nexports.validateConfiguration = validateConfiguration;\n/** Parse connectionString like sqlitecloud://username:password@host:port/database?option1=xxx&option2=xxx into its components */\nfunction parseConnectionString(connectionString) {\n try {\n // The URL constructor throws a TypeError if the URL is not valid.\n // in spite of having the same structure as a regular url\n // protocol://username:password@host:port/database?option1=xxx&option2=xxx)\n // the sqlitecloud: protocol is not recognized by the URL constructor in browsers\n // so we need to replace it with https: to make it work\n const knownProtocolUrl = connectionString.replace('sqlitecloud:', 'https:');\n const url = new URL(knownProtocolUrl);\n const options = {};\n url.searchParams.forEach((value, key) => {\n options[key] = value;\n });\n const config = Object.assign({ username: url.username, password: url.password, host: url.hostname, port: url.port ? parseInt(url.port) : undefined }, options);\n const database = url.pathname.replace('/', ''); // pathname is database name, remove the leading slash\n if (database) {\n config.database = database;\n }\n return config;\n }\n catch (error) {\n throw new types_1.SQLiteCloudError(`Invalid connection string: ${connectionString}`);\n }\n}\nexports.parseConnectionString = parseConnectionString;\n/** Returns true if value is 1 or true */\nfunction parseBoolean(value) {\n if (typeof value === 'string') {\n return value.toLowerCase() === 'true' || value === '1';\n }\n return value ? true : false;\n}\nexports.parseBoolean = parseBoolean;\n\n\n//# sourceURL=webpack://sqlitecloud/./lib/drivers/utilities.js?"); + +/***/ }), + +/***/ "./lib/index.js": +/*!**********************!*\ + !*** ./lib/index.js ***! + \**********************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; +eval("\n//\n// index.ts - export drivers classes, utilities, types\n//\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.validateConfiguration = exports.parseConnectionString = exports.prepareSql = exports.escapeSqlParameter = exports.SQLiteCloudRow = exports.SQLiteCloudRowset = exports.SQLiteCloudError = exports.SQLiteCloudConnection = exports.Statement = exports.Database = void 0;\n// include ONLY packages used by drivers\n// do NOT include anything related to gateway or bun or express\n// connection-tls does not want/need to load on browser and is loaded dynamically by Database\n// connection-ws does not want/need to load on node and is loaded dynamically by Database\nvar database_1 = __webpack_require__(/*! ./drivers/database */ \"./lib/drivers/database.js\");\nObject.defineProperty(exports, \"Database\", ({ enumerable: true, get: function () { return database_1.Database; } }));\nvar statement_1 = __webpack_require__(/*! ./drivers/statement */ \"./lib/drivers/statement.js\");\nObject.defineProperty(exports, \"Statement\", ({ enumerable: true, get: function () { return statement_1.Statement; } }));\nvar connection_1 = __webpack_require__(/*! ./drivers/connection */ \"./lib/drivers/connection.js\");\nObject.defineProperty(exports, \"SQLiteCloudConnection\", ({ enumerable: true, get: function () { return connection_1.SQLiteCloudConnection; } }));\nvar types_1 = __webpack_require__(/*! ./drivers/types */ \"./lib/drivers/types.js\");\nObject.defineProperty(exports, \"SQLiteCloudError\", ({ enumerable: true, get: function () { return types_1.SQLiteCloudError; } }));\nvar rowset_1 = __webpack_require__(/*! ./drivers/rowset */ \"./lib/drivers/rowset.js\");\nObject.defineProperty(exports, \"SQLiteCloudRowset\", ({ enumerable: true, get: function () { return rowset_1.SQLiteCloudRowset; } }));\nObject.defineProperty(exports, \"SQLiteCloudRow\", ({ enumerable: true, get: function () { return rowset_1.SQLiteCloudRow; } }));\nvar utilities_1 = __webpack_require__(/*! ./drivers/utilities */ \"./lib/drivers/utilities.js\");\nObject.defineProperty(exports, \"escapeSqlParameter\", ({ enumerable: true, get: function () { return utilities_1.escapeSqlParameter; } }));\nObject.defineProperty(exports, \"prepareSql\", ({ enumerable: true, get: function () { return utilities_1.prepareSql; } }));\nObject.defineProperty(exports, \"parseConnectionString\", ({ enumerable: true, get: function () { return utilities_1.parseConnectionString; } }));\nObject.defineProperty(exports, \"validateConfiguration\", ({ enumerable: true, get: function () { return utilities_1.validateConfiguration; } }));\n\n\n//# sourceURL=webpack://sqlitecloud/./lib/index.js?"); /***/ }), @@ -189,7 +211,17 @@ eval("/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\n /***/ }), -/***/ "?f22e": +/***/ "?83b6": +/*!*********************!*\ + !*** net (ignored) ***! + \*********************/ +/***/ (() => { + +eval("/* (ignored) */\n\n//# sourceURL=webpack://sqlitecloud/net_(ignored)?"); + +/***/ }), + +/***/ "?4235": /*!*********************!*\ !*** tls (ignored) ***! \*********************/ diff --git a/public/sqlitecloud.drivers.js b/public/sqlitecloud.drivers.js new file mode 100644 index 0000000..6378d3e --- /dev/null +++ b/public/sqlitecloud.drivers.js @@ -0,0 +1 @@ +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.sqlitecloud=t():e.sqlitecloud=t()}(this,(()=>(()=>{var e={593:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.SQLiteCloudTlsConnection=void 0;const s=n(906),o=n(480),i=n(1),a=n(73),c=n(1),l=r(n(761)),u=r(n(59));class h extends o.SQLiteCloudConnection{get connected(){return!!this.socket}connectTransport(e,t){console.assert(!this.connected,"Connection already established");const n=e=>{this.socket&&(this.socket.removeAllListeners("data"),this.socket.removeAllListeners("error"),this.socket.removeAllListeners("close"),e&&this.close()),null==t||t.call(this,e)};this.config=e;const r=(0,a.getInitializationCommands)(e);if(e.insecure){const s={host:e.host,port:e.port};this.socket=l.default.connect(s,(()=>{console.warn(`TlsConnection.connectTransport - connected to ${e.host}:${e.port} using insecure protocol`),console.assert(this.socket,"Connection already closed"),this.transportCommands(r,(e=>{e&&this.socket&&this.close(),t&&(null==t||t.call(this,e),t=void 0),n(e)}))}))}else this.socket=u.default.connect(this.config.port,this.config.host,this.config.tlsOptions,(()=>{const e=this.socket;if(null==e?void 0:e.authorized){if(null===this.socket)return void n(new s.SQLiteCloudError("Connection was closed before it was done opening"));console.assert(this.socket,"Connection already closed"),this.transportCommands(r,(e=>{e&&this.socket&&this.close(),t&&(null==t||t.call(this,e),t=void 0),n(e)}))}else{const t=(0,a.anonimizeError)(e.authorizationError);console.error("Connection was not authorized",t),this.close(),n(new s.SQLiteCloudError("Connection was not authorized",{cause:t}))}}));return this.socket.on("close",(()=>{this.socket=null,n(new s.SQLiteCloudError("Connection was closed"))})),this.socket.once("error",(e=>{console.error("Connection error",e),n(new s.SQLiteCloudError("Connection error",{cause:e}))})),this}transportCommands(e,t){var n,r,o;if(!this.socket)return null==t||t.call(this,new s.SQLiteCloudError("Connection not established",{errorCode:"ERR_CONNECTION_NOT_ESTABLISHED"})),this;e=(0,i.formatCommand)(e);let l=Buffer.alloc(0);const u=[];let h;const d=(e,n)=>{clearTimeout(h),this.socket&&(this.socket.removeAllListeners("data"),this.socket.removeAllListeners("error"),this.socket.removeAllListeners("close")),t&&(null==t||t.call(this,e,n),t=void 0)},f=e=>{var t,n;try{let r=0===l.length?e.subarray(0,1).toString():l.subarray(0,1).toString("utf8");if(l=Buffer.concat([l,e]),(0,i.hasCommandLength)(r)){const e=(0,i.parseCommandLength)(l);if(l.length-l.indexOf(" ")-1>=e){if(null===(t=this.config)||void 0===t?void 0:t.verbose){let e=l.toString("utf8");e.length>1e3&&(e=e.substring(0,100)+"..."+e.substring(e.length-40))}if(r===i.CMD_COMPRESSED&&({buffer:l,dataType:r}=(0,i.decompressBuffer)(l)),r!==i.CMD_ROWSET_CHUNK){null===(n=this.socket)||void 0===n||n.off("data",f);const{data:e}=(0,i.popData)(l);d(null,e)}else if((0,i.bufferEndsWith)(l,i.ROWSET_CHUNKS_END)){u.push(l);const e=(0,c.parseRowsetChunks)(u);null==d||d.call(this,null,e)}else u.push(l),l=Buffer.alloc(0)}}else if(" "==l.subarray(l.length-1,l.length).toString("utf8")){const{data:e}=(0,i.popData)(l);d(null,e)}}catch(e){console.assert(e instanceof Error),e instanceof Error&&d(e)}};return null===(n=this.socket)||void 0===n||n.once("close",(()=>{d(new s.SQLiteCloudError("Connection was closed",{cause:(0,a.anonimizeCommand)(e)}))})),null===(r=this.socket)||void 0===r||r.write(e,"utf8",(()=>{var t,n;h=setTimeout((()=>{const t=new s.SQLiteCloudError("Request timed out",{cause:(0,a.anonimizeCommand)(e)});d(t)}),null===(t=this.config)||void 0===t?void 0:t.timeout),null===(n=this.socket)||void 0===n||n.on("data",f)})),null===(o=this.socket)||void 0===o||o.once("error",(e=>{console.error("Socket error",e),this.close(),d(new s.SQLiteCloudError("Socket error",{cause:(0,a.anonimizeError)(e)}))})),this}close(){return console.assert(null!==this.socket,"TlsConnection.close - connection already closed"),this.operations.clear(),this.socket&&(this.socket.destroy(),this.socket=null),this.socket=void 0,this}}t.SQLiteCloudTlsConnection=h,t.default=h},363:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.SQLiteCloudWebsocketConnection=void 0;const r=n(906),s=n(825),o=n(480),i=n(46);class a extends o.SQLiteCloudConnection{get connected(){return!!this.socket}connectTransport(e,t){var n;try{if(console.assert(!this.connected,"Connection already established"),!this.socket){this.config=e;const t=this.config.connectionString,r=(null===(n=this.config)||void 0===n?void 0:n.gatewayUrl)||`ws://${this.config.host}:4000`;this.socket=(0,i.io)(r,{auth:{token:t}})}null==t||t.call(this,null)}catch(e){null==t||t.call(this,e)}return this}transportCommands(e,t){return this.socket?(this.socket.emit("v1/sql",{sql:e,row:"array"},(e=>{if(null==e?void 0:e.error){const n=new r.SQLiteCloudError(e.error.detail,Object.assign({},e.error));null==t||t.call(this,n)}else{const{data:n,metadata:r}=e;if(n&&r&&void 0!==r.numberOfRows&&void 0!==r.numberOfColumns&&void 0!==r.columns){console.assert(Array.isArray(n),"SQLiteCloudWebsocketConnection.transportCommands - data is not an array");const e=new s.SQLiteCloudRowset(r,n.flat());return void(null==t||t.call(this,null,e))}null==t||t.call(this,null,null==e?void 0:e.data)}})),this):(null==t||t.call(this,new r.SQLiteCloudError("Connection not established",{errorCode:"ERR_CONNECTION_NOT_ESTABLISHED"})),this)}close(){var e;return console.assert(null!==this.socket,"SQLiteCloudWebsocketConnection.close - connection already closed"),this.socket&&(null===(e=this.socket)||void 0===e||e.close(),this.socket=void 0),this.operations.clear(),this.socket=void 0,this}}t.SQLiteCloudWebsocketConnection=a,t.default=a},480:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.SQLiteCloudConnection=void 0;const r=n(906),s=n(73),o=n(39),i=n(73);t.SQLiteCloudConnection=class{constructor(e,t){this.operations=new o.OperationsQueue,this.config="string"==typeof e?(0,s.validateConfiguration)({connectionString:e}):(0,s.validateConfiguration)(e),this.connect(t)}connect(e){return this.operations.enqueue((t=>{this.connectTransport(this.config,(n=>{n&&(console.error(`SQLiteCloudConnection.connect - error connecting ${this.config.host}:${this.config.port} ${n.toString()}`,n),this.close()),null==e||e.call(this,n||null),t(n)}))})),this}log(e,...t){this.config.verbose&&(e=(0,i.anonimizeCommand)(e),console.log(`${(new Date).toISOString()} ${this.config.clientId}: ${e}`,...t))}verbose(){this.config.verbose=!0}sendCommands(e,t){return this.operations.enqueue((n=>{if(!this.connected){const e=new r.SQLiteCloudError("Connection not established",{errorCode:"ERR_CONNECTION_NOT_ESTABLISHED"});null==t||t.call(this,e),n(e)}this.transportCommands(e,((e,r)=>{null==t||t.call(this,e,r),n(e)}))})),this}}},751:function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var s=Object.getOwnPropertyDescriptor(t,n);s&&!("get"in s?!t.__esModule:s.writable||s.configurable)||(s={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,s)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),s=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),o=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return s(t,e),t},i=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(s,o){function i(e){try{c(r.next(e))}catch(e){o(e)}}function a(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?s(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(i,a)}c((r=r.apply(e,t||[])).next())}))},a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Database=void 0;const c=n(825),l=n(906),u=n(73),h=n(880),d=a(n(729)),f=n(73);class p extends d.default{constructor(e,t,n){super(),this.connections=[],this.config="string"==typeof e?{connectionString:e}:e,"function"==typeof t&&(n=t,t=void 0),this.getConnection(((e,t)=>{n&&n.call(this,e)}))}getConnection(e){var t,r,s;(null===(t=this.connections)||void 0===t?void 0:t.length)>0?null==e||e.call(this,null,this.connections[0]):f.isBrowser||(null===(r=this.config)||void 0===r?void 0:r.useWebsocket)||(null===(s=this.config)||void 0===s?void 0:s.gatewayUrl)?Promise.resolve().then((()=>o(n(363)))).then((t=>{this.connections.push(new t.default(this.config,(t=>{t?this.handleError(this.connections[0],t,e):(console.assert,null==e||e.call(this,null,this.connections[0]),this.emitEvent("open"))})))})).catch((t=>{this.handleError(null,t,e)})):Promise.resolve().then((()=>o(n(593)))).then((t=>{this.connections.push(new t.default(this.config,(t=>{t?this.handleError(this.connections[0],t,e):(console.assert,null==e||e.call(this,null,this.connections[0]),this.emitEvent("open"))})))})).catch((t=>{this.handleError(null,t,e)}))}handleError(e,t,n){e&&(this.connections=this.connections.filter((t=>t!==e)),e.close()),n?n.call(this,t):this.emitEvent("error",t)}processContext(e){if(e&&Array.isArray(e)&&e.length>0&&e[0]===l.SQLiteCloudArrayType.ARRAY_TYPE_SQLITE_EXEC)return{lastID:e[2],changes:e[3],totalChanges:e[4],finalized:e[5]}}emitEvent(e,...t){setTimeout((()=>{this.emit(e,...t)}),0)}getConfiguration(){return JSON.parse(JSON.stringify(this.config))}verbose(){this.config.verbose=!0;for(const e of this.connections)e.verbose();return this}configure(e,t){return this}run(e,...t){const{args:n,callback:r}=(0,u.popCallback)(t),s=(null==n?void 0:n.length)>0?(0,u.prepareSql)(e,...n):e;return this.getConnection(((e,t)=>{e||!t?this.handleError(null,e,r):t.sendCommands(s,((e,n)=>{if(e)this.handleError(t,e,r);else{const e=this.processContext(n);null==r||r.call(e||this,null,e?void 0:n)}}))})),this}get(e,...t){const{args:n,callback:r}=(0,u.popCallback)(t),s=(null==n?void 0:n.length)>0?(0,u.prepareSql)(e,...n):e;return this.getConnection(((e,t)=>{e||!t?this.handleError(null,e,r):t.sendCommands(s,((e,n)=>{e?this.handleError(t,e,r):n&&n instanceof c.SQLiteCloudRowset&&n.length>0?null==r||r.call(this,null,n[0]):null==r||r.call(this,null)}))})),this}all(e,...t){const{args:n,callback:r}=(0,u.popCallback)(t),s=(null==n?void 0:n.length)>0?(0,u.prepareSql)(e,...n):e;return this.getConnection(((e,t)=>{e||!t?this.handleError(null,e,r):t.sendCommands(s,((e,n)=>{e?this.handleError(t,e,r):n&&n instanceof c.SQLiteCloudRowset?null==r||r.call(this,null,n):null==r||r.call(this,null)}))})),this}each(e,...t){const{args:n,callback:r,complete:s}=(0,u.popCallback)(t),o=(null==n?void 0:n.length)>0?(0,u.prepareSql)(e,...n):e;return this.getConnection(((e,t)=>{e||!t?this.handleError(null,e,r):t.sendCommands(o,((e,n)=>{if(e)this.handleError(t,e,r);else if(n&&n instanceof c.SQLiteCloudRowset){if(r)for(const e of n)r.call(this,null,e);s&&s.call(this,null,n.numberOfRows)}else null==r||r.call(this,new l.SQLiteCloudError("Invalid rowset"))}))})),this}prepare(e,...t){const{args:n,callback:r}=(0,u.popCallback)(t);return new h.Statement(this,e,...n,r)}exec(e,t){return this.getConnection(((n,r)=>{n||!r?this.handleError(null,n,t):r.sendCommands(e,((e,n)=>{if(e)this.handleError(r,e,t);else{const e=this.processContext(n);null==t||t.call(e||this,null)}}))})),this}close(e){var t;if((null===(t=this.connections)||void 0===t?void 0:t.length)>0)for(const e of this.connections)e.close();null==e||e.call(this,null),this.emitEvent("close")}loadExtension(e,t){return t?t.call(this,new Error("Database.loadExtension - Not implemented")):this.emitEvent("error",new Error("Database.loadExtension - Not implemented")),this}interrupt(){}sql(e,...t){return i(this,void 0,void 0,(function*(){let n="";if(Array.isArray(e)&&"raw"in e)e.forEach(((e,r)=>{n+=e+(r0?(0,u.prepareSql)(e,...t):e}return new Promise(((e,t)=>{this.getConnection(((r,s)=>{r||!s?t(r):s.sendCommands(n,((n,r)=>{if(n)t(n);else{const t=this.processContext(r);e(t||r)}}))}))}))}))}}t.Database=p},1:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.formatCommand=t.popData=t.parseRowsetChunks=t.bufferEndsWith=t.bufferStartsWith=t.parseRowsetHeader=t.parseArray=t.parseError=t.decompressBuffer=t.parseCommandLength=t.hasCommandLength=t.ROWSET_CHUNKS_END=t.CMD_ARRAY=t.CMD_COMMAND=t.CMD_COMPRESSED=t.CMD_BLOB=t.CMD_NULL=t.CMD_JSON=t.CMD_ROWSET_CHUNK=t.CMD_ROWSET=t.CMD_FLOAT=t.CMD_INT=t.CMD_ERROR=t.CMD_ZEROSTRING=t.CMD_STRING=void 0;const r=n(906),s=n(825),o=n(405);function i(e,t){const n=e.subarray(t+1).toString("utf8").split(" ");let s=n.shift()||"0",o="0",i="-1";const a=s.split(":");s=a[0],a.length>1&&(o=a[1],a.length>2&&(i=a[2]));const c=n.join(" "),l=parseInt(s),u=parseInt(o),h=parseInt(i);throw new r.SQLiteCloudError(c,{errorCode:l.toString(),externalErrorCode:u.toString(),offsetCode:h})}function a(e,t){const n=[],r=e.subarray(t+1,e.length),s=parseInt(r.subarray(0,t-2).toString("utf8"));let o=r.subarray(r.indexOf(" ")+1,r.length);for(let e=0;e=t.length&&e.subarray(0,t.length).toString("utf8")===t}function h(e,t){return e.length>=t.length&&e.subarray(e.length-t.length,e.length).toString("utf8")===t}function d(e){function n(t){return{data:t,fwdBuffer:e.subarray(u)}}console.assert(e&&e instanceof Buffer);const r=e.subarray(0,1).toString("utf8");console.assert(r!==t.CMD_COMPRESSED,"Compressed data shouldn't be decompressed before parsing"),console.assert(r!==t.CMD_ROWSET_CHUNK,"Chunked data should be parsed by parseRowsetChunks");let o=e.indexOf(" ");-1===o&&(o=e.length-1);let u=-1;if(r===t.CMD_INT||r===t.CMD_FLOAT||r===t.CMD_NULL)u=o+1;else{const t=parseInt(e.subarray(1,o).toString());u=o+1+t}switch(r){case t.CMD_INT:return n(parseInt(e.subarray(1,o).toString()));case t.CMD_FLOAT:return n(parseFloat(e.subarray(1,o).toString()));case t.CMD_NULL:return n(null);case t.CMD_STRING:return n(e.subarray(o+1,u).toString("utf8"));case t.CMD_ZEROSTRING:return n(e.subarray(o+1,u-1).toString("utf8"));case t.CMD_COMMAND:return n(e.subarray(o+1,u).toString("utf8"));case t.CMD_JSON:return n(JSON.parse(e.subarray(o+1,u).toString("utf8")));case t.CMD_BLOB:return n(e.subarray(o+1,u));case t.CMD_ARRAY:return n(a(e,o));case t.CMD_ROWSET:return n(function(e,t){e=e.subarray(t+1,e.length);const{metadata:n,fwdBuffer:r}=c(e);e=l(r,n);const o=[];for(let t=0;t{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.OperationsQueue=void 0,t.OperationsQueue=class{constructor(){this.queue=[],this.isProcessing=!1}enqueue(e){this.queue.push(e),this.isProcessing||this.processNext()}clear(){this.queue=[],this.isProcessing=!1}processNext(){if(0===this.queue.length)return void(this.isProcessing=!1);this.isProcessing=!0;const e=this.queue.shift();null==e||e((()=>{this.processNext()}))}}},825:function(e,t,n){"use strict";var r,s,o,i,a=this&&this.__classPrivateFieldSet||function(e,t,n,r,s){if("m"===r)throw new TypeError("Private method is not writable");if("a"===r&&!s)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!s:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===r?s.call(e,n):s?s.value=n:t.set(e,n),n},c=this&&this.__classPrivateFieldGet||function(e,t,n,r){if("a"===n&&!r)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!r:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===n?r:"a"===n?r.call(e):r?r.value:t.get(e)};Object.defineProperty(t,"__esModule",{value:!0}),t.SQLiteCloudRowset=t.SQLiteCloudRow=void 0;const l=n(906);class u{constructor(e,t,n){r.set(this,void 0),s.set(this,void 0),a(this,r,e,"f"),a(this,s,n,"f");for(let e=0;er!==t&&e===n[t]))>=0;)n[t]=`${n[t]}_${e}`,e++}for(let r=0,s=0;re.name))}get metadata(){return c(this,o,"f")}getItem(e,t){if(e<0||e>=this.numberOfRows||t<0||t>=this.numberOfColumns)throw new l.SQLiteCloudError(`This rowset has ${this.numberOfColumns} columns by ${this.numberOfRows} rows, requested column ${t} and row ${e} is invalid.`);return c(this,i,"f")[e*this.numberOfColumns+t]}slice(e,t){e=void 0===e?0:e<0?this.numberOfRows+e:e,e=Math.min(Math.max(e,0),this.numberOfRows),t=void 0===t?this.numberOfRows:t<0?this.numberOfRows+t:t,t=Math.min(Math.max(e,t),this.numberOfRows);const n=Object.assign(Object.assign({},c(this,o,"f")),{numberOfRows:t-e}),r=c(this,i,"f").slice(e*this.numberOfColumns,t*this.numberOfColumns);return console.assert(r&&r.length===n.numberOfRows*n.numberOfColumns,"SQLiteCloudRowset.slice - invalid rowset data"),new h(n,r)}map(e){const t=[];for(let n=0;n{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Statement=void 0;const r=n(73);t.Statement=class{constructor(e,t,...n){const{args:s,callback:o}=(0,r.popCallback)(n);this._database=e,this._sql=t,(null==s?void 0:s.length)>0?this.bind(...s,o):null==o||o.call(this,null)}bind(...e){const{args:t,callback:n}=(0,r.popCallback)(e);try{this._preparedSql=(0,r.prepareSql)(this._sql,...t),n&&n.call(this,null)}catch(e){this._preparedSql=void 0,n&&n.call(this,e)}return this}run(...e){const{args:t,callback:n}=(0,r.popCallback)(e||[]);return(null==t?void 0:t.length)>0?this.bind(...t,(e=>{e?null==n||n.call(this,e):this._database.run(this._preparedSql||"",n)})):this._database.run(this._preparedSql||"",n),this}get(...e){const{args:t,callback:n}=(0,r.popCallback)(e||[]);return(null==t?void 0:t.length)>0?this.bind(...t,(e=>{e?null==n||n.call(this,e):this._database.get(this._preparedSql||"",n)})):this._database.get(this._preparedSql||"",n),this}all(...e){const{args:t,callback:n}=(0,r.popCallback)(e||[]);return(null==t?void 0:t.length)>0?this.bind(...t,(e=>{e?null==n||n.call(this,e):this._database.all(this._preparedSql||"",n)})):this._database.all(this._preparedSql||"",n),this}each(...e){const{args:t,callback:n,complete:s}=(0,r.popCallback)(e);return(null==t?void 0:t.length)>0?this.bind(...t,(e=>{e?null==n||n.call(this,e):this._database.each(this._preparedSql||"",n,s)})):this._database.each(this._preparedSql||"",n,s),this}}},906:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.SQLiteCloudArrayType=t.SQLiteCloudError=t.DEFAULT_PORT=t.DEFAULT_TIMEOUT=void 0,t.DEFAULT_TIMEOUT=3e5,t.DEFAULT_PORT=9960;class n extends Error{constructor(e,t){super(e),this.name="SQLiteCloudError",t&&Object.assign(this,t)}}var r;t.SQLiteCloudError=n,(r=t.SQLiteCloudArrayType||(t.SQLiteCloudArrayType={}))[r.ARRAY_TYPE_SQLITE_EXEC=10]="ARRAY_TYPE_SQLITE_EXEC",r[r.ARRAY_TYPE_DB_STATUS=11]="ARRAY_TYPE_DB_STATUS",r[r.ARRAY_TYPE_METADATA=12]="ARRAY_TYPE_METADATA",r[r.ARRAY_TYPE_VM_STEP=20]="ARRAY_TYPE_VM_STEP",r[r.ARRAY_TYPE_VM_COMPILE=21]="ARRAY_TYPE_VM_COMPILE",r[r.ARRAY_TYPE_VM_STEP_ONE=22]="ARRAY_TYPE_VM_STEP_ONE",r[r.ARRAY_TYPE_VM_SQL=23]="ARRAY_TYPE_VM_SQL",r[r.ARRAY_TYPE_VM_STATUS=24]="ARRAY_TYPE_VM_STATUS",r[r.ARRAY_TYPE_VM_LIST=25]="ARRAY_TYPE_VM_LIST",r[r.ARRAY_TYPE_BACKUP_INIT=40]="ARRAY_TYPE_BACKUP_INIT",r[r.ARRAY_TYPE_BACKUP_STEP=41]="ARRAY_TYPE_BACKUP_STEP",r[r.ARRAY_TYPE_BACKUP_END=42]="ARRAY_TYPE_BACKUP_END",r[r.ARRAY_TYPE_SQLITE_STATUS=50]="ARRAY_TYPE_SQLITE_STATUS"},73:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.parseBoolean=t.parseConnectionString=t.validateConfiguration=t.popCallback=t.prepareSql=t.escapeSqlParameter=t.getInitializationCommands=t.anonimizeError=t.anonimizeCommand=t.isNode=t.isBrowser=void 0;const r=n(906);function s(e){return(e=(e=e.replace(/USER \S+/,"USER ******")).replace(/PASSWORD \S+?(?=;)/,"PASSWORD ******")).replace(/HASH \S+?(?=;)/,"HASH ******")}function o(e){if(null==e)return"NULL";if("string"==typeof e)return`'${e=e.replace(/'/g,"''")}'`;if("number"==typeof e)return e.toString();if("boolean"==typeof e)return e?"1":"0";if(Buffer.isBuffer(e))return`X'${e.toString("hex")}'`;if("object"==typeof e){let t=JSON.stringify(e);return t=t.replace(/'/g,"''"),`'${t}'`}throw new r.SQLiteCloudError("Unsupported parameter type: "+typeof e)}function i(e){try{const t=e.replace("sqlitecloud:","https:"),n=new URL(t),r={};n.searchParams.forEach(((e,t)=>{r[t]=e}));const s=Object.assign({username:n.username,password:n.password,host:n.hostname,port:n.port?parseInt(n.port):void 0},r),o=n.pathname.replace("/","");return o&&(s.database=o),s}catch(t){throw new r.SQLiteCloudError(`Invalid connection string: ${e}`)}}function a(e){return"string"==typeof e?"true"===e.toLowerCase()||"1"===e:!!e}t.isBrowser="undefined"!=typeof window&&void 0!==window.document,t.isNode="undefined"!=typeof process&&null!=process.versions&&null!=process.versions.node,t.anonimizeCommand=s,t.anonimizeError=function(e){return(null==e?void 0:e.message)&&(e.message=s(e.message)),e},t.getInitializationCommands=function(e){let t=`AUTH USER ${e.username||""} ${e.passwordHashed?"HASH":"PASSWORD"} ${e.password||""}; `;return e.database&&(e.createDatabase&&!e.dbMemory&&(t+=`CREATE DATABASE ${e.database} IF NOT EXISTS; `),t+=`USE DATABASE ${e.database}; `),e.compression&&(t+="SET CLIENT KEY COMPRESSION TO 1; "),e.nonlinearizable&&(t+="SET CLIENT KEY NONLINEARIZABLE TO 1; "),e.noBlob&&(t+="SET CLIENT KEY NOBLOB TO 1; "),e.maxData&&(t+=`SET CLIENT KEY MAXDATA TO ${e.maxData}; `),e.maxRows&&(t+=`SET CLIENT KEY MAXROWS TO ${e.maxRows}; `),e.maxRowset&&(t+=`SET CLIENT KEY MAXROWSET TO ${e.maxRowset}; `),t},t.escapeSqlParameter=o,t.prepareSql=function(e,...t){1===(null==t?void 0:t.length)&&Array.isArray(t[0])&&(t=t[0]);let n=1,s=e.replace(/\?(\d+)?/g,((e,s)=>{const i=s?parseInt(s):n;let a;if(n++,!t[0]||"object"!=typeof t[0]||t[0]instanceof Buffer||(a=t[0][i]),!a){if(i>t.length)throw new r.SQLiteCloudError("Not enough parameters");a=t[i-1]}return null!=a?o(a):"NULL"}));if(1===(null==t?void 0:t.length)&&t[0]&&"object"==typeof t[0]){const e=t[0];for(const[t,n]of Object.entries(e)){const e=t.charAt(0);if("$"==e||":"==e||"@"==e){const e=o(n);s=s.replace(new RegExp(`\\${t}`,"g"),e)}}}return s},t.popCallback=function(e){const t=e;return e&&e.length>0&&"function"==typeof e[e.length-1]?e.length>1&&"function"==typeof e[e.length-2]?{args:t.slice(0,-2),callback:e[e.length-2],complete:e[e.length-1]}:{args:t.slice(0,-1),callback:e[e.length-1]}:{args:t}},t.validateConfiguration=function(e){if(console.assert(e,"SQLiteCloudConnection.validateConfiguration - missing config"),e.connectionString&&(e=Object.assign(Object.assign(Object.assign({},e),i(e.connectionString)),{connectionString:e.connectionString})),e.port||(e.port=r.DEFAULT_PORT),e.timeout=e.timeout&&e.timeout>0?e.timeout:r.DEFAULT_TIMEOUT,e.clientId||(e.clientId="SQLiteCloud"),e.verbose=a(e.verbose),e.noBlob=a(e.noBlob),e.compression=a(e.compression),e.createDatabase=a(e.createDatabase),e.nonlinearizable=a(e.nonlinearizable),e.insecure=a(e.insecure),!e.username||!e.password||!e.host)throw console.error("SQLiteCloudConnection.validateConfiguration - missing arguments",e),new r.SQLiteCloudError("The user, password and host arguments must be specified.",{errorCode:"ERR_MISSING_ARGS"});return e.connectionString||(e.connectionString=`sqlitecloud://${e.username}:${e.password}@${e.host}:${e.port}/${e.database}`),e},t.parseConnectionString=i,t.parseBoolean=a},227:(e,t,n)=>{t.formatArgs=function(t){if(t[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+t[0]+(this.useColors?"%c ":" ")+"+"+e.exports.humanize(this.diff),!this.useColors)return;const n="color: "+this.color;t.splice(1,0,n,"color: inherit");let r=0,s=0;t[0].replace(/%[a-zA-Z%]/g,(e=>{"%%"!==e&&(r++,"%c"===e&&(s=r))})),t.splice(s,0,n)},t.save=function(e){try{e?t.storage.setItem("debug",e):t.storage.removeItem("debug")}catch(e){}},t.load=function(){let e;try{e=t.storage.getItem("debug")}catch(e){}return!e&&"undefined"!=typeof process&&"env"in process&&(e=process.env.DEBUG),e},t.useColors=function(){return!("undefined"==typeof window||!window.process||"renderer"!==window.process.type&&!window.process.__nwjs)||("undefined"==typeof navigator||!navigator.userAgent||!navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/))&&("undefined"!=typeof document&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||"undefined"!=typeof window&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)&&parseInt(RegExp.$1,10)>=31||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/))},t.storage=function(){try{return localStorage}catch(e){}}(),t.destroy=(()=>{let e=!1;return()=>{e||(e=!0,console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."))}})(),t.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"],t.log=console.debug||console.log||(()=>{}),e.exports=n(447)(t);const{formatters:r}=e.exports;r.j=function(e){try{return JSON.stringify(e)}catch(e){return"[UnexpectedJSONParseError]: "+e.message}}},447:(e,t,n)=>{e.exports=function(e){function t(e){let n,s,o,i=null;function a(...e){if(!a.enabled)return;const r=a,s=Number(new Date),o=s-(n||s);r.diff=o,r.prev=n,r.curr=s,n=s,e[0]=t.coerce(e[0]),"string"!=typeof e[0]&&e.unshift("%O");let i=0;e[0]=e[0].replace(/%([a-zA-Z%])/g,((n,s)=>{if("%%"===n)return"%";i++;const o=t.formatters[s];if("function"==typeof o){const t=e[i];n=o.call(r,t),e.splice(i,1),i--}return n})),t.formatArgs.call(r,e),(r.log||t.log).apply(r,e)}return a.namespace=e,a.useColors=t.useColors(),a.color=t.selectColor(e),a.extend=r,a.destroy=t.destroy,Object.defineProperty(a,"enabled",{enumerable:!0,configurable:!1,get:()=>null!==i?i:(s!==t.namespaces&&(s=t.namespaces,o=t.enabled(e)),o),set:e=>{i=e}}),"function"==typeof t.init&&t.init(a),a}function r(e,n){const r=t(this.namespace+(void 0===n?":":n)+e);return r.log=this.log,r}function s(e){return e.toString().substring(2,e.toString().length-2).replace(/\.\*\?$/,"*")}return t.debug=t,t.default=t,t.coerce=function(e){return e instanceof Error?e.stack||e.message:e},t.disable=function(){const e=[...t.names.map(s),...t.skips.map(s).map((e=>"-"+e))].join(",");return t.enable(""),e},t.enable=function(e){let n;t.save(e),t.namespaces=e,t.names=[],t.skips=[];const r=("string"==typeof e?e:"").split(/[\s,]+/),s=r.length;for(n=0;n{t[n]=e[n]})),t.names=[],t.skips=[],t.formatters={},t.selectColor=function(e){let n=0;for(let t=0;t{"use strict";var t=Object.prototype.hasOwnProperty,n="~";function r(){}function s(e,t,n){this.fn=e,this.context=t,this.once=n||!1}function o(e,t,r,o,i){if("function"!=typeof r)throw new TypeError("The listener must be a function");var a=new s(r,o||e,i),c=n?n+t:t;return e._events[c]?e._events[c].fn?e._events[c]=[e._events[c],a]:e._events[c].push(a):(e._events[c]=a,e._eventsCount++),e}function i(e,t){0==--e._eventsCount?e._events=new r:delete e._events[t]}function a(){this._events=new r,this._eventsCount=0}Object.create&&(r.prototype=Object.create(null),(new r).__proto__||(n=!1)),a.prototype.eventNames=function(){var e,r,s=[];if(0===this._eventsCount)return s;for(r in e=this._events)t.call(e,r)&&s.push(n?r.slice(1):r);return Object.getOwnPropertySymbols?s.concat(Object.getOwnPropertySymbols(e)):s},a.prototype.listeners=function(e){var t=n?n+e:e,r=this._events[t];if(!r)return[];if(r.fn)return[r.fn];for(var s=0,o=r.length,i=new Array(o);s{var r=n(887),s=n(325),o=65536,i=h(5<<20),a=function(){try{return new Uint32Array(o)}catch(n){for(var e=new Array(o),t=0;t>4&7;if(void 0===u[i])throw new Error("invalid block size "+i);var a=u[i];if(o)return s.readU64(e,t);t++;for(var h=0;;){var d=s.readU32(e,t);if(t+=4,h+=d&l?d&=2147483647:a,0===d)return h;r&&(t+=4),t+=d}},t.makeBuffer=h,t.decompressBlock=function(e,t,n,r,s){var o,i,a,c,l;for(a=n+r;n>4;if(h>0){if(15===h)for(;h+=e[n],255===e[n++];);for(c=n+h;n=a)break;if(o=15&u,i=e[n++]|e[n++]<<8,15===o)for(;o+=e[n],255===e[n++];);for(c=(l=s-i)+(o+=4);l=13)for(var p=67;n+4>>0;if(i=o[g=(g>>16^g)>>>0&65535]-1,o[g]=n+1,i<0||n-i>>>16>0||s.readU32(e,i)!==m)n+=p++>>6;else{for(p=67,u=n-a,l=n-i,i+=4,c=n+=4;n=15){for(t[h++]=240+y,f=u-15;f>=255;f-=255)t[h++]=255;t[h++]=f}else t[h++]=(u<<4)+y;for(var b=0;b>8,c>=15){for(f=c-15;f>=255;f-=255)t[h++]=255;t[h++]=f}a=n}}if(0===a)return 0;if((u=d-a)>=15){for(t[h++]=240,f=u-15;f>=255;f-=255)t[h++]=255;t[h++]=f}else t[h++]=u<<4;for(n=a;n>4&7;if(void 0===u[f])throw new Error("invalid block size");for(i&&(h+=8),h++;;){var p;if(p=s.readU32(e,h),h+=4,0===p)break;if(r&&(h+=4),0!=(p&l)){p&=2147483647;for(var m=0;m>8,l++;var h=u[7],d=e.length,f=0;for(function(e){for(var t=0;t0;){var p,m=d>h?h:d;if((p=t.compressBlock(e,i,f,m,a))>m||0===p){s.writeU32(n,l,2147483648|m),l+=4;for(var g=f+m;f{t.hashU32=function(e){return-1252372727^(e=(e=(e=374761393+(e=-949894596^(e=2127912214+(e|=0)+(e<<12)|0)^e>>>19)+(e<<5)|0)-744332180^e<<9)-42973499+(e<<3)|0)^e>>>16|0},t.readU64=function(e,t){var n=0;return n|=e[t++]<<0,n|=e[t++]<<8,n|=e[t++]<<16,n|=e[t++]<<24,n|=e[t++]<<32,n|=e[t++]<<40,(n|=e[t++]<<48)|e[t++]<<56},t.readU32=function(e,t){var n=0;return n|=e[t++]<<0,n|=e[t++]<<8,(n|=e[t++]<<16)|e[t++]<<24},t.writeU32=function(e,t,n){e[t++]=n>>0&255,e[t++]=n>>8&255,e[t++]=n>>16&255,e[t++]=n>>24&255},t.imul=function(e,t){var n=65535&e,r=65535&t;return n*r+((e>>>16)*r+n*(t>>>16)<<16)|0}},887:(e,t,n)=>{var r=n(325),s=2654435761,o=2246822519,i=3266489917,a=374761393;function c(e,t){return(e|=0)>>>(32-(t|=0)|0)|e<>>(32-t|0)|e<>>(t|=0)^e|0}function h(e,t,n,s,o){return l(r.imul(t,n)+e,s,o)}function d(e,t,n){return l(e+r.imul(t[n],a),11,s)}function f(e,t,n){return h(e,r.readU32(t,n),i,17,668265263)}function p(e,t,n){return[h(e[0],r.readU32(t,n+0),o,13,s),h(e[1],r.readU32(t,n+4),o,13,s),h(e[2],r.readU32(t,n+8),o,13,s),h(e[3],r.readU32(t,n+12),o,13,s)]}t.hash=function(e,t,n,l){var h,m;if(m=l,l>=16){for(h=[e+s+o,e+o,e,e-s];l>=16;)h=p(h,t,n),n+=16,l-=16;h=c(h[0],1)+c(h[1],7)+c(h[2],12)+c(h[3],18)+m}else h=e+a+l>>>0;for(;l>=4;)h=f(h,t,n),n+=4,l-=4;for(;l>0;)h=d(h,t,n),n++,l--;return(h=u(r.imul(u(r.imul(u(h,15),o),13),i),16))>>>0}},824:e=>{var t=1e3,n=60*t,r=60*n,s=24*r;function o(e,t,n,r){var s=t>=1.5*n;return Math.round(e/n)+" "+r+(s?"s":"")}e.exports=function(e,i){i=i||{};var a,c,l=typeof e;if("string"===l&&e.length>0)return function(e){if(!((e=String(e)).length>100)){var o=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(e);if(o){var i=parseFloat(o[1]);switch((o[2]||"ms").toLowerCase()){case"years":case"year":case"yrs":case"yr":case"y":return 315576e5*i;case"weeks":case"week":case"w":return 6048e5*i;case"days":case"day":case"d":return i*s;case"hours":case"hour":case"hrs":case"hr":case"h":return i*r;case"minutes":case"minute":case"mins":case"min":case"m":return i*n;case"seconds":case"second":case"secs":case"sec":case"s":return i*t;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return i;default:return}}}}(e);if("number"===l&&isFinite(e))return i.long?(a=e,(c=Math.abs(a))>=s?o(a,c,s,"day"):c>=r?o(a,c,r,"hour"):c>=n?o(a,c,n,"minute"):c>=t?o(a,c,t,"second"):a+" ms"):function(e){var o=Math.abs(e);return o>=s?Math.round(e/s)+"d":o>=r?Math.round(e/r)+"h":o>=n?Math.round(e/n)+"m":o>=t?Math.round(e/t)+"s":e+"ms"}(e);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(e))}},761:()=>{},59:()=>{},419:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.hasCORS=void 0;let n=!1;try{n="undefined"!=typeof XMLHttpRequest&&"withCredentials"in new XMLHttpRequest}catch(e){}t.hasCORS=n},754:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.decode=t.encode=void 0,t.encode=function(e){let t="";for(let n in e)e.hasOwnProperty(n)&&(t.length&&(t+="&"),t+=encodeURIComponent(n)+"="+encodeURIComponent(e[n]));return t},t.decode=function(e){let t={},n=e.split("&");for(let e=0,r=n.length;e{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.parse=void 0;const n=/^(?:(?![^:@\/?#]+:[^:@\/]*@)(http|https|ws|wss):\/\/)?((?:(([^:@\/?#]*)(?::([^:@\/?#]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/,r=["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"];t.parse=function(e){if(e.length>2e3)throw"URI too long";const t=e,s=e.indexOf("["),o=e.indexOf("]");-1!=s&&-1!=o&&(e=e.substring(0,s)+e.substring(s,o).replace(/:/g,";")+e.substring(o,e.length));let i=n.exec(e||""),a={},c=14;for(;c--;)a[r[c]]=i[c]||"";return-1!=s&&-1!=o&&(a.source=t,a.host=a.host.substring(1,a.host.length-1).replace(/;/g,":"),a.authority=a.authority.replace("[","").replace("]","").replace(/;/g,":"),a.ipv6uri=!0),a.pathNames=function(e,t){const n=t.replace(/\/{2,9}/g,"/").split("/");return"/"!=t.slice(0,1)&&0!==t.length||n.splice(0,1),"/"==t.slice(-1)&&n.splice(n.length-1,1),n}(0,a.path),a.queryKey=function(e,t){const n={};return t.replace(/(?:^|&)([^&=]*)=?([^&]*)/g,(function(e,t,r){t&&(n[t]=r)})),n}(0,a.query),a}},726:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.yeast=t.decode=t.encode=void 0;const n="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_".split(""),r={};let s,o=0,i=0;function a(e){let t="";do{t=n[e%64]+t,e=Math.floor(e/64)}while(e>0);return t}for(t.encode=a,t.decode=function(e){let t=0;for(i=0;i{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.globalThisShim=void 0,t.globalThisShim="undefined"!=typeof self?self:"undefined"!=typeof window?window:Function("return this")()},679:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.nextTick=t.parse=t.installTimerFunctions=t.transports=t.TransportError=t.Transport=t.protocol=t.Socket=void 0;const r=n(481);Object.defineProperty(t,"Socket",{enumerable:!0,get:function(){return r.Socket}}),t.protocol=r.Socket.protocol;var s=n(870);Object.defineProperty(t,"Transport",{enumerable:!0,get:function(){return s.Transport}}),Object.defineProperty(t,"TransportError",{enumerable:!0,get:function(){return s.TransportError}});var o=n(385);Object.defineProperty(t,"transports",{enumerable:!0,get:function(){return o.transports}});var i=n(622);Object.defineProperty(t,"installTimerFunctions",{enumerable:!0,get:function(){return i.installTimerFunctions}});var a=n(222);Object.defineProperty(t,"parse",{enumerable:!0,get:function(){return a.parse}});var c=n(552);Object.defineProperty(t,"nextTick",{enumerable:!0,get:function(){return c.nextTick}})},481:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Socket=void 0;const s=n(385),o=n(622),i=n(754),a=n(222),c=r(n(227)),l=n(260),u=n(373),h=n(552),d=(0,c.default)("engine.io-client:socket");class f extends l.Emitter{constructor(e,t={}){super(),this.binaryType=h.defaultBinaryType,this.writeBuffer=[],e&&"object"==typeof e&&(t=e,e=null),e?(e=(0,a.parse)(e),t.hostname=e.host,t.secure="https"===e.protocol||"wss"===e.protocol,t.port=e.port,e.query&&(t.query=e.query)):t.host&&(t.hostname=(0,a.parse)(t.host).host),(0,o.installTimerFunctions)(this,t),this.secure=null!=t.secure?t.secure:"undefined"!=typeof location&&"https:"===location.protocol,t.hostname&&!t.port&&(t.port=this.secure?"443":"80"),this.hostname=t.hostname||("undefined"!=typeof location?location.hostname:"localhost"),this.port=t.port||("undefined"!=typeof location&&location.port?location.port:this.secure?"443":"80"),this.transports=t.transports||["polling","websocket","webtransport"],this.writeBuffer=[],this.prevBufferLen=0,this.opts=Object.assign({path:"/engine.io",agent:!1,withCredentials:!1,upgrade:!0,timestampParam:"t",rememberUpgrade:!1,addTrailingSlash:!0,rejectUnauthorized:!0,perMessageDeflate:{threshold:1024},transportOptions:{},closeOnBeforeunload:!1},t),this.opts.path=this.opts.path.replace(/\/$/,"")+(this.opts.addTrailingSlash?"/":""),"string"==typeof this.opts.query&&(this.opts.query=(0,i.decode)(this.opts.query)),this.id=null,this.upgrades=null,this.pingInterval=null,this.pingTimeout=null,this.pingTimeoutTimer=null,"function"==typeof addEventListener&&(this.opts.closeOnBeforeunload&&(this.beforeunloadEventListener=()=>{this.transport&&(this.transport.removeAllListeners(),this.transport.close())},addEventListener("beforeunload",this.beforeunloadEventListener,!1)),"localhost"!==this.hostname&&(this.offlineEventListener=()=>{this.onClose("transport close",{description:"network connection lost"})},addEventListener("offline",this.offlineEventListener,!1))),this.open()}createTransport(e){d('creating transport "%s"',e);const t=Object.assign({},this.opts.query);t.EIO=u.protocol,t.transport=e,this.id&&(t.sid=this.id);const n=Object.assign({},this.opts,{query:t,socket:this,hostname:this.hostname,secure:this.secure,port:this.port},this.opts.transportOptions[e]);return d("options: %j",n),new s.transports[e](n)}open(){let e;if(this.opts.rememberUpgrade&&f.priorWebsocketSuccess&&-1!==this.transports.indexOf("websocket"))e="websocket";else{if(0===this.transports.length)return void this.setTimeoutFn((()=>{this.emitReserved("error","No transports available")}),0);e=this.transports[0]}this.readyState="opening";try{e=this.createTransport(e)}catch(e){return d("error while creating transport: %s",e),this.transports.shift(),void this.open()}e.open(),this.setTransport(e)}setTransport(e){d("setting transport %s",e.name),this.transport&&(d("clearing existing transport %s",this.transport.name),this.transport.removeAllListeners()),this.transport=e,e.on("drain",this.onDrain.bind(this)).on("packet",this.onPacket.bind(this)).on("error",this.onError.bind(this)).on("close",(e=>this.onClose("transport close",e)))}probe(e){d('probing transport "%s"',e);let t=this.createTransport(e),n=!1;f.priorWebsocketSuccess=!1;const r=()=>{n||(d('probe transport "%s" opened',e),t.send([{type:"ping",data:"probe"}]),t.once("packet",(r=>{if(!n)if("pong"===r.type&&"probe"===r.data){if(d('probe transport "%s" pong',e),this.upgrading=!0,this.emitReserved("upgrading",t),!t)return;f.priorWebsocketSuccess="websocket"===t.name,d('pausing current transport "%s"',this.transport.name),this.transport.pause((()=>{n||"closed"!==this.readyState&&(d("changing transport and sending upgrade packet"),l(),this.setTransport(t),t.send([{type:"upgrade"}]),this.emitReserved("upgrade",t),t=null,this.upgrading=!1,this.flush())}))}else{d('probe transport "%s" failed',e);const n=new Error("probe error");n.transport=t.name,this.emitReserved("upgradeError",n)}})))};function s(){n||(n=!0,l(),t.close(),t=null)}const o=n=>{const r=new Error("probe error: "+n);r.transport=t.name,s(),d('probe transport "%s" failed because of error: %s',e,n),this.emitReserved("upgradeError",r)};function i(){o("transport closed")}function a(){o("socket closed")}function c(e){t&&e.name!==t.name&&(d('"%s" works - aborting "%s"',e.name,t.name),s())}const l=()=>{t.removeListener("open",r),t.removeListener("error",o),t.removeListener("close",i),this.off("close",a),this.off("upgrading",c)};t.once("open",r),t.once("error",o),t.once("close",i),this.once("close",a),this.once("upgrading",c),-1!==this.upgrades.indexOf("webtransport")&&"webtransport"!==e?this.setTimeoutFn((()=>{n||t.open()}),200):t.open()}onOpen(){if(d("socket open"),this.readyState="open",f.priorWebsocketSuccess="websocket"===this.transport.name,this.emitReserved("open"),this.flush(),"open"===this.readyState&&this.opts.upgrade){d("starting upgrade probes");let e=0;const t=this.upgrades.length;for(;e{this.onClose("ping timeout")}),this.pingInterval+this.pingTimeout),this.opts.autoUnref&&this.pingTimeoutTimer.unref()}onDrain(){this.writeBuffer.splice(0,this.prevBufferLen),this.prevBufferLen=0,0===this.writeBuffer.length?this.emitReserved("drain"):this.flush()}flush(){if("closed"!==this.readyState&&this.transport.writable&&!this.upgrading&&this.writeBuffer.length){const e=this.getWritablePackets();d("flushing %d packets in socket",e.length),this.transport.send(e),this.prevBufferLen=e.length,this.emitReserved("flush")}}getWritablePackets(){if(!(this.maxPayload&&"polling"===this.transport.name&&this.writeBuffer.length>1))return this.writeBuffer;let e=1;for(let t=0;t0&&e>this.maxPayload)return d("only send %d out of %d packets",t,this.writeBuffer.length),this.writeBuffer.slice(0,t);e+=2}return d("payload size is %d (max: %d)",e,this.maxPayload),this.writeBuffer}write(e,t,n){return this.sendPacket("message",e,t,n),this}send(e,t,n){return this.sendPacket("message",e,t,n),this}sendPacket(e,t,n,r){if("function"==typeof t&&(r=t,t=void 0),"function"==typeof n&&(r=n,n=null),"closing"===this.readyState||"closed"===this.readyState)return;(n=n||{}).compress=!1!==n.compress;const s={type:e,data:t,options:n};this.emitReserved("packetCreate",s),this.writeBuffer.push(s),r&&this.once("flush",r),this.flush()}close(){const e=()=>{this.onClose("forced close"),d("socket closing - telling transport to close"),this.transport.close()},t=()=>{this.off("upgrade",t),this.off("upgradeError",t),e()},n=()=>{this.once("upgrade",t),this.once("upgradeError",t)};return"opening"!==this.readyState&&"open"!==this.readyState||(this.readyState="closing",this.writeBuffer.length?this.once("drain",(()=>{this.upgrading?n():e()})):this.upgrading?n():e()),this}onError(e){d("socket error %j",e),f.priorWebsocketSuccess=!1,this.emitReserved("error",e),this.onClose("transport error",e)}onClose(e,t){"opening"!==this.readyState&&"open"!==this.readyState&&"closing"!==this.readyState||(d('socket close with reason: "%s"',e),this.clearTimeoutFn(this.pingTimeoutTimer),this.transport.removeAllListeners("close"),this.transport.close(),this.transport.removeAllListeners(),"function"==typeof removeEventListener&&(removeEventListener("beforeunload",this.beforeunloadEventListener,!1),removeEventListener("offline",this.offlineEventListener,!1)),this.readyState="closed",this.id=null,this.emitReserved("close",e,t),this.writeBuffer=[],this.prevBufferLen=0)}filterUpgrades(e){const t=[];let n=0;const r=e.length;for(;n{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.transports=void 0;const r=n(484),s=n(308),o=n(20);t.transports={websocket:s.WS,webtransport:o.WT,polling:r.Polling}},484:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Request=t.Polling=void 0;const s=n(870),o=r(n(227)),i=n(726),a=n(373),c=n(666),l=n(260),u=n(622),h=n(242),d=(0,o.default)("engine.io-client:polling");function f(){}const p=null!=new c.XHR({xdomain:!1}).responseType;class m extends s.Transport{constructor(e){if(super(e),this.polling=!1,"undefined"!=typeof location){const t="https:"===location.protocol;let n=location.port;n||(n=t?"443":"80"),this.xd="undefined"!=typeof location&&e.hostname!==location.hostname||n!==e.port}const t=e&&e.forceBase64;this.supportsBinary=p&&!t,this.opts.withCredentials&&(this.cookieJar=(0,c.createCookieJar)())}get name(){return"polling"}doOpen(){this.poll()}pause(e){this.readyState="pausing";const t=()=>{d("paused"),this.readyState="paused",e()};if(this.polling||!this.writable){let e=0;this.polling&&(d("we are currently polling - waiting to pause"),e++,this.once("pollComplete",(function(){d("pre-pause polling complete"),--e||t()}))),this.writable||(d("we are currently writing - waiting to pause"),e++,this.once("drain",(function(){d("pre-pause writing complete"),--e||t()})))}else t()}poll(){d("polling"),this.polling=!0,this.doPoll(),this.emitReserved("poll")}onData(e){d("polling got data %s",e),(0,a.decodePayload)(e,this.socket.binaryType).forEach((e=>{if("opening"===this.readyState&&"open"===e.type&&this.onOpen(),"close"===e.type)return this.onClose({description:"transport closed by the server"}),!1;this.onPacket(e)})),"closed"!==this.readyState&&(this.polling=!1,this.emitReserved("pollComplete"),"open"===this.readyState?this.poll():d('ignoring poll - transport state "%s"',this.readyState))}doClose(){const e=()=>{d("writing close packet"),this.write([{type:"close"}])};"open"===this.readyState?(d("transport open - closing"),e()):(d("transport not open - deferring close"),this.once("open",e))}write(e){this.writable=!1,(0,a.encodePayload)(e,(e=>{this.doWrite(e,(()=>{this.writable=!0,this.emitReserved("drain")}))}))}uri(){const e=this.opts.secure?"https":"http",t=this.query||{};return!1!==this.opts.timestampRequests&&(t[this.opts.timestampParam]=(0,i.yeast)()),this.supportsBinary||t.sid||(t.b64=1),this.createUri(e,t)}request(e={}){return Object.assign(e,{xd:this.xd,cookieJar:this.cookieJar},this.opts),new g(this.uri(),e)}doWrite(e,t){const n=this.request({method:"POST",data:e});n.on("success",t),n.on("error",((e,t)=>{this.onError("xhr post error",e,t)}))}doPoll(){d("xhr poll");const e=this.request();e.on("data",this.onData.bind(this)),e.on("error",((e,t)=>{this.onError("xhr poll error",e,t)})),this.pollXhr=e}}t.Polling=m;class g extends l.Emitter{constructor(e,t){super(),(0,u.installTimerFunctions)(this,t),this.opts=t,this.method=t.method||"GET",this.uri=e,this.data=void 0!==t.data?t.data:null,this.create()}create(){var e;const t=(0,u.pick)(this.opts,"agent","pfx","key","passphrase","cert","ca","ciphers","rejectUnauthorized","autoUnref");t.xdomain=!!this.opts.xd;const n=this.xhr=new c.XHR(t);try{d("xhr open %s: %s",this.method,this.uri),n.open(this.method,this.uri,!0);try{if(this.opts.extraHeaders){n.setDisableHeaderCheck&&n.setDisableHeaderCheck(!0);for(let e in this.opts.extraHeaders)this.opts.extraHeaders.hasOwnProperty(e)&&n.setRequestHeader(e,this.opts.extraHeaders[e])}}catch(e){}if("POST"===this.method)try{n.setRequestHeader("Content-type","text/plain;charset=UTF-8")}catch(e){}try{n.setRequestHeader("Accept","*/*")}catch(e){}null===(e=this.opts.cookieJar)||void 0===e||e.addCookies(n),"withCredentials"in n&&(n.withCredentials=this.opts.withCredentials),this.opts.requestTimeout&&(n.timeout=this.opts.requestTimeout),n.onreadystatechange=()=>{var e;3===n.readyState&&(null===(e=this.opts.cookieJar)||void 0===e||e.parseCookies(n)),4===n.readyState&&(200===n.status||1223===n.status?this.onLoad():this.setTimeoutFn((()=>{this.onError("number"==typeof n.status?n.status:0)}),0))},d("xhr data %s",this.data),n.send(this.data)}catch(e){return void this.setTimeoutFn((()=>{this.onError(e)}),0)}"undefined"!=typeof document&&(this.index=g.requestsCount++,g.requests[this.index]=this)}onError(e){this.emitReserved("error",e,this.xhr),this.cleanup(!0)}cleanup(e){if(void 0!==this.xhr&&null!==this.xhr){if(this.xhr.onreadystatechange=f,e)try{this.xhr.abort()}catch(e){}"undefined"!=typeof document&&delete g.requests[this.index],this.xhr=null}}onLoad(){const e=this.xhr.responseText;null!==e&&(this.emitReserved("data",e),this.emitReserved("success"),this.cleanup())}abort(){this.cleanup()}}if(t.Request=g,g.requestsCount=0,g.requests={},"undefined"!=typeof document)if("function"==typeof attachEvent)attachEvent("onunload",y);else if("function"==typeof addEventListener){const e="onpagehide"in h.globalThisShim?"pagehide":"unload";addEventListener(e,y,!1)}function y(){for(let e in g.requests)g.requests.hasOwnProperty(e)&&g.requests[e].abort()}},552:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.defaultBinaryType=t.usingBrowserWebSocket=t.WebSocket=t.nextTick=void 0;const r=n(242);t.nextTick="function"==typeof Promise&&"function"==typeof Promise.resolve?e=>Promise.resolve().then(e):(e,t)=>t(e,0),t.WebSocket=r.globalThisShim.WebSocket||r.globalThisShim.MozWebSocket,t.usingBrowserWebSocket=!0,t.defaultBinaryType="arraybuffer"},308:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.WS=void 0;const s=n(870),o=n(726),i=n(622),a=n(552),c=r(n(227)),l=n(373),u=(0,c.default)("engine.io-client:websocket"),h="undefined"!=typeof navigator&&"string"==typeof navigator.product&&"reactnative"===navigator.product.toLowerCase();class d extends s.Transport{constructor(e){super(e),this.supportsBinary=!e.forceBase64}get name(){return"websocket"}doOpen(){if(!this.check())return;const e=this.uri(),t=this.opts.protocols,n=h?{}:(0,i.pick)(this.opts,"agent","perMessageDeflate","pfx","key","passphrase","cert","ca","ciphers","rejectUnauthorized","localAddress","protocolVersion","origin","maxPayload","family","checkServerIdentity");this.opts.extraHeaders&&(n.headers=this.opts.extraHeaders);try{this.ws=a.usingBrowserWebSocket&&!h?t?new a.WebSocket(e,t):new a.WebSocket(e):new a.WebSocket(e,t,n)}catch(e){return this.emitReserved("error",e)}this.ws.binaryType=this.socket.binaryType,this.addEventListeners()}addEventListeners(){this.ws.onopen=()=>{this.opts.autoUnref&&this.ws._socket.unref(),this.onOpen()},this.ws.onclose=e=>this.onClose({description:"websocket connection closed",context:e}),this.ws.onmessage=e=>this.onData(e.data),this.ws.onerror=e=>this.onError("websocket error",e)}write(e){this.writable=!1;for(let t=0;t{const t={};!a.usingBrowserWebSocket&&(n.options&&(t.compress=n.options.compress),this.opts.perMessageDeflate)&&("string"==typeof e?Buffer.byteLength(e):e.length){this.writable=!0,this.emitReserved("drain")}),this.setTimeoutFn)}))}}doClose(){void 0!==this.ws&&(this.ws.close(),this.ws=null)}uri(){const e=this.opts.secure?"wss":"ws",t=this.query||{};return this.opts.timestampRequests&&(t[this.opts.timestampParam]=(0,o.yeast)()),this.supportsBinary||(t.b64=1),this.createUri(e,t)}check(){return!!a.WebSocket}}t.WS=d},20:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.WT=void 0;const s=n(870),o=n(552),i=n(373),a=(0,r(n(227)).default)("engine.io-client:webtransport");class c extends s.Transport{get name(){return"webtransport"}doOpen(){"function"==typeof WebTransport&&(this.transport=new WebTransport(this.createUri("https"),this.opts.transportOptions[this.name]),this.transport.closed.then((()=>{a("transport closed gracefully"),this.onClose()})).catch((e=>{a("transport closed due to %s",e),this.onError("webtransport error",e)})),this.transport.ready.then((()=>{this.transport.createBidirectionalStream().then((e=>{const t=(0,i.createPacketDecoderStream)(Number.MAX_SAFE_INTEGER,this.socket.binaryType),n=e.readable.pipeThrough(t).getReader(),r=(0,i.createPacketEncoderStream)();r.readable.pipeTo(e.writable),this.writer=r.writable.getWriter();const s=()=>{n.read().then((({done:e,value:t})=>{e?a("session is closed"):(a("received chunk: %o",t),this.onPacket(t),s())})).catch((e=>{a("an error occurred while reading: %s",e)}))};s();const o={type:"open"};this.query.sid&&(o.data=`{"sid":"${this.query.sid}"}`),this.writer.write(o).then((()=>this.onOpen()))}))})))}write(e){this.writable=!1;for(let t=0;t{r&&(0,o.nextTick)((()=>{this.writable=!0,this.emitReserved("drain")}),this.setTimeoutFn)}))}}doClose(){var e;null===(e=this.transport)||void 0===e||e.close()}}t.WT=c},666:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.createCookieJar=t.XHR=void 0;const r=n(419),s=n(242);t.XHR=function(e){const t=e.xdomain;try{if("undefined"!=typeof XMLHttpRequest&&(!t||r.hasCORS))return new XMLHttpRequest}catch(e){}if(!t)try{return new(s.globalThisShim[["Active"].concat("Object").join("X")])("Microsoft.XMLHTTP")}catch(e){}},t.createCookieJar=function(){}},622:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.byteLength=t.installTimerFunctions=t.pick=void 0;const r=n(242);t.pick=function(e,...t){return t.reduce(((t,n)=>(e.hasOwnProperty(n)&&(t[n]=e[n]),t)),{})};const s=r.globalThisShim.setTimeout,o=r.globalThisShim.clearTimeout;t.installTimerFunctions=function(e,t){t.useNativeTimers?(e.setTimeoutFn=s.bind(r.globalThisShim),e.clearTimeoutFn=o.bind(r.globalThisShim)):(e.setTimeoutFn=r.globalThisShim.setTimeout.bind(r.globalThisShim),e.clearTimeoutFn=r.globalThisShim.clearTimeout.bind(r.globalThisShim))},t.byteLength=function(e){return"string"==typeof e?function(e){let t=0,n=0;for(let r=0,s=e.length;r=57344?n+=3:(r++,n+=4);return n}(e):Math.ceil(1.33*(e.byteLength||e.size))}},87:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.ERROR_PACKET=t.PACKET_TYPES_REVERSE=t.PACKET_TYPES=void 0;const n=Object.create(null);t.PACKET_TYPES=n,n.open="0",n.close="1",n.ping="2",n.pong="3",n.message="4",n.upgrade="5",n.noop="6";const r=Object.create(null);t.PACKET_TYPES_REVERSE=r,Object.keys(n).forEach((e=>{r[n[e]]=e})),t.ERROR_PACKET={type:"error",data:"parser error"}},469:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.decode=t.encode=void 0;const n="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",r="undefined"==typeof Uint8Array?[]:new Uint8Array(256);for(let e=0;e<64;e++)r[n.charCodeAt(e)]=e;t.encode=e=>{let t,r=new Uint8Array(e),s=r.length,o="";for(t=0;t>2],o+=n[(3&r[t])<<4|r[t+1]>>4],o+=n[(15&r[t+1])<<2|r[t+2]>>6],o+=n[63&r[t+2]];return s%3==2?o=o.substring(0,o.length-1)+"=":s%3==1&&(o=o.substring(0,o.length-2)+"=="),o},t.decode=e=>{let t,n,s,o,i,a=.75*e.length,c=e.length,l=0;"="===e[e.length-1]&&(a--,"="===e[e.length-2]&&a--);const u=new ArrayBuffer(a),h=new Uint8Array(u);for(t=0;t>4,h[l++]=(15&s)<<4|o>>2,h[l++]=(3&o)<<6|63&i;return u}},572:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.decodePacket=void 0;const r=n(87),s=n(469),o="function"==typeof ArrayBuffer;t.decodePacket=(e,t)=>{if("string"!=typeof e)return{type:"message",data:a(e,t)};const n=e.charAt(0);return"b"===n?{type:"message",data:i(e.substring(1),t)}:r.PACKET_TYPES_REVERSE[n]?e.length>1?{type:r.PACKET_TYPES_REVERSE[n],data:e.substring(1)}:{type:r.PACKET_TYPES_REVERSE[n]}:r.ERROR_PACKET};const i=(e,t)=>{if(o){const n=(0,s.decode)(e);return a(n,t)}return{base64:!0,data:e}},a=(e,t)=>"blob"===t?e instanceof Blob?e:new Blob([e]):e instanceof ArrayBuffer?e:e.buffer},908:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.encodePacket=t.encodePacketToBinary=void 0;const r=n(87),s="function"==typeof Blob||"undefined"!=typeof Blob&&"[object BlobConstructor]"===Object.prototype.toString.call(Blob),o="function"==typeof ArrayBuffer,i=e=>"function"==typeof ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer instanceof ArrayBuffer,a=({type:e,data:t},n,a)=>s&&t instanceof Blob?n?a(t):c(t,a):o&&(t instanceof ArrayBuffer||i(t))?n?a(t):c(new Blob([t]),a):a(r.PACKET_TYPES[e]+(t||""));t.encodePacket=a;const c=(e,t)=>{const n=new FileReader;return n.onload=function(){const e=n.result.split(",")[1];t("b"+(e||""))},n.readAsDataURL(e)};function l(e){return e instanceof Uint8Array?e:e instanceof ArrayBuffer?new Uint8Array(e):new Uint8Array(e.buffer,e.byteOffset,e.byteLength)}let u;t.encodePacketToBinary=function(e,t){return s&&e.data instanceof Blob?e.data.arrayBuffer().then(l).then(t):o&&(e.data instanceof ArrayBuffer||i(e.data))?t(l(e.data)):void a(e,!1,(e=>{u||(u=new TextEncoder),t(u.encode(e))}))}},373:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.decodePayload=t.decodePacket=t.encodePayload=t.encodePacket=t.protocol=t.createPacketDecoderStream=t.createPacketEncoderStream=void 0;const r=n(908);Object.defineProperty(t,"encodePacket",{enumerable:!0,get:function(){return r.encodePacket}});const s=n(572);Object.defineProperty(t,"decodePacket",{enumerable:!0,get:function(){return s.decodePacket}});const o=n(87),i=String.fromCharCode(30);let a;function c(e){return e.reduce(((e,t)=>e+t.length),0)}function l(e,t){if(e[0].length===t)return e.shift();const n=new Uint8Array(t);let r=0;for(let s=0;s{const n=e.length,s=new Array(n);let o=0;e.forEach(((e,a)=>{(0,r.encodePacket)(e,!1,(e=>{s[a]=e,++o===n&&t(s.join(i))}))}))},t.decodePayload=(e,t)=>{const n=e.split(i),r=[];for(let e=0;e{const r=n.length;let s;if(r<126)s=new Uint8Array(1),new DataView(s.buffer).setUint8(0,r);else if(r<65536){s=new Uint8Array(3);const e=new DataView(s.buffer);e.setUint8(0,126),e.setUint16(1,r)}else{s=new Uint8Array(9);const e=new DataView(s.buffer);e.setUint8(0,127),e.setBigUint64(1,BigInt(r))}e.data&&"string"!=typeof e.data&&(s[0]|=128),t.enqueue(s),t.enqueue(n)}))}})},t.createPacketDecoderStream=function(e,t){a||(a=new TextDecoder);const n=[];let r=0,i=-1,u=!1;return new TransformStream({transform(h,d){for(n.push(h);;){if(0===r){if(c(n)<1)break;const e=l(n,1);u=128==(128&e[0]),i=127&e[0],r=i<126?3:126===i?1:2}else if(1===r){if(c(n)<2)break;const e=l(n,2);i=new DataView(e.buffer,e.byteOffset,e.length).getUint16(0),r=3}else if(2===r){if(c(n)<8)break;const e=l(n,8),t=new DataView(e.buffer,e.byteOffset,e.length),s=t.getUint32(0);if(s>Math.pow(2,21)-1){d.enqueue(o.ERROR_PACKET);break}i=s*Math.pow(2,32)+t.getUint32(4),r=3}else{if(c(n)e){d.enqueue(o.ERROR_PACKET);break}}}})},t.protocol=4},159:(e,t)=>{"use strict";function n(e){e=e||{},this.ms=e.min||100,this.max=e.max||1e4,this.factor=e.factor||2,this.jitter=e.jitter>0&&e.jitter<=1?e.jitter:0,this.attempts=0}Object.defineProperty(t,"__esModule",{value:!0}),t.Backoff=void 0,t.Backoff=n,n.prototype.duration=function(){var e=this.ms*Math.pow(this.factor,this.attempts++);if(this.jitter){var t=Math.random(),n=Math.floor(t*this.jitter*e);e=0==(1&Math.floor(10*t))?e-n:e+n}return 0|Math.min(e,this.max)},n.prototype.reset=function(){this.attempts=0},n.prototype.setMin=function(e){this.ms=e},n.prototype.setMax=function(e){this.max=e},n.prototype.setJitter=function(e){this.jitter=e}},46:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.default=t.connect=t.io=t.Socket=t.Manager=t.protocol=void 0;const s=n(84),o=n(168);Object.defineProperty(t,"Manager",{enumerable:!0,get:function(){return o.Manager}});const i=n(312);Object.defineProperty(t,"Socket",{enumerable:!0,get:function(){return i.Socket}});const a=r(n(227)).default("socket.io-client"),c={};function l(e,t){"object"==typeof e&&(t=e,e=void 0),t=t||{};const n=s.url(e,t.path||"/socket.io"),r=n.source,i=n.id,l=n.path,u=c[i]&&l in c[i].nsps;let h;return t.forceNew||t["force new connection"]||!1===t.multiplex||u?(a("ignoring socket cache for %s",r),h=new o.Manager(r,t)):(c[i]||(a("new io instance for %s",r),c[i]=new o.Manager(r,t)),h=c[i]),n.query&&!t.query&&(t.query=n.queryKey),h.socket(n.path,t)}t.io=l,t.connect=l,t.default=l,Object.assign(l,{Manager:o.Manager,Socket:i.Socket,io:l,connect:l});var u=n(514);Object.defineProperty(t,"protocol",{enumerable:!0,get:function(){return u.protocol}}),e.exports=l},168:function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n),Object.defineProperty(e,r,{enumerable:!0,get:function(){return t[n]}})}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),s=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),o=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return s(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Manager=void 0;const a=n(679),c=n(312),l=o(n(514)),u=n(149),h=n(159),d=n(260),f=i(n(227)).default("socket.io-client:manager");class p extends d.Emitter{constructor(e,t){var n;super(),this.nsps={},this.subs=[],e&&"object"==typeof e&&(t=e,e=void 0),(t=t||{}).path=t.path||"/socket.io",this.opts=t,a.installTimerFunctions(this,t),this.reconnection(!1!==t.reconnection),this.reconnectionAttempts(t.reconnectionAttempts||1/0),this.reconnectionDelay(t.reconnectionDelay||1e3),this.reconnectionDelayMax(t.reconnectionDelayMax||5e3),this.randomizationFactor(null!==(n=t.randomizationFactor)&&void 0!==n?n:.5),this.backoff=new h.Backoff({min:this.reconnectionDelay(),max:this.reconnectionDelayMax(),jitter:this.randomizationFactor()}),this.timeout(null==t.timeout?2e4:t.timeout),this._readyState="closed",this.uri=e;const r=t.parser||l;this.encoder=new r.Encoder,this.decoder=new r.Decoder,this._autoConnect=!1!==t.autoConnect,this._autoConnect&&this.open()}reconnection(e){return arguments.length?(this._reconnection=!!e,this):this._reconnection}reconnectionAttempts(e){return void 0===e?this._reconnectionAttempts:(this._reconnectionAttempts=e,this)}reconnectionDelay(e){var t;return void 0===e?this._reconnectionDelay:(this._reconnectionDelay=e,null===(t=this.backoff)||void 0===t||t.setMin(e),this)}randomizationFactor(e){var t;return void 0===e?this._randomizationFactor:(this._randomizationFactor=e,null===(t=this.backoff)||void 0===t||t.setJitter(e),this)}reconnectionDelayMax(e){var t;return void 0===e?this._reconnectionDelayMax:(this._reconnectionDelayMax=e,null===(t=this.backoff)||void 0===t||t.setMax(e),this)}timeout(e){return arguments.length?(this._timeout=e,this):this._timeout}maybeReconnectOnOpen(){!this._reconnecting&&this._reconnection&&0===this.backoff.attempts&&this.reconnect()}open(e){if(f("readyState %s",this._readyState),~this._readyState.indexOf("open"))return this;f("opening %s",this.uri),this.engine=new a.Socket(this.uri,this.opts);const t=this.engine,n=this;this._readyState="opening",this.skipReconnect=!1;const r=u.on(t,"open",(function(){n.onopen(),e&&e()})),s=t=>{f("error"),this.cleanup(),this._readyState="closed",this.emitReserved("error",t),e?e(t):this.maybeReconnectOnOpen()},o=u.on(t,"error",s);if(!1!==this._timeout){const e=this._timeout;f("connect attempt will timeout after %d",e);const n=this.setTimeoutFn((()=>{f("connect attempt timed out after %d",e),r(),s(new Error("timeout")),t.close()}),e);this.opts.autoUnref&&n.unref(),this.subs.push((()=>{this.clearTimeoutFn(n)}))}return this.subs.push(r),this.subs.push(o),this}connect(e){return this.open(e)}onopen(){f("open"),this.cleanup(),this._readyState="open",this.emitReserved("open");const e=this.engine;this.subs.push(u.on(e,"ping",this.onping.bind(this)),u.on(e,"data",this.ondata.bind(this)),u.on(e,"error",this.onerror.bind(this)),u.on(e,"close",this.onclose.bind(this)),u.on(this.decoder,"decoded",this.ondecoded.bind(this)))}onping(){this.emitReserved("ping")}ondata(e){try{this.decoder.add(e)}catch(e){this.onclose("parse error",e)}}ondecoded(e){a.nextTick((()=>{this.emitReserved("packet",e)}),this.setTimeoutFn)}onerror(e){f("error",e),this.emitReserved("error",e)}socket(e,t){let n=this.nsps[e];return n?this._autoConnect&&!n.active&&n.connect():(n=new c.Socket(this,e,t),this.nsps[e]=n),n}_destroy(e){const t=Object.keys(this.nsps);for(const e of t)if(this.nsps[e].active)return void f("socket %s is still active, skipping close",e);this._close()}_packet(e){f("writing packet %j",e);const t=this.encoder.encode(e);for(let n=0;ne())),this.subs.length=0,this.decoder.destroy()}_close(){f("disconnect"),this.skipReconnect=!0,this._reconnecting=!1,this.onclose("forced close"),this.engine&&this.engine.close()}disconnect(){return this._close()}onclose(e,t){f("closed due to %s",e),this.cleanup(),this.backoff.reset(),this._readyState="closed",this.emitReserved("close",e,t),this._reconnection&&!this.skipReconnect&&this.reconnect()}reconnect(){if(this._reconnecting||this.skipReconnect)return this;const e=this;if(this.backoff.attempts>=this._reconnectionAttempts)f("reconnect failed"),this.backoff.reset(),this.emitReserved("reconnect_failed"),this._reconnecting=!1;else{const t=this.backoff.duration();f("will wait %dms before reconnect attempt",t),this._reconnecting=!0;const n=this.setTimeoutFn((()=>{e.skipReconnect||(f("attempting reconnect"),this.emitReserved("reconnect_attempt",e.backoff.attempts),e.skipReconnect||e.open((t=>{t?(f("reconnect attempt error"),e._reconnecting=!1,e.reconnect(),this.emitReserved("reconnect_error",t)):(f("reconnect success"),e.onreconnect())})))}),t);this.opts.autoUnref&&n.unref(),this.subs.push((()=>{this.clearTimeoutFn(n)}))}}onreconnect(){const e=this.backoff.attempts;this._reconnecting=!1,this.backoff.reset(),this.emitReserved("reconnect",e)}}t.Manager=p},149:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.on=void 0,t.on=function(e,t,n){return e.on(t,n),function(){e.off(t,n)}}},312:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Socket=void 0;const s=n(514),o=n(149),i=n(260),a=r(n(227)).default("socket.io-client:socket"),c=Object.freeze({connect:1,connect_error:1,disconnect:1,disconnecting:1,newListener:1,removeListener:1});class l extends i.Emitter{constructor(e,t,n){super(),this.connected=!1,this.recovered=!1,this.receiveBuffer=[],this.sendBuffer=[],this._queue=[],this._queueSeq=0,this.ids=0,this.acks={},this.flags={},this.io=e,this.nsp=t,n&&n.auth&&(this.auth=n.auth),this._opts=Object.assign({},n),this.io._autoConnect&&this.open()}get disconnected(){return!this.connected}subEvents(){if(this.subs)return;const e=this.io;this.subs=[o.on(e,"open",this.onopen.bind(this)),o.on(e,"packet",this.onpacket.bind(this)),o.on(e,"error",this.onerror.bind(this)),o.on(e,"close",this.onclose.bind(this))]}get active(){return!!this.subs}connect(){return this.connected||(this.subEvents(),this.io._reconnecting||this.io.open(),"open"===this.io._readyState&&this.onopen()),this}open(){return this.connect()}send(...e){return e.unshift("message"),this.emit.apply(this,e),this}emit(e,...t){if(c.hasOwnProperty(e))throw new Error('"'+e.toString()+'" is a reserved event name');if(t.unshift(e),this._opts.retries&&!this.flags.fromQueue&&!this.flags.volatile)return this._addToQueue(t),this;const n={type:s.PacketType.EVENT,data:t,options:{}};if(n.options.compress=!1!==this.flags.compress,"function"==typeof t[t.length-1]){const e=this.ids++;a("emitting packet with ack id %d",e);const r=t.pop();this._registerAckCallback(e,r),n.id=e}const r=this.io.engine&&this.io.engine.transport&&this.io.engine.transport.writable;return!this.flags.volatile||r&&this.connected?this.connected?(this.notifyOutgoingListeners(n),this.packet(n)):this.sendBuffer.push(n):a("discard packet as the transport is not currently writable"),this.flags={},this}_registerAckCallback(e,t){var n;const r=null!==(n=this.flags.timeout)&&void 0!==n?n:this._opts.ackTimeout;if(void 0===r)return void(this.acks[e]=t);const s=this.io.setTimeoutFn((()=>{delete this.acks[e];for(let t=0;t{this.io.clearTimeoutFn(s),t.apply(this,[null,...e])}}emitWithAck(e,...t){const n=void 0!==this.flags.timeout||void 0!==this._opts.ackTimeout;return new Promise(((r,s)=>{t.push(((e,t)=>n?e?s(e):r(t):r(e))),this.emit(e,...t)}))}_addToQueue(e){let t;"function"==typeof e[e.length-1]&&(t=e.pop());const n={id:this._queueSeq++,tryCount:0,pending:!1,args:e,flags:Object.assign({fromQueue:!0},this.flags)};e.push(((e,...r)=>{if(n===this._queue[0])return null!==e?n.tryCount>this._opts.retries&&(a("packet [%d] is discarded after %d tries",n.id,n.tryCount),this._queue.shift(),t&&t(e)):(a("packet [%d] was successfully sent",n.id),this._queue.shift(),t&&t(null,...r)),n.pending=!1,this._drainQueue()})),this._queue.push(n),this._drainQueue()}_drainQueue(e=!1){if(a("draining queue"),!this.connected||0===this._queue.length)return;const t=this._queue[0];!t.pending||e?(t.pending=!0,t.tryCount++,a("sending packet [%d] (try n°%d)",t.id,t.tryCount),this.flags=t.flags,this.emit.apply(this,t.args)):a("packet [%d] has already been sent and is waiting for an ack",t.id)}packet(e){e.nsp=this.nsp,this.io._packet(e)}onopen(){a("transport is open - connecting"),"function"==typeof this.auth?this.auth((e=>{this._sendConnectPacket(e)})):this._sendConnectPacket(this.auth)}_sendConnectPacket(e){this.packet({type:s.PacketType.CONNECT,data:this._pid?Object.assign({pid:this._pid,offset:this._lastOffset},e):e})}onerror(e){this.connected||this.emitReserved("connect_error",e)}onclose(e,t){a("close (%s)",e),this.connected=!1,delete this.id,this.emitReserved("disconnect",e,t)}onpacket(e){if(e.nsp===this.nsp)switch(e.type){case s.PacketType.CONNECT:e.data&&e.data.sid?this.onconnect(e.data.sid,e.data.pid):this.emitReserved("connect_error",new Error("It seems you are trying to reach a Socket.IO server in v2.x with a v3.x client, but they are not compatible (more information here: https://socket.io/docs/v3/migrating-from-2-x-to-3-0/)"));break;case s.PacketType.EVENT:case s.PacketType.BINARY_EVENT:this.onevent(e);break;case s.PacketType.ACK:case s.PacketType.BINARY_ACK:this.onack(e);break;case s.PacketType.DISCONNECT:this.ondisconnect();break;case s.PacketType.CONNECT_ERROR:this.destroy();const t=new Error(e.data.message);t.data=e.data.data,this.emitReserved("connect_error",t)}}onevent(e){const t=e.data||[];a("emitting event %j",t),null!=e.id&&(a("attaching ack callback to event"),t.push(this.ack(e.id))),this.connected?this.emitEvent(t):this.receiveBuffer.push(Object.freeze(t))}emitEvent(e){if(this._anyListeners&&this._anyListeners.length){const t=this._anyListeners.slice();for(const n of t)n.apply(this,e)}super.emit.apply(this,e),this._pid&&e.length&&"string"==typeof e[e.length-1]&&(this._lastOffset=e[e.length-1])}ack(e){const t=this;let n=!1;return function(...r){n||(n=!0,a("sending ack %j",r),t.packet({type:s.PacketType.ACK,id:e,data:r}))}}onack(e){const t=this.acks[e.id];"function"==typeof t?(a("calling ack %s with %j",e.id,e.data),t.apply(this,e.data),delete this.acks[e.id]):a("bad ack %s",e.id)}onconnect(e,t){a("socket connected with id %s",e),this.id=e,this.recovered=t&&this._pid===t,this._pid=t,this.connected=!0,this.emitBuffered(),this.emitReserved("connect"),this._drainQueue(!0)}emitBuffered(){this.receiveBuffer.forEach((e=>this.emitEvent(e))),this.receiveBuffer=[],this.sendBuffer.forEach((e=>{this.notifyOutgoingListeners(e),this.packet(e)})),this.sendBuffer=[]}ondisconnect(){a("server disconnect (%s)",this.nsp),this.destroy(),this.onclose("io server disconnect")}destroy(){this.subs&&(this.subs.forEach((e=>e())),this.subs=void 0),this.io._destroy(this)}disconnect(){return this.connected&&(a("performing disconnect (%s)",this.nsp),this.packet({type:s.PacketType.DISCONNECT})),this.destroy(),this.connected&&this.onclose("io client disconnect"),this}close(){return this.disconnect()}compress(e){return this.flags.compress=e,this}get volatile(){return this.flags.volatile=!0,this}timeout(e){return this.flags.timeout=e,this}onAny(e){return this._anyListeners=this._anyListeners||[],this._anyListeners.push(e),this}prependAny(e){return this._anyListeners=this._anyListeners||[],this._anyListeners.unshift(e),this}offAny(e){if(!this._anyListeners)return this;if(e){const t=this._anyListeners;for(let n=0;n{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.reconstructPacket=t.deconstructPacket=void 0;const r=n(665);function s(e,t){if(!e)return e;if((0,r.isBinary)(e)){const n={_placeholder:!0,num:t.length};return t.push(e),n}if(Array.isArray(e)){const n=new Array(e.length);for(let r=0;r=0&&e.num{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Decoder=t.Encoder=t.PacketType=t.protocol=void 0;const r=n(260),s=n(269),o=n(665),i=(0,n(227).default)("socket.io-parser"),a=["connect","connect_error","disconnect","disconnecting","newListener","removeListener"];var c;function l(e){return"[object Object]"===Object.prototype.toString.call(e)}t.protocol=5,function(e){e[e.CONNECT=0]="CONNECT",e[e.DISCONNECT=1]="DISCONNECT",e[e.EVENT=2]="EVENT",e[e.ACK=3]="ACK",e[e.CONNECT_ERROR=4]="CONNECT_ERROR",e[e.BINARY_EVENT=5]="BINARY_EVENT",e[e.BINARY_ACK=6]="BINARY_ACK"}(c=t.PacketType||(t.PacketType={})),t.Encoder=class{constructor(e){this.replacer=e}encode(e){return i("encoding packet %j",e),e.type!==c.EVENT&&e.type!==c.ACK||!(0,o.hasBinary)(e)?[this.encodeAsString(e)]:this.encodeAsBinary({type:e.type===c.EVENT?c.BINARY_EVENT:c.BINARY_ACK,nsp:e.nsp,data:e.data,id:e.id})}encodeAsString(e){let t=""+e.type;return e.type!==c.BINARY_EVENT&&e.type!==c.BINARY_ACK||(t+=e.attachments+"-"),e.nsp&&"/"!==e.nsp&&(t+=e.nsp+","),null!=e.id&&(t+=e.id),null!=e.data&&(t+=JSON.stringify(e.data,this.replacer)),i("encoded %j as %s",e,t),t}encodeAsBinary(e){const t=(0,s.deconstructPacket)(e),n=this.encodeAsString(t.packet),r=t.buffers;return r.unshift(n),r}};class u extends r.Emitter{constructor(e){super(),this.reviver=e}add(e){let t;if("string"==typeof e){if(this.reconstructor)throw new Error("got plaintext data when reconstructing a packet");t=this.decodeString(e);const n=t.type===c.BINARY_EVENT;n||t.type===c.BINARY_ACK?(t.type=n?c.EVENT:c.ACK,this.reconstructor=new h(t),0===t.attachments&&super.emitReserved("decoded",t)):super.emitReserved("decoded",t)}else{if(!(0,o.isBinary)(e)&&!e.base64)throw new Error("Unknown type: "+e);if(!this.reconstructor)throw new Error("got binary data when not reconstructing a packet");t=this.reconstructor.takeBinaryData(e),t&&(this.reconstructor=null,super.emitReserved("decoded",t))}}decodeString(e){let t=0;const n={type:Number(e.charAt(0))};if(void 0===c[n.type])throw new Error("unknown packet type "+n.type);if(n.type===c.BINARY_EVENT||n.type===c.BINARY_ACK){const r=t+1;for(;"-"!==e.charAt(++t)&&t!=e.length;);const s=e.substring(r,t);if(s!=Number(s)||"-"!==e.charAt(t))throw new Error("Illegal attachments");n.attachments=Number(s)}if("/"===e.charAt(t+1)){const r=t+1;for(;++t&&","!==e.charAt(t)&&t!==e.length;);n.nsp=e.substring(r,t)}else n.nsp="/";const r=e.charAt(t+1);if(""!==r&&Number(r)==r){const r=t+1;for(;++t;){const n=e.charAt(t);if(null==n||Number(n)!=n){--t;break}if(t===e.length)break}n.id=Number(e.substring(r,t+1))}if(e.charAt(++t)){const r=this.tryParse(e.substr(t));if(!u.isPayloadValid(n.type,r))throw new Error("invalid payload");n.data=r}return i("decoded %s as %j",e,n),n}tryParse(e){try{return JSON.parse(e,this.reviver)}catch(e){return!1}}static isPayloadValid(e,t){switch(e){case c.CONNECT:return l(t);case c.DISCONNECT:return void 0===t;case c.CONNECT_ERROR:return"string"==typeof t||l(t);case c.EVENT:case c.BINARY_EVENT:return Array.isArray(t)&&("number"==typeof t[0]||"string"==typeof t[0]&&-1===a.indexOf(t[0]));case c.ACK:case c.BINARY_ACK:return Array.isArray(t)}}destroy(){this.reconstructor&&(this.reconstructor.finishedReconstruction(),this.reconstructor=null)}}t.Decoder=u;class h{constructor(e){this.packet=e,this.buffers=[],this.reconPack=e}takeBinaryData(e){if(this.buffers.push(e),this.buffers.length===this.reconPack.attachments){const e=(0,s.reconstructPacket)(this.reconPack,this.buffers);return this.finishedReconstruction(),e}return null}finishedReconstruction(){this.reconPack=null,this.buffers=[]}}},665:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.hasBinary=t.isBinary=void 0;const n="function"==typeof ArrayBuffer,r=Object.prototype.toString,s="function"==typeof Blob||"undefined"!=typeof Blob&&"[object BlobConstructor]"===r.call(Blob),o="function"==typeof File||"undefined"!=typeof File&&"[object FileConstructor]"===r.call(File);function i(e){return n&&(e instanceof ArrayBuffer||(e=>"function"==typeof ArrayBuffer.isView?ArrayBuffer.isView(e):e.buffer instanceof ArrayBuffer)(e))||s&&e instanceof Blob||o&&e instanceof File}t.isBinary=i,t.hasBinary=function e(t,n){if(!t||"object"!=typeof t)return!1;if(Array.isArray(t)){for(let n=0,r=t.length;n{"use strict";function r(e){if(e)return function(e){for(var t in r.prototype)e[t]=r.prototype[t];return e}(e)}n.r(t),n.d(t,{Emitter:()=>r}),r.prototype.on=r.prototype.addEventListener=function(e,t){return this._callbacks=this._callbacks||{},(this._callbacks["$"+e]=this._callbacks["$"+e]||[]).push(t),this},r.prototype.once=function(e,t){function n(){this.off(e,n),t.apply(this,arguments)}return n.fn=t,this.on(e,n),this},r.prototype.off=r.prototype.removeListener=r.prototype.removeAllListeners=r.prototype.removeEventListener=function(e,t){if(this._callbacks=this._callbacks||{},0==arguments.length)return this._callbacks={},this;var n,r=this._callbacks["$"+e];if(!r)return this;if(1==arguments.length)return delete this._callbacks["$"+e],this;for(var s=0;s{for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var r={};return(()=>{"use strict";var e=r;Object.defineProperty(e,"__esModule",{value:!0}),e.validateConfiguration=e.parseConnectionString=e.prepareSql=e.escapeSqlParameter=e.SQLiteCloudRow=e.SQLiteCloudRowset=e.SQLiteCloudError=e.SQLiteCloudConnection=e.Statement=e.Database=void 0;var t=n(751);Object.defineProperty(e,"Database",{enumerable:!0,get:function(){return t.Database}});var s=n(880);Object.defineProperty(e,"Statement",{enumerable:!0,get:function(){return s.Statement}});var o=n(480);Object.defineProperty(e,"SQLiteCloudConnection",{enumerable:!0,get:function(){return o.SQLiteCloudConnection}});var i=n(906);Object.defineProperty(e,"SQLiteCloudError",{enumerable:!0,get:function(){return i.SQLiteCloudError}});var a=n(825);Object.defineProperty(e,"SQLiteCloudRowset",{enumerable:!0,get:function(){return a.SQLiteCloudRowset}}),Object.defineProperty(e,"SQLiteCloudRow",{enumerable:!0,get:function(){return a.SQLiteCloudRow}});var c=n(73);Object.defineProperty(e,"escapeSqlParameter",{enumerable:!0,get:function(){return c.escapeSqlParameter}}),Object.defineProperty(e,"prepareSql",{enumerable:!0,get:function(){return c.prepareSql}}),Object.defineProperty(e,"parseConnectionString",{enumerable:!0,get:function(){return c.parseConnectionString}}),Object.defineProperty(e,"validateConfiguration",{enumerable:!0,get:function(){return c.validateConfiguration}})})(),r})())); \ No newline at end of file diff --git a/public/sqlitecloud.v0.0.37.js b/public/sqlitecloud.v0.0.37.js deleted file mode 100644 index bc46adf..0000000 --- a/public/sqlitecloud.v0.0.37.js +++ /dev/null @@ -1 +0,0 @@ -!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.sqlitecloud=t():e.sqlitecloud=t()}(this,(()=>(()=>{var e={672:function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var s=Object.getOwnPropertyDescriptor(t,n);s&&!("get"in s?!t.__esModule:s.writable||s.configurable)||(s={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,s)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),s=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),o=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return s(t,e),t};Object.defineProperty(t,"__esModule",{value:!0}),t.getInitializationCommands=t.anonimizeError=t.anonimizeCommand=t.OperationsQueue=t.SQLiteCloudConnection=t.DEFAULT_PORT=t.DEFAULT_TIMEOUT=void 0;const i=n(230),a=n(261);t.DEFAULT_TIMEOUT=3e5,t.DEFAULT_PORT=9960,t.SQLiteCloudConnection=class{constructor(e,t){this.operations=new c,this.config="string"==typeof e?this.validateConfiguration({connectionString:e}):this.validateConfiguration(e),this.connect(t)}get connected(){var e;return(null===(e=this.transport)||void 0===e?void 0:e.connected)||!1}connect(e){return this.operations.enqueue((t=>{var r,s;a.isBrowser||(null===(r=this.config)||void 0===r?void 0:r.useWebsocket)||(null===(s=this.config)||void 0===s?void 0:s.gatewayUrl)?Promise.resolve().then((()=>o(n(122)))).then((n=>{this.transport=new n.WebSocketTransport,this.transport.connect(this.config,(n=>{n&&(console.error(`SQLiteCloudConnection.connect - error while connecting WebSocketTransport: ${n.toString()}`,this.config,n),this.close()),null==e||e.call(this,n||null),t(n)}))})).catch((e=>{t(e)})):Promise.resolve().then((()=>o(n(36)))).then((n=>{this.transport=new n.TlsSocketTransport,this.transport.connect(this.config,(n=>{n&&(console.error(`SQLiteCloudConnection.connect - error while connecting TlsSocketTransport: ${n.toString()}`,this.config,n),this.close()),null==e||e.call(this,n||null),t(n)}))})).catch((e=>{t(e)}))})),this}validateConfiguration(e){if(e.connectionString&&(e=Object.assign(Object.assign(Object.assign({},e),(0,a.parseConnectionString)(e.connectionString)),{connectionString:e.connectionString})),e.port||(e.port=t.DEFAULT_PORT),e.timeout=e.timeout&&e.timeout>0?e.timeout:t.DEFAULT_TIMEOUT,e.clientId||(e.clientId="SQLiteCloud"),e.verbose=(0,a.parseBoolean)(e.verbose),e.noBlob=(0,a.parseBoolean)(e.noBlob),e.compression=(0,a.parseBoolean)(e.compression),e.createDatabase=(0,a.parseBoolean)(e.createDatabase),e.nonlinearizable=(0,a.parseBoolean)(e.nonlinearizable),!e.username||!e.password||!e.host)throw console.error("SQLiteCloudConnection.validateConfiguration - missing arguments",e),new i.SQLiteCloudError("The user, password and host arguments must be specified.",{errorCode:"ERR_MISSING_ARGS"});return e.connectionString||(e.connectionString=`sqlitecloud://${e.username}:${e.password}@${e.host}:${e.port}/${e.database}`),e}log(e,...t){this.config.verbose&&(e=l(e),console.log(`${(new Date).toISOString()} ${this.config.clientId}: ${e}`,...t))}verbose(){this.config.verbose=!0}sendCommands(e,t){return this.operations.enqueue((n=>{if(this.transport)this.transport.processCommands(e,((e,r)=>{null==t||t.call(this,e,r),n(e)}));else{const e=new i.SQLiteCloudError("Connection not established",{errorCode:"ERR_CONNECTION_NOT_ESTABLISHED"});null==t||t.call(this,e),n(e)}})),this}close(){var e;return this.operations.clear(),null===(e=this.transport)||void 0===e||e.close(),this.transport=void 0,this}};class c{constructor(){this.queue=[],this.isProcessing=!1}enqueue(e){this.queue.push(e),this.isProcessing||this.processNext()}clear(){this.queue=[],this.isProcessing=!1}processNext(){if(0===this.queue.length)return void(this.isProcessing=!1);this.isProcessing=!0;const e=this.queue.shift();null==e||e((()=>{this.processNext()}))}}function l(e){return(e=(e=e.replace(/USER \S+/,"USER ******")).replace(/PASSWORD \S+?(?=;)/,"PASSWORD ******")).replace(/HASH \S+?(?=;)/,"HASH ******")}t.OperationsQueue=c,t.anonimizeCommand=l,t.anonimizeError=function(e){return(null==e?void 0:e.message)&&(e.message=l(e.message)),e},t.getInitializationCommands=function(e){let t=`AUTH USER ${e.username||""} ${e.passwordHashed?"HASH":"PASSWORD"} ${e.password||""}; `;return e.database&&(e.createDatabase&&!e.dbMemory&&(t+=`CREATE DATABASE ${e.database} IF NOT EXISTS; `),t+=`USE DATABASE ${e.database}; `),e.compression&&(t+="SET CLIENT KEY COMPRESSION TO 1; "),e.nonlinearizable&&(t+="SET CLIENT KEY NONLINEARIZABLE TO 1; "),e.noBlob&&(t+="SET CLIENT KEY NOBLOB TO 1; "),e.maxData&&(t+=`SET CLIENT KEY MAXDATA TO ${e.maxData}; `),e.maxRows&&(t+=`SET CLIENT KEY MAXROWS TO ${e.maxRows}; `),e.maxRowset&&(t+=`SET CLIENT KEY MAXROWSET TO ${e.maxRowset}; `),t}},537:function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(s,o){function i(e){try{c(r.next(e))}catch(e){o(e)}}function a(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?s(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(i,a)}c((r=r.apply(e,t||[])).next())}))},s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Database=void 0;const o=n(672),i=n(875),a=n(230),c=n(261),l=n(195),u=s(n(729));class h extends u.default{constructor(e,t,n){super(),this.connections=[],this.config="string"==typeof e?{connectionString:e}:e,"function"==typeof t&&(n=t,t=void 0),this.getConnection(n)}getConnection(e){var t;(null===(t=this.connections)||void 0===t?void 0:t.length)>0?null==e||e.call(this,null,this.connections[0]):this.connections.push(new o.SQLiteCloudConnection(this.config,(t=>{t?this.handleError(this.connections[0],t,e):(console.assert,null==e||e.call(this,null,this.connections[0]),this.emitEvent("open"))})))}handleError(e,t,n){e&&(this.connections=this.connections.filter((t=>t!==e)),e.close()),n?n.call(this,t):this.emitEvent("error",t)}processContext(e){if(e&&Array.isArray(e)&&e.length>0&&e[0]===a.SQLiteCloudArrayType.ARRAY_TYPE_SQLITE_EXEC)return{lastID:e[2],changes:e[3],totalChanges:e[4],finalized:e[5]}}emitEvent(e,...t){setTimeout((()=>{this.emit(e,...t)}),0)}getConfiguration(){return JSON.parse(JSON.stringify(this.config))}verbose(){this.config.verbose=!0;for(const e of this.connections)e.verbose();return this}configure(e,t){return this}run(e,...t){const{args:n,callback:r}=(0,c.popCallback)(t),s=(null==n?void 0:n.length)>0?(0,c.prepareSql)(e,...n):e;return this.getConnection(((e,t)=>{e||!t?this.handleError(null,e,r):t.sendCommands(s,((e,n)=>{if(e)this.handleError(t,e,r);else{const e=this.processContext(n);null==r||r.call(e||this,null,e?void 0:n)}}))})),this}get(e,...t){const{args:n,callback:r}=(0,c.popCallback)(t),s=(null==n?void 0:n.length)>0?(0,c.prepareSql)(e,...n):e;return this.getConnection(((e,t)=>{e||!t?this.handleError(null,e,r):t.sendCommands(s,((e,n)=>{e?this.handleError(t,e,r):n&&n instanceof i.SQLiteCloudRowset&&n.length>0?null==r||r.call(this,null,n[0]):null==r||r.call(this,null)}))})),this}all(e,...t){const{args:n,callback:r}=(0,c.popCallback)(t),s=(null==n?void 0:n.length)>0?(0,c.prepareSql)(e,...n):e;return this.getConnection(((e,t)=>{e||!t?this.handleError(null,e,r):t.sendCommands(s,((e,n)=>{e?this.handleError(t,e,r):n&&n instanceof i.SQLiteCloudRowset?null==r||r.call(this,null,n):null==r||r.call(this,null)}))})),this}each(e,...t){const{args:n,callback:r,complete:s}=(0,c.popCallback)(t),o=(null==n?void 0:n.length)>0?(0,c.prepareSql)(e,...n):e;return this.getConnection(((e,t)=>{e||!t?this.handleError(null,e,r):t.sendCommands(o,((e,n)=>{if(e)this.handleError(t,e,r);else if(n&&n instanceof i.SQLiteCloudRowset){if(r)for(const e of n)r.call(this,null,e);s&&s.call(this,null,n.numberOfRows)}else null==r||r.call(this,new a.SQLiteCloudError("Invalid rowset"))}))})),this}prepare(e,...t){const{args:n,callback:r}=(0,c.popCallback)(t);return new l.Statement(this,e,...n,r)}exec(e,t){return this.getConnection(((n,r)=>{n||!r?this.handleError(null,n,t):r.sendCommands(e,((e,n)=>{if(e)this.handleError(r,e,t);else{const e=this.processContext(n);null==t||t.call(e||this,null)}}))})),this}close(e){var t;if((null===(t=this.connections)||void 0===t?void 0:t.length)>0)for(const e of this.connections)e.close();null==e||e.call(this,null),this.emitEvent("close")}loadExtension(e,t){return t?t.call(this,new Error("Database.loadExtension - Not implemented")):this.emitEvent("error",new Error("Database.loadExtension - Not implemented")),this}interrupt(){}sql(e,...t){return r(this,void 0,void 0,(function*(){let n="";if(Array.isArray(e)&&"raw"in e)e.forEach(((e,r)=>{n+=e+(r0?(0,c.prepareSql)(e,...t):e}return new Promise(((e,t)=>{this.getConnection(((r,s)=>{r||!s?t(r):s.sendCommands(n,((n,r)=>{if(n)t(n);else{const t=this.processContext(r);e(t||r)}}))}))}))}))}}t.Database=h},875:function(e,t,n){"use strict";var r,s,o,i,a=this&&this.__classPrivateFieldSet||function(e,t,n,r,s){if("m"===r)throw new TypeError("Private method is not writable");if("a"===r&&!s)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!s:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===r?s.call(e,n):s?s.value=n:t.set(e,n),n},c=this&&this.__classPrivateFieldGet||function(e,t,n,r){if("a"===n&&!r)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!r:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===n?r:"a"===n?r.call(e):r?r.value:t.get(e)};Object.defineProperty(t,"__esModule",{value:!0}),t.SQLiteCloudRowset=t.SQLiteCloudRow=void 0;const l=n(230);class u{constructor(e,t,n){r.set(this,void 0),s.set(this,void 0),a(this,r,e,"f"),a(this,s,n,"f");for(let e=0;er!==t&&e===n[t]))>=0;)n[t]=`${n[t]}_${e}`,e++}for(let r=0,s=0;re.name))}get metadata(){return c(this,o,"f")}getItem(e,t){if(e<0||e>=this.numberOfRows||t<0||t>=this.numberOfColumns)throw new l.SQLiteCloudError(`This rowset has ${this.numberOfColumns} columns by ${this.numberOfRows} rows, requested column ${t} and row ${e} is invalid.`);return c(this,i,"f")[e*this.numberOfColumns+t]}slice(e,t){e=void 0===e?0:e<0?this.numberOfRows+e:e,e=Math.min(Math.max(e,0),this.numberOfRows),t=void 0===t?this.numberOfRows:t<0?this.numberOfRows+t:t,t=Math.min(Math.max(e,t),this.numberOfRows);const n=Object.assign(Object.assign({},c(this,o,"f")),{numberOfRows:t-e}),r=c(this,i,"f").slice(e*this.numberOfColumns,t*this.numberOfColumns);return console.assert(r&&r.length===n.numberOfRows*n.numberOfColumns,"SQLiteCloudRowset.slice - invalid rowset data"),new h(n,r)}map(e){const t=[];for(let n=0;n{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Statement=void 0;const r=n(261);t.Statement=class{constructor(e,t,...n){const{args:s,callback:o}=(0,r.popCallback)(n);this._database=e,this._sql=t,(null==s?void 0:s.length)>0?this.bind(...s,o):null==o||o.call(this,null)}bind(...e){const{args:t,callback:n}=(0,r.popCallback)(e);try{this._preparedSql=(0,r.prepareSql)(this._sql,...t),n&&n.call(this,null)}catch(e){this._preparedSql=void 0,n&&n.call(this,e)}return this}run(...e){const{args:t,callback:n}=(0,r.popCallback)(e||[]);return(null==t?void 0:t.length)>0?this.bind(...t,(e=>{e?null==n||n.call(this,e):this._database.run(this._preparedSql||"",n)})):this._database.run(this._preparedSql||"",n),this}get(...e){const{args:t,callback:n}=(0,r.popCallback)(e||[]);return(null==t?void 0:t.length)>0?this.bind(...t,(e=>{e?null==n||n.call(this,e):this._database.get(this._preparedSql||"",n)})):this._database.get(this._preparedSql||"",n),this}all(...e){const{args:t,callback:n}=(0,r.popCallback)(e||[]);return(null==t?void 0:t.length)>0?this.bind(...t,(e=>{e?null==n||n.call(this,e):this._database.all(this._preparedSql||"",n)})):this._database.all(this._preparedSql||"",n),this}each(...e){const{args:t,callback:n,complete:s}=(0,r.popCallback)(e);return(null==t?void 0:t.length)>0?this.bind(...t,(e=>{e?null==n||n.call(this,e):this._database.each(this._preparedSql||"",n,s)})):this._database.each(this._preparedSql||"",n,s),this}}},36:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.TlsSocketTransport=void 0;const s=n(230),o=n(875),i=n(672),a=n(672),c=r(n(492)),l=n(405),u="+",h="!",d="-",p=":",f=",",m="*",g="/",y="#",b="_",v="$",w="%",_="^",C="=";function k(e){const t=parseInt(e.subarray(0,e.indexOf(":")+1).toString());e=e.subarray(e.indexOf(":")+1);const{data:n,fwdBuffer:r}=function(e,t=1){const n=[];for(let r=0;r1&&(o=a[1],a.length>2&&(i=a[2]));const c=n.join(" "),l=parseInt(r),u=parseInt(o),h=parseInt(i);throw new s.SQLiteCloudError(c,{errorCode:l.toString(),externalErrorCode:u.toString(),offsetCode:h})}(e,r)}throw new TypeError(`Data type: ${n} is not defined in SCSP`)}t.TlsSocketTransport=class{get connected(){return!!this.socket}connect(e,t){console.assert(!this.connected,"Connection already established");const n=e=>{this.socket&&(this.socket.removeAllListeners("data"),this.socket.removeAllListeners("error"),this.socket.removeAllListeners("close"),e&&this.close())};return this.config=e,this.socket=c.default.connect(this.config.port,this.config.host,this.config.tlsOptions,(()=>{var r;if(null===(r=this.socket)||void 0===r?void 0:r.authorized){if(null===this.socket)return void n(new s.SQLiteCloudError("Connection was closed before it was done opening"));console.assert(this.socket,"Connection already closed");const r=(0,i.getInitializationCommands)(e);this.processCommands(r,(e=>{e&&this.socket&&this.close(),t&&(null==t||t.call(this,e),t=void 0),n(e)}))}else{const e=(0,a.anonimizeError)(this.socket.authorizationError);console.error("Connection was not authorized",e),this.close(),n(new s.SQLiteCloudError("Connection was not authorized",{cause:e}))}})),this.socket.on("close",(()=>{this.socket=null,n(new s.SQLiteCloudError("Connection was closed"))})),this.socket.once("error",(e=>{console.error("Connection error",e),n(new s.SQLiteCloudError("Connection error",{cause:e}))})),this}processCommands(e,t){var n,r,i,c;if(!this.socket)return null==t||t.call(this,new s.SQLiteCloudError("Connection not established",{errorCode:"ERR_CONNECTION_NOT_ESTABLISHED"})),this;c=e,e=`+${Buffer.byteLength(c,"utf-8")} ${c}`;let u=Buffer.alloc(0);const h=[];let d;new Date;const m=(e,n)=>{clearTimeout(d),this.socket&&(this.socket.removeAllListeners("data"),this.socket.removeAllListeners("error"),this.socket.removeAllListeners("close")),t&&(null==t||t.call(this,e,n),t=void 0)},y=e=>{var t,n,r;try{let s=0===u.length?e.subarray(0,1).toString():u.subarray(0,1).toString("utf8");if(u=Buffer.concat([u,e]),(r=s)!=p&&r!=f&&r!=b){const r=function(e){return parseInt(e.subarray(1,e.indexOf(" ")).toString("utf8"))}(u);if(u.length-u.indexOf(" ")-1>=r){if(null===(t=this.config)||void 0===t?void 0:t.verbose){let e=u.toString("utf8");e.length>1e3&&(e=e.substring(0,100)+"..."+e.substring(e.length-40))}if(s===w&&({buffer:u,dataType:s}=function(e){const t=e.indexOf(" ");e=e.subarray(t+1);const n=parseInt(e.subarray(0,e.indexOf(" ")+1).toString("utf8"));e=e.subarray(e.indexOf(" ")+1);const r=parseInt(e.subarray(0,e.indexOf(" ")+1).toString("utf8")),s=(e=e.subarray(e.indexOf(" ")+1)).subarray(0,1).toString("utf8"),o=Buffer.alloc(r),i=e.subarray(e.length-n),a=l.decompressBlock(i,o,0,n,0);if(e=Buffer.concat([e.subarray(0,e.length-n),o]),a<=0||a!==r)throw new Error(`lz4 decompression error at offset ${a}`);return{buffer:e,dataType:s}}(u)),s!==g){null===(n=this.socket)||void 0===n||n.off("data",y);const{data:e}=E(u);m(null,e)}else if("0 0 0 "===e.subarray(e.indexOf(" ")+1,e.length).toString()){const e=function(e){let t={version:1,numberOfColumns:0,numberOfRows:0,columns:[]};const n=[];for(let r=0;r{m(new s.SQLiteCloudError("Connection was closed",{cause:(0,a.anonimizeCommand)(e)}))})),null===(r=this.socket)||void 0===r||r.write(e,"utf8",(()=>{var t,n;d=setTimeout((()=>{const t=new s.SQLiteCloudError("Request timed out",{cause:(0,a.anonimizeCommand)(e)});m(t)}),null===(t=this.config)||void 0===t?void 0:t.timeout),null===(n=this.socket)||void 0===n||n.on("data",y)})),null===(i=this.socket)||void 0===i||i.once("error",(e=>{console.error("Socket error",e),this.close(),m(new s.SQLiteCloudError("Socket error",{cause:(0,a.anonimizeError)(e)}))})),this}close(){return console.assert(null!==this.socket,"TlsSocketTransport.close - connection already closed"),this.socket&&(this.socket.destroy(),this.socket=null),this.socket=void 0,this}}},122:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.WebSocketTransport=void 0;const r=n(230),s=n(875),o=n(46);t.WebSocketTransport=class{get connected(){return!!this.socket}connect(e,t){var n;try{if(console.assert(!this.connected,"Connection already established"),!this.socket){this.config=e;const t=this.config.connectionString,r=(null===(n=this.config)||void 0===n?void 0:n.gatewayUrl)||`ws://${this.config.host}:4000`;this.socket=(0,o.io)(r,{auth:{token:t}})}null==t||t.call(this,null)}catch(e){null==t||t.call(this,e)}return this}processCommands(e,t){return this.socket?(this.socket.emit("v1/sql",{sql:e,row:"array"},(e=>{if(null==e?void 0:e.error){const n=new r.SQLiteCloudError(e.error.detail,Object.assign({},e.error));null==t||t.call(this,n)}else{const{data:n,metadata:r}=e;if(n&&r&&void 0!==r.numberOfRows&&void 0!==r.numberOfColumns&&void 0!==r.columns){console.assert(Array.isArray(n),"SQLiteCloudWebsocketConnection.processCommands - data is not an array");const e=new s.SQLiteCloudRowset(r,n.flat());return void(null==t||t.call(this,null,e))}null==t||t.call(this,null,null==e?void 0:e.data)}})),this):(null==t||t.call(this,new r.SQLiteCloudError("Connection not established",{errorCode:"ERR_CONNECTION_NOT_ESTABLISHED"})),this)}close(){var e;return console.assert(null!==this.socket,"WebsocketTransport.close - connection already closed"),this.socket&&(null===(e=this.socket)||void 0===e||e.close(),this.socket=void 0),this.socket=void 0,this}}},230:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.SQLiteCloudArrayType=t.SQLiteCloudError=void 0;class n extends Error{constructor(e,t){super(e),this.name="SQLiteCloudError",t&&Object.assign(this,t)}}var r;t.SQLiteCloudError=n,(r=t.SQLiteCloudArrayType||(t.SQLiteCloudArrayType={}))[r.ARRAY_TYPE_SQLITE_EXEC=10]="ARRAY_TYPE_SQLITE_EXEC",r[r.ARRAY_TYPE_DB_STATUS=11]="ARRAY_TYPE_DB_STATUS",r[r.ARRAY_TYPE_METADATA=12]="ARRAY_TYPE_METADATA",r[r.ARRAY_TYPE_VM_STEP=20]="ARRAY_TYPE_VM_STEP",r[r.ARRAY_TYPE_VM_COMPILE=21]="ARRAY_TYPE_VM_COMPILE",r[r.ARRAY_TYPE_VM_STEP_ONE=22]="ARRAY_TYPE_VM_STEP_ONE",r[r.ARRAY_TYPE_VM_SQL=23]="ARRAY_TYPE_VM_SQL",r[r.ARRAY_TYPE_VM_STATUS=24]="ARRAY_TYPE_VM_STATUS",r[r.ARRAY_TYPE_VM_LIST=25]="ARRAY_TYPE_VM_LIST",r[r.ARRAY_TYPE_BACKUP_INIT=40]="ARRAY_TYPE_BACKUP_INIT",r[r.ARRAY_TYPE_BACKUP_STEP=41]="ARRAY_TYPE_BACKUP_STEP",r[r.ARRAY_TYPE_BACKUP_END=42]="ARRAY_TYPE_BACKUP_END",r[r.ARRAY_TYPE_SQLITE_STATUS=50]="ARRAY_TYPE_SQLITE_STATUS"},261:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.parseBoolean=t.parseConnectionString=t.popCallback=t.prepareSql=t.escapeSqlParameter=t.isNode=t.isBrowser=void 0;const r=n(230);function s(e){if(null==e)return"NULL";if("string"==typeof e)return`'${e=e.replace(/'/g,"''")}'`;if("number"==typeof e)return e.toString();if("boolean"==typeof e)return e?"1":"0";if(Buffer.isBuffer(e))return`X'${e.toString("hex")}'`;if("object"==typeof e){let t=JSON.stringify(e);return t=t.replace(/'/g,"''"),`'${t}'`}throw new r.SQLiteCloudError("Unsupported parameter type: "+typeof e)}t.isBrowser="undefined"!=typeof window&&void 0!==window.document,t.isNode="undefined"!=typeof process&&null!=process.versions&&null!=process.versions.node,t.escapeSqlParameter=s,t.prepareSql=function(e,...t){1===(null==t?void 0:t.length)&&Array.isArray(t[0])&&(t=t[0]);let n=1,o=e.replace(/\?(\d+)?/g,((e,o)=>{const i=o?parseInt(o):n;let a;if(n++,!t[0]||"object"!=typeof t[0]||t[0]instanceof Buffer||(a=t[0][i]),!a){if(i>t.length)throw new r.SQLiteCloudError("Not enough parameters");a=t[i-1]}return null!=a?s(a):"NULL"}));if(1===(null==t?void 0:t.length)&&t[0]&&"object"==typeof t[0]){const e=t[0];for(const[t,n]of Object.entries(e)){const e=t.charAt(0);if("$"==e||":"==e||"@"==e){const e=s(n);o=o.replace(new RegExp(`\\${t}`,"g"),e)}}}return o},t.popCallback=function(e){const t=e;return e&&e.length>0&&"function"==typeof e[e.length-1]?e.length>1&&"function"==typeof e[e.length-2]?{args:t.slice(0,-2),callback:e[e.length-2],complete:e[e.length-1]}:{args:t.slice(0,-1),callback:e[e.length-1]}:{args:t}},t.parseConnectionString=function(e){try{const t=e.replace("sqlitecloud:","https:"),n=new URL(t),r={};n.searchParams.forEach(((e,t)=>{r[t]=e}));const s=Object.assign({username:n.username,password:n.password,host:n.hostname,port:n.port?parseInt(n.port):void 0},r),o=n.pathname.replace("/","");return o&&(s.database=o),s}catch(t){throw new r.SQLiteCloudError(`Invalid connection string: ${e}`)}},t.parseBoolean=function(e){return"string"==typeof e?"true"===e.toLowerCase()||"1"===e:!!e}},227:(e,t,n)=>{t.formatArgs=function(t){if(t[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+t[0]+(this.useColors?"%c ":" ")+"+"+e.exports.humanize(this.diff),!this.useColors)return;const n="color: "+this.color;t.splice(1,0,n,"color: inherit");let r=0,s=0;t[0].replace(/%[a-zA-Z%]/g,(e=>{"%%"!==e&&(r++,"%c"===e&&(s=r))})),t.splice(s,0,n)},t.save=function(e){try{e?t.storage.setItem("debug",e):t.storage.removeItem("debug")}catch(e){}},t.load=function(){let e;try{e=t.storage.getItem("debug")}catch(e){}return!e&&"undefined"!=typeof process&&"env"in process&&(e=process.env.DEBUG),e},t.useColors=function(){return!("undefined"==typeof window||!window.process||"renderer"!==window.process.type&&!window.process.__nwjs)||("undefined"==typeof navigator||!navigator.userAgent||!navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/))&&("undefined"!=typeof document&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||"undefined"!=typeof window&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)&&parseInt(RegExp.$1,10)>=31||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/))},t.storage=function(){try{return localStorage}catch(e){}}(),t.destroy=(()=>{let e=!1;return()=>{e||(e=!0,console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."))}})(),t.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"],t.log=console.debug||console.log||(()=>{}),e.exports=n(447)(t);const{formatters:r}=e.exports;r.j=function(e){try{return JSON.stringify(e)}catch(e){return"[UnexpectedJSONParseError]: "+e.message}}},447:(e,t,n)=>{e.exports=function(e){function t(e){let n,s,o,i=null;function a(...e){if(!a.enabled)return;const r=a,s=Number(new Date),o=s-(n||s);r.diff=o,r.prev=n,r.curr=s,n=s,e[0]=t.coerce(e[0]),"string"!=typeof e[0]&&e.unshift("%O");let i=0;e[0]=e[0].replace(/%([a-zA-Z%])/g,((n,s)=>{if("%%"===n)return"%";i++;const o=t.formatters[s];if("function"==typeof o){const t=e[i];n=o.call(r,t),e.splice(i,1),i--}return n})),t.formatArgs.call(r,e),(r.log||t.log).apply(r,e)}return a.namespace=e,a.useColors=t.useColors(),a.color=t.selectColor(e),a.extend=r,a.destroy=t.destroy,Object.defineProperty(a,"enabled",{enumerable:!0,configurable:!1,get:()=>null!==i?i:(s!==t.namespaces&&(s=t.namespaces,o=t.enabled(e)),o),set:e=>{i=e}}),"function"==typeof t.init&&t.init(a),a}function r(e,n){const r=t(this.namespace+(void 0===n?":":n)+e);return r.log=this.log,r}function s(e){return e.toString().substring(2,e.toString().length-2).replace(/\.\*\?$/,"*")}return t.debug=t,t.default=t,t.coerce=function(e){return e instanceof Error?e.stack||e.message:e},t.disable=function(){const e=[...t.names.map(s),...t.skips.map(s).map((e=>"-"+e))].join(",");return t.enable(""),e},t.enable=function(e){let n;t.save(e),t.namespaces=e,t.names=[],t.skips=[];const r=("string"==typeof e?e:"").split(/[\s,]+/),s=r.length;for(n=0;n{t[n]=e[n]})),t.names=[],t.skips=[],t.formatters={},t.selectColor=function(e){let n=0;for(let t=0;t{"use strict";var t=Object.prototype.hasOwnProperty,n="~";function r(){}function s(e,t,n){this.fn=e,this.context=t,this.once=n||!1}function o(e,t,r,o,i){if("function"!=typeof r)throw new TypeError("The listener must be a function");var a=new s(r,o||e,i),c=n?n+t:t;return e._events[c]?e._events[c].fn?e._events[c]=[e._events[c],a]:e._events[c].push(a):(e._events[c]=a,e._eventsCount++),e}function i(e,t){0==--e._eventsCount?e._events=new r:delete e._events[t]}function a(){this._events=new r,this._eventsCount=0}Object.create&&(r.prototype=Object.create(null),(new r).__proto__||(n=!1)),a.prototype.eventNames=function(){var e,r,s=[];if(0===this._eventsCount)return s;for(r in e=this._events)t.call(e,r)&&s.push(n?r.slice(1):r);return Object.getOwnPropertySymbols?s.concat(Object.getOwnPropertySymbols(e)):s},a.prototype.listeners=function(e){var t=n?n+e:e,r=this._events[t];if(!r)return[];if(r.fn)return[r.fn];for(var s=0,o=r.length,i=new Array(o);s{var r=n(887),s=n(325),o=65536,i=h(5<<20),a=function(){try{return new Uint32Array(o)}catch(n){for(var e=new Array(o),t=0;t>4&7;if(void 0===u[i])throw new Error("invalid block size "+i);var a=u[i];if(o)return s.readU64(e,t);t++;for(var h=0;;){var d=s.readU32(e,t);if(t+=4,h+=d&l?d&=2147483647:a,0===d)return h;r&&(t+=4),t+=d}},t.makeBuffer=h,t.decompressBlock=function(e,t,n,r,s){var o,i,a,c,l;for(a=n+r;n>4;if(h>0){if(15===h)for(;h+=e[n],255===e[n++];);for(c=n+h;n=a)break;if(o=15&u,i=e[n++]|e[n++]<<8,15===o)for(;o+=e[n],255===e[n++];);for(c=(l=s-i)+(o+=4);l=13)for(var f=67;n+4>>0;if(i=o[g=(g>>16^g)>>>0&65535]-1,o[g]=n+1,i<0||n-i>>>16>0||s.readU32(e,i)!==m)n+=f++>>6;else{for(f=67,u=n-a,l=n-i,i+=4,c=n+=4;n=15){for(t[h++]=240+y,p=u-15;p>=255;p-=255)t[h++]=255;t[h++]=p}else t[h++]=(u<<4)+y;for(var b=0;b>8,c>=15){for(p=c-15;p>=255;p-=255)t[h++]=255;t[h++]=p}a=n}}if(0===a)return 0;if((u=d-a)>=15){for(t[h++]=240,p=u-15;p>=255;p-=255)t[h++]=255;t[h++]=p}else t[h++]=u<<4;for(n=a;n>4&7;if(void 0===u[p])throw new Error("invalid block size");for(i&&(h+=8),h++;;){var f;if(f=s.readU32(e,h),h+=4,0===f)break;if(r&&(h+=4),0!=(f&l)){f&=2147483647;for(var m=0;m>8,l++;var h=u[7],d=e.length,p=0;for(function(e){for(var t=0;t0;){var f,m=d>h?h:d;if((f=t.compressBlock(e,i,p,m,a))>m||0===f){s.writeU32(n,l,2147483648|m),l+=4;for(var g=p+m;p{t.hashU32=function(e){return-1252372727^(e=(e=(e=374761393+(e=-949894596^(e=2127912214+(e|=0)+(e<<12)|0)^e>>>19)+(e<<5)|0)-744332180^e<<9)-42973499+(e<<3)|0)^e>>>16|0},t.readU64=function(e,t){var n=0;return n|=e[t++]<<0,n|=e[t++]<<8,n|=e[t++]<<16,n|=e[t++]<<24,n|=e[t++]<<32,n|=e[t++]<<40,(n|=e[t++]<<48)|e[t++]<<56},t.readU32=function(e,t){var n=0;return n|=e[t++]<<0,n|=e[t++]<<8,(n|=e[t++]<<16)|e[t++]<<24},t.writeU32=function(e,t,n){e[t++]=n>>0&255,e[t++]=n>>8&255,e[t++]=n>>16&255,e[t++]=n>>24&255},t.imul=function(e,t){var n=65535&e,r=65535&t;return n*r+((e>>>16)*r+n*(t>>>16)<<16)|0}},887:(e,t,n)=>{var r=n(325),s=2654435761,o=2246822519,i=3266489917,a=374761393;function c(e,t){return(e|=0)>>>(32-(t|=0)|0)|e<>>(32-t|0)|e<>>(t|=0)^e|0}function h(e,t,n,s,o){return l(r.imul(t,n)+e,s,o)}function d(e,t,n){return l(e+r.imul(t[n],a),11,s)}function p(e,t,n){return h(e,r.readU32(t,n),i,17,668265263)}function f(e,t,n){return[h(e[0],r.readU32(t,n+0),o,13,s),h(e[1],r.readU32(t,n+4),o,13,s),h(e[2],r.readU32(t,n+8),o,13,s),h(e[3],r.readU32(t,n+12),o,13,s)]}t.hash=function(e,t,n,l){var h,m;if(m=l,l>=16){for(h=[e+s+o,e+o,e,e-s];l>=16;)h=f(h,t,n),n+=16,l-=16;h=c(h[0],1)+c(h[1],7)+c(h[2],12)+c(h[3],18)+m}else h=e+a+l>>>0;for(;l>=4;)h=p(h,t,n),n+=4,l-=4;for(;l>0;)h=d(h,t,n),n++,l--;return(h=u(r.imul(u(r.imul(u(h,15),o),13),i),16))>>>0}},824:e=>{var t=1e3,n=60*t,r=60*n,s=24*r;function o(e,t,n,r){var s=t>=1.5*n;return Math.round(e/n)+" "+r+(s?"s":"")}e.exports=function(e,i){i=i||{};var a,c,l=typeof e;if("string"===l&&e.length>0)return function(e){if(!((e=String(e)).length>100)){var o=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(e);if(o){var i=parseFloat(o[1]);switch((o[2]||"ms").toLowerCase()){case"years":case"year":case"yrs":case"yr":case"y":return 315576e5*i;case"weeks":case"week":case"w":return 6048e5*i;case"days":case"day":case"d":return i*s;case"hours":case"hour":case"hrs":case"hr":case"h":return i*r;case"minutes":case"minute":case"mins":case"min":case"m":return i*n;case"seconds":case"second":case"secs":case"sec":case"s":return i*t;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return i;default:return}}}}(e);if("number"===l&&isFinite(e))return i.long?(a=e,(c=Math.abs(a))>=s?o(a,c,s,"day"):c>=r?o(a,c,r,"hour"):c>=n?o(a,c,n,"minute"):c>=t?o(a,c,t,"second"):a+" ms"):function(e){var o=Math.abs(e);return o>=s?Math.round(e/s)+"d":o>=r?Math.round(e/r)+"h":o>=n?Math.round(e/n)+"m":o>=t?Math.round(e/t)+"s":e+"ms"}(e);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(e))}},492:()=>{},419:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.hasCORS=void 0;let n=!1;try{n="undefined"!=typeof XMLHttpRequest&&"withCredentials"in new XMLHttpRequest}catch(e){}t.hasCORS=n},754:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.decode=t.encode=void 0,t.encode=function(e){let t="";for(let n in e)e.hasOwnProperty(n)&&(t.length&&(t+="&"),t+=encodeURIComponent(n)+"="+encodeURIComponent(e[n]));return t},t.decode=function(e){let t={},n=e.split("&");for(let e=0,r=n.length;e{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.parse=void 0;const n=/^(?:(?![^:@\/?#]+:[^:@\/]*@)(http|https|ws|wss):\/\/)?((?:(([^:@\/?#]*)(?::([^:@\/?#]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/,r=["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"];t.parse=function(e){if(e.length>2e3)throw"URI too long";const t=e,s=e.indexOf("["),o=e.indexOf("]");-1!=s&&-1!=o&&(e=e.substring(0,s)+e.substring(s,o).replace(/:/g,";")+e.substring(o,e.length));let i=n.exec(e||""),a={},c=14;for(;c--;)a[r[c]]=i[c]||"";return-1!=s&&-1!=o&&(a.source=t,a.host=a.host.substring(1,a.host.length-1).replace(/;/g,":"),a.authority=a.authority.replace("[","").replace("]","").replace(/;/g,":"),a.ipv6uri=!0),a.pathNames=function(e,t){const n=t.replace(/\/{2,9}/g,"/").split("/");return"/"!=t.slice(0,1)&&0!==t.length||n.splice(0,1),"/"==t.slice(-1)&&n.splice(n.length-1,1),n}(0,a.path),a.queryKey=function(e,t){const n={};return t.replace(/(?:^|&)([^&=]*)=?([^&]*)/g,(function(e,t,r){t&&(n[t]=r)})),n}(0,a.query),a}},726:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.yeast=t.decode=t.encode=void 0;const n="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_".split(""),r={};let s,o=0,i=0;function a(e){let t="";do{t=n[e%64]+t,e=Math.floor(e/64)}while(e>0);return t}for(t.encode=a,t.decode=function(e){let t=0;for(i=0;i{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.globalThisShim=void 0,t.globalThisShim="undefined"!=typeof self?self:"undefined"!=typeof window?window:Function("return this")()},679:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.nextTick=t.parse=t.installTimerFunctions=t.transports=t.TransportError=t.Transport=t.protocol=t.Socket=void 0;const r=n(481);Object.defineProperty(t,"Socket",{enumerable:!0,get:function(){return r.Socket}}),t.protocol=r.Socket.protocol;var s=n(870);Object.defineProperty(t,"Transport",{enumerable:!0,get:function(){return s.Transport}}),Object.defineProperty(t,"TransportError",{enumerable:!0,get:function(){return s.TransportError}});var o=n(385);Object.defineProperty(t,"transports",{enumerable:!0,get:function(){return o.transports}});var i=n(622);Object.defineProperty(t,"installTimerFunctions",{enumerable:!0,get:function(){return i.installTimerFunctions}});var a=n(222);Object.defineProperty(t,"parse",{enumerable:!0,get:function(){return a.parse}});var c=n(552);Object.defineProperty(t,"nextTick",{enumerable:!0,get:function(){return c.nextTick}})},481:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Socket=void 0;const s=n(385),o=n(622),i=n(754),a=n(222),c=r(n(227)),l=n(260),u=n(373),h=n(552),d=(0,c.default)("engine.io-client:socket");class p extends l.Emitter{constructor(e,t={}){super(),this.binaryType=h.defaultBinaryType,this.writeBuffer=[],e&&"object"==typeof e&&(t=e,e=null),e?(e=(0,a.parse)(e),t.hostname=e.host,t.secure="https"===e.protocol||"wss"===e.protocol,t.port=e.port,e.query&&(t.query=e.query)):t.host&&(t.hostname=(0,a.parse)(t.host).host),(0,o.installTimerFunctions)(this,t),this.secure=null!=t.secure?t.secure:"undefined"!=typeof location&&"https:"===location.protocol,t.hostname&&!t.port&&(t.port=this.secure?"443":"80"),this.hostname=t.hostname||("undefined"!=typeof location?location.hostname:"localhost"),this.port=t.port||("undefined"!=typeof location&&location.port?location.port:this.secure?"443":"80"),this.transports=t.transports||["polling","websocket","webtransport"],this.writeBuffer=[],this.prevBufferLen=0,this.opts=Object.assign({path:"/engine.io",agent:!1,withCredentials:!1,upgrade:!0,timestampParam:"t",rememberUpgrade:!1,addTrailingSlash:!0,rejectUnauthorized:!0,perMessageDeflate:{threshold:1024},transportOptions:{},closeOnBeforeunload:!1},t),this.opts.path=this.opts.path.replace(/\/$/,"")+(this.opts.addTrailingSlash?"/":""),"string"==typeof this.opts.query&&(this.opts.query=(0,i.decode)(this.opts.query)),this.id=null,this.upgrades=null,this.pingInterval=null,this.pingTimeout=null,this.pingTimeoutTimer=null,"function"==typeof addEventListener&&(this.opts.closeOnBeforeunload&&(this.beforeunloadEventListener=()=>{this.transport&&(this.transport.removeAllListeners(),this.transport.close())},addEventListener("beforeunload",this.beforeunloadEventListener,!1)),"localhost"!==this.hostname&&(this.offlineEventListener=()=>{this.onClose("transport close",{description:"network connection lost"})},addEventListener("offline",this.offlineEventListener,!1))),this.open()}createTransport(e){d('creating transport "%s"',e);const t=Object.assign({},this.opts.query);t.EIO=u.protocol,t.transport=e,this.id&&(t.sid=this.id);const n=Object.assign({},this.opts,{query:t,socket:this,hostname:this.hostname,secure:this.secure,port:this.port},this.opts.transportOptions[e]);return d("options: %j",n),new s.transports[e](n)}open(){let e;if(this.opts.rememberUpgrade&&p.priorWebsocketSuccess&&-1!==this.transports.indexOf("websocket"))e="websocket";else{if(0===this.transports.length)return void this.setTimeoutFn((()=>{this.emitReserved("error","No transports available")}),0);e=this.transports[0]}this.readyState="opening";try{e=this.createTransport(e)}catch(e){return d("error while creating transport: %s",e),this.transports.shift(),void this.open()}e.open(),this.setTransport(e)}setTransport(e){d("setting transport %s",e.name),this.transport&&(d("clearing existing transport %s",this.transport.name),this.transport.removeAllListeners()),this.transport=e,e.on("drain",this.onDrain.bind(this)).on("packet",this.onPacket.bind(this)).on("error",this.onError.bind(this)).on("close",(e=>this.onClose("transport close",e)))}probe(e){d('probing transport "%s"',e);let t=this.createTransport(e),n=!1;p.priorWebsocketSuccess=!1;const r=()=>{n||(d('probe transport "%s" opened',e),t.send([{type:"ping",data:"probe"}]),t.once("packet",(r=>{if(!n)if("pong"===r.type&&"probe"===r.data){if(d('probe transport "%s" pong',e),this.upgrading=!0,this.emitReserved("upgrading",t),!t)return;p.priorWebsocketSuccess="websocket"===t.name,d('pausing current transport "%s"',this.transport.name),this.transport.pause((()=>{n||"closed"!==this.readyState&&(d("changing transport and sending upgrade packet"),l(),this.setTransport(t),t.send([{type:"upgrade"}]),this.emitReserved("upgrade",t),t=null,this.upgrading=!1,this.flush())}))}else{d('probe transport "%s" failed',e);const n=new Error("probe error");n.transport=t.name,this.emitReserved("upgradeError",n)}})))};function s(){n||(n=!0,l(),t.close(),t=null)}const o=n=>{const r=new Error("probe error: "+n);r.transport=t.name,s(),d('probe transport "%s" failed because of error: %s',e,n),this.emitReserved("upgradeError",r)};function i(){o("transport closed")}function a(){o("socket closed")}function c(e){t&&e.name!==t.name&&(d('"%s" works - aborting "%s"',e.name,t.name),s())}const l=()=>{t.removeListener("open",r),t.removeListener("error",o),t.removeListener("close",i),this.off("close",a),this.off("upgrading",c)};t.once("open",r),t.once("error",o),t.once("close",i),this.once("close",a),this.once("upgrading",c),-1!==this.upgrades.indexOf("webtransport")&&"webtransport"!==e?this.setTimeoutFn((()=>{n||t.open()}),200):t.open()}onOpen(){if(d("socket open"),this.readyState="open",p.priorWebsocketSuccess="websocket"===this.transport.name,this.emitReserved("open"),this.flush(),"open"===this.readyState&&this.opts.upgrade){d("starting upgrade probes");let e=0;const t=this.upgrades.length;for(;e{this.onClose("ping timeout")}),this.pingInterval+this.pingTimeout),this.opts.autoUnref&&this.pingTimeoutTimer.unref()}onDrain(){this.writeBuffer.splice(0,this.prevBufferLen),this.prevBufferLen=0,0===this.writeBuffer.length?this.emitReserved("drain"):this.flush()}flush(){if("closed"!==this.readyState&&this.transport.writable&&!this.upgrading&&this.writeBuffer.length){const e=this.getWritablePackets();d("flushing %d packets in socket",e.length),this.transport.send(e),this.prevBufferLen=e.length,this.emitReserved("flush")}}getWritablePackets(){if(!(this.maxPayload&&"polling"===this.transport.name&&this.writeBuffer.length>1))return this.writeBuffer;let e=1;for(let t=0;t0&&e>this.maxPayload)return d("only send %d out of %d packets",t,this.writeBuffer.length),this.writeBuffer.slice(0,t);e+=2}return d("payload size is %d (max: %d)",e,this.maxPayload),this.writeBuffer}write(e,t,n){return this.sendPacket("message",e,t,n),this}send(e,t,n){return this.sendPacket("message",e,t,n),this}sendPacket(e,t,n,r){if("function"==typeof t&&(r=t,t=void 0),"function"==typeof n&&(r=n,n=null),"closing"===this.readyState||"closed"===this.readyState)return;(n=n||{}).compress=!1!==n.compress;const s={type:e,data:t,options:n};this.emitReserved("packetCreate",s),this.writeBuffer.push(s),r&&this.once("flush",r),this.flush()}close(){const e=()=>{this.onClose("forced close"),d("socket closing - telling transport to close"),this.transport.close()},t=()=>{this.off("upgrade",t),this.off("upgradeError",t),e()},n=()=>{this.once("upgrade",t),this.once("upgradeError",t)};return"opening"!==this.readyState&&"open"!==this.readyState||(this.readyState="closing",this.writeBuffer.length?this.once("drain",(()=>{this.upgrading?n():e()})):this.upgrading?n():e()),this}onError(e){d("socket error %j",e),p.priorWebsocketSuccess=!1,this.emitReserved("error",e),this.onClose("transport error",e)}onClose(e,t){"opening"!==this.readyState&&"open"!==this.readyState&&"closing"!==this.readyState||(d('socket close with reason: "%s"',e),this.clearTimeoutFn(this.pingTimeoutTimer),this.transport.removeAllListeners("close"),this.transport.close(),this.transport.removeAllListeners(),"function"==typeof removeEventListener&&(removeEventListener("beforeunload",this.beforeunloadEventListener,!1),removeEventListener("offline",this.offlineEventListener,!1)),this.readyState="closed",this.id=null,this.emitReserved("close",e,t),this.writeBuffer=[],this.prevBufferLen=0)}filterUpgrades(e){const t=[];let n=0;const r=e.length;for(;n{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.transports=void 0;const r=n(484),s=n(308),o=n(20);t.transports={websocket:s.WS,webtransport:o.WT,polling:r.Polling}},484:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Request=t.Polling=void 0;const s=n(870),o=r(n(227)),i=n(726),a=n(373),c=n(666),l=n(260),u=n(622),h=n(242),d=(0,o.default)("engine.io-client:polling");function p(){}const f=null!=new c.XHR({xdomain:!1}).responseType;class m extends s.Transport{constructor(e){if(super(e),this.polling=!1,"undefined"!=typeof location){const t="https:"===location.protocol;let n=location.port;n||(n=t?"443":"80"),this.xd="undefined"!=typeof location&&e.hostname!==location.hostname||n!==e.port}const t=e&&e.forceBase64;this.supportsBinary=f&&!t,this.opts.withCredentials&&(this.cookieJar=(0,c.createCookieJar)())}get name(){return"polling"}doOpen(){this.poll()}pause(e){this.readyState="pausing";const t=()=>{d("paused"),this.readyState="paused",e()};if(this.polling||!this.writable){let e=0;this.polling&&(d("we are currently polling - waiting to pause"),e++,this.once("pollComplete",(function(){d("pre-pause polling complete"),--e||t()}))),this.writable||(d("we are currently writing - waiting to pause"),e++,this.once("drain",(function(){d("pre-pause writing complete"),--e||t()})))}else t()}poll(){d("polling"),this.polling=!0,this.doPoll(),this.emitReserved("poll")}onData(e){d("polling got data %s",e),(0,a.decodePayload)(e,this.socket.binaryType).forEach((e=>{if("opening"===this.readyState&&"open"===e.type&&this.onOpen(),"close"===e.type)return this.onClose({description:"transport closed by the server"}),!1;this.onPacket(e)})),"closed"!==this.readyState&&(this.polling=!1,this.emitReserved("pollComplete"),"open"===this.readyState?this.poll():d('ignoring poll - transport state "%s"',this.readyState))}doClose(){const e=()=>{d("writing close packet"),this.write([{type:"close"}])};"open"===this.readyState?(d("transport open - closing"),e()):(d("transport not open - deferring close"),this.once("open",e))}write(e){this.writable=!1,(0,a.encodePayload)(e,(e=>{this.doWrite(e,(()=>{this.writable=!0,this.emitReserved("drain")}))}))}uri(){const e=this.opts.secure?"https":"http",t=this.query||{};return!1!==this.opts.timestampRequests&&(t[this.opts.timestampParam]=(0,i.yeast)()),this.supportsBinary||t.sid||(t.b64=1),this.createUri(e,t)}request(e={}){return Object.assign(e,{xd:this.xd,cookieJar:this.cookieJar},this.opts),new g(this.uri(),e)}doWrite(e,t){const n=this.request({method:"POST",data:e});n.on("success",t),n.on("error",((e,t)=>{this.onError("xhr post error",e,t)}))}doPoll(){d("xhr poll");const e=this.request();e.on("data",this.onData.bind(this)),e.on("error",((e,t)=>{this.onError("xhr poll error",e,t)})),this.pollXhr=e}}t.Polling=m;class g extends l.Emitter{constructor(e,t){super(),(0,u.installTimerFunctions)(this,t),this.opts=t,this.method=t.method||"GET",this.uri=e,this.data=void 0!==t.data?t.data:null,this.create()}create(){var e;const t=(0,u.pick)(this.opts,"agent","pfx","key","passphrase","cert","ca","ciphers","rejectUnauthorized","autoUnref");t.xdomain=!!this.opts.xd;const n=this.xhr=new c.XHR(t);try{d("xhr open %s: %s",this.method,this.uri),n.open(this.method,this.uri,!0);try{if(this.opts.extraHeaders){n.setDisableHeaderCheck&&n.setDisableHeaderCheck(!0);for(let e in this.opts.extraHeaders)this.opts.extraHeaders.hasOwnProperty(e)&&n.setRequestHeader(e,this.opts.extraHeaders[e])}}catch(e){}if("POST"===this.method)try{n.setRequestHeader("Content-type","text/plain;charset=UTF-8")}catch(e){}try{n.setRequestHeader("Accept","*/*")}catch(e){}null===(e=this.opts.cookieJar)||void 0===e||e.addCookies(n),"withCredentials"in n&&(n.withCredentials=this.opts.withCredentials),this.opts.requestTimeout&&(n.timeout=this.opts.requestTimeout),n.onreadystatechange=()=>{var e;3===n.readyState&&(null===(e=this.opts.cookieJar)||void 0===e||e.parseCookies(n)),4===n.readyState&&(200===n.status||1223===n.status?this.onLoad():this.setTimeoutFn((()=>{this.onError("number"==typeof n.status?n.status:0)}),0))},d("xhr data %s",this.data),n.send(this.data)}catch(e){return void this.setTimeoutFn((()=>{this.onError(e)}),0)}"undefined"!=typeof document&&(this.index=g.requestsCount++,g.requests[this.index]=this)}onError(e){this.emitReserved("error",e,this.xhr),this.cleanup(!0)}cleanup(e){if(void 0!==this.xhr&&null!==this.xhr){if(this.xhr.onreadystatechange=p,e)try{this.xhr.abort()}catch(e){}"undefined"!=typeof document&&delete g.requests[this.index],this.xhr=null}}onLoad(){const e=this.xhr.responseText;null!==e&&(this.emitReserved("data",e),this.emitReserved("success"),this.cleanup())}abort(){this.cleanup()}}if(t.Request=g,g.requestsCount=0,g.requests={},"undefined"!=typeof document)if("function"==typeof attachEvent)attachEvent("onunload",y);else if("function"==typeof addEventListener){const e="onpagehide"in h.globalThisShim?"pagehide":"unload";addEventListener(e,y,!1)}function y(){for(let e in g.requests)g.requests.hasOwnProperty(e)&&g.requests[e].abort()}},552:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.defaultBinaryType=t.usingBrowserWebSocket=t.WebSocket=t.nextTick=void 0;const r=n(242);t.nextTick="function"==typeof Promise&&"function"==typeof Promise.resolve?e=>Promise.resolve().then(e):(e,t)=>t(e,0),t.WebSocket=r.globalThisShim.WebSocket||r.globalThisShim.MozWebSocket,t.usingBrowserWebSocket=!0,t.defaultBinaryType="arraybuffer"},308:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.WS=void 0;const s=n(870),o=n(726),i=n(622),a=n(552),c=r(n(227)),l=n(373),u=(0,c.default)("engine.io-client:websocket"),h="undefined"!=typeof navigator&&"string"==typeof navigator.product&&"reactnative"===navigator.product.toLowerCase();class d extends s.Transport{constructor(e){super(e),this.supportsBinary=!e.forceBase64}get name(){return"websocket"}doOpen(){if(!this.check())return;const e=this.uri(),t=this.opts.protocols,n=h?{}:(0,i.pick)(this.opts,"agent","perMessageDeflate","pfx","key","passphrase","cert","ca","ciphers","rejectUnauthorized","localAddress","protocolVersion","origin","maxPayload","family","checkServerIdentity");this.opts.extraHeaders&&(n.headers=this.opts.extraHeaders);try{this.ws=a.usingBrowserWebSocket&&!h?t?new a.WebSocket(e,t):new a.WebSocket(e):new a.WebSocket(e,t,n)}catch(e){return this.emitReserved("error",e)}this.ws.binaryType=this.socket.binaryType,this.addEventListeners()}addEventListeners(){this.ws.onopen=()=>{this.opts.autoUnref&&this.ws._socket.unref(),this.onOpen()},this.ws.onclose=e=>this.onClose({description:"websocket connection closed",context:e}),this.ws.onmessage=e=>this.onData(e.data),this.ws.onerror=e=>this.onError("websocket error",e)}write(e){this.writable=!1;for(let t=0;t{const t={};!a.usingBrowserWebSocket&&(n.options&&(t.compress=n.options.compress),this.opts.perMessageDeflate)&&("string"==typeof e?Buffer.byteLength(e):e.length){this.writable=!0,this.emitReserved("drain")}),this.setTimeoutFn)}))}}doClose(){void 0!==this.ws&&(this.ws.close(),this.ws=null)}uri(){const e=this.opts.secure?"wss":"ws",t=this.query||{};return this.opts.timestampRequests&&(t[this.opts.timestampParam]=(0,o.yeast)()),this.supportsBinary||(t.b64=1),this.createUri(e,t)}check(){return!!a.WebSocket}}t.WS=d},20:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.WT=void 0;const s=n(870),o=n(552),i=n(373),a=(0,r(n(227)).default)("engine.io-client:webtransport");class c extends s.Transport{get name(){return"webtransport"}doOpen(){"function"==typeof WebTransport&&(this.transport=new WebTransport(this.createUri("https"),this.opts.transportOptions[this.name]),this.transport.closed.then((()=>{a("transport closed gracefully"),this.onClose()})).catch((e=>{a("transport closed due to %s",e),this.onError("webtransport error",e)})),this.transport.ready.then((()=>{this.transport.createBidirectionalStream().then((e=>{const t=(0,i.createPacketDecoderStream)(Number.MAX_SAFE_INTEGER,this.socket.binaryType),n=e.readable.pipeThrough(t).getReader(),r=(0,i.createPacketEncoderStream)();r.readable.pipeTo(e.writable),this.writer=r.writable.getWriter();const s=()=>{n.read().then((({done:e,value:t})=>{e?a("session is closed"):(a("received chunk: %o",t),this.onPacket(t),s())})).catch((e=>{a("an error occurred while reading: %s",e)}))};s();const o={type:"open"};this.query.sid&&(o.data=`{"sid":"${this.query.sid}"}`),this.writer.write(o).then((()=>this.onOpen()))}))})))}write(e){this.writable=!1;for(let t=0;t{r&&(0,o.nextTick)((()=>{this.writable=!0,this.emitReserved("drain")}),this.setTimeoutFn)}))}}doClose(){var e;null===(e=this.transport)||void 0===e||e.close()}}t.WT=c},666:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.createCookieJar=t.XHR=void 0;const r=n(419),s=n(242);t.XHR=function(e){const t=e.xdomain;try{if("undefined"!=typeof XMLHttpRequest&&(!t||r.hasCORS))return new XMLHttpRequest}catch(e){}if(!t)try{return new(s.globalThisShim[["Active"].concat("Object").join("X")])("Microsoft.XMLHTTP")}catch(e){}},t.createCookieJar=function(){}},622:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.byteLength=t.installTimerFunctions=t.pick=void 0;const r=n(242);t.pick=function(e,...t){return t.reduce(((t,n)=>(e.hasOwnProperty(n)&&(t[n]=e[n]),t)),{})};const s=r.globalThisShim.setTimeout,o=r.globalThisShim.clearTimeout;t.installTimerFunctions=function(e,t){t.useNativeTimers?(e.setTimeoutFn=s.bind(r.globalThisShim),e.clearTimeoutFn=o.bind(r.globalThisShim)):(e.setTimeoutFn=r.globalThisShim.setTimeout.bind(r.globalThisShim),e.clearTimeoutFn=r.globalThisShim.clearTimeout.bind(r.globalThisShim))},t.byteLength=function(e){return"string"==typeof e?function(e){let t=0,n=0;for(let r=0,s=e.length;r=57344?n+=3:(r++,n+=4);return n}(e):Math.ceil(1.33*(e.byteLength||e.size))}},87:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.ERROR_PACKET=t.PACKET_TYPES_REVERSE=t.PACKET_TYPES=void 0;const n=Object.create(null);t.PACKET_TYPES=n,n.open="0",n.close="1",n.ping="2",n.pong="3",n.message="4",n.upgrade="5",n.noop="6";const r=Object.create(null);t.PACKET_TYPES_REVERSE=r,Object.keys(n).forEach((e=>{r[n[e]]=e})),t.ERROR_PACKET={type:"error",data:"parser error"}},469:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.decode=t.encode=void 0;const n="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",r="undefined"==typeof Uint8Array?[]:new Uint8Array(256);for(let e=0;e<64;e++)r[n.charCodeAt(e)]=e;t.encode=e=>{let t,r=new Uint8Array(e),s=r.length,o="";for(t=0;t>2],o+=n[(3&r[t])<<4|r[t+1]>>4],o+=n[(15&r[t+1])<<2|r[t+2]>>6],o+=n[63&r[t+2]];return s%3==2?o=o.substring(0,o.length-1)+"=":s%3==1&&(o=o.substring(0,o.length-2)+"=="),o},t.decode=e=>{let t,n,s,o,i,a=.75*e.length,c=e.length,l=0;"="===e[e.length-1]&&(a--,"="===e[e.length-2]&&a--);const u=new ArrayBuffer(a),h=new Uint8Array(u);for(t=0;t>4,h[l++]=(15&s)<<4|o>>2,h[l++]=(3&o)<<6|63&i;return u}},572:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.decodePacket=void 0;const r=n(87),s=n(469),o="function"==typeof ArrayBuffer;t.decodePacket=(e,t)=>{if("string"!=typeof e)return{type:"message",data:a(e,t)};const n=e.charAt(0);return"b"===n?{type:"message",data:i(e.substring(1),t)}:r.PACKET_TYPES_REVERSE[n]?e.length>1?{type:r.PACKET_TYPES_REVERSE[n],data:e.substring(1)}:{type:r.PACKET_TYPES_REVERSE[n]}:r.ERROR_PACKET};const i=(e,t)=>{if(o){const n=(0,s.decode)(e);return a(n,t)}return{base64:!0,data:e}},a=(e,t)=>"blob"===t?e instanceof Blob?e:new Blob([e]):e instanceof ArrayBuffer?e:e.buffer},908:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.encodePacket=t.encodePacketToBinary=void 0;const r=n(87),s="function"==typeof Blob||"undefined"!=typeof Blob&&"[object BlobConstructor]"===Object.prototype.toString.call(Blob),o="function"==typeof ArrayBuffer,i=e=>"function"==typeof ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer instanceof ArrayBuffer,a=({type:e,data:t},n,a)=>s&&t instanceof Blob?n?a(t):c(t,a):o&&(t instanceof ArrayBuffer||i(t))?n?a(t):c(new Blob([t]),a):a(r.PACKET_TYPES[e]+(t||""));t.encodePacket=a;const c=(e,t)=>{const n=new FileReader;return n.onload=function(){const e=n.result.split(",")[1];t("b"+(e||""))},n.readAsDataURL(e)};function l(e){return e instanceof Uint8Array?e:e instanceof ArrayBuffer?new Uint8Array(e):new Uint8Array(e.buffer,e.byteOffset,e.byteLength)}let u;t.encodePacketToBinary=function(e,t){return s&&e.data instanceof Blob?e.data.arrayBuffer().then(l).then(t):o&&(e.data instanceof ArrayBuffer||i(e.data))?t(l(e.data)):void a(e,!1,(e=>{u||(u=new TextEncoder),t(u.encode(e))}))}},373:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.decodePayload=t.decodePacket=t.encodePayload=t.encodePacket=t.protocol=t.createPacketDecoderStream=t.createPacketEncoderStream=void 0;const r=n(908);Object.defineProperty(t,"encodePacket",{enumerable:!0,get:function(){return r.encodePacket}});const s=n(572);Object.defineProperty(t,"decodePacket",{enumerable:!0,get:function(){return s.decodePacket}});const o=n(87),i=String.fromCharCode(30);let a;function c(e){return e.reduce(((e,t)=>e+t.length),0)}function l(e,t){if(e[0].length===t)return e.shift();const n=new Uint8Array(t);let r=0;for(let s=0;s{const n=e.length,s=new Array(n);let o=0;e.forEach(((e,a)=>{(0,r.encodePacket)(e,!1,(e=>{s[a]=e,++o===n&&t(s.join(i))}))}))},t.decodePayload=(e,t)=>{const n=e.split(i),r=[];for(let e=0;e{const r=n.length;let s;if(r<126)s=new Uint8Array(1),new DataView(s.buffer).setUint8(0,r);else if(r<65536){s=new Uint8Array(3);const e=new DataView(s.buffer);e.setUint8(0,126),e.setUint16(1,r)}else{s=new Uint8Array(9);const e=new DataView(s.buffer);e.setUint8(0,127),e.setBigUint64(1,BigInt(r))}e.data&&"string"!=typeof e.data&&(s[0]|=128),t.enqueue(s),t.enqueue(n)}))}})},t.createPacketDecoderStream=function(e,t){a||(a=new TextDecoder);const n=[];let r=0,i=-1,u=!1;return new TransformStream({transform(h,d){for(n.push(h);;){if(0===r){if(c(n)<1)break;const e=l(n,1);u=128==(128&e[0]),i=127&e[0],r=i<126?3:126===i?1:2}else if(1===r){if(c(n)<2)break;const e=l(n,2);i=new DataView(e.buffer,e.byteOffset,e.length).getUint16(0),r=3}else if(2===r){if(c(n)<8)break;const e=l(n,8),t=new DataView(e.buffer,e.byteOffset,e.length),s=t.getUint32(0);if(s>Math.pow(2,21)-1){d.enqueue(o.ERROR_PACKET);break}i=s*Math.pow(2,32)+t.getUint32(4),r=3}else{if(c(n)e){d.enqueue(o.ERROR_PACKET);break}}}})},t.protocol=4},159:(e,t)=>{"use strict";function n(e){e=e||{},this.ms=e.min||100,this.max=e.max||1e4,this.factor=e.factor||2,this.jitter=e.jitter>0&&e.jitter<=1?e.jitter:0,this.attempts=0}Object.defineProperty(t,"__esModule",{value:!0}),t.Backoff=void 0,t.Backoff=n,n.prototype.duration=function(){var e=this.ms*Math.pow(this.factor,this.attempts++);if(this.jitter){var t=Math.random(),n=Math.floor(t*this.jitter*e);e=0==(1&Math.floor(10*t))?e-n:e+n}return 0|Math.min(e,this.max)},n.prototype.reset=function(){this.attempts=0},n.prototype.setMin=function(e){this.ms=e},n.prototype.setMax=function(e){this.max=e},n.prototype.setJitter=function(e){this.jitter=e}},46:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.default=t.connect=t.io=t.Socket=t.Manager=t.protocol=void 0;const s=n(84),o=n(168);Object.defineProperty(t,"Manager",{enumerable:!0,get:function(){return o.Manager}});const i=n(312);Object.defineProperty(t,"Socket",{enumerable:!0,get:function(){return i.Socket}});const a=r(n(227)).default("socket.io-client"),c={};function l(e,t){"object"==typeof e&&(t=e,e=void 0),t=t||{};const n=s.url(e,t.path||"/socket.io"),r=n.source,i=n.id,l=n.path,u=c[i]&&l in c[i].nsps;let h;return t.forceNew||t["force new connection"]||!1===t.multiplex||u?(a("ignoring socket cache for %s",r),h=new o.Manager(r,t)):(c[i]||(a("new io instance for %s",r),c[i]=new o.Manager(r,t)),h=c[i]),n.query&&!t.query&&(t.query=n.queryKey),h.socket(n.path,t)}t.io=l,t.connect=l,t.default=l,Object.assign(l,{Manager:o.Manager,Socket:i.Socket,io:l,connect:l});var u=n(514);Object.defineProperty(t,"protocol",{enumerable:!0,get:function(){return u.protocol}}),e.exports=l},168:function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n),Object.defineProperty(e,r,{enumerable:!0,get:function(){return t[n]}})}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),s=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),o=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return s(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Manager=void 0;const a=n(679),c=n(312),l=o(n(514)),u=n(149),h=n(159),d=n(260),p=i(n(227)).default("socket.io-client:manager");class f extends d.Emitter{constructor(e,t){var n;super(),this.nsps={},this.subs=[],e&&"object"==typeof e&&(t=e,e=void 0),(t=t||{}).path=t.path||"/socket.io",this.opts=t,a.installTimerFunctions(this,t),this.reconnection(!1!==t.reconnection),this.reconnectionAttempts(t.reconnectionAttempts||1/0),this.reconnectionDelay(t.reconnectionDelay||1e3),this.reconnectionDelayMax(t.reconnectionDelayMax||5e3),this.randomizationFactor(null!==(n=t.randomizationFactor)&&void 0!==n?n:.5),this.backoff=new h.Backoff({min:this.reconnectionDelay(),max:this.reconnectionDelayMax(),jitter:this.randomizationFactor()}),this.timeout(null==t.timeout?2e4:t.timeout),this._readyState="closed",this.uri=e;const r=t.parser||l;this.encoder=new r.Encoder,this.decoder=new r.Decoder,this._autoConnect=!1!==t.autoConnect,this._autoConnect&&this.open()}reconnection(e){return arguments.length?(this._reconnection=!!e,this):this._reconnection}reconnectionAttempts(e){return void 0===e?this._reconnectionAttempts:(this._reconnectionAttempts=e,this)}reconnectionDelay(e){var t;return void 0===e?this._reconnectionDelay:(this._reconnectionDelay=e,null===(t=this.backoff)||void 0===t||t.setMin(e),this)}randomizationFactor(e){var t;return void 0===e?this._randomizationFactor:(this._randomizationFactor=e,null===(t=this.backoff)||void 0===t||t.setJitter(e),this)}reconnectionDelayMax(e){var t;return void 0===e?this._reconnectionDelayMax:(this._reconnectionDelayMax=e,null===(t=this.backoff)||void 0===t||t.setMax(e),this)}timeout(e){return arguments.length?(this._timeout=e,this):this._timeout}maybeReconnectOnOpen(){!this._reconnecting&&this._reconnection&&0===this.backoff.attempts&&this.reconnect()}open(e){if(p("readyState %s",this._readyState),~this._readyState.indexOf("open"))return this;p("opening %s",this.uri),this.engine=new a.Socket(this.uri,this.opts);const t=this.engine,n=this;this._readyState="opening",this.skipReconnect=!1;const r=u.on(t,"open",(function(){n.onopen(),e&&e()})),s=t=>{p("error"),this.cleanup(),this._readyState="closed",this.emitReserved("error",t),e?e(t):this.maybeReconnectOnOpen()},o=u.on(t,"error",s);if(!1!==this._timeout){const e=this._timeout;p("connect attempt will timeout after %d",e);const n=this.setTimeoutFn((()=>{p("connect attempt timed out after %d",e),r(),s(new Error("timeout")),t.close()}),e);this.opts.autoUnref&&n.unref(),this.subs.push((()=>{this.clearTimeoutFn(n)}))}return this.subs.push(r),this.subs.push(o),this}connect(e){return this.open(e)}onopen(){p("open"),this.cleanup(),this._readyState="open",this.emitReserved("open");const e=this.engine;this.subs.push(u.on(e,"ping",this.onping.bind(this)),u.on(e,"data",this.ondata.bind(this)),u.on(e,"error",this.onerror.bind(this)),u.on(e,"close",this.onclose.bind(this)),u.on(this.decoder,"decoded",this.ondecoded.bind(this)))}onping(){this.emitReserved("ping")}ondata(e){try{this.decoder.add(e)}catch(e){this.onclose("parse error",e)}}ondecoded(e){a.nextTick((()=>{this.emitReserved("packet",e)}),this.setTimeoutFn)}onerror(e){p("error",e),this.emitReserved("error",e)}socket(e,t){let n=this.nsps[e];return n?this._autoConnect&&!n.active&&n.connect():(n=new c.Socket(this,e,t),this.nsps[e]=n),n}_destroy(e){const t=Object.keys(this.nsps);for(const e of t)if(this.nsps[e].active)return void p("socket %s is still active, skipping close",e);this._close()}_packet(e){p("writing packet %j",e);const t=this.encoder.encode(e);for(let n=0;ne())),this.subs.length=0,this.decoder.destroy()}_close(){p("disconnect"),this.skipReconnect=!0,this._reconnecting=!1,this.onclose("forced close"),this.engine&&this.engine.close()}disconnect(){return this._close()}onclose(e,t){p("closed due to %s",e),this.cleanup(),this.backoff.reset(),this._readyState="closed",this.emitReserved("close",e,t),this._reconnection&&!this.skipReconnect&&this.reconnect()}reconnect(){if(this._reconnecting||this.skipReconnect)return this;const e=this;if(this.backoff.attempts>=this._reconnectionAttempts)p("reconnect failed"),this.backoff.reset(),this.emitReserved("reconnect_failed"),this._reconnecting=!1;else{const t=this.backoff.duration();p("will wait %dms before reconnect attempt",t),this._reconnecting=!0;const n=this.setTimeoutFn((()=>{e.skipReconnect||(p("attempting reconnect"),this.emitReserved("reconnect_attempt",e.backoff.attempts),e.skipReconnect||e.open((t=>{t?(p("reconnect attempt error"),e._reconnecting=!1,e.reconnect(),this.emitReserved("reconnect_error",t)):(p("reconnect success"),e.onreconnect())})))}),t);this.opts.autoUnref&&n.unref(),this.subs.push((()=>{this.clearTimeoutFn(n)}))}}onreconnect(){const e=this.backoff.attempts;this._reconnecting=!1,this.backoff.reset(),this.emitReserved("reconnect",e)}}t.Manager=f},149:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.on=void 0,t.on=function(e,t,n){return e.on(t,n),function(){e.off(t,n)}}},312:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Socket=void 0;const s=n(514),o=n(149),i=n(260),a=r(n(227)).default("socket.io-client:socket"),c=Object.freeze({connect:1,connect_error:1,disconnect:1,disconnecting:1,newListener:1,removeListener:1});class l extends i.Emitter{constructor(e,t,n){super(),this.connected=!1,this.recovered=!1,this.receiveBuffer=[],this.sendBuffer=[],this._queue=[],this._queueSeq=0,this.ids=0,this.acks={},this.flags={},this.io=e,this.nsp=t,n&&n.auth&&(this.auth=n.auth),this._opts=Object.assign({},n),this.io._autoConnect&&this.open()}get disconnected(){return!this.connected}subEvents(){if(this.subs)return;const e=this.io;this.subs=[o.on(e,"open",this.onopen.bind(this)),o.on(e,"packet",this.onpacket.bind(this)),o.on(e,"error",this.onerror.bind(this)),o.on(e,"close",this.onclose.bind(this))]}get active(){return!!this.subs}connect(){return this.connected||(this.subEvents(),this.io._reconnecting||this.io.open(),"open"===this.io._readyState&&this.onopen()),this}open(){return this.connect()}send(...e){return e.unshift("message"),this.emit.apply(this,e),this}emit(e,...t){if(c.hasOwnProperty(e))throw new Error('"'+e.toString()+'" is a reserved event name');if(t.unshift(e),this._opts.retries&&!this.flags.fromQueue&&!this.flags.volatile)return this._addToQueue(t),this;const n={type:s.PacketType.EVENT,data:t,options:{}};if(n.options.compress=!1!==this.flags.compress,"function"==typeof t[t.length-1]){const e=this.ids++;a("emitting packet with ack id %d",e);const r=t.pop();this._registerAckCallback(e,r),n.id=e}const r=this.io.engine&&this.io.engine.transport&&this.io.engine.transport.writable;return!this.flags.volatile||r&&this.connected?this.connected?(this.notifyOutgoingListeners(n),this.packet(n)):this.sendBuffer.push(n):a("discard packet as the transport is not currently writable"),this.flags={},this}_registerAckCallback(e,t){var n;const r=null!==(n=this.flags.timeout)&&void 0!==n?n:this._opts.ackTimeout;if(void 0===r)return void(this.acks[e]=t);const s=this.io.setTimeoutFn((()=>{delete this.acks[e];for(let t=0;t{this.io.clearTimeoutFn(s),t.apply(this,[null,...e])}}emitWithAck(e,...t){const n=void 0!==this.flags.timeout||void 0!==this._opts.ackTimeout;return new Promise(((r,s)=>{t.push(((e,t)=>n?e?s(e):r(t):r(e))),this.emit(e,...t)}))}_addToQueue(e){let t;"function"==typeof e[e.length-1]&&(t=e.pop());const n={id:this._queueSeq++,tryCount:0,pending:!1,args:e,flags:Object.assign({fromQueue:!0},this.flags)};e.push(((e,...r)=>{if(n===this._queue[0])return null!==e?n.tryCount>this._opts.retries&&(a("packet [%d] is discarded after %d tries",n.id,n.tryCount),this._queue.shift(),t&&t(e)):(a("packet [%d] was successfully sent",n.id),this._queue.shift(),t&&t(null,...r)),n.pending=!1,this._drainQueue()})),this._queue.push(n),this._drainQueue()}_drainQueue(e=!1){if(a("draining queue"),!this.connected||0===this._queue.length)return;const t=this._queue[0];!t.pending||e?(t.pending=!0,t.tryCount++,a("sending packet [%d] (try n°%d)",t.id,t.tryCount),this.flags=t.flags,this.emit.apply(this,t.args)):a("packet [%d] has already been sent and is waiting for an ack",t.id)}packet(e){e.nsp=this.nsp,this.io._packet(e)}onopen(){a("transport is open - connecting"),"function"==typeof this.auth?this.auth((e=>{this._sendConnectPacket(e)})):this._sendConnectPacket(this.auth)}_sendConnectPacket(e){this.packet({type:s.PacketType.CONNECT,data:this._pid?Object.assign({pid:this._pid,offset:this._lastOffset},e):e})}onerror(e){this.connected||this.emitReserved("connect_error",e)}onclose(e,t){a("close (%s)",e),this.connected=!1,delete this.id,this.emitReserved("disconnect",e,t)}onpacket(e){if(e.nsp===this.nsp)switch(e.type){case s.PacketType.CONNECT:e.data&&e.data.sid?this.onconnect(e.data.sid,e.data.pid):this.emitReserved("connect_error",new Error("It seems you are trying to reach a Socket.IO server in v2.x with a v3.x client, but they are not compatible (more information here: https://socket.io/docs/v3/migrating-from-2-x-to-3-0/)"));break;case s.PacketType.EVENT:case s.PacketType.BINARY_EVENT:this.onevent(e);break;case s.PacketType.ACK:case s.PacketType.BINARY_ACK:this.onack(e);break;case s.PacketType.DISCONNECT:this.ondisconnect();break;case s.PacketType.CONNECT_ERROR:this.destroy();const t=new Error(e.data.message);t.data=e.data.data,this.emitReserved("connect_error",t)}}onevent(e){const t=e.data||[];a("emitting event %j",t),null!=e.id&&(a("attaching ack callback to event"),t.push(this.ack(e.id))),this.connected?this.emitEvent(t):this.receiveBuffer.push(Object.freeze(t))}emitEvent(e){if(this._anyListeners&&this._anyListeners.length){const t=this._anyListeners.slice();for(const n of t)n.apply(this,e)}super.emit.apply(this,e),this._pid&&e.length&&"string"==typeof e[e.length-1]&&(this._lastOffset=e[e.length-1])}ack(e){const t=this;let n=!1;return function(...r){n||(n=!0,a("sending ack %j",r),t.packet({type:s.PacketType.ACK,id:e,data:r}))}}onack(e){const t=this.acks[e.id];"function"==typeof t?(a("calling ack %s with %j",e.id,e.data),t.apply(this,e.data),delete this.acks[e.id]):a("bad ack %s",e.id)}onconnect(e,t){a("socket connected with id %s",e),this.id=e,this.recovered=t&&this._pid===t,this._pid=t,this.connected=!0,this.emitBuffered(),this.emitReserved("connect"),this._drainQueue(!0)}emitBuffered(){this.receiveBuffer.forEach((e=>this.emitEvent(e))),this.receiveBuffer=[],this.sendBuffer.forEach((e=>{this.notifyOutgoingListeners(e),this.packet(e)})),this.sendBuffer=[]}ondisconnect(){a("server disconnect (%s)",this.nsp),this.destroy(),this.onclose("io server disconnect")}destroy(){this.subs&&(this.subs.forEach((e=>e())),this.subs=void 0),this.io._destroy(this)}disconnect(){return this.connected&&(a("performing disconnect (%s)",this.nsp),this.packet({type:s.PacketType.DISCONNECT})),this.destroy(),this.connected&&this.onclose("io client disconnect"),this}close(){return this.disconnect()}compress(e){return this.flags.compress=e,this}get volatile(){return this.flags.volatile=!0,this}timeout(e){return this.flags.timeout=e,this}onAny(e){return this._anyListeners=this._anyListeners||[],this._anyListeners.push(e),this}prependAny(e){return this._anyListeners=this._anyListeners||[],this._anyListeners.unshift(e),this}offAny(e){if(!this._anyListeners)return this;if(e){const t=this._anyListeners;for(let n=0;n{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.reconstructPacket=t.deconstructPacket=void 0;const r=n(665);function s(e,t){if(!e)return e;if((0,r.isBinary)(e)){const n={_placeholder:!0,num:t.length};return t.push(e),n}if(Array.isArray(e)){const n=new Array(e.length);for(let r=0;r=0&&e.num{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Decoder=t.Encoder=t.PacketType=t.protocol=void 0;const r=n(260),s=n(880),o=n(665),i=(0,n(227).default)("socket.io-parser"),a=["connect","connect_error","disconnect","disconnecting","newListener","removeListener"];var c;function l(e){return"[object Object]"===Object.prototype.toString.call(e)}t.protocol=5,function(e){e[e.CONNECT=0]="CONNECT",e[e.DISCONNECT=1]="DISCONNECT",e[e.EVENT=2]="EVENT",e[e.ACK=3]="ACK",e[e.CONNECT_ERROR=4]="CONNECT_ERROR",e[e.BINARY_EVENT=5]="BINARY_EVENT",e[e.BINARY_ACK=6]="BINARY_ACK"}(c=t.PacketType||(t.PacketType={})),t.Encoder=class{constructor(e){this.replacer=e}encode(e){return i("encoding packet %j",e),e.type!==c.EVENT&&e.type!==c.ACK||!(0,o.hasBinary)(e)?[this.encodeAsString(e)]:this.encodeAsBinary({type:e.type===c.EVENT?c.BINARY_EVENT:c.BINARY_ACK,nsp:e.nsp,data:e.data,id:e.id})}encodeAsString(e){let t=""+e.type;return e.type!==c.BINARY_EVENT&&e.type!==c.BINARY_ACK||(t+=e.attachments+"-"),e.nsp&&"/"!==e.nsp&&(t+=e.nsp+","),null!=e.id&&(t+=e.id),null!=e.data&&(t+=JSON.stringify(e.data,this.replacer)),i("encoded %j as %s",e,t),t}encodeAsBinary(e){const t=(0,s.deconstructPacket)(e),n=this.encodeAsString(t.packet),r=t.buffers;return r.unshift(n),r}};class u extends r.Emitter{constructor(e){super(),this.reviver=e}add(e){let t;if("string"==typeof e){if(this.reconstructor)throw new Error("got plaintext data when reconstructing a packet");t=this.decodeString(e);const n=t.type===c.BINARY_EVENT;n||t.type===c.BINARY_ACK?(t.type=n?c.EVENT:c.ACK,this.reconstructor=new h(t),0===t.attachments&&super.emitReserved("decoded",t)):super.emitReserved("decoded",t)}else{if(!(0,o.isBinary)(e)&&!e.base64)throw new Error("Unknown type: "+e);if(!this.reconstructor)throw new Error("got binary data when not reconstructing a packet");t=this.reconstructor.takeBinaryData(e),t&&(this.reconstructor=null,super.emitReserved("decoded",t))}}decodeString(e){let t=0;const n={type:Number(e.charAt(0))};if(void 0===c[n.type])throw new Error("unknown packet type "+n.type);if(n.type===c.BINARY_EVENT||n.type===c.BINARY_ACK){const r=t+1;for(;"-"!==e.charAt(++t)&&t!=e.length;);const s=e.substring(r,t);if(s!=Number(s)||"-"!==e.charAt(t))throw new Error("Illegal attachments");n.attachments=Number(s)}if("/"===e.charAt(t+1)){const r=t+1;for(;++t&&","!==e.charAt(t)&&t!==e.length;);n.nsp=e.substring(r,t)}else n.nsp="/";const r=e.charAt(t+1);if(""!==r&&Number(r)==r){const r=t+1;for(;++t;){const n=e.charAt(t);if(null==n||Number(n)!=n){--t;break}if(t===e.length)break}n.id=Number(e.substring(r,t+1))}if(e.charAt(++t)){const r=this.tryParse(e.substr(t));if(!u.isPayloadValid(n.type,r))throw new Error("invalid payload");n.data=r}return i("decoded %s as %j",e,n),n}tryParse(e){try{return JSON.parse(e,this.reviver)}catch(e){return!1}}static isPayloadValid(e,t){switch(e){case c.CONNECT:return l(t);case c.DISCONNECT:return void 0===t;case c.CONNECT_ERROR:return"string"==typeof t||l(t);case c.EVENT:case c.BINARY_EVENT:return Array.isArray(t)&&("number"==typeof t[0]||"string"==typeof t[0]&&-1===a.indexOf(t[0]));case c.ACK:case c.BINARY_ACK:return Array.isArray(t)}}destroy(){this.reconstructor&&(this.reconstructor.finishedReconstruction(),this.reconstructor=null)}}t.Decoder=u;class h{constructor(e){this.packet=e,this.buffers=[],this.reconPack=e}takeBinaryData(e){if(this.buffers.push(e),this.buffers.length===this.reconPack.attachments){const e=(0,s.reconstructPacket)(this.reconPack,this.buffers);return this.finishedReconstruction(),e}return null}finishedReconstruction(){this.reconPack=null,this.buffers=[]}}},665:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.hasBinary=t.isBinary=void 0;const n="function"==typeof ArrayBuffer,r=Object.prototype.toString,s="function"==typeof Blob||"undefined"!=typeof Blob&&"[object BlobConstructor]"===r.call(Blob),o="function"==typeof File||"undefined"!=typeof File&&"[object FileConstructor]"===r.call(File);function i(e){return n&&(e instanceof ArrayBuffer||(e=>"function"==typeof ArrayBuffer.isView?ArrayBuffer.isView(e):e.buffer instanceof ArrayBuffer)(e))||s&&e instanceof Blob||o&&e instanceof File}t.isBinary=i,t.hasBinary=function e(t,n){if(!t||"object"!=typeof t)return!1;if(Array.isArray(t)){for(let n=0,r=t.length;n{"use strict";function r(e){if(e)return function(e){for(var t in r.prototype)e[t]=r.prototype[t];return e}(e)}n.r(t),n.d(t,{Emitter:()=>r}),r.prototype.on=r.prototype.addEventListener=function(e,t){return this._callbacks=this._callbacks||{},(this._callbacks["$"+e]=this._callbacks["$"+e]||[]).push(t),this},r.prototype.once=function(e,t){function n(){this.off(e,n),t.apply(this,arguments)}return n.fn=t,this.on(e,n),this},r.prototype.off=r.prototype.removeListener=r.prototype.removeAllListeners=r.prototype.removeEventListener=function(e,t){if(this._callbacks=this._callbacks||{},0==arguments.length)return this._callbacks={},this;var n,r=this._callbacks["$"+e];if(!r)return this;if(1==arguments.length)return delete this._callbacks["$"+e],this;for(var s=0;s{for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var r={};return(()=>{"use strict";var e=r;Object.defineProperty(e,"__esModule",{value:!0}),e.WebSocketTransport=e.prepareSql=e.escapeSqlParameter=e.SQLiteCloudConnection=e.SQLiteCloudRow=e.SQLiteCloudRowset=e.SQLiteCloudError=e.Statement=e.Database=void 0;var t=n(537);Object.defineProperty(e,"Database",{enumerable:!0,get:function(){return t.Database}});var s=n(195);Object.defineProperty(e,"Statement",{enumerable:!0,get:function(){return s.Statement}});var o=n(230);Object.defineProperty(e,"SQLiteCloudError",{enumerable:!0,get:function(){return o.SQLiteCloudError}});var i=n(875);Object.defineProperty(e,"SQLiteCloudRowset",{enumerable:!0,get:function(){return i.SQLiteCloudRowset}}),Object.defineProperty(e,"SQLiteCloudRow",{enumerable:!0,get:function(){return i.SQLiteCloudRow}});var a=n(672);Object.defineProperty(e,"SQLiteCloudConnection",{enumerable:!0,get:function(){return a.SQLiteCloudConnection}});var c=n(261);Object.defineProperty(e,"escapeSqlParameter",{enumerable:!0,get:function(){return c.escapeSqlParameter}}),Object.defineProperty(e,"prepareSql",{enumerable:!0,get:function(){return c.prepareSql}});var l=n(122);Object.defineProperty(e,"WebSocketTransport",{enumerable:!0,get:function(){return l.WebSocketTransport}})})(),r})())); \ No newline at end of file diff --git a/tsconfig.build.json b/tsconfig.build.json index 8a42a1a..439689a 100644 --- a/tsconfig.build.json +++ b/tsconfig.build.json @@ -1,4 +1,4 @@ { "extends": "./tsconfig.json", - "exclude": ["test/"] + "exclude": ["test/", "src/gateway/"] } diff --git a/webpack.config.js b/webpack.config.js index b9df8df..0fa2435 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -11,7 +11,7 @@ const productionConfig = { // Output configuration output: { path: path.resolve(__dirname, 'lib'), - filename: `sqlitecloud.v${packageJson.version}.js`, + filename: `sqlitecloud.drivers.js`, library: 'sqlitecloud', libraryTarget: 'umd', globalObject: 'this' @@ -35,6 +35,7 @@ const productionConfig = { const devConfig = JSON.parse(JSON.stringify(productionConfig)) devConfig.mode = 'development' devConfig.optimization.minimize = false -devConfig.output.filename = `sqlitecloud.v${packageJson.version}.dev.js` +devConfig.output.filename = `sqlitecloud.drivers.dev.js` +// devConfig.output.filename = `sqlitecloud.v${packageJson.version}.dev.js` module.exports = [productionConfig, devConfig] From a609923624f466bb5df5f21d0c931a00580cea00 Mon Sep 17 00:00:00 2001 From: Gionata Mettifogo Date: Wed, 14 Feb 2024 10:40:10 +0100 Subject: [PATCH 10/10] Fixed callbacks in tests, build scripts --- .devcontainer/devcontainer.json | 29 -- package.json | 2 +- public/sqlitecloud.drivers.dev.js | 2 +- public/sqlitecloud.drivers.js | 2 +- scripts/gateway-build.sh | 15 + scripts/gateway-upgrade.sh | 19 + scripts/sqlitecloud-cli | Bin 0 -> 2713232 bytes src/drivers/protocol.ts | 8 +- src/gateway/connection-bun.test.ts | 21 +- src/gateway/connection-bun.ts | 12 +- src/gateway/gateway.ts | 80 ++-- test/connection-ws.test.ts | 597 ++++++++++++++--------------- 12 files changed, 399 insertions(+), 388 deletions(-) delete mode 100644 .devcontainer/devcontainer.json create mode 100755 scripts/gateway-build.sh create mode 100755 scripts/gateway-upgrade.sh create mode 100755 scripts/sqlitecloud-cli diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json deleted file mode 100644 index c255440..0000000 --- a/.devcontainer/devcontainer.json +++ /dev/null @@ -1,29 +0,0 @@ -// For format details, see -// https://aka.ms/devcontainer.json. -// For config options, see: -// https://github.com/devcontainers/templates/tree/main/src/typescript-node -{ - "name": "studio-dev", - "image": "mcr.microsoft.com/devcontainers/typescript-node:1-18-bullseye", - "postCreateCommand": "npm install", - "customizations": { - "vscode": { - "extensions": ["ms-vscode-remote.remote-containers", "ms-vscode.vscode-typescript-next", "esbenp.prettier-vscode", "Orta.vscode-jest"] - } - }, - "portsAttributes": { - "80": { - "label": "Application", - "onAutoForward": "openBrowserOnce" - }, - "3000": { - "label": "Application", - "onAutoForward": "openBrowserOnce" - }, - "6006": { - "label": "Storybook", - "onAutoForward": "openBrowserOnce" - } - }, - "forwardPorts": [80, 3000, 6006] -} diff --git a/package.json b/package.json index 51b7dc8..f058267 100644 --- a/package.json +++ b/package.json @@ -18,7 +18,7 @@ "gateway-dev": "bun --watch ./src/gateway/gateway.ts", "gateway-start": "bun --smol run ./src/gateway/gateway.ts", "gateway-test": "bun test ./src/gateway/connection-bun.test.ts --watch --coverage", - "gateway-build": "bun build ./src/gateway/gateway.ts --compile --outfile ./lib/sqlitecloud-gateway.out" + "gateway-build": "./scripts/gateway-build.sh" }, "repository": { "type": "git", diff --git a/public/sqlitecloud.drivers.dev.js b/public/sqlitecloud.drivers.dev.js index 220e2e0..fde9db9 100644 --- a/public/sqlitecloud.drivers.dev.js +++ b/public/sqlitecloud.drivers.dev.js @@ -70,7 +70,7 @@ eval("\n//\n// database.ts - database driver api, implements and extends sqlite3 /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; -eval("\n//\n// protocol.ts - low level protocol handling for SQLiteCloud transport\n//\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.formatCommand = exports.popData = exports.parseRowsetChunks = exports.bufferEndsWith = exports.bufferStartsWith = exports.parseRowsetHeader = exports.parseArray = exports.parseError = exports.decompressBuffer = exports.parseCommandLength = exports.hasCommandLength = exports.ROWSET_CHUNKS_END = exports.CMD_ARRAY = exports.CMD_COMMAND = exports.CMD_COMPRESSED = exports.CMD_BLOB = exports.CMD_NULL = exports.CMD_JSON = exports.CMD_ROWSET_CHUNK = exports.CMD_ROWSET = exports.CMD_FLOAT = exports.CMD_INT = exports.CMD_ERROR = exports.CMD_ZEROSTRING = exports.CMD_STRING = void 0;\nconst types_1 = __webpack_require__(/*! ./types */ \"./lib/drivers/types.js\");\nconst rowset_1 = __webpack_require__(/*! ./rowset */ \"./lib/drivers/rowset.js\");\nconst lz4 = __webpack_require__(/*! lz4js */ \"./node_modules/lz4js/lz4.js\");\n// The server communicates with clients via commands defined in\n// SQLiteCloud Server Protocol (SCSP), see more at:\n// https://github.com/sqlitecloud/sdk/blob/master/PROTOCOL.md\nexports.CMD_STRING = '+';\nexports.CMD_ZEROSTRING = '!';\nexports.CMD_ERROR = '-';\nexports.CMD_INT = ':';\nexports.CMD_FLOAT = ',';\nexports.CMD_ROWSET = '*';\nexports.CMD_ROWSET_CHUNK = '/';\nexports.CMD_JSON = '#';\nexports.CMD_NULL = '_';\nexports.CMD_BLOB = '$';\nexports.CMD_COMPRESSED = '%';\nexports.CMD_COMMAND = '^';\nexports.CMD_ARRAY = '=';\n// const CMD_RAWJSON = '{'\n// const CMD_PUBSUB = '|'\n// const CMD_RECONNECT = '@'\n// To mark the end of the Rowset, the special string /LEN 0 0 0 is sent (LEN is always 6 in this case)\n// https://github.com/sqlitecloud/sdk/blob/master/PROTOCOL.md#scsp-rowset-chunk\nexports.ROWSET_CHUNKS_END = '/6 0 0 0 ';\n//\n// utility functions\n//\n/** Analyze first character to check if corresponding data type has LEN */\nfunction hasCommandLength(firstCharacter) {\n return firstCharacter == exports.CMD_INT || firstCharacter == exports.CMD_FLOAT || firstCharacter == exports.CMD_NULL ? false : true;\n}\nexports.hasCommandLength = hasCommandLength;\n/** Analyze a command with explict LEN and extract it */\nfunction parseCommandLength(data) {\n return parseInt(data.subarray(1, data.indexOf(' ')).toString('utf8'));\n}\nexports.parseCommandLength = parseCommandLength;\n/** Receive a compressed buffer, decompress with lz4, return buffer and datatype */\nfunction decompressBuffer(buffer) {\n const spaceIndex = buffer.indexOf(' ');\n buffer = buffer.subarray(spaceIndex + 1);\n // extract compressed size\n const compressedSize = parseInt(buffer.subarray(0, buffer.indexOf(' ') + 1).toString('utf8'));\n buffer = buffer.subarray(buffer.indexOf(' ') + 1);\n // extract decompressed size\n const decompressedSize = parseInt(buffer.subarray(0, buffer.indexOf(' ') + 1).toString('utf8'));\n buffer = buffer.subarray(buffer.indexOf(' ') + 1);\n // extract compressed dataType\n const dataType = buffer.subarray(0, 1).toString('utf8');\n const decompressedBuffer = Buffer.alloc(decompressedSize);\n const compressedBuffer = buffer.subarray(buffer.length - compressedSize);\n // lz4js library is javascript and doesn't have types so we silence the type check\n // eslint-disable-next-line\n const decompressionResult = lz4.decompressBlock(compressedBuffer, decompressedBuffer, 0, compressedSize, 0);\n buffer = Buffer.concat([buffer.subarray(0, buffer.length - compressedSize), decompressedBuffer]);\n if (decompressionResult <= 0 || decompressionResult !== decompressedSize) {\n throw new Error(`lz4 decompression error at offset ${decompressionResult}`);\n }\n return { buffer, dataType };\n}\nexports.decompressBuffer = decompressBuffer;\n/** Parse error message or extended error message */\nfunction parseError(buffer, spaceIndex) {\n const errorBuffer = buffer.subarray(spaceIndex + 1);\n const errorString = errorBuffer.toString('utf8');\n const parts = errorString.split(' ');\n let errorCodeStr = parts.shift() || '0'; // Default errorCode is '0' if not present\n let extErrCodeStr = '0'; // Default extended error code\n let offsetCodeStr = '-1'; // Default offset code\n // Split the errorCode by ':' to check for extended error codes\n const errorCodeParts = errorCodeStr.split(':');\n errorCodeStr = errorCodeParts[0];\n if (errorCodeParts.length > 1) {\n extErrCodeStr = errorCodeParts[1];\n if (errorCodeParts.length > 2) {\n offsetCodeStr = errorCodeParts[2];\n }\n }\n // Rest of the error string is the error message\n const errorMessage = parts.join(' ');\n // Parse error codes to integers safely, defaulting to 0 if NaN\n const errorCode = parseInt(errorCodeStr);\n const extErrCode = parseInt(extErrCodeStr);\n const offsetCode = parseInt(offsetCodeStr);\n // create an Error object and add the custom properties\n throw new types_1.SQLiteCloudError(errorMessage, {\n errorCode: errorCode.toString(),\n externalErrorCode: extErrCode.toString(),\n offsetCode\n });\n}\nexports.parseError = parseError;\n/** Parse an array of items (each of which will be parsed by type separately) */\nfunction parseArray(buffer, spaceIndex) {\n const parsedData = [];\n const array = buffer.subarray(spaceIndex + 1, buffer.length);\n const numberOfItems = parseInt(array.subarray(0, spaceIndex - 2).toString('utf8'));\n let arrayItems = array.subarray(array.indexOf(' ') + 1, array.length);\n for (let i = 0; i < numberOfItems; i++) {\n const { data, fwdBuffer: buffer } = popData(arrayItems);\n parsedData.push(data);\n arrayItems = buffer;\n }\n return parsedData;\n}\nexports.parseArray = parseArray;\n/** Parse header in a rowset or chunk of a chunked rowset */\nfunction parseRowsetHeader(buffer) {\n const index = parseInt(buffer.subarray(0, buffer.indexOf(':') + 1).toString());\n buffer = buffer.subarray(buffer.indexOf(':') + 1);\n // extract rowset header\n const { data, fwdBuffer } = popIntegers(buffer, 3);\n return {\n index,\n metadata: {\n version: data[0],\n numberOfRows: data[1],\n numberOfColumns: data[2],\n columns: []\n },\n fwdBuffer\n };\n}\nexports.parseRowsetHeader = parseRowsetHeader;\n/** Extract column names and, optionally, more metadata out of a rowset's header */\nfunction parseRowsetColumnsMetadata(buffer, metadata) {\n function popForward() {\n const { data, fwdBuffer: fwdBuffer } = popData(buffer); // buffer in parent scope\n buffer = fwdBuffer;\n return data;\n }\n for (let i = 0; i < metadata.numberOfColumns; i++) {\n metadata.columns.push({ name: popForward() });\n }\n // extract additional metadata if rowset has version 2\n if (metadata.version == 2) {\n for (let i = 0; i < metadata.numberOfColumns; i++)\n metadata.columns[i].type = popForward();\n for (let i = 0; i < metadata.numberOfColumns; i++)\n metadata.columns[i].database = popForward();\n for (let i = 0; i < metadata.numberOfColumns; i++)\n metadata.columns[i].table = popForward();\n for (let i = 0; i < metadata.numberOfColumns; i++)\n metadata.columns[i].column = popForward(); // original column name\n for (let i = 0; i < metadata.numberOfColumns; i++)\n metadata.columns[i].notNull = popForward();\n for (let i = 0; i < metadata.numberOfColumns; i++)\n metadata.columns[i].primaryKey = popForward();\n for (let i = 0; i < metadata.numberOfColumns; i++)\n metadata.columns[i].autoIncrement = popForward();\n }\n return buffer;\n}\n/** Parse a regular rowset (no chunks) */\nfunction parseRowset(buffer, spaceIndex) {\n buffer = buffer.subarray(spaceIndex + 1, buffer.length);\n const { metadata, fwdBuffer } = parseRowsetHeader(buffer);\n buffer = parseRowsetColumnsMetadata(fwdBuffer, metadata);\n // decode each rowset item\n const data = [];\n for (let j = 0; j < metadata.numberOfRows * metadata.numberOfColumns; j++) {\n const { data: rowData, fwdBuffer } = popData(buffer);\n data.push(rowData);\n buffer = fwdBuffer;\n }\n console.assert(data && data.length === metadata.numberOfRows * metadata.numberOfColumns, 'SQLiteCloudConnection.parseRowset - invalid rowset data');\n return new rowset_1.SQLiteCloudRowset(metadata, data);\n}\nfunction bufferStartsWith(buffer, prefix) {\n return buffer.length >= prefix.length && buffer.subarray(0, prefix.length).toString('utf8') === prefix;\n}\nexports.bufferStartsWith = bufferStartsWith;\nfunction bufferEndsWith(buffer, suffix) {\n return buffer.length >= suffix.length && buffer.subarray(buffer.length - suffix.length, buffer.length).toString('utf8') === suffix;\n}\nexports.bufferEndsWith = bufferEndsWith;\n/**\n * Parse a chunk of a chunked rowset command, eg:\n * *LEN 0:VERS NROWS NCOLS DATA\n * @see https://github.com/sqlitecloud/sdk/blob/master/PROTOCOL.md#scsp-rowset-chunk\n */\nfunction parseRowsetChunks(buffers) {\n let buffer = Buffer.concat(buffers);\n if (!bufferStartsWith(buffer, exports.CMD_ROWSET_CHUNK) || !bufferEndsWith(buffer, exports.ROWSET_CHUNKS_END)) {\n throw new Error('SQLiteCloudConnection.parseRowsetChunks - invalid chunks buffer');\n }\n let metadata = { version: 1, numberOfColumns: 0, numberOfRows: 0, columns: [] };\n const data = [];\n // validate and skip data type\n const dataType = buffer.subarray(0, 1).toString();\n console.assert(dataType === exports.CMD_ROWSET_CHUNK);\n buffer = buffer.subarray(buffer.indexOf(' ') + 1);\n while (true) {\n // chunk header, eg: 0:VERS NROWS NCOLS\n const { index: chunkIndex, metadata: chunkMetadata, fwdBuffer } = parseRowsetHeader(buffer);\n buffer = fwdBuffer;\n // first chunk? extract columns metadata\n if (chunkIndex === 1) {\n metadata = chunkMetadata;\n buffer = parseRowsetColumnsMetadata(buffer, metadata);\n }\n else {\n metadata.numberOfRows += chunkMetadata.numberOfRows;\n }\n // extract single rowset row\n for (let k = 0; k < chunkMetadata.numberOfRows * metadata.numberOfColumns; k++) {\n const { data: itemData, fwdBuffer } = popData(buffer);\n data.push(itemData);\n buffer = fwdBuffer;\n }\n // no more chunks?\n if (bufferStartsWith(buffer, exports.ROWSET_CHUNKS_END)) {\n break;\n }\n }\n console.assert(data && data.length === metadata.numberOfRows * metadata.numberOfColumns, 'parseRowsetChunks - invalid rowset data');\n const rowset = new rowset_1.SQLiteCloudRowset(metadata, data);\n // console.debug(`parseRowsetChunks - ${rowset.numberOfRows} rows, ${rowset.numberOfColumns} columns`)\n return rowset;\n}\nexports.parseRowsetChunks = parseRowsetChunks;\n/** Pop one or more space separated integers from beginning of buffer, move buffer forward */\nfunction popIntegers(buffer, numberOfIntegers = 1) {\n const data = [];\n for (let i = 0; i < numberOfIntegers; i++) {\n const spaceIndex = buffer.indexOf(' ');\n data[i] = parseInt(buffer.subarray(0, spaceIndex).toString());\n buffer = buffer.subarray(spaceIndex + 1);\n }\n return { data, fwdBuffer: buffer };\n}\n/** Parse command, extract its data, return the data and the buffer moved to the first byte after the command */\nfunction popData(buffer) {\n function popResults(data) {\n const fwdBuffer = buffer.subarray(commandEnd);\n return { data, fwdBuffer };\n }\n // first character is the data type\n console.assert(buffer && buffer instanceof Buffer);\n const dataType = buffer.subarray(0, 1).toString('utf8');\n console.assert(dataType !== exports.CMD_COMPRESSED, \"Compressed data shouldn't be decompressed before parsing\");\n console.assert(dataType !== exports.CMD_ROWSET_CHUNK, 'Chunked data should be parsed by parseRowsetChunks');\n let spaceIndex = buffer.indexOf(' ');\n if (spaceIndex === -1) {\n spaceIndex = buffer.length - 1;\n }\n let commandEnd = -1;\n if (dataType === exports.CMD_INT || dataType === exports.CMD_FLOAT || dataType === exports.CMD_NULL) {\n commandEnd = spaceIndex + 1;\n }\n else {\n const commandLength = parseInt(buffer.subarray(1, spaceIndex).toString());\n commandEnd = spaceIndex + 1 + commandLength;\n }\n switch (dataType) {\n case exports.CMD_INT:\n return popResults(parseInt(buffer.subarray(1, spaceIndex).toString()));\n case exports.CMD_FLOAT:\n return popResults(parseFloat(buffer.subarray(1, spaceIndex).toString()));\n case exports.CMD_NULL:\n return popResults(null);\n case exports.CMD_STRING:\n return popResults(buffer.subarray(spaceIndex + 1, commandEnd).toString('utf8'));\n case exports.CMD_ZEROSTRING:\n return popResults(buffer.subarray(spaceIndex + 1, commandEnd - 1).toString('utf8'));\n case exports.CMD_COMMAND:\n return popResults(buffer.subarray(spaceIndex + 1, commandEnd).toString('utf8'));\n case exports.CMD_JSON:\n return popResults(JSON.parse(buffer.subarray(spaceIndex + 1, commandEnd).toString('utf8')));\n case exports.CMD_BLOB:\n return popResults(buffer.subarray(spaceIndex + 1, commandEnd));\n case exports.CMD_ARRAY:\n return popResults(parseArray(buffer, spaceIndex));\n case exports.CMD_ROWSET:\n return popResults(parseRowset(buffer, spaceIndex));\n case exports.CMD_ERROR:\n parseError(buffer, spaceIndex); // throws custom error\n break;\n }\n throw new TypeError(`Data type: ${dataType} is not defined in SCSP`);\n}\nexports.popData = popData;\n/** Format a command to be sent via SCSP protocol */\nfunction formatCommand(command) {\n const commandLength = Buffer.byteLength(command, 'utf-8');\n return `+${commandLength} ${command}`;\n}\nexports.formatCommand = formatCommand;\n\n\n//# sourceURL=webpack://sqlitecloud/./lib/drivers/protocol.js?"); +eval("\n//\n// protocol.ts - low level protocol handling for SQLiteCloud transport\n//\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.formatCommand = exports.popData = exports.parseRowsetChunks = exports.bufferEndsWith = exports.bufferStartsWith = exports.parseRowsetHeader = exports.parseArray = exports.parseError = exports.decompressBuffer = exports.parseCommandLength = exports.hasCommandLength = exports.ROWSET_CHUNKS_END = exports.CMD_ARRAY = exports.CMD_COMMAND = exports.CMD_COMPRESSED = exports.CMD_BLOB = exports.CMD_NULL = exports.CMD_JSON = exports.CMD_ROWSET_CHUNK = exports.CMD_ROWSET = exports.CMD_FLOAT = exports.CMD_INT = exports.CMD_ERROR = exports.CMD_ZEROSTRING = exports.CMD_STRING = void 0;\nconst types_1 = __webpack_require__(/*! ./types */ \"./lib/drivers/types.js\");\nconst rowset_1 = __webpack_require__(/*! ./rowset */ \"./lib/drivers/rowset.js\");\nconst lz4 = __webpack_require__(/*! lz4js */ \"./node_modules/lz4js/lz4.js\");\n// The server communicates with clients via commands defined in\n// SQLiteCloud Server Protocol (SCSP), see more at:\n// https://github.com/sqlitecloud/sdk/blob/master/PROTOCOL.md\nexports.CMD_STRING = '+';\nexports.CMD_ZEROSTRING = '!';\nexports.CMD_ERROR = '-';\nexports.CMD_INT = ':';\nexports.CMD_FLOAT = ',';\nexports.CMD_ROWSET = '*';\nexports.CMD_ROWSET_CHUNK = '/';\nexports.CMD_JSON = '#';\nexports.CMD_NULL = '_';\nexports.CMD_BLOB = '$';\nexports.CMD_COMPRESSED = '%';\nexports.CMD_COMMAND = '^';\nexports.CMD_ARRAY = '=';\n// const CMD_RAWJSON = '{'\n// const CMD_PUBSUB = '|'\n// const CMD_RECONNECT = '@'\n// To mark the end of the Rowset, the special string /LEN 0 0 0 is sent (LEN is always 6 in this case)\n// https://github.com/sqlitecloud/sdk/blob/master/PROTOCOL.md#scsp-rowset-chunk\nexports.ROWSET_CHUNKS_END = '/6 0 0 0 ';\n//\n// utility functions\n//\n/** Analyze first character to check if corresponding data type has LEN */\nfunction hasCommandLength(firstCharacter) {\n return firstCharacter == exports.CMD_INT || firstCharacter == exports.CMD_FLOAT || firstCharacter == exports.CMD_NULL ? false : true;\n}\nexports.hasCommandLength = hasCommandLength;\n/** Analyze a command with explict LEN and extract it */\nfunction parseCommandLength(data) {\n return parseInt(data.subarray(1, data.indexOf(' ')).toString('utf8'));\n}\nexports.parseCommandLength = parseCommandLength;\n/** Receive a compressed buffer, decompress with lz4, return buffer and datatype */\nfunction decompressBuffer(buffer) {\n const spaceIndex = buffer.indexOf(' ');\n buffer = buffer.subarray(spaceIndex + 1);\n // extract compressed size\n const compressedSize = parseInt(buffer.subarray(0, buffer.indexOf(' ') + 1).toString('utf8'));\n buffer = buffer.subarray(buffer.indexOf(' ') + 1);\n // extract decompressed size\n const decompressedSize = parseInt(buffer.subarray(0, buffer.indexOf(' ') + 1).toString('utf8'));\n buffer = buffer.subarray(buffer.indexOf(' ') + 1);\n // extract compressed dataType\n const dataType = buffer.subarray(0, 1).toString('utf8');\n const decompressedBuffer = Buffer.alloc(decompressedSize);\n const compressedBuffer = buffer.subarray(buffer.length - compressedSize);\n // lz4js library is javascript and doesn't have types so we silence the type check\n // eslint-disable-next-line\n const decompressionResult = lz4.decompressBlock(compressedBuffer, decompressedBuffer, 0, compressedSize, 0);\n buffer = Buffer.concat([buffer.subarray(0, buffer.length - compressedSize), decompressedBuffer]);\n if (decompressionResult <= 0 || decompressionResult !== decompressedSize) {\n throw new Error(`lz4 decompression error at offset ${decompressionResult}`);\n }\n return { buffer, dataType };\n}\nexports.decompressBuffer = decompressBuffer;\n/** Parse error message or extended error message */\nfunction parseError(buffer, spaceIndex) {\n const errorBuffer = buffer.subarray(spaceIndex + 1);\n const errorString = errorBuffer.toString('utf8');\n const parts = errorString.split(' ');\n let errorCodeStr = parts.shift() || '0'; // Default errorCode is '0' if not present\n let extErrCodeStr = '0'; // Default extended error code\n let offsetCodeStr = '-1'; // Default offset code\n // Split the errorCode by ':' to check for extended error codes\n const errorCodeParts = errorCodeStr.split(':');\n errorCodeStr = errorCodeParts[0];\n if (errorCodeParts.length > 1) {\n extErrCodeStr = errorCodeParts[1];\n if (errorCodeParts.length > 2) {\n offsetCodeStr = errorCodeParts[2];\n }\n }\n // Rest of the error string is the error message\n const errorMessage = parts.join(' ');\n // Parse error codes to integers safely, defaulting to 0 if NaN\n const errorCode = parseInt(errorCodeStr);\n const extErrCode = parseInt(extErrCodeStr);\n const offsetCode = parseInt(offsetCodeStr);\n // create an Error object and add the custom properties\n throw new types_1.SQLiteCloudError(errorMessage, {\n errorCode: errorCode.toString(),\n externalErrorCode: extErrCode.toString(),\n offsetCode\n });\n}\nexports.parseError = parseError;\n/** Parse an array of items (each of which will be parsed by type separately) */\nfunction parseArray(buffer, spaceIndex) {\n const parsedData = [];\n const array = buffer.subarray(spaceIndex + 1, buffer.length);\n const numberOfItems = parseInt(array.subarray(0, spaceIndex - 2).toString('utf8'));\n let arrayItems = array.subarray(array.indexOf(' ') + 1, array.length);\n for (let i = 0; i < numberOfItems; i++) {\n const { data, fwdBuffer: buffer } = popData(arrayItems);\n parsedData.push(data);\n arrayItems = buffer;\n }\n return parsedData;\n}\nexports.parseArray = parseArray;\n/** Parse header in a rowset or chunk of a chunked rowset */\nfunction parseRowsetHeader(buffer) {\n const index = parseInt(buffer.subarray(0, buffer.indexOf(':') + 1).toString());\n buffer = buffer.subarray(buffer.indexOf(':') + 1);\n // extract rowset header\n const { data, fwdBuffer } = popIntegers(buffer, 3);\n return {\n index,\n metadata: {\n version: data[0],\n numberOfRows: data[1],\n numberOfColumns: data[2],\n columns: []\n },\n fwdBuffer\n };\n}\nexports.parseRowsetHeader = parseRowsetHeader;\n/** Extract column names and, optionally, more metadata out of a rowset's header */\nfunction parseRowsetColumnsMetadata(buffer, metadata) {\n function popForward() {\n const { data, fwdBuffer: fwdBuffer } = popData(buffer); // buffer in parent scope\n buffer = fwdBuffer;\n return data;\n }\n for (let i = 0; i < metadata.numberOfColumns; i++) {\n metadata.columns.push({ name: popForward() });\n }\n // extract additional metadata if rowset has version 2\n if (metadata.version == 2) {\n for (let i = 0; i < metadata.numberOfColumns; i++)\n metadata.columns[i].type = popForward();\n for (let i = 0; i < metadata.numberOfColumns; i++)\n metadata.columns[i].database = popForward();\n for (let i = 0; i < metadata.numberOfColumns; i++)\n metadata.columns[i].table = popForward();\n for (let i = 0; i < metadata.numberOfColumns; i++)\n metadata.columns[i].column = popForward(); // original column name\n for (let i = 0; i < metadata.numberOfColumns; i++)\n metadata.columns[i].notNull = popForward();\n for (let i = 0; i < metadata.numberOfColumns; i++)\n metadata.columns[i].primaryKey = popForward();\n for (let i = 0; i < metadata.numberOfColumns; i++)\n metadata.columns[i].autoIncrement = popForward();\n }\n return buffer;\n}\n/** Parse a regular rowset (no chunks) */\nfunction parseRowset(buffer, spaceIndex) {\n buffer = buffer.subarray(spaceIndex + 1, buffer.length);\n const { metadata, fwdBuffer } = parseRowsetHeader(buffer);\n buffer = parseRowsetColumnsMetadata(fwdBuffer, metadata);\n // decode each rowset item\n const data = [];\n for (let j = 0; j < metadata.numberOfRows * metadata.numberOfColumns; j++) {\n const { data: rowData, fwdBuffer } = popData(buffer);\n data.push(rowData);\n buffer = fwdBuffer;\n }\n console.assert(data && data.length === metadata.numberOfRows * metadata.numberOfColumns, 'SQLiteCloudConnection.parseRowset - invalid rowset data');\n return new rowset_1.SQLiteCloudRowset(metadata, data);\n}\nfunction bufferStartsWith(buffer, prefix) {\n return buffer.length >= prefix.length && buffer.subarray(0, prefix.length).toString('utf8') === prefix;\n}\nexports.bufferStartsWith = bufferStartsWith;\nfunction bufferEndsWith(buffer, suffix) {\n return buffer.length >= suffix.length && buffer.subarray(buffer.length - suffix.length, buffer.length).toString('utf8') === suffix;\n}\nexports.bufferEndsWith = bufferEndsWith;\n/**\n * Parse a chunk of a chunked rowset command, eg:\n * *LEN 0:VERS NROWS NCOLS DATA\n * @see https://github.com/sqlitecloud/sdk/blob/master/PROTOCOL.md#scsp-rowset-chunk\n */\nfunction parseRowsetChunks(buffers) {\n let buffer = Buffer.concat(buffers);\n if (!bufferStartsWith(buffer, exports.CMD_ROWSET_CHUNK) || !bufferEndsWith(buffer, exports.ROWSET_CHUNKS_END)) {\n throw new Error('SQLiteCloudConnection.parseRowsetChunks - invalid chunks buffer');\n }\n let metadata = { version: 1, numberOfColumns: 0, numberOfRows: 0, columns: [] };\n const data = [];\n // validate and skip data type\n const dataType = buffer.subarray(0, 1).toString();\n console.assert(dataType === exports.CMD_ROWSET_CHUNK);\n buffer = buffer.subarray(buffer.indexOf(' ') + 1);\n while (buffer.length > 0 && !bufferStartsWith(buffer, exports.ROWSET_CHUNKS_END)) {\n // chunk header, eg: 0:VERS NROWS NCOLS\n const { index: chunkIndex, metadata: chunkMetadata, fwdBuffer } = parseRowsetHeader(buffer);\n buffer = fwdBuffer;\n // first chunk? extract columns metadata\n if (chunkIndex === 1) {\n metadata = chunkMetadata;\n buffer = parseRowsetColumnsMetadata(buffer, metadata);\n }\n else {\n metadata.numberOfRows += chunkMetadata.numberOfRows;\n }\n // extract single rowset row\n for (let k = 0; k < chunkMetadata.numberOfRows * metadata.numberOfColumns; k++) {\n const { data: itemData, fwdBuffer } = popData(buffer);\n data.push(itemData);\n buffer = fwdBuffer;\n }\n }\n console.assert(data && data.length === metadata.numberOfRows * metadata.numberOfColumns, 'parseRowsetChunks - invalid rowset data');\n const rowset = new rowset_1.SQLiteCloudRowset(metadata, data);\n // console.debug(`parseRowsetChunks - ${rowset.numberOfRows} rows, ${rowset.numberOfColumns} columns`)\n return rowset;\n}\nexports.parseRowsetChunks = parseRowsetChunks;\n/** Pop one or more space separated integers from beginning of buffer, move buffer forward */\nfunction popIntegers(buffer, numberOfIntegers = 1) {\n const data = [];\n for (let i = 0; i < numberOfIntegers; i++) {\n const spaceIndex = buffer.indexOf(' ');\n data[i] = parseInt(buffer.subarray(0, spaceIndex).toString());\n buffer = buffer.subarray(spaceIndex + 1);\n }\n return { data, fwdBuffer: buffer };\n}\n/** Parse command, extract its data, return the data and the buffer moved to the first byte after the command */\nfunction popData(buffer) {\n function popResults(data) {\n const fwdBuffer = buffer.subarray(commandEnd);\n return { data, fwdBuffer };\n }\n // first character is the data type\n console.assert(buffer && buffer instanceof Buffer);\n const dataType = buffer.subarray(0, 1).toString('utf8');\n console.assert(dataType !== exports.CMD_COMPRESSED, \"Compressed data shouldn't be decompressed before parsing\");\n console.assert(dataType !== exports.CMD_ROWSET_CHUNK, 'Chunked data should be parsed by parseRowsetChunks');\n let spaceIndex = buffer.indexOf(' ');\n if (spaceIndex === -1) {\n spaceIndex = buffer.length - 1;\n }\n let commandEnd = -1;\n if (dataType === exports.CMD_INT || dataType === exports.CMD_FLOAT || dataType === exports.CMD_NULL) {\n commandEnd = spaceIndex + 1;\n }\n else {\n const commandLength = parseInt(buffer.subarray(1, spaceIndex).toString());\n commandEnd = spaceIndex + 1 + commandLength;\n }\n switch (dataType) {\n case exports.CMD_INT:\n return popResults(parseInt(buffer.subarray(1, spaceIndex).toString()));\n case exports.CMD_FLOAT:\n return popResults(parseFloat(buffer.subarray(1, spaceIndex).toString()));\n case exports.CMD_NULL:\n return popResults(null);\n case exports.CMD_STRING:\n return popResults(buffer.subarray(spaceIndex + 1, commandEnd).toString('utf8'));\n case exports.CMD_ZEROSTRING:\n return popResults(buffer.subarray(spaceIndex + 1, commandEnd - 1).toString('utf8'));\n case exports.CMD_COMMAND:\n return popResults(buffer.subarray(spaceIndex + 1, commandEnd).toString('utf8'));\n case exports.CMD_JSON:\n return popResults(JSON.parse(buffer.subarray(spaceIndex + 1, commandEnd).toString('utf8')));\n case exports.CMD_BLOB:\n return popResults(buffer.subarray(spaceIndex + 1, commandEnd));\n case exports.CMD_ARRAY:\n return popResults(parseArray(buffer, spaceIndex));\n case exports.CMD_ROWSET:\n return popResults(parseRowset(buffer, spaceIndex));\n case exports.CMD_ERROR:\n parseError(buffer, spaceIndex); // throws custom error\n break;\n }\n throw new TypeError(`Data type: ${dataType} is not defined in SCSP`);\n}\nexports.popData = popData;\n/** Format a command to be sent via SCSP protocol */\nfunction formatCommand(command) {\n const commandLength = Buffer.byteLength(command, 'utf-8');\n return `+${commandLength} ${command}`;\n}\nexports.formatCommand = formatCommand;\n\n\n//# sourceURL=webpack://sqlitecloud/./lib/drivers/protocol.js?"); /***/ }), diff --git a/public/sqlitecloud.drivers.js b/public/sqlitecloud.drivers.js index 6378d3e..6b80076 100644 --- a/public/sqlitecloud.drivers.js +++ b/public/sqlitecloud.drivers.js @@ -1 +1 @@ -!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.sqlitecloud=t():e.sqlitecloud=t()}(this,(()=>(()=>{var e={593:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.SQLiteCloudTlsConnection=void 0;const s=n(906),o=n(480),i=n(1),a=n(73),c=n(1),l=r(n(761)),u=r(n(59));class h extends o.SQLiteCloudConnection{get connected(){return!!this.socket}connectTransport(e,t){console.assert(!this.connected,"Connection already established");const n=e=>{this.socket&&(this.socket.removeAllListeners("data"),this.socket.removeAllListeners("error"),this.socket.removeAllListeners("close"),e&&this.close()),null==t||t.call(this,e)};this.config=e;const r=(0,a.getInitializationCommands)(e);if(e.insecure){const s={host:e.host,port:e.port};this.socket=l.default.connect(s,(()=>{console.warn(`TlsConnection.connectTransport - connected to ${e.host}:${e.port} using insecure protocol`),console.assert(this.socket,"Connection already closed"),this.transportCommands(r,(e=>{e&&this.socket&&this.close(),t&&(null==t||t.call(this,e),t=void 0),n(e)}))}))}else this.socket=u.default.connect(this.config.port,this.config.host,this.config.tlsOptions,(()=>{const e=this.socket;if(null==e?void 0:e.authorized){if(null===this.socket)return void n(new s.SQLiteCloudError("Connection was closed before it was done opening"));console.assert(this.socket,"Connection already closed"),this.transportCommands(r,(e=>{e&&this.socket&&this.close(),t&&(null==t||t.call(this,e),t=void 0),n(e)}))}else{const t=(0,a.anonimizeError)(e.authorizationError);console.error("Connection was not authorized",t),this.close(),n(new s.SQLiteCloudError("Connection was not authorized",{cause:t}))}}));return this.socket.on("close",(()=>{this.socket=null,n(new s.SQLiteCloudError("Connection was closed"))})),this.socket.once("error",(e=>{console.error("Connection error",e),n(new s.SQLiteCloudError("Connection error",{cause:e}))})),this}transportCommands(e,t){var n,r,o;if(!this.socket)return null==t||t.call(this,new s.SQLiteCloudError("Connection not established",{errorCode:"ERR_CONNECTION_NOT_ESTABLISHED"})),this;e=(0,i.formatCommand)(e);let l=Buffer.alloc(0);const u=[];let h;const d=(e,n)=>{clearTimeout(h),this.socket&&(this.socket.removeAllListeners("data"),this.socket.removeAllListeners("error"),this.socket.removeAllListeners("close")),t&&(null==t||t.call(this,e,n),t=void 0)},f=e=>{var t,n;try{let r=0===l.length?e.subarray(0,1).toString():l.subarray(0,1).toString("utf8");if(l=Buffer.concat([l,e]),(0,i.hasCommandLength)(r)){const e=(0,i.parseCommandLength)(l);if(l.length-l.indexOf(" ")-1>=e){if(null===(t=this.config)||void 0===t?void 0:t.verbose){let e=l.toString("utf8");e.length>1e3&&(e=e.substring(0,100)+"..."+e.substring(e.length-40))}if(r===i.CMD_COMPRESSED&&({buffer:l,dataType:r}=(0,i.decompressBuffer)(l)),r!==i.CMD_ROWSET_CHUNK){null===(n=this.socket)||void 0===n||n.off("data",f);const{data:e}=(0,i.popData)(l);d(null,e)}else if((0,i.bufferEndsWith)(l,i.ROWSET_CHUNKS_END)){u.push(l);const e=(0,c.parseRowsetChunks)(u);null==d||d.call(this,null,e)}else u.push(l),l=Buffer.alloc(0)}}else if(" "==l.subarray(l.length-1,l.length).toString("utf8")){const{data:e}=(0,i.popData)(l);d(null,e)}}catch(e){console.assert(e instanceof Error),e instanceof Error&&d(e)}};return null===(n=this.socket)||void 0===n||n.once("close",(()=>{d(new s.SQLiteCloudError("Connection was closed",{cause:(0,a.anonimizeCommand)(e)}))})),null===(r=this.socket)||void 0===r||r.write(e,"utf8",(()=>{var t,n;h=setTimeout((()=>{const t=new s.SQLiteCloudError("Request timed out",{cause:(0,a.anonimizeCommand)(e)});d(t)}),null===(t=this.config)||void 0===t?void 0:t.timeout),null===(n=this.socket)||void 0===n||n.on("data",f)})),null===(o=this.socket)||void 0===o||o.once("error",(e=>{console.error("Socket error",e),this.close(),d(new s.SQLiteCloudError("Socket error",{cause:(0,a.anonimizeError)(e)}))})),this}close(){return console.assert(null!==this.socket,"TlsConnection.close - connection already closed"),this.operations.clear(),this.socket&&(this.socket.destroy(),this.socket=null),this.socket=void 0,this}}t.SQLiteCloudTlsConnection=h,t.default=h},363:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.SQLiteCloudWebsocketConnection=void 0;const r=n(906),s=n(825),o=n(480),i=n(46);class a extends o.SQLiteCloudConnection{get connected(){return!!this.socket}connectTransport(e,t){var n;try{if(console.assert(!this.connected,"Connection already established"),!this.socket){this.config=e;const t=this.config.connectionString,r=(null===(n=this.config)||void 0===n?void 0:n.gatewayUrl)||`ws://${this.config.host}:4000`;this.socket=(0,i.io)(r,{auth:{token:t}})}null==t||t.call(this,null)}catch(e){null==t||t.call(this,e)}return this}transportCommands(e,t){return this.socket?(this.socket.emit("v1/sql",{sql:e,row:"array"},(e=>{if(null==e?void 0:e.error){const n=new r.SQLiteCloudError(e.error.detail,Object.assign({},e.error));null==t||t.call(this,n)}else{const{data:n,metadata:r}=e;if(n&&r&&void 0!==r.numberOfRows&&void 0!==r.numberOfColumns&&void 0!==r.columns){console.assert(Array.isArray(n),"SQLiteCloudWebsocketConnection.transportCommands - data is not an array");const e=new s.SQLiteCloudRowset(r,n.flat());return void(null==t||t.call(this,null,e))}null==t||t.call(this,null,null==e?void 0:e.data)}})),this):(null==t||t.call(this,new r.SQLiteCloudError("Connection not established",{errorCode:"ERR_CONNECTION_NOT_ESTABLISHED"})),this)}close(){var e;return console.assert(null!==this.socket,"SQLiteCloudWebsocketConnection.close - connection already closed"),this.socket&&(null===(e=this.socket)||void 0===e||e.close(),this.socket=void 0),this.operations.clear(),this.socket=void 0,this}}t.SQLiteCloudWebsocketConnection=a,t.default=a},480:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.SQLiteCloudConnection=void 0;const r=n(906),s=n(73),o=n(39),i=n(73);t.SQLiteCloudConnection=class{constructor(e,t){this.operations=new o.OperationsQueue,this.config="string"==typeof e?(0,s.validateConfiguration)({connectionString:e}):(0,s.validateConfiguration)(e),this.connect(t)}connect(e){return this.operations.enqueue((t=>{this.connectTransport(this.config,(n=>{n&&(console.error(`SQLiteCloudConnection.connect - error connecting ${this.config.host}:${this.config.port} ${n.toString()}`,n),this.close()),null==e||e.call(this,n||null),t(n)}))})),this}log(e,...t){this.config.verbose&&(e=(0,i.anonimizeCommand)(e),console.log(`${(new Date).toISOString()} ${this.config.clientId}: ${e}`,...t))}verbose(){this.config.verbose=!0}sendCommands(e,t){return this.operations.enqueue((n=>{if(!this.connected){const e=new r.SQLiteCloudError("Connection not established",{errorCode:"ERR_CONNECTION_NOT_ESTABLISHED"});null==t||t.call(this,e),n(e)}this.transportCommands(e,((e,r)=>{null==t||t.call(this,e,r),n(e)}))})),this}}},751:function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var s=Object.getOwnPropertyDescriptor(t,n);s&&!("get"in s?!t.__esModule:s.writable||s.configurable)||(s={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,s)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),s=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),o=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return s(t,e),t},i=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(s,o){function i(e){try{c(r.next(e))}catch(e){o(e)}}function a(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?s(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(i,a)}c((r=r.apply(e,t||[])).next())}))},a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Database=void 0;const c=n(825),l=n(906),u=n(73),h=n(880),d=a(n(729)),f=n(73);class p extends d.default{constructor(e,t,n){super(),this.connections=[],this.config="string"==typeof e?{connectionString:e}:e,"function"==typeof t&&(n=t,t=void 0),this.getConnection(((e,t)=>{n&&n.call(this,e)}))}getConnection(e){var t,r,s;(null===(t=this.connections)||void 0===t?void 0:t.length)>0?null==e||e.call(this,null,this.connections[0]):f.isBrowser||(null===(r=this.config)||void 0===r?void 0:r.useWebsocket)||(null===(s=this.config)||void 0===s?void 0:s.gatewayUrl)?Promise.resolve().then((()=>o(n(363)))).then((t=>{this.connections.push(new t.default(this.config,(t=>{t?this.handleError(this.connections[0],t,e):(console.assert,null==e||e.call(this,null,this.connections[0]),this.emitEvent("open"))})))})).catch((t=>{this.handleError(null,t,e)})):Promise.resolve().then((()=>o(n(593)))).then((t=>{this.connections.push(new t.default(this.config,(t=>{t?this.handleError(this.connections[0],t,e):(console.assert,null==e||e.call(this,null,this.connections[0]),this.emitEvent("open"))})))})).catch((t=>{this.handleError(null,t,e)}))}handleError(e,t,n){e&&(this.connections=this.connections.filter((t=>t!==e)),e.close()),n?n.call(this,t):this.emitEvent("error",t)}processContext(e){if(e&&Array.isArray(e)&&e.length>0&&e[0]===l.SQLiteCloudArrayType.ARRAY_TYPE_SQLITE_EXEC)return{lastID:e[2],changes:e[3],totalChanges:e[4],finalized:e[5]}}emitEvent(e,...t){setTimeout((()=>{this.emit(e,...t)}),0)}getConfiguration(){return JSON.parse(JSON.stringify(this.config))}verbose(){this.config.verbose=!0;for(const e of this.connections)e.verbose();return this}configure(e,t){return this}run(e,...t){const{args:n,callback:r}=(0,u.popCallback)(t),s=(null==n?void 0:n.length)>0?(0,u.prepareSql)(e,...n):e;return this.getConnection(((e,t)=>{e||!t?this.handleError(null,e,r):t.sendCommands(s,((e,n)=>{if(e)this.handleError(t,e,r);else{const e=this.processContext(n);null==r||r.call(e||this,null,e?void 0:n)}}))})),this}get(e,...t){const{args:n,callback:r}=(0,u.popCallback)(t),s=(null==n?void 0:n.length)>0?(0,u.prepareSql)(e,...n):e;return this.getConnection(((e,t)=>{e||!t?this.handleError(null,e,r):t.sendCommands(s,((e,n)=>{e?this.handleError(t,e,r):n&&n instanceof c.SQLiteCloudRowset&&n.length>0?null==r||r.call(this,null,n[0]):null==r||r.call(this,null)}))})),this}all(e,...t){const{args:n,callback:r}=(0,u.popCallback)(t),s=(null==n?void 0:n.length)>0?(0,u.prepareSql)(e,...n):e;return this.getConnection(((e,t)=>{e||!t?this.handleError(null,e,r):t.sendCommands(s,((e,n)=>{e?this.handleError(t,e,r):n&&n instanceof c.SQLiteCloudRowset?null==r||r.call(this,null,n):null==r||r.call(this,null)}))})),this}each(e,...t){const{args:n,callback:r,complete:s}=(0,u.popCallback)(t),o=(null==n?void 0:n.length)>0?(0,u.prepareSql)(e,...n):e;return this.getConnection(((e,t)=>{e||!t?this.handleError(null,e,r):t.sendCommands(o,((e,n)=>{if(e)this.handleError(t,e,r);else if(n&&n instanceof c.SQLiteCloudRowset){if(r)for(const e of n)r.call(this,null,e);s&&s.call(this,null,n.numberOfRows)}else null==r||r.call(this,new l.SQLiteCloudError("Invalid rowset"))}))})),this}prepare(e,...t){const{args:n,callback:r}=(0,u.popCallback)(t);return new h.Statement(this,e,...n,r)}exec(e,t){return this.getConnection(((n,r)=>{n||!r?this.handleError(null,n,t):r.sendCommands(e,((e,n)=>{if(e)this.handleError(r,e,t);else{const e=this.processContext(n);null==t||t.call(e||this,null)}}))})),this}close(e){var t;if((null===(t=this.connections)||void 0===t?void 0:t.length)>0)for(const e of this.connections)e.close();null==e||e.call(this,null),this.emitEvent("close")}loadExtension(e,t){return t?t.call(this,new Error("Database.loadExtension - Not implemented")):this.emitEvent("error",new Error("Database.loadExtension - Not implemented")),this}interrupt(){}sql(e,...t){return i(this,void 0,void 0,(function*(){let n="";if(Array.isArray(e)&&"raw"in e)e.forEach(((e,r)=>{n+=e+(r0?(0,u.prepareSql)(e,...t):e}return new Promise(((e,t)=>{this.getConnection(((r,s)=>{r||!s?t(r):s.sendCommands(n,((n,r)=>{if(n)t(n);else{const t=this.processContext(r);e(t||r)}}))}))}))}))}}t.Database=p},1:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.formatCommand=t.popData=t.parseRowsetChunks=t.bufferEndsWith=t.bufferStartsWith=t.parseRowsetHeader=t.parseArray=t.parseError=t.decompressBuffer=t.parseCommandLength=t.hasCommandLength=t.ROWSET_CHUNKS_END=t.CMD_ARRAY=t.CMD_COMMAND=t.CMD_COMPRESSED=t.CMD_BLOB=t.CMD_NULL=t.CMD_JSON=t.CMD_ROWSET_CHUNK=t.CMD_ROWSET=t.CMD_FLOAT=t.CMD_INT=t.CMD_ERROR=t.CMD_ZEROSTRING=t.CMD_STRING=void 0;const r=n(906),s=n(825),o=n(405);function i(e,t){const n=e.subarray(t+1).toString("utf8").split(" ");let s=n.shift()||"0",o="0",i="-1";const a=s.split(":");s=a[0],a.length>1&&(o=a[1],a.length>2&&(i=a[2]));const c=n.join(" "),l=parseInt(s),u=parseInt(o),h=parseInt(i);throw new r.SQLiteCloudError(c,{errorCode:l.toString(),externalErrorCode:u.toString(),offsetCode:h})}function a(e,t){const n=[],r=e.subarray(t+1,e.length),s=parseInt(r.subarray(0,t-2).toString("utf8"));let o=r.subarray(r.indexOf(" ")+1,r.length);for(let e=0;e=t.length&&e.subarray(0,t.length).toString("utf8")===t}function h(e,t){return e.length>=t.length&&e.subarray(e.length-t.length,e.length).toString("utf8")===t}function d(e){function n(t){return{data:t,fwdBuffer:e.subarray(u)}}console.assert(e&&e instanceof Buffer);const r=e.subarray(0,1).toString("utf8");console.assert(r!==t.CMD_COMPRESSED,"Compressed data shouldn't be decompressed before parsing"),console.assert(r!==t.CMD_ROWSET_CHUNK,"Chunked data should be parsed by parseRowsetChunks");let o=e.indexOf(" ");-1===o&&(o=e.length-1);let u=-1;if(r===t.CMD_INT||r===t.CMD_FLOAT||r===t.CMD_NULL)u=o+1;else{const t=parseInt(e.subarray(1,o).toString());u=o+1+t}switch(r){case t.CMD_INT:return n(parseInt(e.subarray(1,o).toString()));case t.CMD_FLOAT:return n(parseFloat(e.subarray(1,o).toString()));case t.CMD_NULL:return n(null);case t.CMD_STRING:return n(e.subarray(o+1,u).toString("utf8"));case t.CMD_ZEROSTRING:return n(e.subarray(o+1,u-1).toString("utf8"));case t.CMD_COMMAND:return n(e.subarray(o+1,u).toString("utf8"));case t.CMD_JSON:return n(JSON.parse(e.subarray(o+1,u).toString("utf8")));case t.CMD_BLOB:return n(e.subarray(o+1,u));case t.CMD_ARRAY:return n(a(e,o));case t.CMD_ROWSET:return n(function(e,t){e=e.subarray(t+1,e.length);const{metadata:n,fwdBuffer:r}=c(e);e=l(r,n);const o=[];for(let t=0;t{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.OperationsQueue=void 0,t.OperationsQueue=class{constructor(){this.queue=[],this.isProcessing=!1}enqueue(e){this.queue.push(e),this.isProcessing||this.processNext()}clear(){this.queue=[],this.isProcessing=!1}processNext(){if(0===this.queue.length)return void(this.isProcessing=!1);this.isProcessing=!0;const e=this.queue.shift();null==e||e((()=>{this.processNext()}))}}},825:function(e,t,n){"use strict";var r,s,o,i,a=this&&this.__classPrivateFieldSet||function(e,t,n,r,s){if("m"===r)throw new TypeError("Private method is not writable");if("a"===r&&!s)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!s:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===r?s.call(e,n):s?s.value=n:t.set(e,n),n},c=this&&this.__classPrivateFieldGet||function(e,t,n,r){if("a"===n&&!r)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!r:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===n?r:"a"===n?r.call(e):r?r.value:t.get(e)};Object.defineProperty(t,"__esModule",{value:!0}),t.SQLiteCloudRowset=t.SQLiteCloudRow=void 0;const l=n(906);class u{constructor(e,t,n){r.set(this,void 0),s.set(this,void 0),a(this,r,e,"f"),a(this,s,n,"f");for(let e=0;er!==t&&e===n[t]))>=0;)n[t]=`${n[t]}_${e}`,e++}for(let r=0,s=0;re.name))}get metadata(){return c(this,o,"f")}getItem(e,t){if(e<0||e>=this.numberOfRows||t<0||t>=this.numberOfColumns)throw new l.SQLiteCloudError(`This rowset has ${this.numberOfColumns} columns by ${this.numberOfRows} rows, requested column ${t} and row ${e} is invalid.`);return c(this,i,"f")[e*this.numberOfColumns+t]}slice(e,t){e=void 0===e?0:e<0?this.numberOfRows+e:e,e=Math.min(Math.max(e,0),this.numberOfRows),t=void 0===t?this.numberOfRows:t<0?this.numberOfRows+t:t,t=Math.min(Math.max(e,t),this.numberOfRows);const n=Object.assign(Object.assign({},c(this,o,"f")),{numberOfRows:t-e}),r=c(this,i,"f").slice(e*this.numberOfColumns,t*this.numberOfColumns);return console.assert(r&&r.length===n.numberOfRows*n.numberOfColumns,"SQLiteCloudRowset.slice - invalid rowset data"),new h(n,r)}map(e){const t=[];for(let n=0;n{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Statement=void 0;const r=n(73);t.Statement=class{constructor(e,t,...n){const{args:s,callback:o}=(0,r.popCallback)(n);this._database=e,this._sql=t,(null==s?void 0:s.length)>0?this.bind(...s,o):null==o||o.call(this,null)}bind(...e){const{args:t,callback:n}=(0,r.popCallback)(e);try{this._preparedSql=(0,r.prepareSql)(this._sql,...t),n&&n.call(this,null)}catch(e){this._preparedSql=void 0,n&&n.call(this,e)}return this}run(...e){const{args:t,callback:n}=(0,r.popCallback)(e||[]);return(null==t?void 0:t.length)>0?this.bind(...t,(e=>{e?null==n||n.call(this,e):this._database.run(this._preparedSql||"",n)})):this._database.run(this._preparedSql||"",n),this}get(...e){const{args:t,callback:n}=(0,r.popCallback)(e||[]);return(null==t?void 0:t.length)>0?this.bind(...t,(e=>{e?null==n||n.call(this,e):this._database.get(this._preparedSql||"",n)})):this._database.get(this._preparedSql||"",n),this}all(...e){const{args:t,callback:n}=(0,r.popCallback)(e||[]);return(null==t?void 0:t.length)>0?this.bind(...t,(e=>{e?null==n||n.call(this,e):this._database.all(this._preparedSql||"",n)})):this._database.all(this._preparedSql||"",n),this}each(...e){const{args:t,callback:n,complete:s}=(0,r.popCallback)(e);return(null==t?void 0:t.length)>0?this.bind(...t,(e=>{e?null==n||n.call(this,e):this._database.each(this._preparedSql||"",n,s)})):this._database.each(this._preparedSql||"",n,s),this}}},906:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.SQLiteCloudArrayType=t.SQLiteCloudError=t.DEFAULT_PORT=t.DEFAULT_TIMEOUT=void 0,t.DEFAULT_TIMEOUT=3e5,t.DEFAULT_PORT=9960;class n extends Error{constructor(e,t){super(e),this.name="SQLiteCloudError",t&&Object.assign(this,t)}}var r;t.SQLiteCloudError=n,(r=t.SQLiteCloudArrayType||(t.SQLiteCloudArrayType={}))[r.ARRAY_TYPE_SQLITE_EXEC=10]="ARRAY_TYPE_SQLITE_EXEC",r[r.ARRAY_TYPE_DB_STATUS=11]="ARRAY_TYPE_DB_STATUS",r[r.ARRAY_TYPE_METADATA=12]="ARRAY_TYPE_METADATA",r[r.ARRAY_TYPE_VM_STEP=20]="ARRAY_TYPE_VM_STEP",r[r.ARRAY_TYPE_VM_COMPILE=21]="ARRAY_TYPE_VM_COMPILE",r[r.ARRAY_TYPE_VM_STEP_ONE=22]="ARRAY_TYPE_VM_STEP_ONE",r[r.ARRAY_TYPE_VM_SQL=23]="ARRAY_TYPE_VM_SQL",r[r.ARRAY_TYPE_VM_STATUS=24]="ARRAY_TYPE_VM_STATUS",r[r.ARRAY_TYPE_VM_LIST=25]="ARRAY_TYPE_VM_LIST",r[r.ARRAY_TYPE_BACKUP_INIT=40]="ARRAY_TYPE_BACKUP_INIT",r[r.ARRAY_TYPE_BACKUP_STEP=41]="ARRAY_TYPE_BACKUP_STEP",r[r.ARRAY_TYPE_BACKUP_END=42]="ARRAY_TYPE_BACKUP_END",r[r.ARRAY_TYPE_SQLITE_STATUS=50]="ARRAY_TYPE_SQLITE_STATUS"},73:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.parseBoolean=t.parseConnectionString=t.validateConfiguration=t.popCallback=t.prepareSql=t.escapeSqlParameter=t.getInitializationCommands=t.anonimizeError=t.anonimizeCommand=t.isNode=t.isBrowser=void 0;const r=n(906);function s(e){return(e=(e=e.replace(/USER \S+/,"USER ******")).replace(/PASSWORD \S+?(?=;)/,"PASSWORD ******")).replace(/HASH \S+?(?=;)/,"HASH ******")}function o(e){if(null==e)return"NULL";if("string"==typeof e)return`'${e=e.replace(/'/g,"''")}'`;if("number"==typeof e)return e.toString();if("boolean"==typeof e)return e?"1":"0";if(Buffer.isBuffer(e))return`X'${e.toString("hex")}'`;if("object"==typeof e){let t=JSON.stringify(e);return t=t.replace(/'/g,"''"),`'${t}'`}throw new r.SQLiteCloudError("Unsupported parameter type: "+typeof e)}function i(e){try{const t=e.replace("sqlitecloud:","https:"),n=new URL(t),r={};n.searchParams.forEach(((e,t)=>{r[t]=e}));const s=Object.assign({username:n.username,password:n.password,host:n.hostname,port:n.port?parseInt(n.port):void 0},r),o=n.pathname.replace("/","");return o&&(s.database=o),s}catch(t){throw new r.SQLiteCloudError(`Invalid connection string: ${e}`)}}function a(e){return"string"==typeof e?"true"===e.toLowerCase()||"1"===e:!!e}t.isBrowser="undefined"!=typeof window&&void 0!==window.document,t.isNode="undefined"!=typeof process&&null!=process.versions&&null!=process.versions.node,t.anonimizeCommand=s,t.anonimizeError=function(e){return(null==e?void 0:e.message)&&(e.message=s(e.message)),e},t.getInitializationCommands=function(e){let t=`AUTH USER ${e.username||""} ${e.passwordHashed?"HASH":"PASSWORD"} ${e.password||""}; `;return e.database&&(e.createDatabase&&!e.dbMemory&&(t+=`CREATE DATABASE ${e.database} IF NOT EXISTS; `),t+=`USE DATABASE ${e.database}; `),e.compression&&(t+="SET CLIENT KEY COMPRESSION TO 1; "),e.nonlinearizable&&(t+="SET CLIENT KEY NONLINEARIZABLE TO 1; "),e.noBlob&&(t+="SET CLIENT KEY NOBLOB TO 1; "),e.maxData&&(t+=`SET CLIENT KEY MAXDATA TO ${e.maxData}; `),e.maxRows&&(t+=`SET CLIENT KEY MAXROWS TO ${e.maxRows}; `),e.maxRowset&&(t+=`SET CLIENT KEY MAXROWSET TO ${e.maxRowset}; `),t},t.escapeSqlParameter=o,t.prepareSql=function(e,...t){1===(null==t?void 0:t.length)&&Array.isArray(t[0])&&(t=t[0]);let n=1,s=e.replace(/\?(\d+)?/g,((e,s)=>{const i=s?parseInt(s):n;let a;if(n++,!t[0]||"object"!=typeof t[0]||t[0]instanceof Buffer||(a=t[0][i]),!a){if(i>t.length)throw new r.SQLiteCloudError("Not enough parameters");a=t[i-1]}return null!=a?o(a):"NULL"}));if(1===(null==t?void 0:t.length)&&t[0]&&"object"==typeof t[0]){const e=t[0];for(const[t,n]of Object.entries(e)){const e=t.charAt(0);if("$"==e||":"==e||"@"==e){const e=o(n);s=s.replace(new RegExp(`\\${t}`,"g"),e)}}}return s},t.popCallback=function(e){const t=e;return e&&e.length>0&&"function"==typeof e[e.length-1]?e.length>1&&"function"==typeof e[e.length-2]?{args:t.slice(0,-2),callback:e[e.length-2],complete:e[e.length-1]}:{args:t.slice(0,-1),callback:e[e.length-1]}:{args:t}},t.validateConfiguration=function(e){if(console.assert(e,"SQLiteCloudConnection.validateConfiguration - missing config"),e.connectionString&&(e=Object.assign(Object.assign(Object.assign({},e),i(e.connectionString)),{connectionString:e.connectionString})),e.port||(e.port=r.DEFAULT_PORT),e.timeout=e.timeout&&e.timeout>0?e.timeout:r.DEFAULT_TIMEOUT,e.clientId||(e.clientId="SQLiteCloud"),e.verbose=a(e.verbose),e.noBlob=a(e.noBlob),e.compression=a(e.compression),e.createDatabase=a(e.createDatabase),e.nonlinearizable=a(e.nonlinearizable),e.insecure=a(e.insecure),!e.username||!e.password||!e.host)throw console.error("SQLiteCloudConnection.validateConfiguration - missing arguments",e),new r.SQLiteCloudError("The user, password and host arguments must be specified.",{errorCode:"ERR_MISSING_ARGS"});return e.connectionString||(e.connectionString=`sqlitecloud://${e.username}:${e.password}@${e.host}:${e.port}/${e.database}`),e},t.parseConnectionString=i,t.parseBoolean=a},227:(e,t,n)=>{t.formatArgs=function(t){if(t[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+t[0]+(this.useColors?"%c ":" ")+"+"+e.exports.humanize(this.diff),!this.useColors)return;const n="color: "+this.color;t.splice(1,0,n,"color: inherit");let r=0,s=0;t[0].replace(/%[a-zA-Z%]/g,(e=>{"%%"!==e&&(r++,"%c"===e&&(s=r))})),t.splice(s,0,n)},t.save=function(e){try{e?t.storage.setItem("debug",e):t.storage.removeItem("debug")}catch(e){}},t.load=function(){let e;try{e=t.storage.getItem("debug")}catch(e){}return!e&&"undefined"!=typeof process&&"env"in process&&(e=process.env.DEBUG),e},t.useColors=function(){return!("undefined"==typeof window||!window.process||"renderer"!==window.process.type&&!window.process.__nwjs)||("undefined"==typeof navigator||!navigator.userAgent||!navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/))&&("undefined"!=typeof document&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||"undefined"!=typeof window&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)&&parseInt(RegExp.$1,10)>=31||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/))},t.storage=function(){try{return localStorage}catch(e){}}(),t.destroy=(()=>{let e=!1;return()=>{e||(e=!0,console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."))}})(),t.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"],t.log=console.debug||console.log||(()=>{}),e.exports=n(447)(t);const{formatters:r}=e.exports;r.j=function(e){try{return JSON.stringify(e)}catch(e){return"[UnexpectedJSONParseError]: "+e.message}}},447:(e,t,n)=>{e.exports=function(e){function t(e){let n,s,o,i=null;function a(...e){if(!a.enabled)return;const r=a,s=Number(new Date),o=s-(n||s);r.diff=o,r.prev=n,r.curr=s,n=s,e[0]=t.coerce(e[0]),"string"!=typeof e[0]&&e.unshift("%O");let i=0;e[0]=e[0].replace(/%([a-zA-Z%])/g,((n,s)=>{if("%%"===n)return"%";i++;const o=t.formatters[s];if("function"==typeof o){const t=e[i];n=o.call(r,t),e.splice(i,1),i--}return n})),t.formatArgs.call(r,e),(r.log||t.log).apply(r,e)}return a.namespace=e,a.useColors=t.useColors(),a.color=t.selectColor(e),a.extend=r,a.destroy=t.destroy,Object.defineProperty(a,"enabled",{enumerable:!0,configurable:!1,get:()=>null!==i?i:(s!==t.namespaces&&(s=t.namespaces,o=t.enabled(e)),o),set:e=>{i=e}}),"function"==typeof t.init&&t.init(a),a}function r(e,n){const r=t(this.namespace+(void 0===n?":":n)+e);return r.log=this.log,r}function s(e){return e.toString().substring(2,e.toString().length-2).replace(/\.\*\?$/,"*")}return t.debug=t,t.default=t,t.coerce=function(e){return e instanceof Error?e.stack||e.message:e},t.disable=function(){const e=[...t.names.map(s),...t.skips.map(s).map((e=>"-"+e))].join(",");return t.enable(""),e},t.enable=function(e){let n;t.save(e),t.namespaces=e,t.names=[],t.skips=[];const r=("string"==typeof e?e:"").split(/[\s,]+/),s=r.length;for(n=0;n{t[n]=e[n]})),t.names=[],t.skips=[],t.formatters={},t.selectColor=function(e){let n=0;for(let t=0;t{"use strict";var t=Object.prototype.hasOwnProperty,n="~";function r(){}function s(e,t,n){this.fn=e,this.context=t,this.once=n||!1}function o(e,t,r,o,i){if("function"!=typeof r)throw new TypeError("The listener must be a function");var a=new s(r,o||e,i),c=n?n+t:t;return e._events[c]?e._events[c].fn?e._events[c]=[e._events[c],a]:e._events[c].push(a):(e._events[c]=a,e._eventsCount++),e}function i(e,t){0==--e._eventsCount?e._events=new r:delete e._events[t]}function a(){this._events=new r,this._eventsCount=0}Object.create&&(r.prototype=Object.create(null),(new r).__proto__||(n=!1)),a.prototype.eventNames=function(){var e,r,s=[];if(0===this._eventsCount)return s;for(r in e=this._events)t.call(e,r)&&s.push(n?r.slice(1):r);return Object.getOwnPropertySymbols?s.concat(Object.getOwnPropertySymbols(e)):s},a.prototype.listeners=function(e){var t=n?n+e:e,r=this._events[t];if(!r)return[];if(r.fn)return[r.fn];for(var s=0,o=r.length,i=new Array(o);s{var r=n(887),s=n(325),o=65536,i=h(5<<20),a=function(){try{return new Uint32Array(o)}catch(n){for(var e=new Array(o),t=0;t>4&7;if(void 0===u[i])throw new Error("invalid block size "+i);var a=u[i];if(o)return s.readU64(e,t);t++;for(var h=0;;){var d=s.readU32(e,t);if(t+=4,h+=d&l?d&=2147483647:a,0===d)return h;r&&(t+=4),t+=d}},t.makeBuffer=h,t.decompressBlock=function(e,t,n,r,s){var o,i,a,c,l;for(a=n+r;n>4;if(h>0){if(15===h)for(;h+=e[n],255===e[n++];);for(c=n+h;n=a)break;if(o=15&u,i=e[n++]|e[n++]<<8,15===o)for(;o+=e[n],255===e[n++];);for(c=(l=s-i)+(o+=4);l=13)for(var p=67;n+4>>0;if(i=o[g=(g>>16^g)>>>0&65535]-1,o[g]=n+1,i<0||n-i>>>16>0||s.readU32(e,i)!==m)n+=p++>>6;else{for(p=67,u=n-a,l=n-i,i+=4,c=n+=4;n=15){for(t[h++]=240+y,f=u-15;f>=255;f-=255)t[h++]=255;t[h++]=f}else t[h++]=(u<<4)+y;for(var b=0;b>8,c>=15){for(f=c-15;f>=255;f-=255)t[h++]=255;t[h++]=f}a=n}}if(0===a)return 0;if((u=d-a)>=15){for(t[h++]=240,f=u-15;f>=255;f-=255)t[h++]=255;t[h++]=f}else t[h++]=u<<4;for(n=a;n>4&7;if(void 0===u[f])throw new Error("invalid block size");for(i&&(h+=8),h++;;){var p;if(p=s.readU32(e,h),h+=4,0===p)break;if(r&&(h+=4),0!=(p&l)){p&=2147483647;for(var m=0;m>8,l++;var h=u[7],d=e.length,f=0;for(function(e){for(var t=0;t0;){var p,m=d>h?h:d;if((p=t.compressBlock(e,i,f,m,a))>m||0===p){s.writeU32(n,l,2147483648|m),l+=4;for(var g=f+m;f{t.hashU32=function(e){return-1252372727^(e=(e=(e=374761393+(e=-949894596^(e=2127912214+(e|=0)+(e<<12)|0)^e>>>19)+(e<<5)|0)-744332180^e<<9)-42973499+(e<<3)|0)^e>>>16|0},t.readU64=function(e,t){var n=0;return n|=e[t++]<<0,n|=e[t++]<<8,n|=e[t++]<<16,n|=e[t++]<<24,n|=e[t++]<<32,n|=e[t++]<<40,(n|=e[t++]<<48)|e[t++]<<56},t.readU32=function(e,t){var n=0;return n|=e[t++]<<0,n|=e[t++]<<8,(n|=e[t++]<<16)|e[t++]<<24},t.writeU32=function(e,t,n){e[t++]=n>>0&255,e[t++]=n>>8&255,e[t++]=n>>16&255,e[t++]=n>>24&255},t.imul=function(e,t){var n=65535&e,r=65535&t;return n*r+((e>>>16)*r+n*(t>>>16)<<16)|0}},887:(e,t,n)=>{var r=n(325),s=2654435761,o=2246822519,i=3266489917,a=374761393;function c(e,t){return(e|=0)>>>(32-(t|=0)|0)|e<>>(32-t|0)|e<>>(t|=0)^e|0}function h(e,t,n,s,o){return l(r.imul(t,n)+e,s,o)}function d(e,t,n){return l(e+r.imul(t[n],a),11,s)}function f(e,t,n){return h(e,r.readU32(t,n),i,17,668265263)}function p(e,t,n){return[h(e[0],r.readU32(t,n+0),o,13,s),h(e[1],r.readU32(t,n+4),o,13,s),h(e[2],r.readU32(t,n+8),o,13,s),h(e[3],r.readU32(t,n+12),o,13,s)]}t.hash=function(e,t,n,l){var h,m;if(m=l,l>=16){for(h=[e+s+o,e+o,e,e-s];l>=16;)h=p(h,t,n),n+=16,l-=16;h=c(h[0],1)+c(h[1],7)+c(h[2],12)+c(h[3],18)+m}else h=e+a+l>>>0;for(;l>=4;)h=f(h,t,n),n+=4,l-=4;for(;l>0;)h=d(h,t,n),n++,l--;return(h=u(r.imul(u(r.imul(u(h,15),o),13),i),16))>>>0}},824:e=>{var t=1e3,n=60*t,r=60*n,s=24*r;function o(e,t,n,r){var s=t>=1.5*n;return Math.round(e/n)+" "+r+(s?"s":"")}e.exports=function(e,i){i=i||{};var a,c,l=typeof e;if("string"===l&&e.length>0)return function(e){if(!((e=String(e)).length>100)){var o=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(e);if(o){var i=parseFloat(o[1]);switch((o[2]||"ms").toLowerCase()){case"years":case"year":case"yrs":case"yr":case"y":return 315576e5*i;case"weeks":case"week":case"w":return 6048e5*i;case"days":case"day":case"d":return i*s;case"hours":case"hour":case"hrs":case"hr":case"h":return i*r;case"minutes":case"minute":case"mins":case"min":case"m":return i*n;case"seconds":case"second":case"secs":case"sec":case"s":return i*t;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return i;default:return}}}}(e);if("number"===l&&isFinite(e))return i.long?(a=e,(c=Math.abs(a))>=s?o(a,c,s,"day"):c>=r?o(a,c,r,"hour"):c>=n?o(a,c,n,"minute"):c>=t?o(a,c,t,"second"):a+" ms"):function(e){var o=Math.abs(e);return o>=s?Math.round(e/s)+"d":o>=r?Math.round(e/r)+"h":o>=n?Math.round(e/n)+"m":o>=t?Math.round(e/t)+"s":e+"ms"}(e);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(e))}},761:()=>{},59:()=>{},419:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.hasCORS=void 0;let n=!1;try{n="undefined"!=typeof XMLHttpRequest&&"withCredentials"in new XMLHttpRequest}catch(e){}t.hasCORS=n},754:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.decode=t.encode=void 0,t.encode=function(e){let t="";for(let n in e)e.hasOwnProperty(n)&&(t.length&&(t+="&"),t+=encodeURIComponent(n)+"="+encodeURIComponent(e[n]));return t},t.decode=function(e){let t={},n=e.split("&");for(let e=0,r=n.length;e{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.parse=void 0;const n=/^(?:(?![^:@\/?#]+:[^:@\/]*@)(http|https|ws|wss):\/\/)?((?:(([^:@\/?#]*)(?::([^:@\/?#]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/,r=["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"];t.parse=function(e){if(e.length>2e3)throw"URI too long";const t=e,s=e.indexOf("["),o=e.indexOf("]");-1!=s&&-1!=o&&(e=e.substring(0,s)+e.substring(s,o).replace(/:/g,";")+e.substring(o,e.length));let i=n.exec(e||""),a={},c=14;for(;c--;)a[r[c]]=i[c]||"";return-1!=s&&-1!=o&&(a.source=t,a.host=a.host.substring(1,a.host.length-1).replace(/;/g,":"),a.authority=a.authority.replace("[","").replace("]","").replace(/;/g,":"),a.ipv6uri=!0),a.pathNames=function(e,t){const n=t.replace(/\/{2,9}/g,"/").split("/");return"/"!=t.slice(0,1)&&0!==t.length||n.splice(0,1),"/"==t.slice(-1)&&n.splice(n.length-1,1),n}(0,a.path),a.queryKey=function(e,t){const n={};return t.replace(/(?:^|&)([^&=]*)=?([^&]*)/g,(function(e,t,r){t&&(n[t]=r)})),n}(0,a.query),a}},726:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.yeast=t.decode=t.encode=void 0;const n="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_".split(""),r={};let s,o=0,i=0;function a(e){let t="";do{t=n[e%64]+t,e=Math.floor(e/64)}while(e>0);return t}for(t.encode=a,t.decode=function(e){let t=0;for(i=0;i{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.globalThisShim=void 0,t.globalThisShim="undefined"!=typeof self?self:"undefined"!=typeof window?window:Function("return this")()},679:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.nextTick=t.parse=t.installTimerFunctions=t.transports=t.TransportError=t.Transport=t.protocol=t.Socket=void 0;const r=n(481);Object.defineProperty(t,"Socket",{enumerable:!0,get:function(){return r.Socket}}),t.protocol=r.Socket.protocol;var s=n(870);Object.defineProperty(t,"Transport",{enumerable:!0,get:function(){return s.Transport}}),Object.defineProperty(t,"TransportError",{enumerable:!0,get:function(){return s.TransportError}});var o=n(385);Object.defineProperty(t,"transports",{enumerable:!0,get:function(){return o.transports}});var i=n(622);Object.defineProperty(t,"installTimerFunctions",{enumerable:!0,get:function(){return i.installTimerFunctions}});var a=n(222);Object.defineProperty(t,"parse",{enumerable:!0,get:function(){return a.parse}});var c=n(552);Object.defineProperty(t,"nextTick",{enumerable:!0,get:function(){return c.nextTick}})},481:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Socket=void 0;const s=n(385),o=n(622),i=n(754),a=n(222),c=r(n(227)),l=n(260),u=n(373),h=n(552),d=(0,c.default)("engine.io-client:socket");class f extends l.Emitter{constructor(e,t={}){super(),this.binaryType=h.defaultBinaryType,this.writeBuffer=[],e&&"object"==typeof e&&(t=e,e=null),e?(e=(0,a.parse)(e),t.hostname=e.host,t.secure="https"===e.protocol||"wss"===e.protocol,t.port=e.port,e.query&&(t.query=e.query)):t.host&&(t.hostname=(0,a.parse)(t.host).host),(0,o.installTimerFunctions)(this,t),this.secure=null!=t.secure?t.secure:"undefined"!=typeof location&&"https:"===location.protocol,t.hostname&&!t.port&&(t.port=this.secure?"443":"80"),this.hostname=t.hostname||("undefined"!=typeof location?location.hostname:"localhost"),this.port=t.port||("undefined"!=typeof location&&location.port?location.port:this.secure?"443":"80"),this.transports=t.transports||["polling","websocket","webtransport"],this.writeBuffer=[],this.prevBufferLen=0,this.opts=Object.assign({path:"/engine.io",agent:!1,withCredentials:!1,upgrade:!0,timestampParam:"t",rememberUpgrade:!1,addTrailingSlash:!0,rejectUnauthorized:!0,perMessageDeflate:{threshold:1024},transportOptions:{},closeOnBeforeunload:!1},t),this.opts.path=this.opts.path.replace(/\/$/,"")+(this.opts.addTrailingSlash?"/":""),"string"==typeof this.opts.query&&(this.opts.query=(0,i.decode)(this.opts.query)),this.id=null,this.upgrades=null,this.pingInterval=null,this.pingTimeout=null,this.pingTimeoutTimer=null,"function"==typeof addEventListener&&(this.opts.closeOnBeforeunload&&(this.beforeunloadEventListener=()=>{this.transport&&(this.transport.removeAllListeners(),this.transport.close())},addEventListener("beforeunload",this.beforeunloadEventListener,!1)),"localhost"!==this.hostname&&(this.offlineEventListener=()=>{this.onClose("transport close",{description:"network connection lost"})},addEventListener("offline",this.offlineEventListener,!1))),this.open()}createTransport(e){d('creating transport "%s"',e);const t=Object.assign({},this.opts.query);t.EIO=u.protocol,t.transport=e,this.id&&(t.sid=this.id);const n=Object.assign({},this.opts,{query:t,socket:this,hostname:this.hostname,secure:this.secure,port:this.port},this.opts.transportOptions[e]);return d("options: %j",n),new s.transports[e](n)}open(){let e;if(this.opts.rememberUpgrade&&f.priorWebsocketSuccess&&-1!==this.transports.indexOf("websocket"))e="websocket";else{if(0===this.transports.length)return void this.setTimeoutFn((()=>{this.emitReserved("error","No transports available")}),0);e=this.transports[0]}this.readyState="opening";try{e=this.createTransport(e)}catch(e){return d("error while creating transport: %s",e),this.transports.shift(),void this.open()}e.open(),this.setTransport(e)}setTransport(e){d("setting transport %s",e.name),this.transport&&(d("clearing existing transport %s",this.transport.name),this.transport.removeAllListeners()),this.transport=e,e.on("drain",this.onDrain.bind(this)).on("packet",this.onPacket.bind(this)).on("error",this.onError.bind(this)).on("close",(e=>this.onClose("transport close",e)))}probe(e){d('probing transport "%s"',e);let t=this.createTransport(e),n=!1;f.priorWebsocketSuccess=!1;const r=()=>{n||(d('probe transport "%s" opened',e),t.send([{type:"ping",data:"probe"}]),t.once("packet",(r=>{if(!n)if("pong"===r.type&&"probe"===r.data){if(d('probe transport "%s" pong',e),this.upgrading=!0,this.emitReserved("upgrading",t),!t)return;f.priorWebsocketSuccess="websocket"===t.name,d('pausing current transport "%s"',this.transport.name),this.transport.pause((()=>{n||"closed"!==this.readyState&&(d("changing transport and sending upgrade packet"),l(),this.setTransport(t),t.send([{type:"upgrade"}]),this.emitReserved("upgrade",t),t=null,this.upgrading=!1,this.flush())}))}else{d('probe transport "%s" failed',e);const n=new Error("probe error");n.transport=t.name,this.emitReserved("upgradeError",n)}})))};function s(){n||(n=!0,l(),t.close(),t=null)}const o=n=>{const r=new Error("probe error: "+n);r.transport=t.name,s(),d('probe transport "%s" failed because of error: %s',e,n),this.emitReserved("upgradeError",r)};function i(){o("transport closed")}function a(){o("socket closed")}function c(e){t&&e.name!==t.name&&(d('"%s" works - aborting "%s"',e.name,t.name),s())}const l=()=>{t.removeListener("open",r),t.removeListener("error",o),t.removeListener("close",i),this.off("close",a),this.off("upgrading",c)};t.once("open",r),t.once("error",o),t.once("close",i),this.once("close",a),this.once("upgrading",c),-1!==this.upgrades.indexOf("webtransport")&&"webtransport"!==e?this.setTimeoutFn((()=>{n||t.open()}),200):t.open()}onOpen(){if(d("socket open"),this.readyState="open",f.priorWebsocketSuccess="websocket"===this.transport.name,this.emitReserved("open"),this.flush(),"open"===this.readyState&&this.opts.upgrade){d("starting upgrade probes");let e=0;const t=this.upgrades.length;for(;e{this.onClose("ping timeout")}),this.pingInterval+this.pingTimeout),this.opts.autoUnref&&this.pingTimeoutTimer.unref()}onDrain(){this.writeBuffer.splice(0,this.prevBufferLen),this.prevBufferLen=0,0===this.writeBuffer.length?this.emitReserved("drain"):this.flush()}flush(){if("closed"!==this.readyState&&this.transport.writable&&!this.upgrading&&this.writeBuffer.length){const e=this.getWritablePackets();d("flushing %d packets in socket",e.length),this.transport.send(e),this.prevBufferLen=e.length,this.emitReserved("flush")}}getWritablePackets(){if(!(this.maxPayload&&"polling"===this.transport.name&&this.writeBuffer.length>1))return this.writeBuffer;let e=1;for(let t=0;t0&&e>this.maxPayload)return d("only send %d out of %d packets",t,this.writeBuffer.length),this.writeBuffer.slice(0,t);e+=2}return d("payload size is %d (max: %d)",e,this.maxPayload),this.writeBuffer}write(e,t,n){return this.sendPacket("message",e,t,n),this}send(e,t,n){return this.sendPacket("message",e,t,n),this}sendPacket(e,t,n,r){if("function"==typeof t&&(r=t,t=void 0),"function"==typeof n&&(r=n,n=null),"closing"===this.readyState||"closed"===this.readyState)return;(n=n||{}).compress=!1!==n.compress;const s={type:e,data:t,options:n};this.emitReserved("packetCreate",s),this.writeBuffer.push(s),r&&this.once("flush",r),this.flush()}close(){const e=()=>{this.onClose("forced close"),d("socket closing - telling transport to close"),this.transport.close()},t=()=>{this.off("upgrade",t),this.off("upgradeError",t),e()},n=()=>{this.once("upgrade",t),this.once("upgradeError",t)};return"opening"!==this.readyState&&"open"!==this.readyState||(this.readyState="closing",this.writeBuffer.length?this.once("drain",(()=>{this.upgrading?n():e()})):this.upgrading?n():e()),this}onError(e){d("socket error %j",e),f.priorWebsocketSuccess=!1,this.emitReserved("error",e),this.onClose("transport error",e)}onClose(e,t){"opening"!==this.readyState&&"open"!==this.readyState&&"closing"!==this.readyState||(d('socket close with reason: "%s"',e),this.clearTimeoutFn(this.pingTimeoutTimer),this.transport.removeAllListeners("close"),this.transport.close(),this.transport.removeAllListeners(),"function"==typeof removeEventListener&&(removeEventListener("beforeunload",this.beforeunloadEventListener,!1),removeEventListener("offline",this.offlineEventListener,!1)),this.readyState="closed",this.id=null,this.emitReserved("close",e,t),this.writeBuffer=[],this.prevBufferLen=0)}filterUpgrades(e){const t=[];let n=0;const r=e.length;for(;n{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.transports=void 0;const r=n(484),s=n(308),o=n(20);t.transports={websocket:s.WS,webtransport:o.WT,polling:r.Polling}},484:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Request=t.Polling=void 0;const s=n(870),o=r(n(227)),i=n(726),a=n(373),c=n(666),l=n(260),u=n(622),h=n(242),d=(0,o.default)("engine.io-client:polling");function f(){}const p=null!=new c.XHR({xdomain:!1}).responseType;class m extends s.Transport{constructor(e){if(super(e),this.polling=!1,"undefined"!=typeof location){const t="https:"===location.protocol;let n=location.port;n||(n=t?"443":"80"),this.xd="undefined"!=typeof location&&e.hostname!==location.hostname||n!==e.port}const t=e&&e.forceBase64;this.supportsBinary=p&&!t,this.opts.withCredentials&&(this.cookieJar=(0,c.createCookieJar)())}get name(){return"polling"}doOpen(){this.poll()}pause(e){this.readyState="pausing";const t=()=>{d("paused"),this.readyState="paused",e()};if(this.polling||!this.writable){let e=0;this.polling&&(d("we are currently polling - waiting to pause"),e++,this.once("pollComplete",(function(){d("pre-pause polling complete"),--e||t()}))),this.writable||(d("we are currently writing - waiting to pause"),e++,this.once("drain",(function(){d("pre-pause writing complete"),--e||t()})))}else t()}poll(){d("polling"),this.polling=!0,this.doPoll(),this.emitReserved("poll")}onData(e){d("polling got data %s",e),(0,a.decodePayload)(e,this.socket.binaryType).forEach((e=>{if("opening"===this.readyState&&"open"===e.type&&this.onOpen(),"close"===e.type)return this.onClose({description:"transport closed by the server"}),!1;this.onPacket(e)})),"closed"!==this.readyState&&(this.polling=!1,this.emitReserved("pollComplete"),"open"===this.readyState?this.poll():d('ignoring poll - transport state "%s"',this.readyState))}doClose(){const e=()=>{d("writing close packet"),this.write([{type:"close"}])};"open"===this.readyState?(d("transport open - closing"),e()):(d("transport not open - deferring close"),this.once("open",e))}write(e){this.writable=!1,(0,a.encodePayload)(e,(e=>{this.doWrite(e,(()=>{this.writable=!0,this.emitReserved("drain")}))}))}uri(){const e=this.opts.secure?"https":"http",t=this.query||{};return!1!==this.opts.timestampRequests&&(t[this.opts.timestampParam]=(0,i.yeast)()),this.supportsBinary||t.sid||(t.b64=1),this.createUri(e,t)}request(e={}){return Object.assign(e,{xd:this.xd,cookieJar:this.cookieJar},this.opts),new g(this.uri(),e)}doWrite(e,t){const n=this.request({method:"POST",data:e});n.on("success",t),n.on("error",((e,t)=>{this.onError("xhr post error",e,t)}))}doPoll(){d("xhr poll");const e=this.request();e.on("data",this.onData.bind(this)),e.on("error",((e,t)=>{this.onError("xhr poll error",e,t)})),this.pollXhr=e}}t.Polling=m;class g extends l.Emitter{constructor(e,t){super(),(0,u.installTimerFunctions)(this,t),this.opts=t,this.method=t.method||"GET",this.uri=e,this.data=void 0!==t.data?t.data:null,this.create()}create(){var e;const t=(0,u.pick)(this.opts,"agent","pfx","key","passphrase","cert","ca","ciphers","rejectUnauthorized","autoUnref");t.xdomain=!!this.opts.xd;const n=this.xhr=new c.XHR(t);try{d("xhr open %s: %s",this.method,this.uri),n.open(this.method,this.uri,!0);try{if(this.opts.extraHeaders){n.setDisableHeaderCheck&&n.setDisableHeaderCheck(!0);for(let e in this.opts.extraHeaders)this.opts.extraHeaders.hasOwnProperty(e)&&n.setRequestHeader(e,this.opts.extraHeaders[e])}}catch(e){}if("POST"===this.method)try{n.setRequestHeader("Content-type","text/plain;charset=UTF-8")}catch(e){}try{n.setRequestHeader("Accept","*/*")}catch(e){}null===(e=this.opts.cookieJar)||void 0===e||e.addCookies(n),"withCredentials"in n&&(n.withCredentials=this.opts.withCredentials),this.opts.requestTimeout&&(n.timeout=this.opts.requestTimeout),n.onreadystatechange=()=>{var e;3===n.readyState&&(null===(e=this.opts.cookieJar)||void 0===e||e.parseCookies(n)),4===n.readyState&&(200===n.status||1223===n.status?this.onLoad():this.setTimeoutFn((()=>{this.onError("number"==typeof n.status?n.status:0)}),0))},d("xhr data %s",this.data),n.send(this.data)}catch(e){return void this.setTimeoutFn((()=>{this.onError(e)}),0)}"undefined"!=typeof document&&(this.index=g.requestsCount++,g.requests[this.index]=this)}onError(e){this.emitReserved("error",e,this.xhr),this.cleanup(!0)}cleanup(e){if(void 0!==this.xhr&&null!==this.xhr){if(this.xhr.onreadystatechange=f,e)try{this.xhr.abort()}catch(e){}"undefined"!=typeof document&&delete g.requests[this.index],this.xhr=null}}onLoad(){const e=this.xhr.responseText;null!==e&&(this.emitReserved("data",e),this.emitReserved("success"),this.cleanup())}abort(){this.cleanup()}}if(t.Request=g,g.requestsCount=0,g.requests={},"undefined"!=typeof document)if("function"==typeof attachEvent)attachEvent("onunload",y);else if("function"==typeof addEventListener){const e="onpagehide"in h.globalThisShim?"pagehide":"unload";addEventListener(e,y,!1)}function y(){for(let e in g.requests)g.requests.hasOwnProperty(e)&&g.requests[e].abort()}},552:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.defaultBinaryType=t.usingBrowserWebSocket=t.WebSocket=t.nextTick=void 0;const r=n(242);t.nextTick="function"==typeof Promise&&"function"==typeof Promise.resolve?e=>Promise.resolve().then(e):(e,t)=>t(e,0),t.WebSocket=r.globalThisShim.WebSocket||r.globalThisShim.MozWebSocket,t.usingBrowserWebSocket=!0,t.defaultBinaryType="arraybuffer"},308:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.WS=void 0;const s=n(870),o=n(726),i=n(622),a=n(552),c=r(n(227)),l=n(373),u=(0,c.default)("engine.io-client:websocket"),h="undefined"!=typeof navigator&&"string"==typeof navigator.product&&"reactnative"===navigator.product.toLowerCase();class d extends s.Transport{constructor(e){super(e),this.supportsBinary=!e.forceBase64}get name(){return"websocket"}doOpen(){if(!this.check())return;const e=this.uri(),t=this.opts.protocols,n=h?{}:(0,i.pick)(this.opts,"agent","perMessageDeflate","pfx","key","passphrase","cert","ca","ciphers","rejectUnauthorized","localAddress","protocolVersion","origin","maxPayload","family","checkServerIdentity");this.opts.extraHeaders&&(n.headers=this.opts.extraHeaders);try{this.ws=a.usingBrowserWebSocket&&!h?t?new a.WebSocket(e,t):new a.WebSocket(e):new a.WebSocket(e,t,n)}catch(e){return this.emitReserved("error",e)}this.ws.binaryType=this.socket.binaryType,this.addEventListeners()}addEventListeners(){this.ws.onopen=()=>{this.opts.autoUnref&&this.ws._socket.unref(),this.onOpen()},this.ws.onclose=e=>this.onClose({description:"websocket connection closed",context:e}),this.ws.onmessage=e=>this.onData(e.data),this.ws.onerror=e=>this.onError("websocket error",e)}write(e){this.writable=!1;for(let t=0;t{const t={};!a.usingBrowserWebSocket&&(n.options&&(t.compress=n.options.compress),this.opts.perMessageDeflate)&&("string"==typeof e?Buffer.byteLength(e):e.length){this.writable=!0,this.emitReserved("drain")}),this.setTimeoutFn)}))}}doClose(){void 0!==this.ws&&(this.ws.close(),this.ws=null)}uri(){const e=this.opts.secure?"wss":"ws",t=this.query||{};return this.opts.timestampRequests&&(t[this.opts.timestampParam]=(0,o.yeast)()),this.supportsBinary||(t.b64=1),this.createUri(e,t)}check(){return!!a.WebSocket}}t.WS=d},20:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.WT=void 0;const s=n(870),o=n(552),i=n(373),a=(0,r(n(227)).default)("engine.io-client:webtransport");class c extends s.Transport{get name(){return"webtransport"}doOpen(){"function"==typeof WebTransport&&(this.transport=new WebTransport(this.createUri("https"),this.opts.transportOptions[this.name]),this.transport.closed.then((()=>{a("transport closed gracefully"),this.onClose()})).catch((e=>{a("transport closed due to %s",e),this.onError("webtransport error",e)})),this.transport.ready.then((()=>{this.transport.createBidirectionalStream().then((e=>{const t=(0,i.createPacketDecoderStream)(Number.MAX_SAFE_INTEGER,this.socket.binaryType),n=e.readable.pipeThrough(t).getReader(),r=(0,i.createPacketEncoderStream)();r.readable.pipeTo(e.writable),this.writer=r.writable.getWriter();const s=()=>{n.read().then((({done:e,value:t})=>{e?a("session is closed"):(a("received chunk: %o",t),this.onPacket(t),s())})).catch((e=>{a("an error occurred while reading: %s",e)}))};s();const o={type:"open"};this.query.sid&&(o.data=`{"sid":"${this.query.sid}"}`),this.writer.write(o).then((()=>this.onOpen()))}))})))}write(e){this.writable=!1;for(let t=0;t{r&&(0,o.nextTick)((()=>{this.writable=!0,this.emitReserved("drain")}),this.setTimeoutFn)}))}}doClose(){var e;null===(e=this.transport)||void 0===e||e.close()}}t.WT=c},666:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.createCookieJar=t.XHR=void 0;const r=n(419),s=n(242);t.XHR=function(e){const t=e.xdomain;try{if("undefined"!=typeof XMLHttpRequest&&(!t||r.hasCORS))return new XMLHttpRequest}catch(e){}if(!t)try{return new(s.globalThisShim[["Active"].concat("Object").join("X")])("Microsoft.XMLHTTP")}catch(e){}},t.createCookieJar=function(){}},622:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.byteLength=t.installTimerFunctions=t.pick=void 0;const r=n(242);t.pick=function(e,...t){return t.reduce(((t,n)=>(e.hasOwnProperty(n)&&(t[n]=e[n]),t)),{})};const s=r.globalThisShim.setTimeout,o=r.globalThisShim.clearTimeout;t.installTimerFunctions=function(e,t){t.useNativeTimers?(e.setTimeoutFn=s.bind(r.globalThisShim),e.clearTimeoutFn=o.bind(r.globalThisShim)):(e.setTimeoutFn=r.globalThisShim.setTimeout.bind(r.globalThisShim),e.clearTimeoutFn=r.globalThisShim.clearTimeout.bind(r.globalThisShim))},t.byteLength=function(e){return"string"==typeof e?function(e){let t=0,n=0;for(let r=0,s=e.length;r=57344?n+=3:(r++,n+=4);return n}(e):Math.ceil(1.33*(e.byteLength||e.size))}},87:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.ERROR_PACKET=t.PACKET_TYPES_REVERSE=t.PACKET_TYPES=void 0;const n=Object.create(null);t.PACKET_TYPES=n,n.open="0",n.close="1",n.ping="2",n.pong="3",n.message="4",n.upgrade="5",n.noop="6";const r=Object.create(null);t.PACKET_TYPES_REVERSE=r,Object.keys(n).forEach((e=>{r[n[e]]=e})),t.ERROR_PACKET={type:"error",data:"parser error"}},469:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.decode=t.encode=void 0;const n="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",r="undefined"==typeof Uint8Array?[]:new Uint8Array(256);for(let e=0;e<64;e++)r[n.charCodeAt(e)]=e;t.encode=e=>{let t,r=new Uint8Array(e),s=r.length,o="";for(t=0;t>2],o+=n[(3&r[t])<<4|r[t+1]>>4],o+=n[(15&r[t+1])<<2|r[t+2]>>6],o+=n[63&r[t+2]];return s%3==2?o=o.substring(0,o.length-1)+"=":s%3==1&&(o=o.substring(0,o.length-2)+"=="),o},t.decode=e=>{let t,n,s,o,i,a=.75*e.length,c=e.length,l=0;"="===e[e.length-1]&&(a--,"="===e[e.length-2]&&a--);const u=new ArrayBuffer(a),h=new Uint8Array(u);for(t=0;t>4,h[l++]=(15&s)<<4|o>>2,h[l++]=(3&o)<<6|63&i;return u}},572:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.decodePacket=void 0;const r=n(87),s=n(469),o="function"==typeof ArrayBuffer;t.decodePacket=(e,t)=>{if("string"!=typeof e)return{type:"message",data:a(e,t)};const n=e.charAt(0);return"b"===n?{type:"message",data:i(e.substring(1),t)}:r.PACKET_TYPES_REVERSE[n]?e.length>1?{type:r.PACKET_TYPES_REVERSE[n],data:e.substring(1)}:{type:r.PACKET_TYPES_REVERSE[n]}:r.ERROR_PACKET};const i=(e,t)=>{if(o){const n=(0,s.decode)(e);return a(n,t)}return{base64:!0,data:e}},a=(e,t)=>"blob"===t?e instanceof Blob?e:new Blob([e]):e instanceof ArrayBuffer?e:e.buffer},908:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.encodePacket=t.encodePacketToBinary=void 0;const r=n(87),s="function"==typeof Blob||"undefined"!=typeof Blob&&"[object BlobConstructor]"===Object.prototype.toString.call(Blob),o="function"==typeof ArrayBuffer,i=e=>"function"==typeof ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer instanceof ArrayBuffer,a=({type:e,data:t},n,a)=>s&&t instanceof Blob?n?a(t):c(t,a):o&&(t instanceof ArrayBuffer||i(t))?n?a(t):c(new Blob([t]),a):a(r.PACKET_TYPES[e]+(t||""));t.encodePacket=a;const c=(e,t)=>{const n=new FileReader;return n.onload=function(){const e=n.result.split(",")[1];t("b"+(e||""))},n.readAsDataURL(e)};function l(e){return e instanceof Uint8Array?e:e instanceof ArrayBuffer?new Uint8Array(e):new Uint8Array(e.buffer,e.byteOffset,e.byteLength)}let u;t.encodePacketToBinary=function(e,t){return s&&e.data instanceof Blob?e.data.arrayBuffer().then(l).then(t):o&&(e.data instanceof ArrayBuffer||i(e.data))?t(l(e.data)):void a(e,!1,(e=>{u||(u=new TextEncoder),t(u.encode(e))}))}},373:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.decodePayload=t.decodePacket=t.encodePayload=t.encodePacket=t.protocol=t.createPacketDecoderStream=t.createPacketEncoderStream=void 0;const r=n(908);Object.defineProperty(t,"encodePacket",{enumerable:!0,get:function(){return r.encodePacket}});const s=n(572);Object.defineProperty(t,"decodePacket",{enumerable:!0,get:function(){return s.decodePacket}});const o=n(87),i=String.fromCharCode(30);let a;function c(e){return e.reduce(((e,t)=>e+t.length),0)}function l(e,t){if(e[0].length===t)return e.shift();const n=new Uint8Array(t);let r=0;for(let s=0;s{const n=e.length,s=new Array(n);let o=0;e.forEach(((e,a)=>{(0,r.encodePacket)(e,!1,(e=>{s[a]=e,++o===n&&t(s.join(i))}))}))},t.decodePayload=(e,t)=>{const n=e.split(i),r=[];for(let e=0;e{const r=n.length;let s;if(r<126)s=new Uint8Array(1),new DataView(s.buffer).setUint8(0,r);else if(r<65536){s=new Uint8Array(3);const e=new DataView(s.buffer);e.setUint8(0,126),e.setUint16(1,r)}else{s=new Uint8Array(9);const e=new DataView(s.buffer);e.setUint8(0,127),e.setBigUint64(1,BigInt(r))}e.data&&"string"!=typeof e.data&&(s[0]|=128),t.enqueue(s),t.enqueue(n)}))}})},t.createPacketDecoderStream=function(e,t){a||(a=new TextDecoder);const n=[];let r=0,i=-1,u=!1;return new TransformStream({transform(h,d){for(n.push(h);;){if(0===r){if(c(n)<1)break;const e=l(n,1);u=128==(128&e[0]),i=127&e[0],r=i<126?3:126===i?1:2}else if(1===r){if(c(n)<2)break;const e=l(n,2);i=new DataView(e.buffer,e.byteOffset,e.length).getUint16(0),r=3}else if(2===r){if(c(n)<8)break;const e=l(n,8),t=new DataView(e.buffer,e.byteOffset,e.length),s=t.getUint32(0);if(s>Math.pow(2,21)-1){d.enqueue(o.ERROR_PACKET);break}i=s*Math.pow(2,32)+t.getUint32(4),r=3}else{if(c(n)e){d.enqueue(o.ERROR_PACKET);break}}}})},t.protocol=4},159:(e,t)=>{"use strict";function n(e){e=e||{},this.ms=e.min||100,this.max=e.max||1e4,this.factor=e.factor||2,this.jitter=e.jitter>0&&e.jitter<=1?e.jitter:0,this.attempts=0}Object.defineProperty(t,"__esModule",{value:!0}),t.Backoff=void 0,t.Backoff=n,n.prototype.duration=function(){var e=this.ms*Math.pow(this.factor,this.attempts++);if(this.jitter){var t=Math.random(),n=Math.floor(t*this.jitter*e);e=0==(1&Math.floor(10*t))?e-n:e+n}return 0|Math.min(e,this.max)},n.prototype.reset=function(){this.attempts=0},n.prototype.setMin=function(e){this.ms=e},n.prototype.setMax=function(e){this.max=e},n.prototype.setJitter=function(e){this.jitter=e}},46:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.default=t.connect=t.io=t.Socket=t.Manager=t.protocol=void 0;const s=n(84),o=n(168);Object.defineProperty(t,"Manager",{enumerable:!0,get:function(){return o.Manager}});const i=n(312);Object.defineProperty(t,"Socket",{enumerable:!0,get:function(){return i.Socket}});const a=r(n(227)).default("socket.io-client"),c={};function l(e,t){"object"==typeof e&&(t=e,e=void 0),t=t||{};const n=s.url(e,t.path||"/socket.io"),r=n.source,i=n.id,l=n.path,u=c[i]&&l in c[i].nsps;let h;return t.forceNew||t["force new connection"]||!1===t.multiplex||u?(a("ignoring socket cache for %s",r),h=new o.Manager(r,t)):(c[i]||(a("new io instance for %s",r),c[i]=new o.Manager(r,t)),h=c[i]),n.query&&!t.query&&(t.query=n.queryKey),h.socket(n.path,t)}t.io=l,t.connect=l,t.default=l,Object.assign(l,{Manager:o.Manager,Socket:i.Socket,io:l,connect:l});var u=n(514);Object.defineProperty(t,"protocol",{enumerable:!0,get:function(){return u.protocol}}),e.exports=l},168:function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n),Object.defineProperty(e,r,{enumerable:!0,get:function(){return t[n]}})}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),s=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),o=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return s(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Manager=void 0;const a=n(679),c=n(312),l=o(n(514)),u=n(149),h=n(159),d=n(260),f=i(n(227)).default("socket.io-client:manager");class p extends d.Emitter{constructor(e,t){var n;super(),this.nsps={},this.subs=[],e&&"object"==typeof e&&(t=e,e=void 0),(t=t||{}).path=t.path||"/socket.io",this.opts=t,a.installTimerFunctions(this,t),this.reconnection(!1!==t.reconnection),this.reconnectionAttempts(t.reconnectionAttempts||1/0),this.reconnectionDelay(t.reconnectionDelay||1e3),this.reconnectionDelayMax(t.reconnectionDelayMax||5e3),this.randomizationFactor(null!==(n=t.randomizationFactor)&&void 0!==n?n:.5),this.backoff=new h.Backoff({min:this.reconnectionDelay(),max:this.reconnectionDelayMax(),jitter:this.randomizationFactor()}),this.timeout(null==t.timeout?2e4:t.timeout),this._readyState="closed",this.uri=e;const r=t.parser||l;this.encoder=new r.Encoder,this.decoder=new r.Decoder,this._autoConnect=!1!==t.autoConnect,this._autoConnect&&this.open()}reconnection(e){return arguments.length?(this._reconnection=!!e,this):this._reconnection}reconnectionAttempts(e){return void 0===e?this._reconnectionAttempts:(this._reconnectionAttempts=e,this)}reconnectionDelay(e){var t;return void 0===e?this._reconnectionDelay:(this._reconnectionDelay=e,null===(t=this.backoff)||void 0===t||t.setMin(e),this)}randomizationFactor(e){var t;return void 0===e?this._randomizationFactor:(this._randomizationFactor=e,null===(t=this.backoff)||void 0===t||t.setJitter(e),this)}reconnectionDelayMax(e){var t;return void 0===e?this._reconnectionDelayMax:(this._reconnectionDelayMax=e,null===(t=this.backoff)||void 0===t||t.setMax(e),this)}timeout(e){return arguments.length?(this._timeout=e,this):this._timeout}maybeReconnectOnOpen(){!this._reconnecting&&this._reconnection&&0===this.backoff.attempts&&this.reconnect()}open(e){if(f("readyState %s",this._readyState),~this._readyState.indexOf("open"))return this;f("opening %s",this.uri),this.engine=new a.Socket(this.uri,this.opts);const t=this.engine,n=this;this._readyState="opening",this.skipReconnect=!1;const r=u.on(t,"open",(function(){n.onopen(),e&&e()})),s=t=>{f("error"),this.cleanup(),this._readyState="closed",this.emitReserved("error",t),e?e(t):this.maybeReconnectOnOpen()},o=u.on(t,"error",s);if(!1!==this._timeout){const e=this._timeout;f("connect attempt will timeout after %d",e);const n=this.setTimeoutFn((()=>{f("connect attempt timed out after %d",e),r(),s(new Error("timeout")),t.close()}),e);this.opts.autoUnref&&n.unref(),this.subs.push((()=>{this.clearTimeoutFn(n)}))}return this.subs.push(r),this.subs.push(o),this}connect(e){return this.open(e)}onopen(){f("open"),this.cleanup(),this._readyState="open",this.emitReserved("open");const e=this.engine;this.subs.push(u.on(e,"ping",this.onping.bind(this)),u.on(e,"data",this.ondata.bind(this)),u.on(e,"error",this.onerror.bind(this)),u.on(e,"close",this.onclose.bind(this)),u.on(this.decoder,"decoded",this.ondecoded.bind(this)))}onping(){this.emitReserved("ping")}ondata(e){try{this.decoder.add(e)}catch(e){this.onclose("parse error",e)}}ondecoded(e){a.nextTick((()=>{this.emitReserved("packet",e)}),this.setTimeoutFn)}onerror(e){f("error",e),this.emitReserved("error",e)}socket(e,t){let n=this.nsps[e];return n?this._autoConnect&&!n.active&&n.connect():(n=new c.Socket(this,e,t),this.nsps[e]=n),n}_destroy(e){const t=Object.keys(this.nsps);for(const e of t)if(this.nsps[e].active)return void f("socket %s is still active, skipping close",e);this._close()}_packet(e){f("writing packet %j",e);const t=this.encoder.encode(e);for(let n=0;ne())),this.subs.length=0,this.decoder.destroy()}_close(){f("disconnect"),this.skipReconnect=!0,this._reconnecting=!1,this.onclose("forced close"),this.engine&&this.engine.close()}disconnect(){return this._close()}onclose(e,t){f("closed due to %s",e),this.cleanup(),this.backoff.reset(),this._readyState="closed",this.emitReserved("close",e,t),this._reconnection&&!this.skipReconnect&&this.reconnect()}reconnect(){if(this._reconnecting||this.skipReconnect)return this;const e=this;if(this.backoff.attempts>=this._reconnectionAttempts)f("reconnect failed"),this.backoff.reset(),this.emitReserved("reconnect_failed"),this._reconnecting=!1;else{const t=this.backoff.duration();f("will wait %dms before reconnect attempt",t),this._reconnecting=!0;const n=this.setTimeoutFn((()=>{e.skipReconnect||(f("attempting reconnect"),this.emitReserved("reconnect_attempt",e.backoff.attempts),e.skipReconnect||e.open((t=>{t?(f("reconnect attempt error"),e._reconnecting=!1,e.reconnect(),this.emitReserved("reconnect_error",t)):(f("reconnect success"),e.onreconnect())})))}),t);this.opts.autoUnref&&n.unref(),this.subs.push((()=>{this.clearTimeoutFn(n)}))}}onreconnect(){const e=this.backoff.attempts;this._reconnecting=!1,this.backoff.reset(),this.emitReserved("reconnect",e)}}t.Manager=p},149:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.on=void 0,t.on=function(e,t,n){return e.on(t,n),function(){e.off(t,n)}}},312:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Socket=void 0;const s=n(514),o=n(149),i=n(260),a=r(n(227)).default("socket.io-client:socket"),c=Object.freeze({connect:1,connect_error:1,disconnect:1,disconnecting:1,newListener:1,removeListener:1});class l extends i.Emitter{constructor(e,t,n){super(),this.connected=!1,this.recovered=!1,this.receiveBuffer=[],this.sendBuffer=[],this._queue=[],this._queueSeq=0,this.ids=0,this.acks={},this.flags={},this.io=e,this.nsp=t,n&&n.auth&&(this.auth=n.auth),this._opts=Object.assign({},n),this.io._autoConnect&&this.open()}get disconnected(){return!this.connected}subEvents(){if(this.subs)return;const e=this.io;this.subs=[o.on(e,"open",this.onopen.bind(this)),o.on(e,"packet",this.onpacket.bind(this)),o.on(e,"error",this.onerror.bind(this)),o.on(e,"close",this.onclose.bind(this))]}get active(){return!!this.subs}connect(){return this.connected||(this.subEvents(),this.io._reconnecting||this.io.open(),"open"===this.io._readyState&&this.onopen()),this}open(){return this.connect()}send(...e){return e.unshift("message"),this.emit.apply(this,e),this}emit(e,...t){if(c.hasOwnProperty(e))throw new Error('"'+e.toString()+'" is a reserved event name');if(t.unshift(e),this._opts.retries&&!this.flags.fromQueue&&!this.flags.volatile)return this._addToQueue(t),this;const n={type:s.PacketType.EVENT,data:t,options:{}};if(n.options.compress=!1!==this.flags.compress,"function"==typeof t[t.length-1]){const e=this.ids++;a("emitting packet with ack id %d",e);const r=t.pop();this._registerAckCallback(e,r),n.id=e}const r=this.io.engine&&this.io.engine.transport&&this.io.engine.transport.writable;return!this.flags.volatile||r&&this.connected?this.connected?(this.notifyOutgoingListeners(n),this.packet(n)):this.sendBuffer.push(n):a("discard packet as the transport is not currently writable"),this.flags={},this}_registerAckCallback(e,t){var n;const r=null!==(n=this.flags.timeout)&&void 0!==n?n:this._opts.ackTimeout;if(void 0===r)return void(this.acks[e]=t);const s=this.io.setTimeoutFn((()=>{delete this.acks[e];for(let t=0;t{this.io.clearTimeoutFn(s),t.apply(this,[null,...e])}}emitWithAck(e,...t){const n=void 0!==this.flags.timeout||void 0!==this._opts.ackTimeout;return new Promise(((r,s)=>{t.push(((e,t)=>n?e?s(e):r(t):r(e))),this.emit(e,...t)}))}_addToQueue(e){let t;"function"==typeof e[e.length-1]&&(t=e.pop());const n={id:this._queueSeq++,tryCount:0,pending:!1,args:e,flags:Object.assign({fromQueue:!0},this.flags)};e.push(((e,...r)=>{if(n===this._queue[0])return null!==e?n.tryCount>this._opts.retries&&(a("packet [%d] is discarded after %d tries",n.id,n.tryCount),this._queue.shift(),t&&t(e)):(a("packet [%d] was successfully sent",n.id),this._queue.shift(),t&&t(null,...r)),n.pending=!1,this._drainQueue()})),this._queue.push(n),this._drainQueue()}_drainQueue(e=!1){if(a("draining queue"),!this.connected||0===this._queue.length)return;const t=this._queue[0];!t.pending||e?(t.pending=!0,t.tryCount++,a("sending packet [%d] (try n°%d)",t.id,t.tryCount),this.flags=t.flags,this.emit.apply(this,t.args)):a("packet [%d] has already been sent and is waiting for an ack",t.id)}packet(e){e.nsp=this.nsp,this.io._packet(e)}onopen(){a("transport is open - connecting"),"function"==typeof this.auth?this.auth((e=>{this._sendConnectPacket(e)})):this._sendConnectPacket(this.auth)}_sendConnectPacket(e){this.packet({type:s.PacketType.CONNECT,data:this._pid?Object.assign({pid:this._pid,offset:this._lastOffset},e):e})}onerror(e){this.connected||this.emitReserved("connect_error",e)}onclose(e,t){a("close (%s)",e),this.connected=!1,delete this.id,this.emitReserved("disconnect",e,t)}onpacket(e){if(e.nsp===this.nsp)switch(e.type){case s.PacketType.CONNECT:e.data&&e.data.sid?this.onconnect(e.data.sid,e.data.pid):this.emitReserved("connect_error",new Error("It seems you are trying to reach a Socket.IO server in v2.x with a v3.x client, but they are not compatible (more information here: https://socket.io/docs/v3/migrating-from-2-x-to-3-0/)"));break;case s.PacketType.EVENT:case s.PacketType.BINARY_EVENT:this.onevent(e);break;case s.PacketType.ACK:case s.PacketType.BINARY_ACK:this.onack(e);break;case s.PacketType.DISCONNECT:this.ondisconnect();break;case s.PacketType.CONNECT_ERROR:this.destroy();const t=new Error(e.data.message);t.data=e.data.data,this.emitReserved("connect_error",t)}}onevent(e){const t=e.data||[];a("emitting event %j",t),null!=e.id&&(a("attaching ack callback to event"),t.push(this.ack(e.id))),this.connected?this.emitEvent(t):this.receiveBuffer.push(Object.freeze(t))}emitEvent(e){if(this._anyListeners&&this._anyListeners.length){const t=this._anyListeners.slice();for(const n of t)n.apply(this,e)}super.emit.apply(this,e),this._pid&&e.length&&"string"==typeof e[e.length-1]&&(this._lastOffset=e[e.length-1])}ack(e){const t=this;let n=!1;return function(...r){n||(n=!0,a("sending ack %j",r),t.packet({type:s.PacketType.ACK,id:e,data:r}))}}onack(e){const t=this.acks[e.id];"function"==typeof t?(a("calling ack %s with %j",e.id,e.data),t.apply(this,e.data),delete this.acks[e.id]):a("bad ack %s",e.id)}onconnect(e,t){a("socket connected with id %s",e),this.id=e,this.recovered=t&&this._pid===t,this._pid=t,this.connected=!0,this.emitBuffered(),this.emitReserved("connect"),this._drainQueue(!0)}emitBuffered(){this.receiveBuffer.forEach((e=>this.emitEvent(e))),this.receiveBuffer=[],this.sendBuffer.forEach((e=>{this.notifyOutgoingListeners(e),this.packet(e)})),this.sendBuffer=[]}ondisconnect(){a("server disconnect (%s)",this.nsp),this.destroy(),this.onclose("io server disconnect")}destroy(){this.subs&&(this.subs.forEach((e=>e())),this.subs=void 0),this.io._destroy(this)}disconnect(){return this.connected&&(a("performing disconnect (%s)",this.nsp),this.packet({type:s.PacketType.DISCONNECT})),this.destroy(),this.connected&&this.onclose("io client disconnect"),this}close(){return this.disconnect()}compress(e){return this.flags.compress=e,this}get volatile(){return this.flags.volatile=!0,this}timeout(e){return this.flags.timeout=e,this}onAny(e){return this._anyListeners=this._anyListeners||[],this._anyListeners.push(e),this}prependAny(e){return this._anyListeners=this._anyListeners||[],this._anyListeners.unshift(e),this}offAny(e){if(!this._anyListeners)return this;if(e){const t=this._anyListeners;for(let n=0;n{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.reconstructPacket=t.deconstructPacket=void 0;const r=n(665);function s(e,t){if(!e)return e;if((0,r.isBinary)(e)){const n={_placeholder:!0,num:t.length};return t.push(e),n}if(Array.isArray(e)){const n=new Array(e.length);for(let r=0;r=0&&e.num{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Decoder=t.Encoder=t.PacketType=t.protocol=void 0;const r=n(260),s=n(269),o=n(665),i=(0,n(227).default)("socket.io-parser"),a=["connect","connect_error","disconnect","disconnecting","newListener","removeListener"];var c;function l(e){return"[object Object]"===Object.prototype.toString.call(e)}t.protocol=5,function(e){e[e.CONNECT=0]="CONNECT",e[e.DISCONNECT=1]="DISCONNECT",e[e.EVENT=2]="EVENT",e[e.ACK=3]="ACK",e[e.CONNECT_ERROR=4]="CONNECT_ERROR",e[e.BINARY_EVENT=5]="BINARY_EVENT",e[e.BINARY_ACK=6]="BINARY_ACK"}(c=t.PacketType||(t.PacketType={})),t.Encoder=class{constructor(e){this.replacer=e}encode(e){return i("encoding packet %j",e),e.type!==c.EVENT&&e.type!==c.ACK||!(0,o.hasBinary)(e)?[this.encodeAsString(e)]:this.encodeAsBinary({type:e.type===c.EVENT?c.BINARY_EVENT:c.BINARY_ACK,nsp:e.nsp,data:e.data,id:e.id})}encodeAsString(e){let t=""+e.type;return e.type!==c.BINARY_EVENT&&e.type!==c.BINARY_ACK||(t+=e.attachments+"-"),e.nsp&&"/"!==e.nsp&&(t+=e.nsp+","),null!=e.id&&(t+=e.id),null!=e.data&&(t+=JSON.stringify(e.data,this.replacer)),i("encoded %j as %s",e,t),t}encodeAsBinary(e){const t=(0,s.deconstructPacket)(e),n=this.encodeAsString(t.packet),r=t.buffers;return r.unshift(n),r}};class u extends r.Emitter{constructor(e){super(),this.reviver=e}add(e){let t;if("string"==typeof e){if(this.reconstructor)throw new Error("got plaintext data when reconstructing a packet");t=this.decodeString(e);const n=t.type===c.BINARY_EVENT;n||t.type===c.BINARY_ACK?(t.type=n?c.EVENT:c.ACK,this.reconstructor=new h(t),0===t.attachments&&super.emitReserved("decoded",t)):super.emitReserved("decoded",t)}else{if(!(0,o.isBinary)(e)&&!e.base64)throw new Error("Unknown type: "+e);if(!this.reconstructor)throw new Error("got binary data when not reconstructing a packet");t=this.reconstructor.takeBinaryData(e),t&&(this.reconstructor=null,super.emitReserved("decoded",t))}}decodeString(e){let t=0;const n={type:Number(e.charAt(0))};if(void 0===c[n.type])throw new Error("unknown packet type "+n.type);if(n.type===c.BINARY_EVENT||n.type===c.BINARY_ACK){const r=t+1;for(;"-"!==e.charAt(++t)&&t!=e.length;);const s=e.substring(r,t);if(s!=Number(s)||"-"!==e.charAt(t))throw new Error("Illegal attachments");n.attachments=Number(s)}if("/"===e.charAt(t+1)){const r=t+1;for(;++t&&","!==e.charAt(t)&&t!==e.length;);n.nsp=e.substring(r,t)}else n.nsp="/";const r=e.charAt(t+1);if(""!==r&&Number(r)==r){const r=t+1;for(;++t;){const n=e.charAt(t);if(null==n||Number(n)!=n){--t;break}if(t===e.length)break}n.id=Number(e.substring(r,t+1))}if(e.charAt(++t)){const r=this.tryParse(e.substr(t));if(!u.isPayloadValid(n.type,r))throw new Error("invalid payload");n.data=r}return i("decoded %s as %j",e,n),n}tryParse(e){try{return JSON.parse(e,this.reviver)}catch(e){return!1}}static isPayloadValid(e,t){switch(e){case c.CONNECT:return l(t);case c.DISCONNECT:return void 0===t;case c.CONNECT_ERROR:return"string"==typeof t||l(t);case c.EVENT:case c.BINARY_EVENT:return Array.isArray(t)&&("number"==typeof t[0]||"string"==typeof t[0]&&-1===a.indexOf(t[0]));case c.ACK:case c.BINARY_ACK:return Array.isArray(t)}}destroy(){this.reconstructor&&(this.reconstructor.finishedReconstruction(),this.reconstructor=null)}}t.Decoder=u;class h{constructor(e){this.packet=e,this.buffers=[],this.reconPack=e}takeBinaryData(e){if(this.buffers.push(e),this.buffers.length===this.reconPack.attachments){const e=(0,s.reconstructPacket)(this.reconPack,this.buffers);return this.finishedReconstruction(),e}return null}finishedReconstruction(){this.reconPack=null,this.buffers=[]}}},665:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.hasBinary=t.isBinary=void 0;const n="function"==typeof ArrayBuffer,r=Object.prototype.toString,s="function"==typeof Blob||"undefined"!=typeof Blob&&"[object BlobConstructor]"===r.call(Blob),o="function"==typeof File||"undefined"!=typeof File&&"[object FileConstructor]"===r.call(File);function i(e){return n&&(e instanceof ArrayBuffer||(e=>"function"==typeof ArrayBuffer.isView?ArrayBuffer.isView(e):e.buffer instanceof ArrayBuffer)(e))||s&&e instanceof Blob||o&&e instanceof File}t.isBinary=i,t.hasBinary=function e(t,n){if(!t||"object"!=typeof t)return!1;if(Array.isArray(t)){for(let n=0,r=t.length;n{"use strict";function r(e){if(e)return function(e){for(var t in r.prototype)e[t]=r.prototype[t];return e}(e)}n.r(t),n.d(t,{Emitter:()=>r}),r.prototype.on=r.prototype.addEventListener=function(e,t){return this._callbacks=this._callbacks||{},(this._callbacks["$"+e]=this._callbacks["$"+e]||[]).push(t),this},r.prototype.once=function(e,t){function n(){this.off(e,n),t.apply(this,arguments)}return n.fn=t,this.on(e,n),this},r.prototype.off=r.prototype.removeListener=r.prototype.removeAllListeners=r.prototype.removeEventListener=function(e,t){if(this._callbacks=this._callbacks||{},0==arguments.length)return this._callbacks={},this;var n,r=this._callbacks["$"+e];if(!r)return this;if(1==arguments.length)return delete this._callbacks["$"+e],this;for(var s=0;s{for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var r={};return(()=>{"use strict";var e=r;Object.defineProperty(e,"__esModule",{value:!0}),e.validateConfiguration=e.parseConnectionString=e.prepareSql=e.escapeSqlParameter=e.SQLiteCloudRow=e.SQLiteCloudRowset=e.SQLiteCloudError=e.SQLiteCloudConnection=e.Statement=e.Database=void 0;var t=n(751);Object.defineProperty(e,"Database",{enumerable:!0,get:function(){return t.Database}});var s=n(880);Object.defineProperty(e,"Statement",{enumerable:!0,get:function(){return s.Statement}});var o=n(480);Object.defineProperty(e,"SQLiteCloudConnection",{enumerable:!0,get:function(){return o.SQLiteCloudConnection}});var i=n(906);Object.defineProperty(e,"SQLiteCloudError",{enumerable:!0,get:function(){return i.SQLiteCloudError}});var a=n(825);Object.defineProperty(e,"SQLiteCloudRowset",{enumerable:!0,get:function(){return a.SQLiteCloudRowset}}),Object.defineProperty(e,"SQLiteCloudRow",{enumerable:!0,get:function(){return a.SQLiteCloudRow}});var c=n(73);Object.defineProperty(e,"escapeSqlParameter",{enumerable:!0,get:function(){return c.escapeSqlParameter}}),Object.defineProperty(e,"prepareSql",{enumerable:!0,get:function(){return c.prepareSql}}),Object.defineProperty(e,"parseConnectionString",{enumerable:!0,get:function(){return c.parseConnectionString}}),Object.defineProperty(e,"validateConfiguration",{enumerable:!0,get:function(){return c.validateConfiguration}})})(),r})())); \ No newline at end of file +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.sqlitecloud=t():e.sqlitecloud=t()}(this,(()=>(()=>{var e={593:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.SQLiteCloudTlsConnection=void 0;const s=n(906),o=n(480),i=n(1),a=n(73),c=n(1),l=r(n(761)),u=r(n(59));class h extends o.SQLiteCloudConnection{get connected(){return!!this.socket}connectTransport(e,t){console.assert(!this.connected,"Connection already established");const n=e=>{this.socket&&(this.socket.removeAllListeners("data"),this.socket.removeAllListeners("error"),this.socket.removeAllListeners("close"),e&&this.close()),null==t||t.call(this,e)};this.config=e;const r=(0,a.getInitializationCommands)(e);if(e.insecure){const s={host:e.host,port:e.port};this.socket=l.default.connect(s,(()=>{console.warn(`TlsConnection.connectTransport - connected to ${e.host}:${e.port} using insecure protocol`),console.assert(this.socket,"Connection already closed"),this.transportCommands(r,(e=>{e&&this.socket&&this.close(),t&&(null==t||t.call(this,e),t=void 0),n(e)}))}))}else this.socket=u.default.connect(this.config.port,this.config.host,this.config.tlsOptions,(()=>{const e=this.socket;if(null==e?void 0:e.authorized){if(null===this.socket)return void n(new s.SQLiteCloudError("Connection was closed before it was done opening"));console.assert(this.socket,"Connection already closed"),this.transportCommands(r,(e=>{e&&this.socket&&this.close(),t&&(null==t||t.call(this,e),t=void 0),n(e)}))}else{const t=(0,a.anonimizeError)(e.authorizationError);console.error("Connection was not authorized",t),this.close(),n(new s.SQLiteCloudError("Connection was not authorized",{cause:t}))}}));return this.socket.on("close",(()=>{this.socket=null,n(new s.SQLiteCloudError("Connection was closed"))})),this.socket.once("error",(e=>{console.error("Connection error",e),n(new s.SQLiteCloudError("Connection error",{cause:e}))})),this}transportCommands(e,t){var n,r,o;if(!this.socket)return null==t||t.call(this,new s.SQLiteCloudError("Connection not established",{errorCode:"ERR_CONNECTION_NOT_ESTABLISHED"})),this;e=(0,i.formatCommand)(e);let l=Buffer.alloc(0);const u=[];let h;const d=(e,n)=>{clearTimeout(h),this.socket&&(this.socket.removeAllListeners("data"),this.socket.removeAllListeners("error"),this.socket.removeAllListeners("close")),t&&(null==t||t.call(this,e,n),t=void 0)},f=e=>{var t,n;try{let r=0===l.length?e.subarray(0,1).toString():l.subarray(0,1).toString("utf8");if(l=Buffer.concat([l,e]),(0,i.hasCommandLength)(r)){const e=(0,i.parseCommandLength)(l);if(l.length-l.indexOf(" ")-1>=e){if(null===(t=this.config)||void 0===t?void 0:t.verbose){let e=l.toString("utf8");e.length>1e3&&(e=e.substring(0,100)+"..."+e.substring(e.length-40))}if(r===i.CMD_COMPRESSED&&({buffer:l,dataType:r}=(0,i.decompressBuffer)(l)),r!==i.CMD_ROWSET_CHUNK){null===(n=this.socket)||void 0===n||n.off("data",f);const{data:e}=(0,i.popData)(l);d(null,e)}else if((0,i.bufferEndsWith)(l,i.ROWSET_CHUNKS_END)){u.push(l);const e=(0,c.parseRowsetChunks)(u);null==d||d.call(this,null,e)}else u.push(l),l=Buffer.alloc(0)}}else if(" "==l.subarray(l.length-1,l.length).toString("utf8")){const{data:e}=(0,i.popData)(l);d(null,e)}}catch(e){console.assert(e instanceof Error),e instanceof Error&&d(e)}};return null===(n=this.socket)||void 0===n||n.once("close",(()=>{d(new s.SQLiteCloudError("Connection was closed",{cause:(0,a.anonimizeCommand)(e)}))})),null===(r=this.socket)||void 0===r||r.write(e,"utf8",(()=>{var t,n;h=setTimeout((()=>{const t=new s.SQLiteCloudError("Request timed out",{cause:(0,a.anonimizeCommand)(e)});d(t)}),null===(t=this.config)||void 0===t?void 0:t.timeout),null===(n=this.socket)||void 0===n||n.on("data",f)})),null===(o=this.socket)||void 0===o||o.once("error",(e=>{console.error("Socket error",e),this.close(),d(new s.SQLiteCloudError("Socket error",{cause:(0,a.anonimizeError)(e)}))})),this}close(){return console.assert(null!==this.socket,"TlsConnection.close - connection already closed"),this.operations.clear(),this.socket&&(this.socket.destroy(),this.socket=null),this.socket=void 0,this}}t.SQLiteCloudTlsConnection=h,t.default=h},363:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.SQLiteCloudWebsocketConnection=void 0;const r=n(906),s=n(825),o=n(480),i=n(46);class a extends o.SQLiteCloudConnection{get connected(){return!!this.socket}connectTransport(e,t){var n;try{if(console.assert(!this.connected,"Connection already established"),!this.socket){this.config=e;const t=this.config.connectionString,r=(null===(n=this.config)||void 0===n?void 0:n.gatewayUrl)||`ws://${this.config.host}:4000`;this.socket=(0,i.io)(r,{auth:{token:t}})}null==t||t.call(this,null)}catch(e){null==t||t.call(this,e)}return this}transportCommands(e,t){return this.socket?(this.socket.emit("v1/sql",{sql:e,row:"array"},(e=>{if(null==e?void 0:e.error){const n=new r.SQLiteCloudError(e.error.detail,Object.assign({},e.error));null==t||t.call(this,n)}else{const{data:n,metadata:r}=e;if(n&&r&&void 0!==r.numberOfRows&&void 0!==r.numberOfColumns&&void 0!==r.columns){console.assert(Array.isArray(n),"SQLiteCloudWebsocketConnection.transportCommands - data is not an array");const e=new s.SQLiteCloudRowset(r,n.flat());return void(null==t||t.call(this,null,e))}null==t||t.call(this,null,null==e?void 0:e.data)}})),this):(null==t||t.call(this,new r.SQLiteCloudError("Connection not established",{errorCode:"ERR_CONNECTION_NOT_ESTABLISHED"})),this)}close(){var e;return console.assert(null!==this.socket,"SQLiteCloudWebsocketConnection.close - connection already closed"),this.socket&&(null===(e=this.socket)||void 0===e||e.close(),this.socket=void 0),this.operations.clear(),this.socket=void 0,this}}t.SQLiteCloudWebsocketConnection=a,t.default=a},480:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.SQLiteCloudConnection=void 0;const r=n(906),s=n(73),o=n(39),i=n(73);t.SQLiteCloudConnection=class{constructor(e,t){this.operations=new o.OperationsQueue,this.config="string"==typeof e?(0,s.validateConfiguration)({connectionString:e}):(0,s.validateConfiguration)(e),this.connect(t)}connect(e){return this.operations.enqueue((t=>{this.connectTransport(this.config,(n=>{n&&(console.error(`SQLiteCloudConnection.connect - error connecting ${this.config.host}:${this.config.port} ${n.toString()}`,n),this.close()),null==e||e.call(this,n||null),t(n)}))})),this}log(e,...t){this.config.verbose&&(e=(0,i.anonimizeCommand)(e),console.log(`${(new Date).toISOString()} ${this.config.clientId}: ${e}`,...t))}verbose(){this.config.verbose=!0}sendCommands(e,t){return this.operations.enqueue((n=>{if(!this.connected){const e=new r.SQLiteCloudError("Connection not established",{errorCode:"ERR_CONNECTION_NOT_ESTABLISHED"});null==t||t.call(this,e),n(e)}this.transportCommands(e,((e,r)=>{null==t||t.call(this,e,r),n(e)}))})),this}}},751:function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var s=Object.getOwnPropertyDescriptor(t,n);s&&!("get"in s?!t.__esModule:s.writable||s.configurable)||(s={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,s)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),s=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),o=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return s(t,e),t},i=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(s,o){function i(e){try{c(r.next(e))}catch(e){o(e)}}function a(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?s(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(i,a)}c((r=r.apply(e,t||[])).next())}))},a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Database=void 0;const c=n(825),l=n(906),u=n(73),h=n(880),d=a(n(729)),f=n(73);class p extends d.default{constructor(e,t,n){super(),this.connections=[],this.config="string"==typeof e?{connectionString:e}:e,"function"==typeof t&&(n=t,t=void 0),this.getConnection(((e,t)=>{n&&n.call(this,e)}))}getConnection(e){var t,r,s;(null===(t=this.connections)||void 0===t?void 0:t.length)>0?null==e||e.call(this,null,this.connections[0]):f.isBrowser||(null===(r=this.config)||void 0===r?void 0:r.useWebsocket)||(null===(s=this.config)||void 0===s?void 0:s.gatewayUrl)?Promise.resolve().then((()=>o(n(363)))).then((t=>{this.connections.push(new t.default(this.config,(t=>{t?this.handleError(this.connections[0],t,e):(console.assert,null==e||e.call(this,null,this.connections[0]),this.emitEvent("open"))})))})).catch((t=>{this.handleError(null,t,e)})):Promise.resolve().then((()=>o(n(593)))).then((t=>{this.connections.push(new t.default(this.config,(t=>{t?this.handleError(this.connections[0],t,e):(console.assert,null==e||e.call(this,null,this.connections[0]),this.emitEvent("open"))})))})).catch((t=>{this.handleError(null,t,e)}))}handleError(e,t,n){e&&(this.connections=this.connections.filter((t=>t!==e)),e.close()),n?n.call(this,t):this.emitEvent("error",t)}processContext(e){if(e&&Array.isArray(e)&&e.length>0&&e[0]===l.SQLiteCloudArrayType.ARRAY_TYPE_SQLITE_EXEC)return{lastID:e[2],changes:e[3],totalChanges:e[4],finalized:e[5]}}emitEvent(e,...t){setTimeout((()=>{this.emit(e,...t)}),0)}getConfiguration(){return JSON.parse(JSON.stringify(this.config))}verbose(){this.config.verbose=!0;for(const e of this.connections)e.verbose();return this}configure(e,t){return this}run(e,...t){const{args:n,callback:r}=(0,u.popCallback)(t),s=(null==n?void 0:n.length)>0?(0,u.prepareSql)(e,...n):e;return this.getConnection(((e,t)=>{e||!t?this.handleError(null,e,r):t.sendCommands(s,((e,n)=>{if(e)this.handleError(t,e,r);else{const e=this.processContext(n);null==r||r.call(e||this,null,e?void 0:n)}}))})),this}get(e,...t){const{args:n,callback:r}=(0,u.popCallback)(t),s=(null==n?void 0:n.length)>0?(0,u.prepareSql)(e,...n):e;return this.getConnection(((e,t)=>{e||!t?this.handleError(null,e,r):t.sendCommands(s,((e,n)=>{e?this.handleError(t,e,r):n&&n instanceof c.SQLiteCloudRowset&&n.length>0?null==r||r.call(this,null,n[0]):null==r||r.call(this,null)}))})),this}all(e,...t){const{args:n,callback:r}=(0,u.popCallback)(t),s=(null==n?void 0:n.length)>0?(0,u.prepareSql)(e,...n):e;return this.getConnection(((e,t)=>{e||!t?this.handleError(null,e,r):t.sendCommands(s,((e,n)=>{e?this.handleError(t,e,r):n&&n instanceof c.SQLiteCloudRowset?null==r||r.call(this,null,n):null==r||r.call(this,null)}))})),this}each(e,...t){const{args:n,callback:r,complete:s}=(0,u.popCallback)(t),o=(null==n?void 0:n.length)>0?(0,u.prepareSql)(e,...n):e;return this.getConnection(((e,t)=>{e||!t?this.handleError(null,e,r):t.sendCommands(o,((e,n)=>{if(e)this.handleError(t,e,r);else if(n&&n instanceof c.SQLiteCloudRowset){if(r)for(const e of n)r.call(this,null,e);s&&s.call(this,null,n.numberOfRows)}else null==r||r.call(this,new l.SQLiteCloudError("Invalid rowset"))}))})),this}prepare(e,...t){const{args:n,callback:r}=(0,u.popCallback)(t);return new h.Statement(this,e,...n,r)}exec(e,t){return this.getConnection(((n,r)=>{n||!r?this.handleError(null,n,t):r.sendCommands(e,((e,n)=>{if(e)this.handleError(r,e,t);else{const e=this.processContext(n);null==t||t.call(e||this,null)}}))})),this}close(e){var t;if((null===(t=this.connections)||void 0===t?void 0:t.length)>0)for(const e of this.connections)e.close();null==e||e.call(this,null),this.emitEvent("close")}loadExtension(e,t){return t?t.call(this,new Error("Database.loadExtension - Not implemented")):this.emitEvent("error",new Error("Database.loadExtension - Not implemented")),this}interrupt(){}sql(e,...t){return i(this,void 0,void 0,(function*(){let n="";if(Array.isArray(e)&&"raw"in e)e.forEach(((e,r)=>{n+=e+(r0?(0,u.prepareSql)(e,...t):e}return new Promise(((e,t)=>{this.getConnection(((r,s)=>{r||!s?t(r):s.sendCommands(n,((n,r)=>{if(n)t(n);else{const t=this.processContext(r);e(t||r)}}))}))}))}))}}t.Database=p},1:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.formatCommand=t.popData=t.parseRowsetChunks=t.bufferEndsWith=t.bufferStartsWith=t.parseRowsetHeader=t.parseArray=t.parseError=t.decompressBuffer=t.parseCommandLength=t.hasCommandLength=t.ROWSET_CHUNKS_END=t.CMD_ARRAY=t.CMD_COMMAND=t.CMD_COMPRESSED=t.CMD_BLOB=t.CMD_NULL=t.CMD_JSON=t.CMD_ROWSET_CHUNK=t.CMD_ROWSET=t.CMD_FLOAT=t.CMD_INT=t.CMD_ERROR=t.CMD_ZEROSTRING=t.CMD_STRING=void 0;const r=n(906),s=n(825),o=n(405);function i(e,t){const n=e.subarray(t+1).toString("utf8").split(" ");let s=n.shift()||"0",o="0",i="-1";const a=s.split(":");s=a[0],a.length>1&&(o=a[1],a.length>2&&(i=a[2]));const c=n.join(" "),l=parseInt(s),u=parseInt(o),h=parseInt(i);throw new r.SQLiteCloudError(c,{errorCode:l.toString(),externalErrorCode:u.toString(),offsetCode:h})}function a(e,t){const n=[],r=e.subarray(t+1,e.length),s=parseInt(r.subarray(0,t-2).toString("utf8"));let o=r.subarray(r.indexOf(" ")+1,r.length);for(let e=0;e=t.length&&e.subarray(0,t.length).toString("utf8")===t}function h(e,t){return e.length>=t.length&&e.subarray(e.length-t.length,e.length).toString("utf8")===t}function d(e){function n(t){return{data:t,fwdBuffer:e.subarray(u)}}console.assert(e&&e instanceof Buffer);const r=e.subarray(0,1).toString("utf8");console.assert(r!==t.CMD_COMPRESSED,"Compressed data shouldn't be decompressed before parsing"),console.assert(r!==t.CMD_ROWSET_CHUNK,"Chunked data should be parsed by parseRowsetChunks");let o=e.indexOf(" ");-1===o&&(o=e.length-1);let u=-1;if(r===t.CMD_INT||r===t.CMD_FLOAT||r===t.CMD_NULL)u=o+1;else{const t=parseInt(e.subarray(1,o).toString());u=o+1+t}switch(r){case t.CMD_INT:return n(parseInt(e.subarray(1,o).toString()));case t.CMD_FLOAT:return n(parseFloat(e.subarray(1,o).toString()));case t.CMD_NULL:return n(null);case t.CMD_STRING:return n(e.subarray(o+1,u).toString("utf8"));case t.CMD_ZEROSTRING:return n(e.subarray(o+1,u-1).toString("utf8"));case t.CMD_COMMAND:return n(e.subarray(o+1,u).toString("utf8"));case t.CMD_JSON:return n(JSON.parse(e.subarray(o+1,u).toString("utf8")));case t.CMD_BLOB:return n(e.subarray(o+1,u));case t.CMD_ARRAY:return n(a(e,o));case t.CMD_ROWSET:return n(function(e,t){e=e.subarray(t+1,e.length);const{metadata:n,fwdBuffer:r}=c(e);e=l(r,n);const o=[];for(let t=0;t0&&!u(n,t.ROWSET_CHUNKS_END);){const{index:e,metadata:t,fwdBuffer:s}=c(n);n=s,1===e?(r=t,n=l(n,r)):r.numberOfRows+=t.numberOfRows;for(let e=0;e{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.OperationsQueue=void 0,t.OperationsQueue=class{constructor(){this.queue=[],this.isProcessing=!1}enqueue(e){this.queue.push(e),this.isProcessing||this.processNext()}clear(){this.queue=[],this.isProcessing=!1}processNext(){if(0===this.queue.length)return void(this.isProcessing=!1);this.isProcessing=!0;const e=this.queue.shift();null==e||e((()=>{this.processNext()}))}}},825:function(e,t,n){"use strict";var r,s,o,i,a=this&&this.__classPrivateFieldSet||function(e,t,n,r,s){if("m"===r)throw new TypeError("Private method is not writable");if("a"===r&&!s)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!s:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===r?s.call(e,n):s?s.value=n:t.set(e,n),n},c=this&&this.__classPrivateFieldGet||function(e,t,n,r){if("a"===n&&!r)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!r:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===n?r:"a"===n?r.call(e):r?r.value:t.get(e)};Object.defineProperty(t,"__esModule",{value:!0}),t.SQLiteCloudRowset=t.SQLiteCloudRow=void 0;const l=n(906);class u{constructor(e,t,n){r.set(this,void 0),s.set(this,void 0),a(this,r,e,"f"),a(this,s,n,"f");for(let e=0;er!==t&&e===n[t]))>=0;)n[t]=`${n[t]}_${e}`,e++}for(let r=0,s=0;re.name))}get metadata(){return c(this,o,"f")}getItem(e,t){if(e<0||e>=this.numberOfRows||t<0||t>=this.numberOfColumns)throw new l.SQLiteCloudError(`This rowset has ${this.numberOfColumns} columns by ${this.numberOfRows} rows, requested column ${t} and row ${e} is invalid.`);return c(this,i,"f")[e*this.numberOfColumns+t]}slice(e,t){e=void 0===e?0:e<0?this.numberOfRows+e:e,e=Math.min(Math.max(e,0),this.numberOfRows),t=void 0===t?this.numberOfRows:t<0?this.numberOfRows+t:t,t=Math.min(Math.max(e,t),this.numberOfRows);const n=Object.assign(Object.assign({},c(this,o,"f")),{numberOfRows:t-e}),r=c(this,i,"f").slice(e*this.numberOfColumns,t*this.numberOfColumns);return console.assert(r&&r.length===n.numberOfRows*n.numberOfColumns,"SQLiteCloudRowset.slice - invalid rowset data"),new h(n,r)}map(e){const t=[];for(let n=0;n{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Statement=void 0;const r=n(73);t.Statement=class{constructor(e,t,...n){const{args:s,callback:o}=(0,r.popCallback)(n);this._database=e,this._sql=t,(null==s?void 0:s.length)>0?this.bind(...s,o):null==o||o.call(this,null)}bind(...e){const{args:t,callback:n}=(0,r.popCallback)(e);try{this._preparedSql=(0,r.prepareSql)(this._sql,...t),n&&n.call(this,null)}catch(e){this._preparedSql=void 0,n&&n.call(this,e)}return this}run(...e){const{args:t,callback:n}=(0,r.popCallback)(e||[]);return(null==t?void 0:t.length)>0?this.bind(...t,(e=>{e?null==n||n.call(this,e):this._database.run(this._preparedSql||"",n)})):this._database.run(this._preparedSql||"",n),this}get(...e){const{args:t,callback:n}=(0,r.popCallback)(e||[]);return(null==t?void 0:t.length)>0?this.bind(...t,(e=>{e?null==n||n.call(this,e):this._database.get(this._preparedSql||"",n)})):this._database.get(this._preparedSql||"",n),this}all(...e){const{args:t,callback:n}=(0,r.popCallback)(e||[]);return(null==t?void 0:t.length)>0?this.bind(...t,(e=>{e?null==n||n.call(this,e):this._database.all(this._preparedSql||"",n)})):this._database.all(this._preparedSql||"",n),this}each(...e){const{args:t,callback:n,complete:s}=(0,r.popCallback)(e);return(null==t?void 0:t.length)>0?this.bind(...t,(e=>{e?null==n||n.call(this,e):this._database.each(this._preparedSql||"",n,s)})):this._database.each(this._preparedSql||"",n,s),this}}},906:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.SQLiteCloudArrayType=t.SQLiteCloudError=t.DEFAULT_PORT=t.DEFAULT_TIMEOUT=void 0,t.DEFAULT_TIMEOUT=3e5,t.DEFAULT_PORT=9960;class n extends Error{constructor(e,t){super(e),this.name="SQLiteCloudError",t&&Object.assign(this,t)}}var r;t.SQLiteCloudError=n,(r=t.SQLiteCloudArrayType||(t.SQLiteCloudArrayType={}))[r.ARRAY_TYPE_SQLITE_EXEC=10]="ARRAY_TYPE_SQLITE_EXEC",r[r.ARRAY_TYPE_DB_STATUS=11]="ARRAY_TYPE_DB_STATUS",r[r.ARRAY_TYPE_METADATA=12]="ARRAY_TYPE_METADATA",r[r.ARRAY_TYPE_VM_STEP=20]="ARRAY_TYPE_VM_STEP",r[r.ARRAY_TYPE_VM_COMPILE=21]="ARRAY_TYPE_VM_COMPILE",r[r.ARRAY_TYPE_VM_STEP_ONE=22]="ARRAY_TYPE_VM_STEP_ONE",r[r.ARRAY_TYPE_VM_SQL=23]="ARRAY_TYPE_VM_SQL",r[r.ARRAY_TYPE_VM_STATUS=24]="ARRAY_TYPE_VM_STATUS",r[r.ARRAY_TYPE_VM_LIST=25]="ARRAY_TYPE_VM_LIST",r[r.ARRAY_TYPE_BACKUP_INIT=40]="ARRAY_TYPE_BACKUP_INIT",r[r.ARRAY_TYPE_BACKUP_STEP=41]="ARRAY_TYPE_BACKUP_STEP",r[r.ARRAY_TYPE_BACKUP_END=42]="ARRAY_TYPE_BACKUP_END",r[r.ARRAY_TYPE_SQLITE_STATUS=50]="ARRAY_TYPE_SQLITE_STATUS"},73:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.parseBoolean=t.parseConnectionString=t.validateConfiguration=t.popCallback=t.prepareSql=t.escapeSqlParameter=t.getInitializationCommands=t.anonimizeError=t.anonimizeCommand=t.isNode=t.isBrowser=void 0;const r=n(906);function s(e){return(e=(e=e.replace(/USER \S+/,"USER ******")).replace(/PASSWORD \S+?(?=;)/,"PASSWORD ******")).replace(/HASH \S+?(?=;)/,"HASH ******")}function o(e){if(null==e)return"NULL";if("string"==typeof e)return`'${e=e.replace(/'/g,"''")}'`;if("number"==typeof e)return e.toString();if("boolean"==typeof e)return e?"1":"0";if(Buffer.isBuffer(e))return`X'${e.toString("hex")}'`;if("object"==typeof e){let t=JSON.stringify(e);return t=t.replace(/'/g,"''"),`'${t}'`}throw new r.SQLiteCloudError("Unsupported parameter type: "+typeof e)}function i(e){try{const t=e.replace("sqlitecloud:","https:"),n=new URL(t),r={};n.searchParams.forEach(((e,t)=>{r[t]=e}));const s=Object.assign({username:n.username,password:n.password,host:n.hostname,port:n.port?parseInt(n.port):void 0},r),o=n.pathname.replace("/","");return o&&(s.database=o),s}catch(t){throw new r.SQLiteCloudError(`Invalid connection string: ${e}`)}}function a(e){return"string"==typeof e?"true"===e.toLowerCase()||"1"===e:!!e}t.isBrowser="undefined"!=typeof window&&void 0!==window.document,t.isNode="undefined"!=typeof process&&null!=process.versions&&null!=process.versions.node,t.anonimizeCommand=s,t.anonimizeError=function(e){return(null==e?void 0:e.message)&&(e.message=s(e.message)),e},t.getInitializationCommands=function(e){let t=`AUTH USER ${e.username||""} ${e.passwordHashed?"HASH":"PASSWORD"} ${e.password||""}; `;return e.database&&(e.createDatabase&&!e.dbMemory&&(t+=`CREATE DATABASE ${e.database} IF NOT EXISTS; `),t+=`USE DATABASE ${e.database}; `),e.compression&&(t+="SET CLIENT KEY COMPRESSION TO 1; "),e.nonlinearizable&&(t+="SET CLIENT KEY NONLINEARIZABLE TO 1; "),e.noBlob&&(t+="SET CLIENT KEY NOBLOB TO 1; "),e.maxData&&(t+=`SET CLIENT KEY MAXDATA TO ${e.maxData}; `),e.maxRows&&(t+=`SET CLIENT KEY MAXROWS TO ${e.maxRows}; `),e.maxRowset&&(t+=`SET CLIENT KEY MAXROWSET TO ${e.maxRowset}; `),t},t.escapeSqlParameter=o,t.prepareSql=function(e,...t){1===(null==t?void 0:t.length)&&Array.isArray(t[0])&&(t=t[0]);let n=1,s=e.replace(/\?(\d+)?/g,((e,s)=>{const i=s?parseInt(s):n;let a;if(n++,!t[0]||"object"!=typeof t[0]||t[0]instanceof Buffer||(a=t[0][i]),!a){if(i>t.length)throw new r.SQLiteCloudError("Not enough parameters");a=t[i-1]}return null!=a?o(a):"NULL"}));if(1===(null==t?void 0:t.length)&&t[0]&&"object"==typeof t[0]){const e=t[0];for(const[t,n]of Object.entries(e)){const e=t.charAt(0);if("$"==e||":"==e||"@"==e){const e=o(n);s=s.replace(new RegExp(`\\${t}`,"g"),e)}}}return s},t.popCallback=function(e){const t=e;return e&&e.length>0&&"function"==typeof e[e.length-1]?e.length>1&&"function"==typeof e[e.length-2]?{args:t.slice(0,-2),callback:e[e.length-2],complete:e[e.length-1]}:{args:t.slice(0,-1),callback:e[e.length-1]}:{args:t}},t.validateConfiguration=function(e){if(console.assert(e,"SQLiteCloudConnection.validateConfiguration - missing config"),e.connectionString&&(e=Object.assign(Object.assign(Object.assign({},e),i(e.connectionString)),{connectionString:e.connectionString})),e.port||(e.port=r.DEFAULT_PORT),e.timeout=e.timeout&&e.timeout>0?e.timeout:r.DEFAULT_TIMEOUT,e.clientId||(e.clientId="SQLiteCloud"),e.verbose=a(e.verbose),e.noBlob=a(e.noBlob),e.compression=a(e.compression),e.createDatabase=a(e.createDatabase),e.nonlinearizable=a(e.nonlinearizable),e.insecure=a(e.insecure),!e.username||!e.password||!e.host)throw console.error("SQLiteCloudConnection.validateConfiguration - missing arguments",e),new r.SQLiteCloudError("The user, password and host arguments must be specified.",{errorCode:"ERR_MISSING_ARGS"});return e.connectionString||(e.connectionString=`sqlitecloud://${e.username}:${e.password}@${e.host}:${e.port}/${e.database}`),e},t.parseConnectionString=i,t.parseBoolean=a},227:(e,t,n)=>{t.formatArgs=function(t){if(t[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+t[0]+(this.useColors?"%c ":" ")+"+"+e.exports.humanize(this.diff),!this.useColors)return;const n="color: "+this.color;t.splice(1,0,n,"color: inherit");let r=0,s=0;t[0].replace(/%[a-zA-Z%]/g,(e=>{"%%"!==e&&(r++,"%c"===e&&(s=r))})),t.splice(s,0,n)},t.save=function(e){try{e?t.storage.setItem("debug",e):t.storage.removeItem("debug")}catch(e){}},t.load=function(){let e;try{e=t.storage.getItem("debug")}catch(e){}return!e&&"undefined"!=typeof process&&"env"in process&&(e=process.env.DEBUG),e},t.useColors=function(){return!("undefined"==typeof window||!window.process||"renderer"!==window.process.type&&!window.process.__nwjs)||("undefined"==typeof navigator||!navigator.userAgent||!navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/))&&("undefined"!=typeof document&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||"undefined"!=typeof window&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)&&parseInt(RegExp.$1,10)>=31||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/))},t.storage=function(){try{return localStorage}catch(e){}}(),t.destroy=(()=>{let e=!1;return()=>{e||(e=!0,console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."))}})(),t.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"],t.log=console.debug||console.log||(()=>{}),e.exports=n(447)(t);const{formatters:r}=e.exports;r.j=function(e){try{return JSON.stringify(e)}catch(e){return"[UnexpectedJSONParseError]: "+e.message}}},447:(e,t,n)=>{e.exports=function(e){function t(e){let n,s,o,i=null;function a(...e){if(!a.enabled)return;const r=a,s=Number(new Date),o=s-(n||s);r.diff=o,r.prev=n,r.curr=s,n=s,e[0]=t.coerce(e[0]),"string"!=typeof e[0]&&e.unshift("%O");let i=0;e[0]=e[0].replace(/%([a-zA-Z%])/g,((n,s)=>{if("%%"===n)return"%";i++;const o=t.formatters[s];if("function"==typeof o){const t=e[i];n=o.call(r,t),e.splice(i,1),i--}return n})),t.formatArgs.call(r,e),(r.log||t.log).apply(r,e)}return a.namespace=e,a.useColors=t.useColors(),a.color=t.selectColor(e),a.extend=r,a.destroy=t.destroy,Object.defineProperty(a,"enabled",{enumerable:!0,configurable:!1,get:()=>null!==i?i:(s!==t.namespaces&&(s=t.namespaces,o=t.enabled(e)),o),set:e=>{i=e}}),"function"==typeof t.init&&t.init(a),a}function r(e,n){const r=t(this.namespace+(void 0===n?":":n)+e);return r.log=this.log,r}function s(e){return e.toString().substring(2,e.toString().length-2).replace(/\.\*\?$/,"*")}return t.debug=t,t.default=t,t.coerce=function(e){return e instanceof Error?e.stack||e.message:e},t.disable=function(){const e=[...t.names.map(s),...t.skips.map(s).map((e=>"-"+e))].join(",");return t.enable(""),e},t.enable=function(e){let n;t.save(e),t.namespaces=e,t.names=[],t.skips=[];const r=("string"==typeof e?e:"").split(/[\s,]+/),s=r.length;for(n=0;n{t[n]=e[n]})),t.names=[],t.skips=[],t.formatters={},t.selectColor=function(e){let n=0;for(let t=0;t{"use strict";var t=Object.prototype.hasOwnProperty,n="~";function r(){}function s(e,t,n){this.fn=e,this.context=t,this.once=n||!1}function o(e,t,r,o,i){if("function"!=typeof r)throw new TypeError("The listener must be a function");var a=new s(r,o||e,i),c=n?n+t:t;return e._events[c]?e._events[c].fn?e._events[c]=[e._events[c],a]:e._events[c].push(a):(e._events[c]=a,e._eventsCount++),e}function i(e,t){0==--e._eventsCount?e._events=new r:delete e._events[t]}function a(){this._events=new r,this._eventsCount=0}Object.create&&(r.prototype=Object.create(null),(new r).__proto__||(n=!1)),a.prototype.eventNames=function(){var e,r,s=[];if(0===this._eventsCount)return s;for(r in e=this._events)t.call(e,r)&&s.push(n?r.slice(1):r);return Object.getOwnPropertySymbols?s.concat(Object.getOwnPropertySymbols(e)):s},a.prototype.listeners=function(e){var t=n?n+e:e,r=this._events[t];if(!r)return[];if(r.fn)return[r.fn];for(var s=0,o=r.length,i=new Array(o);s{var r=n(887),s=n(325),o=65536,i=h(5<<20),a=function(){try{return new Uint32Array(o)}catch(n){for(var e=new Array(o),t=0;t>4&7;if(void 0===u[i])throw new Error("invalid block size "+i);var a=u[i];if(o)return s.readU64(e,t);t++;for(var h=0;;){var d=s.readU32(e,t);if(t+=4,h+=d&l?d&=2147483647:a,0===d)return h;r&&(t+=4),t+=d}},t.makeBuffer=h,t.decompressBlock=function(e,t,n,r,s){var o,i,a,c,l;for(a=n+r;n>4;if(h>0){if(15===h)for(;h+=e[n],255===e[n++];);for(c=n+h;n=a)break;if(o=15&u,i=e[n++]|e[n++]<<8,15===o)for(;o+=e[n],255===e[n++];);for(c=(l=s-i)+(o+=4);l=13)for(var p=67;n+4>>0;if(i=o[g=(g>>16^g)>>>0&65535]-1,o[g]=n+1,i<0||n-i>>>16>0||s.readU32(e,i)!==m)n+=p++>>6;else{for(p=67,u=n-a,l=n-i,i+=4,c=n+=4;n=15){for(t[h++]=240+y,f=u-15;f>=255;f-=255)t[h++]=255;t[h++]=f}else t[h++]=(u<<4)+y;for(var b=0;b>8,c>=15){for(f=c-15;f>=255;f-=255)t[h++]=255;t[h++]=f}a=n}}if(0===a)return 0;if((u=d-a)>=15){for(t[h++]=240,f=u-15;f>=255;f-=255)t[h++]=255;t[h++]=f}else t[h++]=u<<4;for(n=a;n>4&7;if(void 0===u[f])throw new Error("invalid block size");for(i&&(h+=8),h++;;){var p;if(p=s.readU32(e,h),h+=4,0===p)break;if(r&&(h+=4),0!=(p&l)){p&=2147483647;for(var m=0;m>8,l++;var h=u[7],d=e.length,f=0;for(function(e){for(var t=0;t0;){var p,m=d>h?h:d;if((p=t.compressBlock(e,i,f,m,a))>m||0===p){s.writeU32(n,l,2147483648|m),l+=4;for(var g=f+m;f{t.hashU32=function(e){return-1252372727^(e=(e=(e=374761393+(e=-949894596^(e=2127912214+(e|=0)+(e<<12)|0)^e>>>19)+(e<<5)|0)-744332180^e<<9)-42973499+(e<<3)|0)^e>>>16|0},t.readU64=function(e,t){var n=0;return n|=e[t++]<<0,n|=e[t++]<<8,n|=e[t++]<<16,n|=e[t++]<<24,n|=e[t++]<<32,n|=e[t++]<<40,(n|=e[t++]<<48)|e[t++]<<56},t.readU32=function(e,t){var n=0;return n|=e[t++]<<0,n|=e[t++]<<8,(n|=e[t++]<<16)|e[t++]<<24},t.writeU32=function(e,t,n){e[t++]=n>>0&255,e[t++]=n>>8&255,e[t++]=n>>16&255,e[t++]=n>>24&255},t.imul=function(e,t){var n=65535&e,r=65535&t;return n*r+((e>>>16)*r+n*(t>>>16)<<16)|0}},887:(e,t,n)=>{var r=n(325),s=2654435761,o=2246822519,i=3266489917,a=374761393;function c(e,t){return(e|=0)>>>(32-(t|=0)|0)|e<>>(32-t|0)|e<>>(t|=0)^e|0}function h(e,t,n,s,o){return l(r.imul(t,n)+e,s,o)}function d(e,t,n){return l(e+r.imul(t[n],a),11,s)}function f(e,t,n){return h(e,r.readU32(t,n),i,17,668265263)}function p(e,t,n){return[h(e[0],r.readU32(t,n+0),o,13,s),h(e[1],r.readU32(t,n+4),o,13,s),h(e[2],r.readU32(t,n+8),o,13,s),h(e[3],r.readU32(t,n+12),o,13,s)]}t.hash=function(e,t,n,l){var h,m;if(m=l,l>=16){for(h=[e+s+o,e+o,e,e-s];l>=16;)h=p(h,t,n),n+=16,l-=16;h=c(h[0],1)+c(h[1],7)+c(h[2],12)+c(h[3],18)+m}else h=e+a+l>>>0;for(;l>=4;)h=f(h,t,n),n+=4,l-=4;for(;l>0;)h=d(h,t,n),n++,l--;return(h=u(r.imul(u(r.imul(u(h,15),o),13),i),16))>>>0}},824:e=>{var t=1e3,n=60*t,r=60*n,s=24*r;function o(e,t,n,r){var s=t>=1.5*n;return Math.round(e/n)+" "+r+(s?"s":"")}e.exports=function(e,i){i=i||{};var a,c,l=typeof e;if("string"===l&&e.length>0)return function(e){if(!((e=String(e)).length>100)){var o=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(e);if(o){var i=parseFloat(o[1]);switch((o[2]||"ms").toLowerCase()){case"years":case"year":case"yrs":case"yr":case"y":return 315576e5*i;case"weeks":case"week":case"w":return 6048e5*i;case"days":case"day":case"d":return i*s;case"hours":case"hour":case"hrs":case"hr":case"h":return i*r;case"minutes":case"minute":case"mins":case"min":case"m":return i*n;case"seconds":case"second":case"secs":case"sec":case"s":return i*t;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return i;default:return}}}}(e);if("number"===l&&isFinite(e))return i.long?(a=e,(c=Math.abs(a))>=s?o(a,c,s,"day"):c>=r?o(a,c,r,"hour"):c>=n?o(a,c,n,"minute"):c>=t?o(a,c,t,"second"):a+" ms"):function(e){var o=Math.abs(e);return o>=s?Math.round(e/s)+"d":o>=r?Math.round(e/r)+"h":o>=n?Math.round(e/n)+"m":o>=t?Math.round(e/t)+"s":e+"ms"}(e);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(e))}},761:()=>{},59:()=>{},419:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.hasCORS=void 0;let n=!1;try{n="undefined"!=typeof XMLHttpRequest&&"withCredentials"in new XMLHttpRequest}catch(e){}t.hasCORS=n},754:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.decode=t.encode=void 0,t.encode=function(e){let t="";for(let n in e)e.hasOwnProperty(n)&&(t.length&&(t+="&"),t+=encodeURIComponent(n)+"="+encodeURIComponent(e[n]));return t},t.decode=function(e){let t={},n=e.split("&");for(let e=0,r=n.length;e{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.parse=void 0;const n=/^(?:(?![^:@\/?#]+:[^:@\/]*@)(http|https|ws|wss):\/\/)?((?:(([^:@\/?#]*)(?::([^:@\/?#]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/,r=["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"];t.parse=function(e){if(e.length>2e3)throw"URI too long";const t=e,s=e.indexOf("["),o=e.indexOf("]");-1!=s&&-1!=o&&(e=e.substring(0,s)+e.substring(s,o).replace(/:/g,";")+e.substring(o,e.length));let i=n.exec(e||""),a={},c=14;for(;c--;)a[r[c]]=i[c]||"";return-1!=s&&-1!=o&&(a.source=t,a.host=a.host.substring(1,a.host.length-1).replace(/;/g,":"),a.authority=a.authority.replace("[","").replace("]","").replace(/;/g,":"),a.ipv6uri=!0),a.pathNames=function(e,t){const n=t.replace(/\/{2,9}/g,"/").split("/");return"/"!=t.slice(0,1)&&0!==t.length||n.splice(0,1),"/"==t.slice(-1)&&n.splice(n.length-1,1),n}(0,a.path),a.queryKey=function(e,t){const n={};return t.replace(/(?:^|&)([^&=]*)=?([^&]*)/g,(function(e,t,r){t&&(n[t]=r)})),n}(0,a.query),a}},726:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.yeast=t.decode=t.encode=void 0;const n="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_".split(""),r={};let s,o=0,i=0;function a(e){let t="";do{t=n[e%64]+t,e=Math.floor(e/64)}while(e>0);return t}for(t.encode=a,t.decode=function(e){let t=0;for(i=0;i{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.globalThisShim=void 0,t.globalThisShim="undefined"!=typeof self?self:"undefined"!=typeof window?window:Function("return this")()},679:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.nextTick=t.parse=t.installTimerFunctions=t.transports=t.TransportError=t.Transport=t.protocol=t.Socket=void 0;const r=n(481);Object.defineProperty(t,"Socket",{enumerable:!0,get:function(){return r.Socket}}),t.protocol=r.Socket.protocol;var s=n(870);Object.defineProperty(t,"Transport",{enumerable:!0,get:function(){return s.Transport}}),Object.defineProperty(t,"TransportError",{enumerable:!0,get:function(){return s.TransportError}});var o=n(385);Object.defineProperty(t,"transports",{enumerable:!0,get:function(){return o.transports}});var i=n(622);Object.defineProperty(t,"installTimerFunctions",{enumerable:!0,get:function(){return i.installTimerFunctions}});var a=n(222);Object.defineProperty(t,"parse",{enumerable:!0,get:function(){return a.parse}});var c=n(552);Object.defineProperty(t,"nextTick",{enumerable:!0,get:function(){return c.nextTick}})},481:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Socket=void 0;const s=n(385),o=n(622),i=n(754),a=n(222),c=r(n(227)),l=n(260),u=n(373),h=n(552),d=(0,c.default)("engine.io-client:socket");class f extends l.Emitter{constructor(e,t={}){super(),this.binaryType=h.defaultBinaryType,this.writeBuffer=[],e&&"object"==typeof e&&(t=e,e=null),e?(e=(0,a.parse)(e),t.hostname=e.host,t.secure="https"===e.protocol||"wss"===e.protocol,t.port=e.port,e.query&&(t.query=e.query)):t.host&&(t.hostname=(0,a.parse)(t.host).host),(0,o.installTimerFunctions)(this,t),this.secure=null!=t.secure?t.secure:"undefined"!=typeof location&&"https:"===location.protocol,t.hostname&&!t.port&&(t.port=this.secure?"443":"80"),this.hostname=t.hostname||("undefined"!=typeof location?location.hostname:"localhost"),this.port=t.port||("undefined"!=typeof location&&location.port?location.port:this.secure?"443":"80"),this.transports=t.transports||["polling","websocket","webtransport"],this.writeBuffer=[],this.prevBufferLen=0,this.opts=Object.assign({path:"/engine.io",agent:!1,withCredentials:!1,upgrade:!0,timestampParam:"t",rememberUpgrade:!1,addTrailingSlash:!0,rejectUnauthorized:!0,perMessageDeflate:{threshold:1024},transportOptions:{},closeOnBeforeunload:!1},t),this.opts.path=this.opts.path.replace(/\/$/,"")+(this.opts.addTrailingSlash?"/":""),"string"==typeof this.opts.query&&(this.opts.query=(0,i.decode)(this.opts.query)),this.id=null,this.upgrades=null,this.pingInterval=null,this.pingTimeout=null,this.pingTimeoutTimer=null,"function"==typeof addEventListener&&(this.opts.closeOnBeforeunload&&(this.beforeunloadEventListener=()=>{this.transport&&(this.transport.removeAllListeners(),this.transport.close())},addEventListener("beforeunload",this.beforeunloadEventListener,!1)),"localhost"!==this.hostname&&(this.offlineEventListener=()=>{this.onClose("transport close",{description:"network connection lost"})},addEventListener("offline",this.offlineEventListener,!1))),this.open()}createTransport(e){d('creating transport "%s"',e);const t=Object.assign({},this.opts.query);t.EIO=u.protocol,t.transport=e,this.id&&(t.sid=this.id);const n=Object.assign({},this.opts,{query:t,socket:this,hostname:this.hostname,secure:this.secure,port:this.port},this.opts.transportOptions[e]);return d("options: %j",n),new s.transports[e](n)}open(){let e;if(this.opts.rememberUpgrade&&f.priorWebsocketSuccess&&-1!==this.transports.indexOf("websocket"))e="websocket";else{if(0===this.transports.length)return void this.setTimeoutFn((()=>{this.emitReserved("error","No transports available")}),0);e=this.transports[0]}this.readyState="opening";try{e=this.createTransport(e)}catch(e){return d("error while creating transport: %s",e),this.transports.shift(),void this.open()}e.open(),this.setTransport(e)}setTransport(e){d("setting transport %s",e.name),this.transport&&(d("clearing existing transport %s",this.transport.name),this.transport.removeAllListeners()),this.transport=e,e.on("drain",this.onDrain.bind(this)).on("packet",this.onPacket.bind(this)).on("error",this.onError.bind(this)).on("close",(e=>this.onClose("transport close",e)))}probe(e){d('probing transport "%s"',e);let t=this.createTransport(e),n=!1;f.priorWebsocketSuccess=!1;const r=()=>{n||(d('probe transport "%s" opened',e),t.send([{type:"ping",data:"probe"}]),t.once("packet",(r=>{if(!n)if("pong"===r.type&&"probe"===r.data){if(d('probe transport "%s" pong',e),this.upgrading=!0,this.emitReserved("upgrading",t),!t)return;f.priorWebsocketSuccess="websocket"===t.name,d('pausing current transport "%s"',this.transport.name),this.transport.pause((()=>{n||"closed"!==this.readyState&&(d("changing transport and sending upgrade packet"),l(),this.setTransport(t),t.send([{type:"upgrade"}]),this.emitReserved("upgrade",t),t=null,this.upgrading=!1,this.flush())}))}else{d('probe transport "%s" failed',e);const n=new Error("probe error");n.transport=t.name,this.emitReserved("upgradeError",n)}})))};function s(){n||(n=!0,l(),t.close(),t=null)}const o=n=>{const r=new Error("probe error: "+n);r.transport=t.name,s(),d('probe transport "%s" failed because of error: %s',e,n),this.emitReserved("upgradeError",r)};function i(){o("transport closed")}function a(){o("socket closed")}function c(e){t&&e.name!==t.name&&(d('"%s" works - aborting "%s"',e.name,t.name),s())}const l=()=>{t.removeListener("open",r),t.removeListener("error",o),t.removeListener("close",i),this.off("close",a),this.off("upgrading",c)};t.once("open",r),t.once("error",o),t.once("close",i),this.once("close",a),this.once("upgrading",c),-1!==this.upgrades.indexOf("webtransport")&&"webtransport"!==e?this.setTimeoutFn((()=>{n||t.open()}),200):t.open()}onOpen(){if(d("socket open"),this.readyState="open",f.priorWebsocketSuccess="websocket"===this.transport.name,this.emitReserved("open"),this.flush(),"open"===this.readyState&&this.opts.upgrade){d("starting upgrade probes");let e=0;const t=this.upgrades.length;for(;e{this.onClose("ping timeout")}),this.pingInterval+this.pingTimeout),this.opts.autoUnref&&this.pingTimeoutTimer.unref()}onDrain(){this.writeBuffer.splice(0,this.prevBufferLen),this.prevBufferLen=0,0===this.writeBuffer.length?this.emitReserved("drain"):this.flush()}flush(){if("closed"!==this.readyState&&this.transport.writable&&!this.upgrading&&this.writeBuffer.length){const e=this.getWritablePackets();d("flushing %d packets in socket",e.length),this.transport.send(e),this.prevBufferLen=e.length,this.emitReserved("flush")}}getWritablePackets(){if(!(this.maxPayload&&"polling"===this.transport.name&&this.writeBuffer.length>1))return this.writeBuffer;let e=1;for(let t=0;t0&&e>this.maxPayload)return d("only send %d out of %d packets",t,this.writeBuffer.length),this.writeBuffer.slice(0,t);e+=2}return d("payload size is %d (max: %d)",e,this.maxPayload),this.writeBuffer}write(e,t,n){return this.sendPacket("message",e,t,n),this}send(e,t,n){return this.sendPacket("message",e,t,n),this}sendPacket(e,t,n,r){if("function"==typeof t&&(r=t,t=void 0),"function"==typeof n&&(r=n,n=null),"closing"===this.readyState||"closed"===this.readyState)return;(n=n||{}).compress=!1!==n.compress;const s={type:e,data:t,options:n};this.emitReserved("packetCreate",s),this.writeBuffer.push(s),r&&this.once("flush",r),this.flush()}close(){const e=()=>{this.onClose("forced close"),d("socket closing - telling transport to close"),this.transport.close()},t=()=>{this.off("upgrade",t),this.off("upgradeError",t),e()},n=()=>{this.once("upgrade",t),this.once("upgradeError",t)};return"opening"!==this.readyState&&"open"!==this.readyState||(this.readyState="closing",this.writeBuffer.length?this.once("drain",(()=>{this.upgrading?n():e()})):this.upgrading?n():e()),this}onError(e){d("socket error %j",e),f.priorWebsocketSuccess=!1,this.emitReserved("error",e),this.onClose("transport error",e)}onClose(e,t){"opening"!==this.readyState&&"open"!==this.readyState&&"closing"!==this.readyState||(d('socket close with reason: "%s"',e),this.clearTimeoutFn(this.pingTimeoutTimer),this.transport.removeAllListeners("close"),this.transport.close(),this.transport.removeAllListeners(),"function"==typeof removeEventListener&&(removeEventListener("beforeunload",this.beforeunloadEventListener,!1),removeEventListener("offline",this.offlineEventListener,!1)),this.readyState="closed",this.id=null,this.emitReserved("close",e,t),this.writeBuffer=[],this.prevBufferLen=0)}filterUpgrades(e){const t=[];let n=0;const r=e.length;for(;n{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.transports=void 0;const r=n(484),s=n(308),o=n(20);t.transports={websocket:s.WS,webtransport:o.WT,polling:r.Polling}},484:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Request=t.Polling=void 0;const s=n(870),o=r(n(227)),i=n(726),a=n(373),c=n(666),l=n(260),u=n(622),h=n(242),d=(0,o.default)("engine.io-client:polling");function f(){}const p=null!=new c.XHR({xdomain:!1}).responseType;class m extends s.Transport{constructor(e){if(super(e),this.polling=!1,"undefined"!=typeof location){const t="https:"===location.protocol;let n=location.port;n||(n=t?"443":"80"),this.xd="undefined"!=typeof location&&e.hostname!==location.hostname||n!==e.port}const t=e&&e.forceBase64;this.supportsBinary=p&&!t,this.opts.withCredentials&&(this.cookieJar=(0,c.createCookieJar)())}get name(){return"polling"}doOpen(){this.poll()}pause(e){this.readyState="pausing";const t=()=>{d("paused"),this.readyState="paused",e()};if(this.polling||!this.writable){let e=0;this.polling&&(d("we are currently polling - waiting to pause"),e++,this.once("pollComplete",(function(){d("pre-pause polling complete"),--e||t()}))),this.writable||(d("we are currently writing - waiting to pause"),e++,this.once("drain",(function(){d("pre-pause writing complete"),--e||t()})))}else t()}poll(){d("polling"),this.polling=!0,this.doPoll(),this.emitReserved("poll")}onData(e){d("polling got data %s",e),(0,a.decodePayload)(e,this.socket.binaryType).forEach((e=>{if("opening"===this.readyState&&"open"===e.type&&this.onOpen(),"close"===e.type)return this.onClose({description:"transport closed by the server"}),!1;this.onPacket(e)})),"closed"!==this.readyState&&(this.polling=!1,this.emitReserved("pollComplete"),"open"===this.readyState?this.poll():d('ignoring poll - transport state "%s"',this.readyState))}doClose(){const e=()=>{d("writing close packet"),this.write([{type:"close"}])};"open"===this.readyState?(d("transport open - closing"),e()):(d("transport not open - deferring close"),this.once("open",e))}write(e){this.writable=!1,(0,a.encodePayload)(e,(e=>{this.doWrite(e,(()=>{this.writable=!0,this.emitReserved("drain")}))}))}uri(){const e=this.opts.secure?"https":"http",t=this.query||{};return!1!==this.opts.timestampRequests&&(t[this.opts.timestampParam]=(0,i.yeast)()),this.supportsBinary||t.sid||(t.b64=1),this.createUri(e,t)}request(e={}){return Object.assign(e,{xd:this.xd,cookieJar:this.cookieJar},this.opts),new g(this.uri(),e)}doWrite(e,t){const n=this.request({method:"POST",data:e});n.on("success",t),n.on("error",((e,t)=>{this.onError("xhr post error",e,t)}))}doPoll(){d("xhr poll");const e=this.request();e.on("data",this.onData.bind(this)),e.on("error",((e,t)=>{this.onError("xhr poll error",e,t)})),this.pollXhr=e}}t.Polling=m;class g extends l.Emitter{constructor(e,t){super(),(0,u.installTimerFunctions)(this,t),this.opts=t,this.method=t.method||"GET",this.uri=e,this.data=void 0!==t.data?t.data:null,this.create()}create(){var e;const t=(0,u.pick)(this.opts,"agent","pfx","key","passphrase","cert","ca","ciphers","rejectUnauthorized","autoUnref");t.xdomain=!!this.opts.xd;const n=this.xhr=new c.XHR(t);try{d("xhr open %s: %s",this.method,this.uri),n.open(this.method,this.uri,!0);try{if(this.opts.extraHeaders){n.setDisableHeaderCheck&&n.setDisableHeaderCheck(!0);for(let e in this.opts.extraHeaders)this.opts.extraHeaders.hasOwnProperty(e)&&n.setRequestHeader(e,this.opts.extraHeaders[e])}}catch(e){}if("POST"===this.method)try{n.setRequestHeader("Content-type","text/plain;charset=UTF-8")}catch(e){}try{n.setRequestHeader("Accept","*/*")}catch(e){}null===(e=this.opts.cookieJar)||void 0===e||e.addCookies(n),"withCredentials"in n&&(n.withCredentials=this.opts.withCredentials),this.opts.requestTimeout&&(n.timeout=this.opts.requestTimeout),n.onreadystatechange=()=>{var e;3===n.readyState&&(null===(e=this.opts.cookieJar)||void 0===e||e.parseCookies(n)),4===n.readyState&&(200===n.status||1223===n.status?this.onLoad():this.setTimeoutFn((()=>{this.onError("number"==typeof n.status?n.status:0)}),0))},d("xhr data %s",this.data),n.send(this.data)}catch(e){return void this.setTimeoutFn((()=>{this.onError(e)}),0)}"undefined"!=typeof document&&(this.index=g.requestsCount++,g.requests[this.index]=this)}onError(e){this.emitReserved("error",e,this.xhr),this.cleanup(!0)}cleanup(e){if(void 0!==this.xhr&&null!==this.xhr){if(this.xhr.onreadystatechange=f,e)try{this.xhr.abort()}catch(e){}"undefined"!=typeof document&&delete g.requests[this.index],this.xhr=null}}onLoad(){const e=this.xhr.responseText;null!==e&&(this.emitReserved("data",e),this.emitReserved("success"),this.cleanup())}abort(){this.cleanup()}}if(t.Request=g,g.requestsCount=0,g.requests={},"undefined"!=typeof document)if("function"==typeof attachEvent)attachEvent("onunload",y);else if("function"==typeof addEventListener){const e="onpagehide"in h.globalThisShim?"pagehide":"unload";addEventListener(e,y,!1)}function y(){for(let e in g.requests)g.requests.hasOwnProperty(e)&&g.requests[e].abort()}},552:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.defaultBinaryType=t.usingBrowserWebSocket=t.WebSocket=t.nextTick=void 0;const r=n(242);t.nextTick="function"==typeof Promise&&"function"==typeof Promise.resolve?e=>Promise.resolve().then(e):(e,t)=>t(e,0),t.WebSocket=r.globalThisShim.WebSocket||r.globalThisShim.MozWebSocket,t.usingBrowserWebSocket=!0,t.defaultBinaryType="arraybuffer"},308:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.WS=void 0;const s=n(870),o=n(726),i=n(622),a=n(552),c=r(n(227)),l=n(373),u=(0,c.default)("engine.io-client:websocket"),h="undefined"!=typeof navigator&&"string"==typeof navigator.product&&"reactnative"===navigator.product.toLowerCase();class d extends s.Transport{constructor(e){super(e),this.supportsBinary=!e.forceBase64}get name(){return"websocket"}doOpen(){if(!this.check())return;const e=this.uri(),t=this.opts.protocols,n=h?{}:(0,i.pick)(this.opts,"agent","perMessageDeflate","pfx","key","passphrase","cert","ca","ciphers","rejectUnauthorized","localAddress","protocolVersion","origin","maxPayload","family","checkServerIdentity");this.opts.extraHeaders&&(n.headers=this.opts.extraHeaders);try{this.ws=a.usingBrowserWebSocket&&!h?t?new a.WebSocket(e,t):new a.WebSocket(e):new a.WebSocket(e,t,n)}catch(e){return this.emitReserved("error",e)}this.ws.binaryType=this.socket.binaryType,this.addEventListeners()}addEventListeners(){this.ws.onopen=()=>{this.opts.autoUnref&&this.ws._socket.unref(),this.onOpen()},this.ws.onclose=e=>this.onClose({description:"websocket connection closed",context:e}),this.ws.onmessage=e=>this.onData(e.data),this.ws.onerror=e=>this.onError("websocket error",e)}write(e){this.writable=!1;for(let t=0;t{const t={};!a.usingBrowserWebSocket&&(n.options&&(t.compress=n.options.compress),this.opts.perMessageDeflate)&&("string"==typeof e?Buffer.byteLength(e):e.length){this.writable=!0,this.emitReserved("drain")}),this.setTimeoutFn)}))}}doClose(){void 0!==this.ws&&(this.ws.close(),this.ws=null)}uri(){const e=this.opts.secure?"wss":"ws",t=this.query||{};return this.opts.timestampRequests&&(t[this.opts.timestampParam]=(0,o.yeast)()),this.supportsBinary||(t.b64=1),this.createUri(e,t)}check(){return!!a.WebSocket}}t.WS=d},20:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.WT=void 0;const s=n(870),o=n(552),i=n(373),a=(0,r(n(227)).default)("engine.io-client:webtransport");class c extends s.Transport{get name(){return"webtransport"}doOpen(){"function"==typeof WebTransport&&(this.transport=new WebTransport(this.createUri("https"),this.opts.transportOptions[this.name]),this.transport.closed.then((()=>{a("transport closed gracefully"),this.onClose()})).catch((e=>{a("transport closed due to %s",e),this.onError("webtransport error",e)})),this.transport.ready.then((()=>{this.transport.createBidirectionalStream().then((e=>{const t=(0,i.createPacketDecoderStream)(Number.MAX_SAFE_INTEGER,this.socket.binaryType),n=e.readable.pipeThrough(t).getReader(),r=(0,i.createPacketEncoderStream)();r.readable.pipeTo(e.writable),this.writer=r.writable.getWriter();const s=()=>{n.read().then((({done:e,value:t})=>{e?a("session is closed"):(a("received chunk: %o",t),this.onPacket(t),s())})).catch((e=>{a("an error occurred while reading: %s",e)}))};s();const o={type:"open"};this.query.sid&&(o.data=`{"sid":"${this.query.sid}"}`),this.writer.write(o).then((()=>this.onOpen()))}))})))}write(e){this.writable=!1;for(let t=0;t{r&&(0,o.nextTick)((()=>{this.writable=!0,this.emitReserved("drain")}),this.setTimeoutFn)}))}}doClose(){var e;null===(e=this.transport)||void 0===e||e.close()}}t.WT=c},666:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.createCookieJar=t.XHR=void 0;const r=n(419),s=n(242);t.XHR=function(e){const t=e.xdomain;try{if("undefined"!=typeof XMLHttpRequest&&(!t||r.hasCORS))return new XMLHttpRequest}catch(e){}if(!t)try{return new(s.globalThisShim[["Active"].concat("Object").join("X")])("Microsoft.XMLHTTP")}catch(e){}},t.createCookieJar=function(){}},622:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.byteLength=t.installTimerFunctions=t.pick=void 0;const r=n(242);t.pick=function(e,...t){return t.reduce(((t,n)=>(e.hasOwnProperty(n)&&(t[n]=e[n]),t)),{})};const s=r.globalThisShim.setTimeout,o=r.globalThisShim.clearTimeout;t.installTimerFunctions=function(e,t){t.useNativeTimers?(e.setTimeoutFn=s.bind(r.globalThisShim),e.clearTimeoutFn=o.bind(r.globalThisShim)):(e.setTimeoutFn=r.globalThisShim.setTimeout.bind(r.globalThisShim),e.clearTimeoutFn=r.globalThisShim.clearTimeout.bind(r.globalThisShim))},t.byteLength=function(e){return"string"==typeof e?function(e){let t=0,n=0;for(let r=0,s=e.length;r=57344?n+=3:(r++,n+=4);return n}(e):Math.ceil(1.33*(e.byteLength||e.size))}},87:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.ERROR_PACKET=t.PACKET_TYPES_REVERSE=t.PACKET_TYPES=void 0;const n=Object.create(null);t.PACKET_TYPES=n,n.open="0",n.close="1",n.ping="2",n.pong="3",n.message="4",n.upgrade="5",n.noop="6";const r=Object.create(null);t.PACKET_TYPES_REVERSE=r,Object.keys(n).forEach((e=>{r[n[e]]=e})),t.ERROR_PACKET={type:"error",data:"parser error"}},469:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.decode=t.encode=void 0;const n="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",r="undefined"==typeof Uint8Array?[]:new Uint8Array(256);for(let e=0;e<64;e++)r[n.charCodeAt(e)]=e;t.encode=e=>{let t,r=new Uint8Array(e),s=r.length,o="";for(t=0;t>2],o+=n[(3&r[t])<<4|r[t+1]>>4],o+=n[(15&r[t+1])<<2|r[t+2]>>6],o+=n[63&r[t+2]];return s%3==2?o=o.substring(0,o.length-1)+"=":s%3==1&&(o=o.substring(0,o.length-2)+"=="),o},t.decode=e=>{let t,n,s,o,i,a=.75*e.length,c=e.length,l=0;"="===e[e.length-1]&&(a--,"="===e[e.length-2]&&a--);const u=new ArrayBuffer(a),h=new Uint8Array(u);for(t=0;t>4,h[l++]=(15&s)<<4|o>>2,h[l++]=(3&o)<<6|63&i;return u}},572:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.decodePacket=void 0;const r=n(87),s=n(469),o="function"==typeof ArrayBuffer;t.decodePacket=(e,t)=>{if("string"!=typeof e)return{type:"message",data:a(e,t)};const n=e.charAt(0);return"b"===n?{type:"message",data:i(e.substring(1),t)}:r.PACKET_TYPES_REVERSE[n]?e.length>1?{type:r.PACKET_TYPES_REVERSE[n],data:e.substring(1)}:{type:r.PACKET_TYPES_REVERSE[n]}:r.ERROR_PACKET};const i=(e,t)=>{if(o){const n=(0,s.decode)(e);return a(n,t)}return{base64:!0,data:e}},a=(e,t)=>"blob"===t?e instanceof Blob?e:new Blob([e]):e instanceof ArrayBuffer?e:e.buffer},908:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.encodePacket=t.encodePacketToBinary=void 0;const r=n(87),s="function"==typeof Blob||"undefined"!=typeof Blob&&"[object BlobConstructor]"===Object.prototype.toString.call(Blob),o="function"==typeof ArrayBuffer,i=e=>"function"==typeof ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer instanceof ArrayBuffer,a=({type:e,data:t},n,a)=>s&&t instanceof Blob?n?a(t):c(t,a):o&&(t instanceof ArrayBuffer||i(t))?n?a(t):c(new Blob([t]),a):a(r.PACKET_TYPES[e]+(t||""));t.encodePacket=a;const c=(e,t)=>{const n=new FileReader;return n.onload=function(){const e=n.result.split(",")[1];t("b"+(e||""))},n.readAsDataURL(e)};function l(e){return e instanceof Uint8Array?e:e instanceof ArrayBuffer?new Uint8Array(e):new Uint8Array(e.buffer,e.byteOffset,e.byteLength)}let u;t.encodePacketToBinary=function(e,t){return s&&e.data instanceof Blob?e.data.arrayBuffer().then(l).then(t):o&&(e.data instanceof ArrayBuffer||i(e.data))?t(l(e.data)):void a(e,!1,(e=>{u||(u=new TextEncoder),t(u.encode(e))}))}},373:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.decodePayload=t.decodePacket=t.encodePayload=t.encodePacket=t.protocol=t.createPacketDecoderStream=t.createPacketEncoderStream=void 0;const r=n(908);Object.defineProperty(t,"encodePacket",{enumerable:!0,get:function(){return r.encodePacket}});const s=n(572);Object.defineProperty(t,"decodePacket",{enumerable:!0,get:function(){return s.decodePacket}});const o=n(87),i=String.fromCharCode(30);let a;function c(e){return e.reduce(((e,t)=>e+t.length),0)}function l(e,t){if(e[0].length===t)return e.shift();const n=new Uint8Array(t);let r=0;for(let s=0;s{const n=e.length,s=new Array(n);let o=0;e.forEach(((e,a)=>{(0,r.encodePacket)(e,!1,(e=>{s[a]=e,++o===n&&t(s.join(i))}))}))},t.decodePayload=(e,t)=>{const n=e.split(i),r=[];for(let e=0;e{const r=n.length;let s;if(r<126)s=new Uint8Array(1),new DataView(s.buffer).setUint8(0,r);else if(r<65536){s=new Uint8Array(3);const e=new DataView(s.buffer);e.setUint8(0,126),e.setUint16(1,r)}else{s=new Uint8Array(9);const e=new DataView(s.buffer);e.setUint8(0,127),e.setBigUint64(1,BigInt(r))}e.data&&"string"!=typeof e.data&&(s[0]|=128),t.enqueue(s),t.enqueue(n)}))}})},t.createPacketDecoderStream=function(e,t){a||(a=new TextDecoder);const n=[];let r=0,i=-1,u=!1;return new TransformStream({transform(h,d){for(n.push(h);;){if(0===r){if(c(n)<1)break;const e=l(n,1);u=128==(128&e[0]),i=127&e[0],r=i<126?3:126===i?1:2}else if(1===r){if(c(n)<2)break;const e=l(n,2);i=new DataView(e.buffer,e.byteOffset,e.length).getUint16(0),r=3}else if(2===r){if(c(n)<8)break;const e=l(n,8),t=new DataView(e.buffer,e.byteOffset,e.length),s=t.getUint32(0);if(s>Math.pow(2,21)-1){d.enqueue(o.ERROR_PACKET);break}i=s*Math.pow(2,32)+t.getUint32(4),r=3}else{if(c(n)e){d.enqueue(o.ERROR_PACKET);break}}}})},t.protocol=4},159:(e,t)=>{"use strict";function n(e){e=e||{},this.ms=e.min||100,this.max=e.max||1e4,this.factor=e.factor||2,this.jitter=e.jitter>0&&e.jitter<=1?e.jitter:0,this.attempts=0}Object.defineProperty(t,"__esModule",{value:!0}),t.Backoff=void 0,t.Backoff=n,n.prototype.duration=function(){var e=this.ms*Math.pow(this.factor,this.attempts++);if(this.jitter){var t=Math.random(),n=Math.floor(t*this.jitter*e);e=0==(1&Math.floor(10*t))?e-n:e+n}return 0|Math.min(e,this.max)},n.prototype.reset=function(){this.attempts=0},n.prototype.setMin=function(e){this.ms=e},n.prototype.setMax=function(e){this.max=e},n.prototype.setJitter=function(e){this.jitter=e}},46:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.default=t.connect=t.io=t.Socket=t.Manager=t.protocol=void 0;const s=n(84),o=n(168);Object.defineProperty(t,"Manager",{enumerable:!0,get:function(){return o.Manager}});const i=n(312);Object.defineProperty(t,"Socket",{enumerable:!0,get:function(){return i.Socket}});const a=r(n(227)).default("socket.io-client"),c={};function l(e,t){"object"==typeof e&&(t=e,e=void 0),t=t||{};const n=s.url(e,t.path||"/socket.io"),r=n.source,i=n.id,l=n.path,u=c[i]&&l in c[i].nsps;let h;return t.forceNew||t["force new connection"]||!1===t.multiplex||u?(a("ignoring socket cache for %s",r),h=new o.Manager(r,t)):(c[i]||(a("new io instance for %s",r),c[i]=new o.Manager(r,t)),h=c[i]),n.query&&!t.query&&(t.query=n.queryKey),h.socket(n.path,t)}t.io=l,t.connect=l,t.default=l,Object.assign(l,{Manager:o.Manager,Socket:i.Socket,io:l,connect:l});var u=n(514);Object.defineProperty(t,"protocol",{enumerable:!0,get:function(){return u.protocol}}),e.exports=l},168:function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n),Object.defineProperty(e,r,{enumerable:!0,get:function(){return t[n]}})}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),s=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),o=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return s(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Manager=void 0;const a=n(679),c=n(312),l=o(n(514)),u=n(149),h=n(159),d=n(260),f=i(n(227)).default("socket.io-client:manager");class p extends d.Emitter{constructor(e,t){var n;super(),this.nsps={},this.subs=[],e&&"object"==typeof e&&(t=e,e=void 0),(t=t||{}).path=t.path||"/socket.io",this.opts=t,a.installTimerFunctions(this,t),this.reconnection(!1!==t.reconnection),this.reconnectionAttempts(t.reconnectionAttempts||1/0),this.reconnectionDelay(t.reconnectionDelay||1e3),this.reconnectionDelayMax(t.reconnectionDelayMax||5e3),this.randomizationFactor(null!==(n=t.randomizationFactor)&&void 0!==n?n:.5),this.backoff=new h.Backoff({min:this.reconnectionDelay(),max:this.reconnectionDelayMax(),jitter:this.randomizationFactor()}),this.timeout(null==t.timeout?2e4:t.timeout),this._readyState="closed",this.uri=e;const r=t.parser||l;this.encoder=new r.Encoder,this.decoder=new r.Decoder,this._autoConnect=!1!==t.autoConnect,this._autoConnect&&this.open()}reconnection(e){return arguments.length?(this._reconnection=!!e,this):this._reconnection}reconnectionAttempts(e){return void 0===e?this._reconnectionAttempts:(this._reconnectionAttempts=e,this)}reconnectionDelay(e){var t;return void 0===e?this._reconnectionDelay:(this._reconnectionDelay=e,null===(t=this.backoff)||void 0===t||t.setMin(e),this)}randomizationFactor(e){var t;return void 0===e?this._randomizationFactor:(this._randomizationFactor=e,null===(t=this.backoff)||void 0===t||t.setJitter(e),this)}reconnectionDelayMax(e){var t;return void 0===e?this._reconnectionDelayMax:(this._reconnectionDelayMax=e,null===(t=this.backoff)||void 0===t||t.setMax(e),this)}timeout(e){return arguments.length?(this._timeout=e,this):this._timeout}maybeReconnectOnOpen(){!this._reconnecting&&this._reconnection&&0===this.backoff.attempts&&this.reconnect()}open(e){if(f("readyState %s",this._readyState),~this._readyState.indexOf("open"))return this;f("opening %s",this.uri),this.engine=new a.Socket(this.uri,this.opts);const t=this.engine,n=this;this._readyState="opening",this.skipReconnect=!1;const r=u.on(t,"open",(function(){n.onopen(),e&&e()})),s=t=>{f("error"),this.cleanup(),this._readyState="closed",this.emitReserved("error",t),e?e(t):this.maybeReconnectOnOpen()},o=u.on(t,"error",s);if(!1!==this._timeout){const e=this._timeout;f("connect attempt will timeout after %d",e);const n=this.setTimeoutFn((()=>{f("connect attempt timed out after %d",e),r(),s(new Error("timeout")),t.close()}),e);this.opts.autoUnref&&n.unref(),this.subs.push((()=>{this.clearTimeoutFn(n)}))}return this.subs.push(r),this.subs.push(o),this}connect(e){return this.open(e)}onopen(){f("open"),this.cleanup(),this._readyState="open",this.emitReserved("open");const e=this.engine;this.subs.push(u.on(e,"ping",this.onping.bind(this)),u.on(e,"data",this.ondata.bind(this)),u.on(e,"error",this.onerror.bind(this)),u.on(e,"close",this.onclose.bind(this)),u.on(this.decoder,"decoded",this.ondecoded.bind(this)))}onping(){this.emitReserved("ping")}ondata(e){try{this.decoder.add(e)}catch(e){this.onclose("parse error",e)}}ondecoded(e){a.nextTick((()=>{this.emitReserved("packet",e)}),this.setTimeoutFn)}onerror(e){f("error",e),this.emitReserved("error",e)}socket(e,t){let n=this.nsps[e];return n?this._autoConnect&&!n.active&&n.connect():(n=new c.Socket(this,e,t),this.nsps[e]=n),n}_destroy(e){const t=Object.keys(this.nsps);for(const e of t)if(this.nsps[e].active)return void f("socket %s is still active, skipping close",e);this._close()}_packet(e){f("writing packet %j",e);const t=this.encoder.encode(e);for(let n=0;ne())),this.subs.length=0,this.decoder.destroy()}_close(){f("disconnect"),this.skipReconnect=!0,this._reconnecting=!1,this.onclose("forced close"),this.engine&&this.engine.close()}disconnect(){return this._close()}onclose(e,t){f("closed due to %s",e),this.cleanup(),this.backoff.reset(),this._readyState="closed",this.emitReserved("close",e,t),this._reconnection&&!this.skipReconnect&&this.reconnect()}reconnect(){if(this._reconnecting||this.skipReconnect)return this;const e=this;if(this.backoff.attempts>=this._reconnectionAttempts)f("reconnect failed"),this.backoff.reset(),this.emitReserved("reconnect_failed"),this._reconnecting=!1;else{const t=this.backoff.duration();f("will wait %dms before reconnect attempt",t),this._reconnecting=!0;const n=this.setTimeoutFn((()=>{e.skipReconnect||(f("attempting reconnect"),this.emitReserved("reconnect_attempt",e.backoff.attempts),e.skipReconnect||e.open((t=>{t?(f("reconnect attempt error"),e._reconnecting=!1,e.reconnect(),this.emitReserved("reconnect_error",t)):(f("reconnect success"),e.onreconnect())})))}),t);this.opts.autoUnref&&n.unref(),this.subs.push((()=>{this.clearTimeoutFn(n)}))}}onreconnect(){const e=this.backoff.attempts;this._reconnecting=!1,this.backoff.reset(),this.emitReserved("reconnect",e)}}t.Manager=p},149:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.on=void 0,t.on=function(e,t,n){return e.on(t,n),function(){e.off(t,n)}}},312:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Socket=void 0;const s=n(514),o=n(149),i=n(260),a=r(n(227)).default("socket.io-client:socket"),c=Object.freeze({connect:1,connect_error:1,disconnect:1,disconnecting:1,newListener:1,removeListener:1});class l extends i.Emitter{constructor(e,t,n){super(),this.connected=!1,this.recovered=!1,this.receiveBuffer=[],this.sendBuffer=[],this._queue=[],this._queueSeq=0,this.ids=0,this.acks={},this.flags={},this.io=e,this.nsp=t,n&&n.auth&&(this.auth=n.auth),this._opts=Object.assign({},n),this.io._autoConnect&&this.open()}get disconnected(){return!this.connected}subEvents(){if(this.subs)return;const e=this.io;this.subs=[o.on(e,"open",this.onopen.bind(this)),o.on(e,"packet",this.onpacket.bind(this)),o.on(e,"error",this.onerror.bind(this)),o.on(e,"close",this.onclose.bind(this))]}get active(){return!!this.subs}connect(){return this.connected||(this.subEvents(),this.io._reconnecting||this.io.open(),"open"===this.io._readyState&&this.onopen()),this}open(){return this.connect()}send(...e){return e.unshift("message"),this.emit.apply(this,e),this}emit(e,...t){if(c.hasOwnProperty(e))throw new Error('"'+e.toString()+'" is a reserved event name');if(t.unshift(e),this._opts.retries&&!this.flags.fromQueue&&!this.flags.volatile)return this._addToQueue(t),this;const n={type:s.PacketType.EVENT,data:t,options:{}};if(n.options.compress=!1!==this.flags.compress,"function"==typeof t[t.length-1]){const e=this.ids++;a("emitting packet with ack id %d",e);const r=t.pop();this._registerAckCallback(e,r),n.id=e}const r=this.io.engine&&this.io.engine.transport&&this.io.engine.transport.writable;return!this.flags.volatile||r&&this.connected?this.connected?(this.notifyOutgoingListeners(n),this.packet(n)):this.sendBuffer.push(n):a("discard packet as the transport is not currently writable"),this.flags={},this}_registerAckCallback(e,t){var n;const r=null!==(n=this.flags.timeout)&&void 0!==n?n:this._opts.ackTimeout;if(void 0===r)return void(this.acks[e]=t);const s=this.io.setTimeoutFn((()=>{delete this.acks[e];for(let t=0;t{this.io.clearTimeoutFn(s),t.apply(this,[null,...e])}}emitWithAck(e,...t){const n=void 0!==this.flags.timeout||void 0!==this._opts.ackTimeout;return new Promise(((r,s)=>{t.push(((e,t)=>n?e?s(e):r(t):r(e))),this.emit(e,...t)}))}_addToQueue(e){let t;"function"==typeof e[e.length-1]&&(t=e.pop());const n={id:this._queueSeq++,tryCount:0,pending:!1,args:e,flags:Object.assign({fromQueue:!0},this.flags)};e.push(((e,...r)=>{if(n===this._queue[0])return null!==e?n.tryCount>this._opts.retries&&(a("packet [%d] is discarded after %d tries",n.id,n.tryCount),this._queue.shift(),t&&t(e)):(a("packet [%d] was successfully sent",n.id),this._queue.shift(),t&&t(null,...r)),n.pending=!1,this._drainQueue()})),this._queue.push(n),this._drainQueue()}_drainQueue(e=!1){if(a("draining queue"),!this.connected||0===this._queue.length)return;const t=this._queue[0];!t.pending||e?(t.pending=!0,t.tryCount++,a("sending packet [%d] (try n°%d)",t.id,t.tryCount),this.flags=t.flags,this.emit.apply(this,t.args)):a("packet [%d] has already been sent and is waiting for an ack",t.id)}packet(e){e.nsp=this.nsp,this.io._packet(e)}onopen(){a("transport is open - connecting"),"function"==typeof this.auth?this.auth((e=>{this._sendConnectPacket(e)})):this._sendConnectPacket(this.auth)}_sendConnectPacket(e){this.packet({type:s.PacketType.CONNECT,data:this._pid?Object.assign({pid:this._pid,offset:this._lastOffset},e):e})}onerror(e){this.connected||this.emitReserved("connect_error",e)}onclose(e,t){a("close (%s)",e),this.connected=!1,delete this.id,this.emitReserved("disconnect",e,t)}onpacket(e){if(e.nsp===this.nsp)switch(e.type){case s.PacketType.CONNECT:e.data&&e.data.sid?this.onconnect(e.data.sid,e.data.pid):this.emitReserved("connect_error",new Error("It seems you are trying to reach a Socket.IO server in v2.x with a v3.x client, but they are not compatible (more information here: https://socket.io/docs/v3/migrating-from-2-x-to-3-0/)"));break;case s.PacketType.EVENT:case s.PacketType.BINARY_EVENT:this.onevent(e);break;case s.PacketType.ACK:case s.PacketType.BINARY_ACK:this.onack(e);break;case s.PacketType.DISCONNECT:this.ondisconnect();break;case s.PacketType.CONNECT_ERROR:this.destroy();const t=new Error(e.data.message);t.data=e.data.data,this.emitReserved("connect_error",t)}}onevent(e){const t=e.data||[];a("emitting event %j",t),null!=e.id&&(a("attaching ack callback to event"),t.push(this.ack(e.id))),this.connected?this.emitEvent(t):this.receiveBuffer.push(Object.freeze(t))}emitEvent(e){if(this._anyListeners&&this._anyListeners.length){const t=this._anyListeners.slice();for(const n of t)n.apply(this,e)}super.emit.apply(this,e),this._pid&&e.length&&"string"==typeof e[e.length-1]&&(this._lastOffset=e[e.length-1])}ack(e){const t=this;let n=!1;return function(...r){n||(n=!0,a("sending ack %j",r),t.packet({type:s.PacketType.ACK,id:e,data:r}))}}onack(e){const t=this.acks[e.id];"function"==typeof t?(a("calling ack %s with %j",e.id,e.data),t.apply(this,e.data),delete this.acks[e.id]):a("bad ack %s",e.id)}onconnect(e,t){a("socket connected with id %s",e),this.id=e,this.recovered=t&&this._pid===t,this._pid=t,this.connected=!0,this.emitBuffered(),this.emitReserved("connect"),this._drainQueue(!0)}emitBuffered(){this.receiveBuffer.forEach((e=>this.emitEvent(e))),this.receiveBuffer=[],this.sendBuffer.forEach((e=>{this.notifyOutgoingListeners(e),this.packet(e)})),this.sendBuffer=[]}ondisconnect(){a("server disconnect (%s)",this.nsp),this.destroy(),this.onclose("io server disconnect")}destroy(){this.subs&&(this.subs.forEach((e=>e())),this.subs=void 0),this.io._destroy(this)}disconnect(){return this.connected&&(a("performing disconnect (%s)",this.nsp),this.packet({type:s.PacketType.DISCONNECT})),this.destroy(),this.connected&&this.onclose("io client disconnect"),this}close(){return this.disconnect()}compress(e){return this.flags.compress=e,this}get volatile(){return this.flags.volatile=!0,this}timeout(e){return this.flags.timeout=e,this}onAny(e){return this._anyListeners=this._anyListeners||[],this._anyListeners.push(e),this}prependAny(e){return this._anyListeners=this._anyListeners||[],this._anyListeners.unshift(e),this}offAny(e){if(!this._anyListeners)return this;if(e){const t=this._anyListeners;for(let n=0;n{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.reconstructPacket=t.deconstructPacket=void 0;const r=n(665);function s(e,t){if(!e)return e;if((0,r.isBinary)(e)){const n={_placeholder:!0,num:t.length};return t.push(e),n}if(Array.isArray(e)){const n=new Array(e.length);for(let r=0;r=0&&e.num{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Decoder=t.Encoder=t.PacketType=t.protocol=void 0;const r=n(260),s=n(269),o=n(665),i=(0,n(227).default)("socket.io-parser"),a=["connect","connect_error","disconnect","disconnecting","newListener","removeListener"];var c;function l(e){return"[object Object]"===Object.prototype.toString.call(e)}t.protocol=5,function(e){e[e.CONNECT=0]="CONNECT",e[e.DISCONNECT=1]="DISCONNECT",e[e.EVENT=2]="EVENT",e[e.ACK=3]="ACK",e[e.CONNECT_ERROR=4]="CONNECT_ERROR",e[e.BINARY_EVENT=5]="BINARY_EVENT",e[e.BINARY_ACK=6]="BINARY_ACK"}(c=t.PacketType||(t.PacketType={})),t.Encoder=class{constructor(e){this.replacer=e}encode(e){return i("encoding packet %j",e),e.type!==c.EVENT&&e.type!==c.ACK||!(0,o.hasBinary)(e)?[this.encodeAsString(e)]:this.encodeAsBinary({type:e.type===c.EVENT?c.BINARY_EVENT:c.BINARY_ACK,nsp:e.nsp,data:e.data,id:e.id})}encodeAsString(e){let t=""+e.type;return e.type!==c.BINARY_EVENT&&e.type!==c.BINARY_ACK||(t+=e.attachments+"-"),e.nsp&&"/"!==e.nsp&&(t+=e.nsp+","),null!=e.id&&(t+=e.id),null!=e.data&&(t+=JSON.stringify(e.data,this.replacer)),i("encoded %j as %s",e,t),t}encodeAsBinary(e){const t=(0,s.deconstructPacket)(e),n=this.encodeAsString(t.packet),r=t.buffers;return r.unshift(n),r}};class u extends r.Emitter{constructor(e){super(),this.reviver=e}add(e){let t;if("string"==typeof e){if(this.reconstructor)throw new Error("got plaintext data when reconstructing a packet");t=this.decodeString(e);const n=t.type===c.BINARY_EVENT;n||t.type===c.BINARY_ACK?(t.type=n?c.EVENT:c.ACK,this.reconstructor=new h(t),0===t.attachments&&super.emitReserved("decoded",t)):super.emitReserved("decoded",t)}else{if(!(0,o.isBinary)(e)&&!e.base64)throw new Error("Unknown type: "+e);if(!this.reconstructor)throw new Error("got binary data when not reconstructing a packet");t=this.reconstructor.takeBinaryData(e),t&&(this.reconstructor=null,super.emitReserved("decoded",t))}}decodeString(e){let t=0;const n={type:Number(e.charAt(0))};if(void 0===c[n.type])throw new Error("unknown packet type "+n.type);if(n.type===c.BINARY_EVENT||n.type===c.BINARY_ACK){const r=t+1;for(;"-"!==e.charAt(++t)&&t!=e.length;);const s=e.substring(r,t);if(s!=Number(s)||"-"!==e.charAt(t))throw new Error("Illegal attachments");n.attachments=Number(s)}if("/"===e.charAt(t+1)){const r=t+1;for(;++t&&","!==e.charAt(t)&&t!==e.length;);n.nsp=e.substring(r,t)}else n.nsp="/";const r=e.charAt(t+1);if(""!==r&&Number(r)==r){const r=t+1;for(;++t;){const n=e.charAt(t);if(null==n||Number(n)!=n){--t;break}if(t===e.length)break}n.id=Number(e.substring(r,t+1))}if(e.charAt(++t)){const r=this.tryParse(e.substr(t));if(!u.isPayloadValid(n.type,r))throw new Error("invalid payload");n.data=r}return i("decoded %s as %j",e,n),n}tryParse(e){try{return JSON.parse(e,this.reviver)}catch(e){return!1}}static isPayloadValid(e,t){switch(e){case c.CONNECT:return l(t);case c.DISCONNECT:return void 0===t;case c.CONNECT_ERROR:return"string"==typeof t||l(t);case c.EVENT:case c.BINARY_EVENT:return Array.isArray(t)&&("number"==typeof t[0]||"string"==typeof t[0]&&-1===a.indexOf(t[0]));case c.ACK:case c.BINARY_ACK:return Array.isArray(t)}}destroy(){this.reconstructor&&(this.reconstructor.finishedReconstruction(),this.reconstructor=null)}}t.Decoder=u;class h{constructor(e){this.packet=e,this.buffers=[],this.reconPack=e}takeBinaryData(e){if(this.buffers.push(e),this.buffers.length===this.reconPack.attachments){const e=(0,s.reconstructPacket)(this.reconPack,this.buffers);return this.finishedReconstruction(),e}return null}finishedReconstruction(){this.reconPack=null,this.buffers=[]}}},665:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.hasBinary=t.isBinary=void 0;const n="function"==typeof ArrayBuffer,r=Object.prototype.toString,s="function"==typeof Blob||"undefined"!=typeof Blob&&"[object BlobConstructor]"===r.call(Blob),o="function"==typeof File||"undefined"!=typeof File&&"[object FileConstructor]"===r.call(File);function i(e){return n&&(e instanceof ArrayBuffer||(e=>"function"==typeof ArrayBuffer.isView?ArrayBuffer.isView(e):e.buffer instanceof ArrayBuffer)(e))||s&&e instanceof Blob||o&&e instanceof File}t.isBinary=i,t.hasBinary=function e(t,n){if(!t||"object"!=typeof t)return!1;if(Array.isArray(t)){for(let n=0,r=t.length;n{"use strict";function r(e){if(e)return function(e){for(var t in r.prototype)e[t]=r.prototype[t];return e}(e)}n.r(t),n.d(t,{Emitter:()=>r}),r.prototype.on=r.prototype.addEventListener=function(e,t){return this._callbacks=this._callbacks||{},(this._callbacks["$"+e]=this._callbacks["$"+e]||[]).push(t),this},r.prototype.once=function(e,t){function n(){this.off(e,n),t.apply(this,arguments)}return n.fn=t,this.on(e,n),this},r.prototype.off=r.prototype.removeListener=r.prototype.removeAllListeners=r.prototype.removeEventListener=function(e,t){if(this._callbacks=this._callbacks||{},0==arguments.length)return this._callbacks={},this;var n,r=this._callbacks["$"+e];if(!r)return this;if(1==arguments.length)return delete this._callbacks["$"+e],this;for(var s=0;s{for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var r={};return(()=>{"use strict";var e=r;Object.defineProperty(e,"__esModule",{value:!0}),e.validateConfiguration=e.parseConnectionString=e.prepareSql=e.escapeSqlParameter=e.SQLiteCloudRow=e.SQLiteCloudRowset=e.SQLiteCloudError=e.SQLiteCloudConnection=e.Statement=e.Database=void 0;var t=n(751);Object.defineProperty(e,"Database",{enumerable:!0,get:function(){return t.Database}});var s=n(880);Object.defineProperty(e,"Statement",{enumerable:!0,get:function(){return s.Statement}});var o=n(480);Object.defineProperty(e,"SQLiteCloudConnection",{enumerable:!0,get:function(){return o.SQLiteCloudConnection}});var i=n(906);Object.defineProperty(e,"SQLiteCloudError",{enumerable:!0,get:function(){return i.SQLiteCloudError}});var a=n(825);Object.defineProperty(e,"SQLiteCloudRowset",{enumerable:!0,get:function(){return a.SQLiteCloudRowset}}),Object.defineProperty(e,"SQLiteCloudRow",{enumerable:!0,get:function(){return a.SQLiteCloudRow}});var c=n(73);Object.defineProperty(e,"escapeSqlParameter",{enumerable:!0,get:function(){return c.escapeSqlParameter}}),Object.defineProperty(e,"prepareSql",{enumerable:!0,get:function(){return c.prepareSql}}),Object.defineProperty(e,"parseConnectionString",{enumerable:!0,get:function(){return c.parseConnectionString}}),Object.defineProperty(e,"validateConfiguration",{enumerable:!0,get:function(){return c.validateConfiguration}})})(),r})())); \ No newline at end of file diff --git a/scripts/gateway-build.sh b/scripts/gateway-build.sh new file mode 100755 index 0000000..c73afc2 --- /dev/null +++ b/scripts/gateway-build.sh @@ -0,0 +1,15 @@ +#!/bin/bash +# gateway-build.sh - build gateway as self contained executable for linux and macos +# If you get an error executing this script run: +# chmod u+x ./scripts/build.sh + +# navigate to the script's directory +#cd "$(dirname "$0")" + +# build bun's one file binary +mkdir -p ./lib/gateway/public +bun build ./src/gateway/gateway.ts --compile --outfile ./lib/gateway/gateway.out + +# copy the public folder to the build folder +cp -r ./public/* ./lib/gateway/public/ +cp ./package.json ./lib/gateway/ diff --git a/scripts/gateway-upgrade.sh b/scripts/gateway-upgrade.sh new file mode 100755 index 0000000..007cd7f --- /dev/null +++ b/scripts/gateway-upgrade.sh @@ -0,0 +1,19 @@ +# +# upgrade.sh - upload gateway builds to a couple of nodes used for development, restart gateway +# + +# upload ./build/ to test nodes +# frankfurt01, frankfurt02, ny01 +rsync -avz -e "ssh -i ~/.ssh/id_ed25519" ./build/ sqlitecloud@y8pbz99zp.sqlite.cloud:gateway +rsync -avz -e "ssh -i ~/.ssh/id_ed25519" ./build/ sqlitecloud@oggdnp3zm.sqlite.cloud:gateway + +# connect to nodes using ssh key +# ssh -i ~/.ssh/id_ed25519 sqlitecloud@y8pbz99zp.sqlite.cloud +# ssh -i ~/.ssh/id_ed25519 sqlitecloud@og0wjec-m.sqlite.cloud + +# restart gateway (locally) +# pkill gateway-linux-x; cd /home/sqlitecloud/gateway; nohup ./gateway-linux-x64.out + +# restart gateway (remotely) +ssh -i ~/.ssh/id_ed25519 sqlitecloud@y8pbz99zp.sqlite.cloud 'pkill gateway-linux-x; cd /home/sqlitecloud/gateway; nohup ./gateway-linux-x64.out > /dev/null 2>&1 &' +ssh -i ~/.ssh/id_ed25519 sqlitecloud@oggdnp3zm.sqlite.cloud 'pkill gateway-linux-x; cd /home/sqlitecloud/gateway; nohup ./gateway-linux-x64.out > /dev/null 2>&1 &' \ No newline at end of file diff --git a/scripts/sqlitecloud-cli b/scripts/sqlitecloud-cli new file mode 100755 index 0000000000000000000000000000000000000000..8125c004e1a7e25c986d96844391a395a5894a90 GIT binary patch literal 2713232 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%0D5OUZB4Y%VY$T!p%Vr%f9fOVrw#J!=} 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 -27`@J}h3VU)s3mlbQK0 zX)JU}dl~OecBMgvo!g(Ver114O`iw{8ODMxY7E<+G;v^2rKV1ZrW($lH1)j1HR-Y` z-5D11qm}d-4c8trA3$xleg3cRhcL#TxzY|DwCHX;x@|xAbF=qf*q&Q zKXixub#AT1BK$nM&|9*%R`Sxfcj*MLt=1d=)yy3*V(9M^{bl(Z-A(iyX+22@xag|l zqU6+xq0DTt>^$?M-1>we-flx{EKRocd($UE(5dN_saX?vualF0G*z}Fb^H0=E77VA zw_TE&&U-Lb8_}h}s3%e(xhq_oj)X8OXso0HW5c7TUlCrXvtu@CO`>8gZIvTKv}S$c z0-gamKk&jk+8*jyb?D{^8m&;HXCDRsvC1dg`zZc^im%I?zvQBcMTrr%;F!MS(I(~l zQ6V=*CQTa~ZV`Pwx>R_3<14n}!_Boeg0*$&d2qxIf5H{)3+aaQB|MF_?{~(;#mim# zbxJRB>GPD{d%4R0RLe+N8Tl2b)wwAxLhp|)%~r@)yh!r4_&T6 zR_;A6S8GAJO)gi9K)GM$XWZKvU)&+$SAkEe06AAF$K>~kpN z@USV5r>B)>6>g>RWW18up0T9a9Zv8lnx`V!;&|%#xHq%3dJD^g=d8xW(qlgwYk#Sj zqj6%Iq*1jDx&G#jW00#NDErKL3P|LEy=0 z=Z7*ADVuXM7?^L1H^2Cw!ZK0v>m`44O*Zu2lX8C0U2Jq1_TzT=ekdiDoV*_HumS)u z%wD3yxVNomTkWX_iH#Wdp72kcW5S+72EBQt0QAq$MWl5ZfBj9D13KV?)tgojI+O6W ziIcGHUWFC&3cvgs6Q7nSl(aYZ-a2o!7NjQPJH!Og=S&%)$lqqKKh?h0uGIGnO$6+~ zkben|R|yn_d;PO54I|n6O;!e2vPxb}N@n7?W0RJo0 z#C1%&w>CW$XT)%PZE{yz)!K)rFpR405QQ9+AN`pD+X=G?W)Wl`N<62dAMK(oN#15t92h`2DX4;hAn(Gp2S!LsDD?k zn?I53B4o;xekH$PyZCOjYb*Gke$rF+GQzG3zOjCWrEKuYK2n1NK8=L}DoNPYN?;|* zMF1|w=%FA#*03p7(>Z^)cYCRKAl|^=_NrHMQO&)_iC7v-S3IFH#)?mo{)SN1sjJFh zu5;Fq9N3`t+v&*LVFp+R_qWFNGjXiAje`Ey)yJs}Sc;vMoz%zHqZKd88_VHfs} z#dXE+!VVQpQ%j6=MEMn|Ddmw1_>a7wz7^-0+ssL$#~+m&+y5gx*Dh74@M)!Za>l&- zu2$WK9a_Bc;xlQbDVn}96ic;;(xQ`YEL#YNUu{2duU!iOk*u#1-~Tf{Z>lI#>v?J_GXcNR*Ss-IXu$= z!{+^i(K)yDu5imoXq1EL;&oc(+KA`63lrFk(Q0zF#=x8^0q%YG<-2eGvf zPnL{lTnSd`+@*Eixq9M3PrwL-=%feKM!5MzO}-x1Cc?B_V4cluEOnouxMq9f&GKpP z1#cHoKGySqeduc8G3H^4(o(BULF@IR0k?#jjkgp)!+wmXGXB4b;qgh)@ds`@l?#ts z%41c4vYjpDi~X^hjki9BB_6yH+fkOWn*jV0#ozb@SjQx$$l8`OwHN5W!0)u8X42$J?l3=Wm)y!-f)Wm{pb>W}UCJXbH9RxjJ()dpK zeZkRbcxB2llN(_slFe4k673{PqCDcNS2NDTLl-hxI6i1T{&vkr%!1uf&gnh<{Vu5S zU*VV{G}eiTJfmk#{8w+zkDlZ1*H9wN&HNFH%bo8mxaQo<3X-(H5U=$9m%~N=F61hq z&&4bK7D;GL&aGEuh7bJAe$CB{z9 z<~`%IM{6z>_8ZTI-A+GPz-}+mifuiPmi*`Iii;j$+WRw&{FHiXWWC!neo7&)TVWP@;|;){9+fDtm;>o~L%wtC#ZO*L;`miEpl_ ziSMBo_R*VFJGDA!L|fOlp&e_#UBCw0QP2W>iNdOry+-@s1kU-46zvF_B>&;rx%bb1 zOjVHc*-?2chwa6MU>C_QUMFIPAMP>Qt0hg7@!8%>3Knh z|HnE50&V$fVGBU2bAV)d|HTav6kZAnbC~!fjRRn3SssA@o8yUvpskHqSg@4M$cKMK zp+(gZi(L2N{S0%__=wGVvUk>^Q#)FO8%9Q)1BQzRXH57T-xo5{Y0Us23e&OFGMg4T zIrjPuHqdahxMiL9fN~&If5&RN@a6bM1XBoi^ule;ZwV^pahbl8te|o)B33wQ! zmRa+zGqpWDXj@^%F)inX(|;!(&_={>?ymT2jR&anduIxjsRu-S;pPth!Z3A_lD=Qy zL#3YO`M+oPGtMQ90|!HndJlY>AJuITp`Zu?fEfCR%>R7qJ~hhzIPbcninxJN-A%Jz zwVzG%QSZfIJXPJ1t$QNLO(7|Hc!a^TQKFi0xZ-V~=%o8KmRpC?{#PDYY)A$*i!jDY zr3F=Gd($DJ;Mph=?*jpXFnu+9m(h$O`N1>f~!{Rp@wD3Q!g?G4$ z$$g<)crhV|>L}s?YwWSi4`>9%b~Vj7w)`%!;m?0w(e(m;H8(R1pa=Cw1NwOQ*K%^| zy(f5wMsfk~Dd-MLS~g^gp^uKpV`H2BRaZI`JjuL5lG>=XgT%br z01~fZaA^`p@c~ha&$}Y*smsI7&yx*JXa}$JemjqkRzVqA-1ke?$f9?(;+3aga==)0 zYAehcCe`<`MaL74F4=cV_`bGKn*_tfeIfE5Qt5DgC$El$dB18km5L%;|KV-p0(0xG zblK_AnhdXZJi)bR12K3@-Xve$Yuk>s?>(E);QX7SL>>ZZ@2|84;NS4M;KceVLEC^a zP>a?h_U^Idi*3Y6!LNn;I_!bcB_y>?0T->volX2k16{kKqgJ9+QAcf?KD@cV@#d~` zeZesRfLklP$^0v)@dF7D_aUg;q?%OP(DnsXXCk`?*oz#K#?!|f`TWtaWU`jXQ8JcJ ztdKfHtgtR+N0@qVmw$J!DMxv#d%+456RmCN%dc?lwn&|g(m(SVT({Yoe#;X(dD{IO z05a10Jz({xPBZO(<{JQ_t!FBW5d!=l=2wIOf9;+@VY}GLe1<~)Wpn{QQVc?yW>^tB z1>>`Uy<`A1Hn2W4-i%xcumMRKDIol4W-?ErVvePTUO0S!AqU-sTdL^7ajC`YM8tW! zMhrl>c)??*Kl8t|z^5LS$arcEOt7CFh2>%Bi-qM`)*rXz$u(1w3znk6owFp|ay_oX z$shy zB3;gLzhNux~P=?YX|~M`7PF zq+8vnY>0c$!7}{uFT5$)bw#WpvC_ml`M-xr(a0 z{omzk@bDF@&PqT0wxyeLr8QMX{i$c}FmM2c2*OQu1nL{ub04ZnXw!WmT@G zL6%qJ_FO+K=X_dO^mY}dvOQd83qvt9arQk=VMJZ zc03%6<^&b(^PvF1)2u<(v?HRSxk|1( zH!nF76rd%!?qKVX#$b1k6A@3$CJ@F73F_`#cV`xM_nllN*PX5D+|=bj{no|+R32;^ zAjY|c6*WhNXt^d=>%_cT?<%Zi)J=DVu)ZT#^Q63*|JoLe&H-w(Gzcgh;GY`;C{Ljl zEj9&Q;7^4Wwc-Z>wZ-;_T+LHe)7xW=db@vTVMRAjxtYk3^=-Mjrw6c#&LV|1wNywB z_?t+3O0L!!R?Fs46-x^%YOV$=8mz-|HP2E_y#=z{-}20x{T6nl9BY@mP?t_WB+CN{_vop9Fl~ z>$eX4d{aMvIq;K5iuU^7cR%xJ*vsS?;-&`+hWE;50D#b}eZ2!br>7l3sxCoZ58tD=sCagdP$Uy_VMvN=TXXWvvEzgAo?q%d$#n># zAlXF1oQy>u>k$@_!t6R8wR^sd7fYE@XXc-5ODV}Q;d*;*@nMi3@z$WzYK^Ba>DTMa zNdlrExZHZ2>^PviCE1%I$=z>EPuJa4G(COIdr%j-^g*2s_7r1Ly5eOpw)>Lw#COM2 z*YuZ4&FhVQB^ufnNsm1dHDiCd^s-*bvm`|^QzT`K^ur!H-(*J#sqvb_i9gjN%)V20 zCFv3bN=I+8R7Iz?SMeIf(94D5geAzNFi&IyM>k*Jj$nEBUj|0A;^@(gvWUjm-Dp5x zC>&5;R)Bvuo>v9`CFu$*E^Iu2I<`9+dYSQDP&l5Kc^)ko4}&g2IMsMw{tx4s$arXP z;#P_cj0a(uKwTq|fDoWtW9dMiGYi?el${;@S4`s)ZaxlSh?y)H|L+IJ|CZSt^|0is zVEoq~HU7b@|Gx)bIWUo^{Es!{Nb=30?${Zwf6S|Gnx6i&$ZY<5iXx9l+{+%%D`)5! z<~D_!6{9ff?QpnBtT3^!05?yW@-N)H58hIU8%=w}+p+Kuy!Td@nge<+gV;MAu^%qJ zb$B&#F}G(wrMKYh>mYHvctc|k#~L_;j%|k?@aMVaF!Y^A55x;^JnZOuBJ>SC>{1FY z@60i0)_@!iB_4phQ6I8~#YW65pQe=(p50e5Ml1#juFk6y-w2p9BU4 z=&wOJ@7cp_jPJn6!%G%%?N_~nW(IMD#zb$AdoROhbk58XYm_shj<1pQM6@b<{eMRs zKx`IvZIf6}=PTGQ3OfHQol@)ENQf;;4ckg^EeC+ay>0&9xWU-+8SC&E+zt>?gd|Rh zp*5n6jPyq80XpeBF}&l7s4`z8u{PFz1bRg`^Ma4nToKjm41Lc|>ZXQ{=_O)vswg&z z2V_r@rQFdc;hh6Q9|Z#<%F@-J!oBXd)b1qHd{PdTl=Jc zK@B9%Q+K9eyoYreffa}E=>Q{oG~@1@NkSpg(^cQFN%7w!#=C06^-uG(IPubYquw)% z_oA#?6z3)bBi-!SAYRt^8D81;xHfW3(QDR*oA)xsm>_OYGxMhp&ZWxp!c_Ik$u<4s z*0jHTR;*`x?CgryVk0(k4;rn`U@S3?cfLt~Hg6z1ny~_y}(*9$A|%BY^Jfk)Efb-WozBM#J@8!X^(*=n-B5PSg@$T`^>K<3Tcq z1396Lu3wdX_aM%sQo;V6;D}%u@4U64Sn=G}x=C|cLW>w>a>0{lHE!1fXKuaMrpKQW zZ+L@c0na!XNtcX{Eq^V%uwpBJ#vZvL`~~3Lu}vwj@n<|%XoLdUJE zu6S|Tc(d;syzjb_u&|(*`>umlC3}3WM@U+mtRQ&Ygh4G3kmdBBgY>@mpGzRqdR-x= zm!fd8;Ij`bv2WaA@YrN(ZaFJz{lDFcvS?1}Rpb+r$6p1HVD*0y-RI3Dq4R9Doco*X z1N)B)BqgHGyxJ1>`!h*Ert-E$M;u68OT#w>4YO3kEisOiIYqlQxOknw8yrJs;f308 zN1grLF|=~uVD|jqzF($rnQ>I(+NOJ77cgSSXOv??w0f+~A=sM(e-Yf*&d zvR5cOWl#a!a(GWRq+`A*d>0?F%aie@?_GRkKk183v3)mrWY(fl1pYrVCa3JB zkLzd!ov-R3UuxzSO)%vziB|VCiwqCzn6)Tus$$h<9VuuO9z9e@-cim;>H*;aVZR*?7qr>ZHt!ZmB=>2Arff1IkOkQ;y$xe;h_loFRkFr318&LMJRTPq(s8?8}zQ%4> zdj=j`C_9t?90w}}4oi2ED=Lw-TynLh1p)DH4L-Gcr8Tfj4WRbpti`TtxqEi|51Wr&VC0eQJp$fqe%>xv)Y&Mj_owFvZ?@DG9dMTMzZ^8~gIv_CaG4hp z4}tlm6w#a)O!kvnSuT&sWEgIKg|IaBS-Ha&s}ySUvQV>Z}q{B7U2c*NP>C+qDq73q+}zA>f#l&x0+GPTj{S7{b8 z$7@+d@#Jc?P?SLPzFNR>!zkq0)xFc#rkC?ON3mn4h_fDyrmU1uawDxJSF7iuaLdm% z3*G}O`NgaTjASLW#XfNne3-;2x98s>h3DJ3s%-pMBt5rJPr2vMeYEDK1sMMr8nQD7 zs46=(fX=NDAQqkw0;kbl^#-6>);=vg@yiIUYGEfEli&&(3Sfr42|NtaZx6r@ct^Oo z73iZi_X{oImOp7Ij#G5^$^dKNVsnYw%ncHa$G~##|A?ws^8-A=%@A#Yf*L(tbg=ty9h`ge@R5Y^}3L{22x;SiO43`BLfyXe}QHy7L<3@kGdHZXuB8J!ie zGNLuB-9TQauWoF)+}*4?b~BCUBMrHa}u^2{-BfbCA z35h&{TkWuMR)L?!&KK?z;{1?HAdDveXK z)%*qND)?xw;CHNGiyg>F|3xl+p-b1@pUU6k8d+kE=n7VecjO9RW(fkiN0P>Jo;osZnDXo}^@m*EAqXIN99nw8NOA#tN0^OO z$FF;BSDyEtI=e>%%6(>v?tj{_#*q*nqRR_^t1$t0PBoa!M2tR{+9mr=|AcqjB52t{ zcbWkNdvuTsmeYi5a}v@?2M>UB$md~I4^o>jYb!|zeTWvsa%GTW;>U3uGanE zFLykM47+sYN}~IxS_<4%dvno$E@)!=Q!^YKmV=TOg;UKE%=KT{6Zlg%>wg{UjrLIw3Y`PFLc+ONdvpZr-5eiWq@)aALWC&ABE-g7o@u z?LJy<{8jc3{@-TU6NS;Y+EXnD8<+>@TOrg~N1&p%t5$P&E`*C|BdCCE|9OsKZ-xI7 zUnKneV6$jvzkfN<+Ek0r;u@f|i*so|vox-w_xtDO(qy78idEvtxx_my(aZ#t-q$63 znZc&DeGS=4-=lQFcByLw{O@E)|J#(Q4yhvd>mke0L1v|zs?R&a38-_Hs_x`9})U%}EDpsYU|t|)>@ z)vNGC|D7-~!6Wk|>iV}a<@)_m>(17WfD(yegEi*oPV`$!>A3D~&1luHo~TNq@Nn~K zk}WY8PA+8aV4>P0aIQ0Ol+3fDrSxRf4j2Z*Ppo>l`EGLRy*Dx*pSHED#kvtMC5HO< zfHz_GyPH6FYG~zN$I#+aWGz`Jv4zauS204L=V zW&1#)O=wXrvDqbZwYlHV3Krq&OO|M~q4cdv4-8C{J)3N$Kawkdu`55DWrsn&?9h+* zH@zd6=XY3U?Eqmc@o%jXMpxfVad_MH_G>{CQ|KRJvJ8R`4p$dq1pYsAX(LD*FxN{h zXi_j}y+76GZxO#E1p+}2m7uA^B8AftO9gKiCp0*x|H%8@@3ls%JN-MEgAW&h?C?FS zjIQCk)1fB`#};-c+@eQzwLleMfexhaTV_+=_&L;c3+WB!2N__-fzItoHAT9yXnO%^vK&Cd6WDuVoK>V0dxMrZw{~9Y5G``cV z5u}XWenrs94=IM-JjJvGz;Twx+gOQMpum#%{m8APc`9XHxU#SMB|mmK*IG`G|M#;E zLBhvM1PO{Q&0c29qkhC5_GTh_XY@y2kGeBvX=OV2tsj=g??3a~T_NuEzfF5utjk1D zShX=_C_?}Z>Jj`Cf8zSzU>u;|zrxNg;pXN1&a*=jt$A)ETe3?Y!1@(52 zsa5?npAXYzzZr=bWRAT!`*?4e)&sWj@EQ{jWG3&{pD`IP{b}XH`Efr1p>C(#TPadD zlOaf!8L?e573`9}|20GgVNTC0L#0>Kgkz$)tH1~A95%$dHmQ&r*QD_Tw)q0+xu|d6 z>stA(73lXbW3i?zG+S!5pwjwLd2OmPzJDpATc4tE^ShMLANIPC+A@FQPb@uZ?#2R@ z&KD>cY2D1K_qSK#aS^AF$V1fYkJvdu1miFi4N&0O%;9?OkX74+)n3$VsiO*%XC_#QL8MBW8vYb%H^8gGfsBl5=Q^<|z0 zV%7<3#iq>oAEqk4A7l47lt5FWl^h%!#Mi8&em~0b7Qt(jEqT^=#(Ja!!_hRCdj_S! zIrN-p^4EOPplJC!Wik?U%|KZ2jd7*t=asfQG5?;MU6ub;6^Ryu)Angwzd6X>N8T}J z?n^&3EVWE$5Sfvxp9An5s~&E7k8)lyL?o6b7nX9FZV)HlV=(`49PMi5Y_cM?;EI0E z7toh`f-P~Xb0JF2VXV7Q~k>_#T`A1VN zT0yC_$d@qOjK!S|4(q)%(f%?kZuSqm1<>p8GV;)0dUH8qW-ie=Gd*fp$1#@G35?oL zo?%|z#u)7dRdL8R7Nc0HrLM9c62SZY`zzhRTW-PK0WL*aW*%QbkMc#{cjbzlL)Sr( zn`y$|f3XR-%?vY;Z*2+B&6L0H{2io^R(OZ4I8RK{+b=!5{c@OxUtYlMR-R75n=d{7 zU%`#x|Hm|y0B@t<3N=!qu|LguZ*}na;+k-ebJr>UWNuJvC%K&5>l56@#2#QuM$k3E~k9?pRDOk ze_0``y;so3Z&2OA_gjt?U)tU$n$7r9Lo|I$AVzz+r6+Y;X?;yk;|%km!nv%+-*9Fy zXvtne2OBV&HmA>jEBtZ;i`5*M|Br}w8-8RZ&iolh!l3mI-!h)f0~#PLkVm>Xu#7{f@`biv8jec+?ly6!56e38}5mLT>)fF}lr( zrAAG&%F@&C3b(XTfX=zwvV|4pW%*ifdxT5Sd5v|ck&*V7hGB`o(L64Fp8hpuPsrIX zk<(^HCq)VWlp6brLhQUOQ*k1oywG@JvUljBk&$%8q*z0zcSTwz^~wJB#?DyxK2&cM zNj#t3N1=ryVfJHnpyV4V7#r2*FBqB)@|c{CGk{t zPj#D$9}j9G9VK@&42@Sxj)23l-U|J}lK;HgJfk;50C#Q65kOZAhSGc&6Jz?e#7cQY zYwO$pSGNWJ0$l2_B+mFTXx(&Z5=<62-`IK{ZkSw(F0>>%>CUo+W1wiRfc+JqO=YZ} zt^kQ?P-=J7zoxIKN0g8m{a%-uO&uz}wYqvkb{>Fbp2<5lS5VDKK9Jbeg9@BXF&P+F z<-bN?>mzjm=HwCw=$fz5O&kRWzL)2Hmq{XY+m5aJM&6Kv_{Xqbv{`kOYz*=+hi~go zWVy6vS=W{_{<}|LA)wL^Y{=_Z;Q8H@t%CWx`9>qxq@o~W2s)J&JUfB^#fnHxM>zcq zt?F4iOhu9#LN)CP6j^`IR^$@^{Fe*y@f+Fm*ybLNH(-r6aSeJdiwq_B8aB!vDBkdd zS$3rttTMae1O5dMyxBiBU4oYo5mXt(@>n(dX9{*J{KP|8I$#r# zI5lT!obMr~psDGJMU!sEFI~!y zeHgeJwGO9%a-%#(qAME334jVZ(M`5ZPmkq@xfVIFy)J#yudm5>D8-&{_zc-=0dTuN znI((q6JKAvh@T%w?wU6vHMZPRUOJzYYD=kbDZ3|-@*YbmA*DwT$ng43RdO%2CZ7@; z@i?A9j1Tjh%sI&y=fy^J%}DWHMf;1Cel^zq^0?TDL&@C~t~deVs5CZW8j~HThSz3z6$gNHW@>z=bW-j9sn%^-x%+jJ01g0=C2af4^s?)GYkT4e zE@c#t>`VxH<186#CzKG6_#|J_5KqKHXp9c)BRUzuP#ZxRBLGT(9f6#%2ZjbrK*oz$ zC(}CMb~2(!^6%kGN0#gsg5#nvhI!OW)}}-tW*|d6iSSGW{S1j--{p& zsW_Sx?W})Tw=AN;F@r3KH^lSy3yVL&9*ffpXaB#UwQj=(210OD`1jH5qF#sYj^YhH zG;W#!wAaLN6)B4UaBkV_|KNl`k-~fA=~25MKE_^r9>nQiKDro+-0yFgsAq2lTE1~f zMDJ~T?OQCX`2pvJ@B=U3c9=)H~9S2mJ#~t-9|HTJ$%ENsx~nh5R-A@M>2^ zIB?iwr=lKlrM>>ust0aVP4&N7pPD#6-oOkKi{cEdA=meG;ZT*H_?Y%Oe`hsLfkAOI zM2bvGlu>uN<8j9YtenmXJfPfdQpFPF?-9dxWTf7d85)Df-Xlw041O{yE@f|U`k7yFWh z1kz#|n}q+4VgTcH$Z+#`zSUy1oqmduF%fKs*aoLgx9p>^9@&m~ zhp`n7#d~LwTeZ)`Yn~!nX^bc4mGrt|w$^z^ z;x+wz>!@vh92ZMEk5(Fm5a%e|GDN@MG3S|ZOD~g9*&S{v z3s!|&o&#F22bdPyYz= zeK^+Z^|tp8>v<-*7fR2o5?dZmOI2q;5Mh?gY>JLueT0 zcNTMJI|X70246B~o@XK?nF2t~obtyUD=yrwk8vKFKu8WQyiH_$UBNLp3y&FTT>W&X z&E#}mu(z6TB^zif~RP8F?E1*!R8j*#fUoTFWy+c|G88)$#FETC82{#R4HaH07 z3GO!Fx45wRlE&a%o4%=Fe@36yuOOLMGvnwUnDH*{(92gjJj`a+IofDTJCE5;U7!sI zYG`F!Aq`RyS<>}xpp~85#jGBlcoZxXfhAi`2~{0o#oXinJeOv6oo030<9{=k_;m`hS#*MIyPbO3 z|9Mte4L8f^TvNE7jhPX>+rb+Xys||p%6!xcXb=|+Cf1S|Iml)lZgG|=J^nelzRtA1 zWWL~!&ZQk^X|+aUZ!ijj{&m_1sO91-+6v^!KX*kWl^}Je?5X`9*9oX_^W#=>X8?Nk zWm|&Ect9DfHlSO^lHe=i>b&--u+VsWCnY-LS@Wk7MUM^)#2hZ zl=kNS1sVpLowj$o0yRMai*1P{WPq@?F`7K!Pu}lpTMz-Qd?VlG{uLRQKH9+uS5Lsn z=dAE21sU1`Qgi=;*q%1N4?{s*{rHd}xdgn{A2OgO{jp=x0%eAhN@VvN-< zw?d7VB8Pwc_XTqJmuWoGDobAf@u6IYX(4OW(z_qWaurG6F3bmgW6u~)H(8;%;BY5u zddlW7bkQpsOXDqNVKdJK!in_)4{q9`(fU3V`7%8erB6n2!JqTwT<0 z;_q@iFqS8dl8Gf;YHpVz!7~fGOto41(*f%d!}GkvAGt&*$0hFepWkc6eyDNT@d9s# zP$vY?-OHwf4RcNV{GVk`c4$U!OLX~%!J?DHZGX6qyg{B(xIe%zIJxK8@Rxt%v`j7#$`;NlvjpA>NM z9)Gtxp=CB%fgb-;$jNX<qZu($`(gt2GLlNGmP*$ zd$v)L07$i+UOl(qJ$@t8Et1&AK24< zQ}s{A(kFe1-on2xyNfo>ii}w;Z5+iYDy1igrN(4W_45zy z-r@TBW%fJ7Y_9kE9L{s{x8YmCc3y&CI(&ojec<~YS1Z903bG(gWr@@+vJnR^`E_nN zl;$l5XOH;k7{K)V&f(ZZizi#W-=f$=Ece_;_s(^U9j#V zoSmbHsvPL^SP4kA%V1E4^pSoNXUxbEcc$`M`q>Y?6xxjdG>g@fuo z3LrmJZ;Xw5HMysJ#Cm<@4WxFzG={3jJhM@C#Hzbu<2t>~$-Si`dh~;%P3U=K@MfdH;KRFHN=X0L3*@x0Z5>4S(Zy zzJq;qMhu1i!{woHd7L2JL&BqHaK2ho$zimTiO2V9(QayGwOzOVq5z1`(nzHBG=RvC zCHMPYz-L^r%&EKJ0Zj>E+`O!GXUK+SO2{=qE`2mNSN~3K42mQa11Q$wtGM1Wj zEY5J=B}c8)Y}Bn(0{6iu9;qBzl+`pm`11k`xG@^9I!$B5n|zyb5`#Cm?>{1+$_pas zxoGKZNkOo~aXO$lSO)pi&m*O5tX$dMTE>Q=#+=xF)bnKly_kR76_@MYv8E^7{Dh$e zmxUWjYbSlCY+(&srkoJ|ms6^3+rJbJI3}iyH;&>0-Eqb9={3$X)!t{yYN@Q)!)LMi zM3Qfm%%2o#|K||7Fbv8T#{a@>n&mO*r8qqLQs`wZ^wL%-{|2gs7VT0)xO606EY|zh zr$OvY^r2#WaqMYHs@R)z*eaxesaVD7pL_gi1XrD2p2bs?{iRoXiVc1cpNsprHCwcB zC_2z=6f*E$ORl{*9Djko?MH@9`efNcl#D&>WDjv@7p9*E(+d9%t7go%xiL?kQp)!D zk%)IKf{3)dY+u3cUK3~xX!<&gv!<6VnvA{;f!N64SJFmEv}ppMfCf&=(Et*9mp=iJ(bsjw zz2TyTNb(>0EX_$v_|}CIS77wPei?3AO^=x^{Bg^0%$c?f!_EC9fsdn?Vw_1OMwx(Z zxg6PnM#ZLzGLwM@J$rIjU(Yr!Dp8;}DLt0{_>g4Vkj6TlzT00c4L^86Yy=L*{|eoT zkQWxA&G06^7+H<{DYuRGJrtP{!qL>qw8c{wx-w;Zf-)PjzlN=GYq-_I?wwYPBepJN zs8`G#$v~qeFS_uk;k$oK)3(FOEj66K0H&Y?Jytwc1x(G}1e>_$CvV3lUh5rFl%1}l zzYI)xTf+!*OyuA+*!SoG`n>nUkPn3-U%%E#E0XE1f@mdra-Y)UPZ+D$G_*(@2@OQ; z9h6T*KjIH|+5Rxv9CuSP92=Qllw89j?fu1()D`2)F!>QdeU||z+m5f^kn9bI@6s=> zMeWLi>z-Ic7dI@B zbq+9wfL_EOxK8yt&z)9kfn-y|c}fb1g8Y^Z^Tr}@q$a;AS*2$3fyRG@zuOjm(4q+< zW9ZS1L6Dt1DUNZiUiA1_YF4>fDSX=%pER>PF|~S23$INrYopgmGfNj;5M8n+nvR~( zKmVQdu$2C4>Y!6^<1Cpbq)z7ca7(@dNI+#S+e7?Kpmb?|!6x|FG0mrO}$h;d}l8QX}cxL(!T$%NAV(!}1bO`oF}E z%^1KQa&>ca^zJiZl33Qcsl=1)KdH-IQ;rJOM7#suE3&iUU9~MdfJhv~;>NQEF{Z`} z!rirVzaL8;F23bs@v1gm7glc>EUoy*BlQ+tM@hF4K=3QtZA>AT8SM@X3tZV~x5Rdq z-kOqlO;_SC-mRDe?77(3Xq4;Qt-Giw^M?^!Z2kq@Kq|Z5vN)R6hVgf%^x(YHy;s^Z z!)j)gDuVrRUDcIzsx2Q;+l1+(%74jwwf*H`lddXVa6NrDo)b-95{h-OC85I;2vNmM zM*p7*W0f+lq?;+p7JF9(c1K$lz7N|BxQ=2v7vN)%pWM=)JRI^~vl+Q__(*ixcUZzIi7b{fO#Q6+}_5*qj*FvSHDF+Rdkb zt)G?+Upbcsu)~b>bVown`S8UXxY;1Ie`0}ba^n4MiGN{8G2ZKB{H!sktxPr+l-XRA z_^2HWP|l#9U+|Bkz?$H|%A+00_x}w(8~5C`+y(ZtT7&c6!2W24Hdip?C`6_CTzrUP zi^5-8wC2E~($uAVzOqoyAAJ7af<407gO!#bE^mHy zh|_&ZMcczev+Mffp1QPrFtNP)(sB|jQkPa( zV)DfjD_l{1X@#`f=U2BeUuI8<#VEEssfirvo~|3W$IeDd8yTxsh?q8*@A|}3Z>Itt zB#%HIg%cv|aokRw;zXO8_cso=W0^Q|z(Dip8A4c88q%8=3U3}tj8Fn{r4B&G&w2Hr zHQ@{^Xy!sA%g(g?Ab#pCny zgYK4*Z2GbeS*JiRw{vLF!W$gmAiYT*?7!TEOWF5|e;RIfNSo&-??lCP z7RnYr&Vybo`_(})FVlUq^lpwl1$(zip2sSC(ie0^&;FT{f7#D1>^OS=BYw~4rBnVp zy-qPOkd=T$KJjUD<7lihV9s#BOc>}Ow|Qo!36vbC%%yTb3xLk0WbUS;L2TsCr03l_{E%@*AOoPRee#nW!a%d8+J$xfhu#=X?&NPONV1nt$^x{??YHIwcT!i zH^b)O=?*mbhXKaGt9Ao2+hFmtKWD|C%x)gUPTqM>^vA6l^v9LjM*jl_WaAly)1OCd z%`1eh!2}jSlSX6oBz&tS|4f{sbtVnwuis2Dj-J0$|Lgn>;2#(x!u^{ZOdCfF>vibj zjo6sTV6lV0t!8WHmWErtZr`ruTa&)& zq)JF<>9{v@8Dq$Ko(wjlIJZf%)Yn6TsaR!Qddh4?>|1`ro8mCFc1XUU)(*-M?~|oL zw7z)p@IjQCJ(ljtd()TpW3k~qjy$nLrR^#ydzEflrNC|Ywo~Mu{vGLvfueDujeFLSiqmvevalhFncv#>C2TNC&5UL|kKnnOU-;VeMi%5uMbahhQXM?D7A~ zb+r-1e8@5CHJ~M_Z%akWy{YAO+ObjE)ppHHpSR2ShFx)^Z1KN#3(hfBuryvq>8cxd zpnlx`_=t|$baXuSyt3Wuu8E|o^_sTZ$<1x#x_bLwZLk2*auCd(rPktJ^-zaxgE21?ohSMRYC)Utj@9mCP z@dWbWl5p}5lm&ZLC`c7HyDs!1?_L!*o*qw4B!=}wc~iL7C4M03_b2|LpxNQO+@)!K z7Z1EsrG3m%^Mj2X^()q6ncVIhK&dM_aIv{!eW{XUu)>nMqN7|%*+C zN}*p)7wZzg%S;9L#8{Hy4>mXJXQfN_%t%j!$mT!=*jS{;;=jBH%|l5n^mII3(Q#>d z@?NY_WQJ2$vsPv}v6@5tt*cohGaO8AWMUJmc@@hWGqiaPU0}4bJ>2p#U#3)IVDlnh z>aknGa4VjUy%F~|#L*&ivJROBH}EKjE6nMvOONd)uGje(|Exzt&u1Bj=JxaJP~InZ z_vskkFD;DY_ZZb2>cXbx(5~?4y1uUP=qvhm$(H5_hB*A)rThb!<{VP?0ZekRCL;X+ ze@l*_L&r90&5*=H5j{>ff#bPMb$EroysjTpozW#KUDt=14z?nrF{rY?<@Ggd5(~9h z0}Gf1tqac&6e_Xe!{K!t*i+m9|!N+6Y`Wc;jj5vHg*}S-@Ffuvr&s%X~v- zIy|<}j@l~1!5|}_v;5uz`3lKSYWw7xQr?>>Ft-_$|8o9JL@Jnre1T>KZok<-;~pnm zJhjv$GO^Kfa`MGNe-?NDO2WjK(k~eAJVFN%4=afMejAnFdQ!~?aEk5Mm(PCmMkv(( z&2gq{YrK#ibPod2rstLV&;FfW(mZw8r7y^E$&QQsb$mBn+|=0}Q?G-RbyGQ@ST2-@ z@l8YHf%%|Kxc|#sdn??Ri~R5MvUEKl>EeG$ANtL6(JRW`mXm2;bzH1r29Pp1(}RinU3`kX}{kH6xmUxZ&r!> zXWA}&TP$6#9>9#ZUGn~Y?B3M87U<1gkPU-}2JBXv&1HGan>stzG4*QtL92K@P-%o? zXghU5NaOYIWyhfb1W91Q<3jLqn7@12 zG3bH&8)yrW@S{?yr+EiDxxUn|X8N@{u*<%)GM>Jz(myLmsUqbfQZDjG1u3UQQo}s% zCwS(VA@O-NpH~MYZD)#n`8Fqy%07-Qo#TMTxa@m$D0nbiojLF8!yNw1M~9JsbYW=` z(q!%0qC2BUN95(aOQm_q(RnM?d0Dp}#|{s4--{`WVr_6uLZ)qg_XMarqPZ z0sU!h%7on?&u_;yYiDzPZ!6T~ReWE!`ww!%fZ&Al3GJLpQD;BnzI6G+`GP^yb)iOd z>qIXB=h{Gi!UVqObh$g}^3!};&kp@b(9 zN3(q54NtMvJQH3b%^lmGiwycZeqbd$AYUM_Vht>2SG7LoRfErXxR$%yLp-NphEb`H zm*#T0@e8ukAM2x=yMLvXp1Px4MoFs9)nH4%>Z21@{?{%4mN9bXs6tl#3XixS{3{R? z#qc9ct}RX;85;hESOUzv(k?RBz9D@<%k``&6j*QYlw~Z1dMYGi=9b;mWT(G?3dkW( zBQ~BN>tUJJP$yzGCUoAOJi^^$m@*M>TYb9X={Rj;B>oI@Sy{a!pIx(`fS57yRNZzT z(Gz_j@lzUi`t0G>(BU`3_pGN+6_9;-uE2qy08mRG@BJhwBl$H~rgyN+o5{mR!uKq& zLS@?r%1qojP-Jb1inM%*QD?9IYb7Of{(iL+~4wj|C(EtNPG<|4k6TzBIjAIZ%5EWUR~!iz4(Rq?dibjg`kisSc_ z{;x`)xX{1D-skzkk(`*N*C4^BCwCA9w&4}C_c(9JNF3^`46KJddEaLR97{FvWUr&Yz;_2)fwLbv#|L z9EtA@Uh(6xK3cFy1jx2*Bu%KJ{a;cnUG|ATgk;E7lI$(L{RFgrn-TeA4JC_Xq0atY z)mv7D2q_DT#tGr3)=Ul5r7z+T7Kvfbid6ldxCa891Ma?2_Vnq=CL`Bj{hg|9ig;}} zG`lm|QXK=%him*HWG!doZ{OSqU0)vET!L-&FpXfu+T`!$%J2`Nj@l<792TU2yuK}S zul=x?`YRA+mH=U`=X2Qi|Ew#MO)Ud)=w!{GI( zYZ6#{@8UKQe6xo&B_@fuK1leb_t!W4d&Z#Md^7i5Kev$xp%no_v9j9dH+>lyQKL-u zmgm)v;*FJ_tRs36m{b-|R?hxQ-cOyhOHDG=<` zRTlz;$>RY-u2Wc({*hVA&M*;f`uX9}(|Id>dO5Z}hARgPJV+ZaR{Ti%HF;L{# zd!%W>lSPei3~7VdCq?w9lN${kz@R%@p|P0-rZR46faO=M$262vf2}bH_7yaI%KXRw zSgpo)2SbZ;9_1Eec|26I`PP%Tj@-<7uoV4UELjwarKglO9xUWgvfY^p9zMkX`+`q> z*ZzZtxv44h#a(ZFvBpogsX8g3W~5*ge+w2DN`5)Gp0!y_dN%QpzwI>me1C0g{eN zLF4w2a0@z%{!Ar*2EohIcjoNN*+2fK&EpyTG?Pb$FFGf}6T2avpxOlbWLRJ~efe9* z*JWs9;qGb?BzPRod!FNaCgQzNE15#RNSk5r_|()sNgLwWJ)Cdgqui3?C$NMiwXYs4 zI`7%2m!-n;Dm>!gRBQ=^2S*>*N%5)avPC)m9{$?DZMBV>q#Y;6c?pUie8ep z9SB@}v0O8-aYoC=@EWVeKb_JYwd=&aGQZ-F*yg&yCYRD=4z>fhX$G+6yo`?3u-{2J z!JeIKjp?hZsrT#*OLFkr_^P&%2iH+}KnK5P)oYi?(GCcYg#rJ1%J7O`@dem7E(@Jo@enz^2 zqtkfK%NB6Tdp2O8A;pU!Jr69{-az(lCIa5posFjEJXu=<8}d!@5FTI->?oXbZ7VtC?}HgZa`E)o=b9F*V=K`D z)sC^7A^TnA=C%^sesmU7#=BsqY$Zo6I-OEn{&!tPuKn22(`E5sD?y)n>#4j9`GhpT zbs=B(RsU%}d5jr7F8IHR@#g=(o^<^$*iWQiNnKm26WR*8Ky@BX-C+?S?AcNa1&gLY zylb<6%Y0)St#vi<`0H0Rat!OJtML=;ntT0|7K&-&p^R2S&wZj?=fU%7qfMohOEA5?S(-vfIY1z<(>aNjmC zX%~-~uc(`J#aYQC<>7B^r%EK*&$lkVrDJ%H3<-ZtT+5sDB*A^W{&4(=|32cnp+_{m zAVwdoN5THF1v%YYxcPJ%7huYX3j8ULn+HU|w^Y|=`M6VbUWUZ?H`PqnB`A6T(pn?$;k4}aHf zV1p6;)m^;#UGtRJ?=QK7bV7+z#;EakXsHy1ncoj_iUhUR%;LVE;3Ko>GJ61Fao?1o z{D|7y2#fo6Ky`~Qv{x4v_uZo(?|w)YlZ*T08nft(hs2T=_et}ys65$sVe9Gqe&`+i z;Za>LeJ@>MpYOFa^MzY2uceJIQSbiW@F6?a<_c;G*0Bcj>Q$uc=M!HM=xcSW+pM4< z(x)}=1TtJ;RmT5~6=-SYyNzvaUfxodw4+!DX9yM=guxtqa zqi4Aej(u0dk*BMUsKg@^oQ1b7ta252}nRDe!54{6-*zlhxUd>^}-}eC;PWGZ- z+DM5Tyym%G>Jz7&*y1A!x|-O8S~}Gts)?n~xR|Qh3Opx<#1{8`@L|$;zwK+y>JD5N zWy^0^TD_&G2lKljw>*pbYe@Ld&Gnm9H*_HU=lPeiU#*dkMB}N|TVhr&bo-e6kYWS% zL$`eoV=6(=I7^KfSZZYQrMWhi<=Pl>>$fv5dLL)p^?9RTikGa78f=>bQReTEuf~1Q zDZpFgJeD!di0I_cE;k_W>R?u9n6GWP`FrHrtU3=nuwt|MgGK*`v$uhds<BSuVZT1mk+F<6O2&4t}$S9bv`V6A{wlxlrL*j20ofh4+@%PMO5)wZJaoxam5 z5nsTBU=k1^fC_>_kP0^}3W7p-F?qgc?%mA>vGxD>k?g%Qb7#(+Idf*_%z3fL>}U4J z_QBA)J!q%iMk+oe?UCfji>gA=f*!4vO%j!~@$WKq6kYtzo;aolF6-j8!8P%W>rANwgQb8o<|`(@m}A3O=FMe$pyBTC-cbA-a_|ozV_A zwZ~*G*mGX^!aE_E!^;)`90S+F57Ea$H|l6;b@U2-hpM#NWc zc)D7hk75^#im{U#kR7I~t7{C`FL6#^zsS$D}pjLC1Y}~IAbr^dAaPl3DI>p-e9}~1CmVkX6?4>2vH=g9z zhghn8D@#AU3)w+mVmqzn`}?Gv=Dv^>SU1FsT(_?v2Cq?-!0D`8Hc|5$Q26-M(4P!w ztw`$>eNjq(jmepEr7Vit6AE{<{hG>vxu#sH7RY<0^q*8BOg!bv?F`cF8zu26l_(cN zSE>cmBZ)IrqO6=(s)ZB%t}g2il_)Fdm1+THtAu}4601Axg;am-A~K2I)h0Q2vPG70 zUnptD?ez#IgT{X3bXtvE2Cx}#Rr4kgy=>B1eN*(;1hBZiq7KuTB(*et52{gDjXy_4 zvx7T$&pM==laeNEcoWY0IsdeV?iYJvnOUP1oqU&0a&xI>7LN1AWhgDgm5>BeE9QxN ziS4-~Y`>rVZuPM=t>ysm6t8I?NG;tT!iDv&aoN(b4dlbWP~i!mY4yEV9kJBnUZ=Wu z)H-?}qoYi43pvK9=_zoc9ToT8fmPQ@bNT?6lros~QWHBidQ4W}B?!tiRJLMPe6rKTBJEA!g}mhP>Q+j}YeptFDc`NU#+>f}WddzQ^YqT01)> zbV$`k)yl{0pP%8>i7?4p!MftqPy1I`{isN~Swv5e9tmEA+y9Yd!E_}LzYNUWmGkks2WV~-@+@~5fKX=fsB+`IuHE9Snp|(oowyJ$O~00 zri6YP`XI$?Cbs{WBY5KcAo`bG)=C-?|G5pj+#>wL*<4FOi%quJ=h!Z%Qpv$>@iR^O;D1FS*be<=jXVZwf^Fjls4GjLrI;=Lt443Sz%t+trHdQdg zDX55q%SN00%7S zR|C~;-RJ?nuY;d5Y>*D*Q}Iz&wy%NB1TeXAV9o=Wb8KL;6Tn;wFgJYd_Ot(gw4dR$ zuhmM-Bk`X4F~3HWjSa0f15(EO!A1NurP_9@1$Xy2y6Rv}Uw%D*ty_tSajFTVt#6ck ze~bPE{@WXcoR31cy7emT*rEKqJ)EP3>}L!8*nVW5B^x;_MG+&ka|VI(y(yPWX?7K* zv@fBY^_^9mE#2kZjosNMQNFpth19P0H=Mjkcdhf?xpi~!R>*EEBXc!zP`~XW47WQ^ zntaB0XZ_&;YwuDtcd^t8%cg$Bjl~=BMbWh!0~iGMx2$EIGB6IcGd!GJ9&B{l>(#5)klb6>MsA9|06BfxYJo&ihYEir9o+XCIN0traN#V*o|rdwLxa6v zby-77_(E<|yP{)yVc<6VV~jY?!h2E2J*1qOC8=2yBy19gaDp#9um7EpvP z)Fk77Bfm0T5f=}T2v{|H1y*AmF6M8CYa|HZEvOj+=>2Lp0m!x}I#gXBsqv?TA`I~# z!yXjN-rhpCODJZ%_sW}h4f-bv<{L#UW4u?mabvq{BkOiFXH7Kgy23YKKAU2N?;#!W zyeVCSoPDpxXISivDGTUAZ^@|PG|k17O?J2@)>hUBqC>_&!>#b(>SJez-vJtSoz}dI zWq%iXfLA#K-}No^`V(q~l9ndMJ9*|KPUjlcQ-FOL15{hj2CFrp(JPUAyGQ)=@@O@% z0mk%qY`a9)-d{bF<$IwZ=r72zVrG1N)cuC&3vzkcSzKRr)g{<@`CLs^WvNBs3+7e0 zvhvGjgmF0A)Ju5q2kg<<^Ne9aLiBs^OP}`w$|bSq1}jvb&1K&ccUG%Yd(eT3x zLlC=?NY1z$?`rfmc2+_^jsfX{3(T1OY8jQr`aonSk@=hq?NKw|bXzFUi4m%%XEr+q zNZZ+6M$<;*pl#@Cvc)i$j;#=cnk* z4OS-AX?4L3HESM9lR&-es*ZhUx*H08YiU>2vFjgbieZ!SpIH+)OVzG1$8oPhFhGKK zhi<8A=vpp|cI>B&FU!k)tSgF-weOY{GTQIHTYF$vr>wsG=lo^$v7RJs0*gDf#U>?H zOEaN!^m*=r*g(C>UEtEI0tK!rY$i459!>A#F2D%CzzqKF$j1BzJ(5*`%i`W6s{$8y z;f!mq+>aizCIgGI6S9qd$lAXRSx(~ogzADrU+SPSvHefX$|U_Qt}LuN&Tyr)C>w^t|mA?0V`KHk8Ly>qtiKl@3orY;cyu(IvvMgd#&Z_ zHH0DIL~I0~m3>NL{>bi1R2^F3YQjJCu6N)VkLq2`qPK)?;2!IjuO|eh549@EIiN4R zr3dKuE71Ev#nvlz7zK}@GPxB24l?O>J^2B53MoZmlR^@Kuk`d zes-b$-Gv4_g(L=ZGSs_Qc0)b4{ogh{?!5UlP>Xh)q&^-SiRH&mNPo(N?;a z?^?5H1eo(#jAV<+Zgl>Oa_@AiuBo-~g}8k{XoR>lU?vNh9=GnkOlk_FJYXpZUqGN)N`#Hd1xM4 z#E9YUWtjXZT`aM&h}&<-jpn)X(Tey-FY<6?lM;&59P0imUttyUo*VgV!ducRIODmr<)(M>X^?Eisx82)8}ce!oi3r+-F(Z7I#tY-19Lm5hO-GO z6g#XZ;0;Wm$j`_YtztyC^}-NtU@$%A7;)>m#*{K

      mp2poJ!%>BmdGDN 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⁢}4&r!n~yTPNX*h7O$oh2(pMX=hc` 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 z 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

      a17Kd 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

      #bJ>ScjF)r% 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

      0gmE=Ek0BGKLKfaE_{g)LT>U5PU?%o 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 z z03~`uJu&V;Wi!GgwnAZy7%ZLnXQc%d$mMj8G&Sd+Z*2|XqOgklv?v#Nq@GwRTt^CW z11atXvtow0g zv@NI^M4X$AYWY($rq zN5ltacP0Q+Ho_#j#)1I@;Jvl>sp-<)=L|;dqp$$P$=CWFN7g;j24ZYq*RfBo6}unr2+d}_eldr1N)89h%iusz1YQkD z4Lw&YR;tz5)=e&O_0)Ajy%V=&S`Lh%G)7xq-+||vwV|o*M ze%vk3UQ++3i0DEGjAS;+t3MVUHkm3bu?OO5?pG#heBjqiS7Mayi}+3+hU3V^YbX3l zSmfgmI?G+vGptH65DrL<%YWP#K-h*@V=9ezp6%+$G9*3lpEE?Hj>F}$2GXuLEYb1` zZJe~xcL2}J1lW)14_)xIk+su}xtX%RcEP_dz6Z=LJ;YZ~cyDkwhu^sqf6L5L0=d)P zTtm6pwacWIUlMY|t?V6PK8-kE&b{KNC0k8;cAy^JxK^%kjELk=2Tl+qC-|r+^`yEi zlse5{Zq&!y3s6*6nJea1=UNRsoMG2=hk6uAF5LVNxiZ)tOJx>jVvw% zzhCU=Nr#Y}T+TMD5-aa4>I|u1c|stLyFtu<1a2H7y7%NSi-$*bY|`GD>Hl)Y!1(U; zQ@=Ys&{L!4H<~kc*x&L>@=hJ0`AhG^4LRbNbV3vYM3b}#0jZ6cDZ~4Lm%g6hf3+!o z-vpoeU)ihO?F$3P4>FO3o&^zHs^&U=rk02D3N@s+mF9_2m->%I?^2oTl~1Yj)$Y{T zYxa9ZK409G_J9j@_9+X^v3;JNs{NA|r>8i*<~nf+jrdrSP>)a85w@`KnKY@l zynX(r7Ux@5KJZfEj~|Eyc5b;Ww+Q?$C8KPZy$aL<3IinvIF%C+Y^EKVd>GYNfNuA4 zBg^afkdyd{$)U#E6NWw3X@)v;CQX8@)?I>3&BPm!W!k$^@igZGj@!XG^-g74n1Nm zE=+oI7EJKpFC%`d(!m6uzE%e&_+WznUzOlv!y%f0l2O}8hoZl)T7bYm*~v}EOAL#} z@O*N{KsJQ@!U2CH9TM7{3B>|y(umh0bqB-XKtJYyAuPf z2w;F8pEt3;XwVgP&S@|Z(J*s1`w*_l=5vV$>_?zy8Z5T1Ob;b&1~~-@Pj{DbB`13c zH)lAgzz>a5agmhzG%++h>!J4+!rJg^R<$-86UT3=HSFuXb@ol$*Wea$7w6-K_7A*q zknrLz7`Kg>XoV&EvTP^m7Rr!tRX&jJa}t8IBhokP3~BBebK>Njb+d4xtEu_y)%vn( z4K<0EM<89}R}#xr87_@zn5G4oiW5|1C<+nLR(9q(_Z>5szS z%|vIr)hBZ~^5NhMO%Y^# 0 && !bufferStartsWith(buffer, ROWSET_CHUNKS_END)) { // chunk header, eg: 0:VERS NROWS NCOLS const { index: chunkIndex, metadata: chunkMetadata, fwdBuffer } = parseRowsetHeader(buffer) buffer = fwdBuffer @@ -241,11 +240,6 @@ export function parseRowsetChunks(buffers: Buffer[]): SQLiteCloudRowset { data.push(itemData) buffer = fwdBuffer } - - // no more chunks? - if (bufferStartsWith(buffer, ROWSET_CHUNKS_END)) { - break - } } console.assert(data && data.length === metadata.numberOfRows * metadata.numberOfColumns, 'parseRowsetChunks - invalid rowset data') diff --git a/src/gateway/connection-bun.test.ts b/src/gateway/connection-bun.test.ts index 5af09bf..a4e2576 100644 --- a/src/gateway/connection-bun.test.ts +++ b/src/gateway/connection-bun.test.ts @@ -3,16 +3,14 @@ // // MUST RUN USING BUN TEST RUNNER, EG: -// bun test ./src/gateway/gateway.test.ts --watch +// bun test connection-bun.test.ts --watch import { SQLiteCloudError } from '../drivers/types' import { SQLiteCloudBunConnection } from './connection-bun' +import { expect, test, describe, beforeEach, afterEach } from 'bun:test' let CHINOOK_DATABASE_URL = process.env['CHINOOK_DATABASE_URL'] as string console.assert(CHINOOK_DATABASE_URL, 'CHINOOK_DATABASE_URL is required') -CHINOOK_DATABASE_URL = 'sqlitecloud://admin:uN3ARhdcKQ@oggdnp3zm.sqlite.cloud:8860/chinook.db?verbose=true' - -import { expect, test, describe, beforeEach, afterEach } from 'bun:test' async function getConnection(): Promise { return new Promise((resolve, reject) => { @@ -39,8 +37,8 @@ async function sendCommands(connection: SQLiteCloudBunConnection, command: strin describe('SQLiteCloudBunConnection', () => { // test different ways to connect describe('connecting', () => { - test('can connect using bun socket', async done => { - const connection = new SQLiteCloudBunConnection(CHINOOK_DATABASE_URL, error => { + test('can connect using bun socket', done => { + new SQLiteCloudBunConnection(CHINOOK_DATABASE_URL, error => { if (error) { console.error('Error connecting to database', error) } @@ -129,10 +127,11 @@ describe('SQLiteCloudBunConnection', () => { expect(bufferrowset.length).toBe(0) }) - test('should test error', async done => { + test('should test error', done => { chinookConnection.sendCommands('TEST ERROR', (error, results) => { expect(error).toBeDefined() expect(error).toBeInstanceOf(SQLiteCloudError) + expect(results).toBeNull() const sqliteCloudError = error as SQLiteCloudError expect(sqliteCloudError.message).toBe('This is a test error message with a devil error code.') @@ -144,10 +143,11 @@ describe('SQLiteCloudBunConnection', () => { }) }) - test('should test exterror', async done => { + test('should test exterror', done => { chinookConnection.sendCommands('TEST EXTERROR', (error, results) => { expect(error).toBeDefined() expect(error).toBeInstanceOf(SQLiteCloudError) + expect(results).toBeNull() const sqliteCloudError = error as SQLiteCloudError expect(sqliteCloudError.message).toBe('This is a test error message with an extcode and a devil error code.') @@ -193,7 +193,7 @@ describe('SQLiteCloudBunConnection', () => { // various select statements describe('select', () => { - test('can run simple select', async done => { + test('can run simple select', done => { const connection = new SQLiteCloudBunConnection(CHINOOK_DATABASE_URL, error => { if (error) { done(error) @@ -230,7 +230,8 @@ describe('SQLiteCloudBunConnection', () => { const connection = await getConnection() let sql = '' - for (var i = 0; i < 250; i++) { + let i = 0 + for (; i < 250; i++) { sql += `SELECT ${i} AS counter; ` } diff --git a/src/gateway/connection-bun.ts b/src/gateway/connection-bun.ts index ec826f0..5703dde 100644 --- a/src/gateway/connection-bun.ts +++ b/src/gateway/connection-bun.ts @@ -33,12 +33,13 @@ export class SQLiteCloudBunConnection extends SQLiteCloudConnection { } /* Opens a connection with the server and sends the initialization commands. Will throw in case of errors. */ + /* eslint-disable @typescript-eslint/no-unused-vars */ connectTransport(config: SQLiteCloudConfig, callback?: ErrorCallback): this { - console.debug(`-> connecting ${config?.host}:${config?.port}`) + console.debug(`-> connecting ${config?.host as string}:${config?.port as number}`) console.assert(!this.connected, 'BunSocketTransport.connect - connection already established') this.config = config - Bun.connect({ + void Bun.connect({ hostname: config.host as string, port: config.port as number, tls: config.insecure ? false : true, @@ -50,7 +51,8 @@ export class SQLiteCloudBunConnection extends SQLiteCloudConnection { // send initialization commands const commands = getInitializationCommands(config) - this.transportCommands(commands, (error, rowset) => { + this.transportCommands(commands, error => { + // any results are ignored if (error) { console.error('BunSocketTransport.connect - error initializing connection', error) callback?.call(this, error) @@ -63,7 +65,7 @@ export class SQLiteCloudBunConnection extends SQLiteCloudConnection { // connection failed connectError: (socket, error) => { - console.error(`BunTransport.connect - connectError: ${error}`) + console.error('BunTransport.connect - connectError', error) this.close() callback?.call(this, error) }, @@ -106,7 +108,7 @@ export class SQLiteCloudBunConnection extends SQLiteCloudConnection { } }) .catch(error => { - console.debug(`BunTransport.connect - error: ${error}`) + console.debug('BunTransport.connect - error', error) this.close() callback?.call(this, error) }) diff --git a/src/gateway/gateway.ts b/src/gateway/gateway.ts index 383ed14..6f5e096 100644 --- a/src/gateway/gateway.ts +++ b/src/gateway/gateway.ts @@ -15,15 +15,29 @@ import { Server } from 'socket.io' import express from 'express' import http from 'http' +// port where socket.io will listen for connections +const SOCKET_PORT = parseInt(process.env['SOCKET_PORT'] || DEFAULT_PORT_SOCKET.toString()) +// port where http server will listen for connections +const HTTP_PORT = parseInt(process.env['HTTP_PORT'] || DEFAULT_PORT_HTTP.toString()) +// should we log verbose messages? +const VERBOSE = process.env['VERBOSE']?.toLowerCase() === 'true' +console.debug(`@sqlitecloud/gateway v${packageJson.version}`) + +// +// express +// + // Express app for HTTP server const app = express() app.use(express.json()) +app.use(express.static('public')) -// HTTP server for socket.io +// server for socket.io and http endpoints const server = http.createServer(app) -// Replacing Deno's serveDir with Express static middleware -app.use(express.static('public')) +// +// websocket server +// // Replacing Deno's Server with socket.io's Server const io = new Server(server, { @@ -34,13 +48,6 @@ const io = new Server(server, { } }) -// port where socket.io will listen for connections -const SOCKET_PORT = parseInt(process.env['SOCKET_PORT'] || DEFAULT_PORT_SOCKET.toString()) -// port where http server will listen for connections -const HTTP_PORT = parseInt(process.env['HTTP_PORT'] || DEFAULT_PORT_HTTP.toString()) -// should we log verbose messages? -const VERBOSE = process.env['VERBOSE']?.toLowerCase() === 'true' - // Establish handlers for a socket.io connection io.on('connection', socket => { // @@ -51,7 +58,7 @@ io.on('connection', socket => { // https://socket.io/docs/v4/client-options/#auth const connectionString = socket.handshake.auth.token as string let connection: SQLiteCloudBunConnection | null = null - log(`socket | connect socket.id: ${socket.id}`) + log(`ws | connect socket.id: ${socket.id}`) // // handlers @@ -60,7 +67,7 @@ io.on('connection', socket => { // received a sql query request from the client socket socket.on('v1/info', (_request: ApiRequest, callback: (response: ApiResponse) => void) => { const serverInfo = getServerInfo() - log(`socket | info <- ${JSON.stringify(serverInfo)}`) + log(`ws | info <- ${JSON.stringify(serverInfo)}`) return callback(serverInfo) }) @@ -74,14 +81,14 @@ io.on('connection', socket => { try { if (!connection) { const startTime = Date.now() - log('socket | connecting...') + log('ws | connecting...') connection = await connectAsync(connectionString) - log(`socket | connected in ${Date.now() - startTime}ms`) + log(`ws | connected in ${Date.now() - startTime}ms`) } - log(`socket | sql -> ${JSON.stringify(request)}`) + log(`ws | sql -> ${JSON.stringify(request)}`) const response = await queryAsync(connection, request) - log(`socket | sql <- ${JSON.stringify(response)}`) + log(`ws | sql <- ${JSON.stringify(response)}`) return callback(response) } catch (error) { callback({ error: { status: '400', title: 'Bad Request', detail: error as string } }) @@ -90,7 +97,7 @@ io.on('connection', socket => { // received a disconnect request from the client socket socket.on('disconnect', () => { - log(`socket | disconnect socket.id: ${socket.id}`) + log(`ws | disconnect socket.id: ${socket.id}`) connection?.close() connection = null }) @@ -113,15 +120,17 @@ app.get('/v1/info', (req, res) => { res.json(getServerInfo()) }) -app.post('/v1/sql', async (req: express.Request, res: express.Response) => { - try { - log('POST /v1/sql') - const response = await handleHttpSqlRequest(req, res) - res.json(response) - } catch (error) { - log(`POST /v1/sql - error: ${error}`) - res.status(400).json({ error: { status: '400', title: 'Bad Request', detail: error as string } }) - } +app.post('/v1/sql', (req: express.Request, res: express.Response) => { + void (async () => { + try { + log('POST /v1/sql') + const response = await handleHttpSqlRequest(req, res) + res.json(response) + } catch (error) { + log('POST /v1/sql - error', error) + res.status(400).json({ error: { status: '400', title: 'Bad Request', detail: error as string } }) + } + }) }) // @@ -168,14 +177,21 @@ async function handleHttpSqlRequest(request: express.Request, response: express. /** Server info for /v1/info endpoints */ function getServerInfo() { + // eslint-disable-next-line @typescript-eslint/no-unused-vars const { objectTypeCounts, protectedObjectTypeCounts, ...memory } = heapStats() - return { data: { name: '@sqlitecloud/gateway', version: packageJson.version, - date: new Date().toISOString(), - memory + bun: { + version: Bun.version, + path: Bun.which('bun'), + main: Bun.main, + uptime: Math.floor(Bun.nanoseconds() / 1e9) // seconds + }, + memory, + cpuUsage: process.cpuUsage(), + date: new Date().toISOString() } } } @@ -201,7 +217,7 @@ async function connectAsync(connectionString: string): Promise { if (error) { - log(`connectAsync | error: ${error}`) + log('connectAsync | error', error) reject(error) } else { resolve(connection) @@ -216,7 +232,7 @@ async function sendCommandsAsync(connection: SQLiteCloudBunConnection, sql: stri connection.sendCommands(sql, (error: Error | null, results) => { // Explicitly type the 'error' parameter as 'Error' if (error) { - log(`sendCommandsAsync | error: ${error}`) + log('sendCommandsAsync | error', error) reject(error) } else { // console.debug(JSON.stringify(results).substring(0, 140) + '...') @@ -244,7 +260,7 @@ async function queryAsync(connection: SQLiteCloudBunConnection, apiRequest: SqlA } } } catch (error) { - log(`queryAsync | error: ${error}`) + log('queryAsync | error', error) const sqliteError = error as SQLiteCloudError return { error: { diff --git a/test/connection-ws.test.ts b/test/connection-ws.test.ts index fb1530e..d398b37 100644 --- a/test/connection-ws.test.ts +++ b/test/connection-ws.test.ts @@ -14,6 +14,7 @@ import { WARN_SPEED_MS, EXPECT_SPEED_MS } from './shared' +import { error } from 'console' describe('connection-ws', () => { let chinook: SQLiteCloudConnection @@ -36,11 +37,9 @@ describe('connection-ws', () => { it('should connect with config object string', done => { const configObj = getChinookConfig() configObj.useWebsocket = true - const connection = new SQLiteCloudWebsocketConnection(configObj) - expect(connection).toBeDefined() - connection.sendCommands('TEST STRING', (error, results) => { - connection.close() - expect(connection.connected).toBe(false) + let connection: SQLiteCloudWebsocketConnection | null = null + connection = new SQLiteCloudWebsocketConnection(configObj, error => { + expect(error).toBeNull() done() }) }) @@ -52,19 +51,12 @@ describe('connection-ws', () => { configObj.useWebsocket = true // should attempt connection and return error - const connection = new SQLiteCloudWebsocketConnection(configObj) - expect(connection).toBeDefined() - connection.sendCommands('TEST STRING', (error, results) => { + const connection = new SQLiteCloudWebsocketConnection(configObj, error => { expect(error).toBeDefined() - expect(error).toBeInstanceOf(SQLiteCloudError) - expect((error as any).message).toBe('SQLiteCloudError: Authentication failed.') - - connection.close() - expect(connection.connected).toBe(false) done() }) }) -/* TODO RESTORE TEST + /* TODO RESTORE TEST it('should connect with connection string', done => { if (CHINOOK_DATABASE_URL.indexOf('localhost') > 0) { // skip this test when running locally since it requires a self-signed certificate @@ -86,203 +78,203 @@ describe('connection-ws', () => { }) }) */ - describe('send test commands', () => { - it('should test integer', done => { - chinook.sendCommands('TEST INTEGER', (error, results) => { - expect(error).toBeNull() - expect(results).toBe(123456) - done() + describe('send test commands', () => { + it('should test integer', done => { + chinook.sendCommands('TEST INTEGER', (error, results) => { + expect(error).toBeNull() + expect(results).toBe(123456) + done() + }) }) - }) - it('should test null', done => { - chinook.sendCommands('TEST NULL', (error, results) => { - expect(error).toBeNull() - expect(results).toBeNull() - done() + it('should test null', done => { + chinook.sendCommands('TEST NULL', (error, results) => { + expect(error).toBeNull() + expect(results).toBeNull() + done() + }) }) - }) - it('should test float', done => { - chinook.sendCommands('TEST FLOAT', (error, results) => { - expect(error).toBeNull() - expect(results).toBe(3.1415926) - done() + it('should test float', done => { + chinook.sendCommands('TEST FLOAT', (error, results) => { + expect(error).toBeNull() + expect(results).toBe(3.1415926) + done() + }) }) - }) - it('should test string', done => { - chinook.sendCommands('TEST STRING', (error, results) => { - expect(error).toBeNull() - expect(results).toBe('Hello World, this is a test string.') - done() + it('should test string', done => { + chinook.sendCommands('TEST STRING', (error, results) => { + expect(error).toBeNull() + expect(results).toBe('Hello World, this is a test string.') + done() + }) }) - }) - it('should test zero string', done => { - chinook.sendCommands('TEST ZERO_STRING', (error, results) => { - expect(error).toBeNull() - expect(results).toBe('Hello World, this is a zero-terminated test string.') - done() + it('should test zero string', done => { + chinook.sendCommands('TEST ZERO_STRING', (error, results) => { + expect(error).toBeNull() + expect(results).toBe('Hello World, this is a zero-terminated test string.') + done() + }) }) - }) - it('should test string0', done => { - chinook.sendCommands('TEST STRING0', (error, results) => { - expect(error).toBeNull() - expect(results).toBe('') - done() + it('should test string0', done => { + chinook.sendCommands('TEST STRING0', (error, results) => { + expect(error).toBeNull() + expect(results).toBe('') + done() + }) }) - }) - it('should test command', done => { - chinook.sendCommands('TEST COMMAND', (error, results) => { - expect(error).toBeNull() - expect(results).toBe('PING') - done() + it('should test command', done => { + chinook.sendCommands('TEST COMMAND', (error, results) => { + expect(error).toBeNull() + expect(results).toBe('PING') + done() + }) }) - }) - it('should test json', done => { - chinook.sendCommands('TEST JSON', (error, results) => { - expect(error).toBeNull() - expect(results).toEqual({ - 'msg-from': { class: 'soldier', name: 'Wixilav' }, - 'msg-to': { class: 'supreme-commander', name: '[Redacted]' }, - 'msg-type': ['0xdeadbeef', 'irc log'], - 'msg-log': [ - 'soldier: Boss there is a slight problem with the piece offering to humans', - 'supreme-commander: Explain yourself soldier!', - "soldier: Well they don't seem to move anymore...", - 'supreme-commander: Oh snap, I came here to see them twerk!' - ] + it('should test json', done => { + chinook.sendCommands('TEST JSON', (error, results) => { + expect(error).toBeNull() + expect(results).toEqual({ + 'msg-from': { class: 'soldier', name: 'Wixilav' }, + 'msg-to': { class: 'supreme-commander', name: '[Redacted]' }, + 'msg-type': ['0xdeadbeef', 'irc log'], + 'msg-log': [ + 'soldier: Boss there is a slight problem with the piece offering to humans', + 'supreme-commander: Explain yourself soldier!', + "soldier: Well they don't seem to move anymore...", + 'supreme-commander: Oh snap, I came here to see them twerk!' + ] + }) + done() }) - done() }) - }) - it('should test blob', done => { - chinook.sendCommands('TEST BLOB', (error, results) => { - expect(error).toBeNull() - expect(typeof results).toBe('object') - expect(results).toBeInstanceOf(Buffer) - const bufferrowset = results as any as Buffer - expect(bufferrowset.length).toBe(1000) - done() + it('should test blob', done => { + chinook.sendCommands('TEST BLOB', (error, results) => { + expect(error).toBeNull() + expect(typeof results).toBe('object') + expect(results).toBeInstanceOf(Buffer) + const bufferrowset = results as any as Buffer + expect(bufferrowset.length).toBe(1000) + done() + }) }) - }) - it('should test blob0', done => { - chinook.sendCommands('TEST BLOB0', (error, results) => { - expect(error).toBeNull() - expect(typeof results).toBe('object') - expect(results).toBeInstanceOf(Buffer) - const bufferrowset = results as any as Buffer - expect(bufferrowset.length).toBe(0) - done() + it('should test blob0', done => { + chinook.sendCommands('TEST BLOB0', (error, results) => { + expect(error).toBeNull() + expect(typeof results).toBe('object') + expect(results).toBeInstanceOf(Buffer) + const bufferrowset = results as any as Buffer + expect(bufferrowset.length).toBe(0) + done() + }) }) - }) - it('should test error', done => { - chinook.sendCommands('TEST ERROR', (error, results) => { - expect(error).toBeDefined() - expect(error).toBeInstanceOf(SQLiteCloudError) + it('should test error', done => { + chinook.sendCommands('TEST ERROR', (error, results) => { + expect(error).toBeDefined() + expect(error).toBeInstanceOf(SQLiteCloudError) - const sqliteCloudError = error as SQLiteCloudError - expect(sqliteCloudError.message).toBe('This is a test error message with a devil error code.') - expect(sqliteCloudError.errorCode).toBe('66666') - expect(sqliteCloudError.externalErrorCode).toBe('0') - expect(sqliteCloudError.offsetCode).toBe(-1) + const sqliteCloudError = error as SQLiteCloudError + expect(sqliteCloudError.message).toBe('This is a test error message with a devil error code.') + expect(sqliteCloudError.errorCode).toBe('66666') + expect(sqliteCloudError.externalErrorCode).toBe('0') + expect(sqliteCloudError.offsetCode).toBe(-1) - done() + done() + }) }) - }) - it('should test exterror', done => { - chinook.sendCommands('TEST EXTERROR', (error, results) => { - expect(error).toBeDefined() - expect(error).toBeInstanceOf(SQLiteCloudError) + it('should test exterror', done => { + chinook.sendCommands('TEST EXTERROR', (error, results) => { + expect(error).toBeDefined() + expect(error).toBeInstanceOf(SQLiteCloudError) - const sqliteCloudError = error as SQLiteCloudError - expect(sqliteCloudError.message).toBe('This is a test error message with an extcode and a devil error code.') - expect(sqliteCloudError.errorCode).toBe('66666') - expect(sqliteCloudError.externalErrorCode).toBe('333') - expect(sqliteCloudError.offsetCode).toBe(-1) + const sqliteCloudError = error as SQLiteCloudError + expect(sqliteCloudError.message).toBe('This is a test error message with an extcode and a devil error code.') + expect(sqliteCloudError.errorCode).toBe('66666') + expect(sqliteCloudError.externalErrorCode).toBe('333') + expect(sqliteCloudError.offsetCode).toBe(-1) - done() + done() + }) }) - }) - it('should test array', done => { - chinook.sendCommands('TEST ARRAY', (error, results) => { - expect(error).toBeNull() - expect(Array.isArray(results)).toBe(true) - - const arrayrowset = results as any as Array - expect(arrayrowset.length).toBe(5) - expect(arrayrowset[0]).toBe('Hello World') - expect(arrayrowset[1]).toBe(123456) - expect(arrayrowset[2]).toBe(3.1415) - expect(arrayrowset[3]).toBeNull() - done() + it('should test array', done => { + chinook.sendCommands('TEST ARRAY', (error, results) => { + expect(error).toBeNull() + expect(Array.isArray(results)).toBe(true) + + const arrayrowset = results as any as Array + expect(arrayrowset.length).toBe(5) + expect(arrayrowset[0]).toBe('Hello World') + expect(arrayrowset[1]).toBe(123456) + expect(arrayrowset[2]).toBe(3.1415) + expect(arrayrowset[3]).toBeNull() + done() + }) }) - }) - it('should test rowset', done => { - chinook.sendCommands('TEST ROWSET', (error, results) => { - expect(error).toBeNull() - expect(results.numberOfRows).toBe(41) - expect(results.numberOfColumns).toBe(2) - expect(results.version == 1 || results.version == 2).toBeTruthy() - expect(results.columnsNames).toEqual(['key', 'value']) - done() - }) - }) - - it( - 'should test chunked rowset', - done => { - // this operation sends 150 packets, so we need to increase the timeout - const database = getChinookWebsocketConnection(undefined, { timeout: 60 * 1000 }) - database.sendCommands('TEST ROWSET_CHUNK', (error, results) => { + it('should test rowset', done => { + chinook.sendCommands('TEST ROWSET', (error, results) => { expect(error).toBeNull() - expect(results.numberOfRows).toBe(147) - expect(results.numberOfColumns).toBe(1) - expect(results.columnsNames).toEqual(['key']) - - database.close() + expect(results.numberOfRows).toBe(41) + expect(results.numberOfColumns).toBe(2) + expect(results.version == 1 || results.version == 2).toBeTruthy() + expect(results.columnsNames).toEqual(['key', 'value']) done() }) - }, - LONG_TIMEOUT - ) - }) - - describe('operations', () => { - it( - 'should serialize operations', - done => { - const numQueries = 20 - let completed = 0 + }) - for (let i = 0; i < numQueries; i++) { - chinook.sendCommands(`select ${i} as "count", 'hello' as 'string'`, (error, results) => { + it( + 'should test chunked rowset', + done => { + // this operation sends 150 packets, so we need to increase the timeout + const database = getChinookWebsocketConnection(undefined, { timeout: 60 * 1000 }) + database.sendCommands('TEST ROWSET_CHUNK', (error, results) => { expect(error).toBeNull() - expect(results.numberOfColumns).toBe(2) - expect(results.numberOfRows).toBe(1) - expect(results.version == 1 || results.version == 2).toBeTruthy() - expect(results.columnsNames).toEqual(['count', 'string']) - expect(results.getItem(0, 0)).toBe(i) - - if (++completed >= numQueries) { - done() - } + expect(results.numberOfRows).toBe(147) + expect(results.numberOfColumns).toBe(1) + expect(results.columnsNames).toEqual(['key']) + + database.close() + done() }) - } - }, - LONG_TIMEOUT - ) - /* TODO RESTORE TEST + }, + LONG_TIMEOUT + ) + }) + + describe('operations', () => { + it( + 'should serialize operations', + done => { + const numQueries = 20 + let completed = 0 + + for (let i = 0; i < numQueries; i++) { + chinook.sendCommands(`select ${i} as "count", 'hello' as 'string'`, (error, results) => { + expect(error).toBeNull() + expect(results.numberOfColumns).toBe(2) + expect(results.numberOfRows).toBe(1) + expect(results.version == 1 || results.version == 2).toBeTruthy() + expect(results.columnsNames).toEqual(['count', 'string']) + expect(results.getItem(0, 0)).toBe(i) + + if (++completed >= numQueries) { + done() + } + }) + } + }, + LONG_TIMEOUT + ) + /* TODO RESTORE TEST it('should apply short timeout', done => { // apply shorter timeout const configObj = parseConnectionString(CHINOOK_DATABASE_URL + '?timeout=20') @@ -305,163 +297,164 @@ describe('connection-ws', () => { }) }) */ - }) + }) - describe('send select commands', () => { - it('should LIST METADATA', done => { - chinook.sendCommands('LIST METADATA;', (error, results) => { - expect(error).toBeNull() - expect(results.numberOfColumns).toBe(8) - expect(results.numberOfRows).toBe(64) - done() + describe('send select commands', () => { + it('should LIST METADATA', done => { + chinook.sendCommands('LIST METADATA;', (error, results) => { + expect(error).toBeNull() + expect(results.numberOfColumns).toBe(8) + expect(results.numberOfRows).toBe(64) + done() + }) }) - }) - it('should select results with no colum names', done => { - chinook.sendCommands("select 42, 'hello'", (error, results) => { - expect(error).toBeNull() - expect(results.numberOfColumns).toBe(2) - expect(results.numberOfRows).toBe(1) - expect(results.version == 1 || results.version == 2).toBeTruthy() - expect(results.columnsNames).toEqual(['42', "'hello'"]) // column name should be hello, not 'hello' - expect(results.getItem(0, 0)).toBe(42) - expect(results.getItem(0, 1)).toBe('hello') + it('should select results with no colum names', done => { + chinook.sendCommands("select 42, 'hello'", (error, results) => { + expect(error).toBeNull() + expect(results.numberOfColumns).toBe(2) + expect(results.numberOfRows).toBe(1) + expect(results.version == 1 || results.version == 2).toBeTruthy() + expect(results.columnsNames).toEqual(['42', "'hello'"]) // column name should be hello, not 'hello' + expect(results.getItem(0, 0)).toBe(42) + expect(results.getItem(0, 1)).toBe('hello') - done() + done() + }) }) - }) - it('should select long formatted string', done => { - chinook.sendCommands("USE DATABASE :memory:; select printf('%.*c', 1000, 'x') AS DDD", (error, results) => { - expect(error).toBeNull() - expect(results.numberOfColumns).toBe(1) - expect(results.numberOfRows).toBe(1) - expect(results.version == 1 || results.version == 2).toBeTruthy() + it('should select long formatted string', done => { + chinook.sendCommands("USE DATABASE :memory:; select printf('%.*c', 1000, 'x') AS DDD", (error, results) => { + expect(error).toBeNull() + expect(results.numberOfColumns).toBe(1) + expect(results.numberOfRows).toBe(1) + expect(results.version == 1 || results.version == 2).toBeTruthy() - const stringrowset = results.getItem(0, 0) as string - expect(stringrowset.startsWith('xxxxxxxxxxxxx')).toBeTruthy() - expect(stringrowset).toHaveLength(1000) + const stringrowset = results.getItem(0, 0) as string + expect(stringrowset.startsWith('xxxxxxxxxxxxx')).toBeTruthy() + expect(stringrowset).toHaveLength(1000) - done() + done() + }) }) - }) - it('should select database', done => { - chinook.sendCommands('USE DATABASE chinook.db;', (error, results) => { - expect(error).toBeNull() - expect(results.numberOfColumns).toBeUndefined() - expect(results.numberOfRows).toBeUndefined() - expect(results.version).toBeUndefined() - done() + it('should select database', done => { + chinook.sendCommands('USE DATABASE chinook.db;', (error, results) => { + expect(error).toBeNull() + expect(results.numberOfColumns).toBeUndefined() + expect(results.numberOfRows).toBeUndefined() + expect(results.version).toBeUndefined() + done() + }) }) - }) - it('should select * from tracks limit 10 (no chunks)', done => { - chinook.sendCommands('SELECT * FROM tracks LIMIT 10;', (error, results) => { - expect(error).toBeNull() - expect(results.numberOfColumns).toBe(9) - expect(results.numberOfRows).toBe(10) - done() + it('should select * from tracks limit 10 (no chunks)', done => { + chinook.sendCommands('SELECT * FROM tracks LIMIT 10;', (error, results) => { + expect(error).toBeNull() + expect(results.numberOfColumns).toBe(9) + expect(results.numberOfRows).toBe(10) + done() + }) }) - }) - it('should select * from tracks (with chunks)', done => { - chinook.sendCommands('SELECT * FROM tracks;', (error, results) => { - expect(error).toBeNull() - expect(results.numberOfColumns).toBe(9) - expect(results.numberOfRows).toBe(3503) - done() + it('should select * from tracks (with chunks)', done => { + chinook.sendCommands('SELECT * FROM tracks;', (error, results) => { + expect(error).toBeNull() + expect(results.numberOfColumns).toBe(9) + expect(results.numberOfRows).toBe(3503) + done() + }) }) - }) - it('should select * from albums', done => { - chinook.sendCommands('SELECT * FROM albums;', (error, results) => { - expect(error).toBeNull() - expect(results.numberOfColumns).toBe(3) - expect(results.numberOfRows).toBe(347) - expect(results.version == 1 || results.version == 2).toBeTruthy() - done() + it('should select * from albums', done => { + chinook.sendCommands('SELECT * FROM albums;', (error, results) => { + expect(error).toBeNull() + expect(results.numberOfColumns).toBe(3) + expect(results.numberOfRows).toBe(347) + expect(results.version == 1 || results.version == 2).toBeTruthy() + done() + }) }) }) - }) - describe('connection stress testing', () => { - it( - '20x test string', - done => { - const numQueries = 20 - let completed = 0 - const startTime = Date.now() - for (let i = 0; i < numQueries; i++) { - chinook.sendCommands('TEST STRING', (error, results) => { - expect(error).toBeNull() - expect(results).toBe('Hello World, this is a test string.') - if (++completed >= numQueries) { - const queryMs = (Date.now() - startTime) / numQueries - if (queryMs > WARN_SPEED_MS) { - console.log(`${numQueries}x test string, ${queryMs.toFixed(0)}ms per query`) - expect(queryMs).toBeLessThan(EXPECT_SPEED_MS) - } - done() - } - }) - } - }, - LONG_TIMEOUT - ) - - it( - '20x individual selects', - done => { - const numQueries = 20 - let completed = 0 - const startTime = Date.now() - for (let i = 0; i < numQueries; i++) { - chinook.sendCommands('SELECT * FROM albums ORDER BY RANDOM() LIMIT 4;', (error, results) => { - expect(error).toBeNull() - expect(results.numberOfColumns).toBe(3) - expect(results.numberOfRows).toBe(4) - if (++completed >= numQueries) { - const queryMs = (Date.now() - startTime) / numQueries - if (queryMs > WARN_SPEED_MS) { - console.log(`${numQueries}x individual selects, ${queryMs.toFixed(0)}ms per query`) - expect(queryMs).toBeLessThan(EXPECT_SPEED_MS) + describe('connection stress testing', () => { + it( + '20x test string', + done => { + const numQueries = 20 + let completed = 0 + const startTime = Date.now() + for (let i = 0; i < numQueries; i++) { + chinook.sendCommands('TEST STRING', (error, results) => { + expect(error).toBeNull() + expect(results).toBe('Hello World, this is a test string.') + if (++completed >= numQueries) { + const queryMs = (Date.now() - startTime) / numQueries + if (queryMs > WARN_SPEED_MS) { + console.log(`${numQueries}x test string, ${queryMs.toFixed(0)}ms per query`) + expect(queryMs).toBeLessThan(EXPECT_SPEED_MS) + } + done() } - done() - } - }) - } - }, - LONG_TIMEOUT - ) - - it( - '20x batched selects', - done => { - const numQueries = 20 - let completed = 0 - const startTime = Date.now() - for (let i = 0; i < numQueries; i++) { - chinook.sendCommands( - 'SELECT * FROM albums ORDER BY RANDOM() LIMIT 16; SELECT * FROM albums ORDER BY RANDOM() LIMIT 12; SELECT * FROM albums ORDER BY RANDOM() LIMIT 8; SELECT * FROM albums ORDER BY RANDOM() LIMIT 4;', - (error, results) => { + }) + } + }, + LONG_TIMEOUT + ) + + it( + '20x individual selects', + done => { + const numQueries = 20 + let completed = 0 + const startTime = Date.now() + for (let i = 0; i < numQueries; i++) { + chinook.sendCommands('SELECT * FROM albums ORDER BY RANDOM() LIMIT 4;', (error, results) => { expect(error).toBeNull() - // server only returns the last rowset? expect(results.numberOfColumns).toBe(3) expect(results.numberOfRows).toBe(4) if (++completed >= numQueries) { const queryMs = (Date.now() - startTime) / numQueries if (queryMs > WARN_SPEED_MS) { - console.log(`${numQueries}x batched selects, ${queryMs.toFixed(0)}ms per query`) + console.log(`${numQueries}x individual selects, ${queryMs.toFixed(0)}ms per query`) expect(queryMs).toBeLessThan(EXPECT_SPEED_MS) } done() } - } - ) - } - }, - LONG_TIMEOUT - ) + }) + } + }, + LONG_TIMEOUT + ) + + it( + '20x batched selects', + done => { + const numQueries = 20 + let completed = 0 + const startTime = Date.now() + for (let i = 0; i < numQueries; i++) { + chinook.sendCommands( + 'SELECT * FROM albums ORDER BY RANDOM() LIMIT 16; SELECT * FROM albums ORDER BY RANDOM() LIMIT 12; SELECT * FROM albums ORDER BY RANDOM() LIMIT 8; SELECT * FROM albums ORDER BY RANDOM() LIMIT 4;', + (error, results) => { + expect(error).toBeNull() + // server only returns the last rowset? + expect(results.numberOfColumns).toBe(3) + expect(results.numberOfRows).toBe(4) + if (++completed >= numQueries) { + const queryMs = (Date.now() - startTime) / numQueries + if (queryMs > WARN_SPEED_MS) { + console.log(`${numQueries}x batched selects, ${queryMs.toFixed(0)}ms per query`) + expect(queryMs).toBeLessThan(EXPECT_SPEED_MS) + } + done() + } + } + ) + } + }, + LONG_TIMEOUT + ) + }) }) })

      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%0D?=?Y-roZnyd$k-nERzG$E1>GXM`^E;e# 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 z≫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�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�V;>fh-WLfChs^0&`Z_PQ29B`GqeyPwLU_N0xHoV7M7fVm@><#zhFPc9n zf11qrJtc}YlDX8;!DQ2QY!3hSOK-v-XO^|DfV%QHBl$XGB0JHc&-mCU^5Y|J4eb*( zy;WrPi8%j1pf!$cH-nu0f0naQiW|~BhrJ@6(H)E(BFG&Sfr9Yz!16qNCxi3sk6Y>c z(A|YEe5uxP7bLc5t9}$?pU?V^aWeXs=8AVu@xrTef)yw94oH2 z-|X*8_h|jM3p?{?&<}0j0&P#R%6sy-$KCA%P{EGCy z16+7IarLW-F|iE|AH84X#qf@P!1xSXKkrS9PfnD*bK)cgfHPL%%(2;@bk?Ii%kZt) zj87c6c>CuuqbrNAE~T9g#!YsNw_QC{ds1H`y=5wPP0QLQUwde5PcOdl+JD;1_b-!g z^d{C8*yrn4Gse>yV~yYGtR?5!@zofpNimc;b>&6KG^mk}2 zv-+jPxb>L1G~B1k8?*N|5WATgpKp%9TluopIB} zv6^qT9NwTZg5PU9EgCKJ>RV(7>lX8Ekh>}Sz%jPKwQ1a^+>5`0?i>u$wtP=~^tl0k z&feix(ayQ_Uv%Az4vb4M!tA* z5PQHgz#sT>g6#+Xr+lsHvj)&rs3Yskw)VWr zxeI0>^oHGTo=Fecy2Y`Bs9j?d2GqIBhirLW#$=`1DU4H%=mApqlG?7rxGu+xOe`(EYf(c28ZIKYbm37{v`h@ z*TI@xaApD&`Sy1ATX?l;_x_Y` zGw6GUi?j9Q34ZZt@l?TI2mCRfCmZ-Pv^_tbWV-WWAyl01?5!K#9kS~? znD-SY+x4CNYtL~ibcn1pz73KoDpz)vGZqfKx0$`A!I`XufJrhXxZDRmGUHz*O)^S8 z6neh}`&p-Juh%~H?|Kez&|G1TWLD9Rc&XB7(+}OLluW-Lq^niM61tkv0nznq(fO$Bi@v#A>1kC>HLux<;h8p0d2PUOpyt118>+jAat+_K z+Prmc+lqwF)ypZ)gwohYk)_cWUR{bjKUCq6EL+Rl38TuOp zkE_wi4IQ}OSOpIL7imtob*53C{ob|6RztgQVMkG(pR$`=8mWLjO!?rPc5pl~81%P$ z?-j&1-GVMEy6@%N9`_sVbIx$T8`@Ll`-)lEWa z?Y3pRZSk(Q)L+vlFa0C*ciIQ^w|#{E`hi>hx&OVv4I6-E{knvY>OatfW0KFD_vIYn z!ES%-UT>d$_`G)3X2FjD-+R=5tnp|b0X}a&{-ygczQxvVPanxcHiy3Ctts;QMTeQt zVLrUr&>=e5HQ-OQC%I_ok+X{3KiZhvx@wVGLlj<>pv6YYiYL>C@zq@boFnxy4|>RJ zw2f^l@37UTx$n{4;t}9~n79GLuh);coWV}6*YJ)cTGM-gcg4~btw~N_oI-1NQ>Sp~ z(V8jm(%MtMIhxk`iyT_>_8mP~oIO7u>$g#?l}58>8pGOYEP7u6y)Vce-M%5aT-O!u zoX@icCgsm*%iMIq@&M~K*^1h~ZmpBwVI#I+0~fODIc$SrbRWIjl|j}+8F9rF;5>JF z3%ZQn&$pfUM(>Q-a3wZcXaDa1q3+G&tE#U5?{n@AaBsq#gc&n|Cc#-CplEIqR0c)8 zqP4b4fN$G`IN?+gm7Ab80f%0vDAtldha`%fuo|l+5N$y^0aZJjLE9ua;Ybv?&-=5_ zIk`6x`+c6@^ZfJtabD+~J+8g>+H0@9_S$P-67Q4klQh=Gg1h;^G!NL$1;%rL^=#I4 zbJ@>x{EmBbUM+AW&UrdNp8gA8H0?=WbT+!vi9E7}K8AWjW2_k&_d9#p8QYyV@@RA6 z%l?(3g}`?B7yIMY>|Y7idUQ5bvz#+@TF2eXS-{v#?i=PjuIe9uwcV_@eFb_t@@ntw z-^aRpXq*{YdK~+kI(tZXdx{lZ!N2AGL%Tl8ZzZghyJR$Xv`=*M=nfR~k1VqTS{AR# zCtaq(RaUAM{R;ney|L-tLqfCRv#SCZ+pF-$ws5Qf1brTUEyP*ix<(!N%W8GIwxFQv}y_a_4V*Z(Z{6vKs10}g+0OPf%V}1 ztJcaaXnzbc)=p%5<`i@Gc$CI5wyR5Wax1b_A87-Z7`yV74eWoIvf7=pc5<$-5?N;!5#1~@sF*jW6!LI@g?20`du)ymT%5|54{kuN#C;z|K=VIYfrrh zxuI?F!Gc=1eAz{Dub+`ScGISeL)bF_f3?=1SuGnlyZdw54{%OnAv|N{ytiYEYqb8G zx^qL<{vidrC(w&4+Yj#P=iIEF8%!F`idFlq-b+Z6OSrzPkqf$*`!6Ky!9EyLo6d7# z(7I7D1O~t`%!NUEXTeeSCTFR$``2>}WonF08c<&u^(o&N!iPTi#r2_V1a($G{3?@m z;(r9oJ@!hE2cJpZ7Pg$y^CQr}3XU(BA=3?AV>$QY`jK8?X@WE!pag6LPQ z%9rLu21m}ULC0xT?wVs)zB0#GxpPicRn?qI?y-(kt(~(KotDbTxWavFY?D9Za8hH& z354-2-I`UoZjM!1!&5y+v`{dbK4pBgAh$~wdINBkGWSVVl#Ve{Y(;M(jqmZ}jE#`; zRAPg=7M@a<=g6j$X`9*wZEO8CdZ3K|W%5+l32}KU4I2ZGuP*h4R(WymQMQo zO}`a=|5~%=ftHauk-e%HvEICobMlYG`I_J#3;e=~#$fvrD|+B617EmfNocl@F}LJG zbUNr+mRyEESLnCn!FU_DkA~;uvYw@lO0RYoQRe5foiaSRZr5>fzFlwT(*APgng=9L z%3sJ}`1cU_cmRGLgs&$v*Wfdx)rX&;BxuO7HO|k%d=;CR&R>LjS2Wtk)LrxF_C5_2cHt zBH`D-lW#!y@~=d~exo#^sXgA|Fwds?C)Jyn+-q_-&2~SS93bfDO#$2g- zi)gEO=)7aF`KZO83UB)Y=0)1l2Hj?&%h9`ixfPxB88RFGnI^VRT|!=dI~*oFmce29K9q`=_wvAO;BXeT^u0e@=K*H|l-au=z--(z3e z!p=l@lB(~jkTn#JpM}~;+QEX2$QTjg6t;*lBfPC+&Vje22{!31)t0WYj!d))x~XGs zQTk_vXVU0S4W$W;cha2Y!Y;kHp^N#zJQ1H$w6lye$7*LTZ_}=OOPY5v#yKN38=hJ) z5nCALnNaS&X_F~qyn{dO?aQX9j`4I0^_e*Q8+CP$b!?rkfG2myW=wL&L>Bn28j62k zXyqK>^j+V7T;(vXF3WZHr@KyaWW4ghab96VbI#o|3*iL|;0g2L4fEg;=OW{sgKs9s z7lQCHYNj(L0s~;h&qKk%PVV2kCSG?vHf@`~s5p7-Nw1CQh_)fZ$g2_i3TBu;*63$MUlld&C0 zDQae~VS2z{WONGwct>|u)oA?3rW6(-PXO;utF)jy>(0Kg24tP;q_Uaw=$}A}-CRd` z+24rcM?9~y6n~3^V>@8p+5Z!duLqX3*F?f0`gz&%c)0Slp2_(O@@-nyKYaOFoEIXz zV`)M-wBi4sNccp`$xaAY`Tnbrb5wq5LVAT?5DB9LO53y~Azbh-aPH>qxH2J}^d&`( zPx0&l;hpDlwn*h)5l^2rjP%8k@Gp+jTj)C^CRKL#B|8$vZa>o ziI-Qj|2hA~m&fyp_WTz{!o`Gd|LzxMCCNXMk?w}a*Re*@JeSUYwPcelJNmVeoJmE- ztAQqRkz*Rr{g`iL8KtQk+;V0k`~1NZEaad&=a{gn9dqidTIX!4dI_0m9kNl4k!?zm zXFdf6!8@D!Bo7RfO9tv`b?!J(p38Q}N5mZ$n)mY1#cv!PGWwlm;dtA(bALt2O73F< zZ`M&{Akn!u76p@YJ~Xhsfcq7lTXTe@}EV7GaPv*WYT{pw?;meVE4m`_F&OBM^+izlj;W6yM zU3=ExKl3ijL+7h~(yX9(7AKhqv{V~>P$(zE*5!P@mz^%L;YaJcizbGS< zFwMnXH(Sj+q0!XeJMXlsu{q#BeUBUds^-xCZMYG>u64P}e2%h2H=eG-!^5sW$MMik zKMu5!R=cIocbOc@!PeLPQvJ#=AtR!xct8%h{YzpwydJpICw z2;=D&W)a4d7^b;(0sf%|)@8y5)Mdg3)Mdg3)Mdg3)TOWi$r*}6V? zB=d#6ZUXaGzQGax?_4b6i;7;^PZV*#!~KI%MQZNjr~Tc z^l*#;?dfN3ar{b{^3FH1`&RCy>$RR?AC&zV%Ghh-q)+;pbB-`kN9Ng^S$^!5;bril zt<~_yzA z+N6(F8+cgP>?h4)i!{Qc(;rS5Eu{Oha+H53@#;H^J)!{Z!1ln+@AT_D%T5WP|4xxl zYCENZK3}Z#s-w$q=Lb(NYRt#>wVEe6({3!Y?Sfc?XqD{k+7KtZ!{$b+x^q%s^iQk(#%pN{?kafYkr2WpFn-*QiGjed&1^-FP zx}dn|l=T;Vcgdksk~4>&a?I2dPx(>cq*H%1^4e2=H1eeXOgd%J$YV}jWKFtmQP!ky zExPm0A1zwWb4s>#(I2ubOuVq)os_xA4q4Y&ld^^npEGp$DC^i`PV@~=j$s>S;|KM3 z&`7LRYv>^IaWZmp3Ukm<=AdD$p@*|i?~i`U+%21%gV3tv48h&iBzUM zeMzIbd=o1^JFR-cC(IX)Zf8u>=KHLNq+_e1AA|Ja+t@I_;~$$Jz}_}s4_zN4PtU23 zFd9%9h)P>!**U-nN-wzZqzAk2LmSqPo4onV=&ZE45J%J~f5)AH}kXxTR5!mzd z?bUm?tynRuk@7_6HDjz{pLq~^}O)q>Z0dn*6+OiIbH zJ)ii8(656zM?a|P5W14iLaX-+=W`x+`Pm*jvo=dNG>dQUz-FQA^_kbIJg%>|3A)azlD0?XLT4S+O zp4n5Tysvxk|2PhRHFJzte{hzQUOwdp!e8v>tb5ATI@N)(m9lc>FCZs_op;H>q|+=<(zr&_MsD}S8klp#klHX zo!ILint#wgw5cKacN4m!FN>}nYoGiSY+bvLe^i*?Oi{ie=Z6g>|Sk0a}SI-*tL96)S6*MmvKH*{)3m} zH{vYnblN;9TFU)!Dn~fgxtz`LjF0H&8MN~g`nS4d=6d!}_9(rV7GG7-*XRfQa_qOU z@sga{gT7$ic>JJVY&CbE7HYncd8_M;a~p>RZ+oC^ZICk?fh~byw?A+OGR8sn>Vp1Z z>$^Am8oNu9qIveP^#Oa>?yeu(jfYNS>=h(ou7iC6Wx^{dllw>QKt(lYN7I>OMGN>> zT%ftT2U_b|;{4;EcA$m zf^$C|%#Zu-$Vfc|E=*tW_UNzgpM6HrBlApC>2Q0|r@+<)zTPAX#vG!wTfcN}llgSnG<2Ph}gd7Cs- z_)epoT;9i%=6K#iNprIEHfg5wJ&824c+Vlt9Ba1ZWmB(U5*&iZgH13AUcsb#1=CQ{ z2p;4#Q>I|z+rXrH1(V$L4c+HpK>Tg*GnZQEteckb7DUqzZy-qT6*KfK4eY08}M+^cxs zMw;t*&mql?yeGM7ZgIYIZ*y_Pn9GxmF3-Zr=nQOY_QGMIRnrFXX6~psT()mokncgE z=4r#cu*>#M8|8gpxQ{XJrk%HM+IVaB0`lcgrXK8)GMG@T3%oTz#zEGF`8sdBbheXMdKVvMUxJ=5 z!Wa}yYOf^(Z)V)?_3ULD=f%fkC2`WhczT!btk+q9{&nV_+rQ4hpt7H<-ufB+>n-?S z>g}HU<@J_RFMc*wnQ?~xz}q8h13q(JyN10j>Cx4ed)@n^;6(;U{xA9}(*EN>nYt_F zv_rm&qyw<6>hQh^?s*IU7}h&!O)pGx&Ra;PUc-I|>+k98ml^v5*>(({Ogv#qD;vkj zq}Se^{5KhUCHkoG%y>Ju8~i$ZsGoeLhDv`pk2{7vKHlvct>`AcOIeeBM1JXf z3rMfFm)VgA$~nKRJBxfa{$(~g`^&O%c@tSK=R?`>I(vH6AH-^>1G{7cwV@8Uih#-U zy}0YN{%gS`OSW25)|8}P~RDRknTRUYQxOY(}+c;$+A>BBGho7wqQN6&vLdy;C; zmAuQer!Z)7W9vKk(A9S%x}&9T_>7|7^KW*)u_?CCEb8R|xRVZ>tv7FTs_(Y1IQ71JshjWjMZJG9ZDL=W_HCkU`CCnF$CueXKTKN; zywqK^z^UiTgu3lVoUpIDVc2jvwjH#!+HFHdy%U!4LpP4L_mn#2W;D8C;9#hWgNzy2 zI15KEE^hY9!PZ&f8E3lj;N}SzHyL^CqY{_)>fFXLS4gMM-4`w%o=U*OBjCZ5@q4$d zJ$A4B)e0|Pb>q^eIxvkn#d)XaIq$JE#CKAg?mFHr<1ph-@Yqh>8H3z+(Am?KJzH)m z=OlcjW8XMv-Gl744jmlpd(Li}vl8qBd$zaYFP^=&c*{V47>u{QnnN1KxqOhl4CJYc zGJ?L9Wyk33mglF|YU=KtZ0KZNg6<$>XS`PR?6KFW47H<(`D^Xq%J446@=fDpzn|Xp z(fmt$rO;+5CLMw{ZPS@87O$ z{zcz+r1__Oe=^$In*Gywopvtk^3TlO1Ey@&_@*tY>*gI+v)Z*uWl(RR2LJu;cY2MJ z?r|^fu2AnqUff+y92;zDh9BRH{&twPH7^Q%e>>w;>9yyvu4_P+Htor(lzp_RgE_GG z!y4#_`ZDfy;xnS?b%x^0gs^nNcHR+sz?4h4;JcN)rTLCs)Xl@Kt#jckHztIQA?zl? zmQme!w<+d!LK;RE$h^+>;B=` zAcpu>xOkcN4^LrC*Kr^FFG(+WW%sFaO@81GAWu==R_VEg6QyzM=^eAm>4PHD?>uth zzJ?_0neAs;qeZ6{gx|O$(tH|krTt)<^^nn1@y%wyL&pRR zs82km?897V&lP#i@Toz*l?~W`X-`)@x4(HoW3j%Sm5y-%((gQfYYB@_WA+cjwf~@DIor!FPMavYxqWHFihbRhXHk zbKI#-C*S7Sh)K@;9_dtX>e&u_kMe&5V|PspcFZHN7g2lKlgyrJDd$hjKRne!7gCDd zrTJg#{wGJyR2#oT85eV(jLN7V9xtQR*K(%zS-mn!v03Q*r;O5M=U-*q?7?-B1K0KX zr#;MH29K@7tY;c{Oj+Pt<9RA+)aLD%IC8*OXy-@W9^;e;GrZU=Tm?;{EU#h0P(X?9he# za=GVV=^XKxw5Hect%r_r!^_}*Uie=LALo@J+1$m&G{ThcW#UJ=-@EyiZLftcJcoDA zZT;zF8FV})r7}E$xE%p!%pc&b^G<9;rft5pfBH?i(EaF2qrYig^~Jb5(<+UfW9Kac z;%MVb)N{)gqwm@4t!uhpi}RCuv#xRMJiN0O2fq{FFDd*J_KfID3n$qt-`4xj*lV&U zQHVWrJ-kSKz<0jYt9BNq;de@L-)Du<6ie~p5wN|+n+Ic=3BiwPh!f0zI?MCn)A|pnNRgk;XB%s6W>V7 zg^xo=vU}Eisd*{GUh%;vzDGBV_1A9DnTHm}u{p=)-jgJKsqv*wT(jc(?nrX{t}CpU z^3YRY8#{7lId(sJ+qtjo$Z^j1O6F8+TtWBYlL~y4)p+jW{Xln}vxk=aigohLMzfAhZK|OSTE{6p^VrJ1^nP>K z!360LmYO@0q%R!b^ru@{C-lY&m{YL-9>e;qzi)`ozV&j$cUF6T)V~;~b5!J?ZZfi%=){}Z-JrDmH25pJYuH#1_tdD zRsv^VeVj$1zA*RX9K{aH$3C>&a znBYy=SM#p1?hXf8uPBal3+5dhgdaZkF@nhBCJ$#^%s*?Q2HKQ#irT~(1N!r5c3crF zqaQ69Iszta0;a1^zTv{O-EF5}Dwp36!2~|l-o(D~U@UWC)H@MI^Pd2t=7aZ-g0IB8 zz3NGPj|ueP;Lfql^ZZztGP$Rt zp1ukOp;`8~)Ni563fASu-^GNOAc|Y`UB40E0W%GWPcMk7ocu(Q|3*Nr~o}cl4l=n|~ui)9j zQ^E5jkMNsF-)+MGWym4OnCRHeed&@}{q&oM_oL}@VkJYcTlk_*b>1V6jIMj2V}8~p z%k4ezpS`!IgS#=-bp6+N+IxK3-yaL#PA80i@$uW?uWk79t>+9|JvR0VzlE?6VRe@q zIe6=8&K2mands`->x)(?P5pA;o+|QxG=}`6(Se>7dZ3Q5*Hk|LCQYZ4WUrFL#;hL{N3fZ5ncd{ zA;L_$&Aw6%DahwXbC|Lr+eRJi*gVHRQaRd#gKm7(S~!gJL={6aP?aN8Gf;mz?y zH&M=`s&_OqRlk~vr)M-a|koI1cuX_YH;|tKOvs(GlOaGGek{fP? zFUHrrW10+ou+DAhaQL^=Ry&%V9tp1^Z$!Fj;@WcT=)1sb@!tUd>7p;3x~*t2X|Exz znfEudmUindSAOP%`sDK))z)|TxA+%*>in9F5snp9MQ~r}i-9H)=FC zRH@ifA&#!bXH?0csBAbsMqco2*8(@i`9vu^=t1Cm5FT_BejPMV*P#c85A@cR*n8x= zF$itxyMD97J02hJ^nV@y?Im_}7ys)2u4%x_zPjcy69;YVAWr??bsY1|;U)Wa;q#03 zH!Hs0@9>51D8Krj|Mu1RIi|h{{6YVpKwEX_S5*H2z8i!?E3g~gQE#N>7{j-lo?`By z9o58T*s1$zlc9lcBAdzgLI7MZAK}aq5myh9jm-H!nVgAeir;HK|Ef5i>(iYw4zIoh zTrLKu7h{hW=6v)ZV-wv~$eCdF-qvKNG@7<7ciOU;w$vfJErrL44|bNY4~YHNXpK+K z6LW?bJe2OM>BVOX_qiE7t%Wy03ulwJZZSe^lcxJ z9$SuvkKFX6!}hSLW%#^xn&M@K0J(|M2qmzg?@)hsTyEJbBKF#HqY*ilggTHsJo8{L%3;t>3 zPB*Rm%4cDZjIUz$WK)~oz0lEf%U}OCALrajFF&g}lpA=4{d|0ACQ`NpcSW(FfN*6c)k3GdYki}Uzh2KYb#>wz} zbVQ~t=#stkMxG#z=JYPowI$%a26-g72OQsJ_XZn_nuDYKrax-f*AIeM7K3TNj;YrP ze&MD_e$cR$o-n~OzPn`yl}M!&^DiG*tQErKT)svkv{9WNdGa zEuRy|Z#(msCp&mH0-OFBFSDNW+nYJd_UU-`S}1crV=o8|CDWdK+hT8pvxPzM2);~v zprcIc(wVB!>L=*7Z#_&olKr;eXJ7dk zqbWhxKEjlPo%eq1cQl4~;RCOuR8C_0Wxf`sYi+Xi#b*aWej_7=B zljiXkC8O#e-;uMR`%>_0{@FjeP~!kTz&zXMUk}*`K85c;aI@@{I2<-KFMoPh07nOY zk#xp(*{*neJ9TY79UCL!#VbmHYuV0tyxJijdw(FG<}vL*X3{72C~MS?QOqT*O;oq! zYt~|W9eO}UfCj{qj@tL?8@Df%KEIbS{If{&Vmr8-yU-5ohS#RUGrT_Di?gHS+=iXIw@&)d^N4%NqfGdgd zkVsc~(9@aVy7+~7AE=LV=AcU?Jhh6k&)ogd1^DM)jjfSCewS<6xPfz+)o%`4>ds-p zjqHeggF@!4VFUfB`Aj@Fi@L65-iVm}N#>=s&RN3Uq#@p%C6o-#Sb4_mMZ5i&;o2M> z%RZxM)11?Pc&_oqt8agF?kcrY<@=x$`f#uAC3~yeu~AX@O?-QFqqLRuQSztmdmC{JmwGdwIl5`jm+{U@;mQY}9E9vW7#VyBIKzjM-^Y0z=l)*V>#C2dhkLl2 zbg-SeRR4z2)W`b$b=GkoCx?1(Vh?&JYy0$c9(@asoWZa5k1Lq|5691lwI?RK@Q>WGZNC51$~}VkCNQ?gz%Kcq0@yQ|AB`S?f64V1t6%A7eXFh=xcVGJMo1A@)ltZz_$XoC)`GpzNbQj^$->BZ7lRp!=PiOX3hUz_^dL!^E z&fGh9mQdFW>J?2m^^R@&0r^U8r{3l2Q{p(=GfH)oQ9kl?#d_-94!sK|t=k3fJK)A! zuLtdT-?zK#^~0;@(Z}b~*XLk2b9N(rZ`N5I_1;(-)3g*`y!Hgv-Q%o>q-!sPM&PYm zy>mhJuY&7_p)0j-^fok=!5&r}ZOZv}bcub_2P?R9n!Pp7Yb38v8)iklHoO)wwuxKoPIcSh+7(F7uez^4 zoSQGjx3CN6z&0HX=GP|w-^1fGfarFYM5yjtmw$QCz# z$L1H(4L+xFxhao3(Z3{J9W+u2{bUqsA1LEcqx7BxWW+v$q z^PEL^8R>KFgEQN2pKA0?7Uj8Rnz``Uzp-a<>d@xUfV?M>x0JkJ2H$DGkjZ0nF6?Cb z1b(nJkZDDs#opB0IP(kM{i~fi6ZKX}=m~E8q2UpGzpQNO`ni<{s`U z*d4G_jUKW(%sM!XKb@+V=ag36H77FD(e*z%54m-w)!T+Hu=?~+FS@GUYWyFR-AY>e z68^chbTIm%4s2tR-T!2(clbW$kl{`l-+vsuaEC%2KFH9JI(bH0z1_-#orx&}`x0Au z7~2ubj4ICrtJh+DM36m9nq#cqe<)A3`=5=jbT4_}Ps($r@-UV(7vzG^vOAo6IdfJX z1$Se)6Byi00k=8V^^e~~-YMhpl}&spcz9pMMwUeflHl3z8+M>AcD2_J#O>w|}yyAdaaS`G)#@|}w=qUC5Wqlc9tg8R4_idf) z8@&lSlUyQM`iC{_Nw8MB*T_)u@gn$Nbm4zq@E644PfmdUN*Dg0x$yfF;QxvXf0GOU zA#m=&f1wM%2lFr1^ta;ko^zcx4ToSJigp zgsnO!5Tvg~+v@8w%BUt>WoMo2l$}r63Qu#())8P>TLgpbq8hJ{+lKvb?Na&kj#B=g63Q>7eTn5qDZd4| zLG&_~F_8)0j#kgW`APc!EZMgMzht$;l+%VhdDCCrJED<&6%KucKPOJQn`&1UR$aP- z>BppvAY=acNURn)n{u4HY~T3{_+TwwGkmHUBkP7cbA@c9xz`5U8~o(_-J$n$cvoh# zetCmD%-MDxa|2^oX-*_gbp~gnmtcQdxX+p_Io$EbuK7v&{CxKT3bGltclk`Ff{ zA4b#VlgF_=xpAK(ldFuEfs->x4_2cGSKYF=UwVu~58tEB3X{#d(!M}ii~9BbE49z0 zck>Li-!AbcYyt^#d%wg)Jh)4XTUpQUc%(L&@I%`; zFVFjiUmvNJyzvBfVruWpyhY!qkiX4`9rfkV2egrkKZ=aofr&EmzB}o<4Ay}IVfy#( zBekNLLSRr`cmLk0>-gU}b^Vrj)%6r_)unLNbpr1?>S|+L1MAiX-t%}bctz`-h6073 z%Xb%j+$BHZR$v`>m>+0|2Rr=ai~Ej(TQ(ON@=HOwu5aLXlzlLZy&>%dcCB#!>nOXB zvP+56*w)>FiL#IS(%q9Z{a0?CT%bCgwFdi@>bF6m18vliVQ0GUk>>pPMi-}Bo^{&! zeg3J(mD%HS$H4l6(4Xw!(N7s($lhC%>dZs#&zpSP1G2*oU>8@&TB!${wk5%ND+0(g zfl=I}ci28~wdrr)fj09_a^HaiMbJeSeWE^6d3tNTm1)x12Soc}rhyMsa>&PV5lY>}SN=8I~&}v7=GEPJ*UH2U4*fYEPy)o>EH=pgaZz*rt zSIA$N*2ksvRUI}S8TildrF|bBaMsc7cZAqBMHZwFcelZdUH*Fd-@m;thHtwk@zuZ` zAgogyf7$q~#Esb< zp3R}g1;zM^C#-w3)wmN~i~REFEcOuM&l_g-t^>x6z}th5g^l>zYN73Kb6&qpJx93 z5A7FB-A`JL-PC_P?GOxI{$vBg)uh>Wg5CHOFzn}C`8NFf)S=gYhj^_Qp9Y3M{4g|o zQS7*xPXoj7SZu}`dzgVCgZDhvoj;+@cS+A#jIBMCN4nlcz@YFy0+V3qNfDltn}i$r zB}x%YCM?*rAKbK+pkv9gqEB%5q;)EO5S|P*=BGILQaY07pHPFF4gti%9cEp56F+(@(>j-k^N-)4RmWj`ok>=)H?VtMHk#B9k-we*}*A z@U6PU9=^ZSz%hJ(5IFusz3-9dI^YOEcckk*2{;t~K5+dTI9|!}`Y4$`3YvD8Q-2|S zbiC=KV3YA7MPId~S&L7gj1#Hv8q+U9({A}_YM@_EqTF{$r+#^dGDz3^H1#Q5{i1ej zOo%o`8`Eg_+rTFu-D>ywh^>OR^SYG8Pq z@}4H&K-v&}_PFDto4!8i;yq=A)q9KE-v>>9JL5z2n@1b2qW*iR|2*oy3LFeo-}_Sx zZOR{3zP)Y(G|~Gu>G27@wUIW9PR;`d3cnY4M4R}c+}qR1ofRF{C>uUtcowqK_mRP* z4-8?;-^Jd=bCePEGr!(t9UPYu>U|D>Pa4}j{?nV*7e*eK_R_Ww_K#@$;GUL^4-Dn| zZNA?bdzz8?G>7GJx6_uTcC_%H)`1py_tT?7z1L3Nwc&nj3pG|^c5;vC_I|?NvqKO3 z!A@THu06bI(UI8JVbm$xO=QO2tRzQ{)E;mLefHJcjlN<=UFxx>F3$$%P0n~|FDI8V z#rdjP8Qs>(*Ty`up#@vFo$Sq2qeD$htMZh766qa%>)58dICJ<2_uA_GnqH zzQ6&mn7_9~)x$+&1Lm zxueeeti|PX8awxapLa;FF}#zq?j_&V^rOO`reEdDOg8La1-_lvxcvrAKg^n5@@4Qk z*R~zJC+d6yggdf2dsElOYCT=;VZNoS-3<(qRdac|m;*nd-@(T-$Qc~tMV5B)at8H& zgYTXnTaEdDjlt)g@vF99rM5GE#j7^Lvn=?lXfn@hd!^bwwy*8~e`2rSFp|BsQTWt47JAqC`Or|;fn@8=LAyqU=xj{w1>K$Gr9b5aC;q z0j{OL_cO=E%-lYr>2=0frC>pSw#{evlya7(O8@B4w)uQL*vKtjtABK9+kF0>QvUDM zKRUH-zNDTueD>X?fAnhGe1m#Q`9J=%*w%-#*)#SH?b%NHUsH#{$)~aDf;EIMXu&R+ z*8`Ua<0E|k5*P*Rjg+bIhiSu4pgnG|E3ZRhxeq;C~wP=P;g+E+}H$?=bgJ z57Y&DI=L|x?T1f_|93Gr%I;kA6>I9P=)0O5kvD?SPTocM`>@k1W^8|W!a?d#`Udv= zEM$pFzAJBqN6LQ^`mtBhq5qWsOv1I_DPDXt>l^Xi2FhbzX8$_U9QgQ-eZjJ_=a3mj z1Mi>v;$vL6>t0rI~7~T5j^lN=Dg9Y$D99C5NduGy<7uwkK}sE1l(OZ zojD?$iyvC8i?D@T*@b+YJ2~{g`XP?aqz0b?EAU5{7ffECX=l8q^j4A;J&*TL>hu2Z z;Xjb@e--~p{3~q%-%s(pU7#~3X0OHUi?qf3_(zNEMW?tI`Mc@a)(OwC9^QM1{?Zzr z^>FmzidC~32HO`k?!fm!xwTTTT6qg@&7qGP?zS%q@UQUA^icyolLOC?ZWn$|xMKxh z@9UBt3w^eoetwMe0iTYt3aY`6#@Zt~tD8Egu`^|GuB98A=n@J z+pPyLXB|C;v$lUn&)*de=2wz&A zDd#k{r=H!2UTLds+dUC%m3G3zs?iHdk1;Tv;u;tqn%mmxACnfIvxEFT+t(9;XYYjP zRTGA9yRClP-_yp~-<|Nio&4X)lVm6LEQM#RqzukWG%0-pI&H}-68oIfk7+_H@|8Z(*G7gr`atl3qskGpV-KJc6>0 zwFfsTU6=4cnw`Mdon!8a!~ZX58gs1P2!6CJ)AvS~v$u<|Zfw5QXBk_VSKf~;ev3TY zGSQQDb4QL_{&~QzG&S^_(#=S(+0X!v8-`dj3v(=Uf1&!N{;4S!N-yDK-Es+iGn2Yz zT01@%6KVgz!q%(pJ4KDZf&Q^&n4x`PPk-Ud!FPJSGhSc1BNG16_c>EeUFp!nr>sk2 zjIC_aYg`?|_E~k}6Mb=F`H5w9e%~o;Zj}4xC`)f>dC2DbUxgF_1PX;VIJN~TTy%Stw76}86}s~!$0jMcdN9C^6y zv=IA?=fh9VgRd-vzbt^y%ty|fhpoEfJGGSlvXUGh#%&uM_$B|<5x$fsuoxd^@Ez+y z$Cp#(J4f4-clL4KyUJN-?1q*c9kGyIR4Ul%b_E!&n@DC6}u2@e~E*aSLohh zXvFMSWbz)kr!L#5gG+4M;iElq8!7dB*?Y%2`a1M0mFU^zPs%&fpnJVKSPRyk!#a^O zG2(qMyKv$Z(X5BW$Aoup{qrL6TK}wIE?0Wl$0#hqUM0MBRWj=WWYhztw4&(#fp=kW=*nEerE5@FfH18^GDZ;(9TgH*&ii=$-mnhK*M7qN$w$n+ z;-7*a-IpPph-XM=m_k|FYY3DV>5dxKBKY&?{^Tn1&|kC-pEUu;rYOq_Ur5 zQ@KCW%*kW-t1TWry0{ZYWsUQ@aPMBy|Ly#jTGyGg-aq3GD17Nezs)(} zgBexf&oZh;Pt2|gANuV?ql4MW96Mg;tMNrW6g(9A$5otwjbfgELW=JD>ngDpYd>cF z>hfFU>o|mLp*n_{IvhHli~WYep2u&3Y&iFyVRYExU6h@Ca#c7V8`KxkITwx%t(0D_ zFg0ZS4^#tFp+8WuJ>=Mr=84|Q9e+(htIC{fE@K~2`()UdJ7<{pSmutt!XcrRWu%#s zI`7t{)VC(zwGC!Xl}$N6!IpL@_caKv=fqD692 z=Nd9A*UrhTteR8K99%frYL?Aa;V!HBW^iQkKH;=wD|tO$aRv1XPT5@O9kU%=ug8D1 z{u@c#lIhrd1|}m5@U6ZLW;%G(cc6YqG{!hl`c3H0)K}|IlrJRWb|DuW=d>$$x|2ug z9uy3D)(n#-ugKiBZOWY!Pjfb~%>{O)KQ+lIclR_0F4>i+{VR?wY0LwzLS*&eu~p$b z`|%0$p$oOWfV}0!tWV03MerXZ9B}reSLNBH&E~;QV)T@coH=WMu90_~bJ^It8+fpF z&s#Ndw0wuxk8$X)k#;c`hx5U$zVm?p72XC0+L%Hc^6d2n4(@I?@Lx2@g?}nEDZZEQ z(qTfMK0es#(@>T*;|e$5n}i9UDN_5E(J^Siipmjx8DDx9=+a)UcHo`&GW_w4(``OD=O!&dPjB_xTx^b7MxcCF#efWd^)NkK*)4b%SNg17x zCf7-WE;%g-4)V~y<_#TLAb6kU9z`>LN4m6w4+Hf<8TwGwk$jeucL{j~YhYJFM4##F`7;7e_ z7cH3aMq0s=-(A$KHiiU0eJwu~f<{YWv3F&lxGvcP?_} zr4QlzW_+$>y^9=Jbyhr&sgpa#(%iCba2vuVUG24@q4sUq%j3VKf%cj40?imYfM$eC z;ng=MUY=y<)`gMqJwuJpx6z_YR}L~hG937;j6ai~f)hvQe>UrnxvWD63=CPt z_-syEnFHM}%Zt;LXtb3(Oy@&un{wmf?Tm|(iz49z@Z__JD+5oy*`elQbmvR%v{o)> zEt-8?JiVcH*-?|$z*S;L?*^_2`XhE(0S$BB%>SUJnI$a zp7`$T;_IkN*1U&TUkF`Zz&KmP*^eZ%Kec0WygcEm0+{{}1COdi=U7`{}5?8@Gxe1nLW1es%l zgPb`+a%~pGK-jEOExZ`d4QnOM$s9#n{U~({@H^)iwANQ5hDpu%Y7wxya*F zI~ea~Tm$=Uz@hQK>~i?G>b`=zO{`!=Jv`m2w4+O}x1+bdj(s~k!)sfy6>poJP1|mc zgxAqFwFRBMQx5!amn&z%i^A2J@LOP29bVm?v_(AoY+z_(Zs?*NYH#jr%3y9W-^imW zlpR2aqCQ`#dNe*0+eN)*{8P7ZZ~{1JL0=_VC(ss}-C&QLsXT_BT|J)HmX6+>lf_Ro zF6%RC%j!t@E7YO?!ORh|;eQr?NFniR;peN8>+u)Neo>HfP^SNw=XYv8BR+5i`&G%{ z0o`aldJ@%}7IoGob%oBjhn|fcWtW8yIl+bO9{5IRb{YSwcNIL^(Al;0JGeoIHk~_W zX6GjKLH0*+xU+zJc|>+S4C6Tb3!sqFqC1W999L+~X z+3f!FlJpeYnU6Z$IqCEFocU-P`e*~Q&fqi0*tAt}YhLQGU4IO%R&)wDZR0ID>?yu2 zjd%Sox1y<{4UIAWj}`8*k&%4v;dZHuTj@R}XK)u~v+7hE#dAHJ?>a4xa~qoV&Q5zi zCnWO)?2J>p-`MELhVVI0ZfOG!GmbMO;fsMG0xvP+nEGZ9&A!P~Nb#c^5$ zk1tsk32y|ahR2@~=kYt>@jB0L;HDg%i+_dx7p_MpSgZ5GgOS^ZAWLvocy*BdRiBY@ zHJ0a{;Pt^IBO9m>67@tI+&);Sc7PAf^@S&J&piKyr(gp>U$8F}9s`bw!JTZ#LcIUy z8}6ADXx!^7pVwD@JKAjIFFV@GJ7cJIAe(YJUW>O^W1!?=_Gc+8J0V>2VP`ex|G|UK zu(02<_fqEAair_`b3A_*I9Xc*o=K-P&e{o|F`KRE^TNI1w{~H8AT-*N8FU{IS>!b_589&ooo*k!^de-%h|Cagm z!#w)qT-H(CYqHj{J8A>2h;R|G4(!4_IkE{%3iqAtRRiC>EpYc@0~u2yAT8W<-3!vp82vzshcp(PqS#F>iWsO>@~pORY&k;)mdx9UJ zGc)}}-ls*U>$uw;`M)%bo#y*71EcS^@qF8{lkdErb&Q*@o;<$a#N*qE-+T}L-Uu&# zIUZgQ9c;cg5`K+*mof$(RQyZvc;zd(kFi4hdg7L~#^XdUt;GG7xEkWrS5E_*&Vw5q zf-CD)S6)B{$p_zAcRBs8xh%cNkw?bVz&B`@nUCi?Ve${X3p@)4N}G0<)vGZh`n{IA zvbV+IXvaUr+6TBdobcbRbjI&z-x>t1d~pnG&ej;t9pQ{&?d6+uG0c%;+lv|{>znb6 zjwPE%a{iCrb$IHNjJLnk9jVnCA(F!y)a9qyIW9kiX8y$bq}m(vjCJjSi?04mxcXn; z`}h`qUiXbF7&~NELBU9C>!#&4IZPn+}O zNcfxdfqaa7NFLQM|NCR+A=9JhJ&cah3A1`zxWmDV*I4P;EZbKr`UldsLDOG|dyxA? ziL)3_U4G;c)(geIh}XZJJ+2(=`lW}QLI0$~(=-;M;ORBO)ZX?CI~rh|WFlXff65%i ze;xCBS4PonGe5BgFmb@6amrjXy?vq9Gn^Mk&!e@u2V0x;uf#o*&@K!A?Owe272{mK z_4Ymw?3vi*3idAiR4&^Rhuz2wn;f4r_?&C*!bjz@r~1d2JQ@j0H*MlmiGOlH{9}GhIBL4_(X}F|t6m)ZE>< z>QT#@SuL5c#*uYrC7s;&Fa3Ev^k^}zHr#{!$ef`wCe^O&*I)%^dbs{24Y-Bw$#PK(?NcgFb#|!VBzlem-A-u!w<96zQ6CF;7c}4J;zI=kQiM@gDW-xr4 zJ{4`LU*9BsIcL2>F3n0uqd3X?jqF)Q;H$Y8hh}%#7W@k;Fl%pAqz8_AhJt7!%{ZQ?hY*Tym?#bbT+ExbA`-YxpIp;OT;YgFJ& zZQ3?cyvdrLNt&sob?)wp?0tQ2td@PqnYli6dR8Dg<800#k!REW9<0dqoLgT$z0#}~ zF7cC=J~wIavdsQ&@qO{MS)}bGtz^`yd*k8uvGA?aD#Q3~H@Fp^HCCTO4`T5>(5B?o z&oX9KGv5X5%;XIAzwVsy^;J1EJLv$-1rdh%pR z@k-yB)~BgIkPXEu+NHN|O+1}=%G#GBVa^Pt72gpLmyFW+ zJo~?d3+|764%`8FobUE{I>BA?0{c&HI?0It))D5MPlt zCbn}gdl=k=?CM4wy6FV})7^e%t-v}nz3Fsd&iap2uHczV*?s8jj?IuSy&YHehhuY#<0CB*-X8&PRYg2q zC35ld?d%7TKQZ0+NLRcfo=)=h@*U2(+Qf7ZsQu;fbW15Or`4HDi_7BSqTkJgzl&YK zuc#~STI5^558XigEUKrou71wrDcmm@JF_v-hh>mGJnh*R+Q}6~@Q(6)U+d7apsAhun^kv{IKt9DwpPL0uc>73ckA->{yXV@MAoGjPHgC4}{9rA5 zUdFwA7|6Gm>~@Fn?7YvtLyYmX7~5{iwq99*EMxDwwVwQ&O#W1Jo>jc^BkQ2K+n@$| z&>k?ndGtl(HFFE{x3_nv{mLxnzy|IfWX|7O&;CF?Z?!@2d;1Q@p|fa1$D#WWMNiHA zm-0WI@{=i7<=EgS`|DmGFyA1jt({gGzL!2wy>*oR=}!+Mzg~H8{*EKHe|Gnm<_ku~ zgUYQt!_l?RckA|Wsej?J2>v4;1Kx~$u^c)nksT9quStuILE|A1_`;avIzdm6JxW)+2c zU#|fN%wOZ_mpa~BKh<|Sdr?o!G5h_~8`fTSOCZ>CdEoYu7k7PVt?KHuqgK$0ZfE|# zi1v!_Tyzrqf%tgX&A*l9=z80g4!-Z)S&`l}1w4jHXXLtU-L)rq&x+PBxA*)7JV&zS z11&wjj(_O}UXC5EZOd}_^s$QPTV<-9KFaMxb~0rUX7m5sJ=zmaYq|y)o|$OP(0<3V zbNl09b9*HGA8el5+&s^dN46-jLe7+|op4aJAlb}9$I+>E6myXmCOSIvZ0H{ux-X1! zHUaMr!r4#i-L&@dgDuAhX8c#UvK{+Hz4e5rQ`bjhtQl`mpX%DSc3fY5A?)UVOMM~M zT*8Ukxs*1yOzL0PWa`Oe-DT1oCZ08x2aE8ysng!Gku(%{hX9|0!1cGxAA372V8-ZX(Ys; zEsRb2j+fBWu)Y*OdKh-WU?AEyuS7eFbf$ zH@&q1y4Jo9d7L#*x>@sF^*HlBxHjQt&EkZAlkiN!H3m94ZQm-7{Uby9B$V`wgq=88({6>gsdM{0+&2XmXTgAy&6aYEhW z>3hj69{vy0mn!pXvC#^h93Qjkj9Jl)*7iYs2ZpdK60NE4 zt;f(!y6d1at%FE2hC6KJAJWDSPGhXo?_-R?&%xXAv*E2Lh~CqizQ+3BW+&X zXGw2*0-rpYPMYS7EsigtHgph%Z-B!R3p;3c41bq?GxH&LI_?a+`WH8CqW)#p3}|2b z+lm{Ye>sJ?%(0BW68xu%mjKIj_+E&x4)EggkG=bW3m+h?FMJB$Z!?B6`R|}CbMFXw{tAvG6P+}t6Ys2((wZ(8E{U(E zuGi2leqi`adeejSqkM$Qo8LkoZTb(|LFQbuS}oEB0kgE`aCLIY*k zMOKviwzXdou0mE4J*3@DTbK_$T6huI>i8G!7`{uICeeqRCWUxMHi1V{->bqqeg7#i zd9veP{LZL943Beda+PKxm?oyTb51h_Rv!c+R_ z>q^lVc2w=|+*7XhX)SpzXN3mGYJdJK)?utik%OB=*NJo&Ylbg!_s*Bm+Q;skIt*K~ zL|SQl40>h1-|K(P;idF{h%nKLJ;I@tw<;K)dTTG7fSO8Z`HhVM{z-`@Rp@V|Ld zrP;eL{yZM8Ii!{QlCJ?rRiDMfmA+(1Ww?y+9lh~zr7z*mQ0{yg>q`h%`qn^Y`0J!E zJ{V7L$_ZA6FID-U#=|Q~-#MZ(e2mKfBp$Bxe#%)uxNkuC^6{0-wUqyHJiUQ`T%|c< zTlG;qT;+69?<|%7VLZGD8M%ZzCKq78ufF;%I6Rd!n?8uA$)b(RlPitAK*xc2xG57D zG-qZH3@7~zx6G;y&iMK%WlvQ7@AWTZ?S#tkXu^F1!u=B~&H0?-cl)Q`Ot{hiy%P@? zj5+k@IJeGks7~h6*k}Fc((W_kb7?zt@7b4q@|8u{n4RBeV|F62YR~?YuOzWf8pJw@ z_4(SkU+#u8y!mPJK^r^XY##Um`sV8JaO_DW_vnn7#-GvgagLyc`U)>%4aizi^M=LV z$~4;T?G0~YpUvp;mRr$N;b+<_um6R$=kI)5$f5d|j6WS2EFwJ?|I@|y@QIoIRvZ^* z?{>Fyc5K<3@$e$%pXIx_i;=S)(%}WDds$~ZUiorfVLnql@}Kxc5paGDyB7FWpN-zG z)8aVHO4$GZ)Xe-c#OVn zzK#4$zEtc8$Fy6~-#>?cDHHGP)#?r?-E%GZ@?r4>;QO28lYhqBVQArZ+(AP-B|mIRt!z(NA~@vjKB0&>F2$EEB5rS zYtiSyr$u+|`1mhW->9GXe}!=EYd3(e9k0h>HGTEEWM=FD*-=6;YJOAR)VDX>g;Wlz} z$-YSVMC#232GL;gALH>^#QVv2>;M{k9y?2i2Cp=BqKz4G8nhW_hgUnc+4QrazyFJ} zGmnq5y8iz&Gb}R+D3A?s$s}<}f@=i=R?8&OmZgf0xGyANZ31mI)~aZgNuq54mqt*k z){=x;ld-lg&^A?T0@{L0Td-Pft0tgr5N*W;nO4Z}{kivf@=OBu`}+Oyyq@Q|`#tB} zbI(2Z+;iJrOe+)Ku$?-`Qf3glF!@Fk90QzT2-b6Ui~d}xK4`56>?6Rw7}#%Otygfi zl^-Qb#WV)7-w;f7=R(8g!F6nWowYmR8#ejj>Tl?8tSJc(riF_}*AlLCds*Ps!RJB& z&sT2g&-472zq*R~7+E;+>68neY(_?)J>K27y}PFv-R#^uWs5o0d;=f$Il9|t-?=ZZ zFaH+oM#76ni%vNgr|+M^cL*QH-b$wImurxpH%BL)r8<^#CT|kw{k=1J3D#vg3*5&U zKjnR&a`?7+Img%J@~~NX6HVPi^T%k5^5M}^Hvw13qb?UtQF|j(%7|x4E+%)(T zaTGo*X5Ko7r?l0C^>}H*u{vZV`eOT4&vz7Ds*WDk_4(tu&y~01hPAlu?{eQg?z_c} z?{eP`^PkFyy6>3#u5#ZA_ub;YyWDq=`rhfMwbKh0&JK?@t+;^Az?s4A^GOx++zGLpY%6%u?cZ>V(a^F4fJI2~V`K#P_ z!hN^6?=JV<DMKn zNe{p0YUY@G?U)Y)>|WmnqX{YX%jL^;*!(zKa@IBR2>ekcq zS^s)>-;(xcC$DweeT{h!#y6N}30Tq?zKTLBXj0u;*aUY|Pqz#DLvGwUGyX|6<<0 zL+@G#*$*4()ZW!G&J@0Sb0}*Aeo}h~mrPrLoX(kj=q5XvL*2dDc>E09NH_nFO#Yn3t>#|ztmLWWHDd()ZUJUfYOGwi z`}`0xe!6Vv--%iCcMG>ZeDHiUdEe>_J_ja?ERN$j(2d%ozP>?(V|55Q$%*J09O+Gq)E{(X{3nntB?D&v*VRGroy9kOHu`Lh zuUFs?RzJZwByWUxqif+iJdifm@Qmk4t2oB!I^kaHbvs6LlNSRUJ4UmU=kYxmn#=#} z;JVuw`=1(~WA_a;9@$^sT1wA2k~9%)6TNzZ5=zHodMVa1Nr9O2poE3XT*Ouv}@qS zcNgF3uxxN)85;thX~3h!rJ*xKL%?twc6fr}4JV@SplsQw31&0-*8P&hEblcw5d|Cd zOEAMmpi^+F6nyZ%BYx5GtPh|10r>dmA3b_g87fOYI`u988}otDf&7ijpOs*=2N-=y zdtZg`nmtGD5x{4eM@plV^=SBrh+f{`7&wSEBFQLBX1LL^;hi> z4R~#<7M~#RrO(@a1@8{O-RGBMQ($%H2Wqd{*mDx+_Rh8S#aL%+Y)-z!?tO#5bEV6MA#-|ByyZ|yZ4)7M-xm;UBL_Hztw z^Z3tAmZDP=-})53rSo*a+t9oEC%Y`sy8PIvzWXkct|dG9s(I%o|3vxf`-`;G`hMKs z2YI?*Z@U%`B-eR;Hgmj{J66%IF0J_}f9VCbP1>*XY{OLl4Q~DEGKlV<9J=4^$r+-x znUA?VXrz-`LLDu@Rdk_t-^qWJf6Gs-9>0OU3ZAm2YO|wHI3&O1OCMVooshM%$j@d%NksM?ZOtU2I>~PeT_fFFTn>d7_I0 z$yMWBJj^q1$yI(oJevQ{*Pn#`_xG#h`TUpsAed%TPk{P=IS;-f{tuoHcEcVc41Afe zBM6JpUwe00ZgTXE{y5e7m6SWad+~36129y7E!~UGCooRN8{LljdhZhY24B$l{uSf; zUUzIm=iuG=pEGxeiTBv?otOODW^a7kJL7hrUqS!MIj8-c*&kEhkKs@0^e#G+O=`Qr zLss%p?06E;cojORzjJ0NYIO>g|E=pCso@7w`CD&`iMHMHPT&pNA; z^S(wud1hKTVU5@>e!v-Ahc*|{hg$Y%I2YEbGm5o8cRD@W7gIJiV5)_q2=H^*x}O#=bQM@=KPoUol)+kvw6eE#>_eE8tLL>KcoGw(Y{VY{5E~8D&FXy zsFOW5<5N0}ZK(Pt9f;945mz(9Ny#Uq7v6<`CGq~D>!U9AZp2f<4tFK6FQWPaha}?v z`I>vD_yjlXM0^hrR<+1s4TV2F&WYJR;X@7|F1l+d9EdHEf0yF1&Jy!K-2KmS|0C}I z1owZm`+wL#dV3!k{u@nx+HcCkf1~+F$7cR-a{u3O|DU%1I>Yb?aIY!_2U%{L3d%c8 zp68rSQ^tvIo&vXwDenJ~{2%q@lA7h<`XZ-u2DYu+k>RRNwKP)U+BdWoCgNvZiJaB2 z@sz3!+`H89Ebs4~V#-D@W$G$%%RbfpKh{ZI^(^fwbW-e-tgAl`|DF7sJV(0iyVq?W z{wHc4cRKIp4gm3`0`Sqm+T7)*@zvCQ&6(_riq21T-&5RoiSa`*u4aQf4u)GA%fHo) zU*^7Vci-k5-kma z#)d@gT2|iqTd%CKZdqnLFqYi30n!FZ_q5WvVPXDVTy-u*1KSjg?LTJV9g@FllHi7T z?#t+`as5vHg*Ce15UdY1Ys_ekeLZl~nM;kiLmg*T<0MNv(lhj;pU^!s!`Lf6h%{?U z2gfZK&%O5W6v+=8O9sa^a4zy~;=Z=ruGdxm&~<&-njG4v?~`8lWJSfB4ua;K@XmV1MgL=j<2y!ikN$k`>ZRlOE|h)6Obs)?dgJy&k5$$#tDPzpb*}3#Bu1#ml^vNqf3?!qc0RJ4Nk^Z zvq$!g;baI{*m*FP>hl5VJz@N0j7#U2 zbExNl^nM)k-9~UJ-b7nFT)GR;mt(M7Qh2a8)EuMT8r#pQZ-l8|kG+kqKO>e}bPu!# zE&T30TaHs7OKtSNp{bkRcEh2$`tMr$`2bp|!vAaaCj0-MXhY?$kC{93p78SD8%uq^ zfjdGK_Y%BL^rY`sxa;2ghObrfT}5~~?{s=P6?$^Q7FNzE`yM*?OV1!&D_s?9r~XHP zRd#k=09jD|E5Hud#qHKpu)ocB@WIU5{u<&m?j;)#E2jI<4_D_Lr7VYR_9WWHOzn~4@aqE6&pzfSx+mO0j|3}?F z8mK$R;Ngd=`@BGhhl6b&4#q*_g^769=itC;vVLvT$2#k)b>W!Z`^zeirJiudZN=~U z&HYk3`;a~k#4AK6%2UHzGNQu3`BuF>o?E4Ir!mJ9AJ#YXmE`&s^2n|f`Zjxe58aF( z@%L;W2Ilo#&NN~_dQ;P2zTCKTaJmhwF^)j5AfM^!eKKpD8u-uzBO|TXI-?dj!>nT_ z67Jk)Y#`0rAjg%3Cb+T=bINO+LGtFv5A_XC3Xm=x4pAq65YJ4nGZJ*x%b%uS-*Ue` z+GOOUwECV(tM65>KGF@XPwO^d*lFN>OQYGJ@!+j<_Bw~9KI3a`U8JsJdL$Sw)4s>P zzxC&}^;+2V7O-AR*n2{PZdg6@;C8}pO_{Mf&f9a6D$LV#ZpQyTzY$1g6&{h3UVhPcSFbUx1Mt9SU1nxJavMR zZI%z&LvC8c9r3JtPNE%^@P_i=_pk25*KvLzYv*n3**8H)j05b(IFE+khpd}|owD)u z!e{DCKDM6sa)O0(x!N||3o~sajJBoIvEVzjkN^2gf1U^58u)d`u@kP!N2VGIU-6R= zYct_l<>)^GFNp?%N%Z!H4=K#K(DEeneY^iH7)Aqy%Q-7y(vEnYd$E-M+*oSL+xzVI zO9?Z+O!zBl-&@kYUr+n)P5XW$?R!_+_a|xJ@1%Y2Nc(=@|F-RAc>H+W%M|2HQ(gXnHN7&-h8d;^al>s9^FbbNeAz_-W4RiA|`uu6k#koB+!`x&Qj zew(>eX@jhrz3>NtspbdhKIt66Jk7VM`wZX=uJoNgzGBRqS)^O(IO}z%XBKJBK~53P z+;gtAM|y#_N$;gF=>hL1JX{rrx8{I8*8O`OJzlaM zc};qn0C!DC=tp6_cy2iPn9lRSL$9SQ`Z8I4^Z3fbUs=8~Fjp}L{iGZFa%@_G-$1%* z^6_uxL~pK)T!QZ-;1TY@9+tUKuyAhw>K?sid-vIu0d#jkba)}`#E0794db3VCmBK? zxjQtRJq5eBwPU2yaR~KFM|gi|LgrHZPd6ZMewX_kQnPQI#+@UR!^Hn5c<2hHX%A*+ z;#Yie8-B&FnO!pt|NmoWgt8Zxb&67Ddqn@4ht{tvV7h;tV*L(A0>c#H{$PnkD7!o1<% zODDSD)1B1Kz(C>7t-$0UXWi19M|9YHZW`uO^IyU|a{;T* zl5b)2;5g~fF6UfN+pYUnTbrA#WCLv}`oaF`hJA$p9nu|WO|bTk!RgzOGk-$*+ep9h z_Q7$g^A^rN-b$R|>HqCtEgQwg+lHjWAHgl0uaSK3oDwtR&*RW2ZJBU&Q&S?o zERl%o&OiChWbR$B^X1t;uz3>PUDHIo;&w1!)E354%Y)ZFo*B6Aan6eF3Ul|_s^Ieb zYN25hpMgJd?yp-BjJfg4iC=NwHEqK?%-D@P+>PSTf0~aX$N|e}6K4g@oz9Yf%^AK2 z@gWpga#u;>14DV>Kt6mlv z1hCa#yxZyse4gyLZRi}K^0JG$mkfK`rl}UzO)jjPTv+D->x2vICKuLUIsmMfrNKG} zSSybQYsCqc%Yb!q2&~rw>t!yi<-1U@emD)*>w)#%F08pz-JUyd2A=3GYmiOAeOY^8 zW?92`d{}7TO!oW578YA0;9t1X9L;=f_PJ;BAHl9Ke0Jo1hcl5w=dJ_o;mhVl_cd#7 zDj7o?fZZ(W=YH&|xvXJxp|y%SuO0Ymq8$tKtuK;XBv6B(bG z+;Ovk`nATo8$2&3d^SF0=M%0yujQq&P6UO?h92M%#it{?f{)*fW^d;T%9zeGntROX zTT=ydL~F3Q0Nigt7wqjbykE0-b$Z%*(g|1EqpXt6Rd8C_D$3H>Ko5NNvWfJceU4e& zsT!`WofbaKi9?4|9PqPqzWjD-oa$ar-~MpJK~8ppaxWUidF{P3rl!Yf+z*9W1boa0 z;QyY!%f7+z!y3j1>+?xGx|`P_ZW45-Z|G^BY&e7?@!%ZZ%eh-cd|-K-(|j&6aVh)5 zE4U+%^o#3Bf6WNHwlL$v>_gdoS%o(-7R6W0J}r33fsYSub2`n^7;Wdeh^%2Ruf zVGfFl4<1@`S0vVA*1qk;JHrRtmDW%`euFyY@37k z^L;(xUBF!b_55GMe}Z$p17$(`_0mtGXZ7+dcFU?FeUDp~>i8Pr4tvgCS=CBsY$LLh zw>`Xfwb~qkUhu2PJxom#cks{oi#nabHhv<#_H!&a&x?9~*yG zzPp~!gcd!U`!KD8lV!~H2?`gh|@m8LmGyMEr zY2VTjh0yJ+WvppUsqqy$7TrGltO{L^@*jEsD1EOqA_*tSrQ?4S~*vD7~P?=E#xRqW#nM(KM}Km9u6 ziZbS+<6C*AlM+AiWmKQP8Qg{0Z)!rGn3Led7;GnRk>18w{lx#&=`bX>PbYcD+OT#}u!+Cb(t5J4J(qIk6>0 z%B=obGw@n`=#n)V$YHtKBoHk=9lmaO#0aQeBK=wJQ3?Tp)w=k5Qy z@`dYUEMD|G`#(Fd=050Uag@8-Re#T0e!j$?{O_v2`QP%<^4XQ+(S=N4-*O`Rt%u;d zWyF9V+wgTo13t*6%Lnx^%Uc7NY8*SwZS?=p4~*Sub1UcJ^xeX{wK2G5mBJZ6=06nN z@&Nx~(mRB8gwC5b<3g+7YR|f0TKLlO=Ws7-T_0x+is9!W=u2rg$!`ua2s-yA+|#f` zcRh3iE76YU%V0-c(SWUZ_u<-uy_mjSM4v81M{+@jd>a^e&|bCiqkp??q)peSw~;n~ z-ECu)Y2yXgmjte#S~A@kCw{w;@!U?kb#6`V)EH13(bY_rkA2OP;w#fiIX8iwSpdIX zefZ7KA3mzC348JWe8=3a)e<`O5zS8qh6{rRhA+^j9=?0O7-&96ZQ?w%`TvE}T)}^p z_kU8Lc@FuPf=a?D2dD`(Lk;dC8s$F!qt%vzfaF2`mhqi=!-Rolh zCk2`xRs0_Jzlgg`6z}~X5@>E$Ja=DjTa6!9mAMwbM55o_gspVLI2-#J>A1UN^0qtO zuu!o1Q^Hz4v1R9}T>7{m(}$<%vPgIVj&EIzj*;_KS6yO#N5)1w>%>q`(IGS9e@1yu;--s)=+TE z#qSZXf4()x9} zEfxI7WK#<+y6IC3aMgG36HfCSU{l3d>pPxx;bCL0?u8Bmr^fDTA>S>OTZKM4i!os8 zs|+>oRsZ0HJ$wrWAF6#WPw(9hJU2ScXOgB1nReSDti_RWBPFawoXAer#9E7tQ{TU! za=_KIf^~i@wZXtVCwUyW4MWGG+2Tvl!|@Jwv%cr;K*PPH{fx9zfR$`P)7Ki3m99Z2 zEZ)?MTwaH~r#cGw{tn+Nqn3Q~370M_4KBl;twp7c}qe1h6Io;t!uTm6dKIqk3PeSiyv<;=%sm%2*=;W;Nq zVt1hvnDPlcFLE*Kv=C>!C!T(T&NGy94|*Vwv7(eay60cY9HX!kV%N_;b<8=l@mDrK z5Ug7W+?~M06{6usf!)N5(X~;B^d87;tXuU1itFP<>bgFG%+M|1P zvljp4H?bRrZHnFS#JH6c6+fXn!99gpi{GV=2xV#xE2FL%PTo$3wiJhQGJ~{H=K`9k zTY2&*yO_H=!)gb0mxi)3GpHv_-@<{c%<$2fC2_*_A2|mdBQRJR3@<*GItt$_I6?B4 z+GO-7thd*3pN{&WdymxilIO_ht^vo;?*AA*2wW*k@IzLkyxhgL8}6AX`C(%BvWeFM z>tA1F&Np^yjoZ%th}xP9tt9v_-Z*7NZ!o-~B9t>{$4_MEg8d=u$Q&mpQ*GG|-7O8~ zEcRg24op^X&Pw%_(5FaIW{Jv+Ks)B2{_4NPrN>;_Uh$6Kw`zFZLgufV+`dV+5Pj#& zxB0@=>;rKqTXp}1x*2cytInCDyGgayRQOEjN%P0hJ7PUs^`UexS=rKdV6k*7qS5ML zc+NKHw}^JmL@y*c=7k~SAd7L}wa?b)>lP2JFJn&)e+Ii53m>~@#cI-EA)b+kzDKt3 zDo?P@ckhZ-x(N2>JK%Slf_aN~pVTz5=J8nPThK?S{+@{q!94cUv}c)-?VTA}HUr`r3bbk6QSUk|azci^*j z9{hBMLgOMl(aPsKOPB|LnZR0FdrQb!kMw=PtgF{cS6J~nx?B}f zoeS_!rL=;j^u?Ei4)LGZX#ai61ZS) zRf76V8TA@l@W@;7n@(SMkXN{D1*a3B-;zM$F7Z6YEprlgO*diTIVJGd9alS@fk0$M zANuYfYdPT6eAN!-G0~Y@S73%SZZY-U3vcnlS`T-|y-ixdM|#5~zKf#FwQ7$U+t7@c zb~|TN($lXYZI_W_$=_)2M_WprQQ-qwr0-htQcl)O_MQDr?)KzAXNw!oeSAalgMN=~ zc`LVHNLivsjZNNh563&gK8^+J&%>$KNVi_NzdvuohoG(YKWH8dE&c{}HtpY%J|Va> z0jz6)m&Q%|@bJ|3tx6MET+Z5|in8FFozl_tfy47?lhTUERuR??UOF<)EGaQ_T4Y5I zd{#WD9U2V>oW(8dv14aYcLrm%<7(kLJF}zkppw~X<#OM}`rwoPSPI}HcYB=sB0sigfXvA0QIJ$_#U9<#YuQG0L)I=dzqO9o-jheEi=>_Fy<@R=lBSz^Ni?A{i%AbW>NdIXIE^+>1}{;3Xl-~j4Hm4K)?Sc^zs@~1vJjJF{VpT>J1dIOWMw_5&6Wz zJNzA^M>e$fdwlr$^y<$)-r2&TI#h2C5zWm&e_hWQ_WJyd1N0-u#c_68-J6j2#cPI+ z58*RCtR;k>`SYJf9}_^ggl}N@p6bnp)|>9Iv?%$d=^pOIL>6xQkq@8VQNU+D_u{0% z=d=T~Zzvre2u3#pqXV_K5!$Xnme!cio`cpI>VxQ4zVwdZeWpvl+PkemPE`E0?87DC z`!(9{99!ABnKfHJ_bE>U#|`%k?n7l2c9>~>$ofC}AX@n&e4=8NUrsB0ZEZE@*|=xM z!&Sg7CkJ|y{h-E+{GoQRPqpB#!FfZMC*uD|%ljcd)Rq48=yeursGrk@HJnpa*(Is# z?}`MRl>P_u?XusI;pM3ktucX1vY0vUW7hP1UvVP(A-QEKx(5!Qve^ya8yvoIX(E0C;r$n}USka*o?OhDr5!#mUblD_ z^$ia-tFDY)^QWOioNjnKX%-K6&Yts}!`;e}#Z|OxJ$7M=n@t=%er$L+|G;fJ>5!AM z)t{rF&7tyh$!X5ylPUjDc-J)b4V)_NrJM%g=%bf7Q1VK47QMIphDrEYnuxy3@NwE`&Z)AeiySanVc~#(m+v`@N0rk(+LmMV zsPL6G>R9qFIsm?Vk9V3s*0=OL`ag-ieg3Pwf9|qNDIWdKj^pt`%KdV+MPr#(*;l2m zcMpjzS;1Vs7;YA>SaU(67G6*z_jwk&iz^*#YFU zKM(*`f?+pzZ){j>%c-24h);L(=hI%v^`5J0$c+m-o_`T#i-p$jEjaS>(-7<;0i@4XBBgPY76UdmI zf7tk|yBP;ja5GoD5BlkYj*#EXI8fPbU$glaa{p0-^20a0u~>lqx$SZr-$);CAU*|5 zJbr&G>nn|`i3gA`CZx^HHLeWGKFKOzGETHLrw}}oH?oWSgBi!Q;9vVMy~kNRPePtr zaYVRm5#jR#d5gP_a^}rH7n`m(`{%t-)yG^oH3v-_*mh2F229P{WfY3@x|zm)t09i zOR^=XWI2EzEv+4R3?D+mSKwi_ZK$ec2eNEaKc^&%4mSiM5t* zPGntR%1P5VXskt3{bilxHF44-eVS+Qe7%&ma-X)^Quv`iuJc>`ab3i>@_FNWJ#(;u zBYmrw>-OzB*6Q>PTJN;yE3%RW>?c*6>B9M&`2W;B6z)3Wy058~x?n-g_(5&#dX=lH|V-s(so8jU-u#^2CjmN#Q&W?Bcr-Z?4&ATJZ zl;)&AqE~v?%22=m1902bKjo_)+(o~YE=)MTbr#{G^$9LdnBdClYG-<1!`x$|vY(=_ zN`IPLo^(&aa$DZQ>l5))2ycklf2G%WX-se*F)-FR@q8W4`d;A$CCHlSQ+IaDry}#f zf$kOi>`MH%Hro4j()D1X%a*99GPHBEF*Yip7FC z^dT9l6xh#ZTxXz%$z(lTf?j+QJYqI7k>V$bA7B$zgx!6LwY>ausZVc0>ynRp;1iPN zT6v4cHK)FIJo+WZujH~!$uZ2A`GIWa=v5PI<}waeb59w1Bl$Uy4gV|WI;*bzw10{h z=MX2qBl8GXUZpPyOvtQd4h}QdYd-G%#NGRIC*umjzS0>_5@AUb^X4Y&PBa(|F2blA;Mj1roJ1xA>$F4e; zdbiGFuW;^fS$DGbgok@NmVC+@0S&0^;I2S(7xSTD+sgQ@q^|4nDWEe}>0$RFa|-Te zY_k_I8aY0)t9<$lWTRf-AbnOf?a>~g^n!;;9-{mZ<*S?m%JuXizd`4sxNwU7VD@c- z?As_!AkY*~5+{AK*JrDP^7ZSUomjo>rHbv@I_bPO6j^;nHRCmepUuUyx4QLk7ohgVx?A z{#oKRUjIp(ElhkJiRZWI|AJ3IFd4R|Oz;t0@_V zv&cHDEL+8&k+4z6b#{Ty}ycZX7s^mj_X?g2|%>HEM3#<|rU>}E{JE}MCM>zDRf ze-J%}{;fZ?V`MXpzDo42G?&1mg+J|k>R`g3p>HYf;vO@+A`+l5QpG1lM$Urk4$^nKN6L zKre!e>W}gSj>3QHIrhw!;BpORhY7o;Fw&ts55Tjl;+$W)!bvS?3pFpj`CxNLT~$N) zkt*`*%-IXnEnRBkXHl~^?C}Gg&l!dvs7=?~^D~0$!v79VQwRe`? zk8M9yzht(eFK|aY{a5;ii;#nEvA&_UeKxc66FEa*|!a8L!5mooypyoej*dn9{4tf%v6 z+qRv4cy$z==_IRnFH8$>C4J*@c73=2_;~d#M8_D#9%;i4zl?6uhE7bxSMRWU>)!yE z4t?kwiHwh4F>+j*91ITAd8?;?e>A@To|?{&c)oPYv5OWhK1sSZ;BDK(T0#0+){3nr zEGzlMkoYpiV{7EaKRhJAA^wwVd{X^pO6^}m2i(fe;K2Pz`q!+(p zNc_QyhvvQb#v$<|6%T&B_#21B_p>&yLcaInzda=WQ{rWp(c{`;M!`$^-h=it(|J;i zF(aPm`Iy=O4NF$TH(>l*m$)__28X`9B_32oy!g&8(o}KIF~Ayi$9mcZy#^Sg|IqjM zkpJ#{+|c?FU*?~&f88q5FNmdfp2j~s;#S%(KT3i_)g9Pz>wOPrNq7tY;*B0Z{mOcD z-IXKoxtoI>YcBgIdC0NjJNAY~a6hp1dFt81iw-wUu)Ilk1^2_B!pMLcQ<_U-@6b1F z;b5@ydZ1h8bt4PBt?|Nm+g@aCS0$&7KFV1Y9)=zmy=)D-w~piT&Qkfa_w^6*ho`0ll_j!p2MQ%Ng)-N)RlvgT2i z)^SGu=e+B?gb!`gy0pGU-m&`tk$2EHxc$xJEYNkFdC=O~gX`08dv{aiB%k72Ftlxx z?M!a62VN_qB#j(-U>~2G51t6_XHS6U0RC)hjG9mXQVR~c$#~SYYHo-*KpUp z@@<0W2)+^YW1E?Ckxn|-J!f!$Ukc{Kef{gQ&j9b#yNt2bOWKmN(51QXi8zrL*iYG6 z%33wD!|lTkr}JERmHJUgottR;6ksoXsrFeSyXYfh`aN`-s=J1{F+7VmvPzWnW9et` z*FKH3B8ybcMh=U7Twex%b&E_*`Y2$S;*6 z{p@$yQ-q%SppT5vbN9^Vdok(1fi7k-`~5Qlqjtil=SkNRC4K1W0s#c2fB_ zIUUO=bJ@+%foWT|X~TXEU+VQ88#aA+dG=7MVWfL)n<>s`!~>>KTxgw8>6^{jur zxD~|NHPhfcw-S!+%+A~Cv+4;{+jSH9M60Vb&J-Sb-=**Ou?K}VPa-}xgg$v7Y=>=FS_cY ztOMCjbi<k&QvTFm*f zcKWvHr?Wa{q4(8#`*vtZ_QR4FM^gVH(VgK>S;F1a1LxD6VZ9~iwe z3cW0a21WOCpuI)Vp7@0)4@#C*yy)s-=%+;T))2Z9KQ-Z$sd_zrwZ;wi_@?N&26|4= z4l`#%)6A{VkhM{@IJYwJ33~_Y48k#d8Gs9;OO^dFXInQJJzrKbEO{KgdO2-W8N>MR zajq)!_Ep4NG+*t4ZwKj{=7aRQ)W>&_ZQo{XB)>tDQM$gGGBS1jO;Pg>at5!z(b?kZ zbiH)_&`HZ_Hf_OoZCd1dC$`Hm^#MNyjbyZ zrmccq)6);I4;NlMihSWQ(X;UvQ`g5Cv>ku4{a8N4ms(YcpEp08UH6FU8nDWQh zMNNI<>$=fLIE8-NO?&-%+TA*%?3HYK!-kiW&pFahpFb>Imrx%@h3l$GS9MHU+^8{i zj_F@^T|Mtu)Q{_P>#4$)v>14+Z`FK9C;4f*j`qK!X|RYD`Qa^T-_8+!cvaeWSK4>a zp?;dg1phml?|&!K`uBP1!SPn%<$u|9d%VQ(zlUA^hb_1KL4>=@rx)X2P_#9CEjn}V zQH_EN-5;9}Zgi)xbVcw#`AFE|!mhO2Y0e)#s_xtqm)&;;w5Iq7@qt$M>j;njF!rA= z;23-m{>u8~XQETyzvLa`4)|-kEWKO@txw~b{*3*X4CbW=XY2Iciyh6;+sKC=AwqvS z+q1-LkJ?b&c+Y(qjjQjQ1l>oL)LuUWyI#p-wb=Y(+cb7QJd<+<^R&*vKbFql54x8@ zcGi;^S26DAnW*~t-_T}Zp>hO^?oa#Yz2f3Ya`-1>EuN$wUvNqED#2D`vYPW1Yom7W zsqNw+;U(;O;g^}U*;dbPx@3(%FBBM_rn&9F_VB{<)H4sH=V9KX@8$Aq178dB7LS=a z%<6gWq%UuA4xs>i)OdFx)5m4%BlxYx4px2sbBmQ@YDOS4A#+{dic|x6q zkZjoQ(m_5xF%~ipk+w5`0%ZUvl^qT`=KRRjDjT?oPuGm|?Dw&CZr!)~=P~SIPvarn zj5qQQ=2?T!dJmOPJbE5VzvsF*>(N-JZb$Y#^shjBtRDSlSiGgvuk0zq;G~u`CD8El zhb=9xNZPmPxwd}!eT$&eNj!`A7OfR8skt8ebVF-31GE-4v?hB-&if@FWFBHZ-H+bx zgbrhzziOE6(?~h`!j0$>B`0l|<%b6duOwV+ohkc{HN04MC+7~geF^hjG1E`)(O@Hf zmPKm^l9&29i}%@;Bd~EC$$Br$x-Y`|F9ZEgCTFvQ181{~m%IGpcqjF{Z|_@u%Nf?* zUbOxP^zJQ^@ehYLEUD=1JJ>PyY5lxEA-?^fGxq3Qjal0sE8R<0ay)y6p537Sv$YrN zTxD$AXL4_;!hTJ;3AfxG2cyeg670MV|036O7h{V1A^*!=kjBn%jm6InWQ?io8^0AC zzjze1{8n(n;?dChrr;swzR0FItOJ>sR@_)~z2~z+Yhw9zRee8FecZjSZ}uO}o{wzk zUO2;6cM zo$9YJc4(*UXtZDURz|E&cS1fpZsrZumCn2y@H1=5X5A(Er5sz{YUX~0%|4X#A2Hwz zeFn<8`*Rj|e-eK1A@D51^*!!I)&?`}_w9UleZ`rq`tlz`&m|cQ_$;F>N-O<;fU$d- zh4T~>kL^z%_M41@xVc9I*{}2sY#-pCrEgdp|BNGUiI+|YbUsc$CG&rQHYUiUGT)p) z8@>FrGo#R^9VqK{x2)Hl&NlKZ&z0D~7+b~Zc6>&nuDucYBjk_l2pE|3Q1&YFq~q*( z+Ai8tIs4XGy1D$<@OGU`Lg(l8IYOJ&-)?ZxyAj<#^NI4HlZ`Ly24-cPgC$&HPw?L| z6}=DeDj{ElzAF4P!VNu~Wbr?Sx`hkrh1Jg4q{TnaM73Ap1N{(<0e@2;d8&@F?OjQK zoMW6R`28?&_zb;2^Ng{bnnk-J(1`M!K!5c9whN~hu!U=#^-Rd<=7WR`Q>eS>?j#aJQV_x#g@l)|L|anyo^s$G(AHK1pALTE`cB^Sjw9MdnG(Ps3 zqi5H}Ix|T-iMGg&R&^zF!(~mmGYt(CKxdX`gbjTMWw+rZwziLl{>D2~rnoS@L@?!S zj`;XQ&KF$cw(&f|W1Q#n!f$lL11H}SFXRb4Z^uREA@2A+#kSjwQ`(}sWq)5=;oIP| zURc#rXve{B_*z$%GbPJyM}Yi=JST6m<<1%J%ro$C`GVjf+E>`-(a3_+sL$mQ|DaFb za@#jE!@_n>ZW{h*uW)vSnNWLzxlwlMSv2k9_GCV<)0G;Y{{N z5pW_NtM+uzchT=5gsYCL!KeDA{nnZaU=0sp?_-_fzDu0ss~UK(`XQL84H_%xTg+Ke z{ma&_gS{rTLGxb({D?QSu%7W?P?}=TI}k4Id%Ay$@`TaF&tyMvsIAq8)%M(=vDpKL zs&_JFuHnqL^Hl%5skA|DD{z1r?LHg5gy=t;@Ym39oD6?ce0>`1e*H_!-$%M+9 zymn>4kA$1wux63&bq@V)OXZ)C@2)en|Gt*<+!^>ltt4*49zU)ZKP79iKL`;;d`i?U$kQE9WKRANKaIotDSq@&b z&fAHNDSj!8PHxso{@SaTHG|ebdvBbB96TF&couT;OyuLQ;NR!VoJS5BeU9oIV{vF~ zUH`Dzw&7^u+nw)C{k7$tvfHai&dP^Bn7F&GETHyoMegL zGQp1B0P?12>M7c;`aeKUjzXgbCoUfHT^!_t1KGjI-<#e~^X{0fyH$s=&pV2Kji!GG zA?F{AoF5vH^ZQDzoUgrIb4C=}mJFw})78*riR3YGVcJKzk$_9@gjets5jKo7mN(%m zU-Q}uovjo+NT+x3u~_GZ(R<1Q=v!MV16$hPz-I{W-us>A6W(OM2!5{r*0q5xLHfIl zumrwVOqz{>=DYZJqh2g#d%i?eGjGF=~d?<;aTH}v@QQGXLD&Ly zef&F|_0hVq_}Ji*9{ey>u|InWaT@zhNpL_u-OZJF=Ez9%AT`O{PiOe&BCDs__J_gYm5cHJ;pYDn`BbmrOTgERe{h4o5dTGi=AdYC*sxvl zhvLCz!Ha3-VQ-=H1D8^c_DVD^hvND?%IgVQT>tCu&^_~<#&)2dbslwar)G07nut%K zu9lDbCwqJ&j1Qbz(iM=dhI{?Cg)Ho)yJ^XGrfkP{|3~0W^|Bw_{1?iG*4F9!&-&JW z2j6PX@muU3Ul(>>E7iu0f#w%T)51QtH^$nY^ZV6{{ikgCk0!0)EEt6)n?Z{z|0(r@ zJtH%BUx@FG2zo&1VCAWn-q>H5$DTdyvbMW-5iY-X`GLHhv|%2)?6HdbKH<_`y?|cZ zYsZ4_w01BDhQ5pMd9|6b`eW*Kuop39^WVGLY0d<0G0r;lt!6#Lo#C(Mu9>K`D@ogf zkLG(A+ii?>Z%l~x&&x(Om0u>pmywP+YrU0cD?2w4E||3;ziJKm2y&4b@A&`I7+x^T zj{gWgCZs!Rq(2$xmF6RR6!INeX!RDE?t4CIO7MkQg3J~f>!bur$+?^1NrInzR+{pg zEzg+A9dNOCpaa$b(%;G!!nTe7uW`mhen71)gINdUb2q5k`!lz_w{7pASMe(!hUJ`x zD7qsN|MV@!3~==5xbT;LnrdWFl$5m7J!kf*0jTvWQ=FMX4BPJ^&gZ~@mN~8 z+MnS35AA=OILV5eur1Jjjo=r7XGMlv-dM|j0eC7L%UuyUGdtd9Yza29qm63ZxV+RG z@5*oX(Rt_368w!_)f=edmUpoy}pS<>U*yXK1~{x$2}2wkIZCla`6ys_ug`(9?s+rk!b{}GL~vdR z{T%us-@-ehYrJ@P6#6?j8(}_ulMZ zT_|~q^05nOz71G(3GU>TO`2dXc{@qHj>07mp$qsi?InGw@&#yX6r7lEX!jb@wty24 z-;yEjABWvt8s45Ke*)P?xXJ}r9xk5Xp73;B)c)DWg=B}JxY+mr>j%clwy%Jbjj|IM z4lR$scSK-7CZ4%Eed1}jPtO;VqHidJ`^i49B!WXi>xl%YXeXwDI z%U*2Bs_3iID%~p5^w2NCsf4mU-QydCYyBe_-9R5@Q?y{&U|cLbtUlfZK17=yE!Mv1 z_utaum!ZYe2kvtDiRpKU`^`rYKAOI>CTI*{_i24T)jaR@{jfd#OM@Ng^i#4SwE8w{ zTluSN?U@DigX@}Tw^?JOqYzvI>=hYVbEEo~oooaS$I_RUL%>}nc6i`Blm0~cS6+N_ zr%KRkEenn>>likztfIl|BR;rULpDB42O1=1&Dq&oxjkC3`%aKgvByGA_YUJV0 zDtk7Y`GNIvG)p!|e*9a~XHoC((#lS7CybZBnEbTD^tl@RJjpmoP=*)3lYC}80FzTi z|Kn`h)}p|cUkN_^dubK+ZOTiGwQ0(T?_%BDL_Y&lxQkDBJDdK+Qh%e|80T@l{}JTt zLYL?L_fp>lghhvhU99ra1qw&K3$4EV->)Jku|C^2vb;mOg!S~Hihq?A0B^m(xFYR?MBW>}$PHGu4O9?Vd2Qo^4d$Cnszjz0I!Ui9k7CRoa zws{-4M(^f~5&cjZ+y^kd51n!kb1?KXuFz?SZv>{Y!T8<5;Er@A4qR6dM;YT3_Y83f zx1U-+iEhLbyRX4k*9#Y~biBLL zVg1o-3}le5u+~qfIcnoi67lbmE|_8E>T=pN5gR=-R>0>X;c;W2xkhjL_5642*x5t7 zMZ>#!TON9;S*OiPrtuJD+`TuR39mSVH5%))jaDC`IlRx_iTe(g`W=NZ1MHikRayQ%zcEX#;6nBu|Ln zu(lCDc@BMnLzpekY3?LVLhEGeyZ-lfeVKK#s~=*1fCk+4Urury;j*EGhPJ+bt80tT zc%~;XZp6T*0>MY*L zU9{@E+VLCuJTT7!8*iQsL4%Sdn14s=}=r}^;(hrz=Rs*lf4YtwnqpUx#{9WH!6OFdEMlpekxrkauU30>-z8Sm2b6V6dl^9@K2>#LmKr>-#_MiQ_xw_&wUNuX1~Io^ZJy& zkq3XpPV?QQ!Pdu|qq`CsF>82iL_{B2zkQ86a~1X?`K#iw)E79bt@7JW_4`!LTB*ED(n)Bdis-qmbmyhTt(C4D37$@F)EB&hf;8COZ7405F zyF7hau@mP4)8{I?An&fA}{`N1`G5HW1%lJI>;|aEhP46?`^k)yGEzhobEIc*SHtt{1;z zJ(SZ${)UtMaJ6qOXHq*|O({k1v}Yo>n$HYi3#7q_naEM&8FpQ1Y|J zn#Slhc*6FTPV-3gNHNB0-_fzo8p%mV`1Q1MF1Ye9+(kz{UfJ8IM>YW}ufNDig(-6; zWoo?k(&zgbkI_7LE+I}~+o(q};CtA(RAHZB<{8B?e$|dsXhSbDA^PT&lWXUgDafu` zzw{8^OL(DsZ#u~bVJ2pL>&M26 z#|Z9B2ox`F4c6Z$SOvlTFv;oYc*PThi_0GBUwtC|*f7C|vE-=6S2$am24ms!7Sa{p zN`67`rlq5v(BII_{k4C!_SOe* zAp8J>zk!?Hqrn02?lE&jR`SoRI}8p87k-YT{qw|ki=1YyR}#!E3$oJc(B8p&=rO26 z@}5UC-=Hn?RHtaZz{vYs3-8}&&Y?un7YVPc?#0HC@%S*ZgvT?M%s2D(t>iC(|FmWLahe;}0^2Nu1L;wN=I-W(jKOItUrxlEUD)JM zh8c6{4Jsmo(>4Abe+)y~c?j(k9Rzq@{HggyS7l|I+Bs=+3VWYJ_dUJ+&L}jkyRgFa zm3@?y#=%D9F^wmEOAdUSZ!=~Ymx9H1X!i^k?#D_G0KFLcri`ybA5rdTP&(Q*j{UB2 zmDF(>&v4q=1{@7e!I$VQ5@5X;_^!2Mpqv0@6uB_3C+#BIw#`X{1wLrDZ>Kz9AwQ3c zD*v|(E%`ZI>GS;lxz3URHZ_GjcKz5CpNW1|ZJHy!C44`O>{N`Oj_a*~pEyZw0i0^Lr%AHL4GWN!E9|9jZ6sb2j@xLZ)`Rd0R3J_KuXmyG*2O}hrOr5kNo-yvfxR(>8sl>(MKWh_2_lS6rWyOizNfe zPWr%dxajgw>JT4Rx*xOtehWUn13ujF@3cA#sP9v|2e{#1ez?YFW28R*g!;~S?-q@* z*Qh>A-uU~+==%Em&D?8v;seMW?i#5tBwPBN&jhOvQJ&m# z^xU-b1J)X5zTx}dd}}Pls9)#48ld&<%rEay-slPNneltdx-y+93wHQzEythq#{NY7 zecz$yvef($1Xx+GF`87RVMXn zo>bfry-F={(rr;kXZ|CjjIFmxr*VzUROvLtH79CZ{|sAljiD9zo3whB>}2&-=taiUVg83`JSa#p7q|^Tb{vC8N zD%ZeVdkfUHG7aW;xiE)MTA0&r59W7WV(UGYHfwxULI(|R`1MQQP?SQZa_e8O`XA*C z4ZKVBKc;`qQxxF4Gt78m9_~!XQRhKcj*@Jp^v|ljnkzG7osECrw|ewl;3w0{c#0Pv zuZFMo;1k5a%D^W#DVu@iR}${&=m^gMwpIN1g7a-Bsr>BZNWoj>Q`VuPPw_PT=(}Z) z3nG&i(NA<{-1C#0oZ;eZl1syeUk}0SRHXqoqq+AZEO;oD8vcHnyy@ZGRwaCp(aL_A8kbX~8LZ^NI`;u$|h zj0w%h!Sry-+lU-5`}&GMrllvm@-u5+-|&Ya;lt{U-_8v$`QgHQW2ip<@M~7r)~Whm z92~zeTpwRc`~rCPV~T&lk1sfieg*2|_bVR$(xLe0{do0z;fVV9O5z2d--C1Ya}DVl zHV;m>o%X#6T|QdwtZLij$7yUV9Etxbw~Sv>hU&V5GSJ|S>ANXipmbHaP3vWDI&dqTZ6A7cOAeEb%x6_I zAP?;b`twUS@_xFmbI<%a1Nu(YA^!SLx7@$F zKgp%)TZsF@e`5NC+)tS=Ql7$dxmWy4ckWxgeSrTlzRAy++`8dOnek%_evZcWHeZN_2Jy^SHmq z#=o|V^Z3YReT3%)^3b1*-?<4Nf>v+F{a3W%T>2{CH7f7D+n`C-oUNu0*~v4Biy5EX z)}CV8twzzo=t9hOgwG6jkvCV+w|(Y+Vg$FqJ-rwMUO~1c1@d? ze3bC2fAvr9W&dFtzDm^IDDCZfA9&z%LpCYZ@An&e7H&K6A<^?*|76j83G^-<;*H?? zk1=G;$^-9<_x(HnbN9s~F*|0eB`eckZ|`6ueXOD`2i<4&2D`sIiMA#fE2jM+r+F1{ zarig#=d!aqdI&p1{n6ecWeHa|slDFbB6WE>&)*U5?Vm3Elc)2%%;^4W-_8G@d)ce# ztGU}}EVdTt|IHr%OS0eLo^gET=&Ty!D{jsvR%(AWgf4U#wgTE;wf9?|Ry+IYf7wdwZUn-yYiL)6l_kmrN!87irJe zUHt4me+1#a?SkjaUFVGr|J&xZ>99S$Yef&iaT2Pny^W0Z?tr0WYa z2MHDxs}6Vdnw*bhO-XQI_h~5n ziifYm2k>gO!1<`ntJy_Y_w`+m_l39uJmMSGP-=h;Lbx>HH#aeGz|zH_@D ze*N)W#{P}Khp{+l{QusA&*6L88l5fM*J2k!nfIXwHhaFTXDwgIN**a3!V4AN4h+N0 z8=T>w!G52COoGJyr*h8$-xt(X&Ln%Ox>(6j@Ed+jfz@B31`EovzPWtRtWL!jRnau zszZ27_p34Gjs868_yWZ5KOXG;kcK{f?vICUMb@{M#sl^PtK?^76aDO6X!-Z?&@y~t za_@>*M-O3h86Pd;dC>WzfAD#k=)ACIFrBZ(XYGxzSRU-r`Q~IAeHmUin9f%NAN64y z{xeKJnAdloA7m^Hp4-#?Sr)gu^nNh(9#Xq=l52!Z+3@lIxcDz)T;adaypJp)*z3Ln z#lKG&xHYnX=(i6$HQ_8!%{ka|?4wEZbJFwxhbZ|n$hV=&?`tc1r6TT8h|yQkfXX&w z3b|SEE?MjMIRM?I-)rc}4Z`P#(8u}of9;zVkDT8&_!KO(cO_ZK!FKikl6TtI`1tKD zvg7}0a8>2aO$DQ{Sv+I9c-h~;Z;LDMoRWr54_~t$@Y`eRP$d&u~x3&#EW3#h;Hi;4L2Zv7hTJ>cPAr&{?z zz9?jS-3}dxZ?Ei>-M3^#;YaQLzwlIZ*Zz1q2OMa;4Qe-dssm30_&aiRbMVMB4gMCV z;qS$l{P8$|zdL;x9SDC<(ii#l*nR$R#u&DVHzKpb<3EDt(&v=$?Ot1vF_4`i&`+2) zlrYAMdF=V-oMboft#aFMXlx^Ve4!mb;v4FhX}iKhPIJ4957{kkg10~q?3rU@$9I%5 z+i<#%4?_=MPQa&hhV{l51ySET#A(A|&1&mcI{&P>svH%>e_ z)6U^(;X~<0@=Ha`Z>Q*{@ieRRZJ04Qyz+GX?xfMvpUHcXOHW3&iCEd@^JvHL?}Ueo z!woKGpku3s2D1w)mPnS%maR;Y<=?xYi75TC|LnVRHpm;V{=9_$&9f)3zH}oP| zi#yP6geQYHZ%xy8a8SDZFbeR)=-VMHNeMD zgO^(IUhT&OP=m2myg*hi`8{7V?{{`{q56G1et+y^=RNOv&zw2u%$ak}oSAWaJJ>^1 zW@rc8mGFkomx63cF*5gDQ^t-d?~JQW*Y$_bo+0g>aW%}tB{=Z(#QovYlTC#S6Zo`v z^2gSKo3P6VCiVz?KAeQR9WM?XYum5s4_jYZ*?xk?T3_7hER|mTElA++Q|&JvZTEH9 zIgNN;jR{~9{`T5&Z*ch)Y2lJ{+6*o|Tvc6_1do|_`r@iTzP~i}SbXb@?PlN&{=l`j zzk!X^S)GK(wRYY)7d#@@jg5qku{pz)Z^j-4r?d5*KCS$rd@>oahoIjU={&sC+VnA$ z_xN??AUL00nbb$4PxQ5&YK8NSgV|0#GcT1~?!l}WWM}#e2md+veE?ht&ujT-zfnv) znzuKwql9^;C*6rJMfcKs*;eZ*6QPeC#0qK6I!xJ*X;;4Qc3|@ITUp!qz|GfqEu@_E zgm%9B1NoJlAKL^j)Rrg1W>+NoS3&$xvOeCciv!0ZV8}&kd5gC`{eLu5-^I4b5 zz6Q>v*yKrl31X{tE^RgU1wKOTTJXT|oy${$D~e7eR@s-C8eHd`JA?TwbfA-#A1Yp4 zxx1(A377YNsCuZ^K~KzUVf_i-QoDlty+7Gl1np^49YMa=y<79*J!RLRQ!m};EEqvr zFrDGTlh1c;U-hip$Tv!BEi7}tbo1_Bwt7X$_Y?H*GRpEx1P~miQOYu##6SOv-veAa>jf1`r{eP=#QR#roKxq1~~_h{ak(gAgWXE z`k#p;oj~#ceTOrkWS973?+6b1B6wA&@S1$iqU!PN!n=X7@p9wKo6H$<%{u>`&EqS< z<&+@upD|(l5&r>Ry}O5Z4VM!~PrhK%*;?w)2mEW!)BF@{#dpe`mjnEP8xV$2;S@)t3U=_!t>Oj0W?i^=lUJT+Xxlpjfb<^GuQh5f zUv}nV-Z`8*CL2?-?$Cdl^{=DD@RM18rOuAEPW=e#Y$axOmtswM?totM9UqD;bja7U z)(^7vJ@KZ+=q`#k_1e0ab`*1Z7~|HKO^@w*0p7r_Hf5GGkJA3cMa&CB9CK%|{B>*8 z9(8vFfWei!UU}tZtGtt0y&k;EzB`sWJ^!cl3eneFD_?#>V!U)ve(#dg!1HYIT|&Gn z`;j(U{c0k7Cx3N+f2ep#a;oGwj|K;Ji>5x-3hlkF#CtGyMVDrHEX*EgjbG8)2R@rN zNKV_e=4tSHn04qTmqskv#4{kIT<_6!jpFo1Z(v<~!u;eGs}fnRp*x z{h^eJxM|TUU*m}QWYOs$eLsx4NFPXA<5u_wFPo!pv+jWW741DZv?g#hFyITDB6>bd z8SS&d?~o?=HI9c<54blreky5r-Po7~DhID0$iMaBxMLm~x6fk!hkjw~CDRu4F3$M9 z>GPAcr}v-p-oQ%wGt$Yh-gn(zgBNExcRPR&!LeQS;ioIX#uA-1j=edk=!gWZ#T$e9 zm!roG^xqjDtMo9=aa*fc;|+GK7Ax)T&0{U54f#z%K zM{JDNO%=;>)0>QA-%re5M(^wcwI_HLYs&tN=3q)VUfE;(j=lFE3^tEy9#$RfF*7jt zpD#7HW-%{MrB3nZdiu+_Yu<3Bbma8dmEuv>QRFXD+ld!DCEhbsd&kuG=fBHLcPBsxhR zdFL7Lyr7sl=6{-mTkqZ`quUg*ubVoP>6QcCq-Q(R%Tv93npCHk77bO;{`%FRCw_x3R}cAwiv;n?=ku1~9vk|pY6GEAT2`;Ty*uyC=0Zyo9sOd2!lr}kfZeHIQ> zui$iwe1qbkum9MI)lk1DpIW14pTQ3KrTWOpz+gTfe@t|f%&gmckh_+AVE6B-qa9z2 z`0@niPU!?kpp%H+nj^(CZ^AR>_<@LBAa2k0e=22L`OY^4x>N2T$x`Hq{PoXrrqOzQ z^&N~~eSf#UNB$_Co5X*k=>Obxo;=8k72{K$_n;kjYnuD!2Y!wH@v`S{cK4U`GCGUR`S^Y%Kq-+maeihNpEcW!s4d$Q2focR!7M~2B~k-)3cyyyT&5v zbkY&OGp*?`8=Dz+^GAyA?A=$Hj@?du9na@b0`tR}h>I(Mn zq9h7BwZ>_tC!g1AkW(BS}%3T&f|Xr% zei}x8D`Qo>6rFboXYhv1eG2x>n9SH$jH~zH)fMp4++QZzRo?^6oD)J@Ywk$ocaXmo zcubt{?S1n%{*gV~E+0DZp=7_PwnUrjIfvKN?>ya3aff8!wdeQ;E`7~95;l@zeS+vP=;r5%&ML2e?8VX-Z=|<0A!Fj`HR8<{Y9U8Hs+?V%83FT-cqlh!+XE^qJgi7+#$gAUjH2-b< zYff$AUuTd6iMvnbzmk9H)`k2_r|smubdM6AHRlxa9Ae$4NIKTRZMi|8lhz&x#tc8s z>T7dJXO#|7`AmYYX3Yp6*d}<(_uR>g@M$!Av@Ci$LCX&22I&Ca8mZPtM{n9|&L)=o5(uaR%K#z9KU%U?_@o&PXVdK%ZuS>vT`M9s$_UTm1 z$NlX#=?BsiWw&`eUH63TyNSU#%<}Xd@MEi4lP1=lwEALg`^?x-c(EP*!Q-be^67f| zi9NGO=a)BP>v`|=jpD7vYbVk-jn{nWqjNgn^ZOQPjalC2V>hO#o`z~s2yn2db|*PB!Lfoo58o4tXEmO`D2;TrImiH z_GeZHfWPLX@SV)(_4UXjhkRme&V6>mx{);V*s54`?XH6;4mku>Ma zXPq3YGt;A2zcn%Sqo$m53EK7&ukA3WaKH2t*7a(&rk5n2A9Qgs41IT;?f<*#GjxHc z%sLzLpiD4oo)wIOU$84JUNgM7-tuCnbTi~b)qM&0?Rc|i@&k*}KQmmojci6fZl#Z* z6N}?f^v~e*zOj31dw;UXqiN?owjVk-%Hz8zd{j<9G`4)y>8F12-QDn`H|OnqF2QS_ z%v!#(KkR*F#rsp>vw-Ac@;Ye(r*(I_IPHyD@yAjmAAqGjzLimTj^69sc)8JY-F#O@gN8FKs(eg*%^*_-{zK^GY)yQXfe8&F|cy3xT5YK1t z2hYbR;rW3<@H~5Yq7Rlw`r>)Te(-GOpPLgnHvI#4_z%|w!D$|zYYjfe z1%7hwNJ!xf*rANs!PYCRpGEObo^9R~ar=e+c{z8>Yi*%ptzb%zeF+ZnLr=yI+?)$P z+#8={bOrH9&Q|VIsZHJCFvk`Ka#noVpeo60H! zvOi^uW!O8y(1Qx9ue(mV<0Q#!*)OCup5CDCFwd2Y?=3the-{Byx=-Of@tfkShB|4| zjRf;;e5e2MN%Z$@*4c{^^ss)szUvHMU2!UB=jzNUYqJgm$Ahg~*);`=L#;EcXFLV* z!?$g4TG|+AdBg$fUoppLQisWV$rm^O#16M%Bj%x-t4{^=!@C!I8*nH4@4gvLhs3&# zeD$L@B z>?A&3_ojY@-$&<3@8(%_`UINE&SgevE)3+Rj`xjAHS}Z7x`KMzbvBgfIg6j#<5_(l zdvrL?qEho$%w?Lp-l3k|z^C*-NpBOZluMc7@(a4}mOw6hX~xC!12f)W?PgKlOTY!* z$I<@qd#nzN4|MeWs>)-FLa8gJZ?n9bk1l&LWu|{+>ZNBYYhmTu*&|K~mAEXe2I>Oi@%J1B#1XNv5H9hpB?R?%>=Ua8mK;N5( z$0uD}36IIXY`xd{@`cDJt-%yJ7Wc{vGTusf&Id;6hl0uIiRflKFYvMcme9{UJ+bMO zfiz^E$6pj+UC!Eh>z3|YwT53%XQKGhyU;5X1GD*HaB~ZAYW>c^zN@4EKIkQUKQCHB zbNLDMtaXqo^1|f(6ncUq?ik?SRbWKn&+zXXZ)hnWglM&qbr5rI=-x!W!ToU8*S4o` z{zmf0K@;{X;wMdyT>)Gk9hRSzphE|+s|`=r(fW#~?;O*Q9v-flyPJhe*_`U@#T)Fo zG|mEiu;9w@0r+PeZNAohXU{17(W*xjyD>{D$t>ZUqn0jkbW_|1D=MLdzzNVPJ>W&F~*FM}^a} z9M5t3<*TS3P0FD4Y>5nRJcop7td|4~J`hEiL#ka}&h2UCG8$rk3Ara+#+WF=9 zhw%5z_N~tSi09MIGiT~^Ul2OeWc)UZQpd{%O|72r%bAPofMJG1x_;*3B4n;NCeVlE z<5>hRFQSa`8>l_iU37F!F5_!*Nq!_vG0#ETN>!S8)e>J_ZY66IireW7gkqoa|NjbO zD(!}VaSro)J}}k_M(#b!&p&PPg#Iv6ZcrF&{@-Byuk>YIGmCljcdV%x8ZmckUJWgp z^J;2jP3i2t%Ws*Ka`_(>^F6ikmiwOfUwUT|cz?tB$F$+#@d$p0^D87zKDp72Hl=Q@7rJc~Yh=hb}}>G%BeKD(0lf6u%< z_t_txKmSb9kBzxKcMf|bKSKB8KH&L9V{Xf>=FV}^S+MB;5&AQKOn6asrf@#Ix)56@ zub`+}`kCJ6kyl504tXW~FXg}L=;gU9;rBfFsO0Fn+&aIr=scdQ_|NB?{(LI?x4(>) z{Pf0<=Bbk0gshcsL9&rM4NSnFbp zoly>soZ;17>9^)$pELGWAw!?_r&d=2Pa%4~-pvAUMxSN>{(PQg zd+WIX-F_<19!-Vk_x9O%(d90$7a3j$4*2;am)A8uH3lUc#q08eEhSw9?}}!@qi@O8 z{eS((KvmCyy=&k5qxpOEYf8;MhUV8K)8!k`{BUSKP!CSy=O$-5cX#5A%9fqHp zz;zWkSPHy_@YHsmPczS<>hr+$dC(^rKdZn`1K;(>k7PkIek2P#{4DDy3yO9n@X*0K zkC!|@V}D!VsBvQ@lL!Ua8Y;1&xuWK^DS799b4H` z{HkIhmIQ(?oPWc-g%5)9^jb#`k2; zDXs*UJ%JQxHHvo!K&#Qj!;ZnmNW-t5&R&@z^Z&=`)@aWmmSldURQk5)!nLwO(_-1du&L7N*jUvAl zKhrbt!Rx*6GI=*HHjH=eoYS;3+ll|_^WrFmmRqOJ#TXy!xrFze!_aQq+SJLLE2GdOsj{IJeH8b@5a z+ZUZL{y(apGm!e=AUz!atLi6?S?3trGi%agKNWoBZHI?j5)b}{kf zOD8%z<|5zF|27{6Z!Zn_dY`j+uKaNEogd}tu1oG$2r3OCOs%a>Ju1XD)s0 z)C0qhMaJh}**L!7$_?WuT)B1p#4E!oGaj2ca@nJ|`g}VY@$)VX1iKh>WlM)&{~7jZ znd(>_2z4z#X8C=EJFdU;BVazwH)2H>?NsxBt1tLM_{Q*_3SW3{{`mYO%Wrh{+*;r~ zUcvetdPx_$N?8^1z`*4TuIS?XO8$puhL1f1n`nh^_-UtSI>#2JI6L&s1A%c}_^rzZ zqv2E6gMa3QWExh3%W~!g{EFE4<5q|#l6fW%yhc8;@lx2on=>8Rz!|ZeTKEti_{|Ub zhaY^{)rEH{W}0*VNFPkP3E81BR`pzB{MXPQ#hvV3avtNklyQA7?mN(eDOL;-1oclA-Yp9$UyexEpCWKeLu z?qfS@S_kyo0{wKB?zUQZ?GHx(nlkrCb{-M_i^t%%JCc3t;6Xm!Cn&@ImB}3wt$*qT zeWUZ&JsKnP%0fvrN9J<=Q}kT&T86s!5)jw1<$z-5b;)DJQn5b5yH@6N@lYnZjp_@Y z0-Qr~rd6W%Vpq4Q@6wTfBz=N%88wc%BPMtu`vdTK1~bu%ik%(n;Rn6XOL}kKjd6Aq zAh#Ijo4xmnbCK^$J}Ui#^z6Bp_U-??BO;}2kTO29M&9dt!6M#JT79??__0Z|e*%5` z>u$eai>(SjnSPA4bCAvqv-WT?vSNdYQ;y&h>;J7{iWSrHIQ5Dio{sp)+MaBU?f&K8 zq%99$mH5!T@+un~;+%`0%h)8c-<4PNTAI-r@-M7>%9I&B{M@`v0TV|g_?Ew5-`~O- z%wep-c=wjKBWqMX@6w?Q^4W8k_w%8~wrR(wtbDJ2$9>Ls|HJNo#Qkq@|6AREhy9QG zKHvQhyKt7f{}K1U!ToP_|J&Vv$Av53{SUkU8Ev3IIvQMrmmGiHZob=z-4r3dPqJYH{ndA^Zoh*D51Fw)8=QvY zPxF5dI9lT3snWZ1@75L#dy668;PY9kXgiq?=wIX<=ikL{P zHHtT)Pgx$A)9XRr5ZIZycZJX7SCfDcrB1_*&#Q=jJqzT=b*s{u4-zeG(WR`v-78 z>l4BKwQ`$vx%IezdRb8|a(DhhK>N9TSe1vv*2!NKj{U zm%#Jr+#g5q<@2vKq5JdD^WA-&Kb(Nx2p{TSyeQhAHF4i6&evS^>_tNtwB<$8f+=;z z?$7c?j9=v;eXm%5^v@>JDks@s%CRn)iXWtMCimAPce=oD2$?gRf8poHRX;lRS>L4U zcKR<`30E_GBg{C=1a~SU+~LP*gFwL3T8&EEt6r6Mb54Kc`(NloI$C(+-;b|IQnxEx|(|e^= zrhxzMSJ~@;{gsElwfu_2_)_15`~H5PpC3MOJ`c82K`$`mlT?C&JCt>1a%78<$*zv<;ugQ0F0Q1vm=BF{(cxmWw z_-&SCME7Ff?P9*v{Q0@N1}Hu&DYH12PmTNQ7D-3QBPL@h^Ro|oO>6k_w=CSGyUF3z zA=>wq9vk^Au{F$79q8tI9@=W-`4p=@ly{708@JAyNR6K1C%uzyzME&{p^d$~4c=1B zIyfz14ZaP%kap7K12eIiyx08F&Uc^w)$aR+x0{0+m;7G{OrnQi^ZZ`XGZXZvI7svu z%h)Lc7w3VKQgCxFI68;<>1^y!Yxhp)`?2&}`pDCab@uU?I7->%I!E<)>M!%kx492Y zHcJEYaLjKL{;3lDgrV8UJ;_O6eGXXj!p@FBj#H+0V|gcg{V(KePFIUCLIV#WWp61}k(m1SvcbnjkBHk%xMmR6~nLS@tb#-j@)!!(*5=*oed`Jh< zS#uuZxC;ybn=5Q9yd5eZKfQ>a5;3A7Wn7J$lHtBf#YiwB3HZ z)6y`qdm3#`QopXDjXWo(YvV}E16T3vcXD1ZeXjM@mk2)h?hKuIAphSi^1^Q3Jjyff z72CX7{PlhMu6|!kzM%u@i%45KXy0E>?9zwLxd#iXb&nAJJjW|b`s{vXFLcWe*M2nM zImIhW`s99P&vMH?f}f~yp8u6CTQzn#7ue13A|`6f@sXDHiN1Qh{}tam*srShXwn_v zTJrTP#%}@RUGux?1Md&zz1g!$`Vi8h%a+gW*tEQr6`OL6?biz0>6{U1@!^}cFr>#i z-FJ^DuIte678Uw}!#igAe5B4V?uZx){Fk@S(P@;au+Fj7PPhHTl*_tYgxK zp5>!Twl5{`g&WDNe^So)6_5{KFi)s1{7m?jGh!1d^C|6>!xOC0MJ3<$?j;uneg8aZ zjTym|JkK>yS8|)C4fa=6U{Cxd>3i>+r*5-$@Ic+ovtN9%Xa2HxRby#5I>T|yUOz)a z;FP~wus%nrpDzUF$=YoXeGo17;2btW8??Z7Tg7bdhbl9u(DloRChU1%fmyf@+!XJD= zcyG`dxH`8;5gyw zs(XKS?k?tOZ!K8xcQAK<3%=I8Djw0e5$;!!7r7}MJ+wV-j=kHE5 zGFNt`)-cjz8Sskb4I4+FybpaKfAo#pR)5#i-+&g-=E8tt^2c5EC`GVksB z^WH&X8*L0lCb-bt_tl>zFdiKUzr|mMX#=_5 zr;Uu*zk1uqh`rU@hSq}8V>3+~nhVlnubc1C>(f^MGr3=)U4Nc9d$*0X>6Jwx_U9Iv zy@$=|L1$40XLCtcagZ$@e+*Vn-cQ`~@SwYF9QC)Dx>YaZZnEKL>TYoBCa`7^@il|i zU5>2o52wRedE!g-nNj%e^q&@vpP0*fL{>O{y#Db|N)FcDik#FP;iPX=dV)z%sZT?&bp^;YE$>yqZUX$sf}X(gCnqgkQJ&!>k)IW- zA-@8dIE#Cd@`+$a?DR8~d-mw(y$4bp4@8pnhG8d&-A00o+?)kJ?ki^IHhFT`hn;Cr;)FtZC!6cTktg~9ZlW) z;ls9GKHT42=!?~ew(ws&^PZKlx_cud#wCtA>tM3R*DRN3Jswp&)?hJI+J7m#On8)C zR`=of-q@2ljO|&#vy}fjXd=D~yL`7EzKhUKIsE0>qtW-r_r}c>t{2k>p5q?BwY&180DV~UiT%{gKIF)Hot0w_rXv{12BjW-&dOU%-Y*7vom*n8t0}CU@Mjp6}u3PqcF__%t%y z#o6QJ38&ms)m!dSBkl}BIOSx4~dTSMM;z%Bd9%X^T#FX6|Ap_`)jf#+v$ zaH97zC&>44?vMAa(mKHS3v?de*e+yenU~f)c?dE5jJ?g~9b;bcQ*nOh+p)a)et0p9 z^mxjQaS3#>QUT#oUUI=I58gW3}QHo6mf(%05dDX2p(&e;e@s**t4&O(oCq@>mzv-mjy@ z=Zs5JjI3#__DNHrC~Vc5on^W%BHRKgFAfPnS0*5zVg{@MTQF}e&Sb7`<(S?XsB{NVodzRn|wfQQ60SU zBH_uYiyH*L@6iw?ofwQun+nTlf3GC)l>p{xE3v z(wBC3h$-jYbo=UC*4Ad~c|CXXtHTgU7nx4uZ#JLoFUZ`+7WffA-Ds z7?_)c$9{DWhQ|)-{-$_bJ7;h_E=k5CZ4QRVs?}eQ$K!=ZVpfvRA=J7zX8^YNnP-iC z0S~4Ss}zKv>{=k_8(^bve-(ZrmL-I2+Io?Nv-7t$uEmR263x$XVHMwGP;WA%@05 zrw{N+ai{Qrc|0RO9DfbjAHl}>yc%EZO~uj7<@oJxni);k|0MR`aTj9b$Z$OEdwPFr zbR_w!kF#SdvdsTjWSNg2z65+BMm_=C5XxM8NTTj{-MaVH*}C`WpSr8ux_6h^x_6TQ zb#?!nGS~902lsPs-5eju@t^2)iQ1=^@F)|lgcsj=`bynxV4n%cyj4x)O z?%<2fKqt&ZpKAh_(j%KDV4tC%iC)Pzm2^BTJz*uTbi zoxX;vgHG@k&XwLFomSse=pEm)W?*7qR6a=A<=BDwMVuSMdeKhy+dfD+baN8}BVDqN z_s$W#-`&&P%Dcz-1r7cqCw-3qVFN1HIkpYGl)KkoyVB`UH>syVF!(2W) z)8(_%T|Rs2N;^JIbNTF)Z@_0KP-f|*zI*kO;ZfU~57q8Sx7}~M?H=K_d!O6x;cmN! z{+D(uhq8|he?g(oS>*Axa511w=%_Y7I{kAypTo1~MGR}8=WA9>~I8hU=4wEXCezZqj<&XjlTQ@p3V zc&mW%Sa}ffBq`3A%7dKgb%F3yd^Pqt*O?yFbC&y@#d|-`Y3_3x@AW*&eICVoAJ3`o zb1Luk%w6}U{-L~gc=o%`_*gYYy?YU&mnY`MMx$R?8`QIf7k+DSTUh&lwf-x6C3()d zo$~p_j)*@!9MvJ`G#(8+>}Ap%AUg^B(A@pI4Lw?SE+5Oh6hXJUoAUUAn;YP>^WlXC z`0P69*ub2#Q2+44R_u@l=A56x3k}RUKOz5Fcg|^G&cUYR=RDS6<{WHS=A0`ia~JdE zUAcCwOV=x>jT333oHpk0zMM8L(LZfGPaEa5@dMf@r;Q89U+T6|P8--#{H%}P%n7t{ z7G*@^{`tQ6+4)Bd9BmCIQD6jWjX6zvMolo!Z;~docE+>}FyBW`p zSWv^-r+h#inNC?D@Kypt{IW>tIl%o+6}U}B*5iv<1ubp@*Q}R!HNcB{zR`WI;Msh8 zmeZpATZwsBx!(NKoR*3;PW@cj!SpYMw)44nRkG?~+K}H;eE-2jbRzt0+`Vdan$>DQ z&C2gzlMXVzE0+bLRi|+_1M)D0EhZdS;TL63Q&;h5_Tm;eJ2n6hKC}$!f!@2u&$-uu z_Ez$fPv-SMd1wD-#$F>$3^}%~^?%8B)Vj6q>iz}o<`I*zleu!f>Vz(JBcKELd=VYR z(jh0dkvc?&M(&4>&&LK9e=HWad&Q zx){E?n4fUcfsNS!UKo4vR>rROLdot-XDly)-&Nn5r1~03+rEr7wx(>^!o_w?za5@j zG$|av4;~T@R#MjbZL#l3Z!pI6emC*`$gU*+$z-q^A%M zH5~t$c=K>@lJ}I|Ll}WBH9QwCB$nX{aPk|wCsX6MfS6YKDpk+xjB(XLOqt=+YgGq6 z1Ru|8vj#kPWvjuZ%C3OMQ^^lN6Rkaq4}^>77iw);zQaTediR`}jO}9LK>pXniVfyJ z+@H)W2KNonu#e0{Hy%u8P5=hom+r|-?(jDL2g%wJ*7xtG-=6Fo22LeAi=eq==b`%N z{mLI%*?9>4lv6-k=Tjq5DSLhn@PTjd^Y#zC73V;ZyRzt`8ql<}U1^yAHDQ ze=r%{Q>(bA(a>@Xaykt;osOI)=4nYL>$NHDSsTK9r?W4tkFM!(&$b@htyqh{ud`=A z_=wMJpJ(-jP2}la#|2LP$&7)9T=WDzU(DT4Jm>RVDSbkIALYB>{f2kpvAok7T2g)D z=TW>X&vDCdwAiIDH%awp-_?FsV#{SqBaHp6VjBICit1)2N5|494r zrToyhf#;4uN%UUoZ99v8(dGv9Jl$*7SnGe~N?>(}5mH)nu<~yKM-glxrI(WiwzzQ8 zruz=O{v$i@-V6QN!zQ^^%eOigs?xQOI`H*z&e!Hr^1VK;qmK=W3!>g@sJ9K>f-@w| z`fwewLzNSp=|6U1sOEiPVI6zfgI&~J*5{t);(*?YMhza0BU@n;K%^80E1 zhxjLC>-*qTdqTg*SO7t&fQ2t8PnqIXJRGzGLk%z-PM*dgbH^m%UG|{-3MWu!5x<~o4;FsfQ`VjCw6HcY zN%B!?@k2M?cGK=V{@fMfmjm>TlVj}DCE54iCmf8S-+9isuDRe??F$a&4=3Nl|3vu9 z!@u}z)#LCC^^3p0{Dr%2$@6D6jlb+dvrnyPbV8r)$dbS8dyL;Q#_@TK=TgS?xya~q z@I|JWwVpiR*sg-^p0Zzw_gozOi#pkdm%TfXJxOrA-;AyleCNJk&A9uUup1Sh|vdoa^y6eEoi{ z%iHPrVl}Qpv^pARGRt4T4S0)a zLwJgx4)4{5qf5d2b=XKV0$E-8&|h_rrGJ8b8F;SC3%4w14{9#37x;2l+z0$#zdFH@ z`eNF~_pl%d7tT99WgiA|4L|$g=RgJbn$n+6`rJVq+vZ6grpMl=UmpP11o~F~w(gmt zZxhuwe|@U({1*3w%?igkU!bevEzbV>E@Rro>)(LAoIRF;aZ_5Dxb$Gx*8gx$*qHDF zba=zd>>zt0-GH7ygwTF4WvaS;?kPkoD#4Usf5}zIl{sN1p3B$K!p{*&gq^ z-_`P61M#1xo{hv;uJzS7)2>6_mYYwFw$F0v_rXKR&PlQn&!Buhvc3ZOuIE?uJ+YvI zhq-OC%I~4P8Ed3>leS|`_GM1&3Vo04m+xNRFMx&(>`}gsJ_g~-669LX3@83^u^(T4ffn|qv5PT3;r z&8KXBw$uCy`bj6a=}eNr9qe7y`$fEy4DQ4p3KLt3em_a|>g)lnJyim?!`^apwgAr< zE-Nnt4i7fR$Jk@c2hX-T!&uf~go|hB|BQgs)kaLFp4S;%61%SV;9w&4wi7S1hO>3I z@_rj_J~YesinU3yWBBVc8nC;74(c=$wF@KlodkbH7EG+n#(;L|v?4%b* zQ_`8cW^guq;Nou0VQc33UXhOa0W#r3=CNxp-)GkPpSpQ*w4HJ{*7mGoUAc52G|UTR zcVUl}1?itR9yFh*TqE@@cFT%qvV?QufSbTaQ|-k@-bdTV^~NVuD6W_G_AWV>v2YG! z;%vsoS;+h|k@rK4yf^w4aA|&h4}OTGI#W6sms*Py4eUC4X6!A=9nOCcZ{VwmOKxm| zUnD!4z?qR9l-~v(jqFJ3ZyI=X*gGnGm~ZJ%i25f5GFN=h7h18dHm94jkK^sEIi4V1 zK%c6EW|~VCpB*3`qbc=``?d!%UkDzYb^q)5TA$q)*ik8&NSlpo#V47u|C3A-9XJoV zf%#8)kAfRhW~1+wHCuhJy!(5jOHE!=`~B`I;5-Oj=b+yd(nd+}jr)Sjv+i$W@06kM zJl`vusFV2~-Rz?7HGvDe*VcajDUF9r!Ra^)zQq5kH7eDmb{?nx#@g$mqoLF5pADO) zarSTW%0KIwtiBt)71??yF=ys`Y~0&4XXe?pmi~T_LN6$barHePg`Z2sL z-@sg8)%%M?cdgTsmTZ=dx`KMbTI*wOY(qy5l2=6k^ZCukRy~dVqSdtdBmQskrJgpw zs_@uC)}`lDp1oybw5OfAjMR9+o|tY*%_~L2By@@OI}nz+13w zAl{nkr|?$DSgyFG*xcP!Bs$Trid$xy=W*)0xgzatHe)ftOSCJ@d6- zGkxRT5&ilW-I(axdUTw@`gV!>6wsYB0mkbP#%&7YH~IeM6l^YgPOM^^9qWxq#&weI>3rpw3{X5-rPDV~~9~ZiYe1$o}$t=Z< z1jru(UQ)ozQ1HT?)JuZw!SS;PXBg+E4CSnp6k;swe6O>8b@sk=(LC0(o1RSIN9&V^ zoMrc%pffgmzNmR;vUh^{WDE1cwp#Svd6H@4m_v1D?bz78+V9ESxaDT}hOzwe8OQ?s zBZ}|0b;w@Hj%{-DyWp`cv#eay7+Q)hrt*g=pLw@qqTXf2glB_y#Xh*@ucfT~EGqv3 zW1*Asb;#Y8j}sb@U|4@e%Zwe8eXwt;8qKpIasQCGg6`L+N&D9*fRJ8NV{ zcC(+3^7*7Cmks?cNYJk_3x6hi{@!Y~^z-f;s=6mZzx9TG#Mqr(!nol6(pozfK0k2a z9#QAmusNeuaBNG%Zel+C^dtBZUMpdYUW>n8aP*}~-x!PJIlu5uj~)kgYpzxw_kep7 zH>Lf5$lg}uF*B^ohY+!OW>#i{mGllyg52}O0l&|pvRpDI4i@tUx)M$ zQyA;SJZoI#onrUAb}^Sb;AK1i4}#ah`P9mpy5$~DERX&inA)*pDuK7n2~HJ`ZU^UT zYZh%edPiF!`nX;FrCiB~;8c&+p_>!^@EM(1v8R3M{l^jLtn?=e4FzW>XB}4#^-n(+ zdC-Hu;HS{pLDtA7*#f>NBXguLt6iN98l8z;zR>y;f{im5nP(s8nDE}={j5>&%6C|Y zVc(gTcb4*|a;6${6MSA;6$FQ*wZ3S|JjUFPj(e$ioiV2L$@F{YT6lrq)`0jW)5Lzg zK$&vJS7(6u*|olCP3p|()_Inn9^{Oc2=dX^$=q{u*u3i`U%Vw*UGW|G8h)-=c4}1r z%B$JnuYZ!Xc*s02^VbvnZsOHDu@?N;~=&)&Vf)4u| zb6Mhzz`z)}o-#>xR2E6ST_agoEb{5YQ6i}Fpr zo)56^f5meHbmczyMUBjZ;uCk(hc-a zeG)C5Vqc47YUR+G(<|MvA^M80CB%VgjP%mCIzitK)<6e~-Q(_fb7xG|&Ym*Ecjb}N z`^H#)(-^2HUGq{BKA_>jg58Blc1Q@BB442NpJJZZ8agRHJ|lL0r`6pQ+cAl8sC#qf zK$rDj_LS+I)HynSq<{&`6t3p2LRGZu{rpOlPceCP)Ndv&N>z+$&FO z4r4CkT%J~JzdG!xJl07o@H1B-e@wkjaGGRFh%tge97lJUUb&-ZitzdbxNi#l;Hf(P z6(=;qm(f*&k9jB0-y1*pd8%sLf#2(Z+4s=QMZ5pQn0NJ_Or9m5J|VskyQjK>IZZTT zZ&QZK>)ngIGik~;cxiO0F#4ufCWAOn;aa>PJ>z569};>-B3|6Yk!aQ0j_^Hv%(YF1b zjgGMyhJ&a6cRnY}iINLEIdM?8a{_kjP;{olxkH?}OmjrgcaV`;-h8*|dx`ccG>+-N zXq*&)De{ZbjR6!;?|T+MRobL_Zj);Q^e-om}sDWo54JqA4nzrXnN^$!#M*SLZw zTGVGVzBor)-zCPCorgo`Cg8Go=z9;&rg7k5y@C$( z@0cZBEGza8$p+IWVvEtMm>-(mb+6Kzzdqu|_oT-jI6(7nR_v2YI9H(d2gWzG>GTAg zHDiRoY;f22J_qlvmX58Gw^_0Oqdf;*p`GWyN$*47S6VXsP2NeqMZn<}^0uA_9_70Q zhYm7bvh^vx(LMmBpCm0iw_~1D4<0vf05;jp`RxBNXGBuwQOel$1gHKH(w%KN#(=&bawhvP`F=j%3#KambHu~5WV`gW`IErWQ%x7-%1Ajk}|@fS62nkVV)}`i`S>r``^ayq3liMN07-%H*R(CTl(ss zq}_J(EMnZ^I(tL3EoWR^4qxQ+uXqv3i8b>sxlVii-hB}n!I%^eseXLphQE6r+iUh0 zivMcx8?4@t-&KW=L3;|l`B{Eu&CmMxNKxj!cYOAH1yk z_by5J2|VAxt9+|DsDXIewxPfUUkOKcEN7UwlWlx^B5@cI^pLhv-GAUrZO0$a+@3bU zSysByz!%wk^;XsdrH|+xaVs-<$2xzSVuY%B7h%1y5jeL@6kao8SC-%dL9S|?KLZ|2 zj1B3hNn1K;zRHZPqHT>+*0{^$v(?_MN>@+OeZM#4iqD4NXBvV3Vt#LlgpLp$7wJCnol2l4ys zPLNLIQRCEbd;|J(?fYY`%$#MGasQ?*UJ=nM0fT^i^v>^XZ>xRF0mwg*n%o!+ybcvfIsk>&xk~ z^PAS*wTCAs_9A%HSTXGt`|AV60lv*Pw#Dyx2M@v1cCCI6&*eNfz_YuyqF?gcI?;}$ z=m*FEcwKY&u8IDr9gA79bk5oo{ThyAAKr#QeWUC}_gQ-17@nu{FP%XAtThq+OFno$ zu2u9wyl^Rf^wvX)auU4T*z4mu2b!J@ZO?+nXX4*F1OJv?4^ds>hbH8dY|^jBTDdcr zztM|L6fbmUc)Vce&L(0DcCnXm`>2`Stamp1I73Y120v%B{wK@F#X5t^Y5tO~s(ka! z?cr|h%w`{YA9`AI5oOVd);aXmthGb)?1zxy8vA3Mc*j~x$I~UhpkW8N7F{3XIiKfM z%$Yk=!|{dG(R3E`1h8!JhvOUnw8!wCEuRsa&$*@zhK^aWO(U7R@Hw82E+kp;vvszt z=46ed|K+_I+omn;*UXMxr0=2GI``i0rzj&`Q+I0D8GUN}cj{bULQ_;R57s}`s~@B$ zXw_l#xrB_7FVd4UcmG$KSRX-UFhP%=iHtvYUz5&!)j4^UBc0}HW0({9*I5u*DWZ>^ z2U38ooOQ_J>b~O^71oc5qQnY7dsD(q6}+jj0IcQd(c3-h~#wgJTQcE z8s{n}+ic55r+y0U%C@XQmKj~1{U@Eta&)ce>dDcp*rF@ocgAF=Cr9z?_LrmiTNu~O zY3+K~PmYe|o#wR;WGM25{%6F-e;403dD5r!OnsYQr5*9Y3jEt0$YaTp??VI4KjrvY zy|U7c+T5~_z&9Ocotpc&=_~UX>jkPaGxn4CF57?3NEDvP)B6IwN5_{DzLEkIi;Ty;3E$Okf zq`$b7^#goW0dN17Tn}0xa$tPcd zuRc(qI2jA;x6pqy?!UkA zhD@;M>;Dq^7#}$}mJilf6R5v-)W9=oXgkiDatptBUXIhEvkczi+oi-j_xH&T7MK1d zYfIXntn=QqwxoL$Je#&{o29$v_oi9Q`}hS1Ywyo)d)JjZMf5%G+El0IXT*Fj%q4z@ z@7C~>j9mk-GVYGX-jWWd`|;wH!0D|q%-l0!Xmfw-Ho^B2aLW$X zIIThdz6L%M-L8O^l1EBkPTI;lYx|xA?|JZSdN%=2qmkcz*E|jt3>&}hPE%KY|I>x( zP$wQd!Ng2XsoWBt9&&!c{YT3<589kznrrsxgz%%DL<|$Mp>ihwQ~1Z;DAc@*e@ObS zo|`nMVq=KMCV)@rr-l4ip2YWj7d(pZcV!zu1P6hBp=zA4%N(sZI;Az6-+NVJ#bZSaF0iCCInq zQ^M01gR|9v+-i+a&Z2B7Wd73k>+JVCYSQ?gH3{(3Qo=m7wA5*t3Jz3HF|oGa_u->B z2^|I9f#9r_X;0VXkO?#fOW~$%S(d?zkVMym{z`KW>j-sU_I+S*iVOV z!yYFdO6TLo(Gygkd?e`pD;J8#NdFxfV{BZ~FOjx9CS4;t_7LAkh1pL0I^Wmxq4UZ+NJaAtgU-#0q-QLpc$@9_Fg`u2W(zg)OOPw4#p?FPTQkbi^W_|>iW5||rUXBvQ`>uGB# zbSwPJ3R6cLG&221zwGTh^M`mK$Q*3O1Uw-=In3pgV)$q2zEF|J8x`m&uh3WN0OA#5 zjVHg9^jyL7CZ12BZSf4aZC(bQME4uWi_ngN0lmxm%PdV>8N@tGupkUd5QHKBV;2IW(?kx6=n zpUing$QQwmeA!X?FZ{yDniE5fInLH>N&oI{(z*L%vgV>d|-o=$sJ z;GpU?;UM%#{%bvD!?Qyxs%h&-)U$n5XvGoWV5x6Jb(Axui@?Eh;UJf_KFtZP{C07? zpk#AT*(CZr2OLMK>vrNs)mA6xN$-*$Ac-EG|47iIj`S_?#PIhHF!DNhM5>`p)5|@R zw@vPQTeRwYv1bbRB4&#xN4xwu zpJxwd@r34_x)*KRhrQFc?Y0+sCWnqrv>krIwk`fRy~manpH$Lze?F;fW9?P*V_Q%2 zBf>j7d$K>s>>D#6Tgu1Y`5{?} za}2OEHs>quMf>vb5#Wg6%pdMPduUFNKg&(7E=t^`^x!)DGfl`?=#=KgQf>c5 zLKo~{uJ>Xgc3wd2RINQnOE#ixg&_DVLD#4xZo8Z~N#7V}%-j^m$d;|>{U5W2FTLup zy{v)qUhvBgHx}B-b_&w2lTvq42YjXX%L4XW;alIo>wV9C+brcadaiZqdwA{yF7>AlziQ`1*>uGV3R&~mzMA>Q@38*lw7f1phJVEu9hBGI3tNz% z;o;~37yJdAj59o!aAz`g28S?T;v0~UEF)s+djai~!|C!Mc8A2zR`TwP{;T;lKCRJ9?{RCt_u7z*^Hf~oCTF!RyJ1udrh@Qq5er!$kgi<OVKlP)NLz`)_tv{NRV2w6GZy-ukq7UY zb?-CP4{$etZ%4zo*jrUU6W{uy64@LOnM0EQ=;W2okIH5=p`mSl=OF_ z7n$@h(k0OgOgcz&nq)(5YWzxe*pAkLXq(_iGGg@NOBT1hXJ;kI) zkv=;*)1(g|eNJ?SNslIdZuA6`9%JHdHCDVaH}z+Bt{QBA@#pwy66Y)X@YzUa1!C!p zvu!4A_h;I@g{*y*4{TfP*1_cO}Fo5XI}wf*g9BzV*MqWZ?r zb8r1xT-|WH_FR=3ZnKw_06ixrKU_)Y$0VDObive*^uvcuMH*2{K75s zW6Egl($-Vby)|gtRXyA2tJ=DhGUcq9BQJ!HDG^|8{&L?;<4{MIS_}lyMH>@@8Yn;;PB}c_<4oHvl2LL1c!o+`lm<^ytmNRM~9r& zz1E-TkJsm;=#SzwY@bi>-s-b>SD(Eyhf>A?zvccwy~bhVkXdYFOVlOY97LIRaMvF% z&(glZOP15}xBcKn`nktfO)g#xescGZA3JYz?&GL4yBE$47`)6&n;E?<_Y8286}tx9 zlnXakCUC^2`&Ewd8A;yQeiK`V{|Mini<`5%x5jgf9++IFoih0b zH$x2HPK@UqC0#;gPBwg%5qpy|4!l=B)0Uanov6nv^LNU$C-GGSJhh(RRUZEEKR*lp zh@awaN~_1Io#2t4EXy--Jj%;|@sJ1F1CbLoW;?+x=ct~`gA!l{Z z`oi}6ePoYh*QLPx2(W0)Q+(M}JIBTcO-jg+8s<0YbzUsjuZT144_8UiK)A~P_D$hB zySw(2fpFb82wb5<_7B(9z}0^oo|l2H$$D$2Y%q6DsGJXv(AQAC({di)pwG6HQ$})1 z<6!v@tPU*w{s??9tVK=Ab27RbS##63^10|+>A(5l&Hs^w-HfTxigApT9vX!QxMv`T z_o`cZa255I!|!48)5y!dda$@fdjqR(CJ9he$ul(wDnTHw4TIR&<-pz_=GJ4u!M>h#pAt`MaKJeJH)-Ku;(L8@Fobo*AAtky zi%iz3(xJ23s(_!R7wQ~}@Bh&Ds!KC)#qMF`P_nWcnP~q->3T+1AhF;#hjNn z)>*)~FI#@4{dU6Jl}{Z+`&(Y^3*Wr4?85-Z6Z++E&54vM7TM4hTt9g+d$4K4|OFK>$uphmGlGH znJ=0h?vwf}aVa`~$ei7m9$_!d`X=F>@qk`p(}U?U-kB(>FNgY`Vl0Gagcc_Y_N)-yBBI6F+e>(Bn}mveG%xMrZUKgNg69V(E}d=rbECV<>MOvS__fC zpqlcm$xKeBpNE(E{qQ3G+w!*r{)^#{i3i#JG3r}T@BcUPzM}vc!~0QooTUw>ldSlf&2m*_0;^TF|8c#;lc=4J4d4W51mp0>+pOh0D)fcvSCe_1Kr(}b^J1%8vE&NT5_ z#-?z~YJXNWhEv&^^?l)-c(C=i_s7o)#>B$@_>ruDZzlBPDQvI|`Fa$iyXLQn`h}-i z6D)qTCM!Ix`Ag!x@U)Tl|MOdW$C>2yV7O|>@5?&5q3MGEg0~=e+fKQu#D60z%Jf~M zKVyZ~*yp+5$v5(E#_?n)W5pYOUsnh5Ho{TfCguyixA<~e29sYSu{HCNJNTl+fAK2D zRpD4iXU)V}k6cvgA8fzUz&&KbmGpw9kH_}LK1e>=xEudt*F1qvJJd1!dh;FVA-Y2f z-t{YP-c1*P&%gW;InHy0e#&pPTziH1Z^Pb@O{>26mY<9r+W6|%GoFX6 z!LQ{$SCn(UC(jKg#)cTQTHc`y=%kpA+fFNgJDrG8$tC@?AUYS84;9w^_3N zEZPc_r}ozYXXb_AmT%Yat@4~pSa0Be6L5rxzty|@y?3|q4!jmIenLO?nR3B{U0h!R zu6dWa-YrAjp#{E{2;Wi$^x zPq|jn6_^x9lNq;l)~i0j`)}?!qwLj`3yyYPF>Bs&CvNOJ`rSj_imCD9Ft-0|Y;UYg zhnX`JE7Nz6l;q-(qx<@|#RIx4Htg{jv1j|^F?>^f?k!H9Ydsl}fsFV988HjFt+91r zD!NpTbF^R*&-zT9UBVZh@8rE<;%nfwDd={prw%`TA-*4dU+nzC>=%>_)tX$GKJR5r zgpKY(d@Z()13H1XVDXUpV2%@ijlEIrtS9^qI2xG4mpzz}0h(*)O|fev8y@JJ zKWj2P{;=`cgzM^nH79RGNkVLgbdOADI8p@ zb;f(cX8)d<+aI)Ysh2<768u@reR0%P@9BJduCn))3Kz@I=R6vCvF;+XmNi9k<~hk2 z?yU7>jz7%Z$>c>+x}Q|Jpx>F24sV1Wql|yMeVO z@7)sU{xtQUPRy)qrewdod{n}5<+B#Y+J6&t?`G9L9No_vLhmUoHt{m+f|n+q>*&{n zQ;*v@r(ho9@_{E;%CJ@@zcMhZ%h)(Vs@jdo=Rwyn}!_LOa3n z%wO!6DxlB0KPWFHyaT+J<@xe=wDVn_Z}g60{{MQCxl3rX#?K2S`?CMSb2#aH$pxKv zoaY;|16zRa{N}rqOA_BHoh)lKmpSYU)_f#*#5efOny=mBOm8nc#MtLri@J$;HTlO| zX|K{#*mTJKuRJ6*S}6Q*Hs^5gqw)X!oy?2y%>$|nnV%MCoRRON z{hkGbukC4#A^Ch>(X;apEk>Z5#tpOM~X()OO* z4a{Gaz(f((EJMC#n%z1ds;a%Lj0?-sJK$?d)abj&N;%h z$`v5v*J7_o|0`ttnD;+Uy!REMC+4zmfxYV*6P|n)pSDAjWPTHWy}^EA@c}`Rh7W#e z@M8JE`*z6!>+9A&n8D)FWpnhugSN22lcnRkwO%KE=H_$cAMQ4LiaOS6ZH{<2=6m^w zIk#d`J9)^G`c!ltczd$aT8~)7cX>{Bwfwsn%FPYSJBJ7xcW#JzP~RZaJ}J%9nWl45{Z*d3T) zVk=@7h=JXS0VcNCEtr5}V+VG3H<;M1VDVn-97fOW9pC5o*L(cnn%%Q!*0t8!vuDp3 z^z5I${WZp(Cl=^?&5612*^*%gH<)ECU{GEvhBu12D z4mkySHDi4s?dpc_OIR<*&!>#=6NbEXmhGfHn!Uv zze9P;esXVr>j%sAGjpzA_J7vz@)KKTe4ePsyVkn&f33s#D8~M;7wAJ`s#Au(u?oXk#23Sgs>+uT4c`8~OmY`+qj{Z-{nApUo)4 z>s-_4Gsp9-u&k4L%S`hi*HMk#6EAQr`V}VnG)G@J?qpxyKQ;ere_P3~;`$>h{`_0J zwtiPjJRW%joivmw<#d>|lxeWxK8$Ti+MmeWoZUFrpZPIdCuREx^Mk2FLbx}4i6KUo zYp+Qz6DKK?KbTEAEH;-f0|FR_XRKL>*a6S+THkUS`gvP@;{6_6819?%iEcc=R}SGi z?h>ab=X0vbbz~hLX_veg?4YcANF6KABgcNEd=2`aJjRsNqy84PThMR42;-O^0kzNx zzL7X=dI1PX1>7;Mx0Ed77y*27lC=XAg8%+8`vxDZrQy65kls5nnoelDPb@ z-`47FHi@)ja%|9wjF}(QG}^!1v`3~`WtdYjF|dp=9<(ikzOkRe=9&>(n4ZsaZ<4*_ zP5gQw?-V3YuHMEu4P0rD^Q4Z%Zo0y>S!l-0E2?QbYZ>`43u8vCq|Lhee}5YoKSbA6 zjs(i_QYCB&{b>`e+{<5-_d?R<>OX-vZLXPNOk}aennA0)mv z+tC+U&MVt9seZgu_jdAOKk~`3A#tNs$RPBe^J9;Q$4D!5k2Z-*&G>#v_)SWVE##SY z2!2Jlsf@qkxo%b!k@WMgl)PLH$+!20zIl_V2RY9t+J0Zdw81t+!9V?~c zL;H0C>qF(eC+oydWfET?%WSuz9AY@ups(iUZbnb>N@S#^>>|mz{H>5en_2)&Ph4g;{VrE4nr6h#nhfyD!x6To`iR?D>jso zjOk-qMp050_)uLIjgrggEbFE2blE+YzNXxl_VsdY(`z|%A7VR)lLxt8C^1B+bFkOE zICLu~_KIiFjieR%m9p#GCpnJfm|mp+sgD@8;BRq=BJN%)=S;=;|0d_q`D)$A7=tKf zoM%K?8vBC%YClbfy`a5#4EjM{ezlQWT8ck5&JntT^`7`rxhLI*`e*#8pHp008@ZKl zD$Fcpye$>tCVm(h#_=^shbA*1F?pHf^XhLB3bg!P&qh1>*VxsZ@(iaOWvskz$$6Ht z|MQ)Op2tx1i+fHCqutP+^4ZqVEFzRXWybF$ts}Giy05>!Yo!ku{emp8(ZA<7aKeYU zHch@i`{cf589a2~vRS%snU&Y?dyr?_f9_jm9OulSi`0p$_#4_o40Fud8o$YrzG2O% zTX`-u^exNjo;aZ6@4N@GP2NTN@J`Usw~Xyl#?sa($JRdY&K&DvK%Atx@G%f71CU`v;3@{`!LrW4q2Sc(i!YXd?WW^X{ZAyvotRv zsDoJSlYEyOgOvA?&u7r5lX*O7J0C_rv_zTPbPoN({;54#^eo=sgMZKQY-i|yW*4~w zdx9U{Cb8@m(#HNEc9EM&V|RHTGS2%PN-QhOQcf=mAZh8ZJ_ZFshk^eLKyt*39OwAKApAFFdQj%8iqyQp03fd<<=(yA0d18|7cGfxWL`?Ca}u$Sfom zy5V0JyC>sq8s6DhM~<0ZGhqdF>Q_?qg#HXXSKq?Mi(dJ&PWJW1m-`f@UkCTLoPLC* zxvtL|4>up!m3Ro9FwXJeqIQv|S@P~vVis4*T+XS>LEcr!_Nu%GurUi-WW}@DPr1e&_Kz{xXM8njZ1uJv^2&P$8#AP|gNR-o>4mQSw8Xv} zzd4m>j|1%QZ{8?E@|%nMF!J_SJvObEc*@plny2C0X~nrs?@#Qaxx0LaX!Jn`Id?42 znNokglRYC=$+AhAj>E=C-y$>Tx)J6rr4B85cBU^F&jAS?EO_=xfi3_2JRoCB>#-)~ zT2AtOkjH4-v0F0>9LyXdxB#i;`%e|&uISs__~-oja3i*-3vB=kU`NL1^doJ` zPc!yI9}ImQC7)$j);6ma`^FgJB)<9owca7pUCxobKL4-vDx?DI-HD|R$J-m)Gagkp zUSImONIe#TL3ebp`j?D-2E!;oI=uTf4S@Y`^`Qv?& z_iOB@?CYMqZx4KdGwbP>|Cjd^f7*M|1KrnK&Z+s3b~VOs@Jb`!gmGS;yS;s@dAJ=k z@F6_^*6k_e*>w4z7}fpfjcs|xK0v1T=F7bas|T{Uzl$y@tlA{!#oFM{x0~GGpVua7}!4=|AhJH$K(0j>7(-j*MkttfK}d zbtL@!)BXPUSi!%)OFxn1V0bqxb_ie5Pv#D+il2Fgv^29SDDNo5Uu3lncC_^|3$e2e zUc`7O1swv-Lc(F4Hg3knHa?r}U0{6oD9d6ORxcu+=YEaL_K{&MhoUpaW$EMO5cz{+ z6zdkQFms!|#>`Fhv0!p}FvgR&A#UM(v9cfas_lf;SBGEk9?dAP9|8Y9PH+a^%kfP( zHrfgs{nu~w#g>JCF_wY!%jLa*q3@bJ8|n7Sh|j;T6_;Dvq~G70Cv>3At-7(z?L%^V ztN!+1`YXV)cd(0bY^CKcD)9q;L&mfWB%Z>4ZwuUh_eC~KMIg8QO$(T+ja?sw- z{Y*+eUmql6R3s|a%XUlp@*nV`J%PDWlG3Wg14$Jl4kT5GNGioX#B08(DF3l$QL%?r zNOkJLN9NQaZM6N?ks7{>XhO~Ei1NPd>xS(bgmax)G)ZDV6Oj&HZTLhV%PFQtfA zut7=85#h@GBZ1^$GGi`V67Sn7`zbPageT+v8;<9gd>k9YybFeFViPjT`IDD@eFDAa z$n|Beh2%WVlt}&JoJ@#s}@V7xv4{va`&uW6?HY1>?BOx;z{gD045! zdHkdgv|VIF*2VIjv0+_x`3~RgVq=bVXI(HcYs$>D7xB&P0Y(3P+JOkP-=*MrEDhzI zcApB7HWVpOsgL*+s*G>)_212x*y4AY-C9VwvK%DiV{rWra$R9Z^1^k~%63^Mt;;=u zbuq#d`xx$%vMwO^#X8ZS6%zv@8dBH9SEXm8Gjq`y`R1$xd6Hw&vTxYffQarrk_>et z^C$G|*1dfClDq)~!MpJLFKC=^N>tj&puM z7j=0k-p$4>uNjeoan5Yh~-6 z$Tx?ZeOR{I=k8WOzDM1s+$J&Cqt&kDcga$;)BNP0CKjS6ac`1V0&*Kh~uDgbyi0ne#wwujsUt z?qGr^h)Lju$DCQFvOwrnMe;#t{cs~H}#{RDdoDMTu+#%zm7dNXx4qC z_}IJ1JM`@_jzg7}F}VMEEGp?oroV5HajA6N8GIqx##uNfT;iHCABbF6#~5 zzpWGZB>sELUEYykn`q}VeCH|aHnPsCCGC9J30Ynz%e?yuRQ5*t;0xd#Ext=@UI@FnxabMrk1TA@|;iedEZx z_%CTIko%DJ?sATdYBQXA^W414DK+DLl9vAJ;#-5cULF3*^L;@|t}C&jv?XW42g*6Z zEm|A;K~FmL+Xv;!FFpw08SvLJtG;%v&$w0f@I@&M?UaT(c2=7e`FC=k{7-QutYEYn;V}aojUM-jk4Ey;i1fsuY~b0z7lM1X;QVs0=+i92+{b)FCS@G<(Cp$jX&Y zvi)T8c>@_oR+f*-GS^ou-;#Zj%YHrimbSN0u9=AMkmq%5EYAbHf201oRWoywZzV+6 z{jK@NMAEvvvFS24#xur=miloQ^f7BOc_Y&0w|%&x8&< zV`SxnV~aSuryh<|0d1MLsge|!fIH+OWvKPjnnIJQT&O<_N&H_I?7;PCYOh# z$NWQibfP?5spm$Nh3JSQ%dv;Chs62{8-V_m5xtjv{ApWCOIdkhhot-$Pi=QX&;mE3Gi2jv4`dTknAh%Ul(9P?$I4 zXa0WXkvzp!l=dFm$o}X~ApK$EETo-}apJk()2xeSY!~C0EX>o(vX3mIYqHNn+0HvZ zW4{sG$TPB?<*@297CLkM5@&{zmN}Vju#I@L}tF-b+QaI%9FqO19|JRHDMNx;mU5JGI6?U}A}#q? z!+LjgX%Mzs$|jevf7ZyMEK8hom1X(fU6y_EZ5LU-FJqD81Ed@z4wSS!_tdBSnFs7$ z9hT)<@tlvwJg#LM8OFH|ajda^jOX6Za?E$bIDnVJ`BtWY&LeS*d@CXOm$BO|d{c+W z`9;@*q>j-wV_7k0#MC51-;z*tMass9vD>A8iKHdoEjf~F7~^F5mOU}J8g|6jJ#qb) zpYtVc>#GtE-c4_?A=3UXF{ul3B-fF9@Ohn7<{UaHY3WlYdL-i&@=d6{j5Xy~$!LF8 zSGG@XceRf6#W$L>-#GdtwP6kxOUmIr`(L4->0j-Qv7JZWLlc3K~J3Fh9# zw)kUP#Foi>gh1+P>UCqC2VK+SzMBsdTV=do;}~hY&;RFnWZ>%G=BG-a{Zrn<$on;e z{ptC;-N`1jT7=>mde0Q2E-aM1QAfnZUQQOOUm3;&5`7X57S4lrbk8-n3VC)my`ha( z_Az6uAK6Fhuq68!>X3b8U7ESDF7_k2zRh2uk8E>gKPd~Irwht{V^|h@A!&TZrB56u z`mgI+`m|*~PkkrbfDv=pPTHA#np1vKj=$QcI{#*0{N;bOPj#W*q>e1fm(+*&V9UnF zzRdsTLniWk;7;C5eMoogm*hd(%tW{KJSuirV;6NCSfeB*x;C&8(nheh=8G4~~7UxX%qTO#Y;%DS>DQLzr)@JjmzTf_TO zd1ou3hL?(cyRt?I{)Q0^f7ewUbtU!uPv3cLqd$@E^YH+^ zQN$HNoUhTj-@5RtZwJ2SVpL zq8sPcEH0e=cNTTOxCqbR`8Vp?U*|%YK)(OI|LpHJ6#rT}U)dAvxwlURc^{4sP#LQw zkhg8&m%9jmeS>EC8XC5i+#I^*Umy1!xpAE;^MXDL@3AA->JCTOtkm4uv zb8JkC@?{y9fn$k3IM$s$VxnUXtCit<6B*yxj_0T5sa15m#Ll#veNIKXJNnG`aQ>+r z%H3#Z^jnH!Wgi(g+8lk8bIP|s>DwFiNtSna;QLR@P_Hq5qI=v=%cS{z3&^)LwvkOa zk8wO2`m*6?gkkYZD^nZ&Qp&O!e)*-KWWRKzVW3wu;|+;V6Md5N9OFDXE-FyzcYVb1 ztZdY$e;(JF_O(lL9%HOx6FFb%nYkZ~dSMfp$Z{)OZcjA$1FbWAU{)EvqqmE6 z#2?e%)$cU1gT$T^U+ev(JT|d!DE(BvB#%>_f&G(+L+WC?rLTvKIVtPJ_qSlq4NI=a zcLOitct;^^pTbqbEMwnfdCw_xK)mIh-oNRUZkIbz>bFk)zm7@m!}WZK+rs7<{a`FM zM(j&}SP7+V?Bjy;jfE%4+ii5*7`I6Ku}x$*_6an67iWBTQ-Nj0vgn!VnA9CuFEN~) zTjI+HhnX9c>xN=K@09r8#-zT&`(JrJi2si5S$E4m$9f%{vHYq38$@URa4*35v=#xCRiLMgA8OEPJ!Fu%e{~VLLAm@<#nMzs4a(}zYujm`! z2LBq9I>O~QFA_`0wN3k)nvO}`)Sz?!Jr=dAv(~vBhCa%~(-#VuW%()SET>F~I0AnsJ;v>xesOXZ`zF)J2Hxf<@Q=7>hcH^%A%I ztq(r;XuJTyEoY>Lacxwmp{Rv%)4m zvg1di4)MIZP1YZ0JvwJd$5BU;PiLNWWm}w|3faqYC^k}bbhqR?t)k6Rh3q0N_E2I% z#XTG$uVN=c6Pfo1-zxiTU>`$&K+;j9=A7wYr59Iz)o=fc`D|=%Sxhubl_|pOODIKTt8QC)*A40~z8-<9rQre^U2j$Zx0@<3MpuJ&(`fW5)Z;yWj4Y z|B;wYo(pR93-sE+eTwe%=h*zBm(~BfpMLmP`(NLW|I-{kN2wcP_0n-;jlQ6&=m5*& zv&1jVo5^PgNQonM3J%>*Q?oap> zyFat(|Jxisvm_7b*~enoR@$XpC~s}Mp1raE-G|~o=J0vIv2uNB135vPrS!csu=CJZ z-V#5_96t3M(I4&qn8PRNB;#&Kf8c+Z!)G|#0(n1SI)~55qUg2wTk7@{cHYoOmh?%| z#(FZg!>r-jVz+zod?Nl>*z>17N#a$R!)F?87I5w*&(ktjPY5;{ zAGt|2q}H)o{MALSGI3>DN3_){%=i&If&!{VL-tr*lpFU-S6bM-Js4rF_uWZ4XKr{h+i_ z&Ehy`dER8+I43jv7Y7Y(o5nd?WKQZ^l%<^4aJ^si_%MbcvE)9sxue562JXeO)JGsb z$ZV`d$X@9;sFx|SuyUw}0zmP;$)u zZ~j5fBXt{0-OBq+JI*uHOwG*1Gm|oRx@JgcFiB@INyFQ(eS|T+e@>IMi%FV(HNW=Z zo`0pQn540fzt-0>N!K+=^9=TDAME9?baRt*Ym;<)lXORubQhB}&wIbl)7vE7-y}WQ zBt6_D&3o%#$Br>cPcTVOHc3x6NzXD#&ofCcGD$BpNv|+TuQ5qSnxr?Fq_>!)x0|GQ zo22)fqz{>-kC~)TnWWE|q%WDIubHH8nWXQTq#u~1pO~bdo1|Zxq~DvQKbxe#nxuc4 zq|H5k*F`FmbQ+U%29tCaleD8rI;Tn6#U!22Bwf%XUDPC9(j;BhBwfKIUBx6_%_LpR zBwg1e-OwcMWs+`gl5TC1Zf}zAXp-(?lJ0Jj?roCpZ;~Etk{)i79%YgqW0Ia=lAdgm zo^Fz!Ws;s}l3rwzUS^VBVUk{Bl8!V9*wGD#mZNuM%FpEF5c zGD%-EN#8O_-!n-+FiAf#Nk2D9zcxv~H%WgsNq;q_6+binXk#=;S*D%(*PkrwUlPCX z{OSGiA?mEG;P=xgl4M`mt_Dp`*QJkTN=wVkcGG)U`dM09W-nw}3{ldrN1s6fT>_Mq z11~r77b&i?q|Z!9l{E)P<;tV-7cNnze5KyXqh?c9OnVg_`sLWBDsoO5@_*$sK;N}VN7*(`zC z76(4KU-`j{v-w`+Z`dvWmeFUo40^tNkX4p!R%3H48(X;Lz`~BDi#ld2TO?cWJ6n3U z-uAk6Xq#`LUaLNPRUF));qr@uA7ec0X6T2gbP1NI7}Ntg2D7mgd^K zw0vLB@}J(N__WvW{@(3F4sO4-anP+?)%9J$dhaVX}TsqL}(%GQ;XVW>@ zq_fUf#`@*qVlO-FkLxhM%!>Ing3r{jFY0E0WOj=qYn#1aJL>zGQI&_+uH5Ow`cCb3 zKW&$_WTC7Bp3EKK6BFtalyyN+qh%Kx-B~&Mj!TU$E(N_u6`Wad-OS*$V}ol=Jyq-V z@dB@R_PD&$#Ugjz8!nJVrl({|^hwuhFtJ9K$p@5}3}zgge$$eNBJZs8$wORSpv=yJJ7!`@FB_VjAW zrzfUVKT)oCt8%?=?dUblZ0fYDn>$@?xa3m9h&r(mJ#TF5*?j%i<{v+#{`mZS-shc9 zZR|Y!!*k-LMgN2gWZM=u{<_Q@we2>+SQsvu{fJ2~#F#96z~l?99GZMpUa3-S0?rmot%F zJZIkUv`CfG;`0}?&l$33$>4ivrEi(;9m=%Wkl12Zw+p)_*oRCwxUl8H92N5CSeAd+ zvbdY&;}Tw2CoCwmbwOsAQklD5+SBc3MBkg!Q%{;cr_|axi;HYuoU@Wk&WX0OCO$jq z{OsJsI_H{2CN*f!gNTFjUl)+!-vl2zcO^p5uF4|KkD;K}t8PpXYOR?Yvy zPJfRvhdmY+*tD=n>mfxl=FFUNQ^4s>-r?W9_w>59$F6V%JMi}d{}JFn1pEWQ|2_Ek z0RKMVe-!+SgTER0cLo1K;Qtf+uY>LLo{9A#4ZSa2!{!!q6 z1^icl|3>g%0{*MOzd!iLfd3Bg{{jB9!9O4Pmj(Z-;Qs~u&wzhv@Lvu7kHP;P`1b?< z8{l68{B6NM1^6Ea|J>kz82lZ;e;)X!1ph_gpBntLfPWzPKLGz1;GZA-w}Ag3@V5g0 zvEW}A{2jqR8~FDI|JL9i3jSW;UlIJTf&W(UF97}z!M_;zj|2av;BVj`{9l2;Gx&c8 z|IOgv2K>8&|7q~w5B_f8Ul;uAgMUl#KM(#F!2b>SM}q%1@UIU34Zyz?_>Twwn&6)Z z{^sC68vGlBe;D z{&~Q^E%+Y-|I6UN9{f9ke+c-`1^-9jKMeezg8vEdF9-g;z<(O}Uj_e$;2#10J;A>@ z_w*71 z@Sg(ylfl0)_*Vh{Xz=d>{+{4(0sf!CKLhytf`1wCZvp53N|4rcU4gPz;-wynbfqw${zXt!$;GYEk*TDZC_=kYM5BQsd z|2gn)4*pNUKN|cSfd5PIp8@_(;6Dlczk>f8@ZSRd)4~56_QC-{0oA=CHT(; z|61U`6#R>We>w0^1OCOpKLhyZ0sm~^e;@qMf`3Es9}WJ`!9NT5=K%kf;9na2%Yy$M z@ZSdhZNPsO_zwpE9pFC_{Jp^cF8H?xe{1kx1OB_j|AYTQ@OKCQhu}X9{I`Su74V-1 z{$0VpKlsl9{{`T`3H--{{~qu^3jU42{}uR80RKhc-v#_Lga2gke+K?3!2c)shl2l5 z@XrhW^}v4x__qW9K=4lq{#C(07x?!D|99Z;2mV9AeRV!2baF2Z6r> z_~!%v!{EOk{L6rUF!&b*|JmT*4E(=?|8Vd>0sgzeza;oS0sk2A&kFv_z<(w9*8qQS z@UIB|X~BOg_#X%V9^mf^{%gU1FZkPme-!xN2LDdrKM?$Fz<(C_rvraa@ZSmk%fWvi z_*V!2BjE1_{w2WwGWfp-|Eu6X1^j!1|1I!01OLt7zXbg2fd38fUl0Bt!2dk>p924n z;9nd3Gl72}@P7;bb-}+a_?HL&7T`Ys{O5!JY48sN|9J4P0{-*B-xvJTgMUWwj|Kk` z;NK7Y&w&3-@J|K)U%)>*_#XoQ?%=-x{JVj_J@_vK{|exrAN+5E{|oRh1pY4Ie+m2} zz&|zkmjeGH;9m*+ZNdK}_)i4?NbqkA{;R>?0{mNnzZLj9f`4c5zYhN6!2bgHj{*Mz z;NKejbAo>W_=kgkFYqr6{;R=%9QZE;|7qZ#9{l%#|7P&_2LHz3Zvp-h;6D=lvx0v| z@P7jSi@?7o_%8*2ckrJG{O zz~2}A&w+mc_*Vh{e&9bJ{6B#|U8IQrc>n-^AMkeq{}bT<3jFtje=YF83I6rK{~q{X z0snaLuM7S?z`r2)KL&q0@IMOv*TKIT_|F0V^WdKe{8NE{5ct0Z{~F-G8~h)F{|E5@ z3H~wQKNj=Qe<=7b0RM~NKN|eIfd44)UkCnU!T%Ka z7Xbgu;9m*+hk^eC@XrDMgTcQd_%{dthTxwQ{BMJQ8u0H4{*S=F9r*VK|2N>j2K>Xp ze--$b1OF-DUlRPQgMTaV-vRzp!M_vuUjqMF@ZSdhU%@{$_~!-xjo?2W{GWlp1NdJB z|6uU%1OENNKM(l71OMaT-vs<~gZ~KdUjqKQ!2d4z-vR##;6EPxXM%q<@IM0nk>Gy= z{8NIz8Te-b|CQk10sIre{{r}jfPYKy&kz2)z`s2BTZ8{r@Gk}ad%(Xh_)h}=wcx)U z{9V9*7Wg}Ze;x2o0{@}lKOFpLfPVt`2ZFyn_}>Em65xLf{C9%?VesDs{zJe&Gx(nd z|L@>`4g4#hw$fA}O(4?rVaZ=6{+#)9=P!`IZ2XmNy!K<0rky=T9bRScIIn&F3a5Ll ztN5DzUS~_`ak z%6)mjx(DX<`nQEWvn*hWX^Gn z3#QcA34vCguL_l1-#2s4hW%Uj{FapANAvRIGv>Uyp>lq=B4s<>%$O$EnzsHIz1u9V zP_%5G&0W)^%lNd#>`U`rZ(A0!I9sEmF@Y9ey9;0c@EN^wc|Nl*dq4GWd$eMg z8l^{lYcse&^(l9bMqMrtyB&++F5dJ7+#NZe*Ui;}a_Hxs@-9;KlMcf37$+wQSle3(g09TH|_e`09MqcidWaAgb!4r4~wXhsW#>Y`1*G>Pb?h<@vq2p2XX}xw-i1?sH}P z)V*T0{Q0#Jn+j~)vZ_Rh+*Jz}pR@W{OqUg9%I$49aLuVP-#1;D8EboEZK=8oQoQ?e z>!nAA#%D(t`y66F?OKDu4K}^0?%g2r%>5Me9zBe{xGY<6_xd}X3LhNZq;stl&)Y9; zS7xf&fPoXg7WGK`t#yvBTfHvbo>i)Orf1f*ul1VhdwtRHbYbPD+a$D_RLT0q>--Vt z%AEAw@#=B*xJsLA4{vq<(vqqJ-ZvX|&c@+Dx#I(#pZ(IbP2`UbHhn7JpK!az(4Y?+ zPgObMzpHTRJmovMuRPTMa1Oh4c^~YZQm2xu$K3Qu{mjDM?rlwHx#ZEd8#50!@8mn~ zbU@$jC9e)_+tagJi=7w1zcKhX1^>g~KM(v*ga145UkCoP!M_>!e+K^$@XrhW-@*Sn z_y>aj4Dhc5{$0U;0rMeg8y9be*yltz`qFiUk3jI;9mp$yMzBw z@b3Zscfo%<_}hbj7x3Q({tnrj{I7z)6ZlUC|E1s` z3jQU*e-QY)fqx|Urvm>b;GYQomBD`l_}2peXz))7{(Znd3H#uMhrv!2bvMF9-j< z;C~eSON0Ml@V^88{^0Ki{-?k{6ZpG>zccuc1pfr^&kX*(z`q{&e*piN;C})9dxHN$ z@c#<_F5rIz{2jsn2Kc`L|Ks3)5d43Fe_8N95B{#;pAY<3f&U}$PY?c!!M`K;9|He) z@NWTbp2=Lzu{uRN0E%^5a{{Zl}0{@TTZwCJ1;NKbiM}fa3_&)*vo8W&A z{I7ujHSpgE{w2V_IQYkae>w191OA)9-xmDqg8vur&j9|#z<(O}HvoTc@V^iK55Yeh z`0oV&(cqr~{M&*50Prsg{;k2^3;augzcu(z1^?mTKOOuhf&XjpF9ZIsz`qjsw*vpF z;6Duf4}kx3@NWbDHsC)2{DZ*13iuZW{|?~aANk(3i$T}|3=^+ z1^(;7zXJHz1^*J@Ukdz3gZ~il-vIuh;9m&*{lWhS`1b_=1n|EM{^sC61N_&4zbp73 z0{;N;w*>!*;J+IDyMzB2@XrqZ+ra-l_&)&ukKn%_{5yjGPw;OF{>{KY4*Xw$|4Ze-$ z{GGwS9{4+g|8DRv2>!9)Zx82u{#M{W0{pjt ze{S%f1O8pWe=qo-0{;u(e*^p%fd4Jf{AYmwEb#9I{$Aj}AN&V`e=PW)1ph-vj>u@E-vF^}yc={F{OQ3-FHy|D)hv4*Xrg z{{Z+~fWIC1p9lY8;GY`&yMg~L@J|W;rNMs<_!kBL58yu;{6B;LSn&4&|9;@#8~k&D z|6TB}0{&0H-y8gofPX6RZw&qmz<(e3yMzBt@Q(-oN#LIq{7-=Y2=K24{^Nvy@DBw4 zLg1en{9A*62Jjyb{u{u*2>53N|F+=Y2K>u{e;V*_0sgPSe=+#Sfd3uv9|Hbaz<)OQ zhl0Ng_-6xuEAXEJ{@cMnC-}bu|3Tot5d24jzZv-V2mdbM{|)@BgMV)De+B-Jz`q3e z`+@&_@IMCrb-{lR_$PvY0q|c2{#(F*0{9;U|E=KP7yRdd|18{qE-{)fT89r#}W|Eu7i7yQ?Q zzXSL$0so5NpAY<7f&U`#Zv_5x!9NN7_kzDI_&){zKH$F`{5OIBD)6rg{;R=%1^71v z|1sb{6a3eLe+uw_3I1onKLq?6fd3otj|BgD;C~VPyMupW@b3)%?ZJO4_)i4?wBX+r z{BMJQCh)%o{@1}j4Ez(o-x~ZQz~2}Avx9$a@V^B9@4?>&{EvhG7x4c9{*}SM2Ka9T ze}C}L1O6+)KL_|f0RKwhpC0_f!9N}NZv+44;C~wYOM-t-@ZafW)%|Mmva8DV(IDCYaF@v?6h~loRVt}<*xj?{@k?Hz8-F9Sv0JR>&-k{2De#J zr`ME=dHW}P?li%Ff!&o=ZO^ppynR;BzMhSLyxMiEy=|=)Yo{$8H}l3iHFfXhG+!RI zOu2Jw%~Tf(=bUk>YDV*e8~0h5Sx@d!AtbX$qpo+J&wqdZ+}mwW2FzPO(B)}Vneh)2 z%f)9Obia4)caHsX6gWDm&yJ26A|3W;``)}tyha^p>d~V|YW(=|szr+y zs!W+O>iP5MDqXsCYQu&N%EQA$<<6a3y?OIS_2|(<&7M75)vQ@lWzCvZtzNxa<;sqh7cZ{v+_|GVbm*Ykw{NeG9zCkkrcJ9H9Uax0HEUE{T%2-q zb5o~Iol;k?URAYg*H-P?wNsTVS5`M~-c)9M$eME$Z;$ z!zwyDS`8mQT!n;$s62V{D0=9q`1p7g9v-fIe0ksZ%F)>Cz>Y zDN`nO|RNQhoXIMGYD>Nbwp}O`beiSy))8Cr_TJTeog0E55p~TD7XW zd-txIGiQ#PIB}wC+qSJ5J9exxH#b*j&z@Cv>(*5>XUGI5jTM3h$Yqfv>e&y%qr-~LWs-8W2riKk0rq-@qtENt!s+KQbu6pRjpdJRKI@x)b8E8)s-t(RNlOK)w*@-RJCf=RB&*xTCrk& z>fgV=N}W2j+O=z!YSyfoN=QghuV24b>({SWY0{)oWy_XTb?Ven1q&8b{{H@|Ql(0& zeEIU~-Me>c)v8s>-Q8Wey1J^%moKY;fB>~;&mML1N|1bp8BZxhfB1h_)L_7>2_0oi>3I}Kc=0c$W&^#Z5}V7drMDS*fZfGPmbJ;2Ef zG$jFM39vK;l=ndL6F|-b$6>%24itF+A|4og0HGTYL;^r4${&W}cSPyEQTUuFdn}6H z2_?^jf{SXeM6m~<)RR%@Cn&QOihLI(o`?dEMS0JnxHD1O0VwQelyxbJdH^N$LP2k! zoF`DsV<=@13fTu`v_=vAP{L;@;98V#If}Ozr7M8KC8BJ_P_%6**-#WL70UG##p;Jr zT|uGNp-jOj(lnH)KMJ%9~ zf+7T>1Yf4jAgA7->fgbR5R{6o$DrM!7Nu*$iWR4MW@Hw=rlI7_(a#vZ@%dIT*0E7%y`SS6z%&DGXLujMWDW z)o6^=0}Rw+j8i@gQ#p)MMGVqBj8Q!d(SD3jQ4G*9jL%dIPj8IQbPUcXjLmio%@2%B zD-6s6j7xV6OD&AbZVXCZj7c>N$qJ0fR}4sMj7KvJ$7_s68Vp7qjDlITeu3cQdm_Kog z;`YVVOE}n@mag`D#iHR2X zDxs8^Z*h6zdcOmyTN*@lrs8&5 zpgy4#cL>OQp=zTs6(_-K1-CyH^}2*Q%p^;nsoK6aYin?MFoG>>IRB3N;*@#LOqi7$1+IUPyda!Cr6}%-nUV{2} zM(v)1*h5)z@i809F7_n0NR~j5Gk}QsDFhwd;a8 zY>B$e!(3GWbt_EETrkQ+@ejpx+`zO|!(5y})!(2}`M~ipCc_s~;)n`WMNKPW9>;*r zc1+-HRO1R}VgcqP9`iK?lVpxsy}(4I0qer3S`N&>CQL;iRCgLk2cs4lP|2(yJrR@K z5Hp+>b&5dM(xINiP^HXZK;H!A0vb+ow>yzTlsPi7yEP z-7sU8n6-|=KV~uyX67Pze8c?i2H97rdQDtO5b8Yue0qVvI84=Y)bKS})Wvik#vB&K ztQrmQxmXbxuaD<=Ir2(`h?&&T}y#5J_WjjYEkR>JJm$IMvZLdsw!K45lpW72lw zBHQ6IyMym6+~!qGS}sg>4a_iIu+%Zk&`8X>8<>v89~tYd4x$1!?nlajwfSM-r=6F z;SPsmcK2X99^%T}F?kFhrts%J4lzTE-_SC5?y0#`ZmgA0%VWo?9vhVyvQx|W_=)k> zea?Q&+`h7(ZJSG4rb|~molhl)o>~S3ybDO0{CS*~Wy)MB6CKw*P|F-S z2Ih$GR^gMDv9W7oo7TR&Rm1ipZ9;R%oW#8%N8v>T8y#Va8*lNTW{NNkAnNO95UqKkmcK7$7@-x+?{f( zU-X`(<>SX&9|ttQzD&#I%WEy4dNa4RmT%uaeS6vdM{X_a)-6-F`{+5&THdYsduX#7E(DLL-i<7BN%{Z@RfdZ=vG@Ir%Ld!I1T+=jmv1zU4=FLAh$2A(= zSj*7R-J#ta+nv<1M~}@tM&G(-qviPVMaQ>YXMa=6ef!Ss3mVY1l9uh-b!&I2^zIp2 zX3FHADX_8gOf5ft{POXG#V5L68s+KJX;0h5Ou4INl`08UUL6~8S<93uZBn{sPE$n7 zu3dw=Iz2fzRLe(?c03x;^y+*q^XFfZKkuG~=307qWc4W7a?AiNr%bV%Qg~_FwOX!S zyJl?@v!pf!sZ$wG$}D&7^;))WJ*f5bV%s)pId*K>u|1=+z0tB%sWYXQtrcGZrJ*zvim6p$* zjeVA_`}y};X3SVA3xs=pqVALOiH?)v@Xv>Z!L!p|1|u|jE~c_oH=v& z%#Y72cha&$2j32ds_b8?rL%LObB<8=%3AvS@AL0^^+HB19Uc80FZ3^cO3Mu!#%#!1 z*kgy5+qOO5cC!7Tky?6tH}GDRHT;~Gvu6*U{qk|e(OSB=1iPeF%Dxy+XUd;aXZ+I$OHCX7beX z@Zmy-o5wGntL4j=^Iw(+Rup1u3Bcx)-&6UA!QG186EvP`e2(O1GU_^al*#T1*-4Y zvU~UF?nCZh$)RQA#_byKP9OSQ%bGQncAVR>+?ONGw7ha<$d%VCqbq0`9=<5NK*S&kG^H*w_H}9OhWj5E%q-CpC!&<#}-m*^1apMY(^WI>4LCgOAulC=u_R&!- z-P|6zUA^1?rIz*U7pdRccY&Rj?b~;5f2!i%Ia&@K`eW$R@o$%FS-yO1`MWpzKGt&T z)HG9VCZt@T<;9DB7msZ@V6Wxs)f-lOq;2s?%LflOKB(T{W|)?~z6*VeB^+v~<<_mA zx4x?xP)*BRxyI$PU0toTmP?k@T{7odUP~==<{X;yZI?=~wX9w}b9EQ53BFn$KVI?p z;P10HYx({A_3v8?(Q_$Trbv+~g|m%i9xax;ifXqhL^%siF1 zd1lqJV#Svgk6s`AQ_FSh=B+DHx!xiz&z*BRSLI^RTP-tZu8}#onae^gXUs@7Bi$s6 zv0654n73iw9!pYaxnswZ9T%Gn=%VF|7gJuO^*J4@Wu;1QEB!b#^q`hOK~;iA9B}%f z<(xU)=Un+&#$C%VU%q{Lk?uowEqCp@w=1k`9|tY1t?OGa=#X!UmW2y%Dm-#Y%O+Z0 zzTD&TwViuXYWei(o~J$9UY@FD@7}9>w>W*rP0J%k${p$bVQ!?B78dC&95SZLre*Wy zHJeYiUVlf+8a2|_aI6#DUdz#=<3`_K_A^w=h=^qoxym&P*0Ny1@PZA-cz4xu&z@_0 zHuvh0M$3Z-b04hrVEIHXn>KCIbcOkvcUs=L)8fvCDXaTynKo_Vv@P@7HPv$I(uPZy zT+VN%WzU{bJ!>DlQAo=YC61Js`>7)xkBxHRz_SA${ypC4Miv(>Uzt(3LW zRG(U3%k}FgueZuqbG4R}Cgq$|X@16NEp2QX+l1C|-KJ$++{(B%)$Z@s($21>-KK_x z*JxRxLVSg@mj-^(vRk)Z-TGX(luAo0t2|boMY4Ek*|+cAzH6gmuWPw|`-AN_z5Dgi z^1_9#7tZb2ms87EuV%lhIO_N{Ezg{>KU4Jf_y<~6t7coRV2g47S}s`7dcn3sMG9-V zYE|T_IvJY1($dv6)U{o3<3U=sZQHButr9yYXqk|3JYja#S3R_xFu`R)ja8WsY3Y#r zSp3ADW{t|Ox%6pRpAavfy^E)>OczilN9^@OMeF@+VLPPUUA`zbRH{IBh7HJ4o& zw%zzM96-`Nc{!C_+T_O&7lxnlD1G$bWya+F^!Wmlm;XGU;RPex{;&Nq|8YL|e>q>4 z|8c+Kf9w~SysY!1@2|uk`^h*Q^0WJ+T+05B`!P?K;ivD{c($aZKg-4MkNs4jamAne zb^0Io>-<0N$C%cJpU$6q^0F=uEte#(*ZJ4dpzv(d`$Z-1r_c9q_p#w$&Zp0#<;3I@ z>GSF9{#kEf$vf!nTK<{8g&q6$4d23>p^nl6fFJpY;cbOcD(f@3%hqYpQDsldi@aYy zM@bbh>HOH+T9R%I$`ms4JT@%PtXo}xumE*sB+RdS?OnH|dI zk~fTnRHg16N-KH$nAV0rM~BL)-cp}hT*S;gwX&CsNta=lypociE+6C4@BbSoC)1^| zOqIf1rL{^eLaE^HRr6f7Tsgkz{{eRW(_d#l>fH?P{w%Jyy8q%~89q;4nFwEoB zoAS4JZn`sUdIpCIK2tI*>se)T&P@l0*j~?Huf)Dv#WoK0Y3tMML*8aj=B#TL*>Qnq z3wN7%zwU0Qnr+Xtu3+i5XSSV-_sG0)f_K>LXZ=THwt2m^;NCud?T$ti`dq?cpk0-= z=W@=TxVY5rYa831&(kxgY02S3Cd_qR;5nn>#$EM#WQ#v=WOgpsE@!N6_=ZH}`sTBK zglEaXm%Iud_h$2;@z2b2=erY}t@DeZDwA>_T|e*ghd#YBx>fr)c1(@5MN>GBTUGb% ziEix|J1wi`e=OIcp3gq}E=kw*ZSduFmqMF#_b=vs!*y-Oc`HjbS=Te|o8FHq4!3Un zw&Lyu1;35T(fM82V6%;GRa%|u5}cv>n5+|CPu;e>PtC)t$Bo?IeoDm~gZjh{a6UMG zc@0PRHQf(3?-+TxVX7fj%l5zjGh1cz#ntj$zfjIIOPULppJ%+iIObiQll_~f4#>7J z@W!w!dB5C?|LoZK=fjHihi%^%+jIWzR52;GH;OoT#Amttp=E8``{n7Lbz`4z{?Sc) zR(Y|-&AQJ^uZm7hzV|9TxA@{3HG|Gr?Q6d=#f69af7C5?FSTpNE?esr&DtXTbWFy9 zCu+KNNPFq_x68Zs#SCkfrlgPKF%@=gSpUNAKl3i{dS<25w}fY_rzg0SynWwpP$kqpP%?{(W;zF1_~qo#{G z*G$;Hx6brSGv|M+ckBJ#xKg7|ukx_|)-nFrqjR@TIlnQhKcwu>Wuq=^b9z^(!L8eK z7lh2*&~JLw^U$ladtA6U{X%Ts;~R^$sWg4ZoI%sSJ@`DMQ=u&Hv+N8G&i*$2%+U5x zjj|t};UDtu{Kcq);aeSCiWM7TpJD&cB7>fXIhjw%cqa65{J=iZ*FLOwSomPlx!6YG z+jhiS{|KshWW>$zs7qZ|bg)Y~WNx6%fHSj)*f{3u>>TxE!q?~_pQ?EuKVN3)w{#oN zz6hOECE#*4k85>C<=jvtLtfQ>Yd_~b%HL&U?9LX8%XZ3>bC=cI93g(qBG=q+HL3c+ zp`)9&zPX~!Nav%w9-9yT|JZx;Xt=)TQM8+Gx=oGN=GLZ0o7&W-Mr%V5F~uAaGeHn@ zM9gzUL_|cy96>}7Q_NEYLCg^Z5%U!D9PyI-`&jF9zw5qr?|OgSyWV=Q{y4RFRqb81 z>zuRJS*L36BIS!H>QAw~$ zZr{~b!&Fp>LVYKB_*g!ay>c%JnkmqFZ~gOyUV4 za2I<10i7{ohbt^v1lN zuA+-mtokv1ky*?dW_Ot;AU+Mxvl<=*X|Kqy-(5dJMol`ZLhXjy?LTNRvu{Gi5fU25ekk1-NPM4A*3{nPmaYppp6Amz;m^l z9)9TlyJXD~)xMgd-Y^%@75HjUCZt^8`~h%tN}@gg+O4K2E;9#`XT>*R`JaE{Q?QdI zL7Re+Sa%D7YA(cW8*+@V#?(43BFjdsuowQc(PoX~w-jl=9qH>w*S)Lca&KRu%*-5R zn10>U5Z(K;K-kv0_~pX#f{uk#Rkw3ZT}^{1dHs5*k5_oovrP>h>*uVJJlJvIR}TR<~3SxS7$Z5aSG z;XHx~DrT$u##BmsB}kjw1fIuRUXsM%^Yt1pvy?px+E)Ay`>e)bgXL@B#V_js!nqbQXe|L$|`wg9tkLNp1W-?aVa4#E0!e+Wz8)fmPAb6yr#Hvs2ui$ zo$tzl6vp|blo(6OcRN$qN~A+2fR~8L3e%wE^gh9>{TAQs+(e(c@xJ zj*V|d{z}m)O{#i2JhgXQ9h>dA4sB?TN^K+^aC;L1is})s;9q-6lshwC)Id)>r}$Ki zzN0U&hXEN*L<>`#x>c{(GJLxUaMm1q*+O&kXF?8t?r(zLgOZqKvhNS7s=w^ry~pwS z^}3bJa9ZA-&nkkh%DBwmoV8KA?Wm`5bbM`yRO{GjWI`p`LH0k9^bHHF*l<2(W0s`)J% z*7>vhm>h-z5nl#qC^NaoTCN#bNes56k0!P@?AYVzh*Ea~(bg{nt@D(k{_XgTm)rG_Ba(Ltf_WXwUi^ec{p6TF#YO zwlr#2_eomgz>hM*PHy-S2Y%4h*s=wpZ#IZsG=4Pr>AgVry3VrEgsc%Dz&#N zjGl;HX>R)6K5uUt+K>_5a=3LAc*k1Dn$-GI#MxjOO7;NsR^7k%m-LvVt4f4tF~?R6 zF|^F;20)?7G~1u|?Q&z9$|YkPQM2a6Ju}_hv#A}~O`pBC#<-aFV@E@uhZSAMJHC~* znMFRn z)hr=3&~HWGbD$!Ql9wbtkf5$DKWN&5qO;R3)BbixA{A>{XI|!0!giu_oVRZZL`>9t z`%NZin*RAm&ef1UJ>U&G{gVi?f)7wf=Avsebi67pT3LU+&m6vEY_w68{|hpFPx0#qSc%S!O?{4|MVs<*hNxTx zxWTQZ&QXsKy0a#qn+2t1x;{=xNjx8;54U^#@Px+cJHT35=Cho9|NhCajDK4(n@GpC zOsBHzDl&O`%KYKOP3aA384u}35#F%oV0Mu&fgb>!u51r#)F0(=HI=)+t8|xk!4_+p z2Dm?I81l>e*wv=x@bd^}7&M)52}$8S`cY@#%4EG9M*mV>(K27k8_?X1rmfMFoaY82 zEN*v^T=tB1}WAc8r?i9e!fJ`@;T7E`haO;27>!e2Xkw30d|l{sFsC2SBc zL?ZuY^l8wmAmA6J{y_nepnLu3EL8gYof5CgFW0W@$6oV%gZaLg&+`53O_@geN%BU* zhvDU3Q@jAiar8()6dsTSw7O$#?Yp5y^Yrk+jp4ZwH!z~kZ7&vWlSA6LWe-MVuC?cy zK2lg`RjYzSw8k{l+ISF6p~}W?UXFWkOo7PedjiHCKBcB$VCpNxb(bYszu$tfBKf$+b&M_slz4<iw6C(E@bjuyeWd-#TYAR?4G)E8yZQ8?OiQd0n}6He+jhDK3Dh(` zrf`cTPe!jJ%OJy2NRP5|?~h7dmrFxZk);Tr0H|yhDgP{`GV48=X14q1a6G{yyqFWG zjbsHL@q6)?TO(|~5t5gL0_5u((dtsOarw#$(^Nhf{0Cw`ouCsh8u#ys;-zJ6czoMm+9h59(Z zFn4OR;IBo5=dUCf8u29ECVAmx?M3xxbNj-!!NNNF8|1CkR4(8-2mK*hm6xPFH16x) z@srOOo3fu>v0u3(A(4X0nt43@T}Uc>m}AE?j_5ljLmOyfR1Fx}e_UFt$hfR~Sq_dNy``T%=&QD?v6etNuK2 zr~SMwx~0B8P_`YXoGi^O6t{^fMTCUUuM zwn=^XXd55;jeQV9q6@k2)aye++4KqzPvVvy0B z#ksi|w5iWWRr%T82>!TtMP=oc%!VuF`St2OvYL&bvaYAs;*lFfGFC;kEm3UjHd? z{NKa>r`G@agGh-a6E#Txu4JJxSMdyco&EZ06v%9Hlj8oWr>P|wRZvALEb7(ld}s0g z+Xs_S$uW)xPrhG9+hly68{%Uf`suojJs}&v53&F1N8+v2`f204oAV5|x z1^R-R#j#k==d_J=7JO;#{LC(UKNMJ>+?1+DP)?vDRz3-iTv?v1Z<_>7KRgzF_=^G6 z^y!trJ#!6R*A~mPcTe@QAGPQ5;B%r4ES5G_ux!avB&2jg_i+yx#-LJQ!*=kN5=qsQq|-OJWr<=!GQR3m^OJ z?(_R#^u}%MrDs&(RfWppk0{wQ&6m1EnmU(vd5Z1^OZUb$!I0`T=VsSBv`5I_2@#E6 z_a?dpH*3y*W$3*z1PhhnLAr_u|_8{!J;KN*|%^?mIk* zj6HK14kB}B@0)%_-XG`Y76rW|y+;mTGc9E0+3J+?{$+n_Rm@eprz;v85jAy^p&gRj z60;m|Q<8MUVoIJ&NMXMs_s%OfLHH3t?MP%soaVbvv5T~N>T+5(+OpMtm%RgWDGGU9 ztjS`z5u8&#O4}H`q~m?E>)OuIpL-Mc=+fR=Ox9y%sA{|>`>nCq=K#^spRz*TEYz=l zk+^H5n9XaL_^-Uq6x09VXYypG3uUq#TI=p<-5omhY-4!l;{E^o?f3UP@FGU`@7UGF z_u)lc4gAlC;)U!*eC==Tguj6JF9cBj2NVCnYX4yMfAB>d%;2BC(LdPuAN&_x=>BWx z-~I*uOTXY<*b4b?)f+egqH2G3;{1U>`zHPy{HNSS|DvA6*@YAS17Gkj$QS+pl)vcz zQ>NlV{J+(P_%90pfQzwznSW^)Hvet^oA;N0Vc%cg-~PYhFYSLe_TS_GJ@?=CU*3P> z3)wLxn%gC&^!`=0-ynyKQVkP00+PW6alIL z4S?34?M8+GbAS!N0pJ911-Jn`0U>}0KpY?*kOD{rWc=A>U+|~6cLksd&15W?!TOFbS9j%md~FOM&IU8el!J71#~z1NH-lfiu7*;2LljcnCZLLP;n|kR&`L zA|#R|awK>XB8fJM0f{MzIf)gC1Bo+y z+=kqZ+?zarJf1v(JcB%oyo$V@yq&z8ypOz}e3*Qae3pETe1rUu91MX$5D+d14}>3r zfk;9K5F*3?VhAyZSVF8I&Ja&X1SB1j1<8k$KpG*cRiRo?9jG4E7-|l+g1SOIq5jY)XdE;Vnhwo_7C}p(ozQXU9CQu3 z3EhVtLeHRZ3KRtwg*b&Ag(8I(g(-y%g&lr+ zjH67TOr}huOsA}&tfg$H?4j(ZoT8kiT%p{jJf$S3qNJjuLQ`R>#Hol>7F1SLHdJm@ z-c5M~aufH}cjVIi;-SPm=?Rsbu3RlurX z^{_$MFl-#Q0^5Y0!p>l%v@lu}Ef+1CR)|)PR*{xKYe4Hv>rER#8%P^P8$+8!n@pQQ zn@5{ZTS{9_TTk0c+fBPfyG^@GdqxYUqohO7@zaUW$;92lecs;xwJ_;X)&%oE<8}MEDG5j3P#=ymZWsqdR zGpIA@FqkvAGI%g}GWaqiFr+bLG2}3mGt@9NGW0NvGR!e7F@O=22s#840);>$FbE-p z3_=k>M5rRP5LO5WgcHIQ5rhaqL?99oNr+TLI-&|uk7z}7Ao>tvh(iQ9Ba{)w2xmkv zvM{nSq8TL_eHoJ(QyH@uix^88s~8&@+Zp>AhZ)BiCmClM z7Z}$VHy95Yj~Ss%FeV-*ekMsKB9kSP9g{y(AX5TU3R5~$7E?Y`1ye0kGgCKH57Q{q zEYk|pF4I2KITJZEoEgcCW0qmYGpjOdG3ziJGdnSRGW#!*;Y#Jo;VR{-;Hu(kKaU zxVgB|+(O*q+;ZI7+;y+)3OS+*#at+%?>d+>_k1+zZ?r+=twx zJWw7=9)2DS50*!g2gjq%W58p`W6op8v=nPdwBbJ z$9Ttir+8<0_jwO_PkDi8ax@&xg62nyqZQGrXl=9}+8Z5)PCzH4Q_&gdEOart9NmcS zL-(V{(X;47^f4ODN681{L-6tQVfb)-cs>H3HlHD%IiCZcGoJ@vAYT|?1YaUwI$suF z310weKg06yYg5H7=f^mZJf~kTT zg0+J6f*pc=f>VNXf@^}?f~SITA$}ooAxR-cA%c*$ke-mSkh74RkcUv9P=ZjZP?}Jl zP`*%+P@_8WZh~|mr zi%a6riiCA^4HdY5~fHlQ>V12Pc*f4AaHXmDz zt-!Wp`>})AN$eDM3A=&a#~x#WV$@_jSc+Jl zSdmz*ShHBCSdZAC*qGRi*n-%m*s0i=7^yf^oJE{VoL^i-Tuxk7TwPpS+)~^|+)3O` z+*>?EJV`uFJWIStyj;9pyijB@z`9H4@ztJreyAgAywe8xp$`#}ed{Xh|VStRzm7D5)W7A!#M) zBBbg^zB3UchD%m4BEV(AREqNvhl!8gYrC6lcq-3PjrHrLarR=1f zrQD>#q~fKLq*A3ar1GUorRt@+rG}+urM9KcrJy(_91b1M4SQ60q249#QEa_ zaY48+Tmmi;mxfEn<=|>?jkso9J8l#=gLbg6W$biH(+^q};d^osPMG*E_AhFpeCh9ILZqa~v!V<}@J<0}&) zlOU5PQzTO?(=9V9Gb6Jtvnz8b1D2(f<&u?@#mN$7HDtAA4P{Mbtz;c!J!Cy)gJctB z(_{-|Yh*iQyJh=jM`g!kr(|bk=VZ@ifpSPW9yzoeMh+{dC`Xjjk+YCiZm8+1emur^mlbe!TkXw`6lslCpm50kCw!G5jok4!@5-#{(6p73dV06i^Bn1)PGaf}Vn* zf`x*Ef~$h3LX^Uv?Klbr3RMct3Y`jr3R4O*3fl^Y3Z#nEiY$t3iYP@cMG-|wMHxkc zqN<{YqPL>2Vt`_xVw7T%Vya?>VzFYWVwGaOVyj}eV!z_Q)+4npB!qT2k6nI#;43P!nVbc!DB< zNH8Z@5gZ6kgaASiA)b&#C?PZx`Ut~>DZ&b2jj&BPBd{rRDWjEzl*N?^%Bsrh%9hGD z%1+8|$}!4G%6ZB~%H_&6%8kmC$}`Gq%7@Cw%1|ODk&cKUauFqoI3k`%Aes{$h^|C` zVjwY@SWK)THWHhOJ;WvACUKW|Oa!ZttFWk`RCrV{Dp(a&6+;zc6$=#`6>pUwl?at6 zl{l3ol~k1sl`54El^&I0l_`}um2DMrRhTMD6|KszDyb@?DyOQaYO3n28n2q5nyi|y zTBKU4TBX{k+Ns*FI;*;*x~96Jx~+Pw3RR<2V^ZT$!>Hla2x{tT+G+-BhHB<&4r(51 z5o(EQIcoW8#cCyLjcUzm-D+cMlWNCmr)pqzI(4|Zkh-`!QC&;jP~BMFM%`aMNIgV7 zQ9Vz+M7>nKUcFOYOk6@z>d%WKD@RmORa3tN_>V;U5#>`c%Jb|jY~Q-;-3Mp_mcYd^ ztOIzVyg+KL)t%MPUpmrU)mR_(7jKlH8qhn3q^O`@?gtS|4yiZl-8e)-;=!=iahD#oqG1`9Ldo|R}4bY(PpE&tGj zdw@8c+oe3|h?R>hz@F;>riW@p-VmOoer-*?T%+c9wLoUCYO_xGz4@TQ*v8hO2kI{L z+Q7}gaMAtsM@B7W+&J@x4Ix-J?OgkMeOfKYA(60!rbpb8HCYJ!3f=s}N=vD8ZRIxg zGeW9(iRi$=2Zyj<#wDN1N8gIP$#JV0$FRr}ldQrZ3D>hdWwc&Btk)T!39r>zkKiipK zuUK3-Rql?C9AlE0*$!^-d(}II>Ay~*eI&aEuKM_(r!x|EZA_4#;c|>?@?dUh^pIfE zkjZOn)wnTg-|H%TnH9<1k)F&V6@Xg|^*_878k({LWNeL!Gu7?G<0S~;{mlNaKIfW? z0)B!P@BEI_hZYms4y+`=1lh2z4m;;B*LwWAebPqyshK~GhLg)4TtDfgL$u$AXD;Ce zk|s2wAHnuAi9ZU6w$kD$dmLa8-t={XW$5JrK!lNkpafv1&%XKLE7Lk5nUB82;Zl8H ziPnOB%4-O_d)0;o zw}{sQOHS_%gHy=ZlIGWmixTaXBR9E8dnv5D-GXI5-zs-)zH@rprF)!|dRlH~WWtX2 zyZxTD##e#iYfpPMD%xT7zNc&k&v3n`dM^F(RSguV*~`B>nrYW53MfqF-eA>01jF)J z8_~OR-vfI1O%sW0FA~1IVSjpWSTLi<7YIGi__*a@(fL(*ay-DFW_@H;O~Xfmy*#sr zcdF5dJ@{CSZmXPzcj&Cb_o=bWo4iu~dm}nlT?S8mADJv7>hrfiq-NW~piiqZtiZ|F z%?X#4>TucTd^o61VEeecSc4;9{xkHUrb&j$jq?G!4XXZkcK2r0DQ|D!Tod2p{fMAyZtu5?{aqheDWgJ z*nsSpSHNaL3C;_t``PZ=Xq_}@dQWon-#qgb*Fvp-@}L#gXMxyeCu}VabW*q{v@>u&|-6Go_L;vCOZn94W<2n zy8APosp#X~;g@1&zeD1upXm~o{hc2_4hYOT;kD?3&qe?~yg}pi$E<8t4~@hbZ0)p- zsk!KGTAH^zc6s;PDYi)c_#6}bb%aaE>3WzAiaf;jP%cu8LmF?oHviHdYyF~6{tNC> z1DgnGSSHmzkiYV7WLm(?T=s+ATXj#wB57|F$)JCGc)}us3-F0ejk^T z@6>hHi~TjTtfLeQpxI2YH^)7YRlo138j3tiNB+q(i_Vv{Lod^Z>qb5cO`xwN4F8^` z5cr&*KFfc#?bT?bQR@7Z@s|$!+m35Gl#%|x!s?tNzR5@ir>gHYs#{#vW&;b6Vp~RD zdmdzlIjnic8s8?GEp4k7*-UOeas3p5A95F&1op4j4Gh1!t{7SkE$}bBl2?uP5 zSK_EYl2ks>wD|p!%{8m+Wj~^j9V|wbYd7N=+k>61UFrTvWqAIRl1ZIw4kut#serM| z!YmPg-V;H(M_&c$??yRtd<07ErU>VX=|c*{;jm>1}d&ck=oawpE-lN7ds%%xL|j;$$oY(Hju8 zX*PXz@WvT-lI62R;@x8xu_L7|lF{elX|NNOwz9Rk0y3?KAE|gI-V2C@hj#5wfAcK2 z8t!7d53%lOX@|$bA(ZEp%b5` zHA~d$8|?=p*0K@D-+8F-2g}~l8d{{FvW|R*^u~SF_*njJ)#S>Xim*ndvSJ#ZmUW>O>@=6&~y*J<%%rP@Vw)x@K zExCMa&)ZGS-eA9&i0ySAb>+6rge=PwbhF~4HS%uSbH zylM5*=}&!@{^hsiGX`X_G>=u$tO{ z=`V+1gF{-znnUzSK+jLF4Gd`%h_V-}m z;H{vrrPlM6hwo!2^t1Q)BOjT*;n1q|2ta(h8lE21xEW;b_3Eo~VF^fmU!By)@&w$j zw9M+8q}S$b@|d`?$s@W=TC_vWZ(Tj_N8;mf_T*huz~i1tzi_`Wf0Bfx(xc2nP2Cwc zn?#z(j2{s}*vPI0Dyi`5`lp)ZmC3~lVw(b`de72Jv;3(|zCGsT(BY1KEfe|l8z$)6 zunGUqdynFkhfq~>_ga>6DjgSY*sQc?a2_el4L-3Z=Dp~nx#V{p|7;ZycIV58u&Kt` z_{Ocn7uhG5pB&yGi=8HZjHW@yWTI_R3qiI?Cbmm-ytv6P{=-x0411 z7Ij}+{=0kE!?WWXZ3b012KPWEpC9K1)7K=Z(0Ublg%^If{g`qgh`uYwLO^fNRv~}2 z1t&fPUOvUdsf5q`sx)+|*0X30qA5l}P;Z%|Y26@azv2YWkLh}~o!?$};nDdtP2cf= zApBcoVCbpY=F!B}{&^=0M9Krr%UV>0)wK=biPzO#hvQ_PSj!i61J(_%da7w@$51FY zc#p9=N!>dL_9T%uUei0r4&;8YZXRkOC5*UjR_YHv&>)Xxb_W;}7IGU#7Hb(pLAjE$ zrm0RroMVcKuxZJ_BQHt4-eSv+SiiDYfIuK1@X3%b!1O4#{x}n;5_g_&ukxM5E=p*8 z(#x4G_2)D;*Ino>#LCU)ZmCmD_rlN`s=uvk)5a71X1h%;y!ZVTE~mkWg>qY^Z#ADA zX+vbMQyeR*ZNWaexm#<=8(C|%@|z;>uL#L9Ro>@qn&pH|JS{~>s^46|N2CR*Q(NmN zV+Cw0q#`)!kmK12ZbIT5LiT`bVlQGB8?N3rBV`-itUG+Mp+cm)F8;DZNg_h}(&h}X zLo$cmaCjv`2KSQ_RFN^gQjOXSY$|w`>pe6XsCU`)L5aO8$RKKvhUDb@u0XI|HEb~l zX9eZlUJFpo0H2lDq}tn|?007_bMRV)FbMR$&(%`~sCIL5w^NBx4xj1Cj2ebbE4X649VS{i1nZN*`Vd(E0O3O!k&))#~mqM(5 zz8|ttnIXHMo>`AxP4=2OkNgab_1p((e^JEqdE^2jM}imEf{n7TxT)=b*}XMWti`wA znfqYwwjKVM&GOc9nF!b{`cZ(|Ah50j#Sf2PI|KdBgyVWaZcy7 zdL$$t)P4?T#_7ymR}A^+*!8NY*TQnuV|^mY<8c<2`%+fWr6jqBZq506A5`f`B2rY> zbh!rJM{tr*F;^2fl8=}d%@_rg+%@@b-ye%_o%i>-_noW?O(C*N5)Tast6!bx!P5)K zmP|V{e)2)svc=5QD6?}NXR_u8$}j-B?sI@hmFb{E^X84CCWCXMe#?5wc}dvmZHME8o@0PG>*U9-S-?2SZK=uV#;xom4qwd$8V>#;*C#;}r zwv0&OM?fc|yT0j%{v+bzWqe7K9=+0+;wd{dT^7d!t}U3XU2!2f4_3We>6eJj4?U)y z>+^|T15Ipznu?fa_Lzk;LVRi}4+V=kb=o)Yxk5#aa*0g1?COOB6-6$-d+frn{WhE9 ziK`Ar;%!6DFgQ9lgz;uu`?|a?K`LXKhzWW@79qj36ikxnBZ6bg3HAk(-1ePA( z9xDg@gzYHr6K|>{6S(vB$ICo=iG?7K>fkdozzWAe+j$9Z2P|!`<27AsN+1$2w6qX@ z;QfsDshACbD@COJoGYgU5%~xcl3E`!S&>;PxY3Pqc=_YH@UB?FGU4?=Qp@%GOTw8W zMMm>f(R~zOSXiupq)Fud2lCm|H%toe%$UqgH(lT2ikb6`Hz4b%*lf>#KUDqmtA7*E z0!AItHnZuBJ-xeF`tHN+J&U#PyME7lzffJ8my?Z}Kw%?dSe(28pN`a$iZU^-n3OiG zR&kT#V`q1#s)?!LbSyY{hW$2r@~6QKwnbjUgIjaITtK~yq)J?B(F5k+YET%50M)ZE zy#aFJ#DhMeWSw@?>hPf%T`J7NU01_eh2NYUQNhNN&&sye;a(Nz!>t`rgrVR~3J_Iy zaIKHK@Qfo(I$eO|tMd?-_xonUNVSY9wGc*erjzYcNH5*~5`Yan1gN{_{gt~$uqVt; zR-X6Z&E2ym=a8k`#Xio?Ek;eP523C5y~>PHvYLfuh#uzn#q;UcSAZ0nRz-CWu~uU zpksHqyQ3UhdebD6Y9l_Sk}mez+HBb(G{(g9`&hwmjIPLnqaC1SkOchj%?HnY|71ZK zFx3t&%9NzZhPyjk*o3b*T}NMsbR%NNmqABp+Hz#iXz|`bv>Q{CuE{iCD!;B-egQmfF zYQ~ss8uQ$nBgr?el!-m5Q{v{6qqxu&AoZTH#?@|xYSMRVT~x2Pb{kft-^B3w$S(+e ztpIBIWU>Z}{Is7apX{U6>IQ~3-+X_z%SXMmp^_ZgmJh0yak68q-q)XV)Yxg2{`7DX z><&+g*#0eZH}-VoaOq2T&}rw)FFUd6xc%x0B4$0sah{LG-lV2u)99eaEMWj>^jI^b zr>+%de7>M12B}^isIs^wIuV z6={>jOJUZcefZ>IEdQL1abQ*`$+vcd|4s0i>n-~VokwbUTa}LY?YCP>M}wUYuq#@6 zGMQp7xN2eVsL&|oqa-bow_AQX%Xr9hb`=4#Cz@*Suef{DVxX-bt-9m)UPK3Z*yzC% z==?=zh1e>*Dj&UO8p~IxV`B`WeN^%ySLjmdkokO;x%#j=d}3!j#^~du?(zJtho&3T zD*PU_GaqRe?ro*E7h%Gb>hiHKmZa&nSASo{?vSN>fORrwerUS-x_b;$-5!{b`nOt@5xR-I^364ltvX&-M?IVwPk74(FcN` zp)~-f6pmeED;ecD2$(;(6&dEs>2UISz^v&omhUF$^6t?A>~_eD?Cj!8h61-%uIFv| z&4!4*aUH_klqrHqM+yF(V{%HZ;pKEK+D}3EeQD-6zbUL{?At_^wf)@T`!Q0h_9rtr zQ0o0Bv3kUB?&S!mX{?qljjwUA?L^_Z-;GP^hUJiH4Y!e{mCcOAlY`k?Z-kvR^RC%*2r6$eg_@G8vie zp;-vMY!h4ftQ3GrGIs>p38c+hQ|)#sY~B%-U>O}?Scmlwk$*b$;w&5pW+9%Hy#gms z%(*W24LA8HS!*V3C82|E$X@>z~vzq;k>)zEHeQtZlS+v7-_0 z8xN|B_4Zh`?WA0qe7=KAn7VTPLBhz^55utcj?Z!+U8_G><4Ugx@Pt2pZP+B0+{`79 zpVL-lB$Hcx?%uwZZcIb=X8S=s>uX=CXvv^g3etMc8m-kNJ^_78PlR?wFKq;QOFnN01BfaHOi-6sUAr`2yZ~|G zew+eLhebshP7=+&78WCbGs6nAxw0M#Zde4vyF?VE-)k6tS)tca{NO=T3_DqDVs~un zoUQfUhy5B6SG%fD-?SwMsRU8vqQ_mp#Ik0Xqz` zs>;WCZAN!rnCjhbI9?)7$PZs@i_G3L0vm^vH{HXTcOe=#iaSz6syeULl};a2%fHZ& zM^BI#x&$jaXeIC&t@^(-uoz|1kF^{c^ScFC>na3+xN;WW-+#>d-q~!!`l&@nDqGt6 zD%?C7vt4rrJV|&6**~a$p4EH>Up!}d8HWTf8h@S5-oD~GytbjX&x>0rYfP+f>bD)s zHNtjliSJg)8od4v*i~r|Wqqe0@pc-A;kFfTe<#9{%XJ5+#uB)EKa{%?Vbcm`=vdEtbNrV>#kDDA*A$ui1>-w9b=~;SK zs{w7+eDjSCzIRc)_C?<`!yQX1+M})E0);bQDRp<)+`5ufwgN95U zT0>~ar~|1GHSMIOVx~Dhg4$epHjHDec zGw*g*9Ws0mc2Mf3E4*s|c#bjtveDyqy>!6FgIC3OJi4DhugNEKcaM5k^k+wHY;;7^ z3J5}D(zI=imtI)1+{vkks-ON7eEV%9Y3su%aD`OChstf@R>$jrlG%9$lCCX-Yr99! zvR?8rVuZf_oWsf@pV#V9-7%G@4;=rfRP@T<{d&AZPp8<`k$B}np&F$Y>pKZ#wR=V~ zc|l!bdnE9JE{O+jwM|PSYa$u(O=PD50T4s(CI5ck_?HQrbY@)<-#zZQCcI*@yOw=; z{X`NlVOiGvaEG?Nc0aUjHT$k#Eu?H{Jda6bI3U53mBdBz<8$jXI{rERP}M?68rg@9 z5XDU)w{XA6HC=Rnf~MnWw=_|AN#GNOO18`3$JFuIcSOwla{W=gETQnaYqqulK$jP6EuuyDH4(~7jAO#rz{=duhmxN+ zi_F!k$ACG$8A`ch(!O|{-_nZK%3>$q_%So6;`RP*@H7jni4ypMM+t)cmaXHJHX~0# zA;_v6W-WQE>>JbDoe{IsC%KtdO!}`n{*HJS2L2%0ZYbv`>ih)=Y0Vy{VO+|2HM27x zHKgSH?9wBjDH@?GCVswpcO>O3^>`$5EZHR#pUm#J1C#l*u_RfY!NF+?pcK6uji)CB znvz4my<|s>$7hsclRC#osp6{Pnq#5E7AX*$QeHVk}02lJ}ul%MS;1^(xeQ{j)ckc z*7wT{R&E98R-SESf-G|olsCnxHLp$A$E$2)IEpW?cP^zQ64+Q~yr?BZeGOE|pPcjs zUAJ>ZzkH<$FZ7h6U2&``MNEA0D>3do7#(x^vfF%`!SIc{JXdl!o)x zfz>y;JOHKTPO05ni7)ZNR1auxYv~WygJzy#1ox<(CGEMT8%_mhYDOiIkq7sfiEjGf z%g?b_dm$P_ef+`f7F=sDe++Fa$lk4FVfNEgk+Y7%Elo3JEaKMq0}o2O-|yE+_c?ul zmeaKaeGLCfakU-H$@v$s4 zuh(AF(feOk5j(AWZYkyaPk(JuoLzzcE>m>V|FKG+u7}=1?09(dyO=lPE%{)jEI?^ zDutESb!WbTkG5f?bDWuNUwQFPay}zj&T+!8$n;A-dZ!J;oiJl;wCZ$G|J?JO45iZT0`-yByD0xOEE}Zv6 z``YfCngfLC)E%i!4;!bQ`5w*I8(~);6~l-(9C+_nz6_ZVomUQAj?8|zGQ0AB@%A0? zRJQNqXK{vcj4~3AJu|W?Goui)DkUV!Ol9xNR!A8Ur6DpaBazV{MN7lTXpo3Rp^X3a z94XcNe&6@^`~E)v`{O#-eeH4I=Q-y&&Uv1g%`=HlMs1$pUmmwI=)C;)xiT8P&$_ys zaX+i9qm4;O((x+kHKqqyJRLVY7Vtii;@g`LP(RJbXA_W88TH6mRamTt-mEG+Xd?W> zPUga0TLRyE>_e?MCZoyh>)wH~e@VXqtH)bd(qm)ic=JQn#r`4w*vA8{rxgcIU%TLF zNn9Plq?9n!*i199ifnBbBXN+}0(Z&a+E3PFTX0%t&+YtD|?ht)k9rUqmk~*ejlE!d#8$GHV&4kk#1O|A*3NM?YcaOY3lymt=*5|nQ z9*z`Q#Z?aefaO*L-sQK~esO+a7sVC1c@jN6BR%u?A2==kK4K9Q{}(@zSZYFMpj)`` zA8Fyre?MpG zzPnzu0sdl+)Zj?IpuCVX$QI@cB5I!0+>ii>45QYj5sLO&hpSsh)A7V>g3WNuMj747{LHr^< z5FLb1^}8@fq?$-HBqj{1Y{3KKYau4p2K1;=K#A&WF(<_DLLOB9V%#6TzUQ-0(?Y$V zzR*Dm+~$aaLKC2K1ek*j%t1zh836EMj>xDwhztf*kIF-2Nc+FrF4$0jMYUP*4HVV? zcU@!-F&BI;$bN|jF@MBeh_{dzk_+O0As=Lp43PcE4Sd3Y8jzfS)P&ej^$;28q6nHO zRG21}iwGzSa}a1!P+^ERU;s)O$WSlQ1LW|C$iOG!17ab7_@p3n;D4V}Wr#mSA9R5aQWzA_0iGtv zz$R=#M&%*C!l+I#podv_w&Sz`g8@n#U}2zfhz!xur0O6tG<6O@fg zg7B!ii}`)eYaxG4q*-AU6zU))?0Zmf3iB{<9tIfUQwIfffQtd3VuTMo#CDMf9I7qV z2KdN0h&)h053vOsL_Z8zNRo@b7if3{Il@C^hz&B3SV$fi3fKS+LwJA@FUTXpJ4it& z0GK0o)ck;h*id;OLu{zIz#NH#Gz{tqN#LBvSIU5@%=L)z& zGA}QMA|N0nBrGf@CN3^1DJ?B4yLz>}ypoc#vYOi3wd(4cnmRhVx_Wx+*KgQhWMpDu zX0~aQg@v{C=FK)X+qc`=+S@xgI668z@80d|>hA90v3KwO{odX_KK}jz0YO2bpU4dBqSvrJ9hkdYHC_qM#iaASy^Y!;-yQ4g+)arC0DML zm6exYyH-_IU0qvSU*FJh>sDi9Q`5bBEiJ9B4<9~x^7QGmXYK7B9bH{LJ-xlJU%!3Z z-#-XQpwSfM2t+-g5>OPt zK!Y3rFwkfU1%*P%005={1{w`C8fY}oXbJ`FWdHzE00Rwj0Kh<_!3^GmAVJ`;2^eT1 z&_tk#KocPz$dUIqa5EjiK!Y3rFwjJZM}TM`2>>(&XyAh!0D}ktFepL5f`Atkfd&IX&;vOD z1_yEgpur9Ye2@bmn;mIC3%F$hV1b~>G5`&jLSX@OCIA*NgPVQ;1~~xGfI$winE+TI zHWL8QV21;~AYehz133T-#AX5j8tgz0v4I9X7--}HoS*?;W)ffCYeO8DOvn8PLeH4lvlmO2PvyFb*&d zFp3B?EHDl*jtHg%h(~~UfN_9PM4*9>1B@d=JOadnceh{<05lP3;DbE?#3MjFc;gH9 z06-Ig20qvWKs*@GawHS<_nindH7TGG5!`$L1wV`i06t6!Kofu_ES&HxED_Q?G!s$) z0AQpTpurvhFf(9g-~$czIIssmmKG|4WkWiOLbD)+002gc0vg2xd?vumfSG|0Gy!M= z&;+2t9(=&IK$?$cK^g!67-Ofd+es4H#%}fDEW=p#ca301{g$2uKQm z49EeaWk5y&0E`BV20oZBY0&QlgADALK#v(PGuSbK9TQ+?z|1lW=J3b_@tL4u;0^#V z#0MHA6adge1BUoO0|18jKvP4*ts_uOupms(P?!P$h6V!-a$HUJK3D*#}Si-H^}5oiq105}Th0{{m9 zV9yUU0ATPBGzIhl0D~O#`GE!i4052qe;Ts*(Fp{D0ilpSpx}3H4ARo#2z?r%1;pW3 zekO2BY7=ouAituC01N<3C}XOeKoWpKFTg7xz{n)PvW$&m#Yz+^1&u;2137Zv6_}z> zpXo41jp17>yS?qryv1<){4`2CgT!kcUfVi_`P?X^#Qj1=@5-90!l|&0bjL97mEb2D z>{ChKYCGU+IoDqpY6lX8eU_>(>OUnPUjS;S$+C3J&z3jt*nVUut&xwX-NoDVjUF~x`_3&7vPGO7Q z=V&P<{qAv(6CSCGJ*46nmCv^XouQ#TG+c~}Ja?$|GBW&#N?)hCZvR6?f4CyY@0UGU zO3%FW_OEC1pIG}sFnx{Wi0ua!i0 zIUDv+jI&E}*XHZ)vD*V(&cCp=7CY4cZFO$TP`#!|d6G+vvFeBy?OfQ7n}+K&z+ouB z4V2(MTGq0&NDjzAu5U!0f^6x4Yrhoir)vD02Rus6NLliAz?oy`&{;k*iW8q-8i!m* zCC5)I$R>1saBVmkY0fTp^Wz$mk?(Plu$5ogdM=%8W-Gt)b003|!(`s_MsnG+lzyKm ztL5zGYU5LKx_?|iC=@dOE9MMpW$KL?i<*GAT?JFw;cab&w|9NjMQuna+kN!&eo;Ng zJu$m)#$98*H**jra6!~kcK7k%EnRn6Z~|sZ0k^-cUXtTP)3iv@lV)#z>pye6mXThP zenp^Hgm`W-QM2FES?J@^&cYmF?nPbglYjDU%TU}UYmxOhC*!T3vC&niOzfaxS+`L+WRaCo z2hw1G-y$O6T@my>=heNiPsr=lZZIe)c+k-o`BnE93i6zhUQ);ZW{UT};S@66b-lpyw8M$k zC^|eQW2SRet7!X{PvJIfQ|xI5svW+w|EvYN~-k-HA9#TYZPgh=Ti?-vEuwSW^&&a*7rW&QuGB}kXlG1^gvd6$t#Lwg zsEE1vom8vCZHwJ;RWg{XJ?-^`pjyh1&Y5V`#5`&C;5-uxo>St)d{c+tPA29Lu7WL3_fPwt z;qf)q0;k40sF&sjE4>J=vY5kn#uvwAw7>Eq)ScgmOA!hA8e-`GF+ zGxzzQ^<3NLD)c6kVW;D{w`ue$syS@C+s#LEss{Sj`)Pmb_TBSf@NP`qzQR482G|X| z4m{%CQ$8HvEKw;=So`Ty$>HF^y_dU}F9|TWqcm5rD@-fW;Kj>7a=x`^_d12{D}J}i zx8-f&5x3q+b5d%FEi(PbocUSSHmGc+Y0lMNTXg@fzFlscgOKafJ#4{ZzTv1lTe;8p zDY0!n(kc^ zn02ww$erAfm$f%)SM5Gl(%03Mc>5nc9%eVSnkzVTiSfcb3^Y-wh53J!&bXr8)VjuE zv>raQIJV5Y*(}UJU!~FdGzpu+a^wRFt)^6A5o-(9=6wK5Z*?i6L zG&Vlqol*QDX-VZ`VtbUxUNg#FzU#JG!eTCKx;~9tTc3VE8&xSYV1pKV)A^pUk>Y-O z2Hjo~zB;?ivfE?AP9S(b?oHLwtRSBUx$m~<__i&pQ|7DQOxgK+UBUYguqDjNdzF(S zd?L>r_kL2FLwyeq#ZX5m_3_`=C1g$WRb0l&qIBXO_F1m!S$ZKfrY$Xsy}fGrC3kh_ z-9<+^t{;2w0JZJ-$(%dw2Idd@?XFK*l-@PnF}Rft-yf5pLQh-GZ7ER*R}Jud@Fvb9 z{BU|P$LkMn;|rNk(?K#!-9Dss!P3*_TjBliiF4kT(XOkUmxo! z;fnC=kVM4xyBN^ISn&7r5xBp+JNqe_pV@jx;YGe`^1zj$8cUzF$m(6(v?ce=OTMVJ zu2C0xY-i}o{^(Pmq_+N4b^qI)=QKb0VuQn14auFJIHRKbBCR3Cp0?i z2O9-Yr}o=>Dok8jhJUW$P)|mk7nKq5-#l{ok*w_#j>yG6wBH|&Re9@)Lj4iH?%Q%7 z_zvjU$i(8g$@bsl?@s6F91hva@T{jU-?9;PVlZzwLoBeZRlov+ZZ; zmP$7LRMeHiyBi44ZTajE| z|B(y!?Zp_*=gl*92WS(LGCe`{0luc`+CC9*Z0~Tt;5PLM}+r$ayW&|KH*wBGg^#<8Kd( zEBp%^jhSPuGY_n0F386}Pww96ZoBRH$U967o?NnBd4BV1Ua2q|#iz>mJI=N*<^o~S zgq+^{4CzznNB?C$`0{AU{LzahCoJXCA7V0-_B*g)HO(ycO2!LcR%IX34zK+kecz)0@r-r>GN!G-*`km*>&X+``Z(_K1X`fV5PzJ$+u2ftpd>#Mq`h<{tQw>Fl@lwf#3Q zW)~FZ2k_Wb2h}&ceIctKy$n4OUcG}nwc$XaTaRb=M6JEQgZaJ}b+`LaLa)<5B`UGp zAAg^vy5do2$rTEh%VaAT%`f|+aeRYs!aCLa#~7>D|3&T_Y}j6pR(#>s zVJkwlmj`o7VV#?>m?@Bo>_ZaJt;gl8@HcSI1ujk+JW zEzKRh^^z4A%7XQN+erG;pZfrLuYxSiU*-8@$(H*0t7`re556?Gx++37WdDjWu}{(y z%TDY($JyZenPhazW3e**r5!o-g+jhul;9HVZXSh zJ!Nxkd3Bq|w-ryv_Fw8*JnkShAo(A7n*A}O#ii+JsRlfE$yt$mm3`WRi&)P+%&!>^&nZzWq+cF7uDglwTuk^`E;FR6fYNlKUd+jo5iy_l`p^?adYk#f|dJ_P#IqxBPjwI9Me0(A!sd z`+VqeT^?E_9dId?=9&Wmii!6X&F+G z8TP6#ZK~x)OJpg<9P7N>Voq?`%4-SzZI>A^SIs;pF$#+_K}yD$CDz7~z*Hy<(~PU=X9Ehkm_> zhAwEMc0m<)K`l-!Q{K)`I_c;+k^a?Yy9VDgz3$lIragFj)AIbxoPf2jIz10HsT|=K~OO1`cbk?{3n*OXnq$%%A>g9b0 zrQMzeSmv9U7Rd&(TI@h?H?Vsc{qo9sS9&`~ZwI?|E4w$0`EnbV@Xp!DzfHw<32lvx zWezj5!WLb!^WSK3-9IH4WncQ>lIz=XiQ3#lf*+V%d=#(U&aL4*g5I2OViEl?LD|fN zx5v;#^DzgPV)#wRD$M>y+P~i{=vVpAF0hQt;cx6X7qljeM*2{=V~bLI4)gxSJ!$}b z{ddQqf3cfTIH7-|_5V=^jq#|sxaF8e^+Apl*(oNCHwBqFsVJ7GZFYiT2I#{p&*|(v zaX9%hO}~DJjPcdhlKAV7s#MnN`+Q4_(`Pqsj&6K)eAA)RD`WOy*LQ`5n$#+pYSJjHo32;tDI7@A~3g@Yc)=$X$$A! zFX$GdW$I&%XaCK9W#usK8#}r4&6T8!ok^iu%H=XI4BtLeQRYeNzPfGBH(_TG6MFHv zfvg|mQ~dPiNmWLQ}P<`(FQ_ttlEa!5G5N_vu8pm=}A+_%rEk zE~)eP;z!3?Trak6ILT3Xc>Yq&(XU(NBnAqdtuANn4lzlqU!K&7ggK6GwA zRLpW;02YhlmanuDb7QM(V_5Uto0R+GOsst zhE18P@V&cmSX*7EswCFhA*nb)kL&WqE9TtNxQO};wpU|j9s)1dtS}HM=8CPi`SUg5 z$HDE#q~E@kW8N}tKY=ELW4AyAPvgtXGi=<0Yt0Tk^Eh;H@VfN7jrxmgx_FNE_|J1^ zi@$iyMC0*7dSyDB?cpC7V;Gr(%vOHfN9$ZL zq+GnwAYSu;+k%dmd%q{@M81FUEb#S9De+Fy;Q4qv^e|_HB7T&Ys3x6wg-vWsdms!gtoH3*}gy z#_!3t(0?ud#;S}FJ4wr)HkAHKdDfF_+QwjR$iPBK0y8}o7-Vfs*Zm-tzkidy_jG)B z%{`iH3R~!x+p@nm7}6N`ii=tM`6SK5pE=I07+FSUCe5d?!k2IskH75DV-NU5=Z|AJ zH9@~bNc$W^fy+faL!*N;n(R#Te(ZTD_XNF0=^Pf;h z*cu|8)5=lPALFiGd}lW<7T>$UIt}G{&OCEf;mc=LWo*IrR~7r(B}!ea;M*B!)G_n@ zsl(^KEVE93CPCtCrJWNl{MkR`vwY;(vXQmfLgdF9TS|+Zj6WO({67ZCZ2($W%;H`qZ?cFQ383WhxZR;w54d zGmjqNprzoBh*sBN%LOyjIV6JOAElyhI^1$WD-$nQ+~*R#zcuQZOW~neQNOJ4S9f36 zGO_FEL^`-H8}IzcZr9GIs=jhOU|1*EDVFjx7|PT%zA}54s9>*aIQ2DnF=txP=`}Z7 zb?5M6&Zf>qe(tPg&J%uVu~miLKE--_+Lm-h z50@uKy}3cpSpsQqEVukQ?CI$^ceB)%i^i&-UEH@^kc`3HpZoUb^9uhn-9Kkd_E~LP z9s2pCnC;}VB)%SAr}A}1T;tKsge+9d?6)_U`jUH2Y#II-P}k~bxl!csP(070^8qNb zW!VbafukpH#$tDTro1R&55G}*;X1)S_%$SguA1JKDsVf{jjuy$ewFRh=$fZqA$-!O ze(vYR^TsEJCx09an!T=3YDY`9hy9u30*Cqqoz-Z9H9p8fmPJ*sl91?Z^;t(-{fJ1E zw;zkOUxAN5j__%uWBgbN%ZJe`D$+6&tApszj`Q9;bc;Vfp3VB$-n6gDQbDAYC$lzt zJtp6NuD9xQ4GD_GMr<17wtq2V>U&dT_{-QCSK%XX_S|edurV*s%Q3q#&weKj<=3pp z#@h3J>&4e6k2ODYdh_G;0;vnxKjIhCqlMS-bvWezrxC*e}}2k`(0Wo4?eaWyj;IQ`hk?jl<%g9GTnXB*!L|J zhN9CCHzuO?GmX7W^5w%UyyuVg>f_0N={rr) z3j0~fuQO_0Xo08$PA<+q?oK|Fe*He>d(zpRocg1j+@qZCxMaH==k%@0cF{3QFPJf- z4S5>%ne+B=nO5Z+E#_`+&And+9~z5hZj4D<^V*zlb`YBytX-=2RHc@ydt>G?sjZB~ z9=5DB*HFf-+ZdnEZ8>X27*|$mVtYa7KVeUQ|Cdp)p5<|SPonyCbX+W>(fs0bM*uRW z{i|dC&q}_(9MGYXPA7d-+flXQ^8Ja-jW7AhC8A!dv~PGzNNN&|t6It;zfn+L&ZBoF zF28OKip`&w?-S3o+>3qQsOnja(n$Yu|M0=Lnv*DdLe+K2k?P4PnphgQ8}xGyt9%7= zVtQloMXaL?Opm-?9ziiR?y+Wz;2Cwz{SqZ*ul?<@R;A3m?M%UNbBQemwY~ckWQ|6B z{mg37`#Q_uSdWKn=DsF2Htbj3{J`{Bw!j1)hZB51U)MyS7OB5DKKv|k$&7$U%`)tf zU4Mq-i&=kHe;6e~DP%|VDlRj+b!?~u^`c>Zid(TMP5t4hn$Fa>mgh-{M|Db8`X4>t zaltQvC&z!|%x5pB%6d%|J08n}`!#Q%I0NyAZ8KiAyL6IwtO=EzuL)4EET6l%E%aHa z@XIfvTOCafkc5|^`m%3ScrcvtG7EX2$z>{<@o^c`>gY`Y8Cot(wqe3_7TH}~$LiFO zW6M)3Yw=43@ag2@1hZ;e(o1%Ygfjb%-RW%WbZFpwsLlM*=0!aHc{}%qp-K@Sq14iTUw2susW^BR_6Rz;C!!@)i;Yo zwmc`R^VWj>=YZI4HMvu zUL$mL9Ovsi@S%5XHs8NvL|IGGg;k18wYBYoAi5{hwW~Yr-2lEWfM2DwB-Q+RZ-kh| zUIP}M%oF4O+%Iq`DhA^wMS&9=FAD7H^4mRU{ibNuD`uIknqIgXbg`&w^NLTA)n}GY z?tV*fjks+UBT2~}N--Jm$~rKS=zRoQyZD@thI;q@=jQ~qC&&Zk#|)3^eLNyW+(i5N z)w$^p{Mo!h9{#6aUA0VwdmKgDwCnrb_IV~vsxZrJ5nqw$@|poP!@}OSnv|$3=|kH5 zp+%tqpx~WP1NSq6bDdLs4d3e|T*Y%bGUzr*{ z)-@co(z|_SgNjl0*SLCD{(*s*L6IALo|wLGtS&oHf$F6-T~!WGUtFfi*kqkLv;Uyv z7Me^4Ro!`Ioz{0#L60J~c3k8U$D3A?I|N{r(WpeTRe8nxN)D}WkKNwZSYj^KY}Sf> z^@yw%aNEBoYLHl@d0|X;@Ik9hyYtUpDMI~r@B|C{(TD#u`R$!0dd0zzj||Ud7zK=q zac(Z#VFN{)-u7uMW;`Grz4lurBbM5vqR`xbkP-91dkuTokPnA)$x|8j!k zmg{V}^o=XjBBI1-DDt4v%e&njY2wZ&wjE=6N33k<(y#VEYDyuMJ6y`;QDQMBeKn@MFOLMt>Q< zlV~S@|8sQbQr|vp*y~5jj+!vsFgDz-p z{c&~(li2~P?C&11zY2cKWHC|n@O#S@FO&v<#zM~1{)k15I}?`htIz*H{T6*e^S2xp zn2VVJg>JbU+xx29dP6PzKWnk}#qTRFEghLJ3I6-X%S*q%^8fw2iHrLKd7qAS;ph8X z6iRa;>A&p5f@sMjUhc2j9k@i}`xM=T$zL3eCVPDm8V0-Gj$(tyi%_k#HXv?#(n&hvl89veU!r6B7ji<$I z?=@UZ9FpVpWQVp+)>L=iWOKf!AF$%+P338QEvL-XoopRD`F_UOlGJ7@rkQ0oL;W5a zlK6kh)HJZek|5lf@NVa?k3?BtJS*kIotV^kG4w+cySu1q6?zCe_ ze)+j5^Afq+ZY3WRNz&U4%$0ULTUMSJ=~81;8Mnhgw0=Db)9^oRH1FfAPd&d5`|al0J>7j(P2onvx7`*}A~Avfs)KLi4}MuA zBPzu^aD74}S8|=pmkIlDF=B|Mm2(5XYNB{q^SV>0!xe9@bO+r>-(BMWFY{YGUOcat z&llEliWKLN5%PZYJgOucZ=Ko^^EsrcZhrUqe#yL6x0PaP*bDXMbY>el#9x%)#J4m* z&ejnM`?BW28!hE1JZov5z@FFYd0t-hB4U6Q5<6mS1vt_$}=bTeYEkclFux zxyjj!ef>9i|KjJ@nq~~;f|IpyErFvVTwmxv@H}QXV??-e-El0|F8YW|>Faf^Li5Tg z+8aaXmib8CTR(Lywyx1m?CR4n?1910%havnA8TkB2Qe7(Xf@quSm{!;V})L)(J%4- zCU463{hIg9y7SCPUbVUtDe=^yBl|qmz6d-OrifBl4Y+wd%zcBm61`_6WvoZOc*|%7 z%ny7Ev#b~H+U7R6!EoKUOj-NV`Ss^PwI>dL z1L>LYisEbCB7LuG1R7M=nb(|bUF~2IGNo{{Z5 zHhJh)vGjT&m$%{Qxj_ls*>^*0>K_bL?B{2_th&p7eeoIXTLHz@68>kBtfW|JCRU}p z9h6tO?H(G)->0`uD`Zb~dAG_#5ft~OcjGofcW?X_|8MIN{k}d=Z1pLM)g~2vYy4~< zqkDHvCp@_DWrAVUaXdn5~@n34&5JWbJtL-%*jFF2C%>L$XW=x3&GB&`OU;gpl%qC?0X9^XZLD#YY%aUePiyn|)}h zJG`>#l4i1CsIQ1EUT6LTv)94*d5wO)`2{YGPd4d3+9P$e?=R{&U!K5nc9nrt<4EM@ z!N?>_n{~I7nHSgde_H=v`2VXu3Fdyb?^Pb+d1`m%k$$Hig_YKb^Ha#4_=>$CWp%tE-|^85buTb`t82Y>NziG{Y5Z`>%*p< zRjL6Z2I{p=UY(->*JXxA2pcz_F7YkYK7Tsx6wd$`S4N%gj*`bW|02KtSij8o^^d>C zbMUOPyC`|PXNYOPR?l*2FX9IatE()f9h{*R%mM{Za>Ww4S9nF~qgZ9}!{&iE58hcD zznp%}J_4zgrucNjjhv$U2J^G-zqA+h~resEZ9D- z3zDt~?!$LIz91FNcwT+T;c3uS70ijwyT?^4B2&Ja8ZmRPbo{vcf$n_H1=aA1dJWfT z{j&ohV6YiB)e5RK_8g==Vep@k5>>I~xsG)G&Lyw{lYs z3p7^EtTl1V; z$6a>7)hF|%wW104g)Y(Tad<*&c4k@eWACj`6c2)QnIHmgN{D$gO@pVK=|*lgTz zIZ4>N)+TGSnCRc+|BwCB{Jy{PU!JP$9K02$(biuicXtMVPv*##D|a6=KHHhuyjPCk z6>OY=%DA&zyQt-ic>me3e$nuG=~V~sM2P0wS#4G|826JoD;sC07V~Pgmu`W8(e2~+ zULILH&Bk<5UaR?i+Ro}#AGUA3D5QFZBsF$7?qpM0C^LJm#HYq<1N8;QzB9+0|0lX# z1a;>$P16e7s<$sii8VXJ*d_(Si{8|{kZO0_%C}l7)5s+`;zRb{vUaxmt7;A-6Ay_; z=hb-qUOj9(V)|%zVDh!#9YOA<`kF4byW;mnu2y4P>mVPI?1Z1^HpWM|Q%W(nzwA1!G8T6oB+F9^r}p?`ZV z)wgLG9+a;hX$YO$~?D6)#A%d=ymw^2{P^ z>tK5_-{Bjhe6G*AKXvp(UJ#M-crfjLJ+7cHt(*rnb!GKG)c>#7gYy0PF*eH{PpA4c zfr-WaU8}Z^jf#C?^`)j}_jfbn<}W-lvHu`PjVNd|TZrb#Fl?yu-mtEY+%rsn@=fWP zFd6R;DS?3%8s%5oZd%o=49Rk=)nDHxa3WshaaVC#1={g$z^e9yZS(fpy^~FsaY?+# zygrT(kH(9jZ{pv*x!ZS$dFyfuTFGy}$2aeC?$dl+dz^Q+ZOff!mVJx+Yq6d%sO#?s zPWJC*R0)1Z?L=CBa{PcwWiS7?;!#a24G$OjeKX=_M)ZRnuhc^R!5%|+b@6n+nSNW% zPBttf+oQ~gyP>4a9A_4ZluOm`LlT<8eszF0or~o-mTGTtJ9CCp_5SB8zt@ADpZ@)r zP5pZrBAGq@Yq&qC3x9BaWuT8Fz47Wz%j^*8G2N=GA>pGSX0obB;B_f~!QITPY@TJm z$9J=5+MB-h5lZ(k7qP;=GWqvF7Zw`Ma(Ha+7bhb=8g;lOyseZX`@7vqDcO#Bqhrb;#oO;gg6*BW% zeDsdJ^z&mE1mC_%W#hUZ%bD?v9j_JfYigAawGiq?jE!$;wmGgyQ1q~5n7wk{`S|HqqOR-v^2VFOY1@Y-~9V}{z}iLHn3|fXH8?^^ z6wtP2xqN+BTvAH16s9pw=-}LeRr#W;qmBz)T7mVBv5vfTU2o88M>n1MIv;1vV&T}% z)vKkpY5vv%@{5+9ra&i!`sKxzZi@8Ii}fIS$mbQhvIURkPy&sX48nn~(j#HVB$i#C zzedKj4FwU)9zWVX_F~h46%%_m;5Oqz!roZ8D^$vP7VsOtU~|0wS@gzE__XuC8u*p- z1lqIAY#m}R9-QB3J#--M_PFnxMRR- z@t3<(zdk%mFp&}O5`2_-M|a$z$Mx9&w@s{9t~{p+Y7&}eO1=>P++o(vp2eZ% z(2+akq}-8rxL0va>r+DuqFa6{nsiD&Eb$D;cCdwyS!U-#4hl$ve)pIZE?KYQz4gX#7UGm$Ur zYv?4LoX0xkD}@gDtSouwUqe_qOXsj_WKBupID?42(N$|rrjEpyky6ubLnHe3rm~5C zTfG|X{;S;pAH8~GAG`}V+DA<0(m~wS(L|2%b zp=h>x%Jx;ITJC(IaU!0DE6OuXC*wwV&oX&@i@(=+dl{PTze^v5S&R&ugUc;ic$J?)g^@e+Uf79@Og|5q@vphW;RF+Ft=TFtCM2q5>ET@e|hC}$|@nLgX zHUCgQdi|NlVyb1h%))e~n9bW?|xb&v-}P%|gjUsAlPU{PXem&-MP5Guzm8 z4EuIjE?<;I#CfsDjr`v@0-MqpE1evT->lr-r$ei&_s+iV)!h&6;@w^oo)1jt#oI$q z@OEU2OO;!As_f2qa`o1TXlu2bWNf|IrUy!6E{&t*d0(;(t>-(WOc>r4_A1|Nn4jc) zTz{lj)G%&tyi6j#@%-mn(wZXzoabeQtovTQ=ILozJ5V$9N~?8?`sZ%`6BT*)iazo^ ziI~J2y~nBM?Aw=HWGC?{_ZoKXwGWC+cfLg!gcPOb->&u-tv`V__}r@5Zev@SeyRGw z=cJXD*8VDC#=At6;^LX&*HRMaGy0CMl6#Hec|5xM#b$nOwVk+0;rs~0BK$)YkCP`~ z-Xd%K+K@k}yYZdpcF|r!8Oi0%o9UZMHhst&$lY^B__)KGQT>ksACNUbUN;uU(*KiC zdCOM_iAhMwDXvBF3QMffwgx7m|960@UKk9#3s`oofo*klNc9Pn^ui#J7cje^v^4y{ z4v9xk4fN*&@)^L7f_gvB&yW3}eoT6Q%;weSKh0|_-0NCZZOvK`Al4`}28*Mi#S@4m zI(i01G7~ck>$2r+>>Qj6mMgeca`W&~`1l0`g@i>!#l$5fS4l}Dx6P)?H8h}7MOr3C z_@ib>OCXcz8TX*}@jKqd2^>-FOwk(@zr`_Ea2)jk&r%oJ)i7$5CqYLd)1c@X3A7k2 z5shcSp&2klJc$-XpvTdWv2=`B5(7P41&$6+L&OotjI?w#Xd;1ujAF!Lu=JqFh$qoA zps{dOFFG8VKts!jqs7o+83^=b8WIYRCSvi7L;{J7qQTJ8)8QDd0*(%i zrGZQDF+$$7crqS`q9I|(jP$fI)O`iEDaIQfMLW!)o4bj02Y9bM1v79B9=@*)6=0~nP^B1I07^uLr06n(UTc5cm@I#N<@?C zF(g_X4GK?WWI)pquxLCZ1B!-##gR$0M0z^N6GKA_3qZ!vp%|bF8U`{g5kn6F;i_?1 zMid^_m4K#YfD0Hh(%~@l^aKo=0Y|3AqewJZMj{;@mWF^KlNcD$cpN>E7DY>djYXoN zM>FE^bWk@v><xJ-9W@(VRI4ap;>4wnTCiWG2+1%X#xrlA+WRr z8X^=zOOHp>z%t-SL`D>r4(fud%MplV*msaU4Mayn+Bgif8&8WO(m|5+v5b5x=7#stU4A-!up@YqZ z#na;Gh|ohc_#iW2X>cSwJ&Fu%L(|g0^~=7m@?N z9a|wHP=T87Ir~{vNT0o>wq~9j_FN%LVFObn8}G{Hp*scg+~~D5PNwVY7Z$j_H}nX0 z)CAtM?aptdNP#5?VPsR^ev}Vbt*Ce zYB$e$wm(tjE-Er9N^V=GYHSr5J-%U0j*%|A0*+>b=%GFOv`Uf(SKYpJjCeOWfKyIg z|H<8`+Wy8nSt=Gp!P>dV0<+=U`6FzMjT1ZrnA$dm&~xn<&9*2s6evpHI{!%G$fG@p zv>C_lNyJQ?ywz!}w(e>SPq$*G*HpzuEiDgvO#T2i_inPWwheDa=T?D3X6x+t*@^Ss zJJzMlXpxD(a57dRu(b7ZC*3+y*kK|=Z-r(18bR$CAuiQm)$Sc^!!J%69navGWwY3t zp!6YAH|<;F)dM%n)s{c{nx;6h$wy7bjVHiRZcj1Bc_15WFUJ+zH_zMY7dyXlKr3c^ z{LN*9x8lm1JZZu%bl+f`U z8DAKhVvoNxblvsqi{o=!cedQY$b5@w8hx165=eQ@HMZecwLv=9<@TrS6JIxp_C@EP z;~t2-pTu!$G;DiDHlIuz3uVfeyQg~fnsY4yrR#AeVXTjqc!!?F2o4kvflMBKi2F!;jEbL$gMPuz?5T>BWK;Ff*BVC|ujpz7gL zf%x<@in*8q*;{*$WR+ihC|%w2EROT5+1o2cN|_JJG-FwU>8k1d$_SK%t#9RCALfr9 z{?OXc_{6t<$Kzo?_HxthWZP>-4RwbUqqyTK+ppfE!xj3hiLenp9V5N@2$%nt`PJ6& z&D$&;=45qp-IMGvRgSwOXp->f@xnt)qwglPIQ=hdZ#hFBJgCaFfop`D#b8j_DaVdpyb%bkPJ+`mR~M#&*v;~#Jx#{1p@C@hKps+_Y z@zyu|{zobEI;Jb6?M{)hC(pC>-qBD>S^4I|mCBA|n^*7h>|Ps`iZi7XRPerguzo~Lqd7sp3m zCQa;Bj6Zkc`J$Yc(T|;DGB<1|C6k?cNTRzMHV(E?bcrQ#t1Xq2oFc@;wZ!nXx8*Ks zUk;IQurR)}-_0DS>u{nMzjcCk(A+FBmRDNMwO+v9^JXBiYm?>MJ1WkP+_ zY5X|A{7N$;YLe4&I%iP1@MfnWo|B$#qyF^Gp$SX*r#??yqjmI{PH!EG!@Qu}Z25d} z^(Qm;zQYVR8cGLFzw4$g`N~ZQj4-rdke5@_es$8hy4fc5#RWp_Ev1)?chs)rwd;Hc z=kqeIvE6mH)Y<;SK-tKdJ%X~6O;7h<`tp?bPDI~X=M}cJYua#3cUOt3UQ3WH(ZnPS z)wx~%G?~c$%!JwV%#$^}`?rkcWxdJw+xRU0KuaC1hdAfcMm6n@D3+^iEBET&R9b%U z&4*+@_k!1nTI*H5%!J$?0`!@YtSLx)YklOu08d7J=!*|OKRJK<= z_G`{ND=yz4J$L<0_|E%tJv9tRw`dA_oWHQw?9Qm+Vev(Jh7XD!*IHtYY!gVH}=+U^9D?Y72Wu^qRqJ)GhGg6w%TrVD>Qm% znCD^H%3FD#Fnu7P=-_4ZddxDT$#42x**MX(@u8!Nv~ePZpGLn0d}vOciznIM@I6Yy zIx+d;fsCXO`ldwO(kQLB4 zZ{+L0)G;O{Yb^ip{;(Gf{|#CWfwE#zhIE-an)=k)ZLhZPS+k4t+{!z0_fIZAaae2L zRAW|Um&NLeWS_%%#}(^U1rr}^4wGOVU)?mi<(77lO3(+BZC_Wu7=3-|$iYu<3r-k| zX*_ayA@D9SfGgOTfBn>&k2>Ypd#7IbPmizdUL`G}_(J%AxXwA=7@k)>o@wc)xZGG( z+Y0qs)=nsXy{^z>Dx4-%mtxYDAFl2mF{D*u9`g45EgH=#?>IJs{<#%z)CR7vD}G&h zOYEUDdun)k^7WDI8`p|X9(gpJYQZ;dE%`Dj#6xyx^7D>Y#Z#^NITRM9E_3Cx0y^Dy zu_FrpGgh}Qo=oaTUk)?qvNr2wN%`#frlK>@dy?aj*_Hs7PWKa=YFee_curjx;65Oe zu!&(`^6V4-_E)5J_VhA(zH=k59$$UmCe$o5J3ah_*$e6Z!pmxEmwne&5q{EBV3t%Sch9=UnBLOqGS$EH>O;f|n>E@htEXN5vZ zEvzCO*2Yc!KDWiQ@G7})r7H7JT0~l^lh?HWKc?+XK%o^@~6`t{kG*)#7nYu-Q7=gC)llc*|-_wwy>F(Iprp$qdt zw0?M78y4gy7|%yn7)`Z6>tZ+zIuNK-M21PSEyk;DY-*!xV3iZG=p2;HkF(!GF< znGtiAK6ZnmYu=G5M=918ricAF?+(3Wo(}aJTNc^e$OQ=KrcsX@A zZgPU-WVfl`)^zydytZzNRwBhPN(n?1zv?fOn+C=ojgUBZ@;_=9?QMlaG6}wo3D2=< zl}Cn*Kk^1Y40WgWB|X375iaEZk~Tt`s6TV%{w8YU&#!s!eb*mS=k3&`#~81ibCXD`EWSxzVsvMX+izWSBW=XaQ8w>+-!kSgP>bZesHrarMk z9oJevq~|{bnjhr!pYho77I((aTD&=RP{D4$e|Jh8*8GcQ;vgj8`^vk&#Ty0?>5GpP zOgK5L$_sY52hQV@BS(y+I$wfrRP0$)b#uISQzyx1E7bmU-MwI9s~1AZaabby6eu~f z&1f%Ma^U^Sz8t-CF=TXuXR1l7TG{p(p4L4>jvIt@UPD0^%TxTSAWEWaz3Z6r{&@ht z3BO54p_kRhw4_DbMf2CxSedn*#3Oa|x_2}CM*_F)H9diX zlu{cCmmiI~zvI6hEIn{1j8(MAMm5EVdxswMZhYd5Cy(Lx*2+bNS)?DM=S?YJV;!k7 zL$gq$dC|MU=-skro80!t_pLjkiO`P+oL3n)^=GA}V3KzLL7M%2ZOSwt}B2V0@ zxdFKzHN?xEhpGH`Otby8IjSPJvKeRV?9RT4hOGLwL!GhtQpC{rk>F&qQr7lIAKb0? z-!Rzoe-{acPfzHk_q+e{lp3Z@ll7l!7IO3Z6x7*7=+;Pq;` zRXbkNO03S?pOslUMHIvEW83 z4^=sQ{_D11qWjZNM~W;yE2@#>uuOGg*$9%|vvhU&m?}5&z^k4jCCT>pswL}gFuIjb zCQhJ2V(~oQqiVr{b@$%r>By1LKt{ebD;}a_Q6>c9^1S(O&c<=7F-WqFsAgH570wRieb=3hZXO zI?2&=yy5GS5fHKRPUz|EL&xdXyd(og3 zsTEImjqCWjUf(`+WDqOyYJ!PuR74oydC4rkz+uh;Q(_lAVqt-AZu7Bzo1DTphcArg(gufqNl7lOE98O zW#9Y53RR;-#r0|b4=qELI&6mhoQA$&6*}4GFHz_ErA(Qh@omKZ0t4n+=Wy_a>roVV zU8rFfw;5WtS6PgHwVUgqlDa4YL?-nYgmJ1k^2>9ri9uXF#|9k&y z@-^$_{um_qBIk|?hhnvCBlV|7Bit`$UvC;M>PgS6C8hMPs-Mh zW?aO|kSi-Cv8&)(+Up@V6#kf9q@0SbRz7E%*`w6*xB7jra&aFl4bRvITXvEjsDzO| z-q@{C+J5fAuk^M{b24vg%*h(0S+$39#!R}FMeJKPtci|7upamO23>~y?n>w@AKwp& zphbp^bK%K5&8wQ;HZ)MTx!_-zA6hO@$iS$8o#|Y3#Tf{C=C{um~}YJs+7d zrfiA8;R4a1A|K)PgK1ko5q})~LHXtBOrOC|-}3;OR?&(%gR7+1mP9Ge&k#Bp=d_r_ ziY`}G?s*6q2wv2^~^XTw*& zjY1UZ_Hl~L0-N4xrFF z1ddT-K-X}dKz_Zs)+X@z+*lhlHLZ=j_J_GgpGwCqyO_<9Q|6uTlqwTSXg^-SvLhlc zf@tw6_xDs!-ro@#T+bdur%yCr4hwKXh0hQt^(fM>&vh$Lx&ye<|5suncJ6|yn;aKSB)@!jkabmOvRT_SfliyUv zuyNbGVxhKt<9su<0(7@>z$C9nvRKjb!Yn6ZjDYVIh+Wsu8U- zFXfup9k2F-I|x?Eg#H+$Qr{~UXcVu)+Bb~&I{R0S{nGFEQ!%C|b3DBMh3pe5x6;vv zynV_0)}-KkF7>?>5)hMv1SlPMT1DYoMv5WeDu> z|N5;KIXRcpJB%t!eAo|FXceIGXoKKJk>pXkb+xfl`^{O1y60od30?MEd0*mn#eE5# zOPst{w?*w4jk){JTl#7V&!H{XN&k#NUtM@Jl;!X7yS*}oUa2djyr-`uQic7$o4zT= zrW0b2({$rz6rjd0eK3+53R?xxTf>dtOn z2r}~EK7BK-j&p=PSFA(n5cd)Co&Q_t^o3jI@9j<(S)idi%Q4)zaK?w74fj8!!<24J zkt?A-59p0JqT9kXm+I0;;djT$+u==*DQN|XTsS|^&Bri9LKXfR!&IX@p7~s1E%eBh z7kH|9tE4mxmNvCN`O6Do$ME#gOmPoPz)cIY9hGsqp`FuLd^%x9qa}k}D?Xo-h+f*) zwYu!bCHUG}he>!(bQAmqQsJj9QnrKDF@9Ds!@E*um#A{auk-x7=r4I5#3mFY7xo0_ zFicJby`%QU4qb`Z(nWu)co7AbsotW{hkcQ{`X7f}oyXWPOO2!~lN`UJ#o_dQePF*4 zJ(blu;?FvGFZn~Ejl;{B{ZA*H#uws!)$E8(a32i)p1la$9zmX?F_XZk#zh^ZlGIq+!^pbmMQ6F`Wr14 z%00_ReWz~NqbryMDwpriLU>iRd_Gg9ENvuE5-8z8G^A&fLSZudI*96vgf)k&xb-t_ zix256JUuR6co96Jfi#K;EdpHe$vUnny%%c+QhW&Suow2D8WxcxVnTEprmB7rAY6?x zuW-evmZRq&E(u|MpfqHU=neX2Gn0{M7$2c`=5xx;bv!lJvM(paC za-bE0!!w-4S`-c0@n>7>##^_f7(uaOb?O3@TL<2zc5cmG$gV!cnv#kQsAR709>t)w z1Z9GxRy7hf7-&F$nN(OFA#(FH;NZJJ`A73oWHfrceUjFvCA?oYUHQ(I) z3YdWQ_EFSIQ!Khi4|`$LchFQrSPA5AUT=CC|9k%*le!j+KrUf8%Ffe6as0MxR{Cqg zvC*W*{?-x7d&8X{^BDZx*sH#Oc&y_@LH48U6WnSy8S78Z&@I|9YFRm=RExZClYG#g zk56BkGc%-BAuI*enpSA*w7B*Qe|6>kAkMELFQFpyS02{pW~;;qs3nMfht=W|G(gBD z#lL64u!*yEI>q+6^CSSDEbh4tTSVJOMpj7*zhqV4V!i4dLgQxKks))3YQD!%)5`D0 zev-KI1Ls0^iYDGlviN)1`){!WWgoD;RBnxC{rc6W&zCi_;#eDP7g!m7D9$Z<;-Nm6 zeV!n9`Z61Z$18%%Rv}59XkZNGXF-SWv~H)TC~XI8e~nk2p$DAvk9Ov&`M(N;GI9frt#VeA8^qRr&|8k5 zhRrYC{-U66!PaFj<9xLk2uzh&VKUOX_&QJKX96U)ss|gq2jeM<^hil{S z%*njxl+*5UhJb{j1D}($PC#N!D?gYx&%TSyCVNW)!4$W_^m{1CTFC4JIX_cs$C<6^ z{e^x}sP6h5{1Qyt5e<`oI9CTOd_0<{5miEjR3ckR~eSh2Jc|kQM zC)!Q2uq)o#I=_Z)DgACeQ$~WcQMA%GG>x1&Gf4S8(qmfQIcyIKzv&+-3rDM*KODMbS;J z*5cHJcacMB4I{pv`;|q$Ap4h{q{(Ntst5i-hiLN}rcGxeVk{Ihxo`R^U)!X3=OTVR z|LqYW#H+wGFr?I4E7vlmJr$|y0s7cuB=;+Op7?bUook5Cgf4|M!TkW7KP)y;N0-TZ z-MhQI22-0)DRznEe`H2JcPszgmq-$XMM_v16(X7#FEjQkI1@?}(2sz{c7T^FxJ_rO z|2DqLM)!+VX70y2Nr$&KeQ7^TyLnj%ZvCtQV=)n0N7hO>O-&CzEo_`urY;JP0(V|N0ZNIh@Zhe| z2uXfw@8lh3=zwpD>v~v2snh0<1(<3CHJ?l_4fF&M0?Qv0yAq`#>FTLvvN&)DcI zqY(Fjh_mhE2!E)Imh=^bk@$7>F9GP#gq1YBj+`Bm~bXIy%>4BR?VZ}PpJP%l)e>}xt?-nXPO~%AWXAm&)u{K*RcWi+=!Fmj9lRMz~UF|XU z;p0=U6F($`Lx&ij`yw7{*kL5awD)z4TSH}TYoDRAb?gTDwn(~$zCR|!_nx$+2f^p3 z$K}aV>0KMdeBsM)kkH53>8MuIl2|NWY4KrFe=IVHKfUu7`njLA$t9!Xh`1B4CT*Mj zl`lVa)hb{4T5Fk?_0Q{Otjs4;GU92NAhNJS-C!#J9wc;z?ZNte#UMv29-6_HP+@@vXoMPg#1eK{kNAiYp%JK-MA%5 zx9xRNk~I!qt5pc@oRaE7%KYLlR@@PN*}cmu-z&VLzWmaFEyrK)(9Mr2*vx?NE^i zJ{3L9aUY_ZzLF3k%|(kk*Qn{6o!-6gJ&NgS)05r|Lgkp)`RUd-`P!v}FezcpD)VVJ zO1It^vmXbU{3vUt*wBgeLnc-IS>WDrHsy2R*k#rGlCp!0b6tv1Vcd#G3g;TiDRIIq z#^zEEjZf1pJMmwJJKS;71>nvgW1k#`x`ply3AvAv#XfvYHRtmbZ`4};mGWK4s3>VB zb{Tqz+SVvo8InTDs~=}+?6^k6bcrgtYTp+gcH1P%8-4Zyszz7sVgO+%%p zrH9&iI8`#SFY#h#1;7`7G(A<>se1Z$A2BtcFjUj=hTU{sVpX$X2)+DO)0W zkOg}nIstceL~usq0wbxt^x@K)lpXHeEOXIAgfMl&N_QqJXL%&zPL1;AXf?*r_KYnK zC6B8x5(e+_c7jpx>Cdk`f&E0^9zHO)1j)2Yp}iQ}|Em3BZl%haJ;Uy){FBXKw9w=I zm8Q!_u4JXay)=&(KYI!CAk>V3FNbIr858c5t#61v718)As?KumIhn#^KH=l_O3Z>H zov5Fr(5BjCB`3&U+T>99T*ru_Aff5`ZzJ%Hh{t}an*D>^Vys6OID>zSEJS< zmi%&q-aMU^-2CnjRPZaC@%s&bU%MKo#d4OI;LZY}#fi8}3gf61N$<4p_p|tZoY!)Y zqD{fby>4qhjl8>aqp)<8hQV9&>Ab&r_t!;SPcxl|SoS0|&L;TX_tf5_SLc+LUA#5U zicQV04xhcXo2d)9D0mcls&C+gPxw{1ZG&R?J{vm8+xH~KuZcpvX*hNtW&iH`YldPT zIh8T-n1dS-yKI@l*6KO7!aayFlr+Rl%SEa0KN`v+dMJ0`qj3AfQg3?kSIA*yfc%ez zRXqDV`lc+t`~_Hx+h`3MV}TZ-n32A}E`It_k~1`F@d&HO-eQ?vbYH<^5A}D~ z->O~Xs1w-vE;C8fX<=~=w~UCJ?hWZx*-{0>UHm+=Wz`l6yx^Dv$;`wobFpMvZXkS) zq3P?!C3@km#r2fg8N%l&bWgZ`d>1CehCM~b;w7QIduO0nB{!X&Xg7}bA}ucXQ#r-y zlQuuXN&>qH{d3I^FJl3vO%m5x*oa{G{3?6C&;P+HxdX7>p@}Tfj(wz!oxt3^FSLl5vNX=jPJ0JWYS>k)e&9h@&_+t}o zcZTRZg)38-*6Qa+<8@6JBa4Nby_qEIth7VDk8COJq$4N8tEL5KB8y4T!-aK6gFoSk zS$hq7ab99OWZRL12Vs-2 zMJzLOT=8?e$1eEQ-%->2l8-Rha%`k%Q7(~pA`Pgi-535%C~bf}&LO13Sz$ige7Dri zzWkZ-L#Px3`VbL%8L5$D`J;}lK0>2h+ki8txQX+}5BXOxeHiB*4*Mk38m;1oVdtV= zGQY7K+&Y(&VH%HPt?f3Qpn1ss^;h6t*98y-A3pd}N=gjwN*}g3#*7|7Lux-kG9zYT zNz&kIDuftV{GpO-+r56?|H&pl>NSj<2MtU&-bHGDaZhMS!*#?_A&SUCz(0a zIIeb=Ffx(H4Y89}bR-OHUXwH{g3vhhK7QKrB^>0mCA3#ax_NW9=^{wAx~JZCVmvL6 zjo8E=XR|gPxwVq4h;FAjBwyu6#$GtJt;}y*5jKy`imvB>ek6V)#0_Ek^I*~P_19uq zqMt1hRMq8oey(Xl?toH`S5wlz-#jaGi<<%uHip&oy^5m->?jGS8HUoyJVhUKqO}E` zH;ri+>h+Aiz4=zXSCJm6&VYxwho01Ahx~V(k@A+14L~ zrM7m%_e{2V4c!axk-~_u9mXLPKvu$u->5tS>VxHHLtu*uIW8b)P9#?#SJ3#=t1qrga|w@udFgGmTBH9^v4T4 zgM2p2!xp_9BT-jGH`UWUm(A=Jc%gHq2-V2p3|fUKfSHNkslh6JqMU*gFnJ&= z&7%_P=Jj54*{1j)#`nISd<$NyaoYONkC?!uBD(!nr>lA++e)F|>i8Tu{qTE#Rni@) zmc|B9Q>kA}wr9ld&*Wm&YAB7HKN6q`Fl>M8`LaR1x&ULAKqGY>d8i9zxBuidxGo+{ zl2*~IdW&f)fGd64*#fmF@wH?wqS^?e;8Pz_WkW5m3pZ0sGSwwYs;`E0JrfZXzByyU z}sVJ6F8vRUSdl>4d>Zk4*OYG32iv9=cyrTiXlB zVuZcSM3@EL--X^zhMNYSAD_qPx3hT7b}T&_UPR-oR<0~fqYS7Mz|HMC)ONo8Dzm2d zk2!k1{<`PGcsuN0aD!CfcP{drgS#=(uXxj#bmVGm!>sf`{J-~qNNhIdO-xsj7?r3~ z*#+%5tSV|Z=bFzK_qAnp#trfXs;Mq$YdR~5&);;}G`Nt`F=%HiA1B-^g7V|Sw}+BC z`de2`^!(y2v&M2h(c(w+Lp9zjWYd=(`5r8ekS8Kcu{HVPR&(2qhC-!i+LMx%Ke1^qLD|#N@QbII#?|}2JcBsQwY@-S*%F^$?}Etxz^wP+ zx@A}-ADs4Q@K*RJ3>U#N=jOPV^z@d{>?+lNOXhdBIzp2QKg^>X?`nHVqbNUGk%Nr# z{&*dsRO?RctDtioRrB;QRZ|~p6T@aVvQvbk;j);Ql`%>wa$oXIBcu`IEME5c$raud z@AH>Z(h`Z4mn!-a-7tB>RB(=Z$=2h~!@iJSzH@LYHMK z{C5euj-I|whM!8enZlHzL^Chca7e($;s;?FfqWDxu8h53C*v1Iv_m{nJRF?fAy z2#J!YPnjTKh4|RGg&$Kk2WCkpd|8{ny&otfXf)87hAsKf z|MuB5IN(eaM_2UR?!JqdK!$HRj<4+CdjI|RU0n`V-|U=H1`$H}{j^TB6-)8=^t?Ma z_MHZY%hbnd4%}``bskzvurH$~=0i5)C zJs0#yy^0kk!5-&DAM0^xY*%mBCA%r)P#rB%JhOqQMcMH?C2qTZ%CtlawYGGzt1aFBpyZE69^@CMbj{xyO>yu{{0KO+4@zN0ChM^ z3M&#(Ex_u-j})`NdLBv4A5Jx^Po2M&yD#C}#Ankz@G1YjSuVM6^N6Cp#i_N3;heHc z+Nh>?j{CTMLY?8i8E#B5sq=j~P&?`9=jKW(*Wh~xvDE%TEC$yH-cJ~W3VGQ=Sql(H zG((zVET&ph>weNH2DMMhR3t)oL!Wz~5kmzTLK7x1f4q1(hfy%bJFwMC&xu$^8s$2E zGEHMWC^AQs8g0_Jj6LX3YwfD=eD)qk3bJx9=coSaDLl! z*dQuQo)|4(p_gNmIGwV;G9CdNjX0Mq?phZI2xPh&JEtj~_6iY^Or;s)6_lf*IID7| zYE_!yNHX>K#0beLkL-(U0KPA;xyf#Ey{kms^6B$Nq)3f*Nabqf&yK)R_;xIB_fj!h&~|vZof85GoUyKO~zz zEtU`Wcm6qALo=UYjL5E`elo$w-cj0m{ByC&NuqV;UDTV~ezRHfSKc#@-5p{o4UT}3 z!@2&eX8hXve)m)Dh?}4h0`iJ_{}>i=W3=3Op67`}Mio4F>g$+dK@`Rlx=BT#4FxmJ zR_900rLW!ZJnopQ6LIth%)X3R3+DfH>GL}-QW6WkGCrGraoGuDInC1l2qj#F{S-r$ z(0Yb0%OT2F3vZ|uVBszSCB&+ODlsKAiC*+K3$KE35t5N^(kpPWO+5avJrfd3Ew`aO2Ik=f)p<<5oi5!)%>aUo#1`S z52CJ@u%E(aY$7}joRGGC&UST`G=e7fTSj@in&C-|eW&qJa6H+l`EoQ#f}02ht}Y_@ zkzMB1XGA_atcz-_vXI!bwyYPSn1nqO2}h@!&5e|kPt(BZg#Se(!?OG1$wA$?8cUw> z({W|_mC@)Yf!JfoSVVJqha0BQ4ZRQkZU{Z99cRg48v`kGdX7E>)Y9ZZ`0)3?frGe2 z)m7?wA`#?E{wU9de<;}sG|r)DCfmPD%XCV5bxB>>kmmAKAEq~3sQREjW_3aoHhEKp<`0-UCOk+YIri&w>I*`IIB#~XqQUw_a|hq!!F-(u8yoqo@| zM?VuIji{|hv|srfmznO+wzga*e-in|%Vh8)@^`P2MOvPva;W@VWT)jVD}+kaxUL23 z%PUi1R;HfhFRE_jb(5R(|9k(By)SV6m99XwyF)+!Ez7gdN!sKuZSdV!TjkJ>318&u zcMZ?Mf5t}nrw*KSOk(vG*wDIHk*@ppQMkis8UNfK&~JUqQ-z>DK6GyW(jk$%3)`V4 z*piu?-e6g{PyD{gR^)`d=4bm`SWzsuHbvowAwTnXvCpad;>jgaT*bK285^jlTl(xr z-UBLR_!|hra^V9qK1o(PXtHq@`Vyuzx;6feY_BS2e!!sv0WF|zBa;rzD`wL%FVdZfw3!f6l>_eSIiDknh(qC~U z?i_fSfiucwnL&A;JNj;-54WLUZ33LC-kmSN= zqD|`&PbmwRBE`NSEdKlFQDaqiIP`X58vkrh?6_K6M$YEjz05R+3|Z1{b>)`fZ!_rY z`VOP_-G)dcJ}Sqf2|}63cqoDTFh26rQ5*BCQS|BRU-VDT>?6JXuzxlXaxttG{63s} z6M(!(^Q$@c(zCkTknPR7CbWSRXL7Lp{_r#&YH6Iw%n%j5XXY$o9N|#&;Fv>2yND}J z%5TuTe0CgyGCxdV`U9`2OJGJkzpP%5?5+j%mn(*xfV~J)rXsIvlbkwa!j*X1(Ch5&Sn|A=Jzy7@zoB2ncZHSWYENj^cIGjiSZ`+4m?TL-8 z8A@(L^7-y79ZBb$UgJAVd+=+Oy$v?l;jRQ7TY76IRB_yNWCzJw4gq}*0e*Pf zONA<5lm^Chlu@N0?uxq3GAQx09KZN{zPz!W#6n09STEj3Ob>*>Ye@V=;6QK4Be}%< zc~|FA=;3aCEXLFCTN{#oOiB>$JESHtahWNEm()bV!`8v;}sJ=!=2xb*wp@o*i z;Ipg3cXXdv-V-=PsTUbqRykwCz2Q7V?kuCBvbJT)T6){Oj?BwoeGfe~Q7|Fd&-tPh z{=tn-2a-4;;@i9HS2zoTp8M6#$kRa0I2k#vlN4>Uu3CiiK)>!ErIr>HY4i81TYo|$ z*5?-9z65;1r6DX-o_VT_T|CYi#l{^Fu47?D83~W;;@nFLSOE;D)gbEh<0_WqP!DrMJV!+d zj@dj0l8@)rChRYcw;}kD@Au^#~-OZJGb7BtHxnAI;B}Lx&H}Fbip4cvHo1zFJn!85Nt+ z)hR%j&?g!Sdu6c;Znl}i=zmiG^^)_P`+0X#I@(MB$2&USv_YXtsz_R6XqV+qwz^aD z+sSiw_C$Tp$~0$wk>|v!$?~{n*W}%_tLuqEUJQ2^teufw#i_IX%Y>F$(~uZu>axN| zAE?Rhh7;DK5qntS&MRi%auMkJ;mtY>CQ-Migq5$wPZaaPB(kxUoIlAa#kYp&tVNX> z&PGv!k$S)MlM2n4pb_IP+92jf4}tG70seC+IcHaj2K{6TT+^n+51mQ&3*oLSc?ijDN@d{Cxch=Fbf*{dd%wbR^Q=T)I`saoSQ%-k*dzENXn}Mcpbh z@@yq)-vX<>e{Txk3Z@-dl81~4-*@b-cQ-5@;?vZ5Zv67dgdnmK;i+2OFSqfkiW|B8 zbRf#tVqW20rD%jQ)TB(j!&ETKgC5sf8bAHLG3Cn#l%Y}k3S-L6k@@8a?YV2&{Dvyq^49xg0j8j|Gobi z5ic?gKQ>$wCpZ*|tQo5!oK$P#{(y?tDMygwqVuz8Bwd#AVgnc} zl1sAC@w`(UnV`rU#kA=kdcR+9UuBJk3Vf;Gsgn9YrPkVA(3fQScnffRzq~$DYxyVrjnIogDz$GOUn?vv!u&tH zBgAhf*1cgvox4N-`T;xJWt9QpgeS>k}@TH#NrwewS4nAJgjiX5KTF>1-1 ze;>0=`&|uWBUwp$;ux0{O~_^P%3JBfke8zIv;#(32v zUA?2pAujPS-?1$=;}E}&t7Nf5Cvp_V`h0`a&5zOeFrT5NJ)Uu7$J23IMQX$C^tLzK z;*0c)_;m8CN_p*QK*$OHpZo6z5C*N4Uvb0UvF1e4Q?D(WOpd#%`!^N`-UMmztw(-2 z-Sy%hS*mc{NxY5>7 z?@kZ>F5a^kaxQq3Qa642#q%+RtxC)hR*IwTFNq)YULq(>XXtgeCvo3CVGEY0U&Ur8 zaQ=#VMG*cWPBHv567Eh(^!;F2l`>v>#@DL~zuZkWj@l}Uru^T- zCOh>hGycTPpx=Nvd7p_<4BM#nGU8YBvh)GlsQ-ribt+PHL`opPSZ8acd15Gfg zCD3b^!;Ql$KhRz7<+pDf{u@hH2r&iy%wFT;asYcph&SibV679A$W}-zw@ZFH@zg3VwIsH z`*PysZ9;~wHZr7Ixvv)0sAla1+V;!Q->E@sh1n=;6v)2`vOjCMB-Lw5RCpJ{=nO5~ z`aYriS$}hp>ghfvFOS=(crgEQHegl|=QNtexJBTt!`!|r7+TAWQHrqU!EK(_y=&i) zLsR@n6tnBe<>dtRpcr+s(1o6FPW<;&vX!J(WChFqn`}${I-`F0=WGg-*SY$~@9P(r zo-lE6bd1kMFzHB2Kl9yBZN?SGyT7)r1h7~w1fuwvQp+b!rYX$7to)`S>v$3+av?YS zNn=VV`P?l@O7!f=q`C1y*k&HPubqd`Rut>ru|6&*#Hhofn$Ucnub}O3duY?U(Pt%Vp^s$`W zle)QU@J?VKg?bfvi(o92$!sNOYFR|2{_p*NVtoCXdGNuN8_z?@+v*m|u9c ziR_P8B)%`n7!Pa&|KCj`dYs@-)e8m2nsEM5`aakGWud{(k zwR)@mGtjwL(fG;wapnnaZE#cV(#LKEc}hRqvWcIgbEULQmN)y);|+Pw2j})7$T0NO zU%!o@SejatsJZ4&KTN>(***TMCJO2yneRamB9R;2Y7gNUE74i9{qgfX8KNzz#<6$@ z3)*{2U5M(XVnP%l$AaYOyWnwt!<|-}XM$Xjp@7eIQ=Aw-hN~E3?DBOU`A4D{FuqjaSrEU1Rlt-!-R_n?j zlhe^9$o02~>59!K6=TP$!_1Uh;GFM>OH9uKkB+i`vj)0S&YT)Tia@&-VxZZ8QhQot zt2-K3TZancvd6%)|DB9;^UcA<3|_yc(U^=hf3fIUCT_4;M#OKc9X5tQX__bAg=^>A zeZ;f8n<%TGCptN7G1px^*xxKDMDBzx_$0Y)ordYm0cE~3RrqeoICr0FUT208^1q}7 ztHMC@#|J9fQ&qe(QdKWTEFQ5CRSd%a7-M2i{&Bty7Ufp)KAgH)a>-}J_SS5#o!yQv?;Kcmtt}Ir{13At^IiO3U-@E&mtq5$C9`SqEQxvub(C zw1mLe(vz9B`tY5)1QyvDM+z2=v|4v#2)Pw#gm}>?@KA_$7uMM;Stw0;l4itj5kzoGc^&0~g z!2j;!-)El)=0OUi|DXbvfEAz(j?)2jfg~{h6+}HiA20w60VBW|Fab;fGr%0M04xD3 zz#6atYymsK9&i900Vlv2s08~N0Vco;xXwGE3bb9ooGai4xC0)5C*TEm1Fv9REbtDr zmB4ys;NOE+1=N6lIifUxe-F0`tcw9L3V09JgBqa!Ndxy~2Kt)7F=+ow`WOe+{Yy5g z3Fc40SUl(_{M!Sx-vb|jfB$eH07#%1@CEaJfIkob1Oh=oFyIb=qUHbj_u%ybJ>Uo& z69di<1tK&61Hc0RiV?#D2mr`Y1oF;+pAFz&v3pbi4L}Dl089W2zy@#tT;LOc2jBw) z03kpGd`d%76->3aA0n#0c7Z)$ANT_t0EYl6_-wqv{fvVM0Z;&x z02M$D&;Yam9Y7B-0E_?=06wn&v;uy>1L!;gZlJvY<`#h^U>R5i)_`?j18@WTx&t17 zC*TD%fMZ#}95Wyb$N}BEe0qg(=zzJ{x+yD>23-AH_fB+x}2m!)?2p|fG0pfrJ zAPGnT(tr#Aw*OBx*uMs-1)M?O0r;1L@Lye?6d(t{0&B7Vtq1LDF#iEWe-J^wssBI# z{|a?O0U*`Ye_#NR8tXrB06cICj{5;NssZbtK>ry?1!J6`e+kB4fg9iocmr;MYv4a% z%^ir1VEqJWPXbfGG%y3q0&~DHFakgWFaR6?3#b69fD)h#C<1Cg9Z(Nc0#!f*&~MDGe8E${=H{u0e2t>Tzd&n0aOB2 zKs8VU)B<%tJ=H~?gDJST`;fG{8ehyr4OI3NK?0#bl9AOpw(a)3Ob04M@VfHI&0 zr~+z$I-mh)0$PCfzX95AOKuo4Jb4CpC+)T8E64ofh{n%4eS8Bz#dQy)ByWH zEnp3f`}YME5wwwj|9v-%0>}UR{wN3pgKJ3!bKikYAQs2~W0^n}kPZC%^83HumWrVJHP={0L4HDkO5=@rC{$e zpd82r*Q^1qEfhp;Fvkrd55NoX0sMdfAP5KnHh?W)2iOA+fFs}pI0G(#E8qsCf%B&S zyKf*9$O5u~93U6S1M-0apb#hmih+4x1;_*E$Oj65LI53%`2qew08j+Rih&ZK6utsQ0JlIJ&<=C}oj@1R4fFuLKse9`^aDSE z0bmdq0)~MRpagtQo!~R*0=j`7pcm)^`hhGU8^{4-fjA%@NB|OnB%mA!1;T)EAOeW| z*9Olb0(b;_JOR(Z3vdR;&VdWy8|X&?(ZEk|%m6S53<1Ny2rvqa0pq{~FbPZn)4&Wc z3(Nti;2ej*5r76911G=@a0@&D^I+Y=|3ltefVGwU4cjLWN};mUl{OV>v=pdQTdXZD z1q!6LLPHWDTOgD`Wxeatb$54n@4CCYYuDZ7y?=9NP7+G{-{*Os@42q``q;hC_?&V1 z&72fofmh)*cpct=H{mUK8{UC;;XQaCK7bG5Bls9TfluKx*an}&7w{!~1z*EA@GX1? z-@^~^Bm4wE!!NL(K)QZK{SAJHKj2UJ3;u?Gz@n~BML7*lhcn+zyTm* zskCKj!=`P^*edN>+O%rps7K=OWLSi~j4O*_A>@IKEi%T;g4wVHN@NVBH!g$&U^VZ)81)j^j2~HJe2?9afKjbqWnQ=p4%QY2p&kV?Uml13 zvFK%8auE8>a45*wek*pjL3hk2V*Z@CSEFA6^{^6-fkgbQLfr!U!z#>Q;&(av1oTy? zXJS5yI8J~s&{t#U1sCp>sJFu%AY<-3 z<`S7ZE=D~8^)l2`P-U)=x#MX39ScWdz7(^}BbTGf{BbIJnKQ0IzXdY* zhr>hAhW|n+fOW6{%vxnU?gNPPeAGdxgJB2^g@KTb-;Ly@9sNx7e$;31`!LAb;cVTvMD2>67svYvSXHer_a#eOgo{Vd3X*)Rp> z!W@_fQ(*=yf)ZE^OP~}M!mf}H1yBe@Pz(!TJ}iYYD2ED|4$~l&cl)6h0&pAzp$@Jm z{eAJX8Tx^&6Z^yA&;|GXPzzBPKrs}-(b#PPS!;C19D==|0hSS;>{FA`m%(aS3>8og zRZt0wpahn|N|1ff3RntWSPs=t3JYNge8u~IgFf&Rd_5$y~Oz{ya8{6 zte0Mgci=5B>#MKPe+9D6`Vc;aFG1E}U%&?->oQrNy$P?tYw!}tdhZ)}7v6*S;XaV{ z*w63_$ePTo(|$yMKl}+=6`=^-%Z{ ze}|!N#re>$!=A*w2b@AWWe?tfJ_M%{*BNjooCRmYIdCqV2kY_kH|k9= z3?7FEpq4l+*xiTvEcC&y3y2(J z6Xw%!J0AAM?gPwcp^ifR2D_1{U!#sjJrDcc(BDV6`{4n25FUbu;SqQg9)rh0WZh4~ zQ*b6>-yn{s(TiOCS$GbfhZo>QcnMyHSKw864PJ*g;7y2?ckhF_nY5%pH|Pqf5aK=S za7%!BSY&Fq zLLT&oU0^oMfdMcO(jXtwp%)B;0w{#xFc${FO2~o=m<-Ec1uTamCEMGW z@sk02;eI9IZbmPE8*!U~ngcE9pU3_Q2%~RDy%fKf!MpG&dM5vKpdO9;v2Y~jOEF&# zSHY>6uR+~{+i`Fd<|{E@4YCh<2p)z)AF0n*WX zAQR@mJQx8x+7DFVwl8tDp%%b8SOA4E9{byQ-<@y=+y$3|AGg@G^nUmoiQOnLbG6LH zPvG}9)I&+vVbIy!EA#D2{PDkjhaW$ogOn zG=R)Y(ns?_`n2?A>BrKCrTc)gW?$6{tSXLP zp$aC!RgeW&!bGTqbhrrr!%&BV2S&j4gufQ9gB#!zcpYAVO}O8Qx(n(|m<4$-8>YZq zm;>`*D$Iaoun0nSPlyz2X=*gD1bsJf?`+z^I<8JK{-@FE=-4MFc!Qp4ys`S z^n_H>>4#bfz;O_SI=G&EABdj=pf7BOgW(|P2Zz96a47VL!=Ve|_Cqa1T>!;U1V>}H z1&)F4m_x7^G{7?6b2)7~8GRY7hQ&|;Z@32@f`{P=coH6i$Kg?U1Rj9j z;WxN}xZj5l;6wNbu7m606ZjZzgqz?~_zZ4_Ti{~K^l8%YC2Ekk4i^>sW6^($`W=kH zeJqTF<=7`+_a*wRsCUCXa4Pmy@HX~u!8z#PLwyRqf)`;t{?@{+xJ`iru=^E$hu`2c zI0E~_;V?J~u7V@s2-0;VypNx2FrSHj9r}}C5#~}@40%uv3!w~V!xAWgqhTprLD(+{ z_atd~6SWa_8|r#!!Tkr+PvJSJ!R;2*+u&As7aoH<;BL4b9)){=X#dMHffES#1p)Wu zJ$t|@=&ynX^dZQGQ}J^KoC#;a*>Db=3+KURsOH`4@p~F!|Hgb141>qv0jR_6c+@7; z`%s^S@6rDVT?l&!;WlB%|NqbI^A94i&7}V*)DY?33=#C}$V(!0f&F1W*cT3f&2SJL z2ua|A1aLzQv_KFq zLLT&oU0^oMfdMcO(jXtwp%)B;0w{#xFc${FO2~o=m<-Ec1uTamC<+uZ9`FNgV=8Up5!%GJ@D%2QQLjP0 z7EZ>G7k3x>W3jJ9|2^t=us3#l!HMXvMqLB7a60(lN$fM=P{Qm5zhZYK@om8FX4r^% z2KG77g8q5z!l>=2m*Vd-co#l}&tMz82k*lN@F9EzAHydwny>-*h4AMR=lL+Oo~ZNib+h0$xDh8U&@-p7P$`lwLmK_t*T@U z)-Q7Si?E#d?SdZo<0~j7_4^xQ!;+Xu29rccbZ{H3>=HbZ>f3Z~89Y z^fYgJFK>EpZ+ahZdS7q4$D2M%729cESAw@|Vh{pe_XMw-YRvSe50~^%ok?DIcduKu zl%MxYE=ZO1ibitq%uIKpcuTkSuFTPi3GzrZ4JEPbc$e$Y!A>EkC3f|uXYksjq-6V< zs1=u16SQjV-P+t0)$KZHMuMxKqwBAAsWb}PH8oMfi9h~fSX~Bgmp6TgH@%-XePCt~ zH(lV}orcLjdhFPl%J1&9@a`^C{oP%r{=26}1E)qqr@EZrsnPKKbFwD-R40a%zS=IO zpV9O;DNE^Z(vvd4*d>{+n$*+wPs3NGNO{|;6GpdpSCVPJNhaAzsk(3yTsjt4N>8tQ zyw{y&N224()+S>#s;Qfl38aDlpP8v1<~>eY?G(CF(j1K*Zm=?*Qqr6RrBrh7TQ<>OC<8>+%+i1M5 zXuPgyyb00tnz5AJoih7yY&bJy2P?JKBo2OtMW~Y(@868POO9Q*1@LCZ=w-(%n`p-SaHn^DI3oTIOXs zVoS$t>8LFox1}SubnKRn-ZJs`(C_J~)m^ljW~(m!UYCBaOTU+iOr_SP-|N!vb?NuI z^m`M`D6ah{YX8i|Dtw|&ms{u4t>4G2qTJp3eQq7zt;4%@c(;C^Tffh3;?wzb>wLO( zKHWN>Zk^90{oW+~-Xxc?FgZ^$Sx+)~PcoTLGPzGOV{lS}j;D)`ri(G_{B+UzN!ISk z+C5pjCmVO2-(;QNWS!q+onO;vl68Jfvq{$ZO4jw4EDIxARdR2w_R*@$p<*vHsHg+9 zI?z_T>hz@;Ri`sWr!z&TGexH}Rr^cT{!+ESRP8TS`|GCtbvLT^-(CC9HmVMnZR#W2 z)JL|dk8D#P*`_|SO?_mW=9q2TW439K*)CmT*{*J~a1mIeW@bu3^S>Zzl60svpo)`} zziOmz*U@eTFw( zO`mfK@yuK`1)<2u^UPc|aXd3OQQO+fDKX1vB&rNWqRKcVstiJ+%6Rw8T%FQ`X7p0a z$Y7$|<7jxNK|nW_%B#yWQ69Nlc8=;Pogcln zO7OZTdfoZ;6Y3{e^%Gq66B6quB-KwyuAk5q8>}qstOUTpas#eb7r=`peo`P6xgK1AU<%^oId35C*|u7y?5f9frYh@W2Qd38P>%WWX303*%rsNXj!|B20oT zm<-vF1Gz8-rouFs4l`gT%z`|a4Rc^F%!B!`D^M<00Te%efz3WIA1qAC# zsIJ%U!&t{UHPI}&Zs#sKj1RHkLivB&v;+*vqa&R4EZrB@3b|Ndc;4K+LiY5mh#-qRIwD zRM~xqDq9axW#1ucU$Vjqmq)TZhRP#d9x3wZDvx3E7%mTwJVwYPRURYdF-jh8c_hiB zzdQ!W!zGUddF&#Of$|t6kHPX7B9BCQq{*X~JVwhSLmp$~F_r>$yX2854@%tSPLc|7@r&h6AK^`(KH=c5Th3g<{Lj?yXcMDacjARPNr|o$msa~} zb-Y%M`#^1;sMSQR4$vwRofL2SP;Ywrgo6ifIkU)qvY=2V78JJHMXUCL4dIF5(p=SWN#_iUF$YsQ2_6Iqe)NKv{(^>nMJZIi0>eblqB zdiGP#{^~hEJ!{p|ubw?!wqhw|m{x4d;kIeGHmUa}47cAo+*MQ03JJl#||*Uj&p?VWrXczlpSuA?KaAG8)dtVw%tbCZhf_4d+BR?>8sw5;$jah z1>{On)~MQ^T2S`Xf>PD~KnA#83Ep%qJL<|%hcIauuRG1_?(KE=@w)qZ-Tl1o{$BS0 zuX~`^J;>`G>~#0b9RuY0)H?eV%tc-mK8EkM+98dEJw} z?rg6+$Lr4Zx~F*EQ@!qKUiWlbjTR3mk*l<=E~ZH-iKy5piKu7>8z-kB4mCDeMl;!H zvYl>6^D~{1ygOPq!b>B{a^yTNX9h^l94*4n1d7L2=ssGLU^IzF<2ITkqv>Ka#G_(i z`=T`|Mw4nZ-HfKY(eyByo)b3j?b=)uJctqf&_u-T@^GofFRIjKvMYiAj7Hi5Htc?F zua0UvxF`)31;W)}b7nA{8EnZ6uFDLzW(FgA&YP2gCQ-Tt&xLu-C8(gK6ZLV#X#IcaNQ^%@Fo$Gc*b!$D#U3FJh&U^D=R}g&xjE6Q@ z0J}mVtbrO3KMf%9^nrD-D~SJy){FfHXb17Xg>xzwi2i)kT~SX*Jv#w2i2XUJ7ij&t zs26Jed8ij@z1+2uKM6Z9Mn4F>_z`=#gC%i_UhZN^oT8UISrVt{M{56)=26#aV5DEtk*aG z_RyfWZ~1E6w!bzlKL53I9@&4!!I|r;j;$>X98q-i9~TZdbJb6W-&EemSKM?=%I5uY z?>TPQFAlqHpKjltGGgTJYs(I*ekFL)Giz=f8d-i{-^;dq_g3%rCx*}7`qA?Rb6?87 zXwI!;!uR%kV?ii+#n|uD&$|2M!o**DJ^J(U-^}~8%Y!dZeyncTt6e|){G9_Uzy9Tr zD_gIgwsfxvrw)E$-RgcNZA;F3Zcq2Xi@$u}z5M1~mOc5@=o7B1xZuZ@S!e82b1$Fh@9&zw@`EF<=rMEZ zkgKNrbNyY5y4T!s!_!$0|M2F*k1siUL+YiThQANE{~D{yE|H;;JZZT6{r!*qH=IWN z>MO6lBF`ZUtQBk0o2~S*tz!?cy*W?UsN(t~uX_5Mzu&s^^!3%bX|J7|bbs>8`%WM5 zc1!lGRXu;n>2}{gz51#Ele9zN*l_jWsd@=*mR6wO%o>>u~ta><*wY}@UD<+Hx)_1&tA51N1C%X<#J>hvp< zUvuqtaPO^$=8S%DzwX|)J+`*~eZxBkUe@KUv)aBp>;C&gXMJ?o!mZyta?bs`Jas|$ z(cy{PCS7?*+v2ybxPJFHj`(eT<+6FFH$9Sb`D0@fuYdG_RrmhT?Y&19o^aXA%luDt zsUJVS@1d!;jh#7SNYVk{Y}#b+7eVk3X>a(21=lUhvty7cQwAe0j^! zOCGprS>vOFK0ERG(Ou4X<&Hx~mohzk@y*9dx%SBF{-%^|`l4GFc76Qr zAEb@?LYoxrNKj@Qdq|Apm&dZc?UwcpfA5!+4M(p25%75gw z<6f0IcslsaD5;0ZvzLA;b#eEbM{bt-n0d>hAEZtOJ(qN=)XQ1rgRYah8MwLW4XK}k zgv5)aj<$wdilv^m-1t$M)YS(!|MRlcSNO<%zLz??;ne=KrQW9Xel$bs?&L9{XQlpL zSp40&QimUAl+ToUyyfLBM@wA>&%Szt)MtA_<|?VvgFm{oS?cwrKl1O9y1k{U*TGW1 zSG`;JwbXH1?#+{=p68GF<8-O(k9vNyRqFeJ<1U{ob)Ioq>Pb@X;e!(2le%wd?wKm} z|L5cv7DyWy^Z1zEr5$`V;i1*i7T&$-lyjs#yyL&_XlWCd-?(9pw2M!!{c54KjoH%< z>MQLdkoaAxv=LW!!QIkMPB`t?=cKJ{bk?PXx)H?K&WNxLHGm3A}1vu=g7o!g(k zD_7djW6!;CyR@OItMZpgJ38ZwW8amwborvQ-k0{|U;X&Q(x#p~D*r=iSCJ3>8>DSr zbo-63Nc;Np#&7nJHnwK+fI?|!tyg_}fwZ+RX9WgJdmA^*KT6u%wtEhGN7`M#O^@6t zZ7;K`^+RcYXZyx{{>;3wPb5EZ--t(VKkWHoU%dD9EBn3i`Nrp)zdoRRzn|_54`{uz z{@X5>p8nW{5AWwsy|%}1TivJ6?=@uM&_2_;ts8R4e(q5}ZFqCsNuwX#b)T!A$h~{( z%o;#u0AN`0mNSw;wnE(uK*F z{rN*=z?}!LnltE=L(4C3SiAYgb%8gI{`HGpmb5HCXWFpQJ@@pleE!0Wk^9bejo5hj zOV)xF=e;<#vUGaFr{_QP*twtId(;cNK05Q3i+=h3ncsZR|6RC*@}U zwB?2m(|`UT>!7+P*4#IK)KxvI%EB+dIivWUzmA=p_|IOgO^v%PJ7&mrC*Jk;-3Rn~ zefRv~X{%pLy+7xOOP=26o=I)b^}hY%o3B4IblT$Xr*7Ckc*l1s4>vz@$iQ#+`!esX zrJhY+*UWqM$ytkb+wJ9J3kptr?y}21U;4)%e|4EM<=Hk3Y_R{GE4hS-Wy& z|FSpUxVgEaqHj^RZudWN{`upM_~x5m2V8&s#IyVMP3m>^)tQH%b57kKd+l}l_piUc z;o8eDpK#Fczu&zeEzR9`mtF3A_R1?SPw3UFxVp5oPtED4kJ*}$v8ZYA;6u(GIIzpG zy1KLeYHdCD%aoMD#rgTm(q4S=m(dFrob>X&_kLMbTYKiO+qUg<;!{se`DfWOWSJAY zjqTB+p!~MmzFswd{!>5Pc;mH0k37=<`AH{z+V;#dHyqH?GPLp1ORwrNcI*>hc|2Xm zU3AeGigAP34fVVEHtUUFhFTVJ#_scK0T`+InF*p7B=lloHJoDmt>FEo0 z8#*+3$hqfUGW&-g{^|bgv)|5t`svntci(-$lFvWCy|QP|&Bq0UE9ZXu?VP6qfkFG7 zb=JrG_wRrB33KO`MJ~MX%B~k&5PIyIYxa7yOP7NWed3Ah_kQ@{mRn9ZA^79kwXffp zm38E0AAb19!0WF2Y~h?ayG)rhX>tAi_piHt)v6Ue*RMZs+e|{>AtVM zHvQ|aT@zBzJMW`?4m#*UPoF-IzBFpolb`Lq_t~FZb=9_lzyH3caKeNmE?lzY`7>Rv z{9T6+f9TEk-kbT_E3e$8HP^AA0DTkE^TuBrsC*f?av)~(m{S-kl8H@^P*jujg=ymQ6(-)}Ab>#zL} zE-LEft*?LMo^|W?n3$BbYw^DO4)^c6Yg$Dpv|Fy<|K{!E#-)x-PJZCwhaSrLY2?VG zEgSzS{e=pMSo$th?H3mozIgniMZH&l@WGucPdn|CbuYYd zYv6$gZfqGd=ICoKxuoIgJ@-82$?@Zt)MjUQpR;=P$V$=B1-2Pk!vvk3O39_J|QB zYLzJan{KWfT-Uj71o@9UnFFnX0|#~m`AfAG=h@xrH)KT5|Nh_DNk?brOPJK)@d zUP?j!c2&>+yT?C&|M}~;@7;IcKd!{&U53v;z#2L_+v?KW8a8^uwn^DjXKeeoe|g*T zwb$ZBOUf&k`#J_}Y2UW@=4~IwSs#A1GM=+-+a;p8;<|0yZrQf&wma{!lKWXB#=WHe zCfmw?e9pqh+%oZ2vz=dmqgX{Yy>!5#FP*rZD;7t;^wP; zRFJ>!w&FZ{e!0ue|30@IclYOA9X*=QKNnN?eO!YRcJ|*2ddAM&Tlhl4xF5z>8b)u_ zQ}}As=sQzyO=KqnMjpjBRV1(b?+y zjq&Ea_l-C2e_*`%phFHjBG%@pEwQGXZ$9?;c=L%T$D2<*J>Gog+41Ic&yP1>cyYY> z(#x%f;{UR9r%s<4W0f~&UX1CXhjuN9Gd@(bAl|%aalE;-EZ$sE8E>v$9&cW`I^Mkd zp7G{2wejXaUA(zruXuA~bG*5wHQwB|-g3vULi!J}&7M)leq3g@(RNU0%q_6`_U+qm z;E-V>Mvt8^DSOIv_be>FjUyF8!>uK33nJy{dcnR$nsH0cYf` zTse2w!Y*B1T@t$_b>%!N$=#JRR#{~6x4k{58qBw+yH+IZ>_0p78fy(-w{-Sj6TdWe z#ZKb5(7JF3A??_1=1cj`;x%@U@g<(occ#9^SA?C}8@sRgD$(dWQ+vC5??%RK0SN>844;|(i zIeN^v2@|ujbH(QW>A$I@etOrL9rBR(-~LUVhv=IR!z1u0$oGhkp*{{zfP9DeB7hZa|J7f|u(FqseTM8YWWAmO-Jl2b zg#W2Od9S4Pf9riF-JRt(Hn0EF`HX$9$?yNh`(ocqbFxg^kn)x~{r@VTvF|nc{oi<> zdGG(<)Xv&-XZ^SP|8SlEr~dnI-j_B4nMg0>0gx^F4rWuA6}Yd#EgN-LRP*;7=J#UE z=c7LXJM(uR=Idk3qbKC_660ZT3&?M%+z*$-qfk`7qHJL$y9Zmfo*i*b+s9}6dTmYL zk}xcI`w0(R*sK5EcWv1-`P`Hb9=m+X*`EK)zv|K|Pfpg9i5`DrDA?TQDGau@h3Z0n zUt4f_ur*Y-$#Q%|g01U=t)2LASwnVPG-S8j#i$v9+5A6sRulT{CMzStZGwzQD!(5n zZUt5ktd|VgEhnFyeyXy|7rTr=p;cX6xzq}@H`QAHaC0PgniXvF`6FBf*lpIVS%u1P z5zpz(mU;=%%76SKpHj+~SjCl<<&}A!jEHAkM!+-4lMxtim3d1`t&FS*5v!oIyucIi zwfQ_7LTwG6#$YpE1D3bhSKAo$w1qw4mSD4|E`%W?l9g&@RaBNQt*Ex<&BL5Z9JzHF z86IAS(JF6mYiV!uwD^b#n?N`i@id3qJi(2jNE?BpvHDwsl%*$Z2hh={T2gIxToPRo z$*T25ulhj~aIP7T*H`h}LjqMXXO}>qu9QIM;$x%yd zu*KIJw3aWesi-Wj$geE6vLbE47Awo&81%J@ePL;Fex;Sw8jJ+n#9UciRa|Xl)rFdU zjiJ3&&;=!B`K2YRi><2S(&EBu(mZZ#Mr7>x*^-}_oVN!3;reC*c|y%?!B!&h_`^+2 zzUF|`QL5D#_WK$e!jU$sA+IH`E^oa*v~J_xt$C5Ww!A>zro8sN=DemntE6K6bRNFu zO;%)GW2i0YZw$8wCedC!G{;CN+$^OwuC_hY7?ApvLL{>}S=rW7U#ll~rYAQ$cZ%IO zNI-LQ(BBrKc&PD=h-obZDAZ2Gr<^?HOR}=EQYp5W*VZ&pzv0$RS#2BJq-9uH)Oee< z%v)0JsVc5qUR+7dPHOQ~lvh?u703Lwgj=O@OcF#p4#}{uy|GPNYO0l5+}av$^=xR6 zCb*$Bq*AFGEMBFuvn+2#X?cE;r;vtOT3lV68f`euzNVmuqP3eOl}yDq6PUD8{GPUk zpeL)nr7`Ram`boJsB@ZJOKW(2C=m42hH1;~bn=*}B9RT@)_|vuWck{Oqq$8+28x`d zM11wZJWov7s4Cel+#>FgJ*;wDlV?#N>to8n(YCbGE_fsHsFbUc#B+mZQF&E$S^m;u z$E(L9?L;MP2PNnmsi&m7FSl6EGQ|=uNL1bZenW-hNrxz$IP`G*pJQRjCYB||t4M(JXHueLSsUE+FVfTQsV-SsT<(o)xX~ng+Coi1 zhB0YQ5xRDBfL>=BaC6u=tMcFEDXDN0V>Gc*ZE6X6#?iBT>=^h%G>f#eUCPr~o zaW#9q^sEleA-**_&DNq=n>-cyRaGm>D~rsFQ9Jl=@!2g~{QG0PIa(iM#CjP^XeErA z5gBI0bI9=#qj5Zknkkre>3d;1)VOAblK5&@8Cn+;)X_R|tZQe8(-8zh5j8pK$wPG* z6~#s;T#UwvBGMA{hZt?`zNzA}Nc-L~ejROVa9w*a(&pJa*czV1DBZ+B-xdropU^w& zBU0JE#zqel2kV1~<;j>dfyvafuT>e|Afu?)RWHzDT ze4g6&y1HPiC(Mgw?#T!^!)AT~qq16IsZrF4P^}+4B?~;oD@&@XtD-)ts*5Y4COf#P zW2;Q2`{r=hZG^&dn1OYbaJ0x~&v@a}C6ZlqC3!zeCa zzDGKn`vY8XUut6_Ck*i=w^G%uBktZs%Y23dCUxyhQ3#duXod0FQkRu@;6R~N6W?%cJkysWgO zjJ18q>imMz9lWEgTn$d0zJF={O39hT&i1Qg%5kkMUs1JlS2C+Z@1(S?szv#^)28P! z@W(EG%&x|&^U>x5QsMSuHoDB}=)`oXrf^!arS+3r+G`s_evd4OnnIB#Uz@)nCK$bn z5xk|jgOxwj(!fr`D$KY1KHhBauPl0->_FHfn+bsM?JXWjAuT@ET}@81EOs3It&P!` zqIuH0MSBj5Ne0_Cmg)qGv7^H%oA&0l&EXAt*09>+hH8tpX~!CZXN(HS z&etAn)Jl~hrY*?!rhyGaq`|kANwrZ%dDf7Ow~aw&0gD8(fsW=t+%4I&knM){wgBm| z*r!E;mdqEj-jNyyYmntia6Oxu z_FAd#4k6=OLbL@m_#zEzkdeJ^WmUdv7V&i$jmWmwzO3THf8p8oL@E2j%;Wwx6{L-& zucfl0+m5tyT}N>(UODUSR%{)Ln89bnHKwlYk;=j-1D8{=YReM{M*OXz7Pf*B)h0Vw zs<@@S>bO*i=!mFkrxjSN@wEsjrej)aQ?^D{Z;~)sD~k|<;lC5V(gs+U*;A-Wi+QJ% zv+6Upj7dc*@u{V3U5IqV)r2SL53r+UeY8GkXR5rgs>1G#rpV$eQaY>76#dZ2vsn9D zSlim$T3bHkBnC$nFTEkytRxK`B8^FHs5xLFG2vs9jC6(qQQHW$m3L|=)>184V=}5* zeXNHVH+w+PjxqKm(7Y(dwyl-blq`>T5S!|`J91P~CmBaXE+LEWn21H}#K6+2o3nP( zD{@&fX|FLcs7%Jiz_ux9>2088Z>X$^c^1)Gjlp`KUx_5wBecw8VTGETnO~e=lv!L@ zw5T}V3JY3w6T4w+QOUwZc_VyE9H{h5i;GIUON~{2X{pxcjR-1Fw01r2t3gran_Xns zsX1wY)Pk?cE|ZnH)28LjnpiQ3$&2TdnNuB~F^$#syP;L&bG{~)(W*lrRbic>h6h=A zTQO!c^y-eqZ`wyM7ur_~8S%|hTk?t+!_yLEgAmh6J!+(zBtpoT{ukrHV$f{yg<8cU z{WvykOjYU0DJGn!HWZHW&~ZjqbB;Y;nbE-64M}fQ(@ab+QEgX*%&Pw*9c--i`Pat0 zz;4~!`SAE!>tlS$#Hji$t&^@zQSTrsk&4OUT$lF_e3?GOL}}7Y5!o|mOiihkYD_9* znal>!-@2)#t)q1VlI@OmY-f~LGo7ocP$mnu4lGJNGW9eCnMec1h87>SBT3s;yYx6I z2pPInfp{xR)t0`aPc^nnVX?AO9vQ}4SgttI!9YwavxlBIZ>)=&rJhv-2>T-~N?@?b zQd&LF+4bCsRUV%8+mP8uI`u&YLXk+jZq_^ULOdc(m268R?bMr2oqnMtTJ5r%JNMlh zTpwObp-6OcqQIh54QtyKhj`R;h{(xg0@Nkc(zt0m-))GIJ?$-Yc1|Atvv-zs2ugS8 zJ*dP5b}>t9SG`9DtUM1xnWq++jHD;hUb`2IgZ##}GNhOjMetk8$gzplL=($Ee<<7@ ziR<}0iPz@|lvPPIGM+5#Vai_Ei6VXT*^MtT2N9^RU?u>*{zH0 ztER|XQB%CKM)pz4yr8nUIL@N1c!guG3$;XSIiM74q`gHB5GYu>f=(!_e|5Ixj9cvt zQ5o$Xe-nyqOJ!@D=PBo0tE#G$CZJDYR7p?tAOn@nlU@x4^{I@`S(e|*uPV!_DJZF~ zsj99lDO+gyBF#CIeKobAHiUz?XK<)C5qXt(D=zacEv{tyTV%Wio7 zIcHQw^QfPo{@|LT0wd^33({??{fcMs1(Q-B)B}&um<2 z?e5LUo+_%fdq#FH>h2~Dw&0ZL!gY1j`&?S~b~(+q3r)oB7V)$b#dfU5WqVt(TWww? zBS%eJY$?~2OZMV(CmRluLv@&DZ5o0__mlC$E;bdbtY{eZRSU5#BBA3xig0qdyo7NWf6N2+ZZI%}miM@@Nlb(vL=F4{HoP_MszHX4zIUSISFR;Yuge zwo?AKEsKXnb)u_XXiO>!onf`~j9B&{DM3z-O* z$nBBZk&!qKRH4c(#Y)Y!i%8f~!?4IxB;}Y|Wh!WIvN!T9&4QMeSvx!XP@}Bm8(BWe zSR$!sPCy!CISx97#_VrkrOnIO!Wyd%AsQIZjZ=u`rLrLn&au>mW6aIeq6m_F_4Sf$ z$GV+H6>E@{UVG57(#2_f*vFk@Mb4+=Eh8R=RwN=6glX@_gS?b?$A(eM0R1XErK+5L z5q~J;l#X^#F@Hli9*y#vOHEBgr)$J0J`FKh3ULjnznL|&2dy7pl3C@ zmXvYKE+obwRyG!g;2!P1?YBRv5$L{yB?s_vWE8f`1q7iJLh^U)N zmEEH|dW-gRt&?55z1F3}v+ZbR{Y7HuvVF|2Dl93nywwY4T8r2*u)Hqi%-Jd^FE5oX zfh7xRtGuKLFNM}Z4u)in$f{0oR(6D9jVFQiQqNmfvfL`kpQa+NQZuSmu(ZNjUQ$)U zX^&OG0-j4P=&GmZaM4aK53ST;7Y3V={x|ASyi%f8%lVQ*j(L_@#Vad>(vrfGYO91; z!8VYl6_xoF;!CTxnS?3xg7V6xmOS#StwOr|+zh{EwQ1Bv;&W0)<$6#*@?A?KCQppJ$h+z5UTXrg$ogOY^HsmKS@drg@gOo~ka-IL2xC zQuo2|q03UI)2Rw=rb4uCc}Y>RoZx9A)v0wf1=S3w8&WG*?}}_QWxuGT&UTAQ?A z69es|7y(kLHrt8Loi$HdiM9)e0&G<6wWz5Hwy&W8wNOzYw*~W;iYC|SmJ}_}dIpy| z1k6^ngIUbxEGSs8iD*$z=q;^vR>hLSs+rtAELkphme@BhD7R$)MTbO@8S@x}(~}aG=<#EvxBj1>Wjn zOVwDG$W644DY!9c*)s>-exVGLDx%8b<>gBdJ19e8WvShyjLC}1<%(p($#%8Ps|0Cw z02vR;dXnR!4nW1H zOqZ5DRn^GsuRK?kEVMO#?SgDXuAk@Zf zTw9(f9bCJ4nYXm9Xq{s-q^3xkRKZDnHPYGb8sh$BO}=-f#a5Dgz^y?MP?GeJ4>2(7 zrB*p;<~EnbIm6`Ix*9P_-u!;{itKB5k zsidD~>F29s^+|I#OHg)q?Q)&lu?V#oX{lqSZWKE^F%i2`7woti*-lw1nemxr5wA;5 zg^Zr9;@}inoUQVwmsB(o&-URW?S2HhoD3phVmlD+(6Rt#HE&8SqBN27C ziKe7lj=H}-QJu|=M{HYKOh%QE%<^SgKC3m;2}MI8kZvxfZ8lG?ZLUF_al8ySwJdmz>_j&9A|g?H2rceH=0%%RH<-Eb zK+_Ee+8f&=h^5xcqF3&5$~?@5olT3qH%53P(kj}l9M^LFMZZJsAw$jbA%ko&xN6w$ zN1S7tV25pZtFIYJj@pZGv$Wl34;vmMQ`?)6v=9O_aEL!@t+8E6wpvUhXRpDCCc76d zr*kiz5l7u|i$v{2R1%h(a!lH-AvxGYyr>G5TsXyuKG!kS`=e!DUzaNtWQVXod?P-*vQndBX?Dr9USA!q>XD@ zb|>EZdS7g|#b%wWeVOS+nu#6G*r>rlKF$hB zn=!ppueHe=A&m6JIEt0_AiG_s-ki`eVVc-1Go#tZ)pC-^@TNBK9TOTappW-tZ+!KL z(G;ntWOZ=6^x~{k5qG>S6Xzo?I+55gcyW0}HGVS$i6OwC^ai%koYiPA)88AlW&;gtk{aZPt=(b0|CXij#B6O&oO@p{l$7Vr3U) zya>+uh)tz4?j+d6pyft(ojOU@-N24BHk?O_)$Y>b7&|URY#EyzY}>KPXH{}cEte)# zD^#6dBIwx79S2p*QIk5CF@4>!?$9V=?Bm9U=$gZP>Sot2_aKdkO4qwFn(nckSc*Y5 zR_YWxD#ba_Hg_P0lGYZ}eLELcImIu-!uG;0$Jsb-X!W(|qHS+h1~Zy<+8<-Qn`vk* zGcwa08LFEsj~ZW#nAflO%$+MY4N9FE(A?gNdc_8>B5CEjjsTxMMD}1?&jy)KAjGgo zs->!3T_KUtG7t&l9ihIyTEe{oSz$T?c>6A?y%6zmw_a{gIgT`R`Tm7A=U7p#A+CFh zoI)*1j38gNxTvkHrtD^@uJ6ZAf^-}ErSdkl!jbGrZxU5HI`d74LrnDg)Rk#{vvD@BX=C9!%-PyM!= zzai*fi<@lCo!D7bBb|>q8OLmo^k&r(Gi#An`$$A4R2dG{2UF7I?QM{1gIrfqoj^`P z>1Oirwp^L9@5s^DoMlf$PJW~#>OARQ=(x*Z8@pjr>1Qrdq7Khq+Izh1x;R^sE~(T( zEZeKLjHYorYrUtF;_|e3)FMP}k+er;6YbX!oTh)^$k39ivM8?H_*u04& z7?QtETE3ElNn}bRt<%(^EG43iNgb=3R%e-ZpeKA;K{&ID(}W@%=(6^($8q@zM2*7O znr2CQOw%+;vkTKH_UK(s;~~u8EJd%g;uJUq=#;qhN%0Z2S*NaO#oINp@nf;t8g{h+x^a& zU`_nduOI9PH#N8UHjfUmQ>TWA#BxJ5jv%%{E#H|xroIN8X!>ihwHdc#Aa9Z(=4g8K#lFewu$N4wuQM= z)VQfI-^{5?n3iKaGQ@E2NG$C#RO2-jp-u9&3Z|;!!iAGps1L)%#uH}!%^lpFoLre; z?V+Bg$w89xYJcVOU-ZSVUi^!=re}BRtFy%Iz-x!Z&H6W4$jzO)-D}HeMw6vr;v?+L zYbU;@P5-wM@>#~e^*Sv#r*p3>XJt*#?If`|o#bBmjnC7+^p-ni)^@Mo(VO|?WIMmx z7gJ8o6y=M-OXRE37S>sPPq8zCBr`mz~8seFtgi5N~JRoOu6*-%fHrtCKf7 zQFfBl+$o&|*gjrUPjMyX#2cT~+?kz3xdXpb`Pfmq@V|+7+Kf(WtFxxpS+REJZ-(8T z;@;hvzghq8y}8-;aP*(z>$EI8d2j9vdz|@C@lDCLd;5R%H?5Ph?&Q5wrvJNqOzo^& zbT;C5(i}STw*9EuiLXvZ=qMajqGF8MCf5pYUZYC)3$4j zS*a;yvD*!im8!J_4$I^>MOcfeeTZ`mY!5jjtR25_s`J8`|C2AQTu|tlHk|?0&X>tl zCndH6pPh{Co%`&pe0SiplQFw2KJ1$ua9+a)YEWKqXd<0xgj;{r1tc9bX;S{yq|l;g-%xJfzFr|@K& zlIKi$GH38)Hn5f`*Coo8C$3AB>k{Q!F^NTp#iy#dQ{_2rI#2mvwPF&B9(9vMOJ?M{ ziO0wz?FEBAJJz3)+K0maFpFyS!$I76x4$v99Rj%_KGkkn8(kx-ZJg{U`E4Vv*vQWf z$>-t`eQ@pfC?TcVM{}C(Y|hjURF=fiO}Zs#y&ZN2`^hwpGOuZTJU6BM9;-K zILX#XovfMtxl|M)I`&5Dbhg9Q5cTz`h*xa!Uu<>d+L<=O236u7J~8KvLxjofw&Y@l zxlcgJ+gmoh*Hp0sHmM?yrzjeyFz23l4In^i1=me7<;&5 zSD$@cX-_WErq1tS$Olb!AbSf)rk(BJS}i^^@}J^D^($_%+j@Oz#SSa?^_{@BMBH{T zVxgcvDg&~M#n{M|L+9HbC0Q|hUHLS-949F_7rUTis_T01G> zB`uhtN?n_fJ1AjBIrZ_0k?6)q!{ms|K7x>s;llR&MTF-Up&>uKrkhaA`=esUs3$FG zj9N&%sj|0t_f1Vid4O8G8qZBV|I=XO*FJEV@r zy15Q{kNPUlPJ>4-*vLf@6N^M1J30pJADoG^LNMIXTTxZH(~?9$EAI9=y8RwG&``&i zdI;5TmovNQ8Jay1nuOWMDSQSlf=D@7)y38!CR-BfoWhE*oO`osR_W*zy<=d`R&5Dw zRP-6HZS(O)#BqTQ2zRv%)*2fMjAdB#jFqY!>(Miis(jPk%qOZUr8<*lR#TNmNCMCV zVJBfjGYG4-YI=)HE|W-j(k_#jNGtRICw_8__JzRJMF8jz-CGV_jN< z+)ZU{4T`I}32B$M7`52f@os)*HD-R0?{YfUJm1_zCsT9PB;HalDdH_{(WBIpIb}eq zsLqL_tDBI>nPYoPolgcp3PySnKgn2R6_!*i5+Q9-$--j!DZ~m9%F3h0{#M@B=ku*Z zY&=rh&LE&h1$#)dOG8_z!8Rn9<70#Bo6Ipj)!|h%wzk?DR-sMmtWo>I%D#&c=gTgZ zII9*j$C4cR7T%KDP#VrVBH?DGRo#RS0{E<(A04y*=R@<@(UjI$gE#pB0gwE~V3vP8 z&8n@YtwGLB;;hZW!5m{mHgSWs$vM@~t7i`488sM4r3pBOqEH>{iAjrsjg8!ojM|ek zj`X;QrmwR_UE(gHMy{7|-l##&y=O#?a&g?Vd`i?p+}Tw*fjgZu zk@U-;s+X`)&+7XSb$=jgXE(E`+5RC9lL7fzho~DjI-`a~a`DqihuY6Nrf5U33d*El zEcrnfQCSg)QoOuEsRiBzO6B7vrAmz{Z`!-czgS2wR4#?(Wp)s|k19J3e8i8Gs;E++ zqS|FCI*Eo-G?o;gXk`#k8YwKXC@x#b&ju>3Dh9EuRzGLSfv5U_+HM`{%9fm{Dx+?I zF+T<%T_@H_ezQWBq%w`MNT#_fSM#-|y$Q81703i(Un4hr75kOph{XWLmFbwyD*Hr< zn$tL6^eA#uxSi88=g3jLTW?MDVWBfBOTV^%tK6PGw~wr?f&GXaBkEu0pKBE?uxjh9+Q#sPI_^F3+l72( z=;!MfrJLlhG$eEsP1=qJsj*ib5f;GHG#%iTEkwq;Ud>rECX1B23&zX`v z&2gyb>xtZ%IaB4I*)*ZatlsI-j+YxG;kt3kiNQ>r@s79b z-yT`GsATby(xqkP70W8Cs=dostX#F){&lVThR|MX8=IQLE$jGMgZA|sHg4KG`gWx6u=6{S9i7$v39+=lDi=9Q zU3@y^rXiT+YcxZ~ zh9;w{*w{EFZ;=}07|!lMnnPSm()Y3%oz%~iAX&4oO{yC`YPlJ$X_l$FWe|ldS|z(N zRe_C;UmTq@$P2|nHi^+e)+`6qn%ev@s#*TZ!dh)jaE-*;t^_}yXKGGU95HhI6nCPytCfjTEs)}N@EnqTes-ab}bY-g*dvc#)#8o`KG>6RzFrR|DcBo z6a8%2@sPie-|* zNmh{GA8t}cbTy&%G6>kRzKA71?P&CNXEr98y{Mt?=Mg6joyvh0Sg1)Q1X_0VR z0PnO)k!{D=8>z7~Zt8K}43!eEjCM5D*ilxjqeGe_Y%qb<5Tq}M%CBZhdKubGHzB0@ z$xOM%7gqrCYnl2ottwVWqHOJ8`(er{Mq+1{wNWd1U4$bL`B^vl5fGNe>#X**`j~@c zI*qk;%G4ZA=IAEU+~kmMJ2&TsSA`>~$>YQ1JZqH_o*KChLee=->c?9Z=Gvu<^0pMV z$ev2_jXch_?U)oT>CCqZtd;rJ%7X3FV|v#AVekC|q)MuL@v6G__9BkEtfFF;)w>Gr zu+lIy47&rey9_e}GrRMncY0u1MTe%lVP@(1!E_G{D@n+Tii!y)Ys5$*DlzDnBp6Xi zb~U^NBT4WDeY`x9N6f02pt6zp$a8%`{eI4=s(b5pH@klS`~LA(nZ9-E)bFZO=bSoq ziid;tkis_bqa#p1FQq?d%YboJ$AXm6gwy`Ll>Q*z9L_AoFY#}HtcT;hwV-fD$4>%v zp*+g6RVUeW;$V9k+S%QBX9OG>ZxT0)3`sZ=eVr|0tk8nr<@j9=ej3bd9{bjO+waF(5qe1Hvuv}?9Hf4@M2T%`j|K6wnrimvspESdZ1sV_o zu&N9frjgLlE_-dyNua5=1Bl3E1cN9v@^Eo?dvwil5B!$cu!3)1dS(l0=h?`rynUK?R_?gcaYL? zqd1c@Pw}`p+tS!{1SZMOg^zZ7Z?Y`3X6NtA-BvyoKpf8Wrst<(fsZN3bN8rgOn|ovh2&9r*u?%(w=EJ`d}n}&^~4S=Nl~|RS(w${ zHbO*(PAvEpeu<5#KF}yy0}KlT0EaV>9&jRWa?6-=od`WN@umvKNw7t?g#%2=F?Qz5 zU8Q}3RAKjMPt7&RWU!F$V8@X-7Q(d!QyDtt&110=Y0(jQ=%QaA=ol0@b_oq6AFo{= zLwc6VV#QHh(jC&{m|NLZQ_E6_~VoIp>_RY8(etktvlO~ zX~7QB!T7Rn0p3)mN}V{tV?RmYMly5=9d`n{%8f-&a5Pn?KSQhq@in$S;2xl^FkK5T z1ULZ&sp9t{h|eLl;c~7YX$zNg^)!sSL&K;?3?90{;GripjJig{ct^1u4>2?ylqIn| zM7oIPIOMFE7%&Y)ZPN*wm~LSjX`6u5Nunp(kC* z-j1;4IV(ByaL-0;%IWQsf|$MH6ir$|7YH6LZm|T4VB{k}?|rzHLmmSXh#mTc*J?z_ z_gTGD!)^kyz76oU4~`HIZt{iMt~Buhp#vdhcb2YRVwV@R&4*EF43x4^?18qsZ!|wO zK}G>!z~Q50v_Lm=69s8pP*w+*>FgB0VpolecB8ru?hyG73VZ3Uu&w)8IlHdIK`}&p z9k|>=sI3a&rL$`-*!`$_X43@1TDtj^<%2tre99@_5xD=uL`H>TsgeVMvLo0@;gBd6 zwHV`pvnPZG`N+{CQM86|XIP;YWC|QdQS|7eZ3IIOXE&k>xWbaf6)p(Zm?RK0aiju} zv%9yZNlkC03bVZfvSzeGQcMC7#3zZ@+Ek6U4BJ!{(lWYpI)p`4DiRZ8#TDikT58c- zUI3j)-_2{Q8D^)(L>#LsV`{8Xw-fjdZ60%k{`ZNm~mT?s}T2LDc#=m(Y)xU9@y zxLJu^huBweF7RB8H-vCWObbaYA|VI#@C=Z2u7OsmS&+m^ z#D(b^7Vi$6wLq6`*p5fA3fQA=*pbQ7+D7y=bP*8bYEjl>)rb8$lDh5Q)@aATC+!&7 zKDdcYci`bfkzGpPVMlH{~~dItPG{^D#bXSeDe=#1Lo0<6qe z$IbRlKvHLsdelVHfhG1H&5qFXU7`J?7)vYoSknf2vIAlio(FKS4sX9{@{B703;Q@6 zt})^C`YeOjXA?0SSHQd$H{X`<-~5>V3_JS52YF^T^WWuqxXegVIha`YHFUp57;OH?4fJ2t_&Sgm$1gt@fL*2oSUZP3^Ml*s0w73`m*%GEaLJKqjhp$wcBS{z> zX;#CGKwAUv+|ZFV^R%W+9jD(ENk-;!w&r$@M-4y}Xc23tdUIQf@H!q3czUeV#a_F* zv8_SNlZZ1l>;_wxfMdikkB#*0W(HkJZqiUX7T(-Q+um5>aAQHmHfaCnPUWzSaS{RX zy}}iDW)j+D@*9k7qulJY)&^uX1KX)Y<;$7}ap|g?ke7(rq6sHiX2gjMk)yvvzBFZ# zx1Llz&KyToDGr<(RP5xkqo!v}Qg}z`HE+Ar%Nfz6lc7a@BHp zliKMA^klNNRIgYPt{a_47xB2&rksl8@S7lj{U>IQdAXW;QO4k12%&z(b5rm(zOz_A z2O4B19W{Mj*qJY<@y98!v@PA0?d;x#O_W)Ycse*S*qV|_2$c@5l2D-40x9<-8mxKh zr$n*gCLvU<%e=&J?bS9;_vU ziR55D$(g=GFsd@hl6MbhwpK;APof@J+i~Tq5IX2^f<(i<&Q=JLt%NwaeRRfdUpts4 z(R~Pp^Elv0hl2Sr9$uuSxB`>yT%Lb+;E8C$(Ays6*PO=DJip>#HVO?S>qvUqApwjq zS1dEdB6)SQs-Eg}T+F+@BZscxohh3Z7a zi6h^}oPw%K=tR7DEm0*Z6Zr}5e2SsBsw@^Q5c{1Uo5YDv6U>Pwa7Z#Wn&-`GjSWHW zz&^Jlj};8tL*i~>Y=q4cUR%4^(;x-m9upQyB)R2sv^Bsr1njK0Y@1AvPLld{4IS-j z0Jhl)Sl#1!C3rO_kY<3#ifnsc0vdknTDD9$3aiL=#H)enq)A58 zswIO8_~Zn4IA~QGi?T9Zwv8dks9}^)u~@O-z)Dj& zgdmQ>W;05Rdiuwmvtji3=5IEH0WO$lLO zk9rW4ypYh#Le+46rOY6K>hic_|KnZsk&Y}o$VuZGF7+PdnY^Cq^oiwb8*hTBB@cms z8G5vjP}jG2hP3u$ja+-@Fw;?(fiNj$Wjx8gQ5ISa&*E?d(^HUP`m6rWIzFe46q z8s|z{J-|W>#QsC$T%dgq9+7#ukS0|lYamz~2)cYF3FnyQ%HYIAMQ9Boe}Z7>OGk8^ z9n%e*7BodsWTRMf`ksy*?3Bg8;5s@f7o7v0q5!eJryT~pqq*^1oKke!JjB?xu?k)q z7{{Y2v|F9SaU6j}R$s}hqtTST_MFN2>xXlw=Y zDNZ3JOyxwE^Igbma|%(&5Aefzq7!G~6VURGL;Z?rMRn0((aB(xSAsSe98b*2RCu?| znustup5-G!996(O6jYU1M*28}c}CKUAxOj>mQKV>f)0cEnb}QK*Bn973Nwlvd;CP8 zDjknmM_8y-GA>lmf|}$LKWvK8fs#4x(NbXIs7dodPR>?C3se4~h({WqfWXzhle*Jn zg}Domee;u}`2H9?%8sU?2)egLwD)IwLUtn|(EVe@w7xA$gn{2OgJ?gBZDH4hi9lP5 zdA*I&p2ulmYYkEmeYV7(%k(FFW>^IJGzj!*5%^9&8?B~EmePkRSonN^7wf+P(Wjj4 z(Ck7p%f}xuR_1Ry>sYawelY6IqpPP`{s0QyBv%mPAZ~ z0hrF0#N;S$NbA4Rnq{e+BO;LAjx?U85*_^HBV(<>C|;_etLEDbGLHL-J=@0N z&zBx5abq}@AvXMtQ)leyw1<#=5~xjHzj^>pYAgzY&XX243nqK3%aN#-$@4NJ<1)Rr0 z=n*9BfPP`@3j>4JT!jwE#MIV2s!5c0%ft-Mbs&mu&F!2ZI$i8UFKq{nniw-Du9G8> z_&879t@I27?z7NVFcr05a}XdNF=$Ai)SB+vps)Hx3EEjx9tC-SBq}=sad8Ng8l{dG zO%1Sx;5dXl?yC>&Gl4Tc44N6p7{J7d>YG82U~tXoUPUcAasia^s_ z@PJ&g4=49y(__`p+>8sgO^cb1LeJ1(QL`F2{3zfh61zTllPJ^sC^&m+f)yUvZfBN| zZ|(HhNLlbvP+xZz{wg&jO;@r|Pk8aQ5S($)>cZxOM+(xg&7}JaX{aRV5jP8t9t(^j zj57sHD{dCgPDuUJg^BUq%;b}SCoi{R*hO3e4lZHkF$89ytc4)D)(!TS7zo&hu|AaT z&NUp$Y%p**h|!P9F>gorS#@lVG_I6fZ}mDS2o01Zk6-N#66XB&h)E}dYe^hQBONi* zxavj(F$!sEHwq5mF%c69G2g-Lu}P9pLRpW^pDY~>M)yEx58qADnbNWZkBp_Ko4~8^aj?e~g)vc757>nu-$WhLLu;}&J{hNLu_KN*)v5>B=v0zRjgf3UoKh_) zMrzOR=)mP~+9LbPbo5FcugjwrJBZvhfVr)R5X&(l%19)P!nUdmaC2cmvNRWzNLN(> z=sF9@(jq{Vj3J5g7*bWB3ri-gDl$W&FUoYf)qtE%SVK>Gwin<$CyD986IG%y=+Uzz z?#jMm`;J=ZU~$`8FxeQ17_+uc22zcZC=?Cp8Q+oUzb?8a8Yjy1bV7$p1g}^aTGM6c zYmZ$K|+Y>jCYPdQ9@ixh=z zsSH4$ClHc_F^T~tlF=M;QrbxxWfcLUR1B#}Q&pTZY4KF0Uc7oqBnxz>ozp}Y>=YGE zFb6f7PEnQhDnO&6f*IoE1N8%Go2}d5cve+KBxdrOjvm)G&LqMv0rl578wTOtE>85Y zQ?YD1u?dEeX0z_FBdEcw|zPBe=nWHI&}=96&oBhc?mB0_L~FfK6wa z-wDkP^zzu)U>1dgo2Wg6VRpAP7{&^PJE#_P;Rj^N1?AB<%)470uA(I&oQiejSc}up zI`H?ZX{xDCAHt{nUo)=QZvhLfWhlmP>eGPIO6iMX2~ zcn^)h^puK((MdsT45A8fp6RZ>4ONgeO&OB#Bd9JZ-Lavs8Z^XX?^GuZ`WGRsGqZ3T zl=+6k!u?iuuxDo?Cmm{m@Bz&ZM_~f;tP10-hgw+iQXzJTG%z%OYmp|l_jGiCV-ffv zhb$F-CXZMcKBSFmh56iB+^Opcg%h6kEwbV*fthCJD&5mQ)SkvaN^C%#aCHIIOblqp z{KOf;ICNW6q>zqd9)eYA9NK`Zz)r9aGD&fY7zzi7mpGy8WAmfVzO{UrAz#2TAJlgP z?OhpklhHBJ1DicV>(fJcmUKE@5f2UE-NiJFd(s;EIGM?&Vf=&RB#K8!+d9+IOuMo| z8RmITT<8jrV64m8F?4ty)x?_;ILeJxEKx*>BgV?>GyP69_;^qN+`oj8C9dJ%aqd!5 zBLhtb-18Zg3{)M>kuD{U(Mk{=g-(Xzxfg$Cn|vI+Vo5wUK9W+91@)%Egp2E2!#~1LV&B>(@D~Jey$hq*-aB44&oe^Y{0~ijzhQ_t+c~QMUVcZ z`>*Uet&UoeB*BDIG0LS-#EmvOG(tApBlM~6NnLuUNcDntzmd1V9&er}2apOA!t zpPQnPpGPXFrA{u1deBv)xJU}cxl<_42!bJ6g&u}7*j*c1`hrnS8ajQk3)B|>(!0R? zqfhE+KIs?&578J;?~$K( z;ZA6T*7$QdK2Zc56z?)QXniUt)B4ot)8s%?tBsX2CSvc!tiBa_cp;ZKF8kMWMlDVVpp`7Sd35nW$-Y)3=AV{ zU~u!PzbbGF?tF26m1bK%{xYz8m+4$87!I2PUnX`%1jCnx!7-^xfiIH+9cE!|QEZ!y zh5J$yi!YM`&P)vqUx1m}gp=4YD0MNXc2!E{n}CB0cgvd0*-!6YzflW{R`GN_!3jXJEeQ<0Va6ET78irtlE_1s z0y2SJgk0_DE~DMOx*Qir7v$iWk{ldUl!Ieh)K*hg?A#}20OI=SvK$;!mXnVu%fX?t z=tw2b1^_x&Nwg}7fr1hklxqTm0EA)A2%|GpVv5bH@n&7vGs6faKAMEG6A}Q{h${;6 zEh&4r2lk!f>)fMqwTpxW6|5;R!ExxAhkJ04u$`FLY*$w&&o+9Hgl8E;XqGdCW;a8q zwG5$FY8(rpvn{$9&sVtEbcODxGXz_+zHty)v)F63IMgo|$j!whbnCmIu@AB1LSP^e zsAp%lM#$mzbJF`<0*$ShCMSty8p?sRT9VUU}|Z;SQ||WVlFsA8h8#m2bpw=U|uWJ4o}VbrhW|wVy=U0 zn3pOD7_cOSn4cts7$AF>gYM4RZqEi7hF>URrE<961t_yjVXAq@k-xal0tj)NIG9hr=3SB*R1eQif1Jil1 z+4PBvYT7MEXfb%Y!xc`NqRDjzm+lnGos}8nxwsBE)XBO_VIu6{X&9dBbGwi#R*iLAtjSsf&LIiaQp>f`-FHA8+ks~oN57w9UEe(}z#Lc3X| zs?c7rPH~|x&>K}5(t{E=?>9DDj|l~)NNx=|}x-u^>B$5(qDmt5_+=P`+(l1{`iUp80`1rl>H|fC9u(c*B%M!(8_aW$0e>BkQK2ErHztECitL?10i5Muzm3 zLBg~Fp#eAm&KK9fZe(&~H=H8C*wx(U&@pUsP^q%upzw^n!H;j~dWTRKa?s{f56|7f z1g4I;#7uKbv(>F7be^Nx&VG|E?7v~G1}lhy#e|{`mj{fsx4q>Y+11-x_vv>;Nz04Q zVr-j1}x)B#vB&HEu8AekNJrSQb~C&&2vZ zk#Bc+@%Y+kY_3Ol#a%|eItCZk*=LMVAd5zq*SS%0Zij%O50|6q#YJuY*IOZf_Ci=?25eIa5iEt$mUP1a$Cw@gs zA|Cq9L_EUD_~rK|G_~adQ2Z7ZqcZN4!M{+w>R9sorZ;b#fx-VNRVihr_i= zzauGJ=3Q06 z7s=a>iP+e(e0lQ`A>psV17CPx5A7{8ChrnHQ`m#hbvi-Efk<`CQnGHa}M z?dQfD`&dr*@C??p*gliSdKM4Q;6qF1>K9f$XkWFR2#DZpH(+SzUlY%gsK);YDE?T#YXid{m~t zAH_%$S&9yQ$xA~Tz7WZWLq~t;x^b8&=W+M6JeDrwnO+>-XZu>UhHk7?E9ekr{T#xq zoP4!ZM0tCppLVTGlOZL#CtkYuyE z{qN>mx2;j88M7&daa)<6A}U0~3B8iujfmw6vqNy|yk=k>Js}yDT#Jv~wPG{ECkSc^ zO*h|=*7x~|#64lbxDML~$EsVY7Yrsq>&W&WG9tt*RwPgc#WL;<E+6 za0FI$Q+p>4T?qubnz*YCxW3N~y}J?Ss=~mSa%(h*TZT9-H1(rBF1k~ZWQFWYd>mHjDYu05D3J3Xy zxxfMMR`?u%-4XjdTWh{`Iqlg@JDgGDi8?q&n5qny^Wd91hG0R%VQT`C?HIzTMT~}b z+vwg&Eh3JAD8fPI3d4g}ZJyK{cuBr8oG96mJwq0j5| zMH$42JIOSQGhWl4?dgakF+?`wY}eq1o{p~G0US=DjokI^Ry<|7S-TyNVRW8`Tg*7X z?1pusF|dQM#39ULzN5+(iZ&qZhq-oPgKKtUk_+6@oGvceqPZCxKz>MNuiWvalsIU- zt7+VA6S#A!KM7+yj)HW^3VcWq`W=2KtkU_npcJ=74`4EI)`GyFKq#MBi9+0p?=8{v| zAy`P6YQhk8Ae<#aV>CKW9^H|P9d?}$8N`Np{dyWpn{3lct`UKX9^-z1vdBR6{JRO1 z`ozBbU{dU&yIL0Au7K#t4Jhq!y%<+ZCbccC4pI|#L-B}-hIMXm=;a9Vqiackz0INr zlbk6}PnvfhOjk^>t55y@LOc~TslW?!-nb__dX^N`i{;%-W1g2bIfGsi~Jh~ud#*euh8C=|D2HNYs50+F>Y zhtS1&JpxV1ZG7V(W*{1q=3*T^GnC)5DkDlZ`8y={lcH^cdMxnj`u|#JjI?gsPfnkTyJi5q_k#r5wdynKd zv$8^SX2{@_}+=3DD+cW|<+Wda;6| z=am{Q3p17JUVwe}h}L#!UvEu9b!|d0ax_N-$O-J_O#w7};}CSFVQvc@K!9xGfpPte zF;N#yED4CpOi#LDzO_tX2MF2{Q8~`a04z;%>4B*p`;4f4pvuH*BBr0x(RHz{qF1fR zR=||*u2_Qt|4>E2cP9%=_~tHg5|%7d$GeZ9&|XS(47VS3FPjq?95rw;FbJYP!xGZ3 z`4O>49(lFf@qNQ;TW-ya6pl|We-^T^;gy7}ogln*n+3kupn-89Pc9&)s97P=b5&7rn+nY|j^~moYS`(s7UzMaM%n8dpAu zVIjkxl_4IcWexvqfn`2jnl59{WBvqN5c_4p3qBmKM#q(XjUFQ!o+kkqD>frXy0O%P z$I(rm0NGDK^Aklnj3z%+D@FfANL9r=gNR34GT3@hNY*^#Wy+h!trU$t{TtdLT5<;Q zj40mc1Gn#wqvV} zLi#bZF1n!j7(82SySvQK7QLZ4MExSPVvhD_-h7~a!OXQ!O%ZQhBpGE|bKzS@XF&Tk zdrPc3?K#Ym<0v@X0$ChfAUWpH54|x>C6*gh9(wyaK-f59zfZnkg(*yK@pTNbXeDy1 zQx)Xb|IB2Mqwwx4n0wBWc{>U+Chb=I)}5gtg$a;!suphpR#+wgQt-2Nme`n zbDSK5P8)NCXTo8kns6XfH!Z+4*=eM0ITWU$$103qW)(!?nH9^L&7RFmhsUN z4#C~UaxCo(dbf`DDXy=XWFa&k@oS#8_i(%f7MYkRY!uXcrkk|5!ZUo5b76ukb~xWO zL!*-P1dq5YCM~9SA=Nl#INeTs4J3Fx6K2XUmrFaB;Wf%qX$vv#xk?2;(e4{l4Bkc~ zwFOaP-Q5wYZCwJ9S{LC(HMNp2vD^kdj^ha(YCU&i&nHqE`&6rqiZ-J}6!A2yu+$|n zr6cl3yM06+Ap$rwRZEeU!eR>16O}edWA6kfx6_k*Hqt(5hcI4RHvWX)^~ zD(5td`p^kd6A+}W!(p)~$b*Ru0=}~M?CN`ovs6KXe7h!UG3dVLtVd*1$LE(li zb_=^NV$|VCuqsGxf^Q_a@WjFe8KGv7s%C5wOPBnNS8?+65_l!a&SM`zn=2q-B&XOm z;|LosQpLqZN>W!0g{M_$UdM1CL^=%2N^UwtU0sdcu!Y8EsHu^@xJ~u7f}Ms$A<&U= zux@dY6+q}kKss-NH!EAgL!da%QQVCEleopCmeuIVyPER zED$_QurU~DLK!={bb8c09Sa^xcQH+6BHv)VF=qHn%1Ki<%ds2IG$i9gn!?2?92pnI zQrw1LT7d(o4XhuaIh!U0kq+{hLrR_v^HVGtnw8~nD>SOuDN0~kP-YG^6Lgv{)676q zwsgzxVL-6v7M7PTY-%gbELm7ySm1X^D2@^$lJlc)stZ)`w2b0HbQuuH$kNp2iXam9 zWZLy>euKErQ;dTHQ&oVDkqMZi#t3V3Fd)UiF9EGXcb9R<1_m+?>*P^1Ou}@I@IS2+ zm<;p@Br-@8u%-l$(`8*(s_-x+;_BkQZBJ%rYdYJ$wuip%)n5zmDHB-e-+SqIy?Oo_ zh~dI%5jNsZJ-t4)2%mkJJyF2GmnMLHncgg6YG>5+wZTAeA{q8|4skXBrI~z!Xl=+q z8&0KYiIyseaun_0S)vjDhGHK@N=Tw9@t%x=yTIxY3;)C3^mK5cTWH2&@)v4Of-F#?dW!Q(B8U z_uoxr-p$wd2?&<-e&~WhlqPpW!rn=KJ6M*bSE$>wdK%++v|v{ReM2mu>+Vx#&blD- zrZx^qj+O$3XL`vLFDwM~B%l>i?kPCSp^UQ*F;y6K8w7vDXi;M>{QwiA`|l5(Dh!Vn z!Z*G#L?jgv-gSRS7E_DDJ$u5NrQk|LiFC-MOG48Rp!zn;nyB22janocx4cm05LsKf zo1};;$BAkx7ei|*mxyvJ*Pa!Fo#dR2hZ4t7i)j+jFLQx(E@j6f*7A$+C1ihQY$l9< zdh^s^S&#(+(R1yd&@t@C>b`%mfIS`0+G`aN~ZnWC5iwbRZ5oWO+6E6!(0^XTHhbg`w=&{NUxLqli z@YlWq)vjM}1tgiAFp&fPcH+4SI9TL-wUGrFc!E$t8h{IFA?|y^10h@KgB60`u{iiJ zWbrO?R|0~^{)<7R65&o#2_zuIS0n(GNBnRvGKd2m@zF9@l4u~osDAXWng-?vdl_JJ z4cUEP(Nv2AouqC?9d#7sISz4D-1m4|Au$#h9D11AIpE3+^!9Z0z&wLL9%J(h{rSlH z_FfLIhXqCdzz}RGg#H=C8`YQ`FlGef1PZ4)D3A)0F`261jE%pcby$LT!eH5n4`MXH z)X^TSf3V+@j*c%$B)o3u=;>AfDw%!_1t3D^ygoJDba&`31c^^D^r*ZE@kFjAK(IHZy-R%cIk zXgEVIdWQSk`?^FNrZFFmgIU;iX4k{g#eq3%35Oy?RdEmsvmRIm4dU(x-`d70dWq-* zqHt7B&uvm*{WyAr&g=PyW~Fl)P7^Oa8^^WhM92xWLvxCY{Mr#Pu8qKWOXOl0j9VF$ zohF~3tUt!?Z9hA}7wMz}TSKs(Q+m@ICd&|c&K8W8MTwwc zdJ@pYq_i-o(@q0wvsl&Dml=BO0iNt@=@7D?wh|7qn_u-dT$tqYb3mV1IxH*7OH#BuJA1i60VE)d^OlY;vrdVicHa7{M;i z8#!p1z~~-AVhjz4#cl$a)7FWJ?Kpil1BD~aNm782fW;$;eHtu{*aF>TG2en8E%W08 zZRIf`Srk5xO$2(8mT43+>oXcybe1Sg>q~dV@Cni^pemdxWaP+#h9WE!GeV!$TX(u9 z0&@g3TR-AR8x!gYnIRV%9!yV!2m`pF4`m>lBw8n-o8thX#@LEe2h=G-M4h<;*yrN& zWhY+i`E*WJ=UyC}#Pg|99+55{ZjMPwNl#Q^`0=<;9%>VrGk%|fg$ z#nM@eZ{kTnuxBQrKOEf#4nv5kVzyN)3vps6x;75M z(5kDGbR@&;v+e7;90m}XZJ!1QI55-=rkq$wm`vjwdgw6@tn2FU8f@>?Or{&i3Zlml zyMKW*F z^hzYK3~LOi$H~9}Td;ZG3aS#;WX9qVX|a(bcL^y=;+PV3vhBd^`ZYtiJ|U=!6A~~l zU1%G~@jWR__!r9uPjF)AfX^nnAxS$#zC7eGlQt00Acv ztgUsb9+pE8$$TR^nzG8!>hI+fQ^%nskkIjDxKd;!y;+erCURh@3(IJrD?`PlPUc5Z zs9o~{JK#z|n&XxHjs=WK1_w4i25}3L?PDfD67Mii4qjeanl+jp*>X)#Oy;T9y3!pG zvgm{tCId`hb*+r3oR|rQ?pWc^AYvONCv-YwT-HGy$rjAGaIGa&>+i0|c&yXd*2A6C z*^@@Kl8FezaHeapXP^@XEtPN$+qR?kDA2wY`c8c7J{az6&txD|Rt2+W>(c5VQ)RP7 zBw$X@kL4yw2q*1~)#sE;=8J$3ZAiNVIlz3yZ_UTC1bABG z@m9x~Fo|dO@Qh3aISKpvGiPJC=FS&GU=32ja$_5B^GUNf%<{pPEtU?U_$Z9?iQ8KS z;YV{xau9g5zKgE4@UJs0h46FMw{4gh?3W7EvS(#A!+Jl+Cc z6wvZw76ma(dC1{l6JVC6^%Jm05q)jv1<~T$Jq8VLnr+obtNL`#j3Bt6y6`aB7CI+{ z?mr$tnkg*a+Yxda?x1NI751WZb%*SRTr}rf=O6PrZj`;gVcBiyLY(M`>xQ~Eos0?_ zX`}#yqw4J-BIQM_mo{uC34w-)V|4S{z|k=MF?0F?SWYFh&5ALPSsda8Ch+c9VX&}5 z%i*bXY69vgzQ9z1(B-mvPA)Lu(dYLrjCfspe(l1i_z^79xW$fT5}x&=C1II+vy`IK ze{)R+!XwEb7K`)+u{0EGFp}6NFVGO2&{EPOqaM^wLt$@l$ z+aIySgYl;M3GohGKC%O~vhj2g#;~e1Er?eQcaBbw{un}uWm@Y*je{?D77XdXm<8qu zX4qg;xVaCOSPE6iwWi2jE8Npy%5gGSjjJWYM0VBK28FtfrBBXC3*kmLL(jI@$&9_( z*~_OZbW0I;e!9fk_Fi05U0BAxU52qMEKDC0yTxNTDcKE{erpa4j_AjMh!~%!y=F5r zo=!X2>T6}p+YB>@0saRUB6*jmPqRlyd!vHkG(MtLOw&NfV|M(iM3`4jNaq`*-@FJ6T*D&6q8iw+G3H{>mE__qi zIn>3>I?do4Q)Lkb(yk{Cda5Hqu3$?mQW)w?R!9bJL3B4fd1nuNa zN&#w&5 znZE;d%1O3`>!Dlc;E?wjc1TDcaLuHD*cSzZxlIIwt65tYlf0(h7Vg$Ng6aOi46N!C z10ma$0NB*tfN9B9l}4asSvBiYmqg&2atzRx(oU#x2|8$V*P%okG|0&{0@xhuw-T{8 zX()Akz52!}l2wlJkt%MXGbyWTKoxT)a!pw^DV_4_rn6HdZKp`0Wwo)<+&5DzPN#`N za|>6o4qebOdi+VP39m5JE!af#h6aYDg}w6OV_Ez`w~|P&GfZc6#ERh4a3!Spq4P>3 z1(GE%nd37GamfaoEL8B>*|oNPeeV#dH+C-LR^r}tmOgOhryUFk(=Sjg>w|`B*VsSM z-?d1z!>v}w01O+u`nvju2Ed~w!#3~j=x(tc+YA2C*of`aD-%_KTb@G)Ix- z#fy>9vrwvc>;4xyIVb_DMj0)`%oRmWttTvP7F0w0&_4`rL~22JqHjX6Bu3cbtJPZh5#k-FwB}B z##35udQue|$1`-2kU_|Hu??e?xQFWj(Pj&NRChUdUmaKi(;1-{l?NyeM%@*ISi4Qb z6NBQ>u`oS~5y~K+FY!PpF?6>(Fx{UqAnHyF!f+*V&|S96W1OlUk0ZGDro&+-wWe$B zz+e{^0H5PzKqxTB^<1aVfrshuAP&0L!6uD-HXx|eB+=ZEiPvT7Tx{-IT%j_|+8Evd zrTW^(XuR05L4<%=z)PwcA#x-FiUyw&(7ZzcBYh1Y?~;a%R2rb4+lvDBKy;8#whmK8 zD2t&y!YLdq5`k5SM1H8O*eH%}rQ~qQk}huW!_y3a+Y>tO)~8yrodr~Pu){L9^FuPH zVS5WUi7DfJiqg_~GxE}xKyV`xX7+|wb1c0;L6P4;UCNwRWaE_2j%!zyy zbYsc-41E>ZsF2$S(sb&}eUukedF%|i#&-+F;VPHbok6LFTl$HFS{09xjT}8tcDR~E z^@%Q|QrI44*!ZGbJ|UP3q}AYLM^=TVU~S_jCMp*!!A{UPO&L~AIFpOI7&})y*%M=hgBP3xQX=gXN1H6+;=R@( zK}Dc%H5z+Y2%4nFXJaEWBO((nI8Q3rHpIG24dpvEbg)k90<5DVtlcpGa#Ohb;p*@V z_d;h0P`6Ty=@ci!5iA$X5jwAkm#cMC!S){sj}xZG&Z-Kb1l@@e*b2==gL8rcd!$|z zTdSe}^Tz5z>x}fwhw=v+L_RyBC5txc>Fa3MKyUM)4n1JGlAP@JL_6jW@{M%fkIRzatkuPmaX!AvH z;|i`J8xwr%+A%wGJBF;!3~}SO5@$>VGY8*Q@XU&Xy_#rR!*u!?MHu6~ksJ&&i4w$% zyeod30nLF3B4HoodN5)I~X6x4wraCi9pMT+|C(JY0f~|tvgH%B@ zP(+7g(IPVwoQVRRykBtihd8g$cY1;2!MQ4KsNb5HBF$ zYt=ROV?!*=wh~2{n|n^!Zo1g*@sm`)w>ILWqO!g6;GzTy8;sIJ%x*f; zKPLcV+lSHLVWT->b@S2sZ(gUm#yX(^$2l3mR6*y2%7Z|Lbc#{7RWc~3Bps=+r#P;a z11Itp9}8E<;>drOFqAYp>2fG5`yLaP`fZus7JbtxB>G2BdR(G%s0AsK1#;6~T1G-V zm8H2K2S!WC3DT;fO(=#LIzZDo5rKA+J2YB~#`4)_r{(C31Wx4P)t?3qy=}UKmQs9E+KGUL zGW7uFdNRRH@yR^73N^NLrwA?DhcQ>+0Le|9DaxSLNec!Dj%TA(*y7+iio<-s#LWU> zWm`DHa-fz_Gj>eESa?8Bpy*7oNZbkTlVG69=~zfQ61S@sGvTC##=8vc47Ay_Y1lMb zd7)Tc0Vij`40Az)8;598BzoBn5g3Aqb0T#17-Z7oWD}3ju(u-|U78J?sJpFJEJ2Kx zsVTH!Pt#p-Um&~$|vK>RL>CH|F7ZmShrY^zKRZN4%iqJU|l88qBqiTGWebx4FK znpcTfpG+J%xKdDUsk~wBNJxd=x2I zu)?)k1+&j=3hX7;~``$Yimx^Jt=>aez;{B%yDRWI4$SS=1A%UM^cOC1`;mg z*<$%ayxmPs3ej53J4%|2);-Nk=nKT@1zXx-Syn93nw=NyM22 zK%$)+b~kPsOA8>{^2yKbei4z;vj#p6-}XZ)--(Msdh(YW*i z&WmSLBAHp2?!0j0sZg2(Mvkh=HKA;%jf*nHHn_9dOeu2zLe8CvAfSZKmQmB;48xHBvbX3*y)w(X$yxat#TA0<@ zxXXEZd}0fEQ)exjj-DQ;`a+EYci{S>jfKan0h^(@+=sYm=cmny1XHHkIil=_6Vxn{ zb)cp_29a~Ysmc~yAjG2q_LGuNlgh|mf+AP0pup6=&@OX5570l_R~1JYO+kXxYIdHY zt5`I)@Yc0-`+~WDLMQ1g*4)%rZD9(cdvN$b+j4>l(=1wSqG{FvgfuFwENWs{fUAyU zZ4O;PjCdg@AP8K!9*rCsQ4WSQQhQlr%eX_&6o&~uBn~c!xP$WG>2{b%`tHmD_s&DL) zJO$+&=(;`eurVZ7>m53RSaH|_$Ys8LJRpfm{cOpG#nzg9%&Xj1I?ULXgIll!^@-Kc zbthlERNbvLVk^<47{ds8rsXjlq-PY@>TtR=4Q)gsi6wUlV6q)?K86bE{IOb?^CIrm zGRh!u`n7m8isM4 zSV^W;JDc_2CHA+)gqI0Aw?(x6S%Pd)vX-w<_`0qkx*Y{oh9H|)e6PnRA2Vx2Ht8h8 z7QIT%;4IV)0I4;$7{vVGlMv1Mc9>}&Z12;4=&4AI9wxB0-6&7(Bqv}L0h$eRX#?m; z+`Plg1wgM@yb#MwS*3XxWF255s)ADLBM~F1Mq#*^1RFpc0w$iwk6=}jJ#G_iL(MP| zWl0zL@V=tYHE1iq*zUw>W|j0G$MbZ+4QWybIP^(G;~W!A15AB zj1zFOp;Aqb1~tUHGNywx!J_JOf9Y8|y3+)8Z`c+ z%1Ln$8PNB})>}m5tMvC>UuobH2##pcAf6F7lut0V$`{@-U&v& zz9Ib6-w@))H-swvH<6lu0d4wwAKMQf-+ah)GJ0ckRt`L*o z72e)|5#sE>2=DoS6~VsmVJ3WE$jR>uaRk4MuL^PaD#rCWA&34=q^|x@$dMn3)c*ev z;`o1H%x(yA?59GW_?htM{9LGmffUCADX-ijRYQYJ&A(NOjkikgou3TK!rnufA5QRj-p`)9a+SCzNu*T{3mx_0l`@1}V-g zkp9&-N_Ak7l#};JapE2+d*39*GjBp!Y3YSaq?)r-il!EsI@2m;!*VGWESG*^xtw+8 zewjMBMtWB|q}tyl7a8^ih=15Fqg;`wor%1jD*aZ-rPZV_z$6|BF# z!tdTIB-W64cCSdC#`?MbPOS5HiPWk03f22Q)En#Q*!zTk1#9Uz*3!NMDEoj=R}Z2u ze^aQ*4`Ggf2y6Dk=o74;-jARUJ|g5{{GR@ZP)C0U?fe~~{ErI1^P_0TVYKb{gqVZ% zwdrHP#c$&g;Wd36{q=Dn=Y0Ze<*1NNzmGoreW7L@!x}k;xql3G`n2$#`F}*J0c)`G zSE&QjxjrM#8V|W?md{?M8tfk6xpt;Wp z|IBm3>-{$o_&*Y2){jIm=f}bu`iTgR%*I-oE!7FEi_@>b8hItw3)V&JeCeH^FH_-b zrFZVNGMM{%nL6}F>0f!H6xZJ<<@{NpYi1$~`NjnzvHQQ!Ax+^vzOOLUM_r+3QKsXbDz`eo^@ z`W58$D>68~SBeXJrFZyAtm$`3(fdy1xesf3pA4RPkCadCm#Nk7lj{5ju+|UC)XZU+>hDQ;CgESDM$W9`bYjmij$w04dRPZo&6&E@sw28|5P@# zJ|q3TUqalMq@4d{DZ0NbQ%C+>%Er@D96F1!_enoo6z9-e@tI~h|suYdSNq@l)rP%vJ>1VE? z&DW$n{v#>Q{z$5k|0TVq>&Wvu#uC5B@q6hy(p{H9_fMri`BNzl{8Xx@pUGfSDSwlv z)HP3e^8+QX1xolSz)~v6%vN4wgAz>*Ds}K>%D?zBB{$uw{Qb8o@zkxrzfH;RIZAcD zN_mxeN;SPk$_v@6pgx_aFrAl`x|HxfRoVZJ= zRj*fK_3M>veWSX)a*ujR<6<@Ya$3z9X;Q(wl}a98se-v3DmB!pg8dJvmlYmUFWI|I zsRN@b7@AaaW`_!nSCqV3QKB@Xg2p{4|5ucH>erN<^`sJWpH%ANJ|&*thq}K@iT&?F zgWs*>=65SmdAIUU;r9x{tKXv#sbt~3%4>SRlKuhZE%<=)3m;Ia%5Nxf=r_;@A5`Av z-%{e>Zz=yceoy`u+WaAu{UPOd|F#mD-$wYuXzPbj_8}$a975TLlsx|tB^LaSQU`w* zd4Ej#n?HuSeoUzgpHSlZCzRayNhJ<^5^0YrdGsjy<)~7XPbsnIQ%auv1GN1!N^JU! zN?kjy#Nt0hAOE59uKtmdNB&s(&;GFru6$8>bN*C`d4H-l|1IkCw@NNPr$pO1<*6%8H0>7uetAa~cly~`im^a@?mw#W$LqAYz^>a$}KBrXpL*<>m zro@G7=!<_>;`qNS|J=W0e14?F(2taN?f)n_^q=UD|HK@^?=k#d`%fjCeyY@*pQ+%q z@MI`GbwPUG!IyZlakdxCn~U(PywtVVcz)9_d8+qL&ue;}7j(bD6SEe0^3p=j3-9*) z&3AiZY%=dzw7C zx5ZO4%RG5xu67dZ|tC_vEGnp1=2im+Jiu&wKVaydZPflgAEw;>2Mu zX!wNZE%+qrd(0E9$2|YwF_iadFW7qmeRjeV=T3ND=Vv{C|7X2m?&m#u;`5$(2EWgL z-cuL9;Q9U+k?xDA`xnvAr#!Lolqa7$g}(b!PhR{p^wXbta^`8^KJ9s>FL~c93o>=@nPoDjrCoX;uegAz=g+D;qKk!l)uX?iboG11^hq3-Q z;QgEDpTuwX4?TJLhZr0D9=PU-!`D22!M}T=^1nPe=ej56U-#rG{GPq;`I-Ol)SUnA ziSWnhho5-r%1^wM_)pK<{8KM=^=FuOKS!Va-19CeU!L=Pb;rzBn2B^4ZY$OLzIge}gYizQOnBF7Um5 z3w;0D0zY+Tq3_>V=*uH-^wr+G{nW`tzI=X>?=>v({liOq(XiB4Czc|wW?x=t@x5o3 z`Qq#{Ke&3YulC>P`>WbeRvXf^`KcQ#eXsOpUv#cQ+Esq)$OEYFgMMmmJIZVKQ~Nu7 z@A(eE*ZJc7I$zG}_EQZH`QDy~e6jx_UtN93_h&uqi@6W`>Ii<1KkNsE41P1de?H@< z_C4bJCm-=si?hCWIO_-Jhy2um^=Q`yUyf`5{83*Xe$-EOK8AWe=F5h+_`&?Q`l;vN z>Z|K-_r>C2q#O3dwPDm{vmXrQe6cU*tKKbsDpNq30_s&jf8e*X=&PrSfN%BHff3Yo z)K3*2_q~gcBmLvPY~1eqneD#VwB46iw)@~;eRXmIaTDm@Nk3@Z;it~+@Pi{$z898# ze^c2PBV~+D*-up}Xm7<&g*$yQXP2)gcll!PEml%{bgTV`DH(K?bk5oPx}6qCw=k!lYX%HU4H7yyYc;Q-bICa?fW_}O#{XJh5K8~^agfEYN(hu4`<9q&b zKREYCNb|?OJoU%Em~{gApYZ*8pGDt)7UTRUzU=*+FNQvcx_!=<*YUgRB>Lp@$oKQU zT>J&ZeF5|A3z#Qg^ySPc-+%rTe*YBX_GiAF|FrL|e#Tb~Uq)TNjQsx`Yv?r6pZ3MM z)4n(FFR?cM(wE21`2NAK_-f8y0q26R_FV8&jhB3NVSPp2M7a4kF$Uk>;8&p1hLQAdFhpbxQyTMRRMG^fh^$nFn;I0IuO0D4&;G(f!B6N zkZQOy@SeFd2%ZlE@K=GnaaW)&zCMr*ZwOLz76#s?HzLnPfgD;Cq^{o+sCkQn;Mscv z@63HcF!Sa>cHbYUS*rulusZN=tPcFS?SVMn9)NcbUN&!SAfH(q1Sh)#@k}@J#_#-| zK=}^^GV@S?H5$ls4+m()RV*^0VtLw!quI$a99*0DgW9t*tQ@!+m(kwSfp_35fxP;a zKsuQZ5Y?yW*K%n^R?9HE|_1O3*^g_m|f_H{;MB&j|g!M`YPynMdJpM+6;Z} zg^kcBJtl5H10C(b9nb?oM|)@&bS%4&ei!tZPe3>Jgz&Ds18LtOQYGk}Q2I4n0uA=b&dhiT*qZUDHYEqCSswpNIbE^Z5P( zzP})X!%t%zo)&@l3)J~9ggp0`(EFVca{gZd=c~{~eN}j;&WhB`*Mv9ncOtd-yzq{E zU8pnvQ~0MYq3xH2x9?xjZs?Fm4}0wULT&zmkcX}capkJ;u0JQ{%=#Jn^Jf@q{2ur@ z@)uIgC>flDzP0r>=tFOpw=IBRHRmoV=G`T|1+SO44s}5vu@<_7wbH+|PKs-9k@DCk zz}_b1#$o7AH%nRBEX5K0UfL{GCMU(YoRo96NU>mx^p9?V&M7Zb`?o?zu~n+MBho)K z0{zb@bUKei7xlQ5eo3l*W6;x%$>78!bR(0{8SRikLq*EP)6k_%OSx|+bVE-_dHD$` zt~?=wIlm0u2lPe@o|N+Jlh7GG34O>uDQEUU_X|DIto>5V-!ElpKXf4Pl_K+A=vLl` z^4=$9=Ka#Uen5)n4@kA~*QJ>Jbs1EkxZQh5s^>o-*Zx3eNLvJ>ydkYD1-g~A!X