code: public static InetAddressRange parse(String s) throws ParseException {
  		// *
  		if (s.equals("*")) {
  			return new InetAddressRange();
  		}
  
  		// a.b.c.d/cidr
  		int index = s.indexOf('/');
  		if (index >= 0) {
  			String address = s.substring(0, index);
  			try {
  				int cidrPrefix = Integer.parseInt(s.substring(index + 1));
  				InetAddress inetAddress = forString(address);
  				if (inetAddress instanceof Inet4Address) {
  					return fromCidr((Inet4Address) inetAddress, cidrPrefix);
  				} else {
  					return fromCidr((Inet6Address) inetAddress, cidrPrefix);
  				}
  			} catch (NumberFormatException e) {
  				throw new ParseException(InetAddressRange.class, "Invalid cidrPrefix", e);
  			}
  		}
  
  		// a.b.c.d - e.f.g.j
  		index = s.indexOf('-');
  		if (index >= 0) {
  			InetAddress address1 = forString(s.substring(0, index));
  			InetAddress address2 = forString(s.substring(index + 1));
  			if (address1 instanceof Inet4Address && address2 instanceof Inet4Address) {
  				return fromRange((Inet4Address) address1, (Inet4Address) address2);
  			} else if (address1 instanceof Inet6Address && address2 instanceof Inet6Address) {
  				return fromRange((Inet6Address) address1, (Inet6Address) address2);
  			} else {
  				throw INVALID_RANGE;
  			}
  		}
  
  		// a.b.c.d
  		return fromAddress(forString(s));
  	}
docs: Supported formats:<br>
  All:         *
  CIDR:        address/cidrPrefix : 192.168.1.0/24<br>
  RANGE:       address1-address2  : 192.168.1.0 - 192.169.1.255<br>
  ALONE:       address            : 192.168.0.1
  <br>
  Not Supported:<br>
  RANGE/CIDR   address1-address2/cidrPrefix