[
  {
    "articleStyle": 0,
    "contentBlacklist": "",
    "contentWhitelist": "",
    "customOrder": -10103523,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": true,
    "header": "{\n\"User-Agent\": \"Mozilla/5.0 (Linux; U; Android 8.1.0; zh-CN; MI 8 Lite Build/OPM1.171019.019) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/78.0.3904.108 UCBrowser/13.2.0.1100 Mobile Safari/537.36\"\n}",
    "injectJs": "",
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "ruleArticles": "class.module-item",
    "ruleContent": "<div class=\"play_video\">\n{{@@title@text}}{{@@class.player-wrapper@all}}",
    "ruleImage": "img@data-cover",
    "ruleLink": "a.0@href",
    "ruleNextPage": "page",
    "rulePubDate": "class.module-item-caption@text",
    "ruleTitle": "img@alt",
    "singleUrl": false,
    "sortUrl": "最新::https://cn1.91short.com/\n推荐::/short/recommend_home_list/\n美女正妹::/short/label_related_list/Ug_pu_kskqY%3D\n91大神::/short/label_related_list/otDa4t6lDDQ%3D\n门事件::/short/label_related_list/3QW8lOdBcls%3D\n大神::/search?wd=大神\n变量搜索::/search?wd={{java.encodeURI(source.getVariable())}}\n学生::/search?wd=学生\n91::/search?wd=91\n偷情::/search?wd=偷情\n推特::/search?wd=推特\n少女::/search?wd=少女\n贫乳::/search?wd=贫乳\n口交::/search?wd=口交\n妹妹::/search?wd=妹妹\n美女::/search?wd=美女\n\n美臀巨臀::/short/label_related_list/azG9-jZfzG0%3D?title=%E7%BE%8E%E8%87%80%E5%B7%A8%E8%87%80\n后入::/search?wd=后入\n国产高清::/short/home_category_list/hd\n排行::/short/ranking_list\n国产AV::/short/label_related_list/1Bd0Zzp8D_E%3D\n大象传媒::/short/label_related_list/F16wCJ3LmWY%3D\n情趣综艺::/short/label_related_list/-0S1LwkskU4%3D\n推荐2::/film/home_recommend_list\n专题::/film/home_subject_list\n女优::/film/home_actor_list\n无码::/film/home_category_list/coded\n中字::/film/home_category_list/chinese_subtitle\n动漫::/film/home_list/jOSxa-4E27U%3D\n经典三级::/film/home_list/uZg0vDL8P8A%3D\n欧美性爱::/film/home_list/LblejiEnM6s%3D\nAV解说::/film/home_list/vJq_GzRiesQ%3D",
    "sourceComment": "翻页和封面不会\n\n永久域名 https://cn1.91short.com",
    "sourceGroup": "版本",
    "sourceIcon": "https://cn1.91short.com/public/statics/logo.png",
    "sourceName": "1.0",
    "sourceUrl": "https://cn1.91short.com/",
    "style": "iframe{\n\theight:auto\n}\ntitle{\n\tdisplay:block\n}"
  },
  {
    "articleStyle": 1,
    "customOrder": -10102258,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": true,
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "ruleArticles": "ul@li",
    "ruleContent": "<!DOCTYPE html>\n<html lang=\"zh-CN\">\n<head>\n<meta charset=\"UTF-8\">\n<title>内容提取</title>\n<!-- v2025.05.10 -->\n\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n<script src=\"https://code.jquery.com/jquery-3.6.0.min.js\"></script>\n<link rel=\"stylesheet\" href=\"https://cdnjs.cloudflare.com/ajax/libs/viewerjs/1.11.3/viewer.min.css\" />\n<script src=\"https://cdnjs.cloudflare.com/ajax/libs/viewerjs/1.11.3/viewer.min.js\"></script>\n<style>\n    body { font-family: Arial, sans-serif; font-size: 16px; }\n    #title, #page, #loading-status { margin: 0 auto; font-size: 20px; text-align: center; }\n    #description, #urls, #video-url, #video-sources, #messages { width: 100%; max-width: 800px; margin: 1.5px auto; font-size: 14px; text-align: left; word-wrap: break-word; white-space: pre-wrap; }\n    #text, #text :not(img), #text img + * { text-indent: 2em; width: 100%; font-size: 16px; line-height: 1.5em; margin-top: 0; margin-bottom: 0; word-wrap: break-word; white-space: pre-wrap; }\n    img, #text img { width: 100%; height: auto; display: block; margin-bottom: 1.5px; }\n    .flex-container { display: flex; justify-content: center; align-items: center; gap: 10px; margin: 1.5px 0; font-size: 14px; }\n    button, select { flex: 1 1 31%; padding: 3px; border: 1px solid #ccc; border-radius: 5px; box-sizing: border-box; cursor: pointer; background-color: #f9f9f9; transition: background-color 0.3s ease; margin: 1.5px; min-width: 0; font-size: 14px; }\n    #url-select, #video-source-select { flex: 1 1 100%; margin-left: 0; margin-right: 0; text-align: center; }\n    #video-element { width: 100%; height: auto; }\n    textarea { width: 100%; height: auto; min-height: 100px; box-sizing: border-box; resize: vertical; }\n    .error, .warn { color: red; }\n</style>\n</head>\n<body>\n    <h3 id=\"title\">{{@@title@text||h1.0@text||h2.0@text||.title.0@text}}</h3>\n    <p id=\"description\">{{@@.info.0@html||.jianjie@html}}</p>\n    <p id=\"page\" style=\"display:none;\">共<span id=\"total-pages\">1</span>页</p>\n    <p id=\"loading-status\" style=\"display:none;\"></p>\n\n    <div class=\"flex-container\" id=\"loading-buttons\" style=\"display:none;\">\n        <button id=\"prev-page-btn\">上一页</button>\n        <button id=\"next-page-btn\">下一页</button>\n        <button id=\"auto-load-btn\">自&nbsp;&nbsp;动</button>\n    </div>\n    \n    <div class=\"flex-container\">\n        <select id=\"url-select\" style=\"display:none;\"></select>\n    </div>\n    \n    <div class=\"flex-container\">\n        <button id=\"toggle-urls-btn\">显/隐网址</button>\n        <button id=\"toggle-messages-btn\">显/隐信息</button>\n        <button id=\"toggle-debug-btn\">显/隐调试</button>\n    </div>\n    <div id=\"urls\"></div>\n    <div id=\"messages\"></div>\n    <div id=\"debug-info\"></div>\n    <div id=\"video-url\"></div>\n    <div id=\"video-container\" style=\"display: none;\">\n        <video id=\"video-element\" controls preload=\"auto\" width=\"640\" height=\"264\">\n            <source id=\"video-source\" src=\"\" type=\"\">您的浏览器不支持 video 标签。\n        </video>\n    </div>\n    <div class=\"flex-container\" id=\"video-source-container\" style=\"display: none;\">\n        <select id=\"video-source-select\" onchange=\"updateVideoSource()\"></select>\n    </div>\n    <div id=\"images\"></div>\n    <div id=\"text\"></div>\n\n    <script>\n        // 配置对象，包含各种选择器、延迟时间等配置项\n        const config = {    \n            videoSelector: 'body', // 视频选择器\n            imgSelector: '.gridlane-box-inside img,.photos figure img,.content p img', // 图片选择器\n            textSelector: '#content', // 文本选择器\n            debugSelector: '#content, .page, .pager, .content, script', // 调试信息选择器\n            swapImageAttributes: false, // 是否交换图片属性\n            delayTime: 1500, // 延迟提取时间\n            retryDelayTime: 1500, // 重试加载延迟时间\n            maxLoadAttempts: 3, // 最大加载次数\n            autoLoading: false, // true自动模式，false单页模式\n            debugOnce: 0, // 只在特定索引输出一次调试信息\n            totalPagesText: '{{@@.page.0@a.-2@textNodes}}', // 总页码\n            urlSuffixToRemove: /\\.html$/, // 移除url后缀\n            pageUrlText: '{urlPrefix}_{i}.html', // 拼接URL模板        \n            ListMode: true, // true网址列表模式，false网址拼接模式    \n            initialUrls: `{{@@#sort-item-5.0@a@href}}`, // 网址\n            initialUrlsName: `{{@@#sort-item-5.0@a@span@text}}`, // 网址名称\n            sourceurl: '', // 来源URL前缀\n        };\n\n        let videoSources = []; // 存储视频源数组\n        let loadAttempts = {}; // 记录每个URL的加载尝试次数\n        let urls = []; // 存储所有页面的URL\n        let imageBox;\n        let textBox;\n        let currentPageIndex = 0; // 当前页面索引\n        let canLoadNextPage = true; // 控制是否可以加载下一页\n        let autoLoadInProgress = false; // 自动加载状态\n\n        // 构建URL列表\n        function buildUrls(totalPages, baseUrl) {\n            let initialUrlsArray = config.initialUrls.trim().split('\\n').filter(url => url.trim() !== '');\n            let initialUrlsNameArray = config.initialUrlsName.trim().split('\\n').filter(name => name.trim() !== '');\n\n            if (config.ListMode && initialUrlsArray.length > 0) {\n                if (initialUrlsArray.length !== initialUrlsNameArray.length) {\n                    $('#messages').append(`<span class=\"warn\">警告：initialUrls 和 initialUrlsName 的长度不匹配。</span><br>`);\n                }\n\n                urls = initialUrlsArray.map(url => {\n                    if (config.sourceurl && url.startsWith('/') && !/^https?:\\/\\//i.test(url)) {\n                        return config.sourceurl.replace(/\\/$/, '') + url;\n                    } else {\n                        return url;\n                    }\n                });\n\n                urls.forEach((url, index) => {\n                    const name = initialUrlsNameArray[index] || `第 ${index + 1} 页`;\n                    $('#url-select').append(`<option value=\"${index}\">${name}</option>`);\n                    $('#urls').append(`<div>${name}: ${url}</div>`);\n                });\n            } else {\n                if (totalPages === 1) {\n                    urls.push(baseUrl);\n                } else {\n                    urls.push(baseUrl);\n                    for (let i = 2; i <= totalPages; i++) {\n                        urls.push(config.pageUrlText.replace('{urlPrefix}', baseUrl.replace(config.urlSuffixToRemove, '').replace(/\\/$/, '')).replace('{i}', i));\n                    }\n                }\n\n                urls.forEach((url, index) => {\n                    const name = `第 ${index + 1} 页`;\n                    $('#url-select').append(`<option value=\"${index}\">${name}</option>`);\n                    $('#urls').append(`<div>${name}: ${url}</div>`);\n                });\n            }\n\n            $('#total-pages').text(urls.length);\n            toggleNavigationButtons();\n            toggleTotalPagesDisplay();\n        }\n\n        // 规范化URL\n        function normalizeUrl(url) {\n            if (typeof url !== 'string' || !url.trim()) {\n                return '';\n            }\n            const match = url.match(/['\"](.*?)['\"]/);\n            if (match && match[1]) {\n                url = match[1];\n            }\n\n            function processUrl(str) {\n                str = str.trim();\n                str = str.replace(/\\\\u[\\dA-F]{4}/gi, match => String.fromCharCode(parseInt(match.replace(/\\\\u/g, ''), 16)));\n                str = decodeURIComponent(str);\n                str = str.replace(/^http:\\/([^/])/, 'http://$1');\n                str = str.replace(/^https:\\/([^/])/, 'https://$1');\n                return str;\n            }\n            return processUrl(url);\n        }\n\n        // 清空容器内容\n        function clearContainers() {\n            $('#messages').empty();\n            $('#images').empty();\n            $('#text').empty();\n        }\n\n        // 更新图像源\n        function updateImageSrc(elements, shouldSwap) {\n            elements.each(function () {\n                const $this = $(this);\n                const attrsToUpdate = {};\n                if (shouldSwap) {\n                    ['data-original', 'data-src', 'data-url'].forEach(attr => {\n                        if ($this.attr(attr)) {\n                            attrsToUpdate['src'] = $this.attr(attr);\n                        }\n                    });\n                }\n                $this.attr(attrsToUpdate);\n            });\n            return elements;\n        }\n\n        // 切换导航按钮显示状态\n        function toggleNavigationButtons() {\n            if ($('#url-select option').length > 1 && !config.autoLoading) {\n                $('#loading-buttons').show();\n                $('#url-select').show();\n            } else {\n                $('#loading-buttons').hide();\n                $('#url-select').hide();\n            }\n        }\n\n        // 显示加载状态\n        function showLoadingStatus(pageNumber) {\n            const selectedOption = $('#url-select option:selected').text();\n            $('#loading-status').text(`正在加载：${selectedOption}`).show();\n        }\n\n        // 隐藏加载状态\n        function hideLoadingStatus() {\n            $('#loading-status').hide();\n        }\n\n        // 加载指定索引的内容\n        function loadContent(index) {\n            if (index < 0 || index >= urls.length || !canLoadNextPage) return;\n            canLoadNextPage = false;\n            currentPageIndex = index;\n            $('#url-select').val(index);\n            $('#messages').append(`<div>当前地址: <span class=\"warn\">${urls[index]}</span></div>`);\n            if (autoLoadInProgress) {\n                showLoadingStatus(index + 1);\n            }\n            $.ajax({\n                url: urls[index],\n                type: 'GET',\n                success: function (data) {\n                    try {\n                    const $data = $(data);\n                    let updatedHtmlContent = data.replace(/(['\"])(\\/\\/)(?!\\/)/g, '$1https://')\n                        .replace(/src=\"upload/gi, 'src=\"/upload')\n                        .replace(/style=[\"'][^'\"]+[\"']/gi, '')\n                        .replace(/\\\\\\//g, '/');\n                    const parser = new DOMParser();\n                    const doc = parser.parseFromString(updatedHtmlContent, \"text/html\");\n\n                    if (config.debugOnce === index) {\n                        const debugElements = $(doc).find(config.debugSelector);\n                        if (debugElements.length > 0) {\n                            const debugContents = $('<pre>').html(debugElements.clone().wrapAll('<div/>').parent().html()).html();\n                            $('#debug-info').html(`<span class=\"warn\">调试信息: <textarea rows=\"10\" cols=\"80\">${debugContents}</textarea></span>`);\n                        } else {\n                            $('#debug-info').html(`<span class=\"warn\">调试信息: <textarea rows=\"10\" cols=\"80\">调试信息未提取到内容，请检查选择器！</textarea></span>`);\n                        }\n                    }\n                    // 方法1：提取视频\n                    const videoSources1 = [];\n                    const videoContents = $(doc).find(config.videoSelector);\n                    const videoTags = $(videoContents).find('video, source');\n                    videoTags.each(function() {\n                        const videosrc = $(this).attr('src') || \n                                     $(this).attr('data-src') || \n                                     $(this).attr('data-original') || '';\n                        \n                        if (videosrc) {\n                            videoSources1.push(videosrc);\n                        }\n                    });\n                    //反馈\n                    if (videoSources1.length > 0) {\n                        $('#messages').append(`<span>方法1，找到 ${videoSources1.length} 个视频。</span><br>`);\n                    }\n\n                    // 方法2：正则提取视频\n                    const regex = /['\"]https?[^'<>\"]+(m3u8|mp4|webm|ogg|flv|mp3|m4a|wav|ape|flac)([^'<>\"]+)?['\"]/gi;\n                    const matches = data.match(regex);\n                    const videoSources2 = [];\n\n                    if (matches) {\n                        const uniqueMatches = [...new Set(matches)];\n                    \n                        uniqueMatches.forEach(match => {\n                            const normalizedSrc = normalizeUrl(match.replace(/['\"]/g, ''));\n                            videoSources2.push(normalizedSrc);\n                        });\n                    }\n                    //反馈\n                    if (videoSources2.length > 0) {\n                        $('#messages').append(`<span>方法2，找到 ${videoSources2.length} 个视频。</span><br>`);\n                    }\n\n                    // 合并两种方法的结果\n                    videoSources = [...videoSources1, ...videoSources2];\n\n                    // 去重并标准化 URL\n                    const imageExtensions = /\\.(jpg|jpeg|png|gif|bmp|svg)$/i;\n\n                    videoSources = videoSources\n                                  .map(src => normalizeUrl(src.replace(/\\\\+/g, '')))\n                                  .filter(src => src) // 过滤空值\n                                  .filter(src => !imageExtensions.test(src)); // 移除图片地址\n                        \n                    videoSources = [...new Set(videoSources)];// 去重\n\n                    // 显示最终结果\n                    $('#messages').append(`<span>总共找到 ${videoSources.length} 个视频。</span><br>`);\n\n                    if (videoSources.length > 0) {\n                        $('#messages').append(`<span>成功提取到视频，找到 ${videoSources.length} 个视频。</span><br>`);\n                        videoSources.forEach((src, idx) => {\n                            $('#messages').append(`<div>视频地址:<span class=\"warn\"> ${src}</span><br></div>`);\n                            $('#video-source-select').append(`<option value=\"${idx}\">视频源 ${idx + 1}</option>`);\n                        });\n                    \n                        if (videoSources.length == 1) {\n                            $('#video-container').show();\n                            $('#video-url').show();\n                            $('#video-source-container').hide();\n                            updateVideoSource();\n                        } else if (videoSources.length > 1) {\n                            $('#video-container').show();\n                            $('#video-url').show();\n                            $('#video-source-container').show();\n                            updateVideoSource();\n                        } else {\n                            $('#video-container').hide();\n                            $('#video-url').hide();\n                            $('#video-source-container').hide();\n                        }\n                    } else {\n                        $('#messages').append(`<span class=\"warn\">未找到视频源。</span><br>`);\n                        $('#video-container').hide();\n                        $('#video-url').hide();\n                        $('#video-source-container').hide();\n                    }\n\n                    //提取图片\n                    const $imgContents = $(doc).find(config.imgSelector);\n                    const shouldSwap = config.swapImageAttributes;\n                    const newContents = updateImageSrc($imgContents.clone(), shouldSwap);\n                    $('#images').append(newContents).show();\n                    if (newContents.length > 0) {\n                        $('#messages').append(`<span>成功提取图片，共 ${newContents.length} 张。</span><br>`);\n                        newContents.each(function () {\n                            const imgSrc = $(this).attr('src') || $(this).attr('data-original') || $(this).attr('data-src') || $(this).attr('data-url');\n                            $('#messages').append(`<div>地址:<span class=\"warn\"> ${imgSrc}</span><br></div>`);\n                        });\n                    } else {\n                        $('#messages').append(`<span class=\"warn\">未提取到图片。</span><br>`);\n                    }\n\n                    //提取图片和文本\n                    const textContents = $(doc).find(config.textSelector).map(function () {\n                        const $currentContents = $(this);\n                        $currentContents.find('img + br, script, video, source, iframe').remove();\n                        $currentContents.html($currentContents.html().replace(/>\\s+/gi, '>').replace(/<\\/?br\\s*([^>]*)\\s*\\/?>/gi, '\\n').replace(/\\n+/g, '\\n'));\n                        return $currentContents.html();\n                    }).get().join('');\n                    if (textContents.trim()) {\n                        $('#text').append(`<span>${textContents}</span><br>`).show();\n                        $('#messages').append(`<span>成功提取图文。</span><br>`);\n                    } else {\n                        $('#messages').append(`<span class=\"warn\">未提取到图文。</span><br>`);\n                    }\n\n                    if (autoLoadInProgress && currentPageIndex < urls.length - 1) {\n                        setTimeout(() => { \n                            canLoadNextPage = true;\n                            loadContent(currentPageIndex + 1); \n                        }, config.delayTime);\n                    } else {\n                        canLoadNextPage = true;\n                        if (autoLoadInProgress) {\n                            hideLoadingStatus();\n                        }\n                    }\n                } catch (parseError) {\n                    $('#messages').append(`<span class=\"error\">解析页面内容时发生错误: ${parseError.message}</span><br>`);\n                    handleLoadFailure(urls, index);\n                } finally {\n                    if (imageBox) imageBox.viewer.update();\n                    if (textBox) textBox.viewer.update();\n                }\n            },\n            error: function (jqXHR, textStatus, errorThrown) {\n                let errorMessage = `内容加载失败: ${urls[index]}`;\n                switch (textStatus) {\n                    case 'timeout':\n                        errorMessage += ', 请求超时';\n                        break;\n                    case 'abort':\n                        errorMessage += ', 请求被取消';\n                        break;\n                    case 'parsererror':\n                        errorMessage += ', 解析响应出错';\n                        break;\n                    default:\n                        errorMessage += `, 状态码: ${jqXHR.status}, 错误信息: ${errorThrown}`;\n                        break;\n                }\n                $('#messages').append(`<span class=\"error\">${errorMessage}</span><br>`);\n                handleLoadFailure(urls, index);\n                }\n            });\n        }\n\n        // 处理加载失败的情况\n        function handleLoadFailure(urls, index) {\n            if (!loadAttempts[urls[index]]) {\n                loadAttempts[urls[index]] = 1;\n            } else {\n                loadAttempts[urls[index]]++;\n            }\n            if (loadAttempts[urls[index]] <= config.maxLoadAttempts) {\n                const retryMessage = `第${index + 1}页加载失败，正在进行第${loadAttempts[urls[index]]}次加载！`;\n                $('#messages').append(`<span class=\"error\">${retryMessage}</span><br>`);\n                setTimeout(() => { \n                    canLoadNextPage = true;\n                    loadContent(index); \n                }, config.retryDelayTime);\n            } else {\n                const finalErrorMessage = `第${index + 1}页加载失败，已达到最大尝试次数(${config.maxLoadAttempts})！`;\n                $('#messages').append(`<span class=\"error\">${finalErrorMessage}</span><br>`);\n                if (autoLoadInProgress && currentPageIndex < urls.length - 1) {\n                    setTimeout(() => { \n                        canLoadNextPage = true;\n                        loadContent(currentPageIndex + 1); \n                    }, config.delayTime);\n                } else {\n                    canLoadNextPage = true;\n                    if (autoLoadInProgress) {\n                        hideLoadingStatus();\n                    }\n                }\n            }\n        }\n\n        // 更新视频源\n        function updateVideoSource() {\n            const selectedIndex = parseInt(document.getElementById('video-source-select').value);\n            if (isNaN(selectedIndex) || !videoSources[selectedIndex]) {\n                $('#messages').append(`<span class=\"warn\">未找到有效的视频源。</span><br>`);\n                console.warn(\"Invalid or undefined video source:\", selectedIndex, videoSources);\n                return;\n            }\n\n            const selectedSource = videoSources[selectedIndex];\n            document.getElementById('video-url').textContent = `视频地址:\\n ${selectedSource}`;\n\n            const videoSourceElement = document.getElementById('video-source');\n            videoSourceElement.src = selectedSource;\n\n            const videoElement = document.getElementById('video-element');\n            videoElement.load();\n\n            $('#messages').append(`<span>更新视频源为: ${selectedSource}</span><br>`);\n            console.log(\"Updated video source to:\", selectedSource);\n        }\n\n        // 切换总页数显示状态\n        function toggleTotalPagesDisplay() {\n            if (urls.length > 1) {\n                $('#page').show();\n            } else {\n                $('#page').hide();\n            }\n        }\n\n        // 页面加载完成后执行的主要逻辑\n        $(document).ready(function () {\n            imageBox = document.getElementById('images');\n            textBox = document.getElementById('text');\n            if (imageBox && textBox) {\n                new Viewer(imageBox, { title: true, interval: 2000 });\n                new Viewer(textBox, { title: true, interval: 2000 });\n            }\n\n            const totalPagesText = config.totalPagesText;\n            const totalPages = parseInt(totalPagesText, 10) || 1;\n            const baseUrl = '{{baseUrl}}';\n\n            clearContainers();\n            $('#urls, #debug-info textarea, #video-url, #video-source-select').empty();\n            $('#urls, #messages, #debug-info, #video-url, #video-container, #video-source-container, #images, #text').hide();\n\n            buildUrls(totalPages, baseUrl);\n\n            const urlSelect = document.getElementById('url-select');\n            if (urlSelect.options.length > 0) {\n                urlSelect.value = '0'; \n\n                if (config.autoLoading) {\n                    autoLoadInProgress = true;\n                    for (let i = 0; i < urls.length; i++) {\n                        loadContent(i);\n                    }\n                } else {\n                    loadContent(0);\n                }\n            } else {\n                loadContent(0);\n            }\n\n            $('#url-select').change(function () {\n                clearContainers();\n                const selectedIndex = parseInt($(this).val());\n                loadContent(selectedIndex);\n            });\n            $('#prev-page-btn').click(function () {\n                clearContainers();\n                if (currentPageIndex > 0) {\n                    loadContent(currentPageIndex - 1);\n                }\n            });\n            $('#next-page-btn').click(function () {\n                clearContainers();\n                if (currentPageIndex < urls.length - 1) {\n                    loadContent(currentPageIndex + 1);\n                }\n            });\n            $('#auto-load-btn').click(function () {\n                autoLoadInProgress = true;\n                showLoadingStatus(1); \n                for (let i = currentPageIndex + 1; i < urls.length; i++) {\n                    loadContent(i);\n                }\n            });\n            $('#toggle-messages-btn').click(function () { $('#messages').toggle(); });\n            $('#toggle-urls-btn').click(function () { $('#urls').toggle(); });\n            $('#toggle-debug-btn').click(function () { $('#debug-info').toggle(); });\n        });\n    </script>\n</body>\n</html>",
    "ruleImage": "a@data-original",
    "ruleLink": "a.0@href",
    "ruleNextPage": "page||text.下一页@href",
    "rulePubDate": "[class=\"pic-text text-right\"]@text",
    "ruleTitle": "h4@text",
    "singleUrl": false,
    "sortUrl": "搜索🔍::/jiejie/index.php/vod/search.html?wd={{source.getVariable()}}\n黄瓜资源::/jiejie/index.php/vod/type/id/87.html\n155资源::/jiejie/index.php/vod/type/id/248.html\n森林资源::/jiejie/index.php/vod/type/id/117.html\n奥斯卡资源::/jiejie/index.php/vod/type/id/86.html\n百万资源::/jiejie/index.php/vod/type/id/237.html\n制服诱惑::/jiejie/index.php/vod/show/id/251.html\n中文字幕::/jiejie/index.php/vod/show/id/254.html\n美乳巨乳::/jiejie/index.php/vod/show/id/262.html\n熟女人妻::/jiejie/index.php/vod/show/id/259.html\n萝莉少女::/jiejie/index.php/vod/show/id/260.html\n强奸乱伦::/jiejie/index.php/vod/show/id/263.html\n无码专区::/jiejie/index.php/vod/show/id/249.html",
    "sourceComment": "jiejiesp.xyz",
    "sourceGroup": "版本",
    "sourceIcon": "天",
    "sourceName": "1.1",
    "sourceUrl": "https://wap.jiejiesp27.xyz/"
  },
  {
    "articleStyle": 1,
    "customOrder": -10100924,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": true,
    "header": "{\"User-Agent\": \"Mozilla/5.0 (Linux; Android 12; 22041211AC Build/SP1A.210812.016) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.104 Mobile Safari/537.36\"}",
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "ruleArticles": ".list@li",
    "ruleContent": "<js>\nvar v = result.match(/source\\s*=\\s*[\"']([^\"']*?\\.(m3u8|mp4)\\b[^\"']*)[\"']/i);\nvar p = v ? v[1].replace(/\\\\/g,'') : '';\nvar t = '@get:{t}';\nvar d = java.getString('[property=\"video:tag\"]@content');\nvar sign1 = java.base64Decode('44CQ5aSc5piO56m644CR55qE5pKt5pS+5Zmo');\nvar sign2 = java.base64Decode('5LuF5L6b5Liq5Lq65a2m5Lmg5L2/55So77yM5Lil56aB5YiG5Lqr44CB5YCS5Y2W5Y+K5Lu75L2V6L+d5rOV6KGM5Li677yB');\nvar sign3 = java.base64Decode('5L2/55So6ICF6Ieq6KGM5om/5ouF6aOO6Zmp5LiO6LSj5Lu7');\n`<!DOCTYPE html>\n<html>\n<head>\n<meta charset=\"utf-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n<title>${t}</title>\n<style>\n*{margin:0;padding:0;box-sizing:border-box}\nbody{font-family:-apple-system,sans-serif;background:#f0f9ff;padding:10px}\n.v-box{max-width:800px;margin:0 auto;background:white;border-radius:12px;box-shadow:0 5px 15px rgba(0,0,0,0.1);overflow:hidden}\n.header{padding:12px;border-bottom:1px solid #eee;display:flex;flex-wrap:wrap;justify-content:space-between}\n.sign{background:#e9f7ff;padding:6px;border-radius:6px;margin-bottom:8px;font-size:14px;color:#1a73e8;width:100%}\n.title{font-size:18px;font-weight:600;margin-bottom:8px;width:100%}\n.tags{color:#5f6368;font-size:14px;flex:1;min-width:60%;word-break:break-all}\n.time{color:#5f6368;font-size:14px;text-align:right;flex-basis:35%}\n.v-wrap{position:relative;padding-top:56.25%;background:#000}\n.video{position:absolute;top:0;left:0;width:100%;height:100%}\n.footer{padding:8px;text-align:center;color:#5f6368;font-size:13px}\n.info-box{padding:15px;font-size:14px;line-height:1.6}\n.info-box p{margin:8px 0}\n.hint{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);background:rgba(0,0,0,0.7);color:#fff;padding:12px 20px;border-radius:20px;font-size:1.1rem;z-index:10;display:none}\n.controls{position:absolute;top:0;left:0;width:100%;height:4px;background:rgba(255,255,255,0.3);z-index:5;transition:opacity 0.3s}\n.progress{height:100%;background:#4a9eff;width:0}\n</style>\n</head>\n<body>\n<div class=\"v-box\">\n<div class=\"header\">\n<div class=\"sign\" style=\"text-align:center;padding:5px 0\">\n<div>${sign1}</div>\n<div style=\"text-align:left; padding-top:4px\">\n${sign2}<br>${sign3}</div>\n</div>\n<div class=\"title\">${t}</div>\n<div class=\"tags\">${d}</div>\n<div class=\"time\" id=\"timeDisplay\">00:00/00:00</div></div>\n<div class=\"v-wrap\">\n<div class=\"controls\"><div class=\"progress\" id=\"progressBar\"></div></div>\n<div class=\"hint\" id=\"hint\">快进中 &gt;&gt;</div>\n<video class=\"video\" id=\"v\" controls playsinline>\n<source src=\"${p}\" type=\"video/mp4\">您的浏览器不支持HTML5视频\n</video>\n</div>\n<div class=\"footer\">滑动调整进度 | 长按2倍速</div>\n</div>\n<script>\nvar v = document.getElementById('v');\nvar tDisplay = document.getElementById('timeDisplay');\nvar pBar = document.getElementById('progressBar');\nvar hint = document.getElementById('hint');\nvar startX = 0, startTime = 0;\nvar longPressTimer;\nvar sensitivity = 0.1;\nvar longPressTime = 500;\nvar hintDuration = 2000;\nfunction updateTime() {\nif (!v.duration) return;\nvar m1 = Math.floor(v.currentTime / 60);\nvar s1 = Math.floor(v.currentTime % 60);\nvar m2 = Math.floor(v.duration / 60);\nvar s2 = Math.floor(v.duration % 60);\ntDisplay.textContent = m1 + ':' + (s1 < 10 ? '0' : '') + s1 + '/' + m2 + ':' + (s2 < 10 ? '0' : '') + s2;\npBar.style.width = (v.currentTime / v.duration) * 100 + '%';}\nv.addEventListener('timeupdate', updateTime);\nv.addEventListener('loadedmetadata', updateTime);\nv.addEventListener('touchstart', function(e) {\nstartX = e.touches[0].clientX;\nstartTime = Date.now();\nif (longPressTimer) clearTimeout(longPressTimer);\nhint.style.display = 'none';\nlongPressTimer = setTimeout(function() {\nv.playbackRate = 2.0;\nhint.style.display = 'block';\nsetTimeout(function() { hint.style.display = 'none'; }, hintDuration);}, longPressTime);});\nv.addEventListener('touchmove', function(e) {\ne.preventDefault();\nclearTimeout(longPressTimer);\nvar diffX = e.touches[0].clientX - startX;\nvar change = diffX * sensitivity * v.duration / 100;\nv.currentTime = Math.max(0, Math.min(v.currentTime + change, v.duration));\nstartX = e.touches[0].clientX;updateTime();});\nv.addEventListener('touchend', function() {\nv.playbackRate = 1.0;\nclearTimeout(longPressTimer);});\n</script>\n</body>\n</html>`\n</js>",
    "ruleImage": "img@data-original",
    "ruleLink": "a.0@href",
    "ruleNextPage": "page",
    "rulePubDate": "{{@@.vodlist_img@html##(\\d+)-(\\d+)-(\\d+)##$0###}} | {{@@.vodlist_img@span.0@text}}",
    "ruleTitle": ".title@text@put:{\"t\":\"@@.title@text\"}",
    "singleUrl": false,
    "sortUrl": "搜索 🔍::/s/page/{{page}}/wd/{{source.getVariable()}}/\n最新::/label/hot/by/time/page/{{page}}/\n日榜::/label/hot/by/hits_day/page/{{page}}/\n周榜::/label/hot/by/hits_week/page/{{page}}/\n月榜::/label/hot/by/hits_month/page/{{page}}/\n国产 🎞::/t/1-{{page}}/\n自拍::/t/5-{{page}}/\n主播大秀::/t/6-{{page}}/\n主播诱惑::/t/36-{{page}}/\n探花::/t/7-{{page}}/\n偷拍::/t/8-{{page}}/\n乱伦::/t/8-{{page}}/\n吃瓜::/t/10-{{page}}/\n抖阴::/t/11-{{page}}/\nAV::/t/12-{{page}}/\n福利姬::/t/20-{{page}}/\n侵犯::/t/37-{{page}}/\n日韩 🎞::/t/2-{{page}}/\n日韩自拍::/t/13-{{page}}/\n日本无码::/t/14-{{page}}/\n字幕::/t/15-{{page}}/\n解说::/t/17-{{page}}/\n换脸::/t/18-{{page}}/\n欧美 🎞::/t/3-{{page}}/\n自拍::/t/21-{{page}}/\n字幕::/t/22-{{page}}/\n伦理 🎞::/t/4-{{page}}/\n三级::/t/29-{{page}}/\n日韩::/t/30-{{page}}/\n动漫 🎞::/t/16-{{page}}/\n剧集::/t/26-{{page}}/\n3D::/t/27-{{page}}/\n次元::/t/28-{{page}}/\n另类 🎞::/t/39-{{page}}/\n同性恋::/t/38-{{page}}/\n变性::/t/40-{{page}}/\n重口味::/t/23-{{page}}/",
    "sourceComment": "<声明>\n//2025.8.10 作者：夜明空\n//源社区：https://taoba.cf\n//仅供个人学习使用，严禁分享、倒卖及任何违法行为！使用者自行承担风险与责任\n</声明>\n\n//网址更新频繁，有需要请到发布页自行更新\n//发布页：\nhttps://18j.18hu.link/mdce\n18j.vip\n18zy.vip\n51zy.vip",
    "sourceGroup": "版本",
    "sourceIcon": "https://18oc.life/18link/18j/images/favicon.ico",
    "sourceName": "18J-夜明空",
    "sourceUrl": "https://18oc.life/label/sort"
  },
  {
    "articleStyle": 1,
    "customOrder": 0,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": false,
    "header": "{\n \"User-Agent\":\"Mozilla/5.0 (Linux; Android 12; HarmonyOS; OCE-AN50; HMSCore 6.15.0.302) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.5735.196 HuaweiBrowser/16.0.3.302 Mobile Safari/537.36\",\n \"Cookie\":\"accessAgeDisclaimerPH=1; x-index-auth=authed\",\n \"Accept-Encoding\":\"\"\n}",
    "lastUpdateTime": 1778198793380,
    "loadWithBaseUrl": true,
    "ruleArticles": "class.thumbnail group",
    "ruleContent": "<js>\nfunction $(rule) {\n    return java.getElements(rule);\n}\n\n// 1. 匹配 eval 加密段\nvar pageSource = String(result);\nvar evalMatch = pageSource.match(/eval\\(function\\(p,a,c,k,e,d\\).*\\)\\)/);\nif (!evalMatch) {\n    result = \"<p>错误：未找到完整的视频源加密段</p>\";\n} else {\n    eval(evalMatch[0]);\n\n    // ========== 代理替换 ==========\n    source = source.replace(/https:\\/\\/(([a-zA-Z0-9-]+\\.)+[a-zA-Z]{2,})\\//, 'https://www.thisav.sbs/jmpres/$1/');\n    if (typeof source842 !== 'undefined') {\n        source842 = source842.replace(/https:\\/\\/(([a-zA-Z0-9-]+\\.)+[a-zA-Z]{2,})\\//, 'https://www.thisav.sbs/jmpres/$1/');\n    }\n    if (typeof source1280 !== 'undefined') {\n        source1280 = source1280.replace(/https:\\/\\/(([a-zA-Z0-9-]+\\.)+[a-zA-Z]{2,})\\//, 'https://www.thisav.sbs/jmpres/$1/');\n    }\n\n    if (typeof source !== 'undefined') {\n        var qualityMap = {};\n\n        // 2. 主 m3u8 子画质\n        try {\n            var v_res = java.ajax(source);\n            var data = String(v_res).match(/.*video\\.m3u8/g);\n            if (data != null && data.length > 0) {\n                for (var i = 0; i < data.length; i++) {\n                    var link = source.replace('playlist.m3u8', data[i]);\n                    var name = \"\";\n                    if (String(data[i]).match(/x/)) {\n                        name = String(data[i]).match(/(\\d+)\\//)[1] + \"p\";\n                    } else {\n                        name = String(data[i]).match(/(.*)\\//)[1];\n                    }\n                    if (!qualityMap[name]) qualityMap[name] = link;\n                }\n            }\n        } catch(e) {}\n\n        // 3. 备用源 720p/1080p\n        if (typeof source842 !== 'undefined' && source842) {\n            if (!qualityMap['720p']) qualityMap['720p'] = source842;\n        }\n        if (typeof source1280 !== 'undefined' && source1280) {\n            if (!qualityMap['1080p']) qualityMap['1080p'] = source1280;\n        }\n\n        // 4. 自动源\n        qualityMap['自动'] = source;\n\n        // 5. 生成画质列表（自动放最后）\n        var url_list = '';\n        for (var k in qualityMap) {\n            if (k === '自动') continue;\n            url_list += '<li><a link=\"' + qualityMap[k] + '\">' + k + '</a></li>\\n';\n        }\n        url_list += '<li><a link=\"' + qualityMap['自动'] + '\">自动</a></li>\\n';\n        var v_list = '<ul class=\"play_list\">' + url_list + '</ul>';\n\n        // 6. 简介\n        var desc = $('.space-y-2 .text-secondary.1').text();\n        desc = String(desc).replace(/番号:|番號:|發行日期:|发行日期:/, '');\n        var sort = '&nbsp;';\n        var intro = '中文:' + java.get('title') + '<br>';\n        var infoEls = $('.space-y-2 .text-secondary');\n        for (var j = 1; j < infoEls.length - 1; j++) {\n            intro += infoEls[j].text() + '<br>';\n        }\n        intro = java.t2s(intro);\n\n        // 7. 构建 HTML（保留原界面样式）\n        var title = java.get('title');\n        var pic = java.get('pic');\n        var tab_name = '<li>画质</li>\\n';\n\n        result = '<!DOCTYPE html>\\n<html>\\n<head>\\n';\n        result += '<meta charset=\"utf-8\">\\n';\n        result += '<meta name=\"viewport\" content=\"width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no\">\\n';\n        result += '<title>' + title + '</title>\\n';\n        result += '<style>\\n';\n        result += 'body{margin:0;background:#000;color:#fff;font-family:sans-serif;}\\n';\n        result += '.MacPlayer{position:relative;width:100%;background:#000;}\\n';\n        result += '.MacPlayer video{width:100%;display:block;}\\n';\n        result += '.card{margin:8px;background:#1a1a1a;border-radius:8px;padding:12px;}\\n';\n        result += '.v_title{font-size:16px;margin:0 0 8px 0;}\\n';\n        result += '.v_desc{font-size:13px;color:#aaa;}\\n';\n        result += '.open_content{color:#fe628e;cursor:pointer;}\\n';\n        result += '.v_content{margin-top:8px;}\\n';\n        result += '.cover img{width:100%;border-radius:4px;}\\n';\n        result += '.intro{font-size:13px;color:#ddd;}\\n';\n        result += '.tab_control{list-style:none;padding:0;display:flex;gap:8px;}\\n';\n        result += '.tab_control li{padding:4px 12px;background:#333;border-radius:4px;cursor:pointer;}\\n';\n        result += '.tab_control li.current{background:#fe628e;}\\n';\n        result += '.play_list{list-style:none;padding:0;display:flex;flex-wrap:wrap;gap:8px;}\\n';\n        result += '.play_list li{padding:6px 12px;background:#333;border-radius:4px;cursor:pointer;}\\n';\n        result += '.play_list li.current{background:#fe628e;}\\n';\n        result += '.play_list_sort{cursor:pointer;color:#fe628e;margin-bottom:8px;}\\n';\n        result += '</style>\\n';\n        result += '<script src=\"https://code.jquery.com/jquery-3.0.0.min.js\"><\\/script>\\n';\n        result += '<script src=\"https://cdnjs.thisav.sbs/ajax/libs/hls.js/1.4.3/hls.min.js\"><\\/script>\\n';\n        result += '</head>\\n<body>\\n';\n\n        // 播放器区域\n        result += '<div class=\"MacPlayer\" id=\"MacPlayer\">\\n';\n        result += '  <video id=\"videoPlayer\" controls playsinline></video>\\n';\n        result += '</div>\\n';\n\n        // 简介卡片\n        result += '<div class=\"card v_info\">\\n';\n        result += '  <h2 class=\"v_title\">' + title + '</h2>\\n';\n        result += '  <p class=\"v_desc\">\\n';\n        result += '    <span class=\"desc\">' + desc + '</span>\\n';\n        result += '    <span>' + sort + '</span>\\n';\n        result += '    <span class=\"open_content\" id=\"open_content\">简介</span>\\n';\n        result += '  </p>\\n';\n        result += '  <div class=\"v_content\" id=\"v_content\" style=\"display:none;\">\\n';\n        result += '    <div class=\"cover\"><img src=\"' + pic + '\"></div>\\n';\n        result += '    <div class=\"content\" id=\"intro_content\">\\n';\n        result += '      <div id=\"intro\"><p>' + intro + '</p>\\n';\n        result += '        <div class=\"show_more\" id=\"show_more\" style=\"display:block;\"></div>\\n';\n        result += '      </div>\\n';\n        result += '    </div>\\n';\n        result += '  </div>\\n';\n        result += '</div>\\n';\n\n        // 画质切换卡片\n        result += '<div class=\"card v_list\">\\n';\n        result += '  <ul class=\"tab_control play_from\">' + tab_name + '</ul>\\n';\n        result += '  <div style=\"height:34px;\"></div>\\n';\n        result += '  <div class=\"tab_content\" id=\"play_list\">\\n';\n        result += '    <div class=\"play_list_sort\" id=\"play_list_sort\">⇅ 正序/倒序</div>\\n';\n        result += '    ' + v_list + '\\n';\n        result += '  </div>\\n';\n        result += '</div>\\n';\n\n        // 核心播放控制器 JS\n        result += '<script>\\n';\n        result += 'var video = document.getElementById(\"videoPlayer\");\\n';\n        result += 'var hls = null;\\n';\n        result += 'function loadSource(url) {\\n';\n        result += '  if(hls){ hls.stopLoad(); hls.detachMedia(); hls.destroy(); }\\n';\n        result += '  if(Hls.isSupported()) {\\n';\n        result += '    hls = new Hls({ autoStartLoad: true });\\n';\n        result += '    hls.loadSource(url);\\n';\n        result += '    hls.attachMedia(video);\\n';\n        result += '    hls.on(Hls.Events.MANIFEST_PARSED, function() { video.play(); });\\n';\n        result += '  } else if (video.canPlayType(\"application/vnd.apple.mpegurl\")) {\\n';\n        result += '    video.src = url;\\n';\n        result += '    video.addEventListener(\"loadedmetadata\", function() { video.play(); });\\n';\n        result += '  }\\n';\n        result += '}\\n';\n\n        // 初始化：加载自动源\n        result += 'loadSource(\"' + qualityMap['自动'] + '\");\\n';\n\n        // 画质点击事件\n        result += '$(\".play_list li\").click(function(){\\n';\n        result += '  var $this = $(this);\\n';\n        result += '  $(\".play_list li\").removeClass(\"current\");\\n';\n        result += '  $this.addClass(\"current\");\\n';\n        result += '  var url = $this.children(\"a\").attr(\"link\");\\n';\n        result += '  if(url) loadSource(url);\\n';\n        result += '});\\n';\n\n        // 正序/倒序排序\n        result += 'var sortAsc = true;\\n';\n        result += '$(\"#play_list_sort\").click(function(){\\n';\n        result += '  var ul = $(\".play_list\");\\n';\n        result += '  var lis = ul.children(\"li\").get();\\n';\n        result += '  sortAsc = !sortAsc;\\n';\n        result += '  if(sortAsc){ lis.sort(function(a,b){ return 0; }); }\\n';\n        result += '  else{ lis.reverse(); }\\n';\n        result += '  ul.empty().append(lis);\\n';\n        result += '});\\n';\n\n        // 简介展开/收起\n        result += '$(\"#open_content\").click(function(){\\n';\n        result += '  $(\"#v_content\").toggle();\\n';\n        result += '});\\n';\n        result += 'if($(\"#intro\").height() > 101) $(\"#show_more\").show();\\n';\n        result += '$(\"#intro_content\").click(function(){\\n';\n        result += '  $(this).toggleClass(\"auto\");\\n';\n        result += '  $(\"#show_more\").toggle();\\n';\n        result += '  $(\".cover\").toggle();\\n';\n        result += '});\\n';\n\n        // 默认选中第一个画质\n        result += '$(\".play_list li\").first().addClass(\"current\");\\n';\n        result += '<\\/script>\\n';\n        result += '</body>\\n</html>';\n\n    } else {\n        result = \"<p>错误：source 变量未定义</p>\";\n    }\n}\n</js>",
    "ruleImage": "img@data-src\n<js>\njava.put('pic',result)\n</js>",
    "ruleLink": "a[x-text=\"item.full_title\"]@href||a.0@href",
    "ruleNextPage": "page||text.下一页@href",
    "rulePubDate": "<js>\nsort=\"\";\nresult=java.getElements('.text-xs');\nlen=result.length-1\nfor(i=len;i>=0;i--){\n\tt=result[i].text();\n\ti==len?sort+='🕒'+t:sort+='  '+t;\n}\nsort\n</js>",
    "ruleTitle": ".text-secondary@text\n<js>\njava.put('title',result)\n</js>",
    "singleUrl": false,
    "sortUrl": "<js>\neval(String(source.sourceComment))\nresult=`\n搜索::${host}/search/{{source.getVariable()}}\n中文字幕::${host}/chinese-subtitle\n中文字幕::${host}/chinese-subtitle?sort=views\n无码流出::${host}/uncensored-leak\n最近更新::${host}/new\n新作上市::${host}/release\n今日热门::${host}/today-hot\n本周热门::${host}/weekly-hot\n本月热门::${host}/monthly-hot\n素人SIRO::${host}/siro\n素人LUXU::${host}/luxu\n素人GANA::${host}/gana\n素人PRESTIGE PREMIUM::${host}/maan\n无码FC2::${host}/fc2\n无码HEYZO::${host}/heyzo\n无码FC2::${host}/fc2\n无码一本道::${host}/1pondo\n无码Caribbeancom::${host}/caribbeancom\n无码Caribbeancompr::${host}/caribbeancompr\n无码10musume::${host}/10musume\n无码pacopacomama::${host}/pacopacomama\n`\n</js>",
    "sourceComment": " host=\"https://www.missav1.icu/dm194/cn\"\n/*\n\thttps://www.missav1.icu/dm194/cn\n*/",
    "sourceGroup": "版本",
    "sourceIcon": "https://img1.baidu.com/it/u=3056428239,816616493&fm=253&fmt=auto&app=138&f=PNG?w=237&h=237",
    "sourceName": "1.2",
    "sourceUrl": "MissAV",
    "style": "body {\n    margin: 0;\n    background: #000;\n    color: #fff;\n    font-family: sans-serif;\n}\n\n.MacPlayer {\n    position: relative;\n    width: 100%;\n    background: #000;\n}\n\n.MacPlayer video {\n    width: 100%;\n    display: block;\n}\n\n.card {\n    margin: 8px;\n    background: #1a1a1a;\n    border-radius: 8px;\n    padding: 12px;\n}\n\n.v_title {\n    font-size: 16px;\n    margin: 0 0 8px 0;\n}\n\n.v_desc {\n    font-size: 13px;\n    color: #aaa;\n}\n\n.open_content {\n    color: #fe628e;\n    cursor: pointer;\n}\n\n.v_content {\n    margin-top: 8px;\n}\n\n.cover img {\n    width: 100%;\n    border-radius: 4px;\n}\n\n.intro {\n    font-size: 13px;\n    color: #ddd;\n}\n\n.tab_control {\n    list-style: none;\n    padding: 0;\n    display: flex;\n    gap: 8px;\n}\n\n.tab_control li {\n    padding: 4px 12px;\n    background: #333;\n    border-radius: 4px;\n    cursor: pointer;\n}\n\n.tab_control li.current {\n    background: #fe628e;\n}\n\n.play_list {\n    list-style: none;\n    padding: 0;\n    display: flex;\n    flex-wrap: wrap;\n    gap: 8px;\n}\n\n.play_list li {\n    padding: 6px 12px;\n    background: #333;\n    border-radius: 4px;\n    cursor: pointer;\n}\n\n.play_list li.current {\n    background: #fe628e;\n}\n\n.play_list_sort {\n    cursor: pointer;\n    color: #fe628e;\n    margin-bottom: 8px;\n}"
  },
  {
    "articleStyle": 3,
    "customOrder": 0,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": false,
    "header": "{\n\"User-Agent\": \"Mozilla/5.0 (Android)\"\n}",
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "ruleArticles": "$.blocks..models[*]&&$.models[*]",
    "ruleContent": "<js>\nconst parts = baseUrl.split(',').map(function(item) { return item.trim(); });\nconst domain = parts[0].split('/').slice(0, 3).join('/');\nconst username = parts[0].split('/').pop() || parts[0];\n\nconst camAjax = java.ajax(domain + '/api/front/v2/models/username/' + username + '/cam?uniq=0');\nconst configAjax = java.ajax(domain + '/api/front/v3/config/initial');\nconst membersAjax = java.ajax(domain + '/api/front/v2/models/username/' + username + '/members?uniq=0');\n\nlet responseData = { status: \"offline\", avatarUrl: \"\", startTime: \"\", coverImg: \"\", userDescription: \"\", goalDescription: \"\", fanClubDescription: \"\", topic: \"\", username: username, stream: \"\", topBestPlace: \"\", hlsLines: [], cdn: \"\", pixelatedResolutions: [], membersCount: 0, tipMenuPriceList: [], isLive: false, tipMenuCreatedAt: \"\", websocketUrl: \"\", websocketToken: \"\", modelId: \"\" };\n\nif (camAjax) {\n    const camData = JSON.parse(camAjax);\n    const user = camData.user && camData.user.user ? camData.user.user : {};\n    const cam = camData.cam ? camData.cam : {};\n    \n    responseData.status = user.status || \"offline\";\n    responseData.avatarUrl = user.avatarUrl || \"\";\n    responseData.startTime = user.statusChangedAt || \"\";\n    responseData.userDescription = user.description || \"\";\n    responseData.goalDescription = cam.goal && cam.goal.description ? cam.goal.description : \"\";\n    responseData.fanClubDescription = cam.userFanClub && cam.userFanClub.description ? cam.userFanClub.description : \"\";\n    responseData.topic = cam.topic || \"\";\n    responseData.stream = cam.streamName || \"\";\n    responseData.topBestPlace = user.topBestPlace || \"\";\n    responseData.modelId = user.id || \"\";\n    \n    if (user.snapshotTimestamp && responseData.modelId) {\n        responseData.coverImg = \"https://img.doppiocdn.live/thumbs/\" + user.snapshotTimestamp + \"/\" + responseData.modelId;\n    }\n    \n    if (cam.broadcastSettings && cam.broadcastSettings.presets) {\n        const presets = cam.broadcastSettings.presets;\n        var allResolutions = [];\n        \n        if (presets.default && presets.default.constructor === Array) {\n            allResolutions = allResolutions.concat(presets.default);\n        }\n        \n        if (presets.pixelated && presets.pixelated.constructor === Array) {\n            allResolutions = allResolutions.concat(presets.pixelated);\n        }\n        \n        if (presets.testing && presets.testing.constructor === Array) {\n            allResolutions = allResolutions.concat(presets.testing);\n        }\n        \n        if (presets.h265 && presets.h265.constructor === Array) {\n            allResolutions = allResolutions.concat(presets.h265);\n        }\n        \n        if (presets.vr && presets.vr.constructor === Array) {\n            allResolutions = allResolutions.concat(presets.vr);\n        }\n        \n        var uniqueResolutions = [];\n        for (var i = 0; i < allResolutions.length; i++) {\n            if (uniqueResolutions.indexOf(allResolutions[i]) === -1) {\n                uniqueResolutions.push(allResolutions[i]);\n            }\n        }\n        \n        uniqueResolutions.sort(function(a, b) {\n            var numA = parseInt(a);\n            var numB = parseInt(b);\n            if (isNaN(numA)) numA = 0;\n            if (isNaN(numB)) numB = 0;\n            if (a === \"auto\") return 1;\n            if (b === \"auto\") return -1;\n            if (a === \"160p_blurred\") return 1;\n            if (b === \"160p_blurred\") return -1;\n            return numB - numA;\n        });\n        \n        responseData.pixelatedResolutions = uniqueResolutions;\n    }\n    \n    responseData.isLive = user.isOnline === true;\n    responseData.tipMenuCreatedAt = cam.tipMenu && cam.tipMenu.createdAt ? cam.tipMenu.createdAt : \"\";\n    \n    if (cam.tipMenu && cam.tipMenu.settings) {\n        responseData.tipMenuPriceList = cam.tipMenu.settings.map(function(item) {\n            return {\n                activity: item.activity || \"\",\n                price: item.price || 0\n            };\n        });\n    }\n}\n\nif (configAjax) {\n    const configData = JSON.parse(configAjax);\n    const hosts = configData.initial && configData.initial.common && configData.initial.common.hlsStreamHosts ? configData.initial.common.hlsStreamHosts : {};\n    var hlsLines = [];\n    if (hosts.A) hlsLines.push(hosts.A);\n    if (hosts.B) hlsLines.push(hosts.B);\n    if (hosts.C) hlsLines.push(hosts.C);\n    if (hosts.D) hlsLines.push(hosts.D);\n    if (hosts.E) hlsLines.push(hosts.E);\n    if (hosts.F) hlsLines.push(hosts.F);\n    responseData.hlsLines = hlsLines;\n    responseData.cdn = responseData.hlsLines[0] || \"\";\n    \n    const client = configData.initial && configData.initial.client ? configData.initial.client : {};\n    responseData.websocketUrl = client.websocket && client.websocket.url ? client.websocket.url : \"\";\n    responseData.websocketToken = client.websocket && client.websocket.token ? client.websocket.token : \"\";\n}\n\nif (membersAjax) {\n    try {\n        const membersData = JSON.parse(membersAjax);\n        responseData.membersCount = \n            (membersData && membersData.guests ? membersData.guests : 0) + \n            (membersData && membersData.spies ? membersData.spies : 0) + \n            (membersData && membersData.invisibles ? membersData.invisibles : 0) + \n            (membersData && membersData.greens ? membersData.greens : 0) + \n            (membersData && membersData.golds ? membersData.golds : 0) + \n            (membersData && membersData.regulars ? membersData.regulars : 0);\n    } catch (error) {\n        responseData.membersCount = 0;\n    }\n}\n\nJSON.stringify(responseData);\n</js>\n<!DOCTYPE html>\n<html lang=\"zh-CN\">\n<head>\n    <meta charset=\"UTF-8\">\n    <title></title>\n</head>\n    <style>\n        * { margin: 0; padding: 0; box-sizing: border-box; font-family: 'Microsoft Yahei', sans-serif; }\n        body { color: #333; padding: 0.1rem; min-height: 100vh; background: #f5f5f5; }\n        .app-container { display: grid; grid-template-columns: 1fr; gap: 1rem; max-width: 1200px; margin: 0 auto; }\n        .live-section { border-radius: 12px; overflow: hidden; box-shadow: 0 8px 32px rgba(0, 0, 0, 0.1); border: 1px solid #eaeaea; background: #fff; }\n        .topic-section { padding: 14px 20px; border-bottom: 1px solid #eaeaea; background: #fff; display: none; }\n        .topic-label { font-size: 12px; color: #666; margin-bottom: 6px; display: flex; align-items: center; gap: 8px; font-weight: 500; }\n        .topic-content { font-size: 15px; color: #333; font-weight: 500; line-height: 1.4; }\n        .chat-section { border-radius: 12px; padding: 1rem; display: flex; flex-direction: column; height: 500px; border: 1px solid #eaeaea; background: #fff; box-shadow: 0 8px 32px rgba(0, 0, 0, 0.1); }\n        .chat-messages { flex: 1; overflow-y: auto; padding-right: 0.5rem; width: 100%; }\n        .chat-messages::-webkit-scrollbar { width: 6px; }\n        .chat-messages::-webkit-scrollbar-track { background: #f0f0f0; border-radius: 3px; }\n        .chat-messages::-webkit-scrollbar-thumb { background: #c0c0c0; border-radius: 3px; }\n        .message-wrapper { display: block; margin-bottom: 0.3rem; width: 100%; }\n        .message-item { padding: 0.3rem 0.6rem; border-radius: 16px; font-size: 0.85rem; line-height: 1.3; border: 1px solid rgba(224, 224, 224, 0.6); display: block; background: #f8f8f8; color: #333; width: 100%; word-break: break-word; box-sizing: border-box; }\n        .lovense-item { border-color: #e0e0e0; background: #f8f8f8; }\n        .tip-item { border-color: #e0e0e0; background: #f8f8f8; }\n        .system-message { border-color: #e0e0e0; color: #666; font-size: 0.85rem; margin: 0 auto 0.3rem auto; background: #f8f8f8; }\n        .user-name { font-weight: 600; color: #222; margin-left: 0.4rem; }\n        .level-tag { font-size: 0.75rem; color: #666; background: #f0f0f0; padding: 0.1rem 0.4rem; border-radius: 8px; }\n        .tip-amount { color: #e74c3c; font-weight: 600; }\n        .live-header { padding: 16px 20px; border-bottom: 1px solid #eaeaea; display: flex; align-items: center; gap: 15px; background: #fff; }\n        .avatar-container { width: 56px; height: 56px; flex-shrink: 0; }\n        .avatar { width: 100%; height: 100%; border-radius: 50%; object-fit: cover; border: 3px solid #007aff; }\n        .host-info { flex: 1; min-width: 0; }\n        .host-info h2 { font-size: 18px; margin-bottom: 6px; font-weight: 600; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: #333; }\n        .status-container { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; }\n        .live-badge { display: inline-flex; align-items: center; background: #ff3b30; color: white; padding: 4px 10px; border-radius: 4px; font-size: 12px; font-weight: 600; letter-spacing: 0.3px; }\n        .live-badge::before { content: ''; display: inline-block; width: 6px; height: 6px; background-color: white; border-radius: 50%; margin-right: 6px; animation: blink 1.5s infinite; }\n        @keyframes blink { 0%, 100% { opacity: 1; } 50% { opacity: 0.3; } }\n        .viewer-count { font-size: 13px; color: #666; display: flex; align-items: center; gap: 5px; }\n        .player-container { position: relative; background: #000000; overflow: hidden; }\n        .player-container:fullscreen { display: flex; align-items: center; justify-content: center; }\n        .player-container:-webkit-full-screen { display: flex; align-items: center; justify-content: center; }\n        #dplayer { width: 100% !important; height: 100% !important; display: flex; align-items: center; }\n        #dplayer video { object-fit: contain !important; }\n        .dplayer-controller { display: none !important; }\n        .dplayer-notice { display: none !important; }\n        .custom-controls { position: absolute; bottom: 0; left: 0; right: 0; padding: 12px 15px 6px; display: flex; align-items: center; justify-content: space-between; opacity: 0; transition: opacity 0.2s; z-index: 1000; pointer-events: none; }\n        .player-container.controls-visible .custom-controls { opacity: 1; pointer-events: auto; }\n        .player-container.controls-hidden .custom-controls { opacity: 0; pointer-events: none; }\n        .left-controls, .right-controls { display: flex; align-items: center; gap: 8px; pointer-events: auto; }\n        .rotate-btn { background: rgba(255, 255, 255, 0.15); border: 1px solid rgba(255, 255, 255, 0.25); color: rgba(255, 255, 255, 0.9); padding: 6px 10px; border-radius: 6px; cursor: pointer; font-size: 13px; font-weight: 500; white-space: nowrap; display: flex; align-items: center; justify-content: center; transition: all 0.15s; min-width: 52px; pointer-events: auto; }\n        .rotate-btn:hover { background: rgba(255, 255, 255, 0.25); color: white; }\n        .control-btn { background: rgba(255, 255, 255, 0.15); border: 1px solid rgba(255, 255, 255, 0.25); color: #ffffff; width: 36px; height: 36px; border-radius: 6px; display: flex; align-items: center; justify-content: center; cursor: pointer; font-size: 16px; transition: all 0.15s; pointer-events: auto; }\n        .control-btn:disabled { opacity: 0.5; cursor: not-allowed; }\n        .selector-btn { background: rgba(255, 255, 255, 0.15); border: 1px solid rgba(255, 255, 255, 0.25); color: #ffffff; padding: 6px 10px; border-radius: 6px; cursor: pointer; font-size: 13px; font-weight: 500; white-space: nowrap; display: flex; align-items: center; gap: 5px; transition: all 0.15s; min-width: 65px; justify-content: center; pointer-events: auto; }\n        .selector-menu { position: absolute; bottom: 42px; background: #ffffff; border-radius: 8px; min-width: 90px; display: none; box-shadow: 0 8px 32px rgba(0, 0, 0, 0.16); border: 1px solid #d1d1d6; overflow: hidden; z-index: 1001; pointer-events: auto; }\n        .menu-item { padding: 8px 12px; color: #333; cursor: pointer; font-size: 13px; transition: all 0.15s; border-bottom: 1px solid #eaeaea; display: flex; align-items: center; justify-content: space-between; pointer-events: auto; }\n        .menu-item:last-child { border-bottom: none; }\n        .menu-item:hover:not(:disabled) { background: #007aff; color: white; }\n        .menu-item.active { background: rgba(10, 132, 255, 0.1); color: #007aff; }\n        .menu-item.active:after { content: \"✓\"; font-size: 12px; color: #007aff; }\n        .loading-indicator { position: absolute; top: 15px; left: 15px; background: rgba(0, 0, 0, 0.8); color: white; padding: 6px 12px; border-radius: 4px; font-size: 12px; z-index: 1002; display: none; border: 1px solid rgba(255, 255, 255, 0.1); }\n        .floating-button { position: fixed; bottom: 20px; right: 20px; width: 60px; height: 60px; border-radius: 50%; background: #007aff; color: white; display: flex; align-items: center; justify-content: center; cursor: pointer; box-shadow: 0 4px 12px rgba(0, 122, 255, 0.3); z-index: 10000; border: none; font-size: 24px; }\n        .floating-panel { position: fixed; bottom: 90px; right: 20px; width: 400px; background: #ffffff; border-radius: 12px; box-shadow: 0 8px 32px rgba(0, 0, 0, 0.15); padding: 20px; z-index: 9999; border: 1px solid #eaeaea; display: none; max-height: 80vh; overflow-y: auto; }\n        .floating-panel::-webkit-scrollbar { width: 6px; }\n        .floating-panel::-webkit-scrollbar-track { background: #f0f0f0; border-radius: 3px; }\n        .floating-panel::-webkit-scrollbar-thumb { background: #c0c0c0; border-radius: 3px; }\n        .floating-panel-title { font-size: 18px; font-weight: 600; margin-bottom: 15px; color: #333; padding-bottom: 10px; border-bottom: 1px solid #eaeaea; }\n        .floating-info-section { margin-bottom: 20px; }\n        .floating-info-section-title { font-size: 15px; color: #007aff; margin-bottom: 12px; font-weight: 600; display: flex; align-items: center; gap: 8px; }\n        .floating-info-item { margin-bottom: 12px; display: flex; justify-content: space-between; padding: 8px 0; border-bottom: 1px solid #f5f5f5; }\n        .floating-info-item:last-child { border-bottom: none; margin-bottom: 0; }\n        .floating-info-label { font-size: 13px; color: #666; min-width: 120px; }\n        .floating-info-value { font-size: 14px; color: #333; font-weight: 500; text-align: right; flex: 1; }\n        .floating-content { background: #f8f9fa; border: 1px solid #eaeaea; border-radius: 8px; padding: 12px; font-size: 14px; color: #333; line-height: 1.5; margin-bottom: 15px; }\n        .floating-price-list { display: flex; flex-direction: column; gap: 8px; }\n        .floating-price-item { background: #ffffff; border: 1px solid #eaeaea; border-radius: 8px; padding: 10px 12px; display: flex; align-items: center; justify-content: space-between; transition: all 0.2s; }\n        .floating-price-item:hover { border-color: #007aff; }\n        .floating-price-activity { font-size: 14px; color: #333; flex: 1; }\n        .floating-price-value { font-size: 14px; color: #ff3b30; font-weight: 600; }\n        @media (max-width: 768px) {\n            .floating-panel { width: 350px; right: 10px; bottom: 80px; }\n            .floating-button { width: 50px; height: 50px; font-size: 20px; right: 15px; bottom: 15px; }\n            .live-header { padding: 14px 16px; }\n            .avatar-container { width: 48px; height: 48px; }\n            .host-info h2 { font-size: 16px; }\n        }\n        @media (max-width: 480px) {\n            .floating-panel { width: 300px; }\n            .chat-section { height: 400px; }\n            .app-container { padding: 0.5rem; gap: 1rem; }\n        }\n    </style>\n<body>\n    <div id=\"config\" style=\"display:none;\">\n        <div id=\"liveData\" style=\"display:none;\">{{result}}</div>\n    </div>\n    \n    <div class=\"app-container\">\n        <div class=\"live-section\">\n            <div class=\"topic-section\" id=\"topicContainer\">\n                <div class=\"topic-label\">\n                    <i class=\"fas fa-bullhorn\"></i> 直播标题\n                </div>\n                <div class=\"topic-content\" id=\"topic\"></div>\n            </div>\n            \n            <div class=\"live-header\">\n                <div class=\"avatar-container\">\n                    <img class=\"avatar\" id=\"avatarImg\" src=\"\" alt=\"\">\n                </div>\n                <div class=\"host-info\">\n                    <h2 id=\"hostName\">正在加载...</h2>\n                    <div class=\"status-container\">\n                        <span class=\"live-badge\">直播中</span>\n                        <div class=\"viewer-count\">\n                            <i class=\"fas fa-users\"></i>\n                            <span id=\"membersCount\">--</span> 人\n                        </div>\n                    </div>\n                </div>\n            </div>\n            \n            <div class=\"player-container\" id=\"playerContainer\">\n                <div id=\"dplayer\"></div>\n                <div class=\"loading-indicator\" id=\"loadingIndicator\">正在切换...</div>\n                <div class=\"custom-controls\">\n                    <div class=\"left-controls\">\n                        <button class=\"control-btn\" id=\"refreshBtn\" title=\"刷新播放\">\n                            <i class=\"fas fa-redo-alt\"></i>\n                        </button>\n                        <button class=\"control-btn\" id=\"volumeBtn\" title=\"静音/取消静音\">\n                            <i class=\"fas fa-volume-up\"></i>\n                        </button>\n                        <div class=\"rotate-btn\" id=\"rotateBtn\">竖屏</div>\n                    </div>\n                    <div class=\"right-controls\">\n                        <div class=\"line-selector\">\n                            <div class=\"selector-btn\" id=\"lineBtn\" title=\"选择线路\">线路1 <i class=\"fas fa-chevron-down\"></i></div>\n                            <div class=\"selector-menu\" id=\"lineMenu\"></div>\n                        </div>\n                        <div class=\"quality-selector\">\n                            <div class=\"selector-btn\" id=\"qualityBtn\" title=\"选择清晰度\">默认 <i class=\"fas fa-chevron-down\"></i></div>\n                            <div class=\"selector-menu\" id=\"qualityMenu\"></div>\n                        </div>\n                        <button class=\"control-btn\" id=\"fullscreenBtn\" title=\"全屏\">\n                            <i class=\"fas fa-expand\"></i>\n                        </button>\n                    </div>\n                </div>\n            </div>\n        </div>\n        \n        <div class=\"chat-section\">\n             <div class=\"chat-messages\" id=\"chatContainer\"></div>\n        </div>\n    </div>\n    \n    <button class=\"floating-button\" id=\"floatingBtn\">\n        <i class=\"fas fa-info\"></i>\n    </button>\n    \n    <div class=\"floating-panel\" id=\"floatingPanel\">\n        <div class=\"floating-panel-title\">直播信息</div>\n        \n        <div class=\"floating-info-section\">\n            <div class=\"floating-info-section-title\">\n                <i class=\"fas fa-user\"></i> 主播信息\n            </div>\n            <div class=\"floating-info-item\">\n                <span class=\"floating-info-label\">主播名称:</span>\n                <span class=\"floating-info-value\" id=\"floatingHostName\">--</span>\n            </div>\n            <div class=\"floating-info-item\">\n                <span class=\"floating-info-label\">历史最高排行:</span>\n                <span class=\"floating-info-value\" id=\"floatingTopBestPlace\">--</span>\n            </div>\n            <div class=\"floating-info-item\">\n                <span class=\"floating-info-label\">总人数:</span>\n                <span class=\"floating-info-value\" id=\"floatingMembersCount\">--</span>\n            </div>\n            <div class=\"floating-info-item\">\n                <span class=\"floating-info-label\">首次开播日期:</span>\n                <span class=\"floating-info-value\" id=\"floatingTipMenuCreatedAt\">--</span>\n            </div>\n            <div class=\"floating-info-item\">\n                <span class=\"floating-info-label\" id=\"floatingDurationLabel\">时长标签:</span>\n                <span class=\"floating-info-value\" id=\"floatingDuration\">--</span>\n            </div>\n            <div class=\"floating-info-item\">\n                <span class=\"floating-info-label\" id=\"floatingTimeLabel\">时间标签:</span>\n                <span class=\"floating-info-value\" id=\"floatingStatusTime\">--</span>\n            </div>\n        </div>\n        \n        <div class=\"floating-info-section\" id=\"floatingUserDescriptionSection\">\n            <div class=\"floating-info-section-title\">\n                <i class=\"fas fa-user-circle\"></i> 主播介绍\n            </div>\n            <div class=\"floating-content\" id=\"floatingUserDescription\"></div>\n        </div>\n        \n        <div class=\"floating-info-section\" id=\"floatingGoalSection\">\n            <div class=\"floating-info-section-title\">\n                <i class=\"fas fa-bullseye\"></i> 直播目标\n            </div>\n            <div class=\"floating-content\" id=\"floatingGoalDescription\"></div>\n        </div>\n        \n        <div class=\"floating-info-section\" id=\"floatingFanClubSection\">\n            <div class=\"floating-info-section-title\">\n                <i class=\"fas fa-users\"></i> 粉丝团留言\n            </div>\n            <div class=\"floating-content\" id=\"floatingFanClubDescription\"></div>\n        </div>\n        \n        <div class=\"floating-info-section\">\n            <div class=\"floating-info-section-title\">\n                <i class=\"fas fa-gift\"></i> 打赏菜单\n            </div>\n            <div class=\"floating-price-list\" id=\"floatingPriceList\"></div>\n        </div>\n        \n        <div class=\"floating-info-section\">\n            <div class=\"floating-info-section-title\">\n                <i class=\"fas fa-tv\"></i> 播放设置\n            </div>\n            <div class=\"floating-info-item\">\n                <span class=\"floating-info-label\">当前线路:</span>\n                <span class=\"floating-info-value\" id=\"floatingLine\">线路1</span>\n            </div>\n            <div class=\"floating-info-item\">\n                <span class=\"floating-info-label\">清晰度:</span>\n                <span class=\"floating-info-value\" id=\"floatingQuality\">默认</span>\n            </div>\n        </div>\n    </div>\n\n    <script src=\"https://cdn.jsdelivr.net/npm/dplayer@1.27.1/dist/DPlayer.min.js\"></script>\n    <script src=\"https://cdn.jsdelivr.net/npm/hls.js@1.4.10/dist/hls.min.js\"></script>\n    <script src=\"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/js/all.min.js\"></script>\n    <script>\n        const liveDataElement = document.getElementById('liveData');\n        let liveData = {};\n        \n        if (liveDataElement.textContent) {\n            try {\n                liveData = JSON.parse(liveDataElement.textContent);\n            } catch (e) {}\n        }\n        \n        const chatContainer = document.getElementById('chatContainer');\n        let chatWs = null;\n\n        function addSystemMessage(text) {\n            const systemDiv = document.createElement('div');\n            systemDiv.className = 'message-item system-message';\n            systemDiv.textContent = text;\n            chatContainer.prepend(systemDiv);\n            chatContainer.scrollTop = 0;\n        }\n        \n        function initChat() {\n            if (!liveData.modelId || !liveData.websocketUrl || !liveData.websocketToken) return;\n\n            addSystemMessage('开始连接弹幕服务器');\n            \n            const timeoutMs = 10000;\n            let connectTimeoutTimer = setTimeout(() => {\n                if (chatWs && chatWs.readyState !== WebSocket.OPEN) {\n                    chatWs.close();\n                    addSystemMessage('连接超时：未能成功连接弹幕服务器');\n                }\n            }, timeoutMs);\n            \n            if (chatWs && chatWs.readyState === WebSocket.OPEN) {\n                chatWs.close();\n            }\n            \n            chatWs = new WebSocket(`${liveData.websocketUrl}`);\n            const sendQueue = [\n                '{\"connect\":{\"token\":\"' + liveData.websocketToken + '\"},\"id\":1}',\n                `{\"subscribe\":{\"channel\":\"newChatMessage@${liveData.modelId}\"},\"id\":2}`\n            ];\n            \n            function getUserLevelTag(userData) {\n                return userData?.userRanking?.level ? `<span class=\"level-tag\">Lv.${userData.userRanking.level}</span>` : '';\n            }\n            \n            function createMessageElement(data) {\n                const messageDiv = document.createElement('div');\n                messageDiv.className = 'message-item';\n                \n                const { type, userData, details } = data.message;\n                const levelTag = getUserLevelTag(userData);\n                \n                let content = '';\n                switch(type) {\n                    case 'text':\n                        messageDiv.className += ' text-item';\n                        content = `${levelTag}<span class=\"user-name\">${userData.username}</span>: ${details.body}`;\n                        break;\n                    case 'tip':\n                        messageDiv.className += ' tip-item';\n                        content = `${levelTag}<span class=\"user-name\">${userData.username}</span>: 已支付<span class=\"tip-amount\">${details.amount}</span>代币`;\n                        break;\n                    case 'lovense':\n                        messageDiv.className += ' lovense-item';\n                        const { power, time, amount } = details.lovenseDetails.detail;\n                        const powerText = power === 'low' ? '低' : power === 'medium' ? '中' : '高';\n                        const clientLevelTag = getUserLevelTag(details.lovenseDetails.clientUserInfo);\n                        content = `${clientLevelTag}<span class=\"user-name\">${details.lovenseDetails.clientUserInfo.username}</span>: ${powerText}强度 · ${time}秒`;\n                        break;\n                    default:\n                        return null;\n                }\n                \n                messageDiv.innerHTML = content;\n                return messageDiv;\n            }\n            \n            function addMessageToPanel(messageData) {\n                const messageElement = createMessageElement(messageData);\n                if (messageElement) {\n                    const messageWrapper = document.createElement('div');\n                    messageWrapper.className = 'message-wrapper';\n                    messageWrapper.appendChild(messageElement);\n                    chatContainer.prepend(messageWrapper);\n                    chatContainer.scrollTop = 0;\n                }\n            }\n            \n            chatWs.onopen = () => {\n                clearTimeout(connectTimeoutTimer);\n                sendQueue.forEach(cmd => chatWs.send(cmd));\n                addSystemMessage('弹幕服务器连接正常');\n            };\n            \n            chatWs.onmessage = (e) => {\n                if (e.data.trim() === '{}') {\n                    chatWs.send('{}');\n                    return;\n                }\n                try {\n                    const data = JSON.parse(e.data);\n                    if (data.ping) {\n                        chatWs.send(JSON.stringify({ pong: data.ping }));\n                    }\n                    if (data.push?.channel === `newChatMessage@${liveData.modelId}`) {\n                        addMessageToPanel(data.push.pub.data);\n                    }\n                } catch (error) {}\n            };\n            \n            chatWs.onerror = (err) => {\n                const errorDiv = document.createElement('div');\n                errorDiv.className = 'message-item system-message';\n                errorDiv.textContent = '连接错误';\n                chatContainer.prepend(errorDiv);\n                chatContainer.scrollTop = 0;\n            };\n            \n            chatWs.onclose = (e) => {\n                const closeDiv = document.createElement('div');\n                closeDiv.className = 'message-item system-message';\n                closeDiv.textContent = `连接关闭 | 错误码: ${e.code}`;\n                chatContainer.prepend(closeDiv);\n                chatContainer.scrollTop = 0;\n            };\n        }\n        \n        const elements = {\n            avatarImg: document.getElementById('avatarImg'),\n            hostName: document.getElementById('hostName'),\n            refreshBtn: document.getElementById('refreshBtn'),\n            volumeBtn: document.getElementById('volumeBtn'),\n            lineBtn: document.getElementById('lineBtn'),\n            lineMenu: document.getElementById('lineMenu'),\n            qualityBtn: document.getElementById('qualityBtn'),\n            qualityMenu: document.getElementById('qualityMenu'),\n            fullscreenBtn: document.getElementById('fullscreenBtn'),\n            loadingIndicator: document.getElementById('loadingIndicator'),\n            playerContainer: document.getElementById('playerContainer'),\n            membersCount: document.getElementById('membersCount'),\n            floatingBtn: document.getElementById('floatingBtn'),\n            floatingPanel: document.getElementById('floatingPanel'),\n            floatingHostName: document.getElementById('floatingHostName'),\n            floatingTopBestPlace: document.getElementById('floatingTopBestPlace'),\n            floatingMembersCount: document.getElementById('floatingMembersCount'),\n            floatingTipMenuCreatedAt: document.getElementById('floatingTipMenuCreatedAt'),\n            floatingTopic: document.getElementById('floatingTopic'),\n            floatingTopicSection: document.getElementById('floatingTopicSection'),\n            floatingGoalDescription: document.getElementById('floatingGoalDescription'),\n            floatingGoalSection: document.getElementById('floatingGoalSection'),\n            floatingUserDescription: document.getElementById('floatingUserDescription'),\n            floatingUserDescriptionSection: document.getElementById('floatingUserDescriptionSection'),\n            floatingFanClubDescription: document.getElementById('floatingFanClubDescription'),\n            floatingFanClubSection: document.getElementById('floatingFanClubSection'),\n            floatingPriceList: document.getElementById('floatingPriceList'),\n            floatingDurationLabel: document.getElementById('floatingDurationLabel'),\n            floatingDuration: document.getElementById('floatingDuration'),\n            floatingTimeLabel: document.getElementById('floatingTimeLabel'),\n            floatingStatusTime: document.getElementById('floatingStatusTime'),\n            floatingLine: document.getElementById('floatingLine'),\n            floatingQuality: document.getElementById('floatingQuality'),\n            topicContainer: document.getElementById('topicContainer'),\n            topic: document.getElementById('topic'),\n            rotateBtn: document.getElementById('rotateBtn')\n        };\n        \n        let dp = null;\n        let isMuted = false;\n        let isFullscreen = false;\n        let hlsInstance = null;\n        let durationInterval = null;\n        let config = {};\n        let hideControlsTimer = null;\n        \n        const getStreamUrl = (lineIndex = config.currentLine || 0, quality = config.currentQuality || 'auto') => {\n            const line = config.hlsLines?.[lineIndex];\n            if (!line || !config.stream) return '';\n            \n            const pureStatus = (config.status || '').toLowerCase();\n            let suffix = '_auto';\n            \n            if (pureStatus !== 'public') {\n                suffix = '_160p_blurred';\n            } else if (quality === 'auto') {\n                suffix = '_auto';\n            } else {\n                suffix = '_' + quality;\n            }\n            \n            return `https://edge-hls.${line}/hls/${config.stream}/master/${config.stream}${suffix}.m3u8?pkey=bXorqTB5ZhP5FcpX`;\n        };\n        \n        function showControls() {\n            elements.playerContainer.classList.remove('controls-hidden');\n            elements.playerContainer.classList.add('controls-visible');\n            if (hideControlsTimer) {\n                clearTimeout(hideControlsTimer);\n            }\n            hideControlsTimer = setTimeout(() => {\n                elements.playerContainer.classList.remove('controls-visible');\n                elements.playerContainer.classList.add('controls-hidden');\n            }, 3000);\n        }\n        \n        function switchStream(url) {\n            if (!dp || !dp.video || !url) return;\n            \n            config.isSwitching = true;\n            elements.loadingIndicator.style.display = 'block';\n            showControls();\n            \n            const video = dp.video;\n            video.pause();\n            video.src = '';\n            video.load();\n            \n            if (hlsInstance) {\n                try {\n                    hlsInstance.stopLoad();\n                    setTimeout(() => {\n                        hlsInstance.destroy();\n                        hlsInstance = null;\n                        startNewStream(url, video);\n                    }, 50);\n                } catch (e) {\n                    hlsInstance.destroy();\n                    hlsInstance = null;\n                    startNewStream(url, video);\n                }\n            } else {\n                startNewStream(url, video);\n            }\n        }\n        \n        function startNewStream(url, video) {\n            video.src = url;\n            \n            if (Hls.isSupported()) {\n                hlsInstance = new Hls({\n                    enableWorker: true,\n                    lowLatencyMode: true,\n                    backBufferLength: 60,\n                    maxBufferSize: 30 * 1000 * 1000,\n                    maxBufferLength: 30\n                });\n                \n                hlsInstance.loadSource(url);\n                hlsInstance.attachMedia(video);\n                \n                hlsInstance.on(Hls.Events.MANIFEST_PARSED, () => {\n                    completeSwitch();\n                    video.play().catch(e => {});\n                });\n                \n                hlsInstance.on(Hls.Events.ERROR, (event, data) => {\n                    if (data.fatal) {\n                        switch(data.type) {\n                            case Hls.ErrorTypes.NETWORK_ERROR:\n                                hlsInstance.startLoad();\n                                break;\n                            case Hls.ErrorTypes.MEDIA_ERROR:\n                                hlsInstance.recoverMediaError();\n                                break;\n                            default:\n                                completeSwitch();\n                                break;\n                        }\n                    }\n                });\n                \n                setTimeout(() => {\n                    if (config.isSwitching) {\n                        completeSwitch();\n                    }\n                }, 5000);\n                \n            } else if (video.canPlayType('application/vnd.apple.mpegurl')) {\n                video.addEventListener('loadedmetadata', () => {\n                    completeSwitch();\n                    video.play().catch(e => {});\n                });\n                \n                video.addEventListener('error', () => {\n                    completeSwitch();\n                });\n                \n                setTimeout(() => {\n                    if (config.isSwitching) {\n                        completeSwitch();\n                    }\n                }, 5000);\n            } else {\n                completeSwitch();\n            }\n        }\n        \n        function completeSwitch() {\n            config.isSwitching = false;\n            elements.loadingIndicator.style.display = 'none';\n        }\n        \n        function initPlayer() {\n            config = { ...liveData, currentLine: 0, currentQuality: 'auto', isSwitching: false };\n            \n            const url = getStreamUrl();\n            if (!url) return;\n            \n            if (dp) {\n                dp.destroy();\n                dp = null;\n            }\n            \n            dp = new DPlayer({\n                container: document.getElementById('dplayer'),\n                live: true,\n                autoplay: true,\n                theme: '#00a1d6',\n                loop: false,\n                lang: 'zh-cn',\n                screenshot: false,\n                hotkey: false,\n                preload: 'auto',\n                volume: 0.7,\n                mutex: true,\n                controls: false,\n                video: {\n                    url: url,\n                    pic: config.coverImg,\n                    type: 'customHls',\n                    customType: {\n                        customHls: function(video, player) {}\n                    }\n                },\n                contextmenu: [],\n                danmaku: false\n            });\n            \n            const videoElement = dp.video;\n            if (videoElement) {\n                videoElement.style.pointerEvents = 'none';\n                videoElement.addEventListener('click', function(e) {\n                    e.preventDefault();\n                    e.stopPropagation();\n                    return false;\n                });\n            }\n            \n            const dplayerContainer = dp.container;\n            dplayerContainer.style.pointerEvents = 'none';\n            dplayerContainer.addEventListener('click', function(e) {\n                e.preventDefault();\n                e.stopPropagation();\n                return false;\n            });\n            \n            isMuted = dp.video.muted;\n            elements.volumeBtn.innerHTML = isMuted \n                ? '<i class=\"fas fa-volume-mute\"></i>'\n                : '<i class=\"fas fa-volume-up\"></i>';\n            \n            switchStream(url);\n        }\n\n        function refreshPlayer() {\n            if (config.isSwitching || !config.stream) return;\n            const url = getStreamUrl(config.currentLine, config.currentQuality);\n            switchStream(url);\n        }\n        \n        function switchLine(lineIndex) {\n            if (config.isSwitching || !config.hlsLines || lineIndex >= config.hlsLines.length) return;\n            config.currentLine = lineIndex;\n            elements.lineBtn.innerHTML = `线路${lineIndex + 1} <i class=\"fas fa-chevron-down\"></i>`;\n            elements.floatingLine.textContent = `线路${lineIndex + 1}`;\n            updateLineMenuHighlights();\n            elements.lineMenu.style.display = 'none';\n            \n            const url = getStreamUrl(lineIndex, config.currentQuality);\n            switchStream(url);\n        }\n        \n        function switchQuality(quality) {\n            if (config.isSwitching) return;\n            config.currentQuality = quality;\n            const displayText = quality === 'auto' ? '默认' : quality;\n            elements.qualityBtn.innerHTML = `${displayText} <i class=\"fas fa-chevron-down\"></i>`;\n            elements.floatingQuality.textContent = displayText;\n            updateQualityMenuHighlights();\n            elements.qualityMenu.style.display = 'none';\n            \n            const url = getStreamUrl(config.currentLine, quality);\n            switchStream(url);\n        }\n        \n        function formatDuration(seconds) {\n            if (!seconds) return '0秒';\n            \n            const days = Math.floor(seconds / (24 * 60 * 60));\n            const hours = Math.floor((seconds % (24 * 60 * 60)) / (60 * 60));\n            const minutes = Math.floor((seconds % (60 * 60)) / 60);\n            const secs = Math.floor(seconds % 60);\n            \n            let result = '';\n            if (days > 0) result += `${days}天`;\n            if (hours > 0) result += `${hours}小时`;\n            if (minutes > 0) result += `${minutes}分钟`;\n            if (secs > 0 || result === '') result += `${secs}秒`;\n            \n            return result;\n        }\n        \n        function updateTimeInfo() {\n            if (!config.status || !config.startTime) return;\n            \n            const pureStatus = config.status.replace(/^状态：/, '').toLowerCase();\n            const isPublic = pureStatus === 'public';\n            const startTime = config.startTime ? new Date(config.startTime).getTime() : null;\n            const now = Date.now();\n            \n            if (config.isLive && startTime) {\n                if (isPublic) {\n                    elements.floatingDurationLabel.textContent = '直播时长:';\n                    elements.floatingTimeLabel.textContent = '直播时间:';\n                    \n                    const duration = Math.floor((now - startTime) / 1000);\n                    const durationText = formatDuration(duration);\n                    elements.floatingDuration.textContent = durationText;\n                    \n                    const startDate = new Date(startTime);\n                    elements.floatingStatusTime.textContent = startDate.toLocaleString();\n                } else {\n                    elements.floatingDurationLabel.textContent = '持续时长:';\n                    elements.floatingTimeLabel.textContent = '私密直播:';\n                    \n                    const duration = Math.floor((now - startTime) / 1000);\n                    const durationText = formatDuration(duration);\n                    elements.floatingDuration.textContent = durationText;\n                    \n                    const startDate = new Date(startTime);\n                    elements.floatingStatusTime.textContent = startDate.toLocaleString();\n                }\n            } else if (startTime) {\n                elements.floatingDurationLabel.textContent = '持续时长:';\n                elements.floatingTimeLabel.textContent = '下播时间:';\n                \n                const duration = Math.floor((now - startTime) / 1000);\n                let durationText = formatDuration(duration);\n                elements.floatingDuration.textContent = durationText;\n                \n                const endDate = new Date(startTime);\n                elements.floatingStatusTime.textContent = endDate.toLocaleString();\n            } else {\n                elements.floatingDuration.textContent = '--';\n                elements.floatingStatusTime.textContent = '--';\n            }\n        }\n        \n        function startDurationUpdate() {\n            if (durationInterval) {\n                clearInterval(durationInterval);\n            }\n            \n            updateTimeInfo();\n            durationInterval = setInterval(updateTimeInfo, 1000);\n        }\n        \n        function updateFloatingPanel() {\n            const pureUsername = (config.username || '').split('/').pop() || config.username || '';\n            elements.floatingHostName.textContent = pureUsername || '未知主播';\n            elements.membersCount.textContent = config.membersCount > 0 ? config.membersCount.toLocaleString() : '--';\n            elements.floatingMembersCount.textContent = config.membersCount > 0 ? config.membersCount.toLocaleString() : '--';\n            \n            if (config.topBestPlace > 0) {\n                const rankText = `TOP ${config.topBestPlace}`;\n                elements.floatingTopBestPlace.textContent = rankText;\n            } else {\n                elements.floatingTopBestPlace.textContent = '未上榜';\n            }\n            \n            if (config.tipMenuCreatedAt) {\n                const createdAt = new Date(config.tipMenuCreatedAt);\n                elements.floatingTipMenuCreatedAt.textContent = createdAt.toLocaleString();\n            } else {\n                elements.floatingTipMenuCreatedAt.textContent = '--';\n            }\n            \n            if (config.userDescription && config.userDescription.trim() !== '') {\n                elements.floatingUserDescription.textContent = config.userDescription;\n                elements.floatingUserDescriptionSection.style.display = 'block';\n            } else {\n                elements.floatingUserDescriptionSection.style.display = 'none';\n            }\n            \n            if (config.goalDescription && config.goalDescription.trim() !== '') {\n                elements.floatingGoalDescription.textContent = config.goalDescription;\n                elements.floatingGoalSection.style.display = 'block';\n            } else {\n                elements.floatingGoalSection.style.display = 'none';\n            }\n            \n            if (config.fanClubDescription && config.fanClubDescription.trim() !== '') {\n                elements.floatingFanClubDescription.textContent = config.fanClubDescription;\n                elements.floatingFanClubSection.style.display = 'block';\n            } else {\n                elements.floatingFanClubSection.style.display = 'none';\n            }\n            \n            if (config.tipMenuPriceList && config.tipMenuPriceList.length > 0) {\n                elements.floatingPriceList.innerHTML = '';\n                config.tipMenuPriceList.forEach((tip) => {\n                    const priceItem = document.createElement('div');\n                    priceItem.className = 'floating-price-item';\n                    \n                    const activityDiv = document.createElement('div');\n                    activityDiv.className = 'floating-price-activity';\n                    activityDiv.textContent = tip.activity || '未命名';\n                    \n                    const priceDiv = document.createElement('div');\n                    priceDiv.className = 'floating-price-value';\n                    priceDiv.textContent = `${tip.price || 0} 代币`;\n                    \n                    priceItem.appendChild(activityDiv);\n                    priceItem.appendChild(priceDiv);\n                    elements.floatingPriceList.appendChild(priceItem);\n                });\n            } else {\n                elements.floatingPriceList.innerHTML = '<div class=\"floating-price-item\"><div class=\"floating-price-activity\">暂无打赏菜单</div></div>';\n            }\n            \n            startDurationUpdate();\n        }\n        \n        function initUI() {\n            const pureUsername = (config.username || '').split('/').pop() || config.username || '';\n            elements.hostName.textContent = pureUsername || '未知主播';\n            \n            if (config.topic && config.topic.trim() !== '') {\n                elements.topic.textContent = config.topic;\n                elements.topicContainer.style.display = 'block';\n                document.title = config.topic;\n            } else {\n                elements.topicContainer.style.display = 'none';\n                document.title = pureUsername || '直播间';\n            }\n            \n            if (config.avatarUrl) {\n                const prefix = 'https://static-cdn.strpst.com';\n                if (config.avatarUrl.startsWith(prefix + prefix)) {\n                    config.avatarUrl = config.avatarUrl.replace(prefix + prefix, prefix);\n                }\n                elements.avatarImg.src = config.avatarUrl;\n            } else {\n                elements.avatarImg.src = '主播';\n            }\n            \n            updateFloatingPanel();\n        }\n        \n        function initLineMenu() {\n            elements.lineMenu.innerHTML = '';\n            \n            if (!config.hlsLines || config.hlsLines.length === 0) {\n                const item = document.createElement('div');\n                item.className = 'menu-item';\n                item.textContent = '无线路';\n                item.style.opacity = '0.6';\n                elements.lineMenu.appendChild(item);\n                return;\n            }\n            \n            config.hlsLines.forEach((line, index) => {\n                const item = document.createElement('div');\n                item.className = `menu-item ${index === config.currentLine ? 'active' : ''}`;\n                item.textContent = `线路${index + 1}`;\n                item.dataset.index = index;\n                item.onclick = (e) => {\n                    e.stopPropagation();\n                    switchLine(index);\n                };\n                elements.lineMenu.appendChild(item);\n            });\n        }\n        \n        function initQualityMenu() {\n            elements.qualityMenu.innerHTML = '';\n            const pureStatus = (config.status || '').replace(/^状态：/, '').toLowerCase();\n            \n            let availableQualities = [];\n            availableQualities.push({ value: 'auto', display: '默认' });\n            \n            if (pureStatus !== 'public') {\n                availableQualities = [{ value: '160p_blurred', display: '模糊' }];\n                config.currentQuality = '160p_blurred';\n            } else if (config.pixelatedResolutions && config.pixelatedResolutions.length > 0) {\n                config.pixelatedResolutions.forEach(resolution => {\n                    if (resolution !== '160p_blurred') {\n                        availableQualities.push({ \n                            value: resolution, \n                            display: resolution \n                        });\n                    }\n                });\n            }\n            \n            availableQualities.forEach((quality) => {\n                const isActive = quality.value === config.currentQuality;\n                const item = document.createElement('div');\n                item.className = `menu-item ${isActive ? 'active' : ''}`;\n                item.textContent = quality.display;\n                item.dataset.quality = quality.value;\n                item.onclick = (e) => {\n                    e.stopPropagation();\n                    switchQuality(quality.value);\n                };\n                elements.qualityMenu.appendChild(item);\n            });\n            \n            const currentQuality = availableQualities.find(q => q.value === config.currentQuality);\n            const displayText = currentQuality ? currentQuality.display : '默认';\n            elements.qualityBtn.innerHTML = `${displayText} <i class=\"fas fa-chevron-down\"></i>`;\n            elements.floatingQuality.textContent = displayText;\n        }\n        \n        function updateLineMenuHighlights() {\n            const items = elements.lineMenu.querySelectorAll('.menu-item');\n            items.forEach((item, index) => {\n                if (index === config.currentLine) {\n                    item.classList.add('active');\n                } else {\n                    item.classList.remove('active');\n                }\n            });\n        }\n        \n        function updateQualityMenuHighlights() {\n            const items = elements.qualityMenu.querySelectorAll('.menu-item');\n            items.forEach((item) => {\n                const quality = item.dataset.quality;\n                if (quality === config.currentQuality) {\n                    item.classList.add('active');\n                } else {\n                    item.classList.remove('active');\n                }\n            });\n        }\n        \n        async function handleRotateClick() {\n            try {\n                if (!document.fullscreenElement) {\n                    await elements.playerContainer.requestFullscreen();\n                }\n                \n                if (screen.orientation) {\n                    const type = screen.orientation.type;\n                    if (type.startsWith('portrait')) {\n                        await screen.orientation.lock('landscape');\n                        elements.rotateBtn.textContent = '横屏';\n                    } else {\n                        await screen.orientation.lock('portrait');\n                        elements.rotateBtn.textContent = '横屏';\n                    }\n                }\n                showControls();\n            } catch (err) {}\n        }\n        \n        function bindEvents() {\n            elements.refreshBtn.addEventListener('click', (e) => {\n                e.stopPropagation();\n                refreshPlayer();\n                showControls();\n            });\n            \n            elements.volumeBtn.addEventListener('click', (e) => {\n                e.stopPropagation();\n                if (dp && dp.video && !config.isSwitching) {\n                    isMuted = !isMuted;\n                    dp.video.muted = isMuted;\n                    elements.volumeBtn.innerHTML = isMuted \n                        ? '<i class=\"fas fa-volume-mute\"></i>'\n                        : '<i class=\"fas fa-volume-up\"></i>';\n                }\n                showControls();\n            });\n            \n            elements.fullscreenBtn.addEventListener('click', (e) => {\n                e.stopPropagation();\n                if (!isFullscreen) {\n                    const container = document.querySelector('.player-container');\n                    if (container.requestFullscreen) {\n                        container.requestFullscreen();\n                    } else if (container.webkitRequestFullscreen) {\n                        container.webkitRequestFullscreen();\n                    }\n                    elements.fullscreenBtn.innerHTML = '<i class=\"fas fa-compress\"></i>';\n                } else {\n                    if (document.exitFullscreen) {\n                        document.exitFullscreen();\n                    } else if (document.webkitExitFullscreen) {\n                        document.webkitExitFullscreen();\n                    }\n                    elements.fullscreenBtn.innerHTML = '<i class=\"fas fa-expand\"></i>';\n                }\n                isFullscreen = !isFullscreen;\n                showControls();\n            });\n            \n            elements.lineBtn.addEventListener('click', (e) => {\n                e.stopPropagation();\n                elements.lineMenu.style.display = \n                    elements.lineMenu.style.display === 'block' ? 'none' : 'block';\n                elements.qualityMenu.style.display = 'none';\n                updateLineMenuHighlights();\n                showControls();\n            });\n            \n            elements.qualityBtn.addEventListener('click', (e) => {\n                e.stopPropagation();\n                elements.qualityMenu.style.display = \n                    elements.qualityMenu.style.display === 'block' ? 'none' : 'block';\n                elements.lineMenu.style.display = 'none';\n                updateQualityMenuHighlights();\n                showControls();\n            });\n            \n            elements.rotateBtn.addEventListener('click', (e) => {\n                e.stopPropagation();\n                handleRotateClick();\n            });\n            \n            elements.playerContainer.addEventListener('touchstart', (e) => {\n                if (e.target.closest('.custom-controls, .selector-menu, .control-btn, .selector-btn, .menu-item, .rotate-btn')) {\n                    showControls();\n                    return;\n                }\n                \n                if (elements.playerContainer.classList.contains('controls-hidden')) {\n                    showControls();\n                } else {\n                    elements.playerContainer.classList.remove('controls-visible');\n                    elements.playerContainer.classList.add('controls-hidden');\n                    if (hideControlsTimer) {\n                        clearTimeout(hideControlsTimer);\n                        hideControlsTimer = null;\n                    }\n                }\n            });\n            \n            document.addEventListener('click', (e) => {\n                if (!e.target.closest('.selector-btn')) {\n                    elements.lineMenu.style.display = 'none';\n                    elements.qualityMenu.style.display = 'none';\n                }\n            });\n            \n            document.addEventListener('fullscreenchange', handleFullscreenChange);\n            document.addEventListener('webkitfullscreenchange', handleFullscreenChange);\n            \n            elements.floatingBtn.addEventListener('click', (e) => {\n                e.stopPropagation();\n                elements.floatingPanel.style.display = \n                    elements.floatingPanel.style.display === 'block' ? 'none' : 'block';\n            });\n            \n            document.addEventListener('click', (e) => {\n                if (!e.target.closest('.floating-button') && !e.target.closest('.floating-panel')) {\n                    elements.floatingPanel.style.display = 'none';\n                }\n            });\n        }\n        \n        function handleFullscreenChange() {\n            const isFullscreenNow = !!(document.fullscreenElement || \n                document.webkitFullscreenElement);\n            if (!isFullscreenNow) {\n                elements.fullscreenBtn.innerHTML = '<i class=\"fas fa-expand\"></i>';\n                isFullscreen = false;\n            }\n        }\n        \n        function initializeApp() {\n            if (!liveData || Object.keys(liveData).length === 0) return;\n            \n            addSystemMessage('正在读取直播间信息');\n            \n            config = { ...liveData, currentLine: 0, currentQuality: 'auto', isSwitching: false };\n            \n            initUI();\n            initLineMenu();\n            initQualityMenu();\n            initPlayer();\n            bindEvents();\n            initChat();\n            \n            elements.playerContainer.classList.add('controls-visible');\n            showControls();\n        }\n        \n        document.addEventListener('DOMContentLoaded', initializeApp);\n    </script>\n</body>\n</html>",
    "ruleImage": "https://img.doppiocdn.live/thumbs/{$.popularSnapshotTimestamp}/{$..id}_webp",
    "ruleLink": "/{$.username}",
    "rulePubDate": "{$.isLive}观众：{$.viewersCount}人 状态：{$.status}@js:result.replace(/(状态：)public/g, \"$1公开\").replace(/(状态：)(?!公开).+/g, \"$1付费\").replace(/false.*/g, '状态：未直播').replace(/true/g, '')",
    "ruleTitle": "$.username",
    "singleUrl": false,
    "sortUrl": "全部直播::/api/front/v2/models?limit=60&primaryTag=girls\n直播推荐::/api/front/models?limit=60&primaryTag=girls&filterGroupTags=[[\"recommended\"]]\n竖屏直播::/api/front/models?limit=60&primaryTag=girls&filterGroupTags=[[\"mobile\"]]\n中文直播::/api/front/models?limit=60&primaryTag=girls&filterGroupTags=[[\"tagLanguageChinese\"]]\n日本直播::/api/front/models?limit=60&primaryTag=girls&filterGroupTags=[[\"tagLanguageJapanese\"]]\n韩国直播::/api/front/models?limit=60&primaryTag=girls&filterGroupTags=[[\"tagLanguageKorean\"]]\n户外直播::/api/front/models?limit=60&primaryTag=girls&filterGroupTags=[[\"doPublicPlace\"]]\n青少年直播::/api/front/models?limit=60&primaryTag=girls&filterGroupTags=[[\"ageTeen\"]]\n俄罗斯直播::/api/front/models?limit=60&primaryTag=girls&filterGroupTags=[[\"tagLanguageRussianSpeaking\"]]\nASMR直播::/api/front/models?limit=60&primaryTag=girls&filterGroupTags=[[\"asmr\"]]\nCOS直播::/api/front/models?limit=60&primaryTag=girls&filterGroupTags=[[\"doCosplay\"]]\n情侣直播::/api/front/models?limit=60&primaryTag=couples\n变性直播::/api/front/models?limit=60&primaryTag=trans\n新人直播::/api/front/models?limit=60&primaryTag=girls&filterGroupTags=[[\"autoTagNew\"]]\n互动玩具::/api/front/models?limit=60&primaryTag=girls&filterGroupTags=[[\"autoTagInteractiveToy\"]]\n炮机直播::/api/front/models?limit=60&primaryTag=girls&filterGroupTags=[[\"fuckMachine\"]]",
    "sourceComment": "备用：\nhttps://zh.virtualtaboo.live\nhttps://zh.spiritzone.top\nhttps://zh.stripchat.webcam\nhttps://zh.mywebcamroom.com\nhttps://zh.topcams.tv\nhttps://zh.stripchatgirls.com\nhttps://zh.stripchat.com\nhttps://zh.xhamsterlive.com\nhttps://zh.hotzcam.com\nhttps://zh.tklivechat.com\nhttps://zh.spankbanglive.com\nhttps://zh.live.91pinse.com\npkey=Iecohquahc5RieQu\npkey=bXorqTB5ZhP5FcpX",
    "sourceGroup": "版本",
    "sourceIcon": "https://i.imgs.ovh/2025/12/29/Cwo6eX.png",
    "sourceName": "Strip直播",
    "sourceUrl": "https://zh.topcams.tv"
  },
  {
    "articleStyle": 0,
    "customOrder": 0,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": false,
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "singleUrl": true,
    "sourceComment": "使用需搭配加速器 不要相信里面的任何广告\n点击弹窗下方红色按钮即可跳过广告\n欢迎各位大佬对本源进行二创\n书源交流群：374309405（加群可获取福利）",
    "sourceGroup": "版本",
    "sourceIcon": "https://ogfap.com/logo.png",
    "sourceName": "成人tik需要梯子",
    "sourceUrl": "https://xxxtik.com/"
  },
  {
    "articleStyle": 0,
    "customOrder": 5,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": false,
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "singleUrl": true,
    "sourceGroup": "版本",
    "sourceIcon": "",
    "sourceName": "1.3",
    "sourceUrl": "https://www.33ccpp.com/"
  },
  {
    "articleStyle": 0,
    "customOrder": 7,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": true,
    "header": "{\n    'User-Agent': 'Mozilla/5.0 (Linux; Android 11; Pixel 3 XL Build/RQ3A.211001.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/102.0.4988.0 Mobile Safari/537.36 SearchCraft/3.9.2 (Baidu; P1 11) '\n}",
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "singleUrl": true,
    "sourceGroup": "版本",
    "sourceIcon": "https://legado.cn/template/comiis_app/pic/icon114.png",
    "sourceName": "1.4需要vip",
    "sourceUrl": "https://90hd.top?from=VIP"
  },
  {
    "articleStyle": 1,
    "customOrder": 58,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": true,
    "header": "{\"User-Agent\": \"Mozilla/5.0 (Linux; Android 10;Xiaomi 10pro) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.104 Mobile Safari/537.36\"}",
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "ruleArticles": "$..data[*]",
    "ruleContent": "$..videopath##.*\\$\n\n@js:\nurl=result;\n\nloadding=java.get(\"pic\")\n\nhtml=\n`<link rel=\"stylesheet\" type=\"text/css\" href=\"https://muiplayer.js.org/css/mui-player.min.css\" />\n\n<script type=\"text/javascript\" src=\"https://cdn.jsdelivr.net/gh/ljun223/reader3@main/js/mui-player.min.js\"></script>\n\n<script type=\"text/javascript\" src=\"https://cdn.jsdelivr.net/gh/ljun223/reader3@main/js/mui-player-mobile-plugin.min.js\"></script>\n\n<div class=\"dz\">`+url+`</div>\n\n<div id=\"mui-player\" style=\"width:100%;height:300px\"></div>\n\n<script>\n   var mp = new MuiPlayer(\t{\n \t\t  \"container\": \"#mui-player\",\n \t\t  \"src\": \"`+url+`\",\n \t\t  \"poster\":\"`+loadding+`\",\n \t\t  \"autoFit\":false,\n \t\t  \"lang\": \"zh-cn\",\n \t  \t\"height\":\"300px\",\n \t\t  plugins: [\n \t\t    new MuiPlayerMobilePlugin({\n \t\t\t    \"key\":\n \t\t\t \"01I01I01H01J01L01K01J01I01K01J01H01D01J01G01E\",\n \t\t    \t\"showMenuButton\": true,\n \t\t\t    \"pageGesture\":true,\n \t\t\t   })\n    ]\n   }); \n </script>`",
    "ruleImage": "coverpath@put:{\"pic\":\"$.coverpath\"}",
    "ruleLink": "https://77gmk8o.com/api/videoplay/{{$.id}}?uuid=1",
    "ruleNextPage": "page",
    "rulePubDate": "authername",
    "ruleTitle": "title",
    "singleUrl": false,
    "sortUrl": "@js:\n\ndata=java.ajax(\"https://77gmk8o.com/api/videosort\");\n\njson=JSON.parse(data);\n\nvar list=[];\nvar num=json.rescont.length;\nfor(var i=1;i<num;i++){\nlist+=json.rescont[i].name+\"::\"+\"https://77gmk8o.com/api/videosort/\"+json.rescont[i].id+\"?orderby=&page={{page}}\"+\"\\n\"\n\t};\n\"搜索用::https://77gmk8o.com/api/videosort/0?page={{page}}&serach={{source.getVariable()}}\"+\"\\n\"+list",
    "sourceGroup": "版本",
    "sourceIcon": "天",
    "sourceName": "1.5",
    "sourceUrl": "https://77gmk8o.com"
  },
  {
    "articleStyle": 0,
    "contentBlacklist": "",
    "contentWhitelist": "",
    "customOrder": 60,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": true,
    "header": "{\n\"User-Agent\": \"Mozilla/5.0 (Linux; U; Android 8.1.0; zh-CN; MI 8 Lite Build/OPM1.171019.019) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/78.0.3904.108 UCBrowser/13.2.0.1100 Mobile Safari/537.36\"\n}",
    "injectJs": "",
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "ruleArticles": "class.module-item",
    "ruleContent": "<div class=\"play_video\">\n{{@@title@text}}{{@@class.player-wrapper@all}}",
    "ruleImage": "img@data-cover",
    "ruleLink": "a.0@href",
    "ruleNextPage": "page",
    "rulePubDate": "class.module-item-caption@text",
    "ruleTitle": "img@alt",
    "singleUrl": false,
    "sortUrl": "最新::https://cn1.91short.com/\n推荐::/short/recommend_home_list/\n美女正妹::/short/label_related_list/Ug_pu_kskqY%3D\n91大神::/short/label_related_list/otDa4t6lDDQ%3D\n门事件::/short/label_related_list/3QW8lOdBcls%3D\n大神::/search?wd=大神\n变量搜索::/search?wd={{java.encodeURI(source.getVariable())}}\n学生::/search?wd=学生\n91::/search?wd=91\n偷情::/search?wd=偷情\n推特::/search?wd=推特\n少女::/search?wd=少女\n贫乳::/search?wd=贫乳\n口交::/search?wd=口交\n妹妹::/search?wd=妹妹\n美女::/search?wd=美女\n\n美臀巨臀::/short/label_related_list/azG9-jZfzG0%3D?title=%E7%BE%8E%E8%87%80%E5%B7%A8%E8%87%80\n后入::/search?wd=后入\n国产高清::/short/home_category_list/hd\n排行::/short/ranking_list\n国产AV::/short/label_related_list/1Bd0Zzp8D_E%3D\n大象传媒::/short/label_related_list/F16wCJ3LmWY%3D\n情趣综艺::/short/label_related_list/-0S1LwkskU4%3D\n推荐2::/film/home_recommend_list\n专题::/film/home_subject_list\n女优::/film/home_actor_list\n无码::/film/home_category_list/coded\n中字::/film/home_category_list/chinese_subtitle\n动漫::/film/home_list/jOSxa-4E27U%3D\n经典三级::/film/home_list/uZg0vDL8P8A%3D\n欧美性爱::/film/home_list/LblejiEnM6s%3D\nAV解说::/film/home_list/vJq_GzRiesQ%3D",
    "sourceComment": "翻页和封面不会\n\n永久域名 https://cn1.91short.com",
    "sourceGroup": "版本",
    "sourceIcon": "天",
    "sourceName": "1.6",
    "sourceUrl": "https://cn1.91short.com",
    "style": "iframe{\n\theight:auto\n}\ntitle{\n\tdisplay:block\n}"
  },
  {
    "articleStyle": 0,
    "customOrder": 66,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": true,
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "ruleArticles": "",
    "ruleContent": "",
    "ruleImage": "",
    "ruleLink": "",
    "ruleNextPage": "",
    "ruleTitle": "",
    "singleUrl": true,
    "sourceGroup": "版本",
    "sourceIcon": "天",
    "sourceName": "1.7",
    "sourceUrl": "https://zh.virtualtaboo.live/",
    "style": "video{\nwidth:100%;\nheight:auto;}"
  },
  {
    "articleStyle": 0,
    "concurrentRate": "",
    "contentBlacklist": "https://lupic.cdn.bcebos.com/.*,\nhttps://cpro.baidu.com/.*,\nhttps://eclick.baidu.com/.*,\nhttps://sofire.baidu.com/.*,\nhttps://analytics.woozooo.com/.*,\nhttps://statics.woozooo.com/.*,\n\nhttps://po18,\nhttps://mimg.0c1q0l.cn,\nhttps://www.googletagmanager.com,\nhttps://www.google-analytics.com,\nhttps://mc.usihnbcq.cn,\nhttps://mg.g1mm3d.cn,\nhttps://mscs.svaeuzh.cn,\nhttps://cnzz.hhttm.top,\nhttps://tp.vinuxhome.com,\nhttps://cnzz.mmstat.com,\nhttps://www.baihuillq.com,\nhttps://s23.cnzz.com,\nhttps://z3.cnzz.com,\nhttps://c.cnzz.com,\nhttps://stj.v1vo.top,\nhttps://z12.cnzz.com,\nhttps://img.mosflower.cn,\nhttps://tips.gamevvip.com,\nhttps://ehwe.yhdtns.com,\nhttps://xdn.cqqc3.com,\nhttps://www.jixunkyy.cn,\nhttps://sp.chemacid.cn,\nhttps://hm.baidu.com,\nhttps://s9.cnzz.com,\nhttps://z6.cnzz.com,\nhttps://um.cavuc.com,\nhttps://mav.mavuz.com,\nhttps://wofwk.aoidf3.com,\nhttps://z5.cnzz.com,\nhttps://xc.hubeijieshikj.cn,\nhttps://tj.tianwenhu.com,\nhttps://xg.gars57.cn,\nhttps://k.jinxiuzhilv.com,\nhttps://cdn.bootcss.com,\nhttps://ppl.xunzhuo123.com,\nhttps://xomk.jiangjunmh.top,\nhttps://img.xunzhuo123.com,\nhttps://z1.cnzz.com,\nhttps://s13.cnzz.com,\nhttps://xg.huataisangao.cn,\nhttps://z7.cnzz.com,\nhttps://xg.huataisangao.cn,\nhttps://z2.cnzz.com,\nhttps://s96.cnzz.com,\nhttps://q11.cnzz.com,\nhttps://thy.dacedsfa.cn,\nhttps://xg.whsbpw.cn,\nhttps://s19.cnzz.com,\nhttps://z8.cnzz.com,\nhttps://s4.cnzz.com,\nhttps://f5w.as12df.top,\nhttps://ae01.alicdn.com,\nhttps://www.92424.cn,\nhttps://k.wudejia.com,\nhttps://vivovip.mmszxc.top,\nhttps://qiu.xixiqiu.com,\nhttps://cdnjs.hnfenxun.com,\nhttps://cms.qdwght.com",
    "customOrder": 69,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": true,
    "header": "{\n    'User-Agent': 'Mozilla/5.0 (Linux; Android 11; Pixel 3 XL Build/RQ3A.211001.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/102.0.4988.0 Mobile Safari/537.36 SearchCraft/3.9.2 (Baidu; P1 11) '\n}",
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "ruleArticles": "<js>\njson=[];\nif(baseUrl.match(/ /)){\nlist=baseUrl.replace(/http.*?wd=\\s*/,'').split(' ');\nfor(i in list){\nhref=list[i].match(/【(.*?)】/)[1];\ntext=list[i].match(/《(.*?)》/)[1];\nintro=list[i].match(/◎(.*?)◎/)[1];\nindex=list[i].match(/^(\\d+、\\d+、)/)?list[i].match(/^(\\d+、\\d+、)/)[1]:list[i].match(/^(.*?)【/)[1]\njson.push({text:text,src:href,intro:intro,index:index})\n}\n}\nJSON.stringify(json)</js>\n$.[*]",
    "ruleContent": "",
    "ruleImage": "$.src",
    "ruleLink": "$.index\n@js:\nif(!result.match(/^http/) && !result.match(/\\d+、\\d+、/)){\nresult=\"https://www.coolapk.com/link?url=\"+encodeURIComponent(result)\n}else{result=result}",
    "ruleNextPage": "",
    "rulePubDate": "$.intro",
    "ruleTitle": "$.text",
    "singleUrl": false,
    "sortUrl": "💠 导航::https://fulihttp.com/【https://fulihttp.com/static/images/logo.svg】《第一福利导航》◎第一学术网😏◎ https://knowsex.net/【https://knowsex.net/main/contraception/img/contraceptive.jpg】《知性两性健康》◎两性健康-开放式性教育网站◎ https://aiboy.cc/【https://aiboy.cc/uploadfile/2021/0612/20210612014920789.jpg】《爱男孩帅哥网》◎同志、图片、小说、电影、资讯◎ https://抖淫.com/【https://d.0tcsi.bar/favicon.ico】《抖淫》◎抖淫短视频◎ https://www.zztt35.com/【https://static.zztt87.com/usr/uploads/2022/05/1824266711.png】《黑料不打烊》◎网红黑料、吃瓜🍉｜https://xxxmmm.email/◎ https://141jj.com/【https://files.catbox.moe/v2m4l7.png】《141JJ》◎🚀VPN｜很全的成人網站列表◎ https://theporndude.com/zh【https://media.porndudecdn.com/includes/images/mobile-logo-r.svg】《PornDude》◎🚀VPN｜色情视频网站列表◎ https://mygaysites.com/【https://mygaysites.com/includes/images/mobilegaylogo.svg】《MyGaySites》◎🚀VPN｜同志色情网站聚合◎\n\n\n🌐 聚合::https://www.fuqpremium.com/zh/【https://www.fuqpremium.com/templates/fuqpremium/images/icon.png】《FreePornTubes》◎🚀VPN｜优质色情视频导航◎ https://www.fuq.com/zh/【https://www.fuq.com/templates/fuq/images/logo.svg】《Fuq》◎🚀VPN｜色情电影导航◎ https://www.tgtube.com/zh/【https://www.tgtube.com/templates/tgtube/images/logo.svg】《TGTube》◎🚀VPN｜人妖色情油管视频导航◎ https://www.forhertube.com/zh/【https://www.forhertube.com/templates/forhertube/images/logo.svg】《ForHerTube》◎🚀VPN｜适合女性的色情视频导航◎ https://www.ixxx.com/zh/【https://www.ixxx.com/templates/ixxx/images/logo.svg】《iXXX》◎🚀VPN｜色情电影导航◎ https://www.tubegalore.com/zh/【https://www.tubegalore.com/templates/tubegalore/images/logo.svg】《TubeGalore》◎🚀VPN｜色情电视导航◎ https://www.maturetube.com/zh/【https://www.maturetube.com/templates/maturetube/images/logo.svg】《MatureTube》◎🚀VPN｜辣妈、MILF、奶奶色情导航◎ https://www.gaymaletube.com/zh/【https://www.gaymaletube.com/templates/gaymaletube/images/logo.svg】《GayMaleTube》◎🚀VPN｜同性恋色情视频导航◎ https://www.porzo.com/zh/【https://www.porzo.com/templates/porzo/images/logo.svg】《PORZO》◎🚀VPN｜色情视频导航◎ https://www.dinotube.com/zh/【https://www.dinotube.com/templates/dinotube/images/logo.svg】《DinoTube》◎🚀VPN｜色情视频导航◎ https://www.tiava.com/zh/【】《Tiava》◎🚀VPN｜色情电影导航◎ https://www.lobstertube.com/zh/【https://www.lobstertube.com/templates/lobstertube/images/icon.png】《LobsterTube》◎🚀VPN｜性爱、电影、电视导航◎\n\n\n🎬 传媒::https://playav.tv/【】《PlayAV》◎亚洲高清影片◎ https://thtv168.com/【】《桃红色界》◎教室诱惑、浴室激情◎ https://www.tkbcs8.life/【】《脱裤吧》◎https://tuoku9.com/◎ https://byym26.com/【https://s1.ax1x.com/2023/01/26/pSNmjD1.png】《水果派》◎成人影片解说节目◎ https://baozouj8.com/【https://baozouj8.com/images/headimg_dl.jpg】《暴走J8》◎一夜夫妻◎ https://www.aiwuav.xyz/index.php/label/new.html【https://www.aiwuav.xyz/template/aiw/favicon.ico】《爱污传媒》◎传媒视频聚合｜https://www.aiwu.info/◎ https://kvotr.cc/【https://kvotr.cc/template/mdapp.icu2/images/favicon.ico】《麻豆视频》◎海量高清视频◎ https://avhd1.com/【https://avhd1.com/img/logo_icon_avhd1.png】《HD高清AV》◎日本AV视频◎ https://yelai.cf/【https://b2less.dongshouji.com/file/pic001/images/icons/jiuyaop/icon-512x512.png】《91自拍》◎日本AV视频◎ http://hhdyw.buzz/【http://hhdyw.buzz/template/c25//images/play-logo.png】《八点影院》◎日本AV视频◎ http://smyis.xyz/【】《稻妻影视》◎日本AV视频◎ https://mizhan.tv/【】《咪站HD》◎日本AV视频◎ https://85videos.com/【】《85Videos》◎日本AV视频◎\n\n\n🚫 成导::https://集芳阁.com/【https://集芳阁.com/static/logo.svg】《集芳阁》◎集芳阁云搜◎ https://porn研究所.com/【https://porn研究所.com/img/logo.svg】《Porn研究所》◎福利视频◎ https://laowangyy.cc/【https://qq.com.xva06.xyz/static/images/logo.svg】《SEAV在线》◎成人视频◎ https://91av.pages.dev/【】《91AV聚合》◎视频导航◎ http://91dh.cf/【】《91AV导航》◎宅男导航◎ http://www.wangzhi.mom/【】《影库资源》◎视频导航◎\n\n\n🔞 成人::https://www.a567ap.com/【https://www.a234kb.com/skin/play.png】《四虎影院》◎福利视频｜http://www.4hu.tv/◎ https://sisav.cf/【https://sisav.cf/favicon.png】《色中色AV》◎福利视频◎ https://7m01.tk/【https://7m01.tk/template/688_m/images/play.png】《萝莉姬》◎福利视频◎ https://97d77.xyz/【https://6dbh1.xyz/favicon.ico】《蔡萝莉》◎成人影院◎ https://8xx.live/【https://8xamn.top/p/favicon-32x32.png】《拔插拔插》◎成人视频◎ https://www.niuzi1.com/【https://www.niuzi1.com/template/fytt/statics/img/favicon.ico】《风月同天》◎成人视频｜http://www.fyttdz.com/◎ https://www.avbus1.com/channels-index/new/【https://www.avbus1.com/favicon-32x32.png】《AV巴士》◎成人视频◎ https://bjinshen.xyz/【https://bjinshen.xyz/favicon.ico】《B影院》◎成人视频｜https://github.com/Bcinema/Btv◎ http://zhiyin202207.xyz/【https://static.yximgs.com/bs2/adcarsku/sku4acf4856-62b0-4734-8525-92bde28e9ad4.jpeg】《知阴》◎成人视频｜http://HuiJiaDiZhi.com/◎ https://5gamq.top/【https://plgku.86398ti.buzz:8443/favicon-32x32.png】《5G影院》◎成人视频◎ https://nbpp.buzz/【https://nbpp.bar/MDassets/images/placeholder-lg.jpg】《奶爸视频》◎成人视频◎ http://www.aqdlt.com/【https://img13.360buyimg.com/ddimg/jfs/t1/180015/34/30499/3188/635abb87E47815c6a/bdb7d18fcb5281a0.png】《爱情岛论坛》◎自拍视频◎ http://san72.com/【https://js.weilekangnet.com:59988/img/favicon_all.ico】《YouPorn》◎成人视频◎ https://www.xiaobi105.com/【】《蝌蚪窝》◎成人电影｜https://www.dizhi.fun/◎ https://2.258porn.cf/【】《258Porn》◎成人AV◎\n\n\n🚀 翻墙::https://po18.fans:1234/【https://po18.love:2345/template/conch/asset/img/load.gif】《Po18hub》◎激情视频导航｜https://po18av.vip/◎ https://cn.pornhub.com/【https://static.yximgs.com/bs2/adcarsku/sku6b1a883c-115f-413f-9e95-7ce7cfba66b1.png】《PornHub》◎🚀VPN｜色情视频及性爱影片◎ https://zh.xhamster.com/【https://static-lvlt.xhcdn.com/xh-desktop/images/logo/logo.svg】《xHamster》◎🚀VPN｜成人视频◎ https://netflav.com/【https://netflav.com/static/assets/logo.svg】《Netflav》◎🚀VPN｜日本成人电影◎ https://jable.tv/【】《Jable》◎🚀VPN｜日本高清AV｜https://alldayj.com/◎ https://bi81.top/【】《Bi8.TV》◎🚀VPN｜福利视频◎\n\n\n🈲 伦理::https://www.72dy.com/【https://static.tvcache.com//icon/72dy/favicon.png】《72电影》◎高清伦理◎ https://www.2345ti.com/【】《235影视》◎经典理伦片◎ https://vip.eeussjt.com/【】《EEUSS影院》◎快播电影、伦理◎ https://伦理小站.com/【https://伦理小站.com/statics/img/logo.svg】《韩三伦理小站》◎伦理影片◎ https://www.kxdyy.com/【】《开心电影院》◎高清电影、伦理◎\n\n\n🔥 耽影::https://www.fuju1.tv/【https://www.fuju1.tv/template/mytheme/statics/img/load.png】《腐剧TV》◎腐剧、BL动漫、同性电影、百合◎ https://www.bl210.top/【】《曙光影视》◎腐剧、耽美、泰剧暖光影视官网◎ https://www.tj8.top/【】《泰剧网》◎腐剧、耽美、泰剧暖光影视官网◎ https://www.bttwoo.com/【】《两个BT》◎同性｜https://www.bttwo.vip/◎ https://g.manmankan.com/【】《漫漫看》◎男同影视大全◎\n\n\n🎨 漫画::https://漫香阁.com/【https://漫香阁.com/favicon.ico】《漫香阁》◎成人H漫画◎ 【】《》◎韩国、日本漫画◎",
    "sourceComment": "",
    "sourceGroup": "版本",
    "sourceIcon": "http://pic.y8l.com/up/2022-6/202262415595588.png",
    "sourceName": "1.8",
    "sourceUrl": "其他影视92"
  },
  {
    "articleStyle": 0,
    "concurrentRate": "",
    "customOrder": 70,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": true,
    "header": "",
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "ruleArticles": "<js>\njson=[];\nif(baseUrl.match(/ /)){\nlist=baseUrl.replace(/http.*?wd=\\s*/,'').split(' ');\nfor(i in list){\nhref=list[i].match(/【(.*?)】/)[1];\ntext=list[i].match(/《(.*?)》/)[1];\nintro=list[i].match(/◎(.*?)◎/)[1];\nindex=list[i].match(/^(\\d+、\\d+、)/)?list[i].match(/^(\\d+、\\d+、)/)[1]:list[i].match(/^(.*?)【/)[1]\njson.push({text:text,src:href,intro:intro,index:index})\n}\n}\nJSON.stringify(json)</js>\n$.[*]",
    "ruleContent": "",
    "ruleDescription": "",
    "ruleImage": "@js:\"https://inisqw.gitee.io/rss/66.jpg\"",
    "ruleLink": "$.index\n@js:\nif(!result.match(/^http/) && !result.match(/\\d+、\\d+、/)){\nresult=\"https://www.coolapk.com/link?url=\"+encodeURIComponent(result)\n}else{result=result}",
    "ruleNextPage": "",
    "rulePubDate": "$.intro",
    "ruleTitle": "$.text",
    "singleUrl": false,
    "sortUrl": "万源::http://22.cn/?url=【】《》◎◎ https://inisqw.gitee.io/rss【】《关注微信公众号👉阅读加油👈》◎更多你懂滴订阅源抱回家◎ https://own.lanzouy.com/iAbFu0c92imj【】《amartshift书源/漫画源》◎11831◎ https://kaveys.lanzout.com/iusFA09k9u5e【】《免费观看vip影视的软件，已破解vip》◎密码:37z2◎ https://xn---fuliseecom-gt1t08px00hf5nbl2b.xn--fulisee-3v1q.com/?vinwd【】《第一福利导航》◎看了身体会变得奇怪◎ https://flowus.cn/cjk-sy/share/d62e3975-c3fb-4bfe-8631-553455e037c5【】《书源君书源订阅源更新啦》◎看了身体会变得亢奋◎",
    "sourceComment": "",
    "sourceGroup": "版本",
    "sourceIcon": "https://inisqw.gitee.io/rss/66.jpg",
    "sourceName": "1.9",
    "sourceUrl": "wy",
    "style": ""
  },
  {
    "articleStyle": 0,
    "customOrder": 71,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": false,
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "singleUrl": true,
    "sourceGroup": "版本",
    "sourceIcon": "",
    "sourceName": "2.0",
    "sourceUrl": "https://www.njttvylz.cc"
  },
  {
    "articleStyle": 1,
    "customOrder": 497,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": false,
    "header": "{\"User-Agent\":\"Mozilla/5.0 (Linux; Android 11; PCAM10 Build/RP1A.200720.011; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/100.0.4103.106 Mobile Safari/537.36\"} ",
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "loginUrl": "https://czy.yzfnb6.help/cn/home/web/index.php/vod/play/id/1177871/sid/1/nid/1.html",
    "ruleArticles": "[class=\"H5__content\"]@[class=\"video__wrap\"]@a",
    "ruleContent": "<!DOCTYPE html>\n<html lang=\"zh-CN\">\n<head>\n<meta charset=\"UTF-8\">\n<title>内容提取-双模版</title>\n\n<script src=\"https://code.jquery.com/jquery-3.6.0.min.js\"></script>\n<link rel=\"stylesheet\" href=\"https://cdnjs.cloudflare.com/ajax/libs/viewerjs/1.11.3/viewer.min.css\" />\n<script src=\"https://cdnjs.cloudflare.com/ajax/libs/viewerjs/1.11.3/viewer.min.js\"></script>\n<style>\n    body {font-family: Arial, sans-serif;font-size: 16px;}\n    #title, #page, #loading-status {margin: 0 auto;font-size: 20px;text-align: center;}\n    #description, #urls, #video-url, #video-sources, #messages {width: 100%;max-width: 800px;margin: 1.5px auto;font-size: 14px;text-align: left;word-wrap: break-word;white-space: pre-wrap;}\n    #text, #text :not(img), #text img + * {text-indent: 2em;width: 100%;font-size: 16px;line-height: 1.5em;margin-top: 0;margin-bottom: 0;word-wrap: break-word;white-space: pre-wrap;}\n    img, #text img {width: 100%;height: auto;display: block;margin-bottom: 1.5px;}\n    .flex-container {display: flex;justify-content: center;align-items: center;gap: 10px;margin: 1.5px 0;font-size: 14px;}\n    button, select {flex: 1 1 31%; padding: 3px;border: 1px solid #ccc;border-radius: 5px;box-sizing: border-box;cursor: pointer;background-color: #f9f9f9;transition: background-color 0.3s ease;margin: 1.5px;min-width: 0;font-size: 14px;}\n    #url-select, #video-source-select {flex: 1 1 100%; margin-left: 0;margin-right: 0;text-align: center;}\n    #video-element {width: 100%;height: auto;}\n    textarea {width: 100%;height: auto;min-height: 100px;box-sizing: border-box;resize: vertical;}\n    .error, .warn {color: red;}\n    #urls,#messages,#debug-info,#video-url,#video-container,#video-source-select,#images,#text {display:none;}\n</style>\n</head>\n<body>\n    <h3 id=\"title\">{{@@title@text||h1.0@text||h2.0@text||.title.0@text##高清在线观看|-国产剧| - 专享影视| - 热门高清|影视大全|海外华人|高清1080p|无广告影院|\\|}}</h3>\n    <p id=\"description\">{{@@.info.0@html||.jianjie@html}}</p>\n    <p id=\"page\">共<span id=\"total-pages\">1</span>页</p>\n    <p id=\"loading-status\" style=\"display:none;\"></p>\n    <div class=\"flex-container\" id=\"loading-buttons\" style=\"display:none;\">\n        <button id=\"prev-page-btn\">上一页</button>\n        <button id=\"next-page-btn\">下一页</button>\n        <button id=\"auto-load-btn\">自&nbsp;&nbsp;动</button>\n    </div>\n    <div class=\"flex-container\">\n        <select id=\"url-select\" style=\"display:none;\"></select>\n    </div>\n    <div class=\"flex-container\">\n        <button id=\"toggle-urls-btn\">显/隐网址</button>\n        <button id=\"toggle-messages-btn\">显/隐信息</button>\n        <button id=\"toggle-debug-btn\">显/隐调试</button>\n    </div>\n    <div id=\"urls\"></div>\n    <div id=\"messages\"></div>\n    <div id=\"debug-info\"></div>\n    <div id=\"video-url\"></div>\n    <div id=\"video-container\">\n        <video id=\"video-element\" controls preload=\"auto\" width=\"640\" height=\"264\">\n            <source id=\"video-source\" src=\"\" type=\"\">\n            您的浏览器不支持 video 标签。\n        </video>\n    </div>\n    <div class=\"flex-container\">\n        <select id=\"video-source-select\" onchange=\"updateVideoSource()\"></select>\n    </div>\n    <div id=\"images\"></div>\n    <div id=\"text\"></div>\n    <script>\nconst config = {    \n    videoSelector: 'body', // 视频选择器\n    imgSelector: '.gridlane-box-inside img', // 图片选择器\n    textSelector: '#content', // 文本选择器\n    debugSelector: '.player-wrapper', // 调试信息选择器\n    swapImageAttributes: false, // 是否交换图片属性\n    delayTime: 1500, // 延迟提取时间\n    retryDelayTime: 1500, // 重试加载延迟时间\n    maxLoadAttempts: 3, // 最大加载次数\n    autoLoading: false, // true自动模式，false单页模式\n    debugOnce: 0, // 只在特定索引输出一次调试信息\n         /* -网页拼接-*/    \n    totalPagesText: '{{@@.pager@li.-3@a@textNodes}}', // 总页码\n    urlSuffixToRemove: /\\.aspx$/, // 移除url后缀\n    pageUrlText: '{urlPrefix}p{i}.aspx', // 拼接URL模板        \n        /* -以上拼接模式（网址需要拼接）-*/\n        /* -上下分割线-*/\n        /* -以下列表模式（地址与目录对应，比如视频、漫画）-*/   \n    ListMode: true, // true网址列表模式，false网址拼接模式    \n    initialUrls: `{{@@#sort-item-5.0@a@href}}`, // 网址\n    initialUrlsName: `{{@@#sort-item-5.0@a@span@text}}`, // 网址名称\n    sourceurl: '', // 来源URL前缀\n};\n\nlet videoSources = [];\nlet loadAttempts = {};\nlet urls = [];\nlet imageBox;\nlet textBox;\nlet currentPageIndex = 0;\nlet canLoadNextPage = true;\nlet autoLoadInProgress = false;\n\n// 构建URL列表\nfunction buildUrls(totalPages, baseUrl) {\n    let initialUrlsArray = config.initialUrls.trim().split('\\n').filter(url => url.trim() !== '');\n    let initialUrlsNameArray = config.initialUrlsName.trim().split('\\n').filter(name => name.trim() !== '');\n\n    if (config.ListMode && initialUrlsArray.length > 0) {\n        if (initialUrlsArray.length !== initialUrlsNameArray.length) {\n            $('#messages').append(`<span class=\"warn\">警告：initialUrls 和 initialUrlsName 的长度不匹配。</span><br>`);\n        }\n\n        urls = initialUrlsArray.map(url => {\n            if (config.sourceurl && url.startsWith('/') && !/^https?:\\/\\//i.test(url)) {\n                return config.sourceurl.replace(/\\/$/, '') + url;\n            } else {\n                return url;\n            }\n        });\n\n        urls.forEach((url, index) => {\n            const name = initialUrlsNameArray[index] || `第 ${index + 1} 页`;\n            $('#url-select').append(`<option value=\"${index}\">${name}</option>`);\n            $('#urls').append(`<div>${name}: ${url}</div>`);\n        });\n    } else {\n        if (totalPages === 1) {\n            urls.push(baseUrl);\n        } else {\n            urls.push(baseUrl);\n            for (let i = 2; i <= totalPages; i++) {\n                urls.push(config.pageUrlText.replace('{urlPrefix}', baseUrl.replace(config.urlSuffixToRemove, '').replace(/\\/$/, '')).replace('{i}', i));\n            }\n        }\n\n        urls.forEach((url, index) => {\n            const name = `第 ${index + 1} 页`;\n            $('#url-select').append(`<option value=\"${index}\">${name}</option>`);\n            $('#urls').append(`<div>${name}: ${url}</div>`);\n        });\n    }\n\n    $('#total-pages').text(urls.length);\n    toggleNavigationButtons();\n}\n\nfunction normalizeUrl(url) {\n    if (typeof url!== 'string' ||!url.trim()) return '';\n    url = url.replace(/\\\\u[\\dA-F]{4}/gi, (match) => String.fromCharCode(parseInt(match.replace(/\\\\u/g, ''), 16)));\n    url = decodeURIComponent(url);\n    url = url.replace(/^http:\\/([^/])/, 'http://$1'); // 修正 http:/ 协议部分\n    url = url.replace(/^https:\\/([^/])/, 'https://$1'); // 修正 https:/ 协议部分\n    return url;\n}\n\n// 清空容器\nfunction clearContainers() {\n    $('#messages').empty();\n    $('#images').empty();\n    $('#text').empty();\n}\n\n// 更新图片的src属性\nfunction updateImageSrc(elements, shouldSwap) {\n    elements.each(function () {\n        const $this = $(this);\n        const attrsToUpdate = {};\n        if (shouldSwap) {\n            ['data-original', 'data-src', 'data-url'].forEach(attr => {\n                if ($this.attr(attr)) {\n                    attrsToUpdate['src'] = $this.attr(attr);\n                }\n            });\n        }\n        $this.attr(attrsToUpdate);\n    });\n    return elements;\n}\n\n// 切换导航按钮和选择框的显示\nfunction toggleNavigationButtons() {\n    if ($('#url-select option').length > 1  && !config.autoLoading) {\n        $('#loading-buttons').show();\n        $('#url-select').show();\n    } else {\n        $('#loading-buttons').hide();\n        $('#url-select').hide();\n    }\n}\n\n// 显示加载状态\nfunction showLoadingStatus(pageNumber) {\n    const selectedOption = $('#url-select option:selected').text();\n    $('#loading-status').text(`正在加载：${selectedOption}`).show();\n}\n\n// 隐藏加载状态\nfunction hideLoadingStatus() {\n    $('#loading-status').hide();\n}\n\n// 内容提取函数内容\nfunction loadContent(index) {\n    if (index < 0 || index >= urls.length || !canLoadNextPage) return;\n    canLoadNextPage = false;\n    currentPageIndex = index;\n    $('#url-select').val(index);\n    $('#messages').append(`<div>当前地址: <span class=\"warn\">${urls[index]}</span> </div>`);\n    if (autoLoadInProgress) {\n        showLoadingStatus(index + 1);\n    }\n    $.ajax({\n        url: urls[index],\n        type: 'GET',\n        success: function (data) {\n            try {\n                const $data = $(data);\n                let updatedHtmlContent = data.replace(/(['\"])(\\/\\/)(?!\\/)/g, '$1https://')\n                    .replace(/src=\"upload/gi, 'src=\"/upload')\n                    .replace(/style=[\"'][^'\"]+[\"']/gi, '')\n                    .replace(/\\\\\\//g, '/');\n                const parser = new DOMParser();\n                const doc = parser.parseFromString(updatedHtmlContent, \"text/html\");\n\n                  // 添加调试标签输出信息\n                if (config.debugOnce === index) {\n                    const debugElements = $(doc).find(config.debugSelector);\n                    if (debugElements.length > 0) {\n                        const debugContents = $('<pre>').html(debugElements.clone().wrapAll('<div/>').parent().html()).html();\n                        $('#debug-info').html(`<span class=\"warn\">调试信息: <textarea rows=\"10\" cols=\"80\">${debugContents}</textarea></span>`);\n                    } else {\n                        $('#debug-info').html(`<span class=\"warn\">调试信息: <textarea rows=\"10\" cols=\"80\">调试信息未提取到内容，请检查选择器！</textarea></span>`);\n                    }\n                }\n\n                // 方法1：video标签获取视频地址\n                const videoContents = $(doc).find(config.videoSelector);\n                const videoTags = $(videoContents).find('video');\n                videoTags.each(function () {\n                    const videosrc = $(this).attr('src') || $(this).attr('data-src') || $(this).attr('data-original') || '';\n                    if (videosrc) {\n                        videoSources.push(videosrc);\n                    }\n                });\n                \n                // 方法2：source标签获取视频地址\n                const sources = $(videoContents).find('source');\n                sources.each(function () {\n                    const sourceSrc = $(this).attr('src') || $(this).attr('data-src') || $(this).attr('data-original') || '';\n                    if (sourceSrc) {\n                        videoSources.push(sourceSrc);\n                    }\n                });\n                \n                // 方法3：正则表达式获取视频地址\n                const regex = /['\"]https?[^'<>\"]+\\.(m3u8|mp4|webm|ogg|flv|mp3|m4a|wav|ape|flac)['\"]/ig;\n                const matches = data.match(regex);\n                if (matches) {\n                    const uniqueMatches = matches.filter((value, idx, self) => self.indexOf(value) === idx);\n    videoSources = videoSources.concat(uniqueMatches.map((match) => {\n        // 使用replace删除引号\n                const urlWithoutQuotes = match.replace(/['\"]/g, '');\n                return normalizeUrl(urlWithoutQuotes);\n                          }));\n                }\n\n                videoSources = videoSources.map(src => normalizeUrl(src.replace(/\\\\+/g, '')));\n                videoSources = [...new Set(videoSources)];\n\n                if (videoSources.length > 0) {\n                    $('#messages').append(`<span>成功提取到视频，找到 ${videoSources.length} 个视频。</span><br>`);\n                    videoSources.forEach((src, idx) => {\n                        $('#messages').append(`<div>视频地址:<span class=\"warn\"> ${src}</span><br></div>`);\n                        $('#video-source-select').append(`<option value=\"${idx}\">视频源 ${idx + 1}</option>`);\n                    });\n                    \n                    if (videoSources.length == 1) {\n                        $('#video-container').show();\n                        $('#video-url').show();\n                        $('#video-source-select').hide();\n                        updateVideoSource(); // 自动更新视频源\n                    } else if (videoSources.length > 1) {\n                        $('#video-container').show();\n                        $('#video-url').show();\n                        $('#video-source-select').show();\n                        updateVideoSource(); // 默认选择第一个视频源\n                    } else {\n                        $('#video-container').hide();\n                        $('#video-url').hide();\n                        $('#video-source-select').hide();\n                    }\n                } else {\n                    $('#messages').append(`<span class=\"warn\">未找到视频源。</span><br>`);\n                    $('#video-container').hide();\n                    $('#video-url').hide();\n                    $('#video-source-select').hide();\n                }\n\n                // 标签获图片\n                const $imgContents = $(doc).find(config.imgSelector);\n                const shouldSwap = config.swapImageAttributes;\n                const newContents = updateImageSrc($imgContents.clone(), shouldSwap);\n                $('#images').append(newContents).show();\n                if (newContents.length > 0) {\n                    $('#messages').append(`<span>成功提取图片，共 ${newContents.length} 张。</span><br>`);\n                    newContents.each(function () {\n                        const imgSrc =$(this).attr('src') || $(this).attr('data-original') || $(this).attr('data-src') || $(this).attr('data-url');\n                        $('#messages').append(`<div>地址:<span class=\"warn\"> ${imgSrc}</span><br></div>`);\n                    });\n                } else {\n                    $('#messages').append(`<span class=\"warn\">未提取到图片。</span><br>`);\n                }\n\n                // 标签获图文\n                const textContents = $(doc).find(config.textSelector).map(function () {\n                    const $currentContents = $(this);\n                    $currentContents.find('img + br, script, video, source').remove();\n                    $currentContents.html($currentContents.html().replace(/>\\s+/gi, '>').replace(/<\\/?br\\s*([^>]*)\\s*\\/?>/gi, '\\n').replace(/\\n+/g, '\\n'));\n                    return $currentContents.html();\n                }).get().join('');\n                if (textContents.trim()) {\n                    $('#text').append(`<span>${textContents}</span><br>`).show();\n                    $('#messages').append(`<span>成功提取图文。</span><br>`);\n                } else {\n                    $('#messages').append(`<span class=\"warn\">未提取到图文。</span><br>`);\n                }\n                \n                \n                if (autoLoadInProgress && currentPageIndex < urls.length - 1) {\n                    setTimeout(() => { \n                        canLoadNextPage = true;\n                        loadContent(currentPageIndex + 1); \n                    }, config.delayTime);\n                } else {\n                    canLoadNextPage = true;\n                    if (autoLoadInProgress) {\n                        hideLoadingStatus();\n                    }\n                }\n            } catch (parseError) {\n                $('#messages').append(`<span class=\"error\">解析页面内容时发生错误: ${parseError.message}</span><br>`);\n                handleLoadFailure(urls, index);\n            } finally {\n                if (imageBox) imageBox.viewer.update();\n                if (textBox) textBox.viewer.update();\n            }\n        },\n        error: function (jqXHR, textStatus, errorThrown) {\n            let errorMessage = `内容加载失败: ${urls[index]}`;\n            switch (textStatus) {\n                case 'timeout':\n                    errorMessage += ', 请求超时';\n                    break;\n                case 'abort':\n                    errorMessage += ', 请求被取消';\n                    break;\n                case 'parsererror':\n                    errorMessage += ', 解析响应出错';\n                    break;\n                default:\n                    errorMessage += `, 状态码: ${jqXHR.status}, 错误信息: ${errorThrown}`;\n                    break;\n            }\n            $('#messages').append(`<span class=\"error\">${errorMessage}</span><br>`);\n            handleLoadFailure(urls, index);\n        }\n    });\n}\n\n// 处理加载失败的情况\nfunction handleLoadFailure(urls, index) {\n    if (!loadAttempts[urls[index]]) {\n        loadAttempts[urls[index]] = 1;\n    } else {\n        loadAttempts[urls[index]]++;\n    }\n    if (loadAttempts[urls[index]] <= config.maxLoadAttempts) {\n        const retryMessage = `第${index + 1}页加载失败，正在进行第${loadAttempts[urls[index]]}次加载！`;\n        $('#messages').append(`<span class=\"error\">${retryMessage}</span><br>`);\n        setTimeout(() => { \n            canLoadNextPage = true;\n            loadContent(index); \n        }, config.retryDelayTime);\n    } else {\n        const finalErrorMessage = `第${index + 1}页加载失败，已达到最大尝试次数(${config.maxLoadAttempts})！`;\n        $('#messages').append(`<span class=\"error\">${finalErrorMessage}</span><br>`);\n        if (autoLoadInProgress && currentPageIndex < urls.length - 1) {\n            setTimeout(() => { \n                canLoadNextPage = true;\n                loadContent(currentPageIndex + 1); \n            }, config.delayTime);\n        } else {\n            canLoadNextPage = true;\n            if (autoLoadInProgress) {\n                hideLoadingStatus();\n            }\n        }\n    }\n}\n\n// 更新视频源\nfunction updateVideoSource() {\n    const selectedIndex = parseInt(document.getElementById('video-source-select').value);\n    const selectedSource = videoSources[selectedIndex];\n    document.getElementById('video-url').textContent = `视频地址:\\n ${selectedSource}`;\n\n    // 设置 video-source 的 src 属性\n    const videoSourceElement = document.getElementById('video-source');\n    videoSourceElement.src = selectedSource;\n\n    // 更新 video 元素的 src 属性\n    const videoElement = document.getElementById('video-element');\n    videoElement.load();\n\n    // 添加调试信息\n    $('#messages').append(`<span>更新视频源为: ${selectedSource}</span><br>`);\n}\n\n// 函数执行主体\n$(document).ready(function () {\n    imageBox = document.getElementById('images');\n    textBox = document.getElementById('text');\n    if (imageBox && textBox) {\n        new Viewer(imageBox, { title: true, interval: 2000 });\n        new Viewer(textBox, { title: true, interval: 2000 });\n    }\n\n    const totalPagesText = config.totalPagesText;\n    const totalPages = parseInt(totalPagesText, 10) || 1;\n    const baseUrl = '{{baseUrl}}';\n    \n    clearContainers();\n    $('#urls').empty();\n    $('#debug-info textarea').empty();   \n    $('#video-url').empty().hide();\n    $('#video-container').hide();\n    $('#video-source-select').empty().hide();\n    \n    buildUrls(totalPages, baseUrl);\n\n    const urlSelect = document.getElementById('url-select');\n    if (urlSelect.options.length > 0) {\n        urlSelect.value = '0'; \n        \n        if (config.autoLoading) {\n            autoLoadInProgress = true;\n            for (let i = 0; i < urls.length; i++) {\n                loadContent(i);\n            }\n        } else {\n            loadContent(0);\n        }\n    } else {\n        loadContent(0);\n    }\n\n    $('#url-select').change(function () {\n        clearContainers();\n        const selectedIndex = parseInt($(this).val());\n        loadContent(selectedIndex);\n    });\n    $('#prev-page-btn').click(function () {\n        clearContainers();\n        if (currentPageIndex > 0) {\n            loadContent(currentPageIndex - 1);\n        }\n    });\n    $('#next-page-btn').click(function () {\n        clearContainers();\n        if (currentPageIndex < urls.length - 1) {\n            loadContent(currentPageIndex + 1);\n        }\n    });\n    $('#auto-load-btn').click(function () {\n        autoLoadInProgress = true;\n        showLoadingStatus(1); \n        for (let i = currentPageIndex + 1; i < urls.length; i++) {\n            loadContent(i);\n        }\n    });\n    $('#toggle-messages-btn').click(function () { $('#messages').toggle(); });\n    $('#toggle-urls-btn').click(function () { $('#urls').toggle(); });\n    $('#toggle-debug-btn').click(function () { $('#debug-info').toggle(); });\n});\n    </script>\n</body>\n</html>",
    "ruleImage": "img@src",
    "ruleLink": "a@href",
    "ruleNextPage": "page||text.下一页@href",
    "rulePubDate": "p.-1@text\n",
    "ruleTitle": "h3.-1@text",
    "singleUrl": false,
    "sortUrl": "搜索::https://czy.yzfnb6.help/cn/home/web/index.php/vod/search.html?wd={{source.getVariable()}}\n最新上传::/cn/home/web/index.php/label/new/page/{{page}}.html\n月排行::/cn/home/web/index.php/label/hot_month/page/{{page}}.html\n日排行::/cn/home/web/index.php/label/hot_day/page/{{page}}.html\n周排行::/cn/home/web/index.php/label/hot_week/page/{{page}}.html\n熟母少妇::/cn/home/web/index.php/vod/type/id/20/page/{{page}}.html\n网红直播::/cn/home/web/index.php/vod/type/id/21/page/{{page}}.html\n自拍偷拍::/cn/home/web/index.php/vod/type/id/22/page/{{page}}.html\n强奸乱伦::/cn/home/web/index.php/vod/type/id/23/page/{{page}}.html\n高清国产::/cn/home/web/index.php/vod/type/id/24/page/{{page}}.html\n韩国专区::/cn/home/web/index.php/vod/type/id/25/page/{{page}}.html\n日本有码::/cn/home/web/index.php/vod/type/id/26/page/{{page}}.html\n日本无码::/cn/home/web/index.php/vod/type/id/27/page/{{page}}.html\n欧美情色::/cn/home/web/index.php/vod/type/id/28/page/{{page}}.html\n动漫卡通::/cn/home/web/index.php/vod/type/id/29/page/{{page}}.html\n三级伦理::/cn/home/web/index.php/vod/type/id/30/page/{{page}}.html",
    "sourceComment": "By小新\n永久地址：https://bqm.avds8.com/g/\nhttps://rlblsm.yzfnb4.lat/cn/home/web/\nhttps://qrb.yzfnb3.ink/cn/home/web/\nhttps://qrb.yzfnb3.ink/cn/home/web/",
    "sourceGroup": "版本",
    "sourceIcon": "",
    "sourceName": "2.1得调试",
    "sourceUrl": "https://qrb.yzfnb3.ink"
  },
  {
    "articleStyle": 0,
    "coverDecodeJs": "java.createSymmetricCrypto(\"AES/CBC/NoPadding\",\"f5d965df75336270\",\"97b60394abc2fbe1\").decrypt(result)",
    "customOrder": 499,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": true,
    "header": "{\"User-Agent\":\"Mozilla/5.0 (Linux; U; Android 13; zh-Hans-CN; PFJM10 Build/TP1A.220905.001) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/135.0.4896.58 Quark/6.13.6.581 Mobile Safari/537.36\",\n\"Accept-Language\":\"zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7\"}",
    "lastUpdateTime": 1775586154133,
    "loadWithBaseUrl": true,
    "ruleArticles": "#body>.container>.row>div[role=\"main\"]>article:not(:has(meta[content=\"广告\"]))>a",
    "ruleContent": "<js>\nvar step1 = java.base64Decode('QGpzOg0KbGV0IHVybHMgPSBbXTsNCmxldCByZXN1bHRTdHIgPSBTdHJpbmcocmVzdWx0KTsNCg0KLy8g566A5YyW5o+Q5Y+WbTN1OA0KbGV0IGdldE0zdTggPSBmdW5jdGlvbigpIHsNCiAgICBsZXQgdXJsU2V0ID0gW107DQogICAgDQogICAgLy8gMS4g5LuOdmlkZW/moIfnrb7mj5Dlj5YNCiAgICBsZXQgdmlkZW9zID0gamF2YS5nZXRFbGVtZW50cygndmlkZW8nKTsNCiAgICBpZiAodmlkZW9zICYmIHZpZGVvcy5sZW5ndGggPiAwKSB7DQogICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmlkZW9zLmxlbmd0aDsgaSsrKSB7DQogICAgICAgICAgICBsZXQgdiA9IHZpZGVvc1tpXTsNCiAgICAgICAgICAgIGxldCBzcmMgPSBTdHJpbmcodi5hdHRyKCdzcmMnKSk7DQogICAgICAgICAgICBpZiAoc3JjLmluZGV4T2YoJy5tM3U4JykgPiAtMSkgew0KICAgICAgICAgICAgICAgIGlmICh1cmxTZXQuaW5kZXhPZihzcmMpID09PSAtMSkgew0KICAgICAgICAgICAgICAgICAgICB1cmxTZXQucHVzaChzcmMpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIH0NCiAgICANCiAgICAvLyAyLiDku45IVE1M5rqQ56CB5o+Q5Y+WDQogICAgbGV0IHJlZ2V4ID0gLyhodHRwcz86W14nIlxzXSo/XC5tM3U4W14nIlxzXSopL2c7DQogICAgbGV0IG1hdGNoOw0KICAgIHdoaWxlICgobWF0Y2ggPSByZWdleC5leGVjKHJlc3VsdFN0cikpICE9PSBudWxsKSB7DQogICAgICAgIGxldCB1cmwgPSBtYXRjaFsxXS5yZXBsYWNlKC9cXC9nLCAiIik7DQogICAgICAgIGlmICh1cmxTZXQuaW5kZXhPZih1cmwpID09PSAtMSkgew0KICAgICAgICAgICAgdXJsU2V0LnB1c2godXJsKTsNCiAgICAgICAgfQ0KICAgIH0NCiAgICANCiAgICByZXR1cm4gdXJsU2V0Ow0KfTsNCg0KLy8g5aSE55CG5YiG6ZuGDQppZiAoL+eCueaIkS8udGVzdChyZXN1bHQpICYmIC/mn6XnnIvor6bmg4UvLnRlc3QocmVzdWx0KSkgew0KICAgIGxldCBsaW5rcyA9IGphdmEuZ2V0RWxlbWVudHMoJ0BAI3Bvc3Q+YXJ0aWNsZT4ucG9zdC1jb250ZW50PnA+YScpOw0KICAgIGxldCB0ZW1wVXJscyA9IFtdOw0KICAgIA0KICAgIGlmIChsaW5rcyAmJiBsaW5rcy5sZW5ndGggPiAwKSB7DQogICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGlua3MubGVuZ3RoIC0gMTsgaSsrKSB7DQogICAgICAgICAgICBsZXQgaHJlZiA9IFN0cmluZyhsaW5rc1tpXS5hdHRyKCdocmVmJykpOw0KICAgICAgICAgICAgbGV0IGRvYyA9IFN0cmluZyhqYXZhLmFqYXgoc291cmNlLmtleSArIGhyZWYpKTsNCiAgICAgICAgICAgIGxldCBtYXRjaGVzID0gZG9jLm1hdGNoKC8oaHR0cHM/OlteJyJcc10qP1wubTN1OFteJyJcc10qKS9nKTsNCiAgICAgICAgICAgIGlmIChtYXRjaGVzKSB7DQogICAgICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBtYXRjaGVzLmxlbmd0aDsgaisrKSB7DQogICAgICAgICAgICAgICAgICAgIGxldCB1cmwgPSBtYXRjaGVzW2pdLnJlcGxhY2UoL1xcL2csICIiKTsNCiAgICAgICAgICAgICAgICAgICAgaWYgKHRlbXBVcmxzLmluZGV4T2YodXJsKSA9PT0gLTEpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBVcmxzLnB1c2godXJsKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIH0NCiAgICANCiAgICB1cmxzID0gdGVtcFVybHM7DQp9IGVsc2Ugew0KICAgIHVybHMgPSBnZXRNM3U4KCk7DQp9DQoNCi8vIOWOu+mHje+8iOWGjeasoeehruS/ne+8iQ0KbGV0IGZpbmFsVXJscyA9IFtdOw0KZm9yIChsZXQgaSA9IDA7IGkgPCB1cmxzLmxlbmd0aDsgaSsrKSB7DQogICAgbGV0IHVybCA9IHVybHNbaV07DQogICAgaWYgKHVybCAmJiB1cmwuaW5kZXhPZignLm0zdTgnKSA+IC0xICYmIGZpbmFsVXJscy5pbmRleE9mKHVybCkgPT09IC0xKSB7DQogICAgICAgIGZpbmFsVXJscy5wdXNoKHVybCk7DQogICAgfQ0KfQ0KdXJscyA9IGZpbmFsVXJsczsNCg0KLy8g566A5YyW5pKt5pS+5ZmoDQp2YXIgaHRtbCA9ICc8IURPQ1RZUEUgaHRtbD4nICsNCic8aHRtbD4nICsNCic8aGVhZD4nICsNCiAgICAnPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCI+JyArDQogICAgJzxzdHlsZT4nICsNCiAgICAgICAgJyogeyBib3gtc2l6aW5nOiBib3JkZXItYm94OyB9JyArDQogICAgICAgICdib2R5IHsgbWFyZ2luOiAwOyBwYWRkaW5nOiAyMHB4OyBiYWNrZ3JvdW5kOiAjZjBmMGYwOyBmb250LWZhbWlseTogQXJpYWwsIHNhbnMtc2VyaWY7IH0nICsNCiAgICAgICAgJy5jb250YWluZXIgeyBtYXgtd2lkdGg6IDEwMDBweDsgbWFyZ2luOiAwIGF1dG87IGJhY2tncm91bmQ6IHdoaXRlOyBib3JkZXItcmFkaXVzOiAxMHB4OyBvdmVyZmxvdzogaGlkZGVuOyBib3gtc2hhZG93OiAwIDJweCAxMHB4IHJnYmEoMCwwLDAsMC4xKTsgfScgKw0KICAgICAgICAnLmhlYWRlciB7IGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsICM2NjdlZWEgMCUsICM3NjRiYTIgMTAwJSk7IGNvbG9yOiB3aGl0ZTsgcGFkZGluZzogMTVweDsgdGV4dC1hbGlnbjogY2VudGVyOyBmb250LXNpemU6IDE2cHg7IGZvbnQtd2VpZ2h0OiBib2xkOyB9JyArDQogICAgICAgICcudmlkZW8td3JhcHBlciB7IHBvc2l0aW9uOiByZWxhdGl2ZTsgd2lkdGg6IDEwMCU7IHBhZGRpbmctdG9wOiA1Ni4yNSU7IC8qIDE2Ojkg5a696auY5q+UICovIGJhY2tncm91bmQ6ICMwMDA7IH0nICsNCiAgICAgICAgJyN2aWRlbyB7IHBvc2l0aW9uOiBhYnNvbHV0ZTsgdG9wOiAwOyBsZWZ0OiAwOyB3aWR0aDogMTAwJTsgaGVpZ2h0OiAxMDAlOyBvYmplY3QtZml0OiBjb250YWluOyB9JyArDQogICAgICAgICcuY29udHJvbHMgeyBkaXNwbGF5OiBmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47IGFsaWduLWl0ZW1zOiBjZW50ZXI7IHBhZGRpbmc6IDE1cHggMjBweDsgYmFja2dyb3VuZDogI2Y4ZjlmYTsgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNlZWU7IH0nICsNCiAgICAgICAgJy5uYXYtZ3JvdXAgeyBkaXNwbGF5OiBmbGV4OyBnYXA6IDEwcHg7IH0nICsNCiAgICAgICAgJ2J1dHRvbiB7IHBhZGRpbmc6IDEwcHggMjBweDsgYmFja2dyb3VuZDogIzAwN2JmZjsgY29sb3I6IHdoaXRlOyBib3JkZXI6IG5vbmU7IGJvcmRlci1yYWRpdXM6IDVweDsgY3Vyc29yOiBwb2ludGVyOyBmb250LXNpemU6IDE0cHg7IHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4zczsgfScgKw0KICAgICAgICAnYnV0dG9uOmhvdmVyIHsgYmFja2dyb3VuZDogIzAwNTZiMzsgfScgKw0KICAgICAgICAnYnV0dG9uOmRpc2FibGVkIHsgYmFja2dyb3VuZDogIzZjNzU3ZDsgY3Vyc29yOiBub3QtYWxsb3dlZDsgfScgKw0KICAgICAgICAnc2VsZWN0IHsgcGFkZGluZzogMTBweCAxNXB4OyBib3JkZXI6IDFweCBzb2xpZCAjZGRkOyBib3JkZXItcmFkaXVzOiA1cHg7IGZvbnQtc2l6ZTogMTRweDsgYmFja2dyb3VuZDogd2hpdGU7IG1pbi13aWR0aDogMTIwcHg7IH0nICsNCiAgICAgICAgJy5pbmZvIHsgdGV4dC1hbGlnbjogY2VudGVyOyBwYWRkaW5nOiAxMHB4OyBiYWNrZ3JvdW5kOiAjZjVmNWY1OyBjb2xvcjogIzY2NjsgZm9udC1zaXplOiAxNHB4OyB9JyArDQogICAgICAgICcuZnVsbHNjcmVlbi1idG4geyBwYWRkaW5nOiAxMHB4OyBiYWNrZ3JvdW5kOiAjMjhhNzQ1OyB9JyArDQogICAgICAgICcuZnVsbHNjcmVlbi1idG46aG92ZXIgeyBiYWNrZ3JvdW5kOiAjMjE4ODM4OyB9JyArDQogICAgICAgICdAbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHsnICsNCiAgICAgICAgICAgICdib2R5IHsgcGFkZGluZzogMTBweDsgfScgKw0KICAgICAgICAgICAgJy5jb250YWluZXIgeyBib3JkZXItcmFkaXVzOiA1cHg7IH0nICsNCiAgICAgICAgICAgICcuY29udHJvbHMgeyBmbGV4LWRpcmVjdGlvbjogY29sdW1uOyBnYXA6IDEwcHg7IH0nICsNCiAgICAgICAgICAgICcubmF2LWdyb3VwIHsgd2lkdGg6IDEwMCU7IGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsgfScgKw0KICAgICAgICAgICAgJ2J1dHRvbiwgc2VsZWN0IHsgd2lkdGg6IDEwMCU7IH0nICsNCiAgICAgICAgJ30nICsNCiAgICAnPC9zdHlsZT4nICsNCic8L2hlYWQ+JyArDQonPGJvZHk+JyArDQogICAgJzxkaXYgY2xhc3M9ImNvbnRhaW5lciI+JyArDQogICAgICAgICc8ZGl2IGNsYXNzPSJoZWFkZXIiPicgKw0KICAgICAgICAgICAgJzxzcGFuIGlkPSJjdXJyZW50Ij4xPC9zcGFuPiAvIDxzcGFuIGlkPSJ0b3RhbCI+JyArIHVybHMubGVuZ3RoICsgJzwvc3Bhbj4g6ZuGJyArDQogICAgICAgICc8L2Rpdj4nICsNCiAgICAgICAgJzxkaXYgY2xhc3M9InZpZGVvLXdyYXBwZXIiPicgKw0KICAgICAgICAgICAgJzx2aWRlbyBjb250cm9scyBhdXRvcGxheSBwbGF5c2lubGluZSBpZD0idmlkZW8iPicgKw0KICAgICAgICAgICAgICAgICc8c291cmNlIHNyYz0iJyArICh1cmxzWzBdIHx8ICcnKSArICciIHR5cGU9ImFwcGxpY2F0aW9uL3gtbXBlZ1VSTCI+JyArDQogICAgICAgICAgICAgICAgJ+aCqOeahOa1j+iniOWZqOS4jeaUr+aMgeinhumikeaSreaUvicgKw0KICAgICAgICAgICAgJzwvdmlkZW8+JyArDQogICAgICAgICc8L2Rpdj4nICsNCiAgICAgICAgJzxkaXYgY2xhc3M9ImNvbnRyb2xzIj4nICsNCiAgICAgICAgICAgICc8ZGl2IGNsYXNzPSJuYXYtZ3JvdXAiPicgKw0KICAgICAgICAgICAgICAgICc8YnV0dG9uIG9uY2xpY2s9ImNoYW5nZVZpZGVvKC0xKSIgaWQ9InByZXZCdG4iPuS4iuS4gOmbhjwvYnV0dG9uPicgKw0KICAgICAgICAgICAgICAgICc8c2VsZWN0IG9uY2hhbmdlPSJqdW1wVG9WaWRlbyh0aGlzLnZhbHVlKSIgaWQ9InZpZGVvU2VsZWN0Ij4nOw0KDQovLyDnlJ/miJDpgInpobkNCmZvciAobGV0IGkgPSAwOyBpIDwgdXJscy5sZW5ndGg7IGkrKykgew0KICAgIGh0bWwgKz0gJzxvcHRpb24gdmFsdWU9IicgKyBpICsgJyI+56ysICcgKyAoaSArIDEpICsgJyDpm4Y8L29wdGlvbj4nOw0KfQ0KDQpodG1sICs9ICc8L3NlbGVjdD4nICsNCiAgICAgICAgICAgICAgICAnPGJ1dHRvbiBvbmNsaWNrPSJjaGFuZ2VWaWRlbygxKSIgaWQ9Im5leHRCdG4iPuS4i+S4gOmbhjwvYnV0dG9uPicgKw0KICAgICAgICAgICAgJzwvZGl2PicgKw0KICAgICAgICAgICAgJzxidXR0b24gb25jbGljaz0idG9nZ2xlRnVsbHNjcmVlbigpIiBjbGFzcz0iZnVsbHNjcmVlbi1idG4iPuWFqOWxjzwvYnV0dG9uPicgKw0KICAgICAgICAnPC9kaXY+JyArDQogICAgICAgICc8ZGl2IGNsYXNzPSJpbmZvIj7mib7liLAgJyArIHVybHMubGVuZ3RoICsgJyDkuKrop4bpopHmupA8L2Rpdj4nICsNCiAgICAnPC9kaXY+JyArDQoNCiAgICAnPHNjcmlwdD4nICsNCiAgICAgICAgJ3ZhciB2aWRlb1VybHMgPSAnICsgSlNPTi5zdHJpbmdpZnkodXJscykgKyAnOycgKw0KICAgICAgICAndmFyIGN1cnJlbnRJbmRleCA9IDA7JyArDQogICAgICAgICd2YXIgdmlkZW8gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidmlkZW8iKTsnICsNCiAgICAgICAgJ3ZhciB2aWRlb1NlbGVjdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ2aWRlb1NlbGVjdCIpOycgKw0KICAgICAgICAndmFyIGN1cnJlbnRTcGFuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImN1cnJlbnQiKTsnICsNCiAgICAgICAgJ3ZhciB0b3RhbFNwYW4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidG90YWwiKTsnICsNCiAgICAgICAgJ3ZhciBwcmV2QnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInByZXZCdG4iKTsnICsNCiAgICAgICAgJ3ZhciBuZXh0QnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm5leHRCdG4iKTsnICsNCiAgICAgICAgJycgKw0KICAgICAgICAnZnVuY3Rpb24gdXBkYXRlVUkoKSB7JyArDQogICAgICAgICAgICAnY3VycmVudFNwYW4udGV4dENvbnRlbnQgPSBjdXJyZW50SW5kZXggKyAxOycgKw0KICAgICAgICAgICAgJ3RvdGFsU3Bhbi50ZXh0Q29udGVudCA9IHZpZGVvVXJscy5sZW5ndGg7JyArDQogICAgICAgICAgICAndmlkZW9TZWxlY3QudmFsdWUgPSBjdXJyZW50SW5kZXg7JyArDQogICAgICAgICAgICAncHJldkJ0bi5kaXNhYmxlZCA9IGN1cnJlbnRJbmRleCA9PT0gMDsnICsNCiAgICAgICAgICAgICduZXh0QnRuLmRpc2FibGVkID0gY3VycmVudEluZGV4ID09PSB2aWRlb1VybHMubGVuZ3RoIC0gMTsnICsNCiAgICAgICAgICAgICd2aWRlby5zcmMgPSB2aWRlb1VybHNbY3VycmVudEluZGV4XTsnICsNCiAgICAgICAgICAgICd2aWRlby5sb2FkKCk7JyArDQogICAgICAgICd9JyArDQogICAgICAgICcnICsNCiAgICAgICAgJ2Z1bmN0aW9uIGNoYW5nZVZpZGVvKGRpcmVjdGlvbikgeycgKw0KICAgICAgICAgICAgJ3ZhciBuZXdJbmRleCA9IGN1cnJlbnRJbmRleCArIGRpcmVjdGlvbjsnICsNCiAgICAgICAgICAgICdpZiAobmV3SW5kZXggPj0gMCAmJiBuZXdJbmRleCA8IHZpZGVvVXJscy5sZW5ndGgpIHsnICsNCiAgICAgICAgICAgICAgICAnY3VycmVudEluZGV4ID0gbmV3SW5kZXg7JyArDQogICAgICAgICAgICAgICAgJ3VwZGF0ZVVJKCk7JyArDQogICAgICAgICAgICAnfScgKw0KICAgICAgICAnfScgKw0KICAgICAgICAnJyArDQogICAgICAgICdmdW5jdGlvbiBqdW1wVG9WaWRlbyhpbmRleCkgeycgKw0KICAgICAgICAgICAgJ2N1cnJlbnRJbmRleCA9IHBhcnNlSW50KGluZGV4KTsnICsNCiAgICAgICAgICAgICd1cGRhdGVVSSgpOycgKw0KICAgICAgICAnfScgKw0KICAgICAgICAnJyArDQogICAgICAgICdmdW5jdGlvbiB0b2dnbGVGdWxsc2NyZWVuKCkgeycgKw0KICAgICAgICAgICAgJ2lmICghZG9jdW1lbnQuZnVsbHNjcmVlbkVsZW1lbnQpIHsnICsNCiAgICAgICAgICAgICAgICAnaWYgKHZpZGVvLnJlcXVlc3RGdWxsc2NyZWVuKSB7JyArDQogICAgICAgICAgICAgICAgICAgICd2aWRlby5yZXF1ZXN0RnVsbHNjcmVlbigpOycgKw0KICAgICAgICAgICAgICAgICd9IGVsc2UgaWYgKHZpZGVvLndlYmtpdFJlcXVlc3RGdWxsc2NyZWVuKSB7JyArDQogICAgICAgICAgICAgICAgICAgICd2aWRlby53ZWJraXRSZXF1ZXN0RnVsbHNjcmVlbigpOycgKw0KICAgICAgICAgICAgICAgICd9IGVsc2UgaWYgKHZpZGVvLm1velJlcXVlc3RGdWxsU2NyZWVuKSB7JyArDQogICAgICAgICAgICAgICAgICAgICd2aWRlby5tb3pSZXF1ZXN0RnVsbFNjcmVlbigpOycgKw0KICAgICAgICAgICAgICAgICd9JyArDQogICAgICAgICAgICAnfSBlbHNlIHsnICsNCiAgICAgICAgICAgICAgICAnaWYgKGRvY3VtZW50LmV4aXRGdWxsc2NyZWVuKSB7JyArDQogICAgICAgICAgICAgICAgICAgICdkb2N1bWVudC5leGl0RnVsbHNjcmVlbigpOycgKw0KICAgICAgICAgICAgICAgICd9IGVsc2UgaWYgKGRvY3VtZW50LndlYmtpdEV4aXRGdWxsc2NyZWVuKSB7JyArDQogICAgICAgICAgICAgICAgICAgICdkb2N1bWVudC53ZWJraXRFeGl0RnVsbHNjcmVlbigpOycgKw0KICAgICAgICAgICAgICAgICd9IGVsc2UgaWYgKGRvY3VtZW50Lm1vekNhbmNlbEZ1bGxTY3JlZW4pIHsnICsNCiAgICAgICAgICAgICAgICAgICAgJ2RvY3VtZW50Lm1vekNhbmNlbEZ1bGxTY3JlZW4oKTsnICsNCiAgICAgICAgICAgICAgICAnfScgKw0KICAgICAgICAgICAgJ30nICsNCiAgICAgICAgJ30nICsNCiAgICAgICAgJycgKw0KICAgICAgICAnLy8g5Yid5aeL5YyWJyArDQogICAgICAgICd1cGRhdGVVSSgpOycgKw0KICAgICAgICAnJyArDQogICAgICAgICcvLyDplK7nm5jlv6vmjbfplK4nICsNCiAgICAgICAgJ2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLCBmdW5jdGlvbihlKSB7JyArDQogICAgICAgICAgICAnaWYgKGUua2V5ID09PSAiQXJyb3dMZWZ0IikgY2hhbmdlVmlkZW8oLTEpOycgKw0KICAgICAgICAgICAgJ2Vsc2UgaWYgKGUua2V5ID09PSAiQXJyb3dSaWdodCIpIGNoYW5nZVZpZGVvKDEpOycgKw0KICAgICAgICAgICAgJ2Vsc2UgaWYgKGUua2V5ID09PSAiZiIgfHwgZS5rZXkgPT09ICJGIikgdG9nZ2xlRnVsbHNjcmVlbigpOycgKw0KICAgICAgICAnfSk7JyArDQogICAgICAgICcnICsNCiAgICAgICAgJy8vIOinhumikemUmeivr+WkhOeQhicgKw0KICAgICAgICAndmlkZW8uYWRkRXZlbnRMaXN0ZW5lcigiZXJyb3IiLCBmdW5jdGlvbigpIHsnICsNCiAgICAgICAgICAgICdjb25zb2xlLmxvZygi6KeG6aKR5Yqg6L296ZSZ6K+v77yM5bCd6K+V5YiH5o2i5Yiw5LiL5LiA5LiqIik7JyArDQogICAgICAgICAgICAnaWYgKGN1cnJlbnRJbmRleCA8IHZpZGVvVXJscy5sZW5ndGggLSAxKSB7JyArDQogICAgICAgICAgICAgICAgJ2N1cnJlbnRJbmRleCsrOycgKw0KICAgICAgICAgICAgICAgICd1cGRhdGVVSSgpOycgKw0KICAgICAgICAgICAgJ30nICsNCiAgICAgICAgJ30pOycgKw0KICAgICc8L3NjcmlwdD4nICsNCic8L2JvZHk+JyArDQonPC9odG1sPic7DQoNCmh0bWw7');\nvar step2 = java.getString(step1);\nresult = step2\n</js>",
    "ruleImage": "@js:\nvar text = java.getString('script@html');\nvar match = text.match(/loadBannerDirect\\('([^']+)'/);\nvar img = match ? match[1] : '';\nimg;",
    "ruleLink": "href",
    "ruleNextPage": "page",
    "rulePubDate": "{{@@.wraps@text}}{{@@.post-card-info span@text##\\n}}",
    "ruleTitle": "h2@text",
    "singleUrl": false,
    "sortUrl": "搜索::/search/{{source.getVariable()}}/{{page}}/\n首页::/page/{{page}}/\n今日看料::/category/24hcg/{{page}}/\n热门吃瓜::/category/rgtj/{{page}}/\n每日热瓜::/category/mrrg/{{page}}/\n反差女神::/category/fcns/{{page}}/\n学院热瓜::/category/xyrg/{{page}}/\n网红吃瓜::/category/whhl/{{page}}/\n每日大赛::/category/mrds/{{page}}/\n海角乱伦::/category/llsq/{{page}}/\n黑料大事::/category/hlda/{{page}}/\n撸友看片::/category/lydt/{{page}}/\n黑料杂谈::/category/hlzt/{{page}}/\nav解说::/category/avjs/{{page}}/\n禁播动漫::/category/mrst/{{page}}/\n性爱技巧::/category/wyxs/{{page}}/\n爽文短剧::/category/swdj/{{page}}/\n明星吃瓜::/category/mxbg/{{page}}/\n官场秘闻::/category/gcmw/{{page}}/\n学生::/search/学生/{{page}}/\n全部①::/<,page/{{page}}/>\n全部②::/page/3/\n全部③::/page/5/\n偷情::/search/偷情/{{page}}/\n白虎::/search/白虎/{{page}}/\n反差::/search/反差/{{page}}/\n极品::/search/极品/{{page}}/\n萝莉::/search/萝莉/{{page}}/\n00后::/search/00后/{{page}}/\n女同::/search/女同/{{page}}/\n双马尾::/search/双马尾/{{page}}/\n学院::/search/学院/{{page}}/\n高三::/search/高三/{{page}}/\n高中::/search/高中/{{page}}/\n少女::/search/少女/{{page}}/\n情趣::/search/情趣/{{page}}/\n自拍::/search/自拍/{{page}}/\n大学::/search/大学/{{page}}/\n大一::/search/大一/{{page}}/\n学妹::/search/学妹/{{page}}/\n校花::/search/校花/{{page}}/\n调教::/search/调教/{{page}}/\n女神::/search/女神/{{page}}/\n少妇::/search/少妇/{{page}}/\n巨乳::/search/巨乳/{{page}}/\n孕妇::/search/孕妇/{{page}}/\n口::/search/口交/{{page}}/\n精::/search/精/{{page}}/",
    "sourceGroup": "版本",
    "sourceIcon": "https://i1.wp.com/i.postimg.cc/wjL5myHr/kpptube-cc-3e997cb42a6b0f37af6c6a40866ba202.gif",
    "sourceName": "2.2",
    "sourceUrl": "https://wiki.cvgdpnvq.xyz/",
    "style": "iframe{\n\theight:600px\n}\ntitle{\n\tdisplay:block\n}"
  },
  {
    "articleStyle": 1,
    "concurrentRate": "",
    "customOrder": 500,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": true,
    "header": "{\n    'User-Agent': 'Mozilla/5.0 (Linux; Android 11; Pixel 3 XL Build/RQ3A.211001.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/102.0.4988.0 Mobile Safari/537.36 SearchCraft/3.9.2 (Baidu; P1 11) '\n}",
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "ruleArticles": "<js>\njson=[];\nif(baseUrl.match(/ /)){\nlist=baseUrl.replace(/http.*?wd=\\s*/,'').split(' ');\nfor(i in list){\nhref=list[i].match(/【(.*?)】/)[1];\ntext=list[i].match(/《(.*?)》/)[1];\nintro=list[i].match(/◎(.*?)◎/)[1];\nindex=list[i].match(/^(\\d+、\\d+、)/)?list[i].match(/^(\\d+、\\d+、)/)[1]:list[i].match(/^(.*?)【/)[1]\njson.push({text:text,src:href,intro:intro,index:index})\n}\n}\nJSON.stringify(json)</js>\n$.[*]",
    "ruleContent": "",
    "ruleImage": "$.src",
    "ruleLink": "$.index\n@js:\nif(!result.match(/^http/) && !result.match(/\\d+、\\d+、/)){\nresult=\"https://www.coolapk.com/link?url=\"+encodeURIComponent(result)\n}else{result=result}",
    "ruleNextPage": "",
    "rulePubDate": "$.intro",
    "ruleTitle": "$.text",
    "singleUrl": false,
    "sortUrl": "💠 导航::https://knowsex.net/【https://knowsex.net/sub/img/contraceptive.jpg】《知性两性健康》◎两性健康-开放式性教育网站◎ https://aiboy.cc/【https://aiboy.cc/uploadfile/2021/0612/20210612014920789.jpg】《爱男孩帅哥网》◎同志、图片、小说、电影、资讯◎ https://fulihttp.com/【https://xn---fuliaboutcom-h27w88qmr0i7zpx96b.fulistart.com/static/images/logo.svg】《第一福利导航》◎第一学术网😏◎ https://抖淫.com/【https://d.0tcsi.bar/favicon.ico】《抖淫》◎抖淫短视频◎ https://www.zztt35.com/【https://static.zztt87.com/usr/uploads/2022/05/1824266711.png】《黑料不打烊》◎网红黑料、吃瓜🍉｜https://xxxmmm.email/◎ https://141jj.com/【https://files.catbox.moe/v2m4l7.png】《141JJ》◎🚀VPN｜很全的成人網站列表◎ https://theporndude.com/zh【https://media.porndudecdn.com/includes/images/mobile-logo-r.svg】《PornDude》◎🚀VPN｜色情视频网站列表◎ https://mygaysites.com/【https://mygaysites.com/includes/images/mobilegaylogo.svg】《MyGaySites》◎🚀VPN｜同志色情网站聚合◎\n\n\n🌐 聚合::https://www.fuqpremium.com/zh/【https://www.fuqpremium.com/templates/fuqpremium/images/icon.png】《FreePornTubes》◎🚀VPN｜优质色情视频导航◎ https://www.fuq.com/zh/【https://www.fuq.com/templates/fuq/images/logo.svg】《Fuq》◎🚀VPN｜色情电影导航◎ https://www.tgtube.com/zh/【https://www.tgtube.com/templates/tgtube/images/logo.svg】《TGTube》◎🚀VPN｜人妖色情油管视频导航◎ https://www.forhertube.com/zh/【https://www.forhertube.com/templates/forhertube/images/logo.svg】《ForHerTube》◎🚀VPN｜适合女性的色情视频导航◎ https://www.ixxx.com/zh/【https://www.ixxx.com/templates/ixxx/images/logo.svg】《iXXX》◎🚀VPN｜色情电影导航◎ https://www.tubegalore.com/zh/【https://www.tubegalore.com/templates/tubegalore/images/logo.svg】《TubeGalore》◎🚀VPN｜色情电视导航◎ https://www.maturetube.com/zh/【https://www.maturetube.com/templates/maturetube/images/logo.svg】《MatureTube》◎🚀VPN｜辣妈、MILF、奶奶色情导航◎ https://www.gaymaletube.com/zh/【https://www.gaymaletube.com/templates/gaymaletube/images/logo.svg】《GayMaleTube》◎🚀VPN｜同性恋色情视频导航◎ https://www.porzo.com/zh/【https://www.porzo.com/templates/porzo/images/logo.svg】《PORZO》◎🚀VPN｜色情视频导航◎ https://www.dinotube.com/zh/【https://www.dinotube.com/templates/dinotube/images/logo.svg】《DinoTube》◎🚀VPN｜色情视频导航◎ https://www.lobstertube.com/zh/【https://www.lobstertube.com/templates/lobstertube/images/icon.png】《LobsterTube》◎🚀VPN｜性爱、电影、电视导航◎ https://www.tiava.com/zh/【】《Tiava》◎🚀VPN｜色情电影导航◎\n\n\n🎬 传媒::https://byym26.com/【https://s1.ax1x.com/2023/01/26/pSNmjD1.png】《水果派》◎成人影片解说节目◎ http://smyis.xyz/【http://smyis.xyz/Template/xms02b/img/logo.svg】《稻妻影视》◎日本AV视频◎ https://playav.tv/【】《PlayAV》◎亚洲高清影片◎ http://hhdyw.buzz/【http://hhdyw.buzz/template/c25//images/play-logo.png】《八点影院》◎食色大陆◎ https://www.aiwuav.xyz/index.php/label/new.html【https://www.aiwuav.xyz/template/aiw/favicon.ico】《爱污传媒》◎传媒视频聚合｜https://www.aiwu.info/◎ https://kvotr.cc/【https://kvotr.cc/template/mdapp.icu2/images/favicon.ico】《麻豆视频》◎海量高清VIP视频◎ https://www.saosss.com/latest-updates/【http://img1.baidu.com/it/u=3358000656,1590169644&fm=253&fmt=auto&app=138&f=JPEG】《886视频》◎传媒聚合◎ https://yelai.cf/【https://b2less.dongshouji.com/file/pic001/images/icons/jiuyaop/icon-512x512.png】《91自拍》◎高清AV资源◎ https://avhd1.com/【https://avhd1.com/img/logo_icon_avhd1.png】《HD高清AV》◎高清AV◎ https://mizhan.tv/【https://mizhan.tv/upload/site/20221018-1/a872dcc406ff00e088eccfcd60f72c85.png】《咪站HD》◎情色A片◎ https://zishijiaoxue3.xyz/【https://zishijiaoxue3.xyz/templates/theme2/images/loading.gif】《姿势教学》◎一夜夫妻◎ https://taoh2555.com/【】《桃红色界》◎教室诱惑、浴室激情◎ https://85videos.com/【https://85videos.com/template/85videos/images/pixel.png】《85Videos》◎日本AV◎\n\n\n🔞 成人①::https://集芳阁.com/【https://集芳阁.com/static/logo.svg】《集芳阁》◎集芳阁云搜◎ https://porn研究所.com/【https://porn研究所.com/img/logo.svg】《Porn研究所》◎福利视频◎ https://laowangyy.cc/【https://qq.com.xva06.xyz/static/images/logo.svg】《SEAV在线》◎成人视频◎ https://91av.pages.dev/【】《91AV聚合》◎视频导航◎ http://www.wangzhi.mom/【】《影库资源》◎视频导航◎ https://www.tkbcs8.life/【】《脱裤吧》◎https://tuoku9.com/◎\n\n\n🔞 成人②::https://www.shn789.com/【】《四虎影院》◎福利视频◎ https://qswyt.pw/【】《情色五月天》◎福利视频◎ https://7m01.tk/【】《萝莉姬》◎福利视频◎ https://97d77.xyz/【】《蔡萝莉》◎成人影院◎ https://8xx.live/【https://80dv.buzz/p/favicon-32x32.png】《拔插拔插》◎成人视频◎ https://zuixin.fy311.com/【】《风月同天》◎成人视频｜https://www.fyttdz.com/◎ https://www.avbus1.com/【】《AV巴士》◎成人视频◎ https://bkeib.xyz/【】《B影院》◎成人视频｜https://github.com/Bcinema/Btv◎ http://zhiyin202207.xyz/【】《知阴》◎成人视频｜http://HuiJiaDiZhi.com/◎ https://50dh.buzz/【】《5G影院》◎成人视频◎ https://www.69crtt.gq/【】《69成人天堂》◎亚洲成人视频◎ https://nbpp.buzz/【】《奶爸视频》◎成人视频◎ https://www.gcjxdz.xyz/【】《国产精选》◎成人视频◎ https://bi81.top/【】《Bi8.TV》◎福利视频◎ https://2.258porn.cf/【】《258Porn》◎成人AV◎ http://32den.com/【】《YouPorn》◎成人视频◎ https://www.xiaobi096.com/【】《蝌蚪窝》◎成人电影◎ http://www.aqdlt.com/【】《爱情岛论坛》◎亚洲品质自拍视频◎\n\n\n🚀 翻墙::https://po18.fans:1234/【https://po18.love:2345/template/conch/asset/img/load.gif】《Po18hub》◎激情视频导航｜https://po18av.vip/◎ https://www.xnxx.com/【】《XNXX》◎🚀VPN｜成人视频◎ https://zh.xhamster.com/【https://static-lvlt.xhcdn.com/xh-desktop/images/logo/logo.svg】《xHamster》◎🚀VPN｜成人视频◎ https://www.xvideos.com/【https://static-ss.xvideos-cdn.com/v3/img/skins/default/xvideos.com.svg】《XVIDEOS》◎🚀VPN｜成人视频◎ https://cn.pornhub.com/【https://ei.phncdn.com/www-static/images/pornhub_logo_straight.svg】《PornHub》◎🚀VPN｜色情视频及性爱影片◎ https://jable.tv/【】《Jable》◎🚀VPN｜日本高清AV｜https://alldayj.com/◎ https://netflav.com/【https://netflav.com/static/assets/logo.svg】《Netflav》◎🚀VPN｜日本成人电影◎\n\n\n🈲 伦理::https://www.72dy.com/【https://static.tvcache.com//icon/72dy/favicon.png】《72电影》◎高清伦理◎ https://www.2345ti.com/【】《235影视》◎经典理伦片◎ https://vip.eeussjt.com/【】《EEUSS影院》◎快播电影、伦理◎ https://伦理小站.com/【https://伦理小站.com/statics/img/logo.svg】《韩三伦理小站》◎伦理影片◎\n\n\n🔥 耽影::https://www.fu210.top/【】《爱妖灵》◎腐剧、耽美、泰剧暖光影视官网◎ https://www.bl210.top/【】《曙光影视》◎腐剧、耽美、泰剧暖光影视官网◎ https://www.tj8.top/【】《泰剧网》◎腐剧、耽美、泰剧暖光影视官网◎ https://www.bttwoo.com/【】《两个BT》◎同性｜https://www.bttwo.vip/◎ https://g.manmankan.com/【】《漫漫看》◎男同影视大全◎\n\n\n🎨 漫画::https://漫香阁.com/【https://漫香阁.com/favicon.ico】《漫香阁》◎成人H漫画◎ 【】《》◎韩国、日本漫画◎",
    "sourceComment": "",
    "sourceGroup": "版本",
    "sourceIcon": "天",
    "sourceName": "2.3",
    "sourceUrl": "其他影视"
  },
  {
    "articleStyle": 0,
    "customOrder": 501,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": false,
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "ruleArticles": "html",
    "ruleContent": "class.waterfall@html",
    "ruleLink": "html",
    "ruleTitle": "text",
    "singleUrl": false,
    "sourceGroup": "版本",
    "sourceIcon": "天",
    "sourceName": "2.4",
    "sourceUrl": "https://xn---50ppiccom-xr7r588tmbm.www-50ppic.com/?fuli.one"
  },
  {
    "articleStyle": 2,
    "customOrder": 502,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": false,
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "ruleArticles": "ul@li",
    "ruleContent": "<!DOCTYPE html>\r\n<html>\r\n\r\n<head>\r\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0\">\r\n    <link rel=\"stylesheet\" href=\"https://cdn.bootcdn.net/ajax/libs/viewerjs/1.10.1/viewer.min.css\">\r\n    <script src=\"https://cdn.bootcdn.net/ajax/libs/viewerjs/1.10.1/viewer.min.js\"></script>\r\n    <script src=\"http://libs.baidu.com/jquery/2.0.0/jquery.min.js\"></script>\n    {{@@tag.title@html}}\r\n</head>\r\n\r\n<body>\r\n    <h3>{{@@.h@tag.h1@text}}</h3>\r\n    <div id=\"box\">{{@@id.picg@tag.img@html}}</div>\r\n    <div id=\"loads\">加载中 </div>\r\n    <script>\r\n        var loads;\r\n        $(document).ready(function () {\r\n            var box = document.getElementById(\"box\");\r\n            loads = document.getElementById(\"loads\");\r\n            new Viewer(box, { title: false, interval: 3000 })\r\n            var i = 2;\r\n            var page = {{@@class.pagelist.0@tag.a.-2@textNodes##\\n}};\r\n            var url = \"{{baseUrl.replace('.html','_')}}\";\r\n            new IntersectionObserver(entries => {\r\n                if (entries[0].intersectionRatio) {\r\n                    if (entries[0].intersectionRatio <= 0) return;\r\n                    for (var j = 0; j < 1; j++) {\r\n                        fetchHtml(i, page, url);\r\n                        i += 1;\r\n                    }\r\n                }\r\n            }).observe(loads)\r\n        });\r\n\r\n\r\n        function fetchHtml(i, page, url) {\n        \t\r\n            if (i <= page) {\r\n                nurl = url + i + '.html';\r\n                $.ajax({\r\n                    url: nurl,\r\n                    dataType: 'html',\r\n                    success: function (html) {\r\n                        $('#box').append('<h5>' + (i) + '->' + (page) + '</h5>');\r\n                        $('#box').append($(html).find('p a img'));\r\n                        box.viewer.update();\r\n                    },\r\n                    error: function (xhr) { }\r\n                });\r\n            } else {\r\n                $('#loads').html(\"\");\r\n            }\r\n        }\r\n    </script>\r\n</body>\r\n\r\n</html>",
    "ruleImage": "img@src",
    "ruleLink": "a@href",
    "ruleNextPage": "page",
    "ruleTitle": "class.title@text",
    "singleUrl": true,
    "sortUrl": "套图::http://www.sytuk.com/shey/yingtiiurm/1_{{page}}.html\n\n日韩::http://www.sytuk.com/shey/yingtiiurm/2_{{page}}.html\n\n内衣::http://www.sytuk.com/shey/yingtiiurm/9_{{page}}.html\n\n萌妹::http://www.sytuk.com/shey/yingtiiurm/11_{{page}}.html\n\n精品::http://www.sytuk.com/shey/yingtiiurm/18_{{page}}.html\n\n高清::http://www.sytuk.com/shey/yingtiiurm/24_{{page}}.html\n\n无圣光::http://www.sytuk.com/shey/yingtiiurm/25_{{page}}.html",
    "sourceComment": "斧头帮全体同仁恭迎火云邪神，来根华子波",
    "sourceGroup": "版本",
    "sourceIcon": "天",
    "sourceName": "2.5",
    "sourceUrl": "http://www.sytuk.com/",
    "style": "/*标题相关*/\r\nh3{text-align:center}\r\nh6{margin-bottom:0}\r\nimg{width:100%}\nh5{margin-bottom:0;padding-left:5;}"
  },
  {
    "articleStyle": 3,
    "customOrder": 504,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": true,
    "header": "{\n\t\"User-Agent\": \"Mozilla/5.0 (Linux; Android 9) Mobile Safari/537.36\",\"referer\": \"{{baseUrl}}\"\n\t}",
    "jsLib": "let search = \"https://dns.jingluo.love/2025/68a878e00d302.jpg\";",
    "lastUpdateTime": 1775586135304,
    "loadWithBaseUrl": true,
    "ruleArticles": ".pornkvideos",
    "ruleContent": "<!DOCTYPE html>\n<html lang=\"zh-CN\">\n<head>\n<meta charset=\"UTF-8\">\n<title>内容提取</title>\n<!-- v2025.05.10 -->\n\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n<script src=\"https://code.jquery.com/jquery-3.6.0.min.js\"></script>\n<link rel=\"stylesheet\" href=\"https://cdnjs.cloudflare.com/ajax/libs/viewerjs/1.11.3/viewer.min.css\" />\n<script src=\"https://cdnjs.cloudflare.com/ajax/libs/viewerjs/1.11.3/viewer.min.js\"></script>\n<style>\n    body { font-family: Arial, sans-serif; font-size: 16px; }\n    #title, #page, #loading-status { margin: 0 auto; font-size: 20px; text-align: center; }\n    #description, #urls, #video-url, #video-sources, #messages { width: 100%; max-width: 800px; margin: 1.5px auto; font-size: 14px; text-align: left; word-wrap: break-word; white-space: pre-wrap; }\n    #text, #text :not(img), #text img + * { text-indent: 2em; width: 100%; font-size: 16px; line-height: 1.5em; margin-top: 0; margin-bottom: 0; word-wrap: break-word; white-space: pre-wrap; }\n    img, #text img { width: 100%; height: auto; display: block; margin-bottom: 1.5px; }\n    .flex-container { display: flex; justify-content: center; align-items: center; gap: 10px; margin: 1.5px 0; font-size: 14px; }\n    button, select { flex: 1 1 31%; padding: 3px; border: 1px solid #ccc; border-radius: 5px; box-sizing: border-box; cursor: pointer; background-color: #f9f9f9; transition: background-color 0.3s ease; margin: 1.5px; min-width: 0; font-size: 14px; }\n    #url-select, #video-source-select { flex: 1 1 100%; margin-left: 0; margin-right: 0; text-align: center; }\n    #video-element { width: 100%; height: auto; }\n    textarea { width: 100%; height: auto; min-height: 100px; box-sizing: border-box; resize: vertical; }\n    .error, .warn { color: red; }\n</style>\n</head>\n<body>\n    <h3 id=\"title\">{{@@title@text||h1.0@text||h2.0@text||.title.0@text}}</h3>\n    <p id=\"description\">{{@@.info.0@html||.jianjie@html}}</p>\n    <p id=\"page\" style=\"display:none;\">共<span id=\"total-pages\">1</span>页</p>\n    <p id=\"loading-status\" style=\"display:none;\"></p>\n\n    <div class=\"flex-container\" id=\"loading-buttons\" style=\"display:none;\">\n        <button id=\"prev-page-btn\">上一页</button>\n        <button id=\"next-page-btn\">下一页</button>\n        <button id=\"auto-load-btn\">自&nbsp;&nbsp;动</button>\n    </div>\n    \n    <div class=\"flex-container\">\n        <select id=\"url-select\" style=\"display:none;\"></select>\n    </div>\n    \n    <div class=\"flex-container\">\n        <button id=\"toggle-urls-btn\">显/隐网址</button>\n        <button id=\"toggle-messages-btn\">显/隐信息</button>\n        <button id=\"toggle-debug-btn\">显/隐调试</button>\n    </div>\n    <div id=\"urls\"></div>\n    <div id=\"messages\"></div>\n    <div id=\"debug-info\"></div>\n    <div id=\"video-url\"></div>\n    <div id=\"video-container\" style=\"display: none;\">\n        <video id=\"video-element\" controls preload=\"auto\" width=\"640\" height=\"264\">\n            <source id=\"video-source\" src=\"\" type=\"\">您的浏览器不支持 video 标签。\n        </video>\n    </div>\n    <div class=\"flex-container\" id=\"video-source-container\" style=\"display: none;\">\n        <select id=\"video-source-select\" onchange=\"updateVideoSource()\"></select>\n    </div>\n    <div id=\"images\"></div>\n    <div id=\"text\"></div>\n\n    <script>\n        // 配置对象，包含各种选择器、延迟时间等配置项\n        const config = {    \n            videoSelector: 'body', // 视频选择器\n            imgSelector: '.gridlane-box-inside img,.photos figure img,.content p img', // 图片选择器\n            textSelector: '#content', // 文本选择器\n            debugSelector: '#content, .page, .pager, .content, script', // 调试信息选择器\n            swapImageAttributes: false, // 是否交换图片属性\n            delayTime: 1500, // 延迟提取时间\n            retryDelayTime: 1500, // 重试加载延迟时间\n            maxLoadAttempts: 3, // 最大加载次数\n            autoLoading: false, // true自动模式，false单页模式\n            debugOnce: 0, // 只在特定索引输出一次调试信息\n            totalPagesText: '{{@@.page.0@a.-2@textNodes}}', // 总页码\n            urlSuffixToRemove: /\\.html$/, // 移除url后缀\n            pageUrlText: '{urlPrefix}_{i}.html', // 拼接URL模板        \n            ListMode: true, // true网址列表模式，false网址拼接模式    \n            initialUrls: `{{@@#sort-item-5.0@a@href}}`, // 网址\n            initialUrlsName: `{{@@#sort-item-5.0@a@span@text}}`, // 网址名称\n            sourceurl: '', // 来源URL前缀\n        };\n\n        let videoSources = []; // 存储视频源数组\n        let loadAttempts = {}; // 记录每个URL的加载尝试次数\n        let urls = []; // 存储所有页面的URL\n        let imageBox;\n        let textBox;\n        let currentPageIndex = 0; // 当前页面索引\n        let canLoadNextPage = true; // 控制是否可以加载下一页\n        let autoLoadInProgress = false; // 自动加载状态\n\n        // 构建URL列表\n        function buildUrls(totalPages, baseUrl) {\n            let initialUrlsArray = config.initialUrls.trim().split('\\n').filter(url => url.trim() !== '');\n            let initialUrlsNameArray = config.initialUrlsName.trim().split('\\n').filter(name => name.trim() !== '');\n\n            if (config.ListMode && initialUrlsArray.length > 0) {\n                if (initialUrlsArray.length !== initialUrlsNameArray.length) {\n                    $('#messages').append(`<span class=\"warn\">警告：initialUrls 和 initialUrlsName 的长度不匹配。</span><br>`);\n                }\n\n                urls = initialUrlsArray.map(url => {\n                    if (config.sourceurl && url.startsWith('/') && !/^https?:\\/\\//i.test(url)) {\n                        return config.sourceurl.replace(/\\/$/, '') + url;\n                    } else {\n                        return url;\n                    }\n                });\n\n                urls.forEach((url, index) => {\n                    const name = initialUrlsNameArray[index] || `第 ${index + 1} 页`;\n                    $('#url-select').append(`<option value=\"${index}\">${name}</option>`);\n                    $('#urls').append(`<div>${name}: ${url}</div>`);\n                });\n            } else {\n                if (totalPages === 1) {\n                    urls.push(baseUrl);\n                } else {\n                    urls.push(baseUrl);\n                    for (let i = 2; i <= totalPages; i++) {\n                        urls.push(config.pageUrlText.replace('{urlPrefix}', baseUrl.replace(config.urlSuffixToRemove, '').replace(/\\/$/, '')).replace('{i}', i));\n                    }\n                }\n\n                urls.forEach((url, index) => {\n                    const name = `第 ${index + 1} 页`;\n                    $('#url-select').append(`<option value=\"${index}\">${name}</option>`);\n                    $('#urls').append(`<div>${name}: ${url}</div>`);\n                });\n            }\n\n            $('#total-pages').text(urls.length);\n            toggleNavigationButtons();\n            toggleTotalPagesDisplay();\n        }\n\n        // 规范化URL\n        function normalizeUrl(url) {\n            if (typeof url !== 'string' || !url.trim()) {\n                return '';\n            }\n            const match = url.match(/['\"](.*?)['\"]/);\n            if (match && match[1]) {\n                url = match[1];\n            }\n\n            function processUrl(str) {\n                str = str.trim();\n                str = str.replace(/\\\\u[\\dA-F]{4}/gi, match => String.fromCharCode(parseInt(match.replace(/\\\\u/g, ''), 16)));\n                str = decodeURIComponent(str);\n                str = str.replace(/^http:\\/([^/])/, 'http://$1');\n                str = str.replace(/^https:\\/([^/])/, 'https://$1');\n                return str;\n            }\n            return processUrl(url);\n        }\n\n        // 清空容器内容\n        function clearContainers() {\n            $('#messages').empty();\n            $('#images').empty();\n            $('#text').empty();\n        }\n\n        // 更新图像源\n        function updateImageSrc(elements, shouldSwap) {\n            elements.each(function () {\n                const $this = $(this);\n                const attrsToUpdate = {};\n                if (shouldSwap) {\n                    ['data-original', 'data-src', 'data-url'].forEach(attr => {\n                        if ($this.attr(attr)) {\n                            attrsToUpdate['src'] = $this.attr(attr);\n                        }\n                    });\n                }\n                $this.attr(attrsToUpdate);\n            });\n            return elements;\n        }\n\n        // 切换导航按钮显示状态\n        function toggleNavigationButtons() {\n            if ($('#url-select option').length > 1 && !config.autoLoading) {\n                $('#loading-buttons').show();\n                $('#url-select').show();\n            } else {\n                $('#loading-buttons').hide();\n                $('#url-select').hide();\n            }\n        }\n\n        // 显示加载状态\n        function showLoadingStatus(pageNumber) {\n            const selectedOption = $('#url-select option:selected').text();\n            $('#loading-status').text(`正在加载：${selectedOption}`).show();\n        }\n\n        // 隐藏加载状态\n        function hideLoadingStatus() {\n            $('#loading-status').hide();\n        }\n\n        // 加载指定索引的内容\n        function loadContent(index) {\n            if (index < 0 || index >= urls.length || !canLoadNextPage) return;\n            canLoadNextPage = false;\n            currentPageIndex = index;\n            $('#url-select').val(index);\n            $('#messages').append(`<div>当前地址: <span class=\"warn\">${urls[index]}</span></div>`);\n            if (autoLoadInProgress) {\n                showLoadingStatus(index + 1);\n            }\n            $.ajax({\n                url: urls[index],\n                type: 'GET',\n                success: function (data) {\n                    try {\n                    const $data = $(data);\n                    let updatedHtmlContent = data.replace(/(['\"])(\\/\\/)(?!\\/)/g, '$1https://')\n                        .replace(/src=\"upload/gi, 'src=\"/upload')\n                        .replace(/style=[\"'][^'\"]+[\"']/gi, '')\n                        .replace(/\\\\\\//g, '/');\n                    const parser = new DOMParser();\n                    const doc = parser.parseFromString(updatedHtmlContent, \"text/html\");\n\n                    if (config.debugOnce === index) {\n                        const debugElements = $(doc).find(config.debugSelector);\n                        if (debugElements.length > 0) {\n                            const debugContents = $('<pre>').html(debugElements.clone().wrapAll('<div/>').parent().html()).html();\n                            $('#debug-info').html(`<span class=\"warn\">调试信息: <textarea rows=\"10\" cols=\"80\">${debugContents}</textarea></span>`);\n                        } else {\n                            $('#debug-info').html(`<span class=\"warn\">调试信息: <textarea rows=\"10\" cols=\"80\">调试信息未提取到内容，请检查选择器！</textarea></span>`);\n                        }\n                    }\n                    // 方法1：提取视频\n                    const videoSources1 = [];\n                    const videoContents = $(doc).find(config.videoSelector);\n                    const videoTags = $(videoContents).find('video, source');\n                    videoTags.each(function() {\n                        const videosrc = $(this).attr('src') || \n                                     $(this).attr('data-src') || \n                                     $(this).attr('data-original') || '';\n                        \n                        if (videosrc) {\n                            videoSources1.push(videosrc);\n                        }\n                    });\n                    //反馈\n                    if (videoSources1.length > 0) {\n                        $('#messages').append(`<span>方法1，找到 ${videoSources1.length} 个视频。</span><br>`);\n                    }\n\n                    // 方法2：正则提取视频\n                    const regex = /['\"]https?[^'<>\"]+(m3u8|mp4|webm|ogg|flv|mp3|m4a|wav|ape|flac)([^'<>\"]+)?['\"]/gi;\n                    const matches = data.match(regex);\n                    const videoSources2 = [];\n\n                    if (matches) {\n                        const uniqueMatches = [...new Set(matches)];\n                    \n                        uniqueMatches.forEach(match => {\n                            const normalizedSrc = normalizeUrl(match.replace(/['\"]/g, ''));\n                            videoSources2.push(normalizedSrc);\n                        });\n                    }\n                    //反馈\n                    if (videoSources2.length > 0) {\n                        $('#messages').append(`<span>方法2，找到 ${videoSources2.length} 个视频。</span><br>`);\n                    }\n\n                    // 合并两种方法的结果\n                    videoSources = [...videoSources1, ...videoSources2];\n\n                    // 去重并标准化 URL\n                    const imageExtensions = /\\.(jpg|jpeg|png|gif|bmp|svg)$/i;\n\n                    videoSources = videoSources\n                                  .map(src => normalizeUrl(src.replace(/\\\\+/g, '')))\n                                  .filter(src => src) // 过滤空值\n                                  .filter(src => !imageExtensions.test(src)); // 移除图片地址\n                        \n                    videoSources = [...new Set(videoSources)];// 去重\n\n                    // 显示最终结果\n                    $('#messages').append(`<span>总共找到 ${videoSources.length} 个视频。</span><br>`);\n\n                    if (videoSources.length > 0) {\n                        $('#messages').append(`<span>成功提取到视频，找到 ${videoSources.length} 个视频。</span><br>`);\n                        videoSources.forEach((src, idx) => {\n                            $('#messages').append(`<div>视频地址:<span class=\"warn\"> ${src}</span><br></div>`);\n                            $('#video-source-select').append(`<option value=\"${idx}\">视频源 ${idx + 1}</option>`);\n                        });\n                    \n                        if (videoSources.length == 1) {\n                            $('#video-container').show();\n                            $('#video-url').show();\n                            $('#video-source-container').hide();\n                            updateVideoSource();\n                        } else if (videoSources.length > 1) {\n                            $('#video-container').show();\n                            $('#video-url').show();\n                            $('#video-source-container').show();\n                            updateVideoSource();\n                        } else {\n                            $('#video-container').hide();\n                            $('#video-url').hide();\n                            $('#video-source-container').hide();\n                        }\n                    } else {\n                        $('#messages').append(`<span class=\"warn\">未找到视频源。</span><br>`);\n                        $('#video-container').hide();\n                        $('#video-url').hide();\n                        $('#video-source-container').hide();\n                    }\n\n                    //提取图片\n                    const $imgContents = $(doc).find(config.imgSelector);\n                    const shouldSwap = config.swapImageAttributes;\n                    const newContents = updateImageSrc($imgContents.clone(), shouldSwap);\n                    $('#images').append(newContents).show();\n                    if (newContents.length > 0) {\n                        $('#messages').append(`<span>成功提取图片，共 ${newContents.length} 张。</span><br>`);\n                        newContents.each(function () {\n                            const imgSrc = $(this).attr('src') || $(this).attr('data-original') || $(this).attr('data-src') || $(this).attr('data-url');\n                            $('#messages').append(`<div>地址:<span class=\"warn\"> ${imgSrc}</span><br></div>`);\n                        });\n                    } else {\n                        $('#messages').append(`<span class=\"warn\">未提取到图片。</span><br>`);\n                    }\n\n                    //提取图片和文本\n                    const textContents = $(doc).find(config.textSelector).map(function () {\n                        const $currentContents = $(this);\n                        $currentContents.find('img + br, script, video, source, iframe').remove();\n                        $currentContents.html($currentContents.html().replace(/>\\s+/gi, '>').replace(/<\\/?br\\s*([^>]*)\\s*\\/?>/gi, '\\n').replace(/\\n+/g, '\\n'));\n                        return $currentContents.html();\n                    }).get().join('');\n                    if (textContents.trim()) {\n                        $('#text').append(`<span>${textContents}</span><br>`).show();\n                        $('#messages').append(`<span>成功提取图文。</span><br>`);\n                    } else {\n                        $('#messages').append(`<span class=\"warn\">未提取到图文。</span><br>`);\n                    }\n\n                    if (autoLoadInProgress && currentPageIndex < urls.length - 1) {\n                        setTimeout(() => { \n                            canLoadNextPage = true;\n                            loadContent(currentPageIndex + 1); \n                        }, config.delayTime);\n                    } else {\n                        canLoadNextPage = true;\n                        if (autoLoadInProgress) {\n                            hideLoadingStatus();\n                        }\n                    }\n                } catch (parseError) {\n                    $('#messages').append(`<span class=\"error\">解析页面内容时发生错误: ${parseError.message}</span><br>`);\n                    handleLoadFailure(urls, index);\n                } finally {\n                    if (imageBox) imageBox.viewer.update();\n                    if (textBox) textBox.viewer.update();\n                }\n            },\n            error: function (jqXHR, textStatus, errorThrown) {\n                let errorMessage = `内容加载失败: ${urls[index]}`;\n                switch (textStatus) {\n                    case 'timeout':\n                        errorMessage += ', 请求超时';\n                        break;\n                    case 'abort':\n                        errorMessage += ', 请求被取消';\n                        break;\n                    case 'parsererror':\n                        errorMessage += ', 解析响应出错';\n                        break;\n                    default:\n                        errorMessage += `, 状态码: ${jqXHR.status}, 错误信息: ${errorThrown}`;\n                        break;\n                }\n                $('#messages').append(`<span class=\"error\">${errorMessage}</span><br>`);\n                handleLoadFailure(urls, index);\n                }\n            });\n        }\n\n        // 处理加载失败的情况\n        function handleLoadFailure(urls, index) {\n            if (!loadAttempts[urls[index]]) {\n                loadAttempts[urls[index]] = 1;\n            } else {\n                loadAttempts[urls[index]]++;\n            }\n            if (loadAttempts[urls[index]] <= config.maxLoadAttempts) {\n                const retryMessage = `第${index + 1}页加载失败，正在进行第${loadAttempts[urls[index]]}次加载！`;\n                $('#messages').append(`<span class=\"error\">${retryMessage}</span><br>`);\n                setTimeout(() => { \n                    canLoadNextPage = true;\n                    loadContent(index); \n                }, config.retryDelayTime);\n            } else {\n                const finalErrorMessage = `第${index + 1}页加载失败，已达到最大尝试次数(${config.maxLoadAttempts})！`;\n                $('#messages').append(`<span class=\"error\">${finalErrorMessage}</span><br>`);\n                if (autoLoadInProgress && currentPageIndex < urls.length - 1) {\n                    setTimeout(() => { \n                        canLoadNextPage = true;\n                        loadContent(currentPageIndex + 1); \n                    }, config.delayTime);\n                } else {\n                    canLoadNextPage = true;\n                    if (autoLoadInProgress) {\n                        hideLoadingStatus();\n                    }\n                }\n            }\n        }\n\n        // 更新视频源\n        function updateVideoSource() {\n            const selectedIndex = parseInt(document.getElementById('video-source-select').value);\n            if (isNaN(selectedIndex) || !videoSources[selectedIndex]) {\n                $('#messages').append(`<span class=\"warn\">未找到有效的视频源。</span><br>`);\n                console.warn(\"Invalid or undefined video source:\", selectedIndex, videoSources);\n                return;\n            }\n\n            const selectedSource = videoSources[selectedIndex];\n            document.getElementById('video-url').textContent = `视频地址:\\n ${selectedSource}`;\n\n            const videoSourceElement = document.getElementById('video-source');\n            videoSourceElement.src = selectedSource;\n\n            const videoElement = document.getElementById('video-element');\n            videoElement.load();\n\n            $('#messages').append(`<span>更新视频源为: ${selectedSource}</span><br>`);\n            console.log(\"Updated video source to:\", selectedSource);\n        }\n\n        // 切换总页数显示状态\n        function toggleTotalPagesDisplay() {\n            if (urls.length > 1) {\n                $('#page').show();\n            } else {\n                $('#page').hide();\n            }\n        }\n\n        // 页面加载完成后执行的主要逻辑\n        $(document).ready(function () {\n            imageBox = document.getElementById('images');\n            textBox = document.getElementById('text');\n            if (imageBox && textBox) {\n                new Viewer(imageBox, { title: true, interval: 2000 });\n                new Viewer(textBox, { title: true, interval: 2000 });\n            }\n\n            const totalPagesText = config.totalPagesText;\n            const totalPages = parseInt(totalPagesText, 10) || 1;\n            const baseUrl = '{{baseUrl}}';\n\n            clearContainers();\n            $('#urls, #debug-info textarea, #video-url, #video-source-select').empty();\n            $('#urls, #messages, #debug-info, #video-url, #video-container, #video-source-container, #images, #text').hide();\n\n            buildUrls(totalPages, baseUrl);\n\n            const urlSelect = document.getElementById('url-select');\n            if (urlSelect.options.length > 0) {\n                urlSelect.value = '0'; \n\n                if (config.autoLoading) {\n                    autoLoadInProgress = true;\n                    for (let i = 0; i < urls.length; i++) {\n                        loadContent(i);\n                    }\n                } else {\n                    loadContent(0);\n                }\n            } else {\n                loadContent(0);\n            }\n\n            $('#url-select').change(function () {\n                clearContainers();\n                const selectedIndex = parseInt($(this).val());\n                loadContent(selectedIndex);\n            });\n            $('#prev-page-btn').click(function () {\n                clearContainers();\n                if (currentPageIndex > 0) {\n                    loadContent(currentPageIndex - 1);\n                }\n            });\n            $('#next-page-btn').click(function () {\n                clearContainers();\n                if (currentPageIndex < urls.length - 1) {\n                    loadContent(currentPageIndex + 1);\n                }\n            });\n            $('#auto-load-btn').click(function () {\n                autoLoadInProgress = true;\n                showLoadingStatus(1); \n                for (let i = currentPageIndex + 1; i < urls.length; i++) {\n                    loadContent(i);\n                }\n            });\n            $('#toggle-messages-btn').click(function () { $('#messages').toggle(); });\n            $('#toggle-urls-btn').click(function () { $('#urls').toggle(); });\n            $('#toggle-debug-btn').click(function () { $('#debug-info').toggle(); });\n        });\n    </script>\n</body>\n</html>",
    "ruleImage": "img@data-src",
    "ruleLink": "/vodplay/{{@a.0@href##voddetail/(.*).html##$1##}}-1-1.html",
    "ruleNextPage": "text.下页@href",
    "rulePubDate": ".vlength@text",
    "ruleTitle": "a@text",
    "singleUrl": false,
    "sortUrl": "国产色情::/vodtype/12.html\n日本无码::/vodtype/20.html\n自拍偷拍::/vodtype/21.html\n人妻熟女::/vodtype/22.html\n黑人洋屌::/vodtype/23.html\n欧美精品::/vodtype/24.html\n岛国女优::/vodtype/25.html\n萝莉少女::/vodtype/26.html\n国产精品::/vodtype/55.html\n国产直播::/vodtype/56.html\n动漫禁漫::/vodtype/57.html\n黑料吃瓜::/vodtype/58.html\n欧美大屌::/vodtype/60.html\n探花约炮::/vodtype/61.html\n华语精品::/vodtype/63.html\n乱伦精品::/vodtype/64.html\n学生合集::/vodtype/65.html\n卡通动漫::/vodtype/69.html\n乱伦中出::/vodtype/70.html\n传媒原创::/vodtype/71.html\n口爆颜射::/vodtype/72.html\n岛国群交::/vodtype/73.html\n日本有码::/vodtype/74.html\n中文字幕::/vodtype/75.html\n吃瓜爆料::/vodtype/76.html\n角色扮演::/vodtype/77.html\n淫娃自慰::/vodtype/78.html\n日本有码::/vodtype/80.html\n主播网红::/vodtype/81.html\n韩国直播::/vodtype/84.html\n公开漏出::/vodtype/85.html\n日本无码::/vodtype/86.html\n重口调教::/vodtype/88.html\n户外打野::/vodtype/89.html",
    "sourceComment": "shewo1.cc",
    "sourceGroup": "版本",
    "sourceIcon": "https://baf7baf7.shewo11.cc/template/shewo/images/logo.png",
    "sourceName": "2.6",
    "sourceUrl": "https://baf7baf7.shewo11.cc/"
  },
  {
    "articleStyle": 2,
    "customOrder": 505,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": false,
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "ruleArticles": "ul@li",
    "ruleContent": "   <h3>{{@@.h@tag.h1@text}}</h3>\r\n    <div id=\"box\">{{@@id.picg@tag.img@html}}</div>\r\n",
    "ruleImage": "img@src",
    "ruleLink": "a@href",
    "ruleNextPage": "page",
    "ruleTitle": "class.title@text",
    "singleUrl": false,
    "sortUrl": "摄影图库::http://www.sytuk.com/shey/yingtiiurm/11_1.html\n经典套图::http://www.jdtaotu.com/s.asp?keyword=%CD%F8%C2%B7\n女神美图::http://www.nsmeitu.com/s.asp?keyword=%CD%F8%C2%B7\n极品美女图::http://www.jpmnt.com/s.asp?keyword=%CD%F8%C2%B7\n高清网红图::http://www.gqwht.com/s.asp?keyword=%CD%F8%C2%B7\n漂亮网红图::http://www.plwht.com/s.asp?keyword=%CD%F8%C2%B7\n模特摄影图::http://www.mtsyt.com/s.asp?keyword=%CD%F8%C2%B7\n漂亮美图::http://www.plmeitu.com/s.asp?keyword=%CD%F8%C2%B7\n私房写真图::http://www.sfxzt.com/s.asp?keyword=%CD%F8%C2%B7\n极品女神图::http://www.jpnst.com/s.asp?keyword=%CD%F8%C2%B7\n国产写真图::http://www.gcxzt.com/s.asp?keyword=%CD%F8%C2%B7\n少女套图::http://www.sntaotu.com/s.asp?keyword=%CD%F8%C2%B7\n模特写真图::http://www.mtxzt.com/chis/wangluo/1.html",
    "sourceComment": "分类无法显示下一页",
    "sourceGroup": "版本",
    "sourceIcon": "天",
    "sourceName": "2.7",
    "sourceUrl": "http://www.mtxzt.com",
    "style": "/*标题相关*/\r\nh3{text-align:center}\r\nh6{margin-bottom:0}\r\nimg{width:100%}\nh5{margin-bottom:0;padding-left:5;}"
  },
  {
    "articleStyle": 0,
    "customOrder": 506,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": true,
    "header": " {\n\"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\"Cookie\":\"__cfduid=d150f32feeec7048d35993a8a642d2c0e1600348724; AVS=k29ctap8qhbuncoijpdkckr5v7\"\n}",
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "ruleArticles": "class.left@class.row@class.game-item&&class.left@class.row@class.video-item",
    "ruleContent": "@js:\nheader={\"Referer\":baseUrl};\nheaders={\"headers\":JSON.stringify(header)}\nif(baseUrl.match(/gif/)){\nvar doc = org.jsoup.Jsoup.parse(result);\nvar gif = String(doc).match(/gif.{5,10}.webm/);\nvar preview = 'https://www.hentaicloud.com/media/'+gif;\n\nif(String(doc).match(/From Video/)){\nvar url = doc.select(\"div.fromvideo\").select(\"a\").attr(\"href\");\nvar allUrl = 'https://www.hentaicloud.com'+url;\nvar doc = org.jsoup.Jsoup.connect(allUrl).get();\nvar spt = doc.select(\"source\").toString();\nvar src = spt.match(/https.{36}hd.{5,10}mp4/);\nresult = '<body><div><video controls=\"true\" width=\"100%\" autoplay=\"true\" src ='+preview+'></div><div><a href='+src+' >点击看全片</a></div></body>'\n}else{  \nresult = '<body><div><video controls=\"true\" width=\"100%\" autoplay=\"true\" src ='+preview+'></div><div><a>此片暂无出处</a></div></body>'\n}\n\n}else{\nvar doc = org.jsoup.Jsoup.parse(result);\nvar spt = doc.select(\"source\").toString();\nvar src = spt.match(/https.{36}hd.{5,10}mp4/);\nvar video='<iframe src='+src+' width=\"100%\" height=\"560\" frameborder=\"no\" allowfullscreen=\"true\">'  \nresult = video}",
    "ruleImage": "tag.img@src",
    "ruleLink": "tag.a@href",
    "ruleNextPage": "page",
    "rulePubDate": "@js:\nvar doc = org.jsoup.Jsoup.parse(result)\nvar text = doc.select(\"div.info\").select(\"span\").textNodes();\nif(text.size()==3){\nvar view = text.get(2).toString();\nif(view==\" \"){view =\"无\";}\nvar episode =text.get(0).toString();\nif(episode ==\" \"|| episode ==\"-\"){episode =\"无\";}\nresult = episode+\"   观看:\"+view}else if(text.size()==4){\nvar view = text.get(3).toString();\nif(view==\" \"){view =\"无\";}\nvar episode =text.get(0).toString();\nif(episode ==\" \"|| episode ==\"-\"){episode =\"无\";}\nresult = episode+\"   观看:\"+view\n}else{result = \"可通过动图预览查找动画\"}\n",
    "ruleTitle": "tag.div@id&&class.name@text",
    "singleUrl": false,
    "sortUrl": "搜索::https://www.hentaicloud.com/search?search_type=videos&search_query=&search_type=videos&page={{page}}\n\n\n动图::https://www.hentaicloud.com/gifs?page={{page}}\n3D::https://www.hentaicloud.com/videos/3d-hentai?page={{page}}\n口交::https://www.hentaicloud.com/tags/Blowjob?page={{page}}\n无码::https://www.hentaicloud.com/tags/Uncensored?page={{page}}\n触手::https://www.hentaicloud.com/tags/Tentacle?page={{page}}\n扶她::https://www.hentaicloud.com/videos/futanari?page={{page}}\n恶魔::https://www.hentaicloud.com/tags/Demon?page={{page}}\n自慰::https://www.hentaicloud.com/tags/Masturbation?page={{page}}\n后宫::https://www.hentaicloud.com/tags/Harem?page={{page}}",
    "sourceGroup": "版本",
    "sourceIcon": "天",
    "sourceName": "2.8",
    "sourceUrl": "https://www.hentaicloud.com",
    "style": ""
  },
  {
    "articleStyle": 0,
    "contentBlacklist": "https://lupic.cdn.bcebos.com/,\nhttps://cpro.baidu.com/,\nhttps://eclick.baidu.com/,\nhttps://sofire.baidu.com/,\nhttps://analytics.woozooo.com/,\nhttps://statics.woozooo.com/",
    "customOrder": 507,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": true,
    "header": "{\n    'User-Agent': 'Mozilla/5.0 (Linux; Android 11; Pixel 3 XL Build/RQ3A.211001.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/102.0.4988.0 Mobile Safari/537.36 SearchCraft/3.9.2 (Baidu; P1 11) '\n}",
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "ruleArticles": "<js>\njson=[];\nif(baseUrl.match(/★/)){\nlist=baseUrl.replace(/http.*?wd=\\s*/,'').split('★');\nfor(i in list){\nhref=list[i].match(/【(.*?)】/)[1];\ntext=list[i].match(/《(.*?)》/)[1];\nintro=list[i].match(/◎(.*?)◎/)[1];\nindex=list[i].match(/^(\\d+、\\d+、)/)?list[i].match(/^(\\d+、\\d+、)/)[1]:list[i].match(/^(.*?)【/)[1]\njson.push({text:text,src:href,intro:intro,index:index})\n}\n}\nJSON.stringify(json)</js>\n$.[*]",
    "ruleContent": "",
    "ruleImage": "$.src",
    "ruleLink": "$.index",
    "ruleNextPage": "",
    "rulePubDate": "$.intro",
    "ruleTitle": "$.text",
    "singleUrl": false,
    "sortUrl": "📲 导航::https://www.smdhb.com/【https://www.gitlink.org.cn/api/yi-c/tc/raw/dy/ys/smdy.png?ref=master】《神马电影导航吧》◎收集高清在线资源网站◎★https://anee.cc/【https://www.gitlink.org.cn/api/yi-c/tc/raw/dy/ys/ayys.png?ref=master】《安逸影视导航》◎一家集合全网影视专业导航网站◎★https://www.baicp.com/【https://www.gitlink.org.cn/api/yi-c/tc/raw/dy/ys/dydhw.png?ref=master】《电影导航网》◎电影网站大全◎★http://www.2cydh.com/【https://www.gitlink.org.cn/api/yi-c/tc/raw/dy/ys/ecydh.png?ref=master】《二次元导航》◎动漫、漫画网站大全◎★https://acgjj.cc/【https://www.gitlink.org.cn/api/yi-c/tc/raw/dy/ys/acgjj.png?ref=master】《ACG聚集》◎二次元宝藏资源聚合https://acgjj.org/◎★https://www.acgbox.link/【https://www.gitlink.org.cn/api/yi-c/tc/raw/dy/ys/acghz.png?ref=master】《ACG盒子》◎🚀VPN｜专注ACG的导航盒子◎★https://www.shangwaiwang.com/【https://www.gitlink.org.cn/api/yi-c/tc/raw/dy/ys/sww.png?ref=master】《上外网》◎🚀VPN｜外网网址导航◎\n\n\n📺 影视::https://www.btnull.net/【https://www.gitlink.org.cn/api/yi-c/tc/raw/dy/ys/wmxz.png?ref=master】《无名小站》◎fun,in,nu,org,to,si,com,net◎★https://www.66s6.net/【https://www.gitlink.org.cn/api/yi-c/tc/raw/dy/ys/xb6vdy.png?ref=master】《新版6V电影》◎6V电影网◎★https://www.appmovie.cc/【https://www.gitlink.org.cn/api/yi-c/tc/raw/dy/ys/appyy.png?ref=master】《APP影院》◎全网最全视频库◎★https://www.555dyy5.com/【https://www.gitlink.org.cn/api/yi-c/tc/raw/dy/ys/555dy.png?ref=master】《555电影》◎发布页地址：https://www.gtbyw.com/◎★https://cupfox.app/【https://www.gitlink.org.cn/api/yi-c/tc/raw/dy/ys/cbh.png?ref=master】《茶杯狐》◎中国最大的影视资源聚合搜索引擎◎★https://www.bdys10.com/【https://www.gitlink.org.cn/api/yi-c/tc/raw/dy/ys/bdys.png?ref=master】《哔嘀影视》◎发布页地址：https://www.bdys.me/◎★https://www.ikanbot.com/【https://www.gitlink.org.cn/api/yi-c/tc/raw/dy/ys/akjqr.png?ref=master】《爱看机器人》◎影视资源◎★https://www.nen9.com/【https://www.gitlink.org.cn/api/yi-c/tc/raw/dy/ys/qnys.png?ref=master】《青柠影视》◎最新电影在线观看◎★https://www.400blzx.com/【https://www.gitlink.org.cn/api/yi-c/tc/raw/dy/ys/dzm.png?ref=master】《谍战迷》◎抗日电视剧大全◎★https://ddys.pro/【https://www.gitlink.org.cn/api/yi-c/tc/raw/dy/ys/ddys.png?ref=master】《低端影视》◎超清在线视频｜https://ddys.info/◎★http://vi5kwix.gaku56.com/【https://www.gitlink.org.cn/api/yi-c/tc/raw/dy/ys/jjyy.png?ref=master】《竞技影院》◎免费高清电影院◎★https://www.libvio.fun/【https://www.gitlink.org.cn/api/yi-c/tc/raw/dy/ys/libvio.png?ref=master】《LIBVIO》◎海内外优质影视｜https://libvio.app/◎★https://www.wandou.la/【https://www.gitlink.org.cn/api/yi-c/tc/raw/dy/ys/wdpro.png?ref=master】《豌豆PRO》◎专业的电影搜索引擎◎★https://www.bttwo.net/【https://www.gitlink.org.cn/api/yi-c/tc/raw/dy/ys/lgbt.png?ref=master】《两个BT》◎发布地址：https://www.bttwo.vip/◎★https://www.fuju1.tv/【https://www.gitlink.org.cn/api/yi-c/tc/raw/dy/ys/fjtv.png?ref=master】《腐剧TV》◎腐剧、BL动漫、同性电影、百合◎★https://www.bl210.top/【https://www.gitlink.org.cn/api/yi-c/tc/raw/dy/ys/sgys.png?ref=master】《曙光影视》◎腐剧、耽美、泰剧暖光影视官网◎★https://www.tj8.top/【https://www.gitlink.org.cn/api/yi-c/tc/raw/dy/ys/ftjw.png?ref=master】《泰剧网》◎腐剧、耽美、泰剧暖光影视官网◎\n\n\n🎬 外影::https://wap.meijutt.tv/【https://www.gitlink.org.cn/api/yi-c/tc/raw/dy/ys/mjtt.png?ref=master】《美剧天堂》◎美剧天堂◎★https://www.mjutv.cn/【https://www.gitlink.org.cn/api/yi-c/tc/raw/dy/ys/mjw.png?ref=master】《美剧网》◎美剧网◎★http://www.tjtt.cc/【https://www.gitlink.org.cn/api/yi-c/tc/raw/dy/ys/tjtt.png?ref=master】《泰剧天堂》◎泰剧天堂◎★https://www.chaospace.xyz/【https://www.gitlink.org.cn/api/yi-c/tc/raw/dy/ys/chaospace.png?ref=master】《CHAOSPACE》◎外国影视资源站◎★https://www.hjutv.cn/【https://www.gitlink.org.cn/api/yi-c/tc/raw/dy/ys/hjw.png?ref=master】《韩剧网》◎韩剧网站◎★https://www.han-ju.cc/【https://www.gitlink.org.cn/api/yi-c/tc/raw/dy/ys/xhjw.png?ref=master】《新韩剧网》◎97韩剧网◎\n\n\n🐻‍ 动漫::http://m.yinghuavideo.com/【https://www.gitlink.org.cn/api/yi-c/tc/raw/dy/ys/yhdm.png?ref=master】《樱花动漫》◎专注动漫的门户网站◎★http://www.mxdm9.com/【https://www.gitlink.org.cn/api/yi-c/tc/raw/dy/ys/mxdm.png?ref=master】《MX动漫》◎专注在线动漫的樱花动漫备用网站◎★https://dm530.org/【https://www.gitlink.org.cn/api/yi-c/tc/raw/dy/ys/fcdm.png?ref=master】《风车动漫》◎拥有上万集高清晰画质的在线动漫◎★http://www.nicotv.club/【https://www.gitlink.org.cn/api/yi-c/tc/raw/dy/ys/nkdm.png?ref=master】《妮可动漫》◎追番补番的集中营，宅男腐女的秘密基地◎\n\n\n✔️ 解析::https://www.strerr.com/【https://www.gitlink.org.cn/api/yi-c/tc/raw/dy/ys/spfmxz.png?ref=master】《视频封面下载》◎油管、B站、N站、西瓜封面下载◎★https://www.m4411.com/【https://www.gitlink.org.cn/api/yi-c/tc/raw/dy/ys/syjx.png?ref=master】《鲨鱼解析》◎发布地址：https://www.ikan.club/◎★https://vip.yeyulingfeng.com/【https://www.gitlink.org.cn/api/yi-c/tc/raw/dy/ys/yylf.png?ref=master】《夜雨聆风》◎视频解析◎★https://superparse.com/【https://www.gitlink.org.cn/api/yi-c/tc/raw/dy/ys/superparse.png?ref=master】《超级解析》◎国内外知名视频网站解析◎",
    "sourceComment": "",
    "sourceGroup": "版本",
    "sourceIcon": "天",
    "sourceName": "2.9",
    "sourceUrl": "影视合集"
  },
  {
    "articleStyle": 0,
    "customOrder": 508,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": false,
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "ruleArticles": "@js:\njson=[];\nif(baseUrl.match(/•/)){\nlist=baseUrl.replace(/http.*?wd=\\s*/,'').split('•');\nfor(i in list){\nhref=list[i].match(/【(.*?)】/)[1];\ntext=list[i].match(/《(.*?)》/)[1];\njson.push({text:text,href:href})\n}\n}else{\nlist=baseUrl.replace(/http.*?wd=/,'');\nhref=list.match(/【(.*?)】/)[1];\ntext=list.match(/《(.*?)》/)[1];\njson.push({text:text,href:href})\n}\njson",
    "ruleLink": "href",
    "rulePubDate": "href",
    "ruleTitle": "text",
    "singleUrl": false,
    "sortUrl": "说明:\n\n⓪ 不要相信网站广告!!!\n错信广告照成的金钱损失本人概不负责。\n\n\n① [Pro]的诞生\n全靠@关耳大佬的模板，感谢大佬\n\n② 网站来源:\n大部分来自 源仓库分享\n小部分来自 酷安评论区\n\n③ 关于启用和未启用:\n[保证能打开，不保证能看]\n启用 发布时会确认能打开网站\n未启用 没检查网站可能不能用\n\n④ 如何增加网站?:[网站格式]\n[7.0前]\n你喜欢的名字   两个\":\"   http://+网站  保存后就可以找到添加的网站了-大部分网站都适用\n\n[7.0(Pro)后]\n分类名称 两个\":\" http://www.baidu.com?wd=【网址1】《网站名称1》•【网址2】《网站名称2》\n新分类格式如上\n\n⑤ 关于导航:[互相套娃]\n顺着一个导航网站你能找到十个导航网站\n12个导航能让你找到100⁺的网站(迷路警告)\n\n\n──────已──启──用──────\n\n\n🔎 常用[10]::http://www.baidu.com?wd=【https://m.baidu.com】《🔎 | 百度一下》•【http://www.huapuzi.com】《💰 | 花铺子》•【https://huaban.com/favorite/beauty】《📸 | 花瓣网》•【https://a7a7.net/meitu】《📸 | 阿七美图》•【http://pic.sogou.com/pic/searchList.jsp?uID=&v=5&statref=index_form_1&spver=0&rcer=&keyword=%E7%BE%8E%E5%A5%B3】《📸 | 搜狗》•【https://vt.sm.cn/api/commonPage/index?type=pic&source=sc&scname=life_show_general_image&uc_param_str=dnntnwvepffrgibijbprsvdsdicheiniut#/%E7%BE%8E%E5%A5%B3//latest:1】《📸 | 夸克》•【https://m.baidu.com/sf/vsearch?pd=image_content&atn=page&fr=alawise&tn=vsearch&sa=tb&oq=%E5%85%85%E6%B0%94%E5%A8%83%E5%A8%83&word=%E7%BE%8E%E5%A5%B3&vs_req_t=1612074463274】《📸 | 百度》•【https://cn.bing.com/images/search?q=%E7%BE%8E%E5%A5%B3&form=QBIR】《📸 | 必应》•【https://www.feixuew.com】《🔞🗂️📥》•【http://m.u9h.com/top.html】《🔞🎮📥》\n\n\n📸 美图[12]::http://www.baidu.com?wd=【http://bzgif.com】《动图 | 暴走动图》•【http://www.qmsgif.com】《动图 | 秋名动图》•【https://www.ikmjx.com】《📸 | 买家秀》•【https://mmz.moe】《📸 | 萌妹子》•【https://m.appjpg.com】《📸 | 美女写真》•【https://www.f4mm.com】《📸 | F4mm》•【https://openys.cn/category/znns】《📸 | 宅男女神》•【https://www.1bie.com】《📸 | 娇妻美图》•【http://www.630h.com】《📸 | 630美图》•【https://www.ameitu.com】《📸 | 爱美图库》•【https://m.24tupian.org】《📸 | 爱死美图》•【http://www.skinnyeroticteens.com】《欧美 | 少女美图》\n\n\n🎨 漫画[12]::http://www.baidu.com?wd=【http://mm.vvvv.网址】《爱你 | 网站合集》•【https://www.mh-mh.com】《A | 看漫画》•【https://manhua.zsh8.com】《A | 芝士豪八》•【https://18comic.bet】《A⁻ | 禁漫天堂》•【https://www.ikanwzd.top】《A⁻ | 久久漫画》•【http://wzdhm.cc】《A⁻ | 韩国漫画》•【https://m.svipmh.com】《B⁺ | svip漫画》•【http://m.kmh8.net】《B | 看漫画吧》•【http://m.zwenquan.com】《B | 邪恶集》•【http://m.bancangyang.com】《B | 邪恶道》•【http://m.lifanbzk.org】《B | 里番本子库》•【http://m.che43.com】《B | 邪琉璃神社》\n\n\n📺 视频[21]::http://www.baidu.com?wd=【http://sp.vvvv.网址】《爱你 | 网站合集》•【http://h.zy40.cn/gjdq/dh/inde.html】《智云 | 网站合集》•【http://h.zy40.cn/z/sejso.php】《智云 | 智云视频》•【https://pwa.litchihouse.cn】《📺 | 鲁兔》•【https://lutu.club】《📺 | 鲁兔②》•【http://sese7218.com】《📺 | 色色碰》•【http://sese7888.com】《📺 | 色色碰②》•【https://5gtsc5.xyz】《📺 | 5G影院》•【https://www.770dy.com】《📺 | 七七影院》•【http://www.shejj.ga】《📺 | 射姐姐》•【https://www.66se14.com】《📺 | 66色》•【https://8x5098x.com/html/category/video】《📺 | 八X》•【https://yuanqi06.com/category/lunli】《📺 | 艾尔》•【https://www.myq6m1yx64y5uq88bph.xyz:59980】《📺 | 密芽》•【http://niugua04.com】《📺 | 牛瓜》•【https://qq.com.tieniu06.xyz】《📺 | 铁牛》•【https://www.kdtjq.com】《📺 | 宅男俱乐部》•【https://nckk58.com】《难加载 | 📺 | 嫩草》•【https://ny012.xyz】《难加载 | 📺 | 嫩芽》•【https://www.62362734c46affbd.com/index/home.html】《难加载 | 屏蔽移动 | 四色》•【https://www.e0fe9e2b1da0.com/index/home.html】《难加载 | 屏蔽移动 | 猫咪》\n\n\n🔞 小说[14]::http://www.baidu.com?wd=【http://www.5je.net】《发布 | 版主》•【http://www.jiuai1.top】《发布 | 久爱》•【https://xvlog.xyz】《A | 闲暇》•【https://bk301.xyz】《A | 锁狼》•【https://xrw6.xyz】《A⁻ | 夏日》•【https://crazyfiction.xyz】《A⁻ | 瘋情》•【http://www.krxs.xyz】《A⁻ | 狂人》•【http://www.xiusexx.xyz】《B⁺ | 羞涩》•【http://www.pqz999.top】《B⁺ | 茄子》•【http://www.xqxs.xyz】《B⁺ | 胸器》•【http://www.692653.com】《B⁺ | 渣男》•【http://www.zwxs.buzz】《B⁺ | 宅污》•【http://www.833179.com】《B | 色虎》•【http://www.hxsxs1.xyz】《B | H小说吧》\n\n\n🌐 导航[23]::http://www.baidu.com?wd=【https://www.moefuns.vip】《导航 | 萌翻》•【http://app.sgj168.com】《导航 | 哇我家》•【http://zjh.wtf】《导航 | 宅聚合》•【https://zhaijuhe.com/?tj】《导航 | 宅聚合②》》•【https://www.hxsb.org】《导航 | 小说吧》•【http://buliang7.com】《导航 | 不良研究所》•【https://mimi-70.com】《导航 | 秘密入口》•【http://mmtd.fun】《导航 | 秘密通道》》•【http://yy-b.ppyaya.com:8880】《导航 | YY》•【https://i7dios.cn】《导航 | 蜜桃》•【http://lemon1.info/】《导航 | 柠檬》•【http://www.du373.top】《导航 | 多多》•【http://jimeng.org】《导航 | 激萌》•【http://qrpnvcjndkfjha--012517.cdnmd0113.mdoudh.com:8880】《导航 |麻豆》•【https://uvbobo.xyz】《导航 | 波波》•【http://lwdh.in】《导航 |老王》•【https://xinbiao.info】《导航 | 信标》•【https://www.xingdh.com】《导航 | 杏导航》•【http://lang81.com】《导航 | 狼导航》•【https://www.xlldh.space】《导航 | 小萝莉》•【http://yuenuge.cc】《导航 | 阅女阁》•【http://laosj666.xyz】《导航 |老司机》•【https://www.tommaodh.me】《导航 | Tom猫》\n\n\n📱 发布页[8]::http://www.baidu.com?wd=【https://mmrk.neocities.org】《导航 | 秘密入口》•【https://buliang.neocities.org】《导航 | 不良研究所》•【http://403mh.com】《🎨 | 可乐漫画》•【https://www.404hm.com】《🎨 | SVIP漫画》•【https://github.com/8x8xkpian/8x8x-love/wiki】《📺 | 八x》•【https://lutu.fun】《📺 | 鲁兔》•【https://lutu.me】《📺 | 鲁兔②》•【https://www.ebay.com/usr/seseporn】《📺 | 色色碰》",
    "sourceGroup": "版本",
    "sourceIcon": "http://47.105.79.245/anitama.jpg",
    "sourceName": "3.0",
    "sourceUrl": "特殊整合Pro[8.0 | 100/100]"
  },
  {
    "articleStyle": 0,
    "concurrentRate": "",
    "customOrder": 509,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": true,
    "header": "{\n    'User-Agent': 'Mozilla/5.0 (Linux; Android 11; Pixel 3 XL Build/RQ3A.211001.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/102.0.4988.0 Mobile Safari/537.36 SearchCraft/3.9.2 (Baidu; P1 11) '\n}",
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "ruleArticles": "<js>\njson=[];\nif(baseUrl.match(/ /)){\nlist=baseUrl.replace(/http.*?wd=\\s*/,'').split(' ');\nfor(i in list){\nhref=list[i].match(/【(.*?)】/)[1];\ntext=list[i].match(/《(.*?)》/)[1];\nintro=list[i].match(/◎(.*?)◎/)[1];\nindex=list[i].match(/^(\\d+、\\d+、)/)?list[i].match(/^(\\d+、\\d+、)/)[1]:list[i].match(/^(.*?)【/)[1]\njson.push({text:text,src:href,intro:intro,index:index})\n}\n}\nJSON.stringify(json)</js>\n$.[*]",
    "ruleContent": "",
    "ruleDescription": "",
    "ruleImage": "$.src",
    "ruleLink": "$.index",
    "ruleNextPage": "",
    "rulePubDate": "$.intro",
    "ruleTitle": "$.text",
    "singleUrl": false,
    "sortUrl": "🎥-影视▪️影院::https://www.o8tv.com/【https://i.postimg.cc/Gt9kN6VT/de6a398e2e6f25cd8fea8814651e2403.png】《555影院®》◎在线影院◎ https://app.movie/【https://i.postimg.cc/nzjWQ5SG/1657028424447.png】《App影院®》◎在线影院◎ https://fullxcinema-com.translate.goog/category/celebrity-porn-videos/?_x_tr_sl=auto&_x_tr_tl=zh-CN&_x_tr_hl=zh-CN【https://i.postimg.cc/P5L9Z6Hw/141e2972743b1e14db0c2fe409fd3fda.png】《全电影网》◎电影网站◎ https://www.novipnoad.com/【https://i.postimg.cc/Y2y7w6rm/1657177866100.png】《Novipnoad®》◎在线影院◎ https://www.ikanbot.com/【https://i.postimg.cc/L5FKJwJY/1657464485475.png】《爱机器人®》◎影视直播◎ http://m.360live.cc/【https://i.postimg.cc/6q7P40T7/1657171372253.png】《爱看卫视》◎卫视在线直播◎ http://www.aiqingtv.com:8/【https://i.postimg.cc/Gh5M40BM/1660216319238.png】《爱情.TV》◎在线影院◎ https://xiaoyakankan.com/cat/15.html【https://i.postimg.cc/Mp52b9rZ/1658047723416.png】《小鸭看看®》◎在线影院◎ https://www.pkmp4.com/【https://i.postimg.cc/W4T8QvbP/1657585183153.png】《片库影院®》◎在线影院◎ https://ddrk.me/【https://i.postimg.cc/Zq0kncDk/1658839233937.png】《低端影院®》◎在线影院◎ http://www.renren.pro/【https://i.postimg.cc/wMytDpgh/1657021317616.png】《人人影视®》◎电影网站◎ https://www.pbpb.tv/【https://i.postimg.cc/8kxfghJX/1657179241087.png】《片吧影院®》◎在线影院◎ http://hense66.sexurl.xyz/【https://i.postimg.cc/8CbGXPcg/1678704603667.png】《很涩视频》◎在线视频◎ https://www.libvio.me/【https://i.postimg.cc/2jZWSPmM/5b55c5e231aca321b58fe16d59c3ee75.png】《Libvio.me》◎在线影院◎ https://www.66.ca/forum.php?fid=56&mod=forumdisplay【https://i.postimg.cc/90YS3Vq5/1657217561547.png】《华人社区》◎社区阅读网站◎\n☸-文娱▪️阅读::https://mp3-banana.pro/【https://i.postimg.cc/d3HR8qqW/1636542691088.png】《俄语音乐》◎俄站步非烟◎ https://siyufm.net/lists/?page=2&author=12【https://i.postimg.cc/zXHKN1nK/1637811407315.png】《私语电台》◎私密电台◎ https://asmrs.live/category/%E6%AD%A5%E9%9D%9E%E7%83%9F%E7%AC%AC%E4%B8%80%E5%AD%A3【https://i.postimg.cc/15yTD2t8/1643175843924.png】《Asmrs~🎧》◎在线音频◎ https://es.iporntv.net/search/%E4%B8%AD+%E6%96%87+%E9%9F%B3%E5%A3%B0+asmr【https://i.postimg.cc/kGSc5QGT/1657418160867.png】《中文音声》◎资源网站◎ https://m.xingdiantai.com/freeradio/【https://i.postimg.cc/tJWDWsS9/1636543129910.png】《杏吧电台》◎免费电台网站◎ http://hja27.com/【https://i.postimg.cc/KjNH5kQJ/8e5e7fc946028dcf4f32a2173ae4c319.png】《海角社区》◎登录在线社区◎ https://heiliao6.pro/【https://i.postimg.cc/MGJHYjQK/df8abf301d246c79be2416cb2d382e3c.png】《黑料链接®》◎链接网站◎ https://www.g718.sx/【https://i.postimg.cc/nhRTwV51/60caf55a7c86f32a0ffd3252d718353e.png】《718车友会®》◎在线论坛◎ https://www.51cg1.com/【https://i.postimg.cc/63K4SCLn/1657033842033.png】《51吃瓜网》◎在线论坛◎ https://jav.gallery/【https://i.postimg.cc/fL1fHJWz/1655687656501.png】《動宝在线》◎在线视频网站◎ https://qq.com.tiege03.xyz/?uid=128879【https://i.postimg.cc/CLH3C2fH/1639307031234.png】《铁哥TV》◎在线网站◎ https://www.pornfind.org/【https://i.postimg.cc/1RL5Vrbx/1643170566233.png】《搜索引擎》◎导航网站◎ https://qq.com.lsck01.xyz/【https://i.postimg.cc/15pk15cJ/22f1c92cf8ecb6af575fb4e502a91ebd.png】《绿色仓库》◎视频导航网站◎ https://qq.com.tieniux15.top/【https://i.postimg.cc/m2TDkYx5/1655817959914.png】《铁牛资源》◎导航链接◎ https://qq.com.beiwotv.xyz/【https://i.postimg.cc/G2dbSRjm/1655822701904.png】《被窝TV》◎导航网站◎\n🔲-图片▪️套图::https://heaven.porn/【https://i.postimg.cc/gj5D3V3t/1637729257404.png】《Heaven》◎全球套图精选◎ https://www.pornpics.com/【https://i.postimg.cc/V6HtGBmL/ac28d790f21bb18524b5bab2496e361f.png】《Pornpics》◎中外图库[高清大图]◎ https://www.nudexxx.pics/categories/babe/【https://i.postimg.cc/131j1j0v/1638332202023.png】《Nudexxx》◎在线图片◎ https://www.xxxftvgirls.com/【https://i.postimg.cc/QM3pzCY7/1655781876454.png】《Xxxftvgirls》◎全球套图精选◎ https://www.gravurehunter.com/【https://i.postimg.cc/mgBQv38B/c144ea102b481a06e2cfbff4eecbb1b9.png】《Gravure》◎在线图片◎ https://sexynude.pics/【https://i.postimg.cc/dV7qX4Pg/1655823076713.png】《Sexynude》◎在线图片◎ https://nakedwomen.pics/【https://i.postimg.cc/28FX9mTf/1657271779518.png】《Nakedwomen》◎在线图片◎ https://thotsbay.tv/?fulione【https://i.postimg.cc/CLnhg9hR/1678630353262.png】《Thotsbay》◎在线图片◎ https://latestones.com/models【https://i.postimg.cc/rFFTYphv/10c7bcd9cd616a05b07a8e5155ff568e.png】《Latestones》◎高清写真◎ https://www.eroticbeauties.net/【https://i.postimg.cc/15qw8YBz/e70b08733fceb554437154b2ea2b5a53.png】《eroticbeauties》◎在线图片◎ https://www.metarthunter.com/most-viewed/【https://i.postimg.cc/Gp4T8xSs/cae05c94e7c8ffae80289e7bc24b3f34.png】《Metarthunter》◎花花公子图片站◎ https://www.hqseek.com/【https://i.postimg.cc/1Xd6bLng/1636528074158.png】《Hqseek》◎在线图片◎ https://www.freexcafe.com/?ref=porndude【https://i.postimg.cc/kX35Jpx4/1655983982372.png】《Freexcafe.com》◎在线图片◎ https://www.freebigtitpornpics.com/【https://i.postimg.cc/7PTBbdtR/1656073522948.png】《Bigtitpornpics》◎国际图片◎ https://www.jpbeauties.com/【https://i.postimg.cc/BZDtwf7C/1637918486763.png】《JPbeauties》◎日本图片◎ https://www.eastbabes.com/【https://i.postimg.cc/bvJLc0qZ/1656221729360.png】《Eastbabes》◎在线图片◎ https://www.erosberry.com/?ref=porndude【https://i.postimg.cc/4NXqnm2v/b36328b476f62c28399930a8a7b98030.png】《Erosberry.com》◎在线图片◎\n🔳-传媒▪️日系::https://www.helloavgirls.com/?qingse.one【https://i.postimg.cc/nhRvftvn/1637637245085.png】《Hello~avgirls》◎日系av视频网站◎ https://www.tw0913.com/index/index_1.html【https://i.postimg.cc/jdhFZbMb/1655657370807.png】《AV中文》◎短视频网站◎ https://netflav.com/?qingse.one【https://i.postimg.cc/B68nz9r5/9b463e356784d62007bbfa9ab669d88e.png】《Netflav》◎日系资源~浏览器打开◎ https://www.fuq.com/zh/【https://i.postimg.cc/pL082scx/1656697944724.png】《Fuq.com》◎在线视频◎ https://www.tubev.sex/【https://i.postimg.cc/3Jc0Mxv8/1655872958452.png】《Tubev.sex》◎日系视频◎ https://pigav.com/【https://i.postimg.cc/5ytmqkJ5/1636714890664.png】《Pigav.com》◎视频网站◎ https://www.atube.xxx/?hl=zh【https://i.postimg.cc/YCGJ5q3P/1636849542518.png】《Dtube.xxx》◎在线视频◎ https://www.pfree.one/【https://i.postimg.cc/1tcn0fX7/a139d7adf597e53efc35411870cb9e62.png】《Pfree.one》◎在线视频◎ https://foxlibrary.xyz/【https://i.postimg.cc/qqJqngpX/a1c375a47f312841f8fa6eec14ed61cc.png】《FoxLibrary》◎在线视频◎ https://www.rtmm6.com/video/1/【https://i.postimg.cc/rw4G8443/1657012825802.png】《人体美媚》◎综合网站◎ https://hhhjav.com/【https://i.postimg.cc/Qtf8mGyQ/1656046620044.png】《三H视频》◎综合视频◎ https://fyptt.to/【https://i.postimg.cc/8c9D4yHY/1657563183687.png】《海外抖音》◎海外抖音网站◎ https://eden01.com/【https://i.postimg.cc/bJty35ns/1656074689383.png】《伊甸园网》◎综合视频◎ https://www.fengyuetongtian.com/【https://i.postimg.cc/7ZnG4jsL/1655829430458.png】《风月同天》◎国产视频◎ https://www.bus13.com/【https://i.postimg.cc/bwWMLL57/1655688619355.png】《艾薇巴士》◎视频影院◎ https://avhd1.com/index.html【https://i.postimg.cc/R04Ps1FK/1655817933907.png】《AV视频》◎在线视频◎\n🈂-动漫▪️漫画::https://www-hentaicloud-com.translate.goog/videos?o=mr&_x_tr_sl=auto&_x_tr_tl=zh-CN&_x_tr_hl=zh-CN【https://i.postimg.cc/cLxmt8qt/1657264255748.png】《Hentaicloud》◎在线漫画◎ https://hentaidude.com/【https://i.postimg.cc/VLRc1YRt/1657024067326.png】《hentaidude》◎在线动漫◎ https://www.animehentaivideos.xxx/【https://i.postimg.cc/hj2wwX1T/1657216924243.png】《Hentai~VI》◎日系动漫◎ https://animeidhentai.com/【https://i.postimg.cc/G2Sfn4Ww/1656838030280.png】《Animeid》◎日系动漫◎ https://porcore.com/【https://i.postimg.cc/1zBgGkj0/1657010517944.png】《Porcore》◎在线漫画◎ http://www.177picyy.com/html/category/cg/cg-cn/【https://i.postimg.cc/qgfhYGQt/1656838187853.png】《177漫画》◎在线漫画◎ https://porn3dx.com/【https://i.postimg.cc/sfYtC7st/1657263526600.png】《Porn3dx》◎在线漫画◎ https://www.ho5ho.com/?ref=porndude【https://i.postimg.cc/Kzcw2rKV/1658321960709.png】《全彩H漫》◎在线漫画◎ https://www-hentairules-net.translate.goog/category/incest/?_x_tr_sl=auto&_x_tr_tl=zh-CN&_x_tr_hl=zh-CN【https://i.postimg.cc/PJ34ypKS/1656921716625.png】《hentairules》◎在线漫画◎ https://doujins.com/【https://i.postimg.cc/QdxnMzSN/a6222dd9366f54f87b8f7870bfe43089.png】《Doujins》◎在线动漫◎ https://asmhentai.com/【https://i.postimg.cc/QMGcdFZv/1656904673161.png】《Asmhentai》◎在线漫画◎ https://comics.8muses.com/comics【https://i.postimg.cc/cHCkjmMF/1656747410145.png】《8muses.com》◎在线动漫◎ https://www.cartoonpornvideos.com/【https://i.postimg.cc/PxBHqhpx/1656917164314.png】《Cartoon~P》◎在线动漫◎ https://h-ciyuan.com/【https://i.postimg.cc/R0djvfpk/1657800089071.png】《H~ciyuan》◎在线动漫◎ https://hanime1.me/【https://i.postimg.cc/zvTCGjfx/3761b8bde0f4a3f5d6fc633fd54f0fc6.png】《hanime1.me》◎漫画网站◎\n🎥-VR▪️博客::https://sharesome.com/news/【https://i.postimg.cc/gj4HKk9B/1636708458829.png】《Sharesone™》◎时尚博客直播◎ https://nudebabes.tube/【https://i.postimg.cc/FRZThKzw/1637547515349.png】《Nudebabes》◎在线影院◎ https://m.livejasmin.com/en/list/girl/www.cavhot.com【https://i.postimg.cc/3RDq1WJm/1638681569437.png】《Livejasmin》◎欧美在线直播◎ https://m-chaturbate-com.translate.goog/?_x_tr_sl=auto&_x_tr_tl=zh-CN&_x_tr_hl=zh-CN【https://i.postimg.cc/Mp58kP1S/1656736242263.png】《Chaturbate》◎欧美直播網站◎ https://xn--zp3-xxxsspcom-yp8ve33bkpevz1kpxq.xn--yetv14dbin23n.com/?fulione【https://i.postimg.cc/mrzDLSN0/1657067668701.png】《xxxsspcom™》◎中文抖淫◎ https://viralporn.com/【https://i.postimg.cc/zfGYVCJx/1657014358637.png】《Viralporn》◎欧美直播網站◎ https://51papaya.com/【https://i.postimg.cc/sDLntHFK/1678275099518.png】《51papaya》◎在线短视频◎ https://vrporn.com/?a=634574【https://i.postimg.cc/JzKcYQdk/1655469952522.png】《Vrporn.com[VR]》◎VR视频站◎ https://virtualrealporn.com/?nats=OTk5MTAwMDMuNS44LjEwLjAuMC4wLjAuMA【https://i.postimg.cc/FFJ2fFfW/1655542912385.png】《virualrealporn[VR]》◎VR视频站◎ https://m.instantfap.com/?ref=porndude【https://i.postimg.cc/NM7v3FWG/1636714420842.png】《Instantfap》◎欧美在线视频直播站[优质画面]◎ https://www.sex.com/【https://i.postimg.cc/N0zRGwXh/1655566034717.png】《Sex.com》◎欧美在线视频直播站[优质画面]◎ https://www.xfree.com/?popularFeed=150672【https://i.postimg.cc/Kj0rSZ00/1b675b5fcb22bb8c84bf3682ebad5759.png】《Xfree.com》◎博客直播[优质画面]◎ https://fikfap.com/?ref=porndude【https://i.postimg.cc/DyVy8K9r/1655654233967.png】《Fikfap.com》◎博客直播[优质画面]◎ https://xxxtik.com/?ref=porndude【https://i.postimg.cc/mkxbZNW4/a2b0d5776f5161f168d8394f3bd37074.png】《Xxxtik.com》◎博客直播[优质画面]◎ https://tik.porn/video/216500【https://i.postimg.cc/9XBRnLsy/1655648357308.png】《Tik.porn》◎博客直播[优质画面]◎\n🔞-在线【宽屏】::https://cn.pornhub.com/view_video.php?viewkey=ph5f5367cd02a9a【https://i.postimg.cc/PfZcf8W1/1637937252627.png】《Pornhub》◎🇨🇦在线视频◎ https://www.xvideos.com/【https://i.postimg.cc/L6yQskbQ/1637936393141.png】《Xvideos》◎🇨🇿在线视频◎ https://www.bookofp.com/zh/celebrities/【https://i.postimg.cc/xd72QNs4/1659110706030.png】《Bookofp》◎🇱🇷在线视频◎ https://beeg.com/?ref=porndude【https://i.postimg.cc/T17T3Lm8/1637937050924.png】《Beeg.com》◎🇬🇳在线视频◎ https://m.shameless.com/【https://i.postimg.cc/8CWvGJ1v/1655955946009.png】《shameless》◎🇮🇸在线视频◎ https://txxx.com/【https://i.postimg.cc/CKS3NdBC/1656841152906.png】《Txxx.com》◎🇨🇿在线视频◎ https://m.tnaflix.com/【https://i.postimg.cc/Jzw65BYB/1657106388720.png】《Tnaflix.com》◎🇭🇺在线视频◎ https://fuqer.mobi/【https://i.postimg.cc/FzRB7zqf/2096f0a90436c081102ce000cb1b82b9.png】《Fuqer.mobi》◎🇩🇪在线视频◎ https://teenxmovies.net/【https://i.postimg.cc/MGfGBqPJ/1655986800440.png】《Teenxmovies》◎🇩🇪在线视频◎ https://www.xnxx.com/【https://i.postimg.cc/3NT7QXZF/1638079383739.png】《Xnxx.com》◎🇺🇸在线视频◎ https://www.joysporn.com/?ref=porndude【https://i.postimg.cc/ydy26fDV/1656468812234.png】《Joysporn》◎🇭🇺在线视频◎ https://www.youporn.com/【https://i.postimg.cc/g21CS5TH/1658916855443.png】《Youporn》◎🇨🇴在线视频◎ https://www.gotporn.com/【https://i.postimg.cc/N0hGHFZf/1658840245284.png】《Gotporn.com》◎🇭🇺在线视频◎ https://4kporn.xxx/【https://i.postimg.cc/ht2r3jht/1638700576004.png】《4Kporn.xxx》◎🇳🇴在线视频◎ https://porndoe.com/?utm_campaign=theporndude&utm_medium=trafficbuy&utm_source=theporndude【https://i.postimg.cc/hG3NT5Vz/1637931210565.png】《Porndoe》◎🇫🇷在线视频◎\n🔞-在线【欧美】::http://www.incestflix.com/?ref=porndude【https://i.postimg.cc/G36dHWwM/1638705175642.png】《Incestflix》◎🇮🇩在线视频◎ https://crazyshit.com/category/random-nudity/【https://i.postimg.cc/dtjdr2pM/357020e158482026a20a7e713f6b6279.png】《Crayshit.com》◎🇦🇽在线视频◎ https://motherless.com【https://i.postimg.cc/LXZynXtV/1656205674304.png】《Motherless》◎🇻🇪在线视频◎ https://zh.xhamster.com/【https://i.postimg.cc/VLd9cpxN/1638625257182.png】《Xhameter》◎🇹🇳在线视频◎ https://www.ixxx.com【https://i.postimg.cc/7PjrhdTS/1656846388876.png】《Ixxx.com》◎🇹🇳在线视频◎ https://fuqqt.com/videos/babe【https://i.postimg.cc/TwQzJhLv/1656205530357.png】《Fuqqt.com》◎🇭🇺在线视频◎ https://shooshtime.com/【https://i.postimg.cc/DZzSwpJk/1656294092715.png】《Shooshtime》◎🇫🇮在线视频◎ https://fapster.xxx/categories/【https://i.postimg.cc/zf5fxnkx/1656330613273.png】《Fapster.xxx》◎🇮🇩在线视频◎ https://pornone.com/【https://i.postimg.cc/RZj3rKJD/1656981369071.png】《Pornone.com》◎🇮🇩在线视频◎ https://www.porntube.com/?cid=2930【https://i.postimg.cc/442qfqDm/1638143733789.png】《Porntube》◎🇲🇸在线视频◎ https://www.eporner.com/【https://i.postimg.cc/FscqrGTv/1656079279240.png】《Epornet》◎🇰🇿在线视频◎ https://www.redtube.com/【https://i.postimg.cc/Wp8NN7yM/1656336459126.png】《Redtube》◎🇬🇦在线视频◎ https://www.pornhd.com/【https://i.postimg.cc/HLWTf1T9/47dd395f818d744f5f6b897508d3309f.png】《Pornhd》◎🇮🇩在线视频◎ https://www.18porn.sex/【https://i.postimg.cc/v83FXZLS/1656123183464.png】《18porn.sex》◎🇾🇪在线视频◎ https://pornkai.com/【https://i.postimg.cc/C5gR1VJC/1656347595775.png】《Pornkai》◎🇨🇦在线视频◎\n🔞-在线【备选】::https://pornontube.com/zh-cn/【https://i.postimg.cc/SRZHh6nJ/1657441598978.png】《Pornontube》◎在线电影◎ https://www.fellatiojapan.com/en/?ref=1860c830【https://i.postimg.cc/0Nvm3sM8/1657504985437.png】《Fellatiojapan》◎在线视频网站◎ https://pmatehunter.com/【https://i.postimg.cc/251kXxS9/1657442432339.png】《Pmate~H》◎国际图片◎ https://www.tubegalore.com/zh/【https://i.postimg.cc/8cyY5pTK/1665305809050.png】《Tubegalore》◎在线视频◎ https://m.porn555.com/【https://i.postimg.cc/mrHj6MxN/1657449171627.png】《Porn555.com》◎视频网站◎ https://www.qpornosite.com/【https://i.postimg.cc/zXXc4mKS/647a65f79ad84414ec8ef7037833ee62.png】《qpornosite》◎视频网站◎ https://www.fuqpremium.com/zh/【https://i.postimg.cc/3RYktqSK/c424aec60f743d6db1474dade05b3173.png】《fuqpremium》◎在线视频◎ https://www.lobstertube.com/zh/【https://i.postimg.cc/CMcXFYLT/0b02fc4ba24b38f90f62c54142be537c.png】《LobsterTube》◎数百万激情色情电影◎ https://familyporn.tv/【https://i.postimg.cc/hjjpKYNg/1657448947985.png】《家庭porn》◎在线视频网站◎ https://www.tube8.com/【https://i.postimg.cc/28C8L5vd/c1c46f7c390245ed8325cf5cbcdfa54d.png】《Tybe.8.com》◎在线直播网站◎ https://www.handjobjapan.com/en/?ref=a2f6354a【https://i.postimg.cc/9XBBBLTK/1657198533076.png】《Handjobjaan》◎日系手活◎ https://jav.javfinder.tk/【https://i.postimg.cc/tJ4x5bFj/1665130749332.png】《Javfinder.tk》◎在线视频◎ https://www.porzo.com/zh/【https://i.postimg.cc/htbRGgLV/1657444600756.png】《Porzo.com》◎在线视频◎ https://aboutporno.net/【https://i.postimg.cc/sx2PrBwC/1657560491814.png】《aboutporno.net》◎视频网站◎ https://adultdeepfakes.com/【https://i.postimg.cc/rmsLp1bX/1657442859439.png】《Adultdeepfakes》◎影院在线◎\n📖-书单▪️榜单®::https://vt.sm.cn/api/novelStarReco/index【https://i.postimg.cc/3Ng0mjYb/1642215764921.png】《星云推书》◎书荒搜书神器◎ https://m.qidian.com/rank/【https://i.postimg.cc/Bb6H9P0h/1643185593580.png】《起点榜单》◎起点中文网榜单◎ https://quark.sm.cn/api/rest?method=Novelnew.home&format=html&schema=v2&gender=male&cate=%E5%85%A8%E9%83%A8&rank=rank_hot&pv=2420440【https://i.postimg.cc/XqXmn23H/1656398173543.png】《夸克榜单》◎夸克浏览器小说榜单◎ https://m.baidu.com/sf?openapi=1&dspName=iphone&dsp=iphone&from_sf=1&pd=bookstore&resource_id=5077&type=2&card_id=5143&word=%E5%85%A8%E9%83%A8%E5%88%86%E7%B1%BB&title=%E6%9B%B4%E5%A4%9A%E6%8E%A8%E8%8D%90&tag1=%E5%85%A8%E9%83%A8%E5%88%86%E7%B1%BB&lid=11549307334103749569&referlid=11549307334103749569&ms=1&frsrcid=5143&frorder=4【https://i.postimg.cc/YS5CqKk1/1643192297572.png】《百度榜单》◎百度浏览器小说榜单◎ https://www.yousuu.com【https://i.postimg.cc/ZqV9LKk4/d6460ce69df5934d47ec2e184264d447.png】《优书榜单》◎优书网书单◎ https://data.newrank.cn/m/s.html?s=Py8yOTE5KDE4【https://i.postimg.cc/nLWpBQzP/1656640745508.png】《小说拾遗》◎小说拾遗公众号-号内搜索◎ https://mp.weixin.qq.com/mp/appmsgalbum?action=getalbum&album_id=1319671603470581762&__biz=MzI2MDg2NjAwMg==#wechat_redirect【https://i.postimg.cc/Wp7cCtpP/9afbe88df402cbaacd6a1f34bb95451a.png】《精选书单》◎主推优质完结和连载100万字以上小说◎ https://mp.weixin.qq.com/mp/appmsgalbum?action=getalbum&album_id=1319666229510193155&__biz=MzI2MDg2NjAwMg==#wechat_redirect【https://i.postimg.cc/dtW1vnvq/1656158438840.png】《潜力新书》◎主推大神新书和20～100万字的优质新书◎ http://mp.weixin.qq.com/mp/homepage?__biz=MzI2MDg2NjAwMg==&hid=11&sn=c55d27329c109430838bc5b5f5b615b7&scene=18#wechat_redirect【https://i.postimg.cc/Nf2g2B79/d7844cc4a188295fb56ff7ee13e7c518.png】《高分必看》◎高分完本合集◎ https://mp.weixin.qq.com/mp/appmsgalbum?action=getalbum&album_id=1319668267623170050&__biz=MzI2MDg2NjAwMg==#wechat_redirect【https://i.postimg.cc/YCYjTCQ1/1643194013372.png】《近期完结》◎主推近一段时间内优质的完结小说◎ https://mp.weixin.qq.com/mp/appmsgalbum?action=getalbum&album_id=1319675692849872897&__biz=MzI2MDg2NjAwMg==#wechat_redirect【https://i.postimg.cc/MHJwdrSX/f3406e1fcc20a92dcaf944c71b0d67ab.png】《后宫精选》◎后宫精选合集◎ https://mp.weixin.qq.com/mp/appmsgalbum?__biz=MzI5NTA4NjgwNw==&action=getalbum&album_id=1319454340050157569&scene=126&devicetype=android-28&version=28000f3d&lang=zh_CN&nettype=WIFI&ascene=3&pass_ticket=B8GunWN7RjA2Q%2FaVYxT%2BSITrnCodRKKdEfgFLaYKNzv56Vgj9IUBy%2B6yzAlQVE4M&wx_header=1【https://i.postimg.cc/tTF4MXws/1643177963800.png】《网文书单》◎每期三本-新书速递、养肥佳作、完本好书◎ https://mp.weixin.qq.com/mp/appmsgalbum?__biz=MzI5NTA4NjgwNw==&action=getalbum&album_id=1319471313224040448&scene=126&devicetype=android-28&version=28000f3d&lang=zh_CN&nettype=WIFI&ascene=3&pass_ticket=B8GunWN7RjA2Q%2FaVYxT%2BSITrnCodRKKdEfgFLaYKNzv56Vgj9IUBy%2B6yzAlQVE4M&wx_header=1【https://i.postimg.cc/htNQd8pH/1656748079978.png】《澎湃精选》◎超过50万字，连载或完本的优秀作品◎ https://mp.weixin.qq.com/mp/appmsgalbum?__biz=MzI5NTA4NjgwNw==&action=getalbum&album_id=1526356920989712387&scene=126&devicetype=android-28&version=28000f3d&lang=zh_CN&nettype=WIFI&ascene=3&pass_ticket=B8GunWN7RjA2Q%2FaVYxT%2BSITrnCodRKKdEfgFLaYKNzv56Vgj9IUBy%2B6yzAlQVE4M&wx_header=1【https://i.postimg.cc/FRH068g6/1656311375852.png】《年度盘点》◎年度盘点各分类中诞生的新书、完本书◎ https://mp.weixin.qq.com/mp/homepage?__biz=MzI5NTA4NjgwNw==&hid=1&sn=0fcecdc85b8c23e596880f8c895b901d&scene=18&devicetype=android-28&version=28000f3d&lang=zh_CN&nettype=WIFI&ascene=59&session_us=gh_2aa0f3c6dd8f&pass_ticket=B8GunWN7RjA2Q%2FaVYxT%2BSITrnCodRKKdEfgFLaYKNzv56Vgj9IUBy%2B6yzAlQVE4M&wx_header=1【https://i.postimg.cc/TP7Md7D4/1657562436540.png】《赤戟资源》◎最新热门分类◎",
    "sourceComment": "",
    "sourceGroup": "版本",
    "sourceIcon": "天",
    "sourceName": "3.1",
    "sourceUrl": "Online <2.32>"
  },
  {
    "articleStyle": 2,
    "customOrder": 510,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": true,
    "header": "{\n  \"User-Agent\": \"Mozilla/5.0 (Linux; Android 13; SM-S918B) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Mobile Safari/537.36\",\n  \"Referer\": \"https://qikzj.com/\"\n}",
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "ruleArticles": ".bricks-layout-item.repeater-item",
    "ruleContent": "@js:\nvar doc = org.jsoup.Jsoup.parse(result);\nvar myImgs = [];\n\n// 1. 严格锁定正文 ID，彻底避开 Related Posts 等外部组件\nvar contentHtml = \"\";\nvar mainBox = doc.getElementById(\"brxe-qoenez\");\nif (mainBox) {\n    contentHtml = mainBox.html();\n} else {\n    contentHtml = doc.select(\".brxe-post-content\").html();\n}\n\nif (contentHtml) {\n    // 2. 在限定范围内扫描高清图片链接\n    var regex = /https?:\\/\\/qikzj\\.com\\/wp-content\\/uploads\\/[^\"'\\s<>]*?\\.(?:jpg|jpeg|png|webp|gif)/gi;\n    var matches;\n    while ((matches = regex.exec(contentHtml)) !== null) {\n        var s = matches[0];\n        // 过滤 Logo 和头像\n        if (s.indexOf(\"logo\") === -1 && s.indexOf(\"avatar\") === -1) {\n            // 还原高清原图路径，去掉尺寸和缩放后缀\n            var cleanUrl = s.replace(/-\\d+x\\d+\\./i, \".\").replace(/-scaled\\./i, \".\");\n            if (myImgs.indexOf(cleanUrl) === -1) {\n                myImgs.push(cleanUrl);\n            }\n        }\n    }\n}\n\nvar displayTitle = (typeof title !== 'undefined' && title) ? title : \"QikZ Visuals\";\n\nvar h = \"<!DOCTYPE html><html><head><style>body{margin:0;background:#050505;color:#eee;font-family:sans-serif;padding-bottom:100px} .top{background:#111;color:#888;text-align:center;padding:15px;font-size:10px;text-transform:uppercase;letter-spacing:3px;border-bottom:1px solid #222} .header{padding:40px 25px;text-align:center} .img-list{padding:0 10px} .img-box{position:relative;margin-bottom:18px;background:#000;border-radius:2px;overflow:hidden;box-shadow:0 10px 30px rgba(0,0,0,0.5)} .img-box img{width:100%;display:block;height:auto} .img-num{position:absolute;bottom:10px;right:15px;background:rgba(0,0,0,0.6);color:#fff;padding:2px 8px;border-radius:2px;font-size:10px;font-family:monospace;font-weight:bold}</style></head><body>\";\nh += \"<div class='top'>HD VISUAL SHOWCASE</div>\";\nh += \"<div class='header'><h1 style='font-size:20px;margin:0;font-weight:300;color:#fff;line-height:1.4'>\" + displayTitle + \"</h1></div>\";\nh += \"<div class='img-list'>\";\nfor(var k=0; k<myImgs.length; k++){\n    h += \"<div class='img-box'><img src='\" + myImgs[k] + \"'><span class='img-num'>\" + (k+1) + \" / \" + myImgs.length + \"</span></div>\";\n}\nh += \"</div><p style='text-align:center;color:#333;font-size:10px;margin-top:60px;letter-spacing:2px'>QIKZ PHOTOGRAPHY GALLERY</p></body></html>\";\nresult = h;",
    "ruleImage": "@js:\nvar img = result.select(\"img\").first();\nif (img) {\n    var s = img.attr(\"data-src\") || img.attr(\"data-srcset\") || img.attr(\"src\");\n    if (s && s.indexOf(\" \") > 0) s = s.split(\" \")[0];\n    result = s;\n} else {\n    result = \"https://qikzj.com/favicon.ico\";\n}\nresult;",
    "ruleLink": "h3.dynamic a@href",
    "ruleNextPage": ".page-numbers.next@href",
    "ruleTitle": "h3.dynamic a@text",
    "singleUrl": false,
    "sortUrl": "",
    "sourceGroup": "版本",
    "sourceIcon": "https://qikzj.com/favicon.ico",
    "sourceName": "3.2",
    "sourceUrl": "https://qikzj.com"
  },
  {
    "articleStyle": 0,
    "customOrder": 511,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": true,
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "singleUrl": true,
    "sourceGroup": "版本",
    "sourceIcon": "天",
    "sourceName": "3.3",
    "sourceUrl": "http://www.sytuk.com/shey/yingtiiurm/1_{{page}}.html"
  },
  {
    "articleStyle": 0,
    "customOrder": 512,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": false,
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "singleUrl": true,
    "sourceGroup": "版本",
    "sourceIcon": "天",
    "sourceName": "3.4",
    "sourceUrl": "https://www.bec9693b2cfd.com/shipin/list-%E4%BA%9A%E6%B4%B2%E6%97%A0%E7%A0%81-1.html"
  },
  {
    "articleStyle": 1,
    "customOrder": 514,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": true,
    "header": "{\"User-Agent\": \"Mozilla/5.0 (Linux; Android 13; 2211133C Build/TKQ1.220905.001) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.0.0 Mobile Safari/537.36\"}",
    "lastUpdateTime": 1775586071363,
    "loadWithBaseUrl": true,
    "ruleArticles": ".grid_post-box",
    "ruleContent": "@js:\nlet images = [];\nlet regex = /<a\\s[^>]*?href\\s*=\\s*['\"]([^'\"]+\\.(?:jpe?g|png|gif|webp|bmp))['\"][^>]*>\\s*<img[^>]*>/gi;\nlet match;\nwhile ((match = regex.exec(result)) !== null) {\n    let realUrl = match[1];\n    images.push(`<img src=\"${realUrl}\" style=\"max-width:100%;display:block;margin:0px auto;\">`);\n}\nlet imageContent = images.join('');\nlet p = `\n<title>🏄Mengteen</title>\n<style>\n  * {margin: 0; padding: 0}\n  img {width: 100%;height: auto}\n  /* Mengteen阅图基础UI */\n  /* 返回按钮基础 */\n  #backToTopBtn {\n    display: none;\n    position: fixed;\n    bottom: 36px;\n    right: 18px;\n    z-index: 999;\n    border: none;\n    outline: none;\n    background: linear-gradient(135deg, #ADD8E6, #FFF8DC);\n    color: white;\n    cursor: pointer;\n    padding: 2px;\n    border-radius: 10%;\n    font-size: 18px;\n    box-shadow: 0 8px 32px rgba(70, 130, 180, 0.3);\n    transition: all 0.3s ease;\n    backdrop-filter: blur(4px);\n    border: 1px solid rgba(255, 255, 255, 0.3);\n  }\n  \n  #backToTopBtn:hover {\n    background: linear-gradient(135deg, #ADD8E6, #FFF8DC);\n    transform: scale(1.08);\n    box-shadow: 0 8px 25px rgba(70, 130, 180, 0.4);\n  }\n  \n  #backToTopBtn:active {\n    transform: scale(0.95);\n  }\n  \n  /* 图片加载完成提示基础 */\n  #image-loaded-toast {\n    position: fixed;\n    bottom: 33px;\n    left: 50%;\n    transform: translateX(-50%);\n    background: rgba(0, 0, 0, 0.7);\n    color: white;\n    padding: 10px 20px;\n    border-radius: 20px;\n    font-size: 14px;\n    z-index: 998;\n    backdrop-filter: blur(4px);\n    box-shadow: 0 4px 12px rgba(0, 0, 0, 0.2);\n    opacity: 0;\n    transition: opacity 0.3s;\n    pointer-events: none;\n  }\n  \n  /* 标题卡片基础 */\n  #image-loaded-toast.show {\n    opacity: 1;\n  }\n</style>\n<div style=\"\n  text-align:center;\n  padding:50px 20px 20px;\n  margin:0 0 0px;\n  position:relative;\n  background:linear-gradient(135deg, #f0f7ff, #e6f0ff);\n\">\n  <!-- 标题卡片 -->\n  <div style=\"\n    position:relative;\n    z-index:10;\n    display:inline-block;\n    transform:translateY(-20px);\n    filter: drop-shadow(0 15px 25px rgba(70,130,180,0.25));\n  \">\n    <div style=\"\n      background:rgba(255,255,255,0.75);\n      backdrop-filter:blur(12px);\n      padding:16px 48px;\n      border-radius:18px;\n      border:1px solid rgba(255,255,255,0.5);\n      box-shadow:0 8px 32px rgba(70,130,180,0.2), inset 0 0 12px rgba(255,255,255,0.6);\n      position:relative;\n      overflow:hidden;\n    \">\n      <!-- 顶部高光 -->\n      <div style=\"\n        position:absolute;\n        top:0; left:0; right:0;\n        height:40%;\n        background:linear-gradient(to bottom, rgba(255,255,255,0.4), transparent);\n        pointer-events:none;\n      \"></div>\n      \n      <h3 style=\"\n        background:linear-gradient(135deg, #4a7bd0, #00a2b8);\n        -webkit-background-clip:text;\n        background-clip:text;\n        color:transparent;\n        font-size:1.3rem;\n        font-weight:700;\n        margin:0;\n        letter-spacing:-0.5px;\n        position:relative;\n        z-index:2;\n      \">{{@@h1@text}}</h3>\n      \n      <!-- 左下装饰点 -->\n      <div style=\"\n        position:absolute;\n        bottom:12px;\n        left:20px;\n        width:6px;\n        height:6px;\n        background:#00a2b8;\n        border-radius:50%;\n        opacity:0.7;\n      \"></div>\n      \n      <!-- 右下装饰点 -->\n      <div style=\"\n        position:absolute;\n        bottom:12px;\n        right:20px;\n        width:6px;\n        height:6px;\n        background:#4a7bd0;\n        border-radius:50%;\n        opacity:0.7;\n      \"></div>\n    </div>\n  </div>\n  \n  <!-- 时间信息 -->\n  <div style=\"\n    margin-top:0px;\n    padding:0px 20px;\n  \">\n    <h5 style=\"\n      color:#6c757d;\n      font-weight:400;\n      font-size:1rem;\n      margin:0;\n      line-height:1.6;\n      letter-spacing:0.3px;\n      position:relative;\n      display:inline-block;\n      max-width:700px;\n    \">\n      {{@@.post-meta-bottom@time.0@text}}\n      <!-- 下划线装饰 -->\n      <div style=\"\n        position:absolute;\n        bottom:-5px;\n        left:0;\n        width:100%;\n        height:1px;\n        background:linear-gradient(90deg, transparent, rgba(70,130,180,0.3), transparent);\n      \"></div>\n    </h5>\n  </div>\n  \n  <!-- 左上装饰圆 -->\n  <div style=\"\n    position:absolute;\n    top:10%;\n    left:15%;\n    width:40px;\n    height:40px;\n    border-radius:50%;\n    background:linear-gradient(135deg, rgba(74,123,208,0.1), transparent);\n    filter:blur(2px);\n  \"></div>\n  \n  <!-- 右下装饰圆 -->\n  <div style=\"\n    position:absolute;\n    bottom:15%;\n    right:10%;\n    width:60px;\n    height:60px;\n    border-radius:50%;\n    background:linear-gradient(135deg, rgba(0,162,184,0.1), transparent);\n    filter:blur(4px);\n    transform:rotate(30deg);\n  \"></div>\n</div>\n${imageContent}  <!-- 这里是图片内容 -->\n<div id=\"image-loaded-toast\">✅ 全部图片已完成加载</div>\n<button id=\"backToTopBtn\" title=\"回到顶部\">🔝</button>\n<script>\n(function() {\n  const backToTopBtn = document.getElementById(\"backToTopBtn\");\n  const toast = document.getElementById(\"image-loaded-toast\");\n  \n  // 图片加载完成检测\n  const images = document.querySelectorAll(\"img\");\n  let loadedCount = 0;\n  const totalImages = images.length;\n  \n  // 如果页面没有图片，直接隐藏提示\n  if(totalImages === 0) {\n    toast.style.display = \"none\";\n  }\n  \n  // 检测图片加载完成\n  images.forEach(img => {\n    if(img.complete) {\n      checkAllLoaded();\n    } else {\n      img.addEventListener(\"load\", checkAllLoaded);\n      img.addEventListener(\"error\", checkAllLoaded);\n    }\n  });\n  \n  function checkAllLoaded() {\n    loadedCount++;\n    if(loadedCount >= totalImages) {\n      showToast();\n    }\n  }\n  \n  function showToast() {\n    toast.classList.add(\"show\");\n    setTimeout(() => {\n      toast.classList.remove(\"show\");\n    }, 2000);\n  }\n  \n  // 监听页面滚动事件\n  window.addEventListener(\"scroll\", () => {\n    const scrollPosition = window.scrollY || document.documentElement.scrollTop;\n    \n    if (scrollPosition > 288) {\n      backToTopBtn.style.display = \"block\";\n      backToTopBtn.style.opacity = \"1\";\n    } else {\n      backToTopBtn.style.display = \"none\";\n    }\n  });\n  \n  // 点击事件监听器\n  backToTopBtn.addEventListener(\"click\", () => {\n    window.scrollTo({\n      top: 0,\n      behavior: \"smooth\"\n    });\n  });\n})();\n</script>\n`;\np;",
    "ruleImage": "img@data-src",
    "ruleLink": ".clearfix@data-href",
    "ruleNextPage": "page",
    "rulePubDate": "🏄Mengteen｜🔖{{@@.post-cat@text}}",
    "ruleTitle": "img@alt",
    "singleUrl": false,
    "sortUrl": "首页::/page/{{page}}/\n搜索::/page/{{page}}/?s={{(source.getVariable()==''||source.getVariable()==null)?source.setVariable('美女'):source.getVariable()}}\n女優画像::/category/avjoyuu/page/{{page}}/\n女高画像::/category/josikousei/page/{{page}}/\nおっぱい画像[美乳]::/category/oppai/page/{{page}}/\n太もも画像[美腿]::/category/hutomomo/page/{{page}}/\nオナニー画像[自慰]::/category/onani/page/{{page}}/\n野外セックス[野外啪啪]::/category/yagaisekkusu/page/{{page}}/\n乱交画像[群P]::/category/rankougazou/page/{{page}}/\nフェラ画像[口交]::/category/fera/page/{{page}}/\nクンニ画像[口交]::/category/kunnni/page/{{page}}/\nパイズリ画像[乳交]::/category/paizurigazou/page/{{page}}/\nレズ[女同]::/category/rezugazou/page/{{page}}/\nキス画像[接吻]::/category/kisugazou/page/{{page}}/\nSM::/category/smgazou/page/{{page}}/\n露出::/category/rosyutsugazou/page/{{page}}/\n偷拍::/category/tousatsugazou/page/{{page}}/\n素人::/category/sirouto/page/{{page}}/\n欧美::/category/gaizinerogazou/page/{{page}}/\n制服::/category/olgazou/page/{{page}}/\n泳衣::/category/mizugi/page/{{page}}/\n网袜::/category/amitaitsu/page/{{page}}/\n黑丝::/category/pannsuto/page/{{page}}/\n吊带::/category/ga-ta-beruto/page/{{page}}/\n浴衣::/category/yukatakimono/page/{{page}}/\n女仆::/category/meido/page/{{page}}/\n眼镜娘::/category/megane/page/{{page}}/",
    "sourceComment": "源社区：@Mengteen  2025.7.16\n二传二创或者是其它问题请联系我。\n我邮箱:[xxxmgqxxx@vip.qq.com]\n我QQ:99737563(备注来意)\n1.不需要挂🪜子,个别地方网络加载可能有点慢或者是需要挂🪜子才能访问，别急！\n2.使用了我自己的看图UI,卡片式标题,自适应全屏,一键返回顶上按钮,图片加载完成提示等。\n3.搜索和分类是按我自己个人喜欢的,你也可以放一些你自己喜欢的。",
    "sourceGroup": "版本",
    "sourceIcon": "https://pashalism.com/wp-content/uploads/2022/03/2341-33.jpg",
    "sourceName": "3.5",
    "sourceUrl": "https://pashalism.com/##@Mengteen",
    "variableComment": "🏄Mengteen提示：在此输入关键词搜索！"
  },
  {
    "articleStyle": 0,
    "customOrder": 515,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": false,
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "singleUrl": true,
    "sourceGroup": "版本",
    "sourceIcon": "",
    "sourceName": "3.6",
    "sourceUrl": "http://www.mxshm.top"
  },
  {
    "articleStyle": 0,
    "contentBlacklist": "https://pc.stgowan.com/,\nhttps://dmku.mhtjx.top/,\nhttps://dmku.m3u8.pw/,\nhttps://dm.bbj.icu/,\nhttps://www.superplayer.top/index.php/index/dm",
    "coverDecodeJs": "function toByteArray(input) {\n  var out = new Packages.java.io.ByteArrayOutputStream();\n  var buffer = java.strToBytes('\\0'.repeat(4096));\n  var bytesRead;\n  while ((bytesRead = input.read(buffer)) != -1) {\n    out.write(buffer, 0, bytesRead);\n  }\n  return out.toByteArray();\n}\n\n(function() {\n  // 1. 读取原始字节内容\n  var textBytes = toByteArray(result);\n  // 2. 如果是GIF文件，直接返回原始字节\n  if (src.endsWith('.gif')) {\n    return textBytes;\n  }\n  try {\n    // 3. 将字节转换为字符串（用于解析数据URI）\n    var dataUri = java.bytesToStr(textBytes, \"UTF-8\");\n    // 4. 判断是完整的数据URI还是纯Base64数据\n    var base64Prefix = \"base64,\";\n    var base64Index = dataUri.indexOf(base64Prefix);\n    if (base64Index === -1) {\n      // 如果没有找到base64前缀，检查是否需要截取第一个/及之后的内容\n      var firstSlashIndex = dataUri.indexOf('/');\n      if (firstSlashIndex !== -1) {\n        // 如果找到第一个/，截取/及之后的内容\n        dataUri = dataUri.substring(firstSlashIndex);\n      }\n      // 对整个内容进行Base64解码\n      return java.base64DecodeToByteArray(dataUri);\n    } else {\n      // 如果是标准data URI，提取base64编码部分解码\n      var base64Data = dataUri.substring(base64Index + base64Prefix.length);\n      return java.base64DecodeToByteArray(base64Data);\n    }\n  } catch (e) {\n    // 解码失败时返回原始字节\n    return textBytes;\n  }\n})();",
    "customOrder": 517,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": true,
    "header": "{\n\t\"User-Agent\":\"Mozilla/5.0 (Linux; U; Android 10; zh-cn; MI CC 11)  AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/100.0.4896.127 Mobile Safari/537.36 XiaoMi/MiuiBrowser/18.1.8 swan-mibrowser\",\n\t\"referer\": \"{{baseUrl}}\"\n}",
    "injectJs": "function setupCustomPlayer(video) {\n  // 手势滑动快进\n  let isDragging = false;\n  let startX = 0;\n  let startTime = 0;\n  \n  // 长按加速相关变量\n  let longPressTimer = null;\n  const LONG_PRESS_DELAY = 300;\n  const NORMAL_SPEED = 1.25;\n  const FAST_SPEED = 3;\n  let wasPaused = false;\n\n  // 触摸事件处理\n  function handleTouchStart(e) {\n    startX = e.touches[0].clientX;\n    startTime = video.currentTime;\n    wasPaused = video.paused;\n    \n    longPressTimer = setTimeout(() => {\n      video.playbackRate = FAST_SPEED;\n      if (wasPaused) video.play();\n    }, LONG_PRESS_DELAY);\n  }\n\n  function handleTouchMove(e) {\n    if (longPressTimer) {\n      clearTimeout(longPressTimer);\n      longPressTimer = null;\n    }\n    \n    const dx = e.touches[0].clientX - startX;\n    if (Math.abs(dx) > 10) {\n      if (!isDragging) {\n        video.pause();\n        isDragging = true;\n      }\n      const change = (dx / video.clientWidth) * video.duration;\n      video.currentTime = Math.max(0, Math.min(startTime + change, video.duration));\n    }\n  }\n\n  function handleTouchEnd() {\n    if (longPressTimer) {\n      clearTimeout(longPressTimer);\n      longPressTimer = null;\n    }\n    \n    if (isDragging) {\n      video.playbackRate = NORMAL_SPEED;\n      video.play();\n      isDragging = false;\n    } else if (video.playbackRate === FAST_SPEED) {\n      video.playbackRate = NORMAL_SPEED;\n      if (wasPaused) video.pause();\n    }\n  }\n\n  // 添加触摸事件监听\n  video.addEventListener('touchstart', handleTouchStart);\n  video.addEventListener('touchmove', handleTouchMove);\n  video.addEventListener('touchend', handleTouchEnd);\n  \n  // 初始播放速度\n  video.playbackRate = NORMAL_SPEED;\n\n  // 创建按钮的通用函数\n  function createButton(text, onClick, position, width = '20px') {\n    const button = document.createElement('button');\n    button.textContent = text;\n    button.style.position = 'absolute';\n    button.style[position.horizontal] = '0';\n    button.style.top = '50%';\n    button.style.transform = 'translateY(-50%)';\n    button.style.zIndex = '999';\n    button.style.padding = '1px';\n    button.style.background = 'rgba(51, 51, 51, 0)';\n    button.style.color = '#fff';\n    button.style.border = 'none';\n    button.style.cursor = 'pointer';\n    button.style.width = width;\n    button.style.height = '30px';\n    button.addEventListener('click', onClick);\n    video.parentNode.appendChild(button);\n    return button;\n  }\n\n  // 旋转按钮（右侧）\n  createButton('⟳', () => {\n    const currentRotation = parseInt(video.getAttribute('data-rotation') || '0');\n    const newRotation = (currentRotation + 90) % 360;\n    video.setAttribute('data-rotation', newRotation);\n    \n    // 保留当前的缩放比例\n    const currentTransform = video.style.transform || '';\n    let currentScale = 1;\n    const scaleMatch = currentTransform.match(/scale\\(([^)]+)\\)/);\n    if (scaleMatch) currentScale = parseFloat(scaleMatch[1]);\n    \n    video.style.transform = `rotate(${newRotation}deg) scale(${currentScale})`;\n  }, { horizontal: 'right' });\n\n  // 缩放按钮（左侧）\n  let zoomCount = 0;\n  createButton('+', () => {\n    const currentRotation = parseInt(video.getAttribute('data-rotation') || '0');\n    \n    // 获取当前缩放比例\n    const currentTransform = video.style.transform || '';\n    let currentScale = 1;\n    const scaleMatch = currentTransform.match(/scale\\(([^)]+)\\)/);\n    if (scaleMatch) currentScale = parseFloat(scaleMatch[1]);\n    \n    if (zoomCount < 4) {\n      const newScale = currentScale * 1.25;\n      video.style.transform = `rotate(${currentRotation}deg) scale(${newScale})`;\n      zoomCount++;\n    } else {\n      video.style.transform = `rotate(${currentRotation}deg) scale(1)`;\n      zoomCount = 0;\n    }\n  }, { horizontal: 'left' });\n\n  // 快速跳转按钮（底部中央）\n  const buttonContainer = document.createElement('div');\n  buttonContainer.style.position = 'absolute';\n  buttonContainer.style.bottom = '0';\n  buttonContainer.style.left = '50%';\n  buttonContainer.style.transform = 'translateX(-50%)';\n  buttonContainer.style.display = 'flex';\n  buttonContainer.style.gap = '10px';\n  buttonContainer.style.zIndex = '999';\n  \n  // 按钮配置\n  const seekButtons = [\n    { text: '-5分', time: -300 },\n    { text: '-1分', time: -60 },\n    { text: '+1分', time: 60 },\n    { text: '+5分', time: 300 }\n  ];\n\n  seekButtons.forEach(({ text, time }) => {\n    const button = document.createElement('button');\n    button.textContent = text;\n    button.style.padding = '1px';\n    button.style.background = 'rgba(51, 51, 51, 0)';\n    button.style.color = '#fff';\n    button.style.border = 'none';\n    button.style.cursor = 'pointer';\n    button.style.width = '60px';\n    button.style.height = '30px';\n    button.addEventListener('click', () => {\n      video.currentTime = Math.max(0, Math.min(video.currentTime + time, video.duration));\n    });\n    buttonContainer.appendChild(button);\n  });\n\n  video.parentNode.appendChild(buttonContainer);\n}\n\n// 修改初始化逻辑，增加重试机制\nfunction initPlayerWithRetry() {\n  const maxRetries = 10;\n  const retryInterval = 500;\n  let retries = 0;\n  const tryInit = () => {\n    const video = document.getElementById('video');\n    if (video) {\n      setupCustomPlayer(video);\n    } else if (retries < maxRetries) {\n      retries++;\n      setTimeout(tryInit, retryInterval);\n    }\n  };\n  tryInit();\n}\n// 使用重试机制初始化播放器\ninitPlayerWithRetry();",
    "lastUpdateTime": 1775584959581,
    "loadWithBaseUrl": true,
    "ruleArticles": "$.rescont.data",
    "ruleContent": "<html><head><meta charset=\"utf-8\">\n  <meta name=\"viewport\" content=\"width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no\" />\n<meta name=\"referrer\" content=\"never\"/>\n  <style>html, body {text-align: center;margin: 0; padding: 0;width: 100%;overflow: hidden;} </style>\n  <script src=\"https://unpkg.com/hls.js@1.4.3/dist/hls.min.js\"></script>\n</head><body>\n  <div class=\"container\">\n    <div class=\"title\">{{$.rescont.title}}</div>\n    <video id=\"video\" width=\"100%\" height=\"91%\" poster=\"\" controls autoplay muted loop></video>\n  </div>\n<script>\nconst v=document.getElementById('video'),s=[\n  \"{{$.rescont.videopath}}\",\n  \"\"];\nlet c=0;\nfunction setupCustomControls(e){/* 自定义功能实现 */}\nfunction playNext(){\n  c>=s.length&&(c=0); // 循环重置计数器\n  const u=s[c++];\n  // 检测Hls对象是否存在\n  if (typeof Hls !== 'undefined' && Hls.isSupported()) {\n    const h = new Hls({\n      enableSoftwareAES: true,          // 强制软件解密\n      forceKeyFrameOnDiscontinuity: true // 关键帧恢复\n    });\n    h.loadSource(u);\n    h.attachMedia(v);\n    h.on(Hls.Events.MANIFEST_PARSED,()=>v.play().then(()=>setupCustomControls(v)).catch(console.log));\n    h.on(Hls.Events.ERROR,(_,d)=>d.fatal&&playNext())\n  } else { // Hls加载失败或浏览器原生支持HLS\n    if (v.canPlayType('application/vnd.apple.mpegurl')) {\n      v.src = u;\n      v.onloadedmetadata = () => v.play().then(() => setupCustomControls(v));\n      v.onerror = playNext;\n    } else {\n      // 如果都不支持，尝试直接播放（可能支持MP4等格式）\n      v.src = u;\n      v.onerror = playNext;\n      v.play().then(() => setupCustomControls(v)).catch(playNext);\n    }\n  }\n}playNext();\n</script>\n</body></html>",
    "ruleImage": "{{$.coverbase64.url}}",
    "ruleLink": "/api/videoplay/{{$.id}}?uuid=1",
    "ruleNextPage": "$.rescont.next_page_url",
    "rulePubDate": "📆{{$.updated_at## .*}}  ⏱️{{$.playtimes}}",
    "ruleTitle": "$.title##.*屎.*|.*Ts.*|.*TS.*|.*ts.*|.*伪娘.*|.*人妖.*|.*男同.*|.*mbrba.*|.*水果派.*|.*解说.*|.*mmraa.*|.*ss-.*|.*fway.*|.*rebd.*|.*mbdd.*|.*双性.*|.*妈妈.*|.*儿子.*|.*爸爸.*|.*女儿.*|.*母子.*|.*父女.*|.*熟女.*|.*眼射.*|.*直男.*|.*CD.*|.*肥女.*|.*黄金.*|.*骚0.*|.*gv.*|.*父子.*|.*飞机.*|.*撸.*|.*厕.*|.*老阿姨.*|.*乱伦.*|.*[电影].*",
    "singleUrl": false,
    "sortUrl": "\n随机::/api/videosort/0?page={{ Math.ceil(Math.random()*1600) }}\n最新::/api/videosort/0?page={{page}}\n🔎搜索::/api/videosort/0?serach={{v=source.getVariable();if(/^\\s*$/.test(v)||v==null)source.setVariable('强奸');source.getVariable()}}&page={{page}}\n国产自拍::/api/videosort/28?page={{page}}\nH动漫::/api/videosort/32?page={{page}}\n3D动画::/api/videosort/65?page={{page}}\n国产AV::/api/videosort/68?page={{page}}\n高清无码::/api/videosort/30?page={{page}}\n凌辱侵犯::/api/videosort/60?page={{page}}\n性虐调教::/api/videosort/64?page={{page}}\n长腿丝袜::/api/videosort/43?page={{page}}\n制服诱惑::/api/videosort/33?page={{page}}\nAV素人::/api/videosort/39?page={{page}}\nAV剧情::/api/videosort/49?page={{page}}\n绿帽人妻::/api/videosort/58?page={{page}}\n痴女淫娃::/api/videosort/61?page={{page}}\n美乳巨乳::/api/videosort/38?page={{page}}\n草莓推荐::/api/videosort/52?page={{page}}\ntaipei1001::/api/videosort/69?page={{page}}\n259LUXU::/api/videosort/50?page={{page}}\n明星淫梦::/api/videosort/56?page={{page}}\n电车痴汉::/api/videosort/59?page={{page}}\n絕色佳人::/api/videosort/44?page={{page}}\n网红嫩模::/api/videosort/37?page={{page}}\n口交自慰::/api/videosort/63?page={{page}}\n精油汗汁::/api/videosort/62?page={{page}}\n角色扮演::/api/videosort/27?page={{page}}\n魔镜系列::/api/videosort/54?page={{page}}\n重咸口味::/api/videosort/48?page={{page}}\n三级电影:/api/videosort/46?page={{page}}\n家庭乱伦::/api/videosort/57?page={{page}}\nAV欧美::/api/videosort/36?page={{page}}\n恐怖情色::/api/videosort/51?page={{page}}\n酒店偷拍::/api/videosort/67?page={{page}}",
    "sourceGroup": "版本",
    "sourceIcon": "https://i1.wp.com/i.postimg.cc/wjL5myHr/kpptube-cc-3e997cb42a6b0f37af6c6a40866ba202.gif",
    "sourceName": "3.7",
    "sourceUrl": "https://api.cmapiaba.xyz/",
    "style": ".container {\n    position: relative; /* 相对定位，用于包含视频 */\n    height: 100%; /* 容器高度与视频原始高度相同 */\n    overflow: hidden; /* 隐藏超出容器的部分 */\n}\n.title {\n    position: absolute; /* 绝对定位，相对于容器 */\n    top: 0; \n    width: 100%;\n    overflow: hidden; \n    text-overflow: ellipsis;\n    display: -webkit-box;\n    -webkit-box-orient: vertical; \n    -webkit-line-clamp: 2;\n    z-index: 1; /* 确保标题在视频之上 */\n    background: #000; /* 纯黑色背景 */ \n    padding: 0 0 3px 0;\n}\nvideo {\n    position: absolute; /* 绝对定位，相对于容器 */ \n    top: -65px; /* 上移80px */\n    left: 0; \n    width: 100%; \n    height: calc(96% + 65px);  /* 调整高度以适应内容 */\n    object-fit: contain; /* 确保视频内容不被裁剪 */\n    z-index: 0; /* 确保视频在标题之下 */\n    controls=\"controls\" autoplay muted; \n} \n"
  },
  {
    "articleStyle": 0,
    "customOrder": 518,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": true,
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "singleUrl": true,
    "sourceGroup": "版本",
    "sourceIcon": "天",
    "sourceName": "3.8",
    "sourceUrl": "http://www.hjtaotu.com/chis/gufeng/1.html"
  },
  {
    "articleStyle": 2,
    "customOrder": 519,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": true,
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "ruleArticles": "//div.list-com/a",
    "ruleContent": "//ul/li",
    "ruleImage": "//img@src##.*?<img src=\"(.*?)\".*?##$1###@js:header={\"Referer\":baseUrl}\nheaders={\"headers\":JSON.stringify(header)}\nresult=result+','+JSON.stringify(headers)",
    "ruleLink": "href",
    "ruleNextPage": "page",
    "rulePubDate": "//img@src##.*?<img src=\"https://imgfzone.tooopen.com/(.*?)/.*?.jpg\".*?##$1###",
    "ruleTitle": "//text()",
    "singleUrl": false,
    "sortUrl": "",
    "sourceComment": "",
    "sourceGroup": "版本",
    "sourceIcon": "天",
    "sourceName": "3.9",
    "sourceUrl": "https://desk.tooopen.com/beauty_3<,_{{page}}>.html"
  },
  {
    "articleStyle": 2,
    "customOrder": 520,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": false,
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "ruleArticles": "//div.list-com/a",
    "ruleContent": "//ul/li",
    "ruleImage": "//img@src##.*?<img src=\"(.*?)\".*?##$1###@js:header={\"Referer\":baseUrl}\nheaders={\"headers\":JSON.stringify(header)}\nresult=result+','+JSON.stringify(headers)",
    "ruleLink": "href",
    "ruleNextPage": "page",
    "rulePubDate": "//img@src##.*?<img src=\"https://imgfzone.tooopen.com/(.*?)/.*?.jpg\".*?##$1###",
    "ruleTitle": "//text()",
    "singleUrl": false,
    "sortUrl": "",
    "sourceComment": "",
    "sourceGroup": "版本",
    "sourceIcon": "天",
    "sourceName": "4.0",
    "sourceUrl": "https://desk.tooopen.com/artphoto_3<,_{{page}}>.html"
  },
  {
    "articleStyle": 0,
    "customOrder": 521,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": true,
    "header": "{\n\t\"User-Agent\": \"Mozilla/5.0 (Linux; Android 9) Mobile Safari/537.36\",\"referer\": \"{{baseUrl}}\"\n\t}",
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "ruleArticles": ".picstyle ul li||.threadlist ul li",
    "ruleContent": ".bz_message_table@all&&link@all&&script@all",
    "ruleImage": "img@src",
    "ruleLink": "a@href",
    "ruleNextPage": "text.下一页@href",
    "rulePubDate": "span!0@text##\\s##😁",
    "ruleTitle": "span.0@text",
    "singleUrl": false,
    "sortUrl": "网友自拍::https://qp.tangse95.one/forum.php?mod=forumdisplay&fid=6&mobile=2\n有声小说::https://qp.tangse95.one/forum.php?mod=forumdisplay&fid=45&mobile=2\n国产自拍::https://qp.tangse95.one/forum.php?mod=forumdisplay&fid=18&mobile=2\n校园春色::https://qp.tangse95.one/forum.php?mod=forumdisplay&fid=14&mobile=2\n搜索::https://qp.tangse95.one/search.php?mod=forum&searchid=243&orderby=lastpost&ascdesc=desc&searchsubmit=yes&kw={{(source.getVariable()==''||source.getVariable()==null)?source.setVariable('妹妹'):\"\"}}{{source.getVariable()}}&mobile=2",
    "sourceComment": "https://96tang.club",
    "sourceGroup": "版本",
    "sourceIcon": "天",
    "sourceName": "4.1",
    "sourceUrl": "https://qp.tangse95.one"
  },
  {
    "articleStyle": 0,
    "customOrder": 522,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": false,
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "singleUrl": true,
    "sourceComment": "",
    "sourceGroup": "版本",
    "sourceIcon": "https://m.acgnfl.com/24/07/content_33/525867/087.webp",
    "sourceName": "4.2推荐",
    "sourceUrl": "https://xrhf.taimei-t140.vip/"
  },
  {
    "articleStyle": 1,
    "customOrder": 523,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": true,
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "ruleArticles": "article",
    "ruleContent": ".Content@img@src\n<js>\nli='\\n'\nlist=result.split('\\n')\nfor(i in list){\n\t\tli += '<li><img src=\"https://i01piccdn.sogoucdn.com/b9e03099a48fd4ad\" data-src=\"'+list[i]+'\"></li>\\n'\n\t}\nli\n</js>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0\">\n\n\n<ul id=\"box\">\n{{result}}\n</ul>\n\n\n<link rel=\"stylesheet\" href=\"https://cdn.bootcdn.net/ajax/libs/viewerjs/1.10.1/viewer.min.css\">\n<script src=\"https://cdn.bootcdn.net/ajax/libs/viewerjs/1.10.1/viewer.min.js\"></script>\n<script>\n\troot = document.getElementById('box')\n\tlazy = new IntersectionObserver(entires => {\n\t\tentires.forEach(item => {\n\t\t\tif(item.isIntersecting){\n\t\t\t\titem=item.target\n\t\t\t\titem.src=item.getAttribute('data-src')\n\t\t\t\tlazy.unobserve(item)\n\t\t\t}\n\t\t})\n\t}, {\n\t\troot: root,\n\t\tthreshold: [0],\n\t\trootMargin:\"0px 0px 500px 0px\"\n\t})\n\nimgs = document.getElementsByTagName('img')\nArray.from(imgs).forEach(item => {\n\t\tlazy.observe(item)\n\t})\n\n//查看大图插件\nnew Viewer(root,{title:false,interval:3000})\n</script>",
    "ruleImage": "img@src",
    "ruleLink": "a@href",
    "ruleNextPage": ".pagelist@a@href",
    "ruleTitle": "h2@text",
    "singleUrl": false,
    "sortUrl": "首页::/\n肉丝 ::/tags-rousi-9sw.html\n黑丝 ::/tags-heisi-z2n.html\n白丝 ::/tags-baisi-v9l.html\n灰丝 ::/tags-huisi-z20.html\n咖丝 ::/tags-kasi-um6.html\n网袜 ::/tags-wangwa-18v.html",
    "sourceComment": "专注分享高清无水印的丝袜写真",
    "sourceGroup": "版本",
    "sourceIcon": "天",
    "sourceName": "4.3",
    "sourceUrl": "https://siwake.cc/",
    "style": "* {\n\tmargin: 0;\n\tpadding: 0\n}\nul {\n\tfont-size: 0;\n\theight: 100%;\n\toverflow-y: scroll\n}\nli {\n\tlist-style: none;\n\ttext-align: center\n}\nimg {\n\twidth: 98%;\n\theight: auto;\n\tpadding: 1% 1% 0 1%\n}"
  },
  {
    "articleStyle": 0,
    "customOrder": 524,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": false,
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "ruleArticles": "class.pb@tag.div",
    "ruleDescription": "",
    "ruleImage": "class.focus@tag.span@tag.img@src",
    "ruleNextPage": "class.pagination pagination-multi@class.next-page@tag.a@href",
    "rulePubDate": "class.text-muted time.0@text##发布于:",
    "ruleTitle": "class.excerpt excerpt-one.0@tag.header@tag.a@text",
    "singleUrl": true,
    "sourceGroup": "版本",
    "sourceIcon": "https://www.xx3004.vip/wp-content/themes/xiu/images/wap-logo.png",
    "sourceName": "4.4",
    "sourceUrl": "https://www.san421.com/meinv"
  },
  {
    "articleStyle": 2,
    "concurrentRate": "",
    "customOrder": 525,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": false,
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "loginUrl": "",
    "ruleArticles": "id.main@tag.li||$",
    "ruleContent": "id.allbtn@text##展开全图\\(1/|\\)\n<js>\nn=Number(result)+1\nu='{{@@id.nowimg@src##1\\.jpg$}}'\n\nlist='\\n'\nfor(i=1;i<n;i++){\n\t\tlist += '<li><img src=\"https://www.tuiimg.com/images/logo.png\" data-src=\"'+u+i+'.jpg\"></li>\\n'\n\t}\nlist\n</js>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0\">\n\n\n<ul id=\"box\">\n{{result}}\n</ul>\n\n\n<link rel=\"stylesheet\" href=\"https://cdn.bootcdn.net/ajax/libs/viewerjs/1.10.1/viewer.min.css\">\r\n<script src=\"https://cdn.bootcdn.net/ajax/libs/viewerjs/1.10.1/viewer.min.js\"></script>\n<script>\n\troot = document.getElementById('box')\n\tlazy = new IntersectionObserver(entires => {\n\t\tentires.forEach(item => {\n\t\t\tif(item.isIntersecting){\n\t\t\t\titem=item.target\n\t\t\t\titem.src=item.getAttribute('data-src')\n\t\t\t\tlazy.unobserve(item)\n\t\t\t}\n\t\t})\n\t}, {\n\t\troot: root,\n\t\tthreshold: [0],\n\t\trootMargin:\"0px\"\n\t})\n\nimgs = document.getElementsByTagName('img')\nArray.from(imgs).forEach(item => {\n\t\tlazy.observe(item)\n\t})\n\n//查看大图插件\nnew Viewer(root,{title:false,interval:3000})\n</script>",
    "ruleImage": "tag.img@realsrc\n@js:\nresult?result:'https://i.tuiimg.net/{{$.catalog}}/{{$.id}}/mc.jpg'",
    "ruleLink": "tag.a@href\n@js:\nresult?result:'https://m.tuiimg.com/meinv/{{$.id}}/'",
    "ruleNextPage": "page",
    "rulePubDate": "{{$.time}}{{@@tag.span.0@text## 发布}} 发布　　喜欢({{$.love}}{{@@tag.span.1@text##(\\d+)##$1###}})",
    "ruleTitle": "tag.h2@text||$.title",
    "singleUrl": false,
    "sortUrl": "首页最新::https://m.tuiimg.com/data.php?page={{page}}\n性感美女::https://m.tuiimg.com/xingganmeinv/list_{{page}}.html\n清纯美女::https://m.tuiimg.com/qingchunmeinv/list_{{page}}.html\n妹子图集::https://m.tuiimg.com/meizitu/list_{{page}}.html\n美女写真::https://m.tuiimg.com/meinvxiezhen/list_{{page}}.html\n\n\n//标签\n美胸::https://m.tuiimg.com/tag/meixiong/list_{{page}}.html\n美臀::https://m.tuiimg.com/tag/meitun/list_{{page}}.html\n美腿::https://m.tuiimg.com/tag/meitui/list_{{page}}.html\n妩媚::https://m.tuiimg.com/tag/wumei/list_{{page}}.html\n爆乳::https://m.tuiimg.com/tag/baoru/list_{{page}}.html\n诱惑::https://m.tuiimg.com/tag/youhuo/list_{{page}}.html\n丰满::https://m.tuiimg.com/tag/fengman/list_{{page}}.html\n可爱::https://m.tuiimg.com/tag/keai/list_{{page}}.html\n嫩模::https://m.tuiimg.com/tag/nenmo/list_{{page}}.html\n甜美::https://m.tuiimg.com/tag/tianmei/list_{{page}}.html\n萌妹::https://m.tuiimg.com/tag/mengmei/list_{{page}}.html\n\n\n//平台\nROSI::https://m.tuiimg.com/rosi/list_{{page}}.html\n秀人网::https://m.tuiimg.com/xiuren/list_{{page}}.html\n尤蜜荟::https://m.tuiimg.com/tag/youmihui/list_{{page}}.html\n尤果网::https://m.tuiimg.com/tag/ugirls/list_{{page}}.html\n美媛馆::https://m.tuiimg.com/tag/myg/list_{{page}}.html\n魅妍社::https://m.tuiimg.com/tag/mistar/list_{{page}}.html\n爱蜜社::https://m.tuiimg.com/tag/imiss/list_{{page}}.html\n蜜桃社::https://m.tuiimg.com/tag/miitao/list_{{page}}.html\n模范学院::https://m.tuiimg.com/tag/mfstar/list_{{page}}.html\n尤物馆::https://m.tuiimg.com/tag/youwu/list_{{page}}.html\n星颜社::https://m.tuiimg.com/tag/xingyan/list_{{page}}.html\n嗲囡囡::https://m.tuiimg.com/tag/feilin/list_{{page}}.html\n花の颜::https://m.tuiimg.com/tag/huayan/list_{{page}}.html\n御女郎::https://m.tuiimg.com/tag/dkgirl/list_{{page}}.html\n花漾::https://m.tuiimg.com/tag/huayang/list_{{page}}.html\n网红馆::https://m.tuiimg.com/tag/candy/list_{{page}}.html\n第四印象::https://m.tuiimg.com/tag/disi/list_{{page}}.html\n头条女神::https://m.tuiimg.com/tag/toutiaogirls/list_{{page}}.html\n\n\n//更多分类请自己添加\n//https://m.tuiimg.com/tag/",
    "sourceComment": "v0.2\n更改正文模板\n优化key的获取\n\n\n原图标\nhttps://m.tuiimg.com/favicon.ico\n\n\n分类URL\n综合全部::https://m.tuiimg.com/meinv/list_{{page}}.html\n变量搜索::https://m.tuiimg.com/search/list_{{page}}.html,{'method':'POST','body': 'skey={{v=source.getVariable();(v!='',v!=null)?v:(source.setVariable('三度'),source.getVariable())}}'}",
    "sourceGroup": "版本",
    "sourceIcon": "天",
    "sourceName": "4.5",
    "sourceUrl": "@js:\npage=org.jsoup.Jsoup.parse(\n\tjava.ajax('https://m.tuiimg.com/meinv')\n).select('.end').attr('href').match(/\\d+/)[0]\n'https://m.tuiimg.com/meinv/list_' + Math.ceil(Math.random()*page) + '.html'",
    "style": "* {\n\tmargin: 0;\n\tpadding: 0\n}\nul {\n\tfont-size: 0;\n\theight: 100%;\n\toverflow-y: scroll\n}\nli {\n\tlist-style: none;\n\ttext-align: center\n}\nimg {\n\twidth: 100%;\n\theight: auto\n}"
  },
  {
    "articleStyle": 2,
    "customOrder": 526,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": true,
    "header": "{\"User-Agent\": \"Mozilla/5.0 (Linux; Android 12; 22041211AC Build/SP1A.210812.016) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.104 Mobile Safari/537.36\"}",
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "ruleArticles": "[class=\"embed-responsive embed-responsive-16by9-rotating position-relative\"]",
    "ruleContent": "<js>\np=String(result.match(/contentUrl\":\"(.*.m3u8)\",/)[1]).replace(/\\\\/g,\"\");\n pi=java.getString('ol@li.-1@text')||1;\n`<html>\n    <head>\n        <meta name=\"viewport\" content=\"width=device-width\">\n        <style>\n            body {\n                margin: 0;\n                font-family: Arial, sans-serif;\n                background: linear-gradient(135deg, #ece9e6, #ffffff);\n                display: flex;\n                flex-direction: column;\n                align-items: center;\n                justify-content: flex-start;\n                padding: 20px;\n            }\n            .container {\n                width: 100%;\n                max-width: 800px;\n                background: #fff;\n                border-radius: 10px;\n                box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);\n                overflow: hidden;\n                margin-bottom: 20px;\n            }\n            h3 {\n                margin: 0;\n                padding: 10px 20px;\n                font-size: 0.9em;\n                background: #333;\n                color: #fff;\n                border-radius: 10px 10px 0 0;\n            }\n            .video-container {\n                width: 100%;\n                background: #000;\n                position: relative;\n            }\n            video {\n                width: 100%;\n                height: auto;\n                display: block;\n            }\n            .info-container {\n                padding: 20px;\n            }\n            .info-container p {\n                margin: 10px 0;\n                color: #555;\n            }\n            .info-container p span {\n                font-weight: bold;\n                color: #000;\n            }\n        </style>\n    </head>\n    <body>\n        <div class=\"container\">\n        <h3><title>👤Mengteen</title>🏷${pi}</h3>\n            <div class=\"video-container\">\n                <video controls autoplay name=\"media\" id=\"videoPlayer\">\n                    <source src=\"${p}\" type=\"video/mp4\">\n                </video>\n            </div>\n            <div class=\"info-container\">\n                \n            </div>\n        </div>\n\n        <script>\n            // 获取视频元素\n            const video = document.getElementById('videoPlayer');\n            let touchStartX = 0;\n            let touchStartY = 0;\n            let touchStartTime = 0;\n            let isLongPress = false;\n\n            // 滑动快进\n            video.addEventListener('touchstart', (e) => {\n                touchStartX = e.touches[0].clientX;\n                touchStartY = e.touches[0].clientY;\n                touchStartTime = Date.now();\n                isLongPress = false;\n            });\n\n            video.addEventListener('touchmove', (e) => {\n                const deltaX = e.touches[0].clientX - touchStartX;\n                const deltaY = e.touches[0].clientY - touchStartY;\n\n                // 如果是水平滑动，且未进入长按状态\n                if (Math.abs(deltaX) > Math.abs(deltaY) && !isLongPress) {\n                    const duration = video.duration;\n                    const seekTime = video.currentTime + (deltaX / 100); // 每滑动100px快进1秒\n                    video.currentTime = Math.min(Math.max(seekTime, 0), duration);\n                }\n            });\n\n            // 长按快进\n            video.addEventListener('touchend', (e) => {\n                const touchEndTime = Date.now();\n                const touchDuration = touchEndTime - touchStartTime;\n\n                // 如果长按时间超过500ms，进入长按快进状态\n                if (touchDuration > 500) {\n                    isLongPress = true;\n\n                    // 在长按状态下，根据滑动距离快进\n                    const deltaX = e.changedTouches[0].clientX - touchStartX;\n                    const duration = video.duration;\n                    const seekTime = video.currentTime + (deltaX / 100); // 每滑动100px快进1秒\n                    video.currentTime = Math.min(Math.max(seekTime, 0), duration);\n                } else {\n                    isLongPress = false;\n                }\n            });\n\n            // 防止默认行为（如页面滚动）\n            video.addEventListener('touchmove', (e) => {\n                e.preventDefault();\n            });\n        </script>\n    </body>\n</html>`;\n\n</js>",
    "ruleImage": "img@src",
    "ruleLink": "a.0@href##(\\d+)##/$1###",
    "ruleNextPage": "page",
    "rulePubDate": "🏷{{@@class.badge badge-success@text}}｜📆{{@@span@text}}",
    "ruleTitle": "img@alt",
    "singleUrl": false,
    "sortUrl": "首页::/p/1/c/33?page={{page}}\n搜索::/q/{{(source.getVariable()==''||source.getVariable()==null)?source.setVariable('年轻'):source.getVariable()}}?page={{page}}\n国内伦理::/p/1/c/33?area_id=2&page={{page}}\n香港伦理::/p/1/c/33?area_id=5&page={{page}}\n台湾伦理::/p/1/c/33?area_id=4&page={{page}}\n韩国伦理::/p/1/c/33?area_id=17&page={{page}}\n日本伦理::/p/1/c/33?area_id=18&page={{page}}\n欧美伦理::/p/1/c/33?area_id=6&page={{page}}\n其它伦理::/p/1/c/33?area_id=3&page={{page}}\n泰国伦理::/p/1/c/33?area_id=10&page={{page}}\n印度伦理::/p/1/c/33?area_id=14&page={{page}}",
    "sourceComment": "源社区：@Mengteen\n二传或者是其它问题请@我并告知我",
    "sourceGroup": "版本",
    "sourceIcon": "天",
    "sourceName": "4.6",
    "sourceUrl": "https://ptt.co/zh-cn/##@Mengteen",
    "style": "iframe{\n\theight:600px\n}\ntitle{\n\tdisplay:block\n}"
  },
  {
    "articleStyle": 1,
    "customOrder": 527,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": false,
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "ruleArticles": "$.list",
    "ruleDescription": "<br><h3>{{$.vod_name}}</h3>\n<h6>[{{$.vod_score}}分] [{{$.vod_class ##\\,##] [}}]<b>发布于 {{$.vod_time}}</b></h6>\n\n<video src=\"{{$.vod_play_url ##^.*?\\$}}\" poster=\"{{$.vod_pic}}\" controls></video>",
    "ruleImage": "$.vod_pic",
    "ruleLink": "/api.php/provide/vod/?ac=detail&ids={{$.vod_id}}",
    "ruleNextPage": "page",
    "rulePubDate": "⏱️ {{$.vod_duration}}　{{$.vod_score}}分　{{$.vod_time}}",
    "ruleTitle": "$.vod_name",
    "singleUrl": false,
    "sortUrl": "精品推荐::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=20\n🔎 视频搜索::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&wd={{source.getVariable()}}\n国产视频::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=22\n主播直播::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=23\n日本无码::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=24\n日本有码::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=25\n中文字幕::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=26\n巨乳美乳::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=27\n制服丝袜::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=34\n角色扮演::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=35\n熟女人妻::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=28\n强奸乱伦::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=29\n欧美精品::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=30\n少女萝莉::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=31\n三级伦理::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=32\n成人动漫::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=33\n自拍偷拍::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=34\n制服丝袜::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=35\n口交颜射::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=36\n日本精品::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=37\nCosplay::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=38\n素人自拍::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=39\n台湾辣妹::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=40\n韩国御姐::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=41\n唯美港姐::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=42\n东南亚AV::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=43\n欺辱凌辱::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=44\n剧情介绍::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=45\n多人多P::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=46\n91探花::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=47\n网红流出::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=48\n野外露出::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=49\n古装扮演::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=50\n女优系列::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=51\n可爱学生::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=52\n风情旗袍::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=53\n兽耳系列::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=54\n瑜伽裤::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=55\n闷骚护士::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=56\n过膝袜::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=57\n网爆门::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=58\n传媒出品::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=59\n女同性恋::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=60\n男同性恋::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=61\n练腿狂魔::https://slapibf.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=63",
    "sourceComment": "★源URL的填写链接为【list】格式\n\t网站网址\n\t网站网址/api.php/provide/vod/?ac=【list】\n\n例：\nhttps://apittzy.com\nhttps://apittzy.com/api.php/provide/vod/?ac=list\n\nps：\n\t使用【list】格式查看分类和分类id以组成分类URL\n\n\n\n★分类URL的填写链接为【detail】格式\n\t视频搜索::网站网址/api.php/provide/vod/?ac=【detail】&pg={{page}}&wd=关键词\n\t分类名称::网站网址/api.php/provide/vod/?ac=【detail】&pg={{page}}&t=分类id\n\n例：\n\t视频搜索::https://apittzy.com/api.php/provide/vod/?ac=detail&pg={{page}}&wd=按摩\n\t精品推荐::https://apittzy.com/api.php/provide/vod/?ac=detail&pg={{page}}&t=1\n\nps：\n\t分类URL写成【list】格式也行，但是没有详细信息。需要通过正文链接跳转正文页再填写正文规则。而且没有封面！\n\n\n\n★正文规则\n\t因为分类URL使用了【detail】格式，需要的信息都显示了。(视频链接)\n\t所以我们在描述规则填写正文规则就行了，这样子就省的再跳转一次正文链接了。\n\t但是链接规则还是要写的，不然不会加载列表。\n\n\n\n☆【vod】和【art】\n视频分类链接为【vod】格式\n\t网站网址/api.php/provide/vod/?ac=list\n图文分类链接为【art】格式\n\t网站网址/api.php/provide/art/?ac=list\n通过【list】格式查看分类和分类id以组成分类URL\n\nps：\n\t图片和小说链接都是【art】格式，这样子不好分割，建议把小说分类相关链接移除\n\t因为【art】格式的【detail】链接并不会显示全部套图，所以需要填写正确的链接规则跳转正文页再填写正文规则而不是直接在描述规则处填写规则\n\n\n\n☆详情页链接规则\n\t详情页链接仅支持【detail】格式\n网站网址/api.php/provide/(vod/art)/?ac=detail&ids=(视频id/图文id)\n\n\t如果分类URL只填写了网址，那么链接规则补充剩下的链接就行了\n例：\n\t/api.php/provide/vod/?ac=detail&ids=视频id\n❗仅限【vod】/【art】单格式使用\n\n\t如果订阅同时写了【vod】和【art】两种格式，链接就需要使用js判定\n@js:\nif(baseUrl.match(/art/)){\n\t网站网址/api.php/provide/art/?ac=detail&ids={{$.art_id}}\n}else{\n\t网站网址/api.php/provide/vod/?ac=detail&ids={{$.vod_id}}\n}\nps：\n\t使用两种格式时，此js在正文规则也会需要用到。\n\n\n\n\n\n‼️以下网址加上【list】链接可更改为json格式，查看分类及分类id\n\n\t因为json链接格式固定？\n\t所以修改一下网站之间的分类URL差别即可使用此订阅格式套用，，，大概\n\nps：\n\t注意【list】和【detail】格式以及【vod】和【art】链接的差别\n\n\n共30个网址：\n\n\t★鲨鱼::https://shayuapi.com\n\t\tps：老朋友了\n\n\n\t老鸭资源失效::http://laoyazy50.cc\n\t\tps：网站有时效性？\n\n\n\t老鸭资源2失效::https://api.apilyzy.com\n\n\n\n\t水蜜桃失效::http://51smt4.xyz\n\n\n\t99资源失效::http://99zy.pw\n\n\n\t99资源吧失效::http://99zyba.com\n\n\n\t丝袜资源失效::http://siwazyw.net\n\n\n\t浪潮资源失效::http://langchaozy6.com\n\n\n\tCK资源失效::http://www.feifei67.com\n\n\n\t大雕资源失效::http://www.dd-01.com\n\n\n\t银龙资源失效::https://yinlong.tv\n\n\n\t苍天资源失效::http://cj.cangtiancj.com\n\n\n\t骚色资源失效::http://api.saosezy.icu\n\n\n\t芒果资源失效::https://mgzyz1.com\n\n\n\t酷豆资源失效::https://kudouzy.com\n\n\n\t酷伦理资源失效::https://api.kudian70.com\n\n\n\t速播资源失效::https://api.suboapi.com\n\n\n\t国产精品::https://zy.difi.life\n\n\n\t痴汉队长失效::https://javcaptain.com\n\n\n\t秀色资源失效::https://api.xiuseapi.com\n\n\n\t苹果资源失效::https://www.pg111222.com\n\n\n\t茄子资源失效::http://www.qiezizy8.com\n\n\n\t辣椒资源失效::https://www.lajiaozy18.com\n\n\n\t花椒资源失效::https://apihjzy.com/api.php/provide/vod/?ac=list\n\t\tps：网站无法打开，json链接可以\n\n\n\t桃色资源失效::https://api.taoseapi.com/api.php/provide/vod/?ac=list\n\t\tps：网站无法打开，json链接可以\n\n\n\t乐播资源::https://lbapi9.com/api.php/provide/vod/?ac=list\n\t\tps：网站无法打开，json链接可以\n\n\n\t佳丽资源失效::https://jializyzapi.com/api.php/provide/vod/?ac=list\n\t\tps：网站无法打开，json链接可以\n\n\n\t番号资源::http://fhapi9.com/api.php/provide/vod/?ac=list\n\t\tps：网站无法打开，json链接可以\n\n\n\tx8优酷失效::https://gov.gooder.bar\n\t\tps：没有vod格式？\n\n\n\t土狗采集失效::http://vip-04.tgzy.cc\n\t\tpa：vod格式好像是音乐？\n\n\n\n☆使用【vod】和【art】两种链接的正文规则参考\n<br><h3>{{$.list..vod_name||$.list..art_name}}</h3>\n<h6>[{{$.list..type_name}}]<b>发布于 {{$.list..vod_time||$.list..art_time}}</b></h6>\n\n<video src=\"{{$.list..vod_play_url ##^.*?\\$}}\" poster=\"{{$.list..vod_pic}}\" controls>视频加载失败</video>\n\n<div id=\"TúPiàn\">\n{{$.list..art_content ##</?(br|p)>}}\n</div>\n<link rel=\"stylesheet\" href=\"https://cdn.bootcdn.net/ajax/libs/viewerjs/1.10.2/viewer.min.css\">\n<script src=\"https://cdn.bootcdn.net/ajax/libs/viewerjs/1.10.2/viewer.min.js\"></script>\n<script>\n  new Viewer(\n    document.getElementById(\"TúPiàn\")    ,{\n//设置图片地址来源\n    url: 'src',\n//是否显示图片标题(true/false)\n    title: false,\n//设置播放间隔(单位毫秒，1秒=1000毫秒)\n    interval: 3000\n    }\n  );\n</script>\n\n@js:\nif(baseUrl.match(/art/)){\n\tresult.replace(/<vid[\\s\\S]+deo>/,'')\n}else{\n\tresult.replace(/<div[\\s\\S]+ipt>/,'')\n}",
    "sourceGroup": "版本",
    "sourceIcon": "https://i.postimg.cc/sXtXHZDM/IMG_20220716_190738.png",
    "sourceName": "4.7",
    "sourceUrl": "https://slapibf.com/api.php/provide/vod/?ac=list",
    "style": "h3{text-align:center}\nh6{margin-bottom:0}\nb{float:right}\n\nvideo{width:100%;max-height:285px;border-radius:5px}"
  },
  {
    "articleStyle": 0,
    "customOrder": 528,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": false,
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "singleUrl": true,
    "sourceGroup": "版本",
    "sourceIcon": "天",
    "sourceName": "4.8",
    "sourceUrl": "https://www.xn--vctr31ecwaz4k.com/"
  },
  {
    "articleStyle": 1,
    "customOrder": 529,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": true,
    "header": "@js:\nJSON.stringify({\n  'User-Agent': \"Mozilla/5.0 (Linux; Android 15; V2304A Build/AP3A.240905.015.A2; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/132.0.6834.163 Mobile Safari/537.36\",\n  'sec-ch-ua-platform': \"\\\"Android\\\"\",\n  'X-Requested-With': \"XMLHttpRequest\",\n  'Referer': \"https://cn.royalcams.com/female/tags/recordable\",\n  'Connection':\"keep-alive\",\n  'Accept-language': \"zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7\"\n})",
    "lastUpdateTime": 1771719337202,
    "loadWithBaseUrl": true,
    "ruleArticles": "models[*]",
    "ruleImage": "{$.thumb_image}@js:result.replace(/{ext}/g, 'jpg')",
    "ruleLink": "https://{$.esid}.bcvcdn.com/hls/stream_{$.username}/playlist.m3u8",
    "ruleNextPage": "page",
    "rulePubDate": "👥 观众: {$.viewers}⭐ 粉丝: {$.f}",
    "ruleTitle": "$.display_name",
    "singleUrl": false,
    "sortUrl": "所有::https://cn.royalcams.com/tools/listing_v3.php?livetab=female&is_mobile=true&offset={{(page-1)*36}}&limit=36\n青少年18::https://cn.royalcams.com/tools/listing_v3.php?livetab=female&is_mobile=true&offset={{(page-1)*36}}&limit=36&category=teens-18\n中等乳房::https://cn.royalcams.com/tools/listing_v3.php?livetab=female&is_mobile=true&offset={{(page-1)*36}}&limit=36&category=medium-tits\n波霸::https://cn.royalcams.com/tools/listing_v3.php?livetab=female&is_mobile=true&offset={{(page-1)*36}}&limit=36&category=big-tits\n超级波霸::https://cn.royalcams.com/tools/listing_v3.php?livetab=female&is_mobile=true&offset={{(page-1)*36}}&limit=36&category=huge-tits\n主妇::https://cn.royalcams.com/tools/listing_v3.php?livetab=female&is_mobile=true&offset={{(page-1)*36}}&limit=36&category=housewives\n亚洲::https://cn.royalcams.com/tools/listing_v3.php?livetab=female&is_mobile=true&offset={{(page-1)*36}}&limit=36&category=asian\n无毛::https://cn.royalcams.com/tools/listing_v3.php?livetab=female&is_mobile=true&offset={{(page-1)*36}}&limit=36&category=shaved-pussy\n大学生::https://cn.royalcams.com/tools/listing_v3.php?livetab=female&is_mobile=true&offset={{(page-1)*36}}&limit=36&category=college-girls\n大屁股::https://cn.royalcams.com/tools/listing_v3.php?livetab=female&is_mobile=true&offset={{(page-1)*36}}&limit=36&category=big-ass\n白人女孩::https://cn.royalcams.com/tools/listing_v3.php?livetab=female&is_mobile=true&offset={{(page-1)*36}}&limit=36&category=white-girls\n娇小体型::https://cn.royalcams.com/tools/listing_v3.php?livetab=female&is_mobile=true&offset={{(page-1)*36}}&limit=36&category=petite\n平胸::https://cn.royalcams.com/tools/listing_v3.php?livetab=female&is_mobile=true&offset={{(page-1)*36}}&limit=72&category=small-tits\n拉丁裔::https://cn.royalcams.com/tools/listing_v3.php?livetab=female&is_mobile=true&offset={{(page-1)*36}}&limit=36&category=latina\n捆绑::https://cn.royalcams.com/tools/listing_v3.php?livetab=female&is_mobile=true&offset={{(page-1)*36}}&limit=36&category=bondage\n曲线美::https://cn.royalcams.com/tools/listing_v3.php?livetab=female&is_mobile=true&offset={{(page-1)*36}}&limit=36&category=curvy\n潮喷::https://cn.royalcams.com/tools/listing_v3.php?livetab=female&is_mobile=true&offset={{(page-1)*36}}&limit=36&category=squirt\n熟女::https://cn.royalcams.com/tools/listing_v3.php?livetab=female&is_mobile=true&offset={{(page-1)*36}}&limit=36&category=mature\n物神::https://cn.royalcams.com/tools/listing_v3.php?livetab=female&is_mobile=true&offset={{(page-1)*36}}&limit=36&category=fetish\n玩具::https://cn.royalcams.com/tools/listing_v3.php?livetab=female&is_mobile=true&offset={{(page-1)*36}}&limit=36&category=toys\n红发::https://cn.royalcams.com/tools/listing_v3.php?livetab=female&is_mobile=true&offset={{(page-1)*36}}&limit=36&category=redhead\n肛交::https://cn.royalcams.com/tools/listing_v3.php?livetab=female&is_mobile=true&offset={{(page-1)*36}}&limit=36&category=anal\n褐色女郎::https://cn.royalcams.com/tools/listing_v3.php?livetab=female&is_mobile=true&offset={{(page-1)*36}}&limit=36&category=brunette\n辣妹::https://cn.royalcams.com/tools/listing_v3.php?livetab=female&is_mobile=true&offset={{(page-1)*36}}&limit=36&category=babes\nBBW::https://cn.royalcams.com/tools/listing_v3.php?livetab=female&is_mobile=true&offset={{(page-1)*36}}&limit=36&category=bbw\n多人::https://cn.royalcams.com/tools/listing_v3.php?livetab=couples&is_mobile=true&offset={{(page-1)*36}}&limit=36",
    "sourceGroup": "版本",
    "sourceIcon": "https://i.wlicdn.com/wl/000/000/193/c0c5540e263feee85fbb8da2b1a888ca.png",
    "sourceName": "4.9",
    "sourceUrl": "https://cn.royalcams.com"
  },
  {
    "articleStyle": 0,
    "customOrder": 530,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": true,
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "singleUrl": true,
    "sourceComment": "//:Mengteen",
    "sourceGroup": "版本",
    "sourceIcon": "天",
    "sourceName": "5.0",
    "sourceUrl": "https://jiejie.uk/xjj/fuli/"
  },
  {
    "articleStyle": 2,
    "customOrder": 531,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": false,
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "ruleArticles": ".main@li",
    "ruleContent": "all##ul##details",
    "ruleImage": "img@realsrc",
    "ruleLink": "a@href",
    "ruleNextPage": "page",
    "rulePubDate": "{{@@.love@text}} {{@@span@text}}",
    "ruleTitle": "a@text",
    "singleUrl": false,
    "sortUrl": "性感美女::https://m.tuiimg.com/xingganmeinv/list_{{page}}.html\n清纯美女::https://m.tuiimg.com/qingchunmeinv/list_{{page}}.html\n妹子图::https://m.tuiimg.com/meizitu/list_{{page}}.html\n美女写真::https://m.tuiimg.com/meinvxiezhen/list_{{page}}.html",
    "sourceComment": "",
    "sourceGroup": "版本",
    "sourceIcon": "天",
    "sourceName": "5.1",
    "sourceUrl": "https://m.tuiimg.com"
  },
  {
    "articleStyle": 0,
    "customOrder": 533,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": false,
    "header": "{\n\"User-Agent\": \"Mozilla/5.0 (Linux; U; Android 8.1.0; zh-CN; MI 8 Lite Build/OPM1.171019.019) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/78.0.3904.108 UCBrowser/13.2.0.1100 Mobile Safari/537.36\"\n}",
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "ruleArticles": "li",
    "ruleDescription": "",
    "ruleLink": "text.一键导入@onclick",
    "ruleNextPage": "",
    "rulePubDate": "span@text",
    "ruleTitle": "a@text",
    "singleUrl": true,
    "sourceGroup": "版本",
    "sourceIcon": "https://m.acgnfl.com/24/07/content_33/525867/007.webp",
    "sourceName": "5.2",
    "sourceUrl": "https://www.kxmanhua1.com/manga/library"
  },
  {
    "articleStyle": 2,
    "customOrder": 534,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": false,
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "ruleArticles": "class.item",
    "ruleContent": "<js>\n\nfunction getNext(){\n\n//下一页url，链接不全请补全\nnextUrl = java.getString('class.next@href')\n\n\n\n\t\tif(nextUrl!=\"\"){\n\t\t\t\tp++\n\t\tjava.toast('p'+p+'加载中...')\n\t\t\t\treturn getHtml()\n\t\t\t}\n\njava.toast('加载完成')\n\t\treturn result\n\t}\n\n\n\n\n\nfunction getHtml(){\ntry{\n\t\tajax = java.ajax(nextUrl)\n\t\tjava.setContent(ajax)\n\t\tresult += ajax\n\t\treturn getNext()\n\t}\n\n//ajax下一页报错时，会重新尝试两次。\n//超过三次失败就不再加载。\ncatch (err){\n\t\tif(e<4){\n\t\t\t\te++\n\t\t\tjava.toast('p'+p+'加载中...')\n\t\t\t\treturn getHtml()\n\t\t\t}\n\t\treturn result\n\t}\n}\n\np = e = 1\ngetNext()\n</js>\n\n\ntag.noscript@tag.img@src\n<js>\nli='\\n'\nlist=result.split('\\n')\nfor(i in list){\n\t\tli += '<li><img src=\"https://www.q10drfc.com/wp-content/themes/justnews/images/logo.png\" data-src=\"'+list[i]+'\"></li>\\n'\n\t}\nli\n</js>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0\">\n\n\n<ul id=\"box\">\n{{result}}\n</ul>\n\n\n<link rel=\"stylesheet\" href=\"https://cdn.bootcdn.net/ajax/libs/viewerjs/1.10.1/viewer.min.css\">\r\n<script src=\"https://cdn.bootcdn.net/ajax/libs/viewerjs/1.10.1/viewer.min.js\"></script>\n<script>\n\troot = document.getElementById('box')\n\tlazy = new IntersectionObserver(entires => {\n\t\tentires.forEach(item => {\n\t\t\tif(item.isIntersecting){\n\t\t\t\titem=item.target\n\t\t\t\titem.src=item.getAttribute('data-src')\n\t\t\t\tlazy.unobserve(item)\n\t\t\t}\n\t\t})\n\t}, {\n\t\troot: root,\n\t\tthreshold: [0],\n\t\trootMargin:\"0px\"\n\t})\n\nimgs = document.getElementsByTagName('img')\nArray.from(imgs).forEach(item => {\n\t\tlazy.observe(item)\n\t})\n\n//查看大图插件\nnew Viewer(root,{title:false,interval:3000})\n</script>",
    "ruleDescription": "",
    "ruleImage": "tag.img@src##.*src=|&.*",
    "ruleLink": "tag.a.0@href",
    "ruleNextPage": "class.next@href",
    "rulePubDate": "{{@@class.item-category@text}} &nbsp; {{@@class.item-meta-left@text}}",
    "ruleTitle": "class.item-title@text",
    "singleUrl": false,
    "sortUrl": "美女图片::https://www.q10drfc.com/category/mntp\n三度_69::https://www.q10drfc.com/tag/%e4%b8%89%e5%ba%a6_69\n\n变量搜索::https://www.q10drfc.com/?s={{v=source.getVariable();(v!='',v!=null)?v:(source.setVariable('青春'),source.getVariable())}}\n\n秀人网::https://www.q10drfc.com/category/mntp/%e7%a7%80%e4%ba%ba%e7%bd%91\n爱尤物::https://www.q10drfc.com/category/mntp/%e7%88%b1%e5%b0%a4%e7%89%a9\n语画界::https://www.q10drfc.com/category/mntp/%e8%af%ad%e7%94%bb%e7%95%8c\n花漾show::https://www.q10drfc.com/category/mntp/%e8%8a%b1%e6%bc%beshow\n模范学院::https://www.q10drfc.com/category/mntp/%e6%a8%a1%e8%8c%83%e5%ad%a6%e9%99%a2\n美媛馆::https://www.q10drfc.com/category/mntp/%e7%be%8e%e5%aa%9b%e9%a6%86\n喵糖映画::https://www.q10drfc.com/category/mntp/%e5%96%b5%e7%b3%96%e6%98%a0%e7%94%bb\n雅拉伊::https://www.q10drfc.com/category/mntp/%e9%9b%85%e6%8b%89%e4%bc%8a\n爱蜜社::https://www.q10drfc.com/category/mntp/%e7%88%b1%e8%9c%9c%e7%a4%be\n嗲囡囡::https://www.q10drfc.com/category/mntp/%e5%97%b2%e5%9b%a1%e5%9b%a1\n星颜社::https://www.q10drfc.com/category/mntp/%e6%98%9f%e9%a2%9c%e7%a4%be\n尤美::https://www.q10drfc.com/category/mntp/%e5%b0%a4%e7%be%8e\n尤蜜荟::https://www.q10drfc.com/category/mntp/%e5%b0%a4%e8%9c%9c%e8%8d%9f\n头条女神::https://www.q10drfc.com/category/mntp/%e5%a4%b4%e6%9d%a1%e5%a5%b3%e7%a5%9e\n糖果画报::https://www.q10drfc.com/category/mntp/%e7%b3%96%e6%9e%9c%e7%94%bb%e6%8a%a5\n魅妍社::https://www.q10drfc.com/category/mntp/%e9%ad%85%e5%a6%8d%e7%a4%be\n尤物馆::https://www.q10drfc.com/category/mntp/%e5%b0%a4%e7%89%a9%e9%a6%86\n蜜桃社::https://www.q10drfc.com/category/mntp/%e8%9c%9c%e6%a1%83%e7%a4%be\n花の颜::https://www.q10drfc.com/category/mntp/%e8%8a%b1%e3%81%ae%e9%a2%9c\nDK御女郎::https://www.q10drfc.com/category/mntp/dk%e5%be%a1%e5%a5%b3%e9%83%8e\n猫萌榜::https://www.q10drfc.com/category/mntp/%e7%8c%ab%e8%90%8c%e6%a6%9c\n尤果网::https://www.q10drfc.com/category/mntp/%e5%b0%a4%e6%9e%9c%e7%bd%91\n星乐园::https://www.q10drfc.com/category/mntp/%e6%98%9f%e4%b9%90%e5%9b%ad\n猎女神::https://www.q10drfc.com/category/mntp/%e7%8c%8e%e5%a5%b3%e7%a5%9e\n克拉女神::https://www.q10drfc.com/category/mntp/%e5%85%8b%e6%8b%89%e5%a5%b3%e7%a5%9e\n熊川纪信::https://www.q10drfc.com/category/mntp/%e7%86%8a%e5%b7%9d%e7%ba%aa%e4%bf%a1\n果团网::https://www.q10drfc.com/category/mntp/%e6%9e%9c%e5%9b%a2%e7%bd%91\n轰趴猫::https://www.q10drfc.com/category/mntp/%e8%bd%b0%e8%b6%b4%e7%8c%ab\n兔几盟::https://www.q10drfc.com/category/mntp/%e5%85%94%e5%87%a0%e7%9b%9f\n波萝社::https://www.q10drfc.com/category/mntp/%e6%b3%a2%e8%90%9d%e7%a4%be\n美腿宝贝::https://www.q10drfc.com/category/mntp/%e7%be%8e%e8%85%bf%e5%ae%9d%e8%b4%9d\n推女神::https://www.q10drfc.com/category/mntp/%e6%8e%a8%e5%a5%b3%e7%a5%9e\n模特联盟::https://www.q10drfc.com/category/mntp/%e6%a8%a1%e7%89%b9%e8%81%94%e7%9b%9f\n激萌文化::https://www.q10drfc.com/category/mntp/%e6%bf%80%e8%90%8c%e6%96%87%e5%8c%96\n优星馆::https://www.q10drfc.com/category/mntp/%e4%bc%98%e6%98%9f%e9%a6%86\n薄荷叶::https://www.q10drfc.com/category/mntp/%e8%96%84%e8%8d%b7%e5%8f%b6\n萌缚::https://www.q10drfc.com/category/mntp/%e8%90%8c%e7%bc%9a\n推女郎::https://www.q10drfc.com/category/mntp/%e6%8e%a8%e5%a5%b3%e9%83%8e\n爱丝::https://www.q10drfc.com/category/mntp/%e7%88%b1%e4%b8%9d\n影私荟::https://www.q10drfc.com/category/mntp/%e5%bd%b1%e7%a7%81%e8%8d%9f\n村长的宝物::https://www.q10drfc.com/category/mntp/%e6%9d%91%e9%95%bf%e7%9a%84%e5%ae%9d%e7%89%a9\nDDY::https://www.q10drfc.com/category/mntp/ddy\n顽味生活::https://www.q10drfc.com/category/mntp/%e9%a1%bd%e5%91%b3%e7%94%9f%e6%b4%bb\n51Modo::https://www.q10drfc.com/category/mntp/51modo\nRosi::https://www.q10drfc.com/category/mntp/rosi\nDisi::https://www.q10drfc.com/category/mntp/disi\nIShow::https://www.q10drfc.com/category/mntp/ishow\nPans::https://www.q10drfc.com/category/mntp/pans\n中国腿模::https://www.q10drfc.com/category/mntp/%e4%b8%ad%e5%9b%bd%e8%85%bf%e6%a8%a1\nVGirl::https://www.q10drfc.com/category/mntp/vgirl\nRu1mm::https://www.q10drfc.com/category/mntp/ru1mm\nSityle::https://www.q10drfc.com/category/mntp/sityle\n美女写真杂烩::https://www.q10drfc.com/category/mntp/%e7%be%8e%e5%a5%b3%e5%86%99%e7%9c%9f%e6%9d%82%e7%83%a9\n中国美女写真::https://www.q10drfc.com/category/mntp/%e4%b8%ad%e5%9b%bd%e7%be%8e%e5%a5%b3%e5%86%99%e7%9c%9f\n台湾美女写真::https://www.q10drfc.com/category/mntp/%e5%8f%b0%e6%b9%be%e7%be%8e%e5%a5%b3%e5%86%99%e7%9c%9f\n韩国美女写真::https://www.q10drfc.com/category/mntp/%e9%9f%a9%e5%9b%bd%e7%be%8e%e5%a5%b3%e5%86%99%e7%9c%9f\n日本美女写真::https://www.q10drfc.com/category/mntp/%e6%97%a5%e6%9c%ac%e7%be%8e%e5%a5%b3%e5%86%99%e7%9c%9f",
    "sourceComment": "原图标\nhttps://www.q10drfc.com/wp-includes/images/w-logo-blue-white-bg.png",
    "sourceGroup": "版本",
    "sourceIcon": "天",
    "sourceName": "5.3网页还能用",
    "sourceUrl": "https://www.q10drfc.com/category/mntp",
    "style": "*{\n\tmargin: 0;\n\tpadding: 0\n}\nul{\n\tfont-size: 0;\n\theight: 100%;\n\toverflow-y: scroll\n}\nli{\n\tlist-style: none;\n\ttext-align: center\n}\nimg{\n\twidth:100%;\n\theight:auto\n}",
    "variableComment": ""
  },
  {
    "articleStyle": 0,
    "customOrder": 535,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": true,
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "ruleArticles": "class.archive-list@class.col-12@class.waterfall-item",
    "ruleContent": "<html>\n    <head>\n        <meta charset=\"UTF-8\"></meta>\n        <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge, chrome=1\"></meta>\n        <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no\"></meta>\n        <meta name=\"robots\" content=\"max-image-preview:large\"></meta>\n        <link rel=\"alternate\" type=\"application/rss+xml\" title=\"日式JK » Feed\" href=\"https://www.jk.rs/feed\"></link>\n        <link rel=\"alternate\" type=\"application/rss+xml\" title=\"日式JK » 评论 Feed\" href=\"https://www.jk.rs/comments/feed\"></link>\n        <link rel=\"alternate\" type=\"application/rss+xml\" title=\"日式JK » 夏的JK 评论 Feed\" href=\"https://www.jk.rs/2024/09/06/910.html/feed\"></link>\n        <style id=\"classic-theme-styles-inline-css\" type=\"text/css\">\n            \n/*! This file is auto-generated */\n.wp-block-button__link{color:#fff;background-color:#32373c;border-radius:9999px;box-shadow:none;text-decoration:none;padding:calc(.667em + 2px) calc(1.333em + 2px);font-size:1.125em}.wp-block-file__button{background:#32373c;color:#fff;text-decoration:none}\n\n        </style>\n\n        <link rel=\"stylesheet\" id=\"jimu-lightgallery-css\" href=\"https://www.jk.rs/wp-content/plugins/nicetheme-jimu/modules/base/assets/lightGallery/css/lightgallery.min.css\" type=\"text/css\" media=\"all\"></link>\n        <link rel=\"stylesheet\" id=\"jimu-css\" href=\"https://www.jk.rs/wp-content/plugins/nicetheme-jimu/modules/jimu.css\" type=\"text/css\" media=\"all\"></link>\n        <link rel=\"stylesheet\" id=\"jimu-blocks-css\" href=\"https://www.jk.rs/wp-content/plugins/nicetheme-jimu/modules/blocks.css\" type=\"text/css\" media=\"all\"></link>\n        <link rel=\"stylesheet\" id=\"glightbox-css\" href=\"https://www.jk.rs/wp-content/themes/Mango-1.1.1/plugins/glightbox/glightbox.min.css\" type=\"text/css\" media=\"all\"></link>\n        <link rel=\"stylesheet\" id=\"bootstrap-css\" href=\"https://www.jk.rs/wp-content/themes/Mango-1.1.1/plugins/bootstrap/bootstrap.min.css\" type=\"text/css\" media=\"all\"></link>\n        <link rel=\"stylesheet\" id=\"iconfont-css\" href=\"https://www.jk.rs/wp-content/themes/Mango-1.1.1/plugins/iconfont/iconfont.css\" type=\"text/css\" media=\"all\"></link>\n        <link rel=\"stylesheet\" id=\"animate-css\" href=\"https://www.jk.rs/wp-content/themes/Mango-1.1.1/css/animate.min.css\" type=\"text/css\" media=\"all\"></link>\n        <link rel=\"stylesheet\" id=\"reset-css\" href=\"https://www.jk.rs/wp-content/themes/Mango-1.1.1/css/reset.css\" type=\"text/css\" media=\"all\"></link>\n        <link rel=\"stylesheet\" id=\"style-css\" href=\"https://www.jk.rs/wp-content/themes/Mango-1.1.1/style.css\" type=\"text/css\" media=\"all\"></link>\n\n        <script type=\"text/javascript\" src=\"https://www.jk.rs/wp-includes/js/jquery/jquery.min.js\" id=\"jquery-core-js\"></script>\n        <script type=\"text/javascript\" src=\"https://www.jk.rs/wp-includes/js/jquery/jquery-migrate.min.js\" id=\"jquery-migrate-js\"></script>\n        <script defer=\"\" type=\"text/javascript\" src=\"https://www.jk.rs/wp-content/plugins/nicetheme-jimu/library/static/alpine.min.js\" id=\"alpine-defer-js\"></script>\n        <link rel=\"canonical\" href=\"https://www.jk.rs/2024/09/06/910.html\"></link>\n        <link rel=\"alternate\" type=\"application/json+oembed\" href=\"https://www.jk.rs/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fwww.jk.rs%2F2024%2F09%2F06%2F910.html\"></link>\n        <link rel=\"alternate\" type=\"text/xml+oembed\" href=\"https://www.jk.rs/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fwww.jk.rs%2F2024%2F09%2F06%2F910.html&format=xml\"></link>\n        <link rel=\"pingback\" href=\"https://www.jk.rs/xmlrpc.php\"></link>\n        <link rel=\"icon\" href=\"https://www.jk.rs/wp-content/uploads/2024/05/cropped-ICO2-32x32.png\" sizes=\"32x32\"></link>\n        <link rel=\"icon\" href=\"https://www.jk.rs/wp-content/uploads/2024/05/cropped-ICO2-192x192.png\" sizes=\"192x192\"></link>\n        <link rel=\"apple-touch-icon\" href=\"https://www.jk.rs/wp-content/uploads/2024/05/cropped-ICO2-180x180.png\"></link>\n        <meta name=\"msapplication-TileImage\" content=\"https://www.jk.rs/wp-content/uploads/2024/05/cropped-ICO2-270x270.png\"></meta>\n        <style>\n            \n            @font-face {\n                font-family: 'DINAlternate-Bold';\n                src: url(https://www.jk.rs/wp-content/themes/Mango-1.1.1/fonts/DINAlternate-Bold.ttf) format(\"truetype\");\n                font-style: normal;\n            }\n\n            .font-price {\n                font-family: 'DINAlternate-Bold', arial, sans-serif\n            }\n\n            .font-number {\n                font-family: 'DINAlternate-Bold', arial, sans-serif\n            }\n        \n        </style>\n        <script>\n            \n    window.GeetestCaptcha = {\n        runCaptcha: () => true\n    }\n\n        </script>\n        <style id=\"theia-sticky-sidebar-stylesheet-TSS\">\n            .theiaStickySidebar:after {content: \"\"; display: table; clear: both;}\n        </style>\n    </head>\n    <body class=\"post-template-default single single-post postid-910 single-format-image\" style=\"transform: none;\">\n{{@class.masonry-list@html}}\n\n                <a href=\"javascript:\" class=\"login-close btn btn-light btn-icon btn-rounded btn-sm \">\n                    <span>\n                        <i class=\"iconfont icon-guanbi_close1\"></i>\n                    </span>\n                </a>\n            </div>\n        </div>\n        <div class=\"mobile-overflow\"></div>\n        <script>\n        </script>\n        <script defer=\"\" src=\"https://tj.u2.cm/random-string.js\" data-website-id=\"5d82d153-8c11-4c5c-b2bf-36be4f5fe845\"></script>\n        <script type=\"text/javascript\" id=\"wpopt_front-js-extra\">\n            \n/* <![CDATA[ */\nvar wpopt = {\"ajax_url\":\"https:\\/\\/www.jk.rs\\/wp-admin\\/admin-ajax.php\",\"ajax_name\":\"wp_opt\",\"is_post\":\"1\",\"post_id\":\"910\",\"module_post_views_open\":\"1\"};\n/* ]]> */\n\n        </script>\n        <script type=\"text/javascript\" src=\"https://www.jk.rs/wp-content/plugins/wp-opt/static/js/front.min.js\" id=\"wpopt_front-js\"></script>\n        <script type=\"text/javascript\" src=\"https://www.jk.rs/wp-content/plugins/nicetheme-jimu/modules/base/assets/lightGallery/js/lightgallery-all.min.js\" id=\"jimu-lightgallery-js\"></script>\n        <script type=\"text/javascript\" src=\"https://www.jk.rs/wp-content/plugins/nicetheme-jimu/modules/base/assets/lightGallery/js/lightgallery-load.min.js\" id=\"jimu-lightgallery-load-js\"></script>\n        <script type=\"text/javascript\" src=\"https://www.jk.rs/wp-content/plugins/nicetheme-jimu/modules/jimu.js\" id=\"jimu-js\"></script>\n        <script type=\"text/javascript\" src=\"https://www.jk.rs/wp-content/plugins/nicetheme-module-bigger-share-module/static/nice-poster.js\" id=\"nice-poster-js\"></script>\n        <script type=\"text/javascript\" src=\"https://www.jk.rs/wp-content/plugins/nicetheme-module-nice-blocks/assets/blocks.js\" id=\"nc-blocks-js-js\"></script>\n        <script type=\"text/javascript\" src=\"https://www.jk.rs/wp-content/themes/Mango-1.1.1/plugins/vanilla-lazyload/lazyload.min.js\" id=\"lazyload-js\"></script>\n        <script type=\"text/javascript\" src=\"https://www.jk.rs/wp-content/themes/Mango-1.1.1/plugins/shuffle/shuffle.min.js\" id=\"shuffle-js\"></script>\n        <script type=\"text/javascript\" src=\"https://www.jk.rs/wp-content/themes/Mango-1.1.1/js/ajax-comment.js\" id=\"ajax-comments-js\"></script>\n        <script type=\"text/javascript\" src=\"https://www.jk.rs/wp-includes/js/clipboard.min.js\" id=\"clipboard-js\"></script>\n        <script type=\"text/javascript\" src=\"https://www.jk.rs/wp-content/themes/Mango-1.1.1/plugins/glightbox/glightbox.min.js\" id=\"glightbox-js\"></script>\n        <script type=\"text/javascript\" src=\"https://www.jk.rs/wp-content/themes/Mango-1.1.1/js/image-post.js\" id=\"imagepost-js\"></script>\n        <script type=\"text/javascript\" src=\"https://www.jk.rs/wp-content/themes/Mango-1.1.1/plugins/theia-sticky-sidebar/ResizeSensor.min.js\" id=\"ResizeSensor-js\"></script>\n        <script type=\"text/javascript\" src=\"https://www.jk.rs/wp-content/themes/Mango-1.1.1/plugins/theia-sticky-sidebar/theia-sticky-sidebar.min.js\" id=\"stickySidebar-js\"></script>\n        <script type=\"text/javascript\" src=\"https://www.jk.rs/wp-content/themes/Mango-1.1.1/js/nicetheme.js\" id=\"nicetheme-js\"></script>\n        <div class=\"nice-popup\" :class=\"{ 'nice-popup-open': itemToBeRemoved.length > 0 }\" x-data=\"imageDeletePopupData\">\n            <div class=\"nice-popup-overlay\" @click=\"itemToBeRemoved = ''\"></div>\n            <div class=\"nice-popup-body\">\n                <div class=\"nice-popup-close\" @click=\"itemToBeRemoved = ''\">\n                    <span class=\"svg-white\"></span>\n                    <span class=\"svg-dark\"></span>\n                </div>\n                <div class=\"nice-popup-content\">\n                    <div class=\"popup-body\">\n                        <div class=\"text-center\">\n                            <i class=\"text-64 text-danger iconfont icon-guansuo_lock-one my-3\"></i>\n                            <h2 class=\"text-lg mb-4\"> 您确定要删除此图像吗？ </h2>\n                        </div>\n                    </div>\n                    <div class=\"popup-footer\">\n                        <div class=\"row g-2 g-md-3\">\n                            <div class=\"col\">\n                                <button @click=\"itemToBeRemoved = ''\" class=\"btn btn-light btn-block\"> 取消 </button>\n                            </div>\n                            <div class=\"col\">\n                                <button @click=\"remove\" class=\"btn btn-primary btn-block\"> 移除 </button>\n                            </div>\n                        </div>\n                    </div>\n                </div>\n            </div>\n        </div>\n    </body>\n</html>",
    "ruleImage": "",
    "ruleLink": "@class.item-content@class.item-title@a@href",
    "ruleNextPage": "page",
    "ruleTitle": "@class.item-content@text",
    "singleUrl": false,
    "sortUrl": "jk::jk/page/{{page}}",
    "sourceGroup": "版本",
    "sourceIcon": "天",
    "sourceName": "5.4",
    "sourceUrl": "https://www.jk.rs/",
    "style": ""
  },
  {
    "articleStyle": 1,
    "customOrder": 537,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": true,
    "header": "{\"User-Agent\": \"Mozilla/5.0 (Linux; Android 12; 22041211AC Build/SP1A.210812.016) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.104 Mobile Safari/537.36\"}",
    "lastUpdateTime": 1775584094755,
    "loadWithBaseUrl": true,
    "ruleArticles": ".list@li",
    "ruleContent": "<js>\nvar v = result.match(/source\\s*=\\s*[\"']([^\"']*?\\.(m3u8|mp4)\\b[^\"']*)[\"']/i);\nvar p = v ? v[1].replace(/\\\\/g,'') : '';\nvar t = '@get:{t}';\nvar d = java.getString('[property=\"video:tag\"]@content');\nvar sign1 = java.base64Decode('44CQ5aSc5piO56m644CR55qE5pKt5pS+5Zmo');\nvar sign2 = java.base64Decode('5LuF5L6b5Liq5Lq65a2m5Lmg5L2/55So77yM5Lil56aB5YiG5Lqr44CB5YCS5Y2W5Y+K5Lu75L2V6L+d5rOV6KGM5Li677yB');\nvar sign3 = java.base64Decode('5L2/55So6ICF6Ieq6KGM5om/5ouF6aOO6Zmp5LiO6LSj5Lu7');\n`<!DOCTYPE html>\n<html>\n<head>\n<meta charset=\"utf-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n<title>${t}</title>\n<style>\n*{margin:0;padding:0;box-sizing:border-box}\nbody{font-family:-apple-system,sans-serif;background:#f0f9ff;padding:10px}\n.v-box{max-width:800px;margin:0 auto;background:white;border-radius:12px;box-shadow:0 5px 15px rgba(0,0,0,0.1);overflow:hidden}\n.header{padding:12px;border-bottom:1px solid #eee;display:flex;flex-wrap:wrap;justify-content:space-between}\n.sign{background:#e9f7ff;padding:6px;border-radius:6px;margin-bottom:8px;font-size:14px;color:#1a73e8;width:100%}\n.title{font-size:18px;font-weight:600;margin-bottom:8px;width:100%}\n.tags{color:#5f6368;font-size:14px;flex:1;min-width:60%;word-break:break-all}\n.time{color:#5f6368;font-size:14px;text-align:right;flex-basis:35%}\n.v-wrap{position:relative;padding-top:56.25%;background:#000}\n.video{position:absolute;top:0;left:0;width:100%;height:100%}\n.footer{padding:8px;text-align:center;color:#5f6368;font-size:13px}\n.info-box{padding:15px;font-size:14px;line-height:1.6}\n.info-box p{margin:8px 0}\n.hint{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);background:rgba(0,0,0,0.7);color:#fff;padding:12px 20px;border-radius:20px;font-size:1.1rem;z-index:10;display:none}\n.controls{position:absolute;top:0;left:0;width:100%;height:4px;background:rgba(255,255,255,0.3);z-index:5;transition:opacity 0.3s}\n.progress{height:100%;background:#4a9eff;width:0}\n</style>\n</head>\n<body>\n<div class=\"v-box\">\n<div class=\"header\">\n<div class=\"sign\" style=\"text-align:center;padding:5px 0\">\n<div>${sign1}</div>\n<div style=\"text-align:left; padding-top:4px\">\n${sign2}<br>${sign3}</div>\n</div>\n<div class=\"title\">${t}</div>\n<div class=\"tags\">${d}</div>\n<div class=\"time\" id=\"timeDisplay\">00:00/00:00</div></div>\n<div class=\"v-wrap\">\n<div class=\"controls\"><div class=\"progress\" id=\"progressBar\"></div></div>\n<div class=\"hint\" id=\"hint\">快进中 &gt;&gt;</div>\n<video class=\"video\" id=\"v\" controls playsinline>\n<source src=\"${p}\" type=\"video/mp4\">您的浏览器不支持HTML5视频\n</video>\n</div>\n<div class=\"footer\">滑动调整进度 | 长按2倍速</div>\n</div>\n<script>\nvar v = document.getElementById('v');\nvar tDisplay = document.getElementById('timeDisplay');\nvar pBar = document.getElementById('progressBar');\nvar hint = document.getElementById('hint');\nvar startX = 0, startTime = 0;\nvar longPressTimer;\nvar sensitivity = 0.1;\nvar longPressTime = 500;\nvar hintDuration = 2000;\nfunction updateTime() {\nif (!v.duration) return;\nvar m1 = Math.floor(v.currentTime / 60);\nvar s1 = Math.floor(v.currentTime % 60);\nvar m2 = Math.floor(v.duration / 60);\nvar s2 = Math.floor(v.duration % 60);\ntDisplay.textContent = m1 + ':' + (s1 < 10 ? '0' : '') + s1 + '/' + m2 + ':' + (s2 < 10 ? '0' : '') + s2;\npBar.style.width = (v.currentTime / v.duration) * 100 + '%';}\nv.addEventListener('timeupdate', updateTime);\nv.addEventListener('loadedmetadata', updateTime);\nv.addEventListener('touchstart', function(e) {\nstartX = e.touches[0].clientX;\nstartTime = Date.now();\nif (longPressTimer) clearTimeout(longPressTimer);\nhint.style.display = 'none';\nlongPressTimer = setTimeout(function() {\nv.playbackRate = 2.0;\nhint.style.display = 'block';\nsetTimeout(function() { hint.style.display = 'none'; }, hintDuration);}, longPressTime);});\nv.addEventListener('touchmove', function(e) {\ne.preventDefault();\nclearTimeout(longPressTimer);\nvar diffX = e.touches[0].clientX - startX;\nvar change = diffX * sensitivity * v.duration / 100;\nv.currentTime = Math.max(0, Math.min(v.currentTime + change, v.duration));\nstartX = e.touches[0].clientX;updateTime();});\nv.addEventListener('touchend', function() {\nv.playbackRate = 1.0;\nclearTimeout(longPressTimer);});\n</script>\n</body>\n</html>`\n</js>",
    "ruleImage": "img@data-original",
    "ruleLink": "a.0@href",
    "ruleNextPage": "page",
    "rulePubDate": "{{@@.vodlist_img@html##(\\d+)-(\\d+)-(\\d+)##$0###}} | {{@@.vodlist_img@span.0@text}}",
    "ruleTitle": ".title@text@put:{\"t\":\"@@.title@text\"}",
    "singleUrl": false,
    "sortUrl": "搜索 🔍::/s/page/{{page}}/wd/{{source.getVariable()}}/\n最新::/label/hot/by/time/page/{{page}}/\n日榜::/label/hot/by/hits_day/page/{{page}}/\n周榜::/label/hot/by/hits_week/page/{{page}}/\n月榜::/label/hot/by/hits_month/page/{{page}}/\n国产 🎞::/t/1-{{page}}/\n自拍::/t/5-{{page}}/\n主播大秀::/t/6-{{page}}/\n主播诱惑::/t/36-{{page}}/\n探花::/t/7-{{page}}/\n偷拍::/t/8-{{page}}/\n乱伦::/t/8-{{page}}/\n吃瓜::/t/10-{{page}}/\n抖阴::/t/11-{{page}}/\nAV::/t/12-{{page}}/\n福利姬::/t/20-{{page}}/\n侵犯::/t/37-{{page}}/\n日韩 🎞::/t/2-{{page}}/\n日韩自拍::/t/13-{{page}}/\n日本无码::/t/14-{{page}}/\n字幕::/t/15-{{page}}/\n解说::/t/17-{{page}}/\n换脸::/t/18-{{page}}/\n欧美 🎞::/t/3-{{page}}/\n自拍::/t/21-{{page}}/\n字幕::/t/22-{{page}}/\n伦理 🎞::/t/4-{{page}}/\n三级::/t/29-{{page}}/\n日韩::/t/30-{{page}}/\n动漫 🎞::/t/16-{{page}}/\n剧集::/t/26-{{page}}/\n3D::/t/27-{{page}}/\n次元::/t/28-{{page}}/\n另类 🎞::/t/39-{{page}}/\n同性恋::/t/38-{{page}}/\n变性::/t/40-{{page}}/\n重口味::/t/23-{{page}}/",
    "sourceComment": "<声明>\n//2025.8.10 作者：夜明空\n//源社区：https://taoba.cf\n//仅供个人学习使用，严禁分享、倒卖及任何违法行为！使用者自行承担风险与责任\n</声明>\n\n//网址更新频繁，有需要请到发布页自行更新\n//发布页：\nhttps://18j.18hu.link/mdce\n18j.vip\n18zy.vip\n51zy.vip",
    "sourceGroup": "版本",
    "sourceIcon": "https://18oc.life/18link/18j/images/favicon.ico",
    "sourceName": "5.5",
    "sourceUrl": "https://18oc.life/label/tag/"
  },
  {
    "articleStyle": 0,
    "customOrder": 539,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": true,
    "lastUpdateTime": 1775590497300,
    "loadWithBaseUrl": true,
    "ruleArticles": "article",
    "ruleContent": "class.dplayer@all<js>\nresult=result.match(/http.*m3u8/)[0]##\\</js>{{@@title@text##正在播放:|永久.*}}\n<video src=\"{{result}}\" width=\"100%\" height=\"auto\" controls></video>",
    "ruleImage": "@js:\"https://mgtv-bbqn.oss-cn-beijing.aliyuncs.com/1/2310310103284A29582395A850D3A0F5C26862354MzFE/SrRlbr0.gif\"",
    "ruleLink": "a.0@href",
    "ruleNextPage": "page",
    "rulePubDate": "class.post-card-info@text",
    "ruleTitle": "h2@text##热榜.*",
    "singleUrl": false,
    "sortUrl": "学生::/search/学生/{{page}}/\n全部①::/<,page/{{page}}/>\n全部②::/page/3/\n全部③::/page/5/\n搜索::/search/{{source.getVariable()}}/{{page}}/\n偷情::/search/偷情/{{page}}/\n白虎::/search/白虎/{{page}}/\n反差::/search/反差/{{page}}/\n极品::/search/极品/{{page}}/\n萝莉::/search/萝莉/{{page}}/\n00后::/search/00后/{{page}}/\n女同::/search/女同/{{page}}/\n双马尾::/search/双马尾/{{page}}/\n学院::/search/学院/{{page}}/\n高三::/search/高三/{{page}}/\n高中::/search/高中/{{page}}/\n少女::/search/少女/{{page}}/\n情趣::/search/情趣/{{page}}/\n自拍::/search/自拍/{{page}}/\n大学::/search/大学/{{page}}/\n大一::/search/大一/{{page}}/\n学妹::/search/学妹/{{page}}/\n校花::/search/校花/{{page}}/\n调教::/search/调教/{{page}}/\n女神::/search/女神/{{page}}/\n少妇::/search/少妇/{{page}}/\n巨乳::/search/巨乳/{{page}}/\n孕妇::/search/孕妇/{{page}}/\n口::/search/口交/{{page}}/\n精::/search/精/{{page}}/",
    "sourceComment": "//多个视频不会写\n发:https://heiliao.su",
    "sourceGroup": "版本",
    "sourceIcon": "http://p6.itc.cn/images01/20201202/8d012ed623d647a78635557e7d235ab6.jpeg",
    "sourceName": "5.6",
    "sourceUrl": "https://heiliao1076.pro/"
  },
  {
    "articleStyle": 0,
    "customOrder": 540,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": true,
    "header": "{\"User-Agent\": \"Mozilla/5.0 (Linux; Android 12; 22041211AC Build/SP1A.210812.016) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.104 Mobile Safari/537.36\"}",
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "ruleArticles": ".list-group@a",
    "ruleContent": "<title>🏄Mengteen</title>\n{{@@.panel-body@p@html}}",
    "ruleImage": "@js:\"https://iknow-pic.cdn.bcebos.com/8326cffc1e178a82ae0a94affb03738da977e88f?x-bce-process=image/resize,m_lfit,w_600,h_800,limit_1/quality,q_85/format,f_auto\"",
    "ruleLink": "a@href",
    "ruleNextPage": "page",
    "rulePubDate": "@js:\"📖书中自有颜如玉;开启一天的阅读吧!\"",
    "ruleTitle": "a@text",
    "singleUrl": false,
    "sortUrl": "都市::/arttype/20-{{page}}.html\n搜索::/artsearch/{{source.getVariable()}}------{{page}}-.html\n校园::/arttype/21-{{page}}.html\n真实::/arttype/22-{{page}}.html\n武侠::/arttype/23-{{page}}.html\n乱伦::/arttype/24-{{page}}.html\n职场::/arttype/25-{{page}}.html\n经验::/arttype/26-{{page}}.html\n暴力::/arttype/27-{{page}}.html\n幻想::/arttype/28-{{page}}.html\n明星::/arttype/29-{{page}}.html\n人妻::/arttype/30-{{page}}.html",
    "sourceComment": "源社区：@Mengteen 2025.06.29原创\n二传二创或者是其它问题请联系我。\n我邮箱:[xxxmgqxxx@vip.qq.com]",
    "sourceGroup": "版本",
    "sourceIcon": "天",
    "sourceName": "5.7",
    "sourceUrl": "https://yinghuar.yingxx102.cc/label/index.html##@Mengteen",
    "variableComment": "🏄Mengteen提示：在此输入关键词搜索！"
  },
  {
    "articleStyle": 0,
    "customOrder": 541,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": false,
    "header": "{\"User-Agent\": \"Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1\"}",
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "ruleArticles": "article.masonry-post",
    "ruleContent": "@js:\nvar img_list=\"\";\ndata=java.getElements('.dynamic-entry-content@img')\nfor(i in data){\n\turl=data[i].attr('src')\n\timg_list+=`<img src=\"${url}\"/>\\n`\n}\nresult=`<html>\n<head>\n <title>${java.get('title')}</title>\n <meta name=\"viewport\" content=\"width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no\">\n</head>\n<body>\n <div class=\"img_container\">\n   ${img_list}\n </div>\n</body>\n</html>`",
    "ruleImage": ".gb-block-image img@src",
    "ruleLink": "a@href##$##,{\"webView\":true}",
    "ruleNextPage": "a.next@href",
    "rulePubDate": "",
    "ruleTitle": ".gb-headline a@text\n<js>\njava.put('title',result)\n</js>",
    "singleUrl": false,
    "sortUrl": "最新::https://danryoku.com/\nNSFW::https://danryoku.com/category/nsfw/\nCOSPLAY::https://danryoku.com/category/cosplay/\n日本::https://danryoku.com/category/country/japan/\n中国::https://danryoku.com/category/country/china/{{page}}/\n韩国::https://danryoku.com/category/country/korea/\n台湾::https://danryoku.com/category/country/taiwan/\n西方::https://danryoku.com/category/country/western/\n搜索::https://danryoku.com/?s={{source.getVariable()}}/",
    "sourceComment": "DANRYOKU - Idol & Cosplay Photobook gallery\n网站：https://danryoku.com",
    "sourceGroup": "版本",
    "sourceIcon": "https://danryoku.com/favicon.ico",
    "sourceName": "5.8",
    "sourceUrl": "https://danryoku.com",
    "style": "*{margin:0;padding:0;}\nhtml,body{width:100%;height:100%;}\nh2{text-align:center;}\nimg{width:100%;height:auto;}"
  },
  {
    "articleStyle": 0,
    "customOrder": 543,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": true,
    "lastUpdateTime": 1775590466136,
    "loadWithBaseUrl": true,
    "ruleArticles": "article",
    "ruleContent": "class.dplayer@all<js>\nresult=result.match(/http.*0/)[0]##\\</js>{{@@title@text##成人黑料.*}}\n<video src=\"{{result}}\" width=\"100%\" height=\"auto\" controls></video>",
    "ruleImage": "@js:\"https://mgtv-bbqn.oss-cn-beijing.aliyuncs.com/1/2310310103284A29582395A850D3A0F5C26862354MzFE/SrRlbr0.gif\"",
    "ruleLink": "a@href",
    "ruleNextPage": "page",
    "rulePubDate": "span.1@text",
    "ruleTitle": "class.post-card-title@text",
    "singleUrl": false,
    "sortUrl": "搜索::/search/{{source.getVariable()}}/{{page}}/\n今日吃瓜::/category/wpcz/{{page}}/\n热门大瓜::/category/rdsj/{{page}}/\n学生校园::/category/xsxy/{{page}}/\n网红黑料::/category/whhl/{{page}}/\n看片娱乐::/category/ysyl/{{page}}/\n乱伦道德::/category/lldd/{{page}}/\n人人吃瓜::/category/rrcg/{{page}}/\n海外吃瓜::/category/hwcg/{{page}}/\n骚男骚女::/category/snsn/{{page}}/",
    "sourceComment": "https://51cgg32.com",
    "sourceGroup": "版本",
    "sourceIcon": "http://p6.itc.cn/images01/20201202/8d012ed623d647a78635557e7d235ab6.jpeg",
    "sourceName": "5.9",
    "sourceUrl": "https://car.fuuanuxl.cc/"
  },
  {
    "articleStyle": 0,
    "customOrder": 544,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": true,
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "loginUi": "",
    "ruleArticles": ".vod[2:23]",
    "ruleContent": "",
    "ruleImage": "img@data-original",
    "ruleLink": "a@href<js>var url='https://eeoopinkyy.cc'+result;var html=String(java.ajax(url));var idx=html.indexOf('index.m3u8');var start=html.lastIndexOf('\\\"',idx);var end=html.indexOf('\\\"',idx);var u=html.substring(start+1,end);u.split('\\\\/').join('/')</js>\n",
    "ruleNextPage": ".pageitem.-1@href",
    "ruleTitle": "a@text",
    "shouldOverrideUrlLoading": "",
    "singleUrl": false,
    "sortUrl": "自拍::https://eeoopinkyy.cc/pink/index.php/vod/type/id/198/page/{{page}}.html\n国产::https://eeoopinkyy.cc/pink/index.php/vod/type/id/197/page/{{page}}.html\n国产视频::https://eeoopinkyy.cc/pink/index.php/vod/type/id/199.html\n国产传媒::https://eeoopinkyy.cc/pink/index.php/vod/type/id/200.html\n国产裸聊::https://eeoopinkyy.cc/pink/index.php/vod/type/id/201.html\n国产直播::https://eeoopinkyy.cc/pink/index.php/vod/type/id/202.html\n国产偷拍::https://eeoopinkyy.cc/pink/index.php/vod/type/id/203.html\n国产大制作::https://eeoopinkyy.cc/pink/index.php/vod/type/id/204.html\n国产主播::https://eeoopinkyy.cc/pink/index.php/vod/type/id/205.html\n蜜桃传媒::https://eeoopinkyy.cc/pink/index.php/vod/type/id/217.html\n天美传媒::https://eeoopinkyy.cc/pink/index.php/vod/type/id/218.html\n乌鸦传媒::https://eeoopinkyy.cc/pink/index.php/vod/type/id/219.html\n星空传媒::https://eeoopinkyy.cc/pink/index.php/vod/type/id/220.html\n乐播传媒::https://eeoopinkyy.cc/pink/index.php/vod/type/id/221.html\n大象传媒::https://eeoopinkyy.cc/pink/index.php/vod/type/id/222.html\n映画传媒::https://eeoopinkyy.cc/pink/index.php/vod/type/id/223.html\n皇家华人::https://eeoopinkyy.cc/pink/index.php/vod/type/id/208.html\n精东影业::https://eeoopinkyy.cc/pink/index.php/vod/type/id/209.html\n成人头条::https://eeoopinkyy.cc/pink/index.php/vod/type/id/210.html\n免子先生::https://eeoopinkyy.cc/pink/index.php/vod/type/id/211.html\n杏吧原创::https://eeoopinkyy.cc/pink/index.php/vod/type/id/212.html\n91制片厂::https://eeoopinkyy.cc/pink/index.php/vod/type/id/213.html\n开心鬼传媒::https://eeoopinkyy.cc/pink/index.php/vod/type/id/214.html\n黑料网曝::https://eeoopinkyy.cc/pink/index.php/vod/type/id/181.html\n会所技师::https://eeoopinkyy.cc/pink/index.php/vod/type/id/182.html\n探花约炮::https://eeoopinkyy.cc/pink/index.php/vod/type/id/183.html\n淫妻绿帽::https://eeoopinkyy.cc/pink/index.php/vod/type/id/184.html\n制服诱惑::https://eeoopinkyy.cc/pink/index.php/vod/type/id/185.html\n重口猎奇::https://eeoopinkyy.cc/pink/index.php/vod/type/id/186.html\n强奸乱伦::https://eeoopinkyy.cc/pink/index.php/vod/type/id/187.html\n精品甄之::https://eeoopinkyy.cc/pink/index.php/vod/type/id/190.html\n网曝黑料::https://eeoopinkyy.cc/pink/index.php/vod/type/id/191.html\n明星换脸::https://eeoopinkyy.cc/pink/index.php/vod/type/id/192.html\n女优明星::https://eeoopinkyy.cc/pink/index.php/vod/type/id/193.html\n韩国主播::https://eeoopinkyy.cc/pink/index.php/vod/type/id/194.html\n网红主播::https://eeoopinkyy.cc/pink/index.php/vod/type/id/195.html\n群交淫乱::https://eeoopinkyy.cc/pink/index.php/vod/type/id/196.html\n巨乳美乳::https://eeoopinkyy.cc/pink/index.php/vod/type/id/244.html\n高清名优::https://eeoopinkyy.cc/pink/index.php/vod/type/id/245.html\n人妻熟女::https://eeoopinkyy.cc/pink/index.php/vod/type/id/246.html\n中文字幕::https://eeoopinkyy.cc/pink/index.php/vod/type/id/247.html\nSM调教::https://eeoopinkyy.cc/pink/index.php/vod/type/id/248.html\nVR视角::https://eeoopinkyy.cc/pink/index.php/vod/type/id/249.html\nAV解说::https://eeoopinkyy.cc/pink/index.php/vod/type/id/250.html\n日本无码::https://eeoopinkyy.cc/pink/index.php/vod/type/id/235.html\n欧美性爱::https://eeoopinkyy.cc/pink/index.php/vod/type/id/236.html\n欧美无码::https://eeoopinkyy.cc/pink/index.php/vod/type/id/237.html\n高清有码::https://eeoopinkyy.cc/pink/index.php/vod/type/id/238.html\n日本素人::https://eeoopinkyy.cc/pink/index.php/vod/type/id/239.html\n伦理三级::https://eeoopinkyy.cc/pink/index.php/vod/type/id/240.html\n动漫精选::https://eeoopinkyy.cc/pink/index.php/vod/type/id/241.html\n乱伦毁三观::https://eeoopinkyy.cc/pink/index.php/vod/type/id/226.html\n淫乱学生妹::https://eeoopinkyy.cc/pink/index.php/vod/type/id/227.html\n玩偶姐姐::https://eeoopinkyy.cc/pink/index.php/vod/type/id/228.html\n糖心Vlog::https://eeoopinkyy.cc/pink/index.php/vod/type/id/229.html\n萝莉社::https://eeoopinkyy.cc/pink/index.php/vod/type/id/230.html\n性视界::https://eeoopinkyy.cc/pink/index.php/vod/type/id/231.html\nPsychoPorn::https://eeoopinkyy.cc/pink/index.php/vod/type/id/232.html",
    "sourceComment": "├───┬────────────┤\n│！免责│本书源只提供代码进行技术│\n│！声明│交流，请于２４小时后删除│\n└────────────────┘",
    "sourceGroup": "版本",
    "sourceIcon": "https://ico.img12345.com/jt/favicon.png",
    "sourceName": "6.0",
    "sourceUrl": "https://eeoopinkyy.cc/pink/index.php/vod/type/id/197.html"
  },
  {
    "articleStyle": 0,
    "customOrder": 545,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": false,
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "singleUrl": true,
    "sourceComment": "视频",
    "sourceGroup": "版本",
    "sourceIcon": "https://img.fy6b.com/2024/06/13/7ca5da52f9cc0.jpg",
    "sourceName": "6.1",
    "sourceUrl": "https://www.xhsiy38.cc:2024/"
  },
  {
    "articleStyle": 1,
    "coverDecodeJs": "/\\/(new|xiao|upload)\\//.test(src)?java.createSymmetricCrypto(\"AES/CBC/Pkcs7Padding\", \"f5d965df75336270\",\"97b60394abc2fbe1\").decrypt(result):result",
    "customOrder": 547,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": true,
    "header": "{\n\t\"User-Agent\": \"Mozilla/5.0 (Linux; Android 9) Mobile Safari/537.36\",\"referer\": \"{{baseUrl}}\"\n\t}",
    "lastUpdateTime": 1775591767759,
    "loadWithBaseUrl": true,
    "ruleArticles": "class.video-item",
    "ruleContent": "class.dplayer@all<js>\nresult=result.match(/http.*0/)[0]##\\</js>{{@@title@text}}\n<video src=\"{{result}}\" width=\"100%\" height=\"auto\" controls></video>",
    "ruleImage": "@js:\nurl=String(result).match(/.*loadImg\\(this,'(.*)'.*/)[1];\nresult=url",
    "ruleLink": "a@href",
    "ruleNextPage": "page",
    "rulePubDate": "class.date-xxx@text",
    "ruleTitle": "class.title@text",
    "singleUrl": false,
    "sortUrl": "首页::/page/{{page}}/\n最新黑料::/hlcg/page/{{page}}/\n今日热瓜::/jrrs/page/{{page}}/\n热门黑料::/jqrm/page/{{page}}/\n经典黑料::/lsdg/page/{{page}}/\n日榜黑料::/mrrb/page/{{page}}/\n周榜黑料::/zbjx/page/{{page}}/\n月榜黑料::/ybrg/page/{{page}}/\n原创社区::/ycsq/page/{{page}}/\n反差专区::/fczq/page/{{page}}/\n校园黑料::/xycg/page/{{page}}/\n网红黑料::/whhl/page/{{page}}/\n影视短剧::/ysdj/page/{{page}}/\n每日大赛::/mrds/page/{{page}}/\n明星丑闻::/mxcw/page/{{page}}/\n深夜综艺::/syzy/page/{{page}}/\n推特社区::/ttsq/page/{{page}}/\n独家曝料::/djbl/page/{{page}}/\n桃图杂志::/ttzz/page/{{page}}/\n黑料课堂::/hlkt/page/{{page}}/\n有求必应::/yqby/page/{{page}}/\n黑料爆改::/hlbg/page/{{page}}/\n官场曝料::/gchl/page/{{page}}/\n全球奇闻::/qqqw/page/{{page}}/\n抖音::/tag/2/{{page}}.html\n快手::/tag/3/{{page}}.html\n推特::/tag/7/{{page}}.html\n模特::/tag/36/{{page}}.html\n学生::/tag/10/{{page}}.html\n御姐::/tag/40/{{page}}.html\n少妇::/tag/405/{{page}}.html\n人妻::/tag/22/{{page}}.html\n自拍::/tag/332/{{page}}.html\n偷拍::/tag/27/{{page}}.html\n自慰::/tag/313/{{page}}.html\n后入::/tag/922/{{page}}.html\n母狗::/tag/140/{{page}}.html\n露脸::/tag/781/{{page}}.html\n露出::/tag/17/{{page}}.html\n直播::/tag/28/{{page}}.html\n约炮::/tag/163/{{page}}.html\n出轨::/tag/505/{{page}}.html\n偷情::/tag/18/{{page}}.html\n制服::/tag/50/{{page}}.html\n肥臀::/tag/35/{{page}}.html\n巨乳::/tag/34/{{page}}.html\n高颜值::/tag/275/{{page}}.html",
    "sourceComment": "感谢社区大佬的解密\n源社区：@Mengteen \n二传二创或者是其它问题请联系我。\n我邮箱:[xxxmgqxxx@vip.qq.com]\n我QQ:99737563(备注来意)\n2025.7.6 修复分类以及更新\n地址发布页：https://hlbg3.com/\n黑料最新入口\nhttps://hlbg8.com\n牢记永久域名\nhttps://www.heiliao88.com/\nhttps://155.fun或https://18hlw.com",
    "sourceGroup": "版本",
    "sourceIcon": "https://img4.tuwandata.com/v2/thumb/jpg/NWFkMywxMTI1LDAsOSwzLDEsLTEsTk9ORSwsLDkw/u/res.tuwan.com/zipgoods/20190508/3b6408c569f8eb687a8dd6eb3578bdb9.jpg",
    "sourceName": "6.2",
    "sourceUrl": "https://qbfeh.rcrfesyj.cc/"
  },
  {
    "articleStyle": 0,
    "customOrder": 548,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": false,
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "singleUrl": true,
    "sourceComment": "视频",
    "sourceGroup": "版本",
    "sourceIcon": "https://img.fy6b.com/2024/06/13/7ca5da52f9cc0.jpg",
    "sourceName": "6.3",
    "sourceUrl": "https://2.hlg6440d.cc/"
  },
  {
    "articleStyle": 3,
    "customOrder": 553,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": false,
    "lastUpdateTime": 1775588705888,
    "loadWithBaseUrl": true,
    "ruleArticles": ".item",
    "ruleContent": "id.kt_player@all&&script@all",
    "ruleImage": "img@data-original",
    "ruleLink": "a@href",
    "ruleNextPage": "page",
    "rulePubDate": ".time@span",
    "ruleTitle": "img@alt",
    "singleUrl": false,
    "sortUrl": "搜索::https://www.85xo.com/search/{{v=source.getVariable()}}/\n亚洲人::/tags/ya-zhou-ren/\n马来::/tags/ma-lai/\n日本::/tags/ri-ben/\n后入::/tags/hou-ru/\n大奶::/tags/da-nai/\n高潮::/tags/gao-chao/\n做爱::/tags/zuo-ai/\n马来西亚::/tags/ma-lai-zi-ya/\n妹妹::/tags/mei-mei/\n兔牙::/tags/tu-ya/\n妹::/tags/mei/\n巨乳::/tags/ju-ru/\n自慰::/tags/zi-wei/\n情侣::/tags/qing-lv/\n骚::/tags/sao/\n男友::/tags/nan-you/\n淫叫::/tags/yin-jiao/\n抓奶::/tags/zhua-nai/\n新加坡::/tags/xin-jia-po/\n内衣::/tags/nei-yi/\n肉棒::/tags/rou-bang/\n床上::/tags/chuang-shang/\n嫩逼::/tags/nei-bi/\n日本人::/tags/ri-ben-ren/\n鲍鱼::/tags/bao-yu/\n口::/tags/kou/\n少女::/tags/shao-nv/\n美女::/tags/mei-nv/\n台灣::/tags/tai-wan/\n可爱::/tags/ke-ai/\n偷拍::/tags/tou-pai/\n掰逼::/tags/bai-bi/\n喷水::/tags/pen-shui/\n脱衣::/tags/tuo-yi/\n屁眼::/tags/pi-yan/\n口交::/tags/kou-jiao/\n高中::/tags/gao-zhong/\n妹子::/tags/mei-zi/\n中國::/tags/zhong-guo/\n母狗::/tags/mu-gao/\n全裸::/tags/quan-luo/\n美臀::/tags/mei-tun/\n贫乳::/tags/pin-ru/\n逼::/tags/bi/\n内裤::/tags/nei-ku/\n爱::/tags/ai/\n自拍::/tags/zi-pai/\n学生::/tags/xue-sheng/\n呻吟::/tags/shen-yin/\n韓國::/tags/han-guo/\n泰國::/tags/tai-guo/\n越南::/tags/yue-nan/\n近拍::/tags/jin-pai/\n香港::/tags/xiang-gang/\n新馬::/tags/xin-ma/\n街拍::/tags/jie-pai/",
    "sourceComment": "https://www.85po.com",
    "sourceGroup": "版本",
    "sourceIcon": "https://85tube.com/favicon.ico",
    "sourceName": "6.4",
    "sourceUrl": "https://www.85xo.com/",
    "style": "{background-color:black;margin:0;padding:0;width:100%;}"
  },
  {
    "articleStyle": 1,
    "customOrder": 554,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": true,
    "header": "{\"User-Agent\": \"Mozilla/5.0 (Linux; U; Android 14; zh-cn; M2102K1AC Build/UKQ1.231207.002) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/109.0.5414.118 Mobile Safari/537.36 MQQBrowser/10.1.0\"}",
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "ruleArticles": ".thumbnail-group@li",
    "ruleContent": "<js>\np=result.match(/vod\\_data.*url\\\"\\:\\\"(.*?)\\\"\\,\\\"url/);\np=(p?p[1]:1).replace(/\\\\/g,'')||1; pi=java.getString('.breadcrumbs@span@text')||1;\n`<html>\n    <head>\n        <meta name=\"viewport\" content=\"width=device-width\">\n        <style>\n            body {\n                margin: 0;\n                font-family: Arial, sans-serif;\n                background: linear-gradient(135deg, #ece9e6, #ffffff);\n                display: flex;\n                flex-direction: column;\n                align-items: center;\n                justify-content: flex-start;\n                padding: 20px;\n            }\n            .container {\n                width: 100%;\n                max-width: 800px;\n                background: #fff;\n                border-radius: 10px;\n                box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);\n                overflow: hidden;\n                margin-bottom: 20px;\n            }\n            h3 {\n                margin: 0;\n                padding: 10px 20px;\n                font-size: 0.9em;\n                background: #333;\n                color: #fff;\n                border-radius: 10px 10px 0 0;\n            }\n            .video-container {\n                width: 100%;\n                background: #000;\n                position: relative;\n            }\n            video {\n                width: 100%;\n                height: auto;\n                display: block;\n            }\n            .info-container {\n                padding: 20px;\n            }\n            .info-container p {\n                margin: 10px 0;\n                color: #555;\n            }\n            .info-container p span {\n                font-weight: bold;\n                color: #000;\n            }\n        </style>\n    </head>\n    <body>\n        <div class=\"container\">\n        <h3>${pi}</h3>\n            <div class=\"video-container\">\n                <video controls autoplay name=\"media\" id=\"videoPlayer\">\n                    <source src=\"${p}\" type=\"video/mp4\">\n                </video>\n            </div>\n            <div class=\"info-container\">\n                \n            </div>\n        </div>\n\n        <script>\n            // 获取视频元素\n            const video = document.getElementById('videoPlayer');\n            let touchStartX = 0;\n            let touchStartY = 0;\n            let touchStartTime = 0;\n            let isLongPress = false;\n\n            // 滑动快进\n            video.addEventListener('touchstart', (e) => {\n                touchStartX = e.touches[0].clientX;\n                touchStartY = e.touches[0].clientY;\n                touchStartTime = Date.now();\n                isLongPress = false;\n            });\n\n            video.addEventListener('touchmove', (e) => {\n                const deltaX = e.touches[0].clientX - touchStartX;\n                const deltaY = e.touches[0].clientY - touchStartY;\n\n                // 如果是水平滑动，且未进入长按状态\n                if (Math.abs(deltaX) > Math.abs(deltaY) && !isLongPress) {\n                    const duration = video.duration;\n                    const seekTime = video.currentTime + (deltaX / 100); // 每滑动100px快进1秒\n                    video.currentTime = Math.min(Math.max(seekTime, 0), duration);\n                }\n            });\n\n            // 长按快进\n            video.addEventListener('touchend', (e) => {\n                const touchEndTime = Date.now();\n                const touchDuration = touchEndTime - touchStartTime;\n\n                // 如果长按时间超过500ms，进入长按快进状态\n                if (touchDuration > 500) {\n                    isLongPress = true;\n\n                    // 在长按状态下，根据滑动距离快进\n                    const deltaX = e.changedTouches[0].clientX - touchStartX;\n                    const duration = video.duration;\n                    const seekTime = video.currentTime + (deltaX / 100); // 每滑动100px快进1秒\n                    video.currentTime = Math.min(Math.max(seekTime, 0), duration);\n                } else {\n                    isLongPress = false;\n                }\n            });\n\n            // 防止默认行为（如页面滚动）\n            video.addEventListener('touchmove', (e) => {\n                e.preventDefault();\n            });\n        </script>\n    </body>\n</html>`;\n\n</js>",
    "ruleImage": "img@src",
    "ruleLink": "a@href",
    "ruleNextPage": "text.下一页@href",
    "rulePubDate": "p@text",
    "ruleTitle": "h5@text||img@alt",
    "singleUrl": false,
    "sortUrl": "搜索🔍::/index.php/vod/search/page/{{page}}/wd/{{source.getVariable()}}.html\n伦理三级::/index.php/vod/type/id/6/page/{{page}}.html\n国产精品::/index.php/vod/type/id/7/page/{{page}}.html\n偷拍自拍::/index.php/vod/type/id/8/page/{{page}}.html\n主播大秀::/index.php/vod/type/id/9/page/{{page}}.html\n卡通动漫::/index.php/vod/type/id/10/page/{{page}}.html\n制服丝袜::/index.php/vod/type/id/11/page/{{page}}.html\n少女萝莉::/index.php/vod/type/id/12/page/{{page}}.html\n巨乳美乳::/index.php/vod/type/id/20/page/{{page}}.html\n熟女人妻::/index.php/vod/type/id/21/page/{{page}}.html\n亚洲有码::/index.php/vod/type/id/22/page/{{page}}.html\n强奸乱伦::/index.php/vod/type/id/23/page/{{page}}.html\n亚洲无码::/index.php/vod/type/id/25/page/{{page}}.html\n中文字幕::/index.php/vod/type/id/26/page/{{page}}.html\n同性专区::/index.php/vod/type/id/27/page/{{page}}.html\nAl换脸::/index.php/vod/type/id/28/page/{{page}}.html\n欧美精品::/index.php/vod/type/id/32/page/{{page}}.html\n国产传媒::/index.php/vod/type/id/33/page/{{page}}.html\n口交颜射::/index.php/vod/type/id/34/page/{{page}}.html\n女优明星::/index.php/vod/type/id/35/page/{{page}}.html\n素人自拍::/index.php/vod/type/id/36/page/{{page}}.html\n多人群交::/index.php/vod/type/id/37/page/{{page}}.html\n网曝门::/index.php/vod/type/id/39/page/{{page}}.html\n探花系列::/index.php/vod/type/id/41/page/{{page}}.html\n麻豆传媒::/index.php/vod/type/id/43/page/{{page}}.html\n天美传媒::/index.php/vod/type/id/46/page/{{page}}.html\nSA国际传媒::/index.php/vod/type/id/47/page/{{page}}.html\n果冻传媒::/index.php/vod/type/id/50/page/{{page}}.html\n星空无限::/index.php/vod/type/id/51/page/{{page}}.html\n精东影业::/index.php/vod/type/id/52/page/{{page}}.html\n蜜桃传媒::/index.php/vod/type/id/54/page/{{page}}.html\nAV解说::/index.php/vod/type/id/56/page/{{page}}.html\nVR视角::/index.php/vod/type/id/57/page/{{page}}.html\nJVID::/index.php/vod/type/id/59/page/{{page}}.html\nSWAG::/index.php/vod/type/id/60/page/{{page}}.html \ncosplay::/index.php/vod/type/id/61/page/{{page}}.html\n抖音视频::/index.php/vod/type/id/62/page/{{page}}.html\n热门头条::/index.php/vod/type/id/63/page/{{page}}.html\n素人搭讪::/index.php/vod/type/id/80/page/{{page}}.html\n欺辱凌辱::/index.php/vod/type/id/81/page/{{page}}.html\n野外激情::/index.php/vod/type/id/82/page/{{page}}.html\n学生诱惑::/index.php/vod/type/id/83/page/{{page}}.html\nSM调教::/index.php/vod/type/id/84/page/{{page}}.html\n水果派::/index.php/vod/type/id/86/page/{{page}}.html\n91传媒::/index.php/vod/type/id/88/page/{{page}}.html\n糖心传媒::/index.php/vod/type/id/90/page/{{page}}.html\n一本道::/index.php/vod/type/id/93/page/{{page}}.html\n",
    "sourceComment": "发布页：https://wuxiants.github.io/",
    "sourceGroup": "版本",
    "sourceIcon": "https://images.icon-icons.com/1147/PNG/512/1486486316-arrow-film-movie-play-player-start-video_81236.png",
    "sourceName": "6.5",
    "sourceUrl": "https://wxts.wuxiants564.com/"
  },
  {
    "articleStyle": 0,
    "customOrder": 555,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": false,
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "singleUrl": true,
    "sourceGroup": "版本",
    "sourceIcon": "",
    "sourceName": "6.6",
    "sourceUrl": "https://6661.vaf3.com/web/index.html?jkzz=1"
  },
  {
    "articleStyle": 3,
    "customOrder": 557,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": true,
    "lastUpdateTime": 1775591744706,
    "loadWithBaseUrl": true,
    "ruleArticles": "ul@li",
    "ruleContent": "<!DOCTYPE html>\n<html lang=\"zh-CN\">\n<head>\n<meta charset=\"UTF-8\">\n<title>内容提取</title>\n<!-- v2025.05.10 -->\n\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n<script src=\"https://code.jquery.com/jquery-3.6.0.min.js\"></script>\n<link rel=\"stylesheet\" href=\"https://cdnjs.cloudflare.com/ajax/libs/viewerjs/1.11.3/viewer.min.css\" />\n<script src=\"https://cdnjs.cloudflare.com/ajax/libs/viewerjs/1.11.3/viewer.min.js\"></script>\n<style>\n    body { font-family: Arial, sans-serif; font-size: 16px; }\n    #title, #page, #loading-status { margin: 0 auto; font-size: 20px; text-align: center; }\n    #description, #urls, #video-url, #video-sources, #messages { width: 100%; max-width: 800px; margin: 1.5px auto; font-size: 14px; text-align: left; word-wrap: break-word; white-space: pre-wrap; }\n    #text, #text :not(img), #text img + * { text-indent: 2em; width: 100%; font-size: 16px; line-height: 1.5em; margin-top: 0; margin-bottom: 0; word-wrap: break-word; white-space: pre-wrap; }\n    img, #text img { width: 100%; height: auto; display: block; margin-bottom: 1.5px; }\n    .flex-container { display: flex; justify-content: center; align-items: center; gap: 10px; margin: 1.5px 0; font-size: 14px; }\n    button, select { flex: 1 1 31%; padding: 3px; border: 1px solid #ccc; border-radius: 5px; box-sizing: border-box; cursor: pointer; background-color: #f9f9f9; transition: background-color 0.3s ease; margin: 1.5px; min-width: 0; font-size: 14px; }\n    #url-select, #video-source-select { flex: 1 1 100%; margin-left: 0; margin-right: 0; text-align: center; }\n    #video-element { width: 100%; height: auto; }\n    textarea { width: 100%; height: auto; min-height: 100px; box-sizing: border-box; resize: vertical; }\n    .error, .warn { color: red; }\n</style>\n</head>\n<body>\n    <h3 id=\"title\">{{@@title@text||h1.0@text||h2.0@text||.title.0@text}}</h3>\n    <p id=\"description\">{{@@.info.0@html||.jianjie@html}}</p>\n    <p id=\"page\" style=\"display:none;\">共<span id=\"total-pages\">1</span>页</p>\n    <p id=\"loading-status\" style=\"display:none;\"></p>\n\n    <div class=\"flex-container\" id=\"loading-buttons\" style=\"display:none;\">\n        <button id=\"prev-page-btn\">上一页</button>\n        <button id=\"next-page-btn\">下一页</button>\n        <button id=\"auto-load-btn\">自&nbsp;&nbsp;动</button>\n    </div>\n    \n    <div class=\"flex-container\">\n        <select id=\"url-select\" style=\"display:none;\"></select>\n    </div>\n    \n    <div class=\"flex-container\">\n        <button id=\"toggle-urls-btn\">显/隐网址</button>\n        <button id=\"toggle-messages-btn\">显/隐信息</button>\n        <button id=\"toggle-debug-btn\">显/隐调试</button>\n    </div>\n    <div id=\"urls\"></div>\n    <div id=\"messages\"></div>\n    <div id=\"debug-info\"></div>\n    <div id=\"video-url\"></div>\n    <div id=\"video-container\" style=\"display: none;\">\n        <video id=\"video-element\" controls preload=\"auto\" width=\"640\" height=\"264\">\n            <source id=\"video-source\" src=\"\" type=\"\">您的浏览器不支持 video 标签。\n        </video>\n    </div>\n    <div class=\"flex-container\" id=\"video-source-container\" style=\"display: none;\">\n        <select id=\"video-source-select\" onchange=\"updateVideoSource()\"></select>\n    </div>\n    <div id=\"images\"></div>\n    <div id=\"text\"></div>\n\n    <script>\n        // 配置对象，包含各种选择器、延迟时间等配置项\n        const config = {    \n            videoSelector: 'body', // 视频选择器\n            imgSelector: '.gridlane-box-inside img,.photos figure img,.content p img', // 图片选择器\n            textSelector: '#content', // 文本选择器\n            debugSelector: '#content, .page, .pager, .content, script', // 调试信息选择器\n            swapImageAttributes: false, // 是否交换图片属性\n            delayTime: 1500, // 延迟提取时间\n            retryDelayTime: 1500, // 重试加载延迟时间\n            maxLoadAttempts: 3, // 最大加载次数\n            autoLoading: false, // true自动模式，false单页模式\n            debugOnce: 0, // 只在特定索引输出一次调试信息\n            totalPagesText: '{{@@.page.0@a.-2@textNodes}}', // 总页码\n            urlSuffixToRemove: /\\.html$/, // 移除url后缀\n            pageUrlText: '{urlPrefix}_{i}.html', // 拼接URL模板        \n            ListMode: true, // true网址列表模式，false网址拼接模式    \n            initialUrls: `{{@@#sort-item-5.0@a@href}}`, // 网址\n            initialUrlsName: `{{@@#sort-item-5.0@a@span@text}}`, // 网址名称\n            sourceurl: '', // 来源URL前缀\n        };\n\n        let videoSources = []; // 存储视频源数组\n        let loadAttempts = {}; // 记录每个URL的加载尝试次数\n        let urls = []; // 存储所有页面的URL\n        let imageBox;\n        let textBox;\n        let currentPageIndex = 0; // 当前页面索引\n        let canLoadNextPage = true; // 控制是否可以加载下一页\n        let autoLoadInProgress = false; // 自动加载状态\n\n        // 构建URL列表\n        function buildUrls(totalPages, baseUrl) {\n            let initialUrlsArray = config.initialUrls.trim().split('\\n').filter(url => url.trim() !== '');\n            let initialUrlsNameArray = config.initialUrlsName.trim().split('\\n').filter(name => name.trim() !== '');\n\n            if (config.ListMode && initialUrlsArray.length > 0) {\n                if (initialUrlsArray.length !== initialUrlsNameArray.length) {\n                    $('#messages').append(`<span class=\"warn\">警告：initialUrls 和 initialUrlsName 的长度不匹配。</span><br>`);\n                }\n\n                urls = initialUrlsArray.map(url => {\n                    if (config.sourceurl && url.startsWith('/') && !/^https?:\\/\\//i.test(url)) {\n                        return config.sourceurl.replace(/\\/$/, '') + url;\n                    } else {\n                        return url;\n                    }\n                });\n\n                urls.forEach((url, index) => {\n                    const name = initialUrlsNameArray[index] || `第 ${index + 1} 页`;\n                    $('#url-select').append(`<option value=\"${index}\">${name}</option>`);\n                    $('#urls').append(`<div>${name}: ${url}</div>`);\n                });\n            } else {\n                if (totalPages === 1) {\n                    urls.push(baseUrl);\n                } else {\n                    urls.push(baseUrl);\n                    for (let i = 2; i <= totalPages; i++) {\n                        urls.push(config.pageUrlText.replace('{urlPrefix}', baseUrl.replace(config.urlSuffixToRemove, '').replace(/\\/$/, '')).replace('{i}', i));\n                    }\n                }\n\n                urls.forEach((url, index) => {\n                    const name = `第 ${index + 1} 页`;\n                    $('#url-select').append(`<option value=\"${index}\">${name}</option>`);\n                    $('#urls').append(`<div>${name}: ${url}</div>`);\n                });\n            }\n\n            $('#total-pages').text(urls.length);\n            toggleNavigationButtons();\n            toggleTotalPagesDisplay();\n        }\n\n        // 规范化URL\n        function normalizeUrl(url) {\n            if (typeof url !== 'string' || !url.trim()) {\n                return '';\n            }\n            const match = url.match(/['\"](.*?)['\"]/);\n            if (match && match[1]) {\n                url = match[1];\n            }\n\n            function processUrl(str) {\n                str = str.trim();\n                str = str.replace(/\\\\u[\\dA-F]{4}/gi, match => String.fromCharCode(parseInt(match.replace(/\\\\u/g, ''), 16)));\n                str = decodeURIComponent(str);\n                str = str.replace(/^http:\\/([^/])/, 'http://$1');\n                str = str.replace(/^https:\\/([^/])/, 'https://$1');\n                return str;\n            }\n            return processUrl(url);\n        }\n\n        // 清空容器内容\n        function clearContainers() {\n            $('#messages').empty();\n            $('#images').empty();\n            $('#text').empty();\n        }\n\n        // 更新图像源\n        function updateImageSrc(elements, shouldSwap) {\n            elements.each(function () {\n                const $this = $(this);\n                const attrsToUpdate = {};\n                if (shouldSwap) {\n                    ['data-original', 'data-src', 'data-url'].forEach(attr => {\n                        if ($this.attr(attr)) {\n                            attrsToUpdate['src'] = $this.attr(attr);\n                        }\n                    });\n                }\n                $this.attr(attrsToUpdate);\n            });\n            return elements;\n        }\n\n        // 切换导航按钮显示状态\n        function toggleNavigationButtons() {\n            if ($('#url-select option').length > 1 && !config.autoLoading) {\n                $('#loading-buttons').show();\n                $('#url-select').show();\n            } else {\n                $('#loading-buttons').hide();\n                $('#url-select').hide();\n            }\n        }\n\n        // 显示加载状态\n        function showLoadingStatus(pageNumber) {\n            const selectedOption = $('#url-select option:selected').text();\n            $('#loading-status').text(`正在加载：${selectedOption}`).show();\n        }\n\n        // 隐藏加载状态\n        function hideLoadingStatus() {\n            $('#loading-status').hide();\n        }\n\n        // 加载指定索引的内容\n        function loadContent(index) {\n            if (index < 0 || index >= urls.length || !canLoadNextPage) return;\n            canLoadNextPage = false;\n            currentPageIndex = index;\n            $('#url-select').val(index);\n            $('#messages').append(`<div>当前地址: <span class=\"warn\">${urls[index]}</span></div>`);\n            if (autoLoadInProgress) {\n                showLoadingStatus(index + 1);\n            }\n            $.ajax({\n                url: urls[index],\n                type: 'GET',\n                success: function (data) {\n                    try {\n                    const $data = $(data);\n                    let updatedHtmlContent = data.replace(/(['\"])(\\/\\/)(?!\\/)/g, '$1https://')\n                        .replace(/src=\"upload/gi, 'src=\"/upload')\n                        .replace(/style=[\"'][^'\"]+[\"']/gi, '')\n                        .replace(/\\\\\\//g, '/');\n                    const parser = new DOMParser();\n                    const doc = parser.parseFromString(updatedHtmlContent, \"text/html\");\n\n                    if (config.debugOnce === index) {\n                        const debugElements = $(doc).find(config.debugSelector);\n                        if (debugElements.length > 0) {\n                            const debugContents = $('<pre>').html(debugElements.clone().wrapAll('<div/>').parent().html()).html();\n                            $('#debug-info').html(`<span class=\"warn\">调试信息: <textarea rows=\"10\" cols=\"80\">${debugContents}</textarea></span>`);\n                        } else {\n                            $('#debug-info').html(`<span class=\"warn\">调试信息: <textarea rows=\"10\" cols=\"80\">调试信息未提取到内容，请检查选择器！</textarea></span>`);\n                        }\n                    }\n                    // 方法1：提取视频\n                    const videoSources1 = [];\n                    const videoContents = $(doc).find(config.videoSelector);\n                    const videoTags = $(videoContents).find('video, source');\n                    videoTags.each(function() {\n                        const videosrc = $(this).attr('src') || \n                                     $(this).attr('data-src') || \n                                     $(this).attr('data-original') || '';\n                        \n                        if (videosrc) {\n                            videoSources1.push(videosrc);\n                        }\n                    });\n                    //反馈\n                    if (videoSources1.length > 0) {\n                        $('#messages').append(`<span>方法1，找到 ${videoSources1.length} 个视频。</span><br>`);\n                    }\n\n                    // 方法2：正则提取视频\n                    const regex = /['\"]https?[^'<>\"]+(m3u8|mp4|webm|ogg|flv|mp3|m4a|wav|ape|flac)([^'<>\"]+)?['\"]/gi;\n                    const matches = data.match(regex);\n                    const videoSources2 = [];\n\n                    if (matches) {\n                        const uniqueMatches = [...new Set(matches)];\n                    \n                        uniqueMatches.forEach(match => {\n                            const normalizedSrc = normalizeUrl(match.replace(/['\"]/g, ''));\n                            videoSources2.push(normalizedSrc);\n                        });\n                    }\n                    //反馈\n                    if (videoSources2.length > 0) {\n                        $('#messages').append(`<span>方法2，找到 ${videoSources2.length} 个视频。</span><br>`);\n                    }\n\n                    // 合并两种方法的结果\n                    videoSources = [...videoSources1, ...videoSources2];\n\n                    // 去重并标准化 URL\n                    const imageExtensions = /\\.(jpg|jpeg|png|gif|bmp|svg)$/i;\n\n                    videoSources = videoSources\n                                  .map(src => normalizeUrl(src.replace(/\\\\+/g, '')))\n                                  .filter(src => src) // 过滤空值\n                                  .filter(src => !imageExtensions.test(src)); // 移除图片地址\n                        \n                    videoSources = [...new Set(videoSources)];// 去重\n\n                    // 显示最终结果\n                    $('#messages').append(`<span>总共找到 ${videoSources.length} 个视频。</span><br>`);\n\n                    if (videoSources.length > 0) {\n                        $('#messages').append(`<span>成功提取到视频，找到 ${videoSources.length} 个视频。</span><br>`);\n                        videoSources.forEach((src, idx) => {\n                            $('#messages').append(`<div>视频地址:<span class=\"warn\"> ${src}</span><br></div>`);\n                            $('#video-source-select').append(`<option value=\"${idx}\">视频源 ${idx + 1}</option>`);\n                        });\n                    \n                        if (videoSources.length == 1) {\n                            $('#video-container').show();\n                            $('#video-url').show();\n                            $('#video-source-container').hide();\n                            updateVideoSource();\n                        } else if (videoSources.length > 1) {\n                            $('#video-container').show();\n                            $('#video-url').show();\n                            $('#video-source-container').show();\n                            updateVideoSource();\n                        } else {\n                            $('#video-container').hide();\n                            $('#video-url').hide();\n                            $('#video-source-container').hide();\n                        }\n                    } else {\n                        $('#messages').append(`<span class=\"warn\">未找到视频源。</span><br>`);\n                        $('#video-container').hide();\n                        $('#video-url').hide();\n                        $('#video-source-container').hide();\n                    }\n\n                    //提取图片\n                    const $imgContents = $(doc).find(config.imgSelector);\n                    const shouldSwap = config.swapImageAttributes;\n                    const newContents = updateImageSrc($imgContents.clone(), shouldSwap);\n                    $('#images').append(newContents).show();\n                    if (newContents.length > 0) {\n                        $('#messages').append(`<span>成功提取图片，共 ${newContents.length} 张。</span><br>`);\n                        newContents.each(function () {\n                            const imgSrc = $(this).attr('src') || $(this).attr('data-original') || $(this).attr('data-src') || $(this).attr('data-url');\n                            $('#messages').append(`<div>地址:<span class=\"warn\"> ${imgSrc}</span><br></div>`);\n                        });\n                    } else {\n                        $('#messages').append(`<span class=\"warn\">未提取到图片。</span><br>`);\n                    }\n\n                    //提取图片和文本\n                    const textContents = $(doc).find(config.textSelector).map(function () {\n                        const $currentContents = $(this);\n                        $currentContents.find('img + br, script, video, source, iframe').remove();\n                        $currentContents.html($currentContents.html().replace(/>\\s+/gi, '>').replace(/<\\/?br\\s*([^>]*)\\s*\\/?>/gi, '\\n').replace(/\\n+/g, '\\n'));\n                        return $currentContents.html();\n                    }).get().join('');\n                    if (textContents.trim()) {\n                        $('#text').append(`<span>${textContents}</span><br>`).show();\n                        $('#messages').append(`<span>成功提取图文。</span><br>`);\n                    } else {\n                        $('#messages').append(`<span class=\"warn\">未提取到图文。</span><br>`);\n                    }\n\n                    if (autoLoadInProgress && currentPageIndex < urls.length - 1) {\n                        setTimeout(() => { \n                            canLoadNextPage = true;\n                            loadContent(currentPageIndex + 1); \n                        }, config.delayTime);\n                    } else {\n                        canLoadNextPage = true;\n                        if (autoLoadInProgress) {\n                            hideLoadingStatus();\n                        }\n                    }\n                } catch (parseError) {\n                    $('#messages').append(`<span class=\"error\">解析页面内容时发生错误: ${parseError.message}</span><br>`);\n                    handleLoadFailure(urls, index);\n                } finally {\n                    if (imageBox) imageBox.viewer.update();\n                    if (textBox) textBox.viewer.update();\n                }\n            },\n            error: function (jqXHR, textStatus, errorThrown) {\n                let errorMessage = `内容加载失败: ${urls[index]}`;\n                switch (textStatus) {\n                    case 'timeout':\n                        errorMessage += ', 请求超时';\n                        break;\n                    case 'abort':\n                        errorMessage += ', 请求被取消';\n                        break;\n                    case 'parsererror':\n                        errorMessage += ', 解析响应出错';\n                        break;\n                    default:\n                        errorMessage += `, 状态码: ${jqXHR.status}, 错误信息: ${errorThrown}`;\n                        break;\n                }\n                $('#messages').append(`<span class=\"error\">${errorMessage}</span><br>`);\n                handleLoadFailure(urls, index);\n                }\n            });\n        }\n\n        // 处理加载失败的情况\n        function handleLoadFailure(urls, index) {\n            if (!loadAttempts[urls[index]]) {\n                loadAttempts[urls[index]] = 1;\n            } else {\n                loadAttempts[urls[index]]++;\n            }\n            if (loadAttempts[urls[index]] <= config.maxLoadAttempts) {\n                const retryMessage = `第${index + 1}页加载失败，正在进行第${loadAttempts[urls[index]]}次加载！`;\n                $('#messages').append(`<span class=\"error\">${retryMessage}</span><br>`);\n                setTimeout(() => { \n                    canLoadNextPage = true;\n                    loadContent(index); \n                }, config.retryDelayTime);\n            } else {\n                const finalErrorMessage = `第${index + 1}页加载失败，已达到最大尝试次数(${config.maxLoadAttempts})！`;\n                $('#messages').append(`<span class=\"error\">${finalErrorMessage}</span><br>`);\n                if (autoLoadInProgress && currentPageIndex < urls.length - 1) {\n                    setTimeout(() => { \n                        canLoadNextPage = true;\n                        loadContent(currentPageIndex + 1); \n                    }, config.delayTime);\n                } else {\n                    canLoadNextPage = true;\n                    if (autoLoadInProgress) {\n                        hideLoadingStatus();\n                    }\n                }\n            }\n        }\n\n        // 更新视频源\n        function updateVideoSource() {\n            const selectedIndex = parseInt(document.getElementById('video-source-select').value);\n            if (isNaN(selectedIndex) || !videoSources[selectedIndex]) {\n                $('#messages').append(`<span class=\"warn\">未找到有效的视频源。</span><br>`);\n                console.warn(\"Invalid or undefined video source:\", selectedIndex, videoSources);\n                return;\n            }\n\n            const selectedSource = videoSources[selectedIndex];\n            document.getElementById('video-url').textContent = `视频地址:\\n ${selectedSource}`;\n\n            const videoSourceElement = document.getElementById('video-source');\n            videoSourceElement.src = selectedSource;\n\n            const videoElement = document.getElementById('video-element');\n            videoElement.load();\n\n            $('#messages').append(`<span>更新视频源为: ${selectedSource}</span><br>`);\n            console.log(\"Updated video source to:\", selectedSource);\n        }\n\n        // 切换总页数显示状态\n        function toggleTotalPagesDisplay() {\n            if (urls.length > 1) {\n                $('#page').show();\n            } else {\n                $('#page').hide();\n            }\n        }\n\n        // 页面加载完成后执行的主要逻辑\n        $(document).ready(function () {\n            imageBox = document.getElementById('images');\n            textBox = document.getElementById('text');\n            if (imageBox && textBox) {\n                new Viewer(imageBox, { title: true, interval: 2000 });\n                new Viewer(textBox, { title: true, interval: 2000 });\n            }\n\n            const totalPagesText = config.totalPagesText;\n            const totalPages = parseInt(totalPagesText, 10) || 1;\n            const baseUrl = '{{baseUrl}}';\n\n            clearContainers();\n            $('#urls, #debug-info textarea, #video-url, #video-source-select').empty();\n            $('#urls, #messages, #debug-info, #video-url, #video-container, #video-source-container, #images, #text').hide();\n\n            buildUrls(totalPages, baseUrl);\n\n            const urlSelect = document.getElementById('url-select');\n            if (urlSelect.options.length > 0) {\n                urlSelect.value = '0'; \n\n                if (config.autoLoading) {\n                    autoLoadInProgress = true;\n                    for (let i = 0; i < urls.length; i++) {\n                        loadContent(i);\n                    }\n                } else {\n                    loadContent(0);\n                }\n            } else {\n                loadContent(0);\n            }\n\n            $('#url-select').change(function () {\n                clearContainers();\n                const selectedIndex = parseInt($(this).val());\n                loadContent(selectedIndex);\n            });\n            $('#prev-page-btn').click(function () {\n                clearContainers();\n                if (currentPageIndex > 0) {\n                    loadContent(currentPageIndex - 1);\n                }\n            });\n            $('#next-page-btn').click(function () {\n                clearContainers();\n                if (currentPageIndex < urls.length - 1) {\n                    loadContent(currentPageIndex + 1);\n                }\n            });\n            $('#auto-load-btn').click(function () {\n                autoLoadInProgress = true;\n                showLoadingStatus(1); \n                for (let i = currentPageIndex + 1; i < urls.length; i++) {\n                    loadContent(i);\n                }\n            });\n            $('#toggle-messages-btn').click(function () { $('#messages').toggle(); });\n            $('#toggle-urls-btn').click(function () { $('#urls').toggle(); });\n            $('#toggle-debug-btn').click(function () { $('#debug-info').toggle(); });\n        });\n    </script>\n</body>\n</html>",
    "ruleImage": "a@data-original",
    "ruleLink": "a.0@href",
    "ruleNextPage": "page||text.下一页@href",
    "rulePubDate": "[class=\"pic-text text-right\"]@text",
    "ruleTitle": "h4@text",
    "singleUrl": false,
    "sortUrl": "搜索🔍::/jiejie/index.php/vod/search.html?wd={{source.getVariable()}}\n黄瓜资源::/jiejie/index.php/vod/type/id/87.html\n155资源::/jiejie/index.php/vod/type/id/248.html\n森林资源::/jiejie/index.php/vod/type/id/117.html\n奥斯卡资源::/jiejie/index.php/vod/type/id/86.html\n百万资源::/jiejie/index.php/vod/type/id/237.html\n制服诱惑::/jiejie/index.php/vod/show/id/251.html\n中文字幕::/jiejie/index.php/vod/show/id/254.html\n美乳巨乳::/jiejie/index.php/vod/show/id/262.html\n熟女人妻::/jiejie/index.php/vod/show/id/259.html\n萝莉少女::/jiejie/index.php/vod/show/id/260.html\n强奸乱伦::/jiejie/index.php/vod/show/id/263.html\n无码专区::/jiejie/index.php/vod/show/id/249.html",
    "sourceComment": "jiejiesp.xyz",
    "sourceGroup": "版本",
    "sourceIcon": "https://img4.tuwandata.com/v2/thumb/jpg/NWFkMywxMTI1LDAsOSwzLDEsLTEsTk9ORSwsLDkw/u/res.tuwan.com/zipgoods/20190508/3b6408c569f8eb687a8dd6eb3578bdb9.jpg",
    "sourceName": "6.7",
    "sourceUrl": "https://wap.jiejiesp19.xyz"
  },
  {
    "articleStyle": 2,
    "customOrder": 558,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": true,
    "header": "{\n  \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36\",\n  \"Referer\": \"https://meirentu.club/\"\n}",
    "lastUpdateTime": 1769069467887,
    "loadWithBaseUrl": true,
    "ruleArticles": "li.i_list",
    "ruleContent": "<!doctype html>\n<html lang=\"zh-CN\">\n<head>\n<meta charset=\"UTF-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, user-scalable=no\">\n<title>{{@@h1@text}}</title>\n<style>\nbody {\n    margin: 0;\n    background: #000;\n    color: #eee;\n    font-family: sans-serif;\n}\n\n#statusBar {\n    position: fixed;\n    top: 0;\n    left: 0;\n    right: 0;\n    z-index: 999;\n    background: rgba(0, 0, 0, 0.7);\n    color: #aaa;\n    padding: 4px 10px;\n    font-size: 12px;\n    text-align: center;\n    backdrop-filter: blur(2px);\n    pointer-events: none;\n}\n\n#imgList img {\n    display: block;\n    width: 100%;\n    height: auto;\n    margin: 0;\n}\n</style>\n</head>\n<body>\n\n<div id=\"statusBar\">加载中…</div>\n\n\n{{@@h1@all}}\n\n<div id=\"detail\">\n{{@@article@all}}\n{{@@class.item_info@all}}\n</div>\n\n\n<div id=\"imgList\"></div>\n\n<script>\n// === 配置 ===\nconst pageUrls = `{{@@class.page@a:not(.current)@href}}`\n  .split('\\n')\n  .map(s => s.trim())\n  .filter(Boolean);\n\nlet allImages = []; // 所有已加载的图片URL\nlet pageImageCounts = []; // 每页图片数量，用于定位页码\nlet isLoading = false;\nlet currentPageIndex = 0; // 当前正在加载的页面索引\nconst maxRetry = 2;\nconst loadDelay = 100; // 页面组间的加载延迟（毫秒）\nconst batchSize = 5; // 每次加载的页面数量\n\n// === DOM ===\nconst imgList = document.getElementById('imgList');\nconst statusBar = document.getElementById('statusBar');\n\n// === 工具函数 ===\nfunction showStatus(text) {\n    if (statusBar) statusBar.textContent = text;\n}\n\n// 获取某页图片（简化版，优先 iframe）\nasync function fetchPageImages(url) {\n    return new Promise((resolve, reject) => {\n        const iframe = document.createElement('iframe');\n        iframe.style.display = 'none';\n        const timeout = setTimeout(() => {\n            cleanup();\n            reject(new Error('超时'));\n        }, 5000); // 缩短超时时间\n        \n        function cleanup() {\n            clearTimeout(timeout);\n            if (iframe.parentNode) iframe.parentNode.removeChild(iframe);\n        }\n        \n        iframe.onload = () => {\n            try {\n                const doc = iframe.contentDocument;\n                let imgs = doc.querySelectorAll('.content_left img') ||\n                           doc.querySelectorAll('.content img') ||\n                           doc.querySelectorAll('img');\n                const urls = Array.from(imgs).map(i => i.src).filter(Boolean);\n                cleanup();\n                resolve(urls);\n            } catch (e) {\n                cleanup();\n                reject(e);\n            }\n        };\n        iframe.onerror = () => { cleanup(); reject(new Error('加载失败')); };\n        iframe.src = url;\n        document.body.appendChild(iframe);\n    });\n}\n\n// 追加一页图片\nfunction appendPage(images) {\n    images.forEach(src => {\n        const img = document.createElement('img');\n        img.src = src;\n        img.loading = 'lazy';\n        imgList.appendChild(img);\n    });\n    allImages.push(...images);\n    pageImageCounts.push(images.length);\n}\n\n// 计算当前可视区域的图片索引\nfunction getCurrentImageIndex() {\n    const imgs = imgList.querySelectorAll('img');\n    if (imgs.length === 0) return -1;\n\n    // 优先选\"中心点最接近视口垂直中心\"的图片\n    let bestIndex = 0;\n    let minDistance = Infinity;\n\n    for (let i = 0; i < imgs.length; i++) {\n        const rect = imgs[i].getBoundingClientRect();\n        const centerY = rect.top + rect.height / 2;\n        const viewportCenter = window.innerHeight / 2;\n        const distance = Math.abs(centerY - viewportCenter);\n\n        // 如果图片完全不可见，跳过（可选）\n        if (rect.bottom < 0 || rect.top > window.innerHeight) {\n            continue;\n        }\n\n        if (distance < minDistance) {\n            minDistance = distance;\n            bestIndex = i;\n        }\n    }\n\n    return bestIndex;\n}\n\n// 根据图片索引计算所在页码\nfunction getPageInfo(imageIndex) {\n    if (imageIndex < 0) return { pageNum: 0, imageInPage: 0 };\n    let count = 0;\n    for (let i = 0; i < pageImageCounts.length; i++) {\n        if (imageIndex < count + pageImageCounts[i]) {\n            return {\n                pageNum: i + 1,\n                imageInPage: imageIndex - count + 1\n            };\n        }\n        count += pageImageCounts[i];\n    }\n    return { pageNum: pageImageCounts.length, imageInPage: pageImageCounts.at(-1) || 0 };\n}\n\n// 更新状态栏\nfunction updateStatusBar() {\n    const idx = getCurrentImageIndex();\n    if (idx === -1) return;\n    \n    const { pageNum, imageInPage } = getPageInfo(idx);\n    const totalPages = pageUrls.length;\n    const totalImages = allImages.length;\n    \n    showStatus(`[图片: ${idx + 1} / ${totalImages} | 页码: ${pageNum} / ${totalPages}]`);\n}\n\n// 批量加载多个页面\nasync function loadBatchPages(startIndex, count) {\n    const endIndex = Math.min(startIndex + count, pageUrls.length);\n    let successfulPages = 0;\n    \n    for (let i = startIndex; i < endIndex; i++) {\n        const pageIndex = i;\n        let retry = 0;\n        let success = false;\n        \n        // 重试机制\n        while (retry < maxRetry && !success) {\n            try {\n                showStatus(`正在加载 ${pageIndex + 1} / ${pageUrls.length} 页…`);\n                const urls = await fetchPageImages(pageUrls[pageIndex]);\n                if (urls.length === 0) {\n                    throw new Error('无图片');\n                }\n                appendPage(urls);\n                successfulPages++;\n                updateStatusBar(); // 每页加载后更新状态\n                success = true;\n            } catch (e) {\n                retry++;\n                if (retry >= maxRetry) {\n                    showStatus(`❌ 跳过第 ${pageIndex + 1} 页`);\n                    pageImageCounts.push(0); // 占位\n                    break;\n                }\n                await new Promise(r => setTimeout(r, 500)); // 重试延迟\n            }\n        }\n    }\n    \n    return successfulPages;\n}\n\n// 自动加载所有页面（分批）\nasync function loadAllRemainingPages() {\n    if (isLoading || currentPageIndex >= pageUrls.length) {\n        return;\n    }\n    \n    isLoading = true;\n    \n    try {\n        // 分批加载页面\n        while (currentPageIndex < pageUrls.length) {\n            const remainingPages = pageUrls.length - currentPageIndex;\n            const currentBatchSize = Math.min(batchSize, remainingPages);\n            \n            showStatus(`批量加载 ${currentPageIndex + 1}-${currentPageIndex + currentBatchSize} 页…`);\n            \n            // 加载当前批次\n            await loadBatchPages(currentPageIndex, currentBatchSize);\n            \n            currentPageIndex += currentBatchSize;\n            \n            // 如果不是最后一页，添加短暂延迟\n            if (currentPageIndex < pageUrls.length) {\n                await new Promise(r => setTimeout(r, loadDelay));\n            }\n        }\n        \n        showStatus(`✅ 全部页面加载完成，共 ${allImages.length} 张图片`);\n    } catch (error) {\n        showStatus('❌ 加载过程中出现错误');\n        console.error(error);\n    } finally {\n        isLoading = false;\n    }\n}\n\n// === 初始化 ===\n(async () => {\n    if (pageUrls.length === 0) {\n        showStatus('⚠️ 未获取到分页');\n        return;\n    }\n    \n    try {\n        showStatus(`开始加载，共 ${pageUrls.length} 页…`);\n        \n        // 立即加载第一页（不等待）\n        showStatus('加载第 1 页…');\n        const urls = await fetchPageImages(pageUrls[0]);\n        appendPage(urls);\n        currentPageIndex = 1; // 第一页已加载\n        \n        showStatus(`✅ 首页加载完成 (${urls.length}张图片)`);\n        updateStatusBar();\n        \n        // 启动滚动监听（仅更新状态栏）\n        window.addEventListener('scroll', updateStatusBar, { passive: true });\n        \n        // 立即开始加载剩余所有页面（分批）\n        loadAllRemainingPages();\n        \n    } catch (e) {\n        showStatus('❌ 首页加载失败');\n        console.error(e);\n    }\n})();\n</script>\n</body>\n</html>",
    "ruleImage": "img@data-src||img@src",
    "ruleLink": "a.0@href",
    "ruleNextPage": ".current+a@href||a[aria-label=\"Next\"]@href",
    "rulePubDate": "{{@@span.0@text}}  {{@@span.1@text}}",
    "ruleTitle": ".meta-title@text",
    "singleUrl": false,
    "sortUrl": "搜索::https://meirentu.club/s/{{source.getVariable()}}-1.html\n首页::/\n热门精选::/hots.html\nXiuRen秀人网::/group/XiuRen-1.html\nMFStar模范学院::/group/MFStar-1.html\nMiStar魅妍社::/group/MiStar-1.html\nMyGirl美媛馆::/group/MyGirl-1.html\nImiss爱蜜社::/group/Imiss-1.html\nBoLoli兔几盟::/group/BoLoli-1.html\nYouWu尤物馆::/group/YouWu-1.html\nUxing优星馆::/group/Uxing-1.html\nMiiTao蜜桃社::/group/MiiTao-1.html\nFeiLin嗲囡囡::/group/FeiLin-1.html\nWingS影私荟::/group/WingS-1.html\nTaste顽味生活::/group/Taste-1.html\nLeYuan星乐园::/group/LeYuan-1.html\nHuaYan花の颜::/group/HuaYan-1.html\nDKGirl御女郎::/group/DKGirl-1.html\nMintYe薄荷叶::/group/MintYe-1.html\nYouMi尤蜜荟::/group/YouMi-1.html\nCandy糖果画报::/group/Candy-1.html\nMTMeng模特联盟::/group/MTMeng-1.html\nMicat猫萌榜::/group/Micat-1.html\nHuaYang花漾::/group/HuaYang-1.html\nXingYan星颜社::/group/XingYan-1.html\nXiaoYu画语界::/group/XiaoYu-1.html",
    "sourceGroup": "版本",
    "sourceIcon": "https://meirentu.club/static/img/logo.png",
    "sourceName": "6.8",
    "sourceUrl": "https://meirentu.club "
  },
  {
    "articleStyle": 1,
    "customOrder": 559,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": false,
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "ruleArticles": "$.rescont.data",
    "ruleContent": "<video src=\"{{$.rescont.videopath}}\" controls width=\"auto\" height=\"auto\"></video>",
    "ruleImage": "$.coverpath",
    "ruleLink": "http://lu3fcm.aksdsrle.com/api/videoplay/{{$.id}}?&uuid=1",
    "ruleNextPage": "page",
    "rulePubDate": "{{$.authername}}",
    "ruleTitle": "$.title",
    "singleUrl": false,
    "sortUrl": "性感佳人::http://lu3fcm.aksdsrle.com/api/videosort/9?orderby=&page={{page}}&uuid=1&device=0\n国产精品::http://lu3fcm.aksdsrle.com/api/videosort/10?orderby=&page={{page}}&uuid=1&device=0\nH动漫::http://lu3fcm.aksdsrle.com/api/videosort/14?orderby=&page={{page}}&uuid=1&device=0\n欧美激情::http://lu3fcm.aksdsrle.com/api/videosort/16?orderby=&page={{page}}&uuid=1&device=0\n三级电影::http://lu3fcm.aksdsrle.com/api/videosort/25?orderby=&page={{page}}&uuid=1&device=0\n高清无码::http://lu3fcm.aksdsrle.com/api/videosort/26?orderby=&page={{page}}&uuid=1&device=0\n美乳巨乳::http://lu3fcm.aksdsrle.com/api/videosort/27?orderby=&page={{page}}&uuid=1&device=0\n少女萝莉::http://lu3fcm.aksdsrle.com/api/videosort/28?orderby=&page={{page}}&uuid=1&device=0\n家庭乱伦::http://lu3fcm.aksdsrle.com/api/videosort/29?orderby=&page={{page}}&uuid=1&device=0\n绝顶潮吹::http://lu3fcm.aksdsrle.com/api/videosort/30?orderby=&page={{page}}&uuid=1&device=0\n痴女淫乱::http://lu3fcm.aksdsrle.com/api/videosort/31?orderby=&page={{page}}&uuid=1&device=0\n强奸凌辱::http://lu3fcm.aksdsrle.com/api/videosort/34?orderby=&page={{page}}&uuid=1&device=0\n制服丝袜::http://lu3fcm.aksdsrle.com/api/videosort/35?orderby=&page={{page}}&uuid=1&device=0\nAV剧情::http://lu3fcm.aksdsrle.com/api/videosort/36?orderby=&page={{page}}&uuid=1&device=0\n人妻熟女::http://lu3fcm.aksdsrle.com/api/videosort/37?orderby=&page={{page}}&uuid=1&device=0\n偷拍盗摄::http://lu3fcm.aksdsrle.com/api/videosort/38?orderby=&page={{page}}&uuid=1&device=0\n风俗沙龙::http://lu3fcm.aksdsrle.com/api/videosort/39?orderby=&page={{page}}&uuid=1&device=0\n国产传媒::http://lu3fcm.aksdsrle.com/api/videosort/40?orderby=&page={{page}}&uuid=1&device=0\n女同性恋::http://lu3fcm.aksdsrle.com/api/videosort/41?orderby=&page={{page}}&uuid=1&device=0\n直播网红::http://lu3fcm.aksdsrle.com/api/videosort/42?orderby=&page={{page}}&uuid=1&device=0\n国产AV::http://lu3fcm.aksdsrle.com/api/videosort/44?orderby=&page={{page}}&uuid=1&device=0\nSM调教::http://lu3fcm.aksdsrle.com/api/videosort/45?orderby=&page={{page}}&uuid=1&device=0\nAV解说::http://lu3fcm.aksdsrle.com/api/videosort/49?orderby=&page={{page}}&uuid=1&device=0\n热门爆料::http://lu3fcm.aksdsrle.com/api/videosort/50?orderby=&page={{page}}&uuid=1&device=0",
    "sourceGroup": "版本",
    "sourceIcon": "",
    "sourceName": "6.9",
    "sourceUrl": "http://lu3fcm.aksdsrle.com/api/videosort/9?orderby=&page=1&uuid=1&device=0"
  },
  {
    "articleStyle": 2,
    "customOrder": 560,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": true,
    "header": "{\n  \"User-Agent\": \"Mozilla/5.0 (Linux; Android 13; SM-S918B) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Mobile Safari/537.36\",\n  \"Referer\": \"https://hksexdoll.com/\"\n}",
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "ruleArticles": "@js:\n// 1. 列表规则分流\nif (baseUrl.includes(\"hksexdoll.com\")) {\n    // 娃娃：原版规则不动\n    result = org.jsoup.Jsoup.parse(result).select(\".brxe-ivopbr\");\n} else {\n    // 【关键修改】影视：只抓取 class=\"my-movie-grid\" 下面的 li\n    // 这样可以避开 WordPress 顶部的菜单栏干扰\n    result = org.jsoup.Jsoup.parse(result).select(\".my-movie-grid li\");\n}\nresult;",
    "ruleContent": "@js:\n// 5. 详情页跳转逻辑（原版逻辑保持不变）\nif (!baseUrl.includes(\"hksexdoll.com\")) {\n    // 只要不是娃娃官网，直接跳浏览器\n    java.startBrowser(baseUrl, \"正在前往...\");\n    result = \"正在跳转到外部浏览器播放...<br>\" + baseUrl;\n} else {\n    // 娃娃详情页解析（原版代码不动）\n    var doc = org.jsoup.Jsoup.parse(result);\n    var myImgs = [];\n    var rawList = doc.select(\".brxe-image-gallery img, .bricks-image-gallery img, noscript img, .entry-content img\");\n    for (var i = 0; i < rawList.size(); i++) {\n        var s = rawList.get(i).attr(\"data-src\") || rawList.get(i).attr(\"src\");\n        if (s && s.startsWith(\"http\") && !s.toLowerCase().includes(\".svg\") && !s.includes(\"100x100\") && !myImgs.includes(s)) {\n            myImgs.push(s);\n        }\n    }\n    var displayTitle = (typeof title !== 'undefined' && title && title !== \"null\") ? title : (doc.select(\"h1\").text() || \"1:1 Show\");\n    var h = \"<!DOCTYPE html><html><head><style>body{margin:0;background:#000;color:#eee;font-family:sans-serif;padding-bottom:50px} .top{background:#1a1a1a;color:#888;text-align:center;padding:12px;font-size:11px;position:sticky;top:0;z-index:99;letter-spacing:2px;border-bottom:1px solid #222} .header{padding:35px 20px 20px;background:#000;text-align:center} .img-wrap{padding:0 8px} .img-item{position:relative;margin-bottom:10px;border-radius:2px;overflow:hidden} .img-item img{width:100%;display:block;background:#111} .img-count{position:absolute;bottom:8px;right:10px;background:rgba(0,0,0,0.4);color:#999;padding:2px 6px;border-radius:2px;font-size:10px;font-family:monospace}</style></head><body>\";\n    h += \"<div class='top'>HD VISUAL SHOWCASE</div>\";\n    h += \"<div class='header'><h1 style='font-size:19px;margin:0;font-weight:400;color:#fff;letter-spacing:0.5px'>\" + displayTitle + \"</h1></div>\";\n    h += \"<div class='img-wrap'>\";\n    for(var k=0; k<myImgs.length; k++){\n        h += \"<div class='img-item'><img src='\" + myImgs[k] + \"'><span class='img-count'>\" + (k+1) + \" / \" + myImgs.length + \"</span></div>\";\n    }\n    h += \"</div><p style='text-align:center;color:#222;font-size:9px;margin-top:30px;letter-spacing:1px'>EXHIBITION ONLY</p></body></html>\";\n    result = h;\n}\nresult;",
    "ruleImage": "@js:\n// 4. 图片分流\nif (baseUrl.includes(\"hksexdoll.com\")) {\n    // 娃娃：原版规则不动\n    var img = result.select(\"img\").first();\n    result = img ? (img.attr(\"data-src\") || img.attr(\"src\")) : \"\";\n} else {\n    // 【关键修改】影视：抓取你代码里的 Google API 图标\n    var img = result.select(\"img\").first();\n    // 如果抓到了图就用图，抓不到就用默认图标兜底\n    result = img ? img.attr(\"src\") : \"https://goradioai.com/favicon.ico\";\n}\nresult;",
    "ruleLink": "@js:\n// 3. 链接分流\nif (baseUrl.includes(\"hksexdoll.com\")) {\n    var el = result.select(\"a.brxe-sfypzq\").first();\n    result = el ? el.attr(\"href\") : \"\";\n} else {\n    var el = result.select(\"a\").first();\n    result = el ? el.attr(\"href\") : \"\";\n}\nresult;",
    "ruleNextPage": "text.Next@href || .next.page-numbers@href",
    "ruleTitle": "@js:\n// 2. 标题分流\nif (baseUrl.includes(\"hksexdoll.com\")) {\n    result = result.select(\".product-title a\").text();\n} else {\n    // 影视：直接获取文本（会自动忽略掉 img 标签，只留文字）\n    result = result.text();\n}\nresult;",
    "singleUrl": false,
    "sortUrl": "全部展示::/shop/\n🎬 影视大全::https://goradioai.com/share/",
    "sourceGroup": "版本",
    "sourceIcon": "https://hksexdoll.com/favicon.ico",
    "sourceName": "7.0",
    "sourceUrl": "https://hksexdoll.com"
  },
  {
    "articleStyle": 1,
    "customOrder": 561,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": false,
    "header": "{\"User-Agent\":\"Mozilla/5.0 (Linux; Android 5.0; SM-G900P Build/LRX21T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Mobile Safari/537.36 Edg/91.0.864.67\"\n}",
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "ruleArticles": "li",
    "ruleContent": "class.bz_message_table&&class.message@all##file##src",
    "ruleImage": "img@src",
    "ruleLink": "a@href",
    "ruleNextPage": "page",
    "rulePubDate": "tag.a@tag.span.3@text",
    "ruleTitle": "a@tag.span.0@text",
    "singleUrl": false,
    "sortUrl": "国产自拍::https://galaxy.st1003.top/forum.php?mod=forumdisplay&fid=18&page={{page}}&mobile=2\n亚洲无码::https://galaxy.st1003.top/forum.php?mod=forumdisplay&fid=19&page={{page}}&mobile=2\n中文字幕::https://galaxy.st1003.top/forum.php?mod=forumdisplay&fid=21&page={{page}}&mobile=2\n欧美专区::https://galaxy.st1003.top/forum.php?mod=forumdisplay&fid=25&page={{page}}&mobile=2",
    "sourceComment": "发布页\n6996dizhi.com\n<js>github@ifwlzs</js>",
    "sourceGroup": "版本",
    "sourceIcon": "https://galaxy.st1003.top/favicon.ico",
    "sourceName": "7.1",
    "sourceUrl": "https://galaxy.st1003.top/",
    "style": "img{\n\twidth:100%;\n\theight:auto;\n\t}##github@ifwlzs"
  },
  {
    "articleStyle": 1,
    "customOrder": 562,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": false,
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "ruleArticles": "class.inner_layer@ul@li@a",
    "ruleContent": "text.普通下载@href\n<js>\nresult+=\".m3u8\";\r\nresult = \"<video src=\\\"\" + result + \"\\\" width=\\\"100%\\\" height=\\\"240px\\\" controls=\\\"controls\\\" ></video>\";\r\nresult = \"<html><head><meta charset=\\\"utf-8\\\"><meta name=\\\"viewport\\\" content=\\\"width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no\\\" /><style>html,body{margin:0;padding:0;width:100%;}</style></head><body>\" + result + \"</body></html>\"\n</js>",
    "ruleImage": "img@data-original||img@src",
    "ruleLink": "href##$##,\\{\\\"webView\\\": true\\}",
    "ruleNextPage": "page",
    "rulePubDate": "class.timeobxobx@text",
    "ruleTitle": "p.-1@text",
    "singleUrl": false,
    "sortUrl": "亚洲精品::/Html/110/{{page - 1 == 0 ? \"\":\"index-\"+page+\".html\"}},{\"webView\": true}\nS级女优::/Html/100/{{page - 1 == 0 ? \"\":\"index-\"+page+\".html\"}},{\"webView\": true}\n成人动漫::/Html/101/{{page - 1 == 0 ? \"\":\"index-\"+page+\".html\"}},{\"webView\": true}\n欧美巨龙::/Html/62/{{page - 1 == 0 ? \"\": \"index-\"+page+\".html\"}},{\"webView\": true}\n熟女人妻::/Html/111/{{page - 1 == 0 ? \"\": \"index-\"+page+\".html\"}},{\"webView\": true}\n美颜巨乳::/Html/112/{{page - 1 == 0 ? \"\": \"index-\"+page+\".html\"}},{\"webView\": true}\n颜射吃精::/Html/113/{{page - 1 == 0 ? \"\": \"index-\"+page+\".html\"}},{\"webView\": true}\n丝袜制服::/Html/114/{{page - 1 == 0 ? \"\": \"index-\"+page+\".html\"}},{\"webView\": true}\n自拍隐摄::/Html/89/{{page - 1 == 0 ? \"\": \"index-\"+page+\".html\"}},{\"webView\": true}\n换妻游戏::/Html/90/{{page - 1 == 0 ? \"\": \"index-\"+page+\".html\"}},{\"webView\": true}\n网红主播::/Html/91/{{page - 1 == 0 ? \"\": \"index-\"+page+\".html\"}},{\"webView\": true}\n经典三级::/Html/109/{{page - 1 == 0 ? \"\": \"index-\"+page+\".html\"}},{\"webView\": true}",
    "sourceComment": "发布页https://guochandizhi6.com/\n永久地址https://992kp.com/",
    "sourceGroup": "版本",
    "sourceIcon": "https://i.postimg.cc/j5ZxW6v7/1657950527553.png",
    "sourceName": "7.2",
    "sourceUrl": "https://992.992kp340.work:8443/index.html"
  },
  {
    "articleStyle": 1,
    "customOrder": 563,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": true,
    "header": "{\"User-Agent\":\"Mozilla/5.0 (Linux; Android 11; PCAM10 Build/RP1A.200720.011; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/100.0.4103.106 Mobile Safari/537.36\"} ",
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "ruleArticles": "[class=\"H5__content\"]@[class=\"video__wrap\"]@a",
    "ruleContent": "<!DOCTYPE html>\n<html lang=\"zh-CN\">\n<head>\n<meta charset=\"UTF-8\">\n<title>内容提取-双模版</title>\n\n<script src=\"https://code.jquery.com/jquery-3.6.0.min.js\"></script>\n<link rel=\"stylesheet\" href=\"https://cdnjs.cloudflare.com/ajax/libs/viewerjs/1.11.3/viewer.min.css\" />\n<script src=\"https://cdnjs.cloudflare.com/ajax/libs/viewerjs/1.11.3/viewer.min.js\"></script>\n<style>\n    body {font-family: Arial, sans-serif;font-size: 16px;}\n    #title, #page, #loading-status {margin: 0 auto;font-size: 20px;text-align: center;}\n    #description, #urls, #video-url, #video-sources, #messages {width: 100%;max-width: 800px;margin: 1.5px auto;font-size: 14px;text-align: left;word-wrap: break-word;white-space: pre-wrap;}\n    #text, #text :not(img), #text img + * {text-indent: 2em;width: 100%;font-size: 16px;line-height: 1.5em;margin-top: 0;margin-bottom: 0;word-wrap: break-word;white-space: pre-wrap;}\n    img, #text img {width: 100%;height: auto;display: block;margin-bottom: 1.5px;}\n    .flex-container {display: flex;justify-content: center;align-items: center;gap: 10px;margin: 1.5px 0;font-size: 14px;}\n    button, select {flex: 1 1 31%; padding: 3px;border: 1px solid #ccc;border-radius: 5px;box-sizing: border-box;cursor: pointer;background-color: #f9f9f9;transition: background-color 0.3s ease;margin: 1.5px;min-width: 0;font-size: 14px;}\n    #url-select, #video-source-select {flex: 1 1 100%; margin-left: 0;margin-right: 0;text-align: center;}\n    #video-element {width: 100%;height: auto;}\n    textarea {width: 100%;height: auto;min-height: 100px;box-sizing: border-box;resize: vertical;}\n    .error, .warn {color: red;}\n    #urls,#messages,#debug-info,#video-url,#video-container,#video-source-select,#images,#text {display:none;}\n</style>\n</head>\n<body>\n    <h3 id=\"title\">{{@@title@text||h1.0@text||h2.0@text||.title.0@text##高清在线观看|-国产剧| - 专享影视| - 热门高清|影视大全|海外华人|高清1080p|无广告影院|\\|}}</h3>\n    <p id=\"description\">{{@@.info.0@html||.jianjie@html}}</p>\n    <p id=\"page\">共<span id=\"total-pages\">1</span>页</p>\n    <p id=\"loading-status\" style=\"display:none;\"></p>\n    <div class=\"flex-container\" id=\"loading-buttons\" style=\"display:none;\">\n        <button id=\"prev-page-btn\">上一页</button>\n        <button id=\"next-page-btn\">下一页</button>\n        <button id=\"auto-load-btn\">自&nbsp;&nbsp;动</button>\n    </div>\n    <div class=\"flex-container\">\n        <select id=\"url-select\" style=\"display:none;\"></select>\n    </div>\n    <div class=\"flex-container\">\n        <button id=\"toggle-urls-btn\">显/隐网址</button>\n        <button id=\"toggle-messages-btn\">显/隐信息</button>\n        <button id=\"toggle-debug-btn\">显/隐调试</button>\n    </div>\n    <div id=\"urls\"></div>\n    <div id=\"messages\"></div>\n    <div id=\"debug-info\"></div>\n    <div id=\"video-url\"></div>\n    <div id=\"video-container\">\n        <video id=\"video-element\" controls preload=\"auto\" width=\"640\" height=\"264\">\n            <source id=\"video-source\" src=\"\" type=\"\">\n            您的浏览器不支持 video 标签。\n        </video>\n    </div>\n    <div class=\"flex-container\">\n        <select id=\"video-source-select\" onchange=\"updateVideoSource()\"></select>\n    </div>\n    <div id=\"images\"></div>\n    <div id=\"text\"></div>\n    <script>\nconst config = {    \n    videoSelector: 'body', // 视频选择器\n    imgSelector: '.gridlane-box-inside img', // 图片选择器\n    textSelector: '#content', // 文本选择器\n    debugSelector: '.player-wrapper', // 调试信息选择器\n    swapImageAttributes: false, // 是否交换图片属性\n    delayTime: 1500, // 延迟提取时间\n    retryDelayTime: 1500, // 重试加载延迟时间\n    maxLoadAttempts: 3, // 最大加载次数\n    autoLoading: false, // true自动模式，false单页模式\n    debugOnce: 0, // 只在特定索引输出一次调试信息\n         /* -网页拼接-*/    \n    totalPagesText: '{{@@.pager@li.-3@a@textNodes}}', // 总页码\n    urlSuffixToRemove: /\\.aspx$/, // 移除url后缀\n    pageUrlText: '{urlPrefix}p{i}.aspx', // 拼接URL模板        \n        /* -以上拼接模式（网址需要拼接）-*/\n        /* -上下分割线-*/\n        /* -以下列表模式（地址与目录对应，比如视频、漫画）-*/   \n    ListMode: true, // true网址列表模式，false网址拼接模式    \n    initialUrls: `{{@@#sort-item-5.0@a@href}}`, // 网址\n    initialUrlsName: `{{@@#sort-item-5.0@a@span@text}}`, // 网址名称\n    sourceurl: '', // 来源URL前缀\n};\n\nlet videoSources = [];\nlet loadAttempts = {};\nlet urls = [];\nlet imageBox;\nlet textBox;\nlet currentPageIndex = 0;\nlet canLoadNextPage = true;\nlet autoLoadInProgress = false;\n\n// 构建URL列表\nfunction buildUrls(totalPages, baseUrl) {\n    let initialUrlsArray = config.initialUrls.trim().split('\\n').filter(url => url.trim() !== '');\n    let initialUrlsNameArray = config.initialUrlsName.trim().split('\\n').filter(name => name.trim() !== '');\n\n    if (config.ListMode && initialUrlsArray.length > 0) {\n        if (initialUrlsArray.length !== initialUrlsNameArray.length) {\n            $('#messages').append(`<span class=\"warn\">警告：initialUrls 和 initialUrlsName 的长度不匹配。</span><br>`);\n        }\n\n        urls = initialUrlsArray.map(url => {\n            if (config.sourceurl && url.startsWith('/') && !/^https?:\\/\\//i.test(url)) {\n                return config.sourceurl.replace(/\\/$/, '') + url;\n            } else {\n                return url;\n            }\n        });\n\n        urls.forEach((url, index) => {\n            const name = initialUrlsNameArray[index] || `第 ${index + 1} 页`;\n            $('#url-select').append(`<option value=\"${index}\">${name}</option>`);\n            $('#urls').append(`<div>${name}: ${url}</div>`);\n        });\n    } else {\n        if (totalPages === 1) {\n            urls.push(baseUrl);\n        } else {\n            urls.push(baseUrl);\n            for (let i = 2; i <= totalPages; i++) {\n                urls.push(config.pageUrlText.replace('{urlPrefix}', baseUrl.replace(config.urlSuffixToRemove, '').replace(/\\/$/, '')).replace('{i}', i));\n            }\n        }\n\n        urls.forEach((url, index) => {\n            const name = `第 ${index + 1} 页`;\n            $('#url-select').append(`<option value=\"${index}\">${name}</option>`);\n            $('#urls').append(`<div>${name}: ${url}</div>`);\n        });\n    }\n\n    $('#total-pages').text(urls.length);\n    toggleNavigationButtons();\n}\n\nfunction normalizeUrl(url) {\n    if (typeof url!== 'string' ||!url.trim()) return '';\n    url = url.replace(/\\\\u[\\dA-F]{4}/gi, (match) => String.fromCharCode(parseInt(match.replace(/\\\\u/g, ''), 16)));\n    url = decodeURIComponent(url);\n    url = url.replace(/^http:\\/([^/])/, 'http://$1'); // 修正 http:/ 协议部分\n    url = url.replace(/^https:\\/([^/])/, 'https://$1'); // 修正 https:/ 协议部分\n    return url;\n}\n\n// 清空容器\nfunction clearContainers() {\n    $('#messages').empty();\n    $('#images').empty();\n    $('#text').empty();\n}\n\n// 更新图片的src属性\nfunction updateImageSrc(elements, shouldSwap) {\n    elements.each(function () {\n        const $this = $(this);\n        const attrsToUpdate = {};\n        if (shouldSwap) {\n            ['data-original', 'data-src', 'data-url'].forEach(attr => {\n                if ($this.attr(attr)) {\n                    attrsToUpdate['src'] = $this.attr(attr);\n                }\n            });\n        }\n        $this.attr(attrsToUpdate);\n    });\n    return elements;\n}\n\n// 切换导航按钮和选择框的显示\nfunction toggleNavigationButtons() {\n    if ($('#url-select option').length > 1  && !config.autoLoading) {\n        $('#loading-buttons').show();\n        $('#url-select').show();\n    } else {\n        $('#loading-buttons').hide();\n        $('#url-select').hide();\n    }\n}\n\n// 显示加载状态\nfunction showLoadingStatus(pageNumber) {\n    const selectedOption = $('#url-select option:selected').text();\n    $('#loading-status').text(`正在加载：${selectedOption}`).show();\n}\n\n// 隐藏加载状态\nfunction hideLoadingStatus() {\n    $('#loading-status').hide();\n}\n\n// 内容提取函数内容\nfunction loadContent(index) {\n    if (index < 0 || index >= urls.length || !canLoadNextPage) return;\n    canLoadNextPage = false;\n    currentPageIndex = index;\n    $('#url-select').val(index);\n    $('#messages').append(`<div>当前地址: <span class=\"warn\">${urls[index]}</span> </div>`);\n    if (autoLoadInProgress) {\n        showLoadingStatus(index + 1);\n    }\n    $.ajax({\n        url: urls[index],\n        type: 'GET',\n        success: function (data) {\n            try {\n                const $data = $(data);\n                let updatedHtmlContent = data.replace(/(['\"])(\\/\\/)(?!\\/)/g, '$1https://')\n                    .replace(/src=\"upload/gi, 'src=\"/upload')\n                    .replace(/style=[\"'][^'\"]+[\"']/gi, '')\n                    .replace(/\\\\\\//g, '/');\n                const parser = new DOMParser();\n                const doc = parser.parseFromString(updatedHtmlContent, \"text/html\");\n\n                  // 添加调试标签输出信息\n                if (config.debugOnce === index) {\n                    const debugElements = $(doc).find(config.debugSelector);\n                    if (debugElements.length > 0) {\n                        const debugContents = $('<pre>').html(debugElements.clone().wrapAll('<div/>').parent().html()).html();\n                        $('#debug-info').html(`<span class=\"warn\">调试信息: <textarea rows=\"10\" cols=\"80\">${debugContents}</textarea></span>`);\n                    } else {\n                        $('#debug-info').html(`<span class=\"warn\">调试信息: <textarea rows=\"10\" cols=\"80\">调试信息未提取到内容，请检查选择器！</textarea></span>`);\n                    }\n                }\n\n                // 方法1：video标签获取视频地址\n                const videoContents = $(doc).find(config.videoSelector);\n                const videoTags = $(videoContents).find('video');\n                videoTags.each(function () {\n                    const videosrc = $(this).attr('src') || $(this).attr('data-src') || $(this).attr('data-original') || '';\n                    if (videosrc) {\n                        videoSources.push(videosrc);\n                    }\n                });\n                \n                // 方法2：source标签获取视频地址\n                const sources = $(videoContents).find('source');\n                sources.each(function () {\n                    const sourceSrc = $(this).attr('src') || $(this).attr('data-src') || $(this).attr('data-original') || '';\n                    if (sourceSrc) {\n                        videoSources.push(sourceSrc);\n                    }\n                });\n                \n                // 方法3：正则表达式获取视频地址\n                const regex = /['\"]https?[^'<>\"]+\\.(m3u8|mp4|webm|ogg|flv|mp3|m4a|wav|ape|flac)['\"]/ig;\n                const matches = data.match(regex);\n                if (matches) {\n                    const uniqueMatches = matches.filter((value, idx, self) => self.indexOf(value) === idx);\n    videoSources = videoSources.concat(uniqueMatches.map((match) => {\n        // 使用replace删除引号\n                const urlWithoutQuotes = match.replace(/['\"]/g, '');\n                return normalizeUrl(urlWithoutQuotes);\n                          }));\n                }\n\n                videoSources = videoSources.map(src => normalizeUrl(src.replace(/\\\\+/g, '')));\n                videoSources = [...new Set(videoSources)];\n\n                if (videoSources.length > 0) {\n                    $('#messages').append(`<span>成功提取到视频，找到 ${videoSources.length} 个视频。</span><br>`);\n                    videoSources.forEach((src, idx) => {\n                        $('#messages').append(`<div>视频地址:<span class=\"warn\"> ${src}</span><br></div>`);\n                        $('#video-source-select').append(`<option value=\"${idx}\">视频源 ${idx + 1}</option>`);\n                    });\n                    \n                    if (videoSources.length == 1) {\n                        $('#video-container').show();\n                        $('#video-url').show();\n                        $('#video-source-select').hide();\n                        updateVideoSource(); // 自动更新视频源\n                    } else if (videoSources.length > 1) {\n                        $('#video-container').show();\n                        $('#video-url').show();\n                        $('#video-source-select').show();\n                        updateVideoSource(); // 默认选择第一个视频源\n                    } else {\n                        $('#video-container').hide();\n                        $('#video-url').hide();\n                        $('#video-source-select').hide();\n                    }\n                } else {\n                    $('#messages').append(`<span class=\"warn\">未找到视频源。</span><br>`);\n                    $('#video-container').hide();\n                    $('#video-url').hide();\n                    $('#video-source-select').hide();\n                }\n\n                // 标签获图片\n                const $imgContents = $(doc).find(config.imgSelector);\n                const shouldSwap = config.swapImageAttributes;\n                const newContents = updateImageSrc($imgContents.clone(), shouldSwap);\n                $('#images').append(newContents).show();\n                if (newContents.length > 0) {\n                    $('#messages').append(`<span>成功提取图片，共 ${newContents.length} 张。</span><br>`);\n                    newContents.each(function () {\n                        const imgSrc =$(this).attr('src') || $(this).attr('data-original') || $(this).attr('data-src') || $(this).attr('data-url');\n                        $('#messages').append(`<div>地址:<span class=\"warn\"> ${imgSrc}</span><br></div>`);\n                    });\n                } else {\n                    $('#messages').append(`<span class=\"warn\">未提取到图片。</span><br>`);\n                }\n\n                // 标签获图文\n                const textContents = $(doc).find(config.textSelector).map(function () {\n                    const $currentContents = $(this);\n                    $currentContents.find('img + br, script, video, source').remove();\n                    $currentContents.html($currentContents.html().replace(/>\\s+/gi, '>').replace(/<\\/?br\\s*([^>]*)\\s*\\/?>/gi, '\\n').replace(/\\n+/g, '\\n'));\n                    return $currentContents.html();\n                }).get().join('');\n                if (textContents.trim()) {\n                    $('#text').append(`<span>${textContents}</span><br>`).show();\n                    $('#messages').append(`<span>成功提取图文。</span><br>`);\n                } else {\n                    $('#messages').append(`<span class=\"warn\">未提取到图文。</span><br>`);\n                }\n                \n                \n                if (autoLoadInProgress && currentPageIndex < urls.length - 1) {\n                    setTimeout(() => { \n                        canLoadNextPage = true;\n                        loadContent(currentPageIndex + 1); \n                    }, config.delayTime);\n                } else {\n                    canLoadNextPage = true;\n                    if (autoLoadInProgress) {\n                        hideLoadingStatus();\n                    }\n                }\n            } catch (parseError) {\n                $('#messages').append(`<span class=\"error\">解析页面内容时发生错误: ${parseError.message}</span><br>`);\n                handleLoadFailure(urls, index);\n            } finally {\n                if (imageBox) imageBox.viewer.update();\n                if (textBox) textBox.viewer.update();\n            }\n        },\n        error: function (jqXHR, textStatus, errorThrown) {\n            let errorMessage = `内容加载失败: ${urls[index]}`;\n            switch (textStatus) {\n                case 'timeout':\n                    errorMessage += ', 请求超时';\n                    break;\n                case 'abort':\n                    errorMessage += ', 请求被取消';\n                    break;\n                case 'parsererror':\n                    errorMessage += ', 解析响应出错';\n                    break;\n                default:\n                    errorMessage += `, 状态码: ${jqXHR.status}, 错误信息: ${errorThrown}`;\n                    break;\n            }\n            $('#messages').append(`<span class=\"error\">${errorMessage}</span><br>`);\n            handleLoadFailure(urls, index);\n        }\n    });\n}\n\n// 处理加载失败的情况\nfunction handleLoadFailure(urls, index) {\n    if (!loadAttempts[urls[index]]) {\n        loadAttempts[urls[index]] = 1;\n    } else {\n        loadAttempts[urls[index]]++;\n    }\n    if (loadAttempts[urls[index]] <= config.maxLoadAttempts) {\n        const retryMessage = `第${index + 1}页加载失败，正在进行第${loadAttempts[urls[index]]}次加载！`;\n        $('#messages').append(`<span class=\"error\">${retryMessage}</span><br>`);\n        setTimeout(() => { \n            canLoadNextPage = true;\n            loadContent(index); \n        }, config.retryDelayTime);\n    } else {\n        const finalErrorMessage = `第${index + 1}页加载失败，已达到最大尝试次数(${config.maxLoadAttempts})！`;\n        $('#messages').append(`<span class=\"error\">${finalErrorMessage}</span><br>`);\n        if (autoLoadInProgress && currentPageIndex < urls.length - 1) {\n            setTimeout(() => { \n                canLoadNextPage = true;\n                loadContent(currentPageIndex + 1); \n            }, config.delayTime);\n        } else {\n            canLoadNextPage = true;\n            if (autoLoadInProgress) {\n                hideLoadingStatus();\n            }\n        }\n    }\n}\n\n// 更新视频源\nfunction updateVideoSource() {\n    const selectedIndex = parseInt(document.getElementById('video-source-select').value);\n    const selectedSource = videoSources[selectedIndex];\n    document.getElementById('video-url').textContent = `视频地址:\\n ${selectedSource}`;\n\n    // 设置 video-source 的 src 属性\n    const videoSourceElement = document.getElementById('video-source');\n    videoSourceElement.src = selectedSource;\n\n    // 更新 video 元素的 src 属性\n    const videoElement = document.getElementById('video-element');\n    videoElement.load();\n\n    // 添加调试信息\n    $('#messages').append(`<span>更新视频源为: ${selectedSource}</span><br>`);\n}\n\n// 函数执行主体\n$(document).ready(function () {\n    imageBox = document.getElementById('images');\n    textBox = document.getElementById('text');\n    if (imageBox && textBox) {\n        new Viewer(imageBox, { title: true, interval: 2000 });\n        new Viewer(textBox, { title: true, interval: 2000 });\n    }\n\n    const totalPagesText = config.totalPagesText;\n    const totalPages = parseInt(totalPagesText, 10) || 1;\n    const baseUrl = '{{baseUrl}}';\n    \n    clearContainers();\n    $('#urls').empty();\n    $('#debug-info textarea').empty();   \n    $('#video-url').empty().hide();\n    $('#video-container').hide();\n    $('#video-source-select').empty().hide();\n    \n    buildUrls(totalPages, baseUrl);\n\n    const urlSelect = document.getElementById('url-select');\n    if (urlSelect.options.length > 0) {\n        urlSelect.value = '0'; \n        \n        if (config.autoLoading) {\n            autoLoadInProgress = true;\n            for (let i = 0; i < urls.length; i++) {\n                loadContent(i);\n            }\n        } else {\n            loadContent(0);\n        }\n    } else {\n        loadContent(0);\n    }\n\n    $('#url-select').change(function () {\n        clearContainers();\n        const selectedIndex = parseInt($(this).val());\n        loadContent(selectedIndex);\n    });\n    $('#prev-page-btn').click(function () {\n        clearContainers();\n        if (currentPageIndex > 0) {\n            loadContent(currentPageIndex - 1);\n        }\n    });\n    $('#next-page-btn').click(function () {\n        clearContainers();\n        if (currentPageIndex < urls.length - 1) {\n            loadContent(currentPageIndex + 1);\n        }\n    });\n    $('#auto-load-btn').click(function () {\n        autoLoadInProgress = true;\n        showLoadingStatus(1); \n        for (let i = currentPageIndex + 1; i < urls.length; i++) {\n            loadContent(i);\n        }\n    });\n    $('#toggle-messages-btn').click(function () { $('#messages').toggle(); });\n    $('#toggle-urls-btn').click(function () { $('#urls').toggle(); });\n    $('#toggle-debug-btn').click(function () { $('#debug-info').toggle(); });\n});\n    </script>\n</body>\n</html>",
    "ruleImage": "img@src",
    "ruleLink": "a@href",
    "ruleNextPage": "page||text.下一页@href",
    "rulePubDate": "p.-1@text\n",
    "ruleTitle": "h3.-1@text",
    "singleUrl": false,
    "sortUrl": "搜索::https://czy.yzfnb6.help/cn/home/web/index.php/vod/search.html?wd={{source.getVariable()}}\n最新上传::/cn/home/web/index.php/label/new/page/{{page}}.html\n熟母少妇::/cn/home/web/index.php/vod/type/id/20/page/{{page}}.html\n网红直播::/cn/home/web/index.php/vod/type/id/21/page/{{page}}.html\n自拍偷拍::/cn/home/web/index.php/vod/type/id/22/page/{{page}}.html\n强奸乱伦::/cn/home/web/index.php/vod/type/id/23/page/{{page}}.html\n高清国产::/cn/home/web/index.php/vod/type/id/24/page/{{page}}.html\n韩国专区::/cn/home/web/index.php/vod/type/id/25/page/{{page}}.html\n日本有码::/cn/home/web/index.php/vod/type/id/26/page/{{page}}.html\n日本无码::/cn/home/web/index.php/vod/type/id/27/page/{{page}}.html\n欧美情色::/cn/home/web/index.php/vod/type/id/28/page/{{page}}.html\n动漫卡通::/cn/home/web/index.php/vod/type/id/29/page/{{page}}.html\n三级伦理::/cn/home/web/index.php/vod/type/id/30/page/{{page}}.html",
    "sourceComment": "By小新\n永久地址：https://bqm.avds8.com/g/",
    "sourceGroup": "版本",
    "sourceIcon": "",
    "sourceName": "7.3需要网页",
    "sourceUrl": "https://rlblsm.yzfnb4.lat/cn/home/web/"
  },
  {
    "articleStyle": 0,
    "customOrder": 565,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": true,
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "ruleArticles": "class.line_bottom@tr",
    "ruleContent": "class.entry@html",
    "ruleLink": "tag.a.0@href",
    "ruleNextPage": "page",
    "rulePubDate": "text",
    "ruleTitle": "a@title",
    "singleUrl": false,
    "sortUrl": "最新::https://enpeta.com/e/action/ListInfo/index.php?page={{page}}&classid=1",
    "sourceGroup": "版本",
    "sourceIcon": "https://avatars.githubusercontent.com/u/49548316",
    "sourceName": "7.4",
    "sourceUrl": "https://enpeta.com"
  },
  {
    "articleStyle": 1,
    "customOrder": 566,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": true,
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "ruleArticles": "ul",
    "ruleContent": "title@text&&id.video@all",
    "ruleImage": ".lazy@img",
    "ruleLink": "a@href",
    "ruleNextPage": "text.Next@href",
    "rulePubDate": "日期: {{@@.view@span@text}}      时长:{{@@class.image@text}}",
    "ruleTitle": "class.title@text",
    "singleUrl": false,
    "sortUrl": "最新视频::https://www.tasexy.com/new.html\n偷拍自拍::https://www.tasexy.com/list/129.html\n国产情侣::https://www.tasexy.com/list/180.html\n国产偷拍::https://www.tasexy.com/list/353.html\n自拍偷拍::https://www.tasexy.com/list/456.html\n国产色情::https://www.tasexy.com/list/455.html\n素人自拍::https://www.tasexy.com/list/454.html\n国产色情::https://www.tasexy.com/list/210.html\n国产色情:https://www.tasexy.com/list/222.html\n\n国产精品::https://www.tasexy.com/list/187.html\n国产自拍::https://www.tasexy.com/list/234.html\n国产自拍::https://www.tasexy.com/list/198.html\n短视频::https://www.tasexy.com/list/319.html\n女神学生::https://www.tasexy.com/list/243.html\n自慰群交::https://www.tasexy.com/list/248.html\n抖阴视频::https://www.tasexy.com/list/254.html\n小鸟酱::https://www.tasexy.com/list/260.html\n网曝门::https://www.tasexy.com/list/261.html\n水果派::https://www.tasexy.com/list/322.html\n颜射::https://www.tasexy.com/list/324.html\n韩国明星::https://www.tasexy.com/list/173.html\n国产女奴::https://www.tasexy.com/list/177.html\n网曝门::https://www.tasexy.com/list/466.html\n网红流出::https://www.tasexy.com/list/465.html\nCosplay::https://www.tasexy.com/list/463.html\n过膝袜::https://www.tasexy.com/list/462.html\n瑜伽裤::https://www.tasexy.com/list/461.html\n兽耳系列::https://www.tasexy.com/list/460.html\n91探花::https://www.tasexy.com/list/425.html\n",
    "sourceComment": "✪一夜爆裤制作✪\n✪名称后带\"@/封面VPN\"要翻墙✪\n✪更多分类自行添加✪\n 发布地址→https://www.662222.one/",
    "sourceGroup": "版本",
    "sourceIcon": "https://img2.baidu.com/it/u=1877943053,1292683255&fm=253&fmt=auto&app=138&f=PNG?w=319&h=296",
    "sourceName": "7.5报废或者翻墙",
    "sourceUrl": "https://www.tasexy.com/#dialog",
    "style": "iframe{\n\theight:420px\n}\ntitle{\n\tdisplay:block\n}"
  },
  {
    "articleStyle": 0,
    "contentBlacklist": "https://pc.stgowan.com/,\nhttps://dmku.mhtjx.top/,\nhttps://dmku.m3u8.pw/,\nhttps://dm.bbj.icu/,\nhttps://www.superplayer.top/index.php/index/dm",
    "coverDecodeJs": "function toByteArray(input) {\n  var out = new Packages.java.io.ByteArrayOutputStream();\n  var buffer = java.strToBytes('\\0'.repeat(4096));\n  var bytesRead;\n  while ((bytesRead = input.read(buffer)) != -1) {\n    out.write(buffer, 0, bytesRead);\n  }\n  return out.toByteArray();\n}\n\n(function() {\n  // 1. 读取原始字节内容\n  var textBytes = toByteArray(result);\n  // 2. 如果是GIF文件，直接返回原始字节\n  if (src.endsWith('.gif')) {\n    return textBytes;\n  }\n  try {\n    // 3. 将字节转换为字符串（用于解析数据URI）\n    var dataUri = java.bytesToStr(textBytes, \"UTF-8\");\n    // 4. 判断是完整的数据URI还是纯Base64数据\n    var base64Prefix = \"base64,\";\n    var base64Index = dataUri.indexOf(base64Prefix);\n    if (base64Index === -1) {\n      // 如果没有找到base64前缀，检查是否需要截取第一个/及之后的内容\n      var firstSlashIndex = dataUri.indexOf('/');\n      if (firstSlashIndex !== -1) {\n        // 如果找到第一个/，截取/及之后的内容\n        dataUri = dataUri.substring(firstSlashIndex);\n      }\n      // 对整个内容进行Base64解码\n      return java.base64DecodeToByteArray(dataUri);\n    } else {\n      // 如果是标准data URI，提取base64编码部分解码\n      var base64Data = dataUri.substring(base64Index + base64Prefix.length);\n      return java.base64DecodeToByteArray(base64Data);\n    }\n  } catch (e) {\n    // 解码失败时返回原始字节\n    return textBytes;\n  }\n})();",
    "customOrder": 568,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": true,
    "header": "{\n\t\"User-Agent\":\"Mozilla/5.0 (Linux; U; Android 10; zh-cn; MI CC 11)  AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/100.0.4896.127 Mobile Safari/537.36 XiaoMi/MiuiBrowser/18.1.8 swan-mibrowser\",\n\t\"referer\": \"{{baseUrl}}\"\n}",
    "injectJs": "function setupCustomPlayer(video) {\n  // 手势滑动快进\n  let isDragging = false;\n  let startX = 0;\n  let startTime = 0;\n  \n  // 长按加速相关变量\n  let longPressTimer = null;\n  const LONG_PRESS_DELAY = 300;\n  const NORMAL_SPEED = 1.25;\n  const FAST_SPEED = 3;\n  let wasPaused = false;\n\n  // 触摸事件处理\n  function handleTouchStart(e) {\n    startX = e.touches[0].clientX;\n    startTime = video.currentTime;\n    wasPaused = video.paused;\n    \n    longPressTimer = setTimeout(() => {\n      video.playbackRate = FAST_SPEED;\n      if (wasPaused) video.play();\n    }, LONG_PRESS_DELAY);\n  }\n\n  function handleTouchMove(e) {\n    if (longPressTimer) {\n      clearTimeout(longPressTimer);\n      longPressTimer = null;\n    }\n    \n    const dx = e.touches[0].clientX - startX;\n    if (Math.abs(dx) > 10) {\n      if (!isDragging) {\n        video.pause();\n        isDragging = true;\n      }\n      const change = (dx / video.clientWidth) * video.duration;\n      video.currentTime = Math.max(0, Math.min(startTime + change, video.duration));\n    }\n  }\n\n  function handleTouchEnd() {\n    if (longPressTimer) {\n      clearTimeout(longPressTimer);\n      longPressTimer = null;\n    }\n    \n    if (isDragging) {\n      video.playbackRate = NORMAL_SPEED;\n      video.play();\n      isDragging = false;\n    } else if (video.playbackRate === FAST_SPEED) {\n      video.playbackRate = NORMAL_SPEED;\n      if (wasPaused) video.pause();\n    }\n  }\n\n  // 添加触摸事件监听\n  video.addEventListener('touchstart', handleTouchStart);\n  video.addEventListener('touchmove', handleTouchMove);\n  video.addEventListener('touchend', handleTouchEnd);\n  \n  // 初始播放速度\n  video.playbackRate = NORMAL_SPEED;\n\n  // 创建按钮的通用函数\n  function createButton(text, onClick, position, width = '20px') {\n    const button = document.createElement('button');\n    button.textContent = text;\n    button.style.position = 'absolute';\n    button.style[position.horizontal] = '0';\n    button.style.top = '50%';\n    button.style.transform = 'translateY(-50%)';\n    button.style.zIndex = '999';\n    button.style.padding = '1px';\n    button.style.background = 'rgba(51, 51, 51, 0)';\n    button.style.color = '#fff';\n    button.style.border = 'none';\n    button.style.cursor = 'pointer';\n    button.style.width = width;\n    button.style.height = '30px';\n    button.addEventListener('click', onClick);\n    video.parentNode.appendChild(button);\n    return button;\n  }\n\n  // 旋转按钮（右侧）\n  createButton('⟳', () => {\n    const currentRotation = parseInt(video.getAttribute('data-rotation') || '0');\n    const newRotation = (currentRotation + 90) % 360;\n    video.setAttribute('data-rotation', newRotation);\n    \n    // 保留当前的缩放比例\n    const currentTransform = video.style.transform || '';\n    let currentScale = 1;\n    const scaleMatch = currentTransform.match(/scale\\(([^)]+)\\)/);\n    if (scaleMatch) currentScale = parseFloat(scaleMatch[1]);\n    \n    video.style.transform = `rotate(${newRotation}deg) scale(${currentScale})`;\n  }, { horizontal: 'right' });\n\n  // 缩放按钮（左侧）\n  let zoomCount = 0;\n  createButton('+', () => {\n    const currentRotation = parseInt(video.getAttribute('data-rotation') || '0');\n    \n    // 获取当前缩放比例\n    const currentTransform = video.style.transform || '';\n    let currentScale = 1;\n    const scaleMatch = currentTransform.match(/scale\\(([^)]+)\\)/);\n    if (scaleMatch) currentScale = parseFloat(scaleMatch[1]);\n    \n    if (zoomCount < 4) {\n      const newScale = currentScale * 1.25;\n      video.style.transform = `rotate(${currentRotation}deg) scale(${newScale})`;\n      zoomCount++;\n    } else {\n      video.style.transform = `rotate(${currentRotation}deg) scale(1)`;\n      zoomCount = 0;\n    }\n  }, { horizontal: 'left' });\n\n  // 快速跳转按钮（底部中央）\n  const buttonContainer = document.createElement('div');\n  buttonContainer.style.position = 'absolute';\n  buttonContainer.style.bottom = '0';\n  buttonContainer.style.left = '50%';\n  buttonContainer.style.transform = 'translateX(-50%)';\n  buttonContainer.style.display = 'flex';\n  buttonContainer.style.gap = '10px';\n  buttonContainer.style.zIndex = '999';\n  \n  // 按钮配置\n  const seekButtons = [\n    { text: '-5分', time: -300 },\n    { text: '-1分', time: -60 },\n    { text: '+1分', time: 60 },\n    { text: '+5分', time: 300 }\n  ];\n\n  seekButtons.forEach(({ text, time }) => {\n    const button = document.createElement('button');\n    button.textContent = text;\n    button.style.padding = '1px';\n    button.style.background = 'rgba(51, 51, 51, 0)';\n    button.style.color = '#fff';\n    button.style.border = 'none';\n    button.style.cursor = 'pointer';\n    button.style.width = '60px';\n    button.style.height = '30px';\n    button.addEventListener('click', () => {\n      video.currentTime = Math.max(0, Math.min(video.currentTime + time, video.duration));\n    });\n    buttonContainer.appendChild(button);\n  });\n\n  video.parentNode.appendChild(buttonContainer);\n}\n\n// 修改初始化逻辑，增加重试机制\nfunction initPlayerWithRetry() {\n  const maxRetries = 10;\n  const retryInterval = 500;\n  let retries = 0;\n  const tryInit = () => {\n    const video = document.getElementById('video');\n    if (video) {\n      setupCustomPlayer(video);\n    } else if (retries < maxRetries) {\n      retries++;\n      setTimeout(tryInit, retryInterval);\n    }\n  };\n  tryInit();\n}\n// 使用重试机制初始化播放器\ninitPlayerWithRetry();",
    "lastUpdateTime": 1775588357478,
    "loadWithBaseUrl": true,
    "ruleArticles": "$.rescont.data[*]",
    "ruleContent": "<html><head><meta charset=\"utf-8\">\n  <meta name=\"viewport\" content=\"width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no\" />\n<meta name=\"referrer\" content=\"never\"/>\n  <style>html, body {text-align: center;margin: 0; padding: 0;width: 100%;overflow: hidden;} </style>\n  <script src=\"https://unpkg.com/hls.js@1.4.3/dist/hls.min.js\"></script>\n</head><body>\n  <div class=\"container\">\n    <div class=\"title\">{{$.rescont.title}}</div>\n    <video id=\"video\" width=\"100%\" height=\"91%\" poster=\"\" controls autoplay muted loop></video>\n  </div>\n<script>\nconst v=document.getElementById('video'),s=[\n  \"{{$.rescont.videopath}}\",\n  \"\"];\nlet c=0;\nfunction setupCustomControls(e){/* 自定义功能实现 */}\nfunction playNext(){\n  c>=s.length&&(c=0); // 循环重置计数器\n  const u=s[c++];\n  // 检测Hls对象是否存在\n  if (typeof Hls !== 'undefined' && Hls.isSupported()) {\n    const h = new Hls({\n      enableSoftwareAES: true,          // 强制软件解密\n      forceKeyFrameOnDiscontinuity: true // 关键帧恢复\n    });\n    h.loadSource(u);\n    h.attachMedia(v);\n    h.on(Hls.Events.MANIFEST_PARSED,()=>v.play().then(()=>setupCustomControls(v)).catch(console.log));\n    h.on(Hls.Events.ERROR,(_,d)=>d.fatal&&playNext())\n  } else { // Hls加载失败或浏览器原生支持HLS\n    if (v.canPlayType('application/vnd.apple.mpegurl')) {\n      v.src = u;\n      v.onloadedmetadata = () => v.play().then(() => setupCustomControls(v));\n      v.onerror = playNext;\n    } else {\n      // 如果都不支持，尝试直接播放（可能支持MP4等格式）\n      v.src = u;\n      v.onerror = playNext;\n      v.play().then(() => setupCustomControls(v)).catch(playNext);\n    }\n  }\n}playNext();\n</script>\n</body></html>",
    "ruleImage": "{{$.coverbase64.url}}",
    "ruleLink": "/api/videoplay/{{$.id}}?uuid=1",
    "ruleNextPage": "$.rescont.next_page_url",
    "rulePubDate": "📆{{$.updated_at## .*}}  ⏱️{{$.playtimes}}",
    "ruleTitle": "$.title##.*屎.*|.*Ts.*|.*TS.*|.*ts.*|.*伪娘.*|.*人妖.*|.*男同.*|.*mbrba.*|.*水果派.*|.*解说.*|.*mmraa.*|.*ss-.*|.*fway.*|.*rebd.*|.*mbdd.*|.*双性.*|.*妈妈.*|.*儿子.*|.*爸爸.*|.*女儿.*|.*母子.*|.*父女.*|.*熟女.*|.*眼射.*|.*直男.*|.*CD.*|.*肥女.*|.*黄金.*|.*骚0.*|.*gv.*|.*父子.*|.*飞机.*|.*撸.*|.*厕.*|.*老阿姨.*|.*乱伦.*",
    "singleUrl": false,
    "sortUrl": "\n随机::/api/videosort/0?page={{ Math.ceil(Math.random()*1500) }}\n最新::/api/videosort/0?page={{page}}\n🔎搜索::/api/videosort/0?serach={{v=source.getVariable();if(/^\\s*$/.test(v)||v==null)source.setVariable('强奸');source.getVariable()}}&page={{page}}\n国产自拍::/api/videosort/10?page={{page}}\nH动漫::/api/videosort/14?page={{page}}\n扶她姐妹::/api/videosort/58?page={{page}}\n国产AV::/api/videosort/60?page={{page}}\n网红主播::/api/videosort/17?page={{page}}\n嫩模专区::/api/videosort/37?page={{page}}\n偷拍盗摄::/api/videosort/53?page={{page}}\n萌妹酱篇::/api/videosort/54?page={{page}}\n精彩短片::/api/videosort/55?page={{page}}\n外流视频::/api/videosort/32?page={{page}}\n明星淫梦::/api/videosort/40?page={{page}}\n鹿少女集::/api/videosort/56?page={{page}}\n高清无码::/api/videosort/1?page={{page}}\n制服诱惑::/api/videosort/5?page={{page}}\n长腿丝袜::/api/videosort/11?page={{page}}\nAV剧情::/api/videosort/29?page={{page}}\nAV素人::/api/videosort/24?page={{page}}\n淫荡痴女::/api/videosort/51?page={{page}}\n巨乳咪咪::/api/videosort/20?page={{page}}\n人妻熟女::/api/videosort/6?page={{page}}\n近亲乱伦::/api/videosort/49?page={{page}}\n淫乱师生::/api/videosort/46?page={{page}}\n角色扮演::/api/videosort/4?page={{page}}\n青春萝莉::/api/videosort/22?page={{page}}\n魔镜系列::/api/videosort/39?page={{page}}\n中文无码::/api/videosort/57?page={{page}}\n当红女优::/api/videosort/9?page={{page}}\n中文字幕::/api/videosort/19?page={{page}}\n259LUXU::/api/videosort/36?page={{page}}\n重咸口味::/api/videosort/23?page={{page}}\n丝瓜推荐::/api/videosort/30?page={{page}}\n三级电影::/api/videosort/25?page={{page}}\n电车之狼::/api/videosort/52?page={{page}}\n中外合拍::/api/videosort/59?page={{page}}\n苍老师::/api/videosort/44?page={{page}}\n女同性爱::/api/videosort/38?page={{page}}\n欧美AV::/api/videosort/16?page={{page}}\n恐怖情色::/api/videosort/35?page={{page}}",
    "sourceGroup": "版本",
    "sourceIcon": "https://kp-i25985.com/Uploads/vod/2023-06-21/1141.mp4.gif",
    "sourceName": "7.6",
    "sourceUrl": "https://api.sgapiaba.xyz",
    "style": ".container {\n    position: relative; /* 相对定位，用于包含视频 */\n    height: 100%; /* 容器高度与视频原始高度相同 */\n    overflow: hidden; /* 隐藏超出容器的部分 */\n}\n.title {\n    position: absolute; /* 绝对定位，相对于容器 */\n    top: 0; \n    width: 100%;\n    overflow: hidden; \n    text-overflow: ellipsis;\n    display: -webkit-box;\n    -webkit-box-orient: vertical; \n    -webkit-line-clamp: 2;\n    z-index: 1; /* 确保标题在视频之上 */\n    background: #000; /* 纯黑色背景 */ \n    padding: 0 0 3px 0;\n}\nvideo {\n    position: absolute; /* 绝对定位，相对于容器 */ \n    top: -65px; /* 上移80px */\n    left: 0; \n    width: 100%; \n    height: calc(96% + 65px);  /* 调整高度以适应内容 */\n    object-fit: contain; /* 确保视频内容不被裁剪 */\n    z-index: 0; /* 确保视频在标题之下 */\n    controls=\"controls\" autoplay muted; \n} \n"
  },
  {
    "articleStyle": 1,
    "customOrder": 569,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": false,
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "ruleArticles": ".appel-max@ul@li!0:1:2:3:4:5",
    "ruleContent": "<js>\np=result.match(/url\\\"\\:\\\"(.*?)\\\"\\,\\\"url/)[1].replace(/\\\\/g,'')\nvar p\n`<html>\n    <head>\n        <meta name=\"viewport\" content=\"width=device-width\">\n        <style>\n            body {\n                margin: 0;\n                font-family: Arial, sans-serif;\n                background: linear-gradient(135deg, #ece9e6, #ffffff);\n                display: flex;\n                flex-direction: column;\n                align-items: center;\n                justify-content: flex-start;\n                padding: 20px;\n            }\n           .container {\n                width: 100%;\n                max-width: 800px;\n                background: #fff;\n                border-radius: 10px;\n                box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);\n                overflow: hidden;\n                margin-bottom: 20px;\n            }\n            h3 {\n                margin: 0;\n                padding: 10px 20px;\n                font-size: 0.9em;\n                background: #333;\n                color: #fff;\n                border-radius: 10px 10px 0 0;\n            }\n           .video-container {\n                width: 100%;\n                background: #000;\n                position: relative;\n            }\n            video {\n                width: 100%;\n                height: auto;\n                display: block;\n            }\n           .info-container {\n                padding: 20px;\n            }\n           .info-container p {\n                margin: 10px 0;\n                color: #555;\n            }\n           .info-container p span {\n                font-weight: bold;\n                color: #000;\n            }\n        </style>\n    </head>\n    <body>\n        <div class=\"container\">\n            <div class=\"video-container\">\n                <video controls autoplay name=\"media\">\n                    <source src=\"${p}\" type=\"video/mp4\">\n                </video>\n            </div>\n            <div class=\"info-container\">\n                \n            </div>\n        </div>\n    </body>\n</html>`;\n\n</js>",
    "ruleImage": "img@data-original##.*gif",
    "ruleLink": "a.-1@href##/voddetail/(\\d+).html##https://cdnaaapi.yiniuyingshi6.com:2053/vodplay/$1-1-1.html",
    "ruleNextPage": "text.下一页@href",
    "rulePubDate": "{{@span.video-grade@text}}  {{@p@text}}",
    "ruleTitle": "h5@a@text",
    "singleUrl": true,
    "sortUrl": "制服丝袜::https://cdnaaapi.yiniuyingshi6.com:2053/vodtype/20.html\n群交淫乱::https://cdnaaapi.yiniuyingshi6.com:2053/vodtype/21.html\n无码专区::https://cdnaaapi.yiniuyingshi6.com:2053/vodtype/22.html\n偷拍自拍::https://cdnaaapi.yiniuyingshi6.com:2053/vodtype/23.html\n卡通动画::https://cdnaaapi.yiniuyingshi6.com:2053/vodtype/24.html\n中文字幕:https://cdnaaapi.yiniuyingshi6.com:2053/vodtype/25.html\n欧美性爱::https://cdnaaapi.yiniuyingshi6.com:2053/vodtype/26.html\n巨乳美乳::https://cdnaaapi.yiniuyingshi6.com:2053/vodtype/27.html\n国产裸聊::https://cdnaaapi.yiniuyingshi6.com:2053/vodtype/28.html\n国产自拍::https://cdnaaapi.yiniuyingshi6.com:2053/vodtype/29.html\n国产盗摄::https://cdnaaapi.yiniuyingshi6.com:2053/vodtype/30.html\n伦理三级::https://cdnaaapi.yiniuyingshi6.com:2053/vodtype/31.html\n女同性恋::https://cdnaaapi.yiniuyingshi6.com:2053/vodtype/32.html\n少女萝莉::https://cdnaaapi.yiniuyingshi6.com:2053/vodtype/33.html",
    "sourceComment": "需要频道换源\n地址发布页\nhttp://www.henniu69.xyz/",
    "sourceGroup": "版本",
    "sourceIcon": "https://i.postimg.cc/xTLWq1dp/IMG-20220930-223954.jpg",
    "sourceName": "7.7",
    "sourceUrl": "https://cdnaaapi.yiniuyingshi6.com:2053"
  },
  {
    "articleStyle": 2,
    "customOrder": 570,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": true,
    "header": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36",
    "injectJs": "(function() {\n    console.log('验证码脚本启动');\n    \n    // 延迟执行，确保页面加载完成\n    setTimeout(function() {\n        // 查找所有文本节点，寻找数学问题\n        const walker = document.createTreeWalker(\n            document.body,\n            NodeFilter.SHOW_TEXT,\n            null,\n            false\n        );\n        \n        let node;\n        while (node = walker.nextNode()) {\n            const text = node.textContent.trim();\n            // 简单的数字运算匹配\n            if (text.match(/\\d+\\s*[\\+\\-\\*/]\\s*\\d+/)) {\n                console.log('发现数学问题:', text);\n                \n                // 尝试填写\n                const inputs = document.getElementsByTagName('input');\n                for (let input of inputs) {\n                    if (input.type === 'text') {\n                        // 简单计算 1+1 作为测试\n                        input.value = '2';\n                        input.dispatchEvent(new Event('input'));\n                        console.log('已尝试填写验证码');\n                        break;\n                    }\n                }\n            }\n        }\n    }, 2000);\n})();",
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "ruleArticles": "li:has(img)||ul@li||div@li",
    "ruleContent": "<!DOCTYPE html>\r\n<html>\r\n\r\n<head>\r\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0\">\r\n    <link rel=\"stylesheet\" href=\"https://cdn.bootcdn.net/ajax/libs/viewerjs/1.10.1/viewer.min.css\">\r\n    <script src=\"https://cdn.bootcdn.net/ajax/libs/viewerjs/1.10.1/viewer.min.js\"></script>\r\n    <script src=\"http://libs.baidu.com/jquery/2.0.0/jquery.min.js\"></script>\n    {{@@tag.title@html}}\r\n</head>\r\n\r\n<body>\r\n    <h3>{{@@.h@tag.h1@text}}</h3>\r\n    <div id=\"box\">{{@@id.picg@tag.img@html}}</div>\r\n    <div id=\"loads\">加载中...</div>\r\n    <script>\r\n        var loads;\r\n        $(document).ready(function () {\r\n            var box = document.getElementById(\"box\");\r\n            loads = document.getElementById(\"loads\");\r\n            new Viewer(box, { title: false, interval: 3000 })\r\n            var i = 2;\r\n            // 尝试获取总页数，如果获取失败默认给个大一点的数字或者1\r\n            var pageStr = \"{{@@class.pagelist.0@tag.a.-2@textNodes##\\\\n}}\";\r\n            var page = parseInt(pageStr);\r\n            if(isNaN(page)) page = 100; // 容错处理\r\n            \r\n            var url = \"{{baseUrl.replace('.html','_')}}\";\r\n            \r\n            new IntersectionObserver(entries => {\r\n                if (entries[0].intersectionRatio) {\r\n                    if (entries[0].intersectionRatio <= 0) return;\r\n                    if (i <= page) {\r\n                        fetchHtml(i, page, url);\r\n                        i += 1;\r\n                    } else {\r\n                        $('#loads').html(\"已显示全部\");\r\n                    }\r\n                }\r\n            }).observe(loads)\r\n        });\r\n\r\n\r\n        function fetchHtml(i, page, url) {\n            nurl = url + i + '.html';\r\n            $.ajax({\r\n                url: nurl,\r\n                dataType: 'html',\r\n                success: function (html) {\r\n                    $('#box').append('<h5>' + (i) + '/' + (page) + '</h5>');\r\n                    // 修正：使用 #picg img 选择器，与主规则一致\r\n                    var newImg = $(html).find('#picg img');\r\n                    if(newImg.length === 0) {\r\n                        // 备用选择器，防止ID变化\r\n                        newImg = $(html).find('.content img, img');\r\n                    }\r\n                    $('#box').append(newImg);\r\n                    box.viewer.update();\r\n                },\r\n                error: function (xhr) { \r\n                    $('#loads').html(\"加载失败\");\r\n                }\r\n            });\r\n        }\r\n    </script>\r\n</body>\r\n\r\n</html>",
    "ruleImage": "img@lazy-src",
    "ruleLink": "a@href",
    "ruleNextPage": "page",
    "ruleTitle": "class.title@text",
    "singleUrl": false,
    "sortUrl": "\n搜索::/s.asp?keyword={{source.getVariable()}}&page={{page}}\n\n今日更新::/\n\n套图::/shey/yingtiiurm/1_{{page}}.html\n\n日韩::/shey/yingtiiurm/2_{{page}}.html\n\n内衣::/shey/yingtiiurm/9_{{page}}.html\n\n萌妹::/shey/yingtiiurm/11_{{page}}.html\n\n精品::/shey/yingtiiurm/18_{{page}}.html\n\n高清::/shey/yingtiiurm/24_{{page}}.html\n\n无圣光::/shey/yingtiiurm/25_{{page}}.html",
    "sourceComment": "可以换着看，大部分不一样\n摄影图库：http://www.sytuk.com\n精品美女图:http://www.akywt.com\n私房妹子图:http://www.gqsft.com\n高清尤物图:http://www.flsft.com\n私拍尤物图:http://www.mtgqt.com\n性感尤物图:http://www.akxzt.com\n私拍美女图:http://www.sfsnt.com\n极品尤物图:http://www.mtsyt.com\n高清私房图:http://www.jpnst.com\n漂亮网红图:http://www.sfwht.com\n尤物嫩模图:http://www.ywnmt.com\n经典网红图:http://www.jcmeinv.com\n模特网红图:http://www.mtmnw.com\n特色写真图:http://www.jpsft.com.com\n高清网红图:http://www.jpmnt.com\n福利网红图:http://www.sfmtw.com\n高清妹子图:http://www.gqtuku.com\n少女私房图:http://www.sntaotu.com\n极品美女图:http://www.xzmeinv.com\n免费私房图:http://www.mtflt.com\n私房网红图:http://www.gqsft.com",
    "sourceGroup": "版本",
    "sourceIcon": "http://www.sytuk.com/favicon.ico",
    "sourceName": "7.8",
    "sourceUrl": "http://www.sytuk.com",
    "style": "/*标题相关*/\r\nh3{text-align:center}\r\nh6{margin-bottom:0}\r\nimg{width:100%}\nh5{margin-bottom:0;padding-left:5;text-align:center;color:#666;font-size:12px;}"
  },
  {
    "articleStyle": 2,
    "customOrder": 571,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": true,
    "header": "{\n\t \"User-Agent\": \"Mozilla/5.0 (Linux; U; Android 9; zh-cn; MIX 2S Build/PKQ1.180729.001) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/100.0.4896.127 Mobile Safari/537.36 XiaoMi/MiuiBrowser/16.7.35 swan-mibrowser\",\n\t \"Referer\": \"{{baseUrl}}\"\n}",
    "lastUpdateTime": 1769050738257,
    "loadWithBaseUrl": true,
    "ruleArticles": "li.i_list.list_n2",
    "ruleContent": "<!doctype html>\n<html lang=\"zh-CN\">\n<head>\n<meta charset=\"UTF-8\">\n<title>{{@@title@text}}</title>\n<style>\nbody {\n    margin: 0;\n    font: 14px/1.4 sans-serif;\n    background: #111;\n    color: #eee;\n}\n\n#msg {\n    position: sticky;\n    top: 0;\n    z-index: 9;\n    background: #222;\n    padding: 8px 12px;\n    text-align: center;\n    font-size: 13px;\n}\n\n#imgList {\n    display: flex;\n    flex-wrap: wrap;\n    justify-content: center;\n    padding: 8px;  /* 容器左右边距 */\n    box-sizing: border-box;\n}\n\n#imgList img {\n    display: block;\n    width: 100%;              /* 占满宽度 */\n    max-width: 100%;          /* 防止溢出 */\n    height: auto;\n    min-height: 220px;\n    margin: 6px 0;            /* 只保留上下间距 */\n    border-radius: 4px;\n    background: #222;\n    box-sizing: border-box;\n}\n</style>\n</head>\n<body>\n\n<!-- 实时提示 -->\n<div id=\"msg\">瀑布流初始化完成，向下滚动加载更多~</div>\n\n<!-- 图片容器 -->\n<div id=\"imgList\">\n{{@@class.content_left@img@all}}\n</div>\n\n<script>\n/*** 配置区 ***/\nconst pageUrls = `{{@@class.page@a:not(.current)@href}}`\n  .split('\\n')\n  .map(s => s.trim())\n  .filter(Boolean)\n // .slice(0,2) //选取前三页，测试用\nlet nextIndex = 0;\n\n/*** 页面元素 ***/\nconst imgList = document.getElementById('imgList');\nconst msgBox = document.getElementById('msg');\n\n/*** 工具函数 ***/\nfunction showMsg(text) {\n  if (msgBox) msgBox.textContent = text;\n}\n\n// 使用 iframe 加载\nfunction loadPageInIframe(url) {\n  return new Promise((resolve, reject) => {\n    const iframe = document.createElement('iframe');\n    iframe.style.display = 'none';\n    \n    // 超时处理\n    const timeout = setTimeout(() => {\n      document.body.removeChild(iframe);\n      reject(new Error('请求超时'));\n    }, 10000);\n    \n    iframe.onload = () => {\n      try {\n        clearTimeout(timeout);\n        const doc = iframe.contentDocument;\n        \n        // 查找图片（多重选择器兼容）\n        let imgs = doc.querySelectorAll('.content_left img');\n        if (imgs.length === 0) imgs = doc.querySelectorAll('.content img');\n        if (imgs.length === 0) imgs = doc.querySelectorAll('article img');\n        \n        const urls = Array.from(imgs, img => img.src);\n        \n        document.body.removeChild(iframe);\n        resolve(urls);\n      } catch (e) {\n        document.body.removeChild(iframe);\n        reject(e);\n      }\n    };\n    \n    iframe.onerror = (e) => {\n      clearTimeout(timeout);\n      document.body.removeChild(iframe);\n      reject(new Error('网络错误'));\n    };\n    \n    iframe.src = url;\n    document.body.appendChild(iframe);\n  });\n}\n\n// 使用正则表达式提取（备选方案）\nfunction extractImagesByRegex(html) {\n  const urls = [];\n  // 提取 content_left 区域\n  const areaMatch = html.match(/class=\"content_left\"[\\s\\S]*?<\\/div>/i);\n  const searchHtml = areaMatch ? areaMatch[0] : html;\n  \n  // 提取所有 img src\n  const regex = /<img[^>]+src=[\"']?([^\"'\\s>]+)[\"']?[^>]*>/gi;\n  let match;\n  \n  while ((match = regex.exec(searchHtml)) !== null) {\n    let src = match[1];\n    if (src.startsWith('/')) src = 'https://meirentu.club' + src;\n    if (src.startsWith('http')) urls.push(src);\n  }\n  \n  return urls;\n}\n\n// 获取图片列表（主逻辑）\nasync function getImages(url) {\n  showMsg(`加载中: ${url}`);\n  \n  try {\n    // 方案1：优先使用 iframe（最兼容）\n    return await loadPageInIframe(url);\n  } catch (e1) {\n    showMsg(`iframe失败，尝试正则解析...`);\n    try {\n      // 方案2：降级为 fetch + 正则\n      const resp = await fetch(url);\n      if (!resp.ok) throw new Error(`HTTP ${resp.status}`);\n      const html = await resp.text();\n      return extractImagesByRegex(html);\n    } catch (e2) {\n      throw new Error(`双重失败: ${e2.message}`);\n    }\n  }\n}\n\n// 追加图片\nfunction appendImages(urls) {\n  if (!urls || !urls.length) return;\n  \n  urls.forEach(src => {\n    const img = document.createElement('img');\n    img.src = src;\n    img.style.cssText = 'display:block;width:300px;height:auto;min-height:220px;margin:6px;border-radius:4px;background:#222;';\n    imgList.appendChild(img);\n  });\n}\n\n// 滚动加载\nlet isLoading = false;\nlet retryCount = 0;\nconst maxRetry = 3;\n\nasync function loadMore() {\n  if (isLoading || nextIndex >= pageUrls.length) {\n    if (nextIndex >= pageUrls.length) showMsg('已加载全部');\n    return;\n  }\n  \n  isLoading = true;\n  const url = pageUrls[nextIndex];\n  \n  try {\n    const urls = await getImages(url);\n    \n    if (!urls.length) throw new Error('未找到图片');\n    \n    appendImages(urls);\n    nextIndex++;\n    retryCount = 0; // 重置重试计数\n    \n    showMsg(`已加载 ${nextIndex}/${pageUrls.length} 页`);\n    \n    // 重新监听\n    setTimeout(() => {\n      isLoading = false;\n      observeLast();\n    }, 500);\n    \n  } catch (error) {\n    retryCount++;\n    showMsg(`第${nextIndex + 1}页失败(${retryCount}/${maxRetry}): ${error.message}`);\n    \n    if (retryCount >= maxRetry) {\n      showMsg(`跳过第${nextIndex + 1}页`);\n      nextIndex++;\n      retryCount = 0;\n      // 继续下一页\n      setTimeout(loadMore, 1000);\n    } else {\n      // 重试当前页\n      setTimeout(() => {\n        isLoading = false;\n        loadMore();\n      }, 2000);\n    }\n  }\n}\n\n// IntersectionObserver 监听最后一张图\nlet observer = null;\nfunction observeLast() {\n  if (observer) observer.disconnect();\n  \n  const imgs = imgList.querySelectorAll('img');\n  if (!imgs.length) return;\n  \n  const lastImg = imgs[imgs.length - 1];\n  \n  observer = new IntersectionObserver((entries) => {\n    if (entries[0].isIntersecting && !isLoading) {\n      observer.disconnect();\n      loadMore();\n    }\n  }, {\n    rootMargin: '800px',\n    threshold: 0.01\n  });\n  \n  observer.observe(lastImg);\n}\n\n// 初始化\nshowMsg(`初始化完成，共${pageUrls.length}页待加载`);\nsetTimeout(observeLast, 1000); // 延迟确保图片渲染完成\n\n</script>\n</body>\n</html>",
    "ruleImage": "img@data-src##$##,{\"headers\":{\n\t \"User-Agent\": \"Mozilla/5.0 (Linux; U; Android 9; zh-cn; MIX 2S Build/PKQ1.180729.001) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/100.0.4896.127 Mobile Safari/537.36 XiaoMi/MiuiBrowser/16.7.35 swan-mibrowser\",\n\t \"Referer\": \"{{baseUrl}}\"\n}}",
    "ruleLink": "a.0@href",
    "ruleNextPage": "text.下页@href",
    "rulePubDate": "##(\\d{4}-\\d{2}-\\d{2})##$1###",
    "ruleTitle": ".meta-title@text",
    "singleUrl": false,
    "sortUrl": "XiuRen秀人网::/group/XiuRen-1.html\nMFStar模范学院::/group/MFStar-1.html\nMiStar魅妍社::/group/MiStar-1.html\nMyGirl美媛馆::/group/MyGirl-1.html\nImiss爱蜜社::/group/Imiss-1.html\nBoLoli兔几盟::/group/BoLoli-1.html\nYouWu尤物馆::/group/YouWu-1.html\nUxing优星馆::/group/Uxing-1.html\nMiiTao蜜桃社::/group/MiiTao-1.html\nFeiLin嗲囡囡::/group/FeiLin-1.html\nWingS影私荟::/group/WingS-1.html\nTaste顽味生活::/group/Taste-1.html\nLeYuan星乐园::/group/LeYuan-1.html\nHuaYan花の颜::/group/HuaYan-1.html\nDKGirl御女郎::/group/DKGirl-1.html\nMintYe薄荷叶::/group/MintYe-1.html\nYouMi尤蜜荟::/group/YouMi-1.html\nCandy糖果画报::/group/Candy-1.html\nMTMeng模特联盟::/group/MTMeng-1.html\nMicat猫萌榜::/group/Micat-1.html\nHuaYang花漾::/group/HuaYang-1.html\nXingYan星颜社::/group/XingYan-1.html\nXiaoYu画语界::/group/XiaoYu-1.html",
    "sourceGroup": "版本",
    "sourceIcon": "https://meirentu.club/static/img/logo.png",
    "sourceName": "7.9",
    "sourceUrl": "https://meirentu.club",
    "style": "#imgList img {\n    width: 100% !important;\n    max-width: 100% !important;\n    height: auto !important;\n}"
  },
  {
    "articleStyle": 0,
    "customOrder": 572,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": false,
    "lastUpdateTime": 0,
    "loadWithBaseUrl": true,
    "singleUrl": true,
    "sourceGroup": "版本",
    "sourceIcon": "糖心",
    "sourceName": "8.0",
    "sourceUrl": "https://www.q6md.com/"
  },
  {
    "articleStyle": 1,
    "customOrder": 574,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": true,
    "lastUpdateTime": 1775588065990,
    "loadWithBaseUrl": true,
    "ruleArticles": "article",
    "ruleContent": "class.dplayer@all<js>\nresult=result.match(/http.*0/)[0]##\\</js>{{@@title@text##成人黑料.*}}\n<video src=\"{{result}}\" width=\"100%\" height=\"auto\" controls></video>",
    "ruleImage": "@js:\nvar text = java.getString('script@html');\nvar match = text.match(/loadBannerDirect\\('([^']+)'/);\nvar img = match ? match[1] : '';\nimg;",
    "ruleLink": "a@href",
    "ruleNextPage": "page",
    "rulePubDate": "span.1@text",
    "ruleTitle": "class.post-card-title@text",
    "singleUrl": false,
    "sortUrl": "搜索::/search/{{source.getVariable()}}/{{page}}/\n今日吃瓜::/category/wpcz/{{page}}/\n热门大瓜::/category/rdsj/{{page}}/\n学生校园::/category/xsxy/{{page}}/\n网红黑料::/category/whhl/{{page}}/\n看片娱乐::/category/ysyl/{{page}}/\n乱伦道德::/category/lldd/{{page}}/\n人人吃瓜::/category/rrcg/{{page}}/\n海外吃瓜::/category/hwcg/{{page}}/\n骚男骚女::/category/snsn/{{page}}/",
    "sourceComment": "https://www.doxyoxc.xyz/",
    "sourceGroup": "版本",
    "sourceIcon": "http://p6.itc.cn/images01/20201202/8d012ed623d647a78635557e7d235ab6.jpeg",
    "sourceName": "8.1",
    "sourceUrl": "https://behind.qjaeyfzu.xyz/"
  },
  {
    "articleStyle": 3,
    "customOrder": 576,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": false,
    "lastUpdateTime": 1775587987390,
    "loadWithBaseUrl": true,
    "ruleArticles": "article",
    "ruleContent": "class.dplayer@all<js>\nresult=result.match(/http.*0/)[0]##\\</js>{{@@title@text##正在播放:|永久.*}}\n<video src=\"{{result}}\" width=\"100%\" height=\"auto\" controls></video>",
    "ruleImage": "@js:\"https://mgtv-bbqn.oss-cn-beijing.aliyuncs.com/1/2310310103284A29582395A850D3A0F5C26862354MzFE/SrRlbr0.gif\"",
    "ruleLink": "a.0@href",
    "ruleNextPage": "text.下一页@href",
    "rulePubDate": "span.1@text",
    "ruleTitle": "class.post-card-title@text",
    "singleUrl": false,
    "sortUrl": "搜索::/search/{{source.getVariable()}}/{{page}}/\n今日事件::/category/mrxl/\n吃瓜热搜::/category/mldjh/\n学生校园::/category/xyml/\n看片娱乐::/category/ldcz/\n海角乱伦::/category/llsj/\n猎奇事件::/category/qwys/\n动漫大全::\t/category/dmdq/\n精选探花::/category/jxth/\n反差美女::/category/rmbg/\n网红黑料::/category/whmx/\n欧美系列::/category/omxl/\n日韩系列::/category/rhxl/\n户外野外::/category/hwyw/\n调教受虐::/category/tjsn/",
    "sourceComment": "https://mlgc01.co/",
    "sourceGroup": "版本",
    "sourceIcon": "http://p6.itc.cn/images01/20201202/8d012ed623d647a78635557e7d235ab6.jpeg",
    "sourceName": "8.2",
    "sourceUrl": "https://jbr7z1.xwgjwrua.cc/"
  },
  {
    "articleStyle": 0,
    "customOrder": 577,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": true,
    "lastUpdateTime": 1773937472845,
    "loadWithBaseUrl": true,
    "ruleArticles": ".mb15 a[32:]",
    "ruleContent": "<js>\n// 提取m3u8链接\nvar m3u8Match = result.match(/\"([^\"]*?index\\.m3u8[^\"]*)\"/i) \n             || result.match(/'([^']*?index\\.m3u8[^']*)'/i);\n\nvar p = '';\nif (m3u8Match) {\n    var u = m3u8Match[1]\n        .replace(/\\\\\\//g, '/')      // \\/ → /\n        .replace(/\\\\\\\\/g, '\\\\')      // \\\\ → \\\n        .trim();\n    \n    // 补全协议\n    if (u.startsWith('//')) {\n        u = 'https:' + u;\n    } else if (!u.startsWith('http')) {\n        // 需要基础URL，这里假设当前页面URL在result中或需要传入\n        u = 'https://' + u;  // 简化处理，或根据实际需求调整\n    }\n    p = u;\n}\n\n// 标题：从 span.tx-flex-sh > a 的 title 属性获取\nvar t = java.getString('.f-bold @text') || '未知标题';\n\n// 标签：从 meta[name=\"description\"] 的 content 获取  \nvar b = java.getString('meta[name=\"description\"]@content') || '';\nvar updateIndex = b.indexOf('更新时间');\nif (updateIndex !== -1) {\nvar d = b.substring(updateIndex);  // 保留\"更新时间\"及之后的内容\n}\n\n`<!DOCTYPE html>\n<html>\n<head>\n<meta charset=\"utf-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n<title>${t}</title>\n<style>\n*{margin:0;padding:0;box-sizing:border-box}\nbody{font-family:-apple-system,sans-serif;background:#f0f9ff;padding:10px}\n.v-box{max-width:800px;margin:0 auto;background:white;border-radius:12px;box-shadow:0 5px 15px rgba(0,0,0,0.1);overflow:hidden}\n.header{padding:12px;border-bottom:1px solid #eee;display:flex;flex-wrap:wrap;justify-content:space-between}\n.title{font-size:18px;font-weight:600;margin-bottom:8px;width:100%}\n.tags{color:#5f6368;font-size:14px;flex:1;min-width:60%;word-break:break-all}\n.time{color:#5f6368;font-size:14px;text-align:right;flex-basis:35%}\n.v-wrap{position:relative;padding-top:56.25%;background:#000}\n.video{position:absolute;top:0;left:0;width:100%;height:100%}\n.footer{padding:8px;text-align:center;color:#5f6368;font-size:13px}\n.info-box{padding:15px;font-size:14px;line-height:1.6}\n.info-box p{margin:8px 0}\n.hint{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);background:rgba(0,0,0,0.7);color:#fff;padding:12px 20px;border-radius:20px;font-size:1.1rem;z-index:10;display:none}\n.controls{position:absolute;top:0;left:0;width:100%;height:4px;background:rgba(255,255,255,0.3);z-index:5;transition:opacity 0.3s}\n.progress{height:100%;background:#4a9eff;width:0}\n</style>\n</head>\n<body>\n<div class=\"v-box\">\n<div class=\"header\">\n<div class=\"title\">${t}</div>\n<div class=\"tags\">${d}</div>\n<div class=\"time\" id=\"timeDisplay\">00:00/00:00</div></div>\n<div class=\"v-wrap\">\n<div class=\"controls\"><div class=\"progress\" id=\"progressBar\"></div></div>\n<div class=\"hint\" id=\"hint\">快进中 &gt;&gt;</div>\n<video class=\"video\" id=\"v\" controls playsinline>\n<source src=\"${p}\" type=\"application/x-mpegURL\">您的浏览器不支持HTML5视频\n</video>\n</div>\n<div class=\"footer\">滑动调整进度 | 长按2倍速</div>\n</div>\n<script>\nvar v = document.getElementById('v');\nvar tDisplay = document.getElementById('timeDisplay');\nvar pBar = document.getElementById('progressBar');\nvar hint = document.getElementById('hint');\nvar startX = 0, startTime = 0;\nvar longPressTimer;\nvar sensitivity = 0.1;\nvar longPressTime = 500;\nvar hintDuration = 2000;\nfunction updateTime() {\nif (!v.duration) return;\nvar m1 = Math.floor(v.currentTime / 60);\nvar s1 = Math.floor(v.currentTime % 60);\nvar m2 = Math.floor(v.duration / 60);\nvar s2 = Math.floor(v.duration % 60);\ntDisplay.textContent = m1 + ':' + (s1 < 10 ? '0' : '') + s1 + '/' + m2 + ':' + (s2 < 10 ? '0' : '') + s2;\npBar.style.width = (v.currentTime / v.duration) * 100 + '%';}\nv.addEventListener('timeupdate', updateTime);\nv.addEventListener('loadedmetadata', updateTime);\nv.addEventListener('touchstart', function(e) {\nstartX = e.touches[0].clientX;\nstartTime = Date.now();\nif (longPressTimer) clearTimeout(longPressTimer);\nhint.style.display = 'none';\nlongPressTimer = setTimeout(function() {\nv.playbackRate = 2.0;\nhint.style.display = 'block';\nsetTimeout(function() { hint.style.display = 'none'; }, hintDuration);}, longPressTime);});\nv.addEventListener('touchmove', function(e) {\ne.preventDefault();\nclearTimeout(longPressTimer);\nvar diffX = e.touches[0].clientX - startX;\nvar change = diffX * sensitivity * v.duration / 100;\nv.currentTime = Math.max(0, Math.min(v.currentTime + change, v.duration));\nstartX = e.touches[0].clientX;updateTime();});\nv.addEventListener('touchend', function() {\nv.playbackRate = 1.0;\nclearTimeout(longPressTimer);});\n</script>\n</body>\n</html>`\n</js>\n",
    "ruleImage": "img@src",
    "ruleLink": "a.0@href<js> resutl='https://rensgyn1.lol'+result</js><js>\nresult=result.replace('dis', '');\n</js>\n",
    "ruleNextPage": ".pageitem.-1@href",
    "rulePubDate": "time@text",
    "ruleTitle": "a@title",
    "shouldOverrideUrlLoading": "true",
    "singleUrl": false,
    "sortUrl": "国产视频::https://rensgyn1.lol/sort/223.html\n精品推荐::https://rensgyn1.lol/sort/224.html\n国产色情::https://rensgyn1.lol/sort/225.html\n中文字幕::https://rensgyn1.lol/sort/226.html\n主播直播::https://rensgyn1.lol/sort/227.html\n国产传媒::https://rensgyn1.lol/sort/228.html\n亚洲无码::https://rensgyn1.lol/sort/229.html\n日本有码::https://rensgyn1.lol/sort/230.html\n亚洲有码::https://rensgyn1.lol/sort/231.html\n日本无码::https://rensgyn1.lol/sort/232.html\n中文有码::https://rensgyn1.lol/sort/233.html\n欧美无码::https://rensgyn1.lol/sort/234.html\n巨乳美乳::https://rensgyn1.lol/sort/235.html\n强奸乱伦::https://rensgyn1.lol/sort/236.html\n人妻系列::https://rensgyn1.lol/sort/237.html\n制服诱惑::https://rensgyn1.lol/sort/238.html\n强奸精品::https://rensgyn1.lol/sort/239.html\n直播主播::https://rensgyn1.lol/sort/240.html\n欧美精品::https://rensgyn1.lol/sort/241.html\n激情动漫::https://rensgyn1.lol/sort/242.html\n萝莉少女::https://rensgyn1.lol/sort/243.html\n明星换脸::https://rensgyn1.lol/sort/244.html\n伦理三级::https://rensgyn1.lol/sort/245.html\n抖阴视频::https://rensgyn1.lol/sort/246.html\n女优明星::https://rensgyn1.lol/sort/248.html\n自拍偷拍::https://rensgyn1.lol/sort/249.html\n视频一区::https://rensgyn1.lol/sort/250.html\n制服丝袜::https://rensgyn1.lol/sort/251.html\n视频二区::https://rensgyn1.lol/sort/252.html\n口交颜射::https://rensgyn1.lol/sort/253.html\n网-曝-门::https://rensgyn1.lol/sort/254.html\n日本精品::https://rensgyn1.lol/sort/255.html\n视频三区::https://rensgyn1.lol/sort/256.html\nCosplay::https://rensgyn1.lol/sort/257.html\n伦理三级::https://rensgyn1.lol/sort/258.html\n素人自拍::https://rensgyn1.lol/sort/259.html\nAV解说::https://rensgyn1.lol/sort/260.html\n台湾辣妹::https://rensgyn1.lol/sort/261.html\nSM调教::https://rensgyn1.lol/sort/262.html\n韩国御姐::https://rensgyn1.lol/sort/263.html\n萝莉少女::https://rensgyn1.lol/sort/264.html\n唯美港姐::https://rensgyn1.lol/sort/265.html\n东南亚AV::https://rensgyn1.lol/sort/267.html\n女同性恋::https://rensgyn1.lol/sort/268.html\n欺辱凌辱::https://rensgyn1.lol/sort/269.html\n玩偶姐姐::https://rensgyn1.lol/sort/270.html\n剧情介绍::https://rensgyn1.lol/sort/271.html\n视频四区::https://rensgyn1.lol/sort/272.html\n多人多P::https://rensgyn1.lol/sort/273.html\n人妖系列::https://rensgyn1.lol/sort/274.html\n91探花::https://rensgyn1.lol/sort/275.html\n网红流出::https://rensgyn1.lol/sort/276.html\n野外露出::https://rensgyn1.lol/sort/277.html\n古装扮演::https://rensgyn1.lol/sort/278.html\n女优系列::https://rensgyn1.lol/sort/279.html\n可爱学生::https://rensgyn1.lol/sort/280.html\n风情旗袍::https://rensgyn1.lol/sort/281.html\n兽耳系列::https://rensgyn1.lol/sort/282.html\n瑜伽裤::https://rensgyn1.lol/sort/283.html\n闷骚护士::https://rensgyn1.lol/sort/284.html\n过膝袜::https://rensgyn1.lol/sort/285.html\n网曝门::https://rensgyn1.lol/sort/286.html\n传媒出品::https://rensgyn1.lol/sort/287.html\n女同性恋::https://rensgyn1.lol/sort/288.html\n男同性恋::https://rensgyn1.lol/sort/289.html\n恋腿狂魔::https://rensgyn1.lol/sort/290.html\n韩国主播::https://rensgyn1.lol/sort/293.html\nVR视角::https://rensgyn1.lol/sort/294.html\n无码专区::https://rensgyn1.lol/sort/295.html\n制服师生::https://rensgyn1.lol/sort/297.html\n伦理系列::https://rensgyn1.lol/sort/298.html\n换脸AI::https://rensgyn1.lol/sort/299.html\n中文伦理::https://rensgyn1.lol/sort/300.html\n卡通动漫::https://rensgyn1.lol/sort/301.html\n欧美系列::https://rensgyn1.lol/sort/302.html\n美女主播::https://rensgyn1.lol/sort/303.html\n国产自拍::https://rensgyn1.lol/sort/304.html\n人妻热门::https://rensgyn1.lol/sort/305.html\n萝莉系列::https://rensgyn1.lol/sort/306.html\n女同性爱::https://rensgyn1.lol/sort/307.html\n多人群交::https://rensgyn1.lol/sort/308.html\n美乳巨乳::https://rensgyn1.lol/sort/309.html\n强奸热门::https://rensgyn1.lol/sort/310.html\n抖阴视频::https://rensgyn1.lol/sort/311.html\n韩国主播::https://rensgyn1.lol/sort/312.html\n网红头条::https://rensgyn1.lol/sort/313.html\n网爆黑料::https://rensgyn1.lol/sort/314.html\n欧美无码::https://rensgyn1.lol/sort/315.html\n女优明星::https://rensgyn1.lol/sort/316.html\nSM调教::https://rensgyn1.lol/sort/317.html\n精品解说::https://rensgyn1.lol/sort/326.html\n亚洲情色::https://rensgyn1.lol/sort/374.html\n主播自拍::https://rensgyn1.lol/sort/375.html\n国产偷拍::https://rensgyn1.lol/sort/376.html\n无码系列::https://rensgyn1.lol/sort/377.html\n欧美性爱::https://rensgyn1.lol/sort/378.html\n熟女专区::https://rensgyn1.lol/sort/379.html\n强奸系列::https://rensgyn1.lol/sort/380.html\n巨乳系列::https://rensgyn1.lol/sort/381.html\n中文大全::https://rensgyn1.lol/sort/382.html\n制服学生::https://rensgyn1.lol/sort/383.html\n女同蕾丝::https://rensgyn1.lol/sort/384.html\n卡通动画::https://rensgyn1.lol/sort/385.html\n视频伦理::https://rensgyn1.lol/sort/386.html\n少女裸体::https://rensgyn1.lol/sort/387.html\n重口色情::https://rensgyn1.lol/sort/388.html\n人兽性交::https://rensgyn1.lol/sort/389.html\n福利姬::https://rensgyn1.lol/sort/473.html\n生活都市::https://rensgyn1.lol/sort/474.html\n不偷恋情::https://rensgyn1.lol/sort/475.html\n学生校园::https://rensgyn1.lol/sort/476.html\n人妻熟女::https://rensgyn1.lol/sort/477.html\n暴力虐待::https://rensgyn1.lol/sort/478.html\n明星偶像::https://rensgyn1.lol/sort/479.html\n玄幻仙侠::https://rensgyn1.lol/sort/480.html\n科学幻想::https://rensgyn1.lol/sort/481.html\n街拍偷拍::https://rensgyn1.lol/sort/482.html\n丝袜美腿::https://rensgyn1.lol/sort/483.html\n欧美风情::https://rensgyn1.lol/sort/484.html\n网友自拍::https://rensgyn1.lol/sort/485.html\n卡通漫画::https://rensgyn1.lol/sort/486.html\n露出激情::https://rensgyn1.lol/sort/487.html\n唯美写真::https://rensgyn1.lol/sort/488.html\n女优情报::https://rensgyn1.lol/sort/489.html\n私房俱乐部::https://rensgyn1.lol/sort/490.html\n学生少女::https://rensgyn1.lol/sort/492.html\n技师风采::https://rensgyn1.lol/sort/493.html\n熟女少妇::https://rensgyn1.lol/sort/494.html\n国产热播::https://rensgyn1.lol/sort/495.html\n反差母狗::https://rensgyn1.lol/sort/496.html\n美脚丝足::https://rensgyn1.lol/sort/497.html\n情侣自拍::https://rensgyn1.lol/sort/498.html\n偷情约炮::https://rensgyn1.lol/sort/499.html\n真实偷拍::https://rensgyn1.lol/sort/500.html\n高潮喷水::https://rensgyn1.lol/sort/501.html\n强奸迷奸::https://rensgyn1.lol/sort/503.html\n户外露出::https://rensgyn1.lol/sort/504.html\nSM调教::https://rensgyn1.lol/sort/505.html\n情趣内衣::https://rensgyn1.lol/sort/506.html\n精选探花::https://rensgyn1.lol/sort/507.html\n网曝门事件::https://rensgyn1.lol/sort/509.html\n校园猛料::https://rensgyn1.lol/sort/510.html\n网红流出::https://rensgyn1.lol/sort/511.html\n明星黑料::https://rensgyn1.lol/sort/512.html\n裸贷肉偿::https://rensgyn1.lol/sort/513.html\n婚闹恶俗::https://rensgyn1.lol/sort/514.html\n抓奸名场面::https://rensgyn1.lol/sort/515.html\n男同女同::https://rensgyn1.lol/sort/516.html\nJK少女::https://rensgyn1.lol/sort/518.html\n黑丝白丝::https://rensgyn1.lol/sort/519.html\n女仆::https://rensgyn1.lol/sort/520.html\ncosplay::https://rensgyn1.lol/sort/521.html\nOL制服::https://rensgyn1.lol/sort/522.html\n旗袍::https://rensgyn1.lol/sort/523.html\n空姐制服::https://rensgyn1.lol/sort/524.html\n护士医生::https://rensgyn1.lol/sort/525.html\n禁忌母子::https://rensgyn1.lol/sort/527.html\n兄弟姐妹::https://rensgyn1.lol/sort/528.html\n爱上嫂子::https://rensgyn1.lol/sort/529.html\n狂操小姨::https://rensgyn1.lol/sort/530.html\n换夫换妻::https://rensgyn1.lol/sort/531.html\n淫荡儿媳::https://rensgyn1.lol/sort/532.html\n爷爷奶奶::https://rensgyn1.lol/sort/533.html\n啪啪直播::https://rensgyn1.lol/sort/535.html\n学生直播::https://rensgyn1.lol/sort/536.html\n自慰诱惑::https://rensgyn1.lol/sort/537.html\n乱伦直播::https://rensgyn1.lol/sort/538.html\n户外勾搭::https://rensgyn1.lol/sort/539.html\n车震直播::https://rensgyn1.lol/sort/540.html\n国产AV::https://rensgyn1.lol/sort/541.html\n欧美精选::https://rensgyn1.lol/sort/543.html\n户外搭讪::https://rensgyn1.lol/sort/544.html\n美女自慰::https://rensgyn1.lol/sort/545.html\n成人剧情::https://rensgyn1.lol/sort/546.html\n黑人大屌::https://rensgyn1.lol/sort/547.html\n群P大作战::https://rensgyn1.lol/sort/548.html\n欧美重口::https://rensgyn1.lol/sort/549.html\n人兽性交::https://rensgyn1.lol/sort/551.html\nSM性虐::https://rensgyn1.lol/sort/552.html\n人妖伪娘::https://rensgyn1.lol/sort/553.html\n孕妇内射::https://rensgyn1.lol/sort/554.html\n吃屎喝尿::https://rensgyn1.lol/sort/555.html\n扩阴拳交::https://rensgyn1.lol/sort/556.html\n阳具巨物::https://rensgyn1.lol/sort/557.html\n3D动漫::https://rensgyn1.lol/sort/559.html\n同人动漫::https://rensgyn1.lol/sort/560.html\n日本中文::https://rensgyn1.lol/sort/562.html\n无码流出::https://rensgyn1.lol/sort/563.html\nFC2::https://rensgyn1.lol/sort/564.html\nHEYZO::https://rensgyn1.lol/sort/565.html\n东京热::https://rensgyn1.lol/sort/566.html\n一本道::https://rensgyn1.lol/sort/567.html\n网红主播::https://rensgyn1.lol/sort/569.html\n伦理精选::https://rensgyn1.lol/sort/570.html\n剧情故事::https://rensgyn1.lol/sort/571.html",
    "sourceGroup": "版本",
    "sourceIcon": "https://gips0.baidu.com/it/u=1646076759,2240023288&fm=3086&app=3086&f=JPEG&wm=1,baiduai3,0,0,13,9&wmo=5,5&w=1024&h=1024",
    "sourceName": "8.3",
    "sourceUrl": "https://rensgyn1.lol/sort/536.html"
  },
  {
    "articleStyle": 3,
    "customOrder": 578,
    "enableJs": true,
    "enabled": true,
    "enabledCookieJar": true,
    "lastUpdateTime": 1774110092242,
    "loadWithBaseUrl": true,
    "ruleArticles": ".item-box",
    "ruleContent": "<js>\n// 提取m3u8链接\nvar m3u8Match = result.match(/\"([^\"]*?index\\.m3u8[^\"]*)\"/i) \n             || result.match(/'([^']*?index\\.m3u8[^']*)'/i);\n\nvar p = '';\nif (m3u8Match) {\n    var u = m3u8Match[1]\n        .replace(/\\\\\\//g, '/')      // \\/ → /\n        .replace(/\\\\\\\\/g, '\\\\')      // \\\\ → \\\n        .trim();\n    \n    // 补全协议\n    if (u.startsWith('//')) {\n        u = 'https:' + u;\n    } else if (!u.startsWith('http')) {\n        // 需要基础URL，这里假设当前页面URL在result中或需要传入\n        u = 'https://' + u;  // 简化处理，或根据实际需求调整\n    }\n    p = u;\n}\n\n// 标题：从 span.tx-flex-sh > a 的 title 属性获取\nvar t = java.getString('.tags-box.0@a.0 @text') || '未知标题';\n\n// 标签：从 meta[name=\"description\"] 的 content 获取  \nvar b = java.getString('.mb5.1 @text') || '';\nvar updateIndex = b.indexOf('更新时间');\nif (updateIndex !== -1) {\nvar d = b.substring(updateIndex);  // 保留\"更新时间\"及之后的内容\n}\n\n`<!DOCTYPE html>\n<html>\n<head>\n<meta charset=\"utf-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n<title>${t}</title>\n<style>\n*{margin:0;padding:0;box-sizing:border-box}\nbody{font-family:-apple-system,sans-serif;background:#f0f9ff;padding:10px}\n.v-box{max-width:800px;margin:0 auto;background:white;border-radius:12px;box-shadow:0 5px 15px rgba(0,0,0,0.1);overflow:hidden}\n.header{padding:12px;border-bottom:1px solid #eee;display:flex;flex-wrap:wrap;justify-content:space-between}\n.title{font-size:18px;font-weight:600;margin-bottom:8px;width:100%}\n.tags{color:#5f6368;font-size:14px;flex:1;min-width:60%;word-break:break-all}\n.time{color:#5f6368;font-size:14px;text-align:right;flex-basis:35%}\n.v-wrap{position:relative;padding-top:56.25%;background:#000}\n.video{position:absolute;top:0;left:0;width:100%;height:100%}\n.footer{padding:8px;text-align:center;color:#5f6368;font-size:13px}\n.info-box{padding:15px;font-size:14px;line-height:1.6}\n.info-box p{margin:8px 0}\n.hint{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);background:rgba(0,0,0,0.7);color:#fff;padding:12px 20px;border-radius:20px;font-size:1.1rem;z-index:10;display:none}\n.controls{position:absolute;top:0;left:0;width:100%;height:4px;background:rgba(255,255,255,0.3);z-index:5;transition:opacity 0.3s}\n.progress{height:100%;background:#4a9eff;width:0}\n</style>\n</head>\n<body>\n<div class=\"v-box\">\n<div class=\"header\">\n<div class=\"title\">${t}</div>\n<div class=\"tags\">${d}</div>\n<div class=\"time\" id=\"timeDisplay\">00:00/00:00</div></div>\n<div class=\"v-wrap\">\n<div class=\"controls\"><div class=\"progress\" id=\"progressBar\"></div></div>\n<div class=\"hint\" id=\"hint\">快进中 &gt;&gt;</div>\n<video class=\"video\" id=\"v\" controls playsinline>\n<source src=\"${p}\" type=\"application/x-mpegURL\">您的浏览器不支持HTML5视频\n</video>\n</div>\n<div class=\"footer\">滑动调整进度 | 长按2倍速</div>\n</div>\n<script>\nvar v = document.getElementById('v');\nvar tDisplay = document.getElementById('timeDisplay');\nvar pBar = document.getElementById('progressBar');\nvar hint = document.getElementById('hint');\nvar startX = 0, startTime = 0;\nvar longPressTimer;\nvar sensitivity = 0.1;\nvar longPressTime = 500;\nvar hintDuration = 2000;\nfunction updateTime() {\nif (!v.duration) return;\nvar m1 = Math.floor(v.currentTime / 60);\nvar s1 = Math.floor(v.currentTime % 60);\nvar m2 = Math.floor(v.duration / 60);\nvar s2 = Math.floor(v.duration % 60);\ntDisplay.textContent = m1 + ':' + (s1 < 10 ? '0' : '') + s1 + '/' + m2 + ':' + (s2 < 10 ? '0' : '') + s2;\npBar.style.width = (v.currentTime / v.duration) * 100 + '%';}\nv.addEventListener('timeupdate', updateTime);\nv.addEventListener('loadedmetadata', updateTime);\nv.addEventListener('touchstart', function(e) {\nstartX = e.touches[0].clientX;\nstartTime = Date.now();\nif (longPressTimer) clearTimeout(longPressTimer);\nhint.style.display = 'none';\nlongPressTimer = setTimeout(function() {\nv.playbackRate = 2.0;\nhint.style.display = 'block';\nsetTimeout(function() { hint.style.display = 'none'; }, hintDuration);}, longPressTime);});\nv.addEventListener('touchmove', function(e) {\ne.preventDefault();\nclearTimeout(longPressTimer);\nvar diffX = e.touches[0].clientX - startX;\nvar change = diffX * sensitivity * v.duration / 100;\nv.currentTime = Math.max(0, Math.min(v.currentTime + change, v.duration));\nstartX = e.touches[0].clientX;updateTime();});\nv.addEventListener('touchend', function() {\nv.playbackRate = 1.0;\nclearTimeout(longPressTimer);});\n</script>\n</body>\n</html>`\n</js>\n",
    "ruleImage": "img@src",
    "ruleLink": "a@href<js> resutl='https://l5--25w3xh.wumatantoupai1.com'+result</js><js>\nresult=result.replace('oddetail', '');\n</js>\n",
    "ruleNextPage": ".laypage_next@href",
    "ruleTitle": "a@title",
    "shouldOverrideUrlLoading": "ture",
    "singleUrl": false,
    "sortUrl": "搜索::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key={{source.getVariable()}}\n国产传媒::https://l5--25w3xh.wumatantoupai1.com/t/2/\n网红头条::https://l5--25w3xh.wumatantoupai1.com/t/241/\n国产视频::https://l5--25w3xh.wumatantoupai1.com/t/163/\n探花系列::https://l5--25w3xh.wumatantoupai1.com/t/239/\n网暴黑料::https://l5--25w3xh.wumatantoupai1.com/t/232/\n自拍::https://l5--25w3xh.wumatantoupai1.com/s/wd/%E5%9B%BD%E4%BA%A7%E8%87%AA%E6%8B%8D\nIPX::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=IPX\nJUL::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=JUL\nABW::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=ABW\nJUQ::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=JUQ\nSONE::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=SONE\nMIRD::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=MIRD\nIPZZ::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=IPZZ\nOFJE::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=OFJE\nMIDV::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=MIDV\nCAWD::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=CAWD\nSONE::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=SONE\nMIAB::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=MIAB\nMIMK::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=MIMK\nSSIS::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=SSIS\nPRED::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=PRED\nDASS::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=DASS\nSTARS::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=STARS\nFSDSS::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=FSDSS\nSTART::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=START\nmiru::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=miru\n爆菊::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=爆菊\n求饶::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=求饶\n短裙::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=短裙\n浴场::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=浴场\n迷晕::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=迷晕\n嫖妓::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=嫖妓\n正妹::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=正妹\n紧身::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=紧身\n老婆::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=老婆\n中出::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=中出\n女模::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=女模\n按摩::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=按摩\n阴道::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=阴道\n开档::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=开档\n拍摄::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=拍摄\n海滩::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=海滩\n奴隶::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=奴隶\n惩罚::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=惩罚\n精液::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=精液\n嫂子::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=嫂子\n上位::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=上位\n秘书::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=秘书\n上班::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=上班\n强迫::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=强迫\n甜蜜::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=甜蜜\n温柔::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=温柔\n暴力::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=暴力\n撕烂::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=撕烂\n女星::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=女星\n卖淫::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=卖淫\n夜班::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=夜班\n尾随::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=尾随\n色狼::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=色狼\n痴汉::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=痴汉\n偶遇::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=偶遇\n巨乳::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=巨乳\n调教::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=调教\n萝莉::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=萝莉\n自慰::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=自慰\n妈妈::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=妈妈\n母子::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=母子\n石川澪::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=石川澪\n皆月光::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=皆月光\n大槻響::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=大槻響\n櫻空桃::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=櫻空桃\n波多野結衣::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=波多野結衣\n桃乃木香奈::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=桃乃木香奈\n七瀨愛麗絲::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=七瀨愛麗絲\n吉根柚莉愛::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=吉根柚莉愛\n柏木こなつ::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=柏木こなつ\n天馬ゆい::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=天馬ゆい\n夢乃あいか::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=夢乃あいか\n未步なな::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=未步なな\n倉本すみれ::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=倉本すみれ\n望月つぼみ::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=望月つぼみ\n新井リマ::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=新井リマ\n浅野こころ::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=浅野こころ\n東雲みれい::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=東雲みれい\n松本一香::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=松本一香\n木下日葵::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=木下日葵\n瀬户环奈::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=瀬户环奈\n河北彩花::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=河北彩花\n沙月惠奈::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=沙月惠奈\n美園和花::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=美園和花\n沙月芽衣::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=沙月芽衣\n藤森里穗::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=藤森里穗\n石原希望::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=石原希望\n月乃露娜::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=月乃露娜\n小宵虎南::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=小宵虎南\n七澤米亞::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=七澤米亞\n小野六花::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=小野六花\n彌生美月::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=彌生美月\n山岸逢花::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=山岸逢花\n三上悠亞::https://l5--25w3xh.wumatantoupai1.com/addons/s/wd/link.php?key=三上悠亞",
    "sourceComment": "┍   　  　书源作者：闻君三月　　  　┒\n├───┬────────────┤\n│！免责│本书源只提供代码进行技术│\n│！声明│交流，请于２４小时后删除│\n└────────────────┘",
    "sourceGroup": "版本",
    "sourceIcon": "https://bike-egg-cup.img12345.com/ico/heiseicon.png",
    "sourceName": "8.4",
    "sourceUrl": "https://l5--25w3xh.wumatantoupai1.com/show/2/ "
  }
]