user: 请从给定的汇编指令推导出C源代码:

```asm
<test7>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x20,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  lea    -0x18(%rbp),%rax
  mov    %rax,%rdi
  call   <KeyVal_new@plt>
  mov    %eax,%edx
  lea    D342(%rip),%rax
  mov    %rax,%rsi
  mov    %edx,%edi
  call   <_check_err@plt>
  mov    -0x18(%rbp),%rcx
  lea    -0x10(%rbp),%rax
  lea    D807(%rip),%rdx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <KeyVal_findIdealIndex@plt>
  mov    %eax,%edx
  lea    D483(%rip),%rax
  mov    %rax,%rsi
  mov    %edx,%edi
  call   <_check_err@plt>
  mov    -0x10(%rbp),%rax
  test   %rax,%rax
  sete   %al
  movzbl %al,%eax
  lea    D53(%rip),%rdx
  mov    %rdx,%rsi
  mov    %eax,%edi
  call   <ok@plt>
  mov    -0x18(%rbp),%rcx
  lea    -0x10(%rbp),%rax
  lea    D807(%rip),%rdx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <KeyVal_findIndex@plt>
  cmp    $0x2,%eax
  sete   %al
  movzbl %al,%eax
  lea    D896(%rip),%rdx
  mov    %rdx,%rsi
  mov    %eax,%edi
  call   <ok@plt>
  mov    -0x18(%rbp),%rax
  lea    D749(%rip),%rdx
  lea    D888(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <KeyVal_setValue@plt>
  mov    %eax,%edx
  lea    D962(%rip),%rax
  mov    %rax,%rsi
  mov    %edx,%edi
  call   <_check_err@plt>
  mov    -0x18(%rbp),%rcx
  lea    -0x10(%rbp),%rax
  lea    D615(%rip),%rdx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <KeyVal_findIdealIndex@plt>
  mov    %eax,%edx
  lea    D483(%rip),%rax
  mov    %rax,%rsi
  mov    %edx,%edi
  call   <_check_err@plt>
  mov    -0x10(%rbp),%rax
  test   %rax,%rax
  sete   %al
  movzbl %al,%eax
  lea    D464(%rip),%rdx
  mov    %rdx,%rsi
  mov    %eax,%edi
  call   <ok@plt>
  mov    -0x18(%rbp),%rcx
  lea    -0x10(%rbp),%rax
  lea    D615(%rip),%rdx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <KeyVal_findIndex@plt>
  cmp    $0x2,%eax
  sete   %al
  movzbl %al,%eax
  lea    D847(%rip),%rdx
  mov    %rdx,%rsi
  mov    %eax,%edi
  call   <ok@plt>
  mov    -0x18(%rbp),%rcx
  lea    -0x10(%rbp),%rax
  lea    D888(%rip),%rdx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <KeyVal_findIdealIndex@plt>
  mov    %eax,%edx
  lea    D483(%rip),%rax
  mov    %rax,%rsi
  mov    %edx,%edi
  call   <_check_err@plt>
  mov    -0x10(%rbp),%rax
  test   %rax,%rax
  sete   %al
  movzbl %al,%eax
  lea    D728(%rip),%rdx
  mov    %rdx,%rsi
  mov    %eax,%edi
  call   <ok@plt>
  mov    -0x18(%rbp),%rcx
  lea    -0x10(%rbp),%rax
  lea    D888(%rip),%rdx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <KeyVal_findIndex@plt>
  mov    %eax,%edx
  lea    D540(%rip),%rax
  mov    %rax,%rsi
  mov    %edx,%edi
  call   <_check_err@plt>
  mov    -0x10(%rbp),%rax
  test   %rax,%rax
  sete   %al
  movzbl %al,%eax
  lea    D246(%rip),%rdx
  mov    %rdx,%rsi
  mov    %eax,%edi
  call   <ok@plt>
  mov    -0x18(%rbp),%rcx
  lea    -0x10(%rbp),%rax
  lea    D642(%rip),%rdx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <KeyVal_findIdealIndex@plt>
  mov    %eax,%edx
  lea    D483(%rip),%rax
  mov    %rax,%rsi
  mov    %edx,%edi
  call   <_check_err@plt>
  mov    -0x10(%rbp),%rax
  cmp    $0x1,%rax
  sete   %al
  movzbl %al,%eax
  lea    D927(%rip),%rdx
  mov    %rdx,%rsi
  mov    %eax,%edi
  call   <ok@plt>
  mov    -0x18(%rbp),%rcx
  lea    -0x10(%rbp),%rax
  lea    D642(%rip),%rdx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <KeyVal_findIndex@plt>
  cmp    $0x2,%eax
  sete   %al
  movzbl %al,%eax
  lea    D283(%rip),%rdx
  mov    %rdx,%rsi
  mov    %eax,%edi
  call   <ok@plt>
  mov    -0x18(%rbp),%rax
  lea    D749(%rip),%rdx
  lea    D16(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <KeyVal_setValue@plt>
  mov    %eax,%edx
  lea    D962(%rip),%rax
  mov    %rax,%rsi
  mov    %edx,%edi
  call   <_check_err@plt>
  mov    -0x18(%rbp),%rcx
  lea    -0x10(%rbp),%rax
  lea    D615(%rip),%rdx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <KeyVal_findIdealIndex@plt>
  mov    %eax,%edx
  lea    D483(%rip),%rax
  mov    %rax,%rsi
  mov    %edx,%edi
  call   <_check_err@plt>
  mov    -0x10(%rbp),%rax
  test   %rax,%rax
  sete   %al
  movzbl %al,%eax
  lea    D507(%rip),%rdx
  mov    %rdx,%rsi
  mov    %eax,%edi
  call   <ok@plt>
  mov    -0x18(%rbp),%rcx
  lea    -0x10(%rbp),%rax
  lea    D615(%rip),%rdx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <KeyVal_findIndex@plt>
  cmp    $0x2,%eax
  sete   %al
  movzbl %al,%eax
  lea    D858(%rip),%rdx
  mov    %rdx,%rsi
  mov    %eax,%edi
  call   <ok@plt>
  mov    -0x18(%rbp),%rcx
  lea    -0x10(%rbp),%rax
  lea    D888(%rip),%rdx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <KeyVal_findIdealIndex@plt>
  mov    %eax,%edx
  lea    D483(%rip),%rax
  mov    %rax,%rsi
  mov    %edx,%edi
  call   <_check_err@plt>
  mov    -0x10(%rbp),%rax
  test   %rax,%rax
  sete   %al
  movzbl %al,%eax
  lea    D55(%rip),%rdx
  mov    %rdx,%rsi
  mov    %eax,%edi
  call   <ok@plt>
  mov    -0x18(%rbp),%rcx
  lea    -0x10(%rbp),%rax
  lea    D888(%rip),%rdx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <KeyVal_findIndex@plt>
  mov    %eax,%edx
  lea    D540(%rip),%rax
  mov    %rax,%rsi
  mov    %edx,%edi
  call   <_check_err@plt>
  mov    -0x10(%rbp),%rax
  test   %rax,%rax
  sete   %al
  movzbl %al,%eax
  lea    D547(%rip),%rdx
  mov    %rdx,%rsi
  mov    %eax,%edi
  call   <ok@plt>
  mov    -0x18(%rbp),%rcx
  lea    -0x10(%rbp),%rax
  lea    D642(%rip),%rdx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <KeyVal_findIdealIndex@plt>
  mov    %eax,%edx
  lea    D483(%rip),%rax
  mov    %rax,%rsi
  mov    %edx,%edi
  call   <_check_err@plt>
  mov    -0x10(%rbp),%rax
  cmp    $0x1,%rax
  sete   %al
  movzbl %al,%eax
  lea    D261(%rip),%rdx
  mov    %rdx,%rsi
  mov    %eax,%edi
  call   <ok@plt>
  mov    -0x18(%rbp),%rcx
  lea    -0x10(%rbp),%rax
  lea    D642(%rip),%rdx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <KeyVal_findIndex@plt>
  cmp    $0x2,%eax
  sete   %al
  movzbl %al,%eax
  lea    D210(%rip),%rdx
  mov    %rdx,%rsi
  mov    %eax,%edi
  call   <ok@plt>
  mov    -0x18(%rbp),%rcx
  lea    -0x10(%rbp),%rax
  lea    D16(%rip),%rdx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <KeyVal_findIdealIndex@plt>
  mov    %eax,%edx
  lea    D483(%rip),%rax
  mov    %rax,%rsi
  mov    %edx,%edi
  call   <_check_err@plt>
  mov    -0x10(%rbp),%rax
  cmp    $0x1,%rax
  sete   %al
  movzbl %al,%eax
  lea    D494(%rip),%rdx
  mov    %rdx,%rsi
  mov    %eax,%edi
  call   <ok@plt>
  mov    -0x18(%rbp),%rcx
  lea    -0x10(%rbp),%rax
  lea    D16(%rip),%rdx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <KeyVal_findIndex@plt>
  mov    %eax,%edx
  lea    D540(%rip),%rax
  mov    %rax,%rsi
  mov    %edx,%edi
  call   <_check_err@plt>
  mov    -0x10(%rbp),%rax
  cmp    $0x1,%rax
  sete   %al
  movzbl %al,%eax
  lea    D866(%rip),%rdx
  mov    %rdx,%rsi
  mov    %eax,%edi
  call   <ok@plt>
  mov    -0x18(%rbp),%rcx
  lea    -0x10(%rbp),%rax
  lea    D324(%rip),%rdx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <KeyVal_findIdealIndex@plt>
  mov    %eax,%edx
  lea    D483(%rip),%rax
  mov    %rax,%rsi
  mov    %edx,%edi
  call   <_check_err@plt>
  mov    -0x10(%rbp),%rax
  cmp    $0x2,%rax
  sete   %al
  movzbl %al,%eax
  lea    D681(%rip),%rdx
  mov    %rdx,%rsi
  mov    %eax,%edi
  call   <ok@plt>
  mov    -0x18(%rbp),%rcx
  lea    -0x10(%rbp),%rax
  lea    D324(%rip),%rdx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <KeyVal_findIndex@plt>
  cmp    $0x2,%eax
  sete   %al
  movzbl %al,%eax
  lea    D700(%rip),%rdx
  mov    %rdx,%rsi
  mov    %eax,%edi
  call   <ok@plt>
  mov    -0x18(%rbp),%rax
  lea    D749(%rip),%rdx
  lea    D684(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <KeyVal_setValue@plt>
  mov    %eax,%edx
  lea    D962(%rip),%rax
  mov    %rax,%rsi
  mov    %edx,%edi
  call   <_check_err@plt>
  mov    -0x18(%rbp),%rcx
  lea    -0x10(%rbp),%rax
  lea    D615(%rip),%rdx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <KeyVal_findIdealIndex@plt>
  mov    %eax,%edx
  lea    D483(%rip),%rax
  mov    %rax,%rsi
  mov    %edx,%edi
  call   <_check_err@plt>
  mov    -0x10(%rbp),%rax
  test   %rax,%rax
  sete   %al
  movzbl %al,%eax
  lea    D965(%rip),%rdx
  mov    %rdx,%rsi
  mov    %eax,%edi
  call   <ok@plt>
  mov    -0x18(%rbp),%rcx
  lea    -0x10(%rbp),%rax
  lea    D615(%rip),%rdx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <KeyVal_findIndex@plt>
  cmp    $0x2,%eax
  sete   %al
  movzbl %al,%eax
  lea    D160(%rip),%rdx
  mov    %rdx,%rsi
  mov    %eax,%edi
  call   <ok@plt>
  mov    -0x18(%rbp),%rcx
  lea    -0x10(%rbp),%rax
  lea    D888(%rip),%rdx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <KeyVal_findIdealIndex@plt>
  mov    %eax,%edx
  lea    D483(%rip),%rax
  mov    %rax,%rsi
  mov    %edx,%edi
  call   <_check_err@plt>
  mov    -0x10(%rbp),%rax
  test   %rax,%rax
  sete   %al
  movzbl %al,%eax
  lea    D670(%rip),%rdx
  mov    %rdx,%rsi
  mov    %eax,%edi
  call   <ok@plt>
  mov    -0x18(%rbp),%rcx
  lea    -0x10(%rbp),%rax
  lea    D888(%rip),%rdx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <KeyVal_findIndex@plt>
  mov    %eax,%edx
  lea    D540(%rip),%rax
  mov    %rax,%rsi
  mov    %edx,%edi
  call   <_check_err@plt>
  mov    -0x10(%rbp),%rax
  test   %rax,%rax
  sete   %al
  movzbl %al,%eax
  lea    D762(%rip),%rdx
  mov    %rdx,%rsi
  mov    %eax,%edi
  call   <ok@plt>
  mov    -0x18(%rbp),%rcx
  lea    -0x10(%rbp),%rax
  lea    D642(%rip),%rdx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <KeyVal_findIdealIndex@plt>
  mov    %eax,%edx
  lea    D483(%rip),%rax
  mov    %rax,%rsi
  mov    %edx,%edi
  call   <_check_err@plt>
  mov    -0x10(%rbp),%rax
  cmp    $0x1,%rax
  sete   %al
  movzbl %al,%eax
  lea    D449(%rip),%rdx
  mov    %rdx,%rsi
  mov    %eax,%edi
  call   <ok@plt>
  mov    -0x18(%rbp),%rcx
  lea    -0x10(%rbp),%rax
  lea    D642(%rip),%rdx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <KeyVal_findIndex@plt>
  cmp    $0x2,%eax
  sete   %al
  movzbl %al,%eax
  lea    D20(%rip),%rdx
  mov    %rdx,%rsi
  mov    %eax,%edi
  call   <ok@plt>
  mov    -0x18(%rbp),%rcx
  lea    -0x10(%rbp),%rax
  lea    D16(%rip),%rdx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <KeyVal_findIdealIndex@plt>
  mov    %eax,%edx
  lea    D483(%rip),%rax
  mov    %rax,%rsi
  mov    %edx,%edi
  call   <_check_err@plt>
  mov    -0x10(%rbp),%rax
  cmp    $0x1,%rax
  sete   %al
  movzbl %al,%eax
  lea    D901(%rip),%rdx
  mov    %rdx,%rsi
  mov    %eax,%edi
  call   <ok@plt>
  mov    -0x18(%rbp),%rcx
  lea    -0x10(%rbp),%rax
  lea    D16(%rip),%rdx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <KeyVal_findIndex@plt>
  mov    %eax,%edx
  lea    D540(%rip),%rax
  mov    %rax,%rsi
  mov    %edx,%edi
  call   <_check_err@plt>
  mov    -0x10(%rbp),%rax
  cmp    $0x1,%rax
  sete   %al
  movzbl %al,%eax
  lea    D651(%rip),%rdx
  mov    %rdx,%rsi
  mov    %eax,%edi
  call   <ok@plt>
  mov    -0x18(%rbp),%rcx
  lea    -0x10(%rbp),%rax
  lea    D324(%rip),%rdx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <KeyVal_findIdealIndex@plt>
  mov    %eax,%edx
  lea    D483(%rip),%rax
  mov    %rax,%rsi
  mov    %edx,%edi
  call   <_check_err@plt>
  mov    -0x10(%rbp),%rax
  cmp    $0x2,%rax
  sete   %al
  movzbl %al,%eax
  lea    D365(%rip),%rdx
  mov    %rdx,%rsi
  mov    %eax,%edi
  call   <ok@plt>
  mov    -0x18(%rbp),%rcx
  lea    -0x10(%rbp),%rax
  lea    D324(%rip),%rdx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <KeyVal_findIndex@plt>
  cmp    $0x2,%eax
  sete   %al
  movzbl %al,%eax
  lea    D724(%rip),%rdx
  mov    %rdx,%rsi
  mov    %eax,%edi
  call   <ok@plt>
  mov    -0x18(%rbp),%rcx
  lea    -0x10(%rbp),%rax
  lea    D684(%rip),%rdx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <KeyVal_findIdealIndex@plt>
  mov    %eax,%edx
  lea    D483(%rip),%rax
  mov    %rax,%rsi
  mov    %edx,%edi
  call   <_check_err@plt>
  mov    -0x10(%rbp),%rax
  cmp    $0x2,%rax
  sete   %al
  movzbl %al,%eax
  lea    D533(%rip),%rdx
  mov    %rdx,%rsi
  mov    %eax,%edi
  call   <ok@plt>
  mov    -0x18(%rbp),%rcx
  lea    -0x10(%rbp),%rax
  lea    D684(%rip),%rdx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <KeyVal_findIndex@plt>
  mov    %eax,%edx
  lea    D540(%rip),%rax
  mov    %rax,%rsi
  mov    %edx,%edi
  call   <_check_err@plt>
  mov    -0x10(%rbp),%rax
  cmp    $0x2,%rax
  sete   %al
  movzbl %al,%eax
  lea    D92(%rip),%rdx
  mov    %rdx,%rsi
  mov    %eax,%edi
  call   <ok@plt>
  mov    -0x18(%rbp),%rcx
  lea    -0x10(%rbp),%rax
  lea    D368(%rip),%rdx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <KeyVal_findIdealIndex@plt>
  mov    %eax,%edx
  lea    D483(%rip),%rax
  mov    %rax,%rsi
  mov    %edx,%edi
  call   <_check_err@plt>
  mov    -0x10(%rbp),%rax
  cmp    $0x3,%rax
  sete   %al
  movzbl %al,%eax
  lea    D301(%rip),%rdx
  mov    %rdx,%rsi
  mov    %eax,%edi
  call   <ok@plt>
  mov    -0x18(%rbp),%rcx
  lea    -0x10(%rbp),%rax
  lea    D368(%rip),%rdx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <KeyVal_findIndex@plt>
  cmp    $0x2,%eax
  sete   %al
  movzbl %al,%eax
  lea    D421(%rip),%rdx
  mov    %rdx,%rsi
  mov    %eax,%edi
  call   <ok@plt>
  mov    -0x18(%rbp),%rax
  mov    %rax,%rdi
  call   <KeyVal_delete@plt>
  mov    %eax,%edx
  lea    D883(%rip),%rax
  mov    %rax,%rsi
  mov    %edx,%edi
  call   <_check_err@plt>
  nop
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L0
  call   <__stack_chk_fail@plt>
L0:
  leave
  ret
```

