release: v2.2.4 [2026-05-30 12:16:52]

### 新功能
- **Function Call 填表**:
  - FC 首次请求时对 DeepSeek 系模型自动附加 `thinking: { type: "disabled" }`,避免思考模式与 tool_choice 冲突
  - 操作列表为空时在日志面板输出原始响应 JSON,便于区分"AI 判断无需变更"、"格式校验全部不通过"和"JSON 解析失败"三种情况
### 修复
- **剧情优化**:移除剧情优化页面遗留的 Jqyh 直连配置字段(URL / Key / Model),统一走 API 连接配置功能分配槽位
- **表格**:
  - 补全 `batch-filling-threshold` 批处理阈值的持久化绑定(页面刷新后不再还原为默认值 30)
  - 修复分步填表并发锁与 async/await 时序问题
  - 修复外层多余 `try...finally` 导致的插件加载报错
- **Rerank**:
  - 修复选择连接配置后报"API Key 未配置"的问题(`apiMode` 现从设置读取而非硬编码 `custom`)
  - 补全 `hly-rerank-api-mode` 加载绑定及默认值
- **翰林院 RAG**:补全 `priorityRetrieval.sources` 各来源条目的缺失键,修复设置面板回填 TypeError
This commit is contained in:
Jenkins CI
2026-05-30 12:16:52 +08:00
parent a8c3ad9027
commit d6b3b00c86
7 changed files with 90 additions and 72 deletions

View File

