user: 请将以下的汇编代码转换成C语言代码:

```asm
<uInIpv6Format32>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x18,%rsp
  mov    %rdi,%r12
  mov    %rcx,0x8(%rsp)
  mov    %r8,(%rsp)
  movzbl (%rdi),%edi
  test   %dil,%dil
  je     L191
  mov    %rsi,%r13
  mov    %rdx,%r14
  mov    %r9,%r15
  lea    0x1(%r12),%rbx
  mov    $0x0,%ebp
  jmp    L412
L481:
  add    $0x1,%ebp
L509:
  add    $0x1,%rbx
  movzbl -0x1(%rbx),%edi
  test   %dil,%dil
  je     L355
L412:
  cmp    $0x3a,%dil
  je     L481
  movsbl %dil,%edi
  call   <isxdigit@plt>
  test   %eax,%eax
  jne    L509
  mov    $0x0,%eax
  jmp    L90
L355:
  cmp    $0x8,%ebp
  ja     L444
  mov    %ebp,%ebp
  lea    D103(%rip),%rdx
  movslq (%rdx,%rbp,4),%rax
  add    %rdx,%rax
  notrack jmp *%rax
L191:
  lea    D368(%rip),%rdi
  call   <puts@plt>
  mov    $0x0,%eax
  jmp    L90
  mov    0x60(%rsp),%rcx
  mov    %r13,%rdx
  lea    D382(%rip),%rsi
  mov    %r12,%rdi
  mov    $0x0,%eax
  call   <sscanf@plt>
  cmp    $0x2,%eax
  je     L556
  mov    %r12,%rdi
  call   <strlen@plt>
  mov    $0x2,%edx
  lea    D27(%rip),%rsi
  lea    -0x2(%rax,%r12,1),%edi
  call   <strncmp@plt>
  test   %eax,%eax
  je     L139
  lea    D91(%rip),%rdi
  call   <puts@plt>
  mov    $0x0,%eax
  jmp    L90
L139:
  mov    %r13,%rdx
  lea    D366(%rip),%rsi
  mov    %r12,%rdi
  call   <sscanf@plt>
  cmp    $0x1,%eax
  je     L556
  lea    D154(%rip),%rdi
  call   <puts@plt>
  mov    $0x0,%eax
  jmp    L90
  mov    0x60(%rsp),%r8
  mov    0x58(%rsp),%rcx
  mov    %r13,%rdx
  lea    D158(%rip),%rsi
  mov    %r12,%rdi
  mov    $0x0,%eax
  call   <sscanf@plt>
  cmp    $0x3,%eax
  je     L556
  mov    0x60(%rsp),%r8
  mov    %r14,%rcx
  mov    %r13,%rdx
  lea    D345(%rip),%rsi
  mov    %r12,%rdi
  mov    $0x0,%eax
  call   <sscanf@plt>
  cmp    $0x3,%eax
  je     L556
  mov    %r12,%rdi
  call   <strlen@plt>
  mov    $0x2,%edx
  lea    D27(%rip),%rsi
  lea    -0x2(%rax,%r12,1),%edi
  call   <strncmp@plt>
  test   %eax,%eax
  je     L439
  lea    D474(%rip),%rdi
  call   <puts@plt>
  mov    $0x0,%eax
  jmp    L90
L439:
  mov    %r14,%rcx
  mov    %r13,%rdx
  lea    D223(%rip),%rsi
  mov    %r12,%rdi
  call   <sscanf@plt>
  cmp    $0x2,%eax
  je     L556
  lea    D152(%rip),%rdi
  call   <puts@plt>
  mov    $0x0,%eax
  jmp    L90
  mov    0x60(%rsp),%r9
  mov    0x58(%rsp),%r8
  mov    0x50(%rsp),%rcx
  mov    %r13,%rdx
  lea    D12(%rip),%rsi
  mov    %r12,%rdi
  mov    $0x0,%eax
  call   <sscanf@plt>
  cmp    $0x4,%eax
  je     L556
  mov    0x60(%rsp),%r9
  mov    0x58(%rsp),%r8
  mov    %r14,%rcx
  mov    %r13,%rdx
  lea    D266(%rip),%rsi
  mov    %r12,%rdi
  mov    $0x0,%eax
  call   <sscanf@plt>
  cmp    $0x4,%eax
  je     L556
  mov    0x60(%rsp),%r9
  mov    0x8(%rsp),%r8
  mov    %r14,%rcx
  mov    %r13,%rdx
  lea    D403(%rip),%rsi
  mov    %r12,%rdi
  mov    $0x0,%eax
  call   <sscanf@plt>
  cmp    $0x4,%eax
  je     L556
  mov    %r12,%rdi
  call   <strlen@plt>
  mov    $0x2,%edx
  lea    D27(%rip),%rsi
  lea    -0x2(%rax,%r12,1),%edi
  call   <strncmp@plt>
  test   %eax,%eax
  je     L255
  lea    D129(%rip),%rdi
  call   <puts@plt>
  mov    $0x0,%eax
  jmp    L90
L255:
  mov    0x8(%rsp),%r8
  mov    %r14,%rcx
  mov    %r13,%rdx
  lea    D68(%rip),%rsi
  mov    %r12,%rdi
  call   <sscanf@plt>
  cmp    $0x3,%eax
  je     L556
  lea    D240(%rip),%rdi
  call   <puts@plt>
  mov    $0x0,%eax
  jmp    L90
  sub    $0x8,%rsp
  push   0x68(%rsp)
  mov    0x68(%rsp),%r9
  mov    0x60(%rsp),%r8
  mov    %r15,%rcx
  mov    %r13,%rdx
  lea    D224(%rip),%rsi
  mov    %r12,%rdi
  mov    $0x0,%eax
  call   <sscanf@plt>
  add    $0x10,%rsp
  cmp    $0x5,%eax
  je     L556
  sub    $0x8,%rsp
  push   0x68(%rsp)
  mov    0x68(%rsp),%r9
  mov    0x60(%rsp),%r8
  mov    %r14,%rcx
  mov    %r13,%rdx
  lea    D57(%rip),%rsi
  mov    %r12,%rdi
  mov    $0x0,%eax
  call   <sscanf@plt>
  add    $0x10,%rsp
  cmp    $0x5,%eax
  je     L556
  sub    $0x8,%rsp
  push   0x68(%rsp)
  mov    0x68(%rsp),%r9
  mov    0x18(%rsp),%rbx
  mov    %rbx,%r8
  mov    %r14,%rcx
  mov    %r13,%rdx
  lea    D37(%rip),%rsi
  mov    %r12,%rdi
  mov    $0x0,%eax
  call   <sscanf@plt>
  add    $0x10,%rsp
  cmp    $0x5,%eax
  je     L556
  sub    $0x8,%rsp
  push   0x68(%rsp)
  mov    0x10(%rsp),%r9
  mov    %rbx,%r8
  mov    %r14,%rcx
  mov    %r13,%rdx
  lea    D442(%rip),%rsi
  mov    %r12,%rdi
  mov    $0x0,%eax
  call   <sscanf@plt>
  add    $0x10,%rsp
  cmp    $0x5,%eax
  je     L556
  mov    %r12,%rdi
  call   <strlen@plt>
  mov    $0x2,%edx
  lea    D27(%rip),%rsi
  lea    -0x2(%rax,%r12,1),%edi
  call   <strncmp@plt>
  test   %eax,%eax
  je     L546
  lea    D111(%rip),%rdi
  call   <puts@plt>
  mov    $0x0,%eax
  jmp    L90
L546:
  mov    (%rsp),%r9
  mov    0x8(%rsp),%r8
  mov    %r14,%rcx
  mov    %r13,%rdx
  lea    D218(%rip),%rsi
  mov    %r12,%rdi
  call   <sscanf@plt>
  cmp    $0x4,%eax
  je     L556
  lea    D432(%rip),%rdi
  call   <puts@plt>
  mov    $0x0,%eax
  jmp    L90
  push   0x60(%rsp)
  push   0x60(%rsp)
  mov    0x60(%rsp),%r9
  mov    %r15,%r8
  mov    0x10(%rsp),%rbx
  mov    %rbx,%rcx
  mov    %r13,%rdx
  lea    D164(%rip),%rsi
  mov    %r12,%rdi
  mov    $0x0,%eax
  call   <sscanf@plt>
  add    $0x10,%rsp
  cmp    $0x6,%eax
  je     L556
  push   0x60(%rsp)
  push   0x60(%rsp)
  mov    0x60(%rsp),%r9
  mov    %r15,%r8
  mov    %r14,%rcx
  mov    %r13,%rdx
  lea    D39(%rip),%rsi
  mov    %r12,%rdi
  mov    $0x0,%eax
  call   <sscanf@plt>
  add    $0x10,%rsp
  cmp    $0x6,%eax
  je     L556
  push   0x60(%rsp)
  push   0x60(%rsp)
  mov    0x60(%rsp),%r9
  mov    0x18(%rsp),%rbp
  mov    %rbp,%r8
  mov    %r14,%rcx
  mov    %r13,%rdx
  lea    D143(%rip),%rsi
  mov    %r12,%rdi
  mov    $0x0,%eax
  call   <sscanf@plt>
  add    $0x10,%rsp
  cmp    $0x6,%eax
  je     L556
  push   0x60(%rsp)
  push   0x60(%rsp)
  mov    %rbx,%r9
  mov    %rbp,%r8
  mov    %r14,%rcx
  mov    %r13,%rdx
  lea    D297(%rip),%rsi
  mov    %r12,%rdi
  mov    $0x0,%eax
  call   <sscanf@plt>
  add    $0x10,%rsp
  cmp    $0x6,%eax
  je     L556
  push   0x60(%rsp)
  push   %r15
  mov    %rbx,%r9
  mov    %rbp,%r8
  mov    %r14,%rcx
  mov    %r13,%rdx
  lea    D327(%rip),%rsi
  mov    %r12,%rdi
  mov    $0x0,%eax
  call   <sscanf@plt>
  add    $0x10,%rsp
  cmp    $0x6,%eax
  je     L556
  mov    %r12,%rdi
  call   <strlen@plt>
  mov    $0x2,%edx
  lea    D27(%rip),%rsi
  lea    -0x2(%rax,%r12,1),%edi
  call   <strncmp@plt>
  test   %eax,%eax
  je     L215
  lea    D97(%rip),%rdi
  call   <puts@plt>
  mov    $0x0,%eax
  jmp    L90
L215:
  sub    $0x8,%rsp
  push   %r15
  mov    0x10(%rsp),%r9
  mov    0x18(%rsp),%r8
  mov    %r14,%rcx
  mov    %r13,%rdx
  lea    D70(%rip),%rsi
  mov    %r12,%rdi
  call   <sscanf@plt>
  add    $0x10,%rsp
  cmp    $0x5,%eax
  je     L556
  lea    D294(%rip),%rdi
  call   <puts@plt>
  mov    $0x0,%eax
  jmp    L90
  sub    $0x8,%rsp
  push   0x68(%rsp)
  push   0x68(%rsp)
  push   0x68(%rsp)
  mov    %r15,%r9
  mov    0x20(%rsp),%rbx
  mov    %rbx,%r8
  mov    0x28(%rsp),%rbp
  mov    %rbp,%rcx
  mov    %r13,%rdx
  lea    D331(%rip),%rsi
  mov    %r12,%rdi
  mov    $0x0,%eax
  call   <sscanf@plt>
  add    $0x20,%rsp
  cmp    $0x7,%eax
  je     L556
  sub    $0x8,%rsp
  push   0x68(%rsp)
  push   0x68(%rsp)
  push   0x68(%rsp)
  mov    %r15,%r9
  mov    %rbx,%r8
  mov    %r14,%rcx
  mov    %r13,%rdx
  lea    D507(%rip),%rsi
  mov    %r12,%rdi
  mov    $0x0,%eax
  call   <sscanf@plt>
  add    $0x20,%rsp
  cmp    $0x7,%eax
  je     L556
  sub    $0x8,%rsp
  push   0x68(%rsp)
  push   0x68(%rsp)
  push   0x68(%rsp)
  mov    %r15,%r9
  mov    %rbp,%r8
  mov    %r14,%rcx
  mov    %r13,%rdx
  lea    D163(%rip),%rsi
  mov    %r12,%rdi
  mov    $0x0,%eax
  call   <sscanf@plt>
  add    $0x20,%rsp
  cmp    $0x7,%eax
  je     L556
  sub    $0x8,%rsp
  push   0x68(%rsp)
  push   0x68(%rsp)
  push   0x68(%rsp)
  mov    %rbx,%r9
  mov    %rbp,%r8
  mov    %r14,%rcx
  mov    %r13,%rdx
  lea    D84(%rip),%rsi
  mov    %r12,%rdi
  mov    $0x0,%eax
  call   <sscanf@plt>
  add    $0x20,%rsp
  cmp    $0x7,%eax
  je     L556
  sub    $0x8,%rsp
  push   0x68(%rsp)
  push   0x68(%rsp)
  push   %r15
  mov    %rbx,%r9
  mov    %rbp,%r8
  mov    %r14,%rcx
  mov    %r13,%rdx
  lea    D28(%rip),%rsi
  mov    %r12,%rdi
  mov    $0x0,%eax
  call   <sscanf@plt>
  add    $0x20,%rsp
  cmp    $0x7,%eax
  je     L556
  sub    $0x8,%rsp
  push   0x68(%rsp)
  push   0x60(%rsp)
  push   %r15
  mov    %rbx,%r9
  mov    %rbp,%r8
  mov    %r14,%rcx
  mov    %r13,%rdx
  lea    D499(%rip),%rsi
  mov    %r12,%rdi
  mov    $0x0,%eax
  call   <sscanf@plt>
  add    $0x20,%rsp
  cmp    $0x7,%eax
  je     L556
  push   0x60(%rsp)
  push   0x60(%rsp)
  push   0x60(%rsp)
  push   %r15
  mov    %rbx,%r9
  mov    %rbp,%r8
  mov    %r14,%rcx
  mov    %r13,%rdx
  lea    D188(%rip),%rsi
  mov    %r12,%rdi
  mov    $0x0,%eax
  call   <sscanf@plt>
  add    $0x20,%rsp
  cmp    $0x8,%eax
  je     L556
  mov    %r12,%rdi
  call   <strlen@plt>
  mov    $0x2,%edx
  lea    D27(%rip),%rsi
  lea    -0x2(%rax,%r12,1),%edi
  call   <strncmp@plt>
  test   %eax,%eax
  je     L302
  lea    D341(%rip),%rdi
  call   <puts@plt>
  mov    $0x0,%eax
  jmp    L90
L302:
  push   0x50(%rsp)
  push   %r15
  mov    0x10(%rsp),%r9
  mov    0x18(%rsp),%r8
  mov    %r14,%rcx
  mov    %r13,%rdx
  lea    D466(%rip),%rsi
  mov    %r12,%rdi
  call   <sscanf@plt>
  add    $0x10,%rsp
  cmp    $0x6,%eax
  je     L556
  lea    D292(%rip),%rdi
  call   <puts@plt>
  mov    $0x0,%eax
  jmp    L90
  sub    $0x8,%rsp
  push   0x60(%rsp)
  push   0x60(%rsp)
  push   %r15
  mov    0x20(%rsp),%r9
  mov    0x28(%rsp),%r8
  mov    %r14,%rcx
  mov    %r13,%rdx
  lea    D452(%rip),%rsi
  mov    %r12,%rdi
  mov    $0x0,%eax
  call   <sscanf@plt>
  add    $0x20,%rsp
  cmp    $0x7,%eax
  jne    L272
L556:
  sub    $0x8,%rsp
  mov    0x68(%rsp),%rax
  mov    (%rax),%eax
  push   %rax
  mov    0x68(%rsp),%rax
  mov    (%rax),%eax
  push   %rax
  mov    0x68(%rsp),%rax
  mov    (%rax),%eax
  push   %rax
  mov    (%r15),%r9d
  mov    0x20(%rsp),%rax
  mov    (%rax),%r8d
  mov    0x28(%rsp),%rax
  mov    (%rax),%ecx
  mov    (%r14),%edx
  mov    0x0(%r13),%esi
  lea    D267(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  add    $0x20,%rsp
  mov    $0x1,%eax
L90:
  add    $0x18,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L272:
  lea    D19(%rip),%rdi
  call   <puts@plt>
  mov    $0x0,%eax
  jmp    L90
L444:
  lea    D429(%rip),%rdi
  call   <puts@plt>
  mov    $0x0,%eax
  jmp    L90
```