tool_calls: name: read_data
arguments: data_tag: D342
data_type: string
name: read_data
arguments: data_tag: D807
data_type: string
name: read_data
arguments: data_tag: D483
data_type: string
name: read_data
arguments: data_tag: D53
data_type: string
name: read_data
arguments: data_tag: D896
data_type: string
name: read_data
arguments: data_tag: D749
data_type: string
name: read_data
arguments: data_tag: D888
data_type: string
name: read_data
arguments: data_tag: D962
data_type: string
name: read_data
arguments: data_tag: D615
data_type: string
name: read_data
arguments: data_tag: D464
data_type: string
name: read_data
arguments: data_tag: D847
data_type: string
name: read_data
arguments: data_tag: D728
data_type: string
name: read_data
arguments: data_tag: D540
data_type: string
name: read_data
arguments: data_tag: D246
data_type: string
name: read_data
arguments: data_tag: D642
data_type: string
name: read_data
arguments: data_tag: D927
data_type: string
name: read_data
arguments: data_tag: D283
data_type: string
name: read_data
arguments: data_tag: D16
data_type: string
name: read_data
arguments: data_tag: D507
data_type: string
name: read_data
arguments: data_tag: D858
data_type: string
name: read_data
arguments: data_tag: D55
data_type: string
name: read_data
arguments: data_tag: D547
data_type: string
name: read_data
arguments: data_tag: D261
data_type: string
name: read_data
arguments: data_tag: D210
data_type: string
name: read_data
arguments: data_tag: D494
data_type: string
name: read_data
arguments: data_tag: D866
data_type: string
name: read_data
arguments: data_tag: D324
data_type: string
name: read_data
arguments: data_tag: D681
data_type: string
name: read_data
arguments: data_tag: D700
data_type: string
name: read_data
arguments: data_tag: D684
data_type: string
name: read_data
arguments: data_tag: D965
data_type: string
name: read_data
arguments: data_tag: D160
data_type: string
name: read_data
arguments: data_tag: D670
data_type: string
name: read_data
arguments: data_tag: D762
data_type: string
name: read_data
arguments: data_tag: D449
data_type: string
name: read_data
arguments: data_tag: D20
data_type: string
name: read_data
arguments: data_tag: D901
data_type: string
name: read_data
arguments: data_tag: D651
data_type: string
name: read_data
arguments: data_tag: D365
data_type: string
name: read_data
arguments: data_tag: D724
data_type: string
name: read_data
arguments: data_tag: D533
data_type: string
name: read_data
arguments: data_tag: D92
data_type: string
name: read_data
arguments: data_tag: D368
data_type: string
name: read_data
arguments: data_tag: D301
data_type: string
name: read_data
arguments: data_tag: D421
data_type: string
name: read_data
arguments: data_tag: D883
data_type: string

