}  if (val < 0) { if (val == Long.MIN_VALUE) { return valueOf(~val).not(); }  return valueOf(-val).negate();
    public static BigInteger valueOf(long val)    {        if (val == 0)        {            return BigInteger.ZERO;        }        // store val into a byte array        byte[] b = new byte[8];        for (int i = 0; i < 8; i++)        {            b[7 - i] = (byte)val;            val >>= 8;        }        return new BigInteger(b);    }