杆树 发表于 4 天前

js逆向实战之某妈妈返回数据解密

声明:本篇文章仅用于知识分享,不得用于其他用途

网址:aHR0cHM6Ly93d3cuY2hhbm1hbWEuY29tL3Byb21vdGlvblJhbmsvdGlrR29vZHNTYWxlLz9jYXRlZ29yeV9pZD0tMQ==
解密逻辑


[*]刷新网页,抓流量包。


[*]data中的数据一看肯定是加过密的,需要知道其解密逻辑,data这个词比较普遍,直接搜索肯定会出现很多,可以看到is_encrypt和data属于同一个组的,直接搜索is_encrypt。

总共4处,上面两处的data是定值,不是我们想要的,下面两处无法判断,全部打上断点。
[*]ctrl+shift+r刷新网页,断在了最后一处。

看看这一行代码,出现了很多赋值操作,重点关注c.data。

第一次触发的这个没有出现想要的数据,一直释放断点,直到c.data的数据如下。

[*]从这行代码可知c.data赋给了i、o、r、s,往下看几行代码,却没有跟这几个变量相关的。只能单步调试了,if判断不成立,直接进入return语句。

[*](0,Z.ZP)看着比较突兀,找到其定义的地方,打个断点。

[*]需要解密的数据传给了p函数,return中又把它传给了m函数,定位m函数,可以很明显看到是个AES解密了。

[*]打断点,知道了e和填充方式,n的定义在其上面,三要素齐全就可以解密了。拷贝代码,梭一把。
var s = require("crypto-js")
var e = "要解密的数据"

function decrypt(e) {
    var n = s.enc.Utf8.parse(27..toString(36).toLowerCase().split("").map((function (t) {
            return String.fromCharCode(t.charCodeAt() + -39)
      }
    )).join("") + 24901..toString(36).toLowerCase() + 33..toString(36).toLowerCase().split("").map((function (t) {
            return String.fromCharCode(t.charCodeAt() + -39)
      }
    )).join("") + 976..toString(36).toLowerCase() + 20..toString(36).toLowerCase().split("").map((function (t) {
            return String.fromCharCode(t.charCodeAt() + -39)
      }
    )).join("") + function () {
      var t = Array.prototype.slice.call(arguments)
            , e = t.shift();
      return t.reverse().map((function (t, n) {
                return String.fromCharCode(t - e - 24 - n)
            }
      )).join("")
    }(10, 127, 154, 91, 151, 91, 136) + 11..toString(36).toLowerCase() + 13..toString(36).toLowerCase().split("").map((function (t) {
            return String.fromCharCode(t.charCodeAt() + -13)
      }
    )).join("")),
      a = s.AES.decrypt(e, n, {
            mode: s.mode.ECB,
            padding: s.pad.Pkcs7
      })
    console.log(a);
}

decrypt(e);运行结果如下,是个字节组。

8. 继续看源代码,a还经过l函数的处理,得到的结果o还传给了c.ungzip函数处理。

将l函数弄出来,都是些位运算,o的结果是个数组。


9. 还是得经过c.ungzip函数的处理,定位。

看这个函数里的内容,看不到一点处理的方式。先拷出来,看缺少什么补什么吧。(注:这个过程非常痛苦,一环套一环,花费了我半天的功夫,代码能运行了,但是没有结果)
完整代码如下:
var CryptoJS = require("crypto-js")
var e = "";

function decrypt(e) {

    var n = CryptoJS.enc.Utf8.parse(27..toString(36).toLowerCase().split("").map((function (t) {
            return String.fromCharCode(t.charCodeAt() + -39)
      }
    )).join("") + 24901..toString(36).toLowerCase() + 33..toString(36).toLowerCase().split("").map((function (t) {
            return String.fromCharCode(t.charCodeAt() + -39)
      }
    )).join("") + 976..toString(36).toLowerCase() + 20..toString(36).toLowerCase().split("").map((function (t) {
            return String.fromCharCode(t.charCodeAt() + -39)
      }
    )).join("") + function () {
      var t = Array.prototype.slice.call(arguments)
            , e = t.shift();
      return t.reverse().map((function (t, n) {
                return String.fromCharCode(t - e - 24 - n)
            }
      )).join("")
    }(10, 127, 154, 91, 151, 91, 136) + 11..toString(36).toLowerCase() + 13..toString(36).toLowerCase().split("").map((function (t) {
            return String.fromCharCode(t.charCodeAt() + -13)
      }
    )).join(""));

    a = CryptoJS.AES.decrypt(e, n, {
      mode: CryptoJS.mode.ECB,
      padding: CryptoJS.pad.Pkcs7
    });
    o = l(a);
    r = ungzip(o, {
      to: "string"
    })
    console.log(r);
}

const t = (e, t) => Object.prototype.hasOwnProperty.call(e, t);

function assign(e) {
    const n = Array.prototype.slice.call(arguments, 1);
    while (n.length) {
      const r = n.shift();
      if (r) {
            if ("object" !== typeof r)
                throw new TypeError(r + "must be non-object");
            for (const n in r)
                t(r, "to") && (e = r)
      }
    }
    return e
}

var options = {};

function s() {
    this.input = null,
      this.next_in = 0,
      this.avail_in = 0,
      this.total_in = 0,
      this.output = null,
      this.next_out = 0,
      this.avail_out = 0,
      this.total_out = 0,
      this.msg = "",
      this.state = null,
      this.data_type = 2,
      this.adler = 0
}

function ie() {
    this.mode = 0,
      this.last = !1,
      this.wrap = 0,
      this.havedict = !1,
      this.flags = 0,
      this.dmax = 0,
      this.check = 0,
      this.total = 0,
      this.head = null,
      this.wbits = 0,
      this.wsize = 0,
      this.whave = 0,
      this.wnext = 0,
      this.window = null,
      this.hold = 0,
      this.bits = 0,
      this.length = 0,
      this.offset = 0,
      this.extra = 0,
      this.lencode = null,
      this.distcode = null,
      this.lenbits = 0,
      this.distbits = 0,
      this.ncode = 0,
      this.nlen = 0,
      this.ndist = 0,
      this.have = 0,
      this.next = null,
      this.lens = new Uint16Array(320),
      this.work = new Uint16Array(288),
      this.lendyn = null,
      this.distdyn = null,
      this.sane = 0,
      this.back = 0,
      this.was = 0
}

const oe = e => {
    if (!e || !e.state)
      return v;
    const t = e.state;
    return e.total_in = e.total_out = t.total = 0,
      e.msg = "",
    t.wrap && (e.adler = 1 & t.wrap),
      t.mode = 1,
      t.last = 0,
      t.havedict = 0,
      t.dmax = 32768,
      t.head = null,
      t.hold = 0,
      t.bits = 0,
      t.lencode = t.lendyn = new Int32Array(852),
      t.distcode = t.distdyn = new Int32Array(592),
      t.sane = 1,
      t.back = -1,
      0
}
    , ae = e => {
    if (!e || !e.state)
      return v;
    const t = e.state;
    return t.wsize = 0,
      t.whave = 0,
      t.wnext = 0,
      oe(e)
}
    , se = (e, t) => {
    let n;
    if (!e || !e.state)
      return v;
    const r = e.state;
    return t < 0 ? (n = 0,
      t = -t) : (n = 1 + (t >> 4),
    t < 48 && (t &= 15)),
      t && (t < 8 || t > 15) ? v : (null !== r.window && r.wbits !== t && (r.window = null),
            r.wrap = n,
            r.wbits = t,
            ae(e))
}
    , le = (e, t) => {
    if (!e)
      return v;
    const n = new ie;
    e.state = n,
      n.window = null;
    const r = se(e, t);
    return r !== d && (e.state = null),
      r
}
    , ue = e => le(e, ne);

function inflateInit2(e, t) {
    if (!e)
      return v;
    const n = new ie;
    e.state = n,
      n.window = null;
    const r = se(e, t);
    return r !== 0 && (e.state = null),
      r
}

function y(e) {
    this.options = assign({
      chunkSize: 65536,
      windowBits: 47,
      to: ""
    }, e || {});
    const t = this.options;
    t.raw && t.windowBits >= 0 && t.windowBits < 16 && (t.windowBits = -t.windowBits,
    0 === t.windowBits && (t.windowBits = -15)),
    !(t.windowBits >= 0 && t.windowBits < 16) || e && e.windowBits || (t.windowBits += 32),
    t.windowBits > 15 && t.windowBits < 48 && 0 === (15 & t.windowBits) && (t.windowBits |= 15),
      this.err = 0,
      this.msg = "",
      this.ended = !1,
      this.chunks = [],
      this.strm = new s,
      this.strm.avail_out = 0;
    let n = inflateInit2(this.strm, t.windowBits);
    if (n !== 0)
      throw new Error(a);
    if (this.header = new lll,
      inflateGetHeader(this.strm, this.header),
    t.dictionary && ("string" === typeof t.dictionary ? t.dictionary = o.string2buf(t.dictionary) : "" === u.call(t.dictionary) && (t.dictionary = new Uint8Array(t.dictionary)),
    t.raw && (n = r.inflateSetDictionary(this.strm, t.dictionary),
    n !== f)))
      throw new Error(a)
}

function inflateGetHeader(e, t) {
    if (!e || !e.state)
      return v;
    const n = e.state;
    return 0 === (2 & n.wrap) ? v : (n.head = t,
      t.done = !1,
      0)
}

function lll() {
    this.text = 0,
      this.time = 0,
      this.xflags = 0,
      this.os = 0,
      this.extra = null,
      this.extra_len = 0,
      this.name = "",
      this.comment = "",
      this.hcrc = 0,
      this.done = !1
}

function iiii(e, t, r, i) {
    const o = {
    "0": 0,
    "1": 1996959894,
    "2": 3993919788,
    "3": 2567524794,
    "4": 124634137,
    "5": 1886057615,
    "6": 3915621685,
    "7": 2657392035,
    "8": 249268274,
    "9": 2044508324,
    "10": 3772115230,
    "11": 2547177864,
    "12": 162941995,
    "13": 2125561021,
    "14": 3887607047,
    "15": 2428444049,
    "16": 498536548,
    "17": 1789927666,
    "18": 4089016648,
    "19": 2227061214,
    "20": 450548861,
    "21": 1843258603,
    "22": 4107580753,
    "23": 2211677639,
    "24": 325883990,
    "25": 1684777152,
    "26": 4251122042,
    "27": 2321926636,
    "28": 335633487,
    "29": 1661365465,
    "30": 4195302755,
    "31": 2366115317,
    "32": 997073096,
    "33": 1281953886,
    "34": 3579855332,
    "35": 2724688242,
    "36": 1006888145,
    "37": 1258607687,
    "38": 3524101629,
    "39": 2768942443,
    "40": 901097722,
    "41": 1119000684,
    "42": 3686517206,
    "43": 2898065728,
    "44": 853044451,
    "45": 1172266101,
    "46": 3705015759,
    "47": 2882616665,
    "48": 651767980,
    "49": 1373503546,
    "50": 3369554304,
    "51": 3218104598,
    "52": 565507253,
    "53": 1454621731,
    "54": 3485111705,
    "55": 3099436303,
    "56": 671266974,
    "57": 1594198024,
    "58": 3322730930,
    "59": 2970347812,
    "60": 795835527,
    "61": 1483230225,
    "62": 3244367275,
    "63": 3060149565,
    "64": 1994146192,
    "65": 31158534,
    "66": 2563907772,
    "67": 4023717930,
    "68": 1907459465,
    "69": 112637215,
    "70": 2680153253,
    "71": 3904427059,
    "72": 2013776290,
    "73": 251722036,
    "74": 2517215374,
    "75": 3775830040,
    "76": 2137656763,
    "77": 141376813,
    "78": 2439277719,
    "79": 3865271297,
    "80": 1802195444,
    "81": 476864866,
    "82": 2238001368,
    "83": 4066508878,
    "84": 1812370925,
    "85": 453092731,
    "86": 2181625025,
    "87": 4111451223,
    "88": 1706088902,
    "89": 314042704,
    "90": 2344532202,
    "91": 4240017532,
    "92": 1658658271,
    "93": 366619977,
    "94": 2362670323,
    "95": 4224994405,
    "96": 1303535960,
    "97": 984961486,
    "98": 2747007092,
    "99": 3569037538,
    "100": 1256170817,
    "101": 1037604311,
    "102": 2765210733,
    "103": 3554079995,
    "104": 1131014506,
    "105": 879679996,
    "106": 2909243462,
    "107": 3663771856,
    "108": 1141124467,
    "109": 855842277,
    "110": 2852801631,
    "111": 3708648649,
    "112": 1342533948,
    "113": 654459306,
    "114": 3188396048,
    "115": 3373015174,
    "116": 1466479909,
    "117": 544179635,
    "118": 3110523913,
    "119": 3462522015,
    "120": 1591671054,
    "121": 702138776,
    "122": 2966460450,
    "123": 3352799412,
    "124": 1504918807,
    "125": 783551873,
    "126": 3082640443,
    "127": 3233442989,
    "128": 3988292384,
    "129": 2596254646,
    "130": 62317068,
    "131": 1957810842,
    "132": 3939845945,
    "133": 2647816111,
    "134": 81470997,
    "135": 1943803523,
    "136": 3814918930,
    "137": 2489596804,
    "138": 225274430,
    "139": 2053790376,
    "140": 3826175755,
    "141": 2466906013,
    "142": 167816743,
    "143": 2097651377,
    "144": 4027552580,
    "145": 2265490386,
    "146": 503444072,
    "147": 1762050814,
    "148": 4150417245,
    "149": 2154129355,
    "150": 426522225,
    "151": 1852507879,
    "152": 4275313526,
    "153": 2312317920,
    "154": 282753626,
    "155": 1742555852,
    "156": 4189708143,
    "157": 2394877945,
    "158": 397917763,
    "159": 1622183637,
    "160": 3604390888,
    "161": 2714866558,
    "162": 953729732,
    "163": 1340076626,
    "164": 3518719985,
    "165": 2797360999,
    "166": 1068828381,
    "167": 1219638859,
    "168": 3624741850,
    "169": 2936675148,
    "170": 906185462,
    "171": 1090812512,
    "172": 3747672003,
    "173": 2825379669,
    "174": 829329135,
    "175": 1181335161,
    "176": 3412177804,
    "177": 3160834842,
    "178": 628085408,
    "179": 1382605366,
    "180": 3423369109,
    "181": 3138078467,
    "182": 570562233,
    "183": 1426400815,
    "184": 3317316542,
    "185": 2998733608,
    "186": 733239954,
    "187": 1555261956,
    "188": 3268935591,
    "189": 3050360625,
    "190": 752459403,
    "191": 1541320221,
    "192": 2607071920,
    "193": 3965973030,
    "194": 1969922972,
    "195": 40735498,
    "196": 2617837225,
    "197": 3943577151,
    "198": 1913087877,
    "199": 83908371,
    "200": 2512341634,
    "201": 3803740692,
    "202": 2075208622,
    "203": 213261112,
    "204": 2463272603,
    "205": 3855990285,
    "206": 2094854071,
    "207": 198958881,
    "208": 2262029012,
    "209": 4057260610,
    "210": 1759359992,
    "211": 534414190,
    "212": 2176718541,
    "213": 4139329115,
    "214": 1873836001,
    "215": 414664567,
    "216": 2282248934,
    "217": 4279200368,
    "218": 1711684554,
    "219": 285281116,
    "220": 2405801727,
    "221": 4167216745,
    "222": 1634467795,
    "223": 376229701,
    "224": 2685067896,
    "225": 3608007406,
    "226": 1308918612,
    "227": 956543938,
    "228": 2808555105,
    "229": 3495958263,
    "230": 1231636301,
    "231": 1047427035,
    "232": 2932959818,
    "233": 3654703836,
    "234": 1088359270,
    "235": 936918000,
    "236": 2847714899,
    "237": 3736837829,
    "238": 1202900863,
    "239": 817233897,
    "240": 3183342108,
    "241": 3401237130,
    "242": 1404277552,
    "243": 615818150,
    "244": 3134207493,
    "245": 3453421203,
    "246": 1423857449,
    "247": 601450431,
    "248": 3009837614,
    "249": 3294710456,
    "250": 1567103746,
    "251": 711928724,
    "252": 3020668471,
    "253": 3272380065,
    "254": 1510334235,
    "255": 755167117
}
      , a = i + r;
    e ^= -1;
    for (let n = i; n < a; n++)
      e = e >>> 8 ^ o)];
    return ~e
}

