[{"bookSourceComment":"\/\/  梦不觉","bookSourceGroup":"漫画","bookSourceName":"G站漫画","bookSourceType":2,"bookSourceUrl":"https:\/\/m.g-mh.org\/","customButton":false,"customOrder":26,"enabled":true,"enabledCookieJar":false,"enabledExplore":true,"eventListener":false,"exploreUrl":"@js:\n(function() {\n    var items = [\n        {\"title\":\"全部\",\"url\":\"https:\/\/m.g-mh.org\/manga\/page\/{{page}}\"},\n        {\"title\":\"韩漫\",\"url\":\"https:\/\/m.g-mh.org\/manga-genre\/kr\/page\/{{page}}\"},\n        {\"title\":\"国漫\",\"url\":\"https:\/\/m.g-mh.org\/manga-genre\/cn\/page\/{{page}}\"},\n        {\"title\":\"日漫\",\"url\":\"https:\/\/m.g-mh.org\/manga-genre\/jp\/page\/{{page}}\"},\n        {\"title\":\"欧美\",\"url\":\"https:\/\/m.g-mh.org\/manga-genre\/ou-mei\/page\/{{page}}\"},\n        {\"title\":\"其他\",\"url\":\"https:\/\/m.g-mh.org\/manga-genre\/qita\/page\/{{page}}\"},\n        {\"title\":\"热门\",\"url\":\"https:\/\/m.g-mh.org\/manga-genre\/hots\/page\/{{page}}\"},\n        {\"title\":\"复仇\",\"url\":\"https:\/\/m.g-mh.org\/manga-tag\/fuchou\/page\/{{page}}\"},\n        {\"title\":\"古风\",\"url\":\"https:\/\/m.g-mh.org\/manga-tag\/gufeng\/page\/{{page}}\"},\n        {\"title\":\"奇幻\",\"url\":\"https:\/\/m.g-mh.org\/manga-tag\/qihuan\/page\/{{page}}\"},\n        {\"title\":\"逆袭\",\"url\":\"https:\/\/m.g-mh.org\/manga-tag\/nixi\/page\/{{page}}\"},\n        {\"title\":\"异能\",\"url\":\"https:\/\/m.g-mh.org\/manga-tag\/yineng\/page\/{{page}}\"},\n        {\"title\":\"宅向\",\"url\":\"https:\/\/m.g-mh.org\/manga-tag\/zhaixiang\/page\/{{page}}\"},\n        {\"title\":\"穿越\",\"url\":\"https:\/\/m.g-mh.org\/manga-tag\/chuanyue\/page\/{{page}}\"},\n        {\"title\":\"热血\",\"url\":\"https:\/\/m.g-mh.org\/manga-tag\/rexue\/page\/{{page}}\"},\n        {\"title\":\"纯爱\",\"url\":\"https:\/\/m.g-mh.org\/manga-tag\/chunai\/page\/{{page}}\"},\n        {\"title\":\"系统\",\"url\":\"https:\/\/m.g-mh.org\/manga-tag\/xitong\/page\/{{page}}\"},\n        {\"title\":\"重生\",\"url\":\"https:\/\/m.g-mh.org\/manga-tag\/zhongsheng\/page\/{{page}}\"},\n        {\"title\":\"冒险\",\"url\":\"https:\/\/m.g-mh.org\/manga-tag\/maoxian\/page\/{{page}}\"},\n        {\"title\":\"灵异\",\"url\":\"https:\/\/m.g-mh.org\/manga-tag\/lingyi\/page\/{{page}}\"},\n        {\"title\":\"大女主\",\"url\":\"https:\/\/m.g-mh.org\/manga-tag\/danvzhu\/page\/{{page}}\"},\n        {\"title\":\"剧情\",\"url\":\"https:\/\/m.g-mh.org\/manga-tag\/juqing\/page\/{{page}}\"},\n        {\"title\":\"恋爱\",\"url\":\"https:\/\/m.g-mh.org\/manga-tag\/lianai\/page\/{{page}}\"},\n        {\"title\":\"玄幻\",\"url\":\"https:\/\/m.g-mh.org\/manga-tag\/xuanhuan\/page\/{{page}}\"},\n        {\"title\":\"女神\",\"url\":\"https:\/\/m.g-mh.org\/manga-tag\/nvshen\/page\/{{page}}\"},\n        {\"title\":\"科幻\",\"url\":\"https:\/\/m.g-mh.org\/manga-tag\/kehuan\/page\/{{page}}\"},\n        {\"title\":\"魔幻\",\"url\":\"https:\/\/m.g-mh.org\/manga-tag\/mohuan\/page\/{{page}}\"},\n        {\"title\":\"推理\",\"url\":\"https:\/\/m.g-mh.org\/manga-tag\/tuili\/page\/{{page}}\"},\n        {\"title\":\"猎奇\",\"url\":\"https:\/\/m.g-mh.org\/manga-tag\/lieqi\/page\/{{page}}\"},\n        {\"title\":\"治愈\",\"url\":\"https:\/\/m.g-mh.org\/manga-tag\/zhiyu\/page\/{{page}}\"},\n        {\"title\":\"都市\",\"url\":\"https:\/\/m.g-mh.org\/manga-tag\/doushi\/page\/{{page}}\"},\n        {\"title\":\"异形\",\"url\":\"https:\/\/m.g-mh.org\/manga-tag\/yixing\/page\/{{page}}\"},\n        {\"title\":\"青春\",\"url\":\"https:\/\/m.g-mh.org\/manga-tag\/qingchun\/page\/{{page}}\"},\n        {\"title\":\"末日\",\"url\":\"https:\/\/m.g-mh.org\/manga-tag\/mori\/page\/{{page}}\"},\n        {\"title\":\"悬疑\",\"url\":\"https:\/\/m.g-mh.org\/manga-tag\/xuanyi\/page\/{{page}}\"},\n        {\"title\":\"修仙\",\"url\":\"https:\/\/m.g-mh.org\/manga-tag\/xiuxian\/page\/{{page}}\"},\n        {\"title\":\"战斗\",\"url\":\"https:\/\/m.g-mh.org\/manga-tag\/zhandou\/page\/{{page}}\"}\n    ];\n\n    var ui = [];\n\n    \/\/ 搜索框 + 搜索按钮（一行）\n    ui.push({title:'关键字', type:'text', default:'', style:{layout_flexBasisPercent:0.7, layout_flexGrow:1}});\n    ui.push({title:'🔍 搜索', type:'button', action:\"var k=infoMap['关键字']; if(!k){ java.toast('请输入关键字'); } else { java.searchBook(k, source); }\", style:{layout_flexBasisPercent:1, layout_flexGrow:1}});\n\n    \/\/ 分类标签：每行两个\n    for (var i = 0; i < items.length; i++) {\n        ui.push({title: items[i].title, url: items[i].url, style:{layout_flexBasisPercent:0.25, layout_flexGrow:1}});\n    }\n\n    return JSON.stringify(ui);\n})()","header":"{\"User-Agent\":\"Mozilla\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/121.0.0.0 Safari\/537.36\",\"Referer\":\"https:\/\/m.g-mh.org\/\"}","lastUpdateTime":"1788321628633","respondTime":180000,"ruleBookInfo":{"author":"a[href^='\/manga-author\/'] span@text","coverUrl":"img.1@src","intro":"#info p.line-clamp-4@text","kind":"a[href^='\/manga-genre\/'] span@text&&a[href^='\/manga-tag\/'] span@text","lastChapter":"#lastchap@text","name":"h1@text##\\s*\\n.*","tocUrl":"@js:\ntry{\n  let mid = String(result).match(\/data-mid=\"(\\d+)\"\/);\n  if(mid && mid[1]){\n    java.put(\"mid\", mid[1]);\n    \"https:\/\/api-get-v3.mgsearcher.com\/api\/manga\/get?mid=\" + mid[1] + \"&mode=all\";\n  } else {\n    \"\";\n  }\n}catch(e){\"\"}"},"ruleContent":{"content":"@js:(function(){\ntry{\n  var resultStr = result;\n  \n  if(typeof resultStr === 'undefined' || resultStr === null) return '';\n  \n  var json;\n  if(typeof resultStr === 'object') {\n    json = resultStr;\n  } else {\n    if(typeof resultStr !== 'string' || resultStr.length < 10) return '';\n    try { json = JSON.parse(resultStr); } catch(e) { return ''; }\n  }\n  \n  var info = json.data && json.data.info ? json.data.info : {};\n  var imagesData = info.images;\n  var NL = String.fromCharCode(10);\n  var host = 'https:\/\/c-nc-1.6wm.top';\n  \n  if(imagesData && imagesData.images) {\n    var imgs = imagesData.images;\n    var isString = typeof imgs === 'string';\n    \n    if(!isString && typeof imgs === 'object' && typeof imgs.length === 'number') {\n      if(imgs.length > 0 && typeof imgs[0] === 'string' && imgs[0].indexOf('J7r') === 0) {\n        var joined = '';\n        for(var _i = 0; _i < imgs.length; _i++) { joined += imgs[_i]; }\n        imagesData = { images: joined, line: imagesData.line || 1 };\n        isString = true;\n      } else {\n        var line = imagesData.line || 1;\n        if(line === 2) host = 'https:\/\/c-nd2-1.6wm.top';\n        else if(line === 3) host = 'https:\/\/c-nd3-1.6wm.top';\n        var tags = [];\n        for(var _j = 0; _j < imgs.length; _j++) {\n          var u = imgs[_j];\n          if(u && typeof u === 'object' && u.url) u = u.url;\n          if(u && typeof u === 'string') {\n            if(u.indexOf('http') !== 0) u = host + u;\n            tags.push('<img src=\"' + u + '\">');\n          }\n        }\n        return tags.join(NL);\n      }\n    }\n    \n    if(isString) {\n      var encrypted = imgs;\n      var lineNum = imagesData.line || 1;\n      \n      if(encrypted.substring(0, 3) !== 'J7r' || encrypted.substring(encrypted.length - 2) !== 'nQ' || encrypted.length < 20) return '';\n      \n      var FROM_TABLE = '_-9876543210abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';\n      var TO_TABLE   = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_';\n      var CHUNK_SIZE = 7;\n      var MAGIC_A = 'kD';\n      var MAGIC_B = 'W4s';\n      \n      var stripped = encrypted.substring(3, encrypted.length - 2);\n      var dataLen = stripped.length;\n      var K = Math.floor((dataLen - 5) \/ 3);\n      \n      var p1_len = K;\n      var R = dataLen - K - 3;\n      \n      var markerFound = true;\n      if(stripped.substring(p1_len, p1_len + 2) !== MAGIC_A) markerFound = false;\n      if(stripped.substring(R, R + 3) !== MAGIC_B) markerFound = false;\n      \n      if(!markerFound) {\n        var idxA = stripped.indexOf(MAGIC_A);\n        var idxB = stripped.indexOf(MAGIC_B);\n        if(idxA >= 0 && idxB > idxA + 2) {\n          p1_len = idxA;\n          R = idxB;\n        } else { return ''; }\n      }\n      \n      var p1 = stripped.substring(0, p1_len);\n      var p3 = stripped.substring(p1_len + 2, R);\n      var p5 = stripped.substring(R + 3);\n      \n      var pairSwap = function(str) {\n        var out = '';\n        var i = 0;\n        var chunkIdx = 0;\n        while(i < str.length) {\n          var chunk = str.substring(i, i + CHUNK_SIZE);\n          if(chunkIdx % 2 === 1) {\n            var rev = '';\n            for(var j = chunk.length - 1; j >= 0; j--) rev += chunk[j];\n            chunk = rev;\n          }\n          out += chunk;\n          i += CHUNK_SIZE;\n          chunkIdx++;\n        }\n        return out;\n      };\n      \n      var combined = pairSwap(p5 + p1 + p3);\n      var substituted = '';\n      for(var si = 0; si < combined.length; si++) {\n        var c = combined.charAt(si);\n        var idx = FROM_TABLE.indexOf(c);\n        substituted += idx >= 0 ? TO_TABLE.charAt(idx) : c;\n      }\n      \n      var b64 = substituted.replace(\/-\/g, '+').replace(\/_\/g, '\/');\n      while(b64.length % 4 !== 0) b64 += '=';\n      \n      var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+\/';\n      var decoded = '';\n      for(var bi = 0; bi < b64.length; bi += 4) {\n        if(b64.charAt(bi+1) === '') break;\n        var c1 = chars.indexOf(b64.charAt(bi));\n        var c2 = chars.indexOf(b64.charAt(bi+1));\n        var c3 = chars.indexOf(b64.charAt(bi+2));\n        var c4 = chars.indexOf(b64.charAt(bi+3));\n        var triple = (c1 << 18) | (c2 << 12) | ((c3 & 63) << 6) | (c4 & 63);\n        decoded += String.fromCharCode((triple >>> 16) & 255);\n        if(c3 >= 0) decoded += String.fromCharCode((triple >>> 8) & 255);\n        if(c4 >= 0) decoded += String.fromCharCode(triple & 255);\n      }\n      \n      var imageList = JSON.parse(decoded);\n      \n      if(!imageList || typeof imageList !== 'object' || typeof imageList.length === 'undefined') return '';\n      \n      if(lineNum === 2) host = 'https:\/\/c-nd2-1.6wm.top';\n      else if(lineNum === 3) host = 'https:\/\/c-nd3-1.6wm.top';\n      \n      var imgTags = [];\n      for(var ti = 0; ti < imageList.length; ti++) {\n        var item = imageList[ti];\n        var url = item && (item.url || item);\n        if(url && typeof url === 'string') {\n          if(url.indexOf('http') !== 0) url = host + url;\n          imgTags.push('<img src=\"' + url + '\">');\n        }\n      }\n      \n      return imgTags.join(NL);\n    }\n  }\n  \n  return '';\n} catch(e) {\n  return '';\n}\n})()"},"ruleExplore":{"bookList":"div.cardlist > div.pb-2","bookUrl":"a@href","coverUrl":"img@src","name":"h3.cardtitle@text"},"ruleSearch":{"author":"a[href*='\/manga-author\/'] span@text","bookList":".cardlist > div.pb-2","bookUrl":"a@href","checkKeyWord":"万界守门人","coverUrl":"img.card@src","name":"h3@text"},"ruleToc":{"chapterList":"@js:\nlet json=JSON.parse(result);\nlet list=json.data.chapters||json.data.info.chapters||[];\nlist.map(item=>JSON.stringify(item));","chapterName":"@js:\nlet obj=JSON.parse(result);\nobj.name||obj.title||obj.chapter_name||obj.chapter_title||(obj.attributes&&obj.attributes.title)||JSON.stringify(obj);","chapterUrl":"@js:\nlet obj=JSON.parse(result);\nlet mid=java.get(\"mid\");\nlet cid=obj.id||obj.chapter_id;\nif(mid&&cid){\n  \"https:\/\/api-get-v3.mgsearcher.com\/api\/v2\/chapter\/getinfo?m=\"+mid+\"&c=\"+cid;\n}else{\"\"}"},"searchUrl":"https:\/\/m.g-mh.org\/s\/{{key}}?page={{page}}","weight":0}]