user: What is the c source code of the assembly code below:

```asm
<mac_aton>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x30,%rsp
  mov    %rdi,-0x28(%rbp)
  mov    %rsi,-0x30(%rbp)
  movl   $0x0,-0x14(%rbp)
  movb   $0x0,-0x16(%rbp)
  cmpq   $0x0,-0x28(%rbp)
  je     L167
  mov    -0x28(%rbp),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  cmp    $0x11,%eax
  je     L27
L167:
  movl   $0xffffffff,-0x14(%rbp)
  jmp    L232
L27:
  movl   $0x0,-0x10(%rbp)
  mov    -0x28(%rbp),%rax
  mov    %rax,-0x8(%rbp)
  jmp    L17
L48:
  movb   $0x0,-0x15(%rbp)
  cmpl   $0x0,-0x10(%rbp)
  je     L180
  cmpb   $0x0,-0x16(%rbp)
  jne    L45
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x3a,%al
  je     L40
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x2d,%al
  jne    L45
L40:
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  mov    %al,-0x16(%rbp)
L45:
  cmpb   $0x0,-0x16(%rbp)
  je     L181
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    %al,-0x16(%rbp)
  jne    L181
  addq   $0x1,-0x8(%rbp)
  jmp    L180
L181:
  movl   $0xffffffff,-0x14(%rbp)
  jmp    L232
L180:
  movl   $0x0,-0xc(%rbp)
  jmp    L118
L231:
  cmpl   $0x0,-0xc(%rbp)
  je     L57
  shlb   $0x4,-0x15(%rbp)
L57:
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x2f,%al
  jle    L235
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x39,%al
  jg     L235
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  mov    %eax,%edx
  movzbl -0x15(%rbp),%eax
  add    %edx,%eax
  sub    $0x30,%eax
  mov    %al,-0x15(%rbp)
  jmp    L87
L235:
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x40,%al
  jle    L152
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x46,%al
  jg     L152
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  mov    %eax,%edx
  movzbl -0x15(%rbp),%eax
  add    %edx,%eax
  sub    $0x37,%eax
  mov    %al,-0x15(%rbp)
  jmp    L87
L152:
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x60,%al
  jle    L246
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x66,%al
  jg     L246
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  mov    %eax,%edx
  movzbl -0x15(%rbp),%eax
  add    %edx,%eax
  sub    $0x57,%eax
  mov    %al,-0x15(%rbp)
  jmp    L87
L246:
  movl   $0xffffffff,-0x14(%rbp)
  jmp    L232
L87:
  addl   $0x1,-0xc(%rbp)
  addq   $0x1,-0x8(%rbp)
L118:
  cmpl   $0x1,-0xc(%rbp)
  jle    L231
  mov    -0x10(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x30(%rbp),%rax
  add    %rax,%rdx
  movzbl -0x15(%rbp),%eax
  mov    %al,(%rdx)
  addl   $0x1,-0x10(%rbp)
L17:
  cmpl   $0x5,-0x10(%rbp)
  jle    L48
  nop
L232:
  mov    -0x14(%rbp),%eax
  leave
  ret
```

assistant: ```c
int mac_aton(const char *mac_in, unsigned char *mac) {
  int err = 0;
  int i, j;
  const char *p;
  char sep = 0;
  unsigned char d;
  if (!mac_in || strlen(mac_in) != 17) {
    err = -1;
    goto exit;
  }
  for (i = 0, p = mac_in; i < 6; i++) {
    d = 0;
    if (i) {
      if (!sep) {
        if (*p == ':' || *p == '-')
          sep = *p;
      }
      if (sep && *p == sep) {
        p++;
      } else {
        err = -1;
        goto exit;
      }
    }
    for (j = 0; j < 2; j++, p++) {
      if (j)
        d <<= 4;
      if (*p >= '0' && *p <= '9') {
        d += (*p - '0');
      } else if (*p >= 'A' && *p <= 'F') {
        d += (*p - 'A') + 10;
      } else if (*p >= 'a' && *p <= 'f') {
        d += (*p - 'a') + 10;
      } else {
        err = -1;
        goto exit;
      }
    }
    mac[i] = d;
  }
exit:
  return err;
}
```