def METHOD_NAME() -> argparse.Namespace:
    """
    Parse the underlying arguments for the program.
    :return: Returns the arguments for the program.
    """
    parser = argparse.ArgumentParser(
        description="Demo",
        usage="slither-demo filename",
        formatter_class=argparse.RawDescriptionHelpFormatter,
    )
    parser.add_argument(
        "filename", help="The filename of the contract or truffle directory to analyze."
    )
    parser.add_argument("--contract", help="The targeted contract.")
    parser.add_argument(
        "--scenario",
        help="Test a specific scenario. Use --list-scenarios to see the available scenarios. Default Transferable",
        default="Transferable",
    )
    parser.add_argument(
        "--list-scenarios",
        help="List available scenarios",
        action=ListScenarios,
        nargs=0,
        default=False,
    )
    parser.add_argument(
        "--list-properties",
        help="List available properties",
        action=ListProperties,
        nargs=0,
        default=False,
    )
    parser.add_argument(
        "--address-owner", help=f"Owner address. Default {OWNER_ADDRESS}", default=None
    )
    parser.add_argument(
        "--address-user", help=f"Owner address. Default {USER_ADDRESS}", default=None
    )
    parser.add_argument(
        "--address-attacker",
        help=f"Attacker address. Default {ATTACKER_ADDRESS}",
        default=None,
    )
    # Add default arguments from crytic-compile
    cryticparser.init(parser)
    if len(sys.argv) == 1:
        parser.print_help(sys.stderr)
        sys.exit(1)
    return parser.METHOD_NAME()