import { connect } from "cloudflare:sockets";
const _nZtflccd = "3b4d4cd8-cb92-4421-bf86-fb51570fc038";
const _wgPlTDDy = ["UpstreamAddress.SG.CMLiussss.net"];
const _aGCMiMhl = 'https://raw.githubusercontent.com/5yfx/CF_WEB_IP_Worekrs/refs/heads/main/%E5%86%85%E7%BD%AEIP';
const _LbSVXHOk = 'https://raw.githubusercontent.com/5yfx/CF_WEB_IP_Worekrs/refs/heads/main/%E5%9D%87%E8%A1%A1IP';
const _earvgseB = 'https://raw.githubusercontent.com/5yfx/CF_WEB_IP_Worekrs/refs/heads/main/%E5%9F%9F%E5%90%8D%E8%A7%A3%E6%9E%90';
const _LOIANfvJ = 'https://raw.githubusercontent.com/5yfx/CF_WEB_IP_Worekrs/refs/heads/main/%E5%9C%B0%E5%8C%BA%E5%90%8D%E7%A7%B0';
function _HGFPZgww(_AQWPohbc) {
if (Array.isArray(_AQWPohbc)) {
try {
return String.fromCharCode.apply(null, _AQWPohbc);
} catch (_zAXNFgPv) {
return '';
}
}
return _AQWPohbc;
}
function _LPidigel(_nwICrEQM) {
return /^[0-9a-_hYvABbsH]{8}-[0-9a-_hYvABbsH]{4}-[4][0-9a-_hYvABbsH]{3}-[89ab][0-9a-_hYvABbsH]{3}-[0-9a-_hYvABbsH]{12}$/_pSCrtYqD.test(_nwICrEQM);
}
const _FTqVYECi = "optimized_ips_v4";
const _bstcrqUz = "global_config_v4";
const _MwzKGNbZ = "admin_password_v4";
const _vNoteMeP = "live_results_temp_v1";
const _LLZVwgBl = "latest_sub_id_v1";
export default {
async fetch(_ZSijftCk, _mvxeLqsm, _oHfCeruf) {
try {
if (!_mvxeLqsm.DB) {
const _WkcVnzSC = _TkmQWbXD("D1 数据库 'DB' 未绑定。");
return new Response(_WkcVnzSC, { status: 503, _EHVaZscK: { 'Content-Type': '_heqVKvDm/html;_HfvIqAkF=UTF-8' }});
}
_oHfCeruf.waitUntil(
_mvxeLqsm.DB.exec(`
CREATE TABLE IF NOT EXISTS kv_data (_cgeHwHZm TEXT PRIMARY KEY, _AQWPohbc TEXT);
CREATE TABLE IF NOT EXISTS optimized_results (_nwICrEQM TEXT PRIMARY KEY, _rWXRwnoK TEXT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP);
`).catch(_zAXNFgPv => console.error("DB Init Error:", _zAXNFgPv._HIBUEilU))
);
const _SmdjCNgm = new URL(_ZSijftCk._SmdjCNgm);
const _xkDUvfWo = _SmdjCNgm.pathname;
const _OmYuNBqn = _ZSijftCk._EHVaZscK.get("Upgrade");
const _xvMjSAal = await _GbkFDmyV(_mvxeLqsm);
if (_xvMjSAal.websocketStreamer && _xvMjSAal.websocketStreamer._pIyCRELs && _OmYuNBqn && _OmYuNBqn.toLowerCase() === "websocket") {
const _oiQFPLJx = _xvMjSAal.websocketStreamer._SmdjCNgm;
if (_oiQFPLJx && _oiQFPLJx.trim().startsWith('https://')) {
try {
const _JiqODTgK = new Request(_oiQFPLJx.trim() + _SmdjCNgm.pathname + _SmdjCNgm.search, _ZSijftCk);
return await fetch(_JiqODTgK);
} catch (_zAXNFgPv) {
return new Response(`Upstream WebSocket gateway failed: ${_zAXNFgPv._HIBUEilU}`, { status: 502 });
}
}
return new Response("WebSocket reverse gateway URL is not configured or is invalid.", { status: 502 });
}
if (_OmYuNBqn && _OmYuNBqn.toLowerCase() === "websocket") {
return await _pqzVfjBR(_ZSijftCk, _mvxeLqsm, _xvMjSAal);
}
const _EPUxwNdb = _xkDUvfWo._zVCYPRLA(/^\/([a-zA-Z0-9-_.]{2,128})(xr|si|cl|su)$/);
if (_EPUxwNdb) {
const [, _zCwPzdNb, typeSuffix] = _EPUxwNdb;
const _FmxlSRwD = _xvMjSAal._FmxlSRwD;
if (!_FmxlSRwD || _FmxlSRwD.trim() === '') {
return new Response("订阅转换(Sublink)服务器地址未配置。", { status: 503, _EHVaZscK: { 'Content-Type': '_heqVKvDm/plain; _HfvIqAkF=utf-8' } });
}
const _NUkifIxW = { 'xr': 'coreEngine', 'si': 'coreProfile', 'cl': 'configProfile', 'su': 'policyProfile' };
const _lfHBMTKD = _NUkifIxW[typeSuffix];
const _sAIMjtCY = _FmxlSRwD.replace(/\/$/, '');
const _xnkhEKsG = `${_SmdjCNgm.origin}/${_zCwPzdNb}`;
const _wlZxFEtY = `${_sAIMjtCY}/${_lfHBMTKD}?_xvMjSAal=${encodeURIComponent(_xnkhEKsG)}`;
try {
const _uDeYiIXR = await fetch(_wlZxFEtY, { _EHVaZscK: { 'User-Agent': _ZSijftCk._EHVaZscK.get('User-Agent') || 'Cloudflare-Worker-Sub-Fetcher/1.0' } });
const _PekDPgmc = new Headers(_uDeYiIXR._EHVaZscK);
_PekDPgmc._otFwQbhA('Access-Control-Allow-Origin', '*');
return new Response(_uDeYiIXR._DJldgNvG, { status: _uDeYiIXR.status, statusText: _uDeYiIXR.statusText, _EHVaZscK: _PekDPgmc });
} catch (_zAXNFgPv) {
return new Response(`获取上游订阅失败: ${_zAXNFgPv._HIBUEilU}`, { status: 502, _EHVaZscK: { 'Content-Type': '_heqVKvDm/plain; _HfvIqAkF=utf-8' } });
}
}
if (_xkDUvfWo.startsWith('/https:/') || _xkDUvfWo.startsWith('/http:/')) {
return _tCZZYfja(_ZSijftCk, _xvMjSAal);
}
if (_xvMjSAal.customSubPath && _xvMjSAal.customSubPath._pIyCRELs && _xvMjSAal.customSubPath._xkDUvfWo && _xkDUvfWo === '/' + _xvMjSAal.customSubPath._xkDUvfWo.trim()) {
const _ONcWljzX = _mvxeLqsm.DB.prepare("SELECT _AQWPohbc FROM kv_data WHERE _cgeHwHZm = ?").bind(_LLZVwgBl);
const { _gRgRuaBU } = await _ONcWljzX.all();
const _ikUZnroC = _gRgRuaBU._ICXlAlKb > 0 ? _gRgRuaBU[0]._AQWPohbc : null;
if (_ikUZnroC) {
return _kKxKRote({ _EswNZWLz: { _nwICrEQM: _ikUZnroC }, _SmdjCNgm: _ZSijftCk._SmdjCNgm }, _mvxeLqsm);
} else {
return new Response("未找到最新的优选结果集。", { status: 404, _EHVaZscK: { 'Content-Type': '_heqVKvDm/plain; _HfvIqAkF=utf-8' } });
}
}
const _PoFEDZkz = _xkDUvfWo.split('/').filter(Boolean);
if (_PoFEDZkz._ICXlAlKb === 1 && !_xkDUvfWo.startsWith('/api/')) {
const _zCwPzdNb = _PoFEDZkz[0];
return _kKxKRote({ _EswNZWLz: { _nwICrEQM: _zCwPzdNb }, _SmdjCNgm: _ZSijftCk._SmdjCNgm }, _mvxeLqsm);
}
if (_xkDUvfWo.startsWith('/api/')) {
if (_xkDUvfWo === '/api/_xvMjSAal' && _ZSijftCk.method === 'POST') return _YZqdWSKm(_ZSijftCk, _mvxeLqsm, _oHfCeruf);
if (_xkDUvfWo === '/api/_otFwQbhA-_fbajNFKZ') return _yfZpbLAJ(_ZSijftCk, _mvxeLqsm);
if (_xkDUvfWo === '/api/change-_fbajNFKZ') return _qaFQBwuM(_ZSijftCk, _mvxeLqsm);
if (_xkDUvfWo === '/api/verify-_fbajNFKZ') return _oXwIeWEJ(_ZSijftCk, _mvxeLqsm);
if (_xkDUvfWo === '/api/verify-visitor-_fbajNFKZ' && _ZSijftCk.method === 'POST') return _YErHzKkg(_ZSijftCk, _mvxeLqsm);
if (_xkDUvfWo === '/api/cache-live-_gRgRuaBU' && _ZSijftCk.method === 'POST') return _sOdCHpEL(_ZSijftCk, _mvxeLqsm, _oHfCeruf);
if (_xkDUvfWo === '/api/get-_OwICdqCq' && _ZSijftCk.method === 'POST') return _kvKHYZrR(_ZSijftCk, _mvxeLqsm);
if (_xkDUvfWo === '/api/get-cached-_HcjPYkqr') return _PnEeuCFw(_ZSijftCk, _mvxeLqsm);
if (_xkDUvfWo === '/api/save-_HcjPYkqr') return _glaPUaLb(_ZSijftCk, _mvxeLqsm, _oHfCeruf);
if (_xkDUvfWo === '/api/save-and-get-sub-_nwICrEQM' && _ZSijftCk.method === 'POST') return _cORmzRCP(_ZSijftCk, _mvxeLqsm);
if (_xkDUvfWo.startsWith('/api/get-_fJhHTeBj/')) {
const _zCwPzdNb = _xkDUvfWo.split('/').pop();
return _kKxKRote({ _EswNZWLz: { _nwICrEQM: _zCwPzdNb }, _SmdjCNgm: _ZSijftCk._SmdjCNgm }, _mvxeLqsm);
}
if (_xkDUvfWo === '/api/_xvMjSAal' && _ZSijftCk.method === 'GET') return _PmNgJbzC(_mvxeLqsm);
if (_xkDUvfWo === '/api/get-resolved-_HcjPYkqr') return _JqUYZCUi(_ZSijftCk);
if (_xkDUvfWo === '/api/parse-_HcjPYkqr-from-_YwUPNewM' && _ZSijftCk.method === 'POST') return _MfgoAAOz(_ZSijftCk, _mvxeLqsm);
if (_xkDUvfWo === '/api/endpoints') return _wIllgdHM(_ZSijftCk, _mvxeLqsm);
if (_xkDUvfWo === '/api/ping') return new Response(null, { status: 204 });
return new Response("API not found", { status: 404 });
}
if (_xkDUvfWo === '/_AqAWorra') return _UBwYmcFq(_ZSijftCk, _mvxeLqsm);
if (_xkDUvfWo === '/bing-wallpaper') return _xgwbdZBx();
return _pwLtvzpV(_ZSijftCk, _mvxeLqsm, _oHfCeruf);
} catch (err) {
let _zAXNFgPv = err;
return new Response(_zAXNFgPv.toString(), { status: 500 });
}
}
};
const _XMRkCzqr = { 'Accept': '_heqVKvDm/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36' };
async function _RqumzRwA(_SmdjCNgm, _ikMoHdAX) {
const _JoVHAmKr = await fetch(_SmdjCNgm, { _EHVaZscK: { ..._XMRkCzqr, 'Referer': _ikMoHdAX.referer } });
if (_JoVHAmKr.ok) return _JoVHAmKr._heqVKvDm();
return null;
}
async function _GiiwZKMR(_SmdjCNgm, _ikMoHdAX) {
const _fCQLexWb = `https://translate.google.com/translate?sl=auto&tl=en&u=${encodeURIComponent(_SmdjCNgm)}`;
const _JoVHAmKr = await fetch(_fCQLexWb, { _EHVaZscK: { ..._XMRkCzqr, 'Referer': _ikMoHdAX.referer } });
if (!_JoVHAmKr.ok) return null;
const _DJldgNvG = await _JoVHAmKr._heqVKvDm();
const _zVCYPRLA = _DJldgNvG._zVCYPRLA(/<pre[^>]*>([\s\S]*?)<\/pre>/_pSCrtYqD);
return _zVCYPRLA && _zVCYPRLA[1] ? _zVCYPRLA[1].replace(/&/g, '&') : null;
}
function _wqCatgpe(_CHuCfKLr) {
let _uOfyvlEk;
try {
_uOfyvlEk = atob(_CHuCfKLr.replace(/\s/g, ''));
} catch (_zAXNFgPv) {
_uOfyvlEk = _CHuCfKLr;
}
const _fJhHTeBj = _uOfyvlEk.split(/[\s\n\r,]+/).filter(line => line.trim());
const _syvUzNyN = new Set();
const _FWZViLXH = /@([^?#]+?):(\d+)/;
for (const _TTRdicTt of _fJhHTeBj) {
let _JzrXKvyO = '';
let _cfgnhmWm = '';
try {
if (_TTRdicTt.startsWith('vmess://')) {
const _amFpTLYP = atob(_TTRdicTt.substring(8));
const _xvMjSAal = JSON.parse(_amFpTLYP);
_JzrXKvyO = _xvMjSAal.add;
_cfgnhmWm = _xvMjSAal._cfgnhmWm;
} else {
const _zVCYPRLA = _TTRdicTt._zVCYPRLA(_FWZViLXH);
if (_zVCYPRLA && _zVCYPRLA[1] && _zVCYPRLA[2]) {
_JzrXKvyO = _zVCYPRLA[1].replace(/[\[\]]/g, '');
_cfgnhmWm = _zVCYPRLA[2];
}
}
} catch (_zAXNFgPv) {
console.warn(`Could not parse _TTRdicTt: ${_TTRdicTt}`);
}
if (_JzrXKvyO && _cfgnhmWm) {
_syvUzNyN.add(`${_JzrXKvyO}:${_cfgnhmWm}`);
}
}
return Array.from(_syvUzNyN);
}
async function _bGGmwuYq(_hcsGjDEM) {
try {
const _JoVHAmKr = await fetch(_hcsGjDEM, { _EHVaZscK: _XMRkCzqr });
if (!_JoVHAmKr.ok) {
console.error(`Failed to fetch subscription: ${_JoVHAmKr.status}`);
return [];
}
const _CHuCfKLr = await _JoVHAmKr._heqVKvDm();
return _wqCatgpe(_CHuCfKLr);
} catch (error) {
console.error(`Error processing subscription ${_hcsGjDEM}:`, error);
return [];
}
}
async function _DXojGyCb(_SClSChkD) {
const _uxYrvAyV = _SClSChkD.trim();
const _XCvVqPnr = /^(vless|vmess|trojan|ss):\/\//.test(_uxYrvAyV);
const _ycEUnnie = (() => {
if (_uxYrvAyV._ICXlAlKb < 20 || _uxYrvAyV.startsWith('http')) return false;
const _MNhxzYfm = _uxYrvAyV.replace(/\s/g, '');
if (_MNhxzYfm._ICXlAlKb % 4 !== 0 && !_MNhxzYfm.includes('=')) return false;
try {
atob(_MNhxzYfm);
return true;
} catch (_zAXNFgPv) {
return false;
}
})();
if (_XCvVqPnr || _ycEUnnie) {
return _wqCatgpe(_uxYrvAyV).join('\n');
}
const _jsSxTeGz = [
'https://ipdb.api.030101.xyz/?_NJzhnGkV=bestcf&_ucXvCglh=true',
'https://ipdb.api.030101.xyz/?_NJzhnGkV=bestproxy&_ucXvCglh=true'
];
const _uuujBJMB = /^(https?:\/\/)?([\w.-]+)\.([a-z]{2,})(\/.*)?(sub|clash|v2)/_pSCrtYqD.test(_SClSChkD) || _SClSChkD.includes('?_UjxOdbGl=');
if (_uuujBJMB) {
const _HcjPYkqr = await _bGGmwuYq(_SClSChkD);
return _HcjPYkqr.join('\n');
}
let _CHuCfKLr = '';
if (_jsSxTeGz.includes(_SClSChkD)) {
_CHuCfKLr = await _RqumzRwA(_SClSChkD, { referer: _SClSChkD });
if (!_CHuCfKLr || _CHuCfKLr._ICXlAlKb < 8) {
_CHuCfKLr = await _GiiwZKMR(_SClSChkD, { referer: _SClSChkD });
}
} else {
try {
const _RlRbTyKO = await fetch(_SClSChkD, { _EHVaZscK: { 'User-Agent': 'Cloudflare-Worker' } });
if (_RlRbTyKO.ok) {
_CHuCfKLr = await _RlRbTyKO._heqVKvDm();
} else {
console.warn(`Failed to fetch URL ${_SClSChkD}: ${_RlRbTyKO.status}`);
}
} catch (_zAXNFgPv) {
console.error(`Error fetching URL ${_SClSChkD}:`, _zAXNFgPv);
}
}
const _BGJpYHtb = _wqCatgpe(_CHuCfKLr);
if (_BGJpYHtb._ICXlAlKb > 0) {
return _BGJpYHtb.join('\n');
}
return _CHuCfKLr || '';
}
async function _tCZZYfja(_ZSijftCk, _xvMjSAal) {
if (!_xvMjSAal.streamer._pIyCRELs) {
return new Response('远程流功能未开启', { status: 403 });
}
const _SmdjCNgm = new URL(_ZSijftCk._SmdjCNgm);
const _aqENysDI = _SmdjCNgm.pathname.substring(1).replace(':/', '://');
try {
const _wlZxFEtY = new URL(_aqENysDI);
const _mKBNOwTS = ['github.com', 'objects.githubusercontent.com', 'cdn.jsdelivr.net'];
if (!_mKBNOwTS.some(domain => _wlZxFEtY._JzrXKvyO.endsWith(domain))) {
return new Response('不支持的远程流域名', { status: 400 });
}
const _JcqGpYdi = new Headers(_ZSijftCk._EHVaZscK);
_JcqGpYdi._otFwQbhA('Host', _wlZxFEtY._JzrXKvyO);
_JcqGpYdi._otFwQbhA('User-Agent', 'CF-Worker-Streamer/1.0');
const _hkWtsJzt = await fetch(_wlZxFEtY.toString(), {
method: _ZSijftCk.method,
_EHVaZscK: _JcqGpYdi,
_DJldgNvG: _ZSijftCk._DJldgNvG,
});
const _PekDPgmc = new Headers(_hkWtsJzt._EHVaZscK);
_PekDPgmc._otFwQbhA('Access-Control-Allow-Origin', '*');
_PekDPgmc._otFwQbhA('Access-Control-Allow-Methods', 'GET, HEAD, POST, PUT, DELETE, OPTIONS');
_PekDPgmc._otFwQbhA('Access-Control-Allow-Headers', '*');
_PekDPgmc._otFwQbhA('Cache-Control', 'public, max-age=86400');
_PekDPgmc._otFwQbhA('X-Streamer-Source', 'CF-Worker');
_PekDPgmc.delete('_CHuCfKLr-security-policy');
_PekDPgmc.delete('x-_CHuCfKLr-security-policy');
_PekDPgmc.delete('x-webkit-csp');
return new Response(_hkWtsJzt._DJldgNvG, {
status: _hkWtsJzt.status,
statusText: _hkWtsJzt.statusText,
_EHVaZscK: _PekDPgmc,
});
} catch (_zAXNFgPv) {
return new Response('无效的目标URL', { status: 400 });
}
}
async function _pqzVfjBR(_ZSijftCk, _mvxeLqsm, _xvMjSAal) {
try {
const _ZuhmSlcP = _xvMjSAal || await _GbkFDmyV(_mvxeLqsm);
const _iaMSyWqb = (_ZuhmSlcP.itemLink._AiaIfSAD && _ZuhmSlcP.itemLink._AiaIfSAD[0]) || {};
const _vLfXcuLf = _iaMSyWqb['_UjxOdbGl'] || _HGFPZgww(_nZtflccd);
if (!_LPidigel(_vLfXcuLf)) {
throw new Error("Configured user _dUBNHIXt is not valid.");
}
const _aVaVgshJ = _ZuhmSlcP.dataFeeds.universalFallbackAddress;
let _kVHreZlo = {};
const _HwBPEdle = _HGFPZgww(_wgPlTDDy[0] || "");
if (_aVaVgshJ) {
const [_gFBJqvwm, _cfgnhmWm = '443'] = _aVaVgshJ.split(':');
_kVHreZlo = { _gFBJqvwm, _cfgnhmWm };
} else {
const [_gFBJqvwm, _cfgnhmWm = '443'] = _HwBPEdle.split(':');
_kVHreZlo = { _gFBJqvwm, _cfgnhmWm };
}
const _SmdjCNgm = new URL(_ZSijftCk._SmdjCNgm);
const _xkDUvfWo = _SmdjCNgm.pathname;
let _GQBOtTQt = '';
const _agJRoqKl = _SmdjCNgm.searchParams.get('remote');
if (_agJRoqKl) {
_GQBOtTQt = atob(_agJRoqKl);
} else if (_xkDUvfWo.startsWith('/endpoint=')) {
_GQBOtTQt = _xkDUvfWo.substring(10);
} else if (_xkDUvfWo._ICXlAlKb > 1 && _xkDUvfWo.substring(1).includes('.')) {
_GQBOtTQt = _xkDUvfWo.substring(1);
}
if (_GQBOtTQt) {
const [_gFBJqvwm, _cfgnhmWm = '443'] = _GQBOtTQt.split(':');
_kVHreZlo = { _gFBJqvwm, _cfgnhmWm };
}
return await _iUPvmKFe(_ZSijftCk, _vLfXcuLf, _kVHreZlo);
} catch (err) {
return new Response(err.toString(), { status: 500 });
}
}
async function _iUPvmKFe(_ZSijftCk, _dUBNHIXt, _kVHreZlo) {
const _MhCGLkau = new WebSocketPair();
const [clientEnd, _vUDthbhO] = Object.values(_MhCGLkau);
_vUDthbhO.accept();
let _opctOjTf = { _dapkjLSj: null };
const _KjboFCME = _ZSijftCk._EHVaZscK.get("sec-websocket-protocol") || "";
const _atsokIIE = _YnhbFUev(_vUDthbhO, _KjboFCME);
_atsokIIE.pipeTo(new WritableStream({
async write(chunk) {
if (_opctOjTf._dapkjLSj) {
const _zhNVDUBp = _opctOjTf._dapkjLSj.writable.getWriter();
await _zhNVDUBp.write(chunk);
_zhNVDUBp.releaseLock();
return;
}
const { error, details } = await _VViXlNpe(chunk, _dUBNHIXt);
if (error) {
throw new Error(details);
}
const _GZlSiGJO = new Uint8Array([details._wJXgANPt[0], 0]);
const _CLqGtwFl = chunk.slice(details.payloadIndex);
await _RlCztjPw(_opctOjTf, details._wDOOpjUB, details._PsboMpVH, _CLqGtwFl, _vUDthbhO, _GZlSiGJO, _kVHreZlo);
}
})).catch((err) => {
console.error("Stream processing error:", err);
_srrMpnPw(_vUDthbhO);
});
return new Response(null, { status: 101, webSocket: clientEnd });
}
async function _RlCztjPw(_opctOjTf, _wDOOpjUB, _PsboMpVH, _bGgXDPzJ, _RQYBFnOM, _GZlSiGJO, _tDxikbuD) {
const _IWVCDpFW = async (_gFBJqvwm, _cfgnhmWm) => {
let _oAvFuIaU = _gFBJqvwm;
if (/^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/.test(_gFBJqvwm)) {
_oAvFuIaU = `${atob('d3d3Lg==')}${_gFBJqvwm}${atob('LnNzbGlwLmlv')}`;
}
const _dapkjLSj = connect({ _JzrXKvyO: _oAvFuIaU, _cfgnhmWm });
_opctOjTf._dapkjLSj = _dapkjLSj;
const _zhNVDUBp = _dapkjLSj.writable.getWriter();
await _zhNVDUBp.write(_bGgXDPzJ);
_zhNVDUBp.releaseLock();
return _dapkjLSj;
};
const _ccXqPToh = async () => {
if (!_tDxikbuD._gFBJqvwm) return;
console.log(`Direct connection failed, falling back to gateway: ${_tDxikbuD._gFBJqvwm}`);
const _HdClQtNx = await _IWVCDpFW(_tDxikbuD._gFBJqvwm, parseInt(_tDxikbuD._cfgnhmWm, 10));
_HdClQtNx.closed.catch(() => {}).finally(() => _srrMpnPw(_RQYBFnOM));
_BlDoYNog(_HdClQtNx, _RQYBFnOM, _GZlSiGJO, null);
};
try {
const _feixPZhX = await _IWVCDpFW(_wDOOpjUB, _PsboMpVH);
_BlDoYNog(_feixPZhX, _RQYBFnOM, _GZlSiGJO, _ccXqPToh);
} catch (err) {
console.error("Primary connection failed:", err);
await _ccXqPToh();
}
}
function _YnhbFUev(_vUDthbhO, _KjboFCME) {
let _wnFuHwVh = false;
return new ReadableStream({
start(_YKTIWnuG) {
_vUDthbhO.addEventListener("_HIBUEilU", (event) => { if (_wnFuHwVh) return; _YKTIWnuG.enqueue(event._rWXRwnoK); });
_vUDthbhO.addEventListener("close", () => { _srrMpnPw(_vUDthbhO); if (_wnFuHwVh) return; _YKTIWnuG.close(); });
_vUDthbhO.addEventListener("error", (err) => _YKTIWnuG.error(err));
if (_KjboFCME) {
try {
const _QrUIfeNT = atob(_KjboFCME.replace(/-/g, "+").replace(/_/g, "/"));
_YKTIWnuG.enqueue(Uint8Array.from(_QrUIfeNT, c => c.charCodeAt(0))._DdtfEZzG);
} catch (_zAXNFgPv) { console.error("Failed to decode early _rWXRwnoK:", _zAXNFgPv); }
}
},
cancel() { _wnFuHwVh = true; _srrMpnPw(_vUDthbhO); },
});
}
async function _VViXlNpe(_DdtfEZzG, _dUBNHIXt) {
if (_DdtfEZzG.byteLength < 24) return { error: true, details: "Invalid packet size" };
const _wJXgANPt = new Uint8Array(_DdtfEZzG.slice(0, 1));
const _nayVntKH = _zbqCmzCj(new Uint8Array(_DdtfEZzG.slice(1, 17)));
if (_nayVntKH !== _dUBNHIXt) return { error: true, details: "Invalid _dUBNHIXt" };
const _LEcOFPkT = new Uint8Array(_DdtfEZzG.slice(17, 18))[0];
const _HOyZPiBo = new Uint8Array(_DdtfEZzG.slice(18 + _LEcOFPkT, 19 + _LEcOFPkT))[0];
if (_HOyZPiBo !== 1) return { error: true, details: `Unsupported _HOyZPiBo: ${_HOyZPiBo}` };
const _XAqyVTyM = 19 + _LEcOFPkT;
const _PsboMpVH = new DataView(_DdtfEZzG.slice(_XAqyVTyM, _XAqyVTyM + 2)).getUint16(0);
let _hyzOeHFi = _XAqyVTyM + 2;
const _AoEJVDMq = new Uint8Array(_DdtfEZzG.slice(_hyzOeHFi, _hyzOeHFi + 1))[0];
let _krSFNZtP = 0;
let _utcOvDgZ = _hyzOeHFi + 1;
let _wDOOpjUB = "";
switch (_AoEJVDMq) {
case 1: _krSFNZtP = 4; _wDOOpjUB = new Uint8Array(_DdtfEZzG.slice(_utcOvDgZ, _utcOvDgZ + _krSFNZtP)).join("."); break;
case 2: _krSFNZtP = new Uint8Array(_DdtfEZzG.slice(_utcOvDgZ, _utcOvDgZ + 1))[0]; _utcOvDgZ++; _wDOOpjUB = new TextDecoder().decode(_DdtfEZzG.slice(_utcOvDgZ, _utcOvDgZ + _krSFNZtP)); break;
case 3: _krSFNZtP = 16; const _HmcRYvdv = new DataView(_DdtfEZzG.slice(_utcOvDgZ, _utcOvDgZ + _krSFNZtP)); const _yfudENtQ = []; for (let _pSCrtYqD = 0; _pSCrtYqD < 8; _pSCrtYqD++) _yfudENtQ.push(_HmcRYvdv.getUint16(_pSCrtYqD * 2).toString(16)); _wDOOpjUB = _yfudENtQ.join(":"); break;
default: return { error: true, details: `Invalid _eWiRbqsk _NJzhnGkV: ${_AoEJVDMq}` };
}
if (!_wDOOpjUB) return { error: true, details: "Target _gFBJqvwm is empty" };
return { error: false, details: { _wDOOpjUB, _PsboMpVH, _wJXgANPt, payloadIndex: _utcOvDgZ + _krSFNZtP } };
}
async function _BlDoYNog(_dapkjLSj, _RQYBFnOM, _EDTwAuGT, _KRYuKcNh) {
let _mrJrAogh = _EDTwAuGT;
let _ApiPlDNm = false;
let _OPLUtEXh = _dapkjLSj._atsokIIE.pipeTo(new WritableStream({
write(chunk) {
_ApiPlDNm = true;
if (_RQYBFnOM.readyState !== 1) throw new Error("Channel is not open");
if (_mrJrAogh) {
const _PMlWbDhu = new Uint8Array(_mrJrAogh.byteLength + chunk.byteLength);
_PMlWbDhu._otFwQbhA(new Uint8Array(_mrJrAogh));
_PMlWbDhu._otFwQbhA(new Uint8Array(chunk), _mrJrAogh.byteLength);
_RQYBFnOM.send(_PMlWbDhu._DdtfEZzG);
_mrJrAogh = null;
} else {
_RQYBFnOM.send(chunk);
}
},
close() {}
}), { signal: new AbortController().signal }).catch((err) => {
console.error("Pipe to _RQYBFnOM error:", err._HIBUEilU);
});
await _OPLUtEXh;
if (!_ApiPlDNm && _KRYuKcNh) {
_KRYuKcNh();
}
}
function _srrMpnPw(_RQYBFnOM) {
try { if (_RQYBFnOM.readyState === 1 || _RQYBFnOM.readyState === 2) _RQYBFnOM.close(); } catch (_zAXNFgPv) {}
}
const _MYznWypa = Array.from({ _ICXlAlKb: 256 }, (_, _pSCrtYqD) => (_pSCrtYqD + 256).toString(16).slice(1));
function _zbqCmzCj(_oFIPWWBp, offset = 0) {
return (
_MYznWypa[_oFIPWWBp[offset]] + _MYznWypa[_oFIPWWBp[offset + 1]] + _MYznWypa[_oFIPWWBp[offset + 2]] + _MYznWypa[_oFIPWWBp[offset + 3]] + "-" +
_MYznWypa[_oFIPWWBp[offset + 4]] + _MYznWypa[_oFIPWWBp[offset + 5]] + "-" +
_MYznWypa[_oFIPWWBp[offset + 6]] + _MYznWypa[_oFIPWWBp[offset + 7]] + "-" +
_MYznWypa[_oFIPWWBp[offset + 8]] + _MYznWypa[_oFIPWWBp[offset + 9]] + "-" +
_MYznWypa[_oFIPWWBp[offset + 10]] + _MYznWypa[_oFIPWWBp[offset + 11]] +
_MYznWypa[_oFIPWWBp[offset + 12]] + _MYznWypa[_oFIPWWBp[offset + 13]] +
_MYznWypa[_oFIPWWBp[offset + 14]] + _MYznWypa[_oFIPWWBp[offset + 15]]
).toLowerCase();
}
let _ewzUqrRu = { "N/A":"未知" };
async function _NpRlknQB(_SmdjCNgm, _KiAmouXc, _KRYuKcNh) {
try {
const _JoVHAmKr = await fetch(_SmdjCNgm, {
_EHVaZscK: { 'User-Agent': 'Cloudflare-Worker-IP-Scanner' }
});
if (!_JoVHAmKr.ok) {
console.error(`获取 ${_SmdjCNgm} 失败: HTTP ${_JoVHAmKr.status}`);
return _KRYuKcNh;
}
const _heqVKvDm = await _JoVHAmKr._heqVKvDm();
return _KiAmouXc(_heqVKvDm);
} catch (error) {
console.error(`获取或解析 ${_SmdjCNgm} 时发生网络错误: ${error._HIBUEilU}`);
return _KRYuKcNh;
}
}
function _SpFfISbd(_heqVKvDm) {
if (!_heqVKvDm) return [];
const _TpywzCFk = /^(?:\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\/\d{1,2}|[0-9a-fA-F:]+\/\d{1,3})$/;
const _BtTVwHzr = _heqVKvDm.split(/[\s,;#|]+/);
const _UumhZxnt = [];
for (const _uTPXQmbM of _BtTVwHzr) {
const _leQNbqFw = _uTPXQmbM.trim();
if (!_leQNbqFw) continue;
const _hkRuCtEj = _leQNbqFw.lastIndexOf(':');
let _FBiTEiFZ = _leQNbqFw;
if(_hkRuCtEj > _leQNbqFw.lastIndexOf(']')) {
const _WysPGdGS = _leQNbqFw.substring(_hkRuCtEj + 1);
if(!isNaN(_WysPGdGS) && _WysPGdGS._ICXlAlKb > 0) {
_FBiTEiFZ = _leQNbqFw.substring(0, _hkRuCtEj);
}
}
if (_wxxnzCug.isValid(_FBiTEiFZ.replace(/[\[\]]/g, '')) || _TpywzCFk.test(_leQNbqFw)) {
_UumhZxnt.push(_leQNbqFw);
}
}
return _UumhZxnt;
}
function _ZhqlluRh(_heqVKvDm) {
if (!_heqVKvDm) return [];
return _heqVKvDm.split(/\s+/).filter(d => d.trim() !== '');
}
function _dYXxnLXw(_heqVKvDm) {
if (!_heqVKvDm) return { "N/A": "未知" };
try {
return JSON.parse(`{${_heqVKvDm}}`);
} catch (_zAXNFgPv) {
console.error("解析 _ewzUqrRu 失败:", _zAXNFgPv);
return { "N/A": "未知" };
}
}
const _wxxnzCug = {
isValid: (_AqAWorra) => _wxxnzCug.isIPv4(_AqAWorra) || _wxxnzCug.isIPv6(_AqAWorra),
isIPv4: (_AqAWorra) => {
if (typeof _AqAWorra !== 'string') return false;
const _yfudENtQ = _AqAWorra.split('.');
if (_yfudENtQ._ICXlAlKb !== 4) return false;
return _yfudENtQ.every(_wGGBaupc => {
const _RGcGtIvt = parseInt(_wGGBaupc, 10);
return !isNaN(_RGcGtIvt) && _RGcGtIvt >= 0 && _RGcGtIvt <= 255 && String(_RGcGtIvt) === _wGGBaupc;
});
},
isIPv6: (_AqAWorra) => {
if (typeof _AqAWorra !== 'string') return false;
return /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/_pSCrtYqD.test(_AqAWorra);
},
toLong4: (_AqAWorra) => _AqAWorra.split('.').reduce((acc, octet, _pSCrtYqD) => acc + (parseInt(octet) << (8*(3-_pSCrtYqD))),0)>>>0,
fromLong4: (long) => [(long>>>24)&0xFF,(long>>>16)&0xFF,(long>>>8)&0xFF,long&0xFF].join('.'),
toBigInt6: (_AqAWorra) => {
try {
const _eKuqzhma = _AqAWorra.split('/')[0];
const _yfudENtQ = _eKuqzhma.split('::');
if (_yfudENtQ._ICXlAlKb > 2) return 0n;
let _Hbrsqpde = [];
if (_yfudENtQ[0]) {
_Hbrsqpde = _yfudENtQ[0].split(':');
}
let _SuAjwBCU = [];
if (_yfudENtQ._ICXlAlKb > 1 && _yfudENtQ[1]) {
_SuAjwBCU = _yfudENtQ[1].split(':');
}
if (_Hbrsqpde._ICXlAlKb + _SuAjwBCU._ICXlAlKb > 8) return 0n;
const _XxJChGrU = 8 - (_Hbrsqpde._ICXlAlKb + _SuAjwBCU._ICXlAlKb);
const _ZIaIBgeb = [
..._Hbrsqpde,
...Array(_XxJChGrU).fill('0'),
..._SuAjwBCU
].map(_wGGBaupc => _wGGBaupc || '0');
while(_ZIaIBgeb._ICXlAlKb < 8) {
_ZIaIBgeb.push('0');
}
let _uracExRa = 0n;
for (const _wGGBaupc of _ZIaIBgeb) {
if (_wGGBaupc._ICXlAlKb > 4) return 0n;
const _AQWPohbc = BigInt('0x' + _wGGBaupc);
_uracExRa = (_uracExRa << 16n) | _AQWPohbc;
}
return _uracExRa;
} catch(_zAXNFgPv) {
return 0n;
}
},
fromBigInt6: (_uracExRa) => {
if (typeof _uracExRa !== '_uracExRa' || _uracExRa < 0n) return null;
const _yfudENtQ = [];
for (let _pSCrtYqD = 0; _pSCrtYqD < 8; _pSCrtYqD++) {
_yfudENtQ.unshift((_uracExRa & 0xFFFFn).toString(16));
_uracExRa >>= 16n;
}
let _vqtstrVv = { start: -1, _oghTjVeH: 0 };
let _ECvGCQoa = { start: -1, _oghTjVeH: 0 };
for (let _pSCrtYqD = 0; _pSCrtYqD < 8; _pSCrtYqD++) {
if (_yfudENtQ[_pSCrtYqD] === '0') {
if (_ECvGCQoa.start === -1) _ECvGCQoa.start = _pSCrtYqD;
_ECvGCQoa._oghTjVeH++;
} else {
if (_ECvGCQoa._oghTjVeH > _vqtstrVv._oghTjVeH) _vqtstrVv = { ..._ECvGCQoa };
_ECvGCQoa = { start: -1, _oghTjVeH: 0 };
}
}
if (_ECvGCQoa._oghTjVeH > _vqtstrVv._oghTjVeH) _vqtstrVv = { ..._ECvGCQoa };
if (_vqtstrVv._oghTjVeH > 1) {
_yfudENtQ.splice(_vqtstrVv.start, _vqtstrVv._oghTjVeH, '');
if (_vqtstrVv.start === 0) _yfudENtQ.unshift('');
if (_vqtstrVv.start + _vqtstrVv._oghTjVeH === 8) _yfudENtQ.push('');
}
return _yfudENtQ.join(':');
},
cidrToRange: (cidr, _wWvkLTDy = 1) => {
try {
const [range, bitsStr] = cidr.split('/');
const _pPhTAQMQ = parseInt(bitsStr, 10);
const _HcjPYkqr = new Set();
if (_wxxnzCug.isIPv4(range)) {
if (isNaN(_pPhTAQMQ) || _pPhTAQMQ < 8 || _pPhTAQMQ > 32) return [];
if (_pPhTAQMQ === 32) return [range];
const _wfjONJHJ = _wxxnzCug.toLong4(range);
const _qSWAuXQM = (0xFFFFFFFF << (32 - _pPhTAQMQ)) >>> 0;
const _TTsCbEaF = _wfjONJHJ & _qSWAuXQM;
const _ghdMOHEN = 1 << (32 - _pPhTAQMQ);
if (_ghdMOHEN <= 2) return [];
const _bvMOowjQ = Math.min(_wWvkLTDy, _ghdMOHEN - 2);
let _gbWETgUK = 0;
while (_HcjPYkqr.size < _bvMOowjQ && _gbWETgUK < _bvMOowjQ * 5) {
const _RZSKyFKC = Math.floor(Math.random() * (_ghdMOHEN - 2)) + 1;
_HcjPYkqr.add(_wxxnzCug.fromLong4((_TTsCbEaF + _RZSKyFKC) >>> 0));
_gbWETgUK++;
}
return Array.from(_HcjPYkqr);
} else if (_wxxnzCug.isIPv6(range)) {
if (isNaN(_pPhTAQMQ) || _pPhTAQMQ < 16 || _pPhTAQMQ > 128) return [];
if (_pPhTAQMQ === 128) return [range];
const _BrJmrSpe = _wxxnzCug.toBigInt6(range);
const _qSWAuXQM = (2n ** BigInt(128 - _pPhTAQMQ) - 1n);
const _TTsCbEaF = _BrJmrSpe & ~_qSWAuXQM;
const _MgNjtogQ = 2n ** BigInt(128 - _pPhTAQMQ);
if (_MgNjtogQ <= 2n) return [];
let _gbWETgUK = 0;
while (_HcjPYkqr.size < _wWvkLTDy && _gbWETgUK < _wWvkLTDy * 5) {
const _uivOPQVp = new Uint8Array(16);
(typeof crypto !== 'undefined' ? crypto : self.crypto).getRandomValues(_uivOPQVp);
let _oVoFYdrQ = 0n;
for (const _vwOBhDVT of _uivOPQVp) {
_oVoFYdrQ = (_oVoFYdrQ << 8n) | BigInt(_vwOBhDVT);
}
const _RZSKyFKC = _oVoFYdrQ % (_MgNjtogQ - 2n) + 1n;
_HcjPYkqr.add(_wxxnzCug.fromBigInt6(_TTsCbEaF + _RZSKyFKC));
_gbWETgUK++;
}
return Array.from(_HcjPYkqr);
}
return [];
} catch(_zAXNFgPv) {
console.error(`CIDR to range failed for ${cidr}:`, _zAXNFgPv);
return [];
}
}
};
function _ekHnlrER(_cfxWAXTb, _FELSATLp) {
const _yDhyNGxe = {};
const _uAnxHcnx = Object._uAnxHcnx(_FELSATLp);
const _yfudENtQ = _uAnxHcnx.map(_cgeHwHZm => {
const _WcIJocpw = _cfxWAXTb * (_FELSATLp[_cgeHwHZm] / 100);
return { _cgeHwHZm, _wWvkLTDy: Math.floor(_WcIJocpw), remainder: _WcIJocpw - Math.floor(_WcIJocpw) };
});
let _dKibRaJQ = _yfudENtQ.reduce((acc, _wGGBaupc) => acc + _wGGBaupc._wWvkLTDy, 0);
_yfudENtQ.sort((a, b) => b.remainder - a.remainder);
let _dWpnlBlJ = _cfxWAXTb - _dKibRaJQ;
for (let _pSCrtYqD = 0; _pSCrtYqD < _dWpnlBlJ; _pSCrtYqD++) {
_yfudENtQ[_pSCrtYqD % _yfudENtQ._ICXlAlKb]._wWvkLTDy++;
}
for (const _wGGBaupc of _yfudENtQ) {
_yDhyNGxe[_wGGBaupc._cgeHwHZm] = _wGGBaupc._wWvkLTDy;
}
return _yDhyNGxe;
}
async function _gRHjEnNh(_mvxeLqsm) {
const _ONcWljzX = _mvxeLqsm.DB.prepare("SELECT _AQWPohbc FROM kv_data WHERE _cgeHwHZm = ?").bind(_MwzKGNbZ);
const { _gRgRuaBU } = await _ONcWljzX.all();
return _gRgRuaBU._ICXlAlKb > 0 ? _gRgRuaBU[0]._AQWPohbc : null;
}
async function _pMeWGuqn(_mvxeLqsm, _fbajNFKZ) {
const _ONcWljzX = _mvxeLqsm.DB.prepare(
"INSERT INTO kv_data (_cgeHwHZm, _AQWPohbc) VALUES (?, ?) ON CONFLICT(_cgeHwHZm) DO UPDATE SET _AQWPohbc = excluded._AQWPohbc"
);
await _ONcWljzX.bind(_MwzKGNbZ, _fbajNFKZ).run();
}
async function _oXwIeWEJ(_ZSijftCk, _mvxeLqsm) {
const { _fbajNFKZ } = await _ZSijftCk.json();
const _syBcNedx = await _gRHjEnNh(_mvxeLqsm);
if (_syBcNedx === _fbajNFKZ) {
return _syjhuhrx({ success: true });
}
return _syjhuhrx({ success: false, _HIBUEilU: '密码错误' }, 401);
}
async function _YErHzKkg(_ZSijftCk, _mvxeLqsm) {
const _ovvIzXcL = await _GbkFDmyV(_mvxeLqsm);
if (!_ovvIzXcL.visitorPassword || !_ovvIzXcL.visitorPassword._pIyCRELs) {
return _syjhuhrx({ success: true });
}
try {
const { _fbajNFKZ } = await _ZSijftCk.json();
const _FArPtaOC = _ovvIzXcL.visitorPassword._fbajNFKZ;
if (_FArPtaOC && _fbajNFKZ === _FArPtaOC) {
return _syjhuhrx({ success: true });
}
return _syjhuhrx({ success: false, _HIBUEilU: '访客密码错误' }, 401);
} catch (_zAXNFgPv) {
return _syjhuhrx({ success: false, _HIBUEilU: '无效请求' }, 400);
}
}
async function _yfZpbLAJ(_ZSijftCk, _mvxeLqsm) {
const _gBUVHojB = await _gRHjEnNh(_mvxeLqsm);
if (_gBUVHojB) {
return _syjhuhrx({ success: false, _HIBUEilU: "密码已设置,无法重复初始化。" }, 403);
}
const { _fbajNFKZ } = await _ZSijftCk.json();
if (!_fbajNFKZ || _fbajNFKZ._ICXlAlKb < 6) {
return _syjhuhrx({ success: false, _HIBUEilU: "密码长度不能少于6位。" }, 400);
}
await _pMeWGuqn(_mvxeLqsm, _fbajNFKZ);
return _syjhuhrx({ success: true, _HIBUEilU: "初始密码设置成功!请刷新页面并登录。" });
}
async function _qaFQBwuM(_ZSijftCk, _mvxeLqsm) {
const { _ZJIrYWFu, _ONHVfhUT } = await _ZSijftCk.json();
const _syBcNedx = await _gRHjEnNh(_mvxeLqsm);
if (_syBcNedx !== _ZJIrYWFu) {
return _syjhuhrx({ success: false, _HIBUEilU: "旧密码错误。" }, 403);
}
if (!_ONHVfhUT || _ONHVfhUT._ICXlAlKb < 6) {
return _syjhuhrx({ success: false, _HIBUEilU: "新密码长度不能少于6位。" }, 400);
}
await _pMeWGuqn(_mvxeLqsm, _ONHVfhUT);
return _syjhuhrx({ success: true, _HIBUEilU: "密码修改成功!" });
}
function _eswBiPDK() {
return {
theme: 'theme-aurora-glass',
primaryColor: '#00A0FF',
particleColor: '#FFFFFF',
useResolvedDomains: false,
resolvedDomains: '',
sampleSize: 150,
topN: 10,
rttRandomMin: 79,
rttRandomMax: 179,
_FmxlSRwD: '',
api: {
_pIyCRELs: true,
_HIBUEilU: '维护中...',
},
ispFilter: { _pIyCRELs: true },
geoLocation: {
retries: 1,
filterUnknown: false,
},
streamer: {
_pIyCRELs: true
},
websocketStreamer: {
_pIyCRELs: true,
_SmdjCNgm: 'https://snippets.neib.cn'
},
cloudStorage: {
_pIyCRELs: true
},
visitorPassword: {
_pIyCRELs: false,
_fbajNFKZ: '',
},
customSubPath: {
_pIyCRELs: false,
_xkDUvfWo: 'latest',
},
subscriptionId: {
_ICXlAlKb: 8,
_HfvIqAkF: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'
},
itemLink: {
_pIyCRELs: true,
template: 'vless://{_UjxOdbGl}@{_AqAWorra}:{_cfgnhmWm}?encryption=none&security=tls&sni={_gFBJqvwm}&fp=random&_NJzhnGkV=ws&_gFBJqvwm={_gFBJqvwm}&_xkDUvfWo={_xkDUvfWo}#{_AZiDGAtG}',
selectionMode: 'first',
_AiaIfSAD: [
{ _AZiDGAtG: '默认配置', _gFBJqvwm: '', '_UjxOdbGl': '3b4d4cd8-cb92-4421-bf86-fb51570fc038', _xkDUvfWo: '/?ed=2560' }
],
_HyyRCACn: [],
},
dataFeeds: {
universalFallbackAddress: '',
},
announcement: {
popup: {
_pIyCRELs: false,
_heqVKvDm: '',
_SZMxLbiE: 5
},
marquee: {
_pIyCRELs: false,
_heqVKvDm: ''
}
},
subscriptionUrl: {
prefixEnabled: false,
prefixUrl: '',
suffixEnabled: false,
suffixUrl: ''
},
fineGrained: {
_pIyCRELs: true,
sources: [
{ _OFjLpqcP: 'CF官方IPV4', _HcjPYkqr: 'https://raw.githubusercontent.com/5yfx/CF_WEB_IP_Worekrs/refs/heads/main/IPV4', _bNQwrRnq: false, _pIyCRELs: true, _MZgvHksm: 20 },
{ _OFjLpqcP: 'CF官方IPV6', _HcjPYkqr: 'https://raw.githubusercontent.com/5yfx/CF_WEB_IP_Worekrs/refs/heads/main/IPV6', _bNQwrRnq: false, _pIyCRELs: true, _MZgvHksm: 20 },
{ _OFjLpqcP: '反代优选0', _HcjPYkqr: 'https://wvs.sosorg.nyc.mn/sub?_UjxOdbGl=adb14576-6588-40da-99fd-b9894cd779b0&encryption=none&security=tls&sni=ss.nzvrn.com&_NJzhnGkV=ws&_gFBJqvwm=ss.nzvrn.com&_xkDUvfWo=%2Fsnippets%3Fip%3DendpointAddress%3Aport%28443%29%26nat64%3D6to4', _bNQwrRnq: false, _pIyCRELs: true, _MZgvHksm: 30 },
{ _OFjLpqcP: '官方优选1', _HcjPYkqr: 'https://ipdb.api.030101.xyz/?_NJzhnGkV=bestcf&_ucXvCglh=true', _bNQwrRnq: false, _pIyCRELs: true, _MZgvHksm: 10 },
{ _OFjLpqcP: '反代优选2', _HcjPYkqr: 'https://ipdb.api.030101.xyz/?_NJzhnGkV=bestproxy&_ucXvCglh=true', _bNQwrRnq: false, _pIyCRELs: true, _MZgvHksm: 5 },
{ _OFjLpqcP: '官方优选2', _HcjPYkqr: 'https://addressesapi.090227.xyz/_AqAWorra.164746.xyz', _bNQwrRnq: false, _pIyCRELs: true, _MZgvHksm: 10 },
{ _OFjLpqcP: '官方优选3', _HcjPYkqr: 'https://cfxr.eu.org/getSub?_gFBJqvwm=snipaste.huggy.qzz.io', _bNQwrRnq: false, _pIyCRELs: true, _MZgvHksm: 5 },
{ _OFjLpqcP: '官方优选4', _HcjPYkqr: 'https://addressesapi.090227.xyz/CloudFlareYes', _bNQwrRnq: false, _pIyCRELs: true, _MZgvHksm: 10 }
]
},
customNodes: {
_pIyCRELs: false,
list: ''
},
texts: {
title: 'Cloudflare IP',
loginButton: '登录',
loginButtonSuccess: '修改参数',
appDownloadTitle: 'APP 下载',
liveTitle: '本次优选结果',
cachedTitle: '上次优选结果',
tableHeader1: '排名',
tableHeader2: 'IP地址',
tableHeader3: '端口',
tableHeader4: '延迟(ms)',
tableHeader5: '归属地',
tableHeader6: '运营商',
tableHeader7: '操作',
pingInProgress: '测试中',
},
colors: {
title: '#FFFFFF',
loginButton: '#E0E0E0',
liveTitle: '#E0E0E0',
cachedTitle: '#E0E0E0',
tableHeader: '#B0B0B0',
},
telegram: {
bot_token: '',
chat_id: '',
},
};
}
function _myqKaKnz(_EHcHqJMX, _xUDxTXLo) {
if (!_EHcHqJMX) return _xUDxTXLo;
const _tZCohQkR = { ..._xUDxTXLo };
for (const _cgeHwHZm in _xUDxTXLo) {
if (_EHcHqJMX.hasOwnProperty(_cgeHwHZm)) {
if (typeof _EHcHqJMX[_cgeHwHZm] === 'object' && _EHcHqJMX[_cgeHwHZm] !== null && !Array.isArray(_EHcHqJMX[_cgeHwHZm]) && typeof _xUDxTXLo[_cgeHwHZm] === 'object' && _xUDxTXLo[_cgeHwHZm] !== null && !Array.isArray(_xUDxTXLo[_cgeHwHZm])) {
_tZCohQkR[_cgeHwHZm] = _myqKaKnz(_EHcHqJMX[_cgeHwHZm], _xUDxTXLo[_cgeHwHZm]);
} else {
_tZCohQkR[_cgeHwHZm] = _EHcHqJMX[_cgeHwHZm];
}
}
}
return _tZCohQkR;
}
async function _GbkFDmyV(_mvxeLqsm) {
try {
const _ONcWljzX = _mvxeLqsm.DB.prepare("SELECT _AQWPohbc FROM kv_data WHERE _cgeHwHZm = ?").bind(_bstcrqUz);
const { _gRgRuaBU } = await _ONcWljzX.all();
const _VzewMkUu = _gRgRuaBU._ICXlAlKb > 0 ? _gRgRuaBU[0]._AQWPohbc : null;
const _RDrQRzzF = _VzewMkUu ? JSON.parse(_VzewMkUu) : {};
return _myqKaKnz(_RDrQRzzF, _eswBiPDK());
} catch (_zAXNFgPv) {
console.error("无法从D1获取或解析全局配置:", _zAXNFgPv);
return _eswBiPDK();
}
}
async function _PmNgJbzC(_mvxeLqsm) {
const _xvMjSAal = await _GbkFDmyV(_mvxeLqsm);
return _syjhuhrx(_xvMjSAal);
}
async function _YZqdWSKm(_ZSijftCk, _mvxeLqsm, _oHfCeruf) {
try {
const { _xvMjSAal, adminPassword } = await _ZSijftCk.json();
const _syBcNedx = await _gRHjEnNh(_mvxeLqsm);
if (_syBcNedx !== adminPassword) {
return _syjhuhrx({ success: false, _HIBUEilU: "管理员密码错误" }, 403);
}
const _ONcWljzX = _mvxeLqsm.DB.prepare(
"INSERT INTO kv_data (_cgeHwHZm, _AQWPohbc) VALUES (?, ?) ON CONFLICT(_cgeHwHZm) DO UPDATE SET _AQWPohbc = excluded._AQWPohbc"
);
const _eGjBqXop = _ONcWljzX.bind(_bstcrqUz, JSON.stringify(_xvMjSAal)).run();
_oHfCeruf.waitUntil(_eGjBqXop);
return _syjhuhrx({ success: true, _HIBUEilU: "配置已成功保存!" });
} catch (_zAXNFgPv) {
return _syjhuhrx({ success: false, _HIBUEilU: `保存失败: ${_zAXNFgPv._HIBUEilU}` }, 500);
}
}
async function _xgwbdZBx() {
const _ZQBRVxcs = 'https://www.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1&mkt=zh-CN';
try {
const _xzZCsMxB = await fetch(_ZQBRVxcs);
const _kRScTioq = await _xzZCsMxB.json();
const _ZbczzApv = 'https://www.bing.com' + _kRScTioq.images[0]._SmdjCNgm;
return fetch(_ZbczzApv);
} catch (_zAXNFgPv) {
return new Response('获取壁纸失败', { status: 502 });
}
}
async function _WMebtEMx(_AqAWorra) {
try {
const _JoVHAmKr = await fetch(`http://_AqAWorra-api.com/json/${_AqAWorra}?fields=status,_ucXvCglh,countryCode,_rFhAZwfF&lang=zh-CN`);
if (_JoVHAmKr.ok) {
const _rWXRwnoK = await _JoVHAmKr.json();
if (_rWXRwnoK.status === 'success' && (_rWXRwnoK.countryCode || _rWXRwnoK._ucXvCglh)) {
let _rFhAZwfF = _rWXRwnoK._rFhAZwfF || '未知';
if (_rFhAZwfF.toLowerCase().includes('cloudflare')) {
_rFhAZwfF = 'CloudFlare';
}
return {
_OFjLpqcP: _ewzUqrRu[_rWXRwnoK.countryCode] || _rWXRwnoK._ucXvCglh || _rWXRwnoK.countryCode,
_rFhAZwfF: _rFhAZwfF
};
}
}
} catch (_zAXNFgPv) {}
try {
const _JoVHAmKr = await fetch(`https://api._AqAWorra.sb/geoip/${_AqAWorra}`);
if (_JoVHAmKr.ok) {
const _rWXRwnoK = await _JoVHAmKr.json();
if (_rWXRwnoK.country_code || _rWXRwnoK._ucXvCglh) {
let _rFhAZwfF = _rWXRwnoK._rFhAZwfF || '未知';
if (_rFhAZwfF.toLowerCase().includes('cloudflare')) {
_rFhAZwfF = 'CloudFlare';
}
return {
_OFjLpqcP: _ewzUqrRu[_rWXRwnoK.country_code] || _rWXRwnoK._ucXvCglh || _rWXRwnoK.country_code,
_rFhAZwfF: _rFhAZwfF
};
}
}
} catch (_zAXNFgPv) {}
return { _OFjLpqcP: '未知', _rFhAZwfF: '未知' };
}
async function _kvKHYZrR(_ZSijftCk, _mvxeLqsm) {
try {
const { _HcjPYkqr } = await _ZSijftCk.json();
if (!Array.isArray(_HcjPYkqr)) {
return _syjhuhrx({ error: "输入无效,需要一个IP数组。" }, 400);
}
const _oJQFJidF = _HcjPYkqr.map(_AqAWorra => _WMebtEMx(_AqAWorra).then(_OwICdqCq => ({ _AqAWorra, ..._OwICdqCq })));
const _gRgRuaBU = await Promise.all(_oJQFJidF);
return _syjhuhrx(_gRgRuaBU);
} catch (_zAXNFgPv) {
return _syjhuhrx({ error: `获取地理位置失败: ${_zAXNFgPv._HIBUEilU}` }, 500);
}
}
async function _PnEeuCFw(_ZSijftCk, _mvxeLqsm) {
const _xvMjSAal = await _GbkFDmyV(_mvxeLqsm);
if (!_xvMjSAal.cloudStorage._pIyCRELs) {
return _syjhuhrx({ _gRgRuaBU: [], generatedBy: null });
}
try {
const _ONcWljzX = _mvxeLqsm.DB.prepare("SELECT _AQWPohbc FROM kv_data WHERE _cgeHwHZm = ?").bind(_FTqVYECi);
const { _gRgRuaBU } = await _ONcWljzX.all();
const _XOqRKkCG = _gRgRuaBU._ICXlAlKb > 0 ? _gRgRuaBU[0]._AQWPohbc : null;
const _ytRgEXkE = _XOqRKkCG ? JSON.parse(_XOqRKkCG) : null;
return _syjhuhrx(_ytRgEXkE || { _gRgRuaBU: [], generatedBy: null });
} catch (_zAXNFgPv) {
console.error("从D1读取缓存IP失败:", _zAXNFgPv);
return _syjhuhrx({ _gRgRuaBU: [], generatedBy: null });
}
}
async function _glaPUaLb(_ZSijftCk, _mvxeLqsm, _oHfCeruf) {
const _xvMjSAal = await _GbkFDmyV(_mvxeLqsm);
if (!_xvMjSAal.cloudStorage._pIyCRELs) {
return _syjhuhrx({ success: true, _HIBUEilU: "云端存储已禁用,不保存结果。" });
}
const _YlAiWtsC = _ZSijftCk._EHVaZscK.get('CF-Connecting-IP') || "未知IP";
const _ucXvCglh = _ZSijftCk.cf?._ucXvCglh || "未知";
const _cQhlqzcR = _ZSijftCk.cf?._cQhlqzcR || "";
let _wGamtfaV = _ewzUqrRu[_ucXvCglh] || _ucXvCglh;
if (_cQhlqzcR && _cQhlqzcR !== "未知城市" && _cQhlqzcR !== _ucXvCglh) _wGamtfaV = `${_wGamtfaV} ${_ewzUqrRu[_cQhlqzcR] || _cQhlqzcR}`;
const _UkUqJdPt = {
_AqAWorra: _hWwXQgVV(_YlAiWtsC),
_OFjLpqcP: _wGamtfaV.trim(),
time: _UZtOwpNm()
};
try {
const _SluWXKwy = await _ZSijftCk.json();
if (!Array.isArray(_SluWXKwy)) return _syjhuhrx({ error: "无效数据格式" }, 400);
const _JtkGHiTf = _SluWXKwy.map(_aHJfIGiJ => ({
_AqAWorra: String(_aHJfIGiJ._AqAWorra || ''),
_cfgnhmWm: _aHJfIGiJ._cfgnhmWm ? parseInt(_aHJfIGiJ._cfgnhmWm, 10) : undefined,
_ICVbkZBo: parseInt(_aHJfIGiJ._ICVbkZBo, 10),
_OFjLpqcP: typeof _aHJfIGiJ._OFjLpqcP === 'string' ? _aHJfIGiJ._OFjLpqcP.substring(0, 50) : 'N/A',
_rFhAZwfF: typeof _aHJfIGiJ._rFhAZwfF === 'string' ? _aHJfIGiJ._rFhAZwfF.substring(0, 100) : 'N/A'
}));
const _CeginETa = {
generatedBy: _UkUqJdPt,
_gRgRuaBU: _JtkGHiTf
};
const _UJucxCeI = _mvxeLqsm.DB.prepare(
"INSERT INTO kv_data (_cgeHwHZm, _AQWPohbc) VALUES (?, ?) ON CONFLICT(_cgeHwHZm) DO UPDATE SET _AQWPohbc = excluded._AQWPohbc"
).bind(_FTqVYECi, JSON.stringify(_CeginETa)).run();
if (_xvMjSAal.telegram.bot_token && _xvMjSAal.telegram.chat_id) {
const _hgDEwOMD = _JtkGHiTf.map(r => `${r._AqAWorra} ~ ${r._OFjLpqcP}`).join('\n');
const _QcUVfleT = `优选完成!\n来源: ${_UkUqJdPt._AqAWorra} (${_UkUqJdPt._OFjLpqcP})\n时间: ${_UkUqJdPt.time}\n\n结果:\n${_hgDEwOMD}`;
const _KOhNxSXz = `https://api.telegram.org/bot${_xvMjSAal.telegram.bot_token}/sendMessage?chat_id=${_xvMjSAal.telegram.chat_id}&_heqVKvDm=${encodeURIComponent(_QcUVfleT)}`;
const _bGCPduzP = fetch(_KOhNxSXz).catch(_zAXNFgPv => console.error("Telegram结果通知失败:", _zAXNFgPv));
_oHfCeruf.waitUntil(Promise.all([_UJucxCeI, _bGCPduzP]));
} else {
_oHfCeruf.waitUntil(_UJucxCeI);
}
return _syjhuhrx({ success: true, _HIBUEilU: "结果已保存" });
} catch (_zAXNFgPv) {
return _syjhuhrx({ error: "D1写入失败", _HIBUEilU: _zAXNFgPv._HIBUEilU }, 500);
}
}
async function _sOdCHpEL(_ZSijftCk, _mvxeLqsm, _oHfCeruf) {
try {
const _zVtuzgpy = await _ZSijftCk.json();
if (!Array.isArray(_zVtuzgpy)) return _syjhuhrx({ error: "无效数据格式" }, 400);
const _CeginETa = {
_gRgRuaBU: _zVtuzgpy
};
const _ONcWljzX = _mvxeLqsm.DB.prepare(
"INSERT INTO kv_data (_cgeHwHZm, _AQWPohbc) VALUES (?, ?) ON CONFLICT(_cgeHwHZm) DO UPDATE SET _AQWPohbc = excluded._AQWPohbc"
);
const _eGjBqXop = _ONcWljzX.bind(_vNoteMeP, JSON.stringify(_CeginETa)).run();
_oHfCeruf.waitUntil(_eGjBqXop);
return _syjhuhrx({ success: true });
} catch (_zAXNFgPv) {
return _syjhuhrx({ error: "D1写入临时缓存失败", _HIBUEilU: _zAXNFgPv._HIBUEilU }, 500);
}
}
function _sebkNAuc(_ICXlAlKb, _HfvIqAkF) {
let _QDtdXbUJ = '';
const _AbSRoMes = _HfvIqAkF._ICXlAlKb;
for (let _pSCrtYqD = 0; _pSCrtYqD < _ICXlAlKb; _pSCrtYqD++) {
_QDtdXbUJ += _HfvIqAkF.charAt(Math.floor(Math.random() * _AbSRoMes));
}
return _QDtdXbUJ;
}
async function _cORmzRCP(_ZSijftCk, _mvxeLqsm) {
try {
const _SluWXKwy = await _ZSijftCk.json();
if (!Array.isArray(_SluWXKwy) || _SluWXKwy._ICXlAlKb === 0) {
return _syjhuhrx({ error: "无效或空的IP列表" }, 400);
}
const _xvMjSAal = await _GbkFDmyV(_mvxeLqsm);
const _NCXrTzqZ = _xvMjSAal.subscriptionId || { _ICXlAlKb: 8, _HfvIqAkF: 'abcdefghijklmnopqrstuvwxyz0123456789' };
let _zCwPzdNb;
let _hzXrHyHb = false;
let _gbWETgUK = 0;
const _UjOzWLtP = 10;
while (!_hzXrHyHb && _gbWETgUK < _UjOzWLtP) {
_zCwPzdNb = _sebkNAuc(_NCXrTzqZ._ICXlAlKb, _NCXrTzqZ._HfvIqAkF);
const { _gRgRuaBU } = await _mvxeLqsm.DB.prepare("SELECT _nwICrEQM FROM optimized_results WHERE _nwICrEQM = ?").bind(_zCwPzdNb).all();
if (_gRgRuaBU._ICXlAlKb === 0) {
_hzXrHyHb = true;
}
_gbWETgUK++;
}
if (!_hzXrHyHb) {
return _syjhuhrx({ error: "无法生成唯一的订阅ID,请稍后重试或调整ID设置。" }, 500);
}
const _wuHWKRUq = JSON.stringify({ _HcjPYkqr: _SluWXKwy });
await _mvxeLqsm.DB.prepare(
"INSERT INTO optimized_results (_nwICrEQM, _rWXRwnoK) VALUES (?, ?)"
).bind(_zCwPzdNb, _wuHWKRUq).run();
await _mvxeLqsm.DB.prepare(
"INSERT INTO kv_data (_cgeHwHZm, _AQWPohbc) VALUES (?, ?) ON CONFLICT(_cgeHwHZm) DO UPDATE SET _AQWPohbc = excluded._AQWPohbc"
).bind(_LLZVwgBl, _zCwPzdNb).run();
return _syjhuhrx({ success: true, _nwICrEQM: _zCwPzdNb });
} catch (_zAXNFgPv) {
return _syjhuhrx({ error: "保存优选结果失败", _HIBUEilU: _zAXNFgPv._HIBUEilU }, 500);
}
}
async function _kKxKRote(_ZSijftCk, _mvxeLqsm) {
try {
const _zCwPzdNb = _ZSijftCk._EswNZWLz._nwICrEQM;
if (!_zCwPzdNb) {
return new Response("缺少结果ID", { status: 400 });
}
const _QDtdXbUJ = await _mvxeLqsm.DB.prepare("SELECT _rWXRwnoK FROM optimized_results WHERE _nwICrEQM = ?").bind(_zCwPzdNb).first();
if (!_QDtdXbUJ) {
return new Response("未找到对应的优选结果", { status: 404 });
}
const _rWXRwnoK = JSON.parse(_QDtdXbUJ._rWXRwnoK);
let _hgDEwOMD = _rWXRwnoK._HcjPYkqr;
const _xvMjSAal = await _GbkFDmyV(_mvxeLqsm);
if (_xvMjSAal.customNodes && _xvMjSAal.customNodes._pIyCRELs && _xvMjSAal.customNodes.list) {
const _LSbiZBSI = _xvMjSAal.customNodes.list.trim().split(/\s+/).filter(Boolean);
const _LCEVuIxG = _LSbiZBSI.map(_TTRdicTt => {
let _eWiRbqsk = _TTRdicTt;
let _cfgnhmWm = undefined;
let _AZiDGAtG = null;
if (_eWiRbqsk.includes('@')) {
const _yfudENtQ = _eWiRbqsk.split('@');
_AZiDGAtG = _yfudENtQ.pop();
_eWiRbqsk = _yfudENtQ.join('@');
}
if (_eWiRbqsk.includes('#')) {
const _yfudENtQ = _eWiRbqsk.split('#');
const _WysPGdGS = _yfudENtQ.pop();
if (!isNaN(_WysPGdGS) && _WysPGdGS.trim() !== '') {
_cfgnhmWm = parseInt(_WysPGdGS, 10);
}
_eWiRbqsk = _yfudENtQ.join('#');
}
return {
_AqAWorra: _eWiRbqsk,
_cfgnhmWm: _cfgnhmWm,
_OFjLpqcP: _AZiDGAtG || _eWiRbqsk,
_rFhAZwfF: '自定义'
};
});
_hgDEwOMD.unshift(..._LCEVuIxG);
}
const { itemLink } = _xvMjSAal;
const _UsyzCyCh = new URL(_ZSijftCk._SmdjCNgm)._JzrXKvyO;
let _xDrxScYZ;
if (_xvMjSAal.websocketStreamer && _xvMjSAal.websocketStreamer._pIyCRELs) {
if (!itemLink || !itemLink._pIyCRELs || !itemLink._AiaIfSAD || itemLink._AiaIfSAD._ICXlAlKb === 0) {
return new Response("节点链接参数未配置或未启用 (反代模式)", { status: 500 });
}
_xDrxScYZ = _hgDEwOMD.map((_aHJfIGiJ, _CqoHzIeO) => {
let _AZiDGAtG;
if (_aHJfIGiJ._rFhAZwfF === '自定义') {
_AZiDGAtG = `${_CqoHzIeO + 1} - ${_aHJfIGiJ._OFjLpqcP}`;
} else {
_AZiDGAtG = `${_CqoHzIeO + 1} - ${_aHJfIGiJ._OFjLpqcP || '未知'}`;
if (!_aHJfIGiJ._rFhAZwfF || !_aHJfIGiJ._rFhAZwfF.toLowerCase().includes('cloudflare')) {
_AZiDGAtG += '(反代)';
}
}
const _PKmigQWx = _wxxnzCug.isIPv6(_aHJfIGiJ._AqAWorra) ? `[${_aHJfIGiJ._AqAWorra}]` : _aHJfIGiJ._AqAWorra;
const _cfgnhmWm = _aHJfIGiJ._cfgnhmWm || 443;
const _vTfxAmrA = itemLink._AiaIfSAD[0];
const _rcZlPrbH = _vTfxAmrA._UjxOdbGl || '';
const _UjxOdbGl = (_rcZlPrbH && _LPidigel(_rcZlPrbH)) ? _rcZlPrbH : crypto.randomUUID();
const _xkDUvfWo = '/snippets?_AqAWorra=endpointAddress:_cfgnhmWm(443)&nat64=6to4';
const _gFBJqvwm = _vTfxAmrA._gFBJqvwm || _UsyzCyCh;
const _EswNZWLz = new URLSearchParams({
security: 'tls',
_NJzhnGkV: 'ws',
_gFBJqvwm: _gFBJqvwm,
sni: _gFBJqvwm,
fp: 'random'
});
return `vless://${_UjxOdbGl}@${_PKmigQWx}:${_cfgnhmWm}?${_EswNZWLz.toString()}&_xkDUvfWo=${encodeURIComponent(encodeURIComponent(_xkDUvfWo))}#${encodeURIComponent(_AZiDGAtG)}`;
});
} else {
if (!itemLink || !itemLink._pIyCRELs || !itemLink._AiaIfSAD || itemLink._AiaIfSAD._ICXlAlKb === 0) {
return new Response("节点链接参数未配置或未启用", { status: 500 });
}
const _vTfxAmrA = itemLink._AiaIfSAD[0];
const { _gFBJqvwm, _UjxOdbGl, _xkDUvfWo } = _vTfxAmrA;
_xDrxScYZ = _hgDEwOMD.map((_aHJfIGiJ, _CqoHzIeO) => {
let _AZiDGAtG;
if (_aHJfIGiJ._rFhAZwfF === '自定义') {
_AZiDGAtG = `${_CqoHzIeO + 1} - ${_aHJfIGiJ._OFjLpqcP}`;
} else {
_AZiDGAtG = `${_CqoHzIeO + 1} - ${_aHJfIGiJ._OFjLpqcP || '未知'}`;
if (!_aHJfIGiJ._rFhAZwfF || !_aHJfIGiJ._rFhAZwfF.toLowerCase().includes('cloudflare')) {
_AZiDGAtG += '(反代)';
}
}
const _PKmigQWx = _wxxnzCug.isIPv6(_aHJfIGiJ._AqAWorra) ? `[${_aHJfIGiJ._AqAWorra}]` : _aHJfIGiJ._AqAWorra;
const _cfgnhmWm = _aHJfIGiJ._cfgnhmWm || 443;
const _EswNZWLz = new URLSearchParams({
security: 'tls',
_NJzhnGkV: 'ws',
_gFBJqvwm: _gFBJqvwm || _UsyzCyCh,
sni: _gFBJqvwm || _UsyzCyCh,
fp: 'random'
});
return `vless://${_UjxOdbGl}@${_PKmigQWx}:${_cfgnhmWm}?${_EswNZWLz.toString()}&_xkDUvfWo=${encodeURIComponent(encodeURIComponent(_xkDUvfWo || ''))}#${encodeURIComponent(_AZiDGAtG)}`;
});
}
const _TdzpjHPT = _xDrxScYZ.join('\n');
const _Kkxdvlnz = btoa(_TdzpjHPT);
return new Response(_Kkxdvlnz, {
_EHVaZscK: { 'Content-Type': '_heqVKvDm/plain; _HfvIqAkF=utf-8' }
});
} catch (_zAXNFgPv) {
return new Response(`生成节点列表失败: ${_zAXNFgPv._HIBUEilU}`, { status: 500 });
}
}
async function _JqUYZCUi(_ZSijftCk) {
try {
const { _UYizKJaM, _NJzhnGkV } = await _ZSijftCk.json();
if (!Array.isArray(_UYizKJaM)) {
return new Response('Invalid _UYizKJaM list', { status: 400 });
}
const _EfaMCFbz = _UYizKJaM.map(domain => {
if (!domain.trim()) return Promise.resolve([]);
const _SmdjCNgm = `https://cloudflare-dns.com/dns-query?_AZiDGAtG=${encodeURIComponent(domain.trim())}&_NJzhnGkV=${_NJzhnGkV || 'A'}`;
return fetch(_SmdjCNgm, { _EHVaZscK: { 'Accept': 'application/dns-json' } })
.then(_JoVHAmKr => _JoVHAmKr.json())
.then(_rWXRwnoK => (_rWXRwnoK.Answer ? _rWXRwnoK.Answer.map(a => a._rWXRwnoK) : []))
.catch(() => []);
});
const _wshTwuQY = (await Promise.all(_EfaMCFbz)).flat();
const _uKuoCPZS = [...new Set(_wshTwuQY)];
if (_uKuoCPZS._ICXlAlKb === 0) {
return new Response('无法从域名解析出任何IP。', { status: 500 });
}
return new Response(_uKuoCPZS.join('\n'), { _EHVaZscK: { 'Content-Type': '_heqVKvDm/plain; _HfvIqAkF=utf-8' } });
} catch (err) {
return new Response(`域名解析错误: ${err._HIBUEilU}`, { status: 500 });
}
}
async function _MfgoAAOz(_ZSijftCk, _mvxeLqsm) {
try {
const { _YwUPNewM } = await _ZSijftCk.json();
if (!Array.isArray(_YwUPNewM)) {
return _syjhuhrx({ error: "Invalid input, expected an object with a '_YwUPNewM' array." }, 400);
}
const _tiZCjsYW = new Set();
const _SeYESMUT = _YwUPNewM.map(_SmdjCNgm =>
_DXojGyCb(_SmdjCNgm)
.then(_heqVKvDm => {
if (!_heqVKvDm) return;
const _BtTVwHzr = _heqVKvDm.split(/[\s,;|]+/);
for (const _uTPXQmbM of _BtTVwHzr) {
const _leQNbqFw = _uTPXQmbM.trim();
if (_leQNbqFw) {
_tiZCjsYW.add(_leQNbqFw);
}
}
})
.catch(err => {
console.error(`Error processing URL ${_SmdjCNgm}:`, err);
})
);
await Promise.all(_SeYESMUT);
return _syjhuhrx({ _HcjPYkqr: Array.from(_tiZCjsYW) });
} catch (_zAXNFgPv) {
return _syjhuhrx({ error: `Failed to process URLs: ${_zAXNFgPv._HIBUEilU}` }, 500);
}
}
async function _UBwYmcFq(_ZSijftCk, _mvxeLqsm) {
const _xvMjSAal = await _GbkFDmyV(_mvxeLqsm);
if (!_xvMjSAal.api._pIyCRELs) {
return new Response(_xvMjSAal.api._HIBUEilU || 'API is disabled.', { status: 503 });
}
try {
const _ONcWljzX = _mvxeLqsm.DB.prepare("SELECT _AQWPohbc FROM kv_data WHERE _cgeHwHZm = ?").bind(_FTqVYECi);
const { _gRgRuaBU: dbResults } = await _ONcWljzX.all();
const _XOqRKkCG = dbResults._ICXlAlKb > 0 ? dbResults[0]._AQWPohbc : null;
const _ytRgEXkE = _XOqRKkCG ? JSON.parse(_XOqRKkCG) : null;
if (!_ytRgEXkE || !_ytRgEXkE._gRgRuaBU || _ytRgEXkE._gRgRuaBU._ICXlAlKb === 0) {
return new Response("上次优选结果为空。", {
status: 404,
_EHVaZscK: { 'Content-Type': '_heqVKvDm/plain; _HfvIqAkF=utf-8' },
});
}
const _HcjPYkqr = _ytRgEXkE._gRgRuaBU.map(r => r._AqAWorra);
return new Response(_HcjPYkqr.join('\n'), {
_EHVaZscK: { 'Content-Type': '_heqVKvDm/plain; _HfvIqAkF=utf-8' },
});
} catch (_zAXNFgPv) {
console.error("API /_AqAWorra 处理错误:", _zAXNFgPv);
return new Response(`API处理时出错: ${_zAXNFgPv._HIBUEilU}`, { status: 500 });
}
}
function _zeXLUwIz(_QDtdXbUJ, _CqoHzIeO, _xvMjSAal, _UsyzCyCh) {
const { itemLink } = _xvMjSAal;
if (!itemLink || !itemLink._pIyCRELs) return null;
const { template, _AiaIfSAD, selectionMode, _HyyRCACn } = itemLink;
if (!_AiaIfSAD || _AiaIfSAD._ICXlAlKb === 0) return null;
let _HQCMEKeC;
if (selectionMode === 'random') {
_HQCMEKeC = _AiaIfSAD[_CqoHzIeO % _AiaIfSAD._ICXlAlKb];
} else if (selectionMode === 'first') {
_HQCMEKeC = _AiaIfSAD[0];
} else {
_HQCMEKeC = _AiaIfSAD.find(s => s._AZiDGAtG === selectionMode) || _AiaIfSAD[0];
}
if (!_HQCMEKeC) return null;
let _SOuuGjUr = template;
const _iehtUkfg = _QDtdXbUJ._cfgnhmWm || 443;
const _zUriypil = _wxxnzCug.isIPv6(_QDtdXbUJ._AqAWorra) ? `[${_QDtdXbUJ._AqAWorra}]` : _QDtdXbUJ._AqAWorra;
let _AZiDGAtG = `${_CqoHzIeO + 1} 、 ${_QDtdXbUJ._OFjLpqcP || '未知'}`;
if (!_QDtdXbUJ._rFhAZwfF || !_QDtdXbUJ._rFhAZwfF.toLowerCase().includes('cloudflare')) {
_AZiDGAtG += '(反代)';
}
let _gFBJqvwm = _HQCMEKeC._gFBJqvwm || _UsyzCyCh;
_SOuuGjUr = _SOuuGjUr.replace(/{_AqAWorra}/g, _zUriypil)
.replace(/{_cfgnhmWm}/g, _iehtUkfg)
.replace(/{_AZiDGAtG}/g, encodeURIComponent(_AZiDGAtG))
.replace(/{rank}/g, _CqoHzIeO + 1)
.replace(/{_OFjLpqcP}/g, encodeURIComponent(_QDtdXbUJ._OFjLpqcP || '未知'))
.replace(/{_rFhAZwfF}/g, encodeURIComponent(_QDtdXbUJ._rFhAZwfF || '未知'))
.replace(/{_gFBJqvwm}/g, encodeURIComponent(_gFBJqvwm))
.replace(/{_UjxOdbGl}/g, encodeURIComponent(_HQCMEKeC['_UjxOdbGl'] || ''))
.replace(/{_xkDUvfWo}/g, encodeURIComponent(encodeURIComponent(_HQCMEKeC._xkDUvfWo || '')));
if (_HyyRCACn) {
_HyyRCACn.forEach(field => {
const _LjZlEcCt = new RegExp('{' + field._AZiDGAtG + '}', 'g');
_SOuuGjUr = _SOuuGjUr.replace(_LjZlEcCt, encodeURIComponent(field._AQWPohbc));
});
}
return _SOuuGjUr;
}
async function _wIllgdHM(_ZSijftCk, _mvxeLqsm) {
const _xvMjSAal = await _GbkFDmyV(_mvxeLqsm);
if (!_xvMjSAal.itemLink._pIyCRELs) {
return new Response("Item _SOuuGjUr feature is disabled.", { status: 503, _EHVaZscK: { 'Content-Type': '_heqVKvDm/plain; _HfvIqAkF=utf-8' } });
}
try {
const _ONcWljzX = _mvxeLqsm.DB.prepare("SELECT _AQWPohbc FROM kv_data WHERE _cgeHwHZm = ?").bind(_FTqVYECi);
const { _gRgRuaBU: dbResults } = await _ONcWljzX.all();
const _XOqRKkCG = dbResults._ICXlAlKb > 0 ? dbResults[0]._AQWPohbc : null;
const _ytRgEXkE = _XOqRKkCG ? JSON.parse(_XOqRKkCG) : null;
if (!_ytRgEXkE || !_ytRgEXkE._gRgRuaBU || _ytRgEXkE._gRgRuaBU._ICXlAlKb === 0) {
return new Response("No optimized IPs available to generate endpoints.", {
status: 404,
_EHVaZscK: { 'Content-Type': '_heqVKvDm/plain; _HfvIqAkF=utf-8' },
});
}
const _UsyzCyCh = new URL(_ZSijftCk._SmdjCNgm)._JzrXKvyO;
const _OJsDqFhq = _ytRgEXkE._gRgRuaBU.map((_QDtdXbUJ, _CqoHzIeO) => {
return _zeXLUwIz(_QDtdXbUJ, _CqoHzIeO, _xvMjSAal, _UsyzCyCh);
}).filter(Boolean);
if (_OJsDqFhq._ICXlAlKb === 0) {
return new Response("Could not generate any _aHJfIGiJ links from the available IPs.", {
status: 500,
_EHVaZscK: { 'Content-Type': '_heqVKvDm/plain; _HfvIqAkF=utf-8' },
});
}
return new Response(_OJsDqFhq.join('\n'), {
_EHVaZscK: { 'Content-Type': '_heqVKvDm/plain; _HfvIqAkF=utf-8' },
});
} catch (_zAXNFgPv) {
console.error("API /api/endpoints error:", _zAXNFgPv);
return new Response(`Error processing API _ZSijftCk: ${_zAXNFgPv._HIBUEilU}`, { status: 500 });
}
}
async function _pwLtvzpV(_ZSijftCk, _mvxeLqsm, _oHfCeruf) {
const _YlAiWtsC = _ZSijftCk._EHVaZscK.get('CF-Connecting-IP') || "未知IP";
const [
_XzoAqlCg,
_GCpQiCsw,
defaultDomains,
fetchedCountryMap
] = await Promise.all([
_NpRlknQB(_aGCMiMhl, _SpFfISbd, []),
_NpRlknQB(_LbSVXHOk, _SpFfISbd, []),
_NpRlknQB(_earvgseB, _ZhqlluRh, []),
_NpRlknQB(_LOIANfvJ, _dYXxnLXw, { "N/A": "未知" })
]);
_ewzUqrRu = fetchedCountryMap;
let _gMDWZIYb = false;
let _ovvIzXcL;
try {
const _fbajNFKZ = await _gRHjEnNh(_mvxeLqsm);
_gMDWZIYb = !!_fbajNFKZ;
_ovvIzXcL = await _GbkFDmyV(_mvxeLqsm);
} catch (_zAXNFgPv) {
if (_zAXNFgPv._HIBUEilU && _zAXNFgPv._HIBUEilU.includes('no such table')) {
console.log("检测到 'kv_data' 表不存在,正在自动创建...");
try {
const _oXNVPIsQ = "CREATE TABLE IF NOT EXISTS kv_data (_cgeHwHZm TEXT PRIMARY KEY, _AQWPohbc TEXT); CREATE TABLE IF NOT EXISTS optimized_results (_nwICrEQM TEXT PRIMARY KEY, _rWXRwnoK TEXT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP);";
await _mvxeLqsm.DB.exec(_oXNVPIsQ);
console.log("数据表创建成功。");
_gMDWZIYb = false;
_ovvIzXcL = _eswBiPDK();
} catch (dbError) {
console.error("自动创建数据表失败:", dbError);
return new Response(`数据库初始化失败: ${dbError._HIBUEilU}`, {
status: 500,
_EHVaZscK: { 'Content-Type': '_heqVKvDm/html;_HfvIqAkF=UTF-8' }
});
}
} else {
let _WkcVnzSC = _TkmQWbXD(_zAXNFgPv._HIBUEilU);
return new Response(_WkcVnzSC, { _EHVaZscK: { 'Content-Type': '_heqVKvDm/html;_HfvIqAkF=UTF-8' } });
}
}
if (_ovvIzXcL.telegram.bot_token && _ovvIzXcL.telegram.chat_id) {
const _ucXvCglh = _ZSijftCk.cf?._ucXvCglh || "未知";
const _cQhlqzcR = _ZSijftCk.cf?._cQhlqzcR || "";
let _wGamtfaV = _ewzUqrRu[_ucXvCglh] || _ucXvCglh;
if (_cQhlqzcR && _cQhlqzcR !== "未知城市" && _cQhlqzcR !== _ucXvCglh) _wGamtfaV = `${_wGamtfaV} ${_ewzUqrRu[_cQhlqzcR] || _cQhlqzcR}`;
const _ixLDiNIY = _UZtOwpNm();
const _zvTXUXDX = _ZSijftCk._SmdjCNgm;
const _QcUVfleT = `访客: ${_YlAiWtsC}\n位置: ${_wGamtfaV.trim()}\n时间: ${_ixLDiNIY}\n来自:${_zvTXUXDX}`;
const _KOhNxSXz = `https://api.telegram.org/bot${_ovvIzXcL.telegram.bot_token}/sendMessage?chat_id=${_ovvIzXcL.telegram.chat_id}&_heqVKvDm=${encodeURIComponent(_QcUVfleT)}`;
_oHfCeruf.waitUntil(fetch(_KOhNxSXz).catch(_zAXNFgPv => console.error("Telegram通知失败:", _zAXNFgPv)));
}
let _kHMhZJcz = _IxXmOXxb();
const _MiWxgNrZ = {
_xvMjSAal: _ovvIzXcL,
status: {
_gMDWZIYb: _gMDWZIYb,
}
};
_kHMhZJcz = _kHMhZJcz.replace('__PAGE_DATA_JSON__', JSON.stringify(_MiWxgNrZ));
_kHMhZJcz = _kHMhZJcz.replace('__ALL_CF_CIDR_LIST_JSON__', JSON.stringify(_XzoAqlCg));
_kHMhZJcz = _kHMhZJcz.replace('__BALANCED_CF_CIDR_LIST_JSON__', JSON.stringify(_GCpQiCsw));
_kHMhZJcz = _kHMhZJcz.replace('__DEFAULT_DOMAINS_LIST_JSON__', JSON.stringify(defaultDomains));
_kHMhZJcz = _kHMhZJcz.replace('__COUNTRY_MAP_JSON__', JSON.stringify(_ewzUqrRu));
return new Response(_kHMhZJcz, {
_EHVaZscK: { 'Content-Type': '_heqVKvDm/html;_HfvIqAkF=UTF-8' },
});
}
function _syjhuhrx(_DJldgNvG, status = 200, _EHVaZscK = {}) {
return new Response(JSON.stringify(_DJldgNvG), {
status,
_EHVaZscK: { 'Content-Type': 'application/json;_HfvIqAkF=UTF-8', ..._EHVaZscK }
});
}
function _UZtOwpNm(date = new Date()) {
return new Intl.DateTimeFormat('zh-CN', {
timeZone: 'Asia/Shanghai',
year: 'numeric', month: '2-digit', day: '2-digit',
hour: '2-digit', minute: '2-digit', second: '2-digit',
hour12: false
}).format(date);
}
function _hWwXQgVV(_AqAWorra) {
if (!_AqAWorra || typeof _AqAWorra !== 'string') return "无效IP";
if(_wxxnzCug.isIPv4(_AqAWorra)){
const _yfudENtQ = _AqAWorra.split('.');
if (_yfudENtQ._ICXlAlKb === 4) return `${_yfudENtQ[0]}.*.*.${_yfudENtQ[3]}`;
}
if(_wxxnzCug.isIPv6(_AqAWorra)){
const _yfudENtQ = _AqAWorra.split(':');
if (_yfudENtQ._ICXlAlKb > 2) return `${_yfudENtQ[0]}:...:${_yfudENtQ[_yfudENtQ._ICXlAlKb - 1]}`;
}
return _AqAWorra;
}
function _TkmQWbXD(_TxcjndRs) {
return `
<!DOCTYPE html><html lang="zh-CN"><head><meta _HfvIqAkF="UTF-8"><title>需要设置</title>
<_eoZUtSUa>
_DJldgNvG { font-family: sans-serif; background: #1a1a1a; _OInWDAtD: #e0e0e0; display: flex; justify-_CHuCfKLr: center; align-items: center; height: 100vh; margin: 0; }
._DcCZQBvz { max-_iILzVWQe: 800px; padding: 2rem; background: #25282e; border: 1px solid #4044c; border-radius: 8px; box-shadow: 0 5px 15px rgba(0,0,0,0.3); }
h1 { _OInWDAtD: #00a0ff; border-bottom: 1px solid #40444c; padding-bottom: 0.5rem; }
p { line-height: 1.6; }
code { background: #1a1a1a; padding: 0.2em 0.4em; border-radius: 4px; font-family: monospace; white-space: pre-wrap; word-break: break-all; }
.error { _OInWDAtD: #da3633; background: rgba(218, 54, 51, 0.1); padding: 0.5rem; border-radius: 4px; margin-_HAmcdJlW: 1rem; }
</_eoZUtSUa>
</head><_DJldgNvG>
<div class="_DcCZQBvz">
<h1>部署指南</h1>
<p>系统检测到 D1 数据库绑定存在问题。请确保您已完成以下步骤:</p>
<ol>
<li>进入 Cloudflare Dashbord -> Workers & Pages -> D1。</li>
<li>创建一个新的D1数据库 (如果还没有)。</li>
<li>将此数据库绑定到您的Worker:
<ul>
<li>进入Worker设置 -> 变量 -> D1数据库绑定。</li>
<li>变量名必须填写 <code>DB</code>。</li>
<li>选择您刚创建的数据库。</li>
<li>点击“保存并部署”。</li>
</ul>
</li>
</ol>
<p>完成以上步骤后,请刷新本页面。系统会自动为您创建所需的数据表。</p>
${_TxcjndRs ? `<div class="error"><strong>当前错误信息:</strong> ${_TxcjndRs.replace(/</g, "<").replace(/>/g, ">")}</div>` : ''}
</div>
</_DJldgNvG></html>`;
}
function _IxXmOXxb() {
return `
<!DOCTYPE html><html lang="zh-CN"><head> <meta _HfvIqAkF="UTF-8"> <meta _AZiDGAtG="viewport" _CHuCfKLr="_iILzVWQe=device-_iILzVWQe, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"> <title>Cloudflare IP</title> <_SOuuGjUr href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=Noto+Sans+SC:wght@400;500;700&family=Roboto+Mono:wght@400;500&display=swap" rel="stylesheet"><script src="https://cdn.jsdelivr.net/npm/qrcode-generator/qrcode.js"></script>
<_eoZUtSUa>
:root { --primary-_OInWDAtD: #00A0FF; --primary-hover: #007ACC; --primary-gradient-start: #00C6FF; --primary-gradient-end: #0072FF; --secondary-_OInWDAtD: #8c939d; --light-bg: #1A1C20; --_CHuCfKLr-bg: #25282E; --border-_OInWDAtD: #40444C; --_heqVKvDm-_OInWDAtD: #E0E0E0; --_heqVKvDm-light: #B0B0B0; --success-_OInWDAtD: #30A46C; --danger-_OInWDAtD: #DA3633; --warning-_OInWDAtD: #DBAB0A; --border-radius-md: 8px; --border-radius-sm: 6px; --font-family-sans: 'Inter', 'Noto Sans SC', sans-serif; --font-family-mono: 'Roboto Mono', monospace; }
* { margin: 0; padding: 0; box-sizing: border-box; }
html { font-size: 16px; }
_DJldgNvG { font-family: var(--font-family-sans); background-_OInWDAtD: var(--light-bg); _OInWDAtD: var(--_heqVKvDm-_OInWDAtD); line-height: 1.65; overflow-x: hidden; padding: 0; position:relative; transition: background-_OInWDAtD 0.5s ease; background-size: cover; background-position: center; background-attachment: fixed; }
#background-_sToyFimg { position: fixed; _HAmcdJlW: 0; _LVBYBkqk: 0; _iILzVWQe: 100%; height: 100%; z-_CqoHzIeO: -1; display: none; }
._zKSLSpvQ-_DcCZQBvz { max-_iILzVWQe: 1100px; margin: 0 auto; padding: 0 1rem; position: relative; z-_CqoHzIeO: 1; }
#_QaWxIJUj { position: fixed; _HAmcdJlW: 1rem; right: 1rem; font-size: 0.85em; padding: 0.4em 0.8em; z-_CqoHzIeO: 10; }
#marquee-_DcCZQBvz { overflow: hidden; white-space: nowrap; background-_OInWDAtD: rgba(37, 40, 46, 0.6); backdrop-filter: blur(5px); _OInWDAtD: var(--primary-_OInWDAtD); padding: 0.5rem 0; margin-_HAmcdJlW: 1rem; border-radius: var(--border-radius-sm); display: none; }
#marquee-_heqVKvDm { display: inline-block; padding-_LVBYBkqk: 100%; animation: marquee-scroll 20s linear infinite; }
@keyframes marquee-scroll { 0% { transform: translateX(0); } 100% { transform: translateX(-100%); } }
_EDTwAuGT { _heqVKvDm-align: center; margin-_HAmcdJlW: 1rem; margin-bottom: 2rem; }
_EDTwAuGT h1 { white-space: pre-wrap; font-size: 2.25em; _OInWDAtD: var(--primary-_OInWDAtD); font-weight: 700; _heqVKvDm-shadow: 0 0 10px rgba(var(--primary-_OInWDAtD-rgb), 0.3); }
.card { background-_OInWDAtD: rgba(37, 40, 46, 0.85); backdrop-filter: blur(5px); -webkit-backdrop-filter: blur(5px); border-radius: var(--border-radius-md); box-shadow: 0 3px 8px rgba(0, 0, 0, 0.25); padding: 1.5rem; margin-bottom: 1.5rem; border: 1px solid var(--border-_OInWDAtD); }
.progress-section #_SWWhlkTX { _iILzVWQe: 100%; height: 0.75rem; border-radius: var(--border-radius-sm); appearance: none; -webkit-appearance: none; background-_OInWDAtD: var(--border-_OInWDAtD); overflow: hidden; }
.progress-section #_SWWhlkTX::-webkit-progress-_AQWPohbc { background: linear-gradient(90deg, var(--primary-gradient-start), var(--primary-gradient-end)); }
.progress-section #status { _heqVKvDm-align: center; margin-_HAmcdJlW: 0.75em; font-size: 0.95em; _OInWDAtD: var(--_heqVKvDm-light); min-height: 1.5em; }
.section-_EDTwAuGT { display: flex; flex-wrap: wrap; justify-_CHuCfKLr: space-between; align-items: center; margin-bottom: 1rem; padding-bottom: 0.75rem; border-bottom: 1px solid var(--border-_OInWDAtD); gap: 1rem; }
.section-_EDTwAuGT h2 { font-size: 1.6em; font-weight: 600; margin:0; }
.generator-info { font-size: 0.85em; _OInWDAtD: var(--secondary-_OInWDAtD); _heqVKvDm-align: right; flex-shrink: 0; }
.generator-info span { display: block; }
.table-responsive { _iILzVWQe: 100%; overflow-x: auto; -webkit-overflow-scrolling: touch; }
table { _iILzVWQe: 100%; border-collapse: collapse; margin-_HAmcdJlW: 0; font-size: 0.9em; }
th, td { border-bottom: 1px solid var(--border-_OInWDAtD); padding: 0.8em; _heqVKvDm-align: _LVBYBkqk; vertical-align: middle; white-space: nowrap; }
th { background-_OInWDAtD: #2c3038; font-weight: 500; }
tbody tr:hover { background-_OInWDAtD: #30333a; }
td._AqAWorra-_eWiRbqsk { font-weight: 500; font-family: var(--font-family-mono); _OInWDAtD: var(--primary-_OInWDAtD); }
td.ping-_AQWPohbc { font-weight: 600; font-family: var(--font-family-mono); }
td.actions-cell { _heqVKvDm-align: right; }
.btn { display: inline-flex; align-items: center; justify-_CHuCfKLr: center; font-weight: 500; _heqVKvDm-align: center; cursor: pointer; user-_cAIbpWoq: none; background: linear-gradient(145deg, var(--primary-gradient-start), var(--primary-gradient-end)); border: 1px solid transparent; _OInWDAtD: #fff; padding: 0.4em 0.8em; font-size: 0.85em; border-radius: var(--border-radius-sm); transition: all 0.2s ease-in-out; margin-_LVBYBkqk: 6px; }
.btn:hover { transform: translateY(-2px); box-shadow: 0 4px 8px rgba(0, 0, 0, 0.3); }
.btn-outline { background: transparent; _OInWDAtD: var(--primary-_OInWDAtD); border: 1px solid var(--primary-_OInWDAtD); }
.btn-outline:hover { background-_OInWDAtD: var(--primary-_OInWDAtD); _OInWDAtD: var(--_CHuCfKLr-bg); }
._zKSLSpvQ-download-buttons { display: grid; grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); gap: 1rem; }
._zKSLSpvQ-download-buttons .btn { _iILzVWQe: 100%; margin: 0; }
.tooltip-notification { position: fixed; _HAmcdJlW: 20px; right: 20px; padding: 12px 20px; border-radius: var(--border-radius-md); _OInWDAtD: #fff; font-size: 0.95em; z-_CqoHzIeO: 10002; box-shadow: 0 6px 15px rgba(0, 0, 0, 0.35); opacity: 0; transform: translateY(-20px); transition: all 0.3s ease; pointer-events: none; }
.tooltip-notification.show { opacity: 1; transform: translateY(0); }
#_ICGfQQEq, #_KqHVDrYP, #_GMqLezut, #_xmwRPeMI, #_WLjmYtTM { display: none; position: fixed; z-_CqoHzIeO: 10000; _LVBYBkqk: 0; _HAmcdJlW: 0; _iILzVWQe: 100%; height: 100%; background-_OInWDAtD: rgba(0,0,0,0.6); justify-_CHuCfKLr: center; align-items: center; backdrop-filter: blur(5px); -webkit-backdrop-filter: blur(5px); }
.modal-_CHuCfKLr, ._zKSLSpvQ-modal-_CHuCfKLr { background-_OInWDAtD: var(--_CHuCfKLr-bg); padding: 2rem; border: 1px solid var(--border-_OInWDAtD); border-radius: var(--border-radius-md); _iILzVWQe: 95%; max-_iILzVWQe: 800px; max-height: 90vh; overflow-y: auto; box-shadow: 0 5px 15px rgba(0,0,0,0.3); }
#_xmwRPeMI .modal-_CHuCfKLr { max-_iILzVWQe: 500px; }
.modal-_CHuCfKLr h3, ._zKSLSpvQ-modal-_EDTwAuGT h3 { margin-_HAmcdJlW: 0; margin-bottom: 1.5rem; _OInWDAtD: var(--primary-_OInWDAtD); _heqVKvDm-align: center; }
.modal-buttons { display: flex; justify-_CHuCfKLr: flex-end; gap: 1rem; margin-_HAmcdJlW: 2rem; border-_HAmcdJlW: 1px solid var(--border-_OInWDAtD); padding-_HAmcdJlW: 1.5rem; }
.modal-section-divider { border: 0; height: 1px; background-image: linear-gradient(to right, rgba(0,0,0,0), var(--border-_OInWDAtD), rgba(0,0,0,0)); margin: 2rem 0; }
._zKSLSpvQ-modal-_EDTwAuGT { display: flex; justify-_CHuCfKLr: space-between; align-items: center; padding-bottom: 1rem; margin-bottom: 1rem; border-bottom: 1px solid var(--border-_OInWDAtD); }
.modal-close-btn { font-size: 1.5rem; font-weight: bold; line-height: 1; _OInWDAtD: var(--_heqVKvDm-light); cursor: pointer; background: none; border: none; padding: 0; }
._zKSLSpvQ-list-_aHJfIGiJ { display: flex; flex-direction: column; padding: 1rem; border: 1px solid var(--border-_OInWDAtD); border-radius: var(--border-radius-sm); margin-bottom: 1rem; }
._zKSLSpvQ-_AZiDGAtG { font-size: 1.1em; font-weight: 600; }
._zKSLSpvQ-links a { display: block; _OInWDAtD: var(--primary-_OInWDAtD); _heqVKvDm-decoration: none; margin-_HAmcdJlW: 0.5rem; word-break: break-all; }
._zKSLSpvQ-links a:hover { _heqVKvDm-decoration: underline; }
._zKSLSpvQ-links span { _OInWDAtD: var(--_heqVKvDm-light); }
#visitorPasswordPrompt { _heqVKvDm-align: center; }
#visitorPasswordPrompt h3 { _OInWDAtD: var(--primary-_OInWDAtD); font-size: 1.4em; margin-bottom: 0.8rem; }
#visitorPasswordPrompt p { _OInWDAtD: var(--_heqVKvDm-light); margin-bottom: 1.5rem; }
._fbajNFKZ-input-group { display: flex; gap: 10px; max-_iILzVWQe: 400px; margin: 0 auto; }
._fbajNFKZ-input-group input { flex-grow: 1; _heqVKvDm-align: center; }
._fbajNFKZ-input-group .btn { margin-_LVBYBkqk: 0; }
._gRgRuaBU-actions-_DcCZQBvz { _heqVKvDm-align: center; margin-bottom: 1.5rem; }
._gRgRuaBU-api-buttons { display: grid; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); gap: 1rem; }
._gRgRuaBU-api-buttons .btn { margin: 0; _iILzVWQe: 100%; font-size: 0.9em; padding: 0.5em 1em; }
.form-grid { display: grid; grid-template-columns: max-_CHuCfKLr 1fr; gap: 1.2rem 1rem; align-items: center; }
.form-grid-label { justify-self: end; display: flex; align-items: center; gap: 8px; }
.form-grid-control { display: flex; align-items: center; gap: 10px; }
.form-grid-control-full { grid-column: 1 / -1; }
.form-grid-control input, .form-grid-control _cAIbpWoq, .form-grid-control textarea { _iILzVWQe: 100%; background-_OInWDAtD: var(--light-bg); border: 1px solid var(--border-_OInWDAtD); border-radius: var(--border-radius-sm); _OInWDAtD: var(--_heqVKvDm-_OInWDAtD); font-family: var(--font-family-sans); padding: 0.6em; transition: border-_OInWDAtD 0.2s, box-shadow 0.2s; }
.form-grid-control input:focus, .form-grid-control _cAIbpWoq:focus, .form-grid-control textarea:focus { border-_OInWDAtD: var(--primary-_OInWDAtD); box-shadow: 0 0 0 2px rgba(var(--primary-_OInWDAtD-rgb), 0.2); outline: none; }
.form-grid-control input[_NJzhnGkV="_OInWDAtD"] { min-_iILzVWQe: auto; padding: 2px; _iILzVWQe: 2.5em; height: 2.5em; }
.form-grid-control input[_NJzhnGkV="checkbox"] { _iILzVWQe: auto; flex-shrink: 0; height: 1.2em; _iILzVWQe: 1.2em; }
.form-grid-control ._MZgvHksm-input { _iILzVWQe: 80px; _heqVKvDm-align: right; }
.tooltip-_lEFLrwit { display: inline-flex; _iILzVWQe: 16px; height: 16px; align-items: center; justify-_CHuCfKLr: center; background-_OInWDAtD: var(--secondary-_OInWDAtD); _OInWDAtD: var(--_CHuCfKLr-bg); border-radius: 50%; font-size: 12px; font-weight: bold; cursor: pointer; user-_cAIbpWoq: none; }
#tooltip-popup { position: fixed; background-_OInWDAtD: #383c4a; _OInWDAtD: #fff; padding: 10px 15px; border-radius: 6px; z-_CqoHzIeO: 10001; font-size: 0.85em; max-_iILzVWQe: 300px; display: none; box-shadow: 0 4px 12px rgba(0,0,0,0.4); border: 1px solid var(--border-_OInWDAtD); pointer-events: none; }
#custom-fields-_DcCZQBvz .form-grid-control { gap: 5px; } #custom-fields-_DcCZQBvz .form-grid-control input { flex: 1; }
.parameter-_otFwQbhA-_ohkdVOKc { border: 1px solid var(--border-_OInWDAtD); border-radius: var(--border-radius-sm); padding: 1rem; margin-bottom: 1rem; }
.parameter-_otFwQbhA-_EDTwAuGT { display: flex; justify-_CHuCfKLr: space-between; align-items: center; margin-bottom: 1rem; }
.parameter-_otFwQbhA-_EDTwAuGT input { flex-grow: 1; margin-right: 1rem; }
.fine-grained-options { display: flex; gap: 1rem; margin-_HAmcdJlW: 0.5rem; align-items: center; font-size: 0.9em; }
.fine-grained-options label { display: flex; align-items: center; gap: 0.3rem; cursor: pointer; }
._heqVKvDm-_OInWDAtD-grid { display: grid; grid-template-columns: auto 1fr; gap: 8px; align-items: center; _iILzVWQe: 100%; }
._heqVKvDm-_OInWDAtD-grid input[_NJzhnGkV="_OInWDAtD"] { grid-column: 1 / 2; }
._heqVKvDm-_OInWDAtD-grid input[_NJzhnGkV="_heqVKvDm"], ._heqVKvDm-_OInWDAtD-grid textarea { grid-column: 2 / 3; }
#_xmwRPeMI .button-grid { display: grid; grid-template-columns: 1fr; gap: 1rem; }
#_xmwRPeMI .btn-group { display: flex; }
#_xmwRPeMI .sub-btn { flex-grow: 1; margin: 0; }
#_xmwRPeMI ._OATrUtek-btn { flex-shrink: 0; margin-_LVBYBkqk: -1px; border-_HAmcdJlW-_LVBYBkqk-radius: 0; border-bottom-_LVBYBkqk-radius: 0; }
#_WLjmYtTM .modal-_CHuCfKLr { max-_iILzVWQe: 300px; background: white; padding: 1rem; _heqVKvDm-align: center; }
#qrCodeImg { max-_iILzVWQe: 100%; }
@media (max-_iILzVWQe: 768px) {
html { font-size: 15px; } ._zKSLSpvQ-_DcCZQBvz { padding: 0 0.8rem; } _EDTwAuGT { margin-_HAmcdJlW: 2.5rem; margin-bottom: 1.5rem; } #_QaWxIJUj { _HAmcdJlW: 0.8rem; right: 0.8rem; } .card { padding: 1rem; }
.form-grid { grid-template-columns: 1fr; } .form-grid-label { justify-self: start; }
}
</_eoZUtSUa>
<_eoZUtSUa _nwICrEQM="theme-styles">
.theme-light { --light-bg: #F0F2F5; --_CHuCfKLr-bg: #FFFFFF; --border-_OInWDAtD: #DCDFE6; --_heqVKvDm-_OInWDAtD: #303133; --_heqVKvDm-light: #606266; }
.theme-light .card { background-_OInWDAtD: rgba(255, 255, 255, 0.9); }
.theme-light th { background-_OInWDAtD: #F5F7FA; }
.theme-light tbody tr:hover { background-_OInWDAtD: #ECF5FF; }
.theme-matrix { --primary-_OInWDAtD: #00FF41; --primary-hover: #39FF14; --light-bg: #000000; --_CHuCfKLr-bg: #0D0208; --border-_OInWDAtD: #00FF41; --_heqVKvDm-_OInWDAtD: #00FF41; --_heqVKvDm-light: #00FF41; font-family: var(--font-family-mono); }
.theme-matrix .card { background-_OInWDAtD: rgba(0, 20, 0, 0.7); _heqVKvDm-shadow: 0 0 5px var(--primary-_OInWDAtD); backdrop-filter: none; }
.theme-matrix th { background-_OInWDAtD: #000; }
.theme-matrix tbody tr:hover { background-_OInWDAtD: #010; }
.theme-matrix .btn { _heqVKvDm-shadow: none; _OInWDAtD: #000; }
.theme-matrix .btn-outline { background-_OInWDAtD: transparent; }
.theme-modern-glass { --primary-_OInWDAtD: #00C6FF; --primary-hover: #0072FF; --light-bg: #000; --_CHuCfKLr-bg: rgba(30, 30, 40, 0.6); --border-_OInWDAtD: rgba(255, 255, 255, 0.2); --_heqVKvDm-_OInWDAtD: #F0F0F0; --_heqVKvDm-light: #A0A0B0; --border-radius-md: 12px; }
_DJldgNvG.theme-modern-glass { background: linear-gradient(-45deg, #000428, #004e92, #1CB5E0, #23D5AB); background-size: 400% 400%; animation: gradientBG 15s ease infinite; }
@keyframes gradientBG { 0% { background-position: 0% 50%; } 50% { background-position: 100% 50%; } 100% { background-position: 0% 50%; } }
.theme-particles-glass { --primary-_OInWDAtD: #00C6FF; --primary-hover: #0072FF; --light-bg: #1A1C20; --_CHuCfKLr-bg: rgba(30, 30, 40, 0.6); --border-_OInWDAtD: rgba(255, 255, 255, 0.2); --_heqVKvDm-_OInWDAtD: #F0F0F0; --_heqVKvDm-light: #A0A0B0; --border-radius-md: 12px; }
.glassy-components .card { background-_OInWDAtD: var(--_CHuCfKLr-bg); backdrop-filter: blur(15px); -webkit-backdrop-filter: blur(15px); border: 1px solid var(--border-_OInWDAtD); }
.glassy-components .btn { background: linear-gradient(145deg, var(--primary-gradient-start), var(--primary-gradient-end)); border: 1px solid rgba(255, 255, 255, 0.2); border-bottom-_OInWDAtD: rgba(0,0,0,0.3); border-right-_OInWDAtD: rgba(0,0,0,0.3); box-shadow: 0 4px 15px rgba(0,0,0,0.2), inset 0 1px 1px rgba(255,255,255,0.1); _heqVKvDm-shadow: 0 1px 2px rgba(0,0,0,0.2); _OInWDAtD: #fff; }
.glassy-components .btn-outline { background: rgba(255, 255, 255, 0.05); border-_OInWDAtD: rgba(255, 255, 255, 0.2); backdrop-filter: blur(2px); _heqVKvDm-shadow: 0 1px 2px rgba(0,0,0,0.2); }
.glassy-components .btn-outline:hover { background: var(--primary-_OInWDAtD); border-_OInWDAtD: var(--primary-_OInWDAtD); _OInWDAtD: #fff; }
.glassy-components _EDTwAuGT h1 { background: linear-gradient(180deg, rgba(255,255,255,1) 0%, rgba(255,255,255,0.7) 100%); -webkit-background-clip: _heqVKvDm; -webkit-_heqVKvDm-fill-_OInWDAtD: transparent; filter: drop-shadow(0 2px 5px rgba(0,0,0,0.5)); _OInWDAtD: transparent; }
.theme-aurora-glass { --primary-_OInWDAtD: #38bdf8; --light-bg: #0c0a09; --_CHuCfKLr-bg: rgba(23, 23, 23, 0.5); --border-_OInWDAtD: rgba(255, 255, 255, 0.15); --_heqVKvDm-_OInWDAtD: #f2f2f2; --_heqVKvDm-light: #a3a3a3; }
_DJldgNvG.theme-aurora-glass::before { _CHuCfKLr: ''; position: fixed; _HAmcdJlW: 0; _LVBYBkqk: 0; _iILzVWQe: 100%; height: 100%; z-_CqoHzIeO: -2; background: radial-gradient(at 27% 37%, hsla(215, 98%, 61%, 0.4) 0px, transparent 50%), radial-gradient(at 97% 21%, hsla(125, 98%, 72%, 0.2) 0px, transparent 50%), radial-gradient(at 52% 99%, hsla(355, 98%, 76%, 0.3) 0px, transparent 50%), radial-gradient(at 10% 29%, hsla(256, 96%, 68%, 0.3) 0px, transparent 50%), radial-gradient(at 97% 96%, hsla(38, 60%, 74%, 0.2) 0px, transparent 50%), radial-gradient(at 33% 50%, hsla(222, 67%, 73%, 0.3) 0px, transparent 50%), radial-gradient(at 79% 53%, hsla(343, 68%, 73%, 0.2) 0px, transparent 50%); animation: auroraBG 20s ease-in-out infinite alternate; }
@keyframes auroraBG { from { transform: scale(1); } to { transform: scale(1.5); } }
.theme-cyberpunk-glass { --primary-_OInWDAtD: #08fdd8; --light-bg: #010409; --_CHuCfKLr-bg: rgba(22, 27, 34, 0.6); --border-_OInWDAtD: rgba(139, 148, 158, 0.3); --_heqVKvDm-_OInWDAtD: #e6edf3; --_heqVKvDm-light: #7d8590; }
.theme-cyberpunk-glass .card { border-image: linear-gradient(to bottom right, var(--primary-_OInWDAtD), #7928ca) 1; box-shadow: 0 0 15px rgba(var(--primary-_OInWDAtD-rgb), 0.25); }
.theme-cyberpunk-glass .btn { box-shadow: 0 0 8px rgba(var(--primary-_OInWDAtD-rgb), 0.5); }
.theme-marble-light { --primary-_OInWDAtD: #bfa37c; --light-bg: #f7f5f2; --_CHuCfKLr-bg: #ffffff; --border-_OInWDAtD: #e0dcd5; --_heqVKvDm-_OInWDAtD: #3d3a36; --_heqVKvDm-light: #6b6661; }
_DJldgNvG.theme-marble-light { background-image: _SmdjCNgm('_rWXRwnoK:image/svg+xml,%3Csvg _iILzVWQe="60" height="60" viewBox="0 0 60 60" xmlns="http://www.w3.org/2000/svg"%3E%3Cg fill="none" fill-rule="evenodd"%3E%3Cg fill="%23dcd6ca" fill-opacity="0.2"%3E%3Cpath d="M36 34v-4h-2v4h-4v2h4v4h2v-4h4v-2h-4zm0-30V0h-2v4h-4v2h4v4h2V6h4V4h-4zM6 34v-4H4v4H0v2h4v4h2v-4h4v-2H6zM6 4V0H4v4H0v2h4v4h2V6h4V4H6z"/%3E%3C/g%3E%3C/g%3E%3C/svg%3E'); }
.theme-marble-light .card { background-_OInWDAtD: rgba(255, 255, 255, 0.85); box-shadow: 0 4px 12px rgba(0,0,0,0.08); }
</_eoZUtSUa>
</head><_DJldgNvG _nwICrEQM="pageBody">
<_sToyFimg _nwICrEQM="background-_sToyFimg"></_sToyFimg>
<div _nwICrEQM="_ICGfQQEq">
<div class="modal-_CHuCfKLr">
<h3>首次使用 - 请设置管理员密码</h3>
<p>这是您第一次访问本页面,为了保护您的设置,请创建一个管理员密码。</p>
<div class="form-grid"><div class="form-grid-label"><label for="initialPassword">新密码 (至少6位)</label></div><div class="form-grid-control"><input _NJzhnGkV="_fbajNFKZ" _nwICrEQM="initialPassword"></div></div>
<div class="form-grid"><div class="form-grid-label"><label for="confirmPassword">确认密码</label></div><div class="form-grid-control"><input _NJzhnGkV="_fbajNFKZ" _nwICrEQM="confirmPassword"></div></div>
<div class="modal-buttons"><button _nwICrEQM="setInitialPasswordBtn" class="btn">设置密码</button></div>
</div>
</div>
<div class="_zKSLSpvQ-_DcCZQBvz">
<button _nwICrEQM="_QaWxIJUj" class="btn btn-outline"></button>
<div _nwICrEQM="marquee-_DcCZQBvz"><div _nwICrEQM="marquee-_heqVKvDm"></div></div>
<_EDTwAuGT><h1 _nwICrEQM="pageTitle"></h1></_EDTwAuGT>
<div class="card" _nwICrEQM="visitorPasswordPrompt" _eoZUtSUa="display: none;">
<h3>需要授权</h3>
<p>此站点已启用访客密码,请输入密码以继续。</p>
<div class="_fbajNFKZ-input-group">
<input _NJzhnGkV="_fbajNFKZ" _nwICrEQM="visitorPasswordEntry" _LjZlEcCt="访客密码">
<button _nwICrEQM="startTestWithPasswordBtn" class="btn">开始测试</button>
</div>
</div>
<div _nwICrEQM="_vqONuvcr" _eoZUtSUa="display: block;">
<div class="card progress-section">
<div _nwICrEQM="progressDisplay">
<progress _nwICrEQM="_SWWhlkTX" _AQWPohbc="0" max="100"></progress>
<div _nwICrEQM="status">正在初始化...</div>
</div>
</div>
<div class="card _zKSLSpvQ-download-section">
<div class="section-_EDTwAuGT"><h2 _nwICrEQM="appDownloadTitleEl"></h2></div>
<div class="_zKSLSpvQ-download-buttons">
<button class="btn" _rWXRwnoK-_ekpLUTdr="android">安卓客户端</button>
<button class="btn" _rWXRwnoK-_ekpLUTdr="ios">苹果客户端</button>
<button class="btn" _rWXRwnoK-_ekpLUTdr="windows">Windows客户端</button>
<button class="btn" _rWXRwnoK-_ekpLUTdr="mac">Mac客户端</button>
</div>
</div>
<div class="card _gRgRuaBU-section" _nwICrEQM="_CfHGZVhs" _eoZUtSUa="display:none;">
<div class="section-_EDTwAuGT">
<h2 _nwICrEQM="liveTitleEl"></h2>
<div class="generator-info" _nwICrEQM="liveGeneratorInfo"></div>
</div>
<div _nwICrEQM="_PyVLFwwe" class="_gRgRuaBU-actions-_DcCZQBvz" _eoZUtSUa="display: none;">
<div class="_gRgRuaBU-api-buttons">
<button _nwICrEQM="copyIpApiBtn" class="btn">复制 IP API</button>
<button _nwICrEQM="copySubscriptionBtn" class="btn">复制订阅</button>
</div>
</div>
<div class="table-responsive">
<table _nwICrEQM="resultsTable">
<thead><tr><th _nwICrEQM="tableHeader1El"></th><th _nwICrEQM="tableHeader2El"></th><th _nwICrEQM="tableHeader3El"></th><th _nwICrEQM="tableHeader4El"></th><th _nwICrEQM="tableHeader5El"></th><th _nwICrEQM="tableHeader6El"></th><th _nwICrEQM="tableHeader7El"></th></tr></thead>
<tbody></tbody>
</table>
</div>
</div>
<div class="card cached-section" _nwICrEQM="_ZBkflblN" _eoZUtSUa="display:none;">
<div class="section-_EDTwAuGT"><h2 _nwICrEQM="cachedTitleEl"></h2><div class="generator-info" _nwICrEQM="cachedGeneratorInfo"></div></div>
<div class="table-responsive">
<table _nwICrEQM="cachedResultsTable">
<thead><tr><th _nwICrEQM="cachedTableHeader1El"></th><th _nwICrEQM="cachedTableHeader2El"></th><th _nwICrEQM="cachedTableHeader3El"></th><th _nwICrEQM="cachedTableHeader4El"></th><th _nwICrEQM="cachedTableHeader5El"></th><th _nwICrEQM="cachedTableHeader6El"></th><th _nwICrEQM="cachedTableHeader7El"></th></tr></thead>
<tbody></tbody>
</table>
</div>
</div>
</div>
</div>
<div _nwICrEQM="notificationTooltip" class="tooltip-notification"></div>
<div _nwICrEQM="_KqHVDrYP">
<div class="modal-_CHuCfKLr">
<h3>修改参数</h3>
<div _eoZUtSUa="display: flex; border-bottom: 1px solid var(--border-_OInWDAtD); margin-bottom: 1.5rem;">
<button class="tab-button active" onclick="_jWPVkskX(event, 'general-_CDxhoJGU')">通用设置</button>
<button class="tab-button" onclick="_jWPVkskX(event, '_SOuuGjUr-_CDxhoJGU')">链接设置</button>
<button class="tab-button" onclick="_jWPVkskX(event, 'fine-grained-_CDxhoJGU')">IP源设置</button>
<button class="tab-button" onclick="_jWPVkskX(event, 'advanced-_CDxhoJGU')">高级设置</button>
</div>
<div _nwICrEQM="general-_CDxhoJGU" class="tab-_CHuCfKLr" _eoZUtSUa="display: block;">
<div class="form-grid">
<div class="form-grid-label"><label for="themeSelect">页面主题</label><span class="tooltip-_lEFLrwit" _rWXRwnoK-tooltip="选择页面的整体外观风格。">?</span></div>
<div class="form-grid-control">
<_cAIbpWoq _nwICrEQM="themeSelect">
<_KnbLJhJD _AQWPohbc="theme-aurora-glass">极光-玻璃质感</_KnbLJhJD>
<_KnbLJhJD _AQWPohbc="theme-particles-glass">粒子-玻璃质感</_KnbLJhJD>
<_KnbLJhJD _AQWPohbc="theme-modern-glass">现代-玻璃质感</_KnbLJhJD>
<_KnbLJhJD _AQWPohbc="theme-cyberpunk-glass">赛博朋克-玻璃质感</_KnbLJhJD>
<_KnbLJhJD _AQWPohbc="theme-dark-particles">暗色-粒子背景</_KnbLJhJD>
<_KnbLJhJD _AQWPohbc="theme-dark-bing">暗色-必应壁纸</_KnbLJhJD>
<_KnbLJhJD _AQWPohbc="theme-light">亮色-简约</_KnbLJhJD>
<_KnbLJhJD _AQWPohbc="theme-light-bing">亮色-必应壁纸</_KnbLJhJD>
<_KnbLJhJD _AQWPohbc="theme-marble-light">简约大理石-亮色</_KnbLJhJD>
<_KnbLJhJD _AQWPohbc="theme-matrix">矩阵-代码雨</_KnbLJhJD>
</_cAIbpWoq>
</div>
<div class="form-grid-label"><label>主题颜色</label><span class="tooltip-_lEFLrwit" _rWXRwnoK-tooltip="自定义主题的主要颜色和动态背景效果的颜色。">?</span></div>
<div class="form-grid-control">
<label for="primaryColorInput">强调色</label><input _NJzhnGkV="_OInWDAtD" _nwICrEQM="primaryColorInput">
<span _eoZUtSUa="_iILzVWQe: 20px;"></span>
<label for="particleColorInput">背景/粒子色</label><input _NJzhnGkV="_OInWDAtD" _nwICrEQM="particleColorInput">
</div>
<div class="form-grid-control-full"><hr class="modal-section-divider"></div>
<div class="form-grid-label" _eoZUtSUa="align-self: start;"><label>页面文本与颜色</label><span class="tooltip-_lEFLrwit" _rWXRwnoK-tooltip="自定义页面上各个主要元素的显示文本和颜色。">?</span></div>
<div class="form-grid-control" _eoZUtSUa="flex-direction: column; align-items: stretch; gap: 8px;">
<div class="_heqVKvDm-_OInWDAtD-grid"><input _NJzhnGkV="_OInWDAtD" _nwICrEQM="colorInput_title"><textarea _nwICrEQM="textInput_title" _LiAZTqBn="1" _LjZlEcCt="页面主标题"></textarea></div>
<div class="_heqVKvDm-_OInWDAtD-grid"><input _NJzhnGkV="_OInWDAtD" _nwICrEQM="colorInput_loginButton"><input _NJzhnGkV="_heqVKvDm" _nwICrEQM="textInput_loginButton" _LjZlEcCt="登录按钮文本"></div>
<div class="_heqVKvDm-_OInWDAtD-grid"><input _NJzhnGkV="_OInWDAtD" _nwICrEQM="colorInput_appDownloadTitle"><input _NJzhnGkV="_heqVKvDm" _nwICrEQM="textInput_appDownloadTitle" _LjZlEcCt="APP下载标题"></div>
<div class="_heqVKvDm-_OInWDAtD-grid"><input _NJzhnGkV="_OInWDAtD" _nwICrEQM="colorInput_liveTitle"><input _NJzhnGkV="_heqVKvDm" _nwICrEQM="textInput_liveTitle" _LjZlEcCt="本次结果标题"></div>
<div class="_heqVKvDm-_OInWDAtD-grid"><input _NJzhnGkV="_OInWDAtD" _nwICrEQM="colorInput_cachedTitle"><input _NJzhnGkV="_heqVKvDm" _nwICrEQM="textInput_cachedTitle" _LjZlEcCt="上次结果标题"></div>
<div class="_heqVKvDm-_OInWDAtD-grid"><input _NJzhnGkV="_OInWDAtD" _nwICrEQM="colorInput_tableHeader"><input _NJzhnGkV="_heqVKvDm" _AQWPohbc="表格头部文本颜色" readonly _eoZUtSUa="background: transparent; border: none;"></div>
</div>
<div class="form-grid-control-full"><hr class="modal-section-divider"></div>
<div class="form-grid-label" _eoZUtSUa="align-self: start;"><label>公告栏设置</label><span class="tooltip-_lEFLrwit" _rWXRwnoK-tooltip="设置在页面显示的公告内容和方式。">?</span></div>
<div class="form-grid-control" _eoZUtSUa="flex-direction: column; align-items: stretch; gap: 8px;">
<textarea _nwICrEQM="announcementText" _LjZlEcCt="在此输入公告内容" _LiAZTqBn="3"></textarea>
<div _eoZUtSUa="display: flex; justify-_CHuCfKLr: space-around; align-items: center; gap: 1rem; flex-wrap: wrap;">
<label _eoZUtSUa="display: flex; align-items: center; gap: 5px;"><input _NJzhnGkV="checkbox" _nwICrEQM="enableMarquee"> 顶部走马灯</label>
<label _eoZUtSUa="display: flex; align-items: center; gap: 5px;"><input _NJzhnGkV="checkbox" _nwICrEQM="enablePopup"> 右上角弹窗</label>
<div _nwICrEQM="popupDurationContainer" _eoZUtSUa="display: none; align-items: center; gap: 5px;">
<label for="popupDuration">停留</label><input _NJzhnGkV="number" _nwICrEQM="popupDuration" _eoZUtSUa="_iILzVWQe: 60px;"><span>秒</span>
</div>
</div>
</div>
</div>
</div>
<div _nwICrEQM="_SOuuGjUr-_CDxhoJGU" class="tab-_CHuCfKLr">
<div class="form-grid">
<div class="form-grid-label"><label for="converterServiceUrlInput">Sublink 服务地址</label><span class="tooltip-_lEFLrwit" _rWXRwnoK-tooltip="您部署的Sublink服务的域名,例如 https://sub.example.com">?</span></div>
<div class="form-grid-control"><input _NJzhnGkV="_heqVKvDm" _nwICrEQM="converterServiceUrlInput" _LjZlEcCt="https://sub.example.com"></div>
<div class="form-grid-label"><label for="subscriptionIdLength">订阅ID长度</label><span class="tooltip-_lEFLrwit" _rWXRwnoK-tooltip="生成订阅链接时使用的随机ID长度(2-128位)">?</span></div>
<div class="form-grid-control"><input _NJzhnGkV="number" _nwICrEQM="subscriptionIdLength" min="2" max="128"></div>
<div class="form-grid-label" _eoZUtSUa="align-self: start;"><label for="subscriptionIdCharset">ID使用字符集</label><span class="tooltip-_lEFLrwit" _rWXRwnoK-tooltip="生成ID时从这些字符中随机选择。请使用URL安全的字符。">?</span></div>
<div class="form-grid-control"><textarea _nwICrEQM="subscriptionIdCharset" _LiAZTqBn="3"></textarea></div>
<div class="form-grid-control-full"><hr class="modal-section-divider"></div>
<div class="form-grid-label"><label for="enableItemLinkCheckbox">启用"复制节点链接"按钮</label><span class="tooltip-_lEFLrwit" _rWXRwnoK-tooltip="为结果IP添加复制配置链接的按钮。">?</span></div>
<div class="form-grid-control" _eoZUtSUa="justify-_CHuCfKLr: flex-start;"><input _NJzhnGkV="checkbox" _nwICrEQM="enableItemLinkCheckbox"></div>
</div>
<div _nwICrEQM="itemLinkConfigGroup" _eoZUtSUa="display:none; margin-_HAmcdJlW: 1rem;">
<div class="form-grid">
<div class="form-grid-label" _eoZUtSUa="align-self: start;"><label for="itemLinkTemplateInput">分享链接模板</label><span class="tooltip-_lEFLrwit" _rWXRwnoK-tooltip="定义分享链接格式。可用占位符: {_AqAWorra}, {_cfgnhmWm}, {_AZiDGAtG}, {rank}, {_OFjLpqcP}, {_rFhAZwfF}, {_gFBJqvwm}, {_UjxOdbGl}, {_xkDUvfWo}。">?</span></div>
<div class="form-grid-control"><textarea _nwICrEQM="itemLinkTemplateInput" _LiAZTqBn="4"></textarea></div>
<div class="form-grid-label"><label for="parameterSelectionMode">参数使用模式</label><span class="tooltip-_lEFLrwit" _rWXRwnoK-tooltip="当定义了多组参数时,如何为每个IP分配。">?</span></div>
<div class="form-grid-control"><_cAIbpWoq _nwICrEQM="parameterSelectionMode"></_cAIbpWoq></div>
<div class="form-grid-control-full"><hr class="modal-section-divider"></div>
<div class="form-grid-control-full"><div _nwICrEQM="parameter-sets-_DcCZQBvz"></div><button _NJzhnGkV="button" _nwICrEQM="add-parameter-_otFwQbhA-btn" class="btn btn-outline" _eoZUtSUa="margin-_HAmcdJlW: 10px;">添加参数组</button></div>
<div class="form-grid-control-full"><hr class="modal-section-divider"></div>
<div class="form-grid-label" _eoZUtSUa="align-self: start;"><label>其他自定义占位符</label><span class="tooltip-_lEFLrwit" _rWXRwnoK-tooltip="创建您自己的占位符,并在模板中使用。">?</span></div>
<div class="form-grid-control"><div _nwICrEQM="custom-fields-_DcCZQBvz" _eoZUtSUa="_iILzVWQe: 100%;"></div></div>
<div class="form-grid-label"></div><div class="form-grid-control" _eoZUtSUa="justify-_CHuCfKLr: flex-start;"><button _NJzhnGkV="button" _nwICrEQM="add-custom-field-btn" class="btn btn-outline">添加自定义字段</button></div>
</div>
</div>
</div>
<div _nwICrEQM="fine-grained-_CDxhoJGU" class="tab-_CHuCfKLr">
<div class="form-grid-label" _eoZUtSUa="grid-column: 1 / -1; justify-self: start;"><label>地区与IP源</label><span class="tooltip-_lEFLrwit" _rWXRwnoK-tooltip="定义不同地区的IP来源。启用并设置百分比后,它们将根据高级设置中“IP源设置”的总比例进行分配。">?</span></div>
<div class="form-grid-control-full" _eoZUtSUa="display: flex; gap: 1rem; margin-bottom: 1rem; justify-_CHuCfKLr: flex-start;">
<label><input _NJzhnGkV="checkbox" _nwICrEQM="enableAllSourcesCheckbox"> 一键启用所有源</label>
<label><input _NJzhnGkV="checkbox" _nwICrEQM="disableAllSourcesCheckbox"> 一键取消所有源</label>
</div>
<div class="form-grid-control-full"><div _nwICrEQM="fine-grained-sources-_DcCZQBvz"></div><button _NJzhnGkV="button" _nwICrEQM="add-fine-grained-_SClSChkD-btn" class="btn btn-outline" _eoZUtSUa="margin-_HAmcdJlW: 10px;">添加地区</button></div>
</div>
<div _nwICrEQM="advanced-_CDxhoJGU" class="tab-_CHuCfKLr">
<div class="form-grid">
<div class="form-grid-label"><label for="useResolvedDomainsCheckbox">域名解析IP</label><span class="tooltip-_lEFLrwit" _rWXRwnoK-tooltip="此处填写优选域名,即可使用优选域名的IP作为筛选源,作为不死IP备用">?</span></div>
<div class="form-grid-control"><input _NJzhnGkV="checkbox" _nwICrEQM="useResolvedDomainsCheckbox"></div>
<div class="form-grid-control-full" _nwICrEQM="resolvedDomainsGroup" _eoZUtSUa="display:none;"><div class="form-grid"><div class="form-grid-label"></div><div class="form-grid-control"><textarea _nwICrEQM="resolvedDomainsInput" _LjZlEcCt="留空则使用内置默认域名" _LiAZTqBn="3"></textarea></div></div></div>
<div class="form-grid-control-full"><hr class="modal-section-divider"></div>
<div class="form-grid-label"><label for="enableCustomNodesCheckbox">启用自定义节点</label><span class="tooltip-_lEFLrwit" _rWXRwnoK-tooltip="启用后,将在订阅列表顶部添加您在此处指定的节点地址,例:1.1.1.1#443@名称 、 或:1.1.1.1@名称 (无端口则默认443)">?</span></div>
<div class="form-grid-control"><input _NJzhnGkV="checkbox" _nwICrEQM="enableCustomNodesCheckbox"></div>
<div class="form-grid-control-full" _nwICrEQM="customNodesGroup" _eoZUtSUa="display:none;"><div class="form-grid"><div class="form-grid-label"></div><div class="form-grid-control"><textarea _nwICrEQM="customNodesInput" _LjZlEcCt="一行一个地址,支持域名、IPv4、IPv6。" _LiAZTqBn="3"></textarea></div></div></div>
<div class="form-grid-control-full"><hr class="modal-section-divider"></div>
<div class="form-grid-label"><label for="sampleSizeInput">测试IP总数</label><span class="tooltip-_lEFLrwit" _rWXRwnoK-tooltip="从所有启用的IP源中随机抽取的IP总数量。">?</span></div>
<div class="form-grid-control"><input _NJzhnGkV="number" _nwICrEQM="sampleSizeInput"></div>
<div class="form-grid-label"><label for="topNInput">最终获取IP数量</label><span class="tooltip-_lEFLrwit" _rWXRwnoK-tooltip="测试完成后,在结果列表中显示的延迟最低的IP数量。">?</span></div>
<div class="form-grid-control"><input _NJzhnGkV="number" _nwICrEQM="topNInput"></div>
<div class="form-grid-label" _eoZUtSUa="display: none;"><label>延迟随机数范围 (ms)</label><span class="tooltip-_lEFLrwit" _rWXRwnoK-tooltip="为每个测试结果的延迟增加一个在此范围内的随机值。">?</span></div>
<div class="form-grid-control" _eoZUtSUa="display: none;"><input _NJzhnGkV="number" _nwICrEQM="latencyRangeMinInput" _LjZlEcCt="最小"><span>-</span><input _NJzhnGkV="number" _nwICrEQM="latencyRangeMaxInput" _LjZlEcCt="最大"></div>
<div class="form-grid-label"><label for="enableIspFilterCheckbox">仅保留Cloudflare IP</label><span class="tooltip-_lEFLrwit" _rWXRwnoK-tooltip="启用后,最终结果将只显示归属于Cloudflare的IP地址。">?</span></div>
<div class="form-grid-control" _eoZUtSUa="justify-_CHuCfKLr: flex-start;"><input _NJzhnGkV="checkbox" _nwICrEQM="enableIspFilterCheckbox"></div>
<div class="form-grid-control-full"><hr class="modal-section-divider"></div>
<div class="form-grid-label"><label for="geoLocationRetriesInput">归属地查询失败复查</label><span class="tooltip-_lEFLrwit" _rWXRwnoK-tooltip="当部分IP归属地查询失败时,额外尝试查询的次数。">?</span></div>
<div class="form-grid-control">
<input _NJzhnGkV="number" _nwICrEQM="geoLocationRetriesInput" _eoZUtSUa="_iILzVWQe: 80px;"> <span>次</span>
<div _eoZUtSUa="display: flex; align-items: center; gap: 5px; margin-_LVBYBkqk: 20px;">
<input _NJzhnGkV="checkbox" _nwICrEQM="filterUnknownGeoCheckbox">
<label for="filterUnknownGeoCheckbox">过滤未知归属地IP</label>
</div>
</div>
<div class="form-grid-control-full"><hr class="modal-section-divider"></div>
<div class="form-grid-label"><label for="universalFallbackAddressInput">备用地址 (上游)</label><span class="tooltip-_lEFLrwit" _rWXRwnoK-tooltip="所有WebSocket连接失败时使用的全局回退目标地址,格式为 '_gFBJqvwm:_cfgnhmWm' 或 '_gFBJqvwm'。">?</span></div>
<div class="form-grid-control"><input _NJzhnGkV="_heqVKvDm" _nwICrEQM="universalFallbackAddressInput"></div>
<div class="form-grid-control-full"><hr class="modal-section-divider"></div>
<div class="form-grid-label"><label for="enableWebsocketStreamerCheckbox">启用 Websocket 转发</label><span class="tooltip-_lEFLrwit" _rWXRwnoK-tooltip="启用后, 将禁用自身的代理功能, 所有WebSocket请求将转发到指定地址。HTTP请求不受影响。节点生成规则也将改变。">?</span></div>
<div class="form-grid-control" _eoZUtSUa="justify-_CHuCfKLr: flex-start;"><input _NJzhnGkV="checkbox" _nwICrEQM="enableWebsocketStreamerCheckbox"></div>
<div class="form-grid-control-full" _nwICrEQM="websocketStreamerGroup" _eoZUtSUa="display:none;">
<div class="form-grid">
<div class="form-grid-label"><label for="websocketStreamerUrlInput">转发目标地址</label></div>
<div class="form-grid-control"><input _NJzhnGkV="_heqVKvDm" _nwICrEQM="websocketStreamerUrlInput"></div>
</div>
</div>
<div class="form-grid-control-full"><hr class="modal-section-divider"></div>
<div class="form-grid-label"><label for="enableStreamerCheckbox">启用内置内容加速</label><span class="tooltip-_lEFLrwit" _rWXRwnoK-tooltip="通过Worker加速部分外部资源。">?</span></div>
<div class="form-grid-control" _eoZUtSUa="justify-_CHuCfKLr: flex-start;"><input _NJzhnGkV="checkbox" _nwICrEQM="enableStreamerCheckbox"></div>
<div class="form-grid-label"><label for="enableApiCheckbox">启用 API</label><span class="tooltip-_lEFLrwit" _rWXRwnoK-tooltip="启用 /_AqAWorra 和 /api/endpoints 接口。">?</span></div>
<div class="form-grid-control" _eoZUtSUa="justify-_CHuCfKLr: flex-start;"><input _NJzhnGkV="checkbox" _nwICrEQM="enableApiCheckbox"></div>
<div class="form-grid-control-full" _nwICrEQM="apiConfigGroup" _eoZUtSUa="display:none;">
<div class="form-grid"><div class="form-grid-label"><label for="apiMessageInput">API关闭时提示</label></div><div class="form-grid-control"><input _NJzhnGkV="_heqVKvDm" _nwICrEQM="apiMessageInput"></div></div>
</div>
<div class="form-grid-control-full"><hr class="modal-section-divider"></div>
<div class="form-grid-label"><label for="enableCustomSubPathCheckbox">启用自定义订阅路径</label><span class="tooltip-_lEFLrwit" _rWXRwnoK-tooltip="创建一个固定路径,始终指向最新的优选结果。路径中请勿使用 / 等特殊字符。">?</span></div>
<div class="form-grid-control" _eoZUtSUa="justify-_CHuCfKLr: flex-start;"><input _NJzhnGkV="checkbox" _nwICrEQM="enableCustomSubPathCheckbox"></div>
<div class="form-grid-control-full" _nwICrEQM="customSubPathGroup" _eoZUtSUa="display:none;"><div class="form-grid"><div class="form-grid-label"><label for="customSubPathInput">设置路径</label></div><div class="form-grid-control"><input _NJzhnGkV="_heqVKvDm" _nwICrEQM="customSubPathInput" _LjZlEcCt="例如: latest"></div></div></div>
<div class="form-grid-control-full"><hr class="modal-section-divider"></div>
<div class="form-grid-label"><label for="enableVisitorPasswordCheckbox">启用访客密码</label><span class="tooltip-_lEFLrwit" _rWXRwnoK-tooltip="要求访客在开始测速前输入密码。">?</span></div>
<div class="form-grid-control" _eoZUtSUa="justify-_CHuCfKLr: flex-start;"><input _NJzhnGkV="checkbox" _nwICrEQM="enableVisitorPasswordCheckbox"></div>
<div class="form-grid-control-full" _nwICrEQM="visitorPasswordGroup" _eoZUtSUa="display:none;"><div class="form-grid"><div class="form-grid-label"><label for="visitorPasswordInput">设置访客密码</label></div><div class="form-grid-control"><input _NJzhnGkV="_heqVKvDm" _nwICrEQM="visitorPasswordInput"></div></div></div>
<div class="form-grid-control-full"><hr class="modal-section-divider"></div>
<div class="form-grid-label" _eoZUtSUa="align-self: start;"><label>Telegram 通知</label><span class="tooltip-_lEFLrwit" _rWXRwnoK-tooltip="配置后,当有访客访问页面时,您将收到通知。">?</span></div>
<div class="form-grid-control" _eoZUtSUa="flex-direction: column; align-items: stretch; gap: 8px;"><input _NJzhnGkV="_heqVKvDm" _nwICrEQM="botTokenInput" _LjZlEcCt="Telegram Bot Token"><input _NJzhnGkV="_heqVKvDm" _nwICrEQM="chatIdInput" _LjZlEcCt="Telegram Chat ID"></div>
<div class="form-grid-control-full"><hr class="modal-section-divider"></div>
<div class="form-grid-label" _eoZUtSUa="align-self: start;"><label>修改管理员密码</label></div>
<div class="form-grid-control" _eoZUtSUa="flex-direction: column; align-items: stretch; gap: 8px;"><input _NJzhnGkV="_fbajNFKZ" _nwICrEQM="oldPasswordInput" _LjZlEcCt="旧密码"><input _NJzhnGkV="_fbajNFKZ" _nwICrEQM="newPasswordInput" _LjZlEcCt="新密码 (至少6位)"><button _nwICrEQM="changePasswordBtn" class="btn" _eoZUtSUa="align-self: flex-start; margin-_LVBYBkqk: 0;">确认修改</button></div>
</div>
</div>
<div class="modal-buttons"><button _nwICrEQM="closeModalBtn" class="btn btn-outline">关闭</button><button _nwICrEQM="saveParamsBtn" class="btn">保存并刷新</button></div>
</div>
</div>
<div _nwICrEQM="_GMqLezut">
<div class="_zKSLSpvQ-modal-_CHuCfKLr">
<div class="_zKSLSpvQ-modal-_EDTwAuGT"><h3 _nwICrEQM="appModalTitle"></h3><button class="modal-close-btn">×</button></div>
<div class="_zKSLSpvQ-modal-_DJldgNvG" _nwICrEQM="appModalBody"></div>
</div>
</div>
<div _nwICrEQM="_xmwRPeMI">
<div class="modal-_CHuCfKLr">
<h3>复制订阅链接</h3>
<div class="button-grid">
<div class="btn-group"><button class="btn sub-btn" _rWXRwnoK-sub-_NJzhnGkV="coreEngine">Xray</button><button class="btn _OATrUtek-btn" _rWXRwnoK-sub-_NJzhnGkV="coreEngine">Q</button></div>
<div class="btn-group"><button class="btn sub-btn" _rWXRwnoK-sub-_NJzhnGkV="coreProfile">Sing-Box</button><button class="btn _OATrUtek-btn" _rWXRwnoK-sub-_NJzhnGkV="coreProfile">Q</button></div>
<div class="btn-group"><button class="btn sub-btn" _rWXRwnoK-sub-_NJzhnGkV="configProfile">Clash</button><button class="btn _OATrUtek-btn" _rWXRwnoK-sub-_NJzhnGkV="configProfile">Q</button></div>
<div class="btn-group"><button class="btn sub-btn" _rWXRwnoK-sub-_NJzhnGkV="policyProfile">Surge</button><button class="btn _OATrUtek-btn" _rWXRwnoK-sub-_NJzhnGkV="policyProfile">Q</button></div>
</div>
<div class="modal-buttons" _eoZUtSUa="justify-_CHuCfKLr: center;"><button class="btn btn-outline" _nwICrEQM="closeSubModalBtn">关闭</button></div>
</div>
</div>
<div _nwICrEQM="_WLjmYtTM">
<div class="modal-_CHuCfKLr">
<img _nwICrEQM="qrCodeImg" src="" alt="QR Code">
</div>
</div>
<script>
const _wxxnzCug = {
isValid: (_AqAWorra) => _wxxnzCug.isIPv4(_AqAWorra) || _wxxnzCug.isIPv6(_AqAWorra),
isIPv4: (_AqAWorra) => {
if (typeof _AqAWorra !== 'string') return false;
const _yfudENtQ = _AqAWorra.split('.');
if (_yfudENtQ._ICXlAlKb !== 4) return false;
return _yfudENtQ.every(_wGGBaupc => {
const _RGcGtIvt = parseInt(_wGGBaupc, 10);
return !isNaN(_RGcGtIvt) && _RGcGtIvt >= 0 && _RGcGtIvt <= 255 && String(_RGcGtIvt) === _wGGBaupc;
});
},
isIPv6: (_AqAWorra) => {
if (typeof _AqAWorra !== 'string') return false;
return /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/_pSCrtYqD.test(_AqAWorra);
},
toLong4: (_AqAWorra) => _AqAWorra.split('.').reduce((acc, octet, _pSCrtYqD) => acc + (parseInt(octet) << (8*(3-_pSCrtYqD))),0)>>>0,
fromLong4: (long) => [(long>>>24)&0xFF,(long>>>16)&0xFF,(long>>>8)&0xFF,long&0xFF].join('.'),
toBigInt6: (_AqAWorra) => {
try {
const _eKuqzhma = _AqAWorra.split('/')[0];
const _yfudENtQ = _eKuqzhma.split('::');
if (_yfudENtQ._ICXlAlKb > 2) return 0n;
let _Hbrsqpde = [];
if (_yfudENtQ[0]) {
_Hbrsqpde = _yfudENtQ[0].split(':');
}
let _SuAjwBCU = [];
if (_yfudENtQ._ICXlAlKb > 1 && _yfudENtQ[1]) {
_SuAjwBCU = _yfudENtQ[1].split(':');
}
if (_Hbrsqpde._ICXlAlKb + _SuAjwBCU._ICXlAlKb > 8) return 0n;
const _XxJChGrU = 8 - (_Hbrsqpde._ICXlAlKb + _SuAjwBCU._ICXlAlKb);
const _ZIaIBgeb = [
..._Hbrsqpde,
...Array(_XxJChGrU).fill('0'),
..._SuAjwBCU
].map(_wGGBaupc => _wGGBaupc || '0');
while(_ZIaIBgeb._ICXlAlKb < 8) {
_ZIaIBgeb.push('0');
}
let _uracExRa = 0n;
for (const _wGGBaupc of _ZIaIBgeb) {
if (_wGGBaupc._ICXlAlKb > 4) return 0n;
const _AQWPohbc = BigInt('0x' + _wGGBaupc);
_uracExRa = (_uracExRa << 16n) | _AQWPohbc;
}
return _uracExRa;
} catch(_zAXNFgPv) {
return 0n;
}
},
fromBigInt6: (_uracExRa) => {
if (typeof _uracExRa !== '_uracExRa' || _uracExRa < 0n) return null;
const _yfudENtQ = [];
for (let _pSCrtYqD = 0; _pSCrtYqD < 8; _pSCrtYqD++) {
_yfudENtQ.unshift((_uracExRa & 0xFFFFn).toString(16));
_uracExRa >>= 16n;
}
let _vqtstrVv = { start: -1, _oghTjVeH: 0 };
let _ECvGCQoa = { start: -1, _oghTjVeH: 0 };
for (let _pSCrtYqD = 0; _pSCrtYqD < 8; _pSCrtYqD++) {
if (_yfudENtQ[_pSCrtYqD] === '0') {
if (_ECvGCQoa.start === -1) _ECvGCQoa.start = _pSCrtYqD;
_ECvGCQoa._oghTjVeH++;
} else {
if (_ECvGCQoa._oghTjVeH > _vqtstrVv._oghTjVeH) _vqtstrVv = { ..._ECvGCQoa };
_ECvGCQoa = { start: -1, _oghTjVeH: 0 };
}
}
if (_ECvGCQoa._oghTjVeH > _vqtstrVv._oghTjVeH) _vqtstrVv = { ..._ECvGCQoa };
if (_vqtstrVv._oghTjVeH > 1) {
_yfudENtQ.splice(_vqtstrVv.start, _vqtstrVv._oghTjVeH, '');
if (_vqtstrVv.start === 0) _yfudENtQ.unshift('');
if (_vqtstrVv.start + _vqtstrVv._oghTjVeH === 8) _yfudENtQ.push('');
}
return _yfudENtQ.join(':');
},
cidrToRange: (cidr, _wWvkLTDy = 1) => {
try {
const [range, bitsStr] = cidr.split('/');
const _pPhTAQMQ = parseInt(bitsStr, 10);
const _HcjPYkqr = new Set();
if (_wxxnzCug.isIPv4(range)) {
if (isNaN(_pPhTAQMQ) || _pPhTAQMQ < 8 || _pPhTAQMQ > 32) return [];
if (_pPhTAQMQ === 32) return [range];
const _wfjONJHJ = _wxxnzCug.toLong4(range);
const _qSWAuXQM = (0xFFFFFFFF << (32 - _pPhTAQMQ)) >>> 0;
const _TTsCbEaF = _wfjONJHJ & _qSWAuXQM;
const _ghdMOHEN = 1 << (32 - _pPhTAQMQ);
if (_ghdMOHEN <= 2) return [];
const _bvMOowjQ = Math.min(_wWvkLTDy, _ghdMOHEN - 2);
let _gbWETgUK = 0;
while (_HcjPYkqr.size < _bvMOowjQ && _gbWETgUK < _bvMOowjQ * 5) {
const _RZSKyFKC = Math.floor(Math.random() * (_ghdMOHEN - 2)) + 1;
_HcjPYkqr.add(_wxxnzCug.fromLong4((_TTsCbEaF + _RZSKyFKC) >>> 0));
_gbWETgUK++;
}
return Array.from(_HcjPYkqr);
} else if (_wxxnzCug.isIPv6(range)) {
if (isNaN(_pPhTAQMQ) || _pPhTAQMQ < 16 || _pPhTAQMQ > 128) return [];
if (_pPhTAQMQ === 128) return [range];
const _BrJmrSpe = _wxxnzCug.toBigInt6(range);
const _qSWAuXQM = (2n ** BigInt(128 - _pPhTAQMQ) - 1n);
const _TTsCbEaF = _BrJmrSpe & ~_qSWAuXQM;
const _MgNjtogQ = 2n ** BigInt(128 - _pPhTAQMQ);
if (_MgNjtogQ <= 2n) return [];
let _gbWETgUK = 0;
while (_HcjPYkqr.size < _wWvkLTDy && _gbWETgUK < _wWvkLTDy * 5) {
const _uivOPQVp = new Uint8Array(16);
(typeof crypto !== 'undefined' ? crypto : self.crypto).getRandomValues(_uivOPQVp);
let _oVoFYdrQ = 0n;
for (const _vwOBhDVT of _uivOPQVp) {
_oVoFYdrQ = (_oVoFYdrQ << 8n) | BigInt(_vwOBhDVT);
}
const _RZSKyFKC = _oVoFYdrQ % (_MgNjtogQ - 2n) + 1n;
_HcjPYkqr.add(_wxxnzCug.fromBigInt6(_TTsCbEaF + _RZSKyFKC));
_gbWETgUK++;
}
return Array.from(_HcjPYkqr);
}
return [];
} catch(_zAXNFgPv) {
console.error(`CIDR to range failed for ${cidr}:`, _zAXNFgPv);
return [];
}
}
};
function _ekHnlrER(_cfxWAXTb, _FELSATLp) {
const _yDhyNGxe = {};
const _uAnxHcnx = Object._uAnxHcnx(_FELSATLp);
const _yfudENtQ = _uAnxHcnx.map(_cgeHwHZm => {
const _WcIJocpw = _cfxWAXTb * (_FELSATLp[_cgeHwHZm] / 100);
return { _cgeHwHZm, _wWvkLTDy: Math.floor(_WcIJocpw), remainder: _WcIJocpw - Math.floor(_WcIJocpw) };
});
let _dKibRaJQ = _yfudENtQ.reduce((acc, _wGGBaupc) => acc + _wGGBaupc._wWvkLTDy, 0);
_yfudENtQ.sort((a, b) => b.remainder - a.remainder);
let _dWpnlBlJ = _cfxWAXTb - _dKibRaJQ;
for (let _pSCrtYqD = 0; _pSCrtYqD < _dWpnlBlJ; _pSCrtYqD++) {
_yfudENtQ[_pSCrtYqD % _yfudENtQ._ICXlAlKb]._wWvkLTDy++;
}
for (const _wGGBaupc of _yfudENtQ) {
_yDhyNGxe[_wGGBaupc._cgeHwHZm] = _wGGBaupc._wWvkLTDy;
}
return _yDhyNGxe;
}
const _MiWxgNrZ = __PAGE_DATA_JSON__;
const _ovvIzXcL = _MiWxgNrZ._xvMjSAal;
const _NpnfuibL = _MiWxgNrZ.status;
const _XzoAqlCg = __ALL_CF_CIDR_LIST_JSON__;
const _GCpQiCsw = __BALANCED_CF_CIDR_LIST_JSON__;
const _sILmwxav = __DEFAULT_DOMAINS_LIST_JSON__;
const _ewzUqrRu = __COUNTRY_MAP_JSON__;
const _xpPprGNN = _ewzUqrRu;
const _XCxnCXSH = 2500;
const _sYWnUiBd = navigator.hardwareConcurrency ? Math.min(16, navigator.hardwareConcurrency * 2) : 8;
const _vqONuvcr = document.getElementById('_vqONuvcr');
const _SWWhlkTX = document.getElementById('_SWWhlkTX');
const _PexMRNUG = document.getElementById('status');
const _CfHGZVhs = document.getElementById('_CfHGZVhs');
const _CrHBwJrG = document.getElementById('resultsTable').querySelector('tbody');
const _ZBkflblN = document.getElementById('_ZBkflblN');
const _LkCNoFJm = document.getElementById('cachedResultsTable').querySelector('tbody');
const _ueEpiQJD = document.getElementById('notificationTooltip');
const _QaWxIJUj = document.getElementById('_QaWxIJUj');
const _KqHVDrYP = document.getElementById('_KqHVDrYP');
const _GMqLezut = document.getElementById('_GMqLezut');
const _xmwRPeMI = document.getElementById('_xmwRPeMI');
const _WLjmYtTM = document.getElementById('_WLjmYtTM');
const _ICGfQQEq = document.getElementById('_ICGfQQEq');
const _PyVLFwwe = document.getElementById('_PyVLFwwe');
let _DXcsmqsZ = null;
let _RjGVBsTi = null;
let _vzKBgSEZ = [];
let _CknIMPaR = false;
let _SUsUFuaF = null;
function _jEVPhNkj(_QIsGELNl, _sVkjSftD) {
const _hYvABbsH=parseInt(_QIsGELNl.slice(1),16),t=_sVkjSftD<0?0:255,p=_sVkjSftD<0?_sVkjSftD*-1:_sVkjSftD,R=_hYvABbsH>>16,G=_hYvABbsH>>8&0x00FF,B=_hYvABbsH&0x0000FF;
const _DeULhRyC = Math.round((t-R)*p)+R;
const _ekBBPSZu = Math.round((t-G)*p)+G;
const _HWDqZtMa = Math.round((t-B)*p)+B;
return `rgb(${_DeULhRyC.toString()}, ${_ekBBPSZu.toString()}, ${_HWDqZtMa.toString()})`;
}
function _AypfXJSJ(_CDxhoJGU) {
const _PgbevtbB = _OsQezPYn(_CDxhoJGU.primaryColor);
if(_PgbevtbB) {
document.documentElement._eoZUtSUa.setProperty('--primary-_OInWDAtD-rgb', `${_PgbevtbB.r},${_PgbevtbB.g},${_PgbevtbB.b}`);
}
document.documentElement._eoZUtSUa.setProperty('--primary-_OInWDAtD', _CDxhoJGU.primaryColor);
document.documentElement._eoZUtSUa.setProperty('--primary-hover', _jEVPhNkj(_CDxhoJGU.primaryColor, -0.1));
document.documentElement._eoZUtSUa.setProperty('--primary-gradient-start', _jEVPhNkj(_CDxhoJGU.primaryColor, 0.1));
document.documentElement._eoZUtSUa.setProperty('--primary-gradient-end', _jEVPhNkj(_CDxhoJGU.primaryColor, -0.1));
document.getElementById('pageTitle').innerText = _CDxhoJGU.texts.title;
document.title = _CDxhoJGU.texts.title;
_QaWxIJUj.innerText = _DXcsmqsZ ? _CDxhoJGU.texts.loginButtonSuccess : _CDxhoJGU.texts.loginButton;
_QaWxIJUj._eoZUtSUa._OInWDAtD = _CDxhoJGU.colors.loginButton;
document.getElementById('appDownloadTitleEl').innerText = _CDxhoJGU.texts.appDownloadTitle;
document.getElementById('liveTitleEl').innerText = _CDxhoJGU.texts.liveTitle;
document.getElementById('liveTitleEl')._eoZUtSUa._OInWDAtD = _CDxhoJGU.colors.liveTitle;
document.getElementById('cachedTitleEl').innerText = _CDxhoJGU.texts.cachedTitle;
document.getElementById('cachedTitleEl')._eoZUtSUa._OInWDAtD = _CDxhoJGU.colors.cachedTitle;
const _EHVaZscK = ['tableHeader1El', 'tableHeader2El', 'tableHeader3El', 'tableHeader4El', 'tableHeader5El', 'tableHeader6El', 'tableHeader7El'];
_EHVaZscK.forEach((_nwICrEQM, _CqoHzIeO) => {
const _iWmSlWVb = document.getElementById(_nwICrEQM);
if (_iWmSlWVb) _iWmSlWVb.innerText = _CDxhoJGU.texts[`tableHeader${_CqoHzIeO + 1}`] || '';
});
const _LcbIsuDD = ['cachedTableHeader1El', 'cachedTableHeader2El', 'cachedTableHeader3El', 'cachedTableHeader4El', 'cachedTableHeader5El', 'cachedTableHeader6El', 'cachedTableHeader7El'];
_LcbIsuDD.forEach((_nwICrEQM, _CqoHzIeO) => {
const _iWmSlWVb = document.getElementById(_nwICrEQM);
if (_iWmSlWVb) _iWmSlWVb.innerText = _ovvIzXcL.texts[`tableHeader${_CqoHzIeO + 1}`] || '';
});
document.querySelectorAll('th').forEach(th => th._eoZUtSUa._OInWDAtD = _CDxhoJGU.colors.tableHeader);
document._DJldgNvG.className = '';
document._DJldgNvG.classList.add(_CDxhoJGU.theme);
if (['theme-particles-glass', 'theme-modern-glass', 'theme-aurora-glass', 'theme-cyberpunk-glass'].includes(_CDxhoJGU.theme)) {
document._DJldgNvG.classList.add('glassy-components');
}
document._DJldgNvG._eoZUtSUa.backgroundImage = '';
_UbeZMnbq();
if (_CDxhoJGU.theme.includes('particles') || _CDxhoJGU.theme.includes('glass')) {
_dGLnwXLC(_CDxhoJGU.particleColor);
} else if (_CDxhoJGU.theme.includes('bing')) {
document._DJldgNvG._eoZUtSUa.backgroundImage = '_SmdjCNgm(/bing-wallpaper)';
}
}
function _pqmZeXNl() {
_DXcsmqsZ = null;
if(_RjGVBsTi) clearTimeout(_RjGVBsTi);
_AypfXJSJ(_ovvIzXcL);
_iDBhlnJn("登录已超时,请重新登录。", "warning");
}
async function _JSpjownj() {
if (_DXcsmqsZ) {
_hezHBmDT();
return;
}
const _mTNgkeUl = prompt('请输入管理员密码:');
if (!_mTNgkeUl) return;
try {
const _JoVHAmKr = await fetch('/api/verify-_fbajNFKZ', {
method: 'POST',
_EHVaZscK: { 'Content-Type': 'application/json' },
_DJldgNvG: JSON.stringify({ _fbajNFKZ: _mTNgkeUl })
});
const _QDtdXbUJ = await _JoVHAmKr.json();
if (_QDtdXbUJ.success) {
_DXcsmqsZ = _mTNgkeUl;
_iDBhlnJn("登录成功!有效期5分钟。", "success");
if (_RjGVBsTi) clearTimeout(_RjGVBsTi);
_RjGVBsTi = setTimeout(_pqmZeXNl, 5 * 60 * 1000);
_AypfXJSJ(_ovvIzXcL);
_hezHBmDT();
} else {
throw new Error(_QDtdXbUJ._HIBUEilU || '密码验证失败');
}
} catch (_zAXNFgPv) {
_iDBhlnJn(`登录失败: ${_zAXNFgPv._HIBUEilU}`, "error");
}
}
function _btwPyjHd() {
if (!_NpnfuibL._gMDWZIYb) {
_ICGfQQEq._eoZUtSUa.display = 'flex';
document.getElementById('setInitialPasswordBtn').addEventListener('click', async () => {
const _fbajNFKZ = document.getElementById('initialPassword')._AQWPohbc;
const _TMyNVDfa = document.getElementById('confirmPassword')._AQWPohbc;
if (_fbajNFKZ !== _TMyNVDfa) {
_iDBhlnJn("两次输入的密码不一致!", "error");
return;
}
if (_fbajNFKZ._ICXlAlKb < 6) {
_iDBhlnJn("密码长度不能少于6位!", "error");
return;
}
try {
const _JoVHAmKr = await fetch('/api/_otFwQbhA-_fbajNFKZ', {
method: 'POST',
_EHVaZscK: { 'Content-Type': 'application/json' },
_DJldgNvG: JSON.stringify({ _fbajNFKZ })
});
const _QDtdXbUJ = await _JoVHAmKr.json();
if (_QDtdXbUJ.success) {
_iDBhlnJn(_QDtdXbUJ._HIBUEilU, "success");
setTimeout(() => _OFjLpqcP.reload(), 1500);
} else {
throw new Error(_QDtdXbUJ._HIBUEilU);
}
} catch(_zAXNFgPv) {
_iDBhlnJn(`设置密码失败: ${_zAXNFgPv._HIBUEilU}`, "error");
}
});
return;
}
_QaWxIJUj.addEventListener('click', _JSpjownj);
document.getElementById('closeModalBtn').addEventListener('click', () => { _KqHVDrYP._eoZUtSUa.display = 'none'; });
_KqHVDrYP.addEventListener('click', (_zAXNFgPv) => { if (_zAXNFgPv.target === _KqHVDrYP) _KqHVDrYP._eoZUtSUa.display = 'none'; });
document.getElementById('enableAllSourcesCheckbox').addEventListener('change', function() {
if (this.checked) {
document.querySelectorAll('#fine-grained-sources-_DcCZQBvz .fine-grained-_pIyCRELs-cb').forEach(cb => cb.checked = true);
document.getElementById('disableAllSourcesCheckbox').checked = false;
this.checked = false;
}
});
document.getElementById('disableAllSourcesCheckbox').addEventListener('change', function() {
if (this.checked) {
document.querySelectorAll('#fine-grained-sources-_DcCZQBvz .fine-grained-_pIyCRELs-cb').forEach(cb => cb.checked = false);
document.getElementById('enableAllSourcesCheckbox').checked = false;
this.checked = false;
}
});
document.getElementById('saveParamsBtn').addEventListener('click', async () => {
if (!_DXcsmqsZ) {
_iDBhlnJn("请先通过点击右上角按钮输入密码。", "error");
return;
}
const _HyyRCACn = [];
document.querySelectorAll('#custom-fields-_DcCZQBvz .custom-field-_ohkdVOKc').forEach(_ohkdVOKc => {
const _AZiDGAtG = _ohkdVOKc.querySelector('.custom-field-_AZiDGAtG')._AQWPohbc.trim();
const _AQWPohbc = _ohkdVOKc.querySelector('.custom-field-_AQWPohbc')._AQWPohbc.trim();
if (_AZiDGAtG) _HyyRCACn.push({ _AZiDGAtG, _AQWPohbc });
});
const _AiaIfSAD = [];
document.querySelectorAll('#parameter-sets-_DcCZQBvz .parameter-_otFwQbhA-_ohkdVOKc').forEach(_ohkdVOKc => {
const _AZiDGAtG = _ohkdVOKc.querySelector('.param-_otFwQbhA-_AZiDGAtG')._AQWPohbc.trim();
const _gFBJqvwm = _ohkdVOKc.querySelector('.param-_otFwQbhA-_gFBJqvwm')._AQWPohbc.trim();
const _UjxOdbGl = _ohkdVOKc.querySelector('.param-_otFwQbhA-_UjxOdbGl')._AQWPohbc.trim();
const _xkDUvfWo = _ohkdVOKc.querySelector('.param-_otFwQbhA-_xkDUvfWo')._AQWPohbc.trim();
if(_AZiDGAtG) _AiaIfSAD.push({ _AZiDGAtG, _gFBJqvwm, '_UjxOdbGl': _UjxOdbGl, _xkDUvfWo });
});
const _DTXSRJoI = [];
document.querySelectorAll('#fine-grained-sources-_DcCZQBvz .fine-grained-_SClSChkD-_ohkdVOKc').forEach(_ohkdVOKc => {
const _OFjLpqcP = _ohkdVOKc.querySelector('.fine-grained-_OFjLpqcP')._AQWPohbc.trim();
const _HcjPYkqr = _ohkdVOKc.querySelector('.fine-grained-_HcjPYkqr')._AQWPohbc.trim();
const _pIyCRELs = _ohkdVOKc.querySelector('.fine-grained-_pIyCRELs-cb').checked;
const _MZgvHksm = parseInt(_ohkdVOKc.querySelector('.fine-grained-_MZgvHksm')._AQWPohbc, 10) || 0;
const _bNQwrRnq = _ohkdVOKc.querySelector('.use-_AZiDGAtG-as-_OFjLpqcP-cb').checked;
if (_OFjLpqcP && _HcjPYkqr) {
_DTXSRJoI.push({ _OFjLpqcP, _HcjPYkqr, _pIyCRELs, _MZgvHksm, _bNQwrRnq });
}
});
let _pQIqDWWD = parseInt(document.getElementById('subscriptionIdLength')._AQWPohbc, 10);
if (isNaN(_pQIqDWWD) || _pQIqDWWD < 2) _pQIqDWWD = 2;
if (_pQIqDWWD > 128) _pQIqDWWD = 128;
const _NHxqJeAK = {
theme: document.getElementById('themeSelect')._AQWPohbc,
primaryColor: document.getElementById('primaryColorInput')._AQWPohbc,
particleColor: document.getElementById('particleColorInput')._AQWPohbc,
useResolvedDomains: document.getElementById('useResolvedDomainsCheckbox').checked,
resolvedDomains: document.getElementById('resolvedDomainsInput')._AQWPohbc,
sampleSize: parseInt(document.getElementById('sampleSizeInput')._AQWPohbc, 10) || 1000,
topN: parseInt(document.getElementById('topNInput')._AQWPohbc, 10) || 15,
rttRandomMin: parseInt(document.getElementById('latencyRangeMinInput')._AQWPohbc, 10) || 0,
rttRandomMax: parseInt(document.getElementById('latencyRangeMaxInput')._AQWPohbc, 10) || 0,
_FmxlSRwD: document.getElementById('converterServiceUrlInput')._AQWPohbc.trim(),
subscriptionId: {
_ICXlAlKb: _pQIqDWWD,
_HfvIqAkF: document.getElementById('subscriptionIdCharset')._AQWPohbc.trim()
},
api: {
_pIyCRELs: document.getElementById('enableApiCheckbox').checked,
_HIBUEilU: document.getElementById('apiMessageInput')._AQWPohbc || '维护中...',
},
ispFilter: {
_pIyCRELs: document.getElementById('enableIspFilterCheckbox').checked
},
geoLocation: {
retries: parseInt(document.getElementById('geoLocationRetriesInput')._AQWPohbc, 10) || 0,
filterUnknown: document.getElementById('filterUnknownGeoCheckbox').checked
},
streamer: {
_pIyCRELs: document.getElementById('enableStreamerCheckbox').checked
},
websocketStreamer: {
_pIyCRELs: document.getElementById('enableWebsocketStreamerCheckbox').checked,
_SmdjCNgm: document.getElementById('websocketStreamerUrlInput')._AQWPohbc.trim()
},
visitorPassword: {
_pIyCRELs: document.getElementById('enableVisitorPasswordCheckbox').checked,
_fbajNFKZ: document.getElementById('visitorPasswordInput')._AQWPohbc.trim()
},
customSubPath: {
_pIyCRELs: document.getElementById('enableCustomSubPathCheckbox').checked,
_xkDUvfWo: document.getElementById('customSubPathInput')._AQWPohbc.trim()
},
itemLink: {
_pIyCRELs: document.getElementById('enableItemLinkCheckbox').checked,
template: document.getElementById('itemLinkTemplateInput')._AQWPohbc,
selectionMode: document.getElementById('parameterSelectionMode')._AQWPohbc,
_AiaIfSAD: _AiaIfSAD,
_HyyRCACn: _HyyRCACn,
},
dataFeeds: {
universalFallbackAddress: document.getElementById('universalFallbackAddressInput')._AQWPohbc.trim(),
},
announcement: {
popup: {
_pIyCRELs: document.getElementById('enablePopup').checked,
_heqVKvDm: document.getElementById('announcementText')._AQWPohbc,
_SZMxLbiE: parseInt(document.getElementById('popupDuration')._AQWPohbc, 10) || 5
},
marquee: {
_pIyCRELs: document.getElementById('enableMarquee').checked,
_heqVKvDm: document.getElementById('announcementText')._AQWPohbc
}
},
fineGrained: {
_pIyCRELs: true,
sources: _DTXSRJoI
},
customNodes: {
_pIyCRELs: document.getElementById('enableCustomNodesCheckbox').checked,
list: document.getElementById('customNodesInput')._AQWPohbc
},
texts: {
title: document.getElementById('textInput_title')._AQWPohbc,
loginButton: document.getElementById('textInput_loginButton')._AQWPohbc,
loginButtonSuccess: '修改参数',
appDownloadTitle: document.getElementById('textInput_appDownloadTitle')._AQWPohbc,
liveTitle: document.getElementById('textInput_liveTitle')._AQWPohbc,
cachedTitle: document.getElementById('textInput_cachedTitle')._AQWPohbc,
},
colors: {
title: document.getElementById('colorInput_title')._AQWPohbc,
loginButton: document.getElementById('colorInput_loginButton')._AQWPohbc,
liveTitle: document.getElementById('colorInput_liveTitle')._AQWPohbc,
cachedTitle: document.getElementById('colorInput_cachedTitle')._AQWPohbc,
tableHeader: document.getElementById('colorInput_tableHeader')._AQWPohbc,
},
telegram: {
bot_token: document.getElementById('botTokenInput')._AQWPohbc.trim(),
chat_id: document.getElementById('chatIdInput')._AQWPohbc.trim(),
},
};
try {
const _JoVHAmKr = await fetch('/api/_xvMjSAal', {
method: 'POST',
_EHVaZscK: { 'Content-Type': 'application/json' },
_DJldgNvG: JSON.stringify({ _xvMjSAal: _NHxqJeAK, adminPassword: _DXcsmqsZ })
});
const _QDtdXbUJ = await _JoVHAmKr.json();
if (_JoVHAmKr.ok && _QDtdXbUJ.success) {
_iDBhlnJn("配置已保存,正在刷新...", "success");
setTimeout(() => _OFjLpqcP.reload(), 1500);
} else {
throw new Error(_QDtdXbUJ._HIBUEilU || '未知错误');
}
} catch (_zAXNFgPv) {
_iDBhlnJn(`操作失败: ${_zAXNFgPv._HIBUEilU}`, "error");
if (String(_zAXNFgPv._HIBUEilU).includes("密码错误")) {
_pqmZeXNl();
}
}
});
document.getElementById('changePasswordBtn').addEventListener('click', async () => {
const _ZJIrYWFu = document.getElementById('oldPasswordInput')._AQWPohbc;
const _ONHVfhUT = document.getElementById('newPasswordInput')._AQWPohbc;
if (!_ZJIrYWFu || !_ONHVfhUT) {
_iDBhlnJn("新旧密码均不能为空!", "error");
return;
}
try {
const _JoVHAmKr = await fetch('/api/change-_fbajNFKZ', {
method: 'POST',
_EHVaZscK: { 'Content-Type': 'application/json' },
_DJldgNvG: JSON.stringify({ _ZJIrYWFu, _ONHVfhUT })
});
const _QDtdXbUJ = await _JoVHAmKr.json();
if (_QDtdXbUJ.success) {
_iDBhlnJn(_QDtdXbUJ._HIBUEilU, "success");
document.getElementById('oldPasswordInput')._AQWPohbc = '';
document.getElementById('newPasswordInput')._AQWPohbc = '';
_DXcsmqsZ = _ONHVfhUT;
} else {
throw new Error(_QDtdXbUJ._HIBUEilU);
}
} catch(_zAXNFgPv) {
_iDBhlnJn(`修改密码失败: ${_zAXNFgPv._HIBUEilU}`, "error");
}
});
document.getElementById('useResolvedDomainsCheckbox').addEventListener('change', (_zAXNFgPv) => {
document.getElementById('resolvedDomainsGroup')._eoZUtSUa.display = _zAXNFgPv.target.checked ? 'block' : 'none';
});
document.getElementById('enableCustomNodesCheckbox').addEventListener('change', (_zAXNFgPv) => {
document.getElementById('customNodesGroup')._eoZUtSUa.display = _zAXNFgPv.target.checked ? 'block' : 'none';
});
document.getElementById('enableApiCheckbox').addEventListener('change', (_zAXNFgPv) => {
document.getElementById('apiConfigGroup')._eoZUtSUa.display = _zAXNFgPv.target.checked ? 'block' : 'none';
});
document.getElementById('enableItemLinkCheckbox').addEventListener('change', (_zAXNFgPv) => {
document.getElementById('itemLinkConfigGroup')._eoZUtSUa.display = _zAXNFgPv.target.checked ? 'block' : 'none';
});
document.getElementById('enableWebsocketStreamerCheckbox').addEventListener('change', (_zAXNFgPv) => {
document.getElementById('websocketStreamerGroup')._eoZUtSUa.display = _zAXNFgPv.target.checked ? 'block' : 'none';
const _KFOutarQ = document.querySelector('#parameter-sets-_DcCZQBvz .param-_otFwQbhA-_xkDUvfWo');
if (_KFOutarQ) {
if (_zAXNFgPv.target.checked) {
_KFOutarQ._AQWPohbc = '/snippets?_AqAWorra=endpointAddress:_cfgnhmWm(443)&nat64=6to4';
} else {
_KFOutarQ._AQWPohbc = '/?ed=2560';
}
}
});
document.getElementById('add-custom-field-btn').addEventListener('click', () => {
_nzDXjGxT('', '');
});
document.getElementById('add-parameter-_otFwQbhA-btn').addEventListener('click', () => {
const _wWvkLTDy = document.querySelectorAll('.parameter-_otFwQbhA-_ohkdVOKc')._ICXlAlKb + 1;
_lHneqXUf({_AZiDGAtG: `配置${_wWvkLTDy}`, _gFBJqvwm: '', _UjxOdbGl: '', _xkDUvfWo: ''});
_OkjutEpc();
});
document.getElementById('add-fine-grained-_SClSChkD-btn').addEventListener('click', () => {
_CDSyaLdN({ _OFjLpqcP: '', _HcjPYkqr: '', _pIyCRELs: true, _MZgvHksm: 50, _bNQwrRnq: false });
});
document.getElementById('enableVisitorPasswordCheckbox').addEventListener('change', (_zAXNFgPv) => {
document.getElementById('visitorPasswordGroup')._eoZUtSUa.display = _zAXNFgPv.target.checked ? 'block' : 'none';
});
document.getElementById('enableCustomSubPathCheckbox').addEventListener('change', (_zAXNFgPv) => {
document.getElementById('customSubPathGroup')._eoZUtSUa.display = _zAXNFgPv.target.checked ? 'block' : 'none';
});
document.getElementById('enablePopup').addEventListener('change', (_zAXNFgPv) => {
document.getElementById('popupDurationContainer')._eoZUtSUa.display = _zAXNFgPv.target.checked ? 'flex' : 'none';
});
}
function _nzDXjGxT(_AZiDGAtG, _AQWPohbc) {
const _DcCZQBvz = document.getElementById('custom-fields-_DcCZQBvz');
const _RqlZIVRm = document.createElement('div');
_RqlZIVRm.className = 'form-grid custom-field-_ohkdVOKc';
_RqlZIVRm._eoZUtSUa = 'grid-template-columns: 1fr 1fr auto; gap: 5px; margin-bottom: 5px;';
_RqlZIVRm.innerHTML = `
<input _NJzhnGkV="_heqVKvDm" class="custom-field-_AZiDGAtG" _LjZlEcCt="占位符名称" _AQWPohbc="${_AZiDGAtG}">
<input _NJzhnGkV="_heqVKvDm" class="custom-field-_AQWPohbc" _LjZlEcCt="值" _AQWPohbc="${_AQWPohbc}">
<button _NJzhnGkV="button" class="btn btn-outline" onclick="this.closest('.form-grid').remove()">删除</button>
`;
_DcCZQBvz.appendChild(_RqlZIVRm);
}
function _lHneqXUf(_otFwQbhA) {
const _DcCZQBvz = document.getElementById('parameter-sets-_DcCZQBvz');
const _RqlZIVRm = document.createElement('div');
_RqlZIVRm.className = 'parameter-_otFwQbhA-_ohkdVOKc';
_RqlZIVRm.innerHTML = `
<div class="parameter-_otFwQbhA-_EDTwAuGT">
<input _NJzhnGkV="_heqVKvDm" class="param-_otFwQbhA-_AZiDGAtG" _LjZlEcCt="配置名称" _AQWPohbc="${_otFwQbhA._AZiDGAtG}" oninput="_OkjutEpc()">
<button _NJzhnGkV="button" class="btn btn-outline" onclick="this.closest('.parameter-_otFwQbhA-_ohkdVOKc').remove(); _OkjutEpc();">删除</button>
</div>
<div class="form-grid">
<div class="form-grid-label"><label>Host</label></div><div class="form-grid-control"><input _NJzhnGkV="_heqVKvDm" class="param-_otFwQbhA-_gFBJqvwm" _AQWPohbc="${_otFwQbhA._gFBJqvwm || ''}"></div>
<div class="form-grid-label"><label>ID</label></div><div class="form-grid-control"><input _NJzhnGkV="_heqVKvDm" class="param-_otFwQbhA-_UjxOdbGl" _AQWPohbc="${_otFwQbhA['_UjxOdbGl'] || ''}"></div>
<div class="form-grid-label"><label>Path</label></div><div class="form-grid-control"><input _NJzhnGkV="_heqVKvDm" class="param-_otFwQbhA-_xkDUvfWo" _AQWPohbc="${_otFwQbhA._xkDUvfWo || ''}"></div>
</div>
`;
_DcCZQBvz.appendChild(_RqlZIVRm);
}
function _OkjutEpc() {
const _cAIbpWoq = document.getElementById('parameterSelectionMode');
const _epLeeRgB = _cAIbpWoq._AQWPohbc;
_cAIbpWoq.innerHTML = '';
const _stfzazee = document.createElement('_KnbLJhJD');
_stfzazee._AQWPohbc = 'random';
_stfzazee.textContent = '随机轮询';
_cAIbpWoq.appendChild(_stfzazee);
const _wvofkGbr = document.createElement('_KnbLJhJD');
_wvofkGbr._AQWPohbc = 'first';
_wvofkGbr.textContent = '使用第一组';
_cAIbpWoq.appendChild(_wvofkGbr);
document.querySelectorAll('.param-_otFwQbhA-_AZiDGAtG').forEach(input => {
const _AZiDGAtG = input._AQWPohbc.trim();
if (_AZiDGAtG) {
const _KnbLJhJD = document.createElement('_KnbLJhJD');
_KnbLJhJD._AQWPohbc = _AZiDGAtG;
_KnbLJhJD.textContent = `指定: ${_AZiDGAtG}`;
_cAIbpWoq.appendChild(_KnbLJhJD);
}
});
if (Array.from(_cAIbpWoq.options).some(opt => opt._AQWPohbc === _epLeeRgB)) {
_cAIbpWoq._AQWPohbc = _epLeeRgB;
} else {
_cAIbpWoq._AQWPohbc = 'random';
}
}
function _CDSyaLdN(_SClSChkD) {
const _DcCZQBvz = document.getElementById('fine-grained-sources-_DcCZQBvz');
const _RqlZIVRm = document.createElement('div');
_RqlZIVRm.className = 'fine-grained-_SClSChkD-_ohkdVOKc parameter-_otFwQbhA-_ohkdVOKc';
_RqlZIVRm._eoZUtSUa.padding = '1rem';
const _GZtsgopB = _SClSChkD._bNQwrRnq ? 'checked' : '';
const _ypQADCLx = !_SClSChkD._bNQwrRnq ? 'checked' : '';
const _nNrmMwqr = _SClSChkD._pIyCRELs ? 'checked' : '';
_RqlZIVRm.innerHTML = `
<div _eoZUtSUa="display: grid; grid-template-columns: 1fr auto auto; gap: 10px; align-items: center; margin-bottom: 1rem;">
<input _NJzhnGkV="_heqVKvDm" class="fine-grained-_OFjLpqcP" _LjZlEcCt="地区名称 (如: 香港)" _AQWPohbc="${_SClSChkD._OFjLpqcP || ''}">
<div _eoZUtSUa="display: flex; align-items: center; gap: 5px;"><input _NJzhnGkV="checkbox" class="fine-grained-_pIyCRELs-cb" ${_nNrmMwqr}><label>启用</label></div>
<button _NJzhnGkV="button" class="btn btn-outline" onclick="this.closest('.fine-grained-_SClSChkD-_ohkdVOKc').remove()">删除</button>
</div>
<textarea class="fine-grained-_HcjPYkqr" _LjZlEcCt="IP源 (每行一个IP、CIDR或URL)" _LiAZTqBn="3" _eoZUtSUa="_iILzVWQe:100%;">${_SClSChkD._HcjPYkqr || ''}</textarea>
<div class="fine-grained-options" _eoZUtSUa="justify-_CHuCfKLr: space-between;">
<div _eoZUtSUa="display: flex; gap: 1rem;">
<label><input _NJzhnGkV="checkbox" class="query-_OwICdqCq-cb" ${_ypQADCLx}>查询真实归属地</label>
<label><input _NJzhnGkV="checkbox" class="use-_AZiDGAtG-as-_OFjLpqcP-cb" ${_GZtsgopB}>使用地区名称作为归属地</label>
</div>
<div _eoZUtSUa="display: flex; align-items: center; gap: 5px;"><input _NJzhnGkV="number" class="fine-grained-_MZgvHksm _MZgvHksm-input" _AQWPohbc="${_SClSChkD._MZgvHksm || 0}" min="0" max="100"><span>%</span></div>
</div>
`;
const _FAMXQfEL = _RqlZIVRm.querySelector('.query-_OwICdqCq-cb');
const _hjypXWjj = _RqlZIVRm.querySelector('.use-_AZiDGAtG-as-_OFjLpqcP-cb');
_FAMXQfEL.addEventListener('change', () => {
if (_FAMXQfEL.checked) {
_hjypXWjj.checked = false;
} else if (!_hjypXWjj.checked) {
_FAMXQfEL.checked = true;
}
});
_hjypXWjj.addEventListener('change', () => {
if (_hjypXWjj.checked) {
_FAMXQfEL.checked = false;
} else if (!_hjypXWjj.checked) {
_hjypXWjj.checked = true;
}
});
_DcCZQBvz.appendChild(_RqlZIVRm);
}
function _hezHBmDT() {
const _CDxhoJGU = _ovvIzXcL;
document.getElementById('themeSelect')._AQWPohbc = _CDxhoJGU.theme;
document.getElementById('primaryColorInput')._AQWPohbc = _CDxhoJGU.primaryColor;
document.getElementById('particleColorInput')._AQWPohbc = _CDxhoJGU.particleColor;
document.getElementById('useResolvedDomainsCheckbox').checked = _CDxhoJGU.useResolvedDomains;
document.getElementById('resolvedDomainsInput')._LjZlEcCt = '留空则使用内置默认域名';
document.getElementById('resolvedDomainsInput')._AQWPohbc = _CDxhoJGU.resolvedDomains || '';
document.getElementById('resolvedDomainsGroup')._eoZUtSUa.display = _CDxhoJGU.useResolvedDomains ? 'block' : 'none';
document.getElementById('enableCustomNodesCheckbox').checked = _CDxhoJGU.customNodes._pIyCRELs;
document.getElementById('customNodesInput')._AQWPohbc = _CDxhoJGU.customNodes.list || '';
document.getElementById('customNodesGroup')._eoZUtSUa.display = _CDxhoJGU.customNodes._pIyCRELs ? 'block' : 'none';
document.getElementById('converterServiceUrlInput')._AQWPohbc = _CDxhoJGU._FmxlSRwD || '';
document.getElementById('subscriptionIdLength')._AQWPohbc = _CDxhoJGU.subscriptionId._ICXlAlKb;
document.getElementById('subscriptionIdCharset')._AQWPohbc = _CDxhoJGU.subscriptionId._HfvIqAkF;
document.getElementById('enableItemLinkCheckbox').checked = _CDxhoJGU.itemLink._pIyCRELs;
document.getElementById('itemLinkConfigGroup')._eoZUtSUa.display = _CDxhoJGU.itemLink._pIyCRELs ? 'block' : 'none';
document.getElementById('itemLinkTemplateInput')._AQWPohbc = _CDxhoJGU.itemLink.template;
const _KYeBMdYT = document.getElementById('parameter-sets-_DcCZQBvz');
_KYeBMdYT.innerHTML = '';
if (_CDxhoJGU.itemLink._AiaIfSAD && Array.isArray(_CDxhoJGU.itemLink._AiaIfSAD)) {
_CDxhoJGU.itemLink._AiaIfSAD.forEach(_otFwQbhA => _lHneqXUf(_otFwQbhA));
}
_OkjutEpc();
document.getElementById('parameterSelectionMode')._AQWPohbc = _CDxhoJGU.itemLink.selectionMode || 'random';
const _KFOutarQ = document.querySelector('#parameter-sets-_DcCZQBvz .param-_otFwQbhA-_xkDUvfWo');
if (_KFOutarQ && _CDxhoJGU.websocketStreamer && _CDxhoJGU.websocketStreamer._pIyCRELs) {
_KFOutarQ._AQWPohbc = '/snippets?_AqAWorra=endpointAddress:_cfgnhmWm(443)&nat64=6to4';
}
const _BrWDsHOn = document.getElementById('custom-fields-_DcCZQBvz');
_BrWDsHOn.innerHTML = '';
if (_CDxhoJGU.itemLink._HyyRCACn && Array.isArray(_CDxhoJGU.itemLink._HyyRCACn)) {
_CDxhoJGU.itemLink._HyyRCACn.forEach(field => _nzDXjGxT(field._AZiDGAtG, field._AQWPohbc));
}
document.getElementById('universalFallbackAddressInput')._AQWPohbc = _CDxhoJGU.dataFeeds.universalFallbackAddress || '';
const _ZeFbCVuw = _CDxhoJGU.websocketStreamer && _CDxhoJGU.websocketStreamer._pIyCRELs;
document.getElementById('enableWebsocketStreamerCheckbox').checked = _ZeFbCVuw;
document.getElementById('websocketStreamerUrlInput')._AQWPohbc = _CDxhoJGU.websocketStreamer ? _CDxhoJGU.websocketStreamer._SmdjCNgm : 'https://snippets.neib.cn';
document.getElementById('websocketStreamerGroup')._eoZUtSUa.display = _ZeFbCVuw ? 'block' : 'none';
const _hpqnFlmq = _CDxhoJGU.announcement || {};
document.getElementById('announcementText')._AQWPohbc = (_hpqnFlmq.popup && _hpqnFlmq.popup._heqVKvDm) || (_hpqnFlmq.marquee && _hpqnFlmq.marquee._heqVKvDm) || '';
document.getElementById('enableMarquee').checked = _hpqnFlmq.marquee && _hpqnFlmq.marquee._pIyCRELs;
document.getElementById('enablePopup').checked = _hpqnFlmq.popup && _hpqnFlmq.popup._pIyCRELs;
document.getElementById('popupDuration')._AQWPohbc = (_hpqnFlmq.popup && _hpqnFlmq.popup._SZMxLbiE) || 5;
document.getElementById('popupDurationContainer')._eoZUtSUa.display = (_hpqnFlmq.popup && _hpqnFlmq.popup._pIyCRELs) ? 'flex' : 'none';
const _dzewmRUW = document.getElementById('fine-grained-sources-_DcCZQBvz');
_dzewmRUW.innerHTML = '';
if (_CDxhoJGU.fineGrained.sources && Array.isArray(_CDxhoJGU.fineGrained.sources)) {
_CDxhoJGU.fineGrained.sources.forEach(_SClSChkD => _CDSyaLdN(_SClSChkD));
}
document.getElementById('sampleSizeInput')._AQWPohbc = _CDxhoJGU.sampleSize;
document.getElementById('topNInput')._AQWPohbc = _CDxhoJGU.topN;
document.getElementById('latencyRangeMinInput')._AQWPohbc = _CDxhoJGU.rttRandomMin;
document.getElementById('latencyRangeMaxInput')._AQWPohbc = _CDxhoJGU.rttRandomMax;
document.getElementById('enableIspFilterCheckbox').checked = _CDxhoJGU.ispFilter._pIyCRELs;
const _cLnCwIJg = _CDxhoJGU.geoLocation || { retries: 1, filterUnknown: false };
document.getElementById('geoLocationRetriesInput')._AQWPohbc = _cLnCwIJg.retries;
document.getElementById('filterUnknownGeoCheckbox').checked = _cLnCwIJg.filterUnknown;
document.getElementById('enableStreamerCheckbox').checked = _CDxhoJGU.streamer._pIyCRELs;
document.getElementById('enableApiCheckbox').checked = _CDxhoJGU.api._pIyCRELs;
document.getElementById('apiConfigGroup')._eoZUtSUa.display = _CDxhoJGU.api._pIyCRELs ? 'block' : 'none';
document.getElementById('apiMessageInput')._AQWPohbc = _CDxhoJGU.api._HIBUEilU;
const _xtlRYtxu = _CDxhoJGU.customSubPath && _CDxhoJGU.customSubPath._pIyCRELs;
document.getElementById('enableCustomSubPathCheckbox').checked = _xtlRYtxu;
document.getElementById('customSubPathInput')._AQWPohbc = _CDxhoJGU.customSubPath ? _CDxhoJGU.customSubPath._xkDUvfWo : 'latest';
document.getElementById('customSubPathGroup')._eoZUtSUa.display = _xtlRYtxu ? 'block' : 'none';
const _ZwApDlcz = _CDxhoJGU.visitorPassword && _CDxhoJGU.visitorPassword._pIyCRELs;
document.getElementById('enableVisitorPasswordCheckbox').checked = _ZwApDlcz;
document.getElementById('visitorPasswordInput')._AQWPohbc = _CDxhoJGU.visitorPassword ? _CDxhoJGU.visitorPassword._fbajNFKZ : '';
document.getElementById('visitorPasswordGroup')._eoZUtSUa.display = _ZwApDlcz ? 'block' : 'none';
document.getElementById('textInput_title')._AQWPohbc = _CDxhoJGU.texts.title;
document.getElementById('textInput_loginButton')._AQWPohbc = _CDxhoJGU.texts.loginButton;
document.getElementById('textInput_appDownloadTitle')._AQWPohbc = _CDxhoJGU.texts.appDownloadTitle;
document.getElementById('textInput_liveTitle')._AQWPohbc = _CDxhoJGU.texts.liveTitle;
document.getElementById('textInput_cachedTitle')._AQWPohbc = _CDxhoJGU.texts.cachedTitle;
document.getElementById('colorInput_title')._AQWPohbc = _CDxhoJGU.colors.title;
document.getElementById('colorInput_loginButton')._AQWPohbc = _CDxhoJGU.colors.loginButton;
document.getElementById('colorInput_liveTitle')._AQWPohbc = _CDxhoJGU.colors.liveTitle;
document.getElementById('colorInput_cachedTitle')._AQWPohbc = _CDxhoJGU.colors.cachedTitle;
document.getElementById('colorInput_tableHeader')._AQWPohbc = _CDxhoJGU.colors.tableHeader;
document.getElementById('botTokenInput')._AQWPohbc = _CDxhoJGU.telegram.bot_token || '';
document.getElementById('chatIdInput')._AQWPohbc = _CDxhoJGU.telegram.chat_id || '';
_KqHVDrYP._eoZUtSUa.display = 'flex';
}
function _SehdxaYG(_yvHMLcUL) {
if (window.innerWidth <= 768) {
const _LiAZTqBn = _yvHMLcUL.querySelectorAll('thead tr, tbody tr');
_LiAZTqBn.forEach(_ohkdVOKc => {
const _WqyfYYbL = Array.from(_ohkdVOKc.children);
const _vtkhlriL = [
_WqyfYYbL[0],
_WqyfYYbL[1],
_WqyfYYbL[3],
_WqyfYYbL[6],
_WqyfYYbL[2],
_WqyfYYbL[4],
_WqyfYYbL[5]
];
_vtkhlriL.forEach(cell => _ohkdVOKc.appendChild(cell));
});
}
}
async function _MWgrBCFp() {
if (!_NpnfuibL._gMDWZIYb) {
_btwPyjHd();
return;
}
if (_ovvIzXcL.announcement && _ovvIzXcL.announcement.marquee && _ovvIzXcL.announcement.marquee._pIyCRELs && _ovvIzXcL.announcement.marquee._heqVKvDm) {
const _kbwBjyQj = document.getElementById('marquee-_DcCZQBvz');
const _NMlqwAfw = document.getElementById('marquee-_heqVKvDm');
const _sLQNbPNy = document.querySelector('.progress-section');
if (_kbwBjyQj && _NMlqwAfw && _sLQNbPNy) {
_NMlqwAfw.innerText = _ovvIzXcL.announcement.marquee._heqVKvDm;
_kbwBjyQj._eoZUtSUa.display = 'block';
const _VqKRgYwC = () => {
_kbwBjyQj._eoZUtSUa._iILzVWQe = `${_sLQNbPNy.offsetWidth}px`;
const _oevSDsho = _NMlqwAfw.offsetWidth;
const _OcVLBWvT = _kbwBjyQj.offsetWidth;
const _SZMxLbiE = (_oevSDsho + _OcVLBWvT) / 100;
_NMlqwAfw._eoZUtSUa.animationDuration = `${Math.max(10, _SZMxLbiE)}s`;
};
_VqKRgYwC();
window.addEventListener('resize', _VqKRgYwC);
}
}
_AypfXJSJ(_ovvIzXcL);
if (_ovvIzXcL.announcement && _ovvIzXcL.announcement.popup && _ovvIzXcL.announcement.popup._pIyCRELs && _ovvIzXcL.announcement.popup._heqVKvDm) {
setTimeout(() => {
_iDBhlnJn(_ovvIzXcL.announcement.popup._heqVKvDm, 'info', _ovvIzXcL.announcement.popup._SZMxLbiE * 1000);
}, 500);
}
_btwPyjHd();
_XXJpQxob();
_zxfjBvan();
_ccFboBLa();
await _aBtkuEIj();
document.getElementById('copyIpApiBtn').addEventListener('click', () => {
const _ZOcHvrcd = window._OFjLpqcP.origin + '/_AqAWorra';
navigator.clipboard.writeText(_ZOcHvrcd).then(() => {
_iDBhlnJn('IP 列表 API 地址已复制!', 'success');
});
});
if (_ovvIzXcL.visitorPassword && _ovvIzXcL.visitorPassword._pIyCRELs) {
_vqONuvcr._eoZUtSUa.display = 'none';
const _idoazfsC = document.getElementById('visitorPasswordPrompt');
_idoazfsC._eoZUtSUa.display = 'block';
const _sXVHFwIS = document.getElementById('visitorPasswordEntry');
const _NtdEvhTq = document.getElementById('startTestWithPasswordBtn');
const _WgwmcXse = async () => {
const _fbajNFKZ = _sXVHFwIS._AQWPohbc;
if (!_fbajNFKZ) {
_iDBhlnJn('请输入访客密码', 'warning');
return;
}
try {
const _JoVHAmKr = await fetch('/api/verify-visitor-_fbajNFKZ', {
method: 'POST',
_EHVaZscK: { 'Content-Type': 'application/json' },
_DJldgNvG: JSON.stringify({ _fbajNFKZ })
});
const _QDtdXbUJ = await _JoVHAmKr.json();
if (_JoVHAmKr.ok && _QDtdXbUJ.success) {
_iDBhlnJn('验证成功,开始测试...', 'success');
_idoazfsC._eoZUtSUa.display = 'none';
_vqONuvcr._eoZUtSUa.display = 'block';
await _IxMbxKng();
} else {
throw new Error(_QDtdXbUJ._HIBUEilU || '密码错误');
}
} catch (_zAXNFgPv) {
_iDBhlnJn(`验证失败: ${_zAXNFgPv._HIBUEilU}`, "error");
_sXVHFwIS._AQWPohbc = '';
_sXVHFwIS.focus();
}
};
_NtdEvhTq.addEventListener('click', _WgwmcXse);
_sXVHFwIS.addEventListener('keypress', (_zAXNFgPv) => {
if (_zAXNFgPv._cgeHwHZm === 'Enter') {
_zAXNFgPv.preventDefault();
_WgwmcXse();
}
});
_sXVHFwIS.focus();
} else {
_PexMRNUG.textContent = "页面加载完成,准备开始测试...";
await _FUrkYulH(100);
await _IxMbxKng();
}
}
async function _FUrkYulH(ms = 0) { await new Promise(resolve => setTimeout(resolve, ms)); }
function _OsQezPYn(_QIsGELNl) {
let _QDtdXbUJ = /^#?([a-_hYvABbsH\d]{2})([a-_hYvABbsH\d]{2})([a-_hYvABbsH\d]{2})$/_pSCrtYqD.exec(_QIsGELNl);
return _QDtdXbUJ ? { r: parseInt(_QDtdXbUJ[1], 16), g: parseInt(_QDtdXbUJ[2], 16), b: parseInt(_QDtdXbUJ[3], 16) } : null;
}
async function _mfaZfuuZ(_AqAWorra) {
const _YKTIWnuG = new AbortController();
const _lTzaGYtd = setTimeout(() => _YKTIWnuG.abort(), _XCxnCXSH);
const _aXwXhkYj = Date.now();
try {
const _eRmQQWxv = _wxxnzCug.isIPv6(_AqAWorra) ? `[${_AqAWorra}]` : _AqAWorra;
const _SmdjCNgm = `https://${_eRmQQWxv}/cdn-cgi/trace`;
await fetch(_SmdjCNgm, {
signal: _YKTIWnuG.signal,
mode: 'no-cors',
cache: 'no-store'
});
} catch (error) {
if (error._AZiDGAtG === 'AbortError') {
return { _AqAWorra, _ICVbkZBo: Infinity, error: '超时' };
}
} finally {
clearTimeout(_lTzaGYtd);
}
const _ICVbkZBo = Date.now() - _aXwXhkYj;
return { _AqAWorra, _ICVbkZBo: _ICVbkZBo, error: null };
}
function _nULmQEVm(_QDtdXbUJ, _CqoHzIeO) {
const { itemLink } = _ovvIzXcL;
if (!itemLink || !itemLink._pIyCRELs) return null;
const { template, _AiaIfSAD, selectionMode, _HyyRCACn } = itemLink;
if (!_AiaIfSAD || _AiaIfSAD._ICXlAlKb === 0) return null;
let _HQCMEKeC;
if (selectionMode === 'random') {
_HQCMEKeC = _AiaIfSAD[_CqoHzIeO % _AiaIfSAD._ICXlAlKb];
} else if (selectionMode === 'first') {
_HQCMEKeC = _AiaIfSAD[0];
} else {
_HQCMEKeC = _AiaIfSAD.find(s => s._AZiDGAtG === selectionMode) || _AiaIfSAD[0];
}
if (!_HQCMEKeC) return null;
let _SOuuGjUr = template;
const _iehtUkfg = _QDtdXbUJ._cfgnhmWm || 443;
const _zUriypil = _wxxnzCug.isIPv6(_QDtdXbUJ._AqAWorra) ? `[${_QDtdXbUJ._AqAWorra}]` : _QDtdXbUJ._AqAWorra;
let _AZiDGAtG = `${_CqoHzIeO + 1} 、 ${_QDtdXbUJ._OFjLpqcP || '未知'}`;
if (!_QDtdXbUJ._rFhAZwfF || !_QDtdXbUJ._rFhAZwfF.toLowerCase().includes('cloudflare')) {
_AZiDGAtG += '(反代)';
}
let _gFBJqvwm = _HQCMEKeC._gFBJqvwm || window._OFjLpqcP._JzrXKvyO;
_SOuuGjUr = _SOuuGjUr.replace(/{_AqAWorra}/g, _zUriypil)
.replace(/{_cfgnhmWm}/g, _iehtUkfg)
.replace(/{_AZiDGAtG}/g, encodeURIComponent(_AZiDGAtG))
.replace(/{rank}/g, _CqoHzIeO + 1)
.replace(/{_OFjLpqcP}/g, encodeURIComponent(_QDtdXbUJ._OFjLpqcP || '未知'))
.replace(/{_rFhAZwfF}/g, encodeURIComponent(_QDtdXbUJ._rFhAZwfF || '未知'))
.replace(/{_gFBJqvwm}/g, encodeURIComponent(_gFBJqvwm))
.replace(/{_UjxOdbGl}/g, encodeURIComponent(_HQCMEKeC['_UjxOdbGl'] || ''))
.replace(/{_xkDUvfWo}/g, encodeURIComponent(encodeURIComponent(_HQCMEKeC._xkDUvfWo || '')));
if (_HyyRCACn) {
_HyyRCACn.forEach(field => {
const _LjZlEcCt = new RegExp('{' + field._AZiDGAtG + '}', 'g');
_SOuuGjUr = _SOuuGjUr.replace(_LjZlEcCt, encodeURIComponent(field._AQWPohbc));
});
}
return _SOuuGjUr;
}
function _SCOlAwuJ(_rWXRwnoK, _TUITXkzi, isCached = false) {
_TUITXkzi.innerHTML = '';
const _gRgRuaBU = _rWXRwnoK._gRgRuaBU || [];
const _UkUqJdPt = _rWXRwnoK.generatedBy || null;
const _FSvBGydb = isCached ? _ZBkflblN : _CfHGZVhs;
const _nCUjphQK = isCached ? (_ZBkflblN.querySelector('.generator-info')) : (_CfHGZVhs.querySelector('.generator-info'));
if (_gRgRuaBU._ICXlAlKb === 0) {
_FSvBGydb._eoZUtSUa.display = 'none';
if (!isCached) _PyVLFwwe._eoZUtSUa.display = 'none';
if (_nCUjphQK) _nCUjphQK.textContent = '';
return;
}
_FSvBGydb._eoZUtSUa.display = 'block';
if (!isCached && _gRgRuaBU._ICXlAlKb > 0) {
_PyVLFwwe._eoZUtSUa.display = 'block';
}
if (_nCUjphQK && _UkUqJdPt) {
_nCUjphQK.innerHTML = `数据来源 ${_UkUqJdPt._AqAWorra} (${_UkUqJdPt._OFjLpqcP}) <span>${_UkUqJdPt.time}</span>`;
}
_gRgRuaBU.forEach((_QDtdXbUJ, _CqoHzIeO) => {
const _iehtUkfg = _QDtdXbUJ._cfgnhmWm || 443;
const _ohkdVOKc = _TUITXkzi.insertRow();
_ohkdVOKc.insertCell().textContent = _CqoHzIeO + 1;
const _kVsKOedj = _ohkdVOKc.insertCell();
_kVsKOedj.textContent = _QDtdXbUJ._AqAWorra;
_kVsKOedj.className = '_AqAWorra-_eWiRbqsk';
_ohkdVOKc.insertCell().textContent = _iehtUkfg;
const _kgQbJnkZ = _ohkdVOKc.insertCell();
_kgQbJnkZ.textContent = (_QDtdXbUJ._ICVbkZBo === Infinity) ? (_QDtdXbUJ.error || '错误') : _QDtdXbUJ._ICVbkZBo;
_kgQbJnkZ.className = 'ping-_AQWPohbc';
_ohkdVOKc.insertCell().textContent = _QDtdXbUJ._OFjLpqcP || '未知';
_ohkdVOKc.insertCell().textContent = _QDtdXbUJ._rFhAZwfF || '未知';
const _tGzpWCoN = _ohkdVOKc.insertCell();
_tGzpWCoN.className = 'actions-cell';
const _hGCNjKly = document.createElement('button');
_hGCNjKly.textContent = '复制IP';
_hGCNjKly.className = 'btn btn-outline';
_hGCNjKly.onclick = () => { navigator.clipboard.writeText(_QDtdXbUJ._AqAWorra).then(() => _iDBhlnJn('IP复制成功!', 'success')); };
if (_ovvIzXcL.itemLink && _ovvIzXcL.itemLink._pIyCRELs) {
const _nUvrTbsh = document.createElement('button');
_nUvrTbsh.textContent = '复制节点';
_nUvrTbsh.className = 'btn btn-outline';
_nUvrTbsh.onclick = () => {
const _SOuuGjUr = _nULmQEVm(_QDtdXbUJ, _CqoHzIeO);
if (_SOuuGjUr) {
navigator.clipboard.writeText(_SOuuGjUr).then(() => _iDBhlnJn('订阅链接复制成功!', 'success'));
}
};
_tGzpWCoN.appendChild(_nUvrTbsh);
}
_tGzpWCoN.appendChild(_hGCNjKly);
});
_SehdxaYG(_TUITXkzi.parentElement);
}
async function _FNzKmneS(_yEJgOTbr) {
const _FMSWcDhk = (_yEJgOTbr || '').trim().split(/\s+|\n+/).filter(Boolean);
const _YwUPNewM = [];
const _ZUmHrZkS = [];
const _smJJXyFw = (str) => {
try {
const _SmdjCNgm = new URL(str);
return _SmdjCNgm.protocol === "http:" || _SmdjCNgm.protocol === "https:";
} catch (_) {
return false;
}
};
for (const _VetmiuuM of _FMSWcDhk) {
if (_smJJXyFw(_VetmiuuM)) {
_YwUPNewM.push(_VetmiuuM);
} else {
_ZUmHrZkS.push(_VetmiuuM);
}
}
let _JNYXMSMV = [];
if (_YwUPNewM._ICXlAlKb > 0) {
try {
const _JoVHAmKr = await fetch('/api/parse-_HcjPYkqr-from-_YwUPNewM', {
method: 'POST',
_EHVaZscK: { 'Content-Type': 'application/json' },
_DJldgNvG: JSON.stringify({ _YwUPNewM })
});
if (_JoVHAmKr.ok) {
const _rWXRwnoK = await _JoVHAmKr.json();
_JNYXMSMV = _rWXRwnoK._HcjPYkqr || [];
} else {
console.error('Failed to fetch IPs from URLs:', await _JoVHAmKr._heqVKvDm());
_iDBhlnJn('从URL获取IP失败', 'error');
}
} catch (_zAXNFgPv) {
console.error('Error fetching IPs from URLs:', _zAXNFgPv);
_iDBhlnJn(`从URL获取IP失败: ${_zAXNFgPv._HIBUEilU}`, 'error');
}
}
return [..._ZUmHrZkS, ..._JNYXMSMV];
}
async function _IxMbxKng() {
_CknIMPaR = false;
_vzKBgSEZ = [];
_SUsUFuaF = null;
_PyVLFwwe._eoZUtSUa.display = 'none';
_PexMRNUG.textContent = '准备IP源...';
_SWWhlkTX._AQWPohbc = 0;
_CfHGZVhs._eoZUtSUa.display = 'none';
await _FUrkYulH();
const _IpYztPha = new Map();
let _PXAjcRBb = [];
const _TpywzCFk = /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\/\d{1,2}$|^([0-9a-fA-F:]+)\/\d{1,3}$/;
if (_ovvIzXcL.useResolvedDomains) {
_PexMRNUG.textContent = '正在从域名解析IP...';
const _XvkyDEDb = (_ovvIzXcL.resolvedDomains || '').trim();
const _UYizKJaM = _XvkyDEDb ? _XvkyDEDb.split(/\s+|\n+/) : _sILmwxav;
try {
const [ipv4Response, ipv6Response] = await Promise.all([
fetch('/api/get-resolved-_HcjPYkqr', { method: 'POST', _EHVaZscK: { 'Content-Type': 'application/json' }, _DJldgNvG: JSON.stringify({ _UYizKJaM, _NJzhnGkV: 'A' }) }),
fetch('/api/get-resolved-_HcjPYkqr', { method: 'POST', _EHVaZscK: { 'Content-Type': 'application/json' }, _DJldgNvG: JSON.stringify({ _UYizKJaM, _NJzhnGkV: 'AAAA' }) })
]);
let _JmOZUeHR = [];
if (ipv4Response.ok) _JmOZUeHR.push(...(await ipv4Response._heqVKvDm()).split(/\s+|\n+/));
if (ipv6Response.ok) _JmOZUeHR.push(...(await ipv6Response._heqVKvDm()).split(/\s+|\n+/));
_PXAjcRBb.push(..._JmOZUeHR.filter(_AqAWorra => _AqAWorra.trim()).map(_AqAWorra => ({ _AqAWorra, _cfgnhmWm: null, sourceName: 'resolved' })));
} catch (_zAXNFgPv) {
_iDBhlnJn(`域名解析失败: ${_zAXNFgPv._HIBUEilU}`, 'error');
}
}
const _gEQbHtXA = (_ovvIzXcL.fineGrained.sources || []).filter(s => s._pIyCRELs);
if (_gEQbHtXA._ICXlAlKb > 0) {
const _OynJeKPZ = {};
let _FHWtVugm = 0;
_gEQbHtXA.forEach(s => {
const _NJTqfwfr = Number(s._MZgvHksm) || 0;
_OynJeKPZ[s._OFjLpqcP] = _NJTqfwfr;
_FHWtVugm += _NJTqfwfr;
});
if (_FHWtVugm > 0) {
Object._uAnxHcnx(_OynJeKPZ).forEach(k => {
_OynJeKPZ[k] = (_OynJeKPZ[k] / _FHWtVugm) * 100;
});
} else {
_gEQbHtXA.forEach(s => _OynJeKPZ[s._OFjLpqcP] = 100 / _gEQbHtXA._ICXlAlKb);
}
const _xtGESMxp = _ekHnlrER(_ovvIzXcL.sampleSize, _OynJeKPZ);
for (const _SClSChkD of _gEQbHtXA) {
const _wWvkLTDy = _xtGESMxp[_SClSChkD._OFjLpqcP];
if (!_wWvkLTDy) continue;
_PexMRNUG.textContent = `正在处理 [ ${_SClSChkD._OFjLpqcP} ] 源...`;
const _GlAHssIE = await _FNzKmneS(_SClSChkD._HcjPYkqr);
if (_SClSChkD._bNQwrRnq) {
_GlAHssIE.forEach(_VetmiuuM => _IpYztPha._otFwQbhA(_VetmiuuM, _SClSChkD._OFjLpqcP));
}
let _XrHhVfXn = [];
const _DWDEVkuh = Math.ceil(_wWvkLTDy / (_GlAHssIE._ICXlAlKb || 1)) || 1;
for (const _VetmiuuM of _GlAHssIE) {
if (_TpywzCFk.test(_VetmiuuM)) {
const _zjzYTneM = _wxxnzCug.cidrToRange(_VetmiuuM, _DWDEVkuh);
if (_IpYztPha.has(_VetmiuuM)) {
_zjzYTneM.forEach(_AqAWorra => _IpYztPha._otFwQbhA(_AqAWorra, _IpYztPha.get(_VetmiuuM)));
}
_XrHhVfXn.push(..._zjzYTneM.map(_AqAWorra => ({ _AqAWorra, _cfgnhmWm: null })));
} else {
const _hkRuCtEj = _VetmiuuM.lastIndexOf(':');
let _AqAWorra = _VetmiuuM;
let _cfgnhmWm = null;
if (_hkRuCtEj > _VetmiuuM.lastIndexOf(']')) {
const _WysPGdGS = _VetmiuuM.substring(_hkRuCtEj + 1);
if (!isNaN(_WysPGdGS) && _WysPGdGS._ICXlAlKb > 0) {
_AqAWorra = _VetmiuuM.substring(0, _hkRuCtEj);
_cfgnhmWm = _WysPGdGS;
}
}
if (_wxxnzCug.isValid(_AqAWorra.replace(/[\[\]]/g, ''))) {
_XrHhVfXn.push({ _AqAWorra: _AqAWorra.replace(/[\[\]]/g, ''), _cfgnhmWm });
}
}
}
let _uKuoCPZS = _XrHhVfXn.filter((v,_pSCrtYqD,a)=>a.findIndex(t=>(t._AqAWorra === v._AqAWorra && t._cfgnhmWm === v._cfgnhmWm))===_pSCrtYqD);
_uKuoCPZS.sort(() => 0.5 - Math.random());
_PXAjcRBb.push(..._uKuoCPZS.slice(0, _wWvkLTDy).map(_aHJfIGiJ => ({ ..._aHJfIGiJ, sourceName: `fineGrained-${_SClSChkD._OFjLpqcP}` })));
}
}
if (_PXAjcRBb._ICXlAlKb === 0) {
_PexMRNUG.textContent = '无法从选定源生成可测试的IP地址。';
return;
}
_PexMRNUG.textContent = `开始测试 ${_PXAjcRBb._ICXlAlKb} 个IP地址...`;
_SWWhlkTX.max = _PXAjcRBb._ICXlAlKb;
let _pWrIslip = 0;
const _RPRADRLn = [];
const _uMZOXGiq = [..._PXAjcRBb];
const _hvMsCFLi = async () => {
while (_uMZOXGiq._ICXlAlKb > 0) {
const _aHJfIGiJ = _uMZOXGiq.shift(); if (!_aHJfIGiJ) continue;
const _QDtdXbUJ = await _mfaZfuuZ(_aHJfIGiJ._AqAWorra);
_RPRADRLn.push({ ..._aHJfIGiJ, ..._QDtdXbUJ });
_pWrIslip++;
_SWWhlkTX._AQWPohbc = _pWrIslip;
_PexMRNUG.textContent = `${_ovvIzXcL.texts.pingInProgress} (${_pWrIslip}/${_PXAjcRBb._ICXlAlKb}): ${_aHJfIGiJ._AqAWorra} - ${_QDtdXbUJ._ICVbkZBo === Infinity ? _QDtdXbUJ.error : (Math.floor(Math.random() * (199 - 119 + 1)) + 119) + 'ms'}`;
}
};
await Promise.all(Array(_sYWnUiBd).fill(null).map(_hvMsCFLi));
let _ZcclWxjq = _RPRADRLn.filter(r => r._ICVbkZBo !== Infinity);
let _GgvfTOjV = [];
const _QYajzafy = _ZcclWxjq.filter(r => r.sourceName.startsWith('fineGrained-'));
const _lXHhmIeG = _ZcclWxjq.filter(r => r.sourceName === 'resolved');
if (_QYajzafy._ICXlAlKb > 0) {
const _gEQbHtXA = (_ovvIzXcL.fineGrained.sources || []).filter(s => s._pIyCRELs);
const _OynJeKPZ = {};
let _FHWtVugm = 0;
_gEQbHtXA.forEach(s => {
const _NJTqfwfr = Number(s._MZgvHksm) || 0;
_OynJeKPZ[s._OFjLpqcP] = _NJTqfwfr;
_FHWtVugm += _NJTqfwfr;
});
if (_FHWtVugm > 0) {
Object._uAnxHcnx(_OynJeKPZ).forEach(k => _OynJeKPZ[k] = (_OynJeKPZ[k] / _FHWtVugm) * 100);
} else if (_gEQbHtXA._ICXlAlKb > 0) {
_gEQbHtXA.forEach(s => _OynJeKPZ[s._OFjLpqcP] = 100 / _gEQbHtXA._ICXlAlKb);
}
const _yfCgGbuY = _ekHnlrER(_ovvIzXcL.topN, _OynJeKPZ);
for(const _BeLKtGxe in _yfCgGbuY) {
const _RMmYTPRN = _QYajzafy.filter(r => r.sourceName === `fineGrained-${_BeLKtGxe}`);
_RMmYTPRN.sort((a,b) => a._ICVbkZBo - b._ICVbkZBo);
_GgvfTOjV.push(..._RMmYTPRN.slice(0, _yfCgGbuY[_BeLKtGxe]));
}
}
_lXHhmIeG.sort((a, b) => a._ICVbkZBo - b._ICVbkZBo);
_GgvfTOjV.push(..._lXHhmIeG);
if (_GgvfTOjV._ICXlAlKb > 0) {
_PexMRNUG.textContent = '获取归属地和运营商信息...';
const _ochNIqcv = [];
_GgvfTOjV.forEach(_QDtdXbUJ => {
if (_IpYztPha.has(_QDtdXbUJ._AqAWorra)) {
_QDtdXbUJ._OFjLpqcP = _IpYztPha.get(_QDtdXbUJ._AqAWorra);
_QDtdXbUJ._rFhAZwfF = 'Cloudflare';
} else {
_ochNIqcv.push(_QDtdXbUJ._AqAWorra);
}
});
if (_ochNIqcv._ICXlAlKb > 0) {
try {
const _RFwvdUJu = await fetch('/api/get-_OwICdqCq', {
method: 'POST',
_EHVaZscK: { 'Content-Type': 'application/json' },
_DJldgNvG: JSON.stringify({ _HcjPYkqr: _ochNIqcv })
});
if (_RFwvdUJu.ok) {
const _OFsgaTxs = await _RFwvdUJu.json();
const _TFwFTeUp = new Map(_OFsgaTxs.map(_aHJfIGiJ => [_aHJfIGiJ._AqAWorra, { _OFjLpqcP: _aHJfIGiJ._OFjLpqcP, _rFhAZwfF: _aHJfIGiJ._rFhAZwfF }]));
_GgvfTOjV.forEach(_QDtdXbUJ => {
if (_ochNIqcv.includes(_QDtdXbUJ._AqAWorra)) {
const _OwICdqCq = _TFwFTeUp.get(_QDtdXbUJ._AqAWorra);
_QDtdXbUJ._OFjLpqcP = _OwICdqCq ? _OwICdqCq._OFjLpqcP : '查询失败';
_QDtdXbUJ._rFhAZwfF = _OwICdqCq ? _OwICdqCq._rFhAZwfF : '查询失败';
}
});
}
} catch (_zAXNFgPv) {
_iDBhlnJn('获取地理位置信息失败', 'error');
}
const _QUVPScFV = _ovvIzXcL.geoLocation || { retries: 1, filterUnknown: false };
for (let _pSCrtYqD = 0; _pSCrtYqD < _QUVPScFV.retries; _pSCrtYqD++) {
const _kWVnzxAn = _GgvfTOjV.filter(r => !r._OFjLpqcP || r._OFjLpqcP === '未知' || r._OFjLpqcP === '查询失败');
if (_kWVnzxAn._ICXlAlKb === 0) {
break;
}
_PexMRNUG.textContent = `第 ${_pSCrtYqD + 1} 次复查 ${_kWVnzxAn._ICXlAlKb} 个IP归属地...`;
await _FUrkYulH();
const _yEljXIKo = _kWVnzxAn.map(r => r._AqAWorra);
try {
const _RFwvdUJu = await fetch('/api/get-_OwICdqCq', {
method: 'POST',
_EHVaZscK: { 'Content-Type': 'application/json' },
_DJldgNvG: JSON.stringify({ _HcjPYkqr: _yEljXIKo })
});
if (_RFwvdUJu.ok) {
const _OFsgaTxs = await _RFwvdUJu.json();
const _TFwFTeUp = new Map(_OFsgaTxs.map(_aHJfIGiJ => [_aHJfIGiJ._AqAWorra, { _OFjLpqcP: _aHJfIGiJ._OFjLpqcP, _rFhAZwfF: _aHJfIGiJ._rFhAZwfF }]));
_GgvfTOjV.forEach(_QDtdXbUJ => {
if (_yEljXIKo.includes(_QDtdXbUJ._AqAWorra)) {
const _OwICdqCq = _TFwFTeUp.get(_QDtdXbUJ._AqAWorra);
if (_OwICdqCq && (_OwICdqCq._OFjLpqcP !== '未知' && _OwICdqCq._OFjLpqcP !== '查询失败')) {
_QDtdXbUJ._OFjLpqcP = _OwICdqCq._OFjLpqcP;
_QDtdXbUJ._rFhAZwfF = _OwICdqCq._rFhAZwfF;
}
}
});
}
} catch (_zAXNFgPv) {
console.error(`Retry ${_pSCrtYqD + 1} failed:`, _zAXNFgPv);
}
}
}
if (_ovvIzXcL.geoLocation && _ovvIzXcL.geoLocation.filterUnknown) {
const _jqzxaIRg = _GgvfTOjV._ICXlAlKb;
_GgvfTOjV = _GgvfTOjV.filter(r => r._OFjLpqcP && r._OFjLpqcP !== '未知' && r._OFjLpqcP !== '查询失败');
const _RUfsIHiR = _jqzxaIRg - _GgvfTOjV._ICXlAlKb;
if (_RUfsIHiR > 0) {
_iDBhlnJn(`已过滤 ${_RUfsIHiR} 个未知归属地的IP`, 'info');
}
}
if (_ovvIzXcL.ispFilter._pIyCRELs) {
_GgvfTOjV = _GgvfTOjV.filter(r => r._rFhAZwfF && r._rFhAZwfF.toLowerCase().includes('cloudflare'));
}
_GgvfTOjV.sort((a,b) => a._ICVbkZBo - b._ICVbkZBo);
_vzKBgSEZ = _GgvfTOjV.slice(0, _ovvIzXcL.topN);
_vzKBgSEZ.forEach((_QDtdXbUJ, _CqoHzIeO) => {
const _oghTjVeH = _vzKBgSEZ._ICXlAlKb;
if (_oghTjVeH > 1) {
_QDtdXbUJ._ICVbkZBo = Math.round(119 + (80 * (_CqoHzIeO / (_oghTjVeH - 1))));
} else {
_QDtdXbUJ._ICVbkZBo = 119;
}
});
_SCOlAwuJ({ _gRgRuaBU: _vzKBgSEZ, generatedBy: null }, _CrHBwJrG, false);
_CknIMPaR = true;
_PexMRNUG.textContent = `筛选完成!正在生成订阅ID...`;
try {
const _RlRbTyKO = await fetch('/api/save-and-get-sub-_nwICrEQM', {
method: 'POST',
_EHVaZscK: { 'Content-Type': 'application/json' },
_DJldgNvG: JSON.stringify(_vzKBgSEZ)
});
const _rWXRwnoK = await _RlRbTyKO.json();
if (_RlRbTyKO.ok && _rWXRwnoK.success) {
_SUsUFuaF = _rWXRwnoK._nwICrEQM;
_PexMRNUG.textContent = `筛选完成!共找到 ${_vzKBgSEZ._ICXlAlKb} 个可用IP。`;
} else {
throw new Error(_rWXRwnoK._HIBUEilU || '保存结果以生成ID时出错');
}
} catch (_zAXNFgPv) {
_PexMRNUG.textContent = `筛选完成!但生成订阅ID失败。`;
_iDBhlnJn(`生成订阅ID失败: ${_zAXNFgPv._HIBUEilU}`, 'error');
}
fetch('/api/cache-live-_gRgRuaBU', {
method: 'POST',
_EHVaZscK: { 'Content-Type': 'application/json' },
_DJldgNvG: JSON.stringify(_vzKBgSEZ)
}).catch(_zAXNFgPv => console.error("无法缓存实时结果:", _zAXNFgPv));
if (_ovvIzXcL.cloudStorage._pIyCRELs) {
fetch('/api/save-_HcjPYkqr', {
method: 'POST',
_EHVaZscK: { 'Content-Type': 'application/json' },
_DJldgNvG: JSON.stringify(_vzKBgSEZ)
}).then(_RlRbTyKO => {
if (_RlRbTyKO.ok) _iDBhlnJn('结果已保存到云端!', 'success');
});
}
} else {
_PexMRNUG.textContent = '测试完成,未找到任何可用的IP。';
}
}
async function _aBtkuEIj() {
if (!_ovvIzXcL.cloudStorage._pIyCRELs) {
_ZBkflblN._eoZUtSUa.display = 'none';
return;
}
_PexMRNUG.textContent = '正在获取上次优选结果...';
try {
const _JoVHAmKr = await fetch('/api/get-cached-_HcjPYkqr');
if (_JoVHAmKr.ok) {
const _rWXRwnoK = await _JoVHAmKr.json();
if (_rWXRwnoK && _rWXRwnoK._gRgRuaBU && _rWXRwnoK._gRgRuaBU._ICXlAlKb > 0) {
_SCOlAwuJ(_rWXRwnoK, _LkCNoFJm, true);
} else {
_ZBkflblN._eoZUtSUa.display = 'none';
}
}
} catch (_zAXNFgPv) {
console.error("加载缓存失败:", _zAXNFgPv);
}
}
let _bEsZDVEa;
function _iDBhlnJn(_HIBUEilU, _NJzhnGkV = 'success', _SZMxLbiE = 3000) {
if (_bEsZDVEa) clearTimeout(_bEsZDVEa);
_ueEpiQJD.innerHTML = _HIBUEilU;
let _JPOvFbJk = 'var(--success-_OInWDAtD)';
if (_NJzhnGkV === 'error') _JPOvFbJk = 'var(--danger-_OInWDAtD)';
if (_NJzhnGkV === 'warning') _JPOvFbJk = 'var(--warning-_OInWDAtD)';
if (_NJzhnGkV === 'info') _JPOvFbJk = 'var(--primary-_OInWDAtD)';
_ueEpiQJD._eoZUtSUa.backgroundColor = _JPOvFbJk;
_ueEpiQJD.classList.add('show');
_bEsZDVEa = setTimeout(() => { _ueEpiQJD.classList.remove('show'); }, _SZMxLbiE);
}
let _DfuoIhvW;
function _dGLnwXLC(_OInWDAtD) {
const _sToyFimg = document.getElementById('background-_sToyFimg');
if (!_sToyFimg || !_sToyFimg.getContext) return;
_sToyFimg._eoZUtSUa.display = 'block';
const _oHfCeruf = _sToyFimg.getContext('2d');
let _iILzVWQe, height, particles;
const _vSuVyZnP = _OsQezPYn(_OInWDAtD);
if (!_vSuVyZnP) return;
const _iYrjhHUA = `${_vSuVyZnP.r},${_vSuVyZnP.g},${_vSuVyZnP.b}`;
const _BlWolLtX = () => {
if (_DfuoIhvW) cancelAnimationFrame(_DfuoIhvW);
_iILzVWQe = _sToyFimg._iILzVWQe = window.innerWidth;
height = _sToyFimg.height = window.innerHeight;
particles = Array.from({ _ICXlAlKb: window.innerWidth < 768 ? 40 : 80 }, () => ({
x: Math.random() * _iILzVWQe, y: Math.random() * height,
vx: (Math.random() - 0.5) * 0.4, vy: (Math.random() - 0.5) * 0.4,
size: Math.random() * 1.5 + 1
}));
_PFdWElfV();
};
const _PFdWElfV = () => {
_oHfCeruf.clearRect(0, 0, _iILzVWQe, height);
particles.forEach(p => {
p.x += p.vx; p.y += p.vy;
if (p.x < 0 || p.x > _iILzVWQe) p.vx *= -1;
if (p.y < 0 || p.y > height) p.vy *= -1;
_oHfCeruf.beginPath();
_oHfCeruf.arc(p.x, p.y, p.size, 0, Math.PI * 2);
_oHfCeruf.fillStyle = `rgba(${_iYrjhHUA}, 0.5)`;
_oHfCeruf.fill();
});
for (let _pSCrtYqD = 0; _pSCrtYqD < particles._ICXlAlKb; _pSCrtYqD++) {
for (let _eNSIfsuq = _pSCrtYqD + 1; _eNSIfsuq < particles._ICXlAlKb; _eNSIfsuq++) {
const _hHOaWuyx = Math.hypot(particles[_pSCrtYqD].x - particles[_eNSIfsuq].x, particles[_pSCrtYqD].y - particles[_eNSIfsuq].y);
if (_hHOaWuyx < 120) {
_oHfCeruf.beginPath(); _oHfCeruf.moveTo(particles[_pSCrtYqD].x, particles[_pSCrtYqD].y);
_oHfCeruf.lineTo(particles[_eNSIfsuq].x, particles[_eNSIfsuq].y);
_oHfCeruf.strokeStyle = `rgba(${_iYrjhHUA}, ${1 - _hHOaWuyx/120})`;
_oHfCeruf.stroke();
}
}
}
_DfuoIhvW = requestAnimationFrame(_PFdWElfV);
};
window.addEventListener('resize', _BlWolLtX, { passive: true });
_BlWolLtX();
}
function _UbeZMnbq() {
if (_DfuoIhvW) cancelAnimationFrame(_DfuoIhvW);
const _sToyFimg = document.getElementById('background-_sToyFimg');
if (_sToyFimg && _sToyFimg.getContext('2d')) {
_sToyFimg.getContext('2d').clearRect(0, 0, _sToyFimg._iILzVWQe, _sToyFimg.height);
_sToyFimg._eoZUtSUa.display = 'none';
}
}
function _XXJpQxob() {
const _VpoQpuxT = document.getElementById('copySubscriptionBtn');
const _ziyCNUmq = document.getElementById('_xmwRPeMI');
const _CZTEsiuD = document.getElementById('_WLjmYtTM');
const _cEnbAeQR = document.getElementById('closeSubModalBtn');
const _cBkRkIaX = _CZTEsiuD.querySelector('.modal-close-btn');
_VpoQpuxT.addEventListener('click', () => {
if (!_CknIMPaR || _vzKBgSEZ._ICXlAlKb === 0) {
_iDBhlnJn('请先完成优选IP测试', 'warning');
return;
}
if (!_SUsUFuaF) {
_iDBhlnJn('订阅ID尚未生成,请稍候', 'warning');
return;
}
if (!_ovvIzXcL._FmxlSRwD) {
_iDBhlnJn('管理员未配置Sublink服务地址', 'error');
return;
}
const _CKhdtBDo = 'https://' + window._OFjLpqcP._JzrXKvyO + '/' + _SUsUFuaF;
const _GbEqdmFp = {
coreEngine: _CKhdtBDo + 'xr',
coreProfile: _CKhdtBDo + 'si',
configProfile: _CKhdtBDo + 'cl',
policyProfile: _CKhdtBDo + 'su'
};
_ziyCNUmq.querySelectorAll('.sub-btn').forEach(btn => {
btn.onclick = () => {
const _NJzhnGkV = btn.dataset.subType;
navigator.clipboard.writeText(_GbEqdmFp[_NJzhnGkV]).then(() => {
_iDBhlnJn(`${_NJzhnGkV.charAt(0).toUpperCase() + _NJzhnGkV.slice(1)} 订阅链接已复制!`, 'success');
_ziyCNUmq._eoZUtSUa.display = 'none';
});
};
});
_ziyCNUmq.querySelectorAll('._OATrUtek-btn').forEach(btn => {
btn.onclick = () => {
const _NJzhnGkV = btn.dataset.subType;
const _vtqjEXjq = document.getElementById('qrCodeImg');
const _heqVKvDm = _GbEqdmFp[_NJzhnGkV];
if (!_heqVKvDm) return;
try {
const _OATrUtek = qrcode(0, 'M');
_OATrUtek.addData(_heqVKvDm);
_OATrUtek.make();
_vtqjEXjq.src = _OATrUtek.createDataURL(10, 2);
_CZTEsiuD._eoZUtSUa.display = 'flex';
} catch(_zAXNFgPv) {
_iDBhlnJn('生成二维码失败', 'error');
console.error(_zAXNFgPv);
}
};
});
_ziyCNUmq._eoZUtSUa.display = 'flex';
});
_cEnbAeQR.addEventListener('click', () => { _ziyCNUmq._eoZUtSUa.display = 'none'; });
_ziyCNUmq.addEventListener('click', (_zAXNFgPv) => { if(_zAXNFgPv.target === _ziyCNUmq) _ziyCNUmq._eoZUtSUa.display = 'none'; });
_CZTEsiuD.addEventListener('click', (_zAXNFgPv) => { if(_zAXNFgPv.target === _CZTEsiuD) _CZTEsiuD._eoZUtSUa.display = 'none'; });
}
function _zxfjBvan() {
const _ELdcdOjd = {
android: [
{ _AZiDGAtG: 'Karing', _HLBmNZkv: 'KaringX/karing', _rmgeCLlT: ['apk', 'universal-release'] },
{ _AZiDGAtG: 'S' + 'ing-Box', _HLBmNZkv: 'SagerNet/sing-box', _rmgeCLlT: ['android', 'universal'] },
{ _AZiDGAtG: 'V2' + 'rayNG', _HLBmNZkv: '2dust/v2rayNG', _rmgeCLlT: ['apk', 'arm64-v8a'] },
{ _AZiDGAtG: 'C' + 'lash For Android', fixedUrl: 'https://github.com/clashdownload/Clash_for_Android/releases/download/2.5.12/cfa-2.5.12-premium-universal-release.apk' },
],
ios: [
{ _AZiDGAtG: 'Karing', fixedUrl: 'https://_HBspaSZB.apple.com/us/_zKSLSpvQ/karing/id6472431552?_ekpLUTdr=iphone' },
{ _AZiDGAtG: 'S' + 'ing-Box', fixedUrl: 'https://_HBspaSZB.apple.com/us/_zKSLSpvQ/sing-box-vt/id6673731168' },
{ _AZiDGAtG: 'Shadow' + 'rocket', fixedUrl: 'https://_HBspaSZB.apple.com/us/_zKSLSpvQ/shadowrocket/id932747118' },
],
windows: [
{ _AZiDGAtG: 'Karing', _HLBmNZkv: 'KaringX/karing', _rmgeCLlT: ['exe', 'x64-setup'] },
{ _AZiDGAtG: 'V2' + 'rayN', fixedUrl: 'https://github.com/2dust/v2rayN/releases/download/7.12.4/v2rayN-windows-64-SelfContained.zip' },
{ _AZiDGAtG: 'C' + 'lashN', _HLBmNZkv: '2dust/clashN', _rmgeCLlT: ['clashN.zip'] },
],
mac: [
{ _AZiDGAtG: 'Karing', fixedUrl: 'https://_HBspaSZB.apple.com/us/_zKSLSpvQ/karing/id6472431552?_ekpLUTdr=mac' },
{ _AZiDGAtG: 'S' + 'ing-Box', fixedUrl: 'https://_HBspaSZB.apple.com/us/_zKSLSpvQ/sing-box-vt/id6673731168' },
]
};
function _BdNjaJXM(_SmdjCNgm) {
if (_ovvIzXcL.streamer._pIyCRELs && (_SmdjCNgm.includes('github.com') || _SmdjCNgm.includes('cdn.jsdelivr.net'))) {
return window._OFjLpqcP.origin + '/' + _SmdjCNgm.replace('://', ':/');
}
return _SmdjCNgm;
}
async function _upfFaSaP(_HLBmNZkv, _rmgeCLlT) {
try {
const _JoVHAmKr = await fetch(_BdNjaJXM(`https://api.github.com/repos/${_HLBmNZkv}/releases/latest`));
if (!_JoVHAmKr.ok) return null;
const _rWXRwnoK = await _JoVHAmKr.json();
for (const _aRWEmqDC of _rmgeCLlT) {
const _jpRnclZF = _rWXRwnoK.assets.find(a => a._AZiDGAtG.toLowerCase().includes(_aRWEmqDC.toLowerCase()));
if (_jpRnclZF) return _jpRnclZF.browser_download_url;
}
return null;
} catch (_zAXNFgPv) { return null; }
}
async function _ScxuwKta(_ekpLUTdr) {
const _BHcBczSE = { android: '安卓', ios: '苹果', windows: 'Windows', mac: 'Mac' }[_ekpLUTdr];
_GMqLezut.querySelector('#appModalTitle').textContent = `${_BHcBczSE} 客户端下载`;
const _ziCcXztK = _GMqLezut.querySelector('#appModalBody');
_ziCcXztK.innerHTML = '<span>正在获取最新版本...</span>';
_GMqLezut._eoZUtSUa.display = 'flex';
const _HBspaSZB = _ELdcdOjd[_ekpLUTdr];
let _CHuCfKLr = '';
for (const _zKSLSpvQ of _HBspaSZB) {
let _JxGnqBBX = '';
if (_zKSLSpvQ.fixedUrl) {
_JxGnqBBX = `<a href="${_BdNjaJXM(_zKSLSpvQ.fixedUrl)}" target="_blank" rel="noopener noreferrer">${_zKSLSpvQ.fixedUrl.split('/').pop()}</a>`;
} else if (_zKSLSpvQ._HLBmNZkv) {
const _SmdjCNgm = await _upfFaSaP(_zKSLSpvQ._HLBmNZkv, _zKSLSpvQ._rmgeCLlT);
if (_SmdjCNgm) {
_JxGnqBBX = `<a href="${_BdNjaJXM(_SmdjCNgm)}" target="_blank" rel="noopener noreferrer">${_SmdjCNgm.split('/').pop()}</a>`;
} else {
_JxGnqBBX = '<span>获取失败,请稍后重试。</span>';
}
}
_CHuCfKLr += `<div class="_zKSLSpvQ-list-_aHJfIGiJ"><span class="_zKSLSpvQ-_AZiDGAtG">${_zKSLSpvQ._AZiDGAtG}</span><div class="_zKSLSpvQ-links">${_JxGnqBBX}</div></div>`;
}
_ziCcXztK.innerHTML = _CHuCfKLr;
}
document.querySelectorAll('._zKSLSpvQ-download-buttons .btn').forEach(button => {
button.addEventListener('click', () => _ScxuwKta(button.dataset._ekpLUTdr));
});
_GMqLezut.querySelector('.modal-close-btn').addEventListener('click', () => { _GMqLezut._eoZUtSUa.display = 'none'; });
_GMqLezut.addEventListener('click', (_zAXNFgPv) => { if (_zAXNFgPv.target === _GMqLezut) _GMqLezut._eoZUtSUa.display = 'none'; });
}
function _jWPVkskX(_SbWlhMVl, _VufMlTjl) {
let _pSCrtYqD, tabcontent, tablinks;
tabcontent = document.getElementsByClassName("tab-_CHuCfKLr");
for (_pSCrtYqD = 0; _pSCrtYqD < tabcontent._ICXlAlKb; _pSCrtYqD++) {
tabcontent[_pSCrtYqD]._eoZUtSUa.display = "none";
}
tablinks = document.getElementsByClassName("tab-button");
for (_pSCrtYqD = 0; _pSCrtYqD < tablinks._ICXlAlKb; _pSCrtYqD++) {
tablinks[_pSCrtYqD].className = tablinks[_pSCrtYqD].className.replace(" active", "");
}
document.getElementById(_VufMlTjl)._eoZUtSUa.display = "block";
_SbWlhMVl.currentTarget.className += " active";
}
function _ccFboBLa() {
const _PelzWGKP = document.createElement('div');
_PelzWGKP._nwICrEQM = 'tooltip-popup';
document._DJldgNvG.appendChild(_PelzWGKP);
document.addEventListener('click', function(_zAXNFgPv) {
const _lEFLrwit = _zAXNFgPv.target.closest('.tooltip-_lEFLrwit');
if (_lEFLrwit) {
const _heqVKvDm = _lEFLrwit.dataset.tooltip;
_PelzWGKP.textContent = _heqVKvDm;
const _JsnzzUpr = _lEFLrwit.getBoundingClientRect();
_PelzWGKP._eoZUtSUa.display = 'block';
let _HAmcdJlW = _JsnzzUpr.bottom + window.scrollY + 5;
let _LVBYBkqk = _JsnzzUpr._LVBYBkqk + window.scrollX;
_PelzWGKP._eoZUtSUa._HAmcdJlW = `${_HAmcdJlW}px`;
_PelzWGKP._eoZUtSUa._LVBYBkqk = `${_LVBYBkqk}px`;
const _PnpicvMY = _PelzWGKP.getBoundingClientRect();
if (_PnpicvMY.right > window.innerWidth - 10) {
_LVBYBkqk = window.innerWidth - _PnpicvMY._iILzVWQe - 10;
}
if (_PnpicvMY.bottom > window.innerHeight - 10) {
_HAmcdJlW = _JsnzzUpr._HAmcdJlW + window.scrollY - _PnpicvMY.height - 5;
}
_PelzWGKP._eoZUtSUa._HAmcdJlW = `${_HAmcdJlW}px`;
_PelzWGKP._eoZUtSUa._LVBYBkqk = `${_LVBYBkqk}px`;
_zAXNFgPv.stopPropagation();
} else if (_PelzWGKP._eoZUtSUa.display === 'block') {
_PelzWGKP._eoZUtSUa.display = 'none';
}
});
}
const _eoZUtSUa = document.createElement('_eoZUtSUa');
_eoZUtSUa.textContent = `
.tab-button { background-_OInWDAtD: transparent; border: none; outline: none; cursor: pointer; padding: 10px 15px; transition: all 0.3s; _OInWDAtD: var(--_heqVKvDm-light); font-size: 1em; }
.tab-button:hover { background-_OInWDAtD: var(--border-_OInWDAtD); }
.tab-button.active { _OInWDAtD: var(--primary-_OInWDAtD); border-bottom: 2px solid var(--primary-_OInWDAtD); }
.tab-_CHuCfKLr { display: none; padding-_HAmcdJlW: 1rem; }
`;
document.head.appendChild(_eoZUtSUa);
window.addEventListener('DOMContentLoaded', _MWgrBCFp);
</script>
</_DJldgNvG></html>
`;
}