JEB output JD-GUI output
// Decompiled by JEB v0.9.0 alpha

public static int lzss_decompress(byte[] arg12, byte[] arg13) {
    int v9 = -1;
    int v2 = 0;
    int v4 = 0;
    int v1 = 0;
    int v0 = 7;
    while(v4 < arg13.length) {
        ++v0;
        if(v0 == 8) {
            if(v2 < arg12.length) {
                v1 = arg12[v2] & 0xFF;
                v0 = 0;
                ++v2;
            }
            else {
                break;
            }

        }

        if((v1 & 1) != 0) {
            if(v2 + 1 < arg12.length) {
                int v8 = arg12[v2] & 0xFF | (arg12[v2 + 1] & 0xFF) << 8;
                v2 += 2;
                int v7 = (v8 >> 4) + 1;
                int v6 = (v8 & 0xF) + 3;
                if(v7 > v4) {
                    v4 = v9;
                    break;
                }
                else if(arg13.length - v4 < v6) {
                    v4 = v9;
                    break;
                }
                else {
                    int v5 = 0;
                    while(v5 < v6) {
                        arg13[v4 + v5] = arg13[v4 + v5 - v7];
                        ++v5;
                    }

                    v4 += v6;
                }

            }
            else {
                v4 = v9;
                break;
            }

        }
        else if(v2 < arg12.length) {
            arg13[v4] = arg12[v2];
            ++v4;
            ++v2;
        }
        else {
            break;
        }

        v1 >>= 1;
    }

    return v4;
}
// Decompiled by JD-GUI v0.3.5

public static int lzss_decompress(byte[] paramArrayOfByte1, byte[] paramArrayOfByte2)
{
  int i = 0;
  int j = 0;
  int k = 0;
  int m = 7;
  if (j >= paramArrayOfByte2.length);
  int i1;
  int i2;
  while (true)
  {
    return j;
    m++;
    if (m == 8)
    {
      if (i < paramArrayOfByte1.length)
      {
        int i4 = i + 1;
        k = 0xFF & paramArrayOfByte1[i];
        m = 0;
        i = i4;
      }
    }
    else
    {
      if ((k & 0x1) == 0)
      {
        if (i >= paramArrayOfByte1.length)
          continue;
        paramArrayOfByte2[j] = paramArrayOfByte1[i];
        j++;
        i++;
        k >>= 1;
        break;
      }
      if (i + 1 >= paramArrayOfByte1.length)
      {
        j = -1;
      }
      else
      {
        int n = 0xFF & paramArrayOfByte1[i] | (0xFF & paramArrayOfByte1[(i + 1)]) << 8;
        i += 2;
        i1 = 1 + (n >> 4);
        i2 = 3 + (n & 0xF);
        if (i1 > j)
        {
          j = -1;
        }
        else
        {
          if (paramArrayOfByte2.length - j >= i2)
            break label169;
          j = -1;
        }
      }
    }
  }
  label169: for (int i3 = 0; ; i3++)
  {
    if (i3 >= i2)
    {
      j += i2;
      break;
    }
    paramArrayOfByte2[(j + i3)] = paramArrayOfByte2[(j + i3 - i1)];
  }
}