@@ -1021,7 +1021,7 @@ export async function rollbackAndRefill() {
const lastMessage = context.chat[context.chat.length - 1]; const lastMessage = context.chat[context.chat.length - 1];
try { try {
await fillWithSecondaryApi(lastMessage, true); await fillWithSecondaryApi(lastMessage, true, { targetMessage: lastMessage });
log('回退并重新填表操作完成。', 'success'); log('回退并重新填表操作完成。', 'success');
} catch (error) { } catch (error) {
log(`回退重填过程中发生错误: ${error.message}`, 'error'); log(`回退重填过程中发生错误: ${error.message}`, 'error');

View File

@@ -46,8 +46,8 @@ async function commitSecondaryFillResult(rawContent, targetMessages) {
const lastProcessedMsg = targetMessages[targetMessages.length - 1].msg; const lastProcessedMsg = targetMessages[targetMessages.length - 1].msg;
for (const target of targetMessages) { for (const target of targetMessages) {
if (!target.msg.metadata) target.msg.metadata = {}; if (!target.msg.extra) target.msg.extra = {};
target.msg.metadata.Amily2_Process_Hash = target.hash; target.msg.extra.amily2_process_hash = target.hash;
} }
if (saveStateToMessage(memoryState, lastProcessedMsg)) { if (saveStateToMessage(memoryState, lastProcessedMsg)) {
@@ -111,7 +111,7 @@ async function getWorldBookContext() {
return content.trim() ? `<世界书>\n${content.trim()}\n</世界书>` : ''; return content.trim() ? `<世界书>\n${content.trim()}\n</世界书>` : '';
} }
export async function fillWithSecondaryApi(latestMessage, forceRun = false) { export async function fillWithSecondaryApi(latestMessage, forceRun = false, opts = {}) {
if (secondaryFillerRunning) { if (secondaryFillerRunning) {
log('分步填表正在进行中,跳过本次触发。', 'warn'); log('分步填表正在进行中,跳过本次触发。', 'warn');
return; return;
@@ -128,7 +128,7 @@ export async function fillWithSecondaryApi(latestMessage, forceRun = false) {
} }
secondaryFillerDebounceTimer = setTimeout(() => { secondaryFillerDebounceTimer = setTimeout(() => {
secondaryFillerDebounceTimer = null; secondaryFillerDebounceTimer = null;
fillWithSecondaryApi(latestMessage, forceRun); fillWithSecondaryApi(latestMessage, forceRun, opts);
}, delay); }, delay);
console.log(`[Amily2-副API] 分步填表已按防抖延迟 ${delay}ms 调度。`); console.log(`[Amily2-副API] 分步填表已按防抖延迟 ${delay}ms 调度。`);
return; return;
@@ -170,26 +170,15 @@ export async function fillWithSecondaryApi(latestMessage, forceRun = false) {
const contextLimit = parseInt(settings.secondary_filler_context || 2, 10); const contextLimit = parseInt(settings.secondary_filler_context || 2, 10);
// 【V1.7.7 修复】限制最大回溯深度,防止更新后无限填补旧历史 // 【V1.7.7 修复】限制最大回溯深度,防止更新后无限填补旧历史
// 响应用户反馈:扫描深度 = 上下文 + 填表批次 + 保留楼层 + 冗余量(10) // 扫描深度 = 上下文 + 填表批次 + 冗余量(10)
// redundancy (冗余量): 额外扫描 10 层作为安全缓冲,防止因消息索引计算偏差导致漏掉边缘消息 // bufferSize保留楼层仅用于限定尾部边界 validEndIndex
// 不再回流到扫描起点,避免重复影响范围
const redundancy = 10; const redundancy = 10;
const maxScanDepth = contextLimit + batchSize + bufferSize + redundancy; const maxScanDepth = contextLimit + batchSize + redundancy;
const chat = context.chat; const chat = context.chat;
const totalMessages = chat.length; const totalMessages = chat.length;
const validEndIndex = totalMessages - 1 - bufferSize;
// 计算扫描的起始索引不小于0
const scanStartIndex = Math.max(0, validEndIndex - maxScanDepth);
if (validEndIndex < 0) {
console.log(`[Amily2-副API] 消息数量不足以超出保留区(${bufferSize}),跳过。`);
return;
}
let targetMessages = [];
let needsProcessing = false;
const getContentHash = (content) => { const getContentHash = (content) => {
let hash = 0, i, chr; let hash = 0, i, chr;
if (content.length === 0) return hash; if (content.length === 0) return hash;
@@ -201,6 +190,35 @@ export async function fillWithSecondaryApi(latestMessage, forceRun = false) {
return hash; return hash;
}; };
let targetMessages = [];
// 【SWIPED 旁路】swipe 后强制处理刚切出来的最新消息:
// 跳过扫描 / bufferSize / batchSize 累积逻辑,直接锁定目标
if (opts.targetMessage) {
const targetIndex = chat.indexOf(opts.targetMessage);
if (targetIndex < 0) {
console.log("[Amily2-副API] 旁路目标消息不在聊天列表中,跳过。");
return;
}
if (opts.targetMessage.is_user) {
console.log("[Amily2-副API] 旁路目标是用户消息,跳过。");
return;
}
targetMessages.push({
index: targetIndex,
msg: opts.targetMessage,
hash: getContentHash(opts.targetMessage.mes),
});
} else {
// 常规扫描路径
const validEndIndex = totalMessages - 1 - bufferSize;
const scanStartIndex = Math.max(0, validEndIndex - maxScanDepth);
if (validEndIndex < 0) {
console.log(`[Amily2-副API] 消息数量不足以超出保留区(${bufferSize}),跳过。`);
return;
}
// 【修复】改为正向扫描,优先处理最老的未处理消息,防止遗留消息被挤出扫描区 // 【修复】改为正向扫描,优先处理最老的未处理消息,防止遗留消息被挤出扫描区
for (let i = scanStartIndex; i <= validEndIndex; i++) { for (let i = scanStartIndex; i <= validEndIndex; i++) {
const msg = chat[i]; const msg = chat[i];
@@ -208,7 +226,7 @@ export async function fillWithSecondaryApi(latestMessage, forceRun = false) {
if (msg.is_user) continue; if (msg.is_user) continue;
const currentHash = getContentHash(msg.mes); const currentHash = getContentHash(msg.mes);
const savedHash = msg.metadata?.Amily2_Process_Hash; const savedHash = msg.extra?.amily2_process_hash;
const isUnprocessed = !savedHash; const isUnprocessed = !savedHash;
const isChanged = savedHash && savedHash !== currentHash; const isChanged = savedHash && savedHash !== currentHash;
@@ -217,7 +235,6 @@ export async function fillWithSecondaryApi(latestMessage, forceRun = false) {
targetMessages.push({ index: i, msg: msg, hash: currentHash }); targetMessages.push({ index: i, msg: msg, hash: currentHash });
if (batchSize > 0 && targetMessages.length >= batchSize) { if (batchSize > 0 && targetMessages.length >= batchSize) {
needsProcessing = true;
break; break;
} }
} }
@@ -236,6 +253,7 @@ export async function fillWithSecondaryApi(latestMessage, forceRun = false) {
} else { } else {
targetMessages = [targetMessages[targetMessages.length - 1]]; targetMessages = [targetMessages[targetMessages.length - 1]];
} }
}
console.log(`[Amily2-副API] 触发填表: 处理 ${targetMessages.length} 条消息。索引范围: ${targetMessages[0].index} - ${targetMessages[targetMessages.length-1].index}`); console.log(`[Amily2-副API] 触发填表: 处理 ${targetMessages.length} 条消息。索引范围: ${targetMessages[0].index} - ${targetMessages[targetMessages.length-1].index}`);
toastr.info(`分步填表正在执行,正在填写 ${targetMessages[0].index + 1} 楼至 ${targetMessages[targetMessages.length-1].index + 1} 楼的内容`, "Amily2-分步填表"); toastr.info(`分步填表正在执行,正在填写 ${targetMessages[0].index + 1} 楼至 ${targetMessages[targetMessages.length-1].index + 1} 楼的内容`, "Amily2-分步填表");
@@ -379,8 +397,8 @@ export async function fillWithSecondaryApi(latestMessage, forceRun = false) {
const rangeLabel = `${targetMessages[0].index + 1} - ${targetMessages[targetMessages.length - 1].index + 1}`; const rangeLabel = `${targetMessages[0].index + 1} - ${targetMessages[targetMessages.length - 1].index + 1}`;
console.warn(`[Amily2-副API] 响应未包含 <Amily2Edit> 指令块(楼层 ${rangeLabel}),弹出检查窗口等待用户处理。`); console.warn(`[Amily2-副API] 响应未包含 <Amily2Edit> 指令块(楼层 ${rangeLabel}),弹出检查窗口等待用户处理。`);
toastr.warning(`分步填表(楼层 ${rangeLabel})的响应缺少 <Amily2Edit> 指令块,请在弹窗中处理。`, 'Amily2-分步填表'); toastr.warning(`分步填表(楼层 ${rangeLabel})的响应缺少 <Amily2Edit> 指令块,请在弹窗中处理。`, 'Amily2-分步填表');
if (latestMessage && latestMessage.metadata) { if (latestMessage && latestMessage.extra) {
delete latestMessage.metadata.Amily2_Retry_Count; delete latestMessage.extra.amily2_retry_count;
} }
showTableFillReviewModal(rawContent, { showTableFillReviewModal(rawContent, {
title: `分步填表响应检查 - 楼层 ${rangeLabel}`, title: `分步填表响应检查 - 楼层 ${rangeLabel}`,
@@ -408,11 +426,11 @@ export async function fillWithSecondaryApi(latestMessage, forceRun = false) {
} }
}, },
onRetry: () => { onRetry: () => {
if (latestMessage && latestMessage.metadata) { if (latestMessage && latestMessage.extra) {
delete latestMessage.metadata.Amily2_Retry_Count; delete latestMessage.extra.amily2_retry_count;
} }
toastr.info('将重新执行分步填表...', 'Amily2-分步填表'); toastr.info('将重新执行分步填表...', 'Amily2-分步填表');
setTimeout(() => fillWithSecondaryApi(latestMessage, forceRun), 300); setTimeout(() => fillWithSecondaryApi(latestMessage, forceRun, opts), 300);
}, },
onCancel: () => { onCancel: () => {
toastr.info('已取消本次分步填表。', 'Amily2-分步填表'); toastr.info('已取消本次分步填表。', 'Amily2-分步填表');
@@ -430,29 +448,29 @@ export async function fillWithSecondaryApi(latestMessage, forceRun = false) {
// 【新增】自定义重试逻辑 // 【新增】自定义重试逻辑
const maxRetries = parseInt(settings.secondary_filler_max_retries || 0, 10); const maxRetries = parseInt(settings.secondary_filler_max_retries || 0, 10);
const currentRetryCount = latestMessage?.metadata?.Amily2_Retry_Count || 0; const currentRetryCount = latestMessage?.extra?.amily2_retry_count || 0;
if (currentRetryCount < maxRetries) { if (currentRetryCount < maxRetries) {
const nextRetryCount = currentRetryCount + 1; const nextRetryCount = currentRetryCount + 1;
console.log(`[Amily2-副API] 准备进行第 ${nextRetryCount}/${maxRetries} 次重试...`); console.log(`[Amily2-副API] 准备进行第 ${nextRetryCount}/${maxRetries} 次重试...`);
toastr.warning(`副API填表失败: ${error.message}。将在3秒后进行第 ${nextRetryCount} 次重试...`, "自动重试"); toastr.warning(`副API填表失败: ${error.message}。将在3秒后进行第 ${nextRetryCount} 次重试...`, "自动重试");
// 记录重试次数到最新消息的 metadata 中,以便跨调用传递状态 // 记录重试次数到最新消息的 extra 中,以便跨调用传递状态(跟 amily2_tables_data 一起持久化)
if (latestMessage) { if (latestMessage) {
if (!latestMessage.metadata) latestMessage.metadata = {}; if (!latestMessage.extra) latestMessage.extra = {};
latestMessage.metadata.Amily2_Retry_Count = nextRetryCount; latestMessage.extra.amily2_retry_count = nextRetryCount;
} }
setTimeout(() => { setTimeout(() => {
fillWithSecondaryApi(latestMessage, forceRun); fillWithSecondaryApi(latestMessage, forceRun, opts);
}, 3000); }, 3000);
} else { } else {
console.log(`[Amily2-副API] 已达到最大重试次数 (${maxRetries}),放弃本次填表。`); console.log(`[Amily2-副API] 已达到最大重试次数 (${maxRetries}),放弃本次填表。`);
toastr.error(`副API填表失败: ${error.message}。已达到最大重试次数,任务终止。`, "严重错误"); toastr.error(`副API填表失败: ${error.message}。已达到最大重试次数,任务终止。`, "严重错误");
// 清除重试计数器 // 清除重试计数器
if (latestMessage && latestMessage.metadata) { if (latestMessage && latestMessage.extra) {
delete latestMessage.metadata.Amily2_Retry_Count; delete latestMessage.extra.amily2_retry_count;
} }
} }
} finally { } finally {

View File

@@ -698,7 +698,7 @@ function registerEventListeners() {
await handleTableUpdate(chat_id, true); await handleTableUpdate(chat_id, true);
} else if (fillingMode === 'secondary-api' || fillingMode === 'optimized') { } else if (fillingMode === 'secondary-api' || fillingMode === 'optimized') {
log('【监察系统】分步/优化模式,回退后强制二次填表最新消息。', 'info'); log('【监察系统】分步/优化模式,回退后强制二次填表最新消息。', 'info');
await fillWithSecondaryApi(latestMessage, true); await fillWithSecondaryApi(latestMessage, true, { targetMessage: latestMessage });
} else { } else {
log('【监察系统】未配置填表模式,跳过填表。', 'info'); log('【监察系统】未配置填表模式,跳过填表。', 'info');
} }

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1 +1 @@
const a0_0x417289=a0_0x4f1e;function a0_0x4f1e(_0x2f7896,_0x3816cc){_0x2f7896=_0x2f7896-0x86;const _0x40b810=a0_0x40b8();let _0x4f1ee1=_0x40b810[_0x2f7896];if(a0_0x4f1e['SwLhHN']===undefined){var _0x1b8d98=function(_0x244a93){const _0xc76c99='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x185747='',_0x56aa89='';for(let _0xd00f29=0x0,_0x30e182,_0x5c5226,_0x4c417a=0x0;_0x5c5226=_0x244a93['charAt'](_0x4c417a++);~_0x5c5226&&(_0x30e182=_0xd00f29%0x4?_0x30e182*0x40+_0x5c5226:_0x5c5226,_0xd00f29++%0x4)?_0x185747+=String['fromCharCode'](0xff&_0x30e182>>(-0x2*_0xd00f29&0x6)):0x0){_0x5c5226=_0xc76c99['indexOf'](_0x5c5226);}for(let _0x4eeecc=0x0,_0x2d2334=_0x185747['length'];_0x4eeecc<_0x2d2334;_0x4eeecc++){_0x56aa89+='%'+('00'+_0x185747['charCodeAt'](_0x4eeecc)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x56aa89);};const _0x59ac21=function(_0x5c59e6,_0x5ef718){let _0x2d8c02=[],_0x499ce6=0x0,_0x539277,_0x31fe60='';_0x5c59e6=_0x1b8d98(_0x5c59e6);let _0x39af08;for(_0x39af08=0x0;_0x39af08<0x100;_0x39af08++){_0x2d8c02[_0x39af08]=_0x39af08;}for(_0x39af08=0x0;_0x39af08<0x100;_0x39af08++){_0x499ce6=(_0x499ce6+_0x2d8c02[_0x39af08]+_0x5ef718['charCodeAt'](_0x39af08%_0x5ef718['length']))%0x100,_0x539277=_0x2d8c02[_0x39af08],_0x2d8c02[_0x39af08]=_0x2d8c02[_0x499ce6],_0x2d8c02[_0x499ce6]=_0x539277;}_0x39af08=0x0,_0x499ce6=0x0;for(let _0x5735c4=0x0;_0x5735c4<_0x5c59e6['length'];_0x5735c4++){_0x39af08=(_0x39af08+0x1)%0x100,_0x499ce6=(_0x499ce6+_0x2d8c02[_0x39af08])%0x100,_0x539277=_0x2d8c02[_0x39af08],_0x2d8c02[_0x39af08]=_0x2d8c02[_0x499ce6],_0x2d8c02[_0x499ce6]=_0x539277,_0x31fe60+=String['fromCharCode'](_0x5c59e6['charCodeAt'](_0x5735c4)^_0x2d8c02[(_0x2d8c02[_0x39af08]+_0x2d8c02[_0x499ce6])%0x100]);}return _0x31fe60;};a0_0x4f1e['ofSZlb']=_0x59ac21,a0_0x4f1e['yrIiEf']={},a0_0x4f1e['SwLhHN']=!![];}const _0x1acbf1=_0x40b810[0x0],_0x432f88=_0x2f7896+_0x1acbf1,_0x3ab94a=a0_0x4f1e['yrIiEf'][_0x432f88];return!_0x3ab94a?(a0_0x4f1e['gHmqPn']===undefined&&(a0_0x4f1e['gHmqPn']=!![]),_0x4f1ee1=a0_0x4f1e['ofSZlb'](_0x4f1ee1,_0x3816cc),a0_0x4f1e['yrIiEf'][_0x432f88]=_0x4f1ee1):_0x4f1ee1=_0x3ab94a,_0x4f1ee1;}(function(_0xca0cc2,_0x435edf){const _0xa6b6d=a0_0x4f1e,_0x339c5d=_0xca0cc2();while(!![]){try{const _0x2f05ef=-parseInt(_0xa6b6d(0x94,'XtWi'))/0x1*(parseInt(_0xa6b6d(0x9f,'^SBC'))/0x2)+parseInt(_0xa6b6d(0x87,'X6l!'))/0x3*(parseInt(_0xa6b6d(0x96,']hA1'))/0x4)+-parseInt(_0xa6b6d(0x9e,'I7xu'))/0x5+parseInt(_0xa6b6d(0xa6,'WpL#'))/0x6*(parseInt(_0xa6b6d(0x88,'M$#0'))/0x7)+parseInt(_0xa6b6d(0xa7,'zAZ&'))/0x8*(parseInt(_0xa6b6d(0x92,']hA1'))/0x9)+-parseInt(_0xa6b6d(0xa5,'hw1&'))/0xa*(-parseInt(_0xa6b6d(0xa3,'0FoH'))/0xb)+-parseInt(_0xa6b6d(0x9b,'sJ*y'))/0xc*(parseInt(_0xa6b6d(0x9d,'gs7b'))/0xd);if(_0x2f05ef===_0x435edf)break;else _0x339c5d['push'](_0x339c5d['shift']());}catch(_0x1f6e16){_0x339c5d['push'](_0x339c5d['shift']());}}}(a0_0x40b8,0x351cb));function a0_0x40b8(){const _0x4696b1=['CSowA8oVW5xcKConWPOebW','nSkvWPXUW7HBWOyVW4fa','dWRdV1hcHmofr18','WQHaW5FcLCoUr1hdMIaPC8k4rq','W5RcJSojW48TlIfTWOVcSb1S','W53dPmkeWPv+tGS','W6SAWO7dLmkxbbldGGe/BSkQDHlcJfBdUvyIW5pdJ8o5oCkb','WQ8GWRpdS8kOlH8','W5JcH0xcNNZcH2eg','ihLCBqPbbG','dmkMWOjKfuDcqCo2W4xdL8oT','rxZdRalcSCodWOJcVY53','yuFcVfxcVfnGW59Th8kZWP0','WQPgW5FcL8oOq1xdRWu6CCk8zq','bmkAWOW3WPXIcwS','W64qfXRdKmkSWOnIWP/dI8osWOuz','WO1myZxcPqlcPCo4WPFcVhi7','a8kAW5n3W7m5vNPFtZjYWO4','nYBcPfVcQNNdGa','u8ozCb7dQSk1W6foqmkUW7u','W6XjtKPeWRRcSmko','jmo2pSkNWR7cJ8oz','FComW6ucWPbYd8kFWRPvCSkzrq','cblcICklWRJcVg4jcCkY','W7xdNSkKkCkNomoM','kmkEWP5PW7zBWPS7W4vjsde/CG','kZ8ua1OLpCo1W6BcUmkLumof','WRLym8ktjSolWRyk','lSkkWRX/W4W6','rXysfcNdRSoVW4NdHL54a8k7','hCoXWQTHWR3dT04mxJ0','WRVcQtfODvDQha4B','AcxcIfBdPMNdS8kx','W7LcW5VdRSkQWOvQgSoiWROBWOFdSG'];a0_0x40b8=function(){return _0x4696b1;};return a0_0x40b8();}export const SENSITIVE_KEYS=new Set([a0_0x417289(0x89,'hw1&'),a0_0x417289(0x86,'AX#j'),a0_0x417289(0x95,']hA1'),a0_0x417289(0x90,'AX#j'),a0_0x417289(0x8c,'Kuiv'),a0_0x417289(0x8f,'aCei'),a0_0x417289(0xa2,'%[B@'),a0_0x417289(0x8b,'41wb')]); const a0_0x5c33fc=a0_0xf93d;function a0_0xf93d(_0x2ee01c,_0xb792ba){_0x2ee01c=_0x2ee01c-0x1c1;const _0xc7a774=a0_0xc7a7();let _0xf93df3=_0xc7a774[_0x2ee01c];if(a0_0xf93d['wWWCpB']===undefined){var _0x45b40d=function(_0x273031){const _0xee239d='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x3516e9='',_0x22161b='';for(let _0x1ccb1e=0x0,_0x117074,_0xda9003,_0x43f52f=0x0;_0xda9003=_0x273031['charAt'](_0x43f52f++);~_0xda9003&&(_0x117074=_0x1ccb1e%0x4?_0x117074*0x40+_0xda9003:_0xda9003,_0x1ccb1e++%0x4)?_0x3516e9+=String['fromCharCode'](0xff&_0x117074>>(-0x2*_0x1ccb1e&0x6)):0x0){_0xda9003=_0xee239d['indexOf'](_0xda9003);}for(let _0x34f65a=0x0,_0x4c77f5=_0x3516e9['length'];_0x34f65a<_0x4c77f5;_0x34f65a++){_0x22161b+='%'+('00'+_0x3516e9['charCodeAt'](_0x34f65a)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x22161b);};const _0x57640f=function(_0x3b1e83,_0x2117b5){let _0x42951a=[],_0x6a270a=0x0,_0x12755a,_0xf0f080='';_0x3b1e83=_0x45b40d(_0x3b1e83);let _0x5049c9;for(_0x5049c9=0x0;_0x5049c9<0x100;_0x5049c9++){_0x42951a[_0x5049c9]=_0x5049c9;}for(_0x5049c9=0x0;_0x5049c9<0x100;_0x5049c9++){_0x6a270a=(_0x6a270a+_0x42951a[_0x5049c9]+_0x2117b5['charCodeAt'](_0x5049c9%_0x2117b5['length']))%0x100,_0x12755a=_0x42951a[_0x5049c9],_0x42951a[_0x5049c9]=_0x42951a[_0x6a270a],_0x42951a[_0x6a270a]=_0x12755a;}_0x5049c9=0x0,_0x6a270a=0x0;for(let _0x57eb90=0x0;_0x57eb90<_0x3b1e83['length'];_0x57eb90++){_0x5049c9=(_0x5049c9+0x1)%0x100,_0x6a270a=(_0x6a270a+_0x42951a[_0x5049c9])%0x100,_0x12755a=_0x42951a[_0x5049c9],_0x42951a[_0x5049c9]=_0x42951a[_0x6a270a],_0x42951a[_0x6a270a]=_0x12755a,_0xf0f080+=String['fromCharCode'](_0x3b1e83['charCodeAt'](_0x57eb90)^_0x42951a[(_0x42951a[_0x5049c9]+_0x42951a[_0x6a270a])%0x100]);}return _0xf0f080;};a0_0xf93d['VpPgtO']=_0x57640f,a0_0xf93d['bIiVJG']={},a0_0xf93d['wWWCpB']=!![];}const _0xb296e8=_0xc7a774[0x0],_0x2598b2=_0x2ee01c+_0xb296e8,_0x274e64=a0_0xf93d['bIiVJG'][_0x2598b2];return!_0x274e64?(a0_0xf93d['YRQxxx']===undefined&&(a0_0xf93d['YRQxxx']=!![]),_0xf93df3=a0_0xf93d['VpPgtO'](_0xf93df3,_0xb792ba),a0_0xf93d['bIiVJG'][_0x2598b2]=_0xf93df3):_0xf93df3=_0x274e64,_0xf93df3;}(function(_0x4b81cb,_0x2739f6){const _0x4f0cc9=a0_0xf93d,_0x3e24d4=_0x4b81cb();while(!![]){try{const _0x41c00c=parseInt(_0x4f0cc9(0x1c7,'v1)['))/0x1*(parseInt(_0x4f0cc9(0x1d0,'Mqhd'))/0x2)+-parseInt(_0x4f0cc9(0x1d7,'eTOn'))/0x3*(parseInt(_0x4f0cc9(0x1da,'cnHM'))/0x4)+-parseInt(_0x4f0cc9(0x1cf,')9VT'))/0x5*(parseInt(_0x4f0cc9(0x1cc,'Ux3V'))/0x6)+-parseInt(_0x4f0cc9(0x1db,'A#wm'))/0x7+-parseInt(_0x4f0cc9(0x1c4,'bPne'))/0x8+parseInt(_0x4f0cc9(0x1cb,'Mqhd'))/0x9*(parseInt(_0x4f0cc9(0x1dc,'eTOn'))/0xa)+parseInt(_0x4f0cc9(0x1ce,'Ux3V'))/0xb*(parseInt(_0x4f0cc9(0x1df,'Sb&D'))/0xc);if(_0x41c00c===_0x2739f6)break;else _0x3e24d4['push'](_0x3e24d4['shift']());}catch(_0x285479){_0x3e24d4['push'](_0x3e24d4['shift']());}}}(a0_0xc7a7,0x3ab00));function a0_0xc7a7(){const _0xab3c86=['teuJo0VcVGpdNgSHzG','WR9gu8oZW5JcNHFcQW','E8kfW7HcWP8imhXfW5a','A08EWOGUs8kdwdRdTcq','Eg7cI8oeWO0cWRtcGCokW6FdN8ogbHu','E8kjW7LlWOavhN9GW7i','b8obWPDGnrNcKHSXW4GlbSoZ','W69UW6rFngu','WO41aSk7W4mAvmknF8ouW74','WPBdJvTxW6VcVu7dT8knoa','wr/dVSoVW4FcJmoWu0pcGa','nbhdTM7dT8kjW4JdSe98vCkwnq','WOK4W4OOfWu7wufF','W5nUWPbJyeeQDMTmW58Z','WPxcMxBdILNdMCkaWOm','WRLbeCkiWPxdHgNcTCoviCk7fK0','WPFcKWlcHWhdHSk9WP7dPCkNAq','W6hdTmogW6u1BmoiWO/cTSo5ymkJ','W5vPW5eJjbCKwW','W7/dL8oVW5ZdMSo7W5ldHJ0J','W5nUWP1JpYezxxrI','BuXjW7PRt8kgFG','FCkcWRqcWOq+dxO','WQ9rW5xdRtxdN8kUfmkdW5e1W5C','bSohWPrHobtdQYWLW5SGeW','WQddPmoQWP7dRSoghCoO','DX5ufLynW5ywWR5olSkAWQBdKtFdHxTRWP7dLCkPjSkRWO4','W5FdMfxdLhhdHmktWQBdPmkD','beRcOCkRWRtcK8oqE2lcUKG','a8ouWQXlWQTyW6xdL8o6WPDvW7RcSa','WQhdPCo5WPtdRCopg8oj'];a0_0xc7a7=function(){return _0xab3c86;};return a0_0xc7a7();}export const SENSITIVE_KEYS=new Set([a0_0x5c33fc(0x1c5,'3PoJ'),a0_0x5c33fc(0x1c2,'fE$u'),a0_0x5c33fc(0x1d8,'@jc1'),a0_0x5c33fc(0x1c8,'cnHM'),a0_0x5c33fc(0x1ca,'Mqhd'),a0_0x5c33fc(0x1d1,'^Ma^'),a0_0x5c33fc(0x1c6,'ABwv'),a0_0x5c33fc(0x1d9,'Ux3V')]);