zoukankan      html  css  js  c++  java
  • 头条爬虫失败的JS逆向过程

    2020年5月28日18:48:03第一次编写。

    头条爬虫失效了,请求新闻详情页面,会返回JS页面,进行JS执行,然后带着JS执行出来的参数再次请求,会请求到正确的页面。

    返回的需要重定向的页面

    <html>
      <head>
        <meta charset="UTF-8" />
      </head>
      <body></body>
      <script src='https://sf1-ttcdn-tos.pstatp.com/obj/rc-web-sdk/acrawler.js'></script>
      <script>
      window.byted_acrawler.init({aid:99999999,dfp:!0});
      var b;
      a:{
      	for(var c=document.cookie.split(/[;&]/),d,e=0;e<c.length;e++){
      		for(d=c[e];""===d.charAt(0);)
        		d=d.substring(1,d.length);
        	if(0===d.indexOf("__ac_nonce=")){
                b=d.substring(11,d.length);
                break a
            }}
          b=""}
    	var f=b;
    	var g=window.byted_acrawler.sign("",f);
    	document.cookie="__ac_signature=; expires=Mon, 20 Sep 1970 00:00:00 UTC; path=/;";
    document.cookie="__ac_signature="+g+"; expires="+(new Date((new Date).getTime()+18E5)).toGMTString()+"; path=/;";
          window.location.reload();
    </script>
    </html>
    

    JS描述

    1. 初始化加密函数
    2. 获取cookie里面的__ac_nonce=
    3. 将其加密后,放入__ac_signature=Cookie中
    4. 重新请求页面

    现在我们的重要任务就是这个加密函数了

    对加密函数进行解析

    访问上面的请求地址,发现JS文件是这样的

    Function(function(t){return'w={S(S,a){if(!y[S]){y[S]={};for(K=0;K<S;K)y[S][S.charAt(K)]=K}y[S][a]}a=String.fromCharCode,y={},K={x:(a){null==a?"":""==a?null:K.y(a,32,(y){S("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",a.charAt(y})},y:(S,y,K){p,i,J,r,q,o,m,z=[],n=4,T=4,l=3,V="",j=[],u={val:K(0),position:y,index:1};for(p=0;p<3;p+=1)z[p]=p;for(J=0,q=Math.pow(2,2),o=1;o!=q;)r=u.val&u.position,u.position>>=1,0==u.position&&(u.position=y,u.val=K(u.index,J|=(r>0?1:0)*o,o<<=1;switch(J){case 0:for(J=0,q=Math.pow(2,8),o=1;o!=q;)r=u.val&u.position,u.position>>=1,0==u.position&&(u.position=y,u.val=K(u.index,J|=(r>0?1:0)*o,o<<=1;m=a(J)1:for(J=0,q=Math.pow(2,16),o=1;o!=q;)r=u.val&u.position,u.position>>=1,0==u.position&&(u.position=y,u.val=K(u.index,J|=(r>0?1:0)*o,o<<=1;m=a(J)2:""}for(z[3]=m,i=m,j.push(m);;){if(u.index>S)"";for(J=0,q=Math.pow(2,l),o=1;o!=q;)r=u.val&u.position,u.position>>=1,0==u.position&&(u.position=y,u.val=K(u.index,J|=(r>0?1:0)*o,o<<=1;switch(m=J){case 0:for(J=0,q=Math.pow(2,8),o=1;o!=q;)r=u.val&u.position,u.position>>=1,0==u.position&&(u.position=y,u.val=K(u.index,J|=(r>0?1:0)*o,o<<=1;z[T]=a(J),m=T-1,n--1:for(J=0,q=Math.pow(2,16),o=1;o!=q;)r=u.val&u.position,u.position>>=1,0==u.position&&(u.position=y,u.val=K(u.index,J|=(r>0?1:0)*o,o<<=1;z[T]=a(J),m=T-1,n--2:j.join("")}if(0==n&&(n=Math.pow(2,l),l),z[m])V=z[m]if(m!==T)null;V=i+i.charAt(0)}j.push(V),z[T]=i+V.charAt(0),i=V,0==--n&&(n=Math.pow(2,l),l)}}};K};""==typeof define&&define.amd?define({w}):"undefined"!=typeof module&&null!=module?module.exports=w:"undefined"!=typeof angular&&null!=angular&&angular.module("w",[]).factory("w",{w}),eval(w.x("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";'.replace(/[-]/g,function(m){return t[m.charCodeAt(0)&15]})}("var function ().length++return ));break;case ;else{".split("")))();
    

    你会发现这里面有很多不能正常显示的符号,选择用notepad++打开

    wiki

    我们对原始的JS文件进行修改

    在文件的最后面的截取放在Chrome中执行。

    然后对最前面和之后面的部分进行修改。

    在最前面定义了一个变量t,原因是将其和之前的JS方法相同,执行结果为

    点击Copy将其复制出来。现在我们进入JS文件的第二层。对其进行简单分析,发现了

    eval执行了JS,现在我们只要JS的转义内容,并不需要其执行。

    首先复制这一块,放入Chrome中执行,然后复制eval里面的内容,
    ,执行的结果为,点击copy,我们现在进入第三层

    按照之前的分析,我们需要执行TAC里面的内容了,但是TAC里面的内容是会被执行的,与之前的概念是不一样的,之前的eval里面的内容是需要解析之后,使用eval执行的。

    现在我们将代码格式化一下。

    var _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ?
    function(f) {
        return typeof f
    }: function(f) {
        return f && "function" == typeof Symbol && f.constructor === Symbol && f !== Symbol.prototype ? "symbol": typeof f
    };
    TAC = function() {
        function f(f, a, b, d, c, r) {
            null == r && (r = this);
            var n, i, o = {},
            l = o.d = c ? c.d + 1 : 0;
            for (o["$" + l] = o, i = 0; i < l; i++) o[n = "$" + i] = c[n];
            for (i = 0, l = o.length = d.length; i < l; i++) o[i] = d[i];
            return e(f, a, b, o, r)[1]
        }
        function e(r, o, l, t, v, y) {
            function h(f) {
                S[++A] = f
            }
            function k() {
                return S[A--]
            }
            function m(f, e) {
                for (var a = b,
                d = "",
                c = 0; c < f.length; c++) {
                    var r = f.charCodeAt(c);
                    d += String.fromCharCode(a ^ r),
                    a = (a << 1) + c + e + 1 + (a >> 1) & 255
                }
                return d
            }
            null == v && (v = this);
            var g, C, x, I, S = [],
            A = 0;
            y && (g = y);
            for (var w = o + 2 * l; o < w;) {
                var z = 13 * i(r, o) % 241;
                if (o += 2, 0 == (3 & z)) if (0 == (3 & (z >>= 2))) {
                    if (0 == (z >>= 2)) return [1, S[A--]];
                    if (2 == z) oprand = n(r, o),
                    o += 2 * oprand[0],
                    I = oprand[1],
                    S[++A] = +I;
                    else if (4 == z) g = S[A--],
                    S[A] = S[A] * g;
                    else if (6 == z) g = S[A--],
                    S[A] = S[A] != g;
                    else if (13 == z) C = S[A--],
                    x = S[A--],
                    (I = S[A--]).x === e ? S[++A] = f(r, I.pc, I.len, C, I.z, x) : S[++A] = I.apply(x, C);
                    else {
                        if (15 != z) break;
                        oprand = n(r, o),
                        I = oprand[1],
                        S[A] = function(a, b) {
                            var d = function e() {
                                var a = arguments;
                                return f(r, e.pc, e.len, a, e.z, this)
                            };
                            return d.pc = a,
                            d.len = b,
                            d.x = e,
                            d.z = t,
                            d
                        } (o + 6, I - 4),
                        o += 2 * I - 2
                    }
                } else if (1 == (3 & z)) if (3 == (z >>= 2)) g = S[--A],
                S[A] = g(S[A + 1]);
                else if (5 == z) S[A -= 1] = S[A][S[A + 1]];
                else if (7 == z) S[A] = --S[A];
                else {
                    if (9 != z) break;
                    g = S[A--],
                    S[A] = typeof g
                } else if (2 == (3 & z)) if (6 == (z >>= 2)) S[A] = u(S[A]);
                else if (8 == z) g = S[A--],
                oprand = n(r, o),
                o += 2 * oprand[0],
                S[A--][m(a[oprand[1]], oprand[1])] = g;
                else {
                    if (10 != z) {
                        if (12 == z) throw S[A--];
                        break
                    }
                    S[A] = ~S[A]
                } else if (0 == (z >>= 2)) S[++A] = null;
                else if (2 == z) g = S[A--],
                S[A] = S[A] >= g;
                else if (9 == z) g = k(),
                C = k(),
                t[0] = 65599 * t[0] + t[g].charCodeAt(C) >>> 0;
                else if (11 == z) S[++A] = void 0;
                else {
                    if (13 != z) break;
                    g = S[A--],
                    S[A] = S[A] && g
                } else if (1 == (3 & z)) if (0 == (3 & (z >>= 2))) {
                    if (4 == (z >>= 2)) {
                        oprand = n(r, o),
                        I = oprand[1];
                        try {
                            if (d[c][2] = 1, 1 == (g = e(r, o + 6, I - 4, t, v))[0]) return g
                        } catch(y) {
                            if (d[c] && d[c][1] && 1 == (g = e(r, d[c][1][0], d[c][1][1], t, v, y))[0]) return g
                        } finally {
                            if (d[c] && d[c][0] && 1 == (g = e(r, d[c][0][0], d[c][0][1], t, v))[0]) return g;
                            d[c] = 0,
                            c--
                        }
                        o += 2 * I - 2
                    } else if (6 == z) oprand = n(r, o),
                    o += 2 * oprand[0],
                    I = oprand[1],
                    S[A -= I] = p("x,y", "return new x[y](" + Array(I + 1).join(",x[++y]").substr(1) + ")")(S, A);
                    else if (8 == z) g = S[A--],
                    S[A] = S[A] & g;
                    else if (10 != z) break
                } else if (1 == (3 & z)) if (0 == (z >>= 2)) S[A] = !S[A];
                else if (7 == z) C = S[A--],
                g = delete S[A--][C];
                else if (9 == z) oprand = n(r, o),
                o += 2 * oprand[0],
                S[A] = S[A][m(a[oprand[1]], oprand[1])];
                else {
                    if (11 != z) break;
                    g = S[A--],
                    S[A] = S[A] << g
                } else if (2 == (3 & z)) if (1 == (z >>= 2)) S[++A] = g;
                else if (3 == z) g = S[A--],
                S[A] = S[A] <= g;
                else if (10 == z) g = S[A -= 2][S[A + 1]] = S[A + 2],
                A--;
                else if (12 == z) g = S[A],
                S[++A] = g;
                else {
                    if (14 != z) break;
                    g = S[A--],
                    S[A] = S[A] || g
                } else if (0 == (z >>= 2)) S[A] = !S[A];
                else if (2 == z) oprand = n(r, o),
                o += 2 * (I = oprand[1]) - 2;
                else if (4 == z) g = S[A--],
                S[A] = S[A] / g;
                else if (6 == z) g = S[A--],
                S[A] = S[A] !== g;
                else {
                    if (13 != z) break;
                    S[++A] = v
                } else if (2 == (3 & z)) if (0 == (3 & (z >>= 2))) if (1 == (z >>= 2)) g = S[A--],
                S[A] = S[A] > g;
                else if (8 == z) oprand = n(r, o),
                o += 2 * oprand[0],
                I = oprand[1],
                C = A + 1,
                S[A -= I - 1] = I ? S.slice(A, C) : [];
                else if (10 == z) oprand = n(r, o),
                o += 2 * oprand[0],
                I = oprand[1],
                g = S[A--],
                t[I] = g;
                else {
                    if (12 != z) break;
                    g = S[A--],
                    S[A] = S[A] >> g
                } else if (1 == (3 & z)) if (0 == (z >>= 2)) S[++A] = s;
                else if (2 == z) g = S[A--],
                S[A] = S[A] + g;
                else if (4 == z) g = S[A--],
                S[A] = S[A] == g;
                else if (11 == z) oprand = n(r, o),
                o += 2 * oprand[0],
                I = oprand[1],
                S[--A] = p("x,y", "return x " + m(a[I], I) + " y")(S[A], S[A + 1]);
                else {
                    if (13 != z) break;
                    g = S[A - 1],
                    C = S[A],
                    S[++A] = g,
                    S[++A] = C
                } else if (2 == (3 & z)) if (1 == (z >>= 2)) oprand = n(r, o),
                o += 2 * oprand[0],
                S[++A] = m(a[oprand[1]], oprand[1]);
                else if (3 == z) S[A--] ? o += 6 : (oprand = n(r, o), o += 2 * (I = oprand[1]) - 2);
                else if (5 == z) g = S[A--],
                S[A] = S[A] % g;
                else if (7 == z) g = S[A--],
                S[A] = S[A] instanceof g;
                else {
                    if (14 != z) break;
                    S[++A] = !1
                } else if (4 == (z >>= 2)) oprand = n(r, o),
                I = oprand[1],
                d[c][0] && !d[c][2] ? d[c][1] = [o + 6, I - 4] : d[c++] = [0, [o + 6, I - 4], 0],
                o += 2 * I - 2;
                else if (6 == z) oprand = n(r, o),
                o += 2 * oprand[0],
                I = oprand[1],
                S[++A] = t["$" + I];
                else {
                    if (8 != z) break;
                    g = S[A--],
                    S[A] = S[A] | g
                } else if (0 == (3 & (z >>= 2))) if (1 == (z >>= 2)) oprand = n(r, o),
                o += 2 * oprand[0],
                I = oprand[1],
                S[++A] = +m(a[I], I);
                else if (3 == z) g = S[A--],
                S[A] = S[A] - g;
                else if (5 == z) g = S[A--],
                S[A] = S[A] === g;
                else if (12 == z) C = S[A--],
                x = S[A--],
                (I = S[A--]).x === e ? S[++A] = f(r, I.pc, I.len, C, I.z, x) : S[++A] = I.apply(x, C);
                else {
                    if (14 != z) break;
                    g = S[A],
                    S[A] = S[A - 1],
                    S[A - 1] = g
                } else if (1 == (3 & z)) if (2 == (z >>= 2)) h(function(f) {
                    var e = 0,
                    a = f.length;
                    return function() {
                        var b = e < a;
                        b && h(f[e++]),
                        h(b)
                    }
                } (S[A]));
                else if (4 == z) oprand = n(r, o),
                o += 2 * oprand[0],
                I = oprand[1],
                g = t[I],
                S[++A] = g;
                else if (6 == z) S[A] = ++S[A];
                else {
                    if (8 != z) break;
                    g = S[A--],
                    S[A] = S[A] in g
                } else if (2 == (3 & z)) if (5 == (z >>= 2));
                else if (7 == z) g = S[A--];
                else if (9 == z) g = S[A--],
                S[A] = S[A] ^ g;
                else {
                    if (11 != z) break;
                    oprand = n(r, o),
                    I = oprand[1],
                    d[++c] = [[o + 6, I - 4], 0, 0],
                    o += 2 * I - 2
                } else if (1 == (z >>= 2)) g = S[A--],
                S[A] = S[A] < g;
                else if (8 == z) oprand = n(r, o),
                o += 2 * oprand[0],
                I = oprand[1],
                S[A] = S[A][I];
                else if (10 == z) S[++A] = !0;
                else {
                    if (12 != z) break;
                    g = S[A--],
                    S[A] = S[A] >>> g
                }
            }
            return [0, null]
        }
        var a = [],
        b = 0,
        d = [],
        c = 0,
        r = function(f, e) {
            var a = "" + f[e++] + f[e];
            return parseInt(a, 16)
        },
        n = function(f, e) {
            var a = f[e++],
            b = f[e],
            d = parseInt("" + a + b, 16);
            if (d >> 7 == 0) return d >> 6 != 0 && (d = -64 | 63 & d),
            [1, d];
            if (d >> 6 == 2) {
                var c = parseInt("" + f[++e] + f[++e], 16);
                return 0 != (32 & d) ? d = -32 | 31 & d: d &= 31,
                d <<= 8,
                c = d + c,
                [2, c]
            }
            if (d >> 6 == 3) {
                var r = parseInt("" + f[++e] + f[++e], 16),
                n = parseInt("" + f[++e] + f[++e], 16);
                return 0 != (32 & d) ? d = -32 | 31 & d: d &= 31,
                d <<= 16,
                r <<= 8,
                n = d + r + n,
                [3, n]
            }
        },
        i = function(f, e) {
            var a = f[e++],
            b = f[e];
            return parseInt("" + a + b, 16)
        },
        o = function(f, e) {
            var a = "" + f[e++] + f[e];
            return a = parseInt(a, 16),
            String.fromCharCode(a)
        },
        l = function(f, e, a) {
            for (var b = "",
            d = 0; d < a; d++) b += o(f, e),
            e += 2;
            return b
        },
        t = function(f, e, b) {
            for (var d = 0; d < b; d++) {
                var c = n(f, e);
                e += 2 * c[0];
                var r = l(f, e, c[1]);
                a.push(r),
                e += 2 * c[1]
            }
        },
        s = this,
        p = s.Function,
        u = Object.keys ||
        function(f) {
            var e = {},
            a = 0;
            for (var b in f) e[a++] = b;
            return e.length = a,
            e
        };
        return function(e) {
            e.length;
            for (var d = 0,
            c = "",
            i = d; i < d + 16;) c += o(e, i),
            i += 2;
            if ("HNOJ@?RC" != c) throw new Error("error magic number " + c);
            n(e, d += 16);
            d += 8,
            b = 0;
            for (var l = 0; l < 4; l++) {
                var s = r(e, d + 2 * l);
                b += (3 & s) << 2 * l
            }
            d += 16;
            var p = n(e, d += 16),
            u = p[1],
            v = d += 2 * p[0];
            d += p[1];
            var y = n(e, d);
            y[1];
            d += 2 * y[0],
            a = [],
            t(e, d, y[1]),
            f(e, v, u, [])
        }
    } (),
    TAC("484e4f4a403f5243001d3631381c9126d598a9b50000000000000000c0980c020025806d4421131e014302023e22170d44441c21131e0343020440170f44441801131e01041c1680474421131e054302063e22170a44441c131e051e0717164444131e052602010a0118010a02101c161e444418002201170644441c131f0018011800131e081a001d0927041c002611020025c04b8e020a250c4444131e0b1e0c0101001f06020d250d444421131e0e43020440001f07020f25805144131e10021102121a02221e1324131e140a010f2201173744441c0200251144441800221e15240a000f02163e00131e17012201171844441c21131e174302044022170a44441c131e171e1804001f08021925114444131e1a1a00221e1b240a000f001f09021c253a44442118004302043e2201170944441c1800263e1707444402000021180043021d3e171344441800170a4444021e16064444021f001800001f0a022025804b441801011708444402211f0102001f0618001f071807150039172c444418061801131e22221e2324131e22221e24240a000f18011e252a0a010f19281f0618072e1f0716511806001f0b02262580ce4402041f0621134318063e2201171044441c13221e15240a000f0227402201171744441c131e081e281e15221e2924130a010f0227402201170d44441c21131e0b4318063e2201171b44441c131e0b221e15240a000f221e2a24022b0a010f15003a2201170d44441c21131e2c4318063e2201171244441c131e2c221e15240a000f022d402201170d44441c21131e2e4318063e1706444420001b010b06260a0010011726444421131e2f4318063e2201171244441c131e2f221e15240a000f02304017064444200012001f0c023125809744131e321a001f06131e08221e332418060234131e081a00220200250c44441b020b00201d35001d360a030f1c131e37221e3824023918060a020f1c1322170844441c131e3722170a44441c131e371e3a170944441800201d351b010b07260a0010173144441322172244441c131e3b131e3c29158064392201171044441c131e3d131e3e2915806439170944441800201d35001f0d023f252d444421131e80404302044022171e44441c131e081e281e15221e2924131e80401e80410a010f0280423e001f0e028043258065441b010b06260a00100117805644028044131e2c42012201171144441c131e2c1e8044131e804541012201170a44441c02804613422201170a44441c02804713422201170a44441c02804813422201171044441c028049134202804a13423a0012001f0f02804b25810444131e2c1e804c1706444420004604444406094444271f062000052f44440233131e084217244444131e08221e3324131e2c02804c131e081a0022211d804d22121d804e0a030f1c0702804f0280500280510280520280530280540280550280560280570280580280590a0b1f0602805a02805b02805c0a031f07180708031f0818082104171944441f0918071809191f0a13180a191706444420001665180608031f0818082104171b44441f0918061809191f0a131e0b180a191706444420001663131e0b08031f0818082104173144441f091809221e805d24131e1002805e02001a020a010f22170e44441c131e0b1809191e805f170644442000164d12001f100280602580c9441b010b07260a001017284444131e8061221e80622402130a010f1f0618060200250d44441b020b00201d8063001d80641b010b08260a001017805c4446044444062d4444271f0618061e8065131e80661e80673e22170e44441c131e80681e2515003e170a44441800201d806305274444131e8068221e80692402806a02000a020f1c131e8068221e806b2402806a0a010f1c071b010b06260a001017284444131e80610122171444441c131e806c2201170944441c131e806d170a44441800201d8063001f1102806e25809f441b010b06260a00100117809044131e0b221e806f240280700a010f1f0618061e8071221e15240a000f221e807224131e100280730280741a0202000a020f221e2a240280750a010f15003a2201173344441c131e2c1e15221e15240a000f221e807224131e100280730280741a0202000a020f221e2a240280750a010f15003a2201171644441c131e2c1e8044221e15240a000f028076400012001f1202807725807144131e1002807802001a021f061322170844441c131e2e22170b44441c131e2e1e807917804944131e2e1e80791f071807221e2a2402807a0a010f15003e2201171444441c1807221e2a2402807b0a010f15003e2201171044441c1806221e132418070a010f17064444200012001f1302807c2580d144261f0646044444060f4444271f07131e0b1e807d1f0605174444131e0b221e807e2402807f0a010f0b001f06071806263e1705444400131e0b221e806f240280800a010f1f07028081131e80822615c02710131e22221e24240a000f2a150a0a02102802808128131e1a1a00221e1b240a000f281f081800028083180828281f00180718001d80841318080200253144441b020b011800041c4604444406044444051c44441b020b06221e8085241b020b070a010f1c131b020b080907000d1806221e80862418070a010f1c001f140280872580bf4418001e251f0618061502331f0718011733444418001806150129191f0818071504291f07180818071503293a2201170a44441c180818073917064444260018081f0715001f08180818063a17804a4418001808131e8088221e80892418001808191580ff2f18001808191508351580ff2f18001808191510351580ff2f18001808191518351580ff2f0a040f0d18082d1f0816bfb41800221e808a2402000a010f1f081801171344441808221e808b24150018070a020f001808001f1502808c2580814418001e251f0618061502341f07180615032f1500401709444418072d1f071801171c4444131e808d18071501281a011f081808180718060d160e4444131e808d18071a011f0815001f09180918063a172b44441808180915023423191800221e808e2418090a010f180915032f15033333300d18092d1f0916521808001f1602808f250b444418001480902f001f1702809125314444180215053518011502333118011503351802150433312818001801311805180315032f180431191802312831001f180280922518444418001e2515043a170a4444180015041d251800001f190280932580d24418001e251f0618061501291f0718001807191f0915001f0a131e22221e23241506153418062b280a010f1500301f0d180d150039178097441b010b17180a1b010b806b28041f0a180a15023515032f1f0b15001f0c180c18073a173c44441800180c150128191f081800180c1b010b171800180c191b010b1826180a18081809180c180b18010a061028040d271f09180c2d1f0c164118000b001f08180018071b010b1718001807191b010b1826180a180818091807180b18010a061028040d271f09180d2e1f0d16bf671800001f1a0280942580d34418001e251f0618061501291f0718000b001f08131e22221e23241506153418062b280a010f1f0d1b010b17180d1b010b806b2a041f0a180a15004017809144180a15023515032f1f0b18071f0c180c150039173c44441800180c150129191f091800180c1b010b171800180c191b010b1826180a18081809180c180b18010a061029040d271f08180c2e1f0c164118001807191f0918001b010b1718000b001b010b1826180a180818091500180b18010a061029041d1f271f081b010b17180a1b010b806b29041f0a16bf6d1800001f1b0280952581a744131e1002809602001a02221e132418000a010f170744441800000a001f0618001e251f0715001f0815001f09180818073a178165441800221e808e2418080a010f1f0a180a1580803a17194444180618091800221e80972418080a010f0d16812b44180a1588003a172b444418061809131e8088221e8089241580c0180a15063430158080180a153f2f300a020f0d1680fa44180a15c0d8003a2201170c44441c180a15c0dfff391737444418061809131e8088221e8089241580e0180a150c3430158080180a150634153f2f30158080180a153f2f300a030f0d1680ae44180815012818073a178098441800221e808e2418081501280a010f1f0b180a15c0dc003a22170c44441c15c0dc00180b3c22170c44441c180b15c0dfff3c17806244180a1583ff2f150a33180b1583ff2f3015c10000281f0c18061809131e8088221e8089241580f0180c151234153f2f30158080180c150c34153f2f30158080180c150634153f2f30158080180c153f2f300a040f0d18082d1f08160e4444131e80980280991a014718082d1f0818092d1f0916be991806221e808a2402000a010f001f1c02809a25825c44131e808d18011a011f0615001f0715001f0818001e251f09180718013a22170a44441c180818093a178212441800221e808e241808222d1f080a010f1f0a180a1504341f0b180b15004017806f44180b15014017806644180b15024017805d44180b15034017805444180b15044017804b44180b15054017804244180b15064017394444180b15074017304444180b150c4017324444180b150d4017294444180b150e4017805c44180b150f401780a94416816b4416817d4418061807180a0d16817244180818093a1729444418061807180a151f2f1506331800221e808e241808222d1f080a010f153f2f300d160e4444131e809802809b1a014716813644180815012818093a1780404418061807180a150f2f150c331800221e808e241808222d1f080a010f153f2f150633301800221e808e241808222d1f080a010f153f2f300d160e4444131e809802809b1a01471680e044180815022818093a1780b044180a15072f1512331800221e808e241808222d1f080a010f153f2f150c33301800221e808e241808222d1f080a010f153f2f150633301800221e808e241808222d1f080a010f153f2f3015c10000291f0c1500180c3c22170c44441c180c15cfffff3c172f444418061807222d1f07180c150a341583ff2f15c0d800300d18061807180c1583ff2f15c0dc00300d161a4444131e809802809c180c221e152415100a010f281a0147160e4444131e809802809b1a0147161a4444131e809802809d180a221e152415100a010f281a014718072d1f0716bde1180718013a170a4444180618071d25131e80881e8089131e8088180610001f1d02809e2582ad440a001f06131e808d15c080001a011f0715001f0815001f0918001e251f0a180818013a22170a44441c1809180a3a17824a441800221e808e241809222d1f090a010f1f0b180b1504341f0c180c15004017806f44180c15014017806644180c15024017805d44180c15034017805444180c15044017804b44180c15054017804244180c15064017394444180c15074017304444180c150c4017324444180c150d4017294444180c150e4017805c44180c150f401780a94416816b4416817d4418071808180b0d168172441809180a3a1729444418071808180b151f2f1506331800221e808e241809222d1f090a010f153f2f300d160e4444131e809802809b1a0147168136441809150128180a3a1780404418071808180b150f2f150c331800221e808e241809222d1f090a010f153f2f150633301800221e808e241809222d1f090a010f153f2f300d160e4444131e809802809b1a01471680e0441809150228180a3a1780b044180b15072f1512331800221e808e241809222d1f090a010f153f2f150c33301800221e808e241809222d1f090a010f153f2f150633301800221e808e241809222d1f090a010f153f2f3015c10000291f0d1500180d3c22170c44441c180d15cfffff3c172f444418071808222d1f08180d150a341583ff2f15c0d800300d18071808180d1583ff2f15c0dc00300d161a4444131e809802809c180d221e152415100a010f281a0147160e4444131e809802809b1a0147161a4444131e809802809d180b221e152415100a010f281a0147180815c07ffe3b1731444418081501281f0d1807180d1d25180618061e25131e80881e8089131e80881807100d1801180d291f01157f1f0818082d1f0816bda91808150039171f4444180718081d25180618061e25131e80881e8089131e80881807100d1806221e808a2402000a010f001f1e02809f2580ac441801213e2201170944441c1801263e2201170a44441c180115003a170a444418001e251f01180115003e17074444020000131e1002809602001a02221e132418000a010f2201171944441c131e100280a002001a02221e132418000a010f0117214444180118001e253e170744441800001800221e80a124150018010a020f00180115c0ffff3a171444441b010b1d26180018010a0210161044441b010b1e26180018010a0210001f1f0280a2258067441800213e2201170944441c1800263e2201170c44441c18001e2515003e170744441800001b010b1c1800041f001b010b1c1801041f011b010b15261b010b1a261b010b16261800200a02101b010b191b010b16261801120a0210040a0210120a0210001f200280a3258063441800213e2201170944441c1800263e2201170c44441c18001e2515003e170744441800001b010b1c1801041f011b010b1f1b010b15261b010b1b261b010b16261800120a02101b010b191b010b16261801120a0210040a0210200a021004001f210280a4258181440280a51f0618011708444418011f0602001f0715001f0918001e2518091503283b1780aa441800221e808e241809222d1f090a010f1580ff2f1510331800221e808e241809222d1f090a010f1580ff2f150833301800221e808e241809222d1f090a010f1580ff2f301f0818071806221e80972418081480a62f1512340a010f281f0718071806221e809724180815c3f0002f150c340a010f281f0718071806221e8097241808158fc02f1506340a010f281f0718071806221e8097241808153f2f0a010f281f0716bf4f18001e251809291500391780a5441800221e808e241809222d1f090a010f1580ff2f15103318001e25180939171b44441800221e808e2418090a010f1580ff2f150833160644441500301f0818071806221e80972418081480a62f1512340a010f281f0718071806221e809724180815c3f0002f150c340a010f281f07180718001e25180939171b44441806221e8097241808158fc02f1506340a010f160744440280a7281f0718070280a7281f071807001f220280a8251144440280a9221e2a2418000a010f001f230280aa2581094402001f0615001f07180718001e251503293a1780f0441b010b231800221e80972418071500280a010f041f081b010b231800221e80972418071501280a010f041f091b010b231800221e80972418071502280a010f041f0a1b010b231800221e80972418071503280a010f041f0b1806131e8088221e80892418081502331809150435300a010f281f061800221e80972418071502280a010f0280a73f172744441806131e8088221e80892418091504331580f02f180a150235150f2f300a010f281f061800221e80972418071503280a010f0280a73f172144441806131e8088221e808924180a1506331580c02f180b300a010f281f0618071504281f0716bf091806001f240280ab25804c441800153f2f1f00131e8088221e80892418001800151a3a170b444415804116254444180015343a170b4444158047161544441800153e3a170a4444157c16064444156f280a010f001f250280ac253444441b010b251f06180618001518340418061800151234042818061800150c340428180618001506340428180618000428001f260280ad258097441b010b806a1e80ae0280af281f061b010b1426180602002580774418001e2515083a1705444400460444440604444405805e441b010b21261b010b241800221e80b02415080a010f041800221e80b024150015080a020f0a02101f0618060280b13e171444441b010b28262018000a02101c161a444418060280b23e171044441b010b28261218000a02101c07000a02101c001f270280b3258050441b010b806a18001d80b4460444440604444405394444131e806817164444131e8068221e8069240280b518010a020f1c131e80b617164444131e80b6221e8069240280b518010a020f1c07001f280280b72580ab4402001f06460444440604444405804144131e806817154444131e8068221e80b8240280b50a010f1f061806012201170944441c131e80b617154444131e80b6221e80b8240280b50a010f1f0607180617805644460444440604444405804a441b010b21261b010b241806221e80b02415080a010f041806221e80b024150015080a020f0a02101f0718070280b13e170a444420001610444418070280b23e1706444412000712001f290280b92580e844121f061b010b806a1e80b4203e170b4444201f06162344441b010b806a1e80b4123e170b4444121f06160e44441b010b29260a00101f06131e081a0022121d2e2218061d80ba22121d80bb22121d3522121d80bc22121d80bd22121d804c22121d806322121d80be220280bf2506444420001f0818081d131f0718071b010b0c260a00101d80bb18071e80bb01178054441b010b0d1807041c1b010b111807041c18071b010b0e260a00101d80bc18071b010b0f260a00101d80bd18071b010b10260a00101d804c18071b010b12260a00101d80be18071b010b13260a00101d2e1807001f2a0280c025805b44131e08221e80c12418000a010f1f0615001f0718061e251501291f08180815003b173344441800180618081919170a444415011606444415001f09180918061e25180829150129331807301f0718082e1f08164a1807001f2b0280c22536444415001f06180618011e253a17244444180015c1003f2a1801221e808e2418060a010f281500351f0018062d1f0616571800001f2c0280c32536444415001f06180618011e253a1724444418001801221e808e2418060a010f3115c1003f2a1500351f0018062d1f0616571800001f2d0280c42580704418002201170744441c02001f061806221e807224131e100280c502001a0202000a020f1f061806221e2a240280af0a010f157f40172044441806221e80a12415001806221e2a240280af0a010f0a020f1606444418061f061806170a44441806160744440280c61f061806001f2e0280c72580aa4418002201170744441c02001f061806221e805d24131e100280c802001a020a010f1f0718071716444418070b00221e80a12415010a010f1606444402001f061806171544441806221e80c9240280ca0a010f16054444261f08131e081a001f0918081780414415001f0a180a18081e253a1732444418091808180a19221e80c9240280a70a010f0b001808180a19221e80c9240280a70a010f0b010d180a2d1f0a16491809001f2f0280cb25808e441800012201171744441c131e80cc221e80cd2418000a010f0280ce3e170a4444131e081a0000131e08221e80c12418000a010f221e80cf240a000f1f06131e081a001f0715001f08180818061e253a173844441801171b44441807180618081918001806180819190200280d161444441807180618081918001806180819190d18082d1f0816431807001f300280d025807344131e808d221e80d12418000a010f171344441800221e80d2241b010b310a010f001800131e084117804544131e08221e80c12418000a010f221e80cf240a000f1f061806221e80d324020025184444180018011b010b311b020b00180119040d180000131e081a000a020f001800001f310280d4258078441800012201171744441c131e80cc221e80cd2418000a010f0280ce3e17074444020000131e08221e80c12418000a010f221e80cf240a000f1f0602001f0715001f08180818061e253a17284444180718061808190a010280a7281800180618081919280280ca28281f0718082d1f0816531807001f320280d52580c244131e0b221e806f240280700a010f1f07180715301d80d6180715101d80d71807221e80d8240280d90a010f1f0818080280da1d80db1808221e80dc240280dd1502150c0a030f1c180815021d80de180815011d80df18080280e01d80e11808221e80e224150815081508150015020a050f1c1808221e80e3240a000f1c1807221e8071240a000f1f0615001f09180915203a17294444180015c1003f2a1806221e808e24180018061e252c0a010f281500351f0018092d1f0916541800001f330280e42521444446044444060a4444271f06157f00050e44441b010b331480e5040007001f340280e625124444110280e61d80e71118001d80e8001f350280e9251e44444604444406094444271f062000050c4444131e806801010007001f360280ea251e44444604444406094444271f062000050c4444131e80b601010007001f370280eb251e44444604444406094444271f062000050c4444131e806101010007001f380280ec252e44441b010b0a1b010b38260a0010041b010b0a1b010b37260a001004281b010b0a1b010b36260a00100428001f390280ed25244444131e80ee1f0618061e80d60280812818061e80d7280280812818061e80ef28001f3a0280f0251a4444131e80ee1f0618061e80f10280812818061e80f228001f3b0280f325806b44131e80f4020025805e440280f5131e2c4217804c44131e2c221e80f5240a000f221e80f6240200252e44441b030b0018001e80f70280812818001e80f8280280812818001e80f9280280812818001e80fa28041c000a010f1c160a444418000200041c001a01001f3c0280fb25807c440280fc1f0615001f0721131e2c1806194302044017104444131e2c1806191f07161b444421131e2c18061943020440170c4444131e2c1806191f0746044444060a4444271f09121f0805174444131e0b221e80fd240280fe0a010f1c201f08070280ff13421f0918070280812818082802808128180928001f3d02810025806044131e1a1a001f061806221e81012415010a010f1c1806221e81022415050a010f1c15001806221e8103240a000f291f071806221e810224150b0a010f1c15001806221e8103240a000f291f08131e22221e810424180718080a020f001f3e0281052580724446044444060a4444271f0602000005805f44131e0b221e806f240280700a010f1f061806221e80d8240281060a010f1f071807221e8107240281080a010f1f081807221e81092418081e810a0a010f1f091807221e81092418081e810b0a010f1f0a18090280c628180a280007001f3f02810c2581c34402810d02810e02810f0a031f06131e081a001f07131e081a001f081806031f091809210417806c441f0a131e0b221e806f240281100a010f1f0b180b0281111d8112180b1e81130281141d8115180b1e8113180a1d8116131e0b1e807d221e808624180b0a010f1c1807180a180b1e81170d1808180a180b1e81180d131e0b1e807d221e808524180b0a010f1c16bf9302811902811a02811b02811c02811d02811e02811f02812002812102812202812302812402812502812602812702812802812902812a02812b02812c02812d02812e02812f0281300281310281320281330281340281350a1d1f0915001f0b271f0a271f0c15001f0d180d18091e253a1780b3441806031f0e180e210417809e441f0f131e0b221e806f240281100a010f1f1018100281111d811218101e81130281141d811518101e81131809180d1902813628180f281d8116131e0b1e807d221e80862418100a010f1c18101e81171807180f19402201171044441c18101e81181808180f19401f11131e0b1e807d221e80852418100a010f1c1811171b4444180d151e3a170e44441501180d33180a301f0a1607444416bf61180d2d1f0d16bf49180a221e152415100a010f001f80400281372580f44415051f060a001f07131e2c1e80441f0818082201170744441c0a001f0915001f0a180a18063a1780af44460444440604444405809b441809180a191f0b0a001f0c15001f0d180d180b1e253a17354444180b221e813824180d0a010f171e4444180c221e813924180b221e813824180d0a010f1e813a0a010f1c180d2d1f0d1646180b1e80e70200281f0d180b1e813b17114444180d180b1e813b020028281f0d180d180b1e813c020028281f0d180d180c221e808a2402000a010f281f0d1807221e813924180d0a010f1c07180a2d1f0a16bf4f1807221e808a2402813d0a010f221e80b02415001584000a020f001f804102813e25809b442118014302813f40170544440018000280a7281f061801221e80c924131e1002814002001a020a010f1f0715001f09180918071e253a1780604418071809191f081808221e80972415000a010f0281413e171844441808221e808b24150118081e250a020f1f08165a1808221e2a2418060a010f15003e171744441808221e808b2418061e2518081e250a020f0018092d1f0916bf9c001f80420281422580744446044444060a4444271f060200000580614402001f06131e8068171d4444131e8068221e80b82418000a010f1f06180617074444180600131e80b6171d4444131e80b6221e80b82418000a010f1f061806170744441806001b010b8042261800131e0b1e81430a02101f0618060007001f804302814425808944460444440604444405807c44131e806817154444131e8068221e806924180018010a020f1c131e80b617154444131e80b6221e806924180018010a020f1c1481451f06131e0b1800028146281d8143131e0b18000280a72818012802814728131e1a131e1a1a00221e1b240a000f1806281a01221e8148240a000f28028149281d814307001f804402814a2525444446044444060d4444271f0618061e80e800050f4444131e814b02814c1a011c07001f804502814d25124444131e814e221e15240a000f1e25001f804602814f2581bb441b010b06260a00102201170d44441c1b010b08260a001017074444020000131e81502201170944441c131e81512201170944441c131e81521f06131e80f402002581744446044444060d4444271f0618000200041c05815e441b020b0617814f441b020b06131e081a0022131e081a00220281531d81540a011d81551a011f06020025054444001f07131e1002815602001a021f08131e100281570280741a021f091806221e81582402000a010f1c131e8159260200250d44441b030b000200041c001581f40a02101c1806221e815a240a000f1f0a180a131e80f44117374444180a221e80f6240200251344441b030b06221e815b2418000a010f000a010f221e80f624020025054444000a010f1c162f44441806221e815a240200251c44441b030b06221e815b2418001b030b071b030b070a030f1c0018070a020f1c1806020025806244180022170a44441c18001e815c22170d44441c18001e815c1e815c178042441b030b08221e815d2418001e815c1e815c0a010f1f0618061726444418060b00221e805d241b030b090a010f1f071807170e44441b030b0018060b00041c001d815e160a444418000200041c07001a01001f804702815f25805944028160221e807224131e100281610280741a020200253c4444131e22221e24240a000f15102a1500301f0618000281623d170a44441806160c4444180615032f1508301f071807221e152415100a010f000a020f001f80480281632580504418001e2515223e178043441b010b2c2615001800221e808b24150015200a020f0a02101f061806221e15240a000f221e808b24150015020a020f1800221e808b24152015220a020f3e0012001f8049028164258060441b010b8043028165041f06180622170d44441c1b010b8049180604170744441806001b010b8048260a00101f0618061b010b2c26150018060a021028221e808b24150015220a020f1f061b010b80442602816518060a02101c1806001f804a02816625324444180001170744440200001b010b0b1504041f0618061b010b22261b010b2026180018060a02100281670a021028001f804b028168258155441801173b444415001f0615001f07180718001e253a1728444418001807191e816917154444180018071918011806222d1f06191d816a18072d1f07165302001f061800221e816b240200251c44441b02220b061b010b0a18001e816a0402816c28281d816d000a010f1c18061b010b09260a0010281f061b010b8048260a00101f07131e22221e23241807221e808e2415030a010f15082b0a010f1807221e808e2415030a010f15082c281f081807221e808b24150415041808280a020f1f091b010b221b010b2026180618090a0210180728041f061b010b806a221e816e02816f131e8170180604280280ca28281d816e271f0a1b010b1426180a020025804e4418001e817115003d22170a44441c18001e8172173644441b010b806a1b010b804b18001e8172041d81731b010b806a18001e81721d81741b010b80442602817518001e81720a02101c000a02101c001f804c02817625848544131e2c22170644441c1322170844441c131e0b011705444400131e081a00220281771d81782215041d81792218001e81771d816a131e081a002202817a1d81782215031d8179221b010b091d817b131e081a002202817c1d81782215031d8179221b010b391d817b131e081a00220280701d81782215031d8179221b010b341d817b131e081a002202817d1d81782215031d8179221b010b091d817b131e081a002202817e1d81782215001d8179131e081a002202817f1d81782215001d8179131e081a00220281801d81782215001d8179131e081a00220281811d81782215001d8179131e081a00220281821d81782215001d8179131e081a00220281831d81782215031d8179221b010b3a1d817b131e081a00220281841d81782215031d8179221b010b3b1d817b131e081a00220281851d81782215011d8179131e081a00220281861d81782215011d8179131e081a00220281871d81782215011d8179131e081a00220281881d81782215001d8179131e081a00220281891d81782215031d8179221b010b3c1d817b2215011d8169131e081a002202818a1d81782215031d8179221b010b3d1d817b131e081a002202818b1d81782215031d8179221b010b3e1d817b131e081a002202818c1d81782215031d8179221b010b091d817b131e081a002202818d1d81782215031d8179221b010b3f1d817b131e081a002202818e1d81782215031d8179221b010b80401d817b131e081a002202818f1d81782215031d8179221b010b80411d817b131e081a00220281901d81782215031d8179221b010b091d817b131e081a00220281911d81782215001d8179131e081a00220281921d81782215031d8179221b010b80431d817b220281751d8193131e081a00220281941d81782215031d8179221b010b80451d817b131e081a00220281951d81782215031d8179221b010b80461d817b131e081a00220281961d81782215031d8179221b010b80471d817b2215011d8169131e081a0022022e1d81782215011d8179131e081a00220281971d81782215041d8179221b010b80691e81981d816a131e081a00220281991d81782215031d8179221b010b804a1d817b131e081a002202819a1d81782215031d8179221b010b091d817b131e081a002202819b1d81782215041d81790a221f060a001f07180608031f08180821041780e0441f0918061809191e81791f0a180a15004017234444180a15014017374444180a15024017804444180a150340178053441680a94418061809191b010b0a131e2c18061809191e817819041d816a16808c4418061809191318061809191e8178191d816a168076441806180919131e0b18061809191e8178191d816a16805e4418061809191e816917324444131e80f4172644441807221e81392418061809191e817b221e292418061809191e81930a010f0a010f1c16244444180618091918061809191e817b221e29242618061809191e81930a020f1d816a16bf1f131e80f417364444131e80f4221e819c2418070a010f221e80f6240200251544441b010b804c261b020b0618000a02101c000a010f1c160d44441b010b804c1806041c001f804d02819d25837a442118014302043e22170c44441c2118004302024022170b44441c18001e819e01170e44441b010b3502819f1a014715001f0615001f0715c0fff11f08131e1a1a00221e1b240a000f1583e82b1500351f091b010b80691e81a00122173844441c1b010b2d261b010b2d26150018090200280a0210131e2e1e8079221e808b24131e2e1e81a11e251502280a010f0a021018082c1f071809180718082a31150035221e152415020a010f1f0a180a1f0b180a1e25152039171b4444180a221e808b24180a1e251520290a010f1f0b163a4444180a1e2515203a172f444402001f0c15001f0d180d1520180a1e25293a17124444180c021f281f0c180d2d1f0d1666180c180b281f0b0281a21f0c0281a31f0d0281a31f0e0281a41f0f180f180e28180d28180c28180b281f06131e808226180615020a02101f061b010b2d26150018060200280a02101f101b010b2a260a00101f1102001f121801170c444418011f1216811b441b010b80711e81a5221e2924110281a618000a030f1c18001e807d22171a44441c131e80cc221e80cd2418001e807d0a010f0280ce4017806d4415001f1318001e81a7173244441b010b2c261500131e80cc221e80cd241b010b302618001e807d18001e81a70a02100a010f0a02101f13162644441b010b2c261500131e80cc221e80cd241b010b3118001e807d040a010f0a02101f130281a81813280280ca281f121b010b2f18001e819e041f1318001e81a9171a4444131e08221e81aa24181318001e81a90a020f1606444418131f1318121b010b32181304281f1218120281ab281b010b2e18001e819e04280280ca281f1218120281ac280281ad281f121b010b80711e81a5221e2924110281ae18120a030f1c1b010b2b1811041f131b010b80691e81a00122170d44441c1b010b34260a00101f141b010b80691e81a00122172344441c1b010b806a1e81732201171444441c1b010b804b1b010b804302817504041f151b010b806d1806041b010b806d18061481af2b15003504281b010b806d181418063104281b010b806d1b010b2d2618101b010b80691e81a00122170b44441c131e2c1e8191221e15240a000f0a021018082c1510331b010b2d26181018120200280a021018082c3004281b010b806d18131508331b010b80691e81b01504333018063104281b010b26180704281f161b010b806d1500041c1815170b444418161815281f161816001f804e0281b125804844131e81b21a001f061806221e8062240281b31801200a030f1c1806221e81b4240281b50281b60a020f1c1806221e81b724131e80cc221e80cd2418000a010f0a010f1c001f804f0281b825807244131e0b22170b44441c131e0b1e81b90117054444001b01131e1a221e81ba240a000f1d81bb1b010b807c08031f0618062104171e44441f07131e0b221e81b92418071b010b807c1807190a020f1c1660131e8159260200250d44441b010b805520041c001b010b80770a02101c001f80500281bc2580644415001f0618001e81bd2201170a44441c18001e81be2201170a44441c18001e81bf2201170a44441c18001e81c01708444415011f061b010b8053131e081a002218001e813a1d817b2218061d816222131e1a221e81ba240a000f1d81c1041c001f80510281c22580a74418001f0618001e813a1f0718001e81c317804e4418070281c43e2201170b44441c18070281c53e1718444418001e81c60b001f0618061e81c71f081623444418070281c83e1718444418001e81c30b001f0618061e81c71f081605444400131e081a002218071d817b2218061e81c91d81622218061e81ca1d81cb22131e1a221e81ba240a000f1d81c11f091808170b4444180918081d81791b010b80531809041c001f80520281cc258078441b010b8055260a0010170544440018001f0618061e81c11f071b010b807815003f17144444180618061e81c11b010b8078291d81c118061b010b805418061e817b041d817b1b0118071d81cd18001e81ce123e171044441b01220b807b1501281d81cf1b010b8079221e81392418060a010f1c001f80530281d025804144131e081a002215001d81d12215011d81d22215021d81d32215031d81d42215041d81d52215051d81c42215061d81c82215071d81c51f061806180019001f80540281d6258070441b010b80791e251b010b80753b171044441b010b8057260a00101c200018002201171c44441c131e1a221e81ba240a000f1b010b807a291b010b80773b172d44441b010b80791e251b010b80763b171044441b010b8057260a00101c20001b010b8058260a00101c200012001f80550281d72580bd441b010b80791e2515003d1705444400131e081a00221b010b806a1e81741d81c122131e2c1e81911d81d822131e2e1e80791d816a22131e081a00221b010b80791d81d9221b010b807b1d121d817b1f061b010b0b1508041f07131e081a002218061d81da1f08131e081a002218071b010b22261b010b20261b010b8074221e81db24131e80cc221e80cd2418060a010f0a010f18070a02100280a90a0210281d81da1f081b010b804f2618081b010b806a1e81dc0a02101c001f80560281dd252044441b010b8058260a00101c1b010b8056260a00101c1b010a001d81de001f80570281df253044441b010b807c08031f0618062104171e44441f07131e0b221e81e02418071b010b807c1807190a020f1c1660001f80580281e1253c444415001f0618061b010b806a1e81e21e253a172544441b010b806a1e81e2180619221e132418000a010f17064444200018062d1f06165012001f80590281e325834d44131e81b21e281f0618061e80621f0718061e81b41f0818061e81b71f0918061e81e41f0a18061e81e51709444400160a44441806201d81e51806020025805644111e81e6221e813924131e081a00220281b41d81e7221b031d81e80a010f1c131e100281e902121a02221e132418000a010f17174444111801221e80c9240281ea0a010f0b001d81eb1b020b08111b0310001d81b41806020025134444111b031d81ec1b020b0a111b0310001d81e418060200253e4444110a001d81e6111e81e6221e813924131e081a00220280621d81e7221b031d81e80a010f1c1118001d81ed1118011d81ee1b020b07111b0310001d80620281ef0280640281f00281f10281f20281f30281f40a071f0b18060200258234441b010b8059111e81ee0417821d44111e81ee221e2a240281f50a010f157f39170d44441b020b09111b0310001118001d81f6111e81f71f06111e81ef1f07111e80641f08111e81f01f09111e81f11f0a111e81f21f0b111e81f31f0c111e81f41f0d111e81f81f0e111e81f91f0f131e081a001f1015001f1118111b020b0b1e253a1721444418101b020b0b181119111e81fa1b020b0b181119190d18112d1f111658131e081a00221b010b8060261b020b00111e81ee0a02101d819e1f11111e81ed0281b33d17804044111e81eb0281fb3e2201170d44441c111e81eb0281b63e171c44441b010b805e261811111e81eb111e81f60a03101c160d44441b020b09111b0310001b010b80631b020b0004171644441b020b00221e81fc2418110a010f160c44441b010b804e1811041f121b010b806126111e81ee18120a02101f13111e81e622171244441c111e81e60b001e81e70280623f170644442600111e81e61f1415001f15181518141e253a17354444181515003e1710444418141815191e81e818131d1e1118141815191e81e7191118141815191e81e8101c18152d1f151646111e81ec170f4444111e81e411111e81ec101c110281e6091118061d81f71118071d81ef1118081d80641118091d81f011180a1d81f111180b1d81f211180c1d81f311180d1d81f411180e1d81f811180f1d81f915001f1518151b020b0b1e253a17214444111e81fa1b020b0b18151918101b020b0b181519190d18152d1f1516581b020b09111b0310001d81b7001f805a0281fd2582e4440281fe2582ad4418012201170a44441c131e081a001f011b010b807d22170c44441c1800131e81ff411f0602001f070282001f0818061716444418001e819e1f0718001e82011f081626444418001f0718011e82011715444418011e8201221e8202240a000f1606444418081f0818080282004022170b44441c18080281b3402201170e44441c1b010b805918070401171144441b020b0726180018010a021000131e081a00221b010b8060261b020b0018070a02101d819e1f0918080281b33d178166441b010b805d26180018010a0210221e80c9240281ea0a010f0b00221e8203240a000f1f0a180a0281fb3e2201170b44441c180a0281b63e17811a4418061780b7441800221e8204240a000f221e8205240a000f221e80f6240200258079441b010b805e261b030b091b030b0a18000a03101c1b010b80631b020b0004171844441b020b00221e81fc241b030b090a010f160e44441b010b804e1b030b09041f061b010b8061261b030b0718060a02101f071b010b805f261b030b00180718000a03101f081b020b072618081b030b010a021000020025174444131e80f40200250a44441b040b0047001a01000a020f0016805d441b010b805e261809180a18011e807d0a03101c1b010b80631b020b0004171644441b020b00221e81fc2418090a010f160c44441b010b804e1809041f0b1b010b8061261807180b0a02101f0c1b020b0726180c18010a021000161144441b020b0726180018010a02100016808c4418080282003e178075441b010b80631b020b0004171644441b020b00221e81fc2418090a010f160c44441b010b804e1809041f0a1b010b8061261807180a0a02101f0b1806172544441b010b805f261800180b210a03101f0c1b020b0726180c18010a021000161144441b020b0726180b18010a021000161144441b020b0726180018010a021000001f061b010b805c260a0010011705444400131e820617094444001609444413201d8206131e82071f071318061d8207001f805b02820825094444131e8207001f805c0282092581114402001f061b010b807d22170c44441c1800131e81ff411722444418001e820a221e362402820b0a010f1f0718071708444418071f06180600180122170a44441c18011e820a1780c7441b010b807e22170f44441c18011e820c131e820d411722444418011e820a221e362402820b0a010f1f0718071708444418071f0618060018011e820a131e808d411780424415001f07180718011e820a1e253a1730444418011e820a1807190b00221e8203240a000f02820b3d170f444418011e820a1807190b010018072d1f07164818011e820a131e08411737444418011e820a08031f0718072104172344441f081808221e8203240a000f02820b3e170d444418011e820a18081900165b180600001f805d02820e25809e441802221e15240a000f1f0218010281fb3e178073441800201d81a71802221e80c9240280ca0a010f1f06131e081a001f0718061780464415001f08180818061e253a1737444418071806180819221e80c9240280a70a010f0b00131e820f1806180819221e80c9240280a70a010f0b01040d18082d1f081644180018071d807d161744441800131e80cc221e82102418020a010f1d807d1800001f805e02821125806944131e81ff1801131e081a002218001e82011d82012218001e820a1d820a2218021d807d2218001e82121d82122218001e82131d82132218001e82141d82142218001e82151d82152218001e82161d82162218001e82171d82172218001e82181d82181a02001f805f0282192580af4418011f061b010b806a1e821a1e251500391780804415001f0718071b010b806a1e821a1e253a17806b441b010b806a1e821a1807190b001f081808221e132418010a010f178045441801221e80722418081b010b806a1e821a1807190b010a020f1f061b010b80711e81a5221e2924180002821b02821c18012802821d281806280a030f1c160c444418072d1f0716bf8b131e820f18060418063d170d4444131e821e1806041f061806001f806002821f252b444418001800221e2a240280af0a010f157f40170e4444028220180128160a444402822118012828001f8061028222251744441b010b805a1800041c1b010b805b1800041c001f8062028223250d444418001b010b806441001f8063028224251a444411131e80cc221e8210241b010b807f0a010f1d8225001f80640282262580ca441b010b80691e81a01706444426001b010b80631104170c4444111e8225160944441b010b806a1f06131e08221e81aa24180618000a020f1c1b010b80661806041c18061e8222172444441b010b806718061e8227041c1b010b806818061e8228041c1b010b806211041c1b010b806a1e82290122170a44441c18061e8176178047441b010b806a201d822918061e822a0122170a44441c18061e822b170e44441b010b8050260a00101c1b010b27260a00101c131e8159261b010b804d150018060a03101c001f806502822c2580684418001e817715003e2201171a44441c131e22221e232418001e81770a010f18001e81773f170e44441b010b3502822d1a014718001e8222172c444418001e82271e2515003e2201170e44441c18001e82271e813901170e44441b010b3502822e1a0147001f806602822f2536444415001f06180618001e253a172644441b010b806a1e81e2221e813924131e1018001806191a010a010f1c18062d1f061655001f80670282302580414415001f06180618001e253a173144441b010b806a1e821a221e813924131e1018001806190b001a0118001806190b010a020a010f1c18062d1f06164a001f806821131e081e81aa430206401780c044131e08221e3324131e080281aa131e081a00220281aa25808f441800263e2201170944441c1800213e170e4444131e82310282321a0147131e081800041f0615011f0718071b021e253a178058441b021807191f081808264022170944441c1808214017374444180808031f0918092104172944441f0a131e081e281e8233221e29241808180a0a020f170e44441806180a1808180a190d165518072d1f0716bfa41806001f80691880691d804d22201d804e22201d82340a030f1c131e081e80c10117810644131e0802002580f644131e081e281e82331f06131e081a0022261d15221e82352402150a010f011f07021502823602823702823302823802823502110a071f0818081e251f0902002580b2442118004302064022171744441c211800430202402201170944441c1800263e170e4444131e82310282391a01470a001f06180008031f0918092104172844441f071b020b06221e2924180018070a020f171144441806221e81392418070a010f1c16561b020b071780444415001f0818081b020b093a173544441b020b06221e292418001b020b081808190a020f171644441806221e8139241b020b081808190a010f1c18082d1f08164618060000260a00101d80c1131e081a002202823a1d81982215011d81b022121d81a01f8069131e081a0022121d823b2215001d817722121d817622201d822b22121d8222220a001d8227220a001d81e2220a001d8228220a001d821a2202823c1d816e2202823d1d80ae2202823e1d81dc1f806a14823f1f806b15001f806c0200252044441b011b010b806f1d82401b0118001d82411b010b26180015023404001f806e271f806d0200252d44441b011b010b80701d82401b010b806c151c331800150435301f061b0118001d82411b010b26180604001f806f0200252a44441b011b010b806e1d82401b010b261b010b806c151a33180015063530041b010b2518000428001f8070131e081a0022020025804c44121f061b010b8063110417114444111e82251e823b1f06160e44441b010b806a1e823b1f06180622171e44441c131e37221e38240282421800280282432802824418010a030f1c001d81a51f8071131e80881e80891f80720282451f8073131e081a00220200258086441800263d170744440200001b010b8074221e824624180015060200251444441b010b8073221e80972418000a010f000a030f1f0618061e2515042c1f07162c44441807150040172344441807150140171d44441807150240171b4444180715034017194444161c4444180600180602824728001806028248280018060280a72800001d81db220200252544441b010b8074221e824624180015100200250d44441b010b8072180004000a030f001d82492202002585f1441800263d17074444020000131e081a001f08131e081a001f0902001f0a02001f0b02001f0c15021f0d15031f0e15021f0f0a001f1015001f1115001f1215001f13181318001e253a1782c1441800221e80972418130a010f1f0a131e081e281e8233221e29241808180a0a020f01171544441808180a180e222d1f0e0d1809180a200d180c180a281f0b131e081e281e8233221e29241808180b0a020f170c4444180b1f0c16825a44131e081e281e8233221e29241809180c0a020f1781ae44180c221e808e2415000a010f1581003a1780b54415001f061806180f3a1780404418111501331f11181218011501293d1720444415001f121810221e81392418021811040a010f1c15001f111609444418122d1f1218062d1f0616bfbe180c221e808e2415000a010f1f0715001f06180615083a17804d441811150133180715012f301f11181218011501293d1720444415001f121810221e81392418021811040a010f1c15001f111609444418122d1f1218071501341f0718062d1f0616bfb11680bc4415011f0715001f061806180f3a1780474418111501331807301f11181218011501293d1720444415001f121810221e81392418021811040a010f1c15001f111609444418122d1f1215001f0718062d1f0616bfb7180c221e808e2415000a010f1f0715001f06180615103a17804d441811150133180715012f301f11181218011501293d1720444415001f121810221e81392418021811040a010f1c15001f111609444418122d1f1218071501341f0718062d1f0616bfb1180d2e1f0d180d15003d171a4444131e22221e824a241502180f0a020f1f0d180f2d1f0f1809180c09168061441808180c191f0715001f061806180f3a17804d441811150133180715012f301f11181218011501293d1720444415001f121810221e81392418021811040a010f1c15001f111609444418122d1f1218071501341f0718062d1f0616bfb1180d2e1f0d180d15003d171a4444131e22221e824a241502180f0a020f1f0d180f2d1f0f1808180b180e222d1f0e0d131e8088180a041f0c18131501281f1316bd3b180c02004017824644131e081e281e8233221e29241809180c0a020f1781ae44180c221e808e2415000a010f1581003a1780b54415001f061806180f3a1780404418111501331f11181218011501293d1720444415001f121810221e81392418021811040a010f1c15001f111609444418122d1f1218062d1f0616bfbe180c221e808e2415000a010f1f0715001f06180615083a17804d441811150133180715012f301f11181218011501293d1720444415001f121810221e81392418021811040a010f1c15001f111609444418122d1f1218071501341f0718062d1f0616bfb11680bc4415011f0715001f061806180f3a1780474418111501331807301f11181218011501293d1720444415001f121810221e81392418021811040a010f1c15001f111609444418122d1f1215001f0718062d1f0616bfb7180c221e808e2415000a010f1f0715001f06180615103a17804d441811150133180715012f301f11181218011501293d1720444415001f121810221e81392418021811040a010f1c15001f111609444418122d1f1218071501341f0718062d1f0616bfb1180d2e1f0d180d15003d171a4444131e22221e824a241502180f0a020f1f0d180f2d1f0f1809180c09168061441808180c191f0715001f061806180f3a17804d441811150133180715012f301f11181218011501293d1720444415001f121810221e81392418021811040a010f1c15001f111609444418122d1f1218071501341f0718062d1f0616bfb1180d2e1f0d180d15003d171a4444131e22221e824a241502180f0a020f1f0d180f2d1f0f15021f0715001f061806180f3a17804d441811150133180715012f301f11181218011501293d1720444415001f121810221e81392418021811040a010f1c15001f111609444418122d1f1218071501341f0718062d1f0616bfb118111501331f11181218011501293d171c44441810221e81392418021811040a010f1c160f44441609444418122d1f1216501810221e808a2402000a010f001d82461f807415812c1f807515141f807615c927c01f807715001f80780a001f807915001f807a15001f807b131e081a00221880521d81d1221880521d81d2221880521d81d3221880511d81d4221880511d81d5221880521d81c4221880521d81c8221880521d81c51f807c131e81ff22170d44441c131e81ff131e08411f807d131e820d22170d44441c131e820d131e08411f807e131e80cc221e80cd2418806a0a010f1f807f18804e1f80801880641e281880651d82261880641e281880801d81fc1880691222170b44441c180c260a00101d81a018001880641d822418001880651d822618001880801d81fc131e08221e3324180002824b131e081a0022201d804d0a030f1c000a02101c00824c0007f5127c4d28933b06ff09654f0c6806fd037740e70609e503725bc5c9f4e90e06f40b7c20d18208f61a7332a0743bb103f11d4506df134e006b550ef20b5c154135792fbd763bbe471904f900623d08f41b4cf63b823cab0cf41a51f9034102552b7b2cae09f90570fef80e78307a0ed9194aebfeccc8fbb97b22a2635808f90b6ecbda8b2c6806c21c27f6ab540bf3152acd841c5fe22f92e101f904e41938a50bd82903967ccbde830a5cef08e41101912787004821cb1037870f4702649b722987137c0a6445e4f7150cbf40c6850f4cc7a554a35de806e3e13f99f50410e0f42f695007561d24af722c90367c380cf7e7145852dcbc4dc899e2f904d4e2177107f7e1134b0543f108f7e01e7ee50758f607f2e9015fc5d38e01a101a00ce2e8162b860662d5c893f5c93ea0bb4e6932009de4008f93ebe0113699c98d062380ed140857b65bd7aa2850eab04bbb53eab3e29e2f155dc5e4b481054a2d055d2428dbf8523d310319a404ddea0b0a05f6e0ec024506e2ece812208306fcebe4e61f5d09f4e0e0cde51f52d5810fcbfff3fef8d79ba3213e642f81f0db09e0e3fbe9db9bfa063204f3f3f4c407f9fdffd59e212508d4fbfcce6f50db8209fef4d4ad7d133b97d212cbf9c4a553da7516f26d236530721e2a9bd908fcf8cab63f87e8e807f8f1de96074ab810cbf6d2811a1127260f83f0f6ee0d022f0ef4ffd683fbdb682a510b3a9ad97b05d9f6d699d40ef4f9dd60239df5a43d79367f2b5402f9f908f4fba068e61b142403f7fab107f3cfa743dc97d503fcceab02b5c107f6caa1299ec0630affd1a3326a2b1e0f3a6f0af9cbb40542ee790f3b620bffd3aa0e3e482682f7c68e0bf9c98f16137dad50b331520afec7811b3a1af6eec1a906f7c587e5f4d507e0d883f1d7703d10cbc48df0a25ba07b5dc970f9aa2751fb0de0c492cb9710ebddac3697c88e07e0c183c992d2530bc0c28fde7eedd3cb69f0c008cfdf95a042cd75e30bf3d16d20590a239dda6c350bcfee6a3c47f5a20b2e64ec05d1c76c095218d3d2651e336fc4ad28663c41bc0504134dde60eabb323dc20fe7d16d171c0a3e63100d6e0514110209e7d07018f4c994edda05e6d77af2c708e7c570fbd67ef6b314cfe76affb6022641cd4eb61b601e003c52a0376c13cfe653c687c588ffba331a621b0c02071ced851bcfe553cb6a0e12217b1ffee55db21b0f10266fbafeaf2a6add43b717cfe450d37ffb97fcb83b3551f2c280d74d8f8818d497b515cfe35ca45b82eabf041cf9e65eb31b0117113e3e2d13cfe248b23551d863f5b7157dea86cf8fb40df112cfe156a7041c01246b95e1b23f43c840b8ea15cfe042b8e0c49ec27f10f6f478eddc62efba113e2911cf9f5d9af69fc6879c2264eea42d207c1e14cf9e4f94da41d642be311762f39ac44fabfcad3b14cf9d2684b71f0603e0dc49ee86dd62f1a104e8a809cfb026680d0d3e4f9e0cf3a52b63d7cf661ef8b2fdd716cf962f74f989ca8fb826dd9dc3e76497aa0c170f1ed605fda73a40d00acce30a4ae019062c79f706f3a9365e8ff20ff9a73b5066090e1c0333f6aee8ae1a09f9a4382f66d445fe7804ffbb3a3c09f9a200322843b0fcd007ffa3031415050104f3a10e140cd480203ce084c86dc25f98b412c1853ed0f46fa0f25be95afb157854d4b3f80ee3b407fea50417ce8cb2e895b1e907e3b70cd19dd15c10e3bc16c5b58fc0776aea958f0fea66e40ae2b112c46cd462a9fe9a0cc0baebda468bb71a170219d40edd85d6d0275b83b8efbb84b0e3ae0af8b8e6ac270f09c845a20df3aae8b3f4d1729391b7ff959a06f3b8feadf69d09e4b5d087c059562dfa07e2bee782a80eed03ccafb101f70afebfd664ef9d84d2313714cbb0c77fcb4d9bf2dbb6d474d8535db9f3a807990efc8fca41bf1ec9738314ef60ec9d804ace89d85d92c10428f11ea0d6dab98b7750d294d19050f8f3ef7e01449b6521b6a939fde30e852aa0b4ce77f7a3a13df6f022b9d31d6ef5ed92c67ee4c90e348aaaf28d7901da6630ace204f890d55204f68adf5910f890c3370ad7c2beff8fb2f993948f7405fa96d53e3804f289da2214f782b52615d45345b8ea60fa2f36e0a8dd9f66c904f88da40a06e38aba1edd4101cf08e08abdf9bafd243609f38dbff9999a9f6bb603e39fb50be28bb7c6599a4bc874bac20bf19fadd42a5153dd3b30120ee49fa3d50f1fbafb87d65498838306c38596ac16de0cf68087bdd66af570d566cd5f04fa9c82b609e3818d90b20da7fb600de49aa785b0c85ba54cc72819bd05d1848496830af39f988d4cd704e0a3b805f99689399e0aa4cb39a73aaa2beff94c02fd8204f6927fcd12f59268c32812faa87aa5ec29d291db3a360412f4986dc810ef53a97ba4e32bee86e160b0d60ae58a74fdc088b9d211a70ecea449b5aa2ccf8ed37d3f22f5f406f368f86a96c105d573ee4e9c10dd63cc4a64cb00d53da090afbaf3466b15e577c50c648a966aca3328b0adfe72eb02a0d015861fc56ac156525f5b6ed705b74aa04cefb730bbdcff6fbd8720e7885668b9b2a629d36dcb3a3510b5e082dd718771c607dae2de5f748882990b4a6cd2e97e87943582749c7b63eaea8ce215d267ca7325ee32ebac3886b1b5aee965a5ce75b48314e573d763c18a9a7cb1de37b3bed438cc08898e860ae57cd35ee65c504a67ca0ece52e4178943e8cf6f84b985e28506e37fde09a2cf05e873cbe78a07f469a0ff7ec9030ef26cb5f329c242a1a1e36ab3cfed8040d465aed15c5577093797b8b420de298efa4a3a4bd3ae6b20b5cd097dcf6b1fc33f9e070e25b2bcaaa97261130d8423d124d33bdefe537fc36e2d8b456801449008a139f8986543fc9a01ad10f270a7d8b2c3488b9c7293ac9e69b3b68040d1509b8ce406083d9c8ce905268fd6661108cf1637e529a36d1e0cb6b4bb914c552f1568b9b79f432e04844a12bcbea59f665f4140c774bc72a47b93471a15ac14f272a8b5804284beca30fb2329fe7d2208a9cf0d09f275acbee489d66baf06f223d6bbd9ca08f77392bf67b3f44508e0769b9676a3699401af05e3759968aa02ff7403ff7d9109e3798f7a6a69cdeb670ecf6d9f40545001ff7991995877230fcf7c7bc9f4404a8074807d6b8fb9cb0cfc7066a4ca09e92a18a9d3e612f7457d83b4ca20f34f67619e704f829e570007f7447890aebb840ff44764819453617e8665b6b184738d06e3547a986fb503f44b7a04fe4a7e6507e04e7f65a8876a04f8484e780be44d566a488267a1ae99710ef15a5b42484374669dabbebeabca04fb4f55410be34f4d5708d32cc404a6a004e348512807f748421eea504c22b8464e2dd7518acc58f797736070ad8f71cd6e26258f6642b1017b92ca12fd59512e01bf08f755353dac8f647c0ecb0e195dac520105729dbd6982aa05e34224e97901b607ff5625c05119a804da661dd209e34224ce1c88415e1802eb4a04e3572fce08fa4a0fade8c7087c07f94925bcaa934d03fd5a1706e2590f946a8b07ff5f04d8725f3712f35f1c835c01a72ef826f42ad4f15729eb4605e75611893a06f825106f87450af724085269825828d80502a2260aa177f35c18188e5e39cd04f62be95b08f62ce654388a4f18040857aefe0ae32ff02ff21cad5602620be320fa21f5d3cfff20e00304fc20f53a09e322f31dad5619637503f139fc06e338d112745009f728d2c5561c719d110aa37999a46a8b818f8bf00fd320c3ff018804f730dbbb9829fc0d04fe31dcc107fd34c7defd146811f833cbebdccfb6b578450dab4d39d3d2d80ff832c88ca1912cddffd5e936c1e02c0cf835cc82845d1a570d9c25aa0cf730b695609f35b88a196b690df733b28d7b4ee423cfb38153e106e334bb82561c0af337a19d22f8ae8125aa12f73ca4ba119734b37730bd911b53298e2ecd0af12cb56f68579e059f2d0bf12db667757d19460878500ef739af5b54085b0a625d1eb97e5307c02fb14f24caad0af73b966f08748f0a605204e437805b08f3088832fc1654e80cf3098d3bd5d3a1635e732ecf0ff40b8337a76274684f0f923c60712805fc068539880cf70183336f75626c444a399c0efd0482247748f9ec1ea7931640f80bf3149b1a40e108b28a359e0ac4087460615c34cfc1c80cff0671615300940f49c1ebfc0bf70c7c4354f0eb107e5dec07e30f78663b932d08e30e7b6700723aa411f7096761e20e65704b0869631b2eb69bfa03fd047806f70b6e0ecf9205e70a7f36b80cf7155519891269420e21aa9019c7346622447e049aef044bde24890a7527cc900d0692ffef190cf7175c2044187921aa6329a015c53d663969ebe5e5fbfb81b1d7c935450cbbd5d1d917c53a62c205ac179b1fe69261c83312ffbe35713815bec308f71046ca014a185209fd1958f8f91b7f3c670ae31657ecb2d3c1dda27405e31d4fc3da04e30921dd0dfd1729d39d0347ec3690ffe71109f91529a3776b3b63c105e30832bd4404a74f3ea208f6113c910687144a0af6103b992c451b2da46a0bffe63f8be2197ae7e611750cffe73a727b1c6a112ba179390cc4f0056e4ed2b15bc8d8c2da09c7ea0d73348e0f742207c3fd0b790d4bfa08c3e00d47e14b78da0ad3e90040d4d38e209eee0bc3ee1c68c08948640027b508dddc5503aa45edd205d7fc1426840adcef19366742cab75dd305c4fe11057a06dde9ea1f4ede06c6ffef182b8f09d3e1f8e50254fab11c09d1ffecfbe1015ec29407d9e2f8e7c8e4ac08c0f0f8fcc086ed190ad3fdf4c7bf56da2375ea08c0fffac984072fb408dafbf4de7058d49809c0f4d0a7721f2a96d40addc5868043cd6d59d36709c4e089942e80a7cbd106dfc8f9ab257906d6ecc49e0d1306d1ccf1b8d5ee0cd1e9de9fddd1dac3bb2b7f090ac3fdcd66349d859a175d09d3fccd660059d277010addc79054c0385106463f01bc0af7c5bd60df8ed79fc8ac04f9d5a95404e0d7a32c04e4daa32907e6c1a52471131908f6ccb6055ed87d0e02b3850af7c29535135aa56aa02b06e3dc9717101804cb92ceda01b009f7ce9bd9a857bf324806f3c39cce8a1a09e3c882ed94d34bf2aa0ba39fcf8a21b3a2892ba18931ad94dda454c973fcd47a5b1d75faea64326711800c116e129e23bde1743dbe9f2b9021a3f9dc9611002205f492da0cc0f00aab906434790b3096dd3e0be4de431874cea2142678ee09ab927801498eb39c2b0ef7d67f3b2b72e2a93e472b41ba1909c7d16d20010023631610d3c7771df2c5c2dfcd9b972e99a1365e0ff7d362c9c393fdb0214c325fb41d0904f5c178e308f7dd69c8a0051d5811c2ed63f38ec594d5a0302b620e19071d1314fdd55efc5c29302d6808cfd540bf0c05143b5fb217e7de45dd74ebb7c18d0e226bf3e29dd0539eb40ac896b81ce3c85eaf0395eca31c57e7974abf060f0b004f3b2c62b4fc5244a6d704e5cf42b90af9dd57860818123346933eb8e405f0bbfd979a2546f98351adf020a3f33c207c07e4fb943c12be250a5f3df83250886986c5f39f57c1fd28c334a55dba38d69ef651f107e90b9e453635cee808d1adb58dc4f57f4ea1b469773127b5de8d03a9ff04aac38c54d83fafc088a4fab6974c8308a492e6c89194fa278d5124917e11f3b35990c241fc4abf3d0b7ffc83d84bb70ae3a734a8ba000a1af0da0bf3b126651c06185c95a73b13e3a13343ebc96b17d2befbd94a9dbb110e021309f3a4247cf583c28eb004f5be2b400effa93848a8003a267ec168e6cf5b04e5bd3c5220e8b12047791f1f10140feba2b9b516facc4d8ea2ed91c435407dfeb20dd968df04cbb2251701e80df3a4063e246eb5e1da27578c3f0bf7a812250b0316e4b1102805e4ba0918e70df5a10e0be197d94ed355b3b3f78040d19232c0f076a2e251e654f31d7244c1b0f8719bd5ea04156647a81acc5d76d32c2b5968fb98828da90fbfe774d14466c80dc4088859930323ec8948d8ed9a410ef1a207e8a10915f8a8bce895bbff01e001e207f6bb0dee7bd24302ce8b01a60cf6a7d9b50c0c14c14383fdb203afa9b012f5b7f3b4f38b9c3fc18e15c15a89d332372b08e2bfe0b9d757671a02f6ab0ecfbee28d80d0647efe9ca58bbdf60ccfafff7522c2519eabbbc24e07e4aafd7efa918303f4b9d503f189cd01fe01f609e397d24e60e5537fca01e409f187d33c21416ff7820ae48fd33e1708d83f226208e08ba0171fde4c4d13f889b70ae19a8a97a7ad00fe66c9121ba4ea9e0cf48cbe1ece5047c575aa04cb08fc8ba2e5bf1ea31709fc8aa1edaad52d275c0ae289a0fa978e8869e4890ff19bb7f77fea3311eea3e68a62c32e09e38da8cc4a915ccf6d0ae38cafd4215b5cd0342810f49597d5021b98ebacc74aa38c90a6f40ae0838ba10dda2826c13107f2939ca4f070ed09e49c9ebbc27172b1c408e49d8286bc10a0f00ae49c9f89adc809fa7d8707f78683be9465f50bfa84bf9061cc13c98bbfe20be094886dc52c496b9177d70ae4906df670e87db0b04a09e58961ec6181b3c13a0af58d62d47674b4d719d601fd0be38460ce08e7628e60a5e50cfe9f66acf38396d81ba5f08205e28b7684ca09f670cf7da5c608ff690bcf5eea449c839f69c1092608f36ec94965cd24d40ae46ace51539b9468de620bf57cd35a52526e6fd70df303f169c60cf763da0019dd1aa7e06d91ba03e575dd2cfe67db05c7195e5070db7ef77ad97a9f29a9c2283df369de455c493aa871c58f42546df27ab7919d413303da0bf466d521d60793f27b8bbb08e078d30eb9de108904a03b8fb208a03cf3bd378947e202a13d05f46ba8d45c05fe60a3ca350bf27fb5cd3bddefc760abac0af27eb0c4db9f769b9c2e05e167bdbad806f160a8b9d11809e075abb3bcdce46dfa09e461bd938f984a6ef006b663938662fc08fe7887947ea56f8a0aa42ad43681b6c228c11209f67ca66ebdc9ee67a208e0758762a6578ed40ec856bb5675cdf65aabcfe253361f04c053a87d10e3788a60504c27ed6391b2555929e77a0cd3716cc9f44a61dd418b6c6310f16f75a9cf39fc3103a7daac63aa8d9404e34567b40ee3556dabae928076b8daf135fe5010f14674a181424e64a561a4a988789b3103fe4c6403a1162513f8447464acc41ff04133ff4e4f05f9d73bd6ee06f14a6a40b99107f353537fba787507fd4d517f45827f08e3414141516a7d7a01f413f84a415e3bc508ca15a3b1d0f33be11db895330ef344522b14826eb76da4b48f758b0ae442432de3464142415f09e4414f3acf06b9956107e4404802d4c42d05f65f330fbc08e45e31169840445c07f35e21e5639a7a07f35f22ed4c507301e909f15136c839e41f893103a1046609f9440dddf2575a2dee03a10a6e0cf75c1486cdcd147cb85e4b0b09fd5511bdbd965b2dd407fd5412a588524909fd531e926c83433eea07fb58178e4e5c2b05fb5b0b804d0ee65e199436c9f478735c3f75607408e325176cab5023d601e501fc01f110f32bea5f26d7ed1ea72cce25e237808505e527df4a000ce323e027c9580eae590f913203a175a012e22df839ccd0e8e029d832be9f521870513413e22cf530a78a7e0c7c493feae23bd6e154e7450df939d9048f5b196963ab3fa36e14cf2ef11361825e2c414f17663ebb907938bc72560cf922d7186d56088a288ab20d10ff3bc3f4451b63992f8b4e23cb075d060fcf2fc9ce3ad7cddfccaa805c2bba4415cf2dd4ed0d8b1ee63dcaae9e23f613981bcde321b304f625dfc709f123d3d8f116637b660ece31d7d6cdd9aba83a5f27af476f01ab0ecf36c6bf8f5d204c0796158d55ff11cf3ab4b1708430b59b3d67775cd332c6a60dcf34bfab7b59d422dfb38053eb0acf35b09356164e6a31f207ff36ac903fcebf06ff37bc94069209ff34b8696564920f8f0bff35bb6178510f5b0e62500aff32ab6b5a1b5d0a635709ff33aa4b20dca79a250bcf2d8b4a07618f1a604e570bcf3d9c411b52dc26c7c7ee12ff0e9b25fa1b43fc109b067a33a46263400c0ce2049f39ddd4bc615e6333cf07e40b9d31a0767206e5139f33855d21f114870b69636070644b31dc1e2a6d3cb1d6e621a07074851973076551fae91f2804e30c9d1e0ef9088a1e46e728b49b1d8f25b07109e71560734f7c36c9c707c20d747b43108803d72c5c06fd0f784a35830be4045a5a1f793c8f696c3c0be4035f5afc06724945156905f3017950c604e40b623d16cf307c328b743aab5ed0c6c8b28ce531b5066d59e91c05f615553f990de30454156753148ccb1458e23e14cf154d04630f6c2fa75423bc560e4c197df92b9a07f8164a1c5fd2d30cf31b41f7338926f234cda74a06f81053e80b5607d81357f3ef196d0be5075dfeebc5eac0a5712012f41d5ec5d88f0b5350159f1f48c7af65711905e01832c0b60ff20f2dd294204ff60998e2fe1d39ac08e21e21a377510a5c0ee2192db45318471d60fbe3ea056604fd122abf0bf30c378130801a46f3e70905f31e36850f08e2e53d91f5084efa09f9ef2864791a4b003b0ef7e7145e5ec6ab57c89debdc093510cff611780282166138991115a22cad6e0be2e1106d055af1c1e7f48108dfd7236fcd2517b30b9ad42b64f2fbb411b3b5ac09f5e91254d18230733108f2fd1c2ab664eddf0cb6d60b268e0550d5cf88fe930cafd50f33615bcaa74dc497b409f9e50b07690954d3b519f9ffca0344c5820f7e110095ccead4a77c312e84ffb44cefe60dd2f4f2132baf1e1142f3143e6107fffefee8045bdc04f9e1e4fd0ef5fef0f6f1d1bfe2023f46229df30fe5e3f8cfd198f11f236f199bebe3f604cff6fed803e3e0f402e5f60fe6f4cead7e133b9defb556e5f9de811effe6d2a659d72157d5687d4539670f228cf6a0b6d17d462d89f1dd73e4ab27ffe7ddbe2480a7e3ebe21d1a047dcd9fe1d9dd703dd1f370396334204052ac5a11e9cb60395dc310f7fdc3b2094ca9541a24663559b52f8f12f7fcdebe0d1e01633098eaf6e42d1e15385109c4e3c493d9ce7f37672ad3fad990de85b2c5b6376c1b0b19707c367bf4c992d47ce3bba13d3215f7f9a91e9ac8d6d24da73c5b930ef8fdc8463a96f5a43d79367f2b540cf3f2d0740c52cb64123e48fc14e0ecad6de40e052f5d0312770a12e5f6eec99ec00ee4f0894af5d395cebaf1fef6a12f07e6c1a545d6b4d60df9d29c4ba542aa5fd29cf5e48920dfc0ba21840b521d0d3f8181b43e58a6278b80b31d4d315287b5a03b59b0081705a28de262c803f2cbb229f8d1ae1043833f4437723d53e43181d3af1706715e86f5e02e56b718073b0dc625a0a4237bcfdf7bc323f8d2aa1b3f3a6cc4e8d698de39f0fcca68f5d230ffb702462c5c87e7af3e00a756703c23f8d39503120fe716ac2144cfc0edb9153e6b1e5b1515e88e9ffeb90ff4a86c72594c230aa29ed04a4a4cb7bc94e403a199d103a19ad403b5c8cf02bd920df3c29ac1898603f9fe632ef68f8041d1ecb9fd52c5d5f152dbf252d19620390a6bb6c09e0378893e052d7ccf74eed92563ebc772c462ffb8f7b1224a7406e593c85697f941a1d8fc47aa31a8d3e7adf709cfcc92ac5ccb7ffdc203ad8d3c02ad8c08f3dd65104f83fdc003e0dc7c0acfeb6a00230c2c730e2c", []);
    

    大致浏览一下代码,特征为

    1. 比较多的位运算,四则运算。
    2. 没有看到标准JS的内容,如window,document等之类的内容。
    3. 整个的方法里面,全部都是运算操作,还有赋值的操作。
    4. 最后TAC返回的是一个function,该方法调用了里面其他的方法。

    如果我们将其作为node代码运行,并不会报错,但是在JS文件中的最下面加上前面HTML代码里面JS加密的内容,就会看到错误


    你可能会比较好奇为什么上面的看不懂得东西能执行。可以试试下面得代码,上面是加密,下面得解密执行。原理是一样得。

    const a = 'var iFan = "1"; console.log("iFan = " + iFan)'
    let c = "";
    for(let i = 0; i < a.length; i++) {
        let b = a.substring(i, i+1).charCodeAt('')
        if (("" + b).length < 3) {
            c = c + "0" + b;
        }else{
            c = c + b;
        }
    }
    console.log(c);
    ///////////////////////////////
    let d = '';
    for(let i = 0; i < c.length; i+=3) {
        d += String.fromCharCode(c.substring(i, i+3));
    }
    console.log(d);
    eval(d);
    

    我们知道NodeJs里面的一些变量和浏览器是不同的,比如就没有window变量,但是有global变量

    window = global
    

    我们将其赋值给window之后,还是会发现少变量。当你一点点window内的变量进行完善之后,会发现你模拟了一个真正的浏览器。照这个思路,我发现了JsDom这个包。可以使用一下,将jsdom内的windowdocuemntnavigate等变量都赋值后,还是不行,因为缺少了一个叫canvas的东西,canvas是HTML5出的画图的,这个是无界面浏览器很难模拟的。你可以装上Node的一个canvas的包之后,jsdom也是可以模拟出来的(192.168.2.187上我已经弄好了环境,canvas比较难装,可以直接使用上面的。)。最终这块代码可以运行之后,你会发现,加密出来的长度比较短,和直接在浏览器上运行有很大的差别。

    上面的一通操作之后,我们发现,没有作用。究其原因,还是Node的变量环境和Chrome有一定的差别,现在我们需要看一看,到底差别在哪。

    我们需要在https://sf1-ttcdn-tos.pstatp.com/obj/rc-web-sdk/acrawler.js网址下执行,否则会出现跨域得异常,所以我们又会看到一个信息,加密函数在执行时,会进行AJAX请求

    我们在JS代码中加入这一串,放入Chrome中执行,你的浏览器这时会比较卡,会看到加密函数可能会用到得变量。很多信息是用户比较隐私得信息,比如Cpu,显卡,Cookie等信息。

    检测是否为自动浏览器
    H5里面的Storage
    这是发送了一个AJAX请求,跨域的,浏览器给你提示了下
    调用canvas进行画图
    鼠标键盘的事件
    时间
    webgl,获取一些浏览器的和计算机的信息,我会在下面加上JS代码
    在body中添加节点,并删除
    Websocket
    鼠标的移动事件
    添加节点并删除

    加密使用得东西太多了,没办法判断是否都用上,而且如果都用上得话,如果后台解密得话,能否都获取到这些信息,如果都获取了这些信息,头条是完全可以反推出你这个用户得一些信息得。

    加密出来的信息一定是可以解密的,否则,他就失去了将信息回传回去的必要了。
    之后的解决思路为

    1. 模拟出加密函数需要获取的值,现在已经尝试了用jsdom,失败。
    2. 本地不进行模拟的根本原因是:太多了!干不过来!
    3. 尝试对加密函数进行平坦化,尽量使代码可读,去除掉非加密程序块,保留必要的。
    4. 递归太深了,拉平了之后可能会好很多。

    关于我说的递归太深,你体验下

    JS解析到现在,算是到了比较难得地方了。我也找过网上得一些教程,博客,但是就是到了模拟全局变量得时候,写得很模糊。

    头条爬虫得JS逆向到这就进行不下去了,暂时停止先找找思路吧。

    // 使用chrome,F12打开控制台,在console执行就好。
    var canvas = document.createElement('canvas');
    var gl = canvas.getContext('webgl');  // 等同于 canvas.getContext('experimental-webgl');
    
    var debugInfo = gl.getExtension('WEBGL_debug_renderer_info');
    // GPU制造商
    console.log( gl.getParameter(debugInfo.UNMASKED_VENDOR_WEBGL) );
    // GPU型号
    console.log( gl.getParameter(debugInfo.UNMASKED_RENDERER_WEBGL) );
    

    本次JS逆向过程不包括其他实验过程,如puppeter,mimtproxy等。
    手机的API也不包括,虽然也实验了,需要换成低版本才可以。

  • 相关阅读:
    本地复现Zabbix v2.2.x, 3.0.0-3.0.3 jsrpc 参数 profileIdx2 SQL 注入漏洞
    本地搭建复现st2-045漏洞
    Ubuntu安装Vulapps漏洞靶场
    如何在腾讯云Ubuntu服务器安装kali下的神器
    nginx 跳转配置
    Chocolatey 的安装
    MySQL 5.1 主从同步配置
    针对Windows Server 2008 Web 服务 IIS+php 配置的一些心得
    解决IIS7+php的组合上传限制30M的问题
    ssh 文件权限影响登录
  • 原文地址:https://www.cnblogs.com/iFanLiwei/p/12986319.html
Copyright © 2011-2022 走看看