AkWebMasterV2

🚀 支持 91短视频、海角社区、SWAG、19JTV、糖心、海角APP、萝莉巴士等十几个站点哦~ 🚀

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name           AkWebMasterV2
// @namespace      https://ak-sky.com
// @version        v2.2.10
// @author         ak-sky
// @description    🚀 支持 91短视频、海角社区、SWAG、19JTV、糖心、海角APP、萝莉巴士等十几个站点哦~ 🚀
// @license        MIT
// @homepage       https://ak-sky.com
// @supportURL     https://ak-sky.com
// @icon           https://store.ak-sky.com/akWebMaster/akwm.ico
// @include        https://*.h.*j*.*/home
// @include        https://*h*j*.*/home
// @include        https://hai*.top/*
// @include        *://www.loibox*.top/*
// @include        *://www.loibus*.top/*
// @include        *://www.loibus*.xyz/*
// @include        *://www.loibus.com/*
// @include        *://www.loiraft.com/*
// @include        *://www.loiship.com/*
// @include        *://www.loix.org/*
// @include        *://loix.org/*
// @include        https://*txh*.com/*
// @match          https://haijiao.com/*
// @match          https://www.haijiao.com/*
// @match          *://*/post/details*
// @match          https://p1.lsqykbvl.com/*
// @match          https://p5.fkdadqjju.cc*
// @match          https://19jtv.com/*
// @match          https://javhd.com/*
// @match          https://www.mdav.live/*
// @match          https://5ktmi048.com/*
// @match          https://p2.lxrzwdq.xyz/*
// @match          https://www.loiship.com/*
// @match          https://51fengliu.com/*
// @match          https://51fengliu3.com/*
// @match          https://pwa3.dsp11a.cc/*
// @match          https://pwa1.oyqwgpzi.xyz/*
// @match          https://lubosp.com/*
// @match          https://moso.monster/*
// ==/UserScript==
var __defProp = Object.defineProperty;

var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, {
    enumerable: true,
    configurable: true,
    writable: true,
    value: value
}) : obj[key] = value;

var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);

