吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

搜索
查看: 17156|回复: 428
上一主题 下一主题

[Python] 某网站Web端爬虫攻防大赛题目交流

    [复制链接]
跳转到指定楼层
楼主
漁滒 发表于 2020-10-21 23:28 回帖奖励
本帖最后由 漁滒 于 2020-11-15 14:59 编辑

比赛网站的链接http://match.yuanrenxue.com/list,比赛目前已经结束
题目序号 题目内容 是否完成
第一题 js 混淆 - 源码乱码 已完成
第二题 js 混淆 - 动态cookie 1 已完成
第三题 访问逻辑 - 推心置腹 已完成
第四题 雪碧图、样式干扰 已完成
第五题 js 混淆 - 乱码增强 已完成
第六题 js 混淆 - 回溯已完成
第七题 动态字体,随风漂移 已完成
第八题 验证码 - 图文点选 已完成
第九题 js 混淆 - 动态cookie 2已完成
第十题 js 混淆 - 重放攻击对抗仅答案
第十一题app抓取 - so文件协议破解 已完成
第十二题入门级js 已完成
第十三题入门级cookie_某乐V1.0版 已完成

第一题【接口-查询参数-值加密】
开打题目后按f12,会出现setInterval函数,直接禁用断点,然后就可以继续执行了,f5刷新一下

在NetWork窗口可以查看到需要的数据来源于【http://match.yuanrenxue.com/api/match/1】接口,而请求中有一个m参数是加密的,也就是说需要找到这个m参数的生成方法,那么在全局中搜索【api/match/1】

可以搜索到这个内容,复制这一段内的script代码进行格式化

其主要内容大概是这些
[JavaScript] 纯文本查看 复制代码
window.url = '/api/match/1';
request = function() {
        var timestamp = Date.parse(new Date());
        var m = oo0O0(timestamp.toString()) + window.f;
        var list = {
                "page": window.page,
                "m": m + '丨' + timestamp / 1000
        };
        $.ajax({
                url: window.url,
                dataType: "json",
                async: false,
                data: list,
                type: "GET",
                beforeSend: function(request) {},
        })
};

这里可以清楚的看到m参数是由oo0O0函数的结果加上window.f得到的,继续查找一下oo0O0函数

也是在当前的页面,只是在不同的script标签下,将这个script标签下的代码进行格式化可以得到下面
[JavaScript] 纯文本查看 复制代码
function oo0O0(mw) {
        window.b = '';
        for (var i = 0, len = window.a.length; i < len; i++) {
                console.log(window.a[i]);
                window.b += String[document.e + document.g](window.a[i][document.f + document.h]() - i - window.c)
        }
        var U = ['W5r5W6VdIHZcT8kU', 'WQ8CWRaxWQirAW=='];
        var J = function(o, E) {
                        o = o - 0x0;
                        var N = U[o];
                        if (J['bSSGte'] === undefined) {
                                var Y = function(w) {
                                                var m = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=',
                                                        T = String(w)['replace'](/=+$/, '');
                                                var A = '';
                                                for (var C = 0x0, b, W, l = 0x0; W = T['charAt'](l++);~W && (b = C % 0x4 ? b * 0x40 + W : W, C++ % 0x4) ? A += String['fromCharCode'](0xff & b >> (-0x2 * C & 0x6)) : 0x0) {
                                                        W = m['indexOf'](W)
                                                }
                                                return A
                                        };
                                var t = function(w, m) {
                                                var T = [],
                                                        A = 0x0,
                                                        C, b = '',
                                                        W = '';
                                                w = Y(w);
                                                for (var R = 0x0, v = w['length']; R < v; R++) {
                                                        W += '%' + ('00' + w['charCodeAt'](R)['toString'](0x10))['slice'](-0x2)
                                                }
                                                w = decodeURIComponent(W);
                                                var l;
                                                for (l = 0x0; l < 0x100; l++) {
                                                        T[l] = l
                                                }
                                                for (l = 0x0; l < 0x100; l++) {
                                                        A = (A + T[l] + m['charCodeAt'](l % m['length'])) % 0x100, C = T[l], T[l] = T[A], T[A] = C
                                                }
                                                l = 0x0, A = 0x0;
                                                for (var L = 0x0; L < w['length']; L++) {
                                                        l = (l + 0x1) % 0x100, A = (A + T[l]) % 0x100, C = T[l], T[l] = T[A], T[A] = C, b += String['fromCharCode'](w['charCodeAt'](L) ^ T[(T[l] + T[A]) % 0x100])
                                                }
                                                return b
                                        };
                                J['luAabU'] = t, J['qlVPZg'] = {}, J['bSSGte'] = !! []
                        }
                        var H = J['qlVPZg'][o];
                        return H === undefined ? (J['TUDBIJ'] === undefined && (J['TUDBIJ'] = !! []), N = J['luAabU'](N, E), J['qlVPZg'][o] = N) : N = H, N
                };
        eval(atob(window['b'])[J('0x0', ']dQW')](J('0x1', 'GTu!'), '\x27' + mw + '\x27'));
        return ''
}

这里有一点是这个oo0O0函数的返回值是一个空值,也就是说m的值完全由window.f决定。
尝试在控制台输出一下window.f

但是当我们执行一次oo0O0函数后,再输出window.f,这时候window.f被修改了

同时会输出一大堆乱码,那就说明oo0O0函数会修改window.f的值,下面详细看看oo0O0函数,其内部并没有出现window.f这个变量,但是在返回值前有一句比较特殊的代码
[JavaScript] 纯文本查看 复制代码
eval(atob(window['b'])[J('0x0', ']dQW')](J('0x1', 'GTu!'), '\x27' + mw + '\x27'));

这里将window['b']的值进行base64解码后还进行了一些函数的传参运算,那么在控制台输出一下【atob(window['b'])】,看看是什么内容
输出后可以看到是一段script代码,将其进行格式化
[JavaScript] 纯文本查看 复制代码
var hexcase = 0;
var b64pad = "";
var chrsz = 16;

function hex_md5(a) {
        return binl2hex(core_md5(str2binl(a), a.length * chrsz))
}
function b64_md5(a) {
        return binl2b64(core_md5(str2binl(a), a.length * chrsz))
}
function str_md5(a) {
        return binl2str(core_md5(str2binl(a), a.length * chrsz))
}
function hex_hmac_md5(a, b) {
        return binl2hex(core_hmac_md5(a, b))
}
function b64_hmac_md5(a, b) {
        return binl2b64(core_hmac_md5(a, b))
}
function str_hmac_md5(a, b) {
        return binl2str(core_hmac_md5(a, b))
}
function md5_vm_test() {
        return hex_md5("abc") == "900150983cd24fb0d6963f7d28e17f72"
}
function core_md5(p, k) {
        p[k >> 5] |= 128 << ((k) % 32);
        p[(((k + 64) >>> 9) << 4) + 14] = k;
        var o = 1732584193;
        var n = -271733879;
        var m = -1732584194;
        var l = 271733878;
        for (var g = 0; g < p.length; g += 16) {
                var j = o;
                var h = n;
                var f = m;
                var e = l;
                o = md5_ff(o, n, m, l, p[g + 0], 7, -680976936);
                l = md5_ff(l, o, n, m, p[g + 1], 12, -389564586);
                m = md5_ff(m, l, o, n, p[g + 2], 17, 606105819);
                n = md5_ff(n, m, l, o, p[g + 3], 22, -1044525330);
                o = md5_ff(o, n, m, l, p[g + 4], 7, -176418897);
                l = md5_ff(l, o, n, m, p[g + 5], 12, 1200080426);
                m = md5_ff(m, l, o, n, p[g + 6], 17, -1473231341);
                n = md5_ff(n, m, l, o, p[g + 7], 22, -45705983);
                o = md5_ff(o, n, m, l, p[g + 8], 7, 1770035416);
                l = md5_ff(l, o, n, m, p[g + 9], 12, -1958414417);
                m = md5_ff(m, l, o, n, p[g + 10], 17, -42063);
                n = md5_ff(n, m, l, o, p[g + 11], 22, -1990404162);
                o = md5_ff(o, n, m, l, p[g + 12], 7, 1804660682);
                l = md5_ff(l, o, n, m, p[g + 13], 12, -40341101);
                m = md5_ff(m, l, o, n, p[g + 14], 17, -1502002290);
                n = md5_ff(n, m, l, o, p[g + 15], 22, 1236535329);
                o = md5_gg(o, n, m, l, p[g + 1], 5, -165796510);
                l = md5_gg(l, o, n, m, p[g + 6], 9, -1069501632);
                m = md5_gg(m, l, o, n, p[g + 11], 14, 643717713);
                n = md5_gg(n, m, l, o, p[g + 0], 20, -373897302);
                o = md5_gg(o, n, m, l, p[g + 5], 5, -701558691);
                l = md5_gg(l, o, n, m, p[g + 10], 9, 38016083);
                m = md5_gg(m, l, o, n, p[g + 15], 14, -660478335);
                n = md5_gg(n, m, l, o, p[g + 4], 20, -405537848);
                o = md5_gg(o, n, m, l, p[g + 9], 5, 568446438);
                l = md5_gg(l, o, n, m, p[g + 14], 9, -1019803690);
                m = md5_gg(m, l, o, n, p[g + 3], 14, -187363961);
                n = md5_gg(n, m, l, o, p[g + 8], 20, 1163531501);
                o = md5_gg(o, n, m, l, p[g + 13], 5, -1444681467);
                l = md5_gg(l, o, n, m, p[g + 2], 9, -51403784);
                m = md5_gg(m, l, o, n, p[g + 7], 14, 1735328473);
                n = md5_gg(n, m, l, o, p[g + 12], 20, -1921207734);
                o = md5_hh(o, n, m, l, p[g + 5], 4, -378558);
                l = md5_hh(l, o, n, m, p[g + 8], 11, -2022574463);
                m = md5_hh(m, l, o, n, p[g + 11], 16, 1839030562);
                n = md5_hh(n, m, l, o, p[g + 14], 23, -35309556);
                o = md5_hh(o, n, m, l, p[g + 1], 4, -1530992060);
                l = md5_hh(l, o, n, m, p[g + 4], 11, 1272893353);
                m = md5_hh(m, l, o, n, p[g + 7], 16, -155497632);
                n = md5_hh(n, m, l, o, p[g + 10], 23, -1094730640);
                o = md5_hh(o, n, m, l, p[g + 13], 4, 681279174);
                l = md5_hh(l, o, n, m, p[g + 0], 11, -358537222);
                m = md5_hh(m, l, o, n, p[g + 3], 16, -722881979);
                n = md5_hh(n, m, l, o, p[g + 6], 23, 76029189);
                o = md5_hh(o, n, m, l, p[g + 9], 4, -640364487);
                l = md5_hh(l, o, n, m, p[g + 12], 11, -421815835);
                m = md5_hh(m, l, o, n, p[g + 15], 16, 530742520);
                n = md5_hh(n, m, l, o, p[g + 2], 23, -995338651);
                o = md5_ii(o, n, m, l, p[g + 0], 6, -198630844);
                l = md5_ii(l, o, n, m, p[g + 7], 10, 11261161415);
                m = md5_ii(m, l, o, n, p[g + 14], 15, -1416354905);
                n = md5_ii(n, m, l, o, p[g + 5], 21, -57434055);
                o = md5_ii(o, n, m, l, p[g + 12], 6, 1700485571);
                l = md5_ii(l, o, n, m, p[g + 3], 10, -1894446606);
                m = md5_ii(m, l, o, n, p[g + 10], 15, -1051523);
                n = md5_ii(n, m, l, o, p[g + 1], 21, -2054922799);
                o = md5_ii(o, n, m, l, p[g + 8], 6, 1873313359);
                l = md5_ii(l, o, n, m, p[g + 15], 10, -30611744);
                m = md5_ii(m, l, o, n, p[g + 6], 15, -1560198380);
                n = md5_ii(n, m, l, o, p[g + 13], 21, 1309151649);
                o = md5_ii(o, n, m, l, p[g + 4], 6, -145523070);
                l = md5_ii(l, o, n, m, p[g + 11], 10, -1120210379);
                m = md5_ii(m, l, o, n, p[g + 2], 15, 718787259);
                n = md5_ii(n, m, l, o, p[g + 9], 21, -343485551);
                o = safe_add(o, j);
                n = safe_add(n, h);
                m = safe_add(m, f);
                l = safe_add(l, e)
        }
        return Array(o, n, m, l)
}
function md5_cmn(h, e, d, c, g, f) {
        return safe_add(bit_rol(safe_add(safe_add(e, h), safe_add(c, f)), g), d)
}
function md5_ff(g, f, k, j, e, i, h) {
        return md5_cmn((f & k) | ((~f) & j), g, f, e, i, h)
}
function md5_gg(g, f, k, j, e, i, h) {
        return md5_cmn((f & j) | (k & (~j)), g, f, e, i, h)
}
function md5_hh(g, f, k, j, e, i, h) {
        return md5_cmn(f ^ k ^ j, g, f, e, i, h)
}
function md5_ii(g, f, k, j, e, i, h) {
        return md5_cmn(k ^ (f | (~j)), g, f, e, i, h)
}
function core_hmac_md5(c, f) {
        var e = str2binl(c);
        if (e.length > 16) {
                e = core_md5(e, c.length * chrsz)
        }
        var a = Array(16),
                d = Array(16);
        for (var b = 0; b < 16; b++) {
                a[b] = e[b] ^ 909522486;
                d[b] = e[b] ^ 1549556828
        }
        var g = core_md5(a.concat(str2binl(f)), 512 + f.length * chrsz);
        return core_md5(d.concat(g), 512 + 128)
}
function safe_add(a, d) {
        var c = (a & 65535) + (d & 65535);
        var b = (a >> 16) + (d >> 16) + (c >> 16);
        return (b << 16) | (c & 65535)
}
function bit_rol(a, b) {
        return (a << b) | (a >>> (32 - b))
}
function str2binl(d) {
        var c = Array();
        var a = (1 << chrsz) - 1;
        for (var b = 0; b < d.length * chrsz; b += chrsz) {
                c[b >> 5] |= (d.charCodeAt(b / chrsz) & a) << (b % 32)
        }
        return c
}
function binl2str(c) {
        var d = "";
        var a = (1 << chrsz) - 1;
        for (var b = 0; b < c.length * 32; b += chrsz) {
                d += String.fromCharCode((c[b >> 5] >>> (b % 32)) & a)
        }
        return d
}
function binl2hex(c) {
        var b = hexcase ? "0123456789ABCDEF" : "0123456789abcdef";
        var d = "";
        for (var a = 0; a < c.length * 4; a++) {
                d += b.charAt((c[a >> 2] >> ((a % 4) * 8 + 4)) & 15) + b.charAt((c[a >> 2] >> ((a % 4) * 8)) & 15)
        }
        return d
}
function binl2b64(d) {
        var c = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
        var f = "";
        for (var b = 0; b < d.length * 4; b += 3) {
                var e = (((d[b >> 2] >> 8 * (b % 4)) & 255) << 16) | (((d[b + 1 >> 2] >> 8 * ((b + 1) % 4)) & 255) << 8) | ((d[b + 2 >> 2] >> 8 * ((b + 2) % 4)) & 255);
                for (var a = 0; a < 4; a++) {
                        if (b * 8 + a * 6 > d.length * 32) {
                                f += b64pad
                        } else {
                                f += c.charAt((e >> 6 * (3 - a)) & 63)
                        }
                }
        }
        return f
};
window.f = hex_md5(mwqqppz)

在函数的最后可以看到window.f是通过hex_md5函数运算得到的
但是这里的【mwqqppz】变量并没有出现的地方,此时就往前看看上一段代码传入的是什么参数
可以看到这里有一些小混淆,此时将上面函数中出现的下方代码输入到控制台,并跟着输入【J('0x0', ']dQW')】和【J('0x1', 'GTu!')】
[JavaScript] 纯文本查看 复制代码
        var U = ['W5r5W6VdIHZcT8kU', 'WQ8CWRaxWQirAW=='];
        var J = function(o, E) {
                        o = o - 0x0;
                        var N = U[o];
                        if (J['bSSGte'] === undefined) {
                                var Y = function(w) {
                                                var m = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=',
                                                        T = String(w)['replace'](/=+$/, '');
                                                var A = '';
                                                for (var C = 0x0, b, W, l = 0x0; W = T['charAt'](l++);~W && (b = C % 0x4 ? b * 0x40 + W : W, C++ % 0x4) ? A += String['fromCharCode'](0xff & b >> (-0x2 * C & 0x6)) : 0x0) {
                                                        W = m['indexOf'](W)
                                                }
                                                return A
                                        };
                                var t = function(w, m) {
                                                var T = [],
                                                        A = 0x0,
                                                        C, b = '',
                                                        W = '';
                                                w = Y(w);
                                                for (var R = 0x0, v = w['length']; R < v; R++) {
                                                        W += '%' + ('00' + w['charCodeAt'](R)['toString'](0x10))['slice'](-0x2)
                                                }
                                                w = decodeURIComponent(W);
                                                var l;
                                                for (l = 0x0; l < 0x100; l++) {
                                                        T[l] = l
                                                }
                                                for (l = 0x0; l < 0x100; l++) {
                                                        A = (A + T[l] + m['charCodeAt'](l % m['length'])) % 0x100, C = T[l], T[l] = T[A], T[A] = C
                                                }
                                                l = 0x0, A = 0x0;
                                                for (var L = 0x0; L < w['length']; L++) {
                                                        l = (l + 0x1) % 0x100, A = (A + T[l]) % 0x100, C = T[l], T[l] = T[A], T[A] = C, b += String['fromCharCode'](w['charCodeAt'](L) ^ T[(T[l] + T[A]) % 0x100])
                                                }
                                                return b
                                        };
                                J['luAabU'] = t, J['qlVPZg'] = {}, J['bSSGte'] = !! []
                        }
                        var H = J['qlVPZg'][o];
                        return H === undefined ? (J['TUDBIJ'] === undefined && (J['TUDBIJ'] = !! []), N = J['luAabU'](N, E), J['qlVPZg'][o] = N) : N = H, N
                };


可以得到其解混淆后的两个值
还原一下就变成了
[JavaScript] 纯文本查看 复制代码
eval(atob(window['b'])["replace"]("mwqqppz", '\x27' + mw + '\x27'));

这是就清楚了。将mwqqppz替换为我们传入的变量进行计算
此时只要将最后一句的
window.f = hex_md5(mwqqppz)
修改为
var mwqqppz = process.argv[2];
console.log(hex_md5(mwqqppz));
就可以给我们进行调用,修改好后另存为01.js
接下来就是简单的写一下接口调用的代码,其中的m值通过用nodejs调用js文件进行计算,需要先安装nodejs
[Python] 纯文本查看 复制代码
import requests
import time
import os