tool_calls: name: disassemble_data
arguments: data_label: D368
data_type: string
name: disassemble_data
arguments: data_label: D382
data_type: string
name: disassemble_data
arguments: data_label: D27
data_type: string
name: disassemble_data
arguments: data_label: D91
data_type: string
name: disassemble_data
arguments: data_label: D366
data_type: string
name: disassemble_data
arguments: data_label: D154
data_type: string
name: disassemble_data
arguments: data_label: D158
data_type: string
name: disassemble_data
arguments: data_label: D345
data_type: string
name: disassemble_data
arguments: data_label: D474
data_type: string
name: disassemble_data
arguments: data_label: D223
data_type: string
name: disassemble_data
arguments: data_label: D152
data_type: string
name: disassemble_data
arguments: data_label: D12
data_type: string
name: disassemble_data
arguments: data_label: D266
data_type: string
name: disassemble_data
arguments: data_label: D403
data_type: string
name: disassemble_data
arguments: data_label: D129
data_type: string
name: disassemble_data
arguments: data_label: D68
data_type: string
name: disassemble_data
arguments: data_label: D240
data_type: string
name: disassemble_data
arguments: data_label: D224
data_type: string
name: disassemble_data
arguments: data_label: D57
data_type: string
name: disassemble_data
arguments: data_label: D37
data_type: string
name: disassemble_data
arguments: data_label: D442
data_type: string
name: disassemble_data
arguments: data_label: D111
data_type: string
name: disassemble_data
arguments: data_label: D218
data_type: string
name: disassemble_data
arguments: data_label: D432
data_type: string
name: disassemble_data
arguments: data_label: D164
data_type: string
name: disassemble_data
arguments: data_label: D39
data_type: string
name: disassemble_data
arguments: data_label: D143
data_type: string
name: disassemble_data
arguments: data_label: D297
data_type: string
name: disassemble_data
arguments: data_label: D327
data_type: string
name: disassemble_data
arguments: data_label: D97
data_type: string
name: disassemble_data
arguments: data_label: D70
data_type: string
name: disassemble_data
arguments: data_label: D294
data_type: string
name: disassemble_data
arguments: data_label: D331
data_type: string
name: disassemble_data
arguments: data_label: D507
data_type: string
name: disassemble_data
arguments: data_label: D163
data_type: string
name: disassemble_data
arguments: data_label: D84
data_type: string
name: disassemble_data
arguments: data_label: D28
data_type: string
name: disassemble_data
arguments: data_label: D499
data_type: string
name: disassemble_data
arguments: data_label: D188
data_type: string
name: disassemble_data
arguments: data_label: D341
data_type: string
name: disassemble_data
arguments: data_label: D466
data_type: string
name: disassemble_data
arguments: data_label: D292
data_type: string
name: disassemble_data
arguments: data_label: D452
data_type: string
name: disassemble_data
arguments: data_label: D267
data_type: string
name: disassemble_data
arguments: data_label: D19
data_type: string
name: disassemble_data
arguments: data_label: D429
data_type: string

