code: public IPAddressSeqRange join(IPAddressSeqRange other) {
  		IPAddress otherLower = other.getLower();
  		IPAddress otherUpper = other.getUpper();
  		IPAddress lower = this.getLower();
  		IPAddress upper = this.getUpper();
  		int lowerComp = compareLowValues(lower, otherLower);
  		if(!overlaps(other)) {
  			if(lowerComp >= 0) {
  				if(otherUpper.increment(1).equals(lower)) {
  					return create(otherLower, upper);
  				}
  			} else {
  				if(upper.increment(1).equals(otherLower)) {
  					return create(lower, otherUpper);
  				}
  			}
  			return null;
  		}
  		int upperComp = compareLowValues(upper, otherUpper);
  		IPAddress lowestLower, highestUpper;
  		if(lowerComp >= 0) {
  			if(lowerComp == 0 && upperComp == 0) {
  				return this;
  			}
  			lowestLower = otherLower;
  		} else {
  			lowestLower = lower;
  		}
  		highestUpper = upperComp >= 0 ? upper : otherUpper;
  		return create(lowestLower, highestUpper);
  	}
docs: If this range overlaps with the given range,
  or if the highest value of the lower range is one below the lowest value of the higher range,
  then the two are joined into a new larger range that is returned.
  <p>
  Otherwise null is returned.
  
  @param other
  @return