user: Translate the below assembly code into C programming language:

```asm
<main>:
  endbr64
  push   %r12
  push   %rbp
  push   %rbx
  lea    D90(%rip),%rsi
  lea    D155(%rip),%rdi
  call   <isMatch@plt>
  mov    %eax,%esi
  lea    D148(%rip),%rbx
  mov    %rbx,%rdi
  call   <printf@plt>
  lea    D83(%rip),%rsi
  lea    D139(%rip),%rdi
  call   <isMatch@plt>
  mov    %eax,%esi
  mov    %rbx,%rdi
  call   <printf@plt>
  lea    D3(%rip),%rsi
  lea    D164(%rip),%rdi
  call   <isMatch@plt>
  mov    %eax,%esi
  mov    %rbx,%rdi
  call   <printf@plt>
  lea    D86(%rip),%r12
  mov    %r12,%rsi
  lea    D59(%rip),%rdi
  call   <isMatch@plt>
  mov    %eax,%esi
  lea    D177(%rip),%rbp
  mov    %rbp,%rdi
  call   <printf@plt>
  lea    D183(%rip),%rsi
  lea    D109(%rip),%rdi
  call   <isMatch@plt>
  mov    %eax,%esi
  mov    %rbp,%rdi
  call   <printf@plt>
  lea    D112(%rip),%rsi
  lea    D171(%rip),%rdi
  call   <isMatch@plt>
  mov    %eax,%esi
  mov    %rbx,%rdi
  call   <printf@plt>
  lea    D126(%rip),%rsi
  lea    D121(%rip),%rdi
  call   <isMatch@plt>
  mov    %eax,%esi
  mov    %rbx,%rdi
  call   <printf@plt>
  lea    D40(%rip),%rsi
  lea    D37(%rip),%rdi
  call   <isMatch@plt>
  mov    %eax,%esi
  mov    %rbx,%rdi
  call   <printf@plt>
  lea    D12(%rip),%rsi
  mov    %r12,%rdi
  call   <isMatch@plt>
  mov    %eax,%esi
  mov    %rbx,%rdi
  call   <printf@plt>
  lea    D91(%rip),%rsi
  mov    %r12,%rdi
  call   <isMatch@plt>
  mov    %eax,%esi
  mov    %rbp,%rdi
  call   <printf@plt>
  mov    $0x0,%eax
  pop    %rbx
  pop    %rbp
  pop    %r12
  ret
```

tool_calls: name: read_data
arguments: tag: D90
type: string
name: read_data
arguments: tag: D155
type: string
name: read_data
arguments: tag: D148
type: string
name: read_data
arguments: tag: D83
type: string
name: read_data
arguments: tag: D139
type: string
name: read_data
arguments: tag: D3
type: string
name: read_data
arguments: tag: D164
type: string
name: read_data
arguments: tag: D86
type: string
name: read_data
arguments: tag: D59
type: string
name: read_data
arguments: tag: D177
type: string
name: read_data
arguments: tag: D183
type: string
name: read_data
arguments: tag: D109
type: string
name: read_data
arguments: tag: D112
type: string
name: read_data
arguments: tag: D171
type: string
name: read_data
arguments: tag: D126
type: string
name: read_data
arguments: tag: D121
type: string
name: read_data
arguments: tag: D40
type: string
name: read_data
arguments: tag: D37
type: string
name: read_data
arguments: tag: D12
type: string
name: read_data
arguments: tag: D91
type: string

tool: D90: a*.

tool: D155: aaav

tool: D148: %d = 1


tool: D83: a*.*

tool: D139: aaavbc

tool: D3: c*a*b

tool: D164: aab

tool: D86: aa

tool: D59: aaa

tool: D177: %d = 0


tool: D183: .*c

tool: D109: ab

tool: D112: ac*

tool: D171: a

tool: D126: a*.*b.a.*c*b*a*c*

tool: D121: abbabaaaaaaacaa

tool: D40: b.a.*c*b*a*c*

tool: D37: baaaaaaacaa

tool: D12: a*c*

tool: D91: c*

assistant: ```c
int main() {
  printf("%d = 1\n", isMatch("aaav", "a*."));
  printf("%d = 1\n", isMatch("aaavbc", "a*.*"));
  printf("%d = 1\n", isMatch("aab", "c*a*b"));
  printf("%d = 0\n", isMatch("aaa", "aa"));
  printf("%d = 0\n", isMatch("ab", ".*c"));
  printf("%d = 1\n", isMatch("a", "ac*"));
  printf("%d = 1\n", isMatch("abbabaaaaaaacaa", "a*.*b.a.*c*b*a*c*"));
  printf("%d = 1\n", isMatch("baaaaaaacaa", "b.a.*c*b*a*c*"));
  printf("%d = 1\n", isMatch("aa", "a*c*"));
  printf("%d = 0\n", isMatch("aa", "c*"));
  return 0;
}
```