def METHOD_NAME(output, plain_out, report):
    """
    Usage: extract_antenna_violators.py -o <output text file> <input ARC report>
    Extracts the list of violating nets from an ARC report file"
    """
    net_pattern = re.compile(r"\s*Net:\s*(\S+)")
    required_ratio_pattern = re.compile(r"\s*Required ratio:\s+([\d.]+)")
    partial_ratio_pattern = re.compile(r"\s*Partial area ratio:\s+([\d.]+)")
    layer_pattern = re.compile(r"\s*Layer:\s+(\S+)")
    pin_pattern = re.compile(r"\s*Pin:\s+(\S+)")
    required_ratio = None
    layer = None
    partial_ratio = None
    required_ratio = None
    pin = None
    net = None
    violations = []
    with open(report, "r") as f:
        for line in f:
            pin_new = pin_pattern.match(line)
            required_ratio_new = required_ratio_pattern.match(line)
            partial_ratio_new = partial_ratio_pattern.match(line)
            layer_new = layer_pattern.match(line)
            net_new = net_pattern.match(line)
            required_ratio = (
                required_ratio_new.group(1)
                if required_ratio_new is not None
                else required_ratio
            )
            partial_ratio = (
                partial_ratio_new.group(1)
                if partial_ratio_new is not None
                else partial_ratio
            )
            layer = layer_new.group(1) if layer_new is not None else layer
            pin = pin_new.group(1) if pin_new is not None else pin
            net = net_new.group(1) if net_new is not None else net
            if "VIOLATED" in line:
                violations.append(
                    AntennaViolation(
                        net=net,
                        pin=pin,
                        partial_ratio=partial_ratio,
                        layer=layer,
                        required_ratio=required_ratio,
                    )
                )
    violations.sort(reverse=True)
    with open(output, "w") as f:
        for violation in violations:
            print(violation)
            f.write(f"{violation}\n")
    if plain_out is not None:
        with open(plain_out, "w") as f:
            for violation in violations:
                f.write(f"{violation.pin}\n")