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

```asm
<main>:
  endbr64
  push   %rbx
  add    $0xffffffffffffff80,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x78(%rsp)
  xor    %eax,%eax
  movl   $0x2,(%rsp)
  movl   $0x6,0x4(%rsp)
  movl   $0x8,0x8(%rsp)
  movl   $0xa,0xc(%rsp)
  movl   $0x3,0x10(%rsp)
  mov    %rsp,%rbx
  mov    $0x5,%esi
  mov    %rbx,%rdi
  call   <find_outlier@plt>
  cmp    $0x3,%eax
  sete   %dil
  movzbl %dil,%edi
  call   <assert@plt>
  movl   $0x2,(%rsp)
  movl   $0x6,0x4(%rsp)
  movl   $0x8,0x8(%rsp)
  movl   $0xc8,0xc(%rsp)
  movl   $0x2bc,0x10(%rsp)
  movl   $0x1,0x14(%rsp)
  movl   $0x54,0x18(%rsp)
  movl   $0xa,0x1c(%rsp)
  movl   $0x4,0x20(%rsp)
  mov    $0x9,%esi
  mov    %rbx,%rdi
  call   <find_outlier@plt>
  cmp    $0x1,%eax
  sete   %dil
  movzbl %dil,%edi
  call   <assert@plt>
  movl   $0x11,(%rsp)
  movl   $0x6,0x4(%rsp)
  movl   $0x8,0x8(%rsp)
  movl   $0xa,0xc(%rsp)
  movl   $0x6,0x10(%rsp)
  movl   $0xc,0x14(%rsp)
  movl   $0x18,0x18(%rsp)
  movl   $0x24,0x1c(%rsp)
  mov    $0x8,%esi
  mov    %rbx,%rdi
  call   <find_outlier@plt>
  cmp    $0x11,%eax
  sete   %dil
  movzbl %dil,%edi
  call   <assert@plt>
  movl   $0x2,(%rsp)
  movl   $0x1,0x4(%rsp)
  movl   $0x7,0x8(%rsp)
  movl   $0x11,0xc(%rsp)
  movl   $0x13,0x10(%rsp)
  movl   $0xd3,0x14(%rsp)
  movl   $0x7,0x18(%rsp)
  mov    $0x7,%esi
  mov    %rbx,%rdi
  call   <find_outlier@plt>
  cmp    $0x2,%eax
  sete   %dil
  movzbl %dil,%edi
  call   <assert@plt>
  movl   $0x1,(%rsp)
  movl   $0x1,0x4(%rsp)
  movl   $0x1,0x8(%rsp)
  movl   $0x1,0xc(%rsp)
  movl   $0x1,0x10(%rsp)
  movl   $0x2c,0x14(%rsp)
  movl   $0x7,0x18(%rsp)
  movl   $0x7,0x1c(%rsp)
  movl   $0x7,0x20(%rsp)
  movl   $0x7,0x24(%rsp)
  movl   $0x7,0x28(%rsp)
  movl   $0x7,0x2c(%rsp)
  movl   $0x7,0x30(%rsp)
  movl   $0x7,0x34(%rsp)
  mov    $0xe,%esi
  mov    %rbx,%rdi
  call   <find_outlier@plt>
  cmp    $0x2c,%eax
  sete   %dil
  movzbl %dil,%edi
  call   <assert@plt>
  movl   $0x3,(%rsp)
  movl   $0x3,0x4(%rsp)
  movl   $0x3,0x8(%rsp)
  movl   $0x3,0xc(%rsp)
  movl   $0x3,0x10(%rsp)
  movl   $0x3,0x14(%rsp)
  movl   $0x3,0x18(%rsp)
  movl   $0x3,0x1c(%rsp)
  movl   $0x3,0x20(%rsp)
  movl   $0x3,0x24(%rsp)
  movl   $0x3,0x28(%rsp)
  movl   $0x3,0x2c(%rsp)
  movl   $0x3,0x30(%rsp)
  movl   $0x3,0x34(%rsp)
  movl   $0x23,0x38(%rsp)
  movl   $0x5,0x3c(%rsp)
  movl   $0x5,0x40(%rsp)
  movl   $0x5,0x44(%rsp)
  movl   $0x5,0x48(%rsp)
  movl   $0x5,0x4c(%rsp)
  movl   $0x5,0x50(%rsp)
  movl   $0x5,0x54(%rsp)
  movl   $0x5,0x58(%rsp)
  movl   $0x5,0x5c(%rsp)
  movl   $0x5,0x60(%rsp)
  movl   $0x7,0x64(%rsp)
  movl   $0x7,0x68(%rsp)
  movl   $0x7,0x6c(%rsp)
  movl   $0x7,0x70(%rsp)
  movl   $0x3e8,0x74(%rsp)
  mov    $0x1e,%esi
  mov    %rbx,%rdi
  call   <find_outlier@plt>
  cmp    $0x3e8,%eax
  sete   %dil
  movzbl %dil,%edi
  call   <assert@plt>
  movl   $0x2,(%rsp)
  movl   $0xfffffffa,0x4(%rsp)
  movl   $0x8,0x8(%rsp)
  movl   $0xfffffff6,0xc(%rsp)
  movl   $0xfffffffd,0x10(%rsp)
  mov    $0x5,%esi
  mov    %rbx,%rdi
  call   <find_outlier@plt>
  cmp    $0xfffffffd,%eax
  sete   %dil
  movzbl %dil,%edi
  call   <assert@plt>
  movl   $0x2,(%rsp)
  movl   $0x6,0x4(%rsp)
  movl   $0x8,0x8(%rsp)
  movl   $0x2,0xc(%rsp)
  movl   $0xffffffbe,0x10(%rsp)
  movl   $0x22,0x14(%rsp)
  movl   $0xffffffdd,0x18(%rsp)
  movl   $0x42,0x1c(%rsp)
  movl   $0x2bc,0x20(%rsp)
  movl   $0x3ea,0x24(%rsp)
  movl   $0xffffffac,0x28(%rsp)
  movl   $0xa,0x2c(%rsp)
  movl   $0x4,0x30(%rsp)
  mov    $0xd,%esi
  mov    %rbx,%rdi
  call   <find_outlier@plt>
  cmp    $0xffffffdd,%eax
  sete   %dil
  movzbl %dil,%edi
  call   <assert@plt>
  movl   $0xffffffec,(%rsp)
  movl   $0x1,0x4(%rsp)
  movl   $0x7,0x8(%rsp)
  movl   $0x11,0xc(%rsp)
  movl   $0x13,0x10(%rsp)
  movl   $0xd3,0x14(%rsp)
  movl   $0x7,0x18(%rsp)
  mov    $0x7,%esi
  mov    %rbx,%rdi
  call   <find_outlier@plt>
  cmp    $0xffffffec,%eax
  sete   %dil
  movzbl %dil,%edi
  call   <assert@plt>
  movl   $0x1,(%rsp)
  movl   $0x1,0x4(%rsp)
  movl   $0xffffffff,0x8(%rsp)
  movl   $0x1,0xc(%rsp)
  movl   $0x1,0x10(%rsp)
  movl   $0xffffffd4,0x14(%rsp)
  movl   $0x7,0x18(%rsp)
  movl   $0x7,0x1c(%rsp)
  movl   $0x7,0x20(%rsp)
  movl   $0x7,0x24(%rsp)
  movl   $0x7,0x28(%rsp)
  movl   $0x7,0x2c(%rsp)
  movl   $0x7,0x30(%rsp)
  movl   $0x7,0x34(%rsp)
  mov    $0xe,%esi
  mov    %rbx,%rdi
  call   <find_outlier@plt>
  cmp    $0xffffffd4,%eax
  sete   %dil
  movzbl %dil,%edi
  call   <assert@plt>
  movl   $0x1,(%rsp)
  movl   $0x0,0x4(%rsp)
  movl   $0x0,0x8(%rsp)
  mov    $0x3,%esi
  mov    %rbx,%rdi
  call   <find_outlier@plt>
  cmp    $0x1,%eax
  sete   %dil
  movzbl %dil,%edi
  call   <assert@plt>
  movl   $0x3,(%rsp)
  movl   $0x7,0x4(%rsp)
  movl   $0xffffff9d,0x8(%rsp)
  movl   $0x51,0xc(%rsp)
  movl   $0x16063,0x10(%rsp)
  movl   $0x0,0x14(%rsp)
  movl   $0x7,0x18(%rsp)
  mov    $0x7,%esi
  mov    %rbx,%rdi
  call   <find_outlier@plt>
  test   %eax,%eax
  sete   %dil
  movzbl %dil,%edi
  call   <assert@plt>
  mov    0x78(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L7
  mov    $0x0,%eax
  sub    $0xffffffffffffff80,%rsp
  pop    %rbx
  ret
L7:
  call   <__stack_chk_fail@plt>
```

