From 0d7e3b799e4bb9e7bf9c982ff4e7c99af5b1451e Mon Sep 17 00:00:00 2001 From: Jenkins CI Date: Sat, 13 Jun 2026 01:02:05 +0800 Subject: [PATCH] release: v2.2.6 [2026-06-13 01:02:05] MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ### 新功能 - **翰林院向量化质量升级**: - **边界感知切块**:替换四个来源(聊天记录/小说/世界书/手动)的纯字符硬切——优先在段落边界断开,其次句末标点(含中文引号闭合),极端长串才硬切;句子/对话不再被拦腰截断,embedding 质量同步受益。仅影响新录入,已有向量无需重建 - **注入时序重排**:检索结果注入提示词前按时序重排(聊天记录按楼层、小说按卷/章/节——中文数字章节号可解析),rerank 只决定"选哪些块",不再决定呈现顺序;修复"不打不相识的剧情之后紧跟关系亲密"这类因按相关度排序导致的认知时间错乱 - **断层提示**:聊天记录相邻块楼层跳跃时自动插入"与上文相隔约 N 楼,并非连续发生"提示行,消除中间剧情缺失造成的割裂感 - **时间标识**:新录入的聊天记录块在来源标识中带上消息发送时间(ST 向量存储不持久化元数据,时间必须写入块文本才能在检索后取回;旧格式块兼容解析) - **记忆块工作流(memory-blocks)**:剧情优化新增"自定义记忆块"体系——占位符驱动的并发工作流框架 - 在剧情优化面板「匹配替换 (sulv)」下方可增删自定义块:每个块定义一个占位符,执行剧情优化时主/拦截提示词中的占位符会被块的产出替换 - **静态块**:直接输出固定内容;**AI 调用块**:用所选 API 功能槽独立请求一次,把回复(或其中指定 `<标签>` 的内容)作为替换值 - 原有 sulv1-4 速率占位符迁入同一框架,行为与旧版逐字节一致 - 块定义为纯 JSON、随设置持久化,为后续导入导出与战斗系统接入预留扩展点 - 框架层新增**顺序拼接式 Chain**(`composeChain`):与占位符替换并列的第二种组合范式——同链的块并发执行后按 `order` 排序、以 `separator` 拼接并可选 `header/footer` 包裹,产出一个完整注入块;为记忆注入合成块与战斗系统"底部战报块"预留的承载结构,本版本暂无 UI 入口 - **API 连接配置**: - 角色世界书(cwb)与一键生卡(autoCharCard)纳入旧配置自动迁移:老用户首次加载会把旧 URL / Key / 模型自动迁移为连接配置并分配槽位(一键生卡仅在规划者与执行者配置一致或规划者为空时迁移,避免悄悄改变行为) - **profile 已分配时参数控件 informational 化**:主面板 / 并发剧情优化 / 角色世界书 / 术语表的温度、maxTokens 控件在槽位分配 profile 后自动禁用并显示"由连接配置控制"提示,消除"改了没效果"的用户陷阱 - **profile 状态卡新增"本设备无 Key"警示**:API Key 仅保存在最初填写它的设备/浏览器上(安全设计,不随云端设置同步),换设备后状态卡会直接亮出警示徽标,不必等到调用报错才发现 ### 修复 - **独立聊天记忆从摆设变真功能(原作遗留坑)**:此前向量数据"随卡不随聊天"——开启"独立聊天记忆"后录入仍存进角色库、查询却去查一个从未被写入过的聊天集合、计数恒为 0,整体静默失效。现已重构为聊天级分桶: - 独立模式下,聊天记录类向量按当前聊天隔离存储与检索,同一张卡开多个聊天(不同剧情线)的记忆互不污染 - 小说 / 世界书 / 手动录入属于"知识",仍随角色卡跨聊天共享;全局库不受影响 - 知识管理列表为聊天专属库显示"聊天级"徽标;聊天级库禁止移动到全局 - 统一模式(默认关闭独立记忆)的存量数据与行为完全不变 - 已知限制:聊天专属记忆跟随聊天文件,重命名聊天文件会使其失联(与 ST 官方向量扩展同等限制) - **超级排序截断顺序修正**:开启"超级排序"时,时序重排发生在 top_n 截断之前,导致保留的是"时序最早"而非"最相关"的块,检索结果长期偏向最旧的聊天记录。现改为先按相关度截取 top_n、再做时序排序 - **翰林院向量化失败("向量化块数量不识别"反馈)**: - 一次性清洗 profile-sync 历史污染:`retrieval/rerank.apiKey` 中的掩码占位符在持久层根治(此前仅读取侧防御);`apiEndpoint` / `rerank.apiMode` 的非法值(如被旧版写入的空字符串)归一化为 `custom` - 修复 `apiEndpoint` 为空/非法时请求被硬定向到 `api.openai.com`、无视用户自定义 URL 的问题(CSP 拦截 / 401 的元凶) - 修复**本地代理(LM Studio/Ollama)模式**自始就缺少 URL 分支、同样被错误定向到 openai.com 的问题 - API 模式下拉补全 `OpenAI 官方` / `Azure` 选项;默认 API 模式改为 `custom`(与默认 URL 配套),新用户不再因选项缺失导致首次保存写入空值 - profile-sync 给下拉框赋不存在选项值的污染源头修复(影响所有模块面板,不止翰林院) - **Rerank "API Key 未提供"报错升级**:当原因是"连接配置在本设备没有可用 Key"时,报错会直接说明 Key 的设备本地性并指引到 API 连接配置重新填写(向量化 Google 直连、获取模型列表同步处理) - **旧配置迁移**:一键生卡迁移时排除掩码占位符,避免把历史污染的假 Key 迁入新连接配置 - **超级记忆稳定性专项**(针对"工作不大稳定"反馈,4 处根因一次修复): - **切聊天竞态污染**:CHAT_CHANGED 时超级记忆立即全量同步,而表格系统延迟 100ms 才加载新聊天的表格,导致【旧聊天】的表格内容被写进【新角色】的记忆世界书;两边表名不同时旧表条目无 GC 兜底会**永久残留**("记忆串台"元凶)。现 CHAT_CHANGED 只确保世界书存在,新状态同步交由 `loadTables()` 完成后的自动推送,单次且时序正确 - **死代码双轨存储拆除**:`saveStateToMetadata` / `tryRestoreStateFromMetadata` 把表格状态写到 `msg.metadata`——该字段非 ST 持久化位(同 v2.2.5 二次填表修过的坑),写入即蒸发、恢复永远为空,且每次同步还白调一次 `saveChat()`。整条链路删除,表格状态唯一信源为表格系统的 `msg.extra.amily2_tables_data` - **`awaitSync()` 穿透**:同步队列正忙时 `pushUpdate` 会用一个立即 resolve 的空 Promise 覆盖 `_syncPromise`,Pipeline Stage 4 等待形同虚设、后续阶段在同步未完成时被放行。现忙时不覆盖,正在运行的 drain 循环自然吃掉新入队项 - **开关打开不生效**:启动时若总开关为关,初始化早退且不注册监听器;此后在 UI 勾选开关只写设置,超级记忆直到刷新页面前都是死的。现勾选即触发初始化(幂等) - 附带:`forceSyncAll` 的表格角色推断改为复用 `events-schema.inferTableRole`,消除两处重复逻辑漂移风险;每次切聊天的双倍全量同步(restore 路径一次 + 显式一次)随死代码移除归一 ### 重构 - 表格核心 `manager.js` 瘦身(约 1050 → 600 行):19 个 UI 突变操作拆分至 `actions/ui-mutations.js`,SuperMemory 事件分发拆分至 `events-dispatch.js`;全部经 re-export 保持兼容,外部调用路径零改动 - 角色世界书最后 2 处散乱的厂商 URL 判断迁移至 `detectVendor` 统一入口,业务路径上不再有硬编码的 URL substring 判断 --- CharacterWorldBook/src/cwb_apiService.js | 5 +- CharacterWorldBook/src/cwb_uiManager.js | 4 + DEPLOY_NOTE.md | 71 ++- HanLin.md | 60 ++ TODOList.md | 323 +++-------- assets/Amily2-optimization.html | 11 + .../amily-hanlinyuan-system/hanlinyuan.html | 2 + core/memory-blocks/ai-call-handler.js | 54 ++ core/memory-blocks/chain.js | 97 ++++ core/memory-blocks/custom-blocks.js | 102 ++++ core/memory-blocks/executor.js | 47 +- core/memory-blocks/index.js | 64 ++- core/memory-blocks/runner.js | 40 ++ core/memory-blocks/types.js | 11 +- core/rag-api.js | 36 +- core/rag-processor.js | 461 +++++++++++----- core/rag-settings.js | 6 +- core/super-memory/SuperMemoryService.js | 18 +- core/super-memory/bindings.js | 6 + core/super-memory/manager.js | 174 +++--- core/table-system/actions/ui-mutations.js | 477 ++++++++++++++++ core/table-system/events-dispatch.js | 51 ++ core/table-system/manager.js | 518 +----------------- glossary/GT_bindings.js | 3 + manifest.json | 2 +- ui/bindings.js | 4 + ui/hanlinyuan-bindings.js | 7 +- ui/plot-opt-bindings.js | 190 +++++++ ui/profile-slider-guard.js | 62 +++ ui/profile-sync.js | 21 +- utils/auth.js | 2 +- utils/config/ApiProfileManager.js | 80 ++- utils/config/api-key-store/ApiKeyStore.js | 2 +- utils/config/api-key-store/crypto-utils.js | 2 +- utils/config/sensitive-keys.js | 2 +- 35 files changed, 1981 insertions(+), 1034 deletions(-) create mode 100644 core/memory-blocks/ai-call-handler.js create mode 100644 core/memory-blocks/chain.js create mode 100644 core/memory-blocks/custom-blocks.js create mode 100644 core/memory-blocks/runner.js create mode 100644 core/table-system/actions/ui-mutations.js create mode 100644 core/table-system/events-dispatch.js create mode 100644 ui/profile-slider-guard.js diff --git a/CharacterWorldBook/src/cwb_apiService.js b/CharacterWorldBook/src/cwb_apiService.js index 4092689..15ab883 100644 --- a/CharacterWorldBook/src/cwb_apiService.js +++ b/CharacterWorldBook/src/cwb_apiService.js @@ -6,6 +6,7 @@ import { extension_settings, getContext } from "/scripts/extensions.js"; import { compatibleTriggerSlash } from '../../core/tavernhelper-compatibility.js'; import { getSlotProfile, providerToApiMode } from '../../core/api/api-resolver.js'; import { configManager } from '../../utils/config/ConfigManager.js'; +import { detectVendor } from '../../utils/api-vendor.js'; function normalizeApiResponse(responseData) { let data = responseData; @@ -180,7 +181,7 @@ async function callCwbOpenAITest(messages, options) { }; }); - const isGoogleApi = validatedOptions.apiUrl.includes('googleapis.com'); + const isGoogleApi = (await detectVendor(validatedOptions.apiUrl)) === 'google'; const requestBody = { chat_completion_source: 'openai', @@ -648,7 +649,7 @@ export async function callCustomOpenAI(messages) { throw new Error('API URL/Model未配置。'); } - const isGoogleApi = state.customApiConfig.url.includes('googleapis.com'); + const isGoogleApi = (await detectVendor(state.customApiConfig.url)) === 'google'; const requestBody = { messages: messages, diff --git a/CharacterWorldBook/src/cwb_uiManager.js b/CharacterWorldBook/src/cwb_uiManager.js index ac00caa..9db4231 100644 --- a/CharacterWorldBook/src/cwb_uiManager.js +++ b/CharacterWorldBook/src/cwb_uiManager.js @@ -8,6 +8,7 @@ import { saveSettingsDebounced } from '/script.js'; import { amilyHelper } from '../../core/tavern-helper/main.js'; import { configManager } from '../../utils/config/ConfigManager.js'; + import { watchProfileSliderGuard } from '../../ui/profile-slider-guard.js'; const { jQuery: $, SillyTavern } = window; @@ -699,6 +700,9 @@ saveSettingsDebounced(); }); + // cwb 槽分配 profile 后,温度/maxTokens 由 profile 权威控制(T-006 informational 化) + watchProfileSliderGuard('cwb', ['#cwb-temperature', '#cwb-max-tokens']); + $('#cwb-test-connection').off('click').on('click', async function() { const $button = $(this); $button.prop('disabled', true).html(' 测试中...'); diff --git a/DEPLOY_NOTE.md b/DEPLOY_NOTE.md index 204a0f7..9a8a883 100644 --- a/DEPLOY_NOTE.md +++ b/DEPLOY_NOTE.md @@ -49,16 +49,6 @@ --- -## v2.2.5 - -### 修复 - -- **翰林院(RAG)API Key 污染**: - - 修复 `saveSettingsFromUI` 无差别遍历翰林院面板内全部 `[data-setting-key]` 输入(包含被 `profile-sync` 接管隐藏的字段),导致掩码占位符 `••••••••` 被当作真值写回 `settings.rerank.apiKey` / `settings.retrieval.apiKey`,URL / model 也被 Profile 值覆盖到 legacy 字段。修复后会跳过祖先带 `data-profile-hidden` 的输入 - - `getRerankSettings` / `getEmbedRetrievalSettings` 同时加入防御性还原:识别历史污染留下的 `••••••••` 时归为空字符串,避免取消 Profile 分配后实际请求带占位符 token 被 401 - ---- - ## v2.2.4 ### 新功能 @@ -78,6 +68,16 @@ - 修复选择连接配置后报"API Key 未配置"的问题(`apiMode` 现从设置读取而非硬编码 `custom`) - 补全 `hly-rerank-api-mode` 加载绑定及默认值 - **翰林院 RAG**:补全 `priorityRetrieval.sources` 各来源条目的缺失键,修复设置面板回填 TypeError + +--- + +## v2.2.5 + +### 修复 + +- **翰林院(RAG)API Key 污染**: + - 修复 `saveSettingsFromUI` 无差别遍历翰林院面板内全部 `[data-setting-key]` 输入(包含被 `profile-sync` 接管隐藏的字段),导致掩码占位符 `••••••••` 被当作真值写回 `settings.rerank.apiKey` / `settings.retrieval.apiKey`,URL / model 也被 Profile 值覆盖到 legacy 字段。修复后会跳过祖先带 `data-profile-hidden` 的输入 + - `getRerankSettings` / `getEmbedRetrievalSettings` 同时加入防御性还原:识别历史污染留下的 `••••••••` 时归为空字符串,避免取消 Profile 分配后实际请求带占位符 token 被 401 - **二次填表**: - 修复 `secondary-filler.js` 把哈希/重试次数写入非持久化的 `msg.metadata` 字段(ST 标准位是 `msg.extra`),导致刷新后去重与重试计数失效 - 修复扫描深度重复计入 `bufferSize`(`contextLimit + buffer + batch + redundancy` → `contextLimit + batch + redundancy`),避免越过预期窗口 @@ -92,3 +92,54 @@ - `callSillyTavernPreset` / `callNccsSillyTavernPreset` 通过 `raceAgainstSignal` 兜底,外部不可终止的 `ConnectionManagerRequestService.sendRequest` 也能在 signal 触发时即时返回 AbortError - 全部 catch 块识别 `AbortError`,rethrow 而不弹错误 toast;FC 重试逻辑识别中断后跳过重试 - **填表设置面板**:在"手动解除填表锁"旁新增"强制中断当前填表"按钮——通过 AbortController 真正掐断 fetch 连接(fetch 立即抛错),结果会被丢弃,不会污染表格 / hash / `saveChat` + +--- + +## v2.2.6 + +### 新功能 + +- **翰林院向量化质量升级**: + - **边界感知切块**:替换四个来源(聊天记录/小说/世界书/手动)的纯字符硬切——优先在段落边界断开,其次句末标点(含中文引号闭合),极端长串才硬切;句子/对话不再被拦腰截断,embedding 质量同步受益。仅影响新录入,已有向量无需重建 + - **注入时序重排**:检索结果注入提示词前按时序重排(聊天记录按楼层、小说按卷/章/节——中文数字章节号可解析),rerank 只决定"选哪些块",不再决定呈现顺序;修复"不打不相识的剧情之后紧跟关系亲密"这类因按相关度排序导致的认知时间错乱 + - **断层提示**:聊天记录相邻块楼层跳跃时自动插入"与上文相隔约 N 楼,并非连续发生"提示行,消除中间剧情缺失造成的割裂感 + - **时间标识**:新录入的聊天记录块在来源标识中带上消息发送时间(ST 向量存储不持久化元数据,时间必须写入块文本才能在检索后取回;旧格式块兼容解析) +- **记忆块工作流(memory-blocks)**:剧情优化新增"自定义记忆块"体系——占位符驱动的并发工作流框架 + - 在剧情优化面板「匹配替换 (sulv)」下方可增删自定义块:每个块定义一个占位符,执行剧情优化时主/拦截提示词中的占位符会被块的产出替换 + - **静态块**:直接输出固定内容;**AI 调用块**:用所选 API 功能槽独立请求一次,把回复(或其中指定 `<标签>` 的内容)作为替换值 + - 原有 sulv1-4 速率占位符迁入同一框架,行为与旧版逐字节一致 + - 块定义为纯 JSON、随设置持久化,为后续导入导出与战斗系统接入预留扩展点 + - 框架层新增**顺序拼接式 Chain**(`composeChain`):与占位符替换并列的第二种组合范式——同链的块并发执行后按 `order` 排序、以 `separator` 拼接并可选 `header/footer` 包裹,产出一个完整注入块;为记忆注入合成块与战斗系统"底部战报块"预留的承载结构,本版本暂无 UI 入口 +- **API 连接配置**: + - 角色世界书(cwb)与一键生卡(autoCharCard)纳入旧配置自动迁移:老用户首次加载会把旧 URL / Key / 模型自动迁移为连接配置并分配槽位(一键生卡仅在规划者与执行者配置一致或规划者为空时迁移,避免悄悄改变行为) + - **profile 已分配时参数控件 informational 化**:主面板 / 并发剧情优化 / 角色世界书 / 术语表的温度、maxTokens 控件在槽位分配 profile 后自动禁用并显示"由连接配置控制"提示,消除"改了没效果"的用户陷阱 + - **profile 状态卡新增"本设备无 Key"警示**:API Key 仅保存在最初填写它的设备/浏览器上(安全设计,不随云端设置同步),换设备后状态卡会直接亮出警示徽标,不必等到调用报错才发现 + +### 修复 + +- **独立聊天记忆从摆设变真功能(原作遗留坑)**:此前向量数据"随卡不随聊天"——开启"独立聊天记忆"后录入仍存进角色库、查询却去查一个从未被写入过的聊天集合、计数恒为 0,整体静默失效。现已重构为聊天级分桶: + - 独立模式下,聊天记录类向量按当前聊天隔离存储与检索,同一张卡开多个聊天(不同剧情线)的记忆互不污染 + - 小说 / 世界书 / 手动录入属于"知识",仍随角色卡跨聊天共享;全局库不受影响 + - 知识管理列表为聊天专属库显示"聊天级"徽标;聊天级库禁止移动到全局 + - 统一模式(默认关闭独立记忆)的存量数据与行为完全不变 + - 已知限制:聊天专属记忆跟随聊天文件,重命名聊天文件会使其失联(与 ST 官方向量扩展同等限制) +- **超级排序截断顺序修正**:开启"超级排序"时,时序重排发生在 top_n 截断之前,导致保留的是"时序最早"而非"最相关"的块,检索结果长期偏向最旧的聊天记录。现改为先按相关度截取 top_n、再做时序排序 +- **翰林院向量化失败("向量化块数量不识别"反馈)**: + - 一次性清洗 profile-sync 历史污染:`retrieval/rerank.apiKey` 中的掩码占位符在持久层根治(此前仅读取侧防御);`apiEndpoint` / `rerank.apiMode` 的非法值(如被旧版写入的空字符串)归一化为 `custom` + - 修复 `apiEndpoint` 为空/非法时请求被硬定向到 `api.openai.com`、无视用户自定义 URL 的问题(CSP 拦截 / 401 的元凶) + - 修复**本地代理(LM Studio/Ollama)模式**自始就缺少 URL 分支、同样被错误定向到 openai.com 的问题 + - API 模式下拉补全 `OpenAI 官方` / `Azure` 选项;默认 API 模式改为 `custom`(与默认 URL 配套),新用户不再因选项缺失导致首次保存写入空值 + - profile-sync 给下拉框赋不存在选项值的污染源头修复(影响所有模块面板,不止翰林院) +- **Rerank "API Key 未提供"报错升级**:当原因是"连接配置在本设备没有可用 Key"时,报错会直接说明 Key 的设备本地性并指引到 API 连接配置重新填写(向量化 Google 直连、获取模型列表同步处理) +- **旧配置迁移**:一键生卡迁移时排除掩码占位符,避免把历史污染的假 Key 迁入新连接配置 +- **超级记忆稳定性专项**(针对"工作不大稳定"反馈,4 处根因一次修复): + - **切聊天竞态污染**:CHAT_CHANGED 时超级记忆立即全量同步,而表格系统延迟 100ms 才加载新聊天的表格,导致【旧聊天】的表格内容被写进【新角色】的记忆世界书;两边表名不同时旧表条目无 GC 兜底会**永久残留**("记忆串台"元凶)。现 CHAT_CHANGED 只确保世界书存在,新状态同步交由 `loadTables()` 完成后的自动推送,单次且时序正确 + - **死代码双轨存储拆除**:`saveStateToMetadata` / `tryRestoreStateFromMetadata` 把表格状态写到 `msg.metadata`——该字段非 ST 持久化位(同 v2.2.5 二次填表修过的坑),写入即蒸发、恢复永远为空,且每次同步还白调一次 `saveChat()`。整条链路删除,表格状态唯一信源为表格系统的 `msg.extra.amily2_tables_data` + - **`awaitSync()` 穿透**:同步队列正忙时 `pushUpdate` 会用一个立即 resolve 的空 Promise 覆盖 `_syncPromise`,Pipeline Stage 4 等待形同虚设、后续阶段在同步未完成时被放行。现忙时不覆盖,正在运行的 drain 循环自然吃掉新入队项 + - **开关打开不生效**:启动时若总开关为关,初始化早退且不注册监听器;此后在 UI 勾选开关只写设置,超级记忆直到刷新页面前都是死的。现勾选即触发初始化(幂等) + - 附带:`forceSyncAll` 的表格角色推断改为复用 `events-schema.inferTableRole`,消除两处重复逻辑漂移风险;每次切聊天的双倍全量同步(restore 路径一次 + 显式一次)随死代码移除归一 + +### 重构 + +- 表格核心 `manager.js` 瘦身(约 1050 → 600 行):19 个 UI 突变操作拆分至 `actions/ui-mutations.js`,SuperMemory 事件分发拆分至 `events-dispatch.js`;全部经 re-export 保持兼容,外部调用路径零改动 +- 角色世界书最后 2 处散乱的厂商 URL 判断迁移至 `detectVendor` 统一入口,业务路径上不再有硬编码的 URL substring 判断 diff --git a/HanLin.md b/HanLin.md index b3191fe..6f0d167 100644 --- a/HanLin.md +++ b/HanLin.md @@ -10,6 +10,66 @@ --- +### 0. 原理速览:文本向量化(Embedding & Rerank) + +> 本节并非专业科普文献,不建议作为专业知识内容进行参考——只为帮你理解翰林院"为什么需要两套模型、它们各管什么"。 + +文本向量化的作用和意义是:**让计算机可以读懂人类的语言,并且可以找到最接近的内容(或理解其意思)**。 + +#### Embedding 模型(忆识检索用) + +比如我们有 3 个类型的标签,分别为:电子设备、体育运动、水果。 + +当我们传入"苹果手机"、"华为手机"、"跑步机"、"苹果"时,向量化后会得到每个文本的数字表示(通常是几百维的向量),如: + +``` +苹果手机: [0.2, 0.8, -0.1, 0.7, ...] (300个数字) +华为手机: [0.3, 0.7, -0.2, 0.6, ...] (300个数字) +跑步机: [0.8, 0.1, 0.9, -0.3, ...] (300个数字) +苹果: [-0.1, 0.2, 0.8, 0.9, ...] (300个数字) +``` + +同时我们也有每个类别标签的向量表示: + +``` +电子设备: [0.1, 0.9, -0.2, 0.8, ...] +体育运动: [0.9, 0.2, 0.8, -0.1, ...] +水果: [-0.2, 0.1, 0.7, 0.8, ...] +``` + +**在实际应用中,我们通过计算相似度来找到最匹配的内容:** + +1. **计算"苹果"与各标签的相似度**:与"水果"0.92、与"电子设备"0.15、与"体育运动"0.08 +2. **计算"苹果手机"与各标签的相似度**:与"电子设备"0.88、与"水果"0.35、与"体育运动"0.12 +3. **查找相似内容**:如果想找与"苹果手机"相似的内容——与"华为手机"0.95、与"跑步机"0.23、与"苹果"0.31 + +对计算机来说,直接的"苹果"、"手机"、"电子设备"等词语是不存在意义的,而向量化后的数字是可以被计算机理解和计算的。**向量化可以确保计算机或 AI 能知道你"可能"想找些什么,并找到最接近的内容。** 这正是"忆识检索"做的事:你的知识被切块、向量化存入宝库;对话时把最近的消息也向量化,按相似度捞出最相关的忆识。 + +#### Reranker 模型(忆识精炼用) + +Rerank 模型和 Embedding 模型的功能类似,但更加精细,可以对候选内容给出"更符合查询意思"的评分,选出最贴切的内容块。 + +以下是一个极简示意(并不是 rerank 模型的实际工作机制,只为便于理解)。假设有个超简化的 Reranker,只关注两个词:"便宜"和"智能": + +- **用户查询**:"便宜的智能手机" +- **候选答案**:① "这款手机很智能" ② "这个价格很便宜" ③ "智能手机性价比高" + +评分规则(简化版):匹配"便宜"+2 分、匹配"智能"+1 分、两个词都匹配额外 +3 分(奖励深度相关): + +| 候选 | 匹配分析 | 总分 | +|---|---|---| +| ① 这款手机很智能 | 仅"智能" +1 | 1 | +| ② 这个价格很便宜 | 仅"便宜" +2 | 2 | +| ③ 智能手机性价比高 | "智能"+1、"性价比高"≈"便宜"+2、双匹配+3 | **6** | + +Rerank 后:③ > ② > ①——原本排最后的"智能手机性价比高"被识别为最佳匹配。 + +#### 为什么两个都要 + +Rerank 模型比 Embedding 模型**算力需求更大(看看价格便可得知)、速度更慢,但更加精确**。所以最常见的组合就是:先由 Embedding 模型快速筛出特征相近的块(粗筛),再由 Reranker 在小范围内选出最贴合的块(精筛),既保证质量又节约 Token 用量。翰林院的"忆识检索"+"忆识精炼"两个页签正是这套组合。 + +--- + ### 1. 总览与核心开关 这里是翰林院的仪表面板,展示了核心状态并提供了最高权限的操作。 diff --git a/TODOList.md b/TODOList.md index 29b097f..8fff04f 100644 --- a/TODOList.md +++ b/TODOList.md @@ -7,252 +7,97 @@ > - [TableTODO.md](TableTODO.md) — 表格模块 IAD 深度重构计划(Phase 0/B/C) > - [TODO.md](TODO.md) — 旧版本变更日志(保留作为发布记录) > -> 最后更新:2026-05-08,对应 v2.2.0 已发布。 +> 最后更新:2026-06-11,对应 v2.2.5+(2603 分支)。 --- -## 一、最近落地(v2.1.1 → v2.2.0) +## 一、最近落地(v2.2.0 → 当前) > 上下文摘要,让接手者了解当前状态。代码细节看对应 commit。 | commit | 内容 | 涉及范围 | |--------|------|--------| -| `d283ff4` | 表格模块 IAD 解耦 + API 自定义参数 + 厂商预设连接 | `core/table-system/*` 新增 dto/infra/actions;`assets/api-vendor-params.json`;UI | -| `f022002` | DeepSeek registry 补 thinking 模式参数 | `assets/api-vendor-params.json` | -| `671c1b2` | profile 优先级修正:profile 分配后即权威,旧字段不再覆盖 | `core/api.js` 6 处 `getApiSettings` | -| `68217ff` | legacy 自动迁移 + 清除按钮 + tableFilling slot + silent fallback 移除 | `ApiProfileManager.js` / `historiographer.js` / 表格 3 filler | -| `b40f575` | bump 2.2.0 + tableFilling 默认 link main | `manifest.json` / `ApiProfileManager.js` | +| `d283ff4` | 表格模块 IAD 解耦 + API 自定义参数 + 厂商预设连接 | `core/table-system/*` dto/infra/actions;`assets/api-vendor-params.json`;UI | +| `671c1b2` | profile 优先级修正:profile 分配后即权威 | `core/api.js` 6 处 `getApiSettings` | +| `8b4b6b0` | 二级填表死锁修复 + 强制中断按钮(AbortController 贯穿) | `secondary-filler.js` | +| `dc57a1d` | memory-blocks Phase 1:占位符工作流抽象层,sulv1-4 迁入 | `core/memory-blocks/*`;`summarizer.js` | +| `91ceecc` | memory-blocks Phase 2:ai_call handler + 自定义块 UI 与持久化 | `core/memory-blocks/*`;剧情优化面板 | +| `6ad1354` | T-002:cwb / autoCharCard 纳入 legacy 自动迁移(迁移版本化 v2) | `ApiProfileManager.js` | +| `784bd70` | T-006:profile 已分配时参数控件 informational 化 | `ui/profile-slider-guard.js` + 4 面板 | +| `ef45e74` | T-007 / Phase 0.4:manager.js 抽出 ui-mutations + events-dispatch | `core/table-system/*` | **核心架构现状**(接手必读): -- **状态权威**:`utils/config/ApiProfileManager.js` 是 API 配置单一指挥所;profile 分配后即权威,旧字段(`s.ngmsTemperature` 等)不再覆盖 profile -- **表格模块**:核心在 [core/table-system/](core/table-system/) ,已按 IAD 拆分(dto/infra/actions/rendering.js/templates.js/preset.js),manager.js 退化为兼容层(仍保留 16 个 UI mutation + loadTables + updateTableFromText) -- **API 厂商识别**:[utils/api-vendor.js](utils/api-vendor.js) 提供 detectVendor / listVendorParams;registry 在 [assets/api-vendor-params.json](assets/api-vendor-params.json) -- **VS Code 类型校验**:[jsconfig.json](jsconfig.json) 已开启 checkJs,[types/sillytavern.d.ts](types/sillytavern.d.ts) 提供 SillyTavern 全局模块声明 +- **状态权威**:`utils/config/ApiProfileManager.js` 是 API 配置单一指挥所;profile 分配后即权威,旧字段不再覆盖 profile;legacy 迁移已版本化(`_legacyProfileMigrationVersion`,当前 v2 覆盖 8 个 chat slot) +- **表格模块**:核心在 [core/table-system/](core/table-system/),IAD 拆分(dto/infra/actions/rendering.js/templates.js/preset.js/events-dispatch.js);manager.js 已收缩至 ~600 行编排层,19 个 UI 突变在 [actions/ui-mutations.js](core/table-system/actions/ui-mutations.js)(manager re-export 兼容) +- **memory-blocks**:[core/memory-blocks/](core/memory-blocks/) 占位符驱动工作流,static + ai_call 两种 handler,自定义块 UI 在剧情优化面板;Phase 3(JSON 导入导出 / 战斗系统 plugin handler)未做 +- **API 厂商识别**:[utils/api-vendor.js](utils/api-vendor.js) detectVendor 为单一入口,业务路径散乱 includes 已清零 +- **VS Code 类型校验**:[jsconfig.json](jsconfig.json) checkJs 开启,[types/sillytavern.d.ts](types/sillytavern.d.ts) 提供全局声明 --- -## 二、待办任务 +## 二、已完成任务(2026-06-11 核对) -### 任务卡格式说明 - -每个任务包含: -- **类型**:bug / feature / refactor / cleanup / docs -- **难度**:🟢 简单(< 1h)/ 🟡 中等(1-3h)/ 🔴 高耦合(> 3h 或需架构判断) -- **建议执行者**:`GPT` / `Claude` / `Human` / `任意` -- **文件**:明确路径 + 行号锚点(若适用) -- **修改要点**:bullet 列表 -- **验收**:可验证的预期行为 -- **依赖**:前置任务的 ID(若有) +| ID | 内容 | 状态 | +|----|------|------| +| T-001 | 死代码清理 | ✅ 3 处死绑定已删。**例外**:`core/fractal-memory.js` 刻意保留——非本人设计,原作者未弃坑,留作坑位,勿删 | +| T-002 | cwb / autoCharCard legacy 自动迁移 | ✅ `6ad1354`。cwb 实际字段为 snake_case(`cwb_api_url`);autoCharCard 双角色嵌套对象,仅 planner 空/同 executor 时自动迁 | +| T-003 | NCCS 等支路透传 customParams | ✅ Nccs / Ngms / Jqyh / Sybd 四个 API 文件均已接入 | +| T-004 | hint panel 点击参数名插入 | ✅ `.amily2_param_hint_btn` + `_insertParamToCustomParams` | +| T-005 | 散乱 vendor URL 检查迁 detectVendor | ✅ `f7781c2` 收尾。保留项:`_detectVendorFromUrlSync`(迁移 IIFE 自包含)、RequestBody.js 兜底(即目标模式) | +| T-006 | profile 已分配时 slider informational | ✅ `784bd70`。范围:参数滑条(main / plotOptConc / cwb / sybd 四面板);URL/Key/模型输入框见 T-012 | +| T-007 | manager.js 抽出 ui-mutations.js | ✅ `ef45e74`。含 events-dispatch.js 抽出;manager↔ui-mutations 运行时环留待 0.8 解 | --- -### 🟢 GPT-friendly 简单任务 - -#### T-001: 清理已确认的死代码 - -- **类型**:cleanup -- **难度**:🟢 简单 -- **建议执行者**:GPT -- **依赖**:无 - -**待清理项**: - -1. **[core/fractal-memory.js](core/fractal-memory.js)** —— 整个文件死代码,`initializeFractalMemory` 在文件外完全没人调用。建议:直接删除整个文件。 -2. **[ui/historiography-bindings.js:494-513](ui/historiography-bindings.js#L494)** —— 绑定 `#amily2_ngms_temperature` 和 `#amily2_ngms_max_tokens` 这两个 HTML 中已不存在的元素。`getElementById` 永远返回 null,整段代码空跑。建议:直接删掉这段。 -3. **[ui/plot-opt-bindings.js:664-665](ui/plot-opt-bindings.js#L664)** —— 同样引用不存在的 `#amily2_opt_max_tokens` / `#amily2_opt_temperature`。建议:删掉。 -4. **[ui/plot-opt-bindings.js:698-699](ui/plot-opt-bindings.js#L698)** —— `opt_bindSlider` 调用同样的不存在 ID,删除。 - -**修改要点**: -- 删除前用 grep 确认每个 ID 在所有 .html 文件里都不存在 -- 删完后用 grep 检查没有其他文件 import 被删的函数 -- 提交前肉眼跑一次表格填表 / 剧情优化 / NGMS 总结,确认 UI 无回归 - -**验收**: -- [ ] 4 处死代码块全部删除 -- [ ] 启动控制台无 JS 错误 -- [ ] 表格 / 剧情优化 / 总结功能无回归 - ---- - -#### T-002: cwb / autoCharCard 加入 legacy 自动迁移 - -- **类型**:feature -- **难度**:🟢 简单 -- **建议执行者**:GPT -- **依赖**:无 - -**背景**:[utils/config/ApiProfileManager.js](utils/config/ApiProfileManager.js) 的 `LEGACY_PROFILE_MIGRATION_MAP` 目前覆盖 main / plotOpt / plotOptConc / ngms / nccs / sybd 6 个 slot。cwb 和 autoCharCard 的 legacy 字段结构略不同(cwb 用 `cwb_apiUrl` / `cwb_apiKey` / `cwb_model` ;autoCharCard 用 `acc_*` 前缀),所以暂时没纳入。 - -**修改要点**: - -1. 找出 cwb / autoCharCard 的 legacy 字段名(grep `cwb_apiUrl` / `acc_apiUrl` 之类) -2. 在 `LEGACY_PROFILE_MIGRATION_MAP` 加两条: - ```js - { - slot: 'cwb', - urlKey: 'cwb_apiUrl', - modelKey: 'cwb_model', - keyName: 'cwb_apiKey', - maxTokensKey: 'cwb_max_tokens', - temperatureKey: 'cwb_temperature', - name: 'CWB 旧配置', - }, - { - slot: 'autoCharCard', - urlKey: '???', // 需 grep 确认实际 key - ... - } - ``` -3. 同时在 `clearLegacyConfig` 的 `ALL_LEGACY_FIELDS` 和 `LEGACY_KEY_NAMES` 加对应条目 - -**验收**: -- [ ] 两个 slot 在迁移自调用 IIFE 跑过后能正确创建 profile + setKey + setAssignment -- [ ] 清理按钮能识别并清除这俩模块的旧字段 - ---- - -#### T-003: 表格 NCCS 支路透传 customParams - -- **类型**:feature -- **难度**:🟢 简单 -- **建议执行者**:GPT -- **依赖**:无 - -**背景**:v2.2.0 给 `core/api.js` 的 callOpenAITest / callOpenAICompatible / callSillyTavernBackend 都接入了 `options.customParams` spread。但 [core/api/NccsApi.js](core/api/NccsApi.js) 的 `callNccsOpenAITest` 等独立路径**没有**接入,导致用户在 NCCS profile 配置的 customParams 不生效。 - -**修改要点**: - -1. 找 [NccsApi.js](core/api/NccsApi.js) 里发请求的函数(`callNccsOpenAITest` / `callNccsSillyTavernPreset`),定位到 `JSON.stringify({ ... })` 处 -2. 在 body 构建时按"customParams 在前,核心字段在后覆盖"的顺序 spread: - ```js - body: JSON.stringify({ - ...(options.customParams || {}), - // 核心字段 - chat_completion_source: 'openai', - model: options.model, - messages, - // ... - }) - ``` -3. 同时确保 `getNccsApiSettings` 把 `profile.customParams` 透出(参考 [core/api.js:447-462](core/api.js#L447) 模式) -4. 同步给 NgmsApi / JqyhApi / SybdApi 做相同处理 - -**验收**: -- [ ] 在 NCCS profile 加 `{"top_p": 0.5}` 后,DevTools Network 看请求 body 包含 top_p:0.5 -- [ ] NGMS / JQYH / SYBD 同样验证 - ---- - -#### T-004: hint panel 点击参数名插入到 textarea - -- **类型**:feature -- **难度**:🟢 简单 -- **建议执行者**:GPT -- **依赖**:无 - -**背景**:[ui/api-config-bindings.js](ui/api-config-bindings.js) 的 `_updateCustomParamsHint` 现在只显示纯文本"已知参数:top_p、frequency_penalty、..."。没有交互。 - -**修改要点**: - -1. 把 hint 区改成参数名按钮列表,每个按钮 click 触发"如果当前 textarea JSON 已有这个 key 则不动,没有就 append 进去" -2. 实现 `_insertParamToCustomParams(paramName, defaultValue)`:解析 textarea JSON → 添加 key(用合理的占位值,例如 number 类型用 0、string 类型用 ""、object 类型用 {})→ JSON.stringify 回写 -3. 处理 textarea 当前为空 / 当前是非法 JSON 的情况(非法 JSON 时按钮 disabled + 提示用户先修复) - -**验收**: -- [ ] 切换 vendor 后参数名按钮列表更新 -- [ ] 点击按钮把对应 key 添加到 textarea -- [ ] 已存在的 key 不重复添加 - ---- +## 三、待办任务 ### 🟡 中等任务 -#### T-005: 15 处散乱 vendor URL 检查迁到 detectVendor +#### T-009: 表格 Phase B — JSON formatter -- **类型**:refactor +- **类型**:feature - **难度**:🟡 中等 - **建议执行者**:GPT 或 Claude -- **依赖**:无 +- **依赖**:无(不依赖 Bus 升级) -**背景**:之前的 51TODO Phase B 收尾任务。代码里 15+ 处 `apiUrl.includes('googleapis.com')` 散乱判断厂商,应该统一调 [utils/api-vendor.js#detectVendor](utils/api-vendor.js)。 +**详见**:[TableTODO.md#五-phase-b-json-formatter](TableTODO.md) -**待迁移文件**(grep `googleapis.com|anthropic.com|openai.com` 找): +**核心交付**: +- `core/table-system/formatters/json.js`:教 LLM 输出 `{"operations":[...]}`,解析为 Op[] +- 设置项 `table_filling_format: 'legacy'|'json'|'toolcall'`,默认 `legacy` +- UI 加 dropdown 切换 +- fillerShared 调用统一 formatter dispatcher -- `ui/api-config-bindings.js` -- `ui/plot-opt-bindings.js` -- `core/rag-api.js` -- `ui/profile-sync.js` -- `core/api.js` -- `CharacterWorldBook/src/cwb_apiService.js` -- `ui/bindings.js` -- `ui/table/nccs-bindings.js` -- `core/api/SybdApi.js` -- `core/api/Ngms_api.js` -- `core/api/JqyhApi.js` -- `core/api/NccsApi.js` -- `core/api/ConcurrentApi.js` - -**修改要点**: - -1. 每处 `if (apiUrl.includes('googleapis.com'))` 改为 `if ((await detectVendor(apiUrl)) === 'google')` -2. 注意有的位置在同步上下文(事件回调),用 `detectVendorSync` 但要先 `await getRegistry()` 预加载 -3. 不要为了重构改变行为:原来只判断 google 就只判断 google,原来判断多个 vendor 就保留多个 - -**验收**: -- [ ] 所有散乱 URL 检查替换完 -- [ ] 行为完全等价(用 grep 自检 includes 已全替换) -- [ ] 跑一遍主功能(主聊天 / 剧情优化 / NGMS 总结 / 表格填表)确认无回归 +**预估**:0.5 天 --- -#### T-006: jqyh/sybd/cwb 在 profile 已分配时把 slider 改成 informational +#### T-012: URL / Key / 模型输入框的 profile 压制提示(T-006 续) - **类型**:feature / UX - **难度**:🟡 中等 - **建议执行者**:GPT 或 Claude -- **依赖**:无 +- **依赖**:无(复用 [ui/profile-slider-guard.js](ui/profile-slider-guard.js)) -**背景**:v2.2.0 之后,profile 一旦分配就权威,jqyh/sybd/cwb 这些有 slider 的模块在 profile 分配后 slider 是无效的(用户改 slider 不影响请求)。这是用户陷阱。 - -**修改要点**: - -每个有 slider 的模块面板([plot-opt-bindings.js](ui/plot-opt-bindings.js) / [historiography-bindings.js](ui/historiography-bindings.js) / [glossary 相关 bindings](ui/) / [cwb_settingsManager.js](CharacterWorldBook/src/cwb_settingsManager.js)): - -1. 启动时 / profile 分配变化时检查对应 slot 是否分配了 profile -2. 若已分配: - - slider disable - - slider 旁加小字提示:"当前由 profile 「{profile.name}」 控制,请在 API 连接配置面板修改 profile" -3. 若未分配:保持原样(slider 可用,写入 legacy 字段) -4. 监听 profile 分配变化事件(可通过 ApiProfileManager 加 subscribe,或者轮询) +**背景**:T-006 只覆盖了参数滑条。各模块面板的 API URL / Key / 模型输入框在 profile 分配后同样失效,且涉及「测试连接 / 拉取模型」按钮的联动判断(这些按钮读的是 profile 还是 DOM 因模块而异),需逐面板核对后接入 `watchProfileSliderGuard`。 **验收**: -- [ ] 给 plotOpt 分配 profile 后,剧情优化面板的温度/maxTokens slider 变灰 + 提示 -- [ ] 取消分配后 slider 重新可用 -- [ ] 其他模块同样行为 +- [ ] profile 分配后各面板 URL/Key/模型输入框 disable + 提示 +- [ ] 测试连接按钮行为与提示一致(测的是 profile 配置就保持可用) --- -#### T-007: 表格 Phase 0.4 — 抽出 mutations.js +#### T-013: 剧情优化面板 top_p / presence / frequency 输入为死配置 -- **类型**:refactor -- **难度**:🟡 中等 -- **建议执行者**:Claude(涉及 IAD 一致性判断) +- **类型**:bug / cleanup +- **难度**:🟡 中等(需决策) +- **建议执行者**:Human 决策 + 任意执行 - **依赖**:无 -**背景**:[TableTODO.md#四-phase-0](TableTODO.md) 计划的 Phase 0.4。manager.js 还有 16 个 UI 突变函数(addRow / deleteColumn / renameTable 等),应抽到 `core/table-system/actions/ui-mutations.js`。 - -**修改要点**: - -1. 在 `core/table-system/actions/` 创建 `ui-mutations.js` -2. 把 manager.js 里这 16 个函数搬过去:deleteColumn / moveRow / insertRow / addRow / addColumn / updateHeader / deleteRow / restoreRow / commitPendingDeletions / insertColumn / moveColumn / deleteTable / addTable / renameTable / moveTable / updateTableRules / updateRow / clearAllTables / updateColumnWidth -3. manager.js 改为 re-export 这些函数(保持外部调用路径不变) -4. 各函数签名/行为保持完全一致 - -**验收**: -- [ ] manager.js 行数显著减少 -- [ ] 所有 UI 突变操作在表格面板里行为一致(手动测每个操作) -- [ ] 没有任何 import 失败 +**背景**:`plotOpt_top_p` / `plotOpt_presence_penalty` / `plotOpt_frequency_penalty` 只有 UI 在读写([plot-opt-bindings.js](ui/plot-opt-bindings.js)),core 请求路径无人消费——用户改了完全没效果。二选一: +1. 接上:在 plotOpt 请求体里带上这三个参数(profile 的 customParams 机制已能覆盖此需求,可能多余) +2. 删掉:移除 UI 控件 + 默认值 +(已在 clearLegacyConfig 列表中) --- @@ -277,25 +122,6 @@ --- -#### T-009: 表格 Phase B — JSON formatter - -- **类型**:feature -- **难度**:🟡 中等 -- **建议执行者**:GPT 或 Claude -- **依赖**:无(不依赖 Bus 升级) - -**详见**:[TableTODO.md#五-phase-b-json-formatter](TableTODO.md) - -**核心交付**: -- `core/table-system/formatters/json.js`:教 LLM 输出 `{"operations":[...]}`,解析为 Op[] -- 设置项 `table_filling_format: 'legacy'|'json'|'toolcall'`,默认 `legacy` -- UI 加 dropdown 切换 -- fillerShared 调用统一 formatter dispatcher - -**预估**:0.5 天 - ---- - #### T-010: 表格 Phase C — ToolCall formatter - **类型**:feature @@ -312,45 +138,52 @@ - **类型**:refactor - **难度**:🔴 高(filler 三方差异需小心对齐 / 解循环依赖 / Service 重写) - **建议执行者**:Claude -- **依赖**:T-007(Phase 0.4 mutations 完成后做) +- **依赖**:T-007 已完成 ✅,可随时开工 **详见**:[TableTODO.md#四-phase-0](TableTODO.md) 0.7-0.9 - 0.7: `core/table-system/filler/shared.js` —— 三个 filler 重复代码消除 -- 0.8: 解 manager.js ↔ secondary-filler.js 循环依赖 +- 0.8: 解循环依赖(manager ↔ secondary-filler;新增的 manager ↔ ui-mutations 一并处理) - 0.9: TableSystemService 真正变成门面 **预估**:1 天 --- -## 三、派工建议 +#### T-014: memory-blocks Phase 3 -### 适合现在直接派给 GPT(独立、无架构判断) +- **类型**:feature +- **难度**:🟡 中等 +- **建议执行者**:Claude +- **依赖**:Phase 2 已完成 ✅(`91ceecc`) -- ✅ T-001 死代码清理 -- ✅ T-002 cwb/autoCharCard 加入迁移 -- ✅ T-003 NCCS 透传 customParams -- ✅ T-004 hint panel 点击插入 - -### GPT 或 Claude 都可以 - -- T-005 vendor 检查迁移(量大但机械) -- T-006 slider informational 状态 -- T-009 JSON formatter - -### 建议留给 Claude 或人 - -- T-007 mutations.js 抽出(涉及 IAD 一致性) -- T-008 Bus tool-call 升级(架构核心) -- T-010 ToolCall formatter(依赖前置) -- T-011 表格 Phase 0 收尾(filler 重复代码 dedup 风险高) +**核心交付**: +- 自定义块 JSON 导入导出(`replaceContextBlocks` 已就位) +- 战斗系统通过 `plugin` handler 接入(types.js 契约已预留) +- summarizer 链路补 AbortController,让 ai_call 块可中断(handler 的 signal 透传已就位) --- -## 四、未列入但可能的小项 +## 四、派工建议 + +### GPT 或 Claude 都可以 + +- T-009 JSON formatter +- T-012 URL/Key informational(机械,照 T-006 模式) + +### 建议留给 Claude 或人 + +- T-008 Bus tool-call 升级(架构核心) +- T-010 ToolCall formatter(依赖前置) +- T-011 表格 Phase 0 收尾(filler dedup 风险高) +- T-013 死配置决策(需 Human 拍板接上还是删掉) +- T-014 memory-blocks Phase 3 + +--- + +## 五、未列入但可能的小项 - 自动迁移完成后给所有 chat 类型 slot 加默认 link 选项(不只 tableFilling) - profile 分配 UI 加"复用现有 profile"快捷按钮(避免用户为每个 slot 重复创建相同配置) - 51TODO.md 第三节决策点中"是否合并发版"等问题做最终决定记录 -- TODO.md(旧版本变更日志)的 v2.2.0 版本条目补全 +- TODO.md(旧版本变更日志)的 v2.2.x 版本条目补全 diff --git a/assets/Amily2-optimization.html b/assets/Amily2-optimization.html index e78392d..9084b08 100644 --- a/assets/Amily2-optimization.html +++ b/assets/Amily2-optimization.html @@ -175,6 +175,17 @@ +
+ 自定义记忆块 +
+ 每个块定义一个占位符:执行剧情优化时,主/拦截提示词中出现的占位符会被块的产出替换。 + 静态块直接输出固定内容;AI 调用块会用所选 API 槽独立请求一次,把回复作为替换值。 +
+
+ +
diff --git a/assets/amily-hanlinyuan-system/hanlinyuan.html b/assets/amily-hanlinyuan-system/hanlinyuan.html index 81e0a2a..5262d02 100644 --- a/assets/amily-hanlinyuan-system/hanlinyuan.html +++ b/assets/amily-hanlinyuan-system/hanlinyuan.html @@ -89,6 +89,8 @@ + +
diff --git a/core/memory-blocks/ai-call-handler.js b/core/memory-blocks/ai-call-handler.js new file mode 100644 index 0000000..122ce67 --- /dev/null +++ b/core/memory-blocks/ai-call-handler.js @@ -0,0 +1,54 @@ +/** + * core/memory-blocks/ai-call-handler.js — 'ai_call' generator handler(Phase 2) + * + * 执行一次独立 AI 调用,把回复(或其中指定标签的内容)作为块的替换值。 + * + * 与 generator-handlers.js 分离的原因:本 handler 依赖 core/api.js(牵涉 + * DOM / ST 运行时),注册表本身保持零依赖,便于单测与 JSON 工具复用。 + * + * generator 字段(AiCallGenerator,契约见 types.js): + * apiSlot - callAI 的功能槽('main' / 'plotOpt' / 'nccs' ...),缺省 'main' + * promptTemplate - 作为 user 消息发送的提示词(必填,空则块跳过) + * systemPrompt - 可选,附加在前面的 system 消息 + * extractTag - 可选,只取回复中最后一个 ... 的内容; + * 标签缺失时回退为完整回复(宽容处理,模型偶发不包 + * 标签时块仍有产出,而不是静默保留占位符) + * + * 失败语义(与 executor 约定一致): + * - callAI 内部捕获的 API 错误返回 null → 块产出 null → 占位符保留 + * - AbortError 由 callAI 原样上抛 → executor 整体中断(signal 贯穿 fetch) + */ + +import { callAI } from '../api.js'; +import { extractContentByTag } from '../../utils/tagProcessor.js'; +import { registerHandler } from './generator-handlers.js'; + +registerHandler('ai_call', async (block, ctx) => { + const gen = block.generator || {}; + const prompt = typeof gen.promptTemplate === 'string' ? gen.promptTemplate.trim() : ''; + if (!prompt) { + console.warn(`[MemoryBlocks] ai_call 块 ${block.id} 缺少 promptTemplate,已跳过。`); + return null; + } + + const messages = []; + if (typeof gen.systemPrompt === 'string' && gen.systemPrompt.trim()) { + messages.push({ role: 'system', content: gen.systemPrompt }); + } + messages.push({ role: 'user', content: prompt }); + + const response = await callAI(messages, { + slot: gen.apiSlot || 'main', + signal: ctx?.signal, + }); + if (!response || !response.trim()) return null; + + if (gen.extractTag) { + const extracted = extractContentByTag(response, gen.extractTag); + if (extracted !== null && extracted.trim()) return extracted.trim(); + console.warn(`[MemoryBlocks] ai_call 块 ${block.id} 回复中未找到 <${gen.extractTag}> 标签,回退为完整回复。`); + } + return response.trim(); +}); + +export {}; diff --git a/core/memory-blocks/chain.js b/core/memory-blocks/chain.js new file mode 100644 index 0000000..e337a70 --- /dev/null +++ b/core/memory-blocks/chain.js @@ -0,0 +1,97 @@ +/** + * core/memory-blocks/chain.js + * + * 顺序拼接式工作流:把 context 下所有启用块的结果,按 block.order 排序后用 separator + * 拼接,并可选 header/footer 包裹,最终输出一个"完整的注入块"字符串。 + * + * 与 executor.js(模板替换式)并列两种组合范式: + * - executor: 模板里挖空 placeholder,块负责填料 → 替换式 + * - chain: 无模板,块各自产出一段文本 → 顺序拼成一整段 + * + * 战斗系统设计稿(§3.2)里的"战报作底部独立注入块"、未来的"记忆注入合成块" + * 都是 chain 模式的天然用例:战斗模块只需声明一个 BlockDefinition,order 取大 + * 就自动落在拼接末尾。 + * + * ── Chain 定义(纯数据、JSON 可序列化)───────────────────────────────────── + * { + * id: string // 与 BlockDefinition.context 对齐,块通过 context 隐式归属 + * name?: string // UI 显示名 + * separator?: string // 块间分隔符,默认 '\n\n' + * header?: string // 整段前缀,可选 + * footer?: string // 整段后缀,可选 + * } + * + * Chain 无须显式注册也能 compose——未注册时使用默认值,方便临时拼接。 + */ + +import { executeContext } from './runner.js'; + +const chains = new Map(); + +const DEFAULT_SEPARATOR = '\n\n'; + +function validateChain(def) { + if (!def || typeof def !== 'object') throw new Error('[MemoryBlocks/Chain] 定义必须是对象。'); + if (!def.id) throw new Error('[MemoryBlocks/Chain] Chain.id 必填。'); +} + +export function registerChain(def) { + validateChain(def); + chains.set(def.id, { + separator: DEFAULT_SEPARATOR, + header: '', + footer: '', + ...def, + }); +} + +export function unregisterChain(id) { + return chains.delete(id); +} + +export function getChain(id) { + return chains.get(id) ?? null; +} + +export function listChains() { + return [...chains.values()]; +} + +/** + * 执行 Chain,按 order 排序后拼接成最终字符串。 + * + * @param {string} chainId + * @param {{ settings?, signal?, extras? }} [opts] + * @returns {Promise} + */ +export async function composeChain(chainId, opts = {}) { + if (!chainId) return ''; + const chain = getChain(chainId); + const results = await executeContext({ context: chainId, ...opts }); + + const sorted = results + .filter(r => r !== null) + .sort((a, b) => (a.block.order ?? 0) - (b.block.order ?? 0)); + + const separator = chain?.separator ?? DEFAULT_SEPARATOR; + const body = sorted.map(r => r.value).join(separator); + + const parts = [chain?.header, body, chain?.footer] + .map(p => (typeof p === 'string' ? p : '')) + .filter(p => p.length > 0); + + return parts.join(separator); +} + +/** + * 取 Chain 的执行结果明细(含每块原值),用于调试或调用方自定义后处理。 + * + * @returns {Promise>} + */ +export async function inspectChain(chainId, opts = {}) { + if (!chainId) return []; + const results = await executeContext({ context: chainId, ...opts }); + return results + .filter(r => r !== null) + .sort((a, b) => (a.block.order ?? 0) - (b.block.order ?? 0)); +} diff --git a/core/memory-blocks/custom-blocks.js b/core/memory-blocks/custom-blocks.js new file mode 100644 index 0000000..8bd67ba --- /dev/null +++ b/core/memory-blocks/custom-blocks.js @@ -0,0 +1,102 @@ +/** + * core/memory-blocks/custom-blocks.js — 用户自定义块的持久化(Phase 2) + * + * 自定义块以纯 JSON(BlockDefinition 数组)存于 + * extension_settings[extensionName].memoryBlocks_customBlocks, + * 与运行时注册中心(registry.js)双向同步: + * - bootstrap / UI 初始化时 syncCustomBlocksFromSettings() 全量重放 + * - 增删改 CRUD 同时更新 settings 与 registry,并 saveSettingsDebounced + * + * 自定义块 id 一律以 'custom.' 为前缀,与内置块('plotOpt.sulv1' 等)天然 + * 隔离;CRUD 仅对该前缀生效,内置块不可经此修改或删除。 + */ + +import { extension_settings } from '/scripts/extensions.js'; +import { saveSettingsDebounced } from '/script.js'; +import { extensionName } from '../../utils/settings.js'; +import { register, unregister, listAll } from './registry.js'; + +const STORAGE_KEY = 'memoryBlocks_customBlocks'; +export const CUSTOM_ID_PREFIX = 'custom.'; + +export function isCustomBlockId(id) { + return typeof id === 'string' && id.startsWith(CUSTOM_ID_PREFIX); +} + +function getStore() { + if (!extension_settings[extensionName]) extension_settings[extensionName] = {}; + const s = extension_settings[extensionName]; + if (!Array.isArray(s[STORAGE_KEY])) s[STORAGE_KEY] = []; + return s[STORAGE_KEY]; +} + +function persist() { + saveSettingsDebounced(); +} + +function newCustomId() { + return `${CUSTOM_ID_PREFIX}${Date.now().toString(36)}${Math.random().toString(36).slice(2, 7)}`; +} + +/** + * 把 settings 中的自定义块全量重放进 registry(幂等,可重复调用)。 + * 单个块定义损坏时跳过并告警,不影响其余块。 + */ +export function syncCustomBlocksFromSettings() { + for (const b of listAll()) { + if (isCustomBlockId(b.id)) unregister(b.id); + } + for (const def of getStore()) { + try { + register(def); + } catch (error) { + console.warn(`[MemoryBlocks] 自定义块定义损坏,已跳过:`, def, error); + } + } +} + +/** 列出某 context 下的自定义块(settings 为权威源;不过滤 enabled)。 */ +export function listCustomBlocks(context) { + const store = getStore(); + return context ? store.filter(b => b.context === context) : [...store]; +} + +export function getCustomBlock(id) { + return getStore().find(b => b.id === id) ?? null; +} + +/** + * 新增自定义块。def 不含 id(自动生成);校验失败时抛错、不落库。 + * @returns {Object} 落库后的完整定义 + */ +export function addCustomBlock(def) { + const full = { enabled: true, ...def, id: newCustomId() }; + register(full); // 先过 registry 校验,抛错则不落库 + getStore().push(full); + persist(); + return full; +} + +/** 修改自定义块(浅合并 patch;id/非 custom 块不可改)。 */ +export function updateCustomBlock(id, patch) { + if (!isCustomBlockId(id)) throw new Error(`[MemoryBlocks] 仅自定义块可修改: ${id}`); + const store = getStore(); + const idx = store.findIndex(b => b.id === id); + if (idx === -1) throw new Error(`[MemoryBlocks] 自定义块不存在: ${id}`); + const merged = { ...store[idx], ...patch, id }; + register(merged); // 校验 + 覆盖注册 + store[idx] = merged; + persist(); + return merged; +} + +export function deleteCustomBlock(id) { + if (!isCustomBlockId(id)) return false; + const store = getStore(); + const idx = store.findIndex(b => b.id === id); + if (idx === -1) return false; + store.splice(idx, 1); + unregister(id); + persist(); + return true; +} diff --git a/core/memory-blocks/executor.js b/core/memory-blocks/executor.js index 664ffb5..d749263 100644 --- a/core/memory-blocks/executor.js +++ b/core/memory-blocks/executor.js @@ -1,43 +1,27 @@ /** * core/memory-blocks/executor.js * - * 工作流执行器:拉 context 下的全部块 → Promise.all 并发执行 generator - * → 把每个块的结果按 placeholder 替换回模板。 + * 模板替换式工作流:用块结果 substitute 到模板的 placeholder 处。 + * 与 chain.js(顺序拼接式)并列两种组合方式,共用 runner.js 的底层执行原语。 + * + * 适用场景:sulv1-4 这种"prompt 里已挖好占位符,块负责填料"。 * * 核心 API: * applyToTemplate(template, opts) 单模板进,字符串出 * applyToTemplates(templates, opts) 多模板进(数组或对象),结构同形出; * 块只执行一次,对每个模板复用结果 - * generateBlockMap(opts) 不替换,返回 { id → value } 给调用方自己玩 + * generateBlockMap(opts) 不替换,返回 { id → value } 给调用方自由组合 * * 中断行为:opts.signal 由调用方控制,传给每个 handler;任一 handler 抛 - * AbortError 时,executor 也抛 AbortError 向上传递(与现有 callAI 体系一致)。 + * AbortError 时整体抛出向上传递(与现有 callAI 体系一致)。 */ -import { getHandler } from './generator-handlers.js'; -import { listByContext } from './registry.js'; +import { executeContext } from './runner.js'; function escapeForRegex(s) { return String(s).replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); } -async function runBlock(block, ctx) { - const handler = getHandler(block.generator?.type); - if (!handler) { - console.warn(`[MemoryBlocks] 未注册的 generator 类型 "${block.generator?.type}",块 ${block.id} 已跳过。`); - return null; - } - try { - const value = await handler(block, ctx); - if (value === null || value === undefined) return null; - return { block, value: String(value) }; - } catch (error) { - if (error?.name === 'AbortError') throw error; - console.error(`[MemoryBlocks] 块 ${block.id} 生成失败:`, error); - return null; - } -} - function substituteOne(template, results) { if (typeof template !== 'string' || !template) return template ?? ''; let out = template; @@ -49,20 +33,9 @@ function substituteOne(template, results) { return out; } -/** - * 执行 context 下的所有块,返回 [ {block, value} | null, ... ]。 - * 内部使用,applyToTemplate(s) 复用。 - */ -async function executeBlocks({ context, settings, signal, extras } = {}) { - const blocks = listByContext(context); - if (blocks.length === 0) return []; - const ctx = { settings: settings ?? {}, signal, context, extras }; - return await Promise.all(blocks.map(b => runBlock(b, ctx))); -} - export async function applyToTemplate(template, opts = {}) { if (typeof template !== 'string' || !template) return template ?? ''; - const results = await executeBlocks(opts); + const results = await executeContext(opts); return substituteOne(template, results); } @@ -73,7 +46,7 @@ export async function applyToTemplate(template, opts = {}) { * - 字符串 → 退化为 applyToTemplate */ export async function applyToTemplates(templates, opts = {}) { - const results = await executeBlocks(opts); + const results = await executeContext(opts); if (typeof templates === 'string') return substituteOne(templates, results); if (Array.isArray(templates)) return templates.map(t => substituteOne(t, results)); @@ -89,7 +62,7 @@ export async function applyToTemplates(templates, opts = {}) { * 不替换,只把块结果汇成 Map,调用方拿去自由组合。 */ export async function generateBlockMap(opts = {}) { - const results = await executeBlocks(opts); + const results = await executeContext(opts); const map = new Map(); for (const r of results) { if (r) map.set(r.block.id, r.value); diff --git a/core/memory-blocks/index.js b/core/memory-blocks/index.js index b0a4503..3b23b4f 100644 --- a/core/memory-blocks/index.js +++ b/core/memory-blocks/index.js @@ -3,19 +3,39 @@ * * 记忆块工作流系统对外入口。导入此模块即触发: * 1. generator-handlers 加载 → 注册内置 'static' handler - * 2. registerBuiltinBlocks() → 注册首批内置块(sulv1-4) + * 2. ai-call-handler 加载 → 注册 'ai_call' handler(Phase 2) + * 3. registerBuiltinBlocks() → 注册首批内置块(sulv1-4) + * 4. syncCustomBlocksFromSettings() → 重放用户自定义块(Phase 2) + * + * 两种组合范式: + * - 模板替换式(executor.js):prompt 里挖空 placeholder,块填料 → 适合 sulv1-4 + * - 顺序拼接式(chain.js) :块各自产出一段,按 order 拼接成完整注入块 → + * 适合记忆注入、战报底部块 * * 公开 API: - * - register / unregister / getById / listByContext / listAll - * - registerHandler / getHandler / listHandlerTypes - * - applyToTemplate(template, opts) - * - applyToTemplates(templates, opts) ← 多模板批处理首选 - * - generateBlockMap(opts) + * Block: + * register / unregister / getById / listByContext / listAll + * replaceContextBlocks (批量替换某 context 下全部块,JSON 导入用) + * Handler: + * registerHandler / unregisterHandler / getHandler / listHandlerTypes + * 模板替换式: + * applyToTemplate(template, opts) + * applyToTemplates(templates, opts) ← 多模板批处理首选 + * generateBlockMap(opts) + * 顺序拼接式: + * registerChain(def) / unregisterChain / getChain / listChains + * composeChain(chainId, opts) → string + * inspectChain(chainId, opts) → Array<{block, value}>(调试/自定义后处理) + * 自定义块 CRUD(Phase 2,用户在 UI 增删改): + * listCustomBlocks / getCustomBlock / addCustomBlock / + * updateCustomBlock / deleteCustomBlock / syncCustomBlocksFromSettings + * CUSTOM_ID_PREFIX / isCustomBlockId * - * opts 字段:{ context, settings, signal?, extras? } + * opts 字段:{ settings, signal?, extras? } + * (context 对应 chainId / Block.context,由各 API 自行传或从 chainId 推导) * * 设计目标: - * - BlockDefinition 纯数据,可 JSON 序列化(Phase 3 用户自定义导入导出) + * - BlockDefinition / ChainDefinition 都是纯数据,JSON 可序列化(Phase 3 用户自定义导入导出) * - generator 通过 type 查表,handler 集中注册,便于扩展 ai_call / plugin * - 同一 context 下的块 Promise.all 并发;任一块抛 AbortError 整体中断 */ @@ -43,9 +63,33 @@ export { generateBlockMap, } from './executor.js'; -import { registerBuiltinBlocks } from './builtin-blocks.js'; +export { + registerChain, + unregisterChain, + getChain, + listChains, + composeChain, + inspectChain, +} from './chain.js'; -// 导入此模块即完成内置块注册(幂等) +export { + CUSTOM_ID_PREFIX, + isCustomBlockId, + listCustomBlocks, + getCustomBlock, + addCustomBlock, + updateCustomBlock, + deleteCustomBlock, + syncCustomBlocksFromSettings, +} from './custom-blocks.js'; + +import './ai-call-handler.js'; // 副作用:注册 'ai_call' handler +import { registerBuiltinBlocks } from './builtin-blocks.js'; +import { syncCustomBlocksFromSettings } from './custom-blocks.js'; + +// 导入此模块即完成内置块注册与自定义块重放(均幂等)。 +// ST 在 import 扩展脚本前已加载完 extension_settings,此时读取是安全的。 registerBuiltinBlocks(); +syncCustomBlocksFromSettings(); export { registerBuiltinBlocks }; diff --git a/core/memory-blocks/runner.js b/core/memory-blocks/runner.js new file mode 100644 index 0000000..1f70839 --- /dev/null +++ b/core/memory-blocks/runner.js @@ -0,0 +1,40 @@ +/** + * core/memory-blocks/runner.js + * + * 块执行的底层原语,被 executor.js(模板替换)和 chain.js(顺序拼接)共用。 + * + * runBlock(block, ctx) → { block, value } | null + * 单块执行;handler 抛 AbortError 时向上传递,其余异常吞掉并返回 null + * handler 返回 null/undefined 时同样返回 null(视为"无内容") + * + * executeContext({ context, settings, signal, extras }) → Array<{block,value}|null> + * 按 context 拉块 → Promise.all 并发执行 → 返回结果数组(保留 null 占位以便上层 + * 按 order 排序时不丢失映射关系,调用方过滤 null 即可) + */ + +import { getHandler } from './generator-handlers.js'; +import { listByContext } from './registry.js'; + +export async function runBlock(block, ctx) { + const handler = getHandler(block.generator?.type); + if (!handler) { + console.warn(`[MemoryBlocks] 未注册的 generator 类型 "${block.generator?.type}",块 ${block.id} 已跳过。`); + return null; + } + try { + const value = await handler(block, ctx); + if (value === null || value === undefined) return null; + return { block, value: String(value) }; + } catch (error) { + if (error?.name === 'AbortError') throw error; + console.error(`[MemoryBlocks] 块 ${block.id} 生成失败:`, error); + return null; + } +} + +export async function executeContext({ context, settings, signal, extras } = {}) { + const blocks = listByContext(context); + if (blocks.length === 0) return []; + const ctx = { settings: settings ?? {}, signal, context, extras }; + return await Promise.all(blocks.map(b => runBlock(b, ctx))); +} diff --git a/core/memory-blocks/types.js b/core/memory-blocks/types.js index c34d972..10ec809 100644 --- a/core/memory-blocks/types.js +++ b/core/memory-blocks/types.js @@ -18,11 +18,12 @@ */ /** - * @typedef {Object} AiCallGenerator (Phase 2 预留) + * @typedef {Object} AiCallGenerator 独立 AI 调用(handler 见 ai-call-handler.js) * @property {'ai_call'} type - * @property {string} apiSlot - * @property {string} promptTemplate - * @property {string} [extractTag] + * @property {string} [apiSlot='main'] - callAI 功能槽(ApiProfileManager.SLOTS 中的 chat 槽) + * @property {string} promptTemplate - 作为 user 消息发送;空则块跳过 + * @property {string} [systemPrompt] - 可选的 system 消息 + * @property {string} [extractTag] - 只取回复中 ... 的内容;缺失时回退完整回复 */ /** @@ -36,7 +37,7 @@ /** * @typedef {Object} BlockDefinition - * @property {string} id - 全局唯一 + * @property {string} id - 全局唯一;用户自定义块以 'custom.' 为前缀(见 custom-blocks.js) * @property {string} placeholder - 在模板中要被替换的占位符(按字面量匹配,正则元字符自动转义) * @property {string} context - 所属流水线,如 'plotOptimization' * @property {GeneratorSpec} generator diff --git a/core/rag-api.js b/core/rag-api.js index beef8d3..8c6b012 100644 --- a/core/rag-api.js +++ b/core/rag-api.js @@ -40,18 +40,33 @@ function getSettings() { export async function getEmbedRetrievalSettings() { const profile = await getSlotProfile('ragEmbed'); if (profile) { + const apiKey = sanitizeMaskedKey(profile.apiKey ?? ''); return { apiEndpoint: profile.provider === 'google' ? 'google_direct' : 'custom', customApiUrl: profile.apiUrl, - apiKey: sanitizeMaskedKey(profile.apiKey ?? ''), + apiKey, embeddingModel: profile.model, batchSize: getSettings().retrieval?.batchSize ?? 5, + // Key 存储是设备本地的(ApiKeyStore local/cloud 模式均不跨设备), + // 换设备/浏览器后 profile 同步而 Key 缺失——标记出来供报错说明 + _keyMissingFromProfile: !apiKey, + _profileName: profile.name || profile.id, }; } const fallback = getSettings().retrieval || {}; return { ...fallback, apiKey: sanitizeMaskedKey(fallback.apiKey ?? '') }; } +/** Key 缺失时的统一文案:区分"profile 在本设备无 Key"与"未配置" */ +export function describeMissingKey(resolved, plainMessage) { + if (resolved?._keyMissingFromProfile) { + return `连接配置「${resolved._profileName}」在本设备上没有可用的 API Key。` + + `Key 仅保存在最初填写它的设备/浏览器上,不随云端设置同步。` + + `请在「API 连接配置」面板编辑该配置并重新填写 Key。`; + } + return plainMessage; +} + /** * 获取 Rerank 配置,优先从 ragRerank 槽位 Profile 读取。 */ @@ -59,12 +74,15 @@ export async function getRerankSettings() { const profile = await getSlotProfile('ragRerank'); if (profile) { const manualSettings = getSettings().rerank || {}; + const apiKey = sanitizeMaskedKey(profile.apiKey ?? ''); return { url: profile.apiUrl, - apiKey: sanitizeMaskedKey(profile.apiKey ?? ''), + apiKey, model: profile.model, top_n: manualSettings.top_n ?? 10, apiMode: manualSettings.apiMode ?? 'custom', + _keyMissingFromProfile: !apiKey, + _profileName: profile.name || profile.id, }; } const fallback = getSettings().rerank || {}; @@ -120,8 +138,8 @@ export async function fetchEmbeddingModels(overrideSettings = null) { switch (apiEndpoint) { case 'google_direct': - if (!apiKey) throw new Error("Google直连模式需要API Key。"); - + if (!apiKey) throw new Error(describeMissingKey(settings, "Google直连模式需要API Key。")); + const fetchGoogleModels = async (version) => { const url = `${GOOGLE_API_BASE_URL}/${version}/models`; console.log(`[翰林院] 正在从 Google API (${version}) 获取模型列表: ${url}`); @@ -225,7 +243,7 @@ export async function fetchRerankModels() { throw new Error("Rerank API URL 未提供。"); } if (apiMode === 'custom' && !apiKey) { - throw new Error("自定义模式下,Rerank API Key 未提供。"); + throw new Error(describeMissingKey(settings, "自定义模式下,Rerank API Key 未提供。")); } const baseUrl = getRerankBaseUrl(url); @@ -264,7 +282,7 @@ export async function executeRerank(query, documents, rerankSettings = null) { const { url, apiKey, model, top_n, apiMode = 'custom' } = resolved; if (!url) throw new Error("Rerank API URL 未提供。"); - if (apiMode === 'custom' && !apiKey) throw new Error("自定义模式下,Rerank API Key 未提供。"); + if (apiMode === 'custom' && !apiKey) throw new Error(describeMissingKey(resolved, "自定义模式下,Rerank API Key 未提供。")); const baseUrl = getRerankBaseUrl(url); const rerankUrl = `${baseUrl}/v1/rerank`; @@ -309,10 +327,12 @@ export function getApiEndpointUrl(raw = false, overrideRetrieval = null) { break; case 'azure': case 'custom': + case 'local_proxy': // 本地代理(LM Studio/Ollama)同样使用用户填写的地址,此前漏掉落入 default 被错误定向到 openai.com url = customApiUrl; break; default: - url = 'https://api.openai.com'; + // apiEndpoint 为空/非法(历史 profile-sync 污染)时,customApiUrl 比硬编码 openai.com 更可能是用户真实意图 + url = customApiUrl || 'https://api.openai.com'; break; } if (raw) { @@ -356,7 +376,7 @@ export async function getEmbeddings(texts, signal = null) { switch (apiEndpoint) { case 'google_direct': console.log('[翰林院-API] 使用Google直连模式获取向量。'); - if (!apiKey) throw new Error('Google直连模式需要API Key。'); + if (!apiKey) throw new Error(describeMissingKey(settings, 'Google直连模式需要API Key。')); // 使用适配器构建URL和请求体;Key 通过 x-goog-api-key 头传递避免 URL 泄露 const googleUrl = buildGoogleEmbeddingApiUrl(GOOGLE_API_BASE_URL, embeddingModel); diff --git a/core/rag-processor.js b/core/rag-processor.js index f1a15aa..64ee1b6 100644 --- a/core/rag-processor.js +++ b/core/rag-processor.js @@ -152,6 +152,7 @@ function initialize() { return; } migrateLegacyRagSettings(); + sanitizeProfilePollution(); settings = getSettings(); if (!window.hanlinyuanRagProcessor) { window.hanlinyuanRagProcessor = {}; @@ -219,20 +220,27 @@ async function ingestTextToHanlinyuan(text, source = 'manual', metadata = {}, pr break; } + // 独立聊天记忆模式:聊天记录类向量按聊天分桶(剧情线隔离), + // 其余来源(小说/世界书/手动)属于"知识",仍随角色卡共享 + const independentChatId = (source === 'chat_history' && settings.retrieval.independentChatMemoryEnabled) + ? getChatId() + : null; + const existingKbs = Object.values(getKnowledgeBases()); - const foundKb = existingKbs.find(kb => kb.name === kbName); + // 同名合并需限定在同一聊天命名空间内,避免独立模式下不同聊天的同名楼层段互相串库 + const foundKb = existingKbs.find(kb => kb.name === kbName && (kb.chatId ?? null) === independentChatId); if (foundKb) { taskId = foundKb.id; logCallback(`[翰林院-核心] 检测到同名知识库 "${kbName}",将数据合并入库。`, 'info'); } else { logCallback(`[翰林院-核心] 准备为任务 "${kbName}" 创建专属知识库...`, 'info'); - const newKb = addKnowledgeBase(kbName, source); + const newKb = addKnowledgeBase(kbName, source, independentChatId); taskId = newKb.id; } - + const charId = getCharacterStableId(); - const collectionId = `${charId}_${taskId}`; + const collectionId = independentChatId ? `${independentChatId}_${taskId}` : `${charId}_${taskId}`; logCallback(`[翰林院-核心] 已创建并锁定知识库: ${kbName} (集合ID: ${collectionId})`, 'success'); logCallback(`[翰林院-核心] 已锁定忆识宝库ID: ${collectionId}`, 'info'); @@ -410,6 +418,49 @@ function migrateLegacyRagSettings() { saveSettingsDebounced(); } +/** + * 一次性清洗 profile-sync 历史污染(2.2.5 之前的版本遗留)。 + * + * 旧版 saveSettingsFromUI 会把被 Profile 接管的隐藏字段值写回 settings: + * - apiKey 被写成掩码 '••••••••'(rag-api 已有读侧防御,这里根治持久层) + * - apiEndpoint 的 select 被 _fillLegacyFields 赋了不存在的 option 值 + * (profile.provider 如 'custom_oai')后 value 变 '','' 被写回 settings; + * '' 在 getApiEndpointUrl 落 default 分支,请求被错误定向 → 向量化全失败 + * + * 2.2.5 修复了"继续污染",本函数清理已污染的存量数据。 + */ +function sanitizeProfilePollution() { + const s = getSettings(); + const MASKED = '••••••••'; + let cleaned = []; + + if (s.retrieval?.apiKey === MASKED) { + s.retrieval.apiKey = ''; + cleaned.push('retrieval.apiKey 掩码'); + } + if (s.rerank?.apiKey === MASKED) { + s.rerank.apiKey = ''; + cleaned.push('rerank.apiKey 掩码'); + } + + // 合法值与 UI select 选项及 rag-api 的 switch 分支保持一致 + const validEndpoints = ['custom', 'google_direct', 'local_proxy', 'openai', 'azure']; + if (s.retrieval && !validEndpoints.includes(s.retrieval.apiEndpoint)) { + cleaned.push(`retrieval.apiEndpoint 非法值 "${s.retrieval.apiEndpoint}"`); + s.retrieval.apiEndpoint = 'custom'; + } + const validRerankModes = ['custom', 'local_proxy']; + if (s.rerank && !validRerankModes.includes(s.rerank.apiMode)) { + cleaned.push(`rerank.apiMode 非法值 "${s.rerank.apiMode}"`); + s.rerank.apiMode = 'custom'; + } + + if (cleaned.length > 0) { + console.warn(`[翰林院] 已清洗 profile-sync 历史污染字段: ${cleaned.join('、')}`); + saveSettings(); + } +} + function showNotification(message, type = 'info') { toastr[type](message); } @@ -431,6 +482,71 @@ function getTagForSource(source) { } +/** + * 边界感知切分:把 content 切成不超过 chunkSize 的片段,尽量在自然边界断开。 + * + * 三级回退策略(替代旧的纯字符硬切,避免句子/对话被拦腰截断): + * 1. 段落边界(最后一个换行符) + * 2. 句末边界(。!?!?… 及其后跟随的闭合引号/括号) + * 3. 都找不到(极端长串)才硬切 + * 边界切点过于靠前(< 40% 块长)时视为无效,降级到下一策略——防止 + * 一个超长段落开头的短句导致块碎片化。 + * + * @param {string} content + * @param {number} chunkSize - 单块最大字符数 + * @param {number} overlap - 相邻块重叠字符数(语义衔接),从上一块尾部回看 + * @returns {string[]} + */ +function splitBySemanticBoundary(content, chunkSize, overlap) { + const pieces = []; + if (!content || chunkSize <= 0) return pieces; + + const minCut = Math.floor(chunkSize * 0.4); + const sentenceEndRegex = /[。!?!?…][”"』」))】]?/g; + + let pos = 0; + while (pos < content.length) { + let end = Math.min(pos + chunkSize, content.length); + + if (end < content.length) { + const slice = content.substring(pos, end); + + // 1. 段落边界:最后一个换行(切点含换行符本身) + let cut = slice.lastIndexOf('\n') + 1; + + // 2. 段落边界无效时找最后一个句末边界 + if (cut <= minCut) { + let lastSentenceEnd = -1; + sentenceEndRegex.lastIndex = 0; + let m; + while ((m = sentenceEndRegex.exec(slice)) !== null) { + lastSentenceEnd = m.index + m[0].length; + } + if (lastSentenceEnd > minCut) cut = lastSentenceEnd; + } + + // 3. 有效边界则收缩切点,否则保持硬切 + if (cut > minCut) end = pos + cut; + } + + const piece = content.substring(pos, end); + if (piece.trim().length > 0) pieces.push(piece); + + if (end >= content.length) break; + // overlap 回看;Math.max 防止 overlap >= 块长时死循环 + pos = Math.max(end - overlap, pos + 1); + } + return pieces; +} + +/** 把 ISO/任意时间值格式化为写入块 prefix 的紧凑标识(不含逗号,便于正则反解) */ +function formatChunkTimeLabel(timestamp) { + const d = new Date(timestamp); + if (isNaN(d.getTime())) return ''; + const pad = n => String(n).padStart(2, '0'); + return `${d.getFullYear()}-${pad(d.getMonth() + 1)}-${pad(d.getDate())} ${pad(d.getHours())}:${pad(d.getMinutes())}`; +} + function splitIntoChunks(text, source, metadata = {}) { switch (source) { case 'novel': @@ -465,30 +581,22 @@ function _chunkForNovel(text, metadata) { function processBuffer() { if (contentBuffer.length === 0) return; const content = contentBuffer.join('\n'); - let start = 0; - let section = 1; - while (start < content.length) { - const end = Math.min(start + chunkSize, content.length); - const chunkText = content.substring(start, end); - if (chunkText.trim().length > 0) { - const chunkMetadata = { - source: 'novel', - sourceName: sourceName, - timestamp: new Date().toISOString(), - globalIndex: globalChunkIndex++, - volume: currentVolumeTitle, - chapter: currentChapterTitle, - section: section, - }; - const tagName = getTagForSource('novel'); - const prefix = `[来源: ${sourceName}, ${currentVolumeTitle}, ${currentChapterTitle}, 第${section}节]`; - const wrappedText = `<${tagName}>\n${prefix}\n${chunkText}\n`; - allChunks.push({ text: wrappedText, metadata: chunkMetadata }); - section++; - } - start += (chunkSize - overlap); - if (start >= content.length) break; - } + const tagName = getTagForSource('novel'); + splitBySemanticBoundary(content, chunkSize, overlap).forEach((chunkText, idx) => { + const section = idx + 1; + const chunkMetadata = { + source: 'novel', + sourceName: sourceName, + timestamp: new Date().toISOString(), + globalIndex: globalChunkIndex++, + volume: currentVolumeTitle, + chapter: currentChapterTitle, + section: section, + }; + const prefix = `[来源: ${sourceName}, ${currentVolumeTitle}, ${currentChapterTitle}, 第${section}节]`; + const wrappedText = `<${tagName}>\n${prefix}\n${chunkText}\n`; + allChunks.push({ text: wrappedText, metadata: chunkMetadata }); + }); contentBuffer = []; } @@ -508,11 +616,9 @@ function _chunkForNovel(text, metadata) { processBuffer(); if (allChunks.length === 0 && text.length > 0) { - let start = 0; - let section = 1; - while (start < text.length) { - const end = Math.min(start + chunkSize, text.length); - const chunkText = text.substring(start, end); + const tagName = getTagForSource('novel'); + splitBySemanticBoundary(text, chunkSize, overlap).forEach((chunkText, idx) => { + const section = idx + 1; const chunkMetadata = { source: 'novel', sourceName: sourceName, @@ -522,13 +628,10 @@ function _chunkForNovel(text, metadata) { chapter: "第1章", section: section, }; - const tagName = getTagForSource('novel'); const prefix = `[来源: ${sourceName}, 第1卷, 第1章, 第${section}节]`; const wrappedText = `<${tagName}>\n${prefix}\n${chunkText}\n`; allChunks.push({ text: wrappedText, metadata: chunkMetadata }); - section++; - start += (chunkSize - overlap); - } + }); } return allChunks; } @@ -540,15 +643,15 @@ function _chunkForChatHistory(text, metadata) { const allChunks = []; if (!text || chunkSize <= 0) return allChunks; - let part = 1; - let start = 0; + // 时间写进 prefix 才能在检索后被反解回来(ST 向量存储不持久化 metadata) + const timeLabel = formatChunkTimeLabel(timestamp); + const tagName = getTagForSource('chat_history'); - while (start < text.length) { - const end = Math.min(start + chunkSize, text.length); - const chunkText = text.substring(start, end); - - const prefix = `[来源: 聊天记录, 楼层: #${floor}, 第${part}部分]`; - const tagName = getTagForSource('chat_history'); + splitBySemanticBoundary(text, chunkSize, overlap).forEach((chunkText, idx) => { + const part = idx + 1; + const prefix = timeLabel + ? `[来源: 聊天记录, 楼层: #${floor}, 时间: ${timeLabel}, 第${part}部分]` + : `[来源: 聊天记录, 楼层: #${floor}, 第${part}部分]`; const wrappedText = `<${tagName}>\n${prefix}\n${chunkText}\n`; allChunks.push({ @@ -562,11 +665,7 @@ function _chunkForChatHistory(text, metadata) { timestamp: timestamp, } }); - - part++; - start += (chunkSize - overlap); - if (start >= text.length) break; - } + }); return allChunks; } @@ -577,15 +676,11 @@ function _chunkForLorebook(text, metadata) { const allChunks = []; if (!text || chunkSize <= 0) return allChunks; - let part = 1; - let start = 0; + const tagName = getTagForSource('lorebook'); - while (start < text.length) { - const end = Math.min(start + chunkSize, text.length); - const chunkText = text.substring(start, end); - + splitBySemanticBoundary(text, chunkSize, overlap).forEach((chunkText, idx) => { + const part = idx + 1; const prefix = `[来源: ${bookName}, 条目: ${entryName}, 第${part}部分]`; - const tagName = getTagForSource('lorebook'); const wrappedText = `<${tagName}>\n${prefix}\n${chunkText}\n`; allChunks.push({ @@ -599,11 +694,7 @@ function _chunkForLorebook(text, metadata) { timestamp: new Date().toISOString(), } }); - - part++; - start += (chunkSize - overlap); - if (start >= text.length) break; - } + }); return allChunks; } @@ -615,16 +706,12 @@ function _chunkForManual(text, metadata) { if (!text || chunkSize <= 0) return allChunks; const timestamp = new Date(); - const readableTime = timestamp.toLocaleString('zh-CN'); - let part = 1; - let start = 0; + const readableTime = formatChunkTimeLabel(timestamp); + const tagName = getTagForSource('manual'); - while (start < text.length) { - const end = Math.min(start + chunkSize, text.length); - const chunkText = text.substring(start, end); - + splitBySemanticBoundary(text, chunkSize, overlap).forEach((chunkText, idx) => { + const part = idx + 1; const prefix = `[来源: ${sourceName}, 向量化录入时间: ${readableTime}, 第${part}部分]`; - const tagName = getTagForSource('manual'); const wrappedText = `<${tagName}>\n${prefix}\n${chunkText}\n`; allChunks.push({ @@ -636,11 +723,7 @@ function _chunkForManual(text, metadata) { timestamp: timestamp.toISOString(), } }); - - part++; - start += (chunkSize - overlap); - if (start >= text.length) break; - } + }); return allChunks; } @@ -708,7 +791,13 @@ function getKnowledgeBases() { return { ...globalBases, ...localBases }; } -function addKnowledgeBase(name, source = 'manual') { +/** + * @param {string} name + * @param {string} source + * @param {string|null} chatId - 非空时该库为"聊天级":向量集合按 `${chatId}_${taskId}` + * 命名空间隔离(独立聊天记忆模式下的聊天记录库),查询时只对该聊天可见 + */ +function addKnowledgeBase(name, source = 'manual', chatId = null) { if (!name || !name.trim()) { throw new Error('知识库名称不能为空'); } @@ -721,17 +810,28 @@ function addKnowledgeBase(name, source = 'manual') { name: name.trim(), enabled: true, createdAt: new Date().toISOString(), - owner: charId, - source: source, + owner: charId, + source: source, + ...(chatId ? { chatId } : {}), }; bases[taskId] = newBase; saveSettings(); - - console.log(`[翰林院-核心] 已为角色 ${charId} 添加新知识库: ${name} (ID: ${taskId})`); + + console.log(`[翰林院-核心] 已为角色 ${charId} 添加新知识库: ${name} (ID: ${taskId}${chatId ? `, 聊天级: ${chatId}` : ''})`); return newBase; } +/** + * 计算知识库的向量集合 ID(单一事实来源)。 + * 聊天级库(kb.chatId)按聊天命名空间,其余按 owner/角色命名空间。 + */ +function getKbCollectionId(kb, scope = 'local') { + if (kb.chatId) return `${kb.chatId}_${kb.id}`; + if (scope === 'global') return `${kb.owner || GLOBAL_SCOPE_ID}_${kb.id}`; + return `${getCharacterStableId()}_${kb.id}`; +} + async function removeKnowledgeBase(taskId, scope) { const charId = getCharacterStableId(); const bases = scope === 'global' ? getGlobalKnowledgeBases() : getLocalKnowledgeBases(); @@ -743,9 +843,8 @@ async function removeKnowledgeBase(taskId, scope) { return; } - const ownerId = scope === 'global' ? (base.owner || GLOBAL_SCOPE_ID) : charId; - const collectionIdToPurge = `${ownerId}_${taskId}`; - + const collectionIdToPurge = getKbCollectionId(base, scope); + console.log(`[翰林院-核心] 准备删除知识库 ${taskId},将清空集合: ${collectionIdToPurge}`); const purged = await purgeStorage(collectionIdToPurge); @@ -792,30 +891,38 @@ async function queryVectors(queryText, options = {}) { } else if (settings.retrieval.independentChatMemoryEnabled) { console.log('[翰林院-日志] 独立聊天记忆模式开启...'); - + const chatId = getChatId(); - if (chatId) { - console.log(`[翰林院-日志] 添加当前聊天宝库: ${chatId}`); - basesToQuery.push({ id: chatId, name: `当前聊天 (${chatId})`, scope: 'chat' }); - } else { - console.warn('[翰林院-日志] 无法获取当前聊天ID,跳过聊天宝库。'); + if (!chatId) { + console.warn('[翰林院-日志] 无法获取当前聊天ID,聊天级知识库将被跳过。'); } - const globalBases = getGlobalKnowledgeBases(); - const enabledGlobalBases = Object.values(globalBases).filter(b => b.enabled); + // 本地库过滤规则:知识类库(无 chatId)照常可查; + // 聊天级库(有 chatId)只对所属聊天可见——这就是"独立"的含义 + const localBases = Object.values(getLocalKnowledgeBases()) + .filter(b => b.enabled && (!b.chatId || b.chatId === chatId)); + if (localBases.length > 0) { + const chatScoped = localBases.filter(b => b.chatId).length; + console.log(`[翰林院-日志] 添加 ${localBases.length} 个本地知识库(其中 ${chatScoped} 个为当前聊天专属)。`); + basesToQuery.push(...localBases.map(b => ({ ...b, scope: b.chatId ? 'chat' : 'local' }))); + } + + const enabledGlobalBases = Object.values(getGlobalKnowledgeBases()).filter(b => b.enabled); if (enabledGlobalBases.length > 0) { console.log(`[翰林院-日志] 添加 ${enabledGlobalBases.length} 个已启用的全局知识库。`); basesToQuery.push(...enabledGlobalBases.map(b => ({ ...b, scope: 'global' }))); } - } + } else { console.log('[翰林院-日志] 统一角色卡模式开启...'); const localBases = getLocalKnowledgeBases(); const globalBases = getGlobalKnowledgeBases(); const enabledLocalBases = Object.values(localBases).filter(b => b.enabled); const enabledGlobalBases = Object.values(globalBases).filter(b => b.enabled); - - basesToQuery.push(...enabledLocalBases.map(b => ({ ...b, scope: 'local' }))); + + // 聊天级库(独立模式期间产生)在统一模式下也可见,但需用 'chat' scope + // 才能拼出正确的集合 ID(${chatId}_${taskId}) + basesToQuery.push(...enabledLocalBases.map(b => ({ ...b, scope: b.chatId ? 'chat' : 'local' }))); basesToQuery.push(...enabledGlobalBases.map(b => ({ ...b, scope: 'global' }))); if (basesToQuery.length === 0) { @@ -879,7 +986,9 @@ async function _executeQueryForBase(base, queryText, queryEmbedding = null) { collectionId = await getDynamicCollectionId(); break; case 'chat': - collectionId = base.id; + // 聊天级库:${chatId}_${taskId} 命名空间(独立聊天记忆)。 + // 旧语义的裸 chatId 集合从未被任何录入路径写入过,无存量兼容负担 + collectionId = base.chatId ? `${base.chatId}_${base.id}` : base.id; break; case 'global': const ownerId = base.owner || GLOBAL_SCOPE_ID; @@ -945,10 +1054,12 @@ async function _executeQueryForBase(base, queryText, queryEmbedding = null) { switch (sourceTag) { case '聊天记录': newMetadata.source = 'chat_history'; - const chatMatch = item.text.match(/楼层:\s*#(\d+),\s*第(\d+)部分/); - if (chatMatch && chatMatch[1] && chatMatch[2]) { + // 时间段为可选:兼容旧格式 [楼层: #X, 第Y部分] 与新格式 [楼层: #X, 时间: ..., 第Y部分] + const chatMatch = item.text.match(/楼层:\s*#(\d+)(?:,\s*时间:\s*([^,\]]+))?,\s*第(\d+)部分/); + if (chatMatch && chatMatch[1] && chatMatch[3]) { newMetadata.floor = parseInt(chatMatch[1], 10); - newMetadata.part = parseInt(chatMatch[2], 10); + if (chatMatch[2]) newMetadata.timeLabel = chatMatch[2].trim(); + newMetadata.part = parseInt(chatMatch[3], 10); newMetadata.sourceName = `聊天记录 #${newMetadata.floor}`; } break; @@ -1051,43 +1162,40 @@ async function getVectorCount(taskId = null, scope = 'local') { console.warn(`[翰林院-计数] 在作用域 '${scope}' 中未找到ID为 ${taskId} 的知识库。`); return 0; } - const ownerId = scope === 'global' ? (base.owner || GLOBAL_SCOPE_ID) : charId; - const collectionId = `${ownerId}_${taskId}`; - return await countVectorsInCollection(collectionId); + // 聊天级库按 ${chatId}_${taskId} 命名空间计数(getKbCollectionId 统一处理) + return await countVectorsInCollection(getKbCollectionId(base, scope)); } else { - if (settings.retrieval.independentChatMemoryEnabled) { - const chatId = getChatId(); - if (!chatId) return 0; - const totalCount = await countVectorsInCollection(chatId); - console.log(`[翰林院-日志] 独立聊天记忆模式开启,聊天 ${chatId} 的向量总数: ${totalCount}`); - return totalCount; - } + // 总数统计与查询侧保持同一可见性规则: + // 独立模式 → 本地知识库 + 当前聊天的聊天级库 + 全局库 + // 统一模式 → 全部本地库(含聊天级)+ 全局库 + legacy 宝库 + const independent = settings.retrieval.independentChatMemoryEnabled; + const chatId = independent ? getChatId() : null; + console.log(`[翰林院-日志] 开始获取${independent ? '当前聊天可见的' : '所有'}知识库向量总数...`); - console.log('[翰林院-日志] 开始获取所有知识库的向量总数...'); - const localBases = Object.values(getLocalKnowledgeBases()); + const localBases = Object.values(getLocalKnowledgeBases()) + .filter(base => !independent || !base.chatId || base.chatId === chatId); const globalBases = Object.values(getGlobalKnowledgeBases()); const countPromises = []; localBases.forEach(base => { - const collectionId = `${charId}_${base.id}`; - countPromises.push(countVectorsInCollection(collectionId)); + countPromises.push(countVectorsInCollection(getKbCollectionId(base, 'local'))); }); globalBases.forEach(base => { - const ownerId = base.owner || GLOBAL_SCOPE_ID; - const collectionId = `${ownerId}_${base.id}`; - countPromises.push(countVectorsInCollection(collectionId)); + countPromises.push(countVectorsInCollection(getKbCollectionId(base, 'global'))); }); - const legacyCollectionId = await getDynamicCollectionId(); - countPromises.push(countVectorsInCollection(legacyCollectionId)); + if (!independent) { + const legacyCollectionId = await getDynamicCollectionId(); + countPromises.push(countVectorsInCollection(legacyCollectionId)); + } const counts = await Promise.all(countPromises); const totalCount = counts.reduce((total, count) => total + count, 0); - - console.log(`[翰林院-日志] 所有知识库统计完成,总向量数: ${totalCount}`); + + console.log(`[翰林院-日志] 知识库统计完成,总向量数: ${totalCount}`); return totalCount; } } @@ -1202,20 +1310,23 @@ async function processCondensation(messages, logCallback = () => {}, range = nul kbName = `聊天记录: ${timestamp}`; } - const existingKbs = Object.values(getLocalKnowledgeBases()); - const foundKb = existingKbs.find(kb => kb.name === kbName); + // 独立聊天记忆模式下凝识结果按聊天分桶,与 ingestTextToHanlinyuan 的语义一致 + const independentChatId = settings.retrieval.independentChatMemoryEnabled ? getChatId() : null; + + const existingKbs = Object.values(getLocalKnowledgeBases()); + const foundKb = existingKbs.find(kb => kb.name === kbName && (kb.chatId ?? null) === independentChatId); if (foundKb) { taskId = foundKb.id; logCallback(`[翰林院-核心] 检测到同名知识库 "${kbName}",将数据合并入库。`, 'info'); } else { logCallback(`[翰林院-核心] 准备为任务 "${kbName}" 创建专属知识库...`, 'info'); - const newKb = addKnowledgeBase(kbName, 'chat_history'); + const newKb = addKnowledgeBase(kbName, 'chat_history', independentChatId); taskId = newKb.id; } - + const charId = getCharacterStableId(); - const collectionId = `${charId}_${taskId}`; + const collectionId = independentChatId ? `${independentChatId}_${taskId}` : `${charId}_${taskId}`; logCallback(`[翰林院-核心] 凝识任务已锁定知识库: ${kbName} (集合ID: ${collectionId})`, 'success'); const allChunks = []; @@ -1478,18 +1589,102 @@ async function rerankResults(allResults, queryText, settings) { finalScoredResults.sort((a, b) => (b.final_score || 0) - (a.final_score || 0)); console.log('[翰林院-Rerank] 元数据加权排序完成。'); - let finalResults = finalScoredResults; + // 先按相关度截断 top_n,再做时序排序——顺序反了会让"时序最早"而非"最相关" + // 的块占据名额(超级排序把最旧楼层排最前,slice 会扔掉高相关的靠后结果) + let finalResults = finalScoredResults.slice(0, settings.rerank.top_n); if (settings.rerank.superSortEnabled) { - finalResults = superSort(finalScoredResults); + finalResults = superSort(finalResults); } - + return { - results: finalResults.slice(0, settings.rerank.top_n), + results: finalResults, reranked: rerankedSuccessfully }; } +/** + * 从"第十二章"/"第3卷"/"4"等字符串中解析序数,用于注入前的时序排序。 + * 支持阿拉伯数字与常见中文数字(至万级);解析失败返回 MAX_SAFE_INTEGER(排最后)。 + */ +function _parseOrdinal(value) { + if (typeof value === 'number') return value; + if (!value) return Number.MAX_SAFE_INTEGER; + const str = String(value); + const arabic = str.match(/\d+/); + if (arabic) return parseInt(arabic[0], 10); + + const cnDigit = { 零: 0, 一: 1, 二: 2, 两: 2, 三: 3, 四: 4, 五: 5, 六: 6, 七: 7, 八: 8, 九: 9 }; + const m = str.match(/[零一二两三四五六七八九十百千万]+/); + if (!m) return Number.MAX_SAFE_INTEGER; + let total = 0, current = 0; + for (const ch of m[0]) { + if (cnDigit[ch] !== undefined) { + current = cnDigit[ch]; + } else if (ch === '十') { + total += (current || 1) * 10; + current = 0; + } else if (ch === '百') { + total += (current || 1) * 100; + current = 0; + } else if (ch === '千') { + total += (current || 1) * 1000; + current = 0; + } else if (ch === '万') { + total = (total + current) * 10000; + current = 0; + } + } + return total + current; +} + +/** + * 注入前的组内时序重排 + 断层提示。 + * + * rerank/相似度负责"选哪些块",本函数负责"按什么顺序呈现": + * - chat_history 按楼层+部分升序;相邻块楼层跳跃时插入断层提示行, + * 避免 LLM 把"不打不相识"和"关系亲密"两个远隔的片段读成连续剧情 + * - novel 按卷/章/节序数升序(中文数字章节号可解析) + * - lorebook / manual 按来源聚合 + part 升序,碎块归位 + * 元数据缺失的块排在末尾、保持彼此原有顺序(sort 稳定性)。 + */ +function _composeInjectionText(source, results) { + const sorted = [...results]; + const ord = (v) => (Number.isFinite(v) ? v : Number.MAX_SAFE_INTEGER); + + if (source === 'chat_history') { + sorted.sort((a, b) => + ord(a.metadata?.floor) - ord(b.metadata?.floor) + || (a.metadata?.part ?? 0) - (b.metadata?.part ?? 0)); + + const parts = []; + let prevFloor = null; + for (const r of sorted) { + const floor = r.metadata?.floor; + if (prevFloor !== null && Number.isFinite(floor) && floor - prevFloor > 1) { + parts.push(`〔提示:以下内容与上文相隔约 ${floor - prevFloor} 楼,期间的剧情未被检索到,两段内容并非连续发生〕`); + } + parts.push(r.text); + if (Number.isFinite(floor)) prevFloor = floor; + } + return parts.join('\n\n'); + } + + if (source === 'novel') { + sorted.sort((a, b) => + _parseOrdinal(a.metadata?.volume) - _parseOrdinal(b.metadata?.volume) + || _parseOrdinal(a.metadata?.chapter) - _parseOrdinal(b.metadata?.chapter) + || _parseOrdinal(a.metadata?.section) - _parseOrdinal(b.metadata?.section)); + return sorted.map(r => r.text).join('\n\n'); + } + + // lorebook / manual:同源聚合 + part 升序 + sorted.sort((a, b) => + String(a.metadata?.sourceName ?? '').localeCompare(String(b.metadata?.sourceName ?? ''), 'zh') + || (a.metadata?.part ?? 0) - (b.metadata?.part ?? 0)); + return sorted.map(r => r.text).join('\n\n'); +} + async function rearrangeChat(chat, contextSize, abort, type) { const injectionKeys = { novel: 'HANLINYUAN_RAG_NOVEL', @@ -1704,7 +1899,8 @@ async function rearrangeChat(chat, contextSize, abort, type) { continue; } - const formattedText = results.map(r => r.text).join('\n\n'); + // 组内按时序重排 + 断层提示(rerank 决定选哪些块,时序决定呈现顺序) + const formattedText = _composeInjectionText(source, results); const placeholder = `{{${source.replace('_history', '')}_text}}`; let injectionContent = injectionSettings.template.replace(placeholder, formattedText); @@ -1751,6 +1947,13 @@ async function moveKnowledgeBase(taskId, fromScope) { return; } + // 聊天级库(独立聊天记忆产物)专属于单个聊天,移到全局会让所有角色 + // 检索到某个特定聊天的记忆,语义矛盾,禁止 + if (kbData.chatId && toScope === 'global') { + toastr.warning(`知识库【${kbData.name}】是聊天专属记忆,不能移动到全局。`); + return; + } + if (fromScope === 'local' && toScope === 'global' && !kbData.owner) { console.log(`[翰林院-配置] 为旧版知识库 ${taskId} 补充所有者ID: ${charId}`); kbData.owner = charId; diff --git a/core/rag-settings.js b/core/rag-settings.js index ca4cb3d..3b41904 100644 --- a/core/rag-settings.js +++ b/core/rag-settings.js @@ -3,8 +3,10 @@ export const defaultSettings = { retrieval: { - enabled: false, - apiEndpoint: 'openai', + enabled: false, + // 默认走 custom 与下面的 customApiUrl 配套;旧默认 'openai' 不在 UI select + // 选项里,会在首次保存时被写成 ''(已有用户的 'openai' 值仍合法、不迁移) + apiEndpoint: 'custom', customApiUrl: 'https://api.siliconflow.cn/v1', apiKey: '', embeddingModel: 'text-embedding-3-small', diff --git a/core/super-memory/SuperMemoryService.js b/core/super-memory/SuperMemoryService.js index 9e096ef..3e0bc86 100644 --- a/core/super-memory/SuperMemoryService.js +++ b/core/super-memory/SuperMemoryService.js @@ -11,14 +11,16 @@ * 公开接口(query('SuperMemory')): * initialize() — 初始化超级记忆系统 * forceSyncAll() — 全量同步到世界书 - * tryRestoreStateFromMetadata() — 从聊天元数据恢复状态 * awaitSync() — 等待当前同步队列完成(Pipeline Stage 4 使用) * purge() — 清空记忆世界书 + * + * 注:tryRestoreStateFromMetadata 已删除——msg.metadata 非 ST 持久化字段, + * 该恢复路径从未真正工作过;表格状态的持久化与恢复由表格系统 + * (loadTables / msg.extra.amily2_tables_data)唯一负责。 */ import { initializeSuperMemory, - tryRestoreStateFromMetadata, forceSyncAll, awaitSync, purgeSuperMemory, @@ -34,12 +36,11 @@ setTimeout(() => { return; } _ctx.expose({ - initialize: () => initializeSuperMemory(), - forceSyncAll: () => forceSyncAll(), - tryRestoreStateFromMetadata: () => tryRestoreStateFromMetadata(), - awaitSync: () => awaitSync(), - purge: () => purgeSuperMemory(), - pushUpdate: (payload) => pushUpdate(payload), + initialize: () => initializeSuperMemory(), + forceSyncAll: () => forceSyncAll(), + awaitSync: () => awaitSync(), + purge: () => purgeSuperMemory(), + pushUpdate: (payload) => pushUpdate(payload), }); _ctx.log('SuperMemoryService', 'info', 'SuperMemory 服务已注册到 Bus。'); } catch (e) { @@ -50,7 +51,6 @@ setTimeout(() => { // ── 向后兼容具名导出 ────────────────────────────────────────────────────── export { initializeSuperMemory, - tryRestoreStateFromMetadata, forceSyncAll, awaitSync, purgeSuperMemory, diff --git a/core/super-memory/bindings.js b/core/super-memory/bindings.js index 013df75..c4e82d7 100644 --- a/core/super-memory/bindings.js +++ b/core/super-memory/bindings.js @@ -42,6 +42,12 @@ export function bindSuperMemoryEvents() { if (id === 'sm-system-enabled') { extension_settings[extensionName]['super_memory_enabled'] = this.checked; saveSettingsDebounced(); + // 【修复】启动时若开关为关,initializeSuperMemory 会早退且不注册监听器; + // 旧实现勾选后只写设置不初始化,导致开关"打开了但没反应"直到刷新页面。 + // initializeSuperMemory 幂等(isInitialized 防重入),此处直接补初始化。 + if (this.checked) { + initializeSuperMemory(); + } return; } if (id === 'sm-bridge-enabled') { diff --git a/core/super-memory/manager.js b/core/super-memory/manager.js index c3083a7..9b3e383 100644 --- a/core/super-memory/manager.js +++ b/core/super-memory/manager.js @@ -3,8 +3,8 @@ import { extensionName } from "../../utils/settings.js"; import { amilyHelper } from "../tavern-helper/main.js"; import { generateIndex } from "./smart-indexer.js"; import { syncToLorebook, ensureMemoryBook, updateTransientHint, getMemoryBookName } from "./lorebook-bridge.js"; -import { getMemoryState, loadMemoryState, saveMemoryState } from "../table-system/manager.js"; -import { TABLE_UPDATED_EVENT } from "../table-system/events-schema.js"; +import { getMemoryState } from "../table-system/manager.js"; +import { TABLE_UPDATED_EVENT, inferTableRole } from "../table-system/events-schema.js"; import { eventSource, event_types } from "/script.js"; import { handleArchiveUpdate } from "../archive-manager.js"; @@ -12,11 +12,8 @@ import { handleArchiveUpdate } from "../archive-manager.js"; let isInitialized = false; let updateQueue = []; let isProcessing = false; -let lastChatId = null; let _syncPromise = null; // tracks the running processQueue() promise for pipeline awaiting -const METADATA_KEY = 'Amily2_Memory_Data'; - /** * [AMILY2-MODIFIED] Pipeline integration: * Allows MessagePipeline Stage 4 to await the super-memory sync triggered @@ -53,24 +50,22 @@ export async function initializeSuperMemory() { } document.addEventListener(TABLE_UPDATED_EVENT, handleTableUpdate); - + + // 【修复】CHAT_CHANGED 时不再主动 forceSyncAll: + // 表格系统在 index.js 的 CHAT_CHANGED 里延迟 100ms 才 loadTables(), + // 此处立即同步会把【旧聊天】的表格内容写进【新角色】的记忆世界书(竞态污染; + // 两边表名不同时旧表条目无 GC 兜底,会永久残留)。 + // 无需自行补同步:loadTables() 三个分支结尾都会 dispatchAllTablesUpdate(), + // 新状态会经 pushUpdate 自动入队。这里只负责确保新角色的记忆世界书存在。 eventSource.on(event_types.CHAT_CHANGED, async () => { const settings = extension_settings[extensionName] || {}; if (settings.super_memory_enabled === false) return; - - console.log('[Amily2-SuperMemory] 检测到聊天切换,正在刷新记忆状态...'); await checkWorldBookStatus(); - - await tryRestoreStateFromMetadata(); - - await forceSyncAll(); }); - + await checkWorldBookStatus(); - - await tryRestoreStateFromMetadata(); - - await forceSyncAll(); + + await forceSyncAll(); isInitialized = true; console.log('[Amily2-SuperMemory] 核心管理器初始化完成。'); @@ -110,7 +105,13 @@ export function pushUpdate(payload) { console.log(`[Amily2-SuperMemory] 收到表格更新 (Bus): ${tableName} (Role: ${role})`); updateQueue.push({ tableName, data, role, headers, rowStatuses }); - _syncPromise = processQueue(); + // 【修复】队列正忙时不可覆盖 _syncPromise:旧实现每次都赋值 processQueue(), + // 而 processQueue 在 isProcessing 时立即返回(已 resolve 的空 Promise), + // 导致 Pipeline Stage 4 的 awaitSync() 穿透、在同步未完成时放行后续阶段。 + // 正在跑的 drain 循环会自然吃掉刚入队的项,无需新起 Promise。 + if (!isProcessing) { + _syncPromise = processQueue(); + } // Bus 路径下 document event 不再分发,需直接通知归档管理器 handleArchiveUpdate(payload); @@ -146,15 +147,18 @@ async function processQueue() { await processUpdateTask(task); } } - - await saveStateToMetadata(); - + + // 【修复】移除 saveStateToMetadata():msg.metadata 不是 ST 的持久化字段 + // (消息体标准位是 msg.extra),写入后会蒸发,恢复路径永远找不到东西—— + // 整条"元数据状态保存/恢复"链路是死代码。表格状态的唯一持久化信源是 + // 表格系统自己的 msg.extra.amily2_tables_data(infra/persistence.js)。 + } catch (error) { console.error('[Amily2-SuperMemory] 处理更新队列失败:', error); } finally { isProcessing = false; if (updateQueue.length > 0) { - processQueue(); + _syncPromise = processQueue(); } } } @@ -191,54 +195,67 @@ async function processUpdateTask(task) { updateDashboardCounters(); } -async function saveStateToMetadata() { - const context = getContext(); - if (!context.chat || context.chat.length === 0) return; - - const lastMsgIndex = context.chat.length - 1; - const lastMsg = context.chat[lastMsgIndex]; - - const currentState = getMemoryState(); - - if (!lastMsg.metadata) lastMsg.metadata = {}; - - lastMsg.metadata[METADATA_KEY] = JSON.parse(JSON.stringify(currentState)); - - if (context.saveChat) { - await context.saveChat(); - } - - console.log(`[Amily2-SuperMemory] 状态已保存至消息 #${lastMsgIndex}`); -} - -export async function tryRestoreStateFromMetadata() { - const context = getContext(); - if (!context.chat || context.chat.length === 0) return; - - let foundState = null; - let foundIndex = -1; - - for (let i = context.chat.length - 1; i >= 0; i--) { - const msg = context.chat[i]; - if (msg.metadata && msg.metadata[METADATA_KEY]) { - foundState = msg.metadata[METADATA_KEY]; - foundIndex = i; - break; - } - } - - if (foundState) { - console.log(`[Amily2-SuperMemory] 发现历史状态 (Msg #${foundIndex}),正在恢复...`); - if (typeof loadMemoryState === 'function') { - loadMemoryState(foundState); - await forceSyncAll(); - } else { - console.warn('[Amily2-SuperMemory] table-system 缺少 loadMemoryState 方法,无法恢复状态。'); - } - } else { - console.log('[Amily2-SuperMemory] 未在聊天记录中发现历史状态,使用默认/当前状态。'); - } -} +// 【已停用 2026-06-12】saveStateToMetadata / tryRestoreStateFromMetadata: +// msg.metadata 不是 ST 持久化字段(同 secondary-filler 修过的坑),写了会蒸发、 +// 读永远为空——整条链路判定为从未真正工作过。若它"工作"了反而更糟:恢复出的 +// 过期副本会覆盖表格系统从 msg.extra.amily2_tables_data 恢复的正确状态(双信源打架)。 +// 表格状态的持久化与恢复完全交由表格系统(loadTables / saveStateToMessage)。 +// +// 原实现注释保留(原作者代码,不排除存在未知副作用依赖;确认稳定几个版本后再清): +// +// const METADATA_KEY = 'Amily2_Memory_Data'; +// +// async function saveStateToMetadata() { +// const context = getContext(); +// if (!context.chat || context.chat.length === 0) return; +// +// const lastMsgIndex = context.chat.length - 1; +// const lastMsg = context.chat[lastMsgIndex]; +// +// const currentState = getMemoryState(); +// +// if (!lastMsg.metadata) lastMsg.metadata = {}; +// +// lastMsg.metadata[METADATA_KEY] = JSON.parse(JSON.stringify(currentState)); +// +// if (context.saveChat) { +// await context.saveChat(); +// } +// +// console.log(`[Amily2-SuperMemory] 状态已保存至消息 #${lastMsgIndex}`); +// } +// (原调用点:processQueue 的 while 循环结束后 `await saveStateToMetadata();`) +// +// export async function tryRestoreStateFromMetadata() { +// const context = getContext(); +// if (!context.chat || context.chat.length === 0) return; +// +// let foundState = null; +// let foundIndex = -1; +// +// for (let i = context.chat.length - 1; i >= 0; i--) { +// const msg = context.chat[i]; +// if (msg.metadata && msg.metadata[METADATA_KEY]) { +// foundState = msg.metadata[METADATA_KEY]; +// foundIndex = i; +// break; +// } +// } +// +// if (foundState) { +// console.log(`[Amily2-SuperMemory] 发现历史状态 (Msg #${foundIndex}),正在恢复...`); +// if (typeof loadMemoryState === 'function') { // 需从 table-system/manager.js 导入 loadMemoryState +// loadMemoryState(foundState); +// await forceSyncAll(); +// } else { +// console.warn('[Amily2-SuperMemory] table-system 缺少 loadMemoryState 方法,无法恢复状态。'); +// } +// } else { +// console.log('[Amily2-SuperMemory] 未在聊天记录中发现历史状态,使用默认/当前状态。'); +// } +// } +// (原调用点:initializeSuperMemory 与 CHAT_CHANGED 监听器内,各一次,后接 forceSyncAll; +// Bus 暴露:SuperMemoryService 的 tryRestoreStateFromMetadata,已一并停用) function updateDashboardCounters() { const tables = getMemoryState(); @@ -271,20 +288,19 @@ export async function forceSyncAll() { } for (const table of tables) { - let role = 'database'; - if (table.name.includes('时空') || table.name.includes('世界钟')) role = 'anchor'; - if (table.name.includes('日志') || table.name.includes('Log')) role = 'log'; - updateQueue.push({ tableName: table.name, data: table.rows, - headers: table.headers, - rowStatuses: table.rowStatuses || [], - role: role + headers: table.headers, + rowStatuses: table.rowStatuses || [], + role: inferTableRole(table.name), // 复用 events-schema 的统一推断,避免两处逻辑漂移 }); } - - await processQueue(); + + if (!isProcessing) { + _syncPromise = processQueue(); + } + await _syncPromise; console.log('[Amily2-SuperMemory] 全量同步完成。'); } diff --git a/core/table-system/actions/ui-mutations.js b/core/table-system/actions/ui-mutations.js new file mode 100644 index 0000000..0cf8d05 --- /dev/null +++ b/core/table-system/actions/ui-mutations.js @@ -0,0 +1,477 @@ +/** + * @file actions/ui-mutations.js —— 19 个 UI 突变(Phase 0.4 自 manager.js 搬出) + * + * 表格面板上的所有用户操作入口:增删行列 / 移动 / 重命名 / 规则更新 / 清空等。 + * 函数签名与行为与搬出前完全一致;manager.js re-export 这些函数,外部调用路径零改动。 + * + * 依赖说明: + * - 状态读写走 infra/store.js,持久化走 infra/persistence.js + * - SuperMemory 分发走 events-dispatch.js(与 manager 共用,无环) + * - loadTables / saveTables 仍从 manager 引入(addTable 空状态兜底 / 日志桩), + * manager ↔ ui-mutations 构成 ESM 循环,但二者均为 hoisted 函数声明、 + * 仅在运行时调用,与既有 manager ↔ ui/table-bindings 环同模式,安全 + */ + +import { getContext } from '/scripts/extensions.js'; +import { saveChat } from '/script.js'; +import { saveChatDebounced } from '../../../utils/utils.js'; + +import { log } from '../logger.js'; +import { renderTables } from '../../../ui/table-bindings.js'; +import { dispatchTableUpdate, dispatchAllTablesUpdate } from '../events-dispatch.js'; +import { loadTables, saveTables } from '../manager.js'; + +import { + getState, + addHighlight, + markTableUpdated, + getUpdatedTables, +} from '../infra/store.js'; + +import { + saveStateToMessage, + commitToLastMessage, +} from '../infra/persistence.js'; + +export function deleteColumn(tableIndex, colIndex) { + const tables = getState(); + if (!tables || !tables[tableIndex] || colIndex < 0 || colIndex >= tables[tableIndex].headers.length) { + log(`删除列失败:在表格 ${tableIndex} 中找不到索引为 ${colIndex} 的列。`, 'error'); + return; + } + + tables[tableIndex].headers.splice(colIndex, 1); + tables[tableIndex].rows.forEach(row => { + if (row.length > colIndex) row.splice(colIndex, 1); + }); + if (tables[tableIndex].columnWidths && tables[tableIndex].columnWidths.length > colIndex) { + tables[tableIndex].columnWidths.splice(colIndex, 1); + } + + log(`成功删除了表格 ${tableIndex} 的第 ${colIndex + 1} 列。`, 'success'); + saveTables(tables); + dispatchTableUpdate(tableIndex); +} + +export function moveRow(tableIndex, rowIndex, direction) { + const tables = getState(); + const table = tables?.[tableIndex]; + if (!table || rowIndex < 0 || rowIndex >= table.rows.length) return; + + const newIndex = direction === 'up' ? rowIndex - 1 : rowIndex + 1; + if (newIndex < 0 || newIndex >= table.rows.length) return; + + const [movedRow] = table.rows.splice(rowIndex, 1); + table.rows.splice(newIndex, 0, movedRow); + + if (table.rowStatuses && table.rowStatuses.length === table.rows.length + 1) { + const [movedStatus] = table.rowStatuses.splice(rowIndex, 1); + table.rowStatuses.splice(newIndex, 0, movedStatus); + } + + log(`成功将表格 ${tableIndex} 的第 ${rowIndex + 1} 行移动到第 ${newIndex + 1} 行。`, 'success'); + saveTables(tables); + dispatchTableUpdate(tableIndex); +} + +export function insertRow(tableIndex, data, position = 'below') { + const tables = getState(); + const table = tables?.[tableIndex]; + if (!table) { + log(`插入行失败:找不到索引为 ${tableIndex} 的表格。`, 'error'); + return; + } + + let insertIndex; + if (typeof data === 'number') { + insertIndex = position === 'above' ? data : data + 1; + } else { + insertIndex = table.rows.length; + } + if (insertIndex < 0) insertIndex = 0; + if (insertIndex > table.rows.length) insertIndex = table.rows.length; + + const newRow = new Array(table.headers.length).fill(''); + + if (typeof data === 'object' && data !== null) { + for (const colIndex in data) { + const cIndex = parseInt(colIndex, 10); + if (!isNaN(cIndex) && cIndex < newRow.length) { + newRow[cIndex] = data[colIndex]; + addHighlight(tableIndex, insertIndex, cIndex); + } + } + } + + table.rows.splice(insertIndex, 0, newRow); + if (!table.rowStatuses) table.rowStatuses = Array(table.rows.length).fill('normal'); + table.rowStatuses.splice(insertIndex, 0, 'normal'); + + markTableUpdated(tableIndex); + dispatchTableUpdate(tableIndex); + log(`成功在表格 ${table.name} (索引 ${tableIndex}) 的第 ${insertIndex + 1} 行位置插入了新行。`, 'success'); + + commitToLastMessage(tables); +} + +export function addRow(tableIndex) { + const tables = getState(); + if (!tables || !tables[tableIndex]) return; + const table = tables[tableIndex]; + const colCount = table.headers.length; + const newRow = Array(colCount).fill(''); + table.rows.push(newRow); + if (!table.rowStatuses) table.rowStatuses = Array(table.rows.length).fill('normal'); + table.rowStatuses.push('normal'); + markTableUpdated(tableIndex); + dispatchTableUpdate(tableIndex); + log(`表格 [${table.name}] 新增了一行。`, 'info'); + + commitToLastMessage(tables); +} + +export function addColumn(tableIndex) { + const tables = getState(); + if (!tables || !tables[tableIndex]) return; + const table = tables[tableIndex]; + const newHeader = `新列 ${table.headers.length + 1}`; + table.headers.push(newHeader); + table.rows.forEach(row => row.push('')); + if (!table.columnWidths) table.columnWidths = []; + table.columnWidths.push(null); + log(`表格 [${table.name}] 新增了一列。`, 'info'); + + commitToLastMessage(tables); +} + +export function updateHeader(tableIndex, colIndex, value) { + const tables = getState(); + if (!tables || !tables[tableIndex] || tables[tableIndex].headers[colIndex] === undefined) return; + const tableName = tables[tableIndex].name; + const originalHeader = tables[tableIndex].headers[colIndex]; + tables[tableIndex].headers[colIndex] = value; + log(`表格 [${tableName}] 的表头“${originalHeader}”已更新为“${value}”。`, 'info'); + + commitToLastMessage(tables); +} + +export async function deleteRow(tableIndex, rowIndex) { + const tables = getState(); + const table = tables?.[tableIndex]; + if (!table || !table.rows[rowIndex]) return; + + if (!table.rowStatuses) { + table.rowStatuses = Array(table.rows.length).fill('normal'); + } + + table.rowStatuses[rowIndex] = 'pending-deletion'; + markTableUpdated(tableIndex); + log(`表格 [${table.name}] 的第 ${rowIndex + 1} 行已标记为待删除。`, 'info'); + + const context = getContext(); + if (context.chat?.length > 0) { + const lastMessage = context.chat[context.chat.length - 1]; + if (saveStateToMessage(tables, lastMessage)) { + await saveChat(); + renderTables(); + dispatchTableUpdate(tableIndex); + return; + } + } + await saveChatDebounced(); + renderTables(); + dispatchTableUpdate(tableIndex); +} + +export async function restoreRow(tableIndex, rowIndex) { + const tables = getState(); + const table = tables?.[tableIndex]; + if (!table || !table.rows[rowIndex] || !table.rowStatuses) return; + + table.rowStatuses[rowIndex] = 'normal'; + markTableUpdated(tableIndex); + log(`表格 [${table.name}] 的第 ${rowIndex + 1} 行已恢复。`, 'info'); + + const context = getContext(); + if (context.chat?.length > 0) { + const lastMessage = context.chat[context.chat.length - 1]; + if (saveStateToMessage(tables, lastMessage)) { + await saveChat(); + renderTables(); + dispatchTableUpdate(tableIndex); + return; + } + } + await saveChatDebounced(); + renderTables(); + dispatchTableUpdate(tableIndex); +} + +export function commitPendingDeletions() { + const tables = getState(); + if (!tables) return false; + let deletionCount = 0; + + tables.forEach((table, tableIndex) => { + if (!table.rowStatuses || table.rowStatuses.length === 0) return; + let tableHadDeletions = false; + for (let i = table.rows.length - 1; i >= 0; i--) { + if (table.rowStatuses[i] === 'pending-deletion') { + table.rows.splice(i, 1); + table.rowStatuses.splice(i, 1); + deletionCount++; + tableHadDeletions = true; + } + } + if (tableHadDeletions) markTableUpdated(tableIndex); + }); + + if (deletionCount > 0) { + log(`已提交并永久删除了 ${deletionCount} 行。`, 'info'); + const updated = getUpdatedTables(); + if (updated.size > 0) { + updated.forEach(tableIndex => dispatchTableUpdate(tableIndex)); + } + return true; + } + return false; +} + +export function insertColumn(tableIndex, colIndex, position) { + const tables = getState(); + if (!tables || !tables[tableIndex]) return; + const table = tables[tableIndex]; + + const insertAt = position === 'left' ? colIndex : colIndex + 1; + table.headers.splice(insertAt, 0, '新列'); + table.rows.forEach(row => row.splice(insertAt, 0, '')); + if (!table.columnWidths) table.columnWidths = []; + table.columnWidths.splice(insertAt, 0, null); + + log(`表格 [${table.name}] 在第 ${colIndex + 1} 列的${position === 'left' ? '左侧' : '右侧'}插入了新列。`, 'info'); + commitToLastMessage(tables); +} + +export function moveColumn(tableIndex, colIndex, direction) { + const tables = getState(); + if (!tables || !tables[tableIndex]) return; + const table = tables[tableIndex]; + const headers = table.headers; + const rows = table.rows; + + const targetIndex = direction === 'left' ? colIndex - 1 : colIndex + 1; + if (targetIndex < 0 || targetIndex >= headers.length) { + log(`无法移动列:索引 ${colIndex} 已在边界。`, 'warn'); + return; + } + + const [headerToMove] = headers.splice(colIndex, 1); + headers.splice(targetIndex, 0, headerToMove); + + rows.forEach(row => { + const [cellToMove] = row.splice(colIndex, 1); + row.splice(targetIndex, 0, cellToMove); + }); + + if (table.columnWidths && table.columnWidths.length > colIndex) { + const [widthToMove] = table.columnWidths.splice(colIndex, 1); + table.columnWidths.splice(targetIndex, 0, widthToMove); + } + + log(`表格 [${table.name}] 的列“${headerToMove}”已向${direction === 'left' ? '左' : '右'}移动。`, 'info'); + commitToLastMessage(tables); +} + +export function deleteTable(tableIndex) { + const tables = getState(); + if (!tables || !tables[tableIndex]) return; + const tableName = tables[tableIndex].name; + tables.splice(tableIndex, 1); + log(`表格 [${tableName}] 已被成功废黜。`, 'success'); + + const success = commitToLastMessage(tables); + if (success) { + log('废黜表格后的状态已强制写入最新消息并立即保存。', 'success'); + } else { + log('无法找到可锚定的消息或保存失败,删除操作可能不会被持久化!', 'error'); + } +} + +export function addTable(tableName) { + if (!tableName || !tableName.trim()) { + log('无法创建表格:名称不能为空。', 'error'); + toastr.error('表格名称不能为空。', '创建失败'); + return; + } + let tables = getState(); + if (!tables) { + loadTables(); + tables = getState(); + } + + if (tables.some(table => table.name === tableName.trim())) { + log(`无法创建表格:名为 "${tableName}" 的表格已存在。`, 'error'); + toastr.error(`名为 "${tableName}" 的表格已存在。`, '创建失败'); + return; + } + + const newTable = { + name: tableName.trim(), + headers: ['新列 1'], + rows: [], + rowStatuses: [], + columnWidths: [], + note: '这是一个新创建的表格。', + rule_add: '允许', + rule_delete: '允许', + rule_update: '允许', + charLimitRules: {}, + rowLimitRule: 0, + }; + + tables.push(newTable); + log(`已成功创建新表格:[${tableName.trim()}]。`, 'success'); + + const success = commitToLastMessage(tables); + if (success) { + log('新表格状态已强制写入最新消息并立即保存。', 'success'); + } else { + log('无法找到可锚定的消息或保存失败,新表格可能不会被持久化!', 'error'); + } +} + +export function renameTable(tableIndex, newName) { + const tables = getState(); + if (!tables || !tables[tableIndex]) { + log('重命名失败:表格不存在。', 'error'); + toastr.error('表格不存在。', '重命名失败'); + return; + } + const trimmedName = newName.trim(); + if (!trimmedName) { + log('重命名失败:名称不能为空。', 'error'); + toastr.error('表格名称不能为空。', '重命名失败'); + return; + } + if (tables.some((table, index) => index !== tableIndex && table.name === trimmedName)) { + log(`重命名失败:名为 "${trimmedName}" 的表格已存在。`, 'error'); + toastr.error(`名为 "${trimmedName}" 的表格已存在。`, '重命名失败'); + return; + } + + const oldName = tables[tableIndex].name; + tables[tableIndex].name = trimmedName; + log(`表格 "${oldName}" 已重命名为 "${trimmedName}"。`, 'success'); + + commitToLastMessage(tables); +} + +export function moveTable(tableIndex, direction) { + const tables = getState(); + if (!tables || !tables[tableIndex]) return; + + const newIndex = direction === 'up' ? tableIndex - 1 : tableIndex + 1; + if (newIndex < 0 || newIndex >= tables.length) { + log(`无法移动表格:索引 ${tableIndex} 已在边界。`, 'warn'); + return; + } + + const temp = tables[tableIndex]; + tables[tableIndex] = tables[newIndex]; + tables[newIndex] = temp; + + log(`表格 [${temp.name}] 的顺序已调整。`, 'success'); + + const success = commitToLastMessage(tables); + if (success) { + log('表格顺序调整后的状态已强制写入最新消息并立即保存。', 'success'); + } else { + log('无法找到可锚定的消息或保存失败,顺序调整可能不会被持久化!', 'error'); + } +} + +export function updateTableRules(tableIndex, newRules) { + const tables = getState(); + if (!tables || !tables[tableIndex]) return; + const table = tables[tableIndex]; + table.note = newRules.note; + table.rule_add = newRules.rule_add; + table.rule_delete = newRules.rule_delete; + table.rule_update = newRules.rule_update; + table.charLimitRules = newRules.charLimitRules; + table.rowLimitRule = newRules.rowLimitRule; + table.simplifyRowThreshold = newRules.simplifyRowThreshold; + + delete table.charLimitRule; + + log(`表格 [${table.name}] 的规则已更新。`, 'info'); + commitToLastMessage(tables); +} + +export function updateRow(tableIndex, rowIndex, data) { + const tables = getState(); + if (!tables || !tables[tableIndex]) { + log(`AI指令错误:尝试在不存在的表格索引 ${tableIndex} 中操作。`, 'error'); + return; + } + const table = tables[tableIndex]; + + if (rowIndex >= table.rows.length) { + log(`AI指令意图更新不存在的行 (rowIndex: ${rowIndex}),已智能转换为在表格 [${table.name}] 末尾新增一行。`, 'warn'); + insertRow(tableIndex, data); + return; + } + + const row = table.rows[rowIndex]; + for (const colIndex in data) { + const cIndex = parseInt(colIndex, 10); + if (cIndex < row.length) { + row[cIndex] = data[cIndex]; + addHighlight(tableIndex, rowIndex, cIndex); + } + } + + markTableUpdated(tableIndex); + dispatchTableUpdate(tableIndex); + log(`AI 指令更新了表格 [${table.name}] 的第 ${rowIndex + 1} 行。`, 'info'); + + commitToLastMessage(tables); +} + +export function clearAllTables() { + const tables = getState(); + if (!tables) { + log('无法清空:当前表格状态为空。', 'error'); + return; + } + + tables.forEach((table, tableIndex) => { + if (table.rows.length > 0) markTableUpdated(tableIndex); + table.rows = []; + table.rowStatuses = []; + }); + log('所有表格的行数据已在内存中清空。', 'warn'); + + dispatchAllTablesUpdate(); + + const success = commitToLastMessage(tables); + if (success) { + log('清空行数据后的状态已强制写入最新消息并立即保存。', 'success'); + toastr.success('所有表格的剧情内容已清空。', '操作完成'); + } else { + log('无法找到可锚定的消息或保存失败,清空操作可能不会被持久化!', 'error'); + } +} + +export function updateColumnWidth(tableIndex, colIndex, width) { + const tables = getState(); + if (!tables || !tables[tableIndex]) return; + const table = tables[tableIndex]; + if (!table.columnWidths) table.columnWidths = []; + while (table.columnWidths.length < table.headers.length) { + table.columnWidths.push(null); + } + table.columnWidths[colIndex] = width; + + commitToLastMessage(tables); +} diff --git a/core/table-system/events-dispatch.js b/core/table-system/events-dispatch.js new file mode 100644 index 0000000..ed5661c --- /dev/null +++ b/core/table-system/events-dispatch.js @@ -0,0 +1,51 @@ +/** + * @file events-dispatch.js —— SuperMemory 事件分发(Phase 0.4 自 manager.js 抽出) + * + * 把单表 / 全表的最新状态推送给 SuperMemory(优先 Bus 直调,降级 CustomEvent)。 + * 独立成模块的原因:manager.js 与 actions/ui-mutations.js 都需要调用, + * 放在任何一方都会制造新的循环依赖;本模块只依赖 store / events-schema / logger,零环。 + */ + +import { extension_settings } from '/scripts/extensions.js'; +import { extensionName } from '../../utils/settings.js'; +import { log } from './logger.js'; +import { getState } from './infra/store.js'; +import { createTableUpdateEvent, inferTableRole } from './events-schema.js'; + +/** + * 把单个表格的最新状态推送给 SuperMemory(优先 Bus 直调,降级 CustomEvent)。 + * @param {number} tableIndex + */ +export function dispatchTableUpdate(tableIndex) { + const settings = extension_settings[extensionName] || {}; + if (settings.super_memory_enabled === false) return; + + const state = getState(); + if (!state || !state[tableIndex]) return; + const table = state[tableIndex]; + const role = inferTableRole(table.name); + + const smBus = window.Amily2Bus?.query('SuperMemory'); + if (smBus?.pushUpdate) { + smBus.pushUpdate({ + tableName: table.name, + data: table.rows, + headers: table.headers, + rowStatuses: table.rowStatuses ?? [], + role, + }); + } else { + document.dispatchEvent(createTableUpdateEvent(table)); + } + log(`[SuperMemory] Dispatched update for ${table.name} (role: ${role})`, 'info'); +} + +/** + * 触发所有表格的全量同步(Pipeline 变更后调用)。 + */ +export function dispatchAllTablesUpdate() { + const state = getState(); + if (!state) return; + log('[SuperMemory] Dispatching update events for ALL tables...', 'info'); + state.forEach((_, index) => dispatchTableUpdate(index)); +} diff --git a/core/table-system/manager.js b/core/table-system/manager.js index 6e74cfe..39af178 100644 --- a/core/table-system/manager.js +++ b/core/table-system/manager.js @@ -5,16 +5,17 @@ * - 状态:infra/store.js (currentTablesState / highlights / updatedTables) * - 持久化:infra/persistence.js (saveStateToMessage / commitToLastMessage) * - 推演:actions/applyOperations.js (executor.js 改造为 legacy formatter) + * - UI 突变:actions/ui-mutations.js (addRow / addColumn / ... / clearAllTables,Phase 0.4) + * - SuperMemory 分发:events-dispatch.js (dispatchTableUpdate / dispatchAllTablesUpdate) * - 渲染:rendering.js (3 个 toCsv) * - 模板:templates.js * - 预设:preset.js * * 本文件保留: * - 默认表格模板 + getDefaultTables - * - SuperMemory 事件分发(dispatchTableUpdate / dispatchAllTablesUpdate / triggerSync) + * - triggerSync(SuperMemory 全量同步入口) * - loadTables 的多档回退逻辑 - * - 16 个 UI 突变(addRow / addColumn / ... / clearAllTables) - * - updateTableFromText 编排 + * - updateTableFromText / updateTableFromOps 编排 * - rollbackState / rollbackAndRefill * * 所有原先 export 的接口一律保留兼容(移走的统一 re-export),调用方零改动。 @@ -33,7 +34,31 @@ import { applyOperations } from './actions/applyOperations.js'; import { fillWithSecondaryApi } from './secondary-filler.js'; import { renderTables } from '../../ui/table-bindings.js'; import { updateOrInsertTableInChat } from '../../ui/message-table-renderer.js'; -import { createTableUpdateEvent, inferTableRole } from './events-schema.js'; +import { dispatchTableUpdate, dispatchAllTablesUpdate } from './events-dispatch.js'; + +// ── UI 突变(Phase 0.4 迁至 actions/ui-mutations.js,此处 re-export 保持兼容) ── +import { commitPendingDeletions } from './actions/ui-mutations.js'; +export { + deleteColumn, + moveRow, + insertRow, + addRow, + addColumn, + updateHeader, + deleteRow, + restoreRow, + commitPendingDeletions, + insertColumn, + moveColumn, + deleteTable, + addTable, + renameTable, + moveTable, + updateTableRules, + updateRow, + clearAllTables, + updateColumnWidth, +} from './actions/ui-mutations.js'; // ── 新模块(IAD 拆分后的依赖) ──────────────────────────────────────────── import { @@ -77,45 +102,7 @@ import { importGlobalPreset as _presetImportGlobalPreset, } from './preset.js'; -// ── 私有:SuperMemory 事件分发 ──────────────────────────────────────────── - -/** - * 把单个表格的最新状态推送给 SuperMemory(优先 Bus 直调,降级 CustomEvent)。 - * @param {number} tableIndex - */ -function dispatchTableUpdate(tableIndex) { - const settings = extension_settings[extensionName] || {}; - if (settings.super_memory_enabled === false) return; - - const state = getState(); - if (!state || !state[tableIndex]) return; - const table = state[tableIndex]; - const role = inferTableRole(table.name); - - const smBus = window.Amily2Bus?.query('SuperMemory'); - if (smBus?.pushUpdate) { - smBus.pushUpdate({ - tableName: table.name, - data: table.rows, - headers: table.headers, - rowStatuses: table.rowStatuses ?? [], - role, - }); - } else { - document.dispatchEvent(createTableUpdateEvent(table)); - } - log(`[SuperMemory] Dispatched update for ${table.name} (role: ${role})`, 'info'); -} - -/** - * 触发所有表格的全量同步(Pipeline 变更后调用)。 - */ -function dispatchAllTablesUpdate() { - const state = getState(); - if (!state) return; - log('[SuperMemory] Dispatching update events for ALL tables...', 'info'); - state.forEach((_, index) => dispatchTableUpdate(index)); -} +// ── SuperMemory 同步入口 ────────────────────────────────────────────────── /** * 主动触发所有表格同步到 SuperMemory(外部调用入口)。 @@ -352,438 +339,6 @@ export function saveTables(sourceAction = '未知操作') { return true; } -// ── 16 个 UI 突变 ───────────────────────────────────────────────────────── - -export function deleteColumn(tableIndex, colIndex) { - const tables = getState(); - if (!tables || !tables[tableIndex] || colIndex < 0 || colIndex >= tables[tableIndex].headers.length) { - log(`删除列失败:在表格 ${tableIndex} 中找不到索引为 ${colIndex} 的列。`, 'error'); - return; - } - - tables[tableIndex].headers.splice(colIndex, 1); - tables[tableIndex].rows.forEach(row => { - if (row.length > colIndex) row.splice(colIndex, 1); - }); - if (tables[tableIndex].columnWidths && tables[tableIndex].columnWidths.length > colIndex) { - tables[tableIndex].columnWidths.splice(colIndex, 1); - } - - log(`成功删除了表格 ${tableIndex} 的第 ${colIndex + 1} 列。`, 'success'); - saveTables(tables); - dispatchTableUpdate(tableIndex); -} - -export function moveRow(tableIndex, rowIndex, direction) { - const tables = getState(); - const table = tables?.[tableIndex]; - if (!table || rowIndex < 0 || rowIndex >= table.rows.length) return; - - const newIndex = direction === 'up' ? rowIndex - 1 : rowIndex + 1; - if (newIndex < 0 || newIndex >= table.rows.length) return; - - const [movedRow] = table.rows.splice(rowIndex, 1); - table.rows.splice(newIndex, 0, movedRow); - - if (table.rowStatuses && table.rowStatuses.length === table.rows.length + 1) { - const [movedStatus] = table.rowStatuses.splice(rowIndex, 1); - table.rowStatuses.splice(newIndex, 0, movedStatus); - } - - log(`成功将表格 ${tableIndex} 的第 ${rowIndex + 1} 行移动到第 ${newIndex + 1} 行。`, 'success'); - saveTables(tables); - dispatchTableUpdate(tableIndex); -} - -export function insertRow(tableIndex, data, position = 'below') { - const tables = getState(); - const table = tables?.[tableIndex]; - if (!table) { - log(`插入行失败:找不到索引为 ${tableIndex} 的表格。`, 'error'); - return; - } - - let insertIndex; - if (typeof data === 'number') { - insertIndex = position === 'above' ? data : data + 1; - } else { - insertIndex = table.rows.length; - } - if (insertIndex < 0) insertIndex = 0; - if (insertIndex > table.rows.length) insertIndex = table.rows.length; - - const newRow = new Array(table.headers.length).fill(''); - - if (typeof data === 'object' && data !== null) { - for (const colIndex in data) { - const cIndex = parseInt(colIndex, 10); - if (!isNaN(cIndex) && cIndex < newRow.length) { - newRow[cIndex] = data[colIndex]; - addHighlight(tableIndex, insertIndex, cIndex); - } - } - } - - table.rows.splice(insertIndex, 0, newRow); - if (!table.rowStatuses) table.rowStatuses = Array(table.rows.length).fill('normal'); - table.rowStatuses.splice(insertIndex, 0, 'normal'); - - markTableUpdated(tableIndex); - dispatchTableUpdate(tableIndex); - log(`成功在表格 ${table.name} (索引 ${tableIndex}) 的第 ${insertIndex + 1} 行位置插入了新行。`, 'success'); - - commitToLastMessage(tables); -} - -export function addRow(tableIndex) { - const tables = getState(); - if (!tables || !tables[tableIndex]) return; - const table = tables[tableIndex]; - const colCount = table.headers.length; - const newRow = Array(colCount).fill(''); - table.rows.push(newRow); - if (!table.rowStatuses) table.rowStatuses = Array(table.rows.length).fill('normal'); - table.rowStatuses.push('normal'); - markTableUpdated(tableIndex); - dispatchTableUpdate(tableIndex); - log(`表格 [${table.name}] 新增了一行。`, 'info'); - - commitToLastMessage(tables); -} - -export function addColumn(tableIndex) { - const tables = getState(); - if (!tables || !tables[tableIndex]) return; - const table = tables[tableIndex]; - const newHeader = `新列 ${table.headers.length + 1}`; - table.headers.push(newHeader); - table.rows.forEach(row => row.push('')); - if (!table.columnWidths) table.columnWidths = []; - table.columnWidths.push(null); - log(`表格 [${table.name}] 新增了一列。`, 'info'); - - commitToLastMessage(tables); -} - -export function updateHeader(tableIndex, colIndex, value) { - const tables = getState(); - if (!tables || !tables[tableIndex] || tables[tableIndex].headers[colIndex] === undefined) return; - const tableName = tables[tableIndex].name; - const originalHeader = tables[tableIndex].headers[colIndex]; - tables[tableIndex].headers[colIndex] = value; - log(`表格 [${tableName}] 的表头“${originalHeader}”已更新为“${value}”。`, 'info'); - - commitToLastMessage(tables); -} - -export async function deleteRow(tableIndex, rowIndex) { - const tables = getState(); - const table = tables?.[tableIndex]; - if (!table || !table.rows[rowIndex]) return; - - if (!table.rowStatuses) { - table.rowStatuses = Array(table.rows.length).fill('normal'); - } - - table.rowStatuses[rowIndex] = 'pending-deletion'; - markTableUpdated(tableIndex); - log(`表格 [${table.name}] 的第 ${rowIndex + 1} 行已标记为待删除。`, 'info'); - - const context = getContext(); - if (context.chat?.length > 0) { - const lastMessage = context.chat[context.chat.length - 1]; - if (_persistSaveStateToMessage(tables, lastMessage)) { - await saveChat(); - renderTables(); - dispatchTableUpdate(tableIndex); - return; - } - } - await saveChatDebounced(); - renderTables(); - dispatchTableUpdate(tableIndex); -} - -export async function restoreRow(tableIndex, rowIndex) { - const tables = getState(); - const table = tables?.[tableIndex]; - if (!table || !table.rows[rowIndex] || !table.rowStatuses) return; - - table.rowStatuses[rowIndex] = 'normal'; - markTableUpdated(tableIndex); - log(`表格 [${table.name}] 的第 ${rowIndex + 1} 行已恢复。`, 'info'); - - const context = getContext(); - if (context.chat?.length > 0) { - const lastMessage = context.chat[context.chat.length - 1]; - if (_persistSaveStateToMessage(tables, lastMessage)) { - await saveChat(); - renderTables(); - dispatchTableUpdate(tableIndex); - return; - } - } - await saveChatDebounced(); - renderTables(); - dispatchTableUpdate(tableIndex); -} - -export function commitPendingDeletions() { - const tables = getState(); - if (!tables) return false; - let deletionCount = 0; - - tables.forEach((table, tableIndex) => { - if (!table.rowStatuses || table.rowStatuses.length === 0) return; - let tableHadDeletions = false; - for (let i = table.rows.length - 1; i >= 0; i--) { - if (table.rowStatuses[i] === 'pending-deletion') { - table.rows.splice(i, 1); - table.rowStatuses.splice(i, 1); - deletionCount++; - tableHadDeletions = true; - } - } - if (tableHadDeletions) markTableUpdated(tableIndex); - }); - - if (deletionCount > 0) { - log(`已提交并永久删除了 ${deletionCount} 行。`, 'info'); - const updated = _storeGetUpdatedTables(); - if (updated.size > 0) { - updated.forEach(tableIndex => dispatchTableUpdate(tableIndex)); - } - return true; - } - return false; -} - -export function insertColumn(tableIndex, colIndex, position) { - const tables = getState(); - if (!tables || !tables[tableIndex]) return; - const table = tables[tableIndex]; - - const insertAt = position === 'left' ? colIndex : colIndex + 1; - table.headers.splice(insertAt, 0, '新列'); - table.rows.forEach(row => row.splice(insertAt, 0, '')); - if (!table.columnWidths) table.columnWidths = []; - table.columnWidths.splice(insertAt, 0, null); - - log(`表格 [${table.name}] 在第 ${colIndex + 1} 列的${position === 'left' ? '左侧' : '右侧'}插入了新列。`, 'info'); - commitToLastMessage(tables); -} - -export function moveColumn(tableIndex, colIndex, direction) { - const tables = getState(); - if (!tables || !tables[tableIndex]) return; - const table = tables[tableIndex]; - const headers = table.headers; - const rows = table.rows; - - const targetIndex = direction === 'left' ? colIndex - 1 : colIndex + 1; - if (targetIndex < 0 || targetIndex >= headers.length) { - log(`无法移动列:索引 ${colIndex} 已在边界。`, 'warn'); - return; - } - - const [headerToMove] = headers.splice(colIndex, 1); - headers.splice(targetIndex, 0, headerToMove); - - rows.forEach(row => { - const [cellToMove] = row.splice(colIndex, 1); - row.splice(targetIndex, 0, cellToMove); - }); - - if (table.columnWidths && table.columnWidths.length > colIndex) { - const [widthToMove] = table.columnWidths.splice(colIndex, 1); - table.columnWidths.splice(targetIndex, 0, widthToMove); - } - - log(`表格 [${table.name}] 的列“${headerToMove}”已向${direction === 'left' ? '左' : '右'}移动。`, 'info'); - commitToLastMessage(tables); -} - -export function deleteTable(tableIndex) { - const tables = getState(); - if (!tables || !tables[tableIndex]) return; - const tableName = tables[tableIndex].name; - tables.splice(tableIndex, 1); - log(`表格 [${tableName}] 已被成功废黜。`, 'success'); - - const success = commitToLastMessage(tables); - if (success) { - log('废黜表格后的状态已强制写入最新消息并立即保存。', 'success'); - } else { - log('无法找到可锚定的消息或保存失败,删除操作可能不会被持久化!', 'error'); - } -} - -export function addTable(tableName) { - if (!tableName || !tableName.trim()) { - log('无法创建表格:名称不能为空。', 'error'); - toastr.error('表格名称不能为空。', '创建失败'); - return; - } - let tables = getState(); - if (!tables) { - loadTables(); - tables = getState(); - } - - if (tables.some(table => table.name === tableName.trim())) { - log(`无法创建表格:名为 "${tableName}" 的表格已存在。`, 'error'); - toastr.error(`名为 "${tableName}" 的表格已存在。`, '创建失败'); - return; - } - - const newTable = { - name: tableName.trim(), - headers: ['新列 1'], - rows: [], - rowStatuses: [], - columnWidths: [], - note: '这是一个新创建的表格。', - rule_add: '允许', - rule_delete: '允许', - rule_update: '允许', - charLimitRules: {}, - rowLimitRule: 0, - }; - - tables.push(newTable); - log(`已成功创建新表格:[${tableName.trim()}]。`, 'success'); - - const success = commitToLastMessage(tables); - if (success) { - log('新表格状态已强制写入最新消息并立即保存。', 'success'); - } else { - log('无法找到可锚定的消息或保存失败,新表格可能不会被持久化!', 'error'); - } -} - -export function renameTable(tableIndex, newName) { - const tables = getState(); - if (!tables || !tables[tableIndex]) { - log('重命名失败:表格不存在。', 'error'); - toastr.error('表格不存在。', '重命名失败'); - return; - } - const trimmedName = newName.trim(); - if (!trimmedName) { - log('重命名失败:名称不能为空。', 'error'); - toastr.error('表格名称不能为空。', '重命名失败'); - return; - } - if (tables.some((table, index) => index !== tableIndex && table.name === trimmedName)) { - log(`重命名失败:名为 "${trimmedName}" 的表格已存在。`, 'error'); - toastr.error(`名为 "${trimmedName}" 的表格已存在。`, '重命名失败'); - return; - } - - const oldName = tables[tableIndex].name; - tables[tableIndex].name = trimmedName; - log(`表格 "${oldName}" 已重命名为 "${trimmedName}"。`, 'success'); - - commitToLastMessage(tables); -} - -export function moveTable(tableIndex, direction) { - const tables = getState(); - if (!tables || !tables[tableIndex]) return; - - const newIndex = direction === 'up' ? tableIndex - 1 : tableIndex + 1; - if (newIndex < 0 || newIndex >= tables.length) { - log(`无法移动表格:索引 ${tableIndex} 已在边界。`, 'warn'); - return; - } - - const temp = tables[tableIndex]; - tables[tableIndex] = tables[newIndex]; - tables[newIndex] = temp; - - log(`表格 [${temp.name}] 的顺序已调整。`, 'success'); - - const success = commitToLastMessage(tables); - if (success) { - log('表格顺序调整后的状态已强制写入最新消息并立即保存。', 'success'); - } else { - log('无法找到可锚定的消息或保存失败,顺序调整可能不会被持久化!', 'error'); - } -} - -export function updateTableRules(tableIndex, newRules) { - const tables = getState(); - if (!tables || !tables[tableIndex]) return; - const table = tables[tableIndex]; - table.note = newRules.note; - table.rule_add = newRules.rule_add; - table.rule_delete = newRules.rule_delete; - table.rule_update = newRules.rule_update; - table.charLimitRules = newRules.charLimitRules; - table.rowLimitRule = newRules.rowLimitRule; - table.simplifyRowThreshold = newRules.simplifyRowThreshold; - - delete table.charLimitRule; - - log(`表格 [${table.name}] 的规则已更新。`, 'info'); - commitToLastMessage(tables); -} - -export function updateRow(tableIndex, rowIndex, data) { - const tables = getState(); - if (!tables || !tables[tableIndex]) { - log(`AI指令错误:尝试在不存在的表格索引 ${tableIndex} 中操作。`, 'error'); - return; - } - const table = tables[tableIndex]; - - if (rowIndex >= table.rows.length) { - log(`AI指令意图更新不存在的行 (rowIndex: ${rowIndex}),已智能转换为在表格 [${table.name}] 末尾新增一行。`, 'warn'); - insertRow(tableIndex, data); - return; - } - - const row = table.rows[rowIndex]; - for (const colIndex in data) { - const cIndex = parseInt(colIndex, 10); - if (cIndex < row.length) { - row[cIndex] = data[cIndex]; - addHighlight(tableIndex, rowIndex, cIndex); - } - } - - markTableUpdated(tableIndex); - dispatchTableUpdate(tableIndex); - log(`AI 指令更新了表格 [${table.name}] 的第 ${rowIndex + 1} 行。`, 'info'); - - commitToLastMessage(tables); -} - -export function clearAllTables() { - const tables = getState(); - if (!tables) { - log('无法清空:当前表格状态为空。', 'error'); - return; - } - - tables.forEach((table, tableIndex) => { - if (table.rows.length > 0) markTableUpdated(tableIndex); - table.rows = []; - table.rowStatuses = []; - }); - log('所有表格的行数据已在内存中清空。', 'warn'); - - dispatchAllTablesUpdate(); - - const success = commitToLastMessage(tables); - if (success) { - log('清空行数据后的状态已强制写入最新消息并立即保存。', 'success'); - toastr.success('所有表格的剧情内容已清空。', '操作完成'); - } else { - log('无法找到可锚定的消息或保存失败,清空操作可能不会被持久化!', 'error'); - } -} - // ── 渲染 wrapper(注入当前 state) ──────────────────────────────────────── export function convertTablesToCsvString() { @@ -1031,19 +586,6 @@ export async function rollbackAndRefill() { // ── 杂项 ────────────────────────────────────────────────────────────────── -export function updateColumnWidth(tableIndex, colIndex, width) { - const tables = getState(); - if (!tables || !tables[tableIndex]) return; - const table = tables[tableIndex]; - if (!table.columnWidths) table.columnWidths = []; - while (table.columnWidths.length < table.headers.length) { - table.columnWidths.push(null); - } - table.columnWidths[colIndex] = width; - - commitToLastMessage(tables); -} - export function isCurrentTablesEmpty() { const tables = getState(); if (!tables || tables.length === 0) return true; diff --git a/glossary/GT_bindings.js b/glossary/GT_bindings.js index 85df68e..d47eac0 100644 --- a/glossary/GT_bindings.js +++ b/glossary/GT_bindings.js @@ -9,6 +9,7 @@ import { handleFileUpload, processNovel } from './index.js'; import { reorganizeEntriesByHeadings, loadDatabaseFiles } from './executor.js'; import { SETTINGS_KEY as PRESET_SETTINGS_KEY } from '../PresetSettings/config.js'; import { escapeHTML } from '../utils/utils.js'; +import { watchProfileSliderGuard } from '../ui/profile-slider-guard.js'; const moduleState = { selectedWorldBook: '', @@ -669,6 +670,8 @@ export function bindGlossaryEvents() { loadSettingsToUI(); bindAutoSaveEvents(); + // sybd 槽分配 profile 后,温度/maxTokens 由 profile 权威控制(T-006 informational 化) + watchProfileSliderGuard('sybd', ['#amily2_sybd_max_tokens', '#amily2_sybd_temperature']); bindManualActionEvents(); bindTabEvents(); bindNovelProcessEvents(); diff --git a/manifest.json b/manifest.json index 58ea6de..61b1f00 100644 --- a/manifest.json +++ b/manifest.json @@ -1,7 +1,7 @@ { "name": "Amily2号聊天优化助手", "display_name": "Amily2号助手", - "version": "2.2.5", + "version": "2.2.6", "author": "Wx-2025", "description": "一个拥有独立UI的智能引擎,正文优化、自动总结、记忆表格、rag向量、隐藏楼层、剧情推进等多功能整合。", "minSillyTavernVersion": "1.10.0", diff --git a/ui/bindings.js b/ui/bindings.js index 30f8b63..18cc6fe 100644 --- a/ui/bindings.js +++ b/ui/bindings.js @@ -13,6 +13,7 @@ import { executeManualCommand } from '../core/autoHideManager.js'; import { showContentModal, showHtmlModal, showCwbWarningModal } from './page-window.js'; import { openAutoCharCardWindow } from '../core/auto-char-card/ui-bindings.js'; import { showPresetSettings } from '../PresetSettings/prese_ui.js'; +import { watchProfileSliderGuard } from './profile-slider-guard.js'; function displayDailyAuthCode() { const displayEl = document.getElementById('amily2_daily_code_display'); @@ -1119,6 +1120,9 @@ export function bindModalEvents() { }, ); + // main 槽分配 profile 后,这两个参数由 profile 权威控制(T-006 informational 化) + watchProfileSliderGuard('main', ['#amily2_max_tokens', '#amily2_temperature']); + const promptMap = { mainPrompt: "#amily2_main_prompt", systemPrompt: "#amily2_system_prompt", diff --git a/ui/hanlinyuan-bindings.js b/ui/hanlinyuan-bindings.js index 723e53d..e131be7 100644 --- a/ui/hanlinyuan-bindings.js +++ b/ui/hanlinyuan-bindings.js @@ -1015,10 +1015,15 @@ function _createKbItemElement(id, kb, scope, vectorCount) { ? `` : ``; + // 聊天级库(独立聊天记忆产物)标记:仅所属聊天可检索 + const chatBadgeHtml = kb.chatId + ? ` 聊天级` + : ''; + item.innerHTML = `
- ${escapeTextareaContent(kb.name || '')} (${Number(vectorCount) || 0}条) + ${escapeTextareaContent(kb.name || '')} (${Number(vectorCount) || 0}条)${chatBadgeHtml}
${moveButtonHtml} diff --git a/ui/plot-opt-bindings.js b/ui/plot-opt-bindings.js index 6dbefdf..bf19fb5 100644 --- a/ui/plot-opt-bindings.js +++ b/ui/plot-opt-bindings.js @@ -14,6 +14,18 @@ import { createDrawer } from '../ui/drawer.js'; import { pluginAuthStatus } from "../utils/auth.js"; import { configManager } from '../utils/config/ConfigManager.js'; import { SENSITIVE_KEYS } from '../utils/config/sensitive-keys.js'; +import { showHtmlModal } from './page-window.js'; +import { escapeHTML } from '../utils/utils.js'; +import { SLOTS } from '../utils/config/ApiProfileManager.js'; +import { + listCustomBlocks, + getCustomBlock, + addCustomBlock, + updateCustomBlock, + deleteCustomBlock, + syncCustomBlocksFromSettings, +} from '../core/memory-blocks/index.js'; +import { watchProfileSliderGuard } from './profile-slider-guard.js'; // ========== Prompt Cache (module-level state) ========== @@ -625,6 +637,9 @@ function bindConcurrentApiEvents() { if (!concurrentToggle || !concurrentContent) return; + // plotOptConc 槽分配 profile 后,maxTokens 由 profile 权威控制(T-006 informational 化) + watchProfileSliderGuard('plotOptConc', ['#amily2_plotOpt_concurrentMaxTokens']); + const settings = extension_settings[extensionName] || {}; // Initial Load @@ -969,6 +984,180 @@ function opt_purgeGarbageKeys() { } } +// ========== 自定义记忆块(memory-blocks Phase 2) ========== + +// 该面板管理的块固定挂在剧情优化流水线;其他 context(如战斗系统)由各自模块注册 +const MEMORY_BLOCK_CONTEXT = 'plotOptimization'; + +function opt_renderCustomBlocks(panel) { + const list = panel.find('#amily2_opt_custom_blocks_list'); + if (list.length === 0) return; + + const blocks = listCustomBlocks(MEMORY_BLOCK_CONTEXT); + if (blocks.length === 0) { + list.html('
尚无自定义块。
'); + return; + } + + const rows = blocks.map(b => { + const typeBadge = b.generator?.type === 'ai_call' + ? 'AI 调用' + : '静态'; + return ` +
+ + + ${escapeHTML(b.name || '(未命名)')} + ${escapeHTML(b.placeholder)} + + ${typeBadge} + + +
`; + }); + list.html(rows.join('')); +} + +function opt_showCustomBlockModal(panel, blockId) { + const existing = blockId ? getCustomBlock(blockId) : null; + const gen = existing?.generator || {}; + const isAiCall = gen.type === 'ai_call'; + + // API 槽下拉:仅列出 chat 类型功能槽 + const slotOptions = Object.entries(SLOTS) + .filter(([, def]) => def.type === 'chat') + .map(([key, def]) => ``) + .join(''); + + const formHtml = ` +
+ + + +
+ +
+
+ + + + +
+
`; + + showHtmlModal(existing ? '编辑记忆块' : '新增记忆块', formHtml, { + okText: '保存', + onShow: (dialog) => { + dialog.find('#mb_type').on('change', function () { + const aiMode = $(this).val() === 'ai_call'; + dialog.find('#mb_static_fields').toggle(!aiMode); + dialog.find('#mb_ai_fields').css('display', aiMode ? 'flex' : 'none'); + }); + }, + onOk: (dialog) => { + const placeholder = String(dialog.find('#mb_placeholder').val() || '').trim(); + if (!placeholder) { + toastr.warning('占位符不能为空。'); + return false; + } + const conflict = listCustomBlocks(MEMORY_BLOCK_CONTEXT) + .find(b => b.placeholder === placeholder && b.id !== blockId); + if (conflict) { + toastr.warning(`占位符 "${placeholder}" 已被块 "${conflict.name || conflict.id}" 占用。`); + return false; + } + + const type = dialog.find('#mb_type').val(); + let generator; + if (type === 'ai_call') { + const promptTemplate = String(dialog.find('#mb_prompt_template').val() || ''); + if (!promptTemplate.trim()) { + toastr.warning('AI 调用块的用户提示词不能为空。'); + return false; + } + generator = { + type: 'ai_call', + apiSlot: dialog.find('#mb_api_slot').val() || 'main', + promptTemplate, + }; + const systemPrompt = String(dialog.find('#mb_system_prompt').val() || ''); + if (systemPrompt.trim()) generator.systemPrompt = systemPrompt; + const extractTag = String(dialog.find('#mb_extract_tag').val() || '').trim(); + if (extractTag) generator.extractTag = extractTag; + } else { + generator = { type: 'static', value: String(dialog.find('#mb_static_value').val() || '') }; + } + + const patch = { + name: String(dialog.find('#mb_name').val() || '').trim(), + placeholder, + context: MEMORY_BLOCK_CONTEXT, + generator, + }; + + try { + if (existing) { + updateCustomBlock(blockId, patch); + toastr.success('记忆块已更新。'); + } else { + addCustomBlock(patch); + toastr.success('记忆块已创建。'); + } + } catch (error) { + toastr.error(`保存失败: ${error.message}`); + return false; + } + opt_renderCustomBlocks(panel); + }, + }); +} + +function bindCustomBlockEvents(panel) { + // settings → registry 重放一次,确保面板与执行器看到同一份块清单 + syncCustomBlocksFromSettings(); + opt_renderCustomBlocks(panel); + + panel.on('click', '#amily2_opt_add_custom_block', () => opt_showCustomBlockModal(panel, null)); + + panel.on('click', '.amily2-custom-block-row .mb-edit', function () { + opt_showCustomBlockModal(panel, $(this).closest('[data-id]').attr('data-id')); + }); + + panel.on('click', '.amily2-custom-block-row .mb-delete', function () { + const row = $(this).closest('[data-id]'); + const id = row.attr('data-id'); + const block = getCustomBlock(id); + if (!confirm(`确定删除记忆块 "${block?.name || id}"?`)) return; + deleteCustomBlock(id); + opt_renderCustomBlocks(panel); + toastr.success('记忆块已删除。'); + }); + + panel.on('change', '.amily2-custom-block-row .mb-enabled', function () { + const id = $(this).closest('[data-id]').attr('data-id'); + updateCustomBlock(id, { enabled: this.checked }); + }); +} + export function initializePlotOptimizationBindings() { const panel = $('#amily2_plot_optimization_panel'); if (panel.length === 0 || panel.data('events-bound')) { @@ -1079,6 +1268,7 @@ export function initializePlotOptimizationBindings() { }); opt_loadSettings(panel); + bindCustomBlockEvents(panel); bindJqyhApiEvents(); bindConcurrentApiEvents(); bindConcurrentPromptEvents(); diff --git a/ui/profile-slider-guard.js b/ui/profile-slider-guard.js new file mode 100644 index 0000000..0267029 --- /dev/null +++ b/ui/profile-slider-guard.js @@ -0,0 +1,62 @@ +/** + * ui/profile-slider-guard.js — profile 压制提示(T-006) + * + * v2.2.0 起 profile 一旦分配即权威:模块面板上的温度 / maxTokens 等参数控件 + * 不再影响请求,但控件本身仍可操作——用户改了没效果,是个陷阱。 + * + * 本模块提供统一的"informational 化"处理: + * - slot 已分配 profile → 控件 disable + 半透明,旁边插入提示行 + * "当前由连接配置「xxx」控制,请在 API 连接配置面板修改" + * - 未分配 → 恢复可用、移除提示(legacy 字段路径仍然生效) + * + * 用法(各面板绑定初始化时调用一次): + * watchProfileSliderGuard('cwb', ['#cwb-temperature', '#cwb-max-tokens']); + * + * 刷新时机:立即执行一次 + 监听 ApiProfileManager.setAssignment 派发的 + * 'amily2-profile-assignment-changed' 事件(只响应本 slot 的变更)。 + * 面板内容是惰性挂载的,apply 对找不到的元素静默跳过,可安全重复调用。 + */ + +import { apiProfileManager } from '../utils/config/ApiProfileManager.js'; +import { escapeHTML } from '../utils/utils.js'; + +const HINT_CLASS = 'amily2-profile-guard-hint'; + +/** + * 按当前分配状态套用/解除压制提示。无状态,可重复调用。 + * @param {string} slot - ApiProfileManager.SLOTS 中的功能槽名 + * @param {string[]} selectors - 受 profile 压制的输入控件选择器列表 + */ +export function applyProfileSliderGuard(slot, selectors) { + const $els = $(selectors.join(', ')); + if ($els.length === 0) return; // 面板尚未挂载 + + const profileId = apiProfileManager.getAssignment(slot); + const profile = profileId ? apiProfileManager.getProfile(profileId) : null; + + // 提示行挂在第一个控件所属的块级容器之后;先清旧的再按需重建,避免重复 + const $anchor = $els.first().closest('div, label'); + $anchor.parent().find(`.${HINT_CLASS}`).remove(); + + if (profile) { + $els.prop('disabled', true).css('opacity', '0.5'); + $anchor.after( + `
` + + `` + + `以上参数当前由连接配置「${escapeHTML(profile.name || profileId)}」控制,请在 API 连接配置面板修改。` + + `
` + ); + } else { + $els.prop('disabled', false).css('opacity', ''); + } +} + +/** + * applyProfileSliderGuard + 订阅分配变更事件。各面板初始化时调用一次。 + */ +export function watchProfileSliderGuard(slot, selectors) { + applyProfileSliderGuard(slot, selectors); + document.addEventListener('amily2-profile-assignment-changed', (e) => { + if (e.detail?.slot === slot) applyProfileSliderGuard(slot, selectors); + }); +} diff --git a/ui/profile-sync.js b/ui/profile-sync.js index 5664ffb..f9a3bc0 100644 --- a/ui/profile-sync.js +++ b/ui/profile-sync.js @@ -210,7 +210,15 @@ function _snapshotLegacyFields(slot, config) { function _fillLegacyFields(config, profile) { for (const [key, sel] of Object.entries(config.fields || {})) { const el = document.querySelector(sel); - if (el) el.value = profile[key] ?? ''; + if (!el) continue; + const value = profile[key] ?? ''; + // select 赋不存在的 option 值(如 provider 'custom_oai' 写进只有 + // custom/google_direct 的 select)会让 value 静默变 '',后续任何 + // 全量保存会把 '' 污染进 settings——跳过这类赋值,保留原选项 + if (el.tagName === 'SELECT' && ![...el.options].some(o => o.value === value)) { + continue; + } + el.value = value; } if (config.keyField) { const keyEl = document.querySelector(config.keyField); @@ -284,11 +292,22 @@ function _injectCard(slot, profile, _config, container) { ), ].join(''); + // Key 是设备本地存储(ApiKeyStore 不跨设备同步),profile 随云端设置同步而来 + // 时本设备可能没有 Key——明确提示,否则用户只会在调用时收到"Key 未提供"报错 + const needsKey = profile && !['sillytavern_preset', 'sillytavern_backend'].includes(profile.provider); + const keyWarnHtml = (needsKey && !profile.apiKey) ? ` + + 本设备无 Key + + ` : ''; + const detailHtml = profile ? ` ${providerLabel ? ` ${_esc(providerLabel)}` : ''} ${profile.model ? ` · ${_esc(profile.model)}` : ''} + ${keyWarnHtml} ` : ` 未分配时该模块不会继续展示/保存独立 API 输入项。 diff --git a/utils/auth.js b/utils/auth.js index c20d8a2..28adac8 100644 --- a/utils/auth.js +++ b/utils/auth.js @@ -1 +1 @@ -const a0_0x250773=a0_0xabc1;(function(_0x33dede,_0x232ceb){const _0x3349c2=a0_0xabc1,_0x53e5f5=_0x33dede();while(!![]){try{const _0xb41baa=parseInt(_0x3349c2(0x20a,'JJvz'))/0x1+-parseInt(_0x3349c2(0x244,'E9j5'))/0x2*(-parseInt(_0x3349c2(0x19e,'hCFT'))/0x3)+-parseInt(_0x3349c2(0x1ce,'H8jX'))/0x4*(-parseInt(_0x3349c2(0x345,'l5Ju'))/0x5)+parseInt(_0x3349c2(0x348,'zii!'))/0x6*(parseInt(_0x3349c2(0x339,'TfFd'))/0x7)+parseInt(_0x3349c2(0x15e,'zii!'))/0x8*(parseInt(_0x3349c2(0x2d5,'1Yaf'))/0x9)+parseInt(_0x3349c2(0x2c3,'^5&D'))/0xa+-parseInt(_0x3349c2(0x25b,'jRJ&'))/0xb;if(_0xb41baa===_0x232ceb)break;else _0x53e5f5['push'](_0x53e5f5['shift']());}catch(_0x5ade1f){_0x53e5f5['push'](_0x53e5f5['shift']());}}}(a0_0x2df8,0xb3c61));import{extension_settings}from'/scripts/extensions.js';import{saveSettings,extensionName}from'./settings.js';import{updateUI}from'../ui/state.js';const a0_0x26f265={};a0_0x26f265[a0_0x250773(0x17b,'0BkO')]=![],a0_0x26f265[a0_0x250773(0x271,'P!Ag')]=![];export const pluginAuthStatus=a0_0x26f265;const a0_0x4c1c7b=a0_0x250773(0x1a1,'AN*5'),a0_0x84ae6=a0_0x250773(0x2f9,'LZID'),a0_0x3308f0={'expiryDate':new Date(a0_0x250773(0x27c,'JJvz'))};function a0_0x2df8(){const _0x2f043f=['rmkuW4O4W4j3','tw3dJ8o4W5K','i8oYhdTyfHJcLY3dSG','W4u7imor','WRvKWP3cRKu','v8khy2at','ySo4jM5Ga8kIgJjD','hmkvumkBWQneqmoxtaVdKq','W5XZWPHi','WQG5dxddJdS','W7v5WRNdJmk2W7G','C8kpsMKy','WOiUW7JdHNK','eCkjW7JdGCo2dGS','gmoapmkU','W7/dP8k8WPG4','WQqAW7FdOezzca','DSkaW6xdMIC','W5mEc8oRW5G','57oQ57ID57Ur5OQM5lMy77YR5OMQ5P6Z5P2D6zQt5PQ85PsX5PAs5zUM44kv','WRVcN8ogWOpcQG','vNXyWOhcGa','sSkPWRldHmk3','qSk1WQ4jWQdcMCoBh3VcLG','F8o2W5yYW6W','W4ddJcddImkv','F8knWOS1WOhdH0xdRa','leZcISktW4GuW4xcM8oih8kPWPpcGt8HWPaoyq','WPuuACk9WP4','iwZdMYhcSq','WR5uWRJcVhTfWOTZD0K','WQXeWRJcNwbsWO8','ymkZWONdHCktnmk7tSkhb3H+WPuaW7bFkCkW','p8kuW4SbW5VdJGxdOZGSz8k9cIVdUr4m','s8kjWPirWOO','W7VdPmk/WQqh','DqFdH8ohWPC0aG','W7nmsmkBW7pdHmol','vSkFW6ddPK0','d8kFW7NcHG','W4jeWRjvpq','W6FdGc3dTSkc','W5icWQ7dOZffWPyg','W50xoYtdLG','W6BcQ2/cTGS','W5GPpCor','vwxdQSomW7i+rqFcJq','FH9Ur8oCW6BdL8k0W6a5WOfTW7tcQ1fi','DfHsW44','W6pdJspdLCkp','E8o5b1fy','sCkmW7ZdVra','toExKUAkP+AEQEMBSow2MoIHP+AzK+AwJEEKMoEwJUodVG','ASkbqmkUW4q','WPzkWRldQaa','W4/dSCkfWQaEW718WPbEla','W5ddQWJdJmkU','emkSW5BcGCoNW7hcOmo/pXXDAmkCBmoeuG','WRBcJCohWPxcHq','W5NdRmkbWOayW6fv','cmkasmk0WQi','xMnYW65j','WROrqCkNWOhcISoN5y6QWRP56z+o6BIO5yQL5PAQ55Am5OUz5l+S5OcR5AwA6lE1aa','hgddVbFcKa','C2FdISo5W4m','xYpdNmoIWQy','exRcSmkwW7S','zSkJv2W','W6j6fCoiWPa','WPiyW7BcM8o8','W6y4W7lcVLK','W4vrWPNdMSk4','uCoYW406W44','W617ESkKW6tdL8olsmoibsRcLKrI','W7NcGwVcSIZcUmk/','asLks8o/','rSk6swOW','5l2R6icB5BEf5PEf5zIQ5O+r5P2S','WRrBW4VdKZG','WP1MWOZdUqq','C3hdGSoaW68','W4q9WRVdMmknW7CLwr/cIwnmt8o9WPnjW50g','qgmYWQX5WPFdN10JWQ4','W6KGlCk9WQi','WOldKCoblCohW6RdG3yheW','DWddVmoDWOi','ASk7uSkxW40','ovhdKsRcRa','F1WqWQfv','EmkTW5dcNmop','W4yOj8oA','mLlcHCk8W5bOxeDTWQBcIdxdLq','W4rbt8klW6y','WRXFW4/dOI8','tCkaW5y7W4m','WOxcPSoUWOdcVq','hSkivmk0WQrnsa','W77cS3FcVq4','WRG9d0ddGdP/W7LpWR9g','W4qDW7tcRxG','W4BcHCkgvCoCW47dPq','dNuYWQjJWP7cQow9UUwiI+AnI+ACSUADR+AxGUADLoIhNCokW5a','dmohdCkzhW','W655c8o4WRW','W4O3W4pcR24','vGddN8ouWOfAWRRdHSksd8kOWRRdJfP0W4jnja','WOmVW4NcUSoW','WPioW7RdSh8','WRTQWPFdJdC','kwfFW6VdQSoJW40','bCo4W4ldNK3dGHGyWPZcV8oHW6hcOwFcOhVcImoeiW','gCkrsSkcWRTnx8o9sa3dHG','a3ddGbBcMa','W7H6WQNdRCkg','WOz3W5xdJbRdVSkTW63cQmoAoX3dRISPhSk4WRS','d8k0yCkUWQu','WO5VWQ/cTw/dMmoNWO7cGG','aCohbCkEoa','WOzGWQpcUfe','WRBcPmoeWRNcLCkIW54wW6ddLNBdQZu','h8kvW73cJW','rhTdWRRcGdXc','wmkIW4xdM0pdNb1CW7pdUW','W4/dHSkbWO4C','ESkRW7CSW70','e8oxomkIdgBdTmkzeJC','s8k2W5/dNXrOnIPCW77cO8k7W53cTamT','WPeGwg3cJM/dMthdMG0aoSocWQnQWOVcKCoZW6/dGfTMuJf7','W6mdmCkzWQy','vCktWPpdOmkY','W4vLWOnVoSohxa','d0BdVtxcIq','WQOWfhJdHdftW7XpWRrkWPpcLIddOmkhW6eL','W4TuWRBcOGOCte3dNtjmw8kEWOGYd0VcUSosWQxcIXeeWOmJbsxcKNHViYH1talcHJpcT8oPW5lcQ0xcNhOfkKhcOSkRkSoVt2yiBSkfWRVcKSoKW6vrWQXNWRqPW7TcW5FdPCkFWPpdJCkIxSofW7qpW5fUc35q5O+o5PYY5P2G5Psf5P2TFq0','W51PW53cQZ0','W58/iComW5JdTsi','wmk7AeCN','W5PmxCktW5a','zSkCW7iJW4W','WOuYW6xcQCoD','W45Ka8o+WQS','qwmRWOP7WPFdUW','fmkkW6hdI8oe','W5n9v8kMW5G','ohhdQIFcIW','WPP2W5/dLGO','tSkWW4/cK8oPW7BcKCkKobvvEmk2A8opvCoitq','vSo5m1DL','xCkbWOOzWOi','W4lcGCkaCG','aSoabmkKhx7dNmkDiJpcN1BdQdxcLSkqWRLV','n8khW4tdQSoj','uSkuWPFdP8kl','W4awW6P9W44','W4/dSCkfWQaEW6fl','WRLpWPxdRt4','D1jvW5HjDCkk','q3f7WPZcLZHdW5VcVXldQrFcQGxdIaqGWPC','DG7dHSoPWOO/mhjsWR3cOHVdKmknk0S','WPj7WOpcTK4','ACkqWO8uWPZdI3pdVNS1','zSonW68mW5G','W5K2W5hcINS','cqbGFCoD','W5bGgSo+W5tdH8oJBCkwp8oqWRtdNh0','W452W7hcPINdGCkAWOBdLSoH','WQKmDe/cQa','W748iCo2W58','sSkYW4xdULJdIXK','W5lcHCkgvCoCW47dPq','FCkwW6eVW60','WPy4wmk9WPS','F8kDWPWEWOVdGuq','W58amCogW4a','WP1MWQBcN2q','c3PEWOxdLdPdW5/cIadcOfdcMatdJGvJWOncsmkJWPtdPCoOkmotzuhdO2D0A2WgtSoCW6CoW7TgwJNcJCo1ur96WR3cVSk1pdS9ECkUpY1kAfZcIay6xmonm8odvbZdVSklWQldPLRcGhTe5OYV5P2X5BAg6l6l5PYqFsG8oaVcGa','emkNW43dPmow','W6zqWP9taW','rmkBWPhdPCks','WQK1bNhdJdm','W5eaWP3dHCku','sKBdS8oLW4q','uCkeu8kIW5u','tCk5W47cVmoVW63cVmkH','W6eXWRpdOmkJ','W7KEmSkPWPi','yXRdG8oNWPe0cW','WRRcQSoEWRi','oSowkCk/ea','WQCvW7tdGwq','WR5aWR/dQJy','lG5/W5TqF8kyW6W','oCkTW6hdOCoUeLtLJ61oW6ROPRlLJB3MN6tPQz7MN5ZMNjpLS7ZNPRemWRu','WQxcKNRcIthcU8kR','F8knWOS0WPRdL1O','r8kdsCk8WRPeeUw/NEwjPoApOUAFOoAFIoAvQEADToIeKSkjWQK','c8kFW6tcO8oud8kH','W4WmW41cW5S','W5jWF8kwW7q','y8kNsg0dqMpdJNVcRG','sLygWPPD','WPWSxhtcJZdcKG','mG5SBCowW6RdISoQW6C7WOu','FdpdGrJcKmkvW6RdJa','wSkVW57dKbj0adfAW64','z8owW68SW7dcTCkbnXZdI8k8','W6KxW77dRcehWQryC1rpWOu','d8kjvmk4','v8k1WRCVWQlcMCo/','5O665P2f56gE5PsJ5Pwh5OUK5P6B5yQi5zIU6lYD5O+u5Awx6lAV','DmkRxCkmW6eDW4X3lSkQ','W4m3WOpdVSkAW7mK','W6/cLM3cLcO','WQaccSokWRtcKCo+W4FdO8ose8ks','W4/dSCkfWQaEW6fC','W7ZdP8kHWQCg','WOqDW6tcPmo+','W4CjW7BcUCklwKLsW7BcIuBdJxCvySoJWPFcO8oP','yCkzW4hdIxG','W6hdP8krWQyi','W5y7istdU8k1WO4','W45rDCk9W7u','sCk7W4tdLexdGcTtW6xdUSkZWP7dTt7dSd4','p2FcHCkcW4y','WRS4xvJcRW','WOW2WP7dGCooW7uLxsJcMYOlFCo8WPviWP4swviVW5/cVfFcMMxcPWRdHN5myh8dCCowW6DblNjznSkvWQVdHaapumk5d0hdSIBcUmkNeCoEcmkyomk/sSojoMFdTmk0uCoVE8kjW7vVWRJdGCoeeEAnJoACLow2GoI/QEADGLdcUmkjWP0iWQ0','5Q2f5Psb5O6x5P645R6y5REM5OUc5yUq776A5PYB5PwG5P2+6iAqb2y','W5fvWQz0aa','W6hdPIldR8kD','l35QW43dQq','WPLhWQFcUK0','WQW6dfZdQW','WP1zWQ/dPZ5oWPnEnW','jCofWPudWOJcMSonoutdMCoRqthcIfi2W4G','CfrqWR3cLG','W44BW4TKW51Ara','s8kIWPGZWOW','W6jCWPpdJmkN','W7nEWRFdRSkT','xmkLWQesWOW','v8o+W54BW4S','c0BdVIlcUW','W51/x8kJWOZcN8k5y8oTECk3W5dcSJRcHmoolwrl','yXRdG8oNWPe0ha','rCkuW5uHW5fGW5C5wCo+','AmkHrmkg','W7yVgCkE','cgbtW7NdUa','xCk9W7lcSSoV','pvxcI8kCW44iW7pcGmoydW','ke/cTSkNW64PW67cImoubCkM','W6zYWPbeiG','cmkvumkuWQjnqq','WOj0W6ZdHbddSCkEW73cN8oEpsFdKZaVeG','WRW7vvRcQq','WO8uBCkhWQq','W51MW6JcOtddLSk6WOJdLSoO','B3JdGmoWW7O','W6VdPmkCWQuvWRBLJ48','zCkNWP4RWQO','xmkVW4hdML7dIXa','iKFdVW3cSW','WOHNWR3dGCkJWRNdKEw+TowkTEAoNoACP+AET+AuPEADOEIeNCo0FG','eCoommkPeG','W6q2g8kzWRldGSkg','WPypcKRdQa','sCkNAe0b','emkjW6hdP8o0dI9UDSkN','WRJcRmoWWOtcGG','WReVW6NcUmoP','W4SXiqG','x3bXWOBcHW','ACkqWO8uWPZdL1m','W4rLWPPjomohEg8fW6a','kMHNWPHRgtldJ2qWWPvlWQqpWRS6','mSkYr8khWPC','WRy2z27cIa','WO51iCosW5JdVIVdQ8oYWOHEW7pcHf8SW6G/W7VcVa','DrldN8oNWPC','W7G4WRNcG1NcV8oHWRtdG8oFjG7cG1v7v8o2W7W','vCkOWRmpWQtcHCowcMRcNG','WQ4UiCo7WQVcHSk0dmoCdG','lgvfW7ddQSo7W4q','W4a+WOldKmkhW7GwxtJcNh5FFCo9WOre','qComW5egW5G','EmkhWRmsWO3dK1VdUKSXjCkKAspcSWTtsa','qwmRWOTGWOFdPfO','W57dNSkDWO86','WQFcSColWQpcHCk1','W5vVgmoSWOm','x1W8WRP2','jmkiW7tdNSoX','W6vNWOrjhW','W5SMW7pcKvq','W4vAnmokWOi','W4a/p8oqW4/dTW7cOCkDW4u','xCkZW57cKq','W4i7istdU8k1WO4','Cmk1W6/dQau','W6SrW7RdPICoW5fDwejgWOzP','WPCobf3dQG','WRuLW4tdJ1a','W4VcOxdcIGG','zCkDW5FcNCoSW6hdVowmPqrz6kEA5y+n5P+P6AUg5P+I5P+L5BkG56AGc8kS','Fmorog9L','WPiNW5RdRxG','x8koW5dcHSo6','qmkpWPtdL8k3','hmkwW6xcJCojbmktWQqiW7ZdLmkJo01RWQm','W6LKvcZcNg40WR9xWRXbWRZcQHG','WRK5pSo7WQ8','WRvPWP/cS3S','r3jcWPtcNtDWW4VcIbBdRY3cLX7dJGG','WPm1qCkHWPVcLSkCkCkcna','W4xcJmkhE8obW4xdL1auewz7w1tdHt1MW5W','WQK5fvBdMtPH','WRytevldVG','d8kFBCkoWPL7wmo8qatdHa','W5jxW53cGby','WRypFmkQW4fivSkDzCkXWQfW','CmkJW5S8W5y','W6qNgJtdNa','W5PNu8kNW4q','W5VdHXldJmkdcCkj','FvjsW6jCD8kc','cSoOW53dUGTRcJS','rmkPWRmd','WOFcImoyWRxcGG','W4i7isNdRSkKWOy','xCkmW5FcHmot','bWntrmo0','WOSbl8ovWP8','nu7cNmkyW5qEW7/cIq','WQBcR8ofWRBcOG','W5epW7PVW5a','WPqFW57dOge','W6fFiSodWPWvzmkkCmkeWOi','W7iRh8k5WRtdGSkp','rmkeW5STW4j2W60','WQqmW6BdQ1HzhW','WPb8W7hdLY0','w1zaWOBcKq','W68ZW4PiW6y','WPzCWPJdJcK','W492W6JcGcVdGCk+','e8obkCkPeNRdLa','hSkFW73cHCowd8kfWQuEW7q','WPeTW7ruW4r3wq','WOTUs8oqW6dcH8ocW6VcKSkTW6mWWPxdVmoPw8kfW7BcHtRdS8o9Bs/cGmkdW5felCopzh8JCHxcSCocoSo2fCoLW5FdT2zMW4T9d8o4WOfFW40tEmoeWOGsWPmuAmk8WPbEdqmgW6xcRh8DmMK0qmkmjhz4jLxcSr3MJO7MNBVMNjFMLO3MNQCCEW','ESoSlgXY','W4H8W5xcMHddT8kNWOddMSoIWO0','W50+W6dcNfuDW4Hcfmota8oVAfddGsG','W6CxWQBdOSk6','W4uBdmk6WPu','ySkkWPuWWQS','W5fzWOddSCkD','W74xW7DfW7G','hSkcvSkYWQq','pmk1W4pcVG','BN/dRmo5W58','tSkWW4/cK8oPW7BcKCkZoG1vASkiASoerq','W7JcPM/cTZ8','W4jvECkbW6u','pw/dJsFcTmkHW5BdMHS0WQBcOLhcPCk0WRjAWR4','A2ZdPSoeW4m','WRirW6ldIKvjhGi','FSknWPisWPJdL37dQ2O9','oCoLpmkAmq','W505W6FcNuG','uh3dPCocW78','W7ZdHa/dOSkd','WPSbpmocWPe','xSkyWRSlWRa','W7rvvSkTW6ZdHmolW6xdO8ompq','uSkkW7VcKmod','gEExV+AkHUAFSoMzVow1NoIJN+AAPoAvOoEKNUExQEodGW','W6pcQmkXCmoa','56YY57Mxba','WPP8WO/dGYO','WQG5dhddMZPfW75lWRu','zCkWugC','W4jtjCoWWOHc5y+G5zow55s5','D8oyW5iRW6K','cCkvsCkYWQbnzCo6taC','fKldLsNcSCk2WRVLJyWZyoMEL+M4PEwiLEAvUUExQEAlT+s/MoAcTowMVoI1LbG','eSkeW5tdGSoA','5P206zQH6kct5Pw45zM5','EmkaW4tdVc4','y8oyW4iSW4VcH8khmq','W6DYWOFcRxL/WPi','WRmZlfhdJW','W5z2W7xcMcO','W7u+cCkkWOK','WRXyWQRdTZC','oh1JWRXTdYhdIa','W6CbWOtdLmkG','eSkaW7NdR8oRbtLVymkVjSoZWORdQCoRWRi','C8k1W78QW5i','W4DYCmklW4u','xSk/WRCd','WRaKkW','WO0qW7BcUCowtfK','W68AkCkXWOO','W5HHWRldLmkv','W7j7bCoMWOy','W7DramoZWPirE8kCvCkcWPnyW5lcQSk/W40pW58','sSk4W77cHCoh','smkNWQGBWP8','h0RdQcJcMW','ECk9W5FcMmoK','Fmk9W4pdThO','x8kpWOWsWR8','W5n+ymkJW6u','W7rvvSkCW6tdHCoNW7RdP8oDpCkmEW','xg9JW6H5','WO4xcwVdPq','W63cTSkOrCoe','56+H57IfrG','W4VdVmkbWQedW7zrWOTplq','WRyUjCofWQG','W48ZW7VcLvKxW4HpbmordSoCEa','W7G8W5ZcQMG','iNfjW5VdKq','DSobW5ywW43cG8kg','ECk2W5VdVs8','lxL1WRDm','WP1iWQNdIJfDWP8','fCkQW6BdO8oJ','lSkFW7xcH8o1','D8kcW5JdTsS','WPBcPSkgWQqnW6HuW48','W5u/jSo7W5JdPIi','zCkRWRxdKCkD','W5SBW5jcW59AyhhdR8o1','y8kQWP/dGCkFkCkx','W7uHiSkJWO/dTmkwWQxcN8kQW7i','5AAdWOpdLCoPtmkKgmorcML+W7GaWOClW6b0W5iZ5PYo5Ps55P6F6isiWOVdOW','ahzZWPTM','fxxcT8ouWQCggaZdKG','W50+W6dcNfuDW4Hcfmota8oVEfddKd9WWRa','q8k1WRCVWQlcMCo/','amoxdCkMkq','mCo6WORcMf0MsxCqW67cO8k7WOldIKzPW51c','W4SFlSk/WQu','W4m9W6i','5AEBeSk5WOnzWR/dOCkOW4ZcM29yWOeSnHBcUSkWg+ACNEAvIEACMEIeI8k9rq','WQKfW6/cVmoDba','W7ldLXZdN8kJ','WOCLW4xdOu0','W4FdK8kwWRav','WQZcRmoRWPRcIa','yCoCW4SqW4NcG8k8mrddIa','WPOnW6VcV8osthrhW6FcKq','WOvRyCkoW5BdKWZcHCkkW4y','WOOjW6JcVSobtwjFW6FcILdcJ24','W5GjbmkyWO0','EmoPp3fLxmoeqtnraZBcLSkXWRVdQmo0W6LZgtzSW5lcNmoqW4KzCKtdQCoCW7RcVv5Pla','ymkBW4FdKrf/w+woVglcQUAGIUA2HUwkJoAnIoACPEw2U+I8UUADVE+8Pow3NoA4G+EsHoACHUwFUEwTJowaN+ocPq','WQ1eWQdcU3vt','W4j1ASkgW5K','5O6Z5P6z5R2Q5RAd5OMT5yQz772O55wJ5OIiWRddQG','W43dMHBdRmkfcCka','lCoUjCkIeMBcGUwmJZTY5QcR5Rw45yQl5O+j5P6N5Bsl6lYq5PYx77+H5BwO5RUu55ob5PYr5z2p5AYK5ycY44o3','u8kKW57dNq','o8k5W7BcUmoW','WRugduVdTW','mg/cJ8k5W7i','W6Gubmo7W5m','ySkUtgyqCLO','xCkCW4JdKf4','W4GQW6xcKK4wW6q','r3jcWPtcNtDWW5/cJGFdTs3cMH7dNGG','vSk6vLez','Dx4SWPbJ','WQO9buZdMt5+W74','W4X6tCkGW4W','mb7cISoYW5iTv28xWRxdVZJcHmkEFfiHWRldHGzJDW','5PYR5yQO5zUR6AIK6k2w6l6K5O6p5Awb6lEg77YE5Bg16kYH5PYP5z686AIu6k2MESknW6y','CCopixnS','W4DXWQtdQCk7WRdcGG','W6a7h8kyWQ/dLCklWQ3cK8kG','bu5+WR5r','fmklW5xcQmoz','W4/dU8khWQyE','W4D4WRNdHmkQWOdcNW','nSk1W6ldMmom','ku9AWPbo','W5OBW4TKW51Ara','W6e8W4xcT3m','AuZdTCo9W4m','q8kGWQ8pWQi','EmkAWOOPWPq','f8kfrSkPWOW','qmk/wSklW5G','W5KsW4PkW4brDNddUCo9WRFdUNjipeu','vwmRWO5GWPZdOKe','w8oljhff','DfGlW5HCFCkDW6G','5R+r5RE55Asu6lsN','WRaIW4hdJNW','vxZdOmolW7ijwq','WPDMyfRcVmoKW5nqW5m6st3dPG','W48AW7JcUuK','yXRdG8oNWPeOk3jtWQW','WONcK8kFFCoeW4FcTUw9TEwiUoApTEADJoACLUAvJoACVUIfMhmV','ASkqW5VcKmoK','iXPHuCoEW7ZdIG','WRaMg8oMWQq','W7/dGc7dPSkz','ySkSu8kkW7a','W4fMWOldH8kz','W6vXWOf3ba','gCkzWOzFWP/dHSovErhdJmkThwBcMae5WO7dSmkaW4HykSkXemoUzCoSW5lcLaNdR1WPbmkTWRFdO2v+yu5tW5RcGmo0C8oMWODwlX1QWRGtW5/dPcJdOt59r8oeW6mTtWJdMxxcSwVdKxhdRmoysCo/kmk4W7OvWQvY5OY35P6k5PYq5Pw35P+6W5pcUW','WOHcWPBdUae','W5P7WQtdHq','eSkaW7NdR8oRbtL7zSk+pmoZWOFdQCo7WRi','W4qRWOFdKG','W4dcHmk6BSoa','W54FW41d','W4DqjmoKWQu','W5T2W6JcJYRdImk/WQVdLSoTWPG','W6q2g8kzWRldNSkMWRBcGSkH','kSkjW5pcOmoX','5OYG5P+H5BAu6l2c5P+O772G6kYt6ysA5PAc5R6q5Rs/','W55cv8kJW4K','WPi/qCkR','W5n4WODppmohqG','uMBdJ8ohW7qBrHxcP3mCWPfwW7JdQSoooSoe','5Q6t5PEf5O235P635R2H5Rwb5OQk5yML77685P2I5PAj5P+t6isbANq','WOG0ECkyWOO','rxTAWPZcGJXMW4RcNH4','W6hcO1dcKqW','W5aujs/dHG','WPGKxhhcLdBcL2RdKHCAFCkgWQn8WO8','W5RdHWVdQSkbcCkTWQnxpq','WPu/zCkDWQlcOmkHl8kon8oW','lMbNWP1WhZC','x2mSWRbUWPxdSW','W41mWQJdUJH2WOPzimoYW5i','5PY65yQ/5zMF6AM/6kY16l6h5O6k5AAp6lEE772/5Bka6k6N5P+v5z2b6AI26k6SymoEga','oh1JWR12hZ4','tCkLW4tdLG','W6hdO8ksWOWj','W4zSWOjbj8omBNOvW7NcHWv+WOjLoI4','y8kZWPxdHSkFhSklt8ki','W6y7e8omW50','W4ilbd/dGq','CCkEW683W6y','iGPVxConW6RdSmoTW6mX','ESkqWROqWRK','Bf9AWPRcMcaD5y2jWQzt5OYv5PYX6AM16k6W5AAl6lwiDa','k8k/D8kj','F8kpW7tdSh0','W75mWPhdJmkn','W4WgW49eW5TAwG','CCkpW7BdNMi','fxBdLHlcTW','WPS7ESk8WPu','WOXGWRldPt0','tdldQSodWOG','zmo4W6e+W40','jmoZftrfh2VdNMRcKxJcIG','WPqLW6hdKgW','E0jsW4nhymkgW7DgW4O','WPGgrM/cHW','bxDTW5JdKW','W6/cNg/cKIRcUmk2','bCokpmkccNRdNq','WPazW4pcKSoD','WRinq1NcKW','W6NdGW7dH8kA','W4ldKqNdQW','W7nsoCo7WPGEsmkyzmkxWOHIW63cSCkQW40p','mK/cI8kr','oGzMzCoi','jbzYvW','CSkTqwC','h8kwW7NcJSoflSkJWQyv','WOK4wxRcLdVcQwVdIb0gdCkyWQLJWOq','DSkVvmkWW6mzW7D3','qxHAWRdcSG','WOq4W4irFCkwauOHW4VcKbXw','v8k1WRCRWRNcKSoMaW','WPzkWRZdOGO','W4tdJqxdPmkB','W5VcJ8kgEq','vSo+ahvD','xCkuW7RdKLK','ymoCW5i2W4VcG8ky','W4zXWR3dJ8k5WRdcPSktWP15','k0hcJCkA','W7DrbCopWR4Jy8klEmknWOa','FmoYla','W6i4nIhdQq','qgveW5PW','56+157Q0WRW','W5JdRmkzWQynW6a','WQFcOmoEWP7cHmkJW6W','d1tdUrdcSq','g2RcJ8kIW60','W5q2lqRdMa','W59QW7xcQHO','u3mRWQTGWOddV1mJWQC','WQecDKtcKq','r8kZWQ3dLmk1','gSkCW73cQCoM','W443W7ZcLW','WQKLkLtdPa','EfziW7rfD8kCW75cW4NcKW','j8kuW7ZdMCoR','sSkNW53dMLG','c8kCuCk6WR9gC8o4saBdISkLFH7cJ8ohW6ddMa','WQOwymk0WOK','nCkgW77dJ8ov','F8kGW7ijW4G','WPHRWRZcGLG','lmkYogX3cSkhua','y8k6WOJdQ8kop8kj','nrDYw8ojW6RdNq','bSodW48mW5fOW709','W7fqWRJdL8kQ','WQqmW6BdQ1Hzca','WOJNLORMIzhMN4BPMQFLTP7OOy/MMzxML4tNP5hNLkZJGOK','W5C7oqldRSk0','WRyTDxxcKq','DCk6qSkkW7KFW6XLmG','WR8RW6dcGSo0','lh1JWRbJdJy','BLHQW4rlC8kdW6HNW4/cGSk9W6pdQCkQvSoIW7K','5P+j6zQ06kk05PEn5zQg','h8kFW6tcRSobhSkP','WRLOWOZdMWq','k2ldMGpcKW','krXMvCou','W5GMWP3dVCkL','yCkBWQC1WR0','p2nrW67dOa','WQ1eWQhcU2jsWQT9D0a','pwxdTHFcLq','orXdqmojW67dGa','jmkKeNfUc8kCdW','W4i3WPRdMmkyW7masd7cHq','smoieCoUW6Czfmk7ua7dGCkkqIy','oCkRW6FcUmoM','WOK4wxRcLdVcQx/dJGWCdCkFWR9MWPpdN8o3','ymkZWONdHCktnmk7wCkfh3HSWQSbW7Tp','W78NW6lcGLS','W4jYWR3dO8kj','CSoRW4WnW4u','EmksW57dGNW','rSkzW4aPW7a','o0xcI8k9W5uFW7C','C2S2WQ92W4dLJAhLKiBNLA4','5As5W5xdNmkcW5P6W4qyW4zlmtRdTGBdS0OSWRbJ5PYC5PAK5P6n6isEfCo3','aCoGWRO+WPVcPSoXha','WPS9cv3dGa','jvpcM8ktW44','W7rFpSoY','d8kGWOpcImkXWQJcSSoKju5ajmkvlmoDeSoDfe3cVgFcMW','eSknW6JdM8o2cHrU','xCkaW58JW4m','xSkeWOeNWPW','W443W6RdJHJdS8kTWRy','W43dMHBdRmkffCkGWRzgnq','ovJcJ8kDW5mFW74','fLjXW7BdPW','ggHsWOhcNt9w','W6exnGtdTW','W64qW6DpW50','WRirW6tdTe9o','mmolmmkDdq','y8kVWPddI8ko','lKxcKSkBW5CFW5pcJSoybG'];a0_0x2df8=function(){return _0x2f043f;};return a0_0x2df8();}export function getPasswordForDate(_0x3a6b62){const _0x4935a0=a0_0x250773,_0x4b8883={'WJcAB':function(_0x55de54,_0x3f5ca8){return _0x55de54(_0x3f5ca8);},'eOtGp':function(_0x19fee6,_0x5e7e08){return _0x19fee6+_0x5e7e08;}},_0x261b99=_0x3a6b62[_0x4935a0(0x281,'jRJ&')](),_0x660696=_0x4b8883[_0x4935a0(0x124,'^5&D')](String,_0x4b8883[_0x4935a0(0x2f5,'0BkO')](_0x3a6b62[_0x4935a0(0x1c8,'9lVc')](),0x1))[_0x4935a0(0x15d,'ncjA')](0x2,'0'),_0x5e34b6=_0x4b8883[_0x4935a0(0x330,'Sg9v')](String,_0x3a6b62[_0x4935a0(0x121,'H8jX')]())[_0x4935a0(0x26c,'Ag9[')](0x2,'0');return _0x4935a0(0x197,'zx*S')+_0x261b99+_0x660696+_0x5e34b6;}export function checkAuthorization(){const _0x286077=a0_0x250773,_0x1cbda1={'cyicE':_0x286077(0x2b8,'5MUw'),'ioMNb':_0x286077(0x329,'&F*G'),'geVTR':_0x286077(0x1b5,'1Yaf'),'QcDWM':_0x286077(0x23c,'jRJ&'),'LSkUE':_0x286077(0x318,'1Yaf'),'UGJBg':_0x286077(0x24e,'UWhv'),'JQEOe':function(_0x47c9d5,_0x53c5f2,_0x43dd57){return _0x47c9d5(_0x53c5f2,_0x43dd57);},'BEEuT':_0x286077(0x295,'P!Ag'),'tWhFV':_0x286077(0x358,']*x^'),'XVZYl':_0x286077(0x2f8,'9bJs'),'EoyGT':_0x286077(0x1f4,'&F*G'),'hnFus':function(_0x2765b8,_0x893110){return _0x2765b8!==_0x893110;},'ELoBH':_0x286077(0x257,'l5Ju'),'NGVAV':_0x286077(0x32a,'Ag9['),'urRgV':function(_0x5472f5,_0x23af92){return _0x5472f5>_0x23af92;},'kGOjT':_0x286077(0x2b0,'@REM'),'caHFo':function(_0x358dc8,_0x471a25){return _0x358dc8!==_0x471a25;},'qhxgW':_0x286077(0x328,'zii!'),'SgsoQ':_0x286077(0x105,'6VBF'),'xInIY':function(_0x1e2ee0,_0x88ab46){return _0x1e2ee0===_0x88ab46;},'FqjhO':_0x286077(0x10a,'8Bg2'),'OEvUT':_0x286077(0x2ee,'(itZ'),'cGzvg':_0x286077(0x1a2,'9bJs'),'OyYhl':_0x286077(0x2d4,'hCFT')},_0x486af6=new Date(),_0x1d95ac=localStorage[_0x286077(0x33e,'XJCy')](_0x1cbda1[_0x286077(0x2d9,'7mLc')]);if(_0x1d95ac){if(_0x1cbda1[_0x286077(0x30b,'mT4#')](_0x1cbda1[_0x286077(0x2fb,'[uKp')],_0x1cbda1[_0x286077(0x2d7,'mT4#')])){const _0x5c3f3f=new Date(_0x1d95ac);if(_0x1cbda1[_0x286077(0x1d7,'R3N5')](_0x486af6,_0x5c3f3f))_0x1cbda1[_0x286077(0xe8,'&F*G')](_0x1cbda1[_0x286077(0x1ec,'UWhv')],_0x1cbda1[_0x286077(0x2e4,'zx*S')])?_0x5ec725[_0x286077(0x27d,'hCFT')](_0x1cbda1[_0x286077(0x232,'(itZ')],_0x2138be):pluginAuthStatus[_0x286077(0x343,'LZID')]=!![];else{if(_0x1cbda1[_0x286077(0x372,'K0j6')](_0x1cbda1[_0x286077(0x263,'E9j5')],_0x1cbda1[_0x286077(0x231,'H8jX')]))return _0x1cbda1[_0x286077(0x15f,'6VBF')];else pluginAuthStatus[_0x286077(0xe9,'e9eI')]=![];}}else{let _0x1a3863='';if(_0x535d8f){const _0x20512b=new _0x1929df(_0x2707a9);_0x1a3863=_0x286077(0x2df,'9lVc')+_0x20512b[_0x286077(0x2cb,'(9P5')]()+_0x286077(0x187,'0BkO');}return _0x286077(0x1d9,'ncjA')+_0x338e7c+_0x286077(0x18d,'0BkO')+_0xf59ffe[_0x286077(0x1d0,'1Yaf')][_0x286077(0x24d,'TfFd')]()+_0x286077(0x36c,'5MUw')+_0x1a3863+_0x286077(0x2e3,'P!Ag');}}else{if(_0x1cbda1[_0x286077(0x30b,'mT4#')](_0x1cbda1[_0x286077(0xfd,'j$(]')],_0x1cbda1[_0x286077(0x174,'e9eI')])){const _0x1dd090=_0x1cbda1[_0x286077(0x2e2,'#Gbl')][_0x286077(0x1c3,'W(QE')]('|');let _0x2bcd82=0x0;while(!![]){switch(_0x1dd090[_0x2bcd82++]){case'0':_0x1d5258[_0x286077(0xea,'j$(]')](_0x1cbda1[_0x286077(0x2b9,'l5Ju')]);continue;case'1':_0x40c1e6[_0x286077(0x158,'jRJ&')](_0x1cbda1[_0x286077(0x11b,'Tldi')]);continue;case'2':_0x273703[_0x286077(0x34e,'UWhv')](_0x4f0af5,_0x1cbda1[_0x286077(0x2e6,'@REM')]);continue;case'3':_0x1705d3[_0x286077(0x2da,'jRJ&')]=!![];continue;case'4':_0x1cbda1[_0x286077(0x194,'vaZs')](_0x3b7f2e,()=>_0x6089f6[_0x286077(0x22d,'0BkO')](),0xbb8);continue;case'5':_0x3b98e2[_0x286077(0x226,'R3N5')](_0x1cbda1[_0x286077(0x2fd,'l5Ju')]);continue;case'6':_0x2a21cc[_0x286077(0x26a,'NCi9')](_0x286077(0x33a,'Ag9[')+_0x1b501b);continue;case'7':_0x153c6a[_0x286077(0x1b9,'vaZs')]=![];continue;case'8':_0x1839ca[_0x286077(0x31f,'(itZ')](_0x1cbda1[_0x286077(0x2db,'UWhv')]);continue;case'9':_0x46bc34[_0x286077(0xe4,'Ag9[')](_0x1cbda1[_0x286077(0x179,'!SIX')]);continue;case'10':return!![];}break;}}else pluginAuthStatus[_0x286077(0x20f,'UWhv')]=_0x1cbda1[_0x286077(0x30a,'l5Ju')](_0x486af6,a0_0x3308f0[_0x286077(0x2b1,'0BkO')]);}if(pluginAuthStatus[_0x286077(0xdd,']*x^')]){if(_0x1cbda1[_0x286077(0x2a5,'H8jX')](_0x1cbda1[_0x286077(0x1c6,'Sg9v')],_0x1cbda1[_0x286077(0x2d3,'K0j6')])){const _0x2e415f=_0x1cbda1[_0x286077(0x1c2,'dAsl')][_0x286077(0xef,'1Yaf')]('|');let _0x139411=0x0;while(!![]){switch(_0x2e415f[_0x139411++]){case'0':localStorage[_0x286077(0x34c,'Sg9v')](_0x1cbda1[_0x286077(0xf8,'0BkO')]);continue;case'1':console[_0x286077(0x169,'^5&D')](_0x1cbda1[_0x286077(0x359,'P!Ag')]);continue;case'2':localStorage[_0x286077(0x36e,'E9j5')](_0x1cbda1[_0x286077(0x272,'emVL')]);continue;case'3':sessionStorage[_0x286077(0x1eb,'&F*G')](_0x1cbda1[_0x286077(0xe2,'6VBF')]);continue;case'4':localStorage[_0x286077(0x291,'W(QE')](_0x1cbda1[_0x286077(0x332,'(9P5')]);continue;}break;}}else _0x22e799[_0x286077(0x2bd,'JJvz')](_0x1cbda1[_0x286077(0x378,'LZID')],_0x213a3c);}const _0x434d15=_0x1cbda1[_0x286077(0x2b2,'&NS@')](localStorage[_0x286077(0x102,'H8jX')](_0x1cbda1[_0x286077(0x234,'LZID')]),_0x1cbda1[_0x286077(0x249,'LZID')]);return pluginAuthStatus[_0x286077(0x298,'zii!')]=_0x434d15&&!pluginAuthStatus[_0x286077(0xe9,'e9eI')],pluginAuthStatus[_0x286077(0x37a,'(itZ')];}function a0_0xabc1(_0x564abc,_0x353283){_0x564abc=_0x564abc-0xdb;const _0x2df870=a0_0x2df8();let _0xabc1a6=_0x2df870[_0x564abc];if(a0_0xabc1['BQhzBb']===undefined){var _0x253e41=function(_0x2bc776){const _0x35569a='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x27ca5f='',_0x2ca035='';for(let _0x468c5f=0x0,_0x1f8a07,_0x320d99,_0xb6be7f=0x0;_0x320d99=_0x2bc776['charAt'](_0xb6be7f++);~_0x320d99&&(_0x1f8a07=_0x468c5f%0x4?_0x1f8a07*0x40+_0x320d99:_0x320d99,_0x468c5f++%0x4)?_0x27ca5f+=String['fromCharCode'](0xff&_0x1f8a07>>(-0x2*_0x468c5f&0x6)):0x0){_0x320d99=_0x35569a['indexOf'](_0x320d99);}for(let _0x135946=0x0,_0x1555a8=_0x27ca5f['length'];_0x135946<_0x1555a8;_0x135946++){_0x2ca035+='%'+('00'+_0x27ca5f['charCodeAt'](_0x135946)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x2ca035);};const _0xedd798=function(_0xc0ae85,_0x162d12){let _0x80d53b=[],_0xa3b684=0x0,_0xf3a1f4,_0x26e859='';_0xc0ae85=_0x253e41(_0xc0ae85);let _0x22f25f;for(_0x22f25f=0x0;_0x22f25f<0x100;_0x22f25f++){_0x80d53b[_0x22f25f]=_0x22f25f;}for(_0x22f25f=0x0;_0x22f25f<0x100;_0x22f25f++){_0xa3b684=(_0xa3b684+_0x80d53b[_0x22f25f]+_0x162d12['charCodeAt'](_0x22f25f%_0x162d12['length']))%0x100,_0xf3a1f4=_0x80d53b[_0x22f25f],_0x80d53b[_0x22f25f]=_0x80d53b[_0xa3b684],_0x80d53b[_0xa3b684]=_0xf3a1f4;}_0x22f25f=0x0,_0xa3b684=0x0;for(let _0x137acd=0x0;_0x137acd<_0xc0ae85['length'];_0x137acd++){_0x22f25f=(_0x22f25f+0x1)%0x100,_0xa3b684=(_0xa3b684+_0x80d53b[_0x22f25f])%0x100,_0xf3a1f4=_0x80d53b[_0x22f25f],_0x80d53b[_0x22f25f]=_0x80d53b[_0xa3b684],_0x80d53b[_0xa3b684]=_0xf3a1f4,_0x26e859+=String['fromCharCode'](_0xc0ae85['charCodeAt'](_0x137acd)^_0x80d53b[(_0x80d53b[_0x22f25f]+_0x80d53b[_0xa3b684])%0x100]);}return _0x26e859;};a0_0xabc1['bXBzGJ']=_0xedd798,a0_0xabc1['hGyutH']={},a0_0xabc1['BQhzBb']=!![];}const _0x4e5e64=_0x2df870[0x0],_0x5247b4=_0x564abc+_0x4e5e64,_0x167a2e=a0_0xabc1['hGyutH'][_0x5247b4];return!_0x167a2e?(a0_0xabc1['wCzjBu']===undefined&&(a0_0xabc1['wCzjBu']=!![]),_0xabc1a6=a0_0xabc1['bXBzGJ'](_0xabc1a6,_0x353283),a0_0xabc1['hGyutH'][_0x5247b4]=_0xabc1a6):_0xabc1a6=_0x167a2e,_0xabc1a6;}export async function activatePluginAuthorization(_0x496aef){const _0x5205d8=a0_0x250773,_0x4a1155={'aRjrz':_0x5205d8(0x165,'Ag9['),'mZcyy':_0x5205d8(0x29a,'[uKp'),'CZnDS':function(_0x5b3879){return _0x5b3879();},'udHrh':function(_0x4f1561,_0x63d82b){return _0x4f1561(_0x63d82b);},'LXrMV':_0x5205d8(0x2b3,'K0j6'),'bdhtT':function(_0x8724){return _0x8724();},'VnTnj':function(_0xd001d0,_0x27d98d){return _0xd001d0!==_0x27d98d;},'UxAhx':_0x5205d8(0x148,'tY^#'),'ihUPg':_0x5205d8(0x173,']*x^'),'LnPLO':function(_0x217056,_0x25620e,_0x1df5d6){return _0x217056(_0x25620e,_0x1df5d6);},'ExpQi':_0x5205d8(0x13f,'XJCy'),'zhERa':_0x5205d8(0x1ee,'LZID'),'bMokm':_0x5205d8(0x1b4,'Tldi'),'UkHbK':_0x5205d8(0x1dc,'Ag9['),'gUQRN':_0x5205d8(0xf4,'(9P5'),'xqEBy':_0x5205d8(0x1f6,']*x^'),'QFHyD':_0x5205d8(0x1f8,'j$(]'),'XeMOt':_0x5205d8(0x21b,'LZID'),'KjgEe':function(_0x3b2ee1,_0x13eb01){return _0x3b2ee1===_0x13eb01;},'tRijq':_0x5205d8(0x161,'vaZs'),'JgYaJ':_0x5205d8(0x220,'@REM'),'WCfRP':function(_0x291edd,_0x3e6433){return _0x291edd!==_0x3e6433;},'mGGdM':_0x5205d8(0x14b,'&NS@'),'dKycr':_0x5205d8(0x1cc,'8Bg2'),'nDAII':_0x5205d8(0x25d,'LZID'),'HXGmN':_0x5205d8(0x276,'8Bg2'),'LfsIf':function(_0x15fc45,_0x13e167){return _0x15fc45===_0x13e167;},'tQRMz':_0x5205d8(0x1ea,'5MUw'),'cPmpS':function(_0x81c1a4,_0x518c96){return _0x81c1a4===_0x518c96;},'VQTpr':_0x5205d8(0x120,'7mLc'),'GnXbt':_0x5205d8(0x2c8,'mT4#'),'AEoqP':_0x5205d8(0x265,'9lVc'),'utIsg':_0x5205d8(0x1c9,'AN*5'),'lmWry':_0x5205d8(0x1b6,'dAsl'),'xiAMx':function(_0x3634dd,_0x406ba2){return _0x3634dd(_0x406ba2);},'zqnud':function(_0x466f33,_0x42eb6f){return _0x466f33===_0x42eb6f;},'XunRj':_0x5205d8(0x185,'XJCy'),'zppKX':_0x5205d8(0x145,'dAsl'),'KsFwX':function(_0x5aec4a,_0x5182fd){return _0x5aec4a+_0x5182fd;},'GfcLf':_0x5205d8(0x221,'&NS@'),'WSscN':function(_0x230337){return _0x230337();},'EIoTY':_0x5205d8(0x34b,'9lVc'),'whtsv':_0x5205d8(0x1cb,'JJvz')};try{if(_0x4a1155[_0x5205d8(0x351,'0BkO')](_0x4a1155[_0x5205d8(0x2ca,'dAsl')],_0x4a1155[_0x5205d8(0x313,'*MCV')])){const _0x52a832={};_0x52a832[_0x5205d8(0x219,'JJvz')]=_0x496aef;const _0x110ae6=await _0x4a1155[_0x5205d8(0x1c1,'#Gbl')](fetch,a0_0x4c1c7b+_0x5205d8(0x273,'&F*G'),{'method':_0x4a1155[_0x5205d8(0x23a,'Ag9[')],'headers':{'Content-Type':_0x4a1155[_0x5205d8(0x2e0,'tY^#')]},'body':JSON[_0x5205d8(0x24a,'Sg9v')](_0x52a832)}),_0x42db7a=await _0x110ae6[_0x5205d8(0x2a7,'hCFT')]();if(_0x42db7a[_0x5205d8(0x18b,'[uKp')]){if(_0x4a1155[_0x5205d8(0x351,'0BkO')](_0x4a1155[_0x5205d8(0x207,'@REM')],_0x4a1155[_0x5205d8(0x285,'JJvz')]))_0x3c6591[_0x5205d8(0x350,'0BkO')]=!![];else{sessionStorage[_0x5205d8(0x299,'zii!')](_0x4a1155[_0x5205d8(0x311,'Ag9[')],_0x496aef),localStorage[_0x5205d8(0x1c0,'*MCV')](_0x4a1155[_0x5205d8(0x1fb,'H8jX')],_0x4a1155[_0x5205d8(0x211,'zx*S')]),localStorage[_0x5205d8(0x131,'(itZ')](_0x4a1155[_0x5205d8(0x2c5,'hNAS')],_0x4a1155[_0x5205d8(0x1bb,'XJCy')]),localStorage[_0x5205d8(0x29e,'1Yaf')](_0x4a1155[_0x5205d8(0x357,'Tldi')],_0x42db7a[_0x5205d8(0x11f,'W(QE')]);if(_0x42db7a[_0x5205d8(0x216,'P!Ag')])_0x4a1155[_0x5205d8(0x2c0,'#Gbl')](_0x4a1155[_0x5205d8(0x2d1,'l5Ju')],_0x4a1155[_0x5205d8(0x324,'E9j5')])?_0x111b44[_0x5205d8(0x1ef,'&NS@')](_0x4a1155[_0x5205d8(0x20d,'LZID')]):localStorage[_0x5205d8(0x242,'[uKp')](_0x4a1155[_0x5205d8(0x32e,'(9P5')],_0x42db7a[_0x5205d8(0x335,'7mLc')]);else{if(_0x4a1155[_0x5205d8(0x1a9,'XJCy')](_0x4a1155[_0x5205d8(0x2e1,'NCi9')],_0x4a1155[_0x5205d8(0x1ae,']*x^')]))localStorage[_0x5205d8(0xf2,'^5&D')](_0x4a1155[_0x5205d8(0x10b,'K0j6')]);else{const _0x15c66a=new _0x573d33(_0x14d64a[_0x5205d8(0x1e7,'j$(]')]);_0x15c66a[_0x5205d8(0xf7,'9lVc')](0x17,0x3b,0x3b,0x3e7),_0x2f3125[_0x5205d8(0x33c,'e9eI')](_0x4a1155[_0x5205d8(0xfb,'9lVc')],_0x15c66a[_0x5205d8(0x228,'NCi9')]());}}localStorage[_0x5205d8(0x191,'W(QE')](_0x4a1155[_0x5205d8(0x117,'(itZ')],_0x4a1155[_0x5205d8(0x204,']*x^')]);if(_0x42db7a[_0x5205d8(0x1af,'#Gbl')]){if(_0x4a1155[_0x5205d8(0x321,'hCFT')](_0x4a1155[_0x5205d8(0x153,'@REM')],_0x4a1155[_0x5205d8(0x106,'8Bg2')])){const _0x3575b6=new Date(_0x42db7a[_0x5205d8(0x203,'*MCV')]);_0x3575b6[_0x5205d8(0x163,'!6Lp')](0x17,0x3b,0x3b,0x3e7),localStorage[_0x5205d8(0x2c4,'UWhv')](_0x4a1155[_0x5205d8(0x305,'zx*S')],_0x3575b6[_0x5205d8(0x137,'(itZ')]());}else return null;}else _0x4a1155[_0x5205d8(0x122,'K0j6')](_0x4a1155[_0x5205d8(0xfa,'NCi9')],_0x4a1155[_0x5205d8(0x275,'*MCV')])?_0x563414[_0x5205d8(0x1b8,'R3N5')](_0x4a1155[_0x5205d8(0x1b7,'AN*5')],_0x33f658[_0x5205d8(0x36f,'Sg9v')]):localStorage[_0x5205d8(0x226,'R3N5')](_0x4a1155[_0x5205d8(0x327,'hCFT')]);const _0x25e061=_0x42db7a[_0x5205d8(0x168,'W(QE')]||_0x42db7a[_0x5205d8(0x218,'hNAS')];return toastr[_0x5205d8(0x1cd,'dAsl')](_0x5205d8(0x1a5,'9bJs')+_0x25e061,_0x4a1155[_0x5205d8(0x262,']*x^')]),pluginAuthStatus[_0x5205d8(0x233,'9lVc')]=!![],_0x4a1155[_0x5205d8(0x286,'8Bg2')](a0_0x350c18),!![];}}}else _0x4a1155[_0x5205d8(0x15c,'9bJs')](_0x3b549a);}catch(_0x12df71){_0x4a1155[_0x5205d8(0x24b,'zx*S')](_0x4a1155[_0x5205d8(0x31b,'ncjA')],_0x4a1155[_0x5205d8(0x189,'[uKp')])?(_0x4a1155[_0x5205d8(0x1de,'!SIX')](_0x3ea31e,_0x4a1155[_0x5205d8(0x186,'9bJs')])[_0x5205d8(0x2a8,'dAsl')](0x190),_0x4a1155[_0x5205d8(0x12d,'mT4#')](_0x20db1e)):console[_0x5205d8(0x1df,'*MCV')](_0x4a1155[_0x5205d8(0x1d4,'^5&D')],_0x12df71);}const _0x13202e=_0x4a1155[_0x5205d8(0x19b,'7mLc')](getPasswordForDate,new Date());if(_0x4a1155[_0x5205d8(0x2d8,'E9j5')](_0x496aef,_0x13202e)){if(_0x4a1155[_0x5205d8(0x1f7,'0BkO')](_0x4a1155[_0x5205d8(0x205,'l5Ju')],_0x4a1155[_0x5205d8(0x2bf,'zx*S')])){const _0x3d2b3a=_0x1d008e[_0x5205d8(0x176,'Tldi')][_0x5205d8(0x1e6,'5MUw')](_0x57f614=>_0xbead4d(_0x57f614)===_0x4ddf(_0x1573db));_0x3d2b3a&&(_0x5b01c5=!![],_0x3fa63e=_0x456500[_0x5205d8(0x14e,'Tldi')]||_0x5205d8(0x22c,'(itZ')+_0x3446c9+_0x5205d8(0x150,']*x^'));}else{const _0x21721d=new Date();return _0x21721d[_0x5205d8(0x24f,'XJCy')](_0x4a1155[_0x5205d8(0x20e,'emVL')](_0x21721d[_0x5205d8(0x24c,'!6Lp')](),0x7)),sessionStorage[_0x5205d8(0x131,'(itZ')](_0x4a1155[_0x5205d8(0x128,'8Bg2')],_0x496aef),localStorage[_0x5205d8(0x11c,'&NS@')](_0x4a1155[_0x5205d8(0x35d,'j$(]')],_0x4a1155[_0x5205d8(0x130,'@REM')]),localStorage[_0x5205d8(0x356,'H8jX')](_0x4a1155[_0x5205d8(0x167,'Tldi')],_0x4a1155[_0x5205d8(0x127,'*MCV')]),localStorage[_0x5205d8(0x22e,'7mLc')](_0x4a1155[_0x5205d8(0xe3,'JJvz')],'1'),localStorage[_0x5205d8(0x2fc,'j$(]')](_0x4a1155[_0x5205d8(0x19a,'0BkO')],_0x21721d[_0x5205d8(0x116,'jRJ&')]()),localStorage[_0x5205d8(0x322,']*x^')](_0x4a1155[_0x5205d8(0x379,'5MUw')],_0x4a1155[_0x5205d8(0x22a,'H8jX')]),localStorage[_0x5205d8(0x341,'JJvz')](_0x4a1155[_0x5205d8(0x261,'ncjA')]),toastr[_0x5205d8(0x326,'e9eI')](_0x5205d8(0x35c,'UWhv')+_0x21721d[_0x5205d8(0x317,'&F*G')](),_0x4a1155[_0x5205d8(0x107,'UWhv')]),pluginAuthStatus[_0x5205d8(0x298,'zii!')]=!![],_0x4a1155[_0x5205d8(0x164,'(9P5')](a0_0x350c18),!![];}}return toastr[_0x5205d8(0x13e,'jRJ&')](_0x4a1155[_0x5205d8(0x309,'Tldi')],_0x4a1155[_0x5205d8(0x325,'5MUw')]),![];}async function a0_0x2fed9d(){const _0x325562=a0_0x250773,_0x1e6454={'WEQUT':_0x325562(0x28d,'JJvz'),'ObKsu':_0x325562(0x113,'!SIX'),'htjJK':_0x325562(0x377,'mT4#'),'FfknY':function(_0xa20838,_0x2e829a){return _0xa20838>_0x2e829a;},'GJgNb':function(_0x4320ef,_0x47b48f,_0x174afe){return _0x4320ef(_0x47b48f,_0x174afe);},'GJpVL':function(_0x382705,_0x42c397){return _0x382705!==_0x42c397;},'ZvNfM':_0x325562(0x30e,'e9eI'),'SzlrU':_0x325562(0x1e3,'XJCy'),'eMPQR':_0x325562(0x1ca,'TfFd'),'jidWs':function(_0x3a504b,_0x12e794){return _0x3a504b(_0x12e794);},'vxEmW':_0x325562(0x1c7,'*MCV'),'ZRbqX':_0x325562(0x2c7,'&F*G'),'JPYMk':_0x325562(0x142,'UWhv'),'dbcig':_0x325562(0x2fa,'vaZs'),'qEIzw':_0x325562(0x255,'emVL'),'wFjka':function(_0x2b9f75,_0x39a3d7){return _0x2b9f75!==_0x39a3d7;},'iOaVD':_0x325562(0x27e,'zii!'),'lHwue':function(_0x238dfb,_0x4fb602){return _0x238dfb!==_0x4fb602;},'vtfjh':_0x325562(0x11a,'H8jX'),'TKhtH':_0x325562(0x26b,'K0j6'),'FcKtK':_0x325562(0x15b,'E9j5'),'JXAlB':_0x325562(0x144,'l5Ju'),'LnyMI':_0x325562(0x141,'K0j6'),'datTV':_0x325562(0x1b0,'&F*G')},_0x35e646=new AbortController(),_0x1a3c32=_0x1e6454[_0x325562(0x364,'&F*G')](setTimeout,()=>_0x35e646[_0x325562(0x28f,'&F*G')](),0x1f40);try{if(_0x1e6454[_0x325562(0x230,'P!Ag')](_0x1e6454[_0x325562(0x290,'[uKp')],_0x1e6454[_0x325562(0x2e5,'8Bg2')])){const _0x4caf58=await _0x1e6454[_0x325562(0x368,'R3N5')](fetch,a0_0x84ae6+_0x325562(0x353,'zx*S')+Date[_0x325562(0x195,'#Gbl')](),{'cache':_0x1e6454[_0x325562(0x13c,'R3N5')],'signal':_0x35e646[_0x325562(0x32d,'6VBF')]});_0x1e6454[_0x325562(0x217,'hNAS')](clearTimeout,_0x1a3c32);if(!_0x4caf58['ok'])return;const _0x5203fd=await _0x4caf58[_0x325562(0x282,'j$(]')](),_0x4f9f79=localStorage[_0x325562(0x365,'*MCV')](_0x1e6454[_0x325562(0x1fe,'e9eI')]);let _0x5df440=![],_0x1e3a07=_0x5203fd[_0x325562(0x239,'TfFd')]||_0x1e6454[_0x325562(0x22b,'TfFd')];if(_0x5203fd[_0x325562(0xf3,'emVL')])_0x1e6454[_0x325562(0x240,'zii!')](_0x1e6454[_0x325562(0x208,'1Yaf')],_0x1e6454[_0x325562(0x1d6,'Sg9v')])?(_0x5df440=!![],_0x1e3a07=_0x5203fd[_0x325562(0x344,'hNAS')]||_0x1e6454[_0x325562(0x139,'(9P5')]):(_0x23efd2=!![],_0x420a05=_0x331ee5[_0x325562(0x2dc,'6VBF')]||_0x1e6454[_0x325562(0x250,'@REM')]);else{if(_0x4f9f79&&_0x5203fd[_0x325562(0x17d,'#Gbl')]&&Array[_0x325562(0x258,'hNAS')](_0x5203fd[_0x325562(0x2f1,'7mLc')])){if(_0x1e6454[_0x325562(0x14c,'^5&D')](_0x1e6454[_0x325562(0x16d,'NCi9')],_0x1e6454[_0x325562(0x2c1,'R3N5')])){const _0x3a0460=new _0x105c44(_0x4a8860[_0x325562(0x314,'0BkO')]);_0x3a0460[_0x325562(0x331,'K0j6')](0x17,0x3b,0x3b,0x3e7),_0x38bc4e[_0x325562(0x242,'[uKp')](oXpaHg[_0x325562(0xed,'LZID')],_0x3a0460[_0x325562(0x347,'ncjA')]());}else{const _0x362b2a=_0x5203fd[_0x325562(0x19f,'zx*S')][_0x325562(0x2f2,'XJCy')](_0x315aac=>String(_0x315aac)===String(_0x4f9f79));_0x362b2a&&(_0x1e6454[_0x325562(0x184,'Ag9[')](_0x1e6454[_0x325562(0x2dd,'#Gbl')],_0x1e6454[_0x325562(0xdc,'e9eI')])?_0x52d81f[_0x325562(0x210,'tY^#')](oXpaHg[_0x325562(0x253,'(9P5')],_0x5f236e[_0x325562(0x288,'tY^#')]):(_0x5df440=!![],_0x1e3a07=_0x5203fd[_0x325562(0x2e9,'jRJ&')]||_0x325562(0x152,'jRJ&')+_0x4f9f79+_0x325562(0x247,'&NS@')));}}}if(_0x5df440){if(_0x1e6454[_0x325562(0x12e,'&F*G')](_0x1e6454[_0x325562(0x14a,'dAsl')],_0x1e6454[_0x325562(0xfe,'#Gbl')]))_0x170f29[_0x325562(0x1a6,'&NS@')]=oXpaHg[_0x325562(0x360,'zii!')](_0x18693f,_0x29e426[_0x325562(0x31a,'e9eI')]);else{const _0x4acaba=_0x1e6454[_0x325562(0x178,'6VBF')][_0x325562(0x23b,']*x^')]('|');let _0x5512bd=0x0;while(!![]){switch(_0x4acaba[_0x5512bd++]){case'0':_0x1e6454[_0x325562(0x366,'e9eI')](setTimeout,()=>location[_0x325562(0x1a3,'zii!')](),0xbb8);continue;case'1':console[_0x325562(0x227,'P!Ag')](_0x325562(0x108,'K0j6')+_0x1e3a07);continue;case'2':pluginAuthStatus[_0x325562(0x346,'9bJs')]=![];continue;case'3':pluginAuthStatus[_0x325562(0x334,'1Yaf')]=!![];continue;case'4':return!![];case'5':toastr[_0x325562(0x33f,'*MCV')](_0x1e3a07,_0x1e6454[_0x325562(0x223,'AN*5')]);continue;case'6':localStorage[_0x325562(0x158,'jRJ&')](_0x1e6454[_0x325562(0x192,'tY^#')]);continue;case'7':localStorage[_0x325562(0x279,'P!Ag')](_0x1e6454[_0x325562(0xed,'LZID')]);continue;case'8':localStorage[_0x325562(0x19c,'ncjA')](_0x1e6454[_0x325562(0x202,'R3N5')]);continue;case'9':localStorage[_0x325562(0x18a,'*MCV')](_0x1e6454[_0x325562(0x2eb,'R3N5')]);continue;case'10':sessionStorage[_0x325562(0x34c,'Sg9v')](_0x1e6454[_0x325562(0x157,'ncjA')]);continue;}break;}}}}else _0x12ca37[_0x325562(0x25a,'(9P5')](oXpaHg[_0x325562(0x2a3,'&NS@')]);}catch(_0x2a3146){}return![];}setTimeout(()=>{const _0x4da9c9=a0_0x250773,_0x4c3d28={'zkVrx':function(_0x5f04d9){return _0x5f04d9();}};_0x4c3d28[_0x4da9c9(0x206,'5MUw')](a0_0x2fed9d);},0x1388);export async function refreshUserInfo(){const _0x494546=a0_0x250773,_0x46c7b0={'FdxVs':_0x494546(0x111,'&F*G'),'IyMER':_0x494546(0x29b,'e9eI'),'UnIQT':function(_0x4d710b,_0x29f204,_0x4366d9){return _0x4d710b(_0x29f204,_0x4366d9);},'lOpMS':_0x494546(0x30c,'K0j6'),'Ruwyg':_0x494546(0x25e,'[uKp'),'vfmCF':_0x494546(0x138,'#Gbl'),'MZObZ':_0x494546(0x10d,'XJCy'),'lubtZ':_0x494546(0x190,'#Gbl'),'BKkEq':_0x494546(0x1e4,'&NS@'),'FEFbf':_0x494546(0xdb,'0BkO'),'hnFMb':_0x494546(0x27a,'E9j5'),'msXHS':function(_0x3b4a60,_0x5423aa){return _0x3b4a60(_0x5423aa);},'bWMdL':function(_0x46f9a9,_0x53423c){return _0x46f9a9+_0x53423c;},'TARtX':function(_0x3b95d8,_0x291432){return _0x3b95d8(_0x291432);},'phXJX':_0x494546(0x18f,'dAsl'),'EJXQd':_0x494546(0x1a7,'tY^#'),'LxeaQ':function(_0x7f7db8,_0x48d2b5){return _0x7f7db8+_0x48d2b5;},'VHClh':_0x494546(0x155,'JJvz'),'IDDjj':_0x494546(0x215,'NCi9'),'PPhuM':_0x494546(0x297,'l5Ju'),'whMUF':_0x494546(0x156,'NCi9'),'xPYYR':function(_0x47f5ee){return _0x47f5ee();},'WxlhE':function(_0xe79112,_0x2393bb){return _0xe79112===_0x2393bb;},'jqgmd':function(_0x1c2bfd,_0x2bb2bd){return _0x1c2bfd===_0x2bb2bd;},'XNpzT':_0x494546(0x14f,'K0j6'),'FoWyA':_0x494546(0x23f,'E9j5'),'ZuzZT':function(_0x43a45a,_0x5e00bc){return _0x43a45a!==_0x5e00bc;},'DDGdu':_0x494546(0x1d2,'K0j6'),'WjrGW':_0x494546(0x200,'jRJ&'),'gaxbl':_0x494546(0xeb,'!6Lp'),'DnhxT':function(_0x106c4e,_0x17b62c){return _0x106c4e!==_0x17b62c;},'QmJmk':_0x494546(0x2c9,'@REM'),'nHxmf':_0x494546(0x1ff,'&F*G'),'foKvQ':function(_0x5b9aee,_0x549863){return _0x5b9aee===_0x549863;},'uJpBI':_0x494546(0x1be,'Ag9['),'Pmbdf':_0x494546(0x375,'j$(]'),'HJIOB':_0x494546(0x363,'ncjA'),'TaAsd':function(_0x5b1be0,_0x2b3183){return _0x5b1be0!==_0x2b3183;},'oZlTZ':_0x494546(0x320,'LZID'),'Lyatn':_0x494546(0xec,'jRJ&'),'wAGAr':_0x494546(0x110,'zii!'),'DUgJU':function(_0x50646b,_0x137ea5){return _0x50646b===_0x137ea5;},'rVVEm':_0x494546(0x23d,'5MUw'),'oDGMn':_0x494546(0x13d,'*MCV'),'DGxdt':function(_0x5cc2ea,_0x274c33){return _0x5cc2ea!==_0x274c33;},'DIcix':_0x494546(0x2ea,'l5Ju'),'IqCXm':_0x494546(0x12f,'*MCV'),'oHQUa':function(_0xfbf437,_0x1b43a3){return _0xfbf437!==_0x1b43a3;},'SqvQJ':_0x494546(0x238,'6VBF'),'qbOSa':_0x494546(0x170,'e9eI'),'KYoDn':_0x494546(0x159,'l5Ju')};await _0x46c7b0[_0x494546(0x342,'9lVc')](a0_0x2fed9d);const _0x2a7f88=sessionStorage[_0x494546(0x34a,'W(QE')](_0x46c7b0[_0x494546(0x361,'6VBF')]);if(!_0x2a7f88)return null;if(_0x46c7b0[_0x494546(0x2c6,'JJvz')](localStorage[_0x494546(0x11d,'TfFd')](_0x46c7b0[_0x494546(0x16c,'R3N5')]),_0x46c7b0[_0x494546(0x32b,'j$(]')])){if(_0x46c7b0[_0x494546(0x136,'AN*5')](_0x46c7b0[_0x494546(0x354,']*x^')],_0x46c7b0[_0x494546(0x1fc,'E9j5')]))_0x529d57[_0x494546(0xe4,'Ag9[')](_0x46c7b0[_0x494546(0xff,'NCi9')]);else return null;}try{if(_0x46c7b0[_0x494546(0x198,'&NS@')](_0x46c7b0[_0x494546(0x340,'Tldi')],_0x46c7b0[_0x494546(0x166,'E9j5')])){const _0xdf854b=_0x46c7b0[_0x494546(0x302,'JJvz')][_0x494546(0x1c3,'W(QE')]('|');let _0x31033b=0x0;while(!![]){switch(_0xdf854b[_0x31033b++]){case'0':_0x1579a1[_0x494546(0x16a,'zx*S')]=!![];continue;case'1':_0x46c7b0[_0x494546(0x2ba,'dAsl')](_0x3391fb,()=>_0x3dada0[_0x494546(0x283,'6VBF')](),0x7d0);continue;case'2':_0x15e678[_0x494546(0x2cc,'9lVc')](_0x46c7b0[_0x494546(0x115,'6VBF')]);continue;case'3':_0x5e08ca[_0x494546(0x34c,'Sg9v')](_0x46c7b0[_0x494546(0xf5,'ncjA')]);continue;case'4':_0x46eab5[_0x494546(0x19d,'zx*S')](_0x46c7b0[_0x494546(0x236,'XJCy')]);continue;case'5':_0x36e31d[_0x494546(0x154,'6VBF')](_0x46c7b0[_0x494546(0x2bc,'P!Ag')]);continue;case'6':_0x58a36d[_0x494546(0x20c,'TfFd')]=![];continue;case'7':_0x2829b6[_0x494546(0x1fd,'hNAS')](_0x46c7b0[_0x494546(0x352,'zx*S')]);continue;case'8':_0x3bec98[_0x494546(0x10f,'^5&D')](_0x46c7b0[_0x494546(0x312,'[uKp')],_0x46c7b0[_0x494546(0x27f,'JJvz')]);continue;}break;}}else{const _0xeae66={};_0xeae66[_0x494546(0x101,'K0j6')]=_0x2a7f88;const _0x5f17f6=await _0x46c7b0[_0x494546(0x289,'0BkO')](fetch,a0_0x4c1c7b+_0x494546(0x33b,'UWhv'),{'method':_0x46c7b0[_0x494546(0x23e,'Ag9[')],'headers':{'Content-Type':_0x46c7b0[_0x494546(0xe0,'tY^#')]},'body':JSON[_0x494546(0x362,'@REM')](_0xeae66)});if(_0x46c7b0[_0x494546(0x26d,'E9j5')](_0x5f17f6[_0x494546(0xf9,'7mLc')],0x191)){if(_0x46c7b0[_0x494546(0x1e0,'NCi9')](_0x46c7b0[_0x494546(0x29d,'0BkO')],_0x46c7b0[_0x494546(0x304,'E9j5')]))_0x5d959a=!![],_0x4cceb0=_0x7d806[_0x494546(0x129,'NCi9')]||_0x494546(0x17a,'&NS@')+_0x492f2c+_0x494546(0x2ae,'XJCy');else{const _0xbaba4c=await _0x5f17f6[_0x494546(0x1a8,']*x^')]();console[_0x494546(0x370,'vaZs')](_0x46c7b0[_0x494546(0x14d,'W(QE')],_0xbaba4c[_0x494546(0x1f2,'9lVc')]);if(_0xbaba4c[_0x494546(0x316,'TfFd')]&&_0xbaba4c[_0x494546(0x301,'hCFT')][_0x494546(0x125,'P!Ag')]('过期')){if(_0x46c7b0[_0x494546(0x1da,'@REM')](_0x46c7b0[_0x494546(0x1ed,'H8jX')],_0x46c7b0[_0x494546(0x338,'@REM')])){_0x41c952[_0x494546(0x1b8,'R3N5')](_0x46c7b0[_0x494546(0x2f6,'E9j5')],_0x4db72a[_0x494546(0x349,'jRJ&')]),_0x462b39[_0x494546(0x2de,'!SIX')](_0x46c7b0[_0x494546(0x369,'W(QE')],_0x46c7b0[_0x494546(0x2cd,'vaZs')]);_0x361042[_0x494546(0x1db,'R3N5')]?_0x5936ca[_0x494546(0x114,'6VBF')](_0x46c7b0[_0x494546(0x30d,'AN*5')],_0x3317c1[_0x494546(0x222,'!SIX')]):_0x4bf2cd[_0x494546(0x256,'zii!')](_0x46c7b0[_0x494546(0x371,'emVL')]);if(_0x5ecd8d[_0x494546(0x180,'ncjA')]){const _0x4cbdef=new _0x36696b(_0x3dde51[_0x494546(0x36d,'1Yaf')]);_0x4cbdef[_0x494546(0x294,'e9eI')](0x17,0x3b,0x3b,0x3e7),_0x5c9c6b[_0x494546(0x12a,'vaZs')](_0x46c7b0[_0x494546(0x2a6,'UWhv')],_0x4cbdef[_0x494546(0x374,'P!Ag')]());}return _0x520b8d;}else{const _0x379d9b=_0x46c7b0[_0x494546(0x1c4,'W(QE')][_0x494546(0x2b6,'jRJ&')]('|');let _0x5bfe3e=0x0;while(!![]){switch(_0x379d9b[_0x5bfe3e++]){case'0':pluginAuthStatus[_0x494546(0x2f4,']*x^')]=![];continue;case'1':localStorage[_0x494546(0x147,'e9eI')](_0x46c7b0[_0x494546(0x2d0,'Sg9v')]);continue;case'2':toastr[_0x494546(0x1bc,'0BkO')](_0x46c7b0[_0x494546(0x2c2,'ncjA')],_0x46c7b0[_0x494546(0x36b,'l5Ju')]);continue;case'3':localStorage[_0x494546(0x34c,'Sg9v')](_0x46c7b0[_0x494546(0x308,'Ag9[')]);continue;case'4':pluginAuthStatus[_0x494546(0xe1,'vaZs')]=!![];continue;case'5':_0x46c7b0[_0x494546(0x17e,'#Gbl')](setTimeout,()=>location[_0x494546(0x248,'H8jX')](),0x7d0);continue;case'6':localStorage[_0x494546(0x100,'hCFT')](_0x46c7b0[_0x494546(0x162,'@REM')]);continue;case'7':localStorage[_0x494546(0x19c,'ncjA')](_0x46c7b0[_0x494546(0x319,'zii!')]);continue;case'8':localStorage[_0x494546(0x1fd,'hNAS')](_0x46c7b0[_0x494546(0x292,'ncjA')]);continue;}break;}}}return null;}}const _0x4fa744=await _0x5f17f6[_0x494546(0x214,'&NS@')]();if(_0x4fa744[_0x494546(0x1d3,'hNAS')]){if(_0x46c7b0[_0x494546(0x143,'Tldi')](_0x46c7b0[_0x494546(0x1aa,'6VBF')],_0x46c7b0[_0x494546(0x28e,'7mLc')])){const _0x1a0830=_0x320d99[_0x494546(0x1e1,'(itZ')](),_0x2aa01c=dBixxI[_0x494546(0x254,'e9eI')](_0xb6be7f,dBixxI[_0x494546(0x1bf,'!6Lp')](_0x135946[_0x494546(0x21f,'W(QE')](),0x1))[_0x494546(0x21c,'Sg9v')](0x2,'0'),_0x37abcd=dBixxI[_0x494546(0x1a4,'Tldi')](_0x1555a8,_0xc0ae85[_0x494546(0x188,'hCFT')]())[_0x494546(0x1b3,'6VBF')](0x2,'0');return _0x494546(0x284,'R3N5')+_0x1a0830+_0x2aa01c+_0x37abcd;}else{localStorage[_0x494546(0x287,'Ag9[')](_0x46c7b0[_0x494546(0x306,'NCi9')],_0x4fa744[_0x494546(0x1dd,'(9P5')]),localStorage[_0x494546(0x1f5,'!6Lp')](_0x46c7b0[_0x494546(0x1c5,'jRJ&')],_0x46c7b0[_0x494546(0x293,'&NS@')]);if(_0x4fa744[_0x494546(0x2aa,'TfFd')]){if(_0x46c7b0[_0x494546(0x1fa,'hCFT')](_0x46c7b0[_0x494546(0x336,'tY^#')],_0x46c7b0[_0x494546(0x209,'ncjA')]))localStorage[_0x494546(0x34d,'(9P5')](_0x46c7b0[_0x494546(0x371,'emVL')],_0x4fa744[_0x494546(0xe7,'H8jX')]);else{const _0x1e1d30=_0x46c7b0[_0x494546(0x15a,'Ag9[')][_0x494546(0x278,'[uKp')]('|');let _0xfd6a91=0x0;while(!![]){switch(_0x1e1d30[_0xfd6a91++]){case'0':_0x5c69a4[_0x494546(0x291,'W(QE')](dBixxI[_0x494546(0x2d2,'9lVc')]);continue;case'1':_0x290616[_0x494546(0x229,'AN*5')](dBixxI[_0x494546(0x175,'Tldi')]);continue;case'2':_0x170f87[_0x494546(0x341,'JJvz')](dBixxI[_0x494546(0x1ab,'P!Ag')]);continue;case'3':_0x379374[_0x494546(0x133,'XJCy')](dBixxI[_0x494546(0x25f,'#Gbl')]);continue;case'4':_0x12dbbb[_0x494546(0x18a,'*MCV')](dBixxI[_0x494546(0x21d,'&F*G')]);continue;}break;}}}else _0x46c7b0[_0x494546(0x13a,'vaZs')](_0x46c7b0[_0x494546(0x2ad,'9bJs')],_0x46c7b0[_0x494546(0xde,'l5Ju')])?_0x474282[_0x494546(0xdd,']*x^')]=![]:localStorage[_0x494546(0x280,'AN*5')](_0x46c7b0[_0x494546(0xfc,'Ag9[')]);if(_0x4fa744[_0x494546(0x29f,'Tldi')]){if(_0x46c7b0[_0x494546(0x36a,'ncjA')](_0x46c7b0[_0x494546(0x274,'H8jX')],_0x46c7b0[_0x494546(0x37b,'dAsl')])){const _0x122994=new Date(_0x4fa744[_0x494546(0x12c,'8Bg2')]);_0x122994[_0x494546(0x146,'8Bg2')](0x17,0x3b,0x3b,0x3e7),localStorage[_0x494546(0x376,'jRJ&')](_0x46c7b0[_0x494546(0x2af,'Sg9v')],_0x122994[_0x494546(0x1f0,'5MUw')]());}else{const _0x217987=new _0x5a58fa();return _0x217987[_0x494546(0x183,'@REM')](dBixxI[_0x494546(0x303,'Tldi')](_0x217987[_0x494546(0x2e7,'emVL')](),0x7)),_0x3cd5a1[_0x494546(0x2b5,'0BkO')](dBixxI[_0x494546(0x260,'R3N5')],_0xe80af6),_0x4d138f[_0x494546(0x2f3,'&F*G')](dBixxI[_0x494546(0x2d6,'Tldi')],dBixxI[_0x494546(0x151,'!SIX')]),_0x3ae198[_0x494546(0x356,'H8jX')](dBixxI[_0x494546(0x35e,'&NS@')],dBixxI[_0x494546(0x367,'R3N5')]),_0x17f988[_0x494546(0x225,'ncjA')](dBixxI[_0x494546(0x28b,'9bJs')],'1'),_0x7463cd[_0x494546(0x307,'9lVc')](dBixxI[_0x494546(0x32f,'dAsl')],_0x217987[_0x494546(0x18c,'vaZs')]()),_0x2c6f63[_0x494546(0x1b8,'R3N5')](dBixxI[_0x494546(0x17f,'emVL')],dBixxI[_0x494546(0x10c,'[uKp')]),_0x27dffd[_0x494546(0x112,'5MUw')](dBixxI[_0x494546(0x277,'tY^#')]),_0x14eb91[_0x494546(0x12b,'E9j5')](_0x494546(0x1e9,'P!Ag')+_0x217987[_0x494546(0x310,'tY^#')](),dBixxI[_0x494546(0x2ef,'tY^#')]),_0x1fc3c8[_0x494546(0x373,'P!Ag')]=!![],dBixxI[_0x494546(0x333,'vaZs')](_0x270b19),!![];}}return _0x4fa744;}}}}catch(_0x265a76){if(_0x46c7b0[_0x494546(0x2a0,']*x^')](_0x46c7b0[_0x494546(0x1d8,'j$(]')],_0x46c7b0[_0x494546(0x2cf,'1Yaf')]))console[_0x494546(0x30f,'!SIX')](_0x46c7b0[_0x494546(0x212,'LZID')],_0x265a76);else{const _0xe3f61=new _0x21209b(_0x5e080e);_0x3838ed=_0x494546(0x33d,'jRJ&')+_0xe3f61[_0x494546(0xf6,'e9eI')]()+_0x494546(0x2a4,'@REM');}}return null;}function a0_0x350c18(){const _0x490f99=a0_0x250773,_0x4016fe={'tDEss':function(_0x2b7c25,_0x43005d){return _0x2b7c25(_0x43005d);},'UQwRF':_0x490f99(0x2a9,'hNAS'),'HvoQH':function(_0x4bad58){return _0x4bad58();},'DTTEa':function(_0x27e7a0,_0x494e02){return _0x27e7a0(_0x494e02);},'kdLPN':_0x490f99(0x1f3,'@REM'),'NViJS':function(_0x2afb17,_0x2ce283){return _0x2afb17!==_0x2ce283;},'pkrft':_0x490f99(0x119,'E9j5'),'rjoaR':_0x490f99(0x32c,'[uKp'),'EDhwe':function(_0x252894){return _0x252894();}};_0x4016fe[_0x490f99(0x2ed,'jRJ&')]($,_0x4016fe[_0x490f99(0x2ac,'AN*5')])[_0x490f99(0x1bd,'R3N5')](0x190,function(){const _0x4c847e=_0x490f99,_0x56febe={'FQScg':function(_0x5519ad,_0x1bf399){const _0xc84e6f=a0_0xabc1;return _0x4016fe[_0xc84e6f(0x2a2,'j$(]')](_0x5519ad,_0x1bf399);},'BWAPl':_0x4016fe[_0x4c847e(0x20b,'8Bg2')],'Kndod':function(_0x1d6e5e){const _0x25d883=_0x4c847e;return _0x4016fe[_0x25d883(0x1e5,'Tldi')](_0x1d6e5e);},'nbjME':function(_0x55de10,_0x1f3886){const _0x2de3e1=_0x4c847e;return _0x4016fe[_0x2de3e1(0x2b7,'TfFd')](_0x55de10,_0x1f3886);},'dCKau':_0x4016fe[_0x4c847e(0x27b,'dAsl')]};_0x4016fe[_0x4c847e(0x1ba,'!6Lp')](_0x4016fe[_0x4c847e(0x149,'#Gbl')],_0x4016fe[_0x4c847e(0x126,'7mLc')])?(_0x4016fe[_0x4c847e(0x296,'5MUw')]($,_0x4016fe[_0x4c847e(0x25c,'XJCy')])[_0x4c847e(0x21a,'XJCy')](0x190),_0x4016fe[_0x4c847e(0x245,'R3N5')](updateUI)):(SKfQIc[_0x4c847e(0x13b,'e9eI')](_0x306035,SKfQIc[_0x4c847e(0x224,']*x^')])[_0x4c847e(0x1ad,'JJvz')](0x190,function(){const _0xae7ca1=_0x4c847e;_0x56febe[_0xae7ca1(0x199,'8Bg2')](_0x30d214,_0x56febe[_0xae7ca1(0x22f,'l5Ju')])[_0xae7ca1(0x1f9,'[uKp')](0x190),_0x56febe[_0xae7ca1(0x355,'0BkO')](_0x1172f1);}),_0x3dc0b7[_0x213f3c][_0x4c847e(0x28a,'8Bg2')]=!![],_0x56febe[_0x4c847e(0x18e,'!6Lp')](_0x2bcbdb));}),extension_settings[extensionName][_0x490f99(0x132,'tY^#')]=!![],_0x4016fe[_0x490f99(0x140,'dAsl')](saveSettings);}export function displayExpiryInfo(){const _0x24f169=a0_0x250773,_0x592ba3={};_0x592ba3[_0x24f169(0x31d,'hNAS')]=function(_0x49deba,_0x2150c5){return _0x49deba>_0x2150c5;},_0x592ba3[_0x24f169(0x31c,'#Gbl')]=function(_0x4f1d64,_0x444aa1){return _0x4f1d64/_0x444aa1;},_0x592ba3[_0x24f169(0x300,'(itZ')]=function(_0xc2f4c8,_0x4ed2ff){return _0xc2f4c8-_0x4ed2ff;},_0x592ba3[_0x24f169(0x201,']*x^')]=function(_0xbd897c,_0x5c0004){return _0xbd897c*_0x5c0004;},_0x592ba3[_0x24f169(0x2bb,'1Yaf')]=function(_0x5ea59c,_0xcfb35){return _0x5ea59c*_0xcfb35;},_0x592ba3[_0x24f169(0x1b2,'9lVc')]=function(_0x1113dc,_0x5a1928){return _0x1113dc*_0x5a1928;},_0x592ba3[_0x24f169(0x28c,'hCFT')]=_0x24f169(0x2fe,'6VBF'),_0x592ba3[_0x24f169(0x182,'!6Lp')]=_0x24f169(0x35b,'(9P5'),_0x592ba3[_0x24f169(0x213,'&NS@')]=function(_0x4a8cc8,_0x31ad1d){return _0x4a8cc8/_0x31ad1d;},_0x592ba3[_0x24f169(0x35a,'LZID')]=function(_0x4bd6cf,_0x19c73b){return _0x4bd6cf-_0x19c73b;},_0x592ba3[_0x24f169(0x2ab,'&NS@')]=function(_0x1f33ca,_0x5397f0){return _0x1f33ca*_0x5397f0;},_0x592ba3[_0x24f169(0x17c,'^5&D')]=function(_0x18d242,_0x24f486){return _0x18d242*_0x24f486;},_0x592ba3[_0x24f169(0x123,'hNAS')]=function(_0x5582e0,_0x10d50d){return _0x5582e0*_0x10d50d;},_0x592ba3[_0x24f169(0x252,'hNAS')]=function(_0x403ba7,_0x1d1304){return _0x403ba7!==_0x1d1304;},_0x592ba3[_0x24f169(0x29c,'e9eI')]=_0x24f169(0x171,'l5Ju'),_0x592ba3[_0x24f169(0x2b4,'7mLc')]=_0x24f169(0xe5,'7mLc'),_0x592ba3[_0x24f169(0x315,'@REM')]=function(_0x5843f7,_0x528cd1){return _0x5843f7!==_0x528cd1;},_0x592ba3[_0x24f169(0x16b,'vaZs')]=_0x24f169(0x1ac,'hCFT'),_0x592ba3[_0x24f169(0xe6,'zx*S')]=_0x24f169(0x109,'AN*5');const _0x577849=_0x592ba3,_0x5b3755=new Date(),_0x1daee6=Math[_0x24f169(0x2a1,'XJCy')](_0x577849[_0x24f169(0x268,'6VBF')](_0x577849[_0x24f169(0x181,'9bJs')](a0_0x3308f0[_0x24f169(0x2f7,'tY^#')],_0x5b3755),_0x577849[_0x24f169(0x103,'9bJs')](_0x577849[_0x24f169(0x160,'(itZ')](_0x577849[_0x24f169(0x235,'[uKp')](0x3e8,0x3c),0x3c),0x18))),_0x6acf83=localStorage[_0x24f169(0x264,'P!Ag')](_0x577849[_0x24f169(0x2be,'NCi9')]);if(pluginAuthStatus[_0x24f169(0x243,'hNAS')]){if(_0x577849[_0x24f169(0x269,'P!Ag')](_0x577849[_0x24f169(0x172,'K0j6')],_0x577849[_0x24f169(0x1cf,'#Gbl')]))return _0x577849[_0x24f169(0x251,'l5Ju')];else{const _0xd568ee=new _0x3b08e1(_0x149c23);MhOIUb[_0x24f169(0x31d,'hNAS')](_0x34f5ba,_0xd568ee)?_0x222aff[_0x24f169(0x243,'hNAS')]=!![]:_0x16b6b0[_0x24f169(0x246,'8Bg2')]=![];}}else{let _0x20200f='';if(_0x6acf83){if(_0x577849[_0x24f169(0x1d5,'&NS@')](_0x577849[_0x24f169(0x26e,'W(QE')],_0x577849[_0x24f169(0x1a0,'vaZs')])){const _0x44e3a7=new Date(_0x6acf83);_0x20200f=_0x24f169(0xdf,'R3N5')+_0x44e3a7[_0x24f169(0x1e8,'dAsl')]()+_0x24f169(0x241,'AN*5');}else{const _0x3033cc=new _0x2cc36b(),_0x687288=_0x259582[_0x24f169(0x237,'#Gbl')](_0x577849[_0x24f169(0x16f,'K0j6')](_0x577849[_0x24f169(0x35f,'emVL')](_0x19f44e[_0x24f169(0x270,'&NS@')],_0x3033cc),_0x577849[_0x24f169(0x177,'TfFd')](_0x577849[_0x24f169(0x2f0,'zii!')](_0x577849[_0x24f169(0x1b1,'JJvz')](0x3e8,0x3c),0x3c),0x18))),_0x98b3b4=_0x101410[_0x24f169(0x323,'!SIX')](_0x577849[_0x24f169(0x2be,'NCi9')]);if(_0x542a94[_0x24f169(0x1f1,'!6Lp')])return _0x577849[_0x24f169(0x337,'8Bg2')];else{let _0x10572a='';if(_0x98b3b4){const _0x4b86f6=new _0x338d6a(_0x98b3b4);_0x10572a=_0x24f169(0x1d1,'!SIX')+_0x4b86f6[_0x24f169(0x16e,'NCi9')]()+_0x24f169(0x26f,'mT4#');}return _0x24f169(0x135,'vaZs')+_0x687288+_0x24f169(0x196,'mT4#')+_0x4026af[_0x24f169(0xf1,'W(QE')][_0x24f169(0x2ec,'mT4#')]()+_0x24f169(0x2e8,']*x^')+_0x10572a+_0x24f169(0x193,'9bJs');}}}return _0x24f169(0x2ff,'8Bg2')+_0x1daee6+_0x24f169(0x266,'[uKp')+a0_0x3308f0[_0x24f169(0x1e2,'vaZs')][_0x24f169(0x16e,'NCi9')]()+_0x24f169(0xee,'hCFT')+_0x20200f+_0x24f169(0xf0,'mT4#');}} \ No newline at end of file +const a0_0x26b1b0=a0_0x13e9;(function(_0x175c63,_0x67a140){const _0x2dedd0=a0_0x13e9,_0x7ecc5e=_0x175c63();while(!![]){try{const _0xd5cca2=parseInt(_0x2dedd0(0x187,'P1[c'))/0x1+-parseInt(_0x2dedd0(0x2ef,'hNHB'))/0x2*(parseInt(_0x2dedd0(0x1ea,'ZtD3'))/0x3)+-parseInt(_0x2dedd0(0x2d3,'J1rk'))/0x4*(parseInt(_0x2dedd0(0x2cf,'1ewt'))/0x5)+parseInt(_0x2dedd0(0x234,'(i3]'))/0x6+-parseInt(_0x2dedd0(0x39a,'mv&p'))/0x7*(-parseInt(_0x2dedd0(0x17c,'XFAV'))/0x8)+parseInt(_0x2dedd0(0x1bb,'g)F('))/0x9*(parseInt(_0x2dedd0(0x321,'jcE2'))/0xa)+-parseInt(_0x2dedd0(0x170,'ojfm'))/0xb;if(_0xd5cca2===_0x67a140)break;else _0x7ecc5e['push'](_0x7ecc5e['shift']());}catch(_0x30459a){_0x7ecc5e['push'](_0x7ecc5e['shift']());}}}(a0_0x21b9,0xe3a15));import{extension_settings}from'/scripts/extensions.js';function a0_0x21b9(){const _0x551f6b=['l08iWPZdUW','W5hdPMFdOSovzZtdVCkisSkIW6L1W58HW4XVfmomWQ81W7mkW4JdQMRcRLddO25dW6XkDNVdGH8tW5RcISknfI0wW5TzWRxdSuipw8kgW6BdI05KdSoggSo4aSklW5pcJcZcLmkoW43cJSohW5auW6aoW6vcWPhcSCkMsCk2zUAoQUACS+ACQoAxKEAFHxBdOa','W6RcN33cJuOEd8oOW7XzWQLuWQlcOCk7nq','EmoDWRdcS8onnSkkfSkDWQC','WPb7hXNdPW','WPGYahlcUmkPW4FcN8koWPW','ChKrqSke','W7uvW4JdKKm','WO0lW6VdUNhcT8ox','dMWSWOpdUNX3W4VcPSk6WQJdJmojWPHbW54','WQNcJhRcQW','W61FpZNcSmkOya','j8orBCoiBmkYBq','WRSsighcTG','WPpcMdrA','WR/dP8knyqysWPD7mcy0acC','kmo6FSk2W6iKtGO6i38ykcX2nCk0W6e','W61fW6PKmrhdGv/cUhxcHbJcPmkYW6eYW5FdLCo1xZj9Ds/cLG','pr5dvXddK8khuXVdUehdMsy','WPPBW4TJBq','WRm/W5RdMN4','57gv57Ms57Ir5OIq5lQG77++5OIu5PYl5P+96zMz5PMB5PEg5PAA5zUJ44k8','W45llapcSW','WRb2W65rlW','WRfQW5Tq','dxPLW7GdWPnz','WQJcTIVcQ8kb','WOJcI2xcL2i','W5LdW73dR8k+WPFdGay','W6z4hKbIWRL6W4ZcIKK','W6epW4VdR3u','W7L1FhRdLW','WPNcPLtcVxS','W4ruW67dPG','Bw0Wlg8','bCofp8oCW79qWOldRx4','W4RdQH7cSHO','CH8mpaVdUI0','fCoZC8oSya','lXqLWRJcNmoxW5FcUhNdGW','FCo/WO4kWR0','qxpdImkRWO8','5OY45P2U5R2E5RA45OUB5yMS776K55wD5OIIWOSm','WPddKYJdIGnqCmk1W61eWRCRWQlcOSk+i2ayWOXUmSkYuGSYWQhcVa0IW4OIW5ddK8oDW4DzWQbQmSoVqCohrCkyW4OgWPmOtmo5WPvsiSk9jKndW4WhcJfeW4pcJtbKWOBcUqzSpshdL8oNBCkCW4HRfColsmkw5O+j5P2K5P6K5PEw5PY3WOpcJq','xmoOECoUWR4','DmkumX/dPCoWeG','W4DuW4zwdW','mwv9W6yu','kSolFSklqCoe','dmk1WQmgEG','W69sAseN','W4OEFv4','WPBcMLFcRxW','5O2l5P6856cu5PsL5Pwf5OMf5P235yU95zM/6l+V5O6h5AE56lER','gCoSASkEW68','rmoCy8opWRLjW7NdPs8Q','WOvUW4H3vW','WQRcL8k8v8oonSogW4ddKmk2veldQ8kWvSkHWORdUCkahCkZW5yeDNWHemkxEfGCiYy4W40nbCkKW6ddHtNdMmoqx3FdKmofW57dOrqUW7bJuLPThd0lfbhcO8oji8kDWP3dT8oWw08my2RdVSozyJVMJzRMNB/LT6FOVltMNQVcJI/dP33dPZq','b8kvWPudDW','tsbXWRhdMG','lIdcU27cVW','W6LGBGm/','WOOZbNpcUCk8W4FcG8ks','W6hdOSkkEumvWQr2jInStJuLo8oZkCklWP7cMx8Nw8kuWRzyoInfamk8W4ZcQ8khW6LmwSouxfNdTmoeoSkoiSoTkCoBuJlcSmo1WPHQdSknWOVdVSkYW6xcKSoarSk0W6VdTIfzWONcH8k1WQezj8kNoCkv5O6b5P6m5BAa6l+y5P2bnvVdUCkRWRJcIa','gSoxt8kkCG','DxRdQmkapSouDxddR8keECkhWORdJmkYWOzMja','wI0qgH8','pmkaWOajqc3cKq','lK8kWRa','W4TcfqdcQW','W4b+W4H8kG','cM8vWOVdShneW4/cL8kVWRtdTSo5WOnxW5lcP8ok','WPJdHt/cJe4','pmkaWOaiwZ3cJSox','W6TEW6PX','WOn0W75MDa','W7TnCsSPs8oB','CuC7c0tcG8oFEHpdL0ddHtddKmoaxJjk','Bea2z8kztCoi5y6PW5tdG+IKQUwmGoAEUoMQREADLoACTUwXLoELOgel','omouzCoAoG','WRldPbBcGvq','W5jxyNVdUG','W4BdL8kiWQ7cVW','W4bQpGJcQa','WQPaWQlcQbSQmmkslcRcLNiRzYpcJmoSja','jCoGu8oFfq','kSohA8ktrCoA','W6VdHaJcIcK','W6bdW6X7ma','DKqEaelcT8od','BSoaWRtcK8olkSkJ','zYjpWQddMSk1WRG','oYdcShNcUa','WOxcJd5wW4C','WO0OpuNcMmkiW5RcL8kcWPBdQW','W4vdw3ddIMKt','W4tdLCkmW7pdIW','y37dHSk4eG','W6NcLNZcO1Cvpq','WR/dP8knua4tWRTKndC0','W7ZcHwxcVKW','WOxcSs1vW7q','W6BcN8kGrSkho8o1W4ddGmkXabBdQ8kXr8kT','WQr8ishdQmkbW4a7uc0','W7BdL8k9W5BdRa','W4ldLmkYW5NdJG','WQVdSSkQWQ7cPx445BYy5yMY5O+c5P+d5PYx5PsG5PYl6isUzvW','g1T1BW','W4z+mgb1','ACkEmZm','hhXszN4','57o857IU57QZ5OUY5lQ8776z5OI/5P+Z5P6d6zQO5PIJ5PEK5PEi5zQO44c8','W5DiW6RdH8kQWOFdGa','W6VdJq/cGa4','hL9QBM5ArfBdPNy','qSoGFmo1WOu','r2WDmK4','WQtdRaRcGvldIu3dRSkUW4m','WO4MbNq','fSkeWPeZya','WOZdVaRcIKu','CSktvqBdV8kDWRi','lCoSWOuCBmkSiSkBWPm0','WQbsW45Wia','zaiiha3dUIq','jmokDSowpa','WO9NW7nnxa','swbvdNzWktldISk4','FumIqSkJ','WOO3ghpcOW','WReVowpcGa','De4Ar8kr','W6tcImkKWRJdIq','WQhdQCkfAY4','lSoyhvFdN8kQWRiKiga','WRWGa2pcKG','kCovy8keW6e','yfahdvxcH8ox','W6PQis/dSSkiWRFLVjZLIBJMJ4JMNQVMNPZMLANMNONOHkFcICo0','WP3cOCoNW6/dQtiMDXaUW6LOvH7dVx9CgW','zqiqoHJdUW','WPddV8khxW0','wLnkcMe','WRpdHmk6sau','WQuuagtcL8kNWP4','W53dQmkrW73dUCkxoq','pSo8WPWBDCk7aSkvWPm9','W6yuuxNcOW','W40Gsh3cGG','uCoCESoPWRTjW50','m0n4W7GDWO8p5y2fkuFPNBBPU7ZLIkNML7tNLl7MI5/KV6hMGjxLPk7OTyz6','5AERd8kwfuxdJKyqW6VcUhPJWPlcJIvbDSkjWOBMNQBMLApMNQpOH6RcVJO','WRnHpcFdRmkbW60','WQ3cHKZcHKi','W4/dUmkDW5BdNa','WP5Plq3dNq','vc1MW7WqWPPrWOX+rW8epMq2W4GGwJ8','WQtdRaRcGvldLxO','r2a/xCkbvCkikG','imohsmotia','DCkarZJdGG','W7KXW4FdRfu','zM8DfwS','W63cKNRcHa','yY9lWQhdH8kIWRuxbCoA','W7/cSfRcUwW','wSkHssddQW','laBcOu3cSmoR','zK0Eca','WRfiW6TkvCkBW5pcQW','tJy5mrC','WQXQW4jq','rwq2yCkduCkZkSoSWO4','jSoAhfRdMmkkWQKRmNa','W7VdOSk0W6xdQG','W7vDW6TZk0xcSrhcRhtcMc/dQCkUW7W9','W4uyW7ldOuLVDa','DCkQW4LmuCkmomkiWQib','WRhcMNJcQNS2mYHYxa','W5RdG8kmtSkD','sgiBk0e','zmk5Emk8W6OMFui','WP9mW67dQSoKWOddKrrHW4rFWOOWWO3cNfuvW7GR','oXGbWORcVq','ow1XW5G1','F2ytlKO','W79EDq84','WQ/dO8koybutWOfJmd0','mmoyBmoMCCk5x8o7ns0GicxcLMxcHSkI','zCkosqddRmkC','pCkaWPKVqI3cTCoqvwe','WRhdKI/cJ0y','zg3dLmkgl8omxxtdN8ka','xCkQu8otnCoaW4q/WQq9WRHsyrLgsmoxmmkn','rxddL8koha','WQ5cW7G','WRpcK2dcOMq9jsLKvfdcL8kGkSowfa','W5CuFx/cJWhcHq','WRjPW4nsdmkaovhcVSoSmHZdNCkspvj5WOa','W4NcHKtcVge','WPCChuhcMSoW5yYe5zgq55Eb','W6xdI8kOW7ZdIq','W5mvW6hdQ155yW','W6TTDbO7','WRmhW4BdU38','E8oqW4f5bNZcKCosFKtdNg0','omokWRqyra','W4CfW7BdJfP+Dq','paq8WR/cHCoaW7FcTNNdIG','EmoDWRdcS8onkSk9','pqqLWPJcNmoqW4ZcSq','W6Pgiq/cR8kODYxcG8o3WQK','W5/dRSkaW7NdIq','WQPaW7f9lq','WPLeW5TCcCkxvowpH8kwWRJOPRZLJPlMNQ7PQkxMNiVMN6tLSjVNPAtcGSkp','CuC+n2JcSCohBt7dMfm','WPWPfxJcU8k+W4O','W7HloJFcQ8kJwYpcKCo1WR7dP8kwWOaUcW','W63dOXxcOGO','W4bmW7RdKmk/WPldLWe','umkHCJRdNW','zWSjmHddSrBcL8kEW6NdSSkFlHBdICoJW63dOa','yxX6eNO','vmo0WOKJWO7dGab/AdbvdatdTmk9W7y','catcM1dcMq','W47dQmkEWORcPG','WRJdPsRcHvq','W67dG8kuWQBcJa','WQfQW5jq','DvhdPmk/WQJdRCktAG','WOOjxftdN2asqa','Bea2z8kztCoi5y6PW5tdG+AnHoAEKUMOToIUTowKPUI3L28','W6LEW7K','WQeLfwlcUG','DKyxxCku','BepdGCkEWQ7dRCky','WQpdLqVcOKq','m8oDy8kt','W7pcI8kLsmkCmmoo','5Q+y5PAc5O+05PYw5R655RAK5OMz5yMP77+Q5P6u5PEs5P+F6iAUq8kC','s0ldSCkCWQu','qvmmFmkK','D8ouz8omWRyb','W7FdGmkusmko','W7FdRCk5AG','DSksiHVdLq','W559W67dR8kp','lCobrCkUA8oLA8oaW5VcSZi','W7ZcQCkcWRBdVa','W7nIjKDUWQP/W5pcQ0ZdMCoeW7lcLSo1ke9b','WRmjbetcKCk7WRCEWP3dVq','WQjGpcS','rhqlw8k2','WPddMYVcKeG','imonWRu2wG','W6aHFNNcRSk2W44dyGJcPa','WQviW6TltSklW4W','orCqib7dTIFdM8knW7JdU8k0kaVdMCoI','W5lcLGfMW4pcMfe','W47dUrhcSaS','fxvufgD8dMVdICkWW6lcI8k4kmorW5G','ChBdGCkIgq','zmkousBdUCkDWQW','W5vvW67dQSk5WPBdLG','k8olyCksuSotvSogW5FcSa','DmkDlJldTmoremknWQ4','W7zuW6PDnK7cGW','W5tcVK/cVNy','W53dOCk/sCkr','EmopWOVcLCoT','W6LDCqOYxmoFAmkjW4y','uvVdVmk6ba','WPlcQvRcPhS','c8o2t8oq','WQ3dQSkwAaOyWPDHndW4caSLiCoVBCku','wmo7v8oNWQK','W6hdIapcHbG','lCoSWOKwuG','W4pcTSkgWRy','W4yqz2tcJXNcJa','W6VcVSorofmKWO9BaHGD','W6z9gKrKWQHYW4lcHKldG8koW4VcKCoOlW','WOldSsdcUeK','WOHpW6bLiW','5P2b5yI45zQz6AU46k+c6lYa5O+U5AEq6lEt772C5BgH6kYe5P6M5z+w6AIk6k+pW79zWOq','566R57IRW78','WOVcQYxcSSk2','BwFdKSkvnG','wNbmcw9NctZdISkX','WRNdT8kUtsC','WRNNLQRMI7RMNyZPMRJLT7NOO5xMM6xMLPJNPy7NLRdJGyq','W5vvW67dQSk5WORdOrrHW5q','lqBcVLtcO8o8mCkPW5Wl','W4nbW7FdP8kUWQBdLq','W7qRW6hdRuS','d8olD8oVgq','W5hdU8kMwmk7','W7VdLCk1sSkT','v8oTWQWrWQq','WPddQCkYvdhcRbqxkJa','ax1UCSobsmokiSk4WP/dTmkTWOSjimkozW','exauWORdPG','lbBcSfJcSmoQcW','CCoQWQyIWP0','fmoYr8kFW4C','d2DHW5GfWPnq','WP4CW6RdMW','W7DRW7NdGmkC','hxLVvhi','W6HJh21U','W4e3W4pdVNi','W6ynq1hdKSoYWO9hWPxcQ8ofWOinWOVdGmoABGtdIZZcGCod','WRpdSrFcH1BdLuddU8k/W4S','W61qDqSVs8of','vmo5WPGxWPpdJY1+','dCoNzSkhqW','lZCJWRVcKG','r8o3WPGH','a8omWPSvzW','qgaPya','5OYE5P6W5BsN6l+M5P+X772z6k2D6ywS5Pst5RYf5Rws','f8odEmohBq','gMGBWRZdIG','vuldNSkbpG','W5JdI8kOW67dNG','WR7cVJFcQ8khiNa','W47dOmkIWRZcNq','bmoRqCoComojW4W','kCocECkAtCoyqmohW4hcUcD0kfRcPtK','5PYd6zUK6kkY5PA35zUg','W4muFxBcGrVcLaO','tCoiWQlcQSo8','hCkZWOWYrW','Ct9lWOddNmk1WRe','iCowWQ3cU8oti8oW5BYK5yQK5O2k5P6c5PY35PEo5P+M6iAQFmor','eCoPvCozpCocW7DGW5TPW7aTiLycdq','WPhdQCkRCJpcRda','r0ORE8kd','WRRdO8kxrHCtWQu','W7vOb0D7WQ5AW4lcIKa','Duqca07cJmoSAtBdML3dHdZdKCoCqZvb','pfOHWQldUq','WQpcIXb6W54','jbTmkuJdO3VcISoF','rCotWPtcU8oO','WQtdPGJcH1i','W7mwqvdcOG','teTnbK8','xgbmjwfHbq','W5VcNMhcHLPc5y6N5zkM55AH','tmkQsaBdOCkbW7pLJROPeEAGLUA3M+wiTEApQEAFHow0VEI/MUAFPE++LEw3SUA4NEErN+ADPowDT+wUREwcKoocVG','W5OqW63dRee','W4ddOSks','WQTjCby1CCogC8kcW4CH','WPRdJmk0wJe','BSopF8kiCmoyAW','W57dOCkqW5pdPmkCc3FdJwZcQ2/dGLldISoH','aSoBuCkuW7e','W4/cLmk9vSkl','kmo1rCoZpa','W7TcoXNcTSkOAq','l8o3ECk/','DgfabMK','lCkeWPOFws3cJ8oxuwVdVW','WOhcMuhcGNq','dxqRWO3dVxvbW4ZcQG','C8okWOCTvstcKmkAoIZcUG7cLJGVD8kXzcO','WOhcGtzDW6tcThe','o8klWPicEG','WPxcMIn5W5i','W5lcVmkdWRRdI8kXBa','tSoCWPmgWQ4','qmkjdrRdOa','W6DFW6D+jq','W4ZdRmklW6VdOmkxj3hdN27cVa','W6PyW69+iq','W7vmW6X3BSkaW5u','uxSEsSkx','D1xdRCkdWQRdQCkOAHpcGa','kSolEmk0umotCG','mZFcL3NcJa','W4fXqcNdOmoQWPRcQCkNWRBdUCoHW54','W7ldS8k1WQdcUW','5AAzj8k+WQpdQ8otWOvvnCkrdmkezSknWP5ArSoGkoAEQ+AvKUADJ+IhPSokoG','W5qsW7FdRq','W7eZW4nLcCk2p3O','WOxdG8kkFaa','5AAUb0OilCoRm8kwW48nWO3cGCkDWPhdQIbnsSkh5P+p5PEw5P6x6isrWPFdKW','W4jiW7pdRmk9WPBdRafWW5W','y0ldNmkQga','rCojySojWRS','W4zkwL7dL2iHh3OGsmkcW5RcJ3RdKG','W7DrWQ9+dCksWPxcPmkYgmkxtJ7cIhL/W7C','5O2k5P2g5Bwe6l+Y5P2677+I6k6r6yE95Pw75R2y5RwH','W6LIhK0','bHSAWP3cMG','WPvama7cUWFcIaqQWRS','kSolEmk1s8odBCob','WQaMewNcGW','n8oSDSoIvq','WQroW4DVca','soEuQUAiOUAFKUMyOEw0HoIILUAySoAwGUENPUEuH+oaPG','CM1/meG','WOPRW45ckW','WPe3e27cTa','WQ3dPsdcKey','W4NdQmkrW7ldUmkEofVdM2JcQW','WPJdTr/cM3q','ixbRtN4','f8ofy8k1W5O','5Q2V5PAf5OYk5P+l5R+75RsX5OIa5yIX77Yc5P2h5PA35PYB6iEMvYm','WOfGW6XLda','WQ8aowRcPW','o8o6zSkAFG','WQJcOZpcI8kbiNK','g8o1DmoODmkUmUwnRr156zYw6BQN5yM+5Pwj55sQ5OUy5lYT5Okn5AE+6lwmiq','owC4WOddHq','WQXhW5jBha','x8oHWQRcJmow','Cwe4dei','W7ldRapcTcm','W7r4oN1o','BSoqWQpcUCoApmk9','W5xdQXdcJJSZBa','W7FcG8kLtCkhnSolW5xdISkQb0/dOmk2tCkN','BZ9mWRRdICk3WRK','b8ohCSoyEG','pmo1WOqtASkWfmkaWOmKfmkoW7NcICoZFmkYeG','WPGlW7ldKwBcPSo7zZBdSq','W6xcHSk2qSkljSoz','WPFNL6ZMI4tMNPdPM6NLTkBOORtMMz/MLyFNPzdNLQtJGPO','hL9RBNLB','sgbmkhrWdq','oHGHWRu','wSoEACobWOO','WPtdL8kWrI8','rJLnWO/dKq','tCkxpXRdTG','dgu0WOVdPxDHW57cTSkJ','mSorDmoUBSkYsCoUjtq','WQ54W6XrxW','W4hdOmkSD8kf','W7bSgey','W7PnAa0Rs8o/zSkjW48','zqiroG/dUGdcGSkoW7a','W70yuh7cGq','W7TcoXtcO8k5yq','W40NW5hdGeK','WQBdSq7cRLxdNgxdLSk/W4FcSq','h0PRAgW','WRdcQWZcM8k9','562u57IcW6a','vgXjc2m','wGS3nYOky1xdLeHoka','WQiEoelcGmkJWP8AWQ3dUConW5yIW4BdJSkgFfu','W63dRCkexmkNwaOvb8kHW78','x0qCrSk9','C8okWOCTvstcKmkA','pSoEFSkrxa','x0yIx8k+','ic8gWOhcVG','WOuCW77dIwy','WQCgW5xdU2O','WOPcrK/cNM8sh2ONhmowW5RcJMVdNI3dMSowwSkAWOpcPZ95WOjSCa3dNIdcVSoZW6fEkmoTcqFcKaxcHvCohmokW6L2WR1lD8k9W4iPW6DlkmkIWQOfA8kxW5zzW751tddcStpdKSkDyCkcj8ojW7lMJ7RMNi7LT4tOVipMNy9/WOVdS8o5qvu','W6/cPSksWQVdLa','hCotwCkyW44','WRifWQ0MCr7dLYpcJgRcNstdKG','o8kckJFdVCo5qEw+QEwkJEAnSoAFOUACM+AwTUADQEIhJwHx','WQVdTmktqte','yLr9bw4','W7ldKSkoWPFcJG','W7vDW6TZk0xcSqxcQMxcGI/dPmkUW6W9','vc1MW7WqWPPrWOW','bfTcW7WY','DhDljeq','CH8mpaVdUJO','W4yqz2tcGXdcKXenWP1S','W7j3W7/dUCk8','sJnUW5tcPcuEW5dcI8kfWQpdKCoS','DLxdTmkLWQJdQCkm','W7pdVd7cOtu','W4pdTmkgW6hdUq','o0HGzNm','WPKlW6VdT2tcPSoF','WQ/cKhBcPge','nCoswSoqnW','5R6p5REE5AEf6lwL','W5xdOG3cOYOsBIiE','pmkTWQaSza','WOhdTCodW6xcI8oHCCkQW6BcGSoyW4W','W5lcVmkdWRRdI8kXEW','DSoyACkptCoqzG','C8kEcZNdSSo0e8kFWOtcMCovD8kTaKW7gCk8','h1vQza','WQzGW4jdiW','g2DHW5GfWPnq','W75LW5RdUSkK','5l626igR5BwT5PAi5zUo5O2l5P+X','Fg85jK0','WRf8oapdSCkkW70N','rsHPWOFdOa','DCkukJNdP8oWnSkoWQxcLq','WQ/cJtzMW7K','DCkukZNdSmoX','v8o9WOGnWPpdIZi','o8oCyCogiG','WQNdQCkQxcWLWRXLpd42','WPBdMaNcGNq','W7raE37dHW','W7Xhsq0+t8oAD8kOW4m5W5qxWOGUW7fAhG','c8oUWPK2WO7dIcy','W6fmW6P2uSkXW5hcUCoVaCod','WODOW41lFW','W6zhkbePqCoeDW','dNnbW4K+','oHVcO1lcP8o8ha','WOJdVGJcSIG/B3GwdmkZg8oSW55qWOS','WO7dMmklBrm','CSoCFCobWO4','WOnaW7zUq8oC5y2w','WRD4ncRdNW','bgb2v1q','a8okWPKquG','dYZcGg8','W410qYRdOmoSWPJcN8kZWRpdR8oAW50','zgBdSSkhWR0','WRxcQtpcPW','vwa1ymkqumkLmSoSWPxcQCk9W4S','jHlcHxdcPG','yfahdvxcM8o3FIpdKW','W53cOwBcM1O','W6RcN33cJuOEd8oOW7XzWQ5uWQ3cOCk4ox0','sCo7WQGiWRi','cGZcGMRcSG','WORcLJjr','gMD4W74hWPn0W4yrcG','W45jj05/','h3uTWOZdVgbbW5dcTSkQ','WPRcUmoqWO3cV8ogoxtdSehcN3m','sCkHbqZdIq','BCkckdG','nGBdTCk8WRddLmk4va','W5nWW59zca','u8kolmoDbmkwp8koW5BcTcmlp0/cTc/cJH7cOCk9iXpcKSkHWOFdGfeGgwhcMSklW5CKamo2W5qDW6rwd8oXlNNdVmkAWQq7W43cMh/dGSoQWR7cQtH+W4/cOmo+ifC8xKGhWQtcTmoYWPVcPLZdKmk9z8omW6ddL8kgWRNdVSky5O6J5PYt5P6K5PAx5P+Waue','W4KiAM7cMG','dMWSWOpdUNX3W5ZcSSkIWQNdT8o1WOjlW4/cOmob','cHGZWPFcVa','cZxcHmopFCkvosNcHmkbzmkuW6FcSSoGW48OyW','DK0dlvpcH8oE','WPFcNdj9W6lcThG','A8oIWRi8WPu','W61KhqpcJq','WOGaW6BdLhC','FSkacHhdLq','mmoyBmoMCCk5x8o7iY0McsJcJwFcIW','W7BdQtFcSXW','WPNcOX/cGmk4','cItcUvBcRq','l8oxAmkuW70','W7VdO8kJumkfBG0ud8kOW70','DqysoXZdUXBcMSkoW6VdV8kSlG','ySoUDmooWQW','BmoXWQxcLSo1','W4jjy1BdNw0sg101vCkrW6JcJ23dN27dJG','eCoBwSkEtq','mCoWtCo3Aq','aMP3BvW','dCoOWROdDG','kSobBmoPga','W4pdQmkwW4FdRmkvmq','W6ddS8kBrmkB','WQVcQJlcPCkCkuVcTmkFrSkMWPzIW4OWW5O','sCoxWQ3cKSom','W4pdTHtcRJ0Zzq','cuj3AgPgsupdT34','iCokBSkWzq','WQBcJwFcQN8','WQTrW5jLmW','WOZdUSkmsqG','W4zQcatcLW','WP/cOZtcO8k0','WPFcJsDaW6pcOG','bmoWWRm8ra','W6pcHSk/vSkA','rCovz8oeWQPOW5/dPIq','vSkgtapdTmov','o8oZySk9','WP4HdhxcSG','WR5icalcL8keqa','nXHoxqRdK8kbmMtcHW','W5dcSxhcPNu','WPTvW45hva','WPpdICkWyIy','W5/dLZ3cSWS','W7Wvyf7cIW','WRJdTJZcPuC','jmofvmodxa','W50qAhdcTa','hs0gWRVcGW','W6DAzbuR','fCo4WPqhvW','W4GEALRcGG','B8k0ab7dMq','WRxdUZBcH0pdKwxdQSkEW4FcT8kiWO1rC8k3WP93','W4BdUmknW6xdIa','W5yuzftcMbdcQryjWPC','Caiiha3dUIq','WROLihVcTW','d31QCSofsmoiiSk/WP/dV8kTWOLfA8ogkCowjX4/cW','W6NdNqZcOX4','WR7cVJFcQ8khiMC','W5jfcX/cOq','W67cNehcUwWJjmo7W6bdWQy','WRldGSkhBH4','WPK4e3/cKG','lmo5qSkcW4qzzq4Yixe','fNqTWPtdOcGhWOxcT8kVWRpdU8oiWPHeW4NcRCkdW7lcTdHFW4ldPwm0WQdcRIBdGcVcP3NcMdCA','W7r4cuTOWRHG','WOWFW4VdPL8','WQ9aW4X0iG','W6JcLMxcHvuvgCo9W6Xa','WPtcJhhcQ0S','cCkhWQCxtq','W5xcPCkDWR3dNmkWqmkXW5tcP8oPW7rO','WOGJe23cGG','zWSjmHddSrBcGmkkW7hdS8kKaGZdKSoLW6FdQq','bSolCColaa','W49/W5bLfq','W7XEpZu','iCkkWOaL','AfxdS8kFWR3dQ8ke','WOSIgxxcOCk+W6FcKCkoWPu','WRxdImknCqa','dvHOC2W','dbBcN23cLW','W4GaygVcGG','h19ZsgXAya','W57dOCkqW5pdPmkCc3FdJwZcQ2/dMetdJSoH','W5FcNSk8tCkxz+wnNq','WQpdTSk+Dcm','WRnRpIhdRa','EN9OkNa','56+t57Muka','WQxdPtFcQMq'];a0_0x21b9=function(){return _0x551f6b;};return a0_0x21b9();}function a0_0x13e9(_0x34b9fd,_0x8cc587){_0x34b9fd=_0x34b9fd-0x12c;const _0x21b9de=a0_0x21b9();let _0x13e930=_0x21b9de[_0x34b9fd];if(a0_0x13e9['gEySJx']===undefined){var _0x48782e=function(_0x57e1bf){const _0x1e6cca='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0xcb780a='',_0x3c91b5='';for(let _0x3a644d=0x0,_0x125192,_0x864493,_0x5ebade=0x0;_0x864493=_0x57e1bf['charAt'](_0x5ebade++);~_0x864493&&(_0x125192=_0x3a644d%0x4?_0x125192*0x40+_0x864493:_0x864493,_0x3a644d++%0x4)?_0xcb780a+=String['fromCharCode'](0xff&_0x125192>>(-0x2*_0x3a644d&0x6)):0x0){_0x864493=_0x1e6cca['indexOf'](_0x864493);}for(let _0x3bf20b=0x0,_0x3fd084=_0xcb780a['length'];_0x3bf20b<_0x3fd084;_0x3bf20b++){_0x3c91b5+='%'+('00'+_0xcb780a['charCodeAt'](_0x3bf20b)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x3c91b5);};const _0x539dae=function(_0x1e662a,_0x5361ec){let _0x3be0e7=[],_0x1e7dce=0x0,_0x417840,_0x239a28='';_0x1e662a=_0x48782e(_0x1e662a);let _0x528218;for(_0x528218=0x0;_0x528218<0x100;_0x528218++){_0x3be0e7[_0x528218]=_0x528218;}for(_0x528218=0x0;_0x528218<0x100;_0x528218++){_0x1e7dce=(_0x1e7dce+_0x3be0e7[_0x528218]+_0x5361ec['charCodeAt'](_0x528218%_0x5361ec['length']))%0x100,_0x417840=_0x3be0e7[_0x528218],_0x3be0e7[_0x528218]=_0x3be0e7[_0x1e7dce],_0x3be0e7[_0x1e7dce]=_0x417840;}_0x528218=0x0,_0x1e7dce=0x0;for(let _0x111267=0x0;_0x111267<_0x1e662a['length'];_0x111267++){_0x528218=(_0x528218+0x1)%0x100,_0x1e7dce=(_0x1e7dce+_0x3be0e7[_0x528218])%0x100,_0x417840=_0x3be0e7[_0x528218],_0x3be0e7[_0x528218]=_0x3be0e7[_0x1e7dce],_0x3be0e7[_0x1e7dce]=_0x417840,_0x239a28+=String['fromCharCode'](_0x1e662a['charCodeAt'](_0x111267)^_0x3be0e7[(_0x3be0e7[_0x528218]+_0x3be0e7[_0x1e7dce])%0x100]);}return _0x239a28;};a0_0x13e9['fQibEt']=_0x539dae,a0_0x13e9['YHtdws']={},a0_0x13e9['gEySJx']=!![];}const _0x574545=_0x21b9de[0x0],_0x239c43=_0x34b9fd+_0x574545,_0x4ba390=a0_0x13e9['YHtdws'][_0x239c43];return!_0x4ba390?(a0_0x13e9['JrMPIw']===undefined&&(a0_0x13e9['JrMPIw']=!![]),_0x13e930=a0_0x13e9['fQibEt'](_0x13e930,_0x8cc587),a0_0x13e9['YHtdws'][_0x239c43]=_0x13e930):_0x13e930=_0x4ba390,_0x13e930;}import{saveSettings,extensionName}from'./settings.js';import{updateUI}from'../ui/state.js';const a0_0x3db5eb={};a0_0x3db5eb[a0_0x26b1b0(0x249,'B4tX')]=![],a0_0x3db5eb[a0_0x26b1b0(0x2d2,'^gC1')]=![];export const pluginAuthStatus=a0_0x3db5eb;const a0_0x25abc8=a0_0x26b1b0(0x206,'XFAV'),a0_0x3c02a3=a0_0x26b1b0(0x233,'ojfm'),a0_0x3cb2b5={'expiryDate':new Date(a0_0x26b1b0(0x1eb,'(i3]'))};export function getPasswordForDate(_0x582848){const _0x45ba58=a0_0x26b1b0,_0x4f10eb={'GJWUR':function(_0x4aea39,_0x1f76ad){return _0x4aea39(_0x1f76ad);},'HhMyW':function(_0x4d5dc3,_0x2a24a2){return _0x4d5dc3+_0x2a24a2;}},_0x2e0a03=_0x582848[_0x45ba58(0x134,'k*$(')](),_0x4a0e96=_0x4f10eb[_0x45ba58(0x384,'nIK#')](String,_0x4f10eb[_0x45ba58(0x2a4,'C$wn')](_0x582848[_0x45ba58(0x191,'jcE2')](),0x1))[_0x45ba58(0x307,'g)F(')](0x2,'0'),_0x19bfc8=_0x4f10eb[_0x45ba58(0x2fe,'1ewt')](String,_0x582848[_0x45ba58(0x22a,'Df!X')]())[_0x45ba58(0x2c0,'mg&R')](0x2,'0');return _0x45ba58(0x314,'kpcg')+_0x2e0a03+_0x4a0e96+_0x19bfc8;}export function checkAuthorization(){const _0x7ddf79=a0_0x26b1b0,_0x4a4358={'AsZHx':function(_0x5e0202,_0x4f63e1){return _0x5e0202(_0x4f63e1);},'wXocM':_0x7ddf79(0x1a2,'FLRD'),'AoIgN':function(_0x4e5a91){return _0x4e5a91();},'tSElG':_0x7ddf79(0x245,'kpcg'),'jQwNq':_0x7ddf79(0x1d9,'!ug3'),'XvTaW':_0x7ddf79(0x371,'gd$l'),'suPUC':_0x7ddf79(0x20f,'LsFS'),'BeXBM':_0x7ddf79(0x1c8,'HgHN'),'bnyjg':_0x7ddf79(0x380,'1ewt'),'YiYEo':function(_0xd6e231,_0x207f6e){return _0xd6e231>_0x207f6e;},'PgStS':_0x7ddf79(0x237,'k*$('),'HPxXQ':function(_0x566741,_0x6ec842){return _0x566741===_0x6ec842;},'PNXUY':_0x7ddf79(0x38c,'geNh'),'QVOav':function(_0x47490d,_0x66aa19){return _0x47490d!==_0x66aa19;},'NPBZX':_0x7ddf79(0x381,'^gC1'),'TIjzg':_0x7ddf79(0x373,'mg&R'),'RVxrs':function(_0x13eea9,_0x5bd7ff){return _0x13eea9!==_0x5bd7ff;},'Wrggk':_0x7ddf79(0x153,'4@nJ'),'zNdJm':_0x7ddf79(0x2c4,'(i3]'),'yBSiE':function(_0x3977a9,_0x1c4e4a){return _0x3977a9===_0x1c4e4a;},'BZxFj':_0x7ddf79(0x1d0,']kNF'),'AYadN':_0x7ddf79(0x174,'4lrh'),'mGSHr':_0x7ddf79(0x2b6,'aj7g'),'OSSCi':_0x7ddf79(0x1da,']kNF'),'gOUGG':_0x7ddf79(0x379,'LsFS'),'yGNBj':function(_0x1b4e7d,_0x90f13b){return _0x1b4e7d===_0x90f13b;},'HnxwN':_0x7ddf79(0x354,'Df!X')},_0x1084e8=new Date(),_0x50e82d=localStorage[_0x7ddf79(0x374,'nIK#')](_0x4a4358[_0x7ddf79(0x31e,'mg&R')]);if(_0x50e82d){if(_0x4a4358[_0x7ddf79(0x1e9,'@9WG')](_0x4a4358[_0x7ddf79(0x331,'RN!N')],_0x4a4358[_0x7ddf79(0x203,'yCy^')])){const _0x19d8ab=new Date(_0x50e82d);if(_0x4a4358[_0x7ddf79(0x15b,'aj7g')](_0x1084e8,_0x19d8ab))_0x4a4358[_0x7ddf79(0x274,'4lrh')](_0x4a4358[_0x7ddf79(0x1b9,'4@nJ')],_0x4a4358[_0x7ddf79(0x35d,'#BnG')])?pluginAuthStatus[_0x7ddf79(0x2ab,'(i3]')]=!![]:(_0x4a4358[_0x7ddf79(0x28e,'1MGj')](_0x56ddf6,_0x4a4358[_0x7ddf79(0x12d,'HgHN')])[_0x7ddf79(0x32b,'4@nJ')](0x190),_0x4a4358[_0x7ddf79(0x240,'^gC1')](_0x4abd36));else{if(_0x4a4358[_0x7ddf79(0x36e,'hNHB')](_0x4a4358[_0x7ddf79(0x180,'me)F')],_0x4a4358[_0x7ddf79(0x2db,'(i3]')]))pluginAuthStatus[_0x7ddf79(0x2ba,'jcE2')]=![];else{const _0x447ced=_0x4a4358[_0x7ddf79(0x2f0,'J1rk')][_0x7ddf79(0x23c,'!ug3')]('|');let _0x3ff8f7=0x0;while(!![]){switch(_0x447ced[_0x3ff8f7++]){case'0':_0x21a6b5[_0x7ddf79(0x14a,'Df!X')](_0x4a4358[_0x7ddf79(0x24e,'kpcg')]);continue;case'1':_0x39d25a[_0x7ddf79(0x34d,'yCy^')](_0x4a4358[_0x7ddf79(0x235,'mv&p')]);continue;case'2':_0x456a14[_0x7ddf79(0x35a,')puh')](_0x4a4358[_0x7ddf79(0x143,'1MGj')]);continue;case'3':_0x41b6aa[_0x7ddf79(0x215,'C$wn')](_0x4a4358[_0x7ddf79(0x1ca,'!ug3')]);continue;case'4':_0xfe86f8[_0x7ddf79(0x2e5,'mv&p')](_0x4a4358[_0x7ddf79(0x397,'ojfm')]);continue;}break;}}}}else _0x358c5f[_0x7ddf79(0x310,'Ipb&')]=!![];}else _0x4a4358[_0x7ddf79(0x305,'4lrh')](_0x4a4358[_0x7ddf79(0x377,'XFAV')],_0x4a4358[_0x7ddf79(0x26d,'mv&p')])?_0x52ff2d[_0x7ddf79(0x188,'P1[c')]=_0x4a4358[_0x7ddf79(0x2ee,'Df!X')](_0x1ba6a1,_0x5184f9[_0x7ddf79(0x225,']kNF')]):pluginAuthStatus[_0x7ddf79(0x391,'PMdZ')]=_0x4a4358[_0x7ddf79(0x303,'4lrh')](_0x1084e8,a0_0x3cb2b5[_0x7ddf79(0x345,'j2d@')]);if(pluginAuthStatus[_0x7ddf79(0x23b,'LLY3')]){if(_0x4a4358[_0x7ddf79(0x332,'nN7]')](_0x4a4358[_0x7ddf79(0x15d,'^gC1')],_0x4a4358[_0x7ddf79(0x241,'CxK*')])){const _0x45ccbc=_0x4a4358[_0x7ddf79(0x3a4,'yCy^')][_0x7ddf79(0x15f,'me)F')]('|');let _0x12f4b9=0x0;while(!![]){switch(_0x45ccbc[_0x12f4b9++]){case'0':sessionStorage[_0x7ddf79(0x3a6,'j2d@')](_0x4a4358[_0x7ddf79(0x37a,']kNF')]);continue;case'1':localStorage[_0x7ddf79(0x375,'1MGj')](_0x4a4358[_0x7ddf79(0x2a9,'@9WG')]);continue;case'2':localStorage[_0x7ddf79(0x2d4,'nN7]')](_0x4a4358[_0x7ddf79(0x34c,'0ctj')]);continue;case'3':localStorage[_0x7ddf79(0x2f2,'B4tX')](_0x4a4358[_0x7ddf79(0x250,'ojfm')]);continue;case'4':console[_0x7ddf79(0x30a,'ojfm')](_0x4a4358[_0x7ddf79(0x1c6,'Df!X')]);continue;}break;}}else _0x180cd4=!![],_0x4b1471=_0xfb6bc3[_0x7ddf79(0x2f5,'ZtD3')]||_0x4a4358[_0x7ddf79(0x1c9,'FLRD')];}const _0x3aa00a=_0x4a4358[_0x7ddf79(0x190,'(i3]')](localStorage[_0x7ddf79(0x22e,'HgHN')](_0x4a4358[_0x7ddf79(0x2b5,'aj7g')]),_0x4a4358[_0x7ddf79(0x131,'AKfc')]);return pluginAuthStatus[_0x7ddf79(0x330,'Uvhp')]=_0x3aa00a&&!pluginAuthStatus[_0x7ddf79(0x2ba,'jcE2')],pluginAuthStatus[_0x7ddf79(0x23f,'1MGj')];}export async function activatePluginAuthorization(_0x13a92e){const _0x586f04=a0_0x26b1b0,_0x44fd47={'yYYtD':function(_0x3309f8,_0x5003c){return _0x3309f8>_0x5003c;},'KtpRo':_0x586f04(0x33e,'J1rk'),'lUsSe':_0x586f04(0x2b8,'LLY3'),'nBYGf':function(_0x2b088e,_0x1b3f1a){return _0x2b088e===_0x1b3f1a;},'UGjmx':_0x586f04(0x216,'yCy^'),'mEzAG':function(_0x25995b,_0x582ff8,_0xdfd7b6){return _0x25995b(_0x582ff8,_0xdfd7b6);},'onuEc':_0x586f04(0x1a9,'b$ww'),'MhJEz':_0x586f04(0x146,'Ipb&'),'qceMD':function(_0x81e036,_0x4876d8){return _0x81e036!==_0x4876d8;},'EERIE':_0x586f04(0x286,'5#8D'),'oiqjc':_0x586f04(0x22b,'XFAV'),'lTTVT':_0x586f04(0x288,'Ipb&'),'DesaA':_0x586f04(0x338,'P1[c'),'PmbpC':_0x586f04(0x2de,'HgHN'),'SuLVB':_0x586f04(0x301,'0ctj'),'BfTGy':_0x586f04(0x21f,'geNh'),'TWznc':_0x586f04(0x2fb,'ZtD3'),'ZYAxv':_0x586f04(0x1a7,'me)F'),'FbSWy':_0x586f04(0x149,'J1rk'),'ybFMg':_0x586f04(0x2c9,'b$ww'),'AzaOd':_0x586f04(0x204,'@9WG'),'Xbaxm':_0x586f04(0x334,'nIK#'),'ldzuU':_0x586f04(0x34a,'kjtr'),'cEqxf':_0x586f04(0x172,'nIK#'),'yqMGD':_0x586f04(0x37f,'5#8D'),'nPplD':function(_0x1c8c89){return _0x1c8c89();},'orawv':_0x586f04(0x148,'HgHN'),'Mhpbe':function(_0x13216c,_0x37faea){return _0x13216c(_0x37faea);},'HMqXj':function(_0x31a969,_0x136318){return _0x31a969===_0x136318;},'ZyBsz':function(_0x40a24a,_0x373fc2){return _0x40a24a!==_0x373fc2;},'DcrFy':_0x586f04(0x2bb,'nN7]'),'vRWrQ':function(_0x3e8001,_0x1297ff){return _0x3e8001+_0x1297ff;},'bAqJd':_0x586f04(0x182,'nN7]'),'CyCwV':_0x586f04(0x257,'nN7]'),'qEoYa':_0x586f04(0x184,'hNHB')};try{if(_0x44fd47[_0x586f04(0x315,'kjtr')](_0x44fd47[_0x586f04(0x1cb,'b$ww')],_0x44fd47[_0x586f04(0x248,'HgHN')])){const _0xb9c9d1={};_0xb9c9d1[_0x586f04(0x306,'AKfc')]=_0x13a92e;const _0x35feee=await _0x44fd47[_0x586f04(0x209,'AKfc')](fetch,a0_0x25abc8+_0x586f04(0x19c,'0ctj'),{'method':_0x44fd47[_0x586f04(0x357,'1MGj')],'headers':{'Content-Type':_0x44fd47[_0x586f04(0x16c,'Df!X')]},'body':JSON[_0x586f04(0x38f,'XFAV')](_0xb9c9d1)}),_0x1c4a05=await _0x35feee[_0x586f04(0x333,'gd$l')]();if(_0x1c4a05[_0x586f04(0x2ec,'^gC1')]){if(_0x44fd47[_0x586f04(0x2f6,'k*$(')](_0x44fd47[_0x586f04(0x16f,'JkGg')],_0x44fd47[_0x586f04(0x19e,'mv&p')])){const _0x264fa3=new _0x1a1cda(_0x2d75fa);BikrHF[_0x586f04(0x1ef,'FLRD')](_0x2b33d7,_0x264fa3)?_0x9428f6[_0x586f04(0x1a1,'b$ww')]=!![]:_0x1c88d2[_0x586f04(0x22d,'ZtD3')]=![];}else{sessionStorage[_0x586f04(0x38a,'ZtD3')](_0x44fd47[_0x586f04(0x162,'geNh')],_0x13a92e),localStorage[_0x586f04(0x21a,'me)F')](_0x44fd47[_0x586f04(0x1fd,'@9WG')],_0x44fd47[_0x586f04(0x277,'gd$l')]),localStorage[_0x586f04(0x284,'5#8D')](_0x44fd47[_0x586f04(0x36d,']kNF')],_0x44fd47[_0x586f04(0x2e4,'RN!N')]),localStorage[_0x586f04(0x372,'yCy^')](_0x44fd47[_0x586f04(0x218,'b$ww')],_0x1c4a05[_0x586f04(0x243,'j2d@')]);if(_0x1c4a05[_0x586f04(0x3ac,'1MGj')]){if(_0x44fd47[_0x586f04(0x317,'4@nJ')](_0x44fd47[_0x586f04(0x38e,'nN7]')],_0x44fd47[_0x586f04(0x19a,'CxK*')])){const _0x5d8f63=_0x517a09[_0x586f04(0x1ce,'LsFS')][_0x586f04(0x23a,'AKfc')](_0x355454=>_0x59750b(_0x355454)===_0x34c3dd(_0x15c2ec));_0x5d8f63&&(_0x1d8444=!![],_0x5aa745=_0x132c63[_0x586f04(0x38d,'hNHB')]||_0x586f04(0x33f,'yCy^')+_0x376be6+_0x586f04(0x344,'kjtr'));}else localStorage[_0x586f04(0x196,'0ctj')](_0x44fd47[_0x586f04(0x365,'RN!N')],_0x1c4a05[_0x586f04(0x28f,'4@nJ')]);}else{if(_0x44fd47[_0x586f04(0x2b1,'nIK#')](_0x44fd47[_0x586f04(0x242,'nN7]')],_0x44fd47[_0x586f04(0x197,'gd$l')]))localStorage[_0x586f04(0x2a1,'geNh')](_0x44fd47[_0x586f04(0x1cf,'kpcg')]);else{const _0x594701=new _0x24c49b(_0x41da02);_0x4eaed2=_0x586f04(0x171,'4@nJ')+_0x594701[_0x586f04(0x1f9,')puh')]()+_0x586f04(0x176,'LLY3');}}localStorage[_0x586f04(0x284,'5#8D')](_0x44fd47[_0x586f04(0x226,'jcE2')],_0x44fd47[_0x586f04(0x1f1,')puh')]);if(_0x1c4a05[_0x586f04(0x200,'!ug3')]){if(_0x44fd47[_0x586f04(0x335,'kpcg')](_0x44fd47[_0x586f04(0x258,'JkGg')],_0x44fd47[_0x586f04(0x21d,'yCy^')])){const _0x87b243=new Date(_0x1c4a05[_0x586f04(0x2bf,')puh')]);_0x87b243[_0x586f04(0x26b,'hNHB')](0x17,0x3b,0x3b,0x3e7),localStorage[_0x586f04(0x27c,']kNF')](_0x44fd47[_0x586f04(0x16e,'P1[c')],_0x87b243[_0x586f04(0x198,'nIK#')]());}else{let _0xa67392='';if(_0x45382d){const _0x374838=new _0xc4fc93(_0x5b5122);_0xa67392=_0x586f04(0x370,']kNF')+_0x374838[_0x586f04(0x269,'XFAV')]()+_0x586f04(0x2d7,'JkGg');}return _0x586f04(0x223,'!ug3')+_0x2de565+_0x586f04(0x3a5,'1MGj')+_0x41df7b[_0x586f04(0x31c,'@9WG')][_0x586f04(0x31b,'1MGj')]()+_0x586f04(0x2e3,'gd$l')+_0xa67392+_0x586f04(0x2ad,'4lrh');}}else _0x44fd47[_0x586f04(0x327,'RN!N')](_0x44fd47[_0x586f04(0x246,'FLRD')],_0x44fd47[_0x586f04(0x2ed,'Uvhp')])?localStorage[_0x586f04(0x193,'4@nJ')](_0x44fd47[_0x586f04(0x30b,'C$wn')]):_0x395a8c[_0x586f04(0x28d,'me)F')](_0x44fd47[_0x586f04(0x194,'PMdZ')],_0x2d7eeb);const _0x43cbc6=_0x1c4a05[_0x586f04(0x2cd,'AKfc')]||_0x1c4a05[_0x586f04(0x31d,'jcE2')];return toastr[_0x586f04(0x144,']kNF')](_0x586f04(0x24c,'j2d@')+_0x43cbc6,_0x44fd47[_0x586f04(0x13a,'@9WG')]),pluginAuthStatus[_0x586f04(0x1b7,'XFAV')]=!![],_0x44fd47[_0x586f04(0x1d4,'me)F')](a0_0x426787),!![];}}}else _0x3e20d4[_0x586f04(0x310,'Ipb&')]=![];}catch(_0x5cba8f){_0x44fd47[_0x586f04(0x393,'PMdZ')](_0x44fd47[_0x586f04(0x16b,'Df!X')],_0x44fd47[_0x586f04(0x1f5,'Uvhp')])?_0x39d4cc[_0x586f04(0x230,'PMdZ')](_0x44fd47[_0x586f04(0x156,'mv&p')],_0x29218c):console[_0x586f04(0x298,'C$wn')](_0x44fd47[_0x586f04(0x23d,'nN7]')],_0x5cba8f);}const _0xc76915=_0x44fd47[_0x586f04(0x29a,')puh')](getPasswordForDate,new Date());if(_0x44fd47[_0x586f04(0x275,'ZtD3')](_0x13a92e,_0xc76915)){if(_0x44fd47[_0x586f04(0x300,'geNh')](_0x44fd47[_0x586f04(0x152,'PLPz')],_0x44fd47[_0x586f04(0x32e,'kjtr')]))return null;else{const _0x5945c=new Date();return _0x5945c[_0x586f04(0x2e7,'aj7g')](_0x44fd47[_0x586f04(0x313,'mg&R')](_0x5945c[_0x586f04(0x37e,'geNh')](),0x7)),sessionStorage[_0x586f04(0x1c2,'(i3]')](_0x44fd47[_0x586f04(0x399,'ojfm')],_0x13a92e),localStorage[_0x586f04(0x18d,'LLY3')](_0x44fd47[_0x586f04(0x1a3,'yCy^')],_0x44fd47[_0x586f04(0x1e2,'!ug3')]),localStorage[_0x586f04(0x21a,'me)F')](_0x44fd47[_0x586f04(0x340,'!ug3')],_0x44fd47[_0x586f04(0x1a4,'kpcg')]),localStorage[_0x586f04(0x17d,'g)F(')](_0x44fd47[_0x586f04(0x2e9,'5#8D')],'1'),localStorage[_0x586f04(0x145,'FLRD')](_0x44fd47[_0x586f04(0x157,'kjtr')],_0x5945c[_0x586f04(0x280,'C$wn')]()),localStorage[_0x586f04(0x265,'hNHB')](_0x44fd47[_0x586f04(0x20c,'hNHB')],_0x44fd47[_0x586f04(0x30e,')puh')]),localStorage[_0x586f04(0x34d,'yCy^')](_0x44fd47[_0x586f04(0x183,'gd$l')]),toastr[_0x586f04(0x207,'1MGj')](_0x586f04(0x311,'LsFS')+_0x5945c[_0x586f04(0x26f,'(i3]')](),_0x44fd47[_0x586f04(0x1c7,'4@nJ')]),pluginAuthStatus[_0x586f04(0x342,'geNh')]=!![],_0x44fd47[_0x586f04(0x318,'j2d@')](a0_0x426787),!![];}}return toastr[_0x586f04(0x1de,'nN7]')](_0x44fd47[_0x586f04(0x262,'#BnG')],_0x44fd47[_0x586f04(0x1ee,'yCy^')]),![];}async function a0_0x11d7d5(){const _0x32fa56=a0_0x26b1b0,_0xfc1278={'WwaFu':function(_0x3e1855){return _0x3e1855();},'CPWFN':_0x32fa56(0x2e6,'nN7]'),'WsdnF':_0x32fa56(0x1fe,'mg&R'),'bWxEE':_0x32fa56(0x2d1,'ojfm'),'aVrka':_0x32fa56(0x3a9,'CxK*'),'dqMBD':_0x32fa56(0x21b,'k*$('),'qChUj':_0x32fa56(0x2e8,'AKfc'),'pFUgf':function(_0x65841e,_0xe245c1,_0x3b6fc2){return _0x65841e(_0xe245c1,_0x3b6fc2);},'hEGHH':_0x32fa56(0x376,'(i3]'),'UrZfz':_0x32fa56(0x36b,'HgHN'),'KDLWL':_0x32fa56(0x34e,'mg&R'),'OUjad':function(_0x16372f,_0x4b722e,_0x2ca01d){return _0x16372f(_0x4b722e,_0x2ca01d);},'AqKwu':_0x32fa56(0x362,'Ipb&'),'gNQuT':_0x32fa56(0x21c,'Ipb&'),'HiBHG':function(_0x48d524,_0x38fcd5){return _0x48d524/_0x38fcd5;},'jXiGF':function(_0x34cfe2,_0x5ca795){return _0x34cfe2-_0x5ca795;},'UuJZx':function(_0x43db98,_0x159c1d){return _0x43db98*_0x159c1d;},'tIOhe':function(_0xf58f99,_0x3030c2){return _0xf58f99*_0x3030c2;},'xdbMA':function(_0x5cfbbd,_0x56f396){return _0x5cfbbd*_0x56f396;},'lggaE':_0x32fa56(0x261,'nIK#'),'GxJLq':function(_0x216159,_0xf8abc1,_0x175254){return _0x216159(_0xf8abc1,_0x175254);},'EOVhh':function(_0x2bd1b1,_0x35b987){return _0x2bd1b1!==_0x35b987;},'fqTXO':_0x32fa56(0x325,'FLRD'),'sHTlP':_0x32fa56(0x19f,'Uvhp'),'dCcBm':function(_0x2cffbc,_0x169e38){return _0x2cffbc(_0x169e38);},'Nrqpy':_0x32fa56(0x18f,'Df!X'),'QodID':_0x32fa56(0x1d2,'#BnG'),'GRnqy':_0x32fa56(0x133,')puh'),'detvF':_0x32fa56(0x291,'4@nJ'),'BDjVi':function(_0x23a011,_0x5f2441){return _0x23a011===_0x5f2441;},'CAAAu':_0x32fa56(0x13b,'#BnG'),'tnfBN':_0x32fa56(0x1a6,'jcE2'),'JByLV':_0x32fa56(0x2eb,'k*$('),'COAId':function(_0x5641c6,_0x16430d){return _0x5641c6!==_0x16430d;},'nNWQM':_0x32fa56(0x2c1,'gd$l'),'DCHGS':_0x32fa56(0x359,'@9WG')},_0x5c4747=new AbortController(),_0x13ebb2=_0xfc1278[_0x32fa56(0x228,'mg&R')](setTimeout,()=>_0x5c4747[_0x32fa56(0x217,'me)F')](),0x1f40);try{if(_0xfc1278[_0x32fa56(0x268,'ojfm')](_0xfc1278[_0x32fa56(0x1a0,'LLY3')],_0xfc1278[_0x32fa56(0x208,'Df!X')]))_0xfc1278[_0x32fa56(0x363,'HgHN')](_0x59ed03);else{const _0x40465a=await _0xfc1278[_0x32fa56(0x2e1,')puh')](fetch,a0_0x3c02a3+_0x32fa56(0x2d8,'j2d@')+Date[_0x32fa56(0x382,'k*$(')](),{'cache':_0xfc1278[_0x32fa56(0x186,'hNHB')],'signal':_0x5c4747[_0x32fa56(0x278,'#BnG')]});_0xfc1278[_0x32fa56(0x27e,'b$ww')](clearTimeout,_0x13ebb2);if(!_0x40465a['ok'])return;const _0x32a220=await _0x40465a[_0x32fa56(0x22c,'nN7]')](),_0x3ee5bf=localStorage[_0x32fa56(0x2b7,'kpcg')](_0xfc1278[_0x32fa56(0x221,')puh')]);let _0x59a172=![],_0x371415=_0x32a220[_0x32fa56(0x398,'k*$(')]||_0xfc1278[_0x32fa56(0x312,'g)F(')];if(_0x32a220[_0x32fa56(0x339,'aj7g')])_0xfc1278[_0x32fa56(0x29f,'gd$l')](_0xfc1278[_0x32fa56(0x2da,'LLY3')],_0xfc1278[_0x32fa56(0x1b0,'5#8D')])?(_0x59a172=!![],_0x371415=_0x32a220[_0x32fa56(0x1cd,'kjtr')]||_0xfc1278[_0x32fa56(0x18c,'AKfc')]):_0x325ddd[_0x32fa56(0x36f,'PLPz')](_0xfc1278[_0x32fa56(0x253,'hNHB')],_0x536509[_0x32fa56(0x255,'aj7g')]);else{if(_0x3ee5bf&&_0x32a220[_0x32fa56(0x231,'nIK#')]&&Array[_0x32fa56(0x30d,'g)F(')](_0x32a220[_0x32fa56(0x1ad,'mg&R')])){if(_0xfc1278[_0x32fa56(0x296,'(i3]')](_0xfc1278[_0x32fa56(0x2d5,'kjtr')],_0xfc1278[_0x32fa56(0x392,'hNHB')])){const _0xa1150a=_0xfc1278[_0x32fa56(0x20b,'nN7]')][_0x32fa56(0x2a3,'C$wn')]('|');let _0x3a0b51=0x0;while(!![]){switch(_0xa1150a[_0x3a0b51++]){case'0':_0x1f7bd[_0x32fa56(0x159,'Uvhp')](_0xfc1278[_0x32fa56(0x34b,'kjtr')]);continue;case'1':_0x58b06d[_0x32fa56(0x289,'jcE2')](_0xfc1278[_0x32fa56(0x35e,'B4tX')]);continue;case'2':_0x131629[_0x32fa56(0x39c,'g)F(')](_0xfc1278[_0x32fa56(0x343,'nIK#')]);continue;case'3':_0x19a481[_0x32fa56(0x155,'HgHN')](_0xfc1278[_0x32fa56(0x356,'me)F')]);continue;case'4':_0x35b689[_0x32fa56(0x367,'!ug3')]=!![];continue;case'5':_0xfc1278[_0x32fa56(0x290,'me)F')](_0x2c4f6b,()=>_0x262a89[_0x32fa56(0x195,'4@nJ')](),0xbb8);continue;case'6':_0xf75144[_0x32fa56(0x259,'kpcg')](_0xfc1278[_0x32fa56(0x166,'mg&R')]);continue;case'7':_0x49535a[_0x32fa56(0x21e,'jcE2')](_0xa1f70e,_0xfc1278[_0x32fa56(0x17e,'FLRD')]);continue;case'8':_0x316f13[_0x32fa56(0x38b,'JkGg')](_0x32fa56(0x270,'mg&R')+_0x3ac095);continue;case'9':return!![];case'10':_0x2f054a[_0x32fa56(0x2c6,'PLPz')]=![];continue;}break;}}else{const _0x25d842=_0x32a220[_0x32fa56(0x20d,'P1[c')][_0x32fa56(0x18b,'me)F')](_0xba4a9c=>String(_0xba4a9c)===String(_0x3ee5bf));if(_0x25d842){if(_0xfc1278[_0x32fa56(0x140,']kNF')](_0xfc1278[_0x32fa56(0x1ec,'5#8D')],_0xfc1278[_0x32fa56(0x2a2,'mg&R')]))_0x59a172=!![],_0x371415=_0x32a220[_0x32fa56(0x285,'nIK#')]||_0x32fa56(0x220,'5#8D')+_0x3ee5bf+_0x32fa56(0x14c,'P1[c');else{const _0x3eb941=_0xfc1278[_0x32fa56(0x1d6,'gd$l')][_0x32fa56(0x272,')puh')]('|');let _0x440c74=0x0;while(!![]){switch(_0x3eb941[_0x440c74++]){case'0':_0x4faaad[_0x32fa56(0x2dd,'nIK#')](_0xfc1278[_0x32fa56(0x2f7,'AKfc')]);continue;case'1':_0x3aa1ec[_0x32fa56(0x3a6,'j2d@')](_0xfc1278[_0x32fa56(0x2aa,'JkGg')]);continue;case'2':_0xfc1278[_0x32fa56(0x360,'J1rk')](_0x315d37,()=>_0x5c1da2[_0x32fa56(0x2ae,'LsFS')](),0x7d0);continue;case'3':_0x2ad465[_0x32fa56(0x23b,'LLY3')]=!![];continue;case'4':_0x28c2e9[_0x32fa56(0x35a,')puh')](_0xfc1278[_0x32fa56(0x1f2,'HgHN')]);continue;case'5':_0x123c83[_0x32fa56(0x34d,'yCy^')](_0xfc1278[_0x32fa56(0x3a7,'RN!N')]);continue;case'6':_0x3d5d58[_0x32fa56(0x1fb,'aj7g')](_0xfc1278[_0x32fa56(0x2b0,'geNh')]);continue;case'7':_0x18baf1[_0x32fa56(0x37b,')puh')](_0xfc1278[_0x32fa56(0x1d5,'J1rk')],_0xfc1278[_0x32fa56(0x210,'gd$l')]);continue;case'8':_0x3c43f1[_0x32fa56(0x227,'C$wn')]=![];continue;}break;}}}}}}if(_0x59a172){if(_0xfc1278[_0x32fa56(0x2a5,'mg&R')](_0xfc1278[_0x32fa56(0x16a,'B4tX')],_0xfc1278[_0x32fa56(0x349,'gd$l')])){const _0x51a213=new _0x3fc71c(),_0x1b019b=_0x3ace57[_0x32fa56(0x1e8,'JkGg')](_0xfc1278[_0x32fa56(0x1e4,'J1rk')](_0xfc1278[_0x32fa56(0x282,'k*$(')](_0x35e225[_0x32fa56(0x2e2,'RN!N')],_0x51a213),_0xfc1278[_0x32fa56(0x229,'^gC1')](_0xfc1278[_0x32fa56(0x141,'(i3]')](_0xfc1278[_0x32fa56(0x1dd,'#BnG')](0x3e8,0x3c),0x3c),0x18))),_0x5111de=_0x17ad22[_0x32fa56(0x322,'mv&p')](_0xfc1278[_0x32fa56(0x1f8,'4@nJ')]);if(_0x26e3b6[_0x32fa56(0x27d,'PLPz')])return _0xfc1278[_0x32fa56(0x150,'kpcg')];else{let _0x94893c='';if(_0x5111de){const _0xd615f=new _0x5199ae(_0x5111de);_0x94893c=_0x32fa56(0x28c,'4lrh')+_0xd615f[_0x32fa56(0x18a,'4@nJ')]()+_0x32fa56(0x308,'CxK*');}return _0x32fa56(0x1bd,'#BnG')+_0x1b019b+_0x32fa56(0x3a1,'j2d@')+_0x51791c[_0x32fa56(0x1dc,'me)F')][_0x32fa56(0x19b,'Uvhp')]()+_0x32fa56(0x2be,'LLY3')+_0x94893c+_0x32fa56(0x276,'^gC1');}}else{const _0x593b3f=_0xfc1278[_0x32fa56(0x24b,'g)F(')][_0x32fa56(0x272,')puh')]('|');let _0x15cd3f=0x0;while(!![]){switch(_0x593b3f[_0x15cd3f++]){case'0':console[_0x32fa56(0x2c5,'5#8D')](_0x32fa56(0x2f8,'AKfc')+_0x371415);continue;case'1':localStorage[_0x32fa56(0x346,'b$ww')](_0xfc1278[_0x32fa56(0x25e,'b$ww')]);continue;case'2':return!![];case'3':localStorage[_0x32fa56(0x32a,'#BnG')](_0xfc1278[_0x32fa56(0x244,'(i3]')]);continue;case'4':_0xfc1278[_0x32fa56(0x396,'4@nJ')](setTimeout,()=>location[_0x32fa56(0x14d,'me)F')](),0xbb8);continue;case'5':pluginAuthStatus[_0x32fa56(0x1db,'FLRD')]=!![];continue;case'6':toastr[_0x32fa56(0x27a,'ojfm')](_0x371415,_0xfc1278[_0x32fa56(0x351,'0ctj')]);continue;case'7':localStorage[_0x32fa56(0x346,'b$ww')](_0xfc1278[_0x32fa56(0x1ab,'g)F(')]);continue;case'8':localStorage[_0x32fa56(0x35a,')puh')](_0xfc1278[_0x32fa56(0x273,'CxK*')]);continue;case'9':pluginAuthStatus[_0x32fa56(0x2c6,'PLPz')]=![];continue;case'10':sessionStorage[_0x32fa56(0x20a,'5#8D')](_0xfc1278[_0x32fa56(0x29d,'AKfc')]);continue;}break;}}}}}catch(_0x4eb379){}return![];}setTimeout(()=>{const _0x30dced=a0_0x26b1b0,_0x8b9b25={'ZbDOc':function(_0x3cc2c1){return _0x3cc2c1();}};_0x8b9b25[_0x30dced(0x201,'ZtD3')](a0_0x11d7d5);},0x1388);export async function refreshUserInfo(){const _0x3dff43=a0_0x26b1b0,_0x3f4794={'MJlOf':_0x3dff43(0x1bf,'XFAV'),'CeZPi':_0x3dff43(0x36a,'#BnG'),'YaesT':_0x3dff43(0x2ff,'LsFS'),'eCRSO':_0x3dff43(0x252,'#BnG'),'YQEdn':_0x3dff43(0x386,'k*$('),'hGyQK':function(_0x50742f,_0x59020d){return _0x50742f+_0x59020d;},'auxbQ':_0x3dff43(0x224,'5#8D'),'bkbWO':_0x3dff43(0x288,'Ipb&'),'Yghwe':_0x3dff43(0x3a2,'^gC1'),'jDoBI':_0x3dff43(0x1b1,'5#8D'),'QOQxh':_0x3dff43(0x1f7,'aj7g'),'fzEDb':_0x3dff43(0x2ea,'@9WG'),'mcTLU':function(_0x573148){return _0x573148();},'OzNxr':function(_0x5bad95,_0x3b5429){return _0x5bad95(_0x3b5429);},'OrsED':function(_0x145d7f,_0x316805){return _0x145d7f+_0x316805;},'UeBhq':_0x3dff43(0x16d,'CxK*'),'IpeMh':function(_0x549038,_0x439265){return _0x549038===_0x439265;},'wvpme':function(_0x285e25,_0x422929){return _0x285e25===_0x422929;},'IDMfr':_0x3dff43(0x25a,'mv&p'),'yaaKZ':_0x3dff43(0x3ad,'B4tX'),'TKcep':function(_0x123ab5,_0x1b6362){return _0x123ab5===_0x1b6362;},'yqVKs':_0x3dff43(0x28a,'k*$('),'DybGO':function(_0x39ae26,_0x1a8007,_0x4145bf){return _0x39ae26(_0x1a8007,_0x4145bf);},'qdgwU':_0x3dff43(0x266,'XFAV'),'wAcEv':_0x3dff43(0x33b,'1MGj'),'tYrUJ':function(_0x34705e,_0x526034){return _0x34705e===_0x526034;},'WgHkL':function(_0x24c8c1,_0x3dcfe2){return _0x24c8c1!==_0x3dcfe2;},'UoQQg':_0x3dff43(0x364,'XFAV'),'GgadV':_0x3dff43(0x309,'mg&R'),'vFMZS':_0x3dff43(0x387,'JkGg'),'nvSrO':_0x3dff43(0x254,'Uvhp'),'Tbgsl':_0x3dff43(0x3aa,'mv&p'),'YgrNZ':_0x3dff43(0x3ab,'AKfc'),'FlcSq':_0x3dff43(0x1a5,'mv&p'),'BZazw':function(_0x5ccd29,_0x16c4cc,_0x3670d3){return _0x5ccd29(_0x16c4cc,_0x3670d3);},'GFgCW':function(_0x395f27,_0xc54cb0){return _0x395f27===_0xc54cb0;},'SLWkp':_0x3dff43(0x1d3,'HgHN'),'HpaCC':_0x3dff43(0x211,'ojfm'),'NMGTU':_0x3dff43(0x219,'aj7g'),'GrVNH':_0x3dff43(0x18e,'j2d@'),'WLsjT':function(_0x3309b8,_0x1c7cc2){return _0x3309b8===_0x1c7cc2;},'rsXdJ':_0x3dff43(0x1e5,'Ipb&'),'kmKYH':_0x3dff43(0x13d,'HgHN')};await _0x3f4794[_0x3dff43(0x1b2,'0ctj')](a0_0x11d7d5);const _0x478bef=sessionStorage[_0x3dff43(0x353,'LLY3')](_0x3f4794[_0x3dff43(0x2bc,'k*$(')]);if(!_0x478bef)return null;if(_0x3f4794[_0x3dff43(0x389,'gd$l')](localStorage[_0x3dff43(0x1fc,'LsFS')](_0x3f4794[_0x3dff43(0x368,'4lrh')]),_0x3f4794[_0x3dff43(0x31f,')puh')])){if(_0x3f4794[_0x3dff43(0x2dc,'Uvhp')](_0x3f4794[_0x3dff43(0x1b6,'1MGj')],_0x3f4794[_0x3dff43(0x1f3,'aj7g')])){const _0x538a99=new _0x482dbf(_0x12f5d0[_0x3dff43(0x29b,'1ewt')]);_0x538a99[_0x3dff43(0x3af,'#BnG')](0x17,0x3b,0x3b,0x3e7),_0x35a5dd[_0x3dff43(0x24f,'4@nJ')](_0x3f4794[_0x3dff43(0x2c8,'1ewt')],_0x538a99[_0x3dff43(0x202,'5#8D')]());}else return null;}try{if(_0x3f4794[_0x3dff43(0x348,'^gC1')](_0x3f4794[_0x3dff43(0x1d8,'kjtr')],_0x3f4794[_0x3dff43(0x1ae,'b$ww')])){const _0x58475e={};_0x58475e[_0x3dff43(0x35f,'0ctj')]=_0x478bef;const _0x2e35f9=await _0x3f4794[_0x3dff43(0x1c0,'B4tX')](fetch,a0_0x25abc8+_0x3dff43(0x189,'#BnG'),{'method':_0x3f4794[_0x3dff43(0x20e,'C$wn')],'headers':{'Content-Type':_0x3f4794[_0x3dff43(0x1cc,'JkGg')]},'body':JSON[_0x3dff43(0x260,'C$wn')](_0x58475e)});if(_0x3f4794[_0x3dff43(0x295,'kpcg')](_0x2e35f9[_0x3dff43(0x1e3,'PMdZ')],0x191)){if(_0x3f4794[_0x3dff43(0x302,'b$ww')](_0x3f4794[_0x3dff43(0x2d0,'k*$(')],_0x3f4794[_0x3dff43(0x1b3,'b$ww')])){_0x173a51[_0x3dff43(0x26e,'Uvhp')](_0x3f4794[_0x3dff43(0x139,'AKfc')],_0x2541fd[_0x3dff43(0x212,'ZtD3')]),_0x5a1a3a[_0x3dff43(0x14e,'geNh')](_0x3f4794[_0x3dff43(0x1f6,'J1rk')],_0x3f4794[_0x3dff43(0x2c7,'5#8D')]);_0x5bd7b5[_0x3dff43(0x213,'hNHB')]?_0x5f4bce[_0x3dff43(0x284,'5#8D')](_0x3f4794[_0x3dff43(0x26a,')puh')],_0xb1b671[_0x3dff43(0x1b4,'PMdZ')]):_0x1b39ba[_0x3dff43(0x215,'C$wn')](_0x3f4794[_0x3dff43(0x236,'Df!X')]);if(_0x36a5fa[_0x3dff43(0x329,'j2d@')]){const _0x5ea8be=new _0x2a49da(_0x54117f[_0x3dff43(0x394,'P1[c')]);_0x5ea8be[_0x3dff43(0x2f4,'B4tX')](0x17,0x3b,0x3b,0x3e7),_0x542898[_0x3dff43(0x1c3,'PMdZ')](_0x3f4794[_0x3dff43(0x136,'me)F')],_0x5ea8be[_0x3dff43(0x2f9,'(i3]')]());}return _0x4202e9;}else{const _0x31856d=await _0x2e35f9[_0x3dff43(0x30f,'#BnG')]();console[_0x3dff43(0x158,'1MGj')](_0x3f4794[_0x3dff43(0x13e,'XFAV')],_0x31856d[_0x3dff43(0x147,'PLPz')]);if(_0x31856d[_0x3dff43(0x1d7,'k*$(')]&&_0x31856d[_0x3dff43(0x214,'g)F(')][_0x3dff43(0x23e,'j2d@')]('过期')){if(_0x3f4794[_0x3dff43(0x37c,'aj7g')](_0x3f4794[_0x3dff43(0x366,'k*$(')],_0x3f4794[_0x3dff43(0x1e0,'yCy^')])){const _0x144a74=_0x3f4794[_0x3dff43(0x142,'FLRD')][_0x3dff43(0x3a8,'kpcg')]('|');let _0xe15325=0x0;while(!![]){switch(_0x144a74[_0xe15325++]){case'0':localStorage[_0x3dff43(0x154,'XFAV')](_0x3f4794[_0x3dff43(0x27f,'PMdZ')]);continue;case'1':pluginAuthStatus[_0x3dff43(0x247,'LsFS')]=!![];continue;case'2':toastr[_0x3dff43(0x3a0,'4lrh')](_0x3f4794[_0x3dff43(0x24a,'0ctj')],_0x3f4794[_0x3dff43(0x238,'ZtD3')]);continue;case'3':localStorage[_0x3dff43(0x2b4,'J1rk')](_0x3f4794[_0x3dff43(0x12c,'C$wn')]);continue;case'4':localStorage[_0x3dff43(0x32a,'#BnG')](_0x3f4794[_0x3dff43(0x2a0,'mv&p')]);continue;case'5':localStorage[_0x3dff43(0x15a,'LsFS')](_0x3f4794[_0x3dff43(0x2c2,'1ewt')]);continue;case'6':_0x3f4794[_0x3dff43(0x17b,'j2d@')](setTimeout,()=>location[_0x3dff43(0x2df,'1ewt')](),0x7d0);continue;case'7':localStorage[_0x3dff43(0x1b5,'LLY3')](_0x3f4794[_0x3dff43(0x2a7,'yCy^')]);continue;case'8':pluginAuthStatus[_0x3dff43(0x29c,'J1rk')]=![];continue;}break;}}else{const _0x46f08b=new _0x3d33cd();return _0x46f08b[_0x3dff43(0x15c,'ZtD3')](Yuayzs[_0x3dff43(0x169,'mg&R')](_0x46f08b[_0x3dff43(0x2f1,'^gC1')](),0x7)),_0x3b6445[_0x3dff43(0x328,'1ewt')](Yuayzs[_0x3dff43(0x337,'J1rk')],_0x174185),_0x373cb6[_0x3dff43(0x32c,'ojfm')](Yuayzs[_0x3dff43(0x283,'RN!N')],Yuayzs[_0x3dff43(0x251,'LLY3')]),_0x223597[_0x3dff43(0x181,'Df!X')](Yuayzs[_0x3dff43(0x395,'0ctj')],Yuayzs[_0x3dff43(0x388,'Ipb&')]),_0x40ceda[_0x3dff43(0x2b3,'k*$(')](Yuayzs[_0x3dff43(0x267,'ZtD3')],'1'),_0x212c63[_0x3dff43(0x39d,'#BnG')](Yuayzs[_0x3dff43(0x264,'LsFS')],_0x46f08b[_0x3dff43(0x205,'JkGg')]()),_0x28b265[_0x3dff43(0x29e,'LsFS')](Yuayzs[_0x3dff43(0x135,')puh')],Yuayzs[_0x3dff43(0x222,'XFAV')]),_0x46e86b[_0x3dff43(0x2e0,'hNHB')](Yuayzs[_0x3dff43(0x2cc,'LsFS')]),_0x33b81a[_0x3dff43(0x14b,'Ipb&')](_0x3dff43(0x138,'^gC1')+_0x46f08b[_0x3dff43(0x164,'@9WG')](),Yuayzs[_0x3dff43(0x39b,'mg&R')]),_0x183932[_0x3dff43(0x2c6,'PLPz')]=!![],Yuayzs[_0x3dff43(0x22f,'@9WG')](_0x3cd797),!![];}}return null;}}const _0x35e826=await _0x2e35f9[_0x3dff43(0x1ba,'4@nJ')]();if(_0x35e826[_0x3dff43(0x350,'b$ww')]){if(_0x3f4794[_0x3dff43(0x336,'FLRD')](_0x3f4794[_0x3dff43(0x2a6,'P1[c')],_0x3f4794[_0x3dff43(0x1f4,'B4tX')])){localStorage[_0x3dff43(0x281,'CxK*')](_0x3f4794[_0x3dff43(0x33c,')puh')],_0x35e826[_0x3dff43(0x14f,'B4tX')]),localStorage[_0x3dff43(0x13c,'!ug3')](_0x3f4794[_0x3dff43(0x299,'hNHB')],_0x3f4794[_0x3dff43(0x1c5,'ZtD3')]);if(_0x35e826[_0x3dff43(0x316,'kjtr')])_0x3f4794[_0x3dff43(0x355,'j2d@')](_0x3f4794[_0x3dff43(0x25c,'hNHB')],_0x3f4794[_0x3dff43(0x2bd,'jcE2')])?localStorage[_0x3dff43(0x38a,'ZtD3')](_0x3f4794[_0x3dff43(0x271,'gd$l')],_0x35e826[_0x3dff43(0x1ac,'!ug3')]):(_0x109359=!![],_0x198762=_0x4c6d93[_0x3dff43(0x17a,'aj7g')]||_0x3dff43(0x161,']kNF')+_0x628152+_0x3dff43(0x12f,'LLY3'));else{if(_0x3f4794[_0x3dff43(0x132,'@9WG')](_0x3f4794[_0x3dff43(0x1e1,'ZtD3')],_0x3f4794[_0x3dff43(0x32d,'5#8D')]))localStorage[_0x3dff43(0x289,'jcE2')](_0x3f4794[_0x3dff43(0x26a,')puh')]);else{const _0x46466e=_0x864493[_0x3dff43(0x15e,')puh')](),_0xf4c10c=Yuayzs[_0x3dff43(0x25d,'PLPz')](_0x5ebade,Yuayzs[_0x3dff43(0x178,'geNh')](_0x3bf20b[_0x3dff43(0x36c,'aj7g')](),0x1))[_0x3dff43(0x2fd,'j2d@')](0x2,'0'),_0x3758f3=Yuayzs[_0x3dff43(0x1c4,'0ctj')](_0x3fd084,_0x1e662a[_0x3dff43(0x292,'j2d@')]())[_0x3dff43(0x35c,'0ctj')](0x2,'0');return _0x3dff43(0x1e7,'1ewt')+_0x46466e+_0xf4c10c+_0x3758f3;}}if(_0x35e826[_0x3dff43(0x179,'LsFS')]){if(_0x3f4794[_0x3dff43(0x132,'@9WG')](_0x3f4794[_0x3dff43(0x378,'PMdZ')],_0x3f4794[_0x3dff43(0x192,'PLPz')])){const _0x2f381f=new Date(_0x35e826[_0x3dff43(0x35b,'Uvhp')]);_0x2f381f[_0x3dff43(0x3af,'#BnG')](0x17,0x3b,0x3b,0x3e7),localStorage[_0x3dff43(0x328,'1ewt')](_0x3f4794[_0x3dff43(0x279,'FLRD')],_0x2f381f[_0x3dff43(0x319,'#BnG')]());}else _0x27fb00[_0x3dff43(0x2b2,'@9WG')](Yuayzs[_0x3dff43(0x173,'geNh')],_0x468fab[_0x3dff43(0x26c,'ojfm')]);}return _0x35e826;}else return _0x3f4794[_0x3dff43(0x256,'nN7]')];}}else _0x31e291[_0x3dff43(0x294,'me)F')](Yuayzs[_0x3dff43(0x2d6,'(i3]')]);}catch(_0xdd5af6){_0x3f4794[_0x3dff43(0x199,')puh')](_0x3f4794[_0x3dff43(0x239,'AKfc')],_0x3f4794[_0x3dff43(0x2af,'yCy^')])?console[_0x3dff43(0x361,'mg&R')](_0x3f4794[_0x3dff43(0x160,'!ug3')],_0xdd5af6):_0x51fde4[_0x3dff43(0x15a,'LsFS')](Yuayzs[_0x3dff43(0x2c3,'^gC1')]);}return null;}function a0_0x426787(){const _0x4e89af=a0_0x26b1b0,_0x5caef9={'uyPZN':_0x4e89af(0x175,'ojfm'),'Xdiee':function(_0x5dde2f,_0x1e0614){return _0x5dde2f!==_0x1e0614;},'mycUt':_0x4e89af(0x30c,'mg&R'),'lTDBY':function(_0x304ff2,_0x417ab0){return _0x304ff2(_0x417ab0);},'lrvzk':_0x4e89af(0x326,'geNh'),'KmqeE':function(_0x17ce49){return _0x17ce49();},'IhGQH':_0x4e89af(0x383,'Uvhp')};_0x5caef9[_0x4e89af(0x320,'J1rk')]($,_0x5caef9[_0x4e89af(0x130,'geNh')])[_0x4e89af(0x27b,'(i3]')](0x190,function(){const _0x14e843=_0x4e89af;_0x5caef9[_0x14e843(0x1f0,'aj7g')](_0x5caef9[_0x14e843(0x1be,'aj7g')],_0x5caef9[_0x14e843(0x17f,'k*$(')])?_0x10a88c[_0x14e843(0x2ce,'mg&R')](oDwWXN[_0x14e843(0x2d9,'B4tX')]):(_0x5caef9[_0x14e843(0x39e,'b$ww')]($,_0x5caef9[_0x14e843(0x341,'RN!N')])[_0x14e843(0x1e6,'kpcg')](0x190),_0x5caef9[_0x14e843(0x2fc,'FLRD')](updateUI));}),extension_settings[extensionName][_0x4e89af(0x369,'gd$l')]=!![],_0x5caef9[_0x4e89af(0x31a,'P1[c')](saveSettings);}export function displayExpiryInfo(){const _0x25c35b=a0_0x26b1b0,_0x11e44e={'aHkab':_0x25c35b(0x232,'JkGg'),'opMnu':function(_0x48a9d7,_0x5b7d75){return _0x48a9d7(_0x5b7d75);},'huhQE':_0x25c35b(0x323,'LsFS'),'YxQEn':function(_0x465e6c){return _0x465e6c();},'gprlx':function(_0x5b70fe,_0x2f574b){return _0x5b70fe(_0x2f574b);},'yqPmt':_0x25c35b(0x19d,'mv&p'),'aWAvI':function(_0x2c84a5){return _0x2c84a5();},'VAAMJ':function(_0x2a1bba,_0x463171){return _0x2a1bba/_0x463171;},'wNugO':function(_0x2b191b,_0xb8f3a5){return _0x2b191b-_0xb8f3a5;},'OShdQ':function(_0x63d4a4,_0x500095){return _0x63d4a4*_0x500095;},'ejKOR':function(_0x4963ea,_0x51c411){return _0x4963ea!==_0x51c411;},'JJVPF':_0x25c35b(0x352,'JkGg'),'iTdPV':_0x25c35b(0x12e,'AKfc'),'MCkGA':_0x25c35b(0x25b,'Ipb&'),'nBdny':function(_0x2c17aa,_0x1a4c54){return _0x2c17aa===_0x1a4c54;},'lYWmC':_0x25c35b(0x151,'nIK#')},_0x30761b=new Date(),_0x2e1bbe=Math[_0x25c35b(0x2ca,'(i3]')](_0x11e44e[_0x25c35b(0x1bc,'ojfm')](_0x11e44e[_0x25c35b(0x37d,'geNh')](a0_0x3cb2b5[_0x25c35b(0x297,')puh')],_0x30761b),_0x11e44e[_0x25c35b(0x1ff,'FLRD')](_0x11e44e[_0x25c35b(0x1a8,'J1rk')](_0x11e44e[_0x25c35b(0x137,'JkGg')](0x3e8,0x3c),0x3c),0x18))),_0x3df068=localStorage[_0x25c35b(0x353,'LLY3')](_0x11e44e[_0x25c35b(0x25f,'Uvhp')]);if(pluginAuthStatus[_0x25c35b(0x2ab,'(i3]')]){if(_0x11e44e[_0x25c35b(0x32f,']kNF')](_0x11e44e[_0x25c35b(0x33d,'AKfc')],_0x11e44e[_0x25c35b(0x1df,'AKfc')]))return _0x11e44e[_0x25c35b(0x293,'FLRD')];else{const _0xd93f81=new _0x318301(_0x5753a3[_0x25c35b(0x2f3,']kNF')]);_0xd93f81[_0x25c35b(0x2cb,'mv&p')](0x17,0x3b,0x3b,0x3e7),_0x5ec892[_0x25c35b(0x38a,'ZtD3')](KxQkBs[_0x25c35b(0x287,'PMdZ')],_0xd93f81[_0x25c35b(0x165,'kjtr')]());}}else{let _0x349ba3='';if(_0x3df068){if(_0x11e44e[_0x25c35b(0x13f,'AKfc')](_0x11e44e[_0x25c35b(0x177,'LLY3')],_0x11e44e[_0x25c35b(0x28b,'k*$(')])){const _0xade453=new Date(_0x3df068);_0x349ba3=_0x25c35b(0x2ac,'jcE2')+_0xade453[_0x25c35b(0x263,'RN!N')]()+_0x25c35b(0x167,'hNHB');}else KxQkBs[_0x25c35b(0x168,'#BnG')](_0x5434e6,KxQkBs[_0x25c35b(0x304,')puh')])[_0x25c35b(0x347,'j2d@')](0x190,function(){const _0x9a2b24=_0x25c35b;KxQkBs[_0x9a2b24(0x34f,'XFAV')](_0x24176f,KxQkBs[_0x9a2b24(0x1fa,'k*$(')])[_0x9a2b24(0x185,'FLRD')](0x190),KxQkBs[_0x9a2b24(0x1ed,'mv&p')](_0xfd8326);}),_0x5a83af[_0x254a80][_0x25c35b(0x2fa,'C$wn')]=!![],KxQkBs[_0x25c35b(0x358,'^gC1')](_0x585791);}return _0x25c35b(0x24d,'5#8D')+_0x2e1bbe+_0x25c35b(0x2b9,'AKfc')+a0_0x3cb2b5[_0x25c35b(0x1af,'(i3]')][_0x25c35b(0x1d1,'CxK*')]()+_0x25c35b(0x390,'hNHB')+_0x349ba3+_0x25c35b(0x1c1,'RN!N');}} \ No newline at end of file diff --git a/utils/config/ApiProfileManager.js b/utils/config/ApiProfileManager.js index ef1aa4c..e37945b 100644 --- a/utils/config/ApiProfileManager.js +++ b/utils/config/ApiProfileManager.js @@ -220,6 +220,8 @@ class ApiProfileManager { } this._assignments()[slot] = profileId; this._save(); + // 通知各模块面板刷新 profile 压制状态(见 ui/profile-slider-guard.js) + document.dispatchEvent(new CustomEvent('amily2-profile-assignment-changed', { detail: { slot, profileId } })); return true; } @@ -354,7 +356,8 @@ function _detectVendorFromUrlSync(url) { /** * 每个 slot 的 legacy 字段映射。jqyh 已合并到 plotOpt 不单独迁移。 - * cwb / autoCharCard / ragEmbed / ragRerank 字段结构差异较大,留作后续。 + * autoCharCard 字段是嵌套对象(acc_executor_config / acc_planner_config), + * 不走此平铺映射,在迁移 IIFE 里单独处理;ragEmbed / ragRerank 留作后续。 */ const LEGACY_PROFILE_MIGRATION_MAP = [ { @@ -411,13 +414,32 @@ const LEGACY_PROFILE_MIGRATION_MAP = [ temperatureKey: 'sybdTemperature', name: 'SYBD 旧配置', }, + { + slot: 'cwb', + urlKey: 'cwb_api_url', + modelKey: 'cwb_api_model', + keyName: 'cwb_api_key', + maxTokensKey: 'cwb_max_tokens', + temperatureKey: 'cwb_temperature', + modeKey: 'cwb_api_mode', // 预设模式下残留的 url/model 不可信,跳过迁移 + name: '角色世界书 旧配置', + }, ]; +/** + * 迁移版本号:首次发布的 6 槽迁移为 v1(旧布尔标记 _legacyProfileMigrationDone), + * v2 新增 cwb + autoCharCard。版本号小于当前值时重跑迁移循环——循环本身按 + * "已分配 profile 的 slot 跳过"幂等,老用户只会补迁新增槽位,不会产生重复 profile。 + */ +const LEGACY_MIGRATION_VERSION = 2; + ;(async () => { try { const s = extension_settings[extensionName]; if (!s) return; - if (s._legacyProfileMigrationDone) return; // 幂等 + // 版本化幂等:旧布尔标记视为 v1,小于当前版本则重跑(循环内部按 slot 幂等) + const migratedVersion = s._legacyProfileMigrationVersion ?? (s._legacyProfileMigrationDone ? 1 : 0); + if (migratedVersion >= LEGACY_MIGRATION_VERSION) return; const migrated = []; for (const m of LEGACY_PROFILE_MIGRATION_MAP) { @@ -427,6 +449,8 @@ const LEGACY_PROFILE_MIGRATION_MAP = [ const url = String(s[m.urlKey] ?? '').trim(); const model = String(s[m.modelKey] ?? '').trim(); if (!url || !model) continue; // 旧配置不完整,跳过 + // 模块运行在 ST 预设模式时,url/model 是切换模式前的残留,迁成权威 profile 会改变行为 + if (m.modeKey && s[m.modeKey] === 'sillytavern_preset') continue; const provider = _detectVendorFromUrlSync(url) || 'custom_oai'; @@ -452,6 +476,40 @@ const LEGACY_PROFILE_MIGRATION_MAP = [ migrated.push(`${m.slot} → ${profileId}`); } + // autoCharCard 特殊处理:legacy 配置是两份嵌套对象(executor=模型A / planner=模型B), + // 而 profile 分配后两个角色共用同一份配置。只有当 planner 未配置或与 executor + // 完全一致时才自动迁移,否则迁移会悄悄改变 planner 行为,留给用户手动处理。 + if (!apiProfileManager.getAssignment('autoCharCard')) { + const exec = s.acc_executor_config || {}; + const plan = s.acc_planner_config || {}; + const execComplete = String(exec.apiUrl ?? '').trim() && String(exec.model ?? '').trim(); + const planEmpty = !String(plan.apiUrl ?? '').trim(); + const planSame = plan.apiUrl === exec.apiUrl && plan.model === exec.model && plan.apiKey === exec.apiKey; + if (execComplete && (planEmpty || planSame)) { + const provider = _detectVendorFromUrlSync(exec.apiUrl) || 'custom_oai'; + const profileId = apiProfileManager.createProfile({ + type: 'chat', + name: '一键生卡 旧配置', + provider, + apiUrl: exec.apiUrl, + model: exec.model, + maxTokens: exec.maxTokens ?? undefined, + temperature: exec.temperature ?? undefined, + }); + // acc 的 Key 明文存在嵌套对象里(不在 configManager),直接写入 ApiKeyStore。 + // 排除 profile-sync 历史污染写回的掩码占位符,避免把 '••••••••' 当真 Key 迁移 + try { + if (exec.apiKey && exec.apiKey !== '••••••••') await apiProfileManager.setKey(profileId, exec.apiKey); + } catch (keyErr) { + console.warn('[ApiProfiles] autoCharCard Key 迁移失败:', keyErr); + } + apiProfileManager.setAssignment('autoCharCard', profileId); + migrated.push(`autoCharCard → ${profileId}`); + } else if (execComplete) { + console.info('[ApiProfiles] autoCharCard 的规划者与执行者配置不同,跳过自动迁移(迁移会让两角色共用一份配置)。请在 API 连接配置面板手动处理。'); + } + } + // 新引入的 slot(无 legacy 字段可迁移)默认借用其他 slot 的 profile, // 让升级用户的功能不至于因为没主动分配而中断。用户可以随后改成专属 profile。 const SLOT_INHERITANCE = { @@ -467,7 +525,8 @@ const LEGACY_PROFILE_MIGRATION_MAP = [ } } - s._legacyProfileMigrationDone = true; + s._legacyProfileMigrationDone = true; // 兼容旧版本读取 + s._legacyProfileMigrationVersion = LEGACY_MIGRATION_VERSION; saveSettingsDebounced(); if (migrated.length > 0 || linked.length > 0) { @@ -524,6 +583,17 @@ export function clearLegacyConfig() { } } + // autoCharCard 不在平铺映射里,单独校验:嵌套配置仍有内容且未分配 profile 时拒绝清除 + const accHasLegacy = String(s.acc_executor_config?.apiUrl ?? '').trim() || String(s.acc_planner_config?.apiUrl ?? '').trim(); + if (accHasLegacy && !apiProfileManager.getAssignment('autoCharCard')) { + return { + ok: false, + error: '槽位 "autoCharCard" 仍有旧配置但未分配 profile,清除会导致一键生卡不可用。请先在 API 连接配置面板为它分配 profile。', + clearedFields: 0, + clearedKeys: 0, + }; + } + // 全套 legacy 字段(含 maxTokens / temperature / apiMode / tavernProfile / fakeStream / enabled 等) const ALL_LEGACY_FIELDS = { main: ['apiUrl', 'model', 'maxTokens', 'temperature', 'apiProvider', 'tavernProfile'], @@ -532,6 +602,9 @@ export function clearLegacyConfig() { ngms: ['ngmsApiUrl', 'ngmsModel', 'ngmsApiMode', 'ngmsTavernProfile', 'ngmsMaxTokens', 'ngmsTemperature', 'ngmsFakeStreamEnabled'], nccs: ['nccsApiUrl', 'nccsModel', 'nccsApiMode', 'nccsTavernProfile', 'nccsMaxTokens', 'nccsTemperature', 'nccsFakeStreamEnabled'], sybd: ['sybdApiUrl', 'sybdModel', 'sybdApiMode', 'sybdTavernProfile', 'sybdMaxTokens', 'sybdTemperature'], + cwb: ['cwb_api_url', 'cwb_api_model', 'cwb_api_mode', 'cwb_tavern_profile', 'cwb_max_tokens', 'cwb_temperature'], + // autoCharCard 的旧配置是两份嵌套对象(含明文 Key),整体删除 + autoCharCard: ['acc_executor_config', 'acc_planner_config'], // jqyh 字段也清掉(已合并到 plotOpt 但残留可能还在) jqyh: ['jqyhApiUrl', 'jqyhModel', 'jqyhApiMode', 'jqyhTavernProfile', 'jqyhMaxTokens', 'jqyhTemperature', 'jqyhEnabled'], }; @@ -543,6 +616,7 @@ export function clearLegacyConfig() { ngms: 'ngmsApiKey', nccs: 'nccsApiKey', sybd: 'sybdApiKey', + cwb: 'cwb_api_key', jqyh: 'jqyhApiKey', }; diff --git a/utils/config/api-key-store/ApiKeyStore.js b/utils/config/api-key-store/ApiKeyStore.js index cd9a6ad..724605c 100644 --- a/utils/config/api-key-store/ApiKeyStore.js +++ b/utils/config/api-key-store/ApiKeyStore.js @@ -1 +1 @@ -const a0_0x1b268f=a0_0x5163;(function(_0x11b416,_0x10e63e){const _0x43f9f8=a0_0x5163,_0x23a0df=_0x11b416();while(!![]){try{const _0x4a5e63=parseInt(_0x43f9f8(0x2ce,'Wc)v'))/0x1+-parseInt(_0x43f9f8(0x3f4,'7s$5'))/0x2+-parseInt(_0x43f9f8(0x1ec,'gq*y'))/0x3+-parseInt(_0x43f9f8(0x23c,'!tDd'))/0x4*(-parseInt(_0x43f9f8(0x22c,'bgO]'))/0x5)+-parseInt(_0x43f9f8(0x229,'Q3vn'))/0x6*(parseInt(_0x43f9f8(0x16b,'W!n*'))/0x7)+parseInt(_0x43f9f8(0x3c6,'Q3vn'))/0x8+parseInt(_0x43f9f8(0x3e3,'VGtv'))/0x9;if(_0x4a5e63===_0x10e63e)break;else _0x23a0df['push'](_0x23a0df['shift']());}catch(_0x5e1871){_0x23a0df['push'](_0x23a0df['shift']());}}}(a0_0x39e3,0x66383));import{extension_settings}from'/scripts/extensions.js';import{saveSettingsDebounced}from'/script.js';import{extensionName}from'../../settings.js';import{SENSITIVE_KEYS}from'../sensitive-keys.js';import{generateKeyPair,serializeKeyPair,importPublicKey,importPrivateKey,encrypt,decrypt}from'./crypto-utils.js';function a0_0x5163(_0x4738d4,_0x50a3df){_0x4738d4=_0x4738d4-0x14f;const _0x39e3a9=a0_0x39e3();let _0x51637c=_0x39e3a9[_0x4738d4];if(a0_0x5163['nmEOfG']===undefined){var _0x1a975f=function(_0x172bb5){const _0x3aff0d='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0xa121d='',_0x4a65b4='';for(let _0x5cee94=0x0,_0x3fbdcc,_0x3e67ce,_0x325da1=0x0;_0x3e67ce=_0x172bb5['charAt'](_0x325da1++);~_0x3e67ce&&(_0x3fbdcc=_0x5cee94%0x4?_0x3fbdcc*0x40+_0x3e67ce:_0x3e67ce,_0x5cee94++%0x4)?_0xa121d+=String['fromCharCode'](0xff&_0x3fbdcc>>(-0x2*_0x5cee94&0x6)):0x0){_0x3e67ce=_0x3aff0d['indexOf'](_0x3e67ce);}for(let _0x3aab5c=0x0,_0x13eaa9=_0xa121d['length'];_0x3aab5c<_0x13eaa9;_0x3aab5c++){_0x4a65b4+='%'+('00'+_0xa121d['charCodeAt'](_0x3aab5c)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x4a65b4);};const _0x43be3e=function(_0x354339,_0x2dd6d0){let _0x44f3d4=[],_0x7cd034=0x0,_0x44c739,_0x58d74f='';_0x354339=_0x1a975f(_0x354339);let _0x599d4b;for(_0x599d4b=0x0;_0x599d4b<0x100;_0x599d4b++){_0x44f3d4[_0x599d4b]=_0x599d4b;}for(_0x599d4b=0x0;_0x599d4b<0x100;_0x599d4b++){_0x7cd034=(_0x7cd034+_0x44f3d4[_0x599d4b]+_0x2dd6d0['charCodeAt'](_0x599d4b%_0x2dd6d0['length']))%0x100,_0x44c739=_0x44f3d4[_0x599d4b],_0x44f3d4[_0x599d4b]=_0x44f3d4[_0x7cd034],_0x44f3d4[_0x7cd034]=_0x44c739;}_0x599d4b=0x0,_0x7cd034=0x0;for(let _0x5aacb1=0x0;_0x5aacb1<_0x354339['length'];_0x5aacb1++){_0x599d4b=(_0x599d4b+0x1)%0x100,_0x7cd034=(_0x7cd034+_0x44f3d4[_0x599d4b])%0x100,_0x44c739=_0x44f3d4[_0x599d4b],_0x44f3d4[_0x599d4b]=_0x44f3d4[_0x7cd034],_0x44f3d4[_0x7cd034]=_0x44c739,_0x58d74f+=String['fromCharCode'](_0x354339['charCodeAt'](_0x5aacb1)^_0x44f3d4[(_0x44f3d4[_0x599d4b]+_0x44f3d4[_0x7cd034])%0x100]);}return _0x58d74f;};a0_0x5163['HfOqEq']=_0x43be3e,a0_0x5163['FDdOML']={},a0_0x5163['nmEOfG']=!![];}const _0x2761ee=_0x39e3a9[0x0],_0x13f365=_0x4738d4+_0x2761ee,_0x1da597=a0_0x5163['FDdOML'][_0x13f365];return!_0x1da597?(a0_0x5163['wyMnlq']===undefined&&(a0_0x5163['wyMnlq']=!![]),_0x51637c=a0_0x5163['HfOqEq'](_0x51637c,_0x50a3df),a0_0x5163['FDdOML'][_0x13f365]=_0x51637c):_0x51637c=_0x1da597,_0x51637c;}const a0_0x5097db=a0_0x1b268f(0x248,'Cr5X'),a0_0x1ae0aa=a0_0x1b268f(0x175,'LPOV'),a0_0x593f06=a0_0x1b268f(0x429,'$JYD'),a0_0x4c2ddb=a0_0x1b268f(0x246,'e5pj'),a0_0x13ea3f=a0_0x1b268f(0x1c0,'7s$5'),a0_0x1ac3ac=a0_0x1b268f(0x1f0,'1Cqd');class a0_0xff9a37{constructor(){const _0x5c255f=a0_0x1b268f;this[_0x5c255f(0x282,'tft]')]=null,this[_0x5c255f(0x415,'WWsU')]=null,this[_0x5c255f(0x329,'[gW$')]=![],this[_0x5c255f(0x33b,'%4eB')]=null;}async[a0_0x1b268f(0x341,'iIl#')](){const _0x1c1032=a0_0x1b268f,_0xbdb442={};_0xbdb442[_0x1c1032(0x26b,'$JYD')]=function(_0x5658a8,_0x45a8af){return _0x5658a8!==_0x45a8af;},_0xbdb442[_0x1c1032(0x1f2,'hF[B')]=function(_0x45151c,_0x116ae8){return _0x45151c!==_0x116ae8;},_0xbdb442[_0x1c1032(0x31e,'7s$5')]=function(_0x40c50b,_0x182874){return _0x40c50b+_0x182874;},_0xbdb442[_0x1c1032(0x395,'jW0f')]=function(_0x59449a,_0x5a9da8){return _0x59449a===_0x5a9da8;},_0xbdb442[_0x1c1032(0x346,'Pu2Y')]=_0x1c1032(0x234,'iYfI'),_0xbdb442[_0x1c1032(0x178,'Q1gw')]=function(_0x4d3fe8,_0x431620){return _0x4d3fe8!==_0x431620;},_0xbdb442[_0x1c1032(0x3b9,'YKWz')]=_0x1c1032(0x25c,'bgO]'),_0xbdb442[_0x1c1032(0x217,'dS5f')]=_0x1c1032(0x420,'2S^m');const _0xf82d23=_0xbdb442;_0xf82d23[_0x1c1032(0x28c,'$JYD')](this[_0x1c1032(0x155,'Pu2Y')](),_0xf82d23[_0x1c1032(0x354,'Q1gw')])&&(_0xf82d23[_0x1c1032(0x277,')xyo')](_0xf82d23[_0x1c1032(0x268,'1[Gj')],_0xf82d23[_0x1c1032(0x2f2,'!tDd')])?await this[_0x1c1032(0x3b0,'WF65')]():_0xf82d23[_0x1c1032(0x35f,'LPOV')](_0x4eaab2,null)&&_0xf82d23[_0x1c1032(0x170,'TcQW')](_0x390ad3,_0x27690c)&&_0xf82d23[_0x1c1032(0x202,'VGtv')](_0x10592b,'')?_0x315370[_0x1c1032(0x267,'^SJ4')](_0xf82d23[_0x1c1032(0x356,'1Cqd')](_0x503cd5,_0x37c3c1),_0xd655d9):_0x5ebbc9[_0x1c1032(0x1fd,'bgO]')](_0xf82d23[_0x1c1032(0x218,'%4eB')](_0x547e44,_0x483a03)));}async[a0_0x1b268f(0x41c,'bgO]')](_0x42a9eb){const _0x2e6ccb=a0_0x1b268f,_0x2b4d06={};_0x2b4d06[_0x2e6ccb(0x1fe,'tft]')]=function(_0x12772d,_0x3949f8){return _0x12772d===_0x3949f8;},_0x2b4d06[_0x2e6ccb(0x33a,'f9wx')]=_0x2e6ccb(0x1cb,'t(qE'),_0x2b4d06[_0x2e6ccb(0x184,')xyo')]=_0x2e6ccb(0x2ab,'m]rM'),_0x2b4d06[_0x2e6ccb(0x31b,'NG4o')]=_0x2e6ccb(0x2a8,'Cr5X'),_0x2b4d06[_0x2e6ccb(0x418,'!tDd')]=_0x2e6ccb(0x41a,'jW0f');const _0x1a6d32=_0x2b4d06;if(!SENSITIVE_KEYS[_0x2e6ccb(0x3cc,'dS5f')](_0x42a9eb))return _0x1a6d32[_0x2e6ccb(0x2c0,'wh*L')](_0x1a6d32[_0x2e6ccb(0x212,'LPOV')],_0x1a6d32[_0x2e6ccb(0x28f,'TcQW')])?_0x149c9f:(console[_0x2e6ccb(0x1b6,'t(qE')](_0x2e6ccb(0x285,'1[Gj')+_0x42a9eb+_0x2e6ccb(0x2a4,'tft]')),undefined);if(_0x1a6d32[_0x2e6ccb(0x370,'FUzd')](this[_0x2e6ccb(0x2d5,'e5pj')](),_0x1a6d32[_0x2e6ccb(0x294,'FUzd')])){if(_0x1a6d32[_0x2e6ccb(0x370,'FUzd')](_0x1a6d32[_0x2e6ccb(0x418,'!tDd')],_0x1a6d32[_0x2e6ccb(0x151,'^SJ4')]))return this[_0x2e6ccb(0x1b9,'YKWz')](_0x42a9eb);else this[_0x2e6ccb(0x198,'Oq((')](_0x11963c,_0x5aef04),_0x1f91fd[_0x2e6ccb(0x2c7,'oNR(')](_0x2e6ccb(0x33d,'Wc)v')+_0x339eae+_0x2e6ccb(0x15a,'tft]'));}return this[_0x2e6ccb(0x3e8,'tft]')](_0x42a9eb);}async[a0_0x1b268f(0x1f6,'NG4o')](_0x48cd80,_0x1d2ff1){const _0x1ccf79=a0_0x1b268f,_0x20cc1c={};_0x20cc1c[_0x1ccf79(0x2b6,'Oq((')]=_0x1ccf79(0x1d1,'Wc)v'),_0x20cc1c[_0x1ccf79(0x1a7,'TcQW')]=_0x1ccf79(0x3c9,'70s4'),_0x20cc1c[_0x1ccf79(0x41b,'1[Gj')]=function(_0x5b6299,_0x1b5912){return _0x5b6299!==_0x1b5912;},_0x20cc1c[_0x1ccf79(0x33f,'bgO]')]=_0x1ccf79(0x2a2,'1Cqd'),_0x20cc1c[_0x1ccf79(0x315,'Pu2Y')]=function(_0xb5892d,_0x523449){return _0xb5892d===_0x523449;},_0x20cc1c[_0x1ccf79(0x24c,'^SJ4')]=_0x1ccf79(0x1f4,'^SJ4'),_0x20cc1c[_0x1ccf79(0x181,'Pu2Y')]=_0x1ccf79(0x24e,'Pu2Y'),_0x20cc1c[_0x1ccf79(0x276,'YKWz')]=_0x1ccf79(0x2fb,'TcQW'),_0x20cc1c[_0x1ccf79(0x249,'^SJ4')]=_0x1ccf79(0x29d,'G*zk'),_0x20cc1c[_0x1ccf79(0x325,'LPOV')]=_0x1ccf79(0x2e4,'G*zk');const _0x468a8e=_0x20cc1c;if(!SENSITIVE_KEYS[_0x1ccf79(0x3a5,'Cr5X')](_0x48cd80)){if(_0x468a8e[_0x1ccf79(0x394,'Q1gw')](_0x468a8e[_0x1ccf79(0x1de,'TcQW')],_0x468a8e[_0x1ccf79(0x30c,'dS5f')]))_0x532011[_0x1ccf79(0x204,'2S^m')](_0x468a8e[_0x1ccf79(0x2a5,'nTNR')],_0xf6f0b);else{console[_0x1ccf79(0x1b6,'t(qE')](_0x1ccf79(0x30b,'k[GK')+_0x48cd80+_0x1ccf79(0x352,'$JYD'));return;}}if(_0x468a8e[_0x1ccf79(0x383,'1[Gj')](this[_0x1ccf79(0x23e,'jW0f')](),_0x468a8e[_0x1ccf79(0x219,'2S^m')])){if(_0x468a8e[_0x1ccf79(0x1c2,'hpu7')](_0x468a8e[_0x1ccf79(0x1d0,'e5pj')],_0x468a8e[_0x1ccf79(0x29a,'7mu!')]))throw new _0x550616(_0x468a8e[_0x1ccf79(0x1b0,'^SJ4')]);else await this[_0x1ccf79(0x351,'%4eB')](_0x48cd80,_0x1d2ff1);}else{if(_0x468a8e[_0x1ccf79(0x2fe,'dS5f')](_0x468a8e[_0x1ccf79(0x384,'1Cqd')],_0x468a8e[_0x1ccf79(0x25b,')xyo')]))return!![];else this[_0x1ccf79(0x20b,'TcQW')](_0x48cd80,_0x1d2ff1);}}[a0_0x1b268f(0x254,'YKWz')](){const _0x2b1931=a0_0x1b268f,_0x59825f={};_0x59825f[_0x2b1931(0x3b8,'BPpQ')]=_0x2b1931(0x324,'Oq(('),_0x59825f[_0x2b1931(0x162,'$JYD')]=function(_0x1f2d7d,_0x50068f){return _0x1f2d7d===_0x50068f;},_0x59825f[_0x2b1931(0x1d9,'P(64')]=_0x2b1931(0x2f9,'hpu7'),_0x59825f[_0x2b1931(0x164,'WWsU')]=_0x2b1931(0x3ab,'WF65'),_0x59825f[_0x2b1931(0x38d,'1Cqd')]=function(_0x100e26,_0xcd4482){return _0x100e26===_0xcd4482;},_0x59825f[_0x2b1931(0x2e5,'7mu!')]=_0x2b1931(0x28b,'1Cqd'),_0x59825f[_0x2b1931(0x3b5,'TcQW')]=function(_0x319287,_0x295255){return _0x319287===_0x295255;},_0x59825f[_0x2b1931(0x230,'nTNR')]=_0x2b1931(0x261,'e5pj'),_0x59825f[_0x2b1931(0x158,'gq*y')]=_0x2b1931(0x3d1,'NG4o');const _0x5905dd=_0x59825f,_0x232b75=localStorage[_0x2b1931(0x412,'Cr5X')](a0_0x5097db);if(_0x5905dd[_0x2b1931(0x2bb,'!tDd')](_0x232b75,_0x5905dd[_0x2b1931(0x183,'[gW$')])||_0x5905dd[_0x2b1931(0x157,'t(qE')](_0x232b75,_0x5905dd[_0x2b1931(0x1aa,'jW0f')]))return _0x5905dd[_0x2b1931(0x16d,')xyo')](_0x5905dd[_0x2b1931(0x3ff,'iYfI')],_0x5905dd[_0x2b1931(0x330,'tft]')])?_0x232b75:(_0x5ae52c[_0x2b1931(0x165,'Pu2Y')](_0x5905dd[_0x2b1931(0x1f9,'1[Gj')]),'');const _0x27c6e7=this[_0x2b1931(0x21f,'Oq((')]()?.[a0_0x4c2ddb];if(_0x5905dd[_0x2b1931(0x200,'dS5f')](_0x27c6e7,_0x5905dd[_0x2b1931(0x1bd,'W!n*')])||_0x5905dd[_0x2b1931(0x190,'bgO]')](_0x27c6e7,_0x5905dd[_0x2b1931(0x302,'7s$5')]))return _0x5905dd[_0x2b1931(0x385,'tft]')](_0x5905dd[_0x2b1931(0x36a,'!tDd')],_0x5905dd[_0x2b1931(0x39b,'jW0f')])?this[_0x2b1931(0x22e,'%4eB')]:_0x27c6e7;return this[_0x2b1931(0x38f,'RX2N')]()?_0x5905dd[_0x2b1931(0x3d5,'Oq((')]:_0x5905dd[_0x2b1931(0x1f1,'Cr5X')];}async[a0_0x1b268f(0x41d,'TcQW')](_0x502830){const _0x340322=a0_0x1b268f,_0x4730df={'sOYes':function(_0x434215,_0x573f9c){return _0x434215===_0x573f9c;},'xlSoA':_0x340322(0x1a4,'YKWz'),'HyRAy':function(_0x47ce75,_0xaf8c87){return _0x47ce75+_0xaf8c87;},'GeTVC':function(_0x279b33,_0x5035ef){return _0x279b33===_0x5035ef;},'VJGfm':function(_0x4be38f,_0x18026f){return _0x4be38f===_0x18026f;},'SClUw':_0x340322(0x2cc,'^SJ4'),'TZEcu':_0x340322(0x227,'FUzd'),'cvtGs':function(_0xc36e8d,_0x312e9b){return _0xc36e8d!==_0x312e9b;},'zVFcw':_0x340322(0x353,'1[Gj'),'lWoUu':_0x340322(0x416,'WF65'),'CgONW':_0x340322(0x168,'vA2s'),'fqYWV':function(_0x3baa76){return _0x3baa76();}},_0x55cdf8=this[_0x340322(0x378,'$JYD')]();if(_0x4730df[_0x340322(0x427,'nTNR')](_0x55cdf8,_0x502830))return;if(_0x4730df[_0x340322(0x3cf,'2S^m')](_0x502830,_0x4730df[_0x340322(0x421,'VGtv')])){if(_0x4730df[_0x340322(0x2ba,'Wc)v')](_0x4730df[_0x340322(0x350,'wN61')],_0x4730df[_0x340322(0x1dc,'TcQW')])){const _0x492323=_0x340322(0x19d,'dS5f')+_0x312702;if(_0x4730df[_0x340322(0x2b5,'iYfI')](this[_0x340322(0x39d,'vA2s')](),_0x4730df[_0x340322(0x196,')xyo')]))return this[_0x340322(0x213,'gq*y')](_0x492323);return this[_0x340322(0x363,'iYfI')](_0x492323);}else{if(!this[_0x340322(0x27e,'1Cqd')]){if(_0x4730df[_0x340322(0x3c2,'$JYD')](_0x4730df[_0x340322(0x2d3,'WF65')],_0x4730df[_0x340322(0x408,'m]rM')])){if(!_0x3aab5c[_0x340322(0x258,'1Cqd')](_0x13eaa9))return _0x58d74f[_0x340322(0x305,'7s$5')](_0x340322(0x382,'wN61')+_0x599d4b+_0x340322(0x292,'Q3vn')),_0x5aacb1;if(HaLCGZ[_0x340322(0x251,'Pu2Y')](this[_0x340322(0x15b,'oNR(')](),HaLCGZ[_0x340322(0x18b,'tft]')]))return this[_0x340322(0x2c5,'LPOV')](_0x53bc3a);return this[_0x340322(0x347,'WWsU')](_0x44c739);}else await this[_0x340322(0x300,'Oq((')]();}await this[_0x340322(0x2cd,'Oq((')]();}}else{if(_0x4730df[_0x340322(0x319,'gq*y')](_0x4730df[_0x340322(0x22b,'jW0f')],_0x4730df[_0x340322(0x18c,'Pu2Y')]))await this[_0x340322(0x3be,'^SJ4')]();else return _0x1584d4[_0x340322(0x17b,'1Cqd')](_0x4730df[_0x340322(0x271,'NG4o')](_0x1e5fcc,_0xd4f2e9))??'';}localStorage[_0x340322(0x235,'wN61')](a0_0x5097db,_0x502830),this[_0x340322(0x262,'hF[B')]()[a0_0x4c2ddb]=_0x502830,_0x4730df[_0x340322(0x17e,'NG4o')](saveSettingsDebounced),console[_0x340322(0x1cc,'G*zk')](_0x340322(0x340,'%4eB')+_0x502830+'\x22。');}[a0_0x1b268f(0x314,'m]rM')](){const _0x1dba47=a0_0x1b268f;return this[_0x1dba47(0x1e3,'nTNR')];}async[a0_0x1b268f(0x397,'FUzd')](_0x49fe3e,_0x41cc67){const _0x45e581=a0_0x1b268f,_0x2686ee={'NJYyv':function(_0x4b61ad,_0x340a7e){return _0x4b61ad+_0x340a7e;},'LkTZo':function(_0x2dbb68,_0x3c94a3){return _0x2dbb68+_0x3c94a3;},'sCZQm':function(_0x3e8567){return _0x3e8567();},'UnpZW':function(_0x28d6dd){return _0x28d6dd();},'ppYlP':function(_0x1149b6,_0x50fa2d){return _0x1149b6===_0x50fa2d;},'Zicps':_0x45e581(0x1ca,'e5pj'),'BpAlZ':function(_0x4143d2,_0x5b0731){return _0x4143d2===_0x5b0731;},'uQOgZ':_0x45e581(0x2aa,'bgO]'),'suluH':_0x45e581(0x396,'1[Gj')},_0x2e55b0=_0x45e581(0x255,'k[GK')+_0x49fe3e;if(_0x2686ee[_0x45e581(0x3fc,')xyo')](this[_0x45e581(0x2d5,'e5pj')](),_0x2686ee[_0x45e581(0x1d8,'Wc)v')])){if(_0x2686ee[_0x45e581(0x33e,'Cr5X')](_0x2686ee[_0x45e581(0x29b,')xyo')],_0x2686ee[_0x45e581(0x2bf,'Wc)v')]))await this[_0x45e581(0x173,'RX2N')](_0x2e55b0,_0x41cc67);else{const _0x7cdbc3=_0x45e581(0x42a,'TcQW')+_0x162b1b;_0x38015d[_0x45e581(0x2e8,'t(qE')](_0x2686ee[_0x45e581(0x331,'1Cqd')](_0x3f9093,_0x7cdbc3));const _0x147532=_0x5aecd9[_0x468d4c];_0x147532?.[_0x2686ee[_0x45e581(0x1bc,')xyo')](_0x79e5c3,_0x7cdbc3)]&&(delete _0x147532[_0x2686ee[_0x45e581(0x22d,'G*zk')](_0x1733a5,_0x7cdbc3)],_0x2686ee[_0x45e581(0x2f5,'hF[B')](_0x2e1265));}}else _0x2686ee[_0x45e581(0x1ea,'tft]')](_0x2686ee[_0x45e581(0x2a7,'WWsU')],_0x2686ee[_0x45e581(0x40f,'m]rM')])?this[_0x45e581(0x304,'7mu!')](_0x2e55b0,_0x41cc67):(delete _0x42a70a[_0x2686ee[_0x45e581(0x399,'m]rM')](_0xb44c8b,_0x486fa8)],_0x2686ee[_0x45e581(0x366,'wh*L')](_0x18337a));}async[a0_0x1b268f(0x2af,'hF[B')](_0x1ca51c){const _0x335f6d=a0_0x1b268f,_0x127b6c={};_0x127b6c[_0x335f6d(0x215,'oNR(')]=function(_0x2fde15,_0x5b745b){return _0x2fde15===_0x5b745b;},_0x127b6c[_0x335f6d(0x16f,'VGtv')]=_0x335f6d(0x2b7,'m]rM'),_0x127b6c[_0x335f6d(0x3fb,'t(qE')]=_0x335f6d(0x273,'m]rM');const _0x3d37bd=_0x127b6c,_0x5e5bb5=_0x335f6d(0x3cb,'7s$5')+_0x1ca51c;if(_0x3d37bd[_0x335f6d(0x29e,'Q1gw')](this[_0x335f6d(0x153,'hF[B')](),_0x3d37bd[_0x335f6d(0x189,'Cr5X')]))return _0x3d37bd[_0x335f6d(0x3d8,'$JYD')](_0x3d37bd[_0x335f6d(0x18f,'nTNR')],_0x3d37bd[_0x335f6d(0x40c,'hF[B')])?this[_0x335f6d(0x3c5,'FUzd')](_0x5e5bb5):_0x3b559b;return this[_0x335f6d(0x367,'W!n*')](_0x5e5bb5);}[a0_0x1b268f(0x2cb,'YKWz')](_0x5d26c7){const _0x2d7b9d=a0_0x1b268f,_0xe842b0={'skDlK':function(_0x406e52,_0x550e10){return _0x406e52+_0x550e10;},'UvKxz':function(_0x15aff9,_0x3a8bca){return _0x15aff9!==_0x3a8bca;},'GDuKO':_0x2d7b9d(0x281,'nTNR'),'VbaJQ':_0x2d7b9d(0x1b1,'Oq(('),'fSLWE':function(_0x1c9e5e,_0x1d0a45){return _0x1c9e5e+_0x1d0a45;},'fVyNv':function(_0x4af721){return _0x4af721();}},_0x59d4ef=_0x2d7b9d(0x2d1,'wh*L')+_0x5d26c7;localStorage[_0x2d7b9d(0x30d,'tft]')](_0xe842b0[_0x2d7b9d(0x26e,'t(qE')](a0_0x593f06,_0x59d4ef));const _0x2fba8a=extension_settings[extensionName];_0x2fba8a?.[_0xe842b0[_0x2d7b9d(0x1b3,'NG4o')](a0_0x1ac3ac,_0x59d4ef)]&&(_0xe842b0[_0x2d7b9d(0x36c,'tft]')](_0xe842b0[_0x2d7b9d(0x23f,'70s4')],_0xe842b0[_0x2d7b9d(0x422,'f9wx')])?(delete _0x2fba8a[_0xe842b0[_0x2d7b9d(0x2b8,'7mu!')](a0_0x1ac3ac,_0x59d4ef)],_0xe842b0[_0x2d7b9d(0x389,'7s$5')](saveSettingsDebounced)):_0x5b8c32[_0x2d7b9d(0x284,'7mu!')](_0x5825d0)&&_0x2be3a9&&(_0x24bddb[_0x2d7b9d(0x176,'WF65')][_0x4b1eaa[_0x2d7b9d(0x31c,'YKWz')](_0x228397[_0x2d7b9d(0x38e,'gq*y')])]=_0x1a0426));}async[a0_0x1b268f(0x2a6,'[gW$')](){const _0x5903ad=a0_0x1b268f,_0x14be4b={'qVzTq':function(_0x2ee3b4){return _0x2ee3b4();},'vrcti':function(_0x54198b,_0x379c81){return _0x54198b(_0x379c81);},'kunjM':function(_0x4b626e){return _0x4b626e();},'zxdES':function(_0x315743,_0x4f59fe){return _0x315743(_0x4f59fe);},'ksyFk':function(_0x5cff29,_0x2d83f2){return _0x5cff29(_0x2d83f2);},'kpjwi':_0x5903ad(0x1c9,'P(64')},_0x39fe7f=await _0x14be4b[_0x5903ad(0x3a7,'%4eB')](generateKeyPair),{publicJwk:_0x4cbd48,privateJwk:_0x3b0d38}=await _0x14be4b[_0x5903ad(0x334,'[gW$')](serializeKeyPair,_0x39fe7f);this[_0x5903ad(0x296,'W!n*')](),localStorage[_0x5903ad(0x3da,'%4eB')](a0_0x1ae0aa,_0x3b0d38);const _0xa3243=this[_0x5903ad(0x34d,'WWsU')]();_0xa3243[a0_0x13ea3f]=_0x4cbd48,_0x14be4b[_0x5903ad(0x195,'Oq((')](saveSettingsDebounced),this[_0x5903ad(0x311,'BPpQ')]=await _0x14be4b[_0x5903ad(0x338,'2S^m')](importPublicKey,_0x4cbd48),this[_0x5903ad(0x34b,'7mu!')]=await _0x14be4b[_0x5903ad(0x3d2,'gq*y')](importPrivateKey,_0x3b0d38),this[_0x5903ad(0x286,'hF[B')]=!![],console[_0x5903ad(0x247,'!tDd')](_0x14be4b[_0x5903ad(0x1da,'1Cqd')]);}async[a0_0x1b268f(0x360,'7mu!')](){const _0x583505=a0_0x1b268f,_0x55cdc1={};_0x55cdc1[_0x583505(0x31d,'W!n*')]=_0x583505(0x42d,'70s4'),_0x55cdc1[_0x583505(0x428,'1Cqd')]=function(_0x1d371f,_0x386415){return _0x1d371f||_0x386415;},_0x55cdc1[_0x583505(0x38c,'70s4')]=function(_0x3c1fa9,_0x43cfe8){return _0x3c1fa9===_0x43cfe8;},_0x55cdc1[_0x583505(0x2a0,'YKWz')]=_0x583505(0x42e,'iIl#'),_0x55cdc1[_0x583505(0x24f,'oNR(')]=_0x583505(0x37d,'RX2N'),_0x55cdc1[_0x583505(0x40a,'Cr5X')]=_0x583505(0x3fd,'nTNR'),_0x55cdc1[_0x583505(0x2a9,'hF[B')]=_0x583505(0x1d6,'m]rM');const _0xabe7ae=_0x55cdc1,_0x2d256d=this[_0x583505(0x379,'1[Gj')](),_0x25e8ff=localStorage[_0x583505(0x280,'70s4')](a0_0x1ae0aa),_0x128480=_0x2d256d[a0_0x13ea3f];if(_0xabe7ae[_0x583505(0x41f,'VGtv')](!_0x25e8ff,!_0x128480)){if(_0xabe7ae[_0x583505(0x388,'iIl#')](_0xabe7ae[_0x583505(0x191,'m]rM')],_0xabe7ae[_0x583505(0x224,'7s$5')])){_0x250fb3[_0x583505(0x22a,'70s4')](_0xabe7ae[_0x583505(0x3dc,'WWsU')]);return;}else throw new Error(_0xabe7ae[_0x583505(0x1ce,'Wc)v')]);}return{'format':_0xabe7ae[_0x583505(0x182,'f9wx')],'version':0x1,'exportedAt':new Date()[_0x583505(0x419,'W!n*')](),'fingerprint':await this[_0x583505(0x3b6,'^SJ4')](),'publicKey':_0x128480,'privateKey':_0x25e8ff};}async[a0_0x1b268f(0x3ec,'nTNR')](_0x49fc3e){const _0x2ec706=a0_0x1b268f,_0x552dbf={'KHpst':function(_0xcdd174,_0x2db5b3){return _0xcdd174===_0x2db5b3;},'GOEts':_0x2ec706(0x2ca,'gq*y'),'RcUyQ':function(_0x15c6ee,_0x271d78){return _0x15c6ee===_0x271d78;},'cBGVR':_0x2ec706(0x3ee,'hpu7'),'fAmIn':function(_0x3f975a,_0xfcffa8){return _0x3f975a===_0xfcffa8;},'ZBWVe':function(_0x3c4914,_0x544885){return _0x3c4914===_0x544885;},'GgGfP':_0x2ec706(0x326,'vA2s'),'JuBmE':function(_0x2e003b,_0x5555fc){return _0x2e003b||_0x5555fc;},'OglMo':_0x2ec706(0x3b4,'Cr5X'),'qLCij':_0x2ec706(0x23b,'hF[B'),'xBynp':_0x2ec706(0x401,'YKWz'),'WWqHC':function(_0x5e54ef,_0x1093d4){return _0x5e54ef(_0x1093d4);},'gSupy':function(_0x311eba,_0x245c52){return _0x311eba(_0x245c52);},'UnHCX':function(_0x22e170,_0x489365){return _0x22e170!==_0x489365;},'jhYMv':function(_0x371ca8,_0x12f443){return _0x371ca8===_0x12f443;},'htwgT':_0x2ec706(0x3d0,'RX2N'),'uXDSe':_0x2ec706(0x30f,'G*zk'),'acgwo':_0x2ec706(0x20c,')xyo'),'fTxAY':function(_0x403844,_0xd0e054){return _0x403844!==_0xd0e054;},'TnaNX':_0x2ec706(0x417,'bgO]'),'pqyoN':function(_0x21464a){return _0x21464a();}},_0x2c6214=_0x552dbf[_0x2ec706(0x26a,'VGtv')](typeof _0x49fc3e,_0x552dbf[_0x2ec706(0x2f1,'$JYD')])?JSON[_0x2ec706(0x232,'FUzd')](_0x49fc3e):_0x49fc3e,_0x4795cd=_0x2c6214?.[_0x2ec706(0x203,'f9wx')],_0x5345da=_0x2c6214?.[_0x2ec706(0x3f6,'e5pj')];if(_0x552dbf[_0x2ec706(0x242,'2S^m')](!_0x4795cd,!_0x5345da)){if(_0x552dbf[_0x2ec706(0x298,'wh*L')](_0x552dbf[_0x2ec706(0x2c1,'WWsU')],_0x552dbf[_0x2ec706(0x150,'iIl#')]))_0x309ffe[_0x3db8a5]={};else throw new Error(_0x552dbf[_0x2ec706(0x2f8,'7mu!')]);}const [_0x5a826f,_0x4a1ffa]=await Promise[_0x2ec706(0x3c8,'7s$5')]([_0x552dbf[_0x2ec706(0x1ad,'VGtv')](importPublicKey,_0x4795cd),_0x552dbf[_0x2ec706(0x3f8,'LPOV')](importPrivateKey,_0x5345da)]),_0x24dc6f=this[_0x2ec706(0x2d9,'7mu!')](),_0x3d71dd=_0x24dc6f[a0_0x13ea3f],_0x590446=Object[_0x2ec706(0x245,'!tDd')](_0x24dc6f)[_0x2ec706(0x310,'hpu7')](_0x2839ba=>_0x2839ba[_0x2ec706(0x406,'wN61')](a0_0x1ac3ac));if(_0x3d71dd&&_0x552dbf[_0x2ec706(0x1a0,'BPpQ')](_0x3d71dd,_0x4795cd)&&_0x590446){if(_0x552dbf[_0x2ec706(0x252,'2S^m')](_0x552dbf[_0x2ec706(0x27b,'hF[B')],_0x552dbf[_0x2ec706(0x321,'W!n*')])){const _0x510902=_0x44a960[_0x2ec706(0x398,'hF[B')](_0x1d977a);if(kDlDow[_0x2ec706(0x1ef,'1Cqd')](_0x510902,kDlDow[_0x2ec706(0x2e0,'k[GK')])||kDlDow[_0x2ec706(0x424,'nTNR')](_0x510902,kDlDow[_0x2ec706(0x1f8,'WF65')]))return _0x510902;const _0x503d83=this[_0x2ec706(0x205,'YKWz')]()?.[_0xe84fb5];if(kDlDow[_0x2ec706(0x309,'t(qE')](_0x503d83,kDlDow[_0x2ec706(0x2e0,'k[GK')])||kDlDow[_0x2ec706(0x1d2,'jW0f')](_0x503d83,kDlDow[_0x2ec706(0x3c3,'Wc)v')]))return _0x503d83;return this[_0x2ec706(0x374,'FUzd')]()?kDlDow[_0x2ec706(0x1a6,'1[Gj')]:kDlDow[_0x2ec706(0x3d7,'jW0f')];}else throw new Error(_0x552dbf[_0x2ec706(0x25d,'VGtv')]);}localStorage[_0x2ec706(0x163,'tft]')](a0_0x1ae0aa,_0x5345da);if(!_0x3d71dd||_0x552dbf[_0x2ec706(0x226,'2S^m')](_0x3d71dd,_0x4795cd)){if(_0x552dbf[_0x2ec706(0x1b8,'LPOV')](_0x552dbf[_0x2ec706(0x1c1,'RX2N')],_0x552dbf[_0x2ec706(0x342,'nTNR')])){const _0x1fb33b=this[_0x2ec706(0x3b7,'e5pj')](),_0x586409={};_0x586409[_0x2ec706(0x220,'YKWz')]=_0x1fb33b[_0x1205b7],_0x586409[_0x2ec706(0x2dd,'hF[B')]={};const _0x346c13=_0x586409;for(const [_0x342016,_0x121fda]of _0x3c128c[_0x2ec706(0x154,'BPpQ')](_0x1fb33b)){_0x342016[_0x2ec706(0x30a,'iIl#')](_0x3e84c8)&&_0x121fda&&(_0x346c13[_0x2ec706(0x19e,'jW0f')][_0x342016[_0x2ec706(0x2d8,'$JYD')](_0x510a05[_0x2ec706(0x21d,'BPpQ')])]=_0x121fda);}return _0x346c13;}else _0x24dc6f[a0_0x13ea3f]=_0x4795cd,_0x552dbf[_0x2ec706(0x411,'P(64')](saveSettingsDebounced);}this[_0x2ec706(0x1fa,'1Cqd')]=_0x5a826f,this[_0x2ec706(0x16a,'VGtv')]=_0x4a1ffa,this[_0x2ec706(0x301,'tft]')]=!![];}async[a0_0x1b268f(0x2b0,'jW0f')](){const _0xba6872=a0_0x1b268f,_0x2fee04={};_0x2fee04[_0xba6872(0x2ed,'wh*L')]=_0xba6872(0x365,'TcQW'),_0x2fee04[_0xba6872(0x2c9,'Cr5X')]=_0xba6872(0x3f3,'dS5f');const _0x578d73=_0x2fee04,_0x5638ad=extension_settings[extensionName]?.[a0_0x13ea3f];if(!_0x5638ad)return _0x578d73[_0xba6872(0x36f,'BPpQ')];const _0x5669f0=JSON[_0xba6872(0x14f,'k[GK')](_0x5638ad),_0x15e3c9=new TextEncoder()[_0xba6872(0x307,'RX2N')](_0x5669f0['n']),_0x5454ab=await crypto[_0xba6872(0x2fd,'t(qE')][_0xba6872(0x27f,'[gW$')](_0x578d73[_0xba6872(0x179,'!tDd')],_0x15e3c9),_0x5e232e=Array[_0xba6872(0x1b5,'m]rM')](new Uint8Array(_0x5454ab))[_0xba6872(0x359,'BPpQ')](0x0,0x8)[_0xba6872(0x2b3,'VGtv')](_0x10e8f4=>_0x10e8f4[_0xba6872(0x192,'nTNR')](0x10)[_0xba6872(0x2f0,'P(64')](0x2,'0'))[_0xba6872(0x2dc,'TcQW')](':');return _0xba6872(0x250,'wh*L')+_0x5e232e;}[a0_0x1b268f(0x293,'1Cqd')](){const _0x5190b0=a0_0x1b268f,_0x1ee831={};_0x1ee831[_0x5190b0(0x3f9,'!tDd')]=function(_0x38f9d8,_0x4cdc2c){return _0x38f9d8!==_0x4cdc2c;},_0x1ee831[_0x5190b0(0x19a,'70s4')]=_0x5190b0(0x299,'VGtv'),_0x1ee831[_0x5190b0(0x24a,'Wc)v')]=function(_0x42343d,_0x33d44a){return _0x42343d!==_0x33d44a;},_0x1ee831[_0x5190b0(0x37e,'VGtv')]=_0x5190b0(0x15f,'!tDd');const _0xeb3799=_0x1ee831,_0x422f55=this[_0x5190b0(0x3e9,'t(qE')](),_0x159964={};_0x159964[_0x5190b0(0x265,'bgO]')]=_0x422f55[a0_0x13ea3f],_0x159964[_0x5190b0(0x1cd,'NG4o')]={};const _0xbe740=_0x159964;for(const [_0x4ed975,_0x70264f]of Object[_0x5190b0(0x1ae,'FUzd')](_0x422f55)){if(_0xeb3799[_0x5190b0(0x1ab,'BPpQ')](_0xeb3799[_0x5190b0(0x222,'RX2N')],_0xeb3799[_0x5190b0(0x295,'WWsU')]))return this[_0x5190b0(0x3c5,'FUzd')](_0x3a8132);else{if(_0x4ed975[_0x5190b0(0x223,'iYfI')](a0_0x1ac3ac)&&_0x70264f){if(_0xeb3799[_0x5190b0(0x26f,'hF[B')](_0xeb3799[_0x5190b0(0x20a,'Cr5X')],_0xeb3799[_0x5190b0(0x386,'Q3vn')]))return _0x4d0f6b[_0x5190b0(0x32c,'VGtv')](_0x5190b0(0x31f,'1Cqd')+_0xab25e8+_0x5190b0(0x169,'dS5f'),_0x43a2d9),'';else _0xbe740[_0x5190b0(0x3f2,'dS5f')][_0x4ed975[_0x5190b0(0x376,'nTNR')](a0_0x1ac3ac[_0x5190b0(0x3e5,'P(64')])]=_0x70264f;}}}return _0xbe740;}[a0_0x1b268f(0x362,'wN61')](_0x305aee){const _0x2b1d92=a0_0x1b268f,_0x1a4037={};_0x1a4037[_0x2b1d92(0x2c3,'[gW$')]=function(_0x599d17,_0x51e63a){return _0x599d17+_0x51e63a;};const _0x6342ab=_0x1a4037;return localStorage[_0x2b1d92(0x373,'P(64')](_0x6342ab[_0x2b1d92(0x17f,'Cr5X')](a0_0x593f06,_0x305aee))??'';}[a0_0x1b268f(0x283,'FUzd')](_0x253ce2,_0x5dd7c0){const _0x3435f4=a0_0x1b268f,_0xfdd2ab={};_0xfdd2ab[_0x3435f4(0x1c3,'TcQW')]=_0x3435f4(0x1d3,'RX2N'),_0xfdd2ab[_0x3435f4(0x193,'jW0f')]=function(_0x5cc7f4,_0x235622){return _0x5cc7f4!==_0x235622;},_0xfdd2ab[_0x3435f4(0x1e5,'P(64')]=function(_0x4365dc,_0x58a56c){return _0x4365dc!==_0x58a56c;},_0xfdd2ab[_0x3435f4(0x423,'RX2N')]=_0x3435f4(0x32d,'%4eB'),_0xfdd2ab[_0x3435f4(0x375,'wN61')]=function(_0xf893f7,_0x3b0614){return _0xf893f7+_0x3b0614;},_0xfdd2ab[_0x3435f4(0x199,'Cr5X')]=function(_0x153f9b,_0x3f3cc8){return _0x153f9b===_0x3f3cc8;},_0xfdd2ab[_0x3435f4(0x3e0,'hpu7')]=_0x3435f4(0x17d,'Pu2Y'),_0xfdd2ab[_0x3435f4(0x275,'vA2s')]=function(_0x1dd142,_0x1084c2){return _0x1dd142+_0x1084c2;};const _0x20ad11=_0xfdd2ab;if(_0x20ad11[_0x3435f4(0x3a3,'P(64')](_0x5dd7c0,null)&&_0x20ad11[_0x3435f4(0x3ac,'wN61')](_0x5dd7c0,undefined)&&_0x20ad11[_0x3435f4(0x256,'iYfI')](_0x5dd7c0,'')){if(_0x20ad11[_0x3435f4(0x25f,'FUzd')](_0x20ad11[_0x3435f4(0x23d,'wN61')],_0x20ad11[_0x3435f4(0x297,'^SJ4')]))return this[_0x3435f4(0x166,'bgO]')](_0xea7052);else localStorage[_0x3435f4(0x345,'oNR(')](_0x20ad11[_0x3435f4(0x17a,'FUzd')](a0_0x593f06,_0x253ce2),_0x5dd7c0);}else _0x20ad11[_0x3435f4(0x42b,'k[GK')](_0x20ad11[_0x3435f4(0x18a,'iIl#')],_0x20ad11[_0x3435f4(0x159,'m]rM')])?localStorage[_0x3435f4(0x180,'7mu!')](_0x20ad11[_0x3435f4(0x1fc,'Oq((')](a0_0x593f06,_0x253ce2)):(_0x10845c[_0x3435f4(0x414,'7s$5')](_0x20ad11[_0x3435f4(0x335,'Q3vn')],_0x5c41c8),this[_0x3435f4(0x1c4,'gq*y')]=![]);}async[a0_0x1b268f(0x3db,'$JYD')](_0x14bc79){const _0x2e3a28=a0_0x1b268f,_0x10e84d={'LxGVk':function(_0x390ea8,_0x2df8c1){return _0x390ea8===_0x2df8c1;},'eVfNU':_0x2e3a28(0x3cd,'Oq(('),'LKlQq':_0x2e3a28(0x2c6,'70s4'),'IhkVA':_0x2e3a28(0x221,')xyo'),'KTIns':function(_0x2ce26a,_0x5b6c53){return _0x2ce26a+_0x5b6c53;},'OzuEJ':function(_0x534d8b,_0x246263){return _0x534d8b!==_0x246263;},'SDguW':_0x2e3a28(0x2cf,'$JYD'),'EZyih':function(_0x1f357b,_0x21a6e1,_0x52b9cf){return _0x1f357b(_0x21a6e1,_0x52b9cf);},'HGwTt':_0x2e3a28(0x2ee,'Wc)v'),'AzaKx':_0x2e3a28(0x3ef,'W!n*')};if(!this[_0x2e3a28(0x206,'wh*L')]){if(_0x10e84d[_0x2e3a28(0x287,'nTNR')](_0x10e84d[_0x2e3a28(0x3f7,'Pu2Y')],_0x10e84d[_0x2e3a28(0x2de,'wh*L')]))delete _0x25ae7f[_0x353a5b],_0x4b128c=!![];else return console[_0x2e3a28(0x19c,'NG4o')](_0x10e84d[_0x2e3a28(0x308,'gq*y')]),'';}const _0x148a81=extension_settings[extensionName]?.[_0x10e84d[_0x2e3a28(0x2be,'wh*L')](a0_0x1ac3ac,_0x14bc79)];if(!_0x148a81)return'';try{if(_0x10e84d[_0x2e3a28(0x19f,'gq*y')](_0x10e84d[_0x2e3a28(0x3eb,'iIl#')],_0x10e84d[_0x2e3a28(0x3a8,'G*zk')]))this[_0x2e3a28(0x42c,'Wc)v')](_0x3f9f5e,_0x215bca),_0x186390[_0x2e3a28(0x186,'iIl#')](_0x2e3a28(0x156,')xyo')+_0x2fdac7+_0x2e3a28(0x272,'bgO]'));else return await _0x10e84d[_0x2e3a28(0x377,'70s4')](decrypt,this[_0x2e3a28(0x332,'iIl#')],_0x148a81);}catch(_0x221733){if(_0x10e84d[_0x2e3a28(0x1f7,'$JYD')](_0x10e84d[_0x2e3a28(0x225,'1Cqd')],_0x10e84d[_0x2e3a28(0x20d,'e5pj')]))this[_0x2e3a28(0x3d9,'hpu7')](_0x42b4bf,_0x155f04);else return console[_0x2e3a28(0x32f,'wN61')](_0x2e3a28(0x289,'Cr5X')+_0x14bc79+_0x2e3a28(0x344,'wN61'),_0x221733),'';}}async[a0_0x1b268f(0x348,'k[GK')](_0x270355,_0x582c8e){const _0x54da72=a0_0x1b268f,_0x39bf62={'dIlKk':function(_0x4271c4,_0x25bdd2){return _0x4271c4+_0x25bdd2;},'oJhAl':function(_0x192a33,_0x1ac117){return _0x192a33===_0x1ac117;},'qAAbj':_0x54da72(0x152,'2S^m'),'UKUvy':_0x54da72(0x390,'Wc)v'),'jZGJX':_0x54da72(0x400,'^SJ4'),'ZXJFY':function(_0x14042c,_0xab2566){return _0x14042c!==_0xab2566;},'Esycl':function(_0x182afd,_0x14a965){return _0x182afd===_0x14a965;},'HneXG':_0x54da72(0x3c7,'WWsU'),'Jbvxe':_0x54da72(0x1db,'[gW$'),'SlQyl':function(_0x314293,_0x3a6a25){return _0x314293+_0x3a6a25;},'ewpPU':function(_0x399de1,_0x167270,_0x471056){return _0x399de1(_0x167270,_0x471056);},'bcIpf':function(_0x2f535b,_0x29f241){return _0x2f535b!==_0x29f241;},'SyHsR':_0x54da72(0x240,'nTNR'),'Nfbns':function(_0x59836b,_0x2727ba){return _0x59836b+_0x2727ba;},'pcBWU':function(_0x163696){return _0x163696();}};if(!this[_0x54da72(0x1d4,'VGtv')]){if(_0x39bf62[_0x54da72(0x32a,'Wc)v')](_0x39bf62[_0x54da72(0x2f7,'TcQW')],_0x39bf62[_0x54da72(0x3fe,'Wc)v')]))_0x3b879d[_0x54da72(0x380,'1[Gj')](wNnfdh[_0x54da72(0x3c1,'oNR(')](_0x420c5d,_0x3b6488),_0x4e8c29);else{console[_0x54da72(0x28e,'LPOV')](_0x39bf62[_0x54da72(0x244,'7s$5')]);return;}}const _0x41c532=this[_0x54da72(0x16c,'k[GK')]();if(_0x39bf62[_0x54da72(0x3bb,'Pu2Y')](_0x582c8e,null)&&_0x39bf62[_0x54da72(0x361,'1[Gj')](_0x582c8e,undefined)&&_0x39bf62[_0x54da72(0x35d,'FUzd')](_0x582c8e,'')){if(_0x39bf62[_0x54da72(0x2ad,'!tDd')](_0x39bf62[_0x54da72(0x3f1,'WWsU')],_0x39bf62[_0x54da72(0x2d0,'k[GK')]))return!_0x23fa29[_0x174d79]&&(_0x1b9ae4[_0x2e22cf]={}),_0x481bc8[_0x1524f1];else _0x41c532[_0x39bf62[_0x54da72(0x327,'e5pj')](a0_0x1ac3ac,_0x270355)]=await _0x39bf62[_0x54da72(0x37c,'bgO]')](encrypt,this[_0x54da72(0x1ed,'Q3vn')],_0x582c8e);}else _0x39bf62[_0x54da72(0x241,'WWsU')](_0x39bf62[_0x54da72(0x343,'Q1gw')],_0x39bf62[_0x54da72(0x357,'1[Gj')])?(this[_0x54da72(0x40e,'gq*y')]=null,this[_0x54da72(0x23a,'7s$5')]=null,this[_0x54da72(0x1d4,'VGtv')]=![],this[_0x54da72(0x25e,'P(64')]=null):delete _0x41c532[_0x39bf62[_0x54da72(0x2f3,')xyo')](a0_0x1ac3ac,_0x270355)];_0x39bf62[_0x54da72(0x3dd,'[gW$')](saveSettingsDebounced);}async[a0_0x1b268f(0x2cd,'Oq((')](){const _0x546000=a0_0x1b268f,_0x4634a5={};_0x4634a5[_0x546000(0x318,'jW0f')]=_0x546000(0x211,'t(qE'),_0x4634a5[_0x546000(0x1fb,'k[GK')]=_0x546000(0x2d6,'f9wx'),_0x4634a5[_0x546000(0x31a,'e5pj')]=function(_0x44974b,_0x514ad6){return _0x44974b+_0x514ad6;},_0x4634a5[_0x546000(0x323,'P(64')]=_0x546000(0x2ff,'wN61'),_0x4634a5[_0x546000(0x269,'hpu7')]=function(_0xfe27c6,_0x5e2a8a){return _0xfe27c6!==_0x5e2a8a;},_0x4634a5[_0x546000(0x3df,'BPpQ')]=_0x546000(0x3e2,'!tDd'),_0x4634a5[_0x546000(0x34f,'Wc)v')]=_0x546000(0x3bf,'e5pj'),_0x4634a5[_0x546000(0x322,'jW0f')]=_0x546000(0x3aa,'jW0f'),_0x4634a5[_0x546000(0x259,'hpu7')]=_0x546000(0x2ac,'!tDd'),_0x4634a5[_0x546000(0x15d,'^SJ4')]=function(_0x28c793,_0x18570d){return _0x28c793+_0x18570d;},_0x4634a5[_0x546000(0x3f0,'k[GK')]=_0x546000(0x312,'oNR('),_0x4634a5[_0x546000(0x1e7,'iIl#')]=function(_0x293ddf,_0x1442c6){return _0x293ddf<_0x1442c6;},_0x4634a5[_0x546000(0x279,'dS5f')]=function(_0xb68365,_0x36dbfd){return _0xb68365===_0x36dbfd;},_0x4634a5[_0x546000(0x21b,'e5pj')]=_0x546000(0x16e,'YKWz'),_0x4634a5[_0x546000(0x3d4,'WF65')]=function(_0x216007,_0x387b2b){return _0x216007===_0x387b2b;},_0x4634a5[_0x546000(0x35a,'7s$5')]=_0x546000(0x39f,'RX2N'),_0x4634a5[_0x546000(0x3c0,'1[Gj')]=_0x546000(0x177,'Oq((');const _0x1c9724=_0x4634a5;for(const _0xa8f0db of SENSITIVE_KEYS){if(_0x1c9724[_0x546000(0x28a,'TcQW')](_0x1c9724[_0x546000(0x409,'hpu7')],_0x1c9724[_0x546000(0x1a3,'RX2N')])){const _0x19ffd3=this[_0x546000(0x3e7,'Q3vn')](_0xa8f0db);if(_0x19ffd3){if(_0x1c9724[_0x546000(0x19b,'RX2N')](_0x1c9724[_0x546000(0x22f,'oNR(')],_0x1c9724[_0x546000(0x24d,'dS5f')]))await this[_0x546000(0x1ac,'P(64')](_0xa8f0db,_0x19ffd3),localStorage[_0x546000(0x1b4,'RX2N')](_0x1c9724[_0x546000(0x31a,'e5pj')](a0_0x593f06,_0xa8f0db)),console[_0x546000(0x3a9,'hF[B')](_0x546000(0x328,'m]rM')+_0xa8f0db+_0x546000(0x2c2,'70s4'));else{_0x2791d9[_0x546000(0x3a1,'[gW$')](_0x1c9724[_0x546000(0x38a,'e5pj')]);return;}}}else{_0x4bfa8d[_0x546000(0x2e7,'hF[B')](_0x1c9724[_0x546000(0x1d5,'iYfI')]),this[_0x546000(0x410,'dS5f')]=![];return;}}const _0x3da8bd=_0x1c9724[_0x546000(0x270,'t(qE')](a0_0x593f06,_0x1c9724[_0x546000(0x274,'Oq((')]),_0x1b521f=[];for(let _0x5bb9e2=0x0;_0x1c9724[_0x546000(0x278,'P(64')](_0x5bb9e2,localStorage[_0x546000(0x2b1,'vA2s')]);_0x5bb9e2++){if(_0x1c9724[_0x546000(0x391,'1Cqd')](_0x1c9724[_0x546000(0x291,'TcQW')],_0x1c9724[_0x546000(0x2a1,'W!n*')])){const _0x2beef1=localStorage[_0x546000(0x1c8,'m]rM')](_0x5bb9e2);if(_0x2beef1?.[_0x546000(0x28d,'gq*y')](_0x3da8bd))_0x1b521f[_0x546000(0x238,'7s$5')](_0x2beef1);}else _0x56318c[_0x546000(0x381,'hpu7')](bNLtbt[_0x546000(0x1be,'wN61')](_0x2665c8,_0x5c348a));}for(const _0x510c76 of _0x1b521f){if(_0x1c9724[_0x546000(0x21a,'m]rM')](_0x1c9724[_0x546000(0x320,'k[GK')],_0x1c9724[_0x546000(0x27a,'YKWz')])){const _0x297727=_0x510c76[_0x546000(0x1f3,'1[Gj')](a0_0x593f06[_0x546000(0x1c7,'iYfI')]),_0x377c0c=localStorage[_0x546000(0x185,'tft]')](_0x510c76);if(_0x377c0c){if(_0x1c9724[_0x546000(0x28a,'TcQW')](_0x1c9724[_0x546000(0x35c,'t(qE')],_0x1c9724[_0x546000(0x3f5,'oNR(')]))throw new _0x19a590(bNLtbt[_0x546000(0x3ce,'%4eB')]);else await this[_0x546000(0x3a4,'Q3vn')](_0x297727,_0x377c0c),localStorage[_0x546000(0x3a2,'P(64')](_0x510c76),console[_0x546000(0x233,'RX2N')](_0x546000(0x3ba,'P(64')+_0x297727+_0x546000(0x41e,'Wc)v'));}}else return _0x194be1[_0x546000(0x336,'wN61')](_0x546000(0x3de,'RX2N')+_0x177773+_0x546000(0x21c,'BPpQ')),_0x267f4d;}}async[a0_0x1b268f(0x2bc,'WF65')](){const _0x5ea1f9=a0_0x1b268f,_0x18caeb={};_0x18caeb[_0x5ea1f9(0x1e1,'oNR(')]=_0x5ea1f9(0x3af,'2S^m'),_0x18caeb[_0x5ea1f9(0x290,'f9wx')]=function(_0x2ec4c2,_0x2abc73){return _0x2ec4c2+_0x2abc73;},_0x18caeb[_0x5ea1f9(0x1ee,'vA2s')]=function(_0x5e78bc,_0x3aa556){return _0x5e78bc!==_0x3aa556;},_0x18caeb[_0x5ea1f9(0x167,'vA2s')]=_0x5ea1f9(0x339,'vA2s'),_0x18caeb[_0x5ea1f9(0x1e2,'FUzd')]=function(_0x1e179a,_0x34f672){return _0x1e179a===_0x34f672;},_0x18caeb[_0x5ea1f9(0x3ae,'$JYD')]=_0x5ea1f9(0x32b,'G*zk'),_0x18caeb[_0x5ea1f9(0x37f,'LPOV')]=_0x5ea1f9(0x243,'Oq(('),_0x18caeb[_0x5ea1f9(0x2ef,'iYfI')]=function(_0x457673,_0x331143){return _0x457673!==_0x331143;},_0x18caeb[_0x5ea1f9(0x239,'Cr5X')]=_0x5ea1f9(0x216,'m]rM'),_0x18caeb[_0x5ea1f9(0x1a8,'WWsU')]=_0x5ea1f9(0x32e,'t(qE'),_0x18caeb[_0x5ea1f9(0x21e,'G*zk')]=function(_0x5d16a6,_0x12f004){return _0x5d16a6===_0x12f004;},_0x18caeb[_0x5ea1f9(0x393,'LPOV')]=_0x5ea1f9(0x3ea,'jW0f'),_0x18caeb[_0x5ea1f9(0x34a,'vA2s')]=_0x5ea1f9(0x3e4,'iIl#'),_0x18caeb[_0x5ea1f9(0x36d,'Cr5X')]=_0x5ea1f9(0x364,'tft]');const _0x1b2e0d=_0x18caeb;for(const _0x116559 of SENSITIVE_KEYS){if(_0x1b2e0d[_0x5ea1f9(0x2d2,'Oq((')](_0x1b2e0d[_0x5ea1f9(0x2c4,'7s$5')],_0x1b2e0d[_0x5ea1f9(0x208,'FUzd')]))throw new _0x42ae85(KOKJre[_0x5ea1f9(0x1e1,'oNR(')]);else{const _0x528420=await this[_0x5ea1f9(0x1dd,'%4eB')](_0x116559);_0x528420&&(_0x1b2e0d[_0x5ea1f9(0x3b2,'YKWz')](_0x1b2e0d[_0x5ea1f9(0x2fa,'7mu!')],_0x1b2e0d[_0x5ea1f9(0x1f5,'7mu!')])?this[_0x5ea1f9(0x3ca,'WWsU')](_0x4e2f83,_0x1437b7):(this[_0x5ea1f9(0x253,'Cr5X')](_0x116559,_0x528420),console[_0x5ea1f9(0x36e,'k[GK')](_0x5ea1f9(0x257,'bgO]')+_0x116559+_0x5ea1f9(0x372,'Oq(('))));}}const _0x3eb0f2=extension_settings[extensionName];if(_0x3eb0f2){if(_0x1b2e0d[_0x5ea1f9(0x2e2,'Cr5X')](_0x1b2e0d[_0x5ea1f9(0x27d,'%4eB')],_0x1b2e0d[_0x5ea1f9(0x172,'FUzd')])){_0x1f4913[_0x5ea1f9(0x336,'wN61')](_0x5ea1f9(0x210,'YKWz')+_0x279047+_0x5ea1f9(0x352,'$JYD'));return;}else{const _0x1cdf6e=_0x1b2e0d[_0x5ea1f9(0x2ae,'YKWz')](a0_0x1ac3ac,_0x1b2e0d[_0x5ea1f9(0x209,'YKWz')]),_0x286678=Object[_0x5ea1f9(0x29f,'70s4')](_0x3eb0f2)[_0x5ea1f9(0x194,'BPpQ')](_0x3508b4=>_0x3508b4[_0x5ea1f9(0x3a0,'nTNR')](_0x1cdf6e))[_0x5ea1f9(0x2b3,'VGtv')](_0x5bd3d0=>_0x5bd3d0[_0x5ea1f9(0x2df,'Q1gw')](a0_0x1ac3ac[_0x5ea1f9(0x404,'NG4o')]));for(const _0x39f350 of _0x286678){if(_0x1b2e0d[_0x5ea1f9(0x2b4,'k[GK')](_0x1b2e0d[_0x5ea1f9(0x161,'wN61')],_0x1b2e0d[_0x5ea1f9(0x407,'YKWz')]))_0x21b528[_0x5ea1f9(0x39e,'TcQW')](_0x42f72e)&&(delete _0x408391[_0x1b123e],_0x14a9a1=!![]);else{const _0x1d26fb=await this[_0x5ea1f9(0x303,'1Cqd')](_0x39f350);_0x1d26fb&&(_0x1b2e0d[_0x5ea1f9(0x40d,'hF[B')](_0x1b2e0d[_0x5ea1f9(0x25a,'1[Gj')],_0x1b2e0d[_0x5ea1f9(0x39a,'YKWz')])?(this[_0x5ea1f9(0x283,'FUzd')](_0x39f350,_0x1d26fb),console[_0x5ea1f9(0x30e,'dS5f')](_0x5ea1f9(0x34e,'hpu7')+_0x39f350+_0x5ea1f9(0x1e8,'WF65'))):delete _0x438135[KOKJre[_0x5ea1f9(0x2db,'VGtv')](_0x4770e2,_0x55c729)]);}}}}this[_0x5ea1f9(0x313,'gq*y')]();}[a0_0x1b268f(0x27c,'hF[B')](){const _0x1c92c8=a0_0x1b268f,_0x7e0c54={'SGVXm':function(_0x2e01e2){return _0x2e01e2();},'phfzs':function(_0x11b2e9,_0x19d7ae){return _0x11b2e9===_0x19d7ae;},'ThGOq':_0x1c92c8(0x18d,'t(qE'),'nLeac':_0x1c92c8(0x266,'Oq(('),'OHNOO':function(_0x4a4fb4,_0x4c448d){return _0x4a4fb4===_0x4c448d;},'eFBPB':_0x1c92c8(0x317,'Cr5X'),'MUHwu':_0x1c92c8(0x3bd,'vA2s')},_0x13f1bb=this[_0x1c92c8(0x387,'f9wx')]();let _0x5adc2a=![];for(const _0x48b0a4 of Object[_0x1c92c8(0x3ed,'W!n*')](_0x13f1bb)){_0x7e0c54[_0x1c92c8(0x1e0,'Q1gw')](_0x7e0c54[_0x1c92c8(0x1c6,'k[GK')],_0x7e0c54[_0x1c92c8(0x33c,'m]rM')])?(_0x380cb2[_0x251887]=_0x2c306a,EfTbvF[_0x1c92c8(0x231,'RX2N')](_0x159f65)):_0x48b0a4[_0x1c92c8(0x207,'Q1gw')](a0_0x1ac3ac)&&(_0x7e0c54[_0x1c92c8(0x1b7,'P(64')](_0x7e0c54[_0x1c92c8(0x171,'WF65')],_0x7e0c54[_0x1c92c8(0x2ea,'%4eB')])?_0x52125f[_0x1c92c8(0x1b2,'t(qE')][_0x2e8837[_0x1c92c8(0x3e1,'70s4')](_0x105a30[_0x1c92c8(0x369,'YKWz')])]=_0x2f0024:(delete _0x13f1bb[_0x48b0a4],_0x5adc2a=!![]));}if(_0x5adc2a)_0x7e0c54[_0x1c92c8(0x368,'[gW$')](saveSettingsDebounced);}[a0_0x1b268f(0x1e6,'vA2s')](){const _0xad0b75=a0_0x1b268f,_0x20fba2={'otdGh':function(_0x33cf44){return _0x33cf44();},'USmcB':function(_0x484200,_0x3112ad){return _0x484200===_0x3112ad;},'DnvGk':_0xad0b75(0x3ad,'G*zk')};if(!extension_settings[extensionName]){if(_0x20fba2[_0xad0b75(0x288,'Pu2Y')](_0x20fba2[_0xad0b75(0x2da,'WF65')],_0x20fba2[_0xad0b75(0x3b1,'iYfI')]))extension_settings[extensionName]={};else{const _0x5aa864=this[_0xad0b75(0x349,'iIl#')]();let _0x34a881=![];for(const _0xc2822b of _0x12ecbb[_0xad0b75(0x20f,'oNR(')](_0x5aa864)){_0xc2822b[_0xad0b75(0x34c,'FUzd')](_0xfe8768)&&(delete _0x5aa864[_0xc2822b],_0x34a881=!![]);}if(_0x34a881)gogzok[_0xad0b75(0x237,'oNR(')](_0x35d7a8);}}return extension_settings[extensionName];}[a0_0x1b268f(0x188,')xyo')](){const _0x2acb2d=a0_0x1b268f,_0xbd61f0={};_0xbd61f0[_0x2acb2d(0x197,'f9wx')]=function(_0x28e9ec,_0x53fa19){return _0x28e9ec===_0x53fa19;},_0xbd61f0[_0x2acb2d(0x337,'Cr5X')]=_0x2acb2d(0x1d7,'!tDd');const _0x39929d=_0xbd61f0,_0x3d2f16=this[_0x2acb2d(0x3a6,'wh*L')]();if(_0x3d2f16?.[a0_0x13ea3f]){if(_0x39929d[_0x2acb2d(0x260,'G*zk')](_0x39929d[_0x2acb2d(0x425,'NG4o')],_0x39929d[_0x2acb2d(0x35b,'7mu!')]))return!![];else{const _0x7eac5a=this[_0x2acb2d(0x201,'TcQW')]();if(_0x7eac5a?.[_0x19cdb6])return!![];return _0x1dfce6[_0x2acb2d(0x1df,'hF[B')](_0x7eac5a)[_0x2acb2d(0x38b,'iYfI')](_0x1ab243=>_0x1ab243[_0x2acb2d(0x403,'^SJ4')](_0x4087fb));}}return Object[_0x2acb2d(0x2e9,'2S^m')](_0x3d2f16)[_0x2acb2d(0x1e4,'m]rM')](_0x3f6897=>_0x3f6897[_0x2acb2d(0x236,'RX2N')](a0_0x1ac3ac));}async[a0_0x1b268f(0x2d7,'iIl#')](){const _0x2a9316=a0_0x1b268f,_0x5758d7={'eKJNU':function(_0x2c66f8,_0xf860d7){return _0x2c66f8||_0xf860d7;},'PgnTK':function(_0x1b6b6e,_0x3801d9){return _0x1b6b6e===_0x3801d9;},'qQpJc':_0x2a9316(0x371,'nTNR'),'bYory':_0x2a9316(0x35e,'G*zk'),'OotoZ':function(_0x362645,_0x2b9411){return _0x362645(_0x2b9411);},'cCeQt':function(_0x5c518c,_0x17b080){return _0x5c518c(_0x17b080);},'lHNtB':_0x2a9316(0x2a3,'FUzd'),'DwpbL':_0x2a9316(0x3bc,'Cr5X')},_0x44979f=localStorage[_0x2a9316(0x333,'f9wx')](a0_0x1ae0aa),_0xb05aa5=extension_settings[extensionName]?.[a0_0x13ea3f];if(_0x5758d7[_0x2a9316(0x20e,'Oq((')](!_0x44979f,!_0xb05aa5)){if(_0x5758d7[_0x2a9316(0x2e3,'RX2N')](_0x5758d7[_0x2a9316(0x29c,'f9wx')],_0x5758d7[_0x2a9316(0x1ba,'VGtv')])){console[_0x2a9316(0x174,'dS5f')](_0x5758d7[_0x2a9316(0x37a,'WF65')]),this[_0x2a9316(0x2e1,'1[Gj')]=![];return;}else{const _0x23792a=_0x1310d8[_0x2a9316(0x26d,'LPOV')](_0x2a2732);if(_0x23792a?.[_0x2a9316(0x3b3,'WF65')](_0x50e849))_0x3e7abe[_0x2a9316(0x2f4,'FUzd')](_0x23792a);}}try{this[_0x2a9316(0x1bb,'$JYD')]=await _0x5758d7[_0x2a9316(0x405,'2S^m')](importPrivateKey,_0x44979f),this[_0x2a9316(0x17c,'LPOV')]=await _0x5758d7[_0x2a9316(0x40b,'iYfI')](importPublicKey,_0xb05aa5),this[_0x2a9316(0x2ec,'LPOV')]=!![],console[_0x2a9316(0x2e6,'Q1gw')](_0x5758d7[_0x2a9316(0x2bd,'hpu7')]);}catch(_0x4c8b46){console[_0x2a9316(0x18e,'^SJ4')](_0x5758d7[_0x2a9316(0x3fa,'[gW$')],_0x4c8b46),this[_0x2a9316(0x36b,'iIl#')]=![];}}}function a0_0x39e3(){const _0x555d50=['WRZcGCkjW6aj','WR5iscfP','W6qpW5/dVb4','dhJdR8oz','WQ05WOaEWRxdNG','ud3cSsHe','5BY25yMB6kY35AAX5Bke5P+c55A45OQp5A+x6zgT5A6o44oh','W6VcLXVcV14MW514W7lcVd1xW4TCWR4','WQObWRxdId3cKcXMWRi','rCo3wwzL','WPBcNcNdLK7cOdGaW6G','WQH8tJnMjSo0qW0','u8o4xM8','e0JcUCoEW50o','WQRdUCkKAmo6mq','WPTOgZXA','WRGnWO8JWRC','a8kuW6HNW4FcQX3cISoPW48','ymk8W68WWOZcTb7dGZJdNCoPq8kXW73dUG','DaRcRHnM','WOCpWR3dNHNcKar2WQ7dOW','Cb7cUbC','arTuW4r/','WQpcGCkhW6q','W4JcI8otb2KebmkgtZW','uxJcHKFdMqhdMCoo','WO1Jha96eCoWjSkbWQ04WOdcMCoIW6b+pCoklCojW4C','W6dcJai/F8o5W5hdPt12Amk2','a8oNWO8QjW','ymofE8oQWOS','W5JcMmonWRRdMG','tZ4UWQOK','WRf2bc1O','W6qmWOFdPvO','xCoHsmo3WPG','WQzcnSkcqa','aveig2i','uSo1qvn5','WPlcUJZdI0BcQs4MW7JcGgjnlt/OPzRLR6RdQmou','ECkRW40XWQ0','jKiAa34','ytWoWRi/','wmoqoSklaa','W5FcSWxcS2CIW5boW43cTJzIW7CvWQ/dGCo8cSopgoARQUw+G+wSH+MqQ+ACVUwZK+E5VU+9HoAvM+AXQoIKKUwVMEodUq','WQhdGHFdNSoV','t8oCW7uWW4L2','W40hWQZdN1O','W5lcVJe6w8oPW4ZdPcX4FSkQfu/cVq','oSkcB8o4WRWTqmkSda','kITrmSke','ka51W7DU','xGZdUSkZW7O','CCk5WOb9W4e','WQ4+WO0mWRddLWK+','agtdU8ozW6W','WQuUWPRdPd8','WOFcSrxdM3S','l8kqW7T8W4xcUt7cHSowW4ji','W7rqW5NcPvFcHmoE','e8kBACo1WOC','WQFdMSoIWQNcOG','eNFdU8oy','W5/cTCotWP/dNa','FSoxl8o2BG','DmoAW7e9W40','W6jhW6RcP1q','BCkeWOzqW5TSx8kXWRZcU0fk','W6FcSYqYCW','hIbjgSkJWQ5vW4XdWQtdGSkSWQa5ka','W63cGSohWRNdOq','W6Wxjh7cQW','ACkSWPHqW6rzvmknWQxcVubkkcxLRy3LGPtMQQVLVPhLTRFLI5hMJOhKUz7cMGG','gCkoW6bH','iL7cQmo/W7y','gc7cUbTL','rZBLPRJOTPpVVPBNPkNPKilKUPlLJkJPHOxVVAJVV4ZdGa','uM/cNwJdHaJdKq','lCoBWPemoq','BsyNWOO1lmosWR8G','zmkoW7OTWOtcVqJdPsG','l8ktW6XHW4FcSstcHmoU','A8ofW4WXW6O','WQH/ws5CkmoJrYRcKr8','m8k0vSkpCSkKor0fWP4','BtiNWOOnkSoFWRK/','WOVcR8kAW6GUpSoyWPuNsSoxW65GW5rL','jG52gmke','nLxdPCoJW6K','BCkEWO1nW6XqqSkRWRu','WPXP5lQl5PIO5yEO6k2K5A6a5Q6K44cZ','WRWhhhtdPG','lcBcGr5/','W5HLqrdcGCk1W6qhW4ZdMSoYW4Dk','WR/cLYhdSgG','WRKOp1hdOq','WP0WbuW','W6tcL8opbMa','zSopFML2','WODiFG1n','WRS5WO8PWP4','gSkyFCk7xW','pX9iW7LqySoJWPtcKZ4WWPWqW5hdIComWQXKoxhMQl3LVldVVQBMN6ZLNQVMNOlMIOFLIydLRPRPKyZLRRlVVOFOR7/NLPhMIzBML6ZLRPdPKB/LRBpJG64','WO3dQtVdSSoR','WPj3wYHypCohuaJcGGFcRuiyfmo/wu8LBJpdSq','WRajpwtdQG','oNhdRmocW5lcH8oeW759','W7iEWPNdQ8kVBL4GW5S','WRqUWOtdPW4','776T5P2W55Af5OQQ772D','WQldImooW6tcPG','dh07jfDQW5VdRSoA','nSkUxmozWOm','WRLlmCkguCot','W60bW5njW4C','l8klW6XSW6hcVsVcH8oK','WQaCWPVdIru','W6xcQ8osWPBdTa','uSktW7K2','W5tcQmocm2C','bSk1q8krvW','guhcKmo1W7W','WQ7dKUw2H+IKUEwVQUI+HUELKUIhRUAELEwFQEwSNowcR+ocQa','E8ogdCkrf8oDWOi','h8kOvSkorCk7aqevWRFdHdhdPvf9W60BWQK','b1JdOmoZW40','bvZcOmosW4S','oMJdPYTk','W5KSW7jkASobWRi','WRuIeLBdH8oVWRGjW7S','jCoHySofWQS','WRKPWPyNWRBdNWK','W6qAjexcIG','WPVdGSk/qSoT','yY3dR8kRW48','WQ/dQdtdJmof','WPK0a2VdH8oJWRS','WQlcI8khW64tpSoOWRi2sa','pLFdUCoFW5xcJCoEW4XLWQCfWQdcP8o/fG','WQmCghldPq','WOdcNHtdR3W','WQWmWR7dTdG','WRtdPSolWPZcPa','W4XgW4JcMfFcImoDW6KK','jCkpW6P4W5C','qSopvu9Q','W5GyWRRdRvq','W54wWPhdUG','kL3dVs9g','WPdcNsldP1O','WR5LhG1VcW','WPddV8kMDmoDobuzWRjEt8kvp1tdUSo9jam','cZvomCkG','WRNcTsJdTL8','l8oyWPivaW','WRZdRXxdImog','kcFcHYnD','xX0DWRii','WOGJneBdSG','m8k0wmkpy8kvfZ0v','WPlcIHqTpSoRW6u','W4xcLbujFW','WP93c8kIAG','AY4bWPCF','AaiJWROT','w8onW7muW4H1W4u','W5yUW7VdIcdcRmk2BLBdJq','WRBdPmkovCoQ','butcQmodW5OyWPq9yxi','eSkiEmoV','BSogfmk3fCoDWQBcPbBdVa','xCo2a8knbG','WRpdHSojWP/cOmkPWRf4W5W','W4FcK8o1','WQJdLCoBW4RcHqOrW7ldUG','q8k7WPjTW54','nXPFW6vm','WPZcGqyl','BdW5WRqR','jmouySocWRy','jepdS8oJW7S','kILFW4jE','W7CoW6vHrG','5B2x5yUI5lUA56MC6ywW57225BwU5A6n5zY+5yYj5lMH5OQ45ysu6zgL5A+z5BQa55ID5A+d5PEc77+W5lIr6ik455MR5O2T5AYf5ywr5lMl5y+16yAw55U856EI6zo644gA','gmouySowWRBcSKqLD8k4BSk1','W6KxWORdMmki','WRzVeCktCa','nmomBmofWQBcINy1u8kX','W7RcOCorWOtdIq','W4SqW6ldMde','u8kLW4GGWPGYsgJcRevUB8oOW6Xswa','W4eyWPJdKKldS8o3qmog','W4tcQCoGmhW','WOjhmmk5BW','r8oIcCkXkmoDWPBcGWFdVGGpWQeiW5G','emoYWQO8ka','W7tcS8o2WRZdSaldVHpcIcRcQ0fKW6pLRRhPKBxLRPVLIylOVzpLPixOTBhVVQ7MLldMJ7dMJQVLN4VVVBtVVlWc','DCo9W4mWW68','A8kTW5uxWP8XugtcJgjKy8ofW5zBE8ovWQ7dImkQ','W6OLWPRdSg8','WO8KgMhdTa','rupcHwRdMW','W50/W7jaDG','jIn+jCk6','W7dcNSosnxapc8kKsq4+W75bFcJdKW','h8kNuSkjrCk7aqev','W57cGCkAW5NdKCo2W6XKW7ZcKvhcMxi','EZCBWRGH','rCo1qa','5A656zkx5Psz5lQ057Yy5BgAxeJcHmoSBudcSCoCWO96W5NMIBldMhOmz3FcRmo/W6m1mr3JGOS','BtiNWOO1lmosWR8G','vmoRq2D1hSkZW7u','CrhcRq','W6FcOXtcTMO','DSkEWQTQW4W','uSoLdmovua','WONdGCkOumom','s8oSxSoGWR4','WRLZcsXW','WQ1msGn+','k8oYxSohWOu','W63cNadcVvu','W4BcHd47mW/dJtdcTmovwa','tGiSWPu1','W5aOW4jbsq','WO/cNCkpW7uPnmocWQC/','qCkiWPXWW5Tzqa','W6eUW6nZrSojWRHKvq','yaOuWRua','fCkksmowWRS','WPtdLSk3BSovmqm/WQjWt8kecXlcUq','W7xcVmoSlxW','WQxcPmk5W6O/','df7dTYfh','W6mTW4fWW4y','a0VcVSoOWRLmW7ddHCk1WPRcJJW/','hCkSW410W4q','Cmogf8k/f8oq','ih8QhxrHW50','WRpdKSojWP/cR8kQWR1SW5q','WQOnWRxdHspcMI5JWQC','WOe/WOCEWQ3dKGigcW','xcihWPeV','i8kKW65GW6q','h13cUCoEW5WFWPmMFgZcJfacFq0UnSkZzmoxoCkC','oh8NiW','WRpcGSkfW7qb','iLe9eL0','ySk/W7yRWPe','EI8NWQy+','Fb7cVqPRmmo+Ctq','sJJcN1uGDCk8','fCkRgZaRqmkVW6Xtbfmo','rh/cHgldTW','W64zWPtdKfFdRSo8BmoqWPa','l8o8WOy0ja','WRddSIZdTSoX','W48TW6z1W70','iCkEESoJWQi','WRiGWQC4WPG','W7FcHa4CbG','5BYL5yM96k235AA25Bk05P2b55EC5OMe5A+t6zk/5AYu44cM','ecPSbCkr','W709WRBdISkZ','B8kbW4WzWQy1xvlcU2f5C8o8WQjxw8ovWRJdJCoM5QMd5B2+5AY+6zk75P6R5BcP57I+77+65PAb5RkD5yQ45A+844kw','5AYt6zkl5PEy5lIx57YF5BkQWR1TtCkEkeJcOgKkxs/MIle7DqpcI8k4avGrW7ZcRWlJGAi','uGXCW4LjA8on','r8k0W50cWPKJC2JcU2y','qSolqmogWRHO','s8oap8oCzW','fMldQmoeW6RcM8oWW7zLWQa','WOjdfmkjAa','W7pcQqCWzW','WRlcQCkGW4KC','W5xcPCoVWPNdQq','W446WPNdJSkx','WPNcGYu2cW','WQ3cNJiPpa','WO1WbqH3cSosaCkiWPC','W7RcII0Mwa','rHVcUWfajCoRCcK','Bmosamk3lq','W4JcL8oYWPZdJWldQG','yhRcGgRdLrtdR8oLWQH+bCoY5PY15yQ/5BES5RgF5yEe5yQQWReBlcFJGi8','qCoRxM5U','BteWWPCpiSofWRShemkb','eSomqCoeWPe','W6i5e2pcUa','W6mLW4rMW5i','j3uxa1rwW4ZdVCoFj8kY','xbuRWQCC','WOKHagNdMq','W6yiif7cUGm','W5y/W67dTZVcU8ke','z0hLT4VLI5pLRk7OViRNP5FOHAZKUQBLK4FMR5xJG4S','DaJdOCkfW78','DSoehSoEDq','qXldM8kZW4K','W4vxW4ZcPNi','WQtdJ8k/A8o6','jfpcNmoiW78','xSoPE8oRWQS','EKVcMuJdUWJdHCocWRnJeSk3zt7LIipLPBZLJz7LPQVOTRrJ','mvxcNCoNW60','WOBcJsxdU3O','W58KW69RFmkxWOHIvh/dUmoWvIy','W5uOW7xdNd3cS8kewa','qSkZW6yWWQe','gHjCb8kKWQrpW75B','jhpdRITPlGvRWOxdOxnmWO/cT8kjB8kweCkCkUAPN+w8GEwVH+MrQoAEOEwYT+E6Lo+9MoAwHoAXNowiVowVKEocNa','aSkUW79CW70','s8kCW60QWQi','aCkSW4P8W5K','CSknW58vWPS','qSoSoSoBwa','WPlcIHqPjCoQW60','W7lcLCosf2Wifa','lCopWPq3hSkbtG','W5ZcTsCzhrpdPXFcR8oit1mmFLe','WPmCWOaPWR8','WRbJgbXc','W7ZcTri4sG','W5Dk5BsI6kws5A6P6lY056A26iEX5P+N5z6+5A2V5yoX44cS','rM/cNwZdNWNdMq','WP5HqJm','zSkiW60XWOa','amkrESoUWPW8CCk6hmkyWPFdM8oDW5VdO2v8WRJcQCoRkg4','W4aqW4LNW44','mmoLhmoJAMZdLq','dLJdHCo4W5a','W7mzW6reyW','WOypWQtdUbVcKca','uY83WPKa','pColWPiu','W54kmwhcNbz6W4e4','F8oGW7ewW5y','BmooW6y2W4m','o1dLP6/OTz3VVjRNPOhPKk/KUjNLJANPHORVVylVVQhdRW','za7dUSk1W74AWRhdUSknWPxcGG','zILPzYW0WO3dI8oZl8khWRjg','zmkoW7OTWRpcUaNdTZ8','W57cKJK1aq','WR9AhCkUCq','ytldSSk4W7i','W78sW7JdJJC','iSo+t8oNWPa','dSkyzmkvtq','WPddPmkIC8oDobuzWRi','BHhcRby','WRBdJdddQSoXxw7dTxhcGColELVdQ8oTF8oYWOddRwNdVXO','iSowBSofWQVcIvu5qW','W4tcSt7cSMO','pJ/cUXjq','W7qHW6THW5u','iSkoxSk4vq','WQ7cNJJdQ3NcQtO','WOJdKsZdPmoKbLldLxhcGq','k8ozWQq3kq','smoFD8o2WPO','W4BcGmokWRtdSa','WOvQrIHClmoEvGtcMq','c8ofWQSVfW','W6nSW4VcNgC','jSkywCopWP0','W4BcMWeNjG','WPipWQtdUbVcKca','gCkoW696','W5KSW6HID8oeWQn0ENNdTmosuHdcTa','W5JcNdydfrRdSthcV8oMt0i4obiVW7Gj','W7xcVSo8WRhdGq','bCkQW5P+W6K','WO0gWOpdNI4','cConWQ80jG','WP85WOqBWRm','uCkYW44FWP8','gLZcJmoJW68','W4W9nLBcUq','W63cJIS3CG','aL/cMSofW5WcWQ0Z','sbGtWRqJ','W7hcKSokewaF','W6FcHXVcSge','W7/cMaqFfW','W7fKW5RcR0i','W5pcGrdcRMaOW4P8W5u','W5BcVmo/WRZdNq','gfhdMsXi','WPRdVmkjBSoV','wCopxmop','AqlcSr57lmoVsW','BcmkWPm/W7jlWOxdNa','WP16bs9r','W4lcLCoUjL0','vSo8s2HVbSkZW5G','smozlCk2iG','WQZdUmkiBmoY','WRzcmmkuqq','W67cMJuyDCo1','WOKtmhtdOq','W6SdW5/dKWW','wXuMWPKD','n13cOmoDW5DzWOeHzG','AcmCWOy/','W73cVSoNe1W','q8oqhmkSimouWOdcPrC','BcNdUCkuW4S','jCkUq8kpB8kYhq','W53cHru9uq','ESkzW7KzWRu','W6/cOdlcKg0','WRSIWOeyWQddIXGeha','xCofASonWOC','WR3dSSkQAmoOmtmyWRnY','W6/cJs4+','WQKTWPae','u8oRn8kxla','WRhdTshdH8or','WOPjoSkvzSoxW7jOxa','sI/dUmkwW6S','W6e5W7rUC8oeWQn0ENNdTa','W4NcVG4jia','egSnhMG','h3hdS8o1W7i','umohW6a','rCo0rw1LqmkjW5Ptc34bW5m','WPVdUCkMsCog','WPNcO8kfW5eZ','W641W5tdUbu','WO1RfrnjbSoqlSku','WQinWPNdMbldK8khW7y0W5/cNmk0iW','B8kvW5GwWRy','W4eCWPldUmkxAq','W6lcMJG','r8oIcCkXkmoDWPBcGWFdVGGpWQei5Pwk5A+V6zk05A6L5BEe55wO5OUe44kY6k2g6yA45PAs6l+35yAq5OIA5P2SW4qHW5vkzqbkcEodTG','W70hWPldK1i','WO4wWOq6WPe','dtbEW78','s8oatCotWRvWWQOHW6q','pZzqp8k6','p1xdQmoYW4O','W58eWRBdS1a','hIbjgSkJWQ5vW4XdWQtdGSkSWQa55yIx5AAT5y2y5AAX6lAKjG','qGuzWPiY','WPtdLSk3BSovmqm/WQjWt8kecXlLRz3PKlVLRQNLI5dOViBLPAdOTyVVVi7MLBBMJONMJjNLNz7VVzlVVQqk','zbxdRCkLW5OEWQtdU8k/','W4aGWPpdJmkG','W6JcKIG/ACk+WPJdNd1UF8k7jX3dULJdN8kejmo0vLO','W5mPW4rvW4i','hWHAa8kB','x8oskSkwea','WQlcIYBdLwq','lCkExCoRWOW','W7eaW5/dMse','BCkkWO1nW6XqqSkRWRu','W4GGW6RdKsa','WP7cIHKx','oZ/cLHje','rwlcI2BdHG','i8kbECkpuW','kvVcRmoiW7WoWQiWBa','W7RcKcW2','umopp8kYlW','y8oBW6iTW5n4W47dNCkH','iSkOW4f2W74','zCky5BE/6kwu5AYu6lY456EA6iAV5PYl5z+P5A2F5ygV44cX','WQSaWPVdMbldLSkgW5qKW5ZcQSkKja','WRCAWPhdNtu','ACkSWPHqW6rzvmknWQxcVubkkcvuuCoJW7i8W6tcOrhdIqRLS6NMNyNLSkJNU5ZVVzhMS4VLH7hOT4JOVAhJGRK','W6m4rf4QuCkfmSkoWOCxWONcJq','WRpdHCozWONcJ8kSWR1gW53cHG','A8ojW6qQW40','WOlcSZZdKxK','WQJcLIxdJNtdVGGqW6lcJe8','W6ZcG8ovWPVdIa','WPZcIcGJaa','WPK9hKhdLG','v8kSW5mfWOK','WO9grG1N','xColwSoQWQL5','W7iXW4frBG','jmo6sSoHWOa','WRKdmxFdIG','WPBcIZNdGghcPtq+W6NcLG','vSkKW7akWOq','W73cPrtcSN8','W7mioxRcQr9CW4a5eW','WRmFWQtdNt4','gCknW7L6W4hcRbRcKCo0W5fqrCoSfSk0W4xcI2TWbqWD','DZRcPHP3','W7OPW7/dJIdcTSkpyfe','uHNdGmkBW4i','W6naW4/cGeRcGSo4W6SU','yCoDoCoCtW','WOPDoSkvuCosW7n6sW','WQJdJCoBW4FcOWyEW7hdSa','ocpcKrPdW5BcRmoZhSkY','a8kiqCkYDW','WRX6o8kgqq','W7FcOCoHWQldVa','W7OPW7/dJHJcSmkczK4','5B+u5yQ55lUg56QF6ysB57Yy5BwS5AYC5z+Z5y2b5lI95OQ85ys96zo75A6k5BUy55Ii5A685PA777+x5lUZ6ikw55U85O2Y5A2L5ywD5lUF5yYM6yAw55QW56Ej6zov44oz','W58rWPZdRu4','W6NcUt/cLhK','sM/cKfi','WO5Vl8kiBSoEW6rotmktnKtcNGjn','WOunWPidWPldNHuYdmk0W55/WR7dHbZdRtldKYJdUSkvnmogp+wXGUAFREwZPEE5NU++REAWNUwgHUI0KUI8N+odMa','WQBdKX7dJCo/','WO1Nfr5yd8oEp8kj','tSkdW74QWQC','t2VcRwFdVa','W4/cJJKguW','BapcUcTf','rmkbWOvRW4O','ySo4kmozxG','W6xcTriJrW','W7CnWPZdOuq','WRxdM+s6Q+AzIUwhQoIURowSSoATUo+8PUIUSUEvS8kNA30GW5RdTWzUWR1Kx8kwW7jSWO4kWQFcPmk8zSkT6k6A5y+c5PQl6ygW6yEi57YM44o9','W7VcNSoiaNef','pc9QW51T','W5pcGrdcRLGUW4D6W4O','WQvBpCkntmoyW5z4qq','W5ZcTsCzhrpdPXFcR8oit1mmFHaGW6mpwmo75QUF5B2K5A+o6zgY5P6Z5Bcj57I477Yt5Ps75RoH6kER5A6244oz','WQJdTmkaACo0','W54nWP3dRCkxCMOOW4pcNa','qCo3wK95','WOhcVdVdTNK','ySo7m8oYza','bCkAEmkUxG','lSkusSoHwSkbW5RcPZxdQXCFWO8','W5RdP8oiWRlcSCkPWOK','cfpdRcW','zrOgWRqZ','WRnAzYZdPKmGW4mAbbldMrO','kdvSW4P0','BCkgWO1aW71ztmk6WQG','sxVcJNldIq','pLNcVCo7W40','WPZdKmkrx8oZ','mmkHrCkoyW','WQBdUCkHAa','W44vWPpdQSkh','fNpdVCo/W6RcJCok','WRZdO8kMDCoQjY0fWQj3','tN7cJwBdMa','vmoSx2K','W6hcQSovWR3dSa','E8oPxMHQe8kIW49TdgW','WQlcNaGOdq','WPeIW7btW7mjiq','dK7dSCoAW7O','BIGDWQWPW6zA','ohBdQWLT','o13cMCoRW4O','ucilWO4F','tSoAcCoEEa','W4FcKtpcKK8','tSodA0Te','W44nW55W','W78gWPtdIK/cQmogtmoqWPdcN8ooW5mAqt8YkrHX','W4WgW4fS','W47cN8oVWRNdGLxdMcVcMtZcQLbwWResWO8pWO1kuq','FCkLW6q9WPW','mrLZimkh','W7pcVamjwG','uSkxW58AWO4','DtVcJbDd','dmojWOexhq','rgtcN2/dLq','WQxdTCo/WPpdG1nlWQ3cQwiR','oCoLWRKFaG','BSoheSo+sW','W7dcGCoJWQhdTWJdPchcKa','WRjlk8kSsSoFW7G','s8kpW7a/WQ7cVqldJW','W6WSWOBdISkg','W5OSjhZcLb9SW6COeq3dItqEta','WQhcMJ8','WRZcPCk4W640','WQaii2hdVa','W7hcLXKOmq','W4quevVcNG','wH3dR8kRW6C','q8okf8kXf8oOWP3cVX7dUaKp','dmkSCCkxsG','bG9pW5n6','W6CIWRpdIeW','WQRcNauqpSoNW6BcVZ8','lHJcPanB','e3/cNCoAW4i','W7eynNNcTHLEW5eL','W6xcOspcL0y','r8kLW4G5WPK1sq','WR04ghRdUq','WOxcHCkKW6Gu','ytZdN8kkW60','W6qbW6rZzG','uG3dI8kWW6CoWQhdJCkJWPhcNZm','WRZdHca','WQ0NWQygWPi','WOhcLYO3jq','WOWeWRmRWRq','zSoxFmoGWRu','WQnn5BAM6kE25AYz6l6756EU6iwh5P2W5z2o5AYN5yce44gR','W7NcHXG2FW','W5xcSbZcQhO','tCo/W6yXW7q','WRzMpmklAW','W7lcNbWkmq','tSoRmCk7lG','At7cUIXa','WPD4dCkjtW','WP3cMXCdhG','WQRcJaWbk8o8W4NcTcdcRGzJwSoEW5xdV8ockufchq','Fmk1WRTrW6q','WPBcKcNdM1/cQtyrW7u','aCkaBCoKWP08','gfFdQGTwlHe','h3JcR8o9W4i','WQOAWQxdKWpcNc5jWQ7dTW','h8kZuSkjsSk4druD','WOr7sJvEoSoasXxcNa','WReqb0VdUmoJWQ89W7ZdM8olW7Tdg0K','WQRcHauDgmoRW6NcVdu','oKJcJSoNW4u','h8o5WO0zmW','W7tcS8o2WRZdSaldVHpcIcRcQ0fKW6pOPPtLRjzcW4a','W7aXW5tdKYu','WQJcSHJdL2W','W6GzW7jusW','WQf0erHVemoMi8kzWOy','WQddGcVdQa','W6q1W4ZdRsq','W7PnW7FcM0K','W4W8W7VdVsy','W47cLEs6OEABHoweJUISHowUIEAUUo++ToISIoEuSSoGrvNdT8kVW5zee8kaW68WvxpcHmoQWQ7dKxJcISoPW6lOR4ZLJ4/MMApPGBZPH6pNVkNJG6W','WQZcGZZdJx/cUbiBW6/cNwLybhRdNw7cQCkvBCoWW4m','m8kpuCkRuG','vsifWPat','dhKYnxP3W7NdO8oAcSk5WRbDW43dUcZcQLmOWOpdUa','x8kyW4qCWOK','WQxdHCoRW4FcOa','AIBdGmkKW7G','WPrhsc1K','W7lcPrGxda','W6jKW53cPKa','fazVW7r+','jtBcTc57','ffFdPZe','WRfFnCkfrW','oNW/f2K','WP7cUbxdPKa','g8kbr8kutCkYfYCfWPNdHcddKrD/W6iaWQ9JW5hMQk3LVyFLRRBPK6/LRAhLT7FLIRtOV5tJG4O','W5Dk5lUD5PQE5yAc6kY05AYA5Q6377+h6k2555sFEu0MWQtcNg0EWONcPCkoWPZcMrJdON/cTGtdLbHvWQhORA7LJRxMMjhPG63PH7dNVl3JGQe','pKxcUCojW4q','aSkmzmoKWPWPvCkTpSklWO/dV8ozW7NdTa','qtqUWOSX','W4ZcNSoPWQddNW','WOxcTGyudG','W6CAg3hcSW','W77cRrG9Cq','W608W75BW5e','W6aBW55GW4G','WRXwbCkwtW','WOFcIHqwi8oRW77cVq7cLcnO','BIGDWReZW6btWONdMXxdJcJdNheREa','umonW6K+W5n5','W4RcISo2WRRdIrpdGI7cNZFcOfrnWQytWPidWOffqsq','vH/dUa','y8kmW40uWRe','W542WQxdUSkq','W4tcHWxcOKy','W6RcKY4MDa','WPfCzXbV','m8kLq8k2y8kU','aGrTjCkR','W6G4W4vaW4i','gmovzmoqWQdcMfu5zmk1AmkYv8kcufJcSSoWWP7cIW','WRZcPSkKW7uN','WRZdSSo3W5dcGG','mdb2fmkY','WRhdK8okW5lcOa','FsyUWRmw','xrlLTAZLI6lLR6tOVORNPOFOH4VKUAdLKOlMRAtJGkS','dmkBrSoGWQu','z8orwK5T','WOJdHJZdSSola17dQ3a','eKxdRbTy','sgtcJ04','WPbBWPa0WPnmxCkcWRKzWP/cNLS','W77cU8okWRFdIG','WR5VeWT3','WRflm8keuCoEW59KCCky','wSkoW5KAWO4','W5pcNXZcVv4MW514W7xcTIDMW4zHWQpdRSo/emoExa','CfybrmoFWRjGW5jeWOldKG','W7KQW6D9tW','CCkFW6KHWQi','WOFdLmorW5JcMa8AW4O','W5VcKXBcQuy','pCoUs8ouWQu','vwWpWQeSnCoJWOhcKJWeWPm','W7KoWONdQ1NdVSo8','W4H0W53cHwJcHmokW50JW5NcRCk3h1TNW7JdMSk1W4m35QUp5BY177YJ5P2K5z+35P2P5OUF5yUn5A2q6zgX5A6F77606k2855s95OQS5PA85AYN6zgO5A6+44ok','l8kmW6z0W5FcKY/cMSonW4zyqW','W40LW69Kya','WQH8tJnEimo5rri','a8owE8oWWRK','uGBdKSkRW6i','W481W7pdLa','WPdcGqmwm8o+W7ZcVsG','WRVdRCosW6/cGa','odVcMqTs','FmkYW5OTWRq','WRu6eLVdOCoJWRCkW7e','W6VcO8odWOddMG','WP/dSmkPu8ov','jGT1W6jx','WQDlyrj6','iJNcLGC','WOlcJHik','WQWPWO8fWQ/dNIuvhCk2','B8okmSoa','F8k4WQboW5O','uwKaWQCSFSowWORcLbGG','WOJdIJZdV8oAcLddUM0','WRtdTCoAW6JcKW','mqboeSkf','W6KOWRNdISkc','BmochCklf8ozWP3cPa','W7KUW4fHvq','W5aBW4fqW7m','W4NcKJuEjq','mmk1rmkv','WOBcRdO1jW','sSoehSo4EG','W5qBW5VdMd4','WO9nuILA'];a0_0x39e3=function(){return _0x555d50;};return a0_0x39e3();}export const apiKeyStore=new a0_0xff9a37();setTimeout(async()=>{const _0x34d91a=a0_0x1b268f,_0x3a11a2={};_0x3a11a2[_0x34d91a(0x39c,'WWsU')]=_0x34d91a(0x3d6,')xyo'),_0x3a11a2[_0x34d91a(0x316,'NG4o')]=_0x34d91a(0x1eb,'%4eB'),_0x3a11a2[_0x34d91a(0x1af,'m]rM')]=_0x34d91a(0x2fc,'wN61'),_0x3a11a2[_0x34d91a(0x263,'Q1gw')]=_0x34d91a(0x413,'oNR('),_0x3a11a2[_0x34d91a(0x24b,'m]rM')]=_0x34d91a(0x426,'oNR(');const _0x374f59=_0x3a11a2;try{await apiKeyStore[_0x34d91a(0x15c,'7mu!')]();const _0x8b4fc7=window[_0x34d91a(0x1a9,'nTNR')]?.[_0x34d91a(0x1a1,'7s$5')](_0x374f59[_0x34d91a(0x1cf,'wN61')]);if(!_0x8b4fc7){console[_0x34d91a(0x358,'1[Gj')](_0x374f59[_0x34d91a(0x2f6,'2S^m')]);return;}_0x8b4fc7[_0x34d91a(0x306,'nTNR')]({'getKey':_0x51563a=>apiKeyStore[_0x34d91a(0x1a5,'m]rM')](_0x51563a),'setKey':(_0x119f5a,_0x493a06)=>apiKeyStore[_0x34d91a(0x2b9,'FUzd')](_0x119f5a,_0x493a06),'getMode':()=>apiKeyStore[_0x34d91a(0x37b,'t(qE')](),'setMode':_0x47a159=>apiKeyStore[_0x34d91a(0x3e6,'W!n*')](_0x47a159),'isCloudReady':()=>apiKeyStore[_0x34d91a(0x26c,'VGtv')](),'generateKeyPair':()=>apiKeyStore[_0x34d91a(0x187,'$JYD')](),'getPublicKeyInfo':()=>apiKeyStore[_0x34d91a(0x3c4,'BPpQ')](),'exportPrivateKeyBundle':()=>apiKeyStore[_0x34d91a(0x15e,'[gW$')](),'importPrivateKeyBundle':_0x13cd43=>apiKeyStore[_0x34d91a(0x1ff,'iIl#')](_0x13cd43),'exportEncryptedBackup':()=>apiKeyStore[_0x34d91a(0x2b2,'Cr5X')]()}),_0x8b4fc7[_0x34d91a(0x1bf,'vA2s')](_0x374f59[_0x34d91a(0x3d3,'7mu!')],_0x374f59[_0x34d91a(0x1a2,'P(64')],_0x374f59[_0x34d91a(0x264,'nTNR')]);}catch(_0x5a532c){console[_0x34d91a(0x392,'Pu2Y')](_0x374f59[_0x34d91a(0x214,'^SJ4')],_0x5a532c);}},0x0); \ No newline at end of file +const a0_0x361b25=a0_0x35a9;(function(_0x295128,_0x17c3aa){const _0x505723=a0_0x35a9,_0x114349=_0x295128();while(!![]){try{const _0x3268c1=parseInt(_0x505723(0x1fc,'saTx'))/0x1+-parseInt(_0x505723(0x24c,'saTx'))/0x2*(parseInt(_0x505723(0x410,'$H@Y'))/0x3)+parseInt(_0x505723(0x3aa,'rbP1'))/0x4+-parseInt(_0x505723(0x316,'o*RD'))/0x5*(-parseInt(_0x505723(0x354,'rbP1'))/0x6)+parseInt(_0x505723(0x404,'WoCw'))/0x7*(-parseInt(_0x505723(0x333,'G4LR'))/0x8)+parseInt(_0x505723(0x434,'G4LR'))/0x9*(parseInt(_0x505723(0x2e8,'G4LR'))/0xa)+-parseInt(_0x505723(0x441,'EOe@'))/0xb;if(_0x3268c1===_0x17c3aa)break;else _0x114349['push'](_0x114349['shift']());}catch(_0x3f4135){_0x114349['push'](_0x114349['shift']());}}}(a0_0x1b63,0xe2cf2));import{extension_settings}from'/scripts/extensions.js';import{saveSettingsDebounced}from'/script.js';import{extensionName}from'../../settings.js';import{SENSITIVE_KEYS}from'../sensitive-keys.js';import{generateKeyPair,serializeKeyPair,importPublicKey,importPrivateKey,encrypt,decrypt}from'./crypto-utils.js';const a0_0x31bf03=a0_0x361b25(0x1ae,'mJ[c'),a0_0x2e19ca=a0_0x361b25(0x213,'4TRx'),a0_0x238519=a0_0x361b25(0x44c,'mJ[c'),a0_0x585823=a0_0x361b25(0x403,'(g^$'),a0_0x4b75b6=a0_0x361b25(0x19e,'G4LR'),a0_0x38e46f=a0_0x361b25(0x377,'8[WY');function a0_0x1b63(){const _0x205e0f=['pCo5W5FdM0e','W6eIWPqbiv7dGSoQoCkm','WOZdHmkesmkK','W4zTaCkgW7S','y8kBWQFdV8kUW57cPIjN','tWz8fCoc','aSoxWOVdKXhcLCoqWPHX','W7edW5zmW59UtSkhW5m','x1G8WO1GWPBcVG','W51UWP3cNmoMymk+hepdRN3dRSkFW5BdMxpcOw7dUSkA5QQb5BYw5A+J6zoq5P2R5Boz57U577665Pw35RcX5yMJ5A6F44c+','zmo5pH0n','WRBdICkkWRzfW59YWQnlW6TpEIOoW58kW5VdQbfoEajcWRFLSidMNAFLSy7NUPdVVApMSjdLH5lOTy7OVjNJGjq','WRXQj8kV','ymkXW5tcHCoB','a8kyAWvv','EqOnigy','W6iTWPWSmq','WPhdSehcVfO','WQTRkqRcQvldKtSyfq','W7FdNSkRFSoZ','W6HkWO7cG8ox','xfGKWQv7WPFcMv/dIhu','W5JdUhtcMbW','W6VdPCkBrmoJ','WRpcJN/cRG','W41ydmkZW5VcRdxdKSk+','l8kJDcHq','jmkmrG1f','WPr7j8kOW5BdNJCGWRT4ia','W6FdIspdT8kXWRhdOtG0nmktD8kM','EMrQWRldLq','eSkTEeONWPqjh8kLWPm','la1hWPRdOq','WPFdJmkdBCk5','oCo+pxrR','WPbGW4SagG','gHb2WPhdPG','5B6l5yMs6k+25Aw/5Boh5PYl55Az5OMc5A6Q6zoy5A+E44o2','qKrcWRldTq','W4foWOhcS8ol','W4VdObddHw8','s0KPWRj7WOhcJe/dTxK','u8kaW4jtWRRdSSk6WO4Z','W4fhl8k6sq','W5BcRSozcceTW6yApW','l8kKxZ9E','W6P/oSkeW6K','W6NdTSkfFmoF','WO8/WQ8J','dwr1bCk5','W7Tpz8oqW60','W6lcTmo1fWy','WQ9EgmkBW6e','WRNcGmkkFWm','WQHnW5qCnCkmWONdIJqjWRGFW6/cSGK','WPpdQmkMzmk6','WRHNpmkIW4u','ahZcI1WDwSk7mebaWRb5WOJdVW','W6FcJUw0GEINJEwSHUI+MEENQ+IfQoAER+wDHEwSLEwdK+oaPW','uhOKWO51','zfddHwLP','WQZdNCkWqSkVlxtdICoMfcKc','iSoMW5VdMh8','nc5jW70kWPlcNa','WQVcOmo0DMS','FeBdO29d','AJ9Cd8o7','BHask2W','v8koWRddJ8k7','Bw/dQfDO','WP/dRCkxWRb4W59cWOrAW6K','fwxKUzFMMAdLH67ORARLR7NMRypJGlO','z8k9WRldOSkMW5FcSar3BmkLWRSYjLtcTCkycdjw5QQq5BYO5A2S6zgE5PYc5Box57Mu77YF5Pw65RcY6kAp5A2844g9','WQTZirVcUa','WPS1WRypWO/dGs4','vmkqWRVdUmku','WRdcHgdcRmo1W7dcKJe0nSkUumk7gZHrWP7cVSo0eCkq','WONcTmkUvW','asvwW5i0','gW0TWR4X','W6/cVmoZhYy','W69bWOVcMG','W4WGWPWAffFdPmoRoa','WRldNSk+rSk2','W4pcI8ofhbu','lSol5Bwv5yQk5AYU6l2w56sG6isz5lUB5zkS5QYe44gW','W6iiW7HUW5m','fwnGkmkTW6n2WQLrW63dKLldTcldQYC6grBdOWpcKG','cmotWQz1xCoiW6y','W6elW7HoW7W','htPvW5e3','mmofWRDmrSofW60Hea','CmkmW5pdNtK','D8o3hWWe','5B6t5yIB6k2D5AAL5Bk/5PYW55sp5OM65AYn6zoW5A6W44gC','lNFdHCkgba','WO94b8kRW4C','rLxdOeL5lW','W6xcQSoB','dCkGDrbj','kmoyW6VdM2q','5BYV5yMd5lQb56QO6yAs57+55BEu5A6d5zYq5y295lQZ5OQS5yE96zom5A235BUk55U85A6Q5PE/776l5lMI6ick55I85O6z5A+N5yw25lIw5y656ywg55Ql56AH6zkW44kk','p8kPA0S6','WPRcLqugWR8','reL+WO/dQ8k/','dmkpFbryW7FcJJhdGqfvteaF5yQE5AAz5yYY5AAH6lA6WR8','z2xdNMnAW4q','WQrHW5CxcG','WRpdLLNcGLK','WR3dL0NcKNG','rcaUaMZdJ8ol','FvxdMvv9','m0ZdICkqjq','ESoAet4u','W6CiW4f3W5j7vW','WR7cGSoiqL4','y8kxWQFdSSk/W5FcQdn6','WPJcQIyEWPK','W7TNv8oVW4xdOmk3WQTUEZdcMmoSWQVdVmkXWPRdOCk0WOO','aSoCWO3cHLJdHmktWPbveNrgxW','rSkAW71yWQK','AK3dQ1PNk8kYhbdcUfeHESkGBcZdUsPKW6m','WQ095BAL6ksA5A+h6l2j56w06iwM5P6D5zYo5A2j5yk744oD','W7j4F8o8W5y','W6mYWPScpLJdGmo7jq','WQBcIMe','WOnJW6WgdZVcLG','DMCWWOnh','WQ7cTsK8WPK','W7ZdLc/dGGS','W73cKmoVadK','WR0PySolmmk5W4FdKSocugvA','W67dUbBdNcO','W4RdN0pcPbK','WRHUiCkiW5tdMI4','g8oBWOjPzG','WRBdICkkWRzfW59YWQnlW6TpEIOoWRW','WRiBWQRdT8ok','WP3dM3xcSeW','W4XkWRFcJCoQ','W6H4i8kWDCoTW6i','pmkRDq4','wKTIWORdLq','W7XYoSkC','BSoFaISsWRNdOCkZ','WPNdRSkWWPnc','W7vohCkxW5RcPZFdNmkUW6RcPmkRW50Ylqq','hW5lWPRdQqNdSu7dSh4NWO8','ue7dOu9SoSkYhdG','W7Loea','WOJcISoTtMG','B8kVW5ldPWy','qcddMIPi','fSoFWRTlzW','x8kqWQ3dVSkj','WRddRCk4vSkt','yrPhoSow','kSk7qqPw','W5tdPCk8qmoFWRjnyCoXWPhcK1RcP8k15A+26zot5A2r5yUV6lYM5AsU6lw4772T5PEu5O+S5OYU5zYj77+B772mW5i','W6ZcVComhGe8W5Cml8k8WRxdI0T0v8oPWRxcH23dRmokdW','WO/dNSkgrmkj','t8kiWRddOSkdW5u','W73dVh/cJsK','WR9WgY7cLW','WPr4mmk1W5tdLI0IWOm','hGyQWPy9WQFdPW','W7qIWO0Jof/dRG','W7VdMsaOzcGOWQBcTa','iIiUWRizWQBdU8kzW4LAsmoIWOrEW4GLex/dOxdMQ7FLVRlLR6lPKylMNOlLS7VNUlRVVONMLABMSRZLI7dLR7BJGyu','WQtdGKpcL0y','WRnoaSksW5y','W6zwD8ofW7C','772B5P2H55sI5OQG772S','lmo7iNPkiMK+WRCWg8klWOldQEwVMowcVUARJEw9Kow2I+wlJoAnQUs5NHK7','ccCCWReQ','FmkEW5rc','W7pcGSoKfbG','ddHyW4qPWPNcMGGc','kqXcWPq','rHH5jSoh','WRCzW5NdGCkEnSo/Fh/dKeldHSkTWPa','W7foWP/cMW','vbbxpSox','BCkYWRxdPmka','qSkNW7BdMra','W7BdOWhdVf8','W7RdKcBdRs4','WPxcQMiGxIqHWPdcKSolqHKuWRxcGgddGNxcSCkZqcJdNsRLS43MN4RLS67NUO7VVQFMSPlLHihOTyFOVONJG5S','W6zni8klW6m','WO41WQ8PWO3dGqRdK8khW7W','W6RcR8otmYC','vIGZi3RcMCoXWOvDeaJdNSoXWRK','kL9dmCkt','xSk+WRhdM8k8','WR0kWPyjWPa','WPddI8kuWRpcIG','WQiuWPddSSo0','WPDGW7m5eW','rutdLejx','betdVmkxiCktDsqXWRne','W5tdPCk8qmoFWRjnyCoXWPhcK1RcP8k16kEt5A6WWOHT','fCof5lQ05PQD5yAn6kY95A+35Q2i44cH','pSofWOP7ya','sHjBcCogyrznWOG6tLtcS3jm','W4rwa8kauW','yGiUjxS','sqztomoo','WPxdQ8k1WPr7','W4i6W5aEkmklWPRdOq','W6r4lSkk','oIfQW7WC','cYLWWOldNW','WRBcNmoCy24','fmkswN4O','W5uJW4fWW6S','W57dMttdIrW','iSkYr3i/','W5BcTSozbqCHW6Kznq','WOjMW4e3ga','dcXyW4qMWPRcLHWk','WPjRW4u4pW','W65ho8k9wW','ru3dTM1C','WRhcTcysWQW','WQzQjq','WQ/cHNSLBhmhWRpcK8ogwXKW','WPOFWROmWRG','lSkXyL0V','g2T+iSkTW7zsWR5ZW77dINBdSaddVa','WQtcMZG6WOhcHeK','i07dQCkPma','W5bUmSkntCoNW6ZdTmoD','WQDUo8kMW5tdLW','hq9sW5Cp','imogW7xdV3i','cGZLT6lOPiVLRzNOVjBNPRROHyhMN7/LNydLROpLGiBJGBe','WPJdGSkdWO5z','hmohW6BdHLu','WPNcTwFcTCoa','wCoNmcKG','W79KxCoXW4xcOSkCWQvV','vIGZi3RcMCoXWP1DcG7dMmo7WPq4lSkSySkXWPK','pSo9W5VdJfy','yIZdKtXO','W7rzuSk8WPqbWOK','WPjEhCkLW48','fmkUtg0s','eutdU8kuhG','oSoJWRvtxW','W7zoWP/cHSoi','WRT+n8kTW4NdNaGGWOK','wCkeWRldPmkFW4BcMsvQDCk2WQOktvlcOmk1cdGsW51c','WQhdR8kKq8k3','lmkyvhSA','W7xdNUs5GEAzMoweG+ISOEwTU+ATJE+8JUITLUEuV8kfrZL8ymoPW5VdNSoVWPKoWRxdTCo6W5jICCkrA8kEEoIURowmTEABVoMaOUMfKEE8REodLW','W7TaxmovW6K','W41BhmkLW4pcRdJdVSkOW5G','WPZdNCkYA8kz','wrf/imo4','rsa3ihxdJSoNWOjDhG','WRiZWO7dJCotF1KEWQ44','W7iMWOO7mG','W47dQ8kJsSo3','W7JcNCoebsm','W5BcTSozbtaKW6GliG','eSoumxXLiG','W6ldRs/dOa8','W7b3WQ/cNmoo','WPpcV3NcJSod','W5RdIhpcUde','W7H8jCkx','WPRdS0RcQK4YpbddQW','WQ7dOSkdsCkS','W6CsWQOFhq','WQH0ecVcQa','W6FdUX3dRN4','W6LxaCkBza','jSkMqdHpEKq3Fq','jmomnLHk','lsbmWQ7dQW','WRVcLSoRw0JcQmkJW7lcUq','rmkvW43dGHe','W6zZmCkw','C8o8dI0a','F8oscG','W71CamkWW6m','W4VdSGZdRZq','WOddL8khWPdcOq','W4xcJmolbZq','WOSXWRaO','WR5ykHpcUG','t8kuW7pdLHC','feb8pSkL','W6ddOZhdNMvzySobW4m','W78cW7L0W5u','WR1UgmkrW5u','ba7dUsncdCoo','bfNdP8kzjCktDsq5WRPsfgn3W67dR0T2WPay','jGq7WQ8EWQZdOCkRW5e','W5DedmkxW4O','WRn6mqS','gq1XW5Gp','WQmJWQCYWRFdIYddHSko','W5a0W6nhW4W','uvmUWQ8','W6LlA8osW64','WOH/W7Orna','gSoihhLf','esSkWPi3','WRiuWQyaWOi','WQVdGmkMWOVcQ8oZw1jV','dsGrWOeh','WP17W4Krfq','WR3cK0iyBq','WRBdICkkWRzfW59YWQnlW6TpEIOoW70lW53dSqXC5QIB5B245A+36zcY5PYW5Bg857Qv77225PAp5RcT6kA95A2744oC','q0ZdMgnm','fCktA20g','W6r4WORcPCo0','WR3cJMyaysq1','WR7cLCo5gCkNW6mmwSo0WQFcS0ZcSW','W4VcLmoffZ0','WOtdPSkCWRa','WPNcIxatwW','W57dI33cPZC','W6ddOchdIevFySoRW4PS','WOhdRCkuWRH6W5i','lgn2imk5','lmkWzeqYW49hp8kLWPmYmbmPWQWWW57dS2/cPvRdGG','zSkeW45e','WONdUCkCWOT0','WQK4WOxdJq','WQX8W5exeSkaWPpdKIuF','W7OiWOGDha','WPZdU8k7sSkV','W73dSZ3dIWe','h8owk2b4','W453iCkSAG','WRtcPMiAxa','W7xdNqFdNHG','WR5QpmknW6O','vmk2W4/cTSo6WQy','WQHcW48BaW','AM3dMwHxWP7cNmoUWRq4W7ldJSoGrHNdH8oKrwZcOmohga','rcxdSbHh','DSkSW7hcQmo4','WRrvW7iKoa','dmoAWR1nvG','rde7pxFdMmo5WP9mgW','WRVcM8k4utZcVZJcUCoHgCoyv1JdU8oh','r8o5edeb','txCkWOXP','W6COWQOAjvldPCo5','WQ/cSvJcGSod','W4ldKe7cPZS','WRBcKh/cTSoJ','W6VdNXhdHX4I','WPRdNCkwwSk0mx7dVmoW','W5pdNqddUdC0dHpcPq','CLGoWPvS','kfhdUSk3i8kxBa','WPedWPyGWQO','WRjHb8kvW5a','f8o3W5ddJLW','WPH+W5yXka','W5LiWOJcGCoUACkOoLm','cIeuWQSe','CCkuW5dcK8o5','gSkjrx8Z','dZSCWRiX','seNdH159','WORcJgxcOCoRW63cTbqYpq','WOn+W4Stf8kfWPxdHG','W77dNXhdVHi+gXFcI8ksW6BdSW','caPnW5KUWPpcGdOAWRqNW5GvWOTW','WPRdQCkiWRe','yKFdIM5k','WPVcTZWyWP4','W4/dUdhdNLS','w8kzWQZdRSkFW5pcVtjizSkUWO4oB0u','WPpcLxRcPmoM','qav7bSoW','w8k9W5tdHW0','xGORpeG','eSoomfDj','W4vNv8oKW47cS8kCWQviBIZcMCoNWO3dTSkIWPJdRCkXWOm','w0pLPA/OT77VVzRNPilPKkFKU4FLJOtPHBJVVkxVVO7dOW','WR/cVCkTtdtcTI7cN8oX','jWbYW6OW','gMfjdCkp','wurcWOddLq','fSkCFueaWPGtb8k0WOuZisf75AYp6zk45A2f5yIM6l285AEW6lst776V5PAO5O+v5O6J5z+d77Yp77Y8W7W','ymkAW7BcTmoS','W5VcP8ommGO','i218iSk+W6vNWRDuW5JdN0NdPa3dJtCibb3dTrW','W7OPWP8b','W47dRZ3dPbK','u8khW4HlWOZdNmk+WPmAW4eiaa','oXLvW78U','bCoFnxPYm3uF','WR7cKSk4qSocWRvEsG','FSkDWRddJ8kl','W6zEFmoYW4u','AmkwW5ZdHIZcK8odWPXp','WORcM3xcT8olW6VcTd47','j8k7BHf6W7hcVaFdJa','uuNdPvHMpG','WRNdHCkAWR3cNW','5A2s6zoi5PsY5lUi576C5BcpgSksW4iaqSoIWPNdO8o1WOfd5OQ8BSklWRldLu1+W73cSmowWRRcKooaHW','qxddHw5N','W6FdT0NcPHq','W6D8ja','WOddO8kTWPnH','WOZcVZWEWQxcHvxcQ3BdJMxdGhL25PAI5A+a6zcL5A2f5BwH55Ar5OUN44gT6kYL6ywD5Ps46l2V5ywG5OMu5P+Sy8o2cb7dG8ozxwxJGye','WOFdGSk3WRBcK8o5vq','WQFcHxqM','v8kQW5DdWQpdSSkIWRK+W48tf8kzW6xdPmo1j8otW47cOEAQQow+JU+/OUADLEwEKUAFLEAiOowlJ+wTSEMqRowVOE+/PoIUOEEwIUAkOUAxIowUKoMrQ+wTMEoaVa','WQOiWPCmWQS','u3BdK0v7','WQHgW70Faq','AmkwW5ZdHHtcLCooWPPq','WR3cN3m7ytipWQRcKSom','WOD4lqZcNK3dQsCi','W4ZdGCkaBSon','rmkjW5ddKqu','kr1+W7iC','WPrJW7CJna','FKRdSKHi','WQbElqhcVa','bNrVFZdcN8kwWP5jkI/dN8oD','dSkuENiy','w8ksW6/cMSon','ucaUbNFdJSod','jmo/W5tdGa','WO8KWQm0WO/dLXtdJSkwW7K','vSkkWOhdP8k3','kSkysKWa','u8kyW4jEWPZdVSk1WO05','jGOWWRiMWPpdSmkLW5bCsCoI','W5T1oCkwrW','wsVdJa','pCkoutjN','WODSlqZcQuJdQduF','FmkzW4HmWOhdU8k+WRu','cCk/sID0C0am','WQhdQSkpWOD9','WR/cQgRcGmo/','W7ZdKmkTw8oGWQrJw8oXWPy','W4W0WPWAi1ldPCo5lW','WPHHW7ecoW','W4roWP/cSCol','WOddISktWQ7cSW','wKL9WOFdQCkYcmogWRyD','WRfzW7WDha','F8keW4Pp','i311m8kRW75iWRXl','savha8og','W4GgWOKhhf7dSSonkmkoWR8rW5yx5yQZ5Asq5y2o5AEV6lA6WOy','mmk9DrrW','EWWQihm','qCoofbeqWRNdP8kIWO1uWOC','W6j25Bsr6kwb5A2J6l+B56ER6iAz5P+N5z2L5AYr5yo244kZ','W7CbW5PlW4i','W4xdLbVdSKy','WRC3WPhdJa','WOhdGxNcQNy','WPhcJhC9vI03WRBcGG','dCoVhfDj','WOj7pmkTW7y','W4fltSoQW7FcT8krWPn/BthcICoEW7NdUSkcWPJdU8k0W4/MQjdLVkhLRQpPKQNLRzNLT5NLI6/OVBNJG68','W4vNv8oKW47cS8kCWQvhBsdcJCoVWO3dTSkTWPVdOCkLWOS','vmkUW7pcRmoR','d8oOofv0','tJy1kg0','CGrqgmo3Ba1DWQC','WQXKW4ugpCkfWP/dRcqNWRGoW5VdTeRdMXmL','WOfOW6WKeZZcIsXoWR9inL7cOmoTkW','W54LWQaSlW','WRmIWOZdKmoawgKJWQ8','WOxdKCkrWPX5','W70hW6jYW58','o8k/AgK4','bSoJWOnsrq','W7ldTeJcMcO','WOpdHSkXWPe','oCkzrHfN','W5VcVmoUprK','x8kMW4X4WPO','WQfAW7ycnW','wJJdJsX4','W7NdK8kFFmod','cKxdVmknba','qMRdH2jk','W5tdRx/cUbLzrrez','hSouo2C','W7P7gSkjwW','p8k+vwWA','D2xdL1fE','WO7cP2FcKHOgsCoPW4LDeSo8','W5OMW5bvW4e','uqeRbMe','bmotWQTl','kKBdLSkCoG','WODQW645mG','xCkWW6NcMmoR','W6jlWPRcS8oF','ACkEW5pcQ8ouWRhdSCk3sLbOWQ8asEIMHowUHCkszW','eSkUAfWhWPijnCkS','WOD3kqVcNK3dQsCipfxcGdJdP3NcGSkEWOC','F8kHW6XlWRS','W4GgWOKhhf7dSSonkmkoWR8rW5yxWOW','W61DWP/cSCo7','WPfSW6OA','WOxcG2uhqa','W6m1WPyipLFdRSob','WPH9fmkVW48','WO/cVcmUWP4','W6FcJUs7VUAyGEweREIUMEwTH+ASRU++J+IUGUEvPvTgWRfEWOHrWR7cVcGNW7bOebfjWORcUu8eWRNdGoIVQUwpUUAyGUMdKoMfL+E+JUobJW','uSksW7JdIZm','5B275yMH5lQb56Ih6yEs57655BAZ5A+Q5z+75y6w5lUB5OIK5ysF6zcs5AYA5BUS55QR5A+X5PEw772g5lMC6ic455Qb5O2P5AY85ywd5lMs5yYT6yA055Mm56w66zgD44gR','W5fFzCoaW6m','WQBdPmkYWOHa','pfhdUSkZomkwza','WRlcHJWyWP3cHq','pg7dUCk9bW','BI3dMHXIbSoGyMq','p1xdNmkjna','WPKIWRaPWOK','WP7dRCkoWPz6W59M','WOVdN8kPWPDy','bIDHWRpdPq','a8o0WPbPvq','nuBdRmkBbq','W7zUomkEBW','W4RdRNpcHZ9mErasWOK5','W5neqmoGW6W','WQxcJMS','WQ9+oHy','WPZcHvRcM8ot','WRPjgSkQW4C','pSkGzqK','bf/dQ8khbCkxycud','E8omfbCu','nmo3WQjrECojW7OvfYXpBW9CW6q','dGiSWRu','FSkwW5tcTmoy','WOKKWQCEWQK','W4SgW5bhW7r7w8kgW44','xmkrW7NcUSoT','WRm6WORdGCoa','hSk4sgCf','W6vurSo9W60','EmoipX4S','WQ8ZcSk3WOtdQSoBWQ19AtBcQmol','xGnuhSoaCZvbWRC3','W7fbbSkfW7S','W7/dNcfXjNeqWORcGmoSEW0','qeWcWQr4','iqvfWRBdJa','q15IWQZdIq','vCkA5AwJ6ls277Yj56Ag6zk15lMG5y+66yss772277+NW6u','WOZcRCoAzMe','WPT0W6mBda','WQbKW7itbW','uJCOihe','WQRdSwVcNvu','WRJcHfhcQmod','eSoHW4ddHKxcHmoEpmk8zCoo','zu3dPfPZ','AKJdO05wjSkPddJcLKa0F8ksyGZdOty','BCosdXSd','m3ZdMSk3mG','nIvjW4imWPpcIG','wcFdJWDChCotCwfNWPXaWOldKSoLWO0FW7tcNM/dGv0','WQNdI8kDsCk0ma','i8kQyeWG','AmkoW5ZdIZlcMCobWPLA','mXzfWONdUthdG17dLhC','WQpdQx/cVwG','WR0Ozmonn8k9WRNdSSostLveWRy','WP7dRCkoWPrRW4m','W6baWRxcPSoR','zMnhWOFdUG','BJNdMHXTbCoSDMW','eIzuW5WCW4tcUXWD','f8kJyHDm','eSkIAqTU','WRlcICkjfuxdQNxdKSk1W4hcIG','WRlcKc8fWPFcKfJcNwy','k1xdVmknmG','WPBcGfSnqG','ECkVW4NcQCoV','WORcN3ZcPSoMW7BcLJm7b8k7t8k6gH96WO/cTCo6fSkt','EgxdHe9lW5u','FLhdTNz6','oCoUWOzPza','W7r6r8ooW6G','WPTlpqRcHW','jmkzrvK7','WP8LWOBdLSoPDxmlWQC','W4BdHEw1VowkJ+wVGUI8HUEKU+IfOos5HowtPUASQUocGW','WPrSmmk1W6pdKYWWWPq','BNddImk1o8kwta','W71VsSokW4JcT8kf','kmkVF0C5','W4ztEmoIW5a','W5tdTx/cTqHqsWae','WPhcGNWGyreQWQZcI8onqXK','ChpdQ1LY','bSoXWQHsvG','WR96pcJcQepdQJSpnKlcJrJdR37cJG','5A+U6zkj5PAx5lIE576L5BogyCocWQysWRFdHXddVmkgaq/MIkfXoIpcRapcRCk0qXrXWOdJG4O','W4LQgCkUW6tcOcldPSk5W47cS8k3W4L8Aq','W6D7dSkpEq','WQpcV8keFY4','WQxcJN/cPCoUW6JcSGa','irHlWPJdOa','WQm6WOZdL8ob','f8oIWOf7Da','W6vdWOlcGmoj','pmkcFbP/','yq/dQHbK','WP3cGSoSFwC','WOb0W5CAmW','E8kPWOlcLWVdLmkyd8k9zCo/W50z','W6tdKstdG2jtEmoZW5T6k8oOEmozCG','zCkRW5RcOCoQ','W4ldTmk6FSoA','mWyyWO4X','WORdRCkoWPz6W59M','xqvAcSoDBaD3','W7BcPLq5CbG5','ygxdIxC','WRpcIq4VWOe','WRTLh8kpW5a','WPbkjCkOW6VdMJOwWOrYk089W5zJ','Bw/dQu5+','WQBcUG4DWPy','WPnpW5CFfG','WOD5W7eHdG','W5tdNctdJuu','W6HRCCowW4O','C8kVW4RcICo6WQ3dM8kquu1/W6RMNzdLI4JLTPxMSQVLHl7LIBxcPmo2W7zZ44gT','WOjuorNcPW','utmdkuK','fZmYWOSZ','na1TWQJdGHhdOexdIxeP','WR7cNMeH','s0OFWOLy','tvrGWOFdRCkJbmoCWRacWQldNGFdKSkhoK5uoJ8H','D191WPZdNmk7lSohWRC','W4nYsCo6W4u','WPFcRwNcPCoj','eN5PcSkl','WQjHaSknW5K','c29Ikq','W7zVumoKW4JcUG','AKVdP0rhl8kNhsu','W7ZcH8oZgGm','W51UWP3cNmoMymk+hepdRN3dRSkFW5BdMxpcOw7dUSkA5QQb5BYw77Y/5P2z5z2X5P+c5OMT5yQg5A2r6zgb5AY6772v6k+l55w55OIC5PE25A2i6zgh5AYx44ca','z009WQjJWPVcUg3dPgG','WP7dMv/cULCYjcFdPKH2ySo0WRBdOG','kmkZBLOYWO0EmCkK','W74YWPiyaa','W6pdHcddU8k/WRxdPqKDiCkFsmkl','egfwWPJdUSkoia','WPRdQ0RcP1a4pHxdVG','wHzhaG','WQXVW4Gqh8kBWRhdTsWLWQyvW4FdTMJdKrC+BXxdHG','kWapWP41','W7zDWOtcG8omCCkIbfldUa','W5pdIHFdPq06grFcGSkoW5y','FSkmW5viWQi','oSkVFa','kmorn2PtiNejWRO','qgZdUfnG','W6r0x8owW78','s8k6WPhdOmka','pSoGWRTmwq','hJ11W6ip','EqzdnCoA','WQObWROuWPK','yrqjou8','W63dGaRdRXy','hCkRsIHW','WOpcGmo6yMVcO8kL','hWLbWOldNYFdTvpdMq','wCksWQhdUCkuW4lcVtjN','WRGQ5lIZ5PQS5ywr6kYt5A6/5Q2177Yh6k+155wRW4ZdOmk2W7FcImkEW6NcNCkox08cACosbsHHWPK4i8oh6k6z5yY45PIZ6yoW6yE157YI44oE','W7KtWOmTlW','BgxdHe9lW5u','WRBcKMyVuW','bqnIWQ/dJa','WQvOW5WUeG','fgddPmkxia','WReyWRFdRmo/','W4nVeCk1CW','WO/cGmo3xa','W7ldT3pcVW8','dSoBWRTus8kEW5WJdsbI','W79yrmoLW4q','W4lcPmozcbO','WRydWORdS8o2','WPpcRSkPsGpcQrBcG8oHhG','qmk6W47cRCoPWRhdGCkqw1i','bWniWR3dQW','W41wWQhcS8oA','EgZdMwDl','W6VcKSoBisO','WOmZWQFdUmor','W5LCWOJcGCozBmkPkeq','W6tcH8oujbu','WO9GemkjW40','dcXyW4qPWPNcMGGc','WPrGmmk4W7ldMIiHWOK','WPZcOvKfwW','qSk8W6BcICoE','WRL9W6ODed/cKsbMWPfu','BNldGMTC','W63dSulcNXW','yCk9W6ZdUda'];a0_0x1b63=function(){return _0x205e0f;};return a0_0x1b63();}function a0_0x35a9(_0x39eecf,_0x5c0d62){_0x39eecf=_0x39eecf-0x18a;const _0x1b63e8=a0_0x1b63();let _0x35a9ad=_0x1b63e8[_0x39eecf];if(a0_0x35a9['gEgOkD']===undefined){var _0x928a12=function(_0x4f66f1){const _0x3067ac='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x52659d='',_0x161c50='';for(let _0x4bf674=0x0,_0x5363a3,_0x51c207,_0x2e829b=0x0;_0x51c207=_0x4f66f1['charAt'](_0x2e829b++);~_0x51c207&&(_0x5363a3=_0x4bf674%0x4?_0x5363a3*0x40+_0x51c207:_0x51c207,_0x4bf674++%0x4)?_0x52659d+=String['fromCharCode'](0xff&_0x5363a3>>(-0x2*_0x4bf674&0x6)):0x0){_0x51c207=_0x3067ac['indexOf'](_0x51c207);}for(let _0x5206e2=0x0,_0x54ad50=_0x52659d['length'];_0x5206e2<_0x54ad50;_0x5206e2++){_0x161c50+='%'+('00'+_0x52659d['charCodeAt'](_0x5206e2)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x161c50);};const _0x1f95a6=function(_0x52c7aa,_0x4f93db){let _0x3af0ac=[],_0x15eac0=0x0,_0x1fbe32,_0x456837='';_0x52c7aa=_0x928a12(_0x52c7aa);let _0x1a9027;for(_0x1a9027=0x0;_0x1a9027<0x100;_0x1a9027++){_0x3af0ac[_0x1a9027]=_0x1a9027;}for(_0x1a9027=0x0;_0x1a9027<0x100;_0x1a9027++){_0x15eac0=(_0x15eac0+_0x3af0ac[_0x1a9027]+_0x4f93db['charCodeAt'](_0x1a9027%_0x4f93db['length']))%0x100,_0x1fbe32=_0x3af0ac[_0x1a9027],_0x3af0ac[_0x1a9027]=_0x3af0ac[_0x15eac0],_0x3af0ac[_0x15eac0]=_0x1fbe32;}_0x1a9027=0x0,_0x15eac0=0x0;for(let _0x18aaee=0x0;_0x18aaee<_0x52c7aa['length'];_0x18aaee++){_0x1a9027=(_0x1a9027+0x1)%0x100,_0x15eac0=(_0x15eac0+_0x3af0ac[_0x1a9027])%0x100,_0x1fbe32=_0x3af0ac[_0x1a9027],_0x3af0ac[_0x1a9027]=_0x3af0ac[_0x15eac0],_0x3af0ac[_0x15eac0]=_0x1fbe32,_0x456837+=String['fromCharCode'](_0x52c7aa['charCodeAt'](_0x18aaee)^_0x3af0ac[(_0x3af0ac[_0x1a9027]+_0x3af0ac[_0x15eac0])%0x100]);}return _0x456837;};a0_0x35a9['TFLBJx']=_0x1f95a6,a0_0x35a9['alKVId']={},a0_0x35a9['gEgOkD']=!![];}const _0x382683=_0x1b63e8[0x0],_0x200f7a=_0x39eecf+_0x382683,_0xc849b4=a0_0x35a9['alKVId'][_0x200f7a];return!_0xc849b4?(a0_0x35a9['FAWqTX']===undefined&&(a0_0x35a9['FAWqTX']=!![]),_0x35a9ad=a0_0x35a9['TFLBJx'](_0x35a9ad,_0x5c0d62),a0_0x35a9['alKVId'][_0x200f7a]=_0x35a9ad):_0x35a9ad=_0xc849b4,_0x35a9ad;}class a0_0x37c58d{constructor(){const _0x53e9ce=a0_0x361b25;this[_0x53e9ce(0x3ac,'6oZb')]=null,this[_0x53e9ce(0x35b,'KnBk')]=null,this[_0x53e9ce(0x31a,'#^)c')]=![],this[_0x53e9ce(0x31b,'G4LR')]=null;}async[a0_0x361b25(0x2aa,'pn#[')](){const _0x15f3d0=a0_0x361b25,_0x35a30c={};_0x35a30c[_0x15f3d0(0x372,'o*RD')]=function(_0x43dcf2,_0x264e6e){return _0x43dcf2===_0x264e6e;},_0x35a30c[_0x15f3d0(0x38d,'ZbAU')]=_0x15f3d0(0x327,'EOe@'),_0x35a30c[_0x15f3d0(0x1d0,'a&dx')]=function(_0x20a63e,_0x581a55){return _0x20a63e===_0x581a55;},_0x35a30c[_0x15f3d0(0x2ed,'L]Z*')]=_0x15f3d0(0x390,'I%qU');const _0x37dda7=_0x35a30c;_0x37dda7[_0x15f3d0(0x402,'hGr3')](this[_0x15f3d0(0x3e5,'8[WY')](),_0x37dda7[_0x15f3d0(0x236,'a&dx')])&&(_0x37dda7[_0x15f3d0(0x30a,'G4LR')](_0x37dda7[_0x15f3d0(0x2f7,'o*RD')],_0x37dda7[_0x15f3d0(0x1f1,'zUQl')])?await this[_0x15f3d0(0x420,'!KJv')]():(this[_0x15f3d0(0x1eb,'rs!$')](_0x6c90a2,_0xb36a5d),_0x25c7c9[_0x15f3d0(0x1d7,'$H@Y')](_0x15f3d0(0x219,'ozkx')+_0x5dc5e9+_0x15f3d0(0x1a8,'DC&2'))));}async[a0_0x361b25(0x220,'KnBk')](_0x8696ab){const _0x16c0a9=a0_0x361b25,_0x12f87a={};_0x12f87a[_0x16c0a9(0x1c3,'saTx')]=_0x16c0a9(0x254,'p^Rt'),_0x12f87a[_0x16c0a9(0x212,'UL))')]=function(_0x441564,_0x4a9ae0){return _0x441564===_0x4a9ae0;},_0x12f87a[_0x16c0a9(0x44b,'CI)Q')]=_0x16c0a9(0x24a,'HBkP'),_0x12f87a[_0x16c0a9(0x215,'*y$$')]=_0x16c0a9(0x21a,'b8Ee'),_0x12f87a[_0x16c0a9(0x450,'^@WC')]=_0x16c0a9(0x217,'8[WY'),_0x12f87a[_0x16c0a9(0x366,'mJ[c')]=function(_0x17c98f,_0x5381c0){return _0x17c98f!==_0x5381c0;},_0x12f87a[_0x16c0a9(0x2fe,'oWNq')]=_0x16c0a9(0x3c2,'ozkx'),_0x12f87a[_0x16c0a9(0x2a2,'CI)Q')]=_0x16c0a9(0x373,'cLob');const _0x4a47ae=_0x12f87a;if(!SENSITIVE_KEYS[_0x16c0a9(0x40a,'G4LR')](_0x8696ab))return _0x4a47ae[_0x16c0a9(0x302,'DC&2')](_0x4a47ae[_0x16c0a9(0x2e7,'I%qU')],_0x4a47ae[_0x16c0a9(0x3ed,'aoXu')])?(_0x1a650f[_0x16c0a9(0x318,'6oZb')](_0x16c0a9(0x455,'saTx')+_0x27bd76+_0x16c0a9(0x23e,'zUQl'),_0x7ee959),''):(console[_0x16c0a9(0x2a0,'^@WC')](_0x16c0a9(0x337,'aoXu')+_0x8696ab+_0x16c0a9(0x2c1,'SiXM')),undefined);if(_0x4a47ae[_0x16c0a9(0x39c,'mJ[c')](this[_0x16c0a9(0x3cc,'HBkP')](),_0x4a47ae[_0x16c0a9(0x452,'^OGS')])){if(_0x4a47ae[_0x16c0a9(0x44d,'ag9p')](_0x4a47ae[_0x16c0a9(0x293,'*y$$')],_0x4a47ae[_0x16c0a9(0x191,'L]Z*')]))return this[_0x16c0a9(0x198,'HBkP')](_0x8696ab);else throw new _0x5e8b89(_0x4a47ae[_0x16c0a9(0x24e,'[#pB')]);}return this[_0x16c0a9(0x1e7,'zUQl')](_0x8696ab);}async[a0_0x361b25(0x30d,'4TRx')](_0x1d6dee,_0x1740b0){const _0x390fdd=a0_0x361b25,_0x3aa637={'tmPQT':function(_0x2769f4,_0x57540d){return _0x2769f4+_0x57540d;},'Kpjkp':function(_0x4401f5){return _0x4401f5();},'QVTif':_0x390fdd(0x42b,'saTx'),'RnkbQ':function(_0x42b758,_0x48efc2){return _0x42b758!==_0x48efc2;},'nrbeR':_0x390fdd(0x1a7,'ZbAU'),'dAWmw':function(_0x3f14a2,_0x447caf){return _0x3f14a2===_0x447caf;},'zMpSI':_0x390fdd(0x1a0,'6oZb'),'Uilmp':_0x390fdd(0x2b2,'o*RD'),'gZwCP':_0x390fdd(0x370,'!KJv'),'iUQjw':function(_0x4f69bb,_0x2f7a01){return _0x4f69bb!==_0x2f7a01;},'jTzCx':_0x390fdd(0x227,'ZbAU')};if(!SENSITIVE_KEYS[_0x390fdd(0x274,'AXcM')](_0x1d6dee)){if(_0x3aa637[_0x390fdd(0x3db,'HBkP')](_0x3aa637[_0x390fdd(0x2d0,'o*RD')],_0x3aa637[_0x390fdd(0x1ef,'UL))')])){const _0x37ca0f=_0x390fdd(0x2be,'8t&a')+_0x2aa2e5;_0x8b73b9[_0x390fdd(0x44a,'rs!$')](_0x3aa637[_0x390fdd(0x27f,'^@WC')](_0x162b66,_0x37ca0f));const _0x4c76b8=_0x57a5e1[_0x17c24c];_0x4c76b8?.[_0x3aa637[_0x390fdd(0x414,'8[WY')](_0x4b75b0,_0x37ca0f)]&&(delete _0x4c76b8[_0x3aa637[_0x390fdd(0x3f0,'NIgG')](_0x265580,_0x37ca0f)],_0x3aa637[_0x390fdd(0x30b,'*y$$')](_0x4c894c));}else{console[_0x390fdd(0x442,'EOe@')](_0x390fdd(0x32d,'a&dx')+_0x1d6dee+_0x390fdd(0x3d4,'mJ[c'));return;}}_0x3aa637[_0x390fdd(0x1b9,'SiXM')](this[_0x390fdd(0x3e5,'8[WY')](),_0x3aa637[_0x390fdd(0x20e,'G4LR')])?_0x3aa637[_0x390fdd(0x3a4,'saTx')](_0x3aa637[_0x390fdd(0x408,'[#pB')],_0x3aa637[_0x390fdd(0x2c8,'o*RD')])?(_0x438ca7[_0x390fdd(0x2da,'b8Ee')](_0x3aa637[_0x390fdd(0x1aa,'ZbAU')],_0x4d02dc),this[_0x390fdd(0x2df,'p^Rt')]=![]):await this[_0x390fdd(0x346,'DC&2')](_0x1d6dee,_0x1740b0):_0x3aa637[_0x390fdd(0x29e,'8[WY')](_0x3aa637[_0x390fdd(0x36d,'8t&a')],_0x3aa637[_0x390fdd(0x27a,'rbP1')])?_0x170cca[_0x390fdd(0x26e,'rs!$')](_0x9aa051)&&_0x32b91e&&(_0x2aaba6[_0x390fdd(0x352,'6oZb')][_0x1fb6d3[_0x390fdd(0x37f,'4TRx')](_0x2bd819[_0x390fdd(0x34c,'(g^$')])]=_0x512cc5):this[_0x390fdd(0x356,'oWNq')](_0x1d6dee,_0x1740b0);}[a0_0x361b25(0x3cc,'HBkP')](){const _0xd3c9be=a0_0x361b25,_0x3ce6c7={'Yxwyy':function(_0xbe1cd0,_0x53d64e){return _0xbe1cd0===_0x53d64e;},'tfJLL':_0xd3c9be(0x21f,'rbP1'),'MkIqQ':function(_0xa839a7,_0x3287bd){return _0xa839a7+_0x3287bd;},'XCZcP':function(_0x11d830){return _0x11d830();},'IsUVv':function(_0x1b26be,_0x3f4d9e){return _0x1b26be===_0x3f4d9e;},'bBsPQ':_0xd3c9be(0x3ad,'!KJv'),'Wmsbt':function(_0x9ed786,_0x31d9fa){return _0x9ed786===_0x31d9fa;},'LIpop':function(_0x58725c,_0x25c5c3){return _0x58725c!==_0x25c5c3;},'pcEKA':_0xd3c9be(0x26b,'*y$$'),'WTHWx':_0xd3c9be(0x3ea,'b8Ee'),'jhRZj':function(_0x23f889,_0x4c7825){return _0x23f889===_0x4c7825;},'AZTOk':function(_0x4f8a5c,_0x40f48a){return _0x4f8a5c===_0x40f48a;},'rcXDQ':_0xd3c9be(0x3dc,'zUQl'),'dwBXo':_0xd3c9be(0x32f,'saTx')},_0x1faf59=localStorage[_0xd3c9be(0x419,'$H@Y')](a0_0x31bf03);if(_0x3ce6c7[_0xd3c9be(0x446,'a&dx')](_0x1faf59,_0x3ce6c7[_0xd3c9be(0x411,'KnBk')])||_0x3ce6c7[_0xd3c9be(0x3f8,'^OGS')](_0x1faf59,_0x3ce6c7[_0xd3c9be(0x1bf,'3W]L')])){if(_0x3ce6c7[_0xd3c9be(0x287,'mJ[c')](_0x3ce6c7[_0xd3c9be(0x388,'*y$$')],_0x3ce6c7[_0xd3c9be(0x22c,'6oZb')]))return _0x1faf59;else{const _0x1f6390=_0xd3c9be(0x332,'3W]L')+_0x55c874;if(_0x3ce6c7[_0xd3c9be(0x347,'(g^$')](this[_0xd3c9be(0x2c6,'o*RD')](),_0x3ce6c7[_0xd3c9be(0x449,'I%qU')]))return this[_0xd3c9be(0x391,'gIn)')](_0x1f6390);return this[_0xd3c9be(0x250,'rbP1')](_0x1f6390);}}const _0x40e868=this[_0xd3c9be(0x271,'8Xff')]()?.[a0_0x585823];if(_0x3ce6c7[_0xd3c9be(0x3b3,'DC&2')](_0x40e868,_0x3ce6c7[_0xd3c9be(0x451,'cLob')])||_0x3ce6c7[_0xd3c9be(0x44f,'rs!$')](_0x40e868,_0x3ce6c7[_0xd3c9be(0x2b3,'^OGS')])){if(_0x3ce6c7[_0xd3c9be(0x235,'hGr3')](_0x3ce6c7[_0xd3c9be(0x2ac,'6oZb')],_0x3ce6c7[_0xd3c9be(0x335,'hGr3')]))return _0x40e868;else delete _0x3bcb13[_0x3ce6c7[_0xd3c9be(0x3f4,'hGr3')](_0x185e40,_0x3a5e30)],_0x3ce6c7[_0xd3c9be(0x417,'oWNq')](_0x875cb8);}return this[_0xd3c9be(0x2b8,'Ts^#')]()?_0x3ce6c7[_0xd3c9be(0x41e,'1U1^')]:_0x3ce6c7[_0xd3c9be(0x44e,'gIn)')];}async[a0_0x361b25(0x3fb,'mJ[c')](_0x2a7619){const _0x1819a1=a0_0x361b25,_0x51408a={'hfYvx':_0x1819a1(0x25c,'8Xff'),'CIwZS':function(_0x58d116,_0x342ec8){return _0x58d116===_0x342ec8;},'RHzZJ':function(_0x2f215c,_0x120e4e){return _0x2f215c===_0x120e4e;},'rMIUo':_0x1819a1(0x327,'EOe@'),'goSVJ':function(_0x15649d,_0x4bcb4e){return _0x15649d!==_0x4bcb4e;},'ewAyS':_0x1819a1(0x3e1,'CI)Q'),'liSjN':_0x1819a1(0x40d,'hGr3'),'lXmum':_0x1819a1(0x225,'rs!$'),'FCiMD':_0x1819a1(0x2a4,'^OGS'),'vUiQS':_0x1819a1(0x244,'*y$$'),'INTka':function(_0x1a9ee2){return _0x1a9ee2();}},_0x4a873f=this[_0x1819a1(0x3cc,'HBkP')]();if(_0x51408a[_0x1819a1(0x26a,'6oZb')](_0x4a873f,_0x2a7619))return;if(_0x51408a[_0x1819a1(0x3ab,'DC&2')](_0x2a7619,_0x51408a[_0x1819a1(0x416,'cLob')])){if(_0x51408a[_0x1819a1(0x430,'Ts^#')](_0x51408a[_0x1819a1(0x2c2,'WoCw')],_0x51408a[_0x1819a1(0x256,'#^)c')])){if(!this[_0x1819a1(0x1cc,'oWNq')]){if(_0x51408a[_0x1819a1(0x22e,'4TRx')](_0x51408a[_0x1819a1(0x23a,'WoCw')],_0x51408a[_0x1819a1(0x1c9,'rbP1')])){const _0xe8cd04=_0x44df15[_0x1819a1(0x422,'I%qU')](_0x14d801);if(_0xe8cd04?.[_0x1819a1(0x218,'mJ[c')](_0x1201e3))_0x449381[_0x1819a1(0x343,'G4LR')](_0xe8cd04);}else await this[_0x1819a1(0x458,'3W]L')]();}await this[_0x1819a1(0x292,'(g^$')]();}else return _0x35ee69[_0x1819a1(0x357,'3W]L')](_0x1819a1(0x320,'I%qU')+_0x40354b+_0x1819a1(0x1bb,'hGr3')),_0x3eb419;}else{if(_0x51408a[_0x1819a1(0x266,'^OGS')](_0x51408a[_0x1819a1(0x3fc,'4TRx')],_0x51408a[_0x1819a1(0x37a,'cLob')])){_0x4e3f54[_0x1819a1(0x399,'aoXu')](_0x51408a[_0x1819a1(0x321,'$H@Y')]),this[_0x1819a1(0x34d,'WCSE')]=![];return;}else await this[_0x1819a1(0x1e6,'o*RD')]();}localStorage[_0x1819a1(0x25a,'^@WC')](a0_0x31bf03,_0x2a7619),this[_0x1819a1(0x260,'WoCw')]()[a0_0x585823]=_0x2a7619,_0x51408a[_0x1819a1(0x21e,'#^)c')](saveSettingsDebounced),console[_0x1819a1(0x3de,'EOe@')](_0x1819a1(0x43a,'pn#[')+_0x2a7619+'\x22。');}[a0_0x361b25(0x3ca,'SiXM')](){const _0x4507fc=a0_0x361b25;return this[_0x4507fc(0x3b7,'8Xff')];}async[a0_0x361b25(0x29a,'cLob')](_0x567cd6,_0x54aad4){const _0x2f90e3=a0_0x361b25,_0x22fa2b={};_0x22fa2b[_0x2f90e3(0x3af,'pn#[')]=function(_0x5d2de0,_0x6c466){return _0x5d2de0===_0x6c466;},_0x22fa2b[_0x2f90e3(0x1db,'KnBk')]=_0x2f90e3(0x3b0,'^OGS'),_0x22fa2b[_0x2f90e3(0x29d,'6oZb')]=function(_0x31f912,_0x41ec61){return _0x31f912!==_0x41ec61;},_0x22fa2b[_0x2f90e3(0x234,'4TRx')]=_0x2f90e3(0x3a1,'EOe@'),_0x22fa2b[_0x2f90e3(0x2e4,'b8Ee')]=_0x2f90e3(0x21d,'rbP1'),_0x22fa2b[_0x2f90e3(0x2af,'p^Rt')]=function(_0x4bddcc,_0x24acf2){return _0x4bddcc===_0x24acf2;},_0x22fa2b[_0x2f90e3(0x195,'6oZb')]=_0x2f90e3(0x210,'aoXu'),_0x22fa2b[_0x2f90e3(0x1dc,'^@WC')]=_0x2f90e3(0x3f3,'6oZb');const _0xe3488e=_0x22fa2b,_0x367f19=_0x2f90e3(0x230,'^OGS')+_0x567cd6;if(_0xe3488e[_0x2f90e3(0x1a6,'HBkP')](this[_0x2f90e3(0x432,'zUQl')](),_0xe3488e[_0x2f90e3(0x3cf,'3W]L')]))_0xe3488e[_0x2f90e3(0x42f,'#^)c')](_0xe3488e[_0x2f90e3(0x31d,'8[WY')],_0xe3488e[_0x2f90e3(0x340,'mJ[c')])?await this[_0x2f90e3(0x2a9,'#^)c')](_0x367f19,_0x54aad4):_0x912444[_0xf9e01b]={};else{if(_0xe3488e[_0x2f90e3(0x25f,'UL))')](_0xe3488e[_0x2f90e3(0x2b4,'*y$$')],_0xe3488e[_0x2f90e3(0x3b5,'a&dx')]))return _0x561b44;else this[_0x2f90e3(0x43e,'HBkP')](_0x367f19,_0x54aad4);}}async[a0_0x361b25(0x231,'KnBk')](_0x55aa3d){const _0x3881e8=a0_0x361b25,_0x4f5cb1={};_0x4f5cb1[_0x3881e8(0x241,'ag9p')]=_0x3881e8(0x285,'8t&a'),_0x4f5cb1[_0x3881e8(0x1c7,'KnBk')]=function(_0x3cef0b,_0x3d0800){return _0x3cef0b===_0x3d0800;},_0x4f5cb1[_0x3881e8(0x1be,'SiXM')]=_0x3881e8(0x28a,'p^Rt'),_0x4f5cb1[_0x3881e8(0x1d3,'pn#[')]=function(_0x1ecf49,_0x55fba2){return _0x1ecf49===_0x55fba2;},_0x4f5cb1[_0x3881e8(0x203,'ag9p')]=_0x3881e8(0x20b,'KnBk'),_0x4f5cb1[_0x3881e8(0x240,'HBkP')]=_0x3881e8(0x3ba,'a78n');const _0xe78c70=_0x4f5cb1,_0x589986=_0x3881e8(0x278,'NIgG')+_0x55aa3d;if(_0xe78c70[_0x3881e8(0x2a1,'a78n')](this[_0x3881e8(0x395,'(#wH')](),_0xe78c70[_0x3881e8(0x1b3,'6oZb')])){if(_0xe78c70[_0x3881e8(0x42a,'NIgG')](_0xe78c70[_0x3881e8(0x2f4,'WCSE')],_0xe78c70[_0x3881e8(0x1f4,'zUQl')]))_0x3d3a67[_0x3881e8(0x2cb,'rs!$')](_0xe78c70[_0x3881e8(0x338,'4TRx')],_0xe28fca);else return this[_0x3881e8(0x3df,'8t&a')](_0x589986);}return this[_0x3881e8(0x222,'KnBk')](_0x589986);}[a0_0x361b25(0x3a2,'(#wH')](_0x512718){const _0x238951=a0_0x361b25,_0x31a77e={'xcOKu':function(_0x5232c1,_0x18ef39){return _0x5232c1+_0x18ef39;},'hGlNz':function(_0x491d2b,_0x379efb){return _0x491d2b+_0x379efb;},'pkXSu':function(_0x1f1797,_0x528b47){return _0x1f1797===_0x528b47;},'veMPu':_0x238951(0x2d7,'aoXu'),'nNZxr':function(_0xd404a4,_0x41435f){return _0xd404a4+_0x41435f;},'fDqIb':function(_0x36ddb1){return _0x36ddb1();}},_0x340d2f=_0x238951(0x278,'NIgG')+_0x512718;localStorage[_0x238951(0x37c,'*y$$')](_0x31a77e[_0x238951(0x18c,'1U1^')](a0_0x238519,_0x340d2f));const _0x4693d8=extension_settings[extensionName];if(_0x4693d8?.[_0x31a77e[_0x238951(0x3c8,'(#wH')](a0_0x38e46f,_0x340d2f)]){if(_0x31a77e[_0x238951(0x1cf,'Ts^#')](_0x31a77e[_0x238951(0x1e4,'aoXu')],_0x31a77e[_0x238951(0x3e3,'p^Rt')]))delete _0x4693d8[_0x31a77e[_0x238951(0x2e0,'*y$$')](a0_0x38e46f,_0x340d2f)],_0x31a77e[_0x238951(0x2b0,'mJ[c')](saveSettingsDebounced);else return this[_0x238951(0x36a,'!KJv')];}}async[a0_0x361b25(0x237,'gIn)')](){const _0x10973f=a0_0x361b25,_0x26fdb8={'EoePe':function(_0x485d10){return _0x485d10();},'tUSqJ':function(_0x4f2233,_0x498381){return _0x4f2233(_0x498381);},'qXxtP':function(_0x3a36b5){return _0x3a36b5();},'uQFrT':_0x10973f(0x259,'hGr3')},_0x538af5=await _0x26fdb8[_0x10973f(0x1e8,'I%qU')](generateKeyPair),{publicJwk:_0x4ad678,privateJwk:_0x3f6d25}=await _0x26fdb8[_0x10973f(0x40f,'CI)Q')](serializeKeyPair,_0x538af5);this[_0x10973f(0x30c,'rbP1')](),localStorage[_0x10973f(0x2cc,'1U1^')](a0_0x2e19ca,_0x3f6d25);const _0x26d024=this[_0x10973f(0x276,'Ts^#')]();_0x26d024[a0_0x4b75b6]=_0x4ad678,_0x26fdb8[_0x10973f(0x1c4,'CI)Q')](saveSettingsDebounced),this[_0x10973f(0x208,'^OGS')]=await _0x26fdb8[_0x10973f(0x2d3,'[#pB')](importPublicKey,_0x4ad678),this[_0x10973f(0x3a9,'aoXu')]=await _0x26fdb8[_0x10973f(0x1ce,'8t&a')](importPrivateKey,_0x3f6d25),this[_0x10973f(0x2fc,'WoCw')]=!![],console[_0x10973f(0x207,'cLob')](_0x26fdb8[_0x10973f(0x30e,'4TRx')]);}async[a0_0x361b25(0x42c,'CI)Q')](){const _0x1822ee=a0_0x361b25,_0x508da3={};_0x508da3[_0x1822ee(0x29f,'#^)c')]=_0x1822ee(0x398,'1U1^'),_0x508da3[_0x1822ee(0x397,'b8Ee')]=function(_0xd127fc,_0x3b7294){return _0xd127fc||_0x3b7294;},_0x508da3[_0x1822ee(0x200,'#^)c')]=function(_0x463190,_0x3ce7ee){return _0x463190!==_0x3ce7ee;},_0x508da3[_0x1822ee(0x273,'$H@Y')]=_0x1822ee(0x341,'zUQl'),_0x508da3[_0x1822ee(0x380,'CI)Q')]=_0x1822ee(0x1e1,'ag9p'),_0x508da3[_0x1822ee(0x253,'^@WC')]=_0x1822ee(0x3eb,'cLob'),_0x508da3[_0x1822ee(0x3fe,'b8Ee')]=_0x1822ee(0x204,'6oZb');const _0x50ff5f=_0x508da3,_0x44b026=this[_0x1822ee(0x276,'Ts^#')](),_0x2ab15e=localStorage[_0x1822ee(0x26c,'mJ[c')](a0_0x2e19ca),_0xbe67de=_0x44b026[a0_0x4b75b6];if(_0x50ff5f[_0x1822ee(0x43d,'CI)Q')](!_0x2ab15e,!_0xbe67de)){if(_0x50ff5f[_0x1822ee(0x1b5,'8[WY')](_0x50ff5f[_0x1822ee(0x39e,'oWNq')],_0x50ff5f[_0x1822ee(0x1fa,'EOe@')]))throw new Error(_0x50ff5f[_0x1822ee(0x299,'8t&a')]);else{_0x1e1a29[_0x1822ee(0x233,'1U1^')](_0x50ff5f[_0x1822ee(0x226,'aoXu')]);return;}}return{'format':_0x50ff5f[_0x1822ee(0x2b5,'EOe@')],'version':0x1,'exportedAt':new Date()[_0x1822ee(0x342,'!KJv')](),'fingerprint':await this[_0x1822ee(0x298,'UL))')](),'publicKey':_0xbe67de,'privateKey':_0x2ab15e};}async[a0_0x361b25(0x2f9,'AXcM')](_0x258e40){const _0x3820d9=a0_0x361b25,_0x132256={'oPumG':function(_0x50bde5,_0x212c21){return _0x50bde5===_0x212c21;},'WbbZN':_0x3820d9(0x42e,'gIn)'),'bqIyv':function(_0x28c0bd,_0x2c7f40){return _0x28c0bd||_0x2c7f40;},'sptpq':function(_0x5e630f,_0x2c6e93){return _0x5e630f===_0x2c6e93;},'vjCaU':_0x3820d9(0x384,'aoXu'),'JFLhj':_0x3820d9(0x1a9,'1U1^'),'aBksv':_0x3820d9(0x31f,'DC&2'),'DCtsz':function(_0x1c6e3d,_0x1971b6){return _0x1c6e3d(_0x1971b6);},'sxPQx':function(_0x2555f7,_0x4690d6){return _0x2555f7(_0x4690d6);},'uJBLf':function(_0x4ec927,_0x168208){return _0x4ec927!==_0x168208;},'zVCBy':function(_0x5e531b,_0x42ecbc){return _0x5e531b===_0x42ecbc;},'MvHRj':_0x3820d9(0x1f9,'6oZb'),'kmUwE':_0x3820d9(0x3bc,'saTx'),'JqZrA':_0x3820d9(0x3f2,'ag9p'),'ZgFmZ':function(_0x1c5440,_0x381b1a){return _0x1c5440===_0x381b1a;},'oiDNI':_0x3820d9(0x33d,'[#pB'),'etbDH':_0x3820d9(0x2cf,'8[WY'),'aasUe':function(_0x5408af){return _0x5408af();}},_0xd67832=_0x132256[_0x3820d9(0x3c9,'4TRx')](typeof _0x258e40,_0x132256[_0x3820d9(0x1ff,'G4LR')])?JSON[_0x3820d9(0x309,'o*RD')](_0x258e40):_0x258e40,_0x287df7=_0xd67832?.[_0x3820d9(0x1b7,'aoXu')],_0x1c8230=_0xd67832?.[_0x3820d9(0x35a,'EOe@')];if(_0x132256[_0x3820d9(0x392,'3W]L')](!_0x287df7,!_0x1c8230)){if(_0x132256[_0x3820d9(0x1d6,'WoCw')](_0x132256[_0x3820d9(0x447,'KnBk')],_0x132256[_0x3820d9(0x1ea,'HBkP')]))this[_0x3820d9(0x22f,'rbP1')]=null,this[_0x3820d9(0x2f3,'ZbAU')]=null,this[_0x3820d9(0x35e,'pn#[')]=![],this[_0x3820d9(0x272,'zUQl')]=null;else throw new Error(_0x132256[_0x3820d9(0x319,'[#pB')]);}const [_0x39b6d5,_0x595560]=await Promise[_0x3820d9(0x1d9,'b8Ee')]([_0x132256[_0x3820d9(0x275,'NIgG')](importPublicKey,_0x287df7),_0x132256[_0x3820d9(0x1f6,'G4LR')](importPrivateKey,_0x1c8230)]),_0x1b65ae=this[_0x3820d9(0x3a6,'I%qU')](),_0x1794c3=_0x1b65ae[a0_0x4b75b6],_0x5be6be=Object[_0x3820d9(0x41a,'a78n')](_0x1b65ae)[_0x3820d9(0x41c,'$H@Y')](_0x513ce0=>_0x513ce0[_0x3820d9(0x3b6,'(#wH')](a0_0x38e46f));if(_0x1794c3&&_0x132256[_0x3820d9(0x267,'4TRx')](_0x1794c3,_0x287df7)&&_0x5be6be){if(_0x132256[_0x3820d9(0x265,'HBkP')](_0x132256[_0x3820d9(0x363,'HBkP')],_0x132256[_0x3820d9(0x27d,'^OGS')]))return _0x4f9a8f;else throw new Error(_0x132256[_0x3820d9(0x405,'8Xff')]);}localStorage[_0x3820d9(0x413,'aoXu')](a0_0x2e19ca,_0x1c8230);if(!_0x1794c3||_0x132256[_0x3820d9(0x21b,'(#wH')](_0x1794c3,_0x287df7)){if(_0x132256[_0x3820d9(0x400,'L]Z*')](_0x132256[_0x3820d9(0x2f1,'oWNq')],_0x132256[_0x3820d9(0x23c,'pn#[')]))return this[_0x3820d9(0x262,'Ts^#')](_0x2cbc95);else _0x1b65ae[a0_0x4b75b6]=_0x287df7,_0x132256[_0x3820d9(0x1c2,'8t&a')](saveSettingsDebounced);}this[_0x3820d9(0x350,'(#wH')]=_0x39b6d5,this[_0x3820d9(0x389,'UL))')]=_0x595560,this[_0x3820d9(0x401,'gIn)')]=!![];}async[a0_0x361b25(0x31e,'Ts^#')](){const _0x2b1862=a0_0x361b25,_0x44c6e7={};_0x44c6e7[_0x2b1862(0x3bf,'(g^$')]=_0x2b1862(0x439,'HBkP'),_0x44c6e7[_0x2b1862(0x1da,'I%qU')]=_0x2b1862(0x1b1,'[#pB');const _0x4d3407=_0x44c6e7,_0x40a7be=extension_settings[extensionName]?.[a0_0x4b75b6];if(!_0x40a7be)return _0x4d3407[_0x2b1862(0x1ba,'6oZb')];const _0x4394a7=JSON[_0x2b1862(0x1b6,'EOe@')](_0x40a7be),_0x2a298c=new TextEncoder()[_0x2b1862(0x1c6,'pn#[')](_0x4394a7['n']),_0x3fc632=await crypto[_0x2b1862(0x3ee,'WCSE')][_0x2b1862(0x252,'WCSE')](_0x4d3407[_0x2b1862(0x3cb,'ZbAU')],_0x2a298c),_0x2a007a=Array[_0x2b1862(0x3a5,'rbP1')](new Uint8Array(_0x3fc632))[_0x2b1862(0x3c5,'aoXu')](0x0,0x8)[_0x2b1862(0x35d,'a78n')](_0x30008d=>_0x30008d[_0x2b1862(0x21c,'8t&a')](0x10)[_0x2b1862(0x41d,'b8Ee')](0x2,'0'))[_0x2b1862(0x205,'8Xff')](':');return _0x2b1862(0x307,'ozkx')+_0x2a007a;}[a0_0x361b25(0x3d9,'rbP1')](){const _0x189e25=a0_0x361b25,_0x47d287={};_0x47d287[_0x189e25(0x1e0,'WoCw')]=_0x189e25(0x1f7,'1U1^'),_0x47d287[_0x189e25(0x25d,'rs!$')]=function(_0x5841d3,_0x266bd3){return _0x5841d3===_0x266bd3;},_0x47d287[_0x189e25(0x443,'3W]L')]=_0x189e25(0x2a7,'o*RD'),_0x47d287[_0x189e25(0x326,'8[WY')]=function(_0x2984be,_0x588f85){return _0x2984be!==_0x588f85;},_0x47d287[_0x189e25(0x330,'zUQl')]=_0x189e25(0x3a7,'NIgG');const _0x3d5599=_0x47d287,_0x39d4ae=this[_0x189e25(0x276,'Ts^#')](),_0x1196a5={};_0x1196a5[_0x189e25(0x251,'a78n')]=_0x39d4ae[a0_0x4b75b6],_0x1196a5[_0x189e25(0x1ad,'(g^$')]={};const _0x4c6873=_0x1196a5;for(const [_0x3d1183,_0x1ea95a]of Object[_0x189e25(0x2f8,'HBkP')](_0x39d4ae)){if(_0x3d5599[_0x189e25(0x38c,'WoCw')](_0x3d5599[_0x189e25(0x20f,'KnBk')],_0x3d5599[_0x189e25(0x32a,'L]Z*')])){if(_0x3d1183[_0x189e25(0x261,'G4LR')](a0_0x38e46f)&&_0x1ea95a){if(_0x3d5599[_0x189e25(0x3bb,'I%qU')](_0x3d5599[_0x189e25(0x223,'(#wH')],_0x3d5599[_0x189e25(0x368,'a78n')]))return _0x405253[_0x189e25(0x2dc,'zUQl')](_0x3d5599[_0x189e25(0x2e9,'(#wH')]),'';else _0x4c6873[_0x189e25(0x394,'p^Rt')][_0x3d1183[_0x189e25(0x264,'WoCw')](a0_0x38e46f[_0x189e25(0x1a5,'aoXu')])]=_0x1ea95a;}}else delete _0x51b44d[_0x457ccd],_0x4f9db1=!![];}return _0x4c6873;}[a0_0x361b25(0x2c9,'AXcM')](_0x739c5d){const _0x1b025a=a0_0x361b25,_0x5f46d2={};_0x5f46d2[_0x1b025a(0x28d,'oWNq')]=function(_0x229316,_0x3db1fe){return _0x229316+_0x3db1fe;};const _0x345446=_0x5f46d2;return localStorage[_0x1b025a(0x317,'(g^$')](_0x345446[_0x1b025a(0x1ec,'p^Rt')](a0_0x238519,_0x739c5d))??'';}[a0_0x361b25(0x1e2,'a&dx')](_0x1f296c,_0x87c3c6){const _0x959d6=a0_0x361b25,_0xd4bd6d={};_0xd4bd6d[_0x959d6(0x3fd,'o*RD')]=_0x959d6(0x2c3,'DC&2'),_0xd4bd6d[_0x959d6(0x1e3,'p^Rt')]=function(_0x2fc77b,_0x4ad9fb){return _0x2fc77b+_0x4ad9fb;},_0xd4bd6d[_0x959d6(0x425,'AXcM')]=function(_0x764311,_0x426749){return _0x764311!==_0x426749;},_0xd4bd6d[_0x959d6(0x339,'hGr3')]=function(_0xfcbc0d,_0x5e71f3){return _0xfcbc0d!==_0x5e71f3;},_0xd4bd6d[_0x959d6(0x238,'rbP1')]=function(_0x2f0cb6,_0x82ed9){return _0x2f0cb6===_0x82ed9;},_0xd4bd6d[_0x959d6(0x22a,'zUQl')]=_0x959d6(0x268,'Ts^#'),_0xd4bd6d[_0x959d6(0x371,'UL))')]=_0x959d6(0x444,'gIn)'),_0xd4bd6d[_0x959d6(0x3ae,'SiXM')]=function(_0x1e0e4f,_0x5722ed){return _0x1e0e4f+_0x5722ed;},_0xd4bd6d[_0x959d6(0x1ca,'#^)c')]=_0x959d6(0x290,'aoXu'),_0xd4bd6d[_0x959d6(0x1ac,'b8Ee')]=_0x959d6(0x437,'aoXu');const _0x203b00=_0xd4bd6d;if(_0x203b00[_0x959d6(0x3be,'ag9p')](_0x87c3c6,null)&&_0x203b00[_0x959d6(0x39d,'8t&a')](_0x87c3c6,undefined)&&_0x203b00[_0x959d6(0x43b,'zUQl')](_0x87c3c6,'')){if(_0x203b00[_0x959d6(0x2ef,'UL))')](_0x203b00[_0x959d6(0x3a8,'a78n')],_0x203b00[_0x959d6(0x381,'cLob')]))throw new _0x5b13ed(Cmfkub[_0x959d6(0x2ee,'^OGS')]);else localStorage[_0x959d6(0x1fb,'G4LR')](_0x203b00[_0x959d6(0x245,'CI)Q')](a0_0x238519,_0x1f296c),_0x87c3c6);}else _0x203b00[_0x959d6(0x197,'^OGS')](_0x203b00[_0x959d6(0x362,'8[WY')],_0x203b00[_0x959d6(0x216,'^OGS')])?localStorage[_0x959d6(0x280,'DC&2')](_0x203b00[_0x959d6(0x440,'3W]L')](a0_0x238519,_0x1f296c)):_0x58b2c7[_0x959d6(0x224,'o*RD')](_0x203b00[_0x959d6(0x306,'NIgG')](_0x5f537a,_0x2aa12b),_0x58db62);}async[a0_0x361b25(0x28e,'G4LR')](_0x1930b5){const _0x5e2447=a0_0x361b25,_0x34c0fa={'mukvW':_0x5e2447(0x396,'EOe@'),'uBOkp':function(_0x592d7b,_0x467c81){return _0x592d7b!==_0x467c81;},'JeZxG':_0x5e2447(0x2b9,'8Xff'),'zDOXo':_0x5e2447(0x26f,'gIn)'),'SvAno':_0x5e2447(0x3d5,'gIn)'),'uoOpi':function(_0x5dddd5,_0x6cbc76){return _0x5dddd5+_0x6cbc76;},'nnGVQ':_0x5e2447(0x438,'[#pB'),'PEUxJ':_0x5e2447(0x19f,'rs!$'),'TqvYn':function(_0x25e549,_0x265409,_0x51cf9){return _0x25e549(_0x265409,_0x51cf9);},'ZrRjk':_0x5e2447(0x25e,'WCSE'),'SMkRr':_0x5e2447(0x19c,'hGr3')};if(!this[_0x5e2447(0x36a,'!KJv')]){if(_0x34c0fa[_0x5e2447(0x445,'WoCw')](_0x34c0fa[_0x5e2447(0x418,'EOe@')],_0x34c0fa[_0x5e2447(0x28b,'a&dx')]))return console[_0x5e2447(0x2bc,'UL))')](_0x34c0fa[_0x5e2447(0x2bf,'aoXu')]),'';else{_0xe7e1c8[_0x5e2447(0x2d5,'Ts^#')](_0x34c0fa[_0x5e2447(0x353,'8t&a')]);return;}}const _0x331309=extension_settings[extensionName]?.[_0x34c0fa[_0x5e2447(0x214,'AXcM')](a0_0x38e46f,_0x1930b5)];if(!_0x331309)return'';try{if(_0x34c0fa[_0x5e2447(0x33a,'UL))')](_0x34c0fa[_0x5e2447(0x305,'NIgG')],_0x34c0fa[_0x5e2447(0x329,'AXcM')]))return await _0x34c0fa[_0x5e2447(0x364,'3W]L')](decrypt,this[_0x5e2447(0x288,'b8Ee')],_0x331309);else this[_0x5e2447(0x1d5,'L]Z*')](_0x17745b,_0x282e80),_0x401dcd[_0x5e2447(0x25b,'G4LR')](_0x5e2447(0x232,'HBkP')+_0x4206ce+_0x5e2447(0x3c7,'SiXM'));}catch(_0x3311d8){return _0x34c0fa[_0x5e2447(0x34e,'CI)Q')](_0x34c0fa[_0x5e2447(0x3b1,'!KJv')],_0x34c0fa[_0x5e2447(0x2a3,'8Xff')])?(console[_0x5e2447(0x284,'3W]L')](_0x5e2447(0x2b6,'*y$$')+_0x1930b5+_0x5e2447(0x2ec,'pn#['),_0x3311d8),''):(!_0x33e00c[_0x1c196c]&&(_0x419694[_0xd1c03b]={}),_0x7429eb[_0x1de5ae]);}}async[a0_0x361b25(0x1c5,'CI)Q')](_0xf890d4,_0x3613cf){const _0x302e7c=a0_0x361b25,_0x576bfe={'vwSUW':function(_0xd75b8f,_0x2f1ff8){return _0xd75b8f+_0x2f1ff8;},'krrDV':function(_0x2b8fb1,_0x3373bf){return _0x2b8fb1===_0x3373bf;},'YUHdo':_0x302e7c(0x423,'L]Z*'),'xzgWg':_0x302e7c(0x427,'gIn)'),'LIwvG':function(_0x32f44f,_0x2594a6){return _0x32f44f!==_0x2594a6;},'BarDf':_0x302e7c(0x3fa,'oWNq'),'mkWLo':_0x302e7c(0x435,'zUQl'),'VQxRb':function(_0xed61c2,_0x421947){return _0xed61c2!==_0x421947;},'swWIW':function(_0x28d1cb,_0x9753ce){return _0x28d1cb!==_0x9753ce;},'CTurZ':_0x302e7c(0x412,'#^)c'),'xRjFu':_0x302e7c(0x39a,'*y$$'),'LrFLr':function(_0x5a1dd9,_0x541159){return _0x5a1dd9+_0x541159;},'uteXR':function(_0x1e12ed,_0x31dee1,_0x3f9096){return _0x1e12ed(_0x31dee1,_0x3f9096);},'aZlDZ':_0x302e7c(0x30f,'8[WY'),'KyLFw':function(_0x3a0cf4,_0x2e5395){return _0x3a0cf4+_0x2e5395;},'KhwNU':function(_0x412f17){return _0x412f17();}};if(!this[_0x302e7c(0x386,'aoXu')]){if(_0x576bfe[_0x302e7c(0x2dd,'*y$$')](_0x576bfe[_0x302e7c(0x27e,'EOe@')],_0x576bfe[_0x302e7c(0x24d,'gIn)')])){const _0x1e81ec=this[_0x302e7c(0x3e8,'8[WY')]();if(_0x1e81ec?.[_0x4ec479])return!![];return _0x250c87[_0x302e7c(0x2b1,'8[WY')](_0x1e81ec)[_0x302e7c(0x282,'8Xff')](_0xa764e7=>_0xa764e7[_0x302e7c(0x27b,'saTx')](_0x47e7d7));}else{console[_0x302e7c(0x34b,'ag9p')](_0x576bfe[_0x302e7c(0x258,'1U1^')]);return;}}const _0xa6c020=this[_0x302e7c(0x283,'ag9p')]();if(_0x576bfe[_0x302e7c(0x365,'rs!$')](_0x3613cf,null)&&_0x576bfe[_0x302e7c(0x1dd,'CI)Q')](_0x3613cf,undefined)&&_0x576bfe[_0x302e7c(0x1ab,'rbP1')](_0x3613cf,'')){if(_0x576bfe[_0x302e7c(0x344,'(#wH')](_0x576bfe[_0x302e7c(0x311,'Ts^#')],_0x576bfe[_0x302e7c(0x294,'pn#[')]))_0xa6c020[_0x576bfe[_0x302e7c(0x374,'$H@Y')](a0_0x38e46f,_0xf890d4)]=await _0x576bfe[_0x302e7c(0x2de,'rs!$')](encrypt,this[_0x302e7c(0x1bd,'I%qU')],_0x3613cf);else return _0x1e0d5c[_0x302e7c(0x26c,'mJ[c')](KdqNin[_0x302e7c(0x2a6,'saTx')](_0x1593ae,_0x20d759))??'';}else{if(_0x576bfe[_0x302e7c(0x2eb,'DC&2')](_0x576bfe[_0x302e7c(0x19a,'$H@Y')],_0x576bfe[_0x302e7c(0x436,'oWNq')]))delete _0xa6c020[_0x576bfe[_0x302e7c(0x37e,'EOe@')](a0_0x38e46f,_0xf890d4)];else{const _0x376d9d=_0xc2df0d[_0x302e7c(0x3d7,'rs!$')](_0x345812);if(KdqNin[_0x302e7c(0x2bb,'EOe@')](_0x376d9d,KdqNin[_0x302e7c(0x1b2,'aoXu')])||KdqNin[_0x302e7c(0x3d1,'gIn)')](_0x376d9d,KdqNin[_0x302e7c(0x3a0,'saTx')]))return _0x376d9d;const _0x285616=this[_0x302e7c(0x196,'CI)Q')]()?.[_0x35dd86];if(KdqNin[_0x302e7c(0x228,'^OGS')](_0x285616,KdqNin[_0x302e7c(0x3d0,'mJ[c')])||KdqNin[_0x302e7c(0x2a5,'AXcM')](_0x285616,KdqNin[_0x302e7c(0x1a3,'o*RD')]))return _0x285616;return this[_0x302e7c(0x2f5,'WCSE')]()?KdqNin[_0x302e7c(0x3a0,'saTx')]:KdqNin[_0x302e7c(0x20a,'SiXM')];}}_0x576bfe[_0x302e7c(0x2bd,'G4LR')](saveSettingsDebounced);}async[a0_0x361b25(0x406,'WCSE')](){const _0x12e995=a0_0x361b25,_0x4e5cb7={};_0x4e5cb7[_0x12e995(0x34a,'aoXu')]=function(_0x49a21d,_0x118199){return _0x49a21d!==_0x118199;},_0x4e5cb7[_0x12e995(0x3b8,'$H@Y')]=function(_0x21763c,_0x23d865){return _0x21763c!==_0x23d865;},_0x4e5cb7[_0x12e995(0x3d8,'gIn)')]=function(_0x2e61cc,_0x1c0b18){return _0x2e61cc!==_0x1c0b18;},_0x4e5cb7[_0x12e995(0x376,'#^)c')]=function(_0x494b77,_0xbdd98b){return _0x494b77+_0xbdd98b;},_0x4e5cb7[_0x12e995(0x38f,'SiXM')]=function(_0x2d33e8,_0xb96c0a){return _0x2d33e8+_0xb96c0a;},_0x4e5cb7[_0x12e995(0x29b,'1U1^')]=_0x12e995(0x3f1,'ZbAU'),_0x4e5cb7[_0x12e995(0x41b,'DC&2')]=_0x12e995(0x1f8,'4TRx'),_0x4e5cb7[_0x12e995(0x1b0,'AXcM')]=function(_0x8ae893,_0x409785){return _0x8ae893===_0x409785;},_0x4e5cb7[_0x12e995(0x263,'saTx')]=_0x12e995(0x378,'(g^$'),_0x4e5cb7[_0x12e995(0x2d1,'$H@Y')]=function(_0xc9d7e1,_0x337165){return _0xc9d7e1+_0x337165;},_0x4e5cb7[_0x12e995(0x209,'8t&a')]=function(_0x4a5a0f,_0x62d16a){return _0x4a5a0f+_0x62d16a;},_0x4e5cb7[_0x12e995(0x190,'!KJv')]=_0x12e995(0x277,'8Xff'),_0x4e5cb7[_0x12e995(0x2c4,'[#pB')]=function(_0x4197f6,_0xd679e9){return _0x4197f6<_0xd679e9;},_0x4e5cb7[_0x12e995(0x39b,'NIgG')]=function(_0x13f8d2,_0x4914eb){return _0x13f8d2!==_0x4914eb;},_0x4e5cb7[_0x12e995(0x1f0,'pn#[')]=_0x12e995(0x2cd,'1U1^'),_0x4e5cb7[_0x12e995(0x206,'1U1^')]=_0x12e995(0x192,'6oZb'),_0x4e5cb7[_0x12e995(0x1fd,'CI)Q')]=function(_0x2aaff5,_0x9ff1dc){return _0x2aaff5===_0x9ff1dc;},_0x4e5cb7[_0x12e995(0x38b,'#^)c')]=_0x12e995(0x19b,'WCSE'),_0x4e5cb7[_0x12e995(0x33c,'a&dx')]=_0x12e995(0x22b,'*y$$');const _0x1a6c4f=_0x4e5cb7;for(const _0x198fc5 of SENSITIVE_KEYS){if(_0x1a6c4f[_0x12e995(0x40c,'(#wH')](_0x1a6c4f[_0x12e995(0x29b,'1U1^')],_0x1a6c4f[_0x12e995(0x35c,'8Xff')])){const _0x47c00c=this[_0x12e995(0x1f3,'^@WC')](_0x198fc5);if(_0x47c00c){if(_0x1a6c4f[_0x12e995(0x3a3,'#^)c')](_0x1a6c4f[_0x12e995(0x360,'[#pB')],_0x1a6c4f[_0x12e995(0x322,'ozkx')]))await this[_0x12e995(0x303,'AXcM')](_0x198fc5,_0x47c00c),localStorage[_0x12e995(0x1c1,'cLob')](_0x1a6c4f[_0x12e995(0x295,'mJ[c')](a0_0x238519,_0x198fc5)),console[_0x12e995(0x43f,'!KJv')](_0x12e995(0x351,'oWNq')+_0x198fc5+_0x12e995(0x3e2,'8Xff'));else{const _0x1b0c18=this[_0x12e995(0x283,'ag9p')](),_0x2200d9={};_0x2200d9[_0x12e995(0x409,'8t&a')]=_0x1b0c18[_0x245d47],_0x2200d9[_0x12e995(0x308,'hGr3')]={};const _0x28084e=_0x2200d9;for(const [_0xbf6835,_0x460208]of _0x1d81bf[_0x12e995(0x40b,'UL))')](_0x1b0c18)){_0xbf6835[_0x12e995(0x2fd,'!KJv')](_0x4db460)&&_0x460208&&(_0x28084e[_0x12e995(0x36b,'gIn)')][_0xbf6835[_0x12e995(0x3d6,'Ts^#')](_0x105b4d[_0x12e995(0x2fa,'SiXM')])]=_0x460208);}return _0x28084e;}}}else{_0x409aba[_0x12e995(0x34b,'ag9p')](_0x12e995(0x2db,'8[WY')+_0x1dac58+_0x12e995(0x456,'WoCw'));return;}}const _0x2cad0c=_0x1a6c4f[_0x12e995(0x23b,'mJ[c')](a0_0x238519,_0x1a6c4f[_0x12e995(0x459,'$H@Y')]),_0xe2957c=[];for(let _0x612c69=0x0;_0x1a6c4f[_0x12e995(0x3f9,'oWNq')](_0x612c69,localStorage[_0x12e995(0x1a5,'aoXu')]);_0x612c69++){if(_0x1a6c4f[_0x12e995(0x28f,'pn#[')](_0x1a6c4f[_0x12e995(0x239,'3W]L')],_0x1a6c4f[_0x12e995(0x18b,'3W]L')])){const _0x492375=localStorage[_0x12e995(0x2d4,'G4LR')](_0x612c69);if(_0x492375?.[_0x12e995(0x2fd,'!KJv')](_0x2cad0c))_0xe2957c[_0x12e995(0x43c,'8Xff')](_0x492375);}else eROVvW[_0x12e995(0x18f,'HBkP')](_0x53be63,null)&&eROVvW[_0x12e995(0x1ee,'[#pB')](_0x4999e8,_0x6726a8)&&eROVvW[_0x12e995(0x20c,'pn#[')](_0x1ed2fc,'')?_0x111c2d[_0x12e995(0x3ff,'p^Rt')](eROVvW[_0x12e995(0x426,'8[WY')](_0x1d867e,_0x53ce4b),_0x5c1fbd):_0x57ed68[_0x12e995(0x3d3,'1U1^')](eROVvW[_0x12e995(0x376,'#^)c')](_0x521a75,_0x3284fd));}for(const _0x368d7b of _0xe2957c){if(_0x1a6c4f[_0x12e995(0x348,'rbP1')](_0x1a6c4f[_0x12e995(0x3d2,'4TRx')],_0x1a6c4f[_0x12e995(0x301,'EOe@')])){const _0x41d25d=_0x368d7b[_0x12e995(0x2e1,'cLob')](a0_0x238519[_0x12e995(0x3f7,'4TRx')]),_0x3f8cb8=localStorage[_0x12e995(0x331,'1U1^')](_0x368d7b);_0x3f8cb8&&(_0x1a6c4f[_0x12e995(0x29c,'p^Rt')](_0x1a6c4f[_0x12e995(0x328,'a78n')],_0x1a6c4f[_0x12e995(0x1cd,'SiXM')])?_0x18459e[_0x12e995(0x1c0,'mJ[c')](eROVvW[_0x12e995(0x2a8,'4TRx')](_0x75cf38,_0xe5c391)):(await this[_0x12e995(0x296,'3W]L')](_0x41d25d,_0x3f8cb8),localStorage[_0x12e995(0x38e,'8t&a')](_0x368d7b),console[_0x12e995(0x26d,'ZbAU')](_0x12e995(0x3c3,'^OGS')+_0x41d25d+_0x12e995(0x314,'L]Z*'))));}else return this[_0x12e995(0x229,'EOe@')](_0x48b87f);}}async[a0_0x361b25(0x23d,'(g^$')](){const _0x5d8198=a0_0x361b25,_0x2a8f17={'qhRhJ':function(_0x5685e9){return _0x5685e9();},'mBhUf':function(_0x74db25,_0x32ce19){return _0x74db25===_0x32ce19;},'OEzYo':_0x5d8198(0x325,'cLob'),'wFSkm':_0x5d8198(0x270,'6oZb'),'IpPUm':function(_0x15d7cb,_0x17d6fa){return _0x15d7cb!==_0x17d6fa;},'fyOnU':_0x5d8198(0x2ca,'o*RD'),'VFUJz':function(_0x6cc1a7,_0x5d1b06){return _0x6cc1a7===_0x5d1b06;},'npyMT':_0x5d8198(0x3e0,'SiXM'),'UGtjx':function(_0x3ed45b,_0x30410d){return _0x3ed45b+_0x30410d;},'SeEON':_0x5d8198(0x323,'rbP1'),'Kaeyi':function(_0x44a619,_0x2cc83){return _0x44a619===_0x2cc83;},'XJkUf':_0x5d8198(0x3c1,'aoXu'),'fGbkg':_0x5d8198(0x312,'6oZb'),'KlHWN':_0x5d8198(0x2ce,'!KJv')};for(const _0x2093bc of SENSITIVE_KEYS){if(_0x2a8f17[_0x5d8198(0x1d8,'b8Ee')](_0x2a8f17[_0x5d8198(0x3ce,'4TRx')],_0x2a8f17[_0x5d8198(0x361,'gIn)')])){const _0x35fe22=await this[_0x5d8198(0x315,'aoXu')](_0x2093bc);_0x35fe22&&(_0x2a8f17[_0x5d8198(0x286,'NIgG')](_0x2a8f17[_0x5d8198(0x32b,'UL))')],_0x2a8f17[_0x5d8198(0x3dd,'CI)Q')])?this[_0x5d8198(0x2b7,'6oZb')](_0x566517,_0x142110):(this[_0x5d8198(0x1a4,'$H@Y')](_0x2093bc,_0x35fe22),console[_0x5d8198(0x1fe,'1U1^')](_0x5d8198(0x2ba,'8t&a')+_0x2093bc+_0x5d8198(0x407,'$H@Y'))));}else return!![];}const _0x4a723b=extension_settings[extensionName];if(_0x4a723b){if(_0x2a8f17[_0x5d8198(0x3c4,'SiXM')](_0x2a8f17[_0x5d8198(0x310,'(g^$')],_0x2a8f17[_0x5d8198(0x349,'ag9p')])){const _0x3836d3=_0x2a8f17[_0x5d8198(0x18a,'mJ[c')](a0_0x38e46f,_0x2a8f17[_0x5d8198(0x2e2,'6oZb')]),_0x223be9=Object[_0x5d8198(0x18e,'$H@Y')](_0x4a723b)[_0x5d8198(0x211,'*y$$')](_0x4c74ca=>_0x4c74ca[_0x5d8198(0x2fd,'!KJv')](_0x3836d3))[_0x5d8198(0x19d,'aoXu')](_0x40521c=>_0x40521c[_0x5d8198(0x1af,'ZbAU')](a0_0x38e46f[_0x5d8198(0x3f5,'DC&2')]));for(const _0x2a216f of _0x223be9){if(_0x2a8f17[_0x5d8198(0x379,'CI)Q')](_0x2a8f17[_0x5d8198(0x424,'WoCw')],_0x2a8f17[_0x5d8198(0x1df,'Ts^#')]))_0x188559[_0x5d8198(0x3b6,'(#wH')](_0x31db6f)&&(delete _0x1a202f[_0x14d256],_0x2d74d8=!![]);else{const _0x4d290c=await this[_0x5d8198(0x23f,'ozkx')](_0x2a216f);_0x4d290c&&(_0x2a8f17[_0x5d8198(0x383,'CI)Q')](_0x2a8f17[_0x5d8198(0x2c5,'1U1^')],_0x2a8f17[_0x5d8198(0x35f,'4TRx')])?(this[_0x5d8198(0x313,'cLob')](_0x2a216f,_0x4d290c),console[_0x5d8198(0x1ed,'(#wH')](_0x5d8198(0x232,'HBkP')+_0x2a216f+_0x5d8198(0x289,'cLob'))):(_0x1bc058[_0x12fc27]=_0x240c09,KjYSyT[_0x5d8198(0x242,'DC&2')](_0x59b88c)));}}}else{if(!_0x5206e2[_0x5d8198(0x257,'$H@Y')](_0x54ad50))return _0x456837[_0x5d8198(0x28c,'cLob')](_0x5d8198(0x415,'1U1^')+_0x1a9027+_0x5d8198(0x36c,'(g^$')),_0x18aaee;if(KjYSyT[_0x5d8198(0x1d4,'!KJv')](this[_0x5d8198(0x369,'L]Z*')](),KjYSyT[_0x5d8198(0x3cd,'L]Z*')]))return this[_0x5d8198(0x23f,'ozkx')](_0xc0da29);return this[_0x5d8198(0x385,'HBkP')](_0x1fbe32);}}this[_0x5d8198(0x358,'^OGS')]();}[a0_0x361b25(0x246,'ag9p')](){const _0x4a0f7a=a0_0x361b25,_0x133841={'QsXCR':_0x4a0f7a(0x3b2,'Ts^#'),'GalFf':function(_0x1c3840,_0x3817c5){return _0x1c3840===_0x3817c5;},'fJVbe':_0x4a0f7a(0x36f,'G4LR'),'RJKLN':_0x4a0f7a(0x31c,'WCSE'),'BUXhb':_0x4a0f7a(0x193,'p^Rt'),'Wtycu':function(_0x1afe5c){return _0x1afe5c();}},_0x1975cf=this[_0x4a0f7a(0x382,'EOe@')]();let _0x1c80b2=![];for(const _0x444eed of Object[_0x4a0f7a(0x375,'L]Z*')](_0x1975cf)){if(_0x133841[_0x4a0f7a(0x3b4,'EOe@')](_0x133841[_0x4a0f7a(0x1d1,'$H@Y')],_0x133841[_0x4a0f7a(0x387,'G4LR')]))_0x3cea2b[_0x4a0f7a(0x421,'WCSE')][_0x5b46e6[_0x4a0f7a(0x2f6,'b8Ee')](_0x3926f5[_0x4a0f7a(0x202,'1U1^')])]=_0x1a24c5;else{if(_0x444eed[_0x4a0f7a(0x39f,'Ts^#')](a0_0x38e46f)){if(_0x133841[_0x4a0f7a(0x37d,'!KJv')](_0x133841[_0x4a0f7a(0x248,'KnBk')],_0x133841[_0x4a0f7a(0x281,'^OGS')]))delete _0x1975cf[_0x444eed],_0x1c80b2=!![];else throw new _0x27e994(sgarGY[_0x4a0f7a(0x457,'8[WY')]);}}}if(_0x1c80b2)_0x133841[_0x4a0f7a(0x32e,'*y$$')](saveSettingsDebounced);}[a0_0x361b25(0x431,'aoXu')](){const _0x564d98=a0_0x361b25,_0x2af280={};_0x2af280[_0x564d98(0x2fb,'6oZb')]=function(_0x1a3018,_0x1005d8){return _0x1a3018+_0x1005d8;},_0x2af280[_0x564d98(0x22d,'zUQl')]=function(_0x4915c4,_0x3cecef){return _0x4915c4!==_0x3cecef;},_0x2af280[_0x564d98(0x453,'4TRx')]=_0x564d98(0x20d,'$H@Y'),_0x2af280[_0x564d98(0x40e,'KnBk')]=_0x564d98(0x279,'1U1^');const _0x5df53f=_0x2af280;return!extension_settings[extensionName]&&(_0x5df53f[_0x564d98(0x1c8,'EOe@')](_0x5df53f[_0x564d98(0x1f2,'rs!$')],_0x5df53f[_0x564d98(0x336,'aoXu')])?extension_settings[extensionName]={}:delete _0x72eac3[HeIWpO[_0x564d98(0x1f5,'^OGS')](_0x38a9b5,_0x4eb4d1)]),extension_settings[extensionName];}[a0_0x361b25(0x297,'^OGS')](){const _0x1991de=a0_0x361b25,_0x1e0971={'aJbVU':function(_0x5e40d1){return _0x5e40d1();},'IyJXT':function(_0x471621,_0x17f1e8){return _0x471621===_0x17f1e8;},'mxAkD':_0x1991de(0x3c0,'CI)Q')},_0x31257e=this[_0x1991de(0x221,'SiXM')]();if(_0x31257e?.[a0_0x4b75b6]){if(_0x1e0971[_0x1991de(0x2d6,'rbP1')](_0x1e0971[_0x1991de(0x2f2,'rbP1')],_0x1e0971[_0x1991de(0x2f2,'rbP1')]))return!![];else{const _0x263963=this[_0x1991de(0x27c,'8t&a')]();let _0x312393=![];for(const _0x484b16 of _0x5b0159[_0x1991de(0x334,'4TRx')](_0x263963)){_0x484b16[_0x1991de(0x37b,'ozkx')](_0x3c28fb)&&(delete _0x263963[_0x484b16],_0x312393=!![]);}if(_0x312393)MnTRpB[_0x1991de(0x1bc,'(g^$')](_0x57625c);}}return Object[_0x1991de(0x1e9,'Ts^#')](_0x31257e)[_0x1991de(0x3bd,'rs!$')](_0x398f30=>_0x398f30[_0x1991de(0x2e6,'3W]L')](a0_0x38e46f));}async[a0_0x361b25(0x249,'8Xff')](){const _0x49f0ef=a0_0x361b25,_0x977c91={'XBoYp':function(_0x52b18a,_0x5118ae){return _0x52b18a||_0x5118ae;},'atiUh':function(_0x3129e0,_0x29b9cb){return _0x3129e0===_0x29b9cb;},'ufMpZ':_0x49f0ef(0x33f,'Ts^#'),'NqhaR':_0x49f0ef(0x34f,'EOe@'),'uCKxS':function(_0x1a5035,_0xc2bb96){return _0x1a5035(_0xc2bb96);},'GijoY':_0x49f0ef(0x291,'(g^$'),'LmrVb':_0x49f0ef(0x243,'6oZb')},_0x313ca8=localStorage[_0x49f0ef(0x26c,'mJ[c')](a0_0x2e19ca),_0x100fa3=extension_settings[extensionName]?.[a0_0x4b75b6];if(_0x977c91[_0x49f0ef(0x2c0,'hGr3')](!_0x313ca8,!_0x100fa3)){if(_0x977c91[_0x49f0ef(0x33b,'UL))')](_0x977c91[_0x49f0ef(0x3e6,'p^Rt')],_0x977c91[_0x49f0ef(0x2ab,'$H@Y')])){console[_0x49f0ef(0x1cb,'$H@Y')](_0x977c91[_0x49f0ef(0x3e7,'HBkP')]),this[_0x49f0ef(0x1d2,'NIgG')]=![];return;}else this[_0x49f0ef(0x24f,'WoCw')](_0x432538,_0xe4379c);}try{this[_0x49f0ef(0x454,'o*RD')]=await _0x977c91[_0x49f0ef(0x3ec,'o*RD')](importPrivateKey,_0x313ca8),this[_0x49f0ef(0x201,'a&dx')]=await _0x977c91[_0x49f0ef(0x428,'SiXM')](importPublicKey,_0x100fa3),this[_0x49f0ef(0x2d9,'o*RD')]=!![],console[_0x49f0ef(0x3da,'ozkx')](_0x977c91[_0x49f0ef(0x3e9,'WoCw')]);}catch(_0x352b26){console[_0x49f0ef(0x38a,'4TRx')](_0x977c91[_0x49f0ef(0x429,'3W]L')],_0x352b26),this[_0x49f0ef(0x3b9,'CI)Q')]=![];}}}export const apiKeyStore=new a0_0x37c58d();setTimeout(async()=>{const _0xc5e7fa=a0_0x361b25,_0xa1d985={};_0xa1d985[_0xc5e7fa(0x42d,'SiXM')]=_0xc5e7fa(0x2d2,'#^)c'),_0xa1d985[_0xc5e7fa(0x194,'KnBk')]=_0xc5e7fa(0x448,'G4LR'),_0xa1d985[_0xc5e7fa(0x2e3,'[#pB')]=_0xc5e7fa(0x247,'8t&a'),_0xa1d985[_0xc5e7fa(0x367,'KnBk')]=_0xc5e7fa(0x33e,'*y$$'),_0xa1d985[_0xc5e7fa(0x199,'^OGS')]=_0xc5e7fa(0x3f6,'a78n');const _0x17ba04=_0xa1d985;try{await apiKeyStore[_0xc5e7fa(0x2d8,'a78n')]();const _0x24a184=window[_0xc5e7fa(0x304,'HBkP')]?.[_0xc5e7fa(0x24b,'pn#[')](_0x17ba04[_0xc5e7fa(0x1b4,'o*RD')]);if(!_0x24a184){console[_0xc5e7fa(0x1de,'rs!$')](_0x17ba04[_0xc5e7fa(0x359,'zUQl')]);return;}_0x24a184[_0xc5e7fa(0x2c7,'hGr3')]({'getKey':_0x52033c=>apiKeyStore[_0xc5e7fa(0x36e,'4TRx')](_0x52033c),'setKey':(_0x571786,_0x7bdc21)=>apiKeyStore[_0xc5e7fa(0x300,'1U1^')](_0x571786,_0x7bdc21),'getMode':()=>apiKeyStore[_0xc5e7fa(0x433,'8t&a')](),'setMode':_0xf0926d=>apiKeyStore[_0xc5e7fa(0x1a2,'hGr3')](_0xf0926d),'isCloudReady':()=>apiKeyStore[_0xc5e7fa(0x3ca,'SiXM')](),'generateKeyPair':()=>apiKeyStore[_0xc5e7fa(0x1a1,'ag9p')](),'getPublicKeyInfo':()=>apiKeyStore[_0xc5e7fa(0x41f,'I%qU')](),'exportPrivateKeyBundle':()=>apiKeyStore[_0xc5e7fa(0x1b8,'gIn)')](),'importPrivateKeyBundle':_0x4a4119=>apiKeyStore[_0xc5e7fa(0x3e4,'ag9p')](_0x4a4119),'exportEncryptedBackup':()=>apiKeyStore[_0xc5e7fa(0x345,'DC&2')]()}),_0x24a184[_0xc5e7fa(0x3ef,'CI)Q')](_0x17ba04[_0xc5e7fa(0x255,'4TRx')],_0x17ba04[_0xc5e7fa(0x2ad,'WCSE')],_0x17ba04[_0xc5e7fa(0x324,'!KJv')]);}catch(_0x55a4dd){console[_0xc5e7fa(0x2f0,'mJ[c')](_0x17ba04[_0xc5e7fa(0x2ea,'!KJv')],_0x55a4dd);}},0x0); \ No newline at end of file diff --git a/utils/config/api-key-store/crypto-utils.js b/utils/config/api-key-store/crypto-utils.js index fd3b0d1..84bab2e 100644 --- a/utils/config/api-key-store/crypto-utils.js +++ b/utils/config/api-key-store/crypto-utils.js @@ -1 +1 @@ -(function(_0x5bc445,_0x29fe3a){const _0x3d88a0=a0_0x5a80,_0x48e83e=_0x5bc445();while(!![]){try{const _0x20a0dc=-parseInt(_0x3d88a0(0x1ba,'94k#'))/0x1+parseInt(_0x3d88a0(0x18f,'YzZF'))/0x2+parseInt(_0x3d88a0(0x162,'Sq*3'))/0x3*(-parseInt(_0x3d88a0(0x160,'TUv#'))/0x4)+-parseInt(_0x3d88a0(0x186,'$&!P'))/0x5*(parseInt(_0x3d88a0(0x1d3,'beme'))/0x6)+-parseInt(_0x3d88a0(0x1d5,'s&Nb'))/0x7+parseInt(_0x3d88a0(0x1b1,'TfoG'))/0x8*(parseInt(_0x3d88a0(0x18b,'Co7s'))/0x9)+parseInt(_0x3d88a0(0x17f,'9Y]]'))/0xa;if(_0x20a0dc===_0x29fe3a)break;else _0x48e83e['push'](_0x48e83e['shift']());}catch(_0x1cc8ab){_0x48e83e['push'](_0x48e83e['shift']());}}}(a0_0xf200,0xe25b6));function a0_0xf200(){const _0x1f7f28=['jmkhW7GvWRxdOSommwW8wJe2','rCoTvIrW','j8kaWOnJWOG','WRFcV8ovi1m','WOJcKHzXgXK','W4NdL0W8q0VcIZRcHsLKWOxcVZ4','bSobWQTiWRFdISkhBSoL','rZVcT2ZcVmkt','BZvSumoJWQZcVq','FNJcJfRcNmoVsW','zWGGn2JcVmoF','WRilWRJcJmkYWORdK03cGtS','WOxdT2/cKCo1gSkve2GcjSosWR0','uSksg8kuW6tdJ2O','uZpdNtxcJW','C8kPqa/cNSo0WPNcQCkejSk+mCkn','g8oLi1ddRG','W7dcUvvWW6SWWQuNhZFdJG','WPDuWOaPWQb7W7rWAq','W4hcNmkzWOqCW7xdOG','uszN','W6z0W7ZdUSkq','e1zAea4+','AbLnW6DnW7/cVq','awXGWPJdLW','W5FcQZNdJSkk','W5ZcTJe','xw7cIrlcSa','CSkVomonWRRcNW','rJldJGtcRG','EHrFW6C4WONdHG','W78TWO/dUH04WQa','W6HFW7RdL8koWQNdJehcLq','usmFWR/dS8oS','fmoIW4fBkW','smkBmCoYWO4','ASkbW6eeFvRdPmohECo1rW','ySkJW4KsEq','kCkQbhtdQCo+','eHulC3a','prnRW5eD','WPSYWR/dNHK','WRmgWR/cJSomWONdOK3cUZjd','W4BcOcJdLCkM','WQhdU0PTpq','o8kMWPq','W6tcKHVcI8kmBmoLmW','omonW4LIcSobWO8','WPxcSSoSfgNcVG','W5avWQJdTmkAW5hdN2yzWQuN','W7HXWOu6WPe','W7JcSSoagSkK','d8oWW6S9pmoWWR5J','ACkbW6WtDKVdPa','E1dcNG3cVW','WR8JWRtdVa0','wXFdRa','mCoPevhdHmkNW6BcLmkS','mmoPBmklW6tdJ2VdKCoUnamvWQC','WOtdTgNcLmoWhCkuo2aDeCo1WOe','hZSDCMa','WPFcTSoVfG','p8kYWOJdT8kXWR/dQfWo','iMxcVCkPssK','muzRWRRdOCkkWRtcKrZcRG','W5lcPdNdLmk6xCou','yX08W7RcKmoqW6FcKrdcRuHBoa','gM/dN8kns8okbMBcOx7cP3JcSmk2WPO','WP7cIrD3dGZdIq','WQJcJWHSWQtcLq','W6DRW7VdGCkV','stb7','utBcPxFcOSkceq3dJq','W4OmW50I','WP7cMdbwWQq','W7PGWQC6WQa','WOy6iIvo','W5LiW4vdt09s','W7y+W7fQWR55W7bX','Bmo6W4dcRmo1WQ7dU10VWPpcTG','W742WO/dUMbmW5m/','mSoPeuNdGCkH','WR7dNx5TlG','CmoAW5G/W7FcUSoHACkCW7JdRa','WPfvW6/cQ8oeW6ldK2K3','qNBdTmkjcSkpW7BcRG3dGmkKoW0','W6zFW7zCDq','ztSOb38','W4NcV8oAdCkohq','WRiacJD6','mSoJAmknWPJcRqJdNCooaa','imk8WOTjWQ8','fmkUWPDfWPK','WOfJW5xdLmoy','thRcIJhcNSozW50','eSo/vdvgvIK','qNxcPIdcVW','y2tcU8k3W74mWPxdG8opB8ofcbW','yfxcGGJcVW','W53cU8oleCkp','WORcOSoGb3hcSW','iSonmLxdGa','qmoSyr0','W4RcNmopimkg','m8kNWOJdT8kXWR/dQfWo','F8oIWPThW5K','WONcPCoRbxZcOSkLjv9w','B8k3W5Keza','WQRcLCoOi2G','lSkOiLxdHW','zmk0oCowWRlcNW','ucVcTMRcQCkglG','W5DLW5fsxG','scew','qauRWQ7dTa','tdCqWQ4','kgTmWQZdSG','WOTmW63cRCoyW7hdSwO3','FcTmW4DjhIjqb3BcLKS','mSoOavtdG8kJW4tcL8kS','yHn+W7CgmgK','WOnyW7FdLmo8','WRGknsTY','BYn/tCoOWQJcGG3cHG','mNb5ss0AExW','zCofWQXqW6ZcSa','WP/dQSkbw8oEt1a4hIfzfaRdKG'];a0_0xf200=function(){return _0x1f7f28;};return a0_0xf200();}export async function generateKeyPair(){const _0x536667=a0_0x5a80,_0x2673d1={};_0x2673d1[_0x536667(0x15c,'beme')]=_0x536667(0x1ae,'8q!$'),_0x2673d1[_0x536667(0x1cc,'9(uS')]=_0x536667(0x197,'uq]E'),_0x2673d1[_0x536667(0x175,'U2dV')]=_0x536667(0x1af,'f&a#'),_0x2673d1[_0x536667(0x1cb,'Jk7l')]=_0x536667(0x1b5,'EjYD');const _0x128e5d=_0x2673d1;return crypto[_0x536667(0x1c5,'Wbcj')][_0x536667(0x1a4,'EjYD')]({'name':_0x128e5d[_0x536667(0x158,'^aJz')],'modulusLength':0x800,'publicExponent':new Uint8Array([0x1,0x0,0x1]),'hash':_0x128e5d[_0x536667(0x1b3,'9Y]]')]},!![],[_0x128e5d[_0x536667(0x18e,'WwOI')],_0x128e5d[_0x536667(0x171,'p8Uo')]]);}export async function serializeKeyPair(_0x5d27d6){const _0x37287b=a0_0x5a80,_0x54d26e={};_0x54d26e[_0x37287b(0x19b,'*5mm')]=_0x37287b(0x172,'bzNJ');const _0x3559d1=_0x54d26e,[_0x4ffe7f,_0x3b4c61]=await Promise[_0x37287b(0x1ad,'rF1o')]([crypto[_0x37287b(0x187,'3K3T')][_0x37287b(0x1c8,'3K3T')](_0x3559d1[_0x37287b(0x16c,'EjYD')],_0x5d27d6[_0x37287b(0x1b9,'YzZF')]),crypto[_0x37287b(0x1d1,'YzZF')][_0x37287b(0x17c,'fCbB')](_0x3559d1[_0x37287b(0x173,'bzNJ')],_0x5d27d6[_0x37287b(0x16b,'AtJ6')])]);return{'publicJwk':JSON[_0x37287b(0x178,'YzZF')](_0x4ffe7f),'privateJwk':JSON[_0x37287b(0x178,'YzZF')](_0x3b4c61)};}export async function importPublicKey(_0x2200e2){const _0x19426e=a0_0x5a80,_0x5c7807={};_0x5c7807[_0x19426e(0x195,'Co7s')]=_0x19426e(0x194,'uq]E'),_0x5c7807[_0x19426e(0x1ca,'Wbcj')]=_0x19426e(0x1ce,'[y5U'),_0x5c7807[_0x19426e(0x1a5,'EjYD')]=_0x19426e(0x19f,'!o*d'),_0x5c7807[_0x19426e(0x198,'U2dV')]=_0x19426e(0x1cd,'p8Uo');const _0x16ba3a=_0x5c7807;return crypto[_0x19426e(0x17e,'8vp$')][_0x19426e(0x169,'rF1o')](_0x16ba3a[_0x19426e(0x168,'9Y]]')],JSON[_0x19426e(0x164,'9Y]]')](_0x2200e2),{'name':_0x16ba3a[_0x19426e(0x1a9,'pwx9')],'hash':_0x16ba3a[_0x19426e(0x1d2,'fAm7')]},![],[_0x16ba3a[_0x19426e(0x16d,'AtJ6')]]);}export async function importPrivateKey(_0x1a905d){const _0xcb58ce=a0_0x5a80,_0x963cc5={};_0x963cc5[_0xcb58ce(0x15e,'0hOg')]=_0xcb58ce(0x19a,'8q!$'),_0x963cc5[_0xcb58ce(0x15d,'beme')]=_0xcb58ce(0x17d,'!gly'),_0x963cc5[_0xcb58ce(0x1d6,'p8Uo')]=_0xcb58ce(0x18d,'94k#'),_0x963cc5[_0xcb58ce(0x16a,'8vp$')]=_0xcb58ce(0x170,'3K3T');const _0x42b66b=_0x963cc5;return crypto[_0xcb58ce(0x19c,'94k#')][_0xcb58ce(0x176,'TfoG')](_0x42b66b[_0xcb58ce(0x166,'YzZF')],JSON[_0xcb58ce(0x1ac,'fAm7')](_0x1a905d),{'name':_0x42b66b[_0xcb58ce(0x1b6,'bWfg')],'hash':_0x42b66b[_0xcb58ce(0x190,'YzZF')]},![],[_0x42b66b[_0xcb58ce(0x1b2,'Jk7l')]]);}export async function encrypt(_0x27552e,_0x1b0ab7){const _0xc48b20=a0_0x5a80,_0x1545cb={'twDUB':_0xc48b20(0x19e,'uq]E'),'kXnvr':_0xc48b20(0x1c4,'QYNH'),'NhWPN':_0xc48b20(0x1b8,'WwOI'),'csXTu':_0xc48b20(0x1d0,'!o*d'),'IAkKX':function(_0x46f9ba,_0x330c68){return _0x46f9ba(_0x330c68);}},_0x20e1c8={};_0x20e1c8[_0xc48b20(0x1bd,'AtJ6')]=_0x1545cb[_0xc48b20(0x1a7,'KW5i')],_0x20e1c8[_0xc48b20(0x1b0,'AtJ6')]=0x100;const _0x598e1f=await crypto[_0xc48b20(0x196,'!gly')][_0xc48b20(0x191,'Cba$')](_0x20e1c8,!![],[_0x1545cb[_0xc48b20(0x17b,'9(uS')]]),_0x4b0d7d=crypto[_0xc48b20(0x1c3,'OuiQ')](new Uint8Array(0xc)),_0x21938d=new TextEncoder()[_0xc48b20(0x16f,'94k#')](_0x1b0ab7),_0x317e22={};_0x317e22[_0xc48b20(0x174,'bzNJ')]=_0x1545cb[_0xc48b20(0x16e,'c[d9')],_0x317e22['iv']=_0x4b0d7d;const _0x3bc862=await crypto[_0xc48b20(0x1a1,'bzNJ')][_0xc48b20(0x15f,'bWfg')](_0x317e22,_0x598e1f,_0x21938d),_0x56c30e=await crypto[_0xc48b20(0x1bf,'o2v1')][_0xc48b20(0x1be,'rF1o')](_0x1545cb[_0xc48b20(0x183,'AtJ6')],_0x598e1f),_0x331cc9={};_0x331cc9[_0xc48b20(0x1c9,'[y5U')]=_0x1545cb[_0xc48b20(0x181,'TUv#')];const _0x256377=await crypto[_0xc48b20(0x1a6,'c[d9')][_0xc48b20(0x188,'fCbB')](_0x331cc9,_0x27552e,_0x56c30e);return JSON[_0xc48b20(0x1d4,'TfoG')]({'wrappedKey':_0x1545cb[_0xc48b20(0x1a2,'f&a#')](a0_0x3d6568,_0x256377),'iv':_0x1545cb[_0xc48b20(0x1a3,'94k#')](a0_0x3d6568,_0x4b0d7d),'ciphertext':_0x1545cb[_0xc48b20(0x163,'bWfg')](a0_0x3d6568,_0x3bc862)});}export async function decrypt(_0x5ec25a,_0x14cdbb){const _0x2b1cd7=a0_0x5a80,_0x11a24d={'aRQjz':_0x2b1cd7(0x1b4,'f&a#'),'ajchI':function(_0xdd9bf3,_0x3a022e){return _0xdd9bf3(_0x3a022e);},'oDUUq':_0x2b1cd7(0x1c7,'uq]E'),'kaOcX':_0x2b1cd7(0x189,'*5mm'),'fYqyS':_0x2b1cd7(0x18a,'^aJz')},{wrappedKey:_0x1d6ebf,iv:_0x2281ba,ciphertext:_0x2e3d4b}=JSON[_0x2b1cd7(0x1ab,'8q!$')](_0x14cdbb),_0x323afc={};_0x323afc[_0x2b1cd7(0x174,'bzNJ')]=_0x11a24d[_0x2b1cd7(0x15a,'9(uS')];const _0x4aeda9=await crypto[_0x2b1cd7(0x184,'QYNH')][_0x2b1cd7(0x193,'8]GJ')](_0x323afc,_0x5ec25a,_0x11a24d[_0x2b1cd7(0x199,'8q!$')](a0_0x4df67c,_0x1d6ebf)),_0x5b2058=await crypto[_0x2b1cd7(0x165,'AtJ6')][_0x2b1cd7(0x1a0,'Co7s')](_0x11a24d[_0x2b1cd7(0x19d,'WwOI')],_0x4aeda9,{'name':_0x11a24d[_0x2b1cd7(0x1a8,'nke)')]},![],[_0x11a24d[_0x2b1cd7(0x1c6,'Co7s')]]),_0x5b09d2=await crypto[_0x2b1cd7(0x196,'!gly')][_0x2b1cd7(0x1c1,'8q!$')]({'name':_0x11a24d[_0x2b1cd7(0x161,'bWfg')],'iv':_0x11a24d[_0x2b1cd7(0x17a,'0hOg')](a0_0x4df67c,_0x2281ba)},_0x5b2058,_0x11a24d[_0x2b1cd7(0x182,'beme')](a0_0x4df67c,_0x2e3d4b));return new TextDecoder()[_0x2b1cd7(0x159,'9Y]]')](_0x5b09d2);}function a0_0x3d6568(_0x24e25d){const _0x45f794=a0_0x5a80,_0x28b698={'yYRTR':function(_0x5adc05,_0x326bb8){return _0x5adc05(_0x326bb8);}};return _0x28b698[_0x45f794(0x1bc,'KW5i')](btoa,String[_0x45f794(0x177,'v1mq')](...new Uint8Array(_0x24e25d)));}function a0_0x5a80(_0x114a25,_0x53eb9e){_0x114a25=_0x114a25-0x158;const _0xf2000e=a0_0xf200();let _0x5a80c8=_0xf2000e[_0x114a25];if(a0_0x5a80['nBNxJM']===undefined){var _0x555bac=function(_0x50a3ea){const _0x382cd3='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x585649='',_0xf5d493='';for(let _0x3ce01=0x0,_0x52c29b,_0x33b84f,_0x55359e=0x0;_0x33b84f=_0x50a3ea['charAt'](_0x55359e++);~_0x33b84f&&(_0x52c29b=_0x3ce01%0x4?_0x52c29b*0x40+_0x33b84f:_0x33b84f,_0x3ce01++%0x4)?_0x585649+=String['fromCharCode'](0xff&_0x52c29b>>(-0x2*_0x3ce01&0x6)):0x0){_0x33b84f=_0x382cd3['indexOf'](_0x33b84f);}for(let _0x304556=0x0,_0x29bd6f=_0x585649['length'];_0x304556<_0x29bd6f;_0x304556++){_0xf5d493+='%'+('00'+_0x585649['charCodeAt'](_0x304556)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0xf5d493);};const _0x5079ca=function(_0x29e7a3,_0x2919ca){let _0x4d52d9=[],_0x43a6d6=0x0,_0x5acbb1,_0x50f33a='';_0x29e7a3=_0x555bac(_0x29e7a3);let _0xc2e83b;for(_0xc2e83b=0x0;_0xc2e83b<0x100;_0xc2e83b++){_0x4d52d9[_0xc2e83b]=_0xc2e83b;}for(_0xc2e83b=0x0;_0xc2e83b<0x100;_0xc2e83b++){_0x43a6d6=(_0x43a6d6+_0x4d52d9[_0xc2e83b]+_0x2919ca['charCodeAt'](_0xc2e83b%_0x2919ca['length']))%0x100,_0x5acbb1=_0x4d52d9[_0xc2e83b],_0x4d52d9[_0xc2e83b]=_0x4d52d9[_0x43a6d6],_0x4d52d9[_0x43a6d6]=_0x5acbb1;}_0xc2e83b=0x0,_0x43a6d6=0x0;for(let _0x2ace76=0x0;_0x2ace76<_0x29e7a3['length'];_0x2ace76++){_0xc2e83b=(_0xc2e83b+0x1)%0x100,_0x43a6d6=(_0x43a6d6+_0x4d52d9[_0xc2e83b])%0x100,_0x5acbb1=_0x4d52d9[_0xc2e83b],_0x4d52d9[_0xc2e83b]=_0x4d52d9[_0x43a6d6],_0x4d52d9[_0x43a6d6]=_0x5acbb1,_0x50f33a+=String['fromCharCode'](_0x29e7a3['charCodeAt'](_0x2ace76)^_0x4d52d9[(_0x4d52d9[_0xc2e83b]+_0x4d52d9[_0x43a6d6])%0x100]);}return _0x50f33a;};a0_0x5a80['BtUqbN']=_0x5079ca,a0_0x5a80['iYVUaA']={},a0_0x5a80['nBNxJM']=!![];}const _0x323002=_0xf2000e[0x0],_0x17c5ca=_0x114a25+_0x323002,_0x1b72f2=a0_0x5a80['iYVUaA'][_0x17c5ca];return!_0x1b72f2?(a0_0x5a80['hSTtaz']===undefined&&(a0_0x5a80['hSTtaz']=!![]),_0x5a80c8=a0_0x5a80['BtUqbN'](_0x5a80c8,_0x53eb9e),a0_0x5a80['iYVUaA'][_0x17c5ca]=_0x5a80c8):_0x5a80c8=_0x1b72f2,_0x5a80c8;}function a0_0x4df67c(_0x438bf8){const _0xcd9d02=a0_0x5a80,_0x541e41={'asQlx':function(_0x350bef,_0x2f1070){return _0x350bef(_0x2f1070);}};return Uint8Array[_0xcd9d02(0x167,'TUv#')](_0x541e41[_0xcd9d02(0x1b7,'pwx9')](atob,_0x438bf8),_0x46809f=>_0x46809f[_0xcd9d02(0x1c0,'U2dV')](0x0));} \ No newline at end of file +function a0_0x30df(){const _0x42dd01=['EML/mmkKuf7dLxxcGSoBWPu','WOSyFXlcPmonW6XWW6RdJsRdO8k7','W5vWw8kyA8ogW5VcIa','W5xcHSk1WOFdTq','fmkqCCowqber','gmkhnIuMkW','vgSoWQpdJa','WRHLwtNcPW','W6ylW48Go8owdSo3sxJdTxVcJq','W5eTnmoTWRO','W5FcT2KezG','CGVcKSotWPhdLhtdM8op','WO8KW70','jSk9WR9MW5C+W7C','A8kKW5VdU8oA','W6nhBCo3Cq','WQXHsdJcU8kLW7i','xuu4W4VcUYKh','B29Inmkjx1BdGu8','W5RcR8k9WRvTvZC','W7v2t8ocsq','cGZdO1xcRCkhW4pdQmkRWQSktaC','B8oKWPBcMmo2FXZdN2/cQw4','W5LGW6dcLSo0W4KxtmoR','fCooW77dRvK','p8kZW4RdICkYus3dJ0lcQLe','dSo/WQddMtq','W6O9cCoTaLzM','emk5WOrYW7S','WQhdHSoDWQrF','W4XTW7lcLCoVW54xtmoR','WPT3WPBdOaDYWOZcOXC','W6ngECohxCo3W6O','lCkOW58','v8k4W4hdQ8omWQC','oCkZWOxcPmkiFW','qeJcJbtdRq','lSoXWO7dVbNdL8k+','W6ZcQ2qOzq','WOmAEbVcOCkqWQ51W7VdTHO','l8o6WO7dVbNdL8k+','pSodW7hdI3y','W5GkWRpcNCoy','WRSEW5alFG','WQONW7ddQuG','WRTXst7cRSkW','A0VcTt7dTq','W5nsW7xcI8of','kCk+W5LO','tmozzZmUjmkPamoh','nmkQW5z5W6DI','y8oiW7fiiMX+W4zt','o8oqW5ZdVmkqWOO','W7hcVCkvWQJcKq','zCk7E8oPW7q','WR8zCmo4W4JcGt5d','FhxcIaS','ebOlfSkocgldT8o1smoyWPdcOq','E35+omkvwuVdGN3cImog','a8kRr8otva','WP07W5OPwq','arWaWO5My8k/WO3cQchcRmoHqa','p8oFW7BdPLe8W6VcGmoz','euVcOmo+kSkNoIJcJw9BF8kF','emkfW5ldP8k3','W5hdPCoJASo8vthdHfHVWRT0FG','FMWlWPxdRa','W4OakSk0xay','oSkZWPlcMCknDmkEFxWSzLxcOJ/cOG','g8oIW5xcPgqlW60','FdGTg8k3A8onECkA','DNhcHHWxDrK','W79yW4NcTSoU','W7RcK8koW7eXbwH2W4a','DSkEW6lcSSoVWOm0ga','seL/ACow','tmoFysiMcSkBkmoh','Ch5+oSktua','kCkKWRC','vuNcUqK','W6ygW5mpW5P4','WPb0sbdcQa','lSkJWOtcV8kaFW','EH9cW4vaia','W6RcJ8kDW6OCdwv1W7JcOW','FSkHWR/dPY7dS8kBWRq','hSk5W6ZdUmk4','WOBdMCoQWRPq','iSkXW5D/W7j3ja','W7SsW5WE','W7tcVmkhWOhdNCo1','B25YkCklxq','xqqAp8kW','srtdQmkGASoGrqxcUW','ngpcJfDarmoxia','C21Bbmkr','ymoDW7fskq','rN1NgmkI','WRGAemkKWRpdOvyJaxLtW7aeFW','s8kivW','qx7cVqG7','d8kiiG','Axz3W6OZ','E8ktWOZcVCojW5VcIJ4XWPZcVmolWODP','W4xcQmovW4SaWOG','fCo4WPhcP8kxWQOboSorW4Hj','a1hcNI5i','Ati0aSkKA8oJv8kgbq','eCo6txjTe8k1DaS','e8osW7ZdSxu','W5CujCkL','WRBdUCoxWOZdNCo6dM1x','gmoBWR3dVcq','rqbzW5XI','W5xcMSkKW5JdVSori3e','WRL1W4RdPCkDW7XQWQu7CSk6','fSoBF1bm','W70DW4FdRbFcQCoIWOFcPmkak8kWW6C','jCoIWQBdLXy','C8khw8oWW5u','pSocW6xdU1O4W5q','fCkNW5nFW58','xf44W4VdHL10W7u','wKFcKYuz','W4H5W64','j3xcNLDirSoF','WPBdV8ouWP1Z','W6VcGuuJEdfv'];a0_0x30df=function(){return _0x42dd01;};return a0_0x30df();}(function(_0x246758,_0x2bce86){const _0x298259=a0_0x201d,_0x3a96c0=_0x246758();while(!![]){try{const _0x21ec67=-parseInt(_0x298259(0x160,'I%Z1'))/0x1*(parseInt(_0x298259(0x1a8,'s]*2'))/0x2)+-parseInt(_0x298259(0x18d,'36SQ'))/0x3*(parseInt(_0x298259(0x143,'s]*2'))/0x4)+-parseInt(_0x298259(0x130,'Lba5'))/0x5+parseInt(_0x298259(0x136,'txUs'))/0x6+-parseInt(_0x298259(0x178,'npF$'))/0x7+parseInt(_0x298259(0x17f,'0XlU'))/0x8*(parseInt(_0x298259(0x14c,'e6bW'))/0x9)+parseInt(_0x298259(0x15e,'ZdD^'))/0xa;if(_0x21ec67===_0x2bce86)break;else _0x3a96c0['push'](_0x3a96c0['shift']());}catch(_0x361891){_0x3a96c0['push'](_0x3a96c0['shift']());}}}(a0_0x30df,0xac777));export async function generateKeyPair(){const _0x59e8bb=a0_0x201d,_0x5976f9={};_0x5976f9[_0x59e8bb(0x142,'Lba5')]=_0x59e8bb(0x179,'R@mh'),_0x5976f9[_0x59e8bb(0x15d,'WtHi')]=_0x59e8bb(0x188,'hy2f'),_0x5976f9[_0x59e8bb(0x170,'aInY')]=_0x59e8bb(0x184,'izl4'),_0x5976f9[_0x59e8bb(0x1a0,'9Ci!')]=_0x59e8bb(0x16f,'9Ci!');const _0x395ae2=_0x5976f9;return crypto[_0x59e8bb(0x199,'I%Z1')][_0x59e8bb(0x190,'36SQ')]({'name':_0x395ae2[_0x59e8bb(0x180,'%@6p')],'modulusLength':0x800,'publicExponent':new Uint8Array([0x1,0x0,0x1]),'hash':_0x395ae2[_0x59e8bb(0x181,'m#t4')]},!![],[_0x395ae2[_0x59e8bb(0x16e,'7dVs')],_0x395ae2[_0x59e8bb(0x186,'R@mh')]]);}export async function serializeKeyPair(_0x41bf7b){const _0x295243=a0_0x201d,_0x4e9ac1={};_0x4e9ac1[_0x295243(0x1ad,'7dVs')]=_0x295243(0x198,'aInY');const _0x1c4ef7=_0x4e9ac1,[_0x461e56,_0x30523f]=await Promise[_0x295243(0x173,'6zof')]([crypto[_0x295243(0x199,'I%Z1')][_0x295243(0x13d,'$!02')](_0x1c4ef7[_0x295243(0x1ad,'7dVs')],_0x41bf7b[_0x295243(0x18e,'6zof')]),crypto[_0x295243(0x1a4,'qa*b')][_0x295243(0x195,'6zof')](_0x1c4ef7[_0x295243(0x153,'$!02')],_0x41bf7b[_0x295243(0x162,'$!02')])]);return{'publicJwk':JSON[_0x295243(0x140,'aq$x')](_0x461e56),'privateJwk':JSON[_0x295243(0x1aa,'F(gL')](_0x30523f)};}export async function importPublicKey(_0x3334b9){const _0x1a643d=a0_0x201d,_0x537667={};_0x537667[_0x1a643d(0x13f,'6zof')]=_0x1a643d(0x145,'izl4'),_0x537667[_0x1a643d(0x137,'36SQ')]=_0x1a643d(0x155,'KSic'),_0x537667[_0x1a643d(0x17a,'pZif')]=_0x1a643d(0x18a,'aq$x'),_0x537667[_0x1a643d(0x1a2,'o%dE')]=_0x1a643d(0x14f,'aInY');const _0x1962dc=_0x537667;return crypto[_0x1a643d(0x147,'oW#(')][_0x1a643d(0x154,'txUs')](_0x1962dc[_0x1a643d(0x1a1,'kBP*')],JSON[_0x1a643d(0x157,'F(gL')](_0x3334b9),{'name':_0x1962dc[_0x1a643d(0x172,'WwVL')],'hash':_0x1962dc[_0x1a643d(0x167,'e6bW')]},![],[_0x1962dc[_0x1a643d(0x1ac,'^rkM')]]);}function a0_0x201d(_0x57e1c6,_0x6d58c6){_0x57e1c6=_0x57e1c6-0x12f;const _0x30df68=a0_0x30df();let _0x201d97=_0x30df68[_0x57e1c6];if(a0_0x201d['tFFgJQ']===undefined){var _0x431756=function(_0x3cbc3d){const _0xa7aaa6='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x37f9d9='',_0x2a86a8='';for(let _0x31f363=0x0,_0x2b656d,_0x4dee08,_0x5a2f41=0x0;_0x4dee08=_0x3cbc3d['charAt'](_0x5a2f41++);~_0x4dee08&&(_0x2b656d=_0x31f363%0x4?_0x2b656d*0x40+_0x4dee08:_0x4dee08,_0x31f363++%0x4)?_0x37f9d9+=String['fromCharCode'](0xff&_0x2b656d>>(-0x2*_0x31f363&0x6)):0x0){_0x4dee08=_0xa7aaa6['indexOf'](_0x4dee08);}for(let _0x2c45d9=0x0,_0x124be5=_0x37f9d9['length'];_0x2c45d9<_0x124be5;_0x2c45d9++){_0x2a86a8+='%'+('00'+_0x37f9d9['charCodeAt'](_0x2c45d9)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x2a86a8);};const _0x4c5873=function(_0x1216ce,_0x1b098a){let _0x42bb7a=[],_0x580b5f=0x0,_0x110ccf,_0x281b79='';_0x1216ce=_0x431756(_0x1216ce);let _0x51da57;for(_0x51da57=0x0;_0x51da57<0x100;_0x51da57++){_0x42bb7a[_0x51da57]=_0x51da57;}for(_0x51da57=0x0;_0x51da57<0x100;_0x51da57++){_0x580b5f=(_0x580b5f+_0x42bb7a[_0x51da57]+_0x1b098a['charCodeAt'](_0x51da57%_0x1b098a['length']))%0x100,_0x110ccf=_0x42bb7a[_0x51da57],_0x42bb7a[_0x51da57]=_0x42bb7a[_0x580b5f],_0x42bb7a[_0x580b5f]=_0x110ccf;}_0x51da57=0x0,_0x580b5f=0x0;for(let _0x5b595f=0x0;_0x5b595f<_0x1216ce['length'];_0x5b595f++){_0x51da57=(_0x51da57+0x1)%0x100,_0x580b5f=(_0x580b5f+_0x42bb7a[_0x51da57])%0x100,_0x110ccf=_0x42bb7a[_0x51da57],_0x42bb7a[_0x51da57]=_0x42bb7a[_0x580b5f],_0x42bb7a[_0x580b5f]=_0x110ccf,_0x281b79+=String['fromCharCode'](_0x1216ce['charCodeAt'](_0x5b595f)^_0x42bb7a[(_0x42bb7a[_0x51da57]+_0x42bb7a[_0x580b5f])%0x100]);}return _0x281b79;};a0_0x201d['REihLj']=_0x4c5873,a0_0x201d['MPjpSd']={},a0_0x201d['tFFgJQ']=!![];}const _0x45edd4=_0x30df68[0x0],_0x5b3e29=_0x57e1c6+_0x45edd4,_0x38eb1b=a0_0x201d['MPjpSd'][_0x5b3e29];return!_0x38eb1b?(a0_0x201d['dUfmPI']===undefined&&(a0_0x201d['dUfmPI']=!![]),_0x201d97=a0_0x201d['REihLj'](_0x201d97,_0x6d58c6),a0_0x201d['MPjpSd'][_0x5b3e29]=_0x201d97):_0x201d97=_0x38eb1b,_0x201d97;}export async function importPrivateKey(_0x55e39c){const _0x396ba4=a0_0x201d,_0x594e45={};_0x594e45[_0x396ba4(0x185,'I%Z1')]=_0x396ba4(0x15a,'7dVs'),_0x594e45[_0x396ba4(0x132,'geqA')]=_0x396ba4(0x169,'pZif'),_0x594e45[_0x396ba4(0x15b,'WwVL')]=_0x396ba4(0x192,'E^9%'),_0x594e45[_0x396ba4(0x17d,'hy2f')]=_0x396ba4(0x187,'qa*b');const _0x541fee=_0x594e45;return crypto[_0x396ba4(0x1ab,'ZdD^')][_0x396ba4(0x196,'e*w*')](_0x541fee[_0x396ba4(0x18f,'9Ci!')],JSON[_0x396ba4(0x139,'hy2f')](_0x55e39c),{'name':_0x541fee[_0x396ba4(0x18b,'R@mh')],'hash':_0x541fee[_0x396ba4(0x193,'izl4')]},![],[_0x541fee[_0x396ba4(0x158,'Kfk5')]]);}export async function encrypt(_0x153348,_0x23b97f){const _0xbe0b06=a0_0x201d,_0x403dc5={'nLBMS':_0xbe0b06(0x13c,'9Ci!'),'QJhKt':_0xbe0b06(0x17b,'geqA'),'eaSTG':_0xbe0b06(0x15c,'s]*2'),'LjymN':_0xbe0b06(0x171,'hy2f'),'AlVlW':function(_0x540996,_0x41110f){return _0x540996(_0x41110f);},'fsarX':function(_0x471cef,_0x5f5760){return _0x471cef(_0x5f5760);},'Wbzeb':function(_0x5587d1,_0x817dcc){return _0x5587d1(_0x817dcc);}},_0x143a4d={};_0x143a4d[_0xbe0b06(0x165,'E^9%')]=_0x403dc5[_0xbe0b06(0x16b,'CXgC')],_0x143a4d[_0xbe0b06(0x144,'Kfk5')]=0x100;const _0x58e91f=await crypto[_0xbe0b06(0x149,'HMiT')][_0xbe0b06(0x131,'Kfk5')](_0x143a4d,!![],[_0x403dc5[_0xbe0b06(0x175,'@gEQ')]]),_0x532af7=crypto[_0xbe0b06(0x13b,'HMiT')](new Uint8Array(0xc)),_0x5b4dbd=new TextEncoder()[_0xbe0b06(0x17c,'s]*2')](_0x23b97f),_0x3e0e1c={};_0x3e0e1c[_0xbe0b06(0x12f,'WwVL')]=_0x403dc5[_0xbe0b06(0x133,'o%dE')],_0x3e0e1c['iv']=_0x532af7;const _0x1bddd9=await crypto[_0xbe0b06(0x13a,'E^9%')][_0xbe0b06(0x176,'m#t4')](_0x3e0e1c,_0x58e91f,_0x5b4dbd),_0x15568a=await crypto[_0xbe0b06(0x151,'pZif')][_0xbe0b06(0x135,'9Ci!')](_0x403dc5[_0xbe0b06(0x161,'KSic')],_0x58e91f),_0x1f63fd={};_0x1f63fd[_0xbe0b06(0x150,'oW#(')]=_0x403dc5[_0xbe0b06(0x168,'[rvK')];const _0x40c046=await crypto[_0xbe0b06(0x1a9,'aInY')][_0xbe0b06(0x19f,'e6bW')](_0x1f63fd,_0x153348,_0x15568a);return JSON[_0xbe0b06(0x189,'Kfk5')]({'wrappedKey':_0x403dc5[_0xbe0b06(0x14e,'@gEQ')](a0_0x5ed585,_0x40c046),'iv':_0x403dc5[_0xbe0b06(0x194,'@gEQ')](a0_0x5ed585,_0x532af7),'ciphertext':_0x403dc5[_0xbe0b06(0x1a3,'Yzvr')](a0_0x5ed585,_0x1bddd9)});}export async function decrypt(_0x25ead0,_0x4a5204){const _0x3dd93d=a0_0x201d,_0x548f54={'zGwqX':_0x3dd93d(0x141,'I%Z1'),'ovKYv':function(_0x20a260,_0xc43eb9){return _0x20a260(_0xc43eb9);},'ssZpr':_0x3dd93d(0x183,'Yzvr'),'XpcZj':_0x3dd93d(0x174,'KSic'),'FoHTx':_0x3dd93d(0x19c,'e6bW'),'bDByd':function(_0x1b2639,_0x36120f){return _0x1b2639(_0x36120f);}},{wrappedKey:_0x1255c0,iv:_0x13e7ba,ciphertext:_0x98f2e4}=JSON[_0x3dd93d(0x17e,'qa*b')](_0x4a5204),_0x5799dc={};_0x5799dc[_0x3dd93d(0x1a7,'aInY')]=_0x548f54[_0x3dd93d(0x1a6,'6zof')];const _0x156895=await crypto[_0x3dd93d(0x15f,'Kik3')][_0x3dd93d(0x197,'R@mh')](_0x5799dc,_0x25ead0,_0x548f54[_0x3dd93d(0x156,'Kfk5')](a0_0x5d0c85,_0x1255c0)),_0x1f266b=await crypto[_0x3dd93d(0x152,'Kfk5')][_0x3dd93d(0x163,'CXgC')](_0x548f54[_0x3dd93d(0x19b,'OOOk')],_0x156895,{'name':_0x548f54[_0x3dd93d(0x148,'qa*b')]},![],[_0x548f54[_0x3dd93d(0x14d,'36SQ')]]),_0x11dc5e=await crypto[_0x3dd93d(0x14a,'[rvK')][_0x3dd93d(0x13e,'WwVL')]({'name':_0x548f54[_0x3dd93d(0x1a5,'OOOk')],'iv':_0x548f54[_0x3dd93d(0x16d,'e6bW')](a0_0x5d0c85,_0x13e7ba)},_0x1f266b,_0x548f54[_0x3dd93d(0x19d,'m#t4')](a0_0x5d0c85,_0x98f2e4));return new TextDecoder()[_0x3dd93d(0x19a,'HMiT')](_0x11dc5e);}function a0_0x5ed585(_0x514a71){const _0x41bce6=a0_0x201d,_0x3ef1c9={'IuzxV':function(_0x54e6d0,_0x4ee1af){return _0x54e6d0(_0x4ee1af);}};return _0x3ef1c9[_0x41bce6(0x164,'9Ci!')](btoa,String[_0x41bce6(0x177,'Kfk5')](...new Uint8Array(_0x514a71)));}function a0_0x5d0c85(_0x5aad85){const _0x2e5c96=a0_0x201d,_0x47d8d2={'DkMWT':function(_0x27f311,_0x2a49c0){return _0x27f311(_0x2a49c0);}};return Uint8Array[_0x2e5c96(0x146,'OOOk')](_0x47d8d2[_0x2e5c96(0x191,'e6bW')](atob,_0x5aad85),_0x386b94=>_0x386b94[_0x2e5c96(0x14b,'aq$x')](0x0));} \ No newline at end of file diff --git a/utils/config/sensitive-keys.js b/utils/config/sensitive-keys.js index 0a7b86c..ef0c795 100644 --- a/utils/config/sensitive-keys.js +++ b/utils/config/sensitive-keys.js @@ -1 +1 @@ -const a0_0xeed94e=a0_0x1d2d;(function(_0x1a15ef,_0x377e1d){const _0xd98876=a0_0x1d2d,_0x5a7541=_0x1a15ef();while(!![]){try{const _0xd9a1c2=-parseInt(_0xd98876(0x16d,')p$['))/0x1*(-parseInt(_0xd98876(0x17f,'$t18'))/0x2)+parseInt(_0xd98876(0x176,'uJ$1'))/0x3*(parseInt(_0xd98876(0x173,'0nh^'))/0x4)+parseInt(_0xd98876(0x185,'G]x0'))/0x5+parseInt(_0xd98876(0x175,'iFK8'))/0x6*(-parseInt(_0xd98876(0x172,'0nh^'))/0x7)+parseInt(_0xd98876(0x16e,'llbF'))/0x8*(-parseInt(_0xd98876(0x17d,'^@If'))/0x9)+parseInt(_0xd98876(0x170,'@9OG'))/0xa*(parseInt(_0xd98876(0x18a,'TuD$'))/0xb)+parseInt(_0xd98876(0x189,'*5*3'))/0xc;if(_0xd9a1c2===_0x377e1d)break;else _0x5a7541['push'](_0x5a7541['shift']());}catch(_0x48a0b9){_0x5a7541['push'](_0x5a7541['shift']());}}}(a0_0x3d0e,0x8e557));function a0_0x1d2d(_0x13ad22,_0x3291b5){_0x13ad22=_0x13ad22-0x16d;const _0x3d0e1=a0_0x3d0e();let _0x1d2d20=_0x3d0e1[_0x13ad22];if(a0_0x1d2d['HknRdg']===undefined){var _0x499a0f=function(_0xd00d1d){const _0x332f54='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x3117be='',_0x46d902='';for(let _0x3bd389=0x0,_0xa2ce1a,_0x20ac16,_0x4ed342=0x0;_0x20ac16=_0xd00d1d['charAt'](_0x4ed342++);~_0x20ac16&&(_0xa2ce1a=_0x3bd389%0x4?_0xa2ce1a*0x40+_0x20ac16:_0x20ac16,_0x3bd389++%0x4)?_0x3117be+=String['fromCharCode'](0xff&_0xa2ce1a>>(-0x2*_0x3bd389&0x6)):0x0){_0x20ac16=_0x332f54['indexOf'](_0x20ac16);}for(let _0x471831=0x0,_0x1e98a5=_0x3117be['length'];_0x471831<_0x1e98a5;_0x471831++){_0x46d902+='%'+('00'+_0x3117be['charCodeAt'](_0x471831)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x46d902);};const _0xdaaf25=function(_0x392ffc,_0x55746a){let _0x56e0b4=[],_0x36ea9f=0x0,_0x3efb15,_0x507d29='';_0x392ffc=_0x499a0f(_0x392ffc);let _0x344843;for(_0x344843=0x0;_0x344843<0x100;_0x344843++){_0x56e0b4[_0x344843]=_0x344843;}for(_0x344843=0x0;_0x344843<0x100;_0x344843++){_0x36ea9f=(_0x36ea9f+_0x56e0b4[_0x344843]+_0x55746a['charCodeAt'](_0x344843%_0x55746a['length']))%0x100,_0x3efb15=_0x56e0b4[_0x344843],_0x56e0b4[_0x344843]=_0x56e0b4[_0x36ea9f],_0x56e0b4[_0x36ea9f]=_0x3efb15;}_0x344843=0x0,_0x36ea9f=0x0;for(let _0x3e0c7f=0x0;_0x3e0c7f<_0x392ffc['length'];_0x3e0c7f++){_0x344843=(_0x344843+0x1)%0x100,_0x36ea9f=(_0x36ea9f+_0x56e0b4[_0x344843])%0x100,_0x3efb15=_0x56e0b4[_0x344843],_0x56e0b4[_0x344843]=_0x56e0b4[_0x36ea9f],_0x56e0b4[_0x36ea9f]=_0x3efb15,_0x507d29+=String['fromCharCode'](_0x392ffc['charCodeAt'](_0x3e0c7f)^_0x56e0b4[(_0x56e0b4[_0x344843]+_0x56e0b4[_0x36ea9f])%0x100]);}return _0x507d29;};a0_0x1d2d['cMINFB']=_0xdaaf25,a0_0x1d2d['rMAOMA']={},a0_0x1d2d['HknRdg']=!![];}const _0x7f1111=_0x3d0e1[0x0],_0xed149e=_0x13ad22+_0x7f1111,_0x22e261=a0_0x1d2d['rMAOMA'][_0xed149e];return!_0x22e261?(a0_0x1d2d['Taqwym']===undefined&&(a0_0x1d2d['Taqwym']=!![]),_0x1d2d20=a0_0x1d2d['cMINFB'](_0x1d2d20,_0x3291b5),a0_0x1d2d['rMAOMA'][_0xed149e]=_0x1d2d20):_0x1d2d20=_0x22e261,_0x1d2d20;}export const SENSITIVE_KEYS=new Set([a0_0xeed94e(0x179,'sJZi'),a0_0xeed94e(0x17c,'0nh^'),a0_0xeed94e(0x171,'mm2P'),a0_0xeed94e(0x17e,'NZ6R'),a0_0xeed94e(0x183,'pO#l'),a0_0xeed94e(0x174,'9oir'),a0_0xeed94e(0x186,'uJ$1'),a0_0xeed94e(0x182,'iToR')]);function a0_0x3d0e(){const _0x12d67d=['pCkqdCkyWOpdQWxdNmoQW5Wpcmk+','W5tcQvtdHmkBW7pdJCoQ','W4xdUKv8jZJdJq','f0zxWQxdICoEWQhcIdpdTtS/','WRtdPg3dVInIbmkXw8kdECkE','W4bxWRhdJCoBW7LryM8MlSk2W4NcHvdcP2XRfIVdTqZcGCki','hIukWQlcP8oArSk2rmkKW74o','hMbYW4xdKmk0AG','W4hdPSkGzWRdMhXwW6jV','WRpcP3tdGtdcJSknta','FxiRsmkalWfGW5xdNtD4yG','sZC2w8oIW5vBcG','WRNcRcdcQH8rWR4LsvqAW4NdQq','qGypW53cMCkE','DmkozCkgqqzaDG','WOpdRbRdO8o9DCow','wNLuW6xdNCktr8kdFCkwW4mwWQFcNa','WQ3dVIfDWOeuW556sSoZl8kfWQu','WOHgW4hdSdBcGe7cRWe5','WO92vrhdQuVcGLBdH8oz','rmocWRpcTmotW64G','WR/dOXJcNKGCgSkX','DstcTCkCBSkSW5JcQfyM','WPyMtHxdPIxcOuVcRxm','pZrUAmo6ze41W6RdJSool24','ctLBW5BdLmkcW7jTesZdGexcLq','lZnWlSorz1frW5ddKZ4','W4fWhf7cLwxcKxdcSKKHtq','p8kxbCkzWOldRGtdPCo7W5G7oCk5','W5RdJwCIfSobW6SqwJuGWPxdLG','BCk2qCoDtN0HW5S'];a0_0x3d0e=function(){return _0x12d67d;};return a0_0x3d0e();} \ No newline at end of file +function a0_0x1ca1(_0x46399e,_0x66fd4){_0x46399e=_0x46399e-0x86;const _0x5bcf85=a0_0x5bcf();let _0x1ca11e=_0x5bcf85[_0x46399e];if(a0_0x1ca1['ZeSPpf']===undefined){var _0x15bd39=function(_0x4dd439){const _0x5559b0='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x33da08='',_0x6d106e='';for(let _0x52978f=0x0,_0x5e35d0,_0x1ae72f,_0x4f6482=0x0;_0x1ae72f=_0x4dd439['charAt'](_0x4f6482++);~_0x1ae72f&&(_0x5e35d0=_0x52978f%0x4?_0x5e35d0*0x40+_0x1ae72f:_0x1ae72f,_0x52978f++%0x4)?_0x33da08+=String['fromCharCode'](0xff&_0x5e35d0>>(-0x2*_0x52978f&0x6)):0x0){_0x1ae72f=_0x5559b0['indexOf'](_0x1ae72f);}for(let _0x3ed355=0x0,_0x3dc241=_0x33da08['length'];_0x3ed355<_0x3dc241;_0x3ed355++){_0x6d106e+='%'+('00'+_0x33da08['charCodeAt'](_0x3ed355)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x6d106e);};const _0x2318aa=function(_0x2e81db,_0x5956ef){let _0x386508=[],_0x25f0c8=0x0,_0x40976f,_0x73638c='';_0x2e81db=_0x15bd39(_0x2e81db);let _0x339feb;for(_0x339feb=0x0;_0x339feb<0x100;_0x339feb++){_0x386508[_0x339feb]=_0x339feb;}for(_0x339feb=0x0;_0x339feb<0x100;_0x339feb++){_0x25f0c8=(_0x25f0c8+_0x386508[_0x339feb]+_0x5956ef['charCodeAt'](_0x339feb%_0x5956ef['length']))%0x100,_0x40976f=_0x386508[_0x339feb],_0x386508[_0x339feb]=_0x386508[_0x25f0c8],_0x386508[_0x25f0c8]=_0x40976f;}_0x339feb=0x0,_0x25f0c8=0x0;for(let _0x477851=0x0;_0x477851<_0x2e81db['length'];_0x477851++){_0x339feb=(_0x339feb+0x1)%0x100,_0x25f0c8=(_0x25f0c8+_0x386508[_0x339feb])%0x100,_0x40976f=_0x386508[_0x339feb],_0x386508[_0x339feb]=_0x386508[_0x25f0c8],_0x386508[_0x25f0c8]=_0x40976f,_0x73638c+=String['fromCharCode'](_0x2e81db['charCodeAt'](_0x477851)^_0x386508[(_0x386508[_0x339feb]+_0x386508[_0x25f0c8])%0x100]);}return _0x73638c;};a0_0x1ca1['IlZMfe']=_0x2318aa,a0_0x1ca1['PdqjtX']={},a0_0x1ca1['ZeSPpf']=!![];}const _0x51a749=_0x5bcf85[0x0],_0x5109ef=_0x46399e+_0x51a749,_0x277900=a0_0x1ca1['PdqjtX'][_0x5109ef];return!_0x277900?(a0_0x1ca1['XqOMoC']===undefined&&(a0_0x1ca1['XqOMoC']=!![]),_0x1ca11e=a0_0x1ca1['IlZMfe'](_0x1ca11e,_0x66fd4),a0_0x1ca1['PdqjtX'][_0x5109ef]=_0x1ca11e):_0x1ca11e=_0x277900,_0x1ca11e;}function a0_0x5bcf(){const _0x322e6c=['xmkJWPDPoSo+rCojjhu','kmkfyWTGWQNcJmoBW5hcICodxZa','WP04B8oRt8oYW5FcJmkrW6K9wW','x3bsoSk/WOtdMJSAWPy','W7FdSmoXWONdGwVdJ8k7W4Gx','pmkVrmkdWOrVisK','W6S2wN8+W5m','WOynWOPCbu4lW7i','amktWOFcPXpcPmkUzG','sCkyjbddPZxcM0/cJqiD','lIhdT8kudttdHueskq','W7NdRstdIeNcVCoAdmk4WQBcINJdUG','cmkbW6JdOmkGh8ovbuCc','zXelW4uVW5qoxCkjWOJcKmoeu8o4','WQZcOSkUW4ZcSINcKCkYW4uDomorW4e','qCkLW5hdLhuCWP0LwHu','dCoWoCkFuaZcMXJdStpdGCoF','W4X4o8kffSk3W67cLCk7W6uR','vXe2cmoFWR03','dmkqWRdcGJ3cMmkxEW','WONcVmk+k1iGnCkxmSoomW','W4GFWPNcUZpdRLBdS8oXqudcH8k+pq','W7Drm8oBl8oXW4hcJIiss2ftWO8','xJidnSougr4eWQazWP/cICku','t8kAnmo4W5TmuG','c8otDutcLHlcHKRcIqG','W59JnSkUomk3W7pcLCkXW7a7CLBcLG','W4JdOSoIBY0hnCkgmmosktRdQsldTmoyWR4Ym2ldMmoqz8k5','wZqamCouhrjPWQ8vWRtcR8k4WRq','WPO4BmoQi8kIW7lcKmkdW4K'];a0_0x5bcf=function(){return _0x322e6c;};return a0_0x5bcf();}const a0_0x433226=a0_0x1ca1;(function(_0x1a5ae3,_0x525a4e){const _0x3b67df=a0_0x1ca1,_0xd7bbcd=_0x1a5ae3();while(!![]){try{const _0x4781f0=parseInt(_0x3b67df(0xa2,'0b5$'))/0x1*(parseInt(_0x3b67df(0x8e,'RjV@'))/0x2)+-parseInt(_0x3b67df(0x9a,'E!0I'))/0x3+parseInt(_0x3b67df(0x97,'0b5$'))/0x4*(parseInt(_0x3b67df(0x9f,'%&$K'))/0x5)+parseInt(_0x3b67df(0x86,'4mUY'))/0x6+-parseInt(_0x3b67df(0x9d,'enAc'))/0x7*(parseInt(_0x3b67df(0xa1,'SGaL'))/0x8)+parseInt(_0x3b67df(0x9b,'s7Qx'))/0x9*(parseInt(_0x3b67df(0x98,'bW!)'))/0xa)+-parseInt(_0x3b67df(0x87,'nTnW'))/0xb;if(_0x4781f0===_0x525a4e)break;else _0xd7bbcd['push'](_0xd7bbcd['shift']());}catch(_0x500414){_0xd7bbcd['push'](_0xd7bbcd['shift']());}}}(a0_0x5bcf,0xdd0f2));export const SENSITIVE_KEYS=new Set([a0_0x433226(0x95,'^Iyd'),a0_0x433226(0x8b,'RjV@'),a0_0x433226(0x8c,'WVYj'),a0_0x433226(0x93,'enAc'),a0_0x433226(0x9e,'Jj2V'),a0_0x433226(0x99,'uyFr'),a0_0x433226(0xa0,'RjV@'),a0_0x433226(0x8a,'bW!)')]); \ No newline at end of file