1869 {
1870 bool flag = left._bits == null;
1871 bool flag2 = right._bits == null;
1872 if (flag && flag2)
1873 {
1874 return (long)left._sign * (long)right._sign;
1875 }
1876 if (flag)
1877 {
1878 uint[]
array = BigIntegerCalculator.Multiply(right._bits, NumericsHelpers.Abs(left._sign));
1880 }
1881 if (flag2)
1882 {
1883 uint[] array2 = BigIntegerCalculator.Multiply(left._bits, NumericsHelpers.Abs(right._sign));
1884 return new BigInteger(array2, array2, (left._sign < 0) ^ (right._sign < 0));
1885 }
1886 if (left._bits == right._bits)
1887 {
1888 uint[] array3 = BigIntegerCalculator.Square(left._bits);
1889 return new BigInteger(array3, array3, (left._sign < 0) ^ (right._sign < 0));
1890 }
1891 if (left._bits.Length < right._bits.Length)
1892 {
1893 uint[] array4 = BigIntegerCalculator.Multiply(right._bits, left._bits);
1894 return new BigInteger(array4, array4, (left._sign < 0) ^ (right._sign < 0));
1895 }
1896 uint[] array5 = BigIntegerCalculator.Multiply(left._bits, right._bits);
1897 return new BigInteger(array5, array5, (left._sign < 0) ^ (right._sign < 0));
1898 }