public ECFieldElement multiplyPlusProduct(ECFieldElement b, ECFieldElement x, ECFieldElement y) {
    long[] ax = this.x, bx = ((SecT113FieldElement) b).x;
    long[] xx = ((SecT113FieldElement) x).x, yx = ((SecT113FieldElement) y).x;

    long[] tt = Nat128.createExt64();
    SecT113Field.multiplyAddToExt(ax, bx, tt);
    SecT113Field.multiplyAddToExt(xx, yx, tt);

    long[] z = Nat128.create64();
    SecT113Field.reduce(tt, z);
    return new SecT113FieldElement(z);
  }
  public SecT113FieldElement(BigInteger x) {
    if (x == null || x.signum() < 0 || x.bitLength() > 113) {
      throw new IllegalArgumentException("x value invalid for SecT113FieldElement");
    }

    this.x = SecT113Field.fromBigInteger(x);
  }
  public ECFieldElement squarePow(int pow) {
    if (pow < 1) {
      return this;
    }

    long[] z = Nat128.create64();
    SecT113Field.squareN(x, pow, z);
    return new SecT113FieldElement(z);
  }
 public ECFieldElement multiply(ECFieldElement b) {
   long[] z = Nat128.create64();
   SecT113Field.multiply(x, ((SecT113FieldElement) b).x, z);
   return new SecT113FieldElement(z);
 }
 public ECFieldElement addOne() {
   long[] z = Nat128.create64();
   SecT113Field.addOne(x, z);
   return new SecT113FieldElement(z);
 }
 public ECFieldElement sqrt() {
   long[] z = Nat128.create64();
   SecT113Field.sqrt(x, z);
   return new SecT113FieldElement(z);
 }