public LongRangeSet mul(LongRangeSet multiplier, LongRangeType lrType) {
    if (multiplier.isEmpty()) return multiplier;
    if (multiplier instanceof Point) return multiplier.mul(this, lrType);
    BitString thisMask = getBitwiseMask();
    BitString thatMask = multiplier.getBitwiseMask();
    int numZeros = Math.min(6,
                            Math.min(Long.numberOfTrailingZeros(thisMask.myBits), Long.numberOfTrailingZeros(~thisMask.myMask)) +
                            Math.min(Long.numberOfTrailingZeros(thatMask.myBits), Long.numberOfTrailingZeros(~thatMask.myMask)));
    return modRange(lrType.min(), lrType.max(), 1L << numZeros, 1L);
  }
public LongRangeSet mul(LongRangeSet multiplier, LongRangeType lrType)