吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 939|回复: 21
上一主题 下一主题
收起左侧

[Python 原创] 2024年第九届全国学生“学宪法讲宪法”(宪法小卫士)登录分析

  [复制链接]
跳转到指定楼层
楼主
头脑发热的少年 发表于 2024-11-10 18:26 回帖奖励
首先江湖规矩f12,找到登录接口,直接堆栈分析,找到图中的调用堆栈,别问我为什么是这个,当然是从第一个往上追的呗

其次当然是点进来了,就看到了经典的passwordSMEncryption,这不就找到了么,直接再e.passwordSMEncryption打断点,然后再跟进去

最后你猜怎么着,看到了经典的 n("8060") ,这不就是 webpack么,这就简单了呀,直接着加载器呗,在 n("8060")下断点,跟进去找加载器


找到了,直接扣下来,然后再来个外部调用

然后把要补的方法挨个补齐,最后调用加密算法,结果就直接出来了,key是验证码接口返回的

补充一哈,这三个值调用的方法是一样的,



最后直接上你们最爱的成品代码
谨记,仅用于学习交流使用,切勿用于非法用途,否则一切后果自行承担,与本作者无关
[JavaScript] 纯文本查看 复制代码
window=global;
var SME
(function(e) {
    function t(t) {
        for (var a, i, c = t[0], s = t[1], u = t[2], l = 0, d = []; l < c.length; l++)
            i = c[l],
            Object.prototype.hasOwnProperty.call(o, i) && o[i] && d.push(o[i][0]),
            o[i] = 0;
        for (a in s)
            Object.prototype.hasOwnProperty.call(s, a) && (e[a] = s[a]);
        f && f(t);
        while (d.length)
            d.shift()();
        return r.push.apply(r, u || []),
        n()
    }
    function n() {
        for (var e, t = 0; t < r.length; t++) {
            for (var n = r[t], a = !0, i = 1; i < n.length; i++) {
                var c = n[i];
                0 !== o[c] && (a = !1)
            }
            a && (r.splice(t--, 1),
            e = s(s.s = n[0]))
        }
        return e
    }
    var a = {}
      , i = {
        app: 0
    }
      , o = {
        app: 0
    }
      , r = [];
    function c(e) {
        return s.p + "js/" + ({
            fail: "fail"
        }[e] || e) + "." + {
            "chunk-3d153169": "df7e77ed",
            fail: "db3650d5",
            "chunk-3d2c7968": "8c9d5c3c"
        }[e] + ".js"
    }
    function s(t) {
        if (a[t])
            return a[t].exports;
        var n = a[t] = {
            i: t,
            l: !1,
            exports: {}
        };
        console.log(t)
        return e[t].call(n.exports, n, n.exports, s),
        n.l = !0,
        n.exports
    }
    s.e = function(e) {
        var t = []
          , n = {
            "chunk-3d153169": 1,
            fail: 1,
            "chunk-3d2c7968": 1
        };
        i[e] ? t.push(i[e]) : 0 !== i[e] && n[e] && t.push(i[e] = new Promise((function(t, n) {
            for (var a = "css/" + ({
                fail: "fail"
            }[e] || e) + "." + {
                "chunk-3d153169": "4d72d8e6",
                fail: "cc374f60",
                "chunk-3d2c7968": "4869ea26"
            }[e] + ".css", o = s.p + a, r = document.getElementsByTagName("link"), c = 0; c < r.length; c++) {
                var u = r[c]
                  , l = u.getAttribute("data-href") || u.getAttribute("href");
                if ("stylesheet" === u.rel && (l === a || l === o))
                    return t()
            }
            var d = document.getElementsByTagName("style");
            for (c = 0; c < d.length; c++) {
                u = d[c],
                l = u.getAttribute("data-href");
                if (l === a || l === o)
                    return t()
            }
            var f = document.createElement("link");
            f.rel = "stylesheet",
            f.type = "text/css",
            f.onload = t,
            f.onerror = function(t) {
                var a = t && t.target && t.target.src || o
                  , r = new Error("Loading CSS chunk " + e + " failed.\n(" + a + ")");
                r.code = "CSS_CHUNK_LOAD_FAILED",
                r.request = a,
                delete i[e],
                f.parentNode.removeChild(f),
                n(r)
            }
            ,
            f.href = o;
            var p = document.getElementsByTagName("head")[0];
            p.appendChild(f)
        }
        )).then((function() {
            i[e] = 0
        }
        )));
        var a = o[e];
        if (0 !== a)
            if (a)
                t.push(a[2]);
            else {
                var r = new Promise((function(t, n) {
                    a = o[e] = [t, n]
                }
                ));
                t.push(a[2] = r);
                var u, l = document.createElement("script");
                l.charset = "utf-8",
                l.timeout = 120,
                s.nc && l.setAttribute("nonce", s.nc),
                l.src = c(e);
                var d = new Error;
                u = function(t) {
                    l.onerror = l.onload = null,
                    clearTimeout(f);
                    var n = o[e];
                    if (0 !== n) {
                        if (n) {
                            var a = t && ("load" === t.type ? "missing" : t.type)
                              , i = t && t.target && t.target.src;
                            d.message = "Loading chunk " + e + " failed.\n(" + a + ": " + i + ")",
                            d.name = "ChunkLoadError",
                            d.type = a,
                            d.request = i,
                            n[1](d)
                        }
                        o[e] = void 0
                    }
                }
                ;
                var f = setTimeout((function() {
                    u({
                        type: "timeout",
                        target: l
                    })
                }
                ), 12e4);
                l.onerror = l.onload = u,
                document.head.appendChild(l)
            }
        return Promise.all(t)
    },
    s.m = e,
    s.c = a,
    s.d = function(e, t, n) {
        s.o(e, t) || Object.defineProperty(e, t, {
            enumerable: !0,
            get: n
        })
    },
    s.r = function(e) {
        "undefined" !== typeof Symbol && Symbol.toStringTag && Object.defineProperty(e, Symbol.toStringTag, {
            value: "Module"
        }),
        Object.defineProperty(e, "__esModule", {
            value: !0
        })
    },
    s.t = function(e, t) {
        if (1 & t && (e = s(e)),
        8 & t)
            return e;
        if (4 & t && "object" === typeof e && e && e.__esModule)
            return e;
        var n = Object.create(null);
        if (s.r(n),
        Object.defineProperty(n, "default", {
            enumerable: !0,
            value: e
        }),
        2 & t && "string" != typeof e)
            for (var a in e)
                s.d(n, a, function(t) {
                    return e[t]
                }
                .bind(null, a));
        return n
    },
    s.n = function(e) {
        var t = e && e.__esModule ? function() {
            return e["default"]
        }
        : function() {
            return e
        }
        ;
        return s.d(t, "a", t),
        t
    },
    s.o = function(e, t) {
        return Object.prototype.hasOwnProperty.call(e, t)
    },
    s.p = "/user/",
    s.oe = function(e) {
        throw console.error(e),
        e
    }
    ;
    var u = window["webpackJsonp"] = window["webpackJsonp"] || []
      , l = u.push.bind(u);
    u.push = t,
    u = u.slice();
    for (var d = 0; d < u.length; d++)
        t(u[d]);
    var f = l;
    r.push([0, "chunk-vendors"]),
    n();
    SME=s
}
)(
    {
         8060: function(t, e, n) {
            t.exports = {
                sm2: n("526b"),
                sm3: n("72fa"),
                sm4: n("10d11")
            }
        },
        "526b": function(t, e, n) {
        const {BigInteger: i} = n("e0c8")
          , {encodeDer: o, decodeDer: r} = n("f9dd")
          , s = n("dffd")
          , a = n("41d0").sm3
          , {G: c, curve: l, n: u} = s.generateEcparam()
          , d = 0;
        function p(t, e, n=1) {
            t = "string" === typeof t ? s.hexToArray(s.utf8ToHex(t)) : Array.prototype.slice.call(t),
            e = s.getGlobalCurve().decodePointHex(e);
            const o = s.generateKeyPairHex()
              , r = new i(o.privateKey,16);
            let c = o.publicKey;
            c.length > 128 && (c = c.substr(c.length - 128));
            const l = e.multiply(r)
              , u = s.hexToArray(s.leftPad(l.getX().toBigInteger().toRadix(16), 64))
              , p = s.hexToArray(s.leftPad(l.getY().toBigInteger().toRadix(16), 64))
              , f = s.arrayToHex(a([].concat(u, t, p)));
            let h = 1
              , m = 0
              , g = [];
            const v = [].concat(u, p)
              , b = () => {
                g = a([...v, h >> 24 & 255, h >> 16 & 255, h >> 8 & 255, 255 & h]),
                h++,
                m = 0
            }
            ;
            b();
            for (let i = 0, s = t.length; i < s; i++)
                m === g.length && b(),
                t[i] ^= 255 & g[m++];
            const y = s.arrayToHex(t);
            return n === d ? c + y + f : c + f + y
        }
        function f(t, e, n=1, {output: o="string"}={}) {
            e = new i(e,16);
            let r = t.substr(128, 64)
              , c = t.substr(192);
            n === d && (r = t.substr(t.length - 64),
            c = t.substr(128, t.length - 128 - 64));
            const l = s.hexToArray(c)
              , u = s.getGlobalCurve().decodePointHex("04" + t.substr(0, 128))
              , p = u.multiply(e)
              , f = s.hexToArray(s.leftPad(p.getX().toBigInteger().toRadix(16), 64))
              , h = s.hexToArray(s.leftPad(p.getY().toBigInteger().toRadix(16), 64));
            let m = 1
              , g = 0
              , v = [];
            const b = [].concat(f, h)
              , y = () => {
                v = a([...b, m >> 24 & 255, m >> 16 & 255, m >> 8 & 255, 255 & m]),
                m++,
                g = 0
            }
            ;
            y();
            for (let i = 0, s = l.length; i < s; i++)
                g === v.length && y(),
                l[i] ^= 255 & v[g++];
            const I = s.arrayToHex(a([].concat(f, l, h)));
            return I === r.toLowerCase() ? "array" === o ? l : s.arrayToUtf8(l) : "array" === o ? [] : ""
        }
        function h(t, e, {pointPool: n, der: r, hash: a, publicKey: c, userId: l}={}) {
            let d = "string" === typeof t ? s.utf8ToHex(t) : s.arrayToHex(t);
            a && (c = c || v(e),
            d = g(d, c, l));
            const p = new i(e,16)
              , f = new i(d,16);
            let h = null
              , m = null
              , y = null;
            do {
                do {
                    let t;
                    t = n && n.length ? n.pop() : b(),
                    h = t.k,
                    m = f.add(t.x1).mod(u)
                } while (m.equals(i.ZERO) || m.add(h).equals(u));
                y = p.add(i.ONE).modInverse(u).multiply(h.subtract(m.multiply(p))).mod(u)
            } while (y.equals(i.ZERO));
            return r ? o(m, y) : s.leftPad(m.toString(16), 64) + s.leftPad(y.toString(16), 64)
        }
        function m(t, e, n, {der: o, hash: a, userId: d}={}) {
            let p, f, h = "string" === typeof t ? s.utf8ToHex(t) : s.arrayToHex(t);
            if (a && (h = g(h, n, d)),
            o) {
                const t = r(e);
                p = t.r,
                f = t.s
            } else
                p = new i(e.substring(0, 64),16),
                f = new i(e.substring(64),16);
            const m = l.decodePointHex(n)
              , v = new i(h,16)
              , b = p.add(f).mod(u);
            if (b.equals(i.ZERO))
                return !1;
            const y = c.multiply(f).add(m.multiply(b))
              , I = v.add(y.getX().toBigInteger()).mod(u);
            return p.equals(I)
        }
        function g(t, e, n="1234567812345678") {
            n = s.utf8ToHex(n);
            const i = s.leftPad(c.curve.a.toBigInteger().toRadix(16), 64)
              , o = s.leftPad(c.curve.b.toBigInteger().toRadix(16), 64)
              , r = s.leftPad(c.getX().toBigInteger().toRadix(16), 64)
              , l = s.leftPad(c.getY().toBigInteger().toRadix(16), 64);
            let u, d;
            if (128 === e.length)
                u = e.substr(0, 64),
                d = e.substr(64, 64);
            else {
                const t = c.curve.decodePointHex(e);
                u = s.leftPad(t.getX().toBigInteger().toRadix(16), 64),
                d = s.leftPad(t.getY().toBigInteger().toRadix(16), 64)
            }
            const p = s.hexToArray(n + i + o + r + l + u + d)
              , f = 4 * n.length;
            p.unshift(255 & f),
            p.unshift(f >> 8 & 255);
            const h = a(p);
            return s.arrayToHex(a(h.concat(s.hexToArray(t))))
        }
        function v(t) {
            const e = c.multiply(new i(t,16))
              , n = s.leftPad(e.getX().toBigInteger().toString(16), 64)
              , o = s.leftPad(e.getY().toBigInteger().toString(16), 64);
            return "04" + n + o
        }
        function b() {
            const t = s.generateKeyPairHex()
              , e = l.decodePointHex(t.publicKey);
            return t.k = new i(t.privateKey,16),
            t.x1 = e.getX().toBigInteger(),
            t
        }
        t.exports = {
            generateKeyPairHex: s.generateKeyPairHex,
            compressPublicKeyHex: s.compressPublicKeyHex,
            comparePublicKeyHex: s.comparePublicKeyHex,
            doEncrypt: p,
            doDecrypt: f,
            doSignature: h,
            doVerifySignature: m,
            getPublicKeyFromPrivateKey: v,
            getPoint: b,
            verifyPublicKey: s.verifyPublicKey
        }
    },
        e0c8: function(t, e, n) {
        (function() {
            var e, n = 0xdeadbeefcafe, i = 15715070 == (16777215 & n);
            function o(t, e, n) {
                null != t && ("number" == typeof t ? this.fromNumber(t, e, n) : null == e && "string" != typeof t ? this.fromString(t, 256) : this.fromString(t, e))
            }
            function r() {
                return new o(null)
            }
            function s(t, e, n, i, o, r) {
                while (--r >= 0) {
                    var s = e * this[t++] + n[i] + o;
                    o = Math.floor(s / 67108864),
                    n[i++] = 67108863 & s
                }
                return o
            }
            function a(t, e, n, i, o, r) {
                var s = 32767 & e
                  , a = e >> 15;
                while (--r >= 0) {
                    var c = 32767 & this[t]
                      , l = this[t++] >> 15
                      , u = a * c + l * s;
                    c = s * c + ((32767 & u) << 15) + n[i] + (1073741823 & o),
                    o = (c >>> 30) + (u >>> 15) + a * l + (o >>> 30),
                    n[i++] = 1073741823 & c
                }
                return o
            }
            function c(t, e, n, i, o, r) {
                var s = 16383 & e
                  , a = e >> 14;
                while (--r >= 0) {
                    var c = 16383 & this[t]
                      , l = this[t++] >> 14
                      , u = a * c + l * s;
                    c = s * c + ((16383 & u) << 14) + n[i] + o,
                    o = (c >> 28) + (u >> 14) + a * l,
                    n[i++] = 268435455 & c
                }
                return o
            }
            var l = "undefined" !== typeof navigator;
            l && i && "Microsoft Internet Explorer" == navigator.appName ? (o.prototype.am = a,
            e = 30) : l && i && "Netscape" != navigator.appName ? (o.prototype.am = s,
            e = 26) : (o.prototype.am = c,
            e = 28),
            o.prototype.DB = e,
            o.prototype.DM = (1 << e) - 1,
            o.prototype.DV = 1 << e;
            var u = 52;
            o.prototype.FV = Math.pow(2, u),
            o.prototype.F1 = u - e,
            o.prototype.F2 = 2 * e - u;
            var d, p, f = "0123456789abcdefghijklmnopqrstuvwxyz", h = new Array;
            for (d = "0".charCodeAt(0),
            p = 0; p <= 9; ++p)
                h[d++] = p;
            for (d = "a".charCodeAt(0),
            p = 10; p < 36; ++p)
                h[d++] = p;
            for (d = "A".charCodeAt(0),
            p = 10; p < 36; ++p)
                h[d++] = p;
            function m(t) {
                return f.charAt(t)
            }
            function g(t, e) {
                var n = h[t.charCodeAt(e)];
                return null == n ? -1 : n
            }
            function v(t) {
                for (var e = this.t - 1; e >= 0; --e)
                    t[e] = this[e];
                t.t = this.t,
                t.s = this.s
            }
            function b(t) {
                this.t = 1,
                this.s = t < 0 ? -1 : 0,
                t > 0 ? this[0] = t : t < -1 ? this[0] = t + this.DV : this.t = 0
            }
            function y(t) {
                var e = r();
                return e.fromInt(t),
                e
            }
            function I(t, e) {
                var n;
                if (16 == e)
                    n = 4;
                else if (8 == e)
                    n = 3;
                else if (256 == e)
                    n = 8;
                else if (2 == e)
                    n = 1;
                else if (32 == e)
                    n = 5;
                else {
                    if (4 != e)
                        return void this.fromRadix(t, e);
                    n = 2
                }
                this.t = 0,
                this.s = 0;
                var i = t.length
                  , r = !1
                  , s = 0;
                while (--i >= 0) {
                    var a = 8 == n ? 255 & t[i] : g(t, i);
                    a < 0 ? "-" == t.charAt(i) && (r = !0) : (r = !1,
                    0 == s ? this[this.t++] = a : s + n > this.DB ? (this[this.t - 1] |= (a & (1 << this.DB - s) - 1) << s,
                    this[this.t++] = a >> this.DB - s) : this[this.t - 1] |= a << s,
                    s += n,
                    s >= this.DB && (s -= this.DB))
                }
                8 == n && 0 != (128 & t[0]) && (this.s = -1,
                s > 0 && (this[this.t - 1] |= (1 << this.DB - s) - 1 << s)),
                this.clamp(),
                r && o.ZERO.subTo(this, this)
            }
            function C() {
                var t = this.s & this.DM;
                while (this.t > 0 && this[this.t - 1] == t)
                    --this.t
            }
            function x(t) {
                if (this.s < 0)
                    return "-" + this.negate().toString(t);
                var e;
                if (16 == t)
                    e = 4;
                else if (8 == t)
                    e = 3;
                else if (2 == t)
                    e = 1;
                else if (32 == t)
                    e = 5;
                else {
                    if (4 != t)
                        return this.toRadix(t);
                    e = 2
                }
                var n, i = (1 << e) - 1, o = !1, r = "", s = this.t, a = this.DB - s * this.DB % e;
                if (s-- > 0) {
                    a < this.DB && (n = this[s] >> a) > 0 && (o = !0,
                    r = m(n));
                    while (s >= 0)
                        a < e ? (n = (this[s] & (1 << a) - 1) << e - a,
                        n |= this[--s] >> (a += this.DB - e)) : (n = this[s] >> (a -= e) & i,
                        a <= 0 && (a += this.DB,
                        --s)),
                        n > 0 && (o = !0),
                        o && (r += m(n))
                }
                return o ? r : "0"
            }
            function w() {
                var t = r();
                return o.ZERO.subTo(this, t),
                t
            }
            function _() {
                return this.s < 0 ? this.negate() : this
            }
            function S(t) {
                var e = this.s - t.s;
                if (0 != e)
                    return e;
                var n = this.t;
                if (e = n - t.t,
                0 != e)
                    return this.s < 0 ? -e : e;
                while (--n >= 0)
                    if (0 != (e = this[n] - t[n]))
                        return e;
                return 0
            }
            function k(t) {
                var e, n = 1;
                return 0 != (e = t >>> 16) && (t = e,
                n += 16),
                0 != (e = t >> 8) && (t = e,
                n += 8),
                0 != (e = t >> 4) && (t = e,
                n += 4),
                0 != (e = t >> 2) && (t = e,
                n += 2),
                0 != (e = t >> 1) && (t = e,
                n += 1),
                n
            }
            function T() {
                return this.t <= 0 ? 0 : this.DB * (this.t - 1) + k(this[this.t - 1] ^ this.s & this.DM)
            }
            function O(t, e) {
                var n;
                for (n = this.t - 1; n >= 0; --n)
                    e[n + t] = this[n];
                for (n = t - 1; n >= 0; --n)
                    e[n] = 0;
                e.t = this.t + t,
                e.s = this.s
            }
            function E(t, e) {
                for (var n = t; n < this.t; ++n)
                    e[n - t] = this[n];
                e.t = Math.max(this.t - t, 0),
                e.s = this.s
            }
            function A(t, e) {
                var n, i = t % this.DB, o = this.DB - i, r = (1 << o) - 1, s = Math.floor(t / this.DB), a = this.s << i & this.DM;
                for (n = this.t - 1; n >= 0; --n)
                    e[n + s + 1] = this[n] >> o | a,
                    a = (this[n] & r) << i;
                for (n = s - 1; n >= 0; --n)
                    e[n] = 0;
                e[s] = a,
                e.t = this.t + s + 1,
                e.s = this.s,
                e.clamp()
            }
            function N(t, e) {
                e.s = this.s;
                var n = Math.floor(t / this.DB);
                if (n >= this.t)
                    e.t = 0;
                else {
                    var i = t % this.DB
                      , o = this.DB - i
                      , r = (1 << i) - 1;
                    e[0] = this[n] >> i;
                    for (var s = n + 1; s < this.t; ++s)
                        e[s - n - 1] |= (this[s] & r) << o,
                        e[s - n] = this[s] >> i;
                    i > 0 && (e[this.t - n - 1] |= (this.s & r) << o),
                    e.t = this.t - n,
                    e.clamp()
                }
            }
            function R(t, e) {
                var n = 0
                  , i = 0
                  , o = Math.min(t.t, this.t);
                while (n < o)
                    i += this[n] - t[n],
                    e[n++] = i & this.DM,
                    i >>= this.DB;
                if (t.t < this.t) {
                    i -= t.s;
                    while (n < this.t)
                        i += this[n],
                        e[n++] = i & this.DM,
                        i >>= this.DB;
                    i += this.s
                } else {
                    i += this.s;
                    while (n < t.t)
                        i -= t[n],
                        e[n++] = i & this.DM,
                        i >>= this.DB;
                    i -= t.s
                }
                e.s = i < 0 ? -1 : 0,
                i < -1 ? e[n++] = this.DV + i : i > 0 && (e[n++] = i),
                e.t = n,
                e.clamp()
            }
            function B(t, e) {
                var n = this.abs()
                  , i = t.abs()
                  , r = n.t;
                e.t = r + i.t;
                while (--r >= 0)
                    e[r] = 0;
                for (r = 0; r < i.t; ++r)
                    e[r + n.t] = n.am(0, i[r], e, r, 0, n.t);
                e.s = 0,
                e.clamp(),
                this.s != t.s && o.ZERO.subTo(e, e)
            }
            function D(t) {
                var e = this.abs()
                  , n = t.t = 2 * e.t;
                while (--n >= 0)
                    t[n] = 0;
                for (n = 0; n < e.t - 1; ++n) {
                    var i = e.am(n, e[n], t, 2 * n, 0, 1);
                    (t[n + e.t] += e.am(n + 1, 2 * e[n], t, 2 * n + 1, i, e.t - n - 1)) >= e.DV && (t[n + e.t] -= e.DV,
                    t[n + e.t + 1] = 1)
                }
                t.t > 0 && (t[t.t - 1] += e.am(n, e[n], t, 2 * n, 0, 1)),
                t.s = 0,
                t.clamp()
            }
            function L(t, e, n) {
                var i = t.abs();
                if (!(i.t <= 0)) {
                    var s = this.abs();
                    if (s.t < i.t)
                        return null != e && e.fromInt(0),
                        void (null != n && this.copyTo(n));
                    null == n && (n = r());
                    var a = r()
                      , c = this.s
                      , l = t.s
                      , u = this.DB - k(i[i.t - 1]);
                    u > 0 ? (i.lShiftTo(u, a),
                    s.lShiftTo(u, n)) : (i.copyTo(a),
                    s.copyTo(n));
                    var d = a.t
                      , p = a[d - 1];
                    if (0 != p) {
                        var f = p * (1 << this.F1) + (d > 1 ? a[d - 2] >> this.F2 : 0)
                          , h = this.FV / f
                          , m = (1 << this.F1) / f
                          , g = 1 << this.F2
                          , v = n.t
                          , b = v - d
                          , y = null == e ? r() : e;
                        a.dlShiftTo(b, y),
                        n.compareTo(y) >= 0 && (n[n.t++] = 1,
                        n.subTo(y, n)),
                        o.ONE.dlShiftTo(d, y),
                        y.subTo(a, a);
                        while (a.t < d)
                            a[a.t++] = 0;
                        while (--b >= 0) {
                            var I = n[--v] == p ? this.DM : Math.floor(n[v] * h + (n[v - 1] + g) * m);
                            if ((n[v] += a.am(0, I, n, b, 0, d)) < I) {
                                a.dlShiftTo(b, y),
                                n.subTo(y, n);
                                while (n[v] < --I)
                                    n.subTo(y, n)
                            }
                        }
                        null != e && (n.drShiftTo(d, e),
                        c != l && o.ZERO.subTo(e, e)),
                        n.t = d,
                        n.clamp(),
                        u > 0 && n.rShiftTo(u, n),
                        c < 0 && o.ZERO.subTo(n, n)
                    }
                }
            }
            function F(t) {
                var e = r();
                return this.abs().divRemTo(t, null, e),
                this.s < 0 && e.compareTo(o.ZERO) > 0 && t.subTo(e, e),
                e
            }
            function j(t) {
                this.m = t
            }
            function P(t) {
                return t.s < 0 || t.compareTo(this.m) >= 0 ? t.mod(this.m) : t
            }
            function U(t) {
                return t
            }
            function M(t) {
                t.divRemTo(this.m, null, t)
            }
            function q(t, e, n) {
                t.multiplyTo(e, n),
                this.reduce(n)
            }
            function z(t, e) {
                t.squareTo(e),
                this.reduce(e)
            }
            function H() {
                if (this.t < 1)
                    return 0;
                var t = this[0];
                if (0 == (1 & t))
                    return 0;
                var e = 3 & t;
                return e = e * (2 - (15 & t) * e) & 15,
                e = e * (2 - (255 & t) * e) & 255,
                e = e * (2 - ((65535 & t) * e & 65535)) & 65535,
                e = e * (2 - t * e % this.DV) % this.DV,
                e > 0 ? this.DV - e : -e
            }
            function V(t) {
                this.m = t,
                this.mp = t.invDigit(),
                this.mpl = 32767 & this.mp,
                this.mph = this.mp >> 15,
                this.um = (1 << t.DB - 15) - 1,
                this.mt2 = 2 * t.t
            }
            function $(t) {
                var e = r();
                return t.abs().dlShiftTo(this.m.t, e),
                e.divRemTo(this.m, null, e),
                t.s < 0 && e.compareTo(o.ZERO) > 0 && this.m.subTo(e, e),
                e
            }
            function K(t) {
                var e = r();
                return t.copyTo(e),
                this.reduce(e),
                e
            }
            function G(t) {
                while (t.t <= this.mt2)
                    t[t.t++] = 0;
                for (var e = 0; e < this.m.t; ++e) {
                    var n = 32767 & t[e]
                      , i = n * this.mpl + ((n * this.mph + (t[e] >> 15) * this.mpl & this.um) << 15) & t.DM;
                    n = e + this.m.t,
                    t[n] += this.m.am(0, i, t, e, 0, this.m.t);
                    while (t[n] >= t.DV)
                        t[n] -= t.DV,
                        t[++n]++
                }
                t.clamp(),
                t.drShiftTo(this.m.t, t),
                t.compareTo(this.m) >= 0 && t.subTo(this.m, t)
            }
            function W(t, e) {
                t.squareTo(e),
                this.reduce(e)
            }
            function X(t, e, n) {
                t.multiplyTo(e, n),
                this.reduce(n)
            }
            function Y() {
                return 0 == (this.t > 0 ? 1 & this[0] : this.s)
            }
            function Q(t, e) {
                if (t > 4294967295 || t < 1)
                    return o.ONE;
                var n = r()
                  , i = r()
                  , s = e.convert(this)
                  , a = k(t) - 1;
                s.copyTo(n);
                while (--a >= 0)
                    if (e.sqrTo(n, i),
                    (t & 1 << a) > 0)
                        e.mulTo(i, s, n);
                    else {
                        var c = n;
                        n = i,
                        i = c
                    }
                return e.revert(n)
            }
            function Z(t, e) {
                var n;
                return n = t < 256 || e.isEven() ? new j(e) : new V(e),
                this.exp(t, n)
            }
            function J() {
                var t = r();
                return this.copyTo(t),
                t
            }
            function tt() {
                if (this.s < 0) {
                    if (1 == this.t)
                        return this[0] - this.DV;
                    if (0 == this.t)
                        return -1
                } else {
                    if (1 == this.t)
                        return this[0];
                    if (0 == this.t)
                        return 0
                }
                return (this[1] & (1 << 32 - this.DB) - 1) << this.DB | this[0]
            }
            function et() {
                return 0 == this.t ? this.s : this[0] << 24 >> 24
            }
            function nt() {
                return 0 == this.t ? this.s : this[0] << 16 >> 16
            }
            function it(t) {
                return Math.floor(Math.LN2 * this.DB / Math.log(t))
            }
            function ot() {
                return this.s < 0 ? -1 : this.t <= 0 || 1 == this.t && this[0] <= 0 ? 0 : 1
            }
            function rt(t) {
                if (null == t && (t = 10),
                0 == this.signum() || t < 2 || t > 36)
                    return "0";
                var e = this.chunkSize(t)
                  , n = Math.pow(t, e)
                  , i = y(n)
                  , o = r()
                  , s = r()
                  , a = "";
                this.divRemTo(i, o, s);
                while (o.signum() > 0)
                    a = (n + s.intValue()).toString(t).substr(1) + a,
                    o.divRemTo(i, o, s);
                return s.intValue().toString(t) + a
            }
            function st(t, e) {
                this.fromInt(0),
                null == e && (e = 10);
                for (var n = this.chunkSize(e), i = Math.pow(e, n), r = !1, s = 0, a = 0, c = 0; c < t.length; ++c) {
                    var l = g(t, c);
                    l < 0 ? "-" == t.charAt(c) && 0 == this.signum() && (r = !0) : (a = e * a + l,
                    ++s >= n && (this.dMultiply(i),
                    this.dAddOffset(a, 0),
                    s = 0,
                    a = 0))
                }
                s > 0 && (this.dMultiply(Math.pow(e, s)),
                this.dAddOffset(a, 0)),
                r && o.ZERO.subTo(this, this)
            }
            function at(t, e, n) {
                if ("number" == typeof e)
                    if (t < 2)
                        this.fromInt(1);
                    else {
                        this.fromNumber(t, n),
                        this.testBit(t - 1) || this.bitwiseTo(o.ONE.shiftLeft(t - 1), mt, this),
                        this.isEven() && this.dAddOffset(1, 0);
                        while (!this.isProbablePrime(e))
                            this.dAddOffset(2, 0),
                            this.bitLength() > t && this.subTo(o.ONE.shiftLeft(t - 1), this)
                    }
                else {
                    var i = new Array
                      , r = 7 & t;
                    i.length = 1 + (t >> 3),
                    e.nextBytes(i),
                    r > 0 ? i[0] &= (1 << r) - 1 : i[0] = 0,
                    this.fromString(i, 256)
                }
            }
            function ct() {
                var t = this.t
                  , e = new Array;
                e[0] = this.s;
                var n, i = this.DB - t * this.DB % 8, o = 0;
                if (t-- > 0) {
                    i < this.DB && (n = this[t] >> i) != (this.s & this.DM) >> i && (e[o++] = n | this.s << this.DB - i);
                    while (t >= 0)
                        i < 8 ? (n = (this[t] & (1 << i) - 1) << 8 - i,
                        n |= this[--t] >> (i += this.DB - 8)) : (n = this[t] >> (i -= 8) & 255,
                        i <= 0 && (i += this.DB,
                        --t)),
                        0 != (128 & n) && (n |= -256),
                        0 == o && (128 & this.s) != (128 & n) && ++o,
                        (o > 0 || n != this.s) && (e[o++] = n)
                }
                return e
            }
            function lt(t) {
                return 0 == this.compareTo(t)
            }
            function ut(t) {
                return this.compareTo(t) < 0 ? this : t
            }
            function dt(t) {
                return this.compareTo(t) > 0 ? this : t
            }
            function pt(t, e, n) {
                var i, o, r = Math.min(t.t, this.t);
                for (i = 0; i < r; ++i)
                    n[i] = e(this[i], t[i]);
                if (t.t < this.t) {
                    for (o = t.s & this.DM,
                    i = r; i < this.t; ++i)
                        n[i] = e(this[i], o);
                    n.t = this.t
                } else {
                    for (o = this.s & this.DM,
                    i = r; i < t.t; ++i)
                        n[i] = e(o, t[i]);
                    n.t = t.t
                }
                n.s = e(this.s, t.s),
                n.clamp()
            }
            function ft(t, e) {
                return t & e
            }
            function ht(t) {
                var e = r();
                return this.bitwiseTo(t, ft, e),
                e
            }
            function mt(t, e) {
                return t | e
            }
            function gt(t) {
                var e = r();
                return this.bitwiseTo(t, mt, e),
                e
            }
            function vt(t, e) {
                return t ^ e
            }
            function bt(t) {
                var e = r();
                return this.bitwiseTo(t, vt, e),
                e
            }
            function yt(t, e) {
                return t & ~e
            }
            function It(t) {
                var e = r();
                return this.bitwiseTo(t, yt, e),
                e
            }
            function Ct() {
                for (var t = r(), e = 0; e < this.t; ++e)
                    t[e] = this.DM & ~this[e];
                return t.t = this.t,
                t.s = ~this.s,
                t
            }
            function xt(t) {
                var e = r();
                return t < 0 ? this.rShiftTo(-t, e) : this.lShiftTo(t, e),
                e
            }
            function wt(t) {
                var e = r();
                return t < 0 ? this.lShiftTo(-t, e) : this.rShiftTo(t, e),
                e
            }
            function _t(t) {
                if (0 == t)
                    return -1;
                var e = 0;
                return 0 == (65535 & t) && (t >>= 16,
                e += 16),
                0 == (255 & t) && (t >>= 8,
                e += 8),
                0 == (15 & t) && (t >>= 4,
                e += 4),
                0 == (3 & t) && (t >>= 2,
                e += 2),
                0 == (1 & t) && ++e,
                e
            }
            function St() {
                for (var t = 0; t < this.t; ++t)
                    if (0 != this[t])
                        return t * this.DB + _t(this[t]);
                return this.s < 0 ? this.t * this.DB : -1
            }
            function kt(t) {
                var e = 0;
                while (0 != t)
                    t &= t - 1,
                    ++e;
                return e
            }
            function Tt() {
                for (var t = 0, e = this.s & this.DM, n = 0; n < this.t; ++n)
                    t += kt(this[n] ^ e);
                return t
            }
            function Ot(t) {
                var e = Math.floor(t / this.DB);
                return e >= this.t ? 0 != this.s : 0 != (this[e] & 1 << t % this.DB)
            }
            function Et(t, e) {
                var n = o.ONE.shiftLeft(t);
                return this.bitwiseTo(n, e, n),
                n
            }
            function At(t) {
                return this.changeBit(t, mt)
            }
            function Nt(t) {
                return this.changeBit(t, yt)
            }
            function Rt(t) {
                return this.changeBit(t, vt)
            }
            function Bt(t, e) {
                var n = 0
                  , i = 0
                  , o = Math.min(t.t, this.t);
                while (n < o)
                    i += this[n] + t[n],
                    e[n++] = i & this.DM,
                    i >>= this.DB;
                if (t.t < this.t) {
                    i += t.s;
                    while (n < this.t)
                        i += this[n],
                        e[n++] = i & this.DM,
                        i >>= this.DB;
                    i += this.s
                } else {
                    i += this.s;
                    while (n < t.t)
                        i += t[n],
                        e[n++] = i & this.DM,
                        i >>= this.DB;
                    i += t.s
                }
                e.s = i < 0 ? -1 : 0,
                i > 0 ? e[n++] = i : i < -1 && (e[n++] = this.DV + i),
                e.t = n,
                e.clamp()
            }
            function Dt(t) {
                var e = r();
                return this.addTo(t, e),
                e
            }
            function Lt(t) {
                var e = r();
                return this.subTo(t, e),
                e
            }
            function Ft(t) {
                var e = r();
                return this.multiplyTo(t, e),
                e
            }
            function jt() {
                var t = r();
                return this.squareTo(t),
                t
            }
            function Pt(t) {
                var e = r();
                return this.divRemTo(t, e, null),
                e
            }
            function Ut(t) {
                var e = r();
                return this.divRemTo(t, null, e),
                e
            }
            function Mt(t) {
                var e = r()
                  , n = r();
                return this.divRemTo(t, e, n),
                new Array(e,n)
            }
            function qt(t) {
                this[this.t] = this.am(0, t - 1, this, 0, 0, this.t),
                ++this.t,
                this.clamp()
            }
            function zt(t, e) {
                if (0 != t) {
                    while (this.t <= e)
                        this[this.t++] = 0;
                    this[e] += t;
                    while (this[e] >= this.DV)
                        this[e] -= this.DV,
                        ++e >= this.t && (this[this.t++] = 0),
                        ++this[e]
                }
            }
            function Ht() {}
            function Vt(t) {
                return t
            }
            function $t(t, e, n) {
                t.multiplyTo(e, n)
            }
            function Kt(t, e) {
                t.squareTo(e)
            }
            function Gt(t) {
                return this.exp(t, new Ht)
            }
            function Wt(t, e, n) {
                var i, o = Math.min(this.t + t.t, e);
                n.s = 0,
                n.t = o;
                while (o > 0)
                    n[--o] = 0;
                for (i = n.t - this.t; o < i; ++o)
                    n[o + this.t] = this.am(0, t[o], n, o, 0, this.t);
                for (i = Math.min(t.t, e); o < i; ++o)
                    this.am(0, t[o], n, o, 0, e - o);
                n.clamp()
            }
            function Xt(t, e, n) {
                --e;
                var i = n.t = this.t + t.t - e;
                n.s = 0;
                while (--i >= 0)
                    n[i] = 0;
                for (i = Math.max(e - this.t, 0); i < t.t; ++i)
                    n[this.t + i - e] = this.am(e - i, t[i], n, 0, 0, this.t + i - e);
                n.clamp(),
                n.drShiftTo(1, n)
            }
            function Yt(t) {
                this.r2 = r(),
                this.q3 = r(),
                o.ONE.dlShiftTo(2 * t.t, this.r2),
                this.mu = this.r2.divide(t),
                this.m = t
            }
            function Qt(t) {
                if (t.s < 0 || t.t > 2 * this.m.t)
                    return t.mod(this.m);
                if (t.compareTo(this.m) < 0)
                    return t;
                var e = r();
                return t.copyTo(e),
                this.reduce(e),
                e
            }
            function Zt(t) {
                return t
            }
            function Jt(t) {
                t.drShiftTo(this.m.t - 1, this.r2),
                t.t > this.m.t + 1 && (t.t = this.m.t + 1,
                t.clamp()),
                this.mu.multiplyUpperTo(this.r2, this.m.t + 1, this.q3),
                this.m.multiplyLowerTo(this.q3, this.m.t + 1, this.r2);
                while (t.compareTo(this.r2) < 0)
                    t.dAddOffset(1, this.m.t + 1);
                t.subTo(this.r2, t);
                while (t.compareTo(this.m) >= 0)
                    t.subTo(this.m, t)
            }
            function te(t, e) {
                t.squareTo(e),
                this.reduce(e)
            }
            function ee(t, e, n) {
                t.multiplyTo(e, n),
                this.reduce(n)
            }
            function ne(t, e) {
                var n, i, o = t.bitLength(), s = y(1);
                if (o <= 0)
                    return s;
                n = o < 18 ? 1 : o < 48 ? 3 : o < 144 ? 4 : o < 768 ? 5 : 6,
                i = o < 8 ? new j(e) : e.isEven() ? new Yt(e) : new V(e);
                var a = new Array
                  , c = 3
                  , l = n - 1
                  , u = (1 << n) - 1;
                if (a[1] = i.convert(this),
                n > 1) {
                    var d = r();
                    i.sqrTo(a[1], d);
                    while (c <= u)
                        a[c] = r(),
                        i.mulTo(d, a[c - 2], a[c]),
                        c += 2
                }
                var p, f, h = t.t - 1, m = !0, g = r();
                o = k(t[h]) - 1;
                while (h >= 0) {
                    o >= l ? p = t[h] >> o - l & u : (p = (t[h] & (1 << o + 1) - 1) << l - o,
                    h > 0 && (p |= t[h - 1] >> this.DB + o - l)),
                    c = n;
                    while (0 == (1 & p))
                        p >>= 1,
                        --c;
                    if ((o -= c) < 0 && (o += this.DB,
                    --h),
                    m)
                        a[p].copyTo(s),
                        m = !1;
                    else {
                        while (c > 1)
                            i.sqrTo(s, g),
                            i.sqrTo(g, s),
                            c -= 2;
                        c > 0 ? i.sqrTo(s, g) : (f = s,
                        s = g,
                        g = f),
                        i.mulTo(g, a[p], s)
                    }
                    while (h >= 0 && 0 == (t[h] & 1 << o))
                        i.sqrTo(s, g),
                        f = s,
                        s = g,
                        g = f,
                        --o < 0 && (o = this.DB - 1,
                        --h)
                }
                return i.revert(s)
            }
            function ie(t) {
                var e = this.s < 0 ? this.negate() : this.clone()
                  , n = t.s < 0 ? t.negate() : t.clone();
                if (e.compareTo(n) < 0) {
                    var i = e;
                    e = n,
                    n = i
                }
                var o = e.getLowestSetBit()
                  , r = n.getLowestSetBit();
                if (r < 0)
                    return e;
                o < r && (r = o),
                r > 0 && (e.rShiftTo(r, e),
                n.rShiftTo(r, n));
                while (e.signum() > 0)
                    (o = e.getLowestSetBit()) > 0 && e.rShiftTo(o, e),
                    (o = n.getLowestSetBit()) > 0 && n.rShiftTo(o, n),
                    e.compareTo(n) >= 0 ? (e.subTo(n, e),
                    e.rShiftTo(1, e)) : (n.subTo(e, n),
                    n.rShiftTo(1, n));
                return r > 0 && n.lShiftTo(r, n),
                n
            }
            function oe(t) {
                if (t <= 0)
                    return 0;
                var e = this.DV % t
                  , n = this.s < 0 ? t - 1 : 0;
                if (this.t > 0)
                    if (0 == e)
                        n = this[0] % t;
                    else
                        for (var i = this.t - 1; i >= 0; --i)
                            n = (e * n + this[i]) % t;
                return n
            }
            function re(t) {
                var e = t.isEven();
                if (this.isEven() && e || 0 == t.signum())
                    return o.ZERO;
                var n = t.clone()
                  , i = this.clone()
                  , r = y(1)
                  , s = y(0)
                  , a = y(0)
                  , c = y(1);
                while (0 != n.signum()) {
                    while (n.isEven())
                        n.rShiftTo(1, n),
                        e ? (r.isEven() && s.isEven() || (r.addTo(this, r),
                        s.subTo(t, s)),
                        r.rShiftTo(1, r)) : s.isEven() || s.subTo(t, s),
                        s.rShiftTo(1, s);
                    while (i.isEven())
                        i.rShiftTo(1, i),
                        e ? (a.isEven() && c.isEven() || (a.addTo(this, a),
                        c.subTo(t, c)),
                        a.rShiftTo(1, a)) : c.isEven() || c.subTo(t, c),
                        c.rShiftTo(1, c);
                    n.compareTo(i) >= 0 ? (n.subTo(i, n),
                    e && r.subTo(a, r),
                    s.subTo(c, s)) : (i.subTo(n, i),
                    e && a.subTo(r, a),
                    c.subTo(s, c))
                }
                return 0 != i.compareTo(o.ONE) ? o.ZERO : c.compareTo(t) >= 0 ? c.subtract(t) : c.signum() < 0 ? (c.addTo(t, c),
                c.signum() < 0 ? c.add(t) : c) : c
            }
            j.prototype.convert = P,
            j.prototype.revert = U,
            j.prototype.reduce = M,
            j.prototype.mulTo = q,
            j.prototype.sqrTo = z,
            V.prototype.convert = $,
            V.prototype.revert = K,
            V.prototype.reduce = G,
            V.prototype.mulTo = X,
            V.prototype.sqrTo = W,
            o.prototype.copyTo = v,
            o.prototype.fromInt = b,
            o.prototype.fromString = I,
            o.prototype.clamp = C,
            o.prototype.dlShiftTo = O,
            o.prototype.drShiftTo = E,
            o.prototype.lShiftTo = A,
            o.prototype.rShiftTo = N,
            o.prototype.subTo = R,
            o.prototype.multiplyTo = B,
            o.prototype.squareTo = D,
            o.prototype.divRemTo = L,
            o.prototype.invDigit = H,
            o.prototype.isEven = Y,
            o.prototype.exp = Q,
            o.prototype.toString = x,
            o.prototype.negate = w,
            o.prototype.abs = _,
            o.prototype.compareTo = S,
            o.prototype.bitLength = T,
            o.prototype.mod = F,
            o.prototype.modPowInt = Z,
            o.ZERO = y(0),
            o.ONE = y(1),
            Ht.prototype.convert = Vt,
            Ht.prototype.revert = Vt,
            Ht.prototype.mulTo = $t,
            Ht.prototype.sqrTo = Kt,
            Yt.prototype.convert = Qt,
            Yt.prototype.revert = Zt,
            Yt.prototype.reduce = Jt,
            Yt.prototype.mulTo = ee,
            Yt.prototype.sqrTo = te;
            var se, ae, ce, le = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607, 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701, 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811, 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911, 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997], ue = (1 << 26) / le[le.length - 1];
            function de(t) {
                var e, n = this.abs();
                if (1 == n.t && n[0] <= le[le.length - 1]) {
                    for (e = 0; e < le.length; ++e)
                        if (n[0] == le[e])
                            return !0;
                    return !1
                }
                if (n.isEven())
                    return !1;
                e = 1;
                while (e < le.length) {
                    var i = le[e]
                      , o = e + 1;
                    while (o < le.length && i < ue)
                        i *= le[o++];
                    i = n.modInt(i);
                    while (e < o)
                        if (i % le[e++] == 0)
                            return !1
                }
                return n.millerRabin(t)
            }
            function pe(t) {
                var e = this.subtract(o.ONE)
                  , n = e.getLowestSetBit();
                if (n <= 0)
                    return !1;
                var i = e.shiftRight(n);
                t = t + 1 >> 1,
                t > le.length && (t = le.length);
                for (var s = r(), a = 0; a < t; ++a) {
                    s.fromInt(le[Math.floor(Math.random() * le.length)]);
                    var c = s.modPow(i, this);
                    if (0 != c.compareTo(o.ONE) && 0 != c.compareTo(e)) {
                        var l = 1;
                        while (l++ < n && 0 != c.compareTo(e))
                            if (c = c.modPowInt(2, this),
                            0 == c.compareTo(o.ONE))
                                return !1;
                        if (0 != c.compareTo(e))
                            return !1
                    }
                }
                return !0
            }
            function fe(t) {
                ae[ce++] ^= 255 & t,
                ae[ce++] ^= t >> 8 & 255,
                ae[ce++] ^= t >> 16 & 255,
                ae[ce++] ^= t >> 24 & 255,
                ce >= Se && (ce -= Se)
            }
            function he() {
                fe((new Date).getTime())
            }
            if (o.prototype.chunkSize = it,
            o.prototype.toRadix = rt,
            o.prototype.fromRadix = st,
            o.prototype.fromNumber = at,
            o.prototype.bitwiseTo = pt,
            o.prototype.changeBit = Et,
            o.prototype.addTo = Bt,
            o.prototype.dMultiply = qt,
            o.prototype.dAddOffset = zt,
            o.prototype.multiplyLowerTo = Wt,
            o.prototype.multiplyUpperTo = Xt,
            o.prototype.modInt = oe,
            o.prototype.millerRabin = pe,
            o.prototype.clone = J,
            o.prototype.intValue = tt,
            o.prototype.byteValue = et,
            o.prototype.shortValue = nt,
            o.prototype.signum = ot,
            o.prototype.toByteArray = ct,
            o.prototype.equals = lt,
            o.prototype.min = ut,
            o.prototype.max = dt,
            o.prototype.and = ht,
            o.prototype.or = gt,
            o.prototype.xor = bt,
            o.prototype.andNot = It,
            o.prototype.not = Ct,
            o.prototype.shiftLeft = xt,
            o.prototype.shiftRight = wt,
            o.prototype.getLowestSetBit = St,
            o.prototype.bitCount = Tt,
            o.prototype.testBit = Ot,
            o.prototype.setBit = At,
            o.prototype.clearBit = Nt,
            o.prototype.flipBit = Rt,
            o.prototype.add = Dt,
            o.prototype.subtract = Lt,
            o.prototype.multiply = Ft,
            o.prototype.divide = Pt,
            o.prototype.remainder = Ut,
            o.prototype.divideAndRemainder = Mt,
            o.prototype.modPow = ne,
            o.prototype.modInverse = re,
            o.prototype.pow = Gt,
            o.prototype.gcd = ie,
            o.prototype.isProbablePrime = de,
            o.prototype.square = jt,
            o.prototype.Barrett = Yt,
            null == ae) {
                var me;
                if (ae = new Array,
                ce = 0,
                "undefined" !== typeof window && window.crypto)
                    if (window.crypto.getRandomValues) {
                        var ge = new Uint8Array(32);
                        for (window.crypto.getRandomValues(ge),
                        me = 0; me < 32; ++me)
                            ae[ce++] = ge[me]
                    } else if ("Netscape" == navigator.appName && navigator.appVersion < "5") {
                        var ve = window.crypto.random(32);
                        for (me = 0; me < ve.length; ++me)
                            ae[ce++] = 255 & ve.charCodeAt(me)
                    }
                while (ce < Se)
                    me = Math.floor(65536 * Math.random()),
                    ae[ce++] = me >>> 8,
                    ae[ce++] = 255 & me;
                ce = 0,
                he()
            }
            function be() {
                if (null == se) {
                    for (he(),
                    se = _e(),
                    se.init(ae),
                    ce = 0; ce < ae.length; ++ce)
                        ae[ce] = 0;
                    ce = 0
                }
                return se.next()
            }
            function ye(t) {
                var e;
                for (e = 0; e < t.length; ++e)
                    t[e] = be()
            }
            function Ie() {}
            function Ce() {
                this.i = 0,
                this.j = 0,
                this.S = new Array
            }
            function xe(t) {
                var e, n, i;
                for (e = 0; e < 256; ++e)
                    this.S[e] = e;
                for (n = 0,
                e = 0; e < 256; ++e)
                    n = n + this.S[e] + t[e % t.length] & 255,
                    i = this.S[e],
                    this.S[e] = this.S[n],
                    this.S[n] = i;
                this.i = 0,
                this.j = 0
            }
            function we() {
                var t;
                return this.i = this.i + 1 & 255,
                this.j = this.j + this.S[this.i] & 255,
                t = this.S[this.i],
                this.S[this.i] = this.S[this.j],
                this.S[this.j] = t,
                this.S[t + this.S[this.i] & 255]
            }
            function _e() {
                return new Ce
            }
            Ie.prototype.nextBytes = ye,
            Ce.prototype.init = xe,
            Ce.prototype.next = we;
            var Se = 256;
            t.exports = {
                default: o,
                BigInteger: o,
                SecureRandom: Ie
            }
        }
        ).call(this)
    },
        f9dd: function(t, e, n) {
        const {BigInteger: i} = n("e0c8");
        function o(t) {
            let e = t.toString(16);
            if ("-" !== e[0])
                e.length % 2 === 1 ? e = "0" + e : e.match(/^[0-7]/) || (e = "00" + e);
            else {
                e = e.substr(1);
                let n = e.length;
                n % 2 === 1 ? n += 1 : e.match(/^[0-7]/) || (n += 2);
                let o = "";
                for (let t = 0; t < n; t++)
                    o += "f";
                o = new i(o,16),
                e = o.xor(t).add(i.ONE),
                e = e.toString(16).replace(/^-/, "")
            }
            return e
        }
        class r {
            constructor() {
                this.tlv = null,
                this.t = "00",
                this.l = "00",
                this.v = ""
            }
            getEncodedHex() {
                return this.tlv || (this.v = this.getValue(),
                this.l = this.getLength(),
                this.tlv = this.t + this.l + this.v),
                this.tlv
            }
            getLength() {
                const t = this.v.length / 2;
                let e = t.toString(16);
                if (e.length % 2 === 1 && (e = "0" + e),
                t < 128)
                    return e;
                {
                    const t = 128 + e.length / 2;
                    return t.toString(16) + e
                }
            }
            getValue() {
                return ""
            }
        }
        class s extends r {
            constructor(t) {
                super(),
                this.t = "02",
                t && (this.v = o(t))
            }
            getValue() {
                return this.v
            }
        }
        class a extends r {
            constructor(t) {
                super(),
                this.t = "30",
                this.asn1Array = t
            }
            getValue() {
                return this.v = this.asn1Array.map(t => t.getEncodedHex()).join(""),
                this.v
            }
        }
        function c(t, e) {
            return +t[e + 2] < 8 ? 1 : 128 & +t.substr(e + 2, 2)
        }
        function l(t, e) {
            const n = c(t, e)
              , o = t.substr(e + 2, 2 * n);
            if (!o)
                return -1;
            const r = +o[0] < 8 ? new i(o,16) : new i(o.substr(2),16);
            return r.intValue()
        }
        function u(t, e) {
            const n = c(t, e);
            return e + 2 * (n + 1)
        }
        t.exports = {
            encodeDer(t, e) {
                const n = new s(t)
                  , i = new s(e)
                  , o = new a([n, i]);
                return o.getEncodedHex()
            },
            decodeDer(t) {
                const e = u(t, 0)
                  , n = u(t, e)
                  , o = l(t, e)
                  , r = t.substr(n, 2 * o)
                  , s = n + r.length
                  , a = u(t, s)
                  , c = l(t, s)
                  , d = t.substr(a, 2 * c)
                  , p = new i(r,16)
                  , f = new i(d,16);
                return {
                    r: p,
                    s: f
                }
            }
        }
    },
        dffd: function(t, e, n) {
        const {BigInteger: i, SecureRandom: o} = n("e0c8")
          , {ECCurveFp: r} = n("4701")
          , s = new o
          , {curve: a, G: c, n: l} = d();
        function u() {
            return a
        }
        function d() {
            const t = new i("FFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFF",16)
              , e = new i("FFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFC",16)
              , n = new i("28E9FA9E9D9F5E344D5A9E4BCF6509A7F39789F515AB8F92DDBCBD414D940E93",16)
              , o = new r(t,e,n)
              , s = "32C4AE2C1F1981195F9904466A39C9948FE30BBFF2660BE1715A4589334C74C7"
              , a = "BC3736A2F4F6779C59BDCEE36B692153D0A9877CC62A474002DF32E52139F0A0"
              , c = o.decodePointHex("04" + s + a)
              , l = new i("FFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFF7203DF6B21C6052B53BBF40939D54123",16);
            return {
                curve: o,
                G: c,
                n: l
            }
        }
        function p(t, e, n) {
            const o = t ? new i(t,e,n) : new i(l.bitLength(),s)
              , r = o.mod(l.subtract(i.ONE)).add(i.ONE)
              , a = m(r.toString(16), 64)
              , u = c.multiply(r)
              , d = m(u.getX().toBigInteger().toString(16), 64)
              , p = m(u.getY().toBigInteger().toString(16), 64)
              , f = "04" + d + p;
            return {
                privateKey: a,
                publicKey: f
            }
        }
        function f(t) {
            if (130 !== t.length)
                throw new Error("Invalid public key to compress");
            const e = (t.length - 2) / 2
              , n = t.substr(2, e)
              , o = new i(t.substr(e + 2, e),16);
            let r = "03";
            return o.mod(new i("2")).equals(i.ZERO) && (r = "02"),
            r + n
        }
        function h(t) {
            t = unescape(encodeURIComponent(t));
            const e = t.length
              , n = [];
            for (let o = 0; o < e; o++)
                n[o >>> 2] |= (255 & t.charCodeAt(o)) << 24 - o % 4 * 8;
            const i = [];
            for (let o = 0; o < e; o++) {
                const t = n[o >>> 2] >>> 24 - o % 4 * 8 & 255;
                i.push((t >>> 4).toString(16)),
                i.push((15 & t).toString(16))
            }
            return i.join("")
        }
        function m(t, e) {
            return t.length >= e ? t : new Array(e - t.length + 1).join("0") + t
        }
        function g(t) {
            return t.map(t => (t = t.toString(16),
            1 === t.length ? "0" + t : t)).join("")
        }
        function v(t) {
            const e = [];
            let n = 0;
            for (let o = 0; o < 2 * t.length; o += 2)
                e[o >>> 3] |= parseInt(t[n], 10) << 24 - o % 8 * 4,
                n++;
            try {
                const n = [];
                for (let i = 0; i < t.length; i++) {
                    const t = e[i >>> 2] >>> 24 - i % 4 * 8 & 255;
                    n.push(String.fromCharCode(t))
                }
                return decodeURIComponent(escape(n.join("")))
            } catch (i) {
                throw new Error("Malformed UTF-8 data")
            }
        }
        function b(t) {
            const e = [];
            let n = t.length;
            n % 2 !== 0 && (t = m(t, n + 1)),
            n = t.length;
            for (let i = 0; i < n; i += 2)
                e.push(parseInt(t.substr(i, 2), 16));
            return e
        }
        function y(t) {
            const e = a.decodePointHex(t);
            if (!e)
                return !1;
            const n = e.getX()
              , i = e.getY();
            return i.square().equals(n.multiply(n.square()).add(n.multiply(a.a)).add(a.b))
        }
        function I(t, e) {
            const n = a.decodePointHex(t);
            if (!n)
                return !1;
            const i = a.decodePointHex(e);
            return !!i && n.equals(i)
        }
        t.exports = {
            getGlobalCurve: u,
            generateEcparam: d,
            generateKeyPairHex: p,
            compressPublicKeyHex: f,
            utf8ToHex: h,
            leftPad: m,
            arrayToHex: g,
            arrayToUtf8: v,
            hexToArray: b,
            verifyPublicKey: y,
            comparePublicKeyHex: I
        }
    },
        4701: function(t, e, n) {
        const {BigInteger: i} = n("e0c8")
          , o = new i("2")
          , r = new i("3");
        class s {
            constructor(t, e) {
                this.x = e,
                this.q = t
            }
            equals(t) {
                return t === this || this.q.equals(t.q) && this.x.equals(t.x)
            }
            toBigInteger() {
                return this.x
            }
            negate() {
                return new s(this.q,this.x.negate().mod(this.q))
            }
            add(t) {
                return new s(this.q,this.x.add(t.toBigInteger()).mod(this.q))
            }
            subtract(t) {
                return new s(this.q,this.x.subtract(t.toBigInteger()).mod(this.q))
            }
            multiply(t) {
                return new s(this.q,this.x.multiply(t.toBigInteger()).mod(this.q))
            }
            divide(t) {
                return new s(this.q,this.x.multiply(t.toBigInteger().modInverse(this.q)).mod(this.q))
            }
            square() {
                return new s(this.q,this.x.square().mod(this.q))
            }
        }
        class a {
            constructor(t, e, n, o) {
                this.curve = t,
                this.x = e,
                this.y = n,
                this.z = null == o ? i.ONE : o,
                this.zinv = null
            }
            getX() {
                return null === this.zinv && (this.zinv = this.z.modInverse(this.curve.q)),
                this.curve.fromBigInteger(this.x.toBigInteger().multiply(this.zinv).mod(this.curve.q))
            }
            getY() {
                return null === this.zinv && (this.zinv = this.z.modInverse(this.curve.q)),
                this.curve.fromBigInteger(this.y.toBigInteger().multiply(this.zinv).mod(this.curve.q))
            }
            equals(t) {
                if (t === this)
                    return !0;
                if (this.isInfinity())
                    return t.isInfinity();
                if (t.isInfinity())
                    return this.isInfinity();
                const e = t.y.toBigInteger().multiply(this.z).subtract(this.y.toBigInteger().multiply(t.z)).mod(this.curve.q);
                if (!e.equals(i.ZERO))
                    return !1;
                const n = t.x.toBigInteger().multiply(this.z).subtract(this.x.toBigInteger().multiply(t.z)).mod(this.curve.q);
                return n.equals(i.ZERO)
            }
            isInfinity() {
                return null === this.x && null === this.y || this.z.equals(i.ZERO) && !this.y.toBigInteger().equals(i.ZERO)
            }
            negate() {
                return new a(this.curve,this.x,this.y.negate(),this.z)
            }
            add(t) {
                if (this.isInfinity())
                    return t;
                if (t.isInfinity())
                    return this;
                const e = this.x.toBigInteger()
                  , n = this.y.toBigInteger()
                  , o = this.z
                  , r = t.x.toBigInteger()
                  , s = t.y.toBigInteger()
                  , c = t.z
                  , l = this.curve.q
                  , u = e.multiply(c).mod(l)
                  , d = r.multiply(o).mod(l)
                  , p = u.subtract(d)
                  , f = n.multiply(c).mod(l)
                  , h = s.multiply(o).mod(l)
                  , m = f.subtract(h);
                if (i.ZERO.equals(p))
                    return i.ZERO.equals(m) ? this.twice() : this.curve.infinity;
                const g = u.add(d)
                  , v = o.multiply(c).mod(l)
                  , b = p.square().mod(l)
                  , y = p.multiply(b).mod(l)
                  , I = v.multiply(m.square()).subtract(g.multiply(b)).mod(l)
                  , C = p.multiply(I).mod(l)
                  , x = m.multiply(b.multiply(u).subtract(I)).subtract(f.multiply(y)).mod(l)
                  , w = y.multiply(v).mod(l);
                return new a(this.curve,this.curve.fromBigInteger(C),this.curve.fromBigInteger(x),w)
            }
            twice() {
                if (this.isInfinity())
                    return this;
                if (!this.y.toBigInteger().signum())
                    return this.curve.infinity;
                const t = this.x.toBigInteger()
                  , e = this.y.toBigInteger()
                  , n = this.z
                  , i = this.curve.q
                  , o = this.curve.a.toBigInteger()
                  , s = t.square().multiply(r).add(o.multiply(n.square())).mod(i)
                  , c = e.shiftLeft(1).multiply(n).mod(i)
                  , l = e.square().mod(i)
                  , u = l.multiply(t).multiply(n).mod(i)
                  , d = c.square().mod(i)
                  , p = s.square().subtract(u.shiftLeft(3)).mod(i)
                  , f = c.multiply(p).mod(i)
                  , h = s.multiply(u.shiftLeft(2).subtract(p)).subtract(d.shiftLeft(1).multiply(l)).mod(i)
                  , m = c.multiply(d).mod(i);
                return new a(this.curve,this.curve.fromBigInteger(f),this.curve.fromBigInteger(h),m)
            }
            multiply(t) {
                if (this.isInfinity())
                    return this;
                if (!t.signum())
                    return this.curve.infinity;
                const e = t.multiply(r)
                  , n = this.negate();
                let i = this;
                for (let o = e.bitLength() - 2; o > 0; o--) {
                    i = i.twice();
                    const r = e.testBit(o)
                      , s = t.testBit(o);
                    r !== s && (i = i.add(r ? this : n))
                }
                return i
            }
        }
        class c {
            constructor(t, e, n) {
                this.q = t,
                this.a = this.fromBigInteger(e),
                this.b = this.fromBigInteger(n),
                this.infinity = new a(this,null,null)
            }
            equals(t) {
                return t === this || this.q.equals(t.q) && this.a.equals(t.a) && this.b.equals(t.b)
            }
            fromBigInteger(t) {
                return new s(this.q,t)
            }
            decodePointHex(t) {
                switch (parseInt(t.substr(0, 2), 16)) {
                case 0:
                    return this.infinity;
                case 2:
                case 3:
                    const e = this.fromBigInteger(new i(t.substr(2),16));
                    let n = this.fromBigInteger(e.multiply(e.square()).add(e.multiply(this.a)).add(this.b).toBigInteger().modPow(this.q.divide(new i("4")).add(i.ONE), this.q));
                    return n.toBigInteger().mod(o).equals(new i(t.substr(0, 2),16).subtract(o)) || (n = n.negate()),
                    new a(this,e,n);
                case 4:
                case 6:
                case 7:
                    const r = (t.length - 2) / 2
                      , s = t.substr(2, r)
                      , c = t.substr(r + 2, r);
                    return new a(this,this.fromBigInteger(new i(s,16)),this.fromBigInteger(new i(c,16)));
                default:
                    return null
                }
            }
        }
        t.exports = {
            ECPointFp: a,
            ECCurveFp: c
        }
    },
        "41d0": function(t, e) {
        const n = new Uint32Array(68)
          , i = new Uint32Array(64);
        function o(t, e) {
            const n = 31 & e;
            return t << n | t >>> 32 - n
        }
        function r(t, e) {
            const n = [];
            for (let i = t.length - 1; i >= 0; i--)
                n[i] = 255 & (t[i] ^ e[i]);
            return n
        }
        function s(t) {
            return t ^ o(t, 9) ^ o(t, 17)
        }
        function a(t) {
            return t ^ o(t, 15) ^ o(t, 23)
        }
        function c(t) {
            let e = 8 * t.length
              , r = e % 512;
            r = r >= 448 ? 512 - r % 448 - 1 : 448 - r - 1;
            const c = new Array((r - 7) / 8)
              , l = new Array(8);
            for (let n = 0, i = c.length; n < i; n++)
                c[n] = 0;
            for (let n = 0, i = l.length; n < i; n++)
                l[n] = 0;
            e = e.toString(2);
            for (let n = 7; n >= 0; n--)
                if (e.length > 8) {
                    const t = e.length - 8;
                    l[n] = parseInt(e.substr(t), 2),
                    e = e.substr(0, t)
                } else
                    e.length > 0 && (l[n] = parseInt(e, 2),
                    e = "");
            const u = new Uint8Array([...t, 128, ...c, ...l])
              , d = new DataView(u.buffer,0)
              , p = u.length / 64
              , f = new Uint32Array([1937774191, 1226093241, 388252375, 3666478592, 2842636476, 372324522, 3817729613, 2969243214]);
            for (let m = 0; m < p; m++) {
                n.fill(0),
                i.fill(0);
                const t = 16 * m;
                for (let i = 0; i < 16; i++)
                    n[i] = d.getUint32(4 * (t + i), !1);
                for (let i = 16; i < 68; i++)
                    n[i] = a(n[i - 16] ^ n[i - 9] ^ o(n[i - 3], 15)) ^ o(n[i - 13], 7) ^ n[i - 6];
                for (let o = 0; o < 64; o++)
                    i[o] = n[o] ^ n[o + 4];
                const e = 2043430169
                  , r = 2055708042;
                let c, l, u, p, h, g = f[0], v = f[1], b = f[2], y = f[3], I = f[4], C = f[5], x = f[6], w = f[7];
                for (let a = 0; a < 64; a++)
                    h = a >= 0 && a <= 15 ? e : r,
                    c = o(o(g, 12) + I + o(h, a), 7),
                    l = c ^ o(g, 12),
                    u = (a >= 0 && a <= 15 ? g ^ v ^ b : g & v | g & b | v & b) + y + l + i[a],
                    p = (a >= 0 && a <= 15 ? I ^ C ^ x : I & C | ~I & x) + w + c + n[a],
                    y = b,
                    b = o(v, 9),
                    v = g,
                    g = u,
                    w = x,
                    x = o(C, 19),
                    C = I,
                    I = s(p);
                f[0] ^= g,
                f[1] ^= v,
                f[2] ^= b,
                f[3] ^= y,
                f[4] ^= I,
                f[5] ^= C,
                f[6] ^= x,
                f[7] ^= w
            }
            const h = [];
            for (let n = 0, i = f.length; n < i; n++) {
                const t = f[n];
                h.push((4278190080 & t) >>> 24, (16711680 & t) >>> 16, (65280 & t) >>> 8, 255 & t)
            }
            return h
        }
        const l = 64
          , u = new Uint8Array(l)
          , d = new Uint8Array(l);
        for (let f = 0; f < l; f++)
            u[f] = 54,
            d[f] = 92;
        function p(t, e) {
            e.length > l && (e = c(e));
            while (e.length < l)
                e.push(0);
            const n = r(e, u)
              , i = r(e, d)
              , o = c([...n, ...t]);
            return c([...i, ...o])
        }
        t.exports = {
            sm3: c,
            hmac: p
        }
    },
        "72fa": function(t, e, n) {
        const {sm3: i, hmac: o} = n("41d0");
        function r(t, e) {
            return t.length >= e ? t : new Array(e - t.length + 1).join("0") + t
        }
        function s(t) {
            return t.map(t => (t = t.toString(16),
            1 === t.length ? "0" + t : t)).join("")
        }
        function a(t) {
            const e = [];
            let n = t.length;
            n % 2 !== 0 && (t = r(t, n + 1)),
            n = t.length;
            for (let i = 0; i < n; i += 2)
                e.push(parseInt(t.substr(i, 2), 16));
            return e
        }
        function c(t) {
            const e = [];
            for (let n = 0, i = t.length; n < i; n++) {
                const i = t.codePointAt(n);
                if (i <= 127)
                    e.push(i);
                else if (i <= 2047)
                    e.push(192 | i >>> 6),
                    e.push(128 | 63 & i);
                else if (i <= 55295 || i >= 57344 && i <= 65535)
                    e.push(224 | i >>> 12),
                    e.push(128 | i >>> 6 & 63),
                    e.push(128 | 63 & i);
                else {
                    if (!(i >= 65536 && i <= 1114111))
                        throw e.push(i),
                        new Error("input is not supported");
                    n++,
                    e.push(240 | i >>> 18 & 28),
                    e.push(128 | i >>> 12 & 63),
                    e.push(128 | i >>> 6 & 63),
                    e.push(128 | 63 & i)
                }
            }
            return e
        }
        t.exports = function(t, e) {
            if (t = "string" === typeof t ? c(t) : Array.prototype.slice.call(t),
            e) {
                const n = e.mode || "hmac";
                if ("hmac" !== n)
                    throw new Error("invalid mode");
                let i = e.key;
                if (!i)
                    throw new Error("invalid key");
                return i = "string" === typeof i ? a(i) : Array.prototype.slice.call(i),
                s(o(t, i))
            }
            return s(i(t))
        }
    },
        "10d11": function(t, e) {
        const n = 0
          , i = 32
          , o = 16
          , r = [214, 144, 233, 254, 204, 225, 61, 183, 22, 182, 20, 194, 40, 251, 44, 5, 43, 103, 154, 118, 42, 190, 4, 195, 170, 68, 19, 38, 73, 134, 6, 153, 156, 66, 80, 244, 145, 239, 152, 122, 51, 84, 11, 67, 237, 207, 172, 98, 228, 179, 28, 169, 201, 8, 232, 149, 128, 223, 148, 250, 117, 143, 63, 166, 71, 7, 167, 252, 243, 115, 23, 186, 131, 89, 60, 25, 230, 133, 79, 168, 104, 107, 129, 178, 113, 100, 218, 139, 248, 235, 15, 75, 112, 86, 157, 53, 30, 36, 14, 94, 99, 88, 209, 162, 37, 34, 124, 59, 1, 33, 120, 135, 212, 0, 70, 87, 159, 211, 39, 82, 76, 54, 2, 231, 160, 196, 200, 158, 234, 191, 138, 210, 64, 199, 56, 181, 163, 247, 242, 206, 249, 97, 21, 161, 224, 174, 93, 164, 155, 52, 26, 85, 173, 147, 50, 48, 245, 140, 177, 227, 29, 246, 226, 46, 130, 102, 202, 96, 192, 41, 35, 171, 13, 83, 78, 111, 213, 219, 55, 69, 222, 253, 142, 47, 3, 255, 106, 114, 109, 108, 91, 81, 141, 27, 175, 146, 187, 221, 188, 127, 17, 217, 92, 65, 31, 16, 90, 216, 10, 193, 49, 136, 165, 205, 123, 189, 45, 116, 208, 18, 184, 229, 180, 176, 137, 105, 151, 74, 12, 150, 119, 126, 101, 185, 241, 9, 197, 110, 198, 132, 24, 240, 125, 236, 58, 220, 77, 32, 121, 238, 95, 62, 215, 203, 57, 72]
          , s = [462357, 472066609, 943670861, 1415275113, 1886879365, 2358483617, 2830087869, 3301692121, 3773296373, 4228057617, 404694573, 876298825, 1347903077, 1819507329, 2291111581, 2762715833, 3234320085, 3705924337, 4177462797, 337322537, 808926789, 1280531041, 1752135293, 2223739545, 2695343797, 3166948049, 3638552301, 4110090761, 269950501, 741554753, 1213159005, 1684763257];
        function a(t) {
            const e = [];
            for (let n = 0, i = t.length; n < i; n += 2)
                e.push(parseInt(t.substr(n, 2), 16));
            return e
        }
        function c(t) {
            return t.map(t => (t = t.toString(16),
            1 === t.length ? "0" + t : t)).join("")
        }
        function l(t) {
            const e = [];
            for (let n = 0, i = t.length; n < i; n++) {
                const i = t.codePointAt(n);
                if (i <= 127)
                    e.push(i);
                else if (i <= 2047)
                    e.push(192 | i >>> 6),
                    e.push(128 | 63 & i);
                else if (i <= 55295 || i >= 57344 && i <= 65535)
                    e.push(224 | i >>> 12),
                    e.push(128 | i >>> 6 & 63),
                    e.push(128 | 63 & i);
                else {
                    if (!(i >= 65536 && i <= 1114111))
                        throw e.push(i),
                        new Error("input is not supported");
                    n++,
                    e.push(240 | i >>> 18 & 28),
                    e.push(128 | i >>> 12 & 63),
                    e.push(128 | i >>> 6 & 63),
                    e.push(128 | 63 & i)
                }
            }
            return e
        }
        function u(t) {
            const e = [];
            for (let n = 0, i = t.length; n < i; n++)
                t[n] >= 240 && t[n] <= 247 ? (e.push(String.fromCodePoint(((7 & t[n]) << 18) + ((63 & t[n + 1]) << 12) + ((63 & t[n + 2]) << 6) + (63 & t[n + 3]))),
                n += 3) : t[n] >= 224 && t[n] <= 239 ? (e.push(String.fromCodePoint(((15 & t[n]) << 12) + ((63 & t[n + 1]) << 6) + (63 & t[n + 2]))),
                n += 2) : t[n] >= 192 && t[n] <= 223 ? (e.push(String.fromCodePoint(((31 & t[n]) << 6) + (63 & t[n + 1]))),
                n++) : e.push(String.fromCodePoint(t[n]));
            return e.join("")
        }
        function d(t, e) {
            const n = 31 & e;
            return t << n | t >>> 32 - n
        }
        function p(t) {
            return (255 & r[t >>> 24 & 255]) << 24 | (255 & r[t >>> 16 & 255]) << 16 | (255 & r[t >>> 8 & 255]) << 8 | 255 & r[255 & t]
        }
        function f(t) {
            return t ^ d(t, 2) ^ d(t, 10) ^ d(t, 18) ^ d(t, 24)
        }
        function h(t) {
            return t ^ d(t, 13) ^ d(t, 23)
        }
        function m(t, e, n) {
            const i = new Array(4)
              , o = new Array(4);
            for (let r = 0; r < 4; r++)
                o[0] = 255 & t[4 * r],
                o[1] = 255 & t[4 * r + 1],
                o[2] = 255 & t[4 * r + 2],
                o[3] = 255 & t[4 * r + 3],
                i[r] = o[0] << 24 | o[1] << 16 | o[2] << 8 | o[3];
            for (let r, s = 0; s < 32; s += 4)
                r = i[1] ^ i[2] ^ i[3] ^ n[s + 0],
                i[0] ^= f(p(r)),
                r = i[2] ^ i[3] ^ i[0] ^ n[s + 1],
                i[1] ^= f(p(r)),
                r = i[3] ^ i[0] ^ i[1] ^ n[s + 2],
                i[2] ^= f(p(r)),
                r = i[0] ^ i[1] ^ i[2] ^ n[s + 3],
                i[3] ^= f(p(r));
            for (let r = 0; r < 16; r += 4)
                e[r] = i[3 - r / 4] >>> 24 & 255,
                e[r + 1] = i[3 - r / 4] >>> 16 & 255,
                e[r + 2] = i[3 - r / 4] >>> 8 & 255,
                e[r + 3] = 255 & i[3 - r / 4]
        }
        function g(t, e, i) {
            const o = new Array(4)
              , r = new Array(4);
            for (let n = 0; n < 4; n++)
                r[0] = 255 & t[0 + 4 * n],
                r[1] = 255 & t[1 + 4 * n],
                r[2] = 255 & t[2 + 4 * n],
                r[3] = 255 & t[3 + 4 * n],
                o[n] = r[0] << 24 | r[1] << 16 | r[2] << 8 | r[3];
            o[0] ^= 2746333894,
            o[1] ^= 1453994832,
            o[2] ^= 1736282519,
            o[3] ^= 2993693404;
            for (let n, a = 0; a < 32; a += 4)
                n = o[1] ^ o[2] ^ o[3] ^ s[a + 0],
                e[a + 0] = o[0] ^= h(p(n)),
                n = o[2] ^ o[3] ^ o[0] ^ s[a + 1],
                e[a + 1] = o[1] ^= h(p(n)),
                n = o[3] ^ o[0] ^ o[1] ^ s[a + 2],
                e[a + 2] = o[2] ^= h(p(n)),
                n = o[0] ^ o[1] ^ o[2] ^ s[a + 3],
                e[a + 3] = o[3] ^= h(p(n));
            if (i === n)
                for (let n, s = 0; s < 16; s++)
                    n = e[s],
                    e[s] = e[31 - s],
                    e[31 - s] = n
        }
        function v(t, e, r, {padding: s="pkcs#7", mode: d, iv: p=[], output: f="string"}={}) {
            if ("cbc" === d && ("string" === typeof p && (p = a(p)),
            16 !== p.length))
                throw new Error("iv is invalid");
            if ("string" === typeof e && (e = a(e)),
            16 !== e.length)
                throw new Error("key is invalid");
            if (t = "string" === typeof t ? r !== n ? l(t) : a(t) : [...t],
            ("pkcs#5" === s || "pkcs#7" === s) && r !== n) {
                const e = o - t.length % o;
                for (let n = 0; n < e; n++)
                    t.push(e)
            }
            const h = new Array(i);
            g(e, h, r);
            const v = [];
            let b = p
              , y = t.length
              , I = 0;
            while (y >= o) {
                const e = t.slice(I, I + 16)
                  , i = new Array(16);
                if ("cbc" === d)
                    for (let t = 0; t < o; t++)
                        r !== n && (e[t] ^= b[t]);
                m(e, i, h);
                for (let t = 0; t < o; t++)
                    "cbc" === d && r === n && (i[t] ^= b[t]),
                    v[I + t] = i[t];
                "cbc" === d && (b = r !== n ? i : e),
                y -= o,
                I += o
            }
            if (("pkcs#5" === s || "pkcs#7" === s) && r === n) {
                const t = v.length
                  , e = v[t - 1];
                for (let n = 1; n <= e; n++)
                    if (v[t - n] !== e)
                        throw new Error("padding is invalid");
                v.splice(t - e, e)
            }
            return "array" !== f ? r !== n ? c(v) : u(v) : v
        }
        t.exports = {
            encrypt(t, e, n) {
                return v(t, e, 1, n)
            },
            decrypt(t, e, n) {
                return v(t, e, 0, n)
            }
        }
    },
    }
);

