From ac08b31b3d761c87dbd4bdaccf23f9bbb6f6b2a9 Mon Sep 17 00:00:00 2001 From: marcio Date: Mon, 10 Nov 2025 16:31:44 -0300 Subject: [PATCH] build --- dist/index.cjs | 600 -------------------------------- dist/index.d.cts | 315 ----------------- dist/index.d.mts | 315 ----------------- dist/index.d.ts | 315 ----------------- dist/index.mjs | 548 ----------------------------- dist/situacoes/index.d.ts | 1 - dist/situacoes/index.js | 18 - dist/situacoes/index.js.map | 1 - dist/situacoes/situacoes.d.ts | 51 --- dist/situacoes/situacoes.js | 64 ---- dist/situacoes/situacoes.js.map | 1 - package.json | 2 +- pacote.tgz | Bin 37823 -> 26624 bytes 13 files changed, 1 insertion(+), 2230 deletions(-) delete mode 100644 dist/index.cjs delete mode 100644 dist/index.d.cts delete mode 100644 dist/index.d.mts delete mode 100644 dist/index.d.ts delete mode 100644 dist/index.mjs delete mode 100644 dist/situacoes/index.d.ts delete mode 100644 dist/situacoes/index.js delete mode 100644 dist/situacoes/index.js.map delete mode 100644 dist/situacoes/situacoes.d.ts delete mode 100644 dist/situacoes/situacoes.js delete mode 100644 dist/situacoes/situacoes.js.map diff --git a/dist/index.cjs b/dist/index.cjs deleted file mode 100644 index 32e7c76..0000000 --- a/dist/index.cjs +++ /dev/null @@ -1,600 +0,0 @@ -'use strict'; - -const z = require('zod'); -const dayjs = require('dayjs'); -const duration = require('dayjs/plugin/duration.js'); -const isSameOrAfter = require('dayjs/plugin/isSameOrAfter.js'); -const isSameOrBefore = require('dayjs/plugin/isSameOrBefore.js'); -const minMax = require('dayjs/plugin/minMax.js'); -const relativeTime = require('dayjs/plugin/relativeTime.js'); -const timezone = require('dayjs/plugin/timezone.js'); -const utc = require('dayjs/plugin/utc.js'); -const weekOfYear = require('dayjs/plugin/weekOfYear.js'); -require('dayjs/locale/pt-br.js'); -const crossFetch = require('cross-fetch'); -const uuid$1 = require('uuid'); - -function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e.default : e; } - -const z__default = /*#__PURE__*/_interopDefaultCompat(z); -const dayjs__default = /*#__PURE__*/_interopDefaultCompat(dayjs); -const duration__default = /*#__PURE__*/_interopDefaultCompat(duration); -const isSameOrAfter__default = /*#__PURE__*/_interopDefaultCompat(isSameOrAfter); -const isSameOrBefore__default = /*#__PURE__*/_interopDefaultCompat(isSameOrBefore); -const minMax__default = /*#__PURE__*/_interopDefaultCompat(minMax); -const relativeTime__default = /*#__PURE__*/_interopDefaultCompat(relativeTime); -const timezone__default = /*#__PURE__*/_interopDefaultCompat(timezone); -const utc__default = /*#__PURE__*/_interopDefaultCompat(utc); -const weekOfYear__default = /*#__PURE__*/_interopDefaultCompat(weekOfYear); -const crossFetch__default = /*#__PURE__*/_interopDefaultCompat(crossFetch); - -const alfabeto = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".split(""); -const aleatorio = (tamanho) => `eli-${Array.from({ length: tamanho || 8 }).map(() => alfabeto[(999 * Math.random() | 0) % alfabeto.length]).join("")}`; - -const _cache = {}; -globalThis.cacheMemoria_cache = _cache; -const cacheM = (chave, valor, validadeSeg) => { - const txChave = typeof chave == "string" ? chave : typeof chave == "number" ? String(chave) : encodeURIComponent(JSON.stringify(chave)); - const validade = validadeSeg && (/* @__PURE__ */ new Date()).getTime() + validadeSeg * 1e3; - if (valor !== void 0) { - _cache[txChave] = { - valor, - validade - }; - } - const busca = _cache[txChave]; - if (busca?.validade && busca.validade < (/* @__PURE__ */ new Date()).getTime()) { - return void 0; - } - return busca?.valor; -}; -const verCacheM = () => _cache; -const cacheMemoria = cacheM; -const cacheMFixo = (chave) => (valor) => cacheM(chave, valor); - -const uuid_null = "00000000-0000-0000-0000-000000000000"; -var camposComuns = /* @__PURE__ */ ((camposComuns2) => { - camposComuns2["codigo"] = "codigo"; - camposComuns2["excluido"] = "excluido"; - camposComuns2["data_hora_criacao"] = "data_hora_criacao"; - camposComuns2["data_hora_atualizacao"] = "data_hora_atualizacao"; - camposComuns2["codigo_usuario_criacao"] = "codigo_usuario_criacao"; - camposComuns2["codigo_usuario_atualizacao"] = "codigo_usuario_atualizacao"; - camposComuns2["versao"] = "versao"; - return camposComuns2; -})(camposComuns || {}); -var tx = /* @__PURE__ */ ((tx2) => { - tx2["token"] = "token"; - return tx2; -})(tx || {}); -var tipoUsuarioResiduos = /* @__PURE__ */ ((tipoUsuarioResiduos2) => { - tipoUsuarioResiduos2["Usuario"] = "usuario"; - tipoUsuarioResiduos2["Fornecedor"] = "fornecedor"; - return tipoUsuarioResiduos2; -})(tipoUsuarioResiduos || {}); - -var operadores = /* @__PURE__ */ ((operadores2) => { - operadores2["="] = "="; - operadores2["!="] = "!="; - operadores2[">"] = ">"; - operadores2[">="] = ">="; - operadores2["<"] = "<"; - operadores2["<="] = "<="; - operadores2["like"] = "like"; - operadores2["in"] = "in"; - return operadores2; -})(operadores || {}); -const zOperadores = z__default.enum([ - "=", - "!=", - ">", - ">=", - "<", - "<=", - "like", - "in" -]); -const zFiltro = z__default.object({ - coluna: z__default.string(), - valor: z__default.any(), - operador: zOperadores, - ou: z__default.boolean().optional() -}); - -dayjs__default.locale("pt-br"); -dayjs__default.extend(utc__default); -dayjs__default.extend(timezone__default); -dayjs__default.extend(weekOfYear__default); -dayjs__default.extend(isSameOrBefore__default); -dayjs__default.extend(isSameOrAfter__default); -dayjs__default.extend(minMax__default); -dayjs__default.extend(relativeTime__default); -dayjs__default.extend(duration__default); -const dayjsbr = dayjs__default; - -const cdn_carro_de_boi = "https://carro-de-boi-idz-one.b-cdn.net"; - -const extensoes = [ - { - ext: "gif", - tipo: "imagem", - mime: "image/gif" - }, - { - ext: "jpg", - tipo: "imagem", - mime: "image/jpeg" - }, - { - ext: "jpeg", - tipo: "imagem", - mime: "image/jpeg" - }, - { - ext: "png", - tipo: "imagem", - mime: "image/png" - }, - { - ext: "bmp", - tipo: "imagem", - mime: "image/bmp" - }, - { - ext: "webp", - tipo: "imagem", - mime: "image/webp" - }, - { - ext: "tiff", - tipo: "imagem", - mime: "image/tiff" - }, - { - ext: "svg", - tipo: "imagem", - mime: "image/svg+xml" - }, - { - ext: "ico", - tipo: "imagem", - mime: "image/x-icon" - }, - { - ext: "pdf", - tipo: "documento", - mime: "application/pdf" - }, - { - ext: "doc", - tipo: "documento", - mime: "application/msword" - }, - { - ext: "docx", - tipo: "documento", - mime: "application/vnd.openxmlformats-officedocument.wordprocessingml.document" - }, - { - ext: "xls", - tipo: "documento", - mime: "application/vnd.ms-excel" - }, - { - ext: "xlsx", - tipo: "documento", - mime: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" - }, - { - ext: "ppt", - tipo: "documento", - mime: "application/vnd.ms-powerpoint" - }, - { - ext: "pptx", - tipo: "documento", - mime: "application/vnd.openxmlformats-officedocument.presentationml.presentation" - }, - { - ext: "txt", - tipo: "documento", - mime: "text/plain" - }, - { - ext: "odt", - tipo: "documento", - mime: "application/vnd.oasis.opendocument.text" - }, - { - ext: "ods", - tipo: "documento", - mime: "application/vnd.oasis.opendocument.spreadsheet" - }, - { - ext: "rtf", - tipo: "documento", - mime: "application/rtf" - }, - { - ext: "csv", - tipo: "documento", - mime: "text/csv" - }, - { - ext: "mp4", - tipo: "v\xEDdeo", - mime: "video/mp4" - }, - { - ext: "avi", - tipo: "v\xEDdeo", - mime: "video/x-msvideo" - }, - { - ext: "mkv", - tipo: "v\xEDdeo", - mime: "video/x-matroska" - }, - { - ext: "mov", - tipo: "v\xEDdeo", - mime: "video/quicktime" - }, - { - ext: "wmv", - tipo: "v\xEDdeo", - mime: "video/x-ms-wmv" - }, - { - ext: "flv", - tipo: "v\xEDdeo", - mime: "video/x-flv" - }, - { - ext: "webm", - tipo: "v\xEDdeo", - mime: "video/webm" - }, - { - ext: "3gp", - tipo: "v\xEDdeo", - mime: "video/3gpp" - }, - { - ext: "mpeg", - tipo: "v\xEDdeo", - mime: "video/mpeg" - } -]; -const tipoArquivo = (nomeArquivo) => { - const extArquivo = String(nomeArquivo || "").toLocaleLowerCase().split(".").pop(); - const extensao = extensoes.find((extensao2) => extensao2.ext === extArquivo); - return extensao?.tipo || "outros"; -}; - -const graficos_pilao = { - Condicionantes: { - grafico: "condicionantes-criadas", - titulo: "Condicionantes Criadas" - }, - Licen\u00E7as: { - grafico: "licencas-criadas", - titulo: "Licen\xE7as Criadas" - } -}; - -const localValor = (chave_, valor) => { - const localStorage = globalThis.localStorage; - if (typeof localStorage == "undefined") return null; - const chave = typeof chave_ === "string" ? chave_ : encodeURIComponent(JSON.stringify(chave_)); - try { - if (valor !== void 0) { - localStorage.setItem(chave, JSON.stringify(valor)); - } - const v2 = localStorage.getItem(chave); - if (v2 === null) return null; - try { - return JSON.parse(v2); - } catch { - return v2; - } - } catch { - return null; - } -}; - -const esperar = (ms) => new Promise( - (resolve) => setTimeout(() => resolve(true), ms) -); -const nomeVariavel = (v) => Object.keys(v).join("/"); - -const LOKI_BASE_URL = "https://log.idz.one"; -const LOKI_ENDPOINT = "/loki/api/v1/push"; -const postLogger = async ({ - objeto -}) => { - const response = await crossFetch__default(`${LOKI_BASE_URL}${LOKI_ENDPOINT}`, { - method: "POST", - headers: { "Content-Type": "application/json" }, - body: JSON.stringify(objeto) - }).catch((a) => a); - if (!response.ok) { - return [objeto, `Erro ${response.status}: ${await response?.text?.()}`]; - } - return [objeto]; -}; -let cwd = ""; -const defineCwd = (novoCwd) => { - cwd = novoCwd; -}; -const logger = ({ app: app_e, eProducao, parametros: parametrosAmbiente }) => ({ inquilino, usuario, parametros: parametrosSessao }) => async (level, mensagem, op_tipoLog) => { - let { - __filename, - detalhes, - local, - parametros: parametrosLog - } = op_tipoLog || {}; - const app = `${eProducao ? "" : "DEV-"}${app_e}`; - if (cwd && __filename) { - __filename = __filename.replace(cwd, ""); - } - if (local) { - detalhes = [`${nomeVariavel({ local })}="${local}"`, ...detalhes || []]; - } - if (__filename) { - detalhes = [ - `${nomeVariavel({ __filename })}="${__filename}"`, - ...detalhes || [] - ]; - } - const timestamp = `${Date.now()}000000`; - const mainLog = detalhes?.length ? `${mensagem} | ${detalhes.map((d) => JSON.stringify(d)).join(" | ")}` : mensagem; - const payload = { - stream: { - app, - inquilino, - usuario, - level, - ...parametrosAmbiente || {}, - ...parametrosSessao || {}, - ...parametrosLog || {} - }, - values: [ - [ - timestamp, - mainLog - // Linha de log direta - ] - ] - }; - const objeto = { streams: [payload] }; - const response = await postLogger({ objeto }); - return response; -}; - -const paraObjetoRegistroPg = (entrada) => { - try { - return Object.fromEntries( - Object.entries(entrada).map(([k, v]) => [ - k, - v === void 0 || v == null ? v : typeof v == "string" || typeof v == "number" || typeof v == "boolean" ? v : JSON.stringify(v, null, 2) - ]) - ); - } catch (error) { - throw new Error( - `Erro na fun\xE7\xE3o paraObjetoRegistroPg: ${error.message} ${error.stack}` - ); - } -}; -const pgObjeto = paraObjetoRegistroPg; -const objetoPg = paraObjetoRegistroPg; - -const umaFuncao = () => "Ol\xE1 Mundo! (fun\xE7\xE3o)"; - -const umaVariavel = "Ol\xE1 Mundo! (vari\xE1vel)"; - -const texto_busca = (...texto) => texto.map( - (txt) => txt === null || txt === void 0 ? "" : String(txt).normalize("NFD").replace(/[\u0300-\u036f]/g, "").replace(/\s+/g, " ").toLowerCase() -).join(" "); - -class TipagemRotas { - _partesCaminho = []; - _acaoIr; - rotulo; - /** Ao criar novo obijeto de tipagem de rota é necessário passar o caminho parcial - ** export const mCaminho = new TipagemRotas<{q:string}>("aplicacao","funcionalidade") - */ - constructor({ - caminho, - acaoIr, - rotulo - }) { - this._acaoIr = acaoIr; - this._partesCaminho = (Array.isArray(caminho) ? caminho : [caminho]).filter(Boolean).map((a) => String(a)).flatMap((a) => a.split("/")).filter(Boolean); - this.rotulo = rotulo; - } - /** Retorna o caminho completo da rota - ** console.log(mCaminho.caminho) - ** "/caminho" - */ - get caminho() { - const ret = `/${this._partesCaminho.join("/")}`; - return ret; - } - /** Define o caminho completo da rota - ** mCaminho.caminho = "/novoCaminho" - ** console.log(mCaminho.caminho) - ** "/novoCaminho" - ** */ - set caminho(caminhoParcial) { - this._partesCaminho = caminhoParcial.split("/").filter((parte) => parte); - } - /** Retorna o caminho completo da rota com a query - ** console.log(mCaminho.resolve({q:"query"})) - ** "http://localhost:3000/caminho?q=query" - */ - endereco(query, usarComoHash) { - const url = new URL( - typeof window !== "undefined" ? window.location.href : "http://localhost" - ); - url.pathname = this.caminho; - url.search = ""; - const queryKeys = Object.entries(query); - for (const [key, value] of queryKeys) { - url.searchParams.set(String(key), JSON.stringify(value)); - } - url.hash = ""; - if (usarComoHash) { - url.hash = `#${url.search}`; - url.search = ""; - } - return url.href; - } - /** Vai para a url - ** mCaminho.ir({q:"query"}) - ** window.location.href = "http://localhost:3000/caminho?q=query" - */ - ir(query) { - if (this._acaoIr) { - this._acaoIr(this.endereco({ ...query })); - } else { - if (typeof window != "undefined") { - window.location.href = this.endereco({ ...query }); - } - } - } - /** Retorna os parametros da url - ** console.log(mCaminho.parametros()) - ** {q:"query"} - */ - parametros(urlEntrada) { - const url = urlEntrada ? new URL(urlEntrada) : new URL( - typeof window !== "undefined" ? window.location.href : "http://localhost" - ); - const query = url.searchParams; - let queryObj = Object.fromEntries(query.entries()); - const hash = url.hash; - if (hash) { - const hashObj = Object.fromEntries( - new URLSearchParams(hash.slice(1)).entries() - ); - queryObj = { ...queryObj, ...hashObj }; - } - for (const chave in queryObj) { - try { - queryObj[chave] = JSON.parse(queryObj[chave]); - } catch { - console.log(`[${chave}|${queryObj[chave]}] n\xE3o \xE9 um json v\xE1lido.`); - } - } - return queryObj; - } -} - -var siglas_unidades_medida = /* @__PURE__ */ ((siglas_unidades_medida2) => { - siglas_unidades_medida2["UN"] = "UN"; - siglas_unidades_medida2["KG"] = "KG"; - siglas_unidades_medida2["TON"] = "TON"; - siglas_unidades_medida2["g"] = "g"; - siglas_unidades_medida2["M\xB3"] = "M\xB3"; - siglas_unidades_medida2["Lt"] = "Lt"; - return siglas_unidades_medida2; -})(siglas_unidades_medida || {}); -const unidades_medida = [ - { - sigla_unidade: "KG", - nome: "Quilograma", - sigla_normalizada: "KG", - normalizar: (valor) => valor, - tipo: "massa" - }, - { - sigla_unidade: "g", - nome: "Grama", - sigla_normalizada: "KG", - normalizar: (valor) => valor / 1e3, - tipo: "massa" - }, - { - sigla_unidade: "TON", - nome: "Tonelada", - sigla_normalizada: "KG", - normalizar: (valor) => valor * 1e3, - tipo: "massa" - }, - { - sigla_unidade: "Lt", - nome: "Litro", - sigla_normalizada: "Lt", - normalizar: (valor) => valor, - tipo: "volume" - }, - { - sigla_unidade: "M\xB3", - nome: "Metro C\xFAbico", - sigla_normalizada: "Lt", - normalizar: (valor) => valor * 1e3, - tipo: "volume" - }, - { - sigla_unidade: "UN", - nome: "Unidade", - sigla_normalizada: "UN", - normalizar: (valor) => valor, - tipo: "unidade" - } -]; - -const erUuid = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i; -const validarUuid = (uuid2) => { - const retorno = erUuid.test(String(uuid2 || "")); - return retorno; -}; -const uuidV3 = (chave, grupo) => { - return uuid$1.v3( - // Converte a chave para string (de forma segura) - typeof chave === "string" ? chave : typeof chave === "number" ? String(chave) : JSON.stringify(chave), - // Se um grupo foi fornecido, gera um UUID v3 recursivamente com base nele, senão usa NIL - grupo ? uuidV3(grupo) : uuid$1.NIL - ); -}; -const uuidV4 = uuid$1.v4; -const uuid = uuidV4; - -exports.TipagemRotas = TipagemRotas; -exports.aleatorio = aleatorio; -exports.cacheM = cacheM; -exports.cacheMFixo = cacheMFixo; -exports.cacheMemoria = cacheMemoria; -exports.camposComuns = camposComuns; -exports.cdn_carro_de_boi = cdn_carro_de_boi; -exports.dayjsbr = dayjsbr; -exports.defineCwd = defineCwd; -exports.erUuid = erUuid; -exports.esperar = esperar; -exports.extensoes = extensoes; -exports.graficos_pilao = graficos_pilao; -exports.localValor = localValor; -exports.logger = logger; -exports.nomeVariavel = nomeVariavel; -exports.objetoPg = objetoPg; -exports.operadores = operadores; -exports.paraObjetoRegistroPg = paraObjetoRegistroPg; -exports.pgObjeto = pgObjeto; -exports.postLogger = postLogger; -exports.siglas_unidades_medida = siglas_unidades_medida; -exports.texto_busca = texto_busca; -exports.tipoArquivo = tipoArquivo; -exports.tipoUsuarioResiduos = tipoUsuarioResiduos; -exports.tx = tx; -exports.umaFuncao = umaFuncao; -exports.umaVariavel = umaVariavel; -exports.unidades_medida = unidades_medida; -exports.uuid = uuid; -exports.uuidV3 = uuidV3; -exports.uuidV4 = uuidV4; -exports.uuid_null = uuid_null; -exports.validarUuid = validarUuid; -exports.verCacheM = verCacheM; -exports.zFiltro = zFiltro; -exports.zOperadores = zOperadores; diff --git a/dist/index.d.cts b/dist/index.d.cts deleted file mode 100644 index 59f9882..0000000 --- a/dist/index.d.cts +++ /dev/null @@ -1,315 +0,0 @@ -import z from 'zod'; -import dayjs from 'dayjs'; -export { ManipulateType } from 'dayjs'; -import { v4 } from 'uuid'; - -declare const aleatorio: (tamanho?: number) => string; - -/** gerar uma função de cache para uso em memoria */ -declare const cacheM: (chave: any, valor?: T, validadeSeg?: number) => T | undefined; -declare const verCacheM: () => { - [k: string]: { - /** new Date().getTime() */ - validade?: number | undefined; - valor: any; - } | undefined; -}; -declare const cacheMemoria: (chave: any, valor?: T, validadeSeg?: number) => T | undefined; -/** para uso fixo dentro de uma função, trava a chave */ -declare const cacheMFixo: (chave: any) => (valor?: T) => T | undefined; - -declare const uuid_null = "00000000-0000-0000-0000-000000000000"; -/** Colunas Presentes n maioria das tabelas */ -declare enum camposComuns { - codigo = "codigo", - excluido = "excluido", - data_hora_criacao = "data_hora_criacao", - data_hora_atualizacao = "data_hora_atualizacao", - codigo_usuario_criacao = "codigo_usuario_criacao", - codigo_usuario_atualizacao = "codigo_usuario_atualizacao", - versao = "versao" -} -/** Palavras comumente usadas */ -declare enum tx { - token = "token" -} -declare enum tipoUsuarioResiduos { - Usuario = "usuario", - Fornecedor = "fornecedor" -} - -declare enum operadores { - "=" = "=", - "!=" = "!=", - ">" = ">", - ">=" = ">=", - "<" = "<", - "<=" = "<=", - like = "like", - in = "in" -} -type tipoFiltro = { - coluna: string; - valor: any; - operador: keyof typeof operadores | operadores; - ou?: boolean; -}; -type interfaceConsulta = { - offset?: number; - limit?: number; - filtros?: tipoFiltro[]; - ordem?: string; - ordemTipo?: "asc" | "desc"; - colunas?: string[]; - apenasConsulta?: boolean; - apenasContagem?: boolean; -}; -declare const zOperadores: z.ZodEnum<{ - "=": "="; - "!=": "!="; - ">": ">"; - ">=": ">="; - "<": "<"; - "<=": "<="; - like: "like"; - in: "in"; -}>; -declare const zFiltro: z.ZodObject<{ - coluna: z.ZodString; - valor: z.ZodAny; - operador: z.ZodEnum<{ - "=": "="; - "!=": "!="; - ">": ">"; - ">=": ">="; - "<": "<"; - "<=": "<="; - like: "like"; - in: "in"; - }>; - ou: z.ZodOptional; -}, z.core.$strip>; - -declare const dayjsbr: typeof dayjs; - -declare const cdn_carro_de_boi = "https://carro-de-boi-idz-one.b-cdn.net"; - -type tiposArquivo = "imagem" | "documento" | "vídeo" | "outros"; -declare const extensoes: { - ext: string; - tipo: tiposArquivo; - mime: string; -}[]; -/** - * Função que retorna o tipo do arquivo - * @param nomeArquivo - * @returns - */ -declare const tipoArquivo: (nomeArquivo: string | null | undefined) => tiposArquivo; - -declare const graficos_pilao: { - [k: string]: { - grafico: string; - titulo: string; - }; -}; - -/** - * LocalStorage Tipado - * Lê ou grava um valor no localStorage, mantendo o tipo genérico . - */ -declare const localValor: (chave_: string | any, valor?: T | null) => T | null; - -type tipoLokiObjeto = { - streams: { - stream: { - [k: string]: string; - }; - values: [string, string][]; - }[]; -}; -declare const postLogger: ({ objeto, }: { - objeto: tipoLokiObjeto; -}) => Promise<[objeto: tipoLokiObjeto, erro?: string]>; -/** define a localização da pasta do projeto */ -declare const defineCwd: (novoCwd: string) => void; -type tipoLevel = "info" | "warn" | "error"; -type tipoOpSessao = { - inquilino: string; - usuario: string; - parametros?: { - [k: string]: string; - }; -}; -type tipoLog = { - detalhes?: unknown[]; - __filename?: string; - local?: string; - parametros?: { - [k: string]: string; - }; -}; -type tipoLoggerLog = (level: tipoLevel, mensagem: string, op_tipoLog?: tipoLog) => Promise<[objeto: tipoLokiObjeto, erro?: string]>; -type TipoLoggerSessao = (sess: tipoOpSessao) => tipoLoggerLog; -type tipoLogger = (amb: { - app: string; - eProducao: boolean; - parametros?: { - [k: string]: string; - }; -}) => TipoLoggerSessao; -declare const logger: tipoLogger; - -/** - * Trata um objeto para ser imput para postgres - * @param entrada - * @returns - */ -declare const paraObjetoRegistroPg: (entrada: { - [k: string]: any; -}) => { - [k: string]: string | boolean | null | undefined | number; -}; -declare const pgObjeto: (entrada: { - [k: string]: any; -}) => { - [k: string]: string | boolean | null | undefined | number; -}; -declare const objetoPg: (entrada: { - [k: string]: any; -}) => { - [k: string]: string | boolean | null | undefined | number; -}; - -declare const umaFuncao: () => string; - -declare const umaVariavel = "Ol\u00E1 Mundo! (vari\u00E1vel)"; - -/** gerar o texto de busca removendo caracteres especies e caixa alta */ -declare const texto_busca: (...texto: any[]) => string; - -/** Gerar uma classe que facilita a gestão de rotas com a tipagem das querys - * - * Definições: - * - * caminho = "/aplicacao/funcionalidade" - * - * endereco = "http://localhost:3000/aplicacao/funcionalidade" - * - * parametros = {nome:"José"} - */ -declare class TipagemRotas { - _partesCaminho: string[]; - _acaoIr?: (endereco: string) => undefined; - rotulo: string | undefined; - /** Ao criar novo obijeto de tipagem de rota é necessário passar o caminho parcial - ** export const mCaminho = new TipagemRotas<{q:string}>("aplicacao","funcionalidade") - */ - constructor({ caminho, acaoIr, rotulo, }: { - caminho: (string | null | undefined)[] | string; - acaoIr?: undefined | ((endereco: string) => undefined); - /** Rotulo da página - * Inicio | Controle - */ - rotulo?: string; - }); - /** Retorna o caminho completo da rota - ** console.log(mCaminho.caminho) - ** "/caminho" - */ - get caminho(): string; - /** Define o caminho completo da rota - ** mCaminho.caminho = "/novoCaminho" - ** console.log(mCaminho.caminho) - ** "/novoCaminho" - ** */ - set caminho(caminhoParcial: string); - /** Retorna o caminho completo da rota com a query - ** console.log(mCaminho.resolve({q:"query"})) - ** "http://localhost:3000/caminho?q=query" - */ - endereco(query: T, usarComoHash?: boolean): string; - /** Vai para a url - ** mCaminho.ir({q:"query"}) - ** window.location.href = "http://localhost:3000/caminho?q=query" - */ - ir(query: T): void; - /** Retorna os parametros da url - ** console.log(mCaminho.parametros()) - ** {q:"query"} - */ - parametros(urlEntrada?: string): Partial; -} - -/** - * Essa variável se conecta a tabela_lidades - * - * onde sigla se conecta com sigla - * - * Usuário terá mais opções de unidades, quando fazer o envio para o mtr, usar a opção fornecida pelo usuarios, caso não tenha - * usar a normalizada - */ -declare enum siglas_unidades_medida { - UN = "UN", - KG = "KG", - TON = "TON", - g = "g", - "M³" = "M\u00B3", - Lt = "Lt" -} -declare const unidades_medida: { - sigla_unidade: keyof typeof siglas_unidades_medida; - nome: string; - sigla_normalizada: keyof typeof siglas_unidades_medida; - normalizar: (valor: number) => number; - tipo: "massa" | "volume" | "comprimento" | "unidade"; -}[]; - -/** - * Valida se uma string é um UUID válido (qualquer versão). - * - * @param valor - A string que será validada. - * @returns booleano indicando se é um UUID válido. - */ -declare const erUuid: RegExp; -declare const validarUuid: (uuid: string | number | undefined | null) => boolean; -/** - * Gera um UUID determinístico (versão 3) com base em uma chave e um grupo (namespace). - * - * - Usa o algoritmo MD5 (RFC 4122). - * - Sempre retorna o mesmo UUID para a mesma combinação chave + grupo. - * - Caso o grupo não seja informado, usa o UUID "nil" como namespace. - * - * @param chave - Qualquer valor que será convertido em string para gerar o UUID (ex: número, string ou objeto). - * @param grupo - Opcional. Namespace para separar domínios diferentes de UUIDs. - * @returns UUID v3 (determinístico) - */ -declare const uuidV3: (chave: any, grupo?: any) => string; -/** - * Gera um UUID v4 (aleatório, não determinístico). - * - * - Usado quando unicidade é necessária, mas não se exige que seja previsível. - */ -declare const uuidV4: typeof v4; -/** - * @deprecated Esta variável será descontinuada em versões futuras. - * Use a função `uuidV4()` diretamente. - */ -declare const uuid: typeof v4; - -declare const esperar: (ms: number) => Promise; -/** - * Usado para retronat o no de uma variável, deve ser usado dentro de um objeto - * const nomex = {a: 1, b: 2} - * nomeVariavel({nomex}) // retorna "nomex" - * @param v - * @returns - */ -declare const nomeVariavel: (v: { - [key: string]: any; -}) => string; - -export { TipagemRotas, aleatorio, cacheM, cacheMFixo, cacheMemoria, camposComuns, cdn_carro_de_boi, dayjsbr, defineCwd, erUuid, esperar, extensoes, graficos_pilao, localValor, logger, nomeVariavel, objetoPg, operadores, paraObjetoRegistroPg, pgObjeto, postLogger, siglas_unidades_medida, texto_busca, tipoArquivo, tipoUsuarioResiduos, tx, umaFuncao, umaVariavel, unidades_medida, uuid, uuidV3, uuidV4, uuid_null, validarUuid, verCacheM, zFiltro, zOperadores }; -export type { TipoLoggerSessao, interfaceConsulta, tipoFiltro, tipoLogger, tipoLoggerLog, tipoLokiObjeto }; diff --git a/dist/index.d.mts b/dist/index.d.mts deleted file mode 100644 index 59f9882..0000000 --- a/dist/index.d.mts +++ /dev/null @@ -1,315 +0,0 @@ -import z from 'zod'; -import dayjs from 'dayjs'; -export { ManipulateType } from 'dayjs'; -import { v4 } from 'uuid'; - -declare const aleatorio: (tamanho?: number) => string; - -/** gerar uma função de cache para uso em memoria */ -declare const cacheM: (chave: any, valor?: T, validadeSeg?: number) => T | undefined; -declare const verCacheM: () => { - [k: string]: { - /** new Date().getTime() */ - validade?: number | undefined; - valor: any; - } | undefined; -}; -declare const cacheMemoria: (chave: any, valor?: T, validadeSeg?: number) => T | undefined; -/** para uso fixo dentro de uma função, trava a chave */ -declare const cacheMFixo: (chave: any) => (valor?: T) => T | undefined; - -declare const uuid_null = "00000000-0000-0000-0000-000000000000"; -/** Colunas Presentes n maioria das tabelas */ -declare enum camposComuns { - codigo = "codigo", - excluido = "excluido", - data_hora_criacao = "data_hora_criacao", - data_hora_atualizacao = "data_hora_atualizacao", - codigo_usuario_criacao = "codigo_usuario_criacao", - codigo_usuario_atualizacao = "codigo_usuario_atualizacao", - versao = "versao" -} -/** Palavras comumente usadas */ -declare enum tx { - token = "token" -} -declare enum tipoUsuarioResiduos { - Usuario = "usuario", - Fornecedor = "fornecedor" -} - -declare enum operadores { - "=" = "=", - "!=" = "!=", - ">" = ">", - ">=" = ">=", - "<" = "<", - "<=" = "<=", - like = "like", - in = "in" -} -type tipoFiltro = { - coluna: string; - valor: any; - operador: keyof typeof operadores | operadores; - ou?: boolean; -}; -type interfaceConsulta = { - offset?: number; - limit?: number; - filtros?: tipoFiltro[]; - ordem?: string; - ordemTipo?: "asc" | "desc"; - colunas?: string[]; - apenasConsulta?: boolean; - apenasContagem?: boolean; -}; -declare const zOperadores: z.ZodEnum<{ - "=": "="; - "!=": "!="; - ">": ">"; - ">=": ">="; - "<": "<"; - "<=": "<="; - like: "like"; - in: "in"; -}>; -declare const zFiltro: z.ZodObject<{ - coluna: z.ZodString; - valor: z.ZodAny; - operador: z.ZodEnum<{ - "=": "="; - "!=": "!="; - ">": ">"; - ">=": ">="; - "<": "<"; - "<=": "<="; - like: "like"; - in: "in"; - }>; - ou: z.ZodOptional; -}, z.core.$strip>; - -declare const dayjsbr: typeof dayjs; - -declare const cdn_carro_de_boi = "https://carro-de-boi-idz-one.b-cdn.net"; - -type tiposArquivo = "imagem" | "documento" | "vídeo" | "outros"; -declare const extensoes: { - ext: string; - tipo: tiposArquivo; - mime: string; -}[]; -/** - * Função que retorna o tipo do arquivo - * @param nomeArquivo - * @returns - */ -declare const tipoArquivo: (nomeArquivo: string | null | undefined) => tiposArquivo; - -declare const graficos_pilao: { - [k: string]: { - grafico: string; - titulo: string; - }; -}; - -/** - * LocalStorage Tipado - * Lê ou grava um valor no localStorage, mantendo o tipo genérico . - */ -declare const localValor: (chave_: string | any, valor?: T | null) => T | null; - -type tipoLokiObjeto = { - streams: { - stream: { - [k: string]: string; - }; - values: [string, string][]; - }[]; -}; -declare const postLogger: ({ objeto, }: { - objeto: tipoLokiObjeto; -}) => Promise<[objeto: tipoLokiObjeto, erro?: string]>; -/** define a localização da pasta do projeto */ -declare const defineCwd: (novoCwd: string) => void; -type tipoLevel = "info" | "warn" | "error"; -type tipoOpSessao = { - inquilino: string; - usuario: string; - parametros?: { - [k: string]: string; - }; -}; -type tipoLog = { - detalhes?: unknown[]; - __filename?: string; - local?: string; - parametros?: { - [k: string]: string; - }; -}; -type tipoLoggerLog = (level: tipoLevel, mensagem: string, op_tipoLog?: tipoLog) => Promise<[objeto: tipoLokiObjeto, erro?: string]>; -type TipoLoggerSessao = (sess: tipoOpSessao) => tipoLoggerLog; -type tipoLogger = (amb: { - app: string; - eProducao: boolean; - parametros?: { - [k: string]: string; - }; -}) => TipoLoggerSessao; -declare const logger: tipoLogger; - -/** - * Trata um objeto para ser imput para postgres - * @param entrada - * @returns - */ -declare const paraObjetoRegistroPg: (entrada: { - [k: string]: any; -}) => { - [k: string]: string | boolean | null | undefined | number; -}; -declare const pgObjeto: (entrada: { - [k: string]: any; -}) => { - [k: string]: string | boolean | null | undefined | number; -}; -declare const objetoPg: (entrada: { - [k: string]: any; -}) => { - [k: string]: string | boolean | null | undefined | number; -}; - -declare const umaFuncao: () => string; - -declare const umaVariavel = "Ol\u00E1 Mundo! (vari\u00E1vel)"; - -/** gerar o texto de busca removendo caracteres especies e caixa alta */ -declare const texto_busca: (...texto: any[]) => string; - -/** Gerar uma classe que facilita a gestão de rotas com a tipagem das querys - * - * Definições: - * - * caminho = "/aplicacao/funcionalidade" - * - * endereco = "http://localhost:3000/aplicacao/funcionalidade" - * - * parametros = {nome:"José"} - */ -declare class TipagemRotas { - _partesCaminho: string[]; - _acaoIr?: (endereco: string) => undefined; - rotulo: string | undefined; - /** Ao criar novo obijeto de tipagem de rota é necessário passar o caminho parcial - ** export const mCaminho = new TipagemRotas<{q:string}>("aplicacao","funcionalidade") - */ - constructor({ caminho, acaoIr, rotulo, }: { - caminho: (string | null | undefined)[] | string; - acaoIr?: undefined | ((endereco: string) => undefined); - /** Rotulo da página - * Inicio | Controle - */ - rotulo?: string; - }); - /** Retorna o caminho completo da rota - ** console.log(mCaminho.caminho) - ** "/caminho" - */ - get caminho(): string; - /** Define o caminho completo da rota - ** mCaminho.caminho = "/novoCaminho" - ** console.log(mCaminho.caminho) - ** "/novoCaminho" - ** */ - set caminho(caminhoParcial: string); - /** Retorna o caminho completo da rota com a query - ** console.log(mCaminho.resolve({q:"query"})) - ** "http://localhost:3000/caminho?q=query" - */ - endereco(query: T, usarComoHash?: boolean): string; - /** Vai para a url - ** mCaminho.ir({q:"query"}) - ** window.location.href = "http://localhost:3000/caminho?q=query" - */ - ir(query: T): void; - /** Retorna os parametros da url - ** console.log(mCaminho.parametros()) - ** {q:"query"} - */ - parametros(urlEntrada?: string): Partial; -} - -/** - * Essa variável se conecta a tabela_lidades - * - * onde sigla se conecta com sigla - * - * Usuário terá mais opções de unidades, quando fazer o envio para o mtr, usar a opção fornecida pelo usuarios, caso não tenha - * usar a normalizada - */ -declare enum siglas_unidades_medida { - UN = "UN", - KG = "KG", - TON = "TON", - g = "g", - "M³" = "M\u00B3", - Lt = "Lt" -} -declare const unidades_medida: { - sigla_unidade: keyof typeof siglas_unidades_medida; - nome: string; - sigla_normalizada: keyof typeof siglas_unidades_medida; - normalizar: (valor: number) => number; - tipo: "massa" | "volume" | "comprimento" | "unidade"; -}[]; - -/** - * Valida se uma string é um UUID válido (qualquer versão). - * - * @param valor - A string que será validada. - * @returns booleano indicando se é um UUID válido. - */ -declare const erUuid: RegExp; -declare const validarUuid: (uuid: string | number | undefined | null) => boolean; -/** - * Gera um UUID determinístico (versão 3) com base em uma chave e um grupo (namespace). - * - * - Usa o algoritmo MD5 (RFC 4122). - * - Sempre retorna o mesmo UUID para a mesma combinação chave + grupo. - * - Caso o grupo não seja informado, usa o UUID "nil" como namespace. - * - * @param chave - Qualquer valor que será convertido em string para gerar o UUID (ex: número, string ou objeto). - * @param grupo - Opcional. Namespace para separar domínios diferentes de UUIDs. - * @returns UUID v3 (determinístico) - */ -declare const uuidV3: (chave: any, grupo?: any) => string; -/** - * Gera um UUID v4 (aleatório, não determinístico). - * - * - Usado quando unicidade é necessária, mas não se exige que seja previsível. - */ -declare const uuidV4: typeof v4; -/** - * @deprecated Esta variável será descontinuada em versões futuras. - * Use a função `uuidV4()` diretamente. - */ -declare const uuid: typeof v4; - -declare const esperar: (ms: number) => Promise; -/** - * Usado para retronat o no de uma variável, deve ser usado dentro de um objeto - * const nomex = {a: 1, b: 2} - * nomeVariavel({nomex}) // retorna "nomex" - * @param v - * @returns - */ -declare const nomeVariavel: (v: { - [key: string]: any; -}) => string; - -export { TipagemRotas, aleatorio, cacheM, cacheMFixo, cacheMemoria, camposComuns, cdn_carro_de_boi, dayjsbr, defineCwd, erUuid, esperar, extensoes, graficos_pilao, localValor, logger, nomeVariavel, objetoPg, operadores, paraObjetoRegistroPg, pgObjeto, postLogger, siglas_unidades_medida, texto_busca, tipoArquivo, tipoUsuarioResiduos, tx, umaFuncao, umaVariavel, unidades_medida, uuid, uuidV3, uuidV4, uuid_null, validarUuid, verCacheM, zFiltro, zOperadores }; -export type { TipoLoggerSessao, interfaceConsulta, tipoFiltro, tipoLogger, tipoLoggerLog, tipoLokiObjeto }; diff --git a/dist/index.d.ts b/dist/index.d.ts deleted file mode 100644 index 240f49d..0000000 --- a/dist/index.d.ts +++ /dev/null @@ -1,315 +0,0 @@ -import z from 'zod'; -import dayjs from 'dayjs'; -export { ManipulateType } from 'dayjs'; -import { v4 } from 'uuid'; - -declare const aleatorio: (tamanho?: number) => string; - -/** gerar uma função de cache para uso em memoria */ -declare const cacheM: (chave: any, valor?: T, validadeSeg?: number) => T | undefined; -declare const verCacheM: () => { - [k: string]: { - /** new Date().getTime() */ - validade?: number | undefined; - valor: any; - } | undefined; -}; -declare const cacheMemoria: (chave: any, valor?: T, validadeSeg?: number) => T | undefined; -/** para uso fixo dentro de uma função, trava a chave */ -declare const cacheMFixo: (chave: any) => (valor?: T) => T | undefined; - -declare const uuid_null = "00000000-0000-0000-0000-000000000000"; -/** Colunas Presentes n maioria das tabelas */ -declare enum camposComuns { - codigo = "codigo", - excluido = "excluido", - data_hora_criacao = "data_hora_criacao", - data_hora_atualizacao = "data_hora_atualizacao", - codigo_usuario_criacao = "codigo_usuario_criacao", - codigo_usuario_atualizacao = "codigo_usuario_atualizacao", - versao = "versao" -} -/** Palavras comumente usadas */ -declare enum tx { - token = "token" -} -declare enum tipoUsuarioResiduos { - Usuario = "usuario", - Fornecedor = "fornecedor" -} - -declare enum operadores { - "=" = "=", - "!=" = "!=", - ">" = ">", - ">=" = ">=", - "<" = "<", - "<=" = "<=", - like = "like", - in = "in" -} -type tipoFiltro = { - coluna: string; - valor: any; - operador: keyof typeof operadores | operadores; - ou?: boolean; -}; -type interfaceConsulta = { - offset?: number; - limit?: number; - filtros?: tipoFiltro[]; - ordem?: string; - ordemTipo?: "asc" | "desc"; - colunas?: string[]; - apenasConsulta?: boolean; - apenasContagem?: boolean; -}; -declare const zOperadores: z.ZodEnum<{ - "=": "="; - "!=": "!="; - ">": ">"; - ">=": ">="; - "<": "<"; - "<=": "<="; - like: "like"; - in: "in"; -}>; -declare const zFiltro: z.ZodObject<{ - coluna: z.ZodString; - valor: z.ZodAny; - operador: z.ZodEnum<{ - "=": "="; - "!=": "!="; - ">": ">"; - ">=": ">="; - "<": "<"; - "<=": "<="; - like: "like"; - in: "in"; - }>; - ou: z.ZodOptional; -}, z.core.$strip>; - -declare const dayjsbr: typeof dayjs; - -declare const cdn_carro_de_boi = "https://carro-de-boi-idz-one.b-cdn.net"; - -type tiposArquivo = "imagem" | "documento" | "vídeo" | "outros"; -declare const extensoes: { - ext: string; - tipo: tiposArquivo; - mime: string; -}[]; -/** - * Função que retorna o tipo do arquivo - * @param nomeArquivo - * @returns - */ -declare const tipoArquivo: (nomeArquivo: string | null | undefined) => tiposArquivo; - -declare const graficos_pilao: { - [k: string]: { - grafico: string; - titulo: string; - }; -}; - -/** - * LocalStorage Tipado - * Lê ou grava um valor no localStorage, mantendo o tipo genérico . - */ -declare const localValor: (chave_: string | any, valor?: T | null) => T | null; - -type tipoLokiObjeto = { - streams: { - stream: { - [k: string]: string; - }; - values: [string, string][]; - }[]; -}; -declare const postLogger: ({ objeto, }: { - objeto: tipoLokiObjeto; -}) => Promise<[objeto: tipoLokiObjeto, erro?: string]>; -/** define a localização da pasta do projeto */ -declare const defineCwd: (novoCwd: string) => void; -type tipoLevel = "info" | "warn" | "error"; -type tipoOpSessao = { - inquilino: string; - usuario: string; - parametros?: { - [k: string]: string; - }; -}; -type tipoLog = { - detalhes?: unknown[]; - __filename?: string; - local?: string; - parametros?: { - [k: string]: string; - }; -}; -type tipoLoggerLog = (level: tipoLevel, mensagem: string, op_tipoLog?: tipoLog) => Promise<[objeto: tipoLokiObjeto, erro?: string]>; -type TipoLoggerSessao = (sess: tipoOpSessao) => tipoLoggerLog; -type tipoLogger = (amb: { - app: string; - eProducao: boolean; - parametros?: { - [k: string]: string; - }; -}) => TipoLoggerSessao; -declare const logger: tipoLogger; - -/** - * Trata um objeto para ser imput para postgres - * @param entrada - * @returns - */ -declare const paraObjetoRegistroPg: (entrada: { - [k: string]: any; -}) => { - [k: string]: string | boolean | null | undefined | number; -}; -declare const pgObjeto: (entrada: { - [k: string]: any; -}) => { - [k: string]: string | boolean | null | undefined | number; -}; -declare const objetoPg: (entrada: { - [k: string]: any; -}) => { - [k: string]: string | boolean | null | undefined | number; -}; - -declare const umaFuncao: () => string; - -declare const umaVariavel = "Ol\u00E1 Mundo! (vari\u00E1vel)"; - -/** gerar o texto de busca removendo caracteres especies e caixa alta */ -declare const texto_busca: (...texto: any[]) => string; - -/** Gerar uma classe que facilita a gestão de rotas com a tipagem das querys - * - * Definições: - * - * caminho = "/aplicacao/funcionalidade" - * - * endereco = "http://localhost:3000/aplicacao/funcionalidade" - * - * parametros = {nome:"José"} - */ -declare class TipagemRotas { - _partesCaminho: string[]; - _acaoIr?: (endereco: string) => undefined; - rotulo: string | undefined; - /** Ao criar novo obijeto de tipagem de rota é necessário passar o caminho parcial - ** export const mCaminho = new TipagemRotas<{q:string}>("aplicacao","funcionalidade") - */ - constructor({ caminho, acaoIr, rotulo, }: { - caminho: (string | null | undefined)[] | string; - acaoIr?: undefined | ((endereco: string) => undefined); - /** Rotulo da página - * Inicio | Controle - */ - rotulo?: string; - }); - /** Retorna o caminho completo da rota - ** console.log(mCaminho.caminho) - ** "/caminho" - */ - get caminho(): string; - /** Define o caminho completo da rota - ** mCaminho.caminho = "/novoCaminho" - ** console.log(mCaminho.caminho) - ** "/novoCaminho" - ** */ - set caminho(caminhoParcial: string); - /** Retorna o caminho completo da rota com a query - ** console.log(mCaminho.resolve({q:"query"})) - ** "http://localhost:3000/caminho?q=query" - */ - endereco(query: T, usarComoHash?: boolean): string; - /** Vai para a url - ** mCaminho.ir({q:"query"}) - ** window.location.href = "http://localhost:3000/caminho?q=query" - */ - ir(query: T): void; - /** Retorna os parametros da url - ** console.log(mCaminho.parametros()) - ** {q:"query"} - */ - parametros(urlEntrada?: string): Partial; -} - -/** - * Essa variável se conecta a tabela_lidades - * - * onde sigla se conecta com sigla - * - * Usuário terá mais opções de unidades, quando fazer o envio para o mtr, usar a opção fornecida pelo usuarios, caso não tenha - * usar a normalizada - */ -declare enum siglas_unidades_medida { - UN = "UN", - KG = "KG", - TON = "TON", - g = "g", - "M³" = "M\u00B3", - Lt = "Lt" -} -declare const unidades_medida: { - sigla_unidade: keyof typeof siglas_unidades_medida; - nome: string; - sigla_normalizada: keyof typeof siglas_unidades_medida; - normalizar: (valor: number) => number; - tipo: "massa" | "volume" | "comprimento" | "unidade"; -}[]; - -/** - * Valida se uma string é um UUID válido (qualquer versão). - * - * @param valor - A string que será validada. - * @returns booleano indicando se é um UUID válido. - */ -declare const erUuid: RegExp; -declare const validarUuid: (uuid: string | number | undefined | null) => boolean; -/** - * Gera um UUID determinístico (versão 3) com base em uma chave e um grupo (namespace). - * - * - Usa o algoritmo MD5 (RFC 4122). - * - Sempre retorna o mesmo UUID para a mesma combinação chave + grupo. - * - Caso o grupo não seja informado, usa o UUID "nil" como namespace. - * - * @param chave - Qualquer valor que será convertido em string para gerar o UUID (ex: número, string ou objeto). - * @param grupo - Opcional. Namespace para separar domínios diferentes de UUIDs. - * @returns UUID v3 (determinístico) - */ -declare const uuidV3: (chave: any, grupo?: any) => string; -/** - * Gera um UUID v4 (aleatório, não determinístico). - * - * - Usado quando unicidade é necessária, mas não se exige que seja previsível. - */ -declare const uuidV4: typeof v4; -/** - * @deprecated Esta variável será descontinuada em versões futuras. - * Use a função `uuidV4()` diretamente. - */ -declare const uuid: typeof v4; - -declare const esperar: (ms: number) => Promise; -/** - * Usado para retronat o no de uma variável, deve ser usado dentro de um objeto - * const nomex = {a: 1, b: 2} - * nomeVariavel({nomex}) // retorna "nomex" - * @param v - * @returns - */ -declare const nomeVariavel: (v: { - [key: string]: any; -}) => string; - -export { TipagemRotas, aleatorio, cacheM, cacheMFixo, cacheMemoria, camposComuns, cdn_carro_de_boi, dayjsbr, defineCwd, erUuid, esperar, extensoes, graficos_pilao, localValor, logger, nomeVariavel, objetoPg, operadores, paraObjetoRegistroPg, pgObjeto, postLogger, siglas_unidades_medida, texto_busca, tipoArquivo, tipoUsuarioResiduos, tx, umaFuncao, umaVariavel, unidades_medida, uuid, uuidV3, uuidV4, uuid_null, validarUuid, verCacheM, zFiltro, zOperadores }; -export type { TipoLoggerSessao, interfaceConsulta, tipoFiltro, tipoLogger, tipoLoggerLog, tipoLokiObjeto }; \ No newline at end of file diff --git a/dist/index.mjs b/dist/index.mjs deleted file mode 100644 index 5adb137..0000000 --- a/dist/index.mjs +++ /dev/null @@ -1,548 +0,0 @@ -import z from 'zod'; -import dayjs from 'dayjs'; -import duration from 'dayjs/plugin/duration.js'; -import isSameOrAfter from 'dayjs/plugin/isSameOrAfter.js'; -import isSameOrBefore from 'dayjs/plugin/isSameOrBefore.js'; -import minMax from 'dayjs/plugin/minMax.js'; -import relativeTime from 'dayjs/plugin/relativeTime.js'; -import timezone from 'dayjs/plugin/timezone.js'; -import utc from 'dayjs/plugin/utc.js'; -import weekOfYear from 'dayjs/plugin/weekOfYear.js'; -import 'dayjs/locale/pt-br.js'; -import crossFetch from 'cross-fetch'; -import { v4, v3, NIL } from 'uuid'; - -const alfabeto = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".split(""); -const aleatorio = (tamanho) => `eli-${Array.from({ length: tamanho || 8 }).map(() => alfabeto[(999 * Math.random() | 0) % alfabeto.length]).join("")}`; - -const _cache = {}; -globalThis.cacheMemoria_cache = _cache; -const cacheM = (chave, valor, validadeSeg) => { - const txChave = typeof chave == "string" ? chave : typeof chave == "number" ? String(chave) : encodeURIComponent(JSON.stringify(chave)); - const validade = validadeSeg && (/* @__PURE__ */ new Date()).getTime() + validadeSeg * 1e3; - if (valor !== void 0) { - _cache[txChave] = { - valor, - validade - }; - } - const busca = _cache[txChave]; - if (busca?.validade && busca.validade < (/* @__PURE__ */ new Date()).getTime()) { - return void 0; - } - return busca?.valor; -}; -const verCacheM = () => _cache; -const cacheMemoria = cacheM; -const cacheMFixo = (chave) => (valor) => cacheM(chave, valor); - -const uuid_null = "00000000-0000-0000-0000-000000000000"; -var camposComuns = /* @__PURE__ */ ((camposComuns2) => { - camposComuns2["codigo"] = "codigo"; - camposComuns2["excluido"] = "excluido"; - camposComuns2["data_hora_criacao"] = "data_hora_criacao"; - camposComuns2["data_hora_atualizacao"] = "data_hora_atualizacao"; - camposComuns2["codigo_usuario_criacao"] = "codigo_usuario_criacao"; - camposComuns2["codigo_usuario_atualizacao"] = "codigo_usuario_atualizacao"; - camposComuns2["versao"] = "versao"; - return camposComuns2; -})(camposComuns || {}); -var tx = /* @__PURE__ */ ((tx2) => { - tx2["token"] = "token"; - return tx2; -})(tx || {}); -var tipoUsuarioResiduos = /* @__PURE__ */ ((tipoUsuarioResiduos2) => { - tipoUsuarioResiduos2["Usuario"] = "usuario"; - tipoUsuarioResiduos2["Fornecedor"] = "fornecedor"; - return tipoUsuarioResiduos2; -})(tipoUsuarioResiduos || {}); - -var operadores = /* @__PURE__ */ ((operadores2) => { - operadores2["="] = "="; - operadores2["!="] = "!="; - operadores2[">"] = ">"; - operadores2[">="] = ">="; - operadores2["<"] = "<"; - operadores2["<="] = "<="; - operadores2["like"] = "like"; - operadores2["in"] = "in"; - return operadores2; -})(operadores || {}); -const zOperadores = z.enum([ - "=", - "!=", - ">", - ">=", - "<", - "<=", - "like", - "in" -]); -const zFiltro = z.object({ - coluna: z.string(), - valor: z.any(), - operador: zOperadores, - ou: z.boolean().optional() -}); - -dayjs.locale("pt-br"); -dayjs.extend(utc); -dayjs.extend(timezone); -dayjs.extend(weekOfYear); -dayjs.extend(isSameOrBefore); -dayjs.extend(isSameOrAfter); -dayjs.extend(minMax); -dayjs.extend(relativeTime); -dayjs.extend(duration); -const dayjsbr = dayjs; - -const cdn_carro_de_boi = "https://carro-de-boi-idz-one.b-cdn.net"; - -const extensoes = [ - { - ext: "gif", - tipo: "imagem", - mime: "image/gif" - }, - { - ext: "jpg", - tipo: "imagem", - mime: "image/jpeg" - }, - { - ext: "jpeg", - tipo: "imagem", - mime: "image/jpeg" - }, - { - ext: "png", - tipo: "imagem", - mime: "image/png" - }, - { - ext: "bmp", - tipo: "imagem", - mime: "image/bmp" - }, - { - ext: "webp", - tipo: "imagem", - mime: "image/webp" - }, - { - ext: "tiff", - tipo: "imagem", - mime: "image/tiff" - }, - { - ext: "svg", - tipo: "imagem", - mime: "image/svg+xml" - }, - { - ext: "ico", - tipo: "imagem", - mime: "image/x-icon" - }, - { - ext: "pdf", - tipo: "documento", - mime: "application/pdf" - }, - { - ext: "doc", - tipo: "documento", - mime: "application/msword" - }, - { - ext: "docx", - tipo: "documento", - mime: "application/vnd.openxmlformats-officedocument.wordprocessingml.document" - }, - { - ext: "xls", - tipo: "documento", - mime: "application/vnd.ms-excel" - }, - { - ext: "xlsx", - tipo: "documento", - mime: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" - }, - { - ext: "ppt", - tipo: "documento", - mime: "application/vnd.ms-powerpoint" - }, - { - ext: "pptx", - tipo: "documento", - mime: "application/vnd.openxmlformats-officedocument.presentationml.presentation" - }, - { - ext: "txt", - tipo: "documento", - mime: "text/plain" - }, - { - ext: "odt", - tipo: "documento", - mime: "application/vnd.oasis.opendocument.text" - }, - { - ext: "ods", - tipo: "documento", - mime: "application/vnd.oasis.opendocument.spreadsheet" - }, - { - ext: "rtf", - tipo: "documento", - mime: "application/rtf" - }, - { - ext: "csv", - tipo: "documento", - mime: "text/csv" - }, - { - ext: "mp4", - tipo: "v\xEDdeo", - mime: "video/mp4" - }, - { - ext: "avi", - tipo: "v\xEDdeo", - mime: "video/x-msvideo" - }, - { - ext: "mkv", - tipo: "v\xEDdeo", - mime: "video/x-matroska" - }, - { - ext: "mov", - tipo: "v\xEDdeo", - mime: "video/quicktime" - }, - { - ext: "wmv", - tipo: "v\xEDdeo", - mime: "video/x-ms-wmv" - }, - { - ext: "flv", - tipo: "v\xEDdeo", - mime: "video/x-flv" - }, - { - ext: "webm", - tipo: "v\xEDdeo", - mime: "video/webm" - }, - { - ext: "3gp", - tipo: "v\xEDdeo", - mime: "video/3gpp" - }, - { - ext: "mpeg", - tipo: "v\xEDdeo", - mime: "video/mpeg" - } -]; -const tipoArquivo = (nomeArquivo) => { - const extArquivo = String(nomeArquivo || "").toLocaleLowerCase().split(".").pop(); - const extensao = extensoes.find((extensao2) => extensao2.ext === extArquivo); - return extensao?.tipo || "outros"; -}; - -const graficos_pilao = { - Condicionantes: { - grafico: "condicionantes-criadas", - titulo: "Condicionantes Criadas" - }, - Licen\u00E7as: { - grafico: "licencas-criadas", - titulo: "Licen\xE7as Criadas" - } -}; - -const localValor = (chave_, valor) => { - const localStorage = globalThis.localStorage; - if (typeof localStorage == "undefined") return null; - const chave = typeof chave_ === "string" ? chave_ : encodeURIComponent(JSON.stringify(chave_)); - try { - if (valor !== void 0) { - localStorage.setItem(chave, JSON.stringify(valor)); - } - const v2 = localStorage.getItem(chave); - if (v2 === null) return null; - try { - return JSON.parse(v2); - } catch { - return v2; - } - } catch { - return null; - } -}; - -const esperar = (ms) => new Promise( - (resolve) => setTimeout(() => resolve(true), ms) -); -const nomeVariavel = (v) => Object.keys(v).join("/"); - -const LOKI_BASE_URL = "https://log.idz.one"; -const LOKI_ENDPOINT = "/loki/api/v1/push"; -const postLogger = async ({ - objeto -}) => { - const response = await crossFetch(`${LOKI_BASE_URL}${LOKI_ENDPOINT}`, { - method: "POST", - headers: { "Content-Type": "application/json" }, - body: JSON.stringify(objeto) - }).catch((a) => a); - if (!response.ok) { - return [objeto, `Erro ${response.status}: ${await response?.text?.()}`]; - } - return [objeto]; -}; -let cwd = ""; -const defineCwd = (novoCwd) => { - cwd = novoCwd; -}; -const logger = ({ app: app_e, eProducao, parametros: parametrosAmbiente }) => ({ inquilino, usuario, parametros: parametrosSessao }) => async (level, mensagem, op_tipoLog) => { - let { - __filename, - detalhes, - local, - parametros: parametrosLog - } = op_tipoLog || {}; - const app = `${eProducao ? "" : "DEV-"}${app_e}`; - if (cwd && __filename) { - __filename = __filename.replace(cwd, ""); - } - if (local) { - detalhes = [`${nomeVariavel({ local })}="${local}"`, ...detalhes || []]; - } - if (__filename) { - detalhes = [ - `${nomeVariavel({ __filename })}="${__filename}"`, - ...detalhes || [] - ]; - } - const timestamp = `${Date.now()}000000`; - const mainLog = detalhes?.length ? `${mensagem} | ${detalhes.map((d) => JSON.stringify(d)).join(" | ")}` : mensagem; - const payload = { - stream: { - app, - inquilino, - usuario, - level, - ...parametrosAmbiente || {}, - ...parametrosSessao || {}, - ...parametrosLog || {} - }, - values: [ - [ - timestamp, - mainLog - // Linha de log direta - ] - ] - }; - const objeto = { streams: [payload] }; - const response = await postLogger({ objeto }); - return response; -}; - -const paraObjetoRegistroPg = (entrada) => { - try { - return Object.fromEntries( - Object.entries(entrada).map(([k, v]) => [ - k, - v === void 0 || v == null ? v : typeof v == "string" || typeof v == "number" || typeof v == "boolean" ? v : JSON.stringify(v, null, 2) - ]) - ); - } catch (error) { - throw new Error( - `Erro na fun\xE7\xE3o paraObjetoRegistroPg: ${error.message} ${error.stack}` - ); - } -}; -const pgObjeto = paraObjetoRegistroPg; -const objetoPg = paraObjetoRegistroPg; - -const umaFuncao = () => "Ol\xE1 Mundo! (fun\xE7\xE3o)"; - -const umaVariavel = "Ol\xE1 Mundo! (vari\xE1vel)"; - -const texto_busca = (...texto) => texto.map( - (txt) => txt === null || txt === void 0 ? "" : String(txt).normalize("NFD").replace(/[\u0300-\u036f]/g, "").replace(/\s+/g, " ").toLowerCase() -).join(" "); - -class TipagemRotas { - _partesCaminho = []; - _acaoIr; - rotulo; - /** Ao criar novo obijeto de tipagem de rota é necessário passar o caminho parcial - ** export const mCaminho = new TipagemRotas<{q:string}>("aplicacao","funcionalidade") - */ - constructor({ - caminho, - acaoIr, - rotulo - }) { - this._acaoIr = acaoIr; - this._partesCaminho = (Array.isArray(caminho) ? caminho : [caminho]).filter(Boolean).map((a) => String(a)).flatMap((a) => a.split("/")).filter(Boolean); - this.rotulo = rotulo; - } - /** Retorna o caminho completo da rota - ** console.log(mCaminho.caminho) - ** "/caminho" - */ - get caminho() { - const ret = `/${this._partesCaminho.join("/")}`; - return ret; - } - /** Define o caminho completo da rota - ** mCaminho.caminho = "/novoCaminho" - ** console.log(mCaminho.caminho) - ** "/novoCaminho" - ** */ - set caminho(caminhoParcial) { - this._partesCaminho = caminhoParcial.split("/").filter((parte) => parte); - } - /** Retorna o caminho completo da rota com a query - ** console.log(mCaminho.resolve({q:"query"})) - ** "http://localhost:3000/caminho?q=query" - */ - endereco(query, usarComoHash) { - const url = new URL( - typeof window !== "undefined" ? window.location.href : "http://localhost" - ); - url.pathname = this.caminho; - url.search = ""; - const queryKeys = Object.entries(query); - for (const [key, value] of queryKeys) { - url.searchParams.set(String(key), JSON.stringify(value)); - } - url.hash = ""; - if (usarComoHash) { - url.hash = `#${url.search}`; - url.search = ""; - } - return url.href; - } - /** Vai para a url - ** mCaminho.ir({q:"query"}) - ** window.location.href = "http://localhost:3000/caminho?q=query" - */ - ir(query) { - if (this._acaoIr) { - this._acaoIr(this.endereco({ ...query })); - } else { - if (typeof window != "undefined") { - window.location.href = this.endereco({ ...query }); - } - } - } - /** Retorna os parametros da url - ** console.log(mCaminho.parametros()) - ** {q:"query"} - */ - parametros(urlEntrada) { - const url = urlEntrada ? new URL(urlEntrada) : new URL( - typeof window !== "undefined" ? window.location.href : "http://localhost" - ); - const query = url.searchParams; - let queryObj = Object.fromEntries(query.entries()); - const hash = url.hash; - if (hash) { - const hashObj = Object.fromEntries( - new URLSearchParams(hash.slice(1)).entries() - ); - queryObj = { ...queryObj, ...hashObj }; - } - for (const chave in queryObj) { - try { - queryObj[chave] = JSON.parse(queryObj[chave]); - } catch { - console.log(`[${chave}|${queryObj[chave]}] n\xE3o \xE9 um json v\xE1lido.`); - } - } - return queryObj; - } -} - -var siglas_unidades_medida = /* @__PURE__ */ ((siglas_unidades_medida2) => { - siglas_unidades_medida2["UN"] = "UN"; - siglas_unidades_medida2["KG"] = "KG"; - siglas_unidades_medida2["TON"] = "TON"; - siglas_unidades_medida2["g"] = "g"; - siglas_unidades_medida2["M\xB3"] = "M\xB3"; - siglas_unidades_medida2["Lt"] = "Lt"; - return siglas_unidades_medida2; -})(siglas_unidades_medida || {}); -const unidades_medida = [ - { - sigla_unidade: "KG", - nome: "Quilograma", - sigla_normalizada: "KG", - normalizar: (valor) => valor, - tipo: "massa" - }, - { - sigla_unidade: "g", - nome: "Grama", - sigla_normalizada: "KG", - normalizar: (valor) => valor / 1e3, - tipo: "massa" - }, - { - sigla_unidade: "TON", - nome: "Tonelada", - sigla_normalizada: "KG", - normalizar: (valor) => valor * 1e3, - tipo: "massa" - }, - { - sigla_unidade: "Lt", - nome: "Litro", - sigla_normalizada: "Lt", - normalizar: (valor) => valor, - tipo: "volume" - }, - { - sigla_unidade: "M\xB3", - nome: "Metro C\xFAbico", - sigla_normalizada: "Lt", - normalizar: (valor) => valor * 1e3, - tipo: "volume" - }, - { - sigla_unidade: "UN", - nome: "Unidade", - sigla_normalizada: "UN", - normalizar: (valor) => valor, - tipo: "unidade" - } -]; - -const erUuid = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i; -const validarUuid = (uuid2) => { - const retorno = erUuid.test(String(uuid2 || "")); - return retorno; -}; -const uuidV3 = (chave, grupo) => { - return v3( - // Converte a chave para string (de forma segura) - typeof chave === "string" ? chave : typeof chave === "number" ? String(chave) : JSON.stringify(chave), - // Se um grupo foi fornecido, gera um UUID v3 recursivamente com base nele, senão usa NIL - grupo ? uuidV3(grupo) : NIL - ); -}; -const uuidV4 = v4; -const uuid = uuidV4; - -export { TipagemRotas, aleatorio, cacheM, cacheMFixo, cacheMemoria, camposComuns, cdn_carro_de_boi, dayjsbr, defineCwd, erUuid, esperar, extensoes, graficos_pilao, localValor, logger, nomeVariavel, objetoPg, operadores, paraObjetoRegistroPg, pgObjeto, postLogger, siglas_unidades_medida, texto_busca, tipoArquivo, tipoUsuarioResiduos, tx, umaFuncao, umaVariavel, unidades_medida, uuid, uuidV3, uuidV4, uuid_null, validarUuid, verCacheM, zFiltro, zOperadores }; diff --git a/dist/situacoes/index.d.ts b/dist/situacoes/index.d.ts deleted file mode 100644 index 195b8f6..0000000 --- a/dist/situacoes/index.d.ts +++ /dev/null @@ -1 +0,0 @@ -export * from "./situacoes"; diff --git a/dist/situacoes/index.js b/dist/situacoes/index.js deleted file mode 100644 index fc8a170..0000000 --- a/dist/situacoes/index.js +++ /dev/null @@ -1,18 +0,0 @@ -"use strict"; -var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - var desc = Object.getOwnPropertyDescriptor(m, k); - if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { - desc = { enumerable: true, get: function() { return m[k]; } }; - } - Object.defineProperty(o, k2, desc); -}) : (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - o[k2] = m[k]; -})); -var __exportStar = (this && this.__exportStar) || function(m, exports) { - for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -__exportStar(require("./situacoes"), exports); -//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/dist/situacoes/index.js.map b/dist/situacoes/index.js.map deleted file mode 100644 index bfc8eb5..0000000 --- a/dist/situacoes/index.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/situacoes/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,8CAA2B"} \ No newline at end of file diff --git a/dist/situacoes/situacoes.d.ts b/dist/situacoes/situacoes.d.ts deleted file mode 100644 index d27e3c7..0000000 --- a/dist/situacoes/situacoes.d.ts +++ /dev/null @@ -1,51 +0,0 @@ -export declare enum tiposSituacoes { - vencida = "100_vencida", - expirado = "200_expirado", - alerta = "300_alerta", - protocoladafora = "350_protocoladafora", - protocolada = "400_protocolada", - protocoladaApenas = "430_protocolada", - protocolada_alteracao = "450_protocolada", - prazo = "500_prazo", - emitida = "515_emitida", - valida = "518_valida", - novo = "520_novo", - recebido = "521_recebido", - em_andamento = "530_em_andamento", - aguardando = "530_aguardando", - aguardandoresposta = "540_aguardandoresposta", - suspensaotemporaria = "540_suspensaotemporaria", - cancelada = "550_cancelada", - execucao = "560_execucao", - pendente = "570_pendente", - executadafora = "600_executadafora", - executada = "700_executada", - naoexecutada = "701_naoexecutada", - concluida = "730_concluida", - respondido_negado = "740_respondido_negado", - respondido_aceito = "741_respondido_aceito", - atendidoparcial = "742_atendidoparcial", - naoatendido = "743_naoatendido", - atendido = "744_atendido", - renovada = "760_renovada", - finalizada = "800_finalizada", - emitirnota = "101_emitirnota", - faturaatrasada = "301_faturaatrasada", - pagarfatura = "302_pagarfatura", - aguardandoconfirmacao = "531_aguardandoconfirmacao", - agendado = "701_agendado", - faturapaga = "801_faturapaga", - excluida = "999_excluida", - requerida = "401_requerida", - vigente = "516_vigente", - emrenovacao = "402_emrenovacao", - arquivada = "801_arquivada", - aguardando_sincronizacao = "999_aguardando_sincronizacao", - nao_conforme = "710_nao_conforme", - conforme = "720_conforme", - nao_aplicavel = "730_nao_aplicavel", - parcial = "715_parcial" -} -export declare const corSituacoes: { - [K in keyof typeof tiposSituacoes]?: string; -}; diff --git a/dist/situacoes/situacoes.js b/dist/situacoes/situacoes.js deleted file mode 100644 index 5027507..0000000 --- a/dist/situacoes/situacoes.js +++ /dev/null @@ -1,64 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.corSituacoes = exports.tiposSituacoes = void 0; -var tiposSituacoes; -(function (tiposSituacoes) { - tiposSituacoes["vencida"] = "100_vencida"; - tiposSituacoes["expirado"] = "200_expirado"; - tiposSituacoes["alerta"] = "300_alerta"; - tiposSituacoes["protocoladafora"] = "350_protocoladafora"; - tiposSituacoes["protocolada"] = "400_protocolada"; - tiposSituacoes["protocoladaApenas"] = "430_protocolada"; - tiposSituacoes["protocolada_alteracao"] = "450_protocolada"; - tiposSituacoes["prazo"] = "500_prazo"; - tiposSituacoes["emitida"] = "515_emitida"; - tiposSituacoes["valida"] = "518_valida"; - tiposSituacoes["novo"] = "520_novo"; - tiposSituacoes["recebido"] = "521_recebido"; - tiposSituacoes["em_andamento"] = "530_em_andamento"; - tiposSituacoes["aguardando"] = "530_aguardando"; - tiposSituacoes["aguardandoresposta"] = "540_aguardandoresposta"; - tiposSituacoes["suspensaotemporaria"] = "540_suspensaotemporaria"; - tiposSituacoes["cancelada"] = "550_cancelada"; - tiposSituacoes["execucao"] = "560_execucao"; - tiposSituacoes["pendente"] = "570_pendente"; - tiposSituacoes["executadafora"] = "600_executadafora"; - tiposSituacoes["executada"] = "700_executada"; - tiposSituacoes["naoexecutada"] = "701_naoexecutada"; - tiposSituacoes["concluida"] = "730_concluida"; - tiposSituacoes["respondido_negado"] = "740_respondido_negado"; - tiposSituacoes["respondido_aceito"] = "741_respondido_aceito"; - tiposSituacoes["atendidoparcial"] = "742_atendidoparcial"; - tiposSituacoes["naoatendido"] = "743_naoatendido"; - tiposSituacoes["atendido"] = "744_atendido"; - tiposSituacoes["renovada"] = "760_renovada"; - tiposSituacoes["finalizada"] = "800_finalizada"; - tiposSituacoes["emitirnota"] = "101_emitirnota"; - tiposSituacoes["faturaatrasada"] = "301_faturaatrasada"; - tiposSituacoes["pagarfatura"] = "302_pagarfatura"; - tiposSituacoes["aguardandoconfirmacao"] = "531_aguardandoconfirmacao"; - tiposSituacoes["agendado"] = "701_agendado"; - tiposSituacoes["faturapaga"] = "801_faturapaga"; - tiposSituacoes["excluida"] = "999_excluida"; - // situacoes outorgas - // Requerido - // Vigente - // Em renovação - // Arquivado - tiposSituacoes["requerida"] = "401_requerida"; - tiposSituacoes["vigente"] = "516_vigente"; - tiposSituacoes["emrenovacao"] = "402_emrenovacao"; - tiposSituacoes["arquivada"] = "801_arquivada"; - tiposSituacoes["aguardando_sincronizacao"] = "999_aguardando_sincronizacao"; - tiposSituacoes["nao_conforme"] = "710_nao_conforme"; - tiposSituacoes["conforme"] = "720_conforme"; - tiposSituacoes["nao_aplicavel"] = "730_nao_aplicavel"; - tiposSituacoes["parcial"] = "715_parcial"; -})(tiposSituacoes || (exports.tiposSituacoes = tiposSituacoes = {})); -exports.corSituacoes = { - pendente: "#CCC353", - nao_conforme: "#dc3545", - conforme: "#28a745", - alerta: "#FFDE59", -}; -//# sourceMappingURL=situacoes.js.map \ No newline at end of file diff --git a/dist/situacoes/situacoes.js.map b/dist/situacoes/situacoes.js.map deleted file mode 100644 index f2189b2..0000000 --- a/dist/situacoes/situacoes.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"situacoes.js","sourceRoot":"","sources":["../../src/situacoes/situacoes.ts"],"names":[],"mappings":";;;AAAA,IAAY,cA4DX;AA5DD,WAAY,cAAc;IACxB,yCAAuB,CAAA;IACvB,2CAAyB,CAAA;IACzB,uCAAqB,CAAA;IAErB,yDAAuC,CAAA;IACvC,iDAA+B,CAAA;IAC/B,uDAAqC,CAAA;IACrC,2DAAyC,CAAA;IAEzC,qCAAmB,CAAA;IACnB,yCAAuB,CAAA;IACvB,uCAAqB,CAAA;IACrB,mCAAiB,CAAA;IACjB,2CAAyB,CAAA;IACzB,mDAAiC,CAAA;IAEjC,+CAA6B,CAAA;IAC7B,+DAA6C,CAAA;IAC7C,iEAA+C,CAAA;IAC/C,6CAA2B,CAAA;IAC3B,2CAAyB,CAAA;IACzB,2CAAyB,CAAA;IACzB,qDAAmC,CAAA;IACnC,6CAA2B,CAAA;IAC3B,mDAAiC,CAAA;IACjC,6CAA2B,CAAA;IAC3B,6DAA2C,CAAA;IAC3C,6DAA2C,CAAA;IAE3C,yDAAuC,CAAA;IACvC,iDAA+B,CAAA;IAC/B,2CAAyB,CAAA;IAEzB,2CAAyB,CAAA;IACzB,+CAA6B,CAAA;IAC7B,+CAA6B,CAAA;IAC7B,uDAAqC,CAAA;IACrC,iDAA+B,CAAA;IAC/B,qEAAmD,CAAA;IACnD,2CAAyB,CAAA;IACzB,+CAA6B,CAAA;IAC7B,2CAAyB,CAAA;IAEzB,qBAAqB;IACrB,YAAY;IACZ,UAAU;IACV,eAAe;IACf,YAAY;IAEZ,6CAA2B,CAAA;IAC3B,yCAAuB,CAAA;IACvB,iDAA+B,CAAA;IAC/B,6CAA2B,CAAA;IAC3B,2EAAyD,CAAA;IAEzD,mDAAiC,CAAA;IACjC,2CAAyB,CAAA;IACzB,qDAAmC,CAAA;IACnC,yCAAuB,CAAA;AACzB,CAAC,EA5DW,cAAc,8BAAd,cAAc,QA4DzB;AAEY,QAAA,YAAY,GAAoD;IAC3E,QAAQ,EAAE,SAAS;IACnB,YAAY,EAAE,SAAS;IACvB,QAAQ,EAAE,SAAS;IACnB,MAAM,EAAE,SAAS;CAClB,CAAA"} \ No newline at end of file diff --git a/package.json b/package.json index fc8925f..76adf0b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "p-comuns", - "version": "0.280.0", + "version": "0.281.0", "description": "", "main": "./dist/index.cjs", "module": "./dist/index.mjs", diff --git a/pacote.tgz b/pacote.tgz index 45afe69bb0b58ddf40e38914b85a129e0611ecbe..65cd8c415724c3144d0c50186e963d71c0bca395 100644 GIT binary patch literal 26624 zcmX_{WmMf<7jAKPch?qom*Vcl-HR0|4hMI4hvF1>=iu({P~7d{c5dJA-f{CI$)6;9 zjGd9a)-z|wqY)tf+n~S~-TJP?{4Ff2Gw-*+AHI%TNiCU8;q? ziIttF@X?4&OiY{j0ijN@6>nK_Ivb#5w}+69+6^ufuEYA7TS?$arLxYR`Z-$Q>H87fr=^_y{*IeKenCR6a`*uNEd5ES+b^3m z+>=ctSdADvX0luVw=pALE?-F4YiM)vc6BzMAf%qJTh)R(O++}F;$B2yGpGXr{zpXg zhx7QpcLzO}#aLGeLB)K|yreYl!G1=WP&WZ*S;W$z`LQ`!S+UAw$}n}>dI(&g)T_r> zlhkO!$RJFAL|Du-rgRGer4;PJX}}X`dyYGhDg;4?~!?AVN?uo{(QyR7Nel8b}bb44x*^`)sL}FUgrJ0JM8#+`lB z(IRs6f)0tR-za)tGeWx-GL>Tb0%+sg(_tqe`slevqpX?`e`0ij5Y-+TY-UdF%Sya6 zbgAp=neR-rD80mxqp-}jmHRYUC34G}7hJqjibLQey!+LaUkBTswzfY$;CH|`HzWCE z!v1&nYvg(4U7jx>a`21srv={_-;KrsTT@6<2>}*mtTO-juSqDtFH3LMxYJPRSQBNr z-a<9+b?PLv^?hQF#+-yWB`qS#k>6g&)1)rhLZzn_*bAfkzikseip>)NC!gKhi57<<%-NXM}m$?Eg^w@ z4}oJ<{upGWRp;6Zm;WMLfVrt5V9K+|6n`6ktrkyOr?!156?N~6&LC&}%Sqe!F%ptf zgNtLd2IYK7u8>K{ls$ojqJDIlO1PgY-RI&E6z(HL0*a8Tc-ik;ppP>-LuaL7eEdoo zg_U&w%S&y}W`_<)j*{2y+apSlu;GAJ&*_q1I@!dO(Qfoi$;o`zsot?sJhAL?@I36@ zo5=OI2mUpYpuX@G&61f!4j1k-GV7~I0;~V@qAG@2zD1-0C~Z`?B8T03WenNlJWWUIG~1@rrriYT5Ffa+f^dEL7Tv;dYBFpt2wT{9@Z`r)$Vvvm=i_PV1Ee!F`$ z7NMM8`uu?-|Aaguw6<@GM;nT!9n$xj@M`|aF=lfCI%c}}^3z$s9DQ5}X?fe)3oaO(%KP(I>R{7%{YI_D_7s^r|PDaG?^p43Z zMyd|aCECvOn|rJ%}z8Q z<-(04iF?oaqe6R{$4s74iDp7$0dN2^CZp9&m{)QC@Jamyw)Yq@+oUl%uP8jwD&e$u)<1%8+}bu}n4U1Buc%ETarF_hpU1GT>PI%sc`&OP z;&KO_=EEJJUjC@4Ds4}V#8o`WZN~I^(bx;#qsm1mxMvHI>?N_{{ldc*Rr@OF?8R4F z0oa50_lDGE?>A4%gOdA3m4`(XC{00t`T@}dpOvJMm4H1=wc4Smlfw~ToHP5aT5O)_ zwg~h0fuMJPkXE0>AwrHB5v>GS_~1S1Q3{V@2J}IEI}KB_Jp;@qP7F#ssx4kI+<}3* zZA?R&WcFWzP9ShU9AQ}@RAX!t=HrFG8%D{X?fr82H9mQvBid}>^05) zFFtE&>hbu*@);TBBj#z>n9&#spO?_0vitAS;{Iln3wr9zHhr;$ED22ECoRFPo5_fe z=w#XKKFKfaoUyH&oJ`qnw9b_FMM%by_*tEJ?l$+Kds{Mooj9P>nAbm)S2YnG8yM6Y zTMn`h)e)~Pl+vaDc3QhYD=Iv|(w<-Y+pU5=c`QsTlAdq{Y0zqtos#sc-j-lP=RTJ; zSqp+D7MGwV!e{qa@aT-wA^A&W{~oI-hn|d-e<3vYF>M;Q#^yeZuB4BW=3c{4(+v{| z+97d;jT@z`=A4hWE<2T-qG!KXuZ@Ks8u`Gh6!gLmzh!2v{fJ7GdSEW9rXl$0WT^6B zff1~I2F@nls{Zo{Y-#Tn0vn%!6+QqJVAcn4$tT#O9K8QUQ00YH3TcWwSlNu5?%){8 z+b2?6*LI|wu9=kDZOD*z)C?(kaFgrOIU)AFyc!`_n#bQoOyZHNhd1QYAGa3k;SdFA zEJP}0-6>1FP%5d^C{lv&FV*-5{dHm+=nsW?YR{U zME3oa^X1c@L~A!zjS#_ZN5Fw^(_$7o-#jq9= zAypXtJ8lv@gF=kYZT4jT&#i3*IOc-Y6_=^>d7-d-#2nb@xW4HHGIr_DSq!|x1pRmd ze_0u(6w}}29JtGH>g7K>`}dYSn;4?C&3Up0g8hV&otxOuDICn4vEuM8A&ZrmrdP-M zg%VmK<<8LY9r24D%#sxGYT_+8UbnmmxEgK^dl<4oT04houKS*;P+pr;-|$MhCL`iT z0&ceU3CN2lQ53_sd zLcxDE-7U|MrkoBw2(~~-*2;(o_EHp;8B21WEKkqjNDB)L24rve=J?xW4!_3?nP17c z@&n?6V$IX)7^Lpl82ot97eGTu84aK&VYKp{$uJ-C?Y$S1$)Iu0*vpTM-C8Rz zBbAz=s8V(nqXjFYccQLsi=HJz)OT$5uD*F8x#Fu{LSn+ zredlOmuYE<7#Ycc%doHg4_3lZEZIQI`XchzMC+_CKa>{a8I6OJi8eKH?sT#eg99wqfK%uOy{yGzCHF{VrBH`4%6^oQbo6?un4`U9s$}LG2t0Wnys+pD^+5yk zE+~_5QZCiszjO(LZ0a3k8zIWa4My{d)dd!)cP!^vb;}xoO2l^v6ze6f?a>Fv32lR~ zjb}KhsXznp(ntIRwy2!0?1ukAJt$rqvPK6isL%ZdjJ<58{akSQ0Jr^D!E7JA5;uNi z^@QSSBL-U@g<1)fv5wQuZ~mD0LLaO*i+$?cT+D0IrKOmN`)fCfI9rbcnF~S774_EL zlx)ALkxxt_%Y`m~VR6ejNAGjO;c4gP6XF?0!TUExW8{QqSVF!6!BY}AhVqXg$r z3y7nocjJn)Kdc3y#1kOelKD9%9wZV6-$nlM6RlnAHJp~UsWN`|_Z3wSL-f4dYLFhIEKrBR(?UYVo7IR8|*?-kMB5cXqW5`v`#32ueZ65CKtVJe$`o zdrfO(`P#DRhMW|RQCQ?%`$_(W$UGU)I98(mnb31UCZ9iVmzX-%K~}3W5L@pOR6SHt z(TJy(g>zoNZt$yn^bALfS~XckA|wZ|2D3;Bwwcc_VTCF?+zC2UgzbFpu+Qc4`IW6A zIRa7@x%SuPx#P_Fo2Y%JN(XWm6d2gpqdNlF(pv|!J^?1)b`C#56FcC&5Wef}RvgAF zANCV#$X`@H3K4X7^I8Ylfji7P2M{OFp)N)(bQ0siDI;z$PEy=A{=(AY0~2Uk$}m4O z5()0}Oe@a9c&|eJGB+UBL^1ptpw>loNTL7~bd-HCrmA6EQEN(rsWgJ`*YE{xd*aLK) z?225ar>C117!_DiMFk18jsde)bkXw}-ivgYwZbck<=27X{fsBnNvgYC$gMGaF0iM6 z?Xnf)OrFQv;YR(^GDer@(c7B{&DHZ*9Ji>95qCEIg8);JS~-Egxx#B9we-fF{!nBq z-f7U|(Nr-`NeX&=k*2}2=^;LqyBHCri+G1O3h+G?@YNHjuFUsI&1M^c34S_2e-9uv zkgVCW#->&XuiPQnOR2fVu@{(_>9x?W<9aAk6^R^AYctEW(5A~;QWkmV0e zU^uvsuv_&y1?OQ_6o?PQUFhPJBK#5{p3jtUao5gp4X$k?&&2vV=sY8|&=C1IBB)6# z-@V`qx6QyA1(LCke+;#aqeve4fbt|0qE%lG2`6tfHlT3FV5}ZZWIz^307_kqay*fd zEwdt3v`&{f@clbuCTh9FD0ZMK*g2A8Z?NysU=+jRF2Tz!ylL0K zv^OB_=bH<-eG|a)ln)4hzBWtEbBB7ru7UG;QDXG99deh&J{7VE1S z_4OMbhx8mQqf`A>2K|`Hs7d;A-PrJnR*d6nzBUT}FNzzuO6d|;5%1T9fj*BXv`2W> zd{HP-`7&DpWp4*nJ(3-t^BaU57Tdu$l`B!7*PAh93PH~t6qucQ&npZ{tucuZcEjjKI zX?ZTSGBMUF=tiT$ql`sl(b${#m$wX-Y8|h8W=xNiM5RPm_=7wV3D{SL_kXgQ7|<2F zIVbu)nr+pYNSafmX0`vgp#dCHTX({#x|QOd_A`=GZI!c%xu%kIv ziAmgYq`PFt*eXiEt!fEhwszc56t+(>-WKs@l0Rd%M!KO3v0g$dK-ei1r;sw3VB@XQ zz${i_B0KbtK=;;q56XB^7A$I1F!vV65JCC-FqQOGh;=80@$XqTLc~8Kpew!VvFxe- zVOuLSpY@K@F7?t%Ff=15mWg?L6Rjm`Ol4eNy3l!mEjRD-(Q44;wsk(KM5njf59mO_ zT8Gdp)g#F;CB%W&5(+36Hp=_~UC!}LD)vp|$v2H3S4-S#xyq?Z@z&gmWaB4ZI>`4a zj)aW#)N4hd0GUE7@qFyJRv=C(0%Ro3LY4tR9&%a1-nX=3u9QpHfBkXfbEfUop!;5% z&0xYSW|M;`YhMj^olQz!lA&y6$3{#S^;Zq4{SY_%EVCQUBbb?nL9Y<;ZOnlz(qyA; z>uCFtd#c^VWEp#y7L=HN8h^n zR&co5(CE9nO3+;oIcvQH(UZ7y0IeGbiR8KJd+Zqo5yvA;B^-J@^i5W3x@JZL)Mjcb z3C&e~)VXyn2{_1!{95)_0!aDtw_fZ|M4HhJ9Q9p};7(z%TD+~}IQZ#R&${vo>=OxY zYy#`|fOYaV-jTKe<%rJPR^3FbhTQvmANDDNKhk#E;^s3%hOUq859n>H=D3GUvl0=e zP7j`-vY-D1ytsETvR*#=e4^Hp1kReg-AU`aM~@4)?$O+9iNS>8;|GXb5H(ot(Yl7%pYrp+yU z%Il(K@n>X;_RW_isrKaD8({P!3CQum3Sjfo_yjKVuKal28D2j6-_oV<;Zy z$2evT;D*xQ#vO$J@-Mt0D}5)V;r`=t0!3t`1ofa=G8l0$_r~+`VRG{?Vfp9_*mT5R zU`npS6)@(1pUtQng>^%!BjW1Fofd<=;8JS@)&HwZknft6trNnz<`)8nDlB@oPf-p$ zsF~4x)8QA3B*-cyvvb9{_x>zW9ZHv_+>L8K4Ko!+Dt7vJH$f8>GnL*HN)_)IFbMm7 zJ>^yV{%l|KFslOMS-)^Z(-fnA2!SKI<%NFPl0|-EN^+^@?5&mV$Y{S9d~#X8qCn52 zz73Ej!zJ^V%zBtEz**lkmL`l9Ci2qz!h8|MZ%0uZx+WZJJ>aBfbG8x64)d;W#RsKd+?u-Q z2p5ZL_QVX2%J{>t3doi=&wD@WuW#974fEl?e5@A`vDen%0upzjheFV@)I|j3Yt)5zsmutm8LV zA;<8z+9W)nbX|W@8a4y!ycFP9794T+liM!Hde{{}9W~XT@D9B$>;Ajv6n7|EZqxK4 zDUP^y(>%p3HSbX(xMdXQ%#>xQOASr~QAcpB(9uIMSpB4nP)?qZ(gbJe`5s`C;?u+0+^5?L+`Xi` z2LSvAkz0EgtBXEb z-1R#C=F+86i!e1J>%Wm#DEJ)cPD+SEVwZ%#V_WIHWTzWoDK2r^yU^;NUt4~&B?3!X z?!bKR>kYhIOP4hc0u1uNEHi-gW1#WpyLL9laV`XJLIkG?GnMEja}XZin!|2R<@Mpx zvKvV~A71-zwNEq#r!fBYclFc1_}7cS1;?Dc4q2)LOOVZE4YR>8j%1kVKSGPMDKXFKpNlx86d)0s*U zgn<`We*}D5!~6g~eEruHrJsXqO+HrW2HTOupkrqtjBMEdSl!o2xdp%-6~Mr7$;o%I z4Ln|M9FWoPI`R%5tA*r0+prw5YvDZ;f>M&6z~WSJ3^>;CuWDliS|jX}8YmZHd9m?7LMQ zQr*7(U3eM*LG%tg{7T<*7&Gr62pe8mQX>sVos{g-ralN-sHvA+Fr9{L!bXsPd&<#> zS=faEK&CrA8!l)F5;QetP$CVzEnX}xx8xrPD2Too9$KMm#uxXo~f9iHM~{R>h!+8Ga^MV{_+XtS1nyM^;)= zeHB28HZ(+@ZgKiw>)dbW`-KhZUtg_%P{WL!kMb~C4neumSPFdfU1e$M(B~ZnA887#~@qrm5jVbk-hI? zYrLu7%w3Y|w)}58=tGbO8L{wMX%~zBM)-<^7bVgcNqzF5C~U?9LUW-Zy-XN+2TbSC z{YZlFcGFn!^$O6T-~6^y{SaI70Z#7*=RVJ#yfW7yRBS(=ZK!;Vx1K%LxM_dY;U~*O z&1IY5y1#Jk;zLOwvJU2Ys=9nx=vc4IK)#bdyh zjE%r#o$ln^pR+B=_Pm$+eD4 zS8~W~q_4x&JkR(S?IE^}kB>_uixlJ z%}enl_@)x4=;}nPT#s^_%qdG)jp{sE>QQoBept^2YY4Ey{Y9f`42Seon%PY0fB%Ie zzzZXH9rxSJ zW%boO_+R{E{2#&sYuA5Pj$LD+7RV=^LwxzR0Hrx=<}H@mSc6#3*XC1c1DX7;D|OSJ z8ldi#W_Pyp_?j=}xtN0T?dWB@%oEz>(;2q-JE#@#ri6I)Q3qCn>hCr`DZI!^ESmpBT-ukvKXkw*k+5oV2|L zbCR`IqH`ij@4baPmon@qIz-)0k)Z>=VGd{BI5X|Fd8BY2Cx?@v*Wu z_&T$fo|*qIdUQ>kh?@0ZY{cwUUfASt= zU}Yh}PqOFQ@Z2Rqw_l!IA66|{;BB2<4-bcy`A1wCB}W_9QOD{dOI)&Lu(nwUSn=qv79Uc$-fl3AnaPl^6m>2%YBnV zYiSP`pcc&8j=srb@r;{&84f2Y3+k%vtXxYC?1m#c?6A@nCK=(YysDNC*^uvrhKsMO zGq4!-OQ1KaxpvNu(NUzlJDdoA8neh9oSfPl%%^DK=`f(9=Q5=+gKU)RFMI+I|LtS- zy1T(_z&G%)YA7MGgF?H7H-Ub5GDSd@H_aYx1Axl z@>Tfb;#l;Y81-26A7}g5R4_jPOFo|tAAsZkm;r8%1YL8##iUtRDaMcA&yp4nQ`JpT z%L90`XGaGHHcnK$Rq2uzz0){kEPK%M_ZZHEQ}g)#qn>G5--uwDp|qfJlXa?dnpqfc z@=cKV#r}c(!5ke}ipgVx(`-98FSO>}SHKn3)8RrO8xjmVnyYV5yl zPR;tL6h1KRBb%0L9CpK<`i(H&a|{e`9cHuGYpL{-y&i|$Yp;1Jd@l9V&_cA3eF0?E>v|taI8dmJ~}|_(2s6= zrt#S*>A9#}Ese?aDM@&?<%$+DT5T;~!Xy7bkjTFx!zFh-cO|3y%yy?iK9{?1LAC{n z9OeV5@@~^a&Xz%Sl>9o!0I_r~;tEZ)kTR0q(u<522c6X*Bl0|md{pljRA$!ZL8y^F zW%|NK)Ih+C#L6=4y|AKBr7+xc4ys!AyJ}3f=jxx6c4Ss;gz`3kFh6(O^Nkkar23)K zB3NiJc!*u!;-oP_cjJ{Fo@s;TpqnW#G52GJ)taN{Q-uFo$70EflMlMl zyy?2CjW7*kuZ&ismiyFXhw6%Hh!T;;m`iuJ<4SjK$!nQ9q1&ds)@(05EW-9@t6GZ1 z+@GCJ$&|^%yCAViin0uS%stKjo5^LD?b?%&sG{T`FJT}*|2JOi-`95mGCBxZLZ&Em z3x)5qdNVeYh4(46g>$w)rCF1Lj%Z4+?9#|)6NK-mOI0oj@`o4E-)&$v_`dMN=;7HC zz0vEA=iLr!=Tc1u;b5^#1W#l$bJw$0g2#aQmhhfK|5}TW4<`>-^GL9>>nnLqNAE02 zZHH$NO-egrG&aAL;Pg7LVHtJ5uvg*NeMu8pzjv1#y5FeD>+SnJNmU^{y3y!bzJI>w zsy7`MN3QFAF;r3xi4%b|O4OTdD8HOa6+6rEd|A_p86QN~-Ls%W$DmYPjH09YGpSQM z$49ffnPP(BtdjYbRaKKWpZ%(jH()>sXRW1=V34j=0UL> zNwZ-{T>FD#D#RmHb6Kkf1UAITJ3Qb3qAoiqU}d+KrmHLIk|KtEaw z*z;6||K{^F+P47D`ssQ7BI0$w_bE&ZiChu?$NCJMR}EE2e{vf)A#p5Oks*yo9of)W zxo}8jA{o>!BDAUjUD_m?(BICklC(srV5svHizS~y3(Zp>7tmp z)w6^^bIa1PLg#qGU-*-SOjdnWqacmj7npB-5ucuDS0nWq7WV9LO#G&EtArzLl=Yrk zO{Mjl%>H>VqDmnx;XGpbp7@?aAI8w1p!MZtEbt55G5Gxm&ER1?kHX53@B2M8p6Jj= zUTN4ZQ}^}Akddv{W!?dis{M;W*FL^a`62Fht=~JkIax`*J5<|`cc`DS*{OhyRuob+vZL|&E*?i6y98C>9kZ9{a-oGosLxu8p z{|UJwQ*k}sdA#@iUv)%})H+6OY~TH@fAk+;8Ciip89f_w@--Yu>wG z#U{uo?##(qFl~S4x0BQkXmyKCi_T(;-e@pLCW)7@7nV_`cxF@$^W87x{5Ah4XOwF0 zBf}5Igb+YFqJ*r-+zyzVSWy%|4$^+S0RUjpxiQEiDNE%)Yh*xhWjd_TShoD+`Ai=T zmj*9{r)oJj;W8Ti&r~L2g{*`m)rN&AXgcbbZ%KoW?Uy55a*UA`;O{)1-)!FLK=g$| zLXR>`OwnEBuZWNMv<*zfqryb69H1haIr> zo)x4LLh!=J-d9OzohmY|xP}|iMgqaE-DCEjDaDA)jXQffkX)-&2i)jP4A0_8?)L3^co{rxWe7Ij z(5V6Qf@T8>=7w@{)#j&Yv`XsKop|BBqc zJ`IA}xVG_m$CrHV3>Zt@UEjZwfoGnsw*XyW+mR2meSmp)9C&eUQ^zdekW>s076#^$d>Rv8hYcU5~k`ZFE>NvLw|TRX(?v zt5*Q5Optn$Kq8T~|NZ>=`8kBHEC}{Ns4lwzyXCAt@^x&wB0H&pw)c7t1wy@5&tnYy z1o(6U<9lVYxm3~f<2mqs^IMAlid3nJfUSuZS}K2N#X6_&utn)}lHXGv?p-9Me*4t+ zXXLvb>*H;8r~F~we1dlliJewBci%0453AN$N;g;~{;AF^pj3;~#|cmv&I& z&9e-C75#hzzX8D4>aF-&9X}b#Mo!dnlFb><*dqxE#+3QIz&jv4mIobs&oVznEW9{# zcFkcSIZ5!aNH3j8+#VlZ2mjR_hrLjDJuivN40P~0LV^_t(yuC;gsfGMFUDD6M&f>2 zR;3((Cg|gmv+q;vO(?xCRgDZVLeg~Yn*;74Z zd$PtF7OOrf%|6r-sEyI;lw95vcsK|$PwN5OUAVfSDEU=slPFF;{j~_nEn~mL1z9=F z%>N)2Lw-Sw23;(51-$XB#!r;e(wPa-T!X(fHtm|ajhmftHeA~_8(hV?c2F(LS4x4b ztSD`p7;KwM$pIih?0x#y6#yc8y!%te`I$lduJavT@!a3W>=yu_D}PnWPAq`!S>lkQ zDC{`fZ{fA|llcQ^8}CZ}3SM9T-s%r-UDjO(Y>kS-sGJZ#^=xzk!MktdWS`FqMI$PC zB5wnrV0>1<=e{U-A|HjG5Z?a>QJCdO)y%6$yzXvojpB8nge5#1@ucnlBv$k5Z9mTc zDXa@;JESC8|B~nSkBrhXWt3=38@+3RWl>ZTaX@haB#NDT7j#n0>%!VJ!!A9Sr}G(o zoWhpIV@9aZ<0*vbD>Y5dy^@uyVDqa-8HBs|8x~>k!yD2M+w_MfvB>JCuZgJ{OXir0 zGXEIn=KkLd87BEDq)DtsCc(3^R!2x9s4fEzW(Y<|Pnd;QL+{Ri?&q`i$7jeJ+39A7 zWgOb68X)R~!~Om@LQ$m@4cE1fXQ=r@ct3R^3lE0ag@q(}TQr z650ve&xFM8nU8MUoKQeJVYzx~?Lns=G=J^eez zk@1~3Z#B=6e?6q0TW{Xx<}X`eGMLCuCf+mKBxB@2g@i!>i|I z0{~M^)+QRnHU;Qqva(8gD));BiiKXbfptPbvwRzoS^sN0AYjp7bkQF;=MP-;-&yb% z#a>t-JdeK}`MPXO&`WRvI3rhH^IGTpC%M&O?(W=3wCV9&%%W$$|B$$!#4D~HE}D=v zj$M;2vW&)#FH*3j)Jx0@*`JX8?^vI#V9RcVS@wA|@7?Pum7~a#%9|PE??DE~&)*T6 zq2k|j)+zMm%fJNe?V@wIyx2$^bExz&KhD^s2FYSsjZv{4_FcK;qL4%zM_5%i0Y-I!LMKLLqtA zU;N$T z9WUas1thZjiK7s$yHFP^6V%zijXwxi-bnX z@ieYtpg+g$%87T|G>(p4ZElc`Fo3+Nc3_JV*vzU)3_ zD3#bb6dqufstWqNP$Pl1#kJvd>V4Kr-vS^2L1cuR-w` zw}b;q+3O7@ehx+9M5E&4<^pDQqDjQ9_ce)xKS0=);&rZLR!+Y^HkFBt6(5B4&uEzZ zG8$%!-9vNq%{K5JFtgP$bSaD$ub;$ol5Bc){i%!CW3jEImnTaqeEt*`>K+Or2dybG zx;}++lmVRwJA5KOv{g>+PR~xOws)BFWNkh<|{ftixAj$cAo|gY& za$e-WNek}Qe(;dKUCOlzPbX;%_-~g%NSP^%U#fV;PgQlfE^wZe9rSp0aeVl75rkja0_slZ=*%@a$6&G*y=(WRk0dMA;_p~dJWS?8Bt$W|nua&QQz$P{d0}p?yQveCS_`f9fVO8~F#xVMZji znTr%_bK= z8ZIR1mqL^8`LV^QWAccF&R%-h|0CT(dM@&)EPMH(~$+<||}u!w>p;ot#%vbACOrgD7M zr{VL4w#G!KM@0tBcDF{OF1ulB|G}IlqoQL<>{gQii8^t{y4`XjZ5dv&{=z-ik#)rR zKYGA36cE8cXvIegcIg35->zRVroHhKzsM1Rtc%FdvJ+?#N$WF-B(Bca>bbMmo^-+e zpLq|gb#XoC+0Nh^LP6|0*?XIv6L$gV7t>Yt0GHRgzt_Ze|2V&&I0~vx&U{b(KdwLM zgdl}toE{A5p^T^WZsaV7`F`>`EL|q45eekA!c=-49)7jdgzmb-f|nxBMoqbAz9!Dj z!1jx##h@E*agWI1yzlMK>wKj zw+4v|Z|j0^lgn5RBA=gOU-qJ}UF;{5*i{PhczNBv;G!)C0EP-f?o#>+p-pUqx+tMe z3?cNexPk3!ga`SB-I>{@w2qGAKGCdI;=UdE4L$YkTZHAcLP}Y!&);R}6q_HXpB}9|9G2e!HbEgZQ zr{5e<3Od;gI)nF!7y1=!{v-Gq{@n|tDFb!frxC+c1hUI;dSdPHh1HTIQHjm%+oW95 zkz7o7lF)7eioUoU;&`fLwCKLkJ->;brgH_MA83D^{A2gVlbEy0ci1u&qDfozo!klJ zh3=9{QJDpeJhM=$@?B=>S{tMX`G@N0SfVcGWEG9p3HC-+7qGL;rr^ofVfR+fSqTgB z@AY=M>L{vF3ZIC`lIX0kk&o)#b)EbS-uaf9JCVUV$5oKw%ljG;S+h(5Gw$3!3LZ>B#cTDF#-y!L-0wT@0i8vo(JD5_SvKEaI^tln67I~} zY##SUArMTvrb1HwoO1cUm095`>5d@84R>39yT3f0FanVWINA7%NuD&S9*LpB z8Q5KTC$_J@^kHUm=!1eyQQve zt=Q-DwbJd@bJ*&zHn;Jx}7px@YnmJAXp1994Pg&(@DF0 z(x~EJb$R<%Q^%N?awWF!_^J$5hGVtTz?CMbMvg?`SSDZPlgtGiy${q+%SR(g@` z53V^CWX->yE2_VKzxN|IRC}9_E>n5!Pj0@BdEGVIm?2GhN@ca)@k)7|<85@(Jt80M z%Demg+jL<@=vC-?m=t}}VQndw@uq3@(W#i{j;ON2**WfA%m)CFmOA{z@#8mV>M}9p zyD^G+yR2-NC_y}$C-s1~7GKaLoUi_sTWwF!*M4N=Q!m7IdVB=psLkHgb%%BpU($p) zMDuZ{naM3xArpb}83NSPpWi&e`!qlTzj#wm&r}d{P81< zNGN2~W#is{AYl4Z78&D+@lhWWE3W;1z!ZojiMvw%=!!YH4=p-XKA~%tZ;G)!lQ;MX zeH-dT@iZ;;mj73yqrp4Ed3<9?zvdD4x78UC&Z5Hdl4sE z;!nj9czWGE^*2P0;45#H)wcDoU&Pi8gsda4ErsfV8kllwzg5^SHb0>o#=ard4W?{} zmS15EpXkQyv?7{h_C5>QK454xh#%Kr9zlioc;c6*k5A-pf7bP!8W%2` z%=vq7SSTQYQP5o7QDf+=MnZNTxsK;#P>!!oY7gg$*wW^B$+3djTaF&NHU5o9xmAvC z;X76Hf|L4|SC5gM&GmA;Exh`y*m$+uu7B6NWmuA$yTj4R-=DW$KeRpk{o4c%j(5QC z?`6DilVHmCg|qw~@ZUaOdj0*k9gx#2v-UPsuih;6l0ry{+%fOAJ zhv*(Uzufuv$m``>aL0xMIG^`UWt~*<(0yO<1kPu#9<11w`CcvQ^yz@y^@Lk{X7N)5 zdo*3_mo(k$F}4hwu*L3$Z{{liKfyP~zz*VvTVQwhJ=lX9yx!_m6n{g&Gi1V)Kz(lFgn{nY2$TOe ztk4catT*vfbf}1goekaisaWH_h%9cwBg>U^wCvP2I*2p~aE7W_!=Kc73#LBuK242_^r6e=)f_eaRbD5y-mcjN-V6L))fW+{+ zRO^7(B_sMsVKtiN2Zyd^BKxE z+i#Ao*{cI;^pAp#C$H++;gpH-5QNee9O4eqM>;hV0Ks#hoAgMMN+)z%KUku5;pb=T zKOez|8Z2KVB03r78W6f27e#1|ZVX9xkm-5ShlK_CjdEHEf-qwq8*VjZhzZ&WO(C6@ z&p8S|JE7e>5J?dJ{ z_cf~0IEN~x2QpdAm;&TW+tZVj?{Rxx^N!){VY%7*{80VxY$uA((+DkpFO$D~m(T0v zFcZ0jgU>bcO{3y*0{&#^sG>=DGCx0gw@4VG?qoDFqOk~rB@O8IVEmH z51Vo^f-j$u}91lTw(%{GK;ZH!B6O)=)~jKSeJcxZOh zd1mu&ZIFnI*$uS9Mv2WOIMF7FRd92Au~R{J(Aftb_U&>X0h&Z#7L&nHAn^BK@X7=2 z=dsc>c=g@|72}5Zu-!?XY+;l<*xKQ~wuS}X<^KdgC%@QY#YX~j=&?Y-?L1dpZ^RfG?fPN8`;rO}Z-6n&PuO{5a+Ls1pL z9!-w4EGB5M@t4vu#PNst#XKxy%JnxU5O~S!kkEK-AbHjib|kf+m$HQ zy{e0jw5lV0@oTvn%$@&pL&6)i|Jdr({eQ1*tS|3>ZscFCRVUKU5;bpu^@6Hrj!Xex zllOlC$OHH((FZDnE$>3&N(fLB3f&fsk4u@g2to7&MKe2u<9tv&dmupn2PXn?1PJ}W4$$kV(&BED-{TWf zd`Waq3l$a*NvmdHpuOw?Lx&d8ljb%r?+_kIH=#kJnzFu{+tdim~huUn`cBF0tH$^}bs zod->rFL;PI`2OE%Lk4w_!ZPbTX_f0g(i}L~|AY7GCV-V#qdSoQ5#ulebinrVb7)Q8xr zm-7=gsy(z|)hxO-d+tVSZWN_t&An4$oLlbpq~WfZkjfM2r!$D(X|RYFVY4#XY^SjX zL%B*f)ZmOo@5L7^-3pRWpdHm_*f# zqAF%lHN&U|(y;Q>-s#zd`?a`mOw;yHUw|TGV!GAk>r|9AT zJE~9g;J=-`OZ4#n9n~Xx@ZV0}A$s`#PTn7SvODa^?$E>Du+y5|tqCbAQVJ-5v%W3& z5R5sfcM}Z1SMMv;qSlMsROEWGn~Gj9ep3}RS3|ifa233(`m8FyvRIk+ z2ZM@o21DnwoClWW)eZ!E#9Zt!5Ve4E0V-UZcC>R?a>Szd{}KBx2c^epsH_6bNz>m3 zT1}NTIazhN(u8pJT9B% zyJ(^U9KBTU3Mai3SO7fk>J2!z@n*&9F6wNQXRGk*cY7p@UPt^aQcYMO$yZiutjOI@ zEzyX@LM~GP!WT7alMv3gM=Vr4Y{JI_nQmA0gV6_e5)|S^E=1leW`bZwdSm4?R4#9= z43Ln9C#n(v_`X!|!Y4slS^1C(6f;0Y@}1h`BF0-GVlmIXh-r#5nW!wW>jSUDemKrj z@d;yggy!`5G61_l>d`BffM#@hQzmYlyiuE-&D(9~)1j=mh9v}pgdSR-d?b|Jmy|)_ z@ZGEo^(|F_ttT^(p#Ly=m3#n5T|)r>Lu}a*fav3h9SxDXHvrMA%h>-&)8rDMN(_WG zzW`Mt;Tix**RLQg`~x8QW-~c`i_w~!fE=Ji)=kM*K&v>^5pjjX0E~ha10!;;0rEAu za1|h;bk_kgx58HdlGOYMh)U1l$Q6<9M4&>V`~@KC98Us5PpJD0P-z<73CL&S(uDw$ zmVFAy{v#X-V0_83fT(y0T#nHt?*c{YRO>+vE(XekKveNFAR0t-EFfsA&IaUWN;()o znzF|M*@6}C0!Y~GcA%O-xEK%#8hsClrYn0I5abOG2vo6DgdnVVAt-Sa6uK({DWUK` zfYBv?1ad>KTo3?3)hR(SO3)91m_*8+2?UptBLXpD)ZG)v^i?1xvXb)xF>MH!1!CUNJQ&ET z%zYM!^c6P-q72G)fs#@4Wl*V|vcm!;@_dH|s#oQ{1F)WIUJcY>DM(7L4RS8ID+4v2 zD*g?W{*(7~&B=jw9w@iv8qjXOcK!s%Xr*(n@*;PnX{)pP(XzsmRVV%V6-A9s;mm@V zPXlzNR&jWMLBi#Me#OBB94;K83$T)yg?xg$M3=_YO&J`~0T8h3!w=$8|C|yE$8Yt` zb%CtgBj8a115j-^JgQ%^e2)^~(LF)82Mjm-WJp~<@KZRzAF(8rmoFp+{A4)6C4@pf zg5r%w<&Y}A096k(zx$wR`0xK6>|S~@Ok(px?X*P$yOg(wS%g=<;`YIivM{&XpVrl^J$30zvynp1l7LV^&s2q0A+8=x<+$0~JrHKZkE>+Luzj%Ki_kCy)x( z9~C-LpwbSpa=#<}NfatvB_5jV9w!2q74-*x;-hNrv7#*)wh?*%9|VrJljQxM;UIhr z=;+YXR4d3aB=!=wZ@g>KF?3pRI9i=90%B<6q_+`9^D;*Y8~b6!pf