(function() {
    "use strict";
    function Jtv19Inject() {
        return new Promise(resolve => {
            const url = new URL(window.location.href);
            const pathname = url.pathname;
            if (!/category\/.*?\/\d+/.test(pathname)) {
                resolve({
                    analyzeURL: "",
                    failReason: "请在视频播放页使用"
                });
                return;
            }
            resolve({
                analyzeURL: url.href,
                failReason: ""
            });
        });
    }
    const Config = {
        ApiURL: "https://webmaster.ak-sky.com",
        ServerAPI: "https://ak-sky.com/api"
    };
    function PhoenixAnalyze(req) {
        const reqURL = `${Config.ServerAPI}/v1/phoenix/analyze`;
        return fetch(reqURL, {
            method: "POST",
            headers: {
                "Content-Type": "application/json"
            },
            body: JSON.stringify(req)
        }).then(async response => {
            const data = await response.json();
            if (response.status !== 200) {
                throw data;
            }
            return data;
        });
    }
    class LocalStorage {
        static set(key2, value) {
            window.localStorage.setItem(key2, JSON.stringify(value));
        }
        static get(key2) {
            const value = window.localStorage.getItem(key2);
            if (!value) {
                return null;
            }
            try {
                return JSON.parse(value);
            } catch {
                return value;
            }
        }
        static remove(key2) {
            window.localStorage.removeItem(key2);
        }
    }
    class SessionStorage {
        static set(key2, value) {
            window.sessionStorage.setItem(key2, JSON.stringify(value));
        }
        static get(key2) {
            const value = window.sessionStorage.getItem(key2);
            if (!value) {
                return null;
            }
            try {
                return JSON.parse(value);
            } catch {
                return value;
            }
        }
        static remove(key2) {
            window.sessionStorage.removeItem(key2);
        }
    }
    const columnZhName = {
        qq: "QQ",
        wechat: "微信",
        telegram: "电报",
        yuNi: "与你号",
        phone: "电话",
        address: "地址",
        textConcat: "内容",
        description: "简介"
    };
    function FengLiu51Inject() {
        return new Promise(resolve => {
            const url = new URL(window.location.href);
            const pathname = url.pathname;
            if (!/\/show|guide|merchant|info|\/\d+\.html/.test(pathname)) {
                resolve({
                    analyzeURL: "",
                    failReason: "请在详情页面中解析"
                });
                return;
            }
            const token = LocalStorage.get("akSkyUserToken");
            if (!token) {
                resolve({
                    openActivateToken: true
                });
                return;
            }
            let href = window.location.href;
            if (window.location.host === "51fengliu3.com") {
                const id = url.searchParams.get("id");
                const type = url.searchParams.get("type");
                switch (type) {
                  case "INFO":
                    href = `https://51fengliu.com/show/${id}.html`;
                    break;

                  case "STREET":
                    href = `https://51fengliu.com/guide/${id}.html`;
                    break;

                  case "MERCHANT":
                    href = `https://51fengliu.com/merchant/${id}.html`;
                    break;
                }
            }
            console.log(href);
            PhoenixAnalyze({
                token: token,
                targetURL: href
            }).then(reply => {
                const haveValueKeys = Object.keys(reply).filter(key2 => reply[key2]);
                const options = haveValueKeys.map(k => columnZhName[k]);
                const data = haveValueKeys.reduce((obj, key2) => {
                    obj[columnZhName[key2]] = reply[key2];
                    return obj;
                }, {});
                resolve({
                    segmented: {
                        options: options,
                        data: data
                    },
                    remindMsg: "⚠️ 请注意甄别信息真伪 ⚠️"
                });
            }).catch(err => {
                resolve({
                    failReason: err.msg
                });
            });
        });
    }
    function TMInject() {
        return new Promise(resolve => {
            const url = new URL(window.location.href);
            const pathname = url.pathname;
            if (!pathname.includes("/movie/detail/")) {
                resolve({
                    analyzeURL: "",
                    failReason: "请在视频播放页使用"
                });
                return;
            }
            resolve({
                analyzeURL: url.href,
                failReason: ""
            });
        });
    }
    var commonjsGlobal = typeof globalThis !== "undefined" ? globalThis : typeof window !== "undefined" ? window : typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : {};
    function getDefaultExportFromCjs(x) {
        return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, "default") ? x["default"] : x;
    }
    function getAugmentedNamespace(n) {
        if (n.__esModule) return n;
        var f = n.default;
        if (typeof f == "function") {
            var a = function a2() {
                if (this instanceof a2) {
                    return Reflect.construct(f, arguments, this.constructor);
                }
                return f.apply(this, arguments);
            };
            a.prototype = f.prototype;
        } else a = {};
        Object.defineProperty(a, "__esModule", {
            value: true
        });
        Object.keys(n).forEach(function(k) {
            var d = Object.getOwnPropertyDescriptor(n, k);
            Object.defineProperty(a, k, d.get ? d : {
                enumerable: true,
                get: function() {
                    return n[k];
                }
            });
        });
        return a;
    }
    var aes = {
        exports: {}
    };
    function commonjsRequire(path) {
        throw new Error('Could not dynamically require "' + path + '". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.');
    }
    var core = {
        exports: {}
    };
    const __viteBrowserExternal = {};
    const __viteBrowserExternal$1 = Object.freeze(Object.defineProperty({
        __proto__: null,
        default: __viteBrowserExternal
    }, Symbol.toStringTag, {
        value: "Module"
    }));
    const require$$0 = getAugmentedNamespace(__viteBrowserExternal$1);
    var hasRequiredCore;
    function requireCore() {
        if (hasRequiredCore) return core.exports;
        hasRequiredCore = 1;
        (function(module, exports) {
            (function(root, factory) {
                {
                    module.exports = factory();
                }
            })(commonjsGlobal, function() {
                var CryptoJS = CryptoJS || function(Math2, undefined$1) {
                    var crypto;
                    if (typeof window !== "undefined" && window.crypto) {
                        crypto = window.crypto;
                    }
                    if (typeof self !== "undefined" && self.crypto) {
                        crypto = self.crypto;
                    }
                    if (typeof globalThis !== "undefined" && globalThis.crypto) {
                        crypto = globalThis.crypto;
                    }
                    if (!crypto && typeof window !== "undefined" && window.msCrypto) {
                        crypto = window.msCrypto;
                    }
                    if (!crypto && typeof commonjsGlobal !== "undefined" && commonjsGlobal.crypto) {
                        crypto = commonjsGlobal.crypto;
                    }
                    if (!crypto && typeof commonjsRequire === "function") {
                        try {
                            crypto = require$$0;
                        } catch (err) {}
                    }
                    var cryptoSecureRandomInt = function() {
                        if (crypto) {
                            if (typeof crypto.getRandomValues === "function") {
                                try {
                                    return crypto.getRandomValues(new Uint32Array(1))[0];
                                } catch (err) {}
                            }
                            if (typeof crypto.randomBytes === "function") {
                                try {
                                    return crypto.randomBytes(4).readInt32LE();
                                } catch (err) {}
                            }
                        }
                        throw new Error("Native crypto module could not be used to get secure random number.");
                    };
                    var create = Object.create || function() {
                        function F() {}
                        return function(obj) {
                            var subtype;
                            F.prototype = obj;
                            subtype = new F;
                            F.prototype = null;
                            return subtype;
                        };
                    }();
                    var C = {};
                    var C_lib = C.lib = {};
                    var Base = C_lib.Base = function() {
                        return {
                            extend: function(overrides) {
                                var subtype = create(this);
                                if (overrides) {
                                    subtype.mixIn(overrides);
                                }
                                if (!subtype.hasOwnProperty("init") || this.init === subtype.init) {
                                    subtype.init = function() {
                                        subtype.$super.init.apply(this, arguments);
                                    };
                                }
                                subtype.init.prototype = subtype;
                                subtype.$super = this;
                                return subtype;
                            },
                            create: function() {
                                var instance = this.extend();
                                instance.init.apply(instance, arguments);
                                return instance;
                            },
                            init: function() {},
                            mixIn: function(properties) {
                                for (var propertyName in properties) {
                                    if (properties.hasOwnProperty(propertyName)) {
                                        this[propertyName] = properties[propertyName];
                                    }
                                }
                                if (properties.hasOwnProperty("toString")) {
                                    this.toString = properties.toString;
                                }
                            },
                            clone: function() {
                                return this.init.prototype.extend(this);
                            }
                        };
                    }();
                    var WordArray = C_lib.WordArray = Base.extend({
                        init: function(words, sigBytes) {
                            words = this.words = words || [];
                            if (sigBytes != undefined$1) {
                                this.sigBytes = sigBytes;
                            } else {
                                this.sigBytes = words.length * 4;
                            }
                        },
                        toString: function(encoder) {
                            return (encoder || Hex2).stringify(this);
                        },
                        concat: function(wordArray) {
                            var thisWords = this.words;
                            var thatWords = wordArray.words;
                            var thisSigBytes = this.sigBytes;
                            var thatSigBytes = wordArray.sigBytes;
                            this.clamp();
                            if (thisSigBytes % 4) {
                                for (var i = 0; i < thatSigBytes; i++) {
                                    var thatByte = thatWords[i >>> 2] >>> 24 - i % 4 * 8 & 255;
                                    thisWords[thisSigBytes + i >>> 2] |= thatByte << 24 - (thisSigBytes + i) % 4 * 8;
                                }
                            } else {
                                for (var j = 0; j < thatSigBytes; j += 4) {
                                    thisWords[thisSigBytes + j >>> 2] = thatWords[j >>> 2];
                                }
                            }
                            this.sigBytes += thatSigBytes;
                            return this;
                        },
                        clamp: function() {
                            var words = this.words;
                            var sigBytes = this.sigBytes;
                            words[sigBytes >>> 2] &= 4294967295 << 32 - sigBytes % 4 * 8;
                            words.length = Math2.ceil(sigBytes / 4);
                        },
                        clone: function() {
                            var clone = Base.clone.call(this);
                            clone.words = this.words.slice(0);
                            return clone;
                        },
                        random: function(nBytes) {
                            var words = [];
                            for (var i = 0; i < nBytes; i += 4) {
                                words.push(cryptoSecureRandomInt());
                            }
                            return new WordArray.init(words, nBytes);
                        }
                    });
                    var C_enc = C.enc = {};
                    var Hex2 = C_enc.Hex = {
                        stringify: function(wordArray) {
                            var words = wordArray.words;
                            var sigBytes = wordArray.sigBytes;
                            var hexChars = [];
                            for (var i = 0; i < sigBytes; i++) {
                                var bite = words[i >>> 2] >>> 24 - i % 4 * 8 & 255;
                                hexChars.push((bite >>> 4).toString(16));
                                hexChars.push((bite & 15).toString(16));
                            }
                            return hexChars.join("");
                        },
                        parse: function(hexStr) {
                            var hexStrLength = hexStr.length;
                            var words = [];
                            for (var i = 0; i < hexStrLength; i += 2) {
                                words[i >>> 3] |= parseInt(hexStr.substr(i, 2), 16) << 24 - i % 8 * 4;
                            }
                            return new WordArray.init(words, hexStrLength / 2);
                        }
                    };
                    var Latin1 = C_enc.Latin1 = {
                        stringify: function(wordArray) {
                            var words = wordArray.words;
                            var sigBytes = wordArray.sigBytes;
                            var latin1Chars = [];
                            for (var i = 0; i < sigBytes; i++) {
                                var bite = words[i >>> 2] >>> 24 - i % 4 * 8 & 255;
                                latin1Chars.push(String.fromCharCode(bite));
                            }
                            return latin1Chars.join("");
                        },
                        parse: function(latin1Str) {
                            var latin1StrLength = latin1Str.length;
                            var words = [];
                            for (var i = 0; i < latin1StrLength; i++) {
                                words[i >>> 2] |= (latin1Str.charCodeAt(i) & 255) << 24 - i % 4 * 8;
                            }
                            return new WordArray.init(words, latin1StrLength);
                        }
                    };
                    var Utf82 = C_enc.Utf8 = {
                        stringify: function(wordArray) {
                            try {
                                return decodeURIComponent(escape(Latin1.stringify(wordArray)));
                            } catch (e) {
                                throw new Error("Malformed UTF-8 data");
                            }
                        },
                        parse: function(utf8Str) {
                            return Latin1.parse(unescape(encodeURIComponent(utf8Str)));
                        }
                    };
                    var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm = Base.extend({
                        reset: function() {
                            this._data = new WordArray.init;
                            this._nDataBytes = 0;
                        },
                        _append: function(data) {
                            if (typeof data == "string") {
                                data = Utf82.parse(data);
                            }
                            this._data.concat(data);
                            this._nDataBytes += data.sigBytes;
                        },
                        _process: function(doFlush) {
                            var processedWords;
                            var data = this._data;
                            var dataWords = data.words;
                            var dataSigBytes = data.sigBytes;
                            var blockSize = this.blockSize;
                            var blockSizeBytes = blockSize * 4;
                            var nBlocksReady = dataSigBytes / blockSizeBytes;
                            if (doFlush) {
                                nBlocksReady = Math2.ceil(nBlocksReady);
                            } else {
                                nBlocksReady = Math2.max((nBlocksReady | 0) - this._minBufferSize, 0);
                            }
                            var nWordsReady = nBlocksReady * blockSize;
                            var nBytesReady = Math2.min(nWordsReady * 4, dataSigBytes);
                            if (nWordsReady) {
                                for (var offset = 0; offset < nWordsReady; offset += blockSize) {
                                    this._doProcessBlock(dataWords, offset);
                                }
                                processedWords = dataWords.splice(0, nWordsReady);
                                data.sigBytes -= nBytesReady;
                            }
                            return new WordArray.init(processedWords, nBytesReady);
                        },
                        clone: function() {
                            var clone = Base.clone.call(this);
                            clone._data = this._data.clone();
                            return clone;
                        },
                        _minBufferSize: 0
                    });
                    C_lib.Hasher = BufferedBlockAlgorithm.extend({
                        cfg: Base.extend(),
                        init: function(cfg) {
                            this.cfg = this.cfg.extend(cfg);
                            this.reset();
                        },
                        reset: function() {
                            BufferedBlockAlgorithm.reset.call(this);
                            this._doReset();
                        },
                        update: function(messageUpdate) {
                            this._append(messageUpdate);
                            this._process();
                            return this;
                        },
                        finalize: function(messageUpdate) {
                            if (messageUpdate) {
                                this._append(messageUpdate);
                            }
                            var hash = this._doFinalize();
                            return hash;
                        },
                        blockSize: 512 / 32,
                        _createHelper: function(hasher) {
                            return function(message, cfg) {
                                return new hasher.init(cfg).finalize(message);
                            };
                        },
                        _createHmacHelper: function(hasher) {
                            return function(message, key2) {
                                return new C_algo.HMAC.init(hasher, key2).finalize(message);
                            };
                        }
                    });
                    var C_algo = C.algo = {};
                    return C;
                }(Math);
                return CryptoJS;
            });
        })(core);
        return core.exports;
    }
    var encBase64 = {
        exports: {}
    };
    (function(module, exports) {
        (function(root, factory) {
            {
                module.exports = factory(requireCore());
            }
        })(commonjsGlobal, function(CryptoJS) {
            (function() {
                var C = CryptoJS;
                var C_lib = C.lib;
                var WordArray = C_lib.WordArray;
                var C_enc = C.enc;
                C_enc.Base64 = {
                    stringify: function(wordArray) {
                        var words = wordArray.words;
                        var sigBytes = wordArray.sigBytes;
                        var map = this._map;
                        wordArray.clamp();
                        var base64Chars = [];
                        for (var i = 0; i < sigBytes; i += 3) {
                            var byte1 = words[i >>> 2] >>> 24 - i % 4 * 8 & 255;
                            var byte2 = words[i + 1 >>> 2] >>> 24 - (i + 1) % 4 * 8 & 255;
                            var byte3 = words[i + 2 >>> 2] >>> 24 - (i + 2) % 4 * 8 & 255;
                            var triplet = byte1 << 16 | byte2 << 8 | byte3;
                            for (var j = 0; j < 4 && i + j * .75 < sigBytes; j++) {
                                base64Chars.push(map.charAt(triplet >>> 6 * (3 - j) & 63));
                            }
                        }
                        var paddingChar = map.charAt(64);
                        if (paddingChar) {
                            while (base64Chars.length % 4) {
                                base64Chars.push(paddingChar);
                            }
                        }
                        return base64Chars.join("");
                    },
                    parse: function(base64Str) {
                        var base64StrLength = base64Str.length;
                        var map = this._map;
                        var reverseMap = this._reverseMap;
                        if (!reverseMap) {
                            reverseMap = this._reverseMap = [];
                            for (var j = 0; j < map.length; j++) {
                                reverseMap[map.charCodeAt(j)] = j;
                            }
                        }
                        var paddingChar = map.charAt(64);
                        if (paddingChar) {
                            var paddingIndex = base64Str.indexOf(paddingChar);
                            if (paddingIndex !== -1) {
                                base64StrLength = paddingIndex;
                            }
                        }
                        return parseLoop(base64Str, base64StrLength, reverseMap);
                    },
                    _map: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="
                };
                function parseLoop(base64Str, base64StrLength, reverseMap) {
                    var words = [];
                    var nBytes = 0;
                    for (var i = 0; i < base64StrLength; i++) {
                        if (i % 4) {
                            var bits1 = reverseMap[base64Str.charCodeAt(i - 1)] << i % 4 * 2;
                            var bits2 = reverseMap[base64Str.charCodeAt(i)] >>> 6 - i % 4 * 2;
                            var bitsCombined = bits1 | bits2;
                            words[nBytes >>> 2] |= bitsCombined << 24 - nBytes % 4 * 8;
                            nBytes++;
                        }
                    }
                    return WordArray.create(words, nBytes);
                }
            })();
            return CryptoJS.enc.Base64;
        });
    })(encBase64);
    var encBase64Exports = encBase64.exports;
    const Base64 = getDefaultExportFromCjs(encBase64Exports);
    var md5 = {
        exports: {}
    };
    (function(module, exports) {
        (function(root, factory) {
            {
                module.exports = factory(requireCore());
            }
        })(commonjsGlobal, function(CryptoJS) {
            (function(Math2) {
                var C = CryptoJS;
                var C_lib = C.lib;
                var WordArray = C_lib.WordArray;
                var Hasher = C_lib.Hasher;
                var C_algo = C.algo;
                var T = [];
                (function() {
                    for (var i = 0; i < 64; i++) {
                        T[i] = Math2.abs(Math2.sin(i + 1)) * 4294967296 | 0;
                    }
                })();
                var MD52 = C_algo.MD5 = Hasher.extend({
                    _doReset: function() {
                        this._hash = new WordArray.init([ 1732584193, 4023233417, 2562383102, 271733878 ]);
                    },
                    _doProcessBlock: function(M, offset) {
                        for (var i = 0; i < 16; i++) {
                            var offset_i = offset + i;
                            var M_offset_i = M[offset_i];
                            M[offset_i] = (M_offset_i << 8 | M_offset_i >>> 24) & 16711935 | (M_offset_i << 24 | M_offset_i >>> 8) & 4278255360;
                        }
                        var H = this._hash.words;
                        var M_offset_0 = M[offset + 0];
                        var M_offset_1 = M[offset + 1];
                        var M_offset_2 = M[offset + 2];
                        var M_offset_3 = M[offset + 3];
                        var M_offset_4 = M[offset + 4];
                        var M_offset_5 = M[offset + 5];
                        var M_offset_6 = M[offset + 6];
                        var M_offset_7 = M[offset + 7];
                        var M_offset_8 = M[offset + 8];
                        var M_offset_9 = M[offset + 9];
                        var M_offset_10 = M[offset + 10];
                        var M_offset_11 = M[offset + 11];
                        var M_offset_12 = M[offset + 12];
                        var M_offset_13 = M[offset + 13];
                        var M_offset_14 = M[offset + 14];
                        var M_offset_15 = M[offset + 15];
                        var a = H[0];
                        var b = H[1];
                        var c = H[2];
                        var d = H[3];
                        a = FF(a, b, c, d, M_offset_0, 7, T[0]);
                        d = FF(d, a, b, c, M_offset_1, 12, T[1]);
                        c = FF(c, d, a, b, M_offset_2, 17, T[2]);
                        b = FF(b, c, d, a, M_offset_3, 22, T[3]);
                        a = FF(a, b, c, d, M_offset_4, 7, T[4]);
                        d = FF(d, a, b, c, M_offset_5, 12, T[5]);
                        c = FF(c, d, a, b, M_offset_6, 17, T[6]);
                        b = FF(b, c, d, a, M_offset_7, 22, T[7]);
                        a = FF(a, b, c, d, M_offset_8, 7, T[8]);
                        d = FF(d, a, b, c, M_offset_9, 12, T[9]);
                        c = FF(c, d, a, b, M_offset_10, 17, T[10]);
                        b = FF(b, c, d, a, M_offset_11, 22, T[11]);
                        a = FF(a, b, c, d, M_offset_12, 7, T[12]);
                        d = FF(d, a, b, c, M_offset_13, 12, T[13]);
                        c = FF(c, d, a, b, M_offset_14, 17, T[14]);
                        b = FF(b, c, d, a, M_offset_15, 22, T[15]);
                        a = GG(a, b, c, d, M_offset_1, 5, T[16]);
                        d = GG(d, a, b, c, M_offset_6, 9, T[17]);
                        c = GG(c, d, a, b, M_offset_11, 14, T[18]);
                        b = GG(b, c, d, a, M_offset_0, 20, T[19]);
                        a = GG(a, b, c, d, M_offset_5, 5, T[20]);
                        d = GG(d, a, b, c, M_offset_10, 9, T[21]);
                        c = GG(c, d, a, b, M_offset_15, 14, T[22]);
                        b = GG(b, c, d, a, M_offset_4, 20, T[23]);
                        a = GG(a, b, c, d, M_offset_9, 5, T[24]);
                        d = GG(d, a, b, c, M_offset_14, 9, T[25]);
                        c = GG(c, d, a, b, M_offset_3, 14, T[26]);
                        b = GG(b, c, d, a, M_offset_8, 20, T[27]);
                        a = GG(a, b, c, d, M_offset_13, 5, T[28]);
                        d = GG(d, a, b, c, M_offset_2, 9, T[29]);
                        c = GG(c, d, a, b, M_offset_7, 14, T[30]);
                        b = GG(b, c, d, a, M_offset_12, 20, T[31]);
                        a = HH(a, b, c, d, M_offset_5, 4, T[32]);
                        d = HH(d, a, b, c, M_offset_8, 11, T[33]);
                        c = HH(c, d, a, b, M_offset_11, 16, T[34]);
                        b = HH(b, c, d, a, M_offset_14, 23, T[35]);
                        a = HH(a, b, c, d, M_offset_1, 4, T[36]);
                        d = HH(d, a, b, c, M_offset_4, 11, T[37]);
                        c = HH(c, d, a, b, M_offset_7, 16, T[38]);
                        b = HH(b, c, d, a, M_offset_10, 23, T[39]);
                        a = HH(a, b, c, d, M_offset_13, 4, T[40]);
                        d = HH(d, a, b, c, M_offset_0, 11, T[41]);
                        c = HH(c, d, a, b, M_offset_3, 16, T[42]);
                        b = HH(b, c, d, a, M_offset_6, 23, T[43]);
                        a = HH(a, b, c, d, M_offset_9, 4, T[44]);
                        d = HH(d, a, b, c, M_offset_12, 11, T[45]);
                        c = HH(c, d, a, b, M_offset_15, 16, T[46]);
                        b = HH(b, c, d, a, M_offset_2, 23, T[47]);
                        a = II(a, b, c, d, M_offset_0, 6, T[48]);
                        d = II(d, a, b, c, M_offset_7, 10, T[49]);
                        c = II(c, d, a, b, M_offset_14, 15, T[50]);
                        b = II(b, c, d, a, M_offset_5, 21, T[51]);
                        a = II(a, b, c, d, M_offset_12, 6, T[52]);
                        d = II(d, a, b, c, M_offset_3, 10, T[53]);
                        c = II(c, d, a, b, M_offset_10, 15, T[54]);
                        b = II(b, c, d, a, M_offset_1, 21, T[55]);
                        a = II(a, b, c, d, M_offset_8, 6, T[56]);
                        d = II(d, a, b, c, M_offset_15, 10, T[57]);
                        c = II(c, d, a, b, M_offset_6, 15, T[58]);
                        b = II(b, c, d, a, M_offset_13, 21, T[59]);
                        a = II(a, b, c, d, M_offset_4, 6, T[60]);
                        d = II(d, a, b, c, M_offset_11, 10, T[61]);
                        c = II(c, d, a, b, M_offset_2, 15, T[62]);
                        b = II(b, c, d, a, M_offset_9, 21, T[63]);
                        H[0] = H[0] + a | 0;
                        H[1] = H[1] + b | 0;
                        H[2] = H[2] + c | 0;
                        H[3] = H[3] + d | 0;
                    },
                    _doFinalize: function() {
                        var data = this._data;
                        var dataWords = data.words;
                        var nBitsTotal = this._nDataBytes * 8;
                        var nBitsLeft = data.sigBytes * 8;
                        dataWords[nBitsLeft >>> 5] |= 128 << 24 - nBitsLeft % 32;
                        var nBitsTotalH = Math2.floor(nBitsTotal / 4294967296);
                        var nBitsTotalL = nBitsTotal;
                        dataWords[(nBitsLeft + 64 >>> 9 << 4) + 15] = (nBitsTotalH << 8 | nBitsTotalH >>> 24) & 16711935 | (nBitsTotalH << 24 | nBitsTotalH >>> 8) & 4278255360;
                        dataWords[(nBitsLeft + 64 >>> 9 << 4) + 14] = (nBitsTotalL << 8 | nBitsTotalL >>> 24) & 16711935 | (nBitsTotalL << 24 | nBitsTotalL >>> 8) & 4278255360;
                        data.sigBytes = (dataWords.length + 1) * 4;
                        this._process();
                        var hash = this._hash;
                        var H = hash.words;
                        for (var i = 0; i < 4; i++) {
                            var H_i = H[i];
                            H[i] = (H_i << 8 | H_i >>> 24) & 16711935 | (H_i << 24 | H_i >>> 8) & 4278255360;
                        }
                        return hash;
                    },
                    clone: function() {
                        var clone = Hasher.clone.call(this);
                        clone._hash = this._hash.clone();
                        return clone;
                    }
                });
                function FF(a, b, c, d, x, s, t) {
                    var n = a + (b & c | ~b & d) + x + t;
                    return (n << s | n >>> 32 - s) + b;
                }
                function GG(a, b, c, d, x, s, t) {
                    var n = a + (b & d | c & ~d) + x + t;
                    return (n << s | n >>> 32 - s) + b;
                }
                function HH(a, b, c, d, x, s, t) {
                    var n = a + (b ^ c ^ d) + x + t;
                    return (n << s | n >>> 32 - s) + b;
                }
                function II(a, b, c, d, x, s, t) {
                    var n = a + (c ^ (b | ~d)) + x + t;
                    return (n << s | n >>> 32 - s) + b;
                }
                C.MD5 = Hasher._createHelper(MD52);
                C.HmacMD5 = Hasher._createHmacHelper(MD52);
            })(Math);
            return CryptoJS.MD5;
        });
    })(md5);
    var md5Exports = md5.exports;
    const MD5 = getDefaultExportFromCjs(md5Exports);
    var evpkdf = {
        exports: {}
    };
    var sha1 = {
        exports: {}
    };
    var hasRequiredSha1;
    function requireSha1() {
        if (hasRequiredSha1) return sha1.exports;
        hasRequiredSha1 = 1;
        (function(module, exports) {
            (function(root, factory) {
                {
                    module.exports = factory(requireCore());
                }
            })(commonjsGlobal, function(CryptoJS) {
                (function() {
                    var C = CryptoJS;
                    var C_lib = C.lib;
                    var WordArray = C_lib.WordArray;
                    var Hasher = C_lib.Hasher;
                    var C_algo = C.algo;
                    var W = [];
                    var SHA1 = C_algo.SHA1 = Hasher.extend({
                        _doReset: function() {
                            this._hash = new WordArray.init([ 1732584193, 4023233417, 2562383102, 271733878, 3285377520 ]);
                        },
                        _doProcessBlock: function(M, offset) {
                            var H = this._hash.words;
                            var a = H[0];
                            var b = H[1];
                            var c = H[2];
                            var d = H[3];
                            var e = H[4];
                            for (var i = 0; i < 80; i++) {
                                if (i < 16) {
                                    W[i] = M[offset + i] | 0;
                                } else {
                                    var n = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16];
                                    W[i] = n << 1 | n >>> 31;
                                }
                                var t = (a << 5 | a >>> 27) + e + W[i];
                                if (i < 20) {
                                    t += (b & c | ~b & d) + 1518500249;
                                } else if (i < 40) {
                                    t += (b ^ c ^ d) + 1859775393;
                                } else if (i < 60) {
                                    t += (b & c | b & d | c & d) - 1894007588;
                                } else {
                                    t += (b ^ c ^ d) - 899497514;
                                }
                                e = d;
                                d = c;
                                c = b << 30 | b >>> 2;
                                b = a;
                                a = t;
                            }
                            H[0] = H[0] + a | 0;
                            H[1] = H[1] + b | 0;
                            H[2] = H[2] + c | 0;
                            H[3] = H[3] + d | 0;
                            H[4] = H[4] + e | 0;
                        },
                        _doFinalize: function() {
                            var data = this._data;
                            var dataWords = data.words;
                            var nBitsTotal = this._nDataBytes * 8;
                            var nBitsLeft = data.sigBytes * 8;
                            dataWords[nBitsLeft >>> 5] |= 128 << 24 - nBitsLeft % 32;
                            dataWords[(nBitsLeft + 64 >>> 9 << 4) + 14] = Math.floor(nBitsTotal / 4294967296);
                            dataWords[(nBitsLeft + 64 >>> 9 << 4) + 15] = nBitsTotal;
                            data.sigBytes = dataWords.length * 4;
                            this._process();
                            return this._hash;
                        },
                        clone: function() {
                            var clone = Hasher.clone.call(this);
                            clone._hash = this._hash.clone();
                            return clone;
                        }
                    });
                    C.SHA1 = Hasher._createHelper(SHA1);
                    C.HmacSHA1 = Hasher._createHmacHelper(SHA1);
                })();
                return CryptoJS.SHA1;
            });
        })(sha1);
        return sha1.exports;
    }
    var hmac = {
        exports: {}
    };
    var hasRequiredHmac;
    function requireHmac() {
        if (hasRequiredHmac) return hmac.exports;
        hasRequiredHmac = 1;
        (function(module, exports) {
            (function(root, factory) {
                {
                    module.exports = factory(requireCore());
                }
            })(commonjsGlobal, function(CryptoJS) {
                (function() {
                    var C = CryptoJS;
                    var C_lib = C.lib;
                    var Base = C_lib.Base;
                    var C_enc = C.enc;
                    var Utf82 = C_enc.Utf8;
                    var C_algo = C.algo;
                    C_algo.HMAC = Base.extend({
                        init: function(hasher, key2) {
                            hasher = this._hasher = new hasher.init;
                            if (typeof key2 == "string") {
                                key2 = Utf82.parse(key2);
                            }
                            var hasherBlockSize = hasher.blockSize;
                            var hasherBlockSizeBytes = hasherBlockSize * 4;
                            if (key2.sigBytes > hasherBlockSizeBytes) {
                                key2 = hasher.finalize(key2);
                            }
                            key2.clamp();
                            var oKey = this._oKey = key2.clone();
                            var iKey = this._iKey = key2.clone();
                            var oKeyWords = oKey.words;
                            var iKeyWords = iKey.words;
                            for (var i = 0; i < hasherBlockSize; i++) {
                                oKeyWords[i] ^= 1549556828;
                                iKeyWords[i] ^= 909522486;
                            }
                            oKey.sigBytes = iKey.sigBytes = hasherBlockSizeBytes;
                            this.reset();
                        },
                        reset: function() {
                            var hasher = this._hasher;
                            hasher.reset();
                            hasher.update(this._iKey);
                        },
                        update: function(messageUpdate) {
                            this._hasher.update(messageUpdate);
                            return this;
                        },
                        finalize: function(messageUpdate) {
                            var hasher = this._hasher;
                            var innerHash = hasher.finalize(messageUpdate);
                            hasher.reset();
                            var hmac2 = hasher.finalize(this._oKey.clone().concat(innerHash));
                            return hmac2;
                        }
                    });
                })();
            });
        })(hmac);
        return hmac.exports;
    }
    var hasRequiredEvpkdf;
    function requireEvpkdf() {
        if (hasRequiredEvpkdf) return evpkdf.exports;
        hasRequiredEvpkdf = 1;
        (function(module, exports) {
            (function(root, factory, undef) {
                {
                    module.exports = factory(requireCore(), requireSha1(), requireHmac());
                }
            })(commonjsGlobal, function(CryptoJS) {
                (function() {
                    var C = CryptoJS;
                    var C_lib = C.lib;
                    var Base = C_lib.Base;
                    var WordArray = C_lib.WordArray;
                    var C_algo = C.algo;
                    var MD52 = C_algo.MD5;
                    var EvpKDF = C_algo.EvpKDF = Base.extend({
                        cfg: Base.extend({
                            keySize: 128 / 32,
                            hasher: MD52,
                            iterations: 1
                        }),
                        init: function(cfg) {
                            this.cfg = this.cfg.extend(cfg);
                        },
                        compute: function(password, salt) {
                            var block;
                            var cfg = this.cfg;
                            var hasher = cfg.hasher.create();
                            var derivedKey = WordArray.create();
                            var derivedKeyWords = derivedKey.words;
                            var keySize = cfg.keySize;
                            var iterations = cfg.iterations;
                            while (derivedKeyWords.length < keySize) {
                                if (block) {
                                    hasher.update(block);
                                }
                                block = hasher.update(password).finalize(salt);
                                hasher.reset();
                                for (var i = 1; i < iterations; i++) {
                                    block = hasher.finalize(block);
                                    hasher.reset();
                                }
                                derivedKey.concat(block);
                            }
                            derivedKey.sigBytes = keySize * 4;
                            return derivedKey;
                        }
                    });
                    C.EvpKDF = function(password, salt, cfg) {
                        return EvpKDF.create(cfg).compute(password, salt);
                    };
                })();
                return CryptoJS.EvpKDF;
            });
        })(evpkdf);
        return evpkdf.exports;
    }
    var cipherCore = {
        exports: {}
    };
    var hasRequiredCipherCore;
    function requireCipherCore() {
        if (hasRequiredCipherCore) return cipherCore.exports;
        hasRequiredCipherCore = 1;
        (function(module, exports) {
            (function(root, factory, undef) {
                {
                    module.exports = factory(requireCore(), requireEvpkdf());
                }
            })(commonjsGlobal, function(CryptoJS) {
                CryptoJS.lib.Cipher || function(undefined$1) {
                    var C = CryptoJS;
                    var C_lib = C.lib;
                    var Base = C_lib.Base;
                    var WordArray = C_lib.WordArray;
                    var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm;
                    var C_enc = C.enc;
                    var Base642 = C_enc.Base64;
                    var C_algo = C.algo;
                    var EvpKDF = C_algo.EvpKDF;
                    var Cipher = C_lib.Cipher = BufferedBlockAlgorithm.extend({
                        cfg: Base.extend(),
                        createEncryptor: function(key2, cfg) {
                            return this.create(this._ENC_XFORM_MODE, key2, cfg);
                        },
                        createDecryptor: function(key2, cfg) {
                            return this.create(this._DEC_XFORM_MODE, key2, cfg);
                        },
                        init: function(xformMode, key2, cfg) {
                            this.cfg = this.cfg.extend(cfg);
                            this._xformMode = xformMode;
                            this._key = key2;
                            this.reset();
                        },
                        reset: function() {
                            BufferedBlockAlgorithm.reset.call(this);
                            this._doReset();
                        },
                        process: function(dataUpdate) {
                            this._append(dataUpdate);
                            return this._process();
                        },
                        finalize: function(dataUpdate) {
                            if (dataUpdate) {
                                this._append(dataUpdate);
                            }
                            var finalProcessedData = this._doFinalize();
                            return finalProcessedData;
                        },
                        keySize: 128 / 32,
                        ivSize: 128 / 32,
                        _ENC_XFORM_MODE: 1,
                        _DEC_XFORM_MODE: 2,
                        _createHelper: function() {
                            function selectCipherStrategy(key2) {
                                if (typeof key2 == "string") {
                                    return PasswordBasedCipher;
                                } else {
                                    return SerializableCipher;
                                }
                            }
                            return function(cipher) {
                                return {
                                    encrypt: function(message, key2, cfg) {
                                        return selectCipherStrategy(key2).encrypt(cipher, message, key2, cfg);
                                    },
                                    decrypt: function(ciphertext, key2, cfg) {
                                        return selectCipherStrategy(key2).decrypt(cipher, ciphertext, key2, cfg);
                                    }
                                };
                            };
                        }()
                    });
                    C_lib.StreamCipher = Cipher.extend({
                        _doFinalize: function() {
                            var finalProcessedBlocks = this._process(true);
                            return finalProcessedBlocks;
                        },
                        blockSize: 1
                    });
                    var C_mode = C.mode = {};
                    var BlockCipherMode = C_lib.BlockCipherMode = Base.extend({
                        createEncryptor: function(cipher, iv2) {
                            return this.Encryptor.create(cipher, iv2);
                        },
                        createDecryptor: function(cipher, iv2) {
                            return this.Decryptor.create(cipher, iv2);
                        },
                        init: function(cipher, iv2) {
                            this._cipher = cipher;
                            this._iv = iv2;
                        }
                    });
                    var CBC = C_mode.CBC = function() {
                        var CBC2 = BlockCipherMode.extend();
                        CBC2.Encryptor = CBC2.extend({
                            processBlock: function(words, offset) {
                                var cipher = this._cipher;
                                var blockSize = cipher.blockSize;
                                xorBlock.call(this, words, offset, blockSize);
                                cipher.encryptBlock(words, offset);
                                this._prevBlock = words.slice(offset, offset + blockSize);
                            }
                        });
                        CBC2.Decryptor = CBC2.extend({
                            processBlock: function(words, offset) {
                                var cipher = this._cipher;
                                var blockSize = cipher.blockSize;
                                var thisBlock = words.slice(offset, offset + blockSize);
                                cipher.decryptBlock(words, offset);
                                xorBlock.call(this, words, offset, blockSize);
                                this._prevBlock = thisBlock;
                            }
                        });
                        function xorBlock(words, offset, blockSize) {
                            var block;
                            var iv2 = this._iv;
                            if (iv2) {
                                block = iv2;
                                this._iv = undefined$1;
                            } else {
                                block = this._prevBlock;
                            }
                            for (var i = 0; i < blockSize; i++) {
                                words[offset + i] ^= block[i];
                            }
                        }
                        return CBC2;
                    }();
                    var C_pad = C.pad = {};
                    var Pkcs72 = C_pad.Pkcs7 = {
                        pad: function(data, blockSize) {
                            var blockSizeBytes = blockSize * 4;
                            var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes;
                            var paddingWord = nPaddingBytes << 24 | nPaddingBytes << 16 | nPaddingBytes << 8 | nPaddingBytes;
                            var paddingWords = [];
                            for (var i = 0; i < nPaddingBytes; i += 4) {
                                paddingWords.push(paddingWord);
                            }
                            var padding = WordArray.create(paddingWords, nPaddingBytes);
                            data.concat(padding);
                        },
                        unpad: function(data) {
                            var nPaddingBytes = data.words[data.sigBytes - 1 >>> 2] & 255;
                            data.sigBytes -= nPaddingBytes;
                        }
                    };
                    C_lib.BlockCipher = Cipher.extend({
                        cfg: Cipher.cfg.extend({
                            mode: CBC,
                            padding: Pkcs72
                        }),
                        reset: function() {
                            var modeCreator;
                            Cipher.reset.call(this);
                            var cfg = this.cfg;
                            var iv2 = cfg.iv;
                            var mode = cfg.mode;
                            if (this._xformMode == this._ENC_XFORM_MODE) {
                                modeCreator = mode.createEncryptor;
                            } else {
                                modeCreator = mode.createDecryptor;
                                this._minBufferSize = 1;
                            }
                            if (this._mode && this._mode.__creator == modeCreator) {
                                this._mode.init(this, iv2 && iv2.words);
                            } else {
                                this._mode = modeCreator.call(mode, this, iv2 && iv2.words);
                                this._mode.__creator = modeCreator;
                            }
                        },
                        _doProcessBlock: function(words, offset) {
                            this._mode.processBlock(words, offset);
                        },
                        _doFinalize: function() {
                            var finalProcessedBlocks;
                            var padding = this.cfg.padding;
                            if (this._xformMode == this._ENC_XFORM_MODE) {
                                padding.pad(this._data, this.blockSize);
                                finalProcessedBlocks = this._process(true);
                            } else {
                                finalProcessedBlocks = this._process(true);
                                padding.unpad(finalProcessedBlocks);
                            }
                            return finalProcessedBlocks;
                        },
                        blockSize: 128 / 32
                    });
                    var CipherParams = C_lib.CipherParams = Base.extend({
                        init: function(cipherParams) {
                            this.mixIn(cipherParams);
                        },
                        toString: function(formatter) {
                            return (formatter || this.formatter).stringify(this);
                        }
                    });
                    var C_format = C.format = {};
                    var OpenSSLFormatter = C_format.OpenSSL = {
                        stringify: function(cipherParams) {
                            var wordArray;
                            var ciphertext = cipherParams.ciphertext;
                            var salt = cipherParams.salt;
                            if (salt) {
                                wordArray = WordArray.create([ 1398893684, 1701076831 ]).concat(salt).concat(ciphertext);
                            } else {
                                wordArray = ciphertext;
                            }
                            return wordArray.toString(Base642);
                        },
                        parse: function(openSSLStr) {
                            var salt;
                            var ciphertext = Base642.parse(openSSLStr);
                            var ciphertextWords = ciphertext.words;
                            if (ciphertextWords[0] == 1398893684 && ciphertextWords[1] == 1701076831) {
                                salt = WordArray.create(ciphertextWords.slice(2, 4));
                                ciphertextWords.splice(0, 4);
                                ciphertext.sigBytes -= 16;
                            }
                            return CipherParams.create({
                                ciphertext: ciphertext,
                                salt: salt
                            });
                        }
                    };
                    var SerializableCipher = C_lib.SerializableCipher = Base.extend({
                        cfg: Base.extend({
                            format: OpenSSLFormatter
                        }),
                        encrypt: function(cipher, message, key2, cfg) {
                            cfg = this.cfg.extend(cfg);
                            var encryptor = cipher.createEncryptor(key2, cfg);
                            var ciphertext = encryptor.finalize(message);
                            var cipherCfg = encryptor.cfg;
                            return CipherParams.create({
                                ciphertext: ciphertext,
                                key: key2,
                                iv: cipherCfg.iv,
                                algorithm: cipher,
                                mode: cipherCfg.mode,
                                padding: cipherCfg.padding,
                                blockSize: cipher.blockSize,
                                formatter: cfg.format
                            });
                        },
                        decrypt: function(cipher, ciphertext, key2, cfg) {
                            cfg = this.cfg.extend(cfg);
                            ciphertext = this._parse(ciphertext, cfg.format);
                            var plaintext = cipher.createDecryptor(key2, cfg).finalize(ciphertext.ciphertext);
                            return plaintext;
                        },
                        _parse: function(ciphertext, format) {
                            if (typeof ciphertext == "string") {
                                return format.parse(ciphertext, this);
                            } else {
                                return ciphertext;
                            }
                        }
                    });
                    var C_kdf = C.kdf = {};
                    var OpenSSLKdf = C_kdf.OpenSSL = {
                        execute: function(password, keySize, ivSize, salt, hasher) {
                            if (!salt) {
                                salt = WordArray.random(64 / 8);
                            }
                            if (!hasher) {
                                var key2 = EvpKDF.create({
                                    keySize: keySize + ivSize
                                }).compute(password, salt);
                            } else {
                                var key2 = EvpKDF.create({
                                    keySize: keySize + ivSize,
                                    hasher: hasher
                                }).compute(password, salt);
                            }
                            var iv2 = WordArray.create(key2.words.slice(keySize), ivSize * 4);
                            key2.sigBytes = keySize * 4;
                            return CipherParams.create({
                                key: key2,
                                iv: iv2,
                                salt: salt
                            });
                        }
                    };
                    var PasswordBasedCipher = C_lib.PasswordBasedCipher = SerializableCipher.extend({
                        cfg: SerializableCipher.cfg.extend({
                            kdf: OpenSSLKdf
                        }),
                        encrypt: function(cipher, message, password, cfg) {
                            cfg = this.cfg.extend(cfg);
                            var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize, cfg.salt, cfg.hasher);
                            cfg.iv = derivedParams.iv;
                            var ciphertext = SerializableCipher.encrypt.call(this, cipher, message, derivedParams.key, cfg);
                            ciphertext.mixIn(derivedParams);
                            return ciphertext;
                        },
                        decrypt: function(cipher, ciphertext, password, cfg) {
                            cfg = this.cfg.extend(cfg);
                            ciphertext = this._parse(ciphertext, cfg.format);
                            var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize, ciphertext.salt, cfg.hasher);
                            cfg.iv = derivedParams.iv;
                            var plaintext = SerializableCipher.decrypt.call(this, cipher, ciphertext, derivedParams.key, cfg);
                            return plaintext;
                        }
                    });
                }();
            });
        })(cipherCore);
        return cipherCore.exports;
    }
    (function(module, exports) {
        (function(root, factory, undef) {
            {
                module.exports = factory(requireCore(), encBase64Exports, md5Exports, requireEvpkdf(), requireCipherCore());
            }
        })(commonjsGlobal, function(CryptoJS) {
            (function() {
                var C = CryptoJS;
                var C_lib = C.lib;
                var BlockCipher = C_lib.BlockCipher;
                var C_algo = C.algo;
                var SBOX = [];
                var INV_SBOX = [];
                var SUB_MIX_0 = [];
                var SUB_MIX_1 = [];
                var SUB_MIX_2 = [];
                var SUB_MIX_3 = [];
                var INV_SUB_MIX_0 = [];
                var INV_SUB_MIX_1 = [];
                var INV_SUB_MIX_2 = [];
                var INV_SUB_MIX_3 = [];
                (function() {
                    var d = [];
                    for (var i = 0; i < 256; i++) {
                        if (i < 128) {
                            d[i] = i << 1;
                        } else {
                            d[i] = i << 1 ^ 283;
                        }
                    }
                    var x = 0;
                    var xi = 0;
                    for (var i = 0; i < 256; i++) {
                        var sx = xi ^ xi << 1 ^ xi << 2 ^ xi << 3 ^ xi << 4;
                        sx = sx >>> 8 ^ sx & 255 ^ 99;
                        SBOX[x] = sx;
                        INV_SBOX[sx] = x;
                        var x2 = d[x];
                        var x4 = d[x2];
                        var x8 = d[x4];
                        var t = d[sx] * 257 ^ sx * 16843008;
                        SUB_MIX_0[x] = t << 24 | t >>> 8;
                        SUB_MIX_1[x] = t << 16 | t >>> 16;
                        SUB_MIX_2[x] = t << 8 | t >>> 24;
                        SUB_MIX_3[x] = t;
                        var t = x8 * 16843009 ^ x4 * 65537 ^ x2 * 257 ^ x * 16843008;
                        INV_SUB_MIX_0[sx] = t << 24 | t >>> 8;
                        INV_SUB_MIX_1[sx] = t << 16 | t >>> 16;
                        INV_SUB_MIX_2[sx] = t << 8 | t >>> 24;
                        INV_SUB_MIX_3[sx] = t;
                        if (!x) {
                            x = xi = 1;
                        } else {
                            x = x2 ^ d[d[d[x8 ^ x2]]];
                            xi ^= d[d[xi]];
                        }
                    }
                })();
                var RCON = [ 0, 1, 2, 4, 8, 16, 32, 64, 128, 27, 54 ];
                var AES2 = C_algo.AES = BlockCipher.extend({
                    _doReset: function() {
                        var t;
                        if (this._nRounds && this._keyPriorReset === this._key) {
                            return;
                        }
                        var key2 = this._keyPriorReset = this._key;
                        var keyWords = key2.words;
                        var keySize = key2.sigBytes / 4;
                        var nRounds = this._nRounds = keySize + 6;
                        var ksRows = (nRounds + 1) * 4;
                        var keySchedule = this._keySchedule = [];
                        for (var ksRow = 0; ksRow < ksRows; ksRow++) {
                            if (ksRow < keySize) {
                                keySchedule[ksRow] = keyWords[ksRow];
                            } else {
                                t = keySchedule[ksRow - 1];
                                if (!(ksRow % keySize)) {
                                    t = t << 8 | t >>> 24;
                                    t = SBOX[t >>> 24] << 24 | SBOX[t >>> 16 & 255] << 16 | SBOX[t >>> 8 & 255] << 8 | SBOX[t & 255];
                                    t ^= RCON[ksRow / keySize | 0] << 24;
                                } else if (keySize > 6 && ksRow % keySize == 4) {
                                    t = SBOX[t >>> 24] << 24 | SBOX[t >>> 16 & 255] << 16 | SBOX[t >>> 8 & 255] << 8 | SBOX[t & 255];
                                }
                                keySchedule[ksRow] = keySchedule[ksRow - keySize] ^ t;
                            }
                        }
                        var invKeySchedule = this._invKeySchedule = [];
                        for (var invKsRow = 0; invKsRow < ksRows; invKsRow++) {
                            var ksRow = ksRows - invKsRow;
                            if (invKsRow % 4) {
                                var t = keySchedule[ksRow];
                            } else {
                                var t = keySchedule[ksRow - 4];
                            }
                            if (invKsRow < 4 || ksRow <= 4) {
                                invKeySchedule[invKsRow] = t;
                            } else {
                                invKeySchedule[invKsRow] = INV_SUB_MIX_0[SBOX[t >>> 24]] ^ INV_SUB_MIX_1[SBOX[t >>> 16 & 255]] ^ INV_SUB_MIX_2[SBOX[t >>> 8 & 255]] ^ INV_SUB_MIX_3[SBOX[t & 255]];
                            }
                        }
                    },
                    encryptBlock: function(M, offset) {
                        this._doCryptBlock(M, offset, this._keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX);
                    },
                    decryptBlock: function(M, offset) {
                        var t = M[offset + 1];
                        M[offset + 1] = M[offset + 3];
                        M[offset + 3] = t;
                        this._doCryptBlock(M, offset, this._invKeySchedule, INV_SUB_MIX_0, INV_SUB_MIX_1, INV_SUB_MIX_2, INV_SUB_MIX_3, INV_SBOX);
                        var t = M[offset + 1];
                        M[offset + 1] = M[offset + 3];
                        M[offset + 3] = t;
                    },
                    _doCryptBlock: function(M, offset, keySchedule, SUB_MIX_02, SUB_MIX_12, SUB_MIX_22, SUB_MIX_32, SBOX2) {
                        var nRounds = this._nRounds;
                        var s0 = M[offset] ^ keySchedule[0];
                        var s1 = M[offset + 1] ^ keySchedule[1];
                        var s2 = M[offset + 2] ^ keySchedule[2];
                        var s3 = M[offset + 3] ^ keySchedule[3];
                        var ksRow = 4;
                        for (var round = 1; round < nRounds; round++) {
                            var t0 = SUB_MIX_02[s0 >>> 24] ^ SUB_MIX_12[s1 >>> 16 & 255] ^ SUB_MIX_22[s2 >>> 8 & 255] ^ SUB_MIX_32[s3 & 255] ^ keySchedule[ksRow++];
                            var t1 = SUB_MIX_02[s1 >>> 24] ^ SUB_MIX_12[s2 >>> 16 & 255] ^ SUB_MIX_22[s3 >>> 8 & 255] ^ SUB_MIX_32[s0 & 255] ^ keySchedule[ksRow++];
                            var t2 = SUB_MIX_02[s2 >>> 24] ^ SUB_MIX_12[s3 >>> 16 & 255] ^ SUB_MIX_22[s0 >>> 8 & 255] ^ SUB_MIX_32[s1 & 255] ^ keySchedule[ksRow++];
                            var t3 = SUB_MIX_02[s3 >>> 24] ^ SUB_MIX_12[s0 >>> 16 & 255] ^ SUB_MIX_22[s1 >>> 8 & 255] ^ SUB_MIX_32[s2 & 255] ^ keySchedule[ksRow++];
                            s0 = t0;
                            s1 = t1;
                            s2 = t2;
                            s3 = t3;
                        }
                        var t0 = (SBOX2[s0 >>> 24] << 24 | SBOX2[s1 >>> 16 & 255] << 16 | SBOX2[s2 >>> 8 & 255] << 8 | SBOX2[s3 & 255]) ^ keySchedule[ksRow++];
                        var t1 = (SBOX2[s1 >>> 24] << 24 | SBOX2[s2 >>> 16 & 255] << 16 | SBOX2[s3 >>> 8 & 255] << 8 | SBOX2[s0 & 255]) ^ keySchedule[ksRow++];
                        var t2 = (SBOX2[s2 >>> 24] << 24 | SBOX2[s3 >>> 16 & 255] << 16 | SBOX2[s0 >>> 8 & 255] << 8 | SBOX2[s1 & 255]) ^ keySchedule[ksRow++];
                        var t3 = (SBOX2[s3 >>> 24] << 24 | SBOX2[s0 >>> 16 & 255] << 16 | SBOX2[s1 >>> 8 & 255] << 8 | SBOX2[s2 & 255]) ^ keySchedule[ksRow++];
                        M[offset] = t0;
                        M[offset + 1] = t1;
                        M[offset + 2] = t2;
                        M[offset + 3] = t3;
                    },
                    keySize: 256 / 32
                });
                C.AES = BlockCipher._createHelper(AES2);
            })();
            return CryptoJS.AES;
        });
    })(aes);
    var aesExports = aes.exports;
    const AES = getDefaultExportFromCjs(aesExports);
    var encHex = {
        exports: {}
    };
    (function(module, exports) {
        (function(root, factory) {
            {
                module.exports = factory(requireCore());
            }
        })(commonjsGlobal, function(CryptoJS) {
            return CryptoJS.enc.Hex;
        });
    })(encHex);
    var encHexExports = encHex.exports;
    const Hex = getDefaultExportFromCjs(encHexExports);
    var encUtf8 = {
        exports: {}
    };
    (function(module, exports) {
        (function(root, factory) {
            {
                module.exports = factory(requireCore());
            }
        })(commonjsGlobal, function(CryptoJS) {
            return CryptoJS.enc.Utf8;
        });
    })(encUtf8);
    var encUtf8Exports = encUtf8.exports;
    const Utf8 = getDefaultExportFromCjs(encUtf8Exports);
    var coreExports = requireCore();
    const Core = getDefaultExportFromCjs(coreExports);
    var modeCfb = {
        exports: {}
    };
    (function(module, exports) {
        (function(root, factory, undef) {
            {
                module.exports = factory(requireCore(), requireCipherCore());
            }
        })(commonjsGlobal, function(CryptoJS) {
            CryptoJS.mode.CFB = function() {
                var CFB2 = CryptoJS.lib.BlockCipherMode.extend();
                CFB2.Encryptor = CFB2.extend({
                    processBlock: function(words, offset) {
                        var cipher = this._cipher;
                        var blockSize = cipher.blockSize;
                        generateKeystreamAndEncrypt.call(this, words, offset, blockSize, cipher);
                        this._prevBlock = words.slice(offset, offset + blockSize);
                    }
                });
                CFB2.Decryptor = CFB2.extend({
                    processBlock: function(words, offset) {
                        var cipher = this._cipher;
                        var blockSize = cipher.blockSize;
                        var thisBlock = words.slice(offset, offset + blockSize);
                        generateKeystreamAndEncrypt.call(this, words, offset, blockSize, cipher);
                        this._prevBlock = thisBlock;
                    }
                });
                function generateKeystreamAndEncrypt(words, offset, blockSize, cipher) {
                    var keystream;
                    var iv2 = this._iv;
                    if (iv2) {
                        keystream = iv2.slice(0);
                        this._iv = void 0;
                    } else {
                        keystream = this._prevBlock;
                    }
                    cipher.encryptBlock(keystream, 0);
                    for (var i = 0; i < blockSize; i++) {
                        words[offset + i] ^= keystream[i];
                    }
                }
                return CFB2;
            }();
            return CryptoJS.mode.CFB;
        });
    })(modeCfb);
    var modeCfbExports = modeCfb.exports;
    const CFBMode = getDefaultExportFromCjs(modeCfbExports);
    var modeEcb = {
        exports: {}
    };
    (function(module, exports) {
        (function(root, factory, undef) {
            {
                module.exports = factory(requireCore(), requireCipherCore());
            }
        })(commonjsGlobal, function(CryptoJS) {
            CryptoJS.mode.ECB = function() {
                var ECB2 = CryptoJS.lib.BlockCipherMode.extend();
                ECB2.Encryptor = ECB2.extend({
                    processBlock: function(words, offset) {
                        this._cipher.encryptBlock(words, offset);
                    }
                });
                ECB2.Decryptor = ECB2.extend({
                    processBlock: function(words, offset) {
                        this._cipher.decryptBlock(words, offset);
                    }
                });
                return ECB2;
            }();
            return CryptoJS.mode.ECB;
        });
    })(modeEcb);
    var modeEcbExports = modeEcb.exports;
    const ECB = getDefaultExportFromCjs(modeEcbExports);
    var padNopadding = {
        exports: {}
    };
    (function(module, exports) {
        (function(root, factory, undef) {
            {
                module.exports = factory(requireCore(), requireCipherCore());
            }
        })(commonjsGlobal, function(CryptoJS) {
            CryptoJS.pad.NoPadding = {
                pad: function() {},
                unpad: function() {}
            };
            return CryptoJS.pad.NoPadding;
        });
    })(padNopadding);
    var padNopaddingExports = padNopadding.exports;
    const NoPadding = getDefaultExportFromCjs(padNopaddingExports);
    var padPkcs7 = {
        exports: {}
    };
    (function(module, exports) {
        (function(root, factory, undef) {
            {
                module.exports = factory(requireCore(), requireCipherCore());
            }
        })(commonjsGlobal, function(CryptoJS) {
            return CryptoJS.pad.Pkcs7;
        });
    })(padPkcs7);
    var padPkcs7Exports = padPkcs7.exports;
    const Pkcs7 = getDefaultExportFromCjs(padPkcs7Exports);
    function AesDecryptCBCPKCS7(encryptedData, key2, iv2) {
        const keyWordArray = Utf8.parse(key2);
        const ivWordArray = Utf8.parse(iv2);
        const decrypted = AES.decrypt(encryptedData, keyWordArray, {
            iv: ivWordArray,
            padding: Pkcs7
        });
        return decrypted.toString(Utf8);
    }
    class CFB {
        constructor(key2, iv2) {
            __publicField(this, "key");
            __publicField(this, "iv");
            this.key = Hex.parse(key2);
            this.iv = Hex.parse(iv2);
        }
        decrypt(cipherTextHex) {
            const cipherParams = Core.lib.CipherParams.create({
                ciphertext: Hex.parse(cipherTextHex)
            });
            const decrypted = AES.decrypt(cipherParams, this.key, {
                iv: this.iv,
                mode: CFBMode,
                padding: NoPadding
            });
            return decrypted.toString(Utf8);
        }
    }
    class ECBPkcs7 {
        constructor(key2) {
            __publicField(this, "key");
            const keyWordArray = Utf8.parse(key2);
            const byteLength = keyWordArray.sigBytes;
            if (byteLength !== 16 && byteLength !== 24 && byteLength !== 32) {
                throw new Error(`ECBPkcs7 key length must be 16/24/32 bytes, got ${byteLength}`);
            }
            this.key = keyWordArray;
        }
        encrypt(plainText) {
            const plainWordArray = Utf8.parse(plainText);
            const encrypted = AES.encrypt(plainWordArray, this.key, {
                mode: ECB,
                padding: Pkcs7
            });
            return encrypted.ciphertext.toString(Base64);
        }
        decrypt(cipherTextBase64) {
            const cipherParams = Core.lib.CipherParams.create({
                ciphertext: Base64.parse(cipherTextBase64)
            });
            const decrypted = AES.decrypt(cipherParams, this.key, {
                mode: ECB,
                padding: Pkcs7
            });
            return decrypted.toString(Utf8);
        }
    }
    const key = "6363383864646339333537666634363165303866303437616564656536393262";
    const iv = "65383932323563666262696d676b6375";
    const cfb = new CFB(key, iv);
    function decryptReqData$2(reqBody) {
        const dataMatch = reqBody.match(/data=([^&]+)/);
        const dataValue = dataMatch ? dataMatch[1] : null;
        if (!dataValue) {
            return null;
        }
        const decrypt2 = cfb.decrypt(dataValue);
        return JSON.parse(decrypt2);
    }
    function decryptRespData$2(respData) {
        const data = JSON.parse(respData);
        const decrypt2 = cfb.decrypt(data.data);
        return JSON.parse(decrypt2);
    }
    function hook(body, respData) {
        const reqData = decryptReqData$2(body);
        const code = reqData.code;
        const mod = reqData.mod;
        let canContinue = false;
        if (mod == "system" && code == "index") {
            canContinue = true;
        }
        if (mod == "index" && code == "home") {
            canContinue = true;
        }
        if (mod == "index" && code == "auth") {
            canContinue = true;
        }
        if (!canContinue) {
            return;
        }
        const resData = decryptRespData$2(respData);
        let playItems = [];
        if (mod == "system") {
            playItems = resData.data.recommendedData;
        } else {
            playItems = resData.data;
        }
        const akPlayItems = SessionStorage.get("ak91ShortPornPlayItems") || {};
        playItems.forEach(item => {
            if (item.type == 1) {
                const playUrlMD5 = MD5(item.playUrl).toString();
                akPlayItems[playUrlMD5] = {
                    id: `short_${item.id}`,
                    title: item.title,
                    playURL: item.playUrl
                };
            }
        });
        SessionStorage.set("ak91ShortPornPlayItems", akPlayItems);
    }
    function setActivatePlayURL(playURL) {
        const playUrlMD5 = MD5(playURL).toString();
        SessionStorage.set("ak91ShortPornPlayMD5", playUrlMD5);
    }
    function Short91PornAPPInit() {
        const originalXhrSend = XMLHttpRequest.prototype.send;
        XMLHttpRequest.prototype.send = function(body) {
            this.addEventListener("load", function() {
                if (this.responseURL.includes("/pwa.php")) {
                    hook(body, this.response);
                }
                if (this.responseURL.includes(".m3u8")) {
                    setActivatePlayURL(this.responseURL);
                }
            });
            return originalXhrSend.apply(this, arguments);
        };
    }
    function tryToGetItemInSessionStorage() {
        const activatePlayURLMd5 = SessionStorage.get("ak91ShortPornPlayMD5");
        if (activatePlayURLMd5) {
            const akPlayItems = SessionStorage.get("ak91ShortPornPlayItems") || {};
            const item = akPlayItems[activatePlayURLMd5];
            if (item) {
                return {
                    id: item.id,
                    title: item.title
                };
            }
            return null;
        }
        return null;
    }
    function Short91PornInject() {
        return new Promise(resolve => {
            var _a, _b, _c;
            let analyzeURL = "https://short91Porn.com/";
            let title = "";
            let find = false;
            let remindMsg = "";
            if (window.location.pathname == "/home") {
                const item = tryToGetItemInSessionStorage();
                if (item) {
                    analyzeURL += item.id;
                    title = item.title;
                    find = true;
                }
            }
            if (/\/video\/(\d+)/.test(window.location.href)) {
                const videoId = (_a = window.location.href.match(/\/video\/(\d+)/)) == null ? void 0 : _a[1];
                if (videoId) {
                    analyzeURL += `video_${videoId}`;
                    find = true;
                }
            }
            if (/\/short\?id=(\d+)/.test(window.location.href)) {
                const videoId = (_b = window.location.href.match(/\/short\?id=(\d+)/)) == null ? void 0 : _b[1];
                if (videoId) {
                    analyzeURL += `short_${videoId}`;
                    find = true;
                }
            }
            if (/\/cartoonDetail\/(\d+)/.test(window.location.href)) {
                const videoId = (_c = window.location.href.match(/\/cartoonDetail\/(\d+)/)) == null ? void 0 : _c[1];
                if (videoId) {
                    analyzeURL += `cartoonDetail_${videoId}`;
                    find = true;
                }
            }
            if (!find) {
                resolve({
                    analyzeURL: "",
                    failReason: "未捕获到视频信息",
                    remindMsg: ""
                });
                return;
            }
            if (title) {
                remindMsg = '<p style="color: rgb(190,24,93);">请核对标题</p>';
                remindMsg += `<p style="color: rgb(190,24,93);">${title}</p>`;
            }
            resolve({
                analyzeURL: analyzeURL,
                failReason: "",
                remindMsg: remindMsg
            });
        });
    }
    function DecodeData(body) {
        if (body instanceof Uint8Array || body instanceof ArrayBuffer) {
            return new TextDecoder("utf-8").decode(body);
        }
        if (typeof body === "object") {
            return JSON.stringify(body);
        }
        return body;
    }
    const sessionKey$2 = "91_short_app";
    const aesKey$1 = "7f21f0eb260e396e";
    const aesIv$1 = "6cbe8a2b687e0ffb";
    const hookURLs$2 = {
        mv: /https:\/\/.*\/mv\/detail/,
        community: /https:\/\/.*\/community\/post_detail/
    };
    function decryptReqData$1(reqBody) {
        const dataMatch = reqBody.match(/data=([^&]+)/);
        const dataValue = dataMatch ? dataMatch[1] : null;
        if (!dataValue) {
            return null;
        }
        const decrypt2 = AesDecryptCBCPKCS7(dataValue, aesKey$1, aesIv$1);
        return JSON.parse(decrypt2);
    }
    function decryptRespData$1(respData) {
        const decrypt2 = AesDecryptCBCPKCS7(respData, aesKey$1, aesIv$1);
        return JSON.parse(decrypt2);
    }
    function mv(body, reply) {
        const reqBody = DecodeData(body);
        const response = DecodeData(reply);
        const reqData = decryptReqData$1(reqBody);
        const respData = decryptRespData$1(JSON.parse(response).data);
        if (!respData || !respData) {
            return;
        }
        console.log("respData: ", respData);
        const cacheData = {
            title: respData.data.row.title,
            id: reqData.id,
            anaURL: "https://91short.com/mv?id=" + reqData.id,
            haveVideo: true
        };
        SessionStorage.set(sessionKey$2, cacheData);
    }
    function community(body, reply) {
        const reqBody = DecodeData(body);
        const response = DecodeData(reply);
        const reqData = decryptReqData$1(reqBody);
        const respData = decryptRespData$1(JSON.parse(response).data);
        if (!respData || !respData) {
            return;
        }
        let haveVideo = false;
        console.log(respData);
        respData.data.detail.medias.forEach(element => {
            if (element.type === 2) {
                haveVideo = true;
            }
        });
        const cacheData = {
            title: respData.data.detail.title,
            id: reqData.id,
            anaURL: "https://91short.com/community?id=" + reqData.id,
            haveVideo: haveVideo
        };
        SessionStorage.set(sessionKey$2, cacheData);
    }
    function Short91APPInit() {
        SessionStorage.remove(sessionKey$2);
        const originalXhrSend = XMLHttpRequest.prototype.send;
        XMLHttpRequest.prototype.send = function(body) {
            this.addEventListener("load", function() {
                for (const [key2, hookURL] of Object.entries(hookURLs$2)) {
                    if (hookURL.test(this.responseURL)) {
                        console.log("Request URL:", this.responseURL);
                        if (key2 === "mv") {
                            mv(body, this.response);
                        } else if (key2 === "community") {
                            community(body, this.response);
                        }
                    }
                }
            });
            return originalXhrSend.apply(this, arguments);
        };
    }
    function Short91APPInject() {
        return new Promise(resolve => {
            const cacheData = SessionStorage.get(sessionKey$2);
            if (!cacheData) {
                resolve({
                    analyzeURL: "",
                    failReason: "抱歉:未检测到任何视频或暂不支持该类型"
                });
                return;
            }
            SessionStorage.remove(sessionKey$2);
            if (!cacheData.haveVideo) {
                resolve({
                    analyzeURL: "",
                    failReason: "您好: 当前页面不存在视频"
                });
            }
            let remindMsg = '<p style="color: rgb(190,24,93);">请核对标题</p>';
            remindMsg += `<p style="color: rgb(190,24,93);">${cacheData.title}</p>`;
            remindMsg += '<p style="color: rgb(190,24,93);">若点击取消需要重新回到当前页面哦~</p>';
            resolve({
                analyzeURL: cacheData.anaURL,
                failReason: "",
                remindMsg: remindMsg
            });
        });
    }
    const sessionKey$1 = "hj_short_video";
    function decrypt(data) {
        const atobData1 = atob(data);
        const atobData2 = atob(atobData1);
        const atobData3 = atob(atobData2);
        return JSON.parse(atobData3);
    }
    function cacheCheckCanPlayData(data, reqURL) {
        console.log("response Data,", data);
        const videoId = new URL(reqURL).searchParams.get("video_id");
        const responseData = decrypt(JSON.parse(data).data);
        const cacheData = {
            videoId: videoId,
            amount: responseData.amount,
            anaURL: "https://v-short.haijiao.com?video_id=" + videoId
        };
        SessionStorage.set(sessionKey$1, cacheData);
    }
    function HaiJiaoInit() {
        SessionStorage.remove(sessionKey$1);
        const originalXhrSend = XMLHttpRequest.prototype.send;
        XMLHttpRequest.prototype.send = function(body) {
            this.addEventListener("load", function() {
                if (this.responseURL.includes("checkVideoCanPlay")) {
                    cacheCheckCanPlayData(this.response, this.responseURL);
                }
            });
            return originalXhrSend.apply(this, arguments);
        };
    }
    function HaiJiaoInject() {
        return new Promise(resolve => {
            const url = new URL(window.location.href);
            if (url.pathname !== "/post/details" && url.pathname !== "/videoplay") {
                resolve({
                    analyzeURL: "",
                    failReason: "请在视频播放页或短视频播放页面使用"
                });
                return;
            }
            if (url.pathname === "/post/details") {
                const buypostBtn = document.getElementsByClassName("buypost-btn");
                const saleBtn = document.getElementsByClassName("sell-btn");
                if (buypostBtn.length === 0 && saleBtn.length === 0) {
                    resolve({
                        analyzeURL: "",
                        failReason: "当前页面不包含付费视频或您已购买"
                    });
                    return;
                }
                const pid = url.searchParams.get("pid");
                if (!pid) {
                    resolve({
                        analyzeURL: "",
                        failReason: "获取视频ID失败"
                    });
                    return;
                }
                resolve({
                    analyzeURL: "https://haijiao.com/post/details?pid=" + pid,
                    failReason: ""
                });
                return;
            }
            if (url.pathname === "/videoplay") {
                const cacheData = SessionStorage.get(sessionKey$1);
                let remindMsg = "";
                if (cacheData.amount === 0) {
                    resolve({
                        analyzeURL: "",
                        failReason: "当前短视频免费, 无需解析"
                    });
                    return;
                }
                resolve({
                    analyzeURL: cacheData.anaURL,
                    failReason: "",
                    remindMsg: remindMsg
                });
            }
        });
    }
    const sessionKey = "ak_hj_app";
    const currentEnvKey = "ak_hj_app_current_env";
    const aesKey = "b78ce48964cffd68";
    const aesIv = "d82e851b5811f3a7";
    const hookURLs$1 = {
        community_post_detail: /api\.php\/api\/community\/post_detail$/,
        mv_get_detail: /\/api\.php\/api\/mv\/getDetail$/,
        vlog_play: /api.php\/api\/vlog\/play/,
        vlog_like: /api.php\/api\/vlog\/like/
    };
    function decryptReqData(reqBody) {
        const dataMatch = reqBody.match(/data=([^&]+)/);
        const dataValue = dataMatch ? dataMatch[1] : null;
        if (!dataValue) {
            return null;
        }
        const decrypt2 = AesDecryptCBCPKCS7(dataValue, aesKey, aesIv);
        return JSON.parse(decrypt2);
    }
    function decryptRespData(respData) {
        const decrypt2 = AesDecryptCBCPKCS7(respData, aesKey, aesIv);
        return JSON.parse(decrypt2);
    }
    function community_post_detail_api(body, reply) {
        const reqBody = DecodeData(body);
        const response = DecodeData(reply);
        const reqData = decryptReqData(reqBody);
        const respData = decryptRespData(JSON.parse(response).data);
        if (!reqData || !respData) {
            return;
        }
        const cacheData = {
            title: respData.data.title,
            id: reqData.id,
            duration: 0,
            videoNum: respData.data.video_num,
            anaURL: `https://app-hai-jiao.fun/detail?id=${respData.data.id}`
        };
        SessionStorage.set(sessionKey, cacheData);
        SessionStorage.set(currentEnvKey, "mv/get_detail");
    }
    function mvGetDetail(body, reply) {
        const reqBody = DecodeData(body);
        const response = DecodeData(reply);
        const reqData = decryptReqData(reqBody);
        const respData = decryptRespData(JSON.parse(response).data);
        console.log("respData", respData);
        if (!reqData || !respData) {
            return;
        }
        const cacheData = {
            title: respData.data.detail.title,
            id: reqData.id,
            duration: respData.data.detail.duration,
            videoNum: 1,
            anaURL: `https://mv-app-hai-jiao.fun/detail?id=${reqData.id}`
        };
        SessionStorage.set(sessionKey, cacheData);
        SessionStorage.set(currentEnvKey, "community/getDetail");
    }
    function vlogPlay(body) {
        SessionStorage.set(currentEnvKey, "vlog_play");
    }
    function vlogLike(body) {
        const reqBody = DecodeData(body);
        const reqData = decryptReqData(reqBody);
        if (!reqData) {
            return;
        }
        if (!reqData.id) {
            return;
        }
        const cacheData = {
            title: "",
            id: reqData.id,
            duration: 0,
            videoNum: 1,
            anaURL: `https://mv-app-hai-jiao.fun/detail?id=${reqData.id}`
        };
        SessionStorage.set(sessionKey, cacheData);
    }
    function HaiJiaoAPPInit() {
        SessionStorage.remove(sessionKey);
        const originalXhrSend = XMLHttpRequest.prototype.send;
        XMLHttpRequest.prototype.send = function(body) {
            this.addEventListener("load", function() {
                for (const [key2, hookURL] of Object.entries(hookURLs$1)) {
                    if (hookURL.test(this.responseURL)) {
                        console.log("Request URL:", this.responseURL, "key", key2);
                        if (key2 === "community_post_detail") {
                            community_post_detail_api(body, this.response);
                        } else if (key2 === "mv_get_detail") {
                            mvGetDetail(body, this.response);
                        } else if (key2 === "vlog_play") {
                            vlogPlay();
                        } else if (key2 === "vlog_like") {
                            vlogLike(body);
                        }
                    }
                }
            });
            return originalXhrSend.apply(this, arguments);
        };
    }
    function HaiJiaoAPPInject() {
        return new Promise(resolve => {
            const cacheData = SessionStorage.get(sessionKey);
            const currentEnv = SessionStorage.get(currentEnvKey);
            SessionStorage.remove(sessionKey);
            SessionStorage.remove(currentEnvKey);
            if (!cacheData && currentEnv !== "vlog_play") {
                resolve({
                    analyzeURL: "",
                    failReason: "抱歉:未检测到任何视频, 请重新进入播放页"
                });
                return;
            }
            if (!cacheData && currentEnv === "vlog_play") {
                resolve({
                    analyzeURL: "",
                    failReason: "右侧短视频点个赞即可提取到解析地址哦~"
                });
                return;
            }
            let remindMsg = '<p style="color: rgb(190,24,93);">若点击取消需要重新"回到/操作"该视频哦~</p>';
            if (cacheData.title) {
                remindMsg += `<p style="color: rgb(46, 24, 190);">${cacheData.title.substring(0, 20) + "..."}</p>`;
            }
            resolve({
                analyzeURL: cacheData.anaURL,
                failReason: "",
                remindMsg: remindMsg
            });
        });
    }
    function JAVHDInject() {
        return new Promise(resolve => {
            const url = new URL(window.location.href);
            const pathname = url.pathname;
            if (!pathname.includes("/video/")) {
                resolve({
                    analyzeURL: "",
                    failReason: "请在视频播放页使用"
                });
                return;
            }
            resolve({
                analyzeURL: url.href,
                failReason: ""
            });
        });
    }
    function LaikanlupingInject() {
        return new Promise(resolve => {
            const url = new URL(window.location.href);
            const pathname = url.pathname;
            if (!/\/\d+\.html/.test(pathname)) {
                resolve({
                    analyzeURL: "",
                    failReason: "请在视频播放页使用"
                });
                return;
            }
            const isFree = pathname.includes("free");
            if (isFree) {
                resolve({
                    analyzeURL: "",
                    failReason: "该视频免费, 无需解析"
                });
                return;
            }
            resolve({
                analyzeURL: url.href,
                failReason: ""
            });
        });
    }
    function LoiBusInject() {
        return new Promise(resolve => {
            const url = new URL(window.location.href);
            const pathname = url.pathname;
            if (!/\/lois\/\d+/.test(pathname)) {
                resolve({
                    analyzeURL: "",
                    failReason: "请点击任意视频"
                });
                return;
            }
            const splitPath = pathname.split("/");
            const id = splitPath[splitPath.length - 1];
            fetch(`https://api.moegoat.com/api/lois/${id}`, {
                body: null,
                method: "GET"
            }).then(response => {
                if (!response.ok) {
                    resolve({
                        failReason: `获取失败, 请重试或联系客服\nerr: response status not ok`
                    });
                    return;
                }
                return response.json();
            }).then(data => {
                const videoCount = data.data.video_count;
                if (videoCount <= 0) {
                    resolve({
                        failReason: `当前内容不包含视频`
                    });
                    return;
                }
                const vipRequirement = data.data.vip_requirement;
                if (vipRequirement == 4) {
                    resolve({
                        failReason: `抱歉, 当前等级视频即将支持, 先换个视频吧~`
                    });
                }
                if (data.data.online_play !== 1) {
                    resolve({
                        failReason: `视频在该站只支持下载,不支持在线播放, 换个视频吧~`
                    });
                }
                const playlist = [ ...Array(videoCount).keys() ].map(item => ({
                    title: `第${item + 1}部`,
                    url: `https://www.loiship.com/lois/${id}?index=${item}`
                }));
                resolve({
                    playlist: playlist,
                    failReason: ""
                });
                return;
            }).catch(error => {
                resolve({
                    failReason: `获取失败, 请重试或联系客服\nerr:${error}`
                });
            });
        });
    }
    function ModelMediaAsiaInject() {
        return new Promise(resolve => {
            const url = new URL(window.location.href);
            const pathname = url.pathname;
            if (!pathname.includes("/videos/")) {
                resolve({
                    analyzeURL: "",
                    failReason: "请在视频播放页使用"
                });
                return;
            }
            resolve({
                analyzeURL: url.href,
                failReason: "",
                gotoPage: "modelmediaasia"
            });
        });
    }
    function MosoInject() {
        return new Promise(resolve => {
            const url = new URL(window.location.href);
            const pathname = url.pathname;
            if (!pathname.includes("/video/")) {
                resolve({
                    analyzeURL: "",
                    failReason: "请在视频播放页使用"
                });
                return;
            }
            resolve({
                analyzeURL: url.href,
                failReason: "",
                gotoPage: "moso"
            });
        });
    }
    function SLRInject() {
        return new Promise(resolve => {
            const url = new URL(window.location.href);
            const pathname = url.pathname;
            if (!pathname.includes("/scenes/")) {
                resolve({
                    analyzeURL: "",
                    failReason: "请在视频播放页使用"
                });
                return;
            }
            resolve({
                analyzeURL: url.href,
                failReason: ""
            });
        });
    }
    const txVLogSessionKey = "ak_tx_vlog_app";
    const hookURLs = {
        doLove: /\/h5\/movie\/doLove/,
        detail: /\/h5\/movie\/detail/
    };
    const tx_key = "fd14f9f8e38808fa";
    const ecb = new ECBPkcs7(tx_key);
    function getMovieID(body) {
        const bodyData = JSON.parse(ecb.decrypt(body));
        SessionStorage.set(txVLogSessionKey, {
            id: bodyData.data.id
        });
    }
    function TxVLogAPPInit() {
        SessionStorage.remove(txVLogSessionKey);
        const originalXhrSend = XMLHttpRequest.prototype.send;
        XMLHttpRequest.prototype.send = function(body) {
            this.addEventListener("load", function() {
                const url = new URL(window.location.href);
                const pathname = url.pathname;
                for (const [key2, hookURL] of Object.entries(hookURLs)) {
                    if (hookURL.test(this.responseURL)) {
                        SessionStorage.remove(txVLogSessionKey);
                        console.log("Request URL:", this.responseURL);
                        if (key2 === "doLove" && pathname.includes("/vlog")) {
                            getMovieID(body);
                        }
                        if (key2 === "detail" && pathname.includes("/movie/detail/")) {
                            getMovieID(body);
                        }
                    }
                }
            });
            return originalXhrSend.apply(this, arguments);
        };
    }
    function TxVLogInject() {
        return new Promise(resolve => {
            const url = new URL(window.location.href);
            const pathname = url.pathname;
            if (!pathname.includes("/movie/detail/") && !pathname.includes("/vlog")) {
                resolve({
                    analyzeURL: "",
                    failReason: "请在视频播放页/VLog专区使用"
                });
                return;
            }
            const cacheData = SessionStorage.get(txVLogSessionKey);
            if (!cacheData && pathname.includes("/vlog")) {
                resolve({
                    analyzeURL: "",
                    failReason: "当前 vlog 右侧点个 “赞” 即可获取视频解析地址"
                });
                return;
            }
            if (!cacheData) {
                resolve({
                    analyzeURL: "",
                    failReason: "抱歉:未检测到任何视频或暂不支持该类型"
                });
                return;
            }
            const anaURL = `https://txh067.com/movie/detail/${cacheData.id}`;
            SessionStorage.remove(txVLogSessionKey);
            console.log("remove session success");
            resolve({
                analyzeURL: anaURL,
                failReason: "",
                remindMsg: "若点击取消需要重新操作哦~"
            });
        });
    }
    const sourceData = {
        "海角社区": [ /(http|https):\/\/hj.*\./, /(http|https):\/\/.*?\.hj.*\./, /(http|https):\/\/.*?\.hai.*\./, /(http|https):\/\/hai.*\./, /(http|https):\/\/hj.*\/.*/, /(http|https):\/\/.*\.hj.*/, /(http|https):\/\/.*h.*j.*\/home/, /.*:\/\/.*\/post\/details*/, /.*:\/\/.*\/user\/userinfo\?=*/, /.*:\/\/.*\/videoplay$/ ],
        "海角APP": [ /https:\/\/p1\.lsqykbvl\.com\/.*/, /https:\/\/p5\.tyhytqs\.xyz\/.*/, /https:\/\/p5\.fkdadqjju\.cc\/.*/ ],
        "19JTV": [ /https:\/\/19jtv\.com\/*/ ],
        JAVHD: [ /https:\/\/javhd\.com\/*/ ],
        "麻豆传媒映画": [ /https:\/\/modelmediaasia\.com\/*/, /https:\/\/www\.mdav\.live\/*/ ],
        "糖心VLOG": [ /https:\/\/txh\d+\.com\/.*/, /https:\/\/.*txh\d+\.com\/.*/ ],
        "天美传媒": [ /https:\/\/5ktmi048\.com\/*/ ],
        "91短视频": [ /https:\/\/p2.lxrzwdq.xyz\/*/ ],
        sexLikeReal: [ /https:\/\/.*sexlikereal.com\/*/ ],
        "萝莉巴士": [ /https:\/\/www\.loi(?:box\d+|bus(?:\d+)?|raft|ship)\.(?:top|xyz|com)\/.*/, /https:\/\/loix.org\/.*/ ],
        "51风流": [ /https:\/\/.*51fengliu.com\/*/, /https:\/\/.*51fengliu3.com\/*/ ],
        "91Porn短视频": [ /https:\/\/pwa3\.dsp11a\.cc\// ],
        "来看录屏": [ /https:\/\/lubosp\.com\/*/ ],
        "兔子先生": [ /https:\/\/moso\.monster\/*/ ]
    };
    function matchSource(href) {
        for (const [key2, regexPatterns] of Object.entries(sourceData)) {
            const match = regexPatterns.some(regex => regex.test(href));
            if (match) {
                return key2;
            }
        }
        return "";
    }
    function PlatformInject() {
        const href = window.location.href;
        const source = matchSource(href);
        if (source === "") {
            return {
                ok: false,
                platform: "",
                func: () => Promise.reject()
            };
        }
        if (source === "海角社区") {
            HaiJiaoInit();
            return {
                ok: true,
                platform: source,
                func: HaiJiaoInject,
                platformMsg: "支持板块: 视频播放页面、短视频页面"
            };
        }
        if (source === "海角APP") {
            HaiJiaoAPPInit();
            return {
                ok: true,
                platform: source,
                func: HaiJiaoAPPInject,
                platformMsg: "支持板块: 首页、原创、短视频、社区(不包括ASMR、种子下载)"
            };
        }
        if (source === "19JTV") {
            return {
                ok: true,
                platform: source,
                func: Jtv19Inject,
                platformMsg: "支持板块: 视频播放页面"
            };
        }
        if (source === "JAVHD") {
            return {
                ok: true,
                platform: source,
                func: JAVHDInject,
                platformMsg: "支持板块: 视频播放页面"
            };
        }
        if (source === "麻豆传媒映画") {
            return {
                ok: true,
                platform: source,
                func: ModelMediaAsiaInject,
                platformMsg: "支持板块: 视频播放页面"
            };
        }
        if (source === "糖心VLOG") {
            TxVLogAPPInit();
            return {
                ok: true,
                platform: source,
                func: TxVLogInject,
                platformMsg: "支持板块: 视频详情页以及VLOG专区"
            };
        }
        if (source === "天美传媒") {
            return {
                ok: true,
                platform: source,
                func: TMInject,
                platformMsg: "支持板块: 视频播放页面"
            };
        }
        if (source === "91短视频") {
            Short91APPInit();
            return {
                ok: true,
                platform: source,
                func: Short91APPInject,
                platformMsg: "支持板块: 首页、PORN、原创、社区"
            };
        }
        if (source === "sexLikeReal") {
            return {
                ok: true,
                platform: source,
                func: SLRInject,
                platformMsg: "支持板块: 视频播放页面"
            };
        }
        if (source === "萝莉巴士") {
            return {
                ok: true,
                platform: source,
                func: LoiBusInject,
                platformMsg: "支持板块: 视频详情弹窗"
            };
        }
        if (source === "51风流") {
            return {
                ok: true,
                platform: source,
                func: FengLiu51Inject,
                platformMsg: "支持板块: 信息、暗巷、商家",
                supportUserToken: true
            };
        }
        if (source === "91Porn短视频") {
            Short91PornAPPInit();
            return {
                ok: true,
                platform: source,
                func: Short91PornInject,
                platformMsg: "支持板块: 首页、热点、资源(动漫视频)、原创。该站点存在特殊性, 不建议在首页使用,可以进入作者页面找到对应的视频进行使用, 请见谅!",
                platformMsgDuration: 0
            };
        }
        if (source === "来看录屏") {
            return {
                ok: true,
                platform: source,
                func: LaikanlupingInject,
                platformMsg: "支持板块: 视频播放页"
            };
        }
        if (source === "兔子先生") {
            return {
                ok: true,
                platform: source,
                func: MosoInject,
                platformMsg: "支持板块: 视频播放页"
            };
        }
        return {
            ok: false,
            platform: "",
            func: () => Promise.reject()
        };
    }
    function UpdatePluginRequest() {
        const reqURL = `${Config.ApiURL}/version`;
        return fetch(reqURL, {
            method: "POST",
            headers: {
                "Content-Type": "application/json"
            }
        }).then(response => response.json());
    }
    const _FloatingActions = class _FloatingActions {
        constructor(root, showActivateIcon, callbacks) {
            __publicField(this, "group");
            __publicField(this, "updateButton");
            __publicField(this, "mainButton");
            __publicField(this, "dragState");
            this.group = document.createElement("div");
            this.group.className = "akwm-fab-group";
            this.group.dataset.open = "false";
            this.applyStoredPosition();
            const actions = document.createElement("div");
            actions.className = "akwm-fab-actions";
            this.updateButton = this.createButton(syncIcon(), "检查更新", callbacks.onUpdate);
            actions.appendChild(this.updateButton);
            actions.appendChild(this.createButton(linkIcon(), "获取解析地址", callbacks.onAnalyze));
            if (showActivateIcon) {
                actions.appendChild(this.createButton(checkIcon(), "身份验证", callbacks.onActivateToken));
            }
            this.mainButton = this.createButton("AK", "Ak Web Master", () => this.toggleOpen());
            this.mainButton.classList.add("akwm-fab-main");
            this.bindDrag();
            this.group.append(actions, this.mainButton);
            root.appendChild(this.group);
        }
        setNeedUpdate(needUpdate) {
            this.updateButton.classList.toggle("akwm-fab-badge", needUpdate);
        }
        toggleOpen() {
            this.group.dataset.open = this.group.dataset.open === "true" ? "false" : "true";
        }
        createButton(content, title, onClick) {
            const button = document.createElement("button");
            button.className = "akwm-fab";
            button.type = "button";
            if (content.trim().startsWith("<svg")) {
                button.innerHTML = content;
            } else {
                button.textContent = content;
            }
            button.title = title;
            button.setAttribute("aria-label", title);
            button.addEventListener("click", onClick);
            return button;
        }
        bindDrag() {
            this.mainButton.addEventListener("pointerdown", event => {
                if (event.button !== 0) {
                    return;
                }
                const rect = this.group.getBoundingClientRect();
                this.dragState = {
                    pointerId: event.pointerId,
                    startX: event.clientX,
                    startY: event.clientY,
                    startLeft: rect.left,
                    startTop: rect.top,
                    moved: false
                };
                this.mainButton.setPointerCapture(event.pointerId);
                this.group.classList.add("akwm-fab-dragging");
            });
            this.mainButton.addEventListener("pointermove", event => {
                const state = this.dragState;
                if (!state || state.pointerId !== event.pointerId) {
                    return;
                }
                const dx = event.clientX - state.startX;
                const dy = event.clientY - state.startY;
                if (Math.abs(dx) + Math.abs(dy) > 4) {
                    state.moved = true;
                }
                this.setPosition(state.startLeft + dx, state.startTop + dy);
            });
            this.mainButton.addEventListener("pointerup", event => this.finishDrag(event));
            this.mainButton.addEventListener("pointercancel", event => this.finishDrag(event));
            this.mainButton.addEventListener("click", event => {
                if (this.group.dataset.justDragged === "true") {
                    event.stopImmediatePropagation();
                    this.group.dataset.justDragged = "false";
                }
            }, true);
            window.addEventListener("resize", () => {
                const rect = this.group.getBoundingClientRect();
                this.setPosition(rect.left, rect.top, true);
            });
        }
        finishDrag(event) {
            const state = this.dragState;
            if (!state || state.pointerId !== event.pointerId) {
                return;
            }
            this.mainButton.releasePointerCapture(event.pointerId);
            this.group.classList.remove("akwm-fab-dragging");
            this.dragState = void 0;
            const rect = this.group.getBoundingClientRect();
            this.savePosition(rect.left, rect.top);
            if (state.moved) {
                this.group.dataset.justDragged = "true";
            }
        }
        applyStoredPosition() {
            const position = readStoredPosition();
            if (!position) {
                return;
            }
            this.setPosition(position.left, position.top);
        }
        setPosition(left, top, skipSave = false) {
            const maxLeft = Math.max(8, window.innerWidth - this.group.offsetWidth - 8);
            const maxTop = Math.max(8, window.innerHeight - this.group.offsetHeight - 8);
            const nextLeft = clamp(left, 8, maxLeft);
            const nextTop = clamp(top, 8, maxTop);
            this.group.style.left = `${nextLeft}px`;
            this.group.style.top = `${nextTop}px`;
            this.group.style.right = "auto";
            if (!skipSave) {
                this.savePosition(nextLeft, nextTop);
            }
        }
        savePosition(left, top) {
            localStorage.setItem(_FloatingActions.positionKey, JSON.stringify({
                left: left,
                top: top
            }));
        }
    };
    __publicField(_FloatingActions, "positionKey", "akwmFloatingPosition");
    let FloatingActions = _FloatingActions;
    function readStoredPosition() {
        const raw = localStorage.getItem(FloatingActions.positionKey);
        if (!raw) {
            return null;
        }
        try {
            const data = JSON.parse(raw);
            if (typeof data.left === "number" && typeof data.top === "number") {
                return data;
            }
        } catch {
            return null;
        }
        return null;
    }
    function clamp(value, min, max) {
        return Math.min(Math.max(value, min), max);
    }
    function icon(path) {
        return `<svg class="akwm-fab-icon" viewBox="0 0 24 24" aria-hidden="true">${path}</svg>`;
    }
    function syncIcon() {
        return icon('<path d="M21 12a9 9 0 0 0-15.4-6.4L3 8"></path><path d="M3 3v5h5"></path><path d="M3 12a9 9 0 0 0 15.4 6.4L21 16"></path><path d="M21 21v-5h-5"></path>');
    }
    function linkIcon() {
        return icon('<path d="M10 13a5 5 0 0 0 7.1 0l2-2a5 5 0 0 0-7.1-7.1l-1.1 1.1"></path><path d="M14 11a5 5 0 0 0-7.1 0l-2 2a5 5 0 0 0 7.1 7.1l1.1-1.1"></path>');
    }
    function checkIcon() {
        return icon('<path d="M20 6 9 17l-5-5"></path>');
    }
    class ModalController {
        constructor(root, options) {
            __publicField(this, "overlay");
            __publicField(this, "body");
            __publicField(this, "okButton");
            __publicField(this, "cancelButton");
            __publicField(this, "okLabel", "");
            this.root = root;
            this.overlay = document.createElement("div");
            this.overlay.className = "akwm-modal-overlay";
            const dialog = document.createElement("section");
            dialog.className = "akwm-modal";
            dialog.setAttribute("role", "dialog");
            dialog.setAttribute("aria-modal", "true");
            const header = document.createElement("header");
            header.className = "akwm-modal-header";
            header.textContent = options.title;
            this.body = document.createElement("div");
            this.body.className = "akwm-modal-body";
            this.setBody(options.body || "");
            const footer = document.createElement("footer");
            footer.className = "akwm-modal-footer";
            const showCancel = options.showCancel !== false;
            if (showCancel) {
                this.cancelButton = document.createElement("button");
                this.cancelButton.className = "akwm-btn";
                this.cancelButton.type = "button";
                this.cancelButton.textContent = options.cancelText || "取消";
                this.cancelButton.addEventListener("click", () => {
                    var _a;
                    (_a = options.onCancel) == null ? void 0 : _a.call(options);
                    this.close();
                });
                footer.appendChild(this.cancelButton);
            }
            const showOk = options.showOk !== false;
            if (showOk) {
                this.okButton = document.createElement("button");
                this.okButton.className = "akwm-btn akwm-btn-primary";
                this.okButton.type = "button";
                this.okLabel = options.okText || "确定";
                this.okButton.textContent = this.okLabel;
                this.okButton.disabled = Boolean(options.okDisabled);
                this.okButton.addEventListener("click", () => {
                    var _a;
                    void ((_a = options.onOk) == null ? void 0 : _a.call(options));
                });
                footer.appendChild(this.okButton);
            }
            dialog.append(header, this.body, footer);
            this.overlay.appendChild(dialog);
            this.root.appendChild(this.overlay);
        }
        setBody(content) {
            this.body.replaceChildren();
            if (typeof content === "string") {
                const text = document.createElement("span");
                text.textContent = content;
                this.body.appendChild(text);
                return;
            }
            this.body.appendChild(content);
        }
        setOkText(text) {
            this.okLabel = text;
            if (this.okButton) {
                this.okButton.textContent = text;
            }
        }
        setOkDisabled(disabled) {
            if (this.okButton) {
                this.okButton.disabled = disabled;
            }
        }
        setLoading(loading) {
            if (this.okButton) {
                this.okButton.disabled = loading;
                this.okButton.textContent = loading ? "请稍等..." : this.okLabel;
            }
            if (this.cancelButton) {
                this.cancelButton.disabled = loading;
            }
        }
        close() {
            this.overlay.remove();
        }
    }
    const styles = `\n:host {\n  all: initial;\n}\n\n.akwm-root,\n.akwm-root * {\n  box-sizing: border-box;\n  letter-spacing: 0;\n}\n\n.akwm-root {\n  position: fixed;\n  inset: 0;\n  z-index: 2147483647;\n  pointer-events: none;\n  color: #172033;\n  font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Microsoft YaHei", sans-serif;\n  font-size: 14px;\n  line-height: 1.5;\n}\n\n.akwm-root button,\n.akwm-root input {\n  font: inherit;\n}\n\n.akwm-fab-group {\n  position: fixed;\n  right: 20px;\n  top: 47vh;\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  gap: 8px;\n  pointer-events: auto;\n  touch-action: none;\n}\n\n.akwm-fab-actions {\n  display: flex;\n  flex-direction: column;\n  gap: 8px;\n  transform: translateY(6px);\n  opacity: 0;\n  pointer-events: none;\n  transition: opacity 160ms ease, transform 160ms ease;\n}\n\n.akwm-fab-group[data-open="true"] .akwm-fab-actions {\n  transform: translateY(0);\n  opacity: 1;\n  pointer-events: auto;\n}\n\n.akwm-fab {\n  position: relative;\n  width: 38px;\n  height: 38px;\n  border: 0;\n  border-radius: 999px;\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  color: #fff;\n  background: #2563eb;\n  box-shadow: 0 8px 20px rgba(31, 41, 55, 0.22);\n  cursor: pointer;\n  user-select: none;\n  transition: transform 120ms ease, box-shadow 120ms ease, background 120ms ease;\n}\n\n.akwm-fab:hover {\n  transform: translateY(-1px);\n  background: #1d4ed8;\n  box-shadow: 0 10px 24px rgba(31, 41, 55, 0.28);\n}\n\n.akwm-fab:active {\n  transform: translateY(0);\n}\n\n.akwm-fab-main {\n  width: 44px;\n  height: 44px;\n  font-size: 13px;\n  font-weight: 800;\n  cursor: grab;\n}\n\n.akwm-fab-dragging .akwm-fab-main {\n  cursor: grabbing;\n}\n\n.akwm-fab-icon {\n  width: 18px;\n  height: 18px;\n  fill: none;\n  stroke: currentColor;\n  stroke-width: 2;\n  stroke-linecap: round;\n  stroke-linejoin: round;\n}\n\n.akwm-fab-badge::after {\n  content: "";\n  position: absolute;\n  top: 2px;\n  right: 3px;\n  width: 8px;\n  height: 8px;\n  border: 2px solid #fff;\n  border-radius: 999px;\n  background: #ef4444;\n}\n\n.akwm-toast-wrap {\n  position: fixed;\n  top: 22px;\n  right: 22px;\n  display: flex;\n  flex-direction: column;\n  gap: 10px;\n  width: min(340px, calc(100vw - 44px));\n  pointer-events: auto;\n}\n\n.akwm-toast {\n  border: 1px solid rgba(148, 163, 184, 0.28);\n  border-radius: 8px;\n  background: #fff;\n  box-shadow: 0 14px 38px rgba(15, 23, 42, 0.18);\n  padding: 12px 14px;\n  color: #172033;\n  overflow: hidden;\n}\n\n.akwm-toast-title {\n  margin: 0;\n  font-size: 14px;\n  font-weight: 700;\n}\n\n.akwm-toast-desc {\n  margin: 4px 0 0;\n  color: #5b6475;\n  font-size: 13px;\n  word-break: break-word;\n}\n\n.akwm-toast-success {\n  border-left: 4px solid #16a34a;\n}\n\n.akwm-toast-error {\n  border-left: 4px solid #dc2626;\n}\n\n.akwm-toast-info {\n  border-left: 4px solid #2563eb;\n}\n\n.akwm-modal-overlay {\n  position: fixed;\n  inset: 0;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  padding: 22px;\n  background: rgba(15, 23, 42, 0.36);\n  pointer-events: auto;\n}\n\n.akwm-modal {\n  width: min(520px, 100%);\n  max-height: min(680px, calc(100vh - 44px));\n  display: flex;\n  flex-direction: column;\n  border: 1px solid rgba(148, 163, 184, 0.24);\n  border-radius: 8px;\n  background: #fff;\n  box-shadow: 0 26px 70px rgba(15, 23, 42, 0.28);\n  overflow: hidden;\n}\n\n.akwm-modal-header {\n  padding: 18px 20px 10px;\n  color: #101828;\n  font-size: 16px;\n  font-weight: 760;\n}\n\n.akwm-modal-body {\n  padding: 10px 20px 18px;\n  color: #273244;\n  overflow: auto;\n  word-break: break-word;\n}\n\n.akwm-modal-footer {\n  display: flex;\n  justify-content: flex-end;\n  gap: 10px;\n  padding: 12px 20px 16px;\n  border-top: 1px solid #edf1f7;\n}\n\n.akwm-btn {\n  min-width: 74px;\n  height: 34px;\n  border: 1px solid #d6dce8;\n  border-radius: 6px;\n  padding: 0 14px;\n  background: #fff;\n  color: #273244;\n  cursor: pointer;\n  text-align: center;\n  user-select: none;\n}\n\n.akwm-btn:hover {\n  border-color: #9fb0c8;\n  color: #111827;\n}\n\n.akwm-btn-primary {\n  border-color: #2563eb;\n  background: #2563eb;\n  color: #fff;\n}\n\n.akwm-btn-primary:hover {\n  border-color: #1d4ed8;\n  background: #1d4ed8;\n  color: #fff;\n}\n\n.akwm-btn-link {\n  border-color: transparent;\n  background: transparent;\n  color: #2563eb;\n  min-width: auto;\n  padding: 0 2px;\n}\n\n.akwm-btn-dashed {\n  border-style: dashed;\n  min-width: 92px;\n}\n\n.akwm-btn:disabled {\n  cursor: not-allowed;\n  opacity: 0.55;\n}\n\n.akwm-input {\n  width: 100%;\n  height: 40px;\n  border: 1px solid #d6dce8;\n  border-radius: 6px;\n  padding: 0 12px;\n  outline: none;\n  color: #172033;\n  background: #f8fafc;\n}\n\n.akwm-input:focus {\n  border-color: #2563eb;\n  background: #fff;\n  box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.12);\n}\n\n.akwm-tag {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  min-height: 30px;\n  border-radius: 6px;\n  padding: 5px 10px;\n  color: #5b21b6;\n  background: #f3e8ff;\n  overflow: hidden;\n}\n\n.akwm-ellipsis {\n  max-width: 100%;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n}\n\n.akwm-center {\n  text-align: center;\n}\n\n.akwm-stack {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  gap: 12px;\n}\n\n.akwm-row {\n  display: flex;\n  flex-wrap: wrap;\n  justify-content: center;\n  gap: 8px;\n}\n\n.akwm-segmented {\n  display: inline-flex;\n  gap: 4px;\n  padding: 4px;\n  border-radius: 8px;\n  background: #eef2f7;\n}\n\n.akwm-segmented button {\n  min-width: 54px;\n  height: 30px;\n  border: 0;\n  border-radius: 6px;\n  padding: 0 12px;\n  color: #475569;\n  background: transparent;\n  cursor: pointer;\n}\n\n.akwm-segmented button[data-active="true"] {\n  color: #172033;\n  background: #fff;\n  box-shadow: 0 1px 4px rgba(15, 23, 42, 0.12);\n}\n\n.akwm-remind {\n  text-align: center;\n}\n\n.akwm-remind p {\n  margin: 6px 0;\n}\n\n.akwm-danger {\n  color: #be185d;\n}\n\n.akwm-muted {\n  color: #667085;\n}\n\n@media (max-width: 520px) {\n  .akwm-fab-group {\n    right: 14px;\n  }\n\n  .akwm-modal-overlay {\n    padding: 14px;\n  }\n\n  .akwm-modal-header {\n    padding: 16px 16px 8px;\n  }\n\n  .akwm-modal-body {\n    padding: 8px 16px 16px;\n  }\n\n  .akwm-modal-footer {\n    padding: 12px 16px 14px;\n  }\n}\n`;
    class ToastCenter {
        constructor(root) {
            __publicField(this, "wrap");
            this.wrap = document.createElement("div");
            this.wrap.className = "akwm-toast-wrap";
            root.appendChild(this.wrap);
        }
        info(message, description, duration = 5) {
            this.show("info", message, description, duration);
        }
        success(message, description, duration = 2.4) {
            this.show("success", message, description, duration);
        }
        error(message, description, duration = 4) {
            this.show("error", message, description, duration);
        }
        show(kind, message, description, duration = 5) {
            const item = document.createElement("div");
            item.className = `akwm-toast akwm-toast-${kind}`;
            const title = document.createElement("p");
            title.className = "akwm-toast-title";
            title.textContent = message;
            item.appendChild(title);
            if (description) {
                const desc = document.createElement("p");
                desc.className = "akwm-toast-desc";
                desc.textContent = description;
                item.appendChild(desc);
            }
            item.addEventListener("click", () => item.remove());
            this.wrap.appendChild(item);
            if (duration > 0) {
                window.setTimeout(() => item.remove(), duration * 1e3);
            }
        }
    }
    async function copyToClipboard(text, success, toast, failure) {
        try {
            await navigator.clipboard.writeText(text);
            toast.success(success);
        } catch {
            toast.error("复制解析地址失败, 请开启浏览器复制权限");
        }
    }
    function autoSearchEncodeUrl(url) {
        return btoa(url).replace(/=/g, "~").replace(/\+/g, "-").replace(/\//g, "_");
    }
    function gotoAkSky(searchURL, page = "") {
        const url = `https://ak-sky.com/${page}#searchURL=${autoSearchEncodeUrl(searchURL)}`;
        window.open(url, "_blank");
    }
    const newVersionPluginAddress = "https://sleazyfork.org/zh-CN/scripts/588047-akwebmasterv2";
    const noopInject = async () => ({
        analyzeURL: "",
        failReason: "Default function - no operation",
        remindMsg: "",
        gotoPage: ""
    });
    class AkWebMasterApp {
        constructor(shadowRoot) {
            __publicField(this, "root");
            __publicField(this, "toast");
            __publicField(this, "injectFunction", noopInject);
            __publicField(this, "actions");
            __publicField(this, "initialized", false);
            this.shadowRoot = shadowRoot;
            const style = document.createElement("style");
            style.textContent = styles;
            this.shadowRoot.appendChild(style);
            this.root = document.createElement("div");
            this.root.className = "akwm-root";
            this.shadowRoot.appendChild(this.root);
            this.toast = new ToastCenter(this.root);
        }
        init() {
            if (this.initialized) {
                return;
            }
            this.initialized = true;
            const platform = PlatformInject();
            if (!platform.ok) {
                this.toast.info("Ak Web Master", "加载失败, 请联系客服");
                return;
            }
            this.injectFunction = platform.func;
            this.actions = new FloatingActions(this.root, Boolean(platform.supportUserToken), {
                onUpdate: () => this.openUpdateDialog(),
                onAnalyze: () => this.openAnalyzeDialog(),
                onActivateToken: () => this.openActivateDialog()
            });
            this.refreshUpdateBadge();
            this.toast.info(`${platform.platform} 加载成功`, platform.platformMsg, platform.platformMsgDuration ?? 5);
        }
        refreshUpdateBadge() {
            UpdatePluginRequest().then(reply => {
                var _a;
                if (reply.code !== 200) {
                    return;
                }
                (_a = this.actions) == null ? void 0 : _a.setNeedUpdate(reply.data.version !== getScriptVersion());
            }).catch(() => {
                var _a;
                (_a = this.actions) == null ? void 0 : _a.setNeedUpdate(false);
            });
        }
        openAnalyzeDialog() {
            let modal;
            modal = new ModalController(this.root, {
                title: "您 好",
                body: "是否尝试获解析地址",
                okText: "获 取",
                cancelText: "取 消",
                onOk: async () => {
                    modal.setOkText("获取中");
                    modal.setBody("请稍等...");
                    modal.setLoading(true);
                    try {
                        const reply = await this.injectFunction();
                        if (reply.openActivateToken) {
                            modal.close();
                            this.openActivateDialog();
                            return;
                        }
                        if (reply.failReason) {
                            modal.setBody(reply.failReason);
                            modal.setOkText("重 试");
                            return;
                        }
                        this.handleAnalyzeSuccess(reply);
                        modal.close();
                    } catch {
                        modal.setBody("获取失败, 请重试");
                        modal.setOkText("获 取");
                    } finally {
                        modal.setLoading(false);
                    }
                }
            });
        }
        handleAnalyzeSuccess(reply) {
            var _a;
            if (reply.analyzeURL) {
                this.openRedirectDialog(reply.analyzeURL, reply.remindMsg, reply.gotoPage);
            }
            if ((_a = reply.playlist) == null ? void 0 : _a.length) {
                this.openPlaylistDialog(reply.playlist, reply.remindMsg, reply.playlistSubTitle);
            }
            if (reply.segmented) {
                this.openSegmentedDialog(reply.segmented, reply.remindMsg);
            }
        }
        openRedirectDialog(analyzeURL, remindMsg, gotoPage) {
            const body = document.createElement("div");
            const tag = document.createElement("div");
            tag.className = "akwm-tag";
            const urlText = document.createElement("span");
            urlText.className = "akwm-ellipsis";
            urlText.textContent = analyzeURL;
            tag.appendChild(urlText);
            body.appendChild(tag);
            appendRemind(body, remindMsg);
            let modal;
            modal = new ModalController(this.root, {
                title: "获取成功",
                body: body,
                okText: "前往Ak-Sky",
                cancelText: "取消",
                onOk: () => {
                    gotoAkSky(analyzeURL, gotoPage);
                    modal.close();
                }
            });
        }
        openPlaylistDialog(playlist, remindMsg, subTitle) {
            const body = document.createElement("div");
            body.className = "akwm-stack";
            const subtitle = document.createElement("div");
            subtitle.className = "akwm-center akwm-muted";
            subtitle.textContent = subTitle || `本内容含有 ${playlist.length} 个视频, 请选择`;
            body.appendChild(subtitle);
            const row = document.createElement("div");
            row.className = "akwm-row";
            playlist.forEach(item => {
                const button = document.createElement("button");
                button.className = "akwm-btn akwm-btn-dashed";
                button.type = "button";
                button.textContent = item.title;
                button.addEventListener("click", () => gotoAkSky(item.url));
                row.appendChild(button);
            });
            body.appendChild(row);
            appendRemind(body, remindMsg);
            new ModalController(this.root, {
                title: "获取成功",
                body: body,
                cancelText: "取消",
                showOk: false
            });
        }
        openSegmentedDialog(result, remindMsg) {
            let key2 = result.options[0] || "";
            const body = document.createElement("div");
            body.className = "akwm-stack akwm-center";
            const remind = document.createElement("div");
            remind.className = "akwm-danger";
            remind.textContent = remindMsg || "";
            body.appendChild(remind);
            const segmented = document.createElement("div");
            segmented.className = "akwm-segmented";
            const value = document.createElement("p");
            value.textContent = result.data[key2] || "";
            const renderSegments = () => {
                segmented.replaceChildren();
                result.options.forEach(option => {
                    const button = document.createElement("button");
                    button.type = "button";
                    button.textContent = option;
                    button.dataset.active = String(option === key2);
                    button.addEventListener("click", () => {
                        key2 = option;
                        value.textContent = result.data[key2] || "";
                        renderSegments();
                    });
                    segmented.appendChild(button);
                });
            };
            renderSegments();
            const copyButton = document.createElement("button");
            copyButton.className = "akwm-btn akwm-btn-primary";
            copyButton.type = "button";
            copyButton.textContent = "复 制";
            copyButton.addEventListener("click", () => copyToClipboard(result.data[key2] || "", "复制成功", this.toast));
            body.append(segmented, value, copyButton);
            new ModalController(this.root, {
                title: "获取成功",
                body: body,
                cancelText: "关 闭",
                showOk: false
            });
        }
        openActivateDialog() {
            const body = document.createElement("div");
            const input = document.createElement("input");
            input.className = "akwm-input";
            input.placeholder = "请输入您的激活码";
            input.value = LocalStorage.get("akSkyUserToken") || "";
            body.appendChild(input);
            const linkWrap = document.createElement("div");
            linkWrap.style.display = "flex";
            linkWrap.style.justifyContent = "flex-end";
            linkWrap.style.marginTop = "10px";
            const link = document.createElement("button");
            link.className = "akwm-btn akwm-btn-link";
            link.type = "button";
            link.textContent = "获取激活码";
            link.addEventListener("click", () => window.open("https://ak-sky.com/phoenix", "_blank"));
            linkWrap.appendChild(link);
            body.appendChild(linkWrap);
            let modal;
            modal = new ModalController(this.root, {
                title: "身份验证",
                body: body,
                okText: "确 认",
                cancelText: "取 消",
                okDisabled: !input.value,
                onOk: () => {
                    const token = input.value.trim();
                    if (!token) {
                        modal.setOkDisabled(true);
                        return;
                    }
                    LocalStorage.set("akSkyUserToken", token);
                    modal.close();
                }
            });
            input.addEventListener("input", () => modal.setOkDisabled(!input.value.trim()));
            window.setTimeout(() => input.focus(), 0);
        }
        openUpdateDialog() {
            let okText = "检查";
            let modal;
            modal = new ModalController(this.root, {
                title: "Ak-WebMaster",
                body: "是否检查新版本?",
                okText: okText,
                cancelText: "取消",
                onOk: async () => {
                    var _a, _b;
                    if (okText === "前往更新") {
                        window.open(newVersionPluginAddress, "_blank");
                        modal.close();
                        return;
                    }
                    modal.setLoading(true);
                    try {
                        const reply = await UpdatePluginRequest();
                        if (reply.code !== 200) {
                            modal.setBody("检查失败");
                            return;
                        }
                        if (reply.data.version !== getScriptVersion()) {
                            modal.setBody(`发现新版本: ${reply.data.version}`);
                            okText = "前往更新";
                            modal.setOkText(okText);
                            (_a = this.actions) == null ? void 0 : _a.setNeedUpdate(true);
                        } else {
                            modal.setBody("当前版本为最新版本");
                            (_b = this.actions) == null ? void 0 : _b.setNeedUpdate(false);
                        }
                    } catch {
                        modal.setBody("检查失败");
                    } finally {
                        modal.setLoading(false);
                    }
                }
            });
        }
    }
    function appendRemind(parent, remindMsg) {
        if (!remindMsg) {
            return;
        }
        const remind = document.createElement("div");
        remind.className = "akwm-remind";
        remind.innerHTML = remindMsg;
        parent.appendChild(remind);
    }
    function getScriptVersion() {
        if (typeof GM_info !== "undefined") {
            return GM_info.script.version;
        }
        return "v2.2.5";
    }
    function log(...args) {
        console.log("%cAkWebMaster:", "color: #7c3aed; font-weight: 700", ...args);
    }
    function onLocationChange(callback) {
        window.setTimeout(callback, 0);
        const start = () => {
            let oldHref = window.location.href;
            const observer = new MutationObserver(() => {
                if (oldHref !== window.location.href) {
                    oldHref = window.location.href;
                    callback();
                }
            });
            observer.observe(document.body, {
                childList: true,
                subtree: true
            });
            return observer;
        };
        if (document.body) {
            return start();
        }
        document.addEventListener("DOMContentLoaded", start, {
            once: true
        });
        return void 0;
    }
    log("script has successfully started");
    function mount() {
        if (!document.body) {
            window.setTimeout(mount, 50);
            return;
        }
        if (document.getElementById("akwm")) {
            return;
        }
        const host = document.createElement("div");
        host.id = "akwm";
        document.body.appendChild(host);
        const shadowRoot = host.attachShadow({
            mode: "open"
        });
        const app = new AkWebMasterApp(shadowRoot);
        window.__AKWM_APP__ = app;
        app.init();
    }
    onLocationChange(() => {
        try {
            mount();
        } catch (error) {
            log(error);
        }
    });
})();