code: public List<IPv6AddressRange> remove(IPv6Address address)
      {
          if (address == null)
              throw new IllegalArgumentException("invalid address [null]");
  
          if (!contains(address))
              return Collections.singletonList(this);
          else if (address.equals(first) && address.equals(last))
              return Collections.emptyList();
          else if (address.equals(first))
              return Collections.singletonList(fromFirstAndLast(first.add(1), last));
          else if (address.equals(last))
              return Collections.singletonList(fromFirstAndLast(first, last.subtract(1)));
          else
              return Arrays.asList(fromFirstAndLast(first, address.subtract(1)),
                      fromFirstAndLast(address.add(1), last));
      }
docs: Remove an address from the range, resulting in one, none or two new ranges. If an address outside the range is removed, this has no
  effect. If the first or last address is removed, a single new range is returned (potentially empty if the range only contained a
  single address). If an address somewhere else in the range is removed, two new ranges are returned.
  
  @param address adddress to remove from the range
  @return list of resulting ranges