# Path: athlib/utils.py
# def isStr(o):
#     '''return true if argument is a string type'''
#     return isinstance(o,(str,bytes))


from datetime import date, timedelta
from dateutil.parser import parse as parse_date
from dateutil.relativedelta import relativedelta
from athlib.utils import isStr
    if underage and age_on_31_aug < 9:
        return "U9"

    if age_on_31_aug < 11:
        return "U11"
    elif age_on_31_aug in [11, 12]:
        return "U13"
    elif age_on_31_aug in [13, 14]:
        return "U15"
    elif age_on_31_aug in [15, 16]:
        return "U17"
    else:
        if age_on_31_dec < 20:
            return "U20"
        else:
            if age_on_match_day < 35:
                return "SEN"
            else:
                # V35, V40, V45 etc
                if vets:
                    return "V%02d" % (int(age_on_match_day // 5) * 5)
                else:
                    return "SEN"


def rule507_agegroups_crosscountry(birth_date,
                                   match_date,
                                   vets=True,
                                   underage=True):
    """I can't find any actual differences between road and XC"""

# Path: athlib/utils.py
# def isStr(o):
#     '''return true if argument is a string type'''
#     return isinstance(o,(str,bytes))


# Path: athlib/uka/agegroups.py
from datetime import date, timedelta
from dateutil.parser import parse as parse_date
from dateutil.relativedelta import relativedelta
from athlib.utils import isStr

    if underage and age_on_31_aug < 9:
        return "U9"

    if age_on_31_aug < 11:
        return "U11"
    elif age_on_31_aug in [11, 12]:
        return "U13"
    elif age_on_31_aug in [13, 14]:
        return "U15"
    elif age_on_31_aug in [15, 16]:
        return "U17"
    else:
        if age_on_31_dec < 20:
            return "U20"
        else:
            if age_on_match_day < 35:
                return "SEN"
            else:
                # V35, V40, V45 etc
                if vets:
                    return "V%02d" % (int(age_on_match_day // 5) * 5)
                else:
                    return "SEN"


def rule507_agegroups_crosscountry(birth_date,
                                   match_date,
                                   vets=True,
                                   underage=True):
    """I can't find any actual differences between road and XC"""

    if isStr(birth_date):