function inflate(e, t) {
    let n, Q, ee, te, ne, ie, oe, ae, se, le, ue, ce, he, fe, me, ve, ge, ye, be, xe, we, _e, Se = 0;
    const Ce = new Uint8Array(4);
    let Ee, ke;
    const Te = new Uint8Array();
    if (!e || !e.state || !e.output || !e.input && 0 !== e.avail_in)
      return v;
    n = e.state,
    n.mode === 12 && (n.mode = j),
      ne = e.next_out,
      ee = e.output,
      oe = e.avail_out,
      te = e.next_in,
      Q = e.input,
      ie = e.avail_in,
      ae = n.hold,
      se = n.bits,
      le = ie,
      ue = oe,
      _e = 0;
    e: for (; ;)
      switch (n.mode) {
            case 1:
                if (0 === n.wrap) {
                  n.mode = j;
                  break
                }
                while (se < 16) {
                  if (0 === ie)
                        break e;
                  ie--,
                        ae += Q << se,
                        se += 8
                }
                if (2 & n.wrap && 35615 === ae) {
                  n.check = 0,
                        Ce = 255 & ae,
                        Ce = ae >>> 8 & 255,
                        n.check = iiii(n.check, Ce, 2, 0),
                        ae = 0,
                        se = 0,
                        n.mode = 2;
                  break
                }
                if (n.flags = 0,
                n.head && (n.head.done = !1),
                !(1 & n.wrap) || (((255 & ae) << 8) + (ae >> 8)) % 31) {
                  e.msg = "incorrect header check",
                        n.mode = X;
                  break
                }
                if ((15 & ae) !== x) {
                  e.msg = "unknown compression method",
                        n.mode = X;
                  break
                }
                if (ae >>>= 4,
                  se -= 4,
                  we = 8 + (15 & ae),
                0 === n.wbits)
                  n.wbits = we;
                else if (we > n.wbits) {
                  e.msg = "invalid window size",
                        n.mode = X;
                  break
                }
                n.dmax = 1 << n.wbits,
                  e.adler = n.check = 1,
                  n.mode = 512 & ae ? M : D,
                  ae = 0,
                  se = 0;
                break;
            case 2:
                while (se < 16) {
                  if (0 === ie)
                        break e;
                  ie--,
                        ae += Q << se,
                        se += 8
                }
                if (n.flags = ae,
                (255 & n.flags) !== 8) {
                  e.msg = "unknown compression method",
                        n.mode = X;
                  break
                }
                if (57344 & n.flags) {
                  e.msg = "unknown header flags set",
                        n.mode = X;
                  break
                }
                n.head && (n.head.text = ae >> 8 & 1),
                512 & n.flags && (Ce = 255 & ae,
                  Ce = ae >>> 8 & 255,
                  n.check = i(n.check, Ce, 2, 0)),
                  ae = 0,
                  se = 0,
                  n.mode = 3;
            case 3:
                while (se < 32) {
                  if (0 === ie)
                        break e;
                  ie--,
                        ae += Q << se,
                        se += 8
                }
                n.head && (n.head.time = ae),
                512 & n.flags && (Ce = 255 & ae,
                  Ce = ae >>> 8 & 255,
                  Ce = ae >>> 16 & 255,
                  Ce = ae >>> 24 & 255,
                  n.check = i(n.check, Ce, 4, 0)),
                  ae = 0,
                  se = 0,
                  n.mode = 4;
            case 4:
                while (se < 16) {
                  if (0 === ie)
                        break e;
                  ie--,
                        ae += Q << se,
                        se += 8
                }
                n.head && (n.head.xflags = 255 & ae,
                  n.head.os = ae >> 8),
                512 & n.flags && (Ce = 255 & ae,
                  Ce = ae >>> 8 & 255,
                  n.check = i(n.check, Ce, 2, 0)),
                  ae = 0,
                  se = 0,
                  n.mode = 5;
            case 5:
                if (1024 & n.flags) {
                  while (se < 16) {
                        if (0 === ie)
                            break e;
                        ie--,
                            ae += Q << se,
                            se += 8
                  }
                  n.length = ae,
                  n.head && (n.head.extra_len = ae),
                  512 & n.flags && (Ce = 255 & ae,
                        Ce = ae >>> 8 & 255,
                        n.check = i(n.check, Ce, 2, 0)),
                        ae = 0,
                        se = 0
                } else
                  n.head && (n.head.extra = null);
                n.mode = 6;
            case 6:
                if (1024 & n.flags && (ce = n.length,
                ce > ie && (ce = ie),
                ce && (n.head && (we = n.head.extra_len - n.length,
                n.head.extra || (n.head.extra = new Uint8Array(n.head.extra_len)),
                  n.head.extra.set(Q.subarray(te, te + ce), we)),
                512 & n.flags && (n.check = i(n.check, Q, ce, te)),
                  ie -= ce,
                  te += ce,
                  n.length -= ce),
                  n.length))
                  break e;
                n.length = 0,
                  n.mode = 7;
            case 7:
                if (2048 & n.flags) {
                  if (0 === ie)
                        break e;
                  ce = 0;
                  do {
                        we = Q,
                        n.head && we && n.length < 65536 && (n.head.name += String.fromCharCode(we))
                  } while (we && ce < ie);
                  if (512 & n.flags && (n.check = i(n.check, Q, ce, te)),
                        ie -= ce,
                        te += ce,
                        we)
                        break e
                } else
                  n.head && (n.head.name = null);
                n.length = 0,
                  n.mode = 8;
            case 8:
                if (4096 & n.flags) {
                  if (0 === ie)
                        break e;
                  ce = 0;
                  do {
                        we = Q,
                        n.head && we && n.length < 65536 && (n.head.comment += String.fromCharCode(we))
                  } while (we && ce < ie);
                  if (512 & n.flags && (n.check = i(n.check, Q, ce, te)),
                        ie -= ce,
                        te += ce,
                        we)
                        break e
                } else
                  n.head && (n.head.comment = null);
                n.mode = 9;
            case 9:
                if (512 & n.flags) {
                  while (se < 16) {
                        if (0 === ie)
                            break e;
                        ie--,
                            ae += Q << se,
                            se += 8
                  }
                  if (ae !== (65535 & n.check)) {
                        e.msg = "header crc mismatch",
                            n.mode = X;
                        break
                  }
                  ae = 0,
                        se = 0
                }
                n.head && (n.head.hcrc = n.flags >> 9 & 1,
                  n.head.done = !0),
                  e.adler = n.check = 0,
                  n.mode = 12;
                break;
            case 10:
                while (se < 32) {
                  if (0 === ie)
                        break e;
                  ie--,
                        ae += Q << se,
                        se += 8
                }
                e.adler = n.check = re(ae),
                  ae = 0,
                  se = 0,
                  n.mode = 11;
            case 11:
                if (0 === n.havedict)
                  return e.next_out = ne,
                        e.avail_out = oe,
                        e.next_in = te,
                        e.avail_in = ie,
                        n.hold = ae,
                        n.bits = se,
                        m;
                e.adler = n.check = 1,
                  n.mode = 12;
            case 12:
                if (t === 5 || t === 6)
                  break e;
            case 13:
                if (n.last) {
                  ae >>>= 7 & se,
                        se -= 7 & se,
                        n.mode = G;
                  break
                }
                while (se < 3) {
                  if (0 === ie)
                        break e;
                  ie--,
                        ae += Q << se,
                        se += 8
                }
                switch (n.last = 1 & ae,
                  ae >>>= 1,
                  se -= 1,
                3 & ae) {
                  case 0:
                        n.mode = I;
                        break;
                  case 1:
                        if (de(n),
                            n.mode = B,
                        t === f) {
                            ae >>>= 2,
                              se -= 2;
                            break e
                        }
                        break;
                  case 2:
                        n.mode = 17;
                        break;
                  case 3:
                        e.msg = "invalid block type",
                            n.mode = X
                }
                ae >>>= 2,
                  se -= 2;
                break;
            case 14:
                ae >>>= 7 & se,
                  se -= 7 & se;
                while (se < 32) {
                  if (0 === ie)
                        break e;
                  ie--,
                        ae += Q << se,
                        se += 8
                }
                if ((65535 & ae) !== (ae >>> 16 ^ 65535)) {
                  e.msg = "invalid stored block lengths",
                        n.mode = X;
                  break
                }
                if (n.length = 65535 & ae,
                  ae = 0,
                  se = 0,
                  n.mode = R,
                t === f)
                  break e;
            case 15:
                n.mode = $;
            case 16:
                if (ce = n.length,
                  ce) {
                  if (ce > ie && (ce = ie),
                  ce > oe && (ce = oe),
                  0 === ce)
                        break e;
                  ee.set(Q.subarray(te, te + ce), ne),
                        ie -= ce,
                        te += ce,
                        oe -= ce,
                        ne += ce,
                        n.length -= ce;
                  break
                }
                n.mode = D;
                break;
            case 17:
                while (se < 14) {
                  if (0 === ie)
                        break e;
                  ie--,
                        ae += Q << se,
                        se += 8
                }
                if (n.nlen = 257 + (31 & ae),
                  ae >>>= 5,
                  se -= 5,
                  n.ndist = 1 + (31 & ae),
                  ae >>>= 5,
                  se -= 5,
                  n.ncode = 4 + (15 & ae),
                  ae >>>= 4,
                  se -= 4,
                n.nlen > 286 || n.ndist > 30) {
                  e.msg = "too many length or distance symbols",
                        n.mode = X;
                  break
                }
                n.have = 0,
                  n.mode = 18;
            case 18:
                while (n.have < n.ncode) {
                  while (se < 3) {
                        if (0 === ie)
                            break e;
                        ie--,
                            ae += Q << se,
                            se += 8
                  }
                  n.lens] = 7 & ae,
                        ae >>>= 3,
                        se -= 3
                }
                while (n.have < 19)
                  n.lens] = 0;
                if (n.lencode = n.lendyn,
                  n.lenbits = 7,
                  Ee = {
                        bits: n.lenbits
                  },
                  _e = aaaaaa(0, n.lens, 0, 19, n.lencode, 0, n.work, Ee),
                  n.lenbits = Ee.bits,
                  _e) {
                  e.msg = "invalid code lengths set",
                        n.mode = 30;
                  break
                }
                n.have = 0,
                  n.mode = 19;
            case 19:
                while (n.have < n.nlen + n.ndist) {
                  for (; ;) {
                        if (Se = n.lencode,
                            me = Se >>> 24,
                            ve = Se >>> 16 & 255,
                            ge = 65535 & Se,
                        me <= se)
                            break;
                        if (0 === ie)
                            break e;
                        ie--,
                            ae += Q << se,
                            se += 8
                  }
                  if (ge < 16)
                        ae >>>= me,
                            se -= me,
                            n.lens = ge;
                  else {
                        if (16 === ge) {
                            ke = me + 2;
                            while (se < ke) {
                              if (0 === ie)
                                    break e;
                              ie--,
                                    ae += Q << se,
                                    se += 8
                            }
                            if (ae >>>= me,
                              se -= me,
                            0 === n.have) {
                              e.msg = "invalid bit length repeat",
                                    n.mode = X;
                              break
                            }
                            we = n.lens,
                              ce = 3 + (3 & ae),
                              ae >>>= 2,
                              se -= 2
                        } else if (17 === ge) {
                            ke = me + 3;
                            while (se < ke) {
                              if (0 === ie)
                                    break e;
                              ie--,
                                    ae += Q << se,
                                    se += 8
                            }
                            ae >>>= me,
                              se -= me,
                              we = 0,
                              ce = 3 + (7 & ae),
                              ae >>>= 3,
                              se -= 3
                        } else {
                            ke = me + 7;
                            while (se < ke) {
                              if (0 === ie)
                                    break e;
                              ie--,
                                    ae += Q << se,
                                    se += 8
                            }
                            ae >>>= me,
                              se -= me,
                              we = 0,
                              ce = 11 + (127 & ae),
                              ae >>>= 7,
                              se -= 7
                        }
                        if (n.have + ce > n.nlen + n.ndist) {
                            e.msg = "invalid bit length repeat",
                              n.mode = X;
                            break
                        }
                        while (ce--)
                            n.lens = we
                  }
                }
                if (n.mode === X)
                  break;
                if (0 === n.lens) {
                  e.msg = "invalid code -- missing end-of-block",
                        n.mode = X;
                  break
                }
                if (n.lenbits = 9,
                  Ee = {
                        bits: n.lenbits
                  },
                  _e = a(l, n.lens, 0, n.nlen, n.lencode, 0, n.work, Ee),
                  n.lenbits = Ee.bits,
                  _e) {
                  e.msg = "invalid literal/lengths set",
                        n.mode = X;
                  break
                }
                if (n.distbits = 6,
                  n.distcode = n.distdyn,
                  Ee = {
                        bits: n.distbits
                  },
                  _e = a(u, n.lens, n.nlen, n.ndist, n.distcode, 0, n.work, Ee),
                  n.distbits = Ee.bits,
                  _e) {
                  e.msg = "invalid distances set",
                        n.mode = X;
                  break
                }
                if (n.mode = 20,
                t === 6)
                  break e;
            case 20:
                n.mode = 21;
            case 21:
                if (ie >= 6 && oe >= 258) {
                  e.next_out = ne,
                        e.avail_out = oe,
                        e.next_in = te,
                        e.avail_in = ie,
                        n.hold = ae,
                        n.bits = se,
                        o(e, ue),
                        ne = e.next_out,
                        ee = e.output,
                        oe = e.avail_out,
                        te = e.next_in,
                        Q = e.input,
                        ie = e.avail_in,
                        ae = n.hold,
                        se = n.bits,
                  n.mode === D && (n.back = -1);
                  break
                }
                for (n.back = 0; ;) {
                  if (Se = n.lencode,
                        me = Se >>> 24,
                        ve = Se >>> 16 & 255,
                        ge = 65535 & Se,
                  me <= se)
                        break;
                  if (0 === ie)
                        break e;
                  ie--,
                        ae += Q << se,
                        se += 8
                }
                if (ve && 0 === (240 & ve)) {
                  for (ye = me,
                           be = ve,
                           xe = ge; ;) {
                        if (Se = n.lencode,
                            me = Se >>> 24,
                            ve = Se >>> 16 & 255,
                            ge = 65535 & Se,
                        ye + me <= se)
                            break;
                        if (0 === ie)
                            break e;
                        ie--,
                            ae += Q << se,
                            se += 8
                  }
                  ae >>>= ye,
                        se -= ye,
                        n.back += ye
                }
                if (ae >>>= me,
                  se -= me,
                  n.back += me,
                  n.length = ge,
                0 === ve) {
                  n.mode = W;
                  break
                }
                if (32 & ve) {
                  n.back = -1,
                        n.mode = D;
                  break
                }
                if (64 & ve) {
                  e.msg = "invalid literal/length code",
                        n.mode = X;
                  break
                }
                n.extra = 15 & ve,
                  n.mode = 22;
            case 22:
                if (n.extra) {
                  ke = n.extra;
                  while (se < ke) {
                        if (0 === ie)
                            break e;
                        ie--,
                            ae += Q << se,
                            se += 8
                  }
                  n.length += ae & (1 << n.extra) - 1,
                        ae >>>= n.extra,
                        se -= n.extra,
                        n.back += n.extra
                }
                n.was = n.length,
                  n.mode = 23;
            case 23:
                for (; ;) {
                  if (Se = n.distcode,
                        me = Se >>> 24,
                        ve = Se >>> 16 & 255,
                        ge = 65535 & Se,
                  me <= se)
                        break;
                  if (0 === ie)
                        break e;
                  ie--,
                        ae += Q << se,
                        se += 8
                }
                if (0 === (240 & ve)) {
                  for (ye = me,
                           be = ve,
                           xe = ge; ;) {
                        if (Se = n.distcode,
                            me = Se >>> 24,
                            ve = Se >>> 16 & 255,
                            ge = 65535 & Se,
                        ye + me <= se)
                            break;
                        if (0 === ie)
                            break e;
                        ie--,
                            ae += Q << se,
                            se += 8
                  }
                  ae >>>= ye,
                        se -= ye,
                        n.back += ye
                }
                if (ae >>>= me,
                  se -= me,
                  n.back += me,
                64 & ve) {
                  e.msg = "invalid distance code",
                        n.mode = X;
                  break
                }
                n.offset = ge,
                  n.extra = 15 & ve,
                  n.mode = 24;
            case 24:
                if (n.extra) {
                  ke = n.extra;
                  while (se < ke) {
                        if (0 === ie)
                            break e;
                        ie--,
                            ae += Q << se,
                            se += 8
                  }
                  n.offset += ae & (1 << n.extra) - 1,
                        ae >>>= n.extra,
                        se -= n.extra,
                        n.back += n.extra
                }
                if (n.offset > n.dmax) {
                  e.msg = "invalid distance too far back",
                        n.mode = X;
                  break
                }
                n.mode = 25;
            case 25:
                if (0 === oe)
                  break e;
                if (ce = ue - oe,
                n.offset > ce) {
                  if (ce = n.offset - ce,
                  ce > n.whave && n.sane) {
                        e.msg = "invalid distance too far back",
                            n.mode = 30;
                        break
                  }
                  ce > n.wnext ? (ce -= n.wnext,
                        he = n.wsize - ce) : he = n.wnext - ce,
                  ce > n.length && (ce = n.length),
                        fe = n.window
                } else
                  fe = ee,
                        he = ne - n.offset,
                        ce = n.length;
                ce > oe && (ce = oe),
                  oe -= ce,
                  n.length -= ce;
                do {
                  ee = fe
                } while (--ce);
                0 === n.length && (n.mode = z);
                break;
            case 26:
                if (0 === oe)
                  break e;
                ee = n.length,
                  oe--,
                  n.mode = 21;
                break;
            case 27:
                if (n.wrap) {
                  while (se < 32) {
                        if (0 === ie)
                            break e;
                        ie--,
                            ae |= Q << se,
                            se += 8
                  }
                  if (ue -= oe,
                        e.total_out += ue,
                        n.total += ue,
                  ue && (e.adler = n.check = n.flags ? i(n.check, ee, ue, ne - ue) : r(n.check, ee, ue, ne - ue)),
                        ue = oe,
                  (n.flags ? ae : re(ae)) !== n.check) {
                        e.msg = "incorrect data check",
                            n.mode = X;
                        break
                  }
                  ae = 0,
                        se = 0
                }
                n.mode = 28;
            case 28:
                if (n.wrap && n.flags) {
                  while (se < 32) {
                        if (0 === ie)
                            break e;
                        ie--,
                            ae += Q << se,
                            se += 8
                  }
                  if (ae !== (4294967295 & n.total)) {
                        e.msg = "incorrect length check",
                            n.mode = X;
                        break
                  }
                  ae = 0,
                        se = 0
                }
                n.mode = 29;
            case 29:
                _e = 1;
                break e;
            case 30:
                _e = -3;
                break e;
            case 31:
                return y;
            case 32:
            default:
                return v
      }
    return e.next_out = ne,
      e.avail_out = oe,
      e.next_in = te,
      e.avail_in = ie,
      n.hold = ae,
      n.bits = se,
      (n.wsize || ue !== e.avail_out && n.mode < 30 && (n.mode < 27 || t !== 4)) && pe(e, e.output, e.next_out, ue - e.avail_out) ? (n.mode = 31,
            -4) : (le -= e.avail_in,
            ue -= e.avail_out,
            e.total_in += le,
            e.total_out += ue,
            n.total += ue,
      n.wrap && ue && (e.adler = n.check = n.flags ? i(n.check, ee, ue, e.next_out - ue) : r(n.check, ee, ue, e.next_out - ue)),
            e.data_type = n.bits + (n.last ? 64 : 0) + (n.mode === 12 ? 128 : 0) + (n.mode === 20 || n.mode === 15 ? 256 : 0),
      (0 === le && 0 === ue || t === 4) && _e === d && (_e = b),
            _e)
}

