def main(server: str, port: int):
    data = send_msg(server, port, proto.start_crack())
    msg_type = proto.parse_msg_type(data)
    if msg_type == proto.GIVE_GENOME:
        genome = proto.parse_genome(data)
        data = send_msg(server, port, proto.take_more())
        seq, success = try_crack(data, genome)
        while not success:
            data = send_msg(server, port, proto.take_more())
            seq, success = try_crack(data, genome)
        else:
            send_msg(server, port, proto.success(seq))
            print(seq)
    else:
        print("Fail")
def try_crack(data: bytes, genome: str) -> (str, bool):
    if proto.parse_msg_type(data) == proto.NO_MORE:
        print("No more sequences. Soryan")
        exit(0)  # todo: refactor
    steps, seq = proto.parse_more(data)
    return crack(seq, steps, genome)