tool: D342: KeyVal_new

tool: D807: a

tool: D483: KeyVal_findIdealIndex

tool: D53: 7a. findIdealIndex ok on empty array

tool: D896: 7b. findIndex ok on empty array

tool: D749: asdf

tool: D888: 2

tool: D962: KeyVal_setValue

tool: D615: 1

tool: D464: 7d. findIdealIndex-1 ok on array1

tool: D847: 7e. findIndex-1 ok on array1

tool: D728: 7g. findIdealIndex-2 ok on array1

tool: D540: KeyVal_findIndex

tool: D246: 7h. findIndex-2 ok on array1

tool: D642: 3

tool: D927: 7j. findIdealIndex-3 ok on array1

tool: D283: 7k. findIndex-3 ok on array1

tool: D16: 4

tool: D507: 7m. findIdealIndex-1 ok on array2

tool: D858: 7n. findIndex-1 ok on array2

tool: D55: 7p. findIdealIndex-2 ok on array2

tool: D547: 7q. findIndex-2 ok on array2

tool: D261: 7s. findIdealIndex-3 ok on array2

tool: D210: 7t. findIndex-3 ok on array2

tool: D494: 7v. findIdealIndex-4 ok on array2

tool: D866: 7w. findIndex-4 ok on array2

tool: D324: 5