function pusher(e, t) {
    const n = {
      "input": null,
      "next_in": 0,
      "avail_in": 0,
      "total_in": 0,
      "output": null,
      "next_out": 0,
      "avail_out": 0,
      "total_out": 0,
      "msg": "",
      "state": {
            "mode": 1,
            "last": 0,
            "wrap": 3,
            "havedict": 0,
            "flags": 0,
            "dmax": 32768,
            "check": 0,
            "total": 0,
            "head": {
                "text": 0,
                "time": 0,
                "xflags": 0,
                "os": 0,
                "extra": null,
                "extra_len": 0,
                "name": "",
                "comment": "",
                "hcrc": 0,
                "done": false
            },
            "wbits": 15,
            "wsize": 0,
            "whave": 0,
            "wnext": 0,
            "window": null,
            "hold": 0,
            "bits": 0,
            "length": 0,
            "offset": 0,
            "extra": 0,
            "lencode": {
                "0": 0,
                "1": 0,
                "2": 0,
                "3": 0,
                "4": 0,
                "5": 0,
                "6": 0,
                "7": 0,
                "8": 0,
                "9": 0,
                "10": 0,
                "11": 0,
                "12": 0,
                "13": 0,
                "14": 0,
                "15": 0,
                "16": 0,
                "17": 0,
                "18": 0,
                "19": 0,
                "20": 0,
                "21": 0,
                "22": 0,
                "23": 0,
                "24": 0,
                "25": 0,
                "26": 0,
                "27": 0,
                "28": 0,
                "29": 0,
                "30": 0,
                "31": 0,
                "32": 0,
                "33": 0,
                "34": 0,
                "35": 0,
                "36": 0,
                "37": 0,
                "38": 0,
                "39": 0,
                "40": 0,
                "41": 0,
                "42": 0,
                "43": 0,
                "44": 0,
                "45": 0,
                "46": 0,
                "47": 0,
                "48": 0,
                "49": 0,
                "50": 0,
                "51": 0,
                "52": 0,
                "53": 0,
                "54": 0,
                "55": 0,
                "56": 0,
                "57": 0,
                "58": 0,
                "59": 0,
                "60": 0,
                "61": 0,
                "62": 0,
                "63": 0,
                "64": 0,
                "65": 0,
                "66": 0,
                "67": 0,
                "68": 0,
                "69": 0,
                "70": 0,
                "71": 0,
                "72": 0,
                "73": 0,
                "74": 0,
                "75": 0,
                "76": 0,
                "77": 0,
                "78": 0,
                "79": 0,
                "80": 0,
                "81": 0,
                "82": 0,
                "83": 0,
                "84": 0,
                "85": 0,
                "86": 0,
                "87": 0,
                "88": 0,
                "89": 0,
                "90": 0,
                "91": 0,
                "92": 0,
                "93": 0,
                "94": 0,
                "95": 0,
                "96": 0,
                "97": 0,
                "98": 0,
                "99": 0,
                "100": 0,
                "101": 0,
                "102": 0,
                "103": 0,
                "104": 0,
                "105": 0,
                "106": 0,
                "107": 0,
                "108": 0,
                "109": 0,
                "110": 0,
                "111": 0,
                "112": 0,
                "113": 0,
                "114": 0,
                "115": 0,
                "116": 0,
                "117": 0,
                "118": 0,
                "119": 0,
                "120": 0,
                "121": 0,
                "122": 0,
                "123": 0,
                "124": 0,
                "125": 0,
                "126": 0,
                "127": 0,
                "128": 0,
                "129": 0,
                "130": 0,
                "131": 0,
                "132": 0,
                "133": 0,
                "134": 0,
                "135": 0,
                "136": 0,
                "137": 0,
                "138": 0,
                "139": 0,
                "140": 0,
                "141": 0,
                "142": 0,
                "143": 0,
                "144": 0,
                "145": 0,
                "146": 0,
                "147": 0,
                "148": 0,
                "149": 0,
                "150": 0,
                "151": 0,
                "152": 0,
                "153": 0,
                "154": 0,
                "155": 0,
                "156": 0,
                "157": 0,
                "158": 0,
                "159": 0,
                "160": 0,
                "161": 0,
                "162": 0,
                "163": 0,
                "164": 0,
                "165": 0,
                "166": 0,
                "167": 0,
                "168": 0,
                "169": 0,
                "170": 0,
                "171": 0,
                "172": 0,
                "173": 0,
                "174": 0,
                "175": 0,
                "176": 0,
                "177": 0,
                "178": 0,
                "179": 0,
                "180": 0,
                "181": 0,
                "182": 0,
                "183": 0,
                "184": 0,
                "185": 0,
                "186": 0,
                "187": 0,
                "188": 0,
                "189": 0,
                "190": 0,
                "191": 0,
                "192": 0,
                "193": 0,
                "194": 0,
                "195": 0,
                "196": 0,
                "197": 0,
                "198": 0,
                "199": 0,
                "200": 0,
                "201": 0,
                "202": 0,
                "203": 0,
                "204": 0,
                "205": 0,
                "206": 0,
                "207": 0,
                "208": 0,
                "209": 0,
                "210": 0,
                "211": 0,
                "212": 0,
                "213": 0,
                "214": 0,
                "215": 0,
                "216": 0,
                "217": 0,
                "218": 0,
                "219": 0,
                "220": 0,
                "221": 0,
                "222": 0,
                "223": 0,
                "224": 0,
                "225": 0,
                "226": 0,
                "227": 0,
                "228": 0,
                "229": 0,
                "230": 0,
                "231": 0,
                "232": 0,
                "233": 0,
                "234": 0,
                "235": 0,
                "236": 0,
                "237": 0,
                "238": 0,
                "239": 0,
                "240": 0,
                "241": 0,
                "242": 0,
                "243": 0,
                "244": 0,
                "245": 0,
                "246": 0,
                "247": 0,
                "248": 0,
                "249": 0,
                "250": 0,
                "251": 0,
                "252": 0,
                "253": 0,
                "254": 0,
                "255": 0,
                "256": 0,
                "257": 0,
                "258": 0,
                "259": 0,
                "260": 0,
                "261": 0,
                "262": 0,
                "263": 0,
                "264": 0,
                "265": 0,
                "266": 0,
                "267": 0,
                "268": 0,
                "269": 0,
                "270": 0,
                "271": 0,
                "272": 0,
                "273": 0,
                "274": 0,
                "275": 0,
                "276": 0,
                "277": 0,
                "278": 0,
                "279": 0,
                "280": 0,
                "281": 0,
                "282": 0,
                "283": 0,
                "284": 0,
                "285": 0,
                "286": 0,
                "287": 0,
                "288": 0,
                "289": 0,
                "290": 0,
                "291": 0,
                "292": 0,
                "293": 0,
                "294": 0,
                "295": 0,
                "296": 0,
                "297": 0,
                "298": 0,
                "299": 0,
                "300": 0,
                "301": 0,
                "302": 0,
                "303": 0,
                "304": 0,
                "305": 0,
                "306": 0,
                "307": 0,
                "308": 0,
                "309": 0,
                "310": 0,
                "311": 0,
                "312": 0,
                "313": 0,
                "314": 0,
                "315": 0,
                "316": 0,
                "317": 0,
                "318": 0,
                "319": 0,
                "320": 0,
                "321": 0,
                "322": 0,
                "323": 0,
                "324": 0,
                "325": 0,
                "326": 0,
                "327": 0,
                "328": 0,
                "329": 0,
                "330": 0,
                "331": 0,
                "332": 0,
                "333": 0,
                "334": 0,
                "335": 0,
                "336": 0,
                "337": 0,
                "338": 0,
                "339": 0,
                "340": 0,
                "341": 0,
                "342": 0,
                "343": 0,
                "344": 0,
                "345": 0,
                "346": 0,
                "347": 0,
                "348": 0,
                "349": 0,
                "350": 0,
                "351": 0,
                "352": 0,
                "353": 0,
                "354": 0,
                "355": 0,
                "356": 0,
                "357": 0,
                "358": 0,
                "359": 0,
                "360": 0,
                "361": 0,
                "362": 0,
                "363": 0,
                "364": 0,
                "365": 0,
                "366": 0,
                "367": 0,
                "368": 0,
                "369": 0,
                "370": 0,
                "371": 0,
                "372": 0,
                "373": 0,
                "374": 0,
                "375": 0,
                "376": 0,
                "377": 0,
                "378": 0,
                "379": 0,
                "380": 0,
                "381": 0,
                "382": 0,
                "383": 0,
                "384": 0,
                "385": 0,
                "386": 0,
                "387": 0,
                "388": 0,
                "389": 0,
                "390": 0,
                "391": 0,
                "392": 0,
                "393": 0,
                "394": 0,
                "395": 0,
                "396": 0,
                "397": 0,
                "398": 0,
                "399": 0,
                "400": 0,
                "401": 0,
                "402": 0,
                "403": 0,
                "404": 0,
                "405": 0,
                "406": 0,
                "407": 0,
                "408": 0,
                "409": 0,
                "410": 0,
                "411": 0,
                "412": 0,
                "413": 0,
                "414": 0,
                "415": 0,
                "416": 0,
                "417": 0,
                "418": 0,
                "419": 0,
                "420": 0,
                "421": 0,
                "422": 0,
                "423": 0,
                "424": 0,
                "425": 0,
                "426": 0,
                "427": 0,
                "428": 0,
                "429": 0,
                "430": 0,
                "431": 0,
                "432": 0,
                "433": 0,
                "434": 0,
                "435": 0,
                "436": 0,
                "437": 0,
                "438": 0,
                "439": 0,
                "440": 0,
                "441": 0,
                "442": 0,
                "443": 0,
                "444": 0,
                "445": 0,
                "446": 0,
                "447": 0,
                "448": 0,
                "449": 0,
                "450": 0,
                "451": 0,
                "452": 0,
                "453": 0,
                "454": 0,
                "455": 0,
                "456": 0,
                "457": 0,
                "458": 0,
                "459": 0,
                "460": 0,
                "461": 0,
                "462": 0,
                "463": 0,
                "464": 0,
                "465": 0,
                "466": 0,
                "467": 0,
                "468": 0,
                "469": 0,
                "470": 0,
                "471": 0,
                "472": 0,
                "473": 0,
                "474": 0,
                "475": 0,
                "476": 0,
                "477": 0,
                "478": 0,
                "479": 0,
                "480": 0,
                "481": 0,
                "482": 0,
                "483": 0,
                "484": 0,
                "485": 0,
                "486": 0,
                "487": 0,
                "488": 0,
                "489": 0,
                "490": 0,
                "491": 0,
                "492": 0,
                "493": 0,
                "494": 0,
                "495": 0,
                "496": 0,
                "497": 0,
                "498": 0,
                "499": 0,
                "500": 0,
                "501": 0,
                "502": 0,
                "503": 0,
                "504": 0,
                "505": 0,
                "506": 0,
                "507": 0,
                "508": 0,
                "509": 0,
                "510": 0,
                "511": 0,
                "512": 0,
                "513": 0,
                "514": 0,
                "515": 0,
                "516": 0,
                "517": 0,
                "518": 0,
                "519": 0,
                "520": 0,
                "521": 0,
                "522": 0,
                "523": 0,
                "524": 0,
                "525": 0,
                "526": 0,
                "527": 0,
                "528": 0,
                "529": 0,
                "530": 0,
                "531": 0,
                "532": 0,
                "533": 0,
                "534": 0,
                "535": 0,
                "536": 0,
                "537": 0,
                "538": 0,
                "539": 0,
                "540": 0,
                "541": 0,
                "542": 0,
                "543": 0,
                "544": 0,
                "545": 0,
                "546": 0,
                "547": 0,
                "548": 0,
                "549": 0,
                "550": 0,
                "551": 0,
                "552": 0,
                "553": 0,
                "554": 0,
                "555": 0,
                "556": 0,
                "557": 0,
                "558": 0,
                "559": 0,
                "560": 0,
                "561": 0,
                "562": 0,
                "563": 0,
                "564": 0,
                "565": 0,
                "566": 0,
                "567": 0,
                "568": 0,
                "569": 0,
                "570": 0,
                "571": 0,
                "572": 0,
                "573": 0,
                "574": 0,
                "575": 0,
                "576": 0,
                "577": 0,
                "578": 0,
                "579": 0,
                "580": 0,
                "581": 0,
                "582": 0,
                "583": 0,
                "584": 0,
                "585": 0,
                "586": 0,
                "587": 0,
                "588": 0,
                "589": 0,
                "590": 0,
                "591": 0,
                "592": 0,
                "593": 0,
                "594": 0,
                "595": 0,
                "596": 0,
                "597": 0,
                "598": 0,
                "599": 0,
                "600": 0,
                "601": 0,
                "602": 0,
                "603": 0,
                "604": 0,
                "605": 0,
                "606": 0,
                "607": 0,
                "608": 0,
                "609": 0,
                "610": 0,
                "611": 0,
                "612": 0,
                "613": 0,
                "614": 0,
                "615": 0,
                "616": 0,
                "617": 0,
                "618": 0,
                "619": 0,
                "620": 0,
                "621": 0,
                "622": 0,
                "623": 0,
                "624": 0,
                "625": 0,
                "626": 0,
                "627": 0,
                "628": 0,
                "629": 0,
                "630": 0,
                "631": 0,
                "632": 0,
                "633": 0,
                "634": 0,
                "635": 0,
                "636": 0,
                "637": 0,
                "638": 0,
                "639": 0,
                "640": 0,
                "641": 0,
                "642": 0,
                "643": 0,
                "644": 0,
                "645": 0,
                "646": 0,
                "647": 0,
                "648": 0,
                "649": 0,
                "650": 0,
                "651": 0,
                "652": 0,
                "653": 0,
                "654": 0,
                "655": 0,
                "656": 0,
                "657": 0,
                "658": 0,
                "659": 0,
                "660": 0,
                "661": 0,
                "662": 0,
                "663": 0,
                "664": 0,
                "665": 0,
                "666": 0,
                "667": 0,
                "668": 0,
                "669": 0,
                "670": 0,
                "671": 0,
                "672": 0,
                "673": 0,
                "674": 0,
                "675": 0,
                "676": 0,
                "677": 0,
                "678": 0,
                "679": 0,
                "680": 0,
                "681": 0,
                "682": 0,
                "683": 0,
                "684": 0,
                "685": 0,
                "686": 0,
                "687": 0,
                "688": 0,
                "689": 0,
                "690": 0,
                "691": 0,
                "692": 0,
                "693": 0,
                "694": 0,
                "695": 0,
                "696": 0,
                "697": 0,
                "698": 0,
                "699": 0,
                "700": 0,
                "701": 0,
                "702": 0,
                "703": 0,
                "704": 0,
                "705": 0,
                "706": 0,
                "707": 0,
                "708": 0,
                "709": 0,
                "710": 0,
                "711": 0,
                "712": 0,
                "713": 0,
                "714": 0,
                "715": 0,
                "716": 0,
                "717": 0,
                "718": 0,
                "719": 0,
                "720": 0,
                "721": 0,
                "722": 0,
                "723": 0,
                "724": 0,
                "725": 0,
                "726": 0,
                "727": 0,
                "728": 0,
                "729": 0,
                "730": 0,
                "731": 0,
                "732": 0,
                "733": 0,
                "734": 0,
                "735": 0,
                "736": 0,
                "737": 0,
                "738": 0,
                "739": 0,
                "740": 0,
                "741": 0,
                "742": 0,
                "743": 0,
                "744": 0,
                "745": 0,
                "746": 0,
                "747": 0,
                "748": 0,
                "749": 0,
                "750": 0,
                "751": 0,
                "752": 0,
                "753": 0,
                "754": 0,
                "755": 0,
                "756": 0,
                "757": 0,
                "758": 0,
                "759": 0,
                "760": 0,
                "761": 0,
                "762": 0,
                "763": 0,
                "764": 0,
                "765": 0,
                "766": 0,
                "767": 0,
                "768": 0,
                "769": 0,
                "770": 0,
                "771": 0,
                "772": 0,
                "773": 0,
                "774": 0,
                "775": 0,
                "776": 0,
                "777": 0,
                "778": 0,
                "779": 0,
                "780": 0,
                "781": 0,
                "782": 0,
                "783": 0,
                "784": 0,
                "785": 0,
                "786": 0,
                "787": 0,
                "788": 0,
                "789": 0,
                "790": 0,
                "791": 0,
                "792": 0,
                "793": 0,
                "794": 0,
                "795": 0,
                "796": 0,
                "797": 0,
                "798": 0,
                "799": 0,
                "800": 0,
                "801": 0,
                "802": 0,
                "803": 0,
                "804": 0,
                "805": 0,
                "806": 0,
                "807": 0,
                "808": 0,
                "809": 0,
                "810": 0,
                "811": 0,
                "812": 0,
                "813": 0,
                "814": 0,
                "815": 0,
                "816": 0,
                "817": 0,
                "818": 0,
                "819": 0,
                "820": 0,
                "821": 0,
                "822": 0,
                "823": 0,
                "824": 0,
                "825": 0,
                "826": 0,
                "827": 0,
                "828": 0,
                "829": 0,
                "830": 0,
                "831": 0,
                "832": 0,
                "833": 0,
                "834": 0,
                "835": 0,
                "836": 0,
                "837": 0,
                "838": 0,
                "839": 0,
                "840": 0,
                "841": 0,
                "842": 0,
                "843": 0,
                "844": 0,
                "845": 0,
                "846": 0,
                "847": 0,
                "848": 0,
                "849": 0,
                "850": 0,
                "851": 0
            },
            "distcode": {
                "0": 0,
                "1": 0,
                "2": 0,
                "3": 0,
                "4": 0,
                "5": 0,
                "6": 0,
                "7": 0,
                "8": 0,
                "9": 0,
                "10": 0,
                "11": 0,
                "12": 0,
                "13": 0,
                "14": 0,
                "15": 0,
                "16": 0,
                "17": 0,
                "18": 0,
                "19": 0,
                "20": 0,
                "21": 0,
                "22": 0,
                "23": 0,
                "24": 0,
                "25": 0,
                "26": 0,
                "27": 0,
                "28": 0,
                "29": 0,
                "30": 0,
                "31": 0,
                "32": 0,
                "33": 0,
                "34": 0,
                "35": 0,
                "36": 0,
                "37": 0,
                "38": 0,
                "39": 0,
                "40": 0,
                "41": 0,
                "42": 0,
                "43": 0,
                "44": 0,
                "45": 0,
                "46": 0,
                "47": 0,
                "48": 0,
                "49": 0,
                "50": 0,
                "51": 0,
                "52": 0,
                "53": 0,
                "54": 0,
                "55": 0,
                "56": 0,
                "57": 0,
                "58": 0,
                "59": 0,
                "60": 0,
                "61": 0,
                "62": 0,
                "63": 0,
                "64": 0,
                "65": 0,
                "66": 0,
                "67": 0,
                "68": 0,
                "69": 0,
                "70": 0,
                "71": 0,
                "72": 0,
                "73": 0,
                "74": 0,
                "75": 0,
                "76": 0,
                "77": 0,
                "78": 0,
                "79": 0,
                "80": 0,
                "81": 0,
                "82": 0,
                "83": 0,
                "84": 0,
                "85": 0,
                "86": 0,
                "87": 0,
                "88": 0,
                "89": 0,
                "90": 0,
                "91": 0,
                "92": 0,
                "93": 0,
                "94": 0,
                "95": 0,
                "96": 0,
                "97": 0,
                "98": 0,
                "99": 0,
                "100": 0,
                "101": 0,
                "102": 0,
                "103": 0,
                "104": 0,
                "105": 0,
                "106": 0,
                "107": 0,
                "108": 0,
                "109": 0,
                "110": 0,
                "111": 0,
                "112": 0,
                "113": 0,
                "114": 0,
                "115": 0,
                "116": 0,
                "117": 0,
                "118": 0,
                "119": 0,
                "120": 0,
                "121": 0,
                "122": 0,
                "123": 0,
                "124": 0,
                "125": 0,
                "126": 0,
                "127": 0,
                "128": 0,
                "129": 0,
                "130": 0,
                "131": 0,
                "132": 0,
                "133": 0,
                "134": 0,
                "135": 0,
                "136": 0,
                "137": 0,
                "138": 0,
                "139": 0,
                "140": 0,
                "141": 0,
                "142": 0,
                "143": 0,
                "144": 0,
                "145": 0,
                "146": 0,
                "147": 0,
                "148": 0,
                "149": 0,
                "150": 0,
                "151": 0,
                "152": 0,
                "153": 0,
                "154": 0,
                "155": 0,
                "156": 0,
                "157": 0,
                "158": 0,
                "159": 0,
                "160": 0,
                "161": 0,
                "162": 0,
                "163": 0,
                "164": 0,
                "165": 0,
                "166": 0,
                "167": 0,
                "168": 0,
                "169": 0,
                "170": 0,
                "171": 0,
                "172": 0,
                "173": 0,
                "174": 0,
                "175": 0,
                "176": 0,
                "177": 0,
                "178": 0,
                "179": 0,
                "180": 0,
                "181": 0,
                "182": 0,
                "183": 0,
                "184": 0,
                "185": 0,
                "186": 0,
                "187": 0,
                "188": 0,
                "189": 0,
                "190": 0,
                "191": 0,
                "192": 0,
                "193": 0,
                "194": 0,
                "195": 0,
                "196": 0,
                "197": 0,
                "198": 0,
                "199": 0,
                "200": 0,
                "201": 0,
                "202": 0,
                "203": 0,
                "204": 0,
                "205": 0,
                "206": 0,
                "207": 0,
                "208": 0,
                "209": 0,
                "210": 0,
                "211": 0,
                "212": 0,
                "213": 0,
                "214": 0,
                "215": 0,
                "216": 0,
                "217": 0,
                "218": 0,
                "219": 0,
                "220": 0,
                "221": 0,
                "222": 0,
                "223": 0,
                "224": 0,
                "225": 0,
                "226": 0,
                "227": 0,
                "228": 0,
                "229": 0,
                "230": 0,
                "231": 0,
                "232": 0,
                "233": 0,
                "234": 0,
                "235": 0,
                "236": 0,
                "237": 0,
                "238": 0,
                "239": 0,
                "240": 0,
                "241": 0,
                "242": 0,
                "243": 0,
                "244": 0,
                "245": 0,
                "246": 0,
                "247": 0,
                "248": 0,
                "249": 0,
                "250": 0,
                "251": 0,
                "252": 0,
                "253": 0,
                "254": 0,
                "255": 0,
                "256": 0,
                "257": 0,
                "258": 0,
                "259": 0,
                "260": 0,
                "261": 0,
                "262": 0,
                "263": 0,
                "264": 0,
                "265": 0,
                "266": 0,
                "267": 0,
                "268": 0,
                "269": 0,
                "270": 0,
                "271": 0,
                "272": 0,
                "273": 0,
                "274": 0,
                "275": 0,
                "276": 0,
                "277": 0,
                "278": 0,
                "279": 0,
                "280": 0,
                "281": 0,
                "282": 0,
                "283": 0,
                "284": 0,
                "285": 0,
                "286": 0,
                "287": 0,
                "288": 0,
                "289": 0,
                "290": 0,
                "291": 0,
                "292": 0,
                "293": 0,
                "294": 0,
                "295": 0,
                "296": 0,
                "297": 0,
                "298": 0,
                "299": 0,
                "300": 0,
                "301": 0,
                "302": 0,
                "303": 0,
                "304": 0,
                "305": 0,
                "306": 0,
                "307": 0,
                "308": 0,
                "309": 0,
                "310": 0,
                "311": 0,
                "312": 0,
                "313": 0,
                "314": 0,
                "315": 0,
                "316": 0,
                "317": 0,
                "318": 0,
                "319": 0,
                "320": 0,
                "321": 0,
                "322": 0,
                "323": 0,
                "324": 0,
                "325": 0,
                "326": 0,
                "327": 0,
                "328": 0,
                "329": 0,
                "330": 0,
                "331": 0,
                "332": 0,
                "333": 0,
                "334": 0,
                "335": 0,
                "336": 0,
                "337": 0,
                "338": 0,
                "339": 0,
                "340": 0,
                "341": 0,
                "342": 0,
                "343": 0,
                "344": 0,
                "345": 0,
                "346": 0,
                "347": 0,
                "348": 0,
                "349": 0,
                "350": 0,
                "351": 0,
                "352": 0,
                "353": 0,
                "354": 0,
                "355": 0,
                "356": 0,
                "357": 0,
                "358": 0,
                "359": 0,
                "360": 0,
                "361": 0,
                "362": 0,
                "363": 0,
                "364": 0,
                "365": 0,
                "366": 0,
                "367": 0,
                "368": 0,
                "369": 0,
                "370": 0,
                "371": 0,
                "372": 0,
                "373": 0,
                "374": 0,
                "375": 0,
                "376": 0,
                "377": 0,
                "378": 0,
                "379": 0,
                "380": 0,
                "381": 0,
                "382": 0,
                "383": 0,
                "384": 0,
                "385": 0,
                "386": 0,
                "387": 0,
                "388": 0,
                "389": 0,
                "390": 0,
                "391": 0,
                "392": 0,
                "393": 0,
                "394": 0,
                "395": 0,
                "396": 0,
                "397": 0,
                "398": 0,
                "399": 0,
                "400": 0,
                "401": 0,
                "402": 0,
                "403": 0,
                "404": 0,
                "405": 0,
                "406": 0,
                "407": 0,
                "408": 0,
                "409": 0,
                "410": 0,
                "411": 0,
                "412": 0,
                "413": 0,
                "414": 0,
                "415": 0,
                "416": 0,
                "417": 0,
                "418": 0,
                "419": 0,
                "420": 0,
                "421": 0,
                "422": 0,
                "423": 0,
                "424": 0,
                "425": 0,
                "426": 0,
                "427": 0,
                "428": 0,
                "429": 0,
                "430": 0,
                "431": 0,
                "432": 0,
                "433": 0,
                "434": 0,
                "435": 0,
                "436": 0,
                "437": 0,
                "438": 0,
                "439": 0,
                "440": 0,
                "441": 0,
                "442": 0,
                "443": 0,
                "444": 0,
                "445": 0,
                "446": 0,
                "447": 0,
                "448": 0,
                "449": 0,
                "450": 0,
                "451": 0,
                "452": 0,
                "453": 0,
                "454": 0,
                "455": 0,
                "456": 0,
                "457": 0,
                "458": 0,
                "459": 0,
                "460": 0,
                "461": 0,
                "462": 0,
                "463": 0,
                "464": 0,
                "465": 0,
                "466": 0,
                "467": 0,
                "468": 0,
                "469": 0,
                "470": 0,
                "471": 0,
                "472": 0,
                "473": 0,
                "474": 0,
                "475": 0,
                "476": 0,
                "477": 0,
                "478": 0,
                "479": 0,
                "480": 0,
                "481": 0,
                "482": 0,
                "483": 0,
                "484": 0,
                "485": 0,
                "486": 0,
                "487": 0,
                "488": 0,
                "489": 0,
                "490": 0,
                "491": 0,
                "492": 0,
                "493": 0,
                "494": 0,
                "495": 0,
                "496": 0,
                "497": 0,
                "498": 0,
                "499": 0,
                "500": 0,
                "501": 0,
                "502": 0,
                "503": 0,
                "504": 0,
                "505": 0,
                "506": 0,
                "507": 0,
                "508": 0,
                "509": 0,
                "510": 0,
                "511": 0,
                "512": 0,
                "513": 0,
                "514": 0,
                "515": 0,
                "516": 0,
                "517": 0,
                "518": 0,
                "519": 0,
                "520": 0,
                "521": 0,
                "522": 0,
                "523": 0,
                "524": 0,
                "525": 0,
                "526": 0,
                "527": 0,
                "528": 0,
                "529": 0,
                "530": 0,
                "531": 0,
                "532": 0,
                "533": 0,
                "534": 0,
                "535": 0,
                "536": 0,
                "537": 0,
                "538": 0,
                "539": 0,
                "540": 0,
                "541": 0,
                "542": 0,
                "543": 0,
                "544": 0,
                "545": 0,
                "546": 0,
                "547": 0,
                "548": 0,
                "549": 0,
                "550": 0,
                "551": 0,
                "552": 0,
                "553": 0,
                "554": 0,
                "555": 0,
                "556": 0,
                "557": 0,
                "558": 0,
                "559": 0,
                "560": 0,
                "561": 0,
                "562": 0,
                "563": 0,
                "564": 0,
                "565": 0,
                "566": 0,
                "567": 0,
                "568": 0,
                "569": 0,
                "570": 0,
                "571": 0,
                "572": 0,
                "573": 0,
                "574": 0,
                "575": 0,
                "576": 0,
                "577": 0,
                "578": 0,
                "579": 0,
                "580": 0,
                "581": 0,
                "582": 0,
                "583": 0,
                "584": 0,
                "585": 0,
                "586": 0,
                "587": 0,
                "588": 0,
                "589": 0,
                "590": 0,
                "591": 0
            },
            "lenbits": 0,
            "distbits": 0,
            "ncode": 0,
            "nlen": 0,
            "ndist": 0,
            "have": 0,
            "next": null,
            "lens": {
                "0": 0,
                "1": 0,
                "2": 0,
                "3": 0,
                "4": 0,
                "5": 0,
                "6": 0,
                "7": 0,
                "8": 0,
                "9": 0,
                "10": 0,
                "11": 0,
                "12": 0,
                "13": 0,
                "14": 0,
                "15": 0,
                "16": 0,
                "17": 0,
                "18": 0,
                "19": 0,
                "20": 0,
                "21": 0,
                "22": 0,
                "23": 0,
                "24": 0,
                "25": 0,
                "26": 0,
                "27": 0,
                "28": 0,
                "29": 0,
                "30": 0,
                "31": 0,
                "32": 0,
                "33": 0,
                "34": 0,
                "35": 0,
                "36": 0,
                "37": 0,
                "38": 0,
                "39": 0,
                "40": 0,
                "41": 0,
                "42": 0,
                "43": 0,
                "44": 0,
                "45": 0,
                "46": 0,
                "47": 0,
                "48": 0,
                "49": 0,
                "50": 0,
                "51": 0,
                "52": 0,
                "53": 0,
                "54": 0,
                "55": 0,
                "56": 0,
                "57": 0,
                "58": 0,
                "59": 0,
                "60": 0,
                "61": 0,
                "62": 0,
                "63": 0,
                "64": 0,
                "65": 0,
                "66": 0,
                "67": 0,
                "68": 0,
                "69": 0,
                "70": 0,
                "71": 0,
                "72": 0,
                "73": 0,
                "74": 0,
                "75": 0,
                "76": 0,
                "77": 0,
                "78": 0,
                "79": 0,
                "80": 0,
                "81": 0,
                "82": 0,
                "83": 0,
                "84": 0,
                "85": 0,
                "86": 0,
                "87": 0,
                "88": 0,
                "89": 0,
                "90": 0,
                "91": 0,
                "92": 0,
                "93": 0,
                "94": 0,
                "95": 0,
                "96": 0,
                "97": 0,
                "98": 0,
                "99": 0,
                "100": 0,
                "101": 0,
                "102": 0,
                "103": 0,
                "104": 0,
                "105": 0,
                "106": 0,
                "107": 0,
                "108": 0,
                "109": 0,
                "110": 0,
                "111": 0,
                "112": 0,
                "113": 0,
                "114": 0,
                "115": 0,
                "116": 0,
                "117": 0,
                "118": 0,
                "119": 0,
                "120": 0,
                "121": 0,
                "122": 0,
                "123": 0,
                "124": 0,
                "125": 0,
                "126": 0,
                "127": 0,
                "128": 0,
                "129": 0,
                "130": 0,
                "131": 0,
                "132": 0,
                "133": 0,
                "134": 0,
                "135": 0,
                "136": 0,
                "137": 0,
                "138": 0,
                "139": 0,
                "140": 0,
                "141": 0,
                "142": 0,
                "143": 0,
                "144": 0,
                "145": 0,
                "146": 0,
                "147": 0,
                "148": 0,
                "149": 0,
                "150": 0,
                "151": 0,
                "152": 0,
                "153": 0,
                "154": 0,
                "155": 0,
                "156": 0,
                "157": 0,
                "158": 0,
                "159": 0,
                "160": 0,
                "161": 0,
                "162": 0,
                "163": 0,
                "164": 0,
                "165": 0,
                "166": 0,
                "167": 0,
                "168": 0,
                "169": 0,
                "170": 0,
                "171": 0,
                "172": 0,
                "173": 0,
                "174": 0,
                "175": 0,
                "176": 0,
                "177": 0,
                "178": 0,
                "179": 0,
                "180": 0,
                "181": 0,
                "182": 0,
                "183": 0,
                "184": 0,
                "185": 0,
                "186": 0,
                "187": 0,
                "188": 0,
                "189": 0,
                "190": 0,
                "191": 0,
                "192": 0,
                "193": 0,
                "194": 0,
                "195": 0,
                "196": 0,
                "197": 0,
                "198": 0,
                "199": 0,
                "200": 0,
                "201": 0,
                "202": 0,
                "203": 0,
                "204": 0,
                "205": 0,
                "206": 0,
                "207": 0,
                "208": 0,
                "209": 0,
                "210": 0,
                "211": 0,
                "212": 0,
                "213": 0,
                "214": 0,
                "215": 0,
                "216": 0,
                "217": 0,
                "218": 0,
                "219": 0,
                "220": 0,
                "221": 0,
                "222": 0,
                "223": 0,
                "224": 0,
                "225": 0,
                "226": 0,
                "227": 0,
                "228": 0,
                "229": 0,
                "230": 0,
                "231": 0,
                "232": 0,
                "233": 0,
                "234": 0,
                "235": 0,
                "236": 0,
                "237": 0,
                "238": 0,
                "239": 0,
                "240": 0,
                "241": 0,
                "242": 0,
                "243": 0,
                "244": 0,
                "245": 0,
                "246": 0,
                "247": 0,
                "248": 0,
                "249": 0,
                "250": 0,
                "251": 0,
                "252": 0,
                "253": 0,
                "254": 0,
                "255": 0,
                "256": 0,
                "257": 0,
                "258": 0,
                "259": 0,
                "260": 0,
                "261": 0,
                "262": 0,
                "263": 0,
                "264": 0,
                "265": 0,
                "266": 0,
                "267": 0,
                "268": 0,
                "269": 0,
                "270": 0,
                "271": 0,
                "272": 0,
                "273": 0,
                "274": 0,
                "275": 0,
                "276": 0,
                "277": 0,
                "278": 0,
                "279": 0,
                "280": 0,
                "281": 0,
                "282": 0,
                "283": 0,
                "284": 0,
                "285": 0,
                "286": 0,
                "287": 0,
                "288": 0,
                "289": 0,
                "290": 0,
                "291": 0,
                "292": 0,
                "293": 0,
                "294": 0,
                "295": 0,
                "296": 0,
                "297": 0,
                "298": 0,
                "299": 0,
                "300": 0,
                "301": 0,
                "302": 0,
                "303": 0,
                "304": 0,
                "305": 0,
                "306": 0,
                "307": 0,
                "308": 0,
                "309": 0,
                "310": 0,
                "311": 0,
                "312": 0,
                "313": 0,
                "314": 0,
                "315": 0,
                "316": 0,
                "317": 0,
                "318": 0,
                "319": 0
            },
            "work": {
                "0": 0,
                "1": 0,
                "2": 0,
                "3": 0,
                "4": 0,
                "5": 0,
                "6": 0,
                "7": 0,
                "8": 0,
                "9": 0,
                "10": 0,
                "11": 0,
                "12": 0,
                "13": 0,
                "14": 0,
                "15": 0,
                "16": 0,
                "17": 0,
                "18": 0,
                "19": 0,
                "20": 0,
                "21": 0,
                "22": 0,
                "23": 0,
                "24": 0,
                "25": 0,
                "26": 0,
                "27": 0,
                "28": 0,
                "29": 0,
                "30": 0,
                "31": 0,
                "32": 0,
                "33": 0,
                "34": 0,
                "35": 0,
                "36": 0,
                "37": 0,
                "38": 0,
                "39": 0,
                "40": 0,
                "41": 0,
                "42": 0,
                "43": 0,
                "44": 0,
                "45": 0,
                "46": 0,
                "47": 0,
                "48": 0,
                "49": 0,
                "50": 0,
                "51": 0,
                "52": 0,
                "53": 0,
                "54": 0,
                "55": 0,
                "56": 0,
                "57": 0,
                "58": 0,
                "59": 0,
                "60": 0,
                "61": 0,
                "62": 0,
                "63": 0,
                "64": 0,
                "65": 0,
                "66": 0,
                "67": 0,
                "68": 0,
                "69": 0,
                "70": 0,
                "71": 0,
                "72": 0,
                "73": 0,
                "74": 0,
                "75": 0,
                "76": 0,
                "77": 0,
                "78": 0,
                "79": 0,
                "80": 0,
                "81": 0,
                "82": 0,
                "83": 0,
                "84": 0,
                "85": 0,
                "86": 0,
                "87": 0,
                "88": 0,
                "89": 0,
                "90": 0,
                "91": 0,
                "92": 0,
                "93": 0,
                "94": 0,
                "95": 0,
                "96": 0,
                "97": 0,
                "98": 0,
                "99": 0,
                "100": 0,
                "101": 0,
                "102": 0,
                "103": 0,
                "104": 0,
                "105": 0,
                "106": 0,
                "107": 0,
                "108": 0,
                "109": 0,
                "110": 0,
                "111": 0,
                "112": 0,
                "113": 0,
                "114": 0,
                "115": 0,
                "116": 0,
                "117": 0,
                "118": 0,
                "119": 0,
                "120": 0,
                "121": 0,
                "122": 0,
                "123": 0,
                "124": 0,
                "125": 0,
                "126": 0,
                "127": 0,
                "128": 0,
                "129": 0,
                "130": 0,
                "131": 0,
                "132": 0,
                "133": 0,
                "134": 0,
                "135": 0,
                "136": 0,
                "137": 0,
                "138": 0,
                "139": 0,
                "140": 0,
                "141": 0,
                "142": 0,
                "143": 0,
                "144": 0,
                "145": 0,
                "146": 0,
                "147": 0,
                "148": 0,
                "149": 0,
                "150": 0,
                "151": 0,
                "152": 0,
                "153": 0,
                "154": 0,
                "155": 0,
                "156": 0,
                "157": 0,
                "158": 0,
                "159": 0,
                "160": 0,
                "161": 0,
                "162": 0,
                "163": 0,
                "164": 0,
                "165": 0,
                "166": 0,
                "167": 0,
                "168": 0,
                "169": 0,
                "170": 0,
                "171": 0,
                "172": 0,
                "173": 0,
                "174": 0,
                "175": 0,
                "176": 0,
                "177": 0,
                "178": 0,
                "179": 0,
                "180": 0,
                "181": 0,
                "182": 0,
                "183": 0,
                "184": 0,
                "185": 0,
                "186": 0,
                "187": 0,
                "188": 0,
                "189": 0,
                "190": 0,
                "191": 0,
                "192": 0,
                "193": 0,
                "194": 0,
                "195": 0,
                "196": 0,
                "197": 0,
                "198": 0,
                "199": 0,
                "200": 0,
                "201": 0,
                "202": 0,
                "203": 0,
                "204": 0,
                "205": 0,
                "206": 0,
                "207": 0,
                "208": 0,
                "209": 0,
                "210": 0,
                "211": 0,
                "212": 0,
                "213": 0,
                "214": 0,
                "215": 0,
                "216": 0,
                "217": 0,
                "218": 0,
                "219": 0,
                "220": 0,
                "221": 0,
                "222": 0,
                "223": 0,
                "224": 0,
                "225": 0,
                "226": 0,
                "227": 0,
                "228": 0,
                "229": 0,
                "230": 0,
                "231": 0,
                "232": 0,
                "233": 0,
                "234": 0,
                "235": 0,
                "236": 0,
                "237": 0,
                "238": 0,
                "239": 0,
                "240": 0,
                "241": 0,
                "242": 0,
                "243": 0,
                "244": 0,
                "245": 0,
                "246": 0,
                "247": 0,
                "248": 0,
                "249": 0,
                "250": 0,
                "251": 0,
                "252": 0,
                "253": 0,
                "254": 0,
                "255": 0,
                "256": 0,
                "257": 0,
                "258": 0,
                "259": 0,
                "260": 0,
                "261": 0,
                "262": 0,
                "263": 0,
                "264": 0,
                "265": 0,
                "266": 0,
                "267": 0,
                "268": 0,
                "269": 0,
                "270": 0,
                "271": 0,
                "272": 0,
                "273": 0,
                "274": 0,
                "275": 0,
                "276": 0,
                "277": 0,
                "278": 0,
                "279": 0,
                "280": 0,
                "281": 0,
                "282": 0,
                "283": 0,
                "284": 0,
                "285": 0,
                "286": 0,
                "287": 0
            },
            "lendyn": {
                "0": 0,
                "1": 0,
                "2": 0,
                "3": 0,
                "4": 0,
                "5": 0,
                "6": 0,
                "7": 0,
                "8": 0,
                "9": 0,
                "10": 0,
                "11": 0,
                "12": 0,
                "13": 0,
                "14": 0,
                "15": 0,
                "16": 0,
                "17": 0,
                "18": 0,
                "19": 0,
                "20": 0,
                "21": 0,
                "22": 0,
                "23": 0,
                "24": 0,
                "25": 0,
                "26": 0,
                "27": 0,
                "28": 0,
                "29": 0,
                "30": 0,
                "31": 0,
                "32": 0,
                "33": 0,
                "34": 0,
                "35": 0,
                "36": 0,
                "37": 0,
                "38": 0,
                "39": 0,
                "40": 0,
                "41": 0,
                "42": 0,
                "43": 0,
                "44": 0,
                "45": 0,
                "46": 0,
                "47": 0,
                "48": 0,
                "49": 0,
                "50": 0,
                "51": 0,
                "52": 0,
                "53": 0,
                "54": 0,
                "55": 0,
                "56": 0,
                "57": 0,
                "58": 0,
                "59": 0,
                "60": 0,
                "61": 0,
                "62": 0,
                "63": 0,
                "64": 0,
                "65": 0,
                "66": 0,
                "67": 0,
                "68": 0,
                "69": 0,
                "70": 0,
                "71": 0,
                "72": 0,
                "73": 0,
                "74": 0,
                "75": 0,
                "76": 0,
                "77": 0,
                "78": 0,
                "79": 0,
                "80": 0,
                "81": 0,
                "82": 0,
                "83": 0,
                "84": 0,
                "85": 0,
                "86": 0,
                "87": 0,
                "88": 0,
                "89": 0,
                "90": 0,
                "91": 0,
                "92": 0,
                "93": 0,
                "94": 0,
                "95": 0,
                "96": 0,
                "97": 0,
                "98": 0,
                "99": 0,
                "100": 0,
                "101": 0,
                "102": 0,
                "103": 0,
                "104": 0,
                "105": 0,
                "106": 0,
                "107": 0,
                "108": 0,
                "109": 0,
                "110": 0,
                "111": 0,
                "112": 0,
                "113": 0,
                "114": 0,
                "115": 0,
                "116": 0,
                "117": 0,
                "118": 0,
                "119": 0,
                "120": 0,
                "121": 0,
                "122": 0,
                "123": 0,
                "124": 0,
                "125": 0,
                "126": 0,
                "127": 0,
                "128": 0,
                "129": 0,
                "130": 0,
                "131": 0,
                "132": 0,
                "133": 0,
                "134": 0,
                "135": 0,
                "136": 0,
                "137": 0,
                "138": 0,
                "139": 0,
                "140": 0,
                "141": 0,
                "142": 0,
                "143": 0,
                "144": 0,
                "145": 0,
                "146": 0,
                "147": 0,
                "148": 0,
                "149": 0,
                "150": 0,
                "151": 0,
                "152": 0,
                "153": 0,
                "154": 0,
                "155": 0,
                "156": 0,
                "157": 0,
                "158": 0,
                "159": 0,
                "160": 0,
                "161": 0,
                "162": 0,
                "163": 0,
                "164": 0,
                "165": 0,
                "166": 0,
                "167": 0,
                "168": 0,
                "169": 0,
                "170": 0,
                "171": 0,
                "172": 0,
                "173": 0,
                "174": 0,
                "175": 0,
                "176": 0,
                "177": 0,
                "178": 0,
                "179": 0,
                "180": 0,
                "181": 0,
                "182": 0,
                "183": 0,
                "184": 0,
                "185": 0,
                "186": 0,
                "187": 0,
                "188": 0,
                "189": 0,
                "190": 0,
                "191": 0,
                "192": 0,
                "193": 0,
                "194": 0,
                "195": 0,
                "196": 0,
                "197": 0,
                "198": 0,
                "199": 0,
                "200": 0,
                "201": 0,
                "202": 0,
                "203": 0,
                "204": 0,
                "205": 0,
                "206": 0,
                "207": 0,
                "208": 0,
                "209": 0,
                "210": 0,
                "211": 0,
                "212": 0,
                "213": 0,
                "214": 0,
                "215": 0,
                "216": 0,
                "217": 0,
                "218": 0,
                "219": 0,
                "220": 0,
                "221": 0,
                "222": 0,
                "223": 0,
                "224": 0,
                "225": 0,
                "226": 0,
                "227": 0,
                "228": 0,
                "229": 0,
                "230": 0,
                "231": 0,
                "232": 0,
                "233": 0,
                "234": 0,
                "235": 0,
                "236": 0,
                "237": 0,
                "238": 0,
                "239": 0,
                "240": 0,
                "241": 0,
                "242": 0,
                "243": 0,
                "244": 0,
                "245": 0,
                "246": 0,
                "247": 0,
                "248": 0,
                "249": 0,
                "250": 0,
                "251": 0,
                "252": 0,
                "253": 0,
                "254": 0,
                "255": 0,
                "256": 0,
                "257": 0,
                "258": 0,
                "259": 0,
                "260": 0,
                "261": 0,
                "262": 0,
                "263": 0,
                "264": 0,
                "265": 0,
                "266": 0,
                "267": 0,
                "268": 0,
                "269": 0,
                "270": 0,
                "271": 0,
                "272": 0,
                "273": 0,
                "274": 0,
                "275": 0,
                "276": 0,
                "277": 0,
                "278": 0,
                "279": 0,
                "280": 0,
                "281": 0,
                "282": 0,
                "283": 0,
                "284": 0,
                "285": 0,
                "286": 0,
                "287": 0,
                "288": 0,
                "289": 0,
                "290": 0,
                "291": 0,
                "292": 0,
                "293": 0,
                "294": 0,
                "295": 0,
                "296": 0,
                "297": 0,
                "298": 0,
                "299": 0,
                "300": 0,
                "301": 0,
                "302": 0,
                "303": 0,
                "304": 0,
                "305": 0,
                "306": 0,
                "307": 0,
                "308": 0,
                "309": 0,
                "310": 0,
                "311": 0,
                "312": 0,
                "313": 0,
                "314": 0,
                "315": 0,
                "316": 0,
                "317": 0,
                "318": 0,
                "319": 0,
                "320": 0,
                "321": 0,
                "322": 0,
                "323": 0,
                "324": 0,
                "325": 0,
                "326": 0,
                "327": 0,
                "328": 0,
                "329": 0,
                "330": 0,
                "331": 0,
                "332": 0,
                "333": 0,
                "334": 0,
                "335": 0,
                "336": 0,
                "337": 0,
                "338": 0,
                "339": 0,
                "340": 0,
                "341": 0,
                "342": 0,
                "343": 0,
                "344": 0,
                "345": 0,
                "346": 0,
                "347": 0,
                "348": 0,
                "349": 0,
                "350": 0,
                "351": 0,
                "352": 0,
                "353": 0,
                "354": 0,
                "355": 0,
                "356": 0,
                "357": 0,
                "358": 0,
                "359": 0,
                "360": 0,
                "361": 0,
                "362": 0,
                "363": 0,
                "364": 0,
                "365": 0,
                "366": 0,
                "367": 0,
                "368": 0,
                "369": 0,
                "370": 0,
                "371": 0,
                "372": 0,
                "373": 0,
                "374": 0,
                "375": 0,
                "376": 0,
                "377": 0,
                "378": 0,
                "379": 0,
                "380": 0,
                "381": 0,
                "382": 0,
                "383": 0,
                "384": 0,
                "385": 0,
                "386": 0,
                "387": 0,
                "388": 0,
                "389": 0,
                "390": 0,
                "391": 0,
                "392": 0,
                "393": 0,
                "394": 0,
                "395": 0,
                "396": 0,
                "397": 0,
                "398": 0,
                "399": 0,
                "400": 0,
                "401": 0,
                "402": 0,
                "403": 0,
                "404": 0,
                "405": 0,
                "406": 0,
                "407": 0,
                "408": 0,
                "409": 0,
                "410": 0,
                "411": 0,
                "412": 0,
                "413": 0,
                "414": 0,
                "415": 0,
                "416": 0,
                "417": 0,
                "418": 0,
                "419": 0,
                "420": 0,
                "421": 0,
                "422": 0,
                "423": 0,
                "424": 0,
                "425": 0,
                "426": 0,
                "427": 0,
                "428": 0,
                "429": 0,
                "430": 0,
                "431": 0,
                "432": 0,
                "433": 0,
                "434": 0,
                "435": 0,
                "436": 0,
                "437": 0,
                "438": 0,
                "439": 0,
                "440": 0,
                "441": 0,
                "442": 0,
                "443": 0,
                "444": 0,
                "445": 0,
                "446": 0,
                "447": 0,
                "448": 0,
                "449": 0,
                "450": 0,
                "451": 0,
                "452": 0,
                "453": 0,
                "454": 0,
                "455": 0,
                "456": 0,
                "457": 0,
                "458": 0,
                "459": 0,
                "460": 0,
                "461": 0,
                "462": 0,
                "463": 0,
                "464": 0,
                "465": 0,
                "466": 0,
                "467": 0,
                "468": 0,
                "469": 0,
                "470": 0,
                "471": 0,
                "472": 0,
                "473": 0,
                "474": 0,
                "475": 0,
                "476": 0,
                "477": 0,
                "478": 0,
                "479": 0,
                "480": 0,
                "481": 0,
                "482": 0,
                "483": 0,
                "484": 0,
                "485": 0,
                "486": 0,
                "487": 0,
                "488": 0,
                "489": 0,
                "490": 0,
                "491": 0,
                "492": 0,
                "493": 0,
                "494": 0,
                "495": 0,
                "496": 0,
                "497": 0,
                "498": 0,
                "499": 0,
                "500": 0,
                "501": 0,
                "502": 0,
                "503": 0,
                "504": 0,
                "505": 0,
                "506": 0,
                "507": 0,
                "508": 0,
                "509": 0,
                "510": 0,
                "511": 0,
                "512": 0,
                "513": 0,
                "514": 0,
                "515": 0,
                "516": 0,
                "517": 0,
                "518": 0,
                "519": 0,
                "520": 0,
                "521": 0,
                "522": 0,
                "523": 0,
                "524": 0,
                "525": 0,
                "526": 0,
                "527": 0,
                "528": 0,
                "529": 0,
                "530": 0,
                "531": 0,
                "532": 0,
                "533": 0,
                "534": 0,
                "535": 0,
                "536": 0,
                "537": 0,
                "538": 0,
                "539": 0,
                "540": 0,
                "541": 0,
                "542": 0,
                "543": 0,
                "544": 0,
                "545": 0,
                "546": 0,
                "547": 0,
                "548": 0,
                "549": 0,
                "550": 0,
                "551": 0,
                "552": 0,
                "553": 0,
                "554": 0,
                "555": 0,
                "556": 0,
                "557": 0,
                "558": 0,
                "559": 0,
                "560": 0,
                "561": 0,
                "562": 0,
                "563": 0,
                "564": 0,
                "565": 0,
                "566": 0,
                "567": 0,
                "568": 0,
                "569": 0,
                "570": 0,
                "571": 0,
                "572": 0,
                "573": 0,
                "574": 0,
                "575": 0,
                "576": 0,
                "577": 0,
                "578": 0,
                "579": 0,
                "580": 0,
                "581": 0,
                "582": 0,
                "583": 0,
                "584": 0,
                "585": 0,
                "586": 0,
                "587": 0,
                "588": 0,
                "589": 0,
                "590": 0,
                "591": 0,
                "592": 0,
                "593": 0,
                "594": 0,
                "595": 0,
                "596": 0,
                "597": 0,
                "598": 0,
                "599": 0,
                "600": 0,
                "601": 0,
                "602": 0,
                "603": 0,
                "604": 0,
                "605": 0,
                "606": 0,
                "607": 0,
                "608": 0,
                "609": 0,
                "610": 0,
                "611": 0,
                "612": 0,
                "613": 0,
                "614": 0,
                "615": 0,
                "616": 0,
                "617": 0,
                "618": 0,
                "619": 0,
                "620": 0,
                "621": 0,
                "622": 0,
                "623": 0,
                "624": 0,
                "625": 0,
                "626": 0,
                "627": 0,
                "628": 0,
                "629": 0,
                "630": 0,
                "631": 0,
                "632": 0,
                "633": 0,
                "634": 0,
                "635": 0,
                "636": 0,
                "637": 0,
                "638": 0,
                "639": 0,
                "640": 0,
                "641": 0,
                "642": 0,
                "643": 0,
                "644": 0,
                "645": 0,
                "646": 0,
                "647": 0,
                "648": 0,
                "649": 0,
                "650": 0,
                "651": 0,
                "652": 0,
                "653": 0,
                "654": 0,
                "655": 0,
                "656": 0,
                "657": 0,
                "658": 0,
                "659": 0,
                "660": 0,
                "661": 0,
                "662": 0,
                "663": 0,
                "664": 0,
                "665": 0,
                "666": 0,
                "667": 0,
                "668": 0,
                "669": 0,
                "670": 0,
                "671": 0,
                "672": 0,
                "673": 0,
                "674": 0,
                "675": 0,
                "676": 0,
                "677": 0,
                "678": 0,
                "679": 0,
                "680": 0,
                "681": 0,
                "682": 0,
                "683": 0,
                "684": 0,
                "685": 0,
                "686": 0,
                "687": 0,
                "688": 0,
                "689": 0,
                "690": 0,
                "691": 0,
                "692": 0,
                "693": 0,
                "694": 0,
                "695": 0,
                "696": 0,
                "697": 0,
                "698": 0,
                "699": 0,
                "700": 0,
                "701": 0,
                "702": 0,
                "703": 0,
                "704": 0,
                "705": 0,
                "706": 0,
                "707": 0,
                "708": 0,
                "709": 0,
                "710": 0,
                "711": 0,
                "712": 0,
                "713": 0,
                "714": 0,
                "715": 0,
                "716": 0,
                "717": 0,
                "718": 0,
                "719": 0,
                "720": 0,
                "721": 0,
                "722": 0,
                "723": 0,
                "724": 0,
                "725": 0,
                "726": 0,
                "727": 0,
                "728": 0,
                "729": 0,
                "730": 0,
                "731": 0,
                "732": 0,
                "733": 0,
                "734": 0,
                "735": 0,
                "736": 0,
                "737": 0,
                "738": 0,
                "739": 0,
                "740": 0,
                "741": 0,
                "742": 0,
                "743": 0,
                "744": 0,
                "745": 0,
                "746": 0,
                "747": 0,
                "748": 0,
                "749": 0,
                "750": 0,
                "751": 0,
                "752": 0,
                "753": 0,
                "754": 0,
                "755": 0,
                "756": 0,
                "757": 0,
                "758": 0,
                "759": 0,
                "760": 0,
                "761": 0,
                "762": 0,
                "763": 0,
                "764": 0,
                "765": 0,
                "766": 0,
                "767": 0,
                "768": 0,
                "769": 0,
                "770": 0,
                "771": 0,
                "772": 0,
                "773": 0,
                "774": 0,
                "775": 0,
                "776": 0,
                "777": 0,
                "778": 0,
                "779": 0,
                "780": 0,
                "781": 0,
                "782": 0,
                "783": 0,
                "784": 0,
                "785": 0,
                "786": 0,
                "787": 0,
                "788": 0,
                "789": 0,
                "790": 0,
                "791": 0,
                "792": 0,
                "793": 0,
                "794": 0,
                "795": 0,
                "796": 0,
                "797": 0,
                "798": 0,
                "799": 0,
                "800": 0,
                "801": 0,
                "802": 0,
                "803": 0,
                "804": 0,
                "805": 0,
                "806": 0,
                "807": 0,
                "808": 0,
                "809": 0,
                "810": 0,
                "811": 0,
                "812": 0,
                "813": 0,
                "814": 0,
                "815": 0,
                "816": 0,
                "817": 0,
                "818": 0,
                "819": 0,
                "820": 0,
                "821": 0,
                "822": 0,
                "823": 0,
                "824": 0,
                "825": 0,
                "826": 0,
                "827": 0,
                "828": 0,
                "829": 0,
                "830": 0,
                "831": 0,
                "832": 0,
                "833": 0,
                "834": 0,
                "835": 0,
                "836": 0,
                "837": 0,
                "838": 0,
                "839": 0,
                "840": 0,
                "841": 0,
                "842": 0,
                "843": 0,
                "844": 0,
                "845": 0,
                "846": 0,
                "847": 0,
                "848": 0,
                "849": 0,
                "850": 0,
                "851": 0
            },
            "distdyn": {
                "0": 0,
                "1": 0,
                "2": 0,
                "3": 0,
                "4": 0,
                "5": 0,
                "6": 0,
                "7": 0,
                "8": 0,
                "9": 0,
                "10": 0,
                "11": 0,
                "12": 0,
                "13": 0,
                "14": 0,
                "15": 0,
                "16": 0,
                "17": 0,
                "18": 0,
                "19": 0,
                "20": 0,
                "21": 0,
                "22": 0,
                "23": 0,
                "24": 0,
                "25": 0,
                "26": 0,
                "27": 0,
                "28": 0,
                "29": 0,
                "30": 0,
                "31": 0,
                "32": 0,
                "33": 0,
                "34": 0,
                "35": 0,
                "36": 0,
                "37": 0,
                "38": 0,
                "39": 0,
                "40": 0,
                "41": 0,
                "42": 0,
                "43": 0,
                "44": 0,
                "45": 0,
                "46": 0,
                "47": 0,
                "48": 0,
                "49": 0,
                "50": 0,
                "51": 0,
                "52": 0,
                "53": 0,
                "54": 0,
                "55": 0,
                "56": 0,
                "57": 0,
                "58": 0,
                "59": 0,
                "60": 0,
                "61": 0,
                "62": 0,
                "63": 0,
                "64": 0,
                "65": 0,
                "66": 0,
                "67": 0,
                "68": 0,
                "69": 0,
                "70": 0,
                "71": 0,
                "72": 0,
                "73": 0,
                "74": 0,
                "75": 0,
                "76": 0,
                "77": 0,
                "78": 0,
                "79": 0,
                "80": 0,
                "81": 0,
                "82": 0,
                "83": 0,
                "84": 0,
                "85": 0,
                "86": 0,
                "87": 0,
                "88": 0,
                "89": 0,
                "90": 0,
                "91": 0,
                "92": 0,
                "93": 0,
                "94": 0,
                "95": 0,
                "96": 0,
                "97": 0,
                "98": 0,
                "99": 0,
                "100": 0,
                "101": 0,
                "102": 0,
                "103": 0,
                "104": 0,
                "105": 0,
                "106": 0,
                "107": 0,
                "108": 0,
                "109": 0,
                "110": 0,
                "111": 0,
                "112": 0,
                "113": 0,
                "114": 0,
                "115": 0,
                "116": 0,
                "117": 0,
                "118": 0,
                "119": 0,
                "120": 0,
                "121": 0,
                "122": 0,
                "123": 0,
                "124": 0,
                "125": 0,
                "126": 0,
                "127": 0,
                "128": 0,
                "129": 0,
                "130": 0,
                "131": 0,
                "132": 0,
                "133": 0,
                "134": 0,
                "135": 0,
                "136": 0,
                "137": 0,
                "138": 0,
                "139": 0,
                "140": 0,
                "141": 0,
                "142": 0,
                "143": 0,
                "144": 0,
                "145": 0,
                "146": 0,
                "147": 0,
                "148": 0,
                "149": 0,
                "150": 0,
                "151": 0,
                "152": 0,
                "153": 0,
                "154": 0,
                "155": 0,
                "156": 0,
                "157": 0,
                "158": 0,
                "159": 0,
                "160": 0,
                "161": 0,
                "162": 0,
                "163": 0,
                "164": 0,
                "165": 0,
                "166": 0,
                "167": 0,
                "168": 0,
                "169": 0,
                "170": 0,
                "171": 0,
                "172": 0,
                "173": 0,
                "174": 0,
                "175": 0,
                "176": 0,
                "177": 0,
                "178": 0,
                "179": 0,
                "180": 0,
                "181": 0,
                "182": 0,
                "183": 0,
                "184": 0,
                "185": 0,
                "186": 0,
                "187": 0,
                "188": 0,
                "189": 0,
                "190": 0,
                "191": 0,
                "192": 0,
                "193": 0,
                "194": 0,
                "195": 0,
                "196": 0,
                "197": 0,
                "198": 0,
                "199": 0,
                "200": 0,
                "201": 0,
                "202": 0,
                "203": 0,
                "204": 0,
                "205": 0,
                "206": 0,
                "207": 0,
                "208": 0,
                "209": 0,
                "210": 0,
                "211": 0,
                "212": 0,
                "213": 0,
                "214": 0,
                "215": 0,
                "216": 0,
                "217": 0,
                "218": 0,
                "219": 0,
                "220": 0,
                "221": 0,
                "222": 0,
                "223": 0,
                "224": 0,
                "225": 0,
                "226": 0,
                "227": 0,
                "228": 0,
                "229": 0,
                "230": 0,
                "231": 0,
                "232": 0,
                "233": 0,
                "234": 0,
                "235": 0,
                "236": 0,
                "237": 0,
                "238": 0,
                "239": 0,
                "240": 0,
                "241": 0,
                "242": 0,
                "243": 0,
                "244": 0,
                "245": 0,
                "246": 0,
                "247": 0,
                "248": 0,
                "249": 0,
                "250": 0,
                "251": 0,
                "252": 0,
                "253": 0,
                "254": 0,
                "255": 0,
                "256": 0,
                "257": 0,
                "258": 0,
                "259": 0,
                "260": 0,
                "261": 0,
                "262": 0,
                "263": 0,
                "264": 0,
                "265": 0,
                "266": 0,
                "267": 0,
                "268": 0,
                "269": 0,
                "270": 0,
                "271": 0,
                "272": 0,
                "273": 0,
                "274": 0,
                "275": 0,
                "276": 0,
                "277": 0,
                "278": 0,
                "279": 0,
                "280": 0,
                "281": 0,
                "282": 0,
                "283": 0,
                "284": 0,
                "285": 0,
                "286": 0,
                "287": 0,
                "288": 0,
                "289": 0,
                "290": 0,
                "291": 0,
                "292": 0,
                "293": 0,
                "294": 0,
                "295": 0,
                "296": 0,
                "297": 0,
                "298": 0,
                "299": 0,
                "300": 0,
                "301": 0,
                "302": 0,
                "303": 0,
                "304": 0,
                "305": 0,
                "306": 0,
                "307": 0,
                "308": 0,
                "309": 0,
                "310": 0,
                "311": 0,
                "312": 0,
                "313": 0,
                "314": 0,
                "315": 0,
                "316": 0,
                "317": 0,
                "318": 0,
                "319": 0,
                "320": 0,
                "321": 0,
                "322": 0,
                "323": 0,
                "324": 0,
                "325": 0,
                "326": 0,
                "327": 0,
                "328": 0,
                "329": 0,
                "330": 0,
                "331": 0,
                "332": 0,
                "333": 0,
                "334": 0,
                "335": 0,
                "336": 0,
                "337": 0,
                "338": 0,
                "339": 0,
                "340": 0,
                "341": 0,
                "342": 0,
                "343": 0,
                "344": 0,
                "345": 0,
                "346": 0,
                "347": 0,
                "348": 0,
                "349": 0,
                "350": 0,
                "351": 0,
                "352": 0,
                "353": 0,
                "354": 0,
                "355": 0,
                "356": 0,
                "357": 0,
                "358": 0,
                "359": 0,
                "360": 0,
                "361": 0,
                "362": 0,
                "363": 0,
                "364": 0,
                "365": 0,
                "366": 0,
                "367": 0,
                "368": 0,
                "369": 0,
                "370": 0,
                "371": 0,
                "372": 0,
                "373": 0,
                "374": 0,
                "375": 0,
                "376": 0,
                "377": 0,
                "378": 0,
                "379": 0,
                "380": 0,
                "381": 0,
                "382": 0,
                "383": 0,
                "384": 0,
                "385": 0,
                "386": 0,
                "387": 0,
                "388": 0,
                "389": 0,
                "390": 0,
                "391": 0,
                "392": 0,
                "393": 0,
                "394": 0,
                "395": 0,
                "396": 0,
                "397": 0,
                "398": 0,
                "399": 0,
                "400": 0,
                "401": 0,
                "402": 0,
                "403": 0,
                "404": 0,
                "405": 0,
                "406": 0,
                "407": 0,
                "408": 0,
                "409": 0,
                "410": 0,
                "411": 0,
                "412": 0,
                "413": 0,
                "414": 0,
                "415": 0,
                "416": 0,
                "417": 0,
                "418": 0,
                "419": 0,
                "420": 0,
                "421": 0,
                "422": 0,
                "423": 0,
                "424": 0,
                "425": 0,
                "426": 0,
                "427": 0,
                "428": 0,
                "429": 0,
                "430": 0,
                "431": 0,
                "432": 0,
                "433": 0,
                "434": 0,
                "435": 0,
                "436": 0,
                "437": 0,
                "438": 0,
                "439": 0,
                "440": 0,
                "441": 0,
                "442": 0,
                "443": 0,
                "444": 0,
                "445": 0,
                "446": 0,
                "447": 0,
                "448": 0,
                "449": 0,
                "450": 0,
                "451": 0,
                "452": 0,
                "453": 0,
                "454": 0,
                "455": 0,
                "456": 0,
                "457": 0,
                "458": 0,
                "459": 0,
                "460": 0,
                "461": 0,
                "462": 0,
                "463": 0,
                "464": 0,
                "465": 0,
                "466": 0,
                "467": 0,
                "468": 0,
                "469": 0,
                "470": 0,
                "471": 0,
                "472": 0,
                "473": 0,
                "474": 0,
                "475": 0,
                "476": 0,
                "477": 0,
                "478": 0,
                "479": 0,
                "480": 0,
                "481": 0,
                "482": 0,
                "483": 0,
                "484": 0,
                "485": 0,
                "486": 0,
                "487": 0,
                "488": 0,
                "489": 0,
                "490": 0,
                "491": 0,
                "492": 0,
                "493": 0,
                "494": 0,
                "495": 0,
                "496": 0,
                "497": 0,
                "498": 0,
                "499": 0,
                "500": 0,
                "501": 0,
                "502": 0,
                "503": 0,
                "504": 0,
                "505": 0,
                "506": 0,
                "507": 0,
                "508": 0,
                "509": 0,
                "510": 0,
                "511": 0,
                "512": 0,
                "513": 0,
                "514": 0,
                "515": 0,
                "516": 0,
                "517": 0,
                "518": 0,
                "519": 0,
                "520": 0,
                "521": 0,
                "522": 0,
                "523": 0,
                "524": 0,
                "525": 0,
                "526": 0,
                "527": 0,
                "528": 0,
                "529": 0,
                "530": 0,
                "531": 0,
                "532": 0,
                "533": 0,
                "534": 0,
                "535": 0,
                "536": 0,
                "537": 0,
                "538": 0,
                "539": 0,
                "540": 0,
                "541": 0,
                "542": 0,
                "543": 0,
                "544": 0,
                "545": 0,
                "546": 0,
                "547": 0,
                "548": 0,
                "549": 0,
                "550": 0,
                "551": 0,
                "552": 0,
                "553": 0,
                "554": 0,
                "555": 0,
                "556": 0,
                "557": 0,
                "558": 0,
                "559": 0,
                "560": 0,
                "561": 0,
                "562": 0,
                "563": 0,
                "564": 0,
                "565": 0,
                "566": 0,
                "567": 0,
                "568": 0,
                "569": 0,
                "570": 0,
                "571": 0,
                "572": 0,
                "573": 0,
                "574": 0,
                "575": 0,
                "576": 0,
                "577": 0,
                "578": 0,
                "579": 0,
                "580": 0,
                "581": 0,
                "582": 0,
                "583": 0,
                "584": 0,
                "585": 0,
                "586": 0,
                "587": 0,
                "588": 0,
                "589": 0,
                "590": 0,
                "591": 0
            },
            "sane": 1,
            "back": -1,
            "was": 0
      },
      "data_type": 2,
      "adler": 1
    }
      , i = 65536
      , a = undefined;
    let s, l, y;
    if (this.ended)
      return !1;
    for (l = t === ~~t ? t : !0 === t ? h : 0,
             "" === toString.call(e) ? n.input = new Uint8Array(e) : n.input = e,
             n.next_in = 0,
             n.avail_in = n.input.length; ;) {
      0 === n.avail_out && (n.output = new Uint8Array(i),
            n.next_out = 0,
            n.avail_out = i),
            s = inflate(n, l),
      s === 2 && a && (s = r.inflateSetDictionary(n, a),
            s === 0 ? s = r.inflate(n, l) : s === -3 && (s = 2));
      while (n.avail_in > 0 && s === 1 && n.state.wrap > 0 && 0 !== e)
            r.inflateReset(n),
                s = r.inflate(n, l);
      switch (s) {
            case -2:
            case -3:
            case 2:
            case -4:
                return onEnd(s),
                  this.ended = !0,
                  !1
      }
      if (y = n.avail_out,
      n.next_out && (0 === n.avail_out || s === d))
            if ("string" === this.options.to) {
                let e = o.utf8border(n.output, n.next_out)
                  , t = n.next_out - e
                  , r = o.buf2string(n.output, e);
                n.next_out = t,
                  n.avail_out = i - t,
                t && n.output.set(n.output.subarray(e, e + t), 0),
                  this.onData(r)
            } else
                this.onData(n.output.length === n.next_out ? n.output : n.output.subarray(0, n.next_out));
      if (s !== f || 0 !== y) {
            if (s === d)
                return s = r.inflateEnd(this.strm),
                  this.onEnd(s),
                  this.ended = !0,
                  !0;
            if (0 === n.avail_in)
                break
      }
    }
    return !0
}

