mirror of https://github.com/Xhofe/alist
				
				
				
			🔥 Delete alist-proxy.js
							parent
							
								
									6613c8a6c1
								
							
						
					
					
						commit
						6351f43b9b
					
				
							
								
								
									
										430
									
								
								alist-proxy.js
								
								
								
								
							
							
						
						
									
										430
									
								
								alist-proxy.js
								
								
								
								
							| 
						 | 
				
			
			@ -1,430 +0,0 @@
 | 
			
		|||
const HOST = "YOUR_HOST";
 | 
			
		||||
const TOKEN = "YOUR_TOKEN";
 | 
			
		||||
 | 
			
		||||
addEventListener("fetch", (event) => {
 | 
			
		||||
    const request = event.request;
 | 
			
		||||
    const url = new URL(request.url);
 | 
			
		||||
    const sign = url.searchParams.get("sign");
 | 
			
		||||
    if (request.method === "OPTIONS") {
 | 
			
		||||
        // Handle CORS preflight requests
 | 
			
		||||
        event.respondWith(handleOptions(request));
 | 
			
		||||
    } else if (sign && sign.length === 16) {
 | 
			
		||||
        // Handle requests to the Down server
 | 
			
		||||
        event.respondWith(handleDownload(request));
 | 
			
		||||
    } else {
 | 
			
		||||
        // Handle requests to the API server
 | 
			
		||||
        event.respondWith(handleRequest(event));
 | 
			
		||||
    }
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
const corsHeaders = {
 | 
			
		||||
    "Access-Control-Allow-Origin": "*",
 | 
			
		||||
    "Access-Control-Allow-Methods": "GET,HEAD,POST,OPTIONS",
 | 
			
		||||
    "Access-Control-Max-Age": "86400",
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
async function handleDownload(request) {
 | 
			
		||||
    const origin = request.headers.get("origin");
 | 
			
		||||
    const url = new URL(request.url);
 | 
			
		||||
    const path = decodeURI(url.pathname);
 | 
			
		||||
    const sign = url.searchParams.get("sign");
 | 
			
		||||
    const name = path.split("/").pop();
 | 
			
		||||
    const right = md5(`alist-${TOKEN}-${name}`).slice(8, 24);
 | 
			
		||||
    if (sign !== right) {
 | 
			
		||||
        const resp = new Response(
 | 
			
		||||
            JSON.stringify({
 | 
			
		||||
                code: 401,
 | 
			
		||||
                message: `sign mismatch`,
 | 
			
		||||
            }),
 | 
			
		||||
            {
 | 
			
		||||
                headers: {
 | 
			
		||||
                    "content-type": "application/json;charset=UTF-8",
 | 
			
		||||
                },
 | 
			
		||||
            }
 | 
			
		||||
        );
 | 
			
		||||
        resp.headers.set("Access-Control-Allow-Origin", origin);
 | 
			
		||||
        return resp;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    let resp = await fetch(`${HOST}/api/admin/link`, {
 | 
			
		||||
        method: "POST",
 | 
			
		||||
        headers: {
 | 
			
		||||
            "content-type": "application/json;charset=UTF-8",
 | 
			
		||||
            Authorization: TOKEN,
 | 
			
		||||
        },
 | 
			
		||||
        body: JSON.stringify({
 | 
			
		||||
            path: path,
 | 
			
		||||
        }),
 | 
			
		||||
    });
 | 
			
		||||
    let res = await resp.json();
 | 
			
		||||
    if (res.code !== 200) {
 | 
			
		||||
        return new Response(JSON.stringify(res));
 | 
			
		||||
    }
 | 
			
		||||
    request = new Request(res.data.url, request);
 | 
			
		||||
    if (res.data.headers) {
 | 
			
		||||
        for (const header of res.data.headers) {
 | 
			
		||||
            request.headers.set(header.name, header.value);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    let response = await fetch(request);
 | 
			
		||||
 | 
			
		||||
    // Recreate the response so we can modify the headers
 | 
			
		||||
    response = new Response(response.body, response);
 | 
			
		||||
 | 
			
		||||
    // Set CORS headers
 | 
			
		||||
    response.headers.set("Access-Control-Allow-Origin", origin);
 | 
			
		||||
 | 
			
		||||
    // Append to/Add Vary header so browser will cache response correctly
 | 
			
		||||
    response.headers.append("Vary", "Origin");
 | 
			
		||||
 | 
			
		||||
    return response;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Respond to the request
 | 
			
		||||
 * @param {Request} request
 | 
			
		||||
 */
 | 
			
		||||
async function handleRequest(event) {
 | 
			
		||||
    const { request } = event;
 | 
			
		||||
 | 
			
		||||
    //请求头部、返回对象
 | 
			
		||||
    let reqHeaders = new Headers(request.headers),
 | 
			
		||||
        outBody,
 | 
			
		||||
        outStatus = 200,
 | 
			
		||||
        outStatusText = "OK",
 | 
			
		||||
        outCt = null,
 | 
			
		||||
        outHeaders = new Headers({
 | 
			
		||||
            "Access-Control-Allow-Origin": reqHeaders.get("Origin"),
 | 
			
		||||
            "Access-Control-Allow-Methods": "GET, POST, PUT, PATCH, DELETE, OPTIONS",
 | 
			
		||||
            "Access-Control-Allow-Headers":
 | 
			
		||||
                reqHeaders.get("Access-Control-Allow-Headers") ||
 | 
			
		||||
                "Accept, Authorization, Cache-Control, Content-Type, DNT, If-Modified-Since, Keep-Alive, Origin, User-Agent, X-Requested-With, Token, x-access-token, Notion-Version",
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
    try {
 | 
			
		||||
        //取域名第一个斜杠后的所有信息为代理链接
 | 
			
		||||
        let url = request.url.substr(8);
 | 
			
		||||
        url = decodeURIComponent(url.substr(url.indexOf("/") + 1));
 | 
			
		||||
 | 
			
		||||
        //需要忽略的代理
 | 
			
		||||
        if (
 | 
			
		||||
            request.method == "OPTIONS" &&
 | 
			
		||||
            reqHeaders.has("access-control-request-headers")
 | 
			
		||||
        ) {
 | 
			
		||||
            //输出提示
 | 
			
		||||
            return new Response(null, PREFLIGHT_INIT);
 | 
			
		||||
        } else if (
 | 
			
		||||
            url.length < 3 ||
 | 
			
		||||
            url.indexOf(".") == -1 ||
 | 
			
		||||
            url == "favicon.ico" ||
 | 
			
		||||
            url == "robots.txt"
 | 
			
		||||
        ) {
 | 
			
		||||
            return Response.redirect("https://baidu.com", 301);
 | 
			
		||||
        }
 | 
			
		||||
        //阻断
 | 
			
		||||
        else if (blocker.check(url)) {
 | 
			
		||||
            return Response.redirect("https://baidu.com", 301);
 | 
			
		||||
        } else {
 | 
			
		||||
            //补上前缀 http://
 | 
			
		||||
            url = url
 | 
			
		||||
                .replace(/https:(\/)*/, "https://")
 | 
			
		||||
                .replace(/http:(\/)*/, "http://");
 | 
			
		||||
            if (url.indexOf("://") == -1) {
 | 
			
		||||
                url = "http://" + url;
 | 
			
		||||
            }
 | 
			
		||||
            //构建 fetch 参数
 | 
			
		||||
            let fp = {
 | 
			
		||||
                method: request.method,
 | 
			
		||||
                headers: {},
 | 
			
		||||
            };
 | 
			
		||||
 | 
			
		||||
            //保留头部其它信息
 | 
			
		||||
            let he = reqHeaders.entries();
 | 
			
		||||
            for (let h of he) {
 | 
			
		||||
                if (!["content-length"].includes(h[0])) {
 | 
			
		||||
                    fp.headers[h[0]] = h[1];
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            // 是否带 body
 | 
			
		||||
            if (["POST", "PUT", "PATCH", "DELETE"].indexOf(request.method) >= 0) {
 | 
			
		||||
                const ct = (reqHeaders.get("content-type") || "").toLowerCase();
 | 
			
		||||
                if (ct.includes("application/json")) {
 | 
			
		||||
                    let requestJSON = await request.json();
 | 
			
		||||
                    console.log(typeof requestJSON);
 | 
			
		||||
                    fp.body = JSON.stringify(requestJSON);
 | 
			
		||||
                } else if (
 | 
			
		||||
                    ct.includes("application/text") ||
 | 
			
		||||
                    ct.includes("text/html")
 | 
			
		||||
                ) {
 | 
			
		||||
                    fp.body = await request.text();
 | 
			
		||||
                } else if (ct.includes("form")) {
 | 
			
		||||
                    // fp.body = await request.formData();
 | 
			
		||||
                    fp.body = await request.text();
 | 
			
		||||
                } else {
 | 
			
		||||
                    fp.body = await request.blob();
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            // 发起 fetch
 | 
			
		||||
            let fr = await fetch(url, fp);
 | 
			
		||||
            outCt = fr.headers.get("content-type");
 | 
			
		||||
            if (outCt.includes("application/text") || outCt.includes("text/html")) {
 | 
			
		||||
                try {
 | 
			
		||||
                    // 添加base
 | 
			
		||||
                    let newFr = new HTMLRewriter()
 | 
			
		||||
                        .on("head", {
 | 
			
		||||
                            element(element) {
 | 
			
		||||
                                element.prepend(`<base href="${url}" />`, {
 | 
			
		||||
                                    html: true,
 | 
			
		||||
                                });
 | 
			
		||||
                            },
 | 
			
		||||
                        })
 | 
			
		||||
                        .transform(fr);
 | 
			
		||||
                    fr = newFr;
 | 
			
		||||
                } catch (e) {}
 | 
			
		||||
            }
 | 
			
		||||
            outStatus = fr.status;
 | 
			
		||||
            outStatusText = fr.statusText;
 | 
			
		||||
            outBody = fr.body;
 | 
			
		||||
        }
 | 
			
		||||
    } catch (err) {
 | 
			
		||||
        outCt = "application/json";
 | 
			
		||||
        outBody = JSON.stringify({
 | 
			
		||||
            code: -1,
 | 
			
		||||
            msg: JSON.stringify(err.stack) || err,
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    //设置类型
 | 
			
		||||
    if (outCt && outCt != "") {
 | 
			
		||||
        outHeaders.set("content-type", outCt);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    let response = new Response(outBody, {
 | 
			
		||||
        status: outStatus,
 | 
			
		||||
        statusText: outStatusText,
 | 
			
		||||
        headers: outHeaders,
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    return response;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const blocker = {
 | 
			
		||||
    keys: [],
 | 
			
		||||
    check: function (url) {
 | 
			
		||||
        url = url.toLowerCase();
 | 
			
		||||
        let len = blocker.keys.filter((x) => url.includes(x)).length;
 | 
			
		||||
        return len != 0;
 | 
			
		||||
    },
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
function handleOptions(request) {
 | 
			
		||||
    // Make sure the necessary headers are present
 | 
			
		||||
    // for this to be a valid pre-flight request
 | 
			
		||||
    let headers = request.headers;
 | 
			
		||||
    if (
 | 
			
		||||
        headers.get("Origin") !== null &&
 | 
			
		||||
        headers.get("Access-Control-Request-Method") !== null
 | 
			
		||||
        // && headers.get("Access-Control-Request-Headers") !== null
 | 
			
		||||
    ) {
 | 
			
		||||
        // Handle CORS pre-flight request.
 | 
			
		||||
        // If you want to check or reject the requested method + headers
 | 
			
		||||
        // you can do that here.
 | 
			
		||||
        let respHeaders = {
 | 
			
		||||
            ...corsHeaders,
 | 
			
		||||
            // Allow all future content Request headers to go back to browser
 | 
			
		||||
            // such as Authorization (Bearer) or X-Client-Name-Version
 | 
			
		||||
            "Access-Control-Allow-Headers": request.headers.get(
 | 
			
		||||
                "Access-Control-Request-Headers"
 | 
			
		||||
            ),
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        return new Response(null, {
 | 
			
		||||
            headers: respHeaders,
 | 
			
		||||
        });
 | 
			
		||||
    } else {
 | 
			
		||||
        // Handle standard OPTIONS request.
 | 
			
		||||
        // If you want to allow other HTTP Methods, you can do that here.
 | 
			
		||||
        return new Response(null, {
 | 
			
		||||
            headers: {
 | 
			
		||||
                Allow: "GET, HEAD, POST, OPTIONS",
 | 
			
		||||
            },
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
!(function (a) {
 | 
			
		||||
    "use strict";
 | 
			
		||||
    function b(a, b) {
 | 
			
		||||
        var c = (65535 & a) + (65535 & b),
 | 
			
		||||
            d = (a >> 16) + (b >> 16) + (c >> 16);
 | 
			
		||||
        return (d << 16) | (65535 & c);
 | 
			
		||||
    }
 | 
			
		||||
    function c(a, b) {
 | 
			
		||||
        return (a << b) | (a >>> (32 - b));
 | 
			
		||||
    }
 | 
			
		||||
    function d(a, d, e, f, g, h) {
 | 
			
		||||
        return b(c(b(b(d, a), b(f, h)), g), e);
 | 
			
		||||
    }
 | 
			
		||||
    function e(a, b, c, e, f, g, h) {
 | 
			
		||||
        return d((b & c) | (~b & e), a, b, f, g, h);
 | 
			
		||||
    }
 | 
			
		||||
    function f(a, b, c, e, f, g, h) {
 | 
			
		||||
        return d((b & e) | (c & ~e), a, b, f, g, h);
 | 
			
		||||
    }
 | 
			
		||||
    function g(a, b, c, e, f, g, h) {
 | 
			
		||||
        return d(b ^ c ^ e, a, b, f, g, h);
 | 
			
		||||
    }
 | 
			
		||||
    function h(a, b, c, e, f, g, h) {
 | 
			
		||||
        return d(c ^ (b | ~e), a, b, f, g, h);
 | 
			
		||||
    }
 | 
			
		||||
    function i(a, c) {
 | 
			
		||||
        (a[c >> 5] |= 128 << c % 32), (a[(((c + 64) >>> 9) << 4) + 14] = c);
 | 
			
		||||
        var d,
 | 
			
		||||
            i,
 | 
			
		||||
            j,
 | 
			
		||||
            k,
 | 
			
		||||
            l,
 | 
			
		||||
            m = 1732584193,
 | 
			
		||||
            n = -271733879,
 | 
			
		||||
            o = -1732584194,
 | 
			
		||||
            p = 271733878;
 | 
			
		||||
        for (d = 0; d < a.length; d += 16)
 | 
			
		||||
            (i = m),
 | 
			
		||||
                (j = n),
 | 
			
		||||
                (k = o),
 | 
			
		||||
                (l = p),
 | 
			
		||||
                (m = e(m, n, o, p, a[d], 7, -680876936)),
 | 
			
		||||
                (p = e(p, m, n, o, a[d + 1], 12, -389564586)),
 | 
			
		||||
                (o = e(o, p, m, n, a[d + 2], 17, 606105819)),
 | 
			
		||||
                (n = e(n, o, p, m, a[d + 3], 22, -1044525330)),
 | 
			
		||||
                (m = e(m, n, o, p, a[d + 4], 7, -176418897)),
 | 
			
		||||
                (p = e(p, m, n, o, a[d + 5], 12, 1200080426)),
 | 
			
		||||
                (o = e(o, p, m, n, a[d + 6], 17, -1473231341)),
 | 
			
		||||
                (n = e(n, o, p, m, a[d + 7], 22, -45705983)),
 | 
			
		||||
                (m = e(m, n, o, p, a[d + 8], 7, 1770035416)),
 | 
			
		||||
                (p = e(p, m, n, o, a[d + 9], 12, -1958414417)),
 | 
			
		||||
                (o = e(o, p, m, n, a[d + 10], 17, -42063)),
 | 
			
		||||
                (n = e(n, o, p, m, a[d + 11], 22, -1990404162)),
 | 
			
		||||
                (m = e(m, n, o, p, a[d + 12], 7, 1804603682)),
 | 
			
		||||
                (p = e(p, m, n, o, a[d + 13], 12, -40341101)),
 | 
			
		||||
                (o = e(o, p, m, n, a[d + 14], 17, -1502002290)),
 | 
			
		||||
                (n = e(n, o, p, m, a[d + 15], 22, 1236535329)),
 | 
			
		||||
                (m = f(m, n, o, p, a[d + 1], 5, -165796510)),
 | 
			
		||||
                (p = f(p, m, n, o, a[d + 6], 9, -1069501632)),
 | 
			
		||||
                (o = f(o, p, m, n, a[d + 11], 14, 643717713)),
 | 
			
		||||
                (n = f(n, o, p, m, a[d], 20, -373897302)),
 | 
			
		||||
                (m = f(m, n, o, p, a[d + 5], 5, -701558691)),
 | 
			
		||||
                (p = f(p, m, n, o, a[d + 10], 9, 38016083)),
 | 
			
		||||
                (o = f(o, p, m, n, a[d + 15], 14, -660478335)),
 | 
			
		||||
                (n = f(n, o, p, m, a[d + 4], 20, -405537848)),
 | 
			
		||||
                (m = f(m, n, o, p, a[d + 9], 5, 568446438)),
 | 
			
		||||
                (p = f(p, m, n, o, a[d + 14], 9, -1019803690)),
 | 
			
		||||
                (o = f(o, p, m, n, a[d + 3], 14, -187363961)),
 | 
			
		||||
                (n = f(n, o, p, m, a[d + 8], 20, 1163531501)),
 | 
			
		||||
                (m = f(m, n, o, p, a[d + 13], 5, -1444681467)),
 | 
			
		||||
                (p = f(p, m, n, o, a[d + 2], 9, -51403784)),
 | 
			
		||||
                (o = f(o, p, m, n, a[d + 7], 14, 1735328473)),
 | 
			
		||||
                (n = f(n, o, p, m, a[d + 12], 20, -1926607734)),
 | 
			
		||||
                (m = g(m, n, o, p, a[d + 5], 4, -378558)),
 | 
			
		||||
                (p = g(p, m, n, o, a[d + 8], 11, -2022574463)),
 | 
			
		||||
                (o = g(o, p, m, n, a[d + 11], 16, 1839030562)),
 | 
			
		||||
                (n = g(n, o, p, m, a[d + 14], 23, -35309556)),
 | 
			
		||||
                (m = g(m, n, o, p, a[d + 1], 4, -1530992060)),
 | 
			
		||||
                (p = g(p, m, n, o, a[d + 4], 11, 1272893353)),
 | 
			
		||||
                (o = g(o, p, m, n, a[d + 7], 16, -155497632)),
 | 
			
		||||
                (n = g(n, o, p, m, a[d + 10], 23, -1094730640)),
 | 
			
		||||
                (m = g(m, n, o, p, a[d + 13], 4, 681279174)),
 | 
			
		||||
                (p = g(p, m, n, o, a[d], 11, -358537222)),
 | 
			
		||||
                (o = g(o, p, m, n, a[d + 3], 16, -722521979)),
 | 
			
		||||
                (n = g(n, o, p, m, a[d + 6], 23, 76029189)),
 | 
			
		||||
                (m = g(m, n, o, p, a[d + 9], 4, -640364487)),
 | 
			
		||||
                (p = g(p, m, n, o, a[d + 12], 11, -421815835)),
 | 
			
		||||
                (o = g(o, p, m, n, a[d + 15], 16, 530742520)),
 | 
			
		||||
                (n = g(n, o, p, m, a[d + 2], 23, -995338651)),
 | 
			
		||||
                (m = h(m, n, o, p, a[d], 6, -198630844)),
 | 
			
		||||
                (p = h(p, m, n, o, a[d + 7], 10, 1126891415)),
 | 
			
		||||
                (o = h(o, p, m, n, a[d + 14], 15, -1416354905)),
 | 
			
		||||
                (n = h(n, o, p, m, a[d + 5], 21, -57434055)),
 | 
			
		||||
                (m = h(m, n, o, p, a[d + 12], 6, 1700485571)),
 | 
			
		||||
                (p = h(p, m, n, o, a[d + 3], 10, -1894986606)),
 | 
			
		||||
                (o = h(o, p, m, n, a[d + 10], 15, -1051523)),
 | 
			
		||||
                (n = h(n, o, p, m, a[d + 1], 21, -2054922799)),
 | 
			
		||||
                (m = h(m, n, o, p, a[d + 8], 6, 1873313359)),
 | 
			
		||||
                (p = h(p, m, n, o, a[d + 15], 10, -30611744)),
 | 
			
		||||
                (o = h(o, p, m, n, a[d + 6], 15, -1560198380)),
 | 
			
		||||
                (n = h(n, o, p, m, a[d + 13], 21, 1309151649)),
 | 
			
		||||
                (m = h(m, n, o, p, a[d + 4], 6, -145523070)),
 | 
			
		||||
                (p = h(p, m, n, o, a[d + 11], 10, -1120210379)),
 | 
			
		||||
                (o = h(o, p, m, n, a[d + 2], 15, 718787259)),
 | 
			
		||||
                (n = h(n, o, p, m, a[d + 9], 21, -343485551)),
 | 
			
		||||
                (m = b(m, i)),
 | 
			
		||||
                (n = b(n, j)),
 | 
			
		||||
                (o = b(o, k)),
 | 
			
		||||
                (p = b(p, l));
 | 
			
		||||
        return [m, n, o, p];
 | 
			
		||||
    }
 | 
			
		||||
    function j(a) {
 | 
			
		||||
        var b,
 | 
			
		||||
            c = "";
 | 
			
		||||
        for (b = 0; b < 32 * a.length; b += 8)
 | 
			
		||||
            c += String.fromCharCode((a[b >> 5] >>> b % 32) & 255);
 | 
			
		||||
        return c;
 | 
			
		||||
    }
 | 
			
		||||
    function k(a) {
 | 
			
		||||
        var b,
 | 
			
		||||
            c = [];
 | 
			
		||||
        for (c[(a.length >> 2) - 1] = void 0, b = 0; b < c.length; b += 1) c[b] = 0;
 | 
			
		||||
        for (b = 0; b < 8 * a.length; b += 8)
 | 
			
		||||
            c[b >> 5] |= (255 & a.charCodeAt(b / 8)) << b % 32;
 | 
			
		||||
        return c;
 | 
			
		||||
    }
 | 
			
		||||
    function l(a) {
 | 
			
		||||
        return j(i(k(a), 8 * a.length));
 | 
			
		||||
    }
 | 
			
		||||
    function m(a, b) {
 | 
			
		||||
        var c,
 | 
			
		||||
            d,
 | 
			
		||||
            e = k(a),
 | 
			
		||||
            f = [],
 | 
			
		||||
            g = [];
 | 
			
		||||
        for (
 | 
			
		||||
            f[15] = g[15] = void 0, e.length > 16 && (e = i(e, 8 * a.length)), c = 0;
 | 
			
		||||
            16 > c;
 | 
			
		||||
            c += 1
 | 
			
		||||
        )
 | 
			
		||||
            (f[c] = 909522486 ^ e[c]), (g[c] = 1549556828 ^ e[c]);
 | 
			
		||||
        return (d = i(f.concat(k(b)), 512 + 8 * b.length)), j(i(g.concat(d), 640));
 | 
			
		||||
    }
 | 
			
		||||
    function n(a) {
 | 
			
		||||
        var b,
 | 
			
		||||
            c,
 | 
			
		||||
            d = "0123456789abcdef",
 | 
			
		||||
            e = "";
 | 
			
		||||
        for (c = 0; c < a.length; c += 1)
 | 
			
		||||
            (b = a.charCodeAt(c)), (e += d.charAt((b >>> 4) & 15) + d.charAt(15 & b));
 | 
			
		||||
        return e;
 | 
			
		||||
    }
 | 
			
		||||
    function o(a) {
 | 
			
		||||
        return unescape(encodeURIComponent(a));
 | 
			
		||||
    }
 | 
			
		||||
    function p(a) {
 | 
			
		||||
        return l(o(a));
 | 
			
		||||
    }
 | 
			
		||||
    function q(a) {
 | 
			
		||||
        return n(p(a));
 | 
			
		||||
    }
 | 
			
		||||
    function r(a, b) {
 | 
			
		||||
        return m(o(a), o(b));
 | 
			
		||||
    }
 | 
			
		||||
    function s(a, b) {
 | 
			
		||||
        return n(r(a, b));
 | 
			
		||||
    }
 | 
			
		||||
    function t(a, b, c) {
 | 
			
		||||
        return b ? (c ? r(b, a) : s(b, a)) : c ? p(a) : q(a);
 | 
			
		||||
    }
 | 
			
		||||
    "function" == typeof define && define.amd
 | 
			
		||||
        ? define(function () {
 | 
			
		||||
            return t;
 | 
			
		||||
        })
 | 
			
		||||
        : (a.md5 = t);
 | 
			
		||||
})(this);
 | 
			
		||||
		Loading…
	
		Reference in New Issue