tool: D681: 7y. findIdealIndex-5 ok on array2

tool: D700: 7z. findIndex-5 ok on array2

tool: D684: 6

tool: D965: 7ab. findIdealIndex-1 ok on array3

tool: D160: 7ac. findIndex-1 ok on array3

tool: D670: 7ae. findIdealIndex-2 ok on array3

tool: D762: 7af. findIndex-2 ok on array3

tool: D449: 7ah. findIdealIndex-3 ok on array3

tool: D20: 7ai. findIndex-3 ok on array3

tool: D901: 7ak. findIdealIndex-4 ok on array3

tool: D651: 7al. findIndex-4 ok on array3

tool: D365: 7an. findIdealIndex-5 ok on array3

tool: D724: 7ao. findIndex-5 ok on array3

tool: D533: 7aq. findIdealIndex-6 ok on array3

tool: D92: 7ar. findIndex-6 ok on array3

tool: D368: 7

tool: D301: 7at. findIdealIndex-7 ok on array3

tool: D421: 7au. findIndex-7 ok on array3

tool: D883: KeyVal_delete

assistant: ```c
void test7() {
  struct KeyVal *kv;
  _check_err(KeyVal_new(&kv), "KeyVal_new");
  unsigned long index;
  _check_err(KeyVal_findIdealIndex(&index, kv, "a"), "KeyVal_findIdealIndex");
  ok(index == 0, "7a. findIdealIndex ok on empty array");
  ok(KeyVal_findIndex(&index, kv, "a") == 2, "7b. findIndex ok on empty array");
  _check_err(KeyVal_setValue(kv, "2", "asdf"), "KeyVal_setValue");
  _check_err(KeyVal_findIdealIndex(&index, kv, "1"), "KeyVal_findIdealIndex");
  ok(index == 0, "7d. findIdealIndex-1 ok on array1");
  ok(KeyVal_findIndex(&index, kv, "1") == 2, "7e. findIndex-1 ok on array1");
  _check_err(KeyVal_findIdealIndex(&index, kv, "2"), "KeyVal_findIdealIndex");
  ok(index == 0, "7g. findIdealIndex-2 ok on array1");
  _check_err(KeyVal_findIndex(&index, kv, "2"), "KeyVal_findIndex");
  ok(index == 0, "7h. findIndex-2 ok on array1");
  _check_err(KeyVal_findIdealIndex(&index, kv, "3"), "KeyVal_findIdealIndex");
  ok(index == 1, "7j. findIdealIndex-3 ok on array1");
  ok(KeyVal_findIndex(&index, kv, "3") == 2, "7k. findIndex-3 ok on array1");
  _check_err(KeyVal_setValue(kv, "4", "asdf"), "KeyVal_setValue");
  _check_err(KeyVal_findIdealIndex(&index, kv, "1"), "KeyVal_findIdealIndex");
  ok(index == 0, "7m. findIdealIndex-1 ok on array2");
  ok(KeyVal_findIndex(&index, kv, "1") == 2, "7n. findIndex-1 ok on array2");
  _check_err(KeyVal_findIdealIndex(&index, kv, "2"), "KeyVal_findIdealIndex");
  ok(index == 0, "7p. findIdealIndex-2 ok on array2");
  _check_err(KeyVal_findIndex(&index, kv, "2"), "KeyVal_findIndex");
  ok(index == 0, "7q. findIndex-2 ok on array2");
  _check_err(KeyVal_findIdealIndex(&index, kv, "3"), "KeyVal_findIdealIndex");
  ok(index == 1, "7s. findIdealIndex-3 ok on array2");
  ok(KeyVal_findIndex(&index, kv, "3") == 2, "7t. findIndex-3 ok on array2");
  _check_err(KeyVal_findIdealIndex(&index, kv, "4"), "KeyVal_findIdealIndex");
  ok(index == 1, "7v. findIdealIndex-4 ok on array2");
  _check_err(KeyVal_findIndex(&index, kv, "4"), "KeyVal_findIndex");
  ok(index == 1, "7w. findIndex-4 ok on array2");
  _check_err(KeyVal_findIdealIndex(&index, kv, "5"), "KeyVal_findIdealIndex");
  ok(index == 2, "7y. findIdealIndex-5 ok on array2");
  ok(KeyVal_findIndex(&index, kv, "5") == 2, "7z. findIndex-5 ok on array2");
  _check_err(KeyVal_setValue(kv, "6", "asdf"), "KeyVal_setValue");
  _check_err(KeyVal_findIdealIndex(&index, kv, "1"), "KeyVal_findIdealIndex");
  ok(index == 0, "7ab. findIdealIndex-1 ok on array3");
  ok(KeyVal_findIndex(&index, kv, "1") == 2, "7ac. findIndex-1 ok on array3");
  _check_err(KeyVal_findIdealIndex(&index, kv, "2"), "KeyVal_findIdealIndex");
  ok(index == 0, "7ae. findIdealIndex-2 ok on array3");
  _check_err(KeyVal_findIndex(&index, kv, "2"), "KeyVal_findIndex");
  ok(index == 0, "7af. findIndex-2 ok on array3");
  _check_err(KeyVal_findIdealIndex(&index, kv, "3"), "KeyVal_findIdealIndex");
  ok(index == 1, "7ah. findIdealIndex-3 ok on array3");
  ok(KeyVal_findIndex(&index, kv, "3") == 2, "7ai. findIndex-3 ok on array3");
  _check_err(KeyVal_findIdealIndex(&index, kv, "4"), "KeyVal_findIdealIndex");
  ok(index == 1, "7ak. findIdealIndex-4 ok on array3");
  _check_err(KeyVal_findIndex(&index, kv, "4"), "KeyVal_findIndex");
  ok(index == 1, "7al. findIndex-4 ok on array3");
  _check_err(KeyVal_findIdealIndex(&index, kv, "5"), "KeyVal_findIdealIndex");
  ok(index == 2, "7an. findIdealIndex-5 ok on array3");
  ok(KeyVal_findIndex(&index, kv, "5") == 2, "7ao. findIndex-5 ok on array3");
  _check_err(KeyVal_findIdealIndex(&index, kv, "6"), "KeyVal_findIdealIndex");
  ok(index == 2, "7aq. findIdealIndex-6 ok on array3");
  _check_err(KeyVal_findIndex(&index, kv, "6"), "KeyVal_findIndex");
  ok(index == 2, "7ar. findIndex-6 ok on array3");
  _check_err(KeyVal_findIdealIndex(&index, kv, "7"), "KeyVal_findIdealIndex");
  ok(index == 3, "7at. findIdealIndex-7 ok on array3");
  ok(KeyVal_findIndex(&index, kv, "7") == 2, "7au. findIndex-7 ok on array3");
  _check_err(KeyVal_delete(kv), "KeyVal_delete");
}
```