// File: /workspace/github_c_makefile_star2_O1/genometools[P]genometools/src/tools/gt_gff3.c
// Function: gt_gff3_option_parser_new
static GtOptionParser* gt_gff3_option_parser_new(void *tool_arguments)
{
  GFF3Arguments *arguments = tool_arguments;
  GtOptionParser *op;
  GtOption *sort_option, *load_option, *strict_option, *tidy_option,
           *mergefeat_option, *addintrons_option, *offset_option,
           *offsetfile_option, *setsource_option, *sortlines_option,
           *sortnum_option, *option;
  gt_assert(arguments);

  /* init */
  op = gt_option_parser_new("[option ...] [GFF3_file ...]", "Parse, possibly "
                            "transform, and output GFF3 files.");

  /* -sort */
  sort_option = gt_option_new_bool("sort", "sort the GFF3 features (memory "
                                   "consumption is proportional to the input "
                                   "file size(s))",
                                   &arguments->sort, false);
  gt_option_parser_add_option(op, sort_option);

  /* -sortlines */
  sortlines_option = gt_option_new_bool("sortlines", "sort the GFF3 features "
                                        "on a strict line basis (not sorted as"
                                        "defined by GenomeTools)",
                                        &arguments->sortlines, false);
  gt_option_parser_add_option(op, sortlines_option);

  /* -sortnum */
  sortnum_option = gt_option_new_bool("sortnum", "enable natural numeric "
                                        "sorting for sequence regions (not "
                                        "sorted as defined by GenomeTools)",
                                        &arguments->sortnum, false);
  gt_option_parser_add_option(op, sortnum_option);
  gt_option_exclude(sortlines_option, sortnum_option);

  /* -strict */
  strict_option = gt_option_new_bool("strict", "be very strict during GFF3 "
                                     "parsing (stricter than the specification "
                                     "requires)", &arguments->strict, false);
  gt_option_is_development_option(strict_option);
  gt_option_parser_add_option(op, strict_option);

  /* -tidy */
  tidy_option = gt_option_new_bool("tidy", "try to tidy the GFF3 files up "
                                   "during parsing", &arguments->tidy, false);
  gt_option_parser_add_option(op, tidy_option);
  gt_option_exclude(strict_option, tidy_option);

  /* -retainids */
  option = gt_option_new_bool("retainids",
                              "when available, use the original IDs provided "
                              "in the source file\n"
                              "(memory consumption is proportional to the "
                              "input file size(s))", &arguments->retainids,
                              false);
  gt_option_parser_add_option(op, option);

  /* -checkids */
  option = gt_option_new_bool("checkids",
                              "make sure the ID attributes are unique "
                              "within the scope of each GFF3_file, as required "
                              "by GFF3 specification\n"
                              "(memory consumption is proportional to the "
                              "input file size(s)).\n"
                              "If features with the same "GT_GFF_PARENT" "
                              "attribute are not separated by a '"
                              GT_GFF_TERMINATOR"' line the GFF3 parser tries "
                              "to treat them as a multi-line feature. This "
                              "requires at least matching sequence IDs and "
                              "types.", &arguments->checkids, false);
  gt_option_parser_add_option(op, option);

  /* -addids */
  option = gt_option_new_bool("addids", "add missing \""
                              GT_GFF_SEQUENCE_REGION"\" lines automatically",
                              &arguments->addids, true);
  gt_option_parser_add_option(op, option);

  /* -fixregionboundaries */
  option = gt_option_new_bool("fixregionboundaries", "automatically adjust \""
                              GT_GFF_SEQUENCE_REGION"\" lines to contain all "
                              "their features (memory consumption is "
                              "proportional to the input file size(s))",
                              &arguments->fixboundaries, false);
  gt_option_parser_add_option(op, option);

  /* -mergefeat */
  mergefeat_option = gt_option_new_bool("mergefeat",
                                        "merge adjacent features of the same "
                                        "type", &arguments->mergefeat, false);
  gt_option_is_development_option(mergefeat_option);
  gt_option_imply(mergefeat_option, sort_option);
  gt_option_parser_add_option(op, mergefeat_option);

  /* -load */
  load_option = gt_option_new_bool("load", "load the GFF3 features into memory "
                                   "(requires space proportional to the input "
                                   "file size(s))",
                                   &arguments->load, false);
  gt_option_is_development_option(load_option);
  gt_option_parser_add_option(op, load_option);

  /* -addintrons */
  addintrons_option = gt_option_new_bool("addintrons", "add intron features "
                                         "between existing exon features",
                                         &arguments->addintrons, false);
  gt_option_parser_add_option(op, addintrons_option);

  /* -offset */
  offset_option = gt_option_new_word("offset", "transform all features by the "
                                     "given offset", &arguments->offset,
                                     GT_UNDEF_WORD);
  gt_option_parser_add_option(op, offset_option);

  /* -offsetfile */
  offsetfile_option = gt_option_new_filename("offsetfile", "transform all "
                                             "features by the offsets given in "
                                             "file", arguments->offsetfile);
  gt_option_parser_add_option(op, offsetfile_option);
  gt_option_exclude(offset_option, offsetfile_option);

  /* -setsource */
  setsource_option = gt_option_new_string("setsource", "set the 'source' "
                                          "value (2nd column) of each feature",
                                          arguments->newsource, NULL);
  gt_option_parser_add_option(op, setsource_option);

  /* typecheck options */
  gt_typecheck_info_register_options(arguments->tci, op);

  /* xrfcheck options */
  gt_xrfcheck_info_register_options(arguments->xci, op);

  /* -show */
  option = gt_option_new_bool("show", "show GFF3 output", &arguments->show,
                              true);
  gt_option_parser_add_option(op, option);

  /* -v */
  option = gt_option_new_verbose(&arguments->verbose);
  gt_option_parser_add_option(op, option);

  /* -width */
  option = gt_option_new_width(&arguments->width);
  gt_option_parser_add_option(op, option);

  /* output file options */
  gt_output_file_info_register_options(arguments->ofi, op, &arguments->outfp);

  /* set comment function */
  gt_option_parser_set_comment_func(op, gt_gtdata_show_help, NULL);

  return op;
}