def main():
    money = 0
    number = 0
    ts = str(int(time.time()))
    nodejs = os.popen('node 01 '+ts+'000')
    m = nodejs.read().replace('\n', '') + '丨' + ts
    nodejs.close()
    for page in range(1, 6):
        url = 'http://match.yuanrenxue.com/api/match/1?page='+str(page)+'&m='+m
        response = requests.get(url).json()
        for each in response['data']:
            money += each['value']
            number += 1
    print(money)
    print(number)
    print(money // number)
    # 总价:235000
    # 总数:50
    # 均值:4700

if __name__ == '__main__':
    main()


第二题【接口-请求头-值加密】
因为第二题是动态cookie,为了避免其他cookie的影响,所以使用浏览器的无痕模式进行调试,按f12并选中【Preserve log】

此时可以看到接口中的cookie有一个m参数是加密的

继续往前找到第二条数据出现过这个相同的值

但是当去到第一条数据的时候,就没有这个值了

而且这个点开【Preview】并没有任何内容,而且在响应头也没有set-cookie,那就说明这个页面里面有script代码设置了【document.cookie】的属性
此时关闭f12,使用Fiddler.exe进行抓包,此时可以看到第一次返回的是一段script代码

使用网页提供的ob混淆专解测试版V0.1,进行反混淆,因为代码比较长,只贴出核心代码
[JavaScript] 纯文本查看 复制代码
  function _0x165f49(_0x3601cd, _0x44836c) {
    document["cookie"] = "m" + _0x53b25d() + "=" + _0xb4d4cd(_0x3601cd) + "|" + _0x3601cd + "; path=/";
    location["reload"]();
  }

  function _0x19c5c1(_0x5d05a8, _0x3f4653) {
    return Date["parse"](new Date());
  }
  
  _0x165f49(_0x19c5c1());

这里可以看到执行了_0x165f49函数,这里设置了document.cookie的值,并对页面重新加载
其中计算m参数的函数就是_0xb4d4cd函数,将这个函数复制出来,并复制出其调用到的函数,重新封装另存为02.js
[JavaScript] 纯文本查看 复制代码
  qz = [10, 99, 111, 110, 115, 111, 108, 101, 32, 61, 32, 110, 101, 119, 32, 79, 98, 106, 101, 99, 116, 40, 41, 10, 99, 111, 110, 115, 111, 108, 101, 46, 108, 111, 103, 32, 61, 32, 102, 117, 110, 99, 116, 105, 111, 110, 32, 40, 115, 41, 32, 123, 10, 32, 32, 32, 32, 119, 104, 105, 108, 101, 32, 40, 49, 41, 123, 10, 32, 32, 32, 32, 32, 32, 32, 32, 102, 111, 114, 40, 105, 61, 48, 59, 105, 60, 49, 49, 48, 48, 48, 48, 48, 59, 105, 43, 43, 41, 123, 10, 32, 32, 32, 32, 32, 32, 32, 32, 104, 105, 115, 116, 111, 114, 121, 46, 112, 117, 115, 104, 83, 116, 97, 116, 101, 40, 48, 44, 48, 44, 105, 41, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 125, 10, 32, 32, 32, 32, 125, 10, 10, 125, 10, 99, 111, 110, 115, 111, 108, 101, 46, 116, 111, 83, 116, 114, 105, 110, 103, 32, 61, 32, 39, 91, 111, 98, 106, 101, 99, 116, 32, 79, 98, 106, 101, 99, 116, 93, 39, 10, 99, 111, 110, 115, 111, 108, 101, 46, 108, 111, 103, 46, 116, 111, 83, 116, 114, 105, 110, 103, 32, 61, 32, 39, 402, 32, 116, 111, 83, 116, 114, 105, 110, 103, 40, 41, 32, 123, 32, 91, 110, 97, 116, 105, 118, 101, 32, 99, 111, 100, 101, 93, 32, 125, 39, 10];

  function _0x38927c(_0x31c213, _0x15819d) {
      var _0x1ebfad = (65535 & _0x31c213) + (65535 & _0x15819d);

      return (_0x31c213 >> 16) + (_0x15819d >> 16) + (_0x1ebfad >> 16) << 16 | 65535 & _0x1ebfad;
  }

  function _0x42ea6b(_0x4311af, _0x1d26cb) {
      return _0x4311af << _0x1d26cb | _0x4311af >>> 32 - _0x1d26cb;
  }

  function _0x17df27(_0x149b94, _0x40ae03, _0x4c4c51, _0x896443, _0x2066e1, _0x339641) {
      return _0x38927c(_0x42ea6b(_0x38927c(_0x38927c(_0x40ae03, _0x149b94), _0x38927c(_0x896443, _0x339641)), _0x2066e1), _0x4c4c51);
  }

  function _0x4eb065(_0x4701be, _0x41f76b, _0x58a63e, _0x333b01, _0x1fac47, _0x37993e, _0xd21e0d) {
      return _0x17df27(_0x41f76b & _0x58a63e | ~_0x41f76b & _0x333b01, _0x4701be, _0x41f76b, _0x1fac47, _0x37993e, _0xd21e0d);
  }

  function _0x1f13e1(_0x29d2ad, _0x3bd4bc, _0xff4102, _0x3979c2, _0xd8d449, _0x78fa9b, _0xe01ea7) {
      return _0x17df27(_0x3bd4bc & _0x3979c2 | _0xff4102 & ~_0x3979c2, _0x29d2ad, _0x3bd4bc, _0xd8d449, _0x78fa9b, _0xe01ea7);
  }


  function _0x3e3606(_0x2ef909, _0x3bd8d3, _0x892bc5, _0x13c904, _0x2342a0, _0x35f109, _0x19c0e1) {
      return _0x17df27(_0x3bd8d3 ^ _0x892bc5 ^ _0x13c904, _0x2ef909, _0x3bd8d3, _0x2342a0, _0x35f109, _0x19c0e1);
  }

  function _0x3d2668(_0x4cd0a8, _0xe871c7, _0x5f0915, _0x10cf3a, _0x929107, _0x39dc73, _0x10c64e) {
      return _0x17df27(_0x5f0915 ^ (_0xe871c7 | ~_0x10cf3a), _0x4cd0a8, _0xe871c7, _0x929107, _0x39dc73, _0x10c64e);
  }

  function _0x2f0e92(_0x492976, _0x1ca955) {
      _0x492976[_0x1ca955 >> 5] |= 128 << _0x1ca955 % 32, _0x492976[14 + (_0x1ca955 + 64 >>> 9 << 4)] = _0x1ca955;

      if (qz) {
          var _0x2856ca,
              _0x56938f,
              _0x2632f2,
              _0x1fc011,
              _0x1b5b0b,
              _0x27964a = 1732584193,
              _0x5b3ae5 = -271733879,
              _0x529d7c = -1732584194,
              _0x4813f1 = 271733878;
      } else {
          var _0x2856ca,
              _0x56938f,
              _0x2632f2,
              _0x1fc011,
              _0x1b5b0b,
              _0x27964a = 0,
              _0x5b3ae5 = -0,
              _0x529d7c = -0,
              _0x4813f1 = 0;
      }

      for (_0x2856ca = 0; _0x2856ca < _0x492976["length"]; _0x2856ca += 16) _0x56938f = _0x27964a, _0x2632f2 = _0x5b3ae5, _0x1fc011 = _0x529d7c, _0x1b5b0b = _0x4813f1, _0x27964a = _0x4eb065(_0x27964a, _0x5b3ae5, _0x529d7c, _0x4813f1, _0x492976[_0x2856ca], 7, -680876936), _0x4813f1 = _0x4eb065(_0x4813f1, _0x27964a, _0x5b3ae5, _0x529d7c, _0x492976[_0x2856ca + 1], 12, -389564586), _0x529d7c = _0x4eb065(_0x529d7c, _0x4813f1, _0x27964a, _0x5b3ae5, _0x492976[_0x2856ca + 2], 17, 606105819), _0x5b3ae5 = _0x4eb065(_0x5b3ae5, _0x529d7c, _0x4813f1, _0x27964a, _0x492976[_0x2856ca + 3], 22, -1044525330), _0x27964a = _0x4eb065(_0x27964a, _0x5b3ae5, _0x529d7c, _0x4813f1, _0x492976[_0x2856ca + 4], 7, -176418897), _0x4813f1 = _0x4eb065(_0x4813f1, _0x27964a, _0x5b3ae5, _0x529d7c, _0x492976[_0x2856ca + 5], 12, 1200080426), _0x529d7c = _0x4eb065(_0x529d7c, _0x4813f1, _0x27964a, _0x5b3ae5, _0x492976[_0x2856ca + 6], 17, -1473231341), _0x5b3ae5 = _0x4eb065(_0x5b3ae5, _0x529d7c, _0x4813f1, _0x27964a, _0x492976[_0x2856ca + 7], 22, -45705983), _0x27964a = _0x4eb065(_0x27964a, _0x5b3ae5, _0x529d7c, _0x4813f1, _0x492976[_0x2856ca + 8], 7, 1770035416), _0x4813f1 = _0x4eb065(_0x4813f1, _0x27964a, _0x5b3ae5, _0x529d7c, _0x492976[_0x2856ca + 9], 12, -1958414417), _0x529d7c = _0x4eb065(_0x529d7c, _0x4813f1, _0x27964a, _0x5b3ae5, _0x492976[_0x2856ca + 10], 17, -42063), _0x5b3ae5 = _0x4eb065(_0x5b3ae5, _0x529d7c, _0x4813f1, _0x27964a, _0x492976[_0x2856ca + 11], 22, -1990404162), _0x27964a = _0x4eb065(_0x27964a, _0x5b3ae5, _0x529d7c, _0x4813f1, _0x492976[_0x2856ca + 12], 7, 1804603682), _0x4813f1 = _0x4eb065(_0x4813f1, _0x27964a, _0x5b3ae5, _0x529d7c, _0x492976[_0x2856ca + 13], 12, -40341101), _0x529d7c = _0x4eb065(_0x529d7c, _0x4813f1, _0x27964a, _0x5b3ae5, _0x492976[_0x2856ca + 14], 17, -1502882290), _0x5b3ae5 = _0x4eb065(_0x5b3ae5, _0x529d7c, _0x4813f1, _0x27964a, _0x492976[_0x2856ca + 15], 22, 1236535329), _0x27964a = _0x1f13e1(_0x27964a, _0x5b3ae5, _0x529d7c, _0x4813f1, _0x492976[_0x2856ca + 1], 5, -165796510), _0x4813f1 = _0x1f13e1(_0x4813f1, _0x27964a, _0x5b3ae5, _0x529d7c, _0x492976[_0x2856ca + 6], 9, -1069501632), _0x529d7c = _0x1f13e1(_0x529d7c, _0x4813f1, _0x27964a, _0x5b3ae5, _0x492976[_0x2856ca + 11], 14, 643717713), _0x5b3ae5 = _0x1f13e1(_0x5b3ae5, _0x529d7c, _0x4813f1, _0x27964a, _0x492976[_0x2856ca], 20, -373897302), _0x27964a = _0x1f13e1(_0x27964a, _0x5b3ae5, _0x529d7c, _0x4813f1, _0x492976[_0x2856ca + 5], 5, -701558691), _0x4813f1 = _0x1f13e1(_0x4813f1, _0x27964a, _0x5b3ae5, _0x529d7c, _0x492976[_0x2856ca + 10], 9, 38016083), _0x529d7c = _0x1f13e1(_0x529d7c, _0x4813f1, _0x27964a, _0x5b3ae5, _0x492976[_0x2856ca + 15], 14, -660478335), _0x5b3ae5 = _0x1f13e1(_0x5b3ae5, _0x529d7c, _0x4813f1, _0x27964a, _0x492976[_0x2856ca + 4], 20, -405537848), _0x27964a = _0x1f13e1(_0x27964a, _0x5b3ae5, _0x529d7c, _0x4813f1, _0x492976[_0x2856ca + 9], 5, 568446438), _0x4813f1 = _0x1f13e1(_0x4813f1, _0x27964a, _0x5b3ae5, _0x529d7c, _0x492976[_0x2856ca + 14], 9, -1019803690), _0x529d7c = _0x1f13e1(_0x529d7c, _0x4813f1, _0x27964a, _0x5b3ae5, _0x492976[_0x2856ca + 3], 14, -187363961), _0x5b3ae5 = _0x1f13e1(_0x5b3ae5, _0x529d7c, _0x4813f1, _0x27964a, _0x492976[_0x2856ca + 8], 20, 1163531501), _0x27964a = _0x1f13e1(_0x27964a, _0x5b3ae5, _0x529d7c, _0x4813f1, _0x492976[_0x2856ca + 13], 5, -1444681467), _0x4813f1 = _0x1f13e1(_0x4813f1, _0x27964a, _0x5b3ae5, _0x529d7c, _0x492976[_0x2856ca + 2], 9, -51403784), _0x529d7c = _0x1f13e1(_0x529d7c, _0x4813f1, _0x27964a, _0x5b3ae5, _0x492976[_0x2856ca + 7], 14, 1735328473), _0x5b3ae5 = _0x1f13e1(_0x5b3ae5, _0x529d7c, _0x4813f1, _0x27964a, _0x492976[_0x2856ca + 12], 20, -1926607734), _0x27964a = _0x3e3606(_0x27964a, _0x5b3ae5, _0x529d7c, _0x4813f1, _0x492976[_0x2856ca + 5], 4, -378558), _0x4813f1 = _0x3e3606(_0x4813f1, _0x27964a, _0x5b3ae5, _0x529d7c, _0x492976[_0x2856ca + 8], 11, -2022574463), _0x529d7c = _0x3e3606(_0x529d7c, _0x4813f1, _0x27964a, _0x5b3ae5, _0x492976[_0x2856ca + 11], 16, 1839030562), _0x5b3ae5 = _0x3e3606(_0x5b3ae5, _0x529d7c, _0x4813f1, _0x27964a, _0x492976[_0x2856ca + 14], 23, -35309556), _0x27964a = _0x3e3606(_0x27964a, _0x5b3ae5, _0x529d7c, _0x4813f1, _0x492976[_0x2856ca + 1], 4, -1530992060), _0x4813f1 = _0x3e3606(_0x4813f1, _0x27964a, _0x5b3ae5, _0x529d7c, _0x492976[_0x2856ca + 4], 11, 1272893353), _0x529d7c = _0x3e3606(_0x529d7c, _0x4813f1, _0x27964a, _0x5b3ae5, _0x492976[_0x2856ca + 7], 16, -155497632), _0x5b3ae5 = _0x3e3606(_0x5b3ae5, _0x529d7c, _0x4813f1, _0x27964a, _0x492976[_0x2856ca + 10], 23, -1094730640), _0x27964a = _0x3e3606(_0x27964a, _0x5b3ae5, _0x529d7c, _0x4813f1, _0x492976[_0x2856ca + 13], 4, 681279174), _0x4813f1 = _0x3e3606(_0x4813f1, _0x27964a, _0x5b3ae5, _0x529d7c, _0x492976[_0x2856ca], 11, -358537222), _0x529d7c = _0x3e3606(_0x529d7c, _0x4813f1, _0x27964a, _0x5b3ae5, _0x492976[_0x2856ca + 3], 16, -722521979), _0x5b3ae5 = _0x3e3606(_0x5b3ae5, _0x529d7c, _0x4813f1, _0x27964a, _0x492976[_0x2856ca + 6], 23, 76029189), _0x27964a = _0x3e3606(_0x27964a, _0x5b3ae5, _0x529d7c, _0x4813f1, _0x492976[_0x2856ca + 9], 4, -640364487), _0x4813f1 = _0x3e3606(_0x4813f1, _0x27964a, _0x5b3ae5, _0x529d7c, _0x492976[_0x2856ca + 12], 11, -421815835), _0x529d7c = _0x3e3606(_0x529d7c, _0x4813f1, _0x27964a, _0x5b3ae5, _0x492976[_0x2856ca + 15], 16, 530742520), _0x5b3ae5 = _0x3e3606(_0x5b3ae5, _0x529d7c, _0x4813f1, _0x27964a, _0x492976[_0x2856ca + 2], 23, -995338651), _0x27964a = _0x3d2668(_0x27964a, _0x5b3ae5, _0x529d7c, _0x4813f1, _0x492976[_0x2856ca], 6, -198630844), _0x4813f1 = _0x3d2668(_0x4813f1, _0x27964a, _0x5b3ae5, _0x529d7c, _0x492976[_0x2856ca + 7], 10, 1126891415), _0x529d7c = _0x3d2668(_0x529d7c, _0x4813f1, _0x27964a, _0x5b3ae5, _0x492976[_0x2856ca + 14], 15, -1416354905), _0x5b3ae5 = _0x3d2668(_0x5b3ae5, _0x529d7c, _0x4813f1, _0x27964a, _0x492976[_0x2856ca + 5], 21, -57434055), _0x27964a = _0x3d2668(_0x27964a, _0x5b3ae5, _0x529d7c, _0x4813f1, _0x492976[_0x2856ca + 12], 6, 1700485571), _0x4813f1 = _0x3d2668(_0x4813f1, _0x27964a, _0x5b3ae5, _0x529d7c, _0x492976[_0x2856ca + 3], 10, -1894986606), _0x529d7c = _0x3d2668(_0x529d7c, _0x4813f1, _0x27964a, _0x5b3ae5, _0x492976[_0x2856ca + 10], 15, -1051523), _0x5b3ae5 = _0x3d2668(_0x5b3ae5, _0x529d7c, _0x4813f1, _0x27964a, _0x492976[_0x2856ca + 1], 21, -2054922799), _0x27964a = _0x3d2668(_0x27964a, _0x5b3ae5, _0x529d7c, _0x4813f1, _0x492976[_0x2856ca + 8], 6, 1873313359), _0x4813f1 = _0x3d2668(_0x4813f1, _0x27964a, _0x5b3ae5, _0x529d7c, _0x492976[_0x2856ca + 15], 10, -30611744), _0x529d7c = _0x3d2668(_0x529d7c, _0x4813f1, _0x27964a, _0x5b3ae5, _0x492976[_0x2856ca + 6], 15, -1560198380), _0x5b3ae5 = _0x3d2668(_0x5b3ae5, _0x529d7c, _0x4813f1, _0x27964a, _0x492976[_0x2856ca + 13], 21, 1309151649), _0x27964a = _0x3d2668(_0x27964a, _0x5b3ae5, _0x529d7c, _0x4813f1, _0x492976[_0x2856ca + 4], 6, -145523070), _0x4813f1 = _0x3d2668(_0x4813f1, _0x27964a, _0x5b3ae5, _0x529d7c, _0x492976[_0x2856ca + 11], 10, -1120210379), _0x529d7c = _0x3d2668(_0x529d7c, _0x4813f1, _0x27964a, _0x5b3ae5, _0x492976[_0x2856ca + 2], 15, 718787259), _0x5b3ae5 = _0x3d2668(_0x5b3ae5, _0x529d7c, _0x4813f1, _0x27964a, _0x492976[_0x2856ca + 9], 21, -343485441), _0x27964a = _0x38927c(_0x27964a, _0x56938f), _0x5b3ae5 = _0x38927c(_0x5b3ae5, _0x2632f2), _0x529d7c = _0x38927c(_0x529d7c, _0x1fc011), _0x4813f1 = _0x38927c(_0x4813f1, _0x1b5b0b);

      return [_0x27964a, _0x5b3ae5, _0x529d7c, _0x4813f1];
  }

  function _0x5c0cba(_0x4b9003) {
      var _0x7b6654,
          _0x81a5a1 = [];

      for (_0x81a5a1[(_0x4b9003["length"] >> 2) - 1] = undefined, _0x7b6654 = 0; _0x7b6654 < _0x81a5a1["length"]; _0x7b6654 += 1) _0x81a5a1[_0x7b6654] = 0;

      var _0x4a7c5e = 8 * _0x4b9003["length"];

      for (_0x7b6654 = 0; _0x7b6654 < _0x4a7c5e; _0x7b6654 += 8) _0x81a5a1[_0x7b6654 >> 5] |= (255 & _0x4b9003["charCodeAt"](_0x7b6654 / 8)) << _0x7b6654 % 32;

      return _0x81a5a1;
  }

  function _0x2498e1(_0xab1134) {
      var _0x5b6833,
          _0x2717db,
          _0x55f85f = "0123456789abcdef",
          _0xf7fa75 = "";

      for (_0x2717db = 0; _0x2717db < _0xab1134["length"]; _0x2717db += 1) _0x5b6833 = _0xab1134["charCodeAt"](_0x2717db), _0xf7fa75 += _0x55f85f["charAt"](_0x5b6833 >>> 4 & 15) + _0x55f85f["charAt"](15 & _0x5b6833);

      return _0xf7fa75;
  }

  function _0x43808a(_0xcb333) {
      var _0x49e4a7,
          _0x530dde = "",
          _0x568ad8 = 32 * _0xcb333["length"];

      for (_0x49e4a7 = 0; _0x49e4a7 < _0x568ad8; _0x49e4a7 += 8) _0x530dde += String["fromCharCode"](_0xcb333[_0x49e4a7 >> 5] >>> _0x49e4a7 % 32 & 255);

      return _0x530dde;
  }

  function _0x4094fc(_0x2be7d6) {
      return _0x1faf49(_0x102c73(_0x2be7d6));
  }


  function _0x102c73(_0x4c0c42) {
      return unescape(encodeURIComponent(_0x4c0c42));
  }

  function _0x1faf49(_0x5cf3e8) {
      return _0x43808a(_0x2f0e92(_0x5c0cba(_0x5cf3e8), 8 * _0x5cf3e8["length"]));
  }

  function _0x554c2e(_0x1bfaf7) {
      return _0x2498e1(_0x4094fc(_0x1bfaf7));
  }



  function _0xb4d4cd(_0x3ed615) {
      return _0x554c2e(_0x3ed615);
  }

  var mwqqppz = process.argv[2];
  console.log(_0x115b90(mwqqppz));

此时就可以给我们使用nodejs进行调用计算了
接下来编写请求的代码
[Python] 纯文本查看 复制代码
import requests
import time
import os

def main():
    sums = 0
    ts = str(int(time.time()))+'000'
    nodejs = os.popen('node 02 '+ts)
    m = nodejs.read().replace('\n', '') + '|' + ts
    nodejs.close()
    headers = {
        'cookie': 'm='+m,
    }
    for page in range(1, 6):
        url = 'http://match.yuanrenxue.com/api/match/2?page='+str(page)
        response = requests.get(url, headers=headers).json()
        for each in response['data']:
            sums += each['value']
    print(sums)
    # 总和:248974

if __name__ == '__main__':
    main()


第三题【接口-请求头】
第三题相对于前面两题就简单很多了,服务器检验的请求头的三个参数【Accept-Language】【Cookie】【Referer】自行多次测试可以发现
其中【Accept-Language】和Referer】都是固定值,就没有什么好说的了
主要是Cookie】里面的【sessionid
因为有cookie的影响,依然是使用浏览器的无痕模式打开,并先选中【Preserve log】

这里可以看到sessionid的值,在全局中搜索sessionid的值

这里可以看到在http://match.yuanrenxue.com/logo中首次出现这个值,那么整个逻辑就清楚了
首先访问http://match.yuanrenxue.com/logo,在响应头中取得sessionid的值,然后带进接口请求
下面的python请求的代码,其中题目要求的是求出出现频率最高的数字
[Python] 纯文本查看 复制代码
import requests
import re
from collections import Counter

def main():
    Registration = []
    for page in range(1, 6):
        url = 'http://match.yuanrenxue.com/logo'
        headers = {
            'Accept-Language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7,ko;q=0.6',
            'Referer': 'http://match.yuanrenxue.com/match/3',
        }
        response = requests.post(url, headers=headers)
        sessionid = re.findall('(?<=sessionid=).+?(?=;)', response.headers['Set-Cookie'])[0]
        headers = {
            'Accept-Language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7,ko;q=0.6',
            'Cookie': 'sessionid='+sessionid,
            'Referer': 'http://match.yuanrenxue.com/match/3',
        }
        url = 'http://match.yuanrenxue.com/api/match/3?page='+str(page)
        response = requests.get(url, headers=headers).json()
        for each in response['data']:
            Registration.append(each['value'])
    print(Counter(Registration))
    print(Counter(Registration).most_common(1)[0][0])
    # {8717: 7, 2838: 1, 7609: 1, 6923: 1, 5325: 1, 4118: 1, 8884: 1, 2680: 1, 3721: 1, 8490: 1, 3148: 1, 6025: 1, 8526: 1, 8529: 1, 6481: 1, 9489: 1, 6599: 1, 5500: 1, 185: 1, 8498: 1, 6102: 1, 9222: 1, 2008: 1, 9827: 1, 8224: 1, 2929: 1, 3762: 1, 567: 1, 672: 1, 9524: 1, 7159: 1, 986: 1, 505: 1, 6535: 1, 9491: 1, 3612: 1, 9095: 1, 7357: 1, 9307: 1, 5650: 1, 2109: 1, 23: 1, 2110: 1, 2792: 1}
    # 最高 8717

if __name__ == '__main__':
    main()


第四题【响应-字体反爬-CSS反爬】
第四题接口没有设置任何反爬,直接获取数据即可

可以看到返回的是一个json,其中的info字段是一段html文本,格式化一下html代码,因为比较长,只复制小部分
[JavaScript] 纯文本查看 复制代码
<td>
  <img
    src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAdCAIAAAAl5NuSAAACy0lEQVQ4EZ1UTWgTQRSeJNtsNyXbxmZF3BWkgpocRC9NDyYn8RD04A9YKKRUiCAV8VAPimg9VEE8KaV6Cg1YgxRyEAoePGgvaS+tCLYg7Sk5yBooW9Nk003i7My83c2mFnVZeN977/vem3m7M54jR4+j/324DqHcGrtVHTn3SxF13kx6kc6rmz3zs8KzvIvsaessD9dy98sK33SxiOtXP/ePprk1O+e1oZzaWXisOpS8ruPXB4y6lPiRyxoy+Oai2CMbLyfKInMCK2/l5ImDJ0/h9/DwVLio00RTjG09T4HEEo893TpDtoiQUJjqvzzptZa3lBXij8Iqk1SHRmsxhmlnuX41VqURfbVvImvVBpAXZpYE5iiVm5coJGI5rUdZJlDIcSWQOG0m1wPNd6JJOlEivn66wnia8Mn9PaDCgn9DY1ga2CVjM8WNqLzLwiUuA+QO6/tW6mJBsXHeREQswZRVtfOnsYtsaJAVDbJNLE42QIu0n2QbNr8NzZX84NeVYQwxOdxi3wgJqvV9gPVHa9bZr1OHcI2DkdEUFkcMa9kd9P0D/9TZXQqL3YtxU2xfsUdLgm2ddSliM/dAwRYEfdo6hli87oUxNHmYO5Da7IWwAb5PW6biZUuMRDsNNIeNiiDWuBUzbi67q1hkFFE24LixiMM0ozI71vqmf85MmGJPoWQdt9rIoIPvhIP1YxL1uza+0P+UDCyTD8Bx2x5K73mBoSvpikK1evD9E4qIGOWFQpEiJCW0F3FnR4LjtTuJHYK86pLwiuWZxHN7NgQz3744vfU61bIuuliqujhdZm210Mwk0+D92lfvWLb8MEbLk8r46jStwfMN1knvnR8X7y4yDyFfb18/c1bxziOtswN1dmq5Bme+8GNooTcPgvc+WkoMHGLsfV3ozm/2KIeQFGryHJ2cX1ODKx8O3LjW/e67U4mxY9muzF+4vwHPdM7J2FS8qwAAAABJRU5ErkJggg=="
    class="img_number 6c7ac088bd56d619f1bbcc2aee9facea"
    style="left: 11px;"
  /><img
    src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAAdCAIAAADKJrCsAAADAklEQVQ4EaWVX0hTURzHz7brzt30bqLcfNgN0kFtPZR7mgQqhASlPkx6MB98iBZICWL0IESISKZoSCBRSeKg7CHsQfNB7KF82faQ9aK9GBR3D3XFP9fadrY2u3fn/nZv2wyhy4V7fr/f9/M7v3POb2em4ydOov94mH+xXYPxy42J0zzBOJPTWYlsXY9yz+4xizEKmkrP7w3Gn/TuCDhbOv2XmtqL1lyo1PxdU7t3W/axjjKEWFQLpzGiGQ8gWMQ3jcg6TCrC887Jp+aIVi3yBtJ91/cuAI1QQf2BRPT+Fp8LE5Ef6mZfAKkjCHk9aOMzdZiN/oPHN7cpjOTq0UNgBQBYGRr5YLxZoMtj117aZ0rNbJwtNzbww62wZyI3OlGkLO3I866Uz5umKTejbKS0utib5zvTbi1q33xdrDvMA+fX5iHagcs4HFXVbbcSPYFfbj6R85sRYcUN+8KsbWzJmAt4H5/S3LJl2ZV9OL3VXkcMwizCcaE+3lOP2wNVnUEGNhfq5zm6eIRSB33TEsBWQrDyGhIRoen7Uui3S3NpfIZ3gMa1316XQqQ8POe6dKrGc+aY8taeF4beOGVNknX4d8e7qQHzA600eRIT56sbVVcGzRt5b8w00+/onXfCkhINHalcCcU8Mosr3O3VPKoP3g9wyyIA3mSfGgFTVyEuPGEymMahafRTOdgpQV2CxlskWBySmXXYXJDq39hHKwgJ79V5JO2X6aojjegvBepfjsEhOTLCkXibpG4v8JEIhsKSvuChCfx+AgdtkdUrAHgUYtckiiV9rfRsirNke87+1LwSu6C2eZ5H5kdRTot5d2ZH8jecnqVtaq9Zu17KNlfZRTWi8yjSz4VlaqfcHVsrDzJ+6FLkyQ6HtsdbYHKxcmiAnnHB/ddIVqZ+uGErEVL6X9VhDI2nGHLl837ujtZgFmdltVqH9nxj3n61NZxL8pjWn2EY9YWwmYhVE9cqxj6Ao/D+BX/XSPxqY1xQ/nnohU9sUsz+bs42GTL93VwF9QN/5O8fGRn4ilT2qk0AAAAASUVORK5CYII="
    class="img_number 6c7ac088bd56d619f1bbcc2aee9facea"
    style="left: -11px;"
  /><img
    src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAdCAIAAAAl5NuSAAADUElEQVQ4EZ1UX0hTURi/u7vbmV29ztwiuwvSQOYegj2kIqXlg5DkgxQlaInCVIiepKQgMss9ZEFQUlkPIZgz+gfiopDA5cMUApMYvejTBuVVi93m3dH96d57zrl3ExVpG7vf953f7/u+c7/fOYaDh0qp//0wWxBPd0vt9WsuOwQgqSxDEBXYoD+n7z4dyYIbsis7Ey8GV2scMAuDHRqGC0Z699z+oi0a862FxOETo69+HbMniM9AaEomGeWrhNIMJ7lPmKJ+05yIIDRBUtSNwZVKLqX6ZiFQ1FRb5DyyT/nVOvom83Az3ErP4DqPSVrleulei8gqUTo8ub+qyxjB6SlKNMz5LfO8ob4Myi0wdto+a/mg7F6rfHzDjvJB6/glAzIz/wPXcoMCCsRcjcgg5DZ+HUMjzN1Mkm7TAu4FbU1eIOSQaMQwc7pCJ+xsEfLMDIgipCPeXL4Vh193laA4G8bTImRqOCcYRo5YdwtWb6anB57/dqHgIvvYjyyNTBk6e20L6kBAydLQdGzAky5TMdUe+HZ66WyJ+lJg/msvmMGpsxXGN8V911ccQHslGIUfMO+T19rp04LanNWI+J0JJZiaKkkduAZCBjv1wHpz2KCNn6IyK/Opp8PLdbqwaQqaIJUEQBOsLO/CvouWl/h8aHuWhT32kzBzFiYONNXyxYo8i4pleU5Y1VmkgEPoH1trw/okbbcNrjaXklfSVXDhGZ0lz49gfNFSczK2V9YnK7md7Pg7WsQiKY+3V0jqzswhH3dFP3T6tiN+0OqzouPBVfztUbSgtl3RKjkQDOZOeXXCJivizQnhwyVWeuSJqOQ6HseobYWN8jAL5CqxO+S3qJI5sLGpyC7cNCYLUYDRtmTbTrykw4aXYVQ+SGrlkUULjnGxBs/2bE/czaFVWogQcuSRJYQpcXeHNsbsLM7EaMcf0mFe0CdfGGjOojFclmpE0gdSTaPhMDTPf9OVeKZ7bah/2cUizdNCoPDcE5msyzN95/1yc1k8o5wZQvU+ApAUlBdpuGjrOAUCCo4oTE7z2ccKJfTR0jiBJhn50sX3LsppCQdsLefNX5GXURkHKGfq6mWpoTxm5zYAhfoEMGoKzeaOPDS9+UFgylNvOzO6S/sfNQgekSrMrRAAAAAASUVORK5CYII="
    class="img_number 6c7ac088bd56d619f1bbcc2aee9facea"
    style="left: 0px;"
  /><img
    src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAAcCAIAAAABemMJAAAAyElEQVQ4EWOUVVBjoAAw4dWr8Xfm3lf3b75ZHodLGQsuCYaovs/l3h/4QPKcOBUxYOqX/p+Y8y3J+6MM+1/c2uAySPrNA38nRXyxMPjGx/APLk+IAdcf921W9VuwayFamF8/4eST+cJOwACs4fdJYHO9lNlC9p8ENAOl4faDlDL/fM13cD1XUy/TUyAPZ5iDlMIAXP9eztwbXIdOwcSJpeH6nzIeAllKKsDqfxIMGdVPQmBhUToaflgChQSh0fAjIbCwKB3o8AMADiotC5QUM1oAAAAASUVORK5CYII="
    class="img_number 6c7ac088bd56d619f1bbcc2aee9facea"
    style="left: 0px;"
  />
</td>

可以看到主要有三个值,一个【src】是图片的base64编码文本,一个【class】是图片对应的类,一个【style】是图片对应的样式
每一个src对应唯一的一个数字图片,那么可以根据这个base64编码的文本判断是什么数字
那么类和样式有什么用呢?现在还不知道,那么在页面对着数字审查一下元素,看看页面的组成结构

此时可以看到,并不是多少位数,页面就有多少张数字图片。其中有一些多余的,其样式会被设置为【display: none;】,可以理解为不显示出来的意思
除去这个样式的,剩下数字的数量就可以与现实数字的数量一样了,那么怎么知道哪些是隐藏,哪些是不隐藏呢?
通过对比发现,返回的class数值中,【mg_number】后面的数字有两种,其中一种是全部隐藏,另外一种就是显示的图片,接下来就是要找怎么判断两种数字了
因为要添加【display: none;】属性,所以在全局中搜索【'display', 'none'】(备注:这里涉及一些html的知识)

可以看到搜索到两处都在同一个页面,那么格式化一下这个页面继续查找,在下面的图片中就可以找到我们需要的函数

这里使用的是ajax进行异步请求,主要看其中的success回调函数
[JavaScript] 纯文本查看 复制代码
success: function(data) {
                        datas = data.info;
                        $('.number').text('').append(datas);
                        var j_key = '.' + hex_md5(btoa(data.key + data.value).replace(/=/g, ''));
                        $(j_key).css('display', 'none');
                        $('.img_number').removeClass().addClass('img_number')
                    }

这里可以看到取响应体中【key】和【value】两个字段进行base64编码后去除等号计算md5
如果数值相等,那么这个图片就是一个不需要的图片,此时数量的问题就解决了
解决了数量问题,还有一个顺序问题。请求返回的图片顺序和显示的图片顺序并不相同,因为我们还遗漏了图片的【style】
可以看到其中的【style】有正数和负数,说明对排版进行了一些小小的操作
此时根据【style】的数值,对图片进行重新排序即可(备注:这里涉及一些html的知识)
到这里的时候,已经把数量和顺序的问题都解决了,下面编写代码请求,并还原数值
[Python] 纯文本查看 复制代码
import requests
import hashlib
import base64
import re

def main():
    numbers = {
        'iVBORw0KGgoAAAANSUhEUgAAABQAAAAdCAIAAAAl5NuSAAACy0lEQVQ4EZ1UTWgTQRSeJNtsNyXbxmZF3BWkgpocRC9NDyYn8RD04A9YKKRUiCAV8VAPimg9VEE8KaV6Cg1YgxRyEAoePGgvaS+tCLYg7Sk5yBooW9Nk003i7My83c2mFnVZeN977/vem3m7M54jR4+j/324DqHcGrtVHTn3SxF13kx6kc6rmz3zs8KzvIvsaessD9dy98sK33SxiOtXP/ePprk1O+e1oZzaWXisOpS8ruPXB4y6lPiRyxoy+Oai2CMbLyfKInMCK2/l5ImDJ0/h9/DwVLio00RTjG09T4HEEo893TpDtoiQUJjqvzzptZa3lBXij8Iqk1SHRmsxhmlnuX41VqURfbVvImvVBpAXZpYE5iiVm5coJGI5rUdZJlDIcSWQOG0m1wPNd6JJOlEivn66wnia8Mn9PaDCgn9DY1ga2CVjM8WNqLzLwiUuA+QO6/tW6mJBsXHeREQswZRVtfOnsYtsaJAVDbJNLE42QIu0n2QbNr8NzZX84NeVYQwxOdxi3wgJqvV9gPVHa9bZr1OHcI2DkdEUFkcMa9kd9P0D/9TZXQqL3YtxU2xfsUdLgm2ddSliM/dAwRYEfdo6hli87oUxNHmYO5Da7IWwAb5PW6biZUuMRDsNNIeNiiDWuBUzbi67q1hkFFE24LixiMM0ozI71vqmf85MmGJPoWQdt9rIoIPvhIP1YxL1uza+0P+UDCyTD8Bx2x5K73mBoSvpikK1evD9E4qIGOWFQpEiJCW0F3FnR4LjtTuJHYK86pLwiuWZxHN7NgQz3744vfU61bIuuliqujhdZm210Mwk0+D92lfvWLb8MEbLk8r46jStwfMN1knvnR8X7y4yDyFfb18/c1bxziOtswN1dmq5Bme+8GNooTcPgvc+WkoMHGLsfV3ozm/2KIeQFGryHJ2cX1ODKx8O3LjW/e67U4mxY9muzF+4vwHPdM7J2FS8qwAAAABJRU5ErkJggg==': '0',
        'iVBORw0KGgoAAAANSUhEUgAAABUAAAAcCAIAAAABemMJAAAAyElEQVQ4EWOUVVBjoAAw4dWr8Xfm3lf3b75ZHodLGQsuCYaovs/l3h/4QPKcOBUxYOqX/p+Y8y3J+6MM+1/c2uAySPrNA38nRXyxMPjGx/APLk+IAdcf921W9VuwayFamF8/4eST+cJOwACs4fdJYHO9lNlC9p8ENAOl4faDlDL/fM13cD1XUy/TUyAPZ5iDlMIAXP9eztwbXIdOwcSJpeH6nzIeAllKKsDqfxIMGdVPQmBhUToaflgChQSh0fAjIbCwKB3o8AMADiotC5QUM1oAAAAASUVORK5CYII=': '1',
        'iVBORw0KGgoAAAANSUhEUgAAABQAAAAdCAIAAAAl5NuSAAACO0lEQVQ4EWOUVVBjIBewoGqU/p+Y8z3a9puM6E92hn9gObafn9iuXeBe08u27AaqYgZGhM12Vd9aI97LsEP0oKkDcjnubhWOL2J6ipCBaU6c+q7c5Ss7QoL9508g5z87+y+EGAPTp5PiXnEsMP1MUCktJYhO5k/3RKZXyCqqi2noAZG4opNM01aBT1BV//jM308uhpsG0wwS+MS/uV5K35Ozaz1cmoHhKeP8Il6vVmGY/h+GLj+lofIwzT+fCDcF8OWtQNKGxHy6iGv6BQ6ogNKvJDTNNalc82FeQdKFYM64CNPM8EfGDCIOsxmhChfrCTPM5X/5lEjVrPmHD2ou2xOo74i2OUMJFHUg8InlGoTBQKRm6V++mj+gWp6yzCdJc8vU91rQBMR5Yh0bVC8xNicuehOtCU1nP6/zlSyC6WVAyxhwcQhD+l/L1LfRcAd/Eu7MZkOKUNyapb1+T656bSj6F2rga+GmcLS0gEOzT8OX1sj3sLhhAqW/OI5lSJaCTcTUjOZULDkR7jc0zba/17UjO1VoXht38za4ajQGsmbbX1v7XmvxQQoD5tcXREvCWQ+hqUfhwjVL/1mO0Ml1fqFQUBsjikosHJjmxPYPFlA7OU+0CkciIhOLJpgQJHma/Ugy/w4WYn2ylUidQOVgzebx32Ugpv3k3VxE0LUwiyGa3aRhOeY180G4FGEG2M+ivL+hKmVer7hJWBMDA/8adb5SsM1/RWFJiRh9SGogAYYkQAoTVuiTogeuFgCpiqrSY0PgFgAAAABJRU5ErkJggg==': '2',
        'iVBORw0KGgoAAAANSUhEUgAAABQAAAAdCAIAAAAl5NuSAAACpElEQVQ4EWOUVVBjIBewoGiUNvtbkPPNXvM7H99PdojMT/ZPr7lPbONs6mV6iqIWyGGE2/y/dtGHaPMvUD3o6ph+PhGckM014wayBDO/gDCY3/55oetnmDvYfv5k+fuX5S/LfxaG/2Dp/yx83228WT9tY73wGa6fCc4CMz4J7Jol7aUurqEnBkLq0hGtonc/MUMV8b0t7/uDpAGhmfH1SUkvU970XqbrSPInF3G4BIid/wkVYjf4XouQhTv7Bvu2RUz3EBJIrM9MX43+esn/Bgsx/vzEtfYiRBZu81MGjMBE6N9ygx1mN0KQgQGuGVkQk/2akXzN0ga/+KAmsj1ZBDebKJv/1+l/heq4zjEBrpcYZ2cseusm8w+shWdXLxtS0MCSBcI4GMvc+a+990832w/KfH/BYlwnegTTD8OkQTSq5u7tj0OUkKUhbJZP9wQ7CzmWoaRNoBRhPzP9fM355DUjOyzEkMxG1fzzJzsSgqTKf+yin7XMX9UtfnZx+88oaSS9SLkKWRTGlv4fHPEjKfCzligsml8LN4VzzYcGGiJLwjRgoxNnvyu3+wrOrUyvD0mapUIcjOpsbBpBYvNTBQ8+gSj9J2r+vQyqjjjNwEKj6SI3VAv7d8MICJNYzQxPfyIpZSNRszQ7JJEBtTH9fIOsWZoBJQogUijk/3J48v7JfmIbsuacz+tX/vbBbYBP32dY8mb4dIFjBtRcqEf+ixq8mLz9/br2P3YaKDZqBv6euf3NZO+PsJJYaGklrEhDSdvsXwyDviwMYmL4yQpNE+y/2RngXmVg+Mm/Jpu7C5GtIDafYkcUkUDV7D/ZIQihk/nTPdHqML5SlFyFlMKCi3+EuHzTkv7Nx/4L5nT2n59Y717nWjOFff4pmBiCRtKMECSWBQDfGNuYxLjW9gAAAABJRU5ErkJggg==': '3',
        'iVBORw0KGgoAAAANSUhEUgAAABUAAAAbCAIAAAAcf1OxAAABhElEQVQ4EWOUVVBjIAhqN7xM0vwFVsZ5olUkchFcBxOchZsR+M0XqhlTDWH9/7vTPoliaoSKENIvXfzNV+k3Tu0MBPT/7Yn4wI5bNwN+/XZTP1nw/QNq//ma+xN2U/DYb/uz1eULWBfPwW0c2LXjtv9/d9UHGZAmpteH+NOf4NCOS795+2dfJXCEfxKc3oDHkVilzH61en8EBxvH+RVc85/ishzkOky5/92N75XBun9e58/txVSALIKh3w7u8p/8m9vY8NkNMgdNv+2P1iCIy9nubuUtPYVsFVY2sn7pP8v73oLDnOHndcH4SkasOlAFkfQntn+ApBaGT8Kd2QRdDjEHpt+u/VO5+XewGOeJyfjDHNkFYP3Scd8mQ73N+mSrMFL2RlaKlQ3Ub/tzYclbPrDsz3uC1UXEeBthlmzjCc7//xnIQpzHW2D+RxhIGouF4edP5p8/8eZxkIl/2dn/gE1mYvjJ+hNqB/PPX4xElZ8Mcd8uVkPCiIzyE2obVopS/w91/QDSPZdPKmG8AQAAAABJRU5ErkJggg==': '4',
        'iVBORw0KGgoAAAANSUhEUgAAABUAAAAcCAIAAAABemMJAAAB+ElEQVQ4EWOUVVBjoACwIOv9uefmK2VkAWzsTyel9OOYYTJMMAaQ9vrHh8QjjomsX+Q/O3GakFShuB8m/km4yZRrPoyHl0a2X/MPZe6HW/SJeRecTYCBZH+U9C+o4l8MTwlog0sj6UcE3k9GuDwhBpJ+UfZ/ENWfPsGjl5B2BmT9fD8JKsdQgKQfLvfpDfH2I+L/r4wI1AQZ76f3vaF+YWBg//mJ9e51rjVT2OefglsBZ2Czn4EBrhmo7ic73xct81d1i59d3P4zShquE8JA6P/LB009LD9/soMQmkqGv3xKr1o3fEtEMYKRQP61S/2VFPTJXuk73LSf98TjPdlOQvnM/ALCcCksjIfnmDcs5dr1k9XN+Ds3OLBYBP+LPuXacAOiGOF+LJrhQtdnc+Vu5YdxvxkG/oWxidMPVH2ykus8LEj4RP+QrJ+BgeXJa5guBE20/QwMWEsXEvT/lpGB2vsTkUGI1m/X900Lqh2YHOHJljj90nHfe1w+w2zn3dwAZTIg8p/Gfx9buCiCIW32t3vl+73Vb0ShxQPbtRXcMxDy8PTX/ul+0EeQOErK/cPODo9qoBzb3a2i8UVMSKUT3CNwI9l/IgoiuCDIXJ6DkwUTZiMLAdlw/ac4Tmj+1VL6zc6AbCfzz59sn55yndjDMb2X6TqaXhAXAA8XiW6ahRdHAAAAAElFTkSuQmCC': '5',
        'iVBORw0KGgoAAAANSUhEUgAAABUAAAAdCAIAAADKJrCsAAADAklEQVQ4EaWVX0hTURzHz7brzt30bqLcfNgN0kFtPZR7mgQqhASlPkx6MB98iBZICWL0IESISKZoSCBRSeKg7CHsQfNB7KF82faQ9aK9GBR3D3XFP9fadrY2u3fn/nZv2wyhy4V7fr/f9/M7v3POb2em4ydOov94mH+xXYPxy42J0zzBOJPTWYlsXY9yz+4xizEKmkrP7w3Gn/TuCDhbOv2XmtqL1lyo1PxdU7t3W/axjjKEWFQLpzGiGQ8gWMQ3jcg6TCrC887Jp+aIVi3yBtJ91/cuAI1QQf2BRPT+Fp8LE5Ef6mZfAKkjCHk9aOMzdZiN/oPHN7cpjOTq0UNgBQBYGRr5YLxZoMtj117aZ0rNbJwtNzbww62wZyI3OlGkLO3I866Uz5umKTejbKS0utib5zvTbi1q33xdrDvMA+fX5iHagcs4HFXVbbcSPYFfbj6R85sRYcUN+8KsbWzJmAt4H5/S3LJl2ZV9OL3VXkcMwizCcaE+3lOP2wNVnUEGNhfq5zm6eIRSB33TEsBWQrDyGhIRoen7Uui3S3NpfIZ3gMa1316XQqQ8POe6dKrGc+aY8taeF4beOGVNknX4d8e7qQHzA600eRIT56sbVVcGzRt5b8w00+/onXfCkhINHalcCcU8Mosr3O3VPKoP3g9wyyIA3mSfGgFTVyEuPGEymMahafRTOdgpQV2CxlskWBySmXXYXJDq39hHKwgJ79V5JO2X6aojjegvBepfjsEhOTLCkXibpG4v8JEIhsKSvuChCfx+AgdtkdUrAHgUYtckiiV9rfRsirNke87+1LwSu6C2eZ5H5kdRTot5d2ZH8jecnqVtaq9Zu17KNlfZRTWi8yjSz4VlaqfcHVsrDzJ+6FLkyQ6HtsdbYHKxcmiAnnHB/ddIVqZ+uGErEVL6X9VhDI2nGHLl837ujtZgFmdltVqH9nxj3n61NZxL8pjWn2EY9YWwmYhVE9cqxj6Ao/D+BX/XSPxqY1xQ/nnohU9sUsz+bs42GTL93VwF9QN/5O8fGRn4ilT2qk0AAAAASUVORK5CYII=': '6',
        'iVBORw0KGgoAAAANSUhEUgAAABQAAAAeCAIAAACjcKk8AAABuklEQVQ4EWOUVVBjIBcwkasRpI8FrDnu28Xqt3ykmcO/Rp0im8nWfI99DQMjKQEW+P1UxxtRkO+4D1YIJawnweb/3WkfwToZfl7gq14PNIJozdLF33yVfoPDlH9zL8tTEItYzf/rvD6wg7W+PsRTegrMIlKzdNUXe5l/YB0CuxrgFsIZELOwk/9aEdZy14BdDFZIhGbphq/2kIBiQLYWqJ2w5n+tLh8gDnp9CNlaIjRLV321gFrLe2I2mlVoXIgVCPJ/ufMnSCD/vMCTBw1kuDR+zXHfYYHMdWIFJA/BdQIZeDW3BH2CZrUn3NNBSQoN4NFs9sNeE5KkWK8d5jiJphHExa3ZPOKHDFQD9/nZWLTi0fwv0+wzRMfPC5xICQPZFFw2B/7QgsYQ+7VTmEEFMQKH5sTAb1C9P7lP9CLbhszGrvmvm+Z3iKqf19m7kNWjsLFq9vqlDI0i1rsXcbkZaAw2zebeP6BuZuC4uxDFLlQONs0hSt+gil6z70JkQFSNIB4WzX+UpSH5nuHnU9YtmFoQIpiavX7LQLICA8PrN8wIlVhYmJoN/sA8zP76HiMWLQghkspthDYICwBClnHZDNYAMQAAAABJRU5ErkJggg==': '7',
        'iVBORw0KGgoAAAANSUhEUgAAABQAAAAdCAIAAAAl5NuSAAADUElEQVQ4EZ1UX0hTURi/u7vbmV29ztwiuwvSQOYegj2kIqXlg5DkgxQlaInCVIiepKQgMss9ZEFQUlkPIZgz+gfiopDA5cMUApMYvejTBuVVi93m3dH96d57zrl3ExVpG7vf953f7/u+c7/fOYaDh0qp//0wWxBPd0vt9WsuOwQgqSxDEBXYoD+n7z4dyYIbsis7Ey8GV2scMAuDHRqGC0Z699z+oi0a862FxOETo69+HbMniM9AaEomGeWrhNIMJ7lPmKJ+05yIIDRBUtSNwZVKLqX6ZiFQ1FRb5DyyT/nVOvom83Az3ErP4DqPSVrleulei8gqUTo8ub+qyxjB6SlKNMz5LfO8ob4Myi0wdto+a/mg7F6rfHzDjvJB6/glAzIz/wPXcoMCCsRcjcgg5DZ+HUMjzN1Mkm7TAu4FbU1eIOSQaMQwc7pCJ+xsEfLMDIgipCPeXL4Vh193laA4G8bTImRqOCcYRo5YdwtWb6anB57/dqHgIvvYjyyNTBk6e20L6kBAydLQdGzAky5TMdUe+HZ66WyJ+lJg/msvmMGpsxXGN8V911ccQHslGIUfMO+T19rp04LanNWI+J0JJZiaKkkduAZCBjv1wHpz2KCNn6IyK/Opp8PLdbqwaQqaIJUEQBOsLO/CvouWl/h8aHuWhT32kzBzFiYONNXyxYo8i4pleU5Y1VmkgEPoH1trw/okbbcNrjaXklfSVXDhGZ0lz49gfNFSczK2V9YnK7md7Pg7WsQiKY+3V0jqzswhH3dFP3T6tiN+0OqzouPBVfztUbSgtl3RKjkQDOZOeXXCJivizQnhwyVWeuSJqOQ6HseobYWN8jAL5CqxO+S3qJI5sLGpyC7cNCYLUYDRtmTbTrykw4aXYVQ+SGrlkUULjnGxBs/2bE/czaFVWogQcuSRJYQpcXeHNsbsLM7EaMcf0mFe0CdfGGjOojFclmpE0gdSTaPhMDTPf9OVeKZ7bah/2cUizdNCoPDcE5msyzN95/1yc1k8o5wZQvU+ApAUlBdpuGjrOAUCCo4oTE7z2ccKJfTR0jiBJhn50sX3LsppCQdsLefNX5GXURkHKGfq6mWpoTxm5zYAhfoEMGoKzeaOPDS9+UFgylNvOzO6S/sfNQgekSrMrRAAAAAASUVORK5CYII=': '8',
        'iVBORw0KGgoAAAANSUhEUgAAABQAAAAcCAIAAADuuAg3AAAC9klEQVQ4EZVUTUwTQRSeblvG1rYW6KKwJVZMEDgYPFB6kaMHwEQSDyZGkChejAlKRY1eROJBrDFBYjAEYhNCPGCIP3DQi3CBJoYQEspBenE5yJ9hwZah7dbZnZl1t9QE2snOe99837w3f89U6isHWb/KpmT7pe1A5a4L7qpDFiQdWog4B59aPi3ruSajWJC7+zYuVyb0lH82cnx7nn81rAHmI+5C5gipkXe/6o+TaBjkAMpDaYvyJxTLrq8uGZDso3PE55gSZHoG1gN8WvU5KcZ3XRFOnC6qwO1UaXCkYJUSE4Fb8VaBOFrabX8WgxtQBVH0WNMFa5SyaSc0x8cfrrsUj1udLPa34bAscnfDFlEC5B6+ma3EiuWw/eWMTZ1J5qt3WtVZVBekqsqSxEJR2xPDlhJY+Q69cojEc8XPNWOLRPaneBoXiDG6O4Rm+EasokSAhLc2w8QVsroYAzOXYxbXKMx78NayNWtUyFLQkJwGdGnisJmdBOCFVE62Cqa9HjbolBtZZKvI1LA63uNnDGMvdOyc0ZYHMzwTc68jTsbcPP8YNdJrwDDcn0VvW+hFYChb80zIMS1RB5at9I5t9Xek6yoUmuCXO/u25gZWTirbYaVKZMK54ofB2rWiHzsgk/l/2yz8MG2jhKUiXzmLrMw3BVvuH12QzHTurE7KH75jn9VAZMo+quXxvIaakuAbz2zssIQgUpsk5k+/L6mvcTyaAlU8fa2SEiPXdRoN2XDTYugM7ais4iIW69PWsXKb/qSXHhUUv2LKQcS1LQkvmVW0DUYOJk63+7dVLSfOwRnF2nfk1vDvAMkZuT+G8FYbxcLeW6VS8KfxhXSvluxz3tJn+zP64HWR2wdWImOJziamUHtchvsn1nobNsljQzF31wMSFg9rNQyAnomfF8uIEp+wasAkBDKB8ApRzBO8DnWlO9c5A4D2vGooThbcaLMYq6Kubn/57oS8tdgjQ8gKNYBIss1PFYRuu+4OcayKsFT0aWvYvo2/Mt8Dn3GoSZ0AAAAASUVORK5CYII=': '9'
    }
    sums = 0
    for page in range(1, 6):
        url = 'http://match.yuanrenxue.com/api/match/4?page='+str(page)
        response = requests.get(url)
        response = response.json()
        j_key = hashlib.md5(base64.b64encode((response['key']+response['value']).encode()).replace(b'=', b'')).hexdigest()
        tds = re.findall('(?<=<td>).+?(?=</td>)', response['info'])
        for td in tds:
            imgs = re.findall('(?<=<img).+?(?=>)', td)
            outnumber = ['', '', '', '', '']
            i = 0
            for img in imgs:
                number = re.findall('(?<=data:image/png;base64,).+?(?=")', img)[0]
                imgclass = re.findall('(?<=img_number ).+?(?=")', img)[0]
                imgstyle = int(int(re.findall('(?<=style="left:).+?(?=px")', img)[0]) / 11)
                if imgclass != j_key:
                    outnumber[i + imgstyle] = numbers[number]
                    i += 1
            outnumber = int(''.join(list(filter(lambda n: n, outnumber))))
            sums += outnumber
    print(sums)
    # 总数:243701

if __name__ == '__main__':
    main()


第五题【接口-查询参数-值加密】【接口-请求头-值加密】
这题还是和cookie有关,那么依旧使用浏览器的无痕模式打开,并先选中【Preserve log】
查看其接口的请求内容

可以看到cookie有m参数和RM4hZBv0dDon443M参数两个加密参数,已经查询参数m和f,看起来有点像两个时间戳
首先从识别度比较高的RM4hZBv0dDon443M参数开始,在全局中搜索RM4hZBv0dDon443M参数,这里就不贴图了,因为发现啥也么有
那么此时比较值得分析的就是主页,格式化一下代码

这里可以发现有一段混淆的代码,复制出来使用之前用过的ob混淆专解测试版V0.1进行反混淆
[JavaScript] 纯文本查看 复制代码
function _$KS() {
  V();

  if (eval["toString"]() === "function eval() { [native code] }") {
    if ($_zw["length"] === 25) {
      $_ow = "";

      for (var h = 0; h < window["$$$"]["length"]; h++) {
        $_ow += String["fromCharCode"](window["$$$"][h]["charCodeAt"]() - ($_zw["length"] + 1) * 3 - parseInt(h["toString"]()["slice"](0, 1)) * 2);
      }

      eval($_ow);
    } else {
      $_ow = "";

      for (var h = 0; h < window["$$$"]["length"]; h++) {
        $_ow += String["fromCharCode"](window["$$$"][h]["charCodeAt"]() - 78 - parseInt(h["toString"]()["slice"](0, 1)) * 2);
      }

      eval($_ow);
    }
  } else {
    $_ow = "";

    for (var h = 0; h < window["$$$"]["length"]; h++) {
      $_ow += String["fromCharCode"](window["$$$"][h]["charCodeAt"]() - 2331 - parseInt(h["toString"]()["slice"](0, 1)) * 2);
    }

    eval($_ow);
  }
}

_$KS();

这里就和第一题有点像,代码是在eval函数里面的,此时我们就要拿到解密后的代码,在三个eval前面都点一下,饭后刷新页面

此时成功断下,如果不行的话就重新开一个无痕模式重复上面步骤
然后在控制台分别输入【eval["toString"]()】和【$_zw["length"]】


可以得出函数最后运行的是这段代码,然后在控制台输入
[JavaScript] 纯文本查看 复制代码
      $_ow = "";

      for (var h = 0; h < window["$$$"]["length"]; h++) {
        $_ow += String["fromCharCode"](window["$$$"][h]["charCodeAt"]() - 78 - parseInt(h["toString"]()["slice"](0, 1)) * 2);
      }


此时可以得到解密后的js代码,复制出来格式化一下

此时就可以搜索到我们需要的RM4hZBv0dDon443M变量
这里网站给我们留下了一条路,我们发现在控制台会不断的打印【世上无难事,只要肯放弃】
而在我们解密后的js中也可以搜索到这段字符串,也就是说这段字符串是在我们解密后的代码里面执行打印的,此时只要点击右边的链接就可以进入到代码块了


找到我们需要的RM4hZBv0dDon443M变量,然后设置断点,并刷新,就可以成功断下

此时我们看到【_$8K['_$ss']】还是【undefined】,那么就继续执行,直到不为【undefined】的时候,此时RM4hZBv0dDon443M的值已经加密完成
此时我们在代码中搜索【_$ss】的话,又是啥也没有搜索到,那就转为搜索【_$8K[】,发现有61个结果,还行,不算很多,都过一遍,查找可能与【_$ss】有关的,跳过赋值的操作,只看被赋值的操作

可以找到1207行就是【_$8K['_$ss']】被赋值的操作,继续下断点,然后刷新

再次断下后可以看到【_$8K['_$ss']】是前面加密的结果,加密的算法使用的是AES/ECB/Pkcs7,,然后在控制台输入【_$8K[_$pe('0x6', 'OCbs')].toString()】来获取加解密的key

将16进制转换为2进制可以发现是一段字符串,并且像是base64编码的,那么再将它进行base64解码

可以看到最终得到的是一个类似与时间截的东西,经过对比发现其实这就是查询参数中的m参数去掉最后一位
因为AES是对称加密,所以可以用得到的key来看看加密前的内容是什么
[Python] 纯文本查看 复制代码
from Crypto.Cipher import AES
from Crypto.Util.Padding import unpad
_ss = 'X+B1D1B6iiwDOZVNuWwP3wjJ3DfyVTh1+mvR8dZicNoQ4+tfI4QQ2Qpbe2IU4xXfYQMzGBT5qP4uR6lEUtY8kbmCITQJ7CkIum8vf5VxuEWy6nujLSXDlI/scpSr/J3/TrmXvzYFnqAziOoUBq7hGLXC6RLJhLi1MNyVV3HDKlUkwbFQ/iFusspgWs/tTdZkg1qkg95k5BW+/mgfiZSPNLms5aekP+IdTpdJM3Y2948='
cryptor = AES.new(key='MTYwMzI5MTg1NTU4'.encode(), mode=AES.MODE_ECB)
print(unpad(cryptor.decrypt(base64.b64decode(_ss.encode())), AES.block_size).decode())
# 6e6c4989f57580aa4a1ba51fe6901ed2,788d57895ac6376da4ea4cf54875e6ce,90aa7ce116c6c55311eccc1ddf868adb,90aa7ce116c6c55311eccc1ddf868adb,be4d9d6c4119c22212430ea3ba4947de

可以看到是由5段字符串用逗号拼接后组成的,接着搜索【'_$pr'】,看看这些字符串是什么时候被加入进去的

因为【_$8K['_$pr']】是一个数组,那么主要看它的【push】方法,在这个方法的地方都下一个端点,其中可以发现都是调用的b函数
经过对比发现,第一次调用b函数的参数就是查询参数中的f参数,其他三个都是比第一个大的数即可,第五次调用b函数的参数就是查询参数中的m参数

那么就下来就只能下b函数的问题了,重新刷新页面,再次断下的时候,进入b函数看一下,然后将b函数以及它调用到的函数都复制出来

后面发现前面四次和最后一次里面的参数有少许的变化,需要分别修改,分别保存为0501.js和0502.js
[JavaScript] 纯文本查看 复制代码
var _$8K = {};

var _$ev = [], _$Uy = String.fromCharCode;
function _$HY(_$5X) {
        var _$HY = _$Uy(96);
        _$ev = _$Ch(_$5X).split(_$HY)
}
function _$Ch(_$5X) {
        var _$HY = _$5X.length;
        var _$o4, _$_Z = new Array(_$HY - 1), _$KJ = _$5X.charCodeAt(0) - 97;
        for (var _$Q_ = 0, _$TO = 1; _$TO < _$HY; ++_$TO) {
                _$o4 = _$5X.charCodeAt(_$TO);
                if (_$o4 >= 40 && _$o4 < 92) {
                        _$o4 += _$KJ;
                        if (_$o4 >= 92)
                                _$o4 = _$o4 - 52
                } else if (_$o4 >= 97 && _$o4 < 127) {
                        _$o4 += _$KJ;
                        if (_$o4 >= 127)
                                _$o4 = _$o4 - 30
                }
                _$_Z[_$Q_++] = _$o4
        }
        return _$Uy.apply(null, _$_Z)
}
        
_$HY('o~q}u`euf3ffdyrgfu`fkbu`xduv`wuf3ffdyrgfu`qsfya~`sq||`efdy~w`bdafafkbu`e|ysu`$_vb~W`eb|ysu`qbb|k`3sfyhuJArzusf`dueg|f`sxqd5atu3f`rgffa~`eu~t`vad}`ratk`}ageu}ahu`xqeAi~Bdabudfk`xaef~q}u`|asqfya~`abu~`eb|yf`euf;~fudhq|`xffbe,`s|ys{`sa~sqf`}ufxat`faEfdy~w`~atuFkbu`adywy~`v|aad`badf`$_~t`:F?>9u~udys7|u}u~f`fqw@q}u`saa{yu`$_<C~x`exai?atq|6yq|aw`du}ahu5xy|t`{uk5atu`bqdu~f@atu`wufFy}u`duqtkEfqfu`ujus`bqfx~q}u`euqdsx`fuef`yvdq}u`eufFy}uagf`:F?>8ad}7|u}u~f`hyeyry|yfk`qbbu~t5xy|t`qtt7hu~f>yefu~ud`y~tujut64`esdybf`a~duqtkefqfusxq~wu`uhq|`y~~ud:F?>`hq|gu`7{sB`|asq|Efadqwu`a~egr}yf`arzusf`bdafasa|`sa~fu~f`s|a~u@atu`y~tujAv`qeeyw~`idyfu`tasg}u~f`du}ahu7hu~f>yefu~ud`dag~t`efk|u`$_hh5;`dub|qsu`vg~sfya~`?ysda?ueeu~wud`geud3wu~f`ixy|u`a~s|ys{`y~bgf`suy|`?qfx`xyttu~`fqdwuf`|aqt`}rezmkexsv`~g}rud`sduqfu7|u}u~f`wuf7|u}u~fe4kFqw@q}u`wuf7|u}u~f4k;t`qffqsx7hu~f`$_vxV`s|yu~f6qfq`egr}yf`fy}uEfq}b`va~fe`A~|k a~u hqdyqr|u tus|qdqfya~ q||aiut y~ vadTTy~ |aab`fdq~eyu~f`qdyfk`tyeqr|ut`fkbuav`sxqdeuf`egbud`|u~wfx`#v*X`?ej}|XTJ?>:FFBTYTV`fa6qfqGD>`asd_dtkfigDsddqqmujgnh`qbb|ysqfya~5qsxu`}g|fybqdfUvad}Stqfq`hqd wuf3ffdyrgfu/vg~sfya~N~q}uOmdufgd~ sgd_u|uTwuf3ffdyrgfuN~q}uO-o-`qffdyrgfue`Marzusf 3ddqk]`bgex@afyvysqfya~`hayt`F=_EFD;@9`VVVV`qffdHudfuj`bgr|ys`efabBdabqwqfya~`l_,zcze~ld_VQR_+zxfiyzi9_jzcze~ld9xvcc,zcze~ld`$_vV`xqex`su||g|qd`8EE44`qssu|udqfya~`fdq~evud5xq~~u|`~7hdo5od|hu`fdgu`sduqfuArzusfEfadu`?ej}|XTJ?>:FFBT[TV`du}ahu3ffdyrgfu`b|gwy~e`o__vf{jwf_wjs~ishw6__kwtvf{jwf_wjs~ishw6__gw~wb{ia_wjs~ishw6__xlvf{jwf_wjs~ishw6__vf{jwf_ibkfsddwv6__kwtvf{jwf_ibkfsddwv6__gw~wb{ia_ibkfsddwv6__xlvf{jwf_ibkfsddwv6__kwtvf{jwf_guf{dh_xibu6__kwtvf{jwf_guf{dh_xb`fdkmdufgd~ Niy~tai y~efq~suav Iy~taiO-osqfsxNuOmo`?ej}|XTEudhudJ?>:FFB`sa|ad6ubfx`fWY/ebisbqf~|N3f}bq|k ,|~efkb 4kfNVllig|wwN5boa|k|N[bisbqf~| -brb +3 /ol FH 3efkNq|elj|N+Z 2j|oq_[ qbpq 1bdri|oNW(-/ol@ifdeqN[bisbqf~| +3 GF +fdeq XuqbkabaN[bisb,_(kaf|N2XV1l}lql+fdeq UliaN.1 ,le|kqv 4kf~lab 1bdri|oNWolfa 2|kp 3e|fN*|kk|a| 2|kd|j ,-NWWV 4~ebkN~il~hECDI_sDADN2|jprkd*|kk|a|1bdri|oN,( +T-3(-Z UliaN2|jprkd2|kp-rjF+ +fdeqNsboa|k|N[bisbqf~|-brb3efkN2XVY|ii}|~hN2|jprkdXjlgfN3birdr 2|kd|j ,-NV|oolfp Zlqef~ 2VNYivjb +fdeq 1l}lql +fdeqN2l,T@Wfdfq +fdeqN2l,V 2|kp 1bdri|oN[87f8r|k)NppqNp|jprkd@p|kp@krjG3Ndj_jbkdjbkdN+lefq *|kk|a|Nqfjbp kbt olj|kNp|jprkd@p|kp@krjG+Npbofc@jlklpm|~bN2|jprkd2|kp-rj@F3 3efkNVlilo.24(@73efkNWolfa -|phe 2efcq TiqN2|jprkd3birdr1bdri|oNUbkd|if .32N,( +|k3fkd_ZU .rqpfab 82NY9,f|l6r_ZUDKCFCNebisb@kbrb@obdri|oN223 ,bafrjNVlrofbo -btN*ejbo ,lkarihfof UliaN[bisbqf~| +3 EF 4iqo| +fdeq XuqbkabaN[bisbqf~| +3 EH 4iqo| +fdeqN1l}lql ,bafrjNWolfa 2|kp UliaNdlravNp|kp@pbofc@~lkabkpba@ifdeqN2YfkaboNklql@p|kp@~gh@jbafrjNjfrfN,1l~hv /1V UliaNTkaolfaVil~h 1bdri|oN2|jprkd2|kp-rj@G+ +fdeqNp|kp@pbofc@qefkNT|/|kd8|boN~|pr|iNU- ,le|kqv.3 UliaNu@ppqN-lql2|kp,v|kj|o9|tdvfN[bisbqf~| +3 FF 3efk XuqbkabaNTpeibv2~ofmq,3 TiqN-lql 2|kp Wbs|k|d|of 4(N1l}lql Vlkabkpba UliaN1l}lql ,bafrj (q|if~NjfrfbuN-lql 2|kp Zrojrhef 4(N223 5fbqk|jbpb +fdeqN+Z_.ofv|Nev~lccbbNu@ppq@riqo|ifdeqNWY[[url=mailto:bfT6J@TNY9967U3.3_4kf]bfT6J@TNY9967U3.3_4kf[/url]~labNWbs|k|d|of 2|kd|j ,- UliaNp|kp@pbofc@jlklpm|~bN/|a|rh Ullh UliaN+Z@Y98fkdUf*|f2er@2DH@5EAEN+Z@Y98fkdUf*|f2er@2DH@5EAFN[bisbqf~|-brb+3 /ol FH 3eN,f~olplcq [fj|i|v|N2|jprkd2|kpY|ii}|~hN223 ,bafrj (q|if~NTkaolfaXjlgfN2|jprkd2|kp-rj@F1N(3V 2qlkb 2bofcNp|kp@pbofc@pj|ii~|mpNu@ppq@jbafrjN+Z_2fke|ibpbN1l}lql 3efk (q|if~N~bkqrov@dlqef~NVil~hlmf|N+rjfklrp_2|kpNYilofaf|k 2~ofmq TiqN-lql 2|kp Zrojrhef UliaN+3[829* UliaNZ2_3e|fN2|jprkd-bl-rj_F3_ENTo|}f~Ne|kp@p|kp@kloj|iN+lefq 3birdrN[80f[bf@HC2 +fdeqN+fkapbv clo 2|jprkdNT1 Vovpq|iebf WUN2|jprkd 2|kp ,bafrjNp|jprkd@p|kp@krjGHNe|kp@p|kp@}liaN+rjfklrp_2~ofmqN223 VlkabkpbaN2|jprkdWbs|k|d|of1bdri|oNTkg|i ,|i|v|i|j ,-N2|jprkd3e|f;qbpq<NY9+|k3fkd[bf@,@ZUDKCFCN[b}obt .32NZ2GH_To|};Tkaolfa.2<N2|jprkd 2|kp +fdeqNVel~l ~llhvNebisb@kbrb@qefkN/- ,le|kqv.3 ,bafrjN+Z@Y9*|3lkd@,DL@5EAGNWolfa 2bofcN2|jprkd2fke|i|1bdri|oNebisbqf~|N+Z@Y9*|3lkd@,DL@5EAEN-lql 2|kp Wbs|k|d|of 4( UliaN223 +fdeqNWY/XjlgfNtb|qeboclkqkbt 1bdri|oN1l}lql-rjF1NW(-/ol@jbafrjN2|jprkd 2|kp -rjHHN223 [b|sv (q|if~N+Zil~hG 1bdri|o_CKCHNZblodf|Nklql@p|kp@~ghN3birdr 2|kd|j ,- UliaN,(4( X7 -loj|iN[80f[bf@JH2 UliaN-lql2|kp,v|kj|o9|tdvf UliaNvrklpmol@}i|~hNebisb@kbrb@kloj|iN+rjfklrp_2bofcN3, ,le|kqv.3 -loj|iN2|jprkd2|kp-rj@F+s +fdeqN2|jprkd 2|kp -rjGHN2j|oqZlqef~ ,bafrjNdblodf|N~|pr|i@clkq@qvmbN2|jprkd 2|kp UliaNpj|ii@~|mfq|ipN,Yfk|k~b /1V UliaNY9+|k3fkd[bf_ZUDKCFCN2|jprkdTojbkf|kN1l}lql UliaN~bkqrov@dlqef~@}liaNu@ppq@eb|svN223 +fdeq (q|if~N3e|o+lkNu@ppq@ifdeqNWfk}li 1bdri|oN2|jprkdUbkd|if1bdri|oN*- ,le|kqv.32j|ii ,bafrjNevmrobN2|jprkd3|jfi1bdri|oN,|i|v|i|j 2|kd|j ,-N-lql 2|kp *|kk|a| 4(Nebisb@kbrbN[bisbqf~| +3 HH 1lj|kN-lql 2|kp *|kk|a| UliaN2|kmv|N2|jprkd/rkg|}f1bdri|oNp|jprkd@p|kp@krjG+sN+Z_*|kk|a|N2|jprkd 2|kp 1bdri|oN9|tdvf@.kbNWolfa 2bofc Ulia (q|if~NY9*T3)6N~lrofbo kbtN2|jprkdXjlgf1bdri|oN,(4( X7 UliaNTkaolfa XjlgfN-lql -|phe To|}f~ 4(N+VW VljNYrqro| ,bafrj U3N5fsl@buqo|~qNU|kdi| 2|kd|j ,- UliaNe|kp@p|kp@obdri|oN2-rj@F1N2-rj@F3Ne|kp@p|kpN223 4iqo| +fdeqN1l}lql 1bdri|oN1l}lql +fdeqN[|krj|kNkbtiddlqef~NWY[bfT6H@TNe|kp@p|kp@ifdeqN/i|qb Zlqef~N2-rj@F+N[bisbqf~| +3 GH +fdeqN,v|kj|o 2|kd|j 9|tdvf UliaNid@p|kp@pbofc@ifdeqN,(4( X7 +fdeqN1l}lql 3efkN2l,T UliaN/|a|rhN2|jprkd 2|kpN2m|~flrp_2j|iiV|mNp|kp@pbofcNW5 ,le|kqv.3 ,bafrjN2q|}ib_2i|mNjlk|~lNYivjb@+fdeqNcwwvp@alpmvN2~obbk2|kpN~il~hECDIN1l}lql Vlkabkpba Ulia (q|if~NTof|iN*- ,le|kqv ,bafrjN,lqlv|+,|or 6F jlklN[|kapbq VlkabkpbaN1l}lql (q|if~N[3V [|kaN223 4iqo| +fdeq (q|if~N223 5fbqk|jbpb 1lj|kN-lql -|phe To|}f~ 4( UliaN~ekcwue@jbafrjN2-rjVlka@F3N~bkqrov@dlqef~@obdri|oNabc|riq_ol}lql@ifdeqN-lql 2|kp ,v|kj|oN,v|kj|o 2|kd|j ,-NTmmib Vlilo XjlgfNtb|qeboclkq1bdN2|jprkd,|i|v|i|j1bdri|oN|of|iNWolfa 2bofc UliaNV/lF /1V UliaN,( +T-3(-ZN2|jprkd*lob|k@1bdri|oNqbpqGH 1bdri|oNpmfofq_qfjbNWbs|k|d|of 2|kd|j ,-N2~obbk2bofcN1l}lqlN~ropfsb@clkq@qvmbN23[bfqf_sfslN~ekcwueN2|jprkd Vil~hYlkq FTN1l}lql Vlkabkpba 1bdri|oNp|jprkd@kbl@krjF1NZ) ,le|kqv.3 ,bafrjNVeriel -brb +l~hNol}lql@krjF+Nebisb@kbrb@riqo|+fdeqbuqbkabaN2|jprkd.ofv|1bdri|oN2|jprkd2|kp-rj@G+s +fdeqN,8fkd[bf_DKCFC_VE@UliaNWY/2e|l-s6H@ZUN1l}lql Ui|~hNebisb@kbrb@riqo|ifdeqNdj_ufebfN+Zil~hG +fdeq_CKCHNZrg|o|qf 2|kd|j ,-N,|i|v|i|j 2|kd|j ,- UliaNol}lql@krjF1N237febf_sfslNY99erk8r|k_ZUDKCFCNklql@p|kp@~gh@ifdeqN~lilolpN-lql 2|kp ZrojrhefN-lql 2|kp 2vj}lipN1l}lql +fdeq (q|if~N+lefq 3|jfiN~ropfsbNabc|riq_ol}lqlNUe|pefq|Vljmibu2|kp UliaN+Z_-rj}bo_1l}lql 3efkNjlklpm|~ba@tfqelrq@pbofcpN[bisbqf~| +3 FH 3efkNp|jprkd@p|kp@krjF+5NW(-/olN)ljlie|ofNp|kp@pbofc@ifdeqNebisb@kbrb@}i|~hN+lefq Ubkd|ifN,v|kj|o 2|kd|j 9|tdvfNWolfa 2bofc (q|if~N1l}lql Ulia (q|if~N-|krjZlqef~N2lkv ,l}fib 4W Zlqef~ 1bdri|oNZblodf| Ulia (q|if~Np|jprkd@p|kp@krjF+sNvrklp@qefkNp|jprkd@kbl@krjF3@~lkaN-lql 2|kp ,v|kj|o 4( UliaNidpbofcNY98lr[bf@1@ZUDKCFCN+lefq /rkg|}fN}|phbosfiibNp|jprkd@p|kp@krjG3sNp|jprkd@p|kp@qefkN+Z XjlgfNTkg|if-bt+fmfN2|jprkd2|kp-rj@G3 3efkN2|jprkd*lob|k@UliaNjfrfbu@ifdeqN-lql 2|kp *|kk|a|N1l}lql -loj|i (q|if~NZblodf| (q|if~Np|kp@pbofc@jbafrjN2j|oq 9|tdvfN1l}lql Vlkabkpba (q|if~N-lql 2|kp *|kk|a| 4( UliaNWY/ 2~ 2|kp [brbFC_DCFN+Z_-rj}bo_1l}lql UliaN/|a|rh UllhNu@ppq@~lkabkpbaN2rkpefkb@4~ebkN1l}lql Ui|~h (q|if~N1fkdl Vlilo XjlgfNWbs|k|d|of .32N2j|oq 9|tdvf /olNY9+|k3fkd[bf@,@ZU*NTkaolfaVil~h@+|odb 1bdri|oNmolmloqflk|iiv@pm|~ba@tfqelrq@pbofcpNVrqfsb ,lklNqfjbpN+Z 2j|oq_[ qbpq UliaNW(-/ol@+fdeqNp|kp@pbofc@}i|~hN+lefq Wbs|k|d|ofNmolmloqflk|iiv@pm|~ba@tfqe@pbofcpNp|jprkd@p|kp@krjF+N,8lrkd /1V ,bafrjNWYZlqef~/6H@U(ZH[*@2.-8Ne|kp@p|kp@jbafrjN223 [b|svN+Z@Y99erk8r|k@,CE@5EAEN,v|kj|o4-bt 1bdri|oN-lql -|phe To|}f~ UliaN2|jprkdZrg|o|qef1bdri|oNc|kq|pvNebisb@kbrb@ifdeqN[bisbqf~| -brb .32 UliaNklql@p|kp@~gh@}liaNp|jprkd@p|kp@krjF1N+fkapbv 2|jprkdNp|jprkd@p|kp@krjF3N2~obbk2bofc,lklNX3orjm ,v|kj|o_96Nebisb@kbrb@qefkbuqbkabaN-lql -|phe To|}f~N+Z_Zrg|o|qfN2j|oq_,lklpm|~baN3|jfi 2|kd|j ,-N+Z Xjlgf -lkT,XN1l}lql Vlkabkpba +fdeq (q|if~Ndj_gfkdh|fNY9+|k3fkd*|k[bf_ZUDKCFCNidqo|sbiNm|i|qfklNZblodf| UliaNWolfa 2|kpN+Z_/rkg|}fN2j|oqZlqef~ UliaN2|jprkd 2|kp 3efkN223 Vlkabkpba UliaNVljf~p_-|ooltN~lrofboN.ofv| 2|kd|j ,-Nebisb@kbrb@ifdeqbuqbkabaNY9+|k3fkd[bf@1@ZUDKCFCNT1 Vovpq|iebf[*2V2 WUNpbofcN13628rb1lraZlZCsD@1bdri|oN,f|l6r_mobsNY98D*N+Z_-rj}bo_1l}lql 1bdri|oNTkaolfaVil~hN2l,T 1bdri|oN[80f[bf@GC2 +fdequNid@p|kp@pbofcNW|k~fkd 2~ofmq UliaNabc|riqNpb~@ol}[url=mailto:lql@ifdeqNVlilo.24]lql@ifdeqNVlilo.24[/url](@1bdri|oNqbpq 1bdri|oN3|jfi 2|kd|j ,- UliaNY98fkdUf7fkd2er@2DIN1l}lql-rjF+ +fdeqNjlklpm|~ba@tfqe@pbofcpNp|jprkd@p|kp@krjFHNVlli g|wwN2|jprkd-bl-rj@F+N237fkdh|fN2~obbk2|kp,lklNWY/6|6|6H@ZUN2|jprkd2|kp-rj@F+ +fdeqNU|kdi| 2|kd|j ,-NZrojrhef 2|kd|j ,-N2XV1l}lql+fdeqNevclkuo|fkN,8fkd[bfZUDKCFCV@UliaNp|jprkd@p|kp@ifdeqN[bisbqf~| +3 IH ,bafrjNWolfa 2|kp Y|ii}|~hN1l}lql 3bpqD UliaN-lql 2|kp ,v|kj|o UliaNp|kp@pbofc@~lkabkpba@~rpqljN2|jprkd-bl-rj@F3N2|jprkd 2|kp -rjFHNjlklpm|~bN3+ ,le|kqv ,bafrjNebisb@kbrb@jbafrjN+3[829*N1l}lql Vlkabkpba ~rpqljb UliaN,v|kj|oFNWolfa 2|kp Wbs|k|d|ofN2e|l-s_mobsNp|jprkd@kbl@krjF+NY9+|k3fkd[bf@X+@ZU*NvrklpNp|jprkd@kbl@krjF3N3fjbp -bt 1lj|kNebisb@kbrb@}liaNklql@p|kp@~gh@obdri|oN-lql 2|kp Zrojrhef 4( UliaNW(-/ol@}i|~hNY9+|k3fkd[bf@X+@ZUDKCFCN223 5fbqk|jbpb ,bafrjN1l}lql Vlkabkpba +fdeqN223 5fbqk|jbpb UliaNT1 W)@**NWolfa 2|kp 2X,VN-lql 2|kp ,v|kj|o 4(NVljfkd 2llkN,8rmmv /1V ,bafrjN1lpbj|ovN+lefq Zrg|o|qfN1l}lql Vlkabkpba ~rpqlj UliaNY9+|k3fkd[bf2@1@ZUN[bisbqf~| -brb .32N*|fqf_mobsN1l}lql@UfdVil~hNY98U*2)6N[|kapbq Vlkabkpba UliaN2|jprkdZblodf|kNW|k~fkd 2~ofmqNp|kp@pbofc@~lkabkpbaNe|kp@p|kp@qefkN2|jprkd2|kp-rj@G3s 3efkN+lefq .af|NUe|pefq|Vljmibu2|kp`y~efq~suav`qtt4uxqhyad`9ufAdywy~q|Gd|`sa~~usfya~`y~s|gtu`vdq}u`dufgd~ qMr]N`sxy|tdu~`2turgwwud`\'~g||\' ye ~af q~ arzusf`vg~s`$_h<Fb`dvdajhs)hccdm`esduu~K`@g}rud`vq|eu`eds7|u}u~f`d$1qd6XWqnvrdqXk~rrhbA6XWqnvrdq.drr~fdXdmsdq`gd|N#tuvqg|f#geudtqfqO`eufDucguef:uqtud`y}badf`}ageuAhud`}ufq`?ej}|TJ?>:FFB`v@p:zm3tww3z}xAzzwM@zrzb:~p`~qfyhu`wq}}q`wufFy}ula~uAvveuf`tqfqeSfe`__a~|aqt__`g5+.h{uan@-U6`zresxu}u,UUcgugu_xqe_}ueeqwu`eufFy}u`yfu}`?76;G?_8>A3F`_r|q~{`v|aqf`#W)u`ujfu~te`v__dpmo}tcp}_~n}t{a_qy`Ducguef`?ej}|XTEudhudJ?>:FFBTYTV`s|yu~f;~vad}qfya~`fxu~`?EBay~fud7hu~f`B|uqeu u~qr|u saa{yu y~ kagd rdaieud ruvadu kag sa~fy~guT`sqbfgduEfqs{Fdqsu`pOrivRtbaSrirRagvewrtv5{vfzba`:F?>Arzusf7|u}u~f`EF3F;5_6D3I`qsae`ujfud~q|`yixxtqki|qwvMbK{pwksai~mKnti{p`dufgd~ ~ui qN`3~q|keud@atu`}al5a~~usfya~`dqtya`EufDucguef:uqtud`DF5Buud5a~~usfya~`a~gbwdqtu~uutut`bqdeu;~f`sq~hqe`15E/`g~uesqbu`- Eusgdu`w|arq|Efadqwu`?ej}|XTJ?>:FFB`p[vr}+zuvb7[vr}+zuvb1g~2 Jtgziv- Lbageb} 1<;6szg2`?ysdaeavfTJ?>:FFBTWTV`sqfsx`Budvad}q~suAreudhud`wuf5a~fujf`tuvqg|fBduhu~fut`avveufFab`sa~fqy~e`tqfq,`$r_b|qfvad}`xffbe,UU`:;9:_;@F`arzusfEfadu@q}ue`fxye`skw<Q`CC4daieud`Ahuddytu?y}uFkbu`ljzcze~ld`iytfx`}ageu?ahu`sxqd`|>jg?43tl4xl_<508<,_`rweag~t`y7wd+xxmizivkm`baeyfya~`sqeu`b6lzqfE[fufdujpo`fagsxu~t`duvduex`$r}8VqJL|D}|HkG:<`bdab`|qef;~tujAv`sq||rqs{`~g||`G~u~s|aeut efdy~wT`t@dvpxCvzrQ@dvpxCvzr`rD~v~f`wuf3ffdyr>asqfya~`<EA@`~atuHq|gu`9q}ubqt`rufq`__q~sxad__`avveuf>uvf`{c\\yF\\Ctgzo|k iujk\\]\\yFe`bqdeu`tqfq`$_vd`bqs{qwu`daie`ArzusfT;~zusfutEsdybfTuhq|gqfu`abu~ud`}ageugb`exu~zyq~`turgwwud`ufxud~uf`$_s6da`F7?BAD3DK`mmyvxh}lyh`dub|qsu5xy|t`BAEF`~g};fu}e`sqbfgdu`tasg}u~fSvdqw}u~f`va~f`vydef5xy|t`vda}5xqd5atu`iur{yf;~tujut64`Bay~fud7hu~f`iur{yfDucguef8y|uEkefu}`sxqd3f`tuesdybfya~`pfcz_ybb|vu5~bmJaz~rgzba(greg)z~v5~bmRauvkvuMK5~bm[vdhvfgJaz~rgzbaOer~v`wuf4qffudk`{;?+zrJ;?+zr`qrea|gfu`dueba~euFujf`saa{yu7~qr|ut`mdyjifuhayh8__di8__diMffydx,ynj8ye/yvNhemiyh`vy~q|`bdu|aqt`=ukraqdt`r|gufaafx`sq~su|4grr|u`ujusEsdybf`fdkmdufgd~ __vy|u~q}u-osqfsxNuOmo`hqd sgd_u|u / fxye-`iyfx`x__bnkm{ran{_naju~j}n`efqfge`fa8yjut`tyeb|qk`egrefd`M~g||] ye ~af q~ arzusf`jPzkh+SU=+SU`L*J:<<KTr}8VqJL|D}|HkG:<NO`euf;fu}`.U$W`|aqtut`Du}ahu7hu~f>yefu~ud`a~qgfasa}b|ufu`$r_sq||:q~t|ud` edv|j `bdafusfut`}qfsx`wafa`tdqi3ddqke`}utyq6uhysue`s|aeu`iurefadu`iur{yfDF5Buud5a~~usfya~`5ag~f`fujfUzqhqesdybf`qrefdqsf`budvad}q~su`Efadqwu`w$ryyu$L$$vyqqo|L$$v}zL$$v}|lL$rnd$L$|okne/yno-v|okne1doma~on5x@rs}2|kwoL$}nd$L$aso$`|q~wgqwue`$_vr`euf>asq|6uesdybfya~`eagdsu`U,geud_va~fe`F=_@G?47D`esda||`$r_vufsxCgugu`.!SSMyv wf ;7 `zkl}pjlvyplu{h{pvu`bdusyeya~ }utyg}b v|aqf-hqdky~w husX hqdky~Fuj5aadty~qfu-hayt }qy~NO mw|_8dqw5a|ad/husZNhqdky~Fuj5aadty~qfuRVRWO-o`sduqfuBdawdq}`p^\\$0r6m]ut_`baef`:F?>7|u}u~f`fujfUxf}|`.!SS`arzusfEfadu`v}xzneO?plw=wlfp} 4S 0zya}zwOR`|y~{Bdawdq}`bdusyeya~`yu{~q{qjqtq|ckpivom`7~fyfk`p~fLevuvagzr}f`cds{|}6a7jfxI<y:3bWeHK=GYD8?Ci*;9vBA+Xrh>@zT)lJ4qE~gVF5(wk_ZLu[tmonp !#$%NOPQRS-/12M]^`g~yvad}Xv`zqhqesdybf,`p*L,vsNkg5htjvs`dub|qsuEfqfu`ha|qfy|u`sduqfu6qfq5xq~~u|`geu efdysf`adywy~q|Fqdwuf`u__ru~qr{f__N_ru~qr{f_@qmpq~;{pq`zqhqesdybf, haytNVO-`G~ujbusfut sxqdqsfud, `m"abfya~q|" , M m"Dfb6qfq5xq~~u|e" , fdguo ]o`G~fud}y~qfut }g|fy|y~u sa}}u~f`UF)3kFdjaIj9t`Egr}yf`fy}u`dueba~eu`dq~wu?y~`fdy}`sxus{raj`L*J:z`sa~ef`E7>75F hq|gu 8DA? 7{sB_f I:7D7 ~q}u/1`8|aqfYX3ddqk`9ufDueba~eu:uqtud`avveufJ`s#dP^b#:#d{|d{}d{6d{ad{7d{jd{fd{xd{Id{<d{yd{:d{gd|fdE6`duvuddud`k*RT<*z|Qljd`~atu@q}u`wufDueba~eu:uqtud`.}ufq\\eQxffbSucgyh/M"\']1duvduexM"\']1\\e`ek~sxda~ylut`ujbadf`vy|u~q}u`abu~6qfqrqeu`b__ds:fcC__hZs:fc`u~qr|uHudfuj3ffdyr3ddqk`xffb,UU`xuywxf`eqvqdy`E7@6`zresxu}u,UU`bnp{wjtjcjmjuzdibohf`G~u~s|aeut duwg|qd ujbdueeya~T`iur{yfBudeyefu~fEfadqwu`ww}4snnox`___fe___`s|qee`dg~fy}u`}al;~tujut64`bqdu~f7|u}u~f`?yeey~w sqfsxUvy~q||k r|as{e`sK#d6343E3~3V3F3(WJe.e0HiD-8~8$8%8 ?c?*?;?9CcCxCIC:C3CbC?CrChC^C&CPihi)ili~igiL*s*{*a*e*H*K*T;c;d;s;|;};6;?;C;_;Z;L9C9*9;999h9>9S9)9l959(929$vjv^v&vPvNvOvoB}AzASA(AwAnA +w+_+Z+2+$+%+&+P+N+O+,+-X}X6XXXrrGrvr)rlr.r0hZhP>f>x>OzGzvzBSXSrS2S%S&S/S.)g)_)ZlvJlJJJgJ_JZJLJuJ[JtJpJ 4c4d4s4S4)4l4J44454w4&(p$a$7$h$>%W%B%A%+%k&mN;N9N>N@NzQyQ:/|/}/2/$/%/0/T/1/U/,.e0tT=TGTiT*T+TXTr1j1f1x1z141q1E1~1g,x,I,<,ym6mWmG#!#d{3d{bd{$d{%d{ d}gd~&d~P}v!}vT}v1}A3}Ab}rG}r?}r9}rw}rk}r_}rZ}rL}hL}hu}>h}z{}z|}zV}Sx}SI}S<}SW}Se}SH})J})4})q})E})~})g})V})F})2})/}).}lv}l]}J|}J}}Jx}JI}Jy}EX}Er}Eh}E>}E@}Ez}ES}E)}EJ}E47fC7e37eb7=b`qffdyrgfu husX qffdHudfuj-hqdky~w husX hqdky~Fuj5aadty~qfu-g~yvad} husX g~yvad}Avveuf-hayt }qy~NOmhqdky~Fuj5aadty~qfu/qffdHudfujQg~yvad}Avveuf-w|_Baeyfya~/husZNqffdHudfujRVRWO-o`raa|uq~`bgexEfqfu`du}ahu;fu}`\x00`sxqdqsfudEuf`kk{d{fame;{nwdmwl{`kyu|t`dufgd~`rqffudk`vad7qsx`y}b|u}u~fe`uhq|gqfu`|y~u~a`?ej}|XTJ?>:FFBT(TV`F=_D79_7J`wufEgbbadfut7jfu~eya~e`mxebf|}d8xebf|}d}dze8xebf|}dcyju`dwrqNXZVRWWVR[YRVTZO`?ej}|XTJ?>:FFBTZTV`}al;fu}e`s|uqd;~fudhq|`fxdai`q/sq~tytqfu,`$_s{`3radf`sxus{ut`avveuf:uywxf`9ufHqdyqr|u`avveufIytfx`eu|usfut`|qkudJ`tu|ufu`Nuhq|gqfy~w \'~g||MV]\'O`efq~tq|a~u`esduu~`Duw7jb`s|yu~fK`sxqdwy~w`}ueeqwu`Eu~t`}y}uFkbue`wuf;fu}`Yzu3>uEeq(`sxda}u`va~f8q}y|k`tuvqg|f`uhu~f`wufG~yvad}>asqfya~`NfxyeO-`G~ujbusfut fa{u~ `fdq~eqsfya~`adyu~fqfya~`wufEagdsue`g~tuvy~ut`M~qfyhu satu]`CFB_7B7_:AA=`vufsx`hytua`:F?>3~sxad7|u}u~f`bdbqudib5fgsftiCdbqudib_sfgsftiCdifdl/phjoCefdszquZbmmcbdl`iur{yf5a~~usfya~`iyvy`.7?476 yt/`6A?Bqdeud`;||uwq| ~ui|y~u qvfud 2fxdai`avveufG~yvad}`{uk6ai~`dufgd~Hq|gu`|a~w`sxqdwy~wFy}u`AB7@`etgqg~gjgrwaf}lec`\\rM^0]P0NM\\e\\E]P1O.\\U`}ageuAgf`_fe_`sa~fy~gu`iurw|`}ageuGb`u~g}udqfu6uhysue`egrefdy~w`esduu~J`g0a{h.h{uan@0a{h.h{uan:pi; S}pera6 Ukjpnkh :ED?|ep;`|uhu|`.tyh0;7*.Utyh0`$r_eufgb`vy||Efk|u`sq~tytqfu`- bqfx/U`xffb`eiyfsx`s|yu~fJ`puezive`rkfu`u~qr|utB|gwy~`dq~wu?qj`a~ruvadug~|aqt`u~saty~w`bqdu~f`}ageutai~`\\\\`efqfys`}ageuagf`wufExqtudBdusyeya~8ad}qf`hudfuj3ffdyrBay~fud`z~likyp}lyJl}hs|h{l`3ttEuqdsxBdahytud`efqfgeFujf`dD#d,s{s77+7rjMj]fIfW:BW)Wle_eQe/emeoHxHC=x=T=1=o8g8&?y?:?)?l?1CdCWC9CvCVCFCmCoiii*i9iviAi+iO*%*^*1;j;D;8;N;O9W9e9i9L9u9,vfv9vvvAvXvrvzvSvnAWAlAJAFA5+kXdX{X|rarzrShJ>Q>/@p@!@$@&@P@O@.zxz<z3zbzYzDzAz)z2z$S<J!4f4y4:4(q.V%Fm%g%w&o1(1w#X#dd:ddbddeds?d|Cd|zd}od6cd6yd6id6;d6vd6PdaAda+d@udS/dExdEIdE!dE2dLgslJsJ9}yq}9M}9]}+-}+m}E26]G7f?7fL7f[7ft7f!7f2`pJxLbageb}7JxLbageb}`?76;G?_;@F`uddad`|rta/niijs`q|bxq`{ukGb`nwxk|vxbdi|dc`exqtudEagdsu`cds{|}6a7jfxI<y:3bWeHK=GYD8?Ci*;9vBA+Xrh>@zS)lJ4qE~gVF5(wk_ZLu[tp!2$%^&PNOQ/.0T1U,-moM]n `bqeeiadt`~ujfEyr|y~w`$_fe`dq~ta}`sduqfuAvvud`3DEueeya~R3gtyaFdqs{>yefR4uvadu;~efq||Bda}bf7hu~fTbdafafkbuT=7KGBR4|ar6ai~|aqt5q||rqs{R563F3Eusfya~TbdafafkbuTdu}ahuR5EE5xqdeufDg|uR5EEBdy}yfyhuHq|guT5EE_H:R5q~hqeDu~tudy~w5a~fujfX6TbdafafkbuTiur{yf9uf;}qwu6qfq:6R5|ys{6qfqR5|aeu7hu~fTbdafafkbuTy~yf5|aeu7hu~fR5a}ba~u~feTy~fudvqsueT;5a}uf?qd{e7jfu~eya~R6uhysuAdyu~fqfya~7hu~fR8g~sfya~TbdafafkbuTry~tR9ufBudvFuefeR:F?>6asg}u~fTbdafafkbuTsduqfuFagsx>yefR:F?>8ad}7|u}u~fTbdafafkbuTducguef3gfasa}b|ufuR:F?>8dq}uEuf7|u}u~fTbdafafkbuTxqeBay~fud5qbfgduR:F?>8dq}uEuf7|u}u~fTbdafafkbuTiur{yfDucguef8g||Esduu~R;~f|R?FF_I=EufFujfEylu;~tujR?utyq5a~fda||udR?utyq7~sdkbfut7hu~fR@afyvysqfya~RArzusfTbdafafkbuT__tuvy~uEuffud__RArzusfTeuq|RArzusfTeufBdafafkbuAvRAvvesduu~5q~hqeDu~tudy~w5a~fujfX6RBqfxX6TbdafafkbuTqttBqfxRBqk}u~fDueba~euRBudvad}q~suBqy~fFy}y~wRBdueu~fqfya~5a~~usfya~5|aeu7hu~fRDuqtud?atu3dfys|uBqwuREH99dqbxyse7|u}u~fTbdafafkbuT}alDucguefBay~fud>as{REH9Bqffud~7|u}u~fTEH9_G@;F_FKB7_A4<75F4AG@6;@94AJREsduu~Adyu~fqfya~REawag>awy~Gfy|eREagdsu4gvvudREagdsu4gvvudTbdafafkbuTsxq~wuFkbuREbuusxEk~fxueyeGffudq~suRFujfFdqs{>yefTbdafafkbuTwufFdqs{4k;tRG5Iur7jfRIur=yf8|qweR_IJ<ER__$_cyxaaY(V_$__R__vyduvaj__R__{eqr5ee5ag~fR__abudqR__eawag_eusgdu_y~bgfR_tagr|uWW_Rsxda}uRsxda}uTqbbT;~efq||EfqfuRsxda}uTseyRsa~ea|uRtuvqg|fEfqfgeRtasg}u~fTratkTa~}ageuu~fudRtasg}u~fTratkTa~bqwuRtasg}u~fTratkTefk|uTrqs{wdag~t4|u~t?atuRtasg}u~fTratkTefk|uT|y~u4duq{Rtasg}u~fTratkTefk|uT}y~IytfxRtasg}u~fTratkTefk|uT}eFujfEylu3tzgefRtasg}u~fTratkTefk|uTfujf3|yw~>qefRtasg}u~fTratkTjS}eSqssu|udqfad{ukRtasg}u~fTtuvqg|f5xqdeufRtasg}u~fTtasg}u~f7|u}u~fTa~dueyluRtasg}u~fTvy|u5duqfut6qfuRtasg}u~fT}e5qbe>as{Iqd~y~wAvvRtasg}u~fTa~}ageu}ahuRtasg}u~fTa~eu|usfya~sxq~wuRtasg}u~fTesda||y~w7|u}u~fTefk|uTva~fHqdyq~f@g}udysRtasg}u~fTeu|usfya~Rtasg}u~fTeu|usfya~Tfkbu6ufqy|Rujfud~q|Rujfud~q|T3tt8qhadyfuRujfud~q|T;eEuqdsxBdahytud;~efq||utRv|kv|ai_iq||bqbud_zeRwuf?qfsxut5EEDg|ueRwduu~fuqRye@atuIxyfuebqsuRzueya~Ra~uddadRa~}ueeqwuRa~abudqtufqsxuthyuisxq~wuRabu~6qfqrqeuRbqeeiadt_}q~qwud_u~qr|utRbudvad}q~suRexai?atq|6yq|awRfqardaieud_7hu~fRiuqfxud4dytwuRiur{yf3gtya5a~fujfTbdafafkbuTs|aeuRiur{yfDucguef8y|uEkefu}`avveufK`vy~q||k`p__~ggLevrgvOer~v5~ggLh~fgb~S(`rqeu`Budvad}q~suAreudhud7~fdk>yef`qffqsxExqtud`u~qr|u/fdgu`a~ysusq~tytqfu`fdkmdufgd~ __tyd~q}u-osqfsxNuOmo`;@E7DF AD D7B>357 ;@FA 7{sB_f N~q}uR hq|guO H3>G7EN1R 1O`ye@q@`?ageu`q~tdayt`{ukgb`6uhysuAdyu~fqfya~7hu~f`m             \"ysuEudhude\" , M                 m"gd|" , "efg~,efg~VWTeybbxa~uTsa}"oR m"gd|" , "efg~,efg~Tu{ywqT~uf"oR                 m"gd|" , "efg~,efg~Tvit~ufT~uf"oR m"gd|" , "efg~,efg~TytuqeybTsa}"oR                 m"gd|" , "efg~,efg~Tybfu|Tadw"oR m"gd|" , "efg~,efg~Tdyjfu|usa}Teu"oR                 m"gd|" , "efg~,efg~Tesx|g~tTtu"oR m"gd|" , "efg~,efg~T|Twaaw|uTsa},W+YVX"oR                 m"gd|" , "efg~,efg~WT|Twaaw|uTsa},W+YVX"oR m"gd|" , "efg~,efg~XT|Twaaw|uTsa},W+YVX"oR                 m"gd|" , "efg~,efg~YT|Twaaw|uTsa},W+YVX"oR m"gd|" , "efg~,efg~ZT|Twaaw|uTsa},W+YVX"o             ]         o`fxdaie`@q}u ujbusfut`q|udf`6uhysu?afya~7hu~f`sdutu~fyq|e`q~sxad`hudfujBae3ffdyr`>AI_8>A3F`prcc(traL}zt|5rcc(traObthfXhg5rcc(traTvlMbja5rcc(traTvl*c`qgtya`hqd egr}yf/vg~sfya~NOmvadNhqd f/sgd_u|u-f!//tasg}u~f&&N!fTfqw@q}unn\"vad}\"!//fTfqw@q}uTfa>aiud5qeuNOO-Of/fTbqdu~f7|u}u~f-f!//tasg}u~f&&fTegr}yfNOo-`qduq`W*bj \'3dyq|\'`ai~ud6asg}u~f`?ej}|XTEudhudJ?>:FFBT(TV`?ej}|XTEudhudJ?>:FFBT[TV`fuefe`?ej}|XTEudhudJ?>:FFBTZTV`9uf@ujfDuc;6`fujfqduq`tasg}u~f7|u}u~f`tuhysu;t`abfya~e`g~ysatu`ruxqhyad`tufqsx7hu~f`y~fudvqsu`vdq}ue`ujusgfuEc|`vy||Fujf`g~yvad}Avveuf`F=_@3?7`dM#7wjTIn<s3d3lbhbEWjWCeZe!e%eOe1e-HLH]=c=f=^=0GGG8GCG+GrG>GzGJD1D,8V858(8[8t828P8/CsC|C}C7i@iSi5iw*U*-*m*n9v9+v0v1v,vmB4BEAeAKA=ADA?AiA;AB+L+pr7rfrxryr3rWrHr=hph2h$h^hOhU>.>-@6@<z8z;zJzg)X)~)V)w)%)/)0lGJ4J~JVJk4a4j4x4<434=484i4q4F4$4^292B2p22%e%D%8%v%X%4^y^3NYN8N?N*NvNANSNqNENgO1Q6/6/7/^///-.c.d.6.a.30Z0[TYTCT;TAT0TM1S1JUo,s,{,f-T-U--m}mam<Mg]c]G]D#B#d}Bd}Jd}(d}2d>=d>YdzMdS?dEqdEF}>G}>r}>$}>o}@q}@(}@,}zs}zE}zg}Sy}Sb}SK}SY})>})l}l }Jd7W57W^7W]7e{7ez7e)`eu|v`ujbudy}u~fq|Siurw|`000/`9uf3||Dueba~eu:uqtude`u__?B>__6==9_<=B7473@`5D73F7 F34>7 ;8 @AF 7J;EFE 7{sB_f Nyt ;@F797D @AF @G>> BD;?3DK =7K 3GFA;@5D7?7@FR ~q}u F7JF @AF @G>>R hq|gu F7JF @AF @G>>R G@;CG7 N~q}uOO`- ujbydue/`ht8}`tyebqfsx7hu~f`6yebqfsx7hu~f`3DD3K_4G887D`rr*X{z`tagr|u`tg}b3||`\uFEFF`va~f>yef`vy||Dusf`8g~sfya~`efdy~wyvk`fa>aiud5qeu`eqhu`>AI_;@F`bqdeu8da}Efdy~w`fa9?FEfdy~w`}ageuahud`u|u}u~fe`a~uddad`k6|mfylagf67 snwj w K f{o Rwl{67I z{xm}}{jI j{lmjf f{o Rwl{67 ; w L ?>>Iu677`g~exyvf`J?>:ffbDucguef`qbbHudeya~`}e5dkbfa`NMVS+]mWRYoN\\TMVS+]mWRYoOmYon NNMVS+qSv]mWRZo,Om)R)oMVS+qSv]mWRZonNMVS+qSv]mWRZo,OmWR)o,nNMVS+qSv]mWRZo,OmWR(o,MVS+qSv]mWRZonNMVS+qSv]mWRZo,OmWR[oN,MVS+qSv]mWRZoOmWRXonNMVS+qSv]mWRZo,OmWRZoN,MVS+qSv]mWRZoOmWRYonNMVS+qSv]mWRZo,OmWRYoN,MVS+qSv]mWRZoOmWRZonNMVS+qSv]mWRZo,OmWRXoN,MVS+qSv]mWRZoOmWR[onMVS+qSv]mWRZo,NN,MVS+qSv]mWRZoOmWR(oOn,NN,MVS+qSv]mWRZoOmWR)on,On,,NvvvvN,VmWRZoOmVRWo,OmVRWoNNX[MVS[]nNXMVSZ]nWmVRWoMVS+]OmVRWoMVS+]O\\TOmYRYoNX[MVS[]nNXMVSZ]nWmVRWoMVS+]OmVRWoMVS+]OnNMVS+qSv]mWRZo,OmWRZo,NNX[MVS[]nNXMVSZ]nWmVRWoMVS+]OmVRWoMVS+]O\\TOmYRYoNX[MVS[]nNXMVSZ]nWmVRWoMVS+]OmVRWoMVS+]OO O`FD;3@9>7_EFD;B`lxvcc)}vekfd9_g}vekfd`eufEudhud6qfq`a~egssuee`biq_jefoujgjfs`xffbSucgyh`g~ujbusfut ~g}rud u~ty~wT`\r\n`iy}qj` xaef `fujf4qeu|y~u`bduhu~f6uvqg|f`cexit(ullscreen`:;9:_8>A3F`gfvS*`g~|aqt`sa}by|uExqtud`G~ujbusfut fa{u~, `]0.y0.Uy0.!Mu~tyv]SS0`}ageu6ai~`ahuddytu?y}uFkbu`agfud:F?>`8EE43`xaef`yfu}Eylu`geuBdawdq}`wn|sbo|Mobkvak~o`uesqbu`gsa|gepreoe|ehepu}d{jca`H7DF7J_E:367D`?utyqEfduq}Fdqs{`Abu~`fagsxue`d#!#s #ddd7dvsys+srs%s&a-an7j7Y7Cj1jmfcf{fyf3fHfhf@xBx+IM<}y^ym:;:z:U3pbdbabjbwW7W4ewH6H7H*HZKcK =+=%Dm848T8n?Y?C?B?@?q?^?P?0?m?]CACXCOCTCnieiKi?i%iP*|*6*G*;*v*A*X*_*L*2*P*/;[;^;.979f939K9D9t9!vIvbvKvGvDvCv4vEvFvpBgB_BLB[BpB]B A7AfAy+d+7+f+I+y+++r+4+E+FX>X4XEXgXFX/X0r{r%rOr1hahxhBh+h)hEh(>D>N> @}@m@]@ z}zazjzez=zrzzS0SoS])9)L)tJsJ)J-Jn4{464G4D4*4z4OqKq9qQqUEUE]~p~&g[g^VVV5VkVLV2V&VOV.F?FiF9FAF$F^FNF/F,FMF 5s535W5Q5.515-(Zw7wGw>kAkqp)p4p5p!!d!a!,2y282C2;2J2t2T$6$K$v$A$X$F%:^A&v&z&-P,NHNNOIO:OeO;ONQaQ<Q&/{0pTKThTl1I1@UqUm,+,r,E,omXM~]8#d]#dc+dchdc)dc4dcodcndd{dd6dd<ddKddgdd5dsbdsedsDds;dsvdsAds@dsldsqdsgdswdsudsOds1ds,dsmd{cd|Zd|td6{d6Id6Wd6=d6Ad6rd6>d6~d6Fd6wd6[d62dX~dradrjdr(drkdrNdrQdr]dhcd>xd>hd>.d>nd@gd@TdzxdzKdz?dzidzAdzXdzSdzldzgdzFdzZdzudz$dz^dz/dz0dzmdE(dEZdEPd~$d~Qd~.d~TdgTdgUdgmdVcdV>dV)dFqdF2d5cd5kd5N}:H}C?}i5}9(}9Z}9Q}vW}vE}vV}vp}v,}B3}A(}At}A2}+1}r3}r=}rY}r8}rC}r;}rv}r(}rM}h4}h[}>=}@H}@4}@_}@U}S })h})t})!})$})Q7|H7a57ak7787797jq7jn7f|7fb7fK7fi7fr7f>7fV7f57f_7f%7x]7I;73X73w7b*7bv7b]7Wr7WE7e07e,7em7Kh7K.7=I7=e7=)7=w7G(7GZ7Gp7G$7GN7G/7GU7Gm7GM`y}qwu`N~uqd \'TTT ~g||MV]TTT\'O`|qkudK`dueba~euJ?>`y~eudf4uvadu`eudhud6qfq`?ej}|YTJ?>:FFB`epkmavB2c}j0j}wcp [F Wmlrpmj`y 9:<M`?ysdaeavfTJ?>:FFB`rduq{`dueuf`ye8y~yfu`o)zcu}ksjwP~sgz8)zcu}ksjwP~sgz`ai~ud7|u}u~f`}e;~tujut64`wuf3||Dueba~eu:uqtude`qradf`3tt7hu~f>yefu~ud`{uktai~`fagsx}ahu`sa}b|ufu`wufBqdq}ufud`eu|usfS`s|uqd`qssu|udqfya~;~s|gty~w9dqhyfk`sduqfu4gvvud`;~vy~yfk`|y~{`A4<75F`}alDF5Buud5a~~usfya~`$_vW`$r_a~4dytwuDuqtk`a~|aqt`r-~qytre xs."qq)Wzy" r{pddxs."r{dxs+XUZUu)V*R*)qZRVVruRqq)WRUUppUUqsrtUq" hxsew."Uai" wtxvwe."Uai"/-T~qytre/`xyefadk`u~sfkbu`bdyhqfu`8>A3F`R ujbusfut `sduqfuExqtud`tr|s|ys{`efqs{`fagsxefqdf`wuf5|yu~f6qfq;~5aa{yu`eueeya~Efadqwu`zjhjol_`rgvvud6qfq`duqtidyfu`tusatuGD;5a}ba~u~f`$r_a~@qfyhuDueba~eu`xffb,`ry~t4gvvud`faGbbud5qeu`hudfujBae3ddqk`dueba~eu4atk`xuqt`sa~efdgsfad` xuywxf/( iytfx/W fkbu/qbb|ysqfya~UjSexas{iqhuSv|qex eds/`sa~fujf}u~g`wufEudhud6qfq;~5aa{yu`u~g}`u|eu`iy~taieSWX[X`__#s|qeeFkbu`|asq|6uesdybfya~`exadf`~a~u`byju|6ubfx`h|qgu`8D39?7@F_E:367D`8y|uDuqtud`_6;H`.ebq~ efk|u/"va~fSvq}y|k,}}||yy-va~fSeylu,WWZbj"0}}}}}}}}}}}||yyy.Uebq~0`ujsubf`:F?>7}rut7|u}u~f`$_KIFG`euf5|yu~f6qfq`wuf7jfu~eya~');
_$UH = _$ev
var $_oi = 1732584193;
var $_po = -271733879;
var $_sb = -1732584194;
var $_xn = 271733878;
function f(e) {
        var t, n, i = "0123456789abcdef", a = "";
        for (n = 0; n < e[_$UH[108]]; n += 1)
                t = e[_$UH[15]](n),
                a += i.charAt(t >>> 4 & 15) + i.charAt(15 & t);
        return a
}

function o(e, t, n, a, r, o, s) {
        return i(t ^ n ^ a, e, t, r, o, s)
}
        
function c(e) {
        var t, n = "", i = 32 * e["length"];
        for (t = 0; t < i; t += 8)
                n += String["fromCharCode"](e[t >> 5] >>> t % 32 & 255);
        return n
}

function n(e, t) {
        return e << t | e >>> 32 - t
}

function s(e, t, n, a, r, o, s) {
        return i(n ^ (t | ~a), e, t, r, o, s)
}
        
function r(e, t, n, a, r, o, s) {
        return i(t & a | n & ~a, e, t, r, o, s)
}
        
function t(e, t) {
        var n = (65535 & e) + (65535 & t);
        return (e >> 16) + (t >> 16) + (n >> 16) << 16 | 65535 & n
}
        
function i(e, i, a, r, o, s) {
        return t(n(t(t(i, e), t(r, s)), o), a)
}

function a(e, t, n, a, r, o, s) {
        return i(t & n | ~t & a, e, t, r, o, s)
}

function l(e, n) {
        e[n >> 5] |= 128 << n % 32,
        e[14 + (n + 64 >>> 9 << 4)] = n;
                var $_XML = 16
                op = 26
                var b64pad = 1;
        var i, l, c, d, u, h = $_oi, f = $_po, p = $_sb, m = $_xn;
        try {
            if (_$8K['_$6_']) {} else {
                _$8K['_$6_'] = 8821003647
            }
        } catch (e) {
            _$8K['_$6_'] = 37885443
        }
        for (i = 0; i < e[_$UH[108]]; i += $_XML)
            l = h,
            c = f,
            d = p,
            u = m,
            h = a(h, f, p, m, e[i], 7, 513548),
            m = a(m, h, f, p, e[i + 1], 12, _$8K['_$6_']),
            p = a(p, m, h, f, e[i + 2], 17, 606105819),
            f = a(f, p, m, h, e[i + 3], 22, -1044525330),
            h = a(h, f, p, m, e[i + 4], 7, -176418897),
            m = a(m, h, f, p, e[i + 5], 12, 1200080426),
            p = a(p, m, h, f, e[i + 6], 17, -1473231341),
            f = a(f, p, m, h, e[i + 7], 22, -45705983),
            h = a(h, f, p, m, e[i + 8], 7, 1770035416),
            m = a(m, h, f, p, e[i + 9], 12, -1958414417),
            p = a(p, m, h, f, e[i + 10], 17, -42063),
            f = a(f, p, m, h, e[i + 11], 22, -1990404162),
            h = a(h, f, p, m, e[i + 12], 7, 1804603682),
            m = a(m, h, f, p, e[i + 13], 12, -40341101),
            p = a(p, m, h, f, e[i + 14], 17, -1502882290),
            f = a(f, p, m, h, e[i + 15], 22, 1236535329),
            h = r(h, f, p, m, e[i + 1], 5, -165796510),
            m = r(m, h, f, p, e[i + 6], 9, -1069501632),
            p = r(p, m, h, f, e[i + 11], 14, 643717713),
            f = r(f, p, m, h, e[i], 20, -373897302),
            h = r(h, f, p, m, e[i + 5], 5, -701558691),
            m = r(m, h, f, p, e[i + 10], 9, 38016083),
            p = r(p, m, h, f, e[i + 15], 14, -172015004),
            f = r(f, p, m, h, e[i + 4], 20, 461512024),
            h = r(h, f, p, m, e[i + 9], 5, 568446438),
            m = r(m, h, f, p, e[i + 14], 9, -1019783690),
            p = r(p, m, h, f, e[i + 3], 14, -187363961),
            f = r(f, p, m, h, e[i + 8], 20, 1163531501),
            h = r(h, f, p, m, e[i + 13], 5, -1554681467),
            m = r(m, h, f, p, e[i + 2], 9, -51403784),
            p = r(p, m, h, f, e[i + 7], 14, 1735328473),
            f = r(f, p, m, h, e[i + 12], 20, -1926607734),
            h = o(h, f, p, m, e[i + 5], 4, -37824558),
            m = o(m, h, f, p, e[i + 8], 11, -2022574463),
            p = o(p, m, h, f, e[i + 11], 16, 1839030562),
            f = o(f, p, m, h, e[i + 14], 23, -35309556),
            h = o(h, f, p, m, e[i + 1], 4, -1530992060 * (b64pad)),
            m = o(m, h, f, p, e[i + 4], 11, 1272893353),
            p = o(p, m, h, f, e[i + 7], 16, -155497632),
            f = o(f, p, m, h, e[i + 10], 23, -1094730640),
            h = o(h, f, p, m, e[i + 13], 4, 681279174),
            m = o(m, h, f, p, e[i], 11, -358537222),
            p = o(p, m, h, f, e[i + 3], 16, -722521979),
            f = o(f, p, m, h, e[i + 6], 23, 760291289),
            h = o(h, f, p, m, e[i + 9], 4, -64036887),
            m = o(m, h, f, p, e[i + 12], 11, -421815835),
            p = o(p, m, h, f, e[i + 15], 16, 530742520),
            f = o(f, p, m, h, e[i + 2], 23, -995338651),
            h = s(h, f, p, m, e[i], 6, -198630844),
            m = s(m, h, f, p, e[i + 7], 10, 1126891415),
            p = s(p, m, h, f, e[i + 14], 15, -1416354905),
            f = s(f, p, m, h, e[i + 5], 21, -57434055),
            h = s(h, f, p, m, e[i + 12], 6, 1700485571),
            m = s(m, h, f, p, e[i + 3], 10, -1894746606),
            p = s(p, m, h, f, e[i + 10], 15, -105181523),
            f = s(f, p, m, h, e[i + 1], 21, -2054922799),
            h = s(h, f, p, m, e[i + 8], 6, 1873313359),
            m = s(m, h, f, p, e[i + 15], 10, -30611744),
            p = s(p, m, h, f, e[i + 6], 15, -1560198380),
            f = s(f, p, m, h, e[i + 13], 21, 1309151649),
            h = s(h, f, p, m, e[i + 4], 6, -145523070),
            m = s(m, h, f, p, e[i + 11], 10, -1120210379),
            p = s(p, m, h, f, e[i + 2], 15, 718787259),
            f = s(f, p, m, h, e[i + 9], 21, -343485441),
            h = t(h, l),
            f = t(f, c),
            p = t(p, d),
            m = t(m, u);
        return [h, f, p, m]
    }

function d(e) {
        var t, n = [];
        for (n[(e["length"] >> 2) - 1] = void 0,
        t = 0; t < n["length"]; t += 1)
                n[t] = 0;
        var i = 8 * e["length"];
        for (t = 0; t < i; t += 8)
                n[t >> 5] |= (255 & e["charCodeAt"](t / 8)) << t % 32;
        return n
}

function u(e) {
        return c(l(d(e), 8 * e["length"]))
}

function p(e) {
        return unescape(encodeURIComponent(e))
}

function m(e) {
        return u(p(e))
}

function g(e) {
        return f(m(e))
}
var mwqqppz = process.argv[2];
console.log(g(mwqqppz));



[JavaScript] 纯文本查看 复制代码
var _$8K = {};

var _$ev = [], _$Uy = String.fromCharCode;
function _$HY(_$5X) {
        var _$HY = _$Uy(96);
        _$ev = _$Ch(_$5X).split(_$HY)
}
function _$Ch(_$5X) {
        var _$HY = _$5X.length;
        var _$o4, _$_Z = new Array(_$HY - 1), _$KJ = _$5X.charCodeAt(0) - 97;
        for (var _$Q_ = 0, _$TO = 1; _$TO < _$HY; ++_$TO) {
                _$o4 = _$5X.charCodeAt(_$TO);
                if (_$o4 >= 40 && _$o4 < 92) {
                        _$o4 += _$KJ;
                        if (_$o4 >= 92)
                                _$o4 = _$o4 - 52
                } else if (_$o4 >= 97 && _$o4 < 127) {
                        _$o4 += _$KJ;
                        if (_$o4 >= 127)
                                _$o4 = _$o4 - 30
                }
                _$_Z[_$Q_++] = _$o4
        }
        return _$Uy.apply(null, _$_Z)
}
        
_$HY('o~q}u`euf3ffdyrgfu`fkbu`xduv`wuf3ffdyrgfu`qsfya~`sq||`efdy~w`bdafafkbu`e|ysu`$_vb~W`eb|ysu`qbb|k`3sfyhuJArzusf`dueg|f`sxqd5atu3f`rgffa~`eu~t`vad}`ratk`}ageu}ahu`xqeAi~Bdabudfk`xaef~q}u`|asqfya~`abu~`eb|yf`euf;~fudhq|`xffbe,`s|ys{`sa~sqf`}ufxat`faEfdy~w`~atuFkbu`adywy~`v|aad`badf`$_~t`:F?>9u~udys7|u}u~f`fqw@q}u`saa{yu`$_<C~x`exai?atq|6yq|aw`du}ahu5xy|t`{uk5atu`bqdu~f@atu`wufFy}u`duqtkEfqfu`ujus`bqfx~q}u`euqdsx`fuef`yvdq}u`eufFy}uagf`:F?>8ad}7|u}u~f`hyeyry|yfk`qbbu~t5xy|t`qtt7hu~f>yefu~ud`y~tujut64`esdybf`a~duqtkefqfusxq~wu`uhq|`y~~ud:F?>`hq|gu`7{sB`|asq|Efadqwu`a~egr}yf`arzusf`bdafasa|`sa~fu~f`s|a~u@atu`y~tujAv`qeeyw~`idyfu`tasg}u~f`du}ahu7hu~f>yefu~ud`dag~t`efk|u`$_hh5;`dub|qsu`vg~sfya~`?ysda?ueeu~wud`geud3wu~f`ixy|u`a~s|ys{`y~bgf`suy|`?qfx`xyttu~`fqdwuf`|aqt`}rezmkexsv`~g}rud`sduqfu7|u}u~f`wuf7|u}u~fe4kFqw@q}u`wuf7|u}u~f4k;t`qffqsx7hu~f`$_vxV`s|yu~f6qfq`egr}yf`fy}uEfq}b`va~fe`A~|k a~u hqdyqr|u tus|qdqfya~ q||aiut y~ vadTTy~ |aab`fdq~eyu~f`qdyfk`tyeqr|ut`fkbuav`sxqdeuf`egbud`|u~wfx`#v*X`?ej}|XTJ?>:FFBTYTV`fa6qfqGD>`asd_dtkfigDsddqqmujgnh`qbb|ysqfya~5qsxu`}g|fybqdfUvad}Stqfq`hqd wuf3ffdyrgfu/vg~sfya~N~q}uOmdufgd~ sgd_u|uTwuf3ffdyrgfuN~q}uO-o-`qffdyrgfue`Marzusf 3ddqk]`bgex@afyvysqfya~`hayt`F=_EFD;@9`VVVV`qffdHudfuj`bgr|ys`efabBdabqwqfya~`l_,zcze~ld_VQR_+zxfiyzi9_jzcze~ld9xvcc,zcze~ld`$_vV`xqex`su||g|qd`8EE44`qssu|udqfya~`fdq~evud5xq~~u|`~7hdo5od|hu`fdgu`sduqfuArzusfEfadu`?ej}|XTJ?>:FFBT[TV`du}ahu3ffdyrgfu`b|gwy~e`o__vf{jwf_wjs~ishw6__kwtvf{jwf_wjs~ishw6__gw~wb{ia_wjs~ishw6__xlvf{jwf_wjs~ishw6__vf{jwf_ibkfsddwv6__kwtvf{jwf_ibkfsddwv6__gw~wb{ia_ibkfsddwv6__xlvf{jwf_ibkfsddwv6__kwtvf{jwf_guf{dh_xibu6__kwtvf{jwf_guf{dh_xb`fdkmdufgd~ Niy~tai y~efq~suav Iy~taiO-osqfsxNuOmo`?ej}|XTEudhudJ?>:FFB`sa|ad6ubfx`fWY/ebisbqf~|N3f}bq|k ,|~efkb 4kfNVllig|wwN5boa|k|N[bisbqf~| -brb +3 /ol FH 3efkNq|elj|N+Z 2j|oq_[ qbpq 1bdri|oNW(-/ol@ifdeqN[bisbqf~| +3 GF +fdeq XuqbkabaN[bisb,_(kaf|N2XV1l}lql+fdeq UliaN.1 ,le|kqv 4kf~lab 1bdri|oNWolfa 2|kp 3e|fN*|kk|a| 2|kd|j ,-NWWV 4~ebkN~il~hECDI_sDADN2|jprkd*|kk|a|1bdri|oN,( +T-3(-Z UliaN2|jprkd2|kp-rjF+ +fdeqNsboa|k|N[bisbqf~|-brb3efkN2XVY|ii}|~hN2|jprkdXjlgfN3birdr 2|kd|j ,-NV|oolfp Zlqef~ 2VNYivjb +fdeq 1l}lql +fdeqN2l,T@Wfdfq +fdeqN2l,V 2|kp 1bdri|oN[87f8r|k)NppqNp|jprkd@p|kp@krjG3Ndj_jbkdjbkdN+lefq *|kk|a|Nqfjbp kbt olj|kNp|jprkd@p|kp@krjG+Npbofc@jlklpm|~bN2|jprkd2|kp-rj@F3 3efkNVlilo.24(@73efkNWolfa -|phe 2efcq TiqN2|jprkd3birdr1bdri|oNUbkd|if .32N,( +|k3fkd_ZU .rqpfab 82NY9,f|l6r_ZUDKCFCNebisb@kbrb@obdri|oN223 ,bafrjNVlrofbo -btN*ejbo ,lkarihfof UliaN[bisbqf~| +3 EF 4iqo| +fdeq XuqbkabaN[bisbqf~| +3 EH 4iqo| +fdeqN1l}lql ,bafrjNWolfa 2|kp UliaNdlravNp|kp@pbofc@~lkabkpba@ifdeqN2YfkaboNklql@p|kp@~gh@jbafrjNjfrfN,1l~hv /1V UliaNTkaolfaVil~h 1bdri|oN2|jprkd2|kp-rj@G+ +fdeqNp|kp@pbofc@qefkNT|/|kd8|boN~|pr|iNU- ,le|kqv.3 UliaNu@ppqN-lql2|kp,v|kj|o9|tdvfN[bisbqf~| +3 FF 3efk XuqbkabaNTpeibv2~ofmq,3 TiqN-lql 2|kp Wbs|k|d|of 4(N1l}lql Vlkabkpba UliaN1l}lql ,bafrj (q|if~NjfrfbuN-lql 2|kp Zrojrhef 4(N223 5fbqk|jbpb +fdeqN+Z_.ofv|Nev~lccbbNu@ppq@riqo|ifdeqNWY[[url=mailto:bfT6J@TNY9967U3.3_4kf]bfT6J@TNY9967U3.3_4kf[/url]~labNWbs|k|d|of 2|kd|j ,- UliaNp|kp@pbofc@jlklpm|~bN/|a|rh Ullh UliaN+Z@Y98fkdUf*|f2er@2DH@5EAEN+Z@Y98fkdUf*|f2er@2DH@5EAFN[bisbqf~|-brb+3 /ol FH 3eN,f~olplcq [fj|i|v|N2|jprkd2|kpY|ii}|~hN223 ,bafrj (q|if~NTkaolfaXjlgfN2|jprkd2|kp-rj@F1N(3V 2qlkb 2bofcNp|kp@pbofc@pj|ii~|mpNu@ppq@jbafrjN+Z_2fke|ibpbN1l}lql 3efk (q|if~N~bkqrov@dlqef~NVil~hlmf|N+rjfklrp_2|kpNYilofaf|k 2~ofmq TiqN-lql 2|kp Zrojrhef UliaN+3[829* UliaNZ2_3e|fN2|jprkd-bl-rj_F3_ENTo|}f~Ne|kp@p|kp@kloj|iN+lefq 3birdrN[80f[bf@HC2 +fdeqN+fkapbv clo 2|jprkdNT1 Vovpq|iebf WUN2|jprkd 2|kp ,bafrjNp|jprkd@p|kp@krjGHNe|kp@p|kp@}liaN+rjfklrp_2~ofmqN223 VlkabkpbaN2|jprkdWbs|k|d|of1bdri|oNTkg|i ,|i|v|i|j ,-N2|jprkd3e|f;qbpq<NY9+|k3fkd[bf@,@ZUDKCFCN[b}obt .32NZ2GH_To|};Tkaolfa.2<N2|jprkd 2|kp +fdeqNVel~l ~llhvNebisb@kbrb@qefkN/- ,le|kqv.3 ,bafrjN+Z@Y9*|3lkd@,DL@5EAGNWolfa 2bofcN2|jprkd2fke|i|1bdri|oNebisbqf~|N+Z@Y9*|3lkd@,DL@5EAEN-lql 2|kp Wbs|k|d|of 4( UliaN223 +fdeqNWY/XjlgfNtb|qeboclkqkbt 1bdri|oN1l}lql-rjF1NW(-/ol@jbafrjN2|jprkd 2|kp -rjHHN223 [b|sv (q|if~N+Zil~hG 1bdri|o_CKCHNZblodf|Nklql@p|kp@~ghN3birdr 2|kd|j ,- UliaN,(4( X7 -loj|iN[80f[bf@JH2 UliaN-lql2|kp,v|kj|o9|tdvf UliaNvrklpmol@}i|~hNebisb@kbrb@kloj|iN+rjfklrp_2bofcN3, ,le|kqv.3 -loj|iN2|jprkd2|kp-rj@F+s +fdeqN2|jprkd 2|kp -rjGHN2j|oqZlqef~ ,bafrjNdblodf|N~|pr|i@clkq@qvmbN2|jprkd 2|kp UliaNpj|ii@~|mfq|ipN,Yfk|k~b /1V UliaNY9+|k3fkd[bf_ZUDKCFCN2|jprkdTojbkf|kN1l}lql UliaN~bkqrov@dlqef~@}liaNu@ppq@eb|svN223 +fdeq (q|if~N3e|o+lkNu@ppq@ifdeqNWfk}li 1bdri|oN2|jprkdUbkd|if1bdri|oN*- ,le|kqv.32j|ii ,bafrjNevmrobN2|jprkd3|jfi1bdri|oN,|i|v|i|j 2|kd|j ,-N-lql 2|kp *|kk|a| 4(Nebisb@kbrbN[bisbqf~| +3 HH 1lj|kN-lql 2|kp *|kk|a| UliaN2|kmv|N2|jprkd/rkg|}f1bdri|oNp|jprkd@p|kp@krjG+sN+Z_*|kk|a|N2|jprkd 2|kp 1bdri|oN9|tdvf@.kbNWolfa 2bofc Ulia (q|if~NY9*T3)6N~lrofbo kbtN2|jprkdXjlgf1bdri|oN,(4( X7 UliaNTkaolfa XjlgfN-lql -|phe To|}f~ 4(N+VW VljNYrqro| ,bafrj U3N5fsl@buqo|~qNU|kdi| 2|kd|j ,- UliaNe|kp@p|kp@obdri|oN2-rj@F1N2-rj@F3Ne|kp@p|kpN223 4iqo| +fdeqN1l}lql 1bdri|oN1l}lql +fdeqN[|krj|kNkbtiddlqef~NWY[bfT6H@TNe|kp@p|kp@ifdeqN/i|qb Zlqef~N2-rj@F+N[bisbqf~| +3 GH +fdeqN,v|kj|o 2|kd|j 9|tdvf UliaNid@p|kp@pbofc@ifdeqN,(4( X7 +fdeqN1l}lql 3efkN2l,T UliaN/|a|rhN2|jprkd 2|kpN2m|~flrp_2j|iiV|mNp|kp@pbofcNW5 ,le|kqv.3 ,bafrjN2q|}ib_2i|mNjlk|~lNYivjb@+fdeqNcwwvp@alpmvN2~obbk2|kpN~il~hECDIN1l}lql Vlkabkpba Ulia (q|if~NTof|iN*- ,le|kqv ,bafrjN,lqlv|+,|or 6F jlklN[|kapbq VlkabkpbaN1l}lql (q|if~N[3V [|kaN223 4iqo| +fdeq (q|if~N223 5fbqk|jbpb 1lj|kN-lql -|phe To|}f~ 4( UliaN~ekcwue@jbafrjN2-rjVlka@F3N~bkqrov@dlqef~@obdri|oNabc|riq_ol}lql@ifdeqN-lql 2|kp ,v|kj|oN,v|kj|o 2|kd|j ,-NTmmib Vlilo XjlgfNtb|qeboclkq1bdN2|jprkd,|i|v|i|j1bdri|oN|of|iNWolfa 2bofc UliaNV/lF /1V UliaN,( +T-3(-ZN2|jprkd*lob|k@1bdri|oNqbpqGH 1bdri|oNpmfofq_qfjbNWbs|k|d|of 2|kd|j ,-N2~obbk2bofcN1l}lqlN~ropfsb@clkq@qvmbN23[bfqf_sfslN~ekcwueN2|jprkd Vil~hYlkq FTN1l}lql Vlkabkpba 1bdri|oNp|jprkd@kbl@krjF1NZ) ,le|kqv.3 ,bafrjNVeriel -brb +l~hNol}lql@krjF+Nebisb@kbrb@riqo|+fdeqbuqbkabaN2|jprkd.ofv|1bdri|oN2|jprkd2|kp-rj@G+s +fdeqN,8fkd[bf_DKCFC_VE@UliaNWY/2e|l-s6H@ZUN1l}lql Ui|~hNebisb@kbrb@riqo|ifdeqNdj_ufebfN+Zil~hG +fdeq_CKCHNZrg|o|qf 2|kd|j ,-N,|i|v|i|j 2|kd|j ,- UliaNol}lql@krjF1N237febf_sfslNY99erk8r|k_ZUDKCFCNklql@p|kp@~gh@ifdeqN~lilolpN-lql 2|kp ZrojrhefN-lql 2|kp 2vj}lipN1l}lql +fdeq (q|if~N+lefq 3|jfiN~ropfsbNabc|riq_ol}lqlNUe|pefq|Vljmibu2|kp UliaN+Z_-rj}bo_1l}lql 3efkNjlklpm|~ba@tfqelrq@pbofcpN[bisbqf~| +3 FH 3efkNp|jprkd@p|kp@krjF+5NW(-/olN)ljlie|ofNp|kp@pbofc@ifdeqNebisb@kbrb@}i|~hN+lefq Ubkd|ifN,v|kj|o 2|kd|j 9|tdvfNWolfa 2bofc (q|if~N1l}lql Ulia (q|if~N-|krjZlqef~N2lkv ,l}fib 4W Zlqef~ 1bdri|oNZblodf| Ulia (q|if~Np|jprkd@p|kp@krjF+sNvrklp@qefkNp|jprkd@kbl@krjF3@~lkaN-lql 2|kp ,v|kj|o 4( UliaNidpbofcNY98lr[bf@1@ZUDKCFCN+lefq /rkg|}fN}|phbosfiibNp|jprkd@p|kp@krjG3sNp|jprkd@p|kp@qefkN+Z XjlgfNTkg|if-bt+fmfN2|jprkd2|kp-rj@G3 3efkN2|jprkd*lob|k@UliaNjfrfbu@ifdeqN-lql 2|kp *|kk|a|N1l}lql -loj|i (q|if~NZblodf| (q|if~Np|kp@pbofc@jbafrjN2j|oq 9|tdvfN1l}lql Vlkabkpba (q|if~N-lql 2|kp *|kk|a| 4( UliaNWY/ 2~ 2|kp [brbFC_DCFN+Z_-rj}bo_1l}lql UliaN/|a|rh UllhNu@ppq@~lkabkpbaN2rkpefkb@4~ebkN1l}lql Ui|~h (q|if~N1fkdl Vlilo XjlgfNWbs|k|d|of .32N2j|oq 9|tdvf /olNY9+|k3fkd[bf@,@ZU*NTkaolfaVil~h@+|odb 1bdri|oNmolmloqflk|iiv@pm|~ba@tfqelrq@pbofcpNVrqfsb ,lklNqfjbpN+Z 2j|oq_[ qbpq UliaNW(-/ol@+fdeqNp|kp@pbofc@}i|~hN+lefq Wbs|k|d|ofNmolmloqflk|iiv@pm|~ba@tfqe@pbofcpNp|jprkd@p|kp@krjF+N,8lrkd /1V ,bafrjNWYZlqef~/6H@U(ZH[*@2.-8Ne|kp@p|kp@jbafrjN223 [b|svN+Z@Y99erk8r|k@,CE@5EAEN,v|kj|o4-bt 1bdri|oN-lql -|phe To|}f~ UliaN2|jprkdZrg|o|qef1bdri|oNc|kq|pvNebisb@kbrb@ifdeqN[bisbqf~| -brb .32 UliaNklql@p|kp@~gh@}liaNp|jprkd@p|kp@krjF1N+fkapbv 2|jprkdNp|jprkd@p|kp@krjF3N2~obbk2bofc,lklNX3orjm ,v|kj|o_96Nebisb@kbrb@qefkbuqbkabaN-lql -|phe To|}f~N+Z_Zrg|o|qfN2j|oq_,lklpm|~baN3|jfi 2|kd|j ,-N+Z Xjlgf -lkT,XN1l}lql Vlkabkpba +fdeq (q|if~Ndj_gfkdh|fNY9+|k3fkd*|k[bf_ZUDKCFCNidqo|sbiNm|i|qfklNZblodf| UliaNWolfa 2|kpN+Z_/rkg|}fN2j|oqZlqef~ UliaN2|jprkd 2|kp 3efkN223 Vlkabkpba UliaNVljf~p_-|ooltN~lrofboN.ofv| 2|kd|j ,-Nebisb@kbrb@ifdeqbuqbkabaNY9+|k3fkd[bf@1@ZUDKCFCNT1 Vovpq|iebf[*2V2 WUNpbofcN13628rb1lraZlZCsD@1bdri|oN,f|l6r_mobsNY98D*N+Z_-rj}bo_1l}lql 1bdri|oNTkaolfaVil~hN2l,T 1bdri|oN[80f[bf@GC2 +fdequNid@p|kp@pbofcNW|k~fkd 2~ofmq UliaNabc|riqNpb~@ol}[url=mailto:lql@ifdeqNVlilo.24]lql@ifdeqNVlilo.24[/url](@1bdri|oNqbpq 1bdri|oN3|jfi 2|kd|j ,- UliaNY98fkdUf7fkd2er@2DIN1l}lql-rjF+ +fdeqNjlklpm|~ba@tfqe@pbofcpNp|jprkd@p|kp@krjFHNVlli g|wwN2|jprkd-bl-rj@F+N237fkdh|fN2~obbk2|kp,lklNWY/6|6|6H@ZUN2|jprkd2|kp-rj@F+ +fdeqNU|kdi| 2|kd|j ,-NZrojrhef 2|kd|j ,-N2XV1l}lql+fdeqNevclkuo|fkN,8fkd[bfZUDKCFCV@UliaNp|jprkd@p|kp@ifdeqN[bisbqf~| +3 IH ,bafrjNWolfa 2|kp Y|ii}|~hN1l}lql 3bpqD UliaN-lql 2|kp ,v|kj|o UliaNp|kp@pbofc@~lkabkpba@~rpqljN2|jprkd-bl-rj@F3N2|jprkd 2|kp -rjFHNjlklpm|~bN3+ ,le|kqv ,bafrjNebisb@kbrb@jbafrjN+3[829*N1l}lql Vlkabkpba ~rpqljb UliaN,v|kj|oFNWolfa 2|kp Wbs|k|d|ofN2e|l-s_mobsNp|jprkd@kbl@krjF+NY9+|k3fkd[bf@X+@ZU*NvrklpNp|jprkd@kbl@krjF3N3fjbp -bt 1lj|kNebisb@kbrb@}liaNklql@p|kp@~gh@obdri|oN-lql 2|kp Zrojrhef 4( UliaNW(-/ol@}i|~hNY9+|k3fkd[bf@X+@ZUDKCFCN223 5fbqk|jbpb ,bafrjN1l}lql Vlkabkpba +fdeqN223 5fbqk|jbpb UliaNT1 W)@**NWolfa 2|kp 2X,VN-lql 2|kp ,v|kj|o 4(NVljfkd 2llkN,8rmmv /1V ,bafrjN1lpbj|ovN+lefq Zrg|o|qfN1l}lql Vlkabkpba ~rpqlj UliaNY9+|k3fkd[bf2@1@ZUN[bisbqf~| -brb .32N*|fqf_mobsN1l}lql@UfdVil~hNY98U*2)6N[|kapbq Vlkabkpba UliaN2|jprkdZblodf|kNW|k~fkd 2~ofmqNp|kp@pbofc@~lkabkpbaNe|kp@p|kp@qefkN2|jprkd2|kp-rj@G3s 3efkN+lefq .af|NUe|pefq|Vljmibu2|kp`y~efq~suav`qtt4uxqhyad`9ufAdywy~q|Gd|`sa~~usfya~`y~s|gtu`vdq}u`dufgd~ qMr]N`sxy|tdu~`2turgwwud`\'~g||\' ye ~af q~ arzusf`vg~s`$_h<Fb`dvdajhs)hccdm`esduu~K`@g}rud`vq|eu`eds7|u}u~f`d$1qd6XWqnvrdqXk~rrhbA6XWqnvrdq.drr~fdXdmsdq`gd|N#tuvqg|f#geudtqfqO`eufDucguef:uqtud`y}badf`}ageuAhud`}ufq`?ej}|TJ?>:FFB`v@p:zm3tww3z}xAzzwM@zrzb:~p`~qfyhu`wq}}q`wufFy}ula~uAvveuf`tqfqeSfe`__a~|aqt__`g5+.h{uan@-U6`zresxu}u,UUcgugu_xqe_}ueeqwu`eufFy}u`yfu}`?76;G?_8>A3F`_r|q~{`v|aqf`#W)u`ujfu~te`v__dpmo}tcp}_~n}t{a_qy`Ducguef`?ej}|XTEudhudJ?>:FFBTYTV`s|yu~f;~vad}qfya~`fxu~`?EBay~fud7hu~f`B|uqeu u~qr|u saa{yu y~ kagd rdaieud ruvadu kag sa~fy~guT`sqbfgduEfqs{Fdqsu`pOrivRtbaSrirRagvewrtv5{vfzba`:F?>Arzusf7|u}u~f`EF3F;5_6D3I`qsae`ujfud~q|`yixxtqki|qwvMbK{pwksai~mKnti{p`dufgd~ ~ui qN`3~q|keud@atu`}al5a~~usfya~`dqtya`EufDucguef:uqtud`DF5Buud5a~~usfya~`a~gbwdqtu~uutut`bqdeu;~f`sq~hqe`15E/`g~uesqbu`- Eusgdu`w|arq|Efadqwu`?ej}|XTJ?>:FFB`p[vr}+zuvb7[vr}+zuvb1g~2 Jtgziv- Lbageb} 1<;6szg2`?ysdaeavfTJ?>:FFBTWTV`sqfsx`Budvad}q~suAreudhud`wuf5a~fujf`tuvqg|fBduhu~fut`avveufFab`sa~fqy~e`tqfq,`$r_b|qfvad}`xffbe,UU`:;9:_;@F`arzusfEfadu@q}ue`fxye`skw<Q`CC4daieud`Ahuddytu?y}uFkbu`ljzcze~ld`iytfx`}ageu?ahu`sxqd`|>jg?43tl4xl_<508<,_`rweag~t`y7wd+xxmizivkm`baeyfya~`sqeu`b6lzqfE[fufdujpo`fagsxu~t`duvduex`$r}8VqJL|D}|HkG:<`bdab`|qef;~tujAv`sq||rqs{`~g||`G~u~s|aeut efdy~wT`t@dvpxCvzrQ@dvpxCvzr`rD~v~f`wuf3ffdyr>asqfya~`<EA@`~atuHq|gu`9q}ubqt`rufq`__q~sxad__`avveuf>uvf`{c\\yF\\Ctgzo|k iujk\\]\\yFe`bqdeu`tqfq`$_vd`bqs{qwu`daie`ArzusfT;~zusfutEsdybfTuhq|gqfu`abu~ud`}ageugb`exu~zyq~`turgwwud`ufxud~uf`$_s6da`F7?BAD3DK`mmyvxh}lyh`dub|qsu5xy|t`BAEF`~g};fu}e`sqbfgdu`tasg}u~fSvdqw}u~f`va~f`vydef5xy|t`vda}5xqd5atu`iur{yf;~tujut64`Bay~fud7hu~f`iur{yfDucguef8y|uEkefu}`sxqd3f`tuesdybfya~`pfcz_ybb|vu5~bmJaz~rgzba(greg)z~v5~bmRauvkvuMK5~bm[vdhvfgJaz~rgzbaOer~v`wuf4qffudk`{;?+zrJ;?+zr`qrea|gfu`dueba~euFujf`saa{yu7~qr|ut`mdyjifuhayh8__di8__diMffydx,ynj8ye/yvNhemiyh`vy~q|`bdu|aqt`=ukraqdt`r|gufaafx`sq~su|4grr|u`ujusEsdybf`fdkmdufgd~ __vy|u~q}u-osqfsxNuOmo`hqd sgd_u|u / fxye-`iyfx`x__bnkm{ran{_naju~j}n`efqfge`fa8yjut`tyeb|qk`egrefd`M~g||] ye ~af q~ arzusf`jPzkh+SU=+SU`L*J:<<KTr}8VqJL|D}|HkG:<NO`euf;fu}`.U$W`|aqtut`Du}ahu7hu~f>yefu~ud`a~qgfasa}b|ufu`$r_sq||:q~t|ud` edv|j `bdafusfut`}qfsx`wafa`tdqi3ddqke`}utyq6uhysue`s|aeu`iurefadu`iur{yfDF5Buud5a~~usfya~`5ag~f`fujfUzqhqesdybf`qrefdqsf`budvad}q~su`Efadqwu`w$ryyu$L$$vyqqo|L$$v}zL$$v}|lL$rnd$L$|okne/yno-v|okne1doma~on5x@rs}2|kwoL$}nd$L$aso$`|q~wgqwue`$_vr`euf>asq|6uesdybfya~`eagdsu`U,geud_va~fe`F=_@G?47D`esda||`$r_vufsxCgugu`.!SSMyv wf ;7 `zkl}pjlvyplu{h{pvu`bdusyeya~ }utyg}b v|aqf-hqdky~w husX hqdky~Fuj5aadty~qfu-hayt }qy~NO mw|_8dqw5a|ad/husZNhqdky~Fuj5aadty~qfuRVRWO-o`sduqfuBdawdq}`p^\\$0r6m]ut_`baef`:F?>7|u}u~f`fujfUxf}|`.!SS`arzusfEfadu`v}xzneO?plw=wlfp} 4S 0zya}zwOR`|y~{Bdawdq}`bdusyeya~`yu{~q{qjqtq|ckpivom`7~fyfk`p~fLevuvagzr}f`cds{|}6a7jfxI<y:3bWeHK=GYD8?Ci*;9vBA+Xrh>@zT)lJ4qE~gVF5(wk_ZLu[tmonp !#$%NOPQRS-/12M]^`g~yvad}Xv`zqhqesdybf,`p*L,vsNkg5htjvs`dub|qsuEfqfu`ha|qfy|u`sduqfu6qfq5xq~~u|`geu efdysf`adywy~q|Fqdwuf`u__ru~qr{f__N_ru~qr{f_@qmpq~;{pq`zqhqesdybf, haytNVO-`G~ujbusfut sxqdqsfud, `m"abfya~q|" , M m"Dfb6qfq5xq~~u|e" , fdguo ]o`G~fud}y~qfut }g|fy|y~u sa}}u~f`UF)3kFdjaIj9t`Egr}yf`fy}u`dueba~eu`dq~wu?y~`fdy}`sxus{raj`L*J:z`sa~ef`E7>75F hq|gu 8DA? 7{sB_f I:7D7 ~q}u/1`8|aqfYX3ddqk`9ufDueba~eu:uqtud`avveufJ`s#dP^b#:#d{|d{}d{6d{ad{7d{jd{fd{xd{Id{<d{yd{:d{gd|fdE6`duvuddud`k*RT<*z|Qljd`~atu@q}u`wufDueba~eu:uqtud`.}ufq\\eQxffbSucgyh/M"\']1duvduexM"\']1\\e`ek~sxda~ylut`ujbadf`vy|u~q}u`abu~6qfqrqeu`b__ds:fcC__hZs:fc`u~qr|uHudfuj3ffdyr3ddqk`xffb,UU`xuywxf`eqvqdy`E7@6`zresxu}u,UU`bnp{wjtjcjmjuzdibohf`G~u~s|aeut duwg|qd ujbdueeya~T`iur{yfBudeyefu~fEfadqwu`ww}4snnox`___fe___`s|qee`dg~fy}u`}al;~tujut64`bqdu~f7|u}u~f`?yeey~w sqfsxUvy~q||k r|as{e`sK#d6343E3~3V3F3(WJe.e0HiD-8~8$8%8 ?c?*?;?9CcCxCIC:C3CbC?CrChC^C&CPihi)ili~igiL*s*{*a*e*H*K*T;c;d;s;|;};6;?;C;_;Z;L9C9*9;999h9>9S9)9l959(929$vjv^v&vPvNvOvoB}AzASA(AwAnA +w+_+Z+2+$+%+&+P+N+O+,+-X}X6XXXrrGrvr)rlr.r0hZhP>f>x>OzGzvzBSXSrS2S%S&S/S.)g)_)ZlvJlJJJgJ_JZJLJuJ[JtJpJ 4c4d4s4S4)4l4J44454w4&(p$a$7$h$>%W%B%A%+%k&mN;N9N>N@NzQyQ:/|/}/2/$/%/0/T/1/U/,.e0tT=TGTiT*T+TXTr1j1f1x1z141q1E1~1g,x,I,<,ym6mWmG#!#d{3d{bd{$d{%d{ d}gd~&d~P}v!}vT}v1}A3}Ab}rG}r?}r9}rw}rk}r_}rZ}rL}hL}hu}>h}z{}z|}zV}Sx}SI}S<}SW}Se}SH})J})4})q})E})~})g})V})F})2})/}).}lv}l]}J|}J}}Jx}JI}Jy}EX}Er}Eh}E>}E@}Ez}ES}E)}EJ}E47fC7e37eb7=b`qffdyrgfu husX qffdHudfuj-hqdky~w husX hqdky~Fuj5aadty~qfu-g~yvad} husX g~yvad}Avveuf-hayt }qy~NOmhqdky~Fuj5aadty~qfu/qffdHudfujQg~yvad}Avveuf-w|_Baeyfya~/husZNqffdHudfujRVRWO-o`raa|uq~`bgexEfqfu`du}ahu;fu}`\x00`sxqdqsfudEuf`kk{d{fame;{nwdmwl{`kyu|t`dufgd~`rqffudk`vad7qsx`y}b|u}u~fe`uhq|gqfu`|y~u~a`?ej}|XTJ?>:FFBT(TV`F=_D79_7J`wufEgbbadfut7jfu~eya~e`mxebf|}d8xebf|}d}dze8xebf|}dcyju`dwrqNXZVRWWVR[YRVTZO`?ej}|XTJ?>:FFBTZTV`}al;fu}e`s|uqd;~fudhq|`fxdai`q/sq~tytqfu,`$_s{`3radf`sxus{ut`avveuf:uywxf`9ufHqdyqr|u`avveufIytfx`eu|usfut`|qkudJ`tu|ufu`Nuhq|gqfy~w \'~g||MV]\'O`efq~tq|a~u`esduu~`Duw7jb`s|yu~fK`sxqdwy~w`}ueeqwu`Eu~t`}y}uFkbue`wuf;fu}`Yzu3>uEeq(`sxda}u`va~f8q}y|k`tuvqg|f`uhu~f`wufG~yvad}>asqfya~`NfxyeO-`G~ujbusfut fa{u~ `fdq~eqsfya~`adyu~fqfya~`wufEagdsue`g~tuvy~ut`M~qfyhu satu]`CFB_7B7_:AA=`vufsx`hytua`:F?>3~sxad7|u}u~f`bdbqudib5fgsftiCdbqudib_sfgsftiCdifdl/phjoCefdszquZbmmcbdl`iur{yf5a~~usfya~`iyvy`.7?476 yt/`6A?Bqdeud`;||uwq| ~ui|y~u qvfud 2fxdai`avveufG~yvad}`{uk6ai~`dufgd~Hq|gu`|a~w`sxqdwy~wFy}u`AB7@`etgqg~gjgrwaf}lec`\\rM^0]P0NM\\e\\E]P1O.\\U`}ageuAgf`_fe_`sa~fy~gu`iurw|`}ageuGb`u~g}udqfu6uhysue`egrefdy~w`esduu~J`g0a{h.h{uan@0a{h.h{uan:pi; S}pera6 Ukjpnkh :ED?|ep;`|uhu|`.tyh0;7*.Utyh0`$r_eufgb`vy||Efk|u`sq~tytqfu`- bqfx/U`xffb`eiyfsx`s|yu~fJ`puezive`rkfu`u~qr|utB|gwy~`dq~wu?qj`a~ruvadug~|aqt`u~saty~w`bqdu~f`}ageutai~`\\\\`efqfys`}ageuagf`wufExqtudBdusyeya~8ad}qf`hudfuj3ffdyrBay~fud`z~likyp}lyJl}hs|h{l`3ttEuqdsxBdahytud`efqfgeFujf`dD#d,s{s77+7rjMj]fIfW:BW)Wle_eQe/emeoHxHC=x=T=1=o8g8&?y?:?)?l?1CdCWC9CvCVCFCmCoiii*i9iviAi+iO*%*^*1;j;D;8;N;O9W9e9i9L9u9,vfv9vvvAvXvrvzvSvnAWAlAJAFA5+kXdX{X|rarzrShJ>Q>/@p@!@$@&@P@O@.zxz<z3zbzYzDzAz)z2z$S<J!4f4y4:4(q.V%Fm%g%w&o1(1w#X#dd:ddbddeds?d|Cd|zd}od6cd6yd6id6;d6vd6PdaAda+d@udS/dExdEIdE!dE2dLgslJsJ9}yq}9M}9]}+-}+m}E26]G7f?7fL7f[7ft7f!7f2`pJxLbageb}7JxLbageb}`?76;G?_;@F`uddad`|rta/niijs`q|bxq`{ukGb`nwxk|vxbdi|dc`exqtudEagdsu`cds{|}6a7jfxI<y:3bWeHK=GYD8?Ci*;9vBA+Xrh>@zS)lJ4qE~gVF5(wk_ZLu[tp!2$%^&PNOQ/.0T1U,-moM]n `bqeeiadt`~ujfEyr|y~w`$_fe`dq~ta}`sduqfuAvvud`3DEueeya~R3gtyaFdqs{>yefR4uvadu;~efq||Bda}bf7hu~fTbdafafkbuT=7KGBR4|ar6ai~|aqt5q||rqs{R563F3Eusfya~TbdafafkbuTdu}ahuR5EE5xqdeufDg|uR5EEBdy}yfyhuHq|guT5EE_H:R5q~hqeDu~tudy~w5a~fujfX6TbdafafkbuTiur{yf9uf;}qwu6qfq:6R5|ys{6qfqR5|aeu7hu~fTbdafafkbuTy~yf5|aeu7hu~fR5a}ba~u~feTy~fudvqsueT;5a}uf?qd{e7jfu~eya~R6uhysuAdyu~fqfya~7hu~fR8g~sfya~TbdafafkbuTry~tR9ufBudvFuefeR:F?>6asg}u~fTbdafafkbuTsduqfuFagsx>yefR:F?>8ad}7|u}u~fTbdafafkbuTducguef3gfasa}b|ufuR:F?>8dq}uEuf7|u}u~fTbdafafkbuTxqeBay~fud5qbfgduR:F?>8dq}uEuf7|u}u~fTbdafafkbuTiur{yfDucguef8g||Esduu~R;~f|R?FF_I=EufFujfEylu;~tujR?utyq5a~fda||udR?utyq7~sdkbfut7hu~fR@afyvysqfya~RArzusfTbdafafkbuT__tuvy~uEuffud__RArzusfTeuq|RArzusfTeufBdafafkbuAvRAvvesduu~5q~hqeDu~tudy~w5a~fujfX6RBqfxX6TbdafafkbuTqttBqfxRBqk}u~fDueba~euRBudvad}q~suBqy~fFy}y~wRBdueu~fqfya~5a~~usfya~5|aeu7hu~fRDuqtud?atu3dfys|uBqwuREH99dqbxyse7|u}u~fTbdafafkbuT}alDucguefBay~fud>as{REH9Bqffud~7|u}u~fTEH9_G@;F_FKB7_A4<75F4AG@6;@94AJREsduu~Adyu~fqfya~REawag>awy~Gfy|eREagdsu4gvvudREagdsu4gvvudTbdafafkbuTsxq~wuFkbuREbuusxEk~fxueyeGffudq~suRFujfFdqs{>yefTbdafafkbuTwufFdqs{4k;tRG5Iur7jfRIur=yf8|qweR_IJ<ER__$_cyxaaY(V_$__R__vyduvaj__R__{eqr5ee5ag~fR__abudqR__eawag_eusgdu_y~bgfR_tagr|uWW_Rsxda}uRsxda}uTqbbT;~efq||EfqfuRsxda}uTseyRsa~ea|uRtuvqg|fEfqfgeRtasg}u~fTratkTa~}ageuu~fudRtasg}u~fTratkTa~bqwuRtasg}u~fTratkTefk|uTrqs{wdag~t4|u~t?atuRtasg}u~fTratkTefk|uT|y~u4duq{Rtasg}u~fTratkTefk|uT}y~IytfxRtasg}u~fTratkTefk|uT}eFujfEylu3tzgefRtasg}u~fTratkTefk|uTfujf3|yw~>qefRtasg}u~fTratkTjS}eSqssu|udqfad{ukRtasg}u~fTtuvqg|f5xqdeufRtasg}u~fTtasg}u~f7|u}u~fTa~dueyluRtasg}u~fTvy|u5duqfut6qfuRtasg}u~fT}e5qbe>as{Iqd~y~wAvvRtasg}u~fTa~}ageu}ahuRtasg}u~fTa~eu|usfya~sxq~wuRtasg}u~fTesda||y~w7|u}u~fTefk|uTva~fHqdyq~f@g}udysRtasg}u~fTeu|usfya~Rtasg}u~fTeu|usfya~Tfkbu6ufqy|Rujfud~q|Rujfud~q|T3tt8qhadyfuRujfud~q|T;eEuqdsxBdahytud;~efq||utRv|kv|ai_iq||bqbud_zeRwuf?qfsxut5EEDg|ueRwduu~fuqRye@atuIxyfuebqsuRzueya~Ra~uddadRa~}ueeqwuRa~abudqtufqsxuthyuisxq~wuRabu~6qfqrqeuRbqeeiadt_}q~qwud_u~qr|utRbudvad}q~suRexai?atq|6yq|awRfqardaieud_7hu~fRiuqfxud4dytwuRiur{yf3gtya5a~fujfTbdafafkbuTs|aeuRiur{yfDucguef8y|uEkefu}`avveufK`vy~q||k`p__~ggLevrgvOer~v5~ggLh~fgb~S(`rqeu`Budvad}q~suAreudhud7~fdk>yef`qffqsxExqtud`u~qr|u/fdgu`a~ysusq~tytqfu`fdkmdufgd~ __tyd~q}u-osqfsxNuOmo`;@E7DF AD D7B>357 ;@FA 7{sB_f N~q}uR hq|guO H3>G7EN1R 1O`ye@q@`?ageu`q~tdayt`{ukgb`6uhysuAdyu~fqfya~7hu~f`m             \"ysuEudhude\" , M                 m"gd|" , "efg~,efg~VWTeybbxa~uTsa}"oR m"gd|" , "efg~,efg~Tu{ywqT~uf"oR                 m"gd|" , "efg~,efg~Tvit~ufT~uf"oR m"gd|" , "efg~,efg~TytuqeybTsa}"oR                 m"gd|" , "efg~,efg~Tybfu|Tadw"oR m"gd|" , "efg~,efg~Tdyjfu|usa}Teu"oR                 m"gd|" , "efg~,efg~Tesx|g~tTtu"oR m"gd|" , "efg~,efg~T|Twaaw|uTsa},W+YVX"oR                 m"gd|" , "efg~,efg~WT|Twaaw|uTsa},W+YVX"oR m"gd|" , "efg~,efg~XT|Twaaw|uTsa},W+YVX"oR                 m"gd|" , "efg~,efg~YT|Twaaw|uTsa},W+YVX"oR m"gd|" , "efg~,efg~ZT|Twaaw|uTsa},W+YVX"o             ]         o`fxdaie`@q}u ujbusfut`q|udf`6uhysu?afya~7hu~f`sdutu~fyq|e`q~sxad`hudfujBae3ffdyr`>AI_8>A3F`prcc(traL}zt|5rcc(traObthfXhg5rcc(traTvlMbja5rcc(traTvl*c`qgtya`hqd egr}yf/vg~sfya~NOmvadNhqd f/sgd_u|u-f!//tasg}u~f&&N!fTfqw@q}unn\"vad}\"!//fTfqw@q}uTfa>aiud5qeuNOO-Of/fTbqdu~f7|u}u~f-f!//tasg}u~f&&fTegr}yfNOo-`qduq`W*bj \'3dyq|\'`ai~ud6asg}u~f`?ej}|XTEudhudJ?>:FFBT(TV`?ej}|XTEudhudJ?>:FFBT[TV`fuefe`?ej}|XTEudhudJ?>:FFBTZTV`9uf@ujfDuc;6`fujfqduq`tasg}u~f7|u}u~f`tuhysu;t`abfya~e`g~ysatu`ruxqhyad`tufqsx7hu~f`y~fudvqsu`vdq}ue`ujusgfuEc|`vy||Fujf`g~yvad}Avveuf`F=_@3?7`dM#7wjTIn<s3d3lbhbEWjWCeZe!e%eOe1e-HLH]=c=f=^=0GGG8GCG+GrG>GzGJD1D,8V858(8[8t828P8/CsC|C}C7i@iSi5iw*U*-*m*n9v9+v0v1v,vmB4BEAeAKA=ADA?AiA;AB+L+pr7rfrxryr3rWrHr=hph2h$h^hOhU>.>-@6@<z8z;zJzg)X)~)V)w)%)/)0lGJ4J~JVJk4a4j4x4<434=484i4q4F4$4^292B2p22%e%D%8%v%X%4^y^3NYN8N?N*NvNANSNqNENgO1Q6/6/7/^///-.c.d.6.a.30Z0[TYTCT;TAT0TM1S1JUo,s,{,f-T-U--m}mam<Mg]c]G]D#B#d}Bd}Jd}(d}2d>=d>YdzMdS?dEqdEF}>G}>r}>$}>o}@q}@(}@,}zs}zE}zg}Sy}Sb}SK}SY})>})l}l }Jd7W57W^7W]7e{7ez7e)`eu|v`ujbudy}u~fq|Siurw|`000/`9uf3||Dueba~eu:uqtude`u__?B>__6==9_<=B7473@`5D73F7 F34>7 ;8 @AF 7J;EFE 7{sB_f Nyt ;@F797D @AF @G>> BD;?3DK =7K 3GFA;@5D7?7@FR ~q}u F7JF @AF @G>>R hq|gu F7JF @AF @G>>R G@;CG7 N~q}uOO`- ujbydue/`ht8}`tyebqfsx7hu~f`6yebqfsx7hu~f`3DD3K_4G887D`rr*X{z`tagr|u`tg}b3||`\uFEFF`va~f>yef`vy||Dusf`8g~sfya~`efdy~wyvk`fa>aiud5qeu`eqhu`>AI_;@F`bqdeu8da}Efdy~w`fa9?FEfdy~w`}ageuahud`u|u}u~fe`a~uddad`k6|mfylagf67 snwj w K f{o Rwl{67I z{xm}}{jI j{lmjf f{o Rwl{67 ; w L ?>>Iu677`g~exyvf`J?>:ffbDucguef`qbbHudeya~`}e5dkbfa`NMVS+]mWRYoN\\TMVS+]mWRYoOmYon NNMVS+qSv]mWRZo,Om)R)oMVS+qSv]mWRZonNMVS+qSv]mWRZo,OmWR)o,nNMVS+qSv]mWRZo,OmWR(o,MVS+qSv]mWRZonNMVS+qSv]mWRZo,OmWR[oN,MVS+qSv]mWRZoOmWRXonNMVS+qSv]mWRZo,OmWRZoN,MVS+qSv]mWRZoOmWRYonNMVS+qSv]mWRZo,OmWRYoN,MVS+qSv]mWRZoOmWRZonNMVS+qSv]mWRZo,OmWRXoN,MVS+qSv]mWRZoOmWR[onMVS+qSv]mWRZo,NN,MVS+qSv]mWRZoOmWR(oOn,NN,MVS+qSv]mWRZoOmWR)on,On,,NvvvvN,VmWRZoOmVRWo,OmVRWoNNX[MVS[]nNXMVSZ]nWmVRWoMVS+]OmVRWoMVS+]O\\TOmYRYoNX[MVS[]nNXMVSZ]nWmVRWoMVS+]OmVRWoMVS+]OnNMVS+qSv]mWRZo,OmWRZo,NNX[MVS[]nNXMVSZ]nWmVRWoMVS+]OmVRWoMVS+]O\\TOmYRYoNX[MVS[]nNXMVSZ]nWmVRWoMVS+]OmVRWoMVS+]OO O`FD;3@9>7_EFD;B`lxvcc)}vekfd9_g}vekfd`eufEudhud6qfq`a~egssuee`biq_jefoujgjfs`xffbSucgyh`g~ujbusfut ~g}rud u~ty~wT`\r\n`iy}qj` xaef `fujf4qeu|y~u`bduhu~f6uvqg|f`cexit(ullscreen`:;9:_8>A3F`gfvS*`g~|aqt`sa}by|uExqtud`G~ujbusfut fa{u~, `]0.y0.Uy0.!Mu~tyv]SS0`}ageu6ai~`ahuddytu?y}uFkbu`agfud:F?>`8EE43`xaef`yfu}Eylu`geuBdawdq}`wn|sbo|Mobkvak~o`uesqbu`gsa|gepreoe|ehepu}d{jca`H7DF7J_E:367D`?utyqEfduq}Fdqs{`Abu~`fagsxue`d#!#s #ddd7dvsys+srs%s&a-an7j7Y7Cj1jmfcf{fyf3fHfhf@xBx+IM<}y^ym:;:z:U3pbdbabjbwW7W4ewH6H7H*HZKcK =+=%Dm848T8n?Y?C?B?@?q?^?P?0?m?]CACXCOCTCnieiKi?i%iP*|*6*G*;*v*A*X*_*L*2*P*/;[;^;.979f939K9D9t9!vIvbvKvGvDvCv4vEvFvpBgB_BLB[BpB]B A7AfAy+d+7+f+I+y+++r+4+E+FX>X4XEXgXFX/X0r{r%rOr1hahxhBh+h)hEh(>D>N> @}@m@]@ z}zazjzez=zrzzS0SoS])9)L)tJsJ)J-Jn4{464G4D4*4z4OqKq9qQqUEUE]~p~&g[g^VVV5VkVLV2V&VOV.F?FiF9FAF$F^FNF/F,FMF 5s535W5Q5.515-(Zw7wGw>kAkqp)p4p5p!!d!a!,2y282C2;2J2t2T$6$K$v$A$X$F%:^A&v&z&-P,NHNNOIO:OeO;ONQaQ<Q&/{0pTKThTl1I1@UqUm,+,r,E,omXM~]8#d]#dc+dchdc)dc4dcodcndd{dd6dd<ddKddgdd5dsbdsedsDds;dsvdsAds@dsldsqdsgdswdsudsOds1ds,dsmd{cd|Zd|td6{d6Id6Wd6=d6Ad6rd6>d6~d6Fd6wd6[d62dX~dradrjdr(drkdrNdrQdr]dhcd>xd>hd>.d>nd@gd@TdzxdzKdz?dzidzAdzXdzSdzldzgdzFdzZdzudz$dz^dz/dz0dzmdE(dEZdEPd~$d~Qd~.d~TdgTdgUdgmdVcdV>dV)dFqdF2d5cd5kd5N}:H}C?}i5}9(}9Z}9Q}vW}vE}vV}vp}v,}B3}A(}At}A2}+1}r3}r=}rY}r8}rC}r;}rv}r(}rM}h4}h[}>=}@H}@4}@_}@U}S })h})t})!})$})Q7|H7a57ak7787797jq7jn7f|7fb7fK7fi7fr7f>7fV7f57f_7f%7x]7I;73X73w7b*7bv7b]7Wr7WE7e07e,7em7Kh7K.7=I7=e7=)7=w7G(7GZ7Gp7G$7GN7G/7GU7Gm7GM`y}qwu`N~uqd \'TTT ~g||MV]TTT\'O`|qkudK`dueba~euJ?>`y~eudf4uvadu`eudhud6qfq`?ej}|YTJ?>:FFB`epkmavB2c}j0j}wcp [F Wmlrpmj`y 9:<M`?ysdaeavfTJ?>:FFB`rduq{`dueuf`ye8y~yfu`o)zcu}ksjwP~sgz8)zcu}ksjwP~sgz`ai~ud7|u}u~f`}e;~tujut64`wuf3||Dueba~eu:uqtude`qradf`3tt7hu~f>yefu~ud`{uktai~`fagsx}ahu`sa}b|ufu`wufBqdq}ufud`eu|usfS`s|uqd`qssu|udqfya~;~s|gty~w9dqhyfk`sduqfu4gvvud`;~vy~yfk`|y~{`A4<75F`}alDF5Buud5a~~usfya~`$_vW`$r_a~4dytwuDuqtk`a~|aqt`r-~qytre xs."qq)Wzy" r{pddxs."r{dxs+XUZUu)V*R*)qZRVVruRqq)WRUUppUUqsrtUq" hxsew."Uai" wtxvwe."Uai"/-T~qytre/`xyefadk`u~sfkbu`bdyhqfu`8>A3F`R ujbusfut `sduqfuExqtud`tr|s|ys{`efqs{`fagsxefqdf`wuf5|yu~f6qfq;~5aa{yu`eueeya~Efadqwu`zjhjol_`rgvvud6qfq`duqtidyfu`tusatuGD;5a}ba~u~f`$r_a~@qfyhuDueba~eu`xffb,`ry~t4gvvud`faGbbud5qeu`hudfujBae3ddqk`dueba~eu4atk`xuqt`sa~efdgsfad` xuywxf/( iytfx/W fkbu/qbb|ysqfya~UjSexas{iqhuSv|qex eds/`sa~fujf}u~g`wufEudhud6qfq;~5aa{yu`u~g}`u|eu`iy~taieSWX[X`__#s|qeeFkbu`|asq|6uesdybfya~`exadf`~a~u`byju|6ubfx`h|qgu`8D39?7@F_E:367D`8y|uDuqtud`_6;H`.ebq~ efk|u/"va~fSvq}y|k,}}||yy-va~fSeylu,WWZbj"0}}}}}}}}}}}||yyy.Uebq~0`ujsubf`:F?>7}rut7|u}u~f`$_KIFG`euf5|yu~f6qfq`wuf7jfu~eya~');
_$UH = _$ev
var $_oi = 1732584193;
var $_po = -271733879;
var $_sb = -1732584194;
var $_xn = 271733878;

function f(e) {
        var t, n, i = "0123456789abcdef", a = "";
        for (n = 0; n < e[_$UH[108]]; n += 1)
                t = e[_$UH[15]](n),
                a += i.charAt(t >>> 4 & 15) + i.charAt(15 & t);
        return a
}

function o(e, t, n, a, r, o, s) {
        return i(t ^ n ^ a, e, t, r, o, s)
}
        
function c(e) {
        var t, n = "", i = 32 * e["length"];
        for (t = 0; t < i; t += 8)
                n += String["fromCharCode"](e[t >> 5] >>> t % 32 & 255);
        return n
}

function n(e, t) {
        return e << t | e >>> 32 - t
}

function s(e, t, n, a, r, o, s) {
        return i(n ^ (t | ~a), e, t, r, o, s)
}
        
function r(e, t, n, a, r, o, s) {
        return i(t & a | n & ~a, e, t, r, o, s)
}
        
function t(e, t) {
        var n = (65535 & e) + (65535 & t);
        return (e >> 16) + (t >> 16) + (n >> 16) << 16 | 65535 & n
}
        
function i(e, i, a, r, o, s) {
        return t(n(t(t(i, e), t(r, s)), o), a)
}

function a(e, t, n, a, r, o, s) {
        return i(t & n | ~t & a, e, t, r, o, s)
}

function l(e, n) {
        e[n >> 5] |= 128 << n % 32,
        e[14 + (n + 64 >>> 9 << 4)] = n;
        var $_XML = 16
        op = 26
        var b64pad = 1;
        var i, l, c, d, u, h = $_oi, f = $_po, p = $_sb, m = $_xn;

        _$8K['_$6_'] = -389564586
        for (i = 0; i < e[_$UH[108]]; i += $_XML)
                l = h,
                c = f,
                d = p,
                u = m,
                h = a(h, f, p, m, e[i], 7, 513548),
                m = a(m, h, f, p, e[i + 1], 12, _$8K['_$6_']),
                p = a(p, m, h, f, e[i + 2], 17, 606105819),
                f = a(f, p, m, h, e[i + 3], 22, -1044525330),
                h = a(h, f, p, m, e[i + 4], 7, -176418897),
                m = a(m, h, f, p, e[i + 5], 12, 1200080426),
                p = a(p, m, h, f, e[i + 6], 17, -1473231341),
                f = a(f, p, m, h, e[i + 7], 22, -45705983),
                h = a(h, f, p, m, e[i + 8], 7, 1770035416),
                m = a(m, h, f, p, e[i + 9], 12, -1958414417),
                p = a(p, m, h, f, e[i + 10], 17, -42063),
                f = a(f, p, m, h, e[i + 11], 22, -1990404162),
                h = a(h, f, p, m, e[i + 12], 7, 1804603682),
                m = a(m, h, f, p, e[i + 13], 12, -40341101),
                p = a(p, m, h, f, e[i + 14], 17, -1502882290),
                f = a(f, p, m, h, e[i + 15], 22, 1236535329),
                h = r(h, f, p, m, e[i + 1], 5, -165796510),
                m = r(m, h, f, p, e[i + 6], 9, -1069501632),
                p = r(p, m, h, f, e[i + 11], 14, 643717713),
                f = r(f, p, m, h, e[i], 20, -373897302),
                h = r(h, f, p, m, e[i + 5], 5, -701558691),
                m = r(m, h, f, p, e[i + 10], 9, 38016083),
                p = r(p, m, h, f, e[i + 15], 14, -660478335),
                f = r(f, p, m, h, e[i + 4], 20, -405537848),
                h = r(h, f, p, m, e[i + 9], 5, 568446438),
                m = r(m, h, f, p, e[i + 14], 9, -1019783690),
                p = r(p, m, h, f, e[i + 3], 14, -187363961),
                f = r(f, p, m, h, e[i + 8], 20, 1163531501),
                h = r(h, f, p, m, e[i + 13], 5, -1554681467),
                m = r(m, h, f, p, e[i + 2], 9, -51403784),
                p = r(p, m, h, f, e[i + 7], 14, 1735328473),
                f = r(f, p, m, h, e[i + 12], 20, -1926607734),
                h = o(h, f, p, m, e[i + 5], 4, -37824558),
                m = o(m, h, f, p, e[i + 8], 11, -2022574463),
                p = o(p, m, h, f, e[i + 11], 16, 1839030562),
                f = o(f, p, m, h, e[i + 14], 23, -35309556),
                h = o(h, f, p, m, e[i + 1], 4, -1530992060 * (b64pad)),
                m = o(m, h, f, p, e[i + 4], 11, 1272893353),
                p = o(p, m, h, f, e[i + 7], 16, -155497632),
                f = o(f, p, m, h, e[i + 10], 23, -1094730640),
                h = o(h, f, p, m, e[i + 13], 4, 681279174),
                m = o(m, h, f, p, e[i], 11, -358537222),
                p = o(p, m, h, f, e[i + 3], 16, -722521979),
                f = o(f, p, m, h, e[i + 6], 23, 760291289),
                h = o(h, f, p, m, e[i + 9], 4, -64036887),
                m = o(m, h, f, p, e[i + 12], 11, -421815835),
                p = o(p, m, h, f, e[i + 15], 16, 530742520),
                f = o(f, p, m, h, e[i + 2], 23, -995338651),
                h = s(h, f, p, m, e[i], 6, -198630844),
                m = s(m, h, f, p, e[i + 7], 10, 1126891415),
                p = s(p, m, h, f, e[i + 14], 15, -1416354905),
                f = s(f, p, m, h, e[i + 5], 21, -57434055),
                h = s(h, f, p, m, e[i + 12], 6, 1700485571),
                m = s(m, h, f, p, e[i + 3], 10, -1894746606),
                p = s(p, m, h, f, e[i + 10], 15, -105181523),
                f = s(f, p, m, h, e[i + 1], 21, -2054922799),
                h = s(h, f, p, m, e[i + 8], 6, 1873313359),
                m = s(m, h, f, p, e[i + 15], 10, -30611744),
                p = s(p, m, h, f, e[i + 6], 15, -1560198380),
                f = s(f, p, m, h, e[i + 13], 21, 1309151649),
                h = s(h, f, p, m, e[i + 4], 6, -145523070),
                m = s(m, h, f, p, e[i + 11], 10, -1120210379),
                p = s(p, m, h, f, e[i + 2], 15, 718787259),
                f = s(f, p, m, h, e[i + 9], 21, -343485441),
                h = t(h, l),
                f = t(f, c),
                p = t(p, d),
                m = t(m, u);
        return [h, f, p, m]
}

function d(e) {
        var t, n = [];
        for (n[(e["length"] >> 2) - 1] = void 0,
        t = 0; t < n["length"]; t += 1)
                n[t] = 0;
        var i = 8 * e["length"];
        for (t = 0; t < i; t += 8)
                n[t >> 5] |= (255 & e["charCodeAt"](t / 8)) << t % 32;
        return n
}

function u(e) {
        return c(l(d(e), 8 * e["length"]))
}

function p(e) {
        return unescape(encodeURIComponent(e))
}

function m(e) {
        return u(p(e))
}

function g(e) {
        return f(m(e))
}
var mwqqppz = process.argv[2];
console.log(g(mwqqppz));


此时就可以编写代码来请求接口,加密的部分还是调用nodejs来计算
[Python] 纯文本查看 复制代码
import requests
import base64
import os
import time
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad

def gettime():
    time.sleep(1)
    return str(int(time.time()))+'000'

def main():
    # m为12位时间截,末尾增加一个0,除去最后一位后base64作为ecb的key
    # f为10位时间截,末尾增加三个0
    popularitylist = []
    m = str(int(time.time()*1000))
    f = gettime()
    data = ''
    nodejs = os.popen('node 0501 '+f)
    data += nodejs.read().replace('\n', '')+','
    nodejs.close()
    for i in range(3):
        nodejs = os.popen('node 0501 ' + gettime())
        data += nodejs.read().replace('\n', '') + ','
        nodejs.close()
    nodejs = os.popen('node 0502 '+m)
    cm = nodejs.read().replace('\n', '')
    data += cm
    nodejs.close()
    key = base64.b64encode(m[:-1].encode())
    cryptor = AES.new(key=key, mode=AES.MODE_ECB)
    data = base64.b64encode(cryptor.encrypt(pad(data.encode(), AES.block_size))).decode()
    headers = {
        'cookie': 'm='+cm+'; RM4hZBv0dDon443M='+data
    }
    for page in range(1, 6):
        url = 'http://match.yuanrenxue.com/api/match/5?page='+str(page)+'&m='+m+'&f='+f
        response = requests.get(url, headers=headers).json()
        for each in response['data']:
            popularitylist.append(each['value'])
    popularitylist.sort()
    sums = sum(popularitylist[-5:])
    print(sums)
    # 前五名总和:47313

if __name__ == '__main__':
    main()


第六题【接口-查询参数-值加密】

打开浏览器f12,然后访问第六题,查看接口的请求

可以看到其中一个m的加密参数,还有一个q的参数,q的参数值类似与时间戳。这里因为没有比较特殊的变量名,所以直接在全局搜索接口的部分地址【api/match/6

可以在主页中找到请求的逻辑,其中m参数就是由【t】和【window.o】通过r函数得到的,q也是由前面两个参数拼接而成,接着主要是看这个r函数



在【t】参数生成的地方下一个断点,然后刷新,此时成功断下,此时可以进入r函数内部

可以看到这些代码来源于【http://match.yuanrenxue.com/static/match/safety/match6/pf.js】。当【window.o】大于等于6的时候就会强制刷新,否则正常返回
去到js的最前面,可以看到有一段混淆的代码

把这些复制出来,然后去掉最后的【('_');】,把剩下的输入到控制台可以得到反混淆的代码

这里可以看到【window.o】赋初值为1,再回去看看加密部分的代码
当【window.o】小于6的时候,就会执行z函数,熟悉前端的话可以直接看出这里使用的是rsa加密算法

在【jsencrypt】下可以看到首先被设置了一个固定的公钥,加密的时候是将两个传入的参数拼接,然后进行加密后返回。
因为这里使用的不是标准的rsa算法,所以就不往这里深入分析,同时也没有办法使用python的标准库进行加密,所以直接使用nodejs去调用js文件计算。
我在分析的时候发现有四个小坑,这里大致说一下
1)第一点上面已经说过,有一段混淆的代码,反混淆后发现是window.o=1,但是搜索发现后面并没有使用到,所以这里可以直接删除

2)因为在node中没有BOM,所以【window】是用不了的,所以要在js最前面加上【window = global;】
3)下面有一句代码重置了我们前面第二条加的代码,所以这一句要注释或者删掉

