@capacitor-community/sqlite 7.0.0 → 7.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.js","sources":["../build/electron/src/GlobalSQLite.js","../build/electron/src/electron-utils/UtilsSQL92Compatibility.js","../build/electron/src/electron-utils/utilsDelete.js","../build/electron/src/electron-utils/utilsFile.js","../build/electron/src/electron-utils/utilsSqlstatement.js","../build/electron/src/electron-utils/utilsSQLite.js","../build/electron/src/electron-utils/ImportExportJson/utilsJson.js","../build/electron/src/electron-utils/ImportExportJson/exportToJson.js","../build/electron/src/electron-utils/utilsDrop.js","../build/electron/src/electron-utils/ImportExportJson/importFromJson.js","../build/electron/src/electron-utils/utilsSecret.js","../build/electron/src/electron-utils/ImportExportJson/utilsJsonEncryption.js","../build/electron/src/electron-utils/utilsEncryption.js","../build/electron/src/electron-utils/utilsUpgrade.js","../build/electron/src/electron-utils/Database.js","../build/electron/src/index.js","../build/electron/src/index.js?commonjs-entry"],"sourcesContent":["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.GlobalSQLite = void 0;\nclass GlobalSQLite {\n constructor() {\n this.secret = 'sqlite secret';\n this.newsecret = 'sqlite new secret';\n }\n}\nexports.GlobalSQLite = GlobalSQLite;\n//# sourceMappingURL=GlobalSQLite.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.UtilsSQL92Compatibility = void 0;\nclass UtilsSQL92Compatibility {\n compatibleSQL92(statement) {\n let newStatement = '';\n const action = statement.trim().split(' ')[0].toUpperCase();\n switch (action) {\n case 'INSERT':\n newStatement = this.insertSQL92(statement);\n break;\n case 'UPDATE':\n newStatement = this.updateSQL92(statement);\n break;\n case 'DELETE':\n case 'SELECT':\n newStatement = this.whereSQL92(statement);\n break;\n default:\n throw new Error(`Error: ${action} not implemented`);\n }\n return newStatement;\n }\n insertSQL92(insertStatement) {\n // Split the statement into parts\n const inStmt = insertStatement.trim();\n const valuesStartIndex = inStmt.indexOf('VALUES');\n const columnsPart = inStmt.substring(0, valuesStartIndex);\n const valuesPart = inStmt.substring(valuesStartIndex);\n // Extract values and replace double quotes with single quotes\n const modifiedValuesPart = valuesPart.replace(/\"([^\"]+)\"/g, \"'$1'\");\n // Reconstruct the modified statement\n const modifiedStatement = columnsPart + modifiedValuesPart;\n return modifiedStatement;\n }\n updateSQL92(updateStatement) {\n // Split the statement into SET and WHERE parts\n let isWhere = true;\n const setWhereSplit = updateStatement.toUpperCase().split('WHERE');\n if (setWhereSplit.length <= 1)\n isWhere = false;\n const setUpdate = setWhereSplit[0].toUpperCase().split('SET')[0].trim();\n const setPart = setWhereSplit[0].toUpperCase().split('SET')[1].trim();\n const modifiedSetPart = this.modSetPart(setPart);\n let modifiedStatement = `${setUpdate} SET ${modifiedSetPart}`;\n if (isWhere) {\n for (let i = 1; i < setWhereSplit.length; i++) {\n const wherePart = setWhereSplit[i].trim();\n const modifiedWherePart = this.modWherePart(wherePart);\n modifiedStatement += ` WHERE ${modifiedWherePart}`;\n }\n }\n return modifiedStatement;\n }\n whereSQL92(statement) {\n // Split the statement into SET and WHERE parts\n const setWhereSplit = statement.toUpperCase().split('WHERE');\n if (setWhereSplit.length <= 1)\n return statement;\n let modifiedStatement = `${setWhereSplit[0].trim()}`;\n for (let i = 1; i < setWhereSplit.length; i++) {\n const wherePart = setWhereSplit[1].trim();\n const modifiedWherePart = this.modWherePart(wherePart);\n modifiedStatement += ` WHERE ${modifiedWherePart}`;\n }\n return modifiedStatement;\n }\n modSetPart(setStatement) {\n const commaPart = setStatement.split(',');\n const modCommaPart = [];\n for (const com of commaPart) {\n const equalPart = com.split('=');\n const value = equalPart[1].replaceAll(`\"`, `'`);\n modCommaPart.push(`${equalPart[0].trim()} = ${value.trim()}`);\n }\n return modCommaPart.toString();\n }\n modWherePart(whereStatement) {\n const keywords = new Set([\n '=',\n '<>',\n '>',\n '>=',\n '<',\n '<=',\n 'IN',\n 'VALUES',\n '(',\n ',',\n ')',\n 'BETWEEN',\n 'LIKE',\n 'AND',\n 'OR',\n 'NOT',\n ]);\n const newTokens = [];\n const tokens = whereStatement\n .split(/(\\s|,|\\(|\\))/)\n .filter((item) => item !== ' ')\n .filter((item) => item !== '');\n let inClause = false;\n let inValues = false;\n let modValue = false;\n let betwClause = false;\n let opsClause = false;\n let inValValues = false;\n let inValPar = false;\n for (const token of tokens) {\n if (new Set(['=', '<>', '>', '>=', '<', '<=']).has(token)) {\n newTokens.push(token);\n modValue = true;\n opsClause = false;\n }\n else if (token.toUpperCase() === 'BETWEEN') {\n newTokens.push(token);\n betwClause = true;\n modValue = true;\n opsClause = false;\n }\n else if (betwClause && token.toUpperCase() === 'AND') {\n newTokens.push(token);\n modValue = true;\n betwClause = false;\n }\n else if (token.toUpperCase() === 'LIKE') {\n newTokens.push(token);\n opsClause = false;\n modValue = true;\n }\n else if (token.toUpperCase() === 'AND' || token.toUpperCase() === 'OR' || token.toUpperCase() === 'NOT') {\n newTokens.push(token);\n opsClause = true;\n }\n else if (token.toUpperCase() === 'IN') {\n newTokens.push(token);\n opsClause = false;\n inClause = true;\n }\n else if (inClause && token === '(') {\n newTokens.push(token);\n modValue = true;\n inValues = true;\n }\n else if (inValues && token.toUpperCase() === ',') {\n newTokens.push(token);\n modValue = true;\n }\n else if (inValues && token.toUpperCase() === 'VALUES') {\n newTokens.push(token);\n inValues = false;\n inValValues = true;\n inClause = false;\n }\n else if (inValValues && token === '(') {\n newTokens.push(token);\n inValPar = true;\n modValue = true;\n }\n else if (inValPar && token.toUpperCase() === ',') {\n newTokens.push(token);\n modValue = true;\n }\n else if (inValPar && inValValues && token === ')') {\n newTokens.push(token);\n inValPar = false;\n inValues = true;\n }\n else if ((inValues || inValValues) && token === ')') {\n newTokens.push(token);\n inValValues = false;\n inValues = false;\n inClause = false;\n }\n else if (modValue && !opsClause && !keywords.has(token.toUpperCase())) {\n if (token.length > 0) {\n const nwToken = token.replaceAll(`\"`, `'`);\n newTokens.push(nwToken);\n modValue = false;\n }\n }\n else {\n newTokens.push(token);\n }\n }\n const ns = newTokens.join(' ');\n return ns;\n }\n}\nexports.UtilsSQL92Compatibility = UtilsSQL92Compatibility;\n//# sourceMappingURL=UtilsSQL92Compatibility.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.UtilsDelete = void 0;\nclass UtilsDeleteError {\n constructor(message) {\n this.message = message;\n }\n static upDateWhereForDefault(message) {\n return new UtilsDeleteError(message);\n }\n static upDateWhereForRestrict(message) {\n return new UtilsDeleteError(message);\n }\n static upDateWhereForCascade(message) {\n return new UtilsDeleteError(message);\n }\n static executeUpdateForDelete(message) {\n return new UtilsDeleteError(message);\n }\n}\nclass UtilsDelete {\n getReferencedTableName(refValue) {\n let tableName = '';\n if (refValue.length > 0) {\n const arr = refValue.split(new RegExp('REFERENCES', 'i'));\n if (arr.length === 2) {\n const oPar = arr[1].indexOf('(');\n tableName = arr[1].substring(0, oPar).trim();\n }\n }\n return tableName;\n }\n upDateWhereForDefault(withRefsNames, results) {\n let setStmt = '';\n let uWhereStmt = '';\n try {\n const key = results.key;\n const cols = [];\n for (const relItem of results.relatedItems) {\n const mVal = relItem[key];\n if (mVal !== undefined) {\n cols.push(mVal);\n }\n }\n // Create the set statement\n for (const name of withRefsNames) {\n setStmt += `${name} = NULL, `;\n }\n setStmt += 'sql_deleted = 0';\n // Create the where statement\n uWhereStmt = `WHERE ${key} IN (`;\n for (const col of cols) {\n uWhereStmt += `${col},`;\n }\n if (uWhereStmt.endsWith(',')) {\n uWhereStmt = uWhereStmt.slice(0, -1);\n }\n uWhereStmt += ');';\n }\n catch (error) {\n const msg = error.message ? error.message : error;\n throw UtilsDeleteError.upDateWhereForDefault(msg);\n }\n return { setStmt, uWhereStmt };\n }\n upDateWhereForRestrict(results) {\n try {\n const setStmt = '';\n const uWhereStmt = '';\n if (results.relatedItems.length > 0) {\n const msg = 'Restrict mode related items exist, please delete them first';\n throw UtilsDeleteError.upDateWhereForRestrict(msg);\n }\n return { setStmt, uWhereStmt };\n }\n catch (error) {\n const msg = error.message ? error.message : error;\n throw UtilsDeleteError.upDateWhereForRestrict(msg);\n }\n }\n upDateWhereForCascade(results) {\n let setStmt = '';\n let uWhereStmt = '';\n try {\n const key = results.key;\n const cols = [];\n for (const relItem of results.relatedItems) {\n const mVal = relItem[key];\n if (mVal !== undefined) {\n cols.push(mVal);\n }\n }\n setStmt += 'sql_deleted = 1';\n // Create the where statement\n uWhereStmt = `WHERE ${key} IN (`;\n for (const col of cols) {\n uWhereStmt += `${col},`;\n }\n if (uWhereStmt.endsWith(',')) {\n uWhereStmt = uWhereStmt.slice(0, -1);\n }\n uWhereStmt += ');';\n }\n catch (error) {\n const msg = error.message ? error.message : error;\n throw UtilsDeleteError.upDateWhereForCascade(msg);\n }\n return { setStmt, uWhereStmt };\n }\n getCurrentTimeAsInteger() {\n const currentTime = Math.floor(Date.now() / 1000);\n return currentTime;\n }\n checkValuesMatch(array1, array2) {\n for (const value of array1) {\n if (!array2.includes(value)) {\n return false;\n }\n }\n return true;\n }\n}\nexports.UtilsDelete = UtilsDelete;\n//# sourceMappingURL=utilsDelete.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.UtilsFile = void 0;\nconst promises_1 = require(\"node:fs/promises\");\nclass UtilsFile {\n constructor() {\n this.pathDB = 'Databases';\n this.Path = null;\n this.NodeFs = null;\n this.NodeFetch = null;\n this.JSZip = null;\n this.Os = null;\n this.Electron = null;\n this.AppName = '';\n this.HomeDir = '';\n this.sep = '/';\n this.isEncryption = false;\n this.Path = require('path');\n this.NodeFs = require('fs');\n this.NodeFetch = require('node-fetch');\n this.Os = require('os');\n this.JSZip = require('jszip');\n this.Electron = require('electron');\n this.HomeDir = this.Os.homedir();\n const dir = __dirname;\n const idx = dir.indexOf('\\\\');\n if (idx != -1)\n this.sep = '\\\\';\n this.appPath = this.Electron.app.getAppPath();\n const rawdata = this.NodeFs.readFileSync(this.Path.resolve(this.appPath, 'package.json'));\n this.AppName = JSON.parse(rawdata).name;\n const pathToBuild = this.Path.join(this.appPath, 'build');\n if (this.NodeFs.existsSync(this.Path.join(pathToBuild, 'capacitor.config.js'))) {\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n this.capConfig = require(this.Path.join(pathToBuild, 'capacitor.config.js')).default;\n }\n else {\n this.capConfig = JSON.parse(this.NodeFs.readFileSync(this.Path.join(this.appPath, 'capacitor.config.json')).toString());\n }\n this.isEncryption = this.capConfig.plugins.CapacitorSQLite.electronIsEncryption\n ? this.capConfig.plugins.CapacitorSQLite.electronIsEncryption\n : false;\n this.osType = this.Os.type();\n switch (this.osType) {\n case 'Darwin':\n this.pathDB = this.capConfig.plugins.CapacitorSQLite.electronMacLocation\n ? this.capConfig.plugins.CapacitorSQLite.electronMacLocation\n : 'Databases';\n break;\n case 'Linux':\n this.pathDB = this.capConfig.plugins.CapacitorSQLite.electronLinuxLocation\n ? this.capConfig.plugins.CapacitorSQLite.electronLinuxLocation\n : 'Databases';\n break;\n case 'Windows_NT':\n this.pathDB = this.capConfig.plugins.CapacitorSQLite.electronWindowsLocation\n ? this.capConfig.plugins.CapacitorSQLite.electronWindowsLocation\n : 'Databases';\n break;\n default:\n console.log('other operating system');\n }\n }\n /**\n * Get isEncryption from config\n * @returns\n */\n getIsEncryption() {\n return this.isEncryption;\n }\n /**\n * GetExtName\n * @param filePath\n * @returns\n */\n getExtName(filePath) {\n const matches = filePath.match(/\\.([a-zA-Z0-9]+)(?:[\\\\?#]|$)/);\n return matches ? `.${matches[1].toLowerCase()}` : ''; // returns the matched extension in lowercase\n // return this.Path.extname(filePath);\n }\n getBaseName(filePath) {\n const decodedUrl = decodeURIComponent(filePath); // Decode the URL component\n const baseName = this.Path.basename(decodedUrl, this.Path.extname(filePath));\n return baseName;\n }\n /**\n * IsPathExists\n * @param filePath\n */\n isPathExists(filePath) {\n let ret = false;\n try {\n if (this.NodeFs.existsSync(filePath)) {\n ret = true;\n }\n }\n catch (err) {\n console.error('Error isFileExist: ' + err);\n ret = false;\n }\n return ret;\n }\n /**\n * IsFileExists\n * @param fileName\n */\n isFileExists(fileName) {\n let ret = false;\n const filePath = this.getFilePath(fileName);\n if (filePath.length > 0) {\n ret = this.isPathExists(filePath);\n }\n return ret;\n }\n /**\n * GetFilePath\n * get the file path\n * @param fileName\n */\n getFilePath(fileName) {\n return this.Path.join(this.getDatabasesPath(), fileName);\n }\n /**\n * GetDatabasesPath\n * get the database folder path\n */\n getDatabasesPath() {\n let retPath = '';\n const sep = this.Path.sep;\n const dbFolder = this.pathDB;\n if (dbFolder.includes(sep)) {\n retPath = dbFolder;\n if (this.Path.basename(dbFolder) !== this.AppName) {\n retPath = this.Path.join(dbFolder, this.AppName);\n }\n }\n else {\n retPath = this.Path.join(this.HomeDir, dbFolder, this.AppName);\n }\n const retB = this._createFolderIfNotExists(retPath);\n if (!retB)\n retPath = '';\n return retPath;\n }\n /**\n * GetCachePath\n * get the database cache folder path\n */\n getCachePath() {\n let retPath = '';\n const databasePath = this.getDatabasesPath();\n retPath = this.Path.join(databasePath, 'cache');\n const retB = this._createFolderIfNotExists(retPath);\n if (!retB)\n retPath = '';\n return retPath;\n }\n /**\n * GetAssetsDatabasesPath\n * get the assets databases folder path\n */\n getAssetsDatabasesPath() {\n let retPath = '';\n const webDir = this.capConfig.webDir;\n const dir = webDir === 'www' ? 'src' : 'public';\n let mAppPath = this.appPath;\n if (this.Path.basename(this.appPath) === 'electron') {\n mAppPath = this.Path.dirname(this.appPath);\n }\n retPath = this.Path.resolve(mAppPath, dir, 'assets', 'databases');\n return retPath;\n }\n /**\n * SetPathSuffix\n * @param db\n */\n setPathSuffix(db) {\n let toDb = db;\n const ext = '.db';\n const dirName = this.Path.dirname(db);\n const baseName = this.getBaseName(db);\n if (this.getExtName(db) === ext) {\n if (!baseName.includes('SQLite')) {\n const dbName = `${baseName}SQLite`;\n toDb = `${this.Path.join(dirName, dbName)}${ext}`;\n }\n }\n return toDb;\n }\n /**\n * GetFileList\n * get the file list for a given folder\n * @param path\n */\n async getFileList(path) {\n const filenames = this.NodeFs.readdirSync(path);\n const dbs = [];\n filenames.forEach((file) => {\n if (this.getExtName(file) == '.db' || this.getExtName(file) == '.zip')\n dbs.push(file);\n });\n return Promise.resolve(dbs);\n }\n /**\n * CopyFromAssetToDatabase\n * @param db\n * @param overwrite\n */\n async copyFromAssetToDatabase(db, overwrite) {\n const pAsset = this.Path.join(this.getAssetsDatabasesPath(), db);\n const toDb = this.setPathSuffix(db);\n const pDb = this.Path.join(this.getDatabasesPath(), toDb);\n await this.copyFilePath(pAsset, pDb, overwrite);\n return Promise.resolve();\n }\n /**\n * unzipDatabase\n * @param db\n * @param overwrite\n */\n async unzipDatabase(db, fPath, overwrite) {\n const pZip = this.Path.join(fPath, db);\n try {\n // Read the Zip file\n const data = await this.NodeFs.promises.readFile(pZip);\n const zip = new this.JSZip();\n const contents = await zip.loadAsync(data);\n // Create an array to store promises for writing files\n const writePromises = [];\n Object.keys(contents.files).forEach((filename) => {\n writePromises.push(zip\n .file(filename)\n .async('nodebuffer')\n .then(async (content) => {\n const toDb = this.setPathSuffix(filename);\n const pDb = this.Path.join(this.getDatabasesPath(), toDb);\n // check filePath exists\n const isPath = this.isPathExists(pDb);\n if (!isPath || overwrite) {\n if (overwrite && isPath) {\n await this.deleteFilePath(pDb);\n }\n await this.NodeFs.promises.writeFile(pDb, content);\n }\n }));\n });\n // Wait for all write promises to resolve\n await Promise.all(writePromises);\n return Promise.resolve();\n }\n catch (err) {\n console.log(err);\n return Promise.reject(`unzipDatabase ${JSON.stringify(err)}`);\n }\n }\n /**\n * CopyFileName\n * Copy file name\n * @param fileName\n * @param toFileName\n */\n async copyFileName(fileName, toFileName) {\n // get File Paths\n const filePath = this.getFilePath(fileName);\n const toFilePath = this.getFilePath(toFileName);\n if (filePath.length !== 0 && toFilePath.length !== 0) {\n try {\n await this.copyFilePath(filePath, toFilePath, true);\n return Promise.resolve();\n }\n catch (err) {\n return Promise.reject(`CopyFileName: ${err}`);\n }\n }\n else {\n return Promise.reject('CopyFileName: cannot get the ' + 'filePath');\n }\n }\n /**\n * CopyFilePath\n * Copy file Path\n * @param filePath\n * @param toFilePath\n */\n async copyFilePath(filePath, toFilePath, overwrite) {\n if (filePath.length !== 0 && toFilePath.length !== 0) {\n // check filePath exists\n const isPath = this.isPathExists(toFilePath);\n if (!isPath || overwrite) {\n try {\n if (overwrite && isPath) {\n await this.deleteFilePath(toFilePath);\n }\n this.NodeFs.copyFileSync(filePath, toFilePath);\n }\n catch (err) {\n return Promise.reject(`CopyFilePath: ${err}`);\n }\n }\n return Promise.resolve();\n }\n else {\n return Promise.reject('CopyFilePath: cannot get the ' + 'filePath');\n }\n }\n async copyFile(fromPath, fromFile, toPath, toFile) {\n const fPath = this.Path.join(fromPath, fromFile);\n const tPath = this.Path.join(toPath, toFile);\n try {\n this.NodeFs.copyFileSync(fPath, tPath);\n return Promise.resolve();\n }\n catch (err) {\n return Promise.reject(`CopyFile: ${err}`);\n }\n }\n /**\n * DeleteFileName\n * Delete a file by its name\n * @param fileName\n */\n async deleteFileName(fileName) {\n // get file path\n const filePath = this.getFilePath(fileName);\n if (filePath.length !== 0) {\n try {\n await this.deleteFilePath(filePath);\n return Promise.resolve();\n }\n catch (err) {\n return Promise.reject('DeleteFileName: delete filePath ' + `failed ${err}`);\n }\n }\n else {\n return Promise.reject('DeleteFileName: get filePath ' + 'failed');\n }\n }\n /**\n * DeleteFilePath\n * Delete a file by its path\n * @param filePath\n */\n async deleteFilePath(filePath) {\n let unlinkRetries = 50000;\n /**\n * On windows, the file lock behaves unpredictable. Often it claims a databsae file is locked / busy, although\n * the file stream is already closed.\n * Even though we already checked the status with the `waitForFilePathLock()` method previously.\n *\n * The only way to handle this reliably is to retry deletion until it works.\n */\n const deleteFile = async () => {\n try {\n await promises_1.unlink(filePath);\n }\n catch (err) {\n unlinkRetries--;\n if (unlinkRetries > 0) {\n await deleteFile();\n }\n else {\n throw err;\n }\n }\n };\n if (filePath.length !== 0) {\n // check if path exists\n const isPath = this.isPathExists(filePath);\n if (isPath) {\n try {\n await this.waitForFilePathLock(filePath);\n // actually delete the file\n await deleteFile();\n return Promise.resolve();\n }\n catch (err) {\n return Promise.reject(`DeleteFilePath: ${err}`);\n }\n }\n else {\n return Promise.resolve();\n }\n }\n else {\n return Promise.reject('DeleteFilePath: delete filePath' + 'failed');\n }\n }\n async waitForFilePathLock(filePath, timeoutMS = 4000) {\n let timeIsOver = false;\n setTimeout(() => {\n timeIsOver = true;\n }, timeoutMS);\n return new Promise((resolve, reject) => {\n const check = async () => {\n if (timeIsOver) {\n reject(new Error(`WaitForFilePathLock: The resource is still locked / busy after ${timeoutMS} milliseconds.`));\n return;\n }\n // check if path exists\n const isPath = this.isPathExists(filePath);\n // The file path does not exist. A non existant path cannot be locked.\n if (!isPath) {\n resolve();\n return;\n }\n try {\n const stream = await promises_1.open(filePath, 'r+');\n // We need to close the stream afterwards, because otherwise, we're locking the file\n await stream.close();\n resolve();\n }\n catch (err) {\n if (err.code === 'EBUSY') {\n // The resource is busy. Retry in 100ms\n setTimeout(() => {\n check();\n }, 100);\n return;\n }\n else if (err.code === 'ENOENT') {\n // The file does not exist (anymore). So it cannot be locked.\n resolve();\n return;\n }\n else {\n // Something else went wrong.\n reject(new Error(`WaitForFilePathLock: Error while checking the file: ${err}`));\n }\n }\n };\n check();\n });\n }\n /**\n * RenameFileName\n * @param fileName\n * @param toFileName\n */\n async renameFileName(fileName, toFileName) {\n // get File Paths\n const filePath = this.getFilePath(fileName);\n const toFilePath = this.getFilePath(toFileName);\n if (filePath.length !== 0 && toFilePath.length !== 0) {\n try {\n await this.renameFilePath(filePath, toFilePath);\n return Promise.resolve();\n }\n catch (err) {\n return Promise.reject(`RenameFileName: ${err}`);\n }\n }\n else {\n return Promise.reject('RenameFileName: filePaths do not ' + 'exist');\n }\n }\n /**\n * RenameFilePath\n * @param filePath\n * @param toFilePath\n */\n async renameFilePath(filePath, toFilePath) {\n if (filePath.length !== 0 && toFilePath.length !== 0) {\n // check filePath exists\n const isPath = this.isPathExists(filePath);\n if (isPath) {\n // delete toFilePath if exists\n try {\n await this.deleteFilePath(toFilePath);\n this.NodeFs.renameSync(filePath, toFilePath);\n return Promise.resolve();\n }\n catch (err) {\n return Promise.reject('RenameFilePath: ' + `${err}`);\n }\n }\n else {\n return Promise.reject(`RenameFilePath: ${filePath} does not exist`);\n }\n }\n else {\n return Promise.reject('RenameFilePath: filePath not found');\n }\n }\n async moveDatabaseFromCache() {\n const cachePath = this.getCachePath();\n const databasePath = this.getDatabasesPath();\n const dbCacheList = await this.getFileList(cachePath);\n for (const name of dbCacheList) {\n const ext = this.getExtName(name);\n const fromDBName = this.Path.join(cachePath, name);\n if (ext === '.db') {\n const pDb = this.setPathSuffix(this.Path.join(databasePath, name));\n try {\n await this.renameFilePath(fromDBName, pDb);\n }\n catch (err) {\n return Promise.reject('moveDatabaseFromCache: ' + `${err}`);\n }\n }\n if (ext === '.zip') {\n try {\n await this.deleteFilePath(fromDBName);\n }\n catch (err) {\n return Promise.reject('moveDatabaseFromCache: ' + `${err}`);\n }\n }\n }\n return Promise.resolve();\n }\n /**\n * RestoreFileName\n * @param fileName\n * @param prefix\n */\n async restoreFileName(fileName, prefix) {\n const mFileName = `${prefix}-${fileName}`;\n // check if file exists\n const isFilePre = this.isFileExists(mFileName);\n if (isFilePre) {\n const isFile = this.isFileExists(fileName);\n if (isFile) {\n try {\n await this.deleteFileName(fileName);\n await this.renameFileName(mFileName, fileName);\n return Promise.resolve();\n }\n catch (err) {\n return Promise.reject('RestoreFileName: ' + `${err}`);\n }\n }\n else {\n return Promise.reject(`RestoreFileName: ${fileName} ` + 'does not exist');\n }\n }\n else {\n return Promise.reject(`RestoreFileName: ${mFileName} ` + 'does not exist');\n }\n }\n /**\n * DownloadFileFromHTTP\n * @param url\n * @param path\n */\n async downloadFileFromHTTP(url, pathFolder) {\n const res = await this.NodeFetch(url);\n const ext = this.getExtName(url);\n const dbName = this.getBaseName(url);\n const filePath = `${this.Path.join(pathFolder, dbName)}${ext}`;\n const fileStream = this.NodeFs.createWriteStream(filePath);\n await new Promise((resolve, reject) => {\n res.body.pipe(fileStream);\n res.body.on('error', reject);\n fileStream.on('finish', resolve);\n });\n }\n readFileAsPromise(path, options) {\n return new Promise((resolve, reject) => {\n const fileStream = this.NodeFs.createReadStream(path, options);\n const chunks = [];\n fileStream.on('data', (data) => {\n chunks.push(data);\n });\n fileStream.on('close', () => {\n resolve(chunks.toString());\n });\n fileStream.on('error', (err) => {\n const msg = err.message ? err.message : err;\n reject(msg);\n });\n });\n }\n /**\n * CreateFolderIfNotExists\n * Create directory\n * @param folder\n */\n _createFolderIfNotExists(folder) {\n let ret;\n try {\n if (!this.NodeFs.existsSync(folder)) {\n this._mkdirSyncRecursive(folder);\n }\n ret = true;\n }\n catch (e) {\n console.log('Error: in getDBPath', e);\n ret = false;\n }\n return ret;\n }\n /**\n * MkdirSyncRecursive\n * Create directories recursively\n * @param directory\n */\n _mkdirSyncRecursive(directory) {\n const sep = this.Path.sep;\n const path = directory.replace(/\\/$/, '').split(sep);\n for (let i = 1; i <= path.length; i++) {\n const segment = path.slice(0, i).join(sep);\n segment.length > 0 && !this.NodeFs.existsSync(segment) ? this.NodeFs.mkdirSync(segment) : null;\n }\n return;\n }\n}\nexports.UtilsFile = UtilsFile;\n//# sourceMappingURL=utilsFile.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.UtilsSQLStatement = void 0;\nclass UtilsSQLStatement {\n constructor() {\n this.replaceString = (originalStr, searchStr, replaceStr) => {\n const range = originalStr.indexOf(searchStr);\n if (range !== -1) {\n const modifiedStr = originalStr.substring(0, range) + replaceStr + originalStr.substring(range + searchStr.length);\n return modifiedStr;\n }\n return originalStr;\n };\n }\n extractTableName(statement) {\n const pattern = /(?:INSERT\\s+INTO|UPDATE|DELETE\\s+FROM)\\s+([^\\s]+)/i;\n const match = statement.match(pattern);\n if (match?.[1]) {\n const tableName = match[1];\n return tableName;\n }\n return null;\n }\n extractWhereClause(statement) {\n const pattern = /WHERE(.+?)(?:ORDER\\s+BY|LIMIT|$)/i;\n const match = statement.match(pattern);\n if (match?.[1]) {\n const whereClause = match[1].trim();\n return whereClause;\n }\n return null;\n }\n addPrefixToWhereClause(whereClause, colNames, refNames, prefix) {\n let columnValuePairs;\n if (whereClause.includes('AND')) {\n // Split the WHERE clause based on the \"AND\" keyword\n const subSequenceArray = whereClause.split('AND');\n columnValuePairs = subSequenceArray.map((pair) => pair.trim());\n }\n else {\n columnValuePairs = [whereClause];\n }\n const modifiedPairs = columnValuePairs.map((pair) => {\n const match = pair.match(/(\\w+)\\s*(=|IN|BETWEEN|LIKE)\\s*(.+)/);\n if (!match) {\n return pair;\n }\n const column = match[1].trim();\n const operator = match[2].trim();\n const value = match[3].trim();\n let newColumn = column;\n const index = this.findIndexOfStringInArray(column, refNames);\n if (index !== -1) {\n newColumn = this.getStringAtIndex(colNames, index);\n }\n const modifiedColumn = `${prefix}${newColumn}`;\n const ret = `${modifiedColumn} ${operator} ${value}`;\n return ret;\n });\n return modifiedPairs.join(' AND ');\n }\n findIndexOfStringInArray(target, array) {\n return array.indexOf(target);\n }\n getStringAtIndex(array, index) {\n if (index >= 0 && index < array.length) {\n return array[index];\n }\n else {\n return undefined;\n }\n }\n extractForeignKeyInfo(sqlStatement) {\n // Define the regular expression pattern for extracting the FOREIGN KEY clause\n const foreignKeyPattern = /\\bFOREIGN\\s+KEY\\s*\\(([^)]+)\\)\\s+REFERENCES\\s+(\\w+)\\s*\\(([^)]+)\\)\\s+(ON\\s+DELETE\\s+(RESTRICT|CASCADE|SET\\s+NULL|SET\\s+DEFAULT|NO\\s+ACTION))?/;\n const matches = sqlStatement.match(foreignKeyPattern);\n if (matches) {\n const foreignKeyInfo = {\n forKeys: matches[1].split(',').map((key) => key.trim()),\n tableName: matches[2],\n refKeys: matches[3].split(',').map((key) => key.trim()),\n action: matches[5] ? matches[5] : 'NO ACTION',\n };\n return foreignKeyInfo;\n }\n else {\n throw new Error('extractForeignKeyInfo: No FOREIGN KEY found');\n }\n }\n extractColumnNames(whereClause) {\n const keywords = new Set(['AND', 'OR', 'IN', 'VALUES', 'LIKE', 'BETWEEN', 'NOT']);\n const regex = /\\b[a-zA-Z]\\w*\\b(?=\\s*(?:<=?|>=?|<>?|=|AND|OR|BETWEEN|NOT|IN|LIKE))|\\b[a-zA-Z]\\w*\\b\\s+BETWEEN\\s+'[^']+'\\s+AND\\s+'[^']+'|\\(([^)]+)\\)\\s+IN\\s+\\(?\\s*VALUES\\s*\\(/g;\n let match;\n const columns = [];\n while ((match = regex.exec(whereClause)) !== null) {\n const columnList = match[1];\n if (columnList) {\n const columnNamesArray = columnList.split(',');\n for (const columnName of columnNamesArray) {\n columns.push(columnName.trim());\n }\n }\n else {\n const matchedText = match[0];\n if (!keywords.has(matchedText.trim().toUpperCase())) {\n columns.push(matchedText.trim());\n }\n }\n }\n return columns;\n }\n flattenMultilineString(input) {\n const lines = input.split(/\\r?\\n/);\n return lines.join(' ');\n }\n extractCombinedPrimaryKey(whereClause) {\n const pattern = /WHERE\\s*\\((.+?)\\)\\s*(?:=|IN)\\s*\\((.+?)\\)/g;\n const regex = new RegExp(pattern);\n const matches = whereClause.matchAll(regex);\n const primaryKeySets = [];\n for (const match of matches) {\n const keysString = match[1].trim();\n const keys = keysString.split(',').map((key) => key.trim());\n primaryKeySets.push(keys);\n }\n return primaryKeySets.length === 0 ? null : primaryKeySets;\n }\n getWhereStmtForCombinedPK(whStmt, withRefs, colNames, keys) {\n let retWhere = whStmt;\n for (const grpKeys of keys) {\n const repKeys = grpKeys.join(',') === withRefs.join(',') ? colNames : withRefs;\n for (const [index, key] of grpKeys.entries()) {\n retWhere = this.replaceAllString(retWhere, key, repKeys[index]);\n }\n }\n return retWhere;\n }\n replaceAllString(originalStr, searchStr, replaceStr) {\n return originalStr.split(searchStr).join(replaceStr);\n }\n indicesOf(str, searchStr, fromIndex = 0) {\n // Helper function to find indices of a substring within a string\n const indices = [];\n let currentIndex = str.indexOf(searchStr, fromIndex);\n while (currentIndex !== -1) {\n indices.push(currentIndex);\n currentIndex = str.indexOf(searchStr, currentIndex + 1);\n }\n return indices;\n }\n getWhereStmtForNonCombinedPK(whStmt, withRefs, colNames) {\n let whereStmt = '';\n let stmt = whStmt.substring(6);\n for (let idx = 0; idx < withRefs.length; idx++) {\n let colType = 'withRefsNames';\n let idxs = this.indicesOf(stmt, withRefs[idx]);\n if (idxs.length === 0) {\n idxs = this.indicesOf(stmt, colNames[idx]);\n colType = 'colNames';\n }\n if (idxs.length > 0) {\n let valStr = '';\n const indicesEqual = this.indicesOf(stmt, '=', idxs[0]);\n if (indicesEqual.length > 0) {\n const indicesAnd = this.indicesOf(stmt, 'AND', indicesEqual[0]);\n if (indicesAnd.length > 0) {\n valStr = stmt.substring(indicesEqual[0] + 1, indicesAnd[0] - 1);\n stmt = stmt.substring(indicesAnd[0] + 3);\n }\n else {\n valStr = stmt.substring(indicesEqual[0] + 1);\n }\n if (idx > 0) {\n whereStmt += ' AND ';\n }\n if (colType === 'withRefsNames') {\n whereStmt += colNames[idx] + ' = ' + valStr;\n }\n else {\n whereStmt += withRefs[idx] + ' = ' + valStr;\n }\n }\n }\n }\n whereStmt = 'WHERE ' + whereStmt;\n return whereStmt;\n }\n updateWhere(whStmt, withRefs, colNames) {\n let whereStmt = '';\n if (whStmt.length <= 0) {\n return whereStmt;\n }\n if (whStmt.toUpperCase().substring(0, 5) !== 'WHERE') {\n return whereStmt;\n }\n if (withRefs.length === colNames.length) {\n // get whereStmt for primary combined key\n const keys = this.extractCombinedPrimaryKey(whStmt);\n if (keys) {\n whereStmt = this.getWhereStmtForCombinedPK(whStmt, withRefs, colNames, keys);\n }\n else {\n // get for non primary combined key\n whereStmt = this.getWhereStmtForNonCombinedPK(whStmt, withRefs, colNames);\n }\n }\n return whereStmt;\n }\n}\nexports.UtilsSQLStatement = UtilsSQLStatement;\n//# sourceMappingURL=utilsSqlstatement.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.UtilsSQLite = void 0;\nconst UtilsSQL92Compatibility_1 = require(\"./UtilsSQL92Compatibility\");\nconst utilsDelete_1 = require(\"./utilsDelete\");\nconst utilsFile_1 = require(\"./utilsFile\");\nconst utilsSqlstatement_1 = require(\"./utilsSqlstatement\");\n//const SQLITE_OPEN_READONLY = 1;\nclass UtilsSQLite {\n constructor() {\n this.fileUtil = new utilsFile_1.UtilsFile();\n this.statUtil = new utilsSqlstatement_1.UtilsSQLStatement();\n this.delUtil = new utilsDelete_1.UtilsDelete();\n this.sql92Utils = new UtilsSQL92Compatibility_1.UtilsSQL92Compatibility();\n this.BCSQLite3 = require('better-sqlite3-multiple-ciphers');\n }\n /**\n * OpenOrCreateDatabase\n * @param pathDB\n * @param password\n */\n openOrCreateDatabase(pathDB, password, readonly) {\n const msg = 'OpenOrCreateDatabase';\n // open sqlite3 database\n let mDB;\n if (!readonly) {\n mDB = new this.BCSQLite3(pathDB, {\n // verbose: console.log,\n fileMustExist: false,\n });\n }\n else {\n mDB = new this.BCSQLite3(pathDB, {\n // verbose: console.log,\n readonly: true,\n fileMustExist: true,\n });\n }\n if (mDB != null) {\n try {\n this.dbChanges(mDB);\n }\n catch (err) {\n const errmsg = err.message ? err.message : err;\n throw new Error(`${msg} ${errmsg}`);\n }\n try {\n // set the password\n if (password.length > 0) {\n this.setCipherPragma(mDB, password);\n }\n // set Foreign Keys On\n this.setForeignKeyConstraintsEnabled(mDB, true);\n }\n catch (err) {\n const errmsg = err.message ? err.message : err;\n throw new Error(`${msg} ${errmsg}`);\n }\n return mDB;\n }\n else {\n throw new Error(msg + 'open database failed');\n }\n }\n /**\n * SetCipherPragma\n * @param mDB\n * @param password\n */\n setCipherPragma(mDB, passphrase) {\n const msg = 'setCipherPragma';\n try {\n mDB.pragma(`cipher='sqlcipher'`);\n mDB.pragma(`legacy=4`);\n mDB.pragma(`key='${passphrase}'`);\n return;\n }\n catch (err) {\n const errmsg = err.message ? err.message : err;\n throw new Error(`${msg} ${errmsg}`);\n }\n }\n /**\n * SetForeignKeyConstraintsEnabled\n * @param mDB\n * @param toggle\n */\n setForeignKeyConstraintsEnabled(mDB, toggle) {\n const msg = 'SetForeignKeyConstraintsEnabled';\n let key = 'OFF';\n if (toggle) {\n key = 'ON';\n }\n try {\n mDB.pragma(`foreign_keys = '${key}'`);\n return;\n }\n catch (err) {\n const errmsg = err.message ? err.message : err;\n throw new Error(`${msg} ${errmsg}`);\n }\n }\n /**\n * CloseDB\n * @param mDB\n */\n closeDB(mDB) {\n const msg = 'closeDB';\n try {\n mDB.close();\n return;\n }\n catch (err) {\n const errmsg = err.message ? err.message : err;\n throw new Error(`${msg} ${errmsg}`);\n }\n }\n /**\n * GetVersion\n * @param mDB\n */\n getVersion(mDB) {\n const msg = 'GetVersion';\n try {\n const result = mDB.pragma('user_version');\n return result[0].user_version;\n }\n catch (err) {\n const errmsg = err.message ? err.message : err;\n throw new Error(`${msg} ${errmsg}`);\n }\n }\n /**\n * SetVersion\n * @param mDB\n * @param version\n */\n setVersion(mDB, version) {\n const msg = 'SetVersion';\n try {\n mDB.pragma(`user_version = '${version}'`);\n return;\n }\n catch (err) {\n const errmsg = err.message ? err.message : err;\n throw new Error(`${msg} ${errmsg}`);\n }\n }\n /**\n * ChangePassword\n * @param pathDB\n * @param password\n * @param newpassword\n */\n changePassword(pathDB, password, newpassword) {\n let mDB;\n const msg = 'ChangePassword';\n try {\n mDB = this.openOrCreateDatabase(pathDB, password, false);\n this.pragmaReKey(mDB, password, newpassword);\n }\n catch (err) {\n const errmsg = err.message ? err.message : err;\n throw new Error(`${msg} ${errmsg}`);\n }\n finally {\n this.closeDB(mDB);\n }\n return;\n }\n /**\n * PragmaReKey\n * @param mDB\n * @param passphrase\n * @param newpassphrase\n */\n pragmaReKey(mDB, passphrase, newpassphrase) {\n const msg = 'PragmaReKey: ';\n try {\n mDB.pragma(`cipher='sqlcipher'`);\n mDB.pragma(`legacy=4`);\n mDB.pragma(`key='${passphrase}'`);\n mDB.pragma(`rekey='${newpassphrase}'`);\n return;\n }\n catch (err) {\n const errmsg = err.message ? err.message : err;\n throw new Error(`${msg} ${errmsg}`);\n }\n }\n /**\n * BeginTransaction\n * @param db\n * @param isOpen\n */\n beginTransaction(db, isOpen) {\n // eslint-disable-next-line no-async-promise-executor\n const msg = 'BeginTransaction: ';\n if (!isOpen) {\n throw new Error(`${msg} database not opened`);\n }\n const sql = 'BEGIN TRANSACTION;';\n try {\n db.exec(sql);\n return;\n }\n catch (err) {\n const errmsg = err.message ? err.message : err;\n throw new Error(`${msg} ${errmsg}`);\n }\n }\n /**\n * RollbackTransaction\n * @param db\n * @param isOpen\n */\n rollbackTransaction(db, isOpen) {\n const msg = 'RollbackTransaction: ';\n if (!isOpen) {\n throw new Error(`${msg} database not opened`);\n }\n const sql = 'ROLLBACK TRANSACTION;';\n try {\n db.exec(sql);\n return;\n }\n catch (err) {\n const errmsg = err.message ? err.message : err;\n throw new Error(`${msg} ${errmsg}`);\n }\n }\n /**\n * CommitTransaction\n * @param db\n * @param isOpen\n */\n commitTransaction(db, isOpen) {\n const msg = 'CommitTransaction: ';\n if (!isOpen) {\n throw new Error(`${msg} database not opened`);\n }\n const sql = 'COMMIT TRANSACTION;';\n try {\n db.exec(sql);\n return;\n }\n catch (err) {\n const errmsg = err.message ? err.message : err;\n throw new Error(`${msg} ${errmsg}`);\n }\n }\n /**\n * DbChanges\n * return total number of changes\n * @param db\n */\n dbChanges(db) {\n const msg = 'DbChanges: ';\n let changes = 0;\n try {\n const statement = db.prepare('SELECT total_changes()');\n const firstRow = statement.get();\n if (firstRow != null) {\n const key = Object.keys(firstRow)[0];\n changes = firstRow[key];\n }\n return changes;\n }\n catch (err) {\n const errmsg = err.message ? err.message : err;\n throw new Error(`${msg} ${errmsg}`);\n }\n }\n /**\n * GetLastId\n * @param db\n */\n getLastId(db) {\n const msg = 'GetLastId: ';\n let lastId = -1;\n try {\n const statement = db.prepare('SELECT last_insert_rowid()');\n const firstRow = statement.get();\n if (firstRow != null) {\n const key = Object.keys(firstRow)[0];\n lastId = firstRow[key];\n }\n return lastId;\n }\n catch (err) {\n const errmsg = err.message ? err.message : err;\n throw new Error(`${msg} ${errmsg}`);\n }\n }\n /**\n * Execute\n * @param mDB\n * @param sql\n */\n execute(mDB, sql, fromJson, isSQL92) {\n const result = { changes: 0, lastId: -1 };\n const msg = 'Execute';\n let changes = -1;\n let lastId = -1;\n let initChanges = -1;\n try {\n initChanges = this.dbChanges(mDB);\n let sqlStmt = sql;\n // modify sql to sql92 compatible\n sqlStmt = this.statementsToSQL92(mDB, sql, fromJson, isSQL92);\n this.execDB(mDB, sqlStmt);\n changes = this.dbChanges(mDB) - initChanges;\n lastId = this.getLastId(mDB);\n result.changes = changes;\n result.lastId = lastId;\n return result;\n }\n catch (err) {\n const errmsg = err.message ? err.message : err;\n throw new Error(`${msg} ${errmsg}`);\n }\n }\n statementsToSQL92(mDB, sql, fromJson, isSQL92) {\n // split the statements in an array of statement\n let sqlStmt = sql; /*.replace(/\\n/g, '')*/\n // deal with trigger\n sqlStmt = sqlStmt.replace(/end;/g, 'END;');\n sqlStmt = sqlStmt.replace(/;END;/g, '&END;');\n const sqlStmts = sqlStmt.split(';');\n const resArr = [];\n // loop through the statement\n for (const stmt of sqlStmts) {\n let rStmt = stmt.trim();\n const stmtType = rStmt.split(' ')[0].toUpperCase();\n switch (stmtType) {\n case 'CREATE':\n if (rStmt.includes('&END')) {\n rStmt = rStmt.replace(/&END/g, ';END');\n }\n break;\n case 'DELETE':\n if (!fromJson && rStmt.toLowerCase().includes('WHERE'.toLowerCase())) {\n let whereStmt = rStmt;\n if (!isSQL92)\n whereStmt = this.cleanStatement(rStmt);\n rStmt = this.deleteSQL(mDB, whereStmt, []);\n }\n break;\n case 'INSERT':\n if (rStmt.toLowerCase().includes('VALUES'.toLowerCase())) {\n if (!isSQL92)\n rStmt = this.cleanStatement(rStmt);\n }\n break;\n case 'UPDATE':\n if (rStmt.toLowerCase().includes('SET'.toLowerCase())) {\n if (!isSQL92)\n rStmt = this.cleanStatement(`${stmt.trim()}`);\n }\n break;\n case 'SELECT':\n if (!fromJson && rStmt.toLowerCase().includes('WHERE'.toLowerCase())) {\n if (!isSQL92)\n rStmt = this.cleanStatement(rStmt);\n }\n break;\n default:\n break;\n }\n resArr.push(rStmt);\n }\n sqlStmt = resArr.join(';\\n');\n return sqlStmt;\n }\n /**\n * ExecDB\n * @param mDB\n * @param sql\n */\n execDB(mDB, sql) {\n const msg = 'execDB: ';\n try {\n mDB.exec(sql);\n return;\n }\n catch (err) {\n const errmsg = err.message ? err.message : err;\n throw new Error(`${msg} ${errmsg}`);\n }\n }\n /**\n * ExecuteSet\n * @param mDB\n * @param set\n * @param fromJson\n */\n executeSet(mDB, set, fromJson, returnMode, isSQL92) {\n const ret = { changes: 0, lastId: -1, values: [] };\n let result = { changes: 0, lastId: -1 };\n const msg = 'ExecuteSet';\n for (let i = 0; i < set.length; i++) {\n const statement = 'statement' in set[i] ? set[i].statement : null;\n const values = 'values' in set[i] && set[i].values.length > 0 ? set[i].values : [];\n if (statement == null) {\n let msg = 'ExecuteSet: Error Nostatement';\n msg += ` for index ${i}`;\n throw new Error(msg);\n }\n try {\n if (Array.isArray(values[0])) {\n for (const val of values) {\n const mVal = this.replaceUndefinedByNull(val);\n result = this.prepareRun(mDB, statement, mVal, fromJson, returnMode);\n ret.changes += result.changes;\n ret.lastId = result.lastId;\n const keys = Object.keys(result);\n if (keys.includes('values') && result.values.length > 0) {\n ret.values.push(result.values);\n }\n }\n }\n else {\n if (values.length > 0) {\n const mVal = this.replaceUndefinedByNull(values);\n result = this.prepareRun(mDB, statement, mVal, fromJson, returnMode);\n }\n else {\n let nStatement = statement;\n if (!isSQL92) {\n nStatement = this.cleanStatement(statement);\n }\n result = this.prepareRun(mDB, nStatement, [], fromJson, returnMode);\n }\n ret.changes += result.changes;\n ret.lastId = result.lastId;\n const keys = Object.keys(result);\n if (keys.includes('values') && result.values.length > 0) {\n ret.values.push(result.values);\n }\n }\n }\n catch (err) {\n const errmsg = err.message ? err.message : err;\n throw new Error(`${msg} ${errmsg}`);\n }\n }\n return ret;\n }\n /**\n * PrepareRun\n * @param mDB\n * @param statement\n * @param values\n * @param fromJson\n * @param returnMode\n */\n prepareRun(mDB, statement, values, fromJson, returnMode) {\n const result = { changes: 0, lastId: -1 };\n const msg = 'PrepareRun';\n const stmtType = statement.trim().split(' ')[0].toUpperCase();\n let sqlStmt = statement;\n try {\n if (!fromJson && stmtType === 'DELETE') {\n sqlStmt = this.deleteSQL(mDB, statement, values);\n }\n const mValues = values ? values : [];\n let mVal = [];\n if (mValues.length > 0) {\n mVal = this.replaceUndefinedByNull(mValues);\n } /* else {\n const findVals = sqlStmt.match(/\\?/gi);\n const nbValues = findVals ? findVals.length : 0;\n for (let i = 0; i < nbValues; i++) {\n mVal.push(null);\n }\n }*/\n const ret = this.runExec(mDB, sqlStmt, mVal, returnMode);\n if (ret.values != null) {\n result.values = ret.values;\n result.changes = ret.changes;\n result.lastId = ret.lastInsertRowid;\n }\n else {\n result.changes = ret.changes;\n result.lastId = ret.lastInsertRowid;\n }\n return result;\n }\n catch (err) {\n const errmsg = err.message ? err.message : err;\n throw new Error(`${msg} ${errmsg}`);\n }\n }\n runExec(mDB, stmt, values = [], returnMode) {\n let result = { changes: 0, lastInsertRowid: -1, values: [] };\n const msg = 'runExec: ';\n try {\n const params = this.getStmtAndNames(stmt, returnMode);\n switch (params.mMode) {\n case 'one': {\n const iniChanges = this.dbChanges(mDB);\n if (values.length === 0) {\n const value = mDB.prepare(stmt).get();\n result.values.push(value);\n result.lastInsertRowid = this.getLastId(mDB);\n }\n else {\n const lowerId = this.getLastId(mDB) + 1;\n const statement = mDB.prepare(params.stmt);\n const res = statement.run(values);\n result.lastInsertRowid = res.lastInsertRowid;\n const sql = `SELECT ${params.names} FROM ${params.tableName} WHERE rowid = ${lowerId};`;\n const value = this.queryOne(mDB, sql, [], true);\n result.values.push(value);\n }\n result.changes = this.dbChanges(mDB) - iniChanges;\n break;\n }\n case 'all': {\n const iniChanges = this.dbChanges(mDB);\n if (values.length === 0) {\n result.values = mDB.prepare(stmt).all();\n result.lastInsertRowid = this.getLastId(mDB);\n }\n else {\n const lowerId = this.getLastId(mDB) + 1;\n const statement = mDB.prepare(params.stmt);\n const res = statement.run(values);\n const upperId = res.lastInsertRowid;\n const sql = `SELECT ${params.names} FROM ${params.tableName} WHERE rowid BETWEEN ${lowerId} AND ${upperId};`;\n result.values = this.queryAll(mDB, sql, [], true);\n result.lastInsertRowid = res.lastInsertRowid;\n }\n result.changes = this.dbChanges(mDB) - iniChanges;\n break;\n }\n default: {\n const statement = mDB.prepare(params.stmt);\n if (values != null && values.length > 0) {\n result = statement.run(values);\n }\n else {\n result = statement.run();\n }\n }\n }\n return result;\n }\n catch (err) {\n const errmsg = err.message ? err.message : err;\n throw new Error(`${msg} ${errmsg}`);\n }\n }\n /**\n * replaceUndefinedByNull\n * @param values\n * @returns\n */\n replaceUndefinedByNull(values) {\n const retValues = [];\n if (values.length > 0) {\n for (const val of values) {\n let mVal = val;\n if (typeof val === 'undefined')\n mVal = null;\n retValues.push(mVal);\n }\n }\n return retValues;\n }\n /**\n * deleteSQL\n * @param mDB\n * @param statement\n * @param values\n * @returns\n */\n deleteSQL(mDB, statement, values) {\n let sqlStmt = statement;\n const msg = 'DeleteSQL';\n try {\n const isLast = this.isLastModified(mDB, true);\n const isDel = this.isSqlDeleted(mDB, true);\n if (!isLast || !isDel) {\n return sqlStmt;\n }\n // Replace DELETE by UPDATE\n // set sql_deleted to 1 and the last_modified to\n // timenow\n const whereClause = this.statUtil.extractWhereClause(sqlStmt);\n if (!whereClause) {\n const msg = 'deleteSQL: cannot find a WHERE clause';\n throw new Error(`${msg}`);\n }\n const tableName = this.statUtil.extractTableName(sqlStmt);\n if (!tableName) {\n const msg = 'deleteSQL: cannot find a WHERE clause';\n throw new Error(`${msg}`);\n }\n const colNames = this.statUtil.extractColumnNames(whereClause);\n if (colNames.length === 0) {\n const msg = 'deleteSQL: Did not find column names in the WHERE Statement';\n throw new Error(`${msg}`);\n }\n const setStmt = 'sql_deleted = 1';\n // Find REFERENCES if any and update the sql_deleted\n // column\n const hasToUpdate = this.findReferencesAndUpdate(mDB, tableName, whereClause, colNames, values);\n if (hasToUpdate) {\n const whereStmt = whereClause.endsWith(';') ? whereClause.slice(0, -1) : whereClause;\n sqlStmt = `UPDATE ${tableName} SET ${setStmt} WHERE ${whereStmt} AND sql_deleted = 0;`;\n }\n else {\n sqlStmt = '';\n }\n return sqlStmt;\n }\n catch (err) {\n const errmsg = err.message ? err.message : err;\n throw new Error(`${msg} ${errmsg}`);\n }\n }\n /**\n * findReferencesAndUpdate\n * @param mDB\n * @param tableName\n * @param whereStmt\n * @param initColNames\n * @param values\n * @returns\n */\n findReferencesAndUpdate(mDB, tableName, whereStmt, initColNames, values) {\n try {\n const retBool = true;\n const result = this.getReferences(mDB, tableName);\n const references = result.retRefs;\n const tableNameWithRefs = result.tableWithRefs;\n if (references.length <= 0) {\n return retBool;\n }\n if (tableName === tableNameWithRefs) {\n return retBool;\n }\n // Loop through references\n for (const ref of references) {\n // Extract the FOREIGN KEY constraint info from the ref statement\n const foreignKeyInfo = this.statUtil.extractForeignKeyInfo(ref);\n // Get the tableName of the references\n const refTable = foreignKeyInfo.tableName;\n if (refTable === '' || refTable !== tableName) {\n continue;\n }\n // Get the with ref column names\n const withRefsNames = foreignKeyInfo.forKeys;\n // Get the column names\n const colNames = foreignKeyInfo.refKeys;\n if (colNames.length !== withRefsNames.length) {\n const msg = 'findReferencesAndUpdate: mismatch length';\n throw new Error(msg);\n }\n const action = foreignKeyInfo.action;\n if (action === 'NO_ACTION') {\n continue;\n }\n const updTableName = tableNameWithRefs;\n const updColNames = withRefsNames;\n let results = {\n uWhereStmt: '',\n setStmt: '',\n };\n if (!this.delUtil.checkValuesMatch(withRefsNames, initColNames)) {\n // Case: no match\n // Search for related items in tableName\n const result = this.searchForRelatedItems(mDB, updTableName, tableName, whereStmt, withRefsNames, colNames, values);\n if (result.relatedItems.length === 0 && result.key.length <= 0) {\n continue;\n }\n if (updTableName !== tableName) {\n switch (action) {\n case 'RESTRICT':\n results = this.delUtil.upDateWhereForRestrict(result);\n break;\n case 'CASCADE':\n results = this.delUtil.upDateWhereForCascade(result);\n break;\n default:\n results = this.delUtil.upDateWhereForDefault(withRefsNames, result);\n break;\n }\n }\n }\n else {\n throw new Error('Not implemented. Please transfer your example to the maintener');\n }\n if (results.setStmt.length > 0 && results.uWhereStmt.length > 0) {\n this.executeUpdateForDelete(mDB, updTableName, results.uWhereStmt, results.setStmt, updColNames, values);\n }\n }\n return retBool;\n }\n catch (error) {\n const msg = error.message ? error.message : error;\n throw new Error(msg);\n }\n }\n /**\n * getReferences\n * @param db\n * @param tableName\n * @returns\n */\n getReferences(db, tableName) {\n const sqlStmt = 'SELECT sql FROM sqlite_master ' +\n \"WHERE sql LIKE('%FOREIGN KEY%') AND sql LIKE('%REFERENCES%') AND \" +\n \"sql LIKE('%\" +\n tableName +\n \"%') AND sql LIKE('%ON DELETE%');\";\n try {\n const res = this.queryAll(db, sqlStmt, [], true);\n // get the reference's string(s)\n let retRefs = [];\n let tableWithRefs = '';\n if (res.length > 0) {\n const result = this.getRefs(res[0].sql);\n retRefs = result.foreignKeys;\n tableWithRefs = result.tableName;\n }\n return { tableWithRefs: tableWithRefs, retRefs: retRefs };\n }\n catch (err) {\n const error = err.message ? err.message : err;\n const msg = `getReferences: ${error}`;\n throw new Error(msg);\n }\n }\n /**\n * getRefs\n * @param sqlStatement\n * @returns\n */\n getRefs(sqlStatement) {\n let tableName = '';\n const foreignKeys = [];\n const statement = this.statUtil.flattenMultilineString(sqlStatement);\n try {\n // Regular expression pattern to match the table name\n const tableNamePattern = /CREATE\\s+TABLE\\s+(\\w+)\\s+\\(/;\n const tableNameMatch = statement.match(tableNamePattern);\n if (tableNameMatch) {\n tableName = tableNameMatch[1];\n }\n // Regular expression pattern to match the FOREIGN KEY constraints\n const foreignKeyPattern = /FOREIGN\\s+KEY\\s+\\([^)]+\\)\\s+REFERENCES\\s+(\\w+)\\s*\\([^)]+\\)\\s+ON\\s+DELETE\\s+(CASCADE|RESTRICT|SET\\s+DEFAULT|SET\\s+NULL|NO\\s+ACTION)/g;\n const foreignKeyMatches = statement.matchAll(foreignKeyPattern);\n for (const foreignKeyMatch of foreignKeyMatches) {\n const foreignKey = foreignKeyMatch[0];\n foreignKeys.push(foreignKey);\n }\n }\n catch (error) {\n const msg = `getRefs: Error creating regular expression: ${error}`;\n throw new Error(msg);\n }\n return { tableName, foreignKeys };\n }\n /**\n * executeUpdateForDelete\n * @param mDB\n * @param tableName\n * @param whereStmt\n * @param setStmt\n * @param colNames\n * @param values\n */\n executeUpdateForDelete(mDB, tableName, whereStmt, setStmt, colNames, values) {\n try {\n let lastId = -1;\n // Update sql_deleted for this references\n const stmt = `UPDATE ${tableName} SET ${setStmt} ${whereStmt}`;\n const selValues = [];\n if (values.length > 0) {\n const arrVal = whereStmt.split('?');\n if (arrVal[arrVal.length - 1] === ';') {\n arrVal.pop();\n }\n for (let jdx = 0; jdx < arrVal.length; jdx++) {\n for (const updVal of colNames) {\n const indices = this.statUtil.indicesOf(arrVal[jdx], updVal);\n if (indices.length > 0) {\n selValues.push(values[jdx]);\n }\n }\n }\n }\n const retObj = this.runExec(mDB, stmt, selValues, 'no');\n lastId = retObj['lastInsertRowid'];\n if (lastId === -1) {\n const msg = `UPDATE sql_deleted failed for table: ${tableName}`;\n throw new Error(msg);\n }\n }\n catch (error) {\n const msg = error.message ? error.message : error;\n throw new Error(msg);\n }\n }\n /**\n * QueryAll\n * @param mDB\n * @param sql\n * @param values\n */\n queryAll(mDB, sql, values, isSQL92) {\n const msg = 'QueryAll';\n try {\n let cSql = sql;\n if (!isSQL92) {\n cSql = this.cleanStatement(sql);\n }\n const stmt = mDB.prepare(cSql);\n if (!stmt.reader) {\n // statement doesn't returns data\n if (values != null && values.length > 0) {\n stmt.run(values);\n }\n else {\n stmt.run();\n }\n return [];\n }\n let rows;\n if (values != null && values.length > 0) {\n rows = stmt.all(values);\n }\n else {\n rows = stmt.all();\n }\n if (rows == null) {\n rows = [];\n }\n return rows;\n }\n catch (err) {\n const errmsg = err.message ? err.message : err;\n throw new Error(`${msg} ${errmsg}`);\n }\n }\n /**\n * QueryOne\n * @param mDB\n * @param sql\n * @param values\n */\n queryOne(mDB, sql, values, isSQL92) {\n const msg = 'QueryOne';\n try {\n let cSql = sql;\n if (!isSQL92) {\n cSql = this.cleanStatement(sql);\n }\n const stmt = mDB.prepare(cSql);\n let row;\n if (values != null && values.length > 0) {\n row = stmt.get(values);\n }\n else {\n row = stmt.get();\n }\n return row;\n }\n catch (err) {\n const errmsg = err.message ? err.message : err;\n throw new Error(`${msg} ${errmsg}`);\n }\n }\n /**\n * GetTablesNames\n * @param mDb\n */\n getTablesNames(mDb) {\n const msg = 'getTablesNames';\n let sql = 'SELECT name FROM sqlite_master WHERE ';\n sql += \"type='table' AND name NOT LIKE 'sync_table' \";\n sql += \"AND name NOT LIKE '_temp_%' \";\n sql += \"AND name NOT LIKE 'sqlite_%' \";\n sql += 'ORDER BY rootpage DESC;';\n const retArr = [];\n try {\n const retQuery = this.queryAll(mDb, sql, [], true);\n for (const query of retQuery) {\n retArr.push(query.name);\n }\n return retArr;\n }\n catch (err) {\n const errmsg = err.message ? err.message : err;\n throw new Error(`${msg} ${errmsg}`);\n }\n }\n /**\n * GetViewsNames\n * @param mDb\n */\n getViewsNames(mDb) {\n const msg = 'GetViewsNames';\n let sql = 'SELECT name FROM sqlite_master WHERE ';\n sql += \"type='view' AND name NOT LIKE 'sqlite_%' \";\n sql += 'ORDER BY rootpage DESC;';\n const retArr = [];\n try {\n const retQuery = this.queryAll(mDb, sql, [], true);\n for (const query of retQuery) {\n retArr.push(query.name);\n }\n return retArr;\n }\n catch (err) {\n const errmsg = err.message ? err.message : err;\n throw new Error(`${msg} ${errmsg}`);\n }\n }\n /**\n * isLastModified\n * @param mDB\n * @param isOpen\n */\n isLastModified(mDB, isOpen) {\n const msg = 'IsLastModified';\n if (!isOpen) {\n throw new Error(`${msg} database not opened`);\n }\n try {\n const tableList = this.getTablesNames(mDB);\n for (const table of tableList) {\n const tableNamesTypes = this.getTableColumnNamesTypes(mDB, table);\n const tableColumnNames = tableNamesTypes.names;\n if (tableColumnNames.includes('last_modified')) {\n return true;\n }\n }\n return false;\n }\n catch (err) {\n const errmsg = err.message ? err.message : err;\n throw new Error(`${msg} ${errmsg}`);\n }\n }\n /**\n * isSqlDeleted\n * @param mDB\n * @param isOpen\n */\n isSqlDeleted(mDB, isOpen) {\n const msg = 'IsSqlDeleted';\n if (!isOpen) {\n throw new Error(`${msg} database not opened`);\n }\n try {\n const tableList = this.getTablesNames(mDB);\n for (const table of tableList) {\n const tableNamesTypes = this.getTableColumnNamesTypes(mDB, table);\n const tableColumnNames = tableNamesTypes.names;\n if (tableColumnNames.includes('sql_deleted')) {\n return true;\n }\n }\n return false;\n }\n catch (err) {\n const errmsg = err.message ? err.message : err;\n throw new Error(`${msg} ${errmsg}`);\n }\n }\n getJournalMode(mDB) {\n const msg = 'getJournalMode';\n try {\n const retMode = mDB.pragma('journal_mode');\n return retMode[0].journal_mode;\n }\n catch (err) {\n const errmsg = err.message ? err.message : err;\n throw new Error(`${msg} ${errmsg}`);\n }\n }\n async isDatabaseEncrypted(dbName) {\n const msg = 'isDatabaseEncrypted';\n try {\n const isExists = this.fileUtil.isFileExists(dbName);\n if (isExists) {\n const filePath = this.fileUtil.getFilePath(dbName);\n return await this.isDBEncrypted(filePath);\n }\n else {\n throw new Error(`${msg}: Database ${dbName} does not exist`);\n }\n }\n catch (err) {\n const errmsg = err.message ? err.message : err;\n throw new Error(`${msg} ${errmsg}`);\n }\n }\n async isDBEncrypted(filePath) {\n try {\n const retStr = await this.fileUtil.readFileAsPromise(filePath, {\n start: 0,\n end: 12,\n });\n if (retStr === 'SQLite format')\n return false;\n else\n return true;\n }\n catch (error) {\n return true;\n }\n }\n /**\n * GetTableColumnNamesTypes\n * @param mDB\n * @param tableName\n */\n getTableColumnNamesTypes(mDB, tableName) {\n const msg = 'getTableColumnNamesTypes';\n try {\n const infos = mDB.pragma(`table_info('${tableName}')`);\n const retNames = [];\n const retTypes = [];\n for (const info of infos) {\n retNames.push(info.name);\n retTypes.push(info.type);\n }\n return { names: retNames, types: retTypes };\n }\n catch (err) {\n const errmsg = err.message ? err.message : err;\n throw new Error(`${msg} ${errmsg}`);\n }\n }\n searchForRelatedItems(mDB, updTableName, tableName, whStmt, withRefsNames, colNames, values) {\n const relatedItems = [];\n let key = '';\n const t1Names = withRefsNames.map((name) => `t1.${name}`);\n const t2Names = colNames.map((name) => `t2.${name}`);\n try {\n // addPrefix to the whereClause and swap colNames with withRefsNames\n let whereClause = this.statUtil.addPrefixToWhereClause(whStmt, colNames, withRefsNames, 't2.');\n // look at the whereclause and change colNames with withRefsNames\n if (whereClause.endsWith(';')) {\n whereClause = whereClause.slice(0, -1);\n }\n const resultString = t1Names.map((t1, index) => `${t1} = ${t2Names[index]}`).join(' AND ');\n const sql = `SELECT t1.rowid FROM ${updTableName} t1 ` +\n `JOIN ${tableName} t2 ON ${resultString} ` +\n `WHERE ${whereClause} AND t1.sql_deleted = 0;`;\n const vals = this.queryAll(mDB, sql, values, true);\n if (vals.length > 0) {\n key = Object.keys(vals[0])[0];\n relatedItems.push(...vals);\n }\n return { key: key, relatedItems: relatedItems };\n }\n catch (error) {\n const msg = error.message ? error.message : error;\n throw new Error(msg);\n }\n }\n cleanStatement(stmt) {\n let sql = '';\n if (stmt.toLowerCase().includes('INSERT INTO'.toLowerCase()) ||\n stmt.toLowerCase().includes('SELECT'.toLowerCase()) ||\n stmt.toLowerCase().includes('UPDATE'.toLowerCase()) ||\n stmt.toLowerCase().includes('DELETE FROM'.toLowerCase())) {\n // check for JSON string\n sql = this.dealJsonString(stmt);\n sql = this.sql92Utils.compatibleSQL92(sql);\n sql = sql.replaceAll('§', '\"');\n }\n else {\n sql = stmt;\n }\n return sql;\n }\n findIndex(str, char) {\n const a = [];\n for (let i = str.length; i--;)\n if (str[i] == char)\n a.push(i);\n return a.reverse();\n }\n dealJsonString(stmt) {\n let retStmt = stmt;\n const oJ = this.findIndex(stmt, '{');\n const eJ = this.findIndex(stmt, '}');\n for (let i = 0; i < oJ.length; i++) {\n const g = retStmt.substring(oJ[i] + 1, eJ[i]).replaceAll('\"', '§');\n retStmt = retStmt.substring(0, oJ[i] + 1) + g + retStmt.substring(eJ[i]);\n }\n return retStmt;\n }\n isReturning(sqlStmt) {\n let stmt = sqlStmt.trim();\n const stmtType = stmt.split(' ')[0].toUpperCase();\n if (stmt.endsWith(';')) {\n stmt = stmt.slice(0, -1).trim();\n }\n switch (stmtType) {\n case 'INSERT': {\n const valuesIndex = stmt.search(/\\bVALUES\\b/i);\n let closingParenthesisIndex = -1;\n for (let i = stmt.length - 1; i >= valuesIndex; i--) {\n if (stmt[i] === ')') {\n closingParenthesisIndex = i;\n break;\n }\n }\n if (closingParenthesisIndex !== -1) {\n const stmtString = stmt.substring(0, closingParenthesisIndex + 1).trim() + ';';\n const suffix = stmt.substring(closingParenthesisIndex + 1).trim();\n if (suffix.toLowerCase().includes('returning')) {\n return { isReturning: true, stmt: stmtString, suffix: suffix };\n }\n else {\n return { isReturning: false, stmt, suffix: '' };\n }\n }\n return { isReturning: false, stmt, suffix: '' };\n }\n case 'DELETE':\n case 'UPDATE': {\n const words = stmt.split(/\\s+/);\n const wordsBeforeReturning = [];\n const returningString = [];\n let isReturningOutsideMessage = false;\n for (const word of words) {\n if (word.toLowerCase() === 'returning') {\n isReturningOutsideMessage = true;\n returningString.push(word, ...this.wordsAfter(word, words));\n break;\n }\n wordsBeforeReturning.push(word);\n }\n if (isReturningOutsideMessage) {\n const joinedWords = wordsBeforeReturning.join(' ') + ';';\n let joinedReturningString = returningString.join(' ');\n if (joinedReturningString.length > 0 && !joinedReturningString.endsWith(';')) {\n joinedReturningString += ';';\n }\n return {\n isReturning: true,\n stmt: joinedWords,\n suffix: joinedReturningString,\n };\n }\n else {\n return { isReturning: false, stmt, suffix: '' };\n }\n }\n default:\n return { isReturning: false, stmt, suffix: '' };\n }\n }\n wordsAfter(word, words) {\n const index = words.indexOf(word);\n if (index === -1) {\n return [];\n }\n return words.slice(index + 1);\n }\n getStmtAndNames(sqlStmt, returnMode) {\n const retObj = {};\n const mStmt = sqlStmt;\n const { isReturning, stmt, suffix } = this.isReturning(mStmt);\n retObj.mMode = 'no';\n retObj.stmt = stmt;\n retObj.names = '';\n if (isReturning && (returnMode === 'all' || returnMode === 'one')) {\n retObj.tableName = this.getTableName(mStmt);\n retObj.mMode = returnMode;\n const lowercaseSuffix = suffix.toLowerCase();\n const returningIndex = lowercaseSuffix.indexOf('returning');\n if (returningIndex !== -1) {\n const substring = suffix.slice(returningIndex + 9); // 9 is the length of \"returning\"\n const names = substring.trim();\n retObj.names = this.getNames(names);\n }\n }\n return retObj;\n }\n getNames(input) {\n // Find the index of the first occurrence of \";\", \"--\", or \"/*\"\n const indexSemicolon = input.indexOf(';');\n const indexDoubleDash = input.indexOf('--');\n const indexCommentStart = input.indexOf('/*');\n // Find the minimum index among them\n let minIndex = input.length;\n if (indexSemicolon !== -1) {\n minIndex = Math.min(minIndex, indexSemicolon);\n }\n if (indexDoubleDash !== -1) {\n minIndex = Math.min(minIndex, indexDoubleDash);\n }\n if (indexCommentStart !== -1) {\n minIndex = Math.min(minIndex, indexCommentStart);\n }\n // Extract substring up to the minimum index\n const colnames = input.substring(0, minIndex).trim();\n return colnames;\n }\n getTableName(sqlStatement) {\n const patterns = {\n insert: /INSERT\\s+INTO\\s+(\\w+)/i,\n delete: /DELETE\\s+FROM\\s+(\\w+)/i,\n update: /UPDATE\\s+(\\w+)/i,\n select: /SELECT.*\\s+FROM\\s+(\\w+)/i,\n };\n let tableName = null;\n Object.keys(patterns).some((key) => {\n const pattern = patterns[key];\n const match = pattern.exec(sqlStatement);\n if (match) {\n tableName = match[1];\n return true; // Stop iterating through patterns\n }\n return false;\n });\n return tableName;\n }\n}\nexports.UtilsSQLite = UtilsSQLite;\n//# sourceMappingURL=utilsSQLite.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.UtilsJson = void 0;\nconst utilsSQLite_1 = require(\"../utilsSQLite\");\nclass UtilsJson {\n constructor() {\n this.sqliteUtil = new utilsSQLite_1.UtilsSQLite();\n }\n /**\n * IsTableExists\n * @param mDB\n * @param isOpen\n * @param tableName\n */\n isTableExists(mDB, isOpen, tableName) {\n const msg = 'IsTableExists';\n let ret = false;\n if (!isOpen) {\n throw new Error(`${msg} database not opened`);\n }\n let query = 'SELECT name FROM sqlite_master WHERE ';\n query += `type='table' AND name='${tableName}';`;\n const rows = this.sqliteUtil.queryAll(mDB, query, [], true);\n if (rows.length > 0) {\n ret = true;\n }\n return ret;\n }\n /**\n * IsViewExists\n * @param db\n * @param isOpen\n * @param viewName\n */\n isViewExists(mDB, isOpen, viewName) {\n const msg = 'IsViewExists';\n let ret = false;\n if (!isOpen) {\n throw new Error(`${msg} database not opened`);\n }\n let query = 'SELECT name FROM sqlite_master WHERE ';\n query += `type='view' AND name='${viewName}';`;\n const rows = this.sqliteUtil.queryAll(mDB, query, [], true);\n if (rows.length > 0) {\n ret = true;\n }\n return ret;\n }\n /**\n * CreateSchema\n * @param mDB\n * @param jsonData\n */\n createSchema(mDB, jsonData) {\n // create the database schema\n const msg = 'CreateSchema';\n let changes = 0;\n try {\n // start a transaction\n this.sqliteUtil.beginTransaction(mDB.database, true);\n mDB.setIsTransActive(true);\n }\n catch (err) {\n throw new Error(`${msg} ${err}`);\n }\n const stmts = this.createSchemaStatement(jsonData);\n if (stmts.length > 0) {\n const schemaStmt = stmts.join('\\n');\n try {\n const results = this.sqliteUtil.execute(mDB.database, schemaStmt, true, true);\n changes = results.changes;\n if (changes < 0) {\n try {\n this.sqliteUtil.rollbackTransaction(mDB.database, true);\n mDB.setIsTransActive(false);\n }\n catch (err) {\n throw new Error(`${msg} changes < 0 ${err}`);\n }\n }\n }\n catch (err) {\n const msg = err;\n try {\n this.sqliteUtil.rollbackTransaction(mDB.database, true);\n mDB.setIsTransActive(false);\n throw new Error(`CreateSchema: ${msg}`);\n }\n catch (err) {\n throw new Error(`${msg} changes < 0${err}: ${msg}`);\n }\n }\n }\n try {\n this.sqliteUtil.commitTransaction(mDB.database, true);\n mDB.setIsTransActive(false);\n return changes;\n }\n catch (err) {\n throw new Error(`${msg} ${err}`);\n }\n }\n /**\n * CreateSchemaStatement\n * @param jsonData\n */\n createSchemaStatement(jsonData) {\n const msg = 'CreateSchemaStatement';\n const statements = [];\n let isLastModified = false;\n let isSqlDeleted = false;\n // Prepare the statement to execute\n try {\n for (const jTable of jsonData.tables) {\n if (jTable.schema != null && jTable.schema.length >= 1) {\n // create table\n statements.push('CREATE TABLE IF NOT EXISTS ' + `${jTable.name} (`);\n for (let j = 0; j < jTable.schema.length; j++) {\n if (j === jTable.schema.length - 1) {\n if (jTable.schema[j].column) {\n statements.push(`${jTable.schema[j].column} ${jTable.schema[j].value}`);\n if (jTable.schema[j].column === 'last_modified') {\n isLastModified = true;\n }\n if (jTable.schema[j].column === 'sql_deleted') {\n isSqlDeleted = true;\n }\n }\n else if (jTable.schema[j].foreignkey) {\n statements.push(`FOREIGN KEY (${jTable.schema[j].foreignkey}) ${jTable.schema[j].value}`);\n }\n else if (jTable.schema[j].constraint) {\n statements.push(`CONSTRAINT ${jTable.schema[j].constraint} ${jTable.schema[j].value}`);\n }\n }\n else {\n if (jTable.schema[j].column) {\n statements.push(`${jTable.schema[j].column} ${jTable.schema[j].value},`);\n if (jTable.schema[j].column === 'last_modified') {\n isLastModified = true;\n }\n if (jTable.schema[j].column === 'sql_deleted') {\n isSqlDeleted = true;\n }\n }\n else if (jTable.schema[j].foreignkey) {\n statements.push(`FOREIGN KEY (${jTable.schema[j].foreignkey}) ${jTable.schema[j].value},`);\n }\n else if (jTable.schema[j].constraint) {\n statements.push(`CONSTRAINT ${jTable.schema[j].constraint} ${jTable.schema[j].value},`);\n }\n }\n }\n statements.push(');');\n if (isLastModified && isSqlDeleted) {\n // create trigger last_modified associated with the table\n let trig = 'CREATE TRIGGER IF NOT EXISTS ';\n trig += `${jTable.name}`;\n trig += `_trigger_last_modified `;\n trig += `AFTER UPDATE ON ${jTable.name} `;\n trig += 'FOR EACH ROW WHEN NEW.last_modified < ';\n trig += 'OLD.last_modified BEGIN UPDATE ';\n trig += `${jTable.name} `;\n trig += `SET last_modified = `;\n trig += \"(strftime('%s','now')) WHERE id=OLD.id; END;\";\n statements.push(trig);\n }\n }\n if (jTable.indexes != null && jTable.indexes.length >= 1) {\n for (const jIndex of jTable.indexes) {\n const tableName = jTable.name;\n let stmt = `CREATE ${Object.keys(jIndex).includes('mode') ? jIndex.mode + ' ' : ''} INDEX IF NOT EXISTS `;\n stmt += `${jIndex.name} ON ${tableName} (${jIndex.value});`;\n statements.push(stmt);\n }\n }\n if (jTable.triggers != null && jTable.triggers.length >= 1) {\n for (const jTrg of jTable.triggers) {\n const tableName = jTable.name;\n if (jTrg.timeevent.toUpperCase().endsWith(' ON')) {\n jTrg.timeevent = jTrg.timeevent.substring(0, jTrg.timeevent.length - 3);\n }\n let stmt = `CREATE TRIGGER IF NOT EXISTS `;\n stmt += `${jTrg.name} ${jTrg.timeevent} ON ${tableName} `;\n if (jTrg.condition)\n stmt += `${jTrg.condition} `;\n stmt += `${jTrg.logic};`;\n statements.push(stmt);\n }\n }\n }\n return statements;\n }\n catch (err) {\n throw new Error(`${msg} ${err}`);\n }\n }\n /**\n * CreateDataTable\n * @param mDB\n * @param table\n * @param mode\n */\n createDataTable(mDB, table, mode) {\n let lastId = -1;\n const msg = 'CreateDataTable';\n let results;\n try {\n // Check if the table exists\n const tableExists = this.isTableExists(mDB, true, table.name);\n if (!tableExists) {\n throw new Error(`${msg} ${table.name} does not exist`);\n }\n // Get the column names and types\n const tableNamesTypes = this.sqliteUtil.getTableColumnNamesTypes(mDB, table.name);\n const tableColumnTypes = tableNamesTypes.types;\n const tableColumnNames = tableNamesTypes.names;\n if (tableColumnTypes.length === 0) {\n throw new Error(`${msg} ${table.name} info does not exist`);\n }\n // Loop on Table Values\n for (let j = 0; j < table.values.length; j++) {\n let row = table.values[j];\n row = this.createRowData(row);\n let isRun = true;\n const stmt = this.createRowStatement(mDB, tableColumnNames, row, j, table.name, mode);\n isRun = this.checkUpdate(mDB, stmt, row, table.name, tableColumnNames);\n if (isRun) {\n if (stmt.substring(0, 6).toUpperCase() === 'DELETE') {\n row = [];\n }\n results = this.sqliteUtil.prepareRun(mDB, stmt, row, true, 'no');\n lastId = results.lastId;\n if (lastId < 0) {\n throw new Error(`${msg} lastId < 0`);\n }\n }\n else {\n lastId = 0;\n }\n }\n return results;\n }\n catch (err) {\n throw new Error(`${msg} ${err}`);\n }\n }\n createRowData(row) {\n // Iterate over the row array\n for (let i = 0; i < row.length; i++) {\n // Check if the current element is an array of numbers\n if (Array.isArray(row[i]) && row[i].every((item) => typeof item === 'number')) {\n const byteArray = Uint8Array.from(row[i]);\n row[i] = byteArray;\n }\n }\n return row;\n }\n /**\n * CreateRowStatement\n * @param mDB\n * @param tColNames\n * @param row\n * @param j\n * @param tableName\n * @param mode\n * @returns\n */\n createRowStatement(mDB, tColNames, row, j, tableName, mode) {\n // Check the row number of columns\n const msg = 'CreateRowStatement';\n if (row.length != tColNames.length || row.length === 0 || tColNames.length === 0) {\n throw new Error(`${msg} Table ${tableName} ` + `values row ${j} not correct length`);\n }\n try {\n const retisIdExists = this.isIdExists(mDB, tableName, tColNames[0], row[0]);\n let stmt;\n if (mode === 'full' || (mode === 'partial' && !retisIdExists)) {\n // Insert\n const nameString = tColNames.join();\n const questionMarkString = this.createQuestionMarkString(tColNames.length);\n stmt = `INSERT INTO ${tableName} (${nameString}) VALUES (`;\n stmt += `${questionMarkString});`;\n }\n else {\n // Update or Delete\n let isUpdate = true;\n const isColDeleted = (element) => element === `sql_deleted`;\n const idxDelete = tColNames.findIndex(isColDeleted);\n if (idxDelete >= 0) {\n if (row[idxDelete] === 1) {\n isUpdate = false;\n stmt = `DELETE FROM ${tableName} WHERE `;\n if (typeof row[0] == 'string') {\n stmt += `${tColNames[0]} = '${row[0]}';`;\n }\n else {\n stmt += `${tColNames[0]} = ${row[0]};`;\n }\n }\n }\n if (isUpdate) {\n // Update\n const setString = this.setNameForUpdate(tColNames);\n if (setString.length === 0) {\n throw new Error(`${msg} Table ${tableName} ` + `values row ${j} not set to String`);\n }\n stmt = `UPDATE ${tableName} SET ${setString} WHERE `;\n if (typeof row[0] == 'string') {\n stmt += `${tColNames[0]} = '${row[0]}';`;\n }\n else {\n stmt += `${tColNames[0]} = ${row[0]};`;\n }\n }\n }\n return stmt;\n }\n catch (err) {\n throw new Error(`${msg} ${err.message}`);\n }\n }\n /**\n *\n * @param mDB\n * @param values\n * @param tbName\n * @param tColNames\n * @returns\n */\n checkUpdate(mDB, stmt, values, tbName, tColNames) {\n const msg = 'CheckUpdate';\n const isRun = true;\n if (stmt.substring(0, 6) === 'UPDATE') {\n try {\n let query = `SELECT * FROM ${tbName} WHERE `;\n if (typeof values[0] == 'string') {\n query += `${tColNames[0]} = '${values[0]}';`;\n }\n else {\n query += `${tColNames[0]} = ${values[0]};`;\n }\n const resQuery = this.getValues(mDB, query, tbName);\n let resValues = [];\n if (resQuery.length > 0) {\n resValues = resQuery[0];\n }\n if (values.length > 0 && resValues.length > 0 && values.length === resValues.length) {\n for (let i = 0; i < values.length; i++) {\n if (values[i] !== resValues[i]) {\n return true;\n }\n }\n return false;\n }\n else {\n const msg1 = 'Both arrays not the same length';\n throw new Error(`${msg} ${msg1}`);\n }\n }\n catch (err) {\n throw new Error(`${msg} ${err.message}`);\n }\n }\n else {\n return isRun;\n }\n }\n /**\n * GetValues\n * @param mDb\n * @param query\n * @param tableName\n */\n getValues(mDb, query, tableName) {\n const msg = 'GetValues';\n const values = [];\n try {\n // get table column names and types\n const tableNamesTypes = this.sqliteUtil.getTableColumnNamesTypes(mDb, tableName);\n let rowNames = [];\n if (Object.keys(tableNamesTypes).includes('names')) {\n rowNames = tableNamesTypes.names;\n }\n else {\n throw new Error(`${msg} Table ${tableName} no names`);\n }\n const retValues = this.sqliteUtil.queryAll(mDb, query, [], true);\n for (const rValue of retValues) {\n const row = [];\n for (const rName of rowNames) {\n if (Object.keys(rValue).includes(rName)) {\n row.push(rValue[rName]);\n }\n else {\n row.push('NULL');\n }\n }\n values.push(row);\n }\n return values;\n }\n catch (err) {\n throw new Error(`${msg} ${err}`);\n }\n }\n /**\n * CheckColumnTypes\n * @param tableTypes\n * @param rowValues\n */\n /*\n private async checkColumnTypes(\n tableTypes: any[],\n rowValues: any[],\n ): Promise<boolean> {\n const isType = true;\n for (let i = 0; i < rowValues.length; i++) {\n if (rowValues[i].toString().toUpperCase() != 'NULL') {\n try {\n await this.isType(tableTypes[i], rowValues[i]);\n } catch (err) {\n return Promise.reject(new Error('checkColumnTypes: Type not found'));\n }\n }\n }\n return Promise.resolve(isType);\n }\n */\n /**\n * IsType\n * @param type\n * @param value\n */\n /*\n private async isType(type: string, value: any): Promise<void> {\n let ret = false;\n if (type === 'NULL' && typeof value === 'object') ret = true;\n if (type === 'TEXT' && typeof value === 'string') ret = true;\n if (type === 'INTEGER' && typeof value === 'number') ret = true;\n if (type === 'REAL' && typeof value === 'number') ret = true;\n if (type === 'BLOB' && typeof value === 'string') ret = true;\n if (ret) {\n return Promise.resolve();\n } else {\n return Promise.reject(new Error('IsType: not a SQL Type'));\n }\n }\n */\n /**\n * IsIdExists\n * @param mDB\n * @param dbName\n * @param firstColumnName\n * @param key\n */\n isIdExists(mDB, dbName, firstColumnName, key) {\n const msg = 'IsIdExists';\n let ret = false;\n let query = `SELECT ${firstColumnName} FROM ` + `${dbName} WHERE ${firstColumnName} = `;\n if (typeof key === 'number')\n query += `${key};`;\n if (typeof key === 'string')\n query += `'${key}';`;\n try {\n const resQuery = this.sqliteUtil.queryAll(mDB, query, [], true);\n if (resQuery.length === 1)\n ret = true;\n return ret;\n }\n catch (err) {\n throw new Error(`${msg} ${err}`);\n }\n }\n /**\n * CreateQuestionMarkString\n * @param length\n */\n createQuestionMarkString(length) {\n const msg = 'CreateQuestionMarkString';\n let retString = '';\n for (let i = 0; i < length; i++) {\n retString += '?,';\n }\n if (retString.length > 1) {\n retString = retString.slice(0, -1);\n return retString;\n }\n else {\n throw new Error(`${msg} length = 0`);\n }\n }\n /**\n * SetNameForUpdate\n * @param names\n */\n setNameForUpdate(names) {\n const msg = 'SetNameForUpdate';\n let retString = '';\n for (const name of names) {\n retString += `${name} = ? ,`;\n }\n if (retString.length > 1) {\n retString = retString.slice(0, -1);\n return retString;\n }\n else {\n throw new Error(`${msg} length = 0`);\n }\n }\n /**\n * IsJsonSQLite\n * @param obj\n */\n isJsonSQLite(obj) {\n const keyFirstLevel = ['database', 'version', 'overwrite', 'encrypted', 'mode', 'tables', 'views'];\n if (obj == null || (Object.keys(obj).length === 0 && obj.constructor === Object))\n return false;\n for (const key of Object.keys(obj)) {\n if (keyFirstLevel.indexOf(key) === -1)\n return false;\n if (key === 'database' && typeof obj[key] != 'string')\n return false;\n if (key === 'version' && typeof obj[key] != 'number')\n return false;\n if (key === 'overwrite' && typeof obj[key] != 'boolean')\n return false;\n if (key === 'encrypted' && typeof obj[key] != 'boolean')\n return false;\n if (key === 'mode' && typeof obj[key] != 'string')\n return false;\n if (key === 'tables' && typeof obj[key] != 'object')\n return false;\n if (key === 'tables') {\n for (const oKey of obj[key]) {\n const retTable = this.isTable(oKey);\n if (!retTable)\n return false;\n }\n }\n if (key === 'views' && typeof obj[key] != 'object')\n return false;\n if (key === 'views') {\n for (const oKey of obj[key]) {\n const retView = this.isView(oKey);\n if (!retView)\n return false;\n }\n }\n }\n return true;\n }\n /**\n * IsTable\n * @param obj\n */\n isTable(obj) {\n const keyTableLevel = ['name', 'schema', 'indexes', 'triggers', 'values'];\n let nbColumn = 0;\n if (obj == null || (Object.keys(obj).length === 0 && obj.constructor === Object))\n return false;\n for (const key of Object.keys(obj)) {\n if (keyTableLevel.indexOf(key) === -1)\n return false;\n if (key === 'name' && typeof obj[key] != 'string')\n return false;\n if (key === 'schema' && typeof obj[key] != 'object')\n return false;\n if (key === 'indexes' && typeof obj[key] != 'object')\n return false;\n if (key === 'triggers' && typeof obj[key] != 'object')\n return false;\n if (key === 'values' && typeof obj[key] != 'object')\n return false;\n if (key === 'schema') {\n obj['schema'].forEach((element) => {\n if (element.column) {\n nbColumn++;\n }\n });\n for (let i = 0; i < nbColumn; i++) {\n const retSchema = this.isSchema(obj[key][i]);\n if (!retSchema)\n return false;\n }\n }\n if (key === 'indexes') {\n for (const oKey of obj[key]) {\n const retIndexes = this.isIndexes(oKey);\n if (!retIndexes)\n return false;\n }\n }\n if (key === 'triggers') {\n for (const oKey of obj[key]) {\n const retTriggers = this.isTriggers(oKey);\n if (!retTriggers)\n return false;\n }\n }\n if (key === 'values') {\n if (nbColumn > 0) {\n for (const oKey of obj[key]) {\n if (typeof oKey != 'object' || oKey.length != nbColumn)\n return false;\n }\n }\n }\n }\n return true;\n }\n /**\n * IsSchema\n * @param obj\n */\n isSchema(obj) {\n const keySchemaLevel = ['column', 'value', 'foreignkey', 'primarykey', 'constraint'];\n if (obj == null || (Object.keys(obj).length === 0 && obj.constructor === Object))\n return false;\n for (const key of Object.keys(obj)) {\n if (keySchemaLevel.indexOf(key) === -1)\n return false;\n if (key === 'column' && typeof obj[key] != 'string')\n return false;\n if (key === 'value' && typeof obj[key] != 'string')\n return false;\n if (key === 'foreignkey' && typeof obj[key] != 'string')\n return false;\n if (key === 'primarykey' && typeof obj[key] != 'string')\n return false;\n if (key === 'constraint' && typeof obj[key] != 'string')\n return false;\n }\n return true;\n }\n /**\n * isIndexes\n * @param obj\n */\n isIndexes(obj) {\n const keyIndexesLevel = ['name', 'value', 'mode'];\n if (obj == null || (Object.keys(obj).length === 0 && obj.constructor === Object))\n return false;\n for (const key of Object.keys(obj)) {\n if (keyIndexesLevel.indexOf(key) === -1)\n return false;\n if (key === 'name' && typeof obj[key] != 'string')\n return false;\n if (key === 'value' && typeof obj[key] != 'string')\n return false;\n if (key === 'mode' && (typeof obj[key] != 'string' || obj[key].toUpperCase() != 'UNIQUE'))\n return false;\n }\n return true;\n }\n /**\n * isTriggers\n * @param obj\n */\n isTriggers(obj) {\n const keyTriggersLevel = ['name', 'timeevent', 'condition', 'logic'];\n if (obj == null || (Object.keys(obj).length === 0 && obj.constructor === Object))\n return false;\n for (const key of Object.keys(obj)) {\n if (keyTriggersLevel.indexOf(key) === -1)\n return false;\n if (key === 'name' && typeof obj[key] != 'string')\n return false;\n if (key === 'timeevent' && typeof obj[key] != 'string')\n return false;\n if (key === 'condition' && typeof obj[key] != 'string')\n return false;\n if (key === 'logic' && typeof obj[key] != 'string')\n return false;\n }\n return true;\n }\n /**\n * IsViews\n * @param obj\n */\n isView(obj) {\n const keyViewLevel = ['name', 'value'];\n if (obj == null || (Object.keys(obj).length === 0 && obj.constructor === Object))\n return false;\n for (const key of Object.keys(obj)) {\n if (keyViewLevel.indexOf(key) === -1)\n return false;\n if (key === 'name' && typeof obj[key] != 'string')\n return false;\n if (key === 'value' && typeof obj[key] != 'string')\n return false;\n }\n return true;\n }\n /**\n * checkSchemaValidity\n * @param schema\n */\n checkSchemaValidity(schema) {\n const msg = 'CheckSchemaValidity';\n for (let i = 0; i < schema.length; i++) {\n const sch = {};\n const keys = Object.keys(schema[i]);\n if (keys.includes('column')) {\n sch.column = schema[i].column;\n }\n if (keys.includes('value')) {\n sch.value = schema[i].value;\n }\n if (keys.includes('foreignkey')) {\n sch.foreignkey = schema[i].foreignkey;\n }\n if (keys.includes('constraint')) {\n sch.constraint = schema[i].constraint;\n }\n const isValid = this.isSchema(sch);\n if (!isValid) {\n throw new Error(`${msg} schema[${i}] not valid`);\n }\n }\n return;\n }\n /**\n * checkIndexesSchemaValidity\n * @param indexes\n */\n checkIndexesValidity(indexes) {\n const msg = 'CheckIndexesValidity';\n for (let i = 0; i < indexes.length; i++) {\n const index = {};\n const keys = Object.keys(indexes[i]);\n if (keys.includes('value')) {\n index.value = indexes[i].value;\n }\n if (keys.includes('name')) {\n index.name = indexes[i].name;\n }\n if (keys.includes('mode')) {\n index.mode = indexes[i].mode;\n }\n const isValid = this.isIndexes(index);\n if (!isValid) {\n throw new Error(`${msg} indexes[${i}] not valid`);\n }\n }\n return;\n }\n /**\n * checkTriggersValidity\n * @param triggers\n */\n checkTriggersValidity(triggers) {\n const msg = 'CheckTriggersValidity';\n for (let i = 0; i < triggers.length; i++) {\n const trigger = {};\n const keys = Object.keys(triggers[i]);\n if (keys.includes('logic')) {\n trigger.logic = triggers[i].logic;\n }\n if (keys.includes('name')) {\n trigger.name = triggers[i].name;\n }\n if (keys.includes('timeevent')) {\n trigger.timeevent = triggers[i].timeevent;\n }\n if (keys.includes('condition')) {\n trigger.condition = triggers[i].condition;\n }\n const isValid = this.isTriggers(trigger);\n if (!isValid) {\n throw new Error(`${msg} triggers[${i}] not valid`);\n }\n }\n return;\n }\n /**\n * checkViewsValidity\n * @param views\n */\n checkViewsValidity(views) {\n const msg = 'CheckViewsValidity';\n for (let i = 0; i < views.length; i++) {\n const view = {};\n const keys = Object.keys(views[i]);\n if (keys.includes('value')) {\n view.value = views[i].value;\n }\n if (keys.includes('name')) {\n view.name = views[i].name;\n }\n const isValid = this.isView(view);\n if (!isValid) {\n throw new Error(`${msg} views[${i}] not valid`);\n }\n }\n return;\n }\n /**\n * CreateView\n * @param mDB\n * @param table\n */\n createView(mDB, view) {\n const msg = 'CreateView';\n const stmt = `CREATE VIEW IF NOT EXISTS ${view.name} AS ${view.value};`;\n try {\n const results = this.sqliteUtil.execute(mDB, stmt, true, true);\n if (results.changes < 0) {\n throw new Error(`${msg} ${view.name} failed`);\n }\n return results;\n }\n catch (err) {\n throw new Error(`${msg} ${err}`);\n }\n }\n}\nexports.UtilsJson = UtilsJson;\n//# sourceMappingURL=utilsJson.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ExportToJson = void 0;\nconst utilsSQLite_1 = require(\"../utilsSQLite\");\nconst utilsJson_1 = require(\"./utilsJson\");\nclass ExportToJson {\n constructor() {\n this.sqliteUtil = new utilsSQLite_1.UtilsSQLite();\n this.jsonUtil = new utilsJson_1.UtilsJson();\n }\n /**\n * CreateExportObject\n * @param mDB\n * @param sqlObj\n */\n createExportObject(mDB, sqlObj) {\n const msg = 'CreateExportObject';\n const retObj = {};\n let tables = [];\n let views = [];\n let errmsg = '';\n try {\n // get View's name\n views = this.getViewsName(mDB);\n // get Table's name\n const resTables = this.getTablesNameSQL(mDB);\n if (resTables.length === 0) {\n throw new Error(`${msg} table's names failed`);\n }\n else {\n const isTable = this.jsonUtil.isTableExists(mDB, true, 'sync_table');\n if (!isTable && sqlObj.mode === 'partial') {\n throw new Error(`${msg} No sync_table available`);\n }\n switch (sqlObj.mode) {\n case 'partial': {\n tables = this.getTablesPartial(mDB, resTables);\n break;\n }\n case 'full': {\n tables = this.getTablesFull(mDB, resTables);\n break;\n }\n default: {\n errmsg = `${msg} expMode ${sqlObj.mode} not defined`;\n break;\n }\n }\n if (errmsg.length > 0) {\n throw new Error(errmsg);\n }\n if (tables.length > 0) {\n retObj.database = sqlObj.database;\n retObj.version = sqlObj.version;\n retObj.encrypted = sqlObj.encrypted;\n retObj.mode = sqlObj.mode;\n retObj.tables = tables;\n if (views.length > 0) {\n retObj.views = views;\n }\n }\n return retObj;\n }\n }\n catch (err) {\n throw new Error(`${msg} ${err}`);\n }\n }\n /**\n * GetTablesNameSQL\n * @param mDb\n */\n getTablesNameSQL(mDb) {\n const msg = 'GetTablesNameSQL';\n let sql = 'SELECT name,sql FROM sqlite_master WHERE ';\n sql += \"type='table' AND name NOT LIKE 'sync_table' \";\n sql += \"AND name NOT LIKE '_temp_%' \";\n sql += \"AND name NOT LIKE 'sqlite_%';\";\n let retQuery = [];\n try {\n retQuery = this.sqliteUtil.queryAll(mDb, sql, [], true);\n return retQuery;\n }\n catch (err) {\n throw new Error(`${msg} ${err}`);\n }\n }\n getLastExportDate(mDb) {\n const msg = 'GetLastExportDate';\n let retDate = -1;\n try {\n // get the last sync date\n const stmt = `SELECT sync_date FROM sync_table WHERE id = ?;`;\n const row = this.sqliteUtil.queryOne(mDb, stmt, [2], true);\n if (row != null) {\n const key = Object.keys(row)[0];\n retDate = row[key];\n }\n return retDate;\n }\n catch (err) {\n throw new Error(`${msg} ${err}`);\n }\n }\n /**\n * SetLastExportDate\n * @param mDb\n * @param lastExportedDate\n * @returns\n */\n setLastExportDate(mDb, lastExportedDate) {\n const msg = 'SetLastExportDate';\n try {\n const isTable = this.jsonUtil.isTableExists(mDb, true, 'sync_table');\n if (!isTable) {\n throw new Error(`${msg} No sync_table available`);\n }\n const sDate = Math.round(new Date(lastExportedDate).getTime() / 1000);\n let stmt = '';\n if (this.getLastExportDate(mDb) > 0) {\n stmt = `UPDATE sync_table SET sync_date = ${sDate} WHERE id = 2;`;\n }\n else {\n stmt = `INSERT INTO sync_table (sync_date) VALUES (${sDate});`;\n }\n const results = this.sqliteUtil.execute(mDb, stmt, false, true);\n if (results.changes < 0) {\n return { result: false, message: `${msg} failed` };\n }\n else {\n return { result: true };\n }\n }\n catch (err) {\n return {\n result: false,\n message: `${msg} ${err.message}`,\n };\n }\n }\n delExportedRows(mDb) {\n const msg = 'DelExportedRows';\n let lastExportDate;\n try {\n // check if synchronization table exists\n const isTable = this.jsonUtil.isTableExists(mDb, true, 'sync_table');\n if (!isTable) {\n throw new Error(`${msg} No sync_table available`);\n }\n // get the last export date\n lastExportDate = this.getLastExportDate(mDb);\n if (lastExportDate < 0) {\n throw new Error(`${msg} no last exported date available`);\n }\n // get the table' name list\n const resTables = this.sqliteUtil.getTablesNames(mDb);\n if (resTables.length === 0) {\n throw new Error(`${msg} No table's names returned`);\n }\n // Loop through the tables\n for (const table of resTables) {\n // define the delete statement\n const delStmt = `DELETE FROM ${table}\n WHERE sql_deleted = 1 AND last_modified < ${lastExportDate};`;\n const results = this.sqliteUtil.prepareRun(mDb, delStmt, [], true, 'no');\n if (results.lastId < 0) {\n throw new Error(`${msg} lastId < 0`);\n }\n }\n return;\n }\n catch (err) {\n throw new Error(`${msg} failed: ${err.message}`);\n }\n }\n /**\n * GetViewsNameSQL\n * @param mDb\n */\n getViewsName(mDb) {\n const views = [];\n let sql = 'SELECT name,sql FROM sqlite_master WHERE ';\n sql += \"type='view' AND name NOT LIKE 'sqlite_%';\";\n let retQuery = [];\n try {\n retQuery = this.sqliteUtil.queryAll(mDb, sql, [], true);\n for (const query of retQuery) {\n const view = {};\n view.name = query.name;\n view.value = query.sql.substring(query.sql.indexOf('AS ') + 3);\n views.push(view);\n }\n return views;\n }\n catch (err) {\n throw new Error(`getViewsName: ${err}`);\n }\n }\n /**\n * GetSyncDate\n * @param mDb\n */\n getSyncDate(mDb) {\n const msg = 'GetSyncDate';\n let retDate = -1;\n // get the last sync date\n const stmt = `SELECT sync_date FROM sync_table WHERE id = ?;`;\n const row = this.sqliteUtil.queryOne(mDb, stmt, [1], true);\n if (row != null) {\n const key = Object.keys(row)[0];\n retDate = row[key];\n return retDate;\n }\n else {\n throw new Error(`${msg} no syncDate`);\n }\n }\n /**\n * GetTablesFull\n * @param mDb\n * @param resTables\n */\n getTablesFull(mDb, resTables) {\n const msg = 'GetTablesFull';\n const tables = [];\n let errmsg = '';\n try {\n // Loop through the tables\n for (const rTable of resTables) {\n let tableName;\n let sqlStmt;\n if (rTable.name) {\n tableName = rTable.name;\n }\n else {\n errmsg = `${msg} no name`;\n break;\n }\n if (rTable.sql) {\n sqlStmt = rTable.sql;\n }\n else {\n errmsg = `${msg} no sql`;\n break;\n }\n const table = {};\n // create Table's Schema\n const schema = this.getSchema(sqlStmt);\n if (schema.length === 0) {\n errmsg = `${msg} no Schema returned`;\n break;\n }\n // check schema validity\n this.jsonUtil.checkSchemaValidity(schema);\n // create Table's indexes if any\n const indexes = this.getIndexes(mDb, tableName);\n if (indexes.length > 0) {\n // check indexes validity\n this.jsonUtil.checkIndexesValidity(indexes);\n }\n // create Table's triggers if any\n const triggers = this.getTriggers(mDb, tableName);\n if (triggers.length > 0) {\n // check triggers validity\n this.jsonUtil.checkTriggersValidity(triggers);\n }\n // create Table's Data\n const query = `SELECT * FROM ${tableName};`;\n const values = this.jsonUtil.getValues(mDb, query, tableName);\n table.name = tableName;\n if (schema.length > 0) {\n table.schema = schema;\n }\n else {\n errmsg = `${msg} must contain schema`;\n break;\n }\n if (indexes.length > 0) {\n table.indexes = indexes;\n }\n if (triggers.length > 0) {\n table.triggers = triggers;\n }\n if (values.length > 0) {\n table.values = values;\n }\n if (Object.keys(table).length <= 1) {\n errmsg = `${msg} table ${tableName} is not a jsonTable`;\n break;\n }\n tables.push(table);\n }\n if (errmsg.length > 0) {\n throw new Error(errmsg);\n }\n return tables;\n }\n catch (err) {\n throw new Error(`${msg} ${err}`);\n }\n }\n /**\n * GetSchema\n * @param mDb\n * @param sqlStmt\n * @param tableName\n */\n getSchema(sqlStmt /*,tableName: string,*/) {\n const msg = 'GetSchema';\n const schema = [];\n // take the substring between parenthesis\n const openPar = sqlStmt.indexOf('(');\n const closePar = sqlStmt.lastIndexOf(')');\n let sstr = sqlStmt.substring(openPar + 1, closePar);\n // check if there is other parenthesis and replace the ',' by '§'\n try {\n sstr = this.modEmbeddedParentheses(sstr);\n const sch = sstr.split(',');\n // for each element of the array split the\n // first word as key\n for (const sc of sch) {\n const row = [];\n const scht = sc.replace(/\\n/g, '').trim();\n row[0] = scht.substring(0, scht.indexOf(' '));\n row[1] = scht.substring(scht.indexOf(' ') + 1);\n const jsonRow = {};\n switch (row[0].toUpperCase()) {\n case 'FOREIGN': {\n const oPar = scht.indexOf('(');\n const cPar = scht.indexOf(')');\n const fk = scht.substring(oPar + 1, cPar);\n const fknames = fk.split('§');\n row[0] = fknames.join(',');\n row[0] = row[0].replace(/, /g, ',');\n row[1] = scht.substring(cPar + 2);\n jsonRow['foreignkey'] = row[0];\n break;\n }\n case 'PRIMARY':\n case 'UNIQUE': {\n const prefix = row[0].toUpperCase() === 'PRIMARY' ? 'CPK_' : 'CUN_';\n const oPar = scht.indexOf('(');\n const cPar = scht.indexOf(')');\n const pk = scht.substring(oPar + 1, cPar);\n const pknames = pk.split('§');\n row[0] = prefix + pknames.join('_');\n row[0] = row[0].replace(/_ /g, '_');\n row[1] = scht;\n jsonRow['constraint'] = row[0];\n break;\n }\n case 'CONSTRAINT': {\n const tRow = [];\n const row1t = row[1].trim();\n tRow[0] = row1t.substring(0, row1t.indexOf(' '));\n tRow[1] = row1t.substring(row1t.indexOf(' ') + 1);\n row[0] = tRow[0];\n jsonRow['constraint'] = row[0];\n row[1] = tRow[1];\n break;\n }\n default: {\n jsonRow['column'] = row[0];\n break;\n }\n }\n jsonRow['value'] = row[1].replace(/§/g, ',');\n schema.push(jsonRow);\n }\n return schema;\n }\n catch (err) {\n throw new Error(`${msg} ${err}`);\n }\n }\n /**\n * GetIndexes\n * @param mDb\n * @param sqlStmt\n * @param tableName\n */\n getIndexes(mDb, tableName) {\n const msg = 'GetIndexes';\n const indexes = [];\n let errmsg = '';\n try {\n let stmt = 'SELECT name,tbl_name,sql FROM sqlite_master WHERE ';\n stmt += `type = 'index' AND tbl_name = '${tableName}' `;\n stmt += `AND sql NOTNULL;`;\n const retIndexes = this.sqliteUtil.queryAll(mDb, stmt, [], true);\n if (retIndexes.length > 0) {\n for (const rIndex of retIndexes) {\n const keys = Object.keys(rIndex);\n if (keys.length === 3) {\n if (rIndex['tbl_name'] === tableName) {\n const sql = rIndex['sql'];\n const mode = sql.includes('UNIQUE') ? 'UNIQUE' : '';\n const oPar = sql.lastIndexOf('(');\n const cPar = sql.lastIndexOf(')');\n const index = {};\n index.name = rIndex['name'];\n index.value = sql.slice(oPar + 1, cPar);\n if (mode.length > 0)\n index.mode = mode;\n indexes.push(index);\n }\n else {\n errmsg = `${msg} Table ${tableName} doesn't match`;\n break;\n }\n }\n else {\n errmsg = `${msg} Table ${tableName} creating indexes`;\n break;\n }\n }\n if (errmsg.length > 0) {\n throw new Error(errmsg);\n }\n }\n return indexes;\n }\n catch (err) {\n throw new Error(`${msg} ${err}`);\n }\n }\n /**\n * GetTriggers\n * @param mDb\n * @param sqlStmt\n * @param tableName\n */\n getTriggers(mDb, tableName) {\n const msg = 'GetTriggers';\n const triggers = [];\n try {\n let stmt = 'SELECT name,tbl_name,sql FROM sqlite_master WHERE ';\n stmt += `type = 'trigger' AND tbl_name = '${tableName}' `;\n stmt += `AND sql NOT NULL;`;\n const retTriggers = this.sqliteUtil.queryAll(mDb, stmt, [], true);\n if (retTriggers.length > 0) {\n for (const rTrg of retTriggers) {\n const keys = Object.keys(rTrg);\n if (keys.length === 3) {\n if (rTrg['tbl_name'] === tableName) {\n const sql = rTrg['sql'];\n const name = rTrg['name'];\n let sqlArr = sql.split(name);\n if (sqlArr.length != 2) {\n throw new Error(`${msg} sql split name does not return 2 values`);\n }\n if (!sqlArr[1].includes(tableName)) {\n throw new Error(`${msg} sql split does not contains ${tableName}`);\n }\n const timeEvent = sqlArr[1].split(tableName, 1)[0].trim();\n sqlArr = sqlArr[1].split(timeEvent + ' ' + tableName);\n if (sqlArr.length != 2) {\n throw new Error(`${msg} sql split tableName does not return 2 values`);\n }\n let condition = '';\n let logic = '';\n if (sqlArr[1].trim().substring(0, 5).toUpperCase() !== 'BEGIN') {\n sqlArr = sqlArr[1].trim().split('BEGIN');\n if (sqlArr.length != 2) {\n throw new Error(`${msg} sql split BEGIN does not return 2 values`);\n }\n condition = sqlArr[0].trim();\n logic = 'BEGIN' + sqlArr[1];\n }\n else {\n logic = sqlArr[1].trim();\n }\n const trigger = {};\n trigger.name = name;\n trigger.logic = logic;\n if (condition.length > 0)\n trigger.condition = condition;\n trigger.timeevent = timeEvent;\n triggers.push(trigger);\n }\n else {\n throw new Error(`${msg} Table ${tableName} doesn't match`);\n }\n }\n else {\n throw new Error(`${msg} Table ${tableName} creating indexes`);\n }\n }\n }\n return triggers;\n }\n catch (err) {\n throw new Error(`${msg} ${err}`);\n }\n }\n /**\n * GetTablesPartial\n * @param mDb\n * @param resTables\n */\n getTablesPartial(mDb, resTables) {\n const msg = 'GetTablesPartial';\n const tables = [];\n let modTables = {};\n let syncDate = 0;\n let modTablesKeys = [];\n let errmsg = '';\n try {\n // Get the syncDate and the Modified Tables\n const partialModeData = this.getPartialModeData(mDb, resTables);\n if (Object.keys(partialModeData).includes('syncDate')) {\n syncDate = partialModeData.syncDate;\n }\n if (Object.keys(partialModeData).includes('modTables')) {\n modTables = partialModeData.modTables;\n modTablesKeys = Object.keys(modTables);\n }\n // Loop trough tables\n for (const rTable of resTables) {\n let tableName = '';\n let sqlStmt = '';\n if (rTable.name) {\n tableName = rTable.name;\n }\n else {\n errmsg = `${msg} no name`;\n break;\n }\n if (rTable.sql) {\n sqlStmt = rTable.sql;\n }\n else {\n errmsg = `${msg} no sql`;\n break;\n }\n if (modTablesKeys.length == 0 || modTablesKeys.indexOf(tableName) === -1 || modTables[tableName] == 'No') {\n continue;\n }\n const table = {};\n let schema = [];\n let indexes = [];\n let triggers = [];\n table.name = rTable;\n if (modTables[table.name] === 'Create') {\n // create Table's Schema\n schema = this.getSchema(sqlStmt);\n if (schema.length > 0) {\n // check schema validity\n this.jsonUtil.checkSchemaValidity(schema);\n }\n // create Table's indexes if any\n indexes = this.getIndexes(mDb, tableName);\n if (indexes.length > 0) {\n // check indexes validity\n this.jsonUtil.checkIndexesValidity(indexes);\n }\n // create Table's triggers if any\n triggers = this.getTriggers(mDb, tableName);\n if (triggers.length > 0) {\n // check triggers validity\n this.jsonUtil.checkTriggersValidity(triggers);\n }\n }\n // create Table's Data\n let query = '';\n if (modTables[tableName] === 'Create') {\n query = `SELECT * FROM ${tableName};`;\n }\n else {\n query = `SELECT * FROM ${tableName} ` + `WHERE last_modified > ${syncDate};`;\n }\n const values = this.jsonUtil.getValues(mDb, query, tableName);\n // check the table object validity\n table.name = tableName;\n if (schema.length > 0) {\n table.schema = schema;\n }\n if (indexes.length > 0) {\n table.indexes = indexes;\n }\n if (triggers.length > 0) {\n table.triggers = triggers;\n }\n if (values.length > 0) {\n table.values = values;\n }\n if (Object.keys(table).length <= 1) {\n errmsg = `${msg} table ${tableName} is not a jsonTable`;\n break;\n }\n tables.push(table);\n }\n if (errmsg.length > 0) {\n throw new Error(errmsg);\n }\n return tables;\n }\n catch (err) {\n throw new Error(`${msg} ${err}`);\n }\n }\n /**\n * GetPartialModeData\n * @param mDb\n * @param resTables\n */\n getPartialModeData(mDb, resTables) {\n const msg = 'GetPartialModeData';\n const retData = {};\n try {\n // get the synchronization date\n const syncDate = this.getSyncDate(mDb);\n if (syncDate <= 0) {\n throw new Error(`${msg} no syncDate`);\n }\n // get the tables which have been updated\n // since last synchronization\n const modTables = this.getTablesModified(mDb, resTables, syncDate);\n if (modTables.length <= 0) {\n throw new Error(`${msg} no modTables`);\n }\n retData.syncDate = syncDate;\n retData.modTables = modTables;\n return retData;\n }\n catch (err) {\n throw new Error(`${msg} ${err}`);\n }\n }\n getTablesModified(mDb, tables, syncDate) {\n const msg = 'GetTablesModified';\n let errmsg = '';\n try {\n const retModified = {};\n for (const rTable of tables) {\n let mode;\n // get total count of the table\n let stmt = 'SELECT count(*) AS tcount ';\n stmt += `FROM ${rTable.name};`;\n let retQuery = this.sqliteUtil.queryAll(mDb, stmt, [], true);\n if (retQuery.length != 1) {\n errmsg = `${msg} total count not returned`;\n break;\n }\n const totalCount = retQuery[0]['tcount'];\n // get total count of modified since last sync\n stmt = 'SELECT count(*) AS mcount FROM ';\n stmt += `${rTable.name} WHERE last_modified > `;\n stmt += `${syncDate};`;\n retQuery = this.sqliteUtil.queryAll(mDb, stmt, [], true);\n if (retQuery.length != 1)\n break;\n const totalModifiedCount = retQuery[0]['mcount'];\n if (totalModifiedCount === 0) {\n mode = 'No';\n }\n else if (totalCount === totalModifiedCount) {\n mode = 'Create';\n }\n else {\n mode = 'Modified';\n }\n const key = rTable.name;\n retModified[key] = mode;\n }\n if (errmsg.length > 0) {\n throw new Error(errmsg);\n }\n return retModified;\n }\n catch (err) {\n throw new Error(`${msg} ${err}`);\n }\n }\n modEmbeddedParentheses(sstr) {\n const msg = 'ModEmbeddedParentheses';\n const oParArray = this.indexOfChar(sstr, '(');\n const cParArray = this.indexOfChar(sstr, ')');\n if (oParArray.length != cParArray.length) {\n throw new Error(`${msg} Not same number of '(' & ')'`);\n }\n if (oParArray.length === 0) {\n return sstr;\n }\n let resStmt = sstr.substring(0, oParArray[0] - 1);\n for (let i = 0; i < oParArray.length; i++) {\n let str;\n if (i < oParArray.length - 1) {\n if (oParArray[i + 1] < cParArray[i]) {\n str = sstr.substring(oParArray[i] - 1, cParArray[i + 1]);\n i++;\n }\n else {\n str = sstr.substring(oParArray[i] - 1, cParArray[i]);\n }\n }\n else {\n str = sstr.substring(oParArray[i] - 1, cParArray[i]);\n }\n const newS = str.replace(/,/g, '§');\n resStmt += newS;\n if (i < oParArray.length - 1) {\n resStmt += sstr.substring(cParArray[i], oParArray[i + 1] - 1);\n }\n }\n resStmt += sstr.substring(cParArray[cParArray.length - 1], sstr.length);\n return resStmt;\n }\n indexOfChar(str, char) {\n const tmpArr = [...str];\n char = char.toLowerCase();\n return tmpArr.reduce((results, elem, idx) => (elem.toLowerCase() === char ? [...results, idx] : results), []);\n }\n}\nexports.ExportToJson = ExportToJson;\n//# sourceMappingURL=exportToJson.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.UtilsDrop = void 0;\nconst utilsSQLite_1 = require(\"./utilsSQLite\");\nclass UtilsDrop {\n constructor() {\n this.sqliteUtil = new utilsSQLite_1.UtilsSQLite();\n }\n /**\n * DropElements\n * @param db\n * @param type [\"table\",\"index\",\"trigger\"]\n */\n dropElements(db, type) {\n let msg = '';\n let stmt1 = `AND name NOT LIKE ('sqlite_%')`;\n switch (type) {\n case 'index':\n msg = 'DropIndexes';\n break;\n case 'trigger':\n msg = 'DropTriggers';\n break;\n case 'table':\n msg = 'DropTables';\n stmt1 += ` AND name NOT IN ('sync_table')`;\n break;\n case 'view':\n msg = 'DropViews';\n break;\n default:\n throw new Error(`DropElements: ${type} ` + 'not found');\n }\n // get the element's names\n let stmt = 'SELECT name FROM sqlite_master WHERE ';\n stmt += `type = '${type}' ${stmt1};`;\n try {\n const elements = this.sqliteUtil.queryAll(db, stmt, [], true);\n if (elements.length > 0) {\n const upType = type.toUpperCase();\n const statements = [];\n for (const elem of elements) {\n let stmt = `DROP ${upType} IF EXISTS `;\n stmt += `${elem.name};`;\n statements.push(stmt);\n }\n for (const stmt of statements) {\n const results = this.sqliteUtil.prepareRun(db, stmt, [], false, 'no');\n if (results.lastId < 0) {\n throw new Error(`${msg}: lastId < 0`);\n }\n }\n }\n return;\n }\n catch (err) {\n throw new Error(`${msg}: ${err}`);\n }\n }\n /**\n * DropAll\n * Drop all database's elements\n * @param db\n */\n dropAll(db) {\n try {\n // drop tables\n this.dropElements(db, 'table');\n // drop indexes\n this.dropElements(db, 'index');\n // drop triggers\n this.dropElements(db, 'trigger');\n // drop views\n this.dropElements(db, 'view');\n // vacuum the database\n this.sqliteUtil.prepareRun(db, 'VACUUM;', [], false, 'no');\n return;\n }\n catch (err) {\n throw new Error(`DropAll: ${err}`);\n }\n }\n /**\n * DropTempTables\n * @param db\n * @param alterTables\n */\n dropTempTables(db, alterTables) {\n const tempTables = Object.keys(alterTables);\n const statements = [];\n for (const tTable of tempTables) {\n let stmt = 'DROP TABLE IF EXISTS ';\n stmt += `_temp_${tTable};`;\n statements.push(stmt);\n }\n try {\n const results = this.sqliteUtil.execute(db, statements.join('\\n'), false, true);\n if (results.changes < 0) {\n throw new Error('DropTempTables: changes < 0');\n }\n return;\n }\n catch (err) {\n throw new Error(`DropTempTables: ${err}`);\n }\n }\n}\nexports.UtilsDrop = UtilsDrop;\n//# sourceMappingURL=utilsDrop.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ImportFromJson = void 0;\nconst utilsDrop_1 = require(\"../utilsDrop\");\nconst utilsSQLite_1 = require(\"../utilsSQLite\");\nconst utilsJson_1 = require(\"./utilsJson\");\nclass ImportFromJson {\n constructor() {\n this.jsonUtil = new utilsJson_1.UtilsJson();\n this.sqliteUtil = new utilsSQLite_1.UtilsSQLite();\n this.dropUtil = new utilsDrop_1.UtilsDrop();\n }\n /**\n * CreateDatabaseSchema\n * @param mDB\n * @param jsonData\n */\n createDatabaseSchema(mDB, jsonData) {\n let changes = -1;\n const version = jsonData.version;\n try {\n // set User Version PRAGMA\n this.sqliteUtil.setVersion(mDB.database, version);\n // DROP ALL when mode=\"full\"\n if (jsonData.mode === 'full') {\n this.dropUtil.dropAll(mDB.database);\n }\n // create database schema\n changes = this.jsonUtil.createSchema(mDB, jsonData);\n return changes;\n }\n catch (err) {\n throw new Error('CreateDatabaseSchema: ' + `${err}`);\n }\n }\n createTablesData(mDB, jsonData) {\n const msg = 'CreateTablesData';\n let results;\n let isValue = false;\n let message = '';\n let initChanges = -1;\n let changes = -1;\n try {\n initChanges = this.sqliteUtil.dbChanges(mDB.database);\n // start a transaction\n this.sqliteUtil.beginTransaction(mDB.database, true);\n mDB.setIsTransActive(true);\n }\n catch (err) {\n throw new Error(`${msg} ${err}`);\n }\n for (const jTable of jsonData.tables) {\n if (jTable.values != null && jTable.values.length >= 1) {\n // Create the table's data\n try {\n results = this.jsonUtil.createDataTable(mDB.database, jTable, jsonData.mode);\n if (results.lastId < 0)\n break;\n isValue = true;\n }\n catch (err) {\n message = err;\n isValue = false;\n break;\n }\n }\n }\n if (isValue) {\n try {\n this.sqliteUtil.commitTransaction(mDB.database, true);\n mDB.setIsTransActive(false);\n changes = this.sqliteUtil.dbChanges(mDB.database) - initChanges;\n return changes;\n }\n catch (err) {\n throw new Error(`${msg} ${err}`);\n }\n }\n else {\n if (message.length > 0) {\n try {\n this.sqliteUtil.rollbackTransaction(mDB.database, true);\n mDB.setIsTransActive(false);\n throw new Error(`${msg} ${message}`);\n }\n catch (err) {\n throw new Error(`${msg} ${err}: ${message}`);\n }\n }\n else {\n // case were no values given\n return 0;\n }\n }\n }\n /**\n * CreateViews\n * @param mDB\n * @param jsonData\n */\n createViews(mDB, jsonData) {\n const msg = 'CreateViews';\n let isView = false;\n let message = '';\n let results;\n try {\n // start a transaction\n this.sqliteUtil.beginTransaction(mDB.database, true);\n mDB.setIsTransActive(true);\n }\n catch (err) {\n throw new Error(`${msg} ${err}`);\n }\n for (const jView of jsonData.views) {\n if (jView.value != null) {\n // Create the view\n try {\n results = this.jsonUtil.createView(mDB.database, jView);\n isView = true;\n }\n catch (err) {\n message = err;\n isView = false;\n break;\n }\n }\n }\n if (isView) {\n try {\n this.sqliteUtil.commitTransaction(mDB.database, true);\n mDB.setIsTransActive(false);\n return results.changes;\n }\n catch (err) {\n throw new Error(`${msg} ${err}`);\n }\n }\n else {\n if (message.length > 0) {\n try {\n this.sqliteUtil.rollbackTransaction(mDB.database, true);\n mDB.setIsTransActive(false);\n throw new Error(`${msg} ${message}`);\n }\n catch (err) {\n throw new Error(`${msg} ${err}: ${message}`);\n }\n }\n else {\n // case were no views given\n return 0;\n }\n }\n }\n}\nexports.ImportFromJson = ImportFromJson;\n//# sourceMappingURL=importFromJson.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.UtilsSecret = void 0;\nconst GlobalSQLite_1 = require(\"../GlobalSQLite\");\nconst utilsFile_1 = require(\"./utilsFile\");\nconst utilsSQLite_1 = require(\"./utilsSQLite\");\nclass UtilsSecret {\n constructor() {\n this.globalUtil = new GlobalSQLite_1.GlobalSQLite();\n this.sqliteUtil = new utilsSQLite_1.UtilsSQLite();\n this.fileUtil = new utilsFile_1.UtilsFile();\n this.storage = require('electron-json-storage');\n }\n isPassphraseValid(passphrase) {\n let isValid = false;\n const secret = this.getPassphrase();\n if (secret === passphrase) {\n isValid = true;\n }\n return isValid;\n }\n isSecretStored() {\n const secret = this.getPassphrase();\n if (secret.length <= 0)\n return false;\n return true;\n }\n setEncryptSecret(passphrase) {\n try {\n let oldpassphrase = this.getPassphrase();\n if (oldpassphrase.length > 0) {\n throw new Error(`setEncryptSecret: passphrase already stored`);\n }\n else {\n oldpassphrase = this.globalUtil != null ? this.globalUtil.secret : '';\n if (oldpassphrase.length <= 0) {\n throw new Error(`setEncryptSecret: globalUtil is null`);\n }\n // check if some databases were encrypted with the initial secret 'sqlite secret'\n this.changeDatabaseSecret(oldpassphrase, passphrase).then(() => {\n this.storage.set('userData', { passphrase: passphrase }, function (error) {\n if (error)\n throw new Error(`setEncryptSecret: ${error.message}`);\n });\n return;\n });\n }\n }\n catch (err) {\n throw new Error(`setEncryptSecret: ${err}`);\n }\n }\n changeEncryptSecret(oldpassphrase, passphrase) {\n try {\n // check if some databases were encrypted with the oldpassphrase\n this.changeDatabaseSecret(oldpassphrase, passphrase).then(() => {\n this.setPassphrase(passphrase);\n });\n }\n catch (err) {\n throw new Error(`changeEncryptSecret: ${err}`);\n }\n }\n clearEncryptSecret() {\n try {\n let oldpassphrase = this.getPassphrase();\n if (oldpassphrase.length <= 0) {\n oldpassphrase = this.globalUtil.secret;\n }\n // check if some databases were encrypted with the oldpassphrase\n this.changeDatabaseSecret(oldpassphrase, '').then(() => {\n this.removePassphrase();\n });\n }\n catch (err) {\n throw new Error(`clearEncryptSecret: ${err}`);\n }\n }\n checkEncryptSecret(passphrase) {\n const storedPassphrase = this.getPassphrase();\n if (storedPassphrase.length <= 0) {\n throw new Error(`checkEncryptSecret: No passphrase stored`);\n }\n if (storedPassphrase === passphrase) {\n return true;\n }\n else {\n return false;\n }\n }\n async changeDatabaseSecret(oldpassphrase, newpassphrase) {\n try {\n // get the database folder\n const pathDatabase = this.fileUtil.getDatabasesPath();\n // get the list of databases\n const files = await this.fileUtil.getFileList(pathDatabase);\n files.forEach(async (dbName) => {\n const filePath = this.fileUtil.getFilePath(dbName);\n const isEncrypt = await this.sqliteUtil.isDBEncrypted(filePath);\n if (isEncrypt) {\n this.sqliteUtil.changePassword(filePath, oldpassphrase, newpassphrase);\n }\n });\n return;\n }\n catch (err) {\n throw new Error(`changeDatabaseSecret: ${err}`);\n }\n }\n getPassphrase() {\n const data = this.storage.getSync('userData');\n const keys = Object.keys(data);\n if (data == null || keys.length <= 0)\n return '';\n if (Object.keys(data).includes('passphrase')) {\n return data.passphrase;\n }\n else {\n return '';\n }\n }\n setPassphrase(passphrase) {\n const data = this.storage.getSync('userData');\n data.passphrase = passphrase;\n this.storage.set('userData', data, function (error) {\n if (error)\n throw new Error(`setPassphrase: ${error.message}`);\n });\n }\n removePassphrase() {\n const data = this.storage.getSync('userData');\n delete data.passphrase;\n this.storage.set('userData', data, function (error) {\n if (error)\n throw new Error(`removePassphrase: ${error.message}`);\n });\n }\n}\nexports.UtilsSecret = UtilsSecret;\n//# sourceMappingURL=utilsSecret.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.UtilsJsonEncryption = void 0;\nconst utilsSecret_1 = require(\"../utilsSecret\");\nclass UtilsJsonEncryption {\n constructor() {\n this.fileSecret = new utilsSecret_1.UtilsSecret();\n this.SALT = 'jeep_capacitor_sqlite';\n this.Crypto = require('crypto');\n this.CryptoJS = require('crypto-js');\n }\n /**\n * deriveKeyFromPassphrase\n * Function to derive a symmetric key from passphrase and salt using PBKDF2\n * @param passphrase\n * @param salt\n * @returns\n */\n deriveKeyFromPassphrase(passphrase, salt) {\n const iterations = 10000; // Recommended number of iterations for PBKDF2\n const keyLength = 32;\n const key = this.Crypto.pbkdf2Sync(passphrase, salt, iterations, keyLength, 'sha256');\n const keyHex = Buffer.from(key).toString('hex');\n return keyHex;\n }\n /**\n * encryptJSONObject\n * Function to encrypt JSON object with AES and return as Base64\n * @param jsonObj\n * @returns\n */\n encryptJSONObject(jsonObj) {\n const jsonString = JSON.stringify(jsonObj);\n // get the passphrase\n const passphrase = this.fileSecret.getPassphrase();\n // derived a combined key from passphrase and salt\n const key = this.deriveKeyFromPassphrase(passphrase, this.SALT);\n const encrypted = this.CryptoJS.AES.encrypt(jsonString, key).toString();\n const encryptedBase64 = Buffer.from(encrypted).toString('base64');\n return encryptedBase64;\n }\n /**\n * decryptJSONObject\n * Function to decrypt AES encrypted JSON object from Base64\n * @param encryptedBase64\n * @returns\n */\n decryptJSONObject(encryptedBase64) {\n const encryptedData = Buffer.from(encryptedBase64, 'base64').toString();\n // get the passphrase\n const passphrase = this.fileSecret.getPassphrase();\n // derived a combined key from passphrase and salt\n const key = this.deriveKeyFromPassphrase(passphrase, this.SALT);\n const bytes = this.CryptoJS.AES.decrypt(encryptedData, key);\n const decryptedString = bytes.toString(this.CryptoJS.enc.Utf8);\n const decryptedObj = JSON.parse(decryptedString);\n return decryptedObj;\n }\n}\nexports.UtilsJsonEncryption = UtilsJsonEncryption;\n//# sourceMappingURL=utilsJsonEncryption.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.UtilsEncryption = void 0;\nconst utilsFile_1 = require(\"./utilsFile\");\nconst utilsSQLite_1 = require(\"./utilsSQLite\");\nclass UtilsEncryption {\n constructor() {\n this.fileUtil = new utilsFile_1.UtilsFile();\n this.sqliteUtil = new utilsSQLite_1.UtilsSQLite();\n }\n /**\n * EncryptDatabase\n * @param pathDB\n * @param password\n */\n async encryptDatabase(pathDB, password) {\n const msg = 'EncryptDatabase: ';\n const retB = this.fileUtil.isPathExists(pathDB);\n if (retB) {\n try {\n const mDB = await this.sqliteUtil.openOrCreateDatabase(pathDB, '', false);\n this.sqliteUtil.pragmaReKey(mDB, '', password);\n this.sqliteUtil.closeDB(mDB);\n return Promise.resolve();\n }\n catch (err) {\n return Promise.reject(new Error(`${msg} ${err.message} `));\n }\n }\n else {\n return Promise.reject(new Error(`${msg}file path ${pathDB} ` + 'does not exist'));\n }\n }\n async decryptDatabase(pathDB, password) {\n const msg = 'DecryptDatabase: ';\n const retB = this.fileUtil.isPathExists(pathDB);\n if (retB) {\n try {\n const mDB = await this.sqliteUtil.openOrCreateDatabase(pathDB, password, false);\n this.sqliteUtil.pragmaReKey(mDB, password, '');\n this.sqliteUtil.closeDB(mDB);\n return Promise.resolve();\n }\n catch (err) {\n return Promise.reject(new Error(`${msg} ${err.message} `));\n }\n }\n else {\n return Promise.reject(new Error(`${msg}file path ${pathDB} ` + 'does not exist'));\n }\n }\n}\nexports.UtilsEncryption = UtilsEncryption;\n//# sourceMappingURL=utilsEncryption.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.UtilsUpgrade = void 0;\nconst utilsSQLite_1 = require(\"./utilsSQLite\");\nclass UtilsUpgrade {\n constructor() {\n this.sqliteUtil = new utilsSQLite_1.UtilsSQLite();\n }\n /**\n * OnUpgrade\n * @param mDB\n * @param vUpgDict\n * @param dbName\n * @param curVersion\n * @param targetVersion\n */\n async onUpgrade(mDB, vUpgDict, curVersion, targetVersion) {\n let changes;\n const sortedKeys = new Int32Array(Object.keys(vUpgDict).map((item) => parseInt(item))).sort();\n for (const versionKey of sortedKeys) {\n if (versionKey > curVersion && versionKey <= targetVersion) {\n const statements = vUpgDict[versionKey].statements;\n if (statements.length === 0) {\n return Promise.reject('onUpgrade: statements not given');\n }\n try {\n // set Foreign Keys Off\n this.sqliteUtil.setForeignKeyConstraintsEnabled(mDB.database, false);\n const initChanges = this.sqliteUtil.dbChanges(mDB.database);\n await this.executeStatementsProcess(mDB, statements);\n this.sqliteUtil.setVersion(mDB.database, versionKey);\n // set Foreign Keys On\n this.sqliteUtil.setForeignKeyConstraintsEnabled(mDB.database, true);\n changes = (await this.sqliteUtil.dbChanges(mDB.database)) - initChanges;\n }\n catch (err) {\n return Promise.reject(`onUpgrade: ${err}`);\n }\n }\n }\n return Promise.resolve(changes);\n }\n /**\n * ExecuteStatementProcess\n * @param mDB\n * @param statements\n */\n async executeStatementsProcess(mDB, statements) {\n try {\n this.sqliteUtil.beginTransaction(mDB.database, true);\n mDB.setIsTransActive(true);\n for (const statement of statements) {\n this.sqliteUtil.execute(mDB.database, statement, false, true);\n }\n this.sqliteUtil.commitTransaction(mDB.database, true);\n mDB.setIsTransActive(false);\n return Promise.resolve();\n }\n catch (err) {\n this.sqliteUtil.rollbackTransaction(mDB.database, true);\n mDB.setIsTransActive(false);\n return Promise.reject(`ExecuteStatementProcess: ${err}`);\n }\n }\n}\nexports.UtilsUpgrade = UtilsUpgrade;\n//# sourceMappingURL=utilsUpgrade.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Database = void 0;\nconst GlobalSQLite_1 = require(\"../GlobalSQLite\");\nconst exportToJson_1 = require(\"./ImportExportJson/exportToJson\");\nconst importFromJson_1 = require(\"./ImportExportJson/importFromJson\");\nconst utilsJson_1 = require(\"./ImportExportJson/utilsJson\");\nconst utilsJsonEncryption_1 = require(\"./ImportExportJson/utilsJsonEncryption\");\nconst UtilsSQL92Compatibility_1 = require(\"./UtilsSQL92Compatibility\");\nconst utilsEncryption_1 = require(\"./utilsEncryption\");\nconst utilsFile_1 = require(\"./utilsFile\");\nconst utilsSQLite_1 = require(\"./utilsSQLite\");\nconst utilsSecret_1 = require(\"./utilsSecret\");\nconst utilsUpgrade_1 = require(\"./utilsUpgrade\");\nclass Database {\n constructor(dbName, encrypted, mode, version, isEncryption, readonly, upgDict, globalUtil) {\n this.jsonEncryptUtil = new utilsJsonEncryption_1.UtilsJsonEncryption();\n this.fileUtil = new utilsFile_1.UtilsFile();\n this.sqliteUtil = new utilsSQLite_1.UtilsSQLite();\n this.jsonUtil = new utilsJson_1.UtilsJson();\n this.globalUtil = new GlobalSQLite_1.GlobalSQLite();\n this.encryptionUtil = new utilsEncryption_1.UtilsEncryption();\n this.secretUtil = new utilsSecret_1.UtilsSecret();\n this.upgradeUtil = new utilsUpgrade_1.UtilsUpgrade();\n this.importFromJsonUtil = new importFromJson_1.ImportFromJson();\n this.exportToJsonUtil = new exportToJson_1.ExportToJson();\n this.upgradeVersionDict = {};\n this.sql92Utils = new UtilsSQL92Compatibility_1.UtilsSQL92Compatibility();\n this.dbName = dbName;\n this._encrypted = encrypted;\n this._mode = mode;\n this._isEncryption = isEncryption;\n this.version = version;\n this.readonly = readonly;\n this.upgradeVersionDict = upgDict;\n this.pathDB = this.fileUtil.getFilePath(dbName);\n this._isDbOpen = false;\n this.isTransactionActive = false;\n this.globalUtil = globalUtil ? globalUtil : new GlobalSQLite_1.GlobalSQLite();\n if (this.pathDB.length === 0)\n throw new Error('Could not generate a path to ' + dbName);\n console.log(`&&& Databases path: ${this.pathDB}`);\n }\n /**\n * IsDBOpen\n * return the database status\n * @param options: capSQLiteOptions\n * @returns boolean\n * @since 0.0.1\n */\n isDBOpen() {\n return this._isDbOpen;\n }\n /**\n * Open\n * open the better-sqlite3 database\n * @returns Promise<boolean>\n */\n async open() {\n this._isDbOpen = false;\n let password = '';\n try {\n if (this._encrypted && (this._mode === 'secret' || this._mode === 'encryption' || this._mode === 'decryption')) {\n password = this.secretUtil.getPassphrase();\n if (password.length <= 0) {\n password = this.globalUtil.secret;\n }\n }\n if (this._mode === 'encryption') {\n await this.encryptionUtil.encryptDatabase(this.pathDB, password);\n }\n if (this._mode === 'decryption') {\n await this.encryptionUtil.decryptDatabase(this.pathDB, password);\n password = '';\n }\n this.database = this.sqliteUtil.openOrCreateDatabase(this.pathDB, password, this.readonly);\n this._isDbOpen = true;\n if (!this.readonly) {\n const curVersion = this.sqliteUtil.getVersion(this.database);\n if (this.version > curVersion && Object.keys(this.upgradeVersionDict).length > 0) {\n try {\n await this.fileUtil.copyFileName(this.dbName, `backup-${this.dbName}`);\n // execute the upgrade flow process\n await this.upgradeUtil.onUpgrade(this, this.upgradeVersionDict, curVersion, this.version);\n // delete the backup database\n await this.fileUtil.deleteFileName(`backup-${this.dbName}`);\n }\n catch (err) {\n // restore the database from backup\n try {\n await this.fileUtil.restoreFileName(this.dbName, 'backup');\n }\n catch (err) {\n throw new Error(`Open: ${err}`);\n }\n }\n }\n }\n return;\n }\n catch (err) {\n if (this._isDbOpen)\n this.sqliteUtil.closeDB(this.database);\n throw new Error(`Open: ${err}`);\n }\n }\n /**\n * Close\n * close better-sqlite3 database\n * @returns Promise<boolean>\n */\n dbClose() {\n try {\n this.ensureDatabaseIsOpen();\n this.sqliteUtil.closeDB(this.database);\n }\n catch (err) {\n throw new Error(`Close failed: ${this.dbName} ${err}`);\n }\n finally {\n this._isDbOpen = false;\n }\n return;\n }\n /**\n * IsTransActive\n * Is Database Transaction Active\n * @returns\n */\n isTransActive() {\n return this.isTransactionActive;\n }\n /**\n * SetIsTransActive\n * Set the Database Transaction to Active\n * @returns\n */\n setIsTransActive(value) {\n this.isTransactionActive = value;\n }\n /**\n * DbBeginTransaction\n * Database Begin Transaction\n * @returns\n */\n dbBeginTransaction() {\n try {\n this.ensureDatabaseIsOpen();\n this.sqliteUtil.beginTransaction(this.database, true);\n this.setIsTransActive(true);\n return 0;\n }\n catch (err) {\n throw new Error(`DbBeginTransaction: ${err}`);\n }\n }\n /**\n * DbCommitTransaction\n * Database Commit Transaction\n * @returns\n */\n dbCommitTransaction() {\n try {\n this.ensureDatabaseIsOpen();\n this.sqliteUtil.commitTransaction(this.database, true);\n this.setIsTransActive(false);\n return 0;\n }\n catch (err) {\n throw new Error(`DbCommitTransaction: ${err}`);\n }\n }\n /**\n * DbRollbackTransaction\n * Database Rollback Transaction\n * @returns\n */\n dbRollbackTransaction() {\n try {\n this.ensureDatabaseIsOpen();\n this.sqliteUtil.rollbackTransaction(this.database, true);\n this.setIsTransActive(false);\n return 0;\n }\n catch (err) {\n throw new Error(`DbCommitTransaction: ${err}`);\n }\n }\n /**\n * ChangeSecret\n * open the @journeyapps/sqlcipher sqlite3 database\n * @returns Promise<void>\n */\n async changeSecret() {\n try {\n if (this._mode === 'encryption') {\n // change the password\n const oPassword = this.globalUtil.secret;\n const nPassword = this.globalUtil.newsecret;\n this.sqliteUtil.changePassword(this.pathDB, oPassword, nPassword);\n }\n return;\n }\n catch (err) {\n throw new Error(`Change secret: ${err}`);\n }\n }\n /**\n * GetVersion\n * get the database version\n * @returns Promise<number>\n */\n getVersion() {\n this.ensureDatabaseIsOpen();\n try {\n const currentVersion = this.sqliteUtil.getVersion(this.database);\n return currentVersion;\n }\n catch (err) {\n if (this._isDbOpen)\n this.sqliteUtil.closeDB(this.database);\n throw new Error(`getVersion: ${err}`);\n }\n }\n /**\n * DeleteDB\n * delete a database\n * @param dbName: string\n * @returns Promise<boolean>\n */\n async deleteDB(dbName) {\n // test if file exists\n const isExists = this.fileUtil.isFileExists(dbName);\n if (isExists && !this._isDbOpen) {\n // open the database\n try {\n await this.open();\n }\n catch (err) {\n throw new Error(`DeleteDB: ${err}`);\n }\n }\n // close the database\n try {\n this.dbClose();\n }\n catch (err) {\n throw new Error('DeleteDB: Close failed');\n }\n // delete the database\n if (isExists) {\n try {\n await this.fileUtil.deleteFileName(dbName);\n }\n catch (err) {\n throw new Error(`DeleteDB: deleteFile ${dbName} failed ${err}`);\n }\n }\n return;\n }\n /**\n * IsTableExists\n * @param tableName\n * @returns\n */\n isTableExists(tableName) {\n this.ensureDatabaseIsOpen();\n const isOpen = this._isDbOpen;\n try {\n const tableExistsResult = this.jsonUtil.isTableExists(this.database, isOpen, tableName);\n return tableExistsResult;\n }\n catch (err) {\n throw new Error(`IsTableExists: ${err}`);\n }\n }\n /**\n * CreateSyncTable\n * create the synchronization table\n * @returns Promise<number>\n */\n createSyncTable() {\n this.ensureDatabaseIsOpen();\n let changes = -1;\n const isOpen = this._isDbOpen;\n // check if the table has already being created\n try {\n const retB = this.jsonUtil.isTableExists(this.database, isOpen, 'sync_table');\n if (!retB) {\n const isLastModified = this.sqliteUtil.isLastModified(this.database, isOpen);\n const isSqlDeleted = this.sqliteUtil.isSqlDeleted(this.database, isOpen);\n if (isLastModified && isSqlDeleted) {\n const date = Math.round(new Date().getTime() / 1000);\n let stmts = `\n CREATE TABLE IF NOT EXISTS sync_table (\n id INTEGER PRIMARY KEY NOT NULL,\n sync_date INTEGER\n );`;\n stmts += `INSERT INTO sync_table (sync_date) VALUES (\n ${date});`;\n const results = this.sqliteUtil.execute(this.database, stmts, false, true);\n changes = results.changes;\n if (results.changes < 0) {\n throw new Error(`CreateSyncTable: failed changes < 0`);\n }\n }\n else {\n throw new Error('No last_modified/sql_deleted columns in tables');\n }\n }\n else {\n changes = 0;\n }\n return changes;\n }\n catch (err) {\n throw new Error(`CreateSyncTable: ${err}`);\n }\n }\n /**\n * SetSyncDate\n * store the synchronization date\n * @param syncDate: string\n * @returns Promise<{result: boolean, message: string}>\n */\n setSyncDate(syncDate) {\n this.ensureDatabaseIsOpen();\n try {\n const isTable = this.jsonUtil.isTableExists(this.database, this._isDbOpen, 'sync_table');\n if (!isTable) {\n throw new Error('No sync_table available');\n }\n const syncDateUnixTimestamp = Math.round(new Date(syncDate).getTime() / 1000);\n let stmt = `UPDATE sync_table SET sync_date = `;\n stmt += `${syncDateUnixTimestamp} WHERE id = 1;`;\n const results = this.sqliteUtil.execute(this.database, stmt, false, true);\n if (results.changes < 0) {\n return { result: false, message: 'setSyncDate failed' };\n }\n else {\n return { result: true };\n }\n }\n catch (err) {\n return { result: false, message: `setSyncDate failed: ${err}` };\n }\n }\n /**\n * GetSyncDate\n * store the synchronization date\n * @returns Promise<{syncDate: number, message: string}>\n */\n getSyncDate() {\n this.ensureDatabaseIsOpen();\n try {\n const isTable = this.jsonUtil.isTableExists(this.database, this._isDbOpen, 'sync_table');\n if (!isTable) {\n throw new Error('No sync_table available');\n }\n const syncDate = this.exportToJsonUtil.getSyncDate(this.database);\n if (syncDate > 0) {\n return { syncDate };\n }\n else {\n return { syncDate: 0, message: `setSyncDate failed` };\n }\n }\n catch (err) {\n return { syncDate: 0, message: `setSyncDate failed: ${err}` };\n }\n }\n /**\n * ExecuteSQL\n * execute raw sql statements store in a string\n * @param sql: string\n * @param transaction: boolean\n * @param isSQL92: boolean\n * @returns Promise<number>\n */\n executeSQL(sql, transaction, isSQL92) {\n this.ensureDatabaseIsOpen();\n try {\n if (transaction) {\n const mode = this.sqliteUtil.getJournalMode(this.database);\n console.log(`$$$ in executeSQL journal_mode: ${mode} $$$`);\n this.sqliteUtil.beginTransaction(this.database, this._isDbOpen);\n }\n const results = this.sqliteUtil.execute(this.database, sql, false, isSQL92);\n if (results.changes < 0) {\n throw new Error('ExecuteSQL: changes < 0');\n }\n if (transaction) {\n this.sqliteUtil.commitTransaction(this.database, this._isDbOpen);\n }\n return results.changes;\n }\n catch (executeError) {\n let message = `${executeError}`;\n try {\n if (transaction) {\n this.sqliteUtil.rollbackTransaction(this.database, this._isDbOpen);\n }\n }\n catch (rollbackErr) {\n message += ` : ${rollbackErr}`;\n }\n throw new Error(`ExecuteSQL: ${message}`);\n }\n }\n /**\n * SelectSQL\n * execute a sql query with/without binding values\n * @param sql: string\n * @param values: string[]\n * @param isSQL92: boolean\n * @returns Promise<any[]>\n */\n selectSQL(sql, values, isSQL92) {\n this.ensureDatabaseIsOpen();\n try {\n const selectResult = this.sqliteUtil.queryAll(this.database, sql, values, isSQL92);\n return selectResult;\n }\n catch (err) {\n throw new Error(`SelectSQL: ${err}`);\n }\n }\n /**\n * runSQL\n * execute a raw sql statement with/without binding values\n * @param statement: string\n * @param values: string[]\n * @param transaction: boolean\n * @param returnMode: string\n * @param isSQL92: boolean,\n * @returns Promise<{changes:number, lastId:number}>\n */\n runSQL(statement, values, transaction, returnMode, isSQL92) {\n this.ensureDatabaseIsOpen();\n try {\n // start a transaction\n if (transaction) {\n const mode = this.sqliteUtil.getJournalMode(this.database);\n console.log(`$$$ in runSQL journal_mode: ${mode} $$$`);\n this.sqliteUtil.beginTransaction(this.database, this._isDbOpen);\n }\n }\n catch (err) {\n throw new Error(`RunSQL: ${err}`);\n }\n try {\n let nStmt = statement;\n if (!isSQL92 && values.length === 0) {\n nStmt = this.sql92Utils.compatibleSQL92(statement);\n }\n const results = this.sqliteUtil.prepareRun(this.database, nStmt, values, false, returnMode);\n if (results.lastId < 0) {\n if (transaction) {\n this.sqliteUtil.rollbackTransaction(this.database, this._isDbOpen);\n }\n throw new Error(`RunSQL: return LastId < 0`);\n }\n if (transaction) {\n this.sqliteUtil.commitTransaction(this.database, this._isDbOpen);\n }\n return results;\n }\n catch (err) {\n if (transaction) {\n this.sqliteUtil.rollbackTransaction(this.database, this._isDbOpen);\n }\n throw new Error(`RunSQL: ${err}`);\n }\n }\n /**\n * ExecSet\n * execute a set of raw sql statements with/without binding values\n * @param set: any[]\n * @param transaction: boolean,\n * @param returnMode: string,\n * @param isSQL92: boolean,\n * @returns Promise<{changes:number, lastId:number}>\n */\n execSet(set, transaction, returnMode, isSQL92) {\n this.ensureDatabaseIsOpen();\n let results = { changes: 0, lastId: -1 };\n try {\n // start a transaction\n if (transaction) {\n const mode = this.sqliteUtil.getJournalMode(this.database);\n console.log(`$$$ in execSet journal_mode: ${mode} $$$`);\n this.sqliteUtil.beginTransaction(this.database, this._isDbOpen);\n }\n }\n catch (err) {\n throw new Error(`ExecSet: ${err}`);\n }\n try {\n results = this.sqliteUtil.executeSet(this.database, set, false, returnMode, isSQL92);\n if (transaction) {\n this.sqliteUtil.commitTransaction(this.database, this._isDbOpen);\n }\n return results;\n }\n catch (err) {\n const message = err;\n try {\n if (transaction) {\n this.sqliteUtil.rollbackTransaction(this.database, this._isDbOpen);\n }\n }\n catch (err) {\n throw new Error(`ExecSet: ${message}: ` + `${err}`);\n }\n }\n }\n deleteExportedRows() {\n this.ensureDatabaseIsOpen();\n try {\n this.exportToJsonUtil.delExportedRows(this.database);\n return;\n }\n catch (err) {\n throw new Error(`DeleteExportedRows: ${err}`);\n }\n }\n /**\n * GetTableList\n * get the table's list\n * @returns\n */\n getTableList() {\n this.ensureDatabaseIsOpen();\n try {\n const tableNames = this.sqliteUtil.getTablesNames(this.database);\n return tableNames;\n }\n catch (err) {\n throw new Error(`GetTableList: ${err}`);\n }\n }\n importJson(jsonData) {\n let changes = 0;\n this.ensureDatabaseIsOpen();\n try {\n // set Foreign Keys Off\n this.sqliteUtil.setForeignKeyConstraintsEnabled(this.database, false);\n if (jsonData.tables && jsonData.tables.length > 0) {\n // create the database schema\n changes = this.importFromJsonUtil.createDatabaseSchema(this, jsonData);\n if (changes != -1) {\n // create the tables data\n changes += this.importFromJsonUtil.createTablesData(this, jsonData);\n }\n }\n if (jsonData.views && jsonData.views.length > 0) {\n // create the views\n changes += this.importFromJsonUtil.createViews(this, jsonData);\n }\n // set Foreign Keys On\n this.sqliteUtil.setForeignKeyConstraintsEnabled(this.database, true);\n return changes;\n }\n catch (err) {\n throw new Error(`ImportJson: ${err}`);\n }\n }\n exportJson(mode, encrypted) {\n const inJson = {};\n inJson.database = this.dbName.slice(0, -9);\n inJson.version = this.version;\n inJson.encrypted = false;\n inJson.mode = mode;\n this.ensureDatabaseIsOpen();\n try {\n const isTable = this.jsonUtil.isTableExists(this.database, this._isDbOpen, 'sync_table');\n if (isTable) {\n this.exportToJsonUtil.setLastExportDate(this.database, new Date().toISOString());\n }\n else {\n if (inJson.mode === 'partial') {\n throw new Error(`No sync_table available`);\n }\n }\n let jsonResult = this.exportToJsonUtil.createExportObject(this.database, inJson);\n const keys = Object.keys(jsonResult);\n if (keys.length === 0) {\n const msg = `ExportJson: return Object is empty ` + `No data to synchronize`;\n throw new Error(msg);\n }\n let isValid = this.jsonUtil.isJsonSQLite(jsonResult);\n if (this._encrypted && this._isEncryption && encrypted) {\n jsonResult.overwrite = true;\n jsonResult.encrypted = true;\n const base64Str = this.jsonEncryptUtil.encryptJSONObject(jsonResult);\n jsonResult = {};\n jsonResult.expData = base64Str;\n isValid = true;\n }\n if (isValid) {\n return jsonResult;\n }\n else {\n throw new Error(`ExportJson: retJson not valid`);\n }\n }\n catch (err) {\n throw new Error(`ExportJson: ${err}`);\n }\n }\n /**\n * Throws an error if `this._isDbOpen` is `false`.\n */\n ensureDatabaseIsOpen() {\n if (!this._isDbOpen || !this.database) {\n throw new Error(`getVersion: Database ${this.dbName} is not open yet. You should open it first.`);\n }\n }\n}\nexports.Database = Database;\n//# sourceMappingURL=Database.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.CapacitorSQLite = void 0;\nconst GlobalSQLite_1 = require(\"./GlobalSQLite\");\nconst Database_1 = require(\"./electron-utils/Database\");\nconst utilsJson_1 = require(\"./electron-utils/ImportExportJson/utilsJson\");\nconst utilsJsonEncryption_1 = require(\"./electron-utils/ImportExportJson/utilsJsonEncryption\");\nconst utilsFile_1 = require(\"./electron-utils/utilsFile\");\nconst utilsSQLite_1 = require(\"./electron-utils/utilsSQLite\");\nconst utilsSecret_1 = require(\"./electron-utils/utilsSecret\");\nclass CapacitorSQLite {\n constructor() {\n this.versionUpgrades = {};\n this.databases = {};\n this.fileUtil = new utilsFile_1.UtilsFile();\n this.sqliteUtil = new utilsSQLite_1.UtilsSQLite();\n this.jsonUtil = new utilsJson_1.UtilsJson();\n this.jsonEncryptUtil = new utilsJsonEncryption_1.UtilsJsonEncryption();\n this.secretUtil = new utilsSecret_1.UtilsSecret();\n this.globalUtil = new GlobalSQLite_1.GlobalSQLite();\n this.isEncryption = this.fileUtil.getIsEncryption();\n }\n async createConnection(options) {\n const optionKeys = Object.keys(options);\n if (!optionKeys.includes('database')) {\n throw new Error('Must provide a database name');\n }\n const dbName = options.database;\n const version = options.version ? options.version : 1;\n let encrypted = options.encrypted ? options.encrypted : false;\n if (!this.isEncryption && encrypted) {\n throw new Error('Must set electronIsEncryption = true in capacitor.config.ts');\n }\n let inMode = encrypted && options.mode === 'secret'\n ? 'secret'\n : encrypted && options.mode === 'encryption'\n ? 'encryption'\n : encrypted && options.mode === 'decryption'\n ? 'decryption'\n : 'no-encryption';\n if (!this.isEncryption) {\n encrypted = false;\n inMode = 'no-encryption';\n }\n const readonly = options.readonly ? options.readonly : false;\n let upgrades = {};\n const versionUpgradeKeys = Object.keys(this.versionUpgrades);\n if (versionUpgradeKeys.length !== 0 && versionUpgradeKeys.includes(dbName)) {\n upgrades = this.versionUpgrades[dbName];\n }\n const connName = readonly ? 'RO_' + dbName : 'RW_' + dbName;\n const databaseConnection = new Database_1.Database(dbName + 'SQLite.db', encrypted, inMode, version, this.isEncryption, readonly, upgrades, this.globalUtil);\n this.databases[connName] = databaseConnection;\n return;\n }\n async closeConnection(options) {\n const dbName = this.getOptionValue(options, 'database');\n const readonly = options.readonly ? options.readonly : false;\n const connName = readonly ? 'RO_' + dbName : 'RW_' + dbName;\n const database = this.getDatabaseConnectionOrThrowError(connName);\n try {\n if (database.isDBOpen()) {\n // close the database\n database.dbClose();\n }\n }\n catch (err) {\n throw new Error(`CloseConnection command failed: close ${dbName} failed ${err.message}`);\n }\n finally {\n // remove the connection from dictionary\n delete this.databases[connName];\n }\n return;\n }\n async echo(options) {\n const echoValue = this.getOptionValue(options, 'value');\n const echoResult = {};\n echoResult.value = echoValue;\n return echoResult;\n }\n async open(options) {\n const dbName = this.getOptionValue(options, 'database');\n const readonly = options.readonly ? options.readonly : false;\n const connName = readonly ? 'RO_' + dbName : 'RW_' + dbName;\n const database = this.getDatabaseConnectionOrThrowError(connName);\n try {\n await database.open();\n return;\n }\n catch (err) {\n throw new Error(`Open: ${err}`);\n }\n }\n async close(options) {\n const dbName = this.getOptionValue(options, 'database');\n const readonly = options.readonly ? options.readonly : false;\n const connName = readonly ? 'RO_' + dbName : 'RW_' + dbName;\n const database = this.getDatabaseConnectionOrThrowError(connName);\n if (database.isDBOpen()) {\n try {\n database.dbClose();\n return;\n }\n catch (err) {\n throw new Error(`Close: ${err}`);\n }\n }\n else {\n const msg = `Database ${dbName} not opened`;\n throw new Error(`Close: ${msg}`);\n }\n }\n async beginTransaction(options) {\n const dbName = this.getOptionValue(options, 'database');\n const connName = 'RW_' + dbName;\n const database = this.getDatabaseConnectionOrThrowError(connName);\n if (database.isDBOpen()) {\n try {\n const changes = database.dbBeginTransaction();\n return { changes: { changes: changes } };\n }\n catch (err) {\n throw new Error(`BeginTransaction: ${err}`);\n }\n }\n else {\n const msg = `Database ${dbName} not opened`;\n throw new Error(`BeginTransaction: ${msg}`);\n }\n }\n async commitTransaction(options) {\n const dbName = this.getOptionValue(options, 'database');\n const connName = 'RW_' + dbName;\n const database = this.getDatabaseConnectionOrThrowError(connName);\n if (database.isDBOpen()) {\n try {\n const changes = database.dbCommitTransaction();\n return { changes: { changes: changes } };\n }\n catch (err) {\n throw new Error(`CommitTransaction: ${err}`);\n }\n }\n else {\n const msg = `Database ${dbName} not opened`;\n throw new Error(`CommitTransaction: ${msg}`);\n }\n }\n async rollbackTransaction(options) {\n const dbName = this.getOptionValue(options, 'database');\n const connName = 'RW_' + dbName;\n const database = this.getDatabaseConnectionOrThrowError(connName);\n if (database.isDBOpen()) {\n try {\n const changes = database.dbRollbackTransaction();\n return { changes: { changes: changes } };\n }\n catch (err) {\n throw new Error(`RollbackTransaction: ${err}`);\n }\n }\n else {\n const msg = `Database ${dbName} not opened`;\n throw new Error(`RollbackTransaction: ${msg}`);\n }\n }\n async isTransactionActive(options) {\n const dbName = this.getOptionValue(options, 'database');\n const connName = 'RW_' + dbName;\n const database = this.getDatabaseConnectionOrThrowError(connName);\n if (database.isDBOpen()) {\n try {\n const ret = database.isTransActive();\n return { result: ret };\n }\n catch (err) {\n throw new Error(`IsTransactionActive: ${err}`);\n }\n }\n else {\n const msg = `Database ${dbName} not opened`;\n throw new Error(`IsTransactionActive: ${msg}`);\n }\n }\n async getVersion(options) {\n const dbName = this.getOptionValue(options, 'database');\n const readonly = options.readonly ? options.readonly : false;\n const connName = readonly ? 'RO_' + dbName : 'RW_' + dbName;\n const database = this.getDatabaseConnectionOrThrowError(connName);\n if (database.isDBOpen()) {\n try {\n const version = await database.getVersion();\n const versionResult = {};\n versionResult.version = version;\n return versionResult;\n }\n catch (err) {\n throw new Error(`GetVersion: ${err}`);\n }\n }\n else {\n const msg = `Database ${dbName} not opened`;\n throw new Error(`GetVersion: ${msg}`);\n }\n }\n async getTableList(options) {\n const dbName = this.getOptionValue(options, 'database');\n const readonly = options.readonly ? options.readonly : false;\n const connName = readonly ? 'RO_' + dbName : 'RW_' + dbName;\n const database = this.getDatabaseConnectionOrThrowError(connName);\n if (database.isDBOpen()) {\n try {\n const tableList = await database.getTableList();\n const tableListResult = {};\n tableListResult.values = tableList;\n return tableListResult;\n }\n catch (err) {\n throw new Error(`GetTableList: ${err}`);\n }\n }\n else {\n const msg = `Database ${dbName} not opened`;\n throw new Error(`GetTableList: ${msg}`);\n }\n }\n async execute(options) {\n const dbName = this.getOptionValue(options, 'database');\n const statements = this.getOptionValue(options, 'statements');\n const transaction = this.getOptionValue(options, 'transaction', true);\n const readonly = options.readonly ? options.readonly : false;\n const isSQL92 = Object.keys(options).includes('isSQL92') ? options.isSQL92 : true;\n const connName = 'RW_' + dbName;\n const database = this.getDatabaseConnectionOrThrowError(connName);\n if (database.isDBOpen()) {\n if (readonly) {\n const msg = 'not allowed in read-only mode ';\n throw new Error(`Execute: ${msg}`);\n }\n try {\n const executeResult = database.executeSQL(statements, transaction, isSQL92);\n if (executeResult < 0) {\n throw new Error('Execute changes < 0');\n }\n else {\n return { changes: { changes: executeResult } };\n }\n }\n catch (err) {\n throw new Error(`Execute: ${err}`);\n }\n }\n else {\n const msg = `Database ${dbName} not opened`;\n throw new Error(`Execute: ${msg}`);\n }\n }\n async executeSet(options) {\n const dbName = this.getOptionValue(options, 'database');\n const setOfStatements = this.getOptionValue(options, 'set');\n const transaction = this.getOptionValue(options, 'transaction', true);\n const readonly = options.readonly ? options.readonly : false;\n const returnMode = Object.keys(options).includes('returnMode') ? options.returnMode : 'no';\n const isSQL92 = Object.keys(options).includes('isSQL92') ? options.isSQL92 : true;\n const connName = 'RW_' + dbName;\n const database = this.getDatabaseConnectionOrThrowError(connName);\n for (const sStmt of setOfStatements) {\n if (!('statement' in sStmt) || !('values' in sStmt)) {\n throw new Error('ExecuteSet: Must provide a set as ' + 'Array of {statement,values}');\n }\n }\n if (database.isDBOpen()) {\n if (readonly) {\n const msg = 'not allowed in read-only mode ';\n throw new Error(`ExecuteSet failed: ${msg}`);\n }\n try {\n const execSetResult = database.execSet(setOfStatements, transaction, returnMode, isSQL92);\n if (execSetResult.lastId < 0) {\n throw new Error(`ExecuteSet failed changes <0`);\n }\n else {\n return { changes: execSetResult };\n }\n }\n catch (err) {\n throw new Error(`ExecuteSet failed: ${err}`);\n }\n }\n else {\n const msg = `Database ${dbName} not opened`;\n throw new Error(`ExecuteSet failed: ${msg}`);\n }\n }\n async run(options) {\n const dbName = this.getOptionValue(options, 'database');\n const statement = this.getOptionValue(options, 'statement');\n const values = this.getOptionValue(options, 'values', []);\n const transaction = this.getOptionValue(options, 'transaction', true);\n const readonly = options.readonly ? options.readonly : false;\n const returnMode = options.returnMode ? options.returnMode : 'no';\n const isSQL92 = Object.keys(options).includes('isSQL92') ? options.isSQL92 : true;\n const connName = 'RW_' + dbName;\n const database = this.getDatabaseConnectionOrThrowError(connName);\n if (database.isDBOpen()) {\n if (readonly) {\n const msg = 'not allowed in read-only mode ';\n throw new Error(`Run failed: ${msg}`);\n }\n try {\n const runResult = database.runSQL(statement, values, transaction, returnMode, isSQL92);\n return { changes: runResult };\n }\n catch (err) {\n throw new Error(`RUN failed: ${err} `);\n }\n }\n else {\n const msg = `Database ${dbName} not opened`;\n throw new Error(`Run failed: ${msg}`);\n }\n }\n async query(options) {\n const dbName = this.getOptionValue(options, 'database');\n const statement = this.getOptionValue(options, 'statement');\n const values = this.getOptionValue(options, 'values', []);\n if (statement.length === 0) {\n throw new Error('Query: Statement may not be an empty string.');\n }\n const readonly = options.readonly ? options.readonly : false;\n const isSQL92 = Object.keys(options).includes('isSQL92') ? options.isSQL92 : true;\n const connName = readonly ? 'RO_' + dbName : 'RW_' + dbName;\n const database = this.getDatabaseConnectionOrThrowError(connName);\n if (database.isDBOpen()) {\n try {\n const queryResult = database.selectSQL(statement, values, isSQL92);\n return { values: queryResult };\n }\n catch (err) {\n throw new Error(`Query: ${err}`);\n }\n }\n else {\n const msg = `Database ${dbName} not opened`;\n throw new Error(`Query: ${msg}`);\n }\n }\n async isDBExists(options) {\n const dbName = this.getOptionValue(options, 'database');\n const readonly = options.readonly ? options.readonly : false;\n const connName = readonly ? 'RO_' + dbName : 'RW_' + dbName;\n this.getDatabaseConnectionOrThrowError(connName);\n // if (database.isDBOpen()) {\n const isExists = this.fileUtil.isFileExists(dbName + 'SQLite.db');\n return { result: isExists };\n // } else {\n // const msg = `Database ${dbName} not opened`;\n // throw new Error(`isDBExists: ${msg}`);\n // }\n }\n async isDBOpen(options) {\n const dbName = this.getOptionValue(options, 'database');\n const readonly = options.readonly ? options.readonly : false;\n const connName = readonly ? 'RO_' + dbName : 'RW_' + dbName;\n const database = this.getDatabaseConnectionOrThrowError(connName);\n const isOpen = database.isDBOpen();\n return { result: isOpen };\n }\n async isDatabase(options) {\n const dbName = this.getOptionValue(options, 'database');\n const isExists = this.fileUtil.isFileExists(dbName + 'SQLite.db');\n return { result: isExists };\n }\n async isTableExists(options) {\n const dbName = this.getOptionValue(options, 'database');\n const tableName = this.getOptionValue(options, 'table');\n const readonly = options.readonly ? options.readonly : false;\n const connName = readonly ? 'RO_' + dbName : 'RW_' + dbName;\n const database = this.getDatabaseConnectionOrThrowError(connName);\n if (database.isDBOpen()) {\n try {\n const isTableExistsResult = await database.isTableExists(tableName);\n return { result: isTableExistsResult };\n }\n catch (err) {\n throw new Error(`isTableExists: ${err}`);\n }\n }\n else {\n const msg = `Database ${dbName} not opened`;\n throw new Error(`isTableExists: ${msg}`);\n }\n }\n async deleteDatabase(options) {\n const dbName = this.getOptionValue(options, 'database');\n const readonly = options.readonly ? options.readonly : false;\n const connName = 'RW_' + dbName;\n const database = this.getDatabaseConnectionOrThrowError(connName);\n if (readonly) {\n const msg = 'not allowed in read-only mode ';\n throw new Error(`DeleteDatabase failed: ${msg}`);\n }\n try {\n await database.deleteDB(dbName + 'SQLite.db');\n return;\n }\n catch (err) {\n throw new Error(`DeleteDatabase: ${err}`);\n }\n }\n async isJsonValid(options) {\n const jsonString = this.getOptionValue(options, 'jsonstring');\n const jsonObj = JSON.parse(jsonString);\n const isValid = this.jsonUtil.isJsonSQLite(jsonObj);\n if (!isValid) {\n throw new Error('Stringify Json Object not Valid');\n }\n else {\n return { result: true };\n }\n }\n async importFromJson(options) {\n const jsonString = this.getOptionValue(options, 'jsonstring');\n let jsonObj = JSON.parse(jsonString);\n let inMode = 'no-encryption';\n const key = 'expData';\n if (key in jsonObj) {\n // Decrypt the data\n inMode = 'secret';\n jsonObj = this.jsonEncryptUtil.decryptJSONObject(jsonObj.expData);\n }\n const isValid = this.jsonUtil.isJsonSQLite(jsonObj);\n if (!isValid) {\n throw new Error('Must provide a valid JsonSQLite Object');\n }\n const vJsonObj = jsonObj;\n const dbName = `${vJsonObj.database}SQLite.db`;\n const targetDbVersion = vJsonObj.version ?? 1;\n const overwrite = vJsonObj.overwrite ?? false;\n const encrypted = vJsonObj.encrypted ?? false;\n const mode = vJsonObj.mode ?? 'full';\n if (!this.isEncryption && encrypted) {\n throw new Error('Must set electronIsEncryption = true in capacitor.config.ts');\n }\n // Create the database\n const database = new Database_1.Database(dbName, encrypted, inMode, targetDbVersion, this.isEncryption, false, {}, this.globalUtil);\n try {\n if (overwrite && mode === 'full') {\n const isExists = this.fileUtil.isFileExists(dbName);\n if (isExists) {\n await this.fileUtil.deleteFileName(dbName);\n }\n }\n // Open the database\n await database.open();\n const tableList = await database.getTableList();\n if (mode === 'full' && tableList.length > 0) {\n const currentVersion = await database.getVersion();\n if (targetDbVersion < currentVersion) {\n throw new Error(`ImportFromJson: Cannot import a version lower than ${currentVersion}`);\n }\n if (currentVersion === targetDbVersion) {\n return { changes: { changes: 0 } };\n }\n }\n // Import the JsonSQLite Object\n const changes = await database.importJson(vJsonObj);\n // Close the database\n database.dbClose();\n return { changes: { changes: changes } };\n }\n catch (err) {\n throw new Error(`ImportFromJson: ${err}`);\n }\n }\n async exportToJson(options) {\n const dbName = this.getOptionValue(options, 'database');\n const exportMode = this.getOptionValue(options, 'jsonexportmode');\n const readonly = this.getOptionValue(options, 'readonly', false);\n const encrypted = this.getOptionValue(options, 'encrypted', false);\n const connName = readonly ? 'RO_' + dbName : 'RW_' + dbName;\n const database = this.getDatabaseConnectionOrThrowError(connName);\n if (database.isDBOpen()) {\n try {\n const exportJsonResult = database.exportJson(exportMode, encrypted);\n const resultKeys = Object.keys(exportJsonResult);\n if (resultKeys.includes('message')) {\n throw new Error(`exportToJson: ${exportJsonResult.message}`);\n }\n else {\n return { export: exportJsonResult };\n }\n }\n catch (err) {\n throw new Error(`ExportToJson: ${err}`);\n }\n }\n else {\n const msg = `Database ${dbName} not opened`;\n throw new Error(`ExportToJson: ${msg}`);\n }\n }\n async createSyncTable(options) {\n const dbName = this.getOptionValue(options, 'database');\n const readonly = options.readonly ? options.readonly : false;\n const connName = 'RW_' + dbName;\n const database = this.getDatabaseConnectionOrThrowError(connName);\n if (database.isDBOpen()) {\n if (readonly) {\n const msg = 'not allowed in read-only mode ';\n throw new Error(`CreateSyncTable failed: ${msg}`);\n }\n try {\n const createTableSyncResult = await database.createSyncTable();\n return {\n changes: { changes: createTableSyncResult },\n };\n }\n catch (err) {\n throw new Error(`CreateSyncTable: ${err}`);\n }\n }\n else {\n const msg = `Database ${dbName} not opened`;\n throw new Error(`CreateSyncTable: ${msg}`);\n }\n }\n async setSyncDate(options) {\n const dbName = this.getOptionValue(options, 'database');\n const syncDate = this.getOptionValue(options, 'syncdate');\n const readonly = options.readonly ? options.readonly : false;\n const connName = 'RW_' + dbName;\n const database = this.getDatabaseConnectionOrThrowError(connName);\n if (database.isDBOpen()) {\n if (readonly) {\n const msg = 'not allowed in read-only mode ';\n throw new Error(`SetSyncDate failed: ${msg}`);\n }\n try {\n await database.setSyncDate(syncDate);\n return;\n }\n catch (err) {\n throw new Error(`SetSyncDate: ${err}`);\n }\n }\n else {\n const msg = `Database ${dbName} not opened`;\n throw new Error(`SetSyncDate: ${msg}`);\n }\n }\n async getSyncDate(options) {\n const dbName = this.getOptionValue(options, 'database');\n const readonly = options.readonly ? options.readonly : false;\n const connName = readonly ? 'RO_' + dbName : 'RW_' + dbName;\n const database = this.getDatabaseConnectionOrThrowError(connName);\n if (database.isDBOpen()) {\n try {\n const ret = await database.getSyncDate();\n return Promise.resolve(ret);\n }\n catch (err) {\n throw new Error(`GetSyncDate: ${err}`);\n }\n }\n else {\n const msg = `Database ${dbName} not opened`;\n throw new Error(`GetSyncDate: ${msg}`);\n }\n }\n async deleteExportedRows(options) {\n const dbName = this.getOptionValue(options, 'database');\n const readonly = options.readonly ? options.readonly : false;\n const connName = 'RW_' + dbName;\n const database = this.getDatabaseConnectionOrThrowError(connName);\n if (database.isDBOpen()) {\n if (readonly) {\n const msg = 'not allowed in read-only mode ';\n throw new Error(`DeleteExportedRows: ${msg}`);\n }\n try {\n await database.deleteExportedRows();\n return Promise.resolve();\n }\n catch (err) {\n throw new Error(`DeleteExportedRows: ${err}`);\n }\n }\n else {\n const msg = `Database ${dbName} not opened`;\n throw new Error(`DeleteExportedRows: ${msg}`);\n }\n }\n async addUpgradeStatement(options) {\n const dbName = this.getOptionValue(options, 'database');\n const upgrades = this.getOptionValue(options, 'upgrade');\n for (const upgrade of upgrades) {\n const versionUpgradeKeys = Object.keys(upgrade);\n if (!versionUpgradeKeys.includes('toVersion') || !versionUpgradeKeys.includes('statements')) {\n throw new Error('Must provide an upgrade capSQLiteVersionUpgrade Object');\n }\n if (typeof upgrade.toVersion != 'number') {\n throw new Error('upgrade.toVersion must be a number');\n }\n if (this.versionUpgrades[dbName]) {\n this.versionUpgrades[dbName][upgrade.toVersion] = upgrade;\n }\n else {\n const upgradeVersionDict = {};\n upgradeVersionDict[upgrade.toVersion] = upgrade;\n this.versionUpgrades[dbName] = upgradeVersionDict;\n }\n }\n return;\n }\n async copyFromAssets(options) {\n const overwrite = this.getOptionValue(options, 'overwrite', false);\n // check if the assets/database folder exists\n const assetsDbPath = this.fileUtil.getAssetsDatabasesPath();\n const pathExists = this.fileUtil.isPathExists(assetsDbPath);\n if (pathExists) {\n // get the database files\n const dbList = await this.fileUtil.getFileList(assetsDbPath);\n // loop through the database files\n dbList.forEach(async (db) => {\n if (this.fileUtil.getExtName(db) === '.db') {\n // for each copy the file to the Application database folder\n await this.fileUtil.copyFromAssetToDatabase(db, overwrite);\n }\n if (this.fileUtil.getExtName(db) === '.zip') {\n const assetPath = this.fileUtil.getAssetsDatabasesPath();\n await this.fileUtil.unzipDatabase(db, assetPath, overwrite);\n }\n });\n return;\n }\n else {\n throw new Error(`CopyFromAssets: assets/databases folder does not exist:[${assetsDbPath}]`);\n }\n }\n async getFromHTTPRequest(options) {\n const url = this.getOptionValue(options, 'url', '');\n const overwrite = this.getOptionValue(options, 'overwrite', false);\n if (url.length === 0) {\n throw new Error(`getFromHTTPRequest: You must give a database url`);\n }\n const cachePath = this.fileUtil.getCachePath();\n await this.fileUtil.downloadFileFromHTTP(url, cachePath);\n if (this.fileUtil.getExtName(url) === '.zip') {\n const zipName = `${this.fileUtil.getBaseName(url)}.zip`;\n await this.fileUtil.unzipDatabase(zipName, cachePath, overwrite);\n }\n if (overwrite) {\n await this.fileUtil.moveDatabaseFromCache();\n }\n else {\n throw new Error(`getFromHTTPRequest: cannot move file from cache overwrite: ${overwrite}`);\n }\n return;\n }\n async getDatabaseList() {\n // get the database folder\n const pathDatabase = this.fileUtil.getDatabasesPath();\n // get the list of databases\n const files = await this.fileUtil.getFileList(pathDatabase);\n if (files.length > 0) {\n return { values: files };\n }\n else {\n throw new Error(`isTableExists: No databases found in [${pathDatabase}]`);\n }\n }\n async checkConnectionsConsistency(options) {\n const dbNames = this.getOptionValue(options, 'dbNames');\n const openModes = this.getOptionValue(options, 'openModes');\n const checkConsistencyResult = {};\n checkConsistencyResult.result = false;\n const dbConns = [];\n dbNames.forEach((value, i) => {\n dbConns.push(`${openModes[i]}_${value}`);\n });\n try {\n let inConnectionsSet = new Set(Object.keys(this.databases));\n const outConnectionSet = new Set(dbConns);\n if (outConnectionSet.size === 0) {\n await this.resetDbDict(Object.keys(this.databases));\n return Promise.resolve(checkConsistencyResult);\n }\n if (inConnectionsSet.size < outConnectionSet.size) {\n await this.resetDbDict(Object.keys(this.databases));\n return Promise.resolve(checkConsistencyResult);\n }\n if (inConnectionsSet.size > outConnectionSet.size) {\n for (const key of inConnectionsSet) {\n if (!Array.from(outConnectionSet.keys()).includes(key)) {\n const opt = {};\n let readonly = false;\n if (key.substring(0, 3) === 'RO_') {\n readonly = true;\n }\n opt.database = key.substring(3);\n opt.readonly = readonly;\n await this.closeConnection(opt);\n }\n }\n }\n inConnectionsSet = new Set(Object.keys(this.databases));\n if (inConnectionsSet.size === outConnectionSet.size) {\n const symmetricDifferenceSet = await this.symmetricDifference(inConnectionsSet, outConnectionSet);\n if (symmetricDifferenceSet.size === 0) {\n checkConsistencyResult.result = true;\n return checkConsistencyResult;\n }\n else {\n await this.resetDbDict(Object.keys(this.databases));\n return checkConsistencyResult;\n }\n }\n else {\n await this.resetDbDict(Object.keys(this.databases));\n return checkConsistencyResult;\n }\n }\n catch (err) {\n throw new Error(`CheckConnectionsConsistency: ${err}`);\n }\n }\n async isSecretStored() {\n if (!this.isEncryption) {\n throw new Error(`isSecretStored: Not available electronIsEncryption = false in capacitor.config.ts`);\n }\n try {\n const isStored = this.secretUtil.isSecretStored();\n return { result: isStored };\n }\n catch (err) {\n throw new Error(`isSecretStored: ${err}`);\n }\n }\n async isPassphraseValid(options) {\n if (!this.isEncryption) {\n throw new Error(`isPassphraseValid: Not available electronIsEncryption = false in capacitor.config.ts`);\n }\n const passphrase = options.passphrase ? options.passphrase : '';\n if (passphrase.length <= 0) {\n throw new Error(`isPassphraseValid: You must give a passphrase`);\n }\n try {\n const isValid = this.secretUtil.isPassphraseValid(passphrase);\n return { result: isValid };\n }\n catch (err) {\n throw new Error(`isPassphraseValid: ${err}`);\n }\n }\n async setEncryptionSecret(options) {\n const isEncrypt = this.fileUtil.getIsEncryption();\n if (!isEncrypt) {\n throw new Error(`setEncryptionSecret: Not available electronIsEncryption = false in capacitor.config.ts`);\n }\n const passphrase = options.passphrase ? options.passphrase : '';\n if (passphrase.length <= 0) {\n throw new Error(`setEncryptionSecret: You must give a passphrase`);\n }\n try {\n // check if already exists\n const isStored = this.secretUtil.isSecretStored();\n if (isStored) {\n throw new Error(`setEncryptionSecret: passphrase already in store`);\n }\n await this.closeAllConnections();\n this.secretUtil.setEncryptSecret(passphrase);\n return;\n }\n catch (err) {\n throw new Error(`setEncryptionSecret: ${err}`);\n }\n }\n async changeEncryptionSecret(options) {\n const isEncrypt = this.fileUtil.getIsEncryption();\n if (!isEncrypt) {\n throw new Error(`changeEncryptionSecret: Not available electronIsEncryption = false in capacitor.config.ts`);\n }\n const oldsecret = this.secretUtil.getPassphrase();\n const oldpassphrase = options.oldpassphrase ? options.oldpassphrase : '';\n if (oldpassphrase.length <= 0) {\n throw new Error(`changeEncryptionSecret: You must give the oldpassphrase`);\n }\n if (oldpassphrase !== oldsecret) {\n throw new Error(`changeEncryptionSecret: the given oldpassphrase is wrong`);\n }\n const passphrase = options.passphrase ? options.passphrase : '';\n if (passphrase.length <= 0) {\n throw new Error(`changetEncryptionSecret: You must give a passphrase`);\n }\n try {\n await this.closeAllConnections();\n this.secretUtil.changeEncryptSecret(oldpassphrase, passphrase);\n return;\n }\n catch (err) {\n throw new Error(`changetEncryptionSecret: ${err}`);\n }\n }\n async clearEncryptionSecret() {\n const isEncrypt = this.fileUtil.getIsEncryption();\n if (!isEncrypt) {\n throw new Error(`clearEncryptionSecret: Not available electronIsEncryption = false in capacitor.config.ts`);\n }\n if (this.globalUtil == null) {\n throw new Error(`clearEncryptionSecret: No available globalUtil`);\n }\n try {\n await this.closeAllConnections();\n this.secretUtil.clearEncryptSecret();\n return;\n }\n catch (err) {\n throw new Error(`clearEncryptionSecret: ${err}`);\n }\n }\n async isInConfigEncryption() {\n return Promise.resolve({ result: this.isEncryption });\n }\n async isDatabaseEncrypted(options) {\n const dbName = this.getOptionValue(options, 'database');\n try {\n const isEncrypt = await this.sqliteUtil.isDatabaseEncrypted(dbName + 'SQLite.db');\n return { result: isEncrypt };\n }\n catch (err) {\n throw new Error(`isDatabaseEncrypted: ${err}`);\n }\n }\n async checkEncryptionSecret(options) {\n const isEncrypt = this.fileUtil.getIsEncryption();\n if (!isEncrypt) {\n throw new Error(`checkEncryptionSecret: Not available electronIsEncryption = false in capacitor.config.ts`);\n }\n const passphrase = options.passphrase ? options.passphrase : '';\n if (passphrase.length <= 0) {\n throw new Error(`checkEncryptionSecret: You must give a passphrase`);\n }\n try {\n await this.closeAllConnections();\n const isSame = this.secretUtil.checkEncryptSecret(passphrase);\n return { result: isSame };\n }\n catch (err) {\n throw new Error(`checkEncryptionSecret: ${err}`);\n }\n }\n ////////////////////////////////\n //// PRIVATE METHODS\n ////////////////////////////////\n async resetDbDict(keys) {\n try {\n for (const key of keys) {\n const opt = {};\n let readonly = false;\n if (key.substring(0, 3) === 'RO_') {\n readonly = true;\n }\n opt.database = key.substring(3);\n opt.readonly = readonly;\n await this.closeConnection(opt);\n }\n }\n catch (err) {\n throw new Error(`ResetDbDict: ${err}`);\n }\n }\n async symmetricDifference(setA, setB) {\n const difference = new Set(setA);\n for (const elem of setB) {\n if (difference.has(elem)) {\n difference.delete(elem);\n }\n else {\n difference.add(elem);\n }\n }\n return difference;\n }\n /**\n * Returns a database connection, if it already exists.\n * If the conneciton does not exist yet, it throws an error.\n *\n * @param dbName\n * @returns\n */\n getDatabaseConnectionOrThrowError(dbName) {\n const databaseNames = Object.keys(this.databases);\n if (!databaseNames.includes(dbName)) {\n throw new Error(`No connection available for database \"${dbName}\"`);\n }\n return this.databases[dbName];\n }\n /**\n * Gets the value of an option from the options object.\n * If the `optionKey` does not exist and there is no `defaultValue` defined, an exception is thrown.\n * If the `optionKey` does not exist but there is a `defaultValue`, the `defaultValue` is returned.\n *\n * @param options\n * @param optionKey\n * @param defaultValue\n * @returns\n */\n getOptionValue(options, optionKey, defaultValue = undefined) {\n const optionKeys = Object.keys(options);\n if (!optionKeys.includes(optionKey)) {\n if (defaultValue === undefined) {\n throw new Error(`Must provide \"${optionKey}\" in options.`);\n }\n else {\n return defaultValue;\n }\n }\n return options[optionKey];\n }\n async closeAllConnections() {\n const databaseNames = Object.keys(this.databases);\n try {\n for (const name of databaseNames) {\n const db = this.databases[name];\n if (db.isDBOpen()) {\n db.dbClose();\n }\n }\n return;\n }\n catch (err) {\n throw new Error(`CloseAllConnection command failed: ${err.message}`);\n }\n }\n ////////////////////////////////\n //// UNIMPLEMENTED METHODS\n ////////////////////////////////\n async getMigratableDbList(options) {\n console.log('getCordovaDbList', options);\n throw new Error('Method not implemented.');\n }\n async addSQLiteSuffix(options) {\n console.log(`${JSON.stringify(options)}`);\n throw new Error('Method not implemented.');\n }\n async deleteOldDatabases(options) {\n console.log(`${JSON.stringify(options)}`);\n throw new Error('Method not implemented.');\n }\n async moveDatabasesAndAddSuffix(options) {\n console.log(`${JSON.stringify(options)}`);\n throw new Error('Method not implemented.');\n }\n async getUrl() {\n throw new Error('Method not implemented.');\n }\n async initWebStore() {\n throw new Error('Method not implemented.');\n }\n async saveToStore(options) {\n console.log(`${JSON.stringify(options)}`);\n throw new Error('Method not implemented.');\n }\n async saveToLocalDisk(options) {\n console.log(`${JSON.stringify(options)}`);\n throw new Error('Method not implemented.');\n }\n async getFromLocalDiskToStore(options) {\n console.log(`${JSON.stringify(options)}`);\n throw new Error('Method not implemented.');\n }\n async getNCDatabasePath(options) {\n console.log('getNCDatabasePath', options);\n throw new Error('Method not implemented.');\n }\n async createNCConnection(options) {\n console.log('createNCConnection', options);\n throw new Error('Method not implemented.');\n }\n async closeNCConnection(options) {\n console.log('closeNCConnection', options);\n throw new Error('Method not implemented.');\n }\n async isNCDatabase(options) {\n console.log('isNCDatabase', options);\n throw new Error('Method not implemented.');\n }\n async isInConfigBiometricAuth() {\n throw new Error('Not implemented on web.');\n }\n}\nexports.CapacitorSQLite = CapacitorSQLite;\n//# sourceMappingURL=index.js.map","import { getDefaultExportFromCjs } from \"\u0000commonjsHelpers.js\";\nimport { __require as requireSrc } from \"/Users/robingenz/Documents/GitHub/capacitor-community/sqlite/electron/build/electron/src/index.js\";\nvar srcExports = requireSrc();\nexport { srcExports as __moduleExports };\nexport default /*@__PURE__*/getDefaultExportFromCjs(srcExports);"],"names":["GlobalSQLite_1","GlobalSQLite","UtilsSQL92Compatibility_1","UtilsSQL92Compatibility","require$$0","require$$1","require$$2","require$$3","require$$4","Database_1","require$$5","require$$6","require$$7","require$$8","require$$9","require$$10","Database"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,CAAA,MAAM,CAAC,cAAc,CAACA,YAAO,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AAC7D,CAAoBA,YAAA,CAAA,YAAA,GAAG,SAAM;AAC7B,sBAAA,MAAM,YAAY,CAAC;AACnB,KAAI,WAAW,GAAG;AAClB,SAAQ,IAAI,CAAC,MAAM,GAAG,eAAe;AACrC,SAAQ,IAAI,CAAC,SAAS,GAAG,mBAAmB;AAC5C;AACA;AACA,CAAAA,YAAA,CAAA,YAAoB,GAAGC,cAAY;AACnC;;;;;;;;;;;;;;;;;ACTA,CAAA,MAAM,CAAC,cAAc,CAACC,uBAAO,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AAC7D,CAA+BA,uBAAA,CAAA,uBAAA,GAAG,SAAM;AACxC,iCAAA,MAAM,uBAAuB,CAAC;KAC1B,eAAe,CAAC,SAAS,EAAE;SACvB,IAAI,YAAY,GAAG,EAAE;AAC7B,SAAQ,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE;AACnE,SAAQ,QAAQ,MAAM;AACtB,aAAY,KAAK,QAAQ;AACzB,iBAAgB,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC;iBAC1C;AAChB,aAAY,KAAK,QAAQ;AACzB,iBAAgB,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC;iBAC1C;AAChB,aAAY,KAAK,QAAQ;AACzB,aAAY,KAAK,QAAQ;AACzB,iBAAgB,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;iBACzC;aACJ;iBACI,MAAM,IAAI,KAAK,CAAC,CAAC,OAAO,EAAE,MAAM,CAAC,gBAAgB,CAAC,CAAC;AACnE;AACA,SAAQ,OAAO,YAAY;AAC3B;KACI,WAAW,CAAC,eAAe,EAAE;AACjC;AACA,SAAQ,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,EAAE;SACrC,MAAM,gBAAgB,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC;SACjD,MAAM,WAAW,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,gBAAgB,CAAC;SACzD,MAAM,UAAU,GAAG,MAAM,CAAC,SAAS,CAAC,gBAAgB,CAAC;AAC7D;SACQ,MAAM,kBAAkB,GAAG,UAAU,CAAC,OAAO,CAAC,YAAY,EAAE,MAAM,CAAC;AAC3E;AACA,SAAQ,MAAM,iBAAiB,GAAG,WAAW,GAAG,kBAAkB;AAClE,SAAQ,OAAO,iBAAiB;AAChC;KACI,WAAW,CAAC,eAAe,EAAE;AACjC;SACQ,IAAI,OAAO,GAAG,IAAI;SAClB,MAAM,aAAa,GAAG,eAAe,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC;AAC1E,SAAQ,IAAI,aAAa,CAAC,MAAM,IAAI,CAAC;aACzB,OAAO,GAAG,KAAK;SACnB,MAAM,SAAS,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;SACvE,MAAM,OAAO,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;SACrE,MAAM,eAAe,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;SAChD,IAAI,iBAAiB,GAAG,CAAC,EAAE,SAAS,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;SAC7D,IAAI,OAAO,EAAE;AACrB,aAAY,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;iBAC3C,MAAM,SAAS,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;iBACzC,MAAM,iBAAiB,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC;AACtE,iBAAgB,iBAAiB,IAAI,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;AAClE;AACA;AACA,SAAQ,OAAO,iBAAiB;AAChC;KACI,UAAU,CAAC,SAAS,EAAE;AAC1B;SACQ,MAAM,aAAa,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC;AACpE,SAAQ,IAAI,aAAa,CAAC,MAAM,IAAI,CAAC;AACrC,aAAY,OAAO,SAAS;AAC5B,SAAQ,IAAI,iBAAiB,GAAG,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;AAC5D,SAAQ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;aAC3C,MAAM,SAAS,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;aACzC,MAAM,iBAAiB,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC;AAClE,aAAY,iBAAiB,IAAI,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;AAC9D;AACA,SAAQ,OAAO,iBAAiB;AAChC;KACI,UAAU,CAAC,YAAY,EAAE;SACrB,MAAM,SAAS,GAAG,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC;SACzC,MAAM,YAAY,GAAG,EAAE;AAC/B,SAAQ,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE;aACzB,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC;AAC5C,aAAY,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;aAC/C,YAAY,CAAC,IAAI,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;AACzE;AACA,SAAQ,OAAO,YAAY,CAAC,QAAQ,EAAE;AACtC;KACI,YAAY,CAAC,cAAc,EAAE;AACjC,SAAQ,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC;AACjC,aAAY,GAAG;AACf,aAAY,IAAI;AAChB,aAAY,GAAG;AACf,aAAY,IAAI;AAChB,aAAY,GAAG;AACf,aAAY,IAAI;AAChB,aAAY,IAAI;AAChB,aAAY,QAAQ;AACpB,aAAY,GAAG;AACf,aAAY,GAAG;AACf,aAAY,GAAG;AACf,aAAY,SAAS;AACrB,aAAY,MAAM;AAClB,aAAY,KAAK;AACjB,aAAY,IAAI;AAChB,aAAY,KAAK;AACjB,UAAS,CAAC;SACF,MAAM,SAAS,GAAG,EAAE;SACpB,MAAM,MAAM,GAAG;cACV,KAAK,CAAC,cAAc;AACjC,cAAa,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,KAAK,GAAG;cAC7B,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,KAAK,EAAE,CAAC;SAClC,IAAI,QAAQ,GAAG,KAAK;SACpB,IAAI,QAAQ,GAAG,KAAK;SACpB,IAAI,QAAQ,GAAG,KAAK;SACpB,IAAI,UAAU,GAAG,KAAK;SACtB,IAAI,SAAS,GAAG,KAAK;SACrB,IAAI,WAAW,GAAG,KAAK;SACvB,IAAI,QAAQ,GAAG,KAAK;AAC5B,SAAQ,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;aACxB,IAAI,IAAI,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;AACvE,iBAAgB,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;iBACrB,QAAQ,GAAG,IAAI;iBACf,SAAS,GAAG,KAAK;AACjC;AACA,kBAAiB,IAAI,KAAK,CAAC,WAAW,EAAE,KAAK,SAAS,EAAE;AACxD,iBAAgB,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;iBACrB,UAAU,GAAG,IAAI;iBACjB,QAAQ,GAAG,IAAI;iBACf,SAAS,GAAG,KAAK;AACjC;kBACiB,IAAI,UAAU,IAAI,KAAK,CAAC,WAAW,EAAE,KAAK,KAAK,EAAE;AAClE,iBAAgB,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;iBACrB,QAAQ,GAAG,IAAI;iBACf,UAAU,GAAG,KAAK;AAClC;AACA,kBAAiB,IAAI,KAAK,CAAC,WAAW,EAAE,KAAK,MAAM,EAAE;AACrD,iBAAgB,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;iBACrB,SAAS,GAAG,KAAK;iBACjB,QAAQ,GAAG,IAAI;AAC/B;kBACiB,IAAI,KAAK,CAAC,WAAW,EAAE,KAAK,KAAK,IAAI,KAAK,CAAC,WAAW,EAAE,KAAK,IAAI,IAAI,KAAK,CAAC,WAAW,EAAE,KAAK,KAAK,EAAE;AACrH,iBAAgB,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;iBACrB,SAAS,GAAG,IAAI;AAChC;AACA,kBAAiB,IAAI,KAAK,CAAC,WAAW,EAAE,KAAK,IAAI,EAAE;AACnD,iBAAgB,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;iBACrB,SAAS,GAAG,KAAK;iBACjB,QAAQ,GAAG,IAAI;AAC/B;AACA,kBAAiB,IAAI,QAAQ,IAAI,KAAK,KAAK,GAAG,EAAE;AAChD,iBAAgB,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;iBACrB,QAAQ,GAAG,IAAI;iBACf,QAAQ,GAAG,IAAI;AAC/B;kBACiB,IAAI,QAAQ,IAAI,KAAK,CAAC,WAAW,EAAE,KAAK,GAAG,EAAE;AAC9D,iBAAgB,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;iBACrB,QAAQ,GAAG,IAAI;AAC/B;kBACiB,IAAI,QAAQ,IAAI,KAAK,CAAC,WAAW,EAAE,KAAK,QAAQ,EAAE;AACnE,iBAAgB,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;iBACrB,QAAQ,GAAG,KAAK;iBAChB,WAAW,GAAG,IAAI;iBAClB,QAAQ,GAAG,KAAK;AAChC;AACA,kBAAiB,IAAI,WAAW,IAAI,KAAK,KAAK,GAAG,EAAE;AACnD,iBAAgB,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;iBACrB,QAAQ,GAAG,IAAI;iBACf,QAAQ,GAAG,IAAI;AAC/B;kBACiB,IAAI,QAAQ,IAAI,KAAK,CAAC,WAAW,EAAE,KAAK,GAAG,EAAE;AAC9D,iBAAgB,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;iBACrB,QAAQ,GAAG,IAAI;AAC/B;kBACiB,IAAI,QAAQ,IAAI,WAAW,IAAI,KAAK,KAAK,GAAG,EAAE;AAC/D,iBAAgB,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;iBACrB,QAAQ,GAAG,KAAK;iBAChB,QAAQ,GAAG,IAAI;AAC/B;kBACiB,IAAI,CAAC,QAAQ,IAAI,WAAW,KAAK,KAAK,KAAK,GAAG,EAAE;AACjE,iBAAgB,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;iBACrB,WAAW,GAAG,KAAK;iBACnB,QAAQ,GAAG,KAAK;iBAChB,QAAQ,GAAG,KAAK;AAChC;AACA,kBAAiB,IAAI,QAAQ,IAAI,CAAC,SAAS,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,EAAE;AACnF,iBAAgB,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;AACtC,qBAAoB,MAAM,OAAO,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAC9D,qBAAoB,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC;qBACvB,QAAQ,GAAG,KAAK;AACpC;AACA;kBACiB;AACjB,iBAAgB,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;AACrC;AACA;SACQ,MAAM,EAAE,GAAG,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC;AACtC,SAAQ,OAAO,EAAE;AACjB;AACA;AACA,CAAAA,uBAAA,CAAA,uBAA+B,GAAGC,yBAAuB;AACzD;;;;;;;;;;;AC7LA,CAAA,MAAM,CAAC,cAAc,CAAC,WAAO,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AAC7D,CAAmB,WAAA,CAAA,WAAA,GAAG,SAAM;AAC5B,CAAA,MAAM,gBAAgB,CAAC;KACnB,WAAW,CAAC,OAAO,EAAE;AACzB,SAAQ,IAAI,CAAC,OAAO,GAAG,OAAO;AAC9B;AACA,KAAI,OAAO,qBAAqB,CAAC,OAAO,EAAE;AAC1C,SAAQ,OAAO,IAAI,gBAAgB,CAAC,OAAO,CAAC;AAC5C;AACA,KAAI,OAAO,sBAAsB,CAAC,OAAO,EAAE;AAC3C,SAAQ,OAAO,IAAI,gBAAgB,CAAC,OAAO,CAAC;AAC5C;AACA,KAAI,OAAO,qBAAqB,CAAC,OAAO,EAAE;AAC1C,SAAQ,OAAO,IAAI,gBAAgB,CAAC,OAAO,CAAC;AAC5C;AACA,KAAI,OAAO,sBAAsB,CAAC,OAAO,EAAE;AAC3C,SAAQ,OAAO,IAAI,gBAAgB,CAAC,OAAO,CAAC;AAC5C;AACA;AACA,CAAA,MAAM,WAAW,CAAC;KACd,sBAAsB,CAAC,QAAQ,EAAE;SAC7B,IAAI,SAAS,GAAG,EAAE;AAC1B,SAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;AACjC,aAAY,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;AACrE,aAAY,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE;iBAClB,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC;AAChD,iBAAgB,SAAS,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,IAAI,EAAE;AAC5D;AACA;AACA,SAAQ,OAAO,SAAS;AACxB;AACA,KAAI,qBAAqB,CAAC,aAAa,EAAE,OAAO,EAAE;SAC1C,IAAI,OAAO,GAAG,EAAE;SAChB,IAAI,UAAU,GAAG,EAAE;AAC3B,SAAQ,IAAI;AACZ,aAAY,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG;aACvB,MAAM,IAAI,GAAG,EAAE;AAC3B,aAAY,KAAK,MAAM,OAAO,IAAI,OAAO,CAAC,YAAY,EAAE;AACxD,iBAAgB,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC;AACzC,iBAAgB,IAAI,IAAI,KAAK,SAAS,EAAE;AACxC,qBAAoB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AACnC;AACA;AACA;AACA,aAAY,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE;AAC9C,iBAAgB,OAAO,IAAI,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC;AAC7C;aACY,OAAO,IAAI,iBAAiB;AACxC;aACY,UAAU,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC;AAC5C,aAAY,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;AACpC,iBAAgB,UAAU,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AACvC;AACA,aAAY,IAAI,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;iBAC1B,UAAU,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACpD;aACY,UAAU,IAAI,IAAI;AAC9B;SACQ,OAAO,KAAK,EAAE;aACV,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,GAAG,KAAK;AAC7D,aAAY,MAAM,gBAAgB,CAAC,qBAAqB,CAAC,GAAG,CAAC;AAC7D;AACA,SAAQ,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE;AACtC;KACI,sBAAsB,CAAC,OAAO,EAAE;AACpC,SAAQ,IAAI;aACA,MAAM,OAAO,GAAG,EAAE;aAClB,MAAM,UAAU,GAAG,EAAE;aACrB,IAAI,OAAO,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE;iBACjC,MAAM,GAAG,GAAG,6DAA6D;AACzF,iBAAgB,MAAM,gBAAgB,CAAC,sBAAsB,CAAC,GAAG,CAAC;AAClE;AACA,aAAY,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE;AAC1C;SACQ,OAAO,KAAK,EAAE;aACV,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,GAAG,KAAK;AAC7D,aAAY,MAAM,gBAAgB,CAAC,sBAAsB,CAAC,GAAG,CAAC;AAC9D;AACA;KACI,qBAAqB,CAAC,OAAO,EAAE;SAC3B,IAAI,OAAO,GAAG,EAAE;SAChB,IAAI,UAAU,GAAG,EAAE;AAC3B,SAAQ,IAAI;AACZ,aAAY,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG;aACvB,MAAM,IAAI,GAAG,EAAE;AAC3B,aAAY,KAAK,MAAM,OAAO,IAAI,OAAO,CAAC,YAAY,EAAE;AACxD,iBAAgB,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC;AACzC,iBAAgB,IAAI,IAAI,KAAK,SAAS,EAAE;AACxC,qBAAoB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AACnC;AACA;aACY,OAAO,IAAI,iBAAiB;AACxC;aACY,UAAU,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC;AAC5C,aAAY,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;AACpC,iBAAgB,UAAU,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AACvC;AACA,aAAY,IAAI,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;iBAC1B,UAAU,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACpD;aACY,UAAU,IAAI,IAAI;AAC9B;SACQ,OAAO,KAAK,EAAE;aACV,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,GAAG,KAAK;AAC7D,aAAY,MAAM,gBAAgB,CAAC,qBAAqB,CAAC,GAAG,CAAC;AAC7D;AACA,SAAQ,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE;AACtC;AACA,KAAI,uBAAuB,GAAG;AAC9B,SAAQ,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;AACzD,SAAQ,OAAO,WAAW;AAC1B;AACA,KAAI,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE;AACrC,SAAQ,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;aACxB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;AACzC,iBAAgB,OAAO,KAAK;AAC5B;AACA;AACA,SAAQ,OAAO,IAAI;AACnB;AACA;AACA,CAAA,WAAA,CAAA,WAAmB,GAAG,WAAW;AACjC;;;;;;;;;;;AC1HA,CAAA,MAAM,CAAC,cAAc,CAAC,SAAO,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AAC7D,CAAiB,SAAA,CAAA,SAAA,GAAG,SAAM;CAC1B,MAAM,UAAU,GAAG,UAA2B;AAC9C,CAAA,MAAM,SAAS,CAAC;AAChB,KAAI,WAAW,GAAG;AAClB,SAAQ,IAAI,CAAC,MAAM,GAAG,WAAW;AACjC,SAAQ,IAAI,CAAC,IAAI,GAAG,IAAI;AACxB,SAAQ,IAAI,CAAC,MAAM,GAAG,IAAI;AAC1B,SAAQ,IAAI,CAAC,SAAS,GAAG,IAAI;AAC7B,SAAQ,IAAI,CAAC,KAAK,GAAG,IAAI;AACzB,SAAQ,IAAI,CAAC,EAAE,GAAG,IAAI;AACtB,SAAQ,IAAI,CAAC,QAAQ,GAAG,IAAI;AAC5B,SAAQ,IAAI,CAAC,OAAO,GAAG,EAAE;AACzB,SAAQ,IAAI,CAAC,OAAO,GAAG,EAAE;AACzB,SAAQ,IAAI,CAAC,GAAG,GAAG,GAAG;AACtB,SAAQ,IAAI,CAAC,YAAY,GAAG,KAAK;AACjC,SAAQ,IAAI,CAAC,IAAI,GAAG,UAAe;AACnC,SAAQ,IAAI,CAAC,MAAM,GAAG,UAAa;AACnC,SAAQ,IAAI,CAAC,SAAS,GAAG,UAAqB;AAC9C,SAAQ,IAAI,CAAC,EAAE,GAAG,UAAa;AAC/B,SAAQ,IAAI,CAAC,KAAK,GAAG,UAAgB;AACrC,SAAQ,IAAI,CAAC,QAAQ,GAAG,UAAmB;SACnC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE;SAChC,MAAM,GAAG,GAAG,SAAS;SACrB,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC;AACrC,SAAQ,IAAI,GAAG,IAAI,EAAE;AACrB,aAAY,IAAI,CAAC,GAAG,GAAG,IAAI;SACnB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,EAAE;SAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;SACzF,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI;AAC/C,SAAQ,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC;AACjE,SAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,qBAAqB,CAAC,CAAC,EAAE;AACxF;AACA,aAAY,IAAI,CAAC,SAAS,GAAG,OAAA,CAAQ,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,qBAAqB,CAAC,CAAC,CAAC,OAAO;AAChG;cACa;AACb,aAAY,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,uBAAuB,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;AACnI;SACQ,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,eAAe,CAAC;AACnE,eAAc,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,eAAe,CAAC;AACrD,eAAc,KAAK;SACX,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE;SAC5B,QAAQ,IAAI,CAAC,MAAM;AAC3B,aAAY,KAAK,QAAQ;iBACT,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,eAAe,CAAC;AACrE,uBAAsB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,eAAe,CAAC;AAC7D,uBAAsB,WAAW;iBACjB;AAChB,aAAY,KAAK,OAAO;iBACR,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,eAAe,CAAC;AACrE,uBAAsB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,eAAe,CAAC;AAC7D,uBAAsB,WAAW;iBACjB;AAChB,aAAY,KAAK,YAAY;iBACb,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,eAAe,CAAC;AACrE,uBAAsB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,eAAe,CAAC;AAC7D,uBAAsB,WAAW;iBACjB;aACJ;AACZ,iBAAgB,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC;AACrD;AACA;AACA;AACA;AACA;AACA;AACA,KAAI,eAAe,GAAG;SACd,OAAO,IAAI,CAAC,YAAY;AAChC;AACA;AACA;AACA;AACA;AACA;KACI,UAAU,CAAC,QAAQ,EAAE;SACjB,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,8BAA8B,CAAC;AACtE,SAAQ,OAAO,OAAO,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC;AAC7D;AACA;KACI,WAAW,CAAC,QAAQ,EAAE;AAC1B,SAAQ,MAAM,UAAU,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC;AACxD,SAAQ,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;AACpF,SAAQ,OAAO,QAAQ;AACvB;AACA;AACA;AACA;AACA;KACI,YAAY,CAAC,QAAQ,EAAE;SACnB,IAAI,GAAG,GAAG,KAAK;AACvB,SAAQ,IAAI;aACA,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE;iBAClC,GAAG,GAAG,IAAI;AAC1B;AACA;SACQ,OAAO,GAAG,EAAE;AACpB,aAAY,OAAO,CAAC,KAAK,CAAC,qBAAqB,GAAG,GAAG,CAAC;aAC1C,GAAG,GAAG,KAAK;AACvB;AACA,SAAQ,OAAO,GAAG;AAClB;AACA;AACA;AACA;AACA;KACI,YAAY,CAAC,QAAQ,EAAE;SACnB,IAAI,GAAG,GAAG,KAAK;SACf,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC;AACnD,SAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;AACjC,aAAY,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC;AAC7C;AACA,SAAQ,OAAO,GAAG;AAClB;AACA;AACA;AACA;AACA;AACA;KACI,WAAW,CAAC,QAAQ,EAAE;AAC1B,SAAQ,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,QAAQ,CAAC;AAChE;AACA;AACA;AACA;AACA;AACA,KAAI,gBAAgB,GAAG;SACf,IAAI,OAAO,GAAG,EAAE;AACxB,SAAQ,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG;AACjC,SAAQ,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM;AACpC,SAAQ,IAAI,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;aACxB,OAAO,GAAG,QAAQ;AAC9B,aAAY,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,OAAO,EAAE;AAC/D,iBAAgB,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC;AAChE;AACA;cACa;AACb,aAAY,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC;AAC1E;SACQ,MAAM,IAAI,GAAG,IAAI,CAAC,wBAAwB,CAAC,OAAO,CAAC;SACnD,IAAI,CAAC,IAAI;aACL,OAAO,GAAG,EAAE;AACxB,SAAQ,OAAO,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA,KAAI,YAAY,GAAG;SACX,IAAI,OAAO,GAAG,EAAE;AACxB,SAAQ,MAAM,YAAY,GAAG,IAAI,CAAC,gBAAgB,EAAE;SAC5C,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC;SAC/C,MAAM,IAAI,GAAG,IAAI,CAAC,wBAAwB,CAAC,OAAO,CAAC;SACnD,IAAI,CAAC,IAAI;aACL,OAAO,GAAG,EAAE;AACxB,SAAQ,OAAO,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA,KAAI,sBAAsB,GAAG;SACrB,IAAI,OAAO,GAAG,EAAE;AACxB,SAAQ,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM;SACpC,MAAM,GAAG,GAAG,MAAM,KAAK,KAAK,GAAG,KAAK,GAAG,QAAQ;AACvD,SAAQ,IAAI,QAAQ,GAAG,IAAI,CAAC,OAAO;AACnC,SAAQ,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,UAAU,EAAE;aACjD,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;AACtD;AACA,SAAQ,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,WAAW,CAAC;AACzE,SAAQ,OAAO,OAAO;AACtB;AACA;AACA;AACA;AACA;KACI,aAAa,CAAC,EAAE,EAAE;SACd,IAAI,IAAI,GAAG,EAAE;SACb,MAAM,GAAG,GAAG,KAAK;SACjB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;SACrC,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;SACrC,IAAI,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,KAAK,GAAG,EAAE;aAC7B,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;iBAC9B,MAAM,MAAM,GAAG,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC;AAClD,iBAAgB,IAAI,GAAG,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AACjE;AACA;AACA,SAAQ,OAAO,IAAI;AACnB;AACA;AACA;AACA;AACA;AACA;AACA,KAAI,MAAM,WAAW,CAAC,IAAI,EAAE;SACpB,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC;SAC/C,MAAM,GAAG,GAAG,EAAE;AACtB,SAAQ,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK;AACpC,aAAY,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,MAAM;AACjF,iBAAgB,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;AAC9B,UAAS,CAAC;AACV,SAAQ,OAAO,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC;AACnC;AACA;AACA;AACA;AACA;AACA;AACA,KAAI,MAAM,uBAAuB,CAAC,EAAE,EAAE,SAAS,EAAE;AACjD,SAAQ,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,sBAAsB,EAAE,EAAE,EAAE,CAAC;SAChE,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;AAC3C,SAAQ,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,IAAI,CAAC;SACzD,MAAM,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,GAAG,EAAE,SAAS,CAAC;AACvD,SAAQ,OAAO,OAAO,CAAC,OAAO,EAAE;AAChC;AACA;AACA;AACA;AACA;AACA;KACI,MAAM,aAAa,CAAC,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE;AAC9C,SAAQ,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC;AAC9C,SAAQ,IAAI;AACZ;AACA,aAAY,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC;AAClE,aAAY,MAAM,GAAG,GAAG,IAAI,IAAI,CAAC,KAAK,EAAE;aAC5B,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC;AACtD;aACY,MAAM,aAAa,GAAG,EAAE;AACpC,aAAY,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,KAAK;iBAC9C,aAAa,CAAC,IAAI,CAAC;sBACd,IAAI,CAAC,QAAQ;sBACb,KAAK,CAAC,YAAY;AACvC,sBAAqB,IAAI,CAAC,OAAO,OAAO,KAAK;qBACzB,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC;AAC7D,qBAAoB,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,IAAI,CAAC;AAC7E;qBACoB,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC;AACzD,qBAAoB,IAAI,CAAC,MAAM,IAAI,SAAS,EAAE;AAC9C,yBAAwB,IAAI,SAAS,IAAI,MAAM,EAAE;AACjD,6BAA4B,MAAM,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC;AAC1D;AACA,yBAAwB,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,EAAE,OAAO,CAAC;AAC1E;AACA,kBAAiB,CAAC,CAAC;AACnB,cAAa,CAAC;AACd;AACA,aAAY,MAAM,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;AAC5C,aAAY,OAAO,OAAO,CAAC,OAAO,EAAE;AACpC;SACQ,OAAO,GAAG,EAAE;AACpB,aAAY,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;AAC5B,aAAY,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI,MAAM,YAAY,CAAC,QAAQ,EAAE,UAAU,EAAE;AAC7C;SACQ,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC;SAC3C,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC;AACvD,SAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE;AAC9D,aAAY,IAAI;iBACA,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,UAAU,EAAE,IAAI,CAAC;AACnE,iBAAgB,OAAO,OAAO,CAAC,OAAO,EAAE;AACxC;aACY,OAAO,GAAG,EAAE;iBACR,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC,CAAC;AAC7D;AACA;cACa;aACD,OAAO,OAAO,CAAC,MAAM,CAAC,+BAA+B,GAAG,UAAU,CAAC;AAC/E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;KACI,MAAM,YAAY,CAAC,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE;AACxD,SAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE;AAC9D;aACY,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC;AACxD,aAAY,IAAI,CAAC,MAAM,IAAI,SAAS,EAAE;AACtC,iBAAgB,IAAI;AACpB,qBAAoB,IAAI,SAAS,IAAI,MAAM,EAAE;AAC7C,yBAAwB,MAAM,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC;AAC7D;qBACoB,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,QAAQ,EAAE,UAAU,CAAC;AAClE;iBACgB,OAAO,GAAG,EAAE;qBACR,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC,CAAC;AACjE;AACA;AACA,aAAY,OAAO,OAAO,CAAC,OAAO,EAAE;AACpC;cACa;aACD,OAAO,OAAO,CAAC,MAAM,CAAC,+BAA+B,GAAG,UAAU,CAAC;AAC/E;AACA;KACI,MAAM,QAAQ,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE;AACvD,SAAQ,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC;AACxD,SAAQ,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC;AACpD,SAAQ,IAAI;aACA,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC;AAClD,aAAY,OAAO,OAAO,CAAC,OAAO,EAAE;AACpC;SACQ,OAAO,GAAG,EAAE;aACR,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC,CAAC;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI,MAAM,cAAc,CAAC,QAAQ,EAAE;AACnC;SACQ,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC;AACnD,SAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;AACnC,aAAY,IAAI;AAChB,iBAAgB,MAAM,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC;AACnD,iBAAgB,OAAO,OAAO,CAAC,OAAO,EAAE;AACxC;aACY,OAAO,GAAG,EAAE;AACxB,iBAAgB,OAAO,OAAO,CAAC,MAAM,CAAC,kCAAkC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;AAC3F;AACA;cACa;aACD,OAAO,OAAO,CAAC,MAAM,CAAC,+BAA+B,GAAG,QAAQ,CAAC;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI,MAAM,cAAc,CAAC,QAAQ,EAAE;SAC3B,IAAI,aAAa,GAAG,KAAK;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;SACQ,MAAM,UAAU,GAAG,YAAY;AACvC,aAAY,IAAI;AAChB,iBAAgB,MAAM,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC;AACjD;aACY,OAAO,GAAG,EAAE;AACxB,iBAAgB,aAAa,EAAE;AAC/B,iBAAgB,IAAI,aAAa,GAAG,CAAC,EAAE;qBACnB,MAAM,UAAU,EAAE;AACtC;sBACqB;AACrB,qBAAoB,MAAM,GAAG;AAC7B;AACA;UACS;AACT,SAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;AACnC;aACY,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC;aAC1C,IAAI,MAAM,EAAE;AACxB,iBAAgB,IAAI;AACpB,qBAAoB,MAAM,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC;AAC5D;qBACoB,MAAM,UAAU,EAAE;AACtC,qBAAoB,OAAO,OAAO,CAAC,OAAO,EAAE;AAC5C;iBACgB,OAAO,GAAG,EAAE;qBACR,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAC,CAAC;AACnE;AACA;kBACiB;AACjB,iBAAgB,OAAO,OAAO,CAAC,OAAO,EAAE;AACxC;AACA;cACa;aACD,OAAO,OAAO,CAAC,MAAM,CAAC,iCAAiC,GAAG,QAAQ,CAAC;AAC/E;AACA;KACI,MAAM,mBAAmB,CAAC,QAAQ,EAAE,SAAS,GAAG,IAAI,EAAE;SAClD,IAAI,UAAU,GAAG,KAAK;SACtB,UAAU,CAAC,MAAM;aACb,UAAU,GAAG,IAAI;UACpB,EAAE,SAAS,CAAC;SACb,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAK;aACpC,MAAM,KAAK,GAAG,YAAY;iBACtB,IAAI,UAAU,EAAE;AAChC,qBAAoB,MAAM,CAAC,IAAI,KAAK,CAAC,CAAC,+DAA+D,EAAE,SAAS,CAAC,cAAc,CAAC,CAAC,CAAC;qBAC9G;AACpB;AACA;iBACgB,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC;AAC1D;iBACgB,IAAI,CAAC,MAAM,EAAE;AAC7B,qBAAoB,OAAO,EAAE;qBACT;AACpB;AACA,iBAAgB,IAAI;qBACA,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC;AACxE;AACA,qBAAoB,MAAM,MAAM,CAAC,KAAK,EAAE;AACxC,qBAAoB,OAAO,EAAE;AAC7B;iBACgB,OAAO,GAAG,EAAE;AAC5B,qBAAoB,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO,EAAE;AAC9C;yBACwB,UAAU,CAAC,MAAM;AACzC,6BAA4B,KAAK,EAAE;0BACV,EAAE,GAAG,CAAC;yBACP;AACxB;AACA,0BAAyB,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE;AACpD;AACA,yBAAwB,OAAO,EAAE;yBACT;AACxB;0BACyB;AACzB;AACA,yBAAwB,MAAM,CAAC,IAAI,KAAK,CAAC,CAAC,oDAAoD,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;AACvG;AACA;cACa;AACb,aAAY,KAAK,EAAE;AACnB,UAAS,CAAC;AACV;AACA;AACA;AACA;AACA;AACA;AACA,KAAI,MAAM,cAAc,CAAC,QAAQ,EAAE,UAAU,EAAE;AAC/C;SACQ,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC;SAC3C,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC;AACvD,SAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE;AAC9D,aAAY,IAAI;iBACA,MAAM,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,UAAU,CAAC;AAC/D,iBAAgB,OAAO,OAAO,CAAC,OAAO,EAAE;AACxC;aACY,OAAO,GAAG,EAAE;iBACR,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAC,CAAC;AAC/D;AACA;cACa;aACD,OAAO,OAAO,CAAC,MAAM,CAAC,mCAAmC,GAAG,OAAO,CAAC;AAChF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI,MAAM,cAAc,CAAC,QAAQ,EAAE,UAAU,EAAE;AAC/C,SAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE;AAC9D;aACY,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC;aAC1C,IAAI,MAAM,EAAE;AACxB;AACA,iBAAgB,IAAI;AACpB,qBAAoB,MAAM,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC;qBACrC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,UAAU,CAAC;AAChE,qBAAoB,OAAO,OAAO,CAAC,OAAO,EAAE;AAC5C;iBACgB,OAAO,GAAG,EAAE;AAC5B,qBAAoB,OAAO,OAAO,CAAC,MAAM,CAAC,kBAAkB,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AACxE;AACA;kBACiB;AACjB,iBAAgB,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,gBAAgB,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC;AACnF;AACA;cACa;AACb,aAAY,OAAO,OAAO,CAAC,MAAM,CAAC,oCAAoC,CAAC;AACvE;AACA;KACI,MAAM,qBAAqB,GAAG;AAClC,SAAQ,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,EAAE;AAC7C,SAAQ,MAAM,YAAY,GAAG,IAAI,CAAC,gBAAgB,EAAE;SAC5C,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC;AAC7D,SAAQ,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE;aAC5B,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;AAC7C,aAAY,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC;AAC9D,aAAY,IAAI,GAAG,KAAK,KAAK,EAAE;AAC/B,iBAAgB,MAAM,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;AAClF,iBAAgB,IAAI;qBACA,MAAM,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,GAAG,CAAC;AAC9D;iBACgB,OAAO,GAAG,EAAE;AAC5B,qBAAoB,OAAO,OAAO,CAAC,MAAM,CAAC,yBAAyB,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AAC/E;AACA;AACA,aAAY,IAAI,GAAG,KAAK,MAAM,EAAE;AAChC,iBAAgB,IAAI;AACpB,qBAAoB,MAAM,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC;AACzD;iBACgB,OAAO,GAAG,EAAE;AAC5B,qBAAoB,OAAO,OAAO,CAAC,MAAM,CAAC,yBAAyB,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AAC/E;AACA;AACA;AACA,SAAQ,OAAO,OAAO,CAAC,OAAO,EAAE;AAChC;AACA;AACA;AACA;AACA;AACA;AACA,KAAI,MAAM,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE;SACpC,MAAM,SAAS,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;AACjD;SACQ,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC;SAC9C,IAAI,SAAS,EAAE;aACX,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC;aAC1C,IAAI,MAAM,EAAE;AACxB,iBAAgB,IAAI;AACpB,qBAAoB,MAAM,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC;qBACnC,MAAM,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,QAAQ,CAAC;AAClE,qBAAoB,OAAO,OAAO,CAAC,OAAO,EAAE;AAC5C;iBACgB,OAAO,GAAG,EAAE;AAC5B,qBAAoB,OAAO,OAAO,CAAC,MAAM,CAAC,mBAAmB,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AACzE;AACA;kBACiB;AACjB,iBAAgB,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,iBAAiB,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,gBAAgB,CAAC;AACzF;AACA;cACa;AACb,aAAY,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,iBAAiB,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,gBAAgB,CAAC;AACtF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI,MAAM,oBAAoB,CAAC,GAAG,EAAE,UAAU,EAAE;SACxC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;SACrC,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;SAChC,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC;AAC5C,SAAQ,MAAM,QAAQ,GAAG,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;SAC9D,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,QAAQ,CAAC;SAC1D,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAK;AAC/C,aAAY,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;aACzB,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC;AACxC,aAAY,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC;AAC5C,UAAS,CAAC;AACV;AACA,KAAI,iBAAiB,CAAC,IAAI,EAAE,OAAO,EAAE;SAC7B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAK;AAChD,aAAY,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,IAAI,EAAE,OAAO,CAAC;aAC9D,MAAM,MAAM,GAAG,EAAE;aACjB,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,KAAK;AAC5C,iBAAgB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;AACjC,cAAa,CAAC;AACd,aAAY,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM;AACzC,iBAAgB,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;AAC1C,cAAa,CAAC;aACF,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,KAAK;iBAC5B,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,GAAG,GAAG;iBAC3C,MAAM,CAAC,GAAG,CAAC;AAC3B,cAAa,CAAC;AACd,UAAS,CAAC;AACV;AACA;AACA;AACA;AACA;AACA;KACI,wBAAwB,CAAC,MAAM,EAAE;AACrC,SAAQ,IAAI,GAAG;AACf,SAAQ,IAAI;aACA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE;AACjD,iBAAgB,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC;AAChD;aACY,GAAG,GAAG,IAAI;AACtB;SACQ,OAAO,CAAC,EAAE;AAClB,aAAY,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE,CAAC,CAAC;aACrC,GAAG,GAAG,KAAK;AACvB;AACA,SAAQ,OAAO,GAAG;AAClB;AACA;AACA;AACA;AACA;AACA;KACI,mBAAmB,CAAC,SAAS,EAAE;AACnC,SAAQ,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG;AACjC,SAAQ,MAAM,IAAI,GAAG,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;AAC5D,SAAQ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC/C,aAAY,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;aAC1C,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,IAAI;AAC1G;SACQ;AACR;AACA;AACA,CAAA,SAAA,CAAA,SAAiB,GAAG,SAAS;AAC7B;;;;;;;;;;;AC9lBA,CAAA,MAAM,CAAC,cAAc,CAAC,iBAAO,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AAC7D,CAAyB,iBAAA,CAAA,iBAAA,GAAG,SAAM;AAClC,CAAA,MAAM,iBAAiB,CAAC;AACxB,KAAI,WAAW,GAAG;SACV,IAAI,CAAC,aAAa,GAAG,CAAC,WAAW,EAAE,SAAS,EAAE,UAAU,KAAK;aACzD,MAAM,KAAK,GAAG,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC;AACxD,aAAY,IAAI,KAAK,KAAK,EAAE,EAAE;iBACd,MAAM,WAAW,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,UAAU,GAAG,WAAW,CAAC,SAAS,CAAC,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC;AAClI,iBAAgB,OAAO,WAAW;AAClC;AACA,aAAY,OAAO,WAAW;UACrB;AACT;KACI,gBAAgB,CAAC,SAAS,EAAE;SACxB,MAAM,OAAO,GAAG,oDAAoD;SACpE,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC;AAC9C,SAAQ,IAAI,KAAK,GAAG,CAAC,CAAC,EAAE;AACxB,aAAY,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC;AACtC,aAAY,OAAO,SAAS;AAC5B;AACA,SAAQ,OAAO,IAAI;AACnB;KACI,kBAAkB,CAAC,SAAS,EAAE;SAC1B,MAAM,OAAO,GAAG,mCAAmC;SACnD,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC;AAC9C,SAAQ,IAAI,KAAK,GAAG,CAAC,CAAC,EAAE;aACZ,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;AAC/C,aAAY,OAAO,WAAW;AAC9B;AACA,SAAQ,OAAO,IAAI;AACnB;KACI,sBAAsB,CAAC,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE;AACpE,SAAQ,IAAI,gBAAgB;AAC5B,SAAQ,IAAI,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;AACzC;aACY,MAAM,gBAAgB,GAAG,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC;AAC7D,aAAY,gBAAgB,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC;AAC1E;cACa;AACb,aAAY,gBAAgB,GAAG,CAAC,WAAW,CAAC;AAC5C;SACQ,MAAM,aAAa,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK;aACjD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,oCAAoC,CAAC;aAC9D,IAAI,CAAC,KAAK,EAAE;AACxB,iBAAgB,OAAO,IAAI;AAC3B;aACY,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;aAC9B,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;aAChC,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;aAC7B,IAAI,SAAS,GAAG,MAAM;aACtB,MAAM,KAAK,GAAG,IAAI,CAAC,wBAAwB,CAAC,MAAM,EAAE,QAAQ,CAAC;AACzE,aAAY,IAAI,KAAK,KAAK,EAAE,EAAE;iBACd,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,KAAK,CAAC;AAClE;aACY,MAAM,cAAc,GAAG,CAAC,EAAE,MAAM,CAAC,EAAE,SAAS,CAAC,CAAC;AAC1D,aAAY,MAAM,GAAG,GAAG,CAAC,EAAE,cAAc,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AAChE,aAAY,OAAO,GAAG;AACtB,UAAS,CAAC;AACV,SAAQ,OAAO,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC;AAC1C;AACA,KAAI,wBAAwB,CAAC,MAAM,EAAE,KAAK,EAAE;AAC5C,SAAQ,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;AACpC;AACA,KAAI,gBAAgB,CAAC,KAAK,EAAE,KAAK,EAAE;SAC3B,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE;AAChD,aAAY,OAAO,KAAK,CAAC,KAAK,CAAC;AAC/B;cACa;AACb,aAAY,OAAO,SAAS;AAC5B;AACA;KACI,qBAAqB,CAAC,YAAY,EAAE;AACxC;SACQ,MAAM,iBAAiB,GAAG,6IAA6I;SACvK,MAAM,OAAO,GAAG,YAAY,CAAC,KAAK,CAAC,iBAAiB,CAAC;SACrD,IAAI,OAAO,EAAE;aACT,MAAM,cAAc,GAAG;iBACnB,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,IAAI,EAAE,CAAC;AACvE,iBAAgB,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC;iBACrB,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,IAAI,EAAE,CAAC;AACvE,iBAAgB,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,WAAW;cAChD;AACb,aAAY,OAAO,cAAc;AACjC;cACa;AACb,aAAY,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC;AAC1E;AACA;KACI,kBAAkB,CAAC,WAAW,EAAE;SAC5B,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;SACjF,MAAM,KAAK,GAAG,8JAA8J;AACpL,SAAQ,IAAI,KAAK;SACT,MAAM,OAAO,GAAG,EAAE;AAC1B,SAAQ,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,IAAI,EAAE;AAC3D,aAAY,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC;aAC3B,IAAI,UAAU,EAAE;iBACZ,MAAM,gBAAgB,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC;AAC9D,iBAAgB,KAAK,MAAM,UAAU,IAAI,gBAAgB,EAAE;qBACvC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;AACnD;AACA;kBACiB;AACjB,iBAAgB,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC;AAC5C,iBAAgB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,EAAE;qBACjD,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;AACpD;AACA;AACA;AACA,SAAQ,OAAO,OAAO;AACtB;KACI,sBAAsB,CAAC,KAAK,EAAE;SAC1B,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC;AAC1C,SAAQ,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;AAC9B;KACI,yBAAyB,CAAC,WAAW,EAAE;SACnC,MAAM,OAAO,GAAG,2CAA2C;AACnE,SAAQ,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,OAAO,CAAC;SACjC,MAAM,OAAO,GAAG,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC;SAC3C,MAAM,cAAc,GAAG,EAAE;AACjC,SAAQ,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE;aACzB,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;AAC9C,aAAY,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,IAAI,EAAE,CAAC;AACvE,aAAY,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;AACrC;SACQ,OAAO,cAAc,CAAC,MAAM,KAAK,CAAC,GAAG,IAAI,GAAG,cAAc;AAClE;KACI,yBAAyB,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE;SACxD,IAAI,QAAQ,GAAG,MAAM;AAC7B,SAAQ,KAAK,MAAM,OAAO,IAAI,IAAI,EAAE;AACpC,aAAY,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,QAAQ,GAAG,QAAQ;AAC1F,aAAY,KAAK,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE,EAAE;AAC1D,iBAAgB,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,GAAG,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;AAC/E;AACA;AACA,SAAQ,OAAO,QAAQ;AACvB;AACA,KAAI,gBAAgB,CAAC,WAAW,EAAE,SAAS,EAAE,UAAU,EAAE;SACjD,OAAO,WAAW,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC;AAC5D;KACI,SAAS,CAAC,GAAG,EAAE,SAAS,EAAE,SAAS,GAAG,CAAC,EAAE;AAC7C;SACQ,MAAM,OAAO,GAAG,EAAE;SAClB,IAAI,YAAY,GAAG,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC;AAC5D,SAAQ,OAAO,YAAY,KAAK,EAAE,EAAE;AACpC,aAAY,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC;aAC1B,YAAY,GAAG,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,YAAY,GAAG,CAAC,CAAC;AACnE;AACA,SAAQ,OAAO,OAAO;AACtB;AACA,KAAI,4BAA4B,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE;SACrD,IAAI,SAAS,GAAG,EAAE;SAClB,IAAI,IAAI,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;AACtC,SAAQ,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,QAAQ,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE;aAC5C,IAAI,OAAO,GAAG,eAAe;AACzC,aAAY,IAAI,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC;AAC1D,aAAY,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;AACnC,iBAAgB,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC;iBAC1C,OAAO,GAAG,UAAU;AACpC;AACA,aAAY,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;iBACjB,IAAI,MAAM,GAAG,EAAE;AAC/B,iBAAgB,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;AACvE,iBAAgB,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE;AAC7C,qBAAoB,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC;AACnF,qBAAoB,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;AAC/C,yBAAwB,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AACvF,yBAAwB,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AAChE;0BACyB;AACzB,yBAAwB,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AACpE;AACA,qBAAoB,IAAI,GAAG,GAAG,CAAC,EAAE;yBACT,SAAS,IAAI,OAAO;AAC5C;AACA,qBAAoB,IAAI,OAAO,KAAK,eAAe,EAAE;yBAC7B,SAAS,IAAI,QAAQ,CAAC,GAAG,CAAC,GAAG,KAAK,GAAG,MAAM;AACnE;0BACyB;yBACD,SAAS,IAAI,QAAQ,CAAC,GAAG,CAAC,GAAG,KAAK,GAAG,MAAM;AACnE;AACA;AACA;AACA;AACA,SAAQ,SAAS,GAAG,QAAQ,GAAG,SAAS;AACxC,SAAQ,OAAO,SAAS;AACxB;AACA,KAAI,WAAW,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE;SACpC,IAAI,SAAS,GAAG,EAAE;AAC1B,SAAQ,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC,EAAE;AAChC,aAAY,OAAO,SAAS;AAC5B;AACA,SAAQ,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,OAAO,EAAE;AAC9D,aAAY,OAAO,SAAS;AAC5B;SACQ,IAAI,QAAQ,CAAC,MAAM,KAAK,QAAQ,CAAC,MAAM,EAAE;AACjD;aACY,MAAM,IAAI,GAAG,IAAI,CAAC,yBAAyB,CAAC,MAAM,CAAC;aACnD,IAAI,IAAI,EAAE;AACtB,iBAAgB,SAAS,GAAG,IAAI,CAAC,yBAAyB,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,CAAC;AAC5F;kBACiB;AACjB;iBACgB,SAAS,GAAG,IAAI,CAAC,4BAA4B,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC;AACzF;AACA;AACA,SAAQ,OAAO,SAAS;AACxB;AACA;AACA,CAAA,iBAAA,CAAA,iBAAyB,GAAG,iBAAiB;AAC7C;;;;;;;;;ACjNA,CAAA,MAAM,CAAC,cAAc,CAAC,WAAO,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AAC7D,CAAmB,WAAA,CAAA,WAAA,GAAG,SAAM;CAC5B,MAAM,yBAAyB,GAAGC,8BAAoC,EAAA;CACtE,MAAM,aAAa,GAAGC,kBAAwB,EAAA;CAC9C,MAAM,WAAW,GAAGC,gBAAsB,EAAA;CAC1C,MAAM,mBAAmB,GAAGC,wBAA8B,EAAA;AAC1D;AACA,CAAA,MAAM,WAAW,CAAC;AAClB,KAAI,WAAW,GAAG;SACV,IAAI,CAAC,QAAQ,GAAG,IAAI,WAAW,CAAC,SAAS,EAAE;SAC3C,IAAI,CAAC,QAAQ,GAAG,IAAI,mBAAmB,CAAC,iBAAiB,EAAE;SAC3D,IAAI,CAAC,OAAO,GAAG,IAAI,aAAa,CAAC,WAAW,EAAE;SAC9C,IAAI,CAAC,UAAU,GAAG,IAAI,yBAAyB,CAAC,uBAAuB,EAAE;AACjF,SAAQ,IAAI,CAAC,SAAS,GAAGC,YAA0C;AACnE;AACA;AACA;AACA;AACA;AACA;AACA,KAAI,oBAAoB,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE;SAC7C,MAAM,GAAG,GAAG,sBAAsB;AAC1C;AACA,SAAQ,IAAI,GAAG;SACP,IAAI,CAAC,QAAQ,EAAE;aACX,GAAG,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE;AAC7C;iBACgB,aAAa,EAAE,KAAK;AACpC,cAAa,CAAC;AACd;cACa;aACD,GAAG,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE;AAC7C;iBACgB,QAAQ,EAAE,IAAI;iBACd,aAAa,EAAE,IAAI;AACnC,cAAa,CAAC;AACd;AACA,SAAQ,IAAI,GAAG,IAAI,IAAI,EAAE;AACzB,aAAY,IAAI;AAChB,iBAAgB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;AACnC;aACY,OAAO,GAAG,EAAE;iBACR,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,GAAG,GAAG;AAC9D,iBAAgB,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;AACnD;AACA,aAAY,IAAI;AAChB;AACA,iBAAgB,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;AACzC,qBAAoB,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,QAAQ,CAAC;AACvD;AACA;AACA,iBAAgB,IAAI,CAAC,+BAA+B,CAAC,GAAG,EAAE,IAAI,CAAC;AAC/D;aACY,OAAO,GAAG,EAAE;iBACR,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,GAAG,GAAG;AAC9D,iBAAgB,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;AACnD;AACA,aAAY,OAAO,GAAG;AACtB;cACa;AACb,aAAY,MAAM,IAAI,KAAK,CAAC,GAAG,GAAG,sBAAsB,CAAC;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI,eAAe,CAAC,GAAG,EAAE,UAAU,EAAE;SAC7B,MAAM,GAAG,GAAG,iBAAiB;AACrC,SAAQ,IAAI;AACZ,aAAY,GAAG,CAAC,MAAM,CAAC,CAAC,kBAAkB,CAAC,CAAC;AAC5C,aAAY,GAAG,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC;aACtB,GAAG,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;aACjC;AACZ;SACQ,OAAO,GAAG,EAAE;aACR,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,GAAG,GAAG;AAC1D,aAAY,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI,+BAA+B,CAAC,GAAG,EAAE,MAAM,EAAE;SACzC,MAAM,GAAG,GAAG,iCAAiC;SAC7C,IAAI,GAAG,GAAG,KAAK;SACf,IAAI,MAAM,EAAE;aACR,GAAG,GAAG,IAAI;AACtB;AACA,SAAQ,IAAI;aACA,GAAG,CAAC,MAAM,CAAC,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;aACrC;AACZ;SACQ,OAAO,GAAG,EAAE;aACR,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,GAAG,GAAG;AAC1D,aAAY,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;AAC/C;AACA;AACA;AACA;AACA;AACA;KACI,OAAO,CAAC,GAAG,EAAE;SACT,MAAM,GAAG,GAAG,SAAS;AAC7B,SAAQ,IAAI;aACA,GAAG,CAAC,KAAK,EAAE;aACX;AACZ;SACQ,OAAO,GAAG,EAAE;aACR,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,GAAG,GAAG;AAC1D,aAAY,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;AAC/C;AACA;AACA;AACA;AACA;AACA;KACI,UAAU,CAAC,GAAG,EAAE;SACZ,MAAM,GAAG,GAAG,YAAY;AAChC,SAAQ,IAAI;aACA,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,cAAc,CAAC;AACrD,aAAY,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC,YAAY;AACzC;SACQ,OAAO,GAAG,EAAE;aACR,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,GAAG,GAAG;AAC1D,aAAY,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI,UAAU,CAAC,GAAG,EAAE,OAAO,EAAE;SACrB,MAAM,GAAG,GAAG,YAAY;AAChC,SAAQ,IAAI;aACA,GAAG,CAAC,MAAM,CAAC,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;aACzC;AACZ;SACQ,OAAO,GAAG,EAAE;aACR,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,GAAG,GAAG;AAC1D,aAAY,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI,cAAc,CAAC,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE;AAClD,SAAQ,IAAI,GAAG;SACP,MAAM,GAAG,GAAG,gBAAgB;AACpC,SAAQ,IAAI;aACA,GAAG,GAAG,IAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC;aACxD,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,QAAQ,EAAE,WAAW,CAAC;AACxD;SACQ,OAAO,GAAG,EAAE;aACR,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,GAAG,GAAG;AAC1D,aAAY,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;AAC/C;iBACgB;AAChB,aAAY,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;AAC7B;SACQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI,WAAW,CAAC,GAAG,EAAE,UAAU,EAAE,aAAa,EAAE;SACxC,MAAM,GAAG,GAAG,eAAe;AACnC,SAAQ,IAAI;AACZ,aAAY,GAAG,CAAC,MAAM,CAAC,CAAC,kBAAkB,CAAC,CAAC;AAC5C,aAAY,GAAG,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC;aACtB,GAAG,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;aACjC,GAAG,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC;aACtC;AACZ;SACQ,OAAO,GAAG,EAAE;aACR,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,GAAG,GAAG;AAC1D,aAAY,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI,gBAAgB,CAAC,EAAE,EAAE,MAAM,EAAE;AACjC;SACQ,MAAM,GAAG,GAAG,oBAAoB;SAChC,IAAI,CAAC,MAAM,EAAE;aACT,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,oBAAoB,CAAC,CAAC;AACzD;SACQ,MAAM,GAAG,GAAG,oBAAoB;AACxC,SAAQ,IAAI;AACZ,aAAY,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC;aACZ;AACZ;SACQ,OAAO,GAAG,EAAE;aACR,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,GAAG,GAAG;AAC1D,aAAY,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI,mBAAmB,CAAC,EAAE,EAAE,MAAM,EAAE;SAC5B,MAAM,GAAG,GAAG,uBAAuB;SACnC,IAAI,CAAC,MAAM,EAAE;aACT,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,oBAAoB,CAAC,CAAC;AACzD;SACQ,MAAM,GAAG,GAAG,uBAAuB;AAC3C,SAAQ,IAAI;AACZ,aAAY,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC;aACZ;AACZ;SACQ,OAAO,GAAG,EAAE;aACR,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,GAAG,GAAG;AAC1D,aAAY,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI,iBAAiB,CAAC,EAAE,EAAE,MAAM,EAAE;SAC1B,MAAM,GAAG,GAAG,qBAAqB;SACjC,IAAI,CAAC,MAAM,EAAE;aACT,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,oBAAoB,CAAC,CAAC;AACzD;SACQ,MAAM,GAAG,GAAG,qBAAqB;AACzC,SAAQ,IAAI;AACZ,aAAY,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC;aACZ;AACZ;SACQ,OAAO,GAAG,EAAE;aACR,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,GAAG,GAAG;AAC1D,aAAY,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;KACI,SAAS,CAAC,EAAE,EAAE;SACV,MAAM,GAAG,GAAG,aAAa;SACzB,IAAI,OAAO,GAAG,CAAC;AACvB,SAAQ,IAAI;aACA,MAAM,SAAS,GAAG,EAAE,CAAC,OAAO,CAAC,wBAAwB,CAAC;AAClE,aAAY,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,EAAE;AAC5C,aAAY,IAAI,QAAQ,IAAI,IAAI,EAAE;iBAClB,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AACpD,iBAAgB,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC;AACvC;AACA,aAAY,OAAO,OAAO;AAC1B;SACQ,OAAO,GAAG,EAAE;aACR,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,GAAG,GAAG;AAC1D,aAAY,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;AAC/C;AACA;AACA;AACA;AACA;AACA;KACI,SAAS,CAAC,EAAE,EAAE;SACV,MAAM,GAAG,GAAG,aAAa;AACjC,SAAQ,IAAI,MAAM,GAAG,EAAE;AACvB,SAAQ,IAAI;aACA,MAAM,SAAS,GAAG,EAAE,CAAC,OAAO,CAAC,4BAA4B,CAAC;AACtE,aAAY,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,EAAE;AAC5C,aAAY,IAAI,QAAQ,IAAI,IAAI,EAAE;iBAClB,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AACpD,iBAAgB,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC;AACtC;AACA,aAAY,OAAO,MAAM;AACzB;SACQ,OAAO,GAAG,EAAE;aACR,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,GAAG,GAAG;AAC1D,aAAY,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;KACI,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE;AACzC,SAAQ,MAAM,MAAM,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE;SACzC,MAAM,GAAG,GAAG,SAAS;AAC7B,SAAQ,IAAI,OAAO,GAAG,EAAE;AACxB,SAAQ,IAAI,MAAM,GAAG,EAAE;AACvB,SAAQ,IAAI,WAAW,GAAG,EAAE;AAC5B,SAAQ,IAAI;AACZ,aAAY,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;aACjC,IAAI,OAAO,GAAG,GAAG;AAC7B;AACA,aAAY,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,OAAO,CAAC;AACzE,aAAY,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC;aACzB,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,WAAW;AACvD,aAAY,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;AACxC,aAAY,MAAM,CAAC,OAAO,GAAG,OAAO;AACpC,aAAY,MAAM,CAAC,MAAM,GAAG,MAAM;AAClC,aAAY,OAAO,MAAM;AACzB;SACQ,OAAO,GAAG,EAAE;aACR,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,GAAG,GAAG;AAC1D,aAAY,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;AAC/C;AACA;KACI,iBAAiB,CAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE;AACnD;AACA,SAAQ,IAAI,OAAO,GAAG,GAAG,CAAC;AAC1B;SACQ,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC;SAC1C,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC;SAC5C,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC;SACnC,MAAM,MAAM,GAAG,EAAE;AACzB;AACA,SAAQ,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE;AACrC,aAAY,IAAI,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE;AACnC,aAAY,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE;AAC9D,aAAY,QAAQ,QAAQ;AAC5B,iBAAgB,KAAK,QAAQ;AAC7B,qBAAoB,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;yBACxB,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC;AAC9D;qBACoB;AACpB,iBAAgB,KAAK,QAAQ;AAC7B,qBAAoB,IAAI,CAAC,QAAQ,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,EAAE;yBAClE,IAAI,SAAS,GAAG,KAAK;yBACrB,IAAI,CAAC,OAAO;AACpC,6BAA4B,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;yBAC1C,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,SAAS,EAAE,EAAE,CAAC;AAClE;qBACoB;AACpB,iBAAgB,KAAK,QAAQ;AAC7B,qBAAoB,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,EAAE;yBACtD,IAAI,CAAC,OAAO;AACpC,6BAA4B,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;AAC9D;qBACoB;AACpB,iBAAgB,KAAK,QAAQ;AAC7B,qBAAoB,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,EAAE;yBACnD,IAAI,CAAC,OAAO;AACpC,6BAA4B,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;AACzE;qBACoB;AACpB,iBAAgB,KAAK,QAAQ;AAC7B,qBAAoB,IAAI,CAAC,QAAQ,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,EAAE;yBAClE,IAAI,CAAC,OAAO;AACpC,6BAA4B,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;AAC9D;qBACoB;AAGpB;AACA,aAAY,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;AAC9B;AACA,SAAQ,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;AACpC,SAAQ,OAAO,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA,KAAI,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE;SACb,MAAM,GAAG,GAAG,UAAU;AAC9B,SAAQ,IAAI;AACZ,aAAY,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC;aACb;AACZ;SACQ,OAAO,GAAG,EAAE;aACR,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,GAAG,GAAG;AAC1D,aAAY,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;KACI,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE;AACxD,SAAQ,MAAM,GAAG,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;AAC1D,SAAQ,IAAI,MAAM,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE;SACvC,MAAM,GAAG,GAAG,YAAY;AAChC,SAAQ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC7C,aAAY,MAAM,SAAS,GAAG,WAAW,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,IAAI;AAC7E,aAAY,MAAM,MAAM,GAAG,QAAQ,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,EAAE;AAC9F,aAAY,IAAI,SAAS,IAAI,IAAI,EAAE;iBACnB,IAAI,GAAG,GAAG,+BAA+B;AACzD,iBAAgB,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;AACxC,iBAAgB,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC;AACpC;AACA,aAAY,IAAI;iBACA,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE;AAC9C,qBAAoB,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE;yBACtB,MAAM,IAAI,GAAG,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC;AACrE,yBAAwB,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,CAAC;AAC5F,yBAAwB,GAAG,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO;AACrD,yBAAwB,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM;yBAC1B,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;AACxD,yBAAwB,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;6BACrD,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;AAC1D;AACA;AACA;sBACqB;AACrB,qBAAoB,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;yBACnB,MAAM,IAAI,GAAG,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC;AACxE,yBAAwB,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,CAAC;AAC5F;0BACyB;yBACD,IAAI,UAAU,GAAG,SAAS;yBAC1B,IAAI,CAAC,OAAO,EAAE;AACtC,6BAA4B,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC;AACvE;AACA,yBAAwB,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,UAAU,EAAE,EAAE,EAAE,QAAQ,EAAE,UAAU,CAAC;AAC3F;AACA,qBAAoB,GAAG,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO;AACjD,qBAAoB,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM;qBAC1B,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;AACpD,qBAAoB,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;yBACrD,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;AACtD;AACA;AACA;aACY,OAAO,GAAG,EAAE;iBACR,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,GAAG,GAAG;AAC9D,iBAAgB,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;AACnD;AACA;AACA,SAAQ,OAAO,GAAG;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;KACI,UAAU,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE;AAC7D,SAAQ,MAAM,MAAM,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE;SACzC,MAAM,GAAG,GAAG,YAAY;AAChC,SAAQ,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE;SAC7D,IAAI,OAAO,GAAG,SAAS;AAC/B,SAAQ,IAAI;AACZ,aAAY,IAAI,CAAC,QAAQ,IAAI,QAAQ,KAAK,QAAQ,EAAE;iBACpC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,CAAC;AAChE;AACA,aAAY,MAAM,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,EAAE;aACpC,IAAI,IAAI,GAAG,EAAE;AACzB,aAAY,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;AACpC,iBAAgB,IAAI,GAAG,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC;cAC9C;AACb;AACA;AACA;AACA;AACA;AACA;AACA,aAAY,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,CAAC;AACpE,aAAY,IAAI,GAAG,CAAC,MAAM,IAAI,IAAI,EAAE;AACpC,iBAAgB,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM;AAC1C,iBAAgB,MAAM,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO;AAC5C,iBAAgB,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC,eAAe;AACnD;kBACiB;AACjB,iBAAgB,MAAM,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO;AAC5C,iBAAgB,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC,eAAe;AACnD;AACA,aAAY,OAAO,MAAM;AACzB;SACQ,OAAO,GAAG,EAAE;aACR,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,GAAG,GAAG;AAC1D,aAAY,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;AAC/C;AACA;KACI,OAAO,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,GAAG,EAAE,EAAE,UAAU,EAAE;AAChD,SAAQ,IAAI,MAAM,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE,eAAe,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;SAC5D,MAAM,GAAG,GAAG,WAAW;AAC/B,SAAQ,IAAI;aACA,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,UAAU,CAAC;aACrD,QAAQ,MAAM,CAAC,KAAK;iBAChB,KAAK,KAAK,EAAE;qBACR,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;AAC1D,qBAAoB,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;yBACrB,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE;AAC7D,yBAAwB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;yBACzB,MAAM,CAAC,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;AACpE;0BACyB;yBACD,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC;yBACvC,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC;yBAC1C,MAAM,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC;AACzD,yBAAwB,MAAM,CAAC,eAAe,GAAG,GAAG,CAAC,eAAe;yBAC5C,MAAM,GAAG,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,SAAS,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC,CAAC;AAC/G,yBAAwB,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,CAAC;AACvE,yBAAwB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;AACjD;qBACoB,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,UAAU;qBACjD;AACpB;iBACgB,KAAK,KAAK,EAAE;qBACR,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;AAC1D,qBAAoB,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;AAC7C,yBAAwB,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE;yBACvC,MAAM,CAAC,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;AACpE;0BACyB;yBACD,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC;yBACvC,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC;yBAC1C,MAAM,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC;AACzD,yBAAwB,MAAM,OAAO,GAAG,GAAG,CAAC,eAAe;yBACnC,MAAM,GAAG,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,SAAS,CAAC,qBAAqB,EAAE,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;AACpI,yBAAwB,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,CAAC;AACzE,yBAAwB,MAAM,CAAC,eAAe,GAAG,GAAG,CAAC,eAAe;AACpE;qBACoB,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,UAAU;qBACjD;AACpB;AACA,iBAAgB,SAAS;qBACL,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC;qBAC1C,IAAI,MAAM,IAAI,IAAI,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;AAC7D,yBAAwB,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC;AACtD;0BACyB;AACzB,yBAAwB,MAAM,GAAG,SAAS,CAAC,GAAG,EAAE;AAChD;AACA;AACA;AACA,aAAY,OAAO,MAAM;AACzB;SACQ,OAAO,GAAG,EAAE;aACR,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,GAAG,GAAG;AAC1D,aAAY,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;KACI,sBAAsB,CAAC,MAAM,EAAE;SAC3B,MAAM,SAAS,GAAG,EAAE;AAC5B,SAAQ,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;AAC/B,aAAY,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE;iBACtB,IAAI,IAAI,GAAG,GAAG;AAC9B,iBAAgB,IAAI,OAAO,GAAG,KAAK,WAAW;qBAC1B,IAAI,GAAG,IAAI;AAC/B,iBAAgB,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;AACpC;AACA;AACA,SAAQ,OAAO,SAAS;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI,SAAS,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE;SAC9B,IAAI,OAAO,GAAG,SAAS;SACvB,MAAM,GAAG,GAAG,WAAW;AAC/B,SAAQ,IAAI;aACA,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,IAAI,CAAC;aAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC;AACtD,aAAY,IAAI,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE;AACnC,iBAAgB,OAAO,OAAO;AAC9B;AACA;AACA;AACA;aACY,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,OAAO,CAAC;aAC7D,IAAI,CAAC,WAAW,EAAE;iBACd,MAAM,GAAG,GAAG,uCAAuC;iBACnD,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AACzC;aACY,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,OAAO,CAAC;aACzD,IAAI,CAAC,SAAS,EAAE;iBACZ,MAAM,GAAG,GAAG,uCAAuC;iBACnD,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AACzC;aACY,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,WAAW,CAAC;AAC1E,aAAY,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;iBACvB,MAAM,GAAG,GAAG,6DAA6D;iBACzE,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AACzC;aACY,MAAM,OAAO,GAAG,iBAAiB;AAC7C;AACA;AACA,aAAY,MAAM,WAAW,GAAG,IAAI,CAAC,uBAAuB,CAAC,GAAG,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,CAAC;aAC/F,IAAI,WAAW,EAAE;iBACb,MAAM,SAAS,GAAG,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,WAAW;AACpG,iBAAgB,OAAO,GAAG,CAAC,OAAO,EAAE,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,OAAO,EAAE,SAAS,CAAC,qBAAqB,CAAC;AACtG;kBACiB;iBACD,OAAO,GAAG,EAAE;AAC5B;AACA,aAAY,OAAO,OAAO;AAC1B;SACQ,OAAO,GAAG,EAAE;aACR,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,GAAG,GAAG;AAC1D,aAAY,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;KACI,uBAAuB,CAAC,GAAG,EAAE,SAAS,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,EAAE;AAC7E,SAAQ,IAAI;aACA,MAAM,OAAO,GAAG,IAAI;aACpB,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,SAAS,CAAC;AAC7D,aAAY,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO;AAC7C,aAAY,MAAM,iBAAiB,GAAG,MAAM,CAAC,aAAa;AAC1D,aAAY,IAAI,UAAU,CAAC,MAAM,IAAI,CAAC,EAAE;AACxC,iBAAgB,OAAO,OAAO;AAC9B;AACA,aAAY,IAAI,SAAS,KAAK,iBAAiB,EAAE;AACjD,iBAAgB,OAAO,OAAO;AAC9B;AACA;AACA,aAAY,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE;AAC1C;iBACgB,MAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,qBAAqB,CAAC,GAAG,CAAC;AAC/E;AACA,iBAAgB,MAAM,QAAQ,GAAG,cAAc,CAAC,SAAS;iBACzC,IAAI,QAAQ,KAAK,EAAE,IAAI,QAAQ,KAAK,SAAS,EAAE;qBAC3C;AACpB;AACA;AACA,iBAAgB,MAAM,aAAa,GAAG,cAAc,CAAC,OAAO;AAC5D;AACA,iBAAgB,MAAM,QAAQ,GAAG,cAAc,CAAC,OAAO;iBACvC,IAAI,QAAQ,CAAC,MAAM,KAAK,aAAa,CAAC,MAAM,EAAE;qBAC1C,MAAM,GAAG,GAAG,0CAA0C;AAC1E,qBAAoB,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC;AACxC;AACA,iBAAgB,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM;AACpD,iBAAgB,IAAI,MAAM,KAAK,WAAW,EAAE;qBACxB;AACpB;iBACgB,MAAM,YAAY,GAAG,iBAAiB;iBACtC,MAAM,WAAW,GAAG,aAAa;iBACjC,IAAI,OAAO,GAAG;qBACV,UAAU,EAAE,EAAE;qBACd,OAAO,EAAE,EAAE;kBACd;AACjB,iBAAgB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,aAAa,EAAE,YAAY,CAAC,EAAE;AACjF;AACA;qBACoB,MAAM,MAAM,GAAG,IAAI,CAAC,qBAAqB,CAAC,GAAG,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,CAAC;AACvI,qBAAoB,IAAI,MAAM,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,EAAE;yBAC5D;AACxB;AACA,qBAAoB,IAAI,YAAY,KAAK,SAAS,EAAE;AACpD,yBAAwB,QAAQ,MAAM;AACtC,6BAA4B,KAAK,UAAU;iCACX,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,sBAAsB,CAAC,MAAM,CAAC;iCACrD;AAChC,6BAA4B,KAAK,SAAS;iCACV,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,qBAAqB,CAAC,MAAM,CAAC;iCACpD;6BACJ;iCACI,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,qBAAqB,CAAC,aAAa,EAAE,MAAM,CAAC;iCACnE;AAChC;AACA;AACA;sBACqB;AACrB,qBAAoB,MAAM,IAAI,KAAK,CAAC,gEAAgE,CAAC;AACrG;AACA,iBAAgB,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;AACjF,qBAAoB,IAAI,CAAC,sBAAsB,CAAC,GAAG,EAAE,YAAY,EAAE,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,OAAO,EAAE,WAAW,EAAE,MAAM,CAAC;AAC5H;AACA;AACA,aAAY,OAAO,OAAO;AAC1B;SACQ,OAAO,KAAK,EAAE;aACV,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,GAAG,KAAK;AAC7D,aAAY,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI,aAAa,CAAC,EAAE,EAAE,SAAS,EAAE;SACzB,MAAM,OAAO,GAAG,gCAAgC;AACxD,aAAY,mEAAmE;AAC/E,aAAY,aAAa;AACzB,aAAY,SAAS;AACrB,aAAY,kCAAkC;AAC9C,SAAQ,IAAI;AACZ,aAAY,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,CAAC;AAC5D;aACY,IAAI,OAAO,GAAG,EAAE;aAChB,IAAI,aAAa,GAAG,EAAE;AAClC,aAAY,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE;AAChC,iBAAgB,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;AACvD,iBAAgB,OAAO,GAAG,MAAM,CAAC,WAAW;AAC5C,iBAAgB,aAAa,GAAG,MAAM,CAAC,SAAS;AAChD;aACY,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,OAAO,EAAE,OAAO,EAAE;AACrE;SACQ,OAAO,GAAG,EAAE;aACR,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,GAAG,GAAG;aAC7C,MAAM,GAAG,GAAG,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;AACjD,aAAY,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;KACI,OAAO,CAAC,YAAY,EAAE;SAClB,IAAI,SAAS,GAAG,EAAE;SAClB,MAAM,WAAW,GAAG,EAAE;SACtB,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,sBAAsB,CAAC,YAAY,CAAC;AAC5E,SAAQ,IAAI;AACZ;aACY,MAAM,gBAAgB,GAAG,6BAA6B;aACtD,MAAM,cAAc,GAAG,SAAS,CAAC,KAAK,CAAC,gBAAgB,CAAC;aACxD,IAAI,cAAc,EAAE;AAChC,iBAAgB,SAAS,GAAG,cAAc,CAAC,CAAC,CAAC;AAC7C;AACA;aACY,MAAM,iBAAiB,GAAG,qIAAqI;aAC/J,MAAM,iBAAiB,GAAG,SAAS,CAAC,QAAQ,CAAC,iBAAiB,CAAC;AAC3E,aAAY,KAAK,MAAM,eAAe,IAAI,iBAAiB,EAAE;AAC7D,iBAAgB,MAAM,UAAU,GAAG,eAAe,CAAC,CAAC,CAAC;AACrD,iBAAgB,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC;AAC5C;AACA;SACQ,OAAO,KAAK,EAAE;aACV,MAAM,GAAG,GAAG,CAAC,4CAA4C,EAAE,KAAK,CAAC,CAAC;AAC9E,aAAY,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC;AAChC;AACA,SAAQ,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI,sBAAsB,CAAC,GAAG,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE;AACjF,SAAQ,IAAI;AACZ,aAAY,IAAI,MAAM,GAAG,CAAC,CAAC;AAC3B;AACA,aAAY,MAAM,IAAI,GAAG,CAAC,OAAO,EAAE,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;aAC9D,MAAM,SAAS,GAAG,EAAE;AAChC,aAAY,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;iBACnB,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC;iBACnC,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE;qBACnC,MAAM,CAAC,GAAG,EAAE;AAChC;AACA,iBAAgB,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE;AAC9D,qBAAoB,KAAK,MAAM,MAAM,IAAI,QAAQ,EAAE;AACnD,yBAAwB,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;AACpF,yBAAwB,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;6BACpB,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AACvD;AACA;AACA;AACA;AACA,aAAY,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC;AACnE,aAAY,MAAM,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAC9C,aAAY,IAAI,MAAM,KAAK,CAAC,CAAC,EAAE;iBACf,MAAM,GAAG,GAAG,CAAC,qCAAqC,EAAE,SAAS,CAAC,CAAC;AAC/E,iBAAgB,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC;AACpC;AACA;SACQ,OAAO,KAAK,EAAE;aACV,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,GAAG,KAAK;AAC7D,aAAY,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;KACI,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE;SAChC,MAAM,GAAG,GAAG,UAAU;AAC9B,SAAQ,IAAI;aACA,IAAI,IAAI,GAAG,GAAG;aACd,IAAI,CAAC,OAAO,EAAE;AAC1B,iBAAgB,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC;AAC/C;aACY,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC;AAC1C,aAAY,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AAC9B;iBACgB,IAAI,MAAM,IAAI,IAAI,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;AACzD,qBAAoB,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC;AACpC;sBACqB;qBACD,IAAI,CAAC,GAAG,EAAE;AAC9B;AACA,iBAAgB,OAAO,EAAE;AACzB;AACA,aAAY,IAAI,IAAI;aACR,IAAI,MAAM,IAAI,IAAI,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;AACrD,iBAAgB,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC;AACvC;kBACiB;AACjB,iBAAgB,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE;AACjC;AACA,aAAY,IAAI,IAAI,IAAI,IAAI,EAAE;iBACd,IAAI,GAAG,EAAE;AACzB;AACA,aAAY,OAAO,IAAI;AACvB;SACQ,OAAO,GAAG,EAAE;aACR,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,GAAG,GAAG;AAC1D,aAAY,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;KACI,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE;SAChC,MAAM,GAAG,GAAG,UAAU;AAC9B,SAAQ,IAAI;aACA,IAAI,IAAI,GAAG,GAAG;aACd,IAAI,CAAC,OAAO,EAAE;AAC1B,iBAAgB,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC;AAC/C;aACY,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC;AAC1C,aAAY,IAAI,GAAG;aACP,IAAI,MAAM,IAAI,IAAI,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;AACrD,iBAAgB,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC;AACtC;kBACiB;AACjB,iBAAgB,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;AAChC;AACA,aAAY,OAAO,GAAG;AACtB;SACQ,OAAO,GAAG,EAAE;aACR,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,GAAG,GAAG;AAC1D,aAAY,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;AAC/C;AACA;AACA;AACA;AACA;AACA;KACI,cAAc,CAAC,GAAG,EAAE;SAChB,MAAM,GAAG,GAAG,gBAAgB;SAC5B,IAAI,GAAG,GAAG,uCAAuC;SACjD,GAAG,IAAI,8CAA8C;SACrD,GAAG,IAAI,8BAA8B;SACrC,GAAG,IAAI,+BAA+B;SACtC,GAAG,IAAI,yBAAyB;SAChC,MAAM,MAAM,GAAG,EAAE;AACzB,SAAQ,IAAI;AACZ,aAAY,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,CAAC;AAC9D,aAAY,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE;AAC1C,iBAAgB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;AACvC;AACA,aAAY,OAAO,MAAM;AACzB;SACQ,OAAO,GAAG,EAAE;aACR,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,GAAG,GAAG;AAC1D,aAAY,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;AAC/C;AACA;AACA;AACA;AACA;AACA;KACI,aAAa,CAAC,GAAG,EAAE;SACf,MAAM,GAAG,GAAG,eAAe;SAC3B,IAAI,GAAG,GAAG,uCAAuC;SACjD,GAAG,IAAI,2CAA2C;SAClD,GAAG,IAAI,yBAAyB;SAChC,MAAM,MAAM,GAAG,EAAE;AACzB,SAAQ,IAAI;AACZ,aAAY,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,CAAC;AAC9D,aAAY,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE;AAC1C,iBAAgB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;AACvC;AACA,aAAY,OAAO,MAAM;AACzB;SACQ,OAAO,GAAG,EAAE;aACR,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,GAAG,GAAG;AAC1D,aAAY,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE;SACxB,MAAM,GAAG,GAAG,gBAAgB;SAC5B,IAAI,CAAC,MAAM,EAAE;aACT,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,oBAAoB,CAAC,CAAC;AACzD;AACA,SAAQ,IAAI;aACA,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC;AACtD,aAAY,KAAK,MAAM,KAAK,IAAI,SAAS,EAAE;iBAC3B,MAAM,eAAe,GAAG,IAAI,CAAC,wBAAwB,CAAC,GAAG,EAAE,KAAK,CAAC;AACjF,iBAAgB,MAAM,gBAAgB,GAAG,eAAe,CAAC,KAAK;AAC9D,iBAAgB,IAAI,gBAAgB,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE;AAChE,qBAAoB,OAAO,IAAI;AAC/B;AACA;AACA,aAAY,OAAO,KAAK;AACxB;SACQ,OAAO,GAAG,EAAE;aACR,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,GAAG,GAAG;AAC1D,aAAY,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE;SACtB,MAAM,GAAG,GAAG,cAAc;SAC1B,IAAI,CAAC,MAAM,EAAE;aACT,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,oBAAoB,CAAC,CAAC;AACzD;AACA,SAAQ,IAAI;aACA,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC;AACtD,aAAY,KAAK,MAAM,KAAK,IAAI,SAAS,EAAE;iBAC3B,MAAM,eAAe,GAAG,IAAI,CAAC,wBAAwB,CAAC,GAAG,EAAE,KAAK,CAAC;AACjF,iBAAgB,MAAM,gBAAgB,GAAG,eAAe,CAAC,KAAK;AAC9D,iBAAgB,IAAI,gBAAgB,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE;AAC9D,qBAAoB,OAAO,IAAI;AAC/B;AACA;AACA,aAAY,OAAO,KAAK;AACxB;SACQ,OAAO,GAAG,EAAE;aACR,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,GAAG,GAAG;AAC1D,aAAY,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;AAC/C;AACA;KACI,cAAc,CAAC,GAAG,EAAE;SAChB,MAAM,GAAG,GAAG,gBAAgB;AACpC,SAAQ,IAAI;aACA,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,cAAc,CAAC;AACtD,aAAY,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC,YAAY;AAC1C;SACQ,OAAO,GAAG,EAAE;aACR,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,GAAG,GAAG;AAC1D,aAAY,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;AAC/C;AACA;AACA,KAAI,MAAM,mBAAmB,CAAC,MAAM,EAAE;SAC9B,MAAM,GAAG,GAAG,qBAAqB;AACzC,SAAQ,IAAI;aACA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,MAAM,CAAC;aACnD,IAAI,QAAQ,EAAE;iBACV,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC;AAClE,iBAAgB,OAAO,MAAM,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC;AACzD;kBACiB;AACjB,iBAAgB,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,WAAW,EAAE,MAAM,CAAC,eAAe,CAAC,CAAC;AAC5E;AACA;SACQ,OAAO,GAAG,EAAE;aACR,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,GAAG,GAAG;AAC1D,aAAY,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;AAC/C;AACA;AACA,KAAI,MAAM,aAAa,CAAC,QAAQ,EAAE;AAClC,SAAQ,IAAI;aACA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,QAAQ,EAAE;iBAC3D,KAAK,EAAE,CAAC;iBACR,GAAG,EAAE,EAAE;AACvB,cAAa,CAAC;aACF,IAAI,MAAM,KAAK,eAAe;AAC1C,iBAAgB,OAAO,KAAK;AAC5B;AACA,iBAAgB,OAAO,IAAI;AAC3B;SACQ,OAAO,KAAK,EAAE;AACtB,aAAY,OAAO,IAAI;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI,wBAAwB,CAAC,GAAG,EAAE,SAAS,EAAE;SACrC,MAAM,GAAG,GAAG,0BAA0B;AAC9C,SAAQ,IAAI;AACZ,aAAY,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,YAAY,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC;aACtD,MAAM,QAAQ,GAAG,EAAE;aACnB,MAAM,QAAQ,GAAG,EAAE;AAC/B,aAAY,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;AACtC,iBAAgB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AACxC,iBAAgB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AACxC;aACY,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE;AACvD;SACQ,OAAO,GAAG,EAAE;aACR,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,GAAG,GAAG;AAC1D,aAAY,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;AAC/C;AACA;AACA,KAAI,qBAAqB,CAAC,GAAG,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,EAAE;SACzF,MAAM,YAAY,GAAG,EAAE;SACvB,IAAI,GAAG,GAAG,EAAE;AACpB,SAAQ,MAAM,OAAO,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;AACjE,SAAQ,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;AAC5D,SAAQ,IAAI;AACZ;AACA,aAAY,IAAI,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,sBAAsB,CAAC,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,KAAK,CAAC;AAC1G;AACA,aAAY,IAAI,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;iBAC3B,WAAW,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACtD;AACA,aAAY,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,KAAK,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC;aAC1F,MAAM,GAAG,GAAG,CAAC,qBAAqB,EAAE,YAAY,CAAC,IAAI,CAAC;iBAClD,CAAC,KAAK,EAAE,SAAS,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC;AAC1D,iBAAgB,CAAC,MAAM,EAAE,WAAW,CAAC,wBAAwB,CAAC;AAC9D,aAAY,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC;AAC9D,aAAY,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;AACjC,iBAAgB,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7C,iBAAgB,YAAY,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AAC1C;aACY,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,YAAY,EAAE,YAAY,EAAE;AAC3D;SACQ,OAAO,KAAK,EAAE;aACV,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,GAAG,KAAK;AAC7D,aAAY,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC;AAChC;AACA;KACI,cAAc,CAAC,IAAI,EAAE;SACjB,IAAI,GAAG,GAAG,EAAE;AACpB,SAAQ,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC,WAAW,EAAE,CAAC;aACxD,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;aACnD,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;AAC/D,aAAY,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC,WAAW,EAAE,CAAC,EAAE;AACtE;AACA,aAAY,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;aAC/B,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,GAAG,CAAC;aAC1C,GAAG,GAAG,GAAG,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC;AAC1C;cACa;aACD,GAAG,GAAG,IAAI;AACtB;AACA,SAAQ,OAAO,GAAG;AAClB;AACA,KAAI,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE;SACjB,MAAM,CAAC,GAAG,EAAE;SACZ,KAAK,IAAI,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE;AACpC,aAAY,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI;AAC9B,iBAAgB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AACzB,SAAQ,OAAO,CAAC,CAAC,OAAO,EAAE;AAC1B;KACI,cAAc,CAAC,IAAI,EAAE;SACjB,IAAI,OAAO,GAAG,IAAI;SAClB,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,GAAG,CAAC;SACpC,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,GAAG,CAAC;AAC5C,SAAQ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;aAChC,MAAM,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC;aAClE,OAAO,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACpF;AACA,SAAQ,OAAO,OAAO;AACtB;KACI,WAAW,CAAC,OAAO,EAAE;AACzB,SAAQ,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE;AACjC,SAAQ,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE;AACzD,SAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AAChC,aAAY,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE;AAC3C;AACA,SAAQ,QAAQ,QAAQ;aACZ,KAAK,QAAQ,EAAE;iBACX,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC;AAC9D,iBAAgB,IAAI,uBAAuB,GAAG,EAAE;AAChD,iBAAgB,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,WAAW,EAAE,CAAC,EAAE,EAAE;AACrE,qBAAoB,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;yBACjB,uBAAuB,GAAG,CAAC;yBAC3B;AACxB;AACA;AACA,iBAAgB,IAAI,uBAAuB,KAAK,EAAE,EAAE;AACpD,qBAAoB,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,uBAAuB,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,GAAG;AAClG,qBAAoB,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,uBAAuB,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE;qBACjE,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE;AACpE,yBAAwB,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE;AACtF;0BACyB;yBACD,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE;AACvE;AACA;iBACgB,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE;AAC/D;AACA,aAAY,KAAK,QAAQ;aACb,KAAK,QAAQ,EAAE;iBACX,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;iBAC/B,MAAM,oBAAoB,GAAG,EAAE;iBAC/B,MAAM,eAAe,GAAG,EAAE;iBAC1B,IAAI,yBAAyB,GAAG,KAAK;AACrD,iBAAgB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;AAC1C,qBAAoB,IAAI,IAAI,CAAC,WAAW,EAAE,KAAK,WAAW,EAAE;yBACpC,yBAAyB,GAAG,IAAI;AACxD,yBAAwB,eAAe,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;yBAC3D;AACxB;AACA,qBAAoB,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC;AACnD;iBACgB,IAAI,yBAAyB,EAAE;qBAC3B,MAAM,WAAW,GAAG,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG;qBACxD,IAAI,qBAAqB,GAAG,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC;AACzE,qBAAoB,IAAI,qBAAqB,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;yBAC1E,qBAAqB,IAAI,GAAG;AACpD;AACA,qBAAoB,OAAO;yBACH,WAAW,EAAE,IAAI;yBACjB,IAAI,EAAE,WAAW;yBACjB,MAAM,EAAE,qBAAqB;sBAChC;AACrB;sBACqB;qBACD,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE;AACnE;AACA;aACY;iBACI,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE;AAC/D;AACA;AACA,KAAI,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE;SACpB,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;AACzC,SAAQ,IAAI,KAAK,KAAK,EAAE,EAAE;AAC1B,aAAY,OAAO,EAAE;AACrB;SACQ,OAAO,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC;AACrC;AACA,KAAI,eAAe,CAAC,OAAO,EAAE,UAAU,EAAE;SACjC,MAAM,MAAM,GAAG,EAAE;SACjB,MAAM,KAAK,GAAG,OAAO;AAC7B,SAAQ,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;AACrE,SAAQ,MAAM,CAAC,KAAK,GAAG,IAAI;AAC3B,SAAQ,MAAM,CAAC,IAAI,GAAG,IAAI;AAC1B,SAAQ,MAAM,CAAC,KAAK,GAAG,EAAE;SACjB,IAAI,WAAW,KAAK,UAAU,KAAK,KAAK,IAAI,UAAU,KAAK,KAAK,CAAC,EAAE;aAC/D,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;AACvD,aAAY,MAAM,CAAC,KAAK,GAAG,UAAU;AACrC,aAAY,MAAM,eAAe,GAAG,MAAM,CAAC,WAAW,EAAE;aAC5C,MAAM,cAAc,GAAG,eAAe,CAAC,OAAO,CAAC,WAAW,CAAC;AACvE,aAAY,IAAI,cAAc,KAAK,EAAE,EAAE;iBACvB,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC;AACnE,iBAAgB,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,EAAE;iBAC9B,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;AACnD;AACA;AACA,SAAQ,OAAO,MAAM;AACrB;KACI,QAAQ,CAAC,KAAK,EAAE;AACpB;SACQ,MAAM,cAAc,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;SACzC,MAAM,eAAe,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;SAC3C,MAAM,iBAAiB,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;AACrD;AACA,SAAQ,IAAI,QAAQ,GAAG,KAAK,CAAC,MAAM;AACnC,SAAQ,IAAI,cAAc,KAAK,EAAE,EAAE;aACvB,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,cAAc,CAAC;AACzD;AACA,SAAQ,IAAI,eAAe,KAAK,EAAE,EAAE;aACxB,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,eAAe,CAAC;AAC1D;AACA,SAAQ,IAAI,iBAAiB,KAAK,EAAE,EAAE;aAC1B,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,iBAAiB,CAAC;AAC5D;AACA;AACA,SAAQ,MAAM,QAAQ,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,IAAI,EAAE;AAC5D,SAAQ,OAAO,QAAQ;AACvB;KACI,YAAY,CAAC,YAAY,EAAE;SACvB,MAAM,QAAQ,GAAG;aACb,MAAM,EAAE,wBAAwB;aAChC,MAAM,EAAE,wBAAwB;aAChC,MAAM,EAAE,iBAAiB;aACzB,MAAM,EAAE,0BAA0B;UACrC;SACD,IAAI,SAAS,GAAG,IAAI;SACpB,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK;AAC5C,aAAY,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC;aAC7B,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC;aACxC,IAAI,KAAK,EAAE;AACvB,iBAAgB,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC;iBACpB,OAAO,IAAI,CAAC;AAC5B;AACA,aAAY,OAAO,KAAK;AACxB,UAAS,CAAC;AACV,SAAQ,OAAO,SAAS;AACxB;AACA;AACA,CAAA,WAAA,CAAA,WAAmB,GAAG,WAAW;AACjC;;;;;;;;;;;AC5sCA,CAAA,MAAM,CAAC,cAAc,CAAC,SAAO,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AAC7D,CAAiB,SAAA,CAAA,SAAA,GAAG,SAAM;CAC1B,MAAM,aAAa,GAAGJ,kBAAyB,EAAA;AAC/C,CAAA,MAAM,SAAS,CAAC;AAChB,KAAI,WAAW,GAAG;SACV,IAAI,CAAC,UAAU,GAAG,IAAI,aAAa,CAAC,WAAW,EAAE;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE;SAClC,MAAM,GAAG,GAAG,eAAe;SAC3B,IAAI,GAAG,GAAG,KAAK;SACf,IAAI,CAAC,MAAM,EAAE;aACT,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,oBAAoB,CAAC,CAAC;AACzD;SACQ,IAAI,KAAK,GAAG,uCAAuC;SACnD,KAAK,IAAI,CAAC,uBAAuB,EAAE,SAAS,CAAC,EAAE,CAAC;AACxD,SAAQ,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,CAAC;AACnE,SAAQ,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;aACjB,GAAG,GAAG,IAAI;AACtB;AACA,SAAQ,OAAO,GAAG;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE;SAChC,MAAM,GAAG,GAAG,cAAc;SAC1B,IAAI,GAAG,GAAG,KAAK;SACf,IAAI,CAAC,MAAM,EAAE;aACT,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,oBAAoB,CAAC,CAAC;AACzD;SACQ,IAAI,KAAK,GAAG,uCAAuC;SACnD,KAAK,IAAI,CAAC,sBAAsB,EAAE,QAAQ,CAAC,EAAE,CAAC;AACtD,SAAQ,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,CAAC;AACnE,SAAQ,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;aACjB,GAAG,GAAG,IAAI;AACtB;AACA,SAAQ,OAAO,GAAG;AAClB;AACA;AACA;AACA;AACA;AACA;AACA,KAAI,YAAY,CAAC,GAAG,EAAE,QAAQ,EAAE;AAChC;SACQ,MAAM,GAAG,GAAG,cAAc;SAC1B,IAAI,OAAO,GAAG,CAAC;AACvB,SAAQ,IAAI;AACZ;aACY,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC;AAChE,aAAY,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC;AACtC;SACQ,OAAO,GAAG,EAAE;AACpB,aAAY,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AAC5C;SACQ,MAAM,KAAK,GAAG,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC;AAC1D,SAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;aAClB,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;AAC/C,aAAY,IAAI;AAChB,iBAAgB,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,CAAC;AAC7F,iBAAgB,OAAO,GAAG,OAAO,CAAC,OAAO;AACzC,iBAAgB,IAAI,OAAO,GAAG,CAAC,EAAE;AACjC,qBAAoB,IAAI;yBACA,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC;AAC/E,yBAAwB,GAAG,CAAC,gBAAgB,CAAC,KAAK,CAAC;AACnD;qBACoB,OAAO,GAAG,EAAE;AAChC,yBAAwB,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC,CAAC;AACpE;AACA;AACA;aACY,OAAO,GAAG,EAAE;iBACR,MAAM,GAAG,GAAG,GAAG;AAC/B,iBAAgB,IAAI;qBACA,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC;AAC3E,qBAAoB,GAAG,CAAC,gBAAgB,CAAC,KAAK,CAAC;qBAC3B,MAAM,IAAI,KAAK,CAAC,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC,CAAC;AAC3D;iBACgB,OAAO,GAAG,EAAE;AAC5B,qBAAoB,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,YAAY,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;AACvE;AACA;AACA;AACA,SAAQ,IAAI;aACA,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC;AACjE,aAAY,GAAG,CAAC,gBAAgB,CAAC,KAAK,CAAC;AACvC,aAAY,OAAO,OAAO;AAC1B;SACQ,OAAO,GAAG,EAAE;AACpB,aAAY,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AAC5C;AACA;AACA;AACA;AACA;AACA;KACI,qBAAqB,CAAC,QAAQ,EAAE;SAC5B,MAAM,GAAG,GAAG,uBAAuB;SACnC,MAAM,UAAU,GAAG,EAAE;SACrB,IAAI,cAAc,GAAG,KAAK;SAC1B,IAAI,YAAY,GAAG,KAAK;AAChC;AACA,SAAQ,IAAI;AACZ,aAAY,KAAK,MAAM,MAAM,IAAI,QAAQ,CAAC,MAAM,EAAE;AAClD,iBAAgB,IAAI,MAAM,CAAC,MAAM,IAAI,IAAI,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,EAAE;AACxE;AACA,qBAAoB,UAAU,CAAC,IAAI,CAAC,6BAA6B,GAAG,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACvF,qBAAoB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;yBAC3C,IAAI,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;6BAChC,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE;iCACzB,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;iCACvE,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,eAAe,EAAE;qCAC7C,cAAc,GAAG,IAAI;AACzD;iCACgC,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,aAAa,EAAE;qCAC3C,YAAY,GAAG,IAAI;AACvD;AACA;kCACiC,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE;AAClE,iCAAgC,UAAU,CAAC,IAAI,CAAC,CAAC,aAAa,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AACzH;kCACiC,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE;AAClE,iCAAgC,UAAU,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AACtH;AACA;8BAC6B;6BACD,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE;AACzD,iCAAgC,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;iCACxE,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,eAAe,EAAE;qCAC7C,cAAc,GAAG,IAAI;AACzD;iCACgC,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,aAAa,EAAE;qCAC3C,YAAY,GAAG,IAAI;AACvD;AACA;kCACiC,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE;AAClE,iCAAgC,UAAU,CAAC,IAAI,CAAC,CAAC,aAAa,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC1H;kCACiC,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE;AAClE,iCAAgC,UAAU,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACvH;AACA;AACA;AACA,qBAAoB,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;AACzC,qBAAoB,IAAI,cAAc,IAAI,YAAY,EAAE;AACxD;yBACwB,IAAI,IAAI,GAAG,+BAA+B;yBAC1C,IAAI,IAAI,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;AAChD,yBAAwB,IAAI,IAAI,CAAC,uBAAuB,CAAC;yBACjC,IAAI,IAAI,CAAC,gBAAgB,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;yBACzC,IAAI,IAAI,wCAAwC;yBAChD,IAAI,IAAI,iCAAiC;yBACzC,IAAI,IAAI,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;AACjD,yBAAwB,IAAI,IAAI,CAAC,oBAAoB,CAAC;yBAC9B,IAAI,IAAI,8CAA8C;AAC9E,yBAAwB,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;AAC7C;AACA;AACA,iBAAgB,IAAI,MAAM,CAAC,OAAO,IAAI,IAAI,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,EAAE;AAC1E,qBAAoB,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,OAAO,EAAE;AACzD,yBAAwB,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI;yBAC7B,IAAI,IAAI,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,GAAG,GAAG,GAAG,EAAE,CAAC,qBAAqB,CAAC;AACjI,yBAAwB,IAAI,IAAI,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;AACnF,yBAAwB,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;AAC7C;AACA;AACA,iBAAgB,IAAI,MAAM,CAAC,QAAQ,IAAI,IAAI,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,EAAE;AAC5E,qBAAoB,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,QAAQ,EAAE;AACxD,yBAAwB,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI;AACrD,yBAAwB,IAAI,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;AAC1E,6BAA4B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;AACnG;AACA,yBAAwB,IAAI,IAAI,GAAG,CAAC,6BAA6B,CAAC;AAClE,yBAAwB,IAAI,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC;yBACzD,IAAI,IAAI,CAAC,SAAS;6BACd,IAAI,IAAI,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;yBAChC,IAAI,IAAI,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AAChD,yBAAwB,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;AAC7C;AACA;AACA;AACA,aAAY,OAAO,UAAU;AAC7B;SACQ,OAAO,GAAG,EAAE;AACpB,aAAY,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI,eAAe,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE;AACtC,SAAQ,IAAI,MAAM,GAAG,EAAE;SACf,MAAM,GAAG,GAAG,iBAAiB;AACrC,SAAQ,IAAI,OAAO;AACnB,SAAQ,IAAI;AACZ;AACA,aAAY,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC;aAC7D,IAAI,CAAC,WAAW,EAAE;AAC9B,iBAAgB,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;AACtE;AACA;AACA,aAAY,MAAM,eAAe,GAAG,IAAI,CAAC,UAAU,CAAC,wBAAwB,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC;AAC7F,aAAY,MAAM,gBAAgB,GAAG,eAAe,CAAC,KAAK;AAC1D,aAAY,MAAM,gBAAgB,GAAG,eAAe,CAAC,KAAK;AAC1D,aAAY,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC,EAAE;AAC/C,iBAAgB,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;AAC3E;AACA;AACA,aAAY,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;iBAC1C,IAAI,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;AACzC,iBAAgB,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC;iBAC7B,IAAI,KAAK,GAAG,IAAI;iBAChB,MAAM,IAAI,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,EAAE,gBAAgB,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC;AACrG,iBAAgB,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,IAAI,EAAE,gBAAgB,CAAC;iBACtE,IAAI,KAAK,EAAE;AAC3B,qBAAoB,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,KAAK,QAAQ,EAAE;yBACjD,GAAG,GAAG,EAAE;AAChC;AACA,qBAAoB,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC;AACpF,qBAAoB,MAAM,GAAG,OAAO,CAAC,MAAM;AAC3C,qBAAoB,IAAI,MAAM,GAAG,CAAC,EAAE;yBACZ,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC;AAC5D;AACA;sBACqB;qBACD,MAAM,GAAG,CAAC;AAC9B;AACA;AACA,aAAY,OAAO,OAAO;AAC1B;SACQ,OAAO,GAAG,EAAE;AACpB,aAAY,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AAC5C;AACA;KACI,aAAa,CAAC,GAAG,EAAE;AACvB;AACA,SAAQ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC7C;aACY,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,OAAO,IAAI,KAAK,QAAQ,CAAC,EAAE;iBAC3E,MAAM,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACzD,iBAAgB,GAAG,CAAC,CAAC,CAAC,GAAG,SAAS;AAClC;AACA;AACA,SAAQ,OAAO,GAAG;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI,kBAAkB,CAAC,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE;AAChE;SACQ,MAAM,GAAG,GAAG,oBAAoB;SAChC,IAAI,GAAG,CAAC,MAAM,IAAI,SAAS,CAAC,MAAM,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;aAC9E,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,mBAAmB,CAAC,CAAC;AAChG;AACA,SAAQ,IAAI;aACA,MAAM,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;AACvF,aAAY,IAAI,IAAI;AACpB,aAAY,IAAI,IAAI,KAAK,MAAM,KAAK,IAAI,KAAK,SAAS,IAAI,CAAC,aAAa,CAAC,EAAE;AAC3E;AACA,iBAAgB,MAAM,UAAU,GAAG,SAAS,CAAC,IAAI,EAAE;iBACnC,MAAM,kBAAkB,GAAG,IAAI,CAAC,wBAAwB,CAAC,SAAS,CAAC,MAAM,CAAC;AAC1F,iBAAgB,IAAI,GAAG,CAAC,YAAY,EAAE,SAAS,CAAC,EAAE,EAAE,UAAU,CAAC,UAAU,CAAC;AAC1E,iBAAgB,IAAI,IAAI,CAAC,EAAE,kBAAkB,CAAC,EAAE,CAAC;AACjD;kBACiB;AACjB;iBACgB,IAAI,QAAQ,GAAG,IAAI;iBACnB,MAAM,YAAY,GAAG,CAAC,OAAO,KAAK,OAAO,KAAK,CAAC,WAAW,CAAC;iBAC3D,MAAM,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC,YAAY,CAAC;AACnE,iBAAgB,IAAI,SAAS,IAAI,CAAC,EAAE;AACpC,qBAAoB,IAAI,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE;yBACtB,QAAQ,GAAG,KAAK;yBAChB,IAAI,GAAG,CAAC,YAAY,EAAE,SAAS,CAAC,OAAO,CAAC;yBACxC,IAAI,OAAO,GAAG,CAAC,CAAC,CAAC,IAAI,QAAQ,EAAE;AACvD,6BAA4B,IAAI,IAAI,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACpE;8BAC6B;AAC7B,6BAA4B,IAAI,IAAI,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAClE;AACA;AACA;iBACgB,IAAI,QAAQ,EAAE;AAC9B;qBACoB,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC;AACtE,qBAAoB,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;yBACxB,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,kBAAkB,CAAC,CAAC;AAC3G;AACA,qBAAoB,IAAI,GAAG,CAAC,OAAO,EAAE,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,OAAO,CAAC;qBACpD,IAAI,OAAO,GAAG,CAAC,CAAC,CAAC,IAAI,QAAQ,EAAE;AACnD,yBAAwB,IAAI,IAAI,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAChE;0BACyB;AACzB,yBAAwB,IAAI,IAAI,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9D;AACA;AACA;AACA,aAAY,OAAO,IAAI;AACvB;SACQ,OAAO,GAAG,EAAE;AACpB,aAAY,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;KACI,WAAW,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE;SAC9C,MAAM,GAAG,GAAG,aAAa;SACzB,MAAM,KAAK,GAAG,IAAI;SAClB,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,QAAQ,EAAE;AAC/C,aAAY,IAAI;iBACA,IAAI,KAAK,GAAG,CAAC,cAAc,EAAE,MAAM,CAAC,OAAO,CAAC;iBAC5C,IAAI,OAAO,MAAM,CAAC,CAAC,CAAC,IAAI,QAAQ,EAAE;AAClD,qBAAoB,KAAK,IAAI,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAChE;sBACqB;AACrB,qBAAoB,KAAK,IAAI,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9D;AACA,iBAAgB,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,CAAC;iBACnD,IAAI,SAAS,GAAG,EAAE;AAClC,iBAAgB,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;AACzC,qBAAoB,SAAS,GAAG,QAAQ,CAAC,CAAC,CAAC;AAC3C;iBACgB,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,CAAC,MAAM,EAAE;AACrG,qBAAoB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;yBACpC,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE;AACxD,6BAA4B,OAAO,IAAI;AACvC;AACA;AACA,qBAAoB,OAAO,KAAK;AAChC;sBACqB;qBACD,MAAM,IAAI,GAAG,iCAAiC;AAClE,qBAAoB,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;AACrD;AACA;aACY,OAAO,GAAG,EAAE;AACxB,iBAAgB,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;AACxD;AACA;cACa;AACb,aAAY,OAAO,KAAK;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI,SAAS,CAAC,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE;SAC7B,MAAM,GAAG,GAAG,WAAW;SACvB,MAAM,MAAM,GAAG,EAAE;AACzB,SAAQ,IAAI;AACZ;AACA,aAAY,MAAM,eAAe,GAAG,IAAI,CAAC,UAAU,CAAC,wBAAwB,CAAC,GAAG,EAAE,SAAS,CAAC;aAChF,IAAI,QAAQ,GAAG,EAAE;AAC7B,aAAY,IAAI,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;AAChE,iBAAgB,QAAQ,GAAG,eAAe,CAAC,KAAK;AAChD;kBACiB;AACjB,iBAAgB,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,OAAO,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;AACrE;AACA,aAAY,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,CAAC;AAC5E,aAAY,KAAK,MAAM,MAAM,IAAI,SAAS,EAAE;iBAC5B,MAAM,GAAG,GAAG,EAAE;AAC9B,iBAAgB,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE;AAC9C,qBAAoB,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;yBACrC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC/C;0BACyB;AACzB,yBAAwB,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC;AACxC;AACA;AACA,iBAAgB,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;AAChC;AACA,aAAY,OAAO,MAAM;AACzB;SACQ,OAAO,GAAG,EAAE;AACpB,aAAY,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;KACI,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,eAAe,EAAE,GAAG,EAAE;SAC1C,MAAM,GAAG,GAAG,YAAY;SACxB,IAAI,GAAG,GAAG,KAAK;SACf,IAAI,KAAK,GAAG,CAAC,OAAO,EAAE,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,OAAO,EAAE,eAAe,CAAC,GAAG,CAAC;AAC/F,SAAQ,IAAI,OAAO,GAAG,KAAK,QAAQ;AACnC,aAAY,KAAK,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AAC9B,SAAQ,IAAI,OAAO,GAAG,KAAK,QAAQ;aACvB,KAAK,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;AAChC,SAAQ,IAAI;AACZ,aAAY,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,CAAC;AAC3E,aAAY,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;iBACrB,GAAG,GAAG,IAAI;AAC1B,aAAY,OAAO,GAAG;AACtB;SACQ,OAAO,GAAG,EAAE;AACpB,aAAY,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AAC5C;AACA;AACA;AACA;AACA;AACA;KACI,wBAAwB,CAAC,MAAM,EAAE;SAC7B,MAAM,GAAG,GAAG,0BAA0B;SACtC,IAAI,SAAS,GAAG,EAAE;AAC1B,SAAQ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE;aAC7B,SAAS,IAAI,IAAI;AAC7B;AACA,SAAQ,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;aACtB,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;AAC9C,aAAY,OAAO,SAAS;AAC5B;cACa;aACD,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC;AAChD;AACA;AACA;AACA;AACA;AACA;KACI,gBAAgB,CAAC,KAAK,EAAE;SACpB,MAAM,GAAG,GAAG,kBAAkB;SAC9B,IAAI,SAAS,GAAG,EAAE;AAC1B,SAAQ,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;AAClC,aAAY,SAAS,IAAI,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC;AACxC;AACA,SAAQ,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;aACtB,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;AAC9C,aAAY,OAAO,SAAS;AAC5B;cACa;aACD,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC;AAChD;AACA;AACA;AACA;AACA;AACA;KACI,YAAY,CAAC,GAAG,EAAE;AACtB,SAAQ,MAAM,aAAa,GAAG,CAAC,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC;SAClG,IAAI,GAAG,IAAI,IAAI,KAAK,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,GAAG,CAAC,WAAW,KAAK,MAAM,CAAC;AACxF,aAAY,OAAO,KAAK;SAChB,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;aAChC,IAAI,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE;AACjD,iBAAgB,OAAO,KAAK;aAChB,IAAI,GAAG,KAAK,UAAU,IAAI,OAAO,GAAG,CAAC,GAAG,CAAC,IAAI,QAAQ;AACjE,iBAAgB,OAAO,KAAK;aAChB,IAAI,GAAG,KAAK,SAAS,IAAI,OAAO,GAAG,CAAC,GAAG,CAAC,IAAI,QAAQ;AAChE,iBAAgB,OAAO,KAAK;aAChB,IAAI,GAAG,KAAK,WAAW,IAAI,OAAO,GAAG,CAAC,GAAG,CAAC,IAAI,SAAS;AACnE,iBAAgB,OAAO,KAAK;aAChB,IAAI,GAAG,KAAK,WAAW,IAAI,OAAO,GAAG,CAAC,GAAG,CAAC,IAAI,SAAS;AACnE,iBAAgB,OAAO,KAAK;aAChB,IAAI,GAAG,KAAK,MAAM,IAAI,OAAO,GAAG,CAAC,GAAG,CAAC,IAAI,QAAQ;AAC7D,iBAAgB,OAAO,KAAK;aAChB,IAAI,GAAG,KAAK,QAAQ,IAAI,OAAO,GAAG,CAAC,GAAG,CAAC,IAAI,QAAQ;AAC/D,iBAAgB,OAAO,KAAK;AAC5B,aAAY,IAAI,GAAG,KAAK,QAAQ,EAAE;iBAClB,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,GAAG,CAAC,EAAE;qBACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;qBACnC,IAAI,CAAC,QAAQ;AACjC,yBAAwB,OAAO,KAAK;AACpC;AACA;aACY,IAAI,GAAG,KAAK,OAAO,IAAI,OAAO,GAAG,CAAC,GAAG,CAAC,IAAI,QAAQ;AAC9D,iBAAgB,OAAO,KAAK;AAC5B,aAAY,IAAI,GAAG,KAAK,OAAO,EAAE;iBACjB,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,GAAG,CAAC,EAAE;qBACzB,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;qBACjC,IAAI,CAAC,OAAO;AAChC,yBAAwB,OAAO,KAAK;AACpC;AACA;AACA;AACA,SAAQ,OAAO,IAAI;AACnB;AACA;AACA;AACA;AACA;KACI,OAAO,CAAC,GAAG,EAAE;AACjB,SAAQ,MAAM,aAAa,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,CAAC;SACzE,IAAI,QAAQ,GAAG,CAAC;SAChB,IAAI,GAAG,IAAI,IAAI,KAAK,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,GAAG,CAAC,WAAW,KAAK,MAAM,CAAC;AACxF,aAAY,OAAO,KAAK;SAChB,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;aAChC,IAAI,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE;AACjD,iBAAgB,OAAO,KAAK;aAChB,IAAI,GAAG,KAAK,MAAM,IAAI,OAAO,GAAG,CAAC,GAAG,CAAC,IAAI,QAAQ;AAC7D,iBAAgB,OAAO,KAAK;aAChB,IAAI,GAAG,KAAK,QAAQ,IAAI,OAAO,GAAG,CAAC,GAAG,CAAC,IAAI,QAAQ;AAC/D,iBAAgB,OAAO,KAAK;aAChB,IAAI,GAAG,KAAK,SAAS,IAAI,OAAO,GAAG,CAAC,GAAG,CAAC,IAAI,QAAQ;AAChE,iBAAgB,OAAO,KAAK;aAChB,IAAI,GAAG,KAAK,UAAU,IAAI,OAAO,GAAG,CAAC,GAAG,CAAC,IAAI,QAAQ;AACjE,iBAAgB,OAAO,KAAK;aAChB,IAAI,GAAG,KAAK,QAAQ,IAAI,OAAO,GAAG,CAAC,GAAG,CAAC,IAAI,QAAQ;AAC/D,iBAAgB,OAAO,KAAK;AAC5B,aAAY,IAAI,GAAG,KAAK,QAAQ,EAAE;iBAClB,GAAG,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,KAAK;AACnD,qBAAoB,IAAI,OAAO,CAAC,MAAM,EAAE;AACxC,yBAAwB,QAAQ,EAAE;AAClC;AACA,kBAAiB,CAAC;AAClB,iBAAgB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAE;AACnD,qBAAoB,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;qBAC5C,IAAI,CAAC,SAAS;AAClC,yBAAwB,OAAO,KAAK;AACpC;AACA;AACA,aAAY,IAAI,GAAG,KAAK,SAAS,EAAE;iBACnB,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,GAAG,CAAC,EAAE;qBACzB,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;qBACvC,IAAI,CAAC,UAAU;AACnC,yBAAwB,OAAO,KAAK;AACpC;AACA;AACA,aAAY,IAAI,GAAG,KAAK,UAAU,EAAE;iBACpB,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,GAAG,CAAC,EAAE;qBACzB,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;qBACzC,IAAI,CAAC,WAAW;AACpC,yBAAwB,OAAO,KAAK;AACpC;AACA;AACA,aAAY,IAAI,GAAG,KAAK,QAAQ,EAAE;AAClC,iBAAgB,IAAI,QAAQ,GAAG,CAAC,EAAE;qBACd,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,GAAG,CAAC,EAAE;yBACzB,IAAI,OAAO,IAAI,IAAI,QAAQ,IAAI,IAAI,CAAC,MAAM,IAAI,QAAQ;AAC9E,6BAA4B,OAAO,KAAK;AACxC;AACA;AACA;AACA;AACA,SAAQ,OAAO,IAAI;AACnB;AACA;AACA;AACA;AACA;KACI,QAAQ,CAAC,GAAG,EAAE;AAClB,SAAQ,MAAM,cAAc,GAAG,CAAC,QAAQ,EAAE,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,CAAC;SACpF,IAAI,GAAG,IAAI,IAAI,KAAK,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,GAAG,CAAC,WAAW,KAAK,MAAM,CAAC;AACxF,aAAY,OAAO,KAAK;SAChB,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;aAChC,IAAI,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE;AAClD,iBAAgB,OAAO,KAAK;aAChB,IAAI,GAAG,KAAK,QAAQ,IAAI,OAAO,GAAG,CAAC,GAAG,CAAC,IAAI,QAAQ;AAC/D,iBAAgB,OAAO,KAAK;aAChB,IAAI,GAAG,KAAK,OAAO,IAAI,OAAO,GAAG,CAAC,GAAG,CAAC,IAAI,QAAQ;AAC9D,iBAAgB,OAAO,KAAK;aAChB,IAAI,GAAG,KAAK,YAAY,IAAI,OAAO,GAAG,CAAC,GAAG,CAAC,IAAI,QAAQ;AACnE,iBAAgB,OAAO,KAAK;aAChB,IAAI,GAAG,KAAK,YAAY,IAAI,OAAO,GAAG,CAAC,GAAG,CAAC,IAAI,QAAQ;AACnE,iBAAgB,OAAO,KAAK;aAChB,IAAI,GAAG,KAAK,YAAY,IAAI,OAAO,GAAG,CAAC,GAAG,CAAC,IAAI,QAAQ;AACnE,iBAAgB,OAAO,KAAK;AAC5B;AACA,SAAQ,OAAO,IAAI;AACnB;AACA;AACA;AACA;AACA;KACI,SAAS,CAAC,GAAG,EAAE;SACX,MAAM,eAAe,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC;SACjD,IAAI,GAAG,IAAI,IAAI,KAAK,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,GAAG,CAAC,WAAW,KAAK,MAAM,CAAC;AACxF,aAAY,OAAO,KAAK;SAChB,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;aAChC,IAAI,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE;AACnD,iBAAgB,OAAO,KAAK;aAChB,IAAI,GAAG,KAAK,MAAM,IAAI,OAAO,GAAG,CAAC,GAAG,CAAC,IAAI,QAAQ;AAC7D,iBAAgB,OAAO,KAAK;aAChB,IAAI,GAAG,KAAK,OAAO,IAAI,OAAO,GAAG,CAAC,GAAG,CAAC,IAAI,QAAQ;AAC9D,iBAAgB,OAAO,KAAK;aAChB,IAAI,GAAG,KAAK,MAAM,KAAK,OAAO,GAAG,CAAC,GAAG,CAAC,IAAI,QAAQ,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,IAAI,QAAQ,CAAC;AACrG,iBAAgB,OAAO,KAAK;AAC5B;AACA,SAAQ,OAAO,IAAI;AACnB;AACA;AACA;AACA;AACA;KACI,UAAU,CAAC,GAAG,EAAE;SACZ,MAAM,gBAAgB,GAAG,CAAC,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,OAAO,CAAC;SACpE,IAAI,GAAG,IAAI,IAAI,KAAK,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,GAAG,CAAC,WAAW,KAAK,MAAM,CAAC;AACxF,aAAY,OAAO,KAAK;SAChB,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;aAChC,IAAI,gBAAgB,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE;AACpD,iBAAgB,OAAO,KAAK;aAChB,IAAI,GAAG,KAAK,MAAM,IAAI,OAAO,GAAG,CAAC,GAAG,CAAC,IAAI,QAAQ;AAC7D,iBAAgB,OAAO,KAAK;aAChB,IAAI,GAAG,KAAK,WAAW,IAAI,OAAO,GAAG,CAAC,GAAG,CAAC,IAAI,QAAQ;AAClE,iBAAgB,OAAO,KAAK;aAChB,IAAI,GAAG,KAAK,WAAW,IAAI,OAAO,GAAG,CAAC,GAAG,CAAC,IAAI,QAAQ;AAClE,iBAAgB,OAAO,KAAK;aAChB,IAAI,GAAG,KAAK,OAAO,IAAI,OAAO,GAAG,CAAC,GAAG,CAAC,IAAI,QAAQ;AAC9D,iBAAgB,OAAO,KAAK;AAC5B;AACA,SAAQ,OAAO,IAAI;AACnB;AACA;AACA;AACA;AACA;KACI,MAAM,CAAC,GAAG,EAAE;AAChB,SAAQ,MAAM,YAAY,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC;SACtC,IAAI,GAAG,IAAI,IAAI,KAAK,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,GAAG,CAAC,WAAW,KAAK,MAAM,CAAC;AACxF,aAAY,OAAO,KAAK;SAChB,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;aAChC,IAAI,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE;AAChD,iBAAgB,OAAO,KAAK;aAChB,IAAI,GAAG,KAAK,MAAM,IAAI,OAAO,GAAG,CAAC,GAAG,CAAC,IAAI,QAAQ;AAC7D,iBAAgB,OAAO,KAAK;aAChB,IAAI,GAAG,KAAK,OAAO,IAAI,OAAO,GAAG,CAAC,GAAG,CAAC,IAAI,QAAQ;AAC9D,iBAAgB,OAAO,KAAK;AAC5B;AACA,SAAQ,OAAO,IAAI;AACnB;AACA;AACA;AACA;AACA;KACI,mBAAmB,CAAC,MAAM,EAAE;SACxB,MAAM,GAAG,GAAG,qBAAqB;AACzC,SAAQ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;aACpC,MAAM,GAAG,GAAG,EAAE;aACd,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AAC/C,aAAY,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;iBACzB,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM;AAC7C;AACA,aAAY,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;iBACxB,GAAG,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK;AAC3C;AACA,aAAY,IAAI,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE;iBAC7B,GAAG,CAAC,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU;AACrD;AACA,aAAY,IAAI,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE;iBAC7B,GAAG,CAAC,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU;AACrD;aACY,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;aAClC,IAAI,CAAC,OAAO,EAAE;AAC1B,iBAAgB,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC;AAChE;AACA;SACQ;AACR;AACA;AACA;AACA;AACA;KACI,oBAAoB,CAAC,OAAO,EAAE;SAC1B,MAAM,GAAG,GAAG,sBAAsB;AAC1C,SAAQ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;aACrC,MAAM,KAAK,GAAG,EAAE;aAChB,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAChD,aAAY,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;iBACxB,KAAK,CAAC,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK;AAC9C;AACA,aAAY,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;iBACvB,KAAK,CAAC,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI;AAC5C;AACA,aAAY,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;iBACvB,KAAK,CAAC,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI;AAC5C;aACY,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;aACrC,IAAI,CAAC,OAAO,EAAE;AAC1B,iBAAgB,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC;AACjE;AACA;SACQ;AACR;AACA;AACA;AACA;AACA;KACI,qBAAqB,CAAC,QAAQ,EAAE;SAC5B,MAAM,GAAG,GAAG,uBAAuB;AAC3C,SAAQ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;aACtC,MAAM,OAAO,GAAG,EAAE;aAClB,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AACjD,aAAY,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;iBACxB,OAAO,CAAC,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK;AACjD;AACA,aAAY,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;iBACvB,OAAO,CAAC,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI;AAC/C;AACA,aAAY,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE;iBAC5B,OAAO,CAAC,SAAS,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS;AACzD;AACA,aAAY,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE;iBAC5B,OAAO,CAAC,SAAS,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS;AACzD;aACY,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;aACxC,IAAI,CAAC,OAAO,EAAE;AAC1B,iBAAgB,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC;AAClE;AACA;SACQ;AACR;AACA;AACA;AACA;AACA;KACI,kBAAkB,CAAC,KAAK,EAAE;SACtB,MAAM,GAAG,GAAG,oBAAoB;AACxC,SAAQ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;aACnC,MAAM,IAAI,GAAG,EAAE;aACf,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC9C,aAAY,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;iBACxB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK;AAC3C;AACA,aAAY,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;iBACvB,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI;AACzC;aACY,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;aACjC,IAAI,CAAC,OAAO,EAAE;AAC1B,iBAAgB,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC;AAC/D;AACA;SACQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA,KAAI,UAAU,CAAC,GAAG,EAAE,IAAI,EAAE;SAClB,MAAM,GAAG,GAAG,YAAY;AAChC,SAAQ,MAAM,IAAI,GAAG,CAAC,0BAA0B,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AAC/E,SAAQ,IAAI;AACZ,aAAY,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;AAC1E,aAAY,IAAI,OAAO,CAAC,OAAO,GAAG,CAAC,EAAE;AACrC,iBAAgB,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC7D;AACA,aAAY,OAAO,OAAO;AAC1B;SACQ,OAAO,GAAG,EAAE;AACpB,aAAY,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AAC5C;AACA;AACA;AACA,CAAA,SAAA,CAAA,SAAiB,GAAG,SAAS;AAC7B;;;;;;;;;AClzBA,CAAA,MAAM,CAAC,cAAc,CAAC,YAAO,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AAC7D,CAAoB,YAAA,CAAA,YAAA,GAAG,SAAM;CAC7B,MAAM,aAAa,GAAGA,kBAAyB,EAAA;CAC/C,MAAM,WAAW,GAAGC,gBAAsB,EAAA;AAC1C,CAAA,MAAM,YAAY,CAAC;AACnB,KAAI,WAAW,GAAG;SACV,IAAI,CAAC,UAAU,GAAG,IAAI,aAAa,CAAC,WAAW,EAAE;SACjD,IAAI,CAAC,QAAQ,GAAG,IAAI,WAAW,CAAC,SAAS,EAAE;AACnD;AACA;AACA;AACA;AACA;AACA;AACA,KAAI,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE;SAC5B,MAAM,GAAG,GAAG,oBAAoB;SAChC,MAAM,MAAM,GAAG,EAAE;SACjB,IAAI,MAAM,GAAG,EAAE;SACf,IAAI,KAAK,GAAG,EAAE;SACd,IAAI,MAAM,GAAG,EAAE;AACvB,SAAQ,IAAI;AACZ;AACA,aAAY,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC;AAC1C;aACY,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC;AACxD,aAAY,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;iBACxB,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,qBAAqB,CAAC,CAAC;AAC9D;kBACiB;AACjB,iBAAgB,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,GAAG,EAAE,IAAI,EAAE,YAAY,CAAC;iBACpE,IAAI,CAAC,OAAO,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE;qBACvC,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,wBAAwB,CAAC,CAAC;AACrE;iBACgB,QAAQ,MAAM,CAAC,IAAI;qBACf,KAAK,SAAS,EAAE;yBACZ,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,SAAS,CAAC;yBAC9C;AACxB;qBACoB,KAAK,MAAM,EAAE;yBACT,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,SAAS,CAAC;yBAC3C;AACxB;AACA,qBAAoB,SAAS;AAC7B,yBAAwB,MAAM,GAAG,CAAC,EAAE,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC;yBACpD;AACxB;AACA;AACA,iBAAgB,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;AACvC,qBAAoB,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC;AAC3C;AACA,iBAAgB,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;AACvC,qBAAoB,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ;AACrD,qBAAoB,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO;AACnD,qBAAoB,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS;AACvD,qBAAoB,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI;AAC7C,qBAAoB,MAAM,CAAC,MAAM,GAAG,MAAM;AAC1C,qBAAoB,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;AAC1C,yBAAwB,MAAM,CAAC,KAAK,GAAG,KAAK;AAC5C;AACA;AACA,iBAAgB,OAAO,MAAM;AAC7B;AACA;SACQ,OAAO,GAAG,EAAE;AACpB,aAAY,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AAC5C;AACA;AACA;AACA;AACA;AACA;KACI,gBAAgB,CAAC,GAAG,EAAE;SAClB,MAAM,GAAG,GAAG,kBAAkB;SAC9B,IAAI,GAAG,GAAG,2CAA2C;SACrD,GAAG,IAAI,8CAA8C;SACrD,GAAG,IAAI,8BAA8B;SACrC,GAAG,IAAI,+BAA+B;SACtC,IAAI,QAAQ,GAAG,EAAE;AACzB,SAAQ,IAAI;AACZ,aAAY,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,CAAC;AACnE,aAAY,OAAO,QAAQ;AAC3B;SACQ,OAAO,GAAG,EAAE;AACpB,aAAY,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AAC5C;AACA;KACI,iBAAiB,CAAC,GAAG,EAAE;SACnB,MAAM,GAAG,GAAG,mBAAmB;AACvC,SAAQ,IAAI,OAAO,GAAG,EAAE;AACxB,SAAQ,IAAI;AACZ;AACA,aAAY,MAAM,IAAI,GAAG,CAAC,8CAA8C,CAAC;AACzE,aAAY,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC;AACtE,aAAY,IAAI,GAAG,IAAI,IAAI,EAAE;iBACb,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAC/C,iBAAgB,OAAO,GAAG,GAAG,CAAC,GAAG,CAAC;AAClC;AACA,aAAY,OAAO,OAAO;AAC1B;SACQ,OAAO,GAAG,EAAE;AACpB,aAAY,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI,iBAAiB,CAAC,GAAG,EAAE,gBAAgB,EAAE;SACrC,MAAM,GAAG,GAAG,mBAAmB;AACvC,SAAQ,IAAI;AACZ,aAAY,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,GAAG,EAAE,IAAI,EAAE,YAAY,CAAC;aACpE,IAAI,CAAC,OAAO,EAAE;iBACV,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,wBAAwB,CAAC,CAAC;AACjE;AACA,aAAY,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,gBAAgB,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC;aACrE,IAAI,IAAI,GAAG,EAAE;aACb,IAAI,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;iBACjC,IAAI,GAAG,CAAC,kCAAkC,EAAE,KAAK,CAAC,cAAc,CAAC;AACjF;kBACiB;iBACD,IAAI,GAAG,CAAC,2CAA2C,EAAE,KAAK,CAAC,EAAE,CAAC;AAC9E;AACA,aAAY,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC;AAC3E,aAAY,IAAI,OAAO,CAAC,OAAO,GAAG,CAAC,EAAE;AACrC,iBAAgB,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,EAAE;AAClE;kBACiB;AACjB,iBAAgB,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE;AACvC;AACA;SACQ,OAAO,GAAG,EAAE;AACpB,aAAY,OAAO;iBACH,MAAM,EAAE,KAAK;AAC7B,iBAAgB,OAAO,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;cACnC;AACb;AACA;KACI,eAAe,CAAC,GAAG,EAAE;SACjB,MAAM,GAAG,GAAG,iBAAiB;AACrC,SAAQ,IAAI,cAAc;AAC1B,SAAQ,IAAI;AACZ;AACA,aAAY,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,GAAG,EAAE,IAAI,EAAE,YAAY,CAAC;aACpE,IAAI,CAAC,OAAO,EAAE;iBACV,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,wBAAwB,CAAC,CAAC;AACjE;AACA;AACA,aAAY,cAAc,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC;AACxD,aAAY,IAAI,cAAc,GAAG,CAAC,EAAE;iBACpB,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,gCAAgC,CAAC,CAAC;AACzE;AACA;aACY,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,GAAG,CAAC;AACjE,aAAY,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;iBACxB,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,0BAA0B,CAAC,CAAC;AACnE;AACA;AACA,aAAY,KAAK,MAAM,KAAK,IAAI,SAAS,EAAE;AAC3C;AACA,iBAAgB,MAAM,OAAO,GAAG,CAAC,YAAY,EAAE,KAAK;AACpD,wDAAwD,EAAE,cAAc,CAAC,CAAC,CAAC;AAC3E,iBAAgB,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC;AACxF,iBAAgB,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;qBACpB,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC;AACxD;AACA;aACY;AACZ;SACQ,OAAO,GAAG,EAAE;AACpB,aAAY,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;AAC5D;AACA;AACA;AACA;AACA;AACA;KACI,YAAY,CAAC,GAAG,EAAE;SACd,MAAM,KAAK,GAAG,EAAE;SAChB,IAAI,GAAG,GAAG,2CAA2C;SACrD,GAAG,IAAI,2CAA2C;SAClD,IAAI,QAAQ,GAAG,EAAE;AACzB,SAAQ,IAAI;AACZ,aAAY,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,CAAC;AACnE,aAAY,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE;iBAC1B,MAAM,IAAI,GAAG,EAAE;AAC/B,iBAAgB,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI;iBACtB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAC9E,iBAAgB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;AAChC;AACA,aAAY,OAAO,KAAK;AACxB;SACQ,OAAO,GAAG,EAAE;aACR,MAAM,IAAI,KAAK,CAAC,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC,CAAC;AACnD;AACA;AACA;AACA;AACA;AACA;KACI,WAAW,CAAC,GAAG,EAAE;SACb,MAAM,GAAG,GAAG,aAAa;AACjC,SAAQ,IAAI,OAAO,GAAG,EAAE;AACxB;AACA,SAAQ,MAAM,IAAI,GAAG,CAAC,8CAA8C,CAAC;AACrE,SAAQ,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC;AAClE,SAAQ,IAAI,GAAG,IAAI,IAAI,EAAE;aACb,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAC3C,aAAY,OAAO,GAAG,GAAG,CAAC,GAAG,CAAC;AAC9B,aAAY,OAAO,OAAO;AAC1B;cACa;aACD,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,YAAY,CAAC,CAAC;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI,aAAa,CAAC,GAAG,EAAE,SAAS,EAAE;SAC1B,MAAM,GAAG,GAAG,eAAe;SAC3B,MAAM,MAAM,GAAG,EAAE;SACjB,IAAI,MAAM,GAAG,EAAE;AACvB,SAAQ,IAAI;AACZ;AACA,aAAY,KAAK,MAAM,MAAM,IAAI,SAAS,EAAE;AAC5C,iBAAgB,IAAI,SAAS;AAC7B,iBAAgB,IAAI,OAAO;AAC3B,iBAAgB,IAAI,MAAM,CAAC,IAAI,EAAE;AACjC,qBAAoB,SAAS,GAAG,MAAM,CAAC,IAAI;AAC3C;sBACqB;AACrB,qBAAoB,MAAM,GAAG,CAAC,EAAE,GAAG,CAAC,QAAQ,CAAC;qBACzB;AACpB;AACA,iBAAgB,IAAI,MAAM,CAAC,GAAG,EAAE;AAChC,qBAAoB,OAAO,GAAG,MAAM,CAAC,GAAG;AACxC;sBACqB;AACrB,qBAAoB,MAAM,GAAG,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC;qBACxB;AACpB;iBACgB,MAAM,KAAK,GAAG,EAAE;AAChC;iBACgB,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;AACtD,iBAAgB,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;AACzC,qBAAoB,MAAM,GAAG,CAAC,EAAE,GAAG,CAAC,mBAAmB,CAAC;qBACpC;AACpB;AACA;AACA,iBAAgB,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,MAAM,CAAC;AACzD;iBACgB,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,SAAS,CAAC;AAC/D,iBAAgB,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;AACxC;AACA,qBAAoB,IAAI,CAAC,QAAQ,CAAC,oBAAoB,CAAC,OAAO,CAAC;AAC/D;AACA;iBACgB,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,SAAS,CAAC;AACjE,iBAAgB,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;AACzC;AACA,qBAAoB,IAAI,CAAC,QAAQ,CAAC,qBAAqB,CAAC,QAAQ,CAAC;AACjE;AACA;iBACgB,MAAM,KAAK,GAAG,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC,CAAC;AAC3D,iBAAgB,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,EAAE,KAAK,EAAE,SAAS,CAAC;AAC7E,iBAAgB,KAAK,CAAC,IAAI,GAAG,SAAS;AACtC,iBAAgB,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;AACvC,qBAAoB,KAAK,CAAC,MAAM,GAAG,MAAM;AACzC;sBACqB;AACrB,qBAAoB,MAAM,GAAG,CAAC,EAAE,GAAG,CAAC,oBAAoB,CAAC;qBACrC;AACpB;AACA,iBAAgB,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;AACxC,qBAAoB,KAAK,CAAC,OAAO,GAAG,OAAO;AAC3C;AACA,iBAAgB,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;AACzC,qBAAoB,KAAK,CAAC,QAAQ,GAAG,QAAQ;AAC7C;AACA,iBAAgB,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;AACvC,qBAAoB,KAAK,CAAC,MAAM,GAAG,MAAM;AACzC;iBACgB,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,IAAI,CAAC,EAAE;qBAChC,MAAM,GAAG,CAAC,EAAE,GAAG,CAAC,OAAO,EAAE,SAAS,CAAC,mBAAmB,CAAC;qBACvD;AACpB;AACA,iBAAgB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;AAClC;AACA,aAAY,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;AACnC,iBAAgB,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC;AACvC;AACA,aAAY,OAAO,MAAM;AACzB;SACQ,OAAO,GAAG,EAAE;AACpB,aAAY,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;KACI,SAAS,CAAC,OAAO,0BAA0B;SACvC,MAAM,GAAG,GAAG,WAAW;SACvB,MAAM,MAAM,GAAG,EAAE;AACzB;SACQ,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC;SACpC,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC;AACjD,SAAQ,IAAI,IAAI,GAAG,OAAO,CAAC,SAAS,CAAC,OAAO,GAAG,CAAC,EAAE,QAAQ,CAAC;AAC3D;AACA,SAAQ,IAAI;AACZ,aAAY,IAAI,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC;aACxC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;AACvC;AACA;AACA,aAAY,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE;iBAClB,MAAM,GAAG,GAAG,EAAE;AAC9B,iBAAgB,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE;AACzD,iBAAgB,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AAC7D,iBAAgB,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;iBAC9C,MAAM,OAAO,GAAG,EAAE;AAClC,iBAAgB,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE;qBACxB,KAAK,SAAS,EAAE;yBACZ,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;yBAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;AACtD,yBAAwB,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,EAAE,IAAI,CAAC;yBACzC,MAAM,OAAO,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC;yBAC7B,GAAG,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;AAClD,yBAAwB,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;AAC3D,yBAAwB,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,CAAC;yBACjC,OAAO,CAAC,YAAY,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;yBAC9B;AACxB;AACA,qBAAoB,KAAK,SAAS;qBACd,KAAK,QAAQ,EAAE;AACnC,yBAAwB,MAAM,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,KAAK,SAAS,GAAG,MAAM,GAAG,MAAM;yBACnE,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;yBAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;AACtD,yBAAwB,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,EAAE,IAAI,CAAC;yBACzC,MAAM,OAAO,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC;AACrD,yBAAwB,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;AAC3D,yBAAwB,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;AAC3D,yBAAwB,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI;yBACb,OAAO,CAAC,YAAY,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;yBAC9B;AACxB;qBACoB,KAAK,YAAY,EAAE;yBACf,MAAM,IAAI,GAAG,EAAE;yBACf,MAAM,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;AACnD,yBAAwB,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AACxE,yBAAwB,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;yBACjD,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;yBAChB,OAAO,CAAC,YAAY,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;yBAC9B,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;yBAChB;AACxB;AACA,qBAAoB,SAAS;yBACL,OAAO,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;yBAC1B;AACxB;AACA;AACA,iBAAgB,OAAO,CAAC,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC;AAC5D,iBAAgB,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;AACpC;AACA,aAAY,OAAO,MAAM;AACzB;SACQ,OAAO,GAAG,EAAE;AACpB,aAAY,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI,UAAU,CAAC,GAAG,EAAE,SAAS,EAAE;SACvB,MAAM,GAAG,GAAG,YAAY;SACxB,MAAM,OAAO,GAAG,EAAE;SAClB,IAAI,MAAM,GAAG,EAAE;AACvB,SAAQ,IAAI;aACA,IAAI,IAAI,GAAG,oDAAoD;aAC/D,IAAI,IAAI,CAAC,+BAA+B,EAAE,SAAS,CAAC,EAAE,CAAC;AACnE,aAAY,IAAI,IAAI,CAAC,gBAAgB,CAAC;AACtC,aAAY,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC;AAC5E,aAAY,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;AACvC,iBAAgB,KAAK,MAAM,MAAM,IAAI,UAAU,EAAE;qBAC7B,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;AACpD,qBAAoB,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;AAC3C,yBAAwB,IAAI,MAAM,CAAC,UAAU,CAAC,KAAK,SAAS,EAAE;AAC9D,6BAA4B,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC;AACrD,6BAA4B,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,QAAQ,GAAG,EAAE;6BACnD,MAAM,IAAI,GAAG,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC;6BACjC,MAAM,IAAI,GAAG,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC;6BACjC,MAAM,KAAK,GAAG,EAAE;AAC5C,6BAA4B,KAAK,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC;AACvD,6BAA4B,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,EAAE,IAAI,CAAC;AACnE,6BAA4B,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;AAC/C,iCAAgC,KAAK,CAAC,IAAI,GAAG,IAAI;AACjD,6BAA4B,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;AAC/C;8BAC6B;6BACD,MAAM,GAAG,CAAC,EAAE,GAAG,CAAC,OAAO,EAAE,SAAS,CAAC,cAAc,CAAC;6BAClD;AAC5B;AACA;0BACyB;yBACD,MAAM,GAAG,CAAC,EAAE,GAAG,CAAC,OAAO,EAAE,SAAS,CAAC,iBAAiB,CAAC;yBACrD;AACxB;AACA;AACA,iBAAgB,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;AACvC,qBAAoB,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC;AAC3C;AACA;AACA,aAAY,OAAO,OAAO;AAC1B;SACQ,OAAO,GAAG,EAAE;AACpB,aAAY,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI,WAAW,CAAC,GAAG,EAAE,SAAS,EAAE;SACxB,MAAM,GAAG,GAAG,aAAa;SACzB,MAAM,QAAQ,GAAG,EAAE;AAC3B,SAAQ,IAAI;aACA,IAAI,IAAI,GAAG,oDAAoD;aAC/D,IAAI,IAAI,CAAC,iCAAiC,EAAE,SAAS,CAAC,EAAE,CAAC;AACrE,aAAY,IAAI,IAAI,CAAC,iBAAiB,CAAC;AACvC,aAAY,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC;AAC7E,aAAY,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;AACxC,iBAAgB,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE;qBAC5B,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;AAClD,qBAAoB,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;AAC3C,yBAAwB,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,SAAS,EAAE;AAC5D,6BAA4B,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC;AACnD,6BAA4B,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC;6BACzB,IAAI,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;AACxD,6BAA4B,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC,EAAE;iCACpB,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,wCAAwC,CAAC,CAAC;AACjG;6BAC4B,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE;AAChE,iCAAgC,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,6BAA6B,EAAE,SAAS,CAAC,CAAC,CAAC;AAClG;AACA,6BAA4B,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;AACrF,6BAA4B,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,GAAG,GAAG,GAAG,SAAS,CAAC;AACjF,6BAA4B,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC,EAAE;iCACpB,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,6CAA6C,CAAC,CAAC;AACtG;6BAC4B,IAAI,SAAS,GAAG,EAAE;6BAClB,IAAI,KAAK,GAAG,EAAE;6BACd,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,KAAK,OAAO,EAAE;AAC5F,iCAAgC,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC;AACxE,iCAAgC,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC,EAAE;qCACpB,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,yCAAyC,CAAC,CAAC;AACtG;iCACgC,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;AAC5D,iCAAgC,KAAK,GAAG,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC;AAC3D;kCACiC;iCACD,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;AACxD;6BAC4B,MAAM,OAAO,GAAG,EAAE;AAC9C,6BAA4B,OAAO,CAAC,IAAI,GAAG,IAAI;AAC/C,6BAA4B,OAAO,CAAC,KAAK,GAAG,KAAK;AACjD,6BAA4B,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC;AACpD,iCAAgC,OAAO,CAAC,SAAS,GAAG,SAAS;AAC7D,6BAA4B,OAAO,CAAC,SAAS,GAAG,SAAS;AACzD,6BAA4B,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC;AAClD;8BAC6B;AAC7B,6BAA4B,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,OAAO,EAAE,SAAS,CAAC,cAAc,CAAC,CAAC;AACtF;AACA;0BACyB;AACzB,yBAAwB,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,OAAO,EAAE,SAAS,CAAC,iBAAiB,CAAC,CAAC;AACrF;AACA;AACA;AACA,aAAY,OAAO,QAAQ;AAC3B;SACQ,OAAO,GAAG,EAAE;AACpB,aAAY,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI,gBAAgB,CAAC,GAAG,EAAE,SAAS,EAAE;SAC7B,MAAM,GAAG,GAAG,kBAAkB;SAC9B,MAAM,MAAM,GAAG,EAAE;SACjB,IAAI,SAAS,GAAG,EAAE;SAClB,IAAI,QAAQ,GAAG,CAAC;SAChB,IAAI,aAAa,GAAG,EAAE;SACtB,IAAI,MAAM,GAAG,EAAE;AACvB,SAAQ,IAAI;AACZ;aACY,MAAM,eAAe,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,EAAE,SAAS,CAAC;AAC3E,aAAY,IAAI,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE;AACnE,iBAAgB,QAAQ,GAAG,eAAe,CAAC,QAAQ;AACnD;AACA,aAAY,IAAI,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE;AACpE,iBAAgB,SAAS,GAAG,eAAe,CAAC,SAAS;AACrD,iBAAgB,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC;AACtD;AACA;AACA,aAAY,KAAK,MAAM,MAAM,IAAI,SAAS,EAAE;iBAC5B,IAAI,SAAS,GAAG,EAAE;iBAClB,IAAI,OAAO,GAAG,EAAE;AAChC,iBAAgB,IAAI,MAAM,CAAC,IAAI,EAAE;AACjC,qBAAoB,SAAS,GAAG,MAAM,CAAC,IAAI;AAC3C;sBACqB;AACrB,qBAAoB,MAAM,GAAG,CAAC,EAAE,GAAG,CAAC,QAAQ,CAAC;qBACzB;AACpB;AACA,iBAAgB,IAAI,MAAM,CAAC,GAAG,EAAE;AAChC,qBAAoB,OAAO,GAAG,MAAM,CAAC,GAAG;AACxC;sBACqB;AACrB,qBAAoB,MAAM,GAAG,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC;qBACxB;AACpB;iBACgB,IAAI,aAAa,CAAC,MAAM,IAAI,CAAC,IAAI,aAAa,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,IAAI,SAAS,CAAC,SAAS,CAAC,IAAI,IAAI,EAAE;qBACtG;AACpB;iBACgB,MAAM,KAAK,GAAG,EAAE;iBAChB,IAAI,MAAM,GAAG,EAAE;iBACf,IAAI,OAAO,GAAG,EAAE;iBAChB,IAAI,QAAQ,GAAG,EAAE;AACjC,iBAAgB,KAAK,CAAC,IAAI,GAAG,MAAM;iBACnB,IAAI,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,QAAQ,EAAE;AACxD;AACA,qBAAoB,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;AACpD,qBAAoB,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;AAC3C;AACA,yBAAwB,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,MAAM,CAAC;AACjE;AACA;qBACoB,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,SAAS,CAAC;AAC7D,qBAAoB,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;AAC5C;AACA,yBAAwB,IAAI,CAAC,QAAQ,CAAC,oBAAoB,CAAC,OAAO,CAAC;AACnE;AACA;qBACoB,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,SAAS,CAAC;AAC/D,qBAAoB,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;AAC7C;AACA,yBAAwB,IAAI,CAAC,QAAQ,CAAC,qBAAqB,CAAC,QAAQ,CAAC;AACrE;AACA;AACA;iBACgB,IAAI,KAAK,GAAG,EAAE;AAC9B,iBAAgB,IAAI,SAAS,CAAC,SAAS,CAAC,KAAK,QAAQ,EAAE;qBACnC,KAAK,GAAG,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC,CAAC;AACzD;sBACqB;AACrB,qBAAoB,KAAK,GAAG,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,sBAAsB,EAAE,QAAQ,CAAC,CAAC,CAAC;AAChG;AACA,iBAAgB,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,EAAE,KAAK,EAAE,SAAS,CAAC;AAC7E;AACA,iBAAgB,KAAK,CAAC,IAAI,GAAG,SAAS;AACtC,iBAAgB,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;AACvC,qBAAoB,KAAK,CAAC,MAAM,GAAG,MAAM;AACzC;AACA,iBAAgB,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;AACxC,qBAAoB,KAAK,CAAC,OAAO,GAAG,OAAO;AAC3C;AACA,iBAAgB,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;AACzC,qBAAoB,KAAK,CAAC,QAAQ,GAAG,QAAQ;AAC7C;AACA,iBAAgB,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;AACvC,qBAAoB,KAAK,CAAC,MAAM,GAAG,MAAM;AACzC;iBACgB,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,IAAI,CAAC,EAAE;qBAChC,MAAM,GAAG,CAAC,EAAE,GAAG,CAAC,OAAO,EAAE,SAAS,CAAC,mBAAmB,CAAC;qBACvD;AACpB;AACA,iBAAgB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;AAClC;AACA,aAAY,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;AACnC,iBAAgB,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC;AACvC;AACA,aAAY,OAAO,MAAM;AACzB;SACQ,OAAO,GAAG,EAAE;AACpB,aAAY,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI,kBAAkB,CAAC,GAAG,EAAE,SAAS,EAAE;SAC/B,MAAM,GAAG,GAAG,oBAAoB;SAChC,MAAM,OAAO,GAAG,EAAE;AAC1B,SAAQ,IAAI;AACZ;aACY,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC;AAClD,aAAY,IAAI,QAAQ,IAAI,CAAC,EAAE;iBACf,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,YAAY,CAAC,CAAC;AACrD;AACA;AACA;AACA,aAAY,MAAM,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,EAAE,SAAS,EAAE,QAAQ,CAAC;AAC9E,aAAY,IAAI,SAAS,CAAC,MAAM,IAAI,CAAC,EAAE;iBACvB,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,aAAa,CAAC,CAAC;AACtD;AACA,aAAY,OAAO,CAAC,QAAQ,GAAG,QAAQ;AACvC,aAAY,OAAO,CAAC,SAAS,GAAG,SAAS;AACzC,aAAY,OAAO,OAAO;AAC1B;SACQ,OAAO,GAAG,EAAE;AACpB,aAAY,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AAC5C;AACA;AACA,KAAI,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE;SACrC,MAAM,GAAG,GAAG,mBAAmB;SAC/B,IAAI,MAAM,GAAG,EAAE;AACvB,SAAQ,IAAI;aACA,MAAM,WAAW,GAAG,EAAE;AAClC,aAAY,KAAK,MAAM,MAAM,IAAI,MAAM,EAAE;AACzC,iBAAgB,IAAI,IAAI;AACxB;iBACgB,IAAI,IAAI,GAAG,6BAA6B;iBACxC,IAAI,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;AAC9C,iBAAgB,IAAI,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC;AAC5E,iBAAgB,IAAI,QAAQ,CAAC,MAAM,IAAI,CAAC,EAAE;AAC1C,qBAAoB,MAAM,GAAG,CAAC,EAAE,GAAG,CAAC,yBAAyB,CAAC;qBAC1C;AACpB;iBACgB,MAAM,UAAU,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;AACxD;iBACgB,IAAI,GAAG,iCAAiC;iBACxC,IAAI,IAAI,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,uBAAuB,CAAC;AAC/D,iBAAgB,IAAI,IAAI,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;AACtC,iBAAgB,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC;AACxE,iBAAgB,IAAI,QAAQ,CAAC,MAAM,IAAI,CAAC;qBACpB;iBACJ,MAAM,kBAAkB,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;AAChE,iBAAgB,IAAI,kBAAkB,KAAK,CAAC,EAAE;qBAC1B,IAAI,GAAG,IAAI;AAC/B;AACA,sBAAqB,IAAI,UAAU,KAAK,kBAAkB,EAAE;qBACxC,IAAI,GAAG,QAAQ;AACnC;sBACqB;qBACD,IAAI,GAAG,UAAU;AACrC;AACA,iBAAgB,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI;AACvC,iBAAgB,WAAW,CAAC,GAAG,CAAC,GAAG,IAAI;AACvC;AACA,aAAY,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;AACnC,iBAAgB,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC;AACvC;AACA,aAAY,OAAO,WAAW;AAC9B;SACQ,OAAO,GAAG,EAAE;AACpB,aAAY,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AAC5C;AACA;KACI,sBAAsB,CAAC,IAAI,EAAE;SACzB,MAAM,GAAG,GAAG,wBAAwB;SACpC,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,GAAG,CAAC;SAC7C,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,GAAG,CAAC;SAC7C,IAAI,SAAS,CAAC,MAAM,IAAI,SAAS,CAAC,MAAM,EAAE;aACtC,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,6BAA6B,CAAC,CAAC;AAClE;AACA,SAAQ,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;AACpC,aAAY,OAAO,IAAI;AACvB;AACA,SAAQ,IAAI,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AACzD,SAAQ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACnD,aAAY,IAAI,GAAG;aACP,IAAI,CAAC,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;AAC1C,iBAAgB,IAAI,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,EAAE;AACrD,qBAAoB,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AAC5E,qBAAoB,CAAC,EAAE;AACvB;sBACqB;AACrB,qBAAoB,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;AACxE;AACA;kBACiB;AACjB,iBAAgB,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;AACpE;aACY,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC;aACnC,OAAO,IAAI,IAAI;aACf,IAAI,CAAC,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;AAC1C,iBAAgB,OAAO,IAAI,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;AAC7E;AACA;AACA,SAAQ,OAAO,IAAI,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC;AAC/E,SAAQ,OAAO,OAAO;AACtB;AACA,KAAI,WAAW,CAAC,GAAG,EAAE,IAAI,EAAE;AAC3B,SAAQ,MAAM,MAAM,GAAG,CAAC,GAAG,GAAG,CAAC;AAC/B,SAAQ,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE;AACjC,SAAQ,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE,KAAK,IAAI,GAAG,CAAC,GAAG,OAAO,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,EAAE,EAAE,CAAC;AACrH;AACA;AACA,CAAA,YAAA,CAAA,YAAoB,GAAG,YAAY;AACnC;;;;;;;;;;;;;AC1sBA,CAAA,MAAM,CAAC,cAAc,CAAC,SAAO,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AAC7D,CAAiB,SAAA,CAAA,SAAA,GAAG,SAAM;CAC1B,MAAM,aAAa,GAAGD,kBAAwB,EAAA;AAC9C,CAAA,MAAM,SAAS,CAAC;AAChB,KAAI,WAAW,GAAG;SACV,IAAI,CAAC,UAAU,GAAG,IAAI,aAAa,CAAC,WAAW,EAAE;AACzD;AACA;AACA;AACA;AACA;AACA;AACA,KAAI,YAAY,CAAC,EAAE,EAAE,IAAI,EAAE;SACnB,IAAI,GAAG,GAAG,EAAE;AACpB,SAAQ,IAAI,KAAK,GAAG,CAAC,8BAA8B,CAAC;AACpD,SAAQ,QAAQ,IAAI;AACpB,aAAY,KAAK,OAAO;iBACR,GAAG,GAAG,aAAa;iBACnB;AAChB,aAAY,KAAK,SAAS;iBACV,GAAG,GAAG,cAAc;iBACpB;AAChB,aAAY,KAAK,OAAO;iBACR,GAAG,GAAG,YAAY;AAClC,iBAAgB,KAAK,IAAI,CAAC,+BAA+B,CAAC;iBAC1C;AAChB,aAAY,KAAK,MAAM;iBACP,GAAG,GAAG,WAAW;iBACjB;aACJ;AACZ,iBAAgB,MAAM,IAAI,KAAK,CAAC,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC;AACvE;AACA;SACQ,IAAI,IAAI,GAAG,uCAAuC;AAC1D,SAAQ,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;AAC5C,SAAQ,IAAI;AACZ,aAAY,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC;AACzE,aAAY,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;AACrC,iBAAgB,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE;iBACjC,MAAM,UAAU,GAAG,EAAE;AACrC,iBAAgB,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE;qBACzB,IAAI,IAAI,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,WAAW,CAAC;qBACtC,IAAI,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAC3C,qBAAoB,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;AACzC;AACA,iBAAgB,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE;AAC/C,qBAAoB,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC;AACzF,qBAAoB,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;yBACpB,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,YAAY,CAAC,CAAC;AAC7D;AACA;AACA;aACY;AACZ;SACQ,OAAO,GAAG,EAAE;AACpB,aAAY,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;KACI,OAAO,CAAC,EAAE,EAAE;AAChB,SAAQ,IAAI;AACZ;AACA,aAAY,IAAI,CAAC,YAAY,CAAC,EAAE,EAAE,OAAO,CAAC;AAC1C;AACA,aAAY,IAAI,CAAC,YAAY,CAAC,EAAE,EAAE,OAAO,CAAC;AAC1C;AACA,aAAY,IAAI,CAAC,YAAY,CAAC,EAAE,EAAE,SAAS,CAAC;AAC5C;AACA,aAAY,IAAI,CAAC,YAAY,CAAC,EAAE,EAAE,MAAM,CAAC;AACzC;AACA,aAAY,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC;aAC1D;AACZ;SACQ,OAAO,GAAG,EAAE;aACR,MAAM,IAAI,KAAK,CAAC,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI,cAAc,CAAC,EAAE,EAAE,WAAW,EAAE;SAC5B,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC;SAC3C,MAAM,UAAU,GAAG,EAAE;AAC7B,SAAQ,KAAK,MAAM,MAAM,IAAI,UAAU,EAAE;aAC7B,IAAI,IAAI,GAAG,uBAAuB;aAClC,IAAI,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AACtC,aAAY,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;AACjC;AACA,SAAQ,IAAI;aACA,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,EAAE,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC;AAC3F,aAAY,IAAI,OAAO,CAAC,OAAO,GAAG,CAAC,EAAE;AACrC,iBAAgB,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC;AAC9D;aACY;AACZ;SACQ,OAAO,GAAG,EAAE;aACR,MAAM,IAAI,KAAK,CAAC,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAC,CAAC;AACrD;AACA;AACA;AACA,CAAA,SAAA,CAAA,SAAiB,GAAG,SAAS;AAC7B;;;;;;;;;AC3GA,CAAA,MAAM,CAAC,cAAc,CAAC,cAAO,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AAC7D,CAAsB,cAAA,CAAA,cAAA,GAAG,SAAM;CAC/B,MAAM,WAAW,GAAGA,gBAAuB,EAAA;CAC3C,MAAM,aAAa,GAAGC,kBAAyB,EAAA;CAC/C,MAAM,WAAW,GAAGC,gBAAsB,EAAA;AAC1C,CAAA,MAAM,cAAc,CAAC;AACrB,KAAI,WAAW,GAAG;SACV,IAAI,CAAC,QAAQ,GAAG,IAAI,WAAW,CAAC,SAAS,EAAE;SAC3C,IAAI,CAAC,UAAU,GAAG,IAAI,aAAa,CAAC,WAAW,EAAE;SACjD,IAAI,CAAC,QAAQ,GAAG,IAAI,WAAW,CAAC,SAAS,EAAE;AACnD;AACA;AACA;AACA;AACA;AACA;AACA,KAAI,oBAAoB,CAAC,GAAG,EAAE,QAAQ,EAAE;AACxC,SAAQ,IAAI,OAAO,GAAG,EAAE;AACxB,SAAQ,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO;AACxC,SAAQ,IAAI;AACZ;aACY,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC;AAC7D;AACA,aAAY,IAAI,QAAQ,CAAC,IAAI,KAAK,MAAM,EAAE;iBAC1B,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;AACnD;AACA;aACY,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,GAAG,EAAE,QAAQ,CAAC;AAC/D,aAAY,OAAO,OAAO;AAC1B;SACQ,OAAO,GAAG,EAAE;aACR,MAAM,IAAI,KAAK,CAAC,wBAAwB,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AAChE;AACA;AACA,KAAI,gBAAgB,CAAC,GAAG,EAAE,QAAQ,EAAE;SAC5B,MAAM,GAAG,GAAG,kBAAkB;AACtC,SAAQ,IAAI,OAAO;SACX,IAAI,OAAO,GAAG,KAAK;SACnB,IAAI,OAAO,GAAG,EAAE;AACxB,SAAQ,IAAI,WAAW,GAAG,EAAE;AAC5B,SAAQ,IAAI,OAAO,GAAG,EAAE;AACxB,SAAQ,IAAI;aACA,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC;AACjE;aACY,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC;AAChE,aAAY,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC;AACtC;SACQ,OAAO,GAAG,EAAE;AACpB,aAAY,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AAC5C;AACA,SAAQ,KAAK,MAAM,MAAM,IAAI,QAAQ,CAAC,MAAM,EAAE;AAC9C,aAAY,IAAI,MAAM,CAAC,MAAM,IAAI,IAAI,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,EAAE;AACpE;AACA,iBAAgB,IAAI;AACpB,qBAAoB,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC;AAChG,qBAAoB,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;yBAClB;qBACJ,OAAO,GAAG,IAAI;AAClC;iBACgB,OAAO,GAAG,EAAE;qBACR,OAAO,GAAG,GAAG;qBACb,OAAO,GAAG,KAAK;qBACf;AACpB;AACA;AACA;SACQ,IAAI,OAAO,EAAE;AACrB,aAAY,IAAI;iBACA,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC;AACrE,iBAAgB,GAAG,CAAC,gBAAgB,CAAC,KAAK,CAAC;AAC3C,iBAAgB,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,WAAW;AAC/E,iBAAgB,OAAO,OAAO;AAC9B;aACY,OAAO,GAAG,EAAE;AACxB,iBAAgB,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AAChD;AACA;cACa;AACb,aAAY,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;AACpC,iBAAgB,IAAI;qBACA,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC;AAC3E,qBAAoB,GAAG,CAAC,gBAAgB,CAAC,KAAK,CAAC;AAC/C,qBAAoB,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;AACxD;iBACgB,OAAO,GAAG,EAAE;AAC5B,qBAAoB,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC;AAChE;AACA;kBACiB;AACjB;AACA,iBAAgB,OAAO,CAAC;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI,WAAW,CAAC,GAAG,EAAE,QAAQ,EAAE;SACvB,MAAM,GAAG,GAAG,aAAa;SACzB,IAAI,MAAM,GAAG,KAAK;SAClB,IAAI,OAAO,GAAG,EAAE;AACxB,SAAQ,IAAI,OAAO;AACnB,SAAQ,IAAI;AACZ;aACY,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC;AAChE,aAAY,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC;AACtC;SACQ,OAAO,GAAG,EAAE;AACpB,aAAY,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AAC5C;AACA,SAAQ,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,KAAK,EAAE;AAC5C,aAAY,IAAI,KAAK,CAAC,KAAK,IAAI,IAAI,EAAE;AACrC;AACA,iBAAgB,IAAI;AACpB,qBAAoB,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC;qBACvD,MAAM,GAAG,IAAI;AACjC;iBACgB,OAAO,GAAG,EAAE;qBACR,OAAO,GAAG,GAAG;qBACb,MAAM,GAAG,KAAK;qBACd;AACpB;AACA;AACA;SACQ,IAAI,MAAM,EAAE;AACpB,aAAY,IAAI;iBACA,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC;AACrE,iBAAgB,GAAG,CAAC,gBAAgB,CAAC,KAAK,CAAC;iBAC3B,OAAO,OAAO,CAAC,OAAO;AACtC;aACY,OAAO,GAAG,EAAE;AACxB,iBAAgB,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AAChD;AACA;cACa;AACb,aAAY,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;AACpC,iBAAgB,IAAI;qBACA,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC;AAC3E,qBAAoB,GAAG,CAAC,gBAAgB,CAAC,KAAK,CAAC;AAC/C,qBAAoB,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;AACxD;iBACgB,OAAO,GAAG,EAAE;AAC5B,qBAAoB,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC;AAChE;AACA;kBACiB;AACjB;AACA,iBAAgB,OAAO,CAAC;AACxB;AACA;AACA;AACA;AACA,CAAA,cAAA,CAAA,cAAsB,GAAG,cAAc;AACvC;;;;;;;;;;;;;AC3JA,CAAA,MAAM,CAAC,cAAc,CAAC,WAAO,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AAC7D,CAAmB,WAAA,CAAA,WAAA,GAAG,SAAM;CAC5B,MAAM,cAAc,GAAGF,mBAA0B,EAAA;CACjD,MAAM,WAAW,GAAGC,gBAAsB,EAAA;CAC1C,MAAM,aAAa,GAAGC,kBAAwB,EAAA;AAC9C,CAAA,MAAM,WAAW,CAAC;AAClB,KAAI,WAAW,GAAG;SACV,IAAI,CAAC,UAAU,GAAG,IAAI,cAAc,CAAC,YAAY,EAAE;SACnD,IAAI,CAAC,UAAU,GAAG,IAAI,aAAa,CAAC,WAAW,EAAE;SACjD,IAAI,CAAC,QAAQ,GAAG,IAAI,WAAW,CAAC,SAAS,EAAE;AACnD,SAAQ,IAAI,CAAC,OAAO,GAAGC,YAAgC;AACvD;KACI,iBAAiB,CAAC,UAAU,EAAE;SAC1B,IAAI,OAAO,GAAG,KAAK;AAC3B,SAAQ,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE;AAC3C,SAAQ,IAAI,MAAM,KAAK,UAAU,EAAE;aACvB,OAAO,GAAG,IAAI;AAC1B;AACA,SAAQ,OAAO,OAAO;AACtB;AACA,KAAI,cAAc,GAAG;AACrB,SAAQ,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE;AAC3C,SAAQ,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC;AAC9B,aAAY,OAAO,KAAK;AACxB,SAAQ,OAAO,IAAI;AACnB;KACI,gBAAgB,CAAC,UAAU,EAAE;AACjC,SAAQ,IAAI;AACZ,aAAY,IAAI,aAAa,GAAG,IAAI,CAAC,aAAa,EAAE;AACpD,aAAY,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE;AAC1C,iBAAgB,MAAM,IAAI,KAAK,CAAC,CAAC,2CAA2C,CAAC,CAAC;AAC9E;kBACiB;AACjB,iBAAgB,aAAa,GAAG,IAAI,CAAC,UAAU,IAAI,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,EAAE;AACrF,iBAAgB,IAAI,aAAa,CAAC,MAAM,IAAI,CAAC,EAAE;AAC/C,qBAAoB,MAAM,IAAI,KAAK,CAAC,CAAC,oCAAoC,CAAC,CAAC;AAC3E;AACA;iBACgB,IAAI,CAAC,oBAAoB,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC,IAAI,CAAC,MAAM;AAChF,qBAAoB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,UAAU,EAAE,UAAU,EAAE,EAAE,UAAU,KAAK,EAAE;AAC9F,yBAAwB,IAAI,KAAK;AACjC,6BAA4B,MAAM,IAAI,KAAK,CAAC,CAAC,kBAAkB,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;AACjF,sBAAqB,CAAC;qBACF;AACpB,kBAAiB,CAAC;AAClB;AACA;SACQ,OAAO,GAAG,EAAE;aACR,MAAM,IAAI,KAAK,CAAC,CAAC,kBAAkB,EAAE,GAAG,CAAC,CAAC,CAAC;AACvD;AACA;AACA,KAAI,mBAAmB,CAAC,aAAa,EAAE,UAAU,EAAE;AACnD,SAAQ,IAAI;AACZ;aACY,IAAI,CAAC,oBAAoB,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC,IAAI,CAAC,MAAM;AAC5E,iBAAgB,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC;AAC9C,cAAa,CAAC;AACd;SACQ,OAAO,GAAG,EAAE;aACR,MAAM,IAAI,KAAK,CAAC,CAAC,qBAAqB,EAAE,GAAG,CAAC,CAAC,CAAC;AAC1D;AACA;AACA,KAAI,kBAAkB,GAAG;AACzB,SAAQ,IAAI;AACZ,aAAY,IAAI,aAAa,GAAG,IAAI,CAAC,aAAa,EAAE;AACpD,aAAY,IAAI,aAAa,CAAC,MAAM,IAAI,CAAC,EAAE;AAC3C,iBAAgB,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM;AACtD;AACA;aACY,IAAI,CAAC,oBAAoB,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM;iBACpD,IAAI,CAAC,gBAAgB,EAAE;AACvC,cAAa,CAAC;AACd;SACQ,OAAO,GAAG,EAAE;aACR,MAAM,IAAI,KAAK,CAAC,CAAC,oBAAoB,EAAE,GAAG,CAAC,CAAC,CAAC;AACzD;AACA;KACI,kBAAkB,CAAC,UAAU,EAAE;AACnC,SAAQ,MAAM,gBAAgB,GAAG,IAAI,CAAC,aAAa,EAAE;AACrD,SAAQ,IAAI,gBAAgB,CAAC,MAAM,IAAI,CAAC,EAAE;AAC1C,aAAY,MAAM,IAAI,KAAK,CAAC,CAAC,wCAAwC,CAAC,CAAC;AACvE;AACA,SAAQ,IAAI,gBAAgB,KAAK,UAAU,EAAE;AAC7C,aAAY,OAAO,IAAI;AACvB;cACa;AACb,aAAY,OAAO,KAAK;AACxB;AACA;AACA,KAAI,MAAM,oBAAoB,CAAC,aAAa,EAAE,aAAa,EAAE;AAC7D,SAAQ,IAAI;AACZ;aACY,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,gBAAgB,EAAE;AACjE;aACY,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,YAAY,CAAC;AACvE,aAAY,KAAK,CAAC,OAAO,CAAC,OAAO,MAAM,KAAK;iBAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC;iBAClD,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,QAAQ,CAAC;iBAC/D,IAAI,SAAS,EAAE;qBACX,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,QAAQ,EAAE,aAAa,EAAE,aAAa,CAAC;AAC1F;AACA,cAAa,CAAC;aACF;AACZ;SACQ,OAAO,GAAG,EAAE;aACR,MAAM,IAAI,KAAK,CAAC,CAAC,sBAAsB,EAAE,GAAG,CAAC,CAAC,CAAC;AAC3D;AACA;AACA,KAAI,aAAa,GAAG;SACZ,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC;SAC7C,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;SAC9B,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC;AAC5C,aAAY,OAAO,EAAE;AACrB,SAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE;aAC1C,OAAO,IAAI,CAAC,UAAU;AAClC;cACa;AACb,aAAY,OAAO,EAAE;AACrB;AACA;KACI,aAAa,CAAC,UAAU,EAAE;SACtB,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC;AACrD,SAAQ,IAAI,CAAC,UAAU,GAAG,UAAU;AACpC,SAAQ,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,EAAE,UAAU,KAAK,EAAE;AAC5D,aAAY,IAAI,KAAK;AACrB,iBAAgB,MAAM,IAAI,KAAK,CAAC,CAAC,eAAe,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;AAClE,UAAS,CAAC;AACV;AACA,KAAI,gBAAgB,GAAG;SACf,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC;SAC7C,OAAO,IAAI,CAAC,UAAU;AAC9B,SAAQ,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,EAAE,UAAU,KAAK,EAAE;AAC5D,aAAY,IAAI,KAAK;AACrB,iBAAgB,MAAM,IAAI,KAAK,CAAC,CAAC,kBAAkB,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;AACrE,UAAS,CAAC;AACV;AACA;AACA,CAAA,WAAA,CAAA,WAAmB,GAAG,WAAW;AACjC;;;;;;;;;AC1IA,CAAA,MAAM,CAAC,cAAc,CAAC,mBAAO,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AAC7D,CAA2B,mBAAA,CAAA,mBAAA,GAAG,SAAM;CACpC,MAAM,aAAa,GAAGH,kBAAyB,EAAA;AAC/C,CAAA,MAAM,mBAAmB,CAAC;AAC1B,KAAI,WAAW,GAAG;SACV,IAAI,CAAC,UAAU,GAAG,IAAI,aAAa,CAAC,WAAW,EAAE;AACzD,SAAQ,IAAI,CAAC,IAAI,GAAG,uBAAuB;AAC3C,SAAQ,IAAI,CAAC,MAAM,GAAGC,YAAiB;AACvC,SAAQ,IAAI,CAAC,QAAQ,GAAGC,YAAoB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI,uBAAuB,CAAC,UAAU,EAAE,IAAI,EAAE;AAC9C,SAAQ,MAAM,UAAU,GAAG,KAAK,CAAC;SACzB,MAAM,SAAS,GAAG,EAAE;AAC5B,SAAQ,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,CAAC;AAC7F,SAAQ,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC;AACvD,SAAQ,OAAO,MAAM;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;KACI,iBAAiB,CAAC,OAAO,EAAE;SACvB,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;AAClD;SACQ,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE;AAC1D;AACA,SAAQ,MAAM,GAAG,GAAG,IAAI,CAAC,uBAAuB,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC;AACvE,SAAQ,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC,QAAQ,EAAE;AAC/E,SAAQ,MAAM,eAAe,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;AACzE,SAAQ,OAAO,eAAe;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;KACI,iBAAiB,CAAC,eAAe,EAAE;AACvC,SAAQ,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAC,QAAQ,EAAE;AAC/E;SACQ,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE;AAC1D;AACA,SAAQ,MAAM,GAAG,GAAG,IAAI,CAAC,uBAAuB,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC;AACvE,SAAQ,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC;AACnE,SAAQ,MAAM,eAAe,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;SAC9D,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC;AACxD,SAAQ,OAAO,YAAY;AAC3B;AACA;AACA,CAAA,mBAAA,CAAA,mBAA2B,GAAG,mBAAmB;AACjD;;;;;;;;;;;AC3DA,CAAA,MAAM,CAAC,cAAc,CAAC,eAAO,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AAC7D,CAAuB,eAAA,CAAA,eAAA,GAAG,SAAM;CAChC,MAAM,WAAW,GAAGF,gBAAsB,EAAA;CAC1C,MAAM,aAAa,GAAGC,kBAAwB,EAAA;AAC9C,CAAA,MAAM,eAAe,CAAC;AACtB,KAAI,WAAW,GAAG;SACV,IAAI,CAAC,QAAQ,GAAG,IAAI,WAAW,CAAC,SAAS,EAAE;SAC3C,IAAI,CAAC,UAAU,GAAG,IAAI,aAAa,CAAC,WAAW,EAAE;AACzD;AACA;AACA;AACA;AACA;AACA;AACA,KAAI,MAAM,eAAe,CAAC,MAAM,EAAE,QAAQ,EAAE;SACpC,MAAM,GAAG,GAAG,mBAAmB;SAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,MAAM,CAAC;SAC/C,IAAI,IAAI,EAAE;AAClB,aAAY,IAAI;AAChB,iBAAgB,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,oBAAoB,CAAC,MAAM,EAAE,EAAE,EAAE,KAAK,CAAC;iBACzE,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,GAAG,EAAE,EAAE,EAAE,QAAQ,CAAC;AAC9D,iBAAgB,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC;AAC5C,iBAAgB,OAAO,OAAO,CAAC,OAAO,EAAE;AACxC;aACY,OAAO,GAAG,EAAE;iBACR,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1E;AACA;cACa;aACD,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,gBAAgB,CAAC,CAAC;AAC7F;AACA;AACA,KAAI,MAAM,eAAe,CAAC,MAAM,EAAE,QAAQ,EAAE;SACpC,MAAM,GAAG,GAAG,mBAAmB;SAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,MAAM,CAAC;SAC/C,IAAI,IAAI,EAAE;AAClB,aAAY,IAAI;AAChB,iBAAgB,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,oBAAoB,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC;iBAC/E,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE,CAAC;AAC9D,iBAAgB,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC;AAC5C,iBAAgB,OAAO,OAAO,CAAC,OAAO,EAAE;AACxC;aACY,OAAO,GAAG,EAAE;iBACR,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1E;AACA;cACa;aACD,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,gBAAgB,CAAC,CAAC;AAC7F;AACA;AACA;AACA,CAAA,eAAA,CAAA,eAAuB,GAAG,eAAe;AACzC;;;;;;;;;;;ACpDA,CAAA,MAAM,CAAC,cAAc,CAAC,YAAO,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AAC7D,CAAoB,YAAA,CAAA,YAAA,GAAG,SAAM;CAC7B,MAAM,aAAa,GAAGD,kBAAwB,EAAA;AAC9C,CAAA,MAAM,YAAY,CAAC;AACnB,KAAI,WAAW,GAAG;SACV,IAAI,CAAC,UAAU,GAAG,IAAI,aAAa,CAAC,WAAW,EAAE;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;KACI,MAAM,SAAS,CAAC,GAAG,EAAE,QAAQ,EAAE,UAAU,EAAE,aAAa,EAAE;AAC9D,SAAQ,IAAI,OAAO;SACX,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;AACrG,SAAQ,KAAK,MAAM,UAAU,IAAI,UAAU,EAAE;aACjC,IAAI,UAAU,GAAG,UAAU,IAAI,UAAU,IAAI,aAAa,EAAE;iBACxD,MAAM,UAAU,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC,UAAU;AAClE,iBAAgB,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE;AAC7C,qBAAoB,OAAO,OAAO,CAAC,MAAM,CAAC,iCAAiC,CAAC;AAC5E;AACA,iBAAgB,IAAI;AACpB;qBACoB,IAAI,CAAC,UAAU,CAAC,+BAA+B,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC;AACxF,qBAAoB,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC;qBAC3D,MAAM,IAAI,CAAC,wBAAwB,CAAC,GAAG,EAAE,UAAU,CAAC;qBACpD,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,EAAE,UAAU,CAAC;AACxE;qBACoB,IAAI,CAAC,UAAU,CAAC,+BAA+B,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC;AACvF,qBAAoB,OAAO,GAAG,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,WAAW;AAC3F;iBACgB,OAAO,GAAG,EAAE;qBACR,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,CAAC;AAC9D;AACA;AACA;AACA,SAAQ,OAAO,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA,KAAI,MAAM,wBAAwB,CAAC,GAAG,EAAE,UAAU,EAAE;AACpD,SAAQ,IAAI;aACA,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC;AAChE,aAAY,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC;AACtC,aAAY,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE;AAChD,iBAAgB,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,CAAC;AAC7E;aACY,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC;AACjE,aAAY,GAAG,CAAC,gBAAgB,CAAC,KAAK,CAAC;AACvC,aAAY,OAAO,OAAO,CAAC,OAAO,EAAE;AACpC;SACQ,OAAO,GAAG,EAAE;aACR,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC;AACnE,aAAY,GAAG,CAAC,gBAAgB,CAAC,KAAK,CAAC;aAC3B,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,yBAAyB,EAAE,GAAG,CAAC,CAAC,CAAC;AACpE;AACA;AACA;AACA,CAAA,YAAA,CAAA,YAAoB,GAAG,YAAY;AACnC;;;;;;;;;ACjEA,CAAA,MAAM,CAAC,cAAc,CAACK,QAAO,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AAC7D,CAAgBA,QAAA,CAAA,QAAA,GAAG,SAAM;CACzB,MAAM,cAAc,GAAGL,mBAA0B,EAAA;CACjD,MAAM,cAAc,GAAGC,mBAA0C,EAAA;CACjE,MAAM,gBAAgB,GAAGC,qBAA4C,EAAA;CACrE,MAAM,WAAW,GAAGC,gBAAuC,EAAA;CAC3D,MAAM,qBAAqB,GAAGC,0BAAiD,EAAA;CAC/E,MAAM,yBAAyB,GAAGE,8BAAoC,EAAA;CACtE,MAAM,iBAAiB,GAAGC,sBAA4B,EAAA;CACtD,MAAM,WAAW,GAAGC,gBAAsB,EAAA;CAC1C,MAAM,aAAa,GAAGC,kBAAwB,EAAA;CAC9C,MAAM,aAAa,GAAGC,kBAAwB,EAAA;CAC9C,MAAM,cAAc,GAAGC,mBAAyB,EAAA;AAChD,kBAAA,MAAM,QAAQ,CAAC;AACf,KAAI,WAAW,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE;SACvF,IAAI,CAAC,eAAe,GAAG,IAAI,qBAAqB,CAAC,mBAAmB,EAAE;SACtE,IAAI,CAAC,QAAQ,GAAG,IAAI,WAAW,CAAC,SAAS,EAAE;SAC3C,IAAI,CAAC,UAAU,GAAG,IAAI,aAAa,CAAC,WAAW,EAAE;SACjD,IAAI,CAAC,QAAQ,GAAG,IAAI,WAAW,CAAC,SAAS,EAAE;SAC3C,IAAI,CAAC,UAAU,GAAG,IAAI,cAAc,CAAC,YAAY,EAAE;SACnD,IAAI,CAAC,cAAc,GAAG,IAAI,iBAAiB,CAAC,eAAe,EAAE;SAC7D,IAAI,CAAC,UAAU,GAAG,IAAI,aAAa,CAAC,WAAW,EAAE;SACjD,IAAI,CAAC,WAAW,GAAG,IAAI,cAAc,CAAC,YAAY,EAAE;SACpD,IAAI,CAAC,kBAAkB,GAAG,IAAI,gBAAgB,CAAC,cAAc,EAAE;SAC/D,IAAI,CAAC,gBAAgB,GAAG,IAAI,cAAc,CAAC,YAAY,EAAE;AACjE,SAAQ,IAAI,CAAC,kBAAkB,GAAG,EAAE;SAC5B,IAAI,CAAC,UAAU,GAAG,IAAI,yBAAyB,CAAC,uBAAuB,EAAE;AACjF,SAAQ,IAAI,CAAC,MAAM,GAAG,MAAM;AAC5B,SAAQ,IAAI,CAAC,UAAU,GAAG,SAAS;AACnC,SAAQ,IAAI,CAAC,KAAK,GAAG,IAAI;AACzB,SAAQ,IAAI,CAAC,aAAa,GAAG,YAAY;AACzC,SAAQ,IAAI,CAAC,OAAO,GAAG,OAAO;AAC9B,SAAQ,IAAI,CAAC,QAAQ,GAAG,QAAQ;AAChC,SAAQ,IAAI,CAAC,kBAAkB,GAAG,OAAO;SACjC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC;AACvD,SAAQ,IAAI,CAAC,SAAS,GAAG,KAAK;AAC9B,SAAQ,IAAI,CAAC,mBAAmB,GAAG,KAAK;AACxC,SAAQ,IAAI,CAAC,UAAU,GAAG,UAAU,GAAG,UAAU,GAAG,IAAI,cAAc,CAAC,YAAY,EAAE;AACrF,SAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC;AACpC,aAAY,MAAM,IAAI,KAAK,CAAC,+BAA+B,GAAG,MAAM,CAAC;AACrE,SAAQ,OAAO,CAAC,GAAG,CAAC,CAAC,oBAAoB,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI,QAAQ,GAAG;SACP,OAAO,IAAI,CAAC,SAAS;AAC7B;AACA;AACA;AACA;AACA;AACA;KACI,MAAM,IAAI,GAAG;AACjB,SAAQ,IAAI,CAAC,SAAS,GAAG,KAAK;SACtB,IAAI,QAAQ,GAAG,EAAE;AACzB,SAAQ,IAAI;aACA,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI,CAAC,KAAK,KAAK,QAAQ,IAAI,IAAI,CAAC,KAAK,KAAK,YAAY,IAAI,IAAI,CAAC,KAAK,KAAK,YAAY,CAAC,EAAE;AAC5H,iBAAgB,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE;AAC1D,iBAAgB,IAAI,QAAQ,CAAC,MAAM,IAAI,CAAC,EAAE;AAC1C,qBAAoB,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM;AACrD;AACA;AACA,aAAY,IAAI,IAAI,CAAC,KAAK,KAAK,YAAY,EAAE;AAC7C,iBAAgB,MAAM,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC;AAChF;AACA,aAAY,IAAI,IAAI,CAAC,KAAK,KAAK,YAAY,EAAE;AAC7C,iBAAgB,MAAM,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC;iBAChE,QAAQ,GAAG,EAAE;AAC7B;AACA,aAAY,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,oBAAoB,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC;AACtG,aAAY,IAAI,CAAC,SAAS,GAAG,IAAI;AACjC,aAAY,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AAChC,iBAAgB,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC5E,iBAAgB,IAAI,IAAI,CAAC,OAAO,GAAG,UAAU,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;AAClG,qBAAoB,IAAI;AACxB,yBAAwB,MAAM,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AAC9F;AACA,yBAAwB,MAAM,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,kBAAkB,EAAE,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC;AACjH;AACA,yBAAwB,MAAM,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AACnF;qBACoB,OAAO,GAAG,EAAE;AAChC;AACA,yBAAwB,IAAI;AAC5B,6BAA4B,MAAM,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC;AACtF;yBACwB,OAAO,GAAG,EAAE;6BACR,MAAM,IAAI,KAAK,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;AAC3D;AACA;AACA;AACA;aACY;AACZ;SACQ,OAAO,GAAG,EAAE;aACR,IAAI,IAAI,CAAC,SAAS;iBACd,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC;aAC1C,MAAM,IAAI,KAAK,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI,OAAO,GAAG;AACd,SAAQ,IAAI;aACA,IAAI,CAAC,oBAAoB,EAAE;aAC3B,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC;AAClD;SACQ,OAAO,GAAG,EAAE;AACpB,aAAY,MAAM,IAAI,KAAK,CAAC,CAAC,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;AACnE;iBACgB;AAChB,aAAY,IAAI,CAAC,SAAS,GAAG,KAAK;AAClC;SACQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA,KAAI,aAAa,GAAG;SACZ,OAAO,IAAI,CAAC,mBAAmB;AACvC;AACA;AACA;AACA;AACA;AACA;KACI,gBAAgB,CAAC,KAAK,EAAE;AAC5B,SAAQ,IAAI,CAAC,mBAAmB,GAAG,KAAK;AACxC;AACA;AACA;AACA;AACA;AACA;AACA,KAAI,kBAAkB,GAAG;AACzB,SAAQ,IAAI;aACA,IAAI,CAAC,oBAAoB,EAAE;aAC3B,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC;AACjE,aAAY,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;AACvC,aAAY,OAAO,CAAC;AACpB;SACQ,OAAO,GAAG,EAAE;aACR,MAAM,IAAI,KAAK,CAAC,CAAC,oBAAoB,EAAE,GAAG,CAAC,CAAC,CAAC;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI,mBAAmB,GAAG;AAC1B,SAAQ,IAAI;aACA,IAAI,CAAC,oBAAoB,EAAE;aAC3B,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC;AAClE,aAAY,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC;AACxC,aAAY,OAAO,CAAC;AACpB;SACQ,OAAO,GAAG,EAAE;aACR,MAAM,IAAI,KAAK,CAAC,CAAC,qBAAqB,EAAE,GAAG,CAAC,CAAC,CAAC;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI,qBAAqB,GAAG;AAC5B,SAAQ,IAAI;aACA,IAAI,CAAC,oBAAoB,EAAE;aAC3B,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC;AACpE,aAAY,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC;AACxC,aAAY,OAAO,CAAC;AACpB;SACQ,OAAO,GAAG,EAAE;aACR,MAAM,IAAI,KAAK,CAAC,CAAC,qBAAqB,EAAE,GAAG,CAAC,CAAC,CAAC;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;KACI,MAAM,YAAY,GAAG;AACzB,SAAQ,IAAI;AACZ,aAAY,IAAI,IAAI,CAAC,KAAK,KAAK,YAAY,EAAE;AAC7C;AACA,iBAAgB,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM;AACxD,iBAAgB,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS;AAC3D,iBAAgB,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,CAAC;AACjF;aACY;AACZ;SACQ,OAAO,GAAG,EAAE;aACR,MAAM,IAAI,KAAK,CAAC,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC,CAAC;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI,UAAU,GAAG;SACT,IAAI,CAAC,oBAAoB,EAAE;AACnC,SAAQ,IAAI;AACZ,aAAY,MAAM,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC5E,aAAY,OAAO,cAAc;AACjC;SACQ,OAAO,GAAG,EAAE;aACR,IAAI,IAAI,CAAC,SAAS;iBACd,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC;aAC1C,MAAM,IAAI,KAAK,CAAC,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC,CAAC;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI,MAAM,QAAQ,CAAC,MAAM,EAAE;AAC3B;SACQ,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,MAAM,CAAC;AAC3D,SAAQ,IAAI,QAAQ,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;AACzC;AACA,aAAY,IAAI;AAChB,iBAAgB,MAAM,IAAI,CAAC,IAAI,EAAE;AACjC;aACY,OAAO,GAAG,EAAE;iBACR,MAAM,IAAI,KAAK,CAAC,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC,CAAC;AACnD;AACA;AACA;AACA,SAAQ,IAAI;aACA,IAAI,CAAC,OAAO,EAAE;AAC1B;SACQ,OAAO,GAAG,EAAE;AACpB,aAAY,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC;AACrD;AACA;SACQ,IAAI,QAAQ,EAAE;AACtB,aAAY,IAAI;iBACA,MAAM,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC;AAC1D;aACY,OAAO,GAAG,EAAE;AACxB,iBAAgB,MAAM,IAAI,KAAK,CAAC,CAAC,qBAAqB,EAAE,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC;AAC/E;AACA;SACQ;AACR;AACA;AACA;AACA;AACA;AACA;KACI,aAAa,CAAC,SAAS,EAAE;SACrB,IAAI,CAAC,oBAAoB,EAAE;AACnC,SAAQ,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS;AACrC,SAAQ,IAAI;AACZ,aAAY,MAAM,iBAAiB,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,CAAC;AACnG,aAAY,OAAO,iBAAiB;AACpC;SACQ,OAAO,GAAG,EAAE;aACR,MAAM,IAAI,KAAK,CAAC,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC,CAAC;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI,eAAe,GAAG;SACd,IAAI,CAAC,oBAAoB,EAAE;AACnC,SAAQ,IAAI,OAAO,GAAG,EAAE;AACxB,SAAQ,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS;AACrC;AACA,SAAQ,IAAI;AACZ,aAAY,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,CAAC;aAC7E,IAAI,CAAC,IAAI,EAAE;AACvB,iBAAgB,MAAM,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC;AAC5F,iBAAgB,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC;AACxF,iBAAgB,IAAI,cAAc,IAAI,YAAY,EAAE;AACpD,qBAAoB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC;qBACpD,IAAI,KAAK,GAAG;AAChC;AACA;AACA;AACA,gCAAgC,CAAC;qBACb,KAAK,IAAI,CAAC;AAC9B,8BAA8B,EAAE,IAAI,CAAC,EAAE,CAAC;AACxC,qBAAoB,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;AAC9F,qBAAoB,OAAO,GAAG,OAAO,CAAC,OAAO;AAC7C,qBAAoB,IAAI,OAAO,CAAC,OAAO,GAAG,CAAC,EAAE;AAC7C,yBAAwB,MAAM,IAAI,KAAK,CAAC,CAAC,mCAAmC,CAAC,CAAC;AAC9E;AACA;sBACqB;AACrB,qBAAoB,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC;AACrF;AACA;kBACiB;iBACD,OAAO,GAAG,CAAC;AAC3B;AACA,aAAY,OAAO,OAAO;AAC1B;SACQ,OAAO,GAAG,EAAE;aACR,MAAM,IAAI,KAAK,CAAC,CAAC,iBAAiB,EAAE,GAAG,CAAC,CAAC,CAAC;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;KACI,WAAW,CAAC,QAAQ,EAAE;SAClB,IAAI,CAAC,oBAAoB,EAAE;AACnC,SAAQ,IAAI;AACZ,aAAY,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC;aACxF,IAAI,CAAC,OAAO,EAAE;AAC1B,iBAAgB,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC;AAC1D;AACA,aAAY,MAAM,qBAAqB,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC;AACzF,aAAY,IAAI,IAAI,GAAG,CAAC,kCAAkC,CAAC;AAC3D,aAAY,IAAI,IAAI,CAAC,EAAE,qBAAqB,CAAC,cAAc,CAAC;AAC5D,aAAY,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC;AACrF,aAAY,IAAI,OAAO,CAAC,OAAO,GAAG,CAAC,EAAE;iBACrB,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,oBAAoB,EAAE;AACvE;kBACiB;AACjB,iBAAgB,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE;AACvC;AACA;SACQ,OAAO,GAAG,EAAE;AACpB,aAAY,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,oBAAoB,EAAE,GAAG,CAAC,CAAC,EAAE;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI,WAAW,GAAG;SACV,IAAI,CAAC,oBAAoB,EAAE;AACnC,SAAQ,IAAI;AACZ,aAAY,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC;aACxF,IAAI,CAAC,OAAO,EAAE;AAC1B,iBAAgB,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC;AAC1D;AACA,aAAY,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC7E,aAAY,IAAI,QAAQ,GAAG,CAAC,EAAE;iBACd,OAAO,EAAE,QAAQ,EAAE;AACnC;kBACiB;iBACD,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,kBAAkB,CAAC,EAAE;AACrE;AACA;SACQ,OAAO,GAAG,EAAE;AACpB,aAAY,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,oBAAoB,EAAE,GAAG,CAAC,CAAC,EAAE;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI,UAAU,CAAC,GAAG,EAAE,WAAW,EAAE,OAAO,EAAE;SAClC,IAAI,CAAC,oBAAoB,EAAE;AACnC,SAAQ,IAAI;aACA,IAAI,WAAW,EAAE;AAC7B,iBAAgB,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC;iBAC1D,OAAO,CAAC,GAAG,CAAC,CAAC,gCAAgC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1E,iBAAgB,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC;AAC/E;AACA,aAAY,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,CAAC;AACvF,aAAY,IAAI,OAAO,CAAC,OAAO,GAAG,CAAC,EAAE;AACrC,iBAAgB,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC;AAC1D;aACY,IAAI,WAAW,EAAE;AAC7B,iBAAgB,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC;AAChF;aACY,OAAO,OAAO,CAAC,OAAO;AAClC;SACQ,OAAO,YAAY,EAAE;AAC7B,aAAY,IAAI,OAAO,GAAG,CAAC,EAAE,YAAY,CAAC,CAAC;AAC3C,aAAY,IAAI;iBACA,IAAI,WAAW,EAAE;AACjC,qBAAoB,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC;AACtF;AACA;aACY,OAAO,WAAW,EAAE;AAChC,iBAAgB,OAAO,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;AAC9C;aACY,MAAM,IAAI,KAAK,CAAC,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE;SAC5B,IAAI,CAAC,oBAAoB,EAAE;AACnC,SAAQ,IAAI;AACZ,aAAY,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC;AAC9F,aAAY,OAAO,YAAY;AAC/B;SACQ,OAAO,GAAG,EAAE;aACR,MAAM,IAAI,KAAK,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,CAAC;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;KACI,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,OAAO,EAAE;SACxD,IAAI,CAAC,oBAAoB,EAAE;AACnC,SAAQ,IAAI;AACZ;aACY,IAAI,WAAW,EAAE;AAC7B,iBAAgB,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC;iBAC1D,OAAO,CAAC,GAAG,CAAC,CAAC,4BAA4B,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;AACtE,iBAAgB,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC;AAC/E;AACA;SACQ,OAAO,GAAG,EAAE;aACR,MAAM,IAAI,KAAK,CAAC,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC;AAC7C;AACA,SAAQ,IAAI;aACA,IAAI,KAAK,GAAG,SAAS;aACrB,IAAI,CAAC,OAAO,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;iBACjC,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,SAAS,CAAC;AAClE;aACY,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,CAAC;AACvG,aAAY,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;iBACpB,IAAI,WAAW,EAAE;AACjC,qBAAoB,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC;AACtF;AACA,iBAAgB,MAAM,IAAI,KAAK,CAAC,CAAC,yBAAyB,CAAC,CAAC;AAC5D;aACY,IAAI,WAAW,EAAE;AAC7B,iBAAgB,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC;AAChF;AACA,aAAY,OAAO,OAAO;AAC1B;SACQ,OAAO,GAAG,EAAE;aACR,IAAI,WAAW,EAAE;AAC7B,iBAAgB,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC;AAClF;aACY,MAAM,IAAI,KAAK,CAAC,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;KACI,OAAO,CAAC,GAAG,EAAE,WAAW,EAAE,UAAU,EAAE,OAAO,EAAE;SAC3C,IAAI,CAAC,oBAAoB,EAAE;AACnC,SAAQ,IAAI,OAAO,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE;AAChD,SAAQ,IAAI;AACZ;aACY,IAAI,WAAW,EAAE;AAC7B,iBAAgB,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC;iBAC1D,OAAO,CAAC,GAAG,CAAC,CAAC,6BAA6B,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;AACvE,iBAAgB,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC;AAC/E;AACA;SACQ,OAAO,GAAG,EAAE;aACR,MAAM,IAAI,KAAK,CAAC,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC;AAC9C;AACA,SAAQ,IAAI;AACZ,aAAY,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,CAAC;aACpF,IAAI,WAAW,EAAE;AAC7B,iBAAgB,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC;AAChF;AACA,aAAY,OAAO,OAAO;AAC1B;SACQ,OAAO,GAAG,EAAE;aACR,MAAM,OAAO,GAAG,GAAG;AAC/B,aAAY,IAAI;iBACA,IAAI,WAAW,EAAE;AACjC,qBAAoB,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC;AACtF;AACA;aACY,OAAO,GAAG,EAAE;AACxB,iBAAgB,MAAM,IAAI,KAAK,CAAC,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AACnE;AACA;AACA;AACA,KAAI,kBAAkB,GAAG;SACjB,IAAI,CAAC,oBAAoB,EAAE;AACnC,SAAQ,IAAI;aACA,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC;aACpD;AACZ;SACQ,OAAO,GAAG,EAAE;aACR,MAAM,IAAI,KAAK,CAAC,CAAC,oBAAoB,EAAE,GAAG,CAAC,CAAC,CAAC;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI,YAAY,GAAG;SACX,IAAI,CAAC,oBAAoB,EAAE;AACnC,SAAQ,IAAI;AACZ,aAAY,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC5E,aAAY,OAAO,UAAU;AAC7B;SACQ,OAAO,GAAG,EAAE;aACR,MAAM,IAAI,KAAK,CAAC,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC,CAAC;AACnD;AACA;KACI,UAAU,CAAC,QAAQ,EAAE;SACjB,IAAI,OAAO,GAAG,CAAC;SACf,IAAI,CAAC,oBAAoB,EAAE;AACnC,SAAQ,IAAI;AACZ;aACY,IAAI,CAAC,UAAU,CAAC,+BAA+B,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC;AACjF,aAAY,IAAI,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;AAC/D;iBACgB,OAAO,GAAG,IAAI,CAAC,kBAAkB,CAAC,oBAAoB,CAAC,IAAI,EAAE,QAAQ,CAAC;AACtF,iBAAgB,IAAI,OAAO,IAAI,CAAC,CAAC,EAAE;AACnC;qBACoB,OAAO,IAAI,IAAI,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,IAAI,EAAE,QAAQ,CAAC;AACvF;AACA;AACA,aAAY,IAAI,QAAQ,CAAC,KAAK,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;AAC7D;iBACgB,OAAO,IAAI,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,IAAI,EAAE,QAAQ,CAAC;AAC9E;AACA;aACY,IAAI,CAAC,UAAU,CAAC,+BAA+B,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC;AAChF,aAAY,OAAO,OAAO;AAC1B;SACQ,OAAO,GAAG,EAAE;aACR,MAAM,IAAI,KAAK,CAAC,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC,CAAC;AACjD;AACA;AACA,KAAI,UAAU,CAAC,IAAI,EAAE,SAAS,EAAE;SACxB,MAAM,MAAM,GAAG,EAAE;AACzB,SAAQ,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;AAClD,SAAQ,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO;AACrC,SAAQ,MAAM,CAAC,SAAS,GAAG,KAAK;AAChC,SAAQ,MAAM,CAAC,IAAI,GAAG,IAAI;SAClB,IAAI,CAAC,oBAAoB,EAAE;AACnC,SAAQ,IAAI;AACZ,aAAY,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC;aACxF,IAAI,OAAO,EAAE;AACzB,iBAAgB,IAAI,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;AAChG;kBACiB;AACjB,iBAAgB,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE;AAC/C,qBAAoB,MAAM,IAAI,KAAK,CAAC,CAAC,uBAAuB,CAAC,CAAC;AAC9D;AACA;AACA,aAAY,IAAI,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC;aAChF,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC;AAChD,aAAY,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;iBACnB,MAAM,GAAG,GAAG,CAAC,mCAAmC,CAAC,GAAG,CAAC,sBAAsB,CAAC;AAC5F,iBAAgB,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC;AACpC;aACY,IAAI,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,UAAU,CAAC;aACpD,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,aAAa,IAAI,SAAS,EAAE;AACpE,iBAAgB,UAAU,CAAC,SAAS,GAAG,IAAI;AAC3C,iBAAgB,UAAU,CAAC,SAAS,GAAG,IAAI;iBAC3B,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAAC,UAAU,CAAC;iBACpE,UAAU,GAAG,EAAE;AAC/B,iBAAgB,UAAU,CAAC,OAAO,GAAG,SAAS;iBAC9B,OAAO,GAAG,IAAI;AAC9B;aACY,IAAI,OAAO,EAAE;AACzB,iBAAgB,OAAO,UAAU;AACjC;kBACiB;AACjB,iBAAgB,MAAM,IAAI,KAAK,CAAC,CAAC,6BAA6B,CAAC,CAAC;AAChE;AACA;SACQ,OAAO,GAAG,EAAE;aACR,MAAM,IAAI,KAAK,CAAC,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC,CAAC;AACjD;AACA;AACA;AACA;AACA;AACA,KAAI,oBAAoB,GAAG;SACnB,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AAC/C,aAAY,MAAM,IAAI,KAAK,CAAC,CAAC,qBAAqB,EAAE,IAAI,CAAC,MAAM,CAAC,2CAA2C,CAAC,CAAC;AAC7G;AACA;AACA;AACA,CAAAN,QAAA,CAAA,QAAgB,GAAGO,UAAQ;AAC3B;;;;;;;;;AC3mBA,CAAA,MAAM,CAAC,cAAc,CAAC,GAAO,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AAC7D,CAAuB,GAAA,CAAA,eAAA,GAAG,SAAM;CAChC,MAAM,cAAc,GAAGZ,mBAAyB,EAAA;CAChD,MAAM,UAAU,GAAGC,eAAoC,EAAA;CACvD,MAAM,WAAW,GAAGC,gBAAsD,EAAA;CAC1E,MAAM,qBAAqB,GAAGC,0BAAgE,EAAA;CAC9F,MAAM,WAAW,GAAGC,gBAAqC,EAAA;CACzD,MAAM,aAAa,GAAGE,kBAAuC,EAAA;CAC7D,MAAM,aAAa,GAAGC,kBAAuC,EAAA;AAC7D,CAAA,MAAM,eAAe,CAAC;AACtB,KAAI,WAAW,GAAG;AAClB,SAAQ,IAAI,CAAC,eAAe,GAAG,EAAE;AACjC,SAAQ,IAAI,CAAC,SAAS,GAAG,EAAE;SACnB,IAAI,CAAC,QAAQ,GAAG,IAAI,WAAW,CAAC,SAAS,EAAE;SAC3C,IAAI,CAAC,UAAU,GAAG,IAAI,aAAa,CAAC,WAAW,EAAE;SACjD,IAAI,CAAC,QAAQ,GAAG,IAAI,WAAW,CAAC,SAAS,EAAE;SAC3C,IAAI,CAAC,eAAe,GAAG,IAAI,qBAAqB,CAAC,mBAAmB,EAAE;SACtE,IAAI,CAAC,UAAU,GAAG,IAAI,aAAa,CAAC,WAAW,EAAE;SACjD,IAAI,CAAC,UAAU,GAAG,IAAI,cAAc,CAAC,YAAY,EAAE;SACnD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE;AAC3D;AACA,KAAI,MAAM,gBAAgB,CAAC,OAAO,EAAE;SAC5B,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;SACvC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE;AAC9C,aAAY,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC;AAC3D;AACA,SAAQ,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ;SAC/B,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,GAAG,CAAC;SACrD,IAAI,SAAS,GAAG,OAAO,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,GAAG,KAAK;AACrE,SAAQ,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,SAAS,EAAE;AAC7C,aAAY,MAAM,IAAI,KAAK,CAAC,6DAA6D,CAAC;AAC1F;SACQ,IAAI,MAAM,GAAG,SAAS,IAAI,OAAO,CAAC,IAAI,KAAK;eACrC;AACd,eAAc,SAAS,IAAI,OAAO,CAAC,IAAI,KAAK;mBAC1B;AAClB,mBAAkB,SAAS,IAAI,OAAO,CAAC,IAAI,KAAK;uBAC1B;AACtB,uBAAsB,eAAe;AACrC,SAAQ,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;aACpB,SAAS,GAAG,KAAK;aACjB,MAAM,GAAG,eAAe;AACpC;SACQ,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,GAAG,KAAK;SAC5D,IAAI,QAAQ,GAAG,EAAE;SACjB,MAAM,kBAAkB,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC;AACpE,SAAQ,IAAI,kBAAkB,CAAC,MAAM,KAAK,CAAC,IAAI,kBAAkB,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;AACpF,aAAY,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC;AACnD;SACQ,MAAM,QAAQ,GAAG,QAAQ,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM;AACnE,SAAQ,MAAM,kBAAkB,GAAG,IAAI,UAAU,CAAC,QAAQ,CAAC,MAAM,GAAG,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC;AACpK,SAAQ,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,kBAAkB;SAC7C;AACR;AACA,KAAI,MAAM,eAAe,CAAC,OAAO,EAAE;SAC3B,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,UAAU,CAAC;SACvD,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,GAAG,KAAK;SAC5D,MAAM,QAAQ,GAAG,QAAQ,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM;SAC3D,MAAM,QAAQ,GAAG,IAAI,CAAC,iCAAiC,CAAC,QAAQ,CAAC;AACzE,SAAQ,IAAI;AACZ,aAAY,IAAI,QAAQ,CAAC,QAAQ,EAAE,EAAE;AACrC;iBACgB,QAAQ,CAAC,OAAO,EAAE;AAClC;AACA;SACQ,OAAO,GAAG,EAAE;AACpB,aAAY,MAAM,IAAI,KAAK,CAAC,CAAC,uCAAuC,EAAE,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;AACrG;iBACgB;AAChB;AACA,aAAY,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC;AAC3C;SACQ;AACR;AACA,KAAI,MAAM,IAAI,CAAC,OAAO,EAAE;SAChB,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC;SACvD,MAAM,UAAU,GAAG,EAAE;AAC7B,SAAQ,UAAU,CAAC,KAAK,GAAG,SAAS;AACpC,SAAQ,OAAO,UAAU;AACzB;AACA,KAAI,MAAM,IAAI,CAAC,OAAO,EAAE;SAChB,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,UAAU,CAAC;SACvD,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,GAAG,KAAK;SAC5D,MAAM,QAAQ,GAAG,QAAQ,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM;SAC3D,MAAM,QAAQ,GAAG,IAAI,CAAC,iCAAiC,CAAC,QAAQ,CAAC;AACzE,SAAQ,IAAI;AACZ,aAAY,MAAM,QAAQ,CAAC,IAAI,EAAE;aACrB;AACZ;SACQ,OAAO,GAAG,EAAE;aACR,MAAM,IAAI,KAAK,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;AAC3C;AACA;AACA,KAAI,MAAM,KAAK,CAAC,OAAO,EAAE;SACjB,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,UAAU,CAAC;SACvD,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,GAAG,KAAK;SAC5D,MAAM,QAAQ,GAAG,QAAQ,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM;SAC3D,MAAM,QAAQ,GAAG,IAAI,CAAC,iCAAiC,CAAC,QAAQ,CAAC;AACzE,SAAQ,IAAI,QAAQ,CAAC,QAAQ,EAAE,EAAE;AACjC,aAAY,IAAI;iBACA,QAAQ,CAAC,OAAO,EAAE;iBAClB;AAChB;aACY,OAAO,GAAG,EAAE;iBACR,MAAM,IAAI,KAAK,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;AAChD;AACA;cACa;aACD,MAAM,GAAG,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,WAAW,CAAC;aAC3C,MAAM,IAAI,KAAK,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;AAC5C;AACA;AACA,KAAI,MAAM,gBAAgB,CAAC,OAAO,EAAE;SAC5B,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,UAAU,CAAC;AAC/D,SAAQ,MAAM,QAAQ,GAAG,KAAK,GAAG,MAAM;SAC/B,MAAM,QAAQ,GAAG,IAAI,CAAC,iCAAiC,CAAC,QAAQ,CAAC;AACzE,SAAQ,IAAI,QAAQ,CAAC,QAAQ,EAAE,EAAE;AACjC,aAAY,IAAI;AAChB,iBAAgB,MAAM,OAAO,GAAG,QAAQ,CAAC,kBAAkB,EAAE;iBAC7C,OAAO,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE;AACxD;aACY,OAAO,GAAG,EAAE;iBACR,MAAM,IAAI,KAAK,CAAC,CAAC,kBAAkB,EAAE,GAAG,CAAC,CAAC,CAAC;AAC3D;AACA;cACa;aACD,MAAM,GAAG,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,WAAW,CAAC;aAC3C,MAAM,IAAI,KAAK,CAAC,CAAC,kBAAkB,EAAE,GAAG,CAAC,CAAC,CAAC;AACvD;AACA;AACA,KAAI,MAAM,iBAAiB,CAAC,OAAO,EAAE;SAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,UAAU,CAAC;AAC/D,SAAQ,MAAM,QAAQ,GAAG,KAAK,GAAG,MAAM;SAC/B,MAAM,QAAQ,GAAG,IAAI,CAAC,iCAAiC,CAAC,QAAQ,CAAC;AACzE,SAAQ,IAAI,QAAQ,CAAC,QAAQ,EAAE,EAAE;AACjC,aAAY,IAAI;AAChB,iBAAgB,MAAM,OAAO,GAAG,QAAQ,CAAC,mBAAmB,EAAE;iBAC9C,OAAO,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE;AACxD;aACY,OAAO,GAAG,EAAE;iBACR,MAAM,IAAI,KAAK,CAAC,CAAC,mBAAmB,EAAE,GAAG,CAAC,CAAC,CAAC;AAC5D;AACA;cACa;aACD,MAAM,GAAG,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,WAAW,CAAC;aAC3C,MAAM,IAAI,KAAK,CAAC,CAAC,mBAAmB,EAAE,GAAG,CAAC,CAAC,CAAC;AACxD;AACA;AACA,KAAI,MAAM,mBAAmB,CAAC,OAAO,EAAE;SAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,UAAU,CAAC;AAC/D,SAAQ,MAAM,QAAQ,GAAG,KAAK,GAAG,MAAM;SAC/B,MAAM,QAAQ,GAAG,IAAI,CAAC,iCAAiC,CAAC,QAAQ,CAAC;AACzE,SAAQ,IAAI,QAAQ,CAAC,QAAQ,EAAE,EAAE;AACjC,aAAY,IAAI;AAChB,iBAAgB,MAAM,OAAO,GAAG,QAAQ,CAAC,qBAAqB,EAAE;iBAChD,OAAO,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE;AACxD;aACY,OAAO,GAAG,EAAE;iBACR,MAAM,IAAI,KAAK,CAAC,CAAC,qBAAqB,EAAE,GAAG,CAAC,CAAC,CAAC;AAC9D;AACA;cACa;aACD,MAAM,GAAG,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,WAAW,CAAC;aAC3C,MAAM,IAAI,KAAK,CAAC,CAAC,qBAAqB,EAAE,GAAG,CAAC,CAAC,CAAC;AAC1D;AACA;AACA,KAAI,MAAM,mBAAmB,CAAC,OAAO,EAAE;SAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,UAAU,CAAC;AAC/D,SAAQ,MAAM,QAAQ,GAAG,KAAK,GAAG,MAAM;SAC/B,MAAM,QAAQ,GAAG,IAAI,CAAC,iCAAiC,CAAC,QAAQ,CAAC;AACzE,SAAQ,IAAI,QAAQ,CAAC,QAAQ,EAAE,EAAE;AACjC,aAAY,IAAI;AAChB,iBAAgB,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,EAAE;AACpD,iBAAgB,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE;AACtC;aACY,OAAO,GAAG,EAAE;iBACR,MAAM,IAAI,KAAK,CAAC,CAAC,qBAAqB,EAAE,GAAG,CAAC,CAAC,CAAC;AAC9D;AACA;cACa;aACD,MAAM,GAAG,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,WAAW,CAAC;aAC3C,MAAM,IAAI,KAAK,CAAC,CAAC,qBAAqB,EAAE,GAAG,CAAC,CAAC,CAAC;AAC1D;AACA;AACA,KAAI,MAAM,UAAU,CAAC,OAAO,EAAE;SACtB,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,UAAU,CAAC;SACvD,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,GAAG,KAAK;SAC5D,MAAM,QAAQ,GAAG,QAAQ,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM;SAC3D,MAAM,QAAQ,GAAG,IAAI,CAAC,iCAAiC,CAAC,QAAQ,CAAC;AACzE,SAAQ,IAAI,QAAQ,CAAC,QAAQ,EAAE,EAAE;AACjC,aAAY,IAAI;AAChB,iBAAgB,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,UAAU,EAAE;iBAC3C,MAAM,aAAa,GAAG,EAAE;AACxC,iBAAgB,aAAa,CAAC,OAAO,GAAG,OAAO;AAC/C,iBAAgB,OAAO,aAAa;AACpC;aACY,OAAO,GAAG,EAAE;iBACR,MAAM,IAAI,KAAK,CAAC,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC,CAAC;AACrD;AACA;cACa;aACD,MAAM,GAAG,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,WAAW,CAAC;aAC3C,MAAM,IAAI,KAAK,CAAC,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC,CAAC;AACjD;AACA;AACA,KAAI,MAAM,YAAY,CAAC,OAAO,EAAE;SACxB,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,UAAU,CAAC;SACvD,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,GAAG,KAAK;SAC5D,MAAM,QAAQ,GAAG,QAAQ,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM;SAC3D,MAAM,QAAQ,GAAG,IAAI,CAAC,iCAAiC,CAAC,QAAQ,CAAC;AACzE,SAAQ,IAAI,QAAQ,CAAC,QAAQ,EAAE,EAAE;AACjC,aAAY,IAAI;AAChB,iBAAgB,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,YAAY,EAAE;iBAC/C,MAAM,eAAe,GAAG,EAAE;AAC1C,iBAAgB,eAAe,CAAC,MAAM,GAAG,SAAS;AAClD,iBAAgB,OAAO,eAAe;AACtC;aACY,OAAO,GAAG,EAAE;iBACR,MAAM,IAAI,KAAK,CAAC,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC,CAAC;AACvD;AACA;cACa;aACD,MAAM,GAAG,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,WAAW,CAAC;aAC3C,MAAM,IAAI,KAAK,CAAC,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC,CAAC;AACnD;AACA;AACA,KAAI,MAAM,OAAO,CAAC,OAAO,EAAE;SACnB,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,UAAU,CAAC;SACvD,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,YAAY,CAAC;AACrE,SAAQ,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,aAAa,EAAE,IAAI,CAAC;SACrE,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,GAAG,KAAK;AACpE,SAAQ,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI;AACzF,SAAQ,MAAM,QAAQ,GAAG,KAAK,GAAG,MAAM;SAC/B,MAAM,QAAQ,GAAG,IAAI,CAAC,iCAAiC,CAAC,QAAQ,CAAC;AACzE,SAAQ,IAAI,QAAQ,CAAC,QAAQ,EAAE,EAAE;aACrB,IAAI,QAAQ,EAAE;iBACV,MAAM,GAAG,GAAG,gCAAgC;iBAC5C,MAAM,IAAI,KAAK,CAAC,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC;AAClD;AACA,aAAY,IAAI;AAChB,iBAAgB,MAAM,aAAa,GAAG,QAAQ,CAAC,UAAU,CAAC,UAAU,EAAE,WAAW,EAAE,OAAO,CAAC;AAC3F,iBAAgB,IAAI,aAAa,GAAG,CAAC,EAAE;AACvC,qBAAoB,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC;AAC1D;sBACqB;qBACD,OAAO,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,aAAa,EAAE,EAAE;AAClE;AACA;aACY,OAAO,GAAG,EAAE;iBACR,MAAM,IAAI,KAAK,CAAC,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC;AAClD;AACA;cACa;aACD,MAAM,GAAG,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,WAAW,CAAC;aAC3C,MAAM,IAAI,KAAK,CAAC,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC;AAC9C;AACA;AACA,KAAI,MAAM,UAAU,CAAC,OAAO,EAAE;SACtB,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,UAAU,CAAC;SACvD,MAAM,eAAe,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,KAAK,CAAC;AACnE,SAAQ,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,aAAa,EAAE,IAAI,CAAC;SACrE,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,GAAG,KAAK;AACpE,SAAQ,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI;AAClG,SAAQ,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI;AACzF,SAAQ,MAAM,QAAQ,GAAG,KAAK,GAAG,MAAM;SAC/B,MAAM,QAAQ,GAAG,IAAI,CAAC,iCAAiC,CAAC,QAAQ,CAAC;AACzE,SAAQ,KAAK,MAAM,KAAK,IAAI,eAAe,EAAE;AAC7C,aAAY,IAAI,EAAE,WAAW,IAAI,KAAK,CAAC,IAAI,EAAE,QAAQ,IAAI,KAAK,CAAC,EAAE;AACjE,iBAAgB,MAAM,IAAI,KAAK,CAAC,oCAAoC,GAAG,6BAA6B,CAAC;AACrG;AACA;AACA,SAAQ,IAAI,QAAQ,CAAC,QAAQ,EAAE,EAAE;aACrB,IAAI,QAAQ,EAAE;iBACV,MAAM,GAAG,GAAG,gCAAgC;iBAC5C,MAAM,IAAI,KAAK,CAAC,CAAC,mBAAmB,EAAE,GAAG,CAAC,CAAC,CAAC;AAC5D;AACA,aAAY,IAAI;AAChB,iBAAgB,MAAM,aAAa,GAAG,QAAQ,CAAC,OAAO,CAAC,eAAe,EAAE,WAAW,EAAE,UAAU,EAAE,OAAO,CAAC;AACzG,iBAAgB,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE;AAC9C,qBAAoB,MAAM,IAAI,KAAK,CAAC,CAAC,4BAA4B,CAAC,CAAC;AACnE;sBACqB;AACrB,qBAAoB,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE;AACrD;AACA;aACY,OAAO,GAAG,EAAE;iBACR,MAAM,IAAI,KAAK,CAAC,CAAC,mBAAmB,EAAE,GAAG,CAAC,CAAC,CAAC;AAC5D;AACA;cACa;aACD,MAAM,GAAG,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,WAAW,CAAC;aAC3C,MAAM,IAAI,KAAK,CAAC,CAAC,mBAAmB,EAAE,GAAG,CAAC,CAAC,CAAC;AACxD;AACA;AACA,KAAI,MAAM,GAAG,CAAC,OAAO,EAAE;SACf,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,UAAU,CAAC;SACvD,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,WAAW,CAAC;AACnE,SAAQ,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,QAAQ,EAAE,EAAE,CAAC;AACjE,SAAQ,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,aAAa,EAAE,IAAI,CAAC;SACrE,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,GAAG,KAAK;SAC5D,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI;AACzE,SAAQ,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI;AACzF,SAAQ,MAAM,QAAQ,GAAG,KAAK,GAAG,MAAM;SAC/B,MAAM,QAAQ,GAAG,IAAI,CAAC,iCAAiC,CAAC,QAAQ,CAAC;AACzE,SAAQ,IAAI,QAAQ,CAAC,QAAQ,EAAE,EAAE;aACrB,IAAI,QAAQ,EAAE;iBACV,MAAM,GAAG,GAAG,gCAAgC;iBAC5C,MAAM,IAAI,KAAK,CAAC,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC,CAAC;AACrD;AACA,aAAY,IAAI;AAChB,iBAAgB,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,OAAO,CAAC;AACtG,iBAAgB,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE;AAC7C;aACY,OAAO,GAAG,EAAE;iBACR,MAAM,IAAI,KAAK,CAAC,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;AACtD;AACA;cACa;aACD,MAAM,GAAG,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,WAAW,CAAC;aAC3C,MAAM,IAAI,KAAK,CAAC,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC,CAAC;AACjD;AACA;AACA,KAAI,MAAM,KAAK,CAAC,OAAO,EAAE;SACjB,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,UAAU,CAAC;SACvD,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,WAAW,CAAC;AACnE,SAAQ,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,QAAQ,EAAE,EAAE,CAAC;AACjE,SAAQ,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;AACpC,aAAY,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC;AAC3E;SACQ,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,GAAG,KAAK;AACpE,SAAQ,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI;SACjF,MAAM,QAAQ,GAAG,QAAQ,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM;SAC3D,MAAM,QAAQ,GAAG,IAAI,CAAC,iCAAiC,CAAC,QAAQ,CAAC;AACzE,SAAQ,IAAI,QAAQ,CAAC,QAAQ,EAAE,EAAE;AACjC,aAAY,IAAI;AAChB,iBAAgB,MAAM,WAAW,GAAG,QAAQ,CAAC,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC;AAClF,iBAAgB,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE;AAC9C;aACY,OAAO,GAAG,EAAE;iBACR,MAAM,IAAI,KAAK,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;AAChD;AACA;cACa;aACD,MAAM,GAAG,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,WAAW,CAAC;aAC3C,MAAM,IAAI,KAAK,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;AAC5C;AACA;AACA,KAAI,MAAM,UAAU,CAAC,OAAO,EAAE;SACtB,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,UAAU,CAAC;SACvD,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,GAAG,KAAK;SAC5D,MAAM,QAAQ,GAAG,QAAQ,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM;AACnE,SAAQ,IAAI,CAAC,iCAAiC,CAAC,QAAQ,CAAC;AACxD;AACA,SAAQ,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,MAAM,GAAG,WAAW,CAAC;AACzE,SAAQ,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE;AACnC;AACA;AACA;AACA;AACA;AACA,KAAI,MAAM,QAAQ,CAAC,OAAO,EAAE;SACpB,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,UAAU,CAAC;SACvD,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,GAAG,KAAK;SAC5D,MAAM,QAAQ,GAAG,QAAQ,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM;SAC3D,MAAM,QAAQ,GAAG,IAAI,CAAC,iCAAiC,CAAC,QAAQ,CAAC;AACzE,SAAQ,MAAM,MAAM,GAAG,QAAQ,CAAC,QAAQ,EAAE;AAC1C,SAAQ,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE;AACjC;AACA,KAAI,MAAM,UAAU,CAAC,OAAO,EAAE;SACtB,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,UAAU,CAAC;AAC/D,SAAQ,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,MAAM,GAAG,WAAW,CAAC;AACzE,SAAQ,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE;AACnC;AACA,KAAI,MAAM,aAAa,CAAC,OAAO,EAAE;SACzB,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,UAAU,CAAC;SACvD,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC;SACvD,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,GAAG,KAAK;SAC5D,MAAM,QAAQ,GAAG,QAAQ,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM;SAC3D,MAAM,QAAQ,GAAG,IAAI,CAAC,iCAAiC,CAAC,QAAQ,CAAC;AACzE,SAAQ,IAAI,QAAQ,CAAC,QAAQ,EAAE,EAAE;AACjC,aAAY,IAAI;iBACA,MAAM,mBAAmB,GAAG,MAAM,QAAQ,CAAC,aAAa,CAAC,SAAS,CAAC;AACnF,iBAAgB,OAAO,EAAE,MAAM,EAAE,mBAAmB,EAAE;AACtD;aACY,OAAO,GAAG,EAAE;iBACR,MAAM,IAAI,KAAK,CAAC,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC,CAAC;AACxD;AACA;cACa;aACD,MAAM,GAAG,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,WAAW,CAAC;aAC3C,MAAM,IAAI,KAAK,CAAC,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC,CAAC;AACpD;AACA;AACA,KAAI,MAAM,cAAc,CAAC,OAAO,EAAE;SAC1B,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,UAAU,CAAC;SACvD,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,GAAG,KAAK;AACpE,SAAQ,MAAM,QAAQ,GAAG,KAAK,GAAG,MAAM;SAC/B,MAAM,QAAQ,GAAG,IAAI,CAAC,iCAAiC,CAAC,QAAQ,CAAC;SACjE,IAAI,QAAQ,EAAE;aACV,MAAM,GAAG,GAAG,gCAAgC;aAC5C,MAAM,IAAI,KAAK,CAAC,CAAC,uBAAuB,EAAE,GAAG,CAAC,CAAC,CAAC;AAC5D;AACA,SAAQ,IAAI;aACA,MAAM,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,WAAW,CAAC;aAC7C;AACZ;SACQ,OAAO,GAAG,EAAE;aACR,MAAM,IAAI,KAAK,CAAC,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAC,CAAC;AACrD;AACA;AACA,KAAI,MAAM,WAAW,CAAC,OAAO,EAAE;SACvB,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,YAAY,CAAC;SAC7D,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC;SACtC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,OAAO,CAAC;SACnD,IAAI,CAAC,OAAO,EAAE;AACtB,aAAY,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC;AAC9D;cACa;AACb,aAAY,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE;AACnC;AACA;AACA,KAAI,MAAM,cAAc,CAAC,OAAO,EAAE;SAC1B,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,YAAY,CAAC;SAC7D,IAAI,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC;SACpC,IAAI,MAAM,GAAG,eAAe;SAC5B,MAAM,GAAG,GAAG,SAAS;AAC7B,SAAQ,IAAI,GAAG,IAAI,OAAO,EAAE;AAC5B;aACY,MAAM,GAAG,QAAQ;aACjB,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAAC,OAAO,CAAC,OAAO,CAAC;AAC7E;SACQ,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,OAAO,CAAC;SACnD,IAAI,CAAC,OAAO,EAAE;AACtB,aAAY,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC;AACrE;SACQ,MAAM,QAAQ,GAAG,OAAO;SACxB,MAAM,MAAM,GAAG,CAAC,EAAE,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC;AACtD,SAAQ,MAAM,eAAe,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC;AACrD,SAAQ,MAAM,SAAS,GAAG,QAAQ,CAAC,SAAS,IAAI,KAAK;AACrD,SAAQ,MAAM,SAAS,GAAG,QAAQ,CAAC,SAAS,IAAI,KAAK;AACrD,SAAQ,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,IAAI,MAAM;AAC5C,SAAQ,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,SAAS,EAAE;AAC7C,aAAY,MAAM,IAAI,KAAK,CAAC,6DAA6D,CAAC;AAC1F;AACA;SACQ,MAAM,QAAQ,GAAG,IAAI,UAAU,CAAC,QAAQ,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,eAAe,EAAE,IAAI,CAAC,YAAY,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC;AAC3I,SAAQ,IAAI;AACZ,aAAY,IAAI,SAAS,IAAI,IAAI,KAAK,MAAM,EAAE;iBAC9B,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,MAAM,CAAC;iBACnD,IAAI,QAAQ,EAAE;qBACV,MAAM,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC;AAC9D;AACA;AACA;AACA,aAAY,MAAM,QAAQ,CAAC,IAAI,EAAE;AACjC,aAAY,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,YAAY,EAAE;aAC/C,IAAI,IAAI,KAAK,MAAM,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;AACzD,iBAAgB,MAAM,cAAc,GAAG,MAAM,QAAQ,CAAC,UAAU,EAAE;AAClE,iBAAgB,IAAI,eAAe,GAAG,cAAc,EAAE;qBAClC,MAAM,IAAI,KAAK,CAAC,CAAC,mDAAmD,EAAE,cAAc,CAAC,CAAC,CAAC;AAC3G;AACA,iBAAgB,IAAI,cAAc,KAAK,eAAe,EAAE;qBACpC,OAAO,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE;AACtD;AACA;AACA;aACY,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC;AAC/D;aACY,QAAQ,CAAC,OAAO,EAAE;aAClB,OAAO,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE;AACpD;SACQ,OAAO,GAAG,EAAE;aACR,MAAM,IAAI,KAAK,CAAC,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAC,CAAC;AACrD;AACA;AACA,KAAI,MAAM,YAAY,CAAC,OAAO,EAAE;SACxB,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,UAAU,CAAC;SACvD,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,gBAAgB,CAAC;AACzE,SAAQ,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,UAAU,EAAE,KAAK,CAAC;AACxE,SAAQ,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,WAAW,EAAE,KAAK,CAAC;SAClE,MAAM,QAAQ,GAAG,QAAQ,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM;SAC3D,MAAM,QAAQ,GAAG,IAAI,CAAC,iCAAiC,CAAC,QAAQ,CAAC;AACzE,SAAQ,IAAI,QAAQ,CAAC,QAAQ,EAAE,EAAE;AACjC,aAAY,IAAI;iBACA,MAAM,gBAAgB,GAAG,QAAQ,CAAC,UAAU,CAAC,UAAU,EAAE,SAAS,CAAC;iBACnE,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC;AAChE,iBAAgB,IAAI,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE;AACpD,qBAAoB,MAAM,IAAI,KAAK,CAAC,CAAC,cAAc,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC;AAChF;sBACqB;AACrB,qBAAoB,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE;AACvD;AACA;aACY,OAAO,GAAG,EAAE;iBACR,MAAM,IAAI,KAAK,CAAC,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC,CAAC;AACvD;AACA;cACa;aACD,MAAM,GAAG,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,WAAW,CAAC;aAC3C,MAAM,IAAI,KAAK,CAAC,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC,CAAC;AACnD;AACA;AACA,KAAI,MAAM,eAAe,CAAC,OAAO,EAAE;SAC3B,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,UAAU,CAAC;SACvD,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,GAAG,KAAK;AACpE,SAAQ,MAAM,QAAQ,GAAG,KAAK,GAAG,MAAM;SAC/B,MAAM,QAAQ,GAAG,IAAI,CAAC,iCAAiC,CAAC,QAAQ,CAAC;AACzE,SAAQ,IAAI,QAAQ,CAAC,QAAQ,EAAE,EAAE;aACrB,IAAI,QAAQ,EAAE;iBACV,MAAM,GAAG,GAAG,gCAAgC;iBAC5C,MAAM,IAAI,KAAK,CAAC,CAAC,wBAAwB,EAAE,GAAG,CAAC,CAAC,CAAC;AACjE;AACA,aAAY,IAAI;AAChB,iBAAgB,MAAM,qBAAqB,GAAG,MAAM,QAAQ,CAAC,eAAe,EAAE;AAC9E,iBAAgB,OAAO;AACvB,qBAAoB,OAAO,EAAE,EAAE,OAAO,EAAE,qBAAqB,EAAE;kBAC9C;AACjB;aACY,OAAO,GAAG,EAAE;iBACR,MAAM,IAAI,KAAK,CAAC,CAAC,iBAAiB,EAAE,GAAG,CAAC,CAAC,CAAC;AAC1D;AACA;cACa;aACD,MAAM,GAAG,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,WAAW,CAAC;aAC3C,MAAM,IAAI,KAAK,CAAC,CAAC,iBAAiB,EAAE,GAAG,CAAC,CAAC,CAAC;AACtD;AACA;AACA,KAAI,MAAM,WAAW,CAAC,OAAO,EAAE;SACvB,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,UAAU,CAAC;SACvD,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,UAAU,CAAC;SACzD,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,GAAG,KAAK;AACpE,SAAQ,MAAM,QAAQ,GAAG,KAAK,GAAG,MAAM;SAC/B,MAAM,QAAQ,GAAG,IAAI,CAAC,iCAAiC,CAAC,QAAQ,CAAC;AACzE,SAAQ,IAAI,QAAQ,CAAC,QAAQ,EAAE,EAAE;aACrB,IAAI,QAAQ,EAAE;iBACV,MAAM,GAAG,GAAG,gCAAgC;iBAC5C,MAAM,IAAI,KAAK,CAAC,CAAC,oBAAoB,EAAE,GAAG,CAAC,CAAC,CAAC;AAC7D;AACA,aAAY,IAAI;AAChB,iBAAgB,MAAM,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC;iBACpC;AAChB;aACY,OAAO,GAAG,EAAE;iBACR,MAAM,IAAI,KAAK,CAAC,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC,CAAC;AACtD;AACA;cACa;aACD,MAAM,GAAG,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,WAAW,CAAC;aAC3C,MAAM,IAAI,KAAK,CAAC,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC,CAAC;AAClD;AACA;AACA,KAAI,MAAM,WAAW,CAAC,OAAO,EAAE;SACvB,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,UAAU,CAAC;SACvD,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,GAAG,KAAK;SAC5D,MAAM,QAAQ,GAAG,QAAQ,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM;SAC3D,MAAM,QAAQ,GAAG,IAAI,CAAC,iCAAiC,CAAC,QAAQ,CAAC;AACzE,SAAQ,IAAI,QAAQ,CAAC,QAAQ,EAAE,EAAE;AACjC,aAAY,IAAI;AAChB,iBAAgB,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,WAAW,EAAE;AACxD,iBAAgB,OAAO,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC;AAC3C;aACY,OAAO,GAAG,EAAE;iBACR,MAAM,IAAI,KAAK,CAAC,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC,CAAC;AACtD;AACA;cACa;aACD,MAAM,GAAG,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,WAAW,CAAC;aAC3C,MAAM,IAAI,KAAK,CAAC,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC,CAAC;AAClD;AACA;AACA,KAAI,MAAM,kBAAkB,CAAC,OAAO,EAAE;SAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,UAAU,CAAC;SACvD,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,GAAG,KAAK;AACpE,SAAQ,MAAM,QAAQ,GAAG,KAAK,GAAG,MAAM;SAC/B,MAAM,QAAQ,GAAG,IAAI,CAAC,iCAAiC,CAAC,QAAQ,CAAC;AACzE,SAAQ,IAAI,QAAQ,CAAC,QAAQ,EAAE,EAAE;aACrB,IAAI,QAAQ,EAAE;iBACV,MAAM,GAAG,GAAG,gCAAgC;iBAC5C,MAAM,IAAI,KAAK,CAAC,CAAC,oBAAoB,EAAE,GAAG,CAAC,CAAC,CAAC;AAC7D;AACA,aAAY,IAAI;AAChB,iBAAgB,MAAM,QAAQ,CAAC,kBAAkB,EAAE;AACnD,iBAAgB,OAAO,OAAO,CAAC,OAAO,EAAE;AACxC;aACY,OAAO,GAAG,EAAE;iBACR,MAAM,IAAI,KAAK,CAAC,CAAC,oBAAoB,EAAE,GAAG,CAAC,CAAC,CAAC;AAC7D;AACA;cACa;aACD,MAAM,GAAG,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,WAAW,CAAC;aAC3C,MAAM,IAAI,KAAK,CAAC,CAAC,oBAAoB,EAAE,GAAG,CAAC,CAAC,CAAC;AACzD;AACA;AACA,KAAI,MAAM,mBAAmB,CAAC,OAAO,EAAE;SAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,UAAU,CAAC;SACvD,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,SAAS,CAAC;AAChE,SAAQ,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE;aAC5B,MAAM,kBAAkB,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;AAC3D,aAAY,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE;AACzG,iBAAgB,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC;AACzF;AACA,aAAY,IAAI,OAAO,OAAO,CAAC,SAAS,IAAI,QAAQ,EAAE;AACtD,iBAAgB,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC;AACrE;AACA,aAAY,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE;AAC9C,iBAAgB,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,OAAO;AACzE;kBACiB;iBACD,MAAM,kBAAkB,GAAG,EAAE;AAC7C,iBAAgB,kBAAkB,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,OAAO;AAC/D,iBAAgB,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,GAAG,kBAAkB;AACjE;AACA;SACQ;AACR;AACA,KAAI,MAAM,cAAc,CAAC,OAAO,EAAE;AAClC,SAAQ,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,WAAW,EAAE,KAAK,CAAC;AAC1E;SACQ,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,sBAAsB,EAAE;SAC3D,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,YAAY,CAAC;SAC3D,IAAI,UAAU,EAAE;AACxB;aACY,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,YAAY,CAAC;AACxE;AACA,aAAY,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK;iBACzB,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,KAAK,KAAK,EAAE;AAC5D;qBACoB,MAAM,IAAI,CAAC,QAAQ,CAAC,uBAAuB,CAAC,EAAE,EAAE,SAAS,CAAC;AAC9E;iBACgB,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,KAAK,MAAM,EAAE;qBACzC,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,sBAAsB,EAAE;AAC5E,qBAAoB,MAAM,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,EAAE,SAAS,EAAE,SAAS,CAAC;AAC/E;AACA,cAAa,CAAC;aACF;AACZ;cACa;aACD,MAAM,IAAI,KAAK,CAAC,CAAC,wDAAwD,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC;AACvG;AACA;AACA,KAAI,MAAM,kBAAkB,CAAC,OAAO,EAAE;AACtC,SAAQ,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC;AAC3D,SAAQ,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,WAAW,EAAE,KAAK,CAAC;AAC1E,SAAQ,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE;AAC9B,aAAY,MAAM,IAAI,KAAK,CAAC,CAAC,gDAAgD,CAAC,CAAC;AAC/E;SACQ,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE;SAC9C,MAAM,IAAI,CAAC,QAAQ,CAAC,oBAAoB,CAAC,GAAG,EAAE,SAAS,CAAC;SACxD,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,MAAM,EAAE;AACtD,aAAY,MAAM,OAAO,GAAG,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;AACnE,aAAY,MAAM,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,OAAO,EAAE,SAAS,EAAE,SAAS,CAAC;AAC5E;SACQ,IAAI,SAAS,EAAE;AACvB,aAAY,MAAM,IAAI,CAAC,QAAQ,CAAC,qBAAqB,EAAE;AACvD;cACa;aACD,MAAM,IAAI,KAAK,CAAC,CAAC,2DAA2D,EAAE,SAAS,CAAC,CAAC,CAAC;AACtG;SACQ;AACR;KACI,MAAM,eAAe,GAAG;AAC5B;SACQ,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,gBAAgB,EAAE;AAC7D;SACQ,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,YAAY,CAAC;AACnE,SAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;AAC9B,aAAY,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE;AACpC;cACa;aACD,MAAM,IAAI,KAAK,CAAC,CAAC,sCAAsC,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC;AACrF;AACA;AACA,KAAI,MAAM,2BAA2B,CAAC,OAAO,EAAE;SACvC,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,SAAS,CAAC;SACvD,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,WAAW,CAAC;SAC3D,MAAM,sBAAsB,GAAG,EAAE;AACzC,SAAQ,sBAAsB,CAAC,MAAM,GAAG,KAAK;SACrC,MAAM,OAAO,GAAG,EAAE;SAClB,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC,KAAK;AACtC,aAAY,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;AACpD,UAAS,CAAC;AACV,SAAQ,IAAI;AACZ,aAAY,IAAI,gBAAgB,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AACvE,aAAY,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC;AACrD,aAAY,IAAI,gBAAgB,CAAC,IAAI,KAAK,CAAC,EAAE;AAC7C,iBAAgB,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AACnE,iBAAgB,OAAO,OAAO,CAAC,OAAO,CAAC,sBAAsB,CAAC;AAC9D;aACY,IAAI,gBAAgB,CAAC,IAAI,GAAG,gBAAgB,CAAC,IAAI,EAAE;AAC/D,iBAAgB,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AACnE,iBAAgB,OAAO,OAAO,CAAC,OAAO,CAAC,sBAAsB,CAAC;AAC9D;aACY,IAAI,gBAAgB,CAAC,IAAI,GAAG,gBAAgB,CAAC,IAAI,EAAE;AAC/D,iBAAgB,KAAK,MAAM,GAAG,IAAI,gBAAgB,EAAE;AACpD,qBAAoB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;yBACpD,MAAM,GAAG,GAAG,EAAE;yBACd,IAAI,QAAQ,GAAG,KAAK;yBACpB,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,KAAK,EAAE;6BAC/B,QAAQ,GAAG,IAAI;AAC3C;yBACwB,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;AACvD,yBAAwB,GAAG,CAAC,QAAQ,GAAG,QAAQ;AAC/C,yBAAwB,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC;AACvD;AACA;AACA;AACA,aAAY,gBAAgB,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;aACvD,IAAI,gBAAgB,CAAC,IAAI,KAAK,gBAAgB,CAAC,IAAI,EAAE;iBACjD,MAAM,sBAAsB,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;AACjH,iBAAgB,IAAI,sBAAsB,CAAC,IAAI,KAAK,CAAC,EAAE;AACvD,qBAAoB,sBAAsB,CAAC,MAAM,GAAG,IAAI;AACxD,qBAAoB,OAAO,sBAAsB;AACjD;sBACqB;AACrB,qBAAoB,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AACvE,qBAAoB,OAAO,sBAAsB;AACjD;AACA;kBACiB;AACjB,iBAAgB,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AACnE,iBAAgB,OAAO,sBAAsB;AAC7C;AACA;SACQ,OAAO,GAAG,EAAE;aACR,MAAM,IAAI,KAAK,CAAC,CAAC,6BAA6B,EAAE,GAAG,CAAC,CAAC,CAAC;AAClE;AACA;KACI,MAAM,cAAc,GAAG;AAC3B,SAAQ,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;AAChC,aAAY,MAAM,IAAI,KAAK,CAAC,CAAC,iFAAiF,CAAC,CAAC;AAChH;AACA,SAAQ,IAAI;aACA,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,cAAc,EAAE;AAC7D,aAAY,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE;AACvC;SACQ,OAAO,GAAG,EAAE;aACR,MAAM,IAAI,KAAK,CAAC,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAC,CAAC;AACrD;AACA;AACA,KAAI,MAAM,iBAAiB,CAAC,OAAO,EAAE;AACrC,SAAQ,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;AAChC,aAAY,MAAM,IAAI,KAAK,CAAC,CAAC,oFAAoF,CAAC,CAAC;AACnH;SACQ,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,GAAG,EAAE;AACvE,SAAQ,IAAI,UAAU,CAAC,MAAM,IAAI,CAAC,EAAE;AACpC,aAAY,MAAM,IAAI,KAAK,CAAC,CAAC,6CAA6C,CAAC,CAAC;AAC5E;AACA,SAAQ,IAAI;aACA,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,UAAU,CAAC;AACzE,aAAY,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE;AACtC;SACQ,OAAO,GAAG,EAAE;aACR,MAAM,IAAI,KAAK,CAAC,CAAC,mBAAmB,EAAE,GAAG,CAAC,CAAC,CAAC;AACxD;AACA;AACA,KAAI,MAAM,mBAAmB,CAAC,OAAO,EAAE;SAC/B,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE;SACjD,IAAI,CAAC,SAAS,EAAE;AACxB,aAAY,MAAM,IAAI,KAAK,CAAC,CAAC,sFAAsF,CAAC,CAAC;AACrH;SACQ,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,GAAG,EAAE;AACvE,SAAQ,IAAI,UAAU,CAAC,MAAM,IAAI,CAAC,EAAE;AACpC,aAAY,MAAM,IAAI,KAAK,CAAC,CAAC,+CAA+C,CAAC,CAAC;AAC9E;AACA,SAAQ,IAAI;AACZ;aACY,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,cAAc,EAAE;aACjD,IAAI,QAAQ,EAAE;AAC1B,iBAAgB,MAAM,IAAI,KAAK,CAAC,CAAC,gDAAgD,CAAC,CAAC;AACnF;AACA,aAAY,MAAM,IAAI,CAAC,mBAAmB,EAAE;AAC5C,aAAY,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,UAAU,CAAC;aAC5C;AACZ;SACQ,OAAO,GAAG,EAAE;aACR,MAAM,IAAI,KAAK,CAAC,CAAC,qBAAqB,EAAE,GAAG,CAAC,CAAC,CAAC;AAC1D;AACA;AACA,KAAI,MAAM,sBAAsB,CAAC,OAAO,EAAE;SAClC,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE;SACjD,IAAI,CAAC,SAAS,EAAE;AACxB,aAAY,MAAM,IAAI,KAAK,CAAC,CAAC,yFAAyF,CAAC,CAAC;AACxH;SACQ,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE;SACjD,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,GAAG,EAAE;AAChF,SAAQ,IAAI,aAAa,CAAC,MAAM,IAAI,CAAC,EAAE;AACvC,aAAY,MAAM,IAAI,KAAK,CAAC,CAAC,uDAAuD,CAAC,CAAC;AACtF;AACA,SAAQ,IAAI,aAAa,KAAK,SAAS,EAAE;AACzC,aAAY,MAAM,IAAI,KAAK,CAAC,CAAC,wDAAwD,CAAC,CAAC;AACvF;SACQ,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,GAAG,EAAE;AACvE,SAAQ,IAAI,UAAU,CAAC,MAAM,IAAI,CAAC,EAAE;AACpC,aAAY,MAAM,IAAI,KAAK,CAAC,CAAC,mDAAmD,CAAC,CAAC;AAClF;AACA,SAAQ,IAAI;AACZ,aAAY,MAAM,IAAI,CAAC,mBAAmB,EAAE;aAChC,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC,aAAa,EAAE,UAAU,CAAC;aAC9D;AACZ;SACQ,OAAO,GAAG,EAAE;aACR,MAAM,IAAI,KAAK,CAAC,CAAC,yBAAyB,EAAE,GAAG,CAAC,CAAC,CAAC;AAC9D;AACA;KACI,MAAM,qBAAqB,GAAG;SAC1B,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE;SACjD,IAAI,CAAC,SAAS,EAAE;AACxB,aAAY,MAAM,IAAI,KAAK,CAAC,CAAC,wFAAwF,CAAC,CAAC;AACvH;AACA,SAAQ,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,EAAE;AACrC,aAAY,MAAM,IAAI,KAAK,CAAC,CAAC,8CAA8C,CAAC,CAAC;AAC7E;AACA,SAAQ,IAAI;AACZ,aAAY,MAAM,IAAI,CAAC,mBAAmB,EAAE;AAC5C,aAAY,IAAI,CAAC,UAAU,CAAC,kBAAkB,EAAE;aACpC;AACZ;SACQ,OAAO,GAAG,EAAE;aACR,MAAM,IAAI,KAAK,CAAC,CAAC,uBAAuB,EAAE,GAAG,CAAC,CAAC,CAAC;AAC5D;AACA;KACI,MAAM,oBAAoB,GAAG;AACjC,SAAQ,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC;AAC7D;AACA,KAAI,MAAM,mBAAmB,CAAC,OAAO,EAAE;SAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,UAAU,CAAC;AAC/D,SAAQ,IAAI;AACZ,aAAY,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC,MAAM,GAAG,WAAW,CAAC;AAC7F,aAAY,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE;AACxC;SACQ,OAAO,GAAG,EAAE;aACR,MAAM,IAAI,KAAK,CAAC,CAAC,qBAAqB,EAAE,GAAG,CAAC,CAAC,CAAC;AAC1D;AACA;AACA,KAAI,MAAM,qBAAqB,CAAC,OAAO,EAAE;SACjC,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE;SACjD,IAAI,CAAC,SAAS,EAAE;AACxB,aAAY,MAAM,IAAI,KAAK,CAAC,CAAC,wFAAwF,CAAC,CAAC;AACvH;SACQ,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,GAAG,EAAE;AACvE,SAAQ,IAAI,UAAU,CAAC,MAAM,IAAI,CAAC,EAAE;AACpC,aAAY,MAAM,IAAI,KAAK,CAAC,CAAC,iDAAiD,CAAC,CAAC;AAChF;AACA,SAAQ,IAAI;AACZ,aAAY,MAAM,IAAI,CAAC,mBAAmB,EAAE;aAChC,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,UAAU,CAAC;AACzE,aAAY,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE;AACrC;SACQ,OAAO,GAAG,EAAE;aACR,MAAM,IAAI,KAAK,CAAC,CAAC,uBAAuB,EAAE,GAAG,CAAC,CAAC,CAAC;AAC5D;AACA;AACA;AACA;AACA;AACA,KAAI,MAAM,WAAW,CAAC,IAAI,EAAE;AAC5B,SAAQ,IAAI;AACZ,aAAY,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;iBACpB,MAAM,GAAG,GAAG,EAAE;iBACd,IAAI,QAAQ,GAAG,KAAK;iBACpB,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,KAAK,EAAE;qBAC/B,QAAQ,GAAG,IAAI;AACnC;iBACgB,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;AAC/C,iBAAgB,GAAG,CAAC,QAAQ,GAAG,QAAQ;AACvC,iBAAgB,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC;AAC/C;AACA;SACQ,OAAO,GAAG,EAAE;aACR,MAAM,IAAI,KAAK,CAAC,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC,CAAC;AAClD;AACA;AACA,KAAI,MAAM,mBAAmB,CAAC,IAAI,EAAE,IAAI,EAAE;AAC1C,SAAQ,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC;AACxC,SAAQ,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE;AACjC,aAAY,IAAI,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;AACtC,iBAAgB,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC;AACvC;kBACiB;AACjB,iBAAgB,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;AACpC;AACA;AACA,SAAQ,OAAO,UAAU;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;KACI,iCAAiC,CAAC,MAAM,EAAE;SACtC,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;SACjD,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;aACjC,MAAM,IAAI,KAAK,CAAC,CAAC,sCAAsC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;AAC/E;AACA,SAAQ,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;KACI,cAAc,CAAC,OAAO,EAAE,SAAS,EAAE,YAAY,GAAG,SAAS,EAAE;SACzD,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;SACvC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE;AAC7C,aAAY,IAAI,YAAY,KAAK,SAAS,EAAE;iBAC5B,MAAM,IAAI,KAAK,CAAC,CAAC,cAAc,EAAE,SAAS,CAAC,aAAa,CAAC,CAAC;AAC1E;kBACiB;AACjB,iBAAgB,OAAO,YAAY;AACnC;AACA;AACA,SAAQ,OAAO,OAAO,CAAC,SAAS,CAAC;AACjC;KACI,MAAM,mBAAmB,GAAG;SACxB,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;AACzD,SAAQ,IAAI;AACZ,aAAY,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE;iBAC9B,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;AAC/C,iBAAgB,IAAI,EAAE,CAAC,QAAQ,EAAE,EAAE;qBACf,EAAE,CAAC,OAAO,EAAE;AAChC;AACA;aACY;AACZ;SACQ,OAAO,GAAG,EAAE;AACpB,aAAY,MAAM,IAAI,KAAK,CAAC,CAAC,mCAAmC,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;AAChF;AACA;AACA;AACA;AACA;AACA,KAAI,MAAM,mBAAmB,CAAC,OAAO,EAAE;AACvC,SAAQ,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,OAAO,CAAC;AAChD,SAAQ,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC;AAClD;AACA,KAAI,MAAM,eAAe,CAAC,OAAO,EAAE;AACnC,SAAQ,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AACjD,SAAQ,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC;AAClD;AACA,KAAI,MAAM,kBAAkB,CAAC,OAAO,EAAE;AACtC,SAAQ,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AACjD,SAAQ,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC;AAClD;AACA,KAAI,MAAM,yBAAyB,CAAC,OAAO,EAAE;AAC7C,SAAQ,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AACjD,SAAQ,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC;AAClD;KACI,MAAM,MAAM,GAAG;AACnB,SAAQ,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC;AAClD;KACI,MAAM,YAAY,GAAG;AACzB,SAAQ,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC;AAClD;AACA,KAAI,MAAM,WAAW,CAAC,OAAO,EAAE;AAC/B,SAAQ,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AACjD,SAAQ,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC;AAClD;AACA,KAAI,MAAM,eAAe,CAAC,OAAO,EAAE;AACnC,SAAQ,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AACjD,SAAQ,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC;AAClD;AACA,KAAI,MAAM,uBAAuB,CAAC,OAAO,EAAE;AAC3C,SAAQ,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AACjD,SAAQ,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC;AAClD;AACA,KAAI,MAAM,iBAAiB,CAAC,OAAO,EAAE;AACrC,SAAQ,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,OAAO,CAAC;AACjD,SAAQ,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC;AAClD;AACA,KAAI,MAAM,kBAAkB,CAAC,OAAO,EAAE;AACtC,SAAQ,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,OAAO,CAAC;AAClD,SAAQ,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC;AAClD;AACA,KAAI,MAAM,iBAAiB,CAAC,OAAO,EAAE;AACrC,SAAQ,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,OAAO,CAAC;AACjD,SAAQ,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC;AAClD;AACA,KAAI,MAAM,YAAY,CAAC,OAAO,EAAE;AAChC,SAAQ,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,OAAO,CAAC;AAC5C,SAAQ,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC;AAClD;KACI,MAAM,uBAAuB,GAAG;AACpC,SAAQ,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC;AAClD;AACA;AACA,CAAA,GAAA,CAAA,eAAuB,GAAG,eAAe;AACzC;;;;ACh+BA,IAAI,UAAU,GAAG,UAAU,EAAE;AAE7B,YAAe,aAAa,uBAAuB,CAAC,UAAU,CAAC;;;;"}
1
+ {"version":3,"file":"plugin.js","sources":["../build/electron/src/GlobalSQLite.js","../build/electron/src/electron-utils/UtilsSQL92Compatibility.js","../build/electron/src/electron-utils/utilsDelete.js","../build/electron/src/electron-utils/utilsFile.js","../build/electron/src/electron-utils/utilsSqlstatement.js","../build/electron/src/electron-utils/utilsSQLite.js","../build/electron/src/electron-utils/ImportExportJson/utilsJson.js","../build/electron/src/electron-utils/ImportExportJson/exportToJson.js","../build/electron/src/electron-utils/utilsDrop.js","../build/electron/src/electron-utils/ImportExportJson/importFromJson.js","../build/electron/src/electron-utils/utilsSecret.js","../build/electron/src/electron-utils/ImportExportJson/utilsJsonEncryption.js","../build/electron/src/electron-utils/utilsEncryption.js","../build/electron/src/electron-utils/utilsUpgrade.js","../build/electron/src/electron-utils/Database.js","../build/electron/src/index.js","../build/electron/src/index.js?commonjs-entry"],"sourcesContent":["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.GlobalSQLite = void 0;\nclass GlobalSQLite {\n constructor() {\n this.secret = 'sqlite secret';\n this.newsecret = 'sqlite new secret';\n }\n}\nexports.GlobalSQLite = GlobalSQLite;\n//# sourceMappingURL=GlobalSQLite.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.UtilsSQL92Compatibility = void 0;\nclass UtilsSQL92Compatibility {\n compatibleSQL92(statement) {\n let newStatement = '';\n const action = statement.trim().split(' ')[0].toUpperCase();\n switch (action) {\n case 'INSERT':\n newStatement = this.insertSQL92(statement);\n break;\n case 'UPDATE':\n newStatement = this.updateSQL92(statement);\n break;\n case 'DELETE':\n case 'SELECT':\n newStatement = this.whereSQL92(statement);\n break;\n default:\n throw new Error(`Error: ${action} not implemented`);\n }\n return newStatement;\n }\n insertSQL92(insertStatement) {\n // Split the statement into parts\n const inStmt = insertStatement.trim();\n const valuesStartIndex = inStmt.indexOf('VALUES');\n const columnsPart = inStmt.substring(0, valuesStartIndex);\n const valuesPart = inStmt.substring(valuesStartIndex);\n // Extract values and replace double quotes with single quotes\n const modifiedValuesPart = valuesPart.replace(/\"([^\"]+)\"/g, \"'$1'\");\n // Reconstruct the modified statement\n const modifiedStatement = columnsPart + modifiedValuesPart;\n return modifiedStatement;\n }\n updateSQL92(updateStatement) {\n // Split the statement into SET and WHERE parts\n let isWhere = true;\n const setWhereSplit = updateStatement.toUpperCase().split('WHERE');\n if (setWhereSplit.length <= 1)\n isWhere = false;\n const setUpdate = setWhereSplit[0].toUpperCase().split('SET')[0].trim();\n const setPart = setWhereSplit[0].toUpperCase().split('SET')[1].trim();\n const modifiedSetPart = this.modSetPart(setPart);\n let modifiedStatement = `${setUpdate} SET ${modifiedSetPart}`;\n if (isWhere) {\n for (let i = 1; i < setWhereSplit.length; i++) {\n const wherePart = setWhereSplit[i].trim();\n const modifiedWherePart = this.modWherePart(wherePart);\n modifiedStatement += ` WHERE ${modifiedWherePart}`;\n }\n }\n return modifiedStatement;\n }\n whereSQL92(statement) {\n // Split the statement into SET and WHERE parts\n const setWhereSplit = statement.toUpperCase().split('WHERE');\n if (setWhereSplit.length <= 1)\n return statement;\n let modifiedStatement = `${setWhereSplit[0].trim()}`;\n for (let i = 1; i < setWhereSplit.length; i++) {\n const wherePart = setWhereSplit[1].trim();\n const modifiedWherePart = this.modWherePart(wherePart);\n modifiedStatement += ` WHERE ${modifiedWherePart}`;\n }\n return modifiedStatement;\n }\n modSetPart(setStatement) {\n const commaPart = setStatement.split(',');\n const modCommaPart = [];\n for (const com of commaPart) {\n const equalPart = com.split('=');\n const value = equalPart[1].replaceAll(`\"`, `'`);\n modCommaPart.push(`${equalPart[0].trim()} = ${value.trim()}`);\n }\n return modCommaPart.toString();\n }\n modWherePart(whereStatement) {\n const keywords = new Set([\n '=',\n '<>',\n '>',\n '>=',\n '<',\n '<=',\n 'IN',\n 'VALUES',\n '(',\n ',',\n ')',\n 'BETWEEN',\n 'LIKE',\n 'AND',\n 'OR',\n 'NOT',\n ]);\n const newTokens = [];\n const tokens = whereStatement\n .split(/(\\s|,|\\(|\\))/)\n .filter((item) => item !== ' ')\n .filter((item) => item !== '');\n let inClause = false;\n let inValues = false;\n let modValue = false;\n let betwClause = false;\n let opsClause = false;\n let inValValues = false;\n let inValPar = false;\n for (const token of tokens) {\n if (new Set(['=', '<>', '>', '>=', '<', '<=']).has(token)) {\n newTokens.push(token);\n modValue = true;\n opsClause = false;\n }\n else if (token.toUpperCase() === 'BETWEEN') {\n newTokens.push(token);\n betwClause = true;\n modValue = true;\n opsClause = false;\n }\n else if (betwClause && token.toUpperCase() === 'AND') {\n newTokens.push(token);\n modValue = true;\n betwClause = false;\n }\n else if (token.toUpperCase() === 'LIKE') {\n newTokens.push(token);\n opsClause = false;\n modValue = true;\n }\n else if (token.toUpperCase() === 'AND' || token.toUpperCase() === 'OR' || token.toUpperCase() === 'NOT') {\n newTokens.push(token);\n opsClause = true;\n }\n else if (token.toUpperCase() === 'IN') {\n newTokens.push(token);\n opsClause = false;\n inClause = true;\n }\n else if (inClause && token === '(') {\n newTokens.push(token);\n modValue = true;\n inValues = true;\n }\n else if (inValues && token.toUpperCase() === ',') {\n newTokens.push(token);\n modValue = true;\n }\n else if (inValues && token.toUpperCase() === 'VALUES') {\n newTokens.push(token);\n inValues = false;\n inValValues = true;\n inClause = false;\n }\n else if (inValValues && token === '(') {\n newTokens.push(token);\n inValPar = true;\n modValue = true;\n }\n else if (inValPar && token.toUpperCase() === ',') {\n newTokens.push(token);\n modValue = true;\n }\n else if (inValPar && inValValues && token === ')') {\n newTokens.push(token);\n inValPar = false;\n inValues = true;\n }\n else if ((inValues || inValValues) && token === ')') {\n newTokens.push(token);\n inValValues = false;\n inValues = false;\n inClause = false;\n }\n else if (modValue && !opsClause && !keywords.has(token.toUpperCase())) {\n if (token.length > 0) {\n const nwToken = token.replaceAll(`\"`, `'`);\n newTokens.push(nwToken);\n modValue = false;\n }\n }\n else {\n newTokens.push(token);\n }\n }\n const ns = newTokens.join(' ');\n return ns;\n }\n}\nexports.UtilsSQL92Compatibility = UtilsSQL92Compatibility;\n//# sourceMappingURL=UtilsSQL92Compatibility.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.UtilsDelete = void 0;\nclass UtilsDeleteError {\n constructor(message) {\n this.message = message;\n }\n static upDateWhereForDefault(message) {\n return new UtilsDeleteError(message);\n }\n static upDateWhereForRestrict(message) {\n return new UtilsDeleteError(message);\n }\n static upDateWhereForCascade(message) {\n return new UtilsDeleteError(message);\n }\n static executeUpdateForDelete(message) {\n return new UtilsDeleteError(message);\n }\n}\nclass UtilsDelete {\n getReferencedTableName(refValue) {\n let tableName = '';\n if (refValue.length > 0) {\n const arr = refValue.split(new RegExp('REFERENCES', 'i'));\n if (arr.length === 2) {\n const oPar = arr[1].indexOf('(');\n tableName = arr[1].substring(0, oPar).trim();\n }\n }\n return tableName;\n }\n upDateWhereForDefault(withRefsNames, results) {\n let setStmt = '';\n let uWhereStmt = '';\n try {\n const key = results.key;\n const cols = [];\n for (const relItem of results.relatedItems) {\n const mVal = relItem[key];\n if (mVal !== undefined) {\n cols.push(mVal);\n }\n }\n // Create the set statement\n for (const name of withRefsNames) {\n setStmt += `${name} = NULL, `;\n }\n setStmt += 'sql_deleted = 0';\n // Create the where statement\n uWhereStmt = `WHERE ${key} IN (`;\n for (const col of cols) {\n uWhereStmt += `${col},`;\n }\n if (uWhereStmt.endsWith(',')) {\n uWhereStmt = uWhereStmt.slice(0, -1);\n }\n uWhereStmt += ');';\n }\n catch (error) {\n const msg = error.message ? error.message : error;\n throw UtilsDeleteError.upDateWhereForDefault(msg);\n }\n return { setStmt, uWhereStmt };\n }\n upDateWhereForRestrict(results) {\n try {\n const setStmt = '';\n const uWhereStmt = '';\n if (results.relatedItems.length > 0) {\n const msg = 'Restrict mode related items exist, please delete them first';\n throw UtilsDeleteError.upDateWhereForRestrict(msg);\n }\n return { setStmt, uWhereStmt };\n }\n catch (error) {\n const msg = error.message ? error.message : error;\n throw UtilsDeleteError.upDateWhereForRestrict(msg);\n }\n }\n upDateWhereForCascade(results) {\n let setStmt = '';\n let uWhereStmt = '';\n try {\n const key = results.key;\n const cols = [];\n for (const relItem of results.relatedItems) {\n const mVal = relItem[key];\n if (mVal !== undefined) {\n cols.push(mVal);\n }\n }\n setStmt += 'sql_deleted = 1';\n // Create the where statement\n uWhereStmt = `WHERE ${key} IN (`;\n for (const col of cols) {\n uWhereStmt += `${col},`;\n }\n if (uWhereStmt.endsWith(',')) {\n uWhereStmt = uWhereStmt.slice(0, -1);\n }\n uWhereStmt += ');';\n }\n catch (error) {\n const msg = error.message ? error.message : error;\n throw UtilsDeleteError.upDateWhereForCascade(msg);\n }\n return { setStmt, uWhereStmt };\n }\n getCurrentTimeAsInteger() {\n const currentTime = Math.floor(Date.now() / 1000);\n return currentTime;\n }\n checkValuesMatch(array1, array2) {\n for (const value of array1) {\n if (!array2.includes(value)) {\n return false;\n }\n }\n return true;\n }\n}\nexports.UtilsDelete = UtilsDelete;\n//# sourceMappingURL=utilsDelete.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.UtilsFile = void 0;\nconst promises_1 = require(\"node:fs/promises\");\nclass UtilsFile {\n constructor() {\n this.pathDB = 'Databases';\n this.Path = null;\n this.NodeFs = null;\n this.NodeFetch = null;\n this.JSZip = null;\n this.Os = null;\n this.Electron = null;\n this.AppName = '';\n this.HomeDir = '';\n this.sep = '/';\n this.isEncryption = false;\n this.Path = require('path');\n this.NodeFs = require('fs');\n this.NodeFetch = require('node-fetch');\n this.Os = require('os');\n this.JSZip = require('jszip');\n this.Electron = require('electron');\n this.HomeDir = this.Os.homedir();\n const dir = __dirname;\n const idx = dir.indexOf('\\\\');\n if (idx != -1)\n this.sep = '\\\\';\n this.appPath = this.Electron.app.getAppPath();\n const rawdata = this.NodeFs.readFileSync(this.Path.resolve(this.appPath, 'package.json'));\n this.AppName = JSON.parse(rawdata).name;\n const pathToBuild = this.Path.join(this.appPath, 'build');\n if (this.NodeFs.existsSync(this.Path.join(pathToBuild, 'capacitor.config.js'))) {\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n this.capConfig = require(this.Path.join(pathToBuild, 'capacitor.config.js')).default;\n }\n else {\n this.capConfig = JSON.parse(this.NodeFs.readFileSync(this.Path.join(this.appPath, 'capacitor.config.json')).toString());\n }\n this.isEncryption = this.capConfig.plugins.CapacitorSQLite.electronIsEncryption\n ? this.capConfig.plugins.CapacitorSQLite.electronIsEncryption\n : false;\n this.osType = this.Os.type();\n switch (this.osType) {\n case 'Darwin':\n this.pathDB = this.capConfig.plugins.CapacitorSQLite.electronMacLocation\n ? this.capConfig.plugins.CapacitorSQLite.electronMacLocation\n : 'Databases';\n break;\n case 'Linux':\n this.pathDB = this.capConfig.plugins.CapacitorSQLite.electronLinuxLocation\n ? this.capConfig.plugins.CapacitorSQLite.electronLinuxLocation\n : 'Databases';\n break;\n case 'Windows_NT':\n this.pathDB = this.capConfig.plugins.CapacitorSQLite.electronWindowsLocation\n ? this.capConfig.plugins.CapacitorSQLite.electronWindowsLocation\n : 'Databases';\n break;\n default:\n console.log('other operating system');\n }\n }\n /**\n * Get isEncryption from config\n * @returns\n */\n getIsEncryption() {\n return this.isEncryption;\n }\n /**\n * GetExtName\n * @param filePath\n * @returns\n */\n getExtName(filePath) {\n const matches = filePath.match(/\\.([a-zA-Z0-9]+)(?:[\\\\?#]|$)/);\n return matches ? `.${matches[1].toLowerCase()}` : ''; // returns the matched extension in lowercase\n // return this.Path.extname(filePath);\n }\n getBaseName(filePath) {\n const decodedUrl = decodeURIComponent(filePath); // Decode the URL component\n const baseName = this.Path.basename(decodedUrl, this.Path.extname(filePath));\n return baseName;\n }\n /**\n * IsPathExists\n * @param filePath\n */\n isPathExists(filePath) {\n let ret = false;\n try {\n if (this.NodeFs.existsSync(filePath)) {\n ret = true;\n }\n }\n catch (err) {\n console.error('Error isFileExist: ' + err);\n ret = false;\n }\n return ret;\n }\n /**\n * IsFileExists\n * @param fileName\n */\n isFileExists(fileName) {\n let ret = false;\n const filePath = this.getFilePath(fileName);\n if (filePath.length > 0) {\n ret = this.isPathExists(filePath);\n }\n return ret;\n }\n /**\n * GetFilePath\n * get the file path\n * @param fileName\n */\n getFilePath(fileName) {\n return this.Path.join(this.getDatabasesPath(), fileName);\n }\n /**\n * GetDatabasesPath\n * get the database folder path\n */\n getDatabasesPath() {\n let retPath = '';\n const sep = this.Path.sep;\n const dbFolder = this.pathDB;\n if (dbFolder.includes(sep)) {\n retPath = dbFolder;\n if (this.Path.basename(dbFolder) !== this.AppName) {\n retPath = this.Path.join(dbFolder, this.AppName);\n }\n }\n else {\n retPath = this.Path.join(this.HomeDir, dbFolder, this.AppName);\n }\n const retB = this._createFolderIfNotExists(retPath);\n if (!retB)\n retPath = '';\n return retPath;\n }\n /**\n * GetCachePath\n * get the database cache folder path\n */\n getCachePath() {\n let retPath = '';\n const databasePath = this.getDatabasesPath();\n retPath = this.Path.join(databasePath, 'cache');\n const retB = this._createFolderIfNotExists(retPath);\n if (!retB)\n retPath = '';\n return retPath;\n }\n /**\n * GetAssetsDatabasesPath\n * get the assets databases folder path\n */\n getAssetsDatabasesPath() {\n let retPath = '';\n const webDir = this.capConfig.webDir;\n const dir = webDir === 'www' ? 'src' : 'public';\n let mAppPath = this.appPath;\n if (this.Path.basename(this.appPath) === 'electron') {\n mAppPath = this.Path.dirname(this.appPath);\n }\n retPath = this.Path.resolve(mAppPath, dir, 'assets', 'databases');\n return retPath;\n }\n /**\n * SetPathSuffix\n * @param db\n */\n setPathSuffix(db) {\n let toDb = db;\n const ext = '.db';\n const dirName = this.Path.dirname(db);\n const baseName = this.getBaseName(db);\n if (this.getExtName(db) === ext) {\n if (!baseName.includes('SQLite')) {\n const dbName = `${baseName}SQLite`;\n toDb = `${this.Path.join(dirName, dbName)}${ext}`;\n }\n }\n return toDb;\n }\n /**\n * GetFileList\n * get the file list for a given folder\n * @param path\n */\n async getFileList(path) {\n const filenames = this.NodeFs.readdirSync(path);\n const dbs = [];\n filenames.forEach((file) => {\n if (this.getExtName(file) == '.db' || this.getExtName(file) == '.zip')\n dbs.push(file);\n });\n return Promise.resolve(dbs);\n }\n /**\n * CopyFromAssetToDatabase\n * @param db\n * @param overwrite\n */\n async copyFromAssetToDatabase(db, overwrite) {\n const pAsset = this.Path.join(this.getAssetsDatabasesPath(), db);\n const toDb = this.setPathSuffix(db);\n const pDb = this.Path.join(this.getDatabasesPath(), toDb);\n await this.copyFilePath(pAsset, pDb, overwrite);\n return Promise.resolve();\n }\n /**\n * unzipDatabase\n * @param db\n * @param overwrite\n */\n async unzipDatabase(db, fPath, overwrite) {\n const pZip = this.Path.join(fPath, db);\n try {\n // Read the Zip file\n const data = await this.NodeFs.promises.readFile(pZip);\n const zip = new this.JSZip();\n const contents = await zip.loadAsync(data);\n // Create an array to store promises for writing files\n const writePromises = [];\n Object.keys(contents.files).forEach((filename) => {\n writePromises.push(zip\n .file(filename)\n .async('nodebuffer')\n .then(async (content) => {\n const toDb = this.setPathSuffix(filename);\n const pDb = this.Path.join(this.getDatabasesPath(), toDb);\n // check filePath exists\n const isPath = this.isPathExists(pDb);\n if (!isPath || overwrite) {\n if (overwrite && isPath) {\n await this.deleteFilePath(pDb);\n }\n await this.NodeFs.promises.writeFile(pDb, content);\n }\n }));\n });\n // Wait for all write promises to resolve\n await Promise.all(writePromises);\n return Promise.resolve();\n }\n catch (err) {\n console.log(err);\n return Promise.reject(`unzipDatabase ${JSON.stringify(err)}`);\n }\n }\n /**\n * CopyFileName\n * Copy file name\n * @param fileName\n * @param toFileName\n */\n async copyFileName(fileName, toFileName) {\n // get File Paths\n const filePath = this.getFilePath(fileName);\n const toFilePath = this.getFilePath(toFileName);\n if (filePath.length !== 0 && toFilePath.length !== 0) {\n try {\n await this.copyFilePath(filePath, toFilePath, true);\n return Promise.resolve();\n }\n catch (err) {\n return Promise.reject(`CopyFileName: ${err}`);\n }\n }\n else {\n return Promise.reject('CopyFileName: cannot get the ' + 'filePath');\n }\n }\n /**\n * CopyFilePath\n * Copy file Path\n * @param filePath\n * @param toFilePath\n */\n async copyFilePath(filePath, toFilePath, overwrite) {\n if (filePath.length !== 0 && toFilePath.length !== 0) {\n // check filePath exists\n const isPath = this.isPathExists(toFilePath);\n if (!isPath || overwrite) {\n try {\n if (overwrite && isPath) {\n await this.deleteFilePath(toFilePath);\n }\n this.NodeFs.copyFileSync(filePath, toFilePath);\n }\n catch (err) {\n return Promise.reject(`CopyFilePath: ${err}`);\n }\n }\n return Promise.resolve();\n }\n else {\n return Promise.reject('CopyFilePath: cannot get the ' + 'filePath');\n }\n }\n async copyFile(fromPath, fromFile, toPath, toFile) {\n const fPath = this.Path.join(fromPath, fromFile);\n const tPath = this.Path.join(toPath, toFile);\n try {\n this.NodeFs.copyFileSync(fPath, tPath);\n return Promise.resolve();\n }\n catch (err) {\n return Promise.reject(`CopyFile: ${err}`);\n }\n }\n /**\n * DeleteFileName\n * Delete a file by its name\n * @param fileName\n */\n async deleteFileName(fileName) {\n // get file path\n const filePath = this.getFilePath(fileName);\n if (filePath.length !== 0) {\n try {\n await this.deleteFilePath(filePath);\n return Promise.resolve();\n }\n catch (err) {\n return Promise.reject('DeleteFileName: delete filePath ' + `failed ${err}`);\n }\n }\n else {\n return Promise.reject('DeleteFileName: get filePath ' + 'failed');\n }\n }\n /**\n * DeleteFilePath\n * Delete a file by its path\n * @param filePath\n */\n async deleteFilePath(filePath) {\n let unlinkRetries = 50000;\n /**\n * On windows, the file lock behaves unpredictable. Often it claims a databsae file is locked / busy, although\n * the file stream is already closed.\n * Even though we already checked the status with the `waitForFilePathLock()` method previously.\n *\n * The only way to handle this reliably is to retry deletion until it works.\n */\n const deleteFile = async () => {\n try {\n await promises_1.unlink(filePath);\n }\n catch (err) {\n unlinkRetries--;\n if (unlinkRetries > 0) {\n await deleteFile();\n }\n else {\n throw err;\n }\n }\n };\n if (filePath.length !== 0) {\n // check if path exists\n const isPath = this.isPathExists(filePath);\n if (isPath) {\n try {\n await this.waitForFilePathLock(filePath);\n // actually delete the file\n await deleteFile();\n return Promise.resolve();\n }\n catch (err) {\n return Promise.reject(`DeleteFilePath: ${err}`);\n }\n }\n else {\n return Promise.resolve();\n }\n }\n else {\n return Promise.reject('DeleteFilePath: delete filePath' + 'failed');\n }\n }\n async waitForFilePathLock(filePath, timeoutMS = 4000) {\n let timeIsOver = false;\n setTimeout(() => {\n timeIsOver = true;\n }, timeoutMS);\n return new Promise((resolve, reject) => {\n const check = async () => {\n if (timeIsOver) {\n reject(new Error(`WaitForFilePathLock: The resource is still locked / busy after ${timeoutMS} milliseconds.`));\n return;\n }\n // check if path exists\n const isPath = this.isPathExists(filePath);\n // The file path does not exist. A non existant path cannot be locked.\n if (!isPath) {\n resolve();\n return;\n }\n try {\n const stream = await promises_1.open(filePath, 'r+');\n // We need to close the stream afterwards, because otherwise, we're locking the file\n await stream.close();\n resolve();\n }\n catch (err) {\n if (err.code === 'EBUSY') {\n // The resource is busy. Retry in 100ms\n setTimeout(() => {\n check();\n }, 100);\n return;\n }\n else if (err.code === 'ENOENT') {\n // The file does not exist (anymore). So it cannot be locked.\n resolve();\n return;\n }\n else {\n // Something else went wrong.\n reject(new Error(`WaitForFilePathLock: Error while checking the file: ${err}`));\n }\n }\n };\n check();\n });\n }\n /**\n * RenameFileName\n * @param fileName\n * @param toFileName\n */\n async renameFileName(fileName, toFileName) {\n // get File Paths\n const filePath = this.getFilePath(fileName);\n const toFilePath = this.getFilePath(toFileName);\n if (filePath.length !== 0 && toFilePath.length !== 0) {\n try {\n await this.renameFilePath(filePath, toFilePath);\n return Promise.resolve();\n }\n catch (err) {\n return Promise.reject(`RenameFileName: ${err}`);\n }\n }\n else {\n return Promise.reject('RenameFileName: filePaths do not ' + 'exist');\n }\n }\n /**\n * RenameFilePath\n * @param filePath\n * @param toFilePath\n */\n async renameFilePath(filePath, toFilePath) {\n if (filePath.length !== 0 && toFilePath.length !== 0) {\n // check filePath exists\n const isPath = this.isPathExists(filePath);\n if (isPath) {\n // delete toFilePath if exists\n try {\n await this.deleteFilePath(toFilePath);\n this.NodeFs.renameSync(filePath, toFilePath);\n return Promise.resolve();\n }\n catch (err) {\n return Promise.reject('RenameFilePath: ' + `${err}`);\n }\n }\n else {\n return Promise.reject(`RenameFilePath: ${filePath} does not exist`);\n }\n }\n else {\n return Promise.reject('RenameFilePath: filePath not found');\n }\n }\n async moveDatabaseFromCache() {\n const cachePath = this.getCachePath();\n const databasePath = this.getDatabasesPath();\n const dbCacheList = await this.getFileList(cachePath);\n for (const name of dbCacheList) {\n const ext = this.getExtName(name);\n const fromDBName = this.Path.join(cachePath, name);\n if (ext === '.db') {\n const pDb = this.setPathSuffix(this.Path.join(databasePath, name));\n try {\n await this.renameFilePath(fromDBName, pDb);\n }\n catch (err) {\n return Promise.reject('moveDatabaseFromCache: ' + `${err}`);\n }\n }\n if (ext === '.zip') {\n try {\n await this.deleteFilePath(fromDBName);\n }\n catch (err) {\n return Promise.reject('moveDatabaseFromCache: ' + `${err}`);\n }\n }\n }\n return Promise.resolve();\n }\n /**\n * RestoreFileName\n * @param fileName\n * @param prefix\n */\n async restoreFileName(fileName, prefix) {\n const mFileName = `${prefix}-${fileName}`;\n // check if file exists\n const isFilePre = this.isFileExists(mFileName);\n if (isFilePre) {\n const isFile = this.isFileExists(fileName);\n if (isFile) {\n try {\n await this.deleteFileName(fileName);\n await this.renameFileName(mFileName, fileName);\n return Promise.resolve();\n }\n catch (err) {\n return Promise.reject('RestoreFileName: ' + `${err}`);\n }\n }\n else {\n return Promise.reject(`RestoreFileName: ${fileName} ` + 'does not exist');\n }\n }\n else {\n return Promise.reject(`RestoreFileName: ${mFileName} ` + 'does not exist');\n }\n }\n /**\n * DownloadFileFromHTTP\n * @param url\n * @param path\n */\n async downloadFileFromHTTP(url, pathFolder) {\n const res = await this.NodeFetch(url);\n const ext = this.getExtName(url);\n const dbName = this.getBaseName(url);\n const filePath = `${this.Path.join(pathFolder, dbName)}${ext}`;\n const fileStream = this.NodeFs.createWriteStream(filePath);\n await new Promise((resolve, reject) => {\n res.body.pipe(fileStream);\n res.body.on('error', reject);\n fileStream.on('finish', resolve);\n });\n }\n readFileAsPromise(path, options) {\n return new Promise((resolve, reject) => {\n const fileStream = this.NodeFs.createReadStream(path, options);\n const chunks = [];\n fileStream.on('data', (data) => {\n chunks.push(data);\n });\n fileStream.on('close', () => {\n resolve(chunks.toString());\n });\n fileStream.on('error', (err) => {\n const msg = err.message ? err.message : err;\n reject(msg);\n });\n });\n }\n /**\n * CreateFolderIfNotExists\n * Create directory\n * @param folder\n */\n _createFolderIfNotExists(folder) {\n let ret;\n try {\n if (!this.NodeFs.existsSync(folder)) {\n this._mkdirSyncRecursive(folder);\n }\n ret = true;\n }\n catch (e) {\n console.log('Error: in getDBPath', e);\n ret = false;\n }\n return ret;\n }\n /**\n * MkdirSyncRecursive\n * Create directories recursively\n * @param directory\n */\n _mkdirSyncRecursive(directory) {\n const sep = this.Path.sep;\n const path = directory.replace(/\\/$/, '').split(sep);\n for (let i = 1; i <= path.length; i++) {\n const segment = path.slice(0, i).join(sep);\n segment.length > 0 && !this.NodeFs.existsSync(segment) ? this.NodeFs.mkdirSync(segment) : null;\n }\n return;\n }\n}\nexports.UtilsFile = UtilsFile;\n//# sourceMappingURL=utilsFile.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.UtilsSQLStatement = void 0;\nclass UtilsSQLStatement {\n constructor() {\n this.replaceString = (originalStr, searchStr, replaceStr) => {\n const range = originalStr.indexOf(searchStr);\n if (range !== -1) {\n const modifiedStr = originalStr.substring(0, range) + replaceStr + originalStr.substring(range + searchStr.length);\n return modifiedStr;\n }\n return originalStr;\n };\n }\n extractTableName(statement) {\n const pattern = /(?:INSERT\\s+INTO|UPDATE|DELETE\\s+FROM)\\s+([^\\s]+)/i;\n const match = statement.match(pattern);\n if (match?.[1]) {\n const tableName = match[1];\n return tableName;\n }\n return null;\n }\n extractWhereClause(statement) {\n const pattern = /WHERE(.+?)(?:ORDER\\s+BY|LIMIT|$)/i;\n const match = statement.match(pattern);\n if (match?.[1]) {\n const whereClause = match[1].trim();\n return whereClause;\n }\n return null;\n }\n addPrefixToWhereClause(whereClause, colNames, refNames, prefix) {\n let columnValuePairs;\n if (whereClause.includes('AND')) {\n // Split the WHERE clause based on the \"AND\" keyword\n const subSequenceArray = whereClause.split('AND');\n columnValuePairs = subSequenceArray.map((pair) => pair.trim());\n }\n else {\n columnValuePairs = [whereClause];\n }\n const modifiedPairs = columnValuePairs.map((pair) => {\n const match = pair.match(/(\\w+)\\s*(=|IN|BETWEEN|LIKE)\\s*(.+)/);\n if (!match) {\n return pair;\n }\n const column = match[1].trim();\n const operator = match[2].trim();\n const value = match[3].trim();\n let newColumn = column;\n const index = this.findIndexOfStringInArray(column, refNames);\n if (index !== -1) {\n newColumn = this.getStringAtIndex(colNames, index);\n }\n const modifiedColumn = `${prefix}${newColumn}`;\n const ret = `${modifiedColumn} ${operator} ${value}`;\n return ret;\n });\n return modifiedPairs.join(' AND ');\n }\n findIndexOfStringInArray(target, array) {\n return array.indexOf(target);\n }\n getStringAtIndex(array, index) {\n if (index >= 0 && index < array.length) {\n return array[index];\n }\n else {\n return undefined;\n }\n }\n extractForeignKeyInfo(sqlStatement) {\n // Define the regular expression pattern for extracting the FOREIGN KEY clause\n const foreignKeyPattern = /\\bFOREIGN\\s+KEY\\s*\\(([^)]+)\\)\\s+REFERENCES\\s+(\\w+)\\s*\\(([^)]+)\\)\\s+(ON\\s+DELETE\\s+(RESTRICT|CASCADE|SET\\s+NULL|SET\\s+DEFAULT|NO\\s+ACTION))?/;\n const matches = sqlStatement.match(foreignKeyPattern);\n if (matches) {\n const foreignKeyInfo = {\n forKeys: matches[1].split(',').map((key) => key.trim()),\n tableName: matches[2],\n refKeys: matches[3].split(',').map((key) => key.trim()),\n action: matches[5] ? matches[5] : 'NO ACTION',\n };\n return foreignKeyInfo;\n }\n else {\n throw new Error('extractForeignKeyInfo: No FOREIGN KEY found');\n }\n }\n extractColumnNames(whereClause) {\n const keywords = new Set(['AND', 'OR', 'IN', 'VALUES', 'LIKE', 'BETWEEN', 'NOT']);\n const regex = /\\b[a-zA-Z]\\w*\\b(?=\\s*(?:<=?|>=?|<>?|=|AND|OR|BETWEEN|NOT|IN|LIKE))|\\b[a-zA-Z]\\w*\\b\\s+BETWEEN\\s+'[^']+'\\s+AND\\s+'[^']+'|\\(([^)]+)\\)\\s+IN\\s+\\(?\\s*VALUES\\s*\\(/g;\n let match;\n const columns = [];\n while ((match = regex.exec(whereClause)) !== null) {\n const columnList = match[1];\n if (columnList) {\n const columnNamesArray = columnList.split(',');\n for (const columnName of columnNamesArray) {\n columns.push(columnName.trim());\n }\n }\n else {\n const matchedText = match[0];\n if (!keywords.has(matchedText.trim().toUpperCase())) {\n columns.push(matchedText.trim());\n }\n }\n }\n return columns;\n }\n flattenMultilineString(input) {\n const lines = input.split(/\\r?\\n/);\n return lines.join(' ');\n }\n extractCombinedPrimaryKey(whereClause) {\n const pattern = /WHERE\\s*\\((.+?)\\)\\s*(?:=|IN)\\s*\\((.+?)\\)/g;\n const regex = new RegExp(pattern);\n const matches = whereClause.matchAll(regex);\n const primaryKeySets = [];\n for (const match of matches) {\n const keysString = match[1].trim();\n const keys = keysString.split(',').map((key) => key.trim());\n primaryKeySets.push(keys);\n }\n return primaryKeySets.length === 0 ? null : primaryKeySets;\n }\n getWhereStmtForCombinedPK(whStmt, withRefs, colNames, keys) {\n let retWhere = whStmt;\n for (const grpKeys of keys) {\n const repKeys = grpKeys.join(',') === withRefs.join(',') ? colNames : withRefs;\n for (const [index, key] of grpKeys.entries()) {\n retWhere = this.replaceAllString(retWhere, key, repKeys[index]);\n }\n }\n return retWhere;\n }\n replaceAllString(originalStr, searchStr, replaceStr) {\n return originalStr.split(searchStr).join(replaceStr);\n }\n indicesOf(str, searchStr, fromIndex = 0) {\n // Helper function to find indices of a substring within a string\n const indices = [];\n let currentIndex = str.indexOf(searchStr, fromIndex);\n while (currentIndex !== -1) {\n indices.push(currentIndex);\n currentIndex = str.indexOf(searchStr, currentIndex + 1);\n }\n return indices;\n }\n getWhereStmtForNonCombinedPK(whStmt, withRefs, colNames) {\n let whereStmt = '';\n let stmt = whStmt.substring(6);\n for (let idx = 0; idx < withRefs.length; idx++) {\n let colType = 'withRefsNames';\n let idxs = this.indicesOf(stmt, withRefs[idx]);\n if (idxs.length === 0) {\n idxs = this.indicesOf(stmt, colNames[idx]);\n colType = 'colNames';\n }\n if (idxs.length > 0) {\n let valStr = '';\n const indicesEqual = this.indicesOf(stmt, '=', idxs[0]);\n if (indicesEqual.length > 0) {\n const indicesAnd = this.indicesOf(stmt, 'AND', indicesEqual[0]);\n if (indicesAnd.length > 0) {\n valStr = stmt.substring(indicesEqual[0] + 1, indicesAnd[0] - 1);\n stmt = stmt.substring(indicesAnd[0] + 3);\n }\n else {\n valStr = stmt.substring(indicesEqual[0] + 1);\n }\n if (idx > 0) {\n whereStmt += ' AND ';\n }\n if (colType === 'withRefsNames') {\n whereStmt += colNames[idx] + ' = ' + valStr;\n }\n else {\n whereStmt += withRefs[idx] + ' = ' + valStr;\n }\n }\n }\n }\n whereStmt = 'WHERE ' + whereStmt;\n return whereStmt;\n }\n updateWhere(whStmt, withRefs, colNames) {\n let whereStmt = '';\n if (whStmt.length <= 0) {\n return whereStmt;\n }\n if (whStmt.toUpperCase().substring(0, 5) !== 'WHERE') {\n return whereStmt;\n }\n if (withRefs.length === colNames.length) {\n // get whereStmt for primary combined key\n const keys = this.extractCombinedPrimaryKey(whStmt);\n if (keys) {\n whereStmt = this.getWhereStmtForCombinedPK(whStmt, withRefs, colNames, keys);\n }\n else {\n // get for non primary combined key\n whereStmt = this.getWhereStmtForNonCombinedPK(whStmt, withRefs, colNames);\n }\n }\n return whereStmt;\n }\n}\nexports.UtilsSQLStatement = UtilsSQLStatement;\n//# sourceMappingURL=utilsSqlstatement.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.UtilsSQLite = void 0;\nconst UtilsSQL92Compatibility_1 = require(\"./UtilsSQL92Compatibility\");\nconst utilsDelete_1 = require(\"./utilsDelete\");\nconst utilsFile_1 = require(\"./utilsFile\");\nconst utilsSqlstatement_1 = require(\"./utilsSqlstatement\");\n//const SQLITE_OPEN_READONLY = 1;\nclass UtilsSQLite {\n constructor() {\n this.fileUtil = new utilsFile_1.UtilsFile();\n this.statUtil = new utilsSqlstatement_1.UtilsSQLStatement();\n this.delUtil = new utilsDelete_1.UtilsDelete();\n this.sql92Utils = new UtilsSQL92Compatibility_1.UtilsSQL92Compatibility();\n this.BCSQLite3 = require('better-sqlite3-multiple-ciphers');\n }\n /**\n * OpenOrCreateDatabase\n * @param pathDB\n * @param password\n */\n openOrCreateDatabase(pathDB, password, readonly) {\n const msg = 'OpenOrCreateDatabase';\n // open sqlite3 database\n let mDB;\n if (!readonly) {\n mDB = new this.BCSQLite3(pathDB, {\n // verbose: console.log,\n fileMustExist: false,\n });\n }\n else {\n mDB = new this.BCSQLite3(pathDB, {\n // verbose: console.log,\n readonly: true,\n fileMustExist: true,\n });\n }\n if (mDB != null) {\n try {\n // set the password\n if (password.length > 0) {\n this.setCipherPragma(mDB, password);\n }\n // set Foreign Keys On\n this.setForeignKeyConstraintsEnabled(mDB, true);\n }\n catch (err) {\n const errmsg = err.message ? err.message : err;\n throw new Error(`${msg} ${errmsg}`);\n }\n try {\n this.dbChanges(mDB);\n }\n catch (err) {\n const errmsg = err.message ? err.message : err;\n throw new Error(`${msg} ${errmsg}`);\n }\n return mDB;\n }\n else {\n throw new Error(msg + 'open database failed');\n }\n }\n /**\n * SetCipherPragma\n * @param mDB\n * @param password\n */\n setCipherPragma(mDB, passphrase) {\n const msg = 'setCipherPragma';\n try {\n mDB.pragma(`cipher='sqlcipher'`);\n mDB.pragma(`legacy=4`);\n mDB.pragma(`key='${passphrase}'`);\n return;\n }\n catch (err) {\n const errmsg = err.message ? err.message : err;\n throw new Error(`${msg} ${errmsg}`);\n }\n }\n /**\n * SetForeignKeyConstraintsEnabled\n * @param mDB\n * @param toggle\n */\n setForeignKeyConstraintsEnabled(mDB, toggle) {\n const msg = 'SetForeignKeyConstraintsEnabled';\n let key = 'OFF';\n if (toggle) {\n key = 'ON';\n }\n try {\n mDB.pragma(`foreign_keys = '${key}'`);\n return;\n }\n catch (err) {\n const errmsg = err.message ? err.message : err;\n throw new Error(`${msg} ${errmsg}`);\n }\n }\n /**\n * CloseDB\n * @param mDB\n */\n closeDB(mDB) {\n const msg = 'closeDB';\n try {\n mDB.close();\n return;\n }\n catch (err) {\n const errmsg = err.message ? err.message : err;\n throw new Error(`${msg} ${errmsg}`);\n }\n }\n /**\n * GetVersion\n * @param mDB\n */\n getVersion(mDB) {\n const msg = 'GetVersion';\n try {\n const result = mDB.pragma('user_version');\n return result[0].user_version;\n }\n catch (err) {\n const errmsg = err.message ? err.message : err;\n throw new Error(`${msg} ${errmsg}`);\n }\n }\n /**\n * SetVersion\n * @param mDB\n * @param version\n */\n setVersion(mDB, version) {\n const msg = 'SetVersion';\n try {\n mDB.pragma(`user_version = '${version}'`);\n return;\n }\n catch (err) {\n const errmsg = err.message ? err.message : err;\n throw new Error(`${msg} ${errmsg}`);\n }\n }\n /**\n * ChangePassword\n * @param pathDB\n * @param password\n * @param newpassword\n */\n changePassword(pathDB, password, newpassword) {\n let mDB;\n const msg = 'ChangePassword';\n try {\n mDB = this.openOrCreateDatabase(pathDB, password, false);\n this.pragmaReKey(mDB, password, newpassword);\n }\n catch (err) {\n const errmsg = err.message ? err.message : err;\n throw new Error(`${msg} ${errmsg}`);\n }\n finally {\n this.closeDB(mDB);\n }\n return;\n }\n /**\n * PragmaReKey\n * @param mDB\n * @param passphrase\n * @param newpassphrase\n */\n pragmaReKey(mDB, passphrase, newpassphrase) {\n const msg = 'PragmaReKey: ';\n try {\n mDB.pragma(`cipher='sqlcipher'`);\n mDB.pragma(`legacy=4`);\n mDB.pragma(`key='${passphrase}'`);\n mDB.pragma(`rekey='${newpassphrase}'`);\n return;\n }\n catch (err) {\n const errmsg = err.message ? err.message : err;\n throw new Error(`${msg} ${errmsg}`);\n }\n }\n /**\n * BeginTransaction\n * @param db\n * @param isOpen\n */\n beginTransaction(db, isOpen) {\n // eslint-disable-next-line no-async-promise-executor\n const msg = 'BeginTransaction: ';\n if (!isOpen) {\n throw new Error(`${msg} database not opened`);\n }\n const sql = 'BEGIN TRANSACTION;';\n try {\n db.exec(sql);\n return;\n }\n catch (err) {\n const errmsg = err.message ? err.message : err;\n throw new Error(`${msg} ${errmsg}`);\n }\n }\n /**\n * RollbackTransaction\n * @param db\n * @param isOpen\n */\n rollbackTransaction(db, isOpen) {\n const msg = 'RollbackTransaction: ';\n if (!isOpen) {\n throw new Error(`${msg} database not opened`);\n }\n const sql = 'ROLLBACK TRANSACTION;';\n try {\n db.exec(sql);\n return;\n }\n catch (err) {\n const errmsg = err.message ? err.message : err;\n throw new Error(`${msg} ${errmsg}`);\n }\n }\n /**\n * CommitTransaction\n * @param db\n * @param isOpen\n */\n commitTransaction(db, isOpen) {\n const msg = 'CommitTransaction: ';\n if (!isOpen) {\n throw new Error(`${msg} database not opened`);\n }\n const sql = 'COMMIT TRANSACTION;';\n try {\n db.exec(sql);\n return;\n }\n catch (err) {\n const errmsg = err.message ? err.message : err;\n throw new Error(`${msg} ${errmsg}`);\n }\n }\n /**\n * DbChanges\n * return total number of changes\n * @param db\n */\n dbChanges(db) {\n const msg = 'DbChanges: ';\n let changes = 0;\n try {\n const statement = db.prepare('SELECT total_changes()');\n const firstRow = statement.get();\n if (firstRow != null) {\n const key = Object.keys(firstRow)[0];\n changes = firstRow[key];\n }\n return changes;\n }\n catch (err) {\n const errmsg = err.message ? err.message : err;\n throw new Error(`${msg} ${errmsg}`);\n }\n }\n /**\n * GetLastId\n * @param db\n */\n getLastId(db) {\n const msg = 'GetLastId: ';\n let lastId = -1;\n try {\n const statement = db.prepare('SELECT last_insert_rowid()');\n const firstRow = statement.get();\n if (firstRow != null) {\n const key = Object.keys(firstRow)[0];\n lastId = firstRow[key];\n }\n return lastId;\n }\n catch (err) {\n const errmsg = err.message ? err.message : err;\n throw new Error(`${msg} ${errmsg}`);\n }\n }\n /**\n * Execute\n * @param mDB\n * @param sql\n */\n execute(mDB, sql, fromJson, isSQL92) {\n const result = { changes: 0, lastId: -1 };\n const msg = 'Execute';\n let changes = -1;\n let lastId = -1;\n let initChanges = -1;\n try {\n initChanges = this.dbChanges(mDB);\n let sqlStmt = sql;\n // modify sql to sql92 compatible\n sqlStmt = this.statementsToSQL92(mDB, sql, fromJson, isSQL92);\n this.execDB(mDB, sqlStmt);\n changes = this.dbChanges(mDB) - initChanges;\n lastId = this.getLastId(mDB);\n result.changes = changes;\n result.lastId = lastId;\n return result;\n }\n catch (err) {\n const errmsg = err.message ? err.message : err;\n throw new Error(`${msg} ${errmsg}`);\n }\n }\n statementsToSQL92(mDB, sql, fromJson, isSQL92) {\n // split the statements in an array of statement\n let sqlStmt = sql; /*.replace(/\\n/g, '')*/\n // deal with trigger\n sqlStmt = sqlStmt.replace(/end;/g, 'END;');\n sqlStmt = sqlStmt.replace(/;END;/g, '&END;');\n const sqlStmts = sqlStmt.split(';');\n const resArr = [];\n // loop through the statement\n for (const stmt of sqlStmts) {\n let rStmt = stmt.trim();\n const stmtType = rStmt.split(' ')[0].toUpperCase();\n switch (stmtType) {\n case 'CREATE':\n if (rStmt.includes('&END')) {\n rStmt = rStmt.replace(/&END/g, ';END');\n }\n break;\n case 'DELETE':\n if (!fromJson && rStmt.toLowerCase().includes('WHERE'.toLowerCase())) {\n let whereStmt = rStmt;\n if (!isSQL92)\n whereStmt = this.cleanStatement(rStmt);\n rStmt = this.deleteSQL(mDB, whereStmt, []);\n }\n break;\n case 'INSERT':\n if (rStmt.toLowerCase().includes('VALUES'.toLowerCase())) {\n if (!isSQL92)\n rStmt = this.cleanStatement(rStmt);\n }\n break;\n case 'UPDATE':\n if (rStmt.toLowerCase().includes('SET'.toLowerCase())) {\n if (!isSQL92)\n rStmt = this.cleanStatement(`${stmt.trim()}`);\n }\n break;\n case 'SELECT':\n if (!fromJson && rStmt.toLowerCase().includes('WHERE'.toLowerCase())) {\n if (!isSQL92)\n rStmt = this.cleanStatement(rStmt);\n }\n break;\n default:\n break;\n }\n resArr.push(rStmt);\n }\n sqlStmt = resArr.join(';\\n');\n return sqlStmt;\n }\n /**\n * ExecDB\n * @param mDB\n * @param sql\n */\n execDB(mDB, sql) {\n const msg = 'execDB: ';\n try {\n mDB.exec(sql);\n return;\n }\n catch (err) {\n const errmsg = err.message ? err.message : err;\n throw new Error(`${msg} ${errmsg}`);\n }\n }\n /**\n * ExecuteSet\n * @param mDB\n * @param set\n * @param fromJson\n */\n executeSet(mDB, set, fromJson, returnMode, isSQL92) {\n const ret = { changes: 0, lastId: -1, values: [] };\n let result = { changes: 0, lastId: -1 };\n const msg = 'ExecuteSet';\n for (let i = 0; i < set.length; i++) {\n const statement = 'statement' in set[i] ? set[i].statement : null;\n const values = 'values' in set[i] && set[i].values.length > 0 ? set[i].values : [];\n if (statement == null) {\n let msg = 'ExecuteSet: Error Nostatement';\n msg += ` for index ${i}`;\n throw new Error(msg);\n }\n try {\n if (Array.isArray(values[0])) {\n for (const val of values) {\n const mVal = this.replaceUndefinedByNull(val);\n result = this.prepareRun(mDB, statement, mVal, fromJson, returnMode);\n ret.changes += result.changes;\n ret.lastId = result.lastId;\n const keys = Object.keys(result);\n if (keys.includes('values') && result.values.length > 0) {\n ret.values.push(result.values);\n }\n }\n }\n else {\n if (values.length > 0) {\n const mVal = this.replaceUndefinedByNull(values);\n result = this.prepareRun(mDB, statement, mVal, fromJson, returnMode);\n }\n else {\n let nStatement = statement;\n if (!isSQL92) {\n nStatement = this.cleanStatement(statement);\n }\n result = this.prepareRun(mDB, nStatement, [], fromJson, returnMode);\n }\n ret.changes += result.changes;\n ret.lastId = result.lastId;\n const keys = Object.keys(result);\n if (keys.includes('values') && result.values.length > 0) {\n ret.values.push(result.values);\n }\n }\n }\n catch (err) {\n const errmsg = err.message ? err.message : err;\n throw new Error(`${msg} ${errmsg}`);\n }\n }\n return ret;\n }\n /**\n * PrepareRun\n * @param mDB\n * @param statement\n * @param values\n * @param fromJson\n * @param returnMode\n */\n prepareRun(mDB, statement, values, fromJson, returnMode) {\n const result = { changes: 0, lastId: -1 };\n const msg = 'PrepareRun';\n const stmtType = statement.trim().split(' ')[0].toUpperCase();\n let sqlStmt = statement;\n try {\n if (!fromJson && stmtType === 'DELETE') {\n sqlStmt = this.deleteSQL(mDB, statement, values);\n }\n const mValues = values ? values : [];\n let mVal = [];\n if (mValues.length > 0) {\n mVal = this.replaceUndefinedByNull(mValues);\n } /* else {\n const findVals = sqlStmt.match(/\\?/gi);\n const nbValues = findVals ? findVals.length : 0;\n for (let i = 0; i < nbValues; i++) {\n mVal.push(null);\n }\n }*/\n const ret = this.runExec(mDB, sqlStmt, mVal, returnMode);\n if (ret.values != null) {\n result.values = ret.values;\n result.changes = ret.changes;\n result.lastId = ret.lastInsertRowid;\n }\n else {\n result.changes = ret.changes;\n result.lastId = ret.lastInsertRowid;\n }\n return result;\n }\n catch (err) {\n const errmsg = err.message ? err.message : err;\n throw new Error(`${msg} ${errmsg}`);\n }\n }\n runExec(mDB, stmt, values = [], returnMode) {\n let result = { changes: 0, lastInsertRowid: -1, values: [] };\n const msg = 'runExec: ';\n try {\n const params = this.getStmtAndNames(stmt, returnMode);\n switch (params.mMode) {\n case 'one': {\n const iniChanges = this.dbChanges(mDB);\n if (values.length === 0) {\n const value = mDB.prepare(stmt).get();\n result.values.push(value);\n result.lastInsertRowid = this.getLastId(mDB);\n }\n else {\n const lowerId = this.getLastId(mDB) + 1;\n const statement = mDB.prepare(params.stmt);\n const res = statement.run(values);\n result.lastInsertRowid = res.lastInsertRowid;\n const sql = `SELECT ${params.names} FROM ${params.tableName} WHERE rowid = ${lowerId};`;\n const value = this.queryOne(mDB, sql, [], true);\n result.values.push(value);\n }\n result.changes = this.dbChanges(mDB) - iniChanges;\n break;\n }\n case 'all': {\n const iniChanges = this.dbChanges(mDB);\n if (values.length === 0) {\n result.values = mDB.prepare(stmt).all();\n result.lastInsertRowid = this.getLastId(mDB);\n }\n else {\n const lowerId = this.getLastId(mDB) + 1;\n const statement = mDB.prepare(params.stmt);\n const res = statement.run(values);\n const upperId = res.lastInsertRowid;\n const sql = `SELECT ${params.names} FROM ${params.tableName} WHERE rowid BETWEEN ${lowerId} AND ${upperId};`;\n result.values = this.queryAll(mDB, sql, [], true);\n result.lastInsertRowid = res.lastInsertRowid;\n }\n result.changes = this.dbChanges(mDB) - iniChanges;\n break;\n }\n default: {\n const statement = mDB.prepare(params.stmt);\n if (values != null && values.length > 0) {\n result = statement.run(values);\n }\n else {\n result = statement.run();\n }\n }\n }\n return result;\n }\n catch (err) {\n const errmsg = err.message ? err.message : err;\n throw new Error(`${msg} ${errmsg}`);\n }\n }\n /**\n * replaceUndefinedByNull\n * @param values\n * @returns\n */\n replaceUndefinedByNull(values) {\n const retValues = [];\n if (values.length > 0) {\n for (const val of values) {\n let mVal = val;\n if (typeof val === 'undefined')\n mVal = null;\n retValues.push(mVal);\n }\n }\n return retValues;\n }\n /**\n * deleteSQL\n * @param mDB\n * @param statement\n * @param values\n * @returns\n */\n deleteSQL(mDB, statement, values) {\n let sqlStmt = statement;\n const msg = 'DeleteSQL';\n try {\n const isLast = this.isLastModified(mDB, true);\n const isDel = this.isSqlDeleted(mDB, true);\n if (!isLast || !isDel) {\n return sqlStmt;\n }\n // Replace DELETE by UPDATE\n // set sql_deleted to 1 and the last_modified to\n // timenow\n const whereClause = this.statUtil.extractWhereClause(sqlStmt);\n if (!whereClause) {\n const msg = 'deleteSQL: cannot find a WHERE clause';\n throw new Error(`${msg}`);\n }\n const tableName = this.statUtil.extractTableName(sqlStmt);\n if (!tableName) {\n const msg = 'deleteSQL: cannot find a WHERE clause';\n throw new Error(`${msg}`);\n }\n const colNames = this.statUtil.extractColumnNames(whereClause);\n if (colNames.length === 0) {\n const msg = 'deleteSQL: Did not find column names in the WHERE Statement';\n throw new Error(`${msg}`);\n }\n const setStmt = 'sql_deleted = 1';\n // Find REFERENCES if any and update the sql_deleted\n // column\n const hasToUpdate = this.findReferencesAndUpdate(mDB, tableName, whereClause, colNames, values);\n if (hasToUpdate) {\n const whereStmt = whereClause.endsWith(';') ? whereClause.slice(0, -1) : whereClause;\n sqlStmt = `UPDATE ${tableName} SET ${setStmt} WHERE ${whereStmt} AND sql_deleted = 0;`;\n }\n else {\n sqlStmt = '';\n }\n return sqlStmt;\n }\n catch (err) {\n const errmsg = err.message ? err.message : err;\n throw new Error(`${msg} ${errmsg}`);\n }\n }\n /**\n * findReferencesAndUpdate\n * @param mDB\n * @param tableName\n * @param whereStmt\n * @param initColNames\n * @param values\n * @returns\n */\n findReferencesAndUpdate(mDB, tableName, whereStmt, initColNames, values) {\n try {\n const retBool = true;\n const result = this.getReferences(mDB, tableName);\n const references = result.retRefs;\n const tableNameWithRefs = result.tableWithRefs;\n if (references.length <= 0) {\n return retBool;\n }\n if (tableName === tableNameWithRefs) {\n return retBool;\n }\n // Loop through references\n for (const ref of references) {\n // Extract the FOREIGN KEY constraint info from the ref statement\n const foreignKeyInfo = this.statUtil.extractForeignKeyInfo(ref);\n // Get the tableName of the references\n const refTable = foreignKeyInfo.tableName;\n if (refTable === '' || refTable !== tableName) {\n continue;\n }\n // Get the with ref column names\n const withRefsNames = foreignKeyInfo.forKeys;\n // Get the column names\n const colNames = foreignKeyInfo.refKeys;\n if (colNames.length !== withRefsNames.length) {\n const msg = 'findReferencesAndUpdate: mismatch length';\n throw new Error(msg);\n }\n const action = foreignKeyInfo.action;\n if (action === 'NO_ACTION') {\n continue;\n }\n const updTableName = tableNameWithRefs;\n const updColNames = withRefsNames;\n let results = {\n uWhereStmt: '',\n setStmt: '',\n };\n if (!this.delUtil.checkValuesMatch(withRefsNames, initColNames)) {\n // Case: no match\n // Search for related items in tableName\n const result = this.searchForRelatedItems(mDB, updTableName, tableName, whereStmt, withRefsNames, colNames, values);\n if (result.relatedItems.length === 0 && result.key.length <= 0) {\n continue;\n }\n if (updTableName !== tableName) {\n switch (action) {\n case 'RESTRICT':\n results = this.delUtil.upDateWhereForRestrict(result);\n break;\n case 'CASCADE':\n results = this.delUtil.upDateWhereForCascade(result);\n break;\n default:\n results = this.delUtil.upDateWhereForDefault(withRefsNames, result);\n break;\n }\n }\n }\n else {\n throw new Error('Not implemented. Please transfer your example to the maintener');\n }\n if (results.setStmt.length > 0 && results.uWhereStmt.length > 0) {\n this.executeUpdateForDelete(mDB, updTableName, results.uWhereStmt, results.setStmt, updColNames, values);\n }\n }\n return retBool;\n }\n catch (error) {\n const msg = error.message ? error.message : error;\n throw new Error(msg);\n }\n }\n /**\n * getReferences\n * @param db\n * @param tableName\n * @returns\n */\n getReferences(db, tableName) {\n const sqlStmt = 'SELECT sql FROM sqlite_master ' +\n \"WHERE sql LIKE('%FOREIGN KEY%') AND sql LIKE('%REFERENCES%') AND \" +\n \"sql LIKE('%\" +\n tableName +\n \"%') AND sql LIKE('%ON DELETE%');\";\n try {\n const res = this.queryAll(db, sqlStmt, [], true);\n // get the reference's string(s)\n let retRefs = [];\n let tableWithRefs = '';\n if (res.length > 0) {\n const result = this.getRefs(res[0].sql);\n retRefs = result.foreignKeys;\n tableWithRefs = result.tableName;\n }\n return { tableWithRefs: tableWithRefs, retRefs: retRefs };\n }\n catch (err) {\n const error = err.message ? err.message : err;\n const msg = `getReferences: ${error}`;\n throw new Error(msg);\n }\n }\n /**\n * getRefs\n * @param sqlStatement\n * @returns\n */\n getRefs(sqlStatement) {\n let tableName = '';\n const foreignKeys = [];\n const statement = this.statUtil.flattenMultilineString(sqlStatement);\n try {\n // Regular expression pattern to match the table name\n const tableNamePattern = /CREATE\\s+TABLE\\s+(\\w+)\\s+\\(/;\n const tableNameMatch = statement.match(tableNamePattern);\n if (tableNameMatch) {\n tableName = tableNameMatch[1];\n }\n // Regular expression pattern to match the FOREIGN KEY constraints\n const foreignKeyPattern = /FOREIGN\\s+KEY\\s+\\([^)]+\\)\\s+REFERENCES\\s+(\\w+)\\s*\\([^)]+\\)\\s+ON\\s+DELETE\\s+(CASCADE|RESTRICT|SET\\s+DEFAULT|SET\\s+NULL|NO\\s+ACTION)/g;\n const foreignKeyMatches = statement.matchAll(foreignKeyPattern);\n for (const foreignKeyMatch of foreignKeyMatches) {\n const foreignKey = foreignKeyMatch[0];\n foreignKeys.push(foreignKey);\n }\n }\n catch (error) {\n const msg = `getRefs: Error creating regular expression: ${error}`;\n throw new Error(msg);\n }\n return { tableName, foreignKeys };\n }\n /**\n * executeUpdateForDelete\n * @param mDB\n * @param tableName\n * @param whereStmt\n * @param setStmt\n * @param colNames\n * @param values\n */\n executeUpdateForDelete(mDB, tableName, whereStmt, setStmt, colNames, values) {\n try {\n let lastId = -1;\n // Update sql_deleted for this references\n const stmt = `UPDATE ${tableName} SET ${setStmt} ${whereStmt}`;\n const selValues = [];\n if (values.length > 0) {\n const arrVal = whereStmt.split('?');\n if (arrVal[arrVal.length - 1] === ';') {\n arrVal.pop();\n }\n for (let jdx = 0; jdx < arrVal.length; jdx++) {\n for (const updVal of colNames) {\n const indices = this.statUtil.indicesOf(arrVal[jdx], updVal);\n if (indices.length > 0) {\n selValues.push(values[jdx]);\n }\n }\n }\n }\n const retObj = this.runExec(mDB, stmt, selValues, 'no');\n lastId = retObj['lastInsertRowid'];\n if (lastId === -1) {\n const msg = `UPDATE sql_deleted failed for table: ${tableName}`;\n throw new Error(msg);\n }\n }\n catch (error) {\n const msg = error.message ? error.message : error;\n throw new Error(msg);\n }\n }\n /**\n * QueryAll\n * @param mDB\n * @param sql\n * @param values\n */\n queryAll(mDB, sql, values, isSQL92) {\n const msg = 'QueryAll';\n try {\n let cSql = sql;\n if (!isSQL92) {\n cSql = this.cleanStatement(sql);\n }\n const stmt = mDB.prepare(cSql);\n if (!stmt.reader) {\n // statement doesn't returns data\n if (values != null && values.length > 0) {\n stmt.run(values);\n }\n else {\n stmt.run();\n }\n return [];\n }\n let rows;\n if (values != null && values.length > 0) {\n rows = stmt.all(values);\n }\n else {\n rows = stmt.all();\n }\n if (rows == null) {\n rows = [];\n }\n return rows;\n }\n catch (err) {\n const errmsg = err.message ? err.message : err;\n throw new Error(`${msg} ${errmsg}`);\n }\n }\n /**\n * QueryOne\n * @param mDB\n * @param sql\n * @param values\n */\n queryOne(mDB, sql, values, isSQL92) {\n const msg = 'QueryOne';\n try {\n let cSql = sql;\n if (!isSQL92) {\n cSql = this.cleanStatement(sql);\n }\n const stmt = mDB.prepare(cSql);\n let row;\n if (values != null && values.length > 0) {\n row = stmt.get(values);\n }\n else {\n row = stmt.get();\n }\n return row;\n }\n catch (err) {\n const errmsg = err.message ? err.message : err;\n throw new Error(`${msg} ${errmsg}`);\n }\n }\n /**\n * GetTablesNames\n * @param mDb\n */\n getTablesNames(mDb) {\n const msg = 'getTablesNames';\n let sql = 'SELECT name FROM sqlite_master WHERE ';\n sql += \"type='table' AND name NOT LIKE 'sync_table' \";\n sql += \"AND name NOT LIKE '_temp_%' \";\n sql += \"AND name NOT LIKE 'sqlite_%' \";\n sql += 'ORDER BY rootpage DESC;';\n const retArr = [];\n try {\n const retQuery = this.queryAll(mDb, sql, [], true);\n for (const query of retQuery) {\n retArr.push(query.name);\n }\n return retArr;\n }\n catch (err) {\n const errmsg = err.message ? err.message : err;\n throw new Error(`${msg} ${errmsg}`);\n }\n }\n /**\n * GetViewsNames\n * @param mDb\n */\n getViewsNames(mDb) {\n const msg = 'GetViewsNames';\n let sql = 'SELECT name FROM sqlite_master WHERE ';\n sql += \"type='view' AND name NOT LIKE 'sqlite_%' \";\n sql += 'ORDER BY rootpage DESC;';\n const retArr = [];\n try {\n const retQuery = this.queryAll(mDb, sql, [], true);\n for (const query of retQuery) {\n retArr.push(query.name);\n }\n return retArr;\n }\n catch (err) {\n const errmsg = err.message ? err.message : err;\n throw new Error(`${msg} ${errmsg}`);\n }\n }\n /**\n * isLastModified\n * @param mDB\n * @param isOpen\n */\n isLastModified(mDB, isOpen) {\n const msg = 'IsLastModified';\n if (!isOpen) {\n throw new Error(`${msg} database not opened`);\n }\n try {\n const tableList = this.getTablesNames(mDB);\n for (const table of tableList) {\n const tableNamesTypes = this.getTableColumnNamesTypes(mDB, table);\n const tableColumnNames = tableNamesTypes.names;\n if (tableColumnNames.includes('last_modified')) {\n return true;\n }\n }\n return false;\n }\n catch (err) {\n const errmsg = err.message ? err.message : err;\n throw new Error(`${msg} ${errmsg}`);\n }\n }\n /**\n * isSqlDeleted\n * @param mDB\n * @param isOpen\n */\n isSqlDeleted(mDB, isOpen) {\n const msg = 'IsSqlDeleted';\n if (!isOpen) {\n throw new Error(`${msg} database not opened`);\n }\n try {\n const tableList = this.getTablesNames(mDB);\n for (const table of tableList) {\n const tableNamesTypes = this.getTableColumnNamesTypes(mDB, table);\n const tableColumnNames = tableNamesTypes.names;\n if (tableColumnNames.includes('sql_deleted')) {\n return true;\n }\n }\n return false;\n }\n catch (err) {\n const errmsg = err.message ? err.message : err;\n throw new Error(`${msg} ${errmsg}`);\n }\n }\n getJournalMode(mDB) {\n const msg = 'getJournalMode';\n try {\n const retMode = mDB.pragma('journal_mode');\n return retMode[0].journal_mode;\n }\n catch (err) {\n const errmsg = err.message ? err.message : err;\n throw new Error(`${msg} ${errmsg}`);\n }\n }\n async isDatabaseEncrypted(dbName) {\n const msg = 'isDatabaseEncrypted';\n try {\n const isExists = this.fileUtil.isFileExists(dbName);\n if (isExists) {\n const filePath = this.fileUtil.getFilePath(dbName);\n return await this.isDBEncrypted(filePath);\n }\n else {\n throw new Error(`${msg}: Database ${dbName} does not exist`);\n }\n }\n catch (err) {\n const errmsg = err.message ? err.message : err;\n throw new Error(`${msg} ${errmsg}`);\n }\n }\n async isDBEncrypted(filePath) {\n try {\n const retStr = await this.fileUtil.readFileAsPromise(filePath, {\n start: 0,\n end: 12,\n });\n if (retStr === 'SQLite format')\n return false;\n else\n return true;\n }\n catch (error) {\n return true;\n }\n }\n /**\n * GetTableColumnNamesTypes\n * @param mDB\n * @param tableName\n */\n getTableColumnNamesTypes(mDB, tableName) {\n const msg = 'getTableColumnNamesTypes';\n try {\n const infos = mDB.pragma(`table_info('${tableName}')`);\n const retNames = [];\n const retTypes = [];\n for (const info of infos) {\n retNames.push(info.name);\n retTypes.push(info.type);\n }\n return { names: retNames, types: retTypes };\n }\n catch (err) {\n const errmsg = err.message ? err.message : err;\n throw new Error(`${msg} ${errmsg}`);\n }\n }\n searchForRelatedItems(mDB, updTableName, tableName, whStmt, withRefsNames, colNames, values) {\n const relatedItems = [];\n let key = '';\n const t1Names = withRefsNames.map((name) => `t1.${name}`);\n const t2Names = colNames.map((name) => `t2.${name}`);\n try {\n // addPrefix to the whereClause and swap colNames with withRefsNames\n let whereClause = this.statUtil.addPrefixToWhereClause(whStmt, colNames, withRefsNames, 't2.');\n // look at the whereclause and change colNames with withRefsNames\n if (whereClause.endsWith(';')) {\n whereClause = whereClause.slice(0, -1);\n }\n const resultString = t1Names.map((t1, index) => `${t1} = ${t2Names[index]}`).join(' AND ');\n const sql = `SELECT t1.rowid FROM ${updTableName} t1 ` +\n `JOIN ${tableName} t2 ON ${resultString} ` +\n `WHERE ${whereClause} AND t1.sql_deleted = 0;`;\n const vals = this.queryAll(mDB, sql, values, true);\n if (vals.length > 0) {\n key = Object.keys(vals[0])[0];\n relatedItems.push(...vals);\n }\n return { key: key, relatedItems: relatedItems };\n }\n catch (error) {\n const msg = error.message ? error.message : error;\n throw new Error(msg);\n }\n }\n cleanStatement(stmt) {\n let sql = '';\n if (stmt.toLowerCase().includes('INSERT INTO'.toLowerCase()) ||\n stmt.toLowerCase().includes('SELECT'.toLowerCase()) ||\n stmt.toLowerCase().includes('UPDATE'.toLowerCase()) ||\n stmt.toLowerCase().includes('DELETE FROM'.toLowerCase())) {\n // check for JSON string\n sql = this.dealJsonString(stmt);\n sql = this.sql92Utils.compatibleSQL92(sql);\n sql = sql.replaceAll('§', '\"');\n }\n else {\n sql = stmt;\n }\n return sql;\n }\n findIndex(str, char) {\n const a = [];\n for (let i = str.length; i--;)\n if (str[i] == char)\n a.push(i);\n return a.reverse();\n }\n dealJsonString(stmt) {\n let retStmt = stmt;\n const oJ = this.findIndex(stmt, '{');\n const eJ = this.findIndex(stmt, '}');\n for (let i = 0; i < oJ.length; i++) {\n const g = retStmt.substring(oJ[i] + 1, eJ[i]).replaceAll('\"', '§');\n retStmt = retStmt.substring(0, oJ[i] + 1) + g + retStmt.substring(eJ[i]);\n }\n return retStmt;\n }\n isReturning(sqlStmt) {\n let stmt = sqlStmt.trim();\n const stmtType = stmt.split(' ')[0].toUpperCase();\n if (stmt.endsWith(';')) {\n stmt = stmt.slice(0, -1).trim();\n }\n switch (stmtType) {\n case 'INSERT': {\n const valuesIndex = stmt.search(/\\bVALUES\\b/i);\n let closingParenthesisIndex = -1;\n for (let i = stmt.length - 1; i >= valuesIndex; i--) {\n if (stmt[i] === ')') {\n closingParenthesisIndex = i;\n break;\n }\n }\n if (closingParenthesisIndex !== -1) {\n const stmtString = stmt.substring(0, closingParenthesisIndex + 1).trim() + ';';\n const suffix = stmt.substring(closingParenthesisIndex + 1).trim();\n if (suffix.toLowerCase().includes('returning')) {\n return { isReturning: true, stmt: stmtString, suffix: suffix };\n }\n else {\n return { isReturning: false, stmt, suffix: '' };\n }\n }\n return { isReturning: false, stmt, suffix: '' };\n }\n case 'DELETE':\n case 'UPDATE': {\n const words = stmt.split(/\\s+/);\n const wordsBeforeReturning = [];\n const returningString = [];\n let isReturningOutsideMessage = false;\n for (const word of words) {\n if (word.toLowerCase() === 'returning') {\n isReturningOutsideMessage = true;\n returningString.push(word, ...this.wordsAfter(word, words));\n break;\n }\n wordsBeforeReturning.push(word);\n }\n if (isReturningOutsideMessage) {\n const joinedWords = wordsBeforeReturning.join(' ') + ';';\n let joinedReturningString = returningString.join(' ');\n if (joinedReturningString.length > 0 && !joinedReturningString.endsWith(';')) {\n joinedReturningString += ';';\n }\n return {\n isReturning: true,\n stmt: joinedWords,\n suffix: joinedReturningString,\n };\n }\n else {\n return { isReturning: false, stmt, suffix: '' };\n }\n }\n default:\n return { isReturning: false, stmt, suffix: '' };\n }\n }\n wordsAfter(word, words) {\n const index = words.indexOf(word);\n if (index === -1) {\n return [];\n }\n return words.slice(index + 1);\n }\n getStmtAndNames(sqlStmt, returnMode) {\n const retObj = {};\n const mStmt = sqlStmt;\n const { isReturning, stmt, suffix } = this.isReturning(mStmt);\n retObj.mMode = 'no';\n retObj.stmt = stmt;\n retObj.names = '';\n if (isReturning && (returnMode === 'all' || returnMode === 'one')) {\n retObj.tableName = this.getTableName(mStmt);\n retObj.mMode = returnMode;\n const lowercaseSuffix = suffix.toLowerCase();\n const returningIndex = lowercaseSuffix.indexOf('returning');\n if (returningIndex !== -1) {\n const substring = suffix.slice(returningIndex + 9); // 9 is the length of \"returning\"\n const names = substring.trim();\n retObj.names = this.getNames(names);\n }\n }\n return retObj;\n }\n getNames(input) {\n // Find the index of the first occurrence of \";\", \"--\", or \"/*\"\n const indexSemicolon = input.indexOf(';');\n const indexDoubleDash = input.indexOf('--');\n const indexCommentStart = input.indexOf('/*');\n // Find the minimum index among them\n let minIndex = input.length;\n if (indexSemicolon !== -1) {\n minIndex = Math.min(minIndex, indexSemicolon);\n }\n if (indexDoubleDash !== -1) {\n minIndex = Math.min(minIndex, indexDoubleDash);\n }\n if (indexCommentStart !== -1) {\n minIndex = Math.min(minIndex, indexCommentStart);\n }\n // Extract substring up to the minimum index\n const colnames = input.substring(0, minIndex).trim();\n return colnames;\n }\n getTableName(sqlStatement) {\n const patterns = {\n insert: /INSERT\\s+INTO\\s+(\\w+)/i,\n delete: /DELETE\\s+FROM\\s+(\\w+)/i,\n update: /UPDATE\\s+(\\w+)/i,\n select: /SELECT.*\\s+FROM\\s+(\\w+)/i,\n };\n let tableName = null;\n Object.keys(patterns).some((key) => {\n const pattern = patterns[key];\n const match = pattern.exec(sqlStatement);\n if (match) {\n tableName = match[1];\n return true; // Stop iterating through patterns\n }\n return false;\n });\n return tableName;\n }\n}\nexports.UtilsSQLite = UtilsSQLite;\n//# sourceMappingURL=utilsSQLite.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.UtilsJson = void 0;\nconst utilsSQLite_1 = require(\"../utilsSQLite\");\nclass UtilsJson {\n constructor() {\n this.sqliteUtil = new utilsSQLite_1.UtilsSQLite();\n }\n /**\n * IsTableExists\n * @param mDB\n * @param isOpen\n * @param tableName\n */\n isTableExists(mDB, isOpen, tableName) {\n const msg = 'IsTableExists';\n let ret = false;\n if (!isOpen) {\n throw new Error(`${msg} database not opened`);\n }\n let query = 'SELECT name FROM sqlite_master WHERE ';\n query += `type='table' AND name='${tableName}';`;\n const rows = this.sqliteUtil.queryAll(mDB, query, [], true);\n if (rows.length > 0) {\n ret = true;\n }\n return ret;\n }\n /**\n * IsViewExists\n * @param db\n * @param isOpen\n * @param viewName\n */\n isViewExists(mDB, isOpen, viewName) {\n const msg = 'IsViewExists';\n let ret = false;\n if (!isOpen) {\n throw new Error(`${msg} database not opened`);\n }\n let query = 'SELECT name FROM sqlite_master WHERE ';\n query += `type='view' AND name='${viewName}';`;\n const rows = this.sqliteUtil.queryAll(mDB, query, [], true);\n if (rows.length > 0) {\n ret = true;\n }\n return ret;\n }\n /**\n * CreateSchema\n * @param mDB\n * @param jsonData\n */\n createSchema(mDB, jsonData) {\n // create the database schema\n const msg = 'CreateSchema';\n let changes = 0;\n try {\n // start a transaction\n this.sqliteUtil.beginTransaction(mDB.database, true);\n mDB.setIsTransActive(true);\n }\n catch (err) {\n throw new Error(`${msg} ${err}`);\n }\n const stmts = this.createSchemaStatement(jsonData);\n if (stmts.length > 0) {\n const schemaStmt = stmts.join('\\n');\n try {\n const results = this.sqliteUtil.execute(mDB.database, schemaStmt, true, true);\n changes = results.changes;\n if (changes < 0) {\n try {\n this.sqliteUtil.rollbackTransaction(mDB.database, true);\n mDB.setIsTransActive(false);\n }\n catch (err) {\n throw new Error(`${msg} changes < 0 ${err}`);\n }\n }\n }\n catch (err) {\n const msg = err;\n try {\n this.sqliteUtil.rollbackTransaction(mDB.database, true);\n mDB.setIsTransActive(false);\n throw new Error(`CreateSchema: ${msg}`);\n }\n catch (err) {\n throw new Error(`${msg} changes < 0${err}: ${msg}`);\n }\n }\n }\n try {\n this.sqliteUtil.commitTransaction(mDB.database, true);\n mDB.setIsTransActive(false);\n return changes;\n }\n catch (err) {\n throw new Error(`${msg} ${err}`);\n }\n }\n /**\n * CreateSchemaStatement\n * @param jsonData\n */\n createSchemaStatement(jsonData) {\n const msg = 'CreateSchemaStatement';\n const statements = [];\n let isLastModified = false;\n let isSqlDeleted = false;\n // Prepare the statement to execute\n try {\n for (const jTable of jsonData.tables) {\n if (jTable.schema != null && jTable.schema.length >= 1) {\n // create table\n statements.push('CREATE TABLE IF NOT EXISTS ' + `${jTable.name} (`);\n for (let j = 0; j < jTable.schema.length; j++) {\n if (j === jTable.schema.length - 1) {\n if (jTable.schema[j].column) {\n statements.push(`${jTable.schema[j].column} ${jTable.schema[j].value}`);\n if (jTable.schema[j].column === 'last_modified') {\n isLastModified = true;\n }\n if (jTable.schema[j].column === 'sql_deleted') {\n isSqlDeleted = true;\n }\n }\n else if (jTable.schema[j].foreignkey) {\n statements.push(`FOREIGN KEY (${jTable.schema[j].foreignkey}) ${jTable.schema[j].value}`);\n }\n else if (jTable.schema[j].constraint) {\n statements.push(`CONSTRAINT ${jTable.schema[j].constraint} ${jTable.schema[j].value}`);\n }\n }\n else {\n if (jTable.schema[j].column) {\n statements.push(`${jTable.schema[j].column} ${jTable.schema[j].value},`);\n if (jTable.schema[j].column === 'last_modified') {\n isLastModified = true;\n }\n if (jTable.schema[j].column === 'sql_deleted') {\n isSqlDeleted = true;\n }\n }\n else if (jTable.schema[j].foreignkey) {\n statements.push(`FOREIGN KEY (${jTable.schema[j].foreignkey}) ${jTable.schema[j].value},`);\n }\n else if (jTable.schema[j].constraint) {\n statements.push(`CONSTRAINT ${jTable.schema[j].constraint} ${jTable.schema[j].value},`);\n }\n }\n }\n statements.push(');');\n if (isLastModified && isSqlDeleted) {\n // create trigger last_modified associated with the table\n let trig = 'CREATE TRIGGER IF NOT EXISTS ';\n trig += `${jTable.name}`;\n trig += `_trigger_last_modified `;\n trig += `AFTER UPDATE ON ${jTable.name} `;\n trig += 'FOR EACH ROW WHEN NEW.last_modified < ';\n trig += 'OLD.last_modified BEGIN UPDATE ';\n trig += `${jTable.name} `;\n trig += `SET last_modified = `;\n trig += \"(strftime('%s','now')) WHERE id=OLD.id; END;\";\n statements.push(trig);\n }\n }\n if (jTable.indexes != null && jTable.indexes.length >= 1) {\n for (const jIndex of jTable.indexes) {\n const tableName = jTable.name;\n let stmt = `CREATE ${Object.keys(jIndex).includes('mode') ? jIndex.mode + ' ' : ''} INDEX IF NOT EXISTS `;\n stmt += `${jIndex.name} ON ${tableName} (${jIndex.value});`;\n statements.push(stmt);\n }\n }\n if (jTable.triggers != null && jTable.triggers.length >= 1) {\n for (const jTrg of jTable.triggers) {\n const tableName = jTable.name;\n if (jTrg.timeevent.toUpperCase().endsWith(' ON')) {\n jTrg.timeevent = jTrg.timeevent.substring(0, jTrg.timeevent.length - 3);\n }\n let stmt = `CREATE TRIGGER IF NOT EXISTS `;\n stmt += `${jTrg.name} ${jTrg.timeevent} ON ${tableName} `;\n if (jTrg.condition)\n stmt += `${jTrg.condition} `;\n stmt += `${jTrg.logic};`;\n statements.push(stmt);\n }\n }\n }\n return statements;\n }\n catch (err) {\n throw new Error(`${msg} ${err}`);\n }\n }\n /**\n * CreateDataTable\n * @param mDB\n * @param table\n * @param mode\n */\n createDataTable(mDB, table, mode) {\n let lastId = -1;\n const msg = 'CreateDataTable';\n let results;\n try {\n // Check if the table exists\n const tableExists = this.isTableExists(mDB, true, table.name);\n if (!tableExists) {\n throw new Error(`${msg} ${table.name} does not exist`);\n }\n // Get the column names and types\n const tableNamesTypes = this.sqliteUtil.getTableColumnNamesTypes(mDB, table.name);\n const tableColumnTypes = tableNamesTypes.types;\n const tableColumnNames = tableNamesTypes.names;\n if (tableColumnTypes.length === 0) {\n throw new Error(`${msg} ${table.name} info does not exist`);\n }\n // Loop on Table Values\n for (let j = 0; j < table.values.length; j++) {\n let row = table.values[j];\n row = this.createRowData(row);\n let isRun = true;\n const stmt = this.createRowStatement(mDB, tableColumnNames, row, j, table.name, mode);\n isRun = this.checkUpdate(mDB, stmt, row, table.name, tableColumnNames);\n if (isRun) {\n if (stmt.substring(0, 6).toUpperCase() === 'DELETE') {\n row = [];\n }\n results = this.sqliteUtil.prepareRun(mDB, stmt, row, true, 'no');\n lastId = results.lastId;\n if (lastId < 0) {\n throw new Error(`${msg} lastId < 0`);\n }\n }\n else {\n lastId = 0;\n }\n }\n return results;\n }\n catch (err) {\n throw new Error(`${msg} ${err}`);\n }\n }\n createRowData(row) {\n // Iterate over the row array\n for (let i = 0; i < row.length; i++) {\n // Check if the current element is an array of numbers\n if (Array.isArray(row[i]) && row[i].every((item) => typeof item === 'number')) {\n const byteArray = Uint8Array.from(row[i]);\n row[i] = byteArray;\n }\n }\n return row;\n }\n /**\n * CreateRowStatement\n * @param mDB\n * @param tColNames\n * @param row\n * @param j\n * @param tableName\n * @param mode\n * @returns\n */\n createRowStatement(mDB, tColNames, row, j, tableName, mode) {\n // Check the row number of columns\n const msg = 'CreateRowStatement';\n if (row.length != tColNames.length || row.length === 0 || tColNames.length === 0) {\n throw new Error(`${msg} Table ${tableName} ` + `values row ${j} not correct length`);\n }\n try {\n const retisIdExists = this.isIdExists(mDB, tableName, tColNames[0], row[0]);\n let stmt;\n if (mode === 'full' || (mode === 'partial' && !retisIdExists)) {\n // Insert\n const nameString = tColNames.join();\n const questionMarkString = this.createQuestionMarkString(tColNames.length);\n stmt = `INSERT INTO ${tableName} (${nameString}) VALUES (`;\n stmt += `${questionMarkString});`;\n }\n else {\n // Update or Delete\n let isUpdate = true;\n const isColDeleted = (element) => element === `sql_deleted`;\n const idxDelete = tColNames.findIndex(isColDeleted);\n if (idxDelete >= 0) {\n if (row[idxDelete] === 1) {\n isUpdate = false;\n stmt = `DELETE FROM ${tableName} WHERE `;\n if (typeof row[0] == 'string') {\n stmt += `${tColNames[0]} = '${row[0]}';`;\n }\n else {\n stmt += `${tColNames[0]} = ${row[0]};`;\n }\n }\n }\n if (isUpdate) {\n // Update\n const setString = this.setNameForUpdate(tColNames);\n if (setString.length === 0) {\n throw new Error(`${msg} Table ${tableName} ` + `values row ${j} not set to String`);\n }\n stmt = `UPDATE ${tableName} SET ${setString} WHERE `;\n if (typeof row[0] == 'string') {\n stmt += `${tColNames[0]} = '${row[0]}';`;\n }\n else {\n stmt += `${tColNames[0]} = ${row[0]};`;\n }\n }\n }\n return stmt;\n }\n catch (err) {\n throw new Error(`${msg} ${err.message}`);\n }\n }\n /**\n *\n * @param mDB\n * @param values\n * @param tbName\n * @param tColNames\n * @returns\n */\n checkUpdate(mDB, stmt, values, tbName, tColNames) {\n const msg = 'CheckUpdate';\n const isRun = true;\n if (stmt.substring(0, 6) === 'UPDATE') {\n try {\n let query = `SELECT * FROM ${tbName} WHERE `;\n if (typeof values[0] == 'string') {\n query += `${tColNames[0]} = '${values[0]}';`;\n }\n else {\n query += `${tColNames[0]} = ${values[0]};`;\n }\n const resQuery = this.getValues(mDB, query, tbName);\n let resValues = [];\n if (resQuery.length > 0) {\n resValues = resQuery[0];\n }\n if (values.length > 0 && resValues.length > 0 && values.length === resValues.length) {\n for (let i = 0; i < values.length; i++) {\n if (values[i] !== resValues[i]) {\n return true;\n }\n }\n return false;\n }\n else {\n const msg1 = 'Both arrays not the same length';\n throw new Error(`${msg} ${msg1}`);\n }\n }\n catch (err) {\n throw new Error(`${msg} ${err.message}`);\n }\n }\n else {\n return isRun;\n }\n }\n /**\n * GetValues\n * @param mDb\n * @param query\n * @param tableName\n */\n getValues(mDb, query, tableName) {\n const msg = 'GetValues';\n const values = [];\n try {\n // get table column names and types\n const tableNamesTypes = this.sqliteUtil.getTableColumnNamesTypes(mDb, tableName);\n let rowNames = [];\n if (Object.keys(tableNamesTypes).includes('names')) {\n rowNames = tableNamesTypes.names;\n }\n else {\n throw new Error(`${msg} Table ${tableName} no names`);\n }\n const retValues = this.sqliteUtil.queryAll(mDb, query, [], true);\n for (const rValue of retValues) {\n const row = [];\n for (const rName of rowNames) {\n if (Object.keys(rValue).includes(rName)) {\n row.push(rValue[rName]);\n }\n else {\n row.push('NULL');\n }\n }\n values.push(row);\n }\n return values;\n }\n catch (err) {\n throw new Error(`${msg} ${err}`);\n }\n }\n /**\n * CheckColumnTypes\n * @param tableTypes\n * @param rowValues\n */\n /*\n private async checkColumnTypes(\n tableTypes: any[],\n rowValues: any[],\n ): Promise<boolean> {\n const isType = true;\n for (let i = 0; i < rowValues.length; i++) {\n if (rowValues[i].toString().toUpperCase() != 'NULL') {\n try {\n await this.isType(tableTypes[i], rowValues[i]);\n } catch (err) {\n return Promise.reject(new Error('checkColumnTypes: Type not found'));\n }\n }\n }\n return Promise.resolve(isType);\n }\n */\n /**\n * IsType\n * @param type\n * @param value\n */\n /*\n private async isType(type: string, value: any): Promise<void> {\n let ret = false;\n if (type === 'NULL' && typeof value === 'object') ret = true;\n if (type === 'TEXT' && typeof value === 'string') ret = true;\n if (type === 'INTEGER' && typeof value === 'number') ret = true;\n if (type === 'REAL' && typeof value === 'number') ret = true;\n if (type === 'BLOB' && typeof value === 'string') ret = true;\n if (ret) {\n return Promise.resolve();\n } else {\n return Promise.reject(new Error('IsType: not a SQL Type'));\n }\n }\n */\n /**\n * IsIdExists\n * @param mDB\n * @param dbName\n * @param firstColumnName\n * @param key\n */\n isIdExists(mDB, dbName, firstColumnName, key) {\n const msg = 'IsIdExists';\n let ret = false;\n let query = `SELECT ${firstColumnName} FROM ` + `${dbName} WHERE ${firstColumnName} = `;\n if (typeof key === 'number')\n query += `${key};`;\n if (typeof key === 'string')\n query += `'${key}';`;\n try {\n const resQuery = this.sqliteUtil.queryAll(mDB, query, [], true);\n if (resQuery.length === 1)\n ret = true;\n return ret;\n }\n catch (err) {\n throw new Error(`${msg} ${err}`);\n }\n }\n /**\n * CreateQuestionMarkString\n * @param length\n */\n createQuestionMarkString(length) {\n const msg = 'CreateQuestionMarkString';\n let retString = '';\n for (let i = 0; i < length; i++) {\n retString += '?,';\n }\n if (retString.length > 1) {\n retString = retString.slice(0, -1);\n return retString;\n }\n else {\n throw new Error(`${msg} length = 0`);\n }\n }\n /**\n * SetNameForUpdate\n * @param names\n */\n setNameForUpdate(names) {\n const msg = 'SetNameForUpdate';\n let retString = '';\n for (const name of names) {\n retString += `${name} = ? ,`;\n }\n if (retString.length > 1) {\n retString = retString.slice(0, -1);\n return retString;\n }\n else {\n throw new Error(`${msg} length = 0`);\n }\n }\n /**\n * IsJsonSQLite\n * @param obj\n */\n isJsonSQLite(obj) {\n const keyFirstLevel = ['database', 'version', 'overwrite', 'encrypted', 'mode', 'tables', 'views'];\n if (obj == null || (Object.keys(obj).length === 0 && obj.constructor === Object))\n return false;\n for (const key of Object.keys(obj)) {\n if (keyFirstLevel.indexOf(key) === -1)\n return false;\n if (key === 'database' && typeof obj[key] != 'string')\n return false;\n if (key === 'version' && typeof obj[key] != 'number')\n return false;\n if (key === 'overwrite' && typeof obj[key] != 'boolean')\n return false;\n if (key === 'encrypted' && typeof obj[key] != 'boolean')\n return false;\n if (key === 'mode' && typeof obj[key] != 'string')\n return false;\n if (key === 'tables' && typeof obj[key] != 'object')\n return false;\n if (key === 'tables') {\n for (const oKey of obj[key]) {\n const retTable = this.isTable(oKey);\n if (!retTable)\n return false;\n }\n }\n if (key === 'views' && typeof obj[key] != 'object')\n return false;\n if (key === 'views') {\n for (const oKey of obj[key]) {\n const retView = this.isView(oKey);\n if (!retView)\n return false;\n }\n }\n }\n return true;\n }\n /**\n * IsTable\n * @param obj\n */\n isTable(obj) {\n const keyTableLevel = ['name', 'schema', 'indexes', 'triggers', 'values'];\n let nbColumn = 0;\n if (obj == null || (Object.keys(obj).length === 0 && obj.constructor === Object))\n return false;\n for (const key of Object.keys(obj)) {\n if (keyTableLevel.indexOf(key) === -1)\n return false;\n if (key === 'name' && typeof obj[key] != 'string')\n return false;\n if (key === 'schema' && typeof obj[key] != 'object')\n return false;\n if (key === 'indexes' && typeof obj[key] != 'object')\n return false;\n if (key === 'triggers' && typeof obj[key] != 'object')\n return false;\n if (key === 'values' && typeof obj[key] != 'object')\n return false;\n if (key === 'schema') {\n obj['schema'].forEach((element) => {\n if (element.column) {\n nbColumn++;\n }\n });\n for (let i = 0; i < nbColumn; i++) {\n const retSchema = this.isSchema(obj[key][i]);\n if (!retSchema)\n return false;\n }\n }\n if (key === 'indexes') {\n for (const oKey of obj[key]) {\n const retIndexes = this.isIndexes(oKey);\n if (!retIndexes)\n return false;\n }\n }\n if (key === 'triggers') {\n for (const oKey of obj[key]) {\n const retTriggers = this.isTriggers(oKey);\n if (!retTriggers)\n return false;\n }\n }\n if (key === 'values') {\n if (nbColumn > 0) {\n for (const oKey of obj[key]) {\n if (typeof oKey != 'object' || oKey.length != nbColumn)\n return false;\n }\n }\n }\n }\n return true;\n }\n /**\n * IsSchema\n * @param obj\n */\n isSchema(obj) {\n const keySchemaLevel = ['column', 'value', 'foreignkey', 'primarykey', 'constraint'];\n if (obj == null || (Object.keys(obj).length === 0 && obj.constructor === Object))\n return false;\n for (const key of Object.keys(obj)) {\n if (keySchemaLevel.indexOf(key) === -1)\n return false;\n if (key === 'column' && typeof obj[key] != 'string')\n return false;\n if (key === 'value' && typeof obj[key] != 'string')\n return false;\n if (key === 'foreignkey' && typeof obj[key] != 'string')\n return false;\n if (key === 'primarykey' && typeof obj[key] != 'string')\n return false;\n if (key === 'constraint' && typeof obj[key] != 'string')\n return false;\n }\n return true;\n }\n /**\n * isIndexes\n * @param obj\n */\n isIndexes(obj) {\n const keyIndexesLevel = ['name', 'value', 'mode'];\n if (obj == null || (Object.keys(obj).length === 0 && obj.constructor === Object))\n return false;\n for (const key of Object.keys(obj)) {\n if (keyIndexesLevel.indexOf(key) === -1)\n return false;\n if (key === 'name' && typeof obj[key] != 'string')\n return false;\n if (key === 'value' && typeof obj[key] != 'string')\n return false;\n if (key === 'mode' && (typeof obj[key] != 'string' || obj[key].toUpperCase() != 'UNIQUE'))\n return false;\n }\n return true;\n }\n /**\n * isTriggers\n * @param obj\n */\n isTriggers(obj) {\n const keyTriggersLevel = ['name', 'timeevent', 'condition', 'logic'];\n if (obj == null || (Object.keys(obj).length === 0 && obj.constructor === Object))\n return false;\n for (const key of Object.keys(obj)) {\n if (keyTriggersLevel.indexOf(key) === -1)\n return false;\n if (key === 'name' && typeof obj[key] != 'string')\n return false;\n if (key === 'timeevent' && typeof obj[key] != 'string')\n return false;\n if (key === 'condition' && typeof obj[key] != 'string')\n return false;\n if (key === 'logic' && typeof obj[key] != 'string')\n return false;\n }\n return true;\n }\n /**\n * IsViews\n * @param obj\n */\n isView(obj) {\n const keyViewLevel = ['name', 'value'];\n if (obj == null || (Object.keys(obj).length === 0 && obj.constructor === Object))\n return false;\n for (const key of Object.keys(obj)) {\n if (keyViewLevel.indexOf(key) === -1)\n return false;\n if (key === 'name' && typeof obj[key] != 'string')\n return false;\n if (key === 'value' && typeof obj[key] != 'string')\n return false;\n }\n return true;\n }\n /**\n * checkSchemaValidity\n * @param schema\n */\n checkSchemaValidity(schema) {\n const msg = 'CheckSchemaValidity';\n for (let i = 0; i < schema.length; i++) {\n const sch = {};\n const keys = Object.keys(schema[i]);\n if (keys.includes('column')) {\n sch.column = schema[i].column;\n }\n if (keys.includes('value')) {\n sch.value = schema[i].value;\n }\n if (keys.includes('foreignkey')) {\n sch.foreignkey = schema[i].foreignkey;\n }\n if (keys.includes('constraint')) {\n sch.constraint = schema[i].constraint;\n }\n const isValid = this.isSchema(sch);\n if (!isValid) {\n throw new Error(`${msg} schema[${i}] not valid`);\n }\n }\n return;\n }\n /**\n * checkIndexesSchemaValidity\n * @param indexes\n */\n checkIndexesValidity(indexes) {\n const msg = 'CheckIndexesValidity';\n for (let i = 0; i < indexes.length; i++) {\n const index = {};\n const keys = Object.keys(indexes[i]);\n if (keys.includes('value')) {\n index.value = indexes[i].value;\n }\n if (keys.includes('name')) {\n index.name = indexes[i].name;\n }\n if (keys.includes('mode')) {\n index.mode = indexes[i].mode;\n }\n const isValid = this.isIndexes(index);\n if (!isValid) {\n throw new Error(`${msg} indexes[${i}] not valid`);\n }\n }\n return;\n }\n /**\n * checkTriggersValidity\n * @param triggers\n */\n checkTriggersValidity(triggers) {\n const msg = 'CheckTriggersValidity';\n for (let i = 0; i < triggers.length; i++) {\n const trigger = {};\n const keys = Object.keys(triggers[i]);\n if (keys.includes('logic')) {\n trigger.logic = triggers[i].logic;\n }\n if (keys.includes('name')) {\n trigger.name = triggers[i].name;\n }\n if (keys.includes('timeevent')) {\n trigger.timeevent = triggers[i].timeevent;\n }\n if (keys.includes('condition')) {\n trigger.condition = triggers[i].condition;\n }\n const isValid = this.isTriggers(trigger);\n if (!isValid) {\n throw new Error(`${msg} triggers[${i}] not valid`);\n }\n }\n return;\n }\n /**\n * checkViewsValidity\n * @param views\n */\n checkViewsValidity(views) {\n const msg = 'CheckViewsValidity';\n for (let i = 0; i < views.length; i++) {\n const view = {};\n const keys = Object.keys(views[i]);\n if (keys.includes('value')) {\n view.value = views[i].value;\n }\n if (keys.includes('name')) {\n view.name = views[i].name;\n }\n const isValid = this.isView(view);\n if (!isValid) {\n throw new Error(`${msg} views[${i}] not valid`);\n }\n }\n return;\n }\n /**\n * CreateView\n * @param mDB\n * @param table\n */\n createView(mDB, view) {\n const msg = 'CreateView';\n const stmt = `CREATE VIEW IF NOT EXISTS ${view.name} AS ${view.value};`;\n try {\n const results = this.sqliteUtil.execute(mDB, stmt, true, true);\n if (results.changes < 0) {\n throw new Error(`${msg} ${view.name} failed`);\n }\n return results;\n }\n catch (err) {\n throw new Error(`${msg} ${err}`);\n }\n }\n}\nexports.UtilsJson = UtilsJson;\n//# sourceMappingURL=utilsJson.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ExportToJson = void 0;\nconst utilsSQLite_1 = require(\"../utilsSQLite\");\nconst utilsJson_1 = require(\"./utilsJson\");\nclass ExportToJson {\n constructor() {\n this.sqliteUtil = new utilsSQLite_1.UtilsSQLite();\n this.jsonUtil = new utilsJson_1.UtilsJson();\n }\n /**\n * CreateExportObject\n * @param mDB\n * @param sqlObj\n */\n createExportObject(mDB, sqlObj) {\n const msg = 'CreateExportObject';\n const retObj = {};\n let tables = [];\n let views = [];\n let errmsg = '';\n try {\n // get View's name\n views = this.getViewsName(mDB);\n // get Table's name\n const resTables = this.getTablesNameSQL(mDB);\n if (resTables.length === 0) {\n throw new Error(`${msg} table's names failed`);\n }\n else {\n const isTable = this.jsonUtil.isTableExists(mDB, true, 'sync_table');\n if (!isTable && sqlObj.mode === 'partial') {\n throw new Error(`${msg} No sync_table available`);\n }\n switch (sqlObj.mode) {\n case 'partial': {\n tables = this.getTablesPartial(mDB, resTables);\n break;\n }\n case 'full': {\n tables = this.getTablesFull(mDB, resTables);\n break;\n }\n default: {\n errmsg = `${msg} expMode ${sqlObj.mode} not defined`;\n break;\n }\n }\n if (errmsg.length > 0) {\n throw new Error(errmsg);\n }\n if (tables.length > 0) {\n retObj.database = sqlObj.database;\n retObj.version = sqlObj.version;\n retObj.encrypted = sqlObj.encrypted;\n retObj.mode = sqlObj.mode;\n retObj.tables = tables;\n if (views.length > 0) {\n retObj.views = views;\n }\n }\n return retObj;\n }\n }\n catch (err) {\n throw new Error(`${msg} ${err}`);\n }\n }\n /**\n * GetTablesNameSQL\n * @param mDb\n */\n getTablesNameSQL(mDb) {\n const msg = 'GetTablesNameSQL';\n let sql = 'SELECT name,sql FROM sqlite_master WHERE ';\n sql += \"type='table' AND name NOT LIKE 'sync_table' \";\n sql += \"AND name NOT LIKE '_temp_%' \";\n sql += \"AND name NOT LIKE 'sqlite_%';\";\n let retQuery = [];\n try {\n retQuery = this.sqliteUtil.queryAll(mDb, sql, [], true);\n return retQuery;\n }\n catch (err) {\n throw new Error(`${msg} ${err}`);\n }\n }\n getLastExportDate(mDb) {\n const msg = 'GetLastExportDate';\n let retDate = -1;\n try {\n // get the last sync date\n const stmt = `SELECT sync_date FROM sync_table WHERE id = ?;`;\n const row = this.sqliteUtil.queryOne(mDb, stmt, [2], true);\n if (row != null) {\n const key = Object.keys(row)[0];\n retDate = row[key];\n }\n return retDate;\n }\n catch (err) {\n throw new Error(`${msg} ${err}`);\n }\n }\n /**\n * SetLastExportDate\n * @param mDb\n * @param lastExportedDate\n * @returns\n */\n setLastExportDate(mDb, lastExportedDate) {\n const msg = 'SetLastExportDate';\n try {\n const isTable = this.jsonUtil.isTableExists(mDb, true, 'sync_table');\n if (!isTable) {\n throw new Error(`${msg} No sync_table available`);\n }\n const sDate = Math.round(new Date(lastExportedDate).getTime() / 1000);\n let stmt = '';\n if (this.getLastExportDate(mDb) > 0) {\n stmt = `UPDATE sync_table SET sync_date = ${sDate} WHERE id = 2;`;\n }\n else {\n stmt = `INSERT INTO sync_table (sync_date) VALUES (${sDate});`;\n }\n const results = this.sqliteUtil.execute(mDb, stmt, false, true);\n if (results.changes < 0) {\n return { result: false, message: `${msg} failed` };\n }\n else {\n return { result: true };\n }\n }\n catch (err) {\n return {\n result: false,\n message: `${msg} ${err.message}`,\n };\n }\n }\n delExportedRows(mDb) {\n const msg = 'DelExportedRows';\n let lastExportDate;\n try {\n // check if synchronization table exists\n const isTable = this.jsonUtil.isTableExists(mDb, true, 'sync_table');\n if (!isTable) {\n throw new Error(`${msg} No sync_table available`);\n }\n // get the last export date\n lastExportDate = this.getLastExportDate(mDb);\n if (lastExportDate < 0) {\n throw new Error(`${msg} no last exported date available`);\n }\n // get the table' name list\n const resTables = this.sqliteUtil.getTablesNames(mDb);\n if (resTables.length === 0) {\n throw new Error(`${msg} No table's names returned`);\n }\n // Loop through the tables\n for (const table of resTables) {\n // define the delete statement\n const delStmt = `DELETE FROM ${table}\n WHERE sql_deleted = 1 AND last_modified < ${lastExportDate};`;\n const results = this.sqliteUtil.prepareRun(mDb, delStmt, [], true, 'no');\n if (results.lastId < 0) {\n throw new Error(`${msg} lastId < 0`);\n }\n }\n return;\n }\n catch (err) {\n throw new Error(`${msg} failed: ${err.message}`);\n }\n }\n /**\n * GetViewsNameSQL\n * @param mDb\n */\n getViewsName(mDb) {\n const views = [];\n let sql = 'SELECT name,sql FROM sqlite_master WHERE ';\n sql += \"type='view' AND name NOT LIKE 'sqlite_%';\";\n let retQuery = [];\n try {\n retQuery = this.sqliteUtil.queryAll(mDb, sql, [], true);\n for (const query of retQuery) {\n const view = {};\n view.name = query.name;\n view.value = query.sql.substring(query.sql.indexOf('AS ') + 3);\n views.push(view);\n }\n return views;\n }\n catch (err) {\n throw new Error(`getViewsName: ${err}`);\n }\n }\n /**\n * GetSyncDate\n * @param mDb\n */\n getSyncDate(mDb) {\n const msg = 'GetSyncDate';\n let retDate = -1;\n // get the last sync date\n const stmt = `SELECT sync_date FROM sync_table WHERE id = ?;`;\n const row = this.sqliteUtil.queryOne(mDb, stmt, [1], true);\n if (row != null) {\n const key = Object.keys(row)[0];\n retDate = row[key];\n return retDate;\n }\n else {\n throw new Error(`${msg} no syncDate`);\n }\n }\n /**\n * GetTablesFull\n * @param mDb\n * @param resTables\n */\n getTablesFull(mDb, resTables) {\n const msg = 'GetTablesFull';\n const tables = [];\n let errmsg = '';\n try {\n // Loop through the tables\n for (const rTable of resTables) {\n let tableName;\n let sqlStmt;\n if (rTable.name) {\n tableName = rTable.name;\n }\n else {\n errmsg = `${msg} no name`;\n break;\n }\n if (rTable.sql) {\n sqlStmt = rTable.sql;\n }\n else {\n errmsg = `${msg} no sql`;\n break;\n }\n const table = {};\n // create Table's Schema\n const schema = this.getSchema(sqlStmt);\n if (schema.length === 0) {\n errmsg = `${msg} no Schema returned`;\n break;\n }\n // check schema validity\n this.jsonUtil.checkSchemaValidity(schema);\n // create Table's indexes if any\n const indexes = this.getIndexes(mDb, tableName);\n if (indexes.length > 0) {\n // check indexes validity\n this.jsonUtil.checkIndexesValidity(indexes);\n }\n // create Table's triggers if any\n const triggers = this.getTriggers(mDb, tableName);\n if (triggers.length > 0) {\n // check triggers validity\n this.jsonUtil.checkTriggersValidity(triggers);\n }\n // create Table's Data\n const query = `SELECT * FROM ${tableName};`;\n const values = this.jsonUtil.getValues(mDb, query, tableName);\n table.name = tableName;\n if (schema.length > 0) {\n table.schema = schema;\n }\n else {\n errmsg = `${msg} must contain schema`;\n break;\n }\n if (indexes.length > 0) {\n table.indexes = indexes;\n }\n if (triggers.length > 0) {\n table.triggers = triggers;\n }\n if (values.length > 0) {\n table.values = values;\n }\n if (Object.keys(table).length <= 1) {\n errmsg = `${msg} table ${tableName} is not a jsonTable`;\n break;\n }\n tables.push(table);\n }\n if (errmsg.length > 0) {\n throw new Error(errmsg);\n }\n return tables;\n }\n catch (err) {\n throw new Error(`${msg} ${err}`);\n }\n }\n /**\n * GetSchema\n * @param mDb\n * @param sqlStmt\n * @param tableName\n */\n getSchema(sqlStmt /*,tableName: string,*/) {\n const msg = 'GetSchema';\n const schema = [];\n // take the substring between parenthesis\n const openPar = sqlStmt.indexOf('(');\n const closePar = sqlStmt.lastIndexOf(')');\n let sstr = sqlStmt.substring(openPar + 1, closePar);\n // check if there is other parenthesis and replace the ',' by '§'\n try {\n sstr = this.modEmbeddedParentheses(sstr);\n const sch = sstr.split(',');\n // for each element of the array split the\n // first word as key\n for (const sc of sch) {\n const row = [];\n const scht = sc.replace(/\\n/g, '').trim();\n row[0] = scht.substring(0, scht.indexOf(' '));\n row[1] = scht.substring(scht.indexOf(' ') + 1);\n const jsonRow = {};\n switch (row[0].toUpperCase()) {\n case 'FOREIGN': {\n const oPar = scht.indexOf('(');\n const cPar = scht.indexOf(')');\n const fk = scht.substring(oPar + 1, cPar);\n const fknames = fk.split('§');\n row[0] = fknames.join(',');\n row[0] = row[0].replace(/, /g, ',');\n row[1] = scht.substring(cPar + 2);\n jsonRow['foreignkey'] = row[0];\n break;\n }\n case 'PRIMARY':\n case 'UNIQUE': {\n const prefix = row[0].toUpperCase() === 'PRIMARY' ? 'CPK_' : 'CUN_';\n const oPar = scht.indexOf('(');\n const cPar = scht.indexOf(')');\n const pk = scht.substring(oPar + 1, cPar);\n const pknames = pk.split('§');\n row[0] = prefix + pknames.join('_');\n row[0] = row[0].replace(/_ /g, '_');\n row[1] = scht;\n jsonRow['constraint'] = row[0];\n break;\n }\n case 'CONSTRAINT': {\n const tRow = [];\n const row1t = row[1].trim();\n tRow[0] = row1t.substring(0, row1t.indexOf(' '));\n tRow[1] = row1t.substring(row1t.indexOf(' ') + 1);\n row[0] = tRow[0];\n jsonRow['constraint'] = row[0];\n row[1] = tRow[1];\n break;\n }\n default: {\n jsonRow['column'] = row[0];\n break;\n }\n }\n jsonRow['value'] = row[1].replace(/§/g, ',');\n schema.push(jsonRow);\n }\n return schema;\n }\n catch (err) {\n throw new Error(`${msg} ${err}`);\n }\n }\n /**\n * GetIndexes\n * @param mDb\n * @param sqlStmt\n * @param tableName\n */\n getIndexes(mDb, tableName) {\n const msg = 'GetIndexes';\n const indexes = [];\n let errmsg = '';\n try {\n let stmt = 'SELECT name,tbl_name,sql FROM sqlite_master WHERE ';\n stmt += `type = 'index' AND tbl_name = '${tableName}' `;\n stmt += `AND sql NOTNULL;`;\n const retIndexes = this.sqliteUtil.queryAll(mDb, stmt, [], true);\n if (retIndexes.length > 0) {\n for (const rIndex of retIndexes) {\n const keys = Object.keys(rIndex);\n if (keys.length === 3) {\n if (rIndex['tbl_name'] === tableName) {\n const sql = rIndex['sql'];\n const mode = sql.includes('UNIQUE') ? 'UNIQUE' : '';\n const oPar = sql.lastIndexOf('(');\n const cPar = sql.lastIndexOf(')');\n const index = {};\n index.name = rIndex['name'];\n index.value = sql.slice(oPar + 1, cPar);\n if (mode.length > 0)\n index.mode = mode;\n indexes.push(index);\n }\n else {\n errmsg = `${msg} Table ${tableName} doesn't match`;\n break;\n }\n }\n else {\n errmsg = `${msg} Table ${tableName} creating indexes`;\n break;\n }\n }\n if (errmsg.length > 0) {\n throw new Error(errmsg);\n }\n }\n return indexes;\n }\n catch (err) {\n throw new Error(`${msg} ${err}`);\n }\n }\n /**\n * GetTriggers\n * @param mDb\n * @param sqlStmt\n * @param tableName\n */\n getTriggers(mDb, tableName) {\n const msg = 'GetTriggers';\n const triggers = [];\n try {\n let stmt = 'SELECT name,tbl_name,sql FROM sqlite_master WHERE ';\n stmt += `type = 'trigger' AND tbl_name = '${tableName}' `;\n stmt += `AND sql NOT NULL;`;\n const retTriggers = this.sqliteUtil.queryAll(mDb, stmt, [], true);\n if (retTriggers.length > 0) {\n for (const rTrg of retTriggers) {\n const keys = Object.keys(rTrg);\n if (keys.length === 3) {\n if (rTrg['tbl_name'] === tableName) {\n const sql = rTrg['sql'];\n const name = rTrg['name'];\n let sqlArr = sql.split(name);\n if (sqlArr.length != 2) {\n throw new Error(`${msg} sql split name does not return 2 values`);\n }\n if (!sqlArr[1].includes(tableName)) {\n throw new Error(`${msg} sql split does not contains ${tableName}`);\n }\n const timeEvent = sqlArr[1].split(tableName, 1)[0].trim();\n sqlArr = sqlArr[1].split(timeEvent + ' ' + tableName);\n if (sqlArr.length != 2) {\n throw new Error(`${msg} sql split tableName does not return 2 values`);\n }\n let condition = '';\n let logic = '';\n if (sqlArr[1].trim().substring(0, 5).toUpperCase() !== 'BEGIN') {\n sqlArr = sqlArr[1].trim().split('BEGIN');\n if (sqlArr.length != 2) {\n throw new Error(`${msg} sql split BEGIN does not return 2 values`);\n }\n condition = sqlArr[0].trim();\n logic = 'BEGIN' + sqlArr[1];\n }\n else {\n logic = sqlArr[1].trim();\n }\n const trigger = {};\n trigger.name = name;\n trigger.logic = logic;\n if (condition.length > 0)\n trigger.condition = condition;\n trigger.timeevent = timeEvent;\n triggers.push(trigger);\n }\n else {\n throw new Error(`${msg} Table ${tableName} doesn't match`);\n }\n }\n else {\n throw new Error(`${msg} Table ${tableName} creating indexes`);\n }\n }\n }\n return triggers;\n }\n catch (err) {\n throw new Error(`${msg} ${err}`);\n }\n }\n /**\n * GetTablesPartial\n * @param mDb\n * @param resTables\n */\n getTablesPartial(mDb, resTables) {\n const msg = 'GetTablesPartial';\n const tables = [];\n let modTables = {};\n let syncDate = 0;\n let modTablesKeys = [];\n let errmsg = '';\n try {\n // Get the syncDate and the Modified Tables\n const partialModeData = this.getPartialModeData(mDb, resTables);\n if (Object.keys(partialModeData).includes('syncDate')) {\n syncDate = partialModeData.syncDate;\n }\n if (Object.keys(partialModeData).includes('modTables')) {\n modTables = partialModeData.modTables;\n modTablesKeys = Object.keys(modTables);\n }\n // Loop trough tables\n for (const rTable of resTables) {\n let tableName = '';\n let sqlStmt = '';\n if (rTable.name) {\n tableName = rTable.name;\n }\n else {\n errmsg = `${msg} no name`;\n break;\n }\n if (rTable.sql) {\n sqlStmt = rTable.sql;\n }\n else {\n errmsg = `${msg} no sql`;\n break;\n }\n if (modTablesKeys.length == 0 || modTablesKeys.indexOf(tableName) === -1 || modTables[tableName] == 'No') {\n continue;\n }\n const table = {};\n let schema = [];\n let indexes = [];\n let triggers = [];\n table.name = rTable;\n if (modTables[table.name] === 'Create') {\n // create Table's Schema\n schema = this.getSchema(sqlStmt);\n if (schema.length > 0) {\n // check schema validity\n this.jsonUtil.checkSchemaValidity(schema);\n }\n // create Table's indexes if any\n indexes = this.getIndexes(mDb, tableName);\n if (indexes.length > 0) {\n // check indexes validity\n this.jsonUtil.checkIndexesValidity(indexes);\n }\n // create Table's triggers if any\n triggers = this.getTriggers(mDb, tableName);\n if (triggers.length > 0) {\n // check triggers validity\n this.jsonUtil.checkTriggersValidity(triggers);\n }\n }\n // create Table's Data\n let query = '';\n if (modTables[tableName] === 'Create') {\n query = `SELECT * FROM ${tableName};`;\n }\n else {\n query = `SELECT * FROM ${tableName} ` + `WHERE last_modified > ${syncDate};`;\n }\n const values = this.jsonUtil.getValues(mDb, query, tableName);\n // check the table object validity\n table.name = tableName;\n if (schema.length > 0) {\n table.schema = schema;\n }\n if (indexes.length > 0) {\n table.indexes = indexes;\n }\n if (triggers.length > 0) {\n table.triggers = triggers;\n }\n if (values.length > 0) {\n table.values = values;\n }\n if (Object.keys(table).length <= 1) {\n errmsg = `${msg} table ${tableName} is not a jsonTable`;\n break;\n }\n tables.push(table);\n }\n if (errmsg.length > 0) {\n throw new Error(errmsg);\n }\n return tables;\n }\n catch (err) {\n throw new Error(`${msg} ${err}`);\n }\n }\n /**\n * GetPartialModeData\n * @param mDb\n * @param resTables\n */\n getPartialModeData(mDb, resTables) {\n const msg = 'GetPartialModeData';\n const retData = {};\n try {\n // get the synchronization date\n const syncDate = this.getSyncDate(mDb);\n if (syncDate <= 0) {\n throw new Error(`${msg} no syncDate`);\n }\n // get the tables which have been updated\n // since last synchronization\n const modTables = this.getTablesModified(mDb, resTables, syncDate);\n if (modTables.length <= 0) {\n throw new Error(`${msg} no modTables`);\n }\n retData.syncDate = syncDate;\n retData.modTables = modTables;\n return retData;\n }\n catch (err) {\n throw new Error(`${msg} ${err}`);\n }\n }\n getTablesModified(mDb, tables, syncDate) {\n const msg = 'GetTablesModified';\n let errmsg = '';\n try {\n const retModified = {};\n for (const rTable of tables) {\n let mode;\n // get total count of the table\n let stmt = 'SELECT count(*) AS tcount ';\n stmt += `FROM ${rTable.name};`;\n let retQuery = this.sqliteUtil.queryAll(mDb, stmt, [], true);\n if (retQuery.length != 1) {\n errmsg = `${msg} total count not returned`;\n break;\n }\n const totalCount = retQuery[0]['tcount'];\n // get total count of modified since last sync\n stmt = 'SELECT count(*) AS mcount FROM ';\n stmt += `${rTable.name} WHERE last_modified > `;\n stmt += `${syncDate};`;\n retQuery = this.sqliteUtil.queryAll(mDb, stmt, [], true);\n if (retQuery.length != 1)\n break;\n const totalModifiedCount = retQuery[0]['mcount'];\n if (totalModifiedCount === 0) {\n mode = 'No';\n }\n else if (totalCount === totalModifiedCount) {\n mode = 'Create';\n }\n else {\n mode = 'Modified';\n }\n const key = rTable.name;\n retModified[key] = mode;\n }\n if (errmsg.length > 0) {\n throw new Error(errmsg);\n }\n return retModified;\n }\n catch (err) {\n throw new Error(`${msg} ${err}`);\n }\n }\n modEmbeddedParentheses(sstr) {\n const msg = 'ModEmbeddedParentheses';\n const oParArray = this.indexOfChar(sstr, '(');\n const cParArray = this.indexOfChar(sstr, ')');\n if (oParArray.length != cParArray.length) {\n throw new Error(`${msg} Not same number of '(' & ')'`);\n }\n if (oParArray.length === 0) {\n return sstr;\n }\n let resStmt = sstr.substring(0, oParArray[0] - 1);\n for (let i = 0; i < oParArray.length; i++) {\n let str;\n if (i < oParArray.length - 1) {\n if (oParArray[i + 1] < cParArray[i]) {\n str = sstr.substring(oParArray[i] - 1, cParArray[i + 1]);\n i++;\n }\n else {\n str = sstr.substring(oParArray[i] - 1, cParArray[i]);\n }\n }\n else {\n str = sstr.substring(oParArray[i] - 1, cParArray[i]);\n }\n const newS = str.replace(/,/g, '§');\n resStmt += newS;\n if (i < oParArray.length - 1) {\n resStmt += sstr.substring(cParArray[i], oParArray[i + 1] - 1);\n }\n }\n resStmt += sstr.substring(cParArray[cParArray.length - 1], sstr.length);\n return resStmt;\n }\n indexOfChar(str, char) {\n const tmpArr = [...str];\n char = char.toLowerCase();\n return tmpArr.reduce((results, elem, idx) => (elem.toLowerCase() === char ? [...results, idx] : results), []);\n }\n}\nexports.ExportToJson = ExportToJson;\n//# sourceMappingURL=exportToJson.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.UtilsDrop = void 0;\nconst utilsSQLite_1 = require(\"./utilsSQLite\");\nclass UtilsDrop {\n constructor() {\n this.sqliteUtil = new utilsSQLite_1.UtilsSQLite();\n }\n /**\n * DropElements\n * @param db\n * @param type [\"table\",\"index\",\"trigger\"]\n */\n dropElements(db, type) {\n let msg = '';\n let stmt1 = `AND name NOT LIKE ('sqlite_%')`;\n switch (type) {\n case 'index':\n msg = 'DropIndexes';\n break;\n case 'trigger':\n msg = 'DropTriggers';\n break;\n case 'table':\n msg = 'DropTables';\n stmt1 += ` AND name NOT IN ('sync_table')`;\n break;\n case 'view':\n msg = 'DropViews';\n break;\n default:\n throw new Error(`DropElements: ${type} ` + 'not found');\n }\n // get the element's names\n let stmt = 'SELECT name FROM sqlite_master WHERE ';\n stmt += `type = '${type}' ${stmt1};`;\n try {\n const elements = this.sqliteUtil.queryAll(db, stmt, [], true);\n if (elements.length > 0) {\n const upType = type.toUpperCase();\n const statements = [];\n for (const elem of elements) {\n let stmt = `DROP ${upType} IF EXISTS `;\n stmt += `${elem.name};`;\n statements.push(stmt);\n }\n for (const stmt of statements) {\n const results = this.sqliteUtil.prepareRun(db, stmt, [], false, 'no');\n if (results.lastId < 0) {\n throw new Error(`${msg}: lastId < 0`);\n }\n }\n }\n return;\n }\n catch (err) {\n throw new Error(`${msg}: ${err}`);\n }\n }\n /**\n * DropAll\n * Drop all database's elements\n * @param db\n */\n dropAll(db) {\n try {\n // drop tables\n this.dropElements(db, 'table');\n // drop indexes\n this.dropElements(db, 'index');\n // drop triggers\n this.dropElements(db, 'trigger');\n // drop views\n this.dropElements(db, 'view');\n // vacuum the database\n this.sqliteUtil.prepareRun(db, 'VACUUM;', [], false, 'no');\n return;\n }\n catch (err) {\n throw new Error(`DropAll: ${err}`);\n }\n }\n /**\n * DropTempTables\n * @param db\n * @param alterTables\n */\n dropTempTables(db, alterTables) {\n const tempTables = Object.keys(alterTables);\n const statements = [];\n for (const tTable of tempTables) {\n let stmt = 'DROP TABLE IF EXISTS ';\n stmt += `_temp_${tTable};`;\n statements.push(stmt);\n }\n try {\n const results = this.sqliteUtil.execute(db, statements.join('\\n'), false, true);\n if (results.changes < 0) {\n throw new Error('DropTempTables: changes < 0');\n }\n return;\n }\n catch (err) {\n throw new Error(`DropTempTables: ${err}`);\n }\n }\n}\nexports.UtilsDrop = UtilsDrop;\n//# sourceMappingURL=utilsDrop.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ImportFromJson = void 0;\nconst utilsDrop_1 = require(\"../utilsDrop\");\nconst utilsSQLite_1 = require(\"../utilsSQLite\");\nconst utilsJson_1 = require(\"./utilsJson\");\nclass ImportFromJson {\n constructor() {\n this.jsonUtil = new utilsJson_1.UtilsJson();\n this.sqliteUtil = new utilsSQLite_1.UtilsSQLite();\n this.dropUtil = new utilsDrop_1.UtilsDrop();\n }\n /**\n * CreateDatabaseSchema\n * @param mDB\n * @param jsonData\n */\n createDatabaseSchema(mDB, jsonData) {\n let changes = -1;\n const version = jsonData.version;\n try {\n // set User Version PRAGMA\n this.sqliteUtil.setVersion(mDB.database, version);\n // DROP ALL when mode=\"full\"\n if (jsonData.mode === 'full') {\n this.dropUtil.dropAll(mDB.database);\n }\n // create database schema\n changes = this.jsonUtil.createSchema(mDB, jsonData);\n return changes;\n }\n catch (err) {\n throw new Error('CreateDatabaseSchema: ' + `${err}`);\n }\n }\n createTablesData(mDB, jsonData) {\n const msg = 'CreateTablesData';\n let results;\n let isValue = false;\n let message = '';\n let initChanges = -1;\n let changes = -1;\n try {\n initChanges = this.sqliteUtil.dbChanges(mDB.database);\n // start a transaction\n this.sqliteUtil.beginTransaction(mDB.database, true);\n mDB.setIsTransActive(true);\n }\n catch (err) {\n throw new Error(`${msg} ${err}`);\n }\n for (const jTable of jsonData.tables) {\n if (jTable.values != null && jTable.values.length >= 1) {\n // Create the table's data\n try {\n results = this.jsonUtil.createDataTable(mDB.database, jTable, jsonData.mode);\n if (results.lastId < 0)\n break;\n isValue = true;\n }\n catch (err) {\n message = err;\n isValue = false;\n break;\n }\n }\n }\n if (isValue) {\n try {\n this.sqliteUtil.commitTransaction(mDB.database, true);\n mDB.setIsTransActive(false);\n changes = this.sqliteUtil.dbChanges(mDB.database) - initChanges;\n return changes;\n }\n catch (err) {\n throw new Error(`${msg} ${err}`);\n }\n }\n else {\n if (message.length > 0) {\n try {\n this.sqliteUtil.rollbackTransaction(mDB.database, true);\n mDB.setIsTransActive(false);\n throw new Error(`${msg} ${message}`);\n }\n catch (err) {\n throw new Error(`${msg} ${err}: ${message}`);\n }\n }\n else {\n // case were no values given\n return 0;\n }\n }\n }\n /**\n * CreateViews\n * @param mDB\n * @param jsonData\n */\n createViews(mDB, jsonData) {\n const msg = 'CreateViews';\n let isView = false;\n let message = '';\n let results;\n try {\n // start a transaction\n this.sqliteUtil.beginTransaction(mDB.database, true);\n mDB.setIsTransActive(true);\n }\n catch (err) {\n throw new Error(`${msg} ${err}`);\n }\n for (const jView of jsonData.views) {\n if (jView.value != null) {\n // Create the view\n try {\n results = this.jsonUtil.createView(mDB.database, jView);\n isView = true;\n }\n catch (err) {\n message = err;\n isView = false;\n break;\n }\n }\n }\n if (isView) {\n try {\n this.sqliteUtil.commitTransaction(mDB.database, true);\n mDB.setIsTransActive(false);\n return results.changes;\n }\n catch (err) {\n throw new Error(`${msg} ${err}`);\n }\n }\n else {\n if (message.length > 0) {\n try {\n this.sqliteUtil.rollbackTransaction(mDB.database, true);\n mDB.setIsTransActive(false);\n throw new Error(`${msg} ${message}`);\n }\n catch (err) {\n throw new Error(`${msg} ${err}: ${message}`);\n }\n }\n else {\n // case were no views given\n return 0;\n }\n }\n }\n}\nexports.ImportFromJson = ImportFromJson;\n//# sourceMappingURL=importFromJson.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.UtilsSecret = void 0;\nconst GlobalSQLite_1 = require(\"../GlobalSQLite\");\nconst utilsFile_1 = require(\"./utilsFile\");\nconst utilsSQLite_1 = require(\"./utilsSQLite\");\nclass UtilsSecret {\n constructor() {\n this.globalUtil = new GlobalSQLite_1.GlobalSQLite();\n this.sqliteUtil = new utilsSQLite_1.UtilsSQLite();\n this.fileUtil = new utilsFile_1.UtilsFile();\n this.storage = require('electron-json-storage');\n }\n isPassphraseValid(passphrase) {\n let isValid = false;\n const secret = this.getPassphrase();\n if (secret === passphrase) {\n isValid = true;\n }\n return isValid;\n }\n isSecretStored() {\n const secret = this.getPassphrase();\n if (secret.length <= 0)\n return false;\n return true;\n }\n setEncryptSecret(passphrase) {\n try {\n let oldpassphrase = this.getPassphrase();\n if (oldpassphrase.length > 0) {\n throw new Error(`setEncryptSecret: passphrase already stored`);\n }\n else {\n oldpassphrase = this.globalUtil != null ? this.globalUtil.secret : '';\n if (oldpassphrase.length <= 0) {\n throw new Error(`setEncryptSecret: globalUtil is null`);\n }\n // check if some databases were encrypted with the initial secret 'sqlite secret'\n this.changeDatabaseSecret(oldpassphrase, passphrase).then(() => {\n this.storage.set('userData', { passphrase: passphrase }, function (error) {\n if (error)\n throw new Error(`setEncryptSecret: ${error.message}`);\n });\n return;\n });\n }\n }\n catch (err) {\n throw new Error(`setEncryptSecret: ${err}`);\n }\n }\n changeEncryptSecret(oldpassphrase, passphrase) {\n try {\n // check if some databases were encrypted with the oldpassphrase\n this.changeDatabaseSecret(oldpassphrase, passphrase).then(() => {\n this.setPassphrase(passphrase);\n });\n }\n catch (err) {\n throw new Error(`changeEncryptSecret: ${err}`);\n }\n }\n clearEncryptSecret() {\n try {\n let oldpassphrase = this.getPassphrase();\n if (oldpassphrase.length <= 0) {\n oldpassphrase = this.globalUtil.secret;\n }\n // check if some databases were encrypted with the oldpassphrase\n this.changeDatabaseSecret(oldpassphrase, '').then(() => {\n this.removePassphrase();\n });\n }\n catch (err) {\n throw new Error(`clearEncryptSecret: ${err}`);\n }\n }\n checkEncryptSecret(passphrase) {\n const storedPassphrase = this.getPassphrase();\n if (storedPassphrase.length <= 0) {\n throw new Error(`checkEncryptSecret: No passphrase stored`);\n }\n if (storedPassphrase === passphrase) {\n return true;\n }\n else {\n return false;\n }\n }\n async changeDatabaseSecret(oldpassphrase, newpassphrase) {\n try {\n // get the database folder\n const pathDatabase = this.fileUtil.getDatabasesPath();\n // get the list of databases\n const files = await this.fileUtil.getFileList(pathDatabase);\n files.forEach(async (dbName) => {\n const filePath = this.fileUtil.getFilePath(dbName);\n const isEncrypt = await this.sqliteUtil.isDBEncrypted(filePath);\n if (isEncrypt) {\n this.sqliteUtil.changePassword(filePath, oldpassphrase, newpassphrase);\n }\n });\n return;\n }\n catch (err) {\n throw new Error(`changeDatabaseSecret: ${err}`);\n }\n }\n getPassphrase() {\n const data = this.storage.getSync('userData');\n const keys = Object.keys(data);\n if (data == null || keys.length <= 0)\n return '';\n if (Object.keys(data).includes('passphrase')) {\n return data.passphrase;\n }\n else {\n return '';\n }\n }\n setPassphrase(passphrase) {\n const data = this.storage.getSync('userData');\n data.passphrase = passphrase;\n this.storage.set('userData', data, function (error) {\n if (error)\n throw new Error(`setPassphrase: ${error.message}`);\n });\n }\n removePassphrase() {\n const data = this.storage.getSync('userData');\n delete data.passphrase;\n this.storage.set('userData', data, function (error) {\n if (error)\n throw new Error(`removePassphrase: ${error.message}`);\n });\n }\n}\nexports.UtilsSecret = UtilsSecret;\n//# sourceMappingURL=utilsSecret.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.UtilsJsonEncryption = void 0;\nconst utilsSecret_1 = require(\"../utilsSecret\");\nclass UtilsJsonEncryption {\n constructor() {\n this.fileSecret = new utilsSecret_1.UtilsSecret();\n this.SALT = 'jeep_capacitor_sqlite';\n this.Crypto = require('crypto');\n this.CryptoJS = require('crypto-js');\n }\n /**\n * deriveKeyFromPassphrase\n * Function to derive a symmetric key from passphrase and salt using PBKDF2\n * @param passphrase\n * @param salt\n * @returns\n */\n deriveKeyFromPassphrase(passphrase, salt) {\n const iterations = 10000; // Recommended number of iterations for PBKDF2\n const keyLength = 32;\n const key = this.Crypto.pbkdf2Sync(passphrase, salt, iterations, keyLength, 'sha256');\n const keyHex = Buffer.from(key).toString('hex');\n return keyHex;\n }\n /**\n * encryptJSONObject\n * Function to encrypt JSON object with AES and return as Base64\n * @param jsonObj\n * @returns\n */\n encryptJSONObject(jsonObj) {\n const jsonString = JSON.stringify(jsonObj);\n // get the passphrase\n const passphrase = this.fileSecret.getPassphrase();\n // derived a combined key from passphrase and salt\n const key = this.deriveKeyFromPassphrase(passphrase, this.SALT);\n const encrypted = this.CryptoJS.AES.encrypt(jsonString, key).toString();\n const encryptedBase64 = Buffer.from(encrypted).toString('base64');\n return encryptedBase64;\n }\n /**\n * decryptJSONObject\n * Function to decrypt AES encrypted JSON object from Base64\n * @param encryptedBase64\n * @returns\n */\n decryptJSONObject(encryptedBase64) {\n const encryptedData = Buffer.from(encryptedBase64, 'base64').toString();\n // get the passphrase\n const passphrase = this.fileSecret.getPassphrase();\n // derived a combined key from passphrase and salt\n const key = this.deriveKeyFromPassphrase(passphrase, this.SALT);\n const bytes = this.CryptoJS.AES.decrypt(encryptedData, key);\n const decryptedString = bytes.toString(this.CryptoJS.enc.Utf8);\n const decryptedObj = JSON.parse(decryptedString);\n return decryptedObj;\n }\n}\nexports.UtilsJsonEncryption = UtilsJsonEncryption;\n//# sourceMappingURL=utilsJsonEncryption.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.UtilsEncryption = void 0;\nconst utilsFile_1 = require(\"./utilsFile\");\nconst utilsSQLite_1 = require(\"./utilsSQLite\");\nclass UtilsEncryption {\n constructor() {\n this.fileUtil = new utilsFile_1.UtilsFile();\n this.sqliteUtil = new utilsSQLite_1.UtilsSQLite();\n }\n /**\n * EncryptDatabase\n * @param pathDB\n * @param password\n */\n async encryptDatabase(pathDB, password) {\n const msg = 'EncryptDatabase: ';\n const retB = this.fileUtil.isPathExists(pathDB);\n if (retB) {\n try {\n const mDB = await this.sqliteUtil.openOrCreateDatabase(pathDB, '', false);\n this.sqliteUtil.pragmaReKey(mDB, '', password);\n this.sqliteUtil.closeDB(mDB);\n return Promise.resolve();\n }\n catch (err) {\n return Promise.reject(new Error(`${msg} ${err.message} `));\n }\n }\n else {\n return Promise.reject(new Error(`${msg}file path ${pathDB} ` + 'does not exist'));\n }\n }\n async decryptDatabase(pathDB, password) {\n const msg = 'DecryptDatabase: ';\n const retB = this.fileUtil.isPathExists(pathDB);\n if (retB) {\n try {\n const mDB = await this.sqliteUtil.openOrCreateDatabase(pathDB, password, false);\n this.sqliteUtil.pragmaReKey(mDB, password, '');\n this.sqliteUtil.closeDB(mDB);\n return Promise.resolve();\n }\n catch (err) {\n return Promise.reject(new Error(`${msg} ${err.message} `));\n }\n }\n else {\n return Promise.reject(new Error(`${msg}file path ${pathDB} ` + 'does not exist'));\n }\n }\n}\nexports.UtilsEncryption = UtilsEncryption;\n//# sourceMappingURL=utilsEncryption.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.UtilsUpgrade = void 0;\nconst utilsSQLite_1 = require(\"./utilsSQLite\");\nclass UtilsUpgrade {\n constructor() {\n this.sqliteUtil = new utilsSQLite_1.UtilsSQLite();\n }\n /**\n * OnUpgrade\n * @param mDB\n * @param vUpgDict\n * @param dbName\n * @param curVersion\n * @param targetVersion\n */\n async onUpgrade(mDB, vUpgDict, curVersion, targetVersion) {\n let changes;\n const sortedKeys = new Int32Array(Object.keys(vUpgDict).map((item) => parseInt(item))).sort();\n for (const versionKey of sortedKeys) {\n if (versionKey > curVersion && versionKey <= targetVersion) {\n const statements = vUpgDict[versionKey].statements;\n if (statements.length === 0) {\n return Promise.reject('onUpgrade: statements not given');\n }\n try {\n // set Foreign Keys Off\n this.sqliteUtil.setForeignKeyConstraintsEnabled(mDB.database, false);\n const initChanges = this.sqliteUtil.dbChanges(mDB.database);\n await this.executeStatementsProcess(mDB, statements);\n this.sqliteUtil.setVersion(mDB.database, versionKey);\n // set Foreign Keys On\n this.sqliteUtil.setForeignKeyConstraintsEnabled(mDB.database, true);\n changes = (await this.sqliteUtil.dbChanges(mDB.database)) - initChanges;\n }\n catch (err) {\n return Promise.reject(`onUpgrade: ${err}`);\n }\n }\n }\n return Promise.resolve(changes);\n }\n /**\n * ExecuteStatementProcess\n * @param mDB\n * @param statements\n */\n async executeStatementsProcess(mDB, statements) {\n try {\n this.sqliteUtil.beginTransaction(mDB.database, true);\n mDB.setIsTransActive(true);\n for (const statement of statements) {\n this.sqliteUtil.execute(mDB.database, statement, false, true);\n }\n this.sqliteUtil.commitTransaction(mDB.database, true);\n mDB.setIsTransActive(false);\n return Promise.resolve();\n }\n catch (err) {\n this.sqliteUtil.rollbackTransaction(mDB.database, true);\n mDB.setIsTransActive(false);\n return Promise.reject(`ExecuteStatementProcess: ${err}`);\n }\n }\n}\nexports.UtilsUpgrade = UtilsUpgrade;\n//# sourceMappingURL=utilsUpgrade.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Database = void 0;\nconst GlobalSQLite_1 = require(\"../GlobalSQLite\");\nconst exportToJson_1 = require(\"./ImportExportJson/exportToJson\");\nconst importFromJson_1 = require(\"./ImportExportJson/importFromJson\");\nconst utilsJson_1 = require(\"./ImportExportJson/utilsJson\");\nconst utilsJsonEncryption_1 = require(\"./ImportExportJson/utilsJsonEncryption\");\nconst UtilsSQL92Compatibility_1 = require(\"./UtilsSQL92Compatibility\");\nconst utilsEncryption_1 = require(\"./utilsEncryption\");\nconst utilsFile_1 = require(\"./utilsFile\");\nconst utilsSQLite_1 = require(\"./utilsSQLite\");\nconst utilsSecret_1 = require(\"./utilsSecret\");\nconst utilsUpgrade_1 = require(\"./utilsUpgrade\");\nclass Database {\n constructor(dbName, encrypted, mode, version, isEncryption, readonly, upgDict, globalUtil) {\n this.jsonEncryptUtil = new utilsJsonEncryption_1.UtilsJsonEncryption();\n this.fileUtil = new utilsFile_1.UtilsFile();\n this.sqliteUtil = new utilsSQLite_1.UtilsSQLite();\n this.jsonUtil = new utilsJson_1.UtilsJson();\n this.globalUtil = new GlobalSQLite_1.GlobalSQLite();\n this.encryptionUtil = new utilsEncryption_1.UtilsEncryption();\n this.secretUtil = new utilsSecret_1.UtilsSecret();\n this.upgradeUtil = new utilsUpgrade_1.UtilsUpgrade();\n this.importFromJsonUtil = new importFromJson_1.ImportFromJson();\n this.exportToJsonUtil = new exportToJson_1.ExportToJson();\n this.upgradeVersionDict = {};\n this.sql92Utils = new UtilsSQL92Compatibility_1.UtilsSQL92Compatibility();\n this.dbName = dbName;\n this._encrypted = encrypted;\n this._mode = mode;\n this._isEncryption = isEncryption;\n this.version = version;\n this.readonly = readonly;\n this.upgradeVersionDict = upgDict;\n this.pathDB = this.fileUtil.getFilePath(dbName);\n this._isDbOpen = false;\n this.isTransactionActive = false;\n this.globalUtil = globalUtil ? globalUtil : new GlobalSQLite_1.GlobalSQLite();\n if (this.pathDB.length === 0)\n throw new Error('Could not generate a path to ' + dbName);\n console.log(`&&& Databases path: ${this.pathDB}`);\n }\n /**\n * IsDBOpen\n * return the database status\n * @param options: capSQLiteOptions\n * @returns boolean\n * @since 0.0.1\n */\n isDBOpen() {\n return this._isDbOpen;\n }\n /**\n * Open\n * open the better-sqlite3 database\n * @returns Promise<boolean>\n */\n async open() {\n this._isDbOpen = false;\n let password = '';\n try {\n if (this._encrypted && (this._mode === 'secret' || this._mode === 'encryption' || this._mode === 'decryption')) {\n password = this.secretUtil.getPassphrase();\n if (password.length <= 0) {\n password = this.globalUtil.secret;\n }\n }\n if (this._mode === 'encryption') {\n await this.encryptionUtil.encryptDatabase(this.pathDB, password);\n }\n if (this._mode === 'decryption') {\n await this.encryptionUtil.decryptDatabase(this.pathDB, password);\n password = '';\n }\n this.database = this.sqliteUtil.openOrCreateDatabase(this.pathDB, password, this.readonly);\n this._isDbOpen = true;\n if (!this.readonly) {\n const curVersion = this.sqliteUtil.getVersion(this.database);\n if (this.version > curVersion && Object.keys(this.upgradeVersionDict).length > 0) {\n try {\n await this.fileUtil.copyFileName(this.dbName, `backup-${this.dbName}`);\n // execute the upgrade flow process\n await this.upgradeUtil.onUpgrade(this, this.upgradeVersionDict, curVersion, this.version);\n // delete the backup database\n await this.fileUtil.deleteFileName(`backup-${this.dbName}`);\n }\n catch (err) {\n // restore the database from backup\n try {\n await this.fileUtil.restoreFileName(this.dbName, 'backup');\n }\n catch (err) {\n throw new Error(`Open: ${err}`);\n }\n }\n }\n }\n return;\n }\n catch (err) {\n if (this._isDbOpen)\n this.sqliteUtil.closeDB(this.database);\n throw new Error(`Open: ${err}`);\n }\n }\n /**\n * Close\n * close better-sqlite3 database\n * @returns Promise<boolean>\n */\n dbClose() {\n try {\n this.ensureDatabaseIsOpen();\n this.sqliteUtil.closeDB(this.database);\n }\n catch (err) {\n throw new Error(`Close failed: ${this.dbName} ${err}`);\n }\n finally {\n this._isDbOpen = false;\n }\n return;\n }\n /**\n * IsTransActive\n * Is Database Transaction Active\n * @returns\n */\n isTransActive() {\n return this.isTransactionActive;\n }\n /**\n * SetIsTransActive\n * Set the Database Transaction to Active\n * @returns\n */\n setIsTransActive(value) {\n this.isTransactionActive = value;\n }\n /**\n * DbBeginTransaction\n * Database Begin Transaction\n * @returns\n */\n dbBeginTransaction() {\n try {\n this.ensureDatabaseIsOpen();\n this.sqliteUtil.beginTransaction(this.database, true);\n this.setIsTransActive(true);\n return 0;\n }\n catch (err) {\n throw new Error(`DbBeginTransaction: ${err}`);\n }\n }\n /**\n * DbCommitTransaction\n * Database Commit Transaction\n * @returns\n */\n dbCommitTransaction() {\n try {\n this.ensureDatabaseIsOpen();\n this.sqliteUtil.commitTransaction(this.database, true);\n this.setIsTransActive(false);\n return 0;\n }\n catch (err) {\n throw new Error(`DbCommitTransaction: ${err}`);\n }\n }\n /**\n * DbRollbackTransaction\n * Database Rollback Transaction\n * @returns\n */\n dbRollbackTransaction() {\n try {\n this.ensureDatabaseIsOpen();\n this.sqliteUtil.rollbackTransaction(this.database, true);\n this.setIsTransActive(false);\n return 0;\n }\n catch (err) {\n throw new Error(`DbCommitTransaction: ${err}`);\n }\n }\n /**\n * ChangeSecret\n * open the @journeyapps/sqlcipher sqlite3 database\n * @returns Promise<void>\n */\n async changeSecret() {\n try {\n if (this._mode === 'encryption') {\n // change the password\n const oPassword = this.globalUtil.secret;\n const nPassword = this.globalUtil.newsecret;\n this.sqliteUtil.changePassword(this.pathDB, oPassword, nPassword);\n }\n return;\n }\n catch (err) {\n throw new Error(`Change secret: ${err}`);\n }\n }\n /**\n * GetVersion\n * get the database version\n * @returns Promise<number>\n */\n getVersion() {\n this.ensureDatabaseIsOpen();\n try {\n const currentVersion = this.sqliteUtil.getVersion(this.database);\n return currentVersion;\n }\n catch (err) {\n if (this._isDbOpen)\n this.sqliteUtil.closeDB(this.database);\n throw new Error(`getVersion: ${err}`);\n }\n }\n /**\n * DeleteDB\n * delete a database\n * @param dbName: string\n * @returns Promise<boolean>\n */\n async deleteDB(dbName) {\n // test if file exists\n const isExists = this.fileUtil.isFileExists(dbName);\n if (isExists && !this._isDbOpen) {\n // open the database\n try {\n await this.open();\n }\n catch (err) {\n throw new Error(`DeleteDB: ${err}`);\n }\n }\n // close the database\n try {\n this.dbClose();\n }\n catch (err) {\n throw new Error('DeleteDB: Close failed');\n }\n // delete the database\n if (isExists) {\n try {\n await this.fileUtil.deleteFileName(dbName);\n }\n catch (err) {\n throw new Error(`DeleteDB: deleteFile ${dbName} failed ${err}`);\n }\n }\n return;\n }\n /**\n * IsTableExists\n * @param tableName\n * @returns\n */\n isTableExists(tableName) {\n this.ensureDatabaseIsOpen();\n const isOpen = this._isDbOpen;\n try {\n const tableExistsResult = this.jsonUtil.isTableExists(this.database, isOpen, tableName);\n return tableExistsResult;\n }\n catch (err) {\n throw new Error(`IsTableExists: ${err}`);\n }\n }\n /**\n * CreateSyncTable\n * create the synchronization table\n * @returns Promise<number>\n */\n createSyncTable() {\n this.ensureDatabaseIsOpen();\n let changes = -1;\n const isOpen = this._isDbOpen;\n // check if the table has already being created\n try {\n const retB = this.jsonUtil.isTableExists(this.database, isOpen, 'sync_table');\n if (!retB) {\n const isLastModified = this.sqliteUtil.isLastModified(this.database, isOpen);\n const isSqlDeleted = this.sqliteUtil.isSqlDeleted(this.database, isOpen);\n if (isLastModified && isSqlDeleted) {\n const date = Math.round(new Date().getTime() / 1000);\n let stmts = `\n CREATE TABLE IF NOT EXISTS sync_table (\n id INTEGER PRIMARY KEY NOT NULL,\n sync_date INTEGER\n );`;\n stmts += `INSERT INTO sync_table (sync_date) VALUES (\n ${date});`;\n const results = this.sqliteUtil.execute(this.database, stmts, false, true);\n changes = results.changes;\n if (results.changes < 0) {\n throw new Error(`CreateSyncTable: failed changes < 0`);\n }\n }\n else {\n throw new Error('No last_modified/sql_deleted columns in tables');\n }\n }\n else {\n changes = 0;\n }\n return changes;\n }\n catch (err) {\n throw new Error(`CreateSyncTable: ${err}`);\n }\n }\n /**\n * SetSyncDate\n * store the synchronization date\n * @param syncDate: string\n * @returns Promise<{result: boolean, message: string}>\n */\n setSyncDate(syncDate) {\n this.ensureDatabaseIsOpen();\n try {\n const isTable = this.jsonUtil.isTableExists(this.database, this._isDbOpen, 'sync_table');\n if (!isTable) {\n throw new Error('No sync_table available');\n }\n const syncDateUnixTimestamp = Math.round(new Date(syncDate).getTime() / 1000);\n let stmt = `UPDATE sync_table SET sync_date = `;\n stmt += `${syncDateUnixTimestamp} WHERE id = 1;`;\n const results = this.sqliteUtil.execute(this.database, stmt, false, true);\n if (results.changes < 0) {\n return { result: false, message: 'setSyncDate failed' };\n }\n else {\n return { result: true };\n }\n }\n catch (err) {\n return { result: false, message: `setSyncDate failed: ${err}` };\n }\n }\n /**\n * GetSyncDate\n * store the synchronization date\n * @returns Promise<{syncDate: number, message: string}>\n */\n getSyncDate() {\n this.ensureDatabaseIsOpen();\n try {\n const isTable = this.jsonUtil.isTableExists(this.database, this._isDbOpen, 'sync_table');\n if (!isTable) {\n throw new Error('No sync_table available');\n }\n const syncDate = this.exportToJsonUtil.getSyncDate(this.database);\n if (syncDate > 0) {\n return { syncDate };\n }\n else {\n return { syncDate: 0, message: `setSyncDate failed` };\n }\n }\n catch (err) {\n return { syncDate: 0, message: `setSyncDate failed: ${err}` };\n }\n }\n /**\n * ExecuteSQL\n * execute raw sql statements store in a string\n * @param sql: string\n * @param transaction: boolean\n * @param isSQL92: boolean\n * @returns Promise<number>\n */\n executeSQL(sql, transaction, isSQL92) {\n this.ensureDatabaseIsOpen();\n try {\n if (transaction) {\n const mode = this.sqliteUtil.getJournalMode(this.database);\n console.log(`$$$ in executeSQL journal_mode: ${mode} $$$`);\n this.sqliteUtil.beginTransaction(this.database, this._isDbOpen);\n }\n const results = this.sqliteUtil.execute(this.database, sql, false, isSQL92);\n if (results.changes < 0) {\n throw new Error('ExecuteSQL: changes < 0');\n }\n if (transaction) {\n this.sqliteUtil.commitTransaction(this.database, this._isDbOpen);\n }\n return results.changes;\n }\n catch (executeError) {\n let message = `${executeError}`;\n try {\n if (transaction) {\n this.sqliteUtil.rollbackTransaction(this.database, this._isDbOpen);\n }\n }\n catch (rollbackErr) {\n message += ` : ${rollbackErr}`;\n }\n throw new Error(`ExecuteSQL: ${message}`);\n }\n }\n /**\n * SelectSQL\n * execute a sql query with/without binding values\n * @param sql: string\n * @param values: string[]\n * @param isSQL92: boolean\n * @returns Promise<any[]>\n */\n selectSQL(sql, values, isSQL92) {\n this.ensureDatabaseIsOpen();\n try {\n const selectResult = this.sqliteUtil.queryAll(this.database, sql, values, isSQL92);\n return selectResult;\n }\n catch (err) {\n throw new Error(`SelectSQL: ${err}`);\n }\n }\n /**\n * runSQL\n * execute a raw sql statement with/without binding values\n * @param statement: string\n * @param values: string[]\n * @param transaction: boolean\n * @param returnMode: string\n * @param isSQL92: boolean,\n * @returns Promise<{changes:number, lastId:number}>\n */\n runSQL(statement, values, transaction, returnMode, isSQL92) {\n this.ensureDatabaseIsOpen();\n try {\n // start a transaction\n if (transaction) {\n const mode = this.sqliteUtil.getJournalMode(this.database);\n console.log(`$$$ in runSQL journal_mode: ${mode} $$$`);\n this.sqliteUtil.beginTransaction(this.database, this._isDbOpen);\n }\n }\n catch (err) {\n throw new Error(`RunSQL: ${err}`);\n }\n try {\n let nStmt = statement;\n if (!isSQL92 && values.length === 0) {\n nStmt = this.sql92Utils.compatibleSQL92(statement);\n }\n const results = this.sqliteUtil.prepareRun(this.database, nStmt, values, false, returnMode);\n if (results.lastId < 0) {\n if (transaction) {\n this.sqliteUtil.rollbackTransaction(this.database, this._isDbOpen);\n }\n throw new Error(`RunSQL: return LastId < 0`);\n }\n if (transaction) {\n this.sqliteUtil.commitTransaction(this.database, this._isDbOpen);\n }\n return results;\n }\n catch (err) {\n if (transaction) {\n this.sqliteUtil.rollbackTransaction(this.database, this._isDbOpen);\n }\n throw new Error(`RunSQL: ${err}`);\n }\n }\n /**\n * ExecSet\n * execute a set of raw sql statements with/without binding values\n * @param set: any[]\n * @param transaction: boolean,\n * @param returnMode: string,\n * @param isSQL92: boolean,\n * @returns Promise<{changes:number, lastId:number}>\n */\n execSet(set, transaction, returnMode, isSQL92) {\n this.ensureDatabaseIsOpen();\n let results = { changes: 0, lastId: -1 };\n try {\n // start a transaction\n if (transaction) {\n const mode = this.sqliteUtil.getJournalMode(this.database);\n console.log(`$$$ in execSet journal_mode: ${mode} $$$`);\n this.sqliteUtil.beginTransaction(this.database, this._isDbOpen);\n }\n }\n catch (err) {\n throw new Error(`ExecSet: ${err}`);\n }\n try {\n results = this.sqliteUtil.executeSet(this.database, set, false, returnMode, isSQL92);\n if (transaction) {\n this.sqliteUtil.commitTransaction(this.database, this._isDbOpen);\n }\n return results;\n }\n catch (err) {\n const message = err;\n try {\n if (transaction) {\n this.sqliteUtil.rollbackTransaction(this.database, this._isDbOpen);\n }\n }\n catch (err) {\n throw new Error(`ExecSet: ${message}: ` + `${err}`);\n }\n }\n }\n deleteExportedRows() {\n this.ensureDatabaseIsOpen();\n try {\n this.exportToJsonUtil.delExportedRows(this.database);\n return;\n }\n catch (err) {\n throw new Error(`DeleteExportedRows: ${err}`);\n }\n }\n /**\n * GetTableList\n * get the table's list\n * @returns\n */\n getTableList() {\n this.ensureDatabaseIsOpen();\n try {\n const tableNames = this.sqliteUtil.getTablesNames(this.database);\n return tableNames;\n }\n catch (err) {\n throw new Error(`GetTableList: ${err}`);\n }\n }\n importJson(jsonData) {\n let changes = 0;\n this.ensureDatabaseIsOpen();\n try {\n // set Foreign Keys Off\n this.sqliteUtil.setForeignKeyConstraintsEnabled(this.database, false);\n if (jsonData.tables && jsonData.tables.length > 0) {\n // create the database schema\n changes = this.importFromJsonUtil.createDatabaseSchema(this, jsonData);\n if (changes != -1) {\n // create the tables data\n changes += this.importFromJsonUtil.createTablesData(this, jsonData);\n }\n }\n if (jsonData.views && jsonData.views.length > 0) {\n // create the views\n changes += this.importFromJsonUtil.createViews(this, jsonData);\n }\n // set Foreign Keys On\n this.sqliteUtil.setForeignKeyConstraintsEnabled(this.database, true);\n return changes;\n }\n catch (err) {\n throw new Error(`ImportJson: ${err}`);\n }\n }\n exportJson(mode, encrypted) {\n const inJson = {};\n inJson.database = this.dbName.slice(0, -9);\n inJson.version = this.version;\n inJson.encrypted = false;\n inJson.mode = mode;\n this.ensureDatabaseIsOpen();\n try {\n const isTable = this.jsonUtil.isTableExists(this.database, this._isDbOpen, 'sync_table');\n if (isTable) {\n this.exportToJsonUtil.setLastExportDate(this.database, new Date().toISOString());\n }\n else {\n if (inJson.mode === 'partial') {\n throw new Error(`No sync_table available`);\n }\n }\n let jsonResult = this.exportToJsonUtil.createExportObject(this.database, inJson);\n const keys = Object.keys(jsonResult);\n if (keys.length === 0) {\n const msg = `ExportJson: return Object is empty ` + `No data to synchronize`;\n throw new Error(msg);\n }\n let isValid = this.jsonUtil.isJsonSQLite(jsonResult);\n if (this._encrypted && this._isEncryption && encrypted) {\n jsonResult.overwrite = true;\n jsonResult.encrypted = true;\n const base64Str = this.jsonEncryptUtil.encryptJSONObject(jsonResult);\n jsonResult = {};\n jsonResult.expData = base64Str;\n isValid = true;\n }\n if (isValid) {\n return jsonResult;\n }\n else {\n throw new Error(`ExportJson: retJson not valid`);\n }\n }\n catch (err) {\n throw new Error(`ExportJson: ${err}`);\n }\n }\n /**\n * Throws an error if `this._isDbOpen` is `false`.\n */\n ensureDatabaseIsOpen() {\n if (!this._isDbOpen || !this.database) {\n throw new Error(`getVersion: Database ${this.dbName} is not open yet. You should open it first.`);\n }\n }\n}\nexports.Database = Database;\n//# sourceMappingURL=Database.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.CapacitorSQLite = void 0;\nconst GlobalSQLite_1 = require(\"./GlobalSQLite\");\nconst Database_1 = require(\"./electron-utils/Database\");\nconst utilsJson_1 = require(\"./electron-utils/ImportExportJson/utilsJson\");\nconst utilsJsonEncryption_1 = require(\"./electron-utils/ImportExportJson/utilsJsonEncryption\");\nconst utilsFile_1 = require(\"./electron-utils/utilsFile\");\nconst utilsSQLite_1 = require(\"./electron-utils/utilsSQLite\");\nconst utilsSecret_1 = require(\"./electron-utils/utilsSecret\");\nclass CapacitorSQLite {\n constructor() {\n this.versionUpgrades = {};\n this.databases = {};\n this.fileUtil = new utilsFile_1.UtilsFile();\n this.sqliteUtil = new utilsSQLite_1.UtilsSQLite();\n this.jsonUtil = new utilsJson_1.UtilsJson();\n this.jsonEncryptUtil = new utilsJsonEncryption_1.UtilsJsonEncryption();\n this.secretUtil = new utilsSecret_1.UtilsSecret();\n this.globalUtil = new GlobalSQLite_1.GlobalSQLite();\n this.isEncryption = this.fileUtil.getIsEncryption();\n }\n async createConnection(options) {\n const optionKeys = Object.keys(options);\n if (!optionKeys.includes('database')) {\n throw new Error('Must provide a database name');\n }\n const dbName = options.database;\n const version = options.version ? options.version : 1;\n let encrypted = options.encrypted ? options.encrypted : false;\n if (!this.isEncryption && encrypted) {\n throw new Error('Must set electronIsEncryption = true in capacitor.config.ts');\n }\n let inMode = encrypted && options.mode === 'secret'\n ? 'secret'\n : encrypted && options.mode === 'encryption'\n ? 'encryption'\n : encrypted && options.mode === 'decryption'\n ? 'decryption'\n : 'no-encryption';\n if (!this.isEncryption) {\n encrypted = false;\n inMode = 'no-encryption';\n }\n const readonly = options.readonly ? options.readonly : false;\n let upgrades = {};\n const versionUpgradeKeys = Object.keys(this.versionUpgrades);\n if (versionUpgradeKeys.length !== 0 && versionUpgradeKeys.includes(dbName)) {\n upgrades = this.versionUpgrades[dbName];\n }\n const connName = readonly ? 'RO_' + dbName : 'RW_' + dbName;\n const databaseConnection = new Database_1.Database(dbName + 'SQLite.db', encrypted, inMode, version, this.isEncryption, readonly, upgrades, this.globalUtil);\n this.databases[connName] = databaseConnection;\n return;\n }\n async closeConnection(options) {\n const dbName = this.getOptionValue(options, 'database');\n const readonly = options.readonly ? options.readonly : false;\n const connName = readonly ? 'RO_' + dbName : 'RW_' + dbName;\n const database = this.getDatabaseConnectionOrThrowError(connName);\n try {\n if (database.isDBOpen()) {\n // close the database\n database.dbClose();\n }\n }\n catch (err) {\n throw new Error(`CloseConnection command failed: close ${dbName} failed ${err.message}`);\n }\n finally {\n // remove the connection from dictionary\n delete this.databases[connName];\n }\n return;\n }\n async echo(options) {\n const echoValue = this.getOptionValue(options, 'value');\n const echoResult = {};\n echoResult.value = echoValue;\n return echoResult;\n }\n async open(options) {\n const dbName = this.getOptionValue(options, 'database');\n const readonly = options.readonly ? options.readonly : false;\n const connName = readonly ? 'RO_' + dbName : 'RW_' + dbName;\n const database = this.getDatabaseConnectionOrThrowError(connName);\n try {\n await database.open();\n return;\n }\n catch (err) {\n throw new Error(`Open: ${err}`);\n }\n }\n async close(options) {\n const dbName = this.getOptionValue(options, 'database');\n const readonly = options.readonly ? options.readonly : false;\n const connName = readonly ? 'RO_' + dbName : 'RW_' + dbName;\n const database = this.getDatabaseConnectionOrThrowError(connName);\n if (database.isDBOpen()) {\n try {\n database.dbClose();\n return;\n }\n catch (err) {\n throw new Error(`Close: ${err}`);\n }\n }\n else {\n const msg = `Database ${dbName} not opened`;\n throw new Error(`Close: ${msg}`);\n }\n }\n async beginTransaction(options) {\n const dbName = this.getOptionValue(options, 'database');\n const connName = 'RW_' + dbName;\n const database = this.getDatabaseConnectionOrThrowError(connName);\n if (database.isDBOpen()) {\n try {\n const changes = database.dbBeginTransaction();\n return { changes: { changes: changes } };\n }\n catch (err) {\n throw new Error(`BeginTransaction: ${err}`);\n }\n }\n else {\n const msg = `Database ${dbName} not opened`;\n throw new Error(`BeginTransaction: ${msg}`);\n }\n }\n async commitTransaction(options) {\n const dbName = this.getOptionValue(options, 'database');\n const connName = 'RW_' + dbName;\n const database = this.getDatabaseConnectionOrThrowError(connName);\n if (database.isDBOpen()) {\n try {\n const changes = database.dbCommitTransaction();\n return { changes: { changes: changes } };\n }\n catch (err) {\n throw new Error(`CommitTransaction: ${err}`);\n }\n }\n else {\n const msg = `Database ${dbName} not opened`;\n throw new Error(`CommitTransaction: ${msg}`);\n }\n }\n async rollbackTransaction(options) {\n const dbName = this.getOptionValue(options, 'database');\n const connName = 'RW_' + dbName;\n const database = this.getDatabaseConnectionOrThrowError(connName);\n if (database.isDBOpen()) {\n try {\n const changes = database.dbRollbackTransaction();\n return { changes: { changes: changes } };\n }\n catch (err) {\n throw new Error(`RollbackTransaction: ${err}`);\n }\n }\n else {\n const msg = `Database ${dbName} not opened`;\n throw new Error(`RollbackTransaction: ${msg}`);\n }\n }\n async isTransactionActive(options) {\n const dbName = this.getOptionValue(options, 'database');\n const connName = 'RW_' + dbName;\n const database = this.getDatabaseConnectionOrThrowError(connName);\n if (database.isDBOpen()) {\n try {\n const ret = database.isTransActive();\n return { result: ret };\n }\n catch (err) {\n throw new Error(`IsTransactionActive: ${err}`);\n }\n }\n else {\n const msg = `Database ${dbName} not opened`;\n throw new Error(`IsTransactionActive: ${msg}`);\n }\n }\n async getVersion(options) {\n const dbName = this.getOptionValue(options, 'database');\n const readonly = options.readonly ? options.readonly : false;\n const connName = readonly ? 'RO_' + dbName : 'RW_' + dbName;\n const database = this.getDatabaseConnectionOrThrowError(connName);\n if (database.isDBOpen()) {\n try {\n const version = await database.getVersion();\n const versionResult = {};\n versionResult.version = version;\n return versionResult;\n }\n catch (err) {\n throw new Error(`GetVersion: ${err}`);\n }\n }\n else {\n const msg = `Database ${dbName} not opened`;\n throw new Error(`GetVersion: ${msg}`);\n }\n }\n async getTableList(options) {\n const dbName = this.getOptionValue(options, 'database');\n const readonly = options.readonly ? options.readonly : false;\n const connName = readonly ? 'RO_' + dbName : 'RW_' + dbName;\n const database = this.getDatabaseConnectionOrThrowError(connName);\n if (database.isDBOpen()) {\n try {\n const tableList = await database.getTableList();\n const tableListResult = {};\n tableListResult.values = tableList;\n return tableListResult;\n }\n catch (err) {\n throw new Error(`GetTableList: ${err}`);\n }\n }\n else {\n const msg = `Database ${dbName} not opened`;\n throw new Error(`GetTableList: ${msg}`);\n }\n }\n async execute(options) {\n const dbName = this.getOptionValue(options, 'database');\n const statements = this.getOptionValue(options, 'statements');\n const transaction = this.getOptionValue(options, 'transaction', true);\n const readonly = options.readonly ? options.readonly : false;\n const isSQL92 = Object.keys(options).includes('isSQL92') ? options.isSQL92 : true;\n const connName = 'RW_' + dbName;\n const database = this.getDatabaseConnectionOrThrowError(connName);\n if (database.isDBOpen()) {\n if (readonly) {\n const msg = 'not allowed in read-only mode ';\n throw new Error(`Execute: ${msg}`);\n }\n try {\n const executeResult = database.executeSQL(statements, transaction, isSQL92);\n if (executeResult < 0) {\n throw new Error('Execute changes < 0');\n }\n else {\n return { changes: { changes: executeResult } };\n }\n }\n catch (err) {\n throw new Error(`Execute: ${err}`);\n }\n }\n else {\n const msg = `Database ${dbName} not opened`;\n throw new Error(`Execute: ${msg}`);\n }\n }\n async executeSet(options) {\n const dbName = this.getOptionValue(options, 'database');\n const setOfStatements = this.getOptionValue(options, 'set');\n const transaction = this.getOptionValue(options, 'transaction', true);\n const readonly = options.readonly ? options.readonly : false;\n const returnMode = Object.keys(options).includes('returnMode') ? options.returnMode : 'no';\n const isSQL92 = Object.keys(options).includes('isSQL92') ? options.isSQL92 : true;\n const connName = 'RW_' + dbName;\n const database = this.getDatabaseConnectionOrThrowError(connName);\n for (const sStmt of setOfStatements) {\n if (!('statement' in sStmt) || !('values' in sStmt)) {\n throw new Error('ExecuteSet: Must provide a set as ' + 'Array of {statement,values}');\n }\n }\n if (database.isDBOpen()) {\n if (readonly) {\n const msg = 'not allowed in read-only mode ';\n throw new Error(`ExecuteSet failed: ${msg}`);\n }\n try {\n const execSetResult = database.execSet(setOfStatements, transaction, returnMode, isSQL92);\n if (execSetResult.lastId < 0) {\n throw new Error(`ExecuteSet failed changes <0`);\n }\n else {\n return { changes: execSetResult };\n }\n }\n catch (err) {\n throw new Error(`ExecuteSet failed: ${err}`);\n }\n }\n else {\n const msg = `Database ${dbName} not opened`;\n throw new Error(`ExecuteSet failed: ${msg}`);\n }\n }\n async run(options) {\n const dbName = this.getOptionValue(options, 'database');\n const statement = this.getOptionValue(options, 'statement');\n const values = this.getOptionValue(options, 'values', []);\n const transaction = this.getOptionValue(options, 'transaction', true);\n const readonly = options.readonly ? options.readonly : false;\n const returnMode = options.returnMode ? options.returnMode : 'no';\n const isSQL92 = Object.keys(options).includes('isSQL92') ? options.isSQL92 : true;\n const connName = 'RW_' + dbName;\n const database = this.getDatabaseConnectionOrThrowError(connName);\n if (database.isDBOpen()) {\n if (readonly) {\n const msg = 'not allowed in read-only mode ';\n throw new Error(`Run failed: ${msg}`);\n }\n try {\n const runResult = database.runSQL(statement, values, transaction, returnMode, isSQL92);\n return { changes: runResult };\n }\n catch (err) {\n throw new Error(`RUN failed: ${err} `);\n }\n }\n else {\n const msg = `Database ${dbName} not opened`;\n throw new Error(`Run failed: ${msg}`);\n }\n }\n async query(options) {\n const dbName = this.getOptionValue(options, 'database');\n const statement = this.getOptionValue(options, 'statement');\n const values = this.getOptionValue(options, 'values', []);\n if (statement.length === 0) {\n throw new Error('Query: Statement may not be an empty string.');\n }\n const readonly = options.readonly ? options.readonly : false;\n const isSQL92 = Object.keys(options).includes('isSQL92') ? options.isSQL92 : true;\n const connName = readonly ? 'RO_' + dbName : 'RW_' + dbName;\n const database = this.getDatabaseConnectionOrThrowError(connName);\n if (database.isDBOpen()) {\n try {\n const queryResult = database.selectSQL(statement, values, isSQL92);\n return { values: queryResult };\n }\n catch (err) {\n throw new Error(`Query: ${err}`);\n }\n }\n else {\n const msg = `Database ${dbName} not opened`;\n throw new Error(`Query: ${msg}`);\n }\n }\n async isDBExists(options) {\n const dbName = this.getOptionValue(options, 'database');\n const readonly = options.readonly ? options.readonly : false;\n const connName = readonly ? 'RO_' + dbName : 'RW_' + dbName;\n this.getDatabaseConnectionOrThrowError(connName);\n // if (database.isDBOpen()) {\n const isExists = this.fileUtil.isFileExists(dbName + 'SQLite.db');\n return { result: isExists };\n // } else {\n // const msg = `Database ${dbName} not opened`;\n // throw new Error(`isDBExists: ${msg}`);\n // }\n }\n async isDBOpen(options) {\n const dbName = this.getOptionValue(options, 'database');\n const readonly = options.readonly ? options.readonly : false;\n const connName = readonly ? 'RO_' + dbName : 'RW_' + dbName;\n const database = this.getDatabaseConnectionOrThrowError(connName);\n const isOpen = database.isDBOpen();\n return { result: isOpen };\n }\n async isDatabase(options) {\n const dbName = this.getOptionValue(options, 'database');\n const isExists = this.fileUtil.isFileExists(dbName + 'SQLite.db');\n return { result: isExists };\n }\n async isTableExists(options) {\n const dbName = this.getOptionValue(options, 'database');\n const tableName = this.getOptionValue(options, 'table');\n const readonly = options.readonly ? options.readonly : false;\n const connName = readonly ? 'RO_' + dbName : 'RW_' + dbName;\n const database = this.getDatabaseConnectionOrThrowError(connName);\n if (database.isDBOpen()) {\n try {\n const isTableExistsResult = await database.isTableExists(tableName);\n return { result: isTableExistsResult };\n }\n catch (err) {\n throw new Error(`isTableExists: ${err}`);\n }\n }\n else {\n const msg = `Database ${dbName} not opened`;\n throw new Error(`isTableExists: ${msg}`);\n }\n }\n async deleteDatabase(options) {\n const dbName = this.getOptionValue(options, 'database');\n const readonly = options.readonly ? options.readonly : false;\n const connName = 'RW_' + dbName;\n const database = this.getDatabaseConnectionOrThrowError(connName);\n if (readonly) {\n const msg = 'not allowed in read-only mode ';\n throw new Error(`DeleteDatabase failed: ${msg}`);\n }\n try {\n await database.deleteDB(dbName + 'SQLite.db');\n return;\n }\n catch (err) {\n throw new Error(`DeleteDatabase: ${err}`);\n }\n }\n async isJsonValid(options) {\n const jsonString = this.getOptionValue(options, 'jsonstring');\n const jsonObj = JSON.parse(jsonString);\n const isValid = this.jsonUtil.isJsonSQLite(jsonObj);\n if (!isValid) {\n throw new Error('Stringify Json Object not Valid');\n }\n else {\n return { result: true };\n }\n }\n async importFromJson(options) {\n const jsonString = this.getOptionValue(options, 'jsonstring');\n let jsonObj = JSON.parse(jsonString);\n let inMode = 'no-encryption';\n const key = 'expData';\n if (key in jsonObj) {\n // Decrypt the data\n inMode = 'secret';\n jsonObj = this.jsonEncryptUtil.decryptJSONObject(jsonObj.expData);\n }\n const isValid = this.jsonUtil.isJsonSQLite(jsonObj);\n if (!isValid) {\n throw new Error('Must provide a valid JsonSQLite Object');\n }\n const vJsonObj = jsonObj;\n const dbName = `${vJsonObj.database}SQLite.db`;\n const targetDbVersion = vJsonObj.version ?? 1;\n const overwrite = vJsonObj.overwrite ?? false;\n const encrypted = vJsonObj.encrypted ?? false;\n const mode = vJsonObj.mode ?? 'full';\n if (!this.isEncryption && encrypted) {\n throw new Error('Must set electronIsEncryption = true in capacitor.config.ts');\n }\n // Create the database\n const database = new Database_1.Database(dbName, encrypted, inMode, targetDbVersion, this.isEncryption, false, {}, this.globalUtil);\n try {\n if (overwrite && mode === 'full') {\n const isExists = this.fileUtil.isFileExists(dbName);\n if (isExists) {\n await this.fileUtil.deleteFileName(dbName);\n }\n }\n // Open the database\n await database.open();\n const tableList = await database.getTableList();\n if (mode === 'full' && tableList.length > 0) {\n const currentVersion = await database.getVersion();\n if (targetDbVersion < currentVersion) {\n throw new Error(`ImportFromJson: Cannot import a version lower than ${currentVersion}`);\n }\n if (currentVersion === targetDbVersion) {\n return { changes: { changes: 0 } };\n }\n }\n // Import the JsonSQLite Object\n const changes = await database.importJson(vJsonObj);\n // Close the database\n database.dbClose();\n return { changes: { changes: changes } };\n }\n catch (err) {\n throw new Error(`ImportFromJson: ${err}`);\n }\n }\n async exportToJson(options) {\n const dbName = this.getOptionValue(options, 'database');\n const exportMode = this.getOptionValue(options, 'jsonexportmode');\n const readonly = this.getOptionValue(options, 'readonly', false);\n const encrypted = this.getOptionValue(options, 'encrypted', false);\n const connName = readonly ? 'RO_' + dbName : 'RW_' + dbName;\n const database = this.getDatabaseConnectionOrThrowError(connName);\n if (database.isDBOpen()) {\n try {\n const exportJsonResult = database.exportJson(exportMode, encrypted);\n const resultKeys = Object.keys(exportJsonResult);\n if (resultKeys.includes('message')) {\n throw new Error(`exportToJson: ${exportJsonResult.message}`);\n }\n else {\n return { export: exportJsonResult };\n }\n }\n catch (err) {\n throw new Error(`ExportToJson: ${err}`);\n }\n }\n else {\n const msg = `Database ${dbName} not opened`;\n throw new Error(`ExportToJson: ${msg}`);\n }\n }\n async createSyncTable(options) {\n const dbName = this.getOptionValue(options, 'database');\n const readonly = options.readonly ? options.readonly : false;\n const connName = 'RW_' + dbName;\n const database = this.getDatabaseConnectionOrThrowError(connName);\n if (database.isDBOpen()) {\n if (readonly) {\n const msg = 'not allowed in read-only mode ';\n throw new Error(`CreateSyncTable failed: ${msg}`);\n }\n try {\n const createTableSyncResult = await database.createSyncTable();\n return {\n changes: { changes: createTableSyncResult },\n };\n }\n catch (err) {\n throw new Error(`CreateSyncTable: ${err}`);\n }\n }\n else {\n const msg = `Database ${dbName} not opened`;\n throw new Error(`CreateSyncTable: ${msg}`);\n }\n }\n async setSyncDate(options) {\n const dbName = this.getOptionValue(options, 'database');\n const syncDate = this.getOptionValue(options, 'syncdate');\n const readonly = options.readonly ? options.readonly : false;\n const connName = 'RW_' + dbName;\n const database = this.getDatabaseConnectionOrThrowError(connName);\n if (database.isDBOpen()) {\n if (readonly) {\n const msg = 'not allowed in read-only mode ';\n throw new Error(`SetSyncDate failed: ${msg}`);\n }\n try {\n await database.setSyncDate(syncDate);\n return;\n }\n catch (err) {\n throw new Error(`SetSyncDate: ${err}`);\n }\n }\n else {\n const msg = `Database ${dbName} not opened`;\n throw new Error(`SetSyncDate: ${msg}`);\n }\n }\n async getSyncDate(options) {\n const dbName = this.getOptionValue(options, 'database');\n const readonly = options.readonly ? options.readonly : false;\n const connName = readonly ? 'RO_' + dbName : 'RW_' + dbName;\n const database = this.getDatabaseConnectionOrThrowError(connName);\n if (database.isDBOpen()) {\n try {\n const ret = await database.getSyncDate();\n return Promise.resolve(ret);\n }\n catch (err) {\n throw new Error(`GetSyncDate: ${err}`);\n }\n }\n else {\n const msg = `Database ${dbName} not opened`;\n throw new Error(`GetSyncDate: ${msg}`);\n }\n }\n async deleteExportedRows(options) {\n const dbName = this.getOptionValue(options, 'database');\n const readonly = options.readonly ? options.readonly : false;\n const connName = 'RW_' + dbName;\n const database = this.getDatabaseConnectionOrThrowError(connName);\n if (database.isDBOpen()) {\n if (readonly) {\n const msg = 'not allowed in read-only mode ';\n throw new Error(`DeleteExportedRows: ${msg}`);\n }\n try {\n await database.deleteExportedRows();\n return Promise.resolve();\n }\n catch (err) {\n throw new Error(`DeleteExportedRows: ${err}`);\n }\n }\n else {\n const msg = `Database ${dbName} not opened`;\n throw new Error(`DeleteExportedRows: ${msg}`);\n }\n }\n async addUpgradeStatement(options) {\n const dbName = this.getOptionValue(options, 'database');\n const upgrades = this.getOptionValue(options, 'upgrade');\n for (const upgrade of upgrades) {\n const versionUpgradeKeys = Object.keys(upgrade);\n if (!versionUpgradeKeys.includes('toVersion') || !versionUpgradeKeys.includes('statements')) {\n throw new Error('Must provide an upgrade capSQLiteVersionUpgrade Object');\n }\n if (typeof upgrade.toVersion != 'number') {\n throw new Error('upgrade.toVersion must be a number');\n }\n if (this.versionUpgrades[dbName]) {\n this.versionUpgrades[dbName][upgrade.toVersion] = upgrade;\n }\n else {\n const upgradeVersionDict = {};\n upgradeVersionDict[upgrade.toVersion] = upgrade;\n this.versionUpgrades[dbName] = upgradeVersionDict;\n }\n }\n return;\n }\n async copyFromAssets(options) {\n const overwrite = this.getOptionValue(options, 'overwrite', false);\n // check if the assets/database folder exists\n const assetsDbPath = this.fileUtil.getAssetsDatabasesPath();\n const pathExists = this.fileUtil.isPathExists(assetsDbPath);\n if (pathExists) {\n // get the database files\n const dbList = await this.fileUtil.getFileList(assetsDbPath);\n // loop through the database files\n dbList.forEach(async (db) => {\n if (this.fileUtil.getExtName(db) === '.db') {\n // for each copy the file to the Application database folder\n await this.fileUtil.copyFromAssetToDatabase(db, overwrite);\n }\n if (this.fileUtil.getExtName(db) === '.zip') {\n const assetPath = this.fileUtil.getAssetsDatabasesPath();\n await this.fileUtil.unzipDatabase(db, assetPath, overwrite);\n }\n });\n return;\n }\n else {\n throw new Error(`CopyFromAssets: assets/databases folder does not exist:[${assetsDbPath}]`);\n }\n }\n async getFromHTTPRequest(options) {\n const url = this.getOptionValue(options, 'url', '');\n const overwrite = this.getOptionValue(options, 'overwrite', false);\n if (url.length === 0) {\n throw new Error(`getFromHTTPRequest: You must give a database url`);\n }\n const cachePath = this.fileUtil.getCachePath();\n await this.fileUtil.downloadFileFromHTTP(url, cachePath);\n if (this.fileUtil.getExtName(url) === '.zip') {\n const zipName = `${this.fileUtil.getBaseName(url)}.zip`;\n await this.fileUtil.unzipDatabase(zipName, cachePath, overwrite);\n }\n if (overwrite) {\n await this.fileUtil.moveDatabaseFromCache();\n }\n else {\n throw new Error(`getFromHTTPRequest: cannot move file from cache overwrite: ${overwrite}`);\n }\n return;\n }\n async getDatabaseList() {\n // get the database folder\n const pathDatabase = this.fileUtil.getDatabasesPath();\n // get the list of databases\n const files = await this.fileUtil.getFileList(pathDatabase);\n if (files.length > 0) {\n return { values: files };\n }\n else {\n throw new Error(`isTableExists: No databases found in [${pathDatabase}]`);\n }\n }\n async checkConnectionsConsistency(options) {\n const dbNames = this.getOptionValue(options, 'dbNames');\n const openModes = this.getOptionValue(options, 'openModes');\n const checkConsistencyResult = {};\n checkConsistencyResult.result = false;\n const dbConns = [];\n dbNames.forEach((value, i) => {\n dbConns.push(`${openModes[i]}_${value}`);\n });\n try {\n let inConnectionsSet = new Set(Object.keys(this.databases));\n const outConnectionSet = new Set(dbConns);\n if (outConnectionSet.size === 0) {\n await this.resetDbDict(Object.keys(this.databases));\n return Promise.resolve(checkConsistencyResult);\n }\n if (inConnectionsSet.size < outConnectionSet.size) {\n await this.resetDbDict(Object.keys(this.databases));\n return Promise.resolve(checkConsistencyResult);\n }\n if (inConnectionsSet.size > outConnectionSet.size) {\n for (const key of inConnectionsSet) {\n if (!Array.from(outConnectionSet.keys()).includes(key)) {\n const opt = {};\n let readonly = false;\n if (key.substring(0, 3) === 'RO_') {\n readonly = true;\n }\n opt.database = key.substring(3);\n opt.readonly = readonly;\n await this.closeConnection(opt);\n }\n }\n }\n inConnectionsSet = new Set(Object.keys(this.databases));\n if (inConnectionsSet.size === outConnectionSet.size) {\n const symmetricDifferenceSet = await this.symmetricDifference(inConnectionsSet, outConnectionSet);\n if (symmetricDifferenceSet.size === 0) {\n checkConsistencyResult.result = true;\n return checkConsistencyResult;\n }\n else {\n await this.resetDbDict(Object.keys(this.databases));\n return checkConsistencyResult;\n }\n }\n else {\n await this.resetDbDict(Object.keys(this.databases));\n return checkConsistencyResult;\n }\n }\n catch (err) {\n throw new Error(`CheckConnectionsConsistency: ${err}`);\n }\n }\n async isSecretStored() {\n if (!this.isEncryption) {\n throw new Error(`isSecretStored: Not available electronIsEncryption = false in capacitor.config.ts`);\n }\n try {\n const isStored = this.secretUtil.isSecretStored();\n return { result: isStored };\n }\n catch (err) {\n throw new Error(`isSecretStored: ${err}`);\n }\n }\n async isPassphraseValid(options) {\n if (!this.isEncryption) {\n throw new Error(`isPassphraseValid: Not available electronIsEncryption = false in capacitor.config.ts`);\n }\n const passphrase = options.passphrase ? options.passphrase : '';\n if (passphrase.length <= 0) {\n throw new Error(`isPassphraseValid: You must give a passphrase`);\n }\n try {\n const isValid = this.secretUtil.isPassphraseValid(passphrase);\n return { result: isValid };\n }\n catch (err) {\n throw new Error(`isPassphraseValid: ${err}`);\n }\n }\n async setEncryptionSecret(options) {\n const isEncrypt = this.fileUtil.getIsEncryption();\n if (!isEncrypt) {\n throw new Error(`setEncryptionSecret: Not available electronIsEncryption = false in capacitor.config.ts`);\n }\n const passphrase = options.passphrase ? options.passphrase : '';\n if (passphrase.length <= 0) {\n throw new Error(`setEncryptionSecret: You must give a passphrase`);\n }\n try {\n // check if already exists\n const isStored = this.secretUtil.isSecretStored();\n if (isStored) {\n throw new Error(`setEncryptionSecret: passphrase already in store`);\n }\n await this.closeAllConnections();\n this.secretUtil.setEncryptSecret(passphrase);\n return;\n }\n catch (err) {\n throw new Error(`setEncryptionSecret: ${err}`);\n }\n }\n async changeEncryptionSecret(options) {\n const isEncrypt = this.fileUtil.getIsEncryption();\n if (!isEncrypt) {\n throw new Error(`changeEncryptionSecret: Not available electronIsEncryption = false in capacitor.config.ts`);\n }\n const oldsecret = this.secretUtil.getPassphrase();\n const oldpassphrase = options.oldpassphrase ? options.oldpassphrase : '';\n if (oldpassphrase.length <= 0) {\n throw new Error(`changeEncryptionSecret: You must give the oldpassphrase`);\n }\n if (oldpassphrase !== oldsecret) {\n throw new Error(`changeEncryptionSecret: the given oldpassphrase is wrong`);\n }\n const passphrase = options.passphrase ? options.passphrase : '';\n if (passphrase.length <= 0) {\n throw new Error(`changetEncryptionSecret: You must give a passphrase`);\n }\n try {\n await this.closeAllConnections();\n this.secretUtil.changeEncryptSecret(oldpassphrase, passphrase);\n return;\n }\n catch (err) {\n throw new Error(`changetEncryptionSecret: ${err}`);\n }\n }\n async clearEncryptionSecret() {\n const isEncrypt = this.fileUtil.getIsEncryption();\n if (!isEncrypt) {\n throw new Error(`clearEncryptionSecret: Not available electronIsEncryption = false in capacitor.config.ts`);\n }\n if (this.globalUtil == null) {\n throw new Error(`clearEncryptionSecret: No available globalUtil`);\n }\n try {\n await this.closeAllConnections();\n this.secretUtil.clearEncryptSecret();\n return;\n }\n catch (err) {\n throw new Error(`clearEncryptionSecret: ${err}`);\n }\n }\n async isInConfigEncryption() {\n return Promise.resolve({ result: this.isEncryption });\n }\n async isDatabaseEncrypted(options) {\n const dbName = this.getOptionValue(options, 'database');\n try {\n const isEncrypt = await this.sqliteUtil.isDatabaseEncrypted(dbName + 'SQLite.db');\n return { result: isEncrypt };\n }\n catch (err) {\n throw new Error(`isDatabaseEncrypted: ${err}`);\n }\n }\n async checkEncryptionSecret(options) {\n const isEncrypt = this.fileUtil.getIsEncryption();\n if (!isEncrypt) {\n throw new Error(`checkEncryptionSecret: Not available electronIsEncryption = false in capacitor.config.ts`);\n }\n const passphrase = options.passphrase ? options.passphrase : '';\n if (passphrase.length <= 0) {\n throw new Error(`checkEncryptionSecret: You must give a passphrase`);\n }\n try {\n await this.closeAllConnections();\n const isSame = this.secretUtil.checkEncryptSecret(passphrase);\n return { result: isSame };\n }\n catch (err) {\n throw new Error(`checkEncryptionSecret: ${err}`);\n }\n }\n ////////////////////////////////\n //// PRIVATE METHODS\n ////////////////////////////////\n async resetDbDict(keys) {\n try {\n for (const key of keys) {\n const opt = {};\n let readonly = false;\n if (key.substring(0, 3) === 'RO_') {\n readonly = true;\n }\n opt.database = key.substring(3);\n opt.readonly = readonly;\n await this.closeConnection(opt);\n }\n }\n catch (err) {\n throw new Error(`ResetDbDict: ${err}`);\n }\n }\n async symmetricDifference(setA, setB) {\n const difference = new Set(setA);\n for (const elem of setB) {\n if (difference.has(elem)) {\n difference.delete(elem);\n }\n else {\n difference.add(elem);\n }\n }\n return difference;\n }\n /**\n * Returns a database connection, if it already exists.\n * If the conneciton does not exist yet, it throws an error.\n *\n * @param dbName\n * @returns\n */\n getDatabaseConnectionOrThrowError(dbName) {\n const databaseNames = Object.keys(this.databases);\n if (!databaseNames.includes(dbName)) {\n throw new Error(`No connection available for database \"${dbName}\"`);\n }\n return this.databases[dbName];\n }\n /**\n * Gets the value of an option from the options object.\n * If the `optionKey` does not exist and there is no `defaultValue` defined, an exception is thrown.\n * If the `optionKey` does not exist but there is a `defaultValue`, the `defaultValue` is returned.\n *\n * @param options\n * @param optionKey\n * @param defaultValue\n * @returns\n */\n getOptionValue(options, optionKey, defaultValue = undefined) {\n const optionKeys = Object.keys(options);\n if (!optionKeys.includes(optionKey)) {\n if (defaultValue === undefined) {\n throw new Error(`Must provide \"${optionKey}\" in options.`);\n }\n else {\n return defaultValue;\n }\n }\n return options[optionKey];\n }\n async closeAllConnections() {\n const databaseNames = Object.keys(this.databases);\n try {\n for (const name of databaseNames) {\n const db = this.databases[name];\n if (db.isDBOpen()) {\n db.dbClose();\n }\n }\n return;\n }\n catch (err) {\n throw new Error(`CloseAllConnection command failed: ${err.message}`);\n }\n }\n ////////////////////////////////\n //// UNIMPLEMENTED METHODS\n ////////////////////////////////\n async getMigratableDbList(options) {\n console.log('getCordovaDbList', options);\n throw new Error('Method not implemented.');\n }\n async addSQLiteSuffix(options) {\n console.log(`${JSON.stringify(options)}`);\n throw new Error('Method not implemented.');\n }\n async deleteOldDatabases(options) {\n console.log(`${JSON.stringify(options)}`);\n throw new Error('Method not implemented.');\n }\n async moveDatabasesAndAddSuffix(options) {\n console.log(`${JSON.stringify(options)}`);\n throw new Error('Method not implemented.');\n }\n async getUrl() {\n throw new Error('Method not implemented.');\n }\n async initWebStore() {\n throw new Error('Method not implemented.');\n }\n async saveToStore(options) {\n console.log(`${JSON.stringify(options)}`);\n throw new Error('Method not implemented.');\n }\n async saveToLocalDisk(options) {\n console.log(`${JSON.stringify(options)}`);\n throw new Error('Method not implemented.');\n }\n async getFromLocalDiskToStore(options) {\n console.log(`${JSON.stringify(options)}`);\n throw new Error('Method not implemented.');\n }\n async getNCDatabasePath(options) {\n console.log('getNCDatabasePath', options);\n throw new Error('Method not implemented.');\n }\n async createNCConnection(options) {\n console.log('createNCConnection', options);\n throw new Error('Method not implemented.');\n }\n async closeNCConnection(options) {\n console.log('closeNCConnection', options);\n throw new Error('Method not implemented.');\n }\n async isNCDatabase(options) {\n console.log('isNCDatabase', options);\n throw new Error('Method not implemented.');\n }\n async isInConfigBiometricAuth() {\n throw new Error('Not implemented on web.');\n }\n}\nexports.CapacitorSQLite = CapacitorSQLite;\n//# sourceMappingURL=index.js.map","import { getDefaultExportFromCjs } from \"\u0000commonjsHelpers.js\";\nimport { __require as requireSrc } from \"/Users/robingenz/Documents/GitHub/capacitor-community/sqlite/electron/build/electron/src/index.js\";\nvar srcExports = requireSrc();\nexport { srcExports as __moduleExports };\nexport default /*@__PURE__*/getDefaultExportFromCjs(srcExports);"],"names":["GlobalSQLite_1","GlobalSQLite","UtilsSQL92Compatibility_1","UtilsSQL92Compatibility","require$$0","require$$1","require$$2","require$$3","require$$4","Database_1","require$$5","require$$6","require$$7","require$$8","require$$9","require$$10","Database"],"mappings":"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"}