当前位置: 首页 > news >正文

爬虫逆向实战小记——解决webpack实记

注意!!!!某XX网站实例仅作为学习案例,禁止其他个人以及团体做谋利用途!!!

aHR0cHM6Ly9wbW9zLnhqLnNnY2MuY29tLmNuOjIwMDgwL3B4Zi1zZXR0bGVtZW50LW91dG5ldHB1Yi8jL3B4Zi1zZXR0bGVtZW50LW91dG5ldHB1Yi9jb2x1bW5Ib21lTGVmdE1lbnVOZXc=

选择-政策规则

前情提要

 个人习惯遇到webpack的时候,一般都会逆向寻找加密方式,并直接找对应的库进行解密,但是当遇到没有明确的加密方式且webpack类型就抓瞎了,本文算是鄙人第一次扣webpack,有任何描述介绍部分不规范的多多指出

步骤一: 分析

① 请求网址,查看参数,初步判断加密方式。这个网址直接表明使用sm2sm4(加密方式仅针对当前请求的网址),还有一个publicKey,看似与RSA可能有关系,暂时按下不表。

步骤二: 解决问题

①先找到请求断点处。通过XHR 提取断点

②查看堆栈可以找到queryData处有个getData,我个人认为这里值得一个断点(dddd, 不做赘述,全凭感觉),将此处添加断点。去掉XHR中的勾选,重新请求

③重新请求后可以看出,Object(k["a"])(a) 是我们请求的参数

Object(k["c"]) 其实调用的r 函数,这时候就很肯定断点没有问题,且参数分别为t n

⑤通过④可以知道,n 需要t 的值作为参数。t的函数下图所示,可以看到t = Object(n["h"])() 

⑥ t 会生成一个128位的值。e则是一个序列化的dict。this.getSm2Key 会生成一个公钥和私钥

⑦跟进this.getSm2Key ,可以看到调用Object(n["d"])() 也就是Ir 函数,跟进Ir 其实调用了sm2中generateKeyPairHex()方法

⑧接下来可以看到i 以及r["sm4"] 生成的值,都是Object(n["字母"]) 这种形式。我们跟着这个n 往上找,看一下n是谁,可以看出var n = r("c99b") 

⑨ 经过上述,我们隐隐感觉到,这是一个webpack。那我们在var n = r("c99b") 打断点,这里断点的作用是找到加载器。

⑩ 果然是典型webpack类型。

⑪ 将上述源码全部复制到本地,同时,在n = r(c99b) 原文中全文在当前的文件里全文搜索 c99b ,可以看到只有4个,那就很容易找打到我们自己需要的

步骤三: 代码展示