// Assembly:
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
testq %rdi, %rdi
je 0xacb33
movq %rdi, %rbx
leaq 0x2a6d00(%rip), %rdi    # 0x353509
leaq 0x2aa196(%rip), %rsi    # 0x3569a6
callq 0x10cc4e
movq %rax, %r14
leaq 0x3055b1(%rip), %rdi    # 0x3b1dd0
leaq 0x2aa1b2(%rip), %rsi    # 0x3569d8
movq %rbx, %rdx
xorl %ecx, %ecx
callq 0x10f451
movq %rax, %r15
movq %r14, %rdi
movq %rax, %rsi
callq 0x10cd10
leaq 0x1(%rbx), %rdx
leaq 0x2aa1e5(%rip), %rdi    # 0x356a2e
leaq 0x2aa1e8(%rip), %rsi    # 0x356a38
xorl %ecx, %ecx
callq 0x10f451
movq %rax, %r12
movq %r14, %rdi
movq %rax, %rsi
callq 0x10cd10
leaq 0x2(%rbx), %rdx
leaq 0x2aa21c(%rip), %rdi    # 0x356a8c
leaq 0x2aa21d(%rip), %rsi    # 0x356a94
xorl %ecx, %ecx
callq 0x10f451
movq %rax, %r13
movq %r14, %rdi
movq %rax, %rsi
callq 0x10cd10
movq %r12, %rdi
movq %r13, %rsi
callq 0x10fd9f
leaq 0xa(%rbx), %rdx
leaq 0x2dc5ff(%rip), %rdi    # 0x388ea1
leaq 0x2aa246(%rip), %rsi    # 0x356aef
xorl %ecx, %ecx
callq 0x10f451
movq %rax, %r12
movq %rax, %rdi
callq 0x10fbef
movq %r14, %rdi
movq %r12, %rsi
callq 0x10cd10
leaq 0xb(%rbx), %rdx
leaq 0x2dc596(%rip), %rdi    # 0x388e67
leaq 0x2aa265(%rip), %rsi    # 0x356b3d
xorl %ecx, %ecx
callq 0x10f451
movq %rax, %r13
movq %r14, %rdi
movq %rax, %rsi
callq 0x10cd10
movq %r12, %rdi
movq %r13, %rsi
callq 0x10fd9f
leaq 0x4(%rbx), %rdx
leaq 0x33d1e8(%rip), %rdi    # 0x3e9aeb
leaq 0x2aa260(%rip), %rsi    # 0x356b6a
xorl %ecx, %ecx
callq 0x10f451
movq %r14, %rdi
movq %rax, %rsi
callq 0x10cd10
leaq 0x5(%rbx), %rdx
leaq 0x2aa2c3(%rip), %rdi    # 0x356bea
leaq 0x2aa2c5(%rip), %rsi    # 0x356bf3
xorl %ecx, %ecx
callq 0x10f451
movq %r14, %rdi
movq %rax, %rsi
callq 0x10cd10
leaq 0x6(%rbx), %rdx
leaq 0x2aa417(%rip), %rdi    # 0x356d62
leaq 0x2aa417(%rip), %rsi    # 0x356d69
movl $0x1, %ecx
callq 0x10f451
movq %r14, %rdi
movq %rax, %rsi
callq 0x10cd10
leaq 0xd(%rbx), %rdx
leaq 0x2aa42b(%rip), %rdi    # 0x356d9d
leaq 0x2aa438(%rip), %rsi    # 0x356db1
xorl %ecx, %ecx
callq 0x10f451
movq %r14, %rdi
movq %rax, %rsi
callq 0x10cd10
leaq 0x7(%rbx), %rdx
leaq 0x2a1e2f(%rip), %rdi    # 0x34e7c5
leaq 0x2aa4a0(%rip), %rsi    # 0x356e3d
xorl %ecx, %ecx
callq 0x10f451
movq %rax, %r12
movq %rax, %rdi
callq 0x10fbef
movq %r12, %rdi
movq %r15, %rsi
callq 0x10fbff
movq %r14, %rdi
movq %r12, %rsi
callq 0x10cd10
leaq 0x3(%rbx), %rdx
leaq 0x33cbea(%rip), %rdi    # 0x3e95ba
leaq 0x2aa48f(%rip), %rsi    # 0x356e66
xorl %ecx, %ecx
callq 0x10f451
movq %rax, %r15
movq %rax, %rdi
callq 0x10fbef
movq %r14, %rdi
movq %r15, %rsi
callq 0x10cd10
leaq 0x8(%rbx), %rdx
leaq 0x2aa4c2(%rip), %rdi    # 0x356ec1
leaq 0x2aa4c6(%rip), %rsi    # 0x356ecc
xorl %ecx, %ecx
callq 0x10f451
movq %r14, %rdi
movq %rax, %rsi
callq 0x10cd10
leaq 0x10(%rbx), %rdx
leaq 0x2c49fb(%rip), %rdi    # 0x37141e
leaq 0x2aa4d5(%rip), %rsi    # 0x356eff
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
callq 0x10f7c9
movq %rax, %r15
movq %r14, %rdi
movq %rax, %rsi
callq 0x10cd10
movq 0x18(%rbx), %rdx
leaq 0x2dbbdf(%rip), %rdi    # 0x388631
leaq 0x2aa4d1(%rip), %rsi    # 0x356f2a
callq 0x10f9c6
movq %rax, %r12
movq %r14, %rdi
movq %rax, %rsi
callq 0x10cd10
movq %r15, %rdi
movq %r12, %rsi
callq 0x10fd9f
movq 0x20(%rbx), %rdx
leaq 0x2aa4dc(%rip), %rdi    # 0x356f5e
leaq 0x2aa4df(%rip), %rsi    # 0x356f68
xorl %ecx, %ecx
callq 0x10f987
movq %r14, %rdi
movq %rax, %rsi
callq 0x10cd10
movq 0x30(%rbx), %rdi
movq %r14, %rsi
callq 0x18bac7
movq 0x38(%rbx), %rdi
movq %r14, %rsi
callq 0x18e6ac
leaq 0xc(%rbx), %rdx
leaq 0x30d091(%rip), %rdi    # 0x3b9b4f
leaq 0x2aa4d7(%rip), %rsi    # 0x356f9c
movl $0x1, %ecx
callq 0x10f451
movq %r14, %rdi
movq %rax, %rsi
callq 0x10cd10
leaq 0x9(%rbx), %rdi
callq 0x10f473
movq %r14, %rdi
movq %rax, %rsi
callq 0x10cd10
leaq 0x28(%rbx), %rdi
callq 0x10f49c
movq %r14, %rdi
movq %rax, %rsi
callq 0x10cd10
movq 0x40(%rbx), %rdi
addq $0x48, %rbx
movq %r14, %rsi
movq %rbx, %rdx
callq 0x10ffa3
leaq 0xa7380(%rip), %rsi     # 0x153e9c
movq %r14, %rdi
xorl %edx, %edx
callq 0x10cd8d
movq %r14, %rax
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
retq
callq 0x1b78c