4)在js代码中间的地方,有一个xe的参数被混淆了,这里会导致我们rsa加密时提示内容的长度太长了,将这部分代码复制到浏览器的【Console】然后回车,就可以看到反混淆的内容是【false】,更换回去即可


最后将js文件保存为【06.js】
[JavaScript] 纯文本查看 复制代码
window = global;
navigator = {};
var _n;
!function(i) {
    var s = {};
    //window = {};
    function n(t) {
        if (s[t])
            return s[t].exports;
        var e = s[t] = {
            i: t,
            l: !1,
            exports: {}
        };
        return i[t].call(e.exports, e, e.exports, n),
        e.l = !0,
        e.exports
    }
    _n = n;
}({
    encrypt: function(t, e, i) {
        var s, n, r;
        (r = function(t, e, i) {
            n = [e],
            (r = "function" == typeof (s = function(t) {
                function b(t, e, i) {
                    null != t && ("number" == typeof t ? this.fromNumber(t, e, i) : null == e && "string" != typeof t ? this.fromString(t, 256) : this.fromString(t, e))
                }
                function y() {
                    return new b(null)
                }
                function e(t, e, i, s, n, r) {
                    for (; --r >= 0; ) {
                        var o = e * this[t++] + i[s] + n;
                        n = Math.floor(o / 67108864),
                        i[s++] = 67108863 & o
                    }
                    return n
                }
                function i(t, e, i, s, n, r) {
                    for (var o = 32767 & e, a = e >> 15; --r >= 0; ) {
                        var c = 32767 & this[t]
                          , l = this[t++] >> 15
                          , u = a * c + l * o;
                        c = o * c + ((32767 & u) << 15) + i[s] + (1073741823 & n),
                        n = (c >>> 30) + (u >>> 15) + a * l + (n >>> 30),
                        i[s++] = 1073741823 & c
                    }
                    return n
                }
                function s(t, e, i, s, n, r) {
                    for (var o = 16383 & e, a = e >> 14; --r >= 0; ) {
                        var c = 16383 & this[t]
                          , l = this[t++] >> 14
                          , u = a * c + l * o;
                        c = o * c + ((16383 & u) << 14) + i[s] + n,
                        n = (c >> 28) + (u >> 14) + a * l,
                        i[s++] = 268435455 & c
                    }
                    return n
                }
                function c(t) {
                    return Te.charAt(t)
                }
                function l(t, e) {
                    var i = Ie[t.charCodeAt(e)];
                    return null == i ? -1 : i
                }
                function p(t) {
                    for (var e = this.t - 1; e >= 0; --e)
                        t[e] = this[e];
                    t.t = this.t,
                    t.s = this.s
                }
                function n(t) {
                    this.t = 1,
                    this.s = 0 > t ? -1 : 0,
                    t > 0 ? this[0] = t : -1 > t ? this[0] = t + this.DV : this.t = 0
                }
                function m(t) {
                    var e = y();
                    return e.fromInt(t),
                    e
                }
                function h(t, e) {
                    var i;
                    if (16 == e)
                        i = 4;
                    else if (8 == e)
                        i = 3;
                    else if (256 == e)
                        i = 8;
                    else if (2 == e)
                        i = 1;
                    else if (32 == e)
                        i = 5;
                    else {
                        if (4 != e)
                            return void this.fromRadix(t, e);
                        i = 2
                    }
                    this.t = 0,
                    this.s = 0;
                    for (var s = t.length, n = !1, r = 0; --s >= 0; ) {
                        var o = 8 == i ? 255 & t[s] : l(t, s);
                        0 > o ? "-" == t.charAt(s) && (n = !0) : (n = !1,
                        0 == r ? this[this.t++] = o : r + i > this.DB ? (this[this.t - 1] |= (o & (1 << this.DB - r) - 1) << r,
                        this[this.t++] = o >> this.DB - r) : this[this.t - 1] |= o << r,
                        r += i,
                        r >= this.DB && (r -= this.DB))
                    }
                    8 == i && 0 != (128 & t[0]) && (this.s = -1,
                    r > 0 && (this[this.t - 1] |= (1 << this.DB - r) - 1 << r)),
                    this.clamp(),
                    n && b.ZERO.subTo(this, this)
                }
                function r() {
                    for (var t = this.s & this.DM; this.t > 0 && this[this.t - 1] == t; )
                        --this.t
                }
                function o(t) {
                    if (this.s < 0)
                        return "-" + this.negate().toString(t);
                    var e;
                    if (16 == t)
                        e = 4;
                    else if (8 == t)
                        e = 3;
                    else if (2 == t)
                        e = 1;
                    else if (32 == t)
                        e = 5;
                    else {
                        if (4 != t)
                            return this.toRadix(t);
                        e = 2
                    }
                    var i, s = (1 << e) - 1, n = !1, r = "", o = this.t, a = this.DB - o * this.DB % e;
                    if (o-- > 0)
                        for (a < this.DB && (i = this[o] >> a) > 0 && (n = !0,
                        r = c(i)); o >= 0; )
                            e > a ? (i = (this[o] & (1 << a) - 1) << e - a,
                            i |= this[--o] >> (a += this.DB - e)) : (i = this[o] >> (a -= e) & s,
                            0 >= a && (a += this.DB,
                            --o)),
                            i > 0 && (n = !0),
                            n && (r += c(i));
                    return n ? r : "0"
                }
                function f() {
                    var t = y();
                    return b.ZERO.subTo(this, t),
                    t
                }
                function a() {
                    return this.s < 0 ? this.negate() : this
                }
                function u(t) {
                    var e = this.s - t.s;
                    if (0 != e)
                        return e;
                    var i = this.t;
                    if (e = i - t.t,
                    0 != e)
                        return this.s < 0 ? -e : e;
                    for (; --i >= 0; )
                        if (0 != (e = this[i] - t[i]))
                            return e;
                    return 0
                }
                function w(t) {
                    if (t === 65537) {} else {
                        t = 60115
                    }
                    var e, i = 1;
                    return 0 != (e = t >>> 16) && (t = e,
                    i += 16),
                    0 != (e = t >> 8) && (t = e,
                    i += 8),
                    0 != (e = t >> 4) && (t = e,
                    i += 4),
                    0 != (e = t >> 2) && (t = e,
                    i += 2),
                    0 != (e = t >> 1) && (t = e,
                    i += 1),
                    i
                }
                function d() {
                    return this.t <= 0 ? 0 : this.DB * (this.t - 1) + w(this[this.t - 1] ^ this.s & this.DM)
                }
                function g(t, e) {
                    var i;
                    for (i = this.t - 1; i >= 0; --i)
                        e[i + t] = this[i];
                    for (i = t - 1; i >= 0; --i)
                        e[i] = 0;
                    e.t = this.t + t,
                    e.s = this.s
                }
                function _(t, e) {
                    for (var i = t; i < this.t; ++i)
                        e[i - t] = this[i];
                    e.t = Math.max(this.t - t, 0),
                    e.s = this.s
                }
                function k(t, e) {
                    var i, s = t % this.DB, n = this.DB - s, r = (1 << n) - 1, o = Math.floor(t / this.DB), a = this.s << s & this.DM;
                    for (i = this.t - 1; i >= 0; --i)
                        e[i + o + 1] = this[i] >> n | a,
                        a = (this[i] & r) << s;
                    for (i = o - 1; i >= 0; --i)
                        e[i] = 0;
                    e[o] = a,
                    e.t = this.t + o + 1,
                    e.s = this.s,
                    e.clamp()
                }
                function x(t, e) {
                    e.s = this.s;
                    var i = Math.floor(t / this.DB);
                    if (i >= this.t)
                        return void (e.t = 0);
                    var s = t % this.DB
                      , n = this.DB - s
                      , r = (1 << s) - 1;
                    e[0] = this[i] >> s;
                    for (var o = i + 1; o < this.t; ++o)
                        e[o - i - 1] |= (this[o] & r) << n,
                        e[o - i] = this[o] >> s;
                    s > 0 && (e[this.t - i - 1] |= (this.s & r) << n),
                    e.t = this.t - i,
                    e.clamp()
                }
                function D(t, e) {
                    for (var i = 0, s = 0, n = Math.min(t.t, this.t); n > i; )
                        s += this[i] - t[i],
                        e[i++] = s & this.DM,
                        s >>= this.DB;
                    if (t.t < this.t) {
                        for (s -= t.s; i < this.t; )
                            s += this[i],
                            e[i++] = s & this.DM,
                            s >>= this.DB;
                        s += this.s
                    } else {
                        for (s += this.s; i < t.t; )
                            s -= t[i],
                            e[i++] = s & this.DM,
                            s >>= this.DB;
                        s -= t.s
                    }
                    e.s = 0 > s ? -1 : 0,
                    -1 > s ? e[i++] = this.DV + s : s > 0 && (e[i++] = s),
                    e.t = i,
                    e.clamp()
                }
                function S(t, e) {
                    var i = this.abs()
                      , s = t.abs()
                      , n = i.t;
                    for (e.t = n + s.t; --n >= 0; )
                        e[n] = 0;
                    for (n = 0; n < s.t; ++n)
                        e[n + i.t] = i.am(0, s[n], e, n, 0, i.t);
                    e.s = 0,
                    e.clamp(),
                    this.s != t.s && b.ZERO.subTo(e, e)
                }
                function C(t) {
                    for (var e = this.abs(), i = t.t = 2 * e.t; --i >= 0; )
                        t[i] = 0;
                    for (i = 0; i < e.t - 1; ++i) {
                        var s = e.am(i, e[i], t, 2 * i, 0, 1);
                        (t[i + e.t] += e.am(i + 1, 2 * e[i], t, 2 * i + 1, s, e.t - i - 1)) >= e.DV && (t[i + e.t] -= e.DV,
                        t[i + e.t + 1] = 1)
                    }
                    t.t > 0 && (t[t.t - 1] += e.am(i, e[i], t, 2 * i, 0, 1)),
                    t.s = 0,
                    t.clamp()
                }
                function T(t, e, i) {
                    var s = t.abs();
                    if (!(s.t <= 0)) {
                        var n = this.abs();
                        if (n.t < s.t)
                            return null != e && e.fromInt(0),
                            void (null != i && this.copyTo(i));
                        null == i && (i = y());
                        var r = y()
                          , o = this.s
                          , a = t.s
                          , c = this.DB - w(s[s.t - 1]);
                        c > 0 ? (s.lShiftTo(c, r),
                        n.lShiftTo(c, i)) : (s.copyTo(r),
                        n.copyTo(i));
                        var l = r.t
                          , u = r[l - 1];
                        if (0 != u) {
                            var d = u * (1 << this.F1) + (l > 1 ? r[l - 2] >> this.F2 : 0)
                              , p = this.FV / d
                              , h = (1 << this.F1) / d
                              , f = 1 << this.F2
                              , g = i.t
                              , m = g - l
                              , v = null == e ? y() : e;
                            for (r.dlShiftTo(m, v),
                            i.compareTo(v) >= 0 && (i[i.t++] = 1,
                            i.subTo(v, i)),
                            b.ONE.dlShiftTo(l, v),
                            v.subTo(r, r); r.t < l; )
                                r[r.t++] = 0;
                            for (; --m >= 0; ) {
                                var _ = i[--g] == u ? this.DM : Math.floor(i[g] * p + (i[g - 1] + f) * h);
                                if ((i[g] += r.am(0, _, i, m, 0, l)) < _)
                                    for (r.dlShiftTo(m, v),
                                    i.subTo(v, i); i[g] < --_; )
                                        i.subTo(v, i)
                            }
                            null != e && (i.drShiftTo(l, e),
                            o != a && b.ZERO.subTo(e, e)),
                            i.t = l,
                            i.clamp(),
                            c > 0 && i.rShiftTo(c, i),
                            0 > o && b.ZERO.subTo(i, i)
                        }
                    }
                }
                function I(t) {
                    var e = y();
                    return this.abs().divRemTo(t, null, e),
                    this.s < 0 && e.compareTo(b.ZERO) > 0 && t.subTo(e, e),
                    e
                }
                function $(t) {
                    this.m = t
                }
                function P(t) {
                    return t.s < 0 || t.compareTo(this.m) >= 0 ? t.mod(this.m) : t
                }
                function R(t) {
                    return t
                }
                function A(t) {
                    t.divRemTo(this.m, null, t)
                }
                function E(t, e, i) {
                    t.multiplyTo(e, i),
                    this.reduce(i)
                }
                function M(t, e) {
                    t.squareTo(e),
                    this.reduce(e)
                }
                function N() {
                    if (this.t < 1)
                        return 0;
                    var t = this[0];
                    if (0 == (1 & t))
                        return 0;
                    var e = 3 & t;
                    return e = e * (2 - (15 & t) * e) & 15,
                    e = e * (2 - (255 & t) * e) & 255,
                    e = e * (2 - ((65535 & t) * e & 65535)) & 65535,
                    e = e * (2 - t * e % this.DV) % this.DV,
                    e > 0 ? this.DV - e : -e
                }
                function O(t) {
                    this.m = t,
                    this.mp = t.invDigit(),
                    this.mpl = 32767 & this.mp,
                    this.mph = this.mp >> 15,
                    this.um = (1 << t.DB - 15) - 1,
                    this.mt2 = 2 * t.t
                }
                function B(t) {
                    var e = y();
                    return t.abs().dlShiftTo(this.m.t, e),
                    e.divRemTo(this.m, null, e),
                    t.s < 0 && e.compareTo(b.ZERO) > 0 && this.m.subTo(e, e),
                    e
                }
                function j(t) {
                    var e = y();
                    return t.copyTo(e),
                    this.reduce(e),
                    e
                }
                function L(t) {
                    for (; t.t <= this.mt2; )
                        t[t.t++] = 0;
                    for (var e = 0; e < this.m.t; ++e) {
                        var i = 32767 & t[e]
                          , s = i * this.mpl + ((i * this.mph + (t[e] >> 15) * this.mpl & this.um) << 15) & t.DM;
                        for (i = e + this.m.t,
                        t[i] += this.m.am(0, s, t, e, 0, this.m.t); t[i] >= t.DV; )
                            t[i] -= t.DV,
                            t[++i]++
                    }
                    t.clamp(),
                    t.drShiftTo(this.m.t, t),
                    t.compareTo(this.m) >= 0 && t.subTo(this.m, t)
                }
                function F(t, e) {
                    t.squareTo(e),
                    this.reduce(e)
                }
                function K(t, e, i) {
                    t.multiplyTo(e, i),
                    this.reduce(i)
                }
                function U() {
                    return 0 == (this.t > 0 ? 1 & this[0] : this.s)
                }
                function V(t, e) {
                    if (t > 4294967295 || 1 > t)
                        return b.ONE;
                    var i = y()
                      , s = y()
                      , n = e.convert(this)
                      , r = w(t) - 1;
                    for (n.copyTo(i); --r >= 0; )
                        if (e.sqrTo(i, s),
                        (t & 1 << r) > 0)
                            e.mulTo(s, n, i);
                        else {
                            var o = i;
                            i = s,
                            s = o
                        }
                    return e.revert(i)
                }
                ;function z(t, e) {
                    var i;
                    return i = 256 > t || e.isEven() ? new $(e) : new O(e),
                    this.exp(t, i)
                }
                function q() {
                    var t = y();
                    return this.copyTo(t),
                    t
                }
                function H() {
                    if (this.s < 0) {
                        if (1 == this.t)
                            return this[0] - this.DV;
                        if (0 == this.t)
                            return -1
                    } else {
                        if (1 == this.t)
                            return this[0];
                        if (0 == this.t)
                            return 0
                    }
                    return (this[1] & (1 << 32 - this.DB) - 1) << this.DB | this[0]
                }
                function J() {
                    return 0 == this.t ? this.s : this[0] << 24 >> 24
                }
                function G() {
                    return 0 == this.t ? this.s : this[0] << 16 >> 16
                }
                function Y(t) {
                    return Math.floor(Math.LN2 * this.DB / Math.log(t))
                }
                function W() {
                    return this.s < 0 ? -1 : this.t <= 0 || 1 == this.t && this[0] <= 0 ? 0 : 1
                }
                function Z(t) {
                    if (null == t && (t = 10),
                    0 == this.signum() || 2 > t || t > 36)
                        return "0";
                    var e = this.chunkSize(t)
                      , i = Math.pow(t, e)
                      , s = m(i)
                      , n = y()
                      , r = y()
                      , o = "";
                    for (this.divRemTo(s, n, r); n.signum() > 0; )
                        o = (i + r.intValue()).toString(t).substr(1) + o,
                        n.divRemTo(s, n, r);
                    return r.intValue().toString(t) + o
                }
                function Q(t, e) {
                    this.fromInt(0),
                    null == e && (e = 10);
                    for (var i = this.chunkSize(e), s = Math.pow(e, i), n = !1, r = 0, o = 0, a = 0; a < t.length; ++a) {
                        var c = l(t, a);
                        0 > c ? "-" == t.charAt(a) && 0 == this.signum() && (n = !0) : (o = e * o + c,
                        ++r >= i && (this.dMultiply(s),
                        this.dAddOffset(o, 0),
                        r = 0,
                        o = 0))
                    }
                    r > 0 && (this.dMultiply(Math.pow(e, r)),
                    this.dAddOffset(o, 0)),
                    n && b.ZERO.subTo(this, this)
                }
                function X(t, e, i) {
                    if ("number" == typeof e)
                        if (2 > t)
                            this.fromInt(1);
                        else
                            for (this.fromNumber(t, i),
                            this.testBit(t - 1) || this.bitwiseTo(b.ONE.shiftLeft(t - 1), at, this),
                            this.isEven() && this.dAddOffset(1, 0); !this.isProbablePrime(e); )
                                this.dAddOffset(2, 0),
                                this.bitLength() > t && this.subTo(b.ONE.shiftLeft(t - 1), this);
                    else {
                        var s = new Array
                          , n = 7 & t;
                        s.length = (t >> 3) + 1,
                        e.nextBytes(s),
                        n > 0 ? s[0] &= (1 << n) - 1 : s[0] = 0,
                        this.fromString(s, 256)
                    }
                }
                function tt() {
                    var t = this.t
                      , e = new Array;
                    e[0] = this.s;
                    var i, s = this.DB - t * this.DB % 8, n = 0;
                    if (t-- > 0)
                        for (s < this.DB && (i = this[t] >> s) != (this.s & this.DM) >> s && (e[n++] = i | this.s << this.DB - s); t >= 0; )
                            8 > s ? (i = (this[t] & (1 << s) - 1) << 8 - s,
                            i |= this[--t] >> (s += this.DB - 8)) : (i = this[t] >> (s -= 8) & 255,
                            0 >= s && (s += this.DB,
                            --t)),
                            0 != (128 & i) && (i |= -256),
                            0 == n && (128 & this.s) != (128 & i) && ++n,
                            (n > 0 || i != this.s) && (e[n++] = i);
                    return e
                }
                function et(t) {
                    return 0 == this.compareTo(t)
                }
                function it(t) {
                    return this.compareTo(t) < 0 ? this : t
                }
                function st(t) {
                    return this.compareTo(t) > 0 ? this : t
                }
                function nt(t, e, i) {
                    var s, n, r = Math.min(t.t, this.t);
                    for (s = 0; r > s; ++s)
                        i[s] = e(this[s], t[s]);
                    if (t.t < this.t) {
                        for (n = t.s & this.DM,
                        s = r; s < this.t; ++s)
                            i[s] = e(this[s], n);
                        i.t = this.t
                    } else {
                        for (n = this.s & this.DM,
                        s = r; s < t.t; ++s)
                            i[s] = e(n, t[s]);
                        i.t = t.t
                    }
                    i.s = e(this.s, t.s),
                    i.clamp()
                }
                function rt(t, e) {
                    return t & e
                }
                function ot(t) {
                    var e = y();
                    return this.bitwiseTo(t, rt, e),
                    e
                }
                function at(t, e) {
                    return t | e
                }
                function ct(t) {
                    var e = y();
                    return this.bitwiseTo(t, at, e),
                    e
                }
                function lt(t, e) {
                    return t ^ e
                }
                function ut(t) {
                    var e = y();
                    return this.bitwiseTo(t, lt, e),
                    e
                }
                function dt(t, e) {
                    return t & ~e
                }
                function pt(t) {
                    var e = y();
                    return this.bitwiseTo(t, dt, e),
                    e
                }
                function ht() {
                    for (var t = y(), e = 0; e < this.t; ++e)
                        t[e] = this.DM & ~this[e];
                    return t.t = this.t,
                    t.s = ~this.s,
                    t
                }
                function ft(t) {
                    var e = y();
                    return 0 > t ? this.rShiftTo(-t, e) : this.lShiftTo(t, e),
                    e
                }
                function gt(t) {
                    var e = y();
                    return 0 > t ? this.lShiftTo(-t, e) : this.rShiftTo(t, e),
                    e
                }
                function mt(t) {
                    if (0 == t)
                        return -1;
                    var e = 0;
                    return 0 == (65535 & t) && (t >>= 16,
                    e += 16),
                    0 == (255 & t) && (t >>= 8,
                    e += 8),
                    0 == (15 & t) && (t >>= 4,
                    e += 4),
                    0 == (3 & t) && (t >>= 2,
                    e += 2),
                    0 == (1 & t) && ++e,
                    e
                }
                function vt() {
                    for (var t = 0; t < this.t; ++t)
                        if (0 != this[t])
                            return t * this.DB + mt(this[t]);
                    return this.s < 0 ? this.t * this.DB : -1
                }
                function _t(t) {
                    for (var e = 0; 0 != t; )
                        t &= t - 1,
                        ++e;
                    return e
                }
                function bt() {
                    for (var t = 0, e = this.s & this.DM, i = 0; i < this.t; ++i)
                        t += _t(this[i] ^ e);
                    return t
                }
                function yt(t) {
                    var e = Math.floor(t / this.DB);
                    return e >= this.t ? 0 != this.s : 0 != (this[e] & 1 << t % this.DB)
                }
                function wt(t, e) {
                    var i = b.ONE.shiftLeft(t);
                    return this.bitwiseTo(i, e, i),
                    i
                }
                function kt(t) {
                    return this.changeBit(t, at)
                }
                function xt(t) {
                    return this.changeBit(t, dt)
                }
                function Dt(t) {
                    return this.changeBit(t, lt)
                }
                function St(t, e) {
                    for (var i = 0, s = 0, n = Math.min(t.t, this.t); n > i; )
                        s += this[i] + t[i],
                        e[i++] = s & this.DM,
                        s >>= this.DB;
                    if (t.t < this.t) {
                        for (s += t.s; i < this.t; )
                            s += this[i],
                            e[i++] = s & this.DM,
                            s >>= this.DB;
                        s += this.s
                    } else {
                        for (s += this.s; i < t.t; )
                            s += t[i],
                            e[i++] = s & this.DM,
                            s >>= this.DB;
                        s += t.s
                    }
                    e.s = 0 > s ? -1 : 0,
                    s > 0 ? e[i++] = s : -1 > s && (e[i++] = this.DV + s),
                    e.t = i,
                    e.clamp()
                }
                function Ct(t) {
                    var e = y();
                    return this.addTo(t, e),
                    e
                }
                function Tt(t) {
                    var e = y();
                    return this.subTo(t, e),
                    e
                }
                function It(t) {
                    var e = y();
                    return this.multiplyTo(t, e),
                    e
                }
                function $t() {
                    var t = y();
                    return this.squareTo(t),
                    t
                }
                function Pt(t) {
                    var e = y();
                    return this.divRemTo(t, e, null),
                    e
                }
                function Rt(t) {
                    var e = y();
                    return this.divRemTo(t, null, e),
                    e
                }
                function At(t) {
                    var e = y()
                      , i = y();
                    return this.divRemTo(t, e, i),
                    new Array(e,i)
                }
                function Et(t) {
                    this[this.t] = this.am(0, t - 1, this, 0, 0, this.t),
                    ++this.t,
                    this.clamp()
                }
                function Mt(t, e) {
                    if (0 != t) {
                        for (; this.t <= e; )
                            this[this.t++] = 0;
                        for (this[e] += t; this[e] >= this.DV; )
                            this[e] -= this.DV,
                            ++e >= this.t && (this[this.t++] = 0),
                            ++this[e]
                    }
                }
                function Nt() {}
                function Ot(t) {
                    return t
                }
                function Bt(t, e, i) {
                    t.multiplyTo(e, i)
                }
                function jt(t, e) {
                    t.squareTo(e)
                }
                function Lt(t) {
                    return this.exp(t, new Nt)
                }
                function Ft(t, e, i) {
                    var s = Math.min(this.t + t.t, e);
                    for (i.s = 0,
                    i.t = s; s > 0; )
                        i[--s] = 0;
                    var n;
                    for (n = i.t - this.t; n > s; ++s)
                        i[s + this.t] = this.am(0, t[s], i, s, 0, this.t);
                    for (n = Math.min(t.t, e); n > s; ++s)
                        this.am(0, t[s], i, s, 0, e - s);
                    i.clamp()
                }
                function Kt(t, e, i) {
                    --e;
                    var s = i.t = this.t + t.t - e;
                    for (i.s = 0; --s >= 0; )
                        i[s] = 0;
                    for (s = Math.max(e - this.t, 0); s < t.t; ++s)
                        i[this.t + s - e] = this.am(e - s, t[s], i, 0, 0, this.t + s - e);
                    i.clamp(),
                    i.drShiftTo(1, i)
                }
                function Ut(t) {
                    this.r2 = y(),
                    this.q3 = y(),
                    b.ONE.dlShiftTo(2 * t.t, this.r2),
                    this.mu = this.r2.divide(t),
                    this.m = t
                }
                function Vt(t) {
                    if (t.s < 0 || t.t > 2 * this.m.t)
                        return t.mod(this.m);
                    if (t.compareTo(this.m) < 0)
                        return t;
                    var e = y();
                    return t.copyTo(e),
                    this.reduce(e),
                    e
                }
                function zt(t) {
                    return t
                }
                function qt(t) {
                    for (t.drShiftTo(this.m.t - 1, this.r2),
                    t.t > this.m.t + 1 && (t.t = this.m.t + 1,
                    t.clamp()),
                    this.mu.multiplyUpperTo(this.r2, this.m.t + 1, this.q3),
                    this.m.multiplyLowerTo(this.q3, this.m.t + 1, this.r2); t.compareTo(this.r2) < 0; )
                        t.dAddOffset(1, this.m.t + 1);
                    for (t.subTo(this.r2, t); t.compareTo(this.m) >= 0; )
                        t.subTo(this.m, t)
                }
                function Ht(t, e) {
                    t.squareTo(e),
                    this.reduce(e)
                }
                function Jt(t, e, i) {
                    t.multiplyTo(e, i),
                    this.reduce(i)
                }
                function Gt(t, e) {
                    var i, s, n = t.bitLength(), r = m(1);
                    if (0 >= n)
                        return r;
                    i = 18 > n ? 1 : 48 > n ? 3 : 144 > n ? 4 : 768 > n ? 5 : 6,
                    s = 8 > n ? new $(e) : e.isEven() ? new Ut(e) : new O(e);
                    var o = new Array
                      , a = 3
                      , c = i - 1
                      , l = (1 << i) - 1;
                    if (o[1] = s.convert(this),
                    i > 1) {
                        var u = y();
                        for (s.sqrTo(o[1], u); l >= a; )
                            o[a] = y(),
                            s.mulTo(u, o[a - 2], o[a]),
                            a += 2
                    }
                    var d, p, h = t.t - 1, f = !0, g = y();
                    for (n = w(t[h]) - 1; h >= 0; ) {
                        for (n >= c ? d = t[h] >> n - c & l : (d = (t[h] & (1 << n + 1) - 1) << c - n,
                        h > 0 && (d |= t[h - 1] >> this.DB + n - c)),
                        a = i; 0 == (1 & d); )
                            d >>= 1,
                            --a;
                        if ((n -= a) < 0 && (n += this.DB,
                        --h),
                        f)
                            o[d].copyTo(r),
                            f = !1;
                        else {
                            for (; a > 1; )
                                s.sqrTo(r, g),
                                s.sqrTo(g, r),
                                a -= 2;
                            a > 0 ? s.sqrTo(r, g) : (p = r,
                            r = g,
                            g = p),
                            s.mulTo(g, o[d], r)
                        }
                        for (; h >= 0 && 0 == (t[h] & 1 << n); )
                            s.sqrTo(r, g),
                            p = r,
                            r = g,
                            g = p,
                            --n < 0 && (n = this.DB - 1,
                            --h)
                    }
                    return s.revert(r)
                }
                function Yt(t) {
                    var e = this.s < 0 ? this.negate() : this.clone()
                      , i = t.s < 0 ? t.negate() : t.clone();
                    if (e.compareTo(i) < 0) {
                        var s = e;
                        e = i,
                        i = s
                    }
                    var n = e.getLowestSetBit()
                      , r = i.getLowestSetBit();
                    if (0 > r)
                        return e;
                    for (r > n && (r = n),
                    r > 0 && (e.rShiftTo(r, e),
                    i.rShiftTo(r, i)); e.signum() > 0; )
                        (n = e.getLowestSetBit()) > 0 && e.rShiftTo(n, e),
                        (n = i.getLowestSetBit()) > 0 && i.rShiftTo(n, i),
                        e.compareTo(i) >= 0 ? (e.subTo(i, e),
                        e.rShiftTo(1, e)) : (i.subTo(e, i),
                        i.rShiftTo(1, i));
                    return r > 0 && i.lShiftTo(r, i),
                    i
                }
                function Wt(t) {
                    if (0 >= t)
                        return 0;
                    var e = this.DV % t
                      , i = this.s < 0 ? t - 1 : 0;
                    if (this.t > 0)
                        if (0 == e)
                            i = this[0] % t;
                        else
                            for (var s = this.t - 1; s >= 0; --s)
                                i = (e * i + this[s]) % t;
                    return i
                }
                function Zt(t) {
                    var e = t.isEven();
                    if (this.isEven() && e || 0 == t.signum())
                        return b.ZERO;
                    for (var i = t.clone(), s = this.clone(), n = m(1), r = m(0), o = m(0), a = m(1); 0 != i.signum(); ) {
                        for (; i.isEven(); )
                            i.rShiftTo(1, i),
                            e ? (n.isEven() && r.isEven() || (n.addTo(this, n),
                            r.subTo(t, r)),
                            n.rShiftTo(1, n)) : r.isEven() || r.subTo(t, r),
                            r.rShiftTo(1, r);
                        for (; s.isEven(); )
                            s.rShiftTo(1, s),
                            e ? (o.isEven() && a.isEven() || (o.addTo(this, o),
                            a.subTo(t, a)),
                            o.rShiftTo(1, o)) : a.isEven() || a.subTo(t, a),
                            a.rShiftTo(1, a);
                        i.compareTo(s) >= 0 ? (i.subTo(s, i),
                        e && n.subTo(o, n),
                        r.subTo(a, r)) : (s.subTo(i, s),
                        e && o.subTo(n, o),
                        a.subTo(r, a))
                    }
                    return 0 != s.compareTo(b.ONE) ? b.ZERO : a.compareTo(t) >= 0 ? a.subtract(t) : a.signum() < 0 ? (a.addTo(t, a),
                    a.signum() < 0 ? a.add(t) : a) : a
                }
                function Qt(t) {
                    var e, i = this.abs();
                    if (1 == i.t && i[0] <= $e[$e.length - 1]) {
                        for (e = 0; e < $e.length; ++e)
                            if (i[0] == $e[e])
                                return !0;
                        return !1
                    }
                    if (i.isEven())
                        return !1;
                    for (e = 1; e < $e.length; ) {
                        for (var s = $e[e], n = e + 1; n < $e.length && Pe > s; )
                            s *= $e[n++];
                        for (s = i.modInt(s); n > e; )
                            if (s % $e[e++] == 0)
                                return !1
                    }
                    return i.millerRabin(t)
                }
                function Xt(t) {
                    var e = this.subtract(b.ONE)
                      , i = e.getLowestSetBit();
                    if (0 >= i)
                        return !1;
                    var s = e.shiftRight(i);
                    t = t + 1 >> 1,
                    t > $e.length && (t = $e.length);
                    for (var n = y(), r = 0; t > r; ++r) {
                        var o = n.modPow(s, this);
                        if (0 != o.compareTo(b.ONE) && 0 != o.compareTo(e)) {
                            for (var a = 1; a++ < i && 0 != o.compareTo(e); )
                                if (o = o.modPowInt(2, this),
                                0 == o.compareTo(b.ONE))
                                    return !1;
                            if (0 != o.compareTo(e))
                                return !1
                        }
                    }
                    return !0
                }
                function te() {
                    this.i = 0,
                    this.j = 0,
                    this.S = new Array
                }
                function ee(t) {
                    var e, i, s;
                    for (e = 0; 256 > e; ++e)
                        this.S[e] = e;
                    for (i = 0,
                    e = 0; 256 > e; ++e)
                        i = i + this.S[e] + t[e % t.length] & 255,
                        s = this.S[e],
                        this.S[e] = this.S[i],
                        this.S[i] = s;
                    this.i = 0,
                    this.j = 0
                }
                function ie() {
                    var t;
                    return this.i = this.i + 1 & 255,
                    this.j = this.j + this.S[this.i] & 255,
                    t = this.S[this.i],
                    this.S[this.i] = this.S[this.j],
                    this.S[this.j] = t,
                    this.S[t + this.S[this.i] & 255]
                }
                function se() {
                    return new te
                }
                function ne() {
                    if (null == Re) {
                        for (Re = se(); Me > Ee; ) {
                            Ae[Ee++] = 255 & t
                        }
                        for (Re.init(Ae),
                        Ee = 0; Ee < Ae.length; ++Ee)
                            Ae[Ee] = 0;
                        Ee = 0
                    }
                    return Re.next()
                }
                function re(t) {
                    var e;
                    for (e = 0; e < t.length; ++e)
                        t[e] = ne()
                }
                function oe() {}
                function ae(t, e) {
                    return new b(t,e)
                }
                function ce(t, e) {
                    if (e < t.length + 11)
                        return console.error("Message too long for RSA"),
                        null;
                    for (var i = new Array, s = t.length - 1; s >= 0 && e > 0; ) {
                        var n = t.charCodeAt(s--);
                        128 > n ? i[--e] = n : n > 127 && 2048 > n ? (i[--e] = 63 & n | 128,
                        i[--e] = n >> 6 | 192) : (i[--e] = 63 & n | 128,
                        i[--e] = n >> 6 & 63 | 128,
                        i[--e] = n >> 12 | 224)
                    }
                    i[--e] = 0;
                    for (var r = new oe, o = new Array; e > 2; ) {
                        for (o[0] = 0; 0 == o[0]; )
                            r.nextBytes(o);
                        i[--e] = o[0]
                    }
                    return i[--e] = 2,
                    i[--e] = 0,
                    new b(i)
                }
                function le() {
                    this.n = null,
                    this.e = 0,
                    this.d = null,
                    this.p = null,
                    this.q = null,
                    this.dmp1 = null,
                    this.dmq1 = null,
                    this.coeff = null
                }
                function ue(t, e) {
                    null != t && null != e && t.length > 0 && e.length > 0 ? (this.n = ae(t, 16),
                    this.e = parseInt(e, 16)) : console.error("Invalid RSA public key")
                }
                function de(t) {
                    return t.modPowInt(this.e, this.n)
                }
                function pe(t) {
                    var e = ce(t, this.n.bitLength() + 7 >> 3);
                    if (null == e)
                        return null;
                    var i = this.doPublic(e);
                    if (null == i)
                        return null;
                    var s = i.toString(16);
                    return 0 == (1 & s.length) ? s : "0" + s
                }
                function he(t, e) {
                    for (var i = t.toByteArray(), s = 0; s < i.length && 0 == i[s]; )
                        ++s;
                    if (i.length - s != e - 1 || 2 != i[s])
                        return null;
                    for (++s; 0 != i[s]; )
                        if (++s >= i.length)
                            return null;
                    for (var n = ""; ++s < i.length; ) {
                        var r = 255 & i[s];
                        128 > r ? n += String.fromCharCode(r) : r > 191 && 224 > r ? (n += String.fromCharCode((31 & r) << 6 | 63 & i[s + 1]),
                        ++s) : (n += String.fromCharCode((15 & r) << 12 | (63 & i[s + 1]) << 6 | 63 & i[s + 2]),
                        s += 2)
                    }
                    return n
                }
                function fe(t, e, i) {
                    null != t && null != e && t.length > 0 && e.length > 0 ? (this.n = ae(t, 16),
                    this.e = parseInt(e, 16),
                    this.d = ae(i, 16)) : console.error("Invalid RSA private key")
                }
                function ge(t, e, i, s, n, r, o, a) {
                    null != t && null != e && t.length > 0 && e.length > 0 ? (this.n = ae(t, 16),
                    this.e = parseInt(e, 16),
                    this.d = ae(i, 16),
                    this.p = ae(s, 16),
                    this.q = ae(n, 16),
                    this.dmp1 = ae(r, 16),
                    this.dmq1 = ae(o, 16),
                    this.coeff = ae(a, 16)) : console.error("Invalid RSA private key")
                }
                function me(t, e) {
                    var i = new oe
                      , s = t >> 1;
                    this.e = parseInt(e, 16);
                    for (var n = new b(e,16); ; ) {
                        for (; this.p = new b(t - s,1,i),
                        0 != this.p.subtract(b.ONE).gcd(n).compareTo(b.ONE) || !this.p.isProbablePrime(10); )
                            ;
                        for (; this.q = new b(s,1,i),
                        0 != this.q.subtract(b.ONE).gcd(n).compareTo(b.ONE) || !this.q.isProbablePrime(10); )
                            ;
                        if (this.p.compareTo(this.q) <= 0) {
                            var r = this.p;
                            this.p = this.q,
                            this.q = r
                        }
                        var o = this.p.subtract(b.ONE)
                          , a = this.q.subtract(b.ONE)
                          , c = o.multiply(a);
                        if (0 == c.gcd(n).compareTo(b.ONE)) {
                            this.n = this.p.multiply(this.q),
                            this.d = n.modInverse(c),
                            this.dmp1 = this.d.mod(o),
                            this.dmq1 = this.d.mod(a),
                            this.coeff = this.q.modInverse(this.p);
                            break
                        }
                    }
                }
                function ve(t) {
                    if (null == this.p || null == this.q)
                        return t.modPow(this.d, this.n);
                    for (var e = t.mod(this.p).modPow(this.dmp1, this.p), i = t.mod(this.q).modPow(this.dmq1, this.q); e.compareTo(i) < 0; )
                        e = e.add(this.p);
                    return e.subtract(i).multiply(this.coeff).mod(this.p).multiply(this.q).add(i)
                }
                function _e(t) {
                    var e = ae(t, 16)
                      , i = this.doPrivate(e);
                    return null == i ? null : he(i, this.n.bitLength() + 7 >> 3)
                }
                function be(t) {
                    var e, i, s = "";
                    for (e = 0; e + 3 <= t.length; e += 3)
                        i = parseInt(t.substring(e, e + 3), 16),
                        s += je.charAt(i >> 6) + je.charAt(63 & i);
                    for (e + 1 == t.length ? (i = parseInt(t.substring(e, e + 1), 16),
                    s += je.charAt(i << 2)) : e + 2 == t.length && (i = parseInt(t.substring(e, e + 2), 16),
                    s += je.charAt(i >> 2) + je.charAt((3 & i) << 4)); (3 & s.length) > 0; )
                        s += Le;
                    return s
                }
                function ye(t) {
                    var e, i, s = "", n = 0;
                    for (e = 0; e < t.length && t.charAt(e) != Le; ++e)
                        v = je.indexOf(t.charAt(e)),
                        v < 0 || (0 == n ? (s += c(v >> 2),
                        i = 3 & v,
                        n = 1) : 1 == n ? (s += c(i << 2 | v >> 4),
                        i = 15 & v,
                        n = 2) : 2 == n ? (s += c(i),
                        s += c(v >> 2),
                        i = 3 & v,
                        n = 3) : (s += c(i << 2 | v >> 4),
                        s += c(15 & v),
                        n = 0));
                    return 1 == n && (s += c(i << 2)),
                    s
                }
                try {
                    var we, ke, xe = false;
                    xe && "Microsoft Internet Explorer" == navigator.appName ? (b.prototype.am = i,
                    we = 26) : xe && "Netscape" != navigator.appName ? (b.prototype.am = e,
                    we = 26) : (b.prototype.am = s,
                    we = 28),
                    b.prototype.DB = we,
                    b.prototype.DM = (1 << we) - 1,
                    b.prototype.DV = 1 << we;
                } catch (e) {}
                var De = 52;
                b.prototype.FV = Math.pow(2, De),
                b.prototype.F1 = De - we,
                b.prototype.F2 = 2 * we - De;
                var Se, Ce, Te = "0123456789abcdefghijklmnopqrstuvwxyz", Ie = new Array;
                for (Se = "0".charCodeAt(0),
                Ce = 0; 9 >= Ce; ++Ce)
                    Ie[Se++] = Ce;
                for (Se = "a".charCodeAt(0),
                Ce = 10; 36 > Ce; ++Ce)
                    Ie[Se++] = Ce;
                for (Se = "A".charCodeAt(0),
                Ce = 10; 36 > Ce; ++Ce)
                    Ie[Se++] = Ce;
                $.prototype.convert = P,
                $.prototype.revert = R,
                $.prototype.reduce = A,
                $.prototype.mulTo = E,
                $.prototype.sqrTo = M,
                O.prototype.convert = B,
                O.prototype.revert = j,
                O.prototype.reduce = L,
                O.prototype.mulTo = K,
                O.prototype.sqrTo = F,
                b.prototype.copyTo = p,
                b.prototype.fromInt = n,
                b.prototype.fromString = h,
                b.prototype.clamp = r,
                b.prototype.dlShiftTo = g,
                b.prototype.drShiftTo = _,
                b.prototype.lShiftTo = k,
                b.prototype.rShiftTo = x,
                b.prototype.subTo = D,
                b.prototype.multiplyTo = S,
                b.prototype.squareTo = C,
                b.prototype.divRemTo = T,
                b.prototype.invDigit = N,
                b.prototype.isEven = U,
                b.prototype.exp = V,
                b.prototype.toString = o,
                b.prototype.negate = f,
                b.prototype.abs = a,
                b.prototype.compareTo = u,
                b.prototype.bitLength = d,
                b.prototype.mod = I,
                b.prototype.modPowInt = z,
                b.ZERO = m(0),
                b.ONE = m(1),
                Nt.prototype.convert = Ot,
                Nt.prototype.revert = Ot,
                Nt.prototype.mulTo = Bt,
                Nt.prototype.sqrTo = jt,
                Ut.prototype.convert = Vt,
                Ut.prototype.revert = zt,
                Ut.prototype.reduce = qt,
                Ut.prototype.mulTo = Jt,
                Ut.prototype.sqrTo = Ht;
                var $e = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607, 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701, 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811, 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911, 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, [][(![] + [])[!+[] + !![] + !![]] + ([] + {})[+!![]] + (!![] + [])[+!![]] + (!![] + [])[+[]]][([] + {})[!+[] + !![] + !![] + !![] + !![]] + ([] + {})[+!![]] + ([][[]] + [])[+!![]] + (![] + [])[!+[] + !![] + !![]] + (!![] + [])[+[]] + (!![] + [])[+!![]] + ([][[]] + [])[+[]] + ([] + {})[!+[] + !![] + !![] + !![] + !![]] + (!![] + [])[+[]] + ([] + {})[+!![]] + (!![] + [])[+!![]]]((!+[] + !![] + !![] + !![] + !![] + !![] + !![] + !![] + !![] + []) + (!+[] + !![] + !![] + !![] + !![] + !![] + !![] + !![] + !![] + []) + (!+[] + !![] + !![] + !![] + !![] + !![] + !![] + []))(+[])]
                  , Pe = (1 << 26) / $e[$e.length - 1];
                b.prototype.chunkSize = Y,
                b.prototype.toRadix = Z,
                b.prototype.fromRadix = Q,
                b.prototype.fromNumber = X,
                b.prototype.bitwiseTo = nt,
                b.prototype.changeBit = wt,
                b.prototype.addTo = St,
                b.prototype.dMultiply = Et,
                b.prototype.dAddOffset = Mt,
                b.prototype.multiplyLowerTo = Ft,
                b.prototype.multiplyUpperTo = Kt,
                b.prototype.modInt = Wt,
                b.prototype.millerRabin = Xt,
                b.prototype.clone = q,
                b.prototype.intValue = H,
                b.prototype.byteValue = J,
                b.prototype.shortValue = G,
                b.prototype.signum = W,
                b.prototype.toByteArray = tt,
                b.prototype.equals = et,
                b.prototype.min = it,
                b.prototype.max = st,
                b.prototype.and = ot,
                b.prototype.or = ct,
                b.prototype.xor = ut,
                b.prototype.andNot = pt,
                b.prototype.not = ht,
                b.prototype.shiftLeft = ft,
                b.prototype.shiftRight = gt,
                b.prototype.getLowestSetBit = vt,
                b.prototype.bitCount = bt,
                b.prototype.testBit = yt,
                b.prototype.setBit = kt,
                b.prototype.clearBit = xt,
                b.prototype.flipBit = Dt,
                b.prototype.add = Ct,
                b.prototype.subtract = Tt,
                b.prototype.multiply = It,
                b.prototype.divide = Pt,
                b.prototype.remainder = Rt,
                b.prototype.divideAndRemainder = At,
                b.prototype.modPow = Gt,
                b.prototype.modInverse = Zt,
                b.prototype.pow = Lt,
                b.prototype.gcd = Yt,
                b.prototype.isProbablePrime = Qt,
                b.prototype.square = $t,
                te.prototype.init = ee,
                te.prototype.next = ie;
                var Re, Ae, Ee, Me = 256;
                if (null == Ae) {
                    Ae = new Array,
                    Ee = 0;
                    var Ne;
                    var Be = function(t) {
                        if (this.count = this.count || 0,
                        this.count >= 256 || Ee >= Me)
                            try {
                                var e = t.x + t.y;
                                Ae[Ee++] = 255 & e,
                                this.count += 1
                            } catch (y) {}
                    };
                    window.addEventListener ? window.addEventListener("mousemove", Be, !1) : window.attachEvent && window.attachEvent("onmousemove", Be)
                }
                oe.prototype.nextBytes = re,
                le.prototype.doPublic = de,
                le.prototype.setPublic = ue,
                le.prototype.encrypt = pe,
                le.prototype.doPrivate = ve,
                le.prototype.setPrivate = fe,
                le.prototype.setPrivateEx = ge,
                le.prototype.generate = me,
                le.prototype.decrypt = _e,
                function() {
                    var t = function(t, e, n) {
                        var r =