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

```asm
<main>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0xe0,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movw   $0x7a73,-0xca(%rbp)
  movabs $0x7774706d6a676461,%rax
  mov    %rax,-0xc8(%rbp)
  movabs $0x7875716e6b686562,%rax
  mov    %rax,-0xc0(%rbp)
  movabs $0x7976726f6c696663,%rax
  mov    %rax,-0xb8(%rbp)
  movb   $0x20,-0xcb(%rbp)
  movl   $0x0,-0xdc(%rbp)
  movl   $0x0,-0xd8(%rbp)
  movl   $0x0,-0xd4(%rbp)
  lea    -0xb0(%rbp),%rax
  mov    %rax,%rsi
  lea    D5(%rip),%rax
  mov    %rax,%rdi
  call   <scanf@plt>
  lea    -0xb0(%rbp),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  mov    %eax,-0xd0(%rbp)
  movl   $0x0,-0xdc(%rbp)
  jmp    L43
L81:
  mov    -0xdc(%rbp),%eax
  cltq
  movzbl -0xb0(%rbp,%rax,1),%edx
  movzbl -0xcb(%rbp),%eax
  cmp    %al,%dl
  jne    L35
  addl   $0x1,-0xd4(%rbp)
  jmp    L73
L35:
  movl   $0x0,-0xd8(%rbp)
  jmp    L114
L2:
  mov    -0xdc(%rbp),%eax
  cltq
  movzbl -0xb0(%rbp,%rax,1),%edx
  mov    -0xd8(%rbp),%eax
  cltq
  movzbl -0xc8(%rbp,%rax,1),%eax
  cmp    %al,%dl
  jne    L36
  addl   $0x1,-0xd4(%rbp)
  jmp    L6
L36:
  mov    -0xdc(%rbp),%eax
  cltq
  movzbl -0xb0(%rbp,%rax,1),%edx
  mov    -0xd8(%rbp),%eax
  cltq
  movzbl -0xc0(%rbp,%rax,1),%eax
  cmp    %al,%dl
  jne    L121
  addl   $0x2,-0xd4(%rbp)
  jmp    L6
L121:
  mov    -0xdc(%rbp),%eax
  cltq
  movzbl -0xb0(%rbp,%rax,1),%edx
  mov    -0xd8(%rbp),%eax
  cltq
  movzbl -0xb8(%rbp,%rax,1),%eax
  cmp    %al,%dl
  jne    L62
  addl   $0x3,-0xd4(%rbp)
  jmp    L6
L62:
  mov    -0xdc(%rbp),%eax
  cltq
  movzbl -0xb0(%rbp,%rax,1),%edx
  mov    -0xd8(%rbp),%eax
  cltq
  movzbl -0xca(%rbp,%rax,1),%eax
  cmp    %al,%dl
  jne    L6
  addl   $0x4,-0xd4(%rbp)
L6:
  addl   $0x1,-0xd8(%rbp)
L114:
  cmpl   $0x7,-0xd8(%rbp)
  jle    L2
L73:
  addl   $0x1,-0xdc(%rbp)
L43:
  mov    -0xdc(%rbp),%eax
  cmp    -0xd0(%rbp),%eax
  jl     L81
  mov    -0xd4(%rbp),%eax
  mov    %eax,%esi
  lea    D7(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  mov    $0x0,%eax
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L65
  call   <__stack_chk_fail@plt>
L65:
  leave
  ret
```

tool_calls: name: parse_data
arguments: tag: D5
type_infered: string
name: parse_data
arguments: tag: D7
type_infered: string

tool: D5: %[^
]s

tool: D7: %d

assistant: ```c
int main() {
  char four_click[] = {'s', 'z'};
  char one_click[] = {'a', 'd', 'g', 'j', 'm', 'p', 't', 'w'};
  char two_click[] = {'b', 'e', 'h', 'k', 'n', 'q', 'u', 'x'};
  char three_click[] = {'c', 'f', 'i', 'l', 'o', 'r', 'v', 'y'};
  char space[] = {' '};
  char text[160];
  int i = 0, k = 0, how_many_clicks = 0;
  scanf("%[^\n]s", &text);
  int l = strlen(text);
  for (i = 0; i < l; i++) {
    if (text[i] == space[0])
      how_many_clicks++;
    else {
      for (k = 0; k < 8; k++) {
        if (text[i] == one_click[k])
          how_many_clicks++;
        else if (text[i] == two_click[k])
          how_many_clicks = how_many_clicks + 2;
        else if (text[i] == three_click[k])
          how_many_clicks = how_many_clicks + 3;
        else if (text[i] == four_click[k])
          how_many_clicks = how_many_clicks + 4;
      }
    }
  }
  printf("%d", how_many_clicks);
}
```