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

```asm
<ckb_info>:
  endbr64
  push   %r15
  lea    D211(%rip),%rdi
  xor    %eax,%eax
  lea    D273(%rip),%r15
  push   %r14
  lea    D125(%rip),%r14
  push   %r13
  lea    D294(%rip),%r13
  push   %r12
  lea    D91(%rip),%r12
  push   %rbp
  lea    D485(%rip),%rbp
  push   %rbx
  lea    D390(%rip),%rbx
  sub    $0x8,%rsp
  call   <printf@plt>
  lea    D163(%rip),%rdi
  call   <printurl@plt>
  mov    $0xa,%edi
  call   <putchar@plt>
  lea    D65(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  lea    D475(%rip),%rdi
  call   <printurl@plt>
  mov    $0xa,%edi
  call   <putchar@plt>
  lea    D158(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  lea    D412(%rip),%rdi
  call   <printurl@plt>
  lea    D311(%rip),%rsi
  lea    D116(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  lea    D52(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  lea    D380(%rip),%rdi
  call   <printurl@plt>
  mov    $0xa,%edi
  call   <putchar@plt>
  lea    D403(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  lea    D304(%rip),%rdi
  call   <printurl@plt>
  mov    $0xa,%edi
  call   <putchar@plt>
  lea    D149(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  lea    D140(%rip),%rdi
  call   <printurl@plt>
  mov    $0xa,%edi
  call   <putchar@plt>
  mov    %r13,%rdx
  mov    %r13,%rsi
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <printf@plt>
  lea    D529(%rip),%rdi
  call   <printurl@plt>
  mov    $0x20,%edi
  call   <putchar@plt>
  mov    %r12,%rdi
  call   <printurl@plt>
  mov    $0x20,%edi
  call   <putchar@plt>
  xor    %eax,%eax
  mov    $0x5a,%esi
  lea    D339(%rip),%rdi
  call   <printf@plt>
  mov    $0xa,%edi
  call   <putchar@plt>
  mov    %r15,%rdx
  mov    %rbp,%rdi
  xor    %eax,%eax
  lea    D365(%rip),%rsi
  call   <printf@plt>
  lea    D85(%rip),%rdi
  call   <printurl@plt>
  mov    $0x20,%edi
  call   <putchar@plt>
  mov    %r12,%rdi
  call   <printurl@plt>
  mov    $0x20,%edi
  call   <putchar@plt>
  lea    D484(%rip),%rdi
  call   <printurl@plt>
  mov    $0xa,%edi
  call   <putchar@plt>
  lea    D77(%rip),%r9
  lea    D189(%rip),%rsi
  xor    %eax,%eax
  mov    %r9,%rdx
  mov    %rbp,%rdi
  call   <printf@plt>
  lea    D500(%rip),%rdi
  call   <printurl@plt>
  mov    $0x20,%edi
  call   <putchar@plt>
  lea    D308(%rip),%rdi
  call   <printurl@plt>
  mov    $0x20,%edi
  call   <putchar@plt>
  movsd  D371(%rip),%xmm0
  mov    $0x3,%eax
  movsd  D418(%rip),%xmm1
  lea    D421(%rip),%rdi
  movapd %xmm0,%xmm2
  call   <printf@plt>
  mov    $0xa,%edi
  call   <putchar@plt>
  lea    D524(%rip),%r8
  lea    D494(%rip),%rsi
  xor    %eax,%eax
  mov    %r8,%rdx
  mov    %rbp,%rdi
  lea    D271(%rip),%rbp
  call   <printf@plt>
  lea    D213(%rip),%rdi
  call   <printurl@plt>
  mov    $0x20,%edi
  call   <putchar@plt>
  mov    %r12,%rdi
  lea    D38(%rip),%r12
  call   <printurl@plt>
  mov    $0x20,%edi
  call   <putchar@plt>
  mov    $0x30,%edi
  call   <putchar@plt>
  mov    $0xa,%edi
  call   <putchar@plt>
  lea    D114(%rip),%rsi
  lea    D155(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    %r12,%rsi
  lea    D488(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  lea    D366(%rip),%rsi
  lea    D404(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  lea    D209(%rip),%rsi
  lea    D200(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    %rbx,%rdi
  xor    %eax,%eax
  call   <printf@plt>
  lea    D256(%rip),%rdi
  call   <printurl@plt>
  mov    %r12,%rsi
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    %r14,%rdi
  call   <printurl@plt>
  lea    D77(%rip),%r9
  mov    %rbp,%rdi
  xor    %eax,%eax
  mov    %r9,%rsi
  call   <printf@plt>
  lea    D121(%rip),%rdi
  call   <printurl@plt>
  lea    D524(%rip),%r8
  mov    %rbp,%rdi
  xor    %eax,%eax
  mov    %r8,%rsi
  call   <printf@plt>
  lea    D291(%rip),%rdi
  call   <printurl@plt>
  mov    $0xa,%edi
  call   <putchar@plt>
  mov    %rbx,%rdi
  xor    %eax,%eax
  call   <printf@plt>
  lea    D191(%rip),%rdi
  call   <printurl@plt>
  mov    %r15,%rsi
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <printf@plt>
  lea    D132(%rip),%r8
  mov    %r8,%rdi
  call   <printurl@plt>
  mov    %r12,%rsi
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    %r14,%rdi
  call   <printurl@plt>
  mov    $0xa,%edi
  call   <putchar@plt>
  mov    %rbx,%rdi
  xor    %eax,%eax
  call   <printf@plt>
  lea    D8(%rip),%rdi
  call   <printurl@plt>
  mov    %r15,%rsi
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <printf@plt>
  lea    D132(%rip),%r8
  mov    %r8,%rdi
  call   <printurl@plt>
  xor    %eax,%eax
  mov    %r12,%rsi
  mov    %rbp,%rdi
  call   <printf@plt>
  mov    %r14,%rdi
  call   <printurl@plt>
  mov    %r13,%rsi
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <printf@plt>
  lea    D37(%rip),%rdi
  call   <printurl@plt>
  add    $0x8,%rsp
  mov    $0xa,%edi
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  jmp    1070 <putchar@plt>
```