window = global;
window.navigator.userAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36 Edg/133.0.0.0";
(function(c) {
    function n(n) {
        for (var e, h, d = n[0], f = n[1], b = n[2], t = 0, r = []; t < d.length; t++)
            h = d[t],
            k[h] && r.push(k[h][0]),
            k[h] = 0;
        for (e in f)
            Object.prototype.hasOwnProperty.call(f, e) && (c[e] = f[e]);
        o && o(n);
        while (r.length)
            r.shift()();
        return a.push.apply(a, b || []),
        u()
    }
    function u() {
        for (var c, n = 0; n < a.length; n++) {
            for (var u = a[n], e = !0, h = 1; h < u.length; h++) {
                var d = u[h];
                0 !== k[d] && (e = !1)
            }
            e && (a.splice(n--, 1),
            c = f(f.s = u[0]))
        }
        return c
    }
    var e = {}
      , h = {
        runtime: 0
    }
      , k = {
        runtime: 0
    }
      , a = [];
    function d(c) {
        return f.p + "static/js/" + ({
            "chunk-commons": "chunk-commons"
        }[c] || c) + "." + {
            "chunk-00155f4b": "521c2d41",
            "chunk-f81359d0": "bb65ea0e",
            "chunk-038e78f2": "63e4b520",
            "chunk-0548fa25": "70a81d95",
            "chunk-073daa90": "630a032a",
            "chunk-09163dd7": "748352f6",
            "chunk-0b4570f8": "27ff7a74",
            "chunk-0b500cce": "b0365218",
            "chunk-0bbeb896": "4340a761",
            "chunk-0ca7c584": "f5d69cdc",
            "chunk-133a2b06": "87530288",
            "chunk-171dca47": "daf51bfb",
            "chunk-18cd25b5": "a37f0898",
            "chunk-1dbfb2ca": "ce532e83",
            "chunk-22d38d01": "a15751c3",
            "chunk-24bd6642": "25417b3a",
            "chunk-251ac763": "b409ebd5",
            "chunk-4b109e82": "6645ca60",
            "chunk-2c4fe7ee": "82616207",
            "chunk-f3b28598": "a3447abc",
            "chunk-2d0d385a": "a9fb3497",
            "chunk-54dce028": "2eca8dc5",
            "chunk-7eeef8c6": "bf3fcd56",
            "chunk-2d0d641d": "52173caf",
            "chunk-2d2105d3": "e0d08352",
            "chunk-2d21ead9": "d9cd2bde",
            "chunk-e31a7778": "260a343a",
            "chunk-78a58ce0": "313aee65",
            "chunk-120f25a4": "467947e9",
            "chunk-2d222919": "41ea63f6",
            "chunk-2d230c70": "33926d78",
            "chunk-2d230fe7": "fe56584d",
            "chunk-2d8ba231": "1570b2be",
            "chunk-2f617b25": "2d53c5eb",
            "chunk-545581c4": "a68e6777",
            "chunk-2f90d8f0": "e159136a",
            "chunk-3142d3bc": "9673962a",
            "chunk-31a04132": "6c08a4d6",
            "chunk-37abbf52": "c399424d",
            "chunk-381feb46": "c9073e09",
            "chunk-3aa7734e": "9d550bdc",
            "chunk-3afe39af": "01514d57",
            "chunk-477132e2": "e98a45dc",
            "chunk-4794904a": "112041d2",
            "chunk-9c7039ee": "f6637d7a",
            "chunk-430384fb": "03293819",
            "chunk-4a3d12ba": "3a461911",
            "chunk-f69cf13a": "0e957d10",
            "chunk-4884f80c": "37d68b9d",
            "chunk-4961c0a8": "3cec3769",
            "chunk-4a573df5": "fa302b65",
            "chunk-50e135d2": "3bc6edc4",
            "chunk-50f5e21c": "589b879b",
            "chunk-5410d1b2": "57a03373",
            "chunk-0fcb1caa": "2095d41b",
            "chunk-11ea4519": "bc6b2329",
            "chunk-23f89548": "13b1bd4c",
            "chunk-7066f7a4": "fe75730b",
            "chunk-264ceee0": "0679777a",
            "chunk-2d0cbebe": "fbb7cb11",
            "chunk-726b8536": "4a91a9aa",
            "chunk-1b4a54c2": "8d7fd715",
            "chunk-1fb382d5": "9780b172",
            "chunk-46155390": "eb78a23b",
            "chunk-56244582": "2d7886ed",
            "chunk-b5fa86a8": "3b3a001e",
            "chunk-2d247d82": "18a771a5",
            "chunk-31d4889a": "e2a27120",
            "chunk-48966bf8": "d0ba0dd8",
            "chunk-4ea24402": "0ef4e4cd",
            "chunk-594ba360": "fadfdd5f",
            "chunk-61ff399e": "49c8591e",
            "chunk-652f2b55": "e15b98f5",
            "chunk-654588bb": "0b652dc3",
            "chunk-6a660020": "bf34287a",
            "chunk-6e87ca78": "844e340c",
            "chunk-1c55cc64": "552bea03",
            "chunk-1153a3ae": "1371df58",
            "chunk-675f6070": "2c3385ab",
            "chunk-b2237dc8": "b473af74",
            "chunk-c187c814": "87fc4fb0",
            "chunk-57638791": "433911c7",
            "chunk-71ef2ed8": "82e8e540",
            "chunk-06940b2f": "4077a21c",
            "chunk-fd4bd9e4": "5265e5f5",
            "chunk-2577c36d": "fa2b0c82",
            "chunk-1548bb5e": "b39d8181",
            "chunk-287ae9c7": "6752e48d",
            "chunk-4fd8d347": "c05a0d11",
            "chunk-317d59de": "89bf12a6",
            "chunk-4235d6f1": "4c17e133",
            "chunk-4422d324": "b3686be1",
            "chunk-72d1b198": "298c4120",
            "chunk-ec497ea8": "f9d40449",
            "chunk-1f310d91": "a08f0244",
            "chunk-d3b3a4c0": "0bd051c6",
            "chunk-55fa8644": "454c844d",
            "chunk-9153473e": "087956c3",
            "chunk-5fd680e6": "74c74ae6",
            "chunk-662e0c60": "97b8273b",
            "chunk-62344ab0": "662b7a7d",
            "chunk-81bf9dcc": "cad271db",
            "chunk-bdcedaca": "9e74a753",
            "chunk-d514d152": "9a9876ed",
            "chunk-f17d0dd2": "39c26144",
            "chunk-77ec7d56": "0ae78e2a",
            "chunk-8c85fabc": "acb6509c",
            "chunk-8f383ba4": "59bda1fe",
            "chunk-a1aa28a4": "8bf4b8d3",
            "chunk-ed1821d6": "be36ea4f",
            "chunk-0a5b7b24": "7c5d9f09",
            "chunk-f13d06fc": "3aafa1d8",
            "chunk-56a54792": "9056c1a9",
            "chunk-58157c1c": "e4841ae1",
            "chunk-585cd5cc": "653519f5",
            "chunk-5a3ea4f3": "cd78b1a6",
            "chunk-63740e52": "1264a08d",
            "chunk-c9ad6fbc": "f9c9214d",
            "chunk-6ce0bad4": "0ce762d1",
            "chunk-2159e022": "eb158640",
            "chunk-71259396": "f093faf8",
            "chunk-719b43aa": "441e9684",
            "chunk-724a9633": "4f95062d",
            "chunk-039fe120": "6108d82e",
            "chunk-06175d58": "961167c9",
            "chunk-1f2a4c90": "1014d3cf",
            "chunk-21dfcdbe": "01a3f170",
            "chunk-28180124": "1acf5bf4",
            "chunk-2d2101ff": "070960e7",
            "chunk-4659744c": "b60948d0",
            "chunk-3d269f11": "714384d7",
            "chunk-3093f414": "123a07e7",
            "chunk-50b00630": "2d18511f",
            "chunk-77eacaec": "b6b32ac3",
            "chunk-39ca7086": "f1706600",
            "chunk-9873b59a": "8efc0517",
            "chunk-0a14db2e": "1c8d13b9",
            "chunk-0ed204c4": "17db03a0",
            "chunk-4a11df6c": "c9b0806f",
            "chunk-51edc778": "00f0b102",
            "chunk-5c45f974": "22536a96",
            "chunk-79ba38e3": "94b996d3",
            "chunk-f452313e": "55e3c433",
            "chunk-fc9a2a9e": "02575c74",
            "chunk-9d34eedc": "87a9226b",
            "chunk-b900ad98": "b7ebb247",
            "chunk-c8fddb6a": "47fb0a2c",
            "chunk-72abef28": "be3a151d",
            "chunk-6331f36e": "ef934774",
            "chunk-736d3dbc": "03eb7c15",
            "chunk-75bb6ef8": "28e41203",
            "chunk-7658eaca": "4202b131",
            "chunk-788cd71c": "b3646b24",
            "chunk-797eb7e4": "70212cdd",
            "chunk-7be33868": "e4772951",
            "chunk-7cdf79bc": "c8273376",
            "chunk-8116ecf6": "36884630",
            "chunk-89824c98": "9800389c",
            "chunk-95200f10": "2167d6f1",
            "chunk-a9051134": "70b8e09a",
            "chunk-ac459d52": "2c62611f",
            "chunk-b1c4a05a": "9272fa9b",
            "chunk-b3942c98": "1acf802d",
            "chunk-0d4c55a4": "0d54c993",
            "chunk-7c5fed2f": "4dd0e751",
            "chunk-bb42af12": "985640f6",
            "chunk-c7722330": "643167e7",
            "chunk-commons": "3a892a3a",
            "chunk-0441ac18": "377422d0",
            "chunk-95279b24": "4d51ed8d",
            "chunk-d6f3491c": "c243bf16",
            "chunk-d711add8": "5ed4abab",
            "chunk-dab226c4": "1a4de2b9",
            "chunk-e10f4fba": "6cce7619",
            "chunk-0d15f7df": "219df71b",
            "chunk-0ff1ff25": "6e5d596e",
            "chunk-74eeaf86": "db02d25f",
            "chunk-66043168": "752947a8",
            "chunk-72b72a35": "e38dfb17",
            "chunk-e9f73c82": "4db7cee9",
            "chunk-ef94f9e4": "34b885cb",
            "chunk-2d0aa5b8": "7a6792ef",
            "chunk-2bf9ff98": "0cb59caa",
            "chunk-3aebcc64": "38df6f56",
            "chunk-682ab6fa": "341236d6",
            "chunk-4aa0d228": "4a1d0934",
            "chunk-a64e0e52": "9fcef0dd",
            "chunk-18941db8": "008b7ab2",
            "chunk-30ffb292": "be6674d6",
            "chunk-12020c2c": "44d073f0",
            "chunk-1d40e4dd": "eb0013e9",
            "chunk-323c09d9": "7b680b12",
            "chunk-93b86d00": "4212f4ce",
            "chunk-945749a6": "d261e7ce",
            "chunk-f123646c": "7d121b65",
            "chunk-f31dd558": "848b5cdb",
            "chunk-f4f2ad3c": "4d3fc675",
            "chunk-72a81207": "34811335",
            "chunk-f57e2d4e": "9d10a08c",
            "chunk-fa236cae": "c37c8916",
            "chunk-672f23a7": "340eec8a",
            "chunk-13307a08": "213816e7",
            "chunk-03236f46": "e7015708",
            "chunk-65f4e680": "e9009344",
            "chunk-a90b5ec2": "054f1874",
            "chunk-58ca30db": "a1df23cd",
            "chunk-17ac497c": "d1f9eac5",
            "chunk-2d0b9654": "daeabca5",
            "chunk-2d2082c5": "91d6f87c",
            "chunk-2d22cce3": "2c36fe12",
            "chunk-43f4b4c2": "6ad69cf0",
            "chunk-5e12deb6": "24c2c451",
            "chunk-8c99df8a": "854fcbb6",
            "chunk-2d0c8293": "64a1fd70",
            "chunk-16bf884b": "91a3e6bb",
            "chunk-205588da": "afd28f14",
            "chunk-290573df": "b1034dae",
            "chunk-2d0bdda3": "f48a09fa",
            "chunk-367520b4": "891ecb2e",
            "chunk-3a5fd6b2": "e327bcff",
            "chunk-574d5906": "efdef4ac",
            "chunk-5b7f64e0": "aa28cac3",
            "chunk-7a587c4b": "5540c7c8",
            "chunk-9a76cd96": "d1a07944",
            "chunk-af945410": "9244bb34",
            "chunk-2d0c8dc6": "f8058a18",
            "chunk-40383e0d": "879f72b2",
            "chunk-5de8bd5b": "bb3a2e65",
            "chunk-0a492a9e": "cd209a2b",
            "chunk-271d5781": "d22f30cc",
            "chunk-373aa27e": "eb03abd2",
            "chunk-5bef02ba": "76bfbc5f",
            "chunk-40bf2235": "20e9054c",
            "chunk-72120114": "43e7852f",
            "chunk-7574e53d": "547eaca3",
            "chunk-8216af38": "d9daefd1",
            "chunk-bd9a13f4": "9436313c",
            "chunk-c5b153bc": "13c05eb0",
            "chunk-2d0e268a": "17ca379b",
            "chunk-c650ad2c": "34f83a31",
            "chunk-de7ba61a": "f87708b7",
            "chunk-ea6b50d4": "a03247b4",
            "chunk-f147a8c6": "c38e7795",
            "chunk-f78ebe08": "50b5c2d9",
            "chunk-0e3918da": "b2edfb17",
            "chunk-0f22b2bb": "538025c3",
            "chunk-17c1c66f": "68ae6a6a",
            "chunk-21d5d6a8": "e01e94e0",
            "chunk-3676ddf3": "f8498134",
            "chunk-3fdd08f9": "a55bf887",
            "chunk-4bc12aa0": "e48a4900",
            "chunk-51279394": "09e7d96a",
            "chunk-60ffa822": "95bb23d8",
            "chunk-71c7afb2": "4c7b18b0",
            "chunk-74ef81b5": "9d92d987",
            "chunk-8302281e": "a3952997",
            "chunk-afecc83c": "fdba638a",
            "chunk-cbbb17ba": "c4534fc5",
            "chunk-60080330": "bc98a611",
            "chunk-2095e530": "9aba1ad2",
            "chunk-2d0d3836": "7aa9f53a",
            "chunk-37e71e41": "161e04c3",
            "chunk-3a86a2e4": "d57044a4",
            "chunk-2d0f042f": "bb2f9c4b",
            "chunk-0faebb97": "64434133",
            "chunk-cd990dce": "cc30675b",
            "chunk-235daef3": "209addfe",
            "chunk-30b3a146": "1a824f9f",
            "chunk-9ca2f668": "925cbd3b",
            "chunk-7f0ea486": "4fa979d2",
            "chunk-2d0d3648": "86cec291",
            "chunk-d91c071a": "d3c433d9",
            "chunk-6b5b0490": "55e62227",
            "chunk-34243c32": "160e744b",
            "chunk-66d8764a": "184e3529",
            "chunk-7e58d3ae": "da81c9d5",
            "chunk-f759893a": "3f87f562",
            "chunk-60ff175e": "f4f2599c",
            "chunk-682a93d8": "c520e8d5",
            "chunk-715531ab": "73b53a8a",
            "chunk-2d0db21b": "bc92217f",
            "chunk-78d80fca": "ababc537",
            "chunk-3d705ea0": "042e29e0",
            "chunk-6ea7e65e": "3daa79ca",
            "chunk-0c330e08": "40765b8c",
            "chunk-56ab77f4": "72d28131",
            "chunk-66bc5ec2": "64ddc708",
            "chunk-0a8b10c2": "97fe0702",
            "chunk-0c63bb80": "b3b9a8b1",
            "chunk-11d9dd90": "fc4dbd4a",
            "chunk-14ed0682": "0160f2dd",
            "chunk-17b33bc0": "4c70d9b6",
            "chunk-20e7ee1e": "c5578a22",
            "chunk-212be834": "0edfeb55",
            "chunk-24bbfe3b": "74770d4d",
            "chunk-30e26798": "2aebc738",
            "chunk-47754068": "88133c92",
            "chunk-62468f97": "24e9873e",
            "chunk-6587a5a1": "e2aa045c",
            "chunk-6a66aaa2": "456b64dd",
            "chunk-785f1f55": "34907d63",
            "chunk-7a6cd5d6": "a4f07708",
            "chunk-a854f2cc": "f4ed36f8",
            "chunk-b1f2bf3c": "75cb621e",
            "chunk-caa4d928": "5d1b58f9",
            "chunk-4587ca1a": "e5750042",
            "chunk-04a2bc5c": "bcfa7d99",
            "chunk-2e4d0aa8": "20c7628a",
            "chunk-4d6117d2": "61bf6988",
            "chunk-6760b026": "b19ebcf4",
            "chunk-2d2084bb": "9c77bb77"
        }[c] + ".js"
    }
    function f(n) {
        if (e[n])
            return e[n].exports;
        var u = e[n] = {
            i: n,
            l: !1,
            exports: {}
        };
        return c[n].call(u.exports, u, u.exports, f),
        u.l = !0,
        u.exports
    }
    window.shuibingmeiyue = f;
    f.e = function(c) {
        var n = []
          , u = {
            "chunk-00155f4b": 1,
            "chunk-038e78f2": 1,
            "chunk-0548fa25": 1,
            "chunk-09163dd7": 1,
            "chunk-0b4570f8": 1,
            "chunk-0b500cce": 1,
            "chunk-0bbeb896": 1,
            "chunk-0ca7c584": 1,
            "chunk-171dca47": 1,
            "chunk-18cd25b5": 1,
            "chunk-1dbfb2ca": 1,
            "chunk-22d38d01": 1,
            "chunk-24bd6642": 1,
            "chunk-251ac763": 1,
            "chunk-4b109e82": 1,
            "chunk-f3b28598": 1,
            "chunk-54dce028": 1,
            "chunk-7eeef8c6": 1,
            "chunk-120f25a4": 1,
            "chunk-2d8ba231": 1,
            "chunk-545581c4": 1,
            "chunk-2f90d8f0": 1,
            "chunk-31a04132": 1,
            "chunk-37abbf52": 1,
            "chunk-381feb46": 1,
            "chunk-3aa7734e": 1,
            "chunk-3afe39af": 1,
            "chunk-430384fb": 1,
            "chunk-4a3d12ba": 1,
            "chunk-4884f80c": 1,
            "chunk-4a573df5": 1,
            "chunk-50f5e21c": 1,
            "chunk-0fcb1caa": 1,
            "chunk-11ea4519": 1,
            "chunk-23f89548": 1,
            "chunk-7066f7a4": 1,
            "chunk-264ceee0": 1,
            "chunk-1b4a54c2": 1,
            "chunk-1fb382d5": 1,
            "chunk-46155390": 1,
            "chunk-56244582": 1,
            "chunk-b5fa86a8": 1,
            "chunk-2d247d82": 1,
            "chunk-31d4889a": 1,
            "chunk-48966bf8": 1,
            "chunk-4ea24402": 1,
            "chunk-594ba360": 1,
            "chunk-61ff399e": 1,
            "chunk-652f2b55": 1,
            "chunk-654588bb": 1,
            "chunk-6a660020": 1,
            "chunk-1c55cc64": 1,
            "chunk-1153a3ae": 1,
            "chunk-675f6070": 1,
            "chunk-b2237dc8": 1,
            "chunk-57638791": 1,
            "chunk-71ef2ed8": 1,
            "chunk-06940b2f": 1,
            "chunk-fd4bd9e4": 1,
            "chunk-2577c36d": 1,
            "chunk-1548bb5e": 1,
            "chunk-287ae9c7": 1,
            "chunk-4fd8d347": 1,
            "chunk-317d59de": 1,
            "chunk-4235d6f1": 1,
            "chunk-4422d324": 1,
            "chunk-72d1b198": 1,
            "chunk-ec497ea8": 1,
            "chunk-1f310d91": 1,
            "chunk-d3b3a4c0": 1,
            "chunk-55fa8644": 1,
            "chunk-9153473e": 1,
            "chunk-5fd680e6": 1,
            "chunk-662e0c60": 1,
            "chunk-62344ab0": 1,
            "chunk-81bf9dcc": 1,
            "chunk-bdcedaca": 1,
            "chunk-d514d152": 1,
            "chunk-f17d0dd2": 1,
            "chunk-77ec7d56": 1,
            "chunk-8c85fabc": 1,
            "chunk-8f383ba4": 1,
            "chunk-a1aa28a4": 1,
            "chunk-ed1821d6": 1,
            "chunk-0a5b7b24": 1,
            "chunk-f13d06fc": 1,
            "chunk-56a54792": 1,
            "chunk-58157c1c": 1,
            "chunk-5a3ea4f3": 1,
            "chunk-63740e52": 1,
            "chunk-c9ad6fbc": 1,
            "chunk-2159e022": 1,
            "chunk-71259396": 1,
            "chunk-719b43aa": 1,
            "chunk-039fe120": 1,
            "chunk-06175d58": 1,
            "chunk-1f2a4c90": 1,
            "chunk-21dfcdbe": 1,
            "chunk-28180124": 1,
            "chunk-4659744c": 1,
            "chunk-3d269f11": 1,
            "chunk-3093f414": 1,
            "chunk-50b00630": 1,
            "chunk-77eacaec": 1,
            "chunk-9873b59a": 1,
            "chunk-0a14db2e": 1,
            "chunk-0ed204c4": 1,
            "chunk-4a11df6c": 1,
            "chunk-51edc778": 1,
            "chunk-5c45f974": 1,
            "chunk-79ba38e3": 1,
            "chunk-f452313e": 1,
            "chunk-fc9a2a9e": 1,
            "chunk-9d34eedc": 1,
            "chunk-b900ad98": 1,
            "chunk-c8fddb6a": 1,
            "chunk-72abef28": 1,
            "chunk-6331f36e": 1,
            "chunk-736d3dbc": 1,
            "chunk-75bb6ef8": 1,
            "chunk-7658eaca": 1,
            "chunk-788cd71c": 1,
            "chunk-797eb7e4": 1,
            "chunk-7be33868": 1,
            "chunk-7cdf79bc": 1,
            "chunk-8116ecf6": 1,
            "chunk-a9051134": 1,
            "chunk-ac459d52": 1,
            "chunk-7c5fed2f": 1,
            "chunk-bb42af12": 1,
            "chunk-commons": 1,
            "chunk-0441ac18": 1,
            "chunk-95279b24": 1,
            "chunk-d6f3491c": 1,
            "chunk-dab226c4": 1,
            "chunk-0d15f7df": 1,
            "chunk-0ff1ff25": 1,
            "chunk-74eeaf86": 1,
            "chunk-66043168": 1,
            "chunk-72b72a35": 1,
            "chunk-e9f73c82": 1,
            "chunk-ef94f9e4": 1,
            "chunk-2bf9ff98": 1,
            "chunk-3aebcc64": 1,
            "chunk-682ab6fa": 1,
            "chunk-4aa0d228": 1,
            "chunk-a64e0e52": 1,
            "chunk-18941db8": 1,
            "chunk-30ffb292": 1,
            "chunk-12020c2c": 1,
            "chunk-1d40e4dd": 1,
            "chunk-323c09d9": 1,
            "chunk-93b86d00": 1,
            "chunk-945749a6": 1,
            "chunk-f123646c": 1,
            "chunk-f4f2ad3c": 1,
            "chunk-f57e2d4e": 1,
            "chunk-fa236cae": 1,
            "chunk-672f23a7": 1,
            "chunk-13307a08": 1,
            "chunk-65f4e680": 1,
            "chunk-a90b5ec2": 1,
            "chunk-58ca30db": 1,
            "chunk-17ac497c": 1,
            "chunk-43f4b4c2": 1,
            "chunk-8c99df8a": 1,
            "chunk-16bf884b": 1,
            "chunk-205588da": 1,
            "chunk-290573df": 1,
            "chunk-367520b4": 1,
            "chunk-574d5906": 1,
            "chunk-5b7f64e0": 1,
            "chunk-7a587c4b": 1,
            "chunk-9a76cd96": 1,
            "chunk-af945410": 1,
            "chunk-40383e0d": 1,
            "chunk-5de8bd5b": 1,
            "chunk-0a492a9e": 1,
            "chunk-271d5781": 1,
            "chunk-373aa27e": 1,
            "chunk-5bef02ba": 1,
            "chunk-40bf2235": 1,
            "chunk-72120114": 1,
            "chunk-7574e53d": 1,
            "chunk-8216af38": 1,
            "chunk-bd9a13f4": 1,
            "chunk-c5b153bc": 1,
            "chunk-c650ad2c": 1,
            "chunk-de7ba61a": 1,
            "chunk-ea6b50d4": 1,
            "chunk-f147a8c6": 1,
            "chunk-f78ebe08": 1,
            "chunk-0e3918da": 1,
            "chunk-0f22b2bb": 1,
            "chunk-17c1c66f": 1,
            "chunk-21d5d6a8": 1,
            "chunk-3676ddf3": 1,
            "chunk-3fdd08f9": 1,
            "chunk-4bc12aa0": 1,
            "chunk-51279394": 1,
            "chunk-60ffa822": 1,
            "chunk-71c7afb2": 1,
            "chunk-74ef81b5": 1,
            "chunk-8302281e": 1,
            "chunk-afecc83c": 1,
            "chunk-cbbb17ba": 1,
            "chunk-60080330": 1,
            "chunk-2095e530": 1,
            "chunk-37e71e41": 1,
            "chunk-3a86a2e4": 1,
            "chunk-0faebb97": 1,
            "chunk-235daef3": 1,
            "chunk-9ca2f668": 1,
            "chunk-7f0ea486": 1,
            "chunk-d91c071a": 1,
            "chunk-34243c32": 1,
            "chunk-60ff175e": 1,
            "chunk-682a93d8": 1,
            "chunk-715531ab": 1,
            "chunk-6ea7e65e": 1,
            "chunk-0c330e08": 1,
            "chunk-56ab77f4": 1,
            "chunk-0a8b10c2": 1,
            "chunk-0c63bb80": 1,
            "chunk-11d9dd90": 1,
            "chunk-14ed0682": 1,
            "chunk-17b33bc0": 1,
            "chunk-20e7ee1e": 1,
            "chunk-212be834": 1,
            "chunk-24bbfe3b": 1,
            "chunk-30e26798": 1,
            "chunk-47754068": 1,
            "chunk-62468f97": 1,
            "chunk-6587a5a1": 1,
            "chunk-6a66aaa2": 1,
            "chunk-785f1f55": 1,
            "chunk-7a6cd5d6": 1,
            "chunk-a854f2cc": 1,
            "chunk-b1f2bf3c": 1,
            "chunk-caa4d928": 1,
            "chunk-4587ca1a": 1,
            "chunk-6760b026": 1
        };
        h[c] ? n.push(h[c]) : 0 !== h[c] && u[c] && n.push(h[c] = new Promise((function(n, u) {
            for (var e = "static/css/" + ({
                "chunk-commons": "chunk-commons"
            }[c] || c) + "." + {
                "chunk-00155f4b": "efb80868",
                "chunk-f81359d0": "31d6cfe0",
                "chunk-038e78f2": "72512a64",
                "chunk-0548fa25": "598c5892",
                "chunk-073daa90": "31d6cfe0",
                "chunk-09163dd7": "9e7b12ca",
                "chunk-0b4570f8": "da86bf60",
                "chunk-0b500cce": "dd0e66f6",
                "chunk-0bbeb896": "0e1f54b4",
                "chunk-0ca7c584": "391ecfbb",
                "chunk-133a2b06": "31d6cfe0",
                "chunk-171dca47": "b4e9b1c2",
                "chunk-18cd25b5": "79d6279b",
                "chunk-1dbfb2ca": "e04f6507",
                "chunk-22d38d01": "c5280cc0",
                "chunk-24bd6642": "270c1406",
                "chunk-251ac763": "155818e9",
                "chunk-4b109e82": "95b4329c",
                "chunk-2c4fe7ee": "31d6cfe0",
                "chunk-f3b28598": "9a3e200e",
                "chunk-2d0d385a": "31d6cfe0",
                "chunk-54dce028": "31eebf62",
                "chunk-7eeef8c6": "334eca6b",
                "chunk-2d0d641d": "31d6cfe0",
                "chunk-2d2105d3": "31d6cfe0",
                "chunk-2d21ead9": "31d6cfe0",
                "chunk-e31a7778": "31d6cfe0",
                "chunk-78a58ce0": "31d6cfe0",
                "chunk-120f25a4": "b86a2a21",
                "chunk-2d222919": "31d6cfe0",
                "chunk-2d230c70": "31d6cfe0",
                "chunk-2d230fe7": "31d6cfe0",
                "chunk-2d8ba231": "17da5e6c",
                "chunk-2f617b25": "31d6cfe0",
                "chunk-545581c4": "132263cc",
                "chunk-2f90d8f0": "f425b586",
                "chunk-3142d3bc": "31d6cfe0",
                "chunk-31a04132": "768f2852",
                "chunk-37abbf52": "65ea1a12",
                "chunk-381feb46": "ea3087ab",
                "chunk-3aa7734e": "16f95cc2",
                "chunk-3afe39af": "81f8ec42",
                "chunk-477132e2": "31d6cfe0",
                "chunk-4794904a": "31d6cfe0",
                "chunk-9c7039ee": "31d6cfe0",
                "chunk-430384fb": "0f0411d7",
                "chunk-4a3d12ba": "8648ae2f",
                "chunk-f69cf13a": "31d6cfe0",
                "chunk-4884f80c": "32249d6c",
                "chunk-4961c0a8": "31d6cfe0",
                "chunk-4a573df5": "236fba29",
                "chunk-50e135d2": "31d6cfe0",
                "chunk-50f5e21c": "d30d30e3",
                "chunk-5410d1b2": "31d6cfe0",
                "chunk-0fcb1caa": "6f5df861",
                "chunk-11ea4519": "1ba7912b",
                "chunk-23f89548": "4337b79e",
                "chunk-7066f7a4": "77a6fe0b",
                "chunk-264ceee0": "ac5e177a",
                "chunk-2d0cbebe": "31d6cfe0",
                "chunk-726b8536": "31d6cfe0",
                "chunk-1b4a54c2": "c47e57e5",
                "chunk-1fb382d5": "57638d85",
                "chunk-46155390": "d78fed00",
                "chunk-56244582": "a03c16ca",
                "chunk-b5fa86a8": "84cc65c6",
                "chunk-2d247d82": "03516457",
                "chunk-31d4889a": "352b290b",
                "chunk-48966bf8": "1ba7912b",
                "chunk-4ea24402": "1ba7912b",
                "chunk-594ba360": "77a6fe0b",
                "chunk-61ff399e": "3a5bfddd",
                "chunk-652f2b55": "68a799ab",
                "chunk-654588bb": "34fe4b92",
                "chunk-6a660020": "1ba7912b",
                "chunk-6e87ca78": "31d6cfe0",
                "chunk-1c55cc64": "6b367069",
                "chunk-1153a3ae": "8ce80f0e",
                "chunk-675f6070": "a1332a43",
                "chunk-b2237dc8": "d8edb731",
                "chunk-c187c814": "31d6cfe0",
                "chunk-57638791": "597264d1",
                "chunk-71ef2ed8": "77a6fe0b",
                "chunk-06940b2f": "97b1e825",
                "chunk-fd4bd9e4": "8c3e2de9",
                "chunk-2577c36d": "cda2ff56",
                "chunk-1548bb5e": "c47e57e5",
                "chunk-287ae9c7": "3d612daf",
                "chunk-4fd8d347": "77a6fe0b",
                "chunk-317d59de": "2fdd5f37",
                "chunk-4235d6f1": "77a6fe0b",
                "chunk-4422d324": "77a6fe0b",
                "chunk-72d1b198": "63050db6",
                "chunk-ec497ea8": "499ab90f",
                "chunk-1f310d91": "b3c41852",
                "chunk-d3b3a4c0": "69999728",
                "chunk-55fa8644": "9992c072",
                "chunk-9153473e": "77a6fe0b",
                "chunk-5fd680e6": "4f5e1a8f",
                "chunk-662e0c60": "77a6fe0b",
                "chunk-62344ab0": "ffec1b7c",
                "chunk-81bf9dcc": "e2d690a2",
                "chunk-bdcedaca": "d5c08fb8",
                "chunk-d514d152": "77a6fe0b",
                "chunk-f17d0dd2": "883024f2",
                "chunk-77ec7d56": "ae489c5b",
                "chunk-8c85fabc": "1ba7912b",
                "chunk-8f383ba4": "40257cfc",
                "chunk-a1aa28a4": "8769f8e8",
                "chunk-ed1821d6": "c414a504",
                "chunk-0a5b7b24": "77a6fe0b",
                "chunk-f13d06fc": "77a6fe0b",
                "chunk-56a54792": "2d2cae9d",
                "chunk-58157c1c": "334eca6b",
                "chunk-585cd5cc": "31d6cfe0",
                "chunk-5a3ea4f3": "b9a2f72a",
                "chunk-63740e52": "7bf94bfe",
                "chunk-c9ad6fbc": "4e726ecf",
                "chunk-6ce0bad4": "31d6cfe0",
                "chunk-2159e022": "e1a3baa4",
                "chunk-71259396": "c446bf6b",
                "chunk-719b43aa": "ea24c8d1",
                "chunk-724a9633": "31d6cfe0",
                "chunk-039fe120": "998c3230",
                "chunk-06175d58": "fcd862a3",
                "chunk-1f2a4c90": "2eab9828",
                "chunk-21dfcdbe": "bc448a7d",
                "chunk-28180124": "c0f51fa7",
                "chunk-2d2101ff": "31d6cfe0",
                "chunk-4659744c": "1963b13b",
                "chunk-3d269f11": "b4833ffb",
                "chunk-3093f414": "1e0f9679",
                "chunk-50b00630": "4813a5e0",
                "chunk-77eacaec": "7463e478",
                "chunk-39ca7086": "31d6cfe0",
                "chunk-9873b59a": "473218f9",
                "chunk-0a14db2e": "38fdf1ae",
                "chunk-0ed204c4": "11f87e0f",
                "chunk-4a11df6c": "d73a22e9",
                "chunk-51edc778": "bf5ecf86",
                "chunk-5c45f974": "ca44c15f",
                "chunk-79ba38e3": "b9b98c55",
                "chunk-f452313e": "35c4216e",
                "chunk-fc9a2a9e": "2d340671",
                "chunk-9d34eedc": "ea9d7465",
                "chunk-b900ad98": "e4f3b6ac",
                "chunk-c8fddb6a": "d316e025",
                "chunk-72abef28": "b505366b",
                "chunk-6331f36e": "2fe0797e",
                "chunk-736d3dbc": "6c95ec7a",
                "chunk-75bb6ef8": "676cfe44",
                "chunk-7658eaca": "e00671c0",
                "chunk-788cd71c": "7891dff6",
                "chunk-797eb7e4": "395cfa4d",
                "chunk-7be33868": "e5acdd1f",
                "chunk-7cdf79bc": "d59bf4a8",
                "chunk-8116ecf6": "f079f8be",
                "chunk-89824c98": "31d6cfe0",
                "chunk-95200f10": "31d6cfe0",
                "chunk-a9051134": "aca8daba",
                "chunk-ac459d52": "d55b7e4f",
                "chunk-b1c4a05a": "31d6cfe0",
                "chunk-b3942c98": "31d6cfe0",
                "chunk-0d4c55a4": "31d6cfe0",
                "chunk-7c5fed2f": "07ce0f36",
                "chunk-bb42af12": "13821f5e",
                "chunk-c7722330": "31d6cfe0",
                "chunk-commons": "fbf3713c",
                "chunk-0441ac18": "54e414c9",
                "chunk-95279b24": "656eb2c6",
                "chunk-d6f3491c": "b395342d",
                "chunk-d711add8": "31d6cfe0",
                "chunk-dab226c4": "843c4e93",
                "chunk-e10f4fba": "31d6cfe0",
                "chunk-0d15f7df": "c3267692",
                "chunk-0ff1ff25": "c8a2c558",
                "chunk-74eeaf86": "9eb8ff59",
                "chunk-66043168": "a9b9288d",
                "chunk-72b72a35": "0fd9d414",
                "chunk-e9f73c82": "f711e473",
                "chunk-ef94f9e4": "bf7ab86c",
                "chunk-2d0aa5b8": "31d6cfe0",
                "chunk-2bf9ff98": "bfadeb90",
                "chunk-3aebcc64": "b4b18e20",
                "chunk-682ab6fa": "d6012331",
                "chunk-4aa0d228": "f9af7e0d",
                "chunk-a64e0e52": "45e14f52",
                "chunk-18941db8": "bc1a0a68",
                "chunk-30ffb292": "45991aed",
                "chunk-12020c2c": "ab0c1f0a",
                "chunk-1d40e4dd": "40fd4f45",
                "chunk-323c09d9": "d306a139",
                "chunk-93b86d00": "24769430",
                "chunk-945749a6": "30e567d4",
                "chunk-f123646c": "16988035",
                "chunk-f31dd558": "31d6cfe0",
                "chunk-f4f2ad3c": "97e81b57",
                "chunk-72a81207": "31d6cfe0",
                "chunk-f57e2d4e": "b287fdc0",
                "chunk-fa236cae": "a04e5f74",
                "chunk-672f23a7": "f00e47ca",
                "chunk-13307a08": "06894799",
                "chunk-03236f46": "31d6cfe0",
                "chunk-65f4e680": "14ab602b",
                "chunk-a90b5ec2": "3adbfa33",
                "chunk-58ca30db": "14ab602b",
                "chunk-17ac497c": "cabf8644",
                "chunk-2d0b9654": "31d6cfe0",
                "chunk-2d2082c5": "31d6cfe0",
                "chunk-2d22cce3": "31d6cfe0",
                "chunk-43f4b4c2": "e2ea3846",
                "chunk-5e12deb6": "31d6cfe0",
                "chunk-8c99df8a": "dc1b4b2d",
                "chunk-2d0c8293": "31d6cfe0",
                "chunk-16bf884b": "1c199aab",
                "chunk-205588da": "99e92ba7",
                "chunk-290573df": "5696a6bc",
                "chunk-2d0bdda3": "31d6cfe0",
                "chunk-367520b4": "692cc3c0",
                "chunk-3a5fd6b2": "31d6cfe0",
                "chunk-574d5906": "28bd60f7",
                "chunk-5b7f64e0": "3c5dc4a9",
                "chunk-7a587c4b": "fa56de35",
                "chunk-9a76cd96": "39791aae",
                "chunk-af945410": "4813a5e0",
                "chunk-2d0c8dc6": "31d6cfe0",
                "chunk-40383e0d": "77a6fe0b",
                "chunk-5de8bd5b": "77a6fe0b",
                "chunk-0a492a9e": "1701615c",
                "chunk-271d5781": "38bf1392",
                "chunk-373aa27e": "06eb5d35",
                "chunk-5bef02ba": "41abc115",
                "chunk-40bf2235": "510057de",
                "chunk-72120114": "8e9f7fb0",
                "chunk-7574e53d": "4869a7c8",
                "chunk-8216af38": "69d5a781",
                "chunk-bd9a13f4": "c90d3d98",
                "chunk-c5b153bc": "f3bbb0e3",
                "chunk-2d0e268a": "31d6cfe0",
                "chunk-c650ad2c": "c5a01041",
                "chunk-de7ba61a": "edb7439b",
                "chunk-ea6b50d4": "e53f9a09",
                "chunk-f147a8c6": "32bfb1ed",
                "chunk-f78ebe08": "a11a3eb0",
                "chunk-0e3918da": "e22b9abb",
                "chunk-0f22b2bb": "01500157",
                "chunk-17c1c66f": "76dd0a0f",
                "chunk-21d5d6a8": "d8556479",
                "chunk-3676ddf3": "5487c7ed",
                "chunk-3fdd08f9": "34409961",
                "chunk-4bc12aa0": "8d1f6862",
                "chunk-51279394": "67a68854",
                "chunk-60ffa822": "730b0e66",
                "chunk-71c7afb2": "4e1ee5b8",
                "chunk-74ef81b5": "82a2abb0",
                "chunk-8302281e": "4ed4dce5",
                "chunk-afecc83c": "a2a56ee9",
                "chunk-cbbb17ba": "ab5a9bb3",
                "chunk-60080330": "827831de",
                "chunk-2095e530": "1c199aab",
                "chunk-2d0d3836": "31d6cfe0",
                "chunk-37e71e41": "1c199aab",
                "chunk-3a86a2e4": "cee6f567",
                "chunk-2d0f042f": "31d6cfe0",
                "chunk-0faebb97": "f00e47ca",
                "chunk-cd990dce": "31d6cfe0",
                "chunk-235daef3": "692cc3c0",
                "chunk-30b3a146": "31d6cfe0",
                "chunk-9ca2f668": "6b9282b2",
                "chunk-7f0ea486": "63a68660",
                "chunk-2d0d3648": "31d6cfe0",
                "chunk-d91c071a": "3c5dc4a9",
                "chunk-6b5b0490": "31d6cfe0",
                "chunk-34243c32": "d65ca7e4",
                "chunk-66d8764a": "31d6cfe0",
                "chunk-7e58d3ae": "31d6cfe0",
                "chunk-f759893a": "31d6cfe0",
                "chunk-60ff175e": "b98d35d7",
                "chunk-682a93d8": "30c4b139",
                "chunk-715531ab": "9069d973",
                "chunk-2d0db21b": "31d6cfe0",
                "chunk-78d80fca": "31d6cfe0",
                "chunk-3d705ea0": "31d6cfe0",
                "chunk-6ea7e65e": "bff248e4",
                "chunk-0c330e08": "14ab602b",
                "chunk-56ab77f4": "14ab602b",
                "chunk-66bc5ec2": "31d6cfe0",
                "chunk-0a8b10c2": "c19e507e",
                "chunk-0c63bb80": "a2918439",
                "chunk-11d9dd90": "3b9d48df",
                "chunk-14ed0682": "3ea2d569",
                "chunk-17b33bc0": "e7e36324",
                "chunk-20e7ee1e": "65d110a8",
                "chunk-212be834": "e5159fa3",
                "chunk-24bbfe3b": "6b49bf99",
                "chunk-30e26798": "10a12de6",
                "chunk-47754068": "40ee821b",
                "chunk-62468f97": "4029ca3e",
                "chunk-6587a5a1": "b395342d",
                "chunk-6a66aaa2": "13508ba1",
                "chunk-785f1f55": "ab705e54",
                "chunk-7a6cd5d6": "e921e4f0",
                "chunk-a854f2cc": "e35b9326",
                "chunk-b1f2bf3c": "89e1317d",
                "chunk-caa4d928": "7b9ea42e",
                "chunk-4587ca1a": "73ac6ab5",
                "chunk-04a2bc5c": "31d6cfe0",
                "chunk-2e4d0aa8": "31d6cfe0",
                "chunk-4d6117d2": "31d6cfe0",
                "chunk-6760b026": "8642680d",
                "chunk-2d2084bb": "31d6cfe0"
            }[c] + ".css", k = f.p + e, a = document.getElementsByTagName("link"), d = 0; d < a.length; d++) {
                var b = a[d]
                  , t = b.getAttribute("data-href") || b.getAttribute("href");
                if ("stylesheet" === b.rel && (t === e || t === k))
                    return n()
            }
            var r = document.getElementsByTagName("style");
            for (d = 0; d < r.length; d++) {
                b = r[d],
                t = b.getAttribute("data-href");
                if (t === e || t === k)
                    return n()
            }
            var o = document.createElement("link");
            o.rel = "stylesheet",
            o.type = "text/css",
            o.onload = n,
            o.onerror = function(n) {
                var e = n && n.target && n.target.src || k
                  , a = new Error("Loading CSS chunk " + c + " failed.\n(" + e + ")");
                a.request = e,
                delete h[c],
                o.parentNode.removeChild(o),
                u(a)
            }
            ,
            o.href = k;
            var i = document.getElementsByTagName("head")[0];
            i.appendChild(o)
        }
        )).then((function() {
            h[c] = 0
        }
        )));
        var e = k[c];
        if (0 !== e)
            if (e)
                n.push(e[2]);
            else {
                var a = new Promise((function(n, u) {
                    e = k[c] = [n, u]
                }
                ));
                n.push(e[2] = a);
                var b, t = document.createElement("script");
                t.charset = "utf-8",
                t.timeout = 120,
                f.nc && t.setAttribute("nonce", f.nc),
                t.src = d(c),
                b = function(n) {
                    t.onerror = t.onload = null,
                    clearTimeout(r);
                    var u = k[c];
                    if (0 !== u) {
                        if (u) {
                            var e = n && ("load" === n.type ? "missing" : n.type)
                              , h = n && n.target && n.target.src
                              , a = new Error("Loading chunk " + c + " failed.\n(" + e + ": " + h + ")");
                            a.type = e,
                            a.request = h,
                            u[1](a)
                        }
                        k[c] = void 0
                    }
                }
                ;
                var r = setTimeout((function() {
                    b({
                        type: "timeout",
                        target: t
                    })
                }
                ), 12e4);
                t.onerror = t.onload = b,
                document.head.appendChild(t)
            }
        return Promise.all(n)
    }
    ,
    f.m = c,
    f.c = e,
    f.d = function(c, n, u) {
        f.o(c, n) || Object.defineProperty(c, n, {
            enumerable: !0,
            get: u
        })
    }
    ,
    f.r = function(c) {
        "undefined" !== typeof Symbol && Symbol.toStringTag && Object.defineProperty(c, Symbol.toStringTag, {
            value: "Module"
        }),
        Object.defineProperty(c, "__esModule", {
            value: !0
        })
    }
    ,
    f.t = function(c, n) {
        if (1 & n && (c = f(c)),
        8 & n)
            return c;
        if (4 & n && "object" === typeof c && c && c.__esModule)
            return c;
        var u = Object.create(null);
        if (f.r(u),
        Object.defineProperty(u, "default", {
            enumerable: !0,
            value: c
        }),
        2 & n && "string" != typeof c)
            for (var e in c)
                f.d(u, e, function(n) {
                    return c[n]
                }
                .bind(null, e));
        return u
    }
    ,
    f.n = function(c) {
        var n = c && c.__esModule ? function() {
            return c["default"]
        }
        : function() {
            return c
        }
        ;
        return f.d(n, "a", n),
        n
    }
    ,
    f.o = function(c, n) {
        return Object.prototype.hasOwnProperty.call(c, n)
    }
    ,
    f.p = "/pxf-settlement-outnetpub/",
    f.oe = function(c) {
        throw console.error(c),
        c
    }
    ;
    var b = window["webpackJsonp"] = window["webpackJsonp"] || []
      , t = b.push.bind(b);
    b.push = n,
    b = b.slice();
    for (var r = 0; r < b.length; r++)
        n(b[r]);
    var o = t;
    u()
}
)({
    c99b: function(e, t, r) {
        "use strict";
        function n(e) {
            return n = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(e) {
                return typeof e
            }
            : function(e) {
                return e && "function" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e
            }
            ,
            n(e)
        }
        var o;
        r.d(t, "g", (function() {
            return H
        }
        )),
        r.d(t, "f", (function() {
            return N
        }
        )),
        r.d(t, "b", (function() {
            return Dr
        }
        )),
        r.d(t, "c", (function() {
            return Fr
        }
        )),
        r.d(t, "a", (function() {
            return Pr
        }
        )),
        r.d(t, "e", (function() {
            return Or
        }
        )),
        r.d(t, "d", (function() {
            return Ir
        }
        )),
        r.d(t, "h", (function() {
            return Hr
        }
        ));
        var i = navigator.userAgent
          , a = i.indexOf("compatible") > -1 && i.indexOf("MSIE") > -1
          , l = i.indexOf("Trident") > -1 && i.indexOf("rv:11.0") > -1;
        o = a || l ? window.msCrypto : window.crypto;
        var s = function() {
            return this.parseUTF8 = function(e) {
                e = unescape(encodeURIComponent(e));
                for (var t = e.length, r = [], n = 0; n < t; n++)
                    r[n >>> 2] |= (255 & e.charCodeAt(n)) << 24 - n % 4 * 8;
                return new c(r,t)
            }
            ,
            this.stringifyUTF8 = function(e) {
                try {
                    for (var t, r = decodeURIComponent, n = escape, o = e.words, i = e.sigBytes, a = (e = [],
                    0); a < i; a++) {
                        var l = o[a >>> 2] >>> 24 - a % 4 * 8 & 255;
                        0 != l && e.push(String.fromCharCode(l))
                    }
                    return t = e.join(""),
                    r(n(t))
                } catch (s) {
                    throw Error("Malformed UTF-8 data")
                }
            }
            ,
            this.HexParse = function(e) {
                for (var t = e.length, r = [], n = 0; n < t; n += 2)
                    r[n >>> 3] |= parseInt(e.substr(n, 2), 16) << 24 - n % 8 * 4;
                return new c(r,t / 2)
            }
            ,
            this.HexStringify = function(e) {
                for (var t = e.words, r = (e = e.sigBytes,
                []), n = 0; n < e; n++) {
                    var o = t[n >>> 2] >>> 24 - n % 4 * 8 & 255;
                    r.push((o >>> 4).toString(16)),
                    r.push((15 & o).toString(16))
                }
                return r.join("")
            }
            ,
            this
        }
          , c = function(e, t) {
            return this.words = e || [],
            this.sigBytes = void 0 != t ? t : 4 * e.length,
            this.getArrs = function() {
                return this.words
            }
            ,
            this
        }
          , u = 0xdeadbeefcafe
          , d = 15715070 == (16777215 & u)
          , A = 52
          , p = "0123456789abcdefghijklmnopqrstuvwxyz"
          , g = [];
        for (Q = "0".charCodeAt(0),
        G = 0; G <= 9; ++G)
            g[Q++] = G;
        for (Q = "a".charCodeAt(0),
        G = 10; G < 36; ++G)
            g[Q++] = G;
        for (Q = "A".charCodeAt(0),
        G = 10; G < 36; ++G)
            g[Q++] = G;
        function f(e) {
            return p.charAt(e)
        }
        function h(e, t) {
            var r = g[e.charCodeAt(t)];
            return null == r ? -1 : r
        }
        function b() {
            var e = navigator.userAgent
              , t = (e.indexOf("Opera"),
            e.indexOf("compatible") > -1 && e.indexOf("MSIE") > -1)
              , r = e.indexOf("Edge") > -1 && !t
              , n = e.indexOf("Trident") > -1 && e.indexOf("rv:11.0") > -1
              , o = e.indexOf("Firefox") > -1
              , i = (e.indexOf("Safari"),
            e.indexOf("Chrome") > -1);
            return r ? "edge" : n ? "IE11" : o || i ? "FF" : void 0
        }
        var m = function() {
            function e(e) {
                r[n++] ^= 255 & e,
                r[n++] ^= e >> 8 & 255,
                r[n++] ^= e >> 16 & 255,
                r[n++] ^= e >> 24 & 255,
                n >= i && (n -= i)
            }
            var t, r, n, i = 256;
            if (null == r) {
                var a;
                for (r = [],
                n = 0; n < i; )
                    o && (a = Math.floor(65536 * o.getRandomValues(new Uint8Array(1)) * .001),
                    r[n++] = a >>> 8,
                    r[n++] = 255 & a);
                if ("FF" == b() && o) {
                    var l = new ArrayBuffer(32)
                      , s = new Int8Array(l);
                    for (o && o.getRandomValues(s),
                    a = 0; a < s.length; ++a)
                        r[a] = 255 & s[a]
                } else if ("IE11" == b()) {
                    l = new ArrayBuffer(32),
                    s = new Int8Array(l);
                    var c = o || o;
                    for (o && c.getRandomValues(s),
                    a = 0; a < s.length; ++a)
                        r[a] = 255 & s[a]
                } else if ("edge" == b()) {
                    l = new ArrayBuffer(32),
                    s = new Int8Array(l),
                    c = o || o;
                    for (o && c.getRandomValues(s),
                    a = 0; a < s.length; ++a)
                        r[a] = 255 & s[a]
                }
                n = 0,
                e((new Date).getTime())
            }
            this.nextBytes = function(o) {
                for (var i = 0; i < o.length; ++i) {
                    var a, l = o, s = i;
                    if (null == t) {
                        for (e((new Date).getTime()),
                        t = new w,
                        t.init(r),
                        n = 0; n < r.length; ++n)
                            r[n] = 0;
                        n = 0
                    }
                    a = t.next(),
                    l[s] = a
                }
            }
        }
          , w = function() {
            this.j = this.i = 0,
            this.S = [],
            this.init = function(e) {
                for (var t, r, n = 0; n < 256; ++n)
                    this.S[n] = n;
                for (n = t = 0; n < 256; ++n)
                    t = t + this.S[n] + e[n % e.length] & 255,
                    r = this.S[n],
                    this.S[n] = this.S[t],
                    this.S[t] = r;
                this.j = this.i = 0
            }
            ,
            this.next = function() {
                var e;
                return this.i = this.i + 1 & 255,
                this.j = this.j + this.S[this.i] & 255,
                e = this.S[this.i],
                this.S[this.i] = this.S[this.j],
                this.S[this.j] = e,
                this.S[e + this.S[this.i] & 255]
            }
        }
          , v = function(e, t) {
            this.x = t,
            this.q = e
        };
        Array.Clear = function(e) {
            for (var t in e)
                e[t] = null
        }
        ,
        Array.Copy = function(e, t, r, n, o) {
            for (e = e.slice(t, t + o),
            t = 0; t < e.length; t++)
                r[n] = e[t],
                n++
        }
        ,
        window.Int32 = {
            minValue: -parseInt("10000000000000000000000000000000", 2),
            maxValue: parseInt("1111111111111111111111111111111", 2),
            parse: function(e) {
                if (e < this.minValue) {
                    e = new Number(-e),
                    e = e.toString(2),
                    e = e.substr(e.length - 31, 31);
                    for (var t = "", r = 0; r < e.length; r++) {
                        var n = e.substr(r, 1);
                        t += "0" == n ? "1" : "0"
                    }
                    return e = parseInt(t, 2),
                    e + 1
                }
                if (e > this.maxValue) {
                    for (e = Number(e).toString(2),
                    e = e.substr(e.length - 31, 31),
                    t = "",
                    r = 0; r < e.length; r++)
                        n = e.substr(r, 1),
                        t += "0" == n ? "1" : "0";
                    return e = parseInt(t, 2),
                    -(e + 1)
                }
                return e
            },
            parseByte: function(e) {
                if (e < 0) {
                    e = new Number(-e),
                    e = e.toString(2),
                    e = e.substr(e.length - 8, 8);
                    for (var t = "", r = 0; r < e.length; r++) {
                        var n = e.substr(r, 1);
                        t += "0" == n ? "1" : "0"
                    }
                    return parseInt(t, 2) + 1
                }
                return e > 255 ? (e = Number(e).toString(2),
                parseInt(e.substr(e.length - 8, 8), 2)) : e
            }
        },
        "undefined" !== typeof Gt && Gt || (Gt = {}),
        "undefined" !== typeof Gt.crypto && Gt.crypto || (Gt.crypto = {}),
        "undefined" !== typeof Gt && Gt || (Gt = {}),
        "undefined" !== typeof Gt.crypto && Gt.crypto || (Gt.crypto = {});
        var x = [[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]]
          , y = [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]
          , B = [2746333894, 1453994832, 1736282519, 2993693404];
        function C(e, t) {
            return e ^ t
        }
        function E(e, t) {
            return t %= 32,
            e << t | e >>> 32 - t
        }
        function k(e) {
            return x[(4026531840 & e) >>> 28][(251658240 & e) >>> 24] << 24 | x[(15728640 & e) >>> 20][(983040 & e) >>> 16] << 16 | x[(61440 & e) >>> 12][(3840 & e) >>> 8] << 8 | x[(240 & e) >>> 4][(15 & e) >>> 0] << 0
        }
        function D(e) {
            return e = k(e),
            C(C(C(e, E(e, 2)), C(E(e, 10), E(e, 18))), E(e, 24))
        }
        function F(e) {
            return e = k(e),
            C(e, C(E(e, 13), E(e, 23)))
        }
        function P(e) {
            var t = []
              , r = [];
            for (t[0] = C(e[0], B[0]),
            t[1] = C(e[1], B[1]),
            t[2] = C(e[2], B[2]),
            t[3] = C(e[3], B[3]),
            e = 0; e < 32; e++)
                t[e + 4] = C(t[e], F(C(C(t[e + 1], t[e + 2]), C(t[e + 3], y[e])))),
                r[e] = t[e + 4].toString(16);
            return r
        }
        function O(e, t) {
            for (var r = Math.ceil(e.length / 4), n = [], o = 0; o < r; o++) {
                for (var i = e.slice(4 * o, 4 * (o + 1)), a = P(t), l = 0; l < 32; l++)
                    i[l + 4] = C(i[l], D(C(C(i[l + 1], i[l + 2]), C(i[l + 3], parseInt(a[l], 16)))));
                n = n.concat([i[35].toString(10), i[34].toString(10), i[33].toString(10), i[32].toString(10)])
            }
            return new c(n)
        }
        function I(e, t) {
            for (var r = Math.ceil(e.length / 4), n = [], o = 0; o < r; o++) {
                for (var i = e.slice(4 * o, 4 * (o + 1)), a = P(t), l = [], s = a.length - 1; s >= 0; s--)
                    l[a.length - 1 - s] = a[s];
                for (s = 0; s < 32; s++)
                    i[s + 4] = C(i[s], D(C(C(i[s + 1], i[s + 2]), C(i[s + 3], parseInt(l[s], 16)))));
                n = n.concat([i[35].toString(10), i[34].toString(10), i[33].toString(10), i[32].toString(10)])
            }
            return new c(n)
        }
        function H(e, t) {
            if (void 0 != e && void 0 != t && "" != e && "" != t) {
                var r = new s
                  , n = O(r.parseUTF8(e).getArrs(), r.HexParse(t).getArrs());
                return r.HexStringify(n)
            }
        }
        function N(e, t) {
            if (void 0 != e && void 0 != t && "" != e && "" != t) {
                var r = new s
                  , n = r.HexParse(e);
                r = r.HexParse(t),
                n = I(n.getArrs(), r.getArrs());
                return (new s).stringifyUTF8(n)
            }
        }
        var L, S = S || function(e, t) {
            var r = {}
              , n = r.lib = {}
              , o = n.Base = function() {
                function e() {}
                return {
                    extend: function(t) {
                        e.prototype = this;
                        var r = new e;
                        return t && r.mixIn(t),
                        r.hasOwnProperty("init") || (r.init = function() {
                            r.$super.init.apply(this, arguments)
                        }
                        ),
                        r.init.prototype = r,
                        r.$super = this,
                        r
                    },
                    create: function() {
                        var e = this.extend();
                        return e.init.apply(e, arguments),
                        e
                    },
                    init: function() {},
                    mixIn: function(e) {
                        for (var t in e)
                            e.hasOwnProperty(t) && (this[t] = e[t]);
                        e.hasOwnProperty("toString") && (this.toString = e.toString)
                    },
                    clone: function() {
                        return this.init.prototype.extend(this)
                    }
                }
            }()
              , i = n.WordArray = o.extend({
                init: function(e, r) {
                    e = this.words = e || [],
                    this.sigBytes = r != t ? r : 4 * e.length
                },
                toString: function(e) {
                    return (e || l).stringify(this)
                },
                concat: function(e) {
                    var t = this.words
                      , r = e.words
                      , n = this.sigBytes
                      , o = e.sigBytes;
                    if (this.clamp(),
                    n % 4)
                        for (var i = 0; i < o; i += 1) {
                            var a = r[i >>> 2] >>> 24 - i % 4 * 8 & 255;
                            t[n + i >>> 2] |= a << 24 - (n + i) % 4 * 8
                        }
                    else if (r.length > 65535)
                        for (i = 0; i < o; i += 4)
                            t[n + i >>> 2] = r[i >>> 2];
                    else
                        t.push.apply(t, r);
                    return this.sigBytes += o,
                    this
                },
                clamp: function() {
                    var t = this.words
                      , r = this.sigBytes;
                    t[r >>> 2] &= 4294967295 << 32 - r % 4 * 8,
                    t.length = e.ceil(r / 4)
                },
                clone: function() {
                    var e = o.clone.call(this);
                    return e.words = this.words.slice(0),
                    e
                },
                random: function(t) {
                    for (var r = [], n = 0; n < t; n += 4)
                        r.push(4294967296 * e.random() | 0);
                    return new i.init(r,t)
                }
            })
              , a = r.enc = {}
              , l = a.Hex = {
                stringify: function(e) {
                    for (var t = e.words, r = e.sigBytes, n = [], o = 0; o < r; o += 1) {
                        var i = t[o >>> 2] >>> 24 - o % 4 * 8 & 255;
                        n.push((i >>> 4).toString(16)),
                        n.push((15 & i).toString(16))
                    }
                    return n.join("")
                },
                parse: function(e) {
                    for (var t = e.length, r = [], n = 0; n < t; n += 2)
                        r[n >>> 3] |= parseInt(e.substr(n, 2), 16) << 24 - n % 8 * 4;
                    return new i.init(r,t / 2)
                }
            }
              , s = a.Latin1 = {
                stringify: function(e) {
                    for (var t = e.words, r = e.sigBytes, n = [], o = 0; o < r; o += 1) {
                        var i = t[o >>> 2] >>> 24 - o % 4 * 8 & 255;
                        n.push(String.fromCharCode(i))
                    }
                    return n.join("")
                },
                parse: function(e) {
                    for (var t = e.length, r = [], n = 0; n < t; n += 1)
                        r[n >>> 2] |= (255 & e.charCodeAt(n)) << 24 - n % 4 * 8;
                    return new i.init(r,t)
                }
            }
              , c = a.Utf8 = {
                stringify: function(e) {
                    try {
                        return decodeURIComponent(escape(s.stringify(e)))
                    } catch (t) {
                        throw new Error("Malformed UTF-8 data")
                    }
                },
                parse: function(e) {
                    return s.parse(unescape(encodeURIComponent(e)))
                }
            }
              , u = n.BufferedBlockAlgorithm = o.extend({
                reset: function() {
                    this._data = new i.init,
                    this._nDataBytes = 0
                },
                _append: function(e) {
                    "string" === typeof e && (e = c.parse(e)),
                    this._data.concat(e),
                    this._nDataBytes += e.sigBytes
                },
                _process: function(t) {
                    var r = this._data
                      , n = r.words
                      , o = r.sigBytes
                      , a = this.blockSize
                      , l = 4 * a
                      , s = o / l;
                    s = t ? e.ceil(s) : e.max((0 | s) - this._minBufferSize, 0);
                    var c = s * a
                      , u = e.min(4 * c, o);
                    if (c) {
                        for (var d = 0; d < c; d += a)
                            this._doProcessBlock(n, d);
                        var A = n.splice(0, c);
                        r.sigBytes -= u
                    }
                    return new i.init(A,u)
                },
                clone: function() {
                    var e = o.clone.call(this);
                    return e._data = this._data.clone(),
                    e
                },
                _minBufferSize: 0
            })
              , d = (n.Hasher = u.extend({
                cfg: o.extend(),
                init: function(e) {
                    this.cfg = this.cfg.extend(e),
                    this.reset()
                },
                reset: function() {
                    u.reset.call(this),
                    this._doReset()
                },
                update: function(e) {
                    return this._append(e),
                    this._process(),
                    this
                },
                finalize: function(e) {
                    e && this._append(e);
                    var t = this._doFinalize();
                    return t
                },
                blockSize: 16,
                _createHelper: function(e) {
                    return function(t, r) {
                        return new e.init(r).finalize(t)
                    }
                },
                _createHmacHelper: function(e) {
                    return function(t, r) {
                        return new d.HMAC.init(e,r).finalize(t)
                    }
                }
            }),
            r.algo = {});
            return r
        }(Math);
        u = 0xdeadbeefcafe,
        d = 15715070 == (16777215 & u);
        function z(e, t, r) {
            null != e && ("number" === typeof e ? this.fromNumber(e, t, r) : null == t && "string" !== typeof e ? this.fromString(e, 256) : this.fromString(e, t))
        }
        function Y() {
            return new z(null)
        }
        function M(e, t, r, n, o, i) {
            while (--i >= 0) {
                var a = t * this[e++] + r[n] + o;
                o = Math.floor(a / 67108864),
                r[n++] = 67108863 & a
            }
            return o
        }
        function X(e, t, r, n, o, i) {
            var a = 32767 & t
              , l = t >> 15;
            while (--i >= 0) {
                var s = 32767 & this[e]
                  , c = this[e++] >> 15
                  , u = l * s + c * a;
                s = a * s + ((32767 & u) << 15) + r[n] + (1073741823 & o),
                o = (s >>> 30) + (u >>> 15) + l * c + (o >>> 30),
                r[n++] = 1073741823 & s
            }
            return o
        }
        function T(e, t, r, n, o, i) {
            var a = 16383 & t
              , l = t >> 14;
            while (--i >= 0) {
                var s = 16383 & this[e]
                  , c = this[e++] >> 14
                  , u = l * s + c * a;
                s = a * s + ((16383 & u) << 14) + r[n] + o,
                o = (s >> 28) + (u >> 14) + l * c,
                r[n++] = 268435455 & s
            }
            return o
        }
        d && "Microsoft Internet Explorer" == navigator.appName ? (z.prototype.am = X,
        L = 30) : d && "Netscape" != navigator.appName ? (z.prototype.am = M,
        L = 26) : (z.prototype.am = T,
        L = 28),
        z.prototype.DB = L,
        z.prototype.DM = (1 << L) - 1,
        z.prototype.DV = 1 << L;
        A = 52;
        z.prototype.FV = Math.pow(2, A),
        z.prototype.F1 = A - L,
        z.prototype.F2 = 2 * L - A;
        var Q, G;
        p = "0123456789abcdefghijklmnopqrstuvwxyz",
        g = [];
        for (Q = "0".charCodeAt(0),
        G = 0; G <= 9; G += 1)
            g[Q++] = G;
        for (Q = "a".charCodeAt(0),
        G = 10; G < 36; G += 1)
            g[Q++] = G;
        for (Q = "A".charCodeAt(0),
        G = 10; G < 36; G += 1)
            g[Q++] = G;
        function j(e) {
            for (var t = this.t - 1; t >= 0; t -= 1)
                e[t] = this[t];
            e.t = this.t,
            e.s = this.s
        }
        function R(e) {
            this.t = 1,
            this.s = e < 0 ? -1 : 0,
            e > 0 ? this[0] = e : e < -1 ? this[0] = e + this.DV : this.t = 0
        }
        function V(e) {
            var t = Y();
            return t.fromInt(e),
            t
        }
        function W(e, t) {
            var r;
            if (16 == t)
                r = 4;
            else if (8 == t)
                r = 3;
            else if (256 == t)
                r = 8;
            else if (2 == t)
                r = 1;
            else if (32 == t)
                r = 5;
            else {
                if (4 != t)
                    return void this.fromRadix(e, t);
                r = 2
            }
            this.t = 0,
            this.s = 0;
            var n = e.length
              , o = !1
              , i = 0;
            while (--n >= 0) {
                var a = 8 == r ? 255 & e[n] : h(e, n);
                a < 0 ? "-" == e.charAt(n) && (o = !0) : (o = !1,
                0 == i ? this[this.t++] = a : i + r > this.DB ? (this[this.t - 1] |= (a & (1 << this.DB - i) - 1) << i,
                this[this.t++] = a >> this.DB - i) : this[this.t - 1] |= a << i,
                i += r,
                i >= this.DB && (i -= this.DB))
            }
            8 == r && 0 != (128 & e[0]) && (this.s = -1,
            i > 0 && (this[this.t - 1] |= (1 << this.DB - i) - 1 << i)),
            this.clamp(),
            o && z.ZERO.subTo(this, this)
        }
        function U() {
            var e = this.s & this.DM;
            while (this.t > 0 && this[this.t - 1] == e)
                --this.t
        }
        function K(e) {
            if (this.s < 0)
                return "-" + this.negate().toString(e);
            var t;
            if (16 == e)
                t = 4;
            else if (8 == e)
                t = 3;
            else if (2 == e)
                t = 1;
            else if (32 == e)
                t = 5;
            else {
                if (4 != e)
                    return this.toRadix(e);
                t = 2
            }
            var r, n = (1 << t) - 1, o = !1, i = "", a = this.t, l = this.DB - a * this.DB % t;
            if (a-- > 0) {
                l < this.DB && (r = this[a] >> l) > 0 && (o = !0,
                i = f(r));
                while (a >= 0)
                    l < t ? (r = (this[a] & (1 << l) - 1) << t - l,
                    r |= this[a -= 1] >> (l += this.DB - t)) : (r = this[a] >> (l -= t) & n,
                    l <= 0 && (l += this.DB,
                    a -= 1)),
                    r > 0 && (o = !0),
                    o && (i += f(r))
            }
            return o ? i : "0"
        }
        function q() {
            var e = Y();
            return z.ZERO.subTo(this, e),
            e
        }
        function Z() {
            return this.s < 0 ? this.negate() : this
        }
        function J(e) {
            var t = this.s - e.s;
            if (0 != t)
                return t;
            var r = this.t;
            if (t = r - e.t,
            0 != t)
                return this.s < 0 ? -t : t;
            while (--r >= 0)
                if (0 != (t = this[r] - e[r]))
                    return t;
            return 0
        }
        function _(e) {
            var t, r = 1;
            return 0 != (t = e >>> 16) && (e = t,
            r += 16),
            0 != (t = e >> 8) && (e = t,
            r += 8),
            0 != (t = e >> 4) && (e = t,
            r += 4),
            0 != (t = e >> 2) && (e = t,
            r += 2),
            0 != (t = e >> 1) && (e = t,
            r += 1),
            r
        }
        function $() {
            return this.t <= 0 ? 0 : this.DB * (this.t - 1) + _(this[this.t - 1] ^ this.s & this.DM)
        }
        function ee(e, t) {
            var r;
            for (r = this.t - 1; r >= 0; r -= 1)
                t[r + e] = this[r];
            for (r = e - 1; r >= 0; r -= 1)
                t[r] = 0;
            t.t = this.t + e,
            t.s = this.s
        }
        function te(e, t) {
            for (var r = e; r < this.t; r += 1)
                t[r - e] = this[r];
            t.t = Math.max(this.t - e, 0),
            t.s = this.s
        }
        function re(e, t) {
            var r, n = e % this.DB, o = this.DB - n, i = (1 << o) - 1, a = Math.floor(e / this.DB), l = this.s << n & this.DM;
            for (r = this.t - 1; r >= 0; r -= 1)
                t[r + a + 1] = this[r] >> o | l,
                l = (this[r] & i) << n;
            for (r = a - 1; r >= 0; r -= 1)
                t[r] = 0;
            t[a] = l,
            t.t = this.t + a + 1,
            t.s = this.s,
            t.clamp()
        }
        function ne(e, t) {
            t.s = this.s;
            var r = Math.floor(e / this.DB);
            if (r >= this.t)
                t.t = 0;
            else {
                var n = e % this.DB
                  , o = this.DB - n
                  , i = (1 << n) - 1;
                t[0] = this[r] >> n;
                for (var a = r + 1; a < this.t; a += 1)
                    t[a - r - 1] |= (this[a] & i) << o,
                    t[a - r] = this[a] >> n;
                n > 0 && (t[this.t - r - 1] |= (this.s & i) << o),
                t.t = this.t - r,
                t.clamp()
            }
        }
        function oe(e, t) {
            var r = 0
              , n = 0
              , o = Math.min(e.t, this.t);
            while (r < o)
                n += this[r] - e[r],
                t[r++] = n & this.DM,
                n >>= this.DB;
            if (e.t < this.t) {
                n -= e.s;
                while (r < this.t)
                    n += this[r],
                    t[r++] = n & this.DM,
                    n >>= this.DB;
                n += this.s
            } else {
                n += this.s;
                while (r < e.t)
                    n -= e[r],
                    t[r++] = n & this.DM,
                    n >>= this.DB;
                n -= e.s
            }
            t.s = n < 0 ? -1 : 0,
            n < -1 ? t[r++] = this.DV + n : n > 0 && (t[r++] = n),
            t.t = r,
            t.clamp()
        }
        function ie(e, t) {
            var r = this.abs()
              , n = e.abs()
              , o = r.t;
            t.t = o + n.t;
            while (--o >= 0)
                t[o] = 0;
            for (o = 0; o < n.t; o += 1)
                t[o + r.t] = r.am(0, n[o], t, o, 0, r.t);
            t.s = 0,
            t.clamp(),
            this.s != e.s && z.ZERO.subTo(t, t)
        }
        function ae(e) {
            var t = this.abs()
              , r = e.t = 2 * t.t;
            while (--r >= 0)
                e[r] = 0;
            for (r = 0; r < t.t - 1; r += 1) {
                var n = t.am(r, t[r], e, 2 * r, 0, 1);
                (e[r + t.t] += t.am(r + 1, 2 * t[r], e, 2 * r + 1, n, t.t - r - 1)) >= t.DV && (e[r + t.t] -= t.DV,
                e[r + t.t + 1] = 1)
            }
            e.t > 0 && (e[e.t - 1] += t.am(r, t[r], e, 2 * r, 0, 1)),
            e.s = 0,
            e.clamp()
        }
        function le(e, t, r) {
            var n = e.abs();
            if (!(n.t <= 0)) {
                var o = this.abs();
                if (o.t < n.t)
                    return null != t && t.fromInt(0),
                    void (null != r && this.copyTo(r));
                null == r && (r = Y());
                var i = Y()
                  , a = this.s
                  , l = e.s
                  , s = this.DB - _(n[n.t - 1]);
                s > 0 ? (n.lShiftTo(s, i),
                o.lShiftTo(s, r)) : (n.copyTo(i),
                o.copyTo(r));
                var c = i.t
                  , u = i[c - 1];
                if (0 != u) {
                    var d = u * (1 << this.F1) + (c > 1 ? i[c - 2] >> this.F2 : 0)
                      , A = this.FV / d
                      , p = (1 << this.F1) / d
                      , g = 1 << this.F2
                      , f = r.t
                      , h = f - c
                      , b = null == t ? Y() : t;
                    i.dlShiftTo(h, b),
                    r.compareTo(b) >= 0 && (r[r.t++] = 1,
                    r.subTo(b, r)),
                    z.ONE.dlShiftTo(c, b),
                    b.subTo(i, i);
                    while (i.t < c)
                        i[i.t++] = 0;
                    while (--h >= 0) {
                        var m = r[f -= 1] == u ? this.DM : Math.floor(r[f] * A + (r[f - 1] + g) * p);
                        if ((r[f] += i.am(0, m, r, h, 0, c)) < m) {
                            i.dlShiftTo(h, b),
                            r.subTo(b, r);
                            while (r[f] < --m)
                                r.subTo(b, r)
                        }
                    }
                    null != t && (r.drShiftTo(c, t),
                    a != l && z.ZERO.subTo(t, t)),
                    r.t = c,
                    r.clamp(),
                    s > 0 && r.rShiftTo(s, r),
                    a < 0 && z.ZERO.subTo(r, r)
                }
            }
        }
        function se(e) {
            var t = Y();
            return this.abs().divRemTo(e, null, t),
            this.s < 0 && t.compareTo(z.ZERO) > 0 && e.subTo(t, t),
            t
        }
        function ce(e) {
            this.m = e
        }
        function ue(e) {
            return e.s < 0 || e.compareTo(this.m) >= 0 ? e.mod(this.m) : e
        }
        function de(e) {
            return e
        }
        function Ae(e) {
            e.divRemTo(this.m, null, e)
        }
        function pe(e, t, r) {
            e.multiplyTo(t, r),
            this.reduce(r)
        }
        function ge(e, t) {
            e.squareTo(t),
            this.reduce(t)
        }
        function fe() {
            if (this.t < 1)
                return 0;
            var e = this[0];
            if (0 == (1 & e))
                return 0;
            var t = 3 & e;
            return t = t * (2 - (15 & e) * t) & 15,
            t = t * (2 - (255 & e) * t) & 255,
            t = t * (2 - ((65535 & e) * t & 65535)) & 65535,
            t = t * (2 - e * t % this.DV) % this.DV,
            t > 0 ? this.DV - t : -t
        }
        function he(e) {
            this.m = e,
            this.mp = e.invDigit(),
            this.mpl = 32767 & this.mp,
            this.mph = this.mp >> 15,
            this.um = (1 << e.DB - 15) - 1,
            this.mt2 = 2 * e.t
        }
        function be(e) {
            var t = Y();
            return e.abs().dlShiftTo(this.m.t, t),
            t.divRemTo(this.m, null, t),
            e.s < 0 && t.compareTo(z.ZERO) > 0 && this.m.subTo(t, t),
            t
        }
        function me(e) {
            var t = Y();
            return e.copyTo(t),
            this.reduce(t),
            t
        }
        function we(e) {
            while (e.t <= this.mt2)
                e[e.t++] = 0;
            for (var t = 0; t < this.m.t; t += 1) {
                var r = 32767 & e[t]
                  , n = r * this.mpl + ((r * this.mph + (e[t] >> 15) * this.mpl & this.um) << 15) & e.DM;
                r = t + this.m.t,
                e[r] += this.m.am(0, n, e, t, 0, this.m.t);
                while (e[r] >= e.DV)
                    e[r] -= e.DV,
                    e[r += 1] += 1
            }
            e.clamp(),
            e.drShiftTo(this.m.t, e),
            e.compareTo(this.m) >= 0 && e.subTo(this.m, e)
        }
        function ve(e, t) {
            e.squareTo(t),
            this.reduce(t)
        }
        function xe(e, t, r) {
            e.multiplyTo(t, r),
            this.reduce(r)
        }
        function ye() {
            return 0 == (this.t > 0 ? 1 & this[0] : this.s)
        }
        function Be(e, t) {
            if (e > 4294967295 || e < 1)
                return z.ONE;
            var r = Y()
              , n = Y()
              , o = t.convert(this)
              , i = _(e) - 1;
            o.copyTo(r);
            while (--i >= 0)
                if (t.sqrTo(r, n),
                (e & 1 << i) > 0)
                    t.mulTo(n, o, r);
                else {
                    var a = r;
                    r = n,
                    n = a
                }
            return t.revert(r)
        }
        function Ce(e, t) {
            var r;
            return r = e < 256 || t.isEven() ? new ce(t) : new he(t),
            this.exp(e, r)
        }
        function Ee() {
            var e = Y();
            return this.copyTo(e),
            e
        }
        function ke() {
            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 De() {
            return 0 == this.t ? this.s : this[0] << 24 >> 24
        }
        function Fe() {
            return 0 == this.t ? this.s : this[0] << 16 >> 16
        }
        function Pe(e) {
            return Math.floor(Math.LN2 * this.DB / Math.log(e))
        }
        function Oe() {
            return this.s < 0 ? -1 : this.t <= 0 || 1 == this.t && this[0] <= 0 ? 0 : 1
        }
        function Ie(e) {
            if (null == e && (e = 10),
            0 == this.signum() || e < 2 || e > 36)
                return "0";
            var t = this.chunkSize(e)
              , r = Math.pow(e, t)
              , n = V(r)
              , o = Y()
              , i = Y()
              , a = "";
            this.divRemTo(n, o, i);
            while (o.signum() > 0)
                a = (r + i.intValue()).toString(e).substr(1) + a,
                o.divRemTo(n, o, i);
            return i.intValue().toString(e) + a
        }
        function He(e, t) {
            this.fromInt(0),
            null == t && (t = 10);
            for (var r = this.chunkSize(t), n = Math.pow(t, r), o = !1, i = 0, a = 0, l = 0; l < e.length; l += 1) {
                var s = h(e, l);
                s < 0 ? "-" == e.charAt(l) && 0 == this.signum() && (o = !0) : (a = t * a + s,
                ++i >= r && (this.dMultiply(n),
                this.dAddOffset(a, 0),
                i = 0,
                a = 0))
            }
            i > 0 && (this.dMultiply(Math.pow(t, i)),
            this.dAddOffset(a, 0)),
            o && z.ZERO.subTo(this, this)
        }
        function Ne(e, t, r) {
            if ("number" === typeof t)
                if (e < 2)
                    this.fromInt(1);
                else {
                    this.fromNumber(e, r),
                    this.testBit(e - 1) || this.bitwiseTo(z.ONE.shiftLeft(e - 1), Qe, this),
                    this.isEven() && this.dAddOffset(1, 0);
                    while (!this.isProbablePrime(t))
                        this.dAddOffset(2, 0),
                        this.bitLength() > e && this.subTo(z.ONE.shiftLeft(e - 1), this)
                }
            else {
                var n = []
                  , i = 7 & e;
                if (n.length = 1 + (e >> 3),
                t.nextBytes(n),
                i > 0 ? n[0] &= (1 << i) - 1 : n[0] = 0,
                "FF" == b() && o) {
                    var a = new ArrayBuffer(32)
                      , l = new Int8Array(a);
                    for (o && o.getRandomValues(l),
                    r = 0; r < l.length; ++r)
                        n[r] = 255 & l[r]
                } else if ("IE11" == b()) {
                    a = new ArrayBuffer(32),
                    l = new Int8Array(a);
                    var s = o || o;
                    for (o && s.getRandomValues(l),
                    r = 0; r < l.length; ++r)
                        n[r] = 255 & l[r]
                } else if ("edge" == b()) {
                    a = new ArrayBuffer(32),
                    l = new Int8Array(a),
                    s = o || o;
                    for (o && s.getRandomValues(l),
                    r = 0; r < l.length; ++r)
                        n[r] = 255 & l[r]
                }
                this.fromString(n, 256)
            }
        }
        function Le() {
            var e = this.t
              , t = [];
            t[0] = this.s;
            var r, n = this.DB - e * this.DB % 8, o = 0;
            if (e-- > 0) {
                n < this.DB && (r = this[e] >> n) != (this.s & this.DM) >> n && (t[o++] = r | this.s << this.DB - n);
                while (e >= 0)
                    n < 8 ? (r = (this[e] & (1 << n) - 1) << 8 - n,
                    r |= this[e -= 1] >> (n += this.DB - 8)) : (r = this[e] >> (n -= 8) & 255,
                    n <= 0 && (n += this.DB,
                    e -= 1)),
                    0 != (128 & r) && (r |= -256),
                    0 == o && (128 & this.s) != (128 & r) && ++o,
                    (o > 0 || r != this.s) && (t[o++] = r)
            }
            return t
        }
        function Se(e) {
            return 0 == this.compareTo(e)
        }
        function ze(e) {
            return this.compareTo(e) < 0 ? this : e
        }
        function Ye(e) {
            return this.compareTo(e) > 0 ? this : e
        }
        function Me(e, t, r) {
            var n, o, i = Math.min(e.t, this.t);
            for (n = 0; n < i; n += 1)
                r[n] = t(this[n], e[n]);
            if (e.t < this.t) {
                for (o = e.s & this.DM,
                n = i; n < this.t; n += 1)
                    r[n] = t(this[n], o);
                r.t = this.t
            } else {
                for (o = this.s & this.DM,
                n = i; n < e.t; n += 1)
                    r[n] = t(o, e[n]);
                r.t = e.t
            }
            r.s = t(this.s, e.s),
            r.clamp()
        }
        function Xe(e, t) {
            return e & t
        }
        function Te(e) {
            var t = Y();
            return this.bitwiseTo(e, Xe, t),
            t
        }
        function Qe(e, t) {
            return e | t
        }
        function Ge(e) {
            var t = Y();
            return this.bitwiseTo(e, Qe, t),
            t
        }
        function je(e, t) {
            return e ^ t
        }
        function Re(e) {
            var t = Y();
            return this.bitwiseTo(e, je, t),
            t
        }
        function Ve(e, t) {
            return e & ~t
        }
        function We(e) {
            var t = Y();
            return this.bitwiseTo(e, Ve, t),
            t
        }
        function Ue() {
            for (var e = Y(), t = 0; t < this.t; t += 1)
                e[t] = this.DM & ~this[t];
            return e.t = this.t,
            e.s = ~this.s,
            e
        }
        function Ke(e) {
            var t = Y();
            return e < 0 ? this.rShiftTo(-e, t) : this.lShiftTo(e, t),
            t
        }
        function qe(e) {
            var t = Y();
            return e < 0 ? this.lShiftTo(-e, t) : this.rShiftTo(e, t),
            t
        }
        function Ze(e) {
            if (0 == e)
                return -1;
            var t = 0;
            return 0 == (65535 & e) && (e >>= 16,
            t += 16),
            0 == (255 & e) && (e >>= 8,
            t += 8),
            0 == (15 & e) && (e >>= 4,
            t += 4),
            0 == (3 & e) && (e >>= 2,
            t += 2),
            0 == (1 & e) && ++t,
            t
        }
        function Je() {
            for (var e = 0; e < this.t; e += 1)
                if (0 != this[e])
                    return e * this.DB + Ze(this[e]);
            return this.s < 0 ? this.t * this.DB : -1
        }
        function _e(e) {
            var t = 0;
            while (0 != e)
                e &= e - 1,
                t += 1;
            return t
        }
        function $e() {
            for (var e = 0, t = this.s & this.DM, r = 0; r < this.t; r += 1)
                e += _e(this[r] ^ t);
            return e
        }
        function et(e) {
            var t = Math.floor(e / this.DB);
            return t >= this.t ? 0 != this.s : 0 != (this[t] & 1 << e % this.DB)
        }
        function tt(e, t) {
            var r = z.ONE.shiftLeft(e);
            return this.bitwiseTo(r, t, r),
            r
        }
        function rt(e) {
            return this.changeBit(e, Qe)
        }
        function nt(e) {
            return this.changeBit(e, Ve)
        }
        function ot(e) {
            return this.changeBit(e, je)
        }
        function it(e, t) {
            var r = 0
              , n = 0
              , o = Math.min(e.t, this.t);
            while (r < o)
                n += this[r] + e[r],
                t[r++] = n & this.DM,
                n >>= this.DB;
            if (e.t < this.t) {
                n += e.s;
                while (r < this.t)
                    n += this[r],
                    t[r++] = n & this.DM,
                    n >>= this.DB;
                n += this.s
            } else {
                n += this.s;
                while (r < e.t)
                    n += e[r],
                    t[r++] = n & this.DM,
                    n >>= this.DB;
                n += e.s
            }
            t.s = n < 0 ? -1 : 0,
            n > 0 ? t[r++] = n : n < -1 && (t[r++] = this.DV + n),
            t.t = r,
            t.clamp()
        }
        function at(e) {
            var t = Y();
            return this.addTo(e, t),
            t
        }
        function lt(e) {
            var t = Y();
            return this.subTo(e, t),
            t
        }
        function st(e) {
            var t = Y();
            return this.multiplyTo(e, t),
            t
        }
        function ct() {
            var e = Y();
            return this.squareTo(e),
            e
        }
        function ut(e) {
            var t = Y();
            return this.divRemTo(e, t, null),
            t
        }
        function dt(e) {
            var t = Y();
            return this.divRemTo(e, null, t),
            t
        }
        function At(e) {
            var t = Y()
              , r = Y();
            return this.divRemTo(e, t, r),
            [t, r]
        }
        function pt(e) {
            this[this.t] = this.am(0, e - 1, this, 0, 0, this.t),
            ++this.t,
            this.clamp()
        }
        function gt(e, t) {
            if (0 != e) {
                while (this.t <= t)
                    this[this.t++] = 0;
                this[t] += e;
                while (this[t] >= this.DV)
                    this[t] -= this.DV,
                    ++t >= this.t && (this[this.t++] = 0),
                    ++this[t]
            }
        }
        function ft() {}
        function ht(e) {
            return e
        }
        function bt(e, t, r) {
            e.multiplyTo(t, r)
        }
        function mt(e, t) {
            e.squareTo(t)
        }
        function wt(e) {
            return this.exp(e, new ft)
        }
        function vt(e, t, r) {
            var n, o = Math.min(this.t + e.t, t);
            r.s = 0,
            r.t = o;
            while (o > 0)
                r[o -= 1] = 0;
            for (n = r.t - this.t; o < n; o += 1)
                r[o + this.t] = this.am(0, e[o], r, o, 0, this.t);
            for (n = Math.min(e.t, t); o < n; o += 1)
                this.am(0, e[o], r, o, 0, t - o);
            r.clamp()
        }
        function xt(e, t, r) {
            t -= 1;
            var n = r.t = this.t + e.t - t;
            r.s = 0;
            while (--n >= 0)
                r[n] = 0;
            for (n = Math.max(t - this.t, 0); n < e.t; n += 1)
                r[this.t + n - t] = this.am(t - n, e[n], r, 0, 0, this.t + n - t);
            r.clamp(),
            r.drShiftTo(1, r)
        }
        function yt(e) {
            this.r2 = Y(),
            this.q3 = Y(),
            z.ONE.dlShiftTo(2 * e.t, this.r2),
            this.mu = this.r2.divide(e),
            this.m = e
        }
        function Bt(e) {
            if (e.s < 0 || e.t > 2 * this.m.t)
                return e.mod(this.m);
            if (e.compareTo(this.m) < 0)
                return e;
            var t = Y();
            return e.copyTo(t),
            this.reduce(t),
            t
        }
        function Ct(e) {
            return e
        }
        function Et(e) {
            e.drShiftTo(this.m.t - 1, this.r2),
            e.t > this.m.t + 1 && (e.t = this.m.t + 1,
            e.clamp()),
            this.mu.multiplyUpperTo(this.r2, this.m.t + 1, this.q3),
            this.m.multiplyLowerTo(this.q3, this.m.t + 1, this.r2);
            while (e.compareTo(this.r2) < 0)
                e.dAddOffset(1, this.m.t + 1);
            e.subTo(this.r2, e);
            while (e.compareTo(this.m) >= 0)
                e.subTo(this.m, e)
        }
        function kt(e, t) {
            e.squareTo(t),
            this.reduce(t)
        }
        function Dt(e, t, r) {
            e.multiplyTo(t, r),
            this.reduce(r)
        }
        function Ft(e, t) {
            var r, n, o = e.bitLength(), i = V(1);
            if (o <= 0)
                return i;
            r = o < 18 ? 1 : o < 48 ? 3 : o < 144 ? 4 : o < 768 ? 5 : 6,
            n = o < 8 ? new ce(t) : t.isEven() ? new yt(t) : new he(t);
            var a = []
              , l = 3
              , s = r - 1
              , c = (1 << r) - 1;
            if (a[1] = n.convert(this),
            r > 1) {
                var u = Y();
                n.sqrTo(a[1], u);
                while (l <= c)
                    a[l] = Y(),
                    n.mulTo(u, a[l - 2], a[l]),
                    l += 2
            }
            var d, A, p = e.t - 1, g = !0, f = Y();
            o = _(e[p]) - 1;
            while (p >= 0) {
                o >= s ? d = e[p] >> o - s & c : (d = (e[p] & (1 << o + 1) - 1) << s - o,
                p > 0 && (d |= e[p - 1] >> this.DB + o - s)),
                l = r;
                while (0 == (1 & d))
                    d >>= 1,
                    l -= 1;
                if ((o -= l) < 0 && (o += this.DB,
                p -= 1),
                g)
                    a[d].copyTo(i),
                    g = !1;
                else {
                    while (l > 1)
                        n.sqrTo(i, f),
                        n.sqrTo(f, i),
                        l -= 2;
                    l > 0 ? n.sqrTo(i, f) : (A = i,
                    i = f,
                    f = A),
                    n.mulTo(f, a[d], i)
                }
                while (p >= 0 && 0 == (e[p] & 1 << o))
                    n.sqrTo(i, f),
                    A = i,
                    i = f,
                    f = A,
                    --o < 0 && (o = this.DB - 1,
                    p -= 1)
            }
            return n.revert(i)
        }
        function Pt(e) {
            var t = this.s < 0 ? this.negate() : this.clone()
              , r = e.s < 0 ? e.negate() : e.clone();
            if (t.compareTo(r) < 0) {
                var n = t;
                t = r,
                r = n
            }
            var o = t.getLowestSetBit()
              , i = r.getLowestSetBit();
            if (i < 0)
                return t;
            o < i && (i = o),
            i > 0 && (t.rShiftTo(i, t),
            r.rShiftTo(i, r));
            while (t.signum() > 0)
                (o = t.getLowestSetBit()) > 0 && t.rShiftTo(o, t),
                (o = r.getLowestSetBit()) > 0 && r.rShiftTo(o, r),
                t.compareTo(r) >= 0 ? (t.subTo(r, t),
                t.rShiftTo(1, t)) : (r.subTo(t, r),
                r.rShiftTo(1, r));
            return i > 0 && r.lShiftTo(i, r),
            r
        }
        function Ot(e) {
            if (e <= 0)
                return 0;
            var t = this.DV % e
              , r = this.s < 0 ? e - 1 : 0;
            if (this.t > 0)
                if (0 == t)
                    r = this[0] % e;
                else
                    for (var n = this.t - 1; n >= 0; n -= 1)
                        r = (t * r + this[n]) % e;
            return r
        }
        function It(e) {
            var t = e.isEven();
            if (this.isEven() && t || 0 == e.signum())
                return z.ZERO;
            var r = e.clone()
              , n = this.clone()
              , o = V(1)
              , i = V(0)
              , a = V(0)
              , l = V(1);
            while (0 != r.signum()) {
                while (r.isEven())
                    r.rShiftTo(1, r),
                    t ? (o.isEven() && i.isEven() || (o.addTo(this, o),
                    i.subTo(e, i)),
                    o.rShiftTo(1, o)) : i.isEven() || i.subTo(e, i),
                    i.rShiftTo(1, i);
                while (n.isEven())
                    n.rShiftTo(1, n),
                    t ? (a.isEven() && l.isEven() || (a.addTo(this, a),
                    l.subTo(e, l)),
                    a.rShiftTo(1, a)) : l.isEven() || l.subTo(e, l),
                    l.rShiftTo(1, l);
                r.compareTo(n) >= 0 ? (r.subTo(n, r),
                t && o.subTo(a, o),
                i.subTo(l, i)) : (n.subTo(r, n),
                t && a.subTo(o, a),
                l.subTo(i, l))
            }
            return 0 != n.compareTo(z.ONE) ? z.ZERO : l.compareTo(e) >= 0 ? l.subtract(e) : l.signum() < 0 ? (l.addTo(e, l),
            l.signum() < 0 ? l.add(e) : l) : l
        }
        ce.prototype.convert = ue,
        ce.prototype.revert = de,
        ce.prototype.reduce = Ae,
        ce.prototype.mulTo = pe,
        ce.prototype.sqrTo = ge,
        he.prototype.convert = be,
        he.prototype.revert = me,
        he.prototype.reduce = we,
        he.prototype.mulTo = xe,
        he.prototype.sqrTo = ve,
        z.prototype.copyTo = j,
        z.prototype.fromInt = R,
        z.prototype.fromString = W,
        z.prototype.clamp = U,
        z.prototype.dlShiftTo = ee,
        z.prototype.drShiftTo = te,
        z.prototype.lShiftTo = re,
        z.prototype.rShiftTo = ne,
        z.prototype.subTo = oe,
        z.prototype.multiplyTo = ie,
        z.prototype.squareTo = ae,
        z.prototype.divRemTo = le,
        z.prototype.invDigit = fe,
        z.prototype.isEven = ye,
        z.prototype.exp = Be,
        z.prototype.toString = K,
        z.prototype.negate = q,
        z.prototype.abs = Z,
        z.prototype.compareTo = J,
        z.prototype.bitLength = $,
        z.prototype.mod = se,
        z.prototype.modPowInt = Ce,
        z.ZERO = V(0),
        z.ONE = V(1),
        ft.prototype.convert = ht,
        ft.prototype.revert = ht,
        ft.prototype.mulTo = bt,
        ft.prototype.sqrTo = mt,
        yt.prototype.convert = Bt,
        yt.prototype.revert = Ct,
        yt.prototype.reduce = Et,
        yt.prototype.mulTo = Dt,
        yt.prototype.sqrTo = kt;
        var Ht = [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]
          , Nt = (1 << 26) / Ht[Ht.length - 1];
        function Lt(e) {
            var t, r = this.abs();
            if (1 == r.t && r[0] <= Ht[Ht.length - 1]) {
                for (t = 0; t < Ht.length; t += 1)
                    if (r[0] == Ht[t])
                        return !0;
                return !1
            }
            if (r.isEven())
                return !1;
            t = 1;
            while (t < Ht.length) {
                var n = Ht[t]
                  , o = t + 1;
                while (o < Ht.length && n < Nt)
                    n *= Ht[o++];
                n = r.modInt(n);
                while (t < o)
                    if (n % Ht[t++] == 0)
                        return !1
            }
            return r.millerRabin(e)
        }
        function St(e) {
            var t = this.subtract(z.ONE)
              , r = t.getLowestSetBit();
            if (r <= 0)
                return !1;
            var n = t.shiftRight(r);
            e = e + 1 >> 1,
            e > Ht.length && (e = Ht.length);
            for (var i = Y(), a = 0; a < e; a += 1) {
                o && i.fromInt(Ht[Math.floor(.001 * o.getRandomValues(new Uint8Array(1)) * Ht.length)]);
                var l = i.modPow(n, this);
                if (0 != l.compareTo(z.ONE) && 0 != l.compareTo(t)) {
                    var s = 1;
                    while (s++ < r && 0 != l.compareTo(t))
                        if (l = l.modPowInt(2, this),
                        0 == l.compareTo(z.ONE))
                            return !1;
                    if (0 != l.compareTo(t))
                        return !1
                }
            }
            return !0
        }
        function zt() {
            this.i = 0,
            this.j = 0,
            this.S = []
        }
        function Yt(e) {
            var t, r, n;
            for (t = 0; t < 256; t += 1)
                this.S[t] = t;
            for (r = 0,
            t = 0; t < 256; t += 1)
                r = r + this.S[t] + e[t % e.length] & 255,
                n = this.S[t],
                this.S[t] = this.S[r],
                this.S[r] = n;
            this.i = 0,
            this.j = 0
        }
        function Mt() {
            var e;
            return this.i = this.i + 1 & 255,
            this.j = this.j + this.S[this.i] & 255,
            e = this.S[this.i],
            this.S[this.i] = this.S[this.j],
            this.S[this.j] = e,
            this.S[e + this.S[this.i] & 255]
        }
        z.prototype.chunkSize = Pe,
        z.prototype.toRadix = Ie,
        z.prototype.fromRadix = He,
        z.prototype.fromNumber = Ne,
        z.prototype.bitwiseTo = Me,
        z.prototype.changeBit = tt,
        z.prototype.addTo = it,
        z.prototype.dMultiply = pt,
        z.prototype.dAddOffset = gt,
        z.prototype.multiplyLowerTo = vt,
        z.prototype.multiplyUpperTo = xt,
        z.prototype.modInt = Ot,
        z.prototype.millerRabin = St,
        z.prototype.clone = Ee,
        z.prototype.intValue = ke,
        z.prototype.byteValue = De,
        z.prototype.shortValue = Fe,
        z.prototype.signum = Oe,
        z.prototype.toByteArray = Le,
        z.prototype.equals = Se,
        z.prototype.min = ze,
        z.prototype.max = Ye,
        z.prototype.and = Te,
        z.prototype.or = Ge,
        z.prototype.xor = Re,
        z.prototype.andNot = We,
        z.prototype.not = Ue,
        z.prototype.shiftLeft = Ke,
        z.prototype.shiftRight = qe,
        z.prototype.getLowestSetBit = Je,
        z.prototype.bitCount = $e,
        z.prototype.testBit = et,
        z.prototype.setBit = rt,
        z.prototype.clearBit = nt,
        z.prototype.flipBit = ot,
        z.prototype.add = at,
        z.prototype.subtract = lt,
        z.prototype.multiply = st,
        z.prototype.divide = ut,
        z.prototype.remainder = dt,
        z.prototype.divideAndRemainder = At,
        z.prototype.modPow = Ft,
        z.prototype.modInverse = It,
        z.prototype.pow = wt,
        z.prototype.gcd = Pt,
        z.prototype.isProbablePrime = Lt,
        z.prototype.square = ct,
        zt.prototype.init = Yt,
        zt.prototype.next = Mt;
        var Xt, Tt, Qt, Gt, jt = 256;
        function Rt(e) {
            Tt[Qt++] ^= 255 & e,
            Tt[Qt++] ^= e >> 8 & 255,
            Tt[Qt++] ^= e >> 16 & 255,
            Tt[Qt++] ^= e >> 24 & 255,
            Qt >= jt && (Qt -= jt)
        }
        function Vt() {
            Rt((new Date).getTime())
        }
        if (null == Tt) {
            var Wt;
            if (Tt = [],
            Qt = 0,
            o && o.getRandomValues) {
                var Ut = new Uint8Array(32);
                for (o.getRandomValues(Ut),
                Wt = 0; Wt < 32; Wt += 1)
                    Tt[Qt++] = Ut[Wt]
            }
            if ("Netscape" == navigator.appName && navigator.appVersion < "5" && o) {
                var Kt = o.random(32);
                for (Wt = 0; Wt < Kt.length; Wt += 1)
                    Tt[Qt++] = 255 & Kt.charCodeAt(Wt)
            }
            while (Qt < jt)
                o && (Wt = Math.floor(65536 * o.getRandomValues(new Uint8Array(1)) * .001)),
                Tt[Qt++] = Wt >>> 8,
                Tt[Qt++] = 255 & Wt;
            Qt = 0,
            Vt()
        }
        function qt() {
            if (null == Xt) {
                for (Vt(),
                Xt = w(),
                Xt.init(Tt),
                Qt = 0; Qt < Tt.length; Qt += 1)
                    Tt[Qt] = 0;
                Qt = 0
            }
            return Xt.next()
        }
        function Zt(e) {
            var t;
            for (t = 0; t < e.length; t += 1)
                e[t] = qt()
        }
        function Jt(e) {
            return e == this || this.q.equals(e.q) && this.x.equals(e.x)
        }
        function _t() {
            return this.x
        }
        function $t() {
            return new v(this.q,this.x.negate().mod(this.q))
        }
        function er(e) {
            return new v(this.q,this.x.add(e.toBigInteger()).mod(this.q))
        }
        function tr(e) {
            return new v(this.q,this.x.subtract(e.toBigInteger()).mod(this.q))
        }
        function rr(e) {
            return new v(this.q,this.x.multiply(e.toBigInteger()).mod(this.q))
        }
        function nr() {
            return new v(this.q,this.x.square().mod(this.q))
        }
        function or(e) {
            return new v(this.q,this.x.multiply(e.toBigInteger().modInverse(this.q)).mod(this.q))
        }
        function ir(e, t, r, n) {
            this.curve = e,
            this.x = t,
            this.y = r,
            this.z = null == n ? z.ONE : n,
            this.zinv = null
        }
        function ar() {
            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))
        }
        function lr() {
            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))
        }
        function sr(e) {
            return e == this || (this.isInfinity() ? e.isInfinity() : e.isInfinity() ? this.isInfinity() : (t = e.y.toBigInteger().multiply(this.z).subtract(this.y.toBigInteger().multiply(e.z)).mod(this.curve.q),
            !!t.equals(z.ZERO) && (r = e.x.toBigInteger().multiply(this.z).subtract(this.x.toBigInteger().multiply(e.z)).mod(this.curve.q),
            r.equals(z.ZERO))));
            var t, r
        }
        function cr() {
            return null == this.x && null == this.y || this.z.equals(z.ZERO) && !this.y.toBigInteger().equals(z.ZERO)
        }
        function ur() {
            return new ir(this.curve,this.x,this.y.negate(),this.z)
        }
        function dr(e) {
            if (this.isInfinity())
                return e;
            if (e.isInfinity())
                return this;
            var t = e.y.toBigInteger().multiply(this.z).subtract(this.y.toBigInteger().multiply(e.z)).mod(this.curve.q)
              , r = e.x.toBigInteger().multiply(this.z).subtract(this.x.toBigInteger().multiply(e.z)).mod(this.curve.q);
            if (z.ZERO.equals(r))
                return z.ZERO.equals(t) ? this.twice() : this.curve.getInfinity();
            var n = new z("3")
              , o = this.x.toBigInteger()
              , i = this.y.toBigInteger()
              , a = (e.x.toBigInteger(),
            e.y.toBigInteger(),
            r.square())
              , l = a.multiply(r)
              , s = o.multiply(a)
              , c = t.square().multiply(this.z)
              , u = c.subtract(s.shiftLeft(1)).multiply(e.z).subtract(l).multiply(r).mod(this.curve.q)
              , d = s.multiply(n).multiply(t).subtract(i.multiply(l)).subtract(c.multiply(t)).multiply(e.z).add(t.multiply(l)).mod(this.curve.q)
              , A = l.multiply(this.z).multiply(e.z).mod(this.curve.q);
            return new ir(this.curve,this.curve.fromBigInteger(u),this.curve.fromBigInteger(d),A)
        }
        function Ar() {
            if (this.isInfinity())
                return this;
            if (0 == this.y.toBigInteger().signum())
                return this.curve.getInfinity();
            var e = new z("3")
              , t = this.x.toBigInteger()
              , r = this.y.toBigInteger()
              , n = r.multiply(this.z)
              , o = n.multiply(r).mod(this.curve.q)
              , i = this.curve.a.toBigInteger()
              , a = t.square().multiply(e);
            z.ZERO.equals(i) || (a = a.add(this.z.square().multiply(i))),
            a = a.mod(this.curve.q);
            var l = a.square().subtract(t.shiftLeft(3).multiply(o)).shiftLeft(1).multiply(n).mod(this.curve.q)
              , s = a.multiply(e).multiply(t).subtract(o.shiftLeft(1)).shiftLeft(2).multiply(o).subtract(a.square().multiply(a)).mod(this.curve.q)
              , c = n.square().multiply(n).shiftLeft(3).mod(this.curve.q);
            return new ir(this.curve,this.curve.fromBigInteger(l),this.curve.fromBigInteger(s),c)
        }
        function pr(e) {
            if (this.isInfinity())
                return this;
            if (0 == e.signum())
                return this.curve.getInfinity();
            var t, r = e, n = r.multiply(new z("3")), o = this.negate(), i = this;
            for (t = n.bitLength() - 2; t > 0; t -= 1) {
                i = i.twice();
                var a = n.testBit(t)
                  , l = r.testBit(t);
                a != l && (i = i.add(a ? this : o))
            }
            return i
        }
        function gr(e, t, r) {
            var n;
            n = e.bitLength() > r.bitLength() ? e.bitLength() - 1 : r.bitLength() - 1;
            var o = this.curve.getInfinity()
              , i = this.add(t);
            while (n >= 0)
                o = o.twice(),
                e.testBit(n) ? o = r.testBit(n) ? o.add(i) : o.add(this) : r.testBit(n) && (o = o.add(t)),
                n -= 1;
            return o
        }
        function fr(e, t, r) {
            this.q = e,
            this.a = this.fromBigInteger(t),
            this.b = this.fromBigInteger(r),
            this.infinity = new ir(this,null,null)
        }
        function hr() {
            return this.q
        }
        function br() {
            return this.a
        }
        function mr() {
            return this.b
        }
        function wr(e) {
            return e == this || this.q.equals(e.q) && this.a.equals(e.a) && this.b.equals(e.b)
        }
        function vr() {
            return this.infinity
        }
        function xr(e) {
            return new v(this.q,e)
        }
        function yr(e) {
            switch (parseInt(e.substr(0, 2), 16)) {
            case 0:
                return this.infinity;
            case 2:
            case 3:
                return null;
            case 4:
            case 6:
            case 7:
                var t = (e.length - 2) / 2
                  , r = e.substr(2, t)
                  , n = e.substr(t + 2, t);
                return new ir(this,this.fromBigInteger(new z(r,16)),this.fromBigInteger(new z(n,16)));
            default:
                return null
            }
        }
        function Br() {
            this.BYTE_LENGTH = 64,
            this.xBuf = [],
            this.xBufOff = 0,
            this.byteCount = 0,
            this.DIGEST_LENGTH = 32,
            this.v0 = [1937774191, 1226093241, 388252375, -628488704, -1452330820, 372324522, -477237683, -1325724082],
            this.v = [0, 0, 0, 0, 0, 0, 0, 0],
            this.v_ = [0, 0, 0, 0, 0, 0, 0, 0],
            this.X0 = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
            this.X = [68],
            this.xOff = 0,
            this.T_00_15 = 2043430169,
            this.T_16_63 = 2055708042,
            arguments.length > 0 ? this.InitDigest(arguments[0]) : this.Init()
        }
        function Cr(e, t) {
            return e << t | e >>> -t
        }
        function Er(e) {
            if (e > 2147483647 || e < -2147483648) {
                var t = 4294967295 & e;
                return t > 2147483647 ? (t = 2147483647 & e,
                t ^= 2147483647,
                -(t + 1)) : t
            }
            return e
        }
        function kr(e) {
            this.ct = 1,
            this.p2 = null,
            this.sm3keybase = null,
            this.sm3c3 = null,
            this.key = new Array(32),
            this.keyOff = 0,
            this.cipherMode = "undefined" !== typeof e ? e : SM2CipherMode.C1C3C2
        }
        function Dr(e, t) {
            if (void 0 != e && void 0 != t && "" != e && "" != t && 130 == t.length) {
                var r = S.enc.Utf8.parse(e)
                  , n = t
                  , o = n.substr(0, 2);
                if ("04" == o) {
                    n.length > 128 && (n = n.substr(n.length - 128));
                    var i = n.substr(0, 64)
                      , a = n.substr(64)
                      , l = new kr(1)
                      , s = l.CreatePoint(i, a);
                    if (void 0 != s) {
                        r = l.GetWords(r.toString());
                        var c = l.Encrypt(s, r);
                        return "04" + c
                    }
                }
            }
        }
        function Fr(e, t) {
            if (void 0 != e && void 0 != t && "" != e && "" != t && 130 == t.length) {
                var r = S.enc.Utf8.parse(e)
                  , n = t
                  , o = n.substr(0, 2);
                if ("04" == o) {
                    n.length > 128 && (n = n.substr(n.length - 128));
                    var i = n.substr(0, 64)
                      , a = n.substr(64)
                      , l = new kr(0)
                      , s = l.CreatePoint(i, a);
                    if (void 0 != s) {
                        r = l.GetWords(r.toString());
                        var c = l.Encrypt(s, r);
                        return c
                    }
                }
            }
        }
        function Pr(e, t) {
            if (void 0 != e && void 0 != t && "" != e && "" != t && 64 == t.length && !(e.length <= 194)) {
                var r = e.substr(0, 2);
                if ("04" == r) {
                    e = e.substr(2);
                    var n = new z(t,16)
                      , o = new kr(1)
                      , i = o.Decrypt(n, e);
                    return i
                }
            }
        }
        function Or(e) {
            if (void 0 != e && "" != e) {
                var t = S.enc.Utf8.parse(e)
                  , r = new Br;
                t = r.GetWords(t.toString()),
                r.BlockUpdate(t, 0, t.length);
                var n = new Array(32);
                r.DoFinal(n, 0);
                var o = r.GetHex(n).toString();
                return o
            }
        }
        function Ir() {
            var e = new Gt.crypto.ECDSA({
                curve: "SM2"
            });
            return e.generateKeyPairHex()
        }
        function Hr() {
            var e = new m
              , t = new Array(16);
            e.nextBytes(t);
            var r = (new Br).GetHex(t);
            return r.toString()
        }
        m.prototype.nextBytes = Zt,
        v.prototype.equals = Jt,
        v.prototype.toBigInteger = _t,
        v.prototype.negate = $t,
        v.prototype.add = er,
        v.prototype.subtract = tr,
        v.prototype.multiply = rr,
        v.prototype.square = nr,
        v.prototype.divide = or,
        ir.prototype.getX = ar,
        ir.prototype.getY = lr,
        ir.prototype.equals = sr,
        ir.prototype.isInfinity = cr,
        ir.prototype.negate = ur,
        ir.prototype.add = dr,
        ir.prototype.twice = Ar,
        ir.prototype.multiply = pr,
        ir.prototype.multiplyTwo = gr,
        fr.prototype.getQ = hr,
        fr.prototype.getA = br,
        fr.prototype.getB = mr,
        fr.prototype.equals = wr,
        fr.prototype.getInfinity = vr,
        fr.prototype.fromBigInteger = xr,
        fr.prototype.decodePointHex = yr,
        v.prototype.getByteLength = function() {
            return Math.floor((this.toBigInteger().bitLength() + 7) / 8)
        }
        ,
        ir.prototype.getEncoded = function(e) {
            var t = function(e, t) {
                var r = e.toByteArrayUnsigned();
                if (t < r.length)
                    r = r.slice(r.length - t);
                else
                    while (t > r.length)
                        r.unshift(0);
                return r
            }
              , r = this.getX().toBigInteger()
              , n = this.getY().toBigInteger()
              , o = t(r, 32);
            return e ? n.isEven() ? o.unshift(2) : o.unshift(3) : (o.unshift(4),
            o = o.concat(t(n, 32))),
            o
        }
        ,
        ir.decodeFrom = function(e, t) {
            t[0];
            var r = t.length - 1
              , n = t.slice(1, 1 + r / 2)
              , o = t.slice(1 + r / 2, 1 + r);
            n.unshift(0),
            o.unshift(0);
            var i = new z(n)
              , a = new z(o);
            return new ir(e,e.fromBigInteger(i),e.fromBigInteger(a))
        }
        ,
        ir.decodeFromHex = function(e, t) {
            t.substr(0, 2);
            var r = t.length - 2
              , n = t.substr(2, r / 2)
              , o = t.substr(2 + r / 2, r / 2)
              , i = new z(n,16)
              , a = new z(o,16);
            return new ir(e,e.fromBigInteger(i),e.fromBigInteger(a))
        }
        ,
        ir.prototype.add2D = function(e) {
            if (this.isInfinity())
                return e;
            if (e.isInfinity())
                return this;
            if (this.x.equals(e.x))
                return this.y.equals(e.y) ? this.twice() : this.curve.getInfinity();
            var t = e.x.subtract(this.x)
              , r = e.y.subtract(this.y)
              , n = r.divide(t)
              , o = n.square().subtract(this.x).subtract(e.x)
              , i = n.multiply(this.x.subtract(o)).subtract(this.y);
            return new ir(this.curve,o,i)
        }
        ,
        ir.prototype.twice2D = function() {
            if (this.isInfinity())
                return this;
            if (0 == this.y.toBigInteger().signum())
                return this.curve.getInfinity();
            var e = this.curve.fromBigInteger(z.valueOf(2))
              , t = this.curve.fromBigInteger(z.valueOf(3))
              , r = this.x.square().multiply(t).add(this.curve.a).divide(this.y.multiply(e))
              , n = r.square().subtract(this.x.multiply(e))
              , o = r.multiply(this.x.subtract(n)).subtract(this.y);
            return new ir(this.curve,n,o)
        }
        ,
        ir.prototype.multiply2D = function(e) {
            if (this.isInfinity())
                return this;
            if (0 == e.signum())
                return this.curve.getInfinity();
            var t, r = e, n = r.multiply(new z("3")), o = this.negate(), i = this;
            for (t = n.bitLength() - 2; t > 0; t -= 1) {
                i = i.twice();
                var a = n.testBit(t)
                  , l = r.testBit(t);
                a != l && (i = i.add2D(a ? this : o))
            }
            return i
        }
        ,
        ir.prototype.isOnCurve = function() {
            var e = this.getX().toBigInteger()
              , t = this.getY().toBigInteger()
              , r = this.curve.getA().toBigInteger()
              , n = this.curve.getB().toBigInteger()
              , o = this.curve.getQ()
              , i = t.multiply(t).mod(o)
              , a = e.multiply(e).multiply(e).add(r.multiply(e)).add(n).mod(o);
            return i.equals(a)
        }
        ,
        ir.prototype.toString = function() {
            return "(" + this.getX().toBigInteger().toString() + "," + this.getY().toBigInteger().toString() + ")"
        }
        ,
        ir.prototype.validate = function() {
            var e = this.curve.getQ();
            if (this.isInfinity())
                throw new Error("Point is at infinity.");
            var t = this.getX().toBigInteger()
              , r = this.getY().toBigInteger();
            if (t.compareTo(z.ONE) < 0 || t.compareTo(e.subtract(z.ONE)) > 0)
                throw new Error("x coordinate out of bounds");
            if (r.compareTo(z.ONE) < 0 || r.compareTo(e.subtract(z.ONE)) > 0)
                throw new Error("y coordinate out of bounds");
            if (!this.isOnCurve())
                throw new Error("Point is not on the curve.");
            if (this.multiply(e).isInfinity())
                throw new Error("Point is not a scalar multiple of G.");
            return !0
        }
        ,
        "undefined" !== typeof Gt && Gt || (Gt = {}),
        "undefined" !== typeof Gt.crypto && Gt.crypto || (Gt.crypto = {}),
        Gt.crypto.ECDSA = function(e) {
            var t = "secp256r1"
              , r = new m;
            this.type = "EC",
            this.getBigRandom = function(e) {
                return new z(e.bitLength(),r).mod(e.subtract(z.ONE)).add(z.ONE)
            }
            ,
            this.setNamedCurve = function(e) {
                this.ecparams = Gt.crypto.ECParameterDB.getByName(e),
                this.prvKeyHex = null,
                this.pubKeyHex = null,
                this.curveName = e
            }
            ,
            this.setPrivateKeyHex = function(e) {
                this.isPrivate = !0,
                this.prvKeyHex = e
            }
            ,
            this.setPublicKeyHex = function(e) {
                this.isPublic = !0,
                this.pubKeyHex = e
            }
            ,
            this.getPublicKeyXYHex = function() {
                var e = this.pubKeyHex;
                if ("04" !== e.substr(0, 2))
                    throw "this method supports uncompressed format(04) only";
                var t = this.ecparams.keylen / 4;
                if (e.length !== 2 + 2 * t)
                    throw "malformed public key hex length";
                var r = {};
                return r.x = e.substr(2, t),
                r.y = e.substr(2 + t),
                r
            }
            ,
            this.getShortNISTPCurveName = function() {
                var e = this.curveName;
                return "secp256r1" === e || "NIST P-256" === e || "P-256" === e || "prime256v1" === e ? "P-256" : "secp384r1" === e || "NIST P-384" === e || "P-384" === e ? "P-384" : null
            }
            ,
            this.generateKeyPairHex = function() {
                var e = this.ecparams["n"]
                  , t = this.getBigRandom(e)
                  , r = this.ecparams["G"].multiply(t)
                  , n = r.getX().toBigInteger()
                  , o = r.getY().toBigInteger()
                  , i = this.ecparams["keylen"] / 4
                  , a = ("0000000000" + t.toString(16)).slice(-i)
                  , l = ("0000000000" + n.toString(16)).slice(-i)
                  , s = ("0000000000" + o.toString(16)).slice(-i)
                  , c = "04" + l + s;
                return this.setPrivateKeyHex(a),
                this.setPublicKeyHex(c),
                {
                    ecprvhex: a,
                    ecpubhex: c
                }
            }
            ,
            this.signWithMessageHash = function(e) {
                return this.signHex(e, this.prvKeyHex)
            }
            ,
            this.signHex = function(e, t) {
                var r = new z(t,16)
                  , n = this.ecparams["n"]
                  , o = new z(e,16);
                do {
                    var i = this.getBigRandom(n)
                      , a = this.ecparams["G"]
                      , l = a.multiply(i)
                      , s = l.getX().toBigInteger().mod(n)
                } while (s.compareTo(z.ZERO) <= 0);
                var c = i.modInverse(n).multiply(o.add(r.multiply(s))).mod(n);
                return Gt.crypto.ECDSA.biRSSigToASN1Sig(s, c)
            }
            ,
            this.sign = function(e, t) {
                var r = t
                  , n = this.ecparams["n"]
                  , o = z.fromByteArrayUnsigned(e);
                do {
                    var i = this.getBigRandom(n)
                      , a = this.ecparams["G"]
                      , l = a.multiply(i)
                      , s = l.getX().toBigInteger().mod(n)
                } while (s.compareTo(z.ZERO) <= 0);
                var c = i.modInverse(n).multiply(o.add(r.multiply(s))).mod(n);
                return this.serializeSig(s, c)
            }
            ,
            this.verifyWithMessageHash = function(e, t) {
                return this.verifyHex(e, t, this.pubKeyHex)
            }
            ,
            this.verifyHex = function(e, t, r) {
                var n, o, i, a = Gt.crypto.ECDSA.parseSigHex(t);
                n = a.r,
                o = a.s,
                i = ir.decodeFromHex(this.ecparams["curve"], r);
                var l = new z(e,16);
                return this.verifyRaw(l, n, o, i)
            }
            ,
            this.verify = function(e, t, r) {
                var o, i, a;
                if (Bitcoin.Util.isArray(t)) {
                    var l = this.parseSig(t);
                    o = l.r,
                    i = l.s
                } else {
                    if ("object" !== n(t) || !t.r || !t.s)
                        throw "Invalid value for signature";
                    o = t.r,
                    i = t.s
                }
                if (r instanceof ir)
                    a = r;
                else {
                    if (!Bitcoin.Util.isArray(r))
                        throw "Invalid format for pubkey value, must be byte array or ECPointFp";
                    a = ir.decodeFrom(this.ecparams["curve"], r)
                }
                var s = z.fromByteArrayUnsigned(e);
                return this.verifyRaw(s, o, i, a)
            }
            ,
            this.verifyRaw = function(e, t, r, n) {
                var o = this.ecparams["n"]
                  , i = this.ecparams["G"];
                if (t.compareTo(z.ONE) < 0 || t.compareTo(o) >= 0)
                    return !1;
                if (r.compareTo(z.ONE) < 0 || r.compareTo(o) >= 0)
                    return !1;
                var a = r.modInverse(o)
                  , l = e.multiply(a).mod(o)
                  , s = t.multiply(a).mod(o)
                  , c = i.multiply(l).add(n.multiply(s))
                  , u = c.getX().toBigInteger().mod(o);
                return u.equals(t)
            }
            ,
            this.serializeSig = function(e, t) {
                var r = e.toByteArraySigned()
                  , n = t.toByteArraySigned()
                  , o = [];
                return o.push(2),
                o.push(r.length),
                o = o.concat(r),
                o.push(2),
                o.push(n.length),
                o = o.concat(n),
                o.unshift(o.length),
                o.unshift(48),
                o
            }
            ,
            this.parseSig = function(e) {
                var t;
                if (48 != e[0])
                    throw new Error("Signature not a valid DERSequence");
                if (t = 2,
                2 != e[t])
                    throw new Error("First element in signature must be a DERInteger");
                var r = e.slice(t + 2, t + 2 + e[t + 1]);
                if (t += 2 + e[t + 1],
                2 != e[t])
                    throw new Error("Second element in signature must be a DERInteger");
                var n = e.slice(t + 2, t + 2 + e[t + 1]);
                t += 2 + e[t + 1];
                var o = z.fromByteArrayUnsigned(r)
                  , i = z.fromByteArrayUnsigned(n);
                return {
                    r: o,
                    s: i
                }
            }
            ,
            this.parseSigCompact = function(e) {
                if (65 !== e.length)
                    throw "Signature has the wrong length";
                var t = e[0] - 27;
                if (t < 0 || t > 7)
                    throw "Invalid signature type";
                var r = this.ecparams["n"]
                  , n = z.fromByteArrayUnsigned(e.slice(1, 33)).mod(r)
                  , o = z.fromByteArrayUnsigned(e.slice(33, 65)).mod(r);
                return {
                    r: n,
                    s: o,
                    i: t
                }
            }
            ,
            void 0 !== e && void 0 !== e["curve"] && (this.curveName = e["curve"]),
            void 0 === this.curveName && (this.curveName = t),
            this.setNamedCurve(this.curveName),
            void 0 !== e && (void 0 !== e["prv"] && this.setPrivateKeyHex(e["prv"]),
            void 0 !== e["pub"] && this.setPublicKeyHex(e["pub"]))
        }
        ,
        Gt.crypto.ECDSA.parseSigHex = function(e) {
            var t = Gt.crypto.ECDSA.parseSigHexInHexRS(e)
              , r = new z(t.r,16)
              , n = new z(t.s,16);
            return {
                r: r,
                s: n
            }
        }
        ,
        Gt.crypto.ECDSA.parseSigHexInHexRS = function(e) {
            if ("30" != e.substr(0, 2))
                throw "signature is not a ASN.1 sequence";
            var t = ASN1HEX.getPosArrayOfChildren_AtObj(e, 0);
            if (2 != t.length)
                throw "number of signature ASN.1 sequence elements seem wrong";
            var r = t[0]
              , n = t[1];
            if ("02" != e.substr(r, 2))
                throw "1st item of sequene of signature is not ASN.1 integer";
            if ("02" != e.substr(n, 2))
                throw "2nd item of sequene of signature is not ASN.1 integer";
            var o = ASN1HEX.getHexOfV_AtObj(e, r)
              , i = ASN1HEX.getHexOfV_AtObj(e, n);
            return {
                r: o,
                s: i
            }
        }
        ,
        Gt.crypto.ECDSA.asn1SigToConcatSig = function(e) {
            var t = Gt.crypto.ECDSA.parseSigHexInHexRS(e)
              , r = t.r
              , n = t.s;
            if ("00" == r.substr(0, 2) && r.length / 2 * 8 % 128 == 8 && (r = r.substr(2)),
            "00" == n.substr(0, 2) && n.length / 2 * 8 % 128 == 8 && (n = n.substr(2)),
            r.length / 2 * 8 % 128 != 0)
                throw "unknown ECDSA sig r length error";
            if (n.length / 2 * 8 % 128 != 0)
                throw "unknown ECDSA sig s length error";
            return r + n
        }
        ,
        Gt.crypto.ECDSA.concatSigToASN1Sig = function(e) {
            if (e.length / 2 * 8 % 128 != 0)
                throw "unknown ECDSA concatinated r-s sig  length error";
            var t = e.substr(0, e.length / 2)
              , r = e.substr(e.length / 2);
            return Gt.crypto.ECDSA.hexRSSigToASN1Sig(t, r)
        }
        ,
        Gt.crypto.ECDSA.hexRSSigToASN1Sig = function(e, t) {
            var r = new z(e,16)
              , n = new z(t,16);
            return Gt.crypto.ECDSA.biRSSigToASN1Sig(r, n)
        }
        ,
        Gt.crypto.ECDSA.biRSSigToASN1Sig = function(e, t) {
            var r = new Gt.asn1.DERInteger({
                bigint: e
            })
              , n = new Gt.asn1.DERInteger({
                bigint: t
            })
              , o = new Gt.asn1.DERSequence({
                array: [r, n]
            });
            return o.getEncodedHex()
        }
        ,
        function() {
            var e = S
              , t = e.lib
              , r = t.WordArray
              , n = t.Hasher
              , o = e.algo
              , i = []
              , a = o.SM3 = n.extend({
                _doReset: function() {
                    this._hash = new r.init([1937774191, 1226093241, 388252375, 3666478592, 2842636476, 372324522, 3817729613, 2969243214])
                },
                _doProcessBlock: function(e, t) {
                    for (var r = this._hash.words, n = r[0], o = r[1], a = r[2], l = r[3], s = r[4], c = 0; c < 80; c += 1) {
                        if (c < 16)
                            i[c] = 0 | e[t + c];
                        else {
                            var u = i[c - 3] ^ i[c - 8] ^ i[c - 14] ^ i[c - 16];
                            i[c] = u << 1 | u >>> 31
                        }
                        var d = (n << 5 | n >>> 27) + s + i[c];
                        d += c < 20 ? 1518500249 + (o & a | ~o & l) : c < 40 ? 1859775393 + (o ^ a ^ l) : c < 60 ? (o & a | o & l | a & l) - 1894007588 : (o ^ a ^ l) - 899497514,
                        s = l,
                        l = a,
                        a = o << 30 | o >>> 2,
                        o = n,
                        n = d
                    }
                    r[0] = r[0] + n | 0,
                    r[1] = r[1] + o | 0,
                    r[2] = r[2] + a | 0,
                    r[3] = r[3] + l | 0,
                    r[4] = r[4] + s | 0
                },
                _doFinalize: function() {
                    var e = this._data
                      , t = e.words
                      , r = 8 * this._nDataBytes
                      , n = 8 * e.sigBytes;
                    return t[n >>> 5] |= 128 << 24 - n % 32,
                    t[14 + (n + 64 >>> 9 << 4)] = Math.floor(r / 4294967296),
                    t[15 + (n + 64 >>> 9 << 4)] = r,
                    e.sigBytes = 4 * t.length,
                    this._process(),
                    this._hash
                },
                clone: function() {
                    var e = n.clone.call(this);
                    return e._hash = this._hash.clone(),
                    e
                }
            });
            e.SM3 = n._createHelper(a),
            e.HmacSM3 = n._createHmacHelper(a)
        }(),
        Br.prototype = {
            Init: function() {
                this.xBuf = [0, 0, 0, 0],
                this.Reset()
            },
            InitDigest: function(e) {
                this.xBuf = [e.xBuf.length],
                Array.Copy(e.xBuf, 0, this.xBuf, 0, e.xBuf.length),
                this.xBufOff = e.xBufOff,
                this.byteCount = e.byteCount,
                Array.Copy(e.X, 0, this.X, 0, e.X.length),
                this.xOff = e.xOff,
                Array.Copy(e.v, 0, this.v, 0, e.v.length)
            },
            GetDigestSize: function() {
                return this.DIGEST_LENGTH
            },
            Reset: function() {
                this.byteCount = 0,
                this.xBufOff = 0,
                Array.Clear(this.xBuf, 0, this.xBuf.length),
                Array.Copy(this.v0, 0, this.v, 0, this.v0.length),
                this.xOff = 0,
                Array.Copy(this.X0, 0, this.X, 0, this.X0.length)
            },
            GetByteLength: function() {
                return this.BYTE_LENGTH
            },
            ProcessBlock: function() {
                var e, t = this.X, r = [64];
                for (e = 16; e < 68; e += 1)
                    t[e] = this.P1(t[e - 16] ^ t[e - 9] ^ Cr(t[e - 3], 15)) ^ Cr(t[e - 13], 7) ^ t[e - 6];
                for (e = 0; e < 64; e += 1)
                    r[e] = t[e] ^ t[e + 4];
                var n, o, i, a, l, s = this.v, c = this.v_;
                for (Array.Copy(s, 0, c, 0, this.v0.length),
                e = 0; e < 16; e += 1)
                    l = Cr(c[0], 12),
                    n = l + c[4] + Cr(this.T_00_15, e),
                    n = Cr(n, 7),
                    o = n ^ l,
                    i = this.FF_00_15(c[0], c[1], c[2]) + c[3] + o + r[e],
                    a = this.GG_00_15(c[4], c[5], c[6]) + c[7] + n + t[e],
                    c[3] = c[2],
                    c[2] = Cr(c[1], 9),
                    c[1] = c[0],
                    c[0] = i,
                    c[7] = c[6],
                    c[6] = Cr(c[5], 19),
                    c[5] = c[4],
                    c[4] = this.P0(a);
                for (e = 16; e < 64; e += 1)
                    l = Cr(c[0], 12),
                    n = l + c[4] + Cr(this.T_16_63, e),
                    n = Cr(n, 7),
                    o = n ^ l,
                    i = this.FF_16_63(c[0], c[1], c[2]) + c[3] + o + r[e],
                    a = this.GG_16_63(c[4], c[5], c[6]) + c[7] + n + t[e],
                    c[3] = c[2],
                    c[2] = Cr(c[1], 9),
                    c[1] = c[0],
                    c[0] = i,
                    c[7] = c[6],
                    c[6] = Cr(c[5], 19),
                    c[5] = c[4],
                    c[4] = this.P0(a);
                for (e = 0; e < 8; e += 1)
                    s[e] ^= c[e];
                this.xOff = 0,
                Array.Copy(this.X0, 0, this.X, 0, this.X0.length)
            },
            ProcessWord: function(e, t) {
                var r = e[t] << 24;
                r |= (255 & e[t += 1]) << 16,
                r |= (255 & e[t += 1]) << 8,
                r |= 255 & e[t += 1],
                this.X[this.xOff] = r,
                16 == ++this.xOff && this.ProcessBlock()
            },
            ProcessLength: function(e) {
                this.xOff > 14 && this.ProcessBlock(),
                this.X[14] = this.URShiftLong(e, 32),
                this.X[15] = 4294967295 & e
            },
            IntToBigEndian: function(e, t, r) {
                t[r] = e >>> 24 & 255,
                t[r += 1] = e >>> 16 & 255,
                t[r += 1] = e >>> 8 & 255,
                t[r += 1] = 255 & e
            },
            DoFinal: function(e, t) {
                this.Finish();
                for (var r = 0; r < 8; r += 1)
                    this.IntToBigEndian(this.v[r], e, t + 4 * r);
                return this.Reset(),
                this.DIGEST_LENGTH
            },
            Update: function(e) {
                this.xBuf[this.xBufOff++] = e,
                this.xBufOff == this.xBuf.length && (this.ProcessWord(this.xBuf, 0),
                this.xBufOff = 0),
                this.byteCount++
            },
            BlockUpdate: function(e, t, r) {
                while (0 != this.xBufOff && r > 0)
                    this.Update(e[t]),
                    t += 1,
                    r -= 1;
                while (r > this.xBuf.length)
                    this.ProcessWord(e, t),
                    t += this.xBuf.length,
                    r -= this.xBuf.length,
                    this.byteCount += this.xBuf.length;
                while (r > 0)
                    this.Update(e[t]),
                    t += 1,
                    r -= 1
            },
            Finish: function() {
                var e = this.byteCount << 3;
                this.Update(128);
                while (0 != this.xBufOff)
                    this.Update(0);
                this.ProcessLength(e),
                this.ProcessBlock()
            },
            ROTATE: function(e, t) {
                return e << t | this.URShift(e, 32 - t)
            },
            P0: function(e) {
                return e ^ Cr(e, 9) ^ Cr(e, 17)
            },
            P1: function(e) {
                return e ^ Cr(e, 15) ^ Cr(e, 23)
            },
            FF_00_15: function(e, t, r) {
                return e ^ t ^ r
            },
            FF_16_63: function(e, t, r) {
                return e & t | e & r | t & r
            },
            GG_00_15: function(e, t, r) {
                return e ^ t ^ r
            },
            GG_16_63: function(e, t, r) {
                return e & t | ~e & r
            },
            URShift: function(e, t) {
                return console.error(e),
                (e > Int32.maxValue || e < Int32.minValue) && (console.error(e),
                e = Er(e)),
                e >= 0 ? e >> t : (e >> t) + (2 << ~t)
            },
            URShiftLong: function(e, t) {
                var r, n = new z;
                if (n.fromInt(e),
                n.signum() >= 0)
                    r = n.shiftRight(t).intValue();
                else {
                    var o = new z;
                    o.fromInt(2);
                    var i = ~t
                      , a = "";
                    if (i < 0) {
                        for (var l = 64 + i, s = 0; s < l; s += 1)
                            a += "0";
                        var c = new z;
                        c.fromInt(e >> t);
                        var u = new z("10" + a,2);
                        a = u.toRadix(10);
                        var d = u.add(c);
                        r = d.toRadix(10)
                    } else
                        a = o.shiftLeft(~t).intValue(),
                        r = (e >> t) + a
                }
                return r
            },
            GetZ: function(e, t, r) {
                var n = S.enc.Utf8.parse(r)
                  , o = 4 * n.words.length * 8;
                this.Update(o >> 8 & 255),
                this.Update(255 & o);
                var i = this.GetWords(n.toString());
                this.BlockUpdate(i, 0, i.length);
                var a = this.GetWords(e.curve.a.toBigInteger().toRadix(16))
                  , l = this.GetWords(e.curve.b.toBigInteger().toRadix(16))
                  , s = this.GetWords(e.getX().toBigInteger().toRadix(16))
                  , c = this.GetWords(e.getY().toBigInteger().toRadix(16))
                  , u = this.GetWords(t.substr(0, 64))
                  , d = this.GetWords(t.substr(64, 64));
                this.BlockUpdate(a, 0, a.length),
                this.BlockUpdate(l, 0, l.length),
                this.BlockUpdate(s, 0, s.length),
                this.BlockUpdate(c, 0, c.length),
                this.BlockUpdate(u, 0, u.length),
                this.BlockUpdate(d, 0, d.length);
                var A = [this.GetDigestSize()];
                return this.DoFinal(A, 0),
                A
            },
            GetWords: function(e) {
                for (var t = [], r = e.length, n = 0; n < r; n += 2)
                    t[t.length] = parseInt(e.substr(n, 2), 16);
                return t
            },
            GetHex: function(e) {
                for (var t = [], r = 0, n = 0; n < 2 * e.length; n += 2)
                    t[n >>> 3] |= parseInt(e[r]) << 24 - n % 8 * 4,
                    r += 1;
                var o = new S.lib.WordArray.init(t,e.length);
                return o
            }
        },
        Array.Clear = function(e, t, r) {
            for (var n in e)
                e[n] = null
        }
        ,
        Array.Copy = function(e, t, r, n, o) {
            for (var i = e.slice(t, t + o), a = 0; a < i.length; a += 1)
                r[n] = i[a],
                n += 1
        }
        ,
        window.Int32 = {
            minValue: -parseInt("10000000000000000000000000000000", 2),
            maxValue: parseInt("1111111111111111111111111111111", 2),
            parse: function(e) {
                if (e < this.minValue) {
                    for (var t = new Number(-e), r = t.toString(2), n = r.substr(r.length - 31, 31), o = "", i = 0; i < n.length; i += 1) {
                        var a = n.substr(i, 1);
                        o += "0" == a ? "1" : "0"
                    }
                    var l = parseInt(o, 2);
                    return l + 1
                }
                if (e > this.maxValue) {
                    for (t = Number(e),
                    r = t.toString(2),
                    n = r.substr(r.length - 31, 31),
                    o = "",
                    i = 0; i < n.length; i += 1) {
                        a = n.substr(i, 1);
                        o += "0" == a ? "1" : "0"
                    }
                    l = parseInt(o, 2);
                    return -(l + 1)
                }
                return e
            },
            parseByte: function(e) {
                if (e > 255) {
                    var t = 255 & e;
                    return t
                }
                if (e < -256) {
                    t = 255 & e;
                    return t ^= 255,
                    t + 1
                }
                return e
            }
        },
        Gt.crypto.SM3withSM2 = function(e) {
            var t = "sm2"
              , r = new m;
            this.type = "SM2",
            this.getBigRandom = function(e) {
                return new z(e.bitLength(),r).mod(e.subtract(z.ONE)).add(z.ONE)
            }
            ,
            this.setNamedCurve = function(e) {
                this.ecparams = Gt.crypto.ECParameterDB.getByName(e),
                this.prvKeyHex = null,
                this.pubKeyHex = null,
                this.curveName = e
            }
            ,
            this.setPrivateKeyHex = function(e) {
                this.isPrivate = !0,
                this.prvKeyHex = e
            }
            ,
            this.setPublicKeyHex = function(e) {
                this.isPublic = !0,
                this.pubKeyHex = e
            }
            ,
            this.generateKeyPairHex = function() {
                var e = this.ecparams["n"]
                  , t = this.getBigRandom(e)
                  , r = this.ecparams["G"].multiply(t)
                  , n = r.getX().toBigInteger()
                  , o = r.getY().toBigInteger()
                  , i = this.ecparams["keylen"] / 4
                  , a = ("0000000000" + t.toString(16)).slice(-i)
                  , l = ("0000000000" + n.toString(16)).slice(-i)
                  , s = ("0000000000" + o.toString(16)).slice(-i)
                  , c = "04" + l + s;
                return this.setPrivateKeyHex(a),
                this.setPublicKeyHex(c),
                {
                    ecprvhex: a,
                    ecpubhex: c
                }
            }
            ,
            this.signWithMessageHash = function(e) {
                return this.signHex(e, this.prvKeyHex)
            }
            ,
            this.signHex = function(e, t) {
                var r = new z(t,16)
                  , n = this.ecparams["n"]
                  , o = new z(e,16)
                  , i = null
                  , a = null
                  , l = null
                  , s = null
                  , c = r;
                do {
                    do {
                        var u = this.generateKeyPairHex();
                        i = new z(u.ecprvhex,16);
                        var d = u.ecpubhex;
                        a = ir.decodeFromHex(this.ecparams["curve"], d),
                        l = o.add(a.getX().toBigInteger()),
                        l = l.mod(n)
                    } while (l.equals(z.ZERO) || l.add(i).equals(n));
                    var A = c.add(z.ONE);
                    A = A.modInverse(n),
                    s = l.multiply(c),
                    s = i.subtract(s).mod(n),
                    s = A.multiply(s).mod(n)
                } while (s.equals(z.ZERO));
                var p = l.toRadix(16)
                  , g = s.toRadix(16);
                if (64 != p.length) {
                    r = 64 - p.length;
                    for (var f = 0; f < r; f++)
                        p = "0" + p
                }
                if (64 != g.length)
                    for (r = 64 - g.length,
                    f = 0; f < r; f++)
                        g = "0" + g;
                return p + g
            }
            ,
            this.sign = function(e, t) {
                var r = t
                  , n = this.ecparams["n"]
                  , o = z.fromByteArrayUnsigned(e);
                do {
                    var i = this.getBigRandom(n)
                      , a = this.ecparams["G"]
                      , l = a.multiply(i)
                      , s = l.getX().toBigInteger().mod(n)
                } while (s.compareTo(z.ZERO) <= 0);
                var c = i.modInverse(n).multiply(o.add(r.multiply(s))).mod(n);
                return this.serializeSig(s, c)
            }
            ,
            this.verifyWithMessageHash = function(e, t) {
                return this.verifyHex(e, t, this.pubKeyHex)
            }
            ,
            this.verifyHex = function(e, t, r) {
                var n, o;
                n = t.substr(0, 64),
                o = t.substr(64, 64);
                var i, a = new z(n,16), l = new z(o,16);
                i = ir.decodeFromHex(this.ecparams["curve"], r);
                var s = new z(e,16);
                return this.verifyRaw(s, a, l, i)
            }
            ,
            this.verify = function(e, t, r) {
                var o, i, a;
                if (Bitcoin.Util.isArray(t)) {
                    var l = this.parseSig(t);
                    o = l.r,
                    i = l.s
                } else {
                    if ("object" !== n(t) || !t.r || !t.s)
                        throw "Invalid value for signature";
                    o = t.r,
                    i = t.s
                }
                if (r instanceof ir)
                    a = r;
                else {
                    if (!Bitcoin.Util.isArray(r))
                        throw "Invalid format for pubkey value, must be byte array or ECPointFp";
                    a = ir.decodeFrom(this.ecparams["curve"], r)
                }
                var s = z.fromByteArrayUnsigned(e);
                return this.verifyRaw(s, o, i, a)
            }
            ,
            this.verifyRaw = function(e, t, r, n) {
                var o = this.ecparams["n"]
                  , i = this.ecparams["G"]
                  , a = t.add(r).mod(o);
                if (a.equals(z.ZERO))
                    return !1;
                if (t.compareTo(z.ONE) < 0 || t.compareTo(o) >= 0)
                    return !1;
                if (r.compareTo(z.ONE) < 0 || r.compareTo(o) >= 0)
                    return !1;
                if (0 == n.isOnCurve())
                    return !1;
                var l = i.multiply(r);
                l = l.add(n.multiply(a));
                var s = e.add(l.getX().toBigInteger()).mod(o);
                return t.equals(s)
            }
            ,
            this.serializeSig = function(e, t) {
                var r = e.toByteArraySigned()
                  , n = t.toByteArraySigned()
                  , o = [];
                return o.push(2),
                o.push(r.length),
                o = o.concat(r),
                o.push(2),
                o.push(n.length),
                o = o.concat(n),
                o.unshift(o.length),
                o.unshift(48),
                o
            }
            ,
            this.parseSig = function(e) {
                var t;
                if (48 != e[0])
                    throw new Error("Signature not a valid DERSequence");
                if (t = 2,
                2 != e[t])
                    throw new Error("First element in signature must be a DERInteger");
                var r = e.slice(t + 2, t + 2 + e[t + 1]);
                if (t += 2 + e[t + 1],
                2 != e[t])
                    throw new Error("Second element in signature must be a DERInteger");
                var n = e.slice(t + 2, t + 2 + e[t + 1]);
                t += 2 + e[t + 1];
                var o = z.fromByteArrayUnsigned(r)
                  , i = z.fromByteArrayUnsigned(n);
                return {
                    r: o,
                    s: i
                }
            }
            ,
            this.parseSigCompact = function(e) {
                if (65 !== e.length)
                    throw "Signature has the wrong length";
                var t = e[0] - 27;
                if (t < 0 || t > 7)
                    throw "Invalid signature type";
                var r = this.ecparams["n"]
                  , n = z.fromByteArrayUnsigned(e.slice(1, 33)).mod(r)
                  , o = z.fromByteArrayUnsigned(e.slice(33, 65)).mod(r);
                return {
                    r: n,
                    s: o,
                    i: t
                }
            }
            ,
            void 0 !== e && void 0 !== e["curve"] && (this.curveName = e["curve"]),
            void 0 === this.curveName && (this.curveName = t),
            this.setNamedCurve(this.curveName),
            void 0 !== e && (void 0 !== e["prv"] && this.setPrivateKeyHex(e["prv"]),
            void 0 !== e["pub"] && this.setPublicKeyHex(e["pub"]))
        }
        ,
        Gt.crypto.ECParameterDB = new function() {
            var e = {}
              , t = {};
            function r(e) {
                return new z(e,16)
            }
            this.getByName = function(r) {
                var n = r;
                if ("undefined" !== typeof t[n] && (n = t[r]),
                "undefined" !== typeof e[n])
                    return e[n];
                throw "unregistered EC curve name: " + n
            }
            ,
            this.regist = function(n, o, i, a, l, s, c, u, d, A, p, g) {
                e[n] = {};
                var f = r(i)
                  , h = r(a)
                  , b = r(l)
                  , m = r(s)
                  , w = r(c)
                  , v = new fr(f,h,b)
                  , x = v.decodePointHex("04" + u + d);
                e[n]["name"] = n,
                e[n]["keylen"] = o,
                e[n]["curve"] = v,
                e[n]["G"] = x,
                e[n]["n"] = m,
                e[n]["h"] = w,
                e[n]["oid"] = p,
                e[n]["info"] = g;
                for (var y = 0; y < A.length; y += 1)
                    t[A[y]] = n
            }
        }
        ,
        Gt.crypto.ECParameterDB.regist("secp128r1", 128, "FFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFC", "E87579C11079F43DD824993C2CEE5ED3", "FFFFFFFE0000000075A30D1B9038A115", "1", "161FF7528B899B2D0C28607CA52C5B86", "CF5AC8395BAFEB13C02DA292DDED7A83", [], "", "secp128r1 : SECG curve over a 128 bit prime field"),
        Gt.crypto.ECParameterDB.regist("secp160k1", 160, "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFAC73", "0", "7", "0100000000000000000001B8FA16DFAB9ACA16B6B3", "1", "3B4C382CE37AA192A4019E763036F4F5DD4D7EBB", "938CF935318FDCED6BC28286531733C3F03C4FEE", [], "", "secp160k1 : SECG curve over a 160 bit prime field"),
        Gt.crypto.ECParameterDB.regist("secp160r1", 160, "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFC", "1C97BEFC54BD7A8B65ACF89F81D4D4ADC565FA45", "0100000000000000000001F4C8F927AED3CA752257", "1", "4A96B5688EF573284664698968C38BB913CBFC82", "23A628553168947D59DCC912042351377AC5FB32", [], "", "secp160r1 : SECG curve over a 160 bit prime field"),
        Gt.crypto.ECParameterDB.regist("secp192k1", 192, "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFEE37", "0", "3", "FFFFFFFFFFFFFFFFFFFFFFFE26F2FC170F69466A74DEFD8D", "1", "DB4FF10EC057E9AE26B07D0280B7F4341DA5D1B1EAE06C7D", "9B2F2F6D9C5628A7844163D015BE86344082AA88D95E2F9D", []),
        Gt.crypto.ECParameterDB.regist("secp192r1", 192, "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFC", "64210519E59C80E70FA7E9AB72243049FEB8DEECC146B9B1", "FFFFFFFFFFFFFFFFFFFFFFFF99DEF836146BC9B1B4D22831", "1", "188DA80EB03090F67CBF20EB43A18800F4FF0AFD82FF1012", "07192B95FFC8DA78631011ED6B24CDD573F977A11E794811", []),
        Gt.crypto.ECParameterDB.regist("secp224r1", 224, "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000001", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFE", "B4050A850C04B3ABF54132565044B0B7D7BFD8BA270B39432355FFB4", "FFFFFFFFFFFFFFFFFFFFFFFFFFFF16A2E0B8F03E13DD29455C5C2A3D", "1", "B70E0CBD6BB4BF7F321390B94A03C1D356C21122343280D6115C1D21", "BD376388B5F723FB4C22DFE6CD4375A05A07476444D5819985007E34", []),
        Gt.crypto.ECParameterDB.regist("secp256k1", 256, "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F", "0", "7", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141", "1", "79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798", "483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8", []),
        Gt.crypto.ECParameterDB.regist("secp256r1", 256, "FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFC", "5AC635D8AA3A93E7B3EBBD55769886BC651D06B0CC53B0F63BCE3C3E27D2604B", "FFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551", "1", "6B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C296", "4FE342E2FE1A7F9B8EE7EB4A7C0F9E162BCE33576B315ECECBB6406837BF51F5", ["NIST P-256", "P-256", "prime256v1"]),
        Gt.crypto.ECParameterDB.regist("secp384r1", 384, "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFF0000000000000000FFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFF0000000000000000FFFFFFFC", "B3312FA7E23EE7E4988E056BE3F82D19181D9C6EFE8141120314088F5013875AC656398D8A2ED19D2A85C8EDD3EC2AEF", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC7634D81F4372DDF581A0DB248B0A77AECEC196ACCC52973", "1", "AA87CA22BE8B05378EB1C71EF320AD746E1D3B628BA79B9859F741E082542A385502F25DBF55296C3A545E3872760AB7", "3617de4a96262c6f5d9e98bf9292dc29f8f41dbd289a147ce9da3113b5f0b8c00a60b1ce1d7e819d7a431d7c90ea0e5f", ["NIST P-384", "P-384"]),
        Gt.crypto.ECParameterDB.regist("secp521r1", 521, "1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC", "051953EB9618E1C9A1F929A21A0B68540EEA2DA725B99B315F3B8B489918EF109E156193951EC7E937B1652C0BD3BB1BF073573DF883D2C34F1EF451FD46B503F00", "1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA51868783BF2F966B7FCC0148F709A5D03BB5C9B8899C47AEBB6FB71E91386409", "1", "C6858E06B70404E9CD9E3ECB662395B4429C648139053FB521F828AF606B4D3DBAA14B5E77EFE75928FE1DC127A2FFA8DE3348B3C1856A429BF97E7E31C2E5BD66", "011839296a789a3bc0045c8a5fb42c7d1bd998f54449579b446817afbd17273e662c97ee72995ef42640c550b9013fad0761353c7086a272c24088be94769fd16650", ["NIST P-521", "P-521"]),
        Gt.crypto.ECParameterDB.regist("sm2", 256, "FFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFF", "FFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFC", "28E9FA9E9D9F5E344D5A9E4BCF6509A7F39789F515AB8F92DDBCBD414D940E93", "FFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFF7203DF6B21C6052B53BBF40939D54123", "1", "32C4AE2C1F1981195F9904466A39C9948FE30BBFF2660BE1715A4589334C74C7", "BC3736A2F4F6779C59BDCEE36B692153D0A9877CC62A474002DF32E52139F0A0", ["sm2", "SM2"]),
        kr.prototype = {
            getHexString: function(e) {
                return 0 == (1 & e.length) ? e : "0" + e
            },
            hex2Byte: function(e) {
                if (e > 127 || e < -128) {
                    var t = 255 & e;
                    return t > 127 ? (t = 127 & e,
                    t ^= 127,
                    -(t + 1)) : t
                }
                return e
            },
            Reset: function() {
                this.sm3keybase = new Br,
                this.sm3c3 = new Br;
                var e = this.p2.getX().toBigInteger().toRadix(16)
                  , t = this.p2.getY().toBigInteger().toRadix(16);
                if (64 != e.length)
                    for (var r = 64 - e.length, n = 0; n < r; n++)
                        e = "0" + e;
                if (64 != t.length && 64 != t.length)
                    for (r = 64 - t.length,
                    n = 0; n < r; n++)
                        t = "0" + t;
                var o = this.GetWords(e)
                  , i = this.GetWords(t);
                this.sm3c3.BlockUpdate(o, 0, o.length),
                this.sm3keybase.BlockUpdate(o, 0, o.length),
                this.sm3keybase.BlockUpdate(i, 0, i.length),
                this.ct = 1,
                this.NextKey()
            },
            NextKey: function() {
                var e = new Br(this.sm3keybase);
                e.Update(this.ct >> 24 & 255),
                e.Update(this.ct >> 16 & 255),
                e.Update(this.ct >> 8 & 255),
                e.Update(255 & this.ct),
                e.DoFinal(this.key, 0),
                this.keyOff = 0,
                this.ct++
            },
            InitEncipher: function(e) {
                var t = null
                  , r = null
                  , n = new Gt.crypto.ECDSA({
                    curve: "sm2"
                })
                  , o = n.generateKeyPairHex();
                t = new z(o.ecprvhex,16);
                var i = o.ecpubhex;
                return r = ir.decodeFromHex(n.ecparams["curve"], i),
                this.p2 = e.multiply(t),
                this.Reset(),
                r
            },
            EncryptBlock: function(e) {
                this.sm3c3.BlockUpdate(e, 0, e.length);
                for (var t = 0; t < e.length; t++)
                    this.keyOff == this.key.length && this.NextKey(),
                    e[t] ^= this.key[this.keyOff++]
            },
            InitDecipher: function(e, t) {
                this.p2 = t.multiply(e),
                this.Reset()
            },
            DecryptBlock: function(e) {
                for (var t = 0; t < e.length; t++)
                    this.keyOff == this.key.length && this.NextKey(),
                    e[t] ^= this.key[this.keyOff++];
                this.sm3c3.BlockUpdate(e, 0, e.length)
            },
            Dofinal: function(e) {
                var t = this.p2.getY().toBigInteger().toRadix(16);
                if (64 != t.length && 64 != t.length)
                    for (var r = 64 - t.length, n = 0; n < r; n++)
                        t = "0" + t;
                var o = this.GetWords(t);
                this.sm3c3.BlockUpdate(o, 0, o.length),
                this.sm3c3.DoFinal(e, 0),
                this.Reset()
            },
            Encrypt: function(e, t) {
                var r = new Array(t.length);
                Array.Copy(t, 0, r, 0, t.length);
                var n = this.InitEncipher(e);
                this.EncryptBlock(r);
                var o, i = new Array(32);
                this.Dofinal(i);
                var a = n.getX().toBigInteger().toRadix(16)
                  , l = n.getY().toBigInteger().toRadix(16);
                if (64 != a.length)
                    for (var s = 64 - a.length, c = 0; c < s; c++)
                        a = "0" + a;
                if (64 != l.length && 64 != l.length)
                    for (s = 64 - l.length,
                    c = 0; c < s; c++)
                        l = "0" + l;
                switch (this.cipherMode) {
                case SM2CipherMode.C1C3C2:
                    o = a + l + this.GetHex(i).toString() + this.GetHex(r).toString();
                    break;
                case SM2CipherMode.C1C2C3:
                    o = n.getX().toBigInteger().toRadix(16) + n.getY().toBigInteger().toRadix(16) + this.GetHex(r).toString() + this.GetHex(i).toString();
                    break;
                default:
                    throw new Error("[SM2:Decrypt]invalid type cipherMode(" + this.cipherMode + ")")
                }
                return o
            },
            GetWords: function(e) {
                for (var t = [], r = e.length, n = 0; n < r; n += 2)
                    t[t.length] = parseInt(e.substr(n, 2), 16);
                return t
            },
            GetHex: function(e) {
                for (var t = new Array(32), r = 0, n = 0; n < 2 * e.length; n += 2)
                    t[n >>> 3] |= parseInt(e[r]) << 24 - n % 8 * 4,
                    r++;
                var o = new S.lib.WordArray.init(t,e.length);
                return o
            },
            Decrypt: function(e, t) {
                var r, n = t, o = n.substr(0, 64), i = n.substr(0 + o.length, 64), a = new Gt.crypto.ECDSA({
                    curve: "sm2"
                }), l = a.ecparams["n"];
                if (!(e.compareTo(l.subtract(z.ONE)) > 0) && !(e.compareTo(z.ONE) < 0)) {
                    switch (this.cipherMode) {
                    case SM2CipherMode.C1C3C2:
                        r = n.substr(o.length + i.length, 64);
                        var s = n.substr(o.length + i.length + 64);
                        break;
                    case SM2CipherMode.C1C2C3:
                        s = n.substr(o.length + i.length, n.length - o.length - i.length - 64);
                        r = n.substr(n.length - 64);
                        break;
                    default:
                        throw new Error("[SM2:Decrypt]invalid type cipherMode(" + this.cipherMode + ")")
                    }
                    var c = this.GetWords(s)
                      , u = this.CreatePoint(o, i);
                    if (void 0 != u) {
                        this.InitDecipher(e, u),
                        this.DecryptBlock(c);
                        var d = new Array(32);
                        this.Dofinal(d);
                        var A = this.GetHex(d).toString().toLowerCase() == r.toLowerCase();
                        if (A) {
                            var p = this.GetHex(c)
                              , g = S.enc.Utf8.stringify(p);
                            return g
                        }
                        throw new Error("[SM2:Decrypt] C3 is not match!")
                    }
                }
            },
            CreatePoint: function(e, t) {
                var r = new Gt.crypto.ECDSA({
                    curve: "sm2"
                })
                  , n = (r.ecparams["curve"],
                "04" + e + t)
                  , o = ir.decodeFromHex(r.ecparams["curve"], n);
                if (0 != o.isOnCurve())
                    return o
            }
        },
        window.SM2CipherMode = {
            C1C2C3: 0,
            C1C3C2: 1
        }
    },
});



