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

```asm
<sc_strerror>:
  endbr64
  sub    $0x2f8,%rsp
  lea    D11(%rip),%rsi
  mov    %edi,%edx
  mov    %fs:0x28,%rax
  mov    %rax,0x2e8(%rsp)
  lea    D854(%rip),%rax
  movq   %rsi,%xmm1
  lea    D127(%rip),%rdi
  lea    D843(%rip),%rsi
  lea    D99(%rip),%rcx
  lea    D405(%rip),%r8
  movq   %rax,%xmm0
  lea    D495(%rip),%rax
  movq   %rax,%xmm2
  lea    D560(%rip),%rax
  punpcklqdq %xmm2,%xmm1
  movq   %rax,%xmm3
  lea    D631(%rip),%rax
  movaps %xmm1,0x110(%rsp)
  movdqa %xmm0,%xmm1
  movq   %rax,%xmm4
  lea    D79(%rip),%rax
  punpcklqdq %xmm1,%xmm1
  movq   %rax,%xmm5
  lea    D226(%rip),%rax
  movaps %xmm1,0x120(%rsp)
  movq   %rdi,%xmm1
  lea    D681(%rip),%rdi
  movq   %rax,%xmm6
  punpcklqdq %xmm3,%xmm1
  lea    D166(%rip),%rax
  movaps %xmm1,0x130(%rsp)
  movq   %rsi,%xmm1
  lea    D155(%rip),%rsi
  movq   %rax,%xmm7
  punpcklqdq %xmm4,%xmm1
  lea    D823(%rip),%rax
  movaps %xmm1,0x140(%rsp)
  movq   %rcx,%xmm1
  lea    D838(%rip),%rcx
  movq   %rax,%xmm2
  punpcklqdq %xmm5,%xmm1
  lea    D380(%rip),%rax
  movaps %xmm1,0x150(%rsp)
  movq   %rdi,%xmm1
  lea    D762(%rip),%rdi
  punpcklqdq %xmm6,%xmm1
  mov    %rax,0x190(%rsp)
  lea    D861(%rip),%rax
  movaps %xmm1,0x160(%rsp)
  movq   %rsi,%xmm1
  movq   %rax,%xmm3
  lea    D153(%rip),%rsi
  punpcklqdq %xmm7,%xmm1
  lea    D753(%rip),%rax
  movaps %xmm1,0x170(%rsp)
  movq   %rcx,%xmm1
  movq   %rax,%xmm4
  lea    D36(%rip),%rcx
  punpcklqdq %xmm2,%xmm1
  lea    D336(%rip),%rax
  movaps %xmm1,0x180(%rsp)
  movq   %rdi,%xmm1
  movq   %rax,%xmm5
  lea    D500(%rip),%rdi
  punpcklqdq %xmm3,%xmm1
  lea    D275(%rip),%rax
  movaps %xmm1,0x240(%rsp)
  movq   %rsi,%xmm1
  movq   %rax,%xmm6
  lea    D661(%rip),%rsi
  punpcklqdq %xmm4,%xmm1
  lea    D87(%rip),%rax
  movaps %xmm1,0x250(%rsp)
  movq   %rcx,%xmm1
  movq   %rax,%xmm7
  lea    D108(%rip),%rcx
  punpcklqdq %xmm5,%xmm1
  lea    D150(%rip),%rax
  movaps %xmm1,0x260(%rsp)
  movq   %rdi,%xmm1
  movq   %rax,%xmm2
  lea    D630(%rip),%rdi
  punpcklqdq %xmm6,%xmm1
  lea    D723(%rip),%rax
  movaps %xmm1,0x270(%rsp)
  movq   %rsi,%xmm1
  movq   %rax,%xmm3
  lea    D39(%rip),%rsi
  punpcklqdq %xmm7,%xmm1
  lea    D90(%rip),%rax
  movaps %xmm1,0x280(%rsp)
  movq   %rcx,%xmm1
  movq   %rax,%xmm4
  lea    D361(%rip),%rcx
  punpcklqdq %xmm2,%xmm1
  lea    D224(%rip),%rax
  movaps %xmm1,0x290(%rsp)
  movq   %rdi,%xmm1
  movq   %rax,%xmm5
  lea    D117(%rip),%rdi
  punpcklqdq %xmm3,%xmm1
  lea    D572(%rip),%rax
  movaps %xmm1,0x2a0(%rsp)
  movq   %rsi,%xmm1
  movq   %rax,%xmm6
  lea    D824(%rip),%rax
  punpcklqdq %xmm4,%xmm1
  mov    %rax,0x2e0(%rsp)
  lea    D324(%rip),%rax
  lea    D694(%rip),%rsi
  movaps %xmm1,0x2b0(%rsp)
  movq   %rcx,%xmm1
  lea    D61(%rip),%rcx
  punpcklqdq %xmm5,%xmm1
  movaps %xmm1,0x2c0(%rsp)
  movq   %rdi,%xmm1
  lea    D490(%rip),%rdi
  punpcklqdq %xmm6,%xmm1
  movaps %xmm1,0x2d0(%rsp)
  movq   %rax,%xmm1
  lea    D656(%rip),%rax
  punpcklqdq %xmm0,%xmm1
  movq   %rax,%xmm7
  lea    D539(%rip),%rax
  movaps %xmm1,0x10(%rsp)
  movdqa %xmm0,%xmm1
  movq   %rax,%xmm2
  lea    D205(%rip),%rax
  punpcklqdq %xmm7,%xmm1
  movq   %rax,%xmm3
  lea    D269(%rip),%rax
  movaps %xmm1,0x20(%rsp)
  movq   %rsi,%xmm1
  movq   %rax,%xmm4
  lea    D684(%rip),%rsi
  punpcklqdq %xmm2,%xmm1
  lea    D488(%rip),%rax
  movaps %xmm1,0x30(%rsp)
  movq   %rcx,%xmm1
  movq   %rax,%xmm5
  lea    D773(%rip),%rcx
  punpcklqdq %xmm3,%xmm1
  lea    D347(%rip),%rax
  movaps %xmm1,0x1a0(%rsp)
  movq   %rdi,%xmm1
  movq   %rax,%xmm6
  lea    D229(%rip),%rdi
  punpcklqdq %xmm4,%xmm1
  lea    D714(%rip),%rax
  movaps %xmm1,0x1b0(%rsp)
  movq   %rsi,%xmm1
  movq   %rax,%xmm7
  lea    D836(%rip),%rsi
  punpcklqdq %xmm5,%xmm1
  lea    D600(%rip),%rax
  movaps %xmm1,0x1c0(%rsp)
  movq   %rcx,%xmm1
  movq   %rax,%xmm2
  lea    D319(%rip),%rcx
  punpcklqdq %xmm6,%xmm1
  lea    D421(%rip),%rax
  movaps %xmm1,0x1d0(%rsp)
  movq   %rdi,%xmm1
  movq   %rax,%xmm3
  lea    D315(%rip),%rdi
  punpcklqdq %xmm7,%xmm1
  lea    D296(%rip),%rax
  movaps %xmm1,0x1e0(%rsp)
  movq   %rsi,%xmm1
  movq   %rax,%xmm4
  lea    D176(%rip),%rsi
  punpcklqdq %xmm2,%xmm1
  lea    D671(%rip),%rax
  movaps %xmm1,0x1f0(%rsp)
  movq   %rcx,%xmm1
  movq   %rax,%xmm5
  lea    D831(%rip),%rax
  punpcklqdq %xmm3,%xmm1
  lea    D268(%rip),%rcx
  movaps %xmm1,0x200(%rsp)
  movq   %rdi,%xmm1
  lea    D133(%rip),%rdi
  punpcklqdq %xmm4,%xmm1
  mov    %rax,0x230(%rsp)
  lea    D835(%rip),%rax
  movaps %xmm1,0x210(%rsp)
  movq   %rsi,%xmm1
  movq   %rax,%xmm6
  lea    D326(%rip),%rax
  punpcklqdq %xmm5,%xmm1
  movq   %rax,%xmm7
  lea    D373(%rip),%rsi
  movaps %xmm1,0x220(%rsp)
  movq   %rcx,%xmm1
  lea    D731(%rip),%rax
  lea    D732(%rip),%rcx
  punpcklqdq %xmm6,%xmm1
  movq   %rax,%xmm2
  lea    D10(%rip),%rax
  movaps %xmm1,0x40(%rsp)
  movq   %rdi,%xmm1
  lea    D43(%rip),%rdi
  punpcklqdq %xmm7,%xmm1
  movaps %xmm1,0x50(%rsp)
  movq   %rsi,%xmm1
  lea    D771(%rip),%rsi
  punpcklqdq %xmm2,%xmm1
  movaps %xmm1,0x60(%rsp)
  movq   %rax,%xmm1
  lea    D573(%rip),%rax
  movq   %rax,%xmm3
  punpcklqdq %xmm0,%xmm1
  lea    D348(%rip),%rax
  movq   %rcx,%xmm0
  mov    %rax,0x90(%rsp)
  lea    D234(%rip),%rax
  lea    D493(%rip),%rcx
  punpcklqdq %xmm3,%xmm0
  movq   %rax,%xmm4
  lea    D667(%rip),%rax
  movaps %xmm1,0x70(%rsp)
  movaps %xmm0,0x80(%rsp)
  movq   %rdi,%xmm0
  movq   %rax,%xmm5
  lea    D282(%rip),%rax
  punpcklqdq %xmm4,%xmm0
  movq   %rax,%xmm6
  lea    D764(%rip),%rdi
  movaps %xmm0,0xa0(%rsp)
  movq   %rsi,%xmm0
  lea    D805(%rip),%rax
  lea    D334(%rip),%rsi
  punpcklqdq %xmm5,%xmm0
  movq   %rax,%xmm7
  lea    D706(%rip),%rax
  movaps %xmm0,0xb0(%rsp)
  movq   %rcx,%xmm0
  movq   %rax,%xmm2
  lea    D89(%rip),%rcx
  punpcklqdq %xmm6,%xmm0
  lea    D663(%rip),%rax
  movaps %xmm0,0xc0(%rsp)
  movq   %rdi,%xmm0
  movq   %rax,%xmm3
  lea    D803(%rip),%rax
  punpcklqdq %xmm7,%xmm0
  mov    %rax,0x100(%rsp)
  lea    D492(%rip),%rax
  movaps %xmm0,0xd0(%rsp)
  movq   %rsi,%xmm0
  movq   %rax,%xmm4
  punpcklqdq %xmm2,%xmm0
  movaps %xmm0,0xe0(%rsp)
  movq   %rcx,%xmm0
  lea    D301(%rip),%rcx
  punpcklqdq %xmm3,%xmm0
  movaps %xmm0,0xf0(%rsp)
  movq   %rcx,%xmm0
  punpcklqdq %xmm4,%xmm0
  movaps %xmm0,(%rsp)
  test   %edx,%edx
  je     L138
  mov    %edx,%eax
  neg    %eax
  cmovs  %edx,%eax
  cmp    $0x76b,%eax
  jle    L133
  mov    $0x76c,%ecx
  mov    $0x2,%edx
  mov    %rsp,%rsi
L156:
  sub    %ecx,%eax
  lea    D301(%rip),%r8
  cmp    %eax,%edx
  jle    L138
  cltq
  mov    (%rsi,%rax,8),%r8
L138:
  mov    0x2e8(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L96
  mov    %r8,%rax
  add    $0x2f8,%rsp
  ret
  nopl   0x0(%rax,%rax,1)
L133:
  cmp    $0x63f,%eax
  jg     L82
  cmp    $0x5db,%eax
  jg     L150
  cmp    $0x577,%eax
  jg     L13
  cmp    $0x513,%eax
  jg     L89
  cmp    $0x4af,%eax
  jg     L62
  mov    %rcx,%r8
  cmp    $0x44b,%eax
  jle    L138
  mov    $0x44c,%ecx
  mov    $0x11,%edx
  lea    0x110(%rsp),%rsi
  jmp    L156
  nopl   (%rax)
L82:
  mov    $0x640,%ecx
  mov    $0xd,%edx
  lea    0xa0(%rsp),%rsi
  jmp    L156
  nop
L150:
  mov    $0x5dc,%ecx
  mov    $0xb,%edx
  lea    0x40(%rsp),%rsi
  jmp    L156
  nopl   0x0(%rax)
L13:
  mov    $0x578,%ecx
  mov    $0x13,%edx
  lea    0x1a0(%rsp),%rsi
  jmp    L156
  nop
L89:
  mov    $0x514,%ecx
  mov    $0x6,%edx
  lea    0x10(%rsp),%rsi
  jmp    L156
  nopl   0x0(%rax)
L62:
  mov    $0x4b0,%ecx
  mov    $0x15,%edx
  lea    0x240(%rsp),%rsi
  jmp    L156
L96:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: parse_data
arguments: data_label: D11
datatype: string
name: parse_data
arguments: data_label: D854
datatype: string
name: parse_data
arguments: data_label: D127
datatype: string
name: parse_data
arguments: data_label: D843
datatype: string
name: parse_data
arguments: data_label: D99
datatype: string
name: parse_data
arguments: data_label: D405
datatype: string
name: parse_data
arguments: data_label: D495
datatype: string
name: parse_data
arguments: data_label: D560
datatype: string
name: parse_data
arguments: data_label: D631
datatype: string
name: parse_data
arguments: data_label: D79
datatype: string
name: parse_data
arguments: data_label: D226
datatype: string
name: parse_data
arguments: data_label: D681
datatype: string
name: parse_data
arguments: data_label: D166
datatype: string
name: parse_data
arguments: data_label: D155
datatype: string
name: parse_data
arguments: data_label: D823
datatype: string
name: parse_data
arguments: data_label: D838
datatype: string
name: parse_data
arguments: data_label: D380
datatype: string
name: parse_data
arguments: data_label: D762
datatype: string
name: parse_data
arguments: data_label: D861
datatype: string
name: parse_data
arguments: data_label: D153
datatype: string
name: parse_data
arguments: data_label: D753
datatype: string
name: parse_data
arguments: data_label: D36
datatype: string
name: parse_data
arguments: data_label: D336
datatype: string
name: parse_data
arguments: data_label: D500
datatype: string
name: parse_data
arguments: data_label: D275
datatype: string
name: parse_data
arguments: data_label: D661
datatype: string
name: parse_data
arguments: data_label: D87
datatype: string
name: parse_data
arguments: data_label: D108
datatype: string
name: parse_data
arguments: data_label: D150
datatype: string
name: parse_data
arguments: data_label: D630
datatype: string
name: parse_data
arguments: data_label: D723
datatype: string
name: parse_data
arguments: data_label: D39
datatype: string
name: parse_data
arguments: data_label: D90
datatype: string
name: parse_data
arguments: data_label: D361
datatype: string
name: parse_data
arguments: data_label: D224
datatype: string
name: parse_data
arguments: data_label: D117
datatype: string
name: parse_data
arguments: data_label: D572
datatype: string
name: parse_data
arguments: data_label: D824
datatype: string
name: parse_data
arguments: data_label: D324
datatype: string
name: parse_data
arguments: data_label: D694
datatype: string
name: parse_data
arguments: data_label: D61
datatype: string
name: parse_data
arguments: data_label: D490
datatype: string
name: parse_data
arguments: data_label: D656
datatype: string
name: parse_data
arguments: data_label: D539
datatype: string
name: parse_data
arguments: data_label: D205
datatype: string
name: parse_data
arguments: data_label: D269
datatype: string
name: parse_data
arguments: data_label: D684
datatype: string
name: parse_data
arguments: data_label: D488
datatype: string
name: parse_data
arguments: data_label: D773
datatype: string
name: parse_data
arguments: data_label: D347
datatype: string
name: parse_data
arguments: data_label: D229
datatype: string
name: parse_data
arguments: data_label: D714
datatype: string
name: parse_data
arguments: data_label: D836
datatype: string
name: parse_data
arguments: data_label: D600
datatype: string
name: parse_data
arguments: data_label: D319
datatype: string
name: parse_data
arguments: data_label: D421
datatype: string
name: parse_data
arguments: data_label: D315
datatype: string
name: parse_data
arguments: data_label: D296
datatype: string
name: parse_data
arguments: data_label: D176
datatype: string
name: parse_data
arguments: data_label: D671
datatype: string
name: parse_data
arguments: data_label: D831
datatype: string
name: parse_data
arguments: data_label: D268
datatype: string
name: parse_data
arguments: data_label: D133
datatype: string
name: parse_data
arguments: data_label: D835
datatype: string
name: parse_data
arguments: data_label: D326
datatype: string
name: parse_data
arguments: data_label: D373
datatype: string
name: parse_data
arguments: data_label: D731
datatype: string
name: parse_data
arguments: data_label: D732
datatype: string
name: parse_data
arguments: data_label: D10
datatype: string
name: parse_data
arguments: data_label: D43
datatype: string
name: parse_data
arguments: data_label: D771
datatype: string
name: parse_data
arguments: data_label: D573
datatype: string
name: parse_data
arguments: data_label: D348
datatype: string
name: parse_data
arguments: data_label: D234
datatype: string
name: parse_data
arguments: data_label: D493
datatype: string
name: parse_data
arguments: data_label: D667
datatype: string
name: parse_data
arguments: data_label: D282
datatype: string
name: parse_data
arguments: data_label: D764
datatype: string
name: parse_data
arguments: data_label: D805
datatype: string
name: parse_data
arguments: data_label: D334
datatype: string
name: parse_data
arguments: data_label: D706
datatype: string
name: parse_data
arguments: data_label: D89
datatype: string
name: parse_data
arguments: data_label: D663
datatype: string
name: parse_data
arguments: data_label: D803
datatype: string
name: parse_data
arguments: data_label: D492
datatype: string
name: parse_data
arguments: data_label: D301
datatype: string

tool: D11: Generic reader error

tool: D854: UNUSED

tool: D127: Card not present

tool: D843: Card reset

tool: D99: Timed out while waiting for user input

tool: D405: Success

tool: D495: No readers found

tool: D560: Card removed

tool: D631: Transmit failed

tool: D79: Input operation cancelled by user

tool: D226: Message too long (keypad)

tool: D681: The two PINs did not match

tool: D166: Unresponsive card (correctly inserted?)

tool: D155: Timeout while waiting for event from card reader

tool: D823: Reader reattached

tool: D838: Reader detached

tool: D380: Reader in use by another application

tool: D762: Card command failed

tool: D861: File not found

tool: D153: Record not found

tool: D753: Unsupported CLA byte in APDU

tool: D36: Unsupported INS byte in APDU

tool: D336: Incorrect parameters in APDU

tool: D500: Wrong length

tool: D275: Card memory failure

tool: D661: Card does not support the requested operation

tool: D87: Not allowed

tool: D108: Card is invalid or cannot be handled

tool: D150: Security status not satisfied

tool: D630: Authentication method blocked

tool: D723: Unknown data received from card

tool: D39: PIN code or key incorrect

tool: D90: File already exists

tool: D361: Data object not found

tool: D224: Not enough memory on card

tool: D117: Part of returned data may be corrupted

tool: D572: End of file/record reached before reading Le bytes

tool: D824: Reference data not usable

tool: D324: Invalid arguments

tool: D694: Invalid PIN length

tool: D61: Internal error

tool: D490: Required ASN.1 object not found

tool: D656: Buffer too small

tool: D539: Invalid data

tool: D205: Invalid ASN.1 object

tool: D269: Premature end of ASN.1 stream

tool: D684: Out of memory

tool: D488: Too many objects

tool: D773: Object not valid

tool: D347: Requested object not found

tool: D229: Not supported

tool: D714: Passphrase required

tool: D836: Inconsistent configuration

tool: D600: Decryption failed

tool: D319: Wrong padding

tool: D421: Unsupported card

tool: D315: Unable to load external module

tool: D296: EF offset too large

tool: D176: Not implemented

tool: D671: Invalid Simple TLV object

tool: D831: Premature end of Simple TLV stream

tool: D268: Generic PKCS#15 initialization error

tool: D133: Inconsistent or incomplete PKCS#15 profile

tool: D835: Syntax error

tool: D326: Key length/algorithm not supported by card

tool: D373: No default (transport) key available

tool: D731: Non unique object ID

tool: D732: File template not found

tool: D10: Unable to load key and certificate(s) from file

tool: D43: Generic Secure Messaging error

tool: D771: Invalid secure messaging level

tool: D573: Invalid PIN reference

tool: D348: File too small

tool: D234: Data enciphering error

tool: D493: Invalid session keys

tool: D667: No session keys

tool: D282: Secure Messaging not initialized

tool: D764: Cannot authenticate card

tool: D805: Random generation error

tool: D334: Secure messaging keyset not found

tool: D706: IFD data missing

tool: D89: SM not applied

tool: D663: SM session already active

tool: D803: Invalid checksum

tool: D492: PKCS#15 compatible smart card not found

tool: D301: Unknown error

assistant: ```c
const char *sc_strerror(int error) {
  const char *rdr_errors[] = {"Generic reader error", "No readers found", "UNUSED", "UNUSED", "Card not present", "Card removed", "Card reset", "Transmit failed", "Timed out while waiting for user input", "Input operation cancelled by user", "The two PINs did not match", "Message too long (keypad)", "Timeout while waiting for event from card reader", "Unresponsive card (correctly inserted?)", "Reader detached", "Reader reattached", "Reader in use by another application"};
  const int rdr_base = - -1100;
  const char *card_errors[] = {"Card command failed", "File not found", "Record not found", "Unsupported CLA byte in APDU", "Unsupported INS byte in APDU", "Incorrect parameters in APDU", "Wrong length", "Card memory failure", "Card does not support the requested operation", "Not allowed", "Card is invalid or cannot be handled", "Security status not satisfied", "Authentication method blocked", "Unknown data received from card", "PIN code or key incorrect", "File already exists", "Data object not found", "Not enough memory on card", "Part of returned data may be corrupted", "End of file/record reached before reading Le bytes", "Reference data not usable"};
  const int card_base = - -1200;
  const char *arg_errors[] = {
      "Invalid arguments", "UNUSED", "UNUSED", "Buffer too small", "Invalid PIN length", "Invalid data",
  };
  const int arg_base = - -1300;
  const char *int_errors[] = {
      "Internal error", "Invalid ASN.1 object", "Required ASN.1 object not found", "Premature end of ASN.1 stream", "Out of memory", "Too many objects", "Object not valid", "Requested object not found", "Not supported", "Passphrase required", "Inconsistent configuration", "Decryption failed", "Wrong padding", "Unsupported card", "Unable to load external module", "EF offset too large", "Not implemented", "Invalid Simple TLV object", "Premature end of Simple TLV stream",
  };
  const int int_base = - -1400;
  const char *p15i_errors[] = {
      "Generic PKCS#15 initialization error", "Syntax error", "Inconsistent or incomplete PKCS#15 profile", "Key length/algorithm not supported by card", "No default (transport) key available", "Non unique object ID", "Unable to load key and certificate(s) from file", "UNUSED", "File template not found", "Invalid PIN reference", "File too small",
  };
  const int p15i_base = - -1500;
  const char *sm_errors[] = {"Generic Secure Messaging error", "Data enciphering error", "Invalid secure messaging level", "No session keys", "Invalid session keys", "Secure Messaging not initialized", "Cannot authenticate card", "Random generation error", "Secure messaging keyset not found", "IFD data missing", "SM not applied", "SM session already active", "Invalid checksum"};
  const int sm_base = - -1600;
  const char *misc_errors[] = {
      "Unknown error",
      "PKCS#15 compatible smart card not found",
  };
  const int misc_base = - -1900;
  const char *no_errors = "Success";
  const char **errors = NULL;
  int count = 0, err_base = 0;
  if (!error)
    return no_errors;
  if (error < 0)
    error = -error;
  if (error >= misc_base) {
    errors = misc_errors;
    count = (sizeof(misc_errors) / (sizeof((misc_errors)[0])));
    err_base = misc_base;
  } else if (error >= sm_base) {
    errors = sm_errors;
    count = (sizeof(sm_errors) / (sizeof((sm_errors)[0])));
    err_base = sm_base;
  } else if (error >= p15i_base) {
    errors = p15i_errors;
    count = (sizeof(p15i_errors) / (sizeof((p15i_errors)[0])));
    err_base = p15i_base;
  } else if (error >= int_base) {
    errors = int_errors;
    count = (sizeof(int_errors) / (sizeof((int_errors)[0])));
    err_base = int_base;
  } else if (error >= arg_base) {
    errors = arg_errors;
    count = (sizeof(arg_errors) / (sizeof((arg_errors)[0])));
    err_base = arg_base;
  } else if (error >= card_base) {
    errors = card_errors;
    count = (sizeof(card_errors) / (sizeof((card_errors)[0])));
    err_base = card_base;
  } else if (error >= rdr_base) {
    errors = rdr_errors;
    count = (sizeof(rdr_errors) / (sizeof((rdr_errors)[0])));
    err_base = rdr_base;
  }
  error -= err_base;
  if (error >= count || count == 0)
    return misc_errors[0];
  return errors[error];
}
```