tool_calls: name: unpack_data
arguments: label: D211
type: string
name: unpack_data
arguments: label: D273
type: string
name: unpack_data
arguments: label: D125
type: string
name: unpack_data
arguments: label: D294
type: string
name: unpack_data
arguments: label: D91
type: string
name: unpack_data
arguments: label: D485
type: string
name: unpack_data
arguments: label: D390
type: string
name: unpack_data
arguments: label: D163
type: string
name: unpack_data
arguments: label: D65
type: string
name: unpack_data
arguments: label: D475
type: string
name: unpack_data
arguments: label: D158
type: string
name: unpack_data
arguments: label: D412
type: string
name: unpack_data
arguments: label: D311
type: string
name: unpack_data
arguments: label: D116
type: string
name: unpack_data
arguments: label: D52
type: string
name: unpack_data
arguments: label: D380
type: string
name: unpack_data
arguments: label: D403
type: string
name: unpack_data
arguments: label: D304
type: string
name: unpack_data
arguments: label: D149
type: string
name: unpack_data
arguments: label: D140
type: string
name: unpack_data
arguments: label: D529
type: string
name: unpack_data
arguments: label: D339
type: string
name: unpack_data
arguments: label: D365
type: string
name: unpack_data
arguments: label: D85
type: string
name: unpack_data
arguments: label: D484
type: string
name: unpack_data
arguments: label: D77
type: string
name: unpack_data
arguments: label: D189
type: string
name: unpack_data
arguments: label: D500
type: string
name: unpack_data
arguments: label: D308
type: string
name: unpack_data
arguments: label: D371
type: f64
name: unpack_data
arguments: label: D418
type: f64
name: unpack_data
arguments: label: D421
type: string
name: unpack_data
arguments: label: D524
type: string
name: unpack_data
arguments: label: D494
type: string
name: unpack_data
arguments: label: D271
type: string
name: unpack_data
arguments: label: D213
type: string
name: unpack_data
arguments: label: D38
type: string
name: unpack_data
arguments: label: D114
type: string
name: unpack_data
arguments: label: D155
type: string
name: unpack_data
arguments: label: D488
type: string
name: unpack_data
arguments: label: D366
type: string
name: unpack_data
arguments: label: D404
type: string
name: unpack_data
arguments: label: D209
type: string
name: unpack_data
arguments: label: D200
type: string
name: unpack_data
arguments: label: D256
type: string
name: unpack_data
arguments: label: D121
type: string
name: unpack_data
arguments: label: D291
type: string
name: unpack_data
arguments: label: D191
type: string
name: unpack_data
arguments: label: D132
type: string
name: unpack_data
arguments: label: D8
type: string
name: unpack_data
arguments: label: D37
type: string

tool: D211: name 

tool: D273: color

tool: D125: 2.0

tool: D294: angle

tool: 

tool: D485: param %s %s 

tool: D390: preset 

tool: D163: Wave

tool: D65: version 

tool: D475: 0.10

tool: D158: author 

tool: D412: MSC

tool: D311: 2014-2015