// 这是我们需要的参数
var c1 = {
  key: "getSm4Key",
  value: function() {
     return Object(n["h"])()
}
var c2 = {
       key: "encryptTest",
       value: function(e, t) {
       var r = {}
        , o = this.getSm2Key()
        , i = Object(n["e"])(e);
        return r["sm4"] = Object(n["b"])(e + i, o.ecpubhex),
        r["sm2"] = Object(n["g"])(o.ecprvhex, t),
        r
  }
}
// 我只验证i = Object(n["e"])(e); 其他的可以自己验证

shuibingmeiyue = window.shuibingmeiyue
yy = shuibingmeiyue("c99b")["e"]
xixi = '{"paramData":{"infoCodes":["jyjgFlfgzcwj"],"marketId":"PXBXJ"},"timeStamp":1740991885140}'
console.log("这是一个测试---",yy(xixi))

在此致谢

提示信息 - 吾爱破解 - 52pojie.cn

相关文章:

  • 歌叽歌叽V2.0.5--原创音乐制作工具安装与部署
  • linux 如何查看gpu使用情况
  • 深入解析Tiktokenizer:大语言模型中核心分词技术的原理与架构
  • Java分支和循环结构详解/while/do while /for循环详解/死循环/Random用法
  • 如何优化Android应用的性能
  • leetcode113-路径总和II
  • STM32---FreeRTOS中断管理试验
  • WebP2P技术在嵌入式设备中的应用:EasyRTC音视频通话SDK如何实现高效通信?
  • Baklib内容中台赋能企业智管
  • FastGPT 源码:如何实现 “问题优化“
  • 【Canny 边缘检测详细讲解】
  • 深度学习-大白话解释循环神经网络RNN
  • C高级linux
  • 基于51单片机的汽车防撞系统proteus仿真
  • 《人工智能与民生》: llama3.2-vision 的初稿
  • React Native 实现滑一点点内容区块指示器也滑一点点
  • linux启程指南——体悟虚拟开源天地的漫步翩翩
  • <03.04>八股文
  • HttpServletRequest、ServerHttpRequest 和 ServerWebRequest作用详解
  • K8S学习之基础九:pod的生命周期
  • 佛山定制建站公司推荐/网站收录查询爱站
  • 企业网站东莞网站建设制作/网站底部友情链接
  • 品牌展示设计网站/企业qq
  • 英文响应式网站建设/什么平台可以免费发广告
  • 泸州中泸建设集团有限公司网站/网站设计与网页制作
  • 桂林dj网站/产品网络营销分析