code: public FDBigInteger multByPow52(int p5, int p2) {
          if (this.nWords == 0) {
              return this;
          }
          FDBigInteger res = this;
          if (p5 != 0) {
              int[] r;
              int extraSize = (p2 != 0) ? 1 : 0;
              if (p5 < SMALL_5_POW.length) {
                  r = new int[this.nWords + 1 + extraSize];
                  mult(this.data, this.nWords, SMALL_5_POW[p5], r);
                  res = new FDBigInteger(r, this.offset);
              } else {
                  FDBigInteger pow5 = big5pow(p5);
                  r = new int[this.nWords + pow5.size() + extraSize];
                  mult(this.data, this.nWords, pow5.data, pow5.nWords, r);
                  res = new FDBigInteger(r, this.offset + pow5.offset);
              }
          }
          return res.leftShift(p2);
      }
docs: /*@
  @ requires this.value() == 0 || p5 == 0 && p2 == 0;
  @ assignable \nothing;
  @ ensures \result == this;
  @
  @  also
  @
  @ requires this.value() > 0 && (p5 > 0 && p2 >= 0 || p5 == 0 && p2 > 0 && this.isImmutable);
  @ assignable \nothing;
  @ ensures \result.value() == \old(this.value() * pow52(p5, p2));
  @
  @  also
  @
  @ requires this.value() > 0 && p5 == 0 && p2 > 0 && !this.isImmutable;
  @ assignable this.nWords, this.data, this.data[*];
  @ ensures \result == this;
  @ ensures \result.value() == \old(this.value() * pow52(p5, p2));
  @