function onEnd(e) {
            e === 0 && ("string" === this.options.to ? this.result = this.chunks.join("") : this.result = i.flattenChunks(this.chunks)),
            this.chunks = [],
            this.err = e,
            this.msg = ""
      }

function ii(e,t,r,i){
            const o = n
            , a = i + r;
            e ^= -1;
            for (let n = i; n < a; n++)
                e = e >>> 8 ^ o)];
            return ~e
      }

function aaaaaa(e,h,f,d,p,m,v,g){
            const y = g.bits;
            let b, x, w, _, S, C, E = 0, k = 0, T = 0, O = 0, P = 0, M = 0, A = 0, D = 0, j = 0, I = 0, R = null, $ = 0;
            const N = new Uint16Array(t + 1)
            , F = new Uint16Array(t + 1);
            let L, B, z, V = null, H = 0;
            for (E = 0; E <= t; E++)
                N = 0;
            for (k = 0; k < d; k++)
                N]++;
            for (P = y,
            O = t; O >= 1; O--)
                if (0 !== N)
                  break;
            if (P > O && (P = O),
            0 === O)
                return p = 20971520,
                p = 20971520,
                g.bits = 1,
                0;
            for (T = 1; T < O; T++)
                if (0 !== N)
                  break;
            for (P < T && (P = T),
            D = 1,
            E = 1; E <= t; E++)
                if (D <<= 1,
                D -= N,
                D < 0)
                  return -1;
            if (D > 0 && (e === ii || 1 !== O))
                return -1;
            for (F = 0,
            E = 1; E < t; E++)
                F = F + N;
            for (k = 0; k < d; k++)
                0 !== h && (v]++] = k);
            if (e === i ? (R = V = v,
            C = 19) : e === o ? (R = s,
            $ -= 257,
            V = l,
            H -= 257,
            C = 256) : (R = u,
            V = c,
            C = -1),
            I = 0,
            k = 0,
            E = T,
            S = m,
            M = P,
            A = 0,
            w = -1,
            j = 1 << P,
            _ = j - 1,
            e === o && j > n || e === a && j > r)
                return 1;
            for (; ; ) {
                L = E - A,
                v < C ? (B = 0,
                z = v) : v > C ? (B = V],
                z = R[$ + v]) : (B = 96,
                z = 0),
                b = 1 << E - A,
                x = 1 << M,
                T = x;
                do {
                  x -= b,
                  p = L << 24 | B << 16 | z
                } while (0 !== x);
                b = 1 << E - 1;
                while (I & b)
                  b >>= 1;
                if (0 !== b ? (I &= b - 1,
                I += b) : I = 0,
                k++,
                0 === --N) {
                  if (E === O)
                        break;
                  E = h]
                }
                if (E > P && (I & _) !== w) {
                  0 === A && (A = P),
                  S += T,
                  M = E - A,
                  D = 1 << M;
                  while (M + A < O) {
                        if (D -= N,
                        D <= 0)
                            break;
                        M++,
                        D <<= 1
                  }
                  if (j += 1 << M,
                  e === o && j > n || e === a && j > r)
                        return 1;
                  w = I & _,
                  p = P << 24 | M << 16 | S - m
                }
            }
            return 0 !== I && (p = E - A << 24 | 64 << 16),
            g.bits = P,
            0
      }


