function S(q) {
	q = q.toString()
    var l = 8;
    var o = 0;

    function i(r, v) {
        var u = (r & 65535) + (v & 65535);
        var t = (r >> 16) + (v >> 16) + (u >> 16);
        return (t << 16) | (u & 65535)
    }
    function e(t, r) {
        return (t >>> r) | (t << (32 - r))
    }
    function f(t, r) {
        return (t >>> r)
    }
    function a(r, u, t) {
        return ((r & u) ^ ((~r) & t))
    }
    function d(r, u, t) {
        return ((r & u) ^ (r & t) ^ (u & t))
    }
    function g(r) {
        return (e(r, 2) ^ e(r, 13) ^ e(r, 22))
    }
    function b(r) {
        return (e(r, 6) ^ e(r, 11) ^ e(r, 25))
    }
    function p(r) {
        return (e(r, 7) ^ e(r, 18) ^ f(r, 3))
    }
    function j(r) {
        return (e(r, 17) ^ e(r, 19) ^ f(r, 10))
    }
    function c(t, u) {
        var G = new Array(1116352408, 1899447441, 3049323471, 3921009573, 961987163, 1508970993, 2453635748, 2870763221, 3624381080, 310598401, 607225278, 1426881987, 1925078388, 2162078206, 2614888103, 3248222580, 3835390401, 4022224774, 264347078, 604807628, 770255983, 1249150122, 1555081692, 1996064986, 2554220882, 2821834349, 2952996808, 3210313671, 3336571891, 3584528711, 113926993, 338241895, 666307205, 773529912, 1294757372, 1396182291, 1695183700, 1986661051, 2177026350, 2456956037, 2730485921, 2820302411, 3259730800, 3345764771, 3516065817, 3600352804, 4094571909, 275423344, 430227734, 506948616, 659060556, 883997877, 958139571, 1322822218, 1537002063, 1747873779, 1955562222, 2024104815, 2227730452, 2361852424, 2428436474, 2756734187, 3204031479, 3329325298);
        var v = new Array(1779033703, 3144134277, 1013904242, 2773480762, 1359893119, 2600822924, 528734635, 1541459225);
        var r = new Array(64);
        var I, H, F, E, C, A, z, y, x, w;
        var D, B;
        t[u >> 5] |= 128 << (24 - u % 32);
        t[((u + 64 >> 9) << 4) + 15] = u;
        for (var x = 0; x < t.length; x += 16) {
            I = v[0];
            H = v[1];
            F = v[2];
            E = v[3];
            C = v[4];
            A = v[5];
            z = v[6];
            y = v[7];
            for (var w = 0; w < 64; w++) {
                if (w < 16) {
                    r[w] = t[w + x]
                } else {
                    r[w] = i(i(i(j(r[w - 2]), r[w - 7]), p(r[w - 15])), r[w - 16])
                }
                D = i(i(i(i(y, b(C)), a(C, A, z)), G[w]), r[w]);
                B = i(g(I), d(I, H, F));
                y = z;
                z = A;
                A = C;
                C = i(E, D);
                E = F;
                F = H;
                H = I;
                I = i(D, B)
            }
            v[0] = i(I, v[0]);
            v[1] = i(H, v[1]);
            v[2] = i(F, v[2]);
            v[3] = i(E, v[3]);
            v[4] = i(C, v[4]);
            v[5] = i(A, v[5]);
            v[6] = i(z, v[6]);
            v[7] = i(y, v[7])
        }
        return v
    }
    function h(v) {
        var u = Array();
        var r = (1 << l) - 1;
        for (var t = 0; t < v.length * l; t += l) {
            u[t >> 5] |= (v.charCodeAt(t / l) & r) << (24 - t % 32)
        }
        return u
    }
    function n(t) {
        t = t.replace(/\r\n/g, "\n");
        var r = "";
        for (var v = 0; v < t.length; v++) {
            var u = t.charCodeAt(v);
            if (u < 128) {
                r += String.fromCharCode(u)
            } else {
                if ((u > 127) && (u < 2048)) {
                    r += String.fromCharCode((u >> 6) | 192);
                    r += String.fromCharCode((u & 63) | 128)
                } else {
                    r += String.fromCharCode((u >> 12) | 224);
                    r += String.fromCharCode(((u >> 6) & 63) | 128);
                    r += String.fromCharCode((u & 63) | 128)
                }
            }
        }
        return r
    }
    function m(u) {
        var t = o ? "0123456789ABCDEF" : "0123456789abcdef";
        var v = "";
        for (var r = 0; r < u.length * 4; r++) {
            v += t.charAt((u[r >> 2] >> ((3 - r % 4) * 8 + 4)) & 15) + t.charAt((u[r >> 2] >> ((3 - r % 4) * 8)) & 15)
        }
        return v
    }
    q = n(q);
    return m(c(h(q), q.length * l))
}