tool: D116: 
year %s


tool: D52: license 

tool: D380: GPLv2

tool: D403: guid 

tool: D304: {E0BBA19E-C328-4C0E-8E3C-A06D5722B4FC}

tool: D149: description 

tool: D140: A moving wave effect.

tool: D529: Angle:

tool: D339: %ld

tool: D365: agradient

tool: D85: Wave color:

tool: D484: ffffffff

tool: D77: length

tool: D189: double

tool: D500: Wave length:

tool: D308: %

tool: D371: 100

tool: D418: 1

tool: D421: %lf %lf %lf

tool: D524: symmetric

tool: D494: bool

tool: D271:  %s=

tool: D213: Symmetric

tool: D38: duration

tool: D114: position

tool: D155: kpmode %s


tool: D488: time %s


tool: D366: live

tool: D404: parammode %s


tool: D209: on

tool: D200: preempt %s


tool: D256: Shimmer

tool: D121: 50.0

tool: D291: 1

tool: D191: Rainbow

tool: D132: 0:ffff0000 17:ffffff00 33:ff00ff00 50:ff00ffff 67:ff0000ff 83:ffff00ff 100:ffff0000

tool: D8: Vertical rainbow

tool: D37: 180

assistant: ```c
void ckb_info() {
  do {
    printf("name ");
    printurl("Wave");
    printf("\n");
  } while (0);
  do {
    printf("version ");
    printurl("0.10");
    printf("\n");
  } while (0);
  do {
    printf("author ");
    printurl("MSC");
    printf("\nyear %s\n", "2014-2015");
  } while (0);
  do {
    printf("license ");
    printurl("GPLv2");
    printf("\n");
  } while (0);
  do {
    printf("guid ");
    printurl("{E0BBA19E-C328-4C0E-8E3C-A06D5722B4FC}");
    printf("\n");
  } while (0);
  do {
    printf("description ");
    printurl("A moving wave effect.");
    printf("\n");
  } while (0);
  do {
    printf("param %s %s ", "angle", "angle");
    printurl("Angle:");
    printf(" ");
    printurl("");
    printf(" ");
    printf("%ld", (long)(90));
    printf("\n");
  } while (0);
  do {
    printf("param %s %s ", "agradient", "color");
    printurl("Wave color:");
    printf(" ");
    printurl("");
    printf(" ");
    printurl("ffffffff");
    printf("\n");
  } while (0);
  do {
    printf("param %s %s ", "double", "length");
    printurl("Wave length:");
    printf(" ");
    printurl("%");
    printf(" ");
    printf("%lf %lf %lf", (double)(100), (double)(1.), (double)(100.));
    printf("\n");
  } while (0);
  do {
    printf("param %s %s ", "bool", "symmetric");
    printurl("Symmetric");
    printf(" ");
    printurl("");
    printf(" ");
    printf((0) ? "1" : "0");
    printf("\n");
  } while (0);
  do {
    printf("kpmode %s\n", "position");
  } while (0);
  do {
    printf("time %s\n", "duration");
  } while (0);
  do {
    printf("parammode %s\n", (1) ? "live" : "static");
  } while (0);
  do {
    printf("preempt %s\n", (1) ? "on" : "off");
  } while (0);
  do {
    printf("preset ");
    printurl("Shimmer");
  } while (0);
  do {
    printf(" %s=", "duration");
    printurl("2.0");
  } while (0);
  do {
    printf(" %s=", "length");
    printurl("50.0");
  } while (0);
  do {
    printf(" %s=", "symmetric");
    printurl("1");
  } while (0);
  do {
    printf("\n");
  } while (0);
  do {
    printf("preset ");
    printurl("Rainbow");
  } while (0);
  do {
    printf(" %s=", "color");
    printurl("0:ffff0000 17:ffffff00 33:ff00ff00 50:ff00ffff 67:ff0000ff 83:ffff00ff 100:ffff0000");
  } while (0);
  do {
    printf(" %s=", "duration");
    printurl("2.0");
  } while (0);
  do {
    printf("\n");
  } while (0);
  do {
    printf("preset ");
    printurl("Vertical rainbow");
  } while (0);
  do {
    printf(" %s=", "color");
    printurl("0:ffff0000 17:ffffff00 33:ff00ff00 50:ff00ffff 67:ff0000ff 83:ffff00ff 100:ffff0000");
  } while (0);
  do {
    printf(" %s=", "duration");
    printurl("2.0");
  } while (0);
  do {
    printf(" %s=", "angle");
    printurl("180");
  } while (0);
  do {
    printf("\n");
  } while (0);
}
```