kB9sRnw%Eb4-L)p zGxf!0o02RJ>TTi2B|&q7CT|_{=hI8Y_v2h}t0xb(Y89X8bFNnwwy~NuPb6CPYGorIE-q~1dUqfuEVXp; z$YTP#UMI#C4?`u{%On#sYs%vHe}-FQfX){y9^QpZlzE%H$#5e!q;DBaz$}{h@-T&y zFpWh|AXKFOH%`Q*B&dgD7I1aOm)OLm2`3Sdq%1nc6Be0N^99kW-KI9<@T-f`C(tFp zeFT2~^gVonqYeCg@f4%cL5G-0;8R%|8;}2=zv30|}gfr@7OkI}O+$wpQz~H07h{t{!a`O28CNZBs*drU=wKb$8tK@)%<5<7?3Rx0z zA(EVrAq3}!6F-ty2SR|~iQFZpJs7xL3WNhVVXr9haWh0cj#B`Utc}PI4B!cNNKp?mOCkFz zc{&z4o(>f-eAF~wC3)wu$N^(^v0pXCQM@+ag)TT&vy8=+n zck|+in#4X5!}1-`lyJBgl?G#Z>1^V$3HD&L3o09y$v%nuNR$F5|8v;d(H`mA7Ip} zy$Tf$g>+{^^Bf74drjXM7O*4k44 zyODo4WxrgyN-Q>r73V5d6K37biaZ+3y{d?(U3Vo4aL!g0qE8CnFOD9ge0<2mjB+A) z8>G%64NKuAKvsqC5a~>%=8k26cnr-BSq80Zx>Xqnzba{bArBVXZSp-fgJ^?<<#z&H zT*qAQG=-E33V!S#rYuyRIw}$f#~qe*oT9Ra&LDi2z(E~cmw8XtgwJ2JUe;K*s_ffs zvLA{&7J%)D#mN(e!#+-Ec^K%9U$A7r@K^toT%Z3NG>=cR8eFyi->%_5ZfTge~ z-jDqR|C$r4P|r}D!`Fa+E6Zc5Ae&62E=E|8u%;vv&B(%*n_iGzQICyK*Y zbV3t1_Q&aw0SHEmrxyrAI)|81_k-C$ulP7Y3JxD72vp|Bq;)?u@g!qcCuPYAi^c$C znx;OBS0@QjSlF98R`PoNO%^z%;E8fM*ds&5a%%^37`c8XY@jW zK`H8?e||3r8i^1Ps-^HruqPj|6g_g{>?r(;OXOU~J@ZV#*m9+XPj)-Z9x*Pb8aph4E2AA`MzS<2V4$uys8nec)PPSb(4oGqEyva10Na2%vx z4D1R&Nrn$JwCM+v+2t{4wLr?V*iTt?cnfB=y(DtA#nzpySz;3S25LgL|2zI)|LwmL z;VwFhskE3&XfUA(7&EL)OPS1$mrh+i%lRLiWPkb#pv(2Y&CNRgUw6B+wbcJ^Q2%pd zo+J+#EXYFH!+_Nxgct>wmu|(8yMSpp_m?xuqo+ST9DH~0V1MxP`6C?;Bj6*)_ue`@ zVunt;|K$F&rw^aJKpXOazxLa7?6)V~_BcyUjhZL08g4-awV;Yv(C{d>Rd|q|k5JG; zc!HYOtim1zCfDR5atZpgk|+f&`Ea56U3qH;=E>K5dtTOH#aqAx&N}HC_4QUXk5{Ip z+Mmg9Rl~DmTUJZR(o^pBi1F;{!3()8o-*pOIKibFo-?p0T?LpoqXK`8i<(%O2|3~3 zMXx&jOS3^-NWu3u$YxShBdH}%V!u)aarooHR*knkBOyS(%E$ ztC(GU+_dYM*6jGGtPo3X*pdM}BslY+r%5lS*Ta1%`09;XYuaVYG||5f+Dm zXw8LzsDVJVY6uXmDpo+_Vt;)&}ssFXf>ieG|y(UIVcaU>J>~Cpu&imljE#M<* zrJhqB<(n?EiUV zW3%r6d3$;Pca!!XpBUGvyiIB_>o1+v*I?$sc{6N}Y7y4~G6Ep_IcL@K5FfU$`|==P zP9&A%eJP?P76Ne#fU7|MlvXVia0*gXln#zm`Kiu`s7?%M*WZ&zTxeFWlLYeB%bOX1!Y1bdqU z^=8+!z6#dcb#UH@@>`|mp&l{5-rL(--(1f{RkA~r=dN#VY?g`$!E4{pZ5b?9JqUd8 z;Qs#R9pl&NS*m9Ld*ko_I_sO8_4j`p%lqG(y#Jj_AOY=CxBS>Ir_&yuX~d=HXkdr} z#)1T$ik(pRwd`8qtE6Q0Vf-v{9(;hQ5J+*TzUaAtr3i{*cERxFM+z8*@-in!<+9*7 zuEZMC^bCcNV0Nvg&B&GGKdeSEwwl_M<@qa_-f1d_$wBp`ZnEK+uODCpUw5|a{S-y`tPA-@d;e|pO2ZF+Qd)u1%Bc~KhU%Qy^j=X zK=oyLOEEPKJ%M3s4idqgHex)5;C3snpy#5EY@GTrOiKkA83prsyMX6|N$Law%e?dZ zylx|CEqPNY|91-nTC{P}frJer5i~{3m~l5pEp<}<9W$%g#fDY7O7vNY*SfZp%J`AL|2J+_u9d~vN!)dE=+_cYt86l$VO7Un9T*k(NLtwvMWh4y%jPIC z7ZIXiX2p_In*U1^e{w_m-_};A?*F&5wVeNNO#k~wg?rCc)=S~uYf$e*BE8SUc?Y8? zG?82s>AiIs%sU=EekPFj&j#_1@XRH6_m;M}NpBMZ=3PU%M?%J$;E$qaeOZx*M>+~hC>oM zf>h)9{9$hHsh!DF-tMvfVx3+5AxO!VoO5(ZN9>==`Twiwc7@$m_b{<_# z8C$*F>eyI48@H9|Ao00j@8<=*pSzD!F2t_R0d`-~v#K(cuW@d$xv?Hzf%jj1yWfqh zqUYZmJO6&j`7mYQ2R6T?9C;e)Y3=aUj)_mv?*tSoJ_4sW@Gs=)bh!Nfq|8mTuvZL> zY2-uto{s6od!zeP6p)Oj!MRR9D8$50y=0g0$f^V*;VIojDL0uZuFsrdhO(`p2-hvz z`v*J{CBVOUdPaD|E?d(8U~*OlfPp&BsdOcV=wNr~%MI$nr+<8ORkUy8WUE8qw4@Ca z>qyy|tCEwn2Qx?y9)$7$ZPBGWaPqy~3BKsRdsG#%T8ruCSQ9Y>5|y-W2b{<%W*L^K zhzP!=b9Xdp!gHO3@y2|l4RcdAOcFLI%bmg2FvVPpVm4UYSa5NwWkatk);-h0D}iy- z2D1_?cbnxG+j@=}s}7Vb&!#S5f&IZnVdic$BA&H|-)dP5rV$&`lz?eDjcH3WMrU>N zykwI_*;|{nUC{%1;7E?O`7+`GgLf%~aAp9^ZE$*4DBk|y0<#TF^VcrwQgudC09!n< zRXK*`07Vr|9pM$=csnQrm6KNSEBH~Qq|~QJkFK!%^-qtkDm7dmD{v`Ai-3p(h8E$p zYF6$b`P`(aQFJZyV{*x|9`VqC`F)*gs2#v-`+4>@D+e5hv|*R3?x4=dcT7zrt9jA833%QLQm zmmpY&@C4smi3AS#m3LJ#ADyWFpMci)t@tV+1fGq1FcL8f&RI(6k2zO90nCAyuvH7Y zXHTAVp7X{o!R@FfOKd6@XA+8=~jWnUr207~Z zo#TR7XQKE5W)E!V3!FY?*#Cnp0A~3Az10c)*VXPyo&Qt&|BLtkQR}M1l0vQ# z_|Owxyqax43pd`@@wBk3d82}Wa^pJrw`s&=70DcC1Cg)*9qEh?SVT|M zUbe~Z5ee+&@?k{X!k83mM>=RIY8dVbAD02H7es8FOJG zRN^dELEeO_tA7!e{gRRqi-du`m2Jh=h})$ZOU@CSQeSG*MG>*G$p1m`Gn87MRBQnE z{}1^amabxuLKAwBMzlT2oL9jVg<(j+y{m_Kp@E=a@Kz2fNC!2y> zQ)yM@z@S7%pne&}X1cTpH&!G?+B%$$&tH$eB<*WnQIlJVexZigBnYR|C(RhLj1UTW zETSAJe|{oOcny+rg;@r_bt}!rwMvp|5W~|@?x`7E)0^h^Igi9Jr7_jVr*zA`=uXk` zh$>kUUUU82CeyGi(({LuhIGiv^78Wig)(|)#d(=!FG6-iaVro z%HQ+uX@#31k1;|k&@Kd`lg*o72RwK%!KMw@eDWPuZsei1mD>e#uDIuj;UhK5V zxYs7*Rr{6&6rv#e{Xsz-ONOypIxAl#LmeKz*fPmb#QQO)5hOjCtbvxVSA&{0K)Fgw zkMQRkmW%S(TuOJ~Pd zf4*L_-&g1OzS6yZ)Zvvyo03)6Pdpeb2f#rC(NviUqNr6Raf7T&*l|~)BI1@w&V@Pw z^Q@_I@{5#pxI{Di!bo9ok{OJUWh{+(a`RqhJP^b)$s4^EF3<;5G8=J+sdjKj$uP}F zf_RX$EJrk8_O30FLy37J(NLs3iv`);S|i@8zi*P&m2S7Cd7ckgJW5%?Evx~4P$ZqR z3rBF1V89doT22Y@C)K*HX%klPLJOn=pDrljh_XsU;enF))724&d_l&1HHSGmEhNv#LH`JspW&CqvEhmAr# zHH6p}fe)2YtJb*ZnN-tFH7G!crv^~Tt*-Jyrh*uWWblr))o_w+Rq+jn&cbHz;;BZ3 z`NAo$i7gyRKWzzErq#HWwL+b5+eFy|N2kvOx7$UcjrX*eIeHb=^1?(C7GdaSqF)=s z6p7WVTA%7s_V8zm^l=JpKqBldhB;m(9*r1P!H{jG+SQv`vbxZQC+2`a0;{$%z6({U zHrhxCd&`GREA|B?qm+%gym=2VZ*EbNRUi*vwetQgWTTV?G-Dyz2FQ4KPY_H65Zy$Q z@g#?k02Zq`9(ME2FeFpy>>&ia7Nj4iswuB^su`RtKl~JtAd?x3*DmFP{l5y0>!Q|w z>yz>Sy|r&@|8Mc@KLB@yhtdY|AXHaxA{8{X5KjD8h0F>F0s64#X?&MH@lq9YtTvtm z4=s+XWZ7#TGm&SWiYzdgFj%}zV%bu2r=Ez^~QiN~6*7kfAB yRf#HjgLq@bf66YaU}AcRG#tYlb}7Aat3WHNXTkbYf9lUC`uq=XQfpHHd;$P#2Lveq literal 37823 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 AH2?qr