<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def verticalLine(requestContext, ts, label=None, color=None):
 """ Takes a timestamp string ts. Draws a vertical line at the designated timestamp with optional 'label' and 'color'. Supported timestamp formats include both relative (e.g. -3h) and absolute (e.g. 16:00_20110501) strings, such as those used with ``from`` and ``until`` parameters. When set, the 'label' will appear in the graph legend. Note: Any timestamps defined outside the requested range will raise a 'ValueError' exception. Example:: &target=verticalLine("12:3420131108","event","blue") &target=verticalLine("16:00_20110501","event") &target=verticalLine("-5mins") """

    ts = int(epoch(parseATTime(ts, requestContext['tzinfo'])))
    start = int(epoch(requestContext['startTime']))
    end = int(epoch(requestContext['endTime']))
    if ts < start:
        raise ValueError("verticalLine(): timestamp %s exists "
                         "before start of range" % ts)
    elif ts > end:
        raise ValueError("verticalLine(): timestamp %s exists "
                         "after end of range" % ts)
    start = end = ts
    step = 1.0
    series = TimeSeries(label, start, end, step, [1.0, 1.0])
    series.options['drawAsInfinite'] = True
    if color:
        series.color = color
    return [series]