tool: D368: err 1

tool: D382: %x::%x

tool: D27: ::

tool: D91: err 2b

tool: D366: %x::

tool: D154: err 2a

tool: D158: %x::%x:%x

tool: D345: %x:%x::%x

tool: D474: err 3b

tool: D223: %x:%x::

tool: D152: err 3a

tool: D12: %x::%x:%x:%x

tool: D266: %x:%x::%x:%x

tool: D403: %x:%x:%x::%x

tool: D129: err 4b

tool: D68: %x:%x:%x::

tool: D240: err 4a

tool: D224: %x::%x:%x:%x:%x

tool: D57: %x:%x::%x:%x:%x

tool: D37: %x:%x:%x::%x:%x

tool: D442: %x:%x:%x:%x::%x

tool: D111: err 5b

tool: D218: %x:%x:%x:%x::

tool: D432: err 5a

tool: D164: %x::%x:%x:%x:%x:%x

tool: D39: %x:%x::%x:%x:%x:%x

tool: D143: %x:%x:%x::%x:%x:%x

tool: D297: %x:%x:%x:%x::%x:%x

tool: D327: %x:%x:%x:%x:%x::%x

tool: D97: err 6b

tool: D70: %x:%x:%x:%x:%x::

tool: D294: err 6a

tool: D331: %x::%x:%x:%x:%x:%x:%x

