user: Please show me the C implementation that matches the assembly code listed below:

```asm
<showhelp>:
  endbr64
  test   %edi,%edi
  jg     L29
  xor    %edi,%edi
  jmp    1070 <exit@plt>
  nop
L29:
  push   %rbp
  push   %rbx
  mov    %edi,%ebx
  lea    D186(%rip),%rdi
  sub    $0x8,%rsp
  call   <printf@plt>
  lea    D93(%rip),%rdi
  call   <printf@plt>
  lea    D22(%rip),%rdi
  call   <printf@plt>
  lea    D302(%rip),%rdi
  call   <printf@plt>
  lea    D225(%rip),%rdi
  call   <printf@plt>
  lea    D314(%rip),%rdi
  call   <printf@plt>
  lea    D397(%rip),%rdi
  call   <printf@plt>
  lea    D410(%rip),%rdi
  call   <printf@plt>
  lea    D402(%rip),%rdi
  call   <printf@plt>
  lea    D173(%rip),%rdi
  call   <printf@plt>
  lea    D320(%rip),%rdi
  call   <printf@plt>
  lea    D90(%rip),%rdi
  call   <printf@plt>
  lea    D145(%rip),%rdi
  call   <printf@plt>
  cmp    $0x1,%ebx
  je     L18
  lea    D20(%rip),%rdi
  lea    D304(%rip),%rbp
  call   <printf@plt>
  mov    %rbp,%rdi
  call   <printf@plt>
  lea    D88(%rip),%rdi
  call   <printf@plt>
  lea    D116(%rip),%rdi
  call   <printf@plt>
  lea    D404(%rip),%rdi
  call   <printf@plt>
  lea    D286(%rip),%rdi
  call   <printf@plt>
  cmp    $0x2,%ebx
  je     L18
  lea    D35(%rip),%rdi
  call   <printf@plt>
  lea    D237(%rip),%rdi
  call   <printf@plt>
  lea    D270(%rip),%rdi
  call   <printf@plt>
  lea    D156(%rip),%rdi
  call   <printf@plt>
  lea    D417(%rip),%rdi
  call   <printf@plt>
  lea    D191(%rip),%rdi
  call   <printf@plt>
  lea    D382(%rip),%rdi
  call   <printf@plt>
  lea    D13(%rip),%rdi
  call   <printf@plt>
  mov    %rbp,%rdi
  call   <printf@plt>
  lea    D9(%rip),%rdi
  call   <printf@plt>
  lea    D243(%rip),%rdi
  call   <printf@plt>
  lea    D324(%rip),%rdi
  call   <printf@plt>
  lea    D56(%rip),%rdi
  call   <printf@plt>
  lea    D168(%rip),%rdi
  call   <printf@plt>
  lea    D214(%rip),%rdi
  call   <printf@plt>
  lea    D76(%rip),%rdi
  call   <printf@plt>
  lea    D24(%rip),%rdi
  call   <printf@plt>
  lea    D339(%rip),%rdi
  call   <printf@plt>
  lea    D246(%rip),%rdi
  call   <printf@plt>
  lea    D206(%rip),%rdi
  call   <printf@plt>
  lea    D269(%rip),%rdi
  call   <printf@plt>
  lea    D224(%rip),%rdi
  call   <printf@plt>
  lea    D278(%rip),%rdi
  call   <printf@plt>
  lea    D346(%rip),%rdi
  call   <printf@plt>
L18:
  add    $0x8,%rsp
  xor    %edi,%edi
  pop    %rbx
  pop    %rbp
  jmp    1070 <exit@plt>
```

