public Revision[] rangeContribs(String range) throws IOException
    {
        // sanitize range
        int a = range.indexOf('/');
        if (a < 7)
            throw new NumberFormatException("Not a valid CIDR range!");
        int size = Integer.parseInt(range.substring(a + 1));
        String[] numbers = range.substring(0, a).split("\\.");
        if (numbers.length != 4)
            throw new NumberFormatException("Not a valid CIDR range!");
        switch (size)
        {
            case 8:
                return contribs("", numbers[0] + ".", null);
            case 16:
                return contribs("", numbers[0] + "." + numbers[1] + ".", null);
            case 24:
                return contribs("", numbers[0] + "." + numbers[1] + "." + numbers[2] + ".", null);
            case 32: // not that people are silly enough to do this...
                return contribs(range.substring(0, range.length() - 3), "", null);
            default:
                throw new NumberFormatException("Range is not supported.");
        }
    }