function passwordSMEncryption(t,rsaKey) {
    var e = rsaKey
      , i = SME("8060").sm2
      , o = 1
      , r = i.doEncrypt(t, e, o);
    return "04" + r
}
t='xingming,1731232217124'
rsaKey='0473e88494e7e4d8ff61b02f7e695ae1b16326a00926f2779a14dc75d09e80b33012c0fe072dcf370a63aa5bb054d5a4805e566a3338262ed0b0eb8e2f3bbde46d'
console.log(passwordSMEncryption(t,rsaKey))

免费评分

参与人数 2威望 +1 吾爱币 +11 热心值 +2 收起 理由
Malachite + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
苏紫方璇 + 1 + 10 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

推荐
 楼主| 头脑发热的少年 发表于 2024-11-10 19:20 |楼主
feijun 发表于 2024-11-10 19:03
作用呢?能解放双手?

不然呢,搞它干啥子
推荐
 楼主| 头脑发热的少年 发表于 2024-11-10 19:19 |楼主
风子是我 发表于 2024-11-10 19:16
登录验证码?
2323行的代码不嫌麻烦么?
用ddddocr十几行代码搞定 不香吗?

这是登录参数加密逻辑,没看懂别来装&#129313;,我也是服了
沙发
feijun 发表于 2024-11-10 19:03
3#
风子是我 发表于 2024-11-10 19:16
登录验证码?
2323行的代码不嫌麻烦么?
用ddddocr十几行代码搞定 不香吗?
[Python] 纯文本查看 复制代码
def yanzhema(): #验证码读取
    #证码图片截图保存
    pic = wd.find_element(By.XPATH,'//*[@id="formLogin"]/div[2]/div[2]/div[4]/div/div/span/img')
    pic.screenshot('screenshot.png')
    time.sleep(2)

    #获取验证码
    ocr = ddddocr.DdddOcr()
    with open('screenshot.png', 'rb') as f:
        img_bytes = f.read()
    res = ocr.classification(img_bytes)
    if len(res)==6:
        res=res[-5:]
    return res
6#
dych1688 发表于 2024-11-10 19:24
支持作者,中间加密分析是一个好的学习过程。
7#
wumingyao2006 发表于 2024-11-10 19:37
大佬好强啊
8#
acsecqb 发表于 2024-11-10 19:46
牛逼,学习了!
9#
灵剑丹心 发表于 2024-11-10 20:00
看成了“学宪法讲宪法”(宪法小学生)
10#
Fwind 发表于 2024-11-10 20:12
思路很好,学习了!
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 09:47

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表