tool_calls: name: extract_symbolic_data
arguments: data_tag: D186
type_infered: string
name: extract_symbolic_data
arguments: data_tag: D93
type_infered: string
name: extract_symbolic_data
arguments: data_tag: D22
type_infered: string
name: extract_symbolic_data
arguments: data_tag: D302
type_infered: string
name: extract_symbolic_data
arguments: data_tag: D225
type_infered: string
name: extract_symbolic_data
arguments: data_tag: D314
type_infered: string
name: extract_symbolic_data
arguments: data_tag: D397
type_infered: string
name: extract_symbolic_data
arguments: data_tag: D410
type_infered: string
name: extract_symbolic_data
arguments: data_tag: D402
type_infered: string
name: extract_symbolic_data
arguments: data_tag: D173
type_infered: string
name: extract_symbolic_data
arguments: data_tag: D320
type_infered: string
name: extract_symbolic_data
arguments: data_tag: D90
type_infered: string
name: extract_symbolic_data
arguments: data_tag: D145
type_infered: string
name: extract_symbolic_data
arguments: data_tag: D20
type_infered: string
name: extract_symbolic_data
arguments: data_tag: D304
type_infered: string
name: extract_symbolic_data
arguments: data_tag: D88
type_infered: string
name: extract_symbolic_data
arguments: data_tag: D116
type_infered: string
name: extract_symbolic_data
arguments: data_tag: D404
type_infered: string
name: extract_symbolic_data
arguments: data_tag: D286
type_infered: string
name: extract_symbolic_data
arguments: data_tag: D35
type_infered: string
name: extract_symbolic_data
arguments: data_tag: D237
type_infered: string
name: extract_symbolic_data
arguments: data_tag: D270
type_infered: string
name: extract_symbolic_data
arguments: data_tag: D156
type_infered: string
name: extract_symbolic_data
arguments: data_tag: D417
type_infered: string
name: extract_symbolic_data
arguments: data_tag: D191
type_infered: string
name: extract_symbolic_data
arguments: data_tag: D382
type_infered: string
name: extract_symbolic_data
arguments: data_tag: D13
type_infered: string
name: extract_symbolic_data
arguments: data_tag: D9
type_infered: string
name: extract_symbolic_data
arguments: data_tag: D243
type_infered: string
name: extract_symbolic_data
arguments: data_tag: D324
type_infered: string
name: extract_symbolic_data
arguments: data_tag: D56
type_infered: string
name: extract_symbolic_data
arguments: data_tag: D168
type_infered: string
name: extract_symbolic_data
arguments: data_tag: D214
type_infered: string
name: extract_symbolic_data
arguments: data_tag: D76
type_infered: string
name: extract_symbolic_data
arguments: data_tag: D24
type_infered: string
name: extract_symbolic_data
arguments: data_tag: D339
type_infered: string
name: extract_symbolic_data
arguments: data_tag: D246
type_infered: string
name: extract_symbolic_data
arguments: data_tag: D206
type_infered: string
name: extract_symbolic_data
arguments: data_tag: D269
type_infered: string
name: extract_symbolic_data
arguments: data_tag: D224
type_infered: string
name: extract_symbolic_data
arguments: data_tag: D278
type_infered: string
name: extract_symbolic_data
arguments: data_tag: D346
type_infered: string

tool: D186:         **** Mofext v1.0.3 ****


tool: D93: Usage: mofext -d mypatterns1.list mypatterns2.list -q GGATCC TTGANTGA -m matrix -w 10 -c 0.95



tool: D22: Options:


tool: D302: ~~~~~~~~


tool: D225: -h     Display full help.


tool: D314: -d     Databases to search. Space separated, maximum 50.


tool: D397: -q     Query patterns. Space separated, maximum 50.


tool: D410: -m     The similarity matrix.


tool: D402: -w     Wordsize. Default: 6.


tool: D173: -c     The similarity percentage limit (cutoff). Default: 0.8.


tool: D320: -o     Output format. See below.


tool: D90: Example:


tool: D145: mofext -d mypatterns1.list mypatterns2.list -q GGATCC TTGANTGA -m matrix -w 4 -c 0.5



tool: D20: Matrix:


tool: D304: ~~~~~~~


tool: D88:  The matrix used by mofext is a plain text file. Each row ends with a newline character.


tool: D116:  Columns are separated by one or more spaces. The matrix is quadratic, so A[j,i] = A[i,j].


tool: D404:  The number in the upper left corner denotes the matrix size. See default matrix included


tool: D286:  in the source.


tool: D35: Motif list:


tool: D237: ~~~~~~~~~~~


tool: D270:  The motif list file used by mofext is a plain text file. Each row ends with a newline character.


