// ==UserScript== // @name Bilibili 旧播放页 // @namespace MotooriKashin // @version 10.8.5-1272ee50230293555dec1d2e23fc5c74215b4c86 // @description 恢复Bilibili旧版页面,为了那些念旧的人。 // @author MotooriKashin, wly5556 // @homepage https://github.com/MotooriKashin/Bilibili-Old // @supportURL https://github.com/MotooriKashin/Bilibili-Old/issues // @icon https://www.bilibili.com/favicon.ico // @match *://*.bilibili.com/* // @connect * // @grant GM.xmlHttpRequest // @grant GM.getValue // @grant GM.setValue // @grant GM.deleteValue // @grant GM.cookie // @grant GM.registerMenuCommand // @run-at document-start // @license MIT // @downloadURL https://update.greasyfork.icu/scripts/394296/Bilibili%20%E6%97%A7%E6%92%AD%E6%94%BE%E9%A1%B5.user.js // @updateURL https://update.greasyfork.icu/scripts/394296/Bilibili%20%E6%97%A7%E6%92%AD%E6%94%BE%E9%A1%B5.meta.js // ==/UserScript== const MODULES = ` "use strict"; (() => { var __create = Object.create; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __getProtoOf = Object.getPrototypeOf; var __hasOwnProp = Object.prototype.hasOwnProperty; var __esm = (fn, res) => function __init() { return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res; }; var __commonJS = (cb, mod2) => function __require() { return mod2 || (0, cb[__getOwnPropNames(cb)[0]])((mod2 = { exports: {} }).exports, mod2), mod2.exports; }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toESM = (mod2, isNodeMode, target) => (target = mod2 != null ? __create(__getProtoOf(mod2)) : {}, __copyProps( // If the importer is in node compatibility mode or this is not an ESM // file that has been converted to a CommonJS file using a Babel- // compatible transform (i.e. "__esModule" has not been set), then set // "default" to the CommonJS "module.exports" for node compatibility. isNodeMode || !mod2 || !mod2.__esModule ? __defProp(target, "default", { value: mod2, enumerable: true }) : target, mod2 )); // tampermonkey/gm.ts var init_gm = __esm({ "tampermonkey/gm.ts"() { "use strict"; init_tampermonkey(); GM.fetch = function(input, init) { return new Promise((resolve, reject) => { if (input instanceof Request) { input = input.url; } else if (input instanceof URL) { input = input.toJSON(); } if ((init == null ? void 0 : init.body) instanceof ArrayBuffer) { init.body = new Blob([init.body]); } input = new URL(input, location.href).toJSON(); GM.xmlHttpRequest({ url: input, method: init == null ? void 0 : init.method, data: init == null ? void 0 : init.body, anonymous: init ? init.credentials === "include" ? false : true : true, headers: init == null ? void 0 : init.headers, responseType: "arraybuffer", onload: ({ response, status, statusText, finalUrl, responseHeaders }) => { const headers = responseHeaders.replace(/\\r/g, "").split("\\n").reduce((s, d) => { const arr2 = d.split(":"); arr2[0] && (s[arr2[0]] = arr2[1] || ""); return s; }, {}); if (!response) return reject(statusText); const res = new Response(response, { status, statusText, headers }); Object.defineProperties(res, { url: { value: finalUrl } }); resolve(res); }, onerror: reject }); }); }; } }); // tampermonkey/polyfill/element-prototype-replaceChildren.ts var init_element_prototype_replaceChildren = __esm({ "tampermonkey/polyfill/element-prototype-replaceChildren.ts"() { "use strict"; init_tampermonkey(); if (typeof Element.prototype.replaceChildren === "undefined") { Reflect.defineProperty(Element.prototype, "replaceChildren", { value: function() { while (this.lastChild) this.removeChild(this.lastChild); this.append.call(this, ...arguments); }, writable: true, enumerable: false, configurable: true }); } } }); // tampermonkey/polyfill/proposal-relative-indexing-method.ts var at2; var init_proposal_relative_indexing_method = __esm({ "tampermonkey/polyfill/proposal-relative-indexing-method.ts"() { "use strict"; init_tampermonkey(); if (typeof Array.prototype.at === "undefined") { let at = function(n) { n = Math.trunc(n) || 0; if (n < 0) n += this.length; if (n < 0 || n >= this.length) return void 0; return this[n]; }; at2 = at; const TypedArray = Reflect.getPrototypeOf(Int8Array); for (const C of [Array, String, TypedArray]) { Reflect.defineProperty( C.prototype, "at", { value: at, writable: true, enumerable: false, configurable: true } ); } } } }); // tampermonkey/polyfill/polyfill.ts var init_polyfill = __esm({ "tampermonkey/polyfill/polyfill.ts"() { "use strict"; init_tampermonkey(); init_element_prototype_replaceChildren(); init_proposal_relative_indexing_method(); } }); // tampermonkey/index.ts var init_tampermonkey = __esm({ "tampermonkey/index.ts"() { "use strict"; init_gm(); init_polyfill(); } }); // node_modules/crypt/crypt.js var require_crypt = __commonJS({ "node_modules/crypt/crypt.js"(exports2, module2) { init_tampermonkey(); (function() { var base64map = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/", crypt = { // Bit-wise rotation left rotl: function(n, b) { return n << b | n >>> 32 - b; }, // Bit-wise rotation right rotr: function(n, b) { return n << 32 - b | n >>> b; }, // Swap big-endian to little-endian and vice versa endian: function(n) { if (n.constructor == Number) { return crypt.rotl(n, 8) & 16711935 | crypt.rotl(n, 24) & 4278255360; } for (var i = 0; i < n.length; i++) n[i] = crypt.endian(n[i]); return n; }, // Generate an array of any length of random bytes randomBytes: function(n) { for (var bytes = []; n > 0; n--) bytes.push(Math.floor(Math.random() * 256)); return bytes; }, // Convert a byte array to big-endian 32-bit words bytesToWords: function(bytes) { for (var words = [], i = 0, b = 0; i < bytes.length; i++, b += 8) words[b >>> 5] |= bytes[i] << 24 - b % 32; return words; }, // Convert big-endian 32-bit words to a byte array wordsToBytes: function(words) { for (var bytes = [], b = 0; b < words.length * 32; b += 8) bytes.push(words[b >>> 5] >>> 24 - b % 32 & 255); return bytes; }, // Convert a byte array to a hex string bytesToHex: function(bytes) { for (var hex = [], i = 0; i < bytes.length; i++) { hex.push((bytes[i] >>> 4).toString(16)); hex.push((bytes[i] & 15).toString(16)); } return hex.join(""); }, // Convert a hex string to a byte array hexToBytes: function(hex) { for (var bytes = [], c = 0; c < hex.length; c += 2) bytes.push(parseInt(hex.substr(c, 2), 16)); return bytes; }, // Convert a byte array to a base-64 string bytesToBase64: function(bytes) { for (var base642 = [], i = 0; i < bytes.length; i += 3) { var triplet = bytes[i] << 16 | bytes[i + 1] << 8 | bytes[i + 2]; for (var j = 0; j < 4; j++) if (i * 8 + j * 6 <= bytes.length * 8) base642.push(base64map.charAt(triplet >>> 6 * (3 - j) & 63)); else base642.push("="); } return base642.join(""); }, // Convert a base-64 string to a byte array base64ToBytes: function(base642) { base642 = base642.replace(/[^A-Z0-9+\\/]/ig, ""); for (var bytes = [], i = 0, imod4 = 0; i < base642.length; imod4 = ++i % 4) { if (imod4 == 0) continue; bytes.push((base64map.indexOf(base642.charAt(i - 1)) & Math.pow(2, -2 * imod4 + 8) - 1) << imod4 * 2 | base64map.indexOf(base642.charAt(i)) >>> 6 - imod4 * 2); } return bytes; } }; module2.exports = crypt; })(); } }); // node_modules/charenc/charenc.js var require_charenc = __commonJS({ "node_modules/charenc/charenc.js"(exports2, module2) { init_tampermonkey(); var charenc = { // UTF-8 encoding utf8: { // Convert a string to a byte array stringToBytes: function(str) { return charenc.bin.stringToBytes(unescape(encodeURIComponent(str))); }, // Convert a byte array to a string bytesToString: function(bytes) { return decodeURIComponent(escape(charenc.bin.bytesToString(bytes))); } }, // Binary encoding bin: { // Convert a string to a byte array stringToBytes: function(str) { for (var bytes = [], i = 0; i < str.length; i++) bytes.push(str.charCodeAt(i) & 255); return bytes; }, // Convert a byte array to a string bytesToString: function(bytes) { for (var str = [], i = 0; i < bytes.length; i++) str.push(String.fromCharCode(bytes[i])); return str.join(""); } } }; module2.exports = charenc; } }); // node_modules/is-buffer/index.js var require_is_buffer = __commonJS({ "node_modules/is-buffer/index.js"(exports2, module2) { init_tampermonkey(); module2.exports = function(obj) { return obj != null && (isBuffer(obj) || isSlowBuffer(obj) || !!obj._isBuffer); }; function isBuffer(obj) { return !!obj.constructor && typeof obj.constructor.isBuffer === "function" && obj.constructor.isBuffer(obj); } function isSlowBuffer(obj) { return typeof obj.readFloatLE === "function" && typeof obj.slice === "function" && isBuffer(obj.slice(0, 0)); } } }); // node_modules/md5/md5.js var require_md5 = __commonJS({ "node_modules/md5/md5.js"(exports2, module2) { init_tampermonkey(); (function() { var crypt = require_crypt(), utf8 = require_charenc().utf8, isBuffer = require_is_buffer(), bin = require_charenc().bin, md54 = function(message, options) { if (message.constructor == String) if (options && options.encoding === "binary") message = bin.stringToBytes(message); else message = utf8.stringToBytes(message); else if (isBuffer(message)) message = Array.prototype.slice.call(message, 0); else if (!Array.isArray(message) && message.constructor !== Uint8Array) message = message.toString(); var m = crypt.bytesToWords(message), l = message.length * 8, a = 1732584193, b = -271733879, c = -1732584194, d = 271733878; for (var i = 0; i < m.length; i++) { m[i] = (m[i] << 8 | m[i] >>> 24) & 16711935 | (m[i] << 24 | m[i] >>> 8) & 4278255360; } m[l >>> 5] |= 128 << l % 32; m[(l + 64 >>> 9 << 4) + 14] = l; var FF = md54._ff, GG = md54._gg, HH = md54._hh, II = md54._ii; for (var i = 0; i < m.length; i += 16) { var aa = a, bb = b, cc = c, dd = d; a = FF(a, b, c, d, m[i + 0], 7, -680876936); d = FF(d, a, b, c, m[i + 1], 12, -389564586); c = FF(c, d, a, b, m[i + 2], 17, 606105819); b = FF(b, c, d, a, m[i + 3], 22, -1044525330); a = FF(a, b, c, d, m[i + 4], 7, -176418897); d = FF(d, a, b, c, m[i + 5], 12, 1200080426); c = FF(c, d, a, b, m[i + 6], 17, -1473231341); b = FF(b, c, d, a, m[i + 7], 22, -45705983); a = FF(a, b, c, d, m[i + 8], 7, 1770035416); d = FF(d, a, b, c, m[i + 9], 12, -1958414417); c = FF(c, d, a, b, m[i + 10], 17, -42063); b = FF(b, c, d, a, m[i + 11], 22, -1990404162); a = FF(a, b, c, d, m[i + 12], 7, 1804603682); d = FF(d, a, b, c, m[i + 13], 12, -40341101); c = FF(c, d, a, b, m[i + 14], 17, -1502002290); b = FF(b, c, d, a, m[i + 15], 22, 1236535329); a = GG(a, b, c, d, m[i + 1], 5, -165796510); d = GG(d, a, b, c, m[i + 6], 9, -1069501632); c = GG(c, d, a, b, m[i + 11], 14, 643717713); b = GG(b, c, d, a, m[i + 0], 20, -373897302); a = GG(a, b, c, d, m[i + 5], 5, -701558691); d = GG(d, a, b, c, m[i + 10], 9, 38016083); c = GG(c, d, a, b, m[i + 15], 14, -660478335); b = GG(b, c, d, a, m[i + 4], 20, -405537848); a = GG(a, b, c, d, m[i + 9], 5, 568446438); d = GG(d, a, b, c, m[i + 14], 9, -1019803690); c = GG(c, d, a, b, m[i + 3], 14, -187363961); b = GG(b, c, d, a, m[i + 8], 20, 1163531501); a = GG(a, b, c, d, m[i + 13], 5, -1444681467); d = GG(d, a, b, c, m[i + 2], 9, -51403784); c = GG(c, d, a, b, m[i + 7], 14, 1735328473); b = GG(b, c, d, a, m[i + 12], 20, -1926607734); a = HH(a, b, c, d, m[i + 5], 4, -378558); d = HH(d, a, b, c, m[i + 8], 11, -2022574463); c = HH(c, d, a, b, m[i + 11], 16, 1839030562); b = HH(b, c, d, a, m[i + 14], 23, -35309556); a = HH(a, b, c, d, m[i + 1], 4, -1530992060); d = HH(d, a, b, c, m[i + 4], 11, 1272893353); c = HH(c, d, a, b, m[i + 7], 16, -155497632); b = HH(b, c, d, a, m[i + 10], 23, -1094730640); a = HH(a, b, c, d, m[i + 13], 4, 681279174); d = HH(d, a, b, c, m[i + 0], 11, -358537222); c = HH(c, d, a, b, m[i + 3], 16, -722521979); b = HH(b, c, d, a, m[i + 6], 23, 76029189); a = HH(a, b, c, d, m[i + 9], 4, -640364487); d = HH(d, a, b, c, m[i + 12], 11, -421815835); c = HH(c, d, a, b, m[i + 15], 16, 530742520); b = HH(b, c, d, a, m[i + 2], 23, -995338651); a = II(a, b, c, d, m[i + 0], 6, -198630844); d = II(d, a, b, c, m[i + 7], 10, 1126891415); c = II(c, d, a, b, m[i + 14], 15, -1416354905); b = II(b, c, d, a, m[i + 5], 21, -57434055); a = II(a, b, c, d, m[i + 12], 6, 1700485571); d = II(d, a, b, c, m[i + 3], 10, -1894986606); c = II(c, d, a, b, m[i + 10], 15, -1051523); b = II(b, c, d, a, m[i + 1], 21, -2054922799); a = II(a, b, c, d, m[i + 8], 6, 1873313359); d = II(d, a, b, c, m[i + 15], 10, -30611744); c = II(c, d, a, b, m[i + 6], 15, -1560198380); b = II(b, c, d, a, m[i + 13], 21, 1309151649); a = II(a, b, c, d, m[i + 4], 6, -145523070); d = II(d, a, b, c, m[i + 11], 10, -1120210379); c = II(c, d, a, b, m[i + 2], 15, 718787259); b = II(b, c, d, a, m[i + 9], 21, -343485551); a = a + aa >>> 0; b = b + bb >>> 0; c = c + cc >>> 0; d = d + dd >>> 0; } return crypt.endian([a, b, c, d]); }; md54._ff = function(a, b, c, d, x, s, t) { var n = a + (b & c | ~b & d) + (x >>> 0) + t; return (n << s | n >>> 32 - s) + b; }; md54._gg = function(a, b, c, d, x, s, t) { var n = a + (b & d | c & ~d) + (x >>> 0) + t; return (n << s | n >>> 32 - s) + b; }; md54._hh = function(a, b, c, d, x, s, t) { var n = a + (b ^ c ^ d) + (x >>> 0) + t; return (n << s | n >>> 32 - s) + b; }; md54._ii = function(a, b, c, d, x, s, t) { var n = a + (c ^ (b | ~d)) + (x >>> 0) + t; return (n << s | n >>> 32 - s) + b; }; md54._blocksize = 16; md54._digestsize = 16; module2.exports = function(message, options) { if (message === void 0 || message === null) throw new Error("Illegal argument " + message); var digestbytes = crypt.wordsToBytes(md54(message, options)); return options && options.asBytes ? digestbytes : options && options.asString ? bin.bytesToString(digestbytes) : crypt.bytesToHex(digestbytes); }; })(); } }); // node_modules/@protobufjs/aspromise/index.js var require_aspromise = __commonJS({ "node_modules/@protobufjs/aspromise/index.js"(exports2, module2) { "use strict"; init_tampermonkey(); module2.exports = asPromise; function asPromise(fn, ctx) { var params = new Array(arguments.length - 1), offset3 = 0, index = 2, pending = true; while (index < arguments.length) params[offset3++] = arguments[index++]; return new Promise(function executor(resolve, reject) { params[offset3] = function callback(err2) { if (pending) { pending = false; if (err2) reject(err2); else { var params2 = new Array(arguments.length - 1), offset4 = 0; while (offset4 < params2.length) params2[offset4++] = arguments[offset4]; resolve.apply(null, params2); } } }; try { fn.apply(ctx || null, params); } catch (err2) { if (pending) { pending = false; reject(err2); } } }); } } }); // node_modules/@protobufjs/base64/index.js var require_base64 = __commonJS({ "node_modules/@protobufjs/base64/index.js"(exports2) { "use strict"; init_tampermonkey(); var base642 = exports2; base642.length = function length2(string) { var p = string.length; if (!p) return 0; var n = 0; while (--p % 4 > 1 && string.charAt(p) === "=") ++n; return Math.ceil(string.length * 3) / 4 - n; }; var b64 = new Array(64); var s64 = new Array(123); for (i = 0; i < 64; ) s64[b64[i] = i < 26 ? i + 65 : i < 52 ? i + 71 : i < 62 ? i - 4 : i - 59 | 43] = i++; var i; base642.encode = function encode(buffer, start, end) { var parts = null, chunk = []; var i2 = 0, j = 0, t; while (start < end) { var b = buffer[start++]; switch (j) { case 0: chunk[i2++] = b64[b >> 2]; t = (b & 3) << 4; j = 1; break; case 1: chunk[i2++] = b64[t | b >> 4]; t = (b & 15) << 2; j = 2; break; case 2: chunk[i2++] = b64[t | b >> 6]; chunk[i2++] = b64[b & 63]; j = 0; break; } if (i2 > 8191) { (parts || (parts = [])).push(String.fromCharCode.apply(String, chunk)); i2 = 0; } } if (j) { chunk[i2++] = b64[t]; chunk[i2++] = 61; if (j === 1) chunk[i2++] = 61; } if (parts) { if (i2) parts.push(String.fromCharCode.apply(String, chunk.slice(0, i2))); return parts.join(""); } return String.fromCharCode.apply(String, chunk.slice(0, i2)); }; var invalidEncoding = "invalid encoding"; base642.decode = function decode(string, buffer, offset3) { var start = offset3; var j = 0, t; for (var i2 = 0; i2 < string.length; ) { var c = string.charCodeAt(i2++); if (c === 61 && j > 1) break; if ((c = s64[c]) === void 0) throw Error(invalidEncoding); switch (j) { case 0: t = c; j = 1; break; case 1: buffer[offset3++] = t << 2 | (c & 48) >> 4; t = c; j = 2; break; case 2: buffer[offset3++] = (t & 15) << 4 | (c & 60) >> 2; t = c; j = 3; break; case 3: buffer[offset3++] = (t & 3) << 6 | c; j = 0; break; } } if (j === 1) throw Error(invalidEncoding); return offset3 - start; }; base642.test = function test(string) { return /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?\$/.test(string); }; } }); // node_modules/@protobufjs/eventemitter/index.js var require_eventemitter = __commonJS({ "node_modules/@protobufjs/eventemitter/index.js"(exports2, module2) { "use strict"; init_tampermonkey(); module2.exports = EventEmitter; function EventEmitter() { this._listeners = {}; } EventEmitter.prototype.on = function on(evt, fn, ctx) { (this._listeners[evt] || (this._listeners[evt] = [])).push({ fn, ctx: ctx || this }); return this; }; EventEmitter.prototype.off = function off(evt, fn) { if (evt === void 0) this._listeners = {}; else { if (fn === void 0) this._listeners[evt] = []; else { var listeners = this._listeners[evt]; for (var i = 0; i < listeners.length; ) if (listeners[i].fn === fn) listeners.splice(i, 1); else ++i; } } return this; }; EventEmitter.prototype.emit = function emit(evt) { var listeners = this._listeners[evt]; if (listeners) { var args = [], i = 1; for (; i < arguments.length; ) args.push(arguments[i++]); for (i = 0; i < listeners.length; ) listeners[i].fn.apply(listeners[i++].ctx, args); } return this; }; } }); // node_modules/@protobufjs/float/index.js var require_float = __commonJS({ "node_modules/@protobufjs/float/index.js"(exports2, module2) { "use strict"; init_tampermonkey(); module2.exports = factory(factory); function factory(exports3) { if (typeof Float32Array !== "undefined") (function() { var f32 = new Float32Array([-0]), f8b = new Uint8Array(f32.buffer), le = f8b[3] === 128; function writeFloat_f32_cpy(val, buf, pos) { f32[0] = val; buf[pos] = f8b[0]; buf[pos + 1] = f8b[1]; buf[pos + 2] = f8b[2]; buf[pos + 3] = f8b[3]; } function writeFloat_f32_rev(val, buf, pos) { f32[0] = val; buf[pos] = f8b[3]; buf[pos + 1] = f8b[2]; buf[pos + 2] = f8b[1]; buf[pos + 3] = f8b[0]; } exports3.writeFloatLE = le ? writeFloat_f32_cpy : writeFloat_f32_rev; exports3.writeFloatBE = le ? writeFloat_f32_rev : writeFloat_f32_cpy; function readFloat_f32_cpy(buf, pos) { f8b[0] = buf[pos]; f8b[1] = buf[pos + 1]; f8b[2] = buf[pos + 2]; f8b[3] = buf[pos + 3]; return f32[0]; } function readFloat_f32_rev(buf, pos) { f8b[3] = buf[pos]; f8b[2] = buf[pos + 1]; f8b[1] = buf[pos + 2]; f8b[0] = buf[pos + 3]; return f32[0]; } exports3.readFloatLE = le ? readFloat_f32_cpy : readFloat_f32_rev; exports3.readFloatBE = le ? readFloat_f32_rev : readFloat_f32_cpy; })(); else (function() { function writeFloat_ieee754(writeUint, val, buf, pos) { var sign = val < 0 ? 1 : 0; if (sign) val = -val; if (val === 0) writeUint(1 / val > 0 ? ( /* positive */ 0 ) : ( /* negative 0 */ 2147483648 ), buf, pos); else if (isNaN(val)) writeUint(2143289344, buf, pos); else if (val > 34028234663852886e22) writeUint((sign << 31 | 2139095040) >>> 0, buf, pos); else if (val < 11754943508222875e-54) writeUint((sign << 31 | Math.round(val / 1401298464324817e-60)) >>> 0, buf, pos); else { var exponent = Math.floor(Math.log(val) / Math.LN2), mantissa = Math.round(val * Math.pow(2, -exponent) * 8388608) & 8388607; writeUint((sign << 31 | exponent + 127 << 23 | mantissa) >>> 0, buf, pos); } } exports3.writeFloatLE = writeFloat_ieee754.bind(null, writeUintLE); exports3.writeFloatBE = writeFloat_ieee754.bind(null, writeUintBE); function readFloat_ieee754(readUint, buf, pos) { var uint = readUint(buf, pos), sign = (uint >> 31) * 2 + 1, exponent = uint >>> 23 & 255, mantissa = uint & 8388607; return exponent === 255 ? mantissa ? NaN : sign * Infinity : exponent === 0 ? sign * 1401298464324817e-60 * mantissa : sign * Math.pow(2, exponent - 150) * (mantissa + 8388608); } exports3.readFloatLE = readFloat_ieee754.bind(null, readUintLE); exports3.readFloatBE = readFloat_ieee754.bind(null, readUintBE); })(); if (typeof Float64Array !== "undefined") (function() { var f64 = new Float64Array([-0]), f8b = new Uint8Array(f64.buffer), le = f8b[7] === 128; function writeDouble_f64_cpy(val, buf, pos) { f64[0] = val; buf[pos] = f8b[0]; buf[pos + 1] = f8b[1]; buf[pos + 2] = f8b[2]; buf[pos + 3] = f8b[3]; buf[pos + 4] = f8b[4]; buf[pos + 5] = f8b[5]; buf[pos + 6] = f8b[6]; buf[pos + 7] = f8b[7]; } function writeDouble_f64_rev(val, buf, pos) { f64[0] = val; buf[pos] = f8b[7]; buf[pos + 1] = f8b[6]; buf[pos + 2] = f8b[5]; buf[pos + 3] = f8b[4]; buf[pos + 4] = f8b[3]; buf[pos + 5] = f8b[2]; buf[pos + 6] = f8b[1]; buf[pos + 7] = f8b[0]; } exports3.writeDoubleLE = le ? writeDouble_f64_cpy : writeDouble_f64_rev; exports3.writeDoubleBE = le ? writeDouble_f64_rev : writeDouble_f64_cpy; function readDouble_f64_cpy(buf, pos) { f8b[0] = buf[pos]; f8b[1] = buf[pos + 1]; f8b[2] = buf[pos + 2]; f8b[3] = buf[pos + 3]; f8b[4] = buf[pos + 4]; f8b[5] = buf[pos + 5]; f8b[6] = buf[pos + 6]; f8b[7] = buf[pos + 7]; return f64[0]; } function readDouble_f64_rev(buf, pos) { f8b[7] = buf[pos]; f8b[6] = buf[pos + 1]; f8b[5] = buf[pos + 2]; f8b[4] = buf[pos + 3]; f8b[3] = buf[pos + 4]; f8b[2] = buf[pos + 5]; f8b[1] = buf[pos + 6]; f8b[0] = buf[pos + 7]; return f64[0]; } exports3.readDoubleLE = le ? readDouble_f64_cpy : readDouble_f64_rev; exports3.readDoubleBE = le ? readDouble_f64_rev : readDouble_f64_cpy; })(); else (function() { function writeDouble_ieee754(writeUint, off0, off1, val, buf, pos) { var sign = val < 0 ? 1 : 0; if (sign) val = -val; if (val === 0) { writeUint(0, buf, pos + off0); writeUint(1 / val > 0 ? ( /* positive */ 0 ) : ( /* negative 0 */ 2147483648 ), buf, pos + off1); } else if (isNaN(val)) { writeUint(0, buf, pos + off0); writeUint(2146959360, buf, pos + off1); } else if (val > 17976931348623157e292) { writeUint(0, buf, pos + off0); writeUint((sign << 31 | 2146435072) >>> 0, buf, pos + off1); } else { var mantissa; if (val < 22250738585072014e-324) { mantissa = val / 5e-324; writeUint(mantissa >>> 0, buf, pos + off0); writeUint((sign << 31 | mantissa / 4294967296) >>> 0, buf, pos + off1); } else { var exponent = Math.floor(Math.log(val) / Math.LN2); if (exponent === 1024) exponent = 1023; mantissa = val * Math.pow(2, -exponent); writeUint(mantissa * 4503599627370496 >>> 0, buf, pos + off0); writeUint((sign << 31 | exponent + 1023 << 20 | mantissa * 1048576 & 1048575) >>> 0, buf, pos + off1); } } } exports3.writeDoubleLE = writeDouble_ieee754.bind(null, writeUintLE, 0, 4); exports3.writeDoubleBE = writeDouble_ieee754.bind(null, writeUintBE, 4, 0); function readDouble_ieee754(readUint, off0, off1, buf, pos) { var lo = readUint(buf, pos + off0), hi = readUint(buf, pos + off1); var sign = (hi >> 31) * 2 + 1, exponent = hi >>> 20 & 2047, mantissa = 4294967296 * (hi & 1048575) + lo; return exponent === 2047 ? mantissa ? NaN : sign * Infinity : exponent === 0 ? sign * 5e-324 * mantissa : sign * Math.pow(2, exponent - 1075) * (mantissa + 4503599627370496); } exports3.readDoubleLE = readDouble_ieee754.bind(null, readUintLE, 0, 4); exports3.readDoubleBE = readDouble_ieee754.bind(null, readUintBE, 4, 0); })(); return exports3; } function writeUintLE(val, buf, pos) { buf[pos] = val & 255; buf[pos + 1] = val >>> 8 & 255; buf[pos + 2] = val >>> 16 & 255; buf[pos + 3] = val >>> 24; } function writeUintBE(val, buf, pos) { buf[pos] = val >>> 24; buf[pos + 1] = val >>> 16 & 255; buf[pos + 2] = val >>> 8 & 255; buf[pos + 3] = val & 255; } function readUintLE(buf, pos) { return (buf[pos] | buf[pos + 1] << 8 | buf[pos + 2] << 16 | buf[pos + 3] << 24) >>> 0; } function readUintBE(buf, pos) { return (buf[pos] << 24 | buf[pos + 1] << 16 | buf[pos + 2] << 8 | buf[pos + 3]) >>> 0; } } }); // node_modules/@protobufjs/inquire/index.js var require_inquire = __commonJS({ "node_modules/@protobufjs/inquire/index.js"(exports, module) { "use strict"; init_tampermonkey(); module.exports = inquire; function inquire(moduleName) { try { var mod = eval("quire".replace(/^/, "re"))(moduleName); if (mod && (mod.length || Object.keys(mod).length)) return mod; } catch (e) { } return null; } } }); // node_modules/@protobufjs/utf8/index.js var require_utf8 = __commonJS({ "node_modules/@protobufjs/utf8/index.js"(exports2) { "use strict"; init_tampermonkey(); var utf8 = exports2; utf8.length = function utf8_length(string) { var len = 0, c = 0; for (var i = 0; i < string.length; ++i) { c = string.charCodeAt(i); if (c < 128) len += 1; else if (c < 2048) len += 2; else if ((c & 64512) === 55296 && (string.charCodeAt(i + 1) & 64512) === 56320) { ++i; len += 4; } else len += 3; } return len; }; utf8.read = function utf8_read(buffer, start, end) { var len = end - start; if (len < 1) return ""; var parts = null, chunk = [], i = 0, t; while (start < end) { t = buffer[start++]; if (t < 128) chunk[i++] = t; else if (t > 191 && t < 224) chunk[i++] = (t & 31) << 6 | buffer[start++] & 63; else if (t > 239 && t < 365) { t = ((t & 7) << 18 | (buffer[start++] & 63) << 12 | (buffer[start++] & 63) << 6 | buffer[start++] & 63) - 65536; chunk[i++] = 55296 + (t >> 10); chunk[i++] = 56320 + (t & 1023); } else chunk[i++] = (t & 15) << 12 | (buffer[start++] & 63) << 6 | buffer[start++] & 63; if (i > 8191) { (parts || (parts = [])).push(String.fromCharCode.apply(String, chunk)); i = 0; } } if (parts) { if (i) parts.push(String.fromCharCode.apply(String, chunk.slice(0, i))); return parts.join(""); } return String.fromCharCode.apply(String, chunk.slice(0, i)); }; utf8.write = function utf8_write(string, buffer, offset3) { var start = offset3, c1, c2; for (var i = 0; i < string.length; ++i) { c1 = string.charCodeAt(i); if (c1 < 128) { buffer[offset3++] = c1; } else if (c1 < 2048) { buffer[offset3++] = c1 >> 6 | 192; buffer[offset3++] = c1 & 63 | 128; } else if ((c1 & 64512) === 55296 && ((c2 = string.charCodeAt(i + 1)) & 64512) === 56320) { c1 = 65536 + ((c1 & 1023) << 10) + (c2 & 1023); ++i; buffer[offset3++] = c1 >> 18 | 240; buffer[offset3++] = c1 >> 12 & 63 | 128; buffer[offset3++] = c1 >> 6 & 63 | 128; buffer[offset3++] = c1 & 63 | 128; } else { buffer[offset3++] = c1 >> 12 | 224; buffer[offset3++] = c1 >> 6 & 63 | 128; buffer[offset3++] = c1 & 63 | 128; } } return offset3 - start; }; } }); // node_modules/@protobufjs/pool/index.js var require_pool = __commonJS({ "node_modules/@protobufjs/pool/index.js"(exports2, module2) { "use strict"; init_tampermonkey(); module2.exports = pool; function pool(alloc, slice, size) { var SIZE = size || 8192; var MAX = SIZE >>> 1; var slab = null; var offset3 = SIZE; return function pool_alloc(size2) { if (size2 < 1 || size2 > MAX) return alloc(size2); if (offset3 + size2 > SIZE) { slab = alloc(SIZE); offset3 = 0; } var buf = slice.call(slab, offset3, offset3 += size2); if (offset3 & 7) offset3 = (offset3 | 7) + 1; return buf; }; } } }); // node_modules/protobufjs/src/util/longbits.js var require_longbits = __commonJS({ "node_modules/protobufjs/src/util/longbits.js"(exports2, module2) { "use strict"; init_tampermonkey(); module2.exports = LongBits; var util = require_minimal(); function LongBits(lo, hi) { this.lo = lo >>> 0; this.hi = hi >>> 0; } var zero = LongBits.zero = new LongBits(0, 0); zero.toNumber = function() { return 0; }; zero.zzEncode = zero.zzDecode = function() { return this; }; zero.length = function() { return 1; }; var zeroHash = LongBits.zeroHash = "\\0\\0\\0\\0\\0\\0\\0\\0"; LongBits.fromNumber = function fromNumber(value) { if (value === 0) return zero; var sign = value < 0; if (sign) value = -value; var lo = value >>> 0, hi = (value - lo) / 4294967296 >>> 0; if (sign) { hi = ~hi >>> 0; lo = ~lo >>> 0; if (++lo > 4294967295) { lo = 0; if (++hi > 4294967295) hi = 0; } } return new LongBits(lo, hi); }; LongBits.from = function from(value) { if (typeof value === "number") return LongBits.fromNumber(value); if (util.isString(value)) { if (util.Long) value = util.Long.fromString(value); else return LongBits.fromNumber(parseInt(value, 10)); } return value.low || value.high ? new LongBits(value.low >>> 0, value.high >>> 0) : zero; }; LongBits.prototype.toNumber = function toNumber(unsigned) { if (!unsigned && this.hi >>> 31) { var lo = ~this.lo + 1 >>> 0, hi = ~this.hi >>> 0; if (!lo) hi = hi + 1 >>> 0; return -(lo + hi * 4294967296); } return this.lo + this.hi * 4294967296; }; LongBits.prototype.toLong = function toLong(unsigned) { return util.Long ? new util.Long(this.lo | 0, this.hi | 0, Boolean(unsigned)) : { low: this.lo | 0, high: this.hi | 0, unsigned: Boolean(unsigned) }; }; var charCodeAt = String.prototype.charCodeAt; LongBits.fromHash = function fromHash(hash) { if (hash === zeroHash) return zero; return new LongBits( (charCodeAt.call(hash, 0) | charCodeAt.call(hash, 1) << 8 | charCodeAt.call(hash, 2) << 16 | charCodeAt.call(hash, 3) << 24) >>> 0, (charCodeAt.call(hash, 4) | charCodeAt.call(hash, 5) << 8 | charCodeAt.call(hash, 6) << 16 | charCodeAt.call(hash, 7) << 24) >>> 0 ); }; LongBits.prototype.toHash = function toHash() { return String.fromCharCode( this.lo & 255, this.lo >>> 8 & 255, this.lo >>> 16 & 255, this.lo >>> 24, this.hi & 255, this.hi >>> 8 & 255, this.hi >>> 16 & 255, this.hi >>> 24 ); }; LongBits.prototype.zzEncode = function zzEncode() { var mask = this.hi >> 31; this.hi = ((this.hi << 1 | this.lo >>> 31) ^ mask) >>> 0; this.lo = (this.lo << 1 ^ mask) >>> 0; return this; }; LongBits.prototype.zzDecode = function zzDecode() { var mask = -(this.lo & 1); this.lo = ((this.lo >>> 1 | this.hi << 31) ^ mask) >>> 0; this.hi = (this.hi >>> 1 ^ mask) >>> 0; return this; }; LongBits.prototype.length = function length2() { var part0 = this.lo, part1 = (this.lo >>> 28 | this.hi << 4) >>> 0, part2 = this.hi >>> 24; return part2 === 0 ? part1 === 0 ? part0 < 16384 ? part0 < 128 ? 1 : 2 : part0 < 2097152 ? 3 : 4 : part1 < 16384 ? part1 < 128 ? 5 : 6 : part1 < 2097152 ? 7 : 8 : part2 < 128 ? 9 : 10; }; } }); // node_modules/protobufjs/src/util/minimal.js var require_minimal = __commonJS({ "node_modules/protobufjs/src/util/minimal.js"(exports2) { "use strict"; init_tampermonkey(); var util = exports2; util.asPromise = require_aspromise(); util.base64 = require_base64(); util.EventEmitter = require_eventemitter(); util.float = require_float(); util.inquire = require_inquire(); util.utf8 = require_utf8(); util.pool = require_pool(); util.LongBits = require_longbits(); util.isNode = Boolean(typeof global !== "undefined" && global && global.process && global.process.versions && global.process.versions.node); util.global = util.isNode && global || typeof window !== "undefined" && window || typeof self !== "undefined" && self || exports2; util.emptyArray = Object.freeze ? Object.freeze([]) : ( /* istanbul ignore next */ [] ); util.emptyObject = Object.freeze ? Object.freeze({}) : ( /* istanbul ignore next */ {} ); util.isInteger = Number.isInteger || /* istanbul ignore next */ function isInteger(value) { return typeof value === "number" && isFinite(value) && Math.floor(value) === value; }; util.isString = function isString(value) { return typeof value === "string" || value instanceof String; }; util.isObject = function isObject2(value) { return value && typeof value === "object"; }; util.isset = /** * Checks if a property on a message is considered to be present. * @param {Object} obj Plain object or message instance * @param {string} prop Property name * @returns {boolean} \`true\` if considered to be present, otherwise \`false\` */ util.isSet = function isSet(obj, prop) { var value = obj[prop]; if (value != null && obj.hasOwnProperty(prop)) return typeof value !== "object" || (Array.isArray(value) ? value.length : Object.keys(value).length) > 0; return false; }; util.Buffer = function() { try { var Buffer2 = util.inquire("buffer").Buffer; return Buffer2.prototype.utf8Write ? Buffer2 : ( /* istanbul ignore next */ null ); } catch (e) { return null; } }(); util._Buffer_from = null; util._Buffer_allocUnsafe = null; util.newBuffer = function newBuffer(sizeOrArray) { return typeof sizeOrArray === "number" ? util.Buffer ? util._Buffer_allocUnsafe(sizeOrArray) : new util.Array(sizeOrArray) : util.Buffer ? util._Buffer_from(sizeOrArray) : typeof Uint8Array === "undefined" ? sizeOrArray : new Uint8Array(sizeOrArray); }; util.Array = typeof Uint8Array !== "undefined" ? Uint8Array : Array; util.Long = /* istanbul ignore next */ util.global.dcodeIO && /* istanbul ignore next */ util.global.dcodeIO.Long || /* istanbul ignore next */ util.global.Long || util.inquire("long"); util.key2Re = /^true|false|0|1\$/; util.key32Re = /^-?(?:0|[1-9][0-9]*)\$/; util.key64Re = /^(?:[\\\\x00-\\\\xff]{8}|-?(?:0|[1-9][0-9]*))\$/; util.longToHash = function longToHash(value) { return value ? util.LongBits.from(value).toHash() : util.LongBits.zeroHash; }; util.longFromHash = function longFromHash(hash, unsigned) { var bits2 = util.LongBits.fromHash(hash); if (util.Long) return util.Long.fromBits(bits2.lo, bits2.hi, unsigned); return bits2.toNumber(Boolean(unsigned)); }; function merge(dst, src, ifNotSet) { for (var keys = Object.keys(src), i = 0; i < keys.length; ++i) if (dst[keys[i]] === void 0 || !ifNotSet) dst[keys[i]] = src[keys[i]]; return dst; } util.merge = merge; util.lcFirst = function lcFirst(str) { return str.charAt(0).toLowerCase() + str.substring(1); }; function newError(name) { function CustomError(message, properties) { if (!(this instanceof CustomError)) return new CustomError(message, properties); Object.defineProperty(this, "message", { get: function() { return message; } }); if (Error.captureStackTrace) Error.captureStackTrace(this, CustomError); else Object.defineProperty(this, "stack", { value: new Error().stack || "" }); if (properties) merge(this, properties); } CustomError.prototype = Object.create(Error.prototype, { constructor: { value: CustomError, writable: true, enumerable: false, configurable: true }, name: { get: function get() { return name; }, set: void 0, enumerable: false, // configurable: false would accurately preserve the behavior of // the original, but I'm guessing that was not intentional. // For an actual error subclass, this property would // be configurable. configurable: true }, toString: { value: function value() { return this.name + ": " + this.message; }, writable: true, enumerable: false, configurable: true } }); return CustomError; } util.newError = newError; util.ProtocolError = newError("ProtocolError"); util.oneOfGetter = function getOneOf(fieldNames) { var fieldMap = {}; for (var i = 0; i < fieldNames.length; ++i) fieldMap[fieldNames[i]] = 1; return function() { for (var keys = Object.keys(this), i2 = keys.length - 1; i2 > -1; --i2) if (fieldMap[keys[i2]] === 1 && this[keys[i2]] !== void 0 && this[keys[i2]] !== null) return keys[i2]; }; }; util.oneOfSetter = function setOneOf(fieldNames) { return function(name) { for (var i = 0; i < fieldNames.length; ++i) if (fieldNames[i] !== name) delete this[fieldNames[i]]; }; }; util.toJSONOptions = { longs: String, enums: String, bytes: String, json: true }; util._configure = function() { var Buffer2 = util.Buffer; if (!Buffer2) { util._Buffer_from = util._Buffer_allocUnsafe = null; return; } util._Buffer_from = Buffer2.from !== Uint8Array.from && Buffer2.from || /* istanbul ignore next */ function Buffer_from(value, encoding) { return new Buffer2(value, encoding); }; util._Buffer_allocUnsafe = Buffer2.allocUnsafe || /* istanbul ignore next */ function Buffer_allocUnsafe(size) { return new Buffer2(size); }; }; } }); // node_modules/protobufjs/src/writer.js var require_writer = __commonJS({ "node_modules/protobufjs/src/writer.js"(exports2, module2) { "use strict"; init_tampermonkey(); module2.exports = Writer2; var util = require_minimal(); var BufferWriter; var LongBits = util.LongBits; var base642 = util.base64; var utf8 = util.utf8; function Op(fn, len, val) { this.fn = fn; this.len = len; this.next = void 0; this.val = val; } function noop() { } function State(writer) { this.head = writer.head; this.tail = writer.tail; this.len = writer.len; this.next = writer.states; } function Writer2() { this.len = 0; this.head = new Op(noop, 0, 0); this.tail = this.head; this.states = null; } var create = function create2() { return util.Buffer ? function create_buffer_setup() { return (Writer2.create = function create_buffer() { return new BufferWriter(); })(); } : function create_array() { return new Writer2(); }; }; Writer2.create = create(); Writer2.alloc = function alloc(size) { return new util.Array(size); }; if (util.Array !== Array) Writer2.alloc = util.pool(Writer2.alloc, util.Array.prototype.subarray); Writer2.prototype._push = function push(fn, len, val) { this.tail = this.tail.next = new Op(fn, len, val); this.len += len; return this; }; function writeByte(val, buf, pos) { buf[pos] = val & 255; } function writeVarint32(val, buf, pos) { while (val > 127) { buf[pos++] = val & 127 | 128; val >>>= 7; } buf[pos] = val; } function VarintOp(len, val) { this.len = len; this.next = void 0; this.val = val; } VarintOp.prototype = Object.create(Op.prototype); VarintOp.prototype.fn = writeVarint32; Writer2.prototype.uint32 = function write_uint32(value) { this.len += (this.tail = this.tail.next = new VarintOp( (value = value >>> 0) < 128 ? 1 : value < 16384 ? 2 : value < 2097152 ? 3 : value < 268435456 ? 4 : 5, value )).len; return this; }; Writer2.prototype.int32 = function write_int32(value) { return value < 0 ? this._push(writeVarint64, 10, LongBits.fromNumber(value)) : this.uint32(value); }; Writer2.prototype.sint32 = function write_sint32(value) { return this.uint32((value << 1 ^ value >> 31) >>> 0); }; function writeVarint64(val, buf, pos) { while (val.hi) { buf[pos++] = val.lo & 127 | 128; val.lo = (val.lo >>> 7 | val.hi << 25) >>> 0; val.hi >>>= 7; } while (val.lo > 127) { buf[pos++] = val.lo & 127 | 128; val.lo = val.lo >>> 7; } buf[pos++] = val.lo; } Writer2.prototype.uint64 = function write_uint64(value) { var bits2 = LongBits.from(value); return this._push(writeVarint64, bits2.length(), bits2); }; Writer2.prototype.int64 = Writer2.prototype.uint64; Writer2.prototype.sint64 = function write_sint64(value) { var bits2 = LongBits.from(value).zzEncode(); return this._push(writeVarint64, bits2.length(), bits2); }; Writer2.prototype.bool = function write_bool(value) { return this._push(writeByte, 1, value ? 1 : 0); }; function writeFixed32(val, buf, pos) { buf[pos] = val & 255; buf[pos + 1] = val >>> 8 & 255; buf[pos + 2] = val >>> 16 & 255; buf[pos + 3] = val >>> 24; } Writer2.prototype.fixed32 = function write_fixed32(value) { return this._push(writeFixed32, 4, value >>> 0); }; Writer2.prototype.sfixed32 = Writer2.prototype.fixed32; Writer2.prototype.fixed64 = function write_fixed64(value) { var bits2 = LongBits.from(value); return this._push(writeFixed32, 4, bits2.lo)._push(writeFixed32, 4, bits2.hi); }; Writer2.prototype.sfixed64 = Writer2.prototype.fixed64; Writer2.prototype.float = function write_float(value) { return this._push(util.float.writeFloatLE, 4, value); }; Writer2.prototype.double = function write_double(value) { return this._push(util.float.writeDoubleLE, 8, value); }; var writeBytes = util.Array.prototype.set ? function writeBytes_set(val, buf, pos) { buf.set(val, pos); } : function writeBytes_for(val, buf, pos) { for (var i = 0; i < val.length; ++i) buf[pos + i] = val[i]; }; Writer2.prototype.bytes = function write_bytes(value) { var len = value.length >>> 0; if (!len) return this._push(writeByte, 1, 0); if (util.isString(value)) { var buf = Writer2.alloc(len = base642.length(value)); base642.decode(value, buf, 0); value = buf; } return this.uint32(len)._push(writeBytes, len, value); }; Writer2.prototype.string = function write_string(value) { var len = utf8.length(value); return len ? this.uint32(len)._push(utf8.write, len, value) : this._push(writeByte, 1, 0); }; Writer2.prototype.fork = function fork() { this.states = new State(this); this.head = this.tail = new Op(noop, 0, 0); this.len = 0; return this; }; Writer2.prototype.reset = function reset() { if (this.states) { this.head = this.states.head; this.tail = this.states.tail; this.len = this.states.len; this.states = this.states.next; } else { this.head = this.tail = new Op(noop, 0, 0); this.len = 0; } return this; }; Writer2.prototype.ldelim = function ldelim() { var head = this.head, tail = this.tail, len = this.len; this.reset().uint32(len); if (len) { this.tail.next = head.next; this.tail = tail; this.len += len; } return this; }; Writer2.prototype.finish = function finish() { var head = this.head.next, buf = this.constructor.alloc(this.len), pos = 0; while (head) { head.fn(head.val, buf, pos); pos += head.len; head = head.next; } return buf; }; Writer2._configure = function(BufferWriter_) { BufferWriter = BufferWriter_; Writer2.create = create(); BufferWriter._configure(); }; } }); // node_modules/protobufjs/src/writer_buffer.js var require_writer_buffer = __commonJS({ "node_modules/protobufjs/src/writer_buffer.js"(exports2, module2) { "use strict"; init_tampermonkey(); module2.exports = BufferWriter; var Writer2 = require_writer(); (BufferWriter.prototype = Object.create(Writer2.prototype)).constructor = BufferWriter; var util = require_minimal(); function BufferWriter() { Writer2.call(this); } BufferWriter._configure = function() { BufferWriter.alloc = util._Buffer_allocUnsafe; BufferWriter.writeBytesBuffer = util.Buffer && util.Buffer.prototype instanceof Uint8Array && util.Buffer.prototype.set.name === "set" ? function writeBytesBuffer_set(val, buf, pos) { buf.set(val, pos); } : function writeBytesBuffer_copy(val, buf, pos) { if (val.copy) val.copy(buf, pos, 0, val.length); else for (var i = 0; i < val.length; ) buf[pos++] = val[i++]; }; }; BufferWriter.prototype.bytes = function write_bytes_buffer(value) { if (util.isString(value)) value = util._Buffer_from(value, "base64"); var len = value.length >>> 0; this.uint32(len); if (len) this._push(BufferWriter.writeBytesBuffer, len, value); return this; }; function writeStringBuffer(val, buf, pos) { if (val.length < 40) util.utf8.write(val, buf, pos); else if (buf.utf8Write) buf.utf8Write(val, pos); else buf.write(val, pos); } BufferWriter.prototype.string = function write_string_buffer(value) { var len = util.Buffer.byteLength(value); this.uint32(len); if (len) this._push(writeStringBuffer, len, value); return this; }; BufferWriter._configure(); } }); // node_modules/protobufjs/src/reader.js var require_reader = __commonJS({ "node_modules/protobufjs/src/reader.js"(exports2, module2) { "use strict"; init_tampermonkey(); module2.exports = Reader2; var util = require_minimal(); var BufferReader; var LongBits = util.LongBits; var utf8 = util.utf8; function indexOutOfRange(reader, writeLength) { return RangeError("index out of range: " + reader.pos + " + " + (writeLength || 1) + " > " + reader.len); } function Reader2(buffer) { this.buf = buffer; this.pos = 0; this.len = buffer.length; } var create_array = typeof Uint8Array !== "undefined" ? function create_typed_array(buffer) { if (buffer instanceof Uint8Array || Array.isArray(buffer)) return new Reader2(buffer); throw Error("illegal buffer"); } : function create_array2(buffer) { if (Array.isArray(buffer)) return new Reader2(buffer); throw Error("illegal buffer"); }; var create = function create2() { return util.Buffer ? function create_buffer_setup(buffer) { return (Reader2.create = function create_buffer(buffer2) { return util.Buffer.isBuffer(buffer2) ? new BufferReader(buffer2) : create_array(buffer2); })(buffer); } : create_array; }; Reader2.create = create(); Reader2.prototype._slice = util.Array.prototype.subarray || /* istanbul ignore next */ util.Array.prototype.slice; Reader2.prototype.uint32 = /* @__PURE__ */ function read_uint32_setup() { var value = 4294967295; return function read_uint32() { value = (this.buf[this.pos] & 127) >>> 0; if (this.buf[this.pos++] < 128) return value; value = (value | (this.buf[this.pos] & 127) << 7) >>> 0; if (this.buf[this.pos++] < 128) return value; value = (value | (this.buf[this.pos] & 127) << 14) >>> 0; if (this.buf[this.pos++] < 128) return value; value = (value | (this.buf[this.pos] & 127) << 21) >>> 0; if (this.buf[this.pos++] < 128) return value; value = (value | (this.buf[this.pos] & 15) << 28) >>> 0; if (this.buf[this.pos++] < 128) return value; if ((this.pos += 5) > this.len) { this.pos = this.len; throw indexOutOfRange(this, 10); } return value; }; }(); Reader2.prototype.int32 = function read_int32() { return this.uint32() | 0; }; Reader2.prototype.sint32 = function read_sint32() { var value = this.uint32(); return value >>> 1 ^ -(value & 1) | 0; }; function readLongVarint() { var bits2 = new LongBits(0, 0); var i = 0; if (this.len - this.pos > 4) { for (; i < 4; ++i) { bits2.lo = (bits2.lo | (this.buf[this.pos] & 127) << i * 7) >>> 0; if (this.buf[this.pos++] < 128) return bits2; } bits2.lo = (bits2.lo | (this.buf[this.pos] & 127) << 28) >>> 0; bits2.hi = (bits2.hi | (this.buf[this.pos] & 127) >> 4) >>> 0; if (this.buf[this.pos++] < 128) return bits2; i = 0; } else { for (; i < 3; ++i) { if (this.pos >= this.len) throw indexOutOfRange(this); bits2.lo = (bits2.lo | (this.buf[this.pos] & 127) << i * 7) >>> 0; if (this.buf[this.pos++] < 128) return bits2; } bits2.lo = (bits2.lo | (this.buf[this.pos++] & 127) << i * 7) >>> 0; return bits2; } if (this.len - this.pos > 4) { for (; i < 5; ++i) { bits2.hi = (bits2.hi | (this.buf[this.pos] & 127) << i * 7 + 3) >>> 0; if (this.buf[this.pos++] < 128) return bits2; } } else { for (; i < 5; ++i) { if (this.pos >= this.len) throw indexOutOfRange(this); bits2.hi = (bits2.hi | (this.buf[this.pos] & 127) << i * 7 + 3) >>> 0; if (this.buf[this.pos++] < 128) return bits2; } } throw Error("invalid varint encoding"); } Reader2.prototype.bool = function read_bool() { return this.uint32() !== 0; }; function readFixed32_end(buf, end) { return (buf[end - 4] | buf[end - 3] << 8 | buf[end - 2] << 16 | buf[end - 1] << 24) >>> 0; } Reader2.prototype.fixed32 = function read_fixed32() { if (this.pos + 4 > this.len) throw indexOutOfRange(this, 4); return readFixed32_end(this.buf, this.pos += 4); }; Reader2.prototype.sfixed32 = function read_sfixed32() { if (this.pos + 4 > this.len) throw indexOutOfRange(this, 4); return readFixed32_end(this.buf, this.pos += 4) | 0; }; function readFixed64() { if (this.pos + 8 > this.len) throw indexOutOfRange(this, 8); return new LongBits(readFixed32_end(this.buf, this.pos += 4), readFixed32_end(this.buf, this.pos += 4)); } Reader2.prototype.float = function read_float() { if (this.pos + 4 > this.len) throw indexOutOfRange(this, 4); var value = util.float.readFloatLE(this.buf, this.pos); this.pos += 4; return value; }; Reader2.prototype.double = function read_double() { if (this.pos + 8 > this.len) throw indexOutOfRange(this, 4); var value = util.float.readDoubleLE(this.buf, this.pos); this.pos += 8; return value; }; Reader2.prototype.bytes = function read_bytes() { var length2 = this.uint32(), start = this.pos, end = this.pos + length2; if (end > this.len) throw indexOutOfRange(this, length2); this.pos += length2; if (Array.isArray(this.buf)) return this.buf.slice(start, end); if (start === end) { var nativeBuffer = util.Buffer; return nativeBuffer ? nativeBuffer.alloc(0) : new this.buf.constructor(0); } return this._slice.call(this.buf, start, end); }; Reader2.prototype.string = function read_string() { var bytes = this.bytes(); return utf8.read(bytes, 0, bytes.length); }; Reader2.prototype.skip = function skip(length2) { if (typeof length2 === "number") { if (this.pos + length2 > this.len) throw indexOutOfRange(this, length2); this.pos += length2; } else { do { if (this.pos >= this.len) throw indexOutOfRange(this); } while (this.buf[this.pos++] & 128); } return this; }; Reader2.prototype.skipType = function(wireType) { switch (wireType) { case 0: this.skip(); break; case 1: this.skip(8); break; case 2: this.skip(this.uint32()); break; case 3: while ((wireType = this.uint32() & 7) !== 4) { this.skipType(wireType); } break; case 5: this.skip(4); break; /* istanbul ignore next */ default: throw Error("invalid wire type " + wireType + " at offset " + this.pos); } return this; }; Reader2._configure = function(BufferReader_) { BufferReader = BufferReader_; Reader2.create = create(); BufferReader._configure(); var fn = util.Long ? "toLong" : ( /* istanbul ignore next */ "toNumber" ); util.merge(Reader2.prototype, { int64: function read_int64() { return readLongVarint.call(this)[fn](false); }, uint64: function read_uint64() { return readLongVarint.call(this)[fn](true); }, sint64: function read_sint64() { return readLongVarint.call(this).zzDecode()[fn](false); }, fixed64: function read_fixed64() { return readFixed64.call(this)[fn](true); }, sfixed64: function read_sfixed64() { return readFixed64.call(this)[fn](false); } }); }; } }); // node_modules/protobufjs/src/reader_buffer.js var require_reader_buffer = __commonJS({ "node_modules/protobufjs/src/reader_buffer.js"(exports2, module2) { "use strict"; init_tampermonkey(); module2.exports = BufferReader; var Reader2 = require_reader(); (BufferReader.prototype = Object.create(Reader2.prototype)).constructor = BufferReader; var util = require_minimal(); function BufferReader(buffer) { Reader2.call(this, buffer); } BufferReader._configure = function() { if (util.Buffer) BufferReader.prototype._slice = util.Buffer.prototype.slice; }; BufferReader.prototype.string = function read_string_buffer() { var len = this.uint32(); return this.buf.utf8Slice ? this.buf.utf8Slice(this.pos, this.pos = Math.min(this.pos + len, this.len)) : this.buf.toString("utf-8", this.pos, this.pos = Math.min(this.pos + len, this.len)); }; BufferReader._configure(); } }); // node_modules/protobufjs/src/rpc/service.js var require_service = __commonJS({ "node_modules/protobufjs/src/rpc/service.js"(exports2, module2) { "use strict"; init_tampermonkey(); module2.exports = Service; var util = require_minimal(); (Service.prototype = Object.create(util.EventEmitter.prototype)).constructor = Service; function Service(rpcImpl, requestDelimited, responseDelimited) { if (typeof rpcImpl !== "function") throw TypeError("rpcImpl must be a function"); util.EventEmitter.call(this); this.rpcImpl = rpcImpl; this.requestDelimited = Boolean(requestDelimited); this.responseDelimited = Boolean(responseDelimited); } Service.prototype.rpcCall = function rpcCall(method, requestCtor, responseCtor, request, callback) { if (!request) throw TypeError("request must be specified"); var self2 = this; if (!callback) return util.asPromise(rpcCall, self2, method, requestCtor, responseCtor, request); if (!self2.rpcImpl) { setTimeout(function() { callback(Error("already ended")); }, 0); return void 0; } try { return self2.rpcImpl( method, requestCtor[self2.requestDelimited ? "encodeDelimited" : "encode"](request).finish(), function rpcCallback(err2, response) { if (err2) { self2.emit("error", err2, method); return callback(err2); } if (response === null) { self2.end( /* endedByRPC */ true ); return void 0; } if (!(response instanceof responseCtor)) { try { response = responseCtor[self2.responseDelimited ? "decodeDelimited" : "decode"](response); } catch (err3) { self2.emit("error", err3, method); return callback(err3); } } self2.emit("data", response, method); return callback(null, response); } ); } catch (err2) { self2.emit("error", err2, method); setTimeout(function() { callback(err2); }, 0); return void 0; } }; Service.prototype.end = function end(endedByRPC) { if (this.rpcImpl) { if (!endedByRPC) this.rpcImpl(null, null, null); this.rpcImpl = null; this.emit("end").off(); } return this; }; } }); // node_modules/protobufjs/src/rpc.js var require_rpc = __commonJS({ "node_modules/protobufjs/src/rpc.js"(exports2) { "use strict"; init_tampermonkey(); var rpc = exports2; rpc.Service = require_service(); } }); // node_modules/protobufjs/src/roots.js var require_roots = __commonJS({ "node_modules/protobufjs/src/roots.js"(exports2, module2) { "use strict"; init_tampermonkey(); module2.exports = {}; } }); // node_modules/protobufjs/src/index-minimal.js var require_index_minimal = __commonJS({ "node_modules/protobufjs/src/index-minimal.js"(exports2) { "use strict"; init_tampermonkey(); var protobuf = exports2; protobuf.build = "minimal"; protobuf.Writer = require_writer(); protobuf.BufferWriter = require_writer_buffer(); protobuf.Reader = require_reader(); protobuf.BufferReader = require_reader_buffer(); protobuf.util = require_minimal(); protobuf.rpc = require_rpc(); protobuf.roots = require_roots(); protobuf.configure = configure; function configure() { protobuf.util._configure(); protobuf.Writer._configure(protobuf.BufferWriter); protobuf.Reader._configure(protobuf.BufferReader); } configure(); } }); // node_modules/@protobufjs/codegen/index.js var require_codegen = __commonJS({ "node_modules/@protobufjs/codegen/index.js"(exports2, module2) { "use strict"; init_tampermonkey(); module2.exports = codegen; function codegen(functionParams, functionName) { if (typeof functionParams === "string") { functionName = functionParams; functionParams = void 0; } var body = []; function Codegen(formatStringOrScope) { if (typeof formatStringOrScope !== "string") { var source = toString2(); if (codegen.verbose) console.log("codegen: " + source); source = "return " + source; if (formatStringOrScope) { var scopeKeys = Object.keys(formatStringOrScope), scopeParams = new Array(scopeKeys.length + 1), scopeValues = new Array(scopeKeys.length), scopeOffset = 0; while (scopeOffset < scopeKeys.length) { scopeParams[scopeOffset] = scopeKeys[scopeOffset]; scopeValues[scopeOffset] = formatStringOrScope[scopeKeys[scopeOffset++]]; } scopeParams[scopeOffset] = source; return Function.apply(null, scopeParams).apply(null, scopeValues); } return Function(source)(); } var formatParams = new Array(arguments.length - 1), formatOffset = 0; while (formatOffset < formatParams.length) formatParams[formatOffset] = arguments[++formatOffset]; formatOffset = 0; formatStringOrScope = formatStringOrScope.replace(/%([%dfijs])/g, function replace(\$0, \$1) { var value = formatParams[formatOffset++]; switch (\$1) { case "d": case "f": return String(Number(value)); case "i": return String(Math.floor(value)); case "j": return JSON.stringify(value); case "s": return String(value); } return "%"; }); if (formatOffset !== formatParams.length) throw Error("parameter count mismatch"); body.push(formatStringOrScope); return Codegen; } function toString2(functionNameOverride) { return "function " + (functionNameOverride || functionName || "") + "(" + (functionParams && functionParams.join(",") || "") + "){\\n " + body.join("\\n ") + "\\n}"; } Codegen.toString = toString2; return Codegen; } codegen.verbose = false; } }); // node_modules/@protobufjs/fetch/index.js var require_fetch = __commonJS({ "node_modules/@protobufjs/fetch/index.js"(exports2, module2) { "use strict"; init_tampermonkey(); module2.exports = fetch2; var asPromise = require_aspromise(); var inquire2 = require_inquire(); var fs = inquire2("fs"); function fetch2(filename, options, callback) { if (typeof options === "function") { callback = options; options = {}; } else if (!options) options = {}; if (!callback) return asPromise(fetch2, this, filename, options); if (!options.xhr && fs && fs.readFile) return fs.readFile(filename, function fetchReadFileCallback(err2, contents) { return err2 && typeof XMLHttpRequest !== "undefined" ? fetch2.xhr(filename, options, callback) : err2 ? callback(err2) : callback(null, options.binary ? contents : contents.toString("utf8")); }); return fetch2.xhr(filename, options, callback); } fetch2.xhr = function fetch_xhr(filename, options, callback) { var xhr = new XMLHttpRequest(); xhr.onreadystatechange = function fetchOnReadyStateChange() { if (xhr.readyState !== 4) return void 0; if (xhr.status !== 0 && xhr.status !== 200) return callback(Error("status " + xhr.status)); if (options.binary) { var buffer = xhr.response; if (!buffer) { buffer = []; for (var i = 0; i < xhr.responseText.length; ++i) buffer.push(xhr.responseText.charCodeAt(i) & 255); } return callback(null, typeof Uint8Array !== "undefined" ? new Uint8Array(buffer) : buffer); } return callback(null, xhr.responseText); }; if (options.binary) { if ("overrideMimeType" in xhr) xhr.overrideMimeType("text/plain; charset=x-user-defined"); xhr.responseType = "arraybuffer"; } xhr.open("GET", filename); xhr.send(); }; } }); // node_modules/@protobufjs/path/index.js var require_path = __commonJS({ "node_modules/@protobufjs/path/index.js"(exports2) { "use strict"; init_tampermonkey(); var path = exports2; var isAbsolute = ( /** * Tests if the specified path is absolute. * @param {string} path Path to test * @returns {boolean} \`true\` if path is absolute */ path.isAbsolute = function isAbsolute2(path2) { return /^(?:\\/|\\w+:)/.test(path2); } ); var normalize = ( /** * Normalizes the specified path. * @param {string} path Path to normalize * @returns {string} Normalized path */ path.normalize = function normalize2(path2) { path2 = path2.replace(/\\\\/g, "/").replace(/\\/{2,}/g, "/"); var parts = path2.split("/"), absolute = isAbsolute(path2), prefix = ""; if (absolute) prefix = parts.shift() + "/"; for (var i = 0; i < parts.length; ) { if (parts[i] === "..") { if (i > 0 && parts[i - 1] !== "..") parts.splice(--i, 2); else if (absolute) parts.splice(i, 1); else ++i; } else if (parts[i] === ".") parts.splice(i, 1); else ++i; } return prefix + parts.join("/"); } ); path.resolve = function resolve(originPath, includePath, alreadyNormalized) { if (!alreadyNormalized) includePath = normalize(includePath); if (isAbsolute(includePath)) return includePath; if (!alreadyNormalized) originPath = normalize(originPath); return (originPath = originPath.replace(/(?:\\/|^)[^/]+\$/, "")).length ? normalize(originPath + "/" + includePath) : includePath; }; } }); // node_modules/protobufjs/src/types.js var require_types = __commonJS({ "node_modules/protobufjs/src/types.js"(exports2) { "use strict"; init_tampermonkey(); var types = exports2; var util = require_util(); var s = [ "double", // 0 "float", // 1 "int32", // 2 "uint32", // 3 "sint32", // 4 "fixed32", // 5 "sfixed32", // 6 "int64", // 7 "uint64", // 8 "sint64", // 9 "fixed64", // 10 "sfixed64", // 11 "bool", // 12 "string", // 13 "bytes" // 14 ]; function bake(values, offset3) { var i = 0, o = {}; offset3 |= 0; while (i < values.length) o[s[i + offset3]] = values[i++]; return o; } types.basic = bake([ /* double */ 1, /* float */ 5, /* int32 */ 0, /* uint32 */ 0, /* sint32 */ 0, /* fixed32 */ 5, /* sfixed32 */ 5, /* int64 */ 0, /* uint64 */ 0, /* sint64 */ 0, /* fixed64 */ 1, /* sfixed64 */ 1, /* bool */ 0, /* string */ 2, /* bytes */ 2 ]); types.defaults = bake([ /* double */ 0, /* float */ 0, /* int32 */ 0, /* uint32 */ 0, /* sint32 */ 0, /* fixed32 */ 0, /* sfixed32 */ 0, /* int64 */ 0, /* uint64 */ 0, /* sint64 */ 0, /* fixed64 */ 0, /* sfixed64 */ 0, /* bool */ false, /* string */ "", /* bytes */ util.emptyArray, /* message */ null ]); types.long = bake([ /* int64 */ 0, /* uint64 */ 0, /* sint64 */ 0, /* fixed64 */ 1, /* sfixed64 */ 1 ], 7); types.mapKey = bake([ /* int32 */ 0, /* uint32 */ 0, /* sint32 */ 0, /* fixed32 */ 5, /* sfixed32 */ 5, /* int64 */ 0, /* uint64 */ 0, /* sint64 */ 0, /* fixed64 */ 1, /* sfixed64 */ 1, /* bool */ 0, /* string */ 2 ], 2); types.packed = bake([ /* double */ 1, /* float */ 5, /* int32 */ 0, /* uint32 */ 0, /* sint32 */ 0, /* fixed32 */ 5, /* sfixed32 */ 5, /* int64 */ 0, /* uint64 */ 0, /* sint64 */ 0, /* fixed64 */ 1, /* sfixed64 */ 1, /* bool */ 0 ]); } }); // node_modules/protobufjs/src/field.js var require_field = __commonJS({ "node_modules/protobufjs/src/field.js"(exports2, module2) { "use strict"; init_tampermonkey(); module2.exports = Field2; var ReflectionObject2 = require_object(); ((Field2.prototype = Object.create(ReflectionObject2.prototype)).constructor = Field2).className = "Field"; var Enum = require_enum(); var types = require_types(); var util = require_util(); var Type3; var ruleRe = /^required|optional|repeated\$/; Field2.fromJSON = function fromJSON(name, json) { return new Field2(name, json.id, json.type, json.rule, json.extend, json.options, json.comment); }; function Field2(name, id, type, rule, extend, options, comment) { if (util.isObject(rule)) { comment = extend; options = rule; rule = extend = void 0; } else if (util.isObject(extend)) { comment = options; options = extend; extend = void 0; } ReflectionObject2.call(this, name, options); if (!util.isInteger(id) || id < 0) throw TypeError("id must be a non-negative integer"); if (!util.isString(type)) throw TypeError("type must be a string"); if (rule !== void 0 && !ruleRe.test(rule = rule.toString().toLowerCase())) throw TypeError("rule must be a string rule"); if (extend !== void 0 && !util.isString(extend)) throw TypeError("extend must be a string"); if (rule === "proto3_optional") { rule = "optional"; } this.rule = rule && rule !== "optional" ? rule : void 0; this.type = type; this.id = id; this.extend = extend || void 0; this.required = rule === "required"; this.optional = !this.required; this.repeated = rule === "repeated"; this.map = false; this.message = null; this.partOf = null; this.typeDefault = null; this.defaultValue = null; this.long = util.Long ? types.long[type] !== void 0 : ( /* istanbul ignore next */ false ); this.bytes = type === "bytes"; this.resolvedType = null; this.extensionField = null; this.declaringField = null; this._packed = null; this.comment = comment; } Object.defineProperty(Field2.prototype, "packed", { get: function() { if (this._packed === null) this._packed = this.getOption("packed") !== false; return this._packed; } }); Field2.prototype.setOption = function setOption(name, value, ifNotSet) { if (name === "packed") this._packed = null; return ReflectionObject2.prototype.setOption.call(this, name, value, ifNotSet); }; Field2.prototype.toJSON = function toJSON(toJSONOptions) { var keepComments = toJSONOptions ? Boolean(toJSONOptions.keepComments) : false; return util.toObject([ "rule", this.rule !== "optional" && this.rule || void 0, "type", this.type, "id", this.id, "extend", this.extend, "options", this.options, "comment", keepComments ? this.comment : void 0 ]); }; Field2.prototype.resolve = function resolve() { if (this.resolved) return this; if ((this.typeDefault = types.defaults[this.type]) === void 0) { this.resolvedType = (this.declaringField ? this.declaringField.parent : this.parent).lookupTypeOrEnum(this.type); if (this.resolvedType instanceof Type3) this.typeDefault = null; else this.typeDefault = this.resolvedType.values[Object.keys(this.resolvedType.values)[0]]; } else if (this.options && this.options.proto3_optional) { this.typeDefault = null; } if (this.options && this.options["default"] != null) { this.typeDefault = this.options["default"]; if (this.resolvedType instanceof Enum && typeof this.typeDefault === "string") this.typeDefault = this.resolvedType.values[this.typeDefault]; } if (this.options) { if (this.options.packed === true || this.options.packed !== void 0 && this.resolvedType && !(this.resolvedType instanceof Enum)) delete this.options.packed; if (!Object.keys(this.options).length) this.options = void 0; } if (this.long) { this.typeDefault = util.Long.fromNumber(this.typeDefault, this.type.charAt(0) === "u"); if (Object.freeze) Object.freeze(this.typeDefault); } else if (this.bytes && typeof this.typeDefault === "string") { var buf; if (util.base64.test(this.typeDefault)) util.base64.decode(this.typeDefault, buf = util.newBuffer(util.base64.length(this.typeDefault)), 0); else util.utf8.write(this.typeDefault, buf = util.newBuffer(util.utf8.length(this.typeDefault)), 0); this.typeDefault = buf; } if (this.map) this.defaultValue = util.emptyObject; else if (this.repeated) this.defaultValue = util.emptyArray; else this.defaultValue = this.typeDefault; if (this.parent instanceof Type3) this.parent.ctor.prototype[this.name] = this.defaultValue; return ReflectionObject2.prototype.resolve.call(this); }; Field2.d = function decorateField(fieldId, fieldType, fieldRule, defaultValue) { if (typeof fieldType === "function") fieldType = util.decorateType(fieldType).name; else if (fieldType && typeof fieldType === "object") fieldType = util.decorateEnum(fieldType).name; return function fieldDecorator(prototype, fieldName) { util.decorateType(prototype.constructor).add(new Field2(fieldName, fieldId, fieldType, fieldRule, { "default": defaultValue })); }; }; Field2._configure = function configure(Type_) { Type3 = Type_; }; } }); // node_modules/protobufjs/src/oneof.js var require_oneof = __commonJS({ "node_modules/protobufjs/src/oneof.js"(exports2, module2) { "use strict"; init_tampermonkey(); module2.exports = OneOf2; var ReflectionObject2 = require_object(); ((OneOf2.prototype = Object.create(ReflectionObject2.prototype)).constructor = OneOf2).className = "OneOf"; var Field2 = require_field(); var util = require_util(); function OneOf2(name, fieldNames, options, comment) { if (!Array.isArray(fieldNames)) { options = fieldNames; fieldNames = void 0; } ReflectionObject2.call(this, name, options); if (!(fieldNames === void 0 || Array.isArray(fieldNames))) throw TypeError("fieldNames must be an Array"); this.oneof = fieldNames || []; this.fieldsArray = []; this.comment = comment; } OneOf2.fromJSON = function fromJSON(name, json) { return new OneOf2(name, json.oneof, json.options, json.comment); }; OneOf2.prototype.toJSON = function toJSON(toJSONOptions) { var keepComments = toJSONOptions ? Boolean(toJSONOptions.keepComments) : false; return util.toObject([ "options", this.options, "oneof", this.oneof, "comment", keepComments ? this.comment : void 0 ]); }; function addFieldsToParent(oneof) { if (oneof.parent) { for (var i = 0; i < oneof.fieldsArray.length; ++i) if (!oneof.fieldsArray[i].parent) oneof.parent.add(oneof.fieldsArray[i]); } } OneOf2.prototype.add = function add(field) { if (!(field instanceof Field2)) throw TypeError("field must be a Field"); if (field.parent && field.parent !== this.parent) field.parent.remove(field); this.oneof.push(field.name); this.fieldsArray.push(field); field.partOf = this; addFieldsToParent(this); return this; }; OneOf2.prototype.remove = function remove(field) { if (!(field instanceof Field2)) throw TypeError("field must be a Field"); var index = this.fieldsArray.indexOf(field); if (index < 0) throw Error(field + " is not a member of " + this); this.fieldsArray.splice(index, 1); index = this.oneof.indexOf(field.name); if (index > -1) this.oneof.splice(index, 1); field.partOf = null; return this; }; OneOf2.prototype.onAdd = function onAdd(parent) { ReflectionObject2.prototype.onAdd.call(this, parent); var self2 = this; for (var i = 0; i < this.oneof.length; ++i) { var field = parent.get(this.oneof[i]); if (field && !field.partOf) { field.partOf = self2; self2.fieldsArray.push(field); } } addFieldsToParent(this); }; OneOf2.prototype.onRemove = function onRemove(parent) { for (var i = 0, field; i < this.fieldsArray.length; ++i) if ((field = this.fieldsArray[i]).parent) field.parent.remove(field); ReflectionObject2.prototype.onRemove.call(this, parent); }; OneOf2.d = function decorateOneOf() { var fieldNames = new Array(arguments.length), index = 0; while (index < arguments.length) fieldNames[index] = arguments[index++]; return function oneOfDecorator(prototype, oneofName) { util.decorateType(prototype.constructor).add(new OneOf2(oneofName, fieldNames)); Object.defineProperty(prototype, oneofName, { get: util.oneOfGetter(fieldNames), set: util.oneOfSetter(fieldNames) }); }; }; } }); // node_modules/protobufjs/src/namespace.js var require_namespace = __commonJS({ "node_modules/protobufjs/src/namespace.js"(exports2, module2) { "use strict"; init_tampermonkey(); module2.exports = Namespace; var ReflectionObject2 = require_object(); ((Namespace.prototype = Object.create(ReflectionObject2.prototype)).constructor = Namespace).className = "Namespace"; var Field2 = require_field(); var util = require_util(); var OneOf2 = require_oneof(); var Type3; var Service; var Enum; Namespace.fromJSON = function fromJSON(name, json) { return new Namespace(name, json.options).addJSON(json.nested); }; function arrayToJSON(array, toJSONOptions) { if (!(array && array.length)) return void 0; var obj = {}; for (var i = 0; i < array.length; ++i) obj[array[i].name] = array[i].toJSON(toJSONOptions); return obj; } Namespace.arrayToJSON = arrayToJSON; Namespace.isReservedId = function isReservedId(reserved, id) { if (reserved) { for (var i = 0; i < reserved.length; ++i) if (typeof reserved[i] !== "string" && reserved[i][0] <= id && reserved[i][1] > id) return true; } return false; }; Namespace.isReservedName = function isReservedName(reserved, name) { if (reserved) { for (var i = 0; i < reserved.length; ++i) if (reserved[i] === name) return true; } return false; }; function Namespace(name, options) { ReflectionObject2.call(this, name, options); this.nested = void 0; this._nestedArray = null; } function clearCache(namespace) { namespace._nestedArray = null; return namespace; } Object.defineProperty(Namespace.prototype, "nestedArray", { get: function() { return this._nestedArray || (this._nestedArray = util.toArray(this.nested)); } }); Namespace.prototype.toJSON = function toJSON(toJSONOptions) { return util.toObject([ "options", this.options, "nested", arrayToJSON(this.nestedArray, toJSONOptions) ]); }; Namespace.prototype.addJSON = function addJSON(nestedJson) { var ns = this; if (nestedJson) { for (var names = Object.keys(nestedJson), i = 0, nested; i < names.length; ++i) { nested = nestedJson[names[i]]; ns.add( // most to least likely (nested.fields !== void 0 ? Type3.fromJSON : nested.values !== void 0 ? Enum.fromJSON : nested.methods !== void 0 ? Service.fromJSON : nested.id !== void 0 ? Field2.fromJSON : Namespace.fromJSON)(names[i], nested) ); } } return this; }; Namespace.prototype.get = function get(name) { return this.nested && this.nested[name] || null; }; Namespace.prototype.getEnum = function getEnum(name) { if (this.nested && this.nested[name] instanceof Enum) return this.nested[name].values; throw Error("no such enum: " + name); }; Namespace.prototype.add = function add(object) { if (!(object instanceof Field2 && object.extend !== void 0 || object instanceof Type3 || object instanceof OneOf2 || object instanceof Enum || object instanceof Service || object instanceof Namespace)) throw TypeError("object must be a valid nested object"); if (!this.nested) this.nested = {}; else { var prev = this.get(object.name); if (prev) { if (prev instanceof Namespace && object instanceof Namespace && !(prev instanceof Type3 || prev instanceof Service)) { var nested = prev.nestedArray; for (var i = 0; i < nested.length; ++i) object.add(nested[i]); this.remove(prev); if (!this.nested) this.nested = {}; object.setOptions(prev.options, true); } else throw Error("duplicate name '" + object.name + "' in " + this); } } this.nested[object.name] = object; object.onAdd(this); return clearCache(this); }; Namespace.prototype.remove = function remove(object) { if (!(object instanceof ReflectionObject2)) throw TypeError("object must be a ReflectionObject"); if (object.parent !== this) throw Error(object + " is not a member of " + this); delete this.nested[object.name]; if (!Object.keys(this.nested).length) this.nested = void 0; object.onRemove(this); return clearCache(this); }; Namespace.prototype.define = function define(path, json) { if (util.isString(path)) path = path.split("."); else if (!Array.isArray(path)) throw TypeError("illegal path"); if (path && path.length && path[0] === "") throw Error("path must be relative"); var ptr = this; while (path.length > 0) { var part = path.shift(); if (ptr.nested && ptr.nested[part]) { ptr = ptr.nested[part]; if (!(ptr instanceof Namespace)) throw Error("path conflicts with non-namespace objects"); } else ptr.add(ptr = new Namespace(part)); } if (json) ptr.addJSON(json); return ptr; }; Namespace.prototype.resolveAll = function resolveAll() { var nested = this.nestedArray, i = 0; while (i < nested.length) if (nested[i] instanceof Namespace) nested[i++].resolveAll(); else nested[i++].resolve(); return this.resolve(); }; Namespace.prototype.lookup = function lookup(path, filterTypes, parentAlreadyChecked) { if (typeof filterTypes === "boolean") { parentAlreadyChecked = filterTypes; filterTypes = void 0; } else if (filterTypes && !Array.isArray(filterTypes)) filterTypes = [filterTypes]; if (util.isString(path) && path.length) { if (path === ".") return this.root; path = path.split("."); } else if (!path.length) return this; if (path[0] === "") return this.root.lookup(path.slice(1), filterTypes); var found = this.get(path[0]); if (found) { if (path.length === 1) { if (!filterTypes || filterTypes.indexOf(found.constructor) > -1) return found; } else if (found instanceof Namespace && (found = found.lookup(path.slice(1), filterTypes, true))) return found; } else for (var i = 0; i < this.nestedArray.length; ++i) if (this._nestedArray[i] instanceof Namespace && (found = this._nestedArray[i].lookup(path, filterTypes, true))) return found; if (this.parent === null || parentAlreadyChecked) return null; return this.parent.lookup(path, filterTypes); }; Namespace.prototype.lookupType = function lookupType(path) { var found = this.lookup(path, [Type3]); if (!found) throw Error("no such type: " + path); return found; }; Namespace.prototype.lookupEnum = function lookupEnum(path) { var found = this.lookup(path, [Enum]); if (!found) throw Error("no such Enum '" + path + "' in " + this); return found; }; Namespace.prototype.lookupTypeOrEnum = function lookupTypeOrEnum(path) { var found = this.lookup(path, [Type3, Enum]); if (!found) throw Error("no such Type or Enum '" + path + "' in " + this); return found; }; Namespace.prototype.lookupService = function lookupService(path) { var found = this.lookup(path, [Service]); if (!found) throw Error("no such Service '" + path + "' in " + this); return found; }; Namespace._configure = function(Type_, Service_, Enum_) { Type3 = Type_; Service = Service_; Enum = Enum_; }; } }); // node_modules/protobufjs/src/mapfield.js var require_mapfield = __commonJS({ "node_modules/protobufjs/src/mapfield.js"(exports2, module2) { "use strict"; init_tampermonkey(); module2.exports = MapField; var Field2 = require_field(); ((MapField.prototype = Object.create(Field2.prototype)).constructor = MapField).className = "MapField"; var types = require_types(); var util = require_util(); function MapField(name, id, keyType, type, options, comment) { Field2.call(this, name, id, type, void 0, void 0, options, comment); if (!util.isString(keyType)) throw TypeError("keyType must be a string"); this.keyType = keyType; this.resolvedKeyType = null; this.map = true; } MapField.fromJSON = function fromJSON(name, json) { return new MapField(name, json.id, json.keyType, json.type, json.options, json.comment); }; MapField.prototype.toJSON = function toJSON(toJSONOptions) { var keepComments = toJSONOptions ? Boolean(toJSONOptions.keepComments) : false; return util.toObject([ "keyType", this.keyType, "type", this.type, "id", this.id, "extend", this.extend, "options", this.options, "comment", keepComments ? this.comment : void 0 ]); }; MapField.prototype.resolve = function resolve() { if (this.resolved) return this; if (types.mapKey[this.keyType] === void 0) throw Error("invalid key type: " + this.keyType); return Field2.prototype.resolve.call(this); }; MapField.d = function decorateMapField(fieldId, fieldKeyType, fieldValueType) { if (typeof fieldValueType === "function") fieldValueType = util.decorateType(fieldValueType).name; else if (fieldValueType && typeof fieldValueType === "object") fieldValueType = util.decorateEnum(fieldValueType).name; return function mapFieldDecorator(prototype, fieldName) { util.decorateType(prototype.constructor).add(new MapField(fieldName, fieldId, fieldKeyType, fieldValueType)); }; }; } }); // node_modules/protobufjs/src/method.js var require_method = __commonJS({ "node_modules/protobufjs/src/method.js"(exports2, module2) { "use strict"; init_tampermonkey(); module2.exports = Method; var ReflectionObject2 = require_object(); ((Method.prototype = Object.create(ReflectionObject2.prototype)).constructor = Method).className = "Method"; var util = require_util(); function Method(name, type, requestType, responseType, requestStream, responseStream, options, comment, parsedOptions) { if (util.isObject(requestStream)) { options = requestStream; requestStream = responseStream = void 0; } else if (util.isObject(responseStream)) { options = responseStream; responseStream = void 0; } if (!(type === void 0 || util.isString(type))) throw TypeError("type must be a string"); if (!util.isString(requestType)) throw TypeError("requestType must be a string"); if (!util.isString(responseType)) throw TypeError("responseType must be a string"); ReflectionObject2.call(this, name, options); this.type = type || "rpc"; this.requestType = requestType; this.requestStream = requestStream ? true : void 0; this.responseType = responseType; this.responseStream = responseStream ? true : void 0; this.resolvedRequestType = null; this.resolvedResponseType = null; this.comment = comment; this.parsedOptions = parsedOptions; } Method.fromJSON = function fromJSON(name, json) { return new Method(name, json.type, json.requestType, json.responseType, json.requestStream, json.responseStream, json.options, json.comment, json.parsedOptions); }; Method.prototype.toJSON = function toJSON(toJSONOptions) { var keepComments = toJSONOptions ? Boolean(toJSONOptions.keepComments) : false; return util.toObject([ "type", this.type !== "rpc" && /* istanbul ignore next */ this.type || void 0, "requestType", this.requestType, "requestStream", this.requestStream, "responseType", this.responseType, "responseStream", this.responseStream, "options", this.options, "comment", keepComments ? this.comment : void 0, "parsedOptions", this.parsedOptions ]); }; Method.prototype.resolve = function resolve() { if (this.resolved) return this; this.resolvedRequestType = this.parent.lookupType(this.requestType); this.resolvedResponseType = this.parent.lookupType(this.responseType); return ReflectionObject2.prototype.resolve.call(this); }; } }); // node_modules/protobufjs/src/service.js var require_service2 = __commonJS({ "node_modules/protobufjs/src/service.js"(exports2, module2) { "use strict"; init_tampermonkey(); module2.exports = Service; var Namespace = require_namespace(); ((Service.prototype = Object.create(Namespace.prototype)).constructor = Service).className = "Service"; var Method = require_method(); var util = require_util(); var rpc = require_rpc(); function Service(name, options) { Namespace.call(this, name, options); this.methods = {}; this._methodsArray = null; } Service.fromJSON = function fromJSON(name, json) { var service = new Service(name, json.options); if (json.methods) for (var names = Object.keys(json.methods), i = 0; i < names.length; ++i) service.add(Method.fromJSON(names[i], json.methods[names[i]])); if (json.nested) service.addJSON(json.nested); service.comment = json.comment; return service; }; Service.prototype.toJSON = function toJSON(toJSONOptions) { var inherited = Namespace.prototype.toJSON.call(this, toJSONOptions); var keepComments = toJSONOptions ? Boolean(toJSONOptions.keepComments) : false; return util.toObject([ "options", inherited && inherited.options || void 0, "methods", Namespace.arrayToJSON(this.methodsArray, toJSONOptions) || /* istanbul ignore next */ {}, "nested", inherited && inherited.nested || void 0, "comment", keepComments ? this.comment : void 0 ]); }; Object.defineProperty(Service.prototype, "methodsArray", { get: function() { return this._methodsArray || (this._methodsArray = util.toArray(this.methods)); } }); function clearCache(service) { service._methodsArray = null; return service; } Service.prototype.get = function get(name) { return this.methods[name] || Namespace.prototype.get.call(this, name); }; Service.prototype.resolveAll = function resolveAll() { var methods = this.methodsArray; for (var i = 0; i < methods.length; ++i) methods[i].resolve(); return Namespace.prototype.resolve.call(this); }; Service.prototype.add = function add(object) { if (this.get(object.name)) throw Error("duplicate name '" + object.name + "' in " + this); if (object instanceof Method) { this.methods[object.name] = object; object.parent = this; return clearCache(this); } return Namespace.prototype.add.call(this, object); }; Service.prototype.remove = function remove(object) { if (object instanceof Method) { if (this.methods[object.name] !== object) throw Error(object + " is not a member of " + this); delete this.methods[object.name]; object.parent = null; return clearCache(this); } return Namespace.prototype.remove.call(this, object); }; Service.prototype.create = function create(rpcImpl, requestDelimited, responseDelimited) { var rpcService = new rpc.Service(rpcImpl, requestDelimited, responseDelimited); for (var i = 0, method; i < /* initializes */ this.methodsArray.length; ++i) { var methodName = util.lcFirst((method = this._methodsArray[i]).resolve().name).replace(/[^\$\\w_]/g, ""); rpcService[methodName] = util.codegen(["r", "c"], util.isReserved(methodName) ? methodName + "_" : methodName)("return this.rpcCall(m,q,s,r,c)")({ m: method, q: method.resolvedRequestType.ctor, s: method.resolvedResponseType.ctor }); } return rpcService; }; } }); // node_modules/protobufjs/src/message.js var require_message = __commonJS({ "node_modules/protobufjs/src/message.js"(exports2, module2) { "use strict"; init_tampermonkey(); module2.exports = Message2; var util = require_minimal(); function Message2(properties) { if (properties) for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) this[keys[i]] = properties[keys[i]]; } Message2.create = function create(properties) { return this.\$type.create(properties); }; Message2.encode = function encode(message, writer) { return this.\$type.encode(message, writer); }; Message2.encodeDelimited = function encodeDelimited(message, writer) { return this.\$type.encodeDelimited(message, writer); }; Message2.decode = function decode(reader) { return this.\$type.decode(reader); }; Message2.decodeDelimited = function decodeDelimited(reader) { return this.\$type.decodeDelimited(reader); }; Message2.verify = function verify(message) { return this.\$type.verify(message); }; Message2.fromObject = function fromObject(object) { return this.\$type.fromObject(object); }; Message2.toObject = function toObject2(message, options) { return this.\$type.toObject(message, options); }; Message2.prototype.toJSON = function toJSON() { return this.\$type.toObject(this, util.toJSONOptions); }; } }); // node_modules/protobufjs/src/decoder.js var require_decoder = __commonJS({ "node_modules/protobufjs/src/decoder.js"(exports2, module2) { "use strict"; init_tampermonkey(); module2.exports = decoder; var Enum = require_enum(); var types = require_types(); var util = require_util(); function missing(field) { return "missing required '" + field.name + "'"; } function decoder(mtype) { var gen = util.codegen(["r", "l"], mtype.name + "\$decode")("if(!(r instanceof Reader))")("r=Reader.create(r)")("var c=l===undefined?r.len:r.pos+l,m=new this.ctor" + (mtype.fieldsArray.filter(function(field2) { return field2.map; }).length ? ",k,value" : ""))("while(r.pos>>3){"); var i = 0; for (; i < /* initializes */ mtype.fieldsArray.length; ++i) { var field = mtype._fieldsArray[i].resolve(), type = field.resolvedType instanceof Enum ? "int32" : field.type, ref = "m" + util.safeProp(field.name); gen("case %i: {", field.id); if (field.map) { gen("if(%s===util.emptyObject)", ref)("%s={}", ref)("var c2 = r.uint32()+r.pos"); if (types.defaults[field.keyType] !== void 0) gen("k=%j", types.defaults[field.keyType]); else gen("k=null"); if (types.defaults[type] !== void 0) gen("value=%j", types.defaults[type]); else gen("value=null"); gen("while(r.pos>>3){")("case 1: k=r.%s(); break", field.keyType)("case 2:"); if (types.basic[type] === void 0) gen("value=types[%i].decode(r,r.uint32())", i); else gen("value=r.%s()", type); gen("break")("default:")("r.skipType(tag2&7)")("break")("}")("}"); if (types.long[field.keyType] !== void 0) gen('%s[typeof k==="object"?util.longToHash(k):k]=value', ref); else gen("%s[k]=value", ref); } else if (field.repeated) { gen("if(!(%s&&%s.length))", ref, ref)("%s=[]", ref); if (types.packed[type] !== void 0) gen("if((t&7)===2){")("var c2=r.uint32()+r.pos")("while(r.pos>>0", prop, prop); break; case "int32": case "sint32": case "sfixed32": gen("m%s=d%s|0", prop, prop); break; case "uint64": isUnsigned = true; // eslint-disable-next-line no-fallthrough case "int64": case "sint64": case "fixed64": case "sfixed64": gen("if(util.Long)")("(m%s=util.Long.fromValue(d%s)).unsigned=%j", prop, prop, isUnsigned)('else if(typeof d%s==="string")', prop)("m%s=parseInt(d%s,10)", prop, prop)('else if(typeof d%s==="number")', prop)("m%s=d%s", prop, prop)('else if(typeof d%s==="object")', prop)("m%s=new util.LongBits(d%s.low>>>0,d%s.high>>>0).toNumber(%s)", prop, prop, prop, isUnsigned ? "true" : ""); break; case "bytes": gen('if(typeof d%s==="string")', prop)("util.base64.decode(d%s,m%s=util.newBuffer(util.base64.length(d%s)),0)", prop, prop, prop)("else if(d%s.length >= 0)", prop)("m%s=d%s", prop, prop); break; case "string": gen("m%s=String(d%s)", prop, prop); break; case "bool": gen("m%s=Boolean(d%s)", prop, prop); break; } } return gen; } converter.fromObject = function fromObject(mtype) { var fields = mtype.fieldsArray; var gen = util.codegen(["d"], mtype.name + "\$fromObject")("if(d instanceof this.ctor)")("return d"); if (!fields.length) return gen("return new this.ctor"); gen("var m=new this.ctor"); for (var i = 0; i < fields.length; ++i) { var field = fields[i].resolve(), prop = util.safeProp(field.name); if (field.map) { gen("if(d%s){", prop)('if(typeof d%s!=="object")', prop)("throw TypeError(%j)", field.fullName + ": object expected")("m%s={}", prop)("for(var ks=Object.keys(d%s),i=0;i>>0,m%s.high>>>0).toNumber(%s):m%s", prop, prop, prop, prop, isUnsigned ? "true" : "", prop); break; case "bytes": gen("d%s=o.bytes===String?util.base64.encode(m%s,0,m%s.length):o.bytes===Array?Array.prototype.slice.call(m%s):m%s", prop, prop, prop, prop, prop); break; default: gen("d%s=m%s", prop, prop); break; } } return gen; } converter.toObject = function toObject2(mtype) { var fields = mtype.fieldsArray.slice().sort(util.compareFieldsById); if (!fields.length) return util.codegen()("return {}"); var gen = util.codegen(["m", "o"], mtype.name + "\$toObject")("if(!o)")("o={}")("var d={}"); var repeatedFields = [], mapFields = [], normalFields = [], i = 0; for (; i < fields.length; ++i) if (!fields[i].partOf) (fields[i].resolve().repeated ? repeatedFields : fields[i].map ? mapFields : normalFields).push(fields[i]); if (repeatedFields.length) { gen("if(o.arrays||o.defaults){"); for (i = 0; i < repeatedFields.length; ++i) gen("d%s=[]", util.safeProp(repeatedFields[i].name)); gen("}"); } if (mapFields.length) { gen("if(o.objects||o.defaults){"); for (i = 0; i < mapFields.length; ++i) gen("d%s={}", util.safeProp(mapFields[i].name)); gen("}"); } if (normalFields.length) { gen("if(o.defaults){"); for (i = 0; i < normalFields.length; ++i) { var field = normalFields[i], prop = util.safeProp(field.name); if (field.resolvedType instanceof Enum) gen("d%s=o.enums===String?%j:%j", prop, field.resolvedType.valuesById[field.typeDefault], field.typeDefault); else if (field.long) gen("if(util.Long){")("var n=new util.Long(%i,%i,%j)", field.typeDefault.low, field.typeDefault.high, field.typeDefault.unsigned)("d%s=o.longs===String?n.toString():o.longs===Number?n.toNumber():n", prop)("}else")("d%s=o.longs===String?%j:%i", prop, field.typeDefault.toString(), field.typeDefault.toNumber()); else if (field.bytes) { var arrayDefault = "[" + Array.prototype.slice.call(field.typeDefault).join(",") + "]"; gen("if(o.bytes===String)d%s=%j", prop, String.fromCharCode.apply(String, field.typeDefault))("else{")("d%s=%s", prop, arrayDefault)("if(o.bytes!==Array)d%s=util.newBuffer(d%s)", prop, prop)("}"); } else gen("d%s=%j", prop, field.typeDefault); } gen("}"); } var hasKs2 = false; for (i = 0; i < fields.length; ++i) { var field = fields[i], index = mtype._fieldsArray.indexOf(field), prop = util.safeProp(field.name); if (field.map) { if (!hasKs2) { hasKs2 = true; gen("var ks2"); } gen("if(m%s&&(ks2=Object.keys(m%s)).length){", prop, prop)("d%s={}", prop)("for(var j=0;j} * @readonly */ fieldsById: { get: function() { if (this._fieldsById) return this._fieldsById; this._fieldsById = {}; for (var names = Object.keys(this.fields), i = 0; i < names.length; ++i) { var field = this.fields[names[i]], id = field.id; if (this._fieldsById[id]) throw Error("duplicate id " + id + " in " + this); this._fieldsById[id] = field; } return this._fieldsById; } }, /** * Fields of this message as an array for iteration. * @name Type#fieldsArray * @type {Field[]} * @readonly */ fieldsArray: { get: function() { return this._fieldsArray || (this._fieldsArray = util.toArray(this.fields)); } }, /** * Oneofs of this message as an array for iteration. * @name Type#oneofsArray * @type {OneOf[]} * @readonly */ oneofsArray: { get: function() { return this._oneofsArray || (this._oneofsArray = util.toArray(this.oneofs)); } }, /** * The registered constructor, if any registered, otherwise a generic constructor. * Assigning a function replaces the internal constructor. If the function does not extend {@link Message} yet, its prototype will be setup accordingly and static methods will be populated. If it already extends {@link Message}, it will just replace the internal constructor. * @name Type#ctor * @type {Constructor<{}>} */ ctor: { get: function() { return this._ctor || (this.ctor = Type3.generateConstructor(this)()); }, set: function(ctor) { var prototype = ctor.prototype; if (!(prototype instanceof Message2)) { (ctor.prototype = new Message2()).constructor = ctor; util.merge(ctor.prototype, prototype); } ctor.\$type = ctor.prototype.\$type = this; util.merge(ctor, Message2, true); this._ctor = ctor; var i = 0; for (; i < /* initializes */ this.fieldsArray.length; ++i) this._fieldsArray[i].resolve(); var ctorProperties = {}; for (i = 0; i < /* initializes */ this.oneofsArray.length; ++i) ctorProperties[this._oneofsArray[i].resolve().name] = { get: util.oneOfGetter(this._oneofsArray[i].oneof), set: util.oneOfSetter(this._oneofsArray[i].oneof) }; if (i) Object.defineProperties(ctor.prototype, ctorProperties); } } }); Type3.generateConstructor = function generateConstructor(mtype) { var gen = util.codegen(["p"], mtype.name); for (var i = 0, field; i < mtype.fieldsArray.length; ++i) if ((field = mtype._fieldsArray[i]).map) gen("this%s={}", util.safeProp(field.name)); else if (field.repeated) gen("this%s=[]", util.safeProp(field.name)); return gen("if(p)for(var ks=Object.keys(p),i=0;i -1) { var altname = filename2.substring(idx); if (altname in common) return altname; } return null; } function process(filename2, source) { try { if (util.isString(source) && source.charAt(0) === "{") source = JSON.parse(source); if (!util.isString(source)) self2.setOptions(source.options).addJSON(source.nested); else { parse.filename = filename2; var parsed = parse(source, self2, options), resolved2, i2 = 0; if (parsed.imports) { for (; i2 < parsed.imports.length; ++i2) if (resolved2 = getBundledFileName(parsed.imports[i2]) || self2.resolvePath(filename2, parsed.imports[i2])) fetch2(resolved2); } if (parsed.weakImports) { for (i2 = 0; i2 < parsed.weakImports.length; ++i2) if (resolved2 = getBundledFileName(parsed.weakImports[i2]) || self2.resolvePath(filename2, parsed.weakImports[i2])) fetch2(resolved2, true); } } } catch (err2) { finish(err2); } if (!sync && !queued) finish(null, self2); } function fetch2(filename2, weak) { filename2 = getBundledFileName(filename2) || filename2; if (self2.files.indexOf(filename2) > -1) return; self2.files.push(filename2); if (filename2 in common) { if (sync) process(filename2, common[filename2]); else { ++queued; setTimeout(function() { --queued; process(filename2, common[filename2]); }); } return; } if (sync) { var source; try { source = util.fs.readFileSync(filename2).toString("utf8"); } catch (err2) { if (!weak) finish(err2); return; } process(filename2, source); } else { ++queued; self2.fetch(filename2, function(err2, source2) { --queued; if (!callback) return; if (err2) { if (!weak) finish(err2); else if (!queued) finish(null, self2); return; } process(filename2, source2); }); } } var queued = 0; if (util.isString(filename)) filename = [filename]; for (var i = 0, resolved; i < filename.length; ++i) if (resolved = self2.resolvePath("", filename[i])) fetch2(resolved); if (sync) return self2; if (!queued) finish(null, self2); return void 0; }; Root4.prototype.loadSync = function loadSync(filename, options) { if (!util.isNode) throw Error("not supported"); return this.load(filename, options, SYNC); }; Root4.prototype.resolveAll = function resolveAll() { if (this.deferred.length) throw Error("unresolvable extensions: " + this.deferred.map(function(field) { return "'extend " + field.extend + "' in " + field.parent.fullName; }).join(", ")); return Namespace.prototype.resolveAll.call(this); }; var exposeRe = /^[A-Z]/; function tryHandleExtension(root, field) { var extendedType = field.parent.lookup(field.extend); if (extendedType) { var sisterField = new Field2(field.fullName, field.id, field.type, field.rule, void 0, field.options); if (extendedType.get(sisterField.name)) { return true; } sisterField.declaringField = field; field.extensionField = sisterField; extendedType.add(sisterField); return true; } return false; } Root4.prototype._handleAdd = function _handleAdd(object) { if (object instanceof Field2) { if ( /* an extension field (implies not part of a oneof) */ object.extend !== void 0 && /* not already handled */ !object.extensionField ) { if (!tryHandleExtension(this, object)) this.deferred.push(object); } } else if (object instanceof Enum) { if (exposeRe.test(object.name)) object.parent[object.name] = object.values; } else if (!(object instanceof OneOf2)) { if (object instanceof Type3) for (var i = 0; i < this.deferred.length; ) if (tryHandleExtension(this, this.deferred[i])) this.deferred.splice(i, 1); else ++i; for (var j = 0; j < /* initializes */ object.nestedArray.length; ++j) this._handleAdd(object._nestedArray[j]); if (exposeRe.test(object.name)) object.parent[object.name] = object; } }; Root4.prototype._handleRemove = function _handleRemove(object) { if (object instanceof Field2) { if ( /* an extension field */ object.extend !== void 0 ) { if ( /* already handled */ object.extensionField ) { object.extensionField.parent.remove(object.extensionField); object.extensionField = null; } else { var index = this.deferred.indexOf(object); if (index > -1) this.deferred.splice(index, 1); } } } else if (object instanceof Enum) { if (exposeRe.test(object.name)) delete object.parent[object.name]; } else if (object instanceof Namespace) { for (var i = 0; i < /* initializes */ object.nestedArray.length; ++i) this._handleRemove(object._nestedArray[i]); if (exposeRe.test(object.name)) delete object.parent[object.name]; } }; Root4._configure = function(Type_, parse_, common_) { Type3 = Type_; parse = parse_; common = common_; }; } }); // node_modules/protobufjs/src/util.js var require_util = __commonJS({ "node_modules/protobufjs/src/util.js"(exports2, module2) { "use strict"; init_tampermonkey(); var util = module2.exports = require_minimal(); var roots = require_roots(); var Type3; var Enum; util.codegen = require_codegen(); util.fetch = require_fetch(); util.path = require_path(); util.fs = util.inquire("fs"); util.toArray = function toArray(object) { if (object) { var keys = Object.keys(object), array = new Array(keys.length), index = 0; while (index < keys.length) array[index] = object[keys[index++]]; return array; } return []; }; util.toObject = function toObject2(array) { var object = {}, index = 0; while (index < array.length) { var key = array[index++], val = array[index++]; if (val !== void 0) object[key] = val; } return object; }; var safePropBackslashRe = /\\\\/g; var safePropQuoteRe = /"/g; util.isReserved = function isReserved(name) { return /^(?:do|if|in|for|let|new|try|var|case|else|enum|eval|false|null|this|true|void|with|break|catch|class|const|super|throw|while|yield|delete|export|import|public|return|static|switch|typeof|default|extends|finally|package|private|continue|debugger|function|arguments|interface|protected|implements|instanceof)\$/.test(name); }; util.safeProp = function safeProp(prop) { if (!/^[\$\\w_]+\$/.test(prop) || util.isReserved(prop)) return '["' + prop.replace(safePropBackslashRe, "\\\\\\\\").replace(safePropQuoteRe, '\\\\"') + '"]'; return "." + prop; }; util.ucFirst = function ucFirst(str) { return str.charAt(0).toUpperCase() + str.substring(1); }; var camelCaseRe = /_([a-z])/g; util.camelCase = function camelCase(str) { return str.substring(0, 1) + str.substring(1).replace(camelCaseRe, function(\$0, \$1) { return \$1.toUpperCase(); }); }; util.compareFieldsById = function compareFieldsById(a, b) { return a.id - b.id; }; util.decorateType = function decorateType(ctor, typeName) { if (ctor.\$type) { if (typeName && ctor.\$type.name !== typeName) { util.decorateRoot.remove(ctor.\$type); ctor.\$type.name = typeName; util.decorateRoot.add(ctor.\$type); } return ctor.\$type; } if (!Type3) Type3 = require_type(); var type = new Type3(typeName || ctor.name); util.decorateRoot.add(type); type.ctor = ctor; Object.defineProperty(ctor, "\$type", { value: type, enumerable: false }); Object.defineProperty(ctor.prototype, "\$type", { value: type, enumerable: false }); return type; }; var decorateEnumIndex = 0; util.decorateEnum = function decorateEnum(object) { if (object.\$type) return object.\$type; if (!Enum) Enum = require_enum(); var enm = new Enum("Enum" + decorateEnumIndex++, object); util.decorateRoot.add(enm); Object.defineProperty(object, "\$type", { value: enm, enumerable: false }); return enm; }; util.setProperty = function setProperty(dst, path, value) { function setProp(dst2, path2, value2) { var part = path2.shift(); if (part === "__proto__" || part === "prototype") { return dst2; } if (path2.length > 0) { dst2[part] = setProp(dst2[part] || {}, path2, value2); } else { var prevValue = dst2[part]; if (prevValue) value2 = [].concat(prevValue).concat(value2); dst2[part] = value2; } return dst2; } if (typeof dst !== "object") throw TypeError("dst must be an object"); if (!path) throw TypeError("path must be specified"); path = path.split("."); return setProp(dst, path, value); }; Object.defineProperty(util, "decorateRoot", { get: function() { return roots["decorated"] || (roots["decorated"] = new (require_root())()); } }); } }); // node_modules/protobufjs/src/object.js var require_object = __commonJS({ "node_modules/protobufjs/src/object.js"(exports2, module2) { "use strict"; init_tampermonkey(); module2.exports = ReflectionObject2; ReflectionObject2.className = "ReflectionObject"; var util = require_util(); var Root4; function ReflectionObject2(name, options) { if (!util.isString(name)) throw TypeError("name must be a string"); if (options && !util.isObject(options)) throw TypeError("options must be an object"); this.options = options; this.parsedOptions = null; this.name = name; this.parent = null; this.resolved = false; this.comment = null; this.filename = null; } Object.defineProperties(ReflectionObject2.prototype, { /** * Reference to the root namespace. * @name ReflectionObject#root * @type {Root} * @readonly */ root: { get: function() { var ptr = this; while (ptr.parent !== null) ptr = ptr.parent; return ptr; } }, /** * Full name including leading dot. * @name ReflectionObject#fullName * @type {string} * @readonly */ fullName: { get: function() { var path = [this.name], ptr = this.parent; while (ptr) { path.unshift(ptr.name); ptr = ptr.parent; } return path.join("."); } } }); ReflectionObject2.prototype.toJSON = /* istanbul ignore next */ function toJSON() { throw Error(); }; ReflectionObject2.prototype.onAdd = function onAdd(parent) { if (this.parent && this.parent !== parent) this.parent.remove(this); this.parent = parent; this.resolved = false; var root = parent.root; if (root instanceof Root4) root._handleAdd(this); }; ReflectionObject2.prototype.onRemove = function onRemove(parent) { var root = parent.root; if (root instanceof Root4) root._handleRemove(this); this.parent = null; this.resolved = false; }; ReflectionObject2.prototype.resolve = function resolve() { if (this.resolved) return this; if (this.root instanceof Root4) this.resolved = true; return this; }; ReflectionObject2.prototype.getOption = function getOption(name) { if (this.options) return this.options[name]; return void 0; }; ReflectionObject2.prototype.setOption = function setOption(name, value, ifNotSet) { if (!ifNotSet || !this.options || this.options[name] === void 0) (this.options || (this.options = {}))[name] = value; return this; }; ReflectionObject2.prototype.setParsedOption = function setParsedOption(name, value, propName) { if (!this.parsedOptions) { this.parsedOptions = []; } var parsedOptions = this.parsedOptions; if (propName) { var opt = parsedOptions.find(function(opt2) { return Object.prototype.hasOwnProperty.call(opt2, name); }); if (opt) { var newValue = opt[name]; util.setProperty(newValue, propName, value); } else { opt = {}; opt[name] = util.setProperty({}, propName, value); parsedOptions.push(opt); } } else { var newOpt = {}; newOpt[name] = value; parsedOptions.push(newOpt); } return this; }; ReflectionObject2.prototype.setOptions = function setOptions(options, ifNotSet) { if (options) for (var keys = Object.keys(options), i = 0; i < keys.length; ++i) this.setOption(keys[i], options[keys[i]], ifNotSet); return this; }; ReflectionObject2.prototype.toString = function toString2() { var className = this.constructor.className, fullName = this.fullName; if (fullName.length) return className + " " + fullName; return className; }; ReflectionObject2._configure = function(Root_) { Root4 = Root_; }; } }); // node_modules/protobufjs/src/enum.js var require_enum = __commonJS({ "node_modules/protobufjs/src/enum.js"(exports2, module2) { "use strict"; init_tampermonkey(); module2.exports = Enum; var ReflectionObject2 = require_object(); ((Enum.prototype = Object.create(ReflectionObject2.prototype)).constructor = Enum).className = "Enum"; var Namespace = require_namespace(); var util = require_util(); function Enum(name, values, options, comment, comments, valuesOptions) { ReflectionObject2.call(this, name, options); if (values && typeof values !== "object") throw TypeError("values must be an object"); this.valuesById = {}; this.values = Object.create(this.valuesById); this.comment = comment; this.comments = comments || {}; this.valuesOptions = valuesOptions; this.reserved = void 0; if (values) { for (var keys = Object.keys(values), i = 0; i < keys.length; ++i) if (typeof values[keys[i]] === "number") this.valuesById[this.values[keys[i]] = values[keys[i]]] = keys[i]; } } Enum.fromJSON = function fromJSON(name, json) { var enm = new Enum(name, json.values, json.options, json.comment, json.comments); enm.reserved = json.reserved; return enm; }; Enum.prototype.toJSON = function toJSON(toJSONOptions) { var keepComments = toJSONOptions ? Boolean(toJSONOptions.keepComments) : false; return util.toObject([ "options", this.options, "valuesOptions", this.valuesOptions, "values", this.values, "reserved", this.reserved && this.reserved.length ? this.reserved : void 0, "comment", keepComments ? this.comment : void 0, "comments", keepComments ? this.comments : void 0 ]); }; Enum.prototype.add = function add(name, id, comment, options) { if (!util.isString(name)) throw TypeError("name must be a string"); if (!util.isInteger(id)) throw TypeError("id must be an integer"); if (this.values[name] !== void 0) throw Error("duplicate name '" + name + "' in " + this); if (this.isReservedId(id)) throw Error("id " + id + " is reserved in " + this); if (this.isReservedName(name)) throw Error("name '" + name + "' is reserved in " + this); if (this.valuesById[id] !== void 0) { if (!(this.options && this.options.allow_alias)) throw Error("duplicate id " + id + " in " + this); this.values[name] = id; } else this.valuesById[this.values[name] = id] = name; if (options) { if (this.valuesOptions === void 0) this.valuesOptions = {}; this.valuesOptions[name] = options || null; } this.comments[name] = comment || null; return this; }; Enum.prototype.remove = function remove(name) { if (!util.isString(name)) throw TypeError("name must be a string"); var val = this.values[name]; if (val == null) throw Error("name '" + name + "' does not exist in " + this); delete this.valuesById[val]; delete this.values[name]; delete this.comments[name]; if (this.valuesOptions) delete this.valuesOptions[name]; return this; }; Enum.prototype.isReservedId = function isReservedId(id) { return Namespace.isReservedId(this.reserved, id); }; Enum.prototype.isReservedName = function isReservedName(name) { return Namespace.isReservedName(this.reserved, name); }; } }); // node_modules/protobufjs/src/encoder.js var require_encoder = __commonJS({ "node_modules/protobufjs/src/encoder.js"(exports2, module2) { "use strict"; init_tampermonkey(); module2.exports = encoder; var Enum = require_enum(); var types = require_types(); var util = require_util(); function genTypePartial(gen, field, fieldIndex, ref) { return field.resolvedType.group ? gen("types[%i].encode(%s,w.uint32(%i)).uint32(%i)", fieldIndex, ref, (field.id << 3 | 3) >>> 0, (field.id << 3 | 4) >>> 0) : gen("types[%i].encode(%s,w.uint32(%i).fork()).ldelim()", fieldIndex, ref, (field.id << 3 | 2) >>> 0); } function encoder(mtype) { var gen = util.codegen(["m", "w"], mtype.name + "\$encode")("if(!w)")("w=Writer.create()"); var i, ref; var fields = ( /* initializes */ mtype.fieldsArray.slice().sort(util.compareFieldsById) ); for (var i = 0; i < fields.length; ++i) { var field = fields[i].resolve(), index = mtype._fieldsArray.indexOf(field), type = field.resolvedType instanceof Enum ? "int32" : field.type, wireType = types.basic[type]; ref = "m" + util.safeProp(field.name); if (field.map) { gen("if(%s!=null&&Object.hasOwnProperty.call(m,%j)){", ref, field.name)("for(var ks=Object.keys(%s),i=0;i>> 0, 8 | types.mapKey[field.keyType], field.keyType); if (wireType === void 0) gen("types[%i].encode(%s[ks[i]],w.uint32(18).fork()).ldelim().ldelim()", index, ref); else gen(".uint32(%i).%s(%s[ks[i]]).ldelim()", 16 | wireType, type, ref); gen("}")("}"); } else if (field.repeated) { gen("if(%s!=null&&%s.length){", ref, ref); if (field.packed && types.packed[type] !== void 0) { gen("w.uint32(%i).fork()", (field.id << 3 | 2) >>> 0)("for(var i=0;i<%s.length;++i)", ref)("w.%s(%s[i])", type, ref)("w.ldelim()"); } else { gen("for(var i=0;i<%s.length;++i)", ref); if (wireType === void 0) genTypePartial(gen, field, index, ref + "[i]"); else gen("w.uint32(%i).%s(%s[i])", (field.id << 3 | wireType) >>> 0, type, ref); } gen("}"); } else { if (field.optional) gen("if(%s!=null&&Object.hasOwnProperty.call(m,%j))", ref, field.name); if (wireType === void 0) genTypePartial(gen, field, index, ref); else gen("w.uint32(%i).%s(%s)", (field.id << 3 | wireType) >>> 0, type, ref); } } return gen("return w"); } } }); // node_modules/protobufjs/src/index-light.js var require_index_light = __commonJS({ "node_modules/protobufjs/src/index-light.js"(exports2, module2) { "use strict"; init_tampermonkey(); var protobuf = module2.exports = require_index_minimal(); protobuf.build = "light"; function load2(filename, root, callback) { if (typeof root === "function") { callback = root; root = new protobuf.Root(); } else if (!root) root = new protobuf.Root(); return root.load(filename, callback); } protobuf.load = load2; function loadSync(filename, root) { if (!root) root = new protobuf.Root(); return root.loadSync(filename); } protobuf.loadSync = loadSync; protobuf.encoder = require_encoder(); protobuf.decoder = require_decoder(); protobuf.verifier = require_verifier(); protobuf.converter = require_converter(); protobuf.ReflectionObject = require_object(); protobuf.Namespace = require_namespace(); protobuf.Root = require_root(); protobuf.Enum = require_enum(); protobuf.Type = require_type(); protobuf.Field = require_field(); protobuf.OneOf = require_oneof(); protobuf.MapField = require_mapfield(); protobuf.Service = require_service2(); protobuf.Method = require_method(); protobuf.Message = require_message(); protobuf.wrappers = require_wrappers(); protobuf.types = require_types(); protobuf.util = require_util(); protobuf.ReflectionObject._configure(protobuf.Root); protobuf.Namespace._configure(protobuf.Type, protobuf.Service, protobuf.Enum); protobuf.Root._configure(protobuf.Type); protobuf.Field._configure(protobuf.Type); } }); // node_modules/protobufjs/light.js var require_light = __commonJS({ "node_modules/protobufjs/light.js"(exports2, module2) { "use strict"; init_tampermonkey(); module2.exports = require_index_light(); } }); // node_modules/quill-delta-to-html-cb/dist/commonjs/value-types.js var require_value_types = __commonJS({ "node_modules/quill-delta-to-html-cb/dist/commonjs/value-types.js"(exports2) { "use strict"; init_tampermonkey(); Object.defineProperty(exports2, "__esModule", { value: true }); var NewLine = "\\n"; exports2.NewLine = NewLine; var ListType; (function(ListType2) { ListType2["Ordered"] = "ordered"; ListType2["Bullet"] = "bullet"; ListType2["Checked"] = "checked"; ListType2["Unchecked"] = "unchecked"; })(ListType || (ListType = {})); exports2.ListType = ListType; var ScriptType; (function(ScriptType2) { ScriptType2["Sub"] = "sub"; ScriptType2["Super"] = "super"; })(ScriptType || (ScriptType = {})); exports2.ScriptType = ScriptType; var DirectionType; (function(DirectionType2) { DirectionType2["Rtl"] = "rtl"; })(DirectionType || (DirectionType = {})); exports2.DirectionType = DirectionType; var AlignType; (function(AlignType2) { AlignType2["Left"] = "left"; AlignType2["Center"] = "center"; AlignType2["Right"] = "right"; AlignType2["Justify"] = "justify"; })(AlignType || (AlignType = {})); exports2.AlignType = AlignType; var DataType; (function(DataType2) { DataType2["Image"] = "image"; DataType2["Video"] = "video"; DataType2["Formula"] = "formula"; DataType2["Text"] = "text"; })(DataType || (DataType = {})); exports2.DataType = DataType; var GroupType; (function(GroupType2) { GroupType2["Block"] = "block"; GroupType2["InlineGroup"] = "inline-group"; GroupType2["List"] = "list"; GroupType2["Video"] = "video"; GroupType2["Table"] = "table"; })(GroupType || (GroupType = {})); exports2.GroupType = GroupType; } }); // node_modules/quill-delta-to-html-cb/dist/commonjs/InsertData.js var require_InsertData = __commonJS({ "node_modules/quill-delta-to-html-cb/dist/commonjs/InsertData.js"(exports2) { "use strict"; init_tampermonkey(); Object.defineProperty(exports2, "__esModule", { value: true }); var InsertDataQuill = /* @__PURE__ */ function() { function InsertDataQuill2(type, value) { this.type = type; this.value = value; } return InsertDataQuill2; }(); exports2.InsertDataQuill = InsertDataQuill; var InsertDataCustom = /* @__PURE__ */ function() { function InsertDataCustom2(type, value) { this.type = type; this.value = value; } return InsertDataCustom2; }(); exports2.InsertDataCustom = InsertDataCustom; } }); // node_modules/lodash.isequal/index.js var require_lodash = __commonJS({ "node_modules/lodash.isequal/index.js"(exports2, module2) { init_tampermonkey(); var LARGE_ARRAY_SIZE = 200; var HASH_UNDEFINED = "__lodash_hash_undefined__"; var COMPARE_PARTIAL_FLAG = 1; var COMPARE_UNORDERED_FLAG = 2; var MAX_SAFE_INTEGER = 9007199254740991; var argsTag = "[object Arguments]"; var arrayTag = "[object Array]"; var asyncTag = "[object AsyncFunction]"; var boolTag = "[object Boolean]"; var dateTag = "[object Date]"; var errorTag = "[object Error]"; var funcTag = "[object Function]"; var genTag = "[object GeneratorFunction]"; var mapTag = "[object Map]"; var numberTag = "[object Number]"; var nullTag = "[object Null]"; var objectTag = "[object Object]"; var promiseTag = "[object Promise]"; var proxyTag = "[object Proxy]"; var regexpTag = "[object RegExp]"; var setTag = "[object Set]"; var stringTag = "[object String]"; var symbolTag = "[object Symbol]"; var undefinedTag = "[object Undefined]"; var weakMapTag = "[object WeakMap]"; var arrayBufferTag = "[object ArrayBuffer]"; var dataViewTag = "[object DataView]"; var float32Tag = "[object Float32Array]"; var float64Tag = "[object Float64Array]"; var int8Tag = "[object Int8Array]"; var int16Tag = "[object Int16Array]"; var int32Tag = "[object Int32Array]"; var uint8Tag = "[object Uint8Array]"; var uint8ClampedTag = "[object Uint8ClampedArray]"; var uint16Tag = "[object Uint16Array]"; var uint32Tag = "[object Uint32Array]"; var reRegExpChar = /[\\\\^\$.*+?()[\\]{}|]/g; var reIsHostCtor = /^\\[object .+?Constructor\\]\$/; var reIsUint = /^(?:0|[1-9]\\d*)\$/; var typedArrayTags = {}; typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = typedArrayTags[uint32Tag] = true; typedArrayTags[argsTag] = typedArrayTags[arrayTag] = typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = typedArrayTags[errorTag] = typedArrayTags[funcTag] = typedArrayTags[mapTag] = typedArrayTags[numberTag] = typedArrayTags[objectTag] = typedArrayTags[regexpTag] = typedArrayTags[setTag] = typedArrayTags[stringTag] = typedArrayTags[weakMapTag] = false; var freeGlobal = typeof global == "object" && global && global.Object === Object && global; var freeSelf = typeof self == "object" && self && self.Object === Object && self; var root = freeGlobal || freeSelf || Function("return this")(); var freeExports = typeof exports2 == "object" && exports2 && !exports2.nodeType && exports2; var freeModule = freeExports && typeof module2 == "object" && module2 && !module2.nodeType && module2; var moduleExports = freeModule && freeModule.exports === freeExports; var freeProcess = moduleExports && freeGlobal.process; var nodeUtil = function() { try { return freeProcess && freeProcess.binding && freeProcess.binding("util"); } catch (e) { } }(); var nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray; function arrayFilter(array, predicate) { var index = -1, length2 = array == null ? 0 : array.length, resIndex = 0, result = []; while (++index < length2) { var value = array[index]; if (predicate(value, index, array)) { result[resIndex++] = value; } } return result; } function arrayPush(array, values) { var index = -1, length2 = values.length, offset3 = array.length; while (++index < length2) { array[offset3 + index] = values[index]; } return array; } function arraySome(array, predicate) { var index = -1, length2 = array == null ? 0 : array.length; while (++index < length2) { if (predicate(array[index], index, array)) { return true; } } return false; } function baseTimes(n, iteratee) { var index = -1, result = Array(n); while (++index < n) { result[index] = iteratee(index); } return result; } function baseUnary(func) { return function(value) { return func(value); }; } function cacheHas(cache, key) { return cache.has(key); } function getValue(object, key) { return object == null ? void 0 : object[key]; } function mapToArray(map) { var index = -1, result = Array(map.size); map.forEach(function(value, key) { result[++index] = [key, value]; }); return result; } function overArg(func, transform) { return function(arg) { return func(transform(arg)); }; } function setToArray(set) { var index = -1, result = Array(set.size); set.forEach(function(value) { result[++index] = value; }); return result; } var arrayProto = Array.prototype; var funcProto = Function.prototype; var objectProto = Object.prototype; var coreJsData = root["__core-js_shared__"]; var funcToString = funcProto.toString; var hasOwnProperty = objectProto.hasOwnProperty; var maskSrcKey = function() { var uid2 = /[^.]+\$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ""); return uid2 ? "Symbol(src)_1." + uid2 : ""; }(); var nativeObjectToString = objectProto.toString; var reIsNative = RegExp( "^" + funcToString.call(hasOwnProperty).replace(reRegExpChar, "\\\\\$&").replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, "\$1.*?") + "\$" ); var Buffer2 = moduleExports ? root.Buffer : void 0; var Symbol2 = root.Symbol; var Uint8Array2 = root.Uint8Array; var propertyIsEnumerable = objectProto.propertyIsEnumerable; var splice = arrayProto.splice; var symToStringTag = Symbol2 ? Symbol2.toStringTag : void 0; var nativeGetSymbols = Object.getOwnPropertySymbols; var nativeIsBuffer = Buffer2 ? Buffer2.isBuffer : void 0; var nativeKeys = overArg(Object.keys, Object); var DataView2 = getNative(root, "DataView"); var Map = getNative(root, "Map"); var Promise2 = getNative(root, "Promise"); var Set2 = getNative(root, "Set"); var WeakMap = getNative(root, "WeakMap"); var nativeCreate = getNative(Object, "create"); var dataViewCtorString = toSource(DataView2); var mapCtorString = toSource(Map); var promiseCtorString = toSource(Promise2); var setCtorString = toSource(Set2); var weakMapCtorString = toSource(WeakMap); var symbolProto = Symbol2 ? Symbol2.prototype : void 0; var symbolValueOf = symbolProto ? symbolProto.valueOf : void 0; function Hash(entries) { var index = -1, length2 = entries == null ? 0 : entries.length; this.clear(); while (++index < length2) { var entry = entries[index]; this.set(entry[0], entry[1]); } } function hashClear() { this.__data__ = nativeCreate ? nativeCreate(null) : {}; this.size = 0; } function hashDelete(key) { var result = this.has(key) && delete this.__data__[key]; this.size -= result ? 1 : 0; return result; } function hashGet(key) { var data = this.__data__; if (nativeCreate) { var result = data[key]; return result === HASH_UNDEFINED ? void 0 : result; } return hasOwnProperty.call(data, key) ? data[key] : void 0; } function hashHas(key) { var data = this.__data__; return nativeCreate ? data[key] !== void 0 : hasOwnProperty.call(data, key); } function hashSet(key, value) { var data = this.__data__; this.size += this.has(key) ? 0 : 1; data[key] = nativeCreate && value === void 0 ? HASH_UNDEFINED : value; return this; } Hash.prototype.clear = hashClear; Hash.prototype["delete"] = hashDelete; Hash.prototype.get = hashGet; Hash.prototype.has = hashHas; Hash.prototype.set = hashSet; function ListCache(entries) { var index = -1, length2 = entries == null ? 0 : entries.length; this.clear(); while (++index < length2) { var entry = entries[index]; this.set(entry[0], entry[1]); } } function listCacheClear() { this.__data__ = []; this.size = 0; } function listCacheDelete(key) { var data = this.__data__, index = assocIndexOf(data, key); if (index < 0) { return false; } var lastIndex = data.length - 1; if (index == lastIndex) { data.pop(); } else { splice.call(data, index, 1); } --this.size; return true; } function listCacheGet(key) { var data = this.__data__, index = assocIndexOf(data, key); return index < 0 ? void 0 : data[index][1]; } function listCacheHas(key) { return assocIndexOf(this.__data__, key) > -1; } function listCacheSet(key, value) { var data = this.__data__, index = assocIndexOf(data, key); if (index < 0) { ++this.size; data.push([key, value]); } else { data[index][1] = value; } return this; } ListCache.prototype.clear = listCacheClear; ListCache.prototype["delete"] = listCacheDelete; ListCache.prototype.get = listCacheGet; ListCache.prototype.has = listCacheHas; ListCache.prototype.set = listCacheSet; function MapCache(entries) { var index = -1, length2 = entries == null ? 0 : entries.length; this.clear(); while (++index < length2) { var entry = entries[index]; this.set(entry[0], entry[1]); } } function mapCacheClear() { this.size = 0; this.__data__ = { "hash": new Hash(), "map": new (Map || ListCache)(), "string": new Hash() }; } function mapCacheDelete(key) { var result = getMapData(this, key)["delete"](key); this.size -= result ? 1 : 0; return result; } function mapCacheGet(key) { return getMapData(this, key).get(key); } function mapCacheHas(key) { return getMapData(this, key).has(key); } function mapCacheSet(key, value) { var data = getMapData(this, key), size = data.size; data.set(key, value); this.size += data.size == size ? 0 : 1; return this; } MapCache.prototype.clear = mapCacheClear; MapCache.prototype["delete"] = mapCacheDelete; MapCache.prototype.get = mapCacheGet; MapCache.prototype.has = mapCacheHas; MapCache.prototype.set = mapCacheSet; function SetCache(values) { var index = -1, length2 = values == null ? 0 : values.length; this.__data__ = new MapCache(); while (++index < length2) { this.add(values[index]); } } function setCacheAdd(value) { this.__data__.set(value, HASH_UNDEFINED); return this; } function setCacheHas(value) { return this.__data__.has(value); } SetCache.prototype.add = SetCache.prototype.push = setCacheAdd; SetCache.prototype.has = setCacheHas; function Stack(entries) { var data = this.__data__ = new ListCache(entries); this.size = data.size; } function stackClear() { this.__data__ = new ListCache(); this.size = 0; } function stackDelete(key) { var data = this.__data__, result = data["delete"](key); this.size = data.size; return result; } function stackGet(key) { return this.__data__.get(key); } function stackHas(key) { return this.__data__.has(key); } function stackSet(key, value) { var data = this.__data__; if (data instanceof ListCache) { var pairs = data.__data__; if (!Map || pairs.length < LARGE_ARRAY_SIZE - 1) { pairs.push([key, value]); this.size = ++data.size; return this; } data = this.__data__ = new MapCache(pairs); } data.set(key, value); this.size = data.size; return this; } Stack.prototype.clear = stackClear; Stack.prototype["delete"] = stackDelete; Stack.prototype.get = stackGet; Stack.prototype.has = stackHas; Stack.prototype.set = stackSet; function arrayLikeKeys(value, inherited) { var isArr = isArray2(value), isArg = !isArr && isArguments(value), isBuff = !isArr && !isArg && isBuffer(value), isType = !isArr && !isArg && !isBuff && isTypedArray(value), skipIndexes = isArr || isArg || isBuff || isType, result = skipIndexes ? baseTimes(value.length, String) : [], length2 = result.length; for (var key in value) { if ((inherited || hasOwnProperty.call(value, key)) && !(skipIndexes && // Safari 9 has enumerable \`arguments.length\` in strict mode. (key == "length" || // Node.js 0.10 has enumerable non-index properties on buffers. isBuff && (key == "offset" || key == "parent") || // PhantomJS 2 has enumerable non-index properties on typed arrays. isType && (key == "buffer" || key == "byteLength" || key == "byteOffset") || // Skip index properties. isIndex(key, length2)))) { result.push(key); } } return result; } function assocIndexOf(array, key) { var length2 = array.length; while (length2--) { if (eq(array[length2][0], key)) { return length2; } } return -1; } function baseGetAllKeys(object, keysFunc, symbolsFunc) { var result = keysFunc(object); return isArray2(object) ? result : arrayPush(result, symbolsFunc(object)); } function baseGetTag(value) { if (value == null) { return value === void 0 ? undefinedTag : nullTag; } return symToStringTag && symToStringTag in Object(value) ? getRawTag(value) : objectToString(value); } function baseIsArguments(value) { return isObjectLike(value) && baseGetTag(value) == argsTag; } function baseIsEqual(value, other, bitmask, customizer, stack) { if (value === other) { return true; } if (value == null || other == null || !isObjectLike(value) && !isObjectLike(other)) { return value !== value && other !== other; } return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack); } function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) { var objIsArr = isArray2(object), othIsArr = isArray2(other), objTag = objIsArr ? arrayTag : getTag(object), othTag = othIsArr ? arrayTag : getTag(other); objTag = objTag == argsTag ? objectTag : objTag; othTag = othTag == argsTag ? objectTag : othTag; var objIsObj = objTag == objectTag, othIsObj = othTag == objectTag, isSameTag = objTag == othTag; if (isSameTag && isBuffer(object)) { if (!isBuffer(other)) { return false; } objIsArr = true; objIsObj = false; } if (isSameTag && !objIsObj) { stack || (stack = new Stack()); return objIsArr || isTypedArray(object) ? equalArrays(object, other, bitmask, customizer, equalFunc, stack) : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack); } if (!(bitmask & COMPARE_PARTIAL_FLAG)) { var objIsWrapped = objIsObj && hasOwnProperty.call(object, "__wrapped__"), othIsWrapped = othIsObj && hasOwnProperty.call(other, "__wrapped__"); if (objIsWrapped || othIsWrapped) { var objUnwrapped = objIsWrapped ? object.value() : object, othUnwrapped = othIsWrapped ? other.value() : other; stack || (stack = new Stack()); return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack); } } if (!isSameTag) { return false; } stack || (stack = new Stack()); return equalObjects(object, other, bitmask, customizer, equalFunc, stack); } function baseIsNative(value) { if (!isObject2(value) || isMasked(value)) { return false; } var pattern = isFunction(value) ? reIsNative : reIsHostCtor; return pattern.test(toSource(value)); } function baseIsTypedArray(value) { return isObjectLike(value) && isLength(value.length) && !!typedArrayTags[baseGetTag(value)]; } function baseKeys(object) { if (!isPrototype(object)) { return nativeKeys(object); } var result = []; for (var key in Object(object)) { if (hasOwnProperty.call(object, key) && key != "constructor") { result.push(key); } } return result; } function equalArrays(array, other, bitmask, customizer, equalFunc, stack) { var isPartial = bitmask & COMPARE_PARTIAL_FLAG, arrLength = array.length, othLength = other.length; if (arrLength != othLength && !(isPartial && othLength > arrLength)) { return false; } var stacked = stack.get(array); if (stacked && stack.get(other)) { return stacked == other; } var index = -1, result = true, seen = bitmask & COMPARE_UNORDERED_FLAG ? new SetCache() : void 0; stack.set(array, other); stack.set(other, array); while (++index < arrLength) { var arrValue = array[index], othValue = other[index]; if (customizer) { var compared = isPartial ? customizer(othValue, arrValue, index, other, array, stack) : customizer(arrValue, othValue, index, array, other, stack); } if (compared !== void 0) { if (compared) { continue; } result = false; break; } if (seen) { if (!arraySome(other, function(othValue2, othIndex) { if (!cacheHas(seen, othIndex) && (arrValue === othValue2 || equalFunc(arrValue, othValue2, bitmask, customizer, stack))) { return seen.push(othIndex); } })) { result = false; break; } } else if (!(arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) { result = false; break; } } stack["delete"](array); stack["delete"](other); return result; } function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) { switch (tag) { case dataViewTag: if (object.byteLength != other.byteLength || object.byteOffset != other.byteOffset) { return false; } object = object.buffer; other = other.buffer; case arrayBufferTag: if (object.byteLength != other.byteLength || !equalFunc(new Uint8Array2(object), new Uint8Array2(other))) { return false; } return true; case boolTag: case dateTag: case numberTag: return eq(+object, +other); case errorTag: return object.name == other.name && object.message == other.message; case regexpTag: case stringTag: return object == other + ""; case mapTag: var convert = mapToArray; case setTag: var isPartial = bitmask & COMPARE_PARTIAL_FLAG; convert || (convert = setToArray); if (object.size != other.size && !isPartial) { return false; } var stacked = stack.get(object); if (stacked) { return stacked == other; } bitmask |= COMPARE_UNORDERED_FLAG; stack.set(object, other); var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack); stack["delete"](object); return result; case symbolTag: if (symbolValueOf) { return symbolValueOf.call(object) == symbolValueOf.call(other); } } return false; } function equalObjects(object, other, bitmask, customizer, equalFunc, stack) { var isPartial = bitmask & COMPARE_PARTIAL_FLAG, objProps = getAllKeys(object), objLength = objProps.length, othProps = getAllKeys(other), othLength = othProps.length; if (objLength != othLength && !isPartial) { return false; } var index = objLength; while (index--) { var key = objProps[index]; if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) { return false; } } var stacked = stack.get(object); if (stacked && stack.get(other)) { return stacked == other; } var result = true; stack.set(object, other); stack.set(other, object); var skipCtor = isPartial; while (++index < objLength) { key = objProps[index]; var objValue = object[key], othValue = other[key]; if (customizer) { var compared = isPartial ? customizer(othValue, objValue, key, other, object, stack) : customizer(objValue, othValue, key, object, other, stack); } if (!(compared === void 0 ? objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack) : compared)) { result = false; break; } skipCtor || (skipCtor = key == "constructor"); } if (result && !skipCtor) { var objCtor = object.constructor, othCtor = other.constructor; if (objCtor != othCtor && ("constructor" in object && "constructor" in other) && !(typeof objCtor == "function" && objCtor instanceof objCtor && typeof othCtor == "function" && othCtor instanceof othCtor)) { result = false; } } stack["delete"](object); stack["delete"](other); return result; } function getAllKeys(object) { return baseGetAllKeys(object, keys, getSymbols); } function getMapData(map, key) { var data = map.__data__; return isKeyable(key) ? data[typeof key == "string" ? "string" : "hash"] : data.map; } function getNative(object, key) { var value = getValue(object, key); return baseIsNative(value) ? value : void 0; } function getRawTag(value) { var isOwn = hasOwnProperty.call(value, symToStringTag), tag = value[symToStringTag]; try { value[symToStringTag] = void 0; var unmasked = true; } catch (e) { } var result = nativeObjectToString.call(value); if (unmasked) { if (isOwn) { value[symToStringTag] = tag; } else { delete value[symToStringTag]; } } return result; } var getSymbols = !nativeGetSymbols ? stubArray : function(object) { if (object == null) { return []; } object = Object(object); return arrayFilter(nativeGetSymbols(object), function(symbol) { return propertyIsEnumerable.call(object, symbol); }); }; var getTag = baseGetTag; if (DataView2 && getTag(new DataView2(new ArrayBuffer(1))) != dataViewTag || Map && getTag(new Map()) != mapTag || Promise2 && getTag(Promise2.resolve()) != promiseTag || Set2 && getTag(new Set2()) != setTag || WeakMap && getTag(new WeakMap()) != weakMapTag) { getTag = function(value) { var result = baseGetTag(value), Ctor = result == objectTag ? value.constructor : void 0, ctorString = Ctor ? toSource(Ctor) : ""; if (ctorString) { switch (ctorString) { case dataViewCtorString: return dataViewTag; case mapCtorString: return mapTag; case promiseCtorString: return promiseTag; case setCtorString: return setTag; case weakMapCtorString: return weakMapTag; } } return result; }; } function isIndex(value, length2) { length2 = length2 == null ? MAX_SAFE_INTEGER : length2; return !!length2 && (typeof value == "number" || reIsUint.test(value)) && (value > -1 && value % 1 == 0 && value < length2); } function isKeyable(value) { var type = typeof value; return type == "string" || type == "number" || type == "symbol" || type == "boolean" ? value !== "__proto__" : value === null; } function isMasked(func) { return !!maskSrcKey && maskSrcKey in func; } function isPrototype(value) { var Ctor = value && value.constructor, proto = typeof Ctor == "function" && Ctor.prototype || objectProto; return value === proto; } function objectToString(value) { return nativeObjectToString.call(value); } function toSource(func) { if (func != null) { try { return funcToString.call(func); } catch (e) { } try { return func + ""; } catch (e) { } } return ""; } function eq(value, other) { return value === other || value !== value && other !== other; } var isArguments = baseIsArguments(/* @__PURE__ */ function() { return arguments; }()) ? baseIsArguments : function(value) { return isObjectLike(value) && hasOwnProperty.call(value, "callee") && !propertyIsEnumerable.call(value, "callee"); }; var isArray2 = Array.isArray; function isArrayLike(value) { return value != null && isLength(value.length) && !isFunction(value); } var isBuffer = nativeIsBuffer || stubFalse; function isEqual(value, other) { return baseIsEqual(value, other); } function isFunction(value) { if (!isObject2(value)) { return false; } var tag = baseGetTag(value); return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag; } function isLength(value) { return typeof value == "number" && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; } function isObject2(value) { var type = typeof value; return value != null && (type == "object" || type == "function"); } function isObjectLike(value) { return value != null && typeof value == "object"; } var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray; function keys(object) { return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object); } function stubArray() { return []; } function stubFalse() { return false; } module2.exports = isEqual; } }); // node_modules/quill-delta-to-html-cb/dist/commonjs/DeltaInsertOp.js var require_DeltaInsertOp = __commonJS({ "node_modules/quill-delta-to-html-cb/dist/commonjs/DeltaInsertOp.js"(exports2) { "use strict"; init_tampermonkey(); var __importDefault = exports2 && exports2.__importDefault || function(mod2) { return mod2 && mod2.__esModule ? mod2 : { "default": mod2 }; }; Object.defineProperty(exports2, "__esModule", { value: true }); var value_types_1 = require_value_types(); var InsertData_1 = require_InsertData(); var lodash_isequal_1 = __importDefault(require_lodash()); var DeltaInsertOp = function() { function DeltaInsertOp2(insertVal, attrs) { if (typeof insertVal === "string") { insertVal = new InsertData_1.InsertDataQuill(value_types_1.DataType.Text, insertVal + ""); } this.insert = insertVal; this.attributes = attrs || {}; } DeltaInsertOp2.createNewLineOp = function() { return new DeltaInsertOp2(value_types_1.NewLine); }; DeltaInsertOp2.prototype.isContainerBlock = function() { return this.isBlockquote() || this.isList() || this.isTable() || this.isCodeBlock() || this.isHeader() || this.isBlockAttribute() || this.isCustomTextBlock(); }; DeltaInsertOp2.prototype.isBlockAttribute = function() { var attrs = this.attributes; return !!(attrs.align || attrs.direction || attrs.indent); }; DeltaInsertOp2.prototype.isBlockquote = function() { return !!this.attributes.blockquote; }; DeltaInsertOp2.prototype.isHeader = function() { return !!this.attributes.header; }; DeltaInsertOp2.prototype.isTable = function() { return !!this.attributes.table; }; DeltaInsertOp2.prototype.isSameHeaderAs = function(op) { return op.attributes.header === this.attributes.header && this.isHeader(); }; DeltaInsertOp2.prototype.hasSameAdiAs = function(op) { return this.attributes.align === op.attributes.align && this.attributes.direction === op.attributes.direction && this.attributes.indent === op.attributes.indent; }; DeltaInsertOp2.prototype.hasSameIndentationAs = function(op) { return this.attributes.indent === op.attributes.indent; }; DeltaInsertOp2.prototype.hasSameAttr = function(op) { return lodash_isequal_1.default(this.attributes, op.attributes); }; DeltaInsertOp2.prototype.hasHigherIndentThan = function(op) { return (Number(this.attributes.indent) || 0) > (Number(op.attributes.indent) || 0); }; DeltaInsertOp2.prototype.isInline = function() { return !(this.isContainerBlock() || this.isVideo() || this.isCustomEmbedBlock()); }; DeltaInsertOp2.prototype.isCodeBlock = function() { return !!this.attributes["code-block"]; }; DeltaInsertOp2.prototype.hasSameLangAs = function(op) { return this.attributes["code-block"] === op.attributes["code-block"]; }; DeltaInsertOp2.prototype.isJustNewline = function() { return this.insert.value === value_types_1.NewLine; }; DeltaInsertOp2.prototype.isList = function() { return this.isOrderedList() || this.isBulletList() || this.isCheckedList() || this.isUncheckedList(); }; DeltaInsertOp2.prototype.isOrderedList = function() { return this.attributes.list === value_types_1.ListType.Ordered; }; DeltaInsertOp2.prototype.isBulletList = function() { return this.attributes.list === value_types_1.ListType.Bullet; }; DeltaInsertOp2.prototype.isCheckedList = function() { return this.attributes.list === value_types_1.ListType.Checked; }; DeltaInsertOp2.prototype.isUncheckedList = function() { return this.attributes.list === value_types_1.ListType.Unchecked; }; DeltaInsertOp2.prototype.isACheckList = function() { return this.attributes.list == value_types_1.ListType.Unchecked || this.attributes.list === value_types_1.ListType.Checked; }; DeltaInsertOp2.prototype.isSameListAs = function(op) { return !!op.attributes.list && (this.attributes.list === op.attributes.list || op.isACheckList() && this.isACheckList()); }; DeltaInsertOp2.prototype.isSameTableRowAs = function(op) { return !!op.isTable() && this.isTable() && this.attributes.table === op.attributes.table; }; DeltaInsertOp2.prototype.isText = function() { return this.insert.type === value_types_1.DataType.Text; }; DeltaInsertOp2.prototype.isImage = function() { return this.insert.type === value_types_1.DataType.Image; }; DeltaInsertOp2.prototype.isFormula = function() { return this.insert.type === value_types_1.DataType.Formula; }; DeltaInsertOp2.prototype.isVideo = function() { return this.insert.type === value_types_1.DataType.Video; }; DeltaInsertOp2.prototype.isLink = function() { return this.isText() && !!this.attributes.link; }; DeltaInsertOp2.prototype.isCustomEmbed = function() { return this.insert instanceof InsertData_1.InsertDataCustom; }; DeltaInsertOp2.prototype.isCustomEmbedBlock = function() { return this.isCustomEmbed() && !!this.attributes.renderAsBlock; }; DeltaInsertOp2.prototype.isCustomTextBlock = function() { return this.isText() && !!this.attributes.renderAsBlock; }; DeltaInsertOp2.prototype.isMentions = function() { return this.isText() && !!this.attributes.mentions; }; return DeltaInsertOp2; }(); exports2.DeltaInsertOp = DeltaInsertOp; } }); // node_modules/quill-delta-to-html-cb/dist/commonjs/mentions/MentionSanitizer.js var require_MentionSanitizer = __commonJS({ "node_modules/quill-delta-to-html-cb/dist/commonjs/mentions/MentionSanitizer.js"(exports2) { "use strict"; init_tampermonkey(); Object.defineProperty(exports2, "__esModule", { value: true }); var OpAttributeSanitizer_1 = require_OpAttributeSanitizer(); var MentionSanitizer = function() { function MentionSanitizer2() { } MentionSanitizer2.sanitize = function(dirtyObj, sanitizeOptions) { var cleanObj = {}; if (!dirtyObj || typeof dirtyObj !== "object") { return cleanObj; } if (dirtyObj.class && MentionSanitizer2.IsValidClass(dirtyObj.class)) { cleanObj.class = dirtyObj.class; } if (dirtyObj.id && MentionSanitizer2.IsValidId(dirtyObj.id)) { cleanObj.id = dirtyObj.id; } if (MentionSanitizer2.IsValidTarget(dirtyObj.target + "")) { cleanObj.target = dirtyObj.target; } if (dirtyObj.avatar) { cleanObj.avatar = OpAttributeSanitizer_1.OpAttributeSanitizer.sanitizeLinkUsingOptions(dirtyObj.avatar + "", sanitizeOptions); } if (dirtyObj["end-point"]) { cleanObj["end-point"] = OpAttributeSanitizer_1.OpAttributeSanitizer.sanitizeLinkUsingOptions(dirtyObj["end-point"] + "", sanitizeOptions); } if (dirtyObj.slug) { cleanObj.slug = dirtyObj.slug + ""; } return cleanObj; }; MentionSanitizer2.IsValidClass = function(classAttr) { return !!classAttr.match(/^[a-zA-Z0-9_\\-]{1,500}\$/i); }; MentionSanitizer2.IsValidId = function(idAttr) { return !!idAttr.match(/^[a-zA-Z0-9_\\-\\:\\.]{1,500}\$/i); }; MentionSanitizer2.IsValidTarget = function(target) { return ["_self", "_blank", "_parent", "_top"].indexOf(target) > -1; }; return MentionSanitizer2; }(); exports2.MentionSanitizer = MentionSanitizer; } }); // node_modules/quill-delta-to-html-cb/dist/commonjs/helpers/url.js var require_url = __commonJS({ "node_modules/quill-delta-to-html-cb/dist/commonjs/helpers/url.js"(exports2) { "use strict"; init_tampermonkey(); Object.defineProperty(exports2, "__esModule", { value: true }); function sanitize(str) { var val = str; val = val.replace(/^\\s*/gm, ""); var whiteList = /^((https?|s?ftp|file|blob|mailto|tel):|#|\\/|data:image\\/)/; if (whiteList.test(val)) { return val; } return "unsafe:" + val; } exports2.sanitize = sanitize; } }); // node_modules/quill-delta-to-html-cb/dist/commonjs/funcs-html.js var require_funcs_html = __commonJS({ "node_modules/quill-delta-to-html-cb/dist/commonjs/funcs-html.js"(exports2) { "use strict"; init_tampermonkey(); Object.defineProperty(exports2, "__esModule", { value: true }); var EncodeTarget; (function(EncodeTarget2) { EncodeTarget2[EncodeTarget2["Html"] = 0] = "Html"; EncodeTarget2[EncodeTarget2["Url"] = 1] = "Url"; })(EncodeTarget || (EncodeTarget = {})); function makeStartTag(tag, attrs) { if (attrs === void 0) { attrs = void 0; } if (!tag) { return ""; } var attrsStr = ""; if (attrs) { var arrAttrs = [].concat(attrs); attrsStr = arrAttrs.map(function(attr) { return attr.key + (attr.value ? '="' + attr.value + '"' : ""); }).join(" "); } var closing = ">"; if (tag === "img" || tag === "br") { closing = "/>"; } return attrsStr ? "<" + tag + " " + attrsStr + closing : "<" + tag + closing; } exports2.makeStartTag = makeStartTag; function makeEndTag(tag) { if (tag === void 0) { tag = ""; } return tag && "" || ""; } exports2.makeEndTag = makeEndTag; function decodeHtml(str) { return encodeMappings(EncodeTarget.Html).reduce(decodeMapping, str); } exports2.decodeHtml = decodeHtml; function encodeHtml(str, preventDoubleEncoding) { if (preventDoubleEncoding === void 0) { preventDoubleEncoding = true; } if (preventDoubleEncoding) { str = decodeHtml(str); } return encodeMappings(EncodeTarget.Html).reduce(encodeMapping, str); } exports2.encodeHtml = encodeHtml; function encodeLink(str) { var linkMaps = encodeMappings(EncodeTarget.Url); var decoded = linkMaps.reduce(decodeMapping, str); return linkMaps.reduce(encodeMapping, decoded); } exports2.encodeLink = encodeLink; function encodeMappings(mtype) { var maps = [ ["&", "&"], ["<", "<"], [">", ">"], ['"', """], ["'", "'"], ["\\\\/", "/"], ["\\\\(", "("], ["\\\\)", ")"] ]; if (mtype === EncodeTarget.Html) { return maps.filter(function(_a3) { var v = _a3[0], _ = _a3[1]; return v.indexOf("(") === -1 && v.indexOf(")") === -1; }); } else { return maps.filter(function(_a3) { var v = _a3[0], _ = _a3[1]; return v.indexOf("/") === -1; }); } } function encodeMapping(str, mapping) { return str.replace(new RegExp(mapping[0], "g"), mapping[1]); } function decodeMapping(str, mapping) { return str.replace(new RegExp(mapping[1], "g"), mapping[0].replace("\\\\", "")); } } }); // node_modules/quill-delta-to-html-cb/dist/commonjs/helpers/array.js var require_array = __commonJS({ "node_modules/quill-delta-to-html-cb/dist/commonjs/helpers/array.js"(exports2) { "use strict"; init_tampermonkey(); Object.defineProperty(exports2, "__esModule", { value: true }); function preferSecond(arr2) { if (arr2.length === 0) { return null; } return arr2.length >= 2 ? arr2[1] : arr2[0]; } exports2.preferSecond = preferSecond; function flatten(arr2) { return arr2.reduce(function(pv, v) { return pv.concat(Array.isArray(v) ? flatten(v) : v); }, []); } exports2.flatten = flatten; function find(arr2, predicate) { if (Array.prototype.find) { return Array.prototype.find.call(arr2, predicate); } for (var i = 0; i < arr2.length; i++) { if (predicate(arr2[i])) return arr2[i]; } return void 0; } exports2.find = find; function groupConsecutiveElementsWhile(arr2, predicate) { var groups = []; var currElm, currGroup; for (var i = 0; i < arr2.length; i++) { currElm = arr2[i]; if (i > 0 && predicate(currElm, arr2[i - 1])) { currGroup = groups[groups.length - 1]; currGroup.push(currElm); } else { groups.push([currElm]); } } return groups.map(function(g) { return g.length === 1 ? g[0] : g; }); } exports2.groupConsecutiveElementsWhile = groupConsecutiveElementsWhile; function sliceFromReverseWhile(arr2, startIndex, predicate) { var result = { elements: [], sliceStartsAt: -1 }; for (var i = startIndex; i >= 0; i--) { if (!predicate(arr2[i])) { break; } result.sliceStartsAt = i; result.elements.unshift(arr2[i]); } return result; } exports2.sliceFromReverseWhile = sliceFromReverseWhile; function intersperse(arr2, item) { return arr2.reduce(function(pv, v, index) { pv.push(v); if (index < arr2.length - 1) { pv.push(item); } return pv; }, []); } exports2.intersperse = intersperse; } }); // node_modules/quill-delta-to-html-cb/dist/commonjs/OpAttributeSanitizer.js var require_OpAttributeSanitizer = __commonJS({ "node_modules/quill-delta-to-html-cb/dist/commonjs/OpAttributeSanitizer.js"(exports2) { "use strict"; init_tampermonkey(); var __importStar = exports2 && exports2.__importStar || function(mod2) { if (mod2 && mod2.__esModule) return mod2; var result = {}; if (mod2 != null) { for (var k in mod2) if (Object.hasOwnProperty.call(mod2, k)) result[k] = mod2[k]; } result["default"] = mod2; return result; }; Object.defineProperty(exports2, "__esModule", { value: true }); var value_types_1 = require_value_types(); var MentionSanitizer_1 = require_MentionSanitizer(); var url = __importStar(require_url()); var funcs_html_1 = require_funcs_html(); var array_1 = require_array(); var OpAttributeSanitizer = function() { function OpAttributeSanitizer2() { } OpAttributeSanitizer2.sanitize = function(dirtyAttrs, sanitizeOptions) { var cleanAttrs = {}; if (!dirtyAttrs || typeof dirtyAttrs !== "object") { return cleanAttrs; } var booleanAttrs = [ "bold", "italic", "underline", "strike", "code", "blockquote", "code-block", "renderAsBlock" ]; var colorAttrs = ["background", "color"]; var font = dirtyAttrs.font, size = dirtyAttrs.size, link = dirtyAttrs.link, script = dirtyAttrs.script, list = dirtyAttrs.list, header = dirtyAttrs.header, align = dirtyAttrs.align, direction = dirtyAttrs.direction, indent = dirtyAttrs.indent, mentions = dirtyAttrs.mentions, mention = dirtyAttrs.mention, width = dirtyAttrs.width, target = dirtyAttrs.target, rel = dirtyAttrs.rel; var codeBlock = dirtyAttrs["code-block"]; var sanitizedAttrs = booleanAttrs.concat(colorAttrs, [ "font", "size", "link", "script", "list", "header", "align", "direction", "indent", "mentions", "mention", "width", "target", "rel", "code-block" ]); booleanAttrs.forEach(function(prop) { var v = dirtyAttrs[prop]; if (v) { cleanAttrs[prop] = !!v; } }); colorAttrs.forEach(function(prop) { var val = dirtyAttrs[prop]; if (val && (OpAttributeSanitizer2.IsValidHexColor(val + "") || OpAttributeSanitizer2.IsValidColorLiteral(val + "") || OpAttributeSanitizer2.IsValidRGBColor(val + ""))) { cleanAttrs[prop] = val; } }); if (font && OpAttributeSanitizer2.IsValidFontName(font + "")) { cleanAttrs.font = font; } if (size && OpAttributeSanitizer2.IsValidSize(size + "")) { cleanAttrs.size = size; } if (width && OpAttributeSanitizer2.IsValidWidth(width + "")) { cleanAttrs.width = width; } if (link) { cleanAttrs.link = OpAttributeSanitizer2.sanitizeLinkUsingOptions(link + "", sanitizeOptions); } if (target && OpAttributeSanitizer2.isValidTarget(target)) { cleanAttrs.target = target; } if (rel && OpAttributeSanitizer2.IsValidRel(rel)) { cleanAttrs.rel = rel; } if (codeBlock) { if (OpAttributeSanitizer2.IsValidLang(codeBlock)) { cleanAttrs["code-block"] = codeBlock; } else { cleanAttrs["code-block"] = !!codeBlock; } } if (script === value_types_1.ScriptType.Sub || value_types_1.ScriptType.Super === script) { cleanAttrs.script = script; } if (list === value_types_1.ListType.Bullet || list === value_types_1.ListType.Ordered || list === value_types_1.ListType.Checked || list === value_types_1.ListType.Unchecked) { cleanAttrs.list = list; } if (Number(header)) { cleanAttrs.header = Math.min(Number(header), 6); } if (array_1.find([value_types_1.AlignType.Center, value_types_1.AlignType.Right, value_types_1.AlignType.Justify, value_types_1.AlignType.Left], function(a) { return a === align; })) { cleanAttrs.align = align; } if (direction === value_types_1.DirectionType.Rtl) { cleanAttrs.direction = direction; } if (indent && Number(indent)) { cleanAttrs.indent = Math.min(Number(indent), 30); } if (mentions && mention) { var sanitizedMention = MentionSanitizer_1.MentionSanitizer.sanitize(mention, sanitizeOptions); if (Object.keys(sanitizedMention).length > 0) { cleanAttrs.mentions = !!mentions; cleanAttrs.mention = mention; } } return Object.keys(dirtyAttrs).reduce(function(cleaned, k) { if (sanitizedAttrs.indexOf(k) === -1) { cleaned[k] = dirtyAttrs[k]; } return cleaned; }, cleanAttrs); }; OpAttributeSanitizer2.sanitizeLinkUsingOptions = function(link, options) { var sanitizerFn = function() { return void 0; }; if (options && typeof options.urlSanitizer === "function") { sanitizerFn = options.urlSanitizer; } var result = sanitizerFn(link); return typeof result === "string" ? result : funcs_html_1.encodeLink(url.sanitize(link)); }; OpAttributeSanitizer2.IsValidHexColor = function(colorStr) { return !!colorStr.match(/^#([0-9A-F]{6}|[0-9A-F]{3})\$/i); }; OpAttributeSanitizer2.IsValidColorLiteral = function(colorStr) { return !!colorStr.match(/^[a-z]{1,50}\$/i); }; OpAttributeSanitizer2.IsValidRGBColor = function(colorStr) { var re = /^rgb\\(((0|25[0-5]|2[0-4]\\d|1\\d\\d|0?\\d?\\d),\\s*){2}(0|25[0-5]|2[0-4]\\d|1\\d\\d|0?\\d?\\d)\\)\$/i; return !!colorStr.match(re); }; OpAttributeSanitizer2.IsValidFontName = function(fontName) { return !!fontName.match(/^[a-z\\s0-9\\- ]{1,30}\$/i); }; OpAttributeSanitizer2.IsValidSize = function(size) { return !!size.match(/^[a-z0-9\\-]{1,20}\$/i); }; OpAttributeSanitizer2.IsValidWidth = function(width) { return !!width.match(/^[0-9]*(px|em|%)?\$/); }; OpAttributeSanitizer2.isValidTarget = function(target) { return !!target.match(/^[_a-zA-Z0-9\\-]{1,50}\$/); }; OpAttributeSanitizer2.IsValidRel = function(relStr) { return !!relStr.match(/^[a-zA-Z\\s\\-]{1,250}\$/i); }; OpAttributeSanitizer2.IsValidLang = function(lang) { if (typeof lang === "boolean") { return true; } return !!lang.match(/^[a-zA-Z\\s\\-\\\\\\/\\+]{1,50}\$/i); }; return OpAttributeSanitizer2; }(); exports2.OpAttributeSanitizer = OpAttributeSanitizer; } }); // node_modules/quill-delta-to-html-cb/dist/commonjs/helpers/string.js var require_string = __commonJS({ "node_modules/quill-delta-to-html-cb/dist/commonjs/helpers/string.js"(exports2) { "use strict"; init_tampermonkey(); Object.defineProperty(exports2, "__esModule", { value: true }); function tokenizeWithNewLines(str) { var NewLine = "\\n"; if (str === NewLine) { return [str]; } var lines = str.split(NewLine); if (lines.length === 1) { return lines; } var lastIndex = lines.length - 1; return lines.reduce(function(pv, line, ind) { if (ind !== lastIndex) { if (line !== "") { pv = pv.concat(line, NewLine); } else { pv.push(NewLine); } } else if (line !== "") { pv.push(line); } return pv; }, []); } exports2.tokenizeWithNewLines = tokenizeWithNewLines; } }); // node_modules/quill-delta-to-html-cb/dist/commonjs/helpers/object.js var require_object2 = __commonJS({ "node_modules/quill-delta-to-html-cb/dist/commonjs/helpers/object.js"(exports2) { "use strict"; init_tampermonkey(); Object.defineProperty(exports2, "__esModule", { value: true }); function assign(target) { var sources = []; for (var _i = 1; _i < arguments.length; _i++) { sources[_i - 1] = arguments[_i]; } if (target == null) { throw new TypeError("Cannot convert undefined or null to object"); } var to = Object(target); for (var index = 0; index < sources.length; index++) { var nextSource = sources[index]; if (nextSource != null) { for (var nextKey in nextSource) { if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) { to[nextKey] = nextSource[nextKey]; } } } } return to; } exports2.assign = assign; } }); // node_modules/quill-delta-to-html-cb/dist/commonjs/InsertOpDenormalizer.js var require_InsertOpDenormalizer = __commonJS({ "node_modules/quill-delta-to-html-cb/dist/commonjs/InsertOpDenormalizer.js"(exports2) { "use strict"; init_tampermonkey(); var __importStar = exports2 && exports2.__importStar || function(mod2) { if (mod2 && mod2.__esModule) return mod2; var result = {}; if (mod2 != null) { for (var k in mod2) if (Object.hasOwnProperty.call(mod2, k)) result[k] = mod2[k]; } result["default"] = mod2; return result; }; Object.defineProperty(exports2, "__esModule", { value: true }); var value_types_1 = require_value_types(); var str = __importStar(require_string()); var obj = __importStar(require_object2()); var InsertOpDenormalizer = function() { function InsertOpDenormalizer2() { } InsertOpDenormalizer2.denormalize = function(op) { if (!op || typeof op !== "object") { return []; } if (typeof op.insert === "object" || op.insert === value_types_1.NewLine) { return [op]; } var newlinedArray = str.tokenizeWithNewLines(op.insert + ""); if (newlinedArray.length === 1) { return [op]; } var nlObj = obj.assign({}, op, { insert: value_types_1.NewLine }); return newlinedArray.map(function(line) { if (line === value_types_1.NewLine) { return nlObj; } return obj.assign({}, op, { insert: line }); }); }; return InsertOpDenormalizer2; }(); exports2.InsertOpDenormalizer = InsertOpDenormalizer; } }); // node_modules/quill-delta-to-html-cb/dist/commonjs/InsertOpsConverter.js var require_InsertOpsConverter = __commonJS({ "node_modules/quill-delta-to-html-cb/dist/commonjs/InsertOpsConverter.js"(exports2) { "use strict"; init_tampermonkey(); Object.defineProperty(exports2, "__esModule", { value: true }); var DeltaInsertOp_1 = require_DeltaInsertOp(); var value_types_1 = require_value_types(); var InsertData_1 = require_InsertData(); var OpAttributeSanitizer_1 = require_OpAttributeSanitizer(); var InsertOpDenormalizer_1 = require_InsertOpDenormalizer(); var InsertOpsConverter = function() { function InsertOpsConverter2() { } InsertOpsConverter2.convert = function(deltaOps, options) { if (!Array.isArray(deltaOps)) { return []; } var denormalizedOps = [].concat.apply([], deltaOps.map(InsertOpDenormalizer_1.InsertOpDenormalizer.denormalize)); var results = []; var insertVal, attributes; for (var _i = 0, denormalizedOps_1 = denormalizedOps; _i < denormalizedOps_1.length; _i++) { var op = denormalizedOps_1[_i]; if (!op.insert) { continue; } insertVal = InsertOpsConverter2.convertInsertVal(op.insert, options); if (!insertVal) { continue; } attributes = OpAttributeSanitizer_1.OpAttributeSanitizer.sanitize(op.attributes, options); results.push(new DeltaInsertOp_1.DeltaInsertOp(insertVal, attributes)); } return results; }; InsertOpsConverter2.convertInsertVal = function(insertPropVal, sanitizeOptions) { if (typeof insertPropVal === "string") { return new InsertData_1.InsertDataQuill(value_types_1.DataType.Text, insertPropVal); } if (!insertPropVal || typeof insertPropVal !== "object") { return null; } var keys = Object.keys(insertPropVal); if (!keys.length) { return null; } return value_types_1.DataType.Image in insertPropVal ? new InsertData_1.InsertDataQuill(value_types_1.DataType.Image, OpAttributeSanitizer_1.OpAttributeSanitizer.sanitizeLinkUsingOptions(insertPropVal[value_types_1.DataType.Image] + "", sanitizeOptions)) : value_types_1.DataType.Video in insertPropVal ? new InsertData_1.InsertDataQuill(value_types_1.DataType.Video, OpAttributeSanitizer_1.OpAttributeSanitizer.sanitizeLinkUsingOptions(insertPropVal[value_types_1.DataType.Video] + "", sanitizeOptions)) : value_types_1.DataType.Formula in insertPropVal ? new InsertData_1.InsertDataQuill(value_types_1.DataType.Formula, insertPropVal[value_types_1.DataType.Formula]) : new InsertData_1.InsertDataCustom(keys[0], insertPropVal[keys[0]]); }; return InsertOpsConverter2; }(); exports2.InsertOpsConverter = InsertOpsConverter; } }); // node_modules/quill-delta-to-html-cb/dist/commonjs/OpToHtmlConverter.js var require_OpToHtmlConverter = __commonJS({ "node_modules/quill-delta-to-html-cb/dist/commonjs/OpToHtmlConverter.js"(exports2) { "use strict"; init_tampermonkey(); var __importStar = exports2 && exports2.__importStar || function(mod2) { if (mod2 && mod2.__esModule) return mod2; var result = {}; if (mod2 != null) { for (var k in mod2) if (Object.hasOwnProperty.call(mod2, k)) result[k] = mod2[k]; } result["default"] = mod2; return result; }; Object.defineProperty(exports2, "__esModule", { value: true }); var funcs_html_1 = require_funcs_html(); var value_types_1 = require_value_types(); var obj = __importStar(require_object2()); var arr2 = __importStar(require_array()); var OpAttributeSanitizer_1 = require_OpAttributeSanitizer(); var DEFAULT_INLINE_FONTS = { serif: "font-family: Georgia, Times New Roman, serif", monospace: "font-family: Monaco, Courier New, monospace" }; exports2.DEFAULT_INLINE_STYLES = { font: function(value) { return DEFAULT_INLINE_FONTS[value] || "font-family:" + value; }, size: { small: "font-size: 0.75em", large: "font-size: 1.5em", huge: "font-size: 2.5em" }, indent: function(value, op) { var indentSize = parseInt(value, 10) * 3; var side = op.attributes["direction"] === "rtl" ? "right" : "left"; return "padding-" + side + ":" + indentSize + "em"; }, direction: function(value, op) { if (value === "rtl") { return "direction:rtl" + (op.attributes["align"] ? "" : "; text-align:inherit"); } else { return void 0; } } }; var OpToHtmlConverter = function() { function OpToHtmlConverter2(op, options) { this.op = op; this.options = obj.assign({}, { classPrefix: "ql", inlineStyles: void 0, encodeHtml: true, listItemTag: "li", paragraphTag: "p" }, options); } OpToHtmlConverter2.prototype.prefixClass = function(className) { if (!this.options.classPrefix) { return className + ""; } return this.options.classPrefix + "-" + className; }; OpToHtmlConverter2.prototype.getHtml = function() { var parts = this.getHtmlParts(); return parts.openingTag + parts.content + parts.closingTag; }; OpToHtmlConverter2.prototype.getHtmlParts = function() { var _this = this; if (this.op.isJustNewline() && !this.op.isContainerBlock()) { return { openingTag: "", closingTag: "", content: value_types_1.NewLine }; } var tags = this.getTags(), attrs = this.getTagAttributes(); if (!tags.length && attrs.length) { tags.push(this.options.textTag || "span"); } var beginTags = [], endTags = []; var imgTag = "img"; var isImageLink = function(tag2) { return tag2 === imgTag && !!_this.op.attributes.link; }; for (var _i = 0, tags_1 = tags; _i < tags_1.length; _i++) { var tag = tags_1[_i]; if (isImageLink(tag)) { beginTags.push(funcs_html_1.makeStartTag("a", this.getLinkAttrs())); } beginTags.push(funcs_html_1.makeStartTag(tag, attrs)); endTags.push(tag === "img" ? "" : funcs_html_1.makeEndTag(tag)); if (isImageLink(tag)) { endTags.push(funcs_html_1.makeEndTag("a")); } attrs = []; } endTags.reverse(); return { openingTag: beginTags.join(""), content: this.getContent(), closingTag: endTags.join("") }; }; OpToHtmlConverter2.prototype.getContent = function() { if (this.op.isContainerBlock()) { return ""; } if (this.op.isMentions()) { return this.op.insert.value; } var content = this.op.isFormula() || this.op.isText() ? this.op.insert.value : ""; return this.options.encodeHtml && funcs_html_1.encodeHtml(content) || content; }; OpToHtmlConverter2.prototype.getCssClasses = function() { var attrs = this.op.attributes; if (this.options.inlineStyles) { return []; } var propsArr = ["indent", "align", "direction", "font", "size"]; if (this.options.allowBackgroundClasses) { propsArr.push("background"); } return (this.getCustomCssClasses() || []).concat(propsArr.filter(function(prop) { return !!attrs[prop]; }).filter(function(prop) { return prop === "background" ? OpAttributeSanitizer_1.OpAttributeSanitizer.IsValidColorLiteral(attrs[prop]) : true; }).map(function(prop) { return prop + "-" + attrs[prop]; }).concat(this.op.isFormula() ? "formula" : []).concat(this.op.isVideo() ? "video" : []).concat(this.op.isImage() ? "image" : []).map(this.prefixClass.bind(this))); }; OpToHtmlConverter2.prototype.getCssStyles = function() { var _this = this; var attrs = this.op.attributes; var propsArr = [["color"]]; if (!!this.options.inlineStyles || !this.options.allowBackgroundClasses) { propsArr.push(["background", "background-color"]); } if (this.options.inlineStyles) { propsArr = propsArr.concat([ ["indent"], ["align", "text-align"], ["direction"], ["font", "font-family"], ["size"] ]); } return (this.getCustomCssStyles() || []).concat(propsArr.filter(function(item) { return !!attrs[item[0]]; }).map(function(item) { var attribute = item[0]; var attrValue = attrs[attribute]; var attributeConverter = _this.options.inlineStyles && _this.options.inlineStyles[attribute] || exports2.DEFAULT_INLINE_STYLES[attribute]; if (typeof attributeConverter === "object") { return attributeConverter[attrValue]; } else if (typeof attributeConverter === "function") { var converterFn = attributeConverter; return converterFn(attrValue, _this.op); } else { return arr2.preferSecond(item) + ":" + attrValue; } })).filter(function(item) { return item !== void 0; }); }; OpToHtmlConverter2.prototype.getTagAttributes = function() { if (this.op.attributes.code && !this.op.isLink()) { return []; } var makeAttr = this.makeAttr.bind(this); var customTagAttributes = this.getCustomTagAttributes(); var customAttr = customTagAttributes ? Object.keys(this.getCustomTagAttributes()).map(function(k) { return makeAttr(k, customTagAttributes[k]); }) : []; var classes = this.getCssClasses(); var tagAttrs = classes.length ? customAttr.concat([makeAttr("class", classes.join(" "))]) : customAttr; if (this.op.isImage()) { this.op.attributes.width && (tagAttrs = tagAttrs.concat(makeAttr("width", this.op.attributes.width))); return tagAttrs.concat(makeAttr("src", this.op.insert.value)); } if (this.op.isACheckList()) { return tagAttrs.concat(makeAttr("data-checked", this.op.isCheckedList() ? "true" : "false")); } if (this.op.isFormula()) { return tagAttrs; } if (this.op.isVideo()) { return tagAttrs.concat(makeAttr("frameborder", "0"), makeAttr("allowfullscreen", "true"), makeAttr("src", this.op.insert.value)); } if (this.op.isMentions()) { var mention = this.op.attributes.mention; if (mention.class) { tagAttrs = tagAttrs.concat(makeAttr("class", mention.class)); } if (mention["end-point"] && mention.slug) { tagAttrs = tagAttrs.concat(makeAttr("href", mention["end-point"] + "/" + mention.slug)); } else { tagAttrs = tagAttrs.concat(makeAttr("href", "about:blank")); } if (mention.target) { tagAttrs = tagAttrs.concat(makeAttr("target", mention.target)); } return tagAttrs; } var styles = this.getCssStyles(); if (styles.length) { tagAttrs.push(makeAttr("style", styles.join(";"))); } if (this.op.isCodeBlock() && typeof this.op.attributes["code-block"] === "string") { return tagAttrs.concat(makeAttr("data-language", this.op.attributes["code-block"])); } if (this.op.isContainerBlock()) { return tagAttrs; } if (this.op.isLink()) { tagAttrs = tagAttrs.concat(this.getLinkAttrs()); } return tagAttrs; }; OpToHtmlConverter2.prototype.makeAttr = function(k, v) { return { key: k, value: v }; }; OpToHtmlConverter2.prototype.getLinkAttrs = function() { var tagAttrs = []; var targetForAll = OpAttributeSanitizer_1.OpAttributeSanitizer.isValidTarget(this.options.linkTarget || "") ? this.options.linkTarget : void 0; var relForAll = OpAttributeSanitizer_1.OpAttributeSanitizer.IsValidRel(this.options.linkRel || "") ? this.options.linkRel : void 0; var target = this.op.attributes.target || targetForAll; var rel = this.op.attributes.rel || relForAll; return tagAttrs.concat(this.makeAttr("href", this.op.attributes.link)).concat(target ? this.makeAttr("target", target) : []).concat(rel ? this.makeAttr("rel", rel) : []); }; OpToHtmlConverter2.prototype.getCustomTag = function(format) { if (this.options.customTag && typeof this.options.customTag === "function") { return this.options.customTag.apply(null, [format, this.op]); } }; OpToHtmlConverter2.prototype.getCustomTagAttributes = function() { if (this.options.customTagAttributes && typeof this.options.customTagAttributes === "function") { return this.options.customTagAttributes.apply(null, [this.op]); } }; OpToHtmlConverter2.prototype.getCustomCssClasses = function() { if (this.options.customCssClasses && typeof this.options.customCssClasses === "function") { var res = this.options.customCssClasses.apply(null, [this.op]); if (res) { return Array.isArray(res) ? res : [res]; } } }; OpToHtmlConverter2.prototype.getCustomCssStyles = function() { if (this.options.customCssStyles && typeof this.options.customCssStyles === "function") { var res = this.options.customCssStyles.apply(null, [this.op]); if (res) { return Array.isArray(res) ? res : [res]; } } }; OpToHtmlConverter2.prototype.getTags = function() { var _this = this; var attrs = this.op.attributes; if (!this.op.isText()) { return [ this.op.isVideo() ? "iframe" : this.op.isImage() ? "img" : "span" ]; } var positionTag = this.options.paragraphTag || "p"; var blocks = [ ["blockquote"], ["code-block", "pre"], ["list", this.options.listItemTag], ["header"], ["align", positionTag], ["direction", positionTag], ["indent", positionTag] ]; for (var _i = 0, blocks_1 = blocks; _i < blocks_1.length; _i++) { var item = blocks_1[_i]; var firstItem = item[0]; if (attrs[firstItem]) { var customTag = this.getCustomTag(firstItem); return customTag ? [customTag] : firstItem === "header" ? ["h" + attrs[firstItem]] : [arr2.preferSecond(item)]; } } if (this.op.isCustomTextBlock()) { var customTag = this.getCustomTag("renderAsBlock"); return customTag ? [customTag] : [positionTag]; } var customTagsMap = Object.keys(attrs).reduce(function(res, it) { var customTag2 = _this.getCustomTag(it); if (customTag2) { res[it] = customTag2; } return res; }, {}); var inlineTags = [ ["link", "a"], ["mentions", "a"], ["script"], ["bold", "strong"], ["italic", "em"], ["strike", "s"], ["underline", "u"], ["code"] ]; return inlineTags.filter(function(item2) { return !!attrs[item2[0]]; }).concat(Object.keys(customTagsMap).filter(function(t) { return !inlineTags.some(function(it) { return it[0] == t; }); }).map(function(t) { return [t, customTagsMap[t]]; })).map(function(item2) { return customTagsMap[item2[0]] ? customTagsMap[item2[0]] : item2[0] === "script" ? attrs[item2[0]] === value_types_1.ScriptType.Sub ? "sub" : "sup" : arr2.preferSecond(item2); }); }; return OpToHtmlConverter2; }(); exports2.OpToHtmlConverter = OpToHtmlConverter; } }); // node_modules/quill-delta-to-html-cb/dist/commonjs/grouper/group-types.js var require_group_types = __commonJS({ "node_modules/quill-delta-to-html-cb/dist/commonjs/grouper/group-types.js"(exports2) { "use strict"; init_tampermonkey(); var __extends = exports2 && exports2.__extends || function() { var extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d, b) { d.__proto__ = b; } || function(d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; return function(d, b) { extendStatics(d, b); function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; }(); Object.defineProperty(exports2, "__esModule", { value: true }); var InlineGroup = /* @__PURE__ */ function() { function InlineGroup2(ops) { this.ops = ops; } return InlineGroup2; }(); exports2.InlineGroup = InlineGroup; var SingleItem = /* @__PURE__ */ function() { function SingleItem2(op) { this.op = op; } return SingleItem2; }(); var VideoItem = function(_super) { __extends(VideoItem2, _super); function VideoItem2() { return _super !== null && _super.apply(this, arguments) || this; } return VideoItem2; }(SingleItem); exports2.VideoItem = VideoItem; var BlotBlock = function(_super) { __extends(BlotBlock2, _super); function BlotBlock2() { return _super !== null && _super.apply(this, arguments) || this; } return BlotBlock2; }(SingleItem); exports2.BlotBlock = BlotBlock; var BlockGroup = /* @__PURE__ */ function() { function BlockGroup2(op, ops) { this.op = op; this.ops = ops; } return BlockGroup2; }(); exports2.BlockGroup = BlockGroup; var ListGroup = /* @__PURE__ */ function() { function ListGroup2(items) { this.items = items; } return ListGroup2; }(); exports2.ListGroup = ListGroup; var ListItem = /* @__PURE__ */ function() { function ListItem2(item, innerList) { if (innerList === void 0) { innerList = null; } this.item = item; this.innerList = innerList; } return ListItem2; }(); exports2.ListItem = ListItem; var TableGroup = /* @__PURE__ */ function() { function TableGroup2(rows) { this.rows = rows; } return TableGroup2; }(); exports2.TableGroup = TableGroup; var TableRow = /* @__PURE__ */ function() { function TableRow2(cells) { this.cells = cells; } return TableRow2; }(); exports2.TableRow = TableRow; var TableCell = /* @__PURE__ */ function() { function TableCell2(item) { this.item = item; } return TableCell2; }(); exports2.TableCell = TableCell; } }); // node_modules/quill-delta-to-html-cb/dist/commonjs/grouper/Grouper.js var require_Grouper = __commonJS({ "node_modules/quill-delta-to-html-cb/dist/commonjs/grouper/Grouper.js"(exports2) { "use strict"; init_tampermonkey(); Object.defineProperty(exports2, "__esModule", { value: true }); var DeltaInsertOp_1 = require_DeltaInsertOp(); var array_1 = require_array(); var group_types_1 = require_group_types(); var Grouper = function() { function Grouper2() { } Grouper2.pairOpsWithTheirBlock = function(ops) { var result = []; var canBeInBlock = function(op2) { return !(op2.isJustNewline() || op2.isCustomEmbedBlock() || op2.isVideo() || op2.isContainerBlock()); }; var isInlineData = function(op2) { return op2.isInline(); }; var lastInd = ops.length - 1; var opsSlice; for (var i = lastInd; i >= 0; i--) { var op = ops[i]; if (op.isVideo()) { result.push(new group_types_1.VideoItem(op)); } else if (op.isCustomEmbedBlock()) { result.push(new group_types_1.BlotBlock(op)); } else if (op.isContainerBlock()) { opsSlice = array_1.sliceFromReverseWhile(ops, i - 1, canBeInBlock); result.push(new group_types_1.BlockGroup(op, opsSlice.elements)); i = opsSlice.sliceStartsAt > -1 ? opsSlice.sliceStartsAt : i; } else { opsSlice = array_1.sliceFromReverseWhile(ops, i - 1, isInlineData); result.push(new group_types_1.InlineGroup(opsSlice.elements.concat(op))); i = opsSlice.sliceStartsAt > -1 ? opsSlice.sliceStartsAt : i; } } result.reverse(); return result; }; Grouper2.groupConsecutiveSameStyleBlocks = function(groups, blocksOf) { if (blocksOf === void 0) { blocksOf = { header: true, codeBlocks: true, blockquotes: true, customBlocks: true }; } return array_1.groupConsecutiveElementsWhile(groups, function(g, gPrev) { if (!(g instanceof group_types_1.BlockGroup) || !(gPrev instanceof group_types_1.BlockGroup)) { return false; } return blocksOf.codeBlocks && Grouper2.areBothCodeblocksWithSameLang(g, gPrev) || blocksOf.blockquotes && Grouper2.areBothBlockquotesWithSameAdi(g, gPrev) || blocksOf.header && Grouper2.areBothSameHeadersWithSameAdi(g, gPrev) || blocksOf.customBlocks && Grouper2.areBothCustomBlockWithSameAttr(g, gPrev); }); }; Grouper2.reduceConsecutiveSameStyleBlocksToOne = function(groups) { var newLineOp = DeltaInsertOp_1.DeltaInsertOp.createNewLineOp(); return groups.map(function(elm) { if (!Array.isArray(elm)) { if (elm instanceof group_types_1.BlockGroup && !elm.ops.length) { elm.ops.push(newLineOp); } return elm; } var groupsLastInd = elm.length - 1; elm[0].ops = array_1.flatten(elm.map(function(g, i) { if (!g.ops.length) { return [newLineOp]; } return g.ops.concat(i < groupsLastInd ? [newLineOp] : []); })); return elm[0]; }); }; Grouper2.areBothCodeblocksWithSameLang = function(g1, gOther) { return g1.op.isCodeBlock() && gOther.op.isCodeBlock() && g1.op.hasSameLangAs(gOther.op); }; Grouper2.areBothSameHeadersWithSameAdi = function(g1, gOther) { return g1.op.isSameHeaderAs(gOther.op) && g1.op.hasSameAdiAs(gOther.op); }; Grouper2.areBothBlockquotesWithSameAdi = function(g, gOther) { return g.op.isBlockquote() && gOther.op.isBlockquote() && g.op.hasSameAdiAs(gOther.op); }; Grouper2.areBothCustomBlockWithSameAttr = function(g, gOther) { return g.op.isCustomTextBlock() && gOther.op.isCustomTextBlock() && g.op.hasSameAttr(gOther.op); }; return Grouper2; }(); exports2.Grouper = Grouper; } }); // node_modules/quill-delta-to-html-cb/dist/commonjs/grouper/ListNester.js var require_ListNester = __commonJS({ "node_modules/quill-delta-to-html-cb/dist/commonjs/grouper/ListNester.js"(exports2) { "use strict"; init_tampermonkey(); Object.defineProperty(exports2, "__esModule", { value: true }); var group_types_1 = require_group_types(); var array_1 = require_array(); var ListNester = function() { function ListNester2() { } ListNester2.prototype.nest = function(groups) { var _this = this; var listBlocked = this.convertListBlocksToListGroups(groups); var groupedByListGroups = this.groupConsecutiveListGroups(listBlocked); var nested = array_1.flatten(groupedByListGroups.map(function(group2) { if (!Array.isArray(group2)) { return group2; } return _this.nestListSection(group2); })); var groupRootLists = array_1.groupConsecutiveElementsWhile(nested, function(curr, prev) { if (!(curr instanceof group_types_1.ListGroup && prev instanceof group_types_1.ListGroup)) { return false; } return curr.items[0].item.op.isSameListAs(prev.items[0].item.op); }); return groupRootLists.map(function(v) { if (!Array.isArray(v)) { return v; } var litems = v.map(function(g) { return g.items; }); return new group_types_1.ListGroup(array_1.flatten(litems)); }); }; ListNester2.prototype.convertListBlocksToListGroups = function(items) { var grouped = array_1.groupConsecutiveElementsWhile(items, function(g, gPrev) { return g instanceof group_types_1.BlockGroup && gPrev instanceof group_types_1.BlockGroup && g.op.isList() && gPrev.op.isList() && g.op.isSameListAs(gPrev.op) && g.op.hasSameIndentationAs(gPrev.op); }); return grouped.map(function(item) { if (!Array.isArray(item)) { if (item instanceof group_types_1.BlockGroup && item.op.isList()) { return new group_types_1.ListGroup([new group_types_1.ListItem(item)]); } return item; } return new group_types_1.ListGroup(item.map(function(g) { return new group_types_1.ListItem(g); })); }); }; ListNester2.prototype.groupConsecutiveListGroups = function(items) { return array_1.groupConsecutiveElementsWhile(items, function(curr, prev) { return curr instanceof group_types_1.ListGroup && prev instanceof group_types_1.ListGroup; }); }; ListNester2.prototype.nestListSection = function(sectionItems) { var _this = this; var indentGroups = this.groupByIndent(sectionItems); Object.keys(indentGroups).map(Number).sort().reverse().forEach(function(indent) { indentGroups[indent].forEach(function(lg) { var idx = sectionItems.indexOf(lg); if (_this.placeUnderParent(lg, sectionItems.slice(0, idx))) { sectionItems.splice(idx, 1); } }); }); return sectionItems; }; ListNester2.prototype.groupByIndent = function(items) { return items.reduce(function(pv, cv) { var indent = cv.items[0].item.op.attributes.indent; if (indent) { pv[indent] = pv[indent] || []; pv[indent].push(cv); } return pv; }, {}); }; ListNester2.prototype.placeUnderParent = function(target, items) { for (var i = items.length - 1; i >= 0; i--) { var elm = items[i]; if (target.items[0].item.op.hasHigherIndentThan(elm.items[0].item.op)) { var parent = elm.items[elm.items.length - 1]; if (parent.innerList) { parent.innerList.items = parent.innerList.items.concat(target.items); } else { parent.innerList = target; } return true; } } return false; }; return ListNester2; }(); exports2.ListNester = ListNester; } }); // node_modules/quill-delta-to-html-cb/dist/commonjs/grouper/TableGrouper.js var require_TableGrouper = __commonJS({ "node_modules/quill-delta-to-html-cb/dist/commonjs/grouper/TableGrouper.js"(exports2) { "use strict"; init_tampermonkey(); Object.defineProperty(exports2, "__esModule", { value: true }); var group_types_1 = require_group_types(); var array_1 = require_array(); var TableGrouper = function() { function TableGrouper2() { } TableGrouper2.prototype.group = function(groups) { var tableBlocked = this.convertTableBlocksToTableGroups(groups); return tableBlocked; }; TableGrouper2.prototype.convertTableBlocksToTableGroups = function(items) { var _this = this; var grouped = array_1.groupConsecutiveElementsWhile(items, function(g, gPrev) { return g instanceof group_types_1.BlockGroup && gPrev instanceof group_types_1.BlockGroup && g.op.isTable() && gPrev.op.isTable(); }); return grouped.map(function(item) { if (!Array.isArray(item)) { if (item instanceof group_types_1.BlockGroup && item.op.isTable()) { return new group_types_1.TableGroup([new group_types_1.TableRow([new group_types_1.TableCell(item)])]); } return item; } return new group_types_1.TableGroup(_this.convertTableBlocksToTableRows(item)); }); }; TableGrouper2.prototype.convertTableBlocksToTableRows = function(items) { var grouped = array_1.groupConsecutiveElementsWhile(items, function(g, gPrev) { return g instanceof group_types_1.BlockGroup && gPrev instanceof group_types_1.BlockGroup && g.op.isTable() && gPrev.op.isTable() && g.op.isSameTableRowAs(gPrev.op); }); return grouped.map(function(item) { return new group_types_1.TableRow(Array.isArray(item) ? item.map(function(it) { return new group_types_1.TableCell(it); }) : [new group_types_1.TableCell(item)]); }); }; return TableGrouper2; }(); exports2.TableGrouper = TableGrouper; } }); // node_modules/quill-delta-to-html-cb/dist/commonjs/QuillDeltaToHtmlConverter.js var require_QuillDeltaToHtmlConverter = __commonJS({ "node_modules/quill-delta-to-html-cb/dist/commonjs/QuillDeltaToHtmlConverter.js"(exports2) { "use strict"; init_tampermonkey(); var __importStar = exports2 && exports2.__importStar || function(mod2) { if (mod2 && mod2.__esModule) return mod2; var result = {}; if (mod2 != null) { for (var k in mod2) if (Object.hasOwnProperty.call(mod2, k)) result[k] = mod2[k]; } result["default"] = mod2; return result; }; Object.defineProperty(exports2, "__esModule", { value: true }); var InsertOpsConverter_1 = require_InsertOpsConverter(); var OpToHtmlConverter_1 = require_OpToHtmlConverter(); var Grouper_1 = require_Grouper(); var group_types_1 = require_group_types(); var ListNester_1 = require_ListNester(); var funcs_html_1 = require_funcs_html(); var obj = __importStar(require_object2()); var value_types_1 = require_value_types(); var TableGrouper_1 = require_TableGrouper(); var BrTag = "
"; var QuillDeltaToHtmlConverter2 = function() { function QuillDeltaToHtmlConverter3(deltaOps, options) { this.rawDeltaOps = []; this.callbacks = {}; this.options = obj.assign({ paragraphTag: "p", textTag: "span", encodeHtml: true, classPrefix: "ql", inlineStyles: false, multiLineBlockquote: true, multiLineHeader: true, multiLineCodeblock: true, multiLineParagraph: true, multiLineCustomBlock: true, allowBackgroundClasses: false, linkTarget: "_blank" }, options, { orderedListTag: "ol", bulletListTag: "ul", listItemTag: "li" }); var inlineStyles; if (!this.options.inlineStyles) { inlineStyles = void 0; } else if (typeof this.options.inlineStyles === "object") { inlineStyles = this.options.inlineStyles; } else { inlineStyles = {}; } this.converterOptions = { encodeHtml: this.options.encodeHtml, classPrefix: this.options.classPrefix, inlineStyles, listItemTag: this.options.listItemTag, paragraphTag: this.options.paragraphTag, textTag: this.options.textTag, linkRel: this.options.linkRel, linkTarget: this.options.linkTarget, allowBackgroundClasses: this.options.allowBackgroundClasses, customTag: this.options.customTag, customTagAttributes: this.options.customTagAttributes, customCssClasses: this.options.customCssClasses, customCssStyles: this.options.customCssStyles }; this.rawDeltaOps = deltaOps; } QuillDeltaToHtmlConverter3.prototype._getListTag = function(op) { return op.isOrderedList() ? this.options.orderedListTag + "" : op.isBulletList() ? this.options.bulletListTag + "" : op.isCheckedList() ? this.options.bulletListTag + "" : op.isUncheckedList() ? this.options.bulletListTag + "" : ""; }; QuillDeltaToHtmlConverter3.prototype.getGroupedOps = function() { var deltaOps = InsertOpsConverter_1.InsertOpsConverter.convert(this.rawDeltaOps, this.options); var pairedOps = Grouper_1.Grouper.pairOpsWithTheirBlock(deltaOps); var groupedSameStyleBlocks = Grouper_1.Grouper.groupConsecutiveSameStyleBlocks(pairedOps, { blockquotes: !!this.options.multiLineBlockquote, header: !!this.options.multiLineHeader, codeBlocks: !!this.options.multiLineCodeblock, customBlocks: !!this.options.multiLineCustomBlock }); var groupedOps = Grouper_1.Grouper.reduceConsecutiveSameStyleBlocksToOne(groupedSameStyleBlocks); var tableGrouper = new TableGrouper_1.TableGrouper(); groupedOps = tableGrouper.group(groupedOps); var listNester = new ListNester_1.ListNester(); return listNester.nest(groupedOps); }; QuillDeltaToHtmlConverter3.prototype.convert = function() { var _this = this; var groups = this.getGroupedOps(); return groups.map(function(group2) { if (group2 instanceof group_types_1.ListGroup) { return _this._renderWithCallbacks(value_types_1.GroupType.List, group2, function() { return _this._renderList(group2); }); } else if (group2 instanceof group_types_1.TableGroup) { return _this._renderWithCallbacks(value_types_1.GroupType.Table, group2, function() { return _this._renderTable(group2); }); } else if (group2 instanceof group_types_1.BlockGroup) { var g = group2; return _this._renderWithCallbacks(value_types_1.GroupType.Block, group2, function() { return _this._renderBlock(g.op, g.ops); }); } else if (group2 instanceof group_types_1.BlotBlock) { return _this._renderCustom(group2.op, null); } else if (group2 instanceof group_types_1.VideoItem) { return _this._renderWithCallbacks(value_types_1.GroupType.Video, group2, function() { var g2 = group2; var converter = new OpToHtmlConverter_1.OpToHtmlConverter(g2.op, _this.converterOptions); return converter.getHtml(); }); } else { return _this._renderWithCallbacks(value_types_1.GroupType.InlineGroup, group2, function() { return _this._renderInlines(group2.ops, true); }); } }).join(""); }; QuillDeltaToHtmlConverter3.prototype._renderWithCallbacks = function(groupType, group2, myRenderFn) { var html = ""; var beforeCb = this.callbacks["beforeRender_cb"]; html = typeof beforeCb === "function" ? beforeCb.apply(null, [groupType, group2]) : ""; if (!html) { html = myRenderFn(); } var afterCb = this.callbacks["afterRender_cb"]; html = typeof afterCb === "function" ? afterCb.apply(null, [groupType, html]) : html; return html; }; QuillDeltaToHtmlConverter3.prototype._renderList = function(list) { var _this = this; var firstItem = list.items[0]; return funcs_html_1.makeStartTag(this._getListTag(firstItem.item.op)) + list.items.map(function(li) { return _this._renderListItem(li); }).join("") + funcs_html_1.makeEndTag(this._getListTag(firstItem.item.op)); }; QuillDeltaToHtmlConverter3.prototype._renderListItem = function(li) { li.item.op.attributes.indent = 0; var converter = new OpToHtmlConverter_1.OpToHtmlConverter(li.item.op, this.converterOptions); var parts = converter.getHtmlParts(); var liElementsHtml = this._renderInlines(li.item.ops, false); return parts.openingTag + liElementsHtml + (li.innerList ? this._renderList(li.innerList) : "") + parts.closingTag; }; QuillDeltaToHtmlConverter3.prototype._renderTable = function(table) { var _this = this; return funcs_html_1.makeStartTag("table") + funcs_html_1.makeStartTag("tbody") + table.rows.map(function(row) { return _this._renderTableRow(row); }).join("") + funcs_html_1.makeEndTag("tbody") + funcs_html_1.makeEndTag("table"); }; QuillDeltaToHtmlConverter3.prototype._renderTableRow = function(row) { var _this = this; return funcs_html_1.makeStartTag("tr") + row.cells.map(function(cell) { return _this._renderTableCell(cell); }).join("") + funcs_html_1.makeEndTag("tr"); }; QuillDeltaToHtmlConverter3.prototype._renderTableCell = function(cell) { var converter = new OpToHtmlConverter_1.OpToHtmlConverter(cell.item.op, this.converterOptions); var parts = converter.getHtmlParts(); var cellElementsHtml = this._renderInlines(cell.item.ops, false); return funcs_html_1.makeStartTag("td", { key: "data-row", value: cell.item.op.attributes.table }) + parts.openingTag + cellElementsHtml + parts.closingTag + funcs_html_1.makeEndTag("td"); }; QuillDeltaToHtmlConverter3.prototype._renderBlock = function(bop, ops) { var _this = this; var converter = new OpToHtmlConverter_1.OpToHtmlConverter(bop, this.converterOptions); var htmlParts = converter.getHtmlParts(); if (bop.isCodeBlock()) { return htmlParts.openingTag + funcs_html_1.encodeHtml(ops.map(function(iop) { return iop.isCustomEmbed() ? _this._renderCustom(iop, bop) : iop.insert.value; }).join("")) + htmlParts.closingTag; } var inlines = ops.map(function(op) { return _this._renderInline(op, bop); }).join(""); return htmlParts.openingTag + (inlines || BrTag) + htmlParts.closingTag; }; QuillDeltaToHtmlConverter3.prototype._renderInlines = function(ops, isInlineGroup) { var _this = this; if (isInlineGroup === void 0) { isInlineGroup = true; } var opsLen = ops.length - 1; var html = ops.map(function(op, i) { if (i > 0 && i === opsLen && op.isJustNewline()) { return ""; } return _this._renderInline(op, null); }).join(""); if (!isInlineGroup) { return html; } var startParaTag = funcs_html_1.makeStartTag(this.options.paragraphTag); var endParaTag = funcs_html_1.makeEndTag(this.options.paragraphTag); if (html === BrTag || this.options.multiLineParagraph) { return startParaTag + html + endParaTag; } return startParaTag + html.split(BrTag).map(function(v) { return v === "" ? BrTag : v; }).join(endParaTag + startParaTag) + endParaTag; }; QuillDeltaToHtmlConverter3.prototype._renderInline = function(op, contextOp) { if (op.isCustomEmbed()) { return this._renderCustom(op, contextOp); } var converter = new OpToHtmlConverter_1.OpToHtmlConverter(op, this.converterOptions); return converter.getHtml().replace(/\\n/g, BrTag); }; QuillDeltaToHtmlConverter3.prototype._renderCustom = function(op, contextOp) { var renderCb = this.callbacks["renderCustomOp_cb"]; if (typeof renderCb === "function") { return renderCb.apply(null, [op, contextOp]); } return ""; }; QuillDeltaToHtmlConverter3.prototype.beforeRender = function(cb) { if (typeof cb === "function") { this.callbacks["beforeRender_cb"] = cb; } }; QuillDeltaToHtmlConverter3.prototype.afterRender = function(cb) { if (typeof cb === "function") { this.callbacks["afterRender_cb"] = cb; } }; QuillDeltaToHtmlConverter3.prototype.renderCustomWith = function(cb) { this.callbacks["renderCustomOp_cb"] = cb; }; return QuillDeltaToHtmlConverter3; }(); exports2.QuillDeltaToHtmlConverter = QuillDeltaToHtmlConverter2; } }); // node_modules/quill-delta-to-html-cb/dist/commonjs/main.js var require_main = __commonJS({ "node_modules/quill-delta-to-html-cb/dist/commonjs/main.js"(exports2) { "use strict"; init_tampermonkey(); Object.defineProperty(exports2, "__esModule", { value: true }); var QuillDeltaToHtmlConverter_1 = require_QuillDeltaToHtmlConverter(); exports2.QuillDeltaToHtmlConverter = QuillDeltaToHtmlConverter_1.QuillDeltaToHtmlConverter; var OpToHtmlConverter_1 = require_OpToHtmlConverter(); exports2.OpToHtmlConverter = OpToHtmlConverter_1.OpToHtmlConverter; var group_types_1 = require_group_types(); exports2.InlineGroup = group_types_1.InlineGroup; exports2.VideoItem = group_types_1.VideoItem; exports2.BlockGroup = group_types_1.BlockGroup; exports2.ListGroup = group_types_1.ListGroup; exports2.ListItem = group_types_1.ListItem; exports2.BlotBlock = group_types_1.BlotBlock; var DeltaInsertOp_1 = require_DeltaInsertOp(); exports2.DeltaInsertOp = DeltaInsertOp_1.DeltaInsertOp; var InsertData_1 = require_InsertData(); exports2.InsertDataQuill = InsertData_1.InsertDataQuill; exports2.InsertDataCustom = InsertData_1.InsertDataCustom; var value_types_1 = require_value_types(); exports2.NewLine = value_types_1.NewLine; exports2.ListType = value_types_1.ListType; exports2.ScriptType = value_types_1.ScriptType; exports2.DirectionType = value_types_1.DirectionType; exports2.AlignType = value_types_1.AlignType; exports2.DataType = value_types_1.DataType; exports2.GroupType = value_types_1.GroupType; } }); // src/index.ts init_tampermonkey(); // src/core/bilibili-old.ts init_tampermonkey(); var import_md52 = __toESM(require_md5()); // src/utils/base64.ts init_tampermonkey(); var base64 = new class { /** * Base64编码 * @param str 原始字符串 * @returns 编码结果 */ encode(str) { return btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g, function(match, p1) { return String.fromCharCode("0x" + p1); })); } /** * Base64解码 * @param str 原始字符串 * @returns 解码结果 */ decode(str) { return decodeURIComponent(atob(str).split("").map(function(c) { return "%" + ("00" + c.charCodeAt(0).toString(16)).slice(-2); }).join("")); } /** * Base64编码 * @param buffer Uint8Array * @returns 编码结果 */ encodeFromUint8Array(buffer) { return btoa(String.fromCharCode(...buffer)); } /** * Base64编码 * @param str * @returns */ decodeToUint8Array(str) { return new Uint8Array(atob(str).split("").map((d) => d.charCodeAt(0))); } }(); // src/utils/debug.ts init_tampermonkey(); // src/utils/format/time.ts init_tampermonkey(); // src/utils/format/integer.ts init_tampermonkey(); function integerFormat(num, byte = 2) { return num < 10 ** byte ? (Array(byte).join("0") + num).slice(-1 * byte) : num; } // src/utils/format/time.ts function timeFormat(time = (/* @__PURE__ */ new Date()).getTime(), type) { const date = new Date(time); const arr2 = date.toLocaleString().split(" "); const day = arr2[0].split("/"); day[1] = integerFormat(day[1], 2); day[2] = integerFormat(day[2], 2); return type ? day.join("-") + " " + arr2[1] : arr2[1]; } // src/utils/debug.ts var group = { /** 分组层次 */ i: 0, /** 分组栈 */ call: [] }; function debug(...data) { group.call.push(console.log.bind(console, \`%c[\${timeFormat()}]\`, "color: blue;", ...arguments)); !group.i && setTimeout(group.call.shift()); return debug; } debug.assert = function(condition, ...data) { group.call.push(console.assert.bind(console, \`[\${timeFormat()}]\`, ...arguments)); !group.i && setTimeout(group.call.shift()); return debug; }; debug.clear = function() { group.i = 0; group.call = []; setTimeout(console.clear.bind(console)); return debug; }; debug.debug = function(...data) { group.call.push(console.debug.bind(console, \`[\${timeFormat()}]\`, ...arguments)); !group.i && setTimeout(group.call.shift()); return debug; }; debug.error = function(...data) { group.call.push(console.error.bind(console, \`[\${timeFormat()}]\`, ...arguments)); !group.i && setTimeout(group.call.shift()); return debug; }; debug.group = function(...data) { group.i++; group.call.push(console.group.bind(console, \`[\${timeFormat()}]\`, ...arguments)); return debug; }; debug.groupCollapsed = function(...data) { group.i++; group.call.push(console.groupCollapsed.bind(console, \`[\${timeFormat()}]\`, ...arguments)); return debug; }; debug.groupEnd = function() { if (group.i) { group.i--; group.call.push(console.groupEnd.bind(console)); !group.i && (group.call.push(() => group.call = []), group.call.forEach((d) => setTimeout(d))); } return debug; }; debug.info = function(...data) { group.call.push(console.info.bind(console, \`%c[\${timeFormat()}]\`, "color: blue;", ...arguments)); !group.i && setTimeout(group.call.shift()); return debug; }; debug.log = function(...data) { group.call.push(console.log.bind(console, \`%c[\${timeFormat()}]\`, "color: blue;", ...arguments)); !group.i && setTimeout(group.call.shift()); return debug; }; debug.table = function(tabularData, properties) { group.call.push(console.table.bind(console, ...arguments)); !group.i && setTimeout(group.call.shift()); return debug; }; debug.time = function(label) { console.time(label); return debug; }; debug.timeEnd = function(label) { console.timeEnd(label); return debug; }; debug.timeLog = function(label, ...data) { console.timeLog(label, \`[\${timeFormat()}]\`, ...data); return debug; }; debug.trace = function(...data) { group.call.push(console.trace.bind(console, ...arguments)); !group.i && setTimeout(group.call.shift()); return debug; }; debug.warn = function(...data) { group.call.push(console.warn.bind(console, \`[\${timeFormat()}]\`, ...arguments)); !group.i && setTimeout(group.call.shift()); return debug; }; // src/utils/format/url.ts init_tampermonkey(); // src/utils/typeof.ts init_tampermonkey(); var isArray = Array.isArray; var isObject = (val) => val !== null && typeof val === "object"; var isNumber = (val) => !isNaN(parseFloat(val)) && isFinite(val); // src/utils/format/url.ts var URL2 = class { /** 锚 */ hash; /** 基链 */ base; /** 参数对象。结果会格式化\`undefined\`\`null\`\`NaN\`等特殊值,但不会处理数字,以免丢失精度。 */ params = {}; /** 参数链(不含\`?\`) */ get param() { return Object.entries(this.params).reduce((s, d) => { return s += \`\${s ? "&" : ""}\${d[0]}=\${d[1]}\`; }, ""); } /** 提取URL参数 */ constructor(url) { const arr1 = url.split("#"); let str = arr1.shift(); this.hash = arr1.join("#"); (this.hash || url.includes("#")) && (this.hash = \`#\${this.hash}\`); const arr2 = str.split("?"); this.base = arr2.shift(); str = arr2.join("?"); if (str) { str.split("&").forEach((d) => { const arr3 = d.split("="); const key = arr3.shift(); if (key) { let value = arr3.join("=") || ""; try { if (!isNumber(value)) { value = JSON.parse(value); } } catch { value === "undefined" && (value = void 0); value === "NaN" && (value = NaN); } this.params[key] = value; } }); } } sort() { this.params = Object.keys(this.params).sort().reduce((s, d) => { s[d] = this.params[d]; return s; }, {}); } /** 还原url链接 */ toJSON() { return \`\${this.base ? this.param ? this.base + "?" : this.base : ""}\${this.param}\${this.hash || ""}\`; } }; function objUrl(url, obj) { const res = new URL2(url); Object.entries(obj).forEach((d) => { if (d[1] === void 0 || d[1] === null) return; res.params[d[0]] = d[1]; }); return res.toJSON(); } function urlObj(url) { const res = new URL2(url); return res.params; } // src/utils/htmlvnode.ts init_tampermonkey(); var Vnode = class { tagName; props = {}; children = []; text; constructor(tagName) { this.tagName = tagName; } }; var Scanner = class { /** HTML */ html; /** 当前光标 */ pos = 0; /** Vnode */ vnode = []; /** 节点名栈 */ tagNames = []; /** Vnode栈 */ targets = []; /** innerText栈 */ text = ""; /** 引号栈 */ quote = ""; /** * 扫描html文本转化为Vnode * @param html html文本 */ constructor(html) { this.html = html; this.targets.push({ children: this.vnode }); while (this.html) { this.organizeTag(); } this.textContent(); } /** 提取节点名 */ organizeTag() { if (!this.quote && this.html[0] === "<") { if (this.html.startsWith(\`\`), ""); this.popNode(); } else if (this.tagNames.at(-1) === "script") { this.addText(); } else { this.removeScanned(); if (this.html.startsWith("!--")) { this.html = this.html.replace(/^!--[\\S\\s]+?-->/, ""); } if (this.html.startsWith("!DOCTYPE")) { this.html = this.html.replace(/^!DOCTYPE[\\S\\s]+?>/, ""); } if (/^[a-zA-Z]/.test(this.html)) { this.textContent(); const func = []; let stop = false; for (this.pos = 0; this.pos < this.html.length; this.pos++) { if (stop) { this.pos--; break; } switch (this.html[this.pos]) { case " ": case "\\r": case "\\n": func.push(() => this.organizeProp()); stop = true; break; case ">": this.html[this.pos - 1] === "/" ? func.push(() => this.popNode()) : func.push(() => this.tagSingle()); stop = true; break; } } const tagName = this.html.substring(0, this.pos); const tag = new Vnode(tagName); this.tagNames.push(tagName); this.targets.at(-1).children.push(tag); this.targets.push(tag); this.removeScanned(this.pos + 1); func.forEach((d) => d()); } } } else { this.addText(); } } /** 记录疑似文本节点 */ addText() { switch (this.html[0]) { case "'": !this.quote ? this.quote = "'" : this.quote === "'" && (this.quote = ""); break; case '"': !this.quote ? this.quote = '"' : this.quote === '"' && (this.quote = ""); break; case "\`": !this.quote ? this.quote = "\`" : this.quote === "\`" && (this.quote = ""); break; } this.text += this.html[0]; this.removeScanned(); } /** 提取属性 */ organizeProp() { let value = false; let stop = false; let start = 0; let popd = false; for (this.pos = 0; this.pos < this.html.length; this.pos++) { if (stop) break; switch (this.html[this.pos]) { case '"': value = !value; break; case " ": if (!value) { const str = this.html.substring(start, this.pos).replace(/\\r|\\n|"/g, "").replace(/^ +/, ""); const prop = str.split("="); const key = prop.shift(); key && key !== "/" && (this.targets.at(-1).props[key] = prop.join("=") || key); start = this.pos; } break; case ">": if (!value) { stop = true; const str = this.html.substring(start, this.pos).replace(/\\r|\\n|"/g, "").replace(/^ +/, ""); const prop = str.split("="); const key = prop.shift(); key && key !== "/" && (this.targets.at(-1).props[key] = prop.join("=") || key); if (this.html[this.pos - 1] === "/") { this.popNode(); popd = true; } } break; } } if (!popd) this.tagSingle(); this.removeScanned(this.pos--); } /** 出栈检查 空元素直接出栈*/ tagSingle() { switch (this.tagNames.at(-1)) { case "area": case "base": case "br": case "col": case "colgroup": case "command": case "embed": case "hr": case "img": case "input": case "keygen": case "link": case "meta": case "param": case "path": // svg专属 case "source": case "track": case "wbr": this.popNode(); break; } } /** 节点出栈 */ popNode() { this.tagNames.splice(this.tagNames.length - 1, 1); this.targets.splice(this.targets.length - 1, 1); this.text = ""; } /** 移除已扫描字符长度 默认1位 */ removeScanned(length2 = 1) { this.html = this.html.slice(length2); } /** 处理TextContent */ textContent() { const text = this.text.replace(/\\r|\\n| /g, ""); if (text) { const tag = new Vnode("text"); tag.text = this.text; this.targets.at(-1).children.push(tag); } this.text = ""; } }; function htmlVnode(html) { return new Scanner(html).vnode; } // src/core/danmaku.ts init_tampermonkey(); // src/io/grpc/api-dm-web.ts init_tampermonkey(); var import_light = __toESM(require_light()); // src/json/dm-web.json var dm_web_default = { nested: { bilibili: { nested: { community: { nested: { service: { nested: { dm: { nested: { v1: { nested: { DmWebViewReply: { fields: { state: { type: "int32", id: 1 }, text: { type: "string", id: 2 }, textSide: { type: "string", id: 3 }, dmSge: { type: "DmSegConfig", id: 4 }, flag: { type: "DanmakuFlagConfig", id: 5 }, specialDms: { rule: "repeated", type: "string", id: 6 }, checkBox: { type: "bool", id: 7 }, count: { type: "int64", id: 8 }, commandDms: { rule: "repeated", type: "CommandDm", id: 9 }, dmSetting: { type: "DanmuWebPlayerConfig", id: 10 }, reportFilter: { rule: "repeated", type: "string", id: 11 } } }, CommandDm: { fields: { id: { type: "int64", id: 1 }, oid: { type: "int64", id: 2 }, mid: { type: "int64", id: 3 }, command: { type: "string", id: 4 }, content: { type: "string", id: 5 }, progress: { type: "int32", id: 6 }, ctime: { type: "string", id: 7 }, mtime: { type: "string", id: 8 }, extra: { type: "string", id: 9 }, idStr: { type: "string", id: 10 } } }, DmSegConfig: { fields: { pageSize: { type: "int64", id: 1 }, total: { type: "int64", id: 2 } } }, DanmakuFlagConfig: { fields: { recFlag: { type: "int32", id: 1 }, recText: { type: "string", id: 2 }, recSwitch: { type: "int32", id: 3 } } }, DmSegMobileReply: { fields: { elems: { rule: "repeated", type: "DanmakuElem", id: 1 } } }, DanmakuElem: { fields: { id: { type: "int64", id: 1 }, progress: { type: "int32", id: 2 }, mode: { type: "int32", id: 3 }, fontsize: { type: "int32", id: 4 }, color: { type: "uint32", id: 5 }, midHash: { type: "string", id: 6 }, content: { type: "string", id: 7 }, ctime: { type: "int64", id: 8 }, weight: { type: "int32", id: 9 }, action: { type: "string", id: 10 }, pool: { type: "int32", id: 11 }, idStr: { type: "string", id: 12 }, attr: { type: "int32", id: 13 } } }, DanmuWebPlayerConfig: { fields: { dmSwitch: { type: "bool", id: 1 }, aiSwitch: { type: "bool", id: 2 }, aiLevel: { type: "int32", id: 3 }, blocktop: { type: "bool", id: 4 }, blockscroll: { type: "bool", id: 5 }, blockbottom: { type: "bool", id: 6 }, blockcolor: { type: "bool", id: 7 }, blockspecial: { type: "bool", id: 8 }, preventshade: { type: "bool", id: 9 }, dmask: { type: "bool", id: 10 }, opacity: { type: "float", id: 11 }, dmarea: { type: "int32", id: 12 }, speedplus: { type: "float", id: 13 }, fontsize: { type: "float", id: 14 }, screensync: { type: "bool", id: 15 }, speedsync: { type: "bool", id: 16 }, fontfamily: { type: "string", id: 17 }, bold: { type: "bool", id: 18 }, fontborder: { type: "int32", id: 19 }, drawType: { type: "string", id: 20 } } } } } } } } } } } } } } }; // src/utils/danmaku.ts init_tampermonkey(); var DanmakuBase = class { /** 从小到大排序弹幕 */ static sortDmById(dms) { dms.sort((a, b) => this.bigInt(a.idStr, b.idStr) ? 1 : -1); } /** 比较两个弹幕ID先后 */ static bigInt(num1, num2) { String(num1).replace(/\\d+/, (d) => num1 = d.replace(/^0+/, "")); String(num2).replace(/\\d+/, (d) => num2 = d.replace(/^0+/, "")); if (num1.length > num2.length) return true; else if (num1.length < num2.length) return false; else { for (let i = 0; i < num1.length; i++) { if (num1[i] > num2[i]) return true; if (num1[i] < num2[i]) return false; } return false; } } /** 重构为旧版弹幕类型 */ static parseCmd(dms) { return dms.map((d) => { var _a3; const dm = { class: d.pool || 0, color: d.color || 0, date: d.ctime || 0, dmid: d.idStr || "", mode: +d.mode || 1, pool: d.pool || 0, size: d.fontsize || 25, stime: d.progress / 1e3 || 0, text: d.content && d.mode != 8 && d.mode != 9 ? d.content.replace(/(\\/n|\\\\n|\\n|\\r\\n)/g, "\\n") : d.content, uhash: d.midHash || "", uid: d.midHash || "", weight: d.weight, attr: d.attr }; ((_a3 = d.action) == null ? void 0 : _a3.startsWith("picture:")) && (dm.html = \`\`); return dm; }); } /** 解析解码xml弹幕 */ static decodeXml(xml) { if (typeof xml === "string") { xml = xml.replace(/((?:[\\0-\\x08\\x0B\\f\\x0E-\\x1F\\uFFFD\\uFFFE\\uFFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]))/g, ""); xml = new DOMParser().parseFromString(xml, "application/xml"); } const items = xml.querySelectorAll("d"); const dms = []; items.forEach((d) => { const json = d.getAttribute("p").split(","); const text = d.textContent || d.text; if (text) { const dm = { pool: Number(json[5]), color: Number(json[3]), ctime: Number(json[4]), id: Number(json[7]), idStr: String(json[7]), mode: Number(json[1]), fontsize: Number(json[2]), progress: Number(json[0]) * 1e3, content: String(text), midHash: json[6] }; dms.push(dm); } }); return dms; } /** 编码xml弹幕 */ static encodeXml(dms, cid) { return dms.reduce((s, d) => { var _a3; const text = d.mode === 8 || d.mode === 9 ? d.text : ((_a3 = d.text) != null ? _a3 : "").replace(/(\\n|\\r\\n)/g, "/n"); s += \`\${text.replace(/[<&]/g, (a) => { return { "<": "<", "&": "&" }[a]; })} \`; return s; }, \`chat.api.bilibili.com\${cid}0\${dms.length}00k-v \`) + ""; } }; // src/io/urls.ts init_tampermonkey(); var URLS = class _URLS { // protocol + // static P_AUTO = "//"; static P_HTTP = "http://"; static P_HTTPS = "https://"; static P_WS = "ws://"; static P_WSS = "wss://"; // domain static D_WWW = "www.bilibili.com"; static D_API = "api.bilibili.com"; static D_APP = "app.bilibili.com"; static D_MANAGER = "manager.bilibili.co"; static D_INTERFACE = "interface.bilibili.com"; static D_PASSPORT = "passport.bilibili.com"; static D_BANGUMI = "bangumi.bilibili.com"; static D_SPACE = "space.bilibili.com"; static D_STATIC_S = "static.hdslb.com"; static D_CHAT = "chat.bilibili.com"; static D_DATA = "data.bilibili.com"; static D_COMMENT = "comment.bilibili.com"; static D_BROADCAST = "broadcast.bilibili.com"; static D_MISAKA_SW = "misaka-sw.bilibili.com"; static D_MEMBER = "member.bilibili.com"; static D_BVC = "bvc.bilivideo.com"; static D_S1 = "s1.hdslb.com"; static D_API_GLOBAL = "api.global.bilibili.com"; static D_ACCOUNT = "account.bilibili.com"; static D_INTL = "apiintl.biliapi.net"; static D_API_VC = "api.vc.bilibili.com"; static WEBSHOW_LOCS = _URLS.P_AUTO + _URLS.D_API + "/x/web-show/res/locs"; static INDEX_TOP_RCMD = _URLS.P_AUTO + _URLS.D_API + "/x/web-interface/index/top/rcmd"; static PAGE_HEADER = _URLS.P_AUTO + _URLS.D_API + "/x/web-show/page/header"; static SEASON_RANK_LIST = _URLS.P_AUTO + _URLS.D_API + "/pgc/season/rank/web/list"; static VIDEO = _URLS.P_AUTO + _URLS.D_STATIC_S + "/js/video.min.js"; static JQUERY = _URLS.P_AUTO + _URLS.D_STATIC_S + "/js/jquery.min.js"; static ARTICLE_CARDS = _URLS.P_AUTO + _URLS.D_API + "/x/article/cards"; static VIEW_DETAIL = _URLS.P_AUTO + _URLS.D_API + "/x/web-interface/view/detail"; static VIEW = _URLS.P_AUTO + _URLS.D_API + "/view"; static X_VIEW = _URLS.P_AUTO + _URLS.D_API + "/x/web-interface/view"; static PAGE_LIST = _URLS.P_AUTO + _URLS.D_API + "/x/player/pagelist"; static TAG_INFO = _URLS.P_AUTO + _URLS.D_API + "/x/tag/info"; static TAG_TOP = _URLS.P_AUTO + _URLS.D_API + "/x/web-interface/tag/top"; static BANGUMI_SEASON = _URLS.P_AUTO + _URLS.D_BANGUMI + "/view/web_api/season"; static SEASON_STATUS = _URLS.P_AUTO + _URLS.D_API + "/pgc/view/web/season/user/status"; static PGC_SEASON = _URLS.P_AUTO + _URLS.D_API + "/pgc/view/web/season"; static SEASON_SECTION = _URLS.P_AUTO + _URLS.D_API + "/pgc/web/season/section"; static GLOBAL_OGV_VIEW = _URLS.P_AUTO + _URLS.D_API_GLOBAL + "/intl/gateway/v2/ogv/view/app/season"; static GLOBAL_OGV_PLAYURL = _URLS.P_AUTO + _URLS.D_API_GLOBAL + "/intl/gateway/v2/ogv/playurl"; static APP_PGC_PLAYURL = _URLS.P_AUTO + _URLS.D_API + "/pgc/player/api/playurl"; static ACCOUNT_GETCARDBYMID = _URLS.P_AUTO + _URLS.D_ACCOUNT + "/api/member/getCardByMid"; static LOGIN_APP_THIRD = _URLS.P_AUTO + _URLS.D_PASSPORT + "/login/app/third"; static PLAYER = _URLS.P_AUTO + _URLS.D_API + "/x/player/v2"; static PLAYURL_PROJ = _URLS.P_AUTO + _URLS.D_APP + "/v2/playurlproj"; static PGC_PLAYURL_PROJ = _URLS.P_AUTO + _URLS.D_API + "/pgc/player/api/playurlproj"; static PGC_PLAYURL_TV = _URLS.P_AUTO + _URLS.D_API + "/pgc/player/api/playurltv"; static UGC_PLAYURL_TV = _URLS.P_AUTO + _URLS.D_API + "/x/tv/ugc/playurl"; static PGC_PLAYURL = _URLS.P_AUTO + _URLS.D_API + "/pgc/player/web/playurl"; static PLAYURL = _URLS.P_AUTO + _URLS.D_API + "/x/player/playurl"; static INTL_PLAYURL = _URLS.P_AUTO + _URLS.D_APP + "/x/intl/playurl"; static INTL_OGV_PLAYURL = _URLS.P_AUTO + _URLS.D_INTL + "/intl/gateway/ogv/player/api/playurl"; static PLAYURL_INTERFACE = _URLS.P_AUTO + _URLS.D_INTERFACE + "/v2/playurl"; static PLAYURL_BANGUMI = _URLS.P_AUTO + _URLS.D_BANGUMI + "/player/web_api/v2/playurl"; static LIKE = _URLS.P_AUTO + _URLS.D_API + "/x/web-interface/archive/like"; static HAS_LIKE = _URLS.P_AUTO + _URLS.D_API + "/x/web-interface/archive/has/like"; static DM_WEB_VIEW = _URLS.P_AUTO + _URLS.D_API + "/x/v2/dm/web/view"; static DM_WEB_SEG_SO = _URLS.P_AUTO + _URLS.D_API + "/x/v2/dm/web/seg.so"; static STAT = _URLS.P_AUTO + _URLS.D_API + "/x/web-interface/archive/stat"; static SLIDE_SHOW = _URLS.P_AUTO + _URLS.D_API + "/pgc/operation/api/slideshow"; static SEARCH_SQUARE = _URLS.P_AUTO + _URLS.D_API + "/x/web-interface/search/square"; static SPACE_ARC = _URLS.P_AUTO + _URLS.D_API + "/x/space/wbi/arc/search"; static NEWLIST = _URLS.P_AUTO + _URLS.D_API + "/x/web-interface/newlist"; static SEARCH = _URLS.P_AUTO + _URLS.D_API + "/search"; static REPLY = _URLS.P_AUTO + _URLS.D_API + "/x/v2/reply"; static ARTICLE_UPCOVER = _URLS.P_AUTO + _URLS.D_API + "/x/article/creative/article/upcover"; static DRAW_IMAGE_UPLOAD = _URLS.P_AUTO + _URLS.D_API_VC + "/api/v1/drawImage/upload"; static DYNAMIC_UPLOAD_BFS = _URLS.P_AUTO + _URLS.D_API + "/x/dynamic/feed/draw/upload_bfs"; /** 退出登录 */ static PASSPORT_LOGIN_EXIT = _URLS.P_AUTO + _URLS.D_PASSPORT + "/login/exit/v2"; static PASSPORT_AUTH_CODE = _URLS.P_AUTO + _URLS.D_PASSPORT + "/x/passport-tv-login/qrcode/auth_code"; static PASSPORT_QRCODE_CONFIRM = _URLS.P_AUTO + _URLS.D_PASSPORT + "/x/passport-tv-login/h5/qrcode/confirm"; static PASSPORT_QRCODE_POLL = _URLS.P_AUTO + _URLS.D_PASSPORT + "/x/passport-tv-login/qrcode/poll"; }; // src/io/grpc/api-dm-web.ts var ApiDmWeb = class _ApiDmWeb { constructor(aid, cid) { this.aid = aid; this.cid = cid; _ApiDmWeb.Root || _ApiDmWeb.RootInit(); } static Root; static DmWebViewReply; static DmSegMobileReply; static RootInit() { this.Root = import_light.Root.fromJSON(dm_web_default); this.DmWebViewReply = this.Root.lookupType("DmWebViewReply"); this.DmSegMobileReply = this.Root.lookupType("DmSegMobileReply"); } danmaku = []; /** 获取新版弹幕 */ async getData() { var _a3, _b2; if (!this.danmaku.length) { const dmWebView = await this.DmWebViewReply(); const pageSize = dmWebView.dmSge.pageSize ? dmWebView.dmSge.pageSize / 1e3 : 360; const total = this.aid == window.aid && ((_b2 = (_a3 = window.player) == null ? void 0 : _a3.getDuration) == null ? void 0 : _b2.call(_a3)) / pageSize + 1 || dmWebView.dmSge.total; const promises = []; for (let i = 1; i <= total; i++) { promises.push( this.DmSegMobileReply(i).then((d) => { d.elems && (this.danmaku = this.danmaku.concat(d.elems)); }).catch((e) => { console.warn("弹幕丢包:", \`segment_index=\${i}\`, e); }) ); } dmWebView.specialDms && dmWebView.specialDms.forEach((d) => { promises.push( this.specialDm(d.replace("http:", "")).then((d2) => { d2.elems && (this.danmaku = this.danmaku.concat(d2.elems)); }).catch((e) => { console.warn("高级弹幕丢包:", d, e); }) ); }); await Promise.all(promises); DanmakuBase.sortDmById(this.danmaku); } return this.danmaku; } /** 获取旧版弹幕 */ async toCmd() { const danmaku2 = await this.getData(); return DanmakuBase.parseCmd(danmaku2); } /** 获取弹幕分包 */ async DmWebViewReply() { const response = await fetch(objUrl(URLS.DM_WEB_VIEW, { type: 1, oid: this.cid, pid: this.aid }), { credentials: "include", cache: "force-cache" }); const arraybuffer = await response.arrayBuffer(); const msg = _ApiDmWeb.DmWebViewReply.decode(new Uint8Array(arraybuffer)); return _ApiDmWeb.DmWebViewReply.toObject(msg); } /** 获取弹幕分包 */ async DmSegMobileReply(segment_index = 1) { const response = await fetch(objUrl(URLS.DM_WEB_SEG_SO, { type: 1, oid: this.cid, pid: this.aid, segment_index }), { credentials: "include" }); const arraybuffer = await response.arrayBuffer(); const msg = _ApiDmWeb.DmSegMobileReply.decode(new Uint8Array(arraybuffer)); return _ApiDmWeb.DmSegMobileReply.toObject(msg); } /** 获取高级弹幕 */ async specialDm(url) { const response = await fetch(url); const arraybuffer = await response.arrayBuffer(); const msg = _ApiDmWeb.DmSegMobileReply.decode(new Uint8Array(arraybuffer)); return _ApiDmWeb.DmSegMobileReply.toObject(msg); } }; // src/utils/file.ts init_tampermonkey(); function readAs(file, type = "string", encoding = "utf-8") { return new Promise((resolve, reject) => { const reader = new FileReader(); switch (type) { case "ArrayBuffer": reader.readAsArrayBuffer(file); break; case "DataURL": reader.readAsDataURL(file); break; case "string": reader.readAsText(file, encoding); break; } reader.onload = () => resolve(reader.result); reader.onerror = (e) => reject(e); }); } async function saveAs(content, fileName, contentType = "text/plain") { const a = document.createElement("a"); const file = new Blob([content], { type: contentType }); a.href = URL.createObjectURL(file); a.download = fileName; a.addEventListener("load", () => URL.revokeObjectURL(a.href)); a.click(); setTimeout(() => { a.remove(); window.URL.revokeObjectURL(a.href); }, 3e3); } function fileRead(accept, multiple) { return new Promise((resolve, reject) => { const input = document.createElement("input"); input.type = "file"; accept && (input.accept = accept); multiple && (input.multiple = multiple); input.style.opacity = "0"; input.addEventListener("cancel", () => { reject(new DOMException("The user aborted a request.", "AbortError")); }); input.addEventListener("change", () => { resolve(input.multiple ? input.files : input.files[0]); }); input.click(); }); } // src/utils/format/size.ts init_tampermonkey(); function sizeFormat(size = 0) { let unit = ["B", "K", "M", "G"], i = unit.length - 1, dex = 1024 ** i, vor = 1e3 ** i; while (dex > 1) { if (size >= vor) { size = Number((size / dex).toFixed(2)); break; } dex = dex / 1024; vor = vor / 1e3; i--; } return size ? size + unit[i] : "N/A"; } // src/utils/hook/method.ts init_tampermonkey(); function methodHook(target, propertyKey, callback, modifyArguments) { try { let modify2 = function() { loaded = true; if (values[0]) { Reflect.defineProperty(target, propertyKey, { configurable: true, value: values[0] }); iArguments.forEach((d) => values[0](...d)); } else { debug.error("拦截方法出错!", "目标方法", propertyKey, "所属对象", target); } }; var modify = modify2; const values = []; const iArguments = []; let loading2 = false; let loaded = false; Reflect.defineProperty(target, propertyKey, { configurable: true, set: (v) => { if (loading2 && !loaded) { values.unshift(v); } return true; }, get: () => { if (!loading2) { loading2 = true; setTimeout(() => { const res = callback(); if (res && res.finally) { res.finally(() => modify2()); } else { modify2(); } }); } return function() { modifyArguments == null ? void 0 : modifyArguments(arguments); iArguments.push(arguments); }; } }); } catch (e) { debug.error(e); } } function propertyHook(target, propertyKey, propertyValue, configurable = true) { try { Reflect.defineProperty(target, propertyKey, { configurable, set: (v) => true, get: () => { Reflect.defineProperty(target, propertyKey, { configurable: true, value: propertyValue }); return propertyValue; } }); } catch (e) { debug.error(e); } } propertyHook.modify = (target, propertyKey, callback, once = false) => { try { let value = target[propertyKey]; value && (value = callback(value)); Reflect.defineProperty(target, propertyKey, { configurable: true, set: (v) => { value = callback(v); return true; }, get: () => { if (once) { Reflect.deleteProperty(target, propertyKey); Reflect.set(target, propertyKey, value); } return value; } }); } catch (e) { debug.error(e); } }; function ProxyHandler(target, parrent, key) { return new Proxy(target, { deleteProperty(target2, p) { const res = Reflect.deleteProperty(target2, p); parrent[key] = target2; return res; }, set(target2, p, newValue, receiver) { const res = Reflect.set(target2, p, newValue, receiver); parrent[key] = target2; return res; }, get(target2, p, receiver) { const res = Reflect.get(target2, p, receiver); if (isArray(res) || isObject(res)) { return ProxyHandler(res, receiver, p); } return res; } }); } function propertryChangeHook(target, callback) { return new Proxy(target, { deleteProperty(target2, p) { const res = Reflect.deleteProperty(target2, p); callback(p, void 0); return res; }, set(target2, p, newValue, receiver) { const res = Reflect.set(target2, p, newValue, receiver); callback(p, newValue); return res; }, get(target2, p, receiver) { const res = Reflect.get(target2, p, receiver); if (isArray(res) || isObject(res)) { return ProxyHandler(res, receiver, p); } return res; } }); } // src/utils/hook/worker.ts init_tampermonkey(); var WorkerHook = class _WorkerHook { /** Worker.prototype.postMessage backup. */ static postMessage; static postMessageCallback = []; /** Worker.prototype.postMessage hook init. */ static postMessageHook() { this.postMessage = Worker.prototype.postMessage; Worker.prototype.postMessage = function(message, transfer) { let ishook = false; _WorkerHook.postMessageCallback.forEach((d) => { d.call(this, message, transfer) && (ishook = true); }); ishook || _WorkerHook.postMessage.call(this, message, transfer); }; } constructor() { _WorkerHook.postMessage || _WorkerHook.postMessageHook(); } /** * Worker.prototype.postMessage hook. * @param callback 检查并处理\`Worker.prototype.postMessage\`的回调函数,继承原传参,返回 **true** 时拦截该实例。 * @returns 取消该hook的方法,执行后不再hook。 */ postMessage(callback) { const id = _WorkerHook.postMessageCallback.push(callback); return () => { id >= 0 && delete _WorkerHook.postMessageCallback[id - 1]; }; } }; // src/utils/utils.ts init_tampermonkey(); // src/io/api-bangumi-season.ts init_tampermonkey(); // src/io/api.ts init_tampermonkey(); function jsonCheck(str) { const result = typeof str === "string" ? JSON.parse(str) : str; if (result.code === 0) return result; throw new Error(\`\${result.code} \${result.message}\`, { cause: result.code }); } // src/io/api-bangumi-season.ts async function apiBangumiSeason(data) { const response = await fetch(objUrl(URLS.BANGUMI_SEASON, data), { credentials: "include" }); const json = await response.json(); return jsonCheck(json).result; } // src/io/api-biliplus-view.ts init_tampermonkey(); // src/utils/hook/xhr.ts init_tampermonkey(); var rules = []; var open = XMLHttpRequest.prototype.open; XMLHttpRequest.prototype.open = function(...rest) { const args = [...rest]; args[1] && rules.forEach((d) => { d && d[0].every((d2) => args[1].includes(d2)) && d[1].call(this, args); }); return open.call(this, ...args); }; function xhrHook(url, modifyOpen, modifyResponse, once = true) { let id; const one = Array.isArray(url) ? url : [url]; const two = function(args) { once && id && delete rules[id - 1]; if (modifyOpen) try { modifyOpen(args); } catch (e) { debug.error("modifyOpen of xhrhook", one, e); } if (modifyResponse) try { this.addEventListener("readystatechange", () => { try { if (this.readyState === 4) { const { responseType } = this; const response = { response: this.response, responseType: this.responseType, status: this.status, statusText: this.statusText }; (this.responseType === "" || this.responseType === "text") && (response.responseText = this.responseText); (this.responseType === "" || this.responseType === "document") && (response.responseXML = this.responseXML); modifyResponse(response); Reflect.defineProperty(this, "response", { configurable: true, value: response.response }); try { response.responseType && responseType !== response.responseType && setResponseType(response.responseType, this); if (response.responseXML) { response.responseXML && Reflect.defineProperty(this, "responseXML", { configurable: true, value: response.responseXML }); } else if (response.response) { response.responseText = typeof response.response === "object" ? JSON.stringify(response.response) : response.response; Reflect.defineProperty(this, "responseText", { configurable: true, value: response.responseText }); } } catch { } } } catch (e) { debug.error("modifyResponse of xhrhook", one, e); } }); } catch (e) { debug.error("modifyResponse of xhrhook", one, e); } }; const iid = rules.push([one, two]); return () => { removeXhrhook(iid); }; } xhrHook.async = (url, condition, modifyResponse, once = true) => { let id, temp; const one = Array.isArray(url) ? url : [url]; const two = function(args) { try { if (!condition || condition(args)) { this.xhrhookTimes = this.xhrhookTimes ? this.xhrhookTimes++ : 1; id && (temp = rules[id - 1]); delete rules[id - 1]; this.send = () => true; (!args[2] || args[2] === true) && (this.timeout = 0); const et2 = setInterval(() => { this.dispatchEvent(new ProgressEvent("progress")); }, 50); Reflect.defineProperty(this, "status", { configurable: true, value: 200 }); Reflect.defineProperty(this, "readyState", { configurable: true, value: 2 }); this.dispatchEvent(new ProgressEvent("readystatechange")); modifyResponse ? modifyResponse(args).then((d) => { clearInterval(et2); if (d) { Reflect.defineProperty(this, "response", { configurable: true, value: d.response }); d.responseType && setResponseType(d.responseType, this); d.responseText && Reflect.defineProperty(this, "responseText", { configurable: true, value: d.responseText }); d.responseXML && Reflect.defineProperty(this, "responseXML", { configurable: true, value: d.responseXML }); !this.responseURL && Reflect.defineProperty(this, "responseURL", { configurable: true, value: args[1] }); Reflect.defineProperty(this, "readyState", { configurable: true, value: 4 }); this.dispatchEvent(new ProgressEvent("readystatechange")); this.dispatchEvent(new ProgressEvent("load")); this.dispatchEvent(new ProgressEvent("loadend")); } }).catch((d) => { if (this.xhrhookTimes === 1) { if (d && d.response) { Reflect.defineProperty(this, "response", { configurable: true, value: d.response }); d.responseType && setResponseType(d.responseType, this); d.responseText && Reflect.defineProperty(this, "responseText", { configurable: true, value: d.responseText }); d.responseXML && Reflect.defineProperty(this, "responseXML", { configurable: true, value: d.responseXML }); !this.responseURL && Reflect.defineProperty(this, "responseURL", { configurable: true, value: args[1] }); Reflect.defineProperty(this, "readyState", { configurable: true, value: 4 }); this.dispatchEvent(new ProgressEvent("readystatechange")); this.dispatchEvent(new ProgressEvent("load")); this.dispatchEvent(new ProgressEvent("loadend")); } else { this.dispatchEvent(new ProgressEvent("error")); } } else { this.xhrhookTimes--; } debug.error("modifyResponse of xhrhookasync", one, d); }).finally(() => { clearInterval(et2); !once && (id = rules.push(temp)); }) : (this.abort(), !once && (id = rules.push(temp))); clearInterval(et2); } } catch (e) { debug.error("condition of xhrhook", one, e); } }; const iid = rules.push([one, two]); return () => { removeXhrhook(iid); }; }; function removeXhrhook(id) { id >= 0 && delete rules[id - 1]; } xhrHook.ultra = (url, modify) => { const one = Array.isArray(url) ? url : [url]; const two = function(args) { try { modify.call(this, this, args); } catch (e) { debug.error("xhrhook modify", one, modify, e); } }; const iid = rules.push([one, two]); return () => { removeXhrhook(iid); }; }; function setResponseType(responseType, xhr) { Reflect.defineProperty(xhr, "responseType", { configurable: true, value: responseType }); xhr.getResponseHeader = (name) => { if (name === "content-type") { switch (xhr.responseType) { case "arraybuffer": case "blob": return "application/octet-stream"; case "document": return "text/xml; charset=utf-8"; case "json": return "application/json; charset=utf-8"; default: return "text/plain; charset=utf-8"; } } return "text/plain; charset=utf-8"; }; xhr.getAllResponseHeaders = () => { switch (xhr.responseType) { case "arraybuffer": case "blob": return "content-type: application/octet-stream\\r\\n"; case "document": return "content-type: text/xml; charset=utf-8\\r\\n"; case "json": return "content-type: application/json; charset=utf-8\\r\\n"; default: return "content-type: text/plain; charset=utf-8\\r\\n"; } }; } // src/io/api-view-detail.ts init_tampermonkey(); var ApiViewDetail = class { code = 0; data = { Card: { archive_count: -1, article_count: -1, card: {}, follower: -1, following: false, like_num: -1, space: {} }, Related: [], Reply: { page: {}, replies: [] }, Spec: null, Tags: [], View: {}, elec: null, hot_share: {}, recommend: null, view_addit: {} }; message = "0"; ttl = 1; }; async function apiViewDetail(aid) { const response = await fetch(objUrl(URLS.VIEW_DETAIL, { aid })); const json = await response.json(); return jsonCheck(json).data; } // src/io/api-biliplus-view.ts var apiBiliplusView = class { constructor(aid) { this.aid = aid; this.fetch = fetch(objUrl("//www.biliplus.com/api/view", { id: aid })); } fetch; async getDate() { const respense = await this.fetch; return await respense.json(); } /** 转化为\`apiViewDetail\`格式 */ async toDetail() { const json = await this.getDate(); return this.view2Detail(json); } view2Detail(data) { var _a3; const result = new ApiViewDetail(); if (data.v2_app_api) { delete data.v2_app_api.redirect_url; result.data.Card.follower = (_a3 = data.v2_app_api.owner_ext) == null ? void 0 : _a3.fans; result.data.Card.card = { ...data.v2_app_api.owner, ...data.v2_app_api.owner_ext }; result.data.Tags = data.v2_app_api.tag; result.data.View = data.v2_app_api; xhrHook(\`api.bilibili.com/x/web-interface/view?aid=\${this.aid}\`, void 0, (res) => { const t = \`{"code": 0,"message":"0","ttl":1,"data":\${JSON.stringify(result.data.View)}}\`; res.responseType === "json" ? res.response = JSON.parse(t) : res.response = res.responseText = t; }, false); xhrHook(\`api.bilibili.com/x/web-interface/archive/stat?aid=\${this.aid}\`, void 0, (res) => { const t = \`{"code": 0,"message":"0","ttl":1,"data":\${JSON.stringify({ ...result.data.View.stat, aid: this.aid })}}\`; res.responseType === "json" ? res.response = JSON.parse(t) : res.response = res.responseText = t; }, false); return JSON.parse(JSON.stringify(result)); } else return this.view2Detail_v1(data); } view2Detail_v1(data) { var _a3, _b2, _c, _d, _e, _f, _g; if ("code" in data) { jsonCheck(data); } const result = new ApiViewDetail(); const p = Number(getUrlValue("p")); result.data.Card.card = { face: "//static.hdslb.com/images/akari.jpg", mid: data.mid, name: data.author, vip: {} }; data.list || (data.list = [{ cid: -1, dimension: { width: 1920, height: 1080, rotate: 0 } }]); result.data.View = { aid: data.aid || data.id || this.aid, cid: data.list[p ? p - 1 : 0].cid, copyright: 1, ctime: (_a3 = data.created) != null ? _a3 : 0, dimension: { width: 1920, height: 1080, rotate: 0 }, duration: -1, owner: result.data.Card.card, pages: data.list.map((d) => { d.dimension = { width: 1920, height: 1080, rotate: 0 }; return d; }), pic: (_b2 = data.pic) != null ? _b2 : "", pubdate: (_c = data.lastupdatets) != null ? _c : 0, rights: {}, stat: { aid: data.aid || data.id || this.aid, coin: data.coins, danmaku: data.video_review, dislike: 0, evaluation: "", favorite: data.favorites, his_rank: 0, like: -1, now_rank: 0, reply: -1, share: -1, view: data.play }, state: 0, subtitle: { allow_submit: false, list: [] }, tid: (_d = data.tid) != null ? _d : 0, title: (_e = data.title) != null ? _e : "", tname: (_f = data.typename) != null ? _f : "", videos: (_g = data.list.length) != null ? _g : 0 }; data.bangumi && (result.data.View.season = data.bangumi); xhrHook(\`api.bilibili.com/x/web-interface/view?aid=\${this.aid}\`, void 0, (res) => { const t = \`{"code": 0,"message":"0","ttl":1,"data":\${JSON.stringify(result.data.View)}}\`; res.responseType === "json" ? res.response = JSON.parse(t) : res.response = res.responseText = t; }, false); xhrHook(\`api.bilibili.com/x/web-interface/archive/stat?aid=\${this.aid}\`, void 0, (res) => { const t = \`{"code": 0,"message":"0","ttl":1,"data":\${JSON.stringify({ ...result.data.View.stat, aid: this.aid })}}\`; res.responseType === "json" ? res.response = JSON.parse(t) : res.response = res.responseText = t; }, false); return JSON.parse(JSON.stringify(result)); } }; // src/io/api-player-pagelist.ts init_tampermonkey(); async function apiPlayerPagelist(aid) { const response = await fetch(objUrl(URLS.PAGE_LIST, { aid })); const json = await response.json(); return jsonCheck(json).data; } // src/io/api-view.ts init_tampermonkey(); async function apiView(aid) { const response = await fetch(objUrl(URLS.VIEW, { appkey: "8e9fc618fbd41e28", id: aid, type: "json" })); return await response.json(); } // src/io/api-x-view.ts init_tampermonkey(); async function apiXView(aid) { const response = await fetch(objUrl(URLS.X_VIEW, { aid })); const json = await response.json(); return jsonCheck(json).data; } // src/utils/av.ts init_tampermonkey(); var AV; ((AV2) => { const XOR_CODE = 23442827791579n; const MASK_CODE = 2251799813685247n; const MAX_AID = 1n << 51n; const MIN_AID = 1n; const BASE = 58n; const BYTES = ["B", "V", 1, "", "", "", "", "", "", "", "", ""]; const BV_LEN = BYTES.length; const ALPHABET = [ "F", "c", "w", "A", "P", "N", "K", "T", "M", "u", "g", "3", "G", "V", "5", "L", "j", "7", "E", "J", "n", "H", "p", "W", "s", "x", "4", "t", "b", "8", "h", "a", "Y", "e", "v", "i", "q", "B", "z", "6", "r", "k", "C", "y", "1", "2", "m", "U", "S", "D", "Q", "X", "9", "R", "d", "o", "Z", "f" ]; const DIGIT_MAP = [0, 1, 2, 9, 7, 5, 6, 4, 8, 3, 10, 11]; const REG_EXP = new RegExp(\`^[bB][vV]1[\${ALPHABET.join("")}]{9}\$\`, "g"); const REG_EXP_SHORT = new RegExp(\`^1[\${ALPHABET.join("")}]{9}\$\`, "g"); const REG_EXP_STR = new RegExp(\`[bB][vV]1[\${ALPHABET.join("")}]{9}\`, "g"); function toBV(avid) { typeof avid === "bigint" || (avid = BigInt(avid)); if (avid < MIN_AID) { throw new RangeError(\`Av \${avid} is smaller than \${MIN_AID}\`); } if (avid >= MAX_AID) { throw new RangeError(\`Av \${avid} is bigger than \${MAX_AID}\`); } const bytes = Array.from(BYTES); let bv_idx = BV_LEN - 1; let tmp = (MAX_AID | avid) ^ XOR_CODE; while (tmp !== 0n) { let table_idx = tmp % BASE; bytes[DIGIT_MAP[Number(bv_idx)]] = ALPHABET[Number(table_idx)]; tmp /= BASE; bv_idx -= 1; } return bytes.join(""); } AV2.toBV = toBV; function fromBV(bvid) { if (REG_EXP_SHORT.test(bvid)) { bvid = "BV" + bvid; } let r = 0n; for (let i = 3; i < BV_LEN; i++) { r = r * BASE + BigInt(ALPHABET.indexOf(bvid[DIGIT_MAP[i]])); } return \`\${r & MASK_CODE ^ XOR_CODE}\`; } AV2.fromBV = fromBV; function fromStr(str) { return str.replace(REG_EXP_STR, (s) => "av" + fromBV(s)); } AV2.fromStr = fromStr; })(AV || (AV = {})); // src/utils/utils.ts function getUrlValue(name) { const reg = new RegExp("(^|&)" + name + "=([^&]*)(&|\$)", "i"); const r = window.location.search.substr(1).match(reg); if (r != null) return decodeURIComponent(r[2]); return null; } var catchs = { aid: {}, ssid: {}, epid: {} }; async function urlParam(url, redirect = true) { url && !url.includes("?") && (url = "?" + url); const obj = urlObj(url); let { aid, cid, ssid, epid, p } = obj; let pgc = false; !aid && (aid = obj.avid); !aid && url.replace(/[aA][vV]\\d+/, (d) => aid = d.substring(2)); !aid && url.replace(/[bB][vV]1[fZodR9XQDSUm21yCkr6zBqiveYah8bt4xsWpHnJE7jL5VG3guMTKNPAwcF]{9}/, (d) => aid = AV.fromBV(d)); !aid && obj.bvid && (aid = AV.fromBV(obj.bvid)); aid && !Number(aid) && (aid = AV.fromBV(aid)); p = p || 1; !ssid && (ssid = obj.seasonId); !ssid && (ssid = obj.season_id); !ssid && url.replace(/[sS][sS]\\d+/, (d) => ssid = d.substring(2)); !epid && (epid = obj.episodeId); !epid && (epid = obj.ep_id); !epid && url.replace(/[eE][pP]\\d+/, (d) => epid = d.substring(2)); if (!ssid && !epid && aid) { if (catchs.aid[aid]) return catchs.aid[aid][p - 1] || catchs.aid[aid][0]; if (!cid) { try { let data = await apiXView(aid); if (data.redirect_url) return urlParam(objUrl(data.redirect_url, { aid, cid, ssid, epid, p })); catchs.aid[aid] = data.pages; catchs.aid[aid].forEach((d) => d.aid = aid); return catchs.aid[aid][p - 1] || catchs.aid[aid][0]; } catch (e) { debug.error("view", e); try { catchs.aid[aid] = await apiPlayerPagelist(aid); catchs.aid[aid].forEach((d) => d.aid = aid); return catchs.aid[aid][p - 1] || catchs.aid[aid][0]; } catch (e2) { debug.error("pagelist", e2); try { catchs.aid[aid] = (await apiView(aid)).list; catchs.aid[aid].forEach((d) => d.aid = aid); return catchs.aid[aid][p - 1] || catchs.aid[aid][0]; } catch (e3) { debug.error("appkey", e3); try { let data = await new apiBiliplusView(aid).getDate(); catchs.aid[aid] = data.list || data.v2_app_api && data.v2_app_api.pages; catchs.aid[aid].forEach((d) => d.aid = aid); if (redirect && data.v2_app_api && data.v2_app_api.redirect_url) return urlParam(objUrl(data.v2_app_api.redirect_url, { aid, cid, ssid, epid, p })); return catchs.aid[aid][p - 1] || catchs.aid[aid][0]; } catch (e4) { debug.error("biliplus", e4); } } } } } } if (ssid || epid) { if (ssid && catchs.ssid[ssid]) return catchs.ssid[ssid][p - 1] || catchs.ssid[ssid][0]; if (epid && catchs.epid[epid]) return catchs.epid[epid]; pgc = true; let data = await apiBangumiSeason({ ep_id: epid, season_id: ssid }); ssid = data.season_id; catchs.ssid[ssid] = []; data.episodes.forEach((d) => { Object.assign(d, { ssid, pgc, epid: d.ep_id }); catchs.aid[d.aid] = catchs.aid[d.aid] || []; catchs.aid[d.aid].push(d); catchs.ssid[ssid].push(catchs.epid[d.ep_id] = d); }); if (epid) return catchs.epid[epid]; return catchs.ssid[ssid][p - 1] || catchs.ssid[ssid][0]; } return { aid, cid, ssid, epid, p, pgc }; } // src/core/toast.ts init_tampermonkey(); // src/html/toast.html var toast_default = '
\\r\\n\\r\\n'; // src/svg/fork.svg var fork_default = ''; // src/utils/type.ts init_tampermonkey(); function toObject(input) { switch (input) { case "undefined": input = void 0; break; case "null": input = null; break; case "NaN": input = NaN; break; default: if (!input) break; try { const temp = JSON.parse(input); if (typeof temp !== "number" || input === String(temp)) { input = temp; } } catch { try { const temp = Number(input); if (String(temp) !== "NaN" && !input.startsWith("0")) { input = temp; } } catch { } try { if (/^\\d+n\$/.test(input)) input = BigInt(input.slice(0, -1)); } catch { } } break; } return input; } function toString(input, space = "\\n") { let result; try { result = input.toString(); } catch { result = String(input); } if (result.startsWith("[object") && result.endsWith("]")) { try { const str = JSON.stringify(input, void 0, space); str === "{}" || (result = str); } catch { } } return result; } // src/core/toast.ts var Toastconfig = { position: "top-right", rtl: false, delay: 4, disabled: false }; var Toast = class extends HTMLDivElement { /** 关闭按钮 */ closeButton = document.createElement("div"); /** 消息节点 */ message = document.createElement("div"); /** 延时 */ timer; /** 鼠标移入 */ hovering = false; /** 延时结束 */ timeout = false; /** 是否输出到控制台 */ debug = false; constructor() { super(); this.classList.add("toast"); this.setAttribute("aria-live", "assertive"); this.fadeOut(); this.appendChild(this.message); this.message.className = "toast-message"; this.closeButton.className = "toast-close-button"; this.closeButton.innerHTML = fork_default; this.closeButton.addEventListener("click", (e) => { this.timeout = true; this.delay = 1; e.stopPropagation(); }); this.addEventListener("mouseover", () => this.hovering = true); this.addEventListener("mouseout", () => { this.hovering = false; this.timeout && (this.delay = 1); }); } /** 更新内容 */ value(v) { isArray(v) || (v = [v]); let html = ""; v.forEach((d, i) => { d = toString(d); html += i ? \`
\${d}\` : \`\`; }); v.length || this.fadeOut(); const close = this.message.contains(this.closeButton); this.message.innerHTML = html; close && (this.delay = 0); v.length && this.fadeIn(); } /** 代理对象暂存 */ _data = []; \$data = []; get data() { return this._data; } /** 内容 */ set data(v) { this.\$data = v; this.value(v); this._data = propertryChangeHook(v, () => this.value(v)); } /** 类型 */ set type(v) { this.classList.remove("toast-success", "toast-error", "toast-info", "toast-warning"); v && this.classList.add(\`toast-\${v}\`); } /** 镜像 */ set rtl(v) { v ? this.classList.add("rtl") : this.classList.remove("rtl"); } /** 时长 */ set delay(v) { clearTimeout(this.timer); v = Math.max(Math.trunc(v), 0); v ? this.message.contains(this.closeButton) && this.closeButton.remove() : this.message.contains(this.closeButton) || this.message.insertBefore(this.closeButton, this.message.firstChild); if (v === 1) { if (!this.hovering) { this.fadeOut(true); } } else if (v !== 0) { this.timer = setTimeout(() => { this.timeout = true; this.delay = 1; }, v * 1e3); } } /** 添加消息 */ push(...items) { return this.data.push(...items); } /** 弹出第一条消息 */ shift() { return this.data.shift(); } /** 添加置顶消息 */ unshift(...items) { return this.data.unshift(...items); } /** 弹出末尾的消息 */ pop() { return this.data.pop(); } /** 淡入 */ fadeIn() { this.setAttribute("style", \`height: \${this.message.scrollHeight + 30}px;\`); } /** 淡出 */ fadeOut(remove = false) { this.setAttribute("style", "padding-top: 0px;padding-bottom: 0px;height: 0px;"); if (remove) { setTimeout(() => this.remove(), 1e3); if (this.debug && this.\$data.length) { debug.group(this.\$data.shift()); this.\$data.forEach((d) => { d instanceof Error ? debug.error(d) : debug(d); }); debug.groupEnd(); } } } }; customElements.get(\`toast-\${"1272ee5"}\`) || customElements.define(\`toast-\${"1272ee5"}\`, Toast, { extends: "div" }); var ToastContainer = class extends HTMLElement { /** 实际根节点 */ container; static get observedAttributes() { return [ "position", "rtl", "delay", "disabled" ]; } constructor() { super(); const root = this.attachShadow({ mode: "closed" }); root.innerHTML = toast_default; this.container = root.children[0]; } /** 刷新配置 */ update(value) { Object.entries(value).forEach((d) => { this[d[0]] = d[1]; }); } toast(delay, type = "info", ...data) { document.body.contains(this) || document.body.appendChild(this); const toast2 = new Toast(); toast2.type = type; toast2.rtl = this.rtl; this.container.insertBefore(toast2, this.container.firstChild); delay === 0 && (toast2.debug = true); toast2.data = data; toast2.delay = delay; return toast2; } /** * 可拓展toast,用于需要动态增减消息。 * 无数据时隐藏,有数据时显现。默认为info类型。 * @param data 初始信息,可为空。 * @example * const T = toast.list(); // 生成toast(隐藏)。 * T.data.push(123); // 添加一条消息123,toast显现。data属性本质是数组,可以使用任何数组方法更改消息。 * T.type = 'warning'; // 更改toast样式为warning。 * T.rtl = true; // 镜像toast。 * T.data.pop(); // 删除最后一条消息,消息变为空,toast自动隐藏。 * T.delay = 4; // 启用倒计时,单位/秒,倒计时结束后toast将被移除。也就是对象\`T\`不再响应任何操作,所以除非不需要再拓展,否则请不要修改\`delay\`属性。 * T.fadeOut(); // 隐藏toast但不移除。 * T.fadeOut(true); // 移除toast,效果同T.delay = 1。 */ list(...data) { return this.toast(0, "info", ...data); } success(...data) { this.toast(this.delay, "success", ...data); return () => { debug(...data); }; } error(...data) { this.toast(this.delay, "error", ...data); return () => { debug.error(...data); }; } info(...data) { this.toast(this.delay, "info", ...data); return () => { debug.debug(...data); }; } warning(...data) { this.toast(this.delay, "warning", ...data); return () => { debug.warn(...data); }; } set position(v) { this.setAttribute("position", v); } /** 位置 */ get position() { return this.getAttribute("position"); } set rtl(v) { this.setAttribute("rtl", v); } /** 镜像 */ get rtl() { return toObject(this.getAttribute("rtl")); } set delay(v) { this.setAttribute("delay", v); } /** 延时 */ get delay() { return toObject(this.getAttribute("delay")); } set disabled(v) { this.setAttribute("disabled", v); } /** 禁用 */ get disabled() { return toObject(this.getAttribute("disabled")); } attributeChangedCallback(name, oldValue, newValue) { if (oldValue === newValue) return; switch (name) { case "position": newValue && (this.container.className = \`toast-\${newValue}\`); break; case "rtl": this.container.querySelectorAll(".toast").forEach((d) => { d.rtl = toObject(newValue); }); break; case "delay": this.container.querySelectorAll(".toast").forEach((d) => { d.delay = toObject(newValue); }); break; case "disabled": this.container.style.display = toObject(newValue) ? "none" : ""; default: break; } } }; customElements.get(\`toast-container-\${"1272ee5"}\`) || customElements.define(\`toast-container-\${"1272ee5"}\`, ToastContainer); var toast = new ToastContainer(); // src/core/user.ts init_tampermonkey(); // src/core/userstatus.ts init_tampermonkey(); // src/core/ui/entry.ts init_tampermonkey(); // src/html/ui-entry.html var ui_entry_default = '
\\r\\n 设置\\r\\n
\\r\\n
\\r\\n'; // src/svg/gear.svg var gear_default = ''; // src/core/ui/entry.ts var UiEntryType = "new"; var BilioldEntry = class extends HTMLElement { /** 旧版按钮 */ stage; /** 新版按钮 */ gear; /** 实际节点 */ root; /** 实际根节点 */ static get observedAttributes() { return [ "type" ]; } constructor() { super(); this.root = this.attachShadow({ mode: "closed" }); this.root.innerHTML = ui_entry_default; this.stage = this.root.children[0]; this.gear = this.root.children[1]; this.gear.innerHTML = gear_default; this.stage.remove(); this.gear.remove(); this.gear.addEventListener("mouseover", () => this.gear.style.opacity = "0.8"); this.gear.addEventListener("mouseout", () => this.gear.style.opacity = "0"); } get type() { return this.getAttribute("type"); } set type(v) { this.setAttribute("type", v); } attributeChangedCallback(name, oldValue, newValue) { if (oldValue === newValue) return; switch (name) { case "type": if (newValue === "old") { this.root.contains(this.gear) && this.gear.remove(); this.root.contains(this.stage) || this.root.appendChild(this.stage); } else { this.root.contains(this.stage) && this.stage.remove(); if (!this.root.contains(this.gear)) { this.root.appendChild(this.gear); setTimeout(() => { this.gear.style.opacity = "0"; }, 2e3); } } break; default: break; } } }; customElements.get("biliold-entry-1272ee5") || customElements.define("bilibili-entry-1272ee5", BilioldEntry); // src/core/userstatus.ts var userStatus = { /** 开发者模式 */ development: true, /** 主页 */ index: true, /** toastr */ toast: Toastconfig, /** 替换全局顶栏 */ header: true, /** 翻页评论区 */ comment: true, /** av */ av: true, /** 嵌入式播放器 */ player: true, /** WebRTC */ webRTC: false, /** 充电鸣谢 */ elecShow: true, /** 合作UP */ staff: false, /** bangumi */ bangumi: true, /** 解除限制 */ videoLimit: { /** 开关 */ status: false, /** 服务器类型 */ server: "内置", /** 东南亚(泰区)代理服务器 */ th: "api.global.bilibili.com", /** 台湾代理服务器 */ tw: "", /** 香港代理服务器 */ hk: "", /** 大陆代理服务器 */ cn: "" }, /** UPOS替换 */ uposReplace: { /** 东南亚(泰区) */ th: "ks3(金山)", /** 港澳台 */ gat: "不替换", /** 一般视频 */ nor: "不替换", /** 下载 */ download: "不替换" }, /** 强制显示bangumi分p */ bangumiEplist: false, /** 账户授权 */ accessKey: { /** access_key */ token: void 0, /** 授权日期 */ date: 0, /** 授权日期字符串 */ dateStr: "" }, /** 稍后再看 */ watchlater: true, /** 播单 */ playlist: true, /** 全站排行榜 */ ranking: true, /** 专栏 */ read: true, /** 搜索 */ search: true, /** 相簿 */ album: true, /** 注册时间 */ jointime: false, /** 失效视频 */ lostVideo: true, /** 纯视频历史 */ history: true, /** 动态里的直播录屏 */ liveRecord: false, /** 设置入口样式 */ uiEntryType: UiEntryType, /** 自动化操作 */ automate: { /** 展开弹幕列表 */ danmakuFirst: false, /** 滚动到播放器 */ showBofqi: false, /** 自动宽屏 */ screenWide: false, /** 自动关弹幕 */ noDanmaku: false, /** 自动播放 */ autoPlay: false, /** 自动网页全屏 */ webFullScreen: false, /** 记忆播放速率 */ videospeed: false }, /** 关闭抗锯齿 */ videoDisableAA: false, /** 禁用直播间挂机检测 */ disableSleepChcek: true, /** 禁止上报 */ disableReport: true, /** 禁用评论跳转标题 */ commentJumpUrlTitle: false, /** 合集 */ ugcSection: false, /** 请求的文件类型 */ downloadType: ["mp4"], /** 请求无水印源 */ TVresource: false, /** 画质 */ downloadQn: 127, /** 下载方式 */ downloadMethod: "浏览器", /** User-Agent */ userAgent: "Bilibili Freedoooooom/MarkII", /** referer */ referer: "https://www.bilibili.com", /** 下载目录 */ filepath: "", /** aria2 */ aria2: { /** 服务器 */ server: "http://localhost", /** 端口 */ port: 6800, /** 令牌 */ token: "", /** 分片数目 */ split: 4, /** 分片大小 */ size: 20 }, ef2: { /** 稍后下载 */ delay: false, /** 静默下载 */ silence: false }, /** 点赞功能 */ like: false, /** 重构播放器脚本 */ bilibiliplayer: true, /** 检查播放器脚本更新 */ checkUpdate: true, /** 不登录1080P支持 */ show1080p: false, /** 调整顶栏banner样式 */ fullBannerCover: false, /** 原生播放器新版弹幕 */ dmproto: true, /** 普权弹幕换行 */ dmwrap: true, /** 弹幕格式 */ dmExtension: "xml", /** 合并已有弹幕 */ dmContact: false, /** 分集数据 */ episodeData: false, /** 港澳台新番时间表 */ timeLine: false, /** 字幕:繁 -> 简 */ simpleChinese: true, /** 资源cdn */ cdn: "jsdelivr", /** 弹幕保护计划 */ danmakuProtect: false, /** 下载按钮 */ downloadButton: false, /** 全区域搜索 */ searchAllArea: false, /** 评论图片 */ commentPicture: true, /** 分区主页 */ channel: true, /** 拦截视频心跳 */ heartbeatBlock: false, /** 稍后再看重定向 */ watchlater2Av: false }; // src/core/ui/alert.ts init_tampermonkey(); // src/utils/element.ts init_tampermonkey(); // src/utils/poll.ts init_tampermonkey(); function poll(check, callback, delay = 100, stop = 180) { let timer = setInterval(() => { const d = check(); if (d) { clearInterval(timer); callback(d); } }, delay); stop && setTimeout(() => clearInterval(timer), stop * 1e3); } // src/utils/element.ts function addElement(tag, attribute, parrent, innerHTML, top, replaced) { const element = document.createElement(tag); attribute && Object.entries(attribute).forEach((d) => element.setAttribute(d[0], d[1])); innerHTML && element.insertAdjacentHTML("beforeend", innerHTML); replaced ? replaced.replaceWith(element) : parrent && (top ? parrent.insertAdjacentElement("afterbegin", element) : parrent.insertAdjacentElement("beforeend", element)); return element; } async function addCss(txt, id, parrent) { if (!parrent && !document.head) { await new Promise((r) => poll(() => document.body, r)); } parrent = parrent || document.head; const style = document.createElement("style"); style.setAttribute("type", "text/css"); id && !parrent.querySelector(\`#\${id}\`) && style.setAttribute("id", id); style.appendChild(document.createTextNode(txt)); parrent.appendChild(style); return style; } function loadScript(src, onload) { return new Promise((r, j) => { const script = document.createElement("script"); script.type = "text/javascript"; script.src = src; script.addEventListener("load", () => { script.remove(); onload && onload(); r(true); }); script.addEventListener("error", () => { script.remove(); j(); }); (document.body || document.head || document.documentElement || document).appendChild(script); }); } function offset(ele) { const box = ele.getBoundingClientRect(); const body = document.body; const docElem = document.documentElement; const scrollTop = window.pageYOffset || docElem.scrollTop || body.scrollTop; const scrollLeft = window.pageXOffset || docElem.scrollLeft || body.scrollLeft; const clientTop = docElem.clientTop || body.clientTop; const clientLeft = docElem.clientLeft || body.clientLeft; const top = box.top + scrollTop - clientTop; const left = box.left + scrollLeft - clientLeft; return { //Math.round 兼容火狐浏览器bug top: Math.round(top), left: Math.round(left) }; } // src/core/ui/utils/button.ts init_tampermonkey(); // src/html/button.html var button_default = '
按钮
\\r\\n'; // src/core/ui/utils/button.ts var PushButton = class extends HTMLElement { _button; constructor() { super(); const root = this.attachShadow({ mode: "closed" }); root.innerHTML = button_default; this._button = root.querySelector(".button"); this._button.addEventListener("click", (e) => { e.stopPropagation(); this.dispatchEvent(new Event("change")); }); } set text(v) { this._button.textContent = v; } }; customElements.get(\`button-\${"1272ee5"}\`) || customElements.define(\`button-\${"1272ee5"}\`, PushButton); // src/core/ui/utils/popupbox.ts init_tampermonkey(); // src/html/popupbox.html var popupbox_default = '
\\r\\n
\\r\\n
\\r\\n
\\r\\n'; // src/core/ui/utils/popupbox.ts var ClickOutRemove = class { constructor(target) { this.target = target; target.addEventListener("click", (e) => e.stopPropagation()); } /** 已启用监听 */ enabled = false; /** 移除节点 */ remove = () => { this.target.remove(); }; /** 停止监听 */ disable = () => { if (this.enabled) { document.removeEventListener("click", this.remove); this.enabled = false; } return this; }; /** 开始监听 */ enable = () => { this.enabled || setTimeout(() => { document.addEventListener("click", this.remove, { once: true }); this.enabled = true; }, 100); return this; }; }; var PopupBox = class extends HTMLElement { _contain; _fork; clickOutRemove; \$fork = true; constructor() { super(); const root = this.attachShadow({ mode: "closed" }); root.innerHTML = popupbox_default; this._contain = root.children[0].children[0]; this._fork = root.children[0].children[1]; this._fork.innerHTML = fork_default; this._fork.addEventListener("click", () => this.remove()); this.clickOutRemove = new ClickOutRemove(this); document.body.appendChild(this); } insertAdjacentElement(where, element) { this._contain.insertAdjacentElement(where, element); return element; } insertAdjacentHTML(position, text) { return this._contain.insertAdjacentHTML(position, text); } insertAdjacentText(where, data) { return this._contain.insertAdjacentText(where, data); } append(...nodes) { this._contain.append(...nodes); } appendChild(node) { this._contain.appendChild(node); return node; } replaceChildren(...nodes) { this._contain.replaceChildren(...nodes); } setAttribute(qualifiedName, value) { this._contain.setAttribute(qualifiedName, value); } getAttribute(qualifiedName) { return this._contain.getAttribute(qualifiedName); } get style() { return this._contain.style; } get innerHTML() { return this._contain.innerHTML; } set innerHTML(v) { this._contain.innerHTML = v; } /** 设置是否显示关闭按钮,不显示则点击节点外部自动关闭 */ get fork() { return this.\$fork; } set fork(v) { this.\$fork = v; this._fork.style.display = v ? "" : "none"; if (v) { this.clickOutRemove.disable(); } else { this.clickOutRemove.enable(); } } }; customElements.get(\`popupbox-\${"1272ee5"}\`) || customElements.define(\`popupbox-\${"1272ee5"}\`, PopupBox); // src/core/ui/alert.ts function alert(msg, title, buttons, fork = false) { isArray(msg) || (msg = [msg]); msg = msg.join("
"); const popup = new PopupBox(); popup.fork = fork; popup.setAttribute("style", "max-width: 400px; max-height: 300px;line-height: 16px;"); popup.innerHTML = \`
\${title || "Bilibili Old"}
\${msg}
\`; if (buttons) { addElement("hr", { style: "width: 100%;opacity: .3;" }, popup); const div = addElement("div", { style: "display: flex;align-items: center;justify-content: space-around;" }, popup); buttons.forEach((d) => { const button = new PushButton(); button.text = d.text; button.addEventListener("change", () => { var _a3; (_a3 = d.callback) == null ? void 0 : _a3.call(d); popup.remove(); }); div.appendChild(button); }); } } // src/core/user.ts var User = class { /** 用户数据,除非确定已初始化,否则请使用\`addCallback\`用户数据回调代替 */ userStatus; /** 初始化标记 */ initialized = false; /** 更新CD */ updating; /** 回调栈 */ changes = {}; /** 更新存储延时 */ timer; /** 用户数据加载回调序列 */ userLoadedCallbacks = []; constructor() { GM.getValue("userStatus", userStatus).then((status) => { var _a3; status = Object.assign(userStatus, status); const proxy = propertryChangeHook(status, (key, value) => { clearTimeout(this.timer); this.timer = setTimeout(() => GM.setValue("userStatus", status)); this.emitChange(key, value); }); this.userStatus = proxy; this.initialized = true; while (this.userLoadedCallbacks.length) { (_a3 = this.userLoadedCallbacks.shift()) == null ? void 0 : _a3(proxy); } }); } /** * 监听设置改动 * @param key 设置键 * @param callback 设置项变动时执行的回调,新值将作为第一个参数传入 * @returns 用于取消监听的回调 */ bindChange(key, callback) { this.changes[key] || (this.changes[key] = []); const id = this.changes[key].push(callback); return () => { delete this.changes[key][id - 1]; }; } /** * 推送设置改动 * @param key 设置键 * @param newValue 新值 */ emitChange(key, newValue) { this.changes[key].forEach(async (d) => { d(newValue); }); } /** 用户数据回调 */ addCallback(callback) { if (typeof callback === "function") { if (this.initialized) { callback(this.userStatus); } else { this.userLoadedCallbacks.push(callback); } } } /** 恢复默认数据 */ restoreUserStatus() { GM.deleteValue("userStatus"); toast.warning("已恢复默认设置数据,请刷新页面以避免数据紊乱!"); } /** 备份设置数据 */ outputUserStatus() { GM.getValue("userStatus", userStatus).then((d) => { saveAs(JSON.stringify(d, void 0, " "), \`Bilibili-Old-\${timeFormat(void 0, true).replace(/ |:/g, (d2) => "-")}\`, "application/json"); }); } /** 恢复备份数据 */ inputUserStatus() { const msg = toast.list("恢复备份数据 >>>", "> 请选择一个备份的数据文件(.json)", "> 注意:无效的数据文件可能导致异常!"); fileRead("application/json").then((d) => { msg.push(\`> 读取文件:\${d.name}\`); msg.type = "info"; return readAs(d).then((d2) => { const data = JSON.parse(d2); if (typeof data === "object") { GM.setValue("userStatus", data); const text = "已恢复设置数据,请刷新页面以避免数据紊乱!"; msg.push("> " + text); msg.type = "success"; return alert(text, "刷新页面", [{ text: "刷新", callback: () => location.reload() }]); } }).catch((e) => { msg.push("> 读取文件出错!", e); msg.type = "error"; }); }).catch((e) => { msg.push(e); }).finally(() => { msg.delay = 4; }); } }; var user = new User(); // src/core/video-info.ts init_tampermonkey(); var VideoInfo = class { cids = {}; stats = {}; get metadata() { const cid = BLOD.cid; return cid ? this.cids[cid] : void 0; } get album() { var _a3; return ((_a3 = this.metadata) == null ? void 0 : _a3.album) || this.title; } get artist() { var _a3; return (_a3 = this.metadata) == null ? void 0 : _a3.artist; } get title() { var _a3; return ((_a3 = this.metadata) == null ? void 0 : _a3.title) || document.title.slice(0, -26); } get artwork() { var _a3; return (_a3 = this.metadata) == null ? void 0 : _a3.artwork; } get stat() { const aid = BLOD.aid; return aid ? this.stats[aid] : void 0; } /** 数据变动回调栈 */ callbacks = []; /** * 数据变动回调 * @param callback 数据变动时执行的回调函数 * @returns 撤销监听的函数 */ bindChange(callback) { const id = this.callbacks.push(callback); return () => { delete this.callbacks[id - 1]; }; } timer; /** 推送数据变动 */ emitChange() { clearTimeout(this.timer); this.timer = setTimeout(() => this.callbacks.forEach((d) => d(this)), 100); } /** 从\`IAidDatail\`中提取 */ aidDatail(data) { const album = data.title; const artist = data.owner.name; const pic = data.pic.replace("http:", ""); data.pages ? data.pages.forEach((d, i) => { this.cids[d.cid] = { album, artist, title: d.part || \`#\${i + 1}\`, artwork: [{ src: pic }] }; }) : this.cids[data.cid] = { album, artist, title: \`#1\`, artwork: [{ src: pic }] }; this.stats[data.aid] = data.stat; this.emitChange(); } /** 从\`IAidInfo\`中提取 */ aidInfo(data) { const album = data.title; const artist = data.upper.name; const pic = data.cover.replace("http:", ""); data.pages ? data.pages.forEach((d, i) => { this.cids[d.id] = { album, artist, title: d.title || \`#\${i + 1}\`, artwork: [{ src: pic }] }; }) : this.cids[data.id] = { album, artist, title: \`#1\`, artwork: [{ src: pic }] }; } /** 从\`IBangumiSeasonResponse\`中提取 */ bangumiSeason(data) { var _a3, _b2; const album = data.title || data.jp_title; const artist = data.actors || data.staff || ((_a3 = data.up_info) == null ? void 0 : _a3.name); const pic = data.cover.replace("http:", ""); const bkg_cover = (_b2 = data.bkg_cover) == null ? void 0 : _b2.replace("http:", ""); this.bangumiEpisode(data.episodes, album, artist, pic, bkg_cover); this.emitChange(); } /** 从\`IBangumiEpisode\`中提取 */ bangumiEpisode(data, album, artist, pic, bkg_cover) { data.forEach((d) => { const artwork = [{ src: d.cover.replace("http:", "") }, { src: pic }]; bkg_cover && artwork.push({ src: bkg_cover }); this.cids[d.cid] = { album, artist, title: d.index_title, artwork }; }); } toview(data) { const album = data.name; const pic = data.cover.replace("http:", ""); data.list.forEach((d) => { const title = d.title; const cover = d.pic.replace("http:", ""); const artist = d.owner.name; d.pages.forEach((d2, i) => { this.cids[d2.cid] = { album, artist, title: title + \`(\${d2.part})\`, artwork: [{ src: pic }, { src: cover }] }; }); }); this.emitChange(); } /** 设置浏览器媒体信息 */ mediaSession() { if (this.metadata) { navigator.mediaSession.metadata = new MediaMetadata({ ...this.metadata }); } } }; var videoInfo = new VideoInfo(); // src/core/danmaku.ts var Danmaku = class { listSoFixed = false; constructor() { user.addCallback((status) => { if (!status.bilibiliplayer) { this.listSoFix(); } }); } /** 原生旧版播放器使用protobuf弹幕 */ listSoFix() { if (this.listSoFixed) return; this.listSoFixed = true; const that = this; new WorkerHook().postMessage(function(message) { if (message.url && message.url.includes("list.so")) { user.userStatus.dmwrap && that.trim(); if (!user.userStatus.dmproto) return false; const params = urlObj(message.url); const startTime = (/* @__PURE__ */ new Date()).getTime(); that.getSegDanmaku(void 0, params.oid).then((d) => { this.dispatchEvent(new MessageEvent("message", { data: { code: 0, danmakuArray: d, loadTime: (/* @__PURE__ */ new Date()).getTime() - startTime, parseTime: Math.random(), sendTip: "", state: 0, textSide: "", total: d.length.toString() } })); }).catch((e) => { console.error("protobuf 弹幕获取失败", e); }); return true; } return false; }); } /** 允许普权弹幕排版 */ trim() { propertyHook(String.prototype, "trim", function() { return String(this); }); } async getSegDanmaku(aid = BLOD.aid, cid = BLOD.cid) { if (!cid) throw new Error(\`无法获取弹幕 aid:\${aid} cid:\${cid}\`); return new ApiDmWeb(aid, cid).toCmd(); } /** 加载本地xml弹幕 */ localDmXml() { var _a3; if (!window.player) return toast.warning("未找到播放器实例!请在播放页面使用。"); if (!((_a3 = window.player) == null ? void 0 : _a3.appendDm)) return toast.warning("未启用【重构播放器】,无法载入弹幕!"); const msg = toast.list("加载本地弹幕 >>>", "> 请选择一个弹幕文件,拓展名:.xml,编码:utf-8"); fileRead(".xml").then((d) => { msg.push("> -------loading-------", \`> 弹幕:\${d.name}\`, \`> 类型:\${d.type}\`, \`> 大小:\${sizeFormat(d.size)}\`); msg.type = "warning"; return readAs(d); }).then((d) => { const dm = DanmakuBase.decodeXml(d); window.player.appendDm(dm, !user.userStatus.dmContact); msg.push("> -------decoding-------", \`> 有效弹幕数:\${dm.length}\`, \`> 加载模式:\${user.userStatus.dmContact ? "与已有弹幕合并" : "清空已有弹幕"}\`); msg.type = "success"; }).catch((e) => { msg.push(e); msg.type = "error"; }).finally(() => { msg.delay = user.userStatus.toast.delay; }); } /** 加载本地json弹幕 */ localDmJson() { var _a3; if (!window.player) return toast.warning("未找到播放器实例!请在播放页面使用。"); if (!((_a3 = window.player) == null ? void 0 : _a3.appendDm)) return toast.warning("未启用【重构播放器】,无法载入弹幕!"); const msg = toast.list("加载本地弹幕 >>>", "> 请选择一个弹幕文件,拓展名:.json,编码:utf-8"); fileRead(".json").then((d) => { msg.push("> -------loading-------", \`> 弹幕:\${d.name}\`, \`> 类型:\${d.type}\`, \`> 大小:\${sizeFormat(d.size)}\`); msg.type = "warning"; return readAs(d); }).then((d) => { const dm = JSON.parse(d); window.player.appendDm(dm, !user.userStatus.dmContact); msg.push("> -------decoding-------", \`> 有效弹幕数:\${dm.length}\`, \`> 加载模式:\${user.userStatus.dmContact ? "与已有弹幕合并" : "清空已有弹幕"}\`); msg.type = "success"; }).catch((e) => { msg.push(e); msg.type = "error"; }).finally(() => { msg.delay = user.userStatus.toast.delay; }); } /** 下载弹幕 */ async download(aid = BLOD.aid, cid = BLOD.cid) { var _a3; if (!cid) return toast.warning("未找到播放器实例!请在播放页面使用。"); const dms = ((_a3 = window.player) == null ? void 0 : _a3.getDanmaku) ? window.player.getDanmaku() : await new ApiDmWeb(aid, cid).getData(); const metadata = videoInfo.metadata; const title = metadata ? \`\${metadata.album}(\${metadata.title})\` : \`\${aid}.\${cid}\`; if (user.userStatus.dmExtension === "json") { return saveAs(JSON.stringify(dms, void 0, " "), \`\${title}.json\`, "application/json"); } return saveAs(DanmakuBase.encodeXml(DanmakuBase.parseCmd(dms), cid), \`\${title}.xml\`, "application/xml"); } /** 加载在线弹幕 */ async onlineDm(str) { var _a3; if (!window.player) return toast.warning("未找到播放器实例!请在播放页面使用。"); if (!((_a3 = window.player) == null ? void 0 : _a3.appendDm)) return toast.warning("未启用【重构播放器】,无法载入弹幕!"); const msg = toast.list("加载在线弹幕 >>>", "> -------在线弹幕-------", \`> 目标:\${str}\`); const { aid, cid } = await urlParam(str); msg.push(\`> aid:\${aid}\`, \`> cid:\${cid}\`); if (!aid || !cid) { msg.push("> 查询cid信息失败,已退出!"); msg.type = "error"; msg.delay = toast.delay; } else { new ApiDmWeb(aid, cid).getData().then((d) => { window.player.appendDm(d, !user.userStatus.dmContact); msg.push(\`> 有效弹幕数:\${d.length}\`, \`> 加载模式:\${user.userStatus.dmContact ? "与已有弹幕合并" : "清空已有弹幕"}\`); msg.type = "success"; }).catch((e) => { msg.push(e); msg.type = "error"; }).finally(() => { msg.delay = user.userStatus.toast.delay; }); } } }; var danmaku = new Danmaku(); // src/core/download.ts init_tampermonkey(); // src/io/api-playurl.ts init_tampermonkey(); // src/io/api-sign.ts init_tampermonkey(); var import_md5 = __toESM(require_md5()); var APP_KEY = /* @__PURE__ */ ((APP_KEY2) => { APP_KEY2["1d8b6e7d45233436"] = "560c52ccd288fed045859ed18bffd973"; APP_KEY2["c1b107428d337928"] = "ea85624dfcf12d7cc7b2b3a94fac1f2c"; APP_KEY2["07da50c9a0bf829f"] = "25bdede4e1581c836cab73a48790ca6e"; APP_KEY2["7d089525d3611b1c"] = "acd495b248ec528c2eed1e862d393126"; APP_KEY2["9e5ded06c39bf5c4"] = "583e398ed0f980290b5903aba30b4cc4"; APP_KEY2["27eb53fc9058f8c3"] = "c2ed53a74eeefe3cf99fbd01d8c9c375"; APP_KEY2["85eb6835b0a1034e"] = "2ad42749773c441109bdc0191257a664"; APP_KEY2["4409e2ce8ffd12b8"] = "59b43e04ad6965f34319062b478f83dd"; APP_KEY2["37207f2beaebf8d7"] = "e988e794d4d4b6dd43bc0e89d6e90c43"; APP_KEY2["84956560bc028eb7"] = "94aba54af9065f71de72f5508f1cd42e"; APP_KEY2["bb3101000e232e27"] = "36efcfed79309338ced0380abd824ac1"; APP_KEY2["fb06a25c6338edbc"] = "fd10bd177559780c2e4a44f1fa47fa83"; APP_KEY2["iVGUTjsxvpLeuDCf"] = "aHRmhWMLkdeMuILqORnYZocwMBpMEOdt"; APP_KEY2["178cf125136ca8ea"] = "34381a26236dd1171185c0beb042e1c6"; APP_KEY2["57263273bc6b67f6"] = "a0488e488d1567960d3a765e8d129f90"; APP_KEY2["8d23902c1688a798"] = "710f0212e62bd499b8d3ac6e1db9302a"; APP_KEY2["7d336ec01856996b"] = "a1ce6983bc89e20a36c37f40c4f1a0dd"; APP_KEY2["8e16697a1b4f8121"] = "f5dd03b752426f2e623d7badb28d190a"; APP_KEY2["aae92bc66f3edfab"] = "af125a0d5279fd576c1b4418a3e8276d"; APP_KEY2["ae57252b0c09105d"] = "c75875c596a69eb55bd119e74b07cfe3"; APP_KEY2["bca7e84c2d947ac6"] = "60698ba2f68e01ce44738920a0ffe768"; APP_KEY2["cc578d267072c94d"] = "ffb6bb4c4edae2566584dbcacfc6a6ad"; APP_KEY2["cc8617fd6961e070"] = "3131924b941aac971e45189f265262be"; APP_KEY2["YvirImLGlLANCLvM"] = "JNlZNgfNGKZEpaDTkCdPQVXntXhuiJEM"; APP_KEY2["f3bb208b3d081dc8"] = "f7c926f549b9becf1c27644958676a21"; APP_KEY2["4fa4601d1caa8b48"] = "f7c926f549b9becf1c27644958676a21"; APP_KEY2["452d3958f048c02a"] = "f7c926f549b9becf1c27644958676a21"; APP_KEY2["86385cdc024c0f6c"] = "f7c926f549b9becf1c27644958676a21"; APP_KEY2["5256c25b71989747"] = "f7c926f549b9becf1c27644958676a21"; APP_KEY2["e97210393ad42219"] = "f7c926f549b9becf1c27644958676a21"; APP_KEY2["5dce947fe22167f9"] = ""; APP_KEY2["8e9fc618fbd41e28"] = ""; APP_KEY2["21087a09e533a072"] = "e5b8ba95cab6104100be35739304c23a"; APP_KEY2["783bbb7264451d82"] = "2653583c8873dea268ab9386918b1d65"; APP_KEY2["4ebafd7c4951b366"] = "8cb98205e9b2ad3669aad0fce12a4c13"; return APP_KEY2; })(APP_KEY || {}); var ApiSign = class { constructor(url, appkey) { this.url = url; this.appkey = appkey; } get ts() { return (/* @__PURE__ */ new Date()).getTime(); } /** 查询参数,须要在子类中初始化好才能无参数调用\`sign\`方法 */ data = {}; /** * URL签名 * @param searchParams 查询参数,会覆盖url原有参数 * @param api 授权api,**授权第三方登录专用** * @returns 签名后的api */ sign(searchParams = this.data, api = "") { const url = new URL2(this.url); Object.assign(url.params, searchParams, { ts: this.ts }); delete url.params.sign; const appSecret = this.appSecret; url.params.appkey = this.appkey; url.sort(); url.params.sign = (0, import_md5.default)((api ? \`api=\${decodeURIComponent(api)}\` : url.param) + appSecret); return url; } get appSecret() { switch (this.appkey) { case "f3bb208b3d081dc8": case "4fa4601d1caa8b48": case "452d3958f048c02a": case "86385cdc024c0f6c": case "5256c25b71989747": case "e97210393ad42219": switch (Math.trunc((/* @__PURE__ */ new Date()).getHours() / 4)) { case 0: this.appkey = "f3bb208b3d081dc8"; break; case 1: this.appkey = "4fa4601d1caa8b48"; break; case 2: this.appkey = "452d3958f048c02a"; break; case 3: this.appkey = "86385cdc024c0f6c"; break; case 4: this.appkey = "5256c25b71989747"; break; case 5: this.appkey = "e97210393ad42219"; break; default: break; } break; default: break; } return APP_KEY[this.appkey]; } }; async function urlSign(url, searchParams = {}, appkey = "c1b107428d337928") { const api = new ApiSign(url, appkey); const response = await fetch(api.sign(searchParams).toJSON()); return await response.json(); } // src/io/fnval.ts init_tampermonkey(); var qn = 127; var fnver = 0; var fnval = 0 /* FLV */ + 16 /* DASH_H265 */ + 64 /* HDR */ + 128 /* DASH_4K */ + 256 /* DOLBYAUDIO */ + 512 /* DOLBYVIDEO */ + 1024 /* DASH_8K */ + 2048 /* DASH_AV1 */; // src/io/api-playurl.ts var PlayurlDescriptionMap = { 127: "超高清 8K", 126: "杜比视界", 125: "HDR", 121: "超清 4K", 120: "超清 4K", 116: "高清 1080P60", 112: "高清 1080P+", 80: "高清 1080P", 74: "高清 720P60", 64: "高清 720P", 48: "高清 720P", 32: "清晰 480P", 16: "流畅 360P", 15: "流畅 360P", 6: "流畅 240P", 5: "流畅 144P" }; var PlayurlFormatMap = { 127: "hdflv2", 126: "hdflv2", 125: "hdflv2", 121: "hdflv2", 120: "hdflv2", 116: "flv_p60", 112: "hdflv2", 80: "flv", 74: "flv720_p60", 64: "flv720", 48: "flv720", 32: "flv480", 16: "mp4", 15: "mp4", 6: "mp4", 5: "mp4" }; var PlayurlQualityMap = { 127: "8K", 126: "Dolby", 125: "HDR", 121: "4K", 120: "4K", 116: "1080P60", 112: "1080P+", 80: "1080P", 74: "720P60", 64: "720P", 48: "720P", 32: "480P", 16: "360P", 15: "360P", 6: "240P", 5: "144P" }; var PlayurlCodecs = { 30126: "hvc1.2.4.L153.90", 126: "hvc1.2.4.L153.90", 30121: "hev1.1.6.L156.90", 121: "hev1.1.6.L156.90", 30120: "avc1.64003C", 120: "avc1.64003C", 30112: "avc1.640028", // 1080P+ 112: "avc1.640028", // 1080P+ 30102: "hev1.1.6.L120.90", // HEVC 1080P+ 102: "hev1.1.6.L120.90", // HEVC 1080P+ 30080: "avc1.640028", // 1080P 80: "avc1.640028", // 1080P 30077: "hev1.1.6.L120.90", // HEVC 1080P 77: "hev1.1.6.L120.90", // HEVC 1080P 30064: "avc1.64001F", // 720P 64: "avc1.64001F", // 720P 30066: "hev1.1.6.L120.90", // HEVC 720P 66: "hev1.1.6.L120.90", // HEVC 720P 30032: "avc1.64001E", // 480P 32: "avc1.64001E", // 480P 30033: "hev1.1.6.L120.90", // HEVC 480P 33: "hev1.1.6.L120.90", // HEVC 480P 30011: "hev1.1.6.L120.90", // HEVC 360P 11: "hev1.1.6.L120.90", // HEVC 360P 30016: "avc1.64001E", // 360P 16: "avc1.64001E", // 360P 30006: "avc1.64001E", //240P 6: "avc1.64001E", // 240P 30005: "avc1.64001E", // 144P 5: "avc1.64001E", // 144P 30251: "fLaC", // Hires 30250: "ec-3", // Dolby 30280: "mp4a.40.2", // 高码音频 30232: "mp4a.40.2", // 中码音频 30216: "mp4a.40.2" // 低码音频 }; var PlayurlCodecsAPP = { 30016: "avc1.64001E", // APP源 360P 16: "avc1.64001E", // APP源 360P 30032: "avc1.64001F", // APP源 480P 32: "avc1.64001F", // APP源 480P 30064: "avc1.640028", // APP源 720P 64: "avc1.640028", // APP源 720P 30080: "avc1.640032", // APP源 1080P 80: "avc1.640032", // APP源 1080P 30216: "mp4a.40.2", // APP源 低码音频 30232: "mp4a.40.2", // APP源 中码音频 30280: "mp4a.40.2" // APP源 高码音频 }; var PlayurlFrameRate = { 30121: "16000/672", 121: "16000/672", 30120: "16000/672", 120: "16000/672", 30112: "16000/672", 112: "16000/672", 30102: "16000/672", 102: "16000/672", 30080: "16000/672", 80: "16000/672", 30077: "16000/656", 77: "16000/656", 30064: "16000/672", 64: "16000/672", 30066: "16000/656", 66: "16000/656", 30032: "16000/672", 32: "16000/672", 30033: "16000/656", 33: "16000/656", 30011: "16000/656", 11: "16000/656", 30016: "16000/672", 16: "16000/672", 30006: "16000/672", 6: "16000/672", 30005: "16000/672", 5: "16000/672" }; var PlayurlResolution = { 30121: [3840, 2160], 121: [3840, 2160], 30120: [3840, 2160], 120: [3840, 2160], 30112: [1920, 1080], // 1080P+ 112: [1920, 1080], // 1080P+ 30102: [1920, 1080], // HEVC 1080P+ 102: [1920, 1080], // HEVC 1080P+ 30080: [1920, 1080], // 1080P 80: [1920, 1080], // 1080P 30077: [1920, 1080], // HEVC 1080P 77: [1920, 1080], // HEVC 1080P 30064: [1280, 720], // 720P 64: [1280, 720], // 720P 30066: [1280, 720], // HEVC 720P 66: [1280, 720], // HEVC 720P 30032: [852, 480], // 480P 32: [852, 480], // 480P 30033: [852, 480], // HEVC 480P 33: [852, 480], // HEVC 480P 30011: [640, 360], // HEVC 360P 11: [640, 360], // HEVC 360P 30016: [640, 360], // 360P 16: [640, 360], // 360P 30006: [426, 240], // 240P 6: [426, 240], // 240P 30005: [256, 144], // 144P 5: [256, 144] // 144P }; var PlayurlDash = class { accept_description = []; accept_format = ""; accept_quality = []; bp = 0; code = 0; dash = { audio: [], dolby: { audio: [], type: 0 }, duration: 0, min_buffer_time: 1.5, minBufferTime: 1.5, video: [] }; fnval = 4048; fnver = 0; format = "flv"; from = "local"; has_paid = true; is_preview = 0; message = ""; no_rexcode = 1; quality = 80; result = "suee"; seek_param = "start"; seek_type = "offset"; status = 2; support_formats = []; timelength = 0; type = "DASH"; video_codecid = 7; video_project = true; }; async function apiPlayurl(data, dash = true, pgc = false, server = "api.bilibili.com") { data = Object.assign({ qn, otype: "json", fourk: 1 }, data, dash ? { fnver, fnval } : {}); const response = await fetch(objUrl(pgc ? URLS.PGC_PLAYURL.replace("api.bilibili.com", server) : URLS.PLAYURL, data), { credentials: "include" }); const json = await response.json(); if (pgc) { return jsonCheck(json).result; } return jsonCheck(json).data; } // src/io/api-playurl-interface.ts init_tampermonkey(); var ApiPlayurlInterface = class extends ApiSign { constructor(data, pgc = false) { super(pgc ? URLS.PLAYURL_BANGUMI : URLS.PLAYURL_INTERFACE, "YvirImLGlLANCLvM"); this.data = data; this.data = Object.assign({ otype: "json", qn: data.quality, type: "", fnver, fnval }, data, pgc ? { module: "bangumi", season_type: 1 } : {}); } async getData() { const response = await fetch(this.sign().toJSON(), { credentials: "include" }); return await response.json(); } }; // src/io/api-playurl-intl.ts init_tampermonkey(); var ApiPlayurlIntl = class extends ApiSign { constructor(data, dash = true, pgc = false) { super(pgc ? URLS.INTL_OGV_PLAYURL : URLS.INTL_PLAYURL, "bb3101000e232e27"); this.data = data; this.pgc = pgc; this.data = Object.assign({ device: "android", force_host: 1, mobi_app: "android_i", qn, platform: "android_i", fourk: 1, build: 2100110, otype: "json" }, data, dash ? { fnval, fnver } : {}); } async getData() { const response = await GM.fetch(this.sign().toJSON()); const json = await response.json(); if (this.pgc) { return jsonCheck(json); } return jsonCheck(json).data; } }; // src/io/api-playurl-tv.ts init_tampermonkey(); var ApiPlayurlTv = class extends ApiSign { constructor(data, dash = true, pgc = false) { super(pgc ? URLS.PGC_PLAYURL_TV : URLS.UGC_PLAYURL_TV, "27eb53fc9058f8c3"); this.data = data; this.data = Object.assign({ qn, fourk: 1, otype: "json", platform: "android", mobi_app: "android_tv_yst", build: 102801 }, data, dash ? { fnval, fnver } : {}); } async getData() { const response = await fetch(this.sign().toJSON()); const json = await response.json(); return jsonCheck(json); } }; // src/io/api-playurlproj.ts init_tampermonkey(); var ApiPlayurlProj = class extends ApiSign { constructor(data, pgc = false) { super(pgc ? URLS.PGC_PLAYURL_PROJ : URLS.PLAYURL_PROJ, "bb3101000e232e27"); this.data = data; this.data = Object.assign({ build: "2040100", device: "android", mobi_app: "android_i", otype: "json", platform: "android_i", qn }, data); pgc && (this.data.module = "bangumi"); } async getData() { const response = await fetch(this.sign().toJSON()); return await response.json(); } }; // src/io/grpc/BAPIAppPlayurl/v1/playurl.ts init_tampermonkey(); var import_light3 = __toESM(require_light()); // src/io/grpc/BAPIAppPlayurl/v1/playurl.json var playurl_default = { nested: { bilibili: { nested: { pgc: { nested: { gateway: { nested: { player: { nested: { v1: { nested: { PlayViewReq: { fields: { epId: { type: "int64", id: 1 }, cid: { type: "int64", id: 2 }, qn: { type: "int64", id: 3 }, fnver: { type: "int32", id: 4 }, fnval: { type: "int32", id: 5 }, download: { type: "uint32", id: 6 }, forceHost: { type: "int32", id: 7 }, fourk: { type: "bool", id: 8 }, spmid: { type: "string", id: 9 }, fromSpmid: { type: "string", id: 10 }, teenagersMode: { type: "int32", id: 11 }, preferCodecType: { type: "bilibili.app.playurl.v1.CodeType", id: 12 }, isPreview: { type: "bool", id: 13 }, roomId: { type: "int64", id: 14 } } }, ProjectReq: { fields: { epId: { type: "int64", id: 1 }, cid: { type: "int64", id: 2 }, qn: { type: "int64", id: 3 }, fnver: { type: "int32", id: 4 }, fnval: { type: "int32", id: 5 }, download: { type: "uint32", id: 6 }, forceHost: { type: "int32", id: 7 }, fourk: { type: "bool", id: 8 }, spmid: { type: "string", id: 9 }, fromSpmid: { type: "string", id: 10 }, protocol: { type: "int32", id: 11 }, deviceType: { type: "int32", id: 12 } } }, PlayViewReply: { fields: { videoInfo: { type: "bilibili.app.playurl.v1.VideoInfo", id: 1 }, playConf: { type: "PlayAbilityConf", id: 2 }, business: { type: "BusinessInfo", id: 3 }, event: { type: "Event", id: 4 } } }, Event: { fields: { shake: { type: "Shake", id: 1 } } }, Shake: { fields: { file: { type: "string", id: 1 } } }, BusinessInfo: { fields: { isPreview: { type: "bool", id: 1 }, bp: { type: "bool", id: 2 }, marlinToken: { type: "string", id: 3 } } }, PlayAbilityConf: { fields: { backgroundPlayDisable: { type: "bool", id: 1 }, flipDisable: { type: "bool", id: 2 }, castDisable: { type: "bool", id: 3 }, feedbackDisable: { type: "bool", id: 4 }, subtitleDisable: { type: "bool", id: 5 }, playbackRateDisable: { type: "bool", id: 6 }, timeUpDisable: { type: "bool", id: 7 }, playbackModeDisable: { type: "bool", id: 8 }, scaleModeDisable: { type: "bool", id: 9 }, likeDisable: { type: "bool", id: 10 }, dislikeDisable: { type: "bool", id: 11 }, coinDisable: { type: "bool", id: 12 }, elecDisable: { type: "bool", id: 13 }, shareDisable: { type: "bool", id: 14 }, screenShotDisable: { type: "bool", id: 15 }, lockScreenDisable: { type: "bool", id: 16 }, recommendDisable: { type: "bool", id: 17 }, playbackSpeedDisable: { type: "bool", id: 18 }, definitionDisable: { type: "bool", id: 19 }, selectionsDisable: { type: "bool", id: 20 }, nextDisable: { type: "bool", id: 21 }, editDmDisable: { type: "bool", id: 22 }, smallWindowDisable: { type: "bool", id: 23 }, shakeDisable: { type: "bool", id: 24 }, outerDmDisable: { type: "bool", id: 25 }, innerDmDisable: { type: "bool", id: 26 }, freyaEnterDisable: { type: "bool", id: 27 }, dolbyDisable: { type: "bool", id: 28 }, freyaFullDisable: { type: "bool", id: 29 } } }, ProjectReply: { fields: { project: { type: "bilibili.app.playurl.v1.PlayURLReply", id: 1 } } }, LivePlayViewReq: { fields: { epId: { type: "int64", id: 1 }, quality: { type: "uint32", id: 2 }, ptype: { type: "uint32", id: 3 }, https: { type: "bool", id: 4 }, playType: { type: "uint32", id: 5 }, deviceType: { type: "int32", id: 6 } } }, LivePlayViewReply: { fields: { roomInfo: { type: "RoomInfo", id: 1 }, playInfo: { type: "LivePlayInfo", id: 2 } } }, RoomInfo: { fields: { roomId: { type: "int64", id: 1 }, uid: { type: "int64", id: 2 }, status: { type: "RoomStatusInfo", id: 3 }, show: { type: "RoomShowInfo", id: 4 } } }, RoomStatusInfo: { fields: { liveStatus: { type: "int64", id: 1 }, liveScreenType: { type: "int64", id: 2 }, liveMark: { type: "int64", id: 3 }, lockStatus: { type: "int64", id: 4 }, lockTime: { type: "int64", id: 5 }, hiddenStatus: { type: "int64", id: 6 }, hiddenTime: { type: "int64", id: 7 }, liveType: { type: "int64", id: 8 }, roomShield: { type: "int64", id: 9 } } }, RoomShowInfo: { fields: { shortId: { type: "int64", id: 1 }, popularityCount: { type: "int64", id: 8 }, liveStartTime: { type: "int64", id: 10 } } }, LivePlayInfo: { fields: { currentQn: { type: "int32", id: 1 }, qualityDescription: { rule: "repeated", type: "QualityDescription", id: 2 }, durl: { rule: "repeated", type: "ResponseDataUrl", id: 3 } } }, QualityDescription: { fields: { qn: { type: "int32", id: 1 }, desc: { type: "string", id: 2 } } }, ResponseDataUrl: { fields: { url: { type: "string", id: 1 }, streamType: { type: "uint32", id: 2 }, ptag: { type: "uint32", id: 3 } } } } } } } } } } }, app: { nested: { playurl: { nested: { v1: { nested: { PlayURLReq: { fields: { aid: { type: "int64", id: 1 }, cid: { type: "int64", id: 2 }, qn: { type: "int64", id: 3 }, fnver: { type: "int32", id: 4 }, fnval: { type: "int32", id: 5 }, download: { type: "uint32", id: 6 }, forceHost: { type: "int32", id: 7 }, fourk: { type: "bool", id: 8 }, spmid: { type: "string", id: 9 }, fromSpmid: { type: "string", id: 10 } } }, PlayURLReply: { fields: { quality: { type: "uint32", id: 1 }, format: { type: "string", id: 2 }, timelength: { type: "uint64", id: 3 }, videoCodecid: { type: "uint32", id: 4 }, fnver: { type: "uint32", id: 5 }, fnval: { type: "uint32", id: 6 }, videoProject: { type: "bool", id: 7 }, durl: { rule: "repeated", type: "ResponseUrl", id: 8 }, dash: { type: "ResponseDash", id: 9 }, noRexcode: { type: "int32", id: 10 }, upgradeLimit: { type: "UpgradeLimit", id: 11 }, supportFormats: { rule: "repeated", type: "FormatDescription", id: 12 }, type: { type: "VideoType", id: 13 } } }, ResponseUrl: { fields: { order: { type: "uint32", id: 1 }, length: { type: "uint64", id: 2 }, size: { type: "uint64", id: 3 }, url: { type: "string", id: 4 }, backupUrl: { rule: "repeated", type: "string", id: 5 }, md5: { type: "string", id: 6 } } }, ResponseDash: { fields: { video: { rule: "repeated", type: "DashItem", id: 1 }, audio: { rule: "repeated", type: "DashItem", id: 2 } } }, DashItem: { fields: { id: { type: "uint32", id: 1 }, baseUrl: { type: "string", id: 2 }, backupUrl: { rule: "repeated", type: "string", id: 3 }, bandwidth: { type: "uint32", id: 4 }, codecid: { type: "uint32", id: 5 }, md5: { type: "string", id: 6 }, size: { type: "uint64", id: 7 }, frameRate: { type: "string", id: 8 } } }, UpgradeLimit: { fields: { code: { type: "int32", id: 1 }, message: { type: "string", id: 2 }, image: { type: "string", id: 3 }, button: { type: "UpgradeButton", id: 4 } } }, UpgradeButton: { fields: { title: { type: "string", id: 1 }, link: { type: "string", id: 2 } } }, FormatDescription: { fields: { quality: { type: "uint32", id: 1 }, format: { type: "string", id: 2 }, description: { type: "string", id: 3 }, newDescription: { type: "string", id: 4 }, displayDesc: { type: "string", id: 5 }, superscript: { type: "string", id: 6 } } }, ProjectReq: { fields: { aid: { type: "int64", id: 1 }, cid: { type: "int64", id: 2 }, qn: { type: "int64", id: 3 }, fnver: { type: "int32", id: 4 }, fnval: { type: "int32", id: 5 }, download: { type: "uint32", id: 6 }, forceHost: { type: "int32", id: 7 }, fourk: { type: "bool", id: 8 }, spmid: { type: "string", id: 9 }, fromSpmid: { type: "string", id: 10 }, protocol: { type: "int32", id: 11 }, deviceType: { type: "int32", id: 12 } } }, ProjectReply: { fields: { project: { type: "PlayURLReply", id: 1 } } }, PlayViewReq: { fields: { aid: { type: "int64", id: 1 }, cid: { type: "int64", id: 2 }, qn: { type: "int64", id: 3 }, fnver: { type: "int32", id: 4 }, fnval: { type: "int32", id: 5 }, download: { type: "uint32", id: 6 }, forceHost: { type: "int32", id: 7 }, fourk: { type: "bool", id: 8 }, spmid: { type: "string", id: 9 }, fromSpmid: { type: "string", id: 10 }, teenagersMode: { type: "int32", id: 11 }, preferCodecType: { type: "CodeType", id: 12 }, business: { type: "Business", id: 13 } } }, Business: { values: { UNKNOWN: 0, STORY: 1 } }, CodeType: { values: { NOCODE: 0, CODE264: 1, CODE265: 2 } }, PlayViewReply: { fields: { videoInfo: { type: "VideoInfo", id: 1 }, playConf: { type: "PlayAbilityConf", id: 2 }, upgradeLimit: { type: "UpgradeLimit", id: 3 }, chronos: { type: "Chronos", id: 4 }, playArc: { type: "PlayArcConf", id: 5 }, event: { type: "Event", id: 6 } } }, Event: { fields: { shake: { type: "Shake", id: 1 } } }, Shake: { fields: { file: { type: "string", id: 1 } } }, Chronos: { fields: { md5: { type: "string", id: 1 }, file: { type: "string", id: 2 } } }, PlayConfReq: { fields: {} }, PlayConfReply: { fields: { playConf: { type: "PlayAbilityConf", id: 1 } } }, PlayAbilityConf: { fields: { backgroundPlayConf: { type: "CloudConf", id: 1 }, flipConf: { type: "CloudConf", id: 2 }, castConf: { type: "CloudConf", id: 3 }, feedbackConf: { type: "CloudConf", id: 4 }, subtitleConf: { type: "CloudConf", id: 5 }, playbackRateConf: { type: "CloudConf", id: 6 }, timeUpConf: { type: "CloudConf", id: 7 }, playbackModeConf: { type: "CloudConf", id: 8 }, scaleModeConf: { type: "CloudConf", id: 9 }, likeConf: { type: "CloudConf", id: 10 }, dislikeConf: { type: "CloudConf", id: 11 }, coinConf: { type: "CloudConf", id: 12 }, elecConf: { type: "CloudConf", id: 13 }, shareConf: { type: "CloudConf", id: 14 }, screenShotConf: { type: "CloudConf", id: 15 }, lockScreenConf: { type: "CloudConf", id: 16 }, recommendConf: { type: "CloudConf", id: 17 }, playbackSpeedConf: { type: "CloudConf", id: 18 }, definitionConf: { type: "CloudConf", id: 19 }, selectionsConf: { type: "CloudConf", id: 20 }, nextConf: { type: "CloudConf", id: 21 }, editDmConf: { type: "CloudConf", id: 22 }, smallWindowConf: { type: "CloudConf", id: 23 }, shakeConf: { type: "CloudConf", id: 24 }, outerDmConf: { type: "CloudConf", id: 25 }, innerDmConf: { type: "CloudConf", id: 26 }, panoramaConf: { type: "CloudConf", id: 27 }, dolbyConf: { type: "CloudConf", id: 28 } } }, PlayArcConf: { fields: { backgroundPlayConf: { type: "ArcConf", id: 1 }, flipConf: { type: "ArcConf", id: 2 }, castConf: { type: "ArcConf", id: 3 }, feedbackConf: { type: "ArcConf", id: 4 }, subtitleConf: { type: "ArcConf", id: 5 }, playbackRateConf: { type: "ArcConf", id: 6 }, timeUpConf: { type: "ArcConf", id: 7 }, playbackModeConf: { type: "ArcConf", id: 8 }, scaleModeConf: { type: "ArcConf", id: 9 }, likeConf: { type: "ArcConf", id: 10 }, dislikeConf: { type: "ArcConf", id: 11 }, coinConf: { type: "ArcConf", id: 12 }, elecConf: { type: "ArcConf", id: 13 }, shareConf: { type: "ArcConf", id: 14 }, screenShotConf: { type: "ArcConf", id: 15 }, lockScreenConf: { type: "ArcConf", id: 16 }, recommendConf: { type: "ArcConf", id: 17 }, playbackSpeedConf: { type: "ArcConf", id: 18 }, definitionConf: { type: "ArcConf", id: 19 }, selectionsConf: { type: "ArcConf", id: 20 }, nextConf: { type: "ArcConf", id: 21 }, editDmConf: { type: "ArcConf", id: 22 }, smallWindowConf: { type: "ArcConf", id: 23 }, shakeConf: { type: "ArcConf", id: 24 }, outerDmConf: { type: "ArcConf", id: 25 }, innerDmConf: { type: "ArcConf", id: 26 }, panoramaConf: { type: "ArcConf", id: 27 }, dolbyConf: { type: "ArcConf", id: 28 } } }, ConfType: { values: { NoType: 0, FLIPCONF: 1, CASTCONF: 2, FEEDBACK: 3, SUBTITLE: 4, PLAYBACKRATE: 5, TIMEUP: 6, PLAYBACKMODE: 7, SCALEMODE: 8, BACKGROUNDPLAY: 9, LIKE: 10, DISLIKE: 11, COIN: 12, ELEC: 13, SHARE: 14, SCREENSHOT: 15, LOCKSCREEN: 16, RECOMMEND: 17, PLAYBACKSPEED: 18, DEFINITION: 19, SELECTIONS: 20, NEXT: 21, EDITDM: 22, SMALLWINDOW: 23, SHAKE: 24, OUTERDM: 25, INNERDM: 26, PANORAMA: 27, DOLBY: 28 } }, CloudConf: { fields: { show: { type: "bool", id: 1 }, confType: { type: "ConfType", id: 2 }, fieldValue: { type: "FieldValue", id: 3 } } }, FieldValue: { oneofs: { value: { oneof: [ "switch" ] } }, fields: { switch: { type: "bool", id: 1 } } }, ArcConf: { fields: { isSupport: { type: "bool", id: 1 } } }, VideoInfo: { fields: { quality: { type: "uint32", id: 1 }, format: { type: "string", id: 2 }, timelength: { type: "uint64", id: 3 }, videoCodecid: { type: "uint32", id: 4 }, streamList: { rule: "repeated", type: "Stream", id: 5 }, dashAudio: { rule: "repeated", type: "DashItem", id: 6 }, dolby: { type: "DolbyItem", id: 7 } } }, DolbyItem: { fields: { type: { type: "Type", id: 1 }, audio: { rule: "repeated", type: "DashItem", id: 2 } }, nested: { Type: { values: { NONE: 0, COMMON: 1, ATMOS: 2 } } } }, Stream: { oneofs: { content: { oneof: [ "dashVideo", "segmentVideo" ] } }, fields: { streamInfo: { type: "StreamInfo", id: 1 }, dashVideo: { type: "DashVideo", id: 2 }, segmentVideo: { type: "SegmentVideo", id: 3 } } }, SegmentVideo: { fields: { segment: { rule: "repeated", type: "ResponseUrl", id: 1 } } }, PlayErr: { values: { NoErr: 0, WithMultiDeviceLoginErr: 1 } }, StreamInfo: { fields: { quality: { type: "uint32", id: 1 }, format: { type: "string", id: 2 }, description: { type: "string", id: 3 }, errCode: { type: "PlayErr", id: 4 }, limit: { type: "StreamLimit", id: 5 }, needVip: { type: "bool", id: 6 }, needLogin: { type: "bool", id: 7 }, intact: { type: "bool", id: 8 }, noRexcode: { type: "bool", id: 9 }, attribute: { type: "int64", id: 10 }, newDescription: { type: "string", id: 11 }, displayDesc: { type: "string", id: 12 }, superscript: { type: "string", id: 13 } } }, StreamLimit: { fields: { title: { type: "string", id: 1 }, uri: { type: "string", id: 2 }, msg: { type: "string", id: 3 } } }, PlayConfEditReply: { fields: {} }, PlayConfEditReq: { fields: { playConf: { rule: "repeated", type: "PlayConfState", id: 1 } } }, PlayConfState: { fields: { confType: { type: "ConfType", id: 1 }, show: { type: "bool", id: 2 }, fieldValue: { type: "FieldValue", id: 3 } } }, DashVideo: { fields: { baseUrl: { type: "string", id: 1 }, backupUrl: { rule: "repeated", type: "string", id: 2 }, bandwidth: { type: "uint32", id: 3 }, codecid: { type: "uint32", id: 4 }, md5: { type: "string", id: 5 }, size: { type: "uint64", id: 6 }, audioId: { type: "uint32", id: 7 }, noRexcode: { type: "bool", id: 8 } } }, VideoType: { values: { Unknown: 0, FLV: 1, DASH: 2, MP4: 3 } } } } } } } } } } } }; // src/io/grpc/BAPIMetadata/metadata.ts init_tampermonkey(); var import_light2 = __toESM(require_light()); // src/io/grpc/BAPIMetadata/metadata.json var metadata_default = { nested: { bilibili: { nested: { metadata: { nested: { Metadata: { fields: { accessKey: { type: "string", id: 1 }, mobiApp: { type: "string", id: 2 }, device: { type: "string", id: 3 }, build: { type: "int32", id: 4 }, channel: { type: "string", id: 5 }, buvid: { type: "string", id: 6 }, platform: { type: "string", id: 7 } } } } }, rpc: { nested: { Status: { fields: { code: { type: "int32", id: 1 }, message: { type: "string", id: 2 }, details: { rule: "repeated", type: "google.protobuf.Any", id: 3 } } } } } } }, google: { nested: { protobuf: { nested: { Any: { fields: { type_url: { type: "string", id: 1 }, value: { type: "google.protobuf.RequestInfo", id: 2 } } }, RequestInfo: { fields: { request_id: { type: "int64", id: 1 }, serving_data: { type: "string", id: 2 } } } } } } } } }; // node_modules/fflate/esm/browser.js init_tampermonkey(); var u8 = Uint8Array; var u16 = Uint16Array; var i32 = Int32Array; var fleb = new u8([ 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, /* unused */ 0, 0, /* impossible */ 0 ]); var fdeb = new u8([ 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, /* unused */ 0, 0 ]); var clim = new u8([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]); var freb = function(eb, start) { var b = new u16(31); for (var i = 0; i < 31; ++i) { b[i] = start += 1 << eb[i - 1]; } var r = new i32(b[30]); for (var i = 1; i < 30; ++i) { for (var j = b[i]; j < b[i + 1]; ++j) { r[j] = j - b[i] << 5 | i; } } return { b, r }; }; var _a = freb(fleb, 2); var fl = _a.b; var revfl = _a.r; fl[28] = 258, revfl[258] = 28; var _b = freb(fdeb, 0); var fd = _b.b; var revfd = _b.r; var rev = new u16(32768); for (i = 0; i < 32768; ++i) { x = (i & 43690) >> 1 | (i & 21845) << 1; x = (x & 52428) >> 2 | (x & 13107) << 2; x = (x & 61680) >> 4 | (x & 3855) << 4; rev[i] = ((x & 65280) >> 8 | (x & 255) << 8) >> 1; } var x; var i; var hMap = function(cd, mb, r) { var s = cd.length; var i = 0; var l = new u16(mb); for (; i < s; ++i) { if (cd[i]) ++l[cd[i] - 1]; } var le = new u16(mb); for (i = 1; i < mb; ++i) { le[i] = le[i - 1] + l[i - 1] << 1; } var co; if (r) { co = new u16(1 << mb); var rvb = 15 - mb; for (i = 0; i < s; ++i) { if (cd[i]) { var sv = i << 4 | cd[i]; var r_1 = mb - cd[i]; var v = le[cd[i] - 1]++ << r_1; for (var m = v | (1 << r_1) - 1; v <= m; ++v) { co[rev[v] >> rvb] = sv; } } } } else { co = new u16(s); for (i = 0; i < s; ++i) { if (cd[i]) { co[i] = rev[le[cd[i] - 1]++] >> 15 - cd[i]; } } } return co; }; var flt = new u8(288); for (i = 0; i < 144; ++i) flt[i] = 8; var i; for (i = 144; i < 256; ++i) flt[i] = 9; var i; for (i = 256; i < 280; ++i) flt[i] = 7; var i; for (i = 280; i < 288; ++i) flt[i] = 8; var i; var fdt = new u8(32); for (i = 0; i < 32; ++i) fdt[i] = 5; var i; var flm = /* @__PURE__ */ hMap(flt, 9, 0); var flrm = /* @__PURE__ */ hMap(flt, 9, 1); var fdm = /* @__PURE__ */ hMap(fdt, 5, 0); var fdrm = /* @__PURE__ */ hMap(fdt, 5, 1); var max = function(a) { var m = a[0]; for (var i = 1; i < a.length; ++i) { if (a[i] > m) m = a[i]; } return m; }; var bits = function(d, p, m) { var o = p / 8 | 0; return (d[o] | d[o + 1] << 8) >> (p & 7) & m; }; var bits16 = function(d, p) { var o = p / 8 | 0; return (d[o] | d[o + 1] << 8 | d[o + 2] << 16) >> (p & 7); }; var shft = function(p) { return (p + 7) / 8 | 0; }; var slc = function(v, s, e) { if (s == null || s < 0) s = 0; if (e == null || e > v.length) e = v.length; return new u8(v.subarray(s, e)); }; var ec = [ "unexpected EOF", "invalid block type", "invalid length/literal", "invalid distance", "stream finished", "no stream handler", , "no callback", "invalid UTF-8 data", "extra field too long", "date not in range 1980-2099", "filename too long", "stream finishing", "invalid zip data" // determined by unknown compression method ]; var err = function(ind, msg, nt) { var e = new Error(msg || ec[ind]); e.code = ind; if (Error.captureStackTrace) Error.captureStackTrace(e, err); if (!nt) throw e; return e; }; var inflt = function(dat, st, buf, dict) { var sl = dat.length, dl = dict ? dict.length : 0; if (!sl || st.f && !st.l) return buf || new u8(0); var noBuf = !buf; var resize = noBuf || st.i != 2; var noSt = st.i; if (noBuf) buf = new u8(sl * 3); var cbuf = function(l2) { var bl = buf.length; if (l2 > bl) { var nbuf = new u8(Math.max(bl * 2, l2)); nbuf.set(buf); buf = nbuf; } }; var final = st.f || 0, pos = st.p || 0, bt = st.b || 0, lm = st.l, dm = st.d, lbt = st.m, dbt = st.n; var tbts = sl * 8; do { if (!lm) { final = bits(dat, pos, 1); var type = bits(dat, pos + 1, 3); pos += 3; if (!type) { var s = shft(pos) + 4, l = dat[s - 4] | dat[s - 3] << 8, t = s + l; if (t > sl) { if (noSt) err(0); break; } if (resize) cbuf(bt + l); buf.set(dat.subarray(s, t), bt); st.b = bt += l, st.p = pos = t * 8, st.f = final; continue; } else if (type == 1) lm = flrm, dm = fdrm, lbt = 9, dbt = 5; else if (type == 2) { var hLit = bits(dat, pos, 31) + 257, hcLen = bits(dat, pos + 10, 15) + 4; var tl = hLit + bits(dat, pos + 5, 31) + 1; pos += 14; var ldt = new u8(tl); var clt = new u8(19); for (var i = 0; i < hcLen; ++i) { clt[clim[i]] = bits(dat, pos + i * 3, 7); } pos += hcLen * 3; var clb = max(clt), clbmsk = (1 << clb) - 1; var clm = hMap(clt, clb, 1); for (var i = 0; i < tl; ) { var r = clm[bits(dat, pos, clbmsk)]; pos += r & 15; var s = r >> 4; if (s < 16) { ldt[i++] = s; } else { var c = 0, n = 0; if (s == 16) n = 3 + bits(dat, pos, 3), pos += 2, c = ldt[i - 1]; else if (s == 17) n = 3 + bits(dat, pos, 7), pos += 3; else if (s == 18) n = 11 + bits(dat, pos, 127), pos += 7; while (n--) ldt[i++] = c; } } var lt = ldt.subarray(0, hLit), dt = ldt.subarray(hLit); lbt = max(lt); dbt = max(dt); lm = hMap(lt, lbt, 1); dm = hMap(dt, dbt, 1); } else err(1); if (pos > tbts) { if (noSt) err(0); break; } } if (resize) cbuf(bt + 131072); var lms = (1 << lbt) - 1, dms = (1 << dbt) - 1; var lpos = pos; for (; ; lpos = pos) { var c = lm[bits16(dat, pos) & lms], sym = c >> 4; pos += c & 15; if (pos > tbts) { if (noSt) err(0); break; } if (!c) err(2); if (sym < 256) buf[bt++] = sym; else if (sym == 256) { lpos = pos, lm = null; break; } else { var add = sym - 254; if (sym > 264) { var i = sym - 257, b = fleb[i]; add = bits(dat, pos, (1 << b) - 1) + fl[i]; pos += b; } var d = dm[bits16(dat, pos) & dms], dsym = d >> 4; if (!d) err(3); pos += d & 15; var dt = fd[dsym]; if (dsym > 3) { var b = fdeb[dsym]; dt += bits16(dat, pos) & (1 << b) - 1, pos += b; } if (pos > tbts) { if (noSt) err(0); break; } if (resize) cbuf(bt + 131072); var end = bt + add; if (bt < dt) { var shift = dl - dt, dend = Math.min(dt, end); if (shift + bt < 0) err(3); for (; bt < dend; ++bt) buf[bt] = dict[shift + bt]; } for (; bt < end; ++bt) buf[bt] = buf[bt - dt]; } } st.l = lm, st.p = lpos, st.b = bt, st.f = final; if (lm) final = 1, st.m = lbt, st.d = dm, st.n = dbt; } while (!final); return bt != buf.length && noBuf ? slc(buf, 0, bt) : buf.subarray(0, bt); }; var wbits = function(d, p, v) { v <<= p & 7; var o = p / 8 | 0; d[o] |= v; d[o + 1] |= v >> 8; }; var wbits16 = function(d, p, v) { v <<= p & 7; var o = p / 8 | 0; d[o] |= v; d[o + 1] |= v >> 8; d[o + 2] |= v >> 16; }; var hTree = function(d, mb) { var t = []; for (var i = 0; i < d.length; ++i) { if (d[i]) t.push({ s: i, f: d[i] }); } var s = t.length; var t2 = t.slice(); if (!s) return { t: et, l: 0 }; if (s == 1) { var v = new u8(t[0].s + 1); v[t[0].s] = 1; return { t: v, l: 1 }; } t.sort(function(a, b) { return a.f - b.f; }); t.push({ s: -1, f: 25001 }); var l = t[0], r = t[1], i0 = 0, i1 = 1, i2 = 2; t[0] = { s: -1, f: l.f + r.f, l, r }; while (i1 != s - 1) { l = t[t[i0].f < t[i2].f ? i0++ : i2++]; r = t[i0 != i1 && t[i0].f < t[i2].f ? i0++ : i2++]; t[i1++] = { s: -1, f: l.f + r.f, l, r }; } var maxSym = t2[0].s; for (var i = 1; i < s; ++i) { if (t2[i].s > maxSym) maxSym = t2[i].s; } var tr = new u16(maxSym + 1); var mbt = ln(t[i1 - 1], tr, 0); if (mbt > mb) { var i = 0, dt = 0; var lft = mbt - mb, cst = 1 << lft; t2.sort(function(a, b) { return tr[b.s] - tr[a.s] || a.f - b.f; }); for (; i < s; ++i) { var i2_1 = t2[i].s; if (tr[i2_1] > mb) { dt += cst - (1 << mbt - tr[i2_1]); tr[i2_1] = mb; } else break; } dt >>= lft; while (dt > 0) { var i2_2 = t2[i].s; if (tr[i2_2] < mb) dt -= 1 << mb - tr[i2_2]++ - 1; else ++i; } for (; i >= 0 && dt; --i) { var i2_3 = t2[i].s; if (tr[i2_3] == mb) { --tr[i2_3]; ++dt; } } mbt = mb; } return { t: new u8(tr), l: mbt }; }; var ln = function(n, l, d) { return n.s == -1 ? Math.max(ln(n.l, l, d + 1), ln(n.r, l, d + 1)) : l[n.s] = d; }; var lc = function(c) { var s = c.length; while (s && !c[--s]) ; var cl = new u16(++s); var cli = 0, cln = c[0], cls = 1; var w = function(v) { cl[cli++] = v; }; for (var i = 1; i <= s; ++i) { if (c[i] == cln && i != s) ++cls; else { if (!cln && cls > 2) { for (; cls > 138; cls -= 138) w(32754); if (cls > 2) { w(cls > 10 ? cls - 11 << 5 | 28690 : cls - 3 << 5 | 12305); cls = 0; } } else if (cls > 3) { w(cln), --cls; for (; cls > 6; cls -= 6) w(8304); if (cls > 2) w(cls - 3 << 5 | 8208), cls = 0; } while (cls--) w(cln); cls = 1; cln = c[i]; } } return { c: cl.subarray(0, cli), n: s }; }; var clen = function(cf, cl) { var l = 0; for (var i = 0; i < cl.length; ++i) l += cf[i] * cl[i]; return l; }; var wfblk = function(out, pos, dat) { var s = dat.length; var o = shft(pos + 2); out[o] = s & 255; out[o + 1] = s >> 8; out[o + 2] = out[o] ^ 255; out[o + 3] = out[o + 1] ^ 255; for (var i = 0; i < s; ++i) out[o + i + 4] = dat[i]; return (o + 4 + s) * 8; }; var wblk = function(dat, out, final, syms, lf, df, eb, li, bs, bl, p) { wbits(out, p++, final); ++lf[256]; var _a3 = hTree(lf, 15), dlt = _a3.t, mlb = _a3.l; var _b2 = hTree(df, 15), ddt = _b2.t, mdb = _b2.l; var _c = lc(dlt), lclt = _c.c, nlc = _c.n; var _d = lc(ddt), lcdt = _d.c, ndc = _d.n; var lcfreq = new u16(19); for (var i = 0; i < lclt.length; ++i) ++lcfreq[lclt[i] & 31]; for (var i = 0; i < lcdt.length; ++i) ++lcfreq[lcdt[i] & 31]; var _e = hTree(lcfreq, 7), lct = _e.t, mlcb = _e.l; var nlcc = 19; for (; nlcc > 4 && !lct[clim[nlcc - 1]]; --nlcc) ; var flen = bl + 5 << 3; var ftlen = clen(lf, flt) + clen(df, fdt) + eb; var dtlen = clen(lf, dlt) + clen(df, ddt) + eb + 14 + 3 * nlcc + clen(lcfreq, lct) + 2 * lcfreq[16] + 3 * lcfreq[17] + 7 * lcfreq[18]; if (bs >= 0 && flen <= ftlen && flen <= dtlen) return wfblk(out, p, dat.subarray(bs, bs + bl)); var lm, ll, dm, dl; wbits(out, p, 1 + (dtlen < ftlen)), p += 2; if (dtlen < ftlen) { lm = hMap(dlt, mlb, 0), ll = dlt, dm = hMap(ddt, mdb, 0), dl = ddt; var llm = hMap(lct, mlcb, 0); wbits(out, p, nlc - 257); wbits(out, p + 5, ndc - 1); wbits(out, p + 10, nlcc - 4); p += 14; for (var i = 0; i < nlcc; ++i) wbits(out, p + 3 * i, lct[clim[i]]); p += 3 * nlcc; var lcts = [lclt, lcdt]; for (var it = 0; it < 2; ++it) { var clct = lcts[it]; for (var i = 0; i < clct.length; ++i) { var len = clct[i] & 31; wbits(out, p, llm[len]), p += lct[len]; if (len > 15) wbits(out, p, clct[i] >> 5 & 127), p += clct[i] >> 12; } } } else { lm = flm, ll = flt, dm = fdm, dl = fdt; } for (var i = 0; i < li; ++i) { var sym = syms[i]; if (sym > 255) { var len = sym >> 18 & 31; wbits16(out, p, lm[len + 257]), p += ll[len + 257]; if (len > 7) wbits(out, p, sym >> 23 & 31), p += fleb[len]; var dst = sym & 31; wbits16(out, p, dm[dst]), p += dl[dst]; if (dst > 3) wbits16(out, p, sym >> 5 & 8191), p += fdeb[dst]; } else { wbits16(out, p, lm[sym]), p += ll[sym]; } } wbits16(out, p, lm[256]); return p + ll[256]; }; var deo = /* @__PURE__ */ new i32([65540, 131080, 131088, 131104, 262176, 1048704, 1048832, 2114560, 2117632]); var et = /* @__PURE__ */ new u8(0); var dflt = function(dat, lvl, plvl, pre, post, st) { var s = st.z || dat.length; var o = new u8(pre + s + 5 * (1 + Math.ceil(s / 7e3)) + post); var w = o.subarray(pre, o.length - post); var lst = st.l; var pos = (st.r || 0) & 7; if (lvl) { if (pos) w[0] = st.r >> 3; var opt = deo[lvl - 1]; var n = opt >> 13, c = opt & 8191; var msk_1 = (1 << plvl) - 1; var prev = st.p || new u16(32768), head = st.h || new u16(msk_1 + 1); var bs1_1 = Math.ceil(plvl / 3), bs2_1 = 2 * bs1_1; var hsh = function(i2) { return (dat[i2] ^ dat[i2 + 1] << bs1_1 ^ dat[i2 + 2] << bs2_1) & msk_1; }; var syms = new i32(25e3); var lf = new u16(288), df = new u16(32); var lc_1 = 0, eb = 0, i = st.i || 0, li = 0, wi = st.w || 0, bs = 0; for (; i + 2 < s; ++i) { var hv = hsh(i); var imod = i & 32767, pimod = head[hv]; prev[imod] = pimod; head[hv] = imod; if (wi <= i) { var rem = s - i; if ((lc_1 > 7e3 || li > 24576) && (rem > 423 || !lst)) { pos = wblk(dat, w, 0, syms, lf, df, eb, li, bs, i - bs, pos); li = lc_1 = eb = 0, bs = i; for (var j = 0; j < 286; ++j) lf[j] = 0; for (var j = 0; j < 30; ++j) df[j] = 0; } var l = 2, d = 0, ch_1 = c, dif = imod - pimod & 32767; if (rem > 2 && hv == hsh(i - dif)) { var maxn = Math.min(n, rem) - 1; var maxd = Math.min(32767, i); var ml = Math.min(258, rem); while (dif <= maxd && --ch_1 && imod != pimod) { if (dat[i + l] == dat[i + l - dif]) { var nl = 0; for (; nl < ml && dat[i + nl] == dat[i + nl - dif]; ++nl) ; if (nl > l) { l = nl, d = dif; if (nl > maxn) break; var mmd = Math.min(dif, nl - 2); var md = 0; for (var j = 0; j < mmd; ++j) { var ti = i - dif + j & 32767; var pti = prev[ti]; var cd = ti - pti & 32767; if (cd > md) md = cd, pimod = ti; } } } imod = pimod, pimod = prev[imod]; dif += imod - pimod & 32767; } } if (d) { syms[li++] = 268435456 | revfl[l] << 18 | revfd[d]; var lin = revfl[l] & 31, din = revfd[d] & 31; eb += fleb[lin] + fdeb[din]; ++lf[257 + lin]; ++df[din]; wi = i + l; ++lc_1; } else { syms[li++] = dat[i]; ++lf[dat[i]]; } } } for (i = Math.max(i, wi); i < s; ++i) { syms[li++] = dat[i]; ++lf[dat[i]]; } pos = wblk(dat, w, lst, syms, lf, df, eb, li, bs, i - bs, pos); if (!lst) { st.r = pos & 7 | w[pos / 8 | 0] << 3; pos -= 7; st.h = head, st.p = prev, st.i = i, st.w = wi; } } else { for (var i = st.w || 0; i < s + lst; i += 65535) { var e = i + 65535; if (e >= s) { w[pos / 8 | 0] = lst; e = s; } pos = wfblk(w, pos + 1, dat.subarray(i, e)); } st.i = s; } return slc(o, 0, pre + shft(pos) + post); }; var crct = /* @__PURE__ */ function() { var t = new Int32Array(256); for (var i = 0; i < 256; ++i) { var c = i, k = 9; while (--k) c = (c & 1 && -306674912) ^ c >>> 1; t[i] = c; } return t; }(); var crc = function() { var c = -1; return { p: function(d) { var cr = c; for (var i = 0; i < d.length; ++i) cr = crct[cr & 255 ^ d[i]] ^ cr >>> 8; c = cr; }, d: function() { return ~c; } }; }; var dopt = function(dat, opt, pre, post, st) { if (!st) { st = { l: 1 }; if (opt.dictionary) { var dict = opt.dictionary.subarray(-32768); var newDat = new u8(dict.length + dat.length); newDat.set(dict); newDat.set(dat, dict.length); dat = newDat; st.w = dict.length; } } return dflt(dat, opt.level == null ? 6 : opt.level, opt.mem == null ? st.l ? Math.ceil(Math.max(8, Math.min(13, Math.log(dat.length))) * 1.5) : 20 : 12 + opt.mem, pre, post, st); }; var wbytes = function(d, b, v) { for (; v; ++b) d[b] = v, v >>>= 8; }; var gzh = function(c, o) { var fn = o.filename; c[0] = 31, c[1] = 139, c[2] = 8, c[8] = o.level < 2 ? 4 : o.level == 9 ? 2 : 0, c[9] = 3; if (o.mtime != 0) wbytes(c, 4, Math.floor(new Date(o.mtime || Date.now()) / 1e3)); if (fn) { c[3] = 8; for (var i = 0; i <= fn.length; ++i) c[i + 10] = fn.charCodeAt(i); } }; var gzs = function(d) { if (d[0] != 31 || d[1] != 139 || d[2] != 8) err(6, "invalid gzip data"); var flg = d[3]; var st = 10; if (flg & 4) st += (d[10] | d[11] << 8) + 2; for (var zs = (flg >> 3 & 1) + (flg >> 4 & 1); zs > 0; zs -= !d[st++]) ; return st + (flg & 2); }; var gzl = function(d) { var l = d.length; return (d[l - 4] | d[l - 3] << 8 | d[l - 2] << 16 | d[l - 1] << 24) >>> 0; }; var gzhl = function(o) { return 10 + (o.filename ? o.filename.length + 1 : 0); }; function gzipSync(data, opts) { if (!opts) opts = {}; var c = crc(), l = data.length; c.p(data); var d = dopt(data, opts, gzhl(opts), 8), s = d.length; return gzh(d, opts), wbytes(d, s - 8, c.d()), wbytes(d, s - 4, l), d; } function gunzipSync(data, opts) { var st = gzs(data); if (st + 8 > data.length) err(6, "invalid gzip data"); return inflt(data.subarray(st, -8), { i: 2 }, opts && opts.out || new u8(gzl(data)), opts && opts.dictionary); } var td = typeof TextDecoder != "undefined" && /* @__PURE__ */ new TextDecoder(); var tds = 0; try { td.decode(et, { stream: true }); tds = 1; } catch (e) { } // src/io/grpc/BAPIMetadata/metadata.ts var BAPIMetadata = class _BAPIMetadata { constructor(accessKey) { this.accessKey = accessKey; _BAPIMetadata.Root || _BAPIMetadata.RootInit(); accessKey && (this.metadata.accessKey = accessKey); } /** 命名空间 */ static Root; /** Type */ static metadata; /** Type */ static status; /** 初始化命名空间及Type */ static RootInit() { this.Root = import_light2.Root.fromJSON(metadata_default); this.metadata = this.Root.lookupType("Metadata"); this.status = this.Root.lookupType("bilibili.rpc.Status"); } /** grpc app host */ hostAPP = "//app.bilibili.com"; /** grpc host */ hostGrpc = "//grpc.biliapi.net"; /** 默认metadata */ metadata = { buvid: "5848738A7B27474C9C407F25701EFAC28527C", build: 7220300, // channel: 'bilibili', mobiApp: "iphone", platform: "ios" // device: 'phone' }; /** Base64化metadata */ get metadataBase64() { return base64.encodeFromUint8Array(_BAPIMetadata.metadata.encode(_BAPIMetadata.metadata.fromObject(this.metadata)).finish()); } /** * 发起grpc请求 * - T 用于序列化请求参数的Type类型 * - K 用于反序列化返回值的Type类型 * @param method 请求方法名 * @param repType 用于序列化请求参数的Type名 * @param replyType 用于反序列化返回值的Type名 * @param req 序列化前的请求参数 * @returns 请求返回值 */ async request(method, repType, replyType, req) { const typeReq = this.lookupType(repType); const typeReply = this.lookupType(replyType); const body = gzipSync(typeReq.encode(typeReq.fromObject(req)).finish()); const buffer = new ArrayBuffer(body.length + 5); const dataview = new DataView(buffer); dataview.setUint32(1, body.length); const uInt8 = new Uint8Array(buffer); uInt8[0] = 1; uInt8.set(body, 5); const headers = { "Content-Type": "application/grpc", "x-bili-metadata-bin": this.metadataBase64, "user-agent": "Bilibili Freedoooooom/MarkII", "referer": "", "grpc-encoding": "gzip", "grpc-accept-encoding": "identify,gzip", "grpc-timeout": "17989265u" // 1680058967939 }; this.accessKey && (headers.authorization = \`identify_v1 \${this.accessKey}\`); const response = await GM.fetch(\`\${this.hostAPP}/\${this.package}.\${this.service}/\${method}\`, { method: "POST", headers, body: buffer }, void 0, { "Access-Control-Expose-Headers": "grpc-status,grpc-message,grpc-status-details-bin,grpc-encoding" }); if (response.headers.has("grpc-status-details-bin")) { const bin = response.headers.get("grpc-status-details-bin"); const uInt82 = base64.decodeToUint8Array(bin); const details = _BAPIMetadata.status.toObject(_BAPIMetadata.status.decode(uInt82)); if (details.details && details.details.length) { throw details.details[0].value; } throw details; } else if (response.headers.has("grpc-message")) { throw response.headers.get("grpc-message"); } const arraybuffer = await response.arrayBuffer(); const uint8Array = new Uint8Array(arraybuffer.slice(5)); if (response.headers.get("grpc-encoding") === "gzip") { return typeReply.toObject(typeReply.decode(gunzipSync(uint8Array))); } return typeReply.toObject(typeReply.decode(uint8Array)); } }; // src/io/grpc/BAPIAppPlayurl/v1/playurl.ts var BAPIAppPlayurlV1 = class _BAPIAppPlayurlV1 extends BAPIMetadata { constructor(accessKey) { super(accessKey); this.accessKey = accessKey; _BAPIAppPlayurlV1.Root || (_BAPIAppPlayurlV1.Root = import_light3.Root.fromJSON(playurl_default)); } /** 命名空间 */ static Root; package = "bilibili.app.playurl.v1"; service = "PlayURL"; lookupType(type) { return _BAPIAppPlayurlV1.Root.lookupType(\`\${this.package}.\${type}\`); } /** 获取播放地址 */ PlayURL(req) { return this.request( "PlayURL", "PlayURLReq", "PlayURLReply", Object.assign({ qn, fnval, fnver, forceHost: 2 }, req) ); } /** 获取投屏地址 */ Project(req) { return this.request( "Project", "ProjectReq", "ProjectReply", Object.assign({ qn, fnval, fnver, forceHost: 2, protocol: 0, deviceType: 0 }, req) ); } /** 获取播放地址和云控配置信息 */ PlayView(req) { return this.request( "PlayView", "PlayViewReq", "PlayViewReply", Object.assign({ qn, fnval, fnver, forceHost: 2 }, req) ); } }; // src/core/download/aria2.ts init_tampermonkey(); // src/utils/mutex.ts init_tampermonkey(); function getMetux() { return Math.random().toString(36).substring(2); } // src/core/download/aria2.ts var Aria2 = class { constructor(userAgent, referer, dir, server = "http://localhost", port = 6800, token, split, size) { this.userAgent = userAgent; this.referer = referer; this.dir = dir; this.server = server; this.port = port; this.token = token; this.split = split; this.size = size; } get url() { return \`\${this.server}:\${this.port}/jsonrpc\`; } /** 命令行 */ cmdlet(data) { const arr2 = ["aria2c"]; data.urls.forEach((d) => arr2.push(\`"\${d}"\`)); data.out && arr2.push(\`--out="\${data.out}"\`); (data.userAgent || this.userAgent) && arr2.push(\`--user-agent="\${data.userAgent || this.userAgent}"\`); (data.referer || this.referer) && arr2.push(\`--referer="\${data.referer || this.referer}"\`); (data.dir || this.dir) && arr2.push(\`--dir="\${data.dir || this.dir}"\`); (data.split || this.split) && arr2.push(\`--split="\${data.split || this.split}"\`, \`--max-connection-per-server="\${data.split || this.split}"\`); (data.size || this.size) && arr2.push(\`--min-split-size="\${data.size || this.size}M"\`); data.header && Object.entries(data.header).forEach((d) => arr2.push(\`--header="\${d[0]}: \${d[1]}"\`)); return navigator.clipboard.writeText(arr2.join(" ")); } /** RPC */ rpc(data) { const options = {}; data.out && (options.out = data.out); (data.userAgent || this.userAgent) && (options["user-agent"] = data.userAgent || this.userAgent); (data.referer || this.referer) && (options.referer = data.referer || this.referer); (data.dir || this.dir) && (options.dir = data.dir || this.dir); (data.split || this.split) && (options.split = options["max-connection-per-server"] = data.split || this.split); (data.size || this.size) && (options["min-split-size"] = \`\${data.size || this.size}M\`); data.header && (options.header = data.header); return this.postMessage("aria2.addUri", data.id, [data.urls, options]); } /** 获取aria2配置信息 */ getVersion() { return this.postMessage("aria2.getVersion"); } postMessage(method, id = getMetux(), params = []) { this.token && params.unshift(\`token:\${this.token}\`); return new Promise((r, j) => { fetch(this.url, { method: "POST", body: JSON.stringify({ method, id, params }), headers: { "Content-Type": "application/json" } }).then((d) => d.json()).then((d) => { d.error && j(d.error); d.result && r(d.result); }).catch((e) => { fetch(objUrl(this.url, { method, id, params: base64.encode(JSON.stringify(params)) })).then((d) => d.json()).then((d) => { d.error && j(d.error); d.result && r(d.result); }).catch(() => { j(e); }); }); }); } }; // src/core/download/curl.ts init_tampermonkey(); var Curl = class { constructor(userAgent, referer, dir) { this.userAgent = userAgent; this.referer = referer; this.dir = dir; } /** 命令行 */ cmdlet(data) { const arr2 = ["curl", "-C", "-", \`"\${data.url}"\`]; data.out && arr2.push("-o", \`"\${data.out}"\`); (data.userAgent || this.userAgent) && arr2.push("--user-agent", \`"\${data.userAgent || this.userAgent}"\`); (data.referer || this.referer) && arr2.push("--referer", \`"\${data.referer || this.referer}"\`); (data.dir || this.dir) && arr2.push("--output-dir", \`"\${data.dir || this.dir}"\`); data.header && Object.entries(data.header).forEach((d) => arr2.push("-H", \`"\${d[0]}: \${d[1]}"\`)); return navigator.clipboard.writeText(arr2.join(" ")); } }; // src/core/download/ef2.ts init_tampermonkey(); var Ef2 = class _Ef2 { constructor(userAgent, referer, dir, delay = false, silence = false) { this.userAgent = userAgent; this.referer = referer; this.dir = dir; this.delay = delay; this.silence = silence; } /** 拉起IDM */ sendLinkToIDM(data) { this.rebuildData(data); const ef2str = _Ef2.encode(data); const a = document.createElement("a"); a.href = ef2str; a.click(); return ef2str; } /** 生成ef2文件 */ file(data, fileName) { this.rebuildData(data); return _Ef2.file([data], fileName); } /** 补全数据 */ rebuildData(data) { this.userAgent && !data.userAgent && (data.userAgent = this.userAgent); this.referer && !data.referer && (data.referer = this.referer); this.dir && !data.dir && (data.dir = this.dir); this.delay && !data.delay && (data.delay = this.delay); this.silence && !data.silence && (data.silence = this.silence); } /** 生成ef2文件 */ static file(data, fileName) { const result = []; data.forEach((d) => { const arr2 = ["<", "", "", "", ""]; Object.entries(d).forEach((d2) => { switch (d2[0]) { case "cookie": arr2[4] = \`cookie: \${d2[1]}\`; break; case "delay": break; case "dir": d2[1] = d2[1].replace(/\\//, "\\\\"); d2[1].endsWith("\\\\") && (d2[1] = d2[1].slice(0, -1)); arr2.push(\`filepath: \${d2[1]}\`); break; case "out": arr2.push(\`filename: \${d2[1]}\`); break; case "password": arr2.push(\`password: \${d2[1]}\`); break; case "body": arr2.push(\`postdata: \${d2[1]}\`); break; case "referer": arr2[2] = \`referer: \${d2[1]}\`; break; case "silence": break; case "url": d2[1].startsWith("//") && (d2[1] = "https:" + d2[1]); arr2[1] = d2[1]; break; case "userAgent": arr2[3] = \`User-Agent: \${d2[1]}\`; break; case "userName": arr2.push(\`username: \${d2[1]}\`); break; default: break; } }); arr2.push(">"); arr2.forEach((d2) => { d2 && result.push(d2); }); }); result.push(""); saveAs(result.join("\\r\\n"), fileName || \`\${data[0].out || getMetux()}.ef2\`); } /** 生成ef2协议 */ static encode(data) { const arr2 = []; Object.entries(data).forEach((d) => { typeof d[1] === "string" && d[1].startsWith('"') || (d[1] = \`"\${d[1]}"\`); switch (d[0]) { case "cookie": arr2.push("-c", d[1]); break; case "delay": arr2.push("-q"); break; case "dir": d[1] = d[1].replace(/\\//, "\\\\"); d[1].endsWith("\\\\") && (d[1] = d[1].slice(0, -1)); arr2.push("-o", d[1]); break; case "out": arr2.push("-s", d[1]); break; case "password": arr2.push("-P", d[1]); break; case "body": arr2.push("-d", d[1]); break; case "referer": arr2.push("-r", d[1]); break; case "silence": arr2.push("-f"); break; case "url": d[1].startsWith("//") && (d[1] = "https:" + d[1]); arr2.push("-u", d[1]); break; case "userAgent": arr2.push("-a", d[1]); break; case "userName": arr2.push("-U", d[1]); break; default: break; } }); return \`ef2://\${base64.encode(arr2.join(" "))}\`; } /** 解码ef2协议 */ static decode(ef2str) { ef2str = ef2str.replace("ef2://", ""); ef2str = base64.decode(ef2str); const arr2 = ef2str.split(" "); const data = {}; for (let i = 0; i < arr2.length; i++) { if (/-\\w/.test(arr2[i])) { switch (arr2[i]) { case "-c": data.cookie = arr2[i + 1]; i++; break; case "-q": data.delay = true; break; case "-o": data.dir = arr2[i + 1]; i++; break; case "-s": data.out = arr2[i + 1]; i++; break; case "-P": data.password = arr2[i + 1]; i++; break; case "-d": data.body = arr2[i + 1]; i++; break; case "-r": data.referer = arr2[i + 1]; i++; break; case "-f": data.silence = true; break; case "-u": data.url = arr2[i + 1]; i++; break; case "-a": data.userAgent = arr2[i + 1]; i++; break; case "-U": data.userName = arr2[i + 1]; i++; break; default: break; } } } return data; } }; // src/core/download/playinfo.ts init_tampermonkey(); var PlayinfoFilter = class { constructor(fileName) { this.fileName = fileName; } /** 数据 */ record = []; /** id => 质量 */ quality = { 100032: "8K", 100029: "4K", 100028: "1080P60", 100027: "1080P+", 100026: "1080P", 100024: "720P", 100023: "480P", 100022: "360P", 30280: "320Kbps", 30260: "320Kbps", 30259: "128Kbps", 30257: "64Kbps", 30255: "AUDIO", 30251: "FLAC", 30250: "ATMOS", 30232: "128Kbps", 30216: "64Kbps", 30127: "8K", 30126: "Dolby", 30125: "HDR", 30121: "4K", 30120: "4K", 30116: "1080P60", 30112: "1080P+", 30106: "1080P60", 30102: "1080P+", 30080: "1080P", 30077: "1080P", 30076: "720P", 30074: "720P", 30066: "720P", 30064: "720P", 30048: "720P", 30033: "480P", 30032: "480P", 30016: "360P", 30015: "360P", 30011: "360P", 464: "预览", 336: "1080P", 320: "720P", 288: "480P", 272: "360P", 208: "1080P", 192: "720P", 160: "480P", 127: "8K", 126: "Dolby", 125: "HDR", 120: "4K", 116: "1080P60", 112: "1080P+", 80: "1080P", 74: "720P60", 64: "720P", 48: "720P", 32: "480P", 16: "360P", 15: "360P", 6: "240P", 5: "144P" }; /** id => 类型(备用方案) */ codec = { hev: [30127, 30126, 30125, 30121, 30106, 30102, 30077, 30066, 30033, 30011], avc: [30120, 30112, 30080, 30064, 30032, 30016], av1: [100029, 100028, 100027, 100026, 100024, 100023, 100022] }; /** 颜色表 */ color = { "8K": "yellow", "Dolby": "pink", "FLAC": "pink", "ATMOS": "pink", "AUDIO": "pink", "HDR": "purple", "4K": "purple", "1080P60": "red", "1080P+": "red", "1080P": "red", "720P60": "orange", "720P": "orange", "480P": "blue", "360P": "green", "320Kbps": "red", "128Kbps": "blue", "64Kbps": "green" }; /** * 解码playurl的下载数据 * @param playinfo playurl返回值(json) */ filter(playinfo) { typeof playinfo === "string" && (playinfo = toObject(playinfo)); if (playinfo) { playinfo.data && this.filter(playinfo.data); playinfo.result && this.filter(playinfo.result); playinfo.durl && this.durl(playinfo.durl); playinfo.dash && this.dash(playinfo.dash); } return this.record; } /** * 整理durl部分 * @param durl durl信息 */ durl(durl) { durl.forEach((d) => { const url = d.backupUrl || d.backup_url || []; url.unshift(d.url); const qua = this.getQuality(url[0], d.id); const link = { type: "", url, quality: qua, size: sizeFormat(d.size), color: this.color[qua] || "" }; switch (d.url.includes("mp4?")) { case true: link.type = "mp4"; break; case false: link.type = "flv"; link.order = d.order; break; } this.fileName && (link.fileName = \`\${this.fileName}\${qua}.\${link.type}\`); this.record.push(link); }); } /** * 整理dash部分 * @param dash dash信息 */ dash(dash) { dash.video && this.dashVideo(dash.video, dash.duration); dash.audio && this.dashAudio(dash.audio, dash.duration); dash.dolby && dash.dolby.audio && Array.isArray(dash.dolby.audio) && this.dashAudio(dash.dolby.audio, dash.duration); dash.flac && dash.flac.audio && this.dashAudio([dash.flac.audio], dash.duration, ".flac"); } /** * 整理dash视频部分 * @param video dash视频信息 * @param duration duration信息,配合bandwidth能计算出文件大小 */ dashVideo(video, duration) { video.forEach((d) => { const url = d.backupUrl || d.backup_url || []; (d.baseUrl || d.base_url) && url.unshift(d.baseUrl || d.base_url); if (!url.length) return; let type = ""; if (d.codecs) { type = d.codecs.includes("avc") ? "avc" : d.codecs.includes("av01") ? "av1" : "hev"; } else { const id = this.getID(url[0]); type = this.codec.hev.find((d2) => d2 === id) ? "hev" : "avc"; } const qua = this.getQuality(url[0], d.id); this.record.push({ type, url, quality: qua, size: sizeFormat(d.bandwidth * duration / 8), color: this.color[qua] || "", fileName: \`\${this.fileName}\${qua}.m4v\` }); }); } /** * 整理dash音频部分 * @param audio dash音频信息 * @param duration duration信息,配合bandwidth能计算出文件大小 * @param fmt 音频拓展名,默认\`.m4a\` */ dashAudio(audio, duration, fmt = ".m4a") { audio.forEach((d) => { const url = d.backupUrl || d.backup_url || []; (d.baseUrl || d.base_url) && url.unshift(d.baseUrl || d.base_url); const qua = this.getQuality(url[0], d.id); url.length && this.record.push({ type: "aac", url, quality: qua, size: sizeFormat(d.bandwidth * duration / 8), color: this.color[qua] || "", fileName: \`\${this.fileName}\${qua}.\${fmt}\` }); }); } /** * 根据url确定画质/音质信息 * 需要维护quality表 * @param url 多媒体url * @param id 媒体流id * @returns 画质/音质信息 */ getQuality(url, id) { return this.quality[this.getID(url)] || id && this.quality[id] || "N/A"; } /** * 从url中提取可能的id * @param url 多媒体url */ getID(url) { let id = 0; url.replace(/\\d+\\.((flv)|(mp4)|(m4s))/, (d) => id = Number(d.split(".")[0])); return id; } }; // src/core/observer.ts init_tampermonkey(); var nodelist = []; var observe = new MutationObserver(async (d) => d.forEach((d2) => { d2.addedNodes[0] && nodelist.forEach((f) => { try { f(d2.addedNodes[0]); } catch (e) { debug.error("MutationObserver", e); } }); })); observe.observe(document, { childList: true, subtree: true }); function observerAddedNodes(callback) { try { if (typeof callback === "function") nodelist.push(callback); return nodelist.length - 1; } catch (e) { debug.error(e); } } var switchlist = []; function switchVideo(callback) { try { if (typeof callback === "function") switchlist.push(callback); } catch (e) { debug.error("switchVideo", e); } } observerAddedNodes((node) => { if (/video-state-pause/.test(node.className)) { switchlist.forEach(async (d) => { try { d(); } catch (e) { debug.error(d); } }); } }); // src/core/ui/download.ts init_tampermonkey(); // src/html/download.html var download_default = '
\\r\\n'; // src/core/ui/download.ts var BilioldDownload = class extends HTMLElement { _container; _cells = {}; _noData; constructor() { super(); const root = this.attachShadow({ mode: "closed" }); root.innerHTML = download_default; this._container = root.children[0]; this.addEventListener("click", (e) => e.stopPropagation()); this._noData = addElement("div", void 0, this._container, "正在获取下载数据~"); } updateItem = (key, value) => { var _a3; this._container.contains(this._noData) && this._noData.remove(); this._cells[key] || (this._cells[key] = addElement("div", { class: "cell" }, this._container)); this._cells[key].innerHTML = \`
\${key}
\`; value ? value.forEach((d) => { const a = addElement("a", { class: "item", target: "_blank" }, this._cells[key], \`
\${d.quality}
\${d.size}
\`); d.url && (a.href = d.url[0]); d.fileName && (a.download = d.fileName); d.onClick && a.addEventListener("click", (e) => d.onClick(e)); }) : (_a3 = this._cells[key]) == null ? void 0 : _a3.remove(); this._container.firstChild || this._container.replaceChildren(this._noData); }; show() { document.contains(this) || document.body.appendChild(this); this.style.display = ""; window.addEventListener("click", () => { this.style.display = "none"; }, { once: true }); } init() { return propertryChangeHook({}, this.updateItem); } disconnectedCallback() { this.destory(); } destory() { this._cells = {}; this._container.replaceChildren(this._noData); } }; customElements.get(\`download-\${"1272ee5"}\`) || customElements.define(\`download-\${"1272ee5"}\`, BilioldDownload); // src/core/ui/preview-image.ts init_tampermonkey(); // src/html/preview-image.html var preview_image_default = '
\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n'; // src/svg/left.svg var left_default = ''; // src/svg/right.svg var right_default = ''; // src/utils/scrollbar.ts init_tampermonkey(); var Scrollbar = class _Scrollbar { /** * 设置滚动条 * @param ele 目标节点 * @param x 是否显示横滚动条 * @param y 是否显示纵滚动条 * @param side 复制样式到目标节点旁边,用于默认样式不生效的情况,比如ShadowRoot环境 */ constructor(ele, x = true, y = true, side = false) { this.ele = ele; this.x = x; this.y = y; this.side = side; _Scrollbar.style || _Scrollbar.init(); this.overflow = this.ele.style.overflow; side && ele.insertAdjacentElement("afterend", _Scrollbar.style.cloneNode(true)); this.flesh(); } static mutex = getMetux(); static prefix = "scrollbar-" + _Scrollbar.mutex; static style; static thumb = "#999"; static track = "#EEE"; static init() { this.style || (this.style = addElement("style", void 0), document.head); this.style.textContent = \`.\${this.prefix}[data-\${this.mutex}="\${this.mutex}"]{ scrollbar-width: none; scrollbar-color: \${this.thumb} \${this.track}; } .\${this.prefix}[data-\${this.mutex}="\${this.mutex}"]:hover { scrollbar-width: thin; } .\${this.prefix}[data-\${this.mutex}="\${this.mutex}"]::-webkit-scrollbar { width: 0; height: 0; } .\${this.prefix}[data-\${this.mutex}="\${this.mutex}"]::-webkit-scrollbar-track { border-radius: 4px; background-color: \${this.track}; } .\${this.prefix}[data-\${this.mutex}="\${this.mutex}"]::-webkit-scrollbar-thumb { border-radius: 4px; background-color: \${this.thumb}; } .\${this.prefix}[data-\${this.mutex}="\${this.mutex}"]:hover::-webkit-scrollbar { width: 7px; height: 7px; } .\${this.prefix}[data-\${this.mutex}="\${this.mutex}"]::-webkit-scrollbar:hover { width: 7px; height: 7px; }\`; } /** 备份原始overflow */ overflow; /** 滑块颜色 */ get thumb() { return _Scrollbar.thumb; } set thumb(v) { _Scrollbar.thumb = v; _Scrollbar.init(); } /** 轨道颜色 */ get track() { return _Scrollbar.track; } set track(v) { _Scrollbar.track = v; _Scrollbar.init(); } flesh() { document.contains(_Scrollbar.style) || document.head.append(_Scrollbar.style); this.ele.classList.add(_Scrollbar.prefix); this.ele.setAttribute(\`data-\${_Scrollbar.mutex}\`, _Scrollbar.mutex); switch (this.suffix()) { case "-all": { this.ele.style.overflow = "auto auto"; break; } case "-x": { this.ele.style.overflow = "auto hidden"; break; } case "-y": { this.ele.style.overflow = "hidden auto"; break; } case "-none": default: { this.ele.style.overflow = this.overflow; this.remove(); break; } } } suffix() { if (this.x) { return this.y ? "-all" : "-x"; } else { return this.y ? "-y" : "-none"; } } remove() { this.ele.classList.remove(_Scrollbar.prefix); this.ele.removeAttribute(\`data-\${_Scrollbar.mutex}\`); } /** * 更新滚动条 * @param x 是否显示横滚动条 * @param y 是否显示纵滚动条 * @param thumb 滑块颜色 * @param track 轨道颜色 */ update(x = true, y = true) { this.x = x; this.y = y; this.flesh(); } }; // src/core/ui/preview-image.ts var PreviewImage = class extends HTMLElement { _image; _list; constructor() { super(); const root = this.attachShadow({ mode: "closed" }); root.innerHTML = preview_image_default; const close = root.querySelector(".svg-icon.close.use-color"); const left = root.querySelector(".svg-icon.left-arrow.use-color"); const right = root.querySelector(".svg-icon.right-arrow.use-color"); close.innerHTML = fork_default; left.innerHTML = left_default; right.innerHTML = right_default; this._image = root.querySelector(".show-image-wrap"); this._list = root.querySelector(".preview-list"); new Scrollbar(this._image, true, true, true); close.parentElement.addEventListener("click", (e) => { this.remove(); document.body.style.overflow = ""; e.stopPropagation(); }); left.parentElement.addEventListener("click", (e) => { this.togger(e, false); e.stopPropagation(); }); right.parentElement.addEventListener("click", (e) => { this.togger(e); e.stopPropagation(); }); this._image.addEventListener("click", (e) => { if (e.target === this._image) { this.remove(); document.body.style.overflow = ""; e.stopPropagation(); } }); } togger(e, right = true) { const list = this._list.querySelectorAll(".preview-item-box"); if (list.length) { let i = 0; list.forEach((d, j) => { if (d.classList.contains("active")) { d.classList.remove("active"); if (right) { i = j + 1; i < list.length || (i = 0); } else { i = j - 1; i < 0 && (i = list.length - 1); } } }); list[i].classList.add("active"); const img = list[i].querySelector("img"); if (img) { this._image.innerHTML = \`\`; } } e.stopPropagation(); } /** * 初始化 * @param imgs 图片链接(组) * @param vertical 是否垂直 * @param active 显示第几张图片 */ value(imgs, vertical = false, active = 0) { imgs = isArray(imgs) ? imgs : [imgs]; active < imgs.length || (active = 0); this._image.innerHTML = \`\`; vertical ? this.classList.add("vertical") : this.classList.remove("vertical"); this._list.innerHTML = ""; imgs.forEach((d, i) => { const item = addElement("div", { class: \`preview-item-box\${i === active ? " active" : ""}\`, style: "min-width: 54px; max-width: 54px; height: 54px;" }, this._list, \`
\`); item.addEventListener("click", (e) => { var _a3; (_a3 = this._list.querySelector(".preview-item-box.active")) == null ? void 0 : _a3.classList.remove("active"); item.classList.add("active"); this._image.innerHTML = \`\`; e.stopPropagation(); }); }); document.body.contains(this) || document.body.appendChild(this); document.body.style.overflow = "hidden"; } }; customElements.get(\`preview-image-\${"1272ee5"}\`) || customElements.define(\`preview-image-\${"1272ee5"}\`, PreviewImage); // src/core/videolimit.ts init_tampermonkey(); // src/io/api-biliplus-playurl.ts init_tampermonkey(); async function apiBiliplusPlayurl(data) { const response = await fetch(objUrl("//www.biliplus.com/BPplayurl.php", data)); return await response.json(); } // src/io/api-global-ogv-playurl.ts init_tampermonkey(); // src/io/sidx.ts init_tampermonkey(); var Sidx = class { /** * @param url 目标url * @param size 最大索引范围(不宜过大),默认6万字节 */ constructor(url, size = 6e4) { this.url = url; this.size = size; } /** range索引结束点 */ end = 5999; /** range索引开始点 */ start = 0; /** 结果hex字符串 */ hex_data = ""; getData() { return new Promise((resolve, reject) => { this.fetch(resolve, reject); }); } /** 请求片段 */ fetch(resolve, reject) { fetch(this.url.replace("http:", "https:"), { headers: { range: \`bytes=\${this.start}-\${this.end}\` } }).then((d) => { if ((d.status >= 300 || d.status < 200) && d.status !== 304) throw new Error(\`\${d.status} \${d.statusText}\`, { cause: d.status }); return d.arrayBuffer(); }).then((d) => { const data = new Uint8Array(d); this.hex_data += Array.prototype.map.call(data, (x) => ("00" + x.toString(16)).slice(-2)).join(""); if (this.hex_data.indexOf("73696478") > -1 && this.hex_data.indexOf("6d6f6f66") > -1) { const indexRangeStart = this.hex_data.indexOf("73696478") / 2 - 4; const indexRagneEnd = this.hex_data.indexOf("6d6f6f66") / 2 - 5; resolve(["0-" + String(indexRangeStart - 1), String(indexRangeStart) + "-" + String(indexRagneEnd)]); } else { this.start = this.end + 1; if (this.size && this.start > this.size) { reject("未能获取到sidx"); } else { this.end += 6e3; this.size && (this.end = Math.min(this.end, this.size)); this.fetch(resolve, reject); } } }).catch((e) => reject(e)); } }; // src/io/api-global-ogv-playurl.ts var ApiGlobalOgvPlayurl = class extends ApiSign { /** * @param data 查询参数 * @param server 东南亚(泰区)代理服务器 */ constructor(data, server = "api.global.bilibili.com") { super(URLS.GLOBAL_OGV_PLAYURL.replace("api.global.bilibili.com", server), "7d089525d3611b1c"); this.data = data; this.data = Object.assign({ area: "th", build: 1001310, device: "android", force_host: 2, download: 1, mobi_app: "bstar_a", platform: "android" }, data); } response; async getDate() { if (this.response) return this.response; const response = await fetch(this.sign().toJSON()); const json = await response.json(); return this.response = jsonCheck(json).data; } toPlayurl() { return new Promise((resolve, reject) => { this.getDate().then((d) => { const playurl = new PlayurlDash(); const set = []; playurl.quality = d.video_info.stream_list[0].stream_info.quality || d.video_info.quality; playurl.format = PlayurlFormatMap[playurl.quality]; playurl.timelength = d.video_info.timelength; playurl.dash.duration = Math.ceil(playurl.timelength / 1e3); playurl.dash.minBufferTime = playurl.dash.min_buffer_time = 1.5; Promise.all([ ...d.video_info.stream_list.map((d2) => (async () => { var _a3, _b2; if (d2.dash_video && d2.dash_video.base_url) { const id = d2.stream_info.quality; playurl.accept_description.push(PlayurlDescriptionMap[id]); set.push(PlayurlFormatMap[id]); playurl.accept_quality.push(id); playurl.support_formats.push({ description: PlayurlDescriptionMap[id], display_desc: PlayurlQualityMap[id], format: PlayurlFormatMap[id], new_description: PlayurlDescriptionMap[id], quality: id, superscript: "", codecs: [PlayurlCodecs[id]] }); const sidx = await new Sidx(d2.dash_video.base_url, d2.dash_video.size).getData(); playurl.dash.video.push({ SegmentBase: { Initialization: sidx[0], indexRange: sidx[1] }, segment_base: { initialization: sidx[0], index_range: sidx[1] }, backupUrl: [], backup_url: [], bandwidth: d2.dash_video.bandwidth, baseUrl: d2.dash_video.base_url, base_url: d2.dash_video.base_url, codecid: d2.dash_video.codecid, codecs: PlayurlCodecsAPP[id] || PlayurlCodecs[id], frameRate: PlayurlFrameRate[id], frame_rate: PlayurlFrameRate[id], height: (_a3 = PlayurlResolution[id]) == null ? void 0 : _a3[1], id: d2.stream_info.quality, mimeType: "video/mp4", mime_type: "video/mp4", sar: "1:1", startWithSap: 1, start_with_sap: 1, width: (_b2 = PlayurlResolution[id]) == null ? void 0 : _b2[0] }); } })()), ...d.video_info.dash_audio.map((d2) => (async () => { const id = d2.id; const sidx = await new Sidx(d2.base_url, d2.size).getData(); playurl.dash.audio.push({ SegmentBase: { Initialization: sidx[0], indexRange: sidx[1] }, segment_base: { initialization: sidx[0], index_range: sidx[1] }, backupUrl: [], backup_url: [], bandwidth: d2.bandwidth, baseUrl: d2.base_url, base_url: d2.base_url, codecid: d2.codecid, codecs: PlayurlCodecsAPP[id] || PlayurlCodecs[id], frameRate: "", frame_rate: "", height: 0, id, mimeType: "audio/mp4", mime_type: "audio/mp4", sar: "", startWithSap: 0, start_with_sap: 0, width: 0 }); })()) ]).then(() => { const avc = [], hev = [], video = []; playurl.dash.video.forEach((d2) => { if (d2.codecid == 7) avc.push(d2); else hev.push(d2); }); let length2 = avc.length > hev.length ? avc.length : hev.length; for (let i = length2 - 1; i >= 0; i--) { if (avc[i]) video.push(avc[i]); if (hev[i]) video.push(hev[i]); } playurl.dash.video = video; playurl.accept_format = set.join(","); playurl.quality > 80 && (playurl.quality = 80); resolve(playurl); }).catch((e) => reject(e)); }).catch((e) => reject(e)); }); } }; // src/utils/conf/uid.ts init_tampermonkey(); // src/utils/cookie.ts init_tampermonkey(); function getCookies() { return document.cookie.split("; ").reduce((s, d) => { let key = d.split("=")[0]; let val = d.split("=")[1]; s[key] = unescape(val); return s; }, {}); } function setCookie(name, value, days = 365) { const exp = /* @__PURE__ */ new Date(); exp.setTime(exp.getTime() + days * 24 * 60 * 60 * 1e3); document.cookie = name + "=" + escape(value) + ";expires=" + exp.toUTCString() + "; path=/; domain=.bilibili.com"; } // src/utils/conf/uid.ts var uid = Number(getCookies().DedeUserID); // src/core/network-mock.ts init_tampermonkey(); var networkMocked = false; function defineRes(target, res, v) { Object.defineProperties(target, { status: { configurable: true, writable: true, value: res.status }, statusText: { configurable: true, writable: true, value: res.statusText }, response: { configurable: true, writable: true, value: res.response }, responseText: { configurable: true, writable: true, value: res.responseText }, responseXML: { configurable: true, writable: true, value: res.responseXML }, responseURL: { configurable: true, writable: true, value: res.finalUrl } }); v(); } function networkMock() { if (!networkMocked) { networkMocked = true; if (true) { xhrHook.ultra(".m4s", function(target, args) { const obj = { method: args[0], url: args[1], headers: { "user-agent": user.userStatus.userAgent }, onloadstart: (res) => { defineRes(this, res, () => { }); } }; args[2] || (obj.anonymous = true); Object.defineProperties(this, { responseType: { configurable: true, set: (v) => { obj.responseType = v; }, get: () => obj.responseType }, onload: { configurable: true, set: (v) => { obj.onload = (res) => { defineRes(this, res, v); }; }, get: () => obj.onload }, onerror: { configurable: true, set: (v) => { obj.onerror = (res) => { defineRes(this, res, v); }; }, get: () => obj.onerror }, timeout: { configurable: true, set: (v) => { obj.timeout = v; }, get: () => obj.timeout }, ontimeout: { configurable: true, set: (v) => { obj.ontimeout = (res) => { defineRes(this, res, v); }; }, get: () => obj.ontimeout }, onprogress: { configurable: true, set: (v) => { obj.onprogress = (res) => { defineRes(this, res, v.bind(this, new ProgressEvent("progress", { lengthComputable: res.lengthComputable, loaded: res.loaded, total: res.total }))); }; }, get: () => obj.onprogress }, onabort: { configurable: true, set: (v) => { obj.onabort = (res) => { defineRes(this, res, v); }; }, get: () => obj.onabort }, onreadystatechange: { configurable: true, set: (v) => { obj.onreadystatechange = (res) => { defineRes(this, res, v); }; }, get: () => obj.onreadystatechange }, setRequestHeader: { configurable: true, value: (name, value) => { obj.headers && (obj.headers[name] = value); } }, send: { configurable: true, value: (body) => { obj.method === "POST" && body && (obj.data = body); const tar = GM.xmlHttpRequest(obj); this.abort = tar.abort.bind(tar); return true; } } }); }); } else { GM.modifyRequestheader(".m4s?", { "user-agent": "Bilibili Freedoooooom/MarkII", referer: void 0 }); GM.modifyRequestheader(".flv?", { "user-agent": "Bilibili Freedoooooom/MarkII", referer: void 0 }); } } } // src/core/videolimit.ts var UPOS = { "ks3(金山)": "upos-sz-mirrorks3.bilivideo.com", "ks3b(金山)": "upos-sz-mirrorks3b.bilivideo.com", "ks3c(金山)": "upos-sz-mirrorks3c.bilivideo.com", "ks32(金山)": "upos-sz-mirrorks32.bilivideo.com", "kodo(七牛)": "upos-sz-mirrorkodo.bilivideo.com", "kodob(七牛)": "upos-sz-mirrorkodob.bilivideo.com", "cos(腾讯)": "upos-sz-mirrorcos.bilivideo.com", "cosb(腾讯)": "upos-sz-mirrorcosb.bilivideo.com", "coso1(腾讯)": "upos-sz-mirrorcoso1.bilivideo.com", "coso2(腾讯)": "upos-sz-mirrorcoso2.bilivideo.com", "bos(腾讯)": "upos-sz-mirrorbos.bilivideo.com", "hw(华为)": "upos-sz-mirrorhw.bilivideo.com", "hwb(华为)": "upos-sz-mirrorhwb.bilivideo.com", "uphw(华为)": "upos-sz-upcdnhw.bilivideo.com", "js(华为)": "upos-tf-all-js.bilivideo.com", "hk(香港)": "cn-hk-eq-bcache-01.bilivideo.com", "akamai(海外)": "upos-hz-mirrorakam.akamaized.net" }; var AREA = /* @__PURE__ */ ((AREA2) => { AREA2[AREA2["tw"] = 0] = "tw"; AREA2[AREA2["hk"] = 1] = "hk"; AREA2[AREA2["cn"] = 2] = "cn"; return AREA2; })(AREA || {}); var VideoLimit = class { /** 数据备份 */ Backup = {}; /** 通知组件 */ toast; /** 监听中 */ listening = false; /** 播放数据备份 */ __playinfo__; constructor() { xhrHook("/playurl?", (args) => { const param2 = urlObj(args[1]); if (!uid && user.userStatus.show1080p && user.userStatus.accessKey.token) { param2.appkey = "27eb53fc9058f8c3"; param2.access_key = user.userStatus.accessKey.token; } param2.fnval && (param2.fnval = fnval); args[1] = objUrl(args[1], param2); return !(BLOD.limit || BLOD.th); }, (res) => { try { const result = res.responseType === "json" ? JSON.stringify(res.response) : res.responseText; if (user.userStatus.uposReplace.nor !== "不替换") { const nstr = this.uposReplace(result, user.userStatus.uposReplace.nor); toast.warning("已替换UPOS服务器,卡加载时请到设置中更换服务器或者禁用!", \`CDN:\${user.userStatus.uposReplace.nor}\`, \`UPOS:\${UPOS[user.userStatus.uposReplace.nor]}\`); if (res.responseType === "json") { res.response = JSON.parse(nstr); } else { res.response = res.responseText = nstr; } } } catch (e) { } }, false); } /** 开始监听 */ enable() { if (this.listening) return; const disable = xhrHook.async("/playurl?", (args) => { const obj = urlObj(args[1]); this.updateVaribale(obj); return Boolean(BLOD.limit || BLOD.th); }, async (args) => { const response = BLOD.th ? await this._th(args) : await this._gat(args); return { response, responseType: "json", responseText: JSON.stringify(response) }; }, false); this.disable = () => { disable(); this.listening = false; }; this.listening = true; } /** 处理泰区 */ async _th(args) { this.toast || (this.toast = toast.list()); this.toast.data = ["泰区限制视频 >>>"]; const obj = urlObj(args[1]); this.toast.push(\`> aid:\${BLOD.aid}\`, \`> cid:\${BLOD.cid}\`); obj.access_key = user.userStatus.accessKey.token; if (!this.Backup[args[1]]) { try { networkMock(); this.toast.push(\`> 代理服务器:\${user.userStatus.videoLimit.th}\`); this.Backup[args[1]] = { code: 0, message: "success", result: await this.th(obj) }; this.toast.push("> 获取代理数据成功!"); this.toast.type = "success"; } catch (e) { this.toast.push("> 代理出错!", e); !obj.access_key && this.toast.push("> 代理服务器要求【账户授权】才能进一步操作!"); this.toast.type = "error"; this.toast.delay = 4; return { code: -404, message: e, data: null }; } } this.toast.delay = 4; delete this.toast; return this.__playinfo__ = this.Backup[args[1]]; } /** 处理港澳台 */ async _gat(args) { var _a3; this.toast || (this.toast = toast.list()); this.toast.data = ["港澳台限制视频 >>>"]; const obj = urlObj(args[1]); this.toast.push(\`> aid:\${BLOD.aid}\`, \`> cid:\${BLOD.cid}\`); obj.access_key = user.userStatus.accessKey.token; if (!this.Backup[args[1]]) { try { if (user.userStatus.videoLimit.server === "内置") { obj.module = "bangumi"; const upInfo = (_a3 = window.__INITIAL_STATE__) == null ? void 0 : _a3.upInfo; if (upInfo) { (upInfo.mid == 1988098633 || upInfo.mid == 2042149112) && (obj.module = "movie"); } this.toast.push(\`> 代理服务器:内置\`, \`> 类型:\${obj.module}\`); const res = await apiBiliplusPlayurl(obj); this.Backup[args[1]] = { code: 0, message: "success", result: res }; } else { const res = await this.gat(obj); this.Backup[args[1]] = { code: 0, message: "success", result: res }; } if (user.userStatus.uposReplace.gat !== "不替换") { this.Backup[args[1]] = JSON.parse(this.uposReplace(JSON.stringify(this.Backup[args[1]]), user.userStatus.uposReplace.gat)); toast.warning("已替换UPOS服务器,卡加载时请到设置中更换服务器或者禁用!", \`CDN:\${user.userStatus.uposReplace.gat}\`, \`UPOS:\${UPOS[user.userStatus.uposReplace.gat]}\`); } ; this.toast.push("> 获取代理数据成功!"); this.toast.type = "success"; } catch (e) { this.toast.push("> 代理出错!", e); !obj.access_key && this.toast.push("> 代理服务器要求【账户授权】才能进一步操作!"); this.toast.type = "error"; this.toast.delay = 4; return { code: -404, message: e, data: null }; } } this.toast.delay = 4; delete this.toast; return this.__playinfo__ = this.Backup[args[1]]; } /** 停止监听 */ disable() { this.listening = false; } /** 更新全局变量 */ updateVaribale(obj) { obj.seasonId && (BLOD.ssid = obj.seasonId); obj.episodeId && (BLOD.epid = obj.episodeId); obj.ep_id && (BLOD.epid = obj.ep_id); obj.aid && (BLOD.aid = Number(obj.aid)) && (BLOD.aid = obj.aid); obj.avid && (BLOD.aid = Number(obj.avid)) && (BLOD.aid = obj.avid); obj.cid && (BLOD.cid = Number(obj.cid)) && (BLOD.cid = obj.cid); } /** 访问泰区代理 */ async th(obj) { const d = await new ApiGlobalOgvPlayurl(obj, user.userStatus.videoLimit.th).toPlayurl(); toast.warning("已替换UPOS服务器,卡加载时请到设置中更换服务器或者禁用!", \`CDN:\${user.userStatus.uposReplace.th}\`, \`UPOS:\${UPOS[user.userStatus.uposReplace.th]}\`); return JSON.parse(this.uposReplace(JSON.stringify(d), user.userStatus.uposReplace.th)); } /** 代理服务器序号 */ area = 0; /** 访问港澳台代理 */ async gat(obj) { this.toast || (this.toast = toast.list()); if (!user.userStatus.videoLimit[AREA[this.area]]) throw new Error(\`无有效代理服务器:\${AREA[this.area]}\`); const server = user.userStatus.videoLimit[AREA[this.area]]; obj.area = AREA[this.area]; this.toast.push(\`> 代理服务器:\${server}\`); try { return await apiPlayurl(obj, true, true, server); } catch (e) { this.toast.push("> 代理服务器返回异常!", e); if (this.toast) { this.toast.type = "warning"; } this.area++; if (this.area > 2) throw new Error("代理服务器不可用!"); return await this.gat(obj); } } /** 用于过滤upos提示 */ upos = false; /** 用于取消过滤upos提示 */ timer; /** * 替换upos服务器 * @param str playurl或包含视频URL的字符串 * @param uposName 替换的代理服务器名 keyof typeof {@link UPOS} */ uposReplace(str, uposName) { if (uposName === "不替换") return str; this.upos = true; clearTimeout(this.timer); this.timer = setTimeout(() => this.upos = false, 1e3); return str.replace(/:\\\\?\\/\\\\?\\/[^\\/]+\\\\?\\//g, () => \`://\${UPOS[uposName]}/\`); } }; var videoLimit = new VideoLimit(); // src/core/download.ts var Download = class { /** 下载界面 */ ui = new BilioldDownload(); /** 数据缓存 */ data = this.ui.init(); previewImage; /** 下载按钮 */ bgrayButtonBtn; get fileName() { if (videoInfo.metadata) { return \`\${videoInfo.metadata.album}(\${videoInfo.metadata.title})\`; } return ""; } constructor() { switchVideo(() => { this.destory(); user.userStatus.downloadButton && this.bgrayButton(); }); } /** 解码playinfo */ decodePlayinfo(playinfo, fileName = this.fileName) { const data = new PlayinfoFilter(fileName).filter(playinfo); data.forEach((d) => { this.data[d.type] || (this.data[d.type] = []); this.data[d.type].push({ url: d.url, fileName, quality: Reflect.has(d, "order") ? \`\${d.quality}*\${d.order}\` : d.quality, size: d.size, color: d.color, onClick: (ev) => { ev.preventDefault(); this.pushDownload(d, ev); } }); }); } /** 分发数据 */ async pushDownload(data, ev) { if (data.onClick) { data.onClick(ev); } else if (data.url) { switch (user.userStatus.downloadMethod) { case "IDM": { new Ef2(user.userStatus.userAgent, user.userStatus.referer, user.userStatus.filepath, user.userStatus.ef2.delay, user.userStatus.ef2.silence).file({ url: data.url[0], out: data.fileName }); toast.success('保存IDM导出文件后,打开IDM -> 任务 -> 导入 -> 从"IDM导出文件"导入即可下载'); break; } case "ef2": { new Ef2(user.userStatus.userAgent, user.userStatus.referer, user.userStatus.filepath, user.userStatus.ef2.delay, user.userStatus.ef2.silence).sendLinkToIDM({ url: data.url[0], out: data.fileName }); toast.warning("允许浏览器打开【IDM EF2辅助工具】即可开始下载", "如果浏览器和IDM都没有任何反应,那些请先安装ef2辅助工具。"); break; } case "aria2": { const cmdLine = new Aria2(user.userStatus.userAgent, user.userStatus.referer, user.userStatus.filepath, user.userStatus.aria2.server, user.userStatus.aria2.port, user.userStatus.aria2.token, user.userStatus.aria2.split, user.userStatus.aria2.size).cmdlet({ urls: data.url, out: data.fileName }); toast.success( "已复制下载命令到剪切板,粘贴到终端里回车即可开始下载。当然前提是您的设备已配置好了aria2。", "--------------", cmdLine ); break; } case "aria2rpc": { new Aria2(user.userStatus.userAgent, user.userStatus.referer, user.userStatus.filepath, user.userStatus.aria2.server, user.userStatus.aria2.port, user.userStatus.aria2.token, user.userStatus.aria2.split, user.userStatus.aria2.size).rpc({ urls: data.url, out: data.fileName }).then((d) => { toast.success("aria2已经开始下载", \`GUID: \${d}\`); }).catch((e) => { toast.error("aria2[RPC]错误!", e); }); break; } case "curl": { const cmdLine = new Curl(user.userStatus.userAgent, user.userStatus.referer, user.userStatus.filepath).cmdlet({ url: data.url[0], out: data.fileName }); toast.success( "已复制下载命令到剪切板,粘贴到终端里回车即可开始下载。", "--------------", cmdLine ); break; } default: { if (false) { if (!("\$id" in data)) { data.\$id = await GM.modifyRequestheader(data.url[0], { "user-agent": user.userStatus.userAgent, "referer": user.userStatus.referer }, { "Content-Disposition": \`attachment\${data.fileName ? \`; filename="\${data.fileName}"\` : ""}\` }, false); } setTimeout(() => { data.\$id(); delete data.\$id; }, 1e5); } this.anchor(data); break; } } } } /** * 直接访问要下载的链接 * @param d 下载数据 */ anchor(d) { const a = document.createElement("a"); d.url && (a.href = d.url[0]); d.fileName && (a.download = d.fileName); a.target = "_blank"; a.click(); } /** 请求中 */ downloading = 0; /** 已请求 */ gets = []; /** 下载当前视频 */ default() { if (this.downloading) return; if (!BLOD.cid) return toast.warning("未找到视频文件"); this.ui.show(); user.userStatus.TVresource || this.getPlayInfo(); user.userStatus.downloadType.includes("mp4") && this.getMp4(); user.userStatus.downloadType.includes("flv") && this.getFlv(); user.userStatus.downloadType.includes("dash") && this.getDash(); } getPlayInfo() { if (this.gets.includes("_")) return; this.decodePlayinfo(videoLimit.__playinfo__); this.gets.push("_"); } getMp4() { if (this.data.mp4 || this.gets.includes("mp4")) return; this.downloading++; (BLOD.pgc ? this.mp4(BLOD.cid) : this.flv(BLOD.aid, BLOD.cid)).then((d) => { this.gets.push("mp4"); this.decodePlayinfo(d); }).finally(() => { this.downloading--; }); } getFlv() { if (this.data.flv || this.gets.includes("flv")) return; this.downloading++; (user.userStatus.TVresource ? this.tv(BLOD.aid, BLOD.cid, false, user.userStatus.downloadQn) : this.interface(BLOD.cid, user.userStatus.downloadQn)).then((d) => { this.gets.push("flv"); this.decodePlayinfo(d); }).finally(() => { this.downloading--; }); } getDash() { if (this.data.aac || this.gets.includes("dash") || this.data.hev || this.data.av1) return; this.downloading++; (user.userStatus.TVresource ? this.tv(BLOD.aid, BLOD.cid) : this.dash(BLOD.aid, BLOD.cid)).then((d) => { this.gets.push("dash"); this.decodePlayinfo(d); }).finally(() => { this.downloading--; }); } /** 清空数据 */ destory() { this.ui.remove(); this.data = this.ui.init(); this.downloading = 0; this.gets = []; videoLimit.__playinfo__ = void 0; } mp4(cid) { return new ApiPlayurlProj({ cid, access_key: user.userStatus.accessKey.token }, BLOD.pgc).getData(); } flv(avid, cid) { return apiPlayurl({ avid, cid }, false, BLOD.pgc); } dash(avid, cid) { return apiPlayurl({ avid, cid }, true, BLOD.pgc); } tv(avid, cid, dash = true, quality = qn) { return new ApiPlayurlTv({ avid, cid, access_key: user.userStatus.accessKey.token, qn: quality }, dash, BLOD.pgc).getData(); } intl(aid, cid, dash = true) { return new ApiPlayurlIntl({ aid, cid, access_key: user.userStatus.accessKey.token }, dash, BLOD.pgc).getData(); } interface(cid, quality = qn) { return new ApiPlayurlInterface({ cid, quality }, BLOD.pgc).getData(); } _BAPIAppPlayurlV1; get BAPIAppPlayurlV1() { this._BAPIAppPlayurlV1 || (this._BAPIAppPlayurlV1 = new BAPIAppPlayurlV1(user.userStatus.accessKey.token)); return this._BAPIAppPlayurlV1; } image() { var _a3, _b2, _c, _d, _e, _f, _g, _h, _i, _j; const src = []; (_b2 = (_a3 = videoInfo.metadata) == null ? void 0 : _a3.artwork) == null ? void 0 : _b2.forEach((d) => src.push(d.src)); if (location.host === "live.bilibili.com" && ((_f = (_e = (_d = (_c = window.__NEPTUNE_IS_MY_WAIFU__) == null ? void 0 : _c.roomInfoRes) == null ? void 0 : _d.data) == null ? void 0 : _e.room_info) == null ? void 0 : _f.cover)) { src.push((_j = (_i = (_h = (_g = window.__NEPTUNE_IS_MY_WAIFU__) == null ? void 0 : _g.roomInfoRes) == null ? void 0 : _h.data) == null ? void 0 : _i.room_info) == null ? void 0 : _j.cover); } if (/\\/read\\/[Cc][Vv]/.test(location.href)) { document.querySelectorAll(".article-holder img").forEach((d) => { d.src && src.push(d.src); }); } if (src.length) { this.previewImage || (this.previewImage = new PreviewImage()); this.previewImage.value(src); } else { toast.warning("未找到封面信息!"); } } /** 添加播放器下载按钮 */ bgrayButton() { var _a3; if (!this.bgrayButtonBtn) { this.bgrayButtonBtn = document.createElement("div"); this.bgrayButtonBtn.classList.add("bgray-btn", "show"); this.bgrayButtonBtn.title = "下载当前视频"; this.bgrayButtonBtn.innerHTML = "下载
视频"; this.bgrayButtonBtn.addEventListener("click", (e) => { var _a4; (_a4 = BLOD.ui) == null ? void 0 : _a4.show("download"); e.stopPropagation(); }); } (_a3 = document.querySelector(".bgray-btn-wrap")) == null ? void 0 : _a3.appendChild(this.bgrayButtonBtn); } }; var download = new Download(); // src/core/bilibili-old.ts var BLOD = new class { /** 路径拆分 */ path = location.href.split("/"); /** bangumi标记 */ pgc = false; ui; get aid() { return window.aid; } set aid(v) { window.aid = v; } get cid() { return window.cid; } set cid(v) { window.cid = v; } /** bangumi ssid */ ssid; /** bangumi epid */ epid; /** 限制视频 */ limit; /** 东南亚视频标记 */ th; /** 播放器已加载 */ playLoaded = false; /** 已模拟APP端取流 */ networkMocked = false; /** 是否大会员 */ isVip = false; /** 播放器哈希值 */ version; // 调试接口 GM = GM; urlSign = urlSign; objUrl = objUrl; urlObj = urlObj; download = download; danmaku = danmaku; toast = toast; debug = debug; videoInfo = videoInfo; base64 = base64; md5 = import_md52.default; htmlVnode = htmlVnode; saveAs = saveAs; fileRead = fileRead; /** 刷新toast,多用于重构页面后刷新显示 */ flushToast() { document.body.contains(toast) || document.body.appendChild(toast); } }(); // src/core/storage.ts init_tampermonkey(); var LocalStorage = class { /** 清空! */ static clear() { localStorage.clear(); } /** * 读取 * @param key 目标键名 * @returns 格式化后的数据 */ static getItem(key) { return toObject(localStorage.getItem(key)); } /** * 列出键名数组 * 原生Storage.key只返回但索引,感觉意义不大。 * @returns 键名数组 */ static keys() { return Object.keys(localStorage); } /** * 移除 * @param key 目标键名 */ static removeItem(key) { localStorage.removeItem(key); } /** * 添加/修改 * @param key * @param value */ static setItem(key, value) { localStorage.setItem(key, toString(value)); } }; var SessionStorage = class { /** 清空! */ static clear() { sessionStorage.clear(); } /** * 读取 * @param key 目标键名 * @returns 格式化后的数据 */ static getItem(key) { return toObject(sessionStorage.getItem(key)); } /** * 列出键名数组 * 原生Storage.key只返回但索引,感觉意义不大。 * @returns 键名数组 */ static keys() { return Object.keys(sessionStorage); } /** * 移除 * @param key 目标键名 */ static removeItem(key) { sessionStorage.removeItem(key); } /** * 添加/修改 * @param key * @param value */ static setItem(key, value) { sessionStorage.setItem(key, toString(value)); } }; // src/page/header.ts init_tampermonkey(); // src/io/api-page-header.ts init_tampermonkey(); async function apiPageHeader(data) { const response = await fetch(objUrl(URLS.PAGE_HEADER, data)); const json = await response.json(); return jsonCheck(json).data; } // src/utils/format/subarray.ts init_tampermonkey(); function subArray(res, num = 1) { const arr2 = [...res]; const out = []; num = num || 1; num = num < arr2.length ? num : arr2.length; while (out.length < num) { var temp = Math.random() * arr2.length >> 0; out.push(arr2.splice(temp, 1)[0]); } return num === 1 ? out[0] : out; } // src/utils/hook/node.ts init_tampermonkey(); var appendChild = Element.prototype.appendChild; var insertBefore = Element.prototype.insertBefore; var jsonp = []; Element.prototype.appendChild = function(newChild) { this.parentElement === document.documentElement && newChild.nodeName == "SCRIPT" && newChild.src && jsonp.forEach((d) => { d[0].every((d2) => newChild.src.includes(d2)) && d[1].call(newChild); }); return appendChild.call(this, newChild); }; Element.prototype.insertBefore = function(newChild, refChild) { this.parentElement === document.documentElement && newChild.nodeName == "SCRIPT" && newChild.src && jsonp.forEach((d) => { d[0].every((d2) => newChild.src.includes(d2)) && d[1].call(newChild); }); return insertBefore.call(this, newChild, refChild); }; function jsonpHook(url, redirect, modifyResponse, once = true) { let id; const one = Array.isArray(url) ? url : [url]; const two = function() { once && id && delete jsonp[id - 1]; if (redirect) try { this.src = redirect(this.src) || this.src; } catch (e) { debug.error("redirect of jsonphook", one, e); } if (modifyResponse) { const obj = urlObj(this.src); if (obj) { const callback = obj.callback; const call = window[callback]; const url2 = this.src; if (call) { window[callback] = function(v) { try { v = modifyResponse(v, url2, call) || v; } catch (e) { debug.error("modifyResponse of jsonphook", one, e); } return v !== true && call(v); }; } } } }; const iid = jsonp.push([one, two]); return () => { removeJsonphook(iid); }; } jsonpHook.async = (url, condition, modifyResponse, once = true) => { let id; const one = Array.isArray(url) ? url : [url]; const two = function() { try { once && id && delete jsonp[id - 1]; if (!condition || condition(this.src)) { const obj = urlObj(this.src); if (obj) { const callback = obj.callback; const call = window[callback]; if (call) { modifyResponse && modifyResponse(this.src).then((d) => { window[callback](d); this.dispatchEvent(new ProgressEvent("load")); }).catch((e) => { this.dispatchEvent(new ProgressEvent("error")); debug.error("modifyResponse of xhrhookasync", one, e); }); } this.removeAttribute("src"); } } } catch (e) { debug.error("jsonphook", one, e); } }; const iid = jsonp.push([one, two]); return () => { removeJsonphook(iid); }; }; jsonpHook.scriptBlock = (url) => { const one = Array.isArray(url) ? url : [url]; const two = function() { try { this.removeAttribute("src"); setTimeout(() => { this.dispatchEvent(new ProgressEvent("load")); try { this.remove(); } catch (e) { } }, 100); } catch (e) { debug.error("脚本拦截失败!", one, e); } }; jsonp.push([one, two]); }; jsonpHook.scriptIntercept = (url, redirect, text) => { const one = Array.isArray(url) ? url : [url]; const two = function() { try { if (text) { this.text = text(this.src); this.removeAttribute("src"); setTimeout(() => { this.dispatchEvent(new ProgressEvent("load")); this == null ? void 0 : this.remove(); }, 100); } else if (redirect) { this.src = redirect(this.src); } } catch (e) { debug.error("scriptIntercept", one, e); } }; const iid = jsonp.push([one, two]); return () => { removeJsonphook(iid); }; }; function removeJsonphook(id) { id >= 0 && delete jsonp[id - 1]; } jsonpHook.xhr = (url) => { const one = Array.isArray(url) ? url : [url]; const two = function() { try { const obj = urlObj(this.src); if (obj) { const callback = obj.callback || obj.jsoncallback; const call = window[callback]; const url2 = this.src; this.removeAttribute("src"); delete obj.callback; delete obj.jsoncallback; fetch(objUrl(url2.split("?")[0], obj)).then((d) => d.json()).then((d) => { call(d); this.dispatchEvent(new ProgressEvent("load")); }).catch(() => { this.dispatchEvent(new ProgressEvent("error")); }); } } catch (e) { debug.error("jsonphook", one, e); } }; const iid = jsonp.push([one, two]); return () => { removeJsonphook(iid); }; }; // src/json/index-icon.json var index_icon_default = { fix: [ { id: "609", type: "fix", title: "如果国宝会说话", deltime: "0", posttime: "1514973117", edittime: "1514973117", sttime: "1514886600", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/activity-plat/cover/20180103/59pz8mv77p.gif", weight: "10", links: [ "https:https://search.bilibili.com/all?keyword=%E5%A6%82%E6%9E%9C%E5%9B%BD%E5%AE%9D%E4%BC%9A%E8%AF%B4%E8%AF%9D" ] }, { id: "608", type: "fix", title: "极地", deltime: "0", posttime: "1514431011", edittime: "1514972989", sttime: "1514171700", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/activity-plat/cover/20171228/p6xkl7v8rq.gif", weight: "0", links: [ "https:https://search.bilibili.com/all?keyword=极地" ] }, { id: "607", type: "fix", title: "大卫·爱登堡与巨象", deltime: "0", posttime: "1513741733", edittime: "1514972989", sttime: "1513650780", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/activity-plat/cover/20171220/x6899kp5rq.gif", weight: "0", links: [ "https:https://search.bilibili.com/all?keyword=大卫·爱登堡与巨象" ] }, { id: "605", type: "fix", title: "国家宝藏", deltime: "0", posttime: "1512962047", edittime: "1514972989", sttime: "1512875400", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/activity-plat/cover/20171211/027jnnx0qv.gif", weight: "0", links: [ "https:https://search.bilibili.com/all?keyword=国家宝藏" ] }, { id: "604", type: "fix", title: "BBC60周年", deltime: "0", posttime: "1512961936", edittime: "1514972989", sttime: "1512875400", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/activity-plat/cover/20171211/027jn6l0w0.gif", weight: "0", links: [ "https:https://search.bilibili.com/all?keyword=BBC60周年" ] }, { id: "603", type: "fix", title: "", deltime: "0", posttime: "1511250034", edittime: "1514972989", sttime: "1511247600", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/activity-plat/cover/20171121/y4o19nyvmj.gif", weight: "0", links: [ "https:https://search.bilibili.com/all?keyword=INFINI-T%20FORCE" ] }, { id: "602", type: "fix", title: "声之形", deltime: "0", posttime: "1507781072", edittime: "1514972989", sttime: "1507823700", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/activity-plat/cover/20171012/z4ypmx829l.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%A3%B0%E4%B9%8B%E5%BD%A2" ] }, { id: "601", type: "fix", title: "你的名字", deltime: "0", posttime: "1503565677", edittime: "1514972989", sttime: "1503503700", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/activity-plat/cover/20170828/02wz2nv570.gif", weight: "0", links: [ "https:https://www.bilibili.com/blackboard/topic/activity-yourname1708.html" ] }, { id: "600", type: "fix", title: "放肆开学", deltime: "0", posttime: "1503555174", edittime: "1514972989", sttime: "1503676500", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/activity-plat/cover/20170824/v5o245k70y.gif", weight: "0", links: [ "https:https://search.bilibili.com/all?keyword=%E6%94%BE%E8%82%86%E5%BC%80%E5%AD%A6" ] }, { id: "599", type: "fix", title: "Nike React", deltime: "0", posttime: "1501561207", edittime: "1514972989", sttime: "1502034900", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/activity-plat/cover/20170801/y4r02q54zj.gif", weight: "0", links: [ "https:https://search.bilibili.com/all?keyword=Nike%20React" ] }, { id: "596", type: "fix", title: "七月新番", deltime: "0", posttime: "1498792166", edittime: "1514972989", sttime: "1498701120", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/activity-plat/cover/20170630/12jlkyp1vj.gif", weight: "0", links: [ "https:https://www.bilibili.com/blackboard/topic/activity-HkBRflO7Z.html" ] }, { id: "595", type: "fix", title: "脸接鱼雷", deltime: "0", posttime: "1495532952", edittime: "1514972989", sttime: "1495648800", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/activity-plat/cover/20170523/q0rzwvnxqw.gif", weight: "0", links: [ "https://acg.tv/u1Sq" ] }, { id: "594", type: "fix", title: "恋爱暴君", deltime: "0", posttime: "1494917068", edittime: "1514972989", sttime: "1494830580", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/activity-plat/cover/20170516/l66z6q9vx7.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E6%81%8B%E7%88%B1%E6%9A%B4%E5%90%9B" ] }, { id: "593", type: "fix", title: "P5", deltime: "0", posttime: "1494240485", edittime: "1514972989", sttime: "1494153300", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/activity-plat/cover/20170508/m66pvpvo5p.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%A5%B3%E7%A5%9E%E5%BC%82%E9%97%BB%E5%BD%955" ] }, { id: "592", type: "fix", title: "点兔", deltime: "0", posttime: "1494240166", edittime: "1514972989", sttime: "1494153300", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/activity-plat/cover/20170508/299nq72pon.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E7%82%B9%E5%85%94" ] }, { id: "591", type: "fix", title: "全职高手", deltime: "0", posttime: "1494240079", edittime: "1514972989", sttime: "1494153300", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/activity-plat/cover/20170508/699r071y3w.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%85%A8%E8%81%8C%E9%AB%98%E6%89%8B" ] }, { id: "590", type: "fix", title: "人工智障", deltime: "0", posttime: "1493709665", edittime: "1514972989", sttime: "1493623080", endtime: "0", state: "1", icon: "https://activity.hdslb.com/blackboard/cover/v55r8ql070.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E4%BA%BA%E5%B7%A5%E6%99%BA%E9%9A%9C" ] }, { id: "589", type: "fix", title: "液压机", deltime: "0", posttime: "1493021860", edittime: "1514972989", sttime: "1492935360", endtime: "0", state: "1", icon: "https://activity.hdslb.com/blackboard/cover/r99qk2p22q.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E6%B6%B2%E5%8E%8B%E6%9C%BA" ] }, { id: "588", type: "fix", title: "原谅她", deltime: "0", posttime: "1492144236", edittime: "1514972989", sttime: "1492057680", endtime: "0", state: "1", icon: "https://activity.hdslb.com/blackboard/cover/v556yx5nl5.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%8E%9F%E8%B0%85%E5%A5%B9" ] }, { id: "584", type: "fix", title: "孤独的美食家", deltime: "0", posttime: "1484811832", edittime: "1514972989", sttime: "1485705600", endtime: "0", state: "1", icon: "https://activity.hdslb.com/blackboard/cover/activity-4147/QQ%E5%9B%BE%E7%89%8720170110124819.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%AD%A4%E7%8B%AC%E7%BE%8E%E9%A3%9F%E5%AE%B6" ] }, { id: "583", type: "fix", title: "血源诅咒", deltime: "0", posttime: "1481617840", edittime: "1514972989", sttime: "1481530800", endtime: "0", state: "1", icon: "https://activity.hdslb.com/blackboard/cover/activity-3898/%E8%A1%80%E6%BA%90%E8%AF%85%E5%92%92.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=+%E8%A1%80%E6%BA%90%E8%AF%85%E5%92%92" ] }, { id: "582", type: "fix", title: "腹语术", deltime: "0", posttime: "1481177705", edittime: "1514972989", sttime: "1481090760", endtime: "0", state: "1", icon: "https://activity.hdslb.com/blackboard/cover/activity-3898/%E8%85%B9%E8%AF%AD%E6%9C%AF.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E8%85%B9%E8%AF%AD" ] }, { id: "581", type: "fix", title: "上升气流", deltime: "0", posttime: "1481177656", edittime: "1514972989", sttime: "1481090760", endtime: "0", state: "1", icon: "https://activity.hdslb.com/blackboard/cover/activity-3898/%E4%B8%8A%E5%8D%87%E6%B0%94%E6%B5%81.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E4%B8%8A%E5%8D%87%E6%B0%94%E6%B5%81" ] }, { id: "580", type: "fix", title: "牛顿", deltime: "0", posttime: "1481177628", edittime: "1514972989", sttime: "1481090760", endtime: "0", state: "1", icon: "https://activity.hdslb.com/blackboard/cover/activity-3898/%E7%89%9B%E9%A1%BF.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E7%89%9B%E9%A1%BF" ] }, { id: "579", type: "fix", title: "喷了", deltime: "0", posttime: "1481177596", edittime: "1514972989", sttime: "1481090760", endtime: "0", state: "1", icon: "https://activity.hdslb.com/blackboard/cover/activity-3898/%E5%96%B7%E4%BA%86.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%96%B7%E4%BA%86" ] }, { id: "578", type: "fix", title: "维克托", deltime: "0", posttime: "1481177224", edittime: "1514972989", sttime: "1481090760", endtime: "0", state: "1", icon: "https://activity.hdslb.com/blackboard/cover/activity-3898/%E5%86%B0%E4%B8%8A%E7%9A%84%E5%B0%A4%E9%87%8C.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%86%B0%E4%B8%8A%E7%9A%84%E5%B0%A4%E9%87%8C" ] }, { id: "577", type: "fix", title: "羽生结弦", deltime: "0", posttime: "1477649861", edittime: "1514972989", sttime: "1477563240", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/aa21b37ada0eaed484567b1c07870f6c82eb0a88.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E7%BE%BD%E7%94%9F%E7%BB%93%E5%BC%A6&page=1&order=click" ] }, { id: "576", type: "fix", title: "僵尸", deltime: "0", posttime: "1477034605", edittime: "1514972989", sttime: "1476946920", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/9d04921fa7646907fa087b129f64e68d0c756e4d.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%83%B5%E5%B0%B8" ] }, { id: "575", type: "fix", title: "困", deltime: "0", posttime: "1477034579", edittime: "1514972989", sttime: "1476946920", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/835f1f30d19d95e0f6b9a0e33c59eb5db3d00a7e.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%9B%B0" ] }, { id: "574", type: "fix", title: "南瓜灯", deltime: "0", posttime: "1477034405", edittime: "1514972989", sttime: "1476946920", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/6b12ae120a622df4ab5bda54747203e58afeb0c6.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%8D%97%E7%93%9C%E7%81%AF" ] }, { id: "573", type: "fix", title: "吃药", deltime: "0", posttime: "1477034101", edittime: "1514972989", sttime: "1476946920", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/ffd36c9244bb23f4f88648203386fc9067a4c40e.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%90%83%E8%8D%AF" ] }, { id: "572", type: "fix", title: "搞事", deltime: "0", posttime: "1477034071", edittime: "1514972989", sttime: "1476946920", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/7767ebd63553ecc22b246e095fa55b16fc5420f3.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E6%90%9E%E4%BA%8B" ] }, { id: "571", type: "fix", title: "PPAP", deltime: "0", posttime: "1477033993", edittime: "1514972989", sttime: "1476946920", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/9a89870eff12495e137713612e695a24ae369e2d.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=PPAP" ] }, { id: "570", type: "fix", title: "放假", deltime: "0", posttime: "1477033922", edittime: "1514972989", sttime: "1476946920", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/a90403b979e707278b4e47bac3c78e549c732134.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E6%94%BE%E5%81%87" ] }, { id: "569", type: "fix", title: "战术目镜启动", deltime: "0", posttime: "1477033807", edittime: "1514972989", sttime: "1476946920", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/d3a375898eba9b787d8240dd8708314119131f44.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E6%88%98%E6%9C%AF%E7%9B%AE%E9%95%9C" ] }, { id: "568", type: "fix", title: "丛林", deltime: "0", posttime: "1475232463", edittime: "1514972989", sttime: "1475145660", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/8c84c29a42dcdf789745c6d552766133b94a0534.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E4%B8%9B%E6%9E%97" ] }, { id: "567", type: "fix", title: "非洲欢迎你", deltime: "0", posttime: "1475232419", edittime: "1514972989", sttime: "1475145660", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/431f5cbfc1f69e19a474b2def0b0571792fdbe1e.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E9%9D%9E%E6%B4%B2%E6%AC%A2%E8%BF%8E%E4%BD%A0" ] }, { id: "566", type: "fix", title: "聪哥", deltime: "0", posttime: "1475232380", edittime: "1514972989", sttime: "1475145660", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/ac2b22633ea1c72b6406c1877a61cb659db8cfea.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E8%81%AA%E5%93%A5" ] }, { id: "565", type: "fix", title: "非洲人 (..•˘_˘•..)", deltime: "0", posttime: "1475232306", edittime: "1514972989", sttime: "1475145660", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/140ce02b9c96d6cd6bc82f508247ed785109d0b9.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E9%9D%9E%E6%B4%B2" ] }, { id: "564", type: "fix", title: "SSR", deltime: "0", posttime: "1475232266", edittime: "1514972989", sttime: "1475145660", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/aad1773e1df51757f15f79de91b783ce22151e1c.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=SSR" ] }, { id: "563", type: "fix", title: "静电", deltime: "0", posttime: "1475232209", edittime: "1514972989", sttime: "1475145660", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/43d84069e3db486f24739e2c406ebbc13a33ba8e.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E9%9D%99%E7%94%B5" ] }, { id: "562", type: "fix", title: "舔冰棒", deltime: "0", posttime: "1474973710", edittime: "1514972989", sttime: "1474887000", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/e530a4b3b893fd54e95930e3898adf092f764b22.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E8%88%94%E5%86%B0" ] }, { id: "561", type: "fix", title: "翻墙", deltime: "0", posttime: "1474973671", edittime: "1514972989", sttime: "1474887000", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/64749730eb6a0238f61ee4d603197dc3dd1193a1.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E7%BF%BB%E5%A2%99" ] }, { id: "560", type: "fix", title: "动如脱兔", deltime: "0", posttime: "1474973639", edittime: "1514972989", sttime: "1474887000", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/69ea913485d7719489a3f5fe0c0c7c85130584ff.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%8A%A8%E5%A6%82%E8%84%B1%E5%85%94" ] }, { id: "559", type: "fix", title: "娃娃机", deltime: "0", posttime: "1474973603", edittime: "1514972989", sttime: "1474887000", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/a18bb9aa9fd32cf3fed25566cfd2b126e5ecc378.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%A8%83%E5%A8%83%E6%9C%BA" ] }, { id: "558", type: "fix", title: "告白实行委员会", deltime: "0", posttime: "1474973573", edittime: "1514972989", sttime: "1474887000", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/a7198ebd51ddeb644f44630fbbf5224d2474120c.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%91%8A%E7%99%BD%E5%AE%9E%E8%A1%8C%E5%A7%94%E5%91%98%E4%BC%9A" ] }, { id: "557", type: "fix", title: "G胖", deltime: "0", posttime: "1474973533", edittime: "1514972989", sttime: "1474887000", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/ddc290d2e010e3dbe3356bbded54e5cb26fdea48.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=G%E8%83%96" ] }, { id: "556", type: "fix", title: "死鱼眼", deltime: "0", posttime: "1474973463", edittime: "1514972989", sttime: "1474887000", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/9668a491b4e159c79aa0b1d8f9527eaba0244463.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E6%AD%BB%E9%B1%BC%E7%9C%BC" ] }, { id: "555", type: "fix", title: "休闲", deltime: "0", posttime: "1474781201", edittime: "1514972989", sttime: "1474692840", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/13bafd46d175e4f753153e8d5fb4d618ba479e57.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E4%BC%91%E9%97%B2" ] }, { id: "554", type: "fix", title: "飞吻", deltime: "0", posttime: "1474781174", edittime: "1514972989", sttime: "1474692840", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/b22d4b55626a9924a85f931529a95b029366660d.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E9%A3%9E%E5%90%BB" ] }, { id: "553", type: "fix", title: "嘴馋", deltime: "0", posttime: "1474781145", edittime: "1514972989", sttime: "1474692840", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/8632ddf29548597302d2c667d3506303adbe02a4.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%98%B4%E9%A6%8B" ] }, { id: "552", type: "fix", title: "嘻嘻嘻", deltime: "0", posttime: "1474781095", edittime: "1514972989", sttime: "1474692840", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/c50d5d8c7a93c31a074a54c83057b06ae0c20857.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%98%BB%E5%98%BB%E5%98%BB" ] }, { id: "551", type: "fix", title: "调教", deltime: "0", posttime: "1474781045", edittime: "1514972989", sttime: "1474692840", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/dcb9411062229fbaaa09c36cc42438f98974ca1c.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E8%B0%83%E6%95%99" ] }, { id: "550", type: "fix", title: "科学", deltime: "0", posttime: "1474779827", edittime: "1514972989", sttime: "1474692840", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/04419daf939342513ff3220551b6c199a43f4558.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E7%A7%91%E5%AD%A6" ] }, { id: "549", type: "fix", title: "猪猪", deltime: "0", posttime: "1474440111", edittime: "1514972989", sttime: "1474353540", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/bfd556a757c6e8b489fa183e61246e526183e9ae.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E7%8C%AA" ] }, { id: "548", type: "fix", title: "一起摇摆", deltime: "0", posttime: "1474440063", edittime: "1514972989", sttime: "1474353540", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/5ddef1dfb0f8a4a8ed160195e942fd41c7922b01.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E6%91%87%E6%91%86" ] }, { id: "547", type: "fix", title: "坏笑", deltime: "0", posttime: "1474439982", edittime: "1514972989", sttime: "1474353060", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/2060313be66420dd721fa8f73666c191d9df586c.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%9D%8F%E7%AC%912" ] }, { id: "546", type: "fix", title: "买买买", deltime: "0", posttime: "1474439944", edittime: "1514972989", sttime: "1474353060", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/f42cdace4d5436e960ecb3e19705662e38863b55.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E4%B9%B0%E4%B9%B0%E4%B9%B0" ] }, { id: "545", type: "fix", title: "作业向BGM", deltime: "0", posttime: "1474439907", edittime: "1514972989", sttime: "1474353060", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/b9c0a8b257c1b5f98433ce68f8e51613ba6a8cca.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E4%BD%9C%E4%B8%9A%E5%90%91" ] }, { id: "544", type: "fix", title: "拉伸运动", deltime: "0", posttime: "1474439869", edittime: "1514972989", sttime: "1474353060", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/3716fb767dffd5f9cbc380a492c4dbfd93bb486b.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E6%8B%89%E4%BC%B8" ] }, { id: "543", type: "fix", title: "滚来滚去", deltime: "0", posttime: "1474439764", edittime: "1514972989", sttime: "1474353060", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/dc47a10c5bf327309fa459436f79f2f49f31ae88.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E6%BB%9A%E6%9D%A5%E6%BB%9A%E5%8E%BB" ] }, { id: "542", type: "fix", title: "Yoga", deltime: "0", posttime: "1474270692", edittime: "1514972989", sttime: "1474183800", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/83f04dc39521dcf567121037f982ea91e7306b76.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E7%91%9C%E4%BC%BD" ] }, { id: "541", type: "fix", title: "魂斗罗", deltime: "0", posttime: "1474270622", edittime: "1514972989", sttime: "1474183800", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/04d8d945bcaa05646514d00ba6f664507cd6fd1e.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E9%AD%82%E6%96%97%E7%BD%97" ] }, { id: "540", type: "fix", title: "百战天虫", deltime: "0", posttime: "1474270567", edittime: "1514972989", sttime: "1474183800", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/2cdc0609096c9beb3a6c237b0bd7613c3600b098.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E7%99%BE%E6%88%98%E5%A4%A9%E8%99%AB" ] }, { id: "539", type: "fix", title: "蝴蝶", deltime: "0", posttime: "1474270514", edittime: "1514972989", sttime: "1474183800", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/92638e9e9cbb3429d4e48486b7992ac4c79e9ccd.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E8%9D%B4%E8%9D%B6" ] }, { id: "538", type: "fix", title: "跳绳", deltime: "0", posttime: "1474270432", edittime: "1514972989", sttime: "1474183800", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/7c8759c0d6ccb15383b8cd8655bec5bb3255b3e9.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E8%B7%B3%E7%BB%B3" ] }, { id: "537", type: "fix", title: "脑洞", deltime: "0", posttime: "1473734801", edittime: "1514972989", sttime: "1473648300", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/7e729b0d2e96431d00b98253a82f840ba0c9b992.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E8%84%91%E6%B4%9E" ] }, { id: "536", type: "fix", title: "卧槽", deltime: "0", posttime: "1473734691", edittime: "1514972989", sttime: "1473648120", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/c8705a26f2cfa12bcd25a53892268f2b7b7347a5.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%8D%A7%E6%A7%BD" ] }, { id: "535", type: "fix", title: "瑟瑟发抖", deltime: "0", posttime: "1473734614", edittime: "1514972989", sttime: "1473648120", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/715f8793f5c1af969deff434029de68749c3bf76.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E7%91%9F%E7%91%9F%E5%8F%91%E6%8A%96" ] }, { id: "534", type: "fix", title: "露脸", deltime: "0", posttime: "1473669258", edittime: "1514972989", sttime: "1473582660", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/82264be44c5cbbfdad61b1bd5b7594b5c28409ec.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E9%9C%B2%E8%84%B8" ] }, { id: "533", type: "fix", title: "泡沫", deltime: "0", posttime: "1473669224", edittime: "1514972989", sttime: "1473582660", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/7362d4c40cccad4cc63611aa8ff19953cd084c24.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E6%B3%A1%E6%B2%AB" ] }, { id: "532", type: "fix", title: "呆毛", deltime: "0", posttime: "1473669183", edittime: "1514972989", sttime: "1473582660", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/6e88bc9235e3648a96cd74c28d99491ca0c4b338.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%91%86%E6%AF%9B" ] }, { id: "531", type: "fix", title: "卖萌", deltime: "0", posttime: "1473669146", edittime: "1514972989", sttime: "1473582660", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/8a6375683ae2084631e39916be15325846d2fe1c.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%8D%96%E8%90%8C" ] }, { id: "530", type: "fix", title: "哆啦A梦", deltime: "0", posttime: "1473387971", edittime: "1514972989", sttime: "1473301380", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/37dea027fefc96a9e63b91400b870b82aa93745c.gif", weight: "0", links: [ "https://bangumi.bilibili.com/movie/11870/" ] }, { id: "529", type: "fix", title: "蛋包饭", deltime: "0", posttime: "1473133768", edittime: "1514972989", sttime: "1473047100", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/b04bdcd80140b6b8539288bc3da72b6763af0660.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E8%9B%8B%E5%8C%85%E9%A5%AD" ] }, { id: "528", type: "fix", title: "鹅", deltime: "0", posttime: "1473133734", edittime: "1514972989", sttime: "1473047100", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/a995985cca22ef2675348eedc9fa5ae7c4a85370.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E9%B9%85" ] }, { id: "527", type: "fix", title: "散步", deltime: "0", posttime: "1473133708", edittime: "1514972989", sttime: "1473047100", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/f8f3ddb128b38687be7fb7918c21abbbc9b1b5b5.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E6%95%A3%E6%AD%A5" ] }, { id: "526", type: "fix", title: "速写", deltime: "0", posttime: "1473072559", edittime: "1514972989", sttime: "1472985660", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/8359bad2495b6a348b04a2ebde16ea9547c2c3b4.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E9%80%9F%E5%86%99" ] }, { id: "525", type: "fix", title: "破蛋", deltime: "0", posttime: "1473072536", edittime: "1514972989", sttime: "1472985660", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/f612b62a9609000da7a5d5e22ab2ba52a9bd006a.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E7%A0%B4%E8%9B%8B" ] }, { id: "524", type: "fix", title: "泡泡", deltime: "0", posttime: "1473072509", edittime: "1514972989", sttime: "1472985660", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/feca114aaaba8a35f7febc0b9f8920959e31d918.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E6%B3%A1%E6%B3%A1" ] }, { id: "523", type: "fix", title: "大力", deltime: "0", posttime: "1473072493", edittime: "1514972989", sttime: "1472985660", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/ca3f6944301a54b5dedd214fd7c74dfb0178ff44.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%A4%A7%E5%8A%9B" ] }, { id: "522", type: "fix", title: "婴儿", deltime: "0", posttime: "1473072467", edittime: "1514972989", sttime: "1472985660", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/728b706186874e0da8f49b4bff057688b85ce90a.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%A9%B4%E5%84%BF" ] }, { id: "521", type: "fix", title: "腿控福利", deltime: "0", posttime: "1473072422", edittime: "1514972989", sttime: "1472985660", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/2eb48866889e8667abe5be2e3b3ed37799ff2765.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E9%95%BF%E8%85%BF" ] }, { id: "520", type: "fix", title: "禁烟", deltime: "0", posttime: "1473072400", edittime: "1514972989", sttime: "1472985660", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/19ec7aa9f6543882e6a5f5b08f55de83f34dce42.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E7%A6%81%E7%83%9F" ] }, { id: "519", type: "fix", title: "生无可恋", deltime: "0", posttime: "1473072369", edittime: "1514972989", sttime: "1472985660", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/2596e298010cea772966b7b0c869dc697c501e2f.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E7%94%9F%E6%97%A0%E5%8F%AF%E6%81%8B" ] }, { id: "518", type: "fix", title: "快递", deltime: "0", posttime: "1473072307", edittime: "1514972989", sttime: "1472985660", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/e1762b1396c9961dac2a77c93d0b7bc2f7998dd0.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%BF%AB%E9%80%92" ] }, { id: "517", type: "fix", title: "odds&ends", deltime: "0", posttime: "1473072269", edittime: "1514972989", sttime: "1472985660", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/6ecb8eaba4e38ab2d3eec0e98fa6875c89f126d3.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=ODDS+AND+ENDS" ] }, { id: "516", type: "fix", title: "鸡腿", deltime: "0", posttime: "1472723482", edittime: "1514972989", sttime: "1472637000", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/a1957fb3b3acaad31c054757f9b0b168d09b0b60.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E9%B8%A1%E8%85%BF" ] }, { id: "515", type: "fix", title: "热", deltime: "0", posttime: "1472723446", edittime: "1514972989", sttime: "1472637000", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/c4fb3cde4e02df97f28c5b1dde11aa8035c82042.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E7%83%AD" ] }, { id: "514", type: "fix", title: "无聊", deltime: "0", posttime: "1472723409", edittime: "1514972989", sttime: "1472636400", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/4cabeffe32798efdb782331312a2cb9d83af8f18.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E6%97%A0%E8%81%8A" ] }, { id: "512", type: "fix", title: "一个亿", deltime: "0", posttime: "1472723301", edittime: "1514972989", sttime: "1472636400", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/93028ba79a997b444f0d70fbedddeaf14af876a1.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E4%B8%80%E4%B8%AA%E4%BA%BF" ] }, { id: "511", type: "fix", title: "打豆豆", deltime: "0", posttime: "1472723249", edittime: "1514972989", sttime: "1472636400", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/12b927e0ae4cb690bd53a75308152beea0bc80c1.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E6%89%93%E8%B1%86%E8%B1%86" ] }, { id: "510", type: "fix", title: "沼跃鱼", deltime: "0", posttime: "1472468014", edittime: "1514972989", sttime: "1472380920", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/5a07738599177591152dfa586846644dfc1369b0.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E6%B2%BC%E8%B7%83%E9%B1%BC" ] }, { id: "509", type: "fix", title: "可达鸭", deltime: "0", posttime: "1472467994", edittime: "1514972989", sttime: "1472380920", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/e7b7a306ae643fec59558a9162d32ec38c882de1.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%8F%AF%E8%BE%BE%E9%B8%AD" ] }, { id: "508", type: "fix", title: "毁童年", deltime: "0", posttime: "1472467967", edittime: "1514972989", sttime: "1472380920", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/227bb230e487f687d8440228b83ac605129457ec.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E6%AF%81%E7%AB%A5%E5%B9%B4" ] }, { id: "507", type: "fix", title: "りりり", deltime: "0", posttime: "1472467904", edittime: "1514972989", sttime: "1472380920", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/d616a2126d13955974909ce316c3740cb38747f5.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E3%82%8A%E3%82%8A%E3%82%8A" ] }, { id: "506", type: "fix", title: "屎壳郎", deltime: "0", posttime: "1472467884", edittime: "1514972989", sttime: "1472380920", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/684ba732f6d07f054f537932e120001a725f55da.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%B1%8E%E5%A3%B3%E9%83%8E" ] }, { id: "505", type: "fix", title: "回复", deltime: "0", posttime: "1472467844", edittime: "1514972989", sttime: "1472380920", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/f2c01cab66b908f4f486b8b4a295c43d5bbb57db.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%9B%9E%E5%A4%8D" ] }, { id: "504", type: "fix", title: "求生之路", deltime: "0", posttime: "1472467821", edittime: "1514972989", sttime: "1472380920", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/05c169b61982ad641b529576be63424729bb6108.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E6%B1%82%E7%94%9F%E4%B9%8B%E8%B7%AF" ] }, { id: "503", type: "fix", title: "幽灵", deltime: "0", posttime: "1472467789", edittime: "1514972989", sttime: "1472380920", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/02b8b884e435959ec1714ca68168235bc9fe98f4.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%B9%BD%E7%81%B5" ] }, { id: "502", type: "fix", title: "没钱", deltime: "0", posttime: "1472467751", edittime: "1514972989", sttime: "1472380920", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/bb823d5639d3142d7ec69d1ef61f884fe1842de0.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E6%B2%A1%E9%92%B1" ] }, { id: "501", type: "fix", title: "半条命", deltime: "0", posttime: "1472467715", edittime: "1514972989", sttime: "1472380920", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/f28cd7af5832d997bd9c4706dfb4404ec96ce69a.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%8D%8A%E6%9D%A1%E5%91%BD" ] }, { id: "500", type: "fix", title: "抖腿", deltime: "0", posttime: "1472467419", edittime: "1514972989", sttime: "1472380920", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/64882d1f0bee58775384dddd972505fe2b831940.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E6%8A%96%E8%85%BF" ] }, { id: "499", type: "fix", title: "干枯", deltime: "0", posttime: "1472467371", edittime: "1514972989", sttime: "1472380920", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/9685fe4a9ddc4ec087e62109928e750c1c19b742.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%B9%B2%E6%9E%AF" ] }, { id: "498", type: "fix", title: "气球", deltime: "0", posttime: "1471949013", edittime: "1514972989", sttime: "1471862220", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/6ccca20dd7211d21fa32080576f51d2be44919de.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E6%B0%94%E7%90%83" ] }, { id: "497", type: "fix", title: "炼金术", deltime: "0", posttime: "1471948996", edittime: "1514972989", sttime: "1471862220", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/ae07e00404a1ddb6083153ef440c7ec31b8c0b5b.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E7%82%BC%E9%87%91%E6%9C%AF" ] }, { id: "496", type: "fix", title: "有毒", deltime: "0", posttime: "1471948978", edittime: "1514972989", sttime: "1471862220", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/8ae4200fbcb60b3f29e4ce75e27ba144145b366a.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E6%9C%89%E6%AF%92" ] }, { id: "495", type: "fix", title: "四叶草", deltime: "0", posttime: "1471948964", edittime: "1514972989", sttime: "1471862220", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/28c17ed8cfc3394149a6814a4a53086dee79c053.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%9B%9B%E5%8F%B6%E8%8D%89" ] }, { id: "494", type: "fix", title: "冷", deltime: "0", posttime: "1471948902", edittime: "1514972989", sttime: "1471862220", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/73100795fd5fd7ab885319d777ffd38f134ace28.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%86%B7" ] }, { id: "493", type: "fix", title: "C菌", deltime: "0", posttime: "1471948880", edittime: "1514972989", sttime: "1471862220", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/d0d0cf65e2644c86a4c71ba96abcd9d0e7251e2d.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=C%E8%8F%8C" ] }, { id: "492", type: "fix", title: "冰天雪地", deltime: "0", posttime: "1471948846", edittime: "1514972989", sttime: "1471862220", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/89ee85942e3f1a76de9e73b91041246938f7bf7c.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%86%B0%E5%A4%A9%E9%9B%AA%E5%9C%B0" ] }, { id: "491", type: "fix", title: "水母", deltime: "0", posttime: "1471598410", edittime: "1514972989", sttime: "1471509420", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/d9ae025039cebbf6c3c8785b4292cf9283a28235.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E6%B0%B4%E6%AF%8D" ] }, { id: "490", type: "fix", title: "自来水", deltime: "0", posttime: "1471598393", edittime: "1514972989", sttime: "1471509420", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/ba02e18a191fe1b98b9cf9314f065f0ee185534f.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E8%87%AA%E6%9D%A5%E6%B0%B4" ] }, { id: "489", type: "fix", title: "rap", deltime: "0", posttime: "1471598372", edittime: "1514972989", sttime: "1471509420", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/e6b0b05ca85b3dd083e122b22007cef7ff3760e4.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=rap" ] }, { id: "488", type: "fix", title: "B-BOX", deltime: "0", posttime: "1471598349", edittime: "1514972989", sttime: "1471509420", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/96c439a8ffff903d48c3b14d64fca92bf8af8f04.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=bbox" ] }, { id: "487", type: "fix", title: "柠檬", deltime: "0", posttime: "1471598322", edittime: "1514972989", sttime: "1471509420", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/d21e14162ed6ed5585321b0e684b7d1ea17780dd.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E6%9F%A0%E6%AA%AC" ] }, { id: "486", type: "fix", title: "GTA", deltime: "0", posttime: "1471595877", edittime: "1514972989", sttime: "1471509420", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/ba6aa88c3e43e6c0d0bb3a7a189d8ba910874702.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=GTA" ] }, { id: "485", type: "fix", title: "垃圾食品", deltime: "0", posttime: "1471406539", edittime: "1514972989", sttime: "1471319880", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/26c2f30f1bcf4ae3334e6a39468b3dc681b78b14.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%9E%83%E5%9C%BE%E9%A3%9F%E5%93%81" ] }, { id: "484", type: "fix", title: "温泉", deltime: "0", posttime: "1471406507", edittime: "1514972989", sttime: "1471319880", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/a82739d278730041812d99f0beb97a4b93c28434.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E6%B8%A9%E6%B3%89" ] }, { id: "483", type: "fix", title: "跳水", deltime: "0", posttime: "1471406479", edittime: "1514972989", sttime: "1471319880", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/b785d81d4a6aa170167ba5a0d3f74922d796fc9b.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E8%B7%B3%E6%B0%B4" ] }, { id: "482", type: "fix", title: "奥运会", deltime: "0", posttime: "1471406336", edittime: "1514972989", sttime: "1471319880", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/002ffe9ca353bbe264938d31d39cde8524931029.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%A5%A5%E8%BF%90%E4%BC%9A" ] }, { id: "481", type: "fix", title: "西瓜", deltime: "0", posttime: "1471254974", edittime: "1514972989", sttime: "1471168320", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/bc7d16c2d1bbed0ce1610496fee8657e041612bc.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E8%A5%BF%E7%93%9C" ] }, { id: "480", type: "fix", title: "豌豆", deltime: "0", posttime: "1471254937", edittime: "1514972989", sttime: "1471168320", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/727a4abaf6d8bea7d8b7a9f312ee6063463d0628.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E8%B1%8C%E8%B1%86" ] }, { id: "479", type: "fix", title: "数位板", deltime: "0", posttime: "1471254919", edittime: "1514972989", sttime: "1471168320", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/6a1a80783db77bca5effb3715c253f41fffc1eb3.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E6%95%B0%E4%BD%8D%E6%9D%BF" ] }, { id: "478", type: "fix", title: "乒乓", deltime: "0", posttime: "1471254896", edittime: "1514972989", sttime: "1471168320", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/10d779949755fdadad4e8b58776bc62815d759bb.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E4%B9%92%E4%B9%93" ] }, { id: "477", type: "fix", title: "冒泡", deltime: "0", posttime: "1471254872", edittime: "1514972989", sttime: "1471168320", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/4bda5b53b06c650cf031b57af51e6713599b22c5.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%86%92%E6%B3%A1" ] }, { id: "476", type: "fix", title: "胡萝卜", deltime: "0", posttime: "1471254847", edittime: "1514972989", sttime: "1471168320", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/1077b524d400cda27b32837e4c589bce685a7d4e.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E8%83%A1%E8%90%9D%E5%8D%9C" ] }, { id: "475", type: "fix", title: "眼神犀利", deltime: "0", posttime: "1470975304", edittime: "1514972989", sttime: "1470888360", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/57ca64365d096baa64ed417d7917c2ad2b27c8dd.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E7%9C%BC%E7%A5%9E%E7%8A%80%E5%88%A9" ] }, { id: "474", type: "fix", title: "智障", deltime: "0", posttime: "1470975275", edittime: "1514972989", sttime: "1470888360", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/4c0902c7f1fb90c0155d82a81610cb7ea5fe6b73.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E6%99%BA%E9%9A%9C" ] }, { id: "473", type: "fix", title: "扑街", deltime: "0", posttime: "1470975197", edittime: "1514972989", sttime: "1470888360", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/07ad60518b465174566fd74d9d08cc826a6c1675.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E6%89%91%E8%A1%97" ] }, { id: "472", type: "fix", title: "近视", deltime: "0", posttime: "1470975129", edittime: "1514972989", sttime: "1470888360", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/63e78addf099ed2df8ceb6dcae9cac701d1223e8.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E8%BF%91%E8%A7%86" ] }, { id: "471", type: "fix", title: "放空", deltime: "0", posttime: "1470975101", edittime: "1514972989", sttime: "1470888360", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/42e9bce4727a3b3eb827d6f08d0f6a0f0cc50741.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E6%94%BE%E7%A9%BA" ] }, { id: "470", type: "fix", title: "V+", deltime: "0", posttime: "1470975058", edittime: "1514972989", sttime: "1470888360", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/22e658a6055b8074232d521ede3f5543b3e22ca2.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=vocaloid" ] }, { id: "469", type: "fix", title: "洪荒之力", deltime: "0", posttime: "1470974992", edittime: "1514972989", sttime: "1470888360", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/4f3f6d65ad40bede3861911277ee53e0712132d6.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E6%B4%AA%E8%8D%92%E4%B9%8B%E5%8A%9B" ] }, { id: "468", type: "fix", title: "狗粮科科", deltime: "0", posttime: "1470811983", edittime: "1514972989", sttime: "1470725100", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/d1c7747da3e2bc73ee14a92f2ecbb651d9f428c6.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E7%8B%97%E7%B2%AE" ] }, { id: "467", type: "fix", title: "啊啾~", deltime: "0", posttime: "1470811051", edittime: "1514972989", sttime: "1470723960", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/601564e67d2bd5f542b4558a92fae98074b70d8e.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%96%B7%E5%9A%8F" ] }, { id: "466", type: "fix", title: "猫shi", deltime: "0", posttime: "1470811015", edittime: "1514972989", sttime: "1470723960", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/6c60b1dcedddcc59ee4960accebdde03db52e1a2.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E7%8C%AB%E5%B1%8E" ] }, { id: "465", type: "fix", title: "灵能百分百", deltime: "0", posttime: "1470810981", edittime: "1514972989", sttime: "1470723960", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/03195adabf64db2fe8ce65012aa16abd337503ba.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E7%81%B5%E8%83%BD%E7%99%BE%E5%88%86%E7%99%BE" ] }, { id: "464", type: "fix", title: "脱团狗", deltime: "0", posttime: "1470810913", edittime: "1514972989", sttime: "1470723960", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/852fb270e78b41a2e3543313e8a6ef01884efc9a.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E8%84%B1%E5%9B%A2%E7%8B%97" ] }, { id: "463", type: "fix", title: "约会(x", deltime: "0", posttime: "1470810634", edittime: "1514972989", sttime: "1470723960", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/6ee6c236a00d3ae6fc71105a89dff9bba7ad29c5.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E7%BA%A6%E4%BC%9A" ] }, { id: "462", type: "fix", title: "黄少天", deltime: "0", posttime: "1470810600", edittime: "1514972989", sttime: "1470723960", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/298526f9e3d876528ccd4dbe007ea90e15c00560.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E9%BB%84%E5%B0%91%E5%A4%A9" ] }, { id: "461", type: "fix", title: "二次螈", deltime: "0", posttime: "1470810570", edittime: "1514972989", sttime: "1470723960", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/06a43f02b5f0b213cf657483a89860ced6b77ffe.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E4%BA%8C%E6%AC%A1%E5%85%83" ] }, { id: "460", type: "fix", title: "单身汪", deltime: "0", posttime: "1470810517", edittime: "1514972989", sttime: "1470723960", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/c7039f23fe40c40fdf3d35856cbb77a320797465.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%8D%95%E8%BA%AB%E7%8B%97" ] }, { id: "459", type: "fix", title: "undertale", deltime: "0", posttime: "1470810488", edittime: "1514972989", sttime: "1470723960", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/e2ed7dcd20514146a21d69bcb6ba8cfbe7c72c18.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=undertale" ] }, { id: "458", type: "fix", title: "MMD", deltime: "0", posttime: "1470280075", edittime: "1514972989", sttime: "1470193020", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/fcfbcb2ece446f12f41d3bd02bfae7dd81716cb6.gif", weight: "0", links: [ "https://www.bilibili.com/video/douga-mmd-1.html" ] }, { id: "457", type: "fix", title: "我想静静", deltime: "0", posttime: "1470280036", edittime: "1514972989", sttime: "1470193020", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/fb3648a6cd2432188864d8b83882c22fc1928468.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E6%88%91%E6%83%B3%E9%9D%99%E9%9D%99" ] }, { id: "456", type: "fix", title: "闹钟(不", deltime: "0", posttime: "1470280010", edittime: "1514972989", sttime: "1470193020", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/095dcee824669638cc345397e5082c06b3700a1e.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E9%97%B9%E9%92%9F" ] }, { id: "455", type: "fix", title: "辣眼睛", deltime: "0", posttime: "1470279975", edittime: "1514972989", sttime: "1470193020", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/a45a62addb907b637653c33abccc8749db83d818.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E8%BE%A3%E7%9C%BC%E7%9D%9B" ] }, { id: "454", type: "fix", title: "极乐净土", deltime: "0", posttime: "1470279934", edittime: "1514972989", sttime: "1470193020", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/02ec6d14dd67ef2b9d1e9b471c93842c91d63f69.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E6%9E%81%E4%B9%90%E5%87%80%E5%9C%9F" ] }, { id: "453", type: "fix", title: "罪袋", deltime: "0", posttime: "1470279888", edittime: "1514972989", sttime: "1470193020", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/497ecdf8d6004bee3e5e3cacb20e573a24d54003.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E7%BD%AA%E8%A2%8B" ] }, { id: "452", type: "fix", title: "沙画", deltime: "0", posttime: "1470279780", edittime: "1514972989", sttime: "1470193020", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/2a7e707e79e12b10ab747f4afdf0331db14c73a6.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E6%B2%99%E7%94%BB" ] }, { id: "451", type: "fix", title: "扭扭扭腰", deltime: "0", posttime: "1470279754", edittime: "1514972989", sttime: "1470193020", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/8808c59621c12a1da8e2c8533ed96fa95fe833dd.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E6%89%AD%E8%85%B0" ] }, { id: "450", type: "fix", title: "刺客信条", deltime: "0", posttime: "1470036936", edittime: "1514972989", sttime: "1469949540", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/b3d9d5cacf411f4beca284b48d8cd7fecfacdbfd.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%88%BA%E5%AE%A2%E4%BF%A1%E6%9D%A1" ] }, { id: "449", type: "fix", title: "园艺大师", deltime: "0", posttime: "1470036831", edittime: "1514972989", sttime: "1469949540", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/ba8a467c6b035458021b34b23876d710154a0ab1.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%9B%AD%E8%89%BA" ] }, { id: "448", type: "fix", title: "鸟之诗", deltime: "0", posttime: "1470036711", edittime: "1514972989", sttime: "1469949540", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/55876ccf8459158adf8fdf82aceadaba4061cc40.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E9%B8%9F%E4%B9%8B%E8%AF%97" ] }, { id: "447", type: "fix", title: "羞羞", deltime: "0", posttime: "1470036609", edittime: "1514972989", sttime: "1469949540", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/6f08c653f9d3070d3551d6b8694202dbf7ed02e3.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%AE%B3%E7%BE%9E" ] }, { id: "446", type: "fix", title: "东方俯卧撑", deltime: "0", posttime: "1470036527", edittime: "1514972989", sttime: "1469949540", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/1b494e573c0b5b25b4e966a61fee5c15512c17bb.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E4%BF%AF%E5%8D%A7%E6%92%91" ] }, { id: "445", type: "fix", title: "小提琴", deltime: "0", posttime: "1469611494", edittime: "1514972989", sttime: "1469519100", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/ea9b245ba67d27593bc73bdbd4230f60521e2222.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%B0%8F%E6%8F%90%E7%90%B4" ] }, { id: "444", type: "fix", title: "萨克斯", deltime: "0", posttime: "1469611468", edittime: "1514972989", sttime: "1469519100", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/8dd6ea6c08d6f3b18b7cc394866685355beac090.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E8%90%A8%E5%85%8B%E6%96%AF" ] }, { id: "443", type: "fix", title: "酷暑", deltime: "0", posttime: "1469611439", edittime: "1514972989", sttime: "1469519100", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/d9e12dc752a42da832bba2b730b004c2380e37a1.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E9%85%B7%E6%9A%91" ] }, { id: "442", type: "fix", title: "羁绊", deltime: "0", posttime: "1469611415", edittime: "1514972989", sttime: "1469519100", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/5a57c6c0831f7c7e26e5fd500911f6b71480bfba.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E7%BE%81%E7%BB%8A" ] }, { id: "441", type: "fix", title: "挥手", deltime: "0", posttime: "1469611375", edittime: "1514972989", sttime: "1469519100", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/08238267a9b88adf85fa860fc78981c9a94b0e58.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E6%8C%A5%E6%89%8B" ] }, { id: "440", type: "fix", title: "读书", deltime: "0", posttime: "1469607053", edittime: "1514972989", sttime: "1469519100", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/1f257a22ecff21b9a215d80ad3360a1c328c3e90.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E8%AF%BB%E4%B9%A6" ] }, { id: "439", type: "fix", title: "打针", deltime: "0", posttime: "1469607009", edittime: "1514972989", sttime: "1469519100", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/e5d4ec30d15b0950658833f5ea14c3b93edb38b3.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E6%89%93%E9%92%88" ] }, { id: "438", type: "fix", title: "插画师", deltime: "0", posttime: "1469606880", edittime: "1514972989", sttime: "1469519100", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/8ec4105a29565696823a556ea42cc94ce90f9a07.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E6%8F%92%E7%94%BB%E5%B8%88" ] }, { id: "437", type: "fix", title: "舞蹈", deltime: "0", posttime: "1469606649", edittime: "1514972989", sttime: "1469519100", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/2821554ce9fde44f787bbae127e5079742933935.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E8%88%9E%E8%B9%88" ] }, { id: "436", type: "fix", title: "拼图", deltime: "0", posttime: "1469606410", edittime: "1514972989", sttime: "1469519100", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/baa81fa699af6340201be843f81d93239363bcc8.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E6%8B%BC%E5%9B%BE" ] }, { id: "435", type: "fix", title: "凝视", deltime: "0", posttime: "1469606376", edittime: "1514972989", sttime: "1469519100", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/4e0807349c9f67e8e6de755c48189ff3dba6b715.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%87%9D%E8%A7%86" ] }, { id: "434", type: "fix", title: "魔法少女小圆", deltime: "0", posttime: "1469606333", edittime: "1514972989", sttime: "1469519100", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/8cf9c4967327a32f1c90f93b7f85f478a9e97b3a.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E9%AD%94%E6%B3%95%E5%B0%91%E5%A5%B3%E5%B0%8F%E5%9C%86" ] }, { id: "433", type: "fix", title: "灵魂画手", deltime: "0", posttime: "1469606284", edittime: "1514972989", sttime: "1469519100", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/51d68c4b744744fee9f567876f1518b0c538f472.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E7%81%B5%E9%AD%82%E7%94%BB%E6%89%8B" ] }, { id: "432", type: "fix", title: "扭腰", deltime: "0", posttime: "1469606240", edittime: "1514972989", sttime: "1469519100", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/de10e8a4fc08b0183182396b9afc830a149e2389.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E6%89%AD%E8%85%B0" ] }, { id: "431", type: "fix", title: "冷汗", deltime: "0", posttime: "1469180684", edittime: "1514972989", sttime: "1469093280", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/1acfb9cb4190eba7e4fd48c7426f698a87428a05.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%86%B7%E6%B1%97" ] }, { id: "430", type: "fix", title: "画画", deltime: "0", posttime: "1469180637", edittime: "1514972989", sttime: "1469093280", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/59b1223db28da7b0c040895cf6960c62f8143dcb.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E7%94%BB%E7%94%BB" ] }, { id: "429", type: "fix", title: "抖腿", deltime: "0", posttime: "1469180435", edittime: "1514972989", sttime: "1469093280", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/2c2328bce8071688dd3fba5b0e44a83f5f8917dc.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E6%8A%96%E8%85%BF" ] }, { id: "428", type: "fix", title: "电波", deltime: "0", posttime: "1469180150", edittime: "1514972989", sttime: "1469093280", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/b8abee0e27e8c63cfe836738017a6a0ba47318e0.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E7%94%B5%E6%B3%A2" ] }, { id: "427", type: "fix", title: "催泪向", deltime: "0", posttime: "1469179784", edittime: "1514972989", sttime: "1469093280", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/74952c377ad1a128b8f1c6da171366e826207848.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%82%AC%E6%B3%AA%E5%90%91" ] }, { id: "426", type: "fix", title: "葛优躺", deltime: "0", posttime: "1469083937", edittime: "1514972989", sttime: "1468997280", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/fb0561550e2ea970612dd2c6c83371a8f63c4fb9.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E8%91%9B%E4%BC%98%E8%BA%BA" ] }, { id: "425", type: "fix", title: "good job", deltime: "0", posttime: "1469083898", edittime: "1514972989", sttime: "1468997280", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/42e983a34462a7695b14c7dc55ba9692fdd44090.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=good%20job" ] }, { id: "424", type: "fix", title: "视力检查", deltime: "0", posttime: "1468914069", edittime: "1514972989", sttime: "1468826880", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/cee0a7f7303bfdec6f21c437a86aa5feca4dda3e.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E8%A7%86%E5%8A%9B%E6%A3%80%E6%9F%A5" ] }, { id: "423", type: "fix", title: "命运石之门", deltime: "0", posttime: "1468914018", edittime: "1514972989", sttime: "1468826880", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/505e97fbeb4eb313b230c83bcfd1e0af4741bb02.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%91%BD%E8%BF%90%E7%9F%B3%E4%B9%8B%E9%97%A8" ] }, { id: "422", type: "fix", title: "技术宅", deltime: "0", posttime: "1468913943", edittime: "1514972989", sttime: "1468826880", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/cb2fdb92341f682e5ec3f84526ae8bbd051742dc.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E6%8A%80%E6%9C%AF%E5%AE%85" ] }, { id: "421", type: "fix", title: "孤岛", deltime: "0", posttime: "1468913778", edittime: "1514972989", sttime: "1468826880", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/b4e078f2639bc031f91835401087fa7a84d0e56a.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%AD%A4%E5%B2%9B" ] }, { id: "420", type: "fix", title: "冻鳗", deltime: "0", posttime: "1468913739", edittime: "1514972989", sttime: "1468826880", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/59a5162b9a48728174b3b66d940237f172ad6f98.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%8A%A8%E6%BC%AB" ] }, { id: "419", type: "fix", title: "测评", deltime: "0", posttime: "1468913621", edittime: "1514972989", sttime: "1468826880", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/d6cf0bb539727a8d525385f48441a564451f7539.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E6%B5%8B%E8%AF%84" ] }, { id: "418", type: "fix", title: "新房昭之", deltime: "0", posttime: "1468810405", edittime: "1514972989", sttime: "1468722360", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/4209e73c2a5b55c4391f8ac687ccf0e50ba8e4b6.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E6%96%B0%E6%88%BF%E6%98%AD%E4%B9%8B" ] }, { id: "417", type: "fix", title: "圣地巡礼", deltime: "0", posttime: "1468810376", edittime: "1514972989", sttime: "1468722360", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/23f9f44dc7296519da3f26b49f1f733f9cb5d838.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%9C%A3%E5%9C%B0%E5%B7%A1%E7%A4%BC" ] }, { id: "416", type: "fix", title: "听歌向", deltime: "0", posttime: "1468810333", edittime: "1514972989", sttime: "1468722360", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/55ec3bdb3f88e619f1428fe940b554beb59bb7c2.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%90%AC%E6%AD%8C%E5%90%91" ] }, { id: "415", type: "fix", title: "入坑", deltime: "0", posttime: "1468810281", edittime: "1514972989", sttime: "1468722360", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/22309f6212cfce7d52d61c8b67126964c2a5f1b2.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%85%A5%E5%9D%91" ] }, { id: "414", type: "fix", title: "毕业设计", deltime: "0", posttime: "1468809952", edittime: "1514972989", sttime: "1468722360", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/16719dac59b715654e25bbc87b54c94dff4989c6.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E6%AF%95%E4%B8%9A%E8%AE%BE%E8%AE%A1" ] }, { id: "413", type: "fix", title: "摆渡人", deltime: "0", posttime: "1468809648", edittime: "1514972989", sttime: "1468722360", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/edfade7f15316b05faeeb00707ebf4b1f2eb3f95.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E6%91%86%E6%B8%A1%E4%BA%BA" ] }, { id: "412", type: "fix", title: "pokemon go", deltime: "0", posttime: "1468809527", edittime: "1514972989", sttime: "1468722360", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/0a4ce86d279e6904e9743440c50427f228bf9933.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=pokemon%20go" ] }, { id: "411", type: "fix", title: "足球", deltime: "0", posttime: "1468809467", edittime: "1514972989", sttime: "1468722360", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/52ba7205d4c6657a2aabb9f90759393ebda1f88c.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E8%B6%B3%E7%90%83" ] }, { id: "410", type: "fix", title: "无聊", deltime: "0", posttime: "1468809425", edittime: "1514972989", sttime: "1468722360", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/00c007b756623b0392a2218a9e9ff7be6ece1ec8.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E6%97%A0%E8%81%8A" ] }, { id: "409", type: "fix", title: "架子鼓", deltime: "0", posttime: "1468809323", edittime: "1514972989", sttime: "1468722360", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/a2f013fe24dfd22d58f995f7e2b3970f345b6054.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E6%9E%B6%E5%AD%90%E9%BC%93" ] }, { id: "408", type: "fix", title: "和尚", deltime: "0", posttime: "1468809220", edittime: "1514972989", sttime: "1468722360", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/bcf23bb6e1fed57e69dce4cca5212cf1a32cbf0c.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%92%8C%E5%B0%9A" ] }, { id: "407", type: "fix", title: "东离剑游记", deltime: "0", posttime: "1468809179", edittime: "1514972989", sttime: "1468722360", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/269a6e55a0b64ba326e0b10b9f0a7ed3b080a947.gif", weight: "0", links: [ "https://bangumi.bilibili.com/anime/5064/" ] }, { id: "406", type: "fix", title: "ok", deltime: "0", posttime: "1468809127", edittime: "1514972989", sttime: "1468722360", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/87e677d7b81d6b4e342c64eb80bb644f477ba947.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=ok" ] }, { id: "405", type: "fix", title: "齐木楠雄的灾难", deltime: "0", posttime: "1468808924", edittime: "1514972989", sttime: "1468722360", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/e3ea2ef84b9bf180186ea9dc5e09c7cbe0a5b0d4.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E9%BD%90%E6%9C%A8%E6%A5%A0%E9%9B%84%E7%9A%84%E7%81%BE%E9%9A%BE" ] }, { id: "404", type: "fix", title: "屁股", deltime: "0", posttime: "1468572916", edittime: "1514972989", sttime: "1468483620", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/7389ccc05054f79c16b7bcf893a93ad305e4aee2.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%B1%81%E8%82%A1" ] }, { id: "403", type: "fix", title: "津岛善子", deltime: "0", posttime: "1468572861", edittime: "1514972989", sttime: "1468483620", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/811eba9d63b8e7f238e64092fc8e861ce5a49d4c.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E6%B4%A5%E5%B2%9B%E5%96%84%E5%AD%90" ] }, { id: "402", type: "fix", title: "積乱雲グラフィティ", deltime: "0", posttime: "1468572822", edittime: "1514972989", sttime: "1468483620", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/80d6b8bfb1d2ca4fca2afb48526e82c7ed7bc5d6.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E7%A9%8D%E4%B9%B1%E9%9B%B2%E3%82%B0%E3%83%A9%E3%83%95%E3%82%A3%E3%83%86%E3%82%A3" ] }, { id: "401", type: "fix", title: "黑暗料理", deltime: "0", posttime: "1468572753", edittime: "1514972989", sttime: "1468483620", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/56febae51aada7a868bd6a86c773bd743a314a3c.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E9%BB%91%E6%9A%97%E6%96%99%E7%90%86" ] }, { id: "400", type: "fix", title: "天真与闪电", deltime: "0", posttime: "1468572693", edittime: "1514972989", sttime: "1468483620", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/5fed4e089bdcbf8146def83f3c97ea407d60b1fb.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%A4%A9%E7%9C%9F%E4%B8%8E%E9%97%AA%E7%94%B5" ] }, { id: "399", type: "fix", title: "赏花", deltime: "0", posttime: "1468572646", edittime: "1514972989", sttime: "1468483620", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/b37a5f11a9333097d98381d14e3015d14d17a865.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E8%B5%8F%E8%8A%B1" ] }, { id: "398", type: "fix", title: "包子", deltime: "0", posttime: "1468572563", edittime: "1514972989", sttime: "1468483620", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/9233ce9100871a83d96ea1dd99439af7eb7eae1c.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%8C%85%E5%AD%90" ] }, { id: "397", type: "fix", title: "手风琴", deltime: "0", posttime: "1468572526", edittime: "1514972989", sttime: "1468483620", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/099249da8e4d6ad82ca933f540e7964b55dd0774.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E6%89%8B%E9%A3%8E%E7%90%B4" ] }, { id: "396", type: "fix", title: "上车", deltime: "0", posttime: "1468572405", edittime: "1514972989", sttime: "1468483620", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/53ddb2069d24bbe6d8440a2344b27eb0be7a311e.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E4%B8%8A%E8%BD%A6" ] }, { id: "395", type: "fix", title: "口琴", deltime: "0", posttime: "1468572278", edittime: "1514972989", sttime: "1468483620", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/baf2b4e794f28d43b59a3cf98dafe05e3762bc3d.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%8F%A3%E7%90%B4" ] }, { id: "394", type: "fix", title: "我们仍未知道那天所看见的花的名字", deltime: "0", posttime: "1468572075", edittime: "1514972989", sttime: "1468483620", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/107e1c9077ded7be66aa8dc5710b38e30504c030.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E6%88%91%E4%BB%AC%E4%BB%8D%E6%9C%AA%E7%9F%A5%E9%81%93%E9%82%A3%E5%A4%A9%E6%89%80%E7%9C%8B%E8%A7%81%E7%9A%84%E8%8A%B1%E7%9A%84%E5%90%8D%E5%AD%97" ] }, { id: "393", type: "fix", title: "饱腹", deltime: "0", posttime: "1468572040", edittime: "1514972989", sttime: "1468483620", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/5ba039c41f5a6a4eb3e6c3c4745e751689c07899.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%90%83%E9%A5%B1%E4%BA%86" ] }, { id: "392", type: "fix", title: "攻壳机动队", deltime: "0", posttime: "1468571949", edittime: "1514972989", sttime: "1468483620", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/72770979cfade1e7cbfb70c5acec544dd9d45d90.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E6%94%BB%E5%A3%B3%E6%9C%BA%E5%8A%A8%E9%98%9F" ] }, { id: "391", type: "fix", title: "粘着系男子15年", deltime: "0", posttime: "1467692787", edittime: "1514972989", sttime: "1467603780", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/88d8af2151a1ffb8a83030bf643c242b1c821d5c.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E7%B2%98%E7%9D%80%E7%B3%BB%E7%94%B7%E5%AD%90%2015%E5%B9%B4" ] }, { id: "390", type: "fix", title: "银河英雄传说", deltime: "0", posttime: "1467692079", edittime: "1514972989", sttime: "1467603780", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/c3d65e136821157c3a603aa7a9f448f55c3e60d8.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E9%93%B6%E6%B2%B3%E8%8B%B1%E9%9B%84%E4%BC%A0%E8%AF%B4" ] }, { id: "389", type: "fix", title: "下雨", deltime: "0", posttime: "1467691240", edittime: "1514972989", sttime: "1467603780", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/a9abed328d9f3c6f6767de1b795a2c3c4610d404.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E4%B8%8B%E9%9B%A8" ] }, { id: "388", type: "fix", title: "石化", deltime: "0", posttime: "1467690309", edittime: "1514972989", sttime: "1467603780", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/fc4c234cb28618b777281ed28520efaa3c3f7b40.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E7%9F%B3%E5%8C%96" ] }, { id: "387", type: "fix", title: "懵逼", deltime: "0", posttime: "1467625869", edittime: "1514972989", sttime: "1467535020", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/484c6be77679b81f42f56c649dc9b811105d9976.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E6%87%B5%E9%80%BC" ] }, { id: "386", type: "fix", title: "量产机", deltime: "0", posttime: "1467625462", edittime: "1514972989", sttime: "1467535020", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/3485a50682eb3d730380522254cf5ddb1c83be06.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E9%87%8F%E4%BA%A7%E6%9C%BA" ] }, { id: "385", type: "fix", title: "钢琴", deltime: "0", posttime: "1467625430", edittime: "1514972989", sttime: "1467535020", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/1b9fc9843a6afe7efeceec778be07fd76bb7b51b.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E9%92%A2%E7%90%B4" ] }, { id: "384", type: "fix", title: "串烧", deltime: "0", posttime: "1467625396", edittime: "1514972989", sttime: "1467535020", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/14f958c0ee61df20824f84c072aa1eaef28319d5.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E4%B8%B2%E7%83%A7" ] }, { id: "383", type: "fix", title: "博丽神社", deltime: "0", posttime: "1467624989", edittime: "1514972989", sttime: "1467535020", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/1f7b6ffa03346eb1f340a28b2c00f259fe75d835.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%8D%9A%E4%B8%BD%E7%A5%9E%E7%A4%BE" ] }, { id: "382", type: "fix", title: "章鱼", deltime: "0", posttime: "1467623385", edittime: "1514972989", sttime: "1467535020", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/22e33788746f48ce298eaf7443aba64361ce3992.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E7%AB%A0%E9%B1%BC" ] }, { id: "381", type: "fix", title: "秀恩爱", deltime: "0", posttime: "1467623353", edittime: "1514972989", sttime: "1467535020", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/1f8aa6cd328fee1eaf61d1f59e40e97addc1aae8.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E7%A7%80%E6%81%A9%E7%88%B1" ] }, { id: "380", type: "fix", title: "喵星人", deltime: "0", posttime: "1467623279", edittime: "1514972989", sttime: "1467535020", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/466bcac249baae2df36fba18d7ddd91f26417c0e.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%96%B5%E6%98%9F%E4%BA%BA" ] }, { id: "379", type: "fix", title: "翻滚", deltime: "0", posttime: "1467623195", edittime: "1514972989", sttime: "1467535020", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/f0d94316c65a3edf0834182f0d8d9b8d39b56d28.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E7%BF%BB%E6%BB%9A" ] }, { id: "378", type: "fix", title: "侏罗纪公园", deltime: "0", posttime: "1467623143", edittime: "1514972989", sttime: "1467535020", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/915c3a91fc4a48a5b8f299e8498ddc4a16c8e6de.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E4%BE%8F%E7%BD%97%E7%BA%AA%E5%85%AC%E5%9B%AD" ] }, { id: "377", type: "fix", title: "宅舞", deltime: "0", posttime: "1467623080", edittime: "1514972989", sttime: "1467535020", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/80bd4fceff66fa41f27547869c5826cf34a5fb8d.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%AE%85%E8%88%9E" ] }, { id: "376", type: "fix", title: "独立日", deltime: "0", posttime: "1467623042", edittime: "1514972989", sttime: "1467535020", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/fa6beb54d0923320077aa1272cf7e6b06577d510.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E7%8B%AC%E7%AB%8B%E6%97%A5" ] }, { id: "375", type: "fix", title: "米菲", deltime: "0", posttime: "1467622996", edittime: "1514972989", sttime: "1467535020", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/43b112f6e863e32589aeecb26a8ec86de55ea811.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E7%B1%B3%E8%8F%B2" ] }, { id: "374", type: "fix", title: "狐狸", deltime: "0", posttime: "1467622921", edittime: "1514972989", sttime: "1467535020", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/58e5abb63c05c615d1da48a2cc80e45593a04728.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E7%8B%90%E7%8B%B8" ] }, { id: "373", type: "fix", title: "nqrse", deltime: "0", posttime: "1467622889", edittime: "1514972989", sttime: "1467535020", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/b9c75114669bbc1aa63d5f4176f8f7aeda97b081.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=nqrse" ] }, { id: "372", type: "fix", title: "高产似母猪", deltime: "0", posttime: "1467622799", edittime: "1514972989", sttime: "1467535020", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/302b8cfa7bcba4f9d4da9b85336b4667a2767bb0.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E9%AB%98%E4%BA%A7%E4%BC%BC%E6%AF%8D%E7%8C%AA" ] }, { id: "371", type: "fix", title: "装死", deltime: "0", posttime: "1467622755", edittime: "1514972989", sttime: "1467535020", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/fb6400db3879f4a40d494c1e71819c563c564159.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E8%A3%85%E6%AD%BB" ] }, { id: "370", type: "fix", title: "台风", deltime: "0", posttime: "1467622719", edittime: "1514972989", sttime: "1467535020", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/225450593d96c544f154a86bac5126e42c182e96.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%8F%B0%E9%A3%8E" ] }, { id: "369", type: "fix", title: "跷跷板", deltime: "0", posttime: "1467622652", edittime: "1514972989", sttime: "1467535020", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/d518dd28c7e63a9e79c58cb7a8b12eb649e387bc.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E8%B7%B7%E8%B7%B7%E6%9D%BF" ] }, { id: "368", type: "fix", title: "鬼畜眼镜", deltime: "0", posttime: "1467622613", edittime: "1514972989", sttime: "1467535020", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/3e80bd4287998c4b814b5c1304d2d0f6decb6dd4.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E9%AC%BC%E7%95%9C%20%E7%9C%BC" ] }, { id: "367", type: "fix", title: "地球online", deltime: "0", posttime: "1467622536", edittime: "1514972989", sttime: "1467535020", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/88aa141f13b97d30d005f3c578d58025f70a5011.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%9C%B0%E7%90%83online" ] }, { id: "366", type: "fix", title: "报警", deltime: "0", posttime: "1467622492", edittime: "1514972989", sttime: "1467535020", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/02690716795fb1ff65f913ee8158c8b3a4bcdac5.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E6%8A%A5%E8%AD%A6" ] }, { id: "365", type: "fix", title: "围观", deltime: "0", posttime: "1467622334", edittime: "1514972989", sttime: "1467535020", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/b5ef65cff936e57738108a0b4c73222527d9b8ea.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%9B%B4%E8%A7%82" ] }, { id: "364", type: "fix", title: "日语", deltime: "0", posttime: "1467621902", edittime: "1514972989", sttime: "1467535020", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/f3e6a7934adeb9dc382b5ab48ef23cb871747e35.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E6%97%A5%E8%AF%AD" ] }, { id: "363", type: "fix", title: "任豚", deltime: "0", posttime: "1467621861", edittime: "1514972989", sttime: "1467535020", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/92b4dca6298d196f6da76dfe9f36a977f02160df.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E4%BB%BB%E8%B1%9A" ] }, { id: "362", type: "fix", title: "饭团", deltime: "0", posttime: "1467621805", edittime: "1514972989", sttime: "1467535020", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/0e5f19d622a48b3510e8dd8532e5f9a35aacaa79.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E9%A5%AD%E5%9B%A2" ] }, { id: "361", type: "fix", title: "心跳", deltime: "0", posttime: "1467621704", edittime: "1514972989", sttime: "1467535020", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/bf935d4f64f149ea3cf3d082f7b05526b5cd81a0.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%BF%83%E8%B7%B3" ] }, { id: "360", type: "fix", title: "受不了", deltime: "0", posttime: "1467360158", edittime: "1514972989", sttime: "1467273480", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/19defc47f7ac93fb885a4038d208bed1ea23cc4b.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%8F%97%E4%B8%8D%E4%BA%86" ] }, { id: "359", type: "fix", title: "手办", deltime: "0", posttime: "1467360088", edittime: "1514972989", sttime: "1467273480", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/d520a5ffa3ad994bca4bd1a523583fefbe6d61f0.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E6%89%8B%E5%8A%9E" ] }, { id: "358", type: "fix", title: "日蚀", deltime: "0", posttime: "1467360050", edittime: "1514972989", sttime: "1467273480", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/5f7d0081b3a2a01d52f2b3a96c824d11f8051352.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E6%97%A5%E8%9A%80" ] }, { id: "357", type: "fix", title: "挠痒痒", deltime: "0", posttime: "1467359963", edittime: "1514972989", sttime: "1467266580", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/c337d9780767b894af922ebf4e1b43a838b43388.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E6%8C%A0%E7%97%92%E7%97%92" ] }, { id: "356", type: "fix", title: "狂魔随便玩玩具", deltime: "0", posttime: "1467353752", edittime: "1514972989", sttime: "1467266580", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/56eef81107c4461e614f9a9971d8b7d97674304c.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E7%8B%82%E9%AD%94%E9%9A%8F%E4%BE%BF%E7%8E%A9%E7%8E%A9%E5%85%B7" ] }, { id: "355", type: "fix", title: "震惊", deltime: "0", posttime: "1467353710", edittime: "1514972989", sttime: "1467266580", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/8a93e0148bee4d4439a60e5e94c96cc3de0134e3.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E9%9C%87%E6%83%8A" ] }, { id: "354", type: "fix", title: "沉默", deltime: "0", posttime: "1467353667", edittime: "1514972989", sttime: "1467266580", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/79eb33869af08d24748a764b01cd3fb792dd445a.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E6%B2%89%E9%BB%98" ] }, { id: "353", type: "fix", title: "刘海", deltime: "0", posttime: "1467353606", edittime: "1514972989", sttime: "1467266580", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/79994f3fde343799dc92e649b8e34d0e72ddba47.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%88%98%E6%B5%B7" ] }, { id: "352", type: "fix", title: "蕾姆", deltime: "0", posttime: "1467353552", edittime: "1514972989", sttime: "1467266580", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/cf8690a44b1c1ea7123280226a86eac3b025a63b.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E8%95%BE%E5%A7%86" ] }, { id: "351", type: "fix", title: "护肤", deltime: "0", posttime: "1467352157", edittime: "1514972989", sttime: "1467265200", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/6abca815cef52069ea99d7506a9cf3e61f4b9337.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E6%8A%A4%E8%82%A4" ] }, { id: "350", type: "fix", title: "蹦迪", deltime: "0", posttime: "1467352091", edittime: "1514972989", sttime: "1467265200", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/84f323e3a77a6eafee656f832847603751f3857d.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E8%B9%A6%E8%BF%AA" ] }, { id: "349", type: "fix", title: "猫耳", deltime: "0", posttime: "1467025940", edittime: "1514972989", sttime: "1466937960", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/b4a3326de814168501bb4b2afefdac1aa9c45bba.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E7%8C%AB%E8%80%B3" ] }, { id: "348", type: "fix", title: "魔性", deltime: "0", posttime: "1467025903", edittime: "1514972989", sttime: "1466937960", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/2f23c0bc2f7cbdd9ec60dfcde5279625af815057.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E9%AD%94%E6%80%A7" ] }, { id: "347", type: "fix", title: "导弹", deltime: "0", posttime: "1467024450", edittime: "1514972989", sttime: "1466937420", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/b27081d495783b3f3012bae045eed5b9ff1f0e3f.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%AF%BC%E5%BC%B9" ] }, { id: "346", type: "fix", title: "吃饭团", deltime: "0", posttime: "1467024074", edittime: "1514972989", sttime: "1466937420", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/d9cc1a4e653d2870cc024d9174b2cea730164eb4.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%90%83%E9%A5%AD%E5%9B%A2" ] }, { id: "345", type: "fix", title: "深井冰", deltime: "0", posttime: "1466576350", edittime: "1514972989", sttime: "1466489700", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/274dc4ba9cd77e5ed40f84238d172dd0615b4fa5.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E6%B7%B1%E4%BA%95" ] }, { id: "344", type: "fix", title: "哥斯拉", deltime: "0", posttime: "1466576183", edittime: "1514972989", sttime: "1466489700", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/f8c1efb3ea375ace31fea587fe3923a3a5bda519.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%93%A5%E6%96%AF%E6%8B%89" ] }, { id: "343", type: "fix", title: "钢尺", deltime: "0", posttime: "1466576118", edittime: "1514972989", sttime: "1466489100", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/da230a0c77bb733c0eca05128fbcc9fbbd31da5e.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E9%92%A2%E5%B0%BA" ] }, { id: "342", type: "fix", title: "安卓", deltime: "0", posttime: "1466576071", edittime: "1514972989", sttime: "1466489100", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/d4b85822c353180cacc48fa74c66f0e45a6de64b.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%AE%89%E5%8D%93" ] }, { id: "341", type: "fix", title: "寂静岭", deltime: "0", posttime: "1466575784", edittime: "1514972989", sttime: "1466489100", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/e3cc37fb4c3af904707c475f85ccbb71dadcd63d.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%AF%82%E9%9D%99%E5%B2%AD" ] }, { id: "340", type: "fix", title: "为美好的世界献上祝福", deltime: "0", posttime: "1466575756", edittime: "1514972989", sttime: "1466489100", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/c9100d99d79513b5e53cb4f662d9faba35cfa35e.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E4%B8%BA%E7%BE%8E%E5%A5%BD%E7%9A%84%E4%B8%96%E7%95%8C%E7%8C%AE%E4%B8%8A%E7%A5%9D%E7%A6%8F" ] }, { id: "339", type: "fix", title: "感冒", deltime: "0", posttime: "1466575725", edittime: "1514972989", sttime: "1466489100", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/d982254ba12cced5ccc2748be4f88b180de57ed4.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E6%84%9F%E5%86%92" ] }, { id: "338", type: "fix", title: "+TIC模型姐妹", deltime: "0", posttime: "1466575676", edittime: "1514972989", sttime: "1466489100", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/834af809ee5320f163b8749d0b1aa8a20d9f8c77.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%2BTIC%E6%A8%A1%E5%9E%8B%E5%A7%90%E5%A6%B9" ] }, { id: "337", type: "fix", title: "水手服", deltime: "0", posttime: "1466061735", edittime: "1514972989", sttime: "1465974600", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/9ce05f48371b6dc96407e28be37e32708f60d459.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E6%B0%B4%E6%89%8B%E6%9C%8D" ] }, { id: "336", type: "fix", title: "冷漠", deltime: "0", posttime: "1466061700", edittime: "1514972989", sttime: "1465974600", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/71de35c6564f25d58938168f3bb4ab7826ba0132.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%86%B7%E6%BC%A0" ] }, { id: "335", type: "fix", title: "白鲸", deltime: "0", posttime: "1466061671", edittime: "1514972989", sttime: "1465974600", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/af13be6ad0de33d529bf103a33cd8877c73355ab.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E7%99%BD%E9%B2%B8" ] }, { id: "334", type: "fix", title: "山羊", deltime: "0", posttime: "1466061610", edittime: "1514972989", sttime: "1465974600", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/bf2c253c8bd197bd89d5db437a45d0a5c3af68fd.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%B1%B1%E7%BE%8A" ] }, { id: "333", type: "fix", title: "颜文字", deltime: "0", posttime: "1466061587", edittime: "1514972989", sttime: "1465974600", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/991d3db75385f8776dc99f1d8895f2f27c8be73d.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E9%A2%9C%E6%96%87%E5%AD%97" ] }, { id: "332", type: "fix", title: "熊孩子", deltime: "0", posttime: "1466061214", edittime: "1514972989", sttime: "1465974600", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/9291a76a24ad1d3d08f13bdd5907f32849998086.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E7%86%8A%E5%AD%A9%E5%AD%90" ] }, { id: "331", type: "fix", title: "喷子", deltime: "0", posttime: "1466061177", edittime: "1514972989", sttime: "1465974600", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/7a2fbe229152dc83c16462315859a01bfd4aaa6f.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%96%B7%E5%AD%90" ] }, { id: "330", type: "fix", title: "偶像大师", deltime: "0", posttime: "1466061132", edittime: "1514972989", sttime: "1465974600", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/bf773b95a978ff73b5db868289b7616315164610.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%81%B6%E5%83%8F%E5%A4%A7%E5%B8%88" ] }, { id: "329", type: "fix", title: "逗猫", deltime: "0", posttime: "1466061053", edittime: "1514972989", sttime: "1465974000", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/aaa355983dfbfb1d364f714a4b69fc183e63a4b9.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E9%80%97%E7%8C%AB" ] }, { id: "328", type: "fix", title: "大触", deltime: "0", posttime: "1466060998", edittime: "1514972989", sttime: "1465974000", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/9a10590b6150035a483ff19eafe05c6c52527090.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%A4%A7%E8%A7%A6" ] }, { id: "327", type: "fix", title: "转笔", deltime: "0", posttime: "1465872936", edittime: "1514972989", sttime: "1465784820", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/1db11d383faffdb0cf7433b191d7f839501f52fd.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E8%BD%AC%E7%AC%94" ] }, { id: "326", type: "fix", title: "魔都", deltime: "0", posttime: "1465872784", edittime: "1514972989", sttime: "1465784820", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/a250fb1f97c3eea90d320dd5c317981af32234e5.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E9%AD%94%E9%83%BD" ] }, { id: "325", type: "fix", title: "健身", deltime: "0", posttime: "1465872708", edittime: "1514972989", sttime: "1465784820", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/f193e2f150d934bb04eee24c82fc15c4edadf962.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%81%A5%E8%BA%AB" ] }, { id: "324", type: "fix", title: "加特林机枪", deltime: "0", posttime: "1465872621", edittime: "1514972989", sttime: "1465784820", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/2206307dfec95850ed1028b9f745d930fc405d2e.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%8A%A0%E7%89%B9%E6%9E%97%E6%9C%BA%E6%9E%AA" ] }, { id: "323", type: "fix", title: "钓鱼", deltime: "0", posttime: "1465872536", edittime: "1514972989", sttime: "1465784820", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/f5e72650c6fdb3cea149182f0cd684c695142f40.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E9%92%93%E9%B1%BC" ] }, { id: "322", type: "fix", title: "百合星人奈绪子", deltime: "0", posttime: "1465872472", edittime: "1514972989", sttime: "1465784820", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/654fd04a465517b7b7e807e826d3a703dc406e67.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E7%99%BE%E5%90%88%E6%98%9F%E4%BA%BA%E5%A5%88%E7%BB%AA%E5%AD%90" ] }, { id: "321", type: "fix", title: "魔兽", deltime: "0", posttime: "1465871571", edittime: "1514972989", sttime: "1465784820", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/activity-plat/cover/20171225/12lrwvyml3.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E9%AD%94%E5%85%BD" ] }, { id: "320", type: "fix", title: "大胃王", deltime: "0", posttime: "1465871530", edittime: "1514972989", sttime: "1465784820", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/e996fa618d5866c3113b2cff7ee2dbb5c36ef676.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%A4%A7%E8%83%83%E7%8E%8B" ] }, { id: "319", type: "fix", title: "闪灵", deltime: "0", posttime: "1465871476", edittime: "1514972989", sttime: "1465784820", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/c3d5bbfa106d3638fe665ef0e6de7f8b7e7ed639.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E9%97%AA%E7%81%B5" ] }, { id: "318", type: "fix", title: "音乐", deltime: "0", posttime: "1465354482", edittime: "1514972989", sttime: "1465265760", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/af086c9c319e0a3854a58481955a85b5ee2349e0.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E6%AD%8C%E5%8D%95" ] }, { id: "317", type: "fix", title: "魔道祖师", deltime: "0", posttime: "1465353809", edittime: "1514972989", sttime: "1465265760", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/d7ba9c4bd660ec09ac68e78d5ac47c1d10257d7b.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E9%AD%94%E9%81%93%E7%A5%96%E5%B8%88" ] }, { id: "316", type: "fix", title: "屏裂", deltime: "0", posttime: "1465353579", edittime: "1514972989", sttime: "1465265760", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/c94d160e8b148beb23390c84315a43dae76aaca7.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E7%A2%8E%E5%B1%8F" ] }, { id: "315", type: "fix", title: "篮球", deltime: "0", posttime: "1465353466", edittime: "1514972989", sttime: "1465265760", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/c286192f9442d3d839e10a8f5b3553665a3a92ff.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E7%AF%AE%E7%90%83" ] }, { id: "314", type: "fix", title: "恐怖小游戏", deltime: "0", posttime: "1465352576", edittime: "1514972989", sttime: "1465265760", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/7f93d986bd48546a0e8ff003e0ab38da5cb4c076.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E6%81%90%E6%80%96%E5%B0%8F%E6%B8%B8%E6%88%8F" ] }, { id: "313", type: "fix", title: "周婕纶", deltime: "0", posttime: "1465297354", edittime: "1514972989", sttime: "1465208820", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/2d1dff9727be8024cf3dc54cf80a5df361898eef.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%91%A8%E5%A9%95%E7%BA%B6" ] }, { id: "312", type: "fix", title: "咸鱼", deltime: "0", posttime: "1465297316", edittime: "1514972989", sttime: "1465208820", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/cdad9db97f2a11254e863e414b0688d2e43e3a81.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%92%B8%E9%B1%BC" ] }, { id: "311", type: "fix", title: "心碎", deltime: "0", posttime: "1465297031", edittime: "1514972989", sttime: "1465208820", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/767e6adc432a73304aa99e3b88f62eaed2a057c7.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%BF%83%E7%A2%8E%E5%90%91" ] }, { id: "310", type: "fix", title: "超超超级向东方", deltime: "0", posttime: "1465295570", edittime: "1514972989", sttime: "1465208820", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/0b512fe16c950ead33ece5c08d1d80b9dc829b51.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E8%B6%85%E7%BA%A7%E5%90%91%20%E4%B8%9C%E6%96%B9" ] }, { id: "309", type: "fix", title: "猜拳", deltime: "0", posttime: "1465295413", edittime: "1514972989", sttime: "1465208820", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/24d7cedb35c52774c526599c9029ce8fbea131b9.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E7%8C%9C%E6%8B%B3" ] }, { id: "308", type: "fix", title: "kiss", deltime: "0", posttime: "1465295267", edittime: "1514972989", sttime: "1465208760", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/63897ed3bd90478a8d6941ac1590c1a1422c620d.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E6%8E%A5%E5%90%BB" ] }, { id: "307", type: "fix", title: "萌宠", deltime: "0", posttime: "1464946701", edittime: "1514972989", sttime: "1464856920", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/1f7bc4b638ac9332c9b01ae465b35a6f51621975.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E8%90%8C%E5%AE%A0" ] }, { id: "306", type: "fix", title: "偶像梦幻祭", deltime: "0", posttime: "1464946644", edittime: "1514972989", sttime: "1464856920", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/8983956a37861ec102e6a0ccd4b0219a9bfa4b29.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%81%B6%E5%83%8F%E6%A2%A6%E5%B9%BB%E7%A5%AD" ] }, { id: "305", type: "fix", title: "竜が我が敌を喰ら", deltime: "0", posttime: "1464946448", edittime: "1514972989", sttime: "1464856920", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/768916ac9138876d2a34ea33d191aa5321761f3d.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%AE%88%E6%9C%9B%E5%B1%81%E8%82%A1" ] }, { id: "304", type: "fix", title: "吃豆人", deltime: "0", posttime: "1464946323", edittime: "1514972989", sttime: "1464856920", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/28f64df4485c43de82fc28cd6d93b986a25fe2c7.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%90%83%E8%B1%86%E4%BA%BA" ] }, { id: "303", type: "fix", title: "flag", deltime: "0", posttime: "1464946175", edittime: "1514972989", sttime: "1464856920", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/9438bee77d1c2fa47867e628c897186b12ae5203.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=flag" ] }, { id: "302", type: "fix", title: "章鱼", deltime: "0", posttime: "1464946111", edittime: "1514972989", sttime: "1464856920", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/d35ea551f2c118408eca334470db2736f0c1b652.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E7%AB%A0%E9%B1%BC" ] }, { id: "301", type: "fix", title: "死鱼眼", deltime: "0", posttime: "1464945996", edittime: "1514972989", sttime: "1464856920", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/f0ce0992147ccc56eb7989912c231f1bd2c011dc.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E6%AD%BB%E9%B1%BC%E7%9C%BC" ] }, { id: "300", type: "fix", title: "催眠", deltime: "0", posttime: "1464945913", edittime: "1514972989", sttime: "1464856920", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/3a6a868585732892d351dfd693bd87ded43ca926.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%82%AC%E7%9C%A0" ] }, { id: "299", type: "fix", title: "超级玛丽", deltime: "0", posttime: "1464945790", edittime: "1514972989", sttime: "1464856920", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/1ef12713e53b5f596bb77bbb15067053929d8f91.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E7%8C%AB%E7%89%88%E8%B6%85%E7%BA%A7%E7%8E%9B%E4%B8%BD" ] }, { id: "298", type: "fix", title: "心疼", deltime: "0", posttime: "1464945714", edittime: "1514972989", sttime: "1464856920", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/7697009ae0bf89a87524d421cea14f136b55c2cb.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%BF%83%E7%96%BC%E5%90%8E%E9%9D%A2%E7%9A%84" ] }, { id: "297", type: "fix", title: "团子大家族", deltime: "0", posttime: "1464945562", edittime: "1514972989", sttime: "1464856920", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/200f385add8a0e2bb156a5f5b3fbf6ce80fe2318.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%9B%A2%E5%AD%90%E5%A4%A7%E5%AE%B6%E6%97%8F" ] }, { id: "296", type: "fix", title: "泡面", deltime: "0", posttime: "1464945505", edittime: "1514972989", sttime: "1464856920", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/e2fdf69637b36c08ed8a32c708e9e90ebe66b07f.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E6%B3%A1%E9%9D%A2" ] }, { id: "295", type: "fix", title: "捏脸", deltime: "0", posttime: "1464945320", edittime: "1514972989", sttime: "1464856920", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/c9d7a539066b4e381a109fa27ae10df834b81b98.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E6%8D%8F%E8%84%B8" ] }, { id: "294", type: "fix", title: "跳绳", deltime: "0", posttime: "1464945070", edittime: "1514972989", sttime: "1464856920", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/d4af4847fae945a85078da4e7649d6a29f541341.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E8%B7%B3%E7%BB%B3" ] }, { id: "293", type: "fix", title: "美甲", deltime: "0", posttime: "1464944847", edittime: "1514972989", sttime: "1464856920", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/919ea3440629a4f30b753599ad3ee5a1da90311f.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E7%BE%8E%E7%94%B2" ] }, { id: "292", type: "fix", title: "翻唱", deltime: "0", posttime: "1464944803", edittime: "1514972989", sttime: "1464856920", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/6216b20956cd6708cbbeae567cd65c6becdb3639.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E7%BF%BB%E5%94%B1" ] }, { id: "291", type: "fix", title: "俄罗斯方块", deltime: "0", posttime: "1464944749", edittime: "1514972989", sttime: "1464856920", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/350de52c8fd2a8662843c5074a3da3b4c83a1d5d.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E4%BF%84%E7%BD%97%E6%96%AF%E6%96%B9%E5%9D%97" ] }, { id: "290", type: "fix", title: "Re:从零开始的异世界生活", deltime: "0", posttime: "1464944624", edittime: "1514972989", sttime: "1464856920", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/0ef68bb0159d8b2fc9be0008b0dbb92bd13fb6e8.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=Re%EF%BC%9A%E4%BB%8E%E9%9B%B6%E5%BC%80%E5%A7%8B%E7%9A%84%E5%BC%82%E4%B8%96%E7%95%8C%E7%94%9F%E6%B4%BB" ] }, { id: "289", type: "fix", title: "流星", deltime: "0", posttime: "1464944481", edittime: "1514972989", sttime: "1464856920", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/cd544efe76e05a915bfe559c6ab45921988539fa.gif", weight: "0", links: [ "https://search.bilibili.com/video?keyword=%E6%B5%81%E6%98%9F" ] }, { id: "288", type: "fix", title: "火锅", deltime: "0", posttime: "1464944293", edittime: "1514972989", sttime: "1464856920", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/34c1c43476ed00ada44a2bc9797d5bb64e49ebaf.gif", weight: "0", links: [ "https://search.bilibili.com/video?keyword=%E7%81%AB%E9%94%85" ] }, { id: "287", type: "fix", title: "charlotte", deltime: "0", posttime: "1464944170", edittime: "1514972989", sttime: "1464856920", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/4c9db699a9b6316a1293cfa93469a7c5c83ceb73.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=charlotte" ] }, { id: "286", type: "fix", title: "学习", deltime: "0", posttime: "1464944075", edittime: "1514972989", sttime: "1464856920", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/28285c794aad429fad8f316a96317f38e0f9e2b8.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%AD%A6%E4%B9%A0" ] }, { id: "285", type: "fix", title: "蛋疼", deltime: "0", posttime: "1464606062", edittime: "1514972989", sttime: "1464519000", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/02f727c78831f4b86449726e4c42f272ee54d1ec.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E8%9B%8B%E7%96%BC" ] }, { id: "284", type: "fix", title: "冰淇淋", deltime: "0", posttime: "1464606018", edittime: "1514972989", sttime: "1464519000", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/83fceea64c232b5db3ec4d5a115b9b4568a9ed35.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%86%B0%E6%B7%87%E6%B7%8B" ] }, { id: "283", type: "fix", title: "射命丸文", deltime: "0", posttime: "1464577522", edittime: "1514972989", sttime: "1464490440", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/c84cee2d2aa0e12aa2f47cd75a1fe64b3b29beee.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%B0%84%E5%91%BD%E4%B8%B8%E6%96%87" ] }, { id: "282", type: "fix", title: "强化失败", deltime: "0", posttime: "1464577486", edittime: "1514972989", sttime: "1464490440", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/34124005a69d8340d1cc28e91c98899b4de8d696.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%BC%BA%E5%8C%96%E5%A4%B1%E8%B4%A5" ] }, { id: "281", type: "fix", title: "跑酷", deltime: "0", posttime: "1464577457", edittime: "1514972989", sttime: "1464490440", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/0105560c89d1453d3f9653e92450e0d7a9738415.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E8%B7%91%E9%85%B7" ] }, { id: "280", type: "fix", title: "化学实验", deltime: "0", posttime: "1464577427", edittime: "1514972989", sttime: "1464490440", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/e2746af03baed90daf0c1dbdb096ea76643a76ef.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%8C%96%E5%AD%A6%E5%AE%9E%E9%AA%8C" ] }, { id: "279", type: "fix", title: "爆笑星际2", deltime: "0", posttime: "1464577373", edittime: "1514972989", sttime: "1464490440", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/d2f969750728b47ee83bd8a37687a582652b060d.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E7%88%86%E7%AC%91%E6%98%9F%E9%99%852" ] }, { id: "278", type: "fix", title: "giligili eye", deltime: "0", posttime: "1464577325", edittime: "1514972989", sttime: "1464490440", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/709b9c0e30c09cb9d7db5e4f5f6272fd7cc754dc.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=GILIGILI" ] }, { id: "277", type: "fix", title: "尼克杨", deltime: "0", posttime: "1464258086", edittime: "1514972989", sttime: "1464169440", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/ee4414ee0dd32419bd6231c758de385d9b9035da.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%B0%BC%E5%85%8B%E6%9D%A8" ] }, { id: "276", type: "fix", title: "喵星人", deltime: "0", posttime: "1464257778", edittime: "1514972989", sttime: "1464169440", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/e2982eb27e2485745b01e8e6f956ef84b905682a.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%96%B5%E6%98%9F%E4%BA%BA" ] }, { id: "275", type: "fix", title: "星际牛仔", deltime: "0", posttime: "1464257743", edittime: "1514972989", sttime: "1464169440", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/d74f8216006f61d194bb7a7ebff9ff8531253f21.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E6%98%9F%E9%99%85%E7%89%9B%E4%BB%94" ] }, { id: "274", type: "fix", title: "求领养", deltime: "0", posttime: "1464257664", edittime: "1514972989", sttime: "1464169440", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/841a509087d7450bc8a2b4034bff75251ee51d6b.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E6%B1%82%E9%A2%86%E5%85%BB" ] }, { id: "273", type: "fix", title: "飞镖", deltime: "0", posttime: "1464257485", edittime: "1514972989", sttime: "1464169440", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/094429f049a7c0a51ca2479ef5a6d9bf4f1c12d8.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E9%A3%9E%E9%95%96" ] }, { id: "272", type: "fix", title: "吹泡泡", deltime: "0", posttime: "1464257245", edittime: "1514972989", sttime: "1464169440", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/c24155b73ddad15f5243e7c58868762e0b8d437f.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%90%B9%E6%B3%A1%E6%B3%A1" ] }, { id: "271", type: "fix", title: "煎蛋", deltime: "0", posttime: "1464257186", edittime: "1514972989", sttime: "1464169440", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/dc18e9cf8670d7f1dea88266ea3365f663c61747.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E7%85%8E%E8%9B%8B" ] }, { id: "270", type: "fix", title: "啊啊啊", deltime: "0", posttime: "1464256962", edittime: "1514972989", sttime: "1464169440", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/ad94fa918f4b2dd593876aebc0029b83997b5240.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%95%8A%E5%95%8A%E5%95%8A" ] }, { id: "269", type: "fix", title: "心情不好就来看", deltime: "0", posttime: "1464256907", edittime: "1514972989", sttime: "1464169440", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/26371aa33464a0c78cfb39d23f13082ace656e08.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%BF%83%E6%83%85%E4%B8%8D%E5%A5%BD%E5%B0%B1%E6%9D%A5%E7%9C%8B" ] }, { id: "268", type: "fix", title: "天线宝宝", deltime: "0", posttime: "1464256746", edittime: "1514972989", sttime: "1464169440", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/579dd8982a44aa44f4f12d40f46b1fcdf792f08b.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%A4%A9%E7%BA%BF%E5%AE%9D%E5%AE%9D" ] }, { id: "267", type: "fix", title: "睡前", deltime: "0", posttime: "1464256703", edittime: "1514972989", sttime: "1464169440", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/27065f35333b72d10746be9fbd453f8ade4322f5.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E7%9D%A1%E5%89%8D%E9%9F%B3%E9%A2%91" ] }, { id: "266", type: "fix", title: "恐怖片", deltime: "0", posttime: "1464256618", edittime: "1514972989", sttime: "1464169440", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/fa3d11e277d2c0801544350f028014ef854ab0fb.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E6%81%90%E6%80%96%E7%89%87" ] }, { id: "265", type: "fix", title: "飞檐走壁", deltime: "0", posttime: "1464256570", edittime: "1514972989", sttime: "1464169440", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/9d5e2a336889ae47d4b53a8d4e74a1b6893912d0.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E9%A3%9E%E6%AA%90%E8%B5%B0%E5%A3%81" ] }, { id: "264", type: "fix", title: "戳戳乐", deltime: "0", posttime: "1464256500", edittime: "1514972989", sttime: "1464169440", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/b9a75fc9ae4da2cb214b807886294f72974a8d7c.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E6%88%B3%E6%88%B3%E4%B9%90" ] }, { id: "263", type: "fix", title: "腿初音", deltime: "0", posttime: "1464256113", edittime: "1514972989", sttime: "1464169440", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/3c1f7c747d4742a736a72e2067197a4898235298.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%88%9D%E9%9F%B3" ] }, { id: "262", type: "fix", title: "太鼓达人", deltime: "0", posttime: "1464256014", edittime: "1514972989", sttime: "1464169440", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/bface0707e4e4e162a0a6457e6279ed36a5d7408.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%A4%AA%E9%BC%93%E8%BE%BE%E4%BA%BA" ] }, { id: "261", type: "fix", title: "如龙", deltime: "0", posttime: "1464255937", edittime: "1514972989", sttime: "1464169440", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/ed8c5d2fc88a271e65accee74bf3b158f7784a8d.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%A6%82%E9%BE%99" ] }, { id: "260", type: "fix", title: "VR", deltime: "0", posttime: "1464255874", edittime: "1514972989", sttime: "1464169380", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/fbaa9b7272273daf28c0f69a267a03836a9b5518.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=vr" ] }, { id: "259", type: "fix", title: "熊猫", deltime: "0", posttime: "1464255754", edittime: "1514972989", sttime: "1464169320", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/0073b2221e5e9e6275d6ef1757c1b68360747d4b.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E7%86%8A%E7%8C%AB" ] }, { id: "258", type: "fix", title: "上天", deltime: "0", posttime: "1464255686", edittime: "1514972989", sttime: "1464167880", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/f29f2c68bdad91830eb1553b282dbd07e6a9968a.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E4%BD%A0%E5%92%8B%E4%B8%8D%E4%B8%8A%E5%A4%A9" ] }, { id: "257", type: "fix", title: "节奏天国", deltime: "0", posttime: "1464255602", edittime: "1514972989", sttime: "1464167880", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/599e33b04a0c34af8693d55487f041c7f1d0a5d6.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E8%8A%82%E5%A5%8F%E5%A4%A9%E5%9B%BD" ] }, { id: "256", type: "fix", title: "海盗", deltime: "0", posttime: "1464255567", edittime: "1514972989", sttime: "1464167880", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/a55172db4b0bbae56cad0a173f0c98ec105b50c4.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E6%B5%B7%E7%9B%97" ] }, { id: "255", type: "fix", title: "打瞌睡", deltime: "0", posttime: "1464255511", edittime: "1514972989", sttime: "1464167880", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/54076d6e1fab7ff53217ba70bc0698bc4ab20645.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E6%89%93%E7%9E%8C%E7%9D%A1" ] }, { id: "254", type: "fix", title: "splatoon", deltime: "0", posttime: "1463739463", edittime: "1514972989", sttime: "1463652660", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/3b26654188286a014174aa21a8a596230c4f8f48.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=splatoon" ] }, { id: "253", type: "fix", title: "逆转裁判", deltime: "0", posttime: "1463739253", edittime: "1514972989", sttime: "1463652660", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/1a49fccbf8a91984bcfab853a0989e23198c1050.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E9%80%86%E8%BD%AC%E8%A3%81%E5%88%A4" ] }, { id: "252", type: "fix", title: "美树沙耶香", deltime: "0", posttime: "1463739216", edittime: "1514972989", sttime: "1463652660", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/73193956be362bc6774ead4b632a66aaf4df8706.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E7%BE%8E%E6%A0%91%E6%B2%99%E8%80%B6%E9%A6%99" ] }, { id: "251", type: "fix", title: "不明生物", deltime: "0", posttime: "1463739175", edittime: "1514972989", sttime: "1463652660", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/0ee68c48ee79baba7c4dba931f2f8e3befb8beb8.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E4%B8%8D%E6%98%8E%E7%94%9F%E7%89%A9" ] }, { id: "250", type: "fix", title: "友谊的小船", deltime: "0", posttime: "1462765088", edittime: "1514972989", sttime: "1462678320", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/c804c57efc396fccb2c0efb724c33fcfa2d9a1ff.gif", weight: "0", links: [ "https://www.bilibili.com/topic/1187.html" ] }, { id: "249", type: "fix", title: "弹丸论破", deltime: "0", posttime: "1462763334", edittime: "1514972989", sttime: "1462676040", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/c15930b15f1b2ce887ec9eb2f40200ade5aeb097.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%BC%B9%E4%B8%B8%E8%AE%BA%E7%A0%B4" ] }, { id: "248", type: "fix", title: "红壳的潘多拉", deltime: "0", posttime: "1462763060", edittime: "1514972989", sttime: "1462676040", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/4b333905442e73b70f12d052aab200156b70545c.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E7%BA%A2%E5%A3%B3%E7%9A%84%E6%BD%98%E5%A4%9A%E6%8B%89" ] }, { id: "247", type: "fix", title: "圣杯", deltime: "0", posttime: "1462762932", edittime: "1514972989", sttime: "1462676040", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/9b18bed7ff8538b638871f1c8d00615cb6591647.gif", weight: "0", links: [ "https://search.bilibili.com/special?keyword=%E5%9C%A3%E6%9D%AF" ] }, { id: "246", type: "fix", title: "渚薰", deltime: "0", posttime: "1462762675", edittime: "1514972989", sttime: "1462676040", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/6cd504c2a785bf4dbe74dc273572b7f306345af3.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E6%B8%9A%E8%96%B0" ] }, { id: "245", type: "fix", title: "魔术", deltime: "0", posttime: "1461921980", edittime: "1514972989", sttime: "1461835140", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/b3442eb7da2178659c10f9480e15302ccea3fbc7.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E9%AD%94%E6%9C%AF" ] }, { id: "244", type: "fix", title: "osu", deltime: "0", posttime: "1461921807", edittime: "1514972989", sttime: "1461835140", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/cf49ee78de8a2ab45e6321d33e39befc6ef05671.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=osu" ] }, { id: "243", type: "fix", title: "we bare bears", deltime: "0", posttime: "1461744470", edittime: "1514972989", sttime: "1461657780", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/d9556a43143958c283a875521e6c6dacf2de1572.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=we+bare+bears" ] }, { id: "242", type: "fix", title: "魔卡少女樱", deltime: "0", posttime: "1461744398", edittime: "1514972989", sttime: "1461657780", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/420dcfa24100127d70988d624f5558b9afdcb5ef.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E9%AD%94%E5%8D%A1%E5%B0%91%E5%A5%B3%E6%A8%B1" ] }, { id: "241", type: "fix", title: "神秘博士", deltime: "0", posttime: "1460716877", edittime: "1514972989", sttime: "1460629740", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/6514ee9176f6c82be020ee3fc89e899696471496.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E7%A5%9E%E7%A7%98%E5%8D%9A%E5%A3%AB" ] }, { id: "240", type: "fix", title: "AB向", deltime: "0", posttime: "1460716835", edittime: "1514972989", sttime: "1460629740", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/332d998873898fd5fd3ffbb43a06ed0c0bf516af.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=AB%E5%90%91" ] }, { id: "239", type: "fix", title: "宇宙巡警露露子", deltime: "0", posttime: "1460716786", edittime: "1514972989", sttime: "1460629740", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/f7a1964da37c6fba9e5170dd0521207832c20147.gif", weight: "0", links: [ "https://bangumi.bilibili.com/anime/3459" ] }, { id: "238", type: "fix", title: "纸飞机", deltime: "0", posttime: "1460716688", edittime: "1514972989", sttime: "1460629740", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/829412d4a6d76b8facf0011ba16c6b0a9bfb9f66.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E7%BA%B8%E9%A3%9E%E6%9C%BA" ] }, { id: "237", type: "fix", title: "二五仔", deltime: "0", posttime: "1460716558", edittime: "1514972989", sttime: "1460629740", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/cd0f0c7b69724515b30c87cd6d56129193a5395b.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E4%BA%8C%E4%BA%94%E4%BB%94" ] }, { id: "236", type: "fix", title: "树懒体", deltime: "0", posttime: "1460716447", edittime: "1514972989", sttime: "1460629740", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/ab2e8dd8d85681abed37021dfc980b3a7139e020.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E6%A0%91%E6%87%92" ] }, { id: "235", type: "fix", title: "在下坂本,有何贵干?", deltime: "0", posttime: "1460716288", edittime: "1514972989", sttime: "1460629740", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/9b625a77be6058aac7f952298da0078a0780cd09.gif", weight: "0", links: [ "https://bangumi.bilibili.com/anime/3450" ] }, { id: "234", type: "fix", title: "模拟山羊", deltime: "0", posttime: "1459910512", edittime: "1514972989", sttime: "1459824060", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/1786ce76f5de2f72c588cd2870fdb322b571d642.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E6%A8%A1%E6%8B%9F%E5%B1%B1%E7%BE%8A" ] }, { id: "233", type: "fix", title: "海尔兄弟", deltime: "0", posttime: "1459827791", edittime: "1514972989", sttime: "1459741020", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/de4e29696526036d976d7a744cce1581abe6fe20.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E6%B5%B7%E5%B0%94%E5%85%84%E5%BC%9F" ] }, { id: "232", type: "fix", title: "怪诞小镇", deltime: "0", posttime: "1459827754", edittime: "1514972989", sttime: "1459741020", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/43618895efc752ea83fec4a37340fff2f0b50c1c.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E6%80%AA%E8%AF%9E%E5%B0%8F%E9%95%87" ] }, { id: "231", type: "fix", title: "黑岩", deltime: "0", posttime: "1459827691", edittime: "1514972989", sttime: "1459741020", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/850abfee9e23cc3ce449699d196c666a58088bff.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E9%BB%91%E5%B2%A9" ] }, { id: "229", type: "fix", title: "BML", deltime: "0", posttime: "1458702744", edittime: "1514972989", sttime: "1458615420", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/493547116600c4f477c304dca1d96b7c22027baf.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=BML" ] }, { id: "228", type: "fix", title: "兔子", deltime: "0", posttime: "1458702712", edittime: "1514972989", sttime: "1458615420", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/c6011421730d0b27dad0c1b2d68b6cf00712541d.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%85%94%E5%AD%90" ] }, { id: "227", type: "fix", title: "传送门", deltime: "0", posttime: "1458702645", edittime: "1514972989", sttime: "1458615420", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/7432141f6e7b6f7e03a45aef17942b6cb2b0bca0.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E4%BC%A0%E9%80%81%E9%97%A8" ] }, { id: "226", type: "fix", title: "窥视", deltime: "0", posttime: "1458702479", edittime: "1514972989", sttime: "1458615420", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/8e2962c5761b433ce51ffcef0e5539f0a31349b1.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E7%AA%A5%E8%A7%86" ] }, { id: "225", type: "fix", title: "苦力怕", deltime: "0", posttime: "1458702321", edittime: "1514972989", sttime: "1458615420", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/fa0b6ebef226b701e7dd466bdc428f78ab0d2197.gif", weight: "0", links: [ "https://www.bilibili.com/topic/v2/1114.html" ] }, { id: "224", type: "fix", title: "黑岩", deltime: "0", posttime: "1458701952", edittime: "1514972989", sttime: "1458615420", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/850abfee9e23cc3ce449699d196c666a58088bff.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E9%BB%91%E5%B2%A9" ] }, { id: "223", type: "fix", title: "奥巴马", deltime: "0", posttime: "1457943992", edittime: "1514972989", sttime: "1457856840", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/e26aaa49d380ce97be796c8af4c8e471a32590c3.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%A5%A5%E5%B7%B4%E9%A9%AC&order=totalrank" ] }, { id: "222", type: "fix", title: "周星驰", deltime: "0", posttime: "1457943874", edittime: "1514972989", sttime: "1457856840", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/f7d5195f03242d20999db95974ca7059f731a460.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%91%A8%E6%98%9F%E9%A9%B0" ] }, { id: "221", type: "fix", title: "健身", deltime: "0", posttime: "1457943619", edittime: "1514972989", sttime: "1457856840", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/30c8f6802cd1f797f44ab70338abd87efbe2a0bb.gif", weight: "0", links: [ "https://www.bilibili.com/topic/v2/1051.html" ] }, { id: "220", type: "fix", title: "CS", deltime: "0", posttime: "1457943569", edittime: "1514972989", sttime: "1457856840", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/f588372f96774ca80fd2f431f2d6577dd603cb1a.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=CS&order=totalrank" ] }, { id: "219", type: "fix", title: "害怕", deltime: "0", posttime: "1457943496", edittime: "1514972989", sttime: "1457856840", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/303261c1ebdf9bdea245d58e903f91294cfdd29d.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%AE%B3%E6%80%95&page=1&order=totalrank" ] }, { id: "218", type: "fix", title: "I wanna be the guy", deltime: "0", posttime: "1457943443", edittime: "1514972989", sttime: "1457856840", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/16358bd52ef1491c17d0ef5f9437355d38357a6a.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=I%20wanna%20be%20the%20guy" ] }, { id: "217", type: "fix", title: "探险活宝", deltime: "0", posttime: "1457943406", edittime: "1514972989", sttime: "1457856840", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/a202961e8d3ac165f6c716b268eb7c0f09bc1a1b.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E6%8E%A2%E9%99%A9%E6%B4%BB%E5%AE%9D" ] }, { id: "216", type: "fix", title: "are you ok", deltime: "0", posttime: "1457341630", edittime: "1514972989", sttime: "1457254680", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/18abe91eb6fbd5b3a0839e8f1e08846927b9b5c2.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=are%20you%20ok" ] }, { id: "215", type: "fix", title: "大小姐的抱头蹲防", deltime: "0", posttime: "1457341591", edittime: "1514972989", sttime: "1457254680", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/093228a2c9ae9fef31aed700e10c3b0bcdd009ce.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E6%8A%B1%E5%A4%B4%E8%B9%B2%E9%98%B2&page=1&order=totalrank" ] }, { id: "214", type: "fix", title: "博丽灵梦", deltime: "0", posttime: "1457341521", edittime: "1514972989", sttime: "1457254680", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/853f89cf41370a84760ad66dd6cde792714bf8c3.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E7%81%B5%E6%A2%A6" ] }, { id: "213", type: "fix", title: "岚少", deltime: "0", posttime: "1457341465", edittime: "1514972989", sttime: "1457254680", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/d85eba9bf089148a383d064029d27e03ff1da904.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%B2%9A%E5%B0%91" ] }, { id: "212", type: "fix", title: "以撒的结合", deltime: "0", posttime: "1457341432", edittime: "1514972989", sttime: "1457254680", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/f5f1a66d3d9ae02888ed0d93c784dab6c2163a6e.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E4%BB%A5%E6%92%92%E7%9A%84%E7%BB%93%E5%90%88" ] }, { id: "211", type: "fix", title: "博人传", deltime: "0", posttime: "1457341396", edittime: "1514972989", sttime: "1457254680", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/10b94847bd22b85bd4a0b1754943df929013e152.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%8D%9A%E4%BA%BA%E4%BC%A0" ] }, { id: "210", type: "fix", title: "探险活宝", deltime: "0", posttime: "1457341255", edittime: "1514972989", sttime: "1457254680", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/a202961e8d3ac165f6c716b268eb7c0f09bc1a1b.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E6%8E%A2%E9%99%A9%E6%B4%BB%E5%AE%9D" ] }, { id: "209", type: "fix", title: "I wanna be the guy", deltime: "0", posttime: "1457341229", edittime: "1514972989", sttime: "1457254680", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/16358bd52ef1491c17d0ef5f9437355d38357a6a.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=I+wanna+be+the+guy" ] }, { id: "208", type: "fix", title: "境界线上的地平线", deltime: "0", posttime: "1456801855", edittime: "1514972989", sttime: "1456715160", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/36adbba91f02013751cf2de5c25cb5b5398f9caf.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%A2%83%E7%95%8C%E7%BA%BF%E4%B8%8A%E7%9A%84%E5%9C%B0%E5%B9%B3%E7%BA%BF&order=totalrank&tids_1=1" ] }, { id: "207", type: "fix", title: "好男人", deltime: "0", posttime: "1456801799", edittime: "1514972989", sttime: "1456715160", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/16d00edf97d1e7abbabf03ca5b274b208467925c.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%A5%BD%E7%94%B7%E4%BA%BA&page=1&order=totalrank&tids_1=1" ] }, { id: "206", type: "fix", title: "奥斯卡", deltime: "0", posttime: "1456801679", edittime: "1514972989", sttime: "1456715160", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/5743a5b3c968e007670c5c510832260966a0df1d.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%A5%A5%E6%96%AF%E5%8D%A1%E9%A2%81%E5%A5%96%E5%85%B8%E7%A4%BC" ] }, { id: "205", type: "fix", title: "⑨的算术教室", deltime: "0", posttime: "1456733008", edittime: "1514972989", sttime: "1456646400", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/0fe340454d22120c7c1bf172ae159649f55f34f2.gif", weight: "0", links: [ "https://www.bilibili.com/topic/105.html" ] }, { id: "204", type: "fix", title: "美食侦探", deltime: "0", posttime: "1456732963", edittime: "1514972989", sttime: "1456646400", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/f6f4ab7d071771ce7aad2b7f19c02505ad658cae.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E7%BE%8E%E9%A3%9F%E4%BE%A6%E6%8E%A2%E7%8E%8B&order=dm" ] }, { id: "203", type: "fix", title: "猫和老鼠", deltime: "0", posttime: "1456732889", edittime: "1514972989", sttime: "1456646400", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/b9e247e9da1a6506fd2a0367826b8059487516c2.gif", weight: "0", links: [ "https://search.bilibili.com/video?keyword=%E7%8C%AB%E5%92%8C%E8%80%81%E9%BC%A0" ] }, { id: "202", type: "fix", title: "合唱", deltime: "0", posttime: "1454493583", edittime: "1514972989", sttime: "1454406720", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/e689fad96b281cfd9e528e056ff88b359d7d612e.gif", weight: "0", links: [ "https://www.bilibili.com/sp/%E5%90%88%E5%94%B1%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA" ] }, { id: "201", type: "fix", title: "喵帕斯", deltime: "0", posttime: "1454493533", edittime: "1514972989", sttime: "1454406720", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/e9914ddf0778db2b8fb7559fb0b3bffefdc29458.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%96%B5%E5%B8%95%E6%96%AF" ] }, { id: "200", type: "fix", title: "黄金", deltime: "0", posttime: "1454493431", edittime: "1514972989", sttime: "1454406720", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/f81233c5ffec793da045018275960ce06cf73bcd.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E9%BB%84%E9%87%91" ] }, { id: "198", type: "fix", title: "麻婆", deltime: "0", posttime: "1454383916", edittime: "1514972989", sttime: "1454295480", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/cc8314adf3fbe35da156fbdb37635ae7b71aab7e.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E9%BA%BB%E5%A9%86" ] }, { id: "197", type: "fix", title: "炸弹人", deltime: "0", posttime: "1454383883", edittime: "1514972989", sttime: "1454295480", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/c37c51ee73d79f11d7eaa866f77a5283cdacf46c.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E7%82%B8%E5%BC%B9%E4%BA%BA" ] }, { id: "196", type: "fix", title: "数码宝贝", deltime: "0", posttime: "1454383854", edittime: "1514972989", sttime: "1454295480", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/23e02817ea3490d6c07290ced306604930802b89.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E6%95%B0%E7%A0%81%E5%AE%9D%E8%B4%9D" ] }, { id: "195", type: "fix", title: "妈妈再爱我一次", deltime: "0", posttime: "1454383723", edittime: "1514972989", sttime: "1454295480", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/29213eb9c09f4aa0f199201b03dfd7d6cd5feed9.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%A6%88%E5%A6%88%E5%86%8D%E7%88%B1%E6%88%91%E4%B8%80%E6%AC%A1" ] }, { id: "194", type: "fix", title: "物语系列", deltime: "0", posttime: "1454383687", edittime: "1514972989", sttime: "1454295480", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/cbced60a25b84c6479fb50495d31fd95548f3fda.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E7%89%A9%E8%AF%AD%E7%B3%BB%E5%88%97" ] }, { id: "193", type: "fix", title: "刀剑乱舞", deltime: "0", posttime: "1454383236", edittime: "1514972989", sttime: "1454295480", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/d0bf43b038a37aa9816c37564b0d5b6ea60c2f01.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%88%80%E5%89%91%E4%B9%B1%E8%88%9E" ] }, { id: "192", type: "fix", title: "房东妹子青春期", deltime: "0", posttime: "1454382543", edittime: "1514972989", sttime: "1454295480", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/72339f279293726390a3d9899940f7943b79b0cb.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E6%88%BF%E4%B8%9C%E5%A6%B9%E5%AD%90%E9%9D%92%E6%98%A5%E6%9C%9F" ] }, { id: "191", type: "fix", title: "美妆达人", deltime: "0", posttime: "1454382506", edittime: "1514972989", sttime: "1454295480", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/0127380410d03506ccaa21d619dc4d0ad8bceb1f.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E7%BE%8E%E5%A6%86%E8%BE%BE%E4%BA%BA" ] }, { id: "190", type: "fix", title: "星之卡比", deltime: "0", posttime: "1454382461", edittime: "1514972989", sttime: "1454295480", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/2f70e9f34de3ba482d662a519860b84b4fb70159.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E6%98%9F%E4%B9%8B%E5%8D%A1%E6%AF%94" ] }, { id: "189", type: "fix", title: "美少女战士", deltime: "0", posttime: "1454382419", edittime: "1514972989", sttime: "1454295480", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/ead25b16118b097a4bd7831cb9b89f7ce4da019e.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E7%BE%8E%E5%B0%91%E5%A5%B3%E6%88%98%E5%A3%AB" ] }, { id: "188", type: "fix", title: "天线宝宝", deltime: "0", posttime: "1454382338", edittime: "1514972989", sttime: "1454295480", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/12ab85217a881fb270017557451ba5cad98a813c.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%A4%A9%E7%BA%BF%E5%AE%9D%E5%AE%9D" ] }, { id: "187", type: "fix", title: "逆转裁判", deltime: "0", posttime: "1454382260", edittime: "1514972989", sttime: "1454295480", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/57e26d38490a0c88694768bfd28b860c40509603.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E9%80%86%E8%BD%AC%E8%A3%81%E5%88%A4" ] }, { id: "186", type: "fix", title: "春节饺子", deltime: "0", posttime: "1454382229", edittime: "1514972989", sttime: "1454295480", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/e8cd8b17530264fb50848035aceec3d71a2d280b.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E6%98%A5%E8%8A%82%E9%A5%BA%E5%AD%90&page=1&order=click" ] }, { id: "185", type: "fix", title: "二胡", deltime: "0", posttime: "1454382141", edittime: "1514972989", sttime: "1454295480", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/2e465503cf4f912b30f21e7f9a6e5174a3f22712.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E4%BA%8C%E8%83%A1" ] }, { id: "184", type: "fix", title: "仓鼠", deltime: "0", posttime: "1453865830", edittime: "1514972989", sttime: "1453778640", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/cb55d2c83705b18be579a127aea7f7855367e09d.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E4%BB%93%E9%BC%A0" ] }, { id: "183", type: "fix", title: "甜点", deltime: "0", posttime: "1453865707", edittime: "1514972989", sttime: "1453778640", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/8d141440c766c3e76b409ad82d97a9ab80fb1347.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E7%94%9C%E7%82%B9" ] }, { id: "182", type: "fix", title: "张士超你到底把我家钥匙放哪里了", deltime: "0", posttime: "1453865672", edittime: "1514972989", sttime: "1453778640", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/a635614bce78543705ca90943ba476b0304b7c51.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%BC%A0%E5%A3%AB%E8%B6%85%E4%BD%A0%E5%88%B0%E5%BA%95%E6%8A%8A%E6%88%91%E5%AE%B6%E9%92%A5%E5%8C%99%E6%94%BE%E5%93%AA%E9%87%8C%E4%BA%86" ] }, { id: "181", type: "fix", title: "南家三姐妹", deltime: "0", posttime: "1453865642", edittime: "1514972989", sttime: "1453778640", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/447910b0f954589fa9105b263a46c91a88be29ac.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%8D%97%E5%AE%B6%E4%B8%89%E5%A7%90%E5%A6%B9" ] }, { id: "180", type: "fix", title: "化妆", deltime: "0", posttime: "1453865599", edittime: "1514972989", sttime: "1453778640", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/e06dbcda039eb5e6fe39f765fcb4965e8b31116f.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%8C%96%E5%A6%86&page=1&tids_1=155" ] }, { id: "179", type: "fix", title: "哆啦A梦", deltime: "0", posttime: "1453865535", edittime: "1514972989", sttime: "1453778640", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/6a702ed80245ac06450c712cb072e459b562995f.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%93%86%E5%95%A6A%E6%A2%A6" ] }, { id: "178", type: "fix", title: "监狱兔", deltime: "0", posttime: "1453865498", edittime: "1514972989", sttime: "1453778640", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/ba090ff3b9bccb7d0b2f383012a74217c0ff8c33.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E7%9B%91%E7%8B%B1%E5%85%94" ] }, { id: "177", type: "fix", title: "乌瑟的穷困生活", deltime: "0", posttime: "1453865463", edittime: "1514972989", sttime: "1453778640", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/09b6c280d320362733d5232612481abcc4f92179.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E4%B9%8C%E7%91%9F%E7%9A%84%E7%A9%B7%E5%9B%B0%E7%94%9F%E6%B4%BB" ] }, { id: "176", type: "fix", title: "爆笑星际", deltime: "0", posttime: "1453435368", edittime: "1514972989", sttime: "1453348800", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/c5e045204b5ae6fa1251bb6423b71a7844461595.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E7%88%86%E7%AC%91%E6%98%9F%E9%99%85" ] }, { id: "175", type: "fix", title: "粗点心战争", deltime: "0", posttime: "1453348316", edittime: "1514972989", sttime: "1453261320", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/8ad3cd43eef240f264da496b24b946278b1a0629.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E7%B2%97%E7%82%B9%E5%BF%83%E6%88%98%E4%BA%89" ] }, { id: "173", type: "fix", title: "阳炎PROJECT", deltime: "0", posttime: "1453348270", edittime: "1514972989", sttime: "1453261320", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/aaba793864f7169bd4b71fc4c7f4179c85d0265b.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E9%98%B3%E7%82%8EPROJECT" ] }, { id: "172", type: "fix", title: "熊本熊", deltime: "0", posttime: "1453347842", edittime: "1514972989", sttime: "1453261320", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/99fe6dee6d7c90e2b6ad37420a58fb724332f323.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E7%86%8A%E6%9C%AC%E7%86%8A" ] }, { id: "171", type: "fix", title: "绘画", deltime: "0", posttime: "1453347797", edittime: "1514972989", sttime: "1453261320", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/3184ca3c797848282f60085fe67c55a55bf19193.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E7%BB%98%E7%94%BB" ] }, { id: "170", type: "fix", title: "星际迷航", deltime: "0", posttime: "1453347725", edittime: "1514972989", sttime: "1453260480", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/02c04e9c7836e5692a8daa9b24cdcfcb91101f8e.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E6%98%9F%E9%99%85%E8%BF%B7%E8%88%AA" ] }, { id: "169", type: "fix", title: "阿姆斯特朗回旋加速喷气式阿姆斯特朗炮", deltime: "0", posttime: "1453347688", edittime: "1514972989", sttime: "1453260480", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/8eb760963036a72c2727dcc1de63ba54dec67606.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E9%98%BF%E5%A7%86%E6%96%AF%E7%89%B9%E6%9C%97%E5%9B%9E%E6%97%8B%E5%96%B7%E6%B0%94%E5%8A%A0%E9%80%9F%E5%BC%8F%E9%98%BF%E5%A7%86%E6%96%AF%E7%89%B9%E6%9C%97%E7%82%AE" ] }, { id: "168", type: "fix", title: "山海战记", deltime: "0", posttime: "1453172813", edittime: "1514972989", sttime: "1453082880", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/5f6c7ea19db25f98ef86feb624d26474d4bd682f.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%B1%B1%E6%B5%B7%E6%88%98%E8%AE%B0" ] }, { id: "167", type: "fix", title: "卡巴迪", deltime: "0", posttime: "1453172778", edittime: "1514972989", sttime: "1453082880", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/05472367425f3c4a67c35ca5d76fd32fb233a73b.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%8D%A1%E5%B7%B4%E8%BF%AA" ] }, { id: "166", type: "fix", title: "美琴", deltime: "0", posttime: "1453088289", edittime: "1514972989", sttime: "1453001220", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/f8514c2a7f3dc94a71f7feacc746f78ccae970c3.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E7%BE%8E%E7%90%B4" ] }, { id: "165", type: "fix", title: "奥特曼", deltime: "0", posttime: "1453088118", edittime: "1514972989", sttime: "1453001220", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/878af50f4c03d20cdd6eeda252d673554e2c5071.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%A5%A5%E7%89%B9%E6%9B%BC" ] }, { id: "164", type: "fix", title: "尔康", deltime: "0", posttime: "1453088090", edittime: "1514972989", sttime: "1453001220", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/9f27f43827a53e224c39e86d0d0c4b2dcea7be45.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%B0%94%E5%BA%B7" ] }, { id: "163", type: "fix", title: "松冈修造", deltime: "0", posttime: "1453088058", edittime: "1514972989", sttime: "1453001220", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/d928db274d9eb51822af238f1432ac63cc0589fd.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E6%9D%BE%E5%86%88%E4%BF%AE%E9%80%A0" ] }, { id: "162", type: "fix", title: "火影忍者", deltime: "0", posttime: "1453088030", edittime: "1514972989", sttime: "1453001220", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/3ab85ab70ff1b94170eb814554fdf6e1624d2103.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E7%81%AB%E5%BD%B1%E5%BF%8D%E8%80%85" ] }, { id: "161", type: "fix", title: "张全蛋", deltime: "0", posttime: "1453088006", edittime: "1514972989", sttime: "1453001220", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/b00f00b857305759580c11128319a08fa1a71cf5.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%BC%A0%E5%85%A8%E8%9B%8B" ] }, { id: "160", type: "fix", title: "荒木飞吕彦", deltime: "0", posttime: "1453087980", edittime: "1514972989", sttime: "1453001220", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/6f5b1a41a93f69767dea0f6befff07440e5ce301.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E8%8D%92%E6%9C%A8%E9%A3%9E%E5%90%95%E5%BD%A6" ] }, { id: "159", type: "fix", title: "去污粉", deltime: "0", posttime: "1453087954", edittime: "1514972989", sttime: "1453001220", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/6cce2575e173b00021c56766aff2d9258198ee32.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%8E%BB%E6%B1%A1%E7%B2%89" ] }, { id: "158", type: "fix", title: "普通disco", deltime: "0", posttime: "1452739637", edittime: "1514972989", sttime: "1452652620", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/dd062ef83f889fb2fe22e5069ce9ae4ee2d0adcb.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E6%99%AE%E9%80%9A%E7%9A%84disco" ] }, { id: "157", type: "fix", title: "小岛秀夫", deltime: "0", posttime: "1452739503", edittime: "1514972989", sttime: "1452652620", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/2ae008e7887591a59d10dc3480298f03d1938827.gif", weight: "0", links: [ "https://search.bilibili.com/video?keyword=%E5%B0%8F%E5%B2%9B%E7%A7%80%E5%A4%AB&order=totalrank&page=1" ] }, { id: "156", type: "fix", title: "饥荒", deltime: "0", posttime: "1452739456", edittime: "1514972989", sttime: "1452652620", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/1f9cb183f1b58cd343d813aa2c34e90fef7611ab.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E9%A5%A5%E8%8D%92" ] }, { id: "155", type: "fix", title: "大海原与大海原", deltime: "0", posttime: "1452739402", edittime: "1514972989", sttime: "1452652620", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/b1a3d828c424b1f16290a72d985c8bc1ce658eef.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%A4%A7%E6%B5%B7%E5%8E%9F%E4%B8%8E%E5%A4%A7%E6%B5%B7%E5%8E%9F" ] }, { id: "154", type: "fix", title: "极速老师", deltime: "0", posttime: "1452739351", edittime: "1514972989", sttime: "1452652620", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/7783bd2a2ea3dfe85f0c1ad3f666bcbdd55f90ff.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E6%9E%81%E9%80%9F%E8%80%81%E5%B8%88" ] }, { id: "153", type: "fix", title: "冰果", deltime: "0", posttime: "1452739321", edittime: "1514972989", sttime: "1452652620", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/005d3f1c98311baaa51c630a4f85501ea939334f.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%86%B0%E6%9E%9C" ] }, { id: "152", type: "fix", title: "皮卡丘", deltime: "0", posttime: "1452578463", edittime: "1514972989", sttime: "1452484560", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/97e0cafbe36e091e24cb19654552f36a23124282.gif", weight: "0", links: [ "https://search.bilibili.com/video?keyword=%E7%9A%AE%E5%8D%A1%E4%B8%98&order=totalrank&page=1" ] }, { id: "151", type: "fix", title: "非洲boy", deltime: "0", posttime: "1452571145", edittime: "1514972989", sttime: "1452484560", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/7ed4a3de40a8a0a81336a1039f319e8d6a3e3a91.gif", weight: "0", links: [ "https://search.bilibili.com/video?keyword=%E9%9D%9E%E6%B4%B2boy&tids_1=119" ] }, { id: "150", type: "fix", title: "我们这一家", deltime: "0", posttime: "1452232736", edittime: "1514972989", sttime: "1452146220", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/bec5ac87f70593bb355b17c037af5840031bfb61.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E6%88%91%E4%BB%AC%E8%BF%99%E4%B8%80%E5%AE%B6" ] }, { id: "149", type: "fix", title: "阿松", deltime: "0", posttime: "1452232695", edittime: "1514972989", sttime: "1452146220", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/3b332cd02821265db07a271eb8e2029ef0e1af89.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E9%98%BF%E6%9D%BE" ] }, { id: "148", type: "fix", title: "吃货木下", deltime: "0", posttime: "1452232653", edittime: "1514972989", sttime: "1452140400", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/e823417ca4174941ddac43613ca80f857efd051e.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%90%83%E8%B4%A7%E6%9C%A8%E4%B8%8B" ] }, { id: "147", type: "fix", title: "僵尸猫", deltime: "0", posttime: "1452232600", edittime: "1514972989", sttime: "1452140400", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/9484ba894ef39a80d8c96d1e92feeabf6370c717.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%90%B8%E8%A1%80%E7%8C%AB" ] }, { id: "146", type: "fix", title: "张学友", deltime: "0", posttime: "1452232559", edittime: "1514972989", sttime: "1452140400", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/912c6b1944c0778bbc4ecc8f25a9c5aab347c60d.gif", weight: "0", links: [ "https://search.bilibili.com/video?keyword=%E5%BC%A0%E5%AD%A6%E5%8F%8B&tids_1=119" ] }, { id: "145", type: "fix", title: "丞相", deltime: "0", posttime: "1452232500", edittime: "1514972989", sttime: "1452140400", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/26c2b408e8e1ae38f7be4cae75ee8da43e853975.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E4%B8%9E%E7%9B%B8" ] }, { id: "144", type: "fix", title: "retoruto", deltime: "0", posttime: "1452232443", edittime: "1514972989", sttime: "1452140400", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/00cf377f28ec54111c9d6f12041dac0ac314f255.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=retoruto" ] }, { id: "143", type: "fix", title: "夏目", deltime: "0", posttime: "1452232390", edittime: "1514972989", sttime: "1452140400", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/9861b6b81d1af46b792237e9a3a3beeaeaa6026b.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%A4%8F%E7%9B%AE" ] }, { id: "142", type: "fix", title: "轻音少女", deltime: "0", posttime: "1451444236", edittime: "1514972989", sttime: "1451356980", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/3da2ee0bd92b2b79169c6a4f4f642c6abf80849a.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E8%BD%BB%E9%9F%B3%E5%B0%91%E5%A5%B3" ] }, { id: "141", type: "fix", title: "彩虹猫", deltime: "0", posttime: "1451444207", edittime: "1514972989", sttime: "1451356980", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/5973e6caa5dde47d99238c39fa5c450b87d5aeac.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%BD%A9%E8%99%B9%E7%8C%AB" ] }, { id: "140", type: "fix", title: "太鼓达人", deltime: "0", posttime: "1451444177", edittime: "1514972989", sttime: "1451356980", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/8788d0f4ec9787bb3cedef4def36c7d32b579be3.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%A4%AA%E9%BC%93%E8%BE%BE%E4%BA%BA" ] }, { id: "139", type: "fix", title: "星球大战", deltime: "0", posttime: "1451444147", edittime: "1514972989", sttime: "1451356980", endtime: "1480550400", state: "1", icon: "https://i1.hdslb.com/bfs/active/aafcee2b9f889f35e9e1fa69eca0bbaccdf61cf0.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E6%98%9F%E7%90%83%E5%A4%A7%E6%88%98" ] }, { id: "138", type: "fix", title: "热带雨林的爆笑生活", deltime: "0", posttime: "1451444057", edittime: "1514972989", sttime: "1451356980", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/d70f479a5ae70c71ad92128f1f23e1065349ee52.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E7%83%AD%E5%B8%A6%E9%9B%A8%E6%9E%97%E7%9A%84%E7%88%86%E7%AC%91%E7%94%9F%E6%B4%BB" ] }, { id: "137", type: "fix", title: "EVA", deltime: "0", posttime: "1451444022", edittime: "1514972989", sttime: "1451356980", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/8d6d9c2b7beb0c7b66d9340780772e7e7507b2fe.gif", weight: "0", links: [ "https://www.bilibili.com/topic/39.html" ] }, { id: "136", type: "fix", title: "裸狼", deltime: "0", posttime: "1451300143", edittime: "1514972989", sttime: "1451213520", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/3024bbb0bc7951e14cd5c4d9353e9069bf544422.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E8%A3%B8%E7%8B%BC" ] }, { id: "135", type: "fix", title: "蜡笔小新", deltime: "0", posttime: "1451300112", edittime: "1514972989", sttime: "1451213520", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/6cc6995cb51bd25af37842621150acb0f55cad91.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E8%9C%A1%E7%AC%94%E5%B0%8F%E6%96%B0" ] }, { id: "134", type: "fix", title: "钢之炼金术师", deltime: "0", posttime: "1451300075", edittime: "1514972989", sttime: "1451213520", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/16cea7ba117652835f950d0da4a468107a07710c.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E9%92%A2%E4%B9%8B%E7%82%BC%E9%87%91%E6%9C%AF%E5%B8%88" ] }, { id: "133", type: "fix", title: "三国志", deltime: "0", posttime: "1451300016", edittime: "1514972989", sttime: "1451213520", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/ba4c1c276f8c03c00f902385d1a4a1aa408a65e1.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E4%B8%89%E5%9B%BD%E5%BF%97" ] }, { id: "132", type: "fix", title: "朝九晚五", deltime: "0", posttime: "1450957116", edittime: "1514972989", sttime: "1450870500", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/e6e9fda14b3dc57c7dbf3096f06d9077543e4ca8.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E6%9C%9D%E4%B9%9D%E6%99%9A%E4%BA%94" ] }, { id: "131", type: "fix", title: "推倒", deltime: "0", posttime: "1450957077", edittime: "1514972989", sttime: "1450870500", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/3a53073e71e0a681f0c4276663e0547374a66afa.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E6%8E%A8%E5%88%B0" ] }, { id: "130", type: "fix", title: "waimo kun", deltime: "0", posttime: "1450957025", edittime: "1514972989", sttime: "1450870500", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/c362edc0ad113ead8691c30b1f74232bc369bb4a.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=waimo+kun" ] }, { id: "129", type: "fix", title: "泡面番", deltime: "0", posttime: "1450868346", edittime: "1514972989", sttime: "1450758240", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/12513e7be0990620ec8381d9be2c0c82c327f16f.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E6%B3%A1%E9%9D%A2%E7%95%AA" ] }, { id: "128", type: "fix", title: "挖坟", deltime: "0", posttime: "1450868319", edittime: "1514972989", sttime: "1450758240", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/a5205539a5103b8c7ca3d99961742927cd6f1af5.gif", weight: "0", links: [ "https://search.bilibili.com/video?keyword=%E6%8C%96%E5%9D%9F&order=click" ] }, { id: "127", type: "fix", title: "家有穆珂", deltime: "0", posttime: "1450868283", edittime: "1514972989", sttime: "1450758240", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/8ac60cbef777d759655018d05b99d2f3ed6ca933.gif", weight: "0", links: [ "https://www.bilibili.com/bangumi/i/2794/" ] }, { id: "126", type: "fix", title: "花泽香菜", deltime: "0", posttime: "1450868245", edittime: "1514972989", sttime: "1450758240", endtime: "0", state: "1", icon: "https://i2.hdslb.com/bfs/active/36dcef446ad558680f5a3f2432766d99deac496a.gif", weight: "0", links: [ "https://www.bilibili.com/sp/%E8%8A%B1%E6%B3%BD%E9%A6%99%E8%8F%9C" ] }, { id: "125", type: "fix", title: "暴走漫画", deltime: "0", posttime: "1450782039", edittime: "1514972989", sttime: "1450695540", endtime: "1482404340", state: "1", icon: "https://i2.hdslb.com/bfs/active/a144630111550f2a5194d39f7e57a006797e4a9c.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E6%9A%B4%E8%B5%B0%E6%BC%AB%E7%94%BB" ] }, { id: "124", type: "fix", title: "不约", deltime: "0", posttime: "1450696045", edittime: "1514972989", sttime: "1450598460", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/f4b56b2f8d796b4c98d629a6869bfdee0e621cc3.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E4%B8%8D%E7%BA%A6" ] }, { id: "123", type: "fix", title: "miku", deltime: "0", posttime: "1450696008", edittime: "1514972989", sttime: "1450598460", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/activity-plat/cover/20170831/o683zkj78z.gif", weight: "0", links: [ "https:https://www.bilibili.com/blackboard/activity-Miku10th.html" ] }, { id: "122", type: "fix", title: "任天堂", deltime: "0", posttime: "1450695960", edittime: "1514972989", sttime: "1450598460", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/c71aa74a8ddc7bf7e08d4f7d5a72f247aa015bb5.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E4%BB%BB%E5%A4%A9%E5%A0%82" ] }, { id: "121", type: "fix", title: "目瞪口呆", deltime: "0", posttime: "1450695932", edittime: "1514972989", sttime: "1450598460", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/7da608c8d87d679b3da50946190999a30d18529c.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E7%9B%AE%E7%9E%AA%E5%8F%A3%E5%91%86" ] }, { id: "120", type: "fix", title: "苍天饶过谁", deltime: "0", posttime: "1450350704", edittime: "1514972989", sttime: "1450255560", endtime: "0", state: "1", icon: "https://i0.hdslb.com/bfs/active/abcae160b98c6283d1daadfed8307c15d4ea5030.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E8%8B%8D%E5%A4%A9%E9%A5%B6%E8%BF%87%E8%B0%81" ] }, { id: "119", type: "fix", title: "买买买", deltime: "0", posttime: "1450350632", edittime: "1514972989", sttime: "1450255560", endtime: "0", state: "1", icon: "https://i1.hdslb.com/bfs/active/d8f89a73fb3711893c76459ef0bca53ad12e7a3e.gif", weight: "0", links: [ "https://bmall.bilibili.com/" ] }, { id: "118", type: "fix", title: "胖次", deltime: "0", posttime: "1450334567", edittime: "1514972989", sttime: "1450245540", endtime: "1481954340", state: "1", icon: "https://i2.hdslb.com/bfs/active/87a3332f5f4ed41c33af182a81ae0e1278876029.gif", weight: "0", links: [ "https://search.bilibili.com/video?keyword=%E8%83%96%E6%AC%A1&order=stow&page=1" ] }, { id: "117", type: "fix", title: "爱杀宝贝", deltime: "0", posttime: "1450319358", edittime: "1514972989", sttime: "1450232640", endtime: "1481941440", state: "1", icon: "https://i2.hdslb.com/bfs/active/93f817140c0daba690166492926e672720cf2c6e.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E7%88%B1%E6%9D%80%E5%AE%9D%E8%B4%9D" ] }, { id: "116", type: "fix", title: "说好的炸鸡块呢", deltime: "0", posttime: "1450319292", edittime: "1514972989", sttime: "1450232640", endtime: "1481941440", state: "1", icon: "https://i1.hdslb.com/bfs/active/a141a5222fdb51ff8507b34c24f8fecb7ba292da.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E8%AF%B4%E5%A5%BD%E7%9A%84%E7%82%B8%E9%B8%A1%E5%9D%97%E5%91%A2" ] }, { id: "115", type: "fix", title: "一拳超人", deltime: "0", posttime: "1450319257", edittime: "1514972989", sttime: "1450232640", endtime: "1481941440", state: "1", icon: "https://i2.hdslb.com/bfs/active/e1da0f5ff76f5640c0814c708299ae4a96589b61.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E4%B8%80%E6%8B%B3%E8%B6%85%E4%BA%BA" ] }, { id: "113", type: "fix", title: "彩虹小马", deltime: "0", posttime: "1450177764", edittime: "1514972989", sttime: "1450091100", endtime: "1481799900", state: "1", icon: "https://i0.hdslb.com/bfs/active/36b484b752de1071f50c40bdc7f554a9d9fc3125.gif", weight: "0", links: [ "https://search.bilibili.com/video?keyword=%E5%BD%A9%E8%99%B9%E5%B0%8F%E9%A9%AC&tids_1=119" ] }, { id: "112", type: "fix", title: "掀桌", deltime: "0", posttime: "1450177692", edittime: "1514972989", sttime: "1450091100", endtime: "1481799900", state: "1", icon: "https://i2.hdslb.com/bfs/active/0a404aea7fe4d80a0289a8b9692fd9c3daa0eaff.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E6%8E%80%E6%A1%8C" ] }, { id: "111", type: "fix", title: "懒蛋蛋", deltime: "0", posttime: "1450177612", edittime: "1514972989", sttime: "1450091100", endtime: "1481799900", state: "1", icon: "https://i0.hdslb.com/bfs/active/4d10b8b58b4ae3cffda057bd2b22210fca3f5bc7.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E6%87%92%E8%9B%8B%E8%9B%8B" ] }, { id: "110", type: "fix", title: "巴拉拉小魔仙", deltime: "0", posttime: "1450091554", edittime: "1514972989", sttime: "1450091460", endtime: "1481713860", state: "1", icon: "https://i1.hdslb.com/bfs/active/7942ad0abd2efa9fbb0117857f48ffda3bb4f08d.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E5%B7%B4%E6%8B%89%E6%8B%89%E5%B0%8F%E9%AD%94%E4%BB%99" ] }, { id: "109", type: "fix", title: "海绵宝宝", deltime: "0", posttime: "1450091465", edittime: "1514972989", sttime: "1450080000", endtime: "1481702400", state: "1", icon: "https://i0.hdslb.com/bfs/active/07a5ffcadd977d01f63326a8a22f5563ddd5f2c9.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E6%B5%B7%E7%BB%B5%E5%AE%9D%E5%AE%9D" ] }, { id: "108", type: "fix", title: "错误的打开方式", deltime: "0", posttime: "1449800071", edittime: "1514972989", sttime: "1449799860", endtime: "1481421960", state: "1", icon: "https://i1.hdslb.com/bfs/active/ee3fb8667b58d5f0672281e37e7d2774226f007b.gif", weight: "0", links: [ "https://www.bilibili.com/topic/49.html" ] }, { id: "107", type: "fix", title: "不明真相的吃瓜围观群众", deltime: "0", posttime: "1449799961", edittime: "1514972989", sttime: "1449799860", endtime: "1481421960", state: "1", icon: "https://i0.hdslb.com/bfs/active/217fd837b0301bccf85aec2d5453d9f72ccc10a4.gif", weight: "0", links: [ "https://search.bilibili.com/all?keyword=%E4%B8%8D%E6%98%8E%E7%9C%9F%E7%9B%B8%E7%9A%84%20%E7%BE%A4%E4%BC%97" ] }, { id: "106", type: "fix", title: "天才麻将少女", deltime: "0", posttime: "1449660680", edittime: "1514972989", sttime: "1449574080", endtime: "1449660480", state: "1", icon: "https://i1.hdslb.com/bfs/active/46122d556af3b82bedb383edf4871ae69dc533ec.gif", weight: "0", links: [ "https://www.bilibili.com/topic/91.html" ] }, { id: "105", type: "fix", title: "新日暮里", deltime: "0", posttime: "1449660596", edittime: "1514972989", sttime: "1449574080", endtime: "1449660480", state: "1", icon: "https://i0.hdslb.com/bfs/active/cc008f466fb633ef4d70bb810b9d7cb9509f0512.gif", weight: "0", links: [ "https://search.bilibili.com/video?keyword=%E6%96%B0%E6%97%A5%E6%9A%AE%E9%87%8C&order=click" ] }, { id: "104", type: "fix", title: "洛天依", deltime: "0", posttime: "1449660566", edittime: "1514972989", sttime: "1501689300", endtime: "1449660480", state: "1", icon: "https://i1.hdslb.com/bfs/active/b3e8a4538679f2f2821fcc8390ad1de6ad9c7bca.gif", weight: "0", links: [ "https:https://www.bilibili.com/video/av12802603/" ] }, { id: "103", type: "fix", title: "as we can", deltime: "0", posttime: "1449660533", edittime: "1514972989", sttime: "1449573360", endtime: "1481282160", state: "1", icon: "https://i2.hdslb.com/bfs/active/dd7a46b549397fbe78dbac7ff3faa43c67ee393a.gif", weight: "0", links: [ "https://search.bilibili.com/video?keyword=%E6%AF%94%E5%88%A9&order=click" ] }, { id: "102", type: "fix", title: "我已经没什么好怕的了", deltime: "0", posttime: "1449660222", edittime: "1514972989", sttime: "1449573360", endtime: "1481282160", state: "1", icon: "https://i0.hdslb.com/bfs/active/a0e6bb9d5c2079ebb46d57e83e7568815a38439a.gif", weight: "0", links: [ "https://search.bilibili.com/video?keyword=%E9%AD%94%E6%B3%95%E5%B0%91%E5%A5%B3%E5%B0%8F%E5%9C%86&order=click" ] }, { id: "100", type: "fix", title: "齐天大圣", deltime: "0", posttime: "1449660124", edittime: "1514972989", sttime: "1449573360", endtime: "1481282160", state: "1", icon: "https://i2.hdslb.com/bfs/active/2c834cdbd53153adfd467dd310c3ef059e7a96d5.gif", weight: "0", links: [ "https://search.bilibili.com/video?keyword=%E5%A4%A7%E5%9C%A3&order=click" ] }, { id: "99", type: "fix", title: "复仇者联盟", deltime: "0", posttime: "1449660092", edittime: "1514972989", sttime: "1449573360", endtime: "1481282160", state: "1", icon: "https://i1.hdslb.com/bfs/active/f22ae79cab8b0a4c2b9e7c43eb7595e9413f15fc.gif", weight: "0", links: [ "https://search.bilibili.com/video?keyword=%E5%A4%8D%E4%BB%87%E8%80%85%E8%81%94%E7%9B%9F&order=click" ] }, { id: "98", type: "fix", title: "虎纹鲨鱼", deltime: "0", posttime: "1449660032", edittime: "1514972989", sttime: "1449573360", endtime: "1481282160", state: "1", icon: "https://i1.hdslb.com/bfs/active/ff4807a83fe328c93dcbd8e4aad6902f9d72e207.gif", weight: "0", links: [ "https://search.bilibili.com/video?keyword=%E8%99%8E%E7%BA%B9%E9%B2%A8%E9%B1%BC&order=click" ] }, { id: "97", type: "fix", title: "灌篮高手", deltime: "0", posttime: "1449659855", edittime: "1514972989", sttime: "1449573360", endtime: "1481282160", state: "1", icon: "https://i0.hdslb.com/bfs/active/7cbdca340d0194ef9a7c885ff1d226018d4d2f0b.gif", weight: "0", links: [ "https://search.bilibili.com/video?keyword=%E7%81%8C%E7%AF%AE%E9%AB%98%E6%89%8B&order=click" ] }, { id: "96", type: "fix", title: "duang", deltime: "0", posttime: "1449659802", edittime: "1514972989", sttime: "1449573360", endtime: "1481282160", state: "1", icon: "https://i2.hdslb.com/bfs/active/4b88188a05a189c4bd7bd8a44c58b9a52386cc93.gif", weight: "0", links: [ "https://search.bilibili.com/video?keyword=duang&order=click" ] }, { id: "95", type: "fix", title: "新华里业务员", deltime: "0", posttime: "1449629659", edittime: "1514972989", sttime: "1449540600", endtime: "1481249400", state: "1", icon: "https://i0.hdslb.com/bfs/active/79935d7683bd30722af393a5f91c9be6b13bc02e.gif", weight: "0", links: [ "https://search.bilibili.com/video?keyword=%E6%96%B0%E5%8D%8E%E9%87%8C%E4%B8%9A%E5%8A%A1%E5%91%98&tids_1=119&page=1" ] }, { id: "94", type: "fix", title: "挖掘机技术哪家强", deltime: "0", posttime: "1449629566", edittime: "1514972989", sttime: "1449540600", endtime: "1481249400", state: "1", icon: "https://i2.hdslb.com/bfs/active/66420b2addff0aadd92942f7b0ccc86c1f3c541d.gif", weight: "0", links: [ "https://search.bilibili.com/video?keyword=%E6%8C%96%E6%8E%98%E6%9C%BA%E6%8A%80%E6%9C%AF%E5%93%AA%E5%AE%B6%E5%BC%BA&tids_1=119" ] }, { id: "93", type: "fix", title: "德国boy", deltime: "0", posttime: "1449629115", edittime: "1514972989", sttime: "1449540600", endtime: "1481249400", state: "1", icon: "https://i1.hdslb.com/bfs/active/ec41c58bbc9477cdba09eb39feecc180b14f44d2.gif", weight: "0", links: [ "https://search.bilibili.com/video?keyword=%E5%BE%B7%E5%9B%BDboy&tids_1=119" ] }, { id: "92", type: "fix", title: "梁逸峰", deltime: "0", posttime: "1449629017", edittime: "1514972989", sttime: "1449540600", endtime: "1481249400", state: "1", icon: "https://i2.hdslb.com/bfs/active/db237b35ab764c3feb4e2455e2baed1f63cbc0a2.gif", weight: "0", links: [ "https://search.bilibili.com/video?keyword=%E6%A2%81%E9%80%B8%E5%B3%B0&page=1" ] }, { id: "91", type: "fix", title: "元首", deltime: "0", posttime: "1449628671", edittime: "1514972989", sttime: "1449540600", endtime: "1481249400", state: "1", icon: "https://i0.hdslb.com/bfs/active/623ea657e69af03fe78667bb15c59048e6c957dc.gif", weight: "0", links: [ "https://www.bilibili.com/topic/65.html" ] }, { id: "90", type: "fix", title: "立flag", deltime: "0", posttime: "1449628642", edittime: "1514972989", sttime: "1449540600", endtime: "1481249400", state: "1", icon: "https://i1.hdslb.com/bfs/active/ea8e430bb0478b642ba2e34bd590b03467cbc934.gif", weight: "0", links: [ "https://search.bilibili.com/video?keyword=%E7%AB%8Bflag" ] }, { id: "89", type: "fix", title: "核爆神曲", deltime: "0", posttime: "1449628445", edittime: "1514972989", sttime: "1449540600", endtime: "1481249400", state: "1", icon: "https://i0.hdslb.com/bfs/active/e6196afc5e86c1346a5009b16f14dcbe3d6ae73d.gif", weight: "0", links: [ "https://search.bilibili.com/video?keyword=%E6%A0%B8%E7%88%86%E7%A5%9E%E6%9B%B2" ] }, { id: "88", type: "fix", title: "妈妈今天不在家", deltime: "0", posttime: "1449628262", edittime: "1514972989", sttime: "1449540600", endtime: "1481249400", state: "1", icon: "https://i2.hdslb.com/bfs/active/49d2a06f3f054e8dcbc80ab354662d62fc885c49.gif", weight: "0", links: [ "https://search.bilibili.com/video?keyword=%E5%A6%88%E5%A6%88%E4%BB%8A%E5%A4%A9%E4%B8%8D%E5%9C%A8%E5%AE%B6" ] }, { id: "87", type: "fix", title: "金馆长", deltime: "0", posttime: "1449627879", edittime: "1514972989", sttime: "1449540600", endtime: "1481249400", state: "1", icon: "https://i2.hdslb.com/bfs/active/ee76be61c03788b767616079684af071807c396d.gif", weight: "0", links: [ "https://search.bilibili.com/video?keyword=%E9%87%91%E9%A6%86%E9%95%BF" ] }, { id: "86", type: "fix", title: "jojo", deltime: "0", posttime: "1449627835", edittime: "1514972989", sttime: "1449540600", endtime: "1481249400", state: "1", icon: "https://i0.hdslb.com/bfs/active/6c153ef7a2f96aec5ea318fa73d5b9cb93f95f34.gif", weight: "0", links: [ "https://search.bilibili.com/video?keyword=jojo" ] }, { id: "85", type: "fix", title: "怪物猎人", deltime: "0", posttime: "1449627557", edittime: "1514972989", sttime: "1449540600", endtime: "1481249400", state: "1", icon: "https://i1.hdslb.com/bfs/active/63fe1f03c513c771add893b9b9f254610b0646b0.gif", weight: "0", links: [ "https://search.bilibili.com/video?keyword=%E6%80%AA%E7%89%A9%E7%8C%8E%E4%BA%BA" ] }, { id: "84", type: "fix", title: "嘿嘿嘿", deltime: "0", posttime: "1449627454", edittime: "1514972989", sttime: "1449540600", endtime: "1481249400", state: "1", icon: "https://i0.hdslb.com/bfs/active/f12a086b603fccad6e7342d5d4e53198743daba7.gif", weight: "0", links: [ "https://search.bilibili.com/video?keyword=%E5%98%BF%E5%98%BF%E5%98%BF" ] }, { id: "83", type: "fix", title: "昆特牌", deltime: "0", posttime: "1449490981", edittime: "1514972989", sttime: "1449404460", endtime: "1449490860", state: "1", icon: "https://i1.hdslb.com/bfs/active/b4f53871964fe4a48eb4c68f0a4ca096adb30a55.gif", weight: "0", links: [ "https://search.bilibili.com/video?keyword=%E6%98%86%E7%89%B9%E7%89%8C" ] }, { id: "82", type: "fix", title: "梁非凡", deltime: "0", posttime: "1449490637", edittime: "1514972989", sttime: "1449383460", endtime: "1481092260", state: "1", icon: "https://i2.hdslb.com/bfs/active/2a4386ea51dc1853344f3bb6d3fe677f6a0d8cec.gif", weight: "0", links: [ "https://search.bilibili.com/video?keyword=%E6%A2%81%E9%9D%9E%E5%87%A1&page=1&tids_1=119" ] }, { id: "81", type: "fix", title: "葛平", deltime: "0", posttime: "1449490495", edittime: "1514972989", sttime: "1449383460", endtime: "1481092260", state: "1", icon: "https://i0.hdslb.com/bfs/active/dfc68ef4c18aebff26829374c50479f59f1e9b71.gif", weight: "0", links: [ "https://search.bilibili.com/video?keyword=%E8%91%9B%E5%B9%B3&page=1" ] }, { id: "80", type: "fix", title: "紫妈永远17岁", deltime: "0", posttime: "1449490417", edittime: "1514972989", sttime: "1449383460", endtime: "1481092260", state: "1", icon: "https://i0.hdslb.com/bfs/active/456983ac8563c71788f3e16c22be89baa0a16a9e.gif", weight: "0", links: [ "https://search.bilibili.com/video?keyword=%E7%B4%AB%E5%A6%88%E6%B0%B8%E8%BF%9C17%E5%B2%81" ] }, { id: "79", type: "fix", title: "潜行吧!奈亚子W", deltime: "0", posttime: "1449489735", edittime: "1514972989", sttime: "1449383460", endtime: "1481092260", state: "1", icon: "https://i1.hdslb.com/bfs/active/cb75081f16caf785f49a5cad13001e0c3da4e66e.gif", weight: "0", links: [ "https://www.bilibili.com/bangumi/i/408/" ] }, { id: "78", type: "fix", title: "魔法少女小圆", deltime: "0", posttime: "1449489553", edittime: "1514972989", sttime: "1449383460", endtime: "1481092260", state: "1", icon: "https://i2.hdslb.com/bfs/active/c0e0e97e31ac090dce6cbcd5c9fe225525764baa.gif", weight: "0", links: [ "https://www.bilibili.com/search?keyword=%E9%AD%94%E6%B3%95%E5%B0%91%E5%A5%B3%E5%B0%8F%E5%9C%86&orderby=click&type=comprehensive&tids=0&tidsC=&arctype=all" ] }, { id: "77", type: "fix", title: "we will rock you", deltime: "0", posttime: "1449226983", edittime: "1514972989", sttime: "1449226260", endtime: "1480848660", state: "1", icon: "https://i2.hdslb.com/bfs/active/b35357cc5e2916c55f34a7733469fb7ca2729af4.gif", weight: "0", links: [ "https://www.bilibili.com/search?keyword=WE+WILL+ROCK+YOU&orderby=ranklevel&type=comprehensive&tids=0&tidsC=&arctype=all" ] }, { id: "76", type: "fix", title: "金坷垃", deltime: "0", posttime: "1449226898", edittime: "1514972989", sttime: "1449226260", endtime: "1480848660", state: "1", icon: "https://i1.hdslb.com/bfs/active/8ca7510f973e706b592f40b09b93f332bfdec273.gif", weight: "0", links: [ "https://www.bilibili.com/search?keyword=%E9%87%91%E5%9D%B7%E6%8B%89&orderby=click&type=comprehensive&tids=0&tidsC=&arctype=all" ] }, { id: "75", type: "fix", title: "口袋妖怪", deltime: "0", posttime: "1449226636", edittime: "1514972989", sttime: "1449198660", endtime: "1480848660", state: "1", icon: "https://i2.hdslb.com/bfs/active/8d7724f290cc66fd3a613c3fc57f55eaa24a0a33.gif", weight: "0", links: [ "https://www.bilibili.com/search?keyword=%E5%8F%A3%E8%A2%8B%E5%A6%96%E6%80%AA&orderby=click&type=comprehensive&tids=0&tidsC=&arctype=all" ] }, { id: "74", type: "fix", title: "蓝蓝路", deltime: "0", posttime: "1449226386", edittime: "1514972989", sttime: "1449198660", endtime: "1480848660", state: "1", icon: "https://i2.hdslb.com/bfs/active/8291a67c542f215b75c27332ea7910ffb1622335.gif", weight: "0", links: [ "https://www.bilibili.com/search?keyword=%E8%93%9D%E8%93%9D%E8%B7%AF&orderby=click&type=comprehensive&tids=0&tidsC=&arctype=all" ] }, { id: "73", type: "fix", title: "甩葱歌", deltime: "0", posttime: "1449142744", edittime: "1514972989", sttime: "1449054840", endtime: "1480763640", state: "1", icon: "https://i1.hdslb.com/bfs/active/0fbb5f302cdb98dd0faad421692438ab6a25db0a.gif", weight: "0", links: [ "https://www.bilibili.com/search?keyword=%E7%94%A9%E8%91%B1%E6%AD%8C&orderby=click&type=comprehensive&tids=0&tidsC=&arctype=all" ] }, { id: "72", type: "fix", title: "辐射4", deltime: "0", posttime: "1449142425", edittime: "1514972989", sttime: "1449054840", endtime: "1480763640", state: "1", icon: "https://i1.hdslb.com/bfs/active/e626c7e0fc602e320918b3e69a555e77e9be0426.gif", weight: "0", links: [ "https://www.bilibili.com/search?keyword=%E8%BE%90%E5%B0%844&orderby=click&type=comprehensive&tids=0&tidsC=&arctype=all" ] }, { id: "71", type: "fix", title: "贝爷", deltime: "0", posttime: "1449142186", edittime: "1514972989", sttime: "1449054840", endtime: "1480763640", state: "1", icon: "https://i1.hdslb.com/bfs/active/8db7647e99d3f4c9fca541811bf4433be0756fd4.gif", weight: "0", links: [ "https://www.bilibili.com/sp/%E8%B4%9D%E5%B0%94%C2%B7%E6%A0%BC%E9%87%8C%E5%B0%94%E6%96%AF" ] }, { id: "70", type: "fix", title: "膝盖请收下", deltime: "0", posttime: "1449141465", edittime: "1514972989", sttime: "1449054840", endtime: "1480763640", state: "1", icon: "https://i0.hdslb.com/bfs/active/1359a42b50c41d22d4ba5804b9b74be0a19aaed0.gif", weight: "0", links: [ "https://www.bilibili.com/search?keyword=%E8%86%9D%E7%9B%96+%E8%AF%B7%E6%94%B6%E4%B8%8B&orderby=ranklevel&type=comprehensive&tids=0&tidsC=&arctype=all" ] }, { id: "69", type: "fix", title: "半泽直树", deltime: "0", posttime: "1449141296", edittime: "1514972989", sttime: "1449054780", endtime: "1480763580", state: "1", icon: "https://i1.hdslb.com/bfs/active/3fb9ae473fe50cd13af3bc6e2994b358e3004249.gif", weight: "0", links: [ "https://www.bilibili.com/search?keyword=%E5%8D%8A%E6%B3%BD%E7%9B%B4%E6%A0%91&orderby=default&type=comprehensive&tids=0&tidsC=&arctype=all" ] }, { id: "68", type: "fix", title: "是在下输了", deltime: "0", posttime: "1449055280", edittime: "1514972989", sttime: "1448967420", endtime: "1480676220", state: "1", icon: "https://i1.hdslb.com/bfs/active/9201b6e0682a33dc5d33017767642735f8819c5a.gif", weight: "0", links: [ "https://www.bilibili.com/search?keyword=%E6%98%AF%E5%9C%A8%E4%B8%8B%E8%BE%93%E4%BA%86&orderby=click&type=comprehensive&tids=0&tidsC=&arctype=all" ] }, { id: "67", type: "fix", title: "雪姨", deltime: "0", posttime: "1449054038", edittime: "1514972989", sttime: "1448967420", endtime: "1480676220", state: "1", icon: "https://i1.hdslb.com/bfs/active/30c510982561b15f427c9689607527d168f174f7.gif", weight: "0", links: [ "https://www.bilibili.com/search?keyword=%E9%9B%AA%E5%A7%A8&orderby=click&type=comprehensive&tids=0&tidsC=&arctype=all" ] }, { id: "66", type: "fix", title: "狗带", deltime: "0", posttime: "1449053990", edittime: "1514972989", sttime: "1448967420", endtime: "1480676220", state: "1", icon: "https://i1.hdslb.com/bfs/active/8d4c72dd1a4d1948d03ed3041fc2417ba70ab2fd.gif", weight: "0", links: [ "https://www.bilibili.com/search?keyword=%E7%8B%97%E5%B8%A6&orderby=click&type=comprehensive&tids=0&tidsC=&arctype=all" ] }, { id: "65", type: "fix", title: "lovelive", deltime: "0", posttime: "1449053948", edittime: "1514972989", sttime: "1448967420", endtime: "1480676220", state: "1", icon: "https://i0.hdslb.com/bfs/active/21453207026e5597ebc67dad369eeeca41342c66.gif", weight: "0", links: [ "https://www.bilibili.com/search?keyword=lovelive&orderby=click&type=comprehensive&tids=0&tidsC=&arctype=all" ] }, { id: "64", type: "fix", title: "红警", deltime: "0", posttime: "1449039971", edittime: "1514972989", sttime: "1448947980", endtime: "1480656780", state: "1", icon: "https://i0.hdslb.com/bfs/active/97b1233a87d2aaaafac7ef4d405ce762f2355128.gif", weight: "0", links: [ "https://www.bilibili.com/search?keyword=%E7%BA%A2%E8%AD%A6&orderby=click&type=comprehensive&tids=0&tidsC=&arctype=all" ] }, { id: "63", type: "fix", title: "摸鱼", deltime: "0", posttime: "1449039899", edittime: "1514972989", sttime: "1448947980", endtime: "1480656780", state: "1", icon: "https://i2.hdslb.com/bfs/active/d359d29d5876325f1c7e097dcdaf4586be228eb8.gif", weight: "0", links: [ "https://www.bilibili.com/search?keyword=%E6%91%B8%E9%B1%BC&orderby=scores&type=comprehensive&tids=0&tidsC=&arctype=all" ] }, { id: "62", type: "fix", title: "just you know why", deltime: "0", posttime: "1449039812", edittime: "1514972989", sttime: "1448947980", endtime: "1480656780", state: "1", icon: "https://i0.hdslb.com/bfs/active/226d73e078c81e22748c67ba9bc5f8e5fc01c885.gif", weight: "0", links: [ "https://www.bilibili.com/search?keyword=just+you+know+why&orderby=default&type=comprehensive&tids=0&tidsC=&arctype=all" ] }, { id: "61", type: "fix", title: "你为什么这么屌", deltime: "0", posttime: "1449039696", edittime: "1514972989", sttime: "1448947980", endtime: "1480656780", state: "1", icon: "https://i2.hdslb.com/bfs/active/79254877a35287d3fde697e8cb37e77d5fe0e156.gif", weight: "0", links: [ "https://www.bilibili.com/search?keyword=%E4%BD%A0%E4%B8%BA%E4%BB%80%E4%B9%88%E8%BF%99%E4%B9%88%E5%8F%BC&orderby=click&type=comprehensive&tids=0&tidsC=&arctype=all" ] }, { id: "60", type: "fix", title: "坦克", deltime: "0", posttime: "1449039535", edittime: "1514972989", sttime: "1448947980", endtime: "1480656780", state: "1", icon: "https://i0.hdslb.com/bfs/active/11637f112277371c854a7fc9e6457c5a809f4c01.gif", weight: "0", links: [ "https://www.bilibili.com/search?keyword=%E5%9D%A6%E5%85%8B&orderby=click&type=comprehensive&tids=0&tidsC=&arctype=all" ] }, { id: "59", type: "fix", title: "bilibili", deltime: "0", posttime: "1449039500", edittime: "1514972989", sttime: "1448947980", endtime: "1480656780", state: "1", icon: "https://i1.hdslb.com/bfs/active/151fa668c8f083a8ed3f7a2be2ffcc652c8f0b1f.gif", weight: "0", links: [ "https://www.bilibili.com/search?keyword=bilibili&orderby=click&type=comprehensive&tids=0&tidsC=&arctype=all" ] }, { id: "58", type: "fix", title: "应援", deltime: "0", posttime: "1449037131", edittime: "1514972989", sttime: "1448947980", endtime: "1480656780", state: "1", icon: "https://i2.hdslb.com/bfs/active/efc7fac0df51a458d60433014ba438037080218e.gif", weight: "0", links: [ "https://www.bilibili.com/search?keyword=%E5%BA%94%E6%8F%B4&orderby=click&type=comprehensive&tids=0&tidsC=&arctype=all" ] }, { id: "57", type: "fix", title: "上古卷轴", deltime: "0", posttime: "1448968231", edittime: "1514972989", sttime: "1448872740", endtime: "1480581540", state: "1", icon: "https://i1.hdslb.com/bfs/active/b6d8ef3404bbf6582e3498c981dabee994a6d029.gif", weight: "0", links: [ "https://www.bilibili.com/search?keyword=%E4%B8%8A%E5%8F%A4%E5%8D%B7%E8%BD%B4&orderby=click&type=comprehensive&tids=0&tidsC=&arctype=all" ] }, { id: "56", type: "fix", title: "八尾妖姬抱回家", deltime: "0", posttime: "1448968097", edittime: "1514972989", sttime: "1448872740", endtime: "1480581540", state: "1", icon: "https://i2.hdslb.com/bfs/active/b727e4367bf7532d76da3b1439c5301794b0b5ec.gif", weight: "0", links: [ "https://www.bilibili.com/search?keyword=%E5%85%AB%E5%B0%BE%E5%A6%96%E5%A7%AC%E6%8A%B1%E5%9B%9E%E5%AE%B6&orderby=click&type=comprehensive&tids=0&tidsC=&arctype=all" ] }, { id: "55", type: "fix", title: "要优雅不要污", deltime: "0", posttime: "1448967687", edittime: "1514972989", sttime: "1448872740", endtime: "1480581540", state: "1", icon: "https://i1.hdslb.com/bfs/active/e5eb20641bf6a07fbb5fb1516f9cf088fd636545.gif", weight: "0", links: [ "https://www.bilibili.com/search?keyword=%E8%A6%81%E4%BC%98%E9%9B%85%E4%B8%8D%E8%A6%81%E6%B1%A1&orderby=click&type=comprehensive&tids=0&tidsC=&arctype=all" ] }, { id: "54", type: "fix", title: "悲伤", deltime: "0", posttime: "1448967507", edittime: "1514972989", sttime: "1448872740", endtime: "1480581540", state: "1", icon: "https://i0.hdslb.com/bfs/active/60ea1dfbeb389de26d0d0ae13c6fa5f696a38d04.gif", weight: "0", links: [ "https://www.bilibili.com/search?keyword=%E6%82%B2%E4%BC%A4&orderby=click&type=comprehensive&tids=0&tidsC=&arctype=all" ] }, { id: "53", type: "fix", title: "比利", deltime: "0", posttime: "1448967484", edittime: "1514972989", sttime: "1448872740", endtime: "1480581540", state: "1", icon: "https://i2.hdslb.com/bfs/active/2b1a9d34de4031aa40c69324d999912669527383.gif", weight: "0", links: [ "https://www.bilibili.com/search?keyword=%E6%AF%94%E5%88%A9&orderby=click&type=comprehensive&tids=0&tidsC=&arctype=all" ] }, { id: "52", type: "fix", title: "费玉污", deltime: "0", posttime: "1448967407", edittime: "1514972989", sttime: "1448872740", endtime: "1480581540", state: "1", icon: "https://i0.hdslb.com/bfs/active/5f9b620676eefa92fef945f29b419bcbae32cabc.gif", weight: "0", links: [ "https://www.bilibili.com/search?keyword=%E8%B4%B9%E7%8E%89%E6%B1%A1&orderby=click&type=comprehensive&tids=0&tidsC=&arctype=all" ] }, { id: "51", type: "fix", title: "prprpr", deltime: "0", posttime: "1448967122", edittime: "1514972989", sttime: "1448872740", endtime: "1480581540", state: "1", icon: "https://i2.hdslb.com/bfs/active/68fecc5fe1dd097ce8ae4de96e4966f2e4dafc59.gif", weight: "0", links: [ "https://www.bilibili.com/search?keyword=prprpr&orderby=click&type=comprehensive&tids=0&tidsC=&arctype=all" ] }, { id: "50", type: "fix", title: "熊猫", deltime: "0", posttime: "1448966693", edittime: "1514972989", sttime: "1448872740", endtime: "1480581540", state: "1", icon: "https://i0.hdslb.com/bfs/active/56707d7fd0e76e5d42cf14811af3b6fe0b7cc905.gif", weight: "0", links: [ "https://www.bilibili.com/search?keyword=%E7%86%8A%E7%8C%AB&orderby=click&type=comprehensive&tids=0&tidsC=&arctype=all" ] }, { id: "49", type: "fix", title: "普通disco", deltime: "0", posttime: "1448966337", edittime: "1514972989", sttime: "1448872740", endtime: "1480581540", state: "1", icon: "https://i1.hdslb.com/bfs/active/4e75ec60d9265407c8fccaecbc748b9a15122f69.gif", weight: "0", links: [ "https://www.bilibili.com/search?keyword=%E6%99%AE%E9%80%9Adisco&orderby=click&type=comprehensive&tids=0&tidsC=&arctype=all" ] }, { id: "48", type: "fix", title: "恋爱研究所", deltime: "0", posttime: "1448966021", edittime: "1514972989", sttime: "1448872740", endtime: "1480581540", state: "1", icon: "https://i0.hdslb.com/bfs/active/575041c9e3aa6c52c29ddb80bc99c6fef533ed6b.gif", weight: "0", links: [ "https://www.bilibili.com/search?keyword=%E6%81%8B%E7%88%B1%E7%A0%94%E7%A9%B6%E6%89%80&orderby=click&type=comprehensive&tids=0&tidsC=&arctype=all" ] }, { id: "47", type: "fix", title: "yoooooooooooooooo", deltime: "0", posttime: "1448965872", edittime: "1514972989", sttime: "1448872740", endtime: "1480581540", state: "1", icon: "https://i2.hdslb.com/bfs/active/f230203607de02eb3f487e4053a85df7ac940730.gif", weight: "0", links: [ "https://www.bilibili.com/search?keyword=yoooooooooooo&orderby=ranklevel&type=comprehensive&tids=0&tidsC=&arctype=all" ] }, { id: "46", type: "fix", title: "doge", deltime: "0", posttime: "1448965833", edittime: "1514972989", sttime: "1448872740", endtime: "1480581540", state: "1", icon: "https://i2.hdslb.com/bfs/active/ae9c1d743b552aa38dfcc6e27fc8bbf5a333dc6f.gif", weight: "0", links: [ "https://www.bilibili.com/search?keyword=doge&orderby=click&type=comprehensive&tids=0&tidsC=&arctype=all" ] }, { id: "45", type: "fix", title: "装逼", deltime: "0", posttime: "1448965714", edittime: "1514972989", sttime: "1448872740", endtime: "1480581540", state: "1", icon: "https://i2.hdslb.com/bfs/active/51ae965b6a138305e7be866d161426cda2e98479.gif", weight: "0", links: [ "https://www.bilibili.com/search?keyword=%E8%A3%85%E9%80%BC&orderby=click&type=comprehensive&tids=0&tidsC=&arctype=all" ] }, { id: "44", type: "fix", title: "2233", deltime: "0", posttime: "1448965467", edittime: "1514972989", sttime: "1448872740", endtime: "1480581540", state: "1", icon: "https://i0.hdslb.com/bfs/active/4b7bc004f638767826158b83f39758ccd2371062.gif", weight: "0", links: [ "https://www.bilibili.com/search?keyword=2233&orderby=default&type=comprehensive&tids=0&tidsC=&arctype=all" ] }, { id: "43", type: "fix", title: "局座", deltime: "0", posttime: "1448965352", edittime: "1514972989", sttime: "1448872740", endtime: "1480581540", state: "1", icon: "https://i1.hdslb.com/bfs/active/0a71119c1954bef52828c6780765de6a94f6769c.gif", weight: "0", links: [ "https://www.bilibili.com/search?keyword=%E5%B1%80%E5%BA%A7&orderby=click&type=comprehensive&tids=0&tidsC=&arctype=all" ] }, { id: "34", type: "fix", title: "李狗嗨", deltime: "0", posttime: "1448952587", edittime: "1514972989", sttime: "1448950020", endtime: "1483164420", state: "1", icon: "https://i0.hdslb.com/bfs/active/1b9a8ea64110b8ea14342be63e8f22c703d0023d.gif", weight: "0", links: [ "https://www.bilibili.com/search?keyword=legal+high&orderby=click&type=comprehensive&tids=0&tidsC=&arctype=all" ] }, { id: "33", type: "fix", title: "扭腰舞2", deltime: "0", posttime: "1448952498", edittime: "1514972989", sttime: "1448950020", endtime: "1483164420", state: "1", icon: "https://i1.hdslb.com/bfs/active/c1eaa50e18c9e3ee06b9dd024262ff008eda6700.gif", weight: "0", links: [ "https://www.bilibili.com/search?keyword=%E6%89%AD%E8%85%B0%E8%88%9E&orderby=click&type=comprehensive&tids=0&tidsC=&arctype=all" ] }, { id: "32", type: "fix", title: "扭腰舞", deltime: "0", posttime: "1448952395", edittime: "1514972989", sttime: "1448950020", endtime: "1483164420", state: "1", icon: "https://i2.hdslb.com/bfs/active/6a642bd3ba9ca866bdf0b1455e29fa27ffb580fe.gif", weight: "0", links: [ "https://www.bilibili.com/search?keyword=%E6%89%AD%E8%85%B0%E8%88%9E&orderby=click&type=comprehensive&tids=0&tidsC=&arctype=all" ] }, { id: "31", type: "fix", title: "小埋", deltime: "0", posttime: "1448952295", edittime: "1514972989", sttime: "1448950020", endtime: "1483164420", state: "1", icon: "https://i2.hdslb.com/bfs/active/bdd59786ad48ac3c43cae29377b203a81d434035.gif", weight: "0", links: [ "https://www.bilibili.com/search?keyword=%E5%B0%8F%E5%9F%8B&orderby=click&type=comprehensive&tids=0&tidsC=&arctype=all" ] } ], random: [], random_link: null, ea_public: null }; // src/css/avatar-animation.css var avatar_animation_default = "/* 鼠标放在顶栏上的动效 */\\r\\n.bili-header-m .profile-info .i-face .face {\\r\\n border: 0\\r\\n}\\r\\n\\r\\n.bili-header-m .profile-info .i-face .pendant {\\r\\n transform: scale(0.5);\\r\\n width: 112px;\\r\\n height: 112px;\\r\\n left: -41px;\\r\\n bottom: -46px;\\r\\n opacity: 0;\\r\\n transition: opacity .1s ease-in\\r\\n}\\r\\n\\r\\n.bili-header-m .profile-info.on .i-face {\\r\\n left: 8px !important;\\r\\n top: 0 !important;\\r\\n height: 32px !important;\\r\\n width: 32px !important;\\r\\n transform: translateY(10px) translateX(-16px) scale(2);\\r\\n transform-origin: top left\\r\\n}\\r\\n\\r\\n.bili-header-m .profile-info.on .i-face .legalize {\\r\\n transform: scale(0.5) translate(10px, 15px)\\r\\n}\\r\\n\\r\\n.bili-header-m .profile-info.on .i-face .pendant {\\r\\n opacity: 1\\r\\n}\\r\\n\\r\\n.bili-header-m .profile-info.on .i-face .face {\\r\\n border: 0;\\r\\n box-shadow: 0 0 0 2px #fff\\r\\n}\\r\\n\\r\\n.bili-header-m .profile-info.on .i-face.scale-in {\\r\\n transform: translateY(5px) translateX(-10px) scale(1.75)\\r\\n}\\r\\n\\r\\n.bili-header-m .profile-info.on .scale-in .face {\\r\\n height: 32px;\\r\\n width: 32px\\r\\n}\\r\\n\\r\\n.bili-header-m .profile-info.on .i-face.scale-in .legalize {\\r\\n transform: scale(0.5) translate(38px, 48px)\\r\\n}"; // src/css/message.css var message_default = "/* 修复消息页样式 */\\r\\n.container[data-v-6969394c] {\\r\\n height: calc(100vh - 42px) !important;\\r\\n}\\r\\n\\r\\n.container[data-v-1c9150a9] {\\r\\n height: calc(100vh - 42px) !important;\\r\\n}\\r\\n\\r\\n.im-root,\\r\\n.im-root .im-list-box * {\\r\\n font-size: 12px;\\r\\n line-height: 42px;\\r\\n}\\r\\n\\r\\n.im-root .im-list-box {\\r\\n width: 100%;\\r\\n overflow: visible;\\r\\n}\\r\\n\\r\\n.im-root .im-list-box .im-list {\\r\\n line-height: 42px;\\r\\n height: 42px;\\r\\n}\\r\\n\\r\\n.im-root .im-list-box .im-notify.im-number {\\r\\n height: 14px;\\r\\n line-height: 13px;\\r\\n border-radius: 10px;\\r\\n padding: 1px 3px;\\r\\n font-size: 12px;\\r\\n min-width: 20px;\\r\\n text-align: center;\\r\\n color: #fff;\\r\\n}\\r\\n\\r\\n.im-root .im-list-box .im-notify.im-number.im-center {\\r\\n top: 14px;\\r\\n left: 80px;\\r\\n}\\r\\n\\r\\n.im-root .im-list-box .im-notify.im-dot {\\r\\n top: 11px;\\r\\n right: -10px;\\r\\n width: 8px;\\r\\n height: 8px;\\r\\n border-radius: 100%;\\r\\n}\\r\\n\\r\\n.im-root .im-list-box .im-notify.im-dot.im-center {\\r\\n top: 16px;\\r\\n right: 20px;\\r\\n}"; // src/page/header.ts var Header = class _Header { /** locs列表 */ static locs = [1576, 1612, 1580, 1920, 1584, 1588, 1592, 3129, 1600, 1608, 1604, 1596, 2210, 1634, 142]; /** 缓存已请求内容 */ static record = {}; /** 资源id */ static get rid() { return this.resourceId(); } /** 页面固定的资源id */ static prid = 0; /** tid对照表 */ static tid = { 1: 1576, 13: 1612, 167: 1920, 3: 1580, 129: 1584, 4: 1588, 36: 1592, 160: 1600, 119: 1608, 155: 1604, 165: 1620, 166: 1620, 5: 1596, 23: 1634, 11: 1616, 181: 2210, 177: 2260, 188: 3129 }; /** * 根据页面返回resourceId * @returns resourceId */ static resourceId() { var _a3; const tid = window.bid || window.tid || window.topid; if (tid) { return (_a3 = this.tid[tid]) != null ? _a3 : 142; } if (location.href.includes("v/douga")) return 1576; if (location.href.includes("/anime")) return 1612; if (location.href.includes("v/music")) return 1580; if (location.href.includes("/guochuang")) return 1920; if (location.href.includes("v/dance")) return 1584; if (location.href.includes("v/game")) return 1588; if (location.href.includes("v/knowledge")) return 1592; if (location.href.includes("v/tech")) return 3129; if (location.href.includes("v/life")) return 1600; if (location.href.includes("v/kichiku")) return 1608; if (location.href.includes("v/fashion")) return 1604; if (location.href.includes("v/ent")) return 1596; if (location.href.includes("v/cinephile")) return 2210; if (location.href.includes("/cinema")) return 1634; return 142; } /** 顶栏分区 */ static primaryMenu() { poll(() => document.querySelector("#primary_menu"), (d) => { const vue = d.__vue__; vue.menuList.forEach((d2, i, s) => { switch (d2.name) { case "动画": s[i].sub = [{ "name": "MAD·AMV", "route": "mad", "tid": 24, "ps": 15, "rps": 10, "ad": { "active": true, "dataLocId": 151 }, "desc": "具有一定制作程度的动画或静画的二次创作视频", "url": "//www.bilibili.com/video/douga-mad-1.html" }, { "name": "MMD·3D", "route": "mmd", "tid": 25, "ps": 15, "rps": 10, "ad": { "active": true, "dataLocId": 152 }, "desc": "使用MMD(MikuMikuDance)和其他3D建模类软件制作的视频", "url": "//www.bilibili.com/video/douga-mmd-1.html" }, { "name": "短片·手书·配音", "route": "voice", "tid": 47, "ps": 15, "rps": 10, "desc": "追求创新并具有强烈特色的短片、手书(绘)及ACG相关配音", "url": "//www.bilibili.com/video/douga-voice-1.html" }, { "name": "手办·模玩", "route": "garage_kit", "tid": 210, "ps": 15, "rps": 10, "desc": "手办模玩的测评、改造或其他衍生内容", "url": "" }, { "name": "特摄", "route": "tokusatsu", "tid": 86, "ps": 15, "rps": 10, "desc": "特摄相关衍生视频", "url": "//www.bilibili.com/video/cinephile-tokusatsu.html" }, { "name": "综合", "route": "other", "tid": 27, "ps": 15, "rps": 10, "ad": { "active": true, "dataLocId": 153 }, "desc": "以动画及动画相关内容为素材,包括但不仅限于音频替换、杂谈、排行榜等内容", "url": "//www.bilibili.com/video/douga-else-1.html" }]; break; case "音乐": s[i].sub = [{ "name": "原创音乐", "route": "original", "tid": 28, "ps": 15, "rps": 10, "viewHotTag": true, "ad": { "active": true, "dataLocId": 243 }, "dpConfig": [{ "name": "一日", "value": 1 }, { "name": "三日", "value": 3 }], "desc": "原创歌曲及纯音乐,包括改编、重编曲及remix", "url": "//www.bilibili.com/video/music-original-1.html" }, { "name": "翻唱", "route": "cover", "tid": 31, "ps": 15, "rps": 10, "ad": { "active": true, "dataLocId": 245 }, "viewHotTag": true, "dpConfig": [{ "name": "一日", "value": 1 }, { "name": "三日", "value": 3 }], "desc": "对曲目的人声再演绎视频", "url": "//www.bilibili.com/video/music-Cover-1.html" }, { "name": "演奏", "route": "perform", "tid": 59, "ps": 15, "rps": 10, "viewHotTag": true, "dpConfig": [{ "name": "一日", "value": 1 }, { "name": "三日", "value": 3 }], "desc": "乐器和非传统乐器器材的演奏作品", "url": "//www.bilibili.com/video/music-perform-1.html" }, { "name": "VOCALOID·UTAU", "route": "vocaloid", "tid": 30, "ps": 15, "rps": 10, "viewHotTag": true, "ad": { "active": true, "dataLocId": 247 }, "dpConfig": [{ "name": "一日", "value": 1 }, { "name": "三日", "value": 3 }], "desc": "以VOCALOID等歌声合成引擎为基础,运用各类音源进行的创作", "url": "//www.bilibili.com/video/music-vocaloid-1.html" }, { "name": "音乐现场", "route": "live", "tid": 29, "ps": 15, "rps": 10, "viewHotTag": true, "dpConfig": [{ "name": "一日", "value": 1 }, { "name": "三日", "value": 3 }], "desc": "音乐表演的实况视频,包括官方/个人拍摄的综艺节目、音乐剧、音乐节、演唱会等", "url": "//www.bilibili.com/video/music-oped-1.html" }, { "name": "MV", "route": "mv", "tid": 193, "ps": 15, "rps": 10, "viewHotTag": true, "dpConfig": [{ "name": "一日", "value": 1 }, { "name": "三日", "value": 3 }], "desc": "为音乐作品配合拍摄或制作的音乐录影带(Music Video),以及自制拍摄、剪辑、翻拍MV", "url": "//www.bilibili.com/video/music-coordinate-1.html" }, { "name": "乐评盘点", "route": "commentary", "tid": 243, "ps": 15, "rps": 10, "viewHotTag": true, "dpConfig": [{ "name": "一日", "value": 1 }, { "name": "三日", "value": 3 }], "desc": "音乐类新闻、盘点、点评、reaction、榜单、采访、幕后故事、唱片开箱等", "url": "//www.bilibili.com/video/music-collection-1.html" }, { "name": "音乐教学", "route": "tutorial", "tid": 244, "ps": 15, "rps": 10, "viewHotTag": true, "dpConfig": [{ "name": "一日", "value": 1 }, { "name": "三日", "value": 3 }], "desc": "以音乐教学为目的的内容", "url": "//www.bilibili.com/video/music-collection-1.html" }, { "name": "音乐综合", "route": "other", "tid": 130, "ps": 15, "rps": 10, "viewHotTag": true, "dpConfig": [{ "name": "一日", "value": 1 }, { "name": "三日", "value": 3 }], "desc": "所有无法被收纳到其他音乐二级分区的音乐类视频", "url": "//www.bilibili.com/video/music-collection-1.html" }, { "name": "音频", "customZone": "Audio", "route": "audio", "url": "//www.bilibili.com/audio/home?musicType=music" }, { "name": "说唱", "url": "//www.bilibili.com/v/rap" }]; break; case "科技": s[i].name = "知识"; s[i].route = "knowledge"; s[i].sub = [{ "name": "科学科普", "route": "science", "tid": 201, "ps": 15, "rps": 10, "ad": { "active": true, "dataLocId": 261 }, "desc": "回答你的十万个为什么" }, { "name": "社科·法律·心理", "route": "social_science", "tid": 124, "ps": 15, "rps": 10, "ad": { "active": true, "dataLocId": 263 }, "desc": "基于社会科学、法学、心理学展开或个人观点输出的知识视频" }, { "name": "人文历史", "route": "humanity_history", "tid": 228, "ps": 15, "rps": 10, "desc": "看看古今人物,聊聊历史过往,品品文学典籍" }, { "name": "财经商业", "route": "business", "tid": 207, "ps": 15, "rps": 10, "desc": "说金融市场,谈宏观经济,一起畅聊商业故事" }, { "name": "校园学习", "route": "campus", "tid": 208, "ps": 15, "rps": 10, "ad": { "active": true, "dataLocId": 265 }, "desc": "老师很有趣,学生也有才,我们一起搞学习" }, { "name": "职业职场", "route": "career", "tid": 209, "ps": 15, "rps": 10, "desc": "职业分享、升级指南,一起成为最有料的职场人" }, { "name": "设计·创意", "route": "design", "tid": 229, "ps": 15, "rps": 10, "desc": "天马行空,创意设计,都在这里" }, { "name": "野生技能协会", "route": "skill", "tid": 122, "ps": 15, "rps": 10, "desc": "技能党集合,是时候展示真正的技术了" }]; break; case "数码": s[i].name = "科技"; s[i].route = "tech"; s[i].sub = [{ "name": "数码", "route": "digital", "tid": 95, "ps": 15, "rps": 10, "viewHotTag": true, "desc": "科技数码产品大全,一起来做发烧友", "url": "#" }, { "name": "软件应用", "route": "application", "tid": 230, "ps": 15, "rps": 10, "viewHotTag": true, "desc": "超全软件应用指南", "url": "#" }, { "name": "计算机技术", "route": "computer_tech", "tid": 231, "ps": 15, "rps": 10, "viewHotTag": true, "desc": "研究分析、教学演示、经验分享......有关计算机技术的都在这里", "url": "#" }, { "name": "科工机械", "route": "industry", "tid": 232, "ps": 15, "rps": 10, "viewHotTag": true, "desc": "从小芯片到大工程,一起见证科工力量", "url": "#" }, { "name": "极客DIY", "route": "diy", "tid": 233, "ps": 15, "rps": 10, "viewHotTag": true, "desc": "炫酷技能,极客文化,硬核技巧,准备好你的惊讶", "url": "#" }]; break; case "生活": s[i].sub = [{ "name": "搞笑", "route": "funny", "tid": 138, "ps": 15, "rps": 10, "ad": { "active": true, "dataLocId": 273 }, "desc": "各种沙雕有趣的搞笑剪辑,挑战,表演,配音等视频", "url": "//www.bilibili.com/video/ent_funny_1.html", "locid": 4204, "recommendId": 4210, "slider": { "width": 620, "height": 220 }, "customComponent": { "name": "Energy", "leftId": 4212, "rightId": 4218, "rightType": "slide" } }, { "name": "家居房产", "route": "home", "tid": 239, "ps": 15, "rps": 10, "ad": { "active": true, "dataLocId": 275 }, "desc": "与买房、装修、居家生活相关的分享", "url": "#" }, { "name": "手工", "route": "handmake", "tid": 161, "ps": 15, "rps": 10, "desc": "手工制品的制作过程或成品展示、教程、测评类视频", "url": "//www.bilibili.com/video/ent-handmake-1.html" }, { "name": "绘画", "route": "painting", "tid": 162, "ps": 15, "rps": 10, "desc": "绘画过程或绘画教程,以及绘画相关的所有视频", "url": "//www.bilibili.com/video/ent-painting-1.html" }, { "name": "日常", "route": "daily", "tid": 21, "ps": 15, "rps": 10, "desc": "记录日常生活,分享生活故事", "url": "//www.bilibili.com/video/ent-life-1.html" }]; break; case "鬼畜": s[i].sub = [{ "name": "鬼畜调教", "route": "guide", "tid": 22, "ps": 15, "rps": 10, "ad": { "active": true, "dataLocId": 285 }, "desc": "使用素材在音频、画面上做一定处理,达到与BGM一定的同步感", "url": "//www.bilibili.com/video/ent-Kichiku-1.html" }, { "name": "音MAD", "route": "mad", "tid": 26, "ps": 15, "rps": 10, "ad": { "active": true, "dataLocId": 287 }, "desc": "使用素材音频进行一定的二次创作来达到还原原曲的非商业性质稿件", "url": "//www.bilibili.com/video/douga-kichiku-1.html" }, { "name": "人力VOCALOID", "route": "manual_vocaloid", "tid": 126, "ps": 15, "rps": 10, "desc": "将人物或者角色的无伴奏素材进行人工调音,使其就像VOCALOID一样歌唱的技术", "url": "//www.bilibili.com/video/kichiku-manual_vocaloid-1.html" }, { "name": "鬼畜剧场", "route": "theatre", "tid": 216, "ps": 15, "rps": 10, "desc": "使用素材进行人工剪辑编排的有剧情的作品" }, { "name": "教程演示", "route": "course", "tid": 127, "ps": 10, "rps": 6, "rightComponent": { "name": "CmImgList", "id": 148 }, "ad": { "active": true, "dataLocId": 289 }, "hideDropdown": false, "desc": "鬼畜相关的教程演示", "url": "//www.bilibili.com/video/kichiku-course-1.html" }]; break; case "时尚": s[i].sub = [{ "name": "美妆护肤", "route": "makeup", "tid": 157, "ps": 15, "rps": 10, "ad": { "active": true, "dataLocId": 279 }, "desc": "彩妆护肤、美甲美发、仿妆、医美相关内容分享或产品测评", "url": "//www.bilibili.com/video/fashion-makeup-fitness-1.html" }, { "name": "穿搭", "route": "clothing", "tid": 158, "ps": 15, "rps": 10, "ad": { "active": true, "dataLocId": 281 }, "desc": "穿搭风格、穿搭技巧的展示分享,涵盖衣服、鞋靴、箱包配件、配饰(帽子、钟表、珠宝首饰)等", "url": "//www.bilibili.com/video/fashion-clothing-1.html" }, { "name": "时尚潮流", "route": "trend", "tid": 159, "ps": 15, "rps": 10, "desc": "时尚街拍、时装周、时尚大片,时尚品牌、潮流等行业相关记录及知识科普", "url": "#" }]; break; case "广告": s[i].name = "资讯"; s[i].route = "information"; s[i].tid = 202; s[i].sub = [{ "name": "热点", "route": "hotspot", "tid": 203, "ps": 18, "rps": 10, "desc": "全民关注的时政热门资讯" }, { "name": "环球", "route": "global", "tid": 204, "ps": 18, "rps": 10, "desc": "全球范围内发生的具有重大影响力的事件动态" }, { "name": "社会", "route": "social", "tid": 205, "ps": 18, "rps": 10, "desc": "日常生活的社会事件、社会问题、社会风貌的报道" }, { "name": "综合", "route": "multiple", "tid": 206, "ps": 18, "rps": 10, "desc": "除上述领域外其它垂直领域的综合资讯" }]; break; case "娱乐": s[i].sub = [{ "name": "综艺", "route": "variety", "tid": 71, "ps": 15, "rps": 10, "ad": { "active": true, "dataLocId": 267 }, "desc": "所有综艺相关,全部一手掌握!", "url": "//www.bilibili.com/video/ent-variety-1.html" }, { "name": "娱乐杂谈", "route": "talker", "tid": 241, "ps": 15, "rps": 10, "ad": { "active": true, "dataLocId": 269 }, "desc": "娱乐人物解读、娱乐热点点评、娱乐行业分析" }, { "name": "粉丝创作", "route": "fans", "tid": 242, "ps": 15, "rps": 10, "desc": "粉丝向创作视频" }, { "name": "明星综合", "route": "celebrity", "tid": 137, "ps": 15, "rps": 10, "desc": "娱乐圈动态、明星资讯相关" }]; break; } }); }); this.plaza(); this.indexIcon(); this.styleFix(); } static banner() { jsonpHook.async("api.bilibili.com/x/web-show/res/loc", (url) => { const rid = this.rid; this.record[rid] || (this.record[rid] = apiPageHeader({ resource_id: rid })); return true; }, async (url) => { const obj = new URL(url); const rid = this.rid; obj.searchParams.delete("callback"); url = obj.toJSON(); _Header.prid && (url.includes(String(_Header.prid)) || (url = url.replace("ids=", \`ids=\${_Header.prid}%2C\`))); const loc = await fetch(url).then((d) => d.json()); const header = await this.record[rid]; if (loc.data) { this.locs.forEach((d) => { loc.data[d] && (loc.data[d][0].pic = header && header.pic || "//i0.hdslb.com/bfs/activity-plat/static/20171220/68a052f664e8414bb594f9b00b176599/images/90w1lpp6ry.png", loc.data[d][0].litpic = header && header.litpic, loc.data[d][0].url = header && header.url || "", loc.data[d][0].title = header && header.name || ""); if (url.includes("loc?") && obj.searchParams.get("id") == String(d)) { loc.data[0].pic = header && header.pic || "//i0.hdslb.com/bfs/activity-plat/static/20171220/68a052f664e8414bb594f9b00b176599/images/90w1lpp6ry.png"; loc.data[0].litpic = header && header.litpic || ""; loc.data[0].url = header && header.url || ""; loc.data[0].title = header && header.name || ""; } }); } return loc; }, false); } /** 顶栏广场 */ static plaza() { jsonpHook.async("api.bilibili.com/plaza/banner", () => true, async () => { return { "code": 0, "result": [{ "link": "https://www.bilibili.com/blackboard/x/act_list", "end": 1640966407, "begin": 1456709887, "title": "bilibili 活动", "cover": "http://i0.hdslb.com/bfs/square/6830d0e479eee8cc9a42c3e375ca99a5147390cd.jpg", "id": 9, "created_ts": 1491386053 }, { "link": "http://www.bilibili.com/blackboard/topic_list.html", "end": 1640966418, "begin": 1544258598, "title": "话题列表", "cover": "http://i0.hdslb.com/bfs/square/b1b00a0c3ce8570b48277ae07a2e55603a4a4ddf.jpg", "id": 17, "created_ts": 1491386030 }] }; }, false); } // 已失效 2023-09-18 /** 顶栏动图 */ static indexIcon() { jsonpHook.async("api.bilibili.com/x/web-interface/index/icon", void 0, async () => { return { code: 0, data: subArray(index_icon_default.fix), message: "0", ttl: 1 }; }, false); } /** 消息页面样式 */ static message() { addCss(message_default, "message"); } /** 顶栏动态记录参数失效,另行找补 */ static videoOffset() { if (uid) { const offset3 = getCookies()[\`bp_video_offset_\${uid}\`]; if (offset3) { setCookie(\`bp_t_offset_\${uid}\`, offset3); } } } /** 迷你顶栏 */ miniHeader() { this.oldHeader.classList.remove("has-menu"); } /** 是否mini顶栏 */ static isMiniHead(d) { if (/\\/v\\/(douga|music|dance|game|knowledge|tech|life|kichiku|fashion|information|ent|cinephile|car|sports|animal)\\//.test(location.href)) return true; if (/\\/mooc\\//.test(location.href)) return true; return location.href.includes("blackboard/topic_list") || location.href.includes("blackboard/x/act_list") || document.querySelector(".large-header") || document.querySelector(".bili-banner") || (d == null ? void 0 : d.getAttribute("type")) == "all" ? false : true; } constructor() { this.oldHeader.className = "z-top-container has-menu"; this.hookHeadV2(); this.feedCount(); poll(() => document.readyState === "complete", () => this.styleClear()); } /** 监听新版顶栏 */ hookHeadV2() { poll(() => { return document.querySelector("#internationalHeader") || document.querySelector("#biliMainHeader") || document.querySelector("#bili-header-container") || document.querySelector("#home_nav") || document.querySelector(".bili-header__bar"); }, (d) => { _Header.isMiniHead(d) && this.miniHeader(); this.loadOldHeader(d); }); poll(() => document.querySelector(".z_top_container"), (d) => { this.loadOldHeader(d); document.querySelector(".header").style.display = "none"; }); } /** 已加载旧版顶栏 */ oldHeadLoaded = false; /** 旧版顶栏节点 */ oldHeader = document.createElement("div"); /** 加载旧版顶栏 */ loadOldHeader(target) { if (target) { if (target.className === "bili-header__bar") { addCss('.bili-header.large-header,.header-channel,.z-top-container.has-menu[type="all"] {display: none;}'); } document.body.classList.remove("header-v3"); target.style.display = "none"; target.hidden = true; } if (this.oldHeadLoaded) return; this.oldHeadLoaded = true; addCss("#internationalHeader,#biliMainHeader,#bili-header-container{display: none;}"); document.body.insertBefore(this.oldHeader, document.body.firstChild); (window.jQuery ? Promise.resolve() : loadScript("//static.hdslb.com/js/jquery.min.js")).then(() => loadScript("//s1.hdslb.com/bfs/seed/jinkela/header/header.js")).then(() => { _Header.styleFix(); }); _Header.primaryMenu(); _Header.banner(); } loadOldFooter(target) { addElement("div", { class: "footer bili-footer report-wrap-module" }, document.body, void 0, void 0, target); (window.jQuery ? Promise.resolve() : loadScript("//static.hdslb.com/js/jquery.min.js")).then(() => loadScript("//static.hdslb.com/common/js/footer.js")).then(() => { var _a3; target && (target.style.display = "none"); this.styleClear(); addCss(".bili-footer {position: relative;}"); (_a3 = document.getElementsByClassName("bili-header-m")[1]) == null ? void 0 : _a3.remove(); }); } static fullBannerCover = false; /** 顶栏样式修复 */ static styleFix() { addCss(".nav-item.live {width: auto;}.lt-row {display: none !important;} .bili-header-m #banner_link{background-size: cover;background-position: center !important;}", "lt-row-fix"); addCss(avatar_animation_default, "avatarAnimation"); this.fullBannerCover && addCss(".bili-header-m #banner_link{height: 9.375vw !important;min-width: 1000px;min-height: 155px;max-height: 240px;}"); } /** 禁用新版顶栏相关样式 */ async styleClear() { var _a3; const d = document.styleSheets; for (let i = 0; i < d.length; i++) { ((_a3 = d[i].href) == null ? void 0 : _a3.includes("laputa-header")) && (d[i].disabled = true); } _Header.styleFix(); } /** 顶栏动态直播回复数目接口失效,强制标记为0 */ feedCount() { xhrHook.async("api.live.bilibili.com/ajax/feed/count", void 0, async () => { const response = '{ "code": 0, "data": { "count": 0 }, "message": "0" }'; return { response, responseText: response }; }, false); } }; // src/page/space.ts init_tampermonkey(); // src/io/account-getcardbymid.ts init_tampermonkey(); async function accountGetCardByMid(mid) { const response = await GM.fetch(objUrl(URLS.ACCOUNT_GETCARDBYMID, { mid })); const json = await response.json(); return jsonCheck(json).card; } // src/json/mid.json var mid_default = { code: 0, data: { birthday: "1980-01-01", coins: 0, face: "http://i2.hdslb.com/bfs/face/9f10323503739e676857f06f5e4f5eb323e9f3f2.jpg", fans_badge: false, is_followed: true, jointime: 1436351229, level: 6, mid: 11783021, moral: 0, name: "哔哩哔哩番剧出差", official: { type: 1, desc: "哔哩哔哩番剧出差 官方账号" }, pendant: { pid: 0, name: "", image: "", expire: 0 }, rank: "10000", sex: "保密", sign: "", silence: 0, sys_notice: {}, theme: {}, user_honour_info: { colour: null, mid: 0, tags: null }, vip: { avatar_subscript: 1, avatar_subscript_url: "http://i0.hdslb.com/bfs/vip/icon_Certification_big_member_22_3x.png", due_date: 16557408e5, label: { bg_color: "#FB7299", bg_style: 1, border_color: "", label_theme: "annual_vip", path: "", text: "年度大会员", text_color: "#FFFFFF" }, nickname_color: "#FB7299", role: 3, status: 1, theme_type: 0, type: 2, vip_pay_type: 1 } }, message: "0", ttl: 1 }; // src/utils/hook/fetch.ts init_tampermonkey(); var FetchHook = class _FetchHook { static inited = false; static rules = /* @__PURE__ */ new Set(); static init() { const fetch2 = self.fetch; self.fetch = (input, init) => { var _a3; const url = input instanceof Request ? input.url : typeof input === "string" ? input : input.toJSON(); const obj = { input: url, init }; let fetchHook; for (const rule of this.rules) { if (rule && rule.urls.every((d) => url.includes(d))) { (_a3 = rule.\$request) == null ? void 0 : _a3.call(rule, obj); rule.\$response && (fetchHook = rule); } } if (fetchHook) { return new Promise((resolve, reject) => { if (fetchHook.noRequest) { fetchHook.\$response().then((d) => { d ? resolve(new Response(d, { status: 200, statusText: "" })) : reject(); }).catch(reject); } else { fetch2(obj.input, obj.init).then(async (d) => { const res = await fetchHook.\$response(d.clone()); resolve(res ? new Response(res, { status: d.status, statusText: d.statusText, headers: d.headers }) : d); }).catch(reject); } }); } return fetch2(obj.input, obj.init); }; this.inited = true; } urls; /** 不发送原始请求 */ noRequest = false; /** 取消本次拦截 */ noModify = false; constructor(...urls) { _FetchHook.inited || _FetchHook.init(); this.urls = urls; _FetchHook.rules.add(this); } \$request; /** * 拦截修改fetch请求 * * @param callback 修改请求的回调函数,将fetch参数包裹为对象传入,修改对应属性即可。 */ request(callback) { this.\$request = callback; } \$response; /** * 拦截修改fetch返回值 * * @param callback 修改返回值的回调函数,将原Response传入,异步返回新返回值即可,也可以不反悔任何值,表示使用不修改原始值 * @param noRequest 不发送原始请求,callback中将不会原Response。通常用于不依赖原始返回值便能构造新返回值的情形。此时callback必须返回值! */ response(callback, noRequest = false) { this.\$response = callback; this.noRequest = noRequest; } }; // src/utils/vdomtool.ts init_tampermonkey(); var VdomTool = class { vdom; constructor(html) { if (typeof html === "string") { this.vdom = htmlVnode(html); } else { this.vdom = html; } } /** 生成 DocumentFragment(会过滤script标签,请稍后使用\`loadScript\`方法依次运行所有script) */ toFragment() { const fragment = document.createDocumentFragment(); this.vdom.forEach((d) => { fragment.appendChild(this.createElement(d)); }); return fragment; } /** 根据vdom生成真DOM(过滤script标签) */ createElement(element) { if (element.tagName === "text") { return document.createTextNode(element.text); } if (element.tagName === "svg") { return this.createSVG(element); } const node = document.createElement(element.tagName); element.props && Object.entries(element.props).forEach((d) => { node.setAttribute(d[0], d[1]); }); element.text && node.appendChild(document.createTextNode(element.text)); element.event && Object.entries(element.event).forEach((d) => { node.addEventListener(...d); }); if (element.tagName === "script") { node.async = false; } element.children && element.children.forEach((d) => { node.appendChild(this.createElement(d)); }); return node; } /** svg限定生成方法 */ createSVG(element) { const node = document.createElementNS("http://www.w3.org/2000/svg", element.tagName); element.props && Object.entries(element.props).forEach((d) => { node.setAttribute(d[0], d[1]); }); element.children && element.children.forEach((d) => { node.appendChild(this.createSVG(d)); }); return node; } /** 添加为目标节点的子节点 */ appendTo(node) { try { node.append(this.toFragment()); } catch (e) { debug.error(e); } } /** 替换目标节点 */ replace(node) { try { node.replaceWith(this.toFragment()); } catch (e) { debug.error(e); } } addEventListener(target, type, listener) { try { const arr2 = target.split(""); let dom = this.vdom; let ele; while (dom && arr2.length) { const i = Number(arr2.shift()); if (i) { ele = dom[i]; dom = ele.children; } } ele.event || (ele.event = {}); ele.event[type] = listener; } catch (e) { debug.error(e); } } removeEventListener(target, type) { var _a3; try { const arr2 = target.split(""); let dom = this.vdom; let ele; while (dom && arr2.length) { const i = Number(arr2.shift()); if (i) { ele = dom[i]; dom = ele.children; } } (_a3 = ele.event) == null ? true : delete _a3[type]; } catch (e) { debug.error(e); } } }; // src/page/space.ts var Mid = { 11783021: "哔哩哔哩番剧出差", 1988098633: "b站_戲劇咖", 2042149112: "b站_綜藝咖" }; var PageSpace = class { mid; /** 失效视频aid */ aids = []; aidInfo = []; constructor() { this.mid = Number(BLOD.path[3] && BLOD.path[3].split("?")[0]); this.midInfo(); user.addCallback((status) => { status.album && this.album(); status.jointime && this.jointime(); status.lostVideo && this.lostVideo(); }); } /** 修复限制访问up空间 */ midInfo() { switch (this.mid) { case 11783021: case 1988098633: case 2042149112: mid_default.data.mid = this.mid; mid_default.data.name = mid_default.data.official.desc = (Mid[this.mid] || Mid[11783021]) + " 官方帐号"; xhrHook("acc/info?", void 0, (obj) => { if (obj.responseText && obj.responseText.includes("-404")) { obj.response = obj.responseText = JSON.stringify(mid_default); toast.warning("该用户被404,已使用缓存数据恢复访问!"); } else if (obj.responseType === "blob" && obj.response.size === 46) { obj.response = new Blob([JSON.stringify(mid_default)], { type: "application/json" }); toast.warning("该用户被404,已使用缓存数据恢复访问!"); } }, false); new FetchHook("acc/info?").response(async (res) => { const text = await res.text(); if (text.includes("-404")) { return JSON.stringify(mid_default); } }); break; default: break; } } /** 还原相簿 */ album() { xhrHook("api.bilibili.com/x/dynamic/feed/draw/doc_list", void 0, (obj) => { const response = JSON.parse(obj.responseText); let data = response.data.items.reduce((s, d) => { s.push(d.doc_id); return s; }, []); setTimeout(() => { document.querySelectorAll(".album-card").forEach((d, i) => { d.firstChild.href = \`//h.bilibili.com/\${data[i]}\`; d.children[1].href = \`//h.bilibili.com/\${data[i]}\`; }); }, 1e3); }, false); } /** 动态重定向回相簿 */ static album() { xhrHook(["x/polymer/web-dynamic", "detail?"], void 0, (res) => { var _a3; const result = res.responseType === "json" ? res.response : JSON.parse(res.response); if (result.code === 0) { if (((_a3 = result.data) == null ? void 0 : _a3.item.type) === "DYNAMIC_TYPE_DRAW") location.replace(\`https://h.bilibili.com/\${result.data.item.basic.rid_str}\`); } }, false); } /** 注册时间 */ jointime() { poll(() => document.querySelector(".section.user-info"), (t) => { accountGetCardByMid(this.mid).then((d) => { const jointime = timeFormat(d.regtime * 1e3, true); const node = t.lastChild; new VdomTool(\`
注册 \${jointime}
\`).appendTo(node); }); }); } /** 失效视频 */ lostVideo() { xhrHook("x/v3/fav/resource/list", void 0, async (res) => { var _a3; try { const data = jsonCheck(res.response); (_a3 = data.data) == null ? true : delete _a3.ttl; if (data.data.medias) { data.data.medias.forEach((d) => { d.attr % 2 && this.aids.push(d.id); }); } if (this.aids.length) { const msg = toast.list("失效视频 >>>", "> " + this.aids.join(" ")); this.lostVideoView().then(() => { setTimeout(() => { msg.push("> 数据返回,正在修复~"); let resolve = 0, reject = 0; msg.type = "success"; const ele = document.querySelector("#page-fav"); if (ele) { const medias = ele.__vue__.favListDetails.medias; medias == null ? void 0 : medias.forEach((d) => { var _a4, _b2; if (d.attr % 2) { msg.push(\`> av\${d.id}\`); if (this.aidInfo[d.id].title) { resolve++; d.title = this.aidInfo[d.id].title; msg.push(">" + this.aidInfo[d.id].title); } else { reject++; d.title = \`av\${d.id}\`; msg.push("> 未能获取到有效信息!"); } this.aidInfo[d.id].cover && (d.cover = this.aidInfo[d.id].cover); d.attr = 0; (_b2 = (_a4 = ele.querySelector(\`[data-aid=\${d.bvid}]\`)) == null ? void 0 : _a4.children[1]) == null ? void 0 : _b2.setAttribute("style", "text-decoration : line-through;color : #ff0000;"); } }); } msg.push("> ", \`> 修复结束:成功 \${resolve} 失败 \${reject}\`); msg.delay = 4; }, 100); }); } } catch { } }, false); } lostVideoView() { const arr2 = []; while (this.aids.length) { arr2.push((async () => { const d = this.aids.shift(); if (this.aidInfo[d]) return; let title, cover; await GM.fetch(\`//www.biliplus.com/video/av\${d}\`).then((d2) => d2.text()).then((d2) => { if (d2.match(/\\.+?\\ \\-\\ AV/)) { title = d2.match(/\\.+?\\ \\-\\ AV/)[0].replace(//, "").replace(/ - AV/, ""); cover = d2.match(/\\<img style=\\"display:none\\"\\ src=\\".+?\\"\\ alt/)[0].replace(/<img style="display:none" src="/, "").replace(/" alt/, ""); } }).catch((e) => { debug.error(\`获取失效视频av\${d}信息错误\`, "BILIPLUS", e); }); if (!title || !cover) { await GM.fetch(\`//www.biliplus.com/all/video/av\${d}\`).then((d2) => d2.text()).then((d2) => { if (d2.match("/api/view_all?")) { const url = d2.match(/\\/api\\/view_all\\?.+?\\',cloudmoe/)[0].replace(/\\',cloudmoe/, ""); return GM.fetch(\`//www.biliplus.com\${url}\`); } throw new Error("无cid缓存"); }).then((d2) => d2.json()).then((d2) => { d2 = jsonCheck(d2); title = title || d2.data.info.title; cover = cover || d2.data.info.pic; }).catch((e) => { debug.error(\`获取失效视频av\${d}信息错误\`, "BILIPLUSALL", e); }); } if (!title || !cover) { await GM.fetch(\`//www.jijidown.com/video/av\${d}\`).then((d2) => d2.text()).then((d2) => { if (d2.match("window._INIT")) { title = title || d2.match(/\\<title\\>.+?\\-哔哩哔哩唧唧/)[0].replace(/<title>/, "").replace(/-哔哩哔哩唧唧/, ""); cover = cover || d2.match(/\\"img\\":\\ \\".+?\\",/)[0].match(/http.+?\\",/)[0].replace(/",/, ""); } }).catch((e) => { debug.error(\`获取失效视频av\${d}信息错误\`, "JIJIDOWN", e); }); } cover = cover && cover.replace("http:", ""); this.aidInfo[d] = { title, cover }; })()); } return Promise.all(arr2); } }; // src/page/media.ts init_tampermonkey(); var PageMedia = class { constructor() { this.limit(); } /** 解除限制 */ limit() { xhrHook("user/status", void 0, (res) => { try { const result = jsonCheck(res.response); result.result.area_limit = 0; result.result.ban_area_show = 0; res.responseType === "json" ? res.response = result : res.response = res.responseText = JSON.stringify(result); } catch (e) { } }, false); } }; // src/page/history.ts init_tampermonkey(); var PageHistory = class { constructor() { user.addCallback((status) => { status.history && this.archive(); }); } /** 纯视频历史记录 */ archive() { xhrHook(["api.bilibili.com/x/web-interface/history/cursor", "business"], function(args) { let obj = new URL(args[1]), max2 = obj.searchParams.get("max") || "", view_at = obj.searchParams.get("view_at") || ""; args[1] = objUrl("//api.bilibili.com/x/web-interface/history/cursor", { max: max2, view_at, type: "archive", ps: "20" }); }, void 0, false); } }; // src/page/live.ts init_tampermonkey(); // src/core/report.ts init_tampermonkey(); var Cache = class { fpriskMsg = {}; }; var EventTracker = class { extMsgs = {}; legalContainer = "report-wrap-module"; bindEvent() { } bindHeatMapEvent() { } checkContainer() { } eventCB() { } handleSelfDefReport() { } todo() { } }; var LoadTracker = class { msg = {}; showRawPerformance() { } todo() { } }; var PvTracker = class { extMsgs = {}; _uuid = ""; sendPV() { } todo() { } }; var ScrollTracker = class { extMsgs = {}; ignoreHidden = true; reportedIds = []; scrollDivClass = ""; scrollLintenerFns = []; scrollMsg = {}; scrollReportOffset = 200; scrollSubDivClass = ""; addScrollListenNode() { } checkScroll() { } customReport() { } getOffset() { } inView() { } judgeAppear() { } judgeCustom() { } judgeHidden() { } judgeSubAppear() { } removeScrollListenNode() { } subInView() { } todo() { } todoCustom() { } }; var reportConfig = { msgObjects: "spmReportData", sample: -1, scrollTracker: false }; var reportMsgObj = {}; var ReportObserver = class { constructor() { propertyHook(window, "reportObserver", this); propertyHook(window, "reportConfig", reportConfig); } cache = new Cache(); eventTracker = new EventTracker(); loadTracker = new LoadTracker(); pvTracker = new PvTracker(); scrollTracker = new ScrollTracker(); forceCommit() { } importTracker() { } init() { } initBsource() { } initTracker() { } reportCustomData() { } reportWithAdditionalParam() { } reportWithSpmPrefix() { } sendPV() { } sendPerformance() { } setSPM_id() { } setSpeicalMsg() { } updateConfig() { } }; var statisObserverConfig = { blackEvents: [], clickConfig: { logId: "", isDoubleWrite: false }, loadPerform: false, loadSpecial: false, performConfig: { isWrite: false }, pvConfig: { isDoubleWrite: false, logId: "", selfDefMsg: {} }, selfConfig: { logId: "", isDoubleWrite: false, isSelfDefWrite: false, isDefaultWrite: false }, spmId: "" }; var StatisObserver = class { __bufferFuns = []; __initConfig = {}; __loadedFlag = { baidu: false, error: false, event: false, perform: false, pv: false, special: false }; __visitId = ""; constructor() { propertyHook(window, "__statisObserver", this); propertyHook(window, "reportMsgObj", reportMsgObj); propertyHook(window, "__statisObserverConfig", statisObserverConfig); } addClickTracker() { } addLegalContainer() { } addSelfDefineMsg() { } forceCommit() { } getPvid() { } removeLegalContainer() { } removeSelfDefineMsg() { } sendBaidu() { } sendClickEvent() { } sendCustomMetrics() { } sendError() { } sendPV() { } sendPerform() { } sendSpecial() { } setAttrName() { } setBaseUrl() { } setErrorInterval() { } setErrorLogId() { } setEventLogId() { } setEventSendStatus() { } setPVLogId() { } setPVSendStatus() { } setPerformLogId() { } setPvid() { } setSpecialFirstLoop() { } setSpecialInterval() { } setSpecialLogId() { } setSpmId() { } startPoolListen() { } startSpecialLoop() { } stopPoolListen() { } stopSpecialLoop() { } }; // src/core/url.ts init_tampermonkey(); var paramsSet = /* @__PURE__ */ new Set([ "spm_id_from", "from_source", "msource", "bsource", "seid", "source", "session_id", "visit_id", "sourceFrom", "from_spmid", "share_source", "share_medium", "share_plat", "share_session_id", "share_tag", "unique_k", "vd_source", "csource" ]); var paramArr = Object.entries({ from: ["search"] }); var UrlCleaner = class { /** 垃圾参数序列 */ paramsSet = paramsSet; /** 精准爆破序列 */ paramArr = paramArr; constructor() { var _a3; this.location(); (_a3 = window.navigation) == null ? void 0 : _a3.addEventListener("navigate", (e) => { const newURL = this.clear(e.destination.url); if (e.destination.url != newURL) { e.preventDefault(); if (newURL == window.location.href) return; if (e.navigationType !== "traverse") { this.updateLocation(newURL, e.navigationType); } } }); window.addEventListener("click", (e) => this.anchorClick(e)); window.addEventListener("contextmenu", (e) => this.anchorClick(e)); document.addEventListener("DOMContentLoaded", () => { this.location(); this.anchor(document.querySelectorAll("a")); }, { once: true }); } /** 净化url */ clear(str) { const url = new URL2(str); if (url && !str.includes("passport.bilibili.com")) { const params = url.params; if (params.bvid) { params.aid = AV.fromBV(params.bvid); } if (params.aid && !Number(params.aid)) { params.aid = AV.fromBV(params.aid); } paramsSet.forEach((d) => { delete params[d]; }); paramArr.forEach((d) => { if (params[d[0]]) { if (d[1].includes(params[d[0]])) { delete params[d[0]]; } } }); url.base = AV.fromStr(url.base); url.hash && (url.hash = AV.fromStr(url.hash)); return url.toJSON(); } else return str; } /** 净化URL */ location() { this.updateLocation(this.clear(location.href)); } /** 更新URL而不触发重定向 */ updateLocation(url, fun) { const Url = new self.URL(url); if (Url.host === location.host) { if (fun === "push") { window.history.pushState(window.history.state, "", url); } else { window.history.replaceState(window.history.state, "", url); } } } /** 点击回调 */ anchorClick(e) { var f = e.target; for (; f && "A" !== f.tagName; ) { f = f.parentNode; } if ("A" !== (f == null ? void 0 : f.tagName)) { return; } this.anchor([f]); } /** 净化a标签 */ anchor(list) { list.forEach((d) => { if (!d.href) return; d.href = this.clear(d.href); }); } }; var urlCleaner = new UrlCleaner(); // src/page/live.ts var PageLive = class { sleep = false; constructor() { user.addCallback((status) => { status.disableSleepChcek && this.disAbleSleepCheck(); status.disableReport && new StatisObserver(); }); this.urlClean(); } /** 添加url清理参数 */ urlClean() { urlCleaner.paramsSet.add("broadcast_type"); urlCleaner.paramsSet.add("is_room_feed"); } /** 禁止挂机检测 */ disAbleSleepCheck() { const setInterval2 = self.setInterval; const setTimeout2 = self.setTimeout; self.setInterval = (...args) => { if (args[1] === 3e5) { if (!this.sleep) { this.sleep = true; toast.warning("成功阻止直播间挂机检测!"); } return Number.MIN_VALUE; } return setInterval2.call(self, ...args); }; self.setTimeout = (...args) => { if (args[1] === 3e5) { if (!this.sleep) { this.sleep = true; toast.warning("成功阻止直播间挂机检测!"); } return Number.MIN_VALUE; } return setTimeout2.call(self, ...args); }; } }; // src/page/dynamic.ts init_tampermonkey(); var PageDynamic = class { constructor() { user.addCallback((status) => { status.liveRecord || this.liveRecord(); }); } liveRecord() { xhrHook("api.bilibili.com/x/polymer/web-dynamic/v1/feed/all", void 0, (r) => { try { const response = jsonCheck(r.response); response.data.items = response.data.items.filter((d) => { var _a3, _b2, _c, _d, _e; return ((_e = (_d = (_c = (_b2 = (_a3 = d.modules) == null ? void 0 : _a3.module_dynamic) == null ? void 0 : _b2.major) == null ? void 0 : _c.archive) == null ? void 0 : _d.badge) == null ? void 0 : _e.text) != "直播回放"; }); r.responseType === "json" ? r.response = response : r.response = r.responseText = JSON.stringify(response); } catch (e) { } }, false); } }; // src/page/index.ts init_tampermonkey(); // src/html/index.html var html_default = '<!DOCTYPE html>\\r\\n<html lang="zh-CN">\\r\\n\\r\\n<head>\\r\\n <meta charset="utf-8" />\\r\\n <title>哔哩哔哩 (゜-゜)つロ 干杯~-bilibili\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n
\\r\\n
\\r\\n \\r\\n