private static final synchronized int[] sha(int hh0, int hh1, int hh2,
private static synchronized final int[] sha(int hh0, int hh1, int hh2,
  private static final synchronized int[] sha(int hh0, int hh1, int hh2,                                              int hh3, int hh4, int hh5,                                              int hh6, int hh7, byte[] in,                                              int offset)  {    int A = hh0;    int B = hh1;    int C = hh2;    int D = hh3;    int E = hh4;    int F = hh5;    int G = hh6;    int H = hh7;    int r, T, T2;    for (r = 0; r < 16; r++)      {        w[r] = (in[offset++] << 24 | (in[offset++] & 0xFF) << 16                | (in[offset++] & 0xFF) << 8 | (in[offset++] & 0xFF));      }    for (r = 16; r < 64; r++)      {        T = w[r - 2];        T2 = w[r - 15];        w[r] = ((((T >>> 17) | (T << 15)) ^ ((T >>> 19) | (T << 13)) ^ (T >>> 10))                + w[r - 7]                + (((T2 >>> 7) | (T2 << 25)) ^ ((T2 >>> 18) | (T2 << 14)) ^ (T2 >>> 3))                + w[r - 16]);      }    for (r = 0; r < 64; r++)      {        T = (H             + (((E >>> 6) | (E << 26)) ^ ((E >>> 11) | (E << 21)) ^ ((E >>> 25) | (E << 7)))             + ((E & F) ^ (~E & G)) + k[r] + w[r]);        T2 = ((((A >>> 2) | (A << 30)) ^ ((A >>> 13) | (A << 19)) ^ ((A >>> 22) | (A << 10)))              + ((A & B) ^ (A & C) ^ (B & C)));        H = G;        G = F;        F = E;        E = D + T;        D = C;        C = B;        B = A;        A = T + T2;      }    return new int[] { hh0 + A, hh1 + B, hh2 + C, hh3 + D, hh4 + E, hh5 + F,                       hh6 + G, hh7 + H };  }