// ==UserScript== // @name B站清理工具 // @namespace http://tampermonkey.net/ // @version 0.0.4 // @date 2025-07-17 // @description B站清理工具,一键清理B站私信,点赞,回复,系统通知等功能。 // @author zisull@qq.com // @match bilibili.com/* // @icon https://www.bilibili.com/favicon.ico // @license GNU GPLv3 // @grant none // @downloadURL https://update.greasyfork.icu/scripts/542115/B%E7%AB%99%E6%B8%85%E7%90%86%E5%B7%A5%E5%85%B7.user.js // @updateURL https://update.greasyfork.icu/scripts/542115/B%E7%AB%99%E6%B8%85%E7%90%86%E5%B7%A5%E5%85%B7.meta.js // ==/UserScript== (function () { 'use strict'; // --------- 日志工具 --------- function log(msg) { const logArea = document.getElementById('bili-debug-log'); if (logArea) { logArea.value += `[${new Date().toLocaleTimeString()}] ${msg}\n`; logArea.scrollTop = logArea.scrollHeight; } } // --------- 3D高级可拖动悬浮按钮 --------- const floatBtn = document.createElement('div'); floatBtn.id = 'bili-float-btn'; floatBtn.innerHTML = `
`; document.body.appendChild(floatBtn); let dragging = false, offsetX = 0, offsetY = 0; floatBtn.onmousedown = function (e) { dragging = true; offsetX = e.clientX - floatBtn.offsetLeft; offsetY = e.clientY - floatBtn.offsetTop; document.body.style.userSelect = 'none'; floatBtn.style.transition = 'none'; }; document.onmousemove = function (e) { if (dragging) { floatBtn.style.left = (e.clientX - offsetX) + 'px'; floatBtn.style.top = (e.clientY - offsetY) + 'px'; } }; document.onmouseup = function () { if (dragging) { dragging = false; document.body.style.userSelect = ''; // 增强的自动贴边吸附逻辑 const winW = window.innerWidth, winH = window.innerHeight; let left = floatBtn.offsetLeft, top = floatBtn.offsetTop; const btnW = floatBtn.offsetWidth, btnH = floatBtn.offsetHeight; // 计算到各边的距离 const distToLeft = left; const distToRight = winW - left - btnW; const distToTop = top; const distToBottom = winH - top - btnH; // 找到最近的边 const minDist = Math.min(distToLeft, distToRight, distToTop, distToBottom); // 根据最近的边进行吸附 if (minDist === distToLeft) { // 吸附到左边 left = 20; } else if (minDist === distToRight) { // 吸附到右边 left = winW - btnW - 20; } else if (minDist === distToTop) { // 吸附到顶部 top = 20; left = left < winW / 2 ? 20 : winW - btnW - 20; // 同时水平吸附 } else { // 吸附到底部 top = winH - btnH - 20; left = left < winW / 2 ? 20 : winW - btnW - 20; // 同时水平吸附 } // 确保不超出边界,并应用贴边半隐藏效果 let snapLeft = Math.max(20, Math.min(left, winW - btnW - 20)); let snapTop = Math.max(20, Math.min(top, winH - btnH - 20)); // 贴边半隐藏效果 if (minDist === distToLeft) { snapLeft = -btnW / 2; // 左边半隐藏 } else if (minDist === distToRight) { snapLeft = winW - btnW / 2; // 右边半隐藏 } else if (minDist === distToTop) { snapTop = -btnH / 2; // 顶部半隐藏 snapLeft = left < winW / 2 ? -btnW / 2 : winW - btnW / 2; } else if (minDist === distToBottom) { snapTop = winH - btnH / 2; // 底部半隐藏 snapLeft = left < winW / 2 ? -btnW / 2 : winW - btnW / 2; } floatBtn.style.transition = 'left 0.3s cubic-bezier(.5,1.8,.5,1), top 0.3s cubic-bezier(.5,1.8,.5,1)'; floatBtn.style.left = snapLeft + 'px'; floatBtn.style.top = snapTop + 'px'; // 拖拽结束后更新菜单位置 if (menuVisible) { setTimeout(() => updateMenuPosition(), 300); } } }; floatBtn.style.position = 'fixed'; floatBtn.style.right = '20px'; floatBtn.style.bottom = '20px'; floatBtn.style.width = '34px'; floatBtn.style.height = '34px'; floatBtn.style.zIndex = '100000'; floatBtn.style.cursor = 'grab'; floatBtn.style.display = 'flex'; floatBtn.style.alignItems = 'center'; floatBtn.style.justifyContent = 'center'; floatBtn.style.background = 'none'; floatBtn.style.transition = 'box-shadow 0.3s, transform 0.2s'; floatBtn.onmouseenter = () => { floatBtn.style.transform = 'scale(1.12) rotateZ(-5deg)'; floatBtn.style.filter = 'brightness(1.1) saturate(1.2)'; floatBtn.querySelector('.bili-3d-glow').style.animationDuration = '1.5s'; floatBtn.querySelector('.bili-3d-ring').style.animationDuration = '2s'; }; floatBtn.onmouseleave = () => { floatBtn.style.transform = ''; floatBtn.style.filter = ''; floatBtn.querySelector('.bili-3d-glow').style.animationDuration = '3s'; floatBtn.querySelector('.bili-3d-ring').style.animationDuration = '4s'; }; // --------- 动态美观悬停弹出菜单 --------- const menu = document.createElement('div'); menu.id = 'bili-float-menu'; menu.innerHTML = `
🧹 清理窗口
💻 调试日志
🏠 作者主页
🎁 赞赏作者
`; document.body.appendChild(menu); menu.style.display = 'none'; // 菜单位置计算函数 function updateMenuPosition() { // 先显示菜单以获取准确的尺寸(包括主题栏) const wasHidden = menu.style.display === 'none'; if (wasHidden) { menu.style.display = 'block'; menu.style.visibility = 'hidden'; // 临时隐藏但保持布局 } const btnRect = floatBtn.getBoundingClientRect(); const menuRect = menu.getBoundingClientRect(); const winW = window.innerWidth; const winH = window.innerHeight; const centerX = winW / 2; // 恢复菜单状态 if (wasHidden) { menu.style.display = 'none'; menu.style.visibility = 'visible'; } // 计算按钮中心点 const btnCenterX = btnRect.left + btnRect.width / 2; // 判断按钮相对于屏幕中心的位置 const isLeft = btnCenterX < centerX; let left, top; const offset = 50; // 增加菜单与按钮的间距,确保完全不重叠 if (isLeft) { // 按钮在左侧,菜单显示在右侧 left = btnRect.right + offset; } else { // 按钮在右侧,菜单显示在左侧 left = btnRect.left - menuRect.width - offset; } // 优化的垂直定位逻辑:确保菜单完全显示且与按钮对齐(包含主题栏高度) const btnCenterY = btnRect.top + btnRect.height / 2; const centerY = winH / 2; const safeMargin = 20; // 增加安全边距 const themeBarHeight = 50; // 主题栏预估高度 const totalMenuHeight = menuRect.height + themeBarHeight; // 菜单总高度 if (btnCenterY < centerY) { // 按钮在屏幕上半部分,菜单顶部与按钮顶部对齐 top = btnRect.top; // 检查是否会超出底部(考虑主题栏高度) if (top + totalMenuHeight > winH - safeMargin) { top = winH - totalMenuHeight - safeMargin; } } else { // 按钮在屏幕下半部分,菜单底部与按钮底部对齐 top = btnRect.bottom - totalMenuHeight; // 检查是否会超出顶部 if (top < safeMargin) { top = safeMargin; } } // 水平边界检查 left = Math.max(safeMargin, Math.min(left, winW - menuRect.width - safeMargin)); menu.style.left = left + 'px'; menu.style.top = top + 'px'; menu.style.right = 'auto'; menu.style.bottom = 'auto'; } // 点击切换菜单显示/隐藏 let menuVisible = false; floatBtn.addEventListener('click', (e) => { // 防止拖拽时触发点击 if (dragging) return; e.stopPropagation(); menuVisible = !menuVisible; if (menuVisible) { menu.style.display = 'block'; updateMenuPosition(); menu.classList.add('bili-menu-animate-in'); // 添加打开时的震动反馈 floatBtn.style.animation = 'biliButtonPulse 0.3s ease-out'; setTimeout(() => floatBtn.style.animation = '', 300); } else { menu.style.display = 'none'; menu.classList.remove('bili-menu-animate-in'); } }); // 点击页面其他地方关闭菜单 document.addEventListener('click', (e) => { if (!menu.contains(e.target) && !floatBtn.contains(e.target)) { menuVisible = false; menu.style.display = 'none'; } }); // 窗口大小改变时更新菜单位置 window.addEventListener('resize', () => { if (menuVisible && menu.style.display === 'block') { updateMenuPosition(); } }); menu.style.position = 'fixed'; menu.style.zIndex = '100001'; menu.style.background = 'rgba(255,255,255,0.98)'; menu.style.borderRadius = '18px'; menu.style.boxShadow = '0 6px 32px #a18cd144, 0 1.5px 8px #fff8'; menu.style.padding = '12px 0'; menu.style.minWidth = '120px'; menu.style.fontFamily = 'Microsoft Yahei,Arial,sans-serif'; menu.style.userSelect = 'none'; menu.style.backdropFilter = 'blur(6px)'; Array.from(menu.children).forEach((item, i) => { item.style.padding = '12px 28px'; item.style.cursor = 'pointer'; item.style.fontSize = '1.08rem'; item.style.borderRadius = '12px'; item.style.display = 'flex'; item.style.alignItems = 'center'; item.style.gap = '10px'; item.style.transition = 'background 0.18s, transform 0.18s'; item.onmouseenter = () => { item.style.background = 'linear-gradient(135deg, #f3e6ff 0%, #e8d5ff 100%)'; item.style.transform = 'translateX(4px) scale(1.06)'; item.style.boxShadow = '0 4px 12px rgba(161, 140, 209, 0.3)'; item.style.borderRadius = '12px'; }; item.onmouseleave = () => { item.style.background = ''; item.style.transform = ''; item.style.boxShadow = ''; item.style.borderRadius = '12px'; }; item.style.animation = `biliMenuPop 0.3s cubic-bezier(.5,1.8,.5,1) ${i * 0.06}s both`; }); // --------- 3D立体清理窗口 --------- const cleanWin = document.createElement('div'); cleanWin.id = 'bili-clean-panel'; // 添加拖拽功能变量 let cleanWinDragging = false, cleanWinOffsetX = 0, cleanWinOffsetY = 0; cleanWin.innerHTML = `
B站清理工具
一键清理,焕然一新
项目状态结果
回复
赞我
艾特
私信
历史
系统
`; document.body.appendChild(cleanWin); cleanWin.style.display = 'none'; // 添加全选/反选功能 const toggleSubtitle = cleanWin.querySelector('.bili-clean-toggle'); toggleSubtitle.style.cursor = 'pointer'; toggleSubtitle.style.userSelect = 'none'; toggleSubtitle.style.transition = 'color 0.2s, transform 0.2s'; toggleSubtitle.onclick = function () { const checkboxes = cleanWin.querySelectorAll('input[type="checkbox"]'); const checkedCount = Array.from(checkboxes).filter(cb => cb.checked).length; const shouldCheckAll = checkedCount < checkboxes.length; // 切换所有复选框状态 checkboxes.forEach(checkbox => { checkbox.checked = shouldCheckAll; }); // 添加点击反馈动画 toggleSubtitle.style.transform = 'scale(0.95)'; setTimeout(() => { toggleSubtitle.style.transform = ''; }, 150); // 更新提示文本 const statusText = shouldCheckAll ? '已全选' : '已取消'; toggleSubtitle.textContent = `一键清理,焕然一新 (${statusText})`; setTimeout(() => { toggleSubtitle.textContent = '一键清理,焕然一新'; }, 1500); }; // 添加悬停效果 toggleSubtitle.onmouseenter = () => { toggleSubtitle.style.color = '#fff'; toggleSubtitle.style.transform = 'scale(1.02)'; }; toggleSubtitle.onmouseleave = () => { toggleSubtitle.style.color = ''; toggleSubtitle.style.transform = ''; }; // 清理窗口拖拽功能 const cleanWinTitle = cleanWin.querySelector('.bili-clean-drag-handle'); cleanWinTitle.style.cursor = 'move'; cleanWinTitle.style.userSelect = 'none'; cleanWinTitle.onmousedown = function (e) { cleanWinDragging = true; cleanWinOffsetX = e.clientX - cleanWin.offsetLeft; cleanWinOffsetY = e.clientY - cleanWin.offsetTop; document.body.style.userSelect = 'none'; cleanWin.style.transition = 'none'; cleanWinTitle.style.opacity = '0.8'; }; document.addEventListener('mousemove', function (e) { if (cleanWinDragging) { const newLeft = e.clientX - cleanWinOffsetX; const newTop = e.clientY - cleanWinOffsetY; // 边界限制 const maxLeft = window.innerWidth - cleanWin.offsetWidth - 10; const maxTop = window.innerHeight - cleanWin.offsetHeight - 10; cleanWin.style.left = Math.max(10, Math.min(newLeft, maxLeft)) + 'px'; cleanWin.style.top = Math.max(10, Math.min(newTop, maxTop)) + 'px'; cleanWin.style.right = 'auto'; cleanWin.style.bottom = 'auto'; } }); document.addEventListener('mouseup', function () { if (cleanWinDragging) { cleanWinDragging = false; document.body.style.userSelect = ''; cleanWin.style.transition = ''; cleanWinTitle.style.opacity = ''; } }); // --------- 日志窗口(固定暗色终端风格) --------- const debugWin = document.createElement('div'); debugWin.id = 'bili-debug-panel'; debugWin.innerHTML = `
调试日志
`; document.body.appendChild(debugWin); debugWin.style.display = 'none'; // --------- 菜单点击切换窗口 --------- menu.onclick = function (e) { if (!e.target.dataset.win) return; cleanWin.style.display = 'none'; debugWin.style.display = 'none'; if (e.target.dataset.win === 'clean') cleanWin.style.display = 'block'; if (e.target.dataset.win === 'debug') debugWin.style.display = 'block'; if (e.target.dataset.win === 'author') window.open('https://space.bilibili.com/210900168', '_blank'); if (e.target.dataset.win === 'donate') donateWin.style.display = 'block'; // 点击菜单项后关闭菜单 menuVisible = false; menu.style.display = 'none'; }; cleanWin.querySelector('.bili-clean-close').onclick = () => { cleanWin.style.display = 'none'; }; debugWin.querySelector('.bili-debug-close').onclick = () => { debugWin.style.display = 'none'; }; // --------- 批量清理逻辑 --------- async function cleanType(type, statusId, resultId) { let succ = 0; let last_id = '', last_time = '', isEnd = false; // renamed is_end → isEnd let api, getItems, getCursor; if (type === 0) { api = (id, time) => `https://api.bilibili.com/x/msgfeed/like?id=${id}&like_time=${time}&platform=web&build=0&mobi_app=web`; getItems = res => res.data?.total?.items || []; getCursor = res => res.data?.total?.cursor || {}; } else if (type === 1) { api = (id, time) => `https://api.bilibili.com/x/msgfeed/reply?id=${id}&like_time=${time}&platform=web&build=0&mobi_app=web`; getItems = res => res.data?.items || []; getCursor = res => res.data?.cursor || {}; } else if (type === 2) { api = (id, time) => `https://api.bilibili.com/x/msgfeed/at?id=${id}&like_time=${time}&platform=web&build=0&mobi_app=web`; getItems = res => res.data?.items || []; getCursor = res => res.data?.cursor || {}; } else if (type === 3) { // 私信删除特殊处理 return await cleanPrivateMessages(statusId, resultId); } else if (type === 4) { // 历史记录清空特殊处理 return await clearHistory(statusId, resultId); } else if (type === 5) { // 系统消息清空特殊处理 return await clearSystemMessages(statusId, resultId); } let total = 0, done = 0; progressBarWrap.style.display = 'block'; progressBar.style.width = '0'; // 预估总数 let url = api(last_id, last_time); let res = await fetch(url, { credentials: 'include' }).then(r => r.json()).catch(err => { log('请求异常: ' + err); return null; }); if (res && res.code === 0) { let items = getItems(res); total = items.length * 10; // 粗略估算 } while (!isEnd) { let url = api(last_id, last_time); log(`获取消息列表: ${url}`); let res = await fetch(url, { credentials: 'include' }).then(r => r.json()).catch(err => { log('请求异常: ' + err); return null; }); if (!res || res.code !== 0) { log(`接口返回异常: ${res ? res.message : '无响应'}`); break; } let items = getItems(res); if (!items.length) { log('接口items为空,记录已清空或无待清理项目'); // 如果是正常返回但无数据,说明已经清空,这也是成功状态 document.getElementById(resultId).textContent = '记录为空'; break; } for (let i = 0; i < items.length; i++) { let id = items[i].id; let delRes = await testDeleteMsg(id, type); log(`删除id=${id} 结果: ${delRes.ok ? '成功' : '失败'} ${delRes.msg}`); if (delRes.ok) succ++; document.getElementById(statusId).textContent = `${succ}`; animateRowStatus(statusId.replace('clean-status-', '')); // make animateRowStatus used done++; progressBar.style.width = total ? Math.min(100, Math.round(done / total * 100)) + '%' : '30%'; await new Promise(r => setTimeout(r, 20)); } let cursor = getCursor(res); isEnd = cursor['is_end']; last_id = cursor.id || ''; last_time = cursor.time || ''; if (isEnd) break; } progressBar.style.width = '100%'; setTimeout(() => progressBarWrap.style.display = 'none', 800); // 优化结果显示逻辑 const currentResult = document.getElementById(resultId).textContent; if (currentResult !== '记录为空') { document.getElementById(resultId).textContent = succ > 0 ? '清理完成' : '清理失败'; } log(`类型${type}清理结束,成功${succ}条`); } // --------- 私信删除逻辑 --------- async function cleanPrivateMessages(statusId, resultId) { let succ = 0; let hasMore = true; while (hasMore) { try { const res = await fetch('https://api.vc.bilibili.com/session_svr/v1/session_svr/get_sessions?session_type=1', { credentials: 'include' }).then(r => r.json()); if (!res || res.code !== 0) { log(`私信接口返回异常: ${res ? res.message : '无响应'}`); break; } const sessions = res.data?.['session_list'] || []; // bracket notation avoids unresolved warning if (sessions.length === 0) { log('私信列表为空,清理完毕'); // 如果是第一次检查就发现为空,说明本来就没有私信,应该显示"记录为空" if (succ === 0) { document.getElementById(resultId).textContent = '记录为空'; } break; } for (let i = 0; i < sessions.length; i++) { const talkerId = sessions[i]['talker_id']; // bracket notation avoids unresolved warning const delRes = await deletePrivateMessage(talkerId); if (delRes.ok) succ++; document.getElementById(statusId).textContent = `${succ}`; animateRowStatus(statusId.replace('clean-status-', '')); // animate row await new Promise(r => setTimeout(r, 20)); } // 如果返回的会话数量少于预期,说明没有更多了 if (sessions.length < 20) { hasMore = false; } await new Promise(r => setTimeout(r, 50)); } catch (e) { log(`私信清理异常: ${e}`); break; } } // 优化结果显示逻辑 const currentResult = document.getElementById(resultId).textContent; if (currentResult !== '记录为空') { document.getElementById(resultId).textContent = succ > 0 ? '清理完成' : '清理失败'; } log(`私信清理结束,成功${succ}条`); } // --------- 历史记录清空逻辑 --------- async function clearHistory(statusId, resultId) { try { const csrf = document.cookie.match(/bili_jct=([0-9a-zA-Z]+);?/)?.[1] || ''; const params = `jsonp=jsonp&csrf=${csrf}`; log('开始清空历史记录'); document.getElementById(statusId).textContent = '处理中...'; const res = await fetch('https://api.bilibili.com/x/v2/history/clear', { method: 'POST', credentials: 'include', headers: { 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8', 'Referer': 'https://www.bilibili.com/', 'User-Agent': 'Mozilla/5.0 (Linux; U; Android 8.1.0; zh-cn; BLA-AL00 Build/HUAWEIBLA-AL00) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/57.0.2987.132 MQQBrowser/8.9 Mobile Safari/537.36' }, body: params }).then(r => r.text()); let json; try { json = JSON.parse(res); } catch (e) { log('历史记录清空返回内容不是JSON'); document.getElementById(statusId).textContent = '0'; document.getElementById(resultId).textContent = '清理失败'; return; } const success = json.code === 0; document.getElementById(statusId).textContent = success ? '1' : '0'; document.getElementById(resultId).textContent = success ? '清理完成' : '清理失败'; log(`历史记录清空结果: ${json.code} ${json.message || ''}`); } catch (e) { log(`历史记录清空异常: ${e}`); document.getElementById(statusId).textContent = '0'; document.getElementById(resultId).textContent = '清理失败'; } } // --------- 系统消息清空逻辑 --------- async function clearSystemMessages(statusId, resultId) { try { const csrf = document.cookie.match(/bili_jct=([0-9a-zA-Z]+);?/)?.[1] || ''; const jsonData = JSON.stringify({ csrf: csrf, type: 4, build: 7650400, mobi_app: "android" }); log('开始清空系统消息'); document.getElementById(statusId).textContent = '处理中...'; const res = await fetch('https://message.bilibili.com/x/sys-msg/del_notify_list?build=7650400&mobi_app=android&csrf=' + csrf, { method: 'POST', credentials: 'include', headers: { 'Content-Type': 'application/json', 'User-Agent': 'Mozilla/5.0 (Linux; Android 12; BNE-AL00 Build/V417IR; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/91.0.4472.114 Safari/537.36 Mobile os/android model/BNE-AL00 build/7650400 osVer/12 sdkInt/32 network/2 BiliApp/7650400 mobi_app/android channel/ss_baidusem_022 Buvid/XY35BDC3DAFB5E4325BD78AA6D5B43CC37E52 sessionID/d2c7f7c4 innerVer/7650400 c_locale/zh_CN s_locale/zh_CN disable_rcmd/0' }, body: jsonData }).then(r => r.text()); let json; try { json = JSON.parse(res); } catch (e) { log('系统消息清空返回内容不是JSON'); document.getElementById(statusId).textContent = '0'; document.getElementById(resultId).textContent = '清理失败'; return; } const success = json.code === 0; document.getElementById(statusId).textContent = success ? '1' : '0'; document.getElementById(resultId).textContent = success ? '清理完成' : '清理失败'; log(`系统消息清空结果: ${json.code} ${json.message || ''}`); } catch (e) { log(`系统消息清空异常: ${e}`); document.getElementById(statusId).textContent = '0'; document.getElementById(resultId).textContent = '清理失败'; } } // --------- 删除私信函数 --------- async function deletePrivateMessage(talkerId) { // 安全检查:确保必要参数存在 if (!talkerId || talkerId === '' || talkerId === undefined || talkerId === null) { log(`私信删除参数不完整,跳过删除操作: talkerId=${talkerId}`); return { ok: false, raw: '', msg: '参数不完整,跳过操作' }; } const csrf = document.cookie.match(/bili_jct=([0-9a-zA-Z]+);?/)?.[1] || ''; if (!csrf) { log('未找到CSRF令牌,可能未登录'); return { ok: false, raw: '', msg: '未找到CSRF令牌' }; } const params = `talker_id=${talkerId}&session_type=1&build=0&mobi_app=web&csrf_token=${csrf}&csrf=${csrf}`; try { const res = await fetch('https://api.vc.bilibili.com/session_svr/v1/session_svr/remove_session', { method: 'POST', credentials: 'include', headers: { 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8', 'Referer': 'https://www.bilibili.com/', 'User-Agent': 'Mozilla/5.0 (Linux; U; Android 8.1.0; zh-cn; BLA-AL00 Build/HUAWEIBLA-AL00) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/57.0.2987.132 MQQBrowser/8.9 Mobile Safari/537.36' }, body: params }).then(r => r.text()); let json; try { json = JSON.parse(res); } catch (e) { return { ok: false, raw: res, msg: '返回内容不是JSON' }; } return { ok: json.code === 0, raw: res, msg: json.message || '' }; } catch (e) { return { ok: false, raw: '', msg: '请求异常: ' + e }; } } cleanWin.querySelector('#bili-clean-start').onclick = async function () { ['reply', 'like', 'at', 'pm', 'history', 'system'].forEach(t => { document.getElementById('clean-status-' + t).textContent = '0'; document.getElementById('clean-res-' + t).textContent = ''; }); if (document.getElementById('clean-reply').checked) { document.getElementById('clean-status-reply').textContent = '0'; await cleanType(1, 'clean-status-reply', 'clean-res-reply'); } if (document.getElementById('clean-like').checked) { document.getElementById('clean-status-like').textContent = '0'; await cleanType(0, 'clean-status-like', 'clean-res-like'); } if (document.getElementById('clean-at').checked) { document.getElementById('clean-status-at').textContent = '0'; await cleanType(2, 'clean-status-at', 'clean-res-at'); } if (document.getElementById('clean-pm').checked) { document.getElementById('clean-status-pm').textContent = '0'; await cleanType(3, 'clean-status-pm', 'clean-res-pm'); } if (document.getElementById('clean-history').checked) { document.getElementById('clean-status-history').textContent = '0'; await cleanType(4, 'clean-status-history', 'clean-res-history'); } if (document.getElementById('clean-system').checked) { document.getElementById('clean-status-system').textContent = '0'; await cleanType(5, 'clean-status-system', 'clean-res-system'); } }; // --------- 获取消息id和单条删除函数 --------- async function testDeleteMsg(id, type) { // 安全检查:确保必要参数存在 if (!id || id === '' || type === undefined || type === null) { log(`参数不完整,跳过删除操作: id=${id}, type=${type}`); return { ok: false, raw: '', msg: '参数不完整,跳过操作' }; } const csrf = document.cookie.match(/bili_jct=([0-9a-zA-Z]+);?/)?.[1] || ''; if (!csrf) { log('未找到CSRF令牌,可能未登录'); return { ok: false, raw: '', msg: '未找到CSRF令牌' }; } const params = `tp=${type}&id=${encodeURIComponent(id)}&build=0&mobi_app=web&csrf_token=${csrf}&csrf=${csrf}`; try { const res = await fetch('https://api.bilibili.com/x/msgfeed/del', { method: 'POST', credentials: 'include', headers: { 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8', 'Referer': 'https://www.bilibili.com/', 'User-Agent': 'Mozilla/5.0 (Linux; U; Android 8.1.0; zh-cn; BLA-AL00 Build/HUAWEIBLA-AL00) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/57.0.2987.132 MQQBrowser/8.9 Mobile Safari/537.36' }, body: params }).then(r => r.text()); let json; try { json = JSON.parse(res); } catch (e) { return { ok: false, raw: res, msg: '返回内容不是JSON' }; } return { ok: json.code === 0, raw: res, msg: json.message || '' }; } catch (e) { return { ok: false, raw: '', msg: '请求异常: ' + e }; } } // --------- 清理进度条 --------- const progressBarWrap = document.createElement('div'); progressBarWrap.id = 'bili-clean-progress'; progressBarWrap.style.height = '8px'; progressBarWrap.style.background = '#fff3'; progressBarWrap.style.borderRadius = '4px'; progressBarWrap.style.overflow = 'hidden'; progressBarWrap.style.margin = '10px 0'; progressBarWrap.style.display = 'none'; const progressBar = document.createElement('div'); progressBar.id = 'bili-clean-progress-bar'; progressBar.style.height = '100%'; progressBar.style.width = '0'; progressBar.style.background = 'linear-gradient(90deg,#a18cd1,#fbc2eb)'; progressBar.style.transition = 'width 0.3s'; progressBarWrap.appendChild(progressBar); cleanWin.insertBefore(progressBarWrap, cleanWin.querySelector('.bili-clean-table')); // --------- 样式(美化升级+缩小+终端风格日志) --------- const style = document.createElement('style'); style.innerHTML = ` @keyframes biliMenuPop { 0% { opacity:0; transform:translateY(16px) scale(0.7); } 100% { opacity:1; transform:translateY(0) scale(1); } } @keyframes biliButtonPulse { 0% { transform: scale(1); } 50% { transform: scale(1.15); } 100% { transform: scale(1); } } .bili-3d-btn { position: relative; width: 34px; height: 34px; display: flex; align-items: center; justify-content: center; perspective: 90px; filter: drop-shadow(0 5px 20px #a18cd1cc) drop-shadow(0 2px 8px #fff8); transition: filter 0.3s, transform 0.3s; border-radius: 50%; box-shadow: 0 0 0 2px #fff6 inset, 0 0 0 1px #a18cd144, 0 4px 16px #a18cd1cc, 0 1px 5px #fff8, 0 0 36px #a18cd133; background: radial-gradient(circle at 30% 30%, #fff8, #a18cd144); overflow: visible; } .bili-3d-btn:hover { filter: drop-shadow(0 8px 30px #a18cd1ee) drop-shadow(0 3px 12px #fff8); transform: scale(1.08) rotateZ(-3deg); box-shadow: 0 0 0 3px #fff8 inset, 0 0 0 1.5px #a18cd166, 0 8px 30px #a18cd1ee, 0 3px 12px #fff8, 0 0 50px #a18cd155; } .bili-3d-glow { position: absolute; left: -4px; top: -4px; width: calc(100% + 8px); height: calc(100% + 8px); border-radius: 50%; box-shadow: 0 0 8px 1px #a18cd188, 0 0 17px 3px #a18cd144, 0 0 25px 5px #a18cd122; pointer-events: none; opacity: 0.8; animation: biliGlow 3s infinite alternate cubic-bezier(.5,1.8,.5,1); } .bili-3d-ring { position: absolute; left: -3px; top: -3px; width: calc(100% + 6px); height: calc(100% + 6px); border-radius: 50%; border: 1px solid transparent; background: linear-gradient(45deg, #a18cd1, #fbc2eb, #a18cd1) border-box; mask: linear-gradient(#fff 0 0) padding-box, linear-gradient(#fff 0 0); mask-composite: subtract; pointer-events: none; opacity: 0.6; animation: biliRing 4s linear infinite; } @keyframes biliGlow { 0% { opacity: 0.6; box-shadow: 0 0 6px 1px #a18cd166, 0 0 13px 3px #a18cd133, 0 0 19px 4px #a18cd111; } 100% { opacity: 1; box-shadow: 0 0 13px 3px #a18cd1aa, 0 0 25px 5px #a18cd166, 0 0 38px 8px #a18cd133; } } @keyframes biliRing { 0% { transform: rotate(0deg) scale(1); opacity: 0.6; } 50% { transform: rotate(180deg) scale(1.05); opacity: 0.8; } 100% { transform: rotate(360deg) scale(1); opacity: 0.6; } } #bili-float-btn { transition: box-shadow 0.2s, transform 0.2s; } #bili-float-menu { box-shadow: 0 6px 24px #a18cd144; animation: biliMenuPop 0.3s cubic-bezier(.5,1.8,.5,1) both; backdrop-filter: blur(10px) saturate(1.2); background: rgba(255,255,255,0.85); border: 1.2px solid #fff4; border-radius: 16px; min-width: 90px; font-size: 0.95rem; padding: 8px 0; } #bili-clean-panel { position: fixed; right: 60px; bottom: 30px; width: 320px; background: linear-gradient(135deg, #a18cd1 0%, #fbc2eb 100%); border-radius: 20px; box-shadow: 0 10px 40px #a18cd144, 0 2px 8px #fff8; padding: 20px 18px 14px 18px; z-index: 100002; font-family: 'Microsoft Yahei', 'SimSun', Arial, sans-serif; color: #fff; transform-style: preserve-3d; animation: biliPanelIn 0.5s cubic-bezier(.5,1.8,.5,1); backdrop-filter: blur(10px) saturate(1.2); border: 1.5px solid #fff4; } @keyframes biliPanelIn { 0% { opacity:0; transform:rotateY(30deg) scale(0.7) translateY(24px); } 100% { opacity:1; transform:rotateY(0) scale(1) translateY(0); } } .bili-clean-title { font-size: 1.35rem; font-weight: bold; letter-spacing: 1px; text-align: center; text-shadow: 0 2px 8px #a18cd1cc; padding: 4px 0; border-radius: 12px 12px 0 0; transition: background 0.2s, opacity 0.2s; } .bili-clean-drag-handle:hover { background: rgba(255,255,255,0.1); cursor: move; } .bili-clean-drag-handle:active { background: rgba(255,255,255,0.2); opacity: 0.8; } .bili-clean-sub { font-size: 0.95rem; margin-top: 2px; color: #f3e6ff; text-align: center; margin-bottom: 10px; } .bili-clean-options { margin: 10px 0 10px 0; } .bili-clean-row { display: flex; justify-content: space-between; margin-bottom: 6px; } .bili-clean-row label { background: rgba(255,255,255,0.13); border-radius: 8px; padding: 5px 10px; font-size: 0.98rem; cursor: pointer; display: flex; align-items: center; gap: 6px; box-shadow:0 1px 2px #fff2; transition: background 0.18s, box-shadow 0.18s; } .bili-clean-row label:hover { background: #f3e6ff; color: #a18cd1; box-shadow: 0 2px 6px #a18cd1aa; transform: translateY(-1px) scale(1.02); transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1); } .bili-clean-row input[type="checkbox"] { accent-color: #a18cd1; width: 15px; height: 15px; } .bili-clean-btn { width: 100%; margin: 10px 0 10px 0; padding: 10px 0; background: linear-gradient(90deg, #7f7fd5 0%, #86a8e7 50%, #91eac9 100%); border: none; border-radius: 12px; font-size: 1.05rem; font-weight: bold; color: #fff; cursor: pointer; box-shadow: 0 2px 8px #a18cd110; transition: background 0.2s, box-shadow 0.2s; position:relative; overflow:hidden; } .bili-btn-glow { position:absolute; left:0; top:0; width:100%; height:100%; border-radius:12px; box-shadow:0 0 16px 4px #fbc2eb88, 0 0 6px 1px #a18cd1cc; pointer-events:none; opacity:0.5; animation:biliGlow 2.2s infinite alternate cubic-bezier(.5,1.8,.5,1); z-index:0; } .bili-clean-btn span { z-index:1; position:relative; } .bili-clean-btn:hover { background: linear-gradient(90deg, #91eac9 0%, #86a8e7 50%, #7f7fd5 100%); box-shadow: 0 6px 18px #a18cd1cc; transform: translateY(-2px) scale(1.02); transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); } .bili-clean-table { background: rgba(255,255,255,0.13); border-radius: 10px; padding: 6px 0 0 0; margin-top: 6px; box-shadow:0 1px 4px #fff2; } .bili-clean-thead, .bili-clean-tbody > div { display: flex; justify-content: space-between; padding: 6px 10px; font-size: 0.98rem; } .bili-clean-thead { font-weight: bold; color: #e0d7ff; border-bottom: 1px solid rgba(255,255,255,0.18); } .bili-clean-tbody > div { border-bottom: 1px solid rgba(255,255,255,0.09); color: #fff; transition: background 0.18s; } .bili-clean-tbody > div:last-child { border-bottom: none; } .bili-clean-tbody > div[data-anim] { animation: biliRowAnim 0.5s cubic-bezier(.5,1.8,.5,1); } @keyframes biliRowAnim { 0%{background:#fbc2eb44;} 100%{background:transparent;} } .bili-clean-close { width: 100%; margin: 10px 0 0 0; padding: 7px 0; background: rgba(255,255,255,0.22); border: none; border-radius: 8px; font-size: 0.98rem; color: #fff; cursor: pointer; transition: background 0.18s; } .bili-clean-close:hover { background: rgba(255,255,255,0.32); transform: translateY(-1px); box-shadow: 0 2px 8px rgba(161, 140, 209, 0.3); } #bili-debug-panel { position: fixed; right: 60px; bottom: 30px; width: 340px; background: #181c20; border-radius: 10px; box-shadow: 0 8px 24px #000a, 0 2px 8px #2228; z-index: 100002; color: #e0e0e0; font-family: 'Fira Mono', 'Consolas', 'Menlo', 'monospace'; padding: 14px 14px 10px 14px; animation: biliPanelIn 0.5s cubic-bezier(.5,1.8,.5,1); border: 1.5px solid #222; } .bili-debug-title { font-size: 1.05rem; font-weight: bold; margin-bottom: 10px; text-align: center; color: #7fffd4; letter-spacing: 1px; } #bili-debug-log { background: #181c20; border-radius: 6px; border: 1px solid #222; color: #e0e0e0; font-size: 0.92rem; font-family: 'Fira Mono', 'Consolas', 'Menlo', 'monospace'; box-shadow: 0 2px 8px #0004 inset; padding: 8px; outline: none; resize: none; line-height: 1.5; transition: border 0.2s; } #bili-debug-log::-webkit-scrollbar { width: 6px; background: #222; } #bili-debug-log::-webkit-scrollbar-thumb { background: #444; border-radius: 3px; } .bili-debug-close { width: 100%; margin: 10px 0 0 0; padding: 7px 0; background: #23272e; border: none; border-radius: 8px; font-size: 0.98rem; color: #7fffd4; cursor: pointer; transition: background 0.18s, color 0.18s; } .bili-debug-close:hover { background: #222; color: #fff176; transform: translateY(-1px); box-shadow: 0 2px 8px rgba(127, 255, 212, 0.3); } #bili-clean-progress { box-shadow: 0 2px 6px #a18cd1aa; background: rgba(255,255,255,0.22); border: 1px solid #fff4; height: 5px !important; border-radius: 3px !important; } #bili-clean-progress-bar { border-radius: 3px; } /* 主题切换动画 */ #bili-clean-panel, #bili-float-menu { transition: background 0.4s, color 0.4s, box-shadow 0.4s; } /* 悬浮按钮/菜单动效增强 */ #bili-float-btn:hover { box-shadow: 0 8px 25px #a18cd1cc, 0 3px 8px #fff8; transform: scale(1.12) rotateZ(-6deg); } @keyframes biliMenuPop { 0% { opacity:0; transform:scale(0.7) translateY(16px);} 80% { transform:scale(1.08) translateY(-4px);} 100% { opacity:1; transform:scale(1) translateY(0);} } /* 菜单关闭淡出动画 */ @keyframes biliMenuFadeOut { 0% { opacity:1; } 100% { opacity:0; } } /* 进度条美化 */ #bili-clean-progress-bar { background: linear-gradient(90deg,#a18cd1,#fbc2eb,#a18cd1); background-size: 200% 100%; animation: biliProgressMove 1.2s linear infinite; box-shadow: 0 2px 8px #a18cd1aa; } @keyframes biliProgressMove { 0% { background-position: 0 0; } 100% { background-position: 100% 0; } } /* 进度条完成闪光 */ #bili-clean-progress-bar.flash { animation: biliProgressMove 1.2s linear infinite, biliProgressFlash 0.6s; } @keyframes biliProgressFlash { 0% { filter: brightness(1.2) drop-shadow(0 0 8px #fff8); } 60% { filter: brightness(2.2) drop-shadow(0 0 24px #fff8); } 100% { filter: brightness(1) drop-shadow(0 0 0 #fff0); } } /* 主题色块选中动画 */ .bili-theme-dot.active{ box-shadow:0 0 0 3px #fbc2eb,0 2px 8px #a18cd1cc;border:2.5px solid #f78ca2;transform:scale(1.18);transition:transform 0.18s, box-shadow 0.18s, border 0.18s; } /* 清理按钮loading动画 */ .bili-clean-btn.loading { pointer-events:none; opacity:0.7; position:relative; } .bili-clean-btn .bili-btn-loading { display:inline-block; width:18px; height:18px; vertical-align:middle; margin-right:6px; border:2.5px solid #fff4; border-top:2.5px solid #a18cd1; border-radius:50%; animation: biliBtnSpin 0.8s linear infinite; } @keyframes biliBtnSpin { 100% { transform: rotate(360deg); } } /* 表格三列对齐优化 */ .bili-clean-thead span, .bili-clean-tbody > div > span { display: inline-block; text-align: center; } .bili-clean-thead span:nth-child(1), .bili-clean-tbody > div > span:nth-child(1) { width: 60px; text-align: left; } .bili-clean-thead span:nth-child(2), .bili-clean-tbody > div > span:nth-child(2) { width: 50px; } .bili-clean-thead span:nth-child(3), .bili-clean-tbody > div > span:nth-child(3) { width: 80px; text-align: right; } /* 选项按钮对齐优化 */ .bili-clean-row label { flex: 1 1 0; text-align: center; min-width: 0; margin: 0 4px; justify-content: center; } .bili-clean-row { gap: 0; } #bili-donate-panel { position: fixed; right: 50%; bottom: 50%; transform: translate(50%,50%); background: #fff; border-radius: 18px; box-shadow: 0 8px 32px #a18cd1aa, 0 2px 8px #fff8; z-index: 100003; padding: 28px 28px 18px 28px; text-align: center; min-width: 260px; font-family: 'Microsoft Yahei', Arial, sans-serif; color: #333; animation: biliPanelIn 0.5s cubic-bezier(.5,1.8,.5,1); } .bili-donate-title { font-size: 1.18rem; font-weight: bold; margin-bottom: 10px; color: #a18cd1; } .bili-donate-img { width: 180px; height: 180px; border-radius: 12px; box-shadow: 0 2px 16px #a18cd1aa; margin-bottom: 10px; } .bili-donate-tip { color: #888; font-size: 0.98rem; margin-bottom: 12px; } .bili-donate-close { padding: 7px 0; width: 100%; border: none; border-radius: 8px; background: #f3e6ff; color: #a18cd1; font-size: 1rem; cursor: pointer; transition: background 0.18s; } .bili-donate-close:hover { background: #a18cd1; color: #fff; transform: translateY(-1px) scale(1.02); box-shadow: 0 4px 12px rgba(161, 140, 209, 0.4); } `; document.head.appendChild(style); // --------- 清理窗口动效输出优化 --------- function animateRowStatus(type) { const row = document.querySelector(`#clean-status-${type}`)?.parentElement; if (row) { row.setAttribute('data-anim', '1'); setTimeout(() => row.removeAttribute('data-anim'), 600); } } // 在批量清理和单条清理时调用 animateRowStatus(type) // 例如: animateRowStatus('reply'); // --------- ESC关闭窗口 --------- document.addEventListener('keydown', e => { if (e.key === 'Escape') { [cleanWin, debugWin, donateWin].forEach(win => { if (win.style.display === 'block') win.style.display = 'none'; }); } }); // --------- 主题切换 --------- const THEMES = { dark: { name: '酷雅黑', main: '#181c20', btn: '#23272e', shadow: '#000a', accent: '#7fffd4', font: '#e0e0e0', table: '#23272e', label: '#23272e', hover: '#23272e', border: '#222', dot: 'linear-gradient(135deg,#23272e,#7fffd4)' }, pink: { name: '可爱粉', main: 'linear-gradient(135deg, #fff0f6 0%, #fbc2eb 60%, #ffb6c1 100%)', btn: 'linear-gradient(90deg, #ffb6c1 0%, #fbc2eb 100%)', shadow: '#ffb6c144', accent: '#ff69b4', font: '#333', table: 'rgba(255,182,193,0.10)', label: 'rgba(255,182,193,0.13)', hover: '#ffe4ec', border: '#ff69b4', dot: 'linear-gradient(135deg,#fbc2eb,#ffb6c1)' }, blue: { name: '清新蓝', main: 'linear-gradient(135deg, #e3f2fd 0%, #90caf9 40%, #5b9df9 100%)', btn: 'linear-gradient(90deg, #5b9df9 0%, #e3f2fd 100%)', shadow: '#5b9df944', accent: '#409eff', font: '#222', table: 'rgba(91,157,249,0.10)', label: 'rgba(91,157,249,0.13)', hover: '#e3f2fd', border: '#409eff', dot: 'linear-gradient(135deg,#90caf9,#5b9df9)' }, green: { name: '治愈绿', main: 'linear-gradient(135deg, #e0f7ef 0%, #6ee7b7 60%, #34d399 100%)', btn: 'linear-gradient(90deg, #10b981 0%, #e0f7ef 100%)', shadow: '#34d39944', accent: '#10b981', font: '#222', table: 'rgba(52,211,153,0.10)', label: 'rgba(52,211,153,0.13)', hover: '#e0f7ef', border: '#10b981', dot: 'linear-gradient(135deg,#6ee7b7,#34d399)' }, high: { name: '高对比', main: 'linear-gradient(135deg, #fff 0%, #f5f6fa 100%)', btn: 'linear-gradient(90deg, #6366f1 0%, #e0e7ff 100%)', shadow: '#6366f144', accent: '#6366f1', font: '#222', table: 'rgba(99,102,241,0.10)', label: 'rgba(99,102,241,0.13)', hover: '#e0e7ff', border: '#6366f1', dot: 'linear-gradient(135deg,#6366f1,#e0e7ff)' } }; let currentTheme = 'dark'; // --------- 悬浮按钮主题发光动态样式 --------- let floatBtnThemeStyle = document.createElement('style'); floatBtnThemeStyle.id = 'bili-float-btn-theme'; document.head.appendChild(floatBtnThemeStyle); function applyTheme(theme) { const t = THEMES[theme]; if (!t) return; // 动画过渡 cleanWin.style.transition = 'background 0.4s, color 0.4s, box-shadow 0.4s'; menu.style.transition = 'background 0.4s, color 0.4s, box-shadow 0.4s'; // 悬浮按钮主题发光同步 if (document.getElementById('bili-float-btn-theme')) document.getElementById('bili-float-btn-theme').remove(); floatBtnThemeStyle = document.createElement('style'); floatBtnThemeStyle.id = 'bili-float-btn-theme'; floatBtnThemeStyle.innerHTML = ` .bili-3d-btn { box-shadow: 0 0 0 2px #fff6 inset, 0 0 0 1px ${t.accent}44, 0 4px 17px ${t.accent}cc, 0 1px 6px #fff8, 0 0 42px ${t.accent}33; background: radial-gradient(circle at 30% 30%, #fff8, ${t.accent}44); border: none; overflow: visible; } .bili-3d-btn:hover { filter: drop-shadow(0 8px 34px ${t.accent}ee) drop-shadow(0 3px 11px #fff8); box-shadow: 0 0 0 3px #fff8 inset, 0 0 0 1px ${t.accent}66, 0 8px 34px ${t.accent}ee, 0 3px 11px #fff8, 0 0 56px ${t.accent}55; } .bili-3d-glow { box-shadow: 0 0 14px 3px ${t.accent}88, 0 0 28px 6px ${t.accent}44, 0 0 42px 8px ${t.accent}22; } .bili-3d-ring { background: linear-gradient(45deg, ${t.accent}, #fbc2eb, ${t.accent}) border-box; } @keyframes biliGlow { 0% { opacity: 0.6; box-shadow: 0 0 11px 2px ${t.accent}66, 0 0 21px 4px ${t.accent}33, 0 0 32px 6px ${t.accent}11; } 100% { opacity: 1; box-shadow: 0 0 21px 4px ${t.accent}aa, 0 0 42px 8px ${t.accent}66, 0 0 63px 13px ${t.accent}33; } } `; document.head.appendChild(floatBtnThemeStyle); // SVG主色和渐变更新 const svg = floatBtn.querySelector('svg'); const grad = svg.querySelector('#bili3d-grad'); if (grad) { grad.innerHTML = ` `; } // 更新图标渐变 const iconGrad = svg.querySelector('#bili-icon-grad'); if (iconGrad) { iconGrad.innerHTML = ` `; } // SVG整体滤镜 svg.style.filter = `drop-shadow(0 0 12px ${t.accent}88) drop-shadow(0 0 4px #fff8)`; // 主面板 if (theme === 'dark') { cleanWin.style.background = '#181c20'; cleanWin.style.boxShadow = '0 8px 24px #000a, 0 2px 8px #2228'; cleanWin.style.color = '#e0e0e0'; cleanWin.style.borderRadius = '10px'; cleanWin.style.border = '1.5px solid #222'; cleanWin.style.fontFamily = "'Microsoft Yahei', Arial, sans-serif"; cleanWin.querySelector('.bili-clean-title').style.color = '#7fffd4'; cleanWin.querySelector('.bili-clean-title').style.letterSpacing = '1px'; cleanWin.querySelector('.bili-clean-title').style.fontWeight = 'bold'; cleanWin.querySelector('.bili-clean-sub').style.color = '#b2dfdb'; cleanWin.querySelector('.bili-clean-btn').style.background = '#23272e'; cleanWin.querySelector('.bili-clean-btn').style.color = '#7fffd4'; cleanWin.querySelector('.bili-clean-btn').style.borderRadius = '8px'; cleanWin.querySelector('.bili-clean-btn').style.fontWeight = 'bold'; cleanWin.querySelector('.bili-clean-close').style.background = '#23272e'; cleanWin.querySelector('.bili-clean-close').style.color = '#7fffd4'; cleanWin.querySelector('.bili-clean-close').style.borderRadius = '8px'; cleanWin.querySelector('.bili-clean-close').style.fontWeight = 'bold'; cleanWin.querySelectorAll('.bili-clean-row label').forEach(lab => { lab.style.background = '#23272e'; lab.style.color = '#e0e0e0'; lab.style.borderRadius = '6px'; lab.style.fontFamily = "'Microsoft Yahei', Arial, sans-serif"; }); cleanWin.querySelector('.bili-clean-table').style.background = '#23272e'; cleanWin.querySelectorAll('.bili-clean-thead').forEach(th => th.style.color = '#7fffd4'); cleanWin.querySelectorAll('.bili-clean-tbody > div').forEach(row => { row.style.borderBottom = '1px solid #222'; row.style.color = '#e0e0e0'; }); } else { cleanWin.style.background = t.main; cleanWin.style.boxShadow = `0 12px 48px ${t.shadow}, 0 2px 12px #fff8`; cleanWin.style.color = t.font; cleanWin.style.borderRadius = '20px'; cleanWin.style.border = ''; cleanWin.style.fontFamily = "'Microsoft Yahei', Arial, sans-serif"; cleanWin.querySelector('.bili-clean-title').style.color = ''; cleanWin.querySelector('.bili-clean-title').style.letterSpacing = ''; cleanWin.querySelector('.bili-clean-title').style.fontWeight = 'bold'; cleanWin.querySelector('.bili-clean-sub').style.color = t.font; cleanWin.querySelector('.bili-clean-btn').style.background = t.btn; cleanWin.querySelector('.bili-clean-btn').style.color = t.font; cleanWin.querySelector('.bili-clean-btn').style.borderRadius = '12px'; cleanWin.querySelector('.bili-clean-btn').style.fontWeight = 'bold'; cleanWin.querySelector('.bili-clean-close').style.background = t.label; cleanWin.querySelector('.bili-clean-close').style.color = t.font; cleanWin.querySelector('.bili-clean-close').style.borderRadius = '8px'; cleanWin.querySelector('.bili-clean-close').style.fontWeight = 'bold'; cleanWin.querySelectorAll('.bili-clean-row label').forEach(lab => { lab.style.background = t.label; lab.style.color = t.font; lab.style.borderRadius = '8px'; lab.style.fontFamily = "'Microsoft Yahei', Arial, sans-serif"; }); cleanWin.querySelector('.bili-clean-table').style.background = t.table; cleanWin.querySelectorAll('.bili-clean-thead').forEach(th => th.style.color = t.border); cleanWin.querySelectorAll('.bili-clean-tbody > div').forEach(row => { row.style.borderBottom = `1px solid ${t.table}`; row.style.color = t.font; }); } // 菜单 menu.style.background = t.main; menu.style.boxShadow = cleanWin.style.boxShadow; menu.style.borderRadius = cleanWin.style.borderRadius; menu.style.border = cleanWin.style.border; menu.style.opacity = '0.9'; menu.style.fontFamily = "'Microsoft Yahei', Arial, sans-serif"; menu.style.color = t.font; Array.from(menu.children).forEach(item => { if (item.classList && item.classList.contains('bili-float-menu-item')) { item.style.background = 'none'; item.style.color = t.font; item.style.fontFamily = "'Microsoft Yahei', Arial, sans-serif"; item.style.fontWeight = 'bold'; } }); // 主题高亮 document.querySelectorAll('.bili-theme-dot').forEach(btn => { btn.classList.toggle('active', btn.dataset.theme === theme); }); currentTheme = theme; localStorage.setItem('bili-theme', theme); } // --------- 主题切换菜单(色块按钮) --------- const themeBar = document.createElement('div'); themeBar.id = 'bili-theme-bar'; themeBar.style.display = 'flex'; themeBar.style.justifyContent = 'space-around'; themeBar.style.margin = '8px 0 0 0'; themeBar.style.gap = '6px'; themeBar.style.padding = '8px 12px 12px 12px'; // 增加底部内边距确保完全显示 themeBar.style.borderTop = '1px solid rgba(255,255,255,0.2)'; themeBar.style.fontSize = '0.98rem'; themeBar.style.userSelect = 'none'; themeBar.style.minHeight = '40px'; // 确保有足够高度 themeBar.style.alignItems = 'center'; // 垂直居中对齐 // 色块按钮生成 Object.entries(THEMES).forEach(([k, v]) => { const dot = document.createElement('span'); dot.className = 'bili-theme-dot'; dot.dataset.theme = k; dot.title = v.name; dot.style.display = 'inline-block'; dot.style.width = '26px'; dot.style.height = '26px'; dot.style.borderRadius = '50%'; dot.style.margin = '0 2px'; dot.style.background = v.dot; dot.style.cursor = 'pointer'; dot.style.border = '2.5px solid #fff'; dot.style.boxShadow = '0 2px 8px #0002'; dot.style.transition = 'box-shadow 0.18s, border 0.18s, transform 0.18s'; dot.onmouseenter = () => { if (!dot.classList.contains('active')) { dot.style.transform = 'scale(1.1)'; dot.style.boxShadow = '0 4px 12px rgba(0,0,0,0.2)'; } }; dot.onmouseleave = () => { if (!dot.classList.contains('active')) { dot.style.transform = ''; dot.style.boxShadow = '0 2px 8px #0002'; } }; dot.onclick = () => applyTheme(k); themeBar.appendChild(dot); }); menu.appendChild(themeBar); // 主题高亮样式 const themeStyle = document.createElement('style'); themeStyle.innerHTML = `.bili-theme-dot.active{box-shadow:0 0 0 3px #fbc2eb,0 2px 8px #a18cd1cc;border:2.5px solid #f78ca2;transform:scale(1.12);}`; document.head.appendChild(themeStyle); // 初始化主题 setTimeout(() => applyTheme(currentTheme), 100); // --------- 赞赏二维码弹窗 --------- // 推荐:使用图床直链(如需切换为base64或GitHub raw直链,见下方注释) const qrUrl = "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/4QJmRXhpZgAATU0AKgAAAAgAAodpAAQAAAABAAABMuocAAcAAAEMAAAAJgAAAAAc6gAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKSCAADAAAAAQAAAADqHAAHAAABDAAAAVAAAAAAHOoAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/+EB3Wh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8APD94cGFja2V0IGJlZ2luPSfvu78nIGlkPSdXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQnPz4NCjx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iPjxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIvPjwveDp4bXBtZXRhPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/eHBhY2tldCBlbmQ9J3cnPz7/2wCEAAoKCgoKCgsMDAsPEA4QDxYUExMUFiIYGhgaGCIzICUgICUgMy03LCksNy1RQDg4QFFeT0pPXnFlZXGPiI+7u/sBCgoKCgoKCwwMCw8QDhAPFhQTExQWIhgaGBoYIjMgJSAgJSAzLTcsKSw3LVFAODhAUV5PSk9ecWVlcY+Ij7u7+//CABEIAa0BrgMBIgACEQEDEQH/xAAcAAEAAgIDAQAAAAAAAAAAAAAAAQYFBwIDBAj/2gAIAQEAAAAA3MAAAAAAAAESAAACEoSAAAESAABGMycvnXfvtamzl9dXT6wAAIkAAhLh8mfWHc+et3Zdpm4XZqrG7nQkAAiQADp0vu2Wn9r+lCXFyj5z2nelXrmywACJABA+Zt/5tjsXZXW7I+ZvojJdHyb9X+qPnbY2xEJACJABrC/5B1dicTgbo176by+SPq701LSv0tPm+bPpftUPP50AIkAGp8NvE8PL2B1dHs6vkr645ab5bijC5qTC+72ABEgCHHx8MkpsXNCa7UdodWkN6PmjdlrxPzN9W8uHgyIkAiQDo1FWrrsnVm3iE12vbD4YnM9WKzUV2wcsPW77GO17eNQ+XalvkBEgI0Ja77qv17cJxdM2N0+HK+PXO0qdqf6JquB2R4tfbOip+C5/NW8MpoXedhARIIPmD6c0huz5u+mNf9958nyr9W+gGvKRvrT/ALdpaf8ABvDw/MG/VF2FgPXW9wQkIkGt9ic/mr6C769qz6B6nax3v5Qkr2Ju/Tz6flb6cyvz/mN0YjQn0d16esmxKDYs8ESCmWHEenQnc39lkjo51rWm9KdbMHkMgasrO+Y0vuTujW+qu6xbyrGkvoHLhEgeCtXThw7a9oD6RyA0927O+V/rP5j+hdQ3Wa1uP5W+js8B18cFn+xIIkQkaH2NcWsdYfTsoxuv9paY3FqzY1DuVcyOb1luDT2ycxTuF1dXhpd495CSJI+drzsztKv8/X3dHPCZs4zMI4zzRPDxwnnxjIdGKqWySFK8GxSJGC1L692Qny6Qqn0z6+vj0cefVy7OfKXHp9Dow3k4LhzaK3h2w4/POQ3rHaRIQnWFrskKrZe6t4Lo9do7Xp5uE8hEYHwLhyJVHUH0DgbPzCJQJdPLnqi+5pNEo89l2s3q7EcI7RDjWem39kSUtc5QSiVF4WbIdwawr24cZYqBTevndrf6ZcIjml19k4/AW/hW7WIT56jScF9EEunhUsjQ8JvTt5GC+ed08KK5Xa5evjwT18pjs4TM+LIfMto3oMPrik1u03q52IkGPrFx0VvXUF7tKNfUhyu137urlHPy93Lj2Rx5sTmuPOORTKfdbP3SIAkhrXzXrQm6MRR0327z1uU9XPl1dzq7WBsOj6Led6AICfFQb3QrjluPeEVrLUukF7vHLq4eh18ezh2ujumv2Sn5rLyOPLC5eoWSj7HierA5LUtpyeK56E+h7rraoe7Y9do8Ter3Pn48+7jHDsnlHT2YGyaqxu3tT7b0fvbQu+9Pbh19sGv2OJBBDlha1jrlWKMXy88qris5Y/B0+2eXbx83bW7brlsPz+1KQIlEoCfP2YKrW6q0Yvt27MPSb57fPRMFa7h6+nxe2sXDXnovXagSCJ4YfNq7g/Tordt91pYsNT9nVyipvF09PHGZXlwx+PsTn4vDyxNy1VgtzZBobeuiN9jqxmYifHrjabyeLKeDIc4K1kaZRi42vPeTt7E9fDl2cK1ULHyvFQtHpI5ef0DH0LZsSBBx6dD0vK7zwlFLxcsjivb3+b0xHiyFf1SuntvWiKFmrzsfOQkCJIPNXLVy0HvmlWbJNcUQvlyx/h1/m7VnOqlrhrDFTefRekV6jZvYdO9mf7JkRLpqlL2Lrut779sSr2gtvdFCL5ZdWdHXybHq2EsWD8krLnbz8yXbdKWF79Y6u+osh18yVF1PdNm5AE4zCWzXFC5RaMB1S487dafPhaTxlk7heuqp5WpbNgeb0zoTfPKJQkjq1lrj6W7BrWgzy7fP5PXy7Mhd7H6OzUeG4T3Xu/c3X48jT++0JBEiHl89Aq+2LCS1tQE3bP8Am8Xn8fk6/M447r7uc3fY9HoO8PSqGi/buS5AiSMRXsvgb+lr/wB9xa1oLnsS4SBEdfR0dPm9NnjVF/zZFMpu54SRI+b9h7NHR3eafTjezCc2T9kuUxM8IHJHTz73n6+7uFNxWyCJESGiN59kNIbvnTOz+Wudt6P3XqHZ+u73UM5ldebdkpvjtdVxqcvavXJJEggImv0na0ojSns218t/VHzD9Cakunmq28flP6n9UGJpXCbX5a733r2yESDW1D+hcBofj69/envhPg+WvqX3cefyb9R4v18tDfR/g9xqLbOv/K52bnU2VvHIIkGsblm/mzeuXq2tN+ND715Uup7g48lIu8oSIrOQo/dkchjuzK1Xr2L6QiQEfL/07orefzb9L4fI9/Tjsu+V/p7t1ltMdfV6RFfqNj8+P8uR7+rF3vJyIkA0Fdr7qeM9qz6YjU+K3dgfnT6oit2ZE1uqbPQjCU2yYNna9m8f4Ng+4IkA82nKzdNh/M/0jYuv5V+ks5XqhtDB1LZPl1Zt2EsNhbl0a7z/AEdLsy9Q9WweYRIAQ0bn9qONOuRLXlH335vlb6xkY7G2JV69kjjjIueakIkAGAzHcJRS7q1rXd2dfyR9c8kSg41mt8TtteekESADV2xfYo1T3K4652Q6vL74+Tvqzu4US+z5/nT6QmfLiuj1ZXvkCJAAI+Z9x3ZScxnmsLLani9k8Pkz6w7o+cNq3sAAiQADp0dvXlHzfty6unnzQlVLRzVarbSAAIkAARLr+SvrD0tAbsybTlzuCuYHYKEgAESAABGEzh82fQnvajzWwnR4soAABEgAAAhKEgAABEgAAAAAAABH/8QAGgEBAQEBAQEBAAAAAAAAAAAAAAECAwUEBv/aAAgBAhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQoYugABtiKlw2AAOt5QCUAAdbygAAAOuuOQKAAHXXHIUAADreWcazu1AAB1vGRNWoAAOt4kVUAAHW85Zm2WAADd5wCszYAAAPO8b6N+7oAAA5/l/o+r4/R9UAAA+bxI6dfcAAAM+BZy9j7gAABw8nn6PoAAAAAAAAAAAAAAf/8QAGQEBAAMBAQAAAAAAAAAAAAAAAAECAwQF/9oACAEDEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJE2rUAAVXkJvXMAAUjVIJoAAM42kE1gAAZxtYCgAAZtptW9YikgADNta9b5KRIAAzbWsmls87AACkdFwVwsAAKRrMpTOEgACsaATESgAAAHV6OEebAAABb2csejj4wAADX0ZZ184AAAepDTg5wAABfuvycwAAAAAAAAAAAAAH/8QAMRAAAQUAAQMCBQMDBQEBAAAABQECAwQGAAcQERIgExQVITAxM0AWMjQiIyVBUEJg/9oACAEBAAEFAP8A1fv/APi4Dgae531GmOx6QfaS6O7dSzV+g7p0WvEQnaeevViHlBZOD/x3tc+Nk0wwxBI2eHtuc8TbpAME1MJ26oCiFi/gRs4oB26rEPh0uk0L/jf+HPL8KAN1JJOLoqOTtounF++ZqQfK1O3j2K5qL36jX0u6Tp5R+RzfbWH/AOnRWC2BM7a/nqieNoBeEM5WexLnexMlUEUgGqFaNe0ksUDI5IpI+2zJ2bemEySzCeTTNghnfIUKUoGVKfbqGaQoa6chfpoft555T+Tp99MCLiSlQ4N7Piilb47mhFY4My2NgzL+3UIKULjsCLKhhPFXwhV/zJekz4VDm5voPzOCofPabta+MtUNmSpU1FEyKPts9fLmn50ww8J/kdS8y6dnSu9ZYT7kSVIVAPJ0ClX2ySxwsp3x5CPk3lteqnzBVqelvOq95OdKKfhvZ+lAQ3fYazoc62jRrjKn8hyI5IKVCgg84EJT9tnmbWkH4rO285Q7+U7asTbMAsBly4Obk8LJ6gLp+aqnu2/uPt6nE0EHZnh0owQJFVbRw21PS3j5I4oxhsMUd/HsWIKkBjqgqPTqbqUUF1OrW33qzL43JYUwFN+7TF5AIbD6+7on8kkjiYL0YEvNyWWOGIXoQpibtfyYEpca1rG8PBmHxOSxKZufsaHPLCMTjSwAmbPjQFe91TMyvg6naOJc1tBehX+H1E0Et4jlOn1KtVcDCPj22Bgqw9MdHJMvsMkmBxmT6g/W7/LNWrcrjAYwQnCFNL9DJ4G+CL83k7oMr00YrtTzXnZM8HwOtJHpuX7sI2nmuobzJftq9PFm6mK10+m5bsR06r3lNseFYoCIgu5jO34dTnLeSJZE8h4J/BX9BzEt7J6q1gjcaK3o52NlhxyrDsOdRC5MPQwBomWEcIUoCNC3WuAS1K0+0P8Ad1Pf6M10rb5M86sul9HSse6AfzqkYRrel4VJrPL96AbTNFrmiK47NtADd29Y8p0mYz5rYFLoUB0605Yy/qPDFLlukr1SHt5Rfyluo1ISWikZNHzU0p83qAJygeHtH0IrOt0lYCM6ajH3TnJYopmRxRxN7XQwm9OieE55TnlPZqs7HohmQyS5hOSxQzsYxrG27MVKsQt2T5kGLjDieb/T/VbfTjLo/sdG/VguMOJmjTlq24K1OnRb1J0da0nTYU+gFVURDvUMSIlzh6voxv5CmFAkyRC/VDD83shmjm0ubp6QfON1OPtO6hap7B2Z0Wpthg9MFRY5rk9s92nRbHJFMzZ27dHN9OtJfU3wpuQgYhFKyaM7pxucaILUDY7ynPKdupxv5aj0zC/NkuOb6mt6W3/qcMEdaHttcCpNYDGpy7p9lqyiZXp9btTMY2Nm1gJSZ0JiThicEEpgKH5SY6AuPzWMpZqbiojkWpQTnj7aures57O6UhmbwspRL0fZ1YqWPR0tOK+EnUbeGjbMgoux6SM3DFZqsvOkuZ6rL/zXS9PRm+opaYYH6V3L0tyWRkMZ4nPoDWZENBhvPPPbzzyneWGKZra1eJS2pCg54Z4bMP5fPuO7rQ0D2Z2ow+ztucM2+mWP38+TRfKdzYdpwRj8IQBk+FempK2bhibBDsMEWLmgw9BIvb4gmcJ5sQoIRusgU0L8fnHZ0eaHKWE5np5eHFedR7x+mSzs16cHzZn7WdG4jT2tLT7T2K9SIYZEmG67AzniQyl9NG/k+/Ce209UuE6p1LKU71K1B30WOG6NhoAWzdrK9SH1lgnrWoOPzgKS958c+InEenHyMaiPYqepvPUnPWziuRESRq89ac9fPUnEci89XHPRqKQrIv1Krz6jV59RqcjvVpHXh9IlAPG0RUPPnaUdnSBnnAeIyBDPWvYjmrzekyYcN06OFC1P8BnMBTkZvpgUpr06FnaBbt5TtcpVCFbU9Obg3gDVFM5MOvRXx/Hdpmyu4qPSBqK6GOKVqyRyuSNHNajVTiN7uYj09Do17TVop0mqPhVzfHZOMX/T20GN0dvSRNeyLu5yNaf3xgjL03rF1MvY2RkUEULfxeO3UI+ZBy48rcK5/uUxObK2YK8VSHhwrMNf/VNrk+jtTcqH3ujqWI7deOurFkhc/jGIxvbz90VF9zmo5LtZYXdmf2dvHfS62jnEt9RdNZmozyWRy4jMpdYxsbPzWqlO3GxjWNVUTj+qkFe+G0gQ7H577d7fmPUq89XGPXznXyK6NLPln27qvjn/AMxL5b7EXz2exsjZ4XQS8j/s9utxdbSzBcMDDp+n492bIgxmBPkjo4qcFhWDyNEhT9p/pjBeflcVoR54oSqB6gfXZ8wvlObJqusOVrOzF++cc5JYXSPRPunZfu9v35D9omuRUcq+Gr6kVPKIq+eJwjB8SLjP7LFqtUip7nM27vvnt1akdzqDl6Tb/VayvKXUDUSX2r5T2TwV7UNetXqs3ORn0bMoBdnxe/1JsQXHdUj1ZadqK/RSauknfV59ugDl8ocBvwDjCBto5Y5ezV8Lm1VZWf6lVeeUREVyN/8At32crkY2JfMauVFj+3PPHp4Vq+WtT0o5UVG/Kpz/AK0qaO0YzHT4mtr2GDY0FBf6rQsS/wBQdPf4yMqYmodPNJdSj0opxcG5QCIf+G8LGlGT9N8sssUMcEV/Kal+okkSCFvVl7JwOzCHpueE54+21/f888p2zSeuSBnoZxy+XL+rvt2sMVIoUVInIjmp49fHeVa39e0tWSV7U8NVjFdxr2PTvs8pNpqlHpO/lLBZcfyGvBWZ+Dz7/HHNY5pPpYLtcy+AuBS+gt2aASt1A1FWTHaafSDtv+/2TmW8K9qp2RUV6uT4jk9SNXylj9pVRsafp90Xs1UR3a65zbLP2yvU0yk97SnSXOm1AxGW/F5T2X7TKFLK7+Y4WIkK4uizqmD5ntQIPJLPBWZWt0rsCqiI2Rkid1RHIQxOWvvGCqQmtt/3/PPPPP2zC+ON/XkS+eNT/dT7pyVPVHMiuYxfU2T7d3qjXo5HLy//AJLP7L2FzZG3SzoIYnj7ez4sXq5X0QS1dkkZFGH3wMoSKXkFjcfupT5LvJFFPEMyIQJaMDKxgXP0jvNTH4yfNTbYLfOhOnwEmBg6h0i9oT4JUX4CyWmBc22xvZ2eLqueZyLqzOiZrR1tLQ2/+R2/6y8noVqKicYnoie9Y0rytlYq+EkX/T6kV3xGtdInljF8s45qOSFfKvXwy/8A5TP27nVKGpOnVu61w+7ESH63bmxB+lP81S0xDVwamJ80ldmZ1X9VPb62DOnJaidnhjmgDdPKIcrYr17MAnKBQc/43Na7iJ47GAAc6x/S3NubP0nD8zwGrnaO3/f89v8ArLIiuavYwWuUrLNgx6BiEF1eWo0RkVqpFxk0EiJK1qxL9uOd6WV3c8+qGeVJpWftkel4y3bj6XAY+Vq0VSC8HEXpkTwnj+D5T22LdOk2OSOVhzTCQHF6pgGcAaCho6W4/wAjt/1k/vP58P8AKO5fosnqKCckI+BiVXOc1sr0kaeEfDtuHTV57WZjjr0kc2DkvhUY/wBDYU9UMjHRqzx8OXqeGq2Yup2alWCaCxB289vP4pJY4ohelAmJu2nNLnxOM19nSLvChEOGdq9JJzp6VLExPOoeaMGXY0bcDgdribGinZ0nJ8zOdhzdDcf5Hbz9szYSBWyK96qjXrxR0XmNiRx/ZUSJicvVXyvkpTWJm/ZsTfSzynLa8VfKsvNZYkd6lZ+2W6VPntL0qLI4XRaMHdtM7Ws1MT5lrs2mmTSeyeeOvEJ0oMzL3IU2X6GTwd8EY7XaVQhWFAhYRr4mTRtCholaxrG8+3ZzmsS7sM2O4HNDztPc/wCT2/6zrvDq7kSVURURr1a1qpxO68b5TiffjVVeOXzIWOVKTvr92ZWPbLHxn7bt9mortIkJIRd/Hb5St8f2FqDCorH4a/nyn5GzwfEtWGVKxDqWctPuGC5Vw7F6MmuPzsucG7n9/vmER0iMT1cuX4hz69iCyzjm2Uf28clmrRycOlWUK6o3yn6jvPyXGeFgP9NzUNuyOLCX0Nzph/BfVh7OAdKI0DO3n83nlq/SosXf5OJ8Ukc0a/pBlNR/VEkbJom9N8wyaiIFjOLzynNz/keeeeL+mU/v9TUfaL1h05paxShFcngdV1xKstHVDLrltxcdcVEMaaZ3MnA+a8VJQjqxMl89zwvGoicqypPByP8As8p5cxkjb+IzN9pDpRCqYvHWc3PzX6pczBltCzSDZLFes1rmvb5/BJNDBHc32Wo8udV19WZPs0QnqHnDpMzR6baKytGslGnzx30h6LPDTGzOmedOXEkB7r7TdlX7ZVfDyJCMfVs2ZLEquVU8+O0aIySK05tciXnuc8LytoJaNS1csWpPKJzyvEXgSbyzkfn4ZuyfHm8v1GvPs+w0BGn4BAaiDrdSgpi5comDIeQJdnuB+JZrJN7d+GJlxFHp5p7y0elELOCxlMRU549xYRSN0hWJACXonhN59p0Xnni/oPtMrDXzvcjl8oi+e36cb9+CatkzBFnRUaS5YZI4hknxROYqL4VOIqLxU4KlWO3yL+y7QoX69fp9naN7TE5w4PA64qdue2agPsOREROXsjp3aZEVE/FYuVKUJnqfQqo/aaq5fhkmlr+zeIqT9kXk8jI1+YrI1islSN7UakqK/wA8roNSmDvD6I+O9Tk58SNEaiNQ7DFAT88RE8ovnkT1ZIx3qRv9naWKKeKgJGi+2k2FPMyg9oAMpzyns+/4PPa7dqj6woyKNRdRwRkm8L0zJ21EZcMD7+e+9+0/ZOABlK9x+VCP4/GBXcfhRy8XBwclw1tvHYsujnZk/GiAj8CrAeiV105ArraudD8R6+F+IrfPGoqrTf660f2j6hkSgYVnepRGjJTuVb9XtrcbV0yGMicBqF3Z0PwBuAxt/wCMseEBWBt+GNENWBefC4nKXc0vPHffniQCphj106G7btF+P2bzLeEb7/Cc9Kc9KcfXgk4o6ivHBRj1fnxb+LmR3Ig0ULGp4bZggswGulrZ5s+JQIK7q1HNNYEAV4J6bFaBfiua1Gua5PwFstqLhnKdPlDWfZ83TZPy3Tp3oa9aCnDz60HbbvD6hGH+jwfFxwHn9HgeVBNKjz4MfPgs58JnPhRcWGHnwouLDDxYIUVYoufCj58FnPhM58GPnwoufBi4kbE5au1aENO6Ov1+eeSWq8S/UKXI54pU9nUAeUugum44sNp/mN5DT2NNG1zWd7XT487QoionOoqH0KgX3kBnCUYYTit2TJFeFuopaoegnjsVtdtzIc4DJqWD7jYmQRbMmXHQW81RbPz4zRy6MZoCTw4fG70gRL+zc5+4eFYXPXwNO6RgptslblhVVVXjXuYtU1agWtchts/N555T2NexV5qbd0cA6cnzhS338duqBpJrHS0OjGWPX8uME3CZ1jEjZt3/ABdVmWfCzvVZv/N9MHtdmuqY1ZQ3Sm/8EvNUhuViNK1nzNGzLZod/PCZBKUT5Hyv5+qx0R9KuSHQJBytYlqy0rbLkP5dbvIg78xpNLc0PNDoaWepXNFqNTaXFa1jRWz0OetDCdE0PirwwJ7CV6MbRVbegMDaMQ2jz0oi80EnxzguNIRemylDSMChqoKgeGqVCYwYUg1PLocRelRETs5fS2l1InsmnORjbll1ux2jRVkPr4r0f9wP2EW1rWvynemyEy4TODAEHNdfn0WmzwCkAots13S7HM1Do/piXfRNdimx0lbTsVXN5vxhEiA6eZe3Ut8WSNHee17p6DtFGtRE7+PHujyQCAiZm+DT5BBLZf8ARL/KQdK7i91tqcWSZVakAoi2eF0EyKqLVl+NX/MqfYY5tfZPRVYHyWlq6eZyMhxv+5sfKcraIDZuuq1Xzcs2YasIfRBTbvHHORrTpayTOUVlWlNK2GEB1HnJm/ZJLHCyrdoX2e3Qf4vM8ieuyXusnmu27PGtVyrVZUjBqvzxhES/wR96H5+ooCUWWym/oXqkl2jHFtd3WfW6ZAJWP32mQPSxAiyVOduqBlYavSuhL85zTEGiwGVoKTP8cjXJSyAAbd9mtEWzIDAZosDm7eU7no1fS5nv7rn+VVsLWlfbHVopZXzSAIlWwTk+Le4PZ8Kn+e3Tr3qxvpbaienT3WrwF0x+FKXJ0s8LszX9EWzIGAAM496MYZITnjecFMCh+asFOdBYXHXgVzmiLIEEYrbXtFf5csspVc31EvlDPtNl4QQ3KbGDTLyxEk8MjHRPz7kR9gRefP8ARyHPo17kYO65XugD1FVXLRrrZsoiIn8PqpPcUp06zC0Yezmo5tPAgKBL29TZUbmelaf85wnAkooC/wCAb9pMbVL0gWVG5lexoeruQTy13/W7/Prl/n1y/wAeYvvR8j5HIiqoigtSL+GQ0wQVZVkFlqJ38p3VyNQdvwdsp26qq5QfSaBVt8lZ64YVWAoxyOZ7vPZU8oQC+Ve10bu8MMs7xohtb+LrcARNGaFVKFLtvDzwQrpoVMXb/ZyMcyh05oUC3a3TqWq9EdQGxcVPKFastU5Xc/5bj3tjYK6iCL5btaWZtQLsTNAy17JGdp6kFlJAFZy/06nIgNRixQRQN/keURNsa+tHMIGQQD7a3XMzHM3oo9GK7dRThgPzGkyBUB2eOozWO0jGSwzskFGK0qTVueOb8L9JN9OTqkgn8+ZizVxHTkwhhERE7dQr/wA9pcDR+QzXaWKGZrWo1O/nuTxWfJ3mNaxvbY53+oQ+ByxcHZ/8OR6xxvbMSLVYEq1e2005aLQg7kxAN26kmilC/hTNgvnu2rMzAAuG117RL/5EWaBwXu+qBGF0wyt8kN7dUxNqy7ptTu0Ava1Sq3qw0KMDN/8AM8e3x/8Aj//EAEIQAAIBAwEFBAUKBAUEAwAAAAECAwAEERIFEDFBURMgIXEUIjJhcjAzQEJSYnOBkaEjU5KxFSQ0UIJDVGNwk7LB/9oACAEBAAY/AP8A0A9nHtCB7kAjsww4juX4S9nhEE5VEV8ABKsbkf8AVt43/Ub7C0tLl4A6l3KErU3pkhlMU5RHfe89xKscKDLOxwAKaSyuo7jScHQf9okVfAlSAaEpJEtvd5J96NUUq+y6Kw8m33ksNnNJFctrVkUvWzLef56K2RX32VzBBLLB2Oj1EJoJOhSWeUyFd9hYJwlcu3klbUn4RaET/ZJZcE9mhbHXAzUK34i9DeTTgLgx1kHfPeWU0KwTvrYPxSrW3DFhDGiZ+EY74BYDPDuTxp7FqohqF29u6cy7zcqA07vohWrq1v8AQ2iMOjhf9gIIyDxqdY0Po0x7SHyatmNdZE5h3zXt2xWGIDOBkknwAFTpadqkkQBKuN+uWRY4+bMQoH60skcqup4FSCD+Y37QcyOBDMUj+4ErZrzHMzWsZc9SRulmcjSiM5/IZqR+L3Nyf1dqtrdBhYYUQfkN7QRfMWg7MU15KuJ7z9o/ppsIbNJREFLs9W97bOAjL4rzVuYO8CSJHAORqUHBrGN89hOWUPgh14qRVxKLkzzSgJ0AXfaCwQyBJSZEFTQ34ZGeXUsfNd984z693J+7VZxZHqQoMDy3Xz8JJsQJ/wA6sfsQEzv/AMN9wIfnTEwT4iPCoraa0nQdtmd3QgAUkaLpVFCqOgG+1ghtVlllBYl6gvhFoZiUdPev0kbatUyyKFnSrq01Mbd4C57guL2dIY8gZahPY3KSpqwxXvNJK6oiglmY4AFO9newz6ThuzYHG64kx4JGxP5CoB/Mul/dqUY4DG7ZtivvmatpX/wwrvNjLtCIXOoLo6N3YhfwM7RAhGVtNRWtogjhQYUfSSGAKkYIPiCKdre2ggByXKKEp4LS+hmlQEsqnfAtrKizQSk4eriG6lV5JpdRCHK968s7U4lcoR7wpq9nv07IOgQJuuYGJBkiZcj3jFWr3kSrawThy4biE37Q6QkRL5LWz4yMPKDO/m+69v24xIdI6sfAVbxKSZri51M1KOgA3PJIwVFBLM3ADqalFneRTtGPFV+kSTzyqkSLqZmOAAKMeybZfxpaBM8P5pSwbYgELnhMlXcEcwBngdVccBrpL28eJYolb2HyX789/FEHdCqoD1aryC9hj1xIHDrueR2CooJZj4AAcTTQWd4kkyAnG55ZHCoilmY8gKeGyvVeRRkrvN9d2eqfmQSA1BVACgYAG66sXcpqwVfoy1NdT3KzzkFEKrgKu+/skYI88JSNqe9vtCgRFFVWrtrx/gjX23oiygggi8tbUO19HmToUoQ4MF2B80x9v6IdkwOewgID/flqO72vCJriQBlh5JRj/wAJtSn4S1JtLZKkInz0FPsi6bUqJrh7t3fshcQp7NCxu7ZIGcHsiu6a3uYVlikXBVuBqQWFqkIf2juvbRn0dvbvHq6aqS/vZ4isSkIE3bRK8X0J+TNUBzgJBKTua6iUds7iOKry2vyjmJA6OF3XN5OcRwoXaorCayWNJywiYb0dUEtzKcRJV5FeQoksQDBkqe5lOEijZ28lFdXlb1ekSUim0inn5yyrqp1k2XB0BRArVFNBKxgdy8EwqG5k+fQ6Jve4+hGoBNwfaeW/rp2AyQpOKgt5XDwzXWhodFSo4yrIwI9xGK2eqf8AdMm60Ng5QSyEPKKme/dnZJtKS7rqznGUnjKU8TApcWs4Kn3qcg1aSuul5YUd/Nh341+3crV43S03bLVAew9ar2/dPn3CJ5JuttkQt/5Jqn2tKvhD6kPx7p7udwsUSFmqS5cEtIwWKMchyUUocA3U+HlrahX7i/q9bVn+ukKgVNeWIBm1omrkgNX0d+5lWJQQ9SufahnQpW1196fQJbD0F5VicJJJrpJEOVdQw8juldOAnE8JqO7hfgAHj5o1G7jsoEuG4yKgDVMA4N5MjLEtG/f2LQF/NzuZJYkdTxVgCKCRoqIOCqAAPIDfHPcWEE0qfXZAawBgDvi0EwSSNw6vV00tyJpp8AldxSaJJF6OoYUERQqKMBQMACprmZtMcSM7H3LU0/i0t1PhB5nCirSzQYEa+Pvc8Tu9AtXzawN+TvX+NXieC+Fsv933bRs+ckJ0fEDlaZbsFYJcwz9VoEdnPDKnuZSpopaWsUCHlGgWk2TZvqCPqnNPczJh7twy/BWScV2Nunpko5IcItemQxNEyOUdGPyrX7iUOzBnVDhXNTXc+RBAnBf0AFS20FvJFKi68SUIpCEuEyYX5rTSqk8H/mj9hq0G/wD0QV6TOJtD+3cz0lpajCL4s3NzWQwI93eD3VzFChOA0jBRSyRurowyGU5Bq/ntCUlXT644qGahY3d1LNDcqfB2LYfd6Bc9qzrgOUXISklQ5R1DKeoIzUL3mt2l9hEpb20c6WJHiMEEdyHZURw9z68vwU+05UzFa+x8e4r1FFp7mI2hlJ6uy1HDEgWNFCqo5Ab22jsxVF1xlj5PRtg89sOUTrlaFqLyQ6+CRLSXm14jFAOETe29KiqFVRgAchVyNnhjKSoITiUoKbZ7aH68sylaWytiSoOZH5u3y1xYT5CTL7QqaeOd55XXRlwFwu4ggYNZSyhB6lBu2hHYMTOVGAvEgNlq1oWMZbE0JpLy0mDo36qeYPd2bdcYAHSrnZEzewO0hq+tWGRNA61az8Gt7lT+hpXXgygj862x7581sdjhmNslWcXJLWpW/mXLUkMDlJbmTT5LW0VeV3gEIqWWQhUjUsxPABRmrm7OWMsuiNei8FFW1mvt6dcp6u3yGmSNHHRlB/vWYoIk+FQKSC9uSsj8gpYgVDPC4dJEDKw4EH6JeQwyBIoJyixFaSFsW19/Lbg299p7MiC3XGWH7dR9iT2ckqpNDQPcu7B1A1rlG6OKF/fvFlFIjRDuuZ4nhSymnL1FEvBECj8qmv7OWEwzBPaq02eH1iBMFqS+sWhKdiqEOatrAuHZCWc8izVZzWTx/wAFCCjmnildXnmfXIVq9sUmMUk0eA1RXm0zCUgJZEQ8X3WiWs1zFbGIEGIkZetnPfZFyYfWzugntYkMss2gFxlVq7N+iCWBwNaDfJPcSrHDGuXdjgCpDZXqSlPaAoX9tdpECiq6vVnYKxZLeJU+Wuh6Y6CKZ1EBA0iux2vCYW/mp7NCe0uEnVuDIcjuPM69hdgACcUEuo2Xmkqey1Ja7ZHaxcp6Se3nSSJwCrKcg7vT/wDDofSderX3CTwFA781mvCue/wO7JBoglgfepr2j+le0f0r22/SgofxPUUYLuBJoic6WFGCxt0hjzkhdyW8l1Ckr+yjOAx8hV3Yxyqsr6Snmpq6ub148ugQIvdOCDSS2LlHaQB35otXy37tKqOoR/kSby0AkxhZU8Hp5dmt6XD9jg9SvPbzwW3ZMHDgqGbuyW13bpLE/FWo3eyw01tzT66V/ActCfbherW8hBAniVwDxXI7gCNppgxBODQAODgUSZM0MSYoKTqavBq8QN+DQKnI6bzqXx6jjWT4jr3FPuG+7uYYS0U1zrSbVUascsqAE9SO4zcgCamgtn9FtwxACe3QuwJhZ6H7Vj7D0yOispGCGGQaCRRLGn2VAA+VsorGUwrKrMz1Bd3h/wAw7uPML3Dcy2rI/MxnQGqKCFAkUaBVUcgN0CoikOpPiK+ajoeqq0YpEU5oaGwQMEcxRPaMaADkVgZO9j0rPeIIyKDL4oTvXyHeRHieW4kTKIK1xXIgTlGgqylmTS7wIzrjgxGTRuhYguW14JOihGgVUAwABgD5fRPbRyryWRQw8yDSqihVAwAPADc8J2YWgRyusP69D0O5BlCktG3g/csfwn3irhVP1BR1sCMV48TvHvpvM0SeZPdPu3MrDINMh5cDuTyHehnW7MEsa6PZ1Ailcxekz/zJPlIJbH1Xlm0NL9iro3762jlAV6jfaFx2QckLzJpbmzmEqPwYd6W72VP2UjuSYn9irS5uIBDDA5Zm1013eSdnCpA8yaMdvdqJeSSepusgPsPWlfE8zvn0jJ7MVqkwPE4FA44jevkadTyzSg8QKzRrO4H/AItv1rxTcvkKaW4nSKNeLOwUVHZR3Ts7sEU4IUn5Avc3EUSDm7BRRxcvO/SJaK2GzkQcnmJc1ATdaw8qgxaaB5kd0xTwxyo3FXAYUI7eCOGMHwRFCirN7SeJHg5PQs3lDuXLu1LZ2U3YQiFX+OlF2kNylWt0mQJo1kAPIMKCPKgc8FJGT3PRVl7OQOJEaj6TaOUHCWPLLTnaTSnMo7DteSVZDqj9yYA4JQUTyJ0ge4bjQ5k4/eh5GtXLGDUnlqFLQHI5FMvQ7viGPzoHnWKIrSTGG4YJFeFSW20BcyyiVhEmCR/wq1vtoYgijdXCcXbuie+l0KThABlmors7ZpLcnnav9b2K9Iq9RLm7lPxSGtbWywJ1mNZ2hfvM/wBiEBBSva2KdqvCR/Wb5IJfWUU+OGoZIoOIJV6oHqOGJQsaKFUDkAMAVLOttM2bvWs/IJTyP4hELN+Qpgdlg2/x+vQggLxTlTiKTuWX4b9yZM4JiFIM5AXcFpPOlPQ/33Pg+GDSfDuDdV3eFN0PjvdkZSC2DyIoD3ClcquoAjOPGiaJVgfI9y17CdIpYHPt1naW0gPuQrXjZ9vIOcpLUEghSNPsooUfQWVhkEYNPPZXUtr0RgGSor67u4XEHsIlbRurZMzRQkrTP6b2vVZEBFTzXEISaKUKdPBqsvw33mrj8IVjpjcxpF54JoigabzH96PuWhQ+6w/Q78eY3y6WIzjgfcKX4RU8FnbwwBXKZbLvRFztGd1J9gNXpeieKyMbBy2VD/L3V24JWGJpCBzCilsLmzSIOrdk6Gpry4JEMK5JHjTB7K6qUWUjdqgyVcU0s8qRxrxdyABQltbqOZc4yhDCsmsq6ke49wgjIPI0WawCuecR0UttZRBIsk1ZfhvvNXP4S0x6nc5HWg/UkL5Vncw64oqDgk0p9wonerY5j9/Vph9k43Sfl/ak+EV6ZJburkkuEbCNWLPZ0SH7ZXLd7SZV1/ZyM7jYxbQiNzkqEp5HICqpJPuFJYwrMsjkhHfg1Xl+6FkgjLkCmsLm0jiyjshXuSRSoGSRSrA8waN1Z25SYjmxOAaubCfwWZfaHFSKLQ7UgK/fQrVxcXFykksiaAqUILDBlSYOU+3V8b5QhnKYSoBYJK6drmZErhcwOp+8hFMdotKSZcRGXmm6C0so01yRFy7169vbPQE2yIfNJae5SEwvG+hkqx+B95qcgZPZrivzO4Ae0xP7mkLg4Vh4j3+FEqcgMRkedE9KHxJ/emOfAeFdQaOONL5DdgjmKk+I0xqXyH9qT4RU8EGzDKEZlDu9IBsqAJ8ZqzvogQk8QkAPKp7OzKRxQFfN6tbgpoaWFHK9CwqeK2lvEHbYtkT2SlRCX2xGNXxUJ/Rp8+l6/SPuUy5I1KRUF1NPF6NFcdoGB9dqlhkGRIpU+RpL9bySbsmLRIVqWC4QNHIhVlPMU09jAyylMFmYt8pgqN6C+tdbIuFcHDVqDXKUey2lcJRtbYsxZtTyNxY1Y/A+81KOqpXHmdwjtYldYYdcmeQNETWzoSOKNn9mqQx8R7WVA4nczDUWBTC6iBx91FHkgVwfH+ICc+/VisLIhHDAYVpZ18fZOePupemgbmbkBTeWaYnoaeTkx/YeFD4RT3KX80CSkvoCBqy11dS1FbwqEijQKq9AKjmuNnwzSp7LuoJrAwB9HD3dzHCh+s7BaWSN1dGGVZTkEVGL6Uh3BKoi5avC1unprm1R0KSaHR6sfgfeakH3AaAwPb//ADNMtXTqp7V4GXNdutwpIfGMEGonKrrdAScUVz448DScVLlVyORzmo1t0di4JJySSSaCXEMgAYax7qMtqZBICpUZyKiVjlliRSepxuYMfApimHuxWOuaKkYpfhFTQmzuX0OU10qOLmL3lahmhkDpIoZWHAg/LvI7hUUEsx4ACjb2l6HlQEld8t8sQlcOqIp6tV3DdwIssQBylJPYkq7zBGfoteO17r8nq5baEryhZQsbvusJbGLthEhDJUFpefO63YqDkKGNQXlrOkbogQq9Zl2nar5Kz0bZJTK7vrkerH8N95qc6SWMYxUBJHiAx/Qis8j4GmT8xRC/WPgfs0iDgq43LheHCopYz6y1qLBwxwzYxjFADgoAoDcB7xQX3gn8qVM/wgNJPv45FY1EgE4pPhFTz2m0ERHJYI60v+ftStWdkrFhbxLGG3zrAb358ejiPVoKVEJfb0Lr97UIBO2g3nZejae7JLK4SNFLMx4ACngsrsOyLlhgg9y8s2Yr28Lx6umoUt/eTwlY0YKE3zWt3AssT8qkWwtuy1kajxJpkkRXQjxVgCDR7PZdomf/ABLQVFCgcgMD9u4WLAAcSaIn2ijP9mL1zQurFzpDaHVhhg1WP4b7zUvwChqzgupWsGl9YEc894jFEcuZrPAcqVeniTTh31OCQqLWWVUXIyFHEClZfEMu5PhFSWstywMZK6tB0UHtb2Kb4HBPe9I9Hi7f+ZoGr9e7e2Jco08LIHpr68uIiBGyIIvlTH2qdp0z41PcPnRFGztjotMLRYbaL4dT1i5vLifohYkfkoodjs+REP15fUWngmlDzTSa301Y/A+/xqf8MUuB9Yf33L2uezkP6VrhlVx7juJV1K/ZI7kVu0v8SVgFTOTueND/AB5FOn3Ci3E5zk7oM/Z3IPu1dTWIS4gZy45PQae2uLZhwcqV/RhWE2g8idJfXrG0NnL8cNObOVg6AF42GH+hB7u6jgTrIwWghvS56qhIpJEcMjqGUjmDR60s5t5fC71m4p43UMjqVYHgQaZzbSt0QvWLOygh96KAd9j+G+81N+GKXmR44pFlYkyeLAfVrtLWdHePLBQfEitcMroeqmsXCrOn9JqNPXSR/AKwrgf0rITAHNjijBYy/FIPACprqVmdkQjUTk5NOzOO0ZSEXmTVuWU9okehvfg141nA454VE48AV4bk+EVjUM9KZXVWU+BBGQRWt9nqrnnF6lM+z9peSTLVzcXN1G7yIEATdA6W3ayzsQgJwoC0112HYyJIUZaDTzJECeLkLQZWBB5j5FpZZFjRRlmYgAV43hnfpCCaIstlqU6zPQuxAIXEhR1pLmztXngMSomigZ0jto+rtVraqSwhiSPPXQMd1r14jI2sIidWpke5MMB/6MRKrTredqEEw7DX9itn/hPvNT/AoppmOWPgg6mmlkYlmbxNYPjXu3JIngytqB94pZixVSgJI4fvTRI7CH92rhSW9pAkfVydZY0XlkZ3PMmuprhuli6EMNy/DU9zcS3UFyZGKOSR4VbWO1EE6yuEE/1+6kN9CW0NlWVtLChbWcRSLJY5OSTVtdW8DzWyw8ErFteXFuVPimSB+a1s65uVxcywKz7hAZ4xKfqFhq70C7PUyFJsvGK/0fYL1lNZ2htIv1SFaW0s49ESH9SfkHs7yMtGSCCDggiu0itTM/JpsPWBWzvwn3mtokth2iRU65JoAsSvjjJo7/duS2MhSCEYdubeJIFBTAZDzLNRCmVKkltpy+BkoRhqxqNeGN6dHyh/PcnkKa3u7aO4U8nXOKjvIVmLI4dEL5Ravb2BA0kQXAPVjV1bX+hwkQcOF7weWzhdxwZ0DGgMYA3PMIXw13rWfPBKAPED5MyXU8cEK+07sFFGLZkJuZP5r+xSTC/l1lxpiT2agMoxJoBYe/u2H4b9yMtn3UfFvIUSz6DnzoDtFOPfWgeJxy4VwNXDXEjLcZHYqKjjNxGJnbLcgCaKxXMTHmdQrCupPnR8c541dpH7OvO41g0jDiGBpSOYzSfAu+SKWNXjdcMrDIIpxY2cUGvxbQN0EM1s80rrrCilRLoQztwhlIH0CS4uplihT2manewuxJoOGqwexheeBFYMiUsm039Ei5pxkr/KWo7X+a/rP3tn/hv3JPSYFkwoxmv9KB5Ma8EkXyevUuZ1rwv3/OOv4N8jfECtau1hJ+KvBVbyYUWFo5Jrxsp/0NHUl0ikYK+sBTF0bJOSc5JNOxPkKA+7vhb7opPhFQPYuU1y4eUV2W1i11B9v66VBdW0oeKVcht6Ti47G5iXCmma5tWMQPzqeK0E7b0mD+VMS1RQMWtrpuEb/KF767ROicXaksEt54nfIjd6ks4JQkvaB06MVq8lvZULzqoCJ3bM2RCtM5DPTy7QILxzaA/299g33H7k3kPk/XiRvMA1/pIf6BWTaR5r5jHkTXgHpUjdgBSjoKa3miSWN/B1YZBrtdk3CRKf+jLVtY69ZjBy3Use4QQCCPEGnljU2k/24qtLme6g7CGYPlD67ad2SQBWVYEe75G712U8rSTse1+oah2lfzhp08UjTupbyXMSSN7KFgGPkNxhu7aOeMkHQ6hhSw28KQxLwRBpA3ehPtCAXRYL2WsaqEVzCHSvmZP/AJDXgkv9RrwST+o0wt0YA9WNcK4Vwrhu57gD4mue/hXCuBrgayBRnup0hiHF3bArt7S6SdCcZjbIzvw8qKfeQK/1Mf8AUKzHKreRB7qxbPVnPbAyonFkq9W/heON2UxRv8vPcRQO6y3OuOcN9WkDHLBQCe484MfYG77XtS9Abrb0Q3PovYpo7HhrrZyX2fSBEpkq6v5PqJ6i9WNCwvwHEynQUXddR25iNlFOUCFPaVat5UBHaIr4P3qmsrJolihC1ZXugI0yamWlsbIxoghV6tL51CSMWVwOqmrSCyVU7VC5dqeW5RRcwPoYjnV5fRxdo0SjC0LHabxFJ/CMqujD92BLEjXHMX0s2A1XS3pUPNIGCK2QtesdT8lFEa9C9FrxyTu1KxU9QaAk/ir+9aom8xzH0TAdd1/d2Xz6KP0JALVfRXsz3MCxcX70GyYmOIfWlq52vIOsUNT9n852Z0fFUNm0T9o1x/FyOAzkk0qAeCgAeQrbJ6T1sZOlpHVpLye1p05pdNVpfDjBN+z1d2ZfAng/dKuLaYAxyRlG8jU0HistrPlG8jlTVlLINLyQI7D3sM93C+MjeyKZ3JLHiTvR7lQWYDJbx8TXpNrgKBkgcMbhJE2CP3pZF/MdD8s9jYIJbzg7n2EqyUX08oeYdqn1NG4zznLtkRx83NNFE076+EEFdp/h01CC7aWWJCA8E9RXlpIHiZcFeYbmCKIhiRATk6VAyfy7tzeSkBIYi9c2uLy4/dzVtZxABIY1QbiQBnru2o4yQ13LWz48Y020YIq39Jd4ZYgcFKSztdRRSWLNxYmtpWoHjJCQvxVYf5SZOwlzMWQgKu6Oa4sYJpUAw7oGNYHAbi3QVHaPYILWScRAgnXRY8AKeUnwzhR0G9B1YVAv3qkB5K43hCfUkOD8tPfR7QESTuXZCmuglpCAT7creLvukii8UWUW8C0lvCoLkAyy83amiWeNpRxQMCw8xU8yRhb2FGdGprByRHdL+jrvngimZEjuuzWALxWlJGCQNwjsULuJg7ovFlqXaW0LVoyi6YVfcELqCeAJwTvfaLyTDXLrMQ9hmoADAA+S9PisgJw2seJKhqkxxf1f13aIlLNXBf1oTXLr6viAOFBUOUT9zTRTKShOQaYRKA3uGkipIm4qcUCORqKT7SA/QLcy8E2n/Z6cKcEggGoJ5YHRY7nW85NSuT6qoSfcMVs4r/3bNuNkm0ImuM4CA0k7W0LTLwkKAsPz3STTyLHHGpZmbwAAqVLO67R4+K4KbiSfACrq7WV89uRD90A1adqcydimonrUkrcEQsfyGaisXsUSGd9CMD3WkkdURQSWY4AHU0XtLyGZVOGKMDg96L8Qbpz7hUyK6gK5A8KIkkYjoPAUAoyc+AFa7nxcj1Y680apfJTug8j9AO04EPo90wf4JaitNqTJDdIMa3OEeu1a8hCYzkuKk2bsmUSGQFZpxUu2ZkIGgpBXoNqw9LuU/NEq2dPmraRZpX3wbJiPjNh5qvNo8EROy3bTuuDCEonxP6tbOt+RmDt5J625lYZBGCDQvrS1ZZgSVJYkL3bq1sz/AB2ZPzAq+lvkEQlRVCd7UB7DgndceQq4/Eag4AIIwwPMV29vGvauPAUzyNqY1JJyVMVOw64/TdAnRB9AmtrmJZYZFwytXa7KmR4m4RSnDVj0H9XpJtszI3SBKe5kAVIl0xxjmeSimkYNJc3UuFWo7VPGU+tM/V9zueCgsauLnBLzzaUX9lFWlmq+sqZkPVzuns4HAlLo6e8pU19tAIH7PREoO66v9GsxgBB1ZjgVNZX6QgiIsjLuublhlYYmkI9yCrexu7aAQXLlEK8U7099MpcR4AXmxJq5hNp2EsKhuOvdJGeDKRTIwwVOKnHuFSuqDDOSPGvmx+tfND9a9YKo86KK2ZD+pNFjxJqKMDIzlvIUB9EtrYhharECnx1/i95F/GkGIF6LvZSMgjBpb5ElLqdao5yinvaOb3SVdORwtTuvk4s9tJgHyrZjn6t3F/8AbvT2V0haGTocEEHIIqc2RkeSQAM7nebmJfjFCSJtJr2lrilcUrHaAeQxRZ2LHqawKLuP4j/RFtr28EcpHQmo3ISRCNSEgN3yScAClsE7UO76EkI9Qtvs9KYQXVbUn6QIm6ZcZBjYH8xUZ9ns7oflhqUjmAfkcGmlth7ylMrKQRxB5dzREhZugoSzANLy6L9Fe/tZ4ljlVdYerW0DFhBCsYY89I3hIHKXdycJ1Vavop7maa3EGSXYsA29lYZ1DBqO+F7K6RS9okRXe0F1bpOj8UcZFGKzto4YyckIMbjV5b6TrW7cAH4qtg/tCJQR0IG5nbwCgkn3CksBBKmt9CSvvuZIvnFiYqPfyqKe7vp3iMuJ0diRSurAqwBBHMHfiWINRKO6V/qD/TQLl3PvNaYowo930nNTlDmCDMUNIz/P3WJX326LAJ55uRavSlh7F1coyb7FbCZ4Y5VYu61DcbQyZS7APzdd63UlnA064xIUGob5Y2Gda6T5GpUGQ9tdEf0NUE68ZI1b4cje8qeEF1/FSvRZXHb2eE95T/YJ4g2kvGyg9M+FRC/iRbSOXU7/AG6AAwAPDfdIvsW4EIq15PcEzNvaOWJHXo6gigFUADgAMd9r+aB+2ZgXw+FegijAAwAOg3lIQouIW1xVd3V+giDxaFT/AGR3AyQrGnXBMtxdEe/LtVvAvCKJUH5Dfcw2V/NDFbEIoRq2ZdT/AD81sjvvs7e1uZYIzDrJQ0Hun1zxSGIud819EivIHRFB4AtV7BfImYQGDr/tJvoLCNJ9RbX3L9RZzOZ7gsjKhKsGqytecMCJ+ajfs67t4HkVUKPoBapxcxNF2s5ZFbfNBdQrNEy4ZG4GnSwtVhDnLdT/AOgf/8QALBEAAgEDAwIEBQUAAAAAAAAAAQIAAxExBBBAEiEFEyAiMkFRYXEUMDNgcP/aAAgBAgEBPwD/AGK8v6i1oDfghbidMYethF4KYhxGz68wC3BXGzZ5K/Ds2dhteDiL8OxzDvbipjZswwHa5g77WvCLcFMbNmZltszGwh4KY2bO5tBYS+wzDwUxsxF52naWBnT94BaW2PBDWE65ky37JZVyQIKiHDg8nV6wUronxx6tSofc5N4dLVRC4cXGQDNNrqlNulzdYjB1DA3B41V+imzfQQl6rn5kynpapcFlIA+ZnnUzqHBPtI6bytpzSAYEEE5E8NqllamTjuONqgTQe30mj/mEetUeoys5A6rR0pUR3PUxxaObaJL/ADbtPCwfNf7DjFQykHBhX9JqbsLrCdEzFrt3gOjHf3H8yvWNYqqiyrgCaGh5NK5y3c8erRSupDj8GVPDaoN0IIg8Ork4AE0+gSjZm7t/Vv/EACwRAAEDAgYBAwIHAAAAAAAAAAEAAhEDMQQQEiFAQSATIlEycRQkM2BhYnD/2gAIAQMBAT8A/wBjhQoUKFCDARdObHBJhByHm09J/BN1KFvIKSDKcZ4Jvk23lGR4Jvk23hHh3wTdBNsgiI6yiUcgV3wTdBNsmombnIEgWRyMtQM8E3yb9KChQfhaXI3QCq2CbwTfJg9uUqStS2ycJCHBN8mkxspKlyDipWpB09IobcGN1pQ2GUqVKn+FMLUjkATYLS4dHk0MOasF2wTWMYNmoYhjnBpBgmJhVsM141MEFEFpg34zW6nNCADGDoBPr0w0wZJ+F6b/AEWw3cHUqVUPOkggjorFsAcHAX41Haqz7rE/pFNptawODASmufUNiGpu+KMdBYz6W/fjAwQUD+IowDugMSBENX5n+oVKn6Ulxlx7WJq+o8xYcdlR1My0pmMYR7wji6XyVVxLniBsP2t//9k=" //占位 // const qrUrl = "https://raw.githubusercontent.com/zisull/BiliCleaner-Tampermonkey/main/base64.txt"; // const qrUrl = "YOUR_BASE64_HERE"; const donateWin = document.createElement('div'); donateWin.id = 'bili-donate-panel'; donateWin.style.display = 'none'; donateWin.innerHTML = `
赞赏作者
\"收款二维码\"
感谢支持!
`; document.body.appendChild(donateWin); donateWin.querySelector('.bili-donate-close').onclick = () => { donateWin.style.display = 'none'; }; })();