tool: D507: %x:%x::%x:%x:%x:%x:%x

tool: D163: %x:%x:%x::%x:%x:%x:%x

tool: D84: %x:%x:%x:%x::%x:%x:%x

tool: D28: %x:%x:%x:%x:%x::%x:%x

tool: D499: %x:%x:%x:%x:%x:%x::%x

tool: D188: %x:%x:%x:%x:%x:%x:%x:%x

tool: D341: err 7b

tool: D466: %x:%x:%x:%x:%x:%x::

tool: D292: err 7a

tool: D452: %x:%x:%x:%x:%x:%x:%x::

tool: D267: uInIpv6Format32: %x:%x:%x:%x:%x:%x:%x:%x


tool: D19: err 8

tool: D429: err default

assistant: ```c
unsigned uInIpv6Format32(const char *cIPv6, unsigned *h1, unsigned *h2, unsigned *h3, unsigned *h4, unsigned *h5, unsigned *h6, unsigned *h7, unsigned *h8) {
  register int i;
  unsigned uColonCount = 0;
  unsigned uRead = 0;
  for (i = 0; cIPv6[i]; i++) {
    if (cIPv6[i] == ':')
      uColonCount++;
    if (cIPv6[i] != ':' && !isxdigit(cIPv6[i]))
      return (0);
  }
  switch (uColonCount) {
  case 0:
  case 1:
    printf("err 1\n");
    return (0);
    break;
  case 2:
    uRead = sscanf(cIPv6, "%x::%x", h1, h8);
    if (uRead != 2 && !strncmp(cIPv6 + strlen(cIPv6) - 2, "::", 2)) {
      uRead = sscanf(cIPv6, "%x::", h1);
      if (uRead != 1) {
        printf("err 2a\n");
        return (0);
      }
    } else if (uRead != 2) {
      printf("err 2b\n");
      return (0);
    }
    break;
  case 3:
    uRead = sscanf(cIPv6, "%x::%x:%x", h1, h7, h8);
    if (uRead != 3) {
      uRead = sscanf(cIPv6, "%x:%x::%x", h1, h2, h8);
      if (uRead != 3 && !strncmp(cIPv6 + strlen(cIPv6) - 2, "::", 2)) {
        uRead = sscanf(cIPv6, "%x:%x::", h1, h2);
        if (uRead != 2) {
          printf("err 3a\n");
          return (0);
        }
      } else if (uRead != 3) {
        printf("err 3b\n");
        return (0);
      }
    }
    break;
  case 4:
    uRead = sscanf(cIPv6, "%x::%x:%x:%x", h1, h6, h7, h8);
    if (uRead != 4) {
      uRead = sscanf(cIPv6, "%x:%x::%x:%x", h1, h2, h7, h8);
      if (uRead != 4) {
        uRead = sscanf(cIPv6, "%x:%x:%x::%x", h1, h2, h3, h8);
        if (uRead != 4 && !strncmp(cIPv6 + strlen(cIPv6) - 2, "::", 2)) {
          uRead = sscanf(cIPv6, "%x:%x:%x::", h1, h2, h3);
          if (uRead != 3) {
            printf("err 4a\n");
            return (0);
          }
        } else if (uRead != 4) {
          printf("err 4b\n");
          return (0);
        }
      }
    }
    break;
  case 5:
    uRead = sscanf(cIPv6, "%x::%x:%x:%x:%x", h1, h5, h6, h7, h8);
    if (uRead != 5) {
      uRead = sscanf(cIPv6, "%x:%x::%x:%x:%x", h1, h2, h6, h7, h8);
      if (uRead != 5) {
        uRead = sscanf(cIPv6, "%x:%x:%x::%x:%x", h1, h2, h3, h7, h8);
        if (uRead != 5) {
          uRead = sscanf(cIPv6, "%x:%x:%x:%x::%x", h1, h2, h3, h4, h8);
          if (uRead != 5 && !strncmp(cIPv6 + strlen(cIPv6) - 2, "::", 2)) {
            uRead = sscanf(cIPv6, "%x:%x:%x:%x::", h1, h2, h3, h4);
            if (uRead != 4) {
              printf("err 5a\n");
              return (0);
            }
          } else if (uRead != 5) {
            printf("err 5b\n");
            return (0);
          }
        }
      }
    }
    break;
  case 6:
    uRead = sscanf(cIPv6, "%x::%x:%x:%x:%x:%x", h1, h4, h5, h6, h7, h8);
    if (uRead != 6) {
      uRead = sscanf(cIPv6, "%x:%x::%x:%x:%x:%x", h1, h2, h5, h6, h7, h8);
      if (uRead != 6) {
        uRead = sscanf(cIPv6, "%x:%x:%x::%x:%x:%x", h1, h2, h3, h6, h7, h8);
        if (uRead != 6) {
          uRead = sscanf(cIPv6, "%x:%x:%x:%x::%x:%x", h1, h2, h3, h4, h7, h8);
          if (uRead != 6) {
            uRead = sscanf(cIPv6, "%x:%x:%x:%x:%x::%x", h1, h2, h3, h4, h5, h8);
            if (uRead != 6 && !strncmp(cIPv6 + strlen(cIPv6) - 2, "::", 2)) {
              uRead = sscanf(cIPv6, "%x:%x:%x:%x:%x::", h1, h2, h3, h4, h5);
              if (uRead != 5) {
                printf("err 6a\n");
                return (0);
              }
            } else if (uRead != 6) {
              printf("err 6b\n");
              return (0);
            }
          }
        }
      }
    }
    break;
  case 7:
    uRead = sscanf(cIPv6, "%x::%x:%x:%x:%x:%x:%x", h1, h3, h4, h5, h6, h7, h8);
    if (uRead != 7) {
      uRead = sscanf(cIPv6, "%x:%x::%x:%x:%x:%x:%x", h1, h2, h4, h5, h6, h7, h8);
      if (uRead != 7) {
        uRead = sscanf(cIPv6, "%x:%x:%x::%x:%x:%x:%x", h1, h2, h3, h5, h6, h7, h8);
        if (uRead != 7) {
          uRead = sscanf(cIPv6, "%x:%x:%x:%x::%x:%x:%x", h1, h2, h3, h4, h6, h7, h8);
          if (uRead != 7) {
            uRead = sscanf(cIPv6, "%x:%x:%x:%x:%x::%x:%x", h1, h2, h3, h4, h5, h7, h8);
            if (uRead != 7) {
              uRead = sscanf(cIPv6, "%x:%x:%x:%x:%x:%x::%x", h1, h2, h3, h4, h5, h6, h8);
              if (uRead != 7) {
                uRead = sscanf(cIPv6, "%x:%x:%x:%x:%x:%x:%x:%x", h1, h2, h3, h4, h5, h6, h7, h8);
                if (uRead != 8 && !strncmp(cIPv6 + strlen(cIPv6) - 2, "::", 2)) {
                  uRead = sscanf(cIPv6, "%x:%x:%x:%x:%x:%x::", h1, h2, h3, h4, h5, h6);
                  if (uRead != 6) {
                    printf("err 7a\n");
                    return (0);
                  }
                } else if (uRead != 8) {
                  printf("err 7b\n");
                  return (0);
                }
              }
            }
          }
        }
      }
    }
    break;
  case 8:
    uRead = sscanf(cIPv6, "%x:%x:%x:%x:%x:%x:%x::", h1, h2, h3, h4, h5, h6, h7);
    if (uRead != 7) {
      printf("err 8\n");
      return (0);
    }
    break;
  default:
    printf("err default\n");
    return (0);
  }
  printf("uInIpv6Format32: %x:%x:%x:%x:%x:%x:%x:%x\n", *h1, *h2, *h3, *h4, *h5, *h6, *h7, *h8);
  return (1);
}
```