tool: D156:  The motif list file must have at least 2 columns, separated by spaces or tabs. The first column


tool: D417:  is a UNIQUE motif id. It can contain any characters except space, newline or tab. The second


tool: D191:  column is the sequence (pattern) of the motif. The available characters are the ones defined in


tool: D382:  the matrix file. Additional columns are ignored by the program.


tool: D13: Output:


tool: D9:  The -o option sets the output format of the program. The following characters represent an output


tool: D243:  element. The default is ieqd.


tool: D324:  i: ID column.


tool: D56:  s: Score.


tool: D168:  e: Extended score.


tool: D214:  p: Probability value.


tool: D76:  d: Hit subsequence.


tool: D24:  D: Full hit sequence.


tool: D339:  q: Query subsequence.


tool: D246:  Q: Full query sequence.


tool: D206:  F: The position of the first base of the hit subsequence in the full hit sequence.


tool: D269:  f: The position of the first base of the query subsequence in the full query sequence.


tool: D224:  %%: The similarity percent score of the hit/query subsequence pair.


tool: D278:  Example: mofext -d mypatterns1.list -q GGATCC -m matrix -o ied


tool: D346:  The program prints out the ID, extended score and the hit subsequence.


assistant: ```c
void showhelp(int which) {
  if (which > 0) {
    printf("        **** Mofext v1.0.3 ****\n");
    printf("Usage: mofext -d mypatterns1.list mypatterns2.list -q GGATCC TTGANTGA -m matrix -w 10 -c 0.95\n\n");
    printf("Options:\n");
    printf("~~~~~~~~\n");
    printf("-h     Display full help.\n");
    printf("-d     Databases to search. Space separated, maximum 50.\n");
    printf("-q     Query patterns. Space separated, maximum 50.\n");
    printf("-m     The similarity matrix.\n");
    printf("-w     Wordsize. Default: 6.\n");
    printf("-c     The similarity percentage limit (cutoff). Default: 0.8.\n");
    printf("-o     Output format. See below.\n");
    printf("Example:\n");
    printf("mofext -d mypatterns1.list mypatterns2.list -q GGATCC TTGANTGA -m matrix -w 4 -c 0.5\n\n");
  }
  if (which > 1) {
    printf("Matrix:\n");
    printf("~~~~~~~\n");
    printf(" The matrix used by mofext is a plain text file. Each row ends with a newline character.\n");
    printf(" Columns are separated by one or more spaces. The matrix is quadratic, so A[j,i] = A[i,j].\n");
    printf(" The number in the upper left corner denotes the matrix size. See default matrix included\n");
    printf(" in the source.\n");
  }
  if (which > 2) {
    printf("Motif list:\n");
    printf("~~~~~~~~~~~\n");
    printf(" The motif list file used by mofext is a plain text file. Each row ends with a newline character.\n");
    printf(" The motif list file must have at least 2 columns, separated by spaces or tabs. The first column\n");
    printf(" is a UNIQUE motif id. It can contain any characters except space, newline or tab. The second\n");
    printf(" column is the sequence (pattern) of the motif. The available characters are the ones defined in\n");
    printf(" the matrix file. Additional columns are ignored by the program.\n");
    printf("Output:\n");
    printf("~~~~~~~\n");
    printf(" The -o option sets the output format of the program. The following characters represent an output\n");
    printf(" element. The default is ieqd.\n");
    printf(" i: ID column.\n");
    printf(" s: Score.\n");
    printf(" e: Extended score.\n");
    printf(" p: Probability value.\n");
    printf(" d: Hit subsequence.\n");
    printf(" D: Full hit sequence.\n");
    printf(" q: Query subsequence.\n");
    printf(" Q: Full query sequence.\n");
    printf(" F: The position of the first base of the hit subsequence in the full hit sequence.\n");
    printf(" f: The position of the first base of the query subsequence in the full query sequence.\n");
    printf(" %%: The similarity percent score of the hit/query subsequence pair.\n");
    printf(" Example: mofext -d mypatterns1.list -q GGATCC -m matrix -o ied\n");
    printf(" The program prints out the ID, extended score and the hit subsequence.\n");
  }
  exit(0);
}
```