assistant: ```c
int main() {
  {
    int values[] = {2, 6, 8, 10, 3};
    size_t count = sizeof(values) / sizeof(values[0]);
    int expected = 3;
    int received = find_outlier(values, count);
    assert(expected == received);
  }
  {
    int values[] = {2, 6, 8, 200, 700, 1, 84, 10, 4};
    size_t count = sizeof(values) / sizeof(values[0]);
    int expected = 1;
    int received = find_outlier(values, count);
    assert(expected == received);
  }
  {
    int values[] = {17, 6, 8, 10, 6, 12, 24, 36};
    size_t count = sizeof(values) / sizeof(values[0]);
    int expected = 17;
    int received = find_outlier(values, count);
    assert(expected == received);
  }
  {
    int values[] = {2, 1, 7, 17, 19, 211, 7};
    size_t count = sizeof(values) / sizeof(values[0]);
    int expected = 2;
    int received = find_outlier(values, count);
    assert(expected == received);
  }
  {
    int values[] = {1, 1, 1, 1, 1, 44, 7, 7, 7, 7, 7, 7, 7, 7};
    size_t count = sizeof(values) / sizeof(values[0]);
    int expected = 44;
    int received = find_outlier(values, count);
    assert(expected == received);
  }
  {
    int values[] = {3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 35, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 7, 7, 7, 7, 1000};
    size_t count = sizeof(values) / sizeof(values[0]);
    int expected = 1000;
    int received = find_outlier(values, count);
    assert(expected == received);
  }
  {
    int values[] = {2, -6, 8, -10, -3};
    size_t count = sizeof(values) / sizeof(values[0]);
    int expected = -3;
    int received = find_outlier(values, count);
    assert(expected == received);
  }
  {
    int values[] = {2, 6, 8, 2, -66, 34, -35, 66, 700, 1002, -84, 10, 4};
    size_t count = sizeof(values) / sizeof(values[0]);
    int expected = -35;
    int received = find_outlier(values, count);
    assert(expected == received);
  }
  {
    int values[] = {-20, 1, 7, 17, 19, 211, 7};
    size_t count = sizeof(values) / sizeof(values[0]);
    int expected = -20;
    int received = find_outlier(values, count);
    assert(expected == received);
  }
  {
    int values[] = {1, 1, -1, 1, 1, -44, 7, 7, 7, 7, 7, 7, 7, 7};
    size_t count = sizeof(values) / sizeof(values[0]);
    int expected = -44;
    int received = find_outlier(values, count);
    assert(expected == received);
  }
  {
    int values[] = {1, 0, 0};
    size_t count = sizeof(values) / sizeof(values[0]);
    int expected = 1;
    int received = find_outlier(values, count);
    assert(expected == received);
  }
  {
    int values[] = {3, 7, -99, 81, 90211, 0, 7};
    size_t count = sizeof(values) / sizeof(values[0]);
    int expected = 0;
    int received = find_outlier(values, count);
    assert(expected == received);
  }
}
```