function ungzip(e, t) {
    const n = new y(t);
    if (pusher(e),
      n.err)
      throw n.msg || a;
    return n.result
}

function l(t) {
    var e, n, i = t.words.length, a = new Uint8Array(t.sigBytes), o = 0;
    for (n = 0; n < i; n++)
      e = t.words,
            a = e >> 24,
            a = e >> 16 & 255,
            a = e >> 8 & 255,
            a = 255 & e;
    return a
}

decrypt(e);结果如下,成功解密。


[*]编写python代码,联动js代码,实现实时数据的解密。
var CryptoJS = require("crypto-js")
var pako = require("pako")
var e = "数据";

function decrypt(e) {

    var n = CryptoJS.enc.Utf8.parse(27..toString(36).toLowerCase().split("").map((function (t) {
            return String.fromCharCode(t.charCodeAt() + -39)
      }
    )).join("") + 24901..toString(36).toLowerCase() + 33..toString(36).toLowerCase().split("").map((function (t) {
            return String.fromCharCode(t.charCodeAt() + -39)
      }
    )).join("") + 976..toString(36).toLowerCase() + 20..toString(36).toLowerCase().split("").map((function (t) {
            return String.fromCharCode(t.charCodeAt() + -39)
      }
    )).join("") + function () {
      var t = Array.prototype.slice.call(arguments)
            , e = t.shift();
      return t.reverse().map((function (t, n) {
                return String.fromCharCode(t - e - 24 - n)
            }
      )).join("")
    }(10, 127, 154, 91, 151, 91, 136) + 11..toString(36).toLowerCase() + 13..toString(36).toLowerCase().split("").map((function (t) {
            return String.fromCharCode(t.charCodeAt() + -13)
      }
    )).join(""));

    a = CryptoJS.AES.decrypt(e, n, {
      mode: CryptoJS.mode.ECB,
      padding: CryptoJS.pad.Pkcs7
    });
    o = l(a);
    r = pako.ungzip(o, {
      to: "string"
    })
    console.log(JSON.parse(r));
}



function l(t) {
    var e, n, i = t.words.length, a = new Uint8Array(t.sigBytes), o = 0;
    for (n = 0; n < i; n++)
      e = t.words,
            a = e >> 24,
            a = e >> 16 & 255,
            a = e >> 8 & 255,
            a = 255 & e;
    return a
}

decrypt(e);运行结果老是报错。

经过检查,发现是通过python获取的数据跟页面上的数据不太一致造成的,直接复制页面上的响应结果没有一点问题,不知道是什么原因造成的,如果有大佬知道问题所在,教教小弟。
小总结

一点小经验,有时候找代码的时候可以看看它是写在哪个文件下的,如果是位于chunk开头的文件里,基本上是使用了第三方库;如果是位于app开头的文件里,基本上是自己写的。


ungzip函数位于chunk开头的文件里,如果抠代码感觉到有难度,可以直接先上网搜搜。

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: js逆向实战之某妈妈返回数据解密