
void sqlite3CreateForeignKey(Parse *pParse,ExprList *pFromCol,Token *pTo,ExprList *pToCol,int flags)

{
  byte bVar1;
  uint uVar2;
  sqlite3 *db;
  Table *pTVar3;
  undefined4 uVar4;
  FKey *data;
  long lVar5;
  long lVar6;
  size_t sVar7;
  ulong __n;
  FKey *pFVar8;
  RenameToken *pRVar9;
  byte *pbVar10;
  int iVar11;
  char *__src;
  Column *pCVar12;
  int iVar13;
  u8 *puVar14;
  char **ppcVar15;
  int iVar16;
  u8 *puVar17;
  char **ppcVar18;
  int local_50;
  undefined2 local_4c;
  
  db = pParse->db;
  pTVar3 = pParse->pNewTable;
  if ((pTVar3 == (Table *)0x0) || (pParse->eParseMode == '\x01')) goto joined_r0x0014bec0;
  if (pFromCol != (ExprList *)0x0) {
    local_50 = pFromCol->nExpr;
    if (pToCol == (ExprList *)0x0) {
      data = (FKey *)sqlite3DbMallocZero(db,(long)(int)(local_50 * 0x10 + 0x41 + pTo->n));
      if (data != (FKey *)0x0) {
        lVar5 = ((long)local_50 + 4) * 0x10;
        goto LAB_0014bd94;
      }
    }
    else {
      iVar13 = pToCol->nExpr;
      if (iVar13 == local_50) {
        iVar11 = iVar13 * 0x10 + 0x41 + pTo->n;
        if (0 < iVar13) goto LAB_0014bd06;
        goto LAB_0014bd6e;
      }
      sqlite3ErrorMsg(pParse,
                      "number of columns in foreign key does not match the number of columns in the referenced table"
                     );
    }
    goto LAB_0014bec2;
  }
  iVar13 = pTVar3->nCol + -1;
  if (-1 < iVar13) {
    if (pToCol == (ExprList *)0x0) {
      data = (FKey *)sqlite3DbMallocZero(db,(long)(int)(pTo->n + 0x51));
      if (data == (FKey *)0x0) {
        return;
      }
      lVar5 = 0x50;
      local_50 = 1;
    }
    else {
      if (pToCol->nExpr != 1) {
        sqlite3ErrorMsg(pParse,"foreign key on %s should reference only one column of table %T",
                        pTVar3->aCol[iVar13].zName,pTo);
        goto LAB_0014bed9;
      }
      local_50 = 1;
      iVar11 = pTo->n + 0x51;
      iVar13 = 1;
LAB_0014bd06:
      iVar16 = 0;
      ppcVar18 = &pToCol->a[0].zName;
      do {
        while (*ppcVar18 != (char *)0x0) {
          sVar7 = strlen(*ppcVar18);
          iVar16 = iVar16 + 1;
          ppcVar18 = ppcVar18 + 4;
          iVar11 = iVar11 + ((uint)sVar7 & 0x3fffffff) + 1;
          if (iVar13 <= iVar16) goto LAB_0014bd6e;
        }
        iVar16 = iVar16 + 1;
        ppcVar18 = ppcVar18 + 4;
        iVar11 = iVar11 + 1;
      } while (iVar16 < iVar13);
LAB_0014bd6e:
      data = (FKey *)sqlite3DbMallocZero(db,(long)iVar11);
      if (data == (FKey *)0x0) goto joined_r0x0014bec0;
      lVar5 = ((long)local_50 + 4) * 0x10;
    }
LAB_0014bd94:
    data->pFrom = pTVar3;
    pFVar8 = pTVar3->pFKey;
    puVar17 = data->aAction + lVar5 + -0x2d;
    data->zTo = (char *)puVar17;
    data->pNextFrom = pFVar8;
    if ((1 < pParse->eParseMode) &&
       (pRVar9 = (RenameToken *)sqlite3DbMallocZero(pParse->db,0x20), pRVar9 != (RenameToken *)0x0))
    {
      pRVar9->p = puVar17;
      uVar2 = pTo->n;
      uVar4 = *(undefined4 *)&pTo->field_0xc;
      (pRVar9->t).z = pTo->z;
      (pRVar9->t).n = uVar2;
      *(undefined4 *)&(pRVar9->t).field_0xc = uVar4;
      pRVar9->pNext = pParse->pRename;
      pParse->pRename = pRVar9;
    }
    memcpy(puVar17,pTo->z,(ulong)pTo->n);
    puVar17[pTo->n] = '\0';
    sqlite3Dequote((char *)puVar17);
    uVar2 = pTo->n;
    data->nCol = local_50;
    if (pFromCol == (ExprList *)0x0) {
      data->aCol[0].iFrom = pTVar3->nCol + -1;
      if ((pToCol != (ExprList *)0x0) && (0 < local_50)) goto LAB_0014bf4f;
    }
    else {
      lVar5 = 0x40;
      if (0 < local_50) {
        iVar13 = 0;
LAB_0014be20:
        pbVar10 = *(byte **)((long)pFromCol->a + lVar5 * 2 + -0x78);
        if (0 < pTVar3->nCol) {
          pCVar12 = pTVar3->aCol;
          iVar11 = 0;
          do {
            bVar1 = *pCVar12->zName;
            if (""[bVar1] == ""[*pbVar10]) {
              if (bVar1 == 0) goto LAB_0014bf08;
              lVar6 = 1;
              while (bVar1 = pCVar12->zName[lVar6], ""[bVar1] == ""[pbVar10[lVar6]]) {
                lVar6 = lVar6 + 1;
                if (bVar1 == 0) goto LAB_0014bf08;
              }
            }
            iVar11 = iVar11 + 1;
            pCVar12 = pCVar12 + 1;
            if (iVar11 == pTVar3->nCol) break;
          } while( true );
        }
        goto LAB_0014be9c;
      }
    }
    goto LAB_0014c064;
  }
LAB_0014bed1:
  if (pToCol == (ExprList *)0x0) {
    return;
  }
LAB_0014bed9:
  exprListDeleteNN(db,pToCol);
  return;
LAB_0014bf08:
  *(int *)(data->aAction + lVar5 + -0x2d) = iVar11;
  if (pTVar3->nCol <= iVar11) {
    pbVar10 = (byte *)pFromCol->a[iVar13].zName;
LAB_0014be9c:
    sqlite3ErrorMsg(pParse,"unknown column \"%s\" in foreign key definition",pbVar10);
    goto LAB_0014bead;
  }
  if (1 < pParse->eParseMode) {
    for (pRVar9 = pParse->pRename; pRVar9 != (RenameToken *)0x0; pRVar9 = pRVar9->pNext) {
      if (*(void **)((long)pFromCol->a + lVar5 * 2 + -0x78) == pRVar9->p) {
        pRVar9->p = data->aAction + lVar5 + -0x2d;
        break;
      }
    }
  }
  iVar13 = iVar13 + 1;
  lVar5 = lVar5 + 0x10;
  if (iVar13 == local_50) goto code_r0x0014bf3e;
  goto LAB_0014be20;
code_r0x0014bf3e:
  if (pToCol != (ExprList *)0x0) {
LAB_0014bf4f:
    ppcVar15 = &data->aCol[0].zCol;
    ppcVar18 = &pToCol->a[0].zName;
    iVar13 = 0;
    puVar17 = puVar17 + (uVar2 + 1);
    do {
      if (*ppcVar18 == (char *)0x0) {
        lVar5 = 1;
        __n = 0;
        puVar14 = puVar17;
      }
      else {
        sVar7 = strlen(*ppcVar18);
        __n = (ulong)((uint)sVar7 & 0x3fffffff);
        lVar5 = __n + 1;
        puVar14 = puVar17 + __n;
      }
      *ppcVar15 = (char *)puVar17;
      __src = *ppcVar18;
      if (1 < pParse->eParseMode) {
        for (pRVar9 = pParse->pRename; pRVar9 != (RenameToken *)0x0; pRVar9 = pRVar9->pNext) {
          if (__src == (char *)pRVar9->p) {
            pRVar9->p = puVar17;
            __src = *ppcVar18;
            break;
          }
        }
      }
      iVar13 = iVar13 + 1;
      ppcVar18 = ppcVar18 + 4;
      memcpy(puVar17,__src,__n);
      ppcVar15 = ppcVar15 + 2;
      *puVar14 = '\0';
      puVar17 = puVar17 + lVar5;
    } while (iVar13 < local_50);
  }
LAB_0014c064:
  local_4c = (undefined2)flags;
  data->isDeferred = '\0';
  *(undefined2 *)data->aAction = local_4c;
  pFVar8 = (FKey *)sqlite3HashInsert(&pTVar3->pSchema->fkeyHash,data->zTo,data);
  if (pFVar8 == data) {
    uVar2._0_1_ = db->temp_store;
    uVar2._1_1_ = db->mallocFailed;
    uVar2._2_1_ = db->bBenignMalloc;
    uVar2._3_1_ = db->dfltLockMode;
    if ((uVar2 & 0xffff00) == 0) {
      sqlite3OomFault(db);
    }
LAB_0014bead:
    sqlite3DbFreeNN(db,data);
  }
  else {
    if (pFVar8 != (FKey *)0x0) {
      data->pNextTo = pFVar8;
      pFVar8->pPrevTo = data;
    }
    pTVar3->pFKey = data;
  }
joined_r0x0014bec0:
  if (pFromCol != (ExprList *)0x0) {
LAB_0014bec2:
    exprListDeleteNN(db,pFromCol);
  }
  goto LAB_0014bed1;
}



void FUN_0014bc80(long *param_1,int *param_2,undefined8 *param_3,int *param_4,undefined2 param_5)

{
  byte bVar1;
  long lVar2;
  long lVar3;
  long *plVar4;
  undefined8 uVar5;
  int iVar6;
  long *plVar7;
  long lVar8;
  long lVar9;
  size_t sVar10;
  ulong __n;
  long *plVar11;
  undefined8 *puVar12;
  byte *pbVar13;
  void *pvVar14;
  int iVar15;
  undefined1 *puVar16;
  long *plVar17;
  int iVar18;
  undefined1 *__dest;
  int *piVar19;
  int local_50;
  
  lVar2 = *param_1;
  lVar3 = param_1[0x27];
  if ((lVar3 == 0) || (*(char *)((long)param_1 + 0x10e) == '\x01')) goto joined_r0x0014bec0;
  if (param_2 != (int *)0x0) {
    local_50 = *param_2;
    if (param_4 == (int *)0x0) {
      plVar7 = (long *)FUN_0011b8f0(lVar2,(long)(local_50 * 0x10 + 0x41 + *(int *)(param_3 + 1)));
      if (plVar7 != (long *)0x0) {
        lVar8 = ((long)local_50 + 4) * 0x10;
        goto LAB_0014bd94;
      }
    }
    else {
      iVar6 = *param_4;
      if (iVar6 == local_50) {
        iVar15 = iVar6 * 0x10 + 0x41 + *(int *)(param_3 + 1);
        if (0 < iVar6) goto LAB_0014bd06;
        goto LAB_0014bd6e;
      }
      FUN_0014a9d0(param_1,
                   "number of columns in foreign key does not match the number of columns in the referenced table"
                  );
    }
    goto LAB_0014bec2;
  }
  iVar6 = *(short *)(lVar3 + 0x46) + -1;
  if (-1 < iVar6) {
    if (param_4 == (int *)0x0) {
      plVar7 = (long *)FUN_0011b8f0(lVar2,(long)(*(int *)(param_3 + 1) + 0x51));
      if (plVar7 == (long *)0x0) {
        return;
      }
      lVar8 = 0x50;
      local_50 = 1;
    }
    else {
      if (*param_4 != 1) {
        FUN_0014a9d0(param_1,"foreign key on %s should reference only one column of table %T",
                     *(undefined8 *)((long)iVar6 * 0x20 + *(long *)(lVar3 + 8)),param_3);
        goto LAB_0014bed9;
      }
      local_50 = 1;
      iVar15 = *(int *)(param_3 + 1) + 0x51;
      iVar6 = 1;
LAB_0014bd06:
      iVar18 = 0;
      piVar19 = param_4 + 4;
      do {
        while (*(char **)piVar19 != (char *)0x0) {
          sVar10 = strlen(*(char **)piVar19);
          iVar18 = iVar18 + 1;
          piVar19 = piVar19 + 8;
          iVar15 = iVar15 + ((uint)sVar10 & 0x3fffffff) + 1;
          if (iVar6 <= iVar18) goto LAB_0014bd6e;
        }
        iVar18 = iVar18 + 1;
        piVar19 = piVar19 + 8;
        iVar15 = iVar15 + 1;
      } while (iVar18 < iVar6);
LAB_0014bd6e:
      plVar7 = (long *)FUN_0011b8f0(lVar2,(long)iVar15);
      if (plVar7 == (long *)0x0) goto joined_r0x0014bec0;
      lVar8 = ((long)local_50 + 4) * 0x10;
    }
LAB_0014bd94:
    *plVar7 = lVar3;
    lVar9 = *(long *)(lVar3 + 0x20);
    pvVar14 = (void *)((long)plVar7 + lVar8);
    plVar7[2] = (long)pvVar14;
    plVar7[1] = lVar9;
    if ((1 < *(byte *)((long)param_1 + 0x10e)) &&
       (puVar12 = (undefined8 *)FUN_0011b8f0(*param_1,0x20), puVar12 != (undefined8 *)0x0)) {
      *puVar12 = pvVar14;
      uVar5 = param_3[1];
      puVar12[1] = *param_3;
      puVar12[2] = uVar5;
      puVar12[3] = param_1[0x32];
      param_1[0x32] = (long)puVar12;
    }
    memcpy(pvVar14,(void *)*param_3,(ulong)*(uint *)(param_3 + 1));
    *(undefined1 *)((long)pvVar14 + (ulong)*(uint *)(param_3 + 1)) = 0;
    FUN_0010f690(pvVar14);
    iVar6 = *(int *)(param_3 + 1);
    *(int *)(plVar7 + 5) = local_50;
    if (param_2 == (int *)0x0) {
      *(int *)(plVar7 + 8) = *(short *)(lVar3 + 0x46) + -1;
      if ((param_4 != (int *)0x0) && (0 < local_50)) goto LAB_0014bf4f;
    }
    else {
      lVar8 = 0x40;
      if (0 < local_50) {
        iVar15 = 0;
LAB_0014be20:
        pbVar13 = *(byte **)((long)param_2 + lVar8 * 2 + -0x70);
        if (0 < *(short *)(lVar3 + 0x46)) {
          puVar12 = *(undefined8 **)(lVar3 + 8);
          iVar18 = 0;
          do {
            bVar1 = *(byte *)*puVar12;
            if ((&DAT_001f5800)[bVar1] == (&DAT_001f5800)[*pbVar13]) {
              if (bVar1 == 0) goto LAB_0014bf08;
              lVar9 = 1;
              while (bVar1 = ((byte *)*puVar12)[lVar9],
                    (&DAT_001f5800)[bVar1] == (&DAT_001f5800)[pbVar13[lVar9]]) {
                lVar9 = lVar9 + 1;
                if (bVar1 == 0) goto LAB_0014bf08;
              }
            }
            iVar18 = iVar18 + 1;
            puVar12 = puVar12 + 4;
            if (iVar18 == *(short *)(lVar3 + 0x46)) break;
          } while( true );
        }
        goto LAB_0014be9c;
      }
    }
    goto LAB_0014c064;
  }
LAB_0014bed1:
  if (param_4 == (int *)0x0) {
    return;
  }
LAB_0014bed9:
  FUN_0012cc80(lVar2,param_4);
  return;
LAB_0014bf08:
  *(int *)((long)plVar7 + lVar8) = iVar18;
  if (*(short *)(lVar3 + 0x46) <= iVar18) {
    pbVar13 = *(byte **)(param_2 + (long)iVar15 * 8 + 4);
LAB_0014be9c:
    FUN_0014a9d0(param_1,"unknown column \"%s\" in foreign key definition",pbVar13);
    goto LAB_0014bead;
  }
  if (1 < *(byte *)((long)param_1 + 0x10e)) {
    for (plVar11 = (long *)param_1[0x32]; plVar11 != (long *)0x0; plVar11 = (long *)plVar11[3]) {
      if (*(long *)((long)param_2 + lVar8 * 2 + -0x70) == *plVar11) {
        *plVar11 = (long)plVar7 + lVar8;
        break;
      }
    }
  }
  iVar15 = iVar15 + 1;
  lVar8 = lVar8 + 0x10;
  if (iVar15 == local_50) goto code_r0x0014bf3e;
  goto LAB_0014be20;
code_r0x0014bf3e:
  if (param_4 != (int *)0x0) {
LAB_0014bf4f:
    plVar17 = plVar7 + 9;
    plVar11 = (long *)(param_4 + 4);
    iVar15 = 0;
    __dest = (undefined1 *)((long)pvVar14 + (ulong)(iVar6 + 1));
    do {
      if ((char *)*plVar11 == (char *)0x0) {
        lVar8 = 1;
        __n = 0;
        puVar16 = __dest;
      }
      else {
        sVar10 = strlen((char *)*plVar11);
        __n = (ulong)((uint)sVar10 & 0x3fffffff);
        lVar8 = __n + 1;
        puVar16 = __dest + __n;
      }
      *plVar17 = (long)__dest;
      pvVar14 = (void *)*plVar11;
      if (1 < *(byte *)((long)param_1 + 0x10e)) {
        for (plVar4 = (long *)param_1[0x32]; plVar4 != (long *)0x0; plVar4 = (long *)plVar4[3]) {
          if (pvVar14 == (void *)*plVar4) {
            *plVar4 = (long)__dest;
            pvVar14 = (void *)*plVar11;
            break;
          }
        }
      }
      iVar15 = iVar15 + 1;
      plVar11 = plVar11 + 4;
      memcpy(__dest,pvVar14,__n);
      plVar17 = plVar17 + 2;
      *puVar16 = 0;
      __dest = __dest + lVar8;
    } while (iVar15 < local_50);
  }
LAB_0014c064:
  *(undefined1 *)((long)plVar7 + 0x2c) = 0;
  *(undefined2 *)((long)plVar7 + 0x2d) = param_5;
  plVar11 = (long *)FUN_0011da30(*(long *)(lVar3 + 0x70) + 0x50,plVar7[2],plVar7);
  if (plVar11 == plVar7) {
    if ((*(uint *)(lVar2 + 0x60) & 0xffff00) == 0) {
      FUN_0011b860(lVar2);
    }
LAB_0014bead:
    FUN_00119e90(lVar2,plVar7);
  }
  else {
    if (plVar11 != (long *)0x0) {
      plVar7[3] = (long)plVar11;
      plVar11[4] = (long)plVar7;
    }
    *(long **)(lVar3 + 0x20) = plVar7;
  }
joined_r0x0014bec0:
  if (param_2 != (int *)0x0) {
LAB_0014bec2:
    FUN_0012cc80(lVar2,param_2);
  }
  goto LAB_0014bed1;
}


PUSH R15
PUSH R14
PUSH R13
PUSH R12
PUSH RBP
PUSH RBX
SUB RSP,0x48
MOV RAX,qword ptr [RDI]
MOV RBX,qword ptr [RDI + 0x138]
MOV qword ptr [RSP + 0x8],RSI
MOV qword ptr [RSP + 0x18],RCX
MOV dword ptr [RSP + 0x2c],R8D
MOV qword ptr [RSP + 0x20],RAX
TEST RBX,RBX
JZ 0x0014beba
CMP byte ptr [RDI + 0x10e],0x1
MOV RBP,RDI
JZ 0x0014beba
MOV R13,RDX
TEST RSI,RSI
JZ 0x0014c0b6
MOV RAX,qword ptr [RSP + 0x8]
MOV RDX,qword ptr [RSP + 0x18]
MOV EAX,dword ptr [RAX]
MOV dword ptr [RSP + 0x28],EAX
TEST RDX,RDX
JZ 0x0014c17b
MOV EDX,dword ptr [RDX]
MOV ESI,EDX
CMP EDX,EAX
JNZ 0x0014c168
MOV EAX,dword ptr [R13 + 0x8]
SHL EDX,0x4
LEA R12D,[RDX + RAX*0x1 + 0x41]
TEST ESI,ESI
JLE 0x0014bd6e
MOV RAX,qword ptr [RSP + 0x18]
MOV qword ptr [RSP + 0x10],RBX
XOR R14D,R14D
MOV EBX,ESI
LEA R15,[RAX + 0x10]
MOV RAX,RBP
MOV EBP,R12D
MOV R12,RAX
JMP 0x0014bd44
CALL 0x0010a120
ADD R14D,0x1
ADD R15,0x20
AND EAX,0x3fffffff
ADD EAX,0x1
ADD EBP,EAX
CMP R14D,EBX
JGE 0x0014bd60
MOV RDI,qword ptr [R15]
TEST RDI,RDI
JNZ 0x0014bd28
MOV EAX,0x1
ADD R14D,0x1
ADD R15,0x20
ADD EBP,EAX
CMP R14D,EBX
JL 0x0014bd44
MOV RAX,R12
MOV RBX,qword ptr [RSP + 0x10]
MOV R12D,EBP
MOV RBP,RAX
MOV RDI,qword ptr [RSP + 0x20]
MOVSXD RSI,R12D
CALL 0x0011b8f0
MOV R12,RAX
TEST RAX,RAX
JZ 0x0014beba
MOVSXD RAX,dword ptr [RSP + 0x28]
ADD RAX,0x4
SHL RAX,0x4
MOV qword ptr [R12],RBX
MOV RDX,qword ptr [RBX + 0x20]
LEA R14,[R12 + RAX*0x1]
MOV qword ptr [R12 + 0x10],R14
MOV qword ptr [R12 + 0x8],RDX
CMP byte ptr [RBP + 0x10e],0x1
MOV qword ptr [RSP + 0x30],R14
JA 0x0014c0fd
MOV R14,qword ptr [RSP + 0x30]
MOV EDX,dword ptr [R13 + 0x8]
MOV RSI,qword ptr [R13]
MOV RDI,R14
CALL 0x0010a240
MOV EAX,dword ptr [R13 + 0x8]
MOV RDI,R14
MOV byte ptr [R14 + RAX*0x1],0x0
CALL 0x0010f690
MOV EAX,dword ptr [R13 + 0x8]
CMP qword ptr [RSP + 0x8],0x0
MOV dword ptr [RSP + 0x38],EAX
MOV EAX,dword ptr [RSP + 0x28]
MOV dword ptr [R12 + 0x28],EAX
JZ 0x0014c138
MOV R15D,0x40
XOR EDX,EDX
LEA RSI,[0x1f5800]
TEST EAX,EAX
JLE 0x0014c064
MOV qword ptr [RSP + 0x10],R12
MOV R12D,EDX
NOP
MOV RAX,qword ptr [RSP + 0x8]
MOVSX R13D,word ptr [RBX + 0x46]
MOV RDX,qword ptr [RAX + R15*0x2 + -0x70]
TEST R13D,R13D
JLE 0x0014be97
MOVZX EAX,byte ptr [RDX]
MOV R11,qword ptr [RBX + 0x8]
XOR R10D,R10D
MOVZX R14D,byte ptr [RSI + RAX*0x1]
NOP dword ptr [RAX + RAX*0x1]
MOV R9,qword ptr [R11]
MOVZX ECX,byte ptr [R9]
CMP byte ptr [RSI + RCX*0x1],R14B
JNZ 0x0014be8a
TEST CL,CL
JZ 0x0014bf08
MOV EAX,0x1
JMP 0x0014be74
ADD RAX,0x1
TEST CL,CL
JZ 0x0014bf08
MOVZX R8D,byte ptr [R9 + RAX*0x1]
MOVZX EDI,byte ptr [RDX + RAX*0x1]
MOV RCX,R8
MOVZX EDI,byte ptr [RSI + RDI*0x1]
CMP byte ptr [RSI + R8*0x1],DIL
JZ 0x0014be68
ADD R10D,0x1
ADD R11,0x20
CMP R10D,R13D
JNZ 0x0014be48
MOV R12,qword ptr [RSP + 0x10]
LEA RSI,[0x1f5f38]
MOV RDI,RBP
XOR EAX,EAX
CALL 0x0014a9d0
MOV RDI,qword ptr [RSP + 0x20]
MOV RSI,R12
CALL 0x00119e90
CMP qword ptr [RSP + 0x8],0x0
JZ 0x0014bed1
MOV RSI,qword ptr [RSP + 0x8]
MOV RDI,qword ptr [RSP + 0x20]
CALL 0x0012cc80
CMP qword ptr [RSP + 0x18],0x0
JZ 0x0014bef6
MOV RSI,qword ptr [RSP + 0x18]
MOV RDI,qword ptr [RSP + 0x20]
ADD RSP,0x48
POP RBX
POP RBP
POP R12
POP R13
POP R14
POP R15
JMP 0x0012cc80
ADD RSP,0x48
POP RBX
POP RBP
POP R12
POP R13
POP R14
POP R15
RET
MOV RAX,qword ptr [RSP + 0x10]
MOV dword ptr [RAX + R15*0x1],R10D
MOVSX EAX,word ptr [RBX + 0x46]
CMP EAX,R10D
JLE 0x0014c22b
CMP byte ptr [RBP + 0x10e],0x1
JA 0x0014c019
ADD R12D,0x1
ADD R15,0x10
CMP R12D,dword ptr [RSP + 0x28]
JNZ 0x0014be20
CMP qword ptr [RSP + 0x18],0x0
MOV R12,qword ptr [RSP + 0x10]
JZ 0x0014c064
MOV EAX,dword ptr [RSP + 0x38]
MOV R15,qword ptr [RSP + 0x30]
MOV qword ptr [RSP + 0x30],RBX
LEA R13,[R12 + 0x48]
MOV qword ptr [RSP + 0x38],R12
LEA R8D,[RAX + 0x1]
MOV RAX,qword ptr [RSP + 0x18]
MOV qword ptr [RSP + 0x10],RBP
ADD R15,R8
LEA R14,[RAX + 0x10]
XOR EAX,EAX
MOV EBX,EAX
MOV RAX,R14
MOV R14,R15
MOV R15,RAX
JMP 0x0014bfb0
MOV RDI,R14
ADD EBX,0x1
ADD R14,RBP
ADD R15,0x20
CALL 0x0010a240
ADD R13,0x10
MOV byte ptr [R12],0x0
CMP EBX,dword ptr [RSP + 0x28]
JGE 0x0014c05a
MOV RDI,qword ptr [R15]
TEST RDI,RDI
JZ 0x0014c0ee
CALL 0x0010a120
AND EAX,0x3fffffff
MOV RDX,RAX
LEA R12,[R14 + RAX*0x1]
LEA RBP,[RAX + 0x1]
MOV RAX,qword ptr [RSP + 0x10]
MOV qword ptr [R13],R14
MOV RSI,qword ptr [R15]
CMP byte ptr [RAX + 0x10e],0x1
JBE 0x0014bf8b
MOV RAX,qword ptr [RSP + 0x10]
MOV RCX,qword ptr [RAX + 0x190]
TEST RCX,RCX
JNZ 0x0014c009
JMP 0x0014bf8b
MOV RCX,qword ptr [RCX + 0x18]
TEST RCX,RCX
JZ 0x0014bf8b
CMP RSI,qword ptr [RCX]
JNZ 0x0014c000
MOV qword ptr [RCX],R14
MOV RSI,qword ptr [R15]
JMP 0x0014bf8b
MOV RAX,qword ptr [RSP + 0x8]
MOV RDX,qword ptr [RAX + R15*0x2 + -0x70]
MOV RAX,qword ptr [RBP + 0x190]
TEST RAX,RAX
JNZ 0x0014c045
JMP 0x0014bf2b
MOV RAX,qword ptr [RAX + 0x18]
TEST RAX,RAX
JZ 0x0014bf2b
CMP RDX,qword ptr [RAX]
JNZ 0x0014c038
MOV RDX,qword ptr [RSP + 0x10]
ADD RDX,R15
MOV qword ptr [RAX],RDX
JMP 0x0014bf2b
MOV RBX,qword ptr [RSP + 0x30]
MOV R12,qword ptr [RSP + 0x38]
MOVZX EAX,word ptr [RSP + 0x2c]
MOV byte ptr [R12 + 0x2c],0x0
MOV RDX,R12
MOV RSI,qword ptr [R12 + 0x10]
MOV word ptr [R12 + 0x2d],AX
MOV RAX,qword ptr [RBX + 0x70]
LEA RDI,[RAX + 0x50]
CALL 0x0011da30
CMP RAX,R12
JZ 0x0014c1e9
TEST RAX,RAX
JZ 0x0014c0a1
MOV qword ptr [R12 + 0x18],RAX
MOV qword ptr [RAX + 0x20],R12
CMP qword ptr [RSP + 0x8],0x0
MOV qword ptr [RBX + 0x20],R12
JNZ 0x0014bec2
JMP 0x0014bed1
MOVSX EAX,word ptr [RBX + 0x46]
SUB EAX,0x1
JS 0x0014bed1
TEST RCX,RCX
JZ 0x0014c1b7
MOV EDX,dword ptr [RCX]
MOV ESI,EDX
CMP EDX,0x1
JNZ 0x0014c208
MOV EAX,dword ptr [R13 + 0x8]
MOV dword ptr [RSP + 0x28],0x1
LEA R12D,[RAX + 0x51]
JMP 0x0014bd06
MOV R12,R14
MOV EBP,0x1
XOR EDX,EDX
JMP 0x0014bfd1
MOV RDI,qword ptr [RBP]
MOV ESI,0x20
CALL 0x0011b8f0
TEST RAX,RAX
JZ 0x0014bdbc
MOV qword ptr [RAX],R14
MOVDQU XMM0,xmmword ptr [R13]
MOVUPS xmmword ptr [RAX + 0x8],XMM0
MOV RDX,qword ptr [RBP + 0x190]
MOV qword ptr [RAX + 0x18],RDX
MOV qword ptr [RBP + 0x190],RAX
JMP 0x0014bdbc
MOVSX EAX,word ptr [RBX + 0x46]
SUB EAX,0x1
CMP qword ptr [RSP + 0x18],0x0
MOV dword ptr [R12 + 0x40],EAX
JZ 0x0014c064
MOV EAX,dword ptr [RSP + 0x28]
TEST EAX,EAX
JG 0x0014bf4f
JMP 0x0014c064
LEA RSI,[0x1f5ed8]
XOR EAX,EAX
CALL 0x0014a9d0
JMP 0x0014bec2
MOV R14D,dword ptr [RSP + 0x28]
MOV EAX,dword ptr [R13 + 0x8]
MOV RDI,qword ptr [RSP + 0x20]
MOV EDX,R14D
SHL EDX,0x4
LEA ESI,[RDX + RAX*0x1 + 0x41]
MOVSXD RSI,ESI
CALL 0x0011b8f0
MOV R12,RAX
TEST RAX,RAX
JZ 0x0014bec2
MOVSXD RAX,R14D
ADD RAX,0x4
SHL RAX,0x4
JMP 0x0014bd94
MOV EAX,dword ptr [R13 + 0x8]
MOV RDI,qword ptr [RSP + 0x20]
LEA ESI,[RAX + 0x51]
MOVSXD RSI,ESI
CALL 0x0011b8f0
MOV R12,RAX
TEST RAX,RAX
JZ 0x0014bef6
MOV EAX,0x50
MOV dword ptr [RSP + 0x28],0x1
JMP 0x0014bd94
MOV RAX,qword ptr [RSP + 0x20]
TEST dword ptr [RAX + 0x60],0xffff00
JNZ 0x0014bead
MOV RDI,RAX
CALL 0x0011b860
JMP 0x0014bead
CDQE
MOV RCX,R13
LEA RSI,[0x1f5e98]
SHL RAX,0x5
ADD RAX,qword ptr [RBX + 0x8]
MOV RDX,qword ptr [RAX]
XOR EAX,EAX
CALL 0x0014a9d0
JMP 0x0014bed9
MOVSXD RAX,R12D
MOV RBX,qword ptr [RSP + 0x8]
MOV R12,qword ptr [RSP + 0x10]
SHL RAX,0x5
MOV RDX,qword ptr [RBX + RAX*0x1 + 0x10]
JMP 0x0014be9c
(translation_unit "void FUN_0014bc80(long *param_1,int *param_2,undefined8 *param_3,int *param_4,undefined2 param_5)\n\n{\n  byte bVar1;\n  long lVar2;\n  long lVar3;\n  long *plVar4;\n  undefined8 uVar5;\n  int iVar6;\n  long *plVar7;\n  long lVar8;\n  long lVar9;\n  size_t sVar10;\n  ulong __n;\n  long *plVar11;\n  undefined8 *puVar12;\n  byte *pbVar13;\n  void *pvVar14;\n  int iVar15;\n  undefined1 *puVar16;\n  long *plVar17;\n  int iVar18;\n  undefined1 *__dest;\n  int *piVar19;\n  int local_50;\n  \n  lVar2 = *param_1;\n  lVar3 = param_1[0x27];\n  if ((lVar3 == 0) || (*(char *)((long)param_1 + 0x10e) == '\x01')) goto joined_r0x0014bec0;\n  if (param_2 != (int *)0x0) {\n    local_50 = *param_2;\n    if (param_4 == (int *)0x0) {\n      plVar7 = (long *)FUN_0011b8f0(lVar2,(long)(local_50 * 0x10 + 0x41 + *(int *)(param_3 + 1)));\n      if (plVar7 != (long *)0x0) {\n        lVar8 = ((long)local_50 + 4) * 0x10;\n        goto LAB_0014bd94;\n      }\n    }\n    else {\n      iVar6 = *param_4;\n      if (iVar6 == local_50) {\n        iVar15 = iVar6 * 0x10 + 0x41 + *(int *)(param_3 + 1);\n        if (0 < iVar6) goto LAB_0014bd06;\n        goto LAB_0014bd6e;\n      }\n      FUN_0014a9d0(param_1,\n                   "number of columns in foreign key does not match the number of columns in the referenced table"\n                  );\n    }\n    goto LAB_0014bec2;\n  }\n  iVar6 = *(short *)(lVar3 + 0x46) + -1;\n  if (-1 < iVar6) {\n    if (param_4 == (int *)0x0) {\n      plVar7 = (long *)FUN_0011b8f0(lVar2,(long)(*(int *)(param_3 + 1) + 0x51));\n      if (plVar7 == (long *)0x0) {\n        return;\n      }\n      lVar8 = 0x50;\n      local_50 = 1;\n    }\n    else {\n      if (*param_4 != 1) {\n        FUN_0014a9d0(param_1,"foreign key on %s should reference only one column of table %T",\n                     *(undefined8 *)((long)iVar6 * 0x20 + *(long *)(lVar3 + 8)),param_3);\n        goto LAB_0014bed9;\n      }\n      local_50 = 1;\n      iVar15 = *(int *)(param_3 + 1) + 0x51;\n      iVar6 = 1;\nLAB_0014bd06:\n      iVar18 = 0;\n      piVar19 = param_4 + 4;\n      do {\n        while (*(char **)piVar19 != (char *)0x0) {\n          sVar10 = strlen(*(char **)piVar19);\n          iVar18 = iVar18 + 1;\n          piVar19 = piVar19 + 8;\n          iVar15 = iVar15 + ((uint)sVar10 & 0x3fffffff) + 1;\n          if (iVar6 <= iVar18) goto LAB_0014bd6e;\n        }\n        iVar18 = iVar18 + 1;\n        piVar19 = piVar19 + 8;\n        iVar15 = iVar15 + 1;\n      } while (iVar18 < iVar6);\nLAB_0014bd6e:\n      plVar7 = (long *)FUN_0011b8f0(lVar2,(long)iVar15);\n      if (plVar7 == (long *)0x0) goto joined_r0x0014bec0;\n      lVar8 = ((long)local_50 + 4) * 0x10;\n    }\nLAB_0014bd94:\n    *plVar7 = lVar3;\n    lVar9 = *(long *)(lVar3 + 0x20);\n    pvVar14 = (void *)((long)plVar7 + lVar8);\n    plVar7[2] = (long)pvVar14;\n    plVar7[1] = lVar9;\n    if ((1 < *(byte *)((long)param_1 + 0x10e)) &&\n       (puVar12 = (undefined8 *)FUN_0011b8f0(*param_1,0x20), puVar12 != (undefined8 *)0x0)) {\n      *puVar12 = pvVar14;\n      uVar5 = param_3[1];\n      puVar12[1] = *param_3;\n      puVar12[2] = uVar5;\n      puVar12[3] = param_1[0x32];\n      param_1[0x32] = (long)puVar12;\n    }\n    memcpy(pvVar14,(void *)*param_3,(ulong)*(uint *)(param_3 + 1));\n    *(undefined1 *)((long)pvVar14 + (ulong)*(uint *)(param_3 + 1)) = 0;\n    FUN_0010f690(pvVar14);\n    iVar6 = *(int *)(param_3 + 1);\n    *(int *)(plVar7 + 5) = local_50;\n    if (param_2 == (int *)0x0) {\n      *(int *)(plVar7 + 8) = *(short *)(lVar3 + 0x46) + -1;\n      if ((param_4 != (int *)0x0) && (0 < local_50)) goto LAB_0014bf4f;\n    }\n    else {\n      lVar8 = 0x40;\n      if (0 < local_50) {\n        iVar15 = 0;\nLAB_0014be20:\n        pbVar13 = *(byte **)((long)param_2 + lVar8 * 2 + -0x70);\n        if (0 < *(short *)(lVar3 + 0x46)) {\n          puVar12 = *(undefined8 **)(lVar3 + 8);\n          iVar18 = 0;\n          do {\n            bVar1 = *(byte *)*puVar12;\n            if ((&DAT_001f5800)[bVar1] == (&DAT_001f5800)[*pbVar13]) {\n              if (bVar1 == 0) goto LAB_0014bf08;\n              lVar9 = 1;\n              while (bVar1 = ((byte *)*puVar12)[lVar9],\n                    (&DAT_001f5800)[bVar1] == (&DAT_001f5800)[pbVar13[lVar9]]) {\n                lVar9 = lVar9 + 1;\n                if (bVar1 == 0) goto LAB_0014bf08;\n              }\n            }\n            iVar18 = iVar18 + 1;\n            puVar12 = puVar12 + 4;\n            if (iVar18 == *(short *)(lVar3 + 0x46)) break;\n          } while( true );\n        }\n        goto LAB_0014be9c;\n      }\n    }\n    goto LAB_0014c064;\n  }\nLAB_0014bed1:\n  if (param_4 == (int *)0x0) {\n    return;\n  }\nLAB_0014bed9:\n  FUN_0012cc80(lVar2,param_4);\n  return;\nLAB_0014bf08:\n  *(int *)((long)plVar7 + lVar8) = iVar18;\n  if (*(short *)(lVar3 + 0x46) <= iVar18) {\n    pbVar13 = *(byte **)(param_2 + (long)iVar15 * 8 + 4);\nLAB_0014be9c:\n    FUN_0014a9d0(param_1,"unknown column \"%s\" in foreign key definition",pbVar13);\n    goto LAB_0014bead;\n  }\n  if (1 < *(byte *)((long)param_1 + 0x10e)) {\n    for (plVar11 = (long *)param_1[0x32]; plVar11 != (long *)0x0; plVar11 = (long *)plVar11[3]) {\n      if (*(long *)((long)param_2 + lVar8 * 2 + -0x70) == *plVar11) {\n        *plVar11 = (long)plVar7 + lVar8;\n        break;\n      }\n    }\n  }\n  iVar15 = iVar15 + 1;\n  lVar8 = lVar8 + 0x10;\n  if (iVar15 == local_50) goto code_r0x0014bf3e;\n  goto LAB_0014be20;\ncode_r0x0014bf3e:\n  if (param_4 != (int *)0x0) {\nLAB_0014bf4f:\n    plVar17 = plVar7 + 9;\n    plVar11 = (long *)(param_4 + 4);\n    iVar15 = 0;\n    __dest = (undefined1 *)((long)pvVar14 + (ulong)(iVar6 + 1));\n    do {\n      if ((char *)*plVar11 == (char *)0x0) {\n        lVar8 = 1;\n        __n = 0;\n        puVar16 = __dest;\n      }\n      else {\n        sVar10 = strlen((char *)*plVar11);\n        __n = (ulong)((uint)sVar10 & 0x3fffffff);\n        lVar8 = __n + 1;\n        puVar16 = __dest + __n;\n      }\n      *plVar17 = (long)__dest;\n      pvVar14 = (void *)*plVar11;\n      if (1 < *(byte *)((long)param_1 + 0x10e)) {\n        for (plVar4 = (long *)param_1[0x32]; plVar4 != (long *)0x0; plVar4 = (long *)plVar4[3]) {\n          if (pvVar14 == (void *)*plVar4) {\n            *plVar4 = (long)__dest;\n            pvVar14 = (void *)*plVar11;\n            break;\n          }\n        }\n      }\n      iVar15 = iVar15 + 1;\n      plVar11 = plVar11 + 4;\n      memcpy(__dest,pvVar14,__n);\n      plVar17 = plVar17 + 2;\n      *puVar16 = 0;\n      __dest = __dest + lVar8;\n    } while (iVar15 < local_50);\n  }\nLAB_0014c064:\n  *(undefined1 *)((long)plVar7 + 0x2c) = 0;\n  *(undefined2 *)((long)plVar7 + 0x2d) = param_5;\n  plVar11 = (long *)FUN_0011da30(*(long *)(lVar3 + 0x70) + 0x50,plVar7[2],plVar7);\n  if (plVar11 == plVar7) {\n    if ((*(uint *)(lVar2 + 0x60) & 0xffff00) == 0) {\n      FUN_0011b860(lVar2);\n    }\nLAB_0014bead:\n    FUN_00119e90(lVar2,plVar7);\n  }\n  else {\n    if (plVar11 != (long *)0x0) {\n      plVar7[3] = (long)plVar11;\n      plVar11[4] = (long)plVar7;\n    }\n    *(long **)(lVar3 + 0x20) = plVar7;\n  }\njoined_r0x0014bec0:\n  if (param_2 != (int *)0x0) {\nLAB_0014bec2:\n    FUN_0012cc80(lVar2,param_2);\n  }\n  goto LAB_0014bed1;\n}\n\n" (function_definition "void FUN_0014bc80(long *param_1,int *param_2,undefined8 *param_3,int *param_4,undefined2 param_5)\n\n{\n  byte bVar1;\n  long lVar2;\n  long lVar3;\n  long *plVar4;\n  undefined8 uVar5;\n  int iVar6;\n  long *plVar7;\n  long lVar8;\n  long lVar9;\n  size_t sVar10;\n  ulong __n;\n  long *plVar11;\n  undefined8 *puVar12;\n  byte *pbVar13;\n  void *pvVar14;\n  int iVar15;\n  undefined1 *puVar16;\n  long *plVar17;\n  int iVar18;\n  undefined1 *__dest;\n  int *piVar19;\n  int local_50;\n  \n  lVar2 = *param_1;\n  lVar3 = param_1[0x27];\n  if ((lVar3 == 0) || (*(char *)((long)param_1 + 0x10e) == '\x01')) goto joined_r0x0014bec0;\n  if (param_2 != (int *)0x0) {\n    local_50 = *param_2;\n    if (param_4 == (int *)0x0) {\n      plVar7 = (long *)FUN_0011b8f0(lVar2,(long)(local_50 * 0x10 + 0x41 + *(int *)(param_3 + 1)));\n      if (plVar7 != (long *)0x0) {\n        lVar8 = ((long)local_50 + 4) * 0x10;\n        goto LAB_0014bd94;\n      }\n    }\n    else {\n      iVar6 = *param_4;\n      if (iVar6 == local_50) {\n        iVar15 = iVar6 * 0x10 + 0x41 + *(int *)(param_3 + 1);\n        if (0 < iVar6) goto LAB_0014bd06;\n        goto LAB_0014bd6e;\n      }\n      FUN_0014a9d0(param_1,\n                   "number of columns in foreign key does not match the number of columns in the referenced table"\n                  );\n    }\n    goto LAB_0014bec2;\n  }\n  iVar6 = *(short *)(lVar3 + 0x46) + -1;\n  if (-1 < iVar6) {\n    if (param_4 == (int *)0x0) {\n      plVar7 = (long *)FUN_0011b8f0(lVar2,(long)(*(int *)(param_3 + 1) + 0x51));\n      if (plVar7 == (long *)0x0) {\n        return;\n      }\n      lVar8 = 0x50;\n      local_50 = 1;\n    }\n    else {\n      if (*param_4 != 1) {\n        FUN_0014a9d0(param_1,"foreign key on %s should reference only one column of table %T",\n                     *(undefined8 *)((long)iVar6 * 0x20 + *(long *)(lVar3 + 8)),param_3);\n        goto LAB_0014bed9;\n      }\n      local_50 = 1;\n      iVar15 = *(int *)(param_3 + 1) + 0x51;\n      iVar6 = 1;\nLAB_0014bd06:\n      iVar18 = 0;\n      piVar19 = param_4 + 4;\n      do {\n        while (*(char **)piVar19 != (char *)0x0) {\n          sVar10 = strlen(*(char **)piVar19);\n          iVar18 = iVar18 + 1;\n          piVar19 = piVar19 + 8;\n          iVar15 = iVar15 + ((uint)sVar10 & 0x3fffffff) + 1;\n          if (iVar6 <= iVar18) goto LAB_0014bd6e;\n        }\n        iVar18 = iVar18 + 1;\n        piVar19 = piVar19 + 8;\n        iVar15 = iVar15 + 1;\n      } while (iVar18 < iVar6);\nLAB_0014bd6e:\n      plVar7 = (long *)FUN_0011b8f0(lVar2,(long)iVar15);\n      if (plVar7 == (long *)0x0) goto joined_r0x0014bec0;\n      lVar8 = ((long)local_50 + 4) * 0x10;\n    }\nLAB_0014bd94:\n    *plVar7 = lVar3;\n    lVar9 = *(long *)(lVar3 + 0x20);\n    pvVar14 = (void *)((long)plVar7 + lVar8);\n    plVar7[2] = (long)pvVar14;\n    plVar7[1] = lVar9;\n    if ((1 < *(byte *)((long)param_1 + 0x10e)) &&\n       (puVar12 = (undefined8 *)FUN_0011b8f0(*param_1,0x20), puVar12 != (undefined8 *)0x0)) {\n      *puVar12 = pvVar14;\n      uVar5 = param_3[1];\n      puVar12[1] = *param_3;\n      puVar12[2] = uVar5;\n      puVar12[3] = param_1[0x32];\n      param_1[0x32] = (long)puVar12;\n    }\n    memcpy(pvVar14,(void *)*param_3,(ulong)*(uint *)(param_3 + 1));\n    *(undefined1 *)((long)pvVar14 + (ulong)*(uint *)(param_3 + 1)) = 0;\n    FUN_0010f690(pvVar14);\n    iVar6 = *(int *)(param_3 + 1);\n    *(int *)(plVar7 + 5) = local_50;\n    if (param_2 == (int *)0x0) {\n      *(int *)(plVar7 + 8) = *(short *)(lVar3 + 0x46) + -1;\n      if ((param_4 != (int *)0x0) && (0 < local_50)) goto LAB_0014bf4f;\n    }\n    else {\n      lVar8 = 0x40;\n      if (0 < local_50) {\n        iVar15 = 0;\nLAB_0014be20:\n        pbVar13 = *(byte **)((long)param_2 + lVar8 * 2 + -0x70);\n        if (0 < *(short *)(lVar3 + 0x46)) {\n          puVar12 = *(undefined8 **)(lVar3 + 8);\n          iVar18 = 0;\n          do {\n            bVar1 = *(byte *)*puVar12;\n            if ((&DAT_001f5800)[bVar1] == (&DAT_001f5800)[*pbVar13]) {\n              if (bVar1 == 0) goto LAB_0014bf08;\n              lVar9 = 1;\n              while (bVar1 = ((byte *)*puVar12)[lVar9],\n                    (&DAT_001f5800)[bVar1] == (&DAT_001f5800)[pbVar13[lVar9]]) {\n                lVar9 = lVar9 + 1;\n                if (bVar1 == 0) goto LAB_0014bf08;\n              }\n            }\n            iVar18 = iVar18 + 1;\n            puVar12 = puVar12 + 4;\n            if (iVar18 == *(short *)(lVar3 + 0x46)) break;\n          } while( true );\n        }\n        goto LAB_0014be9c;\n      }\n    }\n    goto LAB_0014c064;\n  }\nLAB_0014bed1:\n  if (param_4 == (int *)0x0) {\n    return;\n  }\nLAB_0014bed9:\n  FUN_0012cc80(lVar2,param_4);\n  return;\nLAB_0014bf08:\n  *(int *)((long)plVar7 + lVar8) = iVar18;\n  if (*(short *)(lVar3 + 0x46) <= iVar18) {\n    pbVar13 = *(byte **)(param_2 + (long)iVar15 * 8 + 4);\nLAB_0014be9c:\n    FUN_0014a9d0(param_1,"unknown column \"%s\" in foreign key definition",pbVar13);\n    goto LAB_0014bead;\n  }\n  if (1 < *(byte *)((long)param_1 + 0x10e)) {\n    for (plVar11 = (long *)param_1[0x32]; plVar11 != (long *)0x0; plVar11 = (long *)plVar11[3]) {\n      if (*(long *)((long)param_2 + lVar8 * 2 + -0x70) == *plVar11) {\n        *plVar11 = (long)plVar7 + lVar8;\n        break;\n      }\n    }\n  }\n  iVar15 = iVar15 + 1;\n  lVar8 = lVar8 + 0x10;\n  if (iVar15 == local_50) goto code_r0x0014bf3e;\n  goto LAB_0014be20;\ncode_r0x0014bf3e:\n  if (param_4 != (int *)0x0) {\nLAB_0014bf4f:\n    plVar17 = plVar7 + 9;\n    plVar11 = (long *)(param_4 + 4);\n    iVar15 = 0;\n    __dest = (undefined1 *)((long)pvVar14 + (ulong)(iVar6 + 1));\n    do {\n      if ((char *)*plVar11 == (char *)0x0) {\n        lVar8 = 1;\n        __n = 0;\n        puVar16 = __dest;\n      }\n      else {\n        sVar10 = strlen((char *)*plVar11);\n        __n = (ulong)((uint)sVar10 & 0x3fffffff);\n        lVar8 = __n + 1;\n        puVar16 = __dest + __n;\n      }\n      *plVar17 = (long)__dest;\n      pvVar14 = (void *)*plVar11;\n      if (1 < *(byte *)((long)param_1 + 0x10e)) {\n        for (plVar4 = (long *)param_1[0x32]; plVar4 != (long *)0x0; plVar4 = (long *)plVar4[3]) {\n          if (pvVar14 == (void *)*plVar4) {\n            *plVar4 = (long)__dest;\n            pvVar14 = (void *)*plVar11;\n            break;\n          }\n        }\n      }\n      iVar15 = iVar15 + 1;\n      plVar11 = plVar11 + 4;\n      memcpy(__dest,pvVar14,__n);\n      plVar17 = plVar17 + 2;\n      *puVar16 = 0;\n      __dest = __dest + lVar8;\n    } while (iVar15 < local_50);\n  }\nLAB_0014c064:\n  *(undefined1 *)((long)plVar7 + 0x2c) = 0;\n  *(undefined2 *)((long)plVar7 + 0x2d) = param_5;\n  plVar11 = (long *)FUN_0011da30(*(long *)(lVar3 + 0x70) + 0x50,plVar7[2],plVar7);\n  if (plVar11 == plVar7) {\n    if ((*(uint *)(lVar2 + 0x60) & 0xffff00) == 0) {\n      FUN_0011b860(lVar2);\n    }\nLAB_0014bead:\n    FUN_00119e90(lVar2,plVar7);\n  }\n  else {\n    if (plVar11 != (long *)0x0) {\n      plVar7[3] = (long)plVar11;\n      plVar11[4] = (long)plVar7;\n    }\n    *(long **)(lVar3 + 0x20) = plVar7;\n  }\njoined_r0x0014bec0:\n  if (param_2 != (int *)0x0) {\nLAB_0014bec2:\n    FUN_0012cc80(lVar2,param_2);\n  }\n  goto LAB_0014bed1;\n}" primitive_type (function_declarator "FUN_0014bc80(long *param_1,int *param_2,undefined8 *param_3,int *param_4,undefined2 param_5)" identifier (parameter_list "(long *param_1,int *param_2,undefined8 *param_3,int *param_4,undefined2 param_5)" ( (parameter_declaration "long *param_1" (sized_type_specifier "long" long) (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "int *param_2" primitive_type (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "undefined8 *param_3" type_identifier (pointer_declarator "*param_3" * identifier)) , (parameter_declaration "int *param_4" primitive_type (pointer_declarator "*param_4" * identifier)) , (parameter_declaration "undefined2 param_5" type_identifier identifier) ))) (compound_statement "{\n  byte bVar1;\n  long lVar2;\n  long lVar3;\n  long *plVar4;\n  undefined8 uVar5;\n  int iVar6;\n  long *plVar7;\n  long lVar8;\n  long lVar9;\n  size_t sVar10;\n  ulong __n;\n  long *plVar11;\n  undefined8 *puVar12;\n  byte *pbVar13;\n  void *pvVar14;\n  int iVar15;\n  undefined1 *puVar16;\n  long *plVar17;\n  int iVar18;\n  undefined1 *__dest;\n  int *piVar19;\n  int local_50;\n  \n  lVar2 = *param_1;\n  lVar3 = param_1[0x27];\n  if ((lVar3 == 0) || (*(char *)((long)param_1 + 0x10e) == '\x01')) goto joined_r0x0014bec0;\n  if (param_2 != (int *)0x0) {\n    local_50 = *param_2;\n    if (param_4 == (int *)0x0) {\n      plVar7 = (long *)FUN_0011b8f0(lVar2,(long)(local_50 * 0x10 + 0x41 + *(int *)(param_3 + 1)));\n      if (plVar7 != (long *)0x0) {\n        lVar8 = ((long)local_50 + 4) * 0x10;\n        goto LAB_0014bd94;\n      }\n    }\n    else {\n      iVar6 = *param_4;\n      if (iVar6 == local_50) {\n        iVar15 = iVar6 * 0x10 + 0x41 + *(int *)(param_3 + 1);\n        if (0 < iVar6) goto LAB_0014bd06;\n        goto LAB_0014bd6e;\n      }\n      FUN_0014a9d0(param_1,\n                   "number of columns in foreign key does not match the number of columns in the referenced table"\n                  );\n    }\n    goto LAB_0014bec2;\n  }\n  iVar6 = *(short *)(lVar3 + 0x46) + -1;\n  if (-1 < iVar6) {\n    if (param_4 == (int *)0x0) {\n      plVar7 = (long *)FUN_0011b8f0(lVar2,(long)(*(int *)(param_3 + 1) + 0x51));\n      if (plVar7 == (long *)0x0) {\n        return;\n      }\n      lVar8 = 0x50;\n      local_50 = 1;\n    }\n    else {\n      if (*param_4 != 1) {\n        FUN_0014a9d0(param_1,"foreign key on %s should reference only one column of table %T",\n                     *(undefined8 *)((long)iVar6 * 0x20 + *(long *)(lVar3 + 8)),param_3);\n        goto LAB_0014bed9;\n      }\n      local_50 = 1;\n      iVar15 = *(int *)(param_3 + 1) + 0x51;\n      iVar6 = 1;\nLAB_0014bd06:\n      iVar18 = 0;\n      piVar19 = param_4 + 4;\n      do {\n        while (*(char **)piVar19 != (char *)0x0) {\n          sVar10 = strlen(*(char **)piVar19);\n          iVar18 = iVar18 + 1;\n          piVar19 = piVar19 + 8;\n          iVar15 = iVar15 + ((uint)sVar10 & 0x3fffffff) + 1;\n          if (iVar6 <= iVar18) goto LAB_0014bd6e;\n        }\n        iVar18 = iVar18 + 1;\n        piVar19 = piVar19 + 8;\n        iVar15 = iVar15 + 1;\n      } while (iVar18 < iVar6);\nLAB_0014bd6e:\n      plVar7 = (long *)FUN_0011b8f0(lVar2,(long)iVar15);\n      if (plVar7 == (long *)0x0) goto joined_r0x0014bec0;\n      lVar8 = ((long)local_50 + 4) * 0x10;\n    }\nLAB_0014bd94:\n    *plVar7 = lVar3;\n    lVar9 = *(long *)(lVar3 + 0x20);\n    pvVar14 = (void *)((long)plVar7 + lVar8);\n    plVar7[2] = (long)pvVar14;\n    plVar7[1] = lVar9;\n    if ((1 < *(byte *)((long)param_1 + 0x10e)) &&\n       (puVar12 = (undefined8 *)FUN_0011b8f0(*param_1,0x20), puVar12 != (undefined8 *)0x0)) {\n      *puVar12 = pvVar14;\n      uVar5 = param_3[1];\n      puVar12[1] = *param_3;\n      puVar12[2] = uVar5;\n      puVar12[3] = param_1[0x32];\n      param_1[0x32] = (long)puVar12;\n    }\n    memcpy(pvVar14,(void *)*param_3,(ulong)*(uint *)(param_3 + 1));\n    *(undefined1 *)((long)pvVar14 + (ulong)*(uint *)(param_3 + 1)) = 0;\n    FUN_0010f690(pvVar14);\n    iVar6 = *(int *)(param_3 + 1);\n    *(int *)(plVar7 + 5) = local_50;\n    if (param_2 == (int *)0x0) {\n      *(int *)(plVar7 + 8) = *(short *)(lVar3 + 0x46) + -1;\n      if ((param_4 != (int *)0x0) && (0 < local_50)) goto LAB_0014bf4f;\n    }\n    else {\n      lVar8 = 0x40;\n      if (0 < local_50) {\n        iVar15 = 0;\nLAB_0014be20:\n        pbVar13 = *(byte **)((long)param_2 + lVar8 * 2 + -0x70);\n        if (0 < *(short *)(lVar3 + 0x46)) {\n          puVar12 = *(undefined8 **)(lVar3 + 8);\n          iVar18 = 0;\n          do {\n            bVar1 = *(byte *)*puVar12;\n            if ((&DAT_001f5800)[bVar1] == (&DAT_001f5800)[*pbVar13]) {\n              if (bVar1 == 0) goto LAB_0014bf08;\n              lVar9 = 1;\n              while (bVar1 = ((byte *)*puVar12)[lVar9],\n                    (&DAT_001f5800)[bVar1] == (&DAT_001f5800)[pbVar13[lVar9]]) {\n                lVar9 = lVar9 + 1;\n                if (bVar1 == 0) goto LAB_0014bf08;\n              }\n            }\n            iVar18 = iVar18 + 1;\n            puVar12 = puVar12 + 4;\n            if (iVar18 == *(short *)(lVar3 + 0x46)) break;\n          } while( true );\n        }\n        goto LAB_0014be9c;\n      }\n    }\n    goto LAB_0014c064;\n  }\nLAB_0014bed1:\n  if (param_4 == (int *)0x0) {\n    return;\n  }\nLAB_0014bed9:\n  FUN_0012cc80(lVar2,param_4);\n  return;\nLAB_0014bf08:\n  *(int *)((long)plVar7 + lVar8) = iVar18;\n  if (*(short *)(lVar3 + 0x46) <= iVar18) {\n    pbVar13 = *(byte **)(param_2 + (long)iVar15 * 8 + 4);\nLAB_0014be9c:\n    FUN_0014a9d0(param_1,"unknown column \"%s\" in foreign key definition",pbVar13);\n    goto LAB_0014bead;\n  }\n  if (1 < *(byte *)((long)param_1 + 0x10e)) {\n    for (plVar11 = (long *)param_1[0x32]; plVar11 != (long *)0x0; plVar11 = (long *)plVar11[3]) {\n      if (*(long *)((long)param_2 + lVar8 * 2 + -0x70) == *plVar11) {\n        *plVar11 = (long)plVar7 + lVar8;\n        break;\n      }\n    }\n  }\n  iVar15 = iVar15 + 1;\n  lVar8 = lVar8 + 0x10;\n  if (iVar15 == local_50) goto code_r0x0014bf3e;\n  goto LAB_0014be20;\ncode_r0x0014bf3e:\n  if (param_4 != (int *)0x0) {\nLAB_0014bf4f:\n    plVar17 = plVar7 + 9;\n    plVar11 = (long *)(param_4 + 4);\n    iVar15 = 0;\n    __dest = (undefined1 *)((long)pvVar14 + (ulong)(iVar6 + 1));\n    do {\n      if ((char *)*plVar11 == (char *)0x0) {\n        lVar8 = 1;\n        __n = 0;\n        puVar16 = __dest;\n      }\n      else {\n        sVar10 = strlen((char *)*plVar11);\n        __n = (ulong)((uint)sVar10 & 0x3fffffff);\n        lVar8 = __n + 1;\n        puVar16 = __dest + __n;\n      }\n      *plVar17 = (long)__dest;\n      pvVar14 = (void *)*plVar11;\n      if (1 < *(byte *)((long)param_1 + 0x10e)) {\n        for (plVar4 = (long *)param_1[0x32]; plVar4 != (long *)0x0; plVar4 = (long *)plVar4[3]) {\n          if (pvVar14 == (void *)*plVar4) {\n            *plVar4 = (long)__dest;\n            pvVar14 = (void *)*plVar11;\n            break;\n          }\n        }\n      }\n      iVar15 = iVar15 + 1;\n      plVar11 = plVar11 + 4;\n      memcpy(__dest,pvVar14,__n);\n      plVar17 = plVar17 + 2;\n      *puVar16 = 0;\n      __dest = __dest + lVar8;\n    } while (iVar15 < local_50);\n  }\nLAB_0014c064:\n  *(undefined1 *)((long)plVar7 + 0x2c) = 0;\n  *(undefined2 *)((long)plVar7 + 0x2d) = param_5;\n  plVar11 = (long *)FUN_0011da30(*(long *)(lVar3 + 0x70) + 0x50,plVar7[2],plVar7);\n  if (plVar11 == plVar7) {\n    if ((*(uint *)(lVar2 + 0x60) & 0xffff00) == 0) {\n      FUN_0011b860(lVar2);\n    }\nLAB_0014bead:\n    FUN_00119e90(lVar2,plVar7);\n  }\n  else {\n    if (plVar11 != (long *)0x0) {\n      plVar7[3] = (long)plVar11;\n      plVar11[4] = (long)plVar7;\n    }\n    *(long **)(lVar3 + 0x20) = plVar7;\n  }\njoined_r0x0014bec0:\n  if (param_2 != (int *)0x0) {\nLAB_0014bec2:\n    FUN_0012cc80(lVar2,param_2);\n  }\n  goto LAB_0014bed1;\n}" { (declaration "byte bVar1;" type_identifier identifier ;) (declaration "long lVar2;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar3;" (sized_type_specifier "long" long) identifier ;) (declaration "long *plVar4;" (sized_type_specifier "long" long) (pointer_declarator "*plVar4" * identifier) ;) (declaration "undefined8 uVar5;" type_identifier identifier ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "long *plVar7;" (sized_type_specifier "long" long) (pointer_declarator "*plVar7" * identifier) ;) (declaration "long lVar8;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar9;" (sized_type_specifier "long" long) identifier ;) (declaration "size_t sVar10;" primitive_type identifier ;) (declaration "ulong __n;" type_identifier identifier ;) (declaration "long *plVar11;" (sized_type_specifier "long" long) (pointer_declarator "*plVar11" * identifier) ;) (declaration "undefined8 *puVar12;" type_identifier (pointer_declarator "*puVar12" * identifier) ;) (declaration "byte *pbVar13;" type_identifier (pointer_declarator "*pbVar13" * identifier) ;) (declaration "void *pvVar14;" primitive_type (pointer_declarator "*pvVar14" * identifier) ;) (declaration "int iVar15;" primitive_type identifier ;) (declaration "undefined1 *puVar16;" type_identifier (pointer_declarator "*puVar16" * identifier) ;) (declaration "long *plVar17;" (sized_type_specifier "long" long) (pointer_declarator "*plVar17" * identifier) ;) (declaration "int iVar18;" primitive_type identifier ;) (declaration "undefined1 *__dest;" type_identifier (pointer_declarator "*__dest" * identifier) ;) (declaration "int *piVar19;" primitive_type (pointer_declarator "*piVar19" * identifier) ;) (declaration "int local_50;" primitive_type identifier ;) (expression_statement "lVar2 = *param_1;" (assignment_expression "lVar2 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (expression_statement "lVar3 = param_1[0x27];" (assignment_expression "lVar3 = param_1[0x27]" identifier = (subscript_expression "param_1[0x27]" identifier [ number_literal ])) ;) (if_statement "if ((lVar3 == 0) || (*(char *)((long)param_1 + 0x10e) == '\x01')) goto joined_r0x0014bec0;" if (parenthesized_expression "((lVar3 == 0) || (*(char *)((long)param_1 + 0x10e) == '\x01'))" ( (binary_expression "(lVar3 == 0) || (*(char *)((long)param_1 + 0x10e) == '\x01')" (parenthesized_expression "(lVar3 == 0)" ( (binary_expression "lVar3 == 0" identifier == number_literal) )) || (parenthesized_expression "(*(char *)((long)param_1 + 0x10e) == '\x01')" ( (binary_expression "*(char *)((long)param_1 + 0x10e) == '\x01'" (pointer_expression "*(char *)((long)param_1 + 0x10e)" * (cast_expression "(char *)((long)param_1 + 0x10e)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_1 + 0x10e)" ( (binary_expression "(long)param_1 + 0x10e" (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) == (char_literal "'\x01'" ' escape_sequence ')) ))) )) (goto_statement "goto joined_r0x0014bec0;" goto statement_identifier ;)) (if_statement "if (param_2 != (int *)0x0) {\n    local_50 = *param_2;\n    if (param_4 == (int *)0x0) {\n      plVar7 = (long *)FUN_0011b8f0(lVar2,(long)(local_50 * 0x10 + 0x41 + *(int *)(param_3 + 1)));\n      if (plVar7 != (long *)0x0) {\n        lVar8 = ((long)local_50 + 4) * 0x10;\n        goto LAB_0014bd94;\n      }\n    }\n    else {\n      iVar6 = *param_4;\n      if (iVar6 == local_50) {\n        iVar15 = iVar6 * 0x10 + 0x41 + *(int *)(param_3 + 1);\n        if (0 < iVar6) goto LAB_0014bd06;\n        goto LAB_0014bd6e;\n      }\n      FUN_0014a9d0(param_1,\n                   "number of columns in foreign key does not match the number of columns in the referenced table"\n                  );\n    }\n    goto LAB_0014bec2;\n  }" if (parenthesized_expression "(param_2 != (int *)0x0)" ( (binary_expression "param_2 != (int *)0x0" identifier != (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    local_50 = *param_2;\n    if (param_4 == (int *)0x0) {\n      plVar7 = (long *)FUN_0011b8f0(lVar2,(long)(local_50 * 0x10 + 0x41 + *(int *)(param_3 + 1)));\n      if (plVar7 != (long *)0x0) {\n        lVar8 = ((long)local_50 + 4) * 0x10;\n        goto LAB_0014bd94;\n      }\n    }\n    else {\n      iVar6 = *param_4;\n      if (iVar6 == local_50) {\n        iVar15 = iVar6 * 0x10 + 0x41 + *(int *)(param_3 + 1);\n        if (0 < iVar6) goto LAB_0014bd06;\n        goto LAB_0014bd6e;\n      }\n      FUN_0014a9d0(param_1,\n                   "number of columns in foreign key does not match the number of columns in the referenced table"\n                  );\n    }\n    goto LAB_0014bec2;\n  }" { (expression_statement "local_50 = *param_2;" (assignment_expression "local_50 = *param_2" identifier = (pointer_expression "*param_2" * identifier)) ;) (if_statement "if (param_4 == (int *)0x0) {\n      plVar7 = (long *)FUN_0011b8f0(lVar2,(long)(local_50 * 0x10 + 0x41 + *(int *)(param_3 + 1)));\n      if (plVar7 != (long *)0x0) {\n        lVar8 = ((long)local_50 + 4) * 0x10;\n        goto LAB_0014bd94;\n      }\n    }\n    else {\n      iVar6 = *param_4;\n      if (iVar6 == local_50) {\n        iVar15 = iVar6 * 0x10 + 0x41 + *(int *)(param_3 + 1);\n        if (0 < iVar6) goto LAB_0014bd06;\n        goto LAB_0014bd6e;\n      }\n      FUN_0014a9d0(param_1,\n                   "number of columns in foreign key does not match the number of columns in the referenced table"\n                  );\n    }" if (parenthesized_expression "(param_4 == (int *)0x0)" ( (binary_expression "param_4 == (int *)0x0" identifier == (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      plVar7 = (long *)FUN_0011b8f0(lVar2,(long)(local_50 * 0x10 + 0x41 + *(int *)(param_3 + 1)));\n      if (plVar7 != (long *)0x0) {\n        lVar8 = ((long)local_50 + 4) * 0x10;\n        goto LAB_0014bd94;\n      }\n    }" { (expression_statement "plVar7 = (long *)FUN_0011b8f0(lVar2,(long)(local_50 * 0x10 + 0x41 + *(int *)(param_3 + 1)));" (assignment_expression "plVar7 = (long *)FUN_0011b8f0(lVar2,(long)(local_50 * 0x10 + 0x41 + *(int *)(param_3 + 1)))" identifier = (cast_expression "(long *)FUN_0011b8f0(lVar2,(long)(local_50 * 0x10 + 0x41 + *(int *)(param_3 + 1)))" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_0011b8f0(lVar2,(long)(local_50 * 0x10 + 0x41 + *(int *)(param_3 + 1)))" identifier (argument_list "(lVar2,(long)(local_50 * 0x10 + 0x41 + *(int *)(param_3 + 1)))" ( identifier , (cast_expression "(long)(local_50 * 0x10 + 0x41 + *(int *)(param_3 + 1))" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (parenthesized_expression "(local_50 * 0x10 + 0x41 + *(int *)(param_3 + 1))" ( (binary_expression "local_50 * 0x10 + 0x41 + *(int *)(param_3 + 1)" (binary_expression "local_50 * 0x10 + 0x41" (binary_expression "local_50 * 0x10" identifier * number_literal) + number_literal) + (pointer_expression "*(int *)(param_3 + 1)" * (cast_expression "(int *)(param_3 + 1)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 1)" ( (binary_expression "param_3 + 1" identifier + number_literal) ))))) ))) ))))) ;) (if_statement "if (plVar7 != (long *)0x0) {\n        lVar8 = ((long)local_50 + 4) * 0x10;\n        goto LAB_0014bd94;\n      }" if (parenthesized_expression "(plVar7 != (long *)0x0)" ( (binary_expression "plVar7 != (long *)0x0" identifier != (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        lVar8 = ((long)local_50 + 4) * 0x10;\n        goto LAB_0014bd94;\n      }" { (expression_statement "lVar8 = ((long)local_50 + 4) * 0x10;" (assignment_expression "lVar8 = ((long)local_50 + 4) * 0x10" identifier = (binary_expression "((long)local_50 + 4) * 0x10" (parenthesized_expression "((long)local_50 + 4)" ( (binary_expression "(long)local_50 + 4" (cast_expression "(long)local_50" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )) * number_literal)) ;) (goto_statement "goto LAB_0014bd94;" goto statement_identifier ;) })) }) (else_clause "else {\n      iVar6 = *param_4;\n      if (iVar6 == local_50) {\n        iVar15 = iVar6 * 0x10 + 0x41 + *(int *)(param_3 + 1);\n        if (0 < iVar6) goto LAB_0014bd06;\n        goto LAB_0014bd6e;\n      }\n      FUN_0014a9d0(param_1,\n                   "number of columns in foreign key does not match the number of columns in the referenced table"\n                  );\n    }" else (compound_statement "{\n      iVar6 = *param_4;\n      if (iVar6 == local_50) {\n        iVar15 = iVar6 * 0x10 + 0x41 + *(int *)(param_3 + 1);\n        if (0 < iVar6) goto LAB_0014bd06;\n        goto LAB_0014bd6e;\n      }\n      FUN_0014a9d0(param_1,\n                   "number of columns in foreign key does not match the number of columns in the referenced table"\n                  );\n    }" { (expression_statement "iVar6 = *param_4;" (assignment_expression "iVar6 = *param_4" identifier = (pointer_expression "*param_4" * identifier)) ;) (if_statement "if (iVar6 == local_50) {\n        iVar15 = iVar6 * 0x10 + 0x41 + *(int *)(param_3 + 1);\n        if (0 < iVar6) goto LAB_0014bd06;\n        goto LAB_0014bd6e;\n      }" if (parenthesized_expression "(iVar6 == local_50)" ( (binary_expression "iVar6 == local_50" identifier == identifier) )) (compound_statement "{\n        iVar15 = iVar6 * 0x10 + 0x41 + *(int *)(param_3 + 1);\n        if (0 < iVar6) goto LAB_0014bd06;\n        goto LAB_0014bd6e;\n      }" { (expression_statement "iVar15 = iVar6 * 0x10 + 0x41 + *(int *)(param_3 + 1);" (assignment_expression "iVar15 = iVar6 * 0x10 + 0x41 + *(int *)(param_3 + 1)" identifier = (binary_expression "iVar6 * 0x10 + 0x41 + *(int *)(param_3 + 1)" (binary_expression "iVar6 * 0x10 + 0x41" (binary_expression "iVar6 * 0x10" identifier * number_literal) + number_literal) + (pointer_expression "*(int *)(param_3 + 1)" * (cast_expression "(int *)(param_3 + 1)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 1)" ( (binary_expression "param_3 + 1" identifier + number_literal) )))))) ;) (if_statement "if (0 < iVar6) goto LAB_0014bd06;" if (parenthesized_expression "(0 < iVar6)" ( (binary_expression "0 < iVar6" number_literal < identifier) )) (goto_statement "goto LAB_0014bd06;" goto statement_identifier ;)) (goto_statement "goto LAB_0014bd6e;" goto statement_identifier ;) })) (expression_statement "FUN_0014a9d0(param_1,\n                   "number of columns in foreign key does not match the number of columns in the referenced table"\n                  );" (call_expression "FUN_0014a9d0(param_1,\n                   "number of columns in foreign key does not match the number of columns in the referenced table"\n                  )" identifier (argument_list "(param_1,\n                   "number of columns in foreign key does not match the number of columns in the referenced table"\n                  )" ( identifier , (string_literal ""number of columns in foreign key does not match the number of columns in the referenced table"" " string_content ") ))) ;) }))) (goto_statement "goto LAB_0014bec2;" goto statement_identifier ;) })) (expression_statement "iVar6 = *(short *)(lVar3 + 0x46) + -1;" (assignment_expression "iVar6 = *(short *)(lVar3 + 0x46) + -1" identifier = (binary_expression "*(short *)(lVar3 + 0x46) + -1" (pointer_expression "*(short *)(lVar3 + 0x46)" * (cast_expression "(short *)(lVar3 + 0x46)" ( (type_descriptor "short *" (sized_type_specifier "short" short) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar3 + 0x46)" ( (binary_expression "lVar3 + 0x46" identifier + number_literal) )))) + number_literal)) ;) (if_statement "if (-1 < iVar6) {\n    if (param_4 == (int *)0x0) {\n      plVar7 = (long *)FUN_0011b8f0(lVar2,(long)(*(int *)(param_3 + 1) + 0x51));\n      if (plVar7 == (long *)0x0) {\n        return;\n      }\n      lVar8 = 0x50;\n      local_50 = 1;\n    }\n    else {\n      if (*param_4 != 1) {\n        FUN_0014a9d0(param_1,"foreign key on %s should reference only one column of table %T",\n                     *(undefined8 *)((long)iVar6 * 0x20 + *(long *)(lVar3 + 8)),param_3);\n        goto LAB_0014bed9;\n      }\n      local_50 = 1;\n      iVar15 = *(int *)(param_3 + 1) + 0x51;\n      iVar6 = 1;\nLAB_0014bd06:\n      iVar18 = 0;\n      piVar19 = param_4 + 4;\n      do {\n        while (*(char **)piVar19 != (char *)0x0) {\n          sVar10 = strlen(*(char **)piVar19);\n          iVar18 = iVar18 + 1;\n          piVar19 = piVar19 + 8;\n          iVar15 = iVar15 + ((uint)sVar10 & 0x3fffffff) + 1;\n          if (iVar6 <= iVar18) goto LAB_0014bd6e;\n        }\n        iVar18 = iVar18 + 1;\n        piVar19 = piVar19 + 8;\n        iVar15 = iVar15 + 1;\n      } while (iVar18 < iVar6);\nLAB_0014bd6e:\n      plVar7 = (long *)FUN_0011b8f0(lVar2,(long)iVar15);\n      if (plVar7 == (long *)0x0) goto joined_r0x0014bec0;\n      lVar8 = ((long)local_50 + 4) * 0x10;\n    }\nLAB_0014bd94:\n    *plVar7 = lVar3;\n    lVar9 = *(long *)(lVar3 + 0x20);\n    pvVar14 = (void *)((long)plVar7 + lVar8);\n    plVar7[2] = (long)pvVar14;\n    plVar7[1] = lVar9;\n    if ((1 < *(byte *)((long)param_1 + 0x10e)) &&\n       (puVar12 = (undefined8 *)FUN_0011b8f0(*param_1,0x20), puVar12 != (undefined8 *)0x0)) {\n      *puVar12 = pvVar14;\n      uVar5 = param_3[1];\n      puVar12[1] = *param_3;\n      puVar12[2] = uVar5;\n      puVar12[3] = param_1[0x32];\n      param_1[0x32] = (long)puVar12;\n    }\n    memcpy(pvVar14,(void *)*param_3,(ulong)*(uint *)(param_3 + 1));\n    *(undefined1 *)((long)pvVar14 + (ulong)*(uint *)(param_3 + 1)) = 0;\n    FUN_0010f690(pvVar14);\n    iVar6 = *(int *)(param_3 + 1);\n    *(int *)(plVar7 + 5) = local_50;\n    if (param_2 == (int *)0x0) {\n      *(int *)(plVar7 + 8) = *(short *)(lVar3 + 0x46) + -1;\n      if ((param_4 != (int *)0x0) && (0 < local_50)) goto LAB_0014bf4f;\n    }\n    else {\n      lVar8 = 0x40;\n      if (0 < local_50) {\n        iVar15 = 0;\nLAB_0014be20:\n        pbVar13 = *(byte **)((long)param_2 + lVar8 * 2 + -0x70);\n        if (0 < *(short *)(lVar3 + 0x46)) {\n          puVar12 = *(undefined8 **)(lVar3 + 8);\n          iVar18 = 0;\n          do {\n            bVar1 = *(byte *)*puVar12;\n            if ((&DAT_001f5800)[bVar1] == (&DAT_001f5800)[*pbVar13]) {\n              if (bVar1 == 0) goto LAB_0014bf08;\n              lVar9 = 1;\n              while (bVar1 = ((byte *)*puVar12)[lVar9],\n                    (&DAT_001f5800)[bVar1] == (&DAT_001f5800)[pbVar13[lVar9]]) {\n                lVar9 = lVar9 + 1;\n                if (bVar1 == 0) goto LAB_0014bf08;\n              }\n            }\n            iVar18 = iVar18 + 1;\n            puVar12 = puVar12 + 4;\n            if (iVar18 == *(short *)(lVar3 + 0x46)) break;\n          } while( true );\n        }\n        goto LAB_0014be9c;\n      }\n    }\n    goto LAB_0014c064;\n  }" if (parenthesized_expression "(-1 < iVar6)" ( (binary_expression "-1 < iVar6" number_literal < identifier) )) (compound_statement "{\n    if (param_4 == (int *)0x0) {\n      plVar7 = (long *)FUN_0011b8f0(lVar2,(long)(*(int *)(param_3 + 1) + 0x51));\n      if (plVar7 == (long *)0x0) {\n        return;\n      }\n      lVar8 = 0x50;\n      local_50 = 1;\n    }\n    else {\n      if (*param_4 != 1) {\n        FUN_0014a9d0(param_1,"foreign key on %s should reference only one column of table %T",\n                     *(undefined8 *)((long)iVar6 * 0x20 + *(long *)(lVar3 + 8)),param_3);\n        goto LAB_0014bed9;\n      }\n      local_50 = 1;\n      iVar15 = *(int *)(param_3 + 1) + 0x51;\n      iVar6 = 1;\nLAB_0014bd06:\n      iVar18 = 0;\n      piVar19 = param_4 + 4;\n      do {\n        while (*(char **)piVar19 != (char *)0x0) {\n          sVar10 = strlen(*(char **)piVar19);\n          iVar18 = iVar18 + 1;\n          piVar19 = piVar19 + 8;\n          iVar15 = iVar15 + ((uint)sVar10 & 0x3fffffff) + 1;\n          if (iVar6 <= iVar18) goto LAB_0014bd6e;\n        }\n        iVar18 = iVar18 + 1;\n        piVar19 = piVar19 + 8;\n        iVar15 = iVar15 + 1;\n      } while (iVar18 < iVar6);\nLAB_0014bd6e:\n      plVar7 = (long *)FUN_0011b8f0(lVar2,(long)iVar15);\n      if (plVar7 == (long *)0x0) goto joined_r0x0014bec0;\n      lVar8 = ((long)local_50 + 4) * 0x10;\n    }\nLAB_0014bd94:\n    *plVar7 = lVar3;\n    lVar9 = *(long *)(lVar3 + 0x20);\n    pvVar14 = (void *)((long)plVar7 + lVar8);\n    plVar7[2] = (long)pvVar14;\n    plVar7[1] = lVar9;\n    if ((1 < *(byte *)((long)param_1 + 0x10e)) &&\n       (puVar12 = (undefined8 *)FUN_0011b8f0(*param_1,0x20), puVar12 != (undefined8 *)0x0)) {\n      *puVar12 = pvVar14;\n      uVar5 = param_3[1];\n      puVar12[1] = *param_3;\n      puVar12[2] = uVar5;\n      puVar12[3] = param_1[0x32];\n      param_1[0x32] = (long)puVar12;\n    }\n    memcpy(pvVar14,(void *)*param_3,(ulong)*(uint *)(param_3 + 1));\n    *(undefined1 *)((long)pvVar14 + (ulong)*(uint *)(param_3 + 1)) = 0;\n    FUN_0010f690(pvVar14);\n    iVar6 = *(int *)(param_3 + 1);\n    *(int *)(plVar7 + 5) = local_50;\n    if (param_2 == (int *)0x0) {\n      *(int *)(plVar7 + 8) = *(short *)(lVar3 + 0x46) + -1;\n      if ((param_4 != (int *)0x0) && (0 < local_50)) goto LAB_0014bf4f;\n    }\n    else {\n      lVar8 = 0x40;\n      if (0 < local_50) {\n        iVar15 = 0;\nLAB_0014be20:\n        pbVar13 = *(byte **)((long)param_2 + lVar8 * 2 + -0x70);\n        if (0 < *(short *)(lVar3 + 0x46)) {\n          puVar12 = *(undefined8 **)(lVar3 + 8);\n          iVar18 = 0;\n          do {\n            bVar1 = *(byte *)*puVar12;\n            if ((&DAT_001f5800)[bVar1] == (&DAT_001f5800)[*pbVar13]) {\n              if (bVar1 == 0) goto LAB_0014bf08;\n              lVar9 = 1;\n              while (bVar1 = ((byte *)*puVar12)[lVar9],\n                    (&DAT_001f5800)[bVar1] == (&DAT_001f5800)[pbVar13[lVar9]]) {\n                lVar9 = lVar9 + 1;\n                if (bVar1 == 0) goto LAB_0014bf08;\n              }\n            }\n            iVar18 = iVar18 + 1;\n            puVar12 = puVar12 + 4;\n            if (iVar18 == *(short *)(lVar3 + 0x46)) break;\n          } while( true );\n        }\n        goto LAB_0014be9c;\n      }\n    }\n    goto LAB_0014c064;\n  }" { (if_statement "if (param_4 == (int *)0x0) {\n      plVar7 = (long *)FUN_0011b8f0(lVar2,(long)(*(int *)(param_3 + 1) + 0x51));\n      if (plVar7 == (long *)0x0) {\n        return;\n      }\n      lVar8 = 0x50;\n      local_50 = 1;\n    }\n    else {\n      if (*param_4 != 1) {\n        FUN_0014a9d0(param_1,"foreign key on %s should reference only one column of table %T",\n                     *(undefined8 *)((long)iVar6 * 0x20 + *(long *)(lVar3 + 8)),param_3);\n        goto LAB_0014bed9;\n      }\n      local_50 = 1;\n      iVar15 = *(int *)(param_3 + 1) + 0x51;\n      iVar6 = 1;\nLAB_0014bd06:\n      iVar18 = 0;\n      piVar19 = param_4 + 4;\n      do {\n        while (*(char **)piVar19 != (char *)0x0) {\n          sVar10 = strlen(*(char **)piVar19);\n          iVar18 = iVar18 + 1;\n          piVar19 = piVar19 + 8;\n          iVar15 = iVar15 + ((uint)sVar10 & 0x3fffffff) + 1;\n          if (iVar6 <= iVar18) goto LAB_0014bd6e;\n        }\n        iVar18 = iVar18 + 1;\n        piVar19 = piVar19 + 8;\n        iVar15 = iVar15 + 1;\n      } while (iVar18 < iVar6);\nLAB_0014bd6e:\n      plVar7 = (long *)FUN_0011b8f0(lVar2,(long)iVar15);\n      if (plVar7 == (long *)0x0) goto joined_r0x0014bec0;\n      lVar8 = ((long)local_50 + 4) * 0x10;\n    }" if (parenthesized_expression "(param_4 == (int *)0x0)" ( (binary_expression "param_4 == (int *)0x0" identifier == (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      plVar7 = (long *)FUN_0011b8f0(lVar2,(long)(*(int *)(param_3 + 1) + 0x51));\n      if (plVar7 == (long *)0x0) {\n        return;\n      }\n      lVar8 = 0x50;\n      local_50 = 1;\n    }" { (expression_statement "plVar7 = (long *)FUN_0011b8f0(lVar2,(long)(*(int *)(param_3 + 1) + 0x51));" (assignment_expression "plVar7 = (long *)FUN_0011b8f0(lVar2,(long)(*(int *)(param_3 + 1) + 0x51))" identifier = (cast_expression "(long *)FUN_0011b8f0(lVar2,(long)(*(int *)(param_3 + 1) + 0x51))" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_0011b8f0(lVar2,(long)(*(int *)(param_3 + 1) + 0x51))" identifier (argument_list "(lVar2,(long)(*(int *)(param_3 + 1) + 0x51))" ( identifier , (cast_expression "(long)(*(int *)(param_3 + 1) + 0x51)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (parenthesized_expression "(*(int *)(param_3 + 1) + 0x51)" ( (binary_expression "*(int *)(param_3 + 1) + 0x51" (pointer_expression "*(int *)(param_3 + 1)" * (cast_expression "(int *)(param_3 + 1)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 1)" ( (binary_expression "param_3 + 1" identifier + number_literal) )))) + number_literal) ))) ))))) ;) (if_statement "if (plVar7 == (long *)0x0) {\n        return;\n      }" if (parenthesized_expression "(plVar7 == (long *)0x0)" ( (binary_expression "plVar7 == (long *)0x0" identifier == (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        return;\n      }" { (return_statement "return;" return ;) })) (expression_statement "lVar8 = 0x50;" (assignment_expression "lVar8 = 0x50" identifier = number_literal) ;) (expression_statement "local_50 = 1;" (assignment_expression "local_50 = 1" identifier = number_literal) ;) }) (else_clause "else {\n      if (*param_4 != 1) {\n        FUN_0014a9d0(param_1,"foreign key on %s should reference only one column of table %T",\n                     *(undefined8 *)((long)iVar6 * 0x20 + *(long *)(lVar3 + 8)),param_3);\n        goto LAB_0014bed9;\n      }\n      local_50 = 1;\n      iVar15 = *(int *)(param_3 + 1) + 0x51;\n      iVar6 = 1;\nLAB_0014bd06:\n      iVar18 = 0;\n      piVar19 = param_4 + 4;\n      do {\n        while (*(char **)piVar19 != (char *)0x0) {\n          sVar10 = strlen(*(char **)piVar19);\n          iVar18 = iVar18 + 1;\n          piVar19 = piVar19 + 8;\n          iVar15 = iVar15 + ((uint)sVar10 & 0x3fffffff) + 1;\n          if (iVar6 <= iVar18) goto LAB_0014bd6e;\n        }\n        iVar18 = iVar18 + 1;\n        piVar19 = piVar19 + 8;\n        iVar15 = iVar15 + 1;\n      } while (iVar18 < iVar6);\nLAB_0014bd6e:\n      plVar7 = (long *)FUN_0011b8f0(lVar2,(long)iVar15);\n      if (plVar7 == (long *)0x0) goto joined_r0x0014bec0;\n      lVar8 = ((long)local_50 + 4) * 0x10;\n    }" else (compound_statement "{\n      if (*param_4 != 1) {\n        FUN_0014a9d0(param_1,"foreign key on %s should reference only one column of table %T",\n                     *(undefined8 *)((long)iVar6 * 0x20 + *(long *)(lVar3 + 8)),param_3);\n        goto LAB_0014bed9;\n      }\n      local_50 = 1;\n      iVar15 = *(int *)(param_3 + 1) + 0x51;\n      iVar6 = 1;\nLAB_0014bd06:\n      iVar18 = 0;\n      piVar19 = param_4 + 4;\n      do {\n        while (*(char **)piVar19 != (char *)0x0) {\n          sVar10 = strlen(*(char **)piVar19);\n          iVar18 = iVar18 + 1;\n          piVar19 = piVar19 + 8;\n          iVar15 = iVar15 + ((uint)sVar10 & 0x3fffffff) + 1;\n          if (iVar6 <= iVar18) goto LAB_0014bd6e;\n        }\n        iVar18 = iVar18 + 1;\n        piVar19 = piVar19 + 8;\n        iVar15 = iVar15 + 1;\n      } while (iVar18 < iVar6);\nLAB_0014bd6e:\n      plVar7 = (long *)FUN_0011b8f0(lVar2,(long)iVar15);\n      if (plVar7 == (long *)0x0) goto joined_r0x0014bec0;\n      lVar8 = ((long)local_50 + 4) * 0x10;\n    }" { (if_statement "if (*param_4 != 1) {\n        FUN_0014a9d0(param_1,"foreign key on %s should reference only one column of table %T",\n                     *(undefined8 *)((long)iVar6 * 0x20 + *(long *)(lVar3 + 8)),param_3);\n        goto LAB_0014bed9;\n      }" if (parenthesized_expression "(*param_4 != 1)" ( (binary_expression "*param_4 != 1" (pointer_expression "*param_4" * identifier) != number_literal) )) (compound_statement "{\n        FUN_0014a9d0(param_1,"foreign key on %s should reference only one column of table %T",\n                     *(undefined8 *)((long)iVar6 * 0x20 + *(long *)(lVar3 + 8)),param_3);\n        goto LAB_0014bed9;\n      }" { (expression_statement "FUN_0014a9d0(param_1,"foreign key on %s should reference only one column of table %T",\n                     *(undefined8 *)((long)iVar6 * 0x20 + *(long *)(lVar3 + 8)),param_3);" (call_expression "FUN_0014a9d0(param_1,"foreign key on %s should reference only one column of table %T",\n                     *(undefined8 *)((long)iVar6 * 0x20 + *(long *)(lVar3 + 8)),param_3)" identifier (argument_list "(param_1,"foreign key on %s should reference only one column of table %T",\n                     *(undefined8 *)((long)iVar6 * 0x20 + *(long *)(lVar3 + 8)),param_3)" ( identifier , (string_literal ""foreign key on %s should reference only one column of table %T"" " string_content ") , (pointer_expression "*(undefined8 *)((long)iVar6 * 0x20 + *(long *)(lVar3 + 8))" * (cast_expression "(undefined8 *)((long)iVar6 * 0x20 + *(long *)(lVar3 + 8))" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)iVar6 * 0x20 + *(long *)(lVar3 + 8))" ( (binary_expression "(long)iVar6 * 0x20 + *(long *)(lVar3 + 8)" (binary_expression "(long)iVar6 * 0x20" (cast_expression "(long)iVar6" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) * number_literal) + (pointer_expression "*(long *)(lVar3 + 8)" * (cast_expression "(long *)(lVar3 + 8)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar3 + 8)" ( (binary_expression "lVar3 + 8" identifier + number_literal) ))))) )))) , identifier ))) ;) (goto_statement "goto LAB_0014bed9;" goto statement_identifier ;) })) (expression_statement "local_50 = 1;" (assignment_expression "local_50 = 1" identifier = number_literal) ;) (expression_statement "iVar15 = *(int *)(param_3 + 1) + 0x51;" (assignment_expression "iVar15 = *(int *)(param_3 + 1) + 0x51" identifier = (binary_expression "*(int *)(param_3 + 1) + 0x51" (pointer_expression "*(int *)(param_3 + 1)" * (cast_expression "(int *)(param_3 + 1)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 1)" ( (binary_expression "param_3 + 1" identifier + number_literal) )))) + number_literal)) ;) (expression_statement "iVar6 = 1;" (assignment_expression "iVar6 = 1" identifier = number_literal) ;) (labeled_statement "LAB_0014bd06:\n      iVar18 = 0;" statement_identifier : (expression_statement "iVar18 = 0;" (assignment_expression "iVar18 = 0" identifier = number_literal) ;)) (expression_statement "piVar19 = param_4 + 4;" (assignment_expression "piVar19 = param_4 + 4" identifier = (binary_expression "param_4 + 4" identifier + number_literal)) ;) (do_statement "do {\n        while (*(char **)piVar19 != (char *)0x0) {\n          sVar10 = strlen(*(char **)piVar19);\n          iVar18 = iVar18 + 1;\n          piVar19 = piVar19 + 8;\n          iVar15 = iVar15 + ((uint)sVar10 & 0x3fffffff) + 1;\n          if (iVar6 <= iVar18) goto LAB_0014bd6e;\n        }\n        iVar18 = iVar18 + 1;\n        piVar19 = piVar19 + 8;\n        iVar15 = iVar15 + 1;\n      } while (iVar18 < iVar6);" do (compound_statement "{\n        while (*(char **)piVar19 != (char *)0x0) {\n          sVar10 = strlen(*(char **)piVar19);\n          iVar18 = iVar18 + 1;\n          piVar19 = piVar19 + 8;\n          iVar15 = iVar15 + ((uint)sVar10 & 0x3fffffff) + 1;\n          if (iVar6 <= iVar18) goto LAB_0014bd6e;\n        }\n        iVar18 = iVar18 + 1;\n        piVar19 = piVar19 + 8;\n        iVar15 = iVar15 + 1;\n      }" { (while_statement "while (*(char **)piVar19 != (char *)0x0) {\n          sVar10 = strlen(*(char **)piVar19);\n          iVar18 = iVar18 + 1;\n          piVar19 = piVar19 + 8;\n          iVar15 = iVar15 + ((uint)sVar10 & 0x3fffffff) + 1;\n          if (iVar6 <= iVar18) goto LAB_0014bd6e;\n        }" while (parenthesized_expression "(*(char **)piVar19 != (char *)0x0)" ( (binary_expression "*(char **)piVar19 != (char *)0x0" (pointer_expression "*(char **)piVar19" * (cast_expression "(char **)piVar19" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) identifier)) != (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n          sVar10 = strlen(*(char **)piVar19);\n          iVar18 = iVar18 + 1;\n          piVar19 = piVar19 + 8;\n          iVar15 = iVar15 + ((uint)sVar10 & 0x3fffffff) + 1;\n          if (iVar6 <= iVar18) goto LAB_0014bd6e;\n        }" { (expression_statement "sVar10 = strlen(*(char **)piVar19);" (assignment_expression "sVar10 = strlen(*(char **)piVar19)" identifier = (call_expression "strlen(*(char **)piVar19)" identifier (argument_list "(*(char **)piVar19)" ( (pointer_expression "*(char **)piVar19" * (cast_expression "(char **)piVar19" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) identifier)) )))) ;) (expression_statement "iVar18 = iVar18 + 1;" (assignment_expression "iVar18 = iVar18 + 1" identifier = (binary_expression "iVar18 + 1" identifier + number_literal)) ;) (expression_statement "piVar19 = piVar19 + 8;" (assignment_expression "piVar19 = piVar19 + 8" identifier = (binary_expression "piVar19 + 8" identifier + number_literal)) ;) (expression_statement "iVar15 = iVar15 + ((uint)sVar10 & 0x3fffffff) + 1;" (assignment_expression "iVar15 = iVar15 + ((uint)sVar10 & 0x3fffffff) + 1" identifier = (binary_expression "iVar15 + ((uint)sVar10 & 0x3fffffff) + 1" (binary_expression "iVar15 + ((uint)sVar10 & 0x3fffffff)" identifier + (parenthesized_expression "((uint)sVar10 & 0x3fffffff)" ( (binary_expression "(uint)sVar10 & 0x3fffffff" (cast_expression "(uint)sVar10" ( (type_descriptor "uint" type_identifier) ) identifier) & number_literal) ))) + number_literal)) ;) (if_statement "if (iVar6 <= iVar18) goto LAB_0014bd6e;" if (parenthesized_expression "(iVar6 <= iVar18)" ( (binary_expression "iVar6 <= iVar18" identifier <= identifier) )) (goto_statement "goto LAB_0014bd6e;" goto statement_identifier ;)) })) (expression_statement "iVar18 = iVar18 + 1;" (assignment_expression "iVar18 = iVar18 + 1" identifier = (binary_expression "iVar18 + 1" identifier + number_literal)) ;) (expression_statement "piVar19 = piVar19 + 8;" (assignment_expression "piVar19 = piVar19 + 8" identifier = (binary_expression "piVar19 + 8" identifier + number_literal)) ;) (expression_statement "iVar15 = iVar15 + 1;" (assignment_expression "iVar15 = iVar15 + 1" identifier = (binary_expression "iVar15 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar18 < iVar6)" ( (binary_expression "iVar18 < iVar6" identifier < identifier) )) ;) (labeled_statement "LAB_0014bd6e:\n      plVar7 = (long *)FUN_0011b8f0(lVar2,(long)iVar15);" statement_identifier : (expression_statement "plVar7 = (long *)FUN_0011b8f0(lVar2,(long)iVar15);" (assignment_expression "plVar7 = (long *)FUN_0011b8f0(lVar2,(long)iVar15)" identifier = (cast_expression "(long *)FUN_0011b8f0(lVar2,(long)iVar15)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_0011b8f0(lVar2,(long)iVar15)" identifier (argument_list "(lVar2,(long)iVar15)" ( identifier , (cast_expression "(long)iVar15" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) ))))) ;)) (if_statement "if (plVar7 == (long *)0x0) goto joined_r0x0014bec0;" if (parenthesized_expression "(plVar7 == (long *)0x0)" ( (binary_expression "plVar7 == (long *)0x0" identifier == (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) )) (goto_statement "goto joined_r0x0014bec0;" goto statement_identifier ;)) (expression_statement "lVar8 = ((long)local_50 + 4) * 0x10;" (assignment_expression "lVar8 = ((long)local_50 + 4) * 0x10" identifier = (binary_expression "((long)local_50 + 4) * 0x10" (parenthesized_expression "((long)local_50 + 4)" ( (binary_expression "(long)local_50 + 4" (cast_expression "(long)local_50" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )) * number_literal)) ;) }))) (labeled_statement "LAB_0014bd94:\n    *plVar7 = lVar3;" statement_identifier : (expression_statement "*plVar7 = lVar3;" (assignment_expression "*plVar7 = lVar3" (pointer_expression "*plVar7" * identifier) = identifier) ;)) (expression_statement "lVar9 = *(long *)(lVar3 + 0x20);" (assignment_expression "lVar9 = *(long *)(lVar3 + 0x20)" identifier = (pointer_expression "*(long *)(lVar3 + 0x20)" * (cast_expression "(long *)(lVar3 + 0x20)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar3 + 0x20)" ( (binary_expression "lVar3 + 0x20" identifier + number_literal) ))))) ;) (expression_statement "pvVar14 = (void *)((long)plVar7 + lVar8);" (assignment_expression "pvVar14 = (void *)((long)plVar7 + lVar8)" identifier = (cast_expression "(void *)((long)plVar7 + lVar8)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)plVar7 + lVar8)" ( (binary_expression "(long)plVar7 + lVar8" (cast_expression "(long)plVar7" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + identifier) )))) ;) (expression_statement "plVar7[2] = (long)pvVar14;" (assignment_expression "plVar7[2] = (long)pvVar14" (subscript_expression "plVar7[2]" identifier [ number_literal ]) = (cast_expression "(long)pvVar14" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) ;) (expression_statement "plVar7[1] = lVar9;" (assignment_expression "plVar7[1] = lVar9" (subscript_expression "plVar7[1]" identifier [ number_literal ]) = identifier) ;) (if_statement "if ((1 < *(byte *)((long)param_1 + 0x10e)) &&\n       (puVar12 = (undefined8 *)FUN_0011b8f0(*param_1,0x20), puVar12 != (undefined8 *)0x0)) {\n      *puVar12 = pvVar14;\n      uVar5 = param_3[1];\n      puVar12[1] = *param_3;\n      puVar12[2] = uVar5;\n      puVar12[3] = param_1[0x32];\n      param_1[0x32] = (long)puVar12;\n    }" if (parenthesized_expression "((1 < *(byte *)((long)param_1 + 0x10e)) &&\n       (puVar12 = (undefined8 *)FUN_0011b8f0(*param_1,0x20), puVar12 != (undefined8 *)0x0))" ( (binary_expression "(1 < *(byte *)((long)param_1 + 0x10e)) &&\n       (puVar12 = (undefined8 *)FUN_0011b8f0(*param_1,0x20), puVar12 != (undefined8 *)0x0)" (parenthesized_expression "(1 < *(byte *)((long)param_1 + 0x10e))" ( (binary_expression "1 < *(byte *)((long)param_1 + 0x10e)" number_literal < (pointer_expression "*(byte *)((long)param_1 + 0x10e)" * (cast_expression "(byte *)((long)param_1 + 0x10e)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_1 + 0x10e)" ( (binary_expression "(long)param_1 + 0x10e" (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) ))))) )) && (parenthesized_expression "(puVar12 = (undefined8 *)FUN_0011b8f0(*param_1,0x20), puVar12 != (undefined8 *)0x0)" ( (comma_expression "puVar12 = (undefined8 *)FUN_0011b8f0(*param_1,0x20), puVar12 != (undefined8 *)0x0" (assignment_expression "puVar12 = (undefined8 *)FUN_0011b8f0(*param_1,0x20)" identifier = (cast_expression "(undefined8 *)FUN_0011b8f0(*param_1,0x20)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_0011b8f0(*param_1,0x20)" identifier (argument_list "(*param_1,0x20)" ( (pointer_expression "*param_1" * identifier) , number_literal ))))) , (binary_expression "puVar12 != (undefined8 *)0x0" identifier != (cast_expression "(undefined8 *)0x0" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal))) ))) )) (compound_statement "{\n      *puVar12 = pvVar14;\n      uVar5 = param_3[1];\n      puVar12[1] = *param_3;\n      puVar12[2] = uVar5;\n      puVar12[3] = param_1[0x32];\n      param_1[0x32] = (long)puVar12;\n    }" { (expression_statement "*puVar12 = pvVar14;" (assignment_expression "*puVar12 = pvVar14" (pointer_expression "*puVar12" * identifier) = identifier) ;) (expression_statement "uVar5 = param_3[1];" (assignment_expression "uVar5 = param_3[1]" identifier = (subscript_expression "param_3[1]" identifier [ number_literal ])) ;) (expression_statement "puVar12[1] = *param_3;" (assignment_expression "puVar12[1] = *param_3" (subscript_expression "puVar12[1]" identifier [ number_literal ]) = (pointer_expression "*param_3" * identifier)) ;) (expression_statement "puVar12[2] = uVar5;" (assignment_expression "puVar12[2] = uVar5" (subscript_expression "puVar12[2]" identifier [ number_literal ]) = identifier) ;) (expression_statement "puVar12[3] = param_1[0x32];" (assignment_expression "puVar12[3] = param_1[0x32]" (subscript_expression "puVar12[3]" identifier [ number_literal ]) = (subscript_expression "param_1[0x32]" identifier [ number_literal ])) ;) (expression_statement "param_1[0x32] = (long)puVar12;" (assignment_expression "param_1[0x32] = (long)puVar12" (subscript_expression "param_1[0x32]" identifier [ number_literal ]) = (cast_expression "(long)puVar12" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) ;) })) (expression_statement "memcpy(pvVar14,(void *)*param_3,(ulong)*(uint *)(param_3 + 1));" (call_expression "memcpy(pvVar14,(void *)*param_3,(ulong)*(uint *)(param_3 + 1))" identifier (argument_list "(pvVar14,(void *)*param_3,(ulong)*(uint *)(param_3 + 1))" ( identifier , (cast_expression "(void *)*param_3" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_3" * identifier)) , (binary_expression "(ulong)*(uint *)(param_3 + 1)" (parenthesized_expression "(ulong)" ( identifier )) * (cast_expression "(uint *)(param_3 + 1)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 1)" ( (binary_expression "param_3 + 1" identifier + number_literal) )))) ))) ;) (expression_statement "*(undefined1 *)((long)pvVar14 + (ulong)*(uint *)(param_3 + 1)) = 0;" (assignment_expression "*(undefined1 *)((long)pvVar14 + (ulong)*(uint *)(param_3 + 1)) = 0" (pointer_expression "*(undefined1 *)((long)pvVar14 + (ulong)*(uint *)(param_3 + 1))" * (cast_expression "(undefined1 *)((long)pvVar14 + (ulong)*(uint *)(param_3 + 1))" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)pvVar14 + (ulong)*(uint *)(param_3 + 1))" ( (binary_expression "(long)pvVar14 + (ulong)*(uint *)(param_3 + 1)" (cast_expression "(long)pvVar14" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (binary_expression "(ulong)*(uint *)(param_3 + 1)" (parenthesized_expression "(ulong)" ( identifier )) * (cast_expression "(uint *)(param_3 + 1)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 1)" ( (binary_expression "param_3 + 1" identifier + number_literal) ))))) )))) = number_literal) ;) (expression_statement "FUN_0010f690(pvVar14);" (call_expression "FUN_0010f690(pvVar14)" identifier (argument_list "(pvVar14)" ( identifier ))) ;) (expression_statement "iVar6 = *(int *)(param_3 + 1);" (assignment_expression "iVar6 = *(int *)(param_3 + 1)" identifier = (pointer_expression "*(int *)(param_3 + 1)" * (cast_expression "(int *)(param_3 + 1)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 1)" ( (binary_expression "param_3 + 1" identifier + number_literal) ))))) ;) (expression_statement "*(int *)(plVar7 + 5) = local_50;" (assignment_expression "*(int *)(plVar7 + 5) = local_50" (pointer_expression "*(int *)(plVar7 + 5)" * (cast_expression "(int *)(plVar7 + 5)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(plVar7 + 5)" ( (binary_expression "plVar7 + 5" identifier + number_literal) )))) = identifier) ;) (if_statement "if (param_2 == (int *)0x0) {\n      *(int *)(plVar7 + 8) = *(short *)(lVar3 + 0x46) + -1;\n      if ((param_4 != (int *)0x0) && (0 < local_50)) goto LAB_0014bf4f;\n    }\n    else {\n      lVar8 = 0x40;\n      if (0 < local_50) {\n        iVar15 = 0;\nLAB_0014be20:\n        pbVar13 = *(byte **)((long)param_2 + lVar8 * 2 + -0x70);\n        if (0 < *(short *)(lVar3 + 0x46)) {\n          puVar12 = *(undefined8 **)(lVar3 + 8);\n          iVar18 = 0;\n          do {\n            bVar1 = *(byte *)*puVar12;\n            if ((&DAT_001f5800)[bVar1] == (&DAT_001f5800)[*pbVar13]) {\n              if (bVar1 == 0) goto LAB_0014bf08;\n              lVar9 = 1;\n              while (bVar1 = ((byte *)*puVar12)[lVar9],\n                    (&DAT_001f5800)[bVar1] == (&DAT_001f5800)[pbVar13[lVar9]]) {\n                lVar9 = lVar9 + 1;\n                if (bVar1 == 0) goto LAB_0014bf08;\n              }\n            }\n            iVar18 = iVar18 + 1;\n            puVar12 = puVar12 + 4;\n            if (iVar18 == *(short *)(lVar3 + 0x46)) break;\n          } while( true );\n        }\n        goto LAB_0014be9c;\n      }\n    }" if (parenthesized_expression "(param_2 == (int *)0x0)" ( (binary_expression "param_2 == (int *)0x0" identifier == (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      *(int *)(plVar7 + 8) = *(short *)(lVar3 + 0x46) + -1;\n      if ((param_4 != (int *)0x0) && (0 < local_50)) goto LAB_0014bf4f;\n    }" { (expression_statement "*(int *)(plVar7 + 8) = *(short *)(lVar3 + 0x46) + -1;" (assignment_expression "*(int *)(plVar7 + 8) = *(short *)(lVar3 + 0x46) + -1" (pointer_expression "*(int *)(plVar7 + 8)" * (cast_expression "(int *)(plVar7 + 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(plVar7 + 8)" ( (binary_expression "plVar7 + 8" identifier + number_literal) )))) = (binary_expression "*(short *)(lVar3 + 0x46) + -1" (pointer_expression "*(short *)(lVar3 + 0x46)" * (cast_expression "(short *)(lVar3 + 0x46)" ( (type_descriptor "short *" (sized_type_specifier "short" short) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar3 + 0x46)" ( (binary_expression "lVar3 + 0x46" identifier + number_literal) )))) + number_literal)) ;) (if_statement "if ((param_4 != (int *)0x0) && (0 < local_50)) goto LAB_0014bf4f;" if (parenthesized_expression "((param_4 != (int *)0x0) && (0 < local_50))" ( (binary_expression "(param_4 != (int *)0x0) && (0 < local_50)" (parenthesized_expression "(param_4 != (int *)0x0)" ( (binary_expression "param_4 != (int *)0x0" identifier != (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) && (parenthesized_expression "(0 < local_50)" ( (binary_expression "0 < local_50" number_literal < identifier) ))) )) (goto_statement "goto LAB_0014bf4f;" goto statement_identifier ;)) }) (else_clause "else {\n      lVar8 = 0x40;\n      if (0 < local_50) {\n        iVar15 = 0;\nLAB_0014be20:\n        pbVar13 = *(byte **)((long)param_2 + lVar8 * 2 + -0x70);\n        if (0 < *(short *)(lVar3 + 0x46)) {\n          puVar12 = *(undefined8 **)(lVar3 + 8);\n          iVar18 = 0;\n          do {\n            bVar1 = *(byte *)*puVar12;\n            if ((&DAT_001f5800)[bVar1] == (&DAT_001f5800)[*pbVar13]) {\n              if (bVar1 == 0) goto LAB_0014bf08;\n              lVar9 = 1;\n              while (bVar1 = ((byte *)*puVar12)[lVar9],\n                    (&DAT_001f5800)[bVar1] == (&DAT_001f5800)[pbVar13[lVar9]]) {\n                lVar9 = lVar9 + 1;\n                if (bVar1 == 0) goto LAB_0014bf08;\n              }\n            }\n            iVar18 = iVar18 + 1;\n            puVar12 = puVar12 + 4;\n            if (iVar18 == *(short *)(lVar3 + 0x46)) break;\n          } while( true );\n        }\n        goto LAB_0014be9c;\n      }\n    }" else (compound_statement "{\n      lVar8 = 0x40;\n      if (0 < local_50) {\n        iVar15 = 0;\nLAB_0014be20:\n        pbVar13 = *(byte **)((long)param_2 + lVar8 * 2 + -0x70);\n        if (0 < *(short *)(lVar3 + 0x46)) {\n          puVar12 = *(undefined8 **)(lVar3 + 8);\n          iVar18 = 0;\n          do {\n            bVar1 = *(byte *)*puVar12;\n            if ((&DAT_001f5800)[bVar1] == (&DAT_001f5800)[*pbVar13]) {\n              if (bVar1 == 0) goto LAB_0014bf08;\n              lVar9 = 1;\n              while (bVar1 = ((byte *)*puVar12)[lVar9],\n                    (&DAT_001f5800)[bVar1] == (&DAT_001f5800)[pbVar13[lVar9]]) {\n                lVar9 = lVar9 + 1;\n                if (bVar1 == 0) goto LAB_0014bf08;\n              }\n            }\n            iVar18 = iVar18 + 1;\n            puVar12 = puVar12 + 4;\n            if (iVar18 == *(short *)(lVar3 + 0x46)) break;\n          } while( true );\n        }\n        goto LAB_0014be9c;\n      }\n    }" { (expression_statement "lVar8 = 0x40;" (assignment_expression "lVar8 = 0x40" identifier = number_literal) ;) (if_statement "if (0 < local_50) {\n        iVar15 = 0;\nLAB_0014be20:\n        pbVar13 = *(byte **)((long)param_2 + lVar8 * 2 + -0x70);\n        if (0 < *(short *)(lVar3 + 0x46)) {\n          puVar12 = *(undefined8 **)(lVar3 + 8);\n          iVar18 = 0;\n          do {\n            bVar1 = *(byte *)*puVar12;\n            if ((&DAT_001f5800)[bVar1] == (&DAT_001f5800)[*pbVar13]) {\n              if (bVar1 == 0) goto LAB_0014bf08;\n              lVar9 = 1;\n              while (bVar1 = ((byte *)*puVar12)[lVar9],\n                    (&DAT_001f5800)[bVar1] == (&DAT_001f5800)[pbVar13[lVar9]]) {\n                lVar9 = lVar9 + 1;\n                if (bVar1 == 0) goto LAB_0014bf08;\n              }\n            }\n            iVar18 = iVar18 + 1;\n            puVar12 = puVar12 + 4;\n            if (iVar18 == *(short *)(lVar3 + 0x46)) break;\n          } while( true );\n        }\n        goto LAB_0014be9c;\n      }" if (parenthesized_expression "(0 < local_50)" ( (binary_expression "0 < local_50" number_literal < identifier) )) (compound_statement "{\n        iVar15 = 0;\nLAB_0014be20:\n        pbVar13 = *(byte **)((long)param_2 + lVar8 * 2 + -0x70);\n        if (0 < *(short *)(lVar3 + 0x46)) {\n          puVar12 = *(undefined8 **)(lVar3 + 8);\n          iVar18 = 0;\n          do {\n            bVar1 = *(byte *)*puVar12;\n            if ((&DAT_001f5800)[bVar1] == (&DAT_001f5800)[*pbVar13]) {\n              if (bVar1 == 0) goto LAB_0014bf08;\n              lVar9 = 1;\n              while (bVar1 = ((byte *)*puVar12)[lVar9],\n                    (&DAT_001f5800)[bVar1] == (&DAT_001f5800)[pbVar13[lVar9]]) {\n                lVar9 = lVar9 + 1;\n                if (bVar1 == 0) goto LAB_0014bf08;\n              }\n            }\n            iVar18 = iVar18 + 1;\n            puVar12 = puVar12 + 4;\n            if (iVar18 == *(short *)(lVar3 + 0x46)) break;\n          } while( true );\n        }\n        goto LAB_0014be9c;\n      }" { (expression_statement "iVar15 = 0;" (assignment_expression "iVar15 = 0" identifier = number_literal) ;) (labeled_statement "LAB_0014be20:\n        pbVar13 = *(byte **)((long)param_2 + lVar8 * 2 + -0x70);" statement_identifier : (expression_statement "pbVar13 = *(byte **)((long)param_2 + lVar8 * 2 + -0x70);" (assignment_expression "pbVar13 = *(byte **)((long)param_2 + lVar8 * 2 + -0x70)" identifier = (pointer_expression "*(byte **)((long)param_2 + lVar8 * 2 + -0x70)" * (cast_expression "(byte **)((long)param_2 + lVar8 * 2 + -0x70)" ( (type_descriptor "byte **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "((long)param_2 + lVar8 * 2 + -0x70)" ( (binary_expression "(long)param_2 + lVar8 * 2 + -0x70" (binary_expression "(long)param_2 + lVar8 * 2" (cast_expression "(long)param_2" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (binary_expression "lVar8 * 2" identifier * number_literal)) + number_literal) ))))) ;)) (if_statement "if (0 < *(short *)(lVar3 + 0x46)) {\n          puVar12 = *(undefined8 **)(lVar3 + 8);\n          iVar18 = 0;\n          do {\n            bVar1 = *(byte *)*puVar12;\n            if ((&DAT_001f5800)[bVar1] == (&DAT_001f5800)[*pbVar13]) {\n              if (bVar1 == 0) goto LAB_0014bf08;\n              lVar9 = 1;\n              while (bVar1 = ((byte *)*puVar12)[lVar9],\n                    (&DAT_001f5800)[bVar1] == (&DAT_001f5800)[pbVar13[lVar9]]) {\n                lVar9 = lVar9 + 1;\n                if (bVar1 == 0) goto LAB_0014bf08;\n              }\n            }\n            iVar18 = iVar18 + 1;\n            puVar12 = puVar12 + 4;\n            if (iVar18 == *(short *)(lVar3 + 0x46)) break;\n          } while( true );\n        }" if (parenthesized_expression "(0 < *(short *)(lVar3 + 0x46))" ( (binary_expression "0 < *(short *)(lVar3 + 0x46)" number_literal < (pointer_expression "*(short *)(lVar3 + 0x46)" * (cast_expression "(short *)(lVar3 + 0x46)" ( (type_descriptor "short *" (sized_type_specifier "short" short) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar3 + 0x46)" ( (binary_expression "lVar3 + 0x46" identifier + number_literal) ))))) )) (compound_statement "{\n          puVar12 = *(undefined8 **)(lVar3 + 8);\n          iVar18 = 0;\n          do {\n            bVar1 = *(byte *)*puVar12;\n            if ((&DAT_001f5800)[bVar1] == (&DAT_001f5800)[*pbVar13]) {\n              if (bVar1 == 0) goto LAB_0014bf08;\n              lVar9 = 1;\n              while (bVar1 = ((byte *)*puVar12)[lVar9],\n                    (&DAT_001f5800)[bVar1] == (&DAT_001f5800)[pbVar13[lVar9]]) {\n                lVar9 = lVar9 + 1;\n                if (bVar1 == 0) goto LAB_0014bf08;\n              }\n            }\n            iVar18 = iVar18 + 1;\n            puVar12 = puVar12 + 4;\n            if (iVar18 == *(short *)(lVar3 + 0x46)) break;\n          } while( true );\n        }" { (expression_statement "puVar12 = *(undefined8 **)(lVar3 + 8);" (assignment_expression "puVar12 = *(undefined8 **)(lVar3 + 8)" identifier = (pointer_expression "*(undefined8 **)(lVar3 + 8)" * (cast_expression "(undefined8 **)(lVar3 + 8)" ( (type_descriptor "undefined8 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(lVar3 + 8)" ( (binary_expression "lVar3 + 8" identifier + number_literal) ))))) ;) (expression_statement "iVar18 = 0;" (assignment_expression "iVar18 = 0" identifier = number_literal) ;) (do_statement "do {\n            bVar1 = *(byte *)*puVar12;\n            if ((&DAT_001f5800)[bVar1] == (&DAT_001f5800)[*pbVar13]) {\n              if (bVar1 == 0) goto LAB_0014bf08;\n              lVar9 = 1;\n              while (bVar1 = ((byte *)*puVar12)[lVar9],\n                    (&DAT_001f5800)[bVar1] == (&DAT_001f5800)[pbVar13[lVar9]]) {\n                lVar9 = lVar9 + 1;\n                if (bVar1 == 0) goto LAB_0014bf08;\n              }\n            }\n            iVar18 = iVar18 + 1;\n            puVar12 = puVar12 + 4;\n            if (iVar18 == *(short *)(lVar3 + 0x46)) break;\n          } while( true );" do (compound_statement "{\n            bVar1 = *(byte *)*puVar12;\n            if ((&DAT_001f5800)[bVar1] == (&DAT_001f5800)[*pbVar13]) {\n              if (bVar1 == 0) goto LAB_0014bf08;\n              lVar9 = 1;\n              while (bVar1 = ((byte *)*puVar12)[lVar9],\n                    (&DAT_001f5800)[bVar1] == (&DAT_001f5800)[pbVar13[lVar9]]) {\n                lVar9 = lVar9 + 1;\n                if (bVar1 == 0) goto LAB_0014bf08;\n              }\n            }\n            iVar18 = iVar18 + 1;\n            puVar12 = puVar12 + 4;\n            if (iVar18 == *(short *)(lVar3 + 0x46)) break;\n          }" { (expression_statement "bVar1 = *(byte *)*puVar12;" (assignment_expression "bVar1 = *(byte *)*puVar12" identifier = (pointer_expression "*(byte *)*puVar12" * (cast_expression "(byte *)*puVar12" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar12" * identifier)))) ;) (if_statement "if ((&DAT_001f5800)[bVar1] == (&DAT_001f5800)[*pbVar13]) {\n              if (bVar1 == 0) goto LAB_0014bf08;\n              lVar9 = 1;\n              while (bVar1 = ((byte *)*puVar12)[lVar9],\n                    (&DAT_001f5800)[bVar1] == (&DAT_001f5800)[pbVar13[lVar9]]) {\n                lVar9 = lVar9 + 1;\n                if (bVar1 == 0) goto LAB_0014bf08;\n              }\n            }" if (parenthesized_expression "((&DAT_001f5800)[bVar1] == (&DAT_001f5800)[*pbVar13])" ( (binary_expression "(&DAT_001f5800)[bVar1] == (&DAT_001f5800)[*pbVar13]" (subscript_expression "(&DAT_001f5800)[bVar1]" (parenthesized_expression "(&DAT_001f5800)" ( (pointer_expression "&DAT_001f5800" & identifier) )) [ identifier ]) == (subscript_expression "(&DAT_001f5800)[*pbVar13]" (parenthesized_expression "(&DAT_001f5800)" ( (pointer_expression "&DAT_001f5800" & identifier) )) [ (pointer_expression "*pbVar13" * identifier) ])) )) (compound_statement "{\n              if (bVar1 == 0) goto LAB_0014bf08;\n              lVar9 = 1;\n              while (bVar1 = ((byte *)*puVar12)[lVar9],\n                    (&DAT_001f5800)[bVar1] == (&DAT_001f5800)[pbVar13[lVar9]]) {\n                lVar9 = lVar9 + 1;\n                if (bVar1 == 0) goto LAB_0014bf08;\n              }\n            }" { (if_statement "if (bVar1 == 0) goto LAB_0014bf08;" if (parenthesized_expression "(bVar1 == 0)" ( (binary_expression "bVar1 == 0" identifier == number_literal) )) (goto_statement "goto LAB_0014bf08;" goto statement_identifier ;)) (expression_statement "lVar9 = 1;" (assignment_expression "lVar9 = 1" identifier = number_literal) ;) (while_statement "while (bVar1 = ((byte *)*puVar12)[lVar9],\n                    (&DAT_001f5800)[bVar1] == (&DAT_001f5800)[pbVar13[lVar9]]) {\n                lVar9 = lVar9 + 1;\n                if (bVar1 == 0) goto LAB_0014bf08;\n              }" while (parenthesized_expression "(bVar1 = ((byte *)*puVar12)[lVar9],\n                    (&DAT_001f5800)[bVar1] == (&DAT_001f5800)[pbVar13[lVar9]])" ( (comma_expression "bVar1 = ((byte *)*puVar12)[lVar9],\n                    (&DAT_001f5800)[bVar1] == (&DAT_001f5800)[pbVar13[lVar9]]" (assignment_expression "bVar1 = ((byte *)*puVar12)[lVar9]" identifier = (subscript_expression "((byte *)*puVar12)[lVar9]" (parenthesized_expression "((byte *)*puVar12)" ( (cast_expression "(byte *)*puVar12" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar12" * identifier)) )) [ identifier ])) , (binary_expression "(&DAT_001f5800)[bVar1] == (&DAT_001f5800)[pbVar13[lVar9]]" (subscript_expression "(&DAT_001f5800)[bVar1]" (parenthesized_expression "(&DAT_001f5800)" ( (pointer_expression "&DAT_001f5800" & identifier) )) [ identifier ]) == (subscript_expression "(&DAT_001f5800)[pbVar13[lVar9]]" (parenthesized_expression "(&DAT_001f5800)" ( (pointer_expression "&DAT_001f5800" & identifier) )) [ (subscript_expression "pbVar13[lVar9]" identifier [ identifier ]) ]))) )) (compound_statement "{\n                lVar9 = lVar9 + 1;\n                if (bVar1 == 0) goto LAB_0014bf08;\n              }" { (expression_statement "lVar9 = lVar9 + 1;" (assignment_expression "lVar9 = lVar9 + 1" identifier = (binary_expression "lVar9 + 1" identifier + number_literal)) ;) (if_statement "if (bVar1 == 0) goto LAB_0014bf08;" if (parenthesized_expression "(bVar1 == 0)" ( (binary_expression "bVar1 == 0" identifier == number_literal) )) (goto_statement "goto LAB_0014bf08;" goto statement_identifier ;)) })) })) (expression_statement "iVar18 = iVar18 + 1;" (assignment_expression "iVar18 = iVar18 + 1" identifier = (binary_expression "iVar18 + 1" identifier + number_literal)) ;) (expression_statement "puVar12 = puVar12 + 4;" (assignment_expression "puVar12 = puVar12 + 4" identifier = (binary_expression "puVar12 + 4" identifier + number_literal)) ;) (if_statement "if (iVar18 == *(short *)(lVar3 + 0x46)) break;" if (parenthesized_expression "(iVar18 == *(short *)(lVar3 + 0x46))" ( (binary_expression "iVar18 == *(short *)(lVar3 + 0x46)" identifier == (pointer_expression "*(short *)(lVar3 + 0x46)" * (cast_expression "(short *)(lVar3 + 0x46)" ( (type_descriptor "short *" (sized_type_specifier "short" short) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar3 + 0x46)" ( (binary_expression "lVar3 + 0x46" identifier + number_literal) ))))) )) (break_statement "break;" break ;)) }) while (parenthesized_expression "( true )" ( true )) ;) })) (goto_statement "goto LAB_0014be9c;" goto statement_identifier ;) })) }))) (goto_statement "goto LAB_0014c064;" goto statement_identifier ;) })) (labeled_statement "LAB_0014bed1:\n  if (param_4 == (int *)0x0) {\n    return;\n  }" statement_identifier : (if_statement "if (param_4 == (int *)0x0) {\n    return;\n  }" if (parenthesized_expression "(param_4 == (int *)0x0)" ( (binary_expression "param_4 == (int *)0x0" identifier == (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    return;\n  }" { (return_statement "return;" return ;) }))) (labeled_statement "LAB_0014bed9:\n  FUN_0012cc80(lVar2,param_4);" statement_identifier : (expression_statement "FUN_0012cc80(lVar2,param_4);" (call_expression "FUN_0012cc80(lVar2,param_4)" identifier (argument_list "(lVar2,param_4)" ( identifier , identifier ))) ;)) (return_statement "return;" return ;) (labeled_statement "LAB_0014bf08:\n  *(int *)((long)plVar7 + lVar8) = iVar18;" statement_identifier : (expression_statement "*(int *)((long)plVar7 + lVar8) = iVar18;" (assignment_expression "*(int *)((long)plVar7 + lVar8) = iVar18" (pointer_expression "*(int *)((long)plVar7 + lVar8)" * (cast_expression "(int *)((long)plVar7 + lVar8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)plVar7 + lVar8)" ( (binary_expression "(long)plVar7 + lVar8" (cast_expression "(long)plVar7" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + identifier) )))) = identifier) ;)) (if_statement "if (*(short *)(lVar3 + 0x46) <= iVar18) {\n    pbVar13 = *(byte **)(param_2 + (long)iVar15 * 8 + 4);\nLAB_0014be9c:\n    FUN_0014a9d0(param_1,"unknown column \"%s\" in foreign key definition",pbVar13);\n    goto LAB_0014bead;\n  }" if (parenthesized_expression "(*(short *)(lVar3 + 0x46) <= iVar18)" ( (binary_expression "*(short *)(lVar3 + 0x46) <= iVar18" (pointer_expression "*(short *)(lVar3 + 0x46)" * (cast_expression "(short *)(lVar3 + 0x46)" ( (type_descriptor "short *" (sized_type_specifier "short" short) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar3 + 0x46)" ( (binary_expression "lVar3 + 0x46" identifier + number_literal) )))) <= identifier) )) (compound_statement "{\n    pbVar13 = *(byte **)(param_2 + (long)iVar15 * 8 + 4);\nLAB_0014be9c:\n    FUN_0014a9d0(param_1,"unknown column \"%s\" in foreign key definition",pbVar13);\n    goto LAB_0014bead;\n  }" { (expression_statement "pbVar13 = *(byte **)(param_2 + (long)iVar15 * 8 + 4);" (assignment_expression "pbVar13 = *(byte **)(param_2 + (long)iVar15 * 8 + 4)" identifier = (pointer_expression "*(byte **)(param_2 + (long)iVar15 * 8 + 4)" * (cast_expression "(byte **)(param_2 + (long)iVar15 * 8 + 4)" ( (type_descriptor "byte **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_2 + (long)iVar15 * 8 + 4)" ( (binary_expression "param_2 + (long)iVar15 * 8 + 4" (binary_expression "param_2 + (long)iVar15 * 8" identifier + (binary_expression "(long)iVar15 * 8" (cast_expression "(long)iVar15" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) * number_literal)) + number_literal) ))))) ;) (labeled_statement "LAB_0014be9c:\n    FUN_0014a9d0(param_1,"unknown column \"%s\" in foreign key definition",pbVar13);" statement_identifier : (expression_statement "FUN_0014a9d0(param_1,"unknown column \"%s\" in foreign key definition",pbVar13);" (call_expression "FUN_0014a9d0(param_1,"unknown column \"%s\" in foreign key definition",pbVar13)" identifier (argument_list "(param_1,"unknown column \"%s\" in foreign key definition",pbVar13)" ( identifier , (string_literal ""unknown column \"%s\" in foreign key definition"" " string_content escape_sequence string_content escape_sequence string_content ") , identifier ))) ;)) (goto_statement "goto LAB_0014bead;" goto statement_identifier ;) })) (if_statement "if (1 < *(byte *)((long)param_1 + 0x10e)) {\n    for (plVar11 = (long *)param_1[0x32]; plVar11 != (long *)0x0; plVar11 = (long *)plVar11[3]) {\n      if (*(long *)((long)param_2 + lVar8 * 2 + -0x70) == *plVar11) {\n        *plVar11 = (long)plVar7 + lVar8;\n        break;\n      }\n    }\n  }" if (parenthesized_expression "(1 < *(byte *)((long)param_1 + 0x10e))" ( (binary_expression "1 < *(byte *)((long)param_1 + 0x10e)" number_literal < (pointer_expression "*(byte *)((long)param_1 + 0x10e)" * (cast_expression "(byte *)((long)param_1 + 0x10e)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_1 + 0x10e)" ( (binary_expression "(long)param_1 + 0x10e" (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) ))))) )) (compound_statement "{\n    for (plVar11 = (long *)param_1[0x32]; plVar11 != (long *)0x0; plVar11 = (long *)plVar11[3]) {\n      if (*(long *)((long)param_2 + lVar8 * 2 + -0x70) == *plVar11) {\n        *plVar11 = (long)plVar7 + lVar8;\n        break;\n      }\n    }\n  }" { (for_statement "for (plVar11 = (long *)param_1[0x32]; plVar11 != (long *)0x0; plVar11 = (long *)plVar11[3]) {\n      if (*(long *)((long)param_2 + lVar8 * 2 + -0x70) == *plVar11) {\n        *plVar11 = (long)plVar7 + lVar8;\n        break;\n      }\n    }" for ( (assignment_expression "plVar11 = (long *)param_1[0x32]" identifier = (cast_expression "(long *)param_1[0x32]" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[0x32]" identifier [ number_literal ]))) ; (binary_expression "plVar11 != (long *)0x0" identifier != (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) ; (assignment_expression "plVar11 = (long *)plVar11[3]" identifier = (cast_expression "(long *)plVar11[3]" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (subscript_expression "plVar11[3]" identifier [ number_literal ]))) ) (compound_statement "{\n      if (*(long *)((long)param_2 + lVar8 * 2 + -0x70) == *plVar11) {\n        *plVar11 = (long)plVar7 + lVar8;\n        break;\n      }\n    }" { (if_statement "if (*(long *)((long)param_2 + lVar8 * 2 + -0x70) == *plVar11) {\n        *plVar11 = (long)plVar7 + lVar8;\n        break;\n      }" if (parenthesized_expression "(*(long *)((long)param_2 + lVar8 * 2 + -0x70) == *plVar11)" ( (binary_expression "*(long *)((long)param_2 + lVar8 * 2 + -0x70) == *plVar11" (pointer_expression "*(long *)((long)param_2 + lVar8 * 2 + -0x70)" * (cast_expression "(long *)((long)param_2 + lVar8 * 2 + -0x70)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_2 + lVar8 * 2 + -0x70)" ( (binary_expression "(long)param_2 + lVar8 * 2 + -0x70" (binary_expression "(long)param_2 + lVar8 * 2" (cast_expression "(long)param_2" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (binary_expression "lVar8 * 2" identifier * number_literal)) + number_literal) )))) == (pointer_expression "*plVar11" * identifier)) )) (compound_statement "{\n        *plVar11 = (long)plVar7 + lVar8;\n        break;\n      }" { (expression_statement "*plVar11 = (long)plVar7 + lVar8;" (assignment_expression "*plVar11 = (long)plVar7 + lVar8" (pointer_expression "*plVar11" * identifier) = (binary_expression "(long)plVar7 + lVar8" (cast_expression "(long)plVar7" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + identifier)) ;) (break_statement "break;" break ;) })) })) })) (expression_statement "iVar15 = iVar15 + 1;" (assignment_expression "iVar15 = iVar15 + 1" identifier = (binary_expression "iVar15 + 1" identifier + number_literal)) ;) (expression_statement "lVar8 = lVar8 + 0x10;" (assignment_expression "lVar8 = lVar8 + 0x10" identifier = (binary_expression "lVar8 + 0x10" identifier + number_literal)) ;) (if_statement "if (iVar15 == local_50) goto code_r0x0014bf3e;" if (parenthesized_expression "(iVar15 == local_50)" ( (binary_expression "iVar15 == local_50" identifier == identifier) )) (goto_statement "goto code_r0x0014bf3e;" goto statement_identifier ;)) (goto_statement "goto LAB_0014be20;" goto statement_identifier ;) (labeled_statement "code_r0x0014bf3e:\n  if (param_4 != (int *)0x0) {\nLAB_0014bf4f:\n    plVar17 = plVar7 + 9;\n    plVar11 = (long *)(param_4 + 4);\n    iVar15 = 0;\n    __dest = (undefined1 *)((long)pvVar14 + (ulong)(iVar6 + 1));\n    do {\n      if ((char *)*plVar11 == (char *)0x0) {\n        lVar8 = 1;\n        __n = 0;\n        puVar16 = __dest;\n      }\n      else {\n        sVar10 = strlen((char *)*plVar11);\n        __n = (ulong)((uint)sVar10 & 0x3fffffff);\n        lVar8 = __n + 1;\n        puVar16 = __dest + __n;\n      }\n      *plVar17 = (long)__dest;\n      pvVar14 = (void *)*plVar11;\n      if (1 < *(byte *)((long)param_1 + 0x10e)) {\n        for (plVar4 = (long *)param_1[0x32]; plVar4 != (long *)0x0; plVar4 = (long *)plVar4[3]) {\n          if (pvVar14 == (void *)*plVar4) {\n            *plVar4 = (long)__dest;\n            pvVar14 = (void *)*plVar11;\n            break;\n          }\n        }\n      }\n      iVar15 = iVar15 + 1;\n      plVar11 = plVar11 + 4;\n      memcpy(__dest,pvVar14,__n);\n      plVar17 = plVar17 + 2;\n      *puVar16 = 0;\n      __dest = __dest + lVar8;\n    } while (iVar15 < local_50);\n  }" statement_identifier : (if_statement "if (param_4 != (int *)0x0) {\nLAB_0014bf4f:\n    plVar17 = plVar7 + 9;\n    plVar11 = (long *)(param_4 + 4);\n    iVar15 = 0;\n    __dest = (undefined1 *)((long)pvVar14 + (ulong)(iVar6 + 1));\n    do {\n      if ((char *)*plVar11 == (char *)0x0) {\n        lVar8 = 1;\n        __n = 0;\n        puVar16 = __dest;\n      }\n      else {\n        sVar10 = strlen((char *)*plVar11);\n        __n = (ulong)((uint)sVar10 & 0x3fffffff);\n        lVar8 = __n + 1;\n        puVar16 = __dest + __n;\n      }\n      *plVar17 = (long)__dest;\n      pvVar14 = (void *)*plVar11;\n      if (1 < *(byte *)((long)param_1 + 0x10e)) {\n        for (plVar4 = (long *)param_1[0x32]; plVar4 != (long *)0x0; plVar4 = (long *)plVar4[3]) {\n          if (pvVar14 == (void *)*plVar4) {\n            *plVar4 = (long)__dest;\n            pvVar14 = (void *)*plVar11;\n            break;\n          }\n        }\n      }\n      iVar15 = iVar15 + 1;\n      plVar11 = plVar11 + 4;\n      memcpy(__dest,pvVar14,__n);\n      plVar17 = plVar17 + 2;\n      *puVar16 = 0;\n      __dest = __dest + lVar8;\n    } while (iVar15 < local_50);\n  }" if (parenthesized_expression "(param_4 != (int *)0x0)" ( (binary_expression "param_4 != (int *)0x0" identifier != (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\nLAB_0014bf4f:\n    plVar17 = plVar7 + 9;\n    plVar11 = (long *)(param_4 + 4);\n    iVar15 = 0;\n    __dest = (undefined1 *)((long)pvVar14 + (ulong)(iVar6 + 1));\n    do {\n      if ((char *)*plVar11 == (char *)0x0) {\n        lVar8 = 1;\n        __n = 0;\n        puVar16 = __dest;\n      }\n      else {\n        sVar10 = strlen((char *)*plVar11);\n        __n = (ulong)((uint)sVar10 & 0x3fffffff);\n        lVar8 = __n + 1;\n        puVar16 = __dest + __n;\n      }\n      *plVar17 = (long)__dest;\n      pvVar14 = (void *)*plVar11;\n      if (1 < *(byte *)((long)param_1 + 0x10e)) {\n        for (plVar4 = (long *)param_1[0x32]; plVar4 != (long *)0x0; plVar4 = (long *)plVar4[3]) {\n          if (pvVar14 == (void *)*plVar4) {\n            *plVar4 = (long)__dest;\n            pvVar14 = (void *)*plVar11;\n            break;\n          }\n        }\n      }\n      iVar15 = iVar15 + 1;\n      plVar11 = plVar11 + 4;\n      memcpy(__dest,pvVar14,__n);\n      plVar17 = plVar17 + 2;\n      *puVar16 = 0;\n      __dest = __dest + lVar8;\n    } while (iVar15 < local_50);\n  }" { (labeled_statement "LAB_0014bf4f:\n    plVar17 = plVar7 + 9;" statement_identifier : (expression_statement "plVar17 = plVar7 + 9;" (assignment_expression "plVar17 = plVar7 + 9" identifier = (binary_expression "plVar7 + 9" identifier + number_literal)) ;)) (expression_statement "plVar11 = (long *)(param_4 + 4);" (assignment_expression "plVar11 = (long *)(param_4 + 4)" identifier = (cast_expression "(long *)(param_4 + 4)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_4 + 4)" ( (binary_expression "param_4 + 4" identifier + number_literal) )))) ;) (expression_statement "iVar15 = 0;" (assignment_expression "iVar15 = 0" identifier = number_literal) ;) (expression_statement "__dest = (undefined1 *)((long)pvVar14 + (ulong)(iVar6 + 1));" (assignment_expression "__dest = (undefined1 *)((long)pvVar14 + (ulong)(iVar6 + 1))" identifier = (cast_expression "(undefined1 *)((long)pvVar14 + (ulong)(iVar6 + 1))" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)pvVar14 + (ulong)(iVar6 + 1))" ( (binary_expression "(long)pvVar14 + (ulong)(iVar6 + 1)" (cast_expression "(long)pvVar14" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (call_expression "(ulong)(iVar6 + 1)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(iVar6 + 1)" ( (binary_expression "iVar6 + 1" identifier + number_literal) )))) )))) ;) (do_statement "do {\n      if ((char *)*plVar11 == (char *)0x0) {\n        lVar8 = 1;\n        __n = 0;\n        puVar16 = __dest;\n      }\n      else {\n        sVar10 = strlen((char *)*plVar11);\n        __n = (ulong)((uint)sVar10 & 0x3fffffff);\n        lVar8 = __n + 1;\n        puVar16 = __dest + __n;\n      }\n      *plVar17 = (long)__dest;\n      pvVar14 = (void *)*plVar11;\n      if (1 < *(byte *)((long)param_1 + 0x10e)) {\n        for (plVar4 = (long *)param_1[0x32]; plVar4 != (long *)0x0; plVar4 = (long *)plVar4[3]) {\n          if (pvVar14 == (void *)*plVar4) {\n            *plVar4 = (long)__dest;\n            pvVar14 = (void *)*plVar11;\n            break;\n          }\n        }\n      }\n      iVar15 = iVar15 + 1;\n      plVar11 = plVar11 + 4;\n      memcpy(__dest,pvVar14,__n);\n      plVar17 = plVar17 + 2;\n      *puVar16 = 0;\n      __dest = __dest + lVar8;\n    } while (iVar15 < local_50);" do (compound_statement "{\n      if ((char *)*plVar11 == (char *)0x0) {\n        lVar8 = 1;\n        __n = 0;\n        puVar16 = __dest;\n      }\n      else {\n        sVar10 = strlen((char *)*plVar11);\n        __n = (ulong)((uint)sVar10 & 0x3fffffff);\n        lVar8 = __n + 1;\n        puVar16 = __dest + __n;\n      }\n      *plVar17 = (long)__dest;\n      pvVar14 = (void *)*plVar11;\n      if (1 < *(byte *)((long)param_1 + 0x10e)) {\n        for (plVar4 = (long *)param_1[0x32]; plVar4 != (long *)0x0; plVar4 = (long *)plVar4[3]) {\n          if (pvVar14 == (void *)*plVar4) {\n            *plVar4 = (long)__dest;\n            pvVar14 = (void *)*plVar11;\n            break;\n          }\n        }\n      }\n      iVar15 = iVar15 + 1;\n      plVar11 = plVar11 + 4;\n      memcpy(__dest,pvVar14,__n);\n      plVar17 = plVar17 + 2;\n      *puVar16 = 0;\n      __dest = __dest + lVar8;\n    }" { (if_statement "if ((char *)*plVar11 == (char *)0x0) {\n        lVar8 = 1;\n        __n = 0;\n        puVar16 = __dest;\n      }\n      else {\n        sVar10 = strlen((char *)*plVar11);\n        __n = (ulong)((uint)sVar10 & 0x3fffffff);\n        lVar8 = __n + 1;\n        puVar16 = __dest + __n;\n      }" if (parenthesized_expression "((char *)*plVar11 == (char *)0x0)" ( (binary_expression "(char *)*plVar11 == (char *)0x0" (cast_expression "(char *)*plVar11" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*plVar11" * identifier)) == (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        lVar8 = 1;\n        __n = 0;\n        puVar16 = __dest;\n      }" { (expression_statement "lVar8 = 1;" (assignment_expression "lVar8 = 1" identifier = number_literal) ;) (expression_statement "__n = 0;" (assignment_expression "__n = 0" identifier = number_literal) ;) (expression_statement "puVar16 = __dest;" (assignment_expression "puVar16 = __dest" identifier = identifier) ;) }) (else_clause "else {\n        sVar10 = strlen((char *)*plVar11);\n        __n = (ulong)((uint)sVar10 & 0x3fffffff);\n        lVar8 = __n + 1;\n        puVar16 = __dest + __n;\n      }" else (compound_statement "{\n        sVar10 = strlen((char *)*plVar11);\n        __n = (ulong)((uint)sVar10 & 0x3fffffff);\n        lVar8 = __n + 1;\n        puVar16 = __dest + __n;\n      }" { (expression_statement "sVar10 = strlen((char *)*plVar11);" (assignment_expression "sVar10 = strlen((char *)*plVar11)" identifier = (call_expression "strlen((char *)*plVar11)" identifier (argument_list "((char *)*plVar11)" ( (cast_expression "(char *)*plVar11" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*plVar11" * identifier)) )))) ;) (expression_statement "__n = (ulong)((uint)sVar10 & 0x3fffffff);" (assignment_expression "__n = (ulong)((uint)sVar10 & 0x3fffffff)" identifier = (call_expression "(ulong)((uint)sVar10 & 0x3fffffff)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "((uint)sVar10 & 0x3fffffff)" ( (binary_expression "(uint)sVar10 & 0x3fffffff" (cast_expression "(uint)sVar10" ( (type_descriptor "uint" type_identifier) ) identifier) & number_literal) )))) ;) (expression_statement "lVar8 = __n + 1;" (assignment_expression "lVar8 = __n + 1" identifier = (binary_expression "__n + 1" identifier + number_literal)) ;) (expression_statement "puVar16 = __dest + __n;" (assignment_expression "puVar16 = __dest + __n" identifier = (binary_expression "__dest + __n" identifier + identifier)) ;) }))) (expression_statement "*plVar17 = (long)__dest;" (assignment_expression "*plVar17 = (long)__dest" (pointer_expression "*plVar17" * identifier) = (cast_expression "(long)__dest" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) ;) (expression_statement "pvVar14 = (void *)*plVar11;" (assignment_expression "pvVar14 = (void *)*plVar11" identifier = (cast_expression "(void *)*plVar11" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*plVar11" * identifier))) ;) (if_statement "if (1 < *(byte *)((long)param_1 + 0x10e)) {\n        for (plVar4 = (long *)param_1[0x32]; plVar4 != (long *)0x0; plVar4 = (long *)plVar4[3]) {\n          if (pvVar14 == (void *)*plVar4) {\n            *plVar4 = (long)__dest;\n            pvVar14 = (void *)*plVar11;\n            break;\n          }\n        }\n      }" if (parenthesized_expression "(1 < *(byte *)((long)param_1 + 0x10e))" ( (binary_expression "1 < *(byte *)((long)param_1 + 0x10e)" number_literal < (pointer_expression "*(byte *)((long)param_1 + 0x10e)" * (cast_expression "(byte *)((long)param_1 + 0x10e)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_1 + 0x10e)" ( (binary_expression "(long)param_1 + 0x10e" (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) ))))) )) (compound_statement "{\n        for (plVar4 = (long *)param_1[0x32]; plVar4 != (long *)0x0; plVar4 = (long *)plVar4[3]) {\n          if (pvVar14 == (void *)*plVar4) {\n            *plVar4 = (long)__dest;\n            pvVar14 = (void *)*plVar11;\n            break;\n          }\n        }\n      }" { (for_statement "for (plVar4 = (long *)param_1[0x32]; plVar4 != (long *)0x0; plVar4 = (long *)plVar4[3]) {\n          if (pvVar14 == (void *)*plVar4) {\n            *plVar4 = (long)__dest;\n            pvVar14 = (void *)*plVar11;\n            break;\n          }\n        }" for ( (assignment_expression "plVar4 = (long *)param_1[0x32]" identifier = (cast_expression "(long *)param_1[0x32]" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[0x32]" identifier [ number_literal ]))) ; (binary_expression "plVar4 != (long *)0x0" identifier != (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) ; (assignment_expression "plVar4 = (long *)plVar4[3]" identifier = (cast_expression "(long *)plVar4[3]" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (subscript_expression "plVar4[3]" identifier [ number_literal ]))) ) (compound_statement "{\n          if (pvVar14 == (void *)*plVar4) {\n            *plVar4 = (long)__dest;\n            pvVar14 = (void *)*plVar11;\n            break;\n          }\n        }" { (if_statement "if (pvVar14 == (void *)*plVar4) {\n            *plVar4 = (long)__dest;\n            pvVar14 = (void *)*plVar11;\n            break;\n          }" if (parenthesized_expression "(pvVar14 == (void *)*plVar4)" ( (binary_expression "pvVar14 == (void *)*plVar4" identifier == (cast_expression "(void *)*plVar4" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*plVar4" * identifier))) )) (compound_statement "{\n            *plVar4 = (long)__dest;\n            pvVar14 = (void *)*plVar11;\n            break;\n          }" { (expression_statement "*plVar4 = (long)__dest;" (assignment_expression "*plVar4 = (long)__dest" (pointer_expression "*plVar4" * identifier) = (cast_expression "(long)__dest" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) ;) (expression_statement "pvVar14 = (void *)*plVar11;" (assignment_expression "pvVar14 = (void *)*plVar11" identifier = (cast_expression "(void *)*plVar11" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*plVar11" * identifier))) ;) (break_statement "break;" break ;) })) })) })) (expression_statement "iVar15 = iVar15 + 1;" (assignment_expression "iVar15 = iVar15 + 1" identifier = (binary_expression "iVar15 + 1" identifier + number_literal)) ;) (expression_statement "plVar11 = plVar11 + 4;" (assignment_expression "plVar11 = plVar11 + 4" identifier = (binary_expression "plVar11 + 4" identifier + number_literal)) ;) (expression_statement "memcpy(__dest,pvVar14,__n);" (call_expression "memcpy(__dest,pvVar14,__n)" identifier (argument_list "(__dest,pvVar14,__n)" ( identifier , identifier , identifier ))) ;) (expression_statement "plVar17 = plVar17 + 2;" (assignment_expression "plVar17 = plVar17 + 2" identifier = (binary_expression "plVar17 + 2" identifier + number_literal)) ;) (expression_statement "*puVar16 = 0;" (assignment_expression "*puVar16 = 0" (pointer_expression "*puVar16" * identifier) = number_literal) ;) (expression_statement "__dest = __dest + lVar8;" (assignment_expression "__dest = __dest + lVar8" identifier = (binary_expression "__dest + lVar8" identifier + identifier)) ;) }) while (parenthesized_expression "(iVar15 < local_50)" ( (binary_expression "iVar15 < local_50" identifier < identifier) )) ;) }))) (labeled_statement "LAB_0014c064:\n  *(undefined1 *)((long)plVar7 + 0x2c) = 0;" statement_identifier : (expression_statement "*(undefined1 *)((long)plVar7 + 0x2c) = 0;" (assignment_expression "*(undefined1 *)((long)plVar7 + 0x2c) = 0" (pointer_expression "*(undefined1 *)((long)plVar7 + 0x2c)" * (cast_expression "(undefined1 *)((long)plVar7 + 0x2c)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)plVar7 + 0x2c)" ( (binary_expression "(long)plVar7 + 0x2c" (cast_expression "(long)plVar7" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) = number_literal) ;)) (expression_statement "*(undefined2 *)((long)plVar7 + 0x2d) = param_5;" (assignment_expression "*(undefined2 *)((long)plVar7 + 0x2d) = param_5" (pointer_expression "*(undefined2 *)((long)plVar7 + 0x2d)" * (cast_expression "(undefined2 *)((long)plVar7 + 0x2d)" ( (type_descriptor "undefined2 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)plVar7 + 0x2d)" ( (binary_expression "(long)plVar7 + 0x2d" (cast_expression "(long)plVar7" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) = identifier) ;) (expression_statement "plVar11 = (long *)FUN_0011da30(*(long *)(lVar3 + 0x70) + 0x50,plVar7[2],plVar7);" (assignment_expression "plVar11 = (long *)FUN_0011da30(*(long *)(lVar3 + 0x70) + 0x50,plVar7[2],plVar7)" identifier = (cast_expression "(long *)FUN_0011da30(*(long *)(lVar3 + 0x70) + 0x50,plVar7[2],plVar7)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_0011da30(*(long *)(lVar3 + 0x70) + 0x50,plVar7[2],plVar7)" identifier (argument_list "(*(long *)(lVar3 + 0x70) + 0x50,plVar7[2],plVar7)" ( (binary_expression "*(long *)(lVar3 + 0x70) + 0x50" (pointer_expression "*(long *)(lVar3 + 0x70)" * (cast_expression "(long *)(lVar3 + 0x70)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar3 + 0x70)" ( (binary_expression "lVar3 + 0x70" identifier + number_literal) )))) + number_literal) , (subscript_expression "plVar7[2]" identifier [ number_literal ]) , identifier ))))) ;) (if_statement "if (plVar11 == plVar7) {\n    if ((*(uint *)(lVar2 + 0x60) & 0xffff00) == 0) {\n      FUN_0011b860(lVar2);\n    }\nLAB_0014bead:\n    FUN_00119e90(lVar2,plVar7);\n  }\n  else {\n    if (plVar11 != (long *)0x0) {\n      plVar7[3] = (long)plVar11;\n      plVar11[4] = (long)plVar7;\n    }\n    *(long **)(lVar3 + 0x20) = plVar7;\n  }" if (parenthesized_expression "(plVar11 == plVar7)" ( (binary_expression "plVar11 == plVar7" identifier == identifier) )) (compound_statement "{\n    if ((*(uint *)(lVar2 + 0x60) & 0xffff00) == 0) {\n      FUN_0011b860(lVar2);\n    }\nLAB_0014bead:\n    FUN_00119e90(lVar2,plVar7);\n  }" { (if_statement "if ((*(uint *)(lVar2 + 0x60) & 0xffff00) == 0) {\n      FUN_0011b860(lVar2);\n    }" if (parenthesized_expression "((*(uint *)(lVar2 + 0x60) & 0xffff00) == 0)" ( (binary_expression "(*(uint *)(lVar2 + 0x60) & 0xffff00) == 0" (parenthesized_expression "(*(uint *)(lVar2 + 0x60) & 0xffff00)" ( (binary_expression "*(uint *)(lVar2 + 0x60) & 0xffff00" (pointer_expression "*(uint *)(lVar2 + 0x60)" * (cast_expression "(uint *)(lVar2 + 0x60)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar2 + 0x60)" ( (binary_expression "lVar2 + 0x60" identifier + number_literal) )))) & number_literal) )) == number_literal) )) (compound_statement "{\n      FUN_0011b860(lVar2);\n    }" { (expression_statement "FUN_0011b860(lVar2);" (call_expression "FUN_0011b860(lVar2)" identifier (argument_list "(lVar2)" ( identifier ))) ;) })) (labeled_statement "LAB_0014bead:\n    FUN_00119e90(lVar2,plVar7);" statement_identifier : (expression_statement "FUN_00119e90(lVar2,plVar7);" (call_expression "FUN_00119e90(lVar2,plVar7)" identifier (argument_list "(lVar2,plVar7)" ( identifier , identifier ))) ;)) }) (else_clause "else {\n    if (plVar11 != (long *)0x0) {\n      plVar7[3] = (long)plVar11;\n      plVar11[4] = (long)plVar7;\n    }\n    *(long **)(lVar3 + 0x20) = plVar7;\n  }" else (compound_statement "{\n    if (plVar11 != (long *)0x0) {\n      plVar7[3] = (long)plVar11;\n      plVar11[4] = (long)plVar7;\n    }\n    *(long **)(lVar3 + 0x20) = plVar7;\n  }" { (if_statement "if (plVar11 != (long *)0x0) {\n      plVar7[3] = (long)plVar11;\n      plVar11[4] = (long)plVar7;\n    }" if (parenthesized_expression "(plVar11 != (long *)0x0)" ( (binary_expression "plVar11 != (long *)0x0" identifier != (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      plVar7[3] = (long)plVar11;\n      plVar11[4] = (long)plVar7;\n    }" { (expression_statement "plVar7[3] = (long)plVar11;" (assignment_expression "plVar7[3] = (long)plVar11" (subscript_expression "plVar7[3]" identifier [ number_literal ]) = (cast_expression "(long)plVar11" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) ;) (expression_statement "plVar11[4] = (long)plVar7;" (assignment_expression "plVar11[4] = (long)plVar7" (subscript_expression "plVar11[4]" identifier [ number_literal ]) = (cast_expression "(long)plVar7" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) ;) })) (expression_statement "*(long **)(lVar3 + 0x20) = plVar7;" (assignment_expression "*(long **)(lVar3 + 0x20) = plVar7" (pointer_expression "*(long **)(lVar3 + 0x20)" * (cast_expression "(long **)(lVar3 + 0x20)" ( (type_descriptor "long **" (sized_type_specifier "long" long) (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(lVar3 + 0x20)" ( (binary_expression "lVar3 + 0x20" identifier + number_literal) )))) = identifier) ;) }))) (labeled_statement "joined_r0x0014bec0:\n  if (param_2 != (int *)0x0) {\nLAB_0014bec2:\n    FUN_0012cc80(lVar2,param_2);\n  }" statement_identifier : (if_statement "if (param_2 != (int *)0x0) {\nLAB_0014bec2:\n    FUN_0012cc80(lVar2,param_2);\n  }" if (parenthesized_expression "(param_2 != (int *)0x0)" ( (binary_expression "param_2 != (int *)0x0" identifier != (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\nLAB_0014bec2:\n    FUN_0012cc80(lVar2,param_2);\n  }" { (labeled_statement "LAB_0014bec2:\n    FUN_0012cc80(lVar2,param_2);" statement_identifier : (expression_statement "FUN_0012cc80(lVar2,param_2);" (call_expression "FUN_0012cc80(lVar2,param_2)" identifier (argument_list "(lVar2,param_2)" ( identifier , identifier ))) ;)) }))) (goto_statement "goto LAB_0014bed1;" goto statement_identifier ;) })))
(translation_unit "void sqlite3CreateForeignKey(Parse *pParse,ExprList *pFromCol,Token *pTo,ExprList *pToCol,int flags)\n\n{\n  byte bVar1;\n  uint uVar2;\n  sqlite3 *db;\n  Table *pTVar3;\n  undefined4 uVar4;\n  FKey *data;\n  long lVar5;\n  long lVar6;\n  size_t sVar7;\n  ulong __n;\n  FKey *pFVar8;\n  RenameToken *pRVar9;\n  byte *pbVar10;\n  int iVar11;\n  char *__src;\n  Column *pCVar12;\n  int iVar13;\n  u8 *puVar14;\n  char **ppcVar15;\n  int iVar16;\n  u8 *puVar17;\n  char **ppcVar18;\n  int local_50;\n  undefined2 local_4c;\n  \n  db = pParse->db;\n  pTVar3 = pParse->pNewTable;\n  if ((pTVar3 == (Table *)0x0) || (pParse->eParseMode == '\x01')) goto joined_r0x0014bec0;\n  if (pFromCol != (ExprList *)0x0) {\n    local_50 = pFromCol->nExpr;\n    if (pToCol == (ExprList *)0x0) {\n      data = (FKey *)sqlite3DbMallocZero(db,(long)(int)(local_50 * 0x10 + 0x41 + pTo->n));\n      if (data != (FKey *)0x0) {\n        lVar5 = ((long)local_50 + 4) * 0x10;\n        goto LAB_0014bd94;\n      }\n    }\n    else {\n      iVar13 = pToCol->nExpr;\n      if (iVar13 == local_50) {\n        iVar11 = iVar13 * 0x10 + 0x41 + pTo->n;\n        if (0 < iVar13) goto LAB_0014bd06;\n        goto LAB_0014bd6e;\n      }\n      sqlite3ErrorMsg(pParse,\n                      "number of columns in foreign key does not match the number of columns in the referenced table"\n                     );\n    }\n    goto LAB_0014bec2;\n  }\n  iVar13 = pTVar3->nCol + -1;\n  if (-1 < iVar13) {\n    if (pToCol == (ExprList *)0x0) {\n      data = (FKey *)sqlite3DbMallocZero(db,(long)(int)(pTo->n + 0x51));\n      if (data == (FKey *)0x0) {\n        return;\n      }\n      lVar5 = 0x50;\n      local_50 = 1;\n    }\n    else {\n      if (pToCol->nExpr != 1) {\n        sqlite3ErrorMsg(pParse,"foreign key on %s should reference only one column of table %T",\n                        pTVar3->aCol[iVar13].zName,pTo);\n        goto LAB_0014bed9;\n      }\n      local_50 = 1;\n      iVar11 = pTo->n + 0x51;\n      iVar13 = 1;\nLAB_0014bd06:\n      iVar16 = 0;\n      ppcVar18 = &pToCol->a[0].zName;\n      do {\n        while (*ppcVar18 != (char *)0x0) {\n          sVar7 = strlen(*ppcVar18);\n          iVar16 = iVar16 + 1;\n          ppcVar18 = ppcVar18 + 4;\n          iVar11 = iVar11 + ((uint)sVar7 & 0x3fffffff) + 1;\n          if (iVar13 <= iVar16) goto LAB_0014bd6e;\n        }\n        iVar16 = iVar16 + 1;\n        ppcVar18 = ppcVar18 + 4;\n        iVar11 = iVar11 + 1;\n      } while (iVar16 < iVar13);\nLAB_0014bd6e:\n      data = (FKey *)sqlite3DbMallocZero(db,(long)iVar11);\n      if (data == (FKey *)0x0) goto joined_r0x0014bec0;\n      lVar5 = ((long)local_50 + 4) * 0x10;\n    }\nLAB_0014bd94:\n    data->pFrom = pTVar3;\n    pFVar8 = pTVar3->pFKey;\n    puVar17 = data->aAction + lVar5 + -0x2d;\n    data->zTo = (char *)puVar17;\n    data->pNextFrom = pFVar8;\n    if ((1 < pParse->eParseMode) &&\n       (pRVar9 = (RenameToken *)sqlite3DbMallocZero(pParse->db,0x20), pRVar9 != (RenameToken *)0x0))\n    {\n      pRVar9->p = puVar17;\n      uVar2 = pTo->n;\n      uVar4 = *(undefined4 *)&pTo->field_0xc;\n      (pRVar9->t).z = pTo->z;\n      (pRVar9->t).n = uVar2;\n      *(undefined4 *)&(pRVar9->t).field_0xc = uVar4;\n      pRVar9->pNext = pParse->pRename;\n      pParse->pRename = pRVar9;\n    }\n    memcpy(puVar17,pTo->z,(ulong)pTo->n);\n    puVar17[pTo->n] = '\0';\n    sqlite3Dequote((char *)puVar17);\n    uVar2 = pTo->n;\n    data->nCol = local_50;\n    if (pFromCol == (ExprList *)0x0) {\n      data->aCol[0].iFrom = pTVar3->nCol + -1;\n      if ((pToCol != (ExprList *)0x0) && (0 < local_50)) goto LAB_0014bf4f;\n    }\n    else {\n      lVar5 = 0x40;\n      if (0 < local_50) {\n        iVar13 = 0;\nLAB_0014be20:\n        pbVar10 = *(byte **)((long)pFromCol->a + lVar5 * 2 + -0x78);\n        if (0 < pTVar3->nCol) {\n          pCVar12 = pTVar3->aCol;\n          iVar11 = 0;\n          do {\n            bVar1 = *pCVar12->zName;\n            if (""[bVar1] == ""[*pbVar10]) {\n              if (bVar1 == 0) goto LAB_0014bf08;\n              lVar6 = 1;\n              while (bVar1 = pCVar12->zName[lVar6], ""[bVar1] == ""[pbVar10[lVar6]]) {\n                lVar6 = lVar6 + 1;\n                if (bVar1 == 0) goto LAB_0014bf08;\n              }\n            }\n            iVar11 = iVar11 + 1;\n            pCVar12 = pCVar12 + 1;\n            if (iVar11 == pTVar3->nCol) break;\n          } while( true );\n        }\n        goto LAB_0014be9c;\n      }\n    }\n    goto LAB_0014c064;\n  }\nLAB_0014bed1:\n  if (pToCol == (ExprList *)0x0) {\n    return;\n  }\nLAB_0014bed9:\n  exprListDeleteNN(db,pToCol);\n  return;\nLAB_0014bf08:\n  *(int *)(data->aAction + lVar5 + -0x2d) = iVar11;\n  if (pTVar3->nCol <= iVar11) {\n    pbVar10 = (byte *)pFromCol->a[iVar13].zName;\nLAB_0014be9c:\n    sqlite3ErrorMsg(pParse,"unknown column \"%s\" in foreign key definition",pbVar10);\n    goto LAB_0014bead;\n  }\n  if (1 < pParse->eParseMode) {\n    for (pRVar9 = pParse->pRename; pRVar9 != (RenameToken *)0x0; pRVar9 = pRVar9->pNext) {\n      if (*(void **)((long)pFromCol->a + lVar5 * 2 + -0x78) == pRVar9->p) {\n        pRVar9->p = data->aAction + lVar5 + -0x2d;\n        break;\n      }\n    }\n  }\n  iVar13 = iVar13 + 1;\n  lVar5 = lVar5 + 0x10;\n  if (iVar13 == local_50) goto code_r0x0014bf3e;\n  goto LAB_0014be20;\ncode_r0x0014bf3e:\n  if (pToCol != (ExprList *)0x0) {\nLAB_0014bf4f:\n    ppcVar15 = &data->aCol[0].zCol;\n    ppcVar18 = &pToCol->a[0].zName;\n    iVar13 = 0;\n    puVar17 = puVar17 + (uVar2 + 1);\n    do {\n      if (*ppcVar18 == (char *)0x0) {\n        lVar5 = 1;\n        __n = 0;\n        puVar14 = puVar17;\n      }\n      else {\n        sVar7 = strlen(*ppcVar18);\n        __n = (ulong)((uint)sVar7 & 0x3fffffff);\n        lVar5 = __n + 1;\n        puVar14 = puVar17 + __n;\n      }\n      *ppcVar15 = (char *)puVar17;\n      __src = *ppcVar18;\n      if (1 < pParse->eParseMode) {\n        for (pRVar9 = pParse->pRename; pRVar9 != (RenameToken *)0x0; pRVar9 = pRVar9->pNext) {\n          if (__src == (char *)pRVar9->p) {\n            pRVar9->p = puVar17;\n            __src = *ppcVar18;\n            break;\n          }\n        }\n      }\n      iVar13 = iVar13 + 1;\n      ppcVar18 = ppcVar18 + 4;\n      memcpy(puVar17,__src,__n);\n      ppcVar15 = ppcVar15 + 2;\n      *puVar14 = '\0';\n      puVar17 = puVar17 + lVar5;\n    } while (iVar13 < local_50);\n  }\nLAB_0014c064:\n  local_4c = (undefined2)flags;\n  data->isDeferred = '\0';\n  *(undefined2 *)data->aAction = local_4c;\n  pFVar8 = (FKey *)sqlite3HashInsert(&pTVar3->pSchema->fkeyHash,data->zTo,data);\n  if (pFVar8 == data) {\n    uVar2._0_1_ = db->temp_store;\n    uVar2._1_1_ = db->mallocFailed;\n    uVar2._2_1_ = db->bBenignMalloc;\n    uVar2._3_1_ = db->dfltLockMode;\n    if ((uVar2 & 0xffff00) == 0) {\n      sqlite3OomFault(db);\n    }\nLAB_0014bead:\n    sqlite3DbFreeNN(db,data);\n  }\n  else {\n    if (pFVar8 != (FKey *)0x0) {\n      data->pNextTo = pFVar8;\n      pFVar8->pPrevTo = data;\n    }\n    pTVar3->pFKey = data;\n  }\njoined_r0x0014bec0:\n  if (pFromCol != (ExprList *)0x0) {\nLAB_0014bec2:\n    exprListDeleteNN(db,pFromCol);\n  }\n  goto LAB_0014bed1;\n}\n\n" (function_definition "void sqlite3CreateForeignKey(Parse *pParse,ExprList *pFromCol,Token *pTo,ExprList *pToCol,int flags)\n\n{\n  byte bVar1;\n  uint uVar2;\n  sqlite3 *db;\n  Table *pTVar3;\n  undefined4 uVar4;\n  FKey *data;\n  long lVar5;\n  long lVar6;\n  size_t sVar7;\n  ulong __n;\n  FKey *pFVar8;\n  RenameToken *pRVar9;\n  byte *pbVar10;\n  int iVar11;\n  char *__src;\n  Column *pCVar12;\n  int iVar13;\n  u8 *puVar14;\n  char **ppcVar15;\n  int iVar16;\n  u8 *puVar17;\n  char **ppcVar18;\n  int local_50;\n  undefined2 local_4c;\n  \n  db = pParse->db;\n  pTVar3 = pParse->pNewTable;\n  if ((pTVar3 == (Table *)0x0) || (pParse->eParseMode == '\x01')) goto joined_r0x0014bec0;\n  if (pFromCol != (ExprList *)0x0) {\n    local_50 = pFromCol->nExpr;\n    if (pToCol == (ExprList *)0x0) {\n      data = (FKey *)sqlite3DbMallocZero(db,(long)(int)(local_50 * 0x10 + 0x41 + pTo->n));\n      if (data != (FKey *)0x0) {\n        lVar5 = ((long)local_50 + 4) * 0x10;\n        goto LAB_0014bd94;\n      }\n    }\n    else {\n      iVar13 = pToCol->nExpr;\n      if (iVar13 == local_50) {\n        iVar11 = iVar13 * 0x10 + 0x41 + pTo->n;\n        if (0 < iVar13) goto LAB_0014bd06;\n        goto LAB_0014bd6e;\n      }\n      sqlite3ErrorMsg(pParse,\n                      "number of columns in foreign key does not match the number of columns in the referenced table"\n                     );\n    }\n    goto LAB_0014bec2;\n  }\n  iVar13 = pTVar3->nCol + -1;\n  if (-1 < iVar13) {\n    if (pToCol == (ExprList *)0x0) {\n      data = (FKey *)sqlite3DbMallocZero(db,(long)(int)(pTo->n + 0x51));\n      if (data == (FKey *)0x0) {\n        return;\n      }\n      lVar5 = 0x50;\n      local_50 = 1;\n    }\n    else {\n      if (pToCol->nExpr != 1) {\n        sqlite3ErrorMsg(pParse,"foreign key on %s should reference only one column of table %T",\n                        pTVar3->aCol[iVar13].zName,pTo);\n        goto LAB_0014bed9;\n      }\n      local_50 = 1;\n      iVar11 = pTo->n + 0x51;\n      iVar13 = 1;\nLAB_0014bd06:\n      iVar16 = 0;\n      ppcVar18 = &pToCol->a[0].zName;\n      do {\n        while (*ppcVar18 != (char *)0x0) {\n          sVar7 = strlen(*ppcVar18);\n          iVar16 = iVar16 + 1;\n          ppcVar18 = ppcVar18 + 4;\n          iVar11 = iVar11 + ((uint)sVar7 & 0x3fffffff) + 1;\n          if (iVar13 <= iVar16) goto LAB_0014bd6e;\n        }\n        iVar16 = iVar16 + 1;\n        ppcVar18 = ppcVar18 + 4;\n        iVar11 = iVar11 + 1;\n      } while (iVar16 < iVar13);\nLAB_0014bd6e:\n      data = (FKey *)sqlite3DbMallocZero(db,(long)iVar11);\n      if (data == (FKey *)0x0) goto joined_r0x0014bec0;\n      lVar5 = ((long)local_50 + 4) * 0x10;\n    }\nLAB_0014bd94:\n    data->pFrom = pTVar3;\n    pFVar8 = pTVar3->pFKey;\n    puVar17 = data->aAction + lVar5 + -0x2d;\n    data->zTo = (char *)puVar17;\n    data->pNextFrom = pFVar8;\n    if ((1 < pParse->eParseMode) &&\n       (pRVar9 = (RenameToken *)sqlite3DbMallocZero(pParse->db,0x20), pRVar9 != (RenameToken *)0x0))\n    {\n      pRVar9->p = puVar17;\n      uVar2 = pTo->n;\n      uVar4 = *(undefined4 *)&pTo->field_0xc;\n      (pRVar9->t).z = pTo->z;\n      (pRVar9->t).n = uVar2;\n      *(undefined4 *)&(pRVar9->t).field_0xc = uVar4;\n      pRVar9->pNext = pParse->pRename;\n      pParse->pRename = pRVar9;\n    }\n    memcpy(puVar17,pTo->z,(ulong)pTo->n);\n    puVar17[pTo->n] = '\0';\n    sqlite3Dequote((char *)puVar17);\n    uVar2 = pTo->n;\n    data->nCol = local_50;\n    if (pFromCol == (ExprList *)0x0) {\n      data->aCol[0].iFrom = pTVar3->nCol + -1;\n      if ((pToCol != (ExprList *)0x0) && (0 < local_50)) goto LAB_0014bf4f;\n    }\n    else {\n      lVar5 = 0x40;\n      if (0 < local_50) {\n        iVar13 = 0;\nLAB_0014be20:\n        pbVar10 = *(byte **)((long)pFromCol->a + lVar5 * 2 + -0x78);\n        if (0 < pTVar3->nCol) {\n          pCVar12 = pTVar3->aCol;\n          iVar11 = 0;\n          do {\n            bVar1 = *pCVar12->zName;\n            if (""[bVar1] == ""[*pbVar10]) {\n              if (bVar1 == 0) goto LAB_0014bf08;\n              lVar6 = 1;\n              while (bVar1 = pCVar12->zName[lVar6], ""[bVar1] == ""[pbVar10[lVar6]]) {\n                lVar6 = lVar6 + 1;\n                if (bVar1 == 0) goto LAB_0014bf08;\n              }\n            }\n            iVar11 = iVar11 + 1;\n            pCVar12 = pCVar12 + 1;\n            if (iVar11 == pTVar3->nCol) break;\n          } while( true );\n        }\n        goto LAB_0014be9c;\n      }\n    }\n    goto LAB_0014c064;\n  }\nLAB_0014bed1:\n  if (pToCol == (ExprList *)0x0) {\n    return;\n  }\nLAB_0014bed9:\n  exprListDeleteNN(db,pToCol);\n  return;\nLAB_0014bf08:\n  *(int *)(data->aAction + lVar5 + -0x2d) = iVar11;\n  if (pTVar3->nCol <= iVar11) {\n    pbVar10 = (byte *)pFromCol->a[iVar13].zName;\nLAB_0014be9c:\n    sqlite3ErrorMsg(pParse,"unknown column \"%s\" in foreign key definition",pbVar10);\n    goto LAB_0014bead;\n  }\n  if (1 < pParse->eParseMode) {\n    for (pRVar9 = pParse->pRename; pRVar9 != (RenameToken *)0x0; pRVar9 = pRVar9->pNext) {\n      if (*(void **)((long)pFromCol->a + lVar5 * 2 + -0x78) == pRVar9->p) {\n        pRVar9->p = data->aAction + lVar5 + -0x2d;\n        break;\n      }\n    }\n  }\n  iVar13 = iVar13 + 1;\n  lVar5 = lVar5 + 0x10;\n  if (iVar13 == local_50) goto code_r0x0014bf3e;\n  goto LAB_0014be20;\ncode_r0x0014bf3e:\n  if (pToCol != (ExprList *)0x0) {\nLAB_0014bf4f:\n    ppcVar15 = &data->aCol[0].zCol;\n    ppcVar18 = &pToCol->a[0].zName;\n    iVar13 = 0;\n    puVar17 = puVar17 + (uVar2 + 1);\n    do {\n      if (*ppcVar18 == (char *)0x0) {\n        lVar5 = 1;\n        __n = 0;\n        puVar14 = puVar17;\n      }\n      else {\n        sVar7 = strlen(*ppcVar18);\n        __n = (ulong)((uint)sVar7 & 0x3fffffff);\n        lVar5 = __n + 1;\n        puVar14 = puVar17 + __n;\n      }\n      *ppcVar15 = (char *)puVar17;\n      __src = *ppcVar18;\n      if (1 < pParse->eParseMode) {\n        for (pRVar9 = pParse->pRename; pRVar9 != (RenameToken *)0x0; pRVar9 = pRVar9->pNext) {\n          if (__src == (char *)pRVar9->p) {\n            pRVar9->p = puVar17;\n            __src = *ppcVar18;\n            break;\n          }\n        }\n      }\n      iVar13 = iVar13 + 1;\n      ppcVar18 = ppcVar18 + 4;\n      memcpy(puVar17,__src,__n);\n      ppcVar15 = ppcVar15 + 2;\n      *puVar14 = '\0';\n      puVar17 = puVar17 + lVar5;\n    } while (iVar13 < local_50);\n  }\nLAB_0014c064:\n  local_4c = (undefined2)flags;\n  data->isDeferred = '\0';\n  *(undefined2 *)data->aAction = local_4c;\n  pFVar8 = (FKey *)sqlite3HashInsert(&pTVar3->pSchema->fkeyHash,data->zTo,data);\n  if (pFVar8 == data) {\n    uVar2._0_1_ = db->temp_store;\n    uVar2._1_1_ = db->mallocFailed;\n    uVar2._2_1_ = db->bBenignMalloc;\n    uVar2._3_1_ = db->dfltLockMode;\n    if ((uVar2 & 0xffff00) == 0) {\n      sqlite3OomFault(db);\n    }\nLAB_0014bead:\n    sqlite3DbFreeNN(db,data);\n  }\n  else {\n    if (pFVar8 != (FKey *)0x0) {\n      data->pNextTo = pFVar8;\n      pFVar8->pPrevTo = data;\n    }\n    pTVar3->pFKey = data;\n  }\njoined_r0x0014bec0:\n  if (pFromCol != (ExprList *)0x0) {\nLAB_0014bec2:\n    exprListDeleteNN(db,pFromCol);\n  }\n  goto LAB_0014bed1;\n}" primitive_type (function_declarator "sqlite3CreateForeignKey(Parse *pParse,ExprList *pFromCol,Token *pTo,ExprList *pToCol,int flags)" identifier (parameter_list "(Parse *pParse,ExprList *pFromCol,Token *pTo,ExprList *pToCol,int flags)" ( (parameter_declaration "Parse *pParse" type_identifier (pointer_declarator "*pParse" * identifier)) , (parameter_declaration "ExprList *pFromCol" type_identifier (pointer_declarator "*pFromCol" * identifier)) , (parameter_declaration "Token *pTo" type_identifier (pointer_declarator "*pTo" * identifier)) , (parameter_declaration "ExprList *pToCol" type_identifier (pointer_declarator "*pToCol" * identifier)) , (parameter_declaration "int flags" primitive_type identifier) ))) (compound_statement "{\n  byte bVar1;\n  uint uVar2;\n  sqlite3 *db;\n  Table *pTVar3;\n  undefined4 uVar4;\n  FKey *data;\n  long lVar5;\n  long lVar6;\n  size_t sVar7;\n  ulong __n;\n  FKey *pFVar8;\n  RenameToken *pRVar9;\n  byte *pbVar10;\n  int iVar11;\n  char *__src;\n  Column *pCVar12;\n  int iVar13;\n  u8 *puVar14;\n  char **ppcVar15;\n  int iVar16;\n  u8 *puVar17;\n  char **ppcVar18;\n  int local_50;\n  undefined2 local_4c;\n  \n  db = pParse->db;\n  pTVar3 = pParse->pNewTable;\n  if ((pTVar3 == (Table *)0x0) || (pParse->eParseMode == '\x01')) goto joined_r0x0014bec0;\n  if (pFromCol != (ExprList *)0x0) {\n    local_50 = pFromCol->nExpr;\n    if (pToCol == (ExprList *)0x0) {\n      data = (FKey *)sqlite3DbMallocZero(db,(long)(int)(local_50 * 0x10 + 0x41 + pTo->n));\n      if (data != (FKey *)0x0) {\n        lVar5 = ((long)local_50 + 4) * 0x10;\n        goto LAB_0014bd94;\n      }\n    }\n    else {\n      iVar13 = pToCol->nExpr;\n      if (iVar13 == local_50) {\n        iVar11 = iVar13 * 0x10 + 0x41 + pTo->n;\n        if (0 < iVar13) goto LAB_0014bd06;\n        goto LAB_0014bd6e;\n      }\n      sqlite3ErrorMsg(pParse,\n                      "number of columns in foreign key does not match the number of columns in the referenced table"\n                     );\n    }\n    goto LAB_0014bec2;\n  }\n  iVar13 = pTVar3->nCol + -1;\n  if (-1 < iVar13) {\n    if (pToCol == (ExprList *)0x0) {\n      data = (FKey *)sqlite3DbMallocZero(db,(long)(int)(pTo->n + 0x51));\n      if (data == (FKey *)0x0) {\n        return;\n      }\n      lVar5 = 0x50;\n      local_50 = 1;\n    }\n    else {\n      if (pToCol->nExpr != 1) {\n        sqlite3ErrorMsg(pParse,"foreign key on %s should reference only one column of table %T",\n                        pTVar3->aCol[iVar13].zName,pTo);\n        goto LAB_0014bed9;\n      }\n      local_50 = 1;\n      iVar11 = pTo->n + 0x51;\n      iVar13 = 1;\nLAB_0014bd06:\n      iVar16 = 0;\n      ppcVar18 = &pToCol->a[0].zName;\n      do {\n        while (*ppcVar18 != (char *)0x0) {\n          sVar7 = strlen(*ppcVar18);\n          iVar16 = iVar16 + 1;\n          ppcVar18 = ppcVar18 + 4;\n          iVar11 = iVar11 + ((uint)sVar7 & 0x3fffffff) + 1;\n          if (iVar13 <= iVar16) goto LAB_0014bd6e;\n        }\n        iVar16 = iVar16 + 1;\n        ppcVar18 = ppcVar18 + 4;\n        iVar11 = iVar11 + 1;\n      } while (iVar16 < iVar13);\nLAB_0014bd6e:\n      data = (FKey *)sqlite3DbMallocZero(db,(long)iVar11);\n      if (data == (FKey *)0x0) goto joined_r0x0014bec0;\n      lVar5 = ((long)local_50 + 4) * 0x10;\n    }\nLAB_0014bd94:\n    data->pFrom = pTVar3;\n    pFVar8 = pTVar3->pFKey;\n    puVar17 = data->aAction + lVar5 + -0x2d;\n    data->zTo = (char *)puVar17;\n    data->pNextFrom = pFVar8;\n    if ((1 < pParse->eParseMode) &&\n       (pRVar9 = (RenameToken *)sqlite3DbMallocZero(pParse->db,0x20), pRVar9 != (RenameToken *)0x0))\n    {\n      pRVar9->p = puVar17;\n      uVar2 = pTo->n;\n      uVar4 = *(undefined4 *)&pTo->field_0xc;\n      (pRVar9->t).z = pTo->z;\n      (pRVar9->t).n = uVar2;\n      *(undefined4 *)&(pRVar9->t).field_0xc = uVar4;\n      pRVar9->pNext = pParse->pRename;\n      pParse->pRename = pRVar9;\n    }\n    memcpy(puVar17,pTo->z,(ulong)pTo->n);\n    puVar17[pTo->n] = '\0';\n    sqlite3Dequote((char *)puVar17);\n    uVar2 = pTo->n;\n    data->nCol = local_50;\n    if (pFromCol == (ExprList *)0x0) {\n      data->aCol[0].iFrom = pTVar3->nCol + -1;\n      if ((pToCol != (ExprList *)0x0) && (0 < local_50)) goto LAB_0014bf4f;\n    }\n    else {\n      lVar5 = 0x40;\n      if (0 < local_50) {\n        iVar13 = 0;\nLAB_0014be20:\n        pbVar10 = *(byte **)((long)pFromCol->a + lVar5 * 2 + -0x78);\n        if (0 < pTVar3->nCol) {\n          pCVar12 = pTVar3->aCol;\n          iVar11 = 0;\n          do {\n            bVar1 = *pCVar12->zName;\n            if (""[bVar1] == ""[*pbVar10]) {\n              if (bVar1 == 0) goto LAB_0014bf08;\n              lVar6 = 1;\n              while (bVar1 = pCVar12->zName[lVar6], ""[bVar1] == ""[pbVar10[lVar6]]) {\n                lVar6 = lVar6 + 1;\n                if (bVar1 == 0) goto LAB_0014bf08;\n              }\n            }\n            iVar11 = iVar11 + 1;\n            pCVar12 = pCVar12 + 1;\n            if (iVar11 == pTVar3->nCol) break;\n          } while( true );\n        }\n        goto LAB_0014be9c;\n      }\n    }\n    goto LAB_0014c064;\n  }\nLAB_0014bed1:\n  if (pToCol == (ExprList *)0x0) {\n    return;\n  }\nLAB_0014bed9:\n  exprListDeleteNN(db,pToCol);\n  return;\nLAB_0014bf08:\n  *(int *)(data->aAction + lVar5 + -0x2d) = iVar11;\n  if (pTVar3->nCol <= iVar11) {\n    pbVar10 = (byte *)pFromCol->a[iVar13].zName;\nLAB_0014be9c:\n    sqlite3ErrorMsg(pParse,"unknown column \"%s\" in foreign key definition",pbVar10);\n    goto LAB_0014bead;\n  }\n  if (1 < pParse->eParseMode) {\n    for (pRVar9 = pParse->pRename; pRVar9 != (RenameToken *)0x0; pRVar9 = pRVar9->pNext) {\n      if (*(void **)((long)pFromCol->a + lVar5 * 2 + -0x78) == pRVar9->p) {\n        pRVar9->p = data->aAction + lVar5 + -0x2d;\n        break;\n      }\n    }\n  }\n  iVar13 = iVar13 + 1;\n  lVar5 = lVar5 + 0x10;\n  if (iVar13 == local_50) goto code_r0x0014bf3e;\n  goto LAB_0014be20;\ncode_r0x0014bf3e:\n  if (pToCol != (ExprList *)0x0) {\nLAB_0014bf4f:\n    ppcVar15 = &data->aCol[0].zCol;\n    ppcVar18 = &pToCol->a[0].zName;\n    iVar13 = 0;\n    puVar17 = puVar17 + (uVar2 + 1);\n    do {\n      if (*ppcVar18 == (char *)0x0) {\n        lVar5 = 1;\n        __n = 0;\n        puVar14 = puVar17;\n      }\n      else {\n        sVar7 = strlen(*ppcVar18);\n        __n = (ulong)((uint)sVar7 & 0x3fffffff);\n        lVar5 = __n + 1;\n        puVar14 = puVar17 + __n;\n      }\n      *ppcVar15 = (char *)puVar17;\n      __src = *ppcVar18;\n      if (1 < pParse->eParseMode) {\n        for (pRVar9 = pParse->pRename; pRVar9 != (RenameToken *)0x0; pRVar9 = pRVar9->pNext) {\n          if (__src == (char *)pRVar9->p) {\n            pRVar9->p = puVar17;\n            __src = *ppcVar18;\n            break;\n          }\n        }\n      }\n      iVar13 = iVar13 + 1;\n      ppcVar18 = ppcVar18 + 4;\n      memcpy(puVar17,__src,__n);\n      ppcVar15 = ppcVar15 + 2;\n      *puVar14 = '\0';\n      puVar17 = puVar17 + lVar5;\n    } while (iVar13 < local_50);\n  }\nLAB_0014c064:\n  local_4c = (undefined2)flags;\n  data->isDeferred = '\0';\n  *(undefined2 *)data->aAction = local_4c;\n  pFVar8 = (FKey *)sqlite3HashInsert(&pTVar3->pSchema->fkeyHash,data->zTo,data);\n  if (pFVar8 == data) {\n    uVar2._0_1_ = db->temp_store;\n    uVar2._1_1_ = db->mallocFailed;\n    uVar2._2_1_ = db->bBenignMalloc;\n    uVar2._3_1_ = db->dfltLockMode;\n    if ((uVar2 & 0xffff00) == 0) {\n      sqlite3OomFault(db);\n    }\nLAB_0014bead:\n    sqlite3DbFreeNN(db,data);\n  }\n  else {\n    if (pFVar8 != (FKey *)0x0) {\n      data->pNextTo = pFVar8;\n      pFVar8->pPrevTo = data;\n    }\n    pTVar3->pFKey = data;\n  }\njoined_r0x0014bec0:\n  if (pFromCol != (ExprList *)0x0) {\nLAB_0014bec2:\n    exprListDeleteNN(db,pFromCol);\n  }\n  goto LAB_0014bed1;\n}" { (declaration "byte bVar1;" type_identifier identifier ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "sqlite3 *db;" type_identifier (pointer_declarator "*db" * identifier) ;) (declaration "Table *pTVar3;" type_identifier (pointer_declarator "*pTVar3" * identifier) ;) (declaration "undefined4 uVar4;" type_identifier identifier ;) (declaration "FKey *data;" type_identifier (pointer_declarator "*data" * identifier) ;) (declaration "long lVar5;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar6;" (sized_type_specifier "long" long) identifier ;) (declaration "size_t sVar7;" primitive_type identifier ;) (declaration "ulong __n;" type_identifier identifier ;) (declaration "FKey *pFVar8;" type_identifier (pointer_declarator "*pFVar8" * identifier) ;) (declaration "RenameToken *pRVar9;" type_identifier (pointer_declarator "*pRVar9" * identifier) ;) (declaration "byte *pbVar10;" type_identifier (pointer_declarator "*pbVar10" * identifier) ;) (declaration "int iVar11;" primitive_type identifier ;) (declaration "char *__src;" primitive_type (pointer_declarator "*__src" * identifier) ;) (declaration "Column *pCVar12;" type_identifier (pointer_declarator "*pCVar12" * identifier) ;) (declaration "int iVar13;" primitive_type identifier ;) (declaration "u8 *puVar14;" type_identifier (pointer_declarator "*puVar14" * identifier) ;) (declaration "char **ppcVar15;" primitive_type (pointer_declarator "**ppcVar15" * (pointer_declarator "*ppcVar15" * identifier)) ;) (declaration "int iVar16;" primitive_type identifier ;) (declaration "u8 *puVar17;" type_identifier (pointer_declarator "*puVar17" * identifier) ;) (declaration "char **ppcVar18;" primitive_type (pointer_declarator "**ppcVar18" * (pointer_declarator "*ppcVar18" * identifier)) ;) (declaration "int local_50;" primitive_type identifier ;) (declaration "undefined2 local_4c;" type_identifier identifier ;) (expression_statement "db = pParse->db;" (assignment_expression "db = pParse->db" identifier = (field_expression "pParse->db" identifier -> field_identifier)) ;) (expression_statement "pTVar3 = pParse->pNewTable;" (assignment_expression "pTVar3 = pParse->pNewTable" identifier = (field_expression "pParse->pNewTable" identifier -> field_identifier)) ;) (if_statement "if ((pTVar3 == (Table *)0x0) || (pParse->eParseMode == '\x01')) goto joined_r0x0014bec0;" if (parenthesized_expression "((pTVar3 == (Table *)0x0) || (pParse->eParseMode == '\x01'))" ( (binary_expression "(pTVar3 == (Table *)0x0) || (pParse->eParseMode == '\x01')" (parenthesized_expression "(pTVar3 == (Table *)0x0)" ( (binary_expression "pTVar3 == (Table *)0x0" identifier == (cast_expression "(Table *)0x0" ( (type_descriptor "Table *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) || (parenthesized_expression "(pParse->eParseMode == '\x01')" ( (binary_expression "pParse->eParseMode == '\x01'" (field_expression "pParse->eParseMode" identifier -> field_identifier) == (char_literal "'\x01'" ' escape_sequence ')) ))) )) (goto_statement "goto joined_r0x0014bec0;" goto statement_identifier ;)) (if_statement "if (pFromCol != (ExprList *)0x0) {\n    local_50 = pFromCol->nExpr;\n    if (pToCol == (ExprList *)0x0) {\n      data = (FKey *)sqlite3DbMallocZero(db,(long)(int)(local_50 * 0x10 + 0x41 + pTo->n));\n      if (data != (FKey *)0x0) {\n        lVar5 = ((long)local_50 + 4) * 0x10;\n        goto LAB_0014bd94;\n      }\n    }\n    else {\n      iVar13 = pToCol->nExpr;\n      if (iVar13 == local_50) {\n        iVar11 = iVar13 * 0x10 + 0x41 + pTo->n;\n        if (0 < iVar13) goto LAB_0014bd06;\n        goto LAB_0014bd6e;\n      }\n      sqlite3ErrorMsg(pParse,\n                      "number of columns in foreign key does not match the number of columns in the referenced table"\n                     );\n    }\n    goto LAB_0014bec2;\n  }" if (parenthesized_expression "(pFromCol != (ExprList *)0x0)" ( (binary_expression "pFromCol != (ExprList *)0x0" identifier != (cast_expression "(ExprList *)0x0" ( (type_descriptor "ExprList *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    local_50 = pFromCol->nExpr;\n    if (pToCol == (ExprList *)0x0) {\n      data = (FKey *)sqlite3DbMallocZero(db,(long)(int)(local_50 * 0x10 + 0x41 + pTo->n));\n      if (data != (FKey *)0x0) {\n        lVar5 = ((long)local_50 + 4) * 0x10;\n        goto LAB_0014bd94;\n      }\n    }\n    else {\n      iVar13 = pToCol->nExpr;\n      if (iVar13 == local_50) {\n        iVar11 = iVar13 * 0x10 + 0x41 + pTo->n;\n        if (0 < iVar13) goto LAB_0014bd06;\n        goto LAB_0014bd6e;\n      }\n      sqlite3ErrorMsg(pParse,\n                      "number of columns in foreign key does not match the number of columns in the referenced table"\n                     );\n    }\n    goto LAB_0014bec2;\n  }" { (expression_statement "local_50 = pFromCol->nExpr;" (assignment_expression "local_50 = pFromCol->nExpr" identifier = (field_expression "pFromCol->nExpr" identifier -> field_identifier)) ;) (if_statement "if (pToCol == (ExprList *)0x0) {\n      data = (FKey *)sqlite3DbMallocZero(db,(long)(int)(local_50 * 0x10 + 0x41 + pTo->n));\n      if (data != (FKey *)0x0) {\n        lVar5 = ((long)local_50 + 4) * 0x10;\n        goto LAB_0014bd94;\n      }\n    }\n    else {\n      iVar13 = pToCol->nExpr;\n      if (iVar13 == local_50) {\n        iVar11 = iVar13 * 0x10 + 0x41 + pTo->n;\n        if (0 < iVar13) goto LAB_0014bd06;\n        goto LAB_0014bd6e;\n      }\n      sqlite3ErrorMsg(pParse,\n                      "number of columns in foreign key does not match the number of columns in the referenced table"\n                     );\n    }" if (parenthesized_expression "(pToCol == (ExprList *)0x0)" ( (binary_expression "pToCol == (ExprList *)0x0" identifier == (cast_expression "(ExprList *)0x0" ( (type_descriptor "ExprList *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      data = (FKey *)sqlite3DbMallocZero(db,(long)(int)(local_50 * 0x10 + 0x41 + pTo->n));\n      if (data != (FKey *)0x0) {\n        lVar5 = ((long)local_50 + 4) * 0x10;\n        goto LAB_0014bd94;\n      }\n    }" { (expression_statement "data = (FKey *)sqlite3DbMallocZero(db,(long)(int)(local_50 * 0x10 + 0x41 + pTo->n));" (assignment_expression "data = (FKey *)sqlite3DbMallocZero(db,(long)(int)(local_50 * 0x10 + 0x41 + pTo->n))" identifier = (cast_expression "(FKey *)sqlite3DbMallocZero(db,(long)(int)(local_50 * 0x10 + 0x41 + pTo->n))" ( (type_descriptor "FKey *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "sqlite3DbMallocZero(db,(long)(int)(local_50 * 0x10 + 0x41 + pTo->n))" identifier (argument_list "(db,(long)(int)(local_50 * 0x10 + 0x41 + pTo->n))" ( identifier , (cast_expression "(long)(int)(local_50 * 0x10 + 0x41 + pTo->n)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (cast_expression "(int)(local_50 * 0x10 + 0x41 + pTo->n)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(local_50 * 0x10 + 0x41 + pTo->n)" ( (binary_expression "local_50 * 0x10 + 0x41 + pTo->n" (binary_expression "local_50 * 0x10 + 0x41" (binary_expression "local_50 * 0x10" identifier * number_literal) + number_literal) + (field_expression "pTo->n" identifier -> field_identifier)) )))) ))))) ;) (if_statement "if (data != (FKey *)0x0) {\n        lVar5 = ((long)local_50 + 4) * 0x10;\n        goto LAB_0014bd94;\n      }" if (parenthesized_expression "(data != (FKey *)0x0)" ( (binary_expression "data != (FKey *)0x0" identifier != (cast_expression "(FKey *)0x0" ( (type_descriptor "FKey *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        lVar5 = ((long)local_50 + 4) * 0x10;\n        goto LAB_0014bd94;\n      }" { (expression_statement "lVar5 = ((long)local_50 + 4) * 0x10;" (assignment_expression "lVar5 = ((long)local_50 + 4) * 0x10" identifier = (binary_expression "((long)local_50 + 4) * 0x10" (parenthesized_expression "((long)local_50 + 4)" ( (binary_expression "(long)local_50 + 4" (cast_expression "(long)local_50" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )) * number_literal)) ;) (goto_statement "goto LAB_0014bd94;" goto statement_identifier ;) })) }) (else_clause "else {\n      iVar13 = pToCol->nExpr;\n      if (iVar13 == local_50) {\n        iVar11 = iVar13 * 0x10 + 0x41 + pTo->n;\n        if (0 < iVar13) goto LAB_0014bd06;\n        goto LAB_0014bd6e;\n      }\n      sqlite3ErrorMsg(pParse,\n                      "number of columns in foreign key does not match the number of columns in the referenced table"\n                     );\n    }" else (compound_statement "{\n      iVar13 = pToCol->nExpr;\n      if (iVar13 == local_50) {\n        iVar11 = iVar13 * 0x10 + 0x41 + pTo->n;\n        if (0 < iVar13) goto LAB_0014bd06;\n        goto LAB_0014bd6e;\n      }\n      sqlite3ErrorMsg(pParse,\n                      "number of columns in foreign key does not match the number of columns in the referenced table"\n                     );\n    }" { (expression_statement "iVar13 = pToCol->nExpr;" (assignment_expression "iVar13 = pToCol->nExpr" identifier = (field_expression "pToCol->nExpr" identifier -> field_identifier)) ;) (if_statement "if (iVar13 == local_50) {\n        iVar11 = iVar13 * 0x10 + 0x41 + pTo->n;\n        if (0 < iVar13) goto LAB_0014bd06;\n        goto LAB_0014bd6e;\n      }" if (parenthesized_expression "(iVar13 == local_50)" ( (binary_expression "iVar13 == local_50" identifier == identifier) )) (compound_statement "{\n        iVar11 = iVar13 * 0x10 + 0x41 + pTo->n;\n        if (0 < iVar13) goto LAB_0014bd06;\n        goto LAB_0014bd6e;\n      }" { (expression_statement "iVar11 = iVar13 * 0x10 + 0x41 + pTo->n;" (assignment_expression "iVar11 = iVar13 * 0x10 + 0x41 + pTo->n" identifier = (binary_expression "iVar13 * 0x10 + 0x41 + pTo->n" (binary_expression "iVar13 * 0x10 + 0x41" (binary_expression "iVar13 * 0x10" identifier * number_literal) + number_literal) + (field_expression "pTo->n" identifier -> field_identifier))) ;) (if_statement "if (0 < iVar13) goto LAB_0014bd06;" if (parenthesized_expression "(0 < iVar13)" ( (binary_expression "0 < iVar13" number_literal < identifier) )) (goto_statement "goto LAB_0014bd06;" goto statement_identifier ;)) (goto_statement "goto LAB_0014bd6e;" goto statement_identifier ;) })) (expression_statement "sqlite3ErrorMsg(pParse,\n                      "number of columns in foreign key does not match the number of columns in the referenced table"\n                     );" (call_expression "sqlite3ErrorMsg(pParse,\n                      "number of columns in foreign key does not match the number of columns in the referenced table"\n                     )" identifier (argument_list "(pParse,\n                      "number of columns in foreign key does not match the number of columns in the referenced table"\n                     )" ( identifier , (string_literal ""number of columns in foreign key does not match the number of columns in the referenced table"" " string_content ") ))) ;) }))) (goto_statement "goto LAB_0014bec2;" goto statement_identifier ;) })) (expression_statement "iVar13 = pTVar3->nCol + -1;" (assignment_expression "iVar13 = pTVar3->nCol + -1" identifier = (binary_expression "pTVar3->nCol + -1" (field_expression "pTVar3->nCol" identifier -> field_identifier) + number_literal)) ;) (if_statement "if (-1 < iVar13) {\n    if (pToCol == (ExprList *)0x0) {\n      data = (FKey *)sqlite3DbMallocZero(db,(long)(int)(pTo->n + 0x51));\n      if (data == (FKey *)0x0) {\n        return;\n      }\n      lVar5 = 0x50;\n      local_50 = 1;\n    }\n    else {\n      if (pToCol->nExpr != 1) {\n        sqlite3ErrorMsg(pParse,"foreign key on %s should reference only one column of table %T",\n                        pTVar3->aCol[iVar13].zName,pTo);\n        goto LAB_0014bed9;\n      }\n      local_50 = 1;\n      iVar11 = pTo->n + 0x51;\n      iVar13 = 1;\nLAB_0014bd06:\n      iVar16 = 0;\n      ppcVar18 = &pToCol->a[0].zName;\n      do {\n        while (*ppcVar18 != (char *)0x0) {\n          sVar7 = strlen(*ppcVar18);\n          iVar16 = iVar16 + 1;\n          ppcVar18 = ppcVar18 + 4;\n          iVar11 = iVar11 + ((uint)sVar7 & 0x3fffffff) + 1;\n          if (iVar13 <= iVar16) goto LAB_0014bd6e;\n        }\n        iVar16 = iVar16 + 1;\n        ppcVar18 = ppcVar18 + 4;\n        iVar11 = iVar11 + 1;\n      } while (iVar16 < iVar13);\nLAB_0014bd6e:\n      data = (FKey *)sqlite3DbMallocZero(db,(long)iVar11);\n      if (data == (FKey *)0x0) goto joined_r0x0014bec0;\n      lVar5 = ((long)local_50 + 4) * 0x10;\n    }\nLAB_0014bd94:\n    data->pFrom = pTVar3;\n    pFVar8 = pTVar3->pFKey;\n    puVar17 = data->aAction + lVar5 + -0x2d;\n    data->zTo = (char *)puVar17;\n    data->pNextFrom = pFVar8;\n    if ((1 < pParse->eParseMode) &&\n       (pRVar9 = (RenameToken *)sqlite3DbMallocZero(pParse->db,0x20), pRVar9 != (RenameToken *)0x0))\n    {\n      pRVar9->p = puVar17;\n      uVar2 = pTo->n;\n      uVar4 = *(undefined4 *)&pTo->field_0xc;\n      (pRVar9->t).z = pTo->z;\n      (pRVar9->t).n = uVar2;\n      *(undefined4 *)&(pRVar9->t).field_0xc = uVar4;\n      pRVar9->pNext = pParse->pRename;\n      pParse->pRename = pRVar9;\n    }\n    memcpy(puVar17,pTo->z,(ulong)pTo->n);\n    puVar17[pTo->n] = '\0';\n    sqlite3Dequote((char *)puVar17);\n    uVar2 = pTo->n;\n    data->nCol = local_50;\n    if (pFromCol == (ExprList *)0x0) {\n      data->aCol[0].iFrom = pTVar3->nCol + -1;\n      if ((pToCol != (ExprList *)0x0) && (0 < local_50)) goto LAB_0014bf4f;\n    }\n    else {\n      lVar5 = 0x40;\n      if (0 < local_50) {\n        iVar13 = 0;\nLAB_0014be20:\n        pbVar10 = *(byte **)((long)pFromCol->a + lVar5 * 2 + -0x78);\n        if (0 < pTVar3->nCol) {\n          pCVar12 = pTVar3->aCol;\n          iVar11 = 0;\n          do {\n            bVar1 = *pCVar12->zName;\n            if (""[bVar1] == ""[*pbVar10]) {\n              if (bVar1 == 0) goto LAB_0014bf08;\n              lVar6 = 1;\n              while (bVar1 = pCVar12->zName[lVar6], ""[bVar1] == ""[pbVar10[lVar6]]) {\n                lVar6 = lVar6 + 1;\n                if (bVar1 == 0) goto LAB_0014bf08;\n              }\n            }\n            iVar11 = iVar11 + 1;\n            pCVar12 = pCVar12 + 1;\n            if (iVar11 == pTVar3->nCol) break;\n          } while( true );\n        }\n        goto LAB_0014be9c;\n      }\n    }\n    goto LAB_0014c064;\n  }" if (parenthesized_expression "(-1 < iVar13)" ( (binary_expression "-1 < iVar13" number_literal < identifier) )) (compound_statement "{\n    if (pToCol == (ExprList *)0x0) {\n      data = (FKey *)sqlite3DbMallocZero(db,(long)(int)(pTo->n + 0x51));\n      if (data == (FKey *)0x0) {\n        return;\n      }\n      lVar5 = 0x50;\n      local_50 = 1;\n    }\n    else {\n      if (pToCol->nExpr != 1) {\n        sqlite3ErrorMsg(pParse,"foreign key on %s should reference only one column of table %T",\n                        pTVar3->aCol[iVar13].zName,pTo);\n        goto LAB_0014bed9;\n      }\n      local_50 = 1;\n      iVar11 = pTo->n + 0x51;\n      iVar13 = 1;\nLAB_0014bd06:\n      iVar16 = 0;\n      ppcVar18 = &pToCol->a[0].zName;\n      do {\n        while (*ppcVar18 != (char *)0x0) {\n          sVar7 = strlen(*ppcVar18);\n          iVar16 = iVar16 + 1;\n          ppcVar18 = ppcVar18 + 4;\n          iVar11 = iVar11 + ((uint)sVar7 & 0x3fffffff) + 1;\n          if (iVar13 <= iVar16) goto LAB_0014bd6e;\n        }\n        iVar16 = iVar16 + 1;\n        ppcVar18 = ppcVar18 + 4;\n        iVar11 = iVar11 + 1;\n      } while (iVar16 < iVar13);\nLAB_0014bd6e:\n      data = (FKey *)sqlite3DbMallocZero(db,(long)iVar11);\n      if (data == (FKey *)0x0) goto joined_r0x0014bec0;\n      lVar5 = ((long)local_50 + 4) * 0x10;\n    }\nLAB_0014bd94:\n    data->pFrom = pTVar3;\n    pFVar8 = pTVar3->pFKey;\n    puVar17 = data->aAction + lVar5 + -0x2d;\n    data->zTo = (char *)puVar17;\n    data->pNextFrom = pFVar8;\n    if ((1 < pParse->eParseMode) &&\n       (pRVar9 = (RenameToken *)sqlite3DbMallocZero(pParse->db,0x20), pRVar9 != (RenameToken *)0x0))\n    {\n      pRVar9->p = puVar17;\n      uVar2 = pTo->n;\n      uVar4 = *(undefined4 *)&pTo->field_0xc;\n      (pRVar9->t).z = pTo->z;\n      (pRVar9->t).n = uVar2;\n      *(undefined4 *)&(pRVar9->t).field_0xc = uVar4;\n      pRVar9->pNext = pParse->pRename;\n      pParse->pRename = pRVar9;\n    }\n    memcpy(puVar17,pTo->z,(ulong)pTo->n);\n    puVar17[pTo->n] = '\0';\n    sqlite3Dequote((char *)puVar17);\n    uVar2 = pTo->n;\n    data->nCol = local_50;\n    if (pFromCol == (ExprList *)0x0) {\n      data->aCol[0].iFrom = pTVar3->nCol + -1;\n      if ((pToCol != (ExprList *)0x0) && (0 < local_50)) goto LAB_0014bf4f;\n    }\n    else {\n      lVar5 = 0x40;\n      if (0 < local_50) {\n        iVar13 = 0;\nLAB_0014be20:\n        pbVar10 = *(byte **)((long)pFromCol->a + lVar5 * 2 + -0x78);\n        if (0 < pTVar3->nCol) {\n          pCVar12 = pTVar3->aCol;\n          iVar11 = 0;\n          do {\n            bVar1 = *pCVar12->zName;\n            if (""[bVar1] == ""[*pbVar10]) {\n              if (bVar1 == 0) goto LAB_0014bf08;\n              lVar6 = 1;\n              while (bVar1 = pCVar12->zName[lVar6], ""[bVar1] == ""[pbVar10[lVar6]]) {\n                lVar6 = lVar6 + 1;\n                if (bVar1 == 0) goto LAB_0014bf08;\n              }\n            }\n            iVar11 = iVar11 + 1;\n            pCVar12 = pCVar12 + 1;\n            if (iVar11 == pTVar3->nCol) break;\n          } while( true );\n        }\n        goto LAB_0014be9c;\n      }\n    }\n    goto LAB_0014c064;\n  }" { (if_statement "if (pToCol == (ExprList *)0x0) {\n      data = (FKey *)sqlite3DbMallocZero(db,(long)(int)(pTo->n + 0x51));\n      if (data == (FKey *)0x0) {\n        return;\n      }\n      lVar5 = 0x50;\n      local_50 = 1;\n    }\n    else {\n      if (pToCol->nExpr != 1) {\n        sqlite3ErrorMsg(pParse,"foreign key on %s should reference only one column of table %T",\n                        pTVar3->aCol[iVar13].zName,pTo);\n        goto LAB_0014bed9;\n      }\n      local_50 = 1;\n      iVar11 = pTo->n + 0x51;\n      iVar13 = 1;\nLAB_0014bd06:\n      iVar16 = 0;\n      ppcVar18 = &pToCol->a[0].zName;\n      do {\n        while (*ppcVar18 != (char *)0x0) {\n          sVar7 = strlen(*ppcVar18);\n          iVar16 = iVar16 + 1;\n          ppcVar18 = ppcVar18 + 4;\n          iVar11 = iVar11 + ((uint)sVar7 & 0x3fffffff) + 1;\n          if (iVar13 <= iVar16) goto LAB_0014bd6e;\n        }\n        iVar16 = iVar16 + 1;\n        ppcVar18 = ppcVar18 + 4;\n        iVar11 = iVar11 + 1;\n      } while (iVar16 < iVar13);\nLAB_0014bd6e:\n      data = (FKey *)sqlite3DbMallocZero(db,(long)iVar11);\n      if (data == (FKey *)0x0) goto joined_r0x0014bec0;\n      lVar5 = ((long)local_50 + 4) * 0x10;\n    }" if (parenthesized_expression "(pToCol == (ExprList *)0x0)" ( (binary_expression "pToCol == (ExprList *)0x0" identifier == (cast_expression "(ExprList *)0x0" ( (type_descriptor "ExprList *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      data = (FKey *)sqlite3DbMallocZero(db,(long)(int)(pTo->n + 0x51));\n      if (data == (FKey *)0x0) {\n        return;\n      }\n      lVar5 = 0x50;\n      local_50 = 1;\n    }" { (expression_statement "data = (FKey *)sqlite3DbMallocZero(db,(long)(int)(pTo->n + 0x51));" (assignment_expression "data = (FKey *)sqlite3DbMallocZero(db,(long)(int)(pTo->n + 0x51))" identifier = (cast_expression "(FKey *)sqlite3DbMallocZero(db,(long)(int)(pTo->n + 0x51))" ( (type_descriptor "FKey *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "sqlite3DbMallocZero(db,(long)(int)(pTo->n + 0x51))" identifier (argument_list "(db,(long)(int)(pTo->n + 0x51))" ( identifier , (cast_expression "(long)(int)(pTo->n + 0x51)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (cast_expression "(int)(pTo->n + 0x51)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(pTo->n + 0x51)" ( (binary_expression "pTo->n + 0x51" (field_expression "pTo->n" identifier -> field_identifier) + number_literal) )))) ))))) ;) (if_statement "if (data == (FKey *)0x0) {\n        return;\n      }" if (parenthesized_expression "(data == (FKey *)0x0)" ( (binary_expression "data == (FKey *)0x0" identifier == (cast_expression "(FKey *)0x0" ( (type_descriptor "FKey *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        return;\n      }" { (return_statement "return;" return ;) })) (expression_statement "lVar5 = 0x50;" (assignment_expression "lVar5 = 0x50" identifier = number_literal) ;) (expression_statement "local_50 = 1;" (assignment_expression "local_50 = 1" identifier = number_literal) ;) }) (else_clause "else {\n      if (pToCol->nExpr != 1) {\n        sqlite3ErrorMsg(pParse,"foreign key on %s should reference only one column of table %T",\n                        pTVar3->aCol[iVar13].zName,pTo);\n        goto LAB_0014bed9;\n      }\n      local_50 = 1;\n      iVar11 = pTo->n + 0x51;\n      iVar13 = 1;\nLAB_0014bd06:\n      iVar16 = 0;\n      ppcVar18 = &pToCol->a[0].zName;\n      do {\n        while (*ppcVar18 != (char *)0x0) {\n          sVar7 = strlen(*ppcVar18);\n          iVar16 = iVar16 + 1;\n          ppcVar18 = ppcVar18 + 4;\n          iVar11 = iVar11 + ((uint)sVar7 & 0x3fffffff) + 1;\n          if (iVar13 <= iVar16) goto LAB_0014bd6e;\n        }\n        iVar16 = iVar16 + 1;\n        ppcVar18 = ppcVar18 + 4;\n        iVar11 = iVar11 + 1;\n      } while (iVar16 < iVar13);\nLAB_0014bd6e:\n      data = (FKey *)sqlite3DbMallocZero(db,(long)iVar11);\n      if (data == (FKey *)0x0) goto joined_r0x0014bec0;\n      lVar5 = ((long)local_50 + 4) * 0x10;\n    }" else (compound_statement "{\n      if (pToCol->nExpr != 1) {\n        sqlite3ErrorMsg(pParse,"foreign key on %s should reference only one column of table %T",\n                        pTVar3->aCol[iVar13].zName,pTo);\n        goto LAB_0014bed9;\n      }\n      local_50 = 1;\n      iVar11 = pTo->n + 0x51;\n      iVar13 = 1;\nLAB_0014bd06:\n      iVar16 = 0;\n      ppcVar18 = &pToCol->a[0].zName;\n      do {\n        while (*ppcVar18 != (char *)0x0) {\n          sVar7 = strlen(*ppcVar18);\n          iVar16 = iVar16 + 1;\n          ppcVar18 = ppcVar18 + 4;\n          iVar11 = iVar11 + ((uint)sVar7 & 0x3fffffff) + 1;\n          if (iVar13 <= iVar16) goto LAB_0014bd6e;\n        }\n        iVar16 = iVar16 + 1;\n        ppcVar18 = ppcVar18 + 4;\n        iVar11 = iVar11 + 1;\n      } while (iVar16 < iVar13);\nLAB_0014bd6e:\n      data = (FKey *)sqlite3DbMallocZero(db,(long)iVar11);\n      if (data == (FKey *)0x0) goto joined_r0x0014bec0;\n      lVar5 = ((long)local_50 + 4) * 0x10;\n    }" { (if_statement "if (pToCol->nExpr != 1) {\n        sqlite3ErrorMsg(pParse,"foreign key on %s should reference only one column of table %T",\n                        pTVar3->aCol[iVar13].zName,pTo);\n        goto LAB_0014bed9;\n      }" if (parenthesized_expression "(pToCol->nExpr != 1)" ( (binary_expression "pToCol->nExpr != 1" (field_expression "pToCol->nExpr" identifier -> field_identifier) != number_literal) )) (compound_statement "{\n        sqlite3ErrorMsg(pParse,"foreign key on %s should reference only one column of table %T",\n                        pTVar3->aCol[iVar13].zName,pTo);\n        goto LAB_0014bed9;\n      }" { (expression_statement "sqlite3ErrorMsg(pParse,"foreign key on %s should reference only one column of table %T",\n                        pTVar3->aCol[iVar13].zName,pTo);" (call_expression "sqlite3ErrorMsg(pParse,"foreign key on %s should reference only one column of table %T",\n                        pTVar3->aCol[iVar13].zName,pTo)" identifier (argument_list "(pParse,"foreign key on %s should reference only one column of table %T",\n                        pTVar3->aCol[iVar13].zName,pTo)" ( identifier , (string_literal ""foreign key on %s should reference only one column of table %T"" " string_content ") , (field_expression "pTVar3->aCol[iVar13].zName" (subscript_expression "pTVar3->aCol[iVar13]" (field_expression "pTVar3->aCol" identifier -> field_identifier) [ identifier ]) . field_identifier) , identifier ))) ;) (goto_statement "goto LAB_0014bed9;" goto statement_identifier ;) })) (expression_statement "local_50 = 1;" (assignment_expression "local_50 = 1" identifier = number_literal) ;) (expression_statement "iVar11 = pTo->n + 0x51;" (assignment_expression "iVar11 = pTo->n + 0x51" identifier = (binary_expression "pTo->n + 0x51" (field_expression "pTo->n" identifier -> field_identifier) + number_literal)) ;) (expression_statement "iVar13 = 1;" (assignment_expression "iVar13 = 1" identifier = number_literal) ;) (labeled_statement "LAB_0014bd06:\n      iVar16 = 0;" statement_identifier : (expression_statement "iVar16 = 0;" (assignment_expression "iVar16 = 0" identifier = number_literal) ;)) (expression_statement "ppcVar18 = &pToCol->a[0].zName;" (assignment_expression "ppcVar18 = &pToCol->a[0].zName" identifier = (pointer_expression "&pToCol->a[0].zName" & (field_expression "pToCol->a[0].zName" (subscript_expression "pToCol->a[0]" (field_expression "pToCol->a" identifier -> field_identifier) [ number_literal ]) . field_identifier))) ;) (do_statement "do {\n        while (*ppcVar18 != (char *)0x0) {\n          sVar7 = strlen(*ppcVar18);\n          iVar16 = iVar16 + 1;\n          ppcVar18 = ppcVar18 + 4;\n          iVar11 = iVar11 + ((uint)sVar7 & 0x3fffffff) + 1;\n          if (iVar13 <= iVar16) goto LAB_0014bd6e;\n        }\n        iVar16 = iVar16 + 1;\n        ppcVar18 = ppcVar18 + 4;\n        iVar11 = iVar11 + 1;\n      } while (iVar16 < iVar13);" do (compound_statement "{\n        while (*ppcVar18 != (char *)0x0) {\n          sVar7 = strlen(*ppcVar18);\n          iVar16 = iVar16 + 1;\n          ppcVar18 = ppcVar18 + 4;\n          iVar11 = iVar11 + ((uint)sVar7 & 0x3fffffff) + 1;\n          if (iVar13 <= iVar16) goto LAB_0014bd6e;\n        }\n        iVar16 = iVar16 + 1;\n        ppcVar18 = ppcVar18 + 4;\n        iVar11 = iVar11 + 1;\n      }" { (while_statement "while (*ppcVar18 != (char *)0x0) {\n          sVar7 = strlen(*ppcVar18);\n          iVar16 = iVar16 + 1;\n          ppcVar18 = ppcVar18 + 4;\n          iVar11 = iVar11 + ((uint)sVar7 & 0x3fffffff) + 1;\n          if (iVar13 <= iVar16) goto LAB_0014bd6e;\n        }" while (parenthesized_expression "(*ppcVar18 != (char *)0x0)" ( (binary_expression "*ppcVar18 != (char *)0x0" (pointer_expression "*ppcVar18" * identifier) != (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n          sVar7 = strlen(*ppcVar18);\n          iVar16 = iVar16 + 1;\n          ppcVar18 = ppcVar18 + 4;\n          iVar11 = iVar11 + ((uint)sVar7 & 0x3fffffff) + 1;\n          if (iVar13 <= iVar16) goto LAB_0014bd6e;\n        }" { (expression_statement "sVar7 = strlen(*ppcVar18);" (assignment_expression "sVar7 = strlen(*ppcVar18)" identifier = (call_expression "strlen(*ppcVar18)" identifier (argument_list "(*ppcVar18)" ( (pointer_expression "*ppcVar18" * identifier) )))) ;) (expression_statement "iVar16 = iVar16 + 1;" (assignment_expression "iVar16 = iVar16 + 1" identifier = (binary_expression "iVar16 + 1" identifier + number_literal)) ;) (expression_statement "ppcVar18 = ppcVar18 + 4;" (assignment_expression "ppcVar18 = ppcVar18 + 4" identifier = (binary_expression "ppcVar18 + 4" identifier + number_literal)) ;) (expression_statement "iVar11 = iVar11 + ((uint)sVar7 & 0x3fffffff) + 1;" (assignment_expression "iVar11 = iVar11 + ((uint)sVar7 & 0x3fffffff) + 1" identifier = (binary_expression "iVar11 + ((uint)sVar7 & 0x3fffffff) + 1" (binary_expression "iVar11 + ((uint)sVar7 & 0x3fffffff)" identifier + (parenthesized_expression "((uint)sVar7 & 0x3fffffff)" ( (binary_expression "(uint)sVar7 & 0x3fffffff" (cast_expression "(uint)sVar7" ( (type_descriptor "uint" type_identifier) ) identifier) & number_literal) ))) + number_literal)) ;) (if_statement "if (iVar13 <= iVar16) goto LAB_0014bd6e;" if (parenthesized_expression "(iVar13 <= iVar16)" ( (binary_expression "iVar13 <= iVar16" identifier <= identifier) )) (goto_statement "goto LAB_0014bd6e;" goto statement_identifier ;)) })) (expression_statement "iVar16 = iVar16 + 1;" (assignment_expression "iVar16 = iVar16 + 1" identifier = (binary_expression "iVar16 + 1" identifier + number_literal)) ;) (expression_statement "ppcVar18 = ppcVar18 + 4;" (assignment_expression "ppcVar18 = ppcVar18 + 4" identifier = (binary_expression "ppcVar18 + 4" identifier + number_literal)) ;) (expression_statement "iVar11 = iVar11 + 1;" (assignment_expression "iVar11 = iVar11 + 1" identifier = (binary_expression "iVar11 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar16 < iVar13)" ( (binary_expression "iVar16 < iVar13" identifier < identifier) )) ;) (labeled_statement "LAB_0014bd6e:\n      data = (FKey *)sqlite3DbMallocZero(db,(long)iVar11);" statement_identifier : (expression_statement "data = (FKey *)sqlite3DbMallocZero(db,(long)iVar11);" (assignment_expression "data = (FKey *)sqlite3DbMallocZero(db,(long)iVar11)" identifier = (cast_expression "(FKey *)sqlite3DbMallocZero(db,(long)iVar11)" ( (type_descriptor "FKey *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "sqlite3DbMallocZero(db,(long)iVar11)" identifier (argument_list "(db,(long)iVar11)" ( identifier , (cast_expression "(long)iVar11" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) ))))) ;)) (if_statement "if (data == (FKey *)0x0) goto joined_r0x0014bec0;" if (parenthesized_expression "(data == (FKey *)0x0)" ( (binary_expression "data == (FKey *)0x0" identifier == (cast_expression "(FKey *)0x0" ( (type_descriptor "FKey *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (goto_statement "goto joined_r0x0014bec0;" goto statement_identifier ;)) (expression_statement "lVar5 = ((long)local_50 + 4) * 0x10;" (assignment_expression "lVar5 = ((long)local_50 + 4) * 0x10" identifier = (binary_expression "((long)local_50 + 4) * 0x10" (parenthesized_expression "((long)local_50 + 4)" ( (binary_expression "(long)local_50 + 4" (cast_expression "(long)local_50" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )) * number_literal)) ;) }))) (labeled_statement "LAB_0014bd94:\n    data->pFrom = pTVar3;" statement_identifier : (expression_statement "data->pFrom = pTVar3;" (assignment_expression "data->pFrom = pTVar3" (field_expression "data->pFrom" identifier -> field_identifier) = identifier) ;)) (expression_statement "pFVar8 = pTVar3->pFKey;" (assignment_expression "pFVar8 = pTVar3->pFKey" identifier = (field_expression "pTVar3->pFKey" identifier -> field_identifier)) ;) (expression_statement "puVar17 = data->aAction + lVar5 + -0x2d;" (assignment_expression "puVar17 = data->aAction + lVar5 + -0x2d" identifier = (binary_expression "data->aAction + lVar5 + -0x2d" (binary_expression "data->aAction + lVar5" (field_expression "data->aAction" identifier -> field_identifier) + identifier) + number_literal)) ;) (expression_statement "data->zTo = (char *)puVar17;" (assignment_expression "data->zTo = (char *)puVar17" (field_expression "data->zTo" identifier -> field_identifier) = (cast_expression "(char *)puVar17" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier)) ;) (expression_statement "data->pNextFrom = pFVar8;" (assignment_expression "data->pNextFrom = pFVar8" (field_expression "data->pNextFrom" identifier -> field_identifier) = identifier) ;) (if_statement "if ((1 < pParse->eParseMode) &&\n       (pRVar9 = (RenameToken *)sqlite3DbMallocZero(pParse->db,0x20), pRVar9 != (RenameToken *)0x0))\n    {\n      pRVar9->p = puVar17;\n      uVar2 = pTo->n;\n      uVar4 = *(undefined4 *)&pTo->field_0xc;\n      (pRVar9->t).z = pTo->z;\n      (pRVar9->t).n = uVar2;\n      *(undefined4 *)&(pRVar9->t).field_0xc = uVar4;\n      pRVar9->pNext = pParse->pRename;\n      pParse->pRename = pRVar9;\n    }" if (parenthesized_expression "((1 < pParse->eParseMode) &&\n       (pRVar9 = (RenameToken *)sqlite3DbMallocZero(pParse->db,0x20), pRVar9 != (RenameToken *)0x0))" ( (binary_expression "(1 < pParse->eParseMode) &&\n       (pRVar9 = (RenameToken *)sqlite3DbMallocZero(pParse->db,0x20), pRVar9 != (RenameToken *)0x0)" (parenthesized_expression "(1 < pParse->eParseMode)" ( (binary_expression "1 < pParse->eParseMode" number_literal < (field_expression "pParse->eParseMode" identifier -> field_identifier)) )) && (parenthesized_expression "(pRVar9 = (RenameToken *)sqlite3DbMallocZero(pParse->db,0x20), pRVar9 != (RenameToken *)0x0)" ( (comma_expression "pRVar9 = (RenameToken *)sqlite3DbMallocZero(pParse->db,0x20), pRVar9 != (RenameToken *)0x0" (assignment_expression "pRVar9 = (RenameToken *)sqlite3DbMallocZero(pParse->db,0x20)" identifier = (cast_expression "(RenameToken *)sqlite3DbMallocZero(pParse->db,0x20)" ( (type_descriptor "RenameToken *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "sqlite3DbMallocZero(pParse->db,0x20)" identifier (argument_list "(pParse->db,0x20)" ( (field_expression "pParse->db" identifier -> field_identifier) , number_literal ))))) , (binary_expression "pRVar9 != (RenameToken *)0x0" identifier != (cast_expression "(RenameToken *)0x0" ( (type_descriptor "RenameToken *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal))) ))) )) (compound_statement "{\n      pRVar9->p = puVar17;\n      uVar2 = pTo->n;\n      uVar4 = *(undefined4 *)&pTo->field_0xc;\n      (pRVar9->t).z = pTo->z;\n      (pRVar9->t).n = uVar2;\n      *(undefined4 *)&(pRVar9->t).field_0xc = uVar4;\n      pRVar9->pNext = pParse->pRename;\n      pParse->pRename = pRVar9;\n    }" { (expression_statement "pRVar9->p = puVar17;" (assignment_expression "pRVar9->p = puVar17" (field_expression "pRVar9->p" identifier -> field_identifier) = identifier) ;) (expression_statement "uVar2 = pTo->n;" (assignment_expression "uVar2 = pTo->n" identifier = (field_expression "pTo->n" identifier -> field_identifier)) ;) (expression_statement "uVar4 = *(undefined4 *)&pTo->field_0xc;" (assignment_expression "uVar4 = *(undefined4 *)&pTo->field_0xc" identifier = (pointer_expression "*(undefined4 *)&pTo->field_0xc" * (cast_expression "(undefined4 *)&pTo->field_0xc" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&pTo->field_0xc" & (field_expression "pTo->field_0xc" identifier -> field_identifier))))) ;) (expression_statement "(pRVar9->t).z = pTo->z;" (assignment_expression "(pRVar9->t).z = pTo->z" (field_expression "(pRVar9->t).z" (parenthesized_expression "(pRVar9->t)" ( (field_expression "pRVar9->t" identifier -> field_identifier) )) . field_identifier) = (field_expression "pTo->z" identifier -> field_identifier)) ;) (expression_statement "(pRVar9->t).n = uVar2;" (assignment_expression "(pRVar9->t).n = uVar2" (field_expression "(pRVar9->t).n" (parenthesized_expression "(pRVar9->t)" ( (field_expression "pRVar9->t" identifier -> field_identifier) )) . field_identifier) = identifier) ;) (expression_statement "*(undefined4 *)&(pRVar9->t).field_0xc = uVar4;" (assignment_expression "*(undefined4 *)&(pRVar9->t).field_0xc = uVar4" (pointer_expression "*(undefined4 *)&(pRVar9->t).field_0xc" * (cast_expression "(undefined4 *)&(pRVar9->t).field_0xc" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&(pRVar9->t).field_0xc" & (field_expression "(pRVar9->t).field_0xc" (parenthesized_expression "(pRVar9->t)" ( (field_expression "pRVar9->t" identifier -> field_identifier) )) . field_identifier)))) = identifier) ;) (expression_statement "pRVar9->pNext = pParse->pRename;" (assignment_expression "pRVar9->pNext = pParse->pRename" (field_expression "pRVar9->pNext" identifier -> field_identifier) = (field_expression "pParse->pRename" identifier -> field_identifier)) ;) (expression_statement "pParse->pRename = pRVar9;" (assignment_expression "pParse->pRename = pRVar9" (field_expression "pParse->pRename" identifier -> field_identifier) = identifier) ;) })) (expression_statement "memcpy(puVar17,pTo->z,(ulong)pTo->n);" (call_expression "memcpy(puVar17,pTo->z,(ulong)pTo->n)" identifier (argument_list "(puVar17,pTo->z,(ulong)pTo->n)" ( identifier , (field_expression "pTo->z" identifier -> field_identifier) , (cast_expression "(ulong)pTo->n" ( (type_descriptor "ulong" type_identifier) ) (field_expression "pTo->n" identifier -> field_identifier)) ))) ;) (expression_statement "puVar17[pTo->n] = '\0';" (assignment_expression "puVar17[pTo->n] = '\0'" (subscript_expression "puVar17[pTo->n]" identifier [ (field_expression "pTo->n" identifier -> field_identifier) ]) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "sqlite3Dequote((char *)puVar17);" (call_expression "sqlite3Dequote((char *)puVar17)" identifier (argument_list "((char *)puVar17)" ( (cast_expression "(char *)puVar17" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier) ))) ;) (expression_statement "uVar2 = pTo->n;" (assignment_expression "uVar2 = pTo->n" identifier = (field_expression "pTo->n" identifier -> field_identifier)) ;) (expression_statement "data->nCol = local_50;" (assignment_expression "data->nCol = local_50" (field_expression "data->nCol" identifier -> field_identifier) = identifier) ;) (if_statement "if (pFromCol == (ExprList *)0x0) {\n      data->aCol[0].iFrom = pTVar3->nCol + -1;\n      if ((pToCol != (ExprList *)0x0) && (0 < local_50)) goto LAB_0014bf4f;\n    }\n    else {\n      lVar5 = 0x40;\n      if (0 < local_50) {\n        iVar13 = 0;\nLAB_0014be20:\n        pbVar10 = *(byte **)((long)pFromCol->a + lVar5 * 2 + -0x78);\n        if (0 < pTVar3->nCol) {\n          pCVar12 = pTVar3->aCol;\n          iVar11 = 0;\n          do {\n            bVar1 = *pCVar12->zName;\n            if (""[bVar1] == ""[*pbVar10]) {\n              if (bVar1 == 0) goto LAB_0014bf08;\n              lVar6 = 1;\n              while (bVar1 = pCVar12->zName[lVar6], ""[bVar1] == ""[pbVar10[lVar6]]) {\n                lVar6 = lVar6 + 1;\n                if (bVar1 == 0) goto LAB_0014bf08;\n              }\n            }\n            iVar11 = iVar11 + 1;\n            pCVar12 = pCVar12 + 1;\n            if (iVar11 == pTVar3->nCol) break;\n          } while( true );\n        }\n        goto LAB_0014be9c;\n      }\n    }" if (parenthesized_expression "(pFromCol == (ExprList *)0x0)" ( (binary_expression "pFromCol == (ExprList *)0x0" identifier == (cast_expression "(ExprList *)0x0" ( (type_descriptor "ExprList *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      data->aCol[0].iFrom = pTVar3->nCol + -1;\n      if ((pToCol != (ExprList *)0x0) && (0 < local_50)) goto LAB_0014bf4f;\n    }" { (expression_statement "data->aCol[0].iFrom = pTVar3->nCol + -1;" (assignment_expression "data->aCol[0].iFrom = pTVar3->nCol + -1" (field_expression "data->aCol[0].iFrom" (subscript_expression "data->aCol[0]" (field_expression "data->aCol" identifier -> field_identifier) [ number_literal ]) . field_identifier) = (binary_expression "pTVar3->nCol + -1" (field_expression "pTVar3->nCol" identifier -> field_identifier) + number_literal)) ;) (if_statement "if ((pToCol != (ExprList *)0x0) && (0 < local_50)) goto LAB_0014bf4f;" if (parenthesized_expression "((pToCol != (ExprList *)0x0) && (0 < local_50))" ( (binary_expression "(pToCol != (ExprList *)0x0) && (0 < local_50)" (parenthesized_expression "(pToCol != (ExprList *)0x0)" ( (binary_expression "pToCol != (ExprList *)0x0" identifier != (cast_expression "(ExprList *)0x0" ( (type_descriptor "ExprList *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) && (parenthesized_expression "(0 < local_50)" ( (binary_expression "0 < local_50" number_literal < identifier) ))) )) (goto_statement "goto LAB_0014bf4f;" goto statement_identifier ;)) }) (else_clause "else {\n      lVar5 = 0x40;\n      if (0 < local_50) {\n        iVar13 = 0;\nLAB_0014be20:\n        pbVar10 = *(byte **)((long)pFromCol->a + lVar5 * 2 + -0x78);\n        if (0 < pTVar3->nCol) {\n          pCVar12 = pTVar3->aCol;\n          iVar11 = 0;\n          do {\n            bVar1 = *pCVar12->zName;\n            if (""[bVar1] == ""[*pbVar10]) {\n              if (bVar1 == 0) goto LAB_0014bf08;\n              lVar6 = 1;\n              while (bVar1 = pCVar12->zName[lVar6], ""[bVar1] == ""[pbVar10[lVar6]]) {\n                lVar6 = lVar6 + 1;\n                if (bVar1 == 0) goto LAB_0014bf08;\n              }\n            }\n            iVar11 = iVar11 + 1;\n            pCVar12 = pCVar12 + 1;\n            if (iVar11 == pTVar3->nCol) break;\n          } while( true );\n        }\n        goto LAB_0014be9c;\n      }\n    }" else (compound_statement "{\n      lVar5 = 0x40;\n      if (0 < local_50) {\n        iVar13 = 0;\nLAB_0014be20:\n        pbVar10 = *(byte **)((long)pFromCol->a + lVar5 * 2 + -0x78);\n        if (0 < pTVar3->nCol) {\n          pCVar12 = pTVar3->aCol;\n          iVar11 = 0;\n          do {\n            bVar1 = *pCVar12->zName;\n            if (""[bVar1] == ""[*pbVar10]) {\n              if (bVar1 == 0) goto LAB_0014bf08;\n              lVar6 = 1;\n              while (bVar1 = pCVar12->zName[lVar6], ""[bVar1] == ""[pbVar10[lVar6]]) {\n                lVar6 = lVar6 + 1;\n                if (bVar1 == 0) goto LAB_0014bf08;\n              }\n            }\n            iVar11 = iVar11 + 1;\n            pCVar12 = pCVar12 + 1;\n            if (iVar11 == pTVar3->nCol) break;\n          } while( true );\n        }\n        goto LAB_0014be9c;\n      }\n    }" { (expression_statement "lVar5 = 0x40;" (assignment_expression "lVar5 = 0x40" identifier = number_literal) ;) (if_statement "if (0 < local_50) {\n        iVar13 = 0;\nLAB_0014be20:\n        pbVar10 = *(byte **)((long)pFromCol->a + lVar5 * 2 + -0x78);\n        if (0 < pTVar3->nCol) {\n          pCVar12 = pTVar3->aCol;\n          iVar11 = 0;\n          do {\n            bVar1 = *pCVar12->zName;\n            if (""[bVar1] == ""[*pbVar10]) {\n              if (bVar1 == 0) goto LAB_0014bf08;\n              lVar6 = 1;\n              while (bVar1 = pCVar12->zName[lVar6], ""[bVar1] == ""[pbVar10[lVar6]]) {\n                lVar6 = lVar6 + 1;\n                if (bVar1 == 0) goto LAB_0014bf08;\n              }\n            }\n            iVar11 = iVar11 + 1;\n            pCVar12 = pCVar12 + 1;\n            if (iVar11 == pTVar3->nCol) break;\n          } while( true );\n        }\n        goto LAB_0014be9c;\n      }" if (parenthesized_expression "(0 < local_50)" ( (binary_expression "0 < local_50" number_literal < identifier) )) (compound_statement "{\n        iVar13 = 0;\nLAB_0014be20:\n        pbVar10 = *(byte **)((long)pFromCol->a + lVar5 * 2 + -0x78);\n        if (0 < pTVar3->nCol) {\n          pCVar12 = pTVar3->aCol;\n          iVar11 = 0;\n          do {\n            bVar1 = *pCVar12->zName;\n            if (""[bVar1] == ""[*pbVar10]) {\n              if (bVar1 == 0) goto LAB_0014bf08;\n              lVar6 = 1;\n              while (bVar1 = pCVar12->zName[lVar6], ""[bVar1] == ""[pbVar10[lVar6]]) {\n                lVar6 = lVar6 + 1;\n                if (bVar1 == 0) goto LAB_0014bf08;\n              }\n            }\n            iVar11 = iVar11 + 1;\n            pCVar12 = pCVar12 + 1;\n            if (iVar11 == pTVar3->nCol) break;\n          } while( true );\n        }\n        goto LAB_0014be9c;\n      }" { (expression_statement "iVar13 = 0;" (assignment_expression "iVar13 = 0" identifier = number_literal) ;) (labeled_statement "LAB_0014be20:\n        pbVar10 = *(byte **)((long)pFromCol->a + lVar5 * 2 + -0x78);" statement_identifier : (expression_statement "pbVar10 = *(byte **)((long)pFromCol->a + lVar5 * 2 + -0x78);" (assignment_expression "pbVar10 = *(byte **)((long)pFromCol->a + lVar5 * 2 + -0x78)" identifier = (pointer_expression "*(byte **)((long)pFromCol->a + lVar5 * 2 + -0x78)" * (cast_expression "(byte **)((long)pFromCol->a + lVar5 * 2 + -0x78)" ( (type_descriptor "byte **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "((long)pFromCol->a + lVar5 * 2 + -0x78)" ( (binary_expression "(long)pFromCol->a + lVar5 * 2 + -0x78" (binary_expression "(long)pFromCol->a + lVar5 * 2" (cast_expression "(long)pFromCol->a" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (field_expression "pFromCol->a" identifier -> field_identifier)) + (binary_expression "lVar5 * 2" identifier * number_literal)) + number_literal) ))))) ;)) (if_statement "if (0 < pTVar3->nCol) {\n          pCVar12 = pTVar3->aCol;\n          iVar11 = 0;\n          do {\n            bVar1 = *pCVar12->zName;\n            if (""[bVar1] == ""[*pbVar10]) {\n              if (bVar1 == 0) goto LAB_0014bf08;\n              lVar6 = 1;\n              while (bVar1 = pCVar12->zName[lVar6], ""[bVar1] == ""[pbVar10[lVar6]]) {\n                lVar6 = lVar6 + 1;\n                if (bVar1 == 0) goto LAB_0014bf08;\n              }\n            }\n            iVar11 = iVar11 + 1;\n            pCVar12 = pCVar12 + 1;\n            if (iVar11 == pTVar3->nCol) break;\n          } while( true );\n        }" if (parenthesized_expression "(0 < pTVar3->nCol)" ( (binary_expression "0 < pTVar3->nCol" number_literal < (field_expression "pTVar3->nCol" identifier -> field_identifier)) )) (compound_statement "{\n          pCVar12 = pTVar3->aCol;\n          iVar11 = 0;\n          do {\n            bVar1 = *pCVar12->zName;\n            if (""[bVar1] == ""[*pbVar10]) {\n              if (bVar1 == 0) goto LAB_0014bf08;\n              lVar6 = 1;\n              while (bVar1 = pCVar12->zName[lVar6], ""[bVar1] == ""[pbVar10[lVar6]]) {\n                lVar6 = lVar6 + 1;\n                if (bVar1 == 0) goto LAB_0014bf08;\n              }\n            }\n            iVar11 = iVar11 + 1;\n            pCVar12 = pCVar12 + 1;\n            if (iVar11 == pTVar3->nCol) break;\n          } while( true );\n        }" { (expression_statement "pCVar12 = pTVar3->aCol;" (assignment_expression "pCVar12 = pTVar3->aCol" identifier = (field_expression "pTVar3->aCol" identifier -> field_identifier)) ;) (expression_statement "iVar11 = 0;" (assignment_expression "iVar11 = 0" identifier = number_literal) ;) (do_statement "do {\n            bVar1 = *pCVar12->zName;\n            if (""[bVar1] == ""[*pbVar10]) {\n              if (bVar1 == 0) goto LAB_0014bf08;\n              lVar6 = 1;\n              while (bVar1 = pCVar12->zName[lVar6], ""[bVar1] == ""[pbVar10[lVar6]]) {\n                lVar6 = lVar6 + 1;\n                if (bVar1 == 0) goto LAB_0014bf08;\n              }\n            }\n            iVar11 = iVar11 + 1;\n            pCVar12 = pCVar12 + 1;\n            if (iVar11 == pTVar3->nCol) break;\n          } while( true );" do (compound_statement "{\n            bVar1 = *pCVar12->zName;\n            if (""[bVar1] == ""[*pbVar10]) {\n              if (bVar1 == 0) goto LAB_0014bf08;\n              lVar6 = 1;\n              while (bVar1 = pCVar12->zName[lVar6], ""[bVar1] == ""[pbVar10[lVar6]]) {\n                lVar6 = lVar6 + 1;\n                if (bVar1 == 0) goto LAB_0014bf08;\n              }\n            }\n            iVar11 = iVar11 + 1;\n            pCVar12 = pCVar12 + 1;\n            if (iVar11 == pTVar3->nCol) break;\n          }" { (expression_statement "bVar1 = *pCVar12->zName;" (assignment_expression "bVar1 = *pCVar12->zName" identifier = (pointer_expression "*pCVar12->zName" * (field_expression "pCVar12->zName" identifier -> field_identifier))) ;) (if_statement "if (""[bVar1] == ""[*pbVar10]) {\n              if (bVar1 == 0) goto LAB_0014bf08;\n              lVar6 = 1;\n              while (bVar1 = pCVar12->zName[lVar6], ""[bVar1] == ""[pbVar10[lVar6]]) {\n                lVar6 = lVar6 + 1;\n                if (bVar1 == 0) goto LAB_0014bf08;\n              }\n            }" if (parenthesized_expression "(""[bVar1] == ""[*pbVar10])" ( (binary_expression """[bVar1] == ""[*pbVar10]" (subscript_expression """[bVar1]" (string_literal """" " ") [ identifier ]) == (subscript_expression """[*pbVar10]" (string_literal """" " ") [ (pointer_expression "*pbVar10" * identifier) ])) )) (compound_statement "{\n              if (bVar1 == 0) goto LAB_0014bf08;\n              lVar6 = 1;\n              while (bVar1 = pCVar12->zName[lVar6], ""[bVar1] == ""[pbVar10[lVar6]]) {\n                lVar6 = lVar6 + 1;\n                if (bVar1 == 0) goto LAB_0014bf08;\n              }\n            }" { (if_statement "if (bVar1 == 0) goto LAB_0014bf08;" if (parenthesized_expression "(bVar1 == 0)" ( (binary_expression "bVar1 == 0" identifier == number_literal) )) (goto_statement "goto LAB_0014bf08;" goto statement_identifier ;)) (expression_statement "lVar6 = 1;" (assignment_expression "lVar6 = 1" identifier = number_literal) ;) (while_statement "while (bVar1 = pCVar12->zName[lVar6], ""[bVar1] == ""[pbVar10[lVar6]]) {\n                lVar6 = lVar6 + 1;\n                if (bVar1 == 0) goto LAB_0014bf08;\n              }" while (parenthesized_expression "(bVar1 = pCVar12->zName[lVar6], ""[bVar1] == ""[pbVar10[lVar6]])" ( (comma_expression "bVar1 = pCVar12->zName[lVar6], ""[bVar1] == ""[pbVar10[lVar6]]" (assignment_expression "bVar1 = pCVar12->zName[lVar6]" identifier = (subscript_expression "pCVar12->zName[lVar6]" (field_expression "pCVar12->zName" identifier -> field_identifier) [ identifier ])) , (binary_expression """[bVar1] == ""[pbVar10[lVar6]]" (subscript_expression """[bVar1]" (string_literal """" " ") [ identifier ]) == (subscript_expression """[pbVar10[lVar6]]" (string_literal """" " ") [ (subscript_expression "pbVar10[lVar6]" identifier [ identifier ]) ]))) )) (compound_statement "{\n                lVar6 = lVar6 + 1;\n                if (bVar1 == 0) goto LAB_0014bf08;\n              }" { (expression_statement "lVar6 = lVar6 + 1;" (assignment_expression "lVar6 = lVar6 + 1" identifier = (binary_expression "lVar6 + 1" identifier + number_literal)) ;) (if_statement "if (bVar1 == 0) goto LAB_0014bf08;" if (parenthesized_expression "(bVar1 == 0)" ( (binary_expression "bVar1 == 0" identifier == number_literal) )) (goto_statement "goto LAB_0014bf08;" goto statement_identifier ;)) })) })) (expression_statement "iVar11 = iVar11 + 1;" (assignment_expression "iVar11 = iVar11 + 1" identifier = (binary_expression "iVar11 + 1" identifier + number_literal)) ;) (expression_statement "pCVar12 = pCVar12 + 1;" (assignment_expression "pCVar12 = pCVar12 + 1" identifier = (binary_expression "pCVar12 + 1" identifier + number_literal)) ;) (if_statement "if (iVar11 == pTVar3->nCol) break;" if (parenthesized_expression "(iVar11 == pTVar3->nCol)" ( (binary_expression "iVar11 == pTVar3->nCol" identifier == (field_expression "pTVar3->nCol" identifier -> field_identifier)) )) (break_statement "break;" break ;)) }) while (parenthesized_expression "( true )" ( true )) ;) })) (goto_statement "goto LAB_0014be9c;" goto statement_identifier ;) })) }))) (goto_statement "goto LAB_0014c064;" goto statement_identifier ;) })) (labeled_statement "LAB_0014bed1:\n  if (pToCol == (ExprList *)0x0) {\n    return;\n  }" statement_identifier : (if_statement "if (pToCol == (ExprList *)0x0) {\n    return;\n  }" if (parenthesized_expression "(pToCol == (ExprList *)0x0)" ( (binary_expression "pToCol == (ExprList *)0x0" identifier == (cast_expression "(ExprList *)0x0" ( (type_descriptor "ExprList *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    return;\n  }" { (return_statement "return;" return ;) }))) (labeled_statement "LAB_0014bed9:\n  exprListDeleteNN(db,pToCol);" statement_identifier : (expression_statement "exprListDeleteNN(db,pToCol);" (call_expression "exprListDeleteNN(db,pToCol)" identifier (argument_list "(db,pToCol)" ( identifier , identifier ))) ;)) (return_statement "return;" return ;) (labeled_statement "LAB_0014bf08:\n  *(int *)(data->aAction + lVar5 + -0x2d) = iVar11;" statement_identifier : (expression_statement "*(int *)(data->aAction + lVar5 + -0x2d) = iVar11;" (assignment_expression "*(int *)(data->aAction + lVar5 + -0x2d) = iVar11" (pointer_expression "*(int *)(data->aAction + lVar5 + -0x2d)" * (cast_expression "(int *)(data->aAction + lVar5 + -0x2d)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(data->aAction + lVar5 + -0x2d)" ( (binary_expression "data->aAction + lVar5 + -0x2d" (binary_expression "data->aAction + lVar5" (field_expression "data->aAction" identifier -> field_identifier) + identifier) + number_literal) )))) = identifier) ;)) (if_statement "if (pTVar3->nCol <= iVar11) {\n    pbVar10 = (byte *)pFromCol->a[iVar13].zName;\nLAB_0014be9c:\n    sqlite3ErrorMsg(pParse,"unknown column \"%s\" in foreign key definition",pbVar10);\n    goto LAB_0014bead;\n  }" if (parenthesized_expression "(pTVar3->nCol <= iVar11)" ( (binary_expression "pTVar3->nCol <= iVar11" (field_expression "pTVar3->nCol" identifier -> field_identifier) <= identifier) )) (compound_statement "{\n    pbVar10 = (byte *)pFromCol->a[iVar13].zName;\nLAB_0014be9c:\n    sqlite3ErrorMsg(pParse,"unknown column \"%s\" in foreign key definition",pbVar10);\n    goto LAB_0014bead;\n  }" { (expression_statement "pbVar10 = (byte *)pFromCol->a[iVar13].zName;" (assignment_expression "pbVar10 = (byte *)pFromCol->a[iVar13].zName" identifier = (cast_expression "(byte *)pFromCol->a[iVar13].zName" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "pFromCol->a[iVar13].zName" (subscript_expression "pFromCol->a[iVar13]" (field_expression "pFromCol->a" identifier -> field_identifier) [ identifier ]) . field_identifier))) ;) (labeled_statement "LAB_0014be9c:\n    sqlite3ErrorMsg(pParse,"unknown column \"%s\" in foreign key definition",pbVar10);" statement_identifier : (expression_statement "sqlite3ErrorMsg(pParse,"unknown column \"%s\" in foreign key definition",pbVar10);" (call_expression "sqlite3ErrorMsg(pParse,"unknown column \"%s\" in foreign key definition",pbVar10)" identifier (argument_list "(pParse,"unknown column \"%s\" in foreign key definition",pbVar10)" ( identifier , (string_literal ""unknown column \"%s\" in foreign key definition"" " string_content escape_sequence string_content escape_sequence string_content ") , identifier ))) ;)) (goto_statement "goto LAB_0014bead;" goto statement_identifier ;) })) (if_statement "if (1 < pParse->eParseMode) {\n    for (pRVar9 = pParse->pRename; pRVar9 != (RenameToken *)0x0; pRVar9 = pRVar9->pNext) {\n      if (*(void **)((long)pFromCol->a + lVar5 * 2 + -0x78) == pRVar9->p) {\n        pRVar9->p = data->aAction + lVar5 + -0x2d;\n        break;\n      }\n    }\n  }" if (parenthesized_expression "(1 < pParse->eParseMode)" ( (binary_expression "1 < pParse->eParseMode" number_literal < (field_expression "pParse->eParseMode" identifier -> field_identifier)) )) (compound_statement "{\n    for (pRVar9 = pParse->pRename; pRVar9 != (RenameToken *)0x0; pRVar9 = pRVar9->pNext) {\n      if (*(void **)((long)pFromCol->a + lVar5 * 2 + -0x78) == pRVar9->p) {\n        pRVar9->p = data->aAction + lVar5 + -0x2d;\n        break;\n      }\n    }\n  }" { (for_statement "for (pRVar9 = pParse->pRename; pRVar9 != (RenameToken *)0x0; pRVar9 = pRVar9->pNext) {\n      if (*(void **)((long)pFromCol->a + lVar5 * 2 + -0x78) == pRVar9->p) {\n        pRVar9->p = data->aAction + lVar5 + -0x2d;\n        break;\n      }\n    }" for ( (assignment_expression "pRVar9 = pParse->pRename" identifier = (field_expression "pParse->pRename" identifier -> field_identifier)) ; (binary_expression "pRVar9 != (RenameToken *)0x0" identifier != (cast_expression "(RenameToken *)0x0" ( (type_descriptor "RenameToken *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ; (assignment_expression "pRVar9 = pRVar9->pNext" identifier = (field_expression "pRVar9->pNext" identifier -> field_identifier)) ) (compound_statement "{\n      if (*(void **)((long)pFromCol->a + lVar5 * 2 + -0x78) == pRVar9->p) {\n        pRVar9->p = data->aAction + lVar5 + -0x2d;\n        break;\n      }\n    }" { (if_statement "if (*(void **)((long)pFromCol->a + lVar5 * 2 + -0x78) == pRVar9->p) {\n        pRVar9->p = data->aAction + lVar5 + -0x2d;\n        break;\n      }" if (parenthesized_expression "(*(void **)((long)pFromCol->a + lVar5 * 2 + -0x78) == pRVar9->p)" ( (binary_expression "*(void **)((long)pFromCol->a + lVar5 * 2 + -0x78) == pRVar9->p" (pointer_expression "*(void **)((long)pFromCol->a + lVar5 * 2 + -0x78)" * (cast_expression "(void **)((long)pFromCol->a + lVar5 * 2 + -0x78)" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "((long)pFromCol->a + lVar5 * 2 + -0x78)" ( (binary_expression "(long)pFromCol->a + lVar5 * 2 + -0x78" (binary_expression "(long)pFromCol->a + lVar5 * 2" (cast_expression "(long)pFromCol->a" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (field_expression "pFromCol->a" identifier -> field_identifier)) + (binary_expression "lVar5 * 2" identifier * number_literal)) + number_literal) )))) == (field_expression "pRVar9->p" identifier -> field_identifier)) )) (compound_statement "{\n        pRVar9->p = data->aAction + lVar5 + -0x2d;\n        break;\n      }" { (expression_statement "pRVar9->p = data->aAction + lVar5 + -0x2d;" (assignment_expression "pRVar9->p = data->aAction + lVar5 + -0x2d" (field_expression "pRVar9->p" identifier -> field_identifier) = (binary_expression "data->aAction + lVar5 + -0x2d" (binary_expression "data->aAction + lVar5" (field_expression "data->aAction" identifier -> field_identifier) + identifier) + number_literal)) ;) (break_statement "break;" break ;) })) })) })) (expression_statement "iVar13 = iVar13 + 1;" (assignment_expression "iVar13 = iVar13 + 1" identifier = (binary_expression "iVar13 + 1" identifier + number_literal)) ;) (expression_statement "lVar5 = lVar5 + 0x10;" (assignment_expression "lVar5 = lVar5 + 0x10" identifier = (binary_expression "lVar5 + 0x10" identifier + number_literal)) ;) (if_statement "if (iVar13 == local_50) goto code_r0x0014bf3e;" if (parenthesized_expression "(iVar13 == local_50)" ( (binary_expression "iVar13 == local_50" identifier == identifier) )) (goto_statement "goto code_r0x0014bf3e;" goto statement_identifier ;)) (goto_statement "goto LAB_0014be20;" goto statement_identifier ;) (labeled_statement "code_r0x0014bf3e:\n  if (pToCol != (ExprList *)0x0) {\nLAB_0014bf4f:\n    ppcVar15 = &data->aCol[0].zCol;\n    ppcVar18 = &pToCol->a[0].zName;\n    iVar13 = 0;\n    puVar17 = puVar17 + (uVar2 + 1);\n    do {\n      if (*ppcVar18 == (char *)0x0) {\n        lVar5 = 1;\n        __n = 0;\n        puVar14 = puVar17;\n      }\n      else {\n        sVar7 = strlen(*ppcVar18);\n        __n = (ulong)((uint)sVar7 & 0x3fffffff);\n        lVar5 = __n + 1;\n        puVar14 = puVar17 + __n;\n      }\n      *ppcVar15 = (char *)puVar17;\n      __src = *ppcVar18;\n      if (1 < pParse->eParseMode) {\n        for (pRVar9 = pParse->pRename; pRVar9 != (RenameToken *)0x0; pRVar9 = pRVar9->pNext) {\n          if (__src == (char *)pRVar9->p) {\n            pRVar9->p = puVar17;\n            __src = *ppcVar18;\n            break;\n          }\n        }\n      }\n      iVar13 = iVar13 + 1;\n      ppcVar18 = ppcVar18 + 4;\n      memcpy(puVar17,__src,__n);\n      ppcVar15 = ppcVar15 + 2;\n      *puVar14 = '\0';\n      puVar17 = puVar17 + lVar5;\n    } while (iVar13 < local_50);\n  }" statement_identifier : (if_statement "if (pToCol != (ExprList *)0x0) {\nLAB_0014bf4f:\n    ppcVar15 = &data->aCol[0].zCol;\n    ppcVar18 = &pToCol->a[0].zName;\n    iVar13 = 0;\n    puVar17 = puVar17 + (uVar2 + 1);\n    do {\n      if (*ppcVar18 == (char *)0x0) {\n        lVar5 = 1;\n        __n = 0;\n        puVar14 = puVar17;\n      }\n      else {\n        sVar7 = strlen(*ppcVar18);\n        __n = (ulong)((uint)sVar7 & 0x3fffffff);\n        lVar5 = __n + 1;\n        puVar14 = puVar17 + __n;\n      }\n      *ppcVar15 = (char *)puVar17;\n      __src = *ppcVar18;\n      if (1 < pParse->eParseMode) {\n        for (pRVar9 = pParse->pRename; pRVar9 != (RenameToken *)0x0; pRVar9 = pRVar9->pNext) {\n          if (__src == (char *)pRVar9->p) {\n            pRVar9->p = puVar17;\n            __src = *ppcVar18;\n            break;\n          }\n        }\n      }\n      iVar13 = iVar13 + 1;\n      ppcVar18 = ppcVar18 + 4;\n      memcpy(puVar17,__src,__n);\n      ppcVar15 = ppcVar15 + 2;\n      *puVar14 = '\0';\n      puVar17 = puVar17 + lVar5;\n    } while (iVar13 < local_50);\n  }" if (parenthesized_expression "(pToCol != (ExprList *)0x0)" ( (binary_expression "pToCol != (ExprList *)0x0" identifier != (cast_expression "(ExprList *)0x0" ( (type_descriptor "ExprList *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\nLAB_0014bf4f:\n    ppcVar15 = &data->aCol[0].zCol;\n    ppcVar18 = &pToCol->a[0].zName;\n    iVar13 = 0;\n    puVar17 = puVar17 + (uVar2 + 1);\n    do {\n      if (*ppcVar18 == (char *)0x0) {\n        lVar5 = 1;\n        __n = 0;\n        puVar14 = puVar17;\n      }\n      else {\n        sVar7 = strlen(*ppcVar18);\n        __n = (ulong)((uint)sVar7 & 0x3fffffff);\n        lVar5 = __n + 1;\n        puVar14 = puVar17 + __n;\n      }\n      *ppcVar15 = (char *)puVar17;\n      __src = *ppcVar18;\n      if (1 < pParse->eParseMode) {\n        for (pRVar9 = pParse->pRename; pRVar9 != (RenameToken *)0x0; pRVar9 = pRVar9->pNext) {\n          if (__src == (char *)pRVar9->p) {\n            pRVar9->p = puVar17;\n            __src = *ppcVar18;\n            break;\n          }\n        }\n      }\n      iVar13 = iVar13 + 1;\n      ppcVar18 = ppcVar18 + 4;\n      memcpy(puVar17,__src,__n);\n      ppcVar15 = ppcVar15 + 2;\n      *puVar14 = '\0';\n      puVar17 = puVar17 + lVar5;\n    } while (iVar13 < local_50);\n  }" { (labeled_statement "LAB_0014bf4f:\n    ppcVar15 = &data->aCol[0].zCol;" statement_identifier : (expression_statement "ppcVar15 = &data->aCol[0].zCol;" (assignment_expression "ppcVar15 = &data->aCol[0].zCol" identifier = (pointer_expression "&data->aCol[0].zCol" & (field_expression "data->aCol[0].zCol" (subscript_expression "data->aCol[0]" (field_expression "data->aCol" identifier -> field_identifier) [ number_literal ]) . field_identifier))) ;)) (expression_statement "ppcVar18 = &pToCol->a[0].zName;" (assignment_expression "ppcVar18 = &pToCol->a[0].zName" identifier = (pointer_expression "&pToCol->a[0].zName" & (field_expression "pToCol->a[0].zName" (subscript_expression "pToCol->a[0]" (field_expression "pToCol->a" identifier -> field_identifier) [ number_literal ]) . field_identifier))) ;) (expression_statement "iVar13 = 0;" (assignment_expression "iVar13 = 0" identifier = number_literal) ;) (expression_statement "puVar17 = puVar17 + (uVar2 + 1);" (assignment_expression "puVar17 = puVar17 + (uVar2 + 1)" identifier = (binary_expression "puVar17 + (uVar2 + 1)" identifier + (parenthesized_expression "(uVar2 + 1)" ( (binary_expression "uVar2 + 1" identifier + number_literal) )))) ;) (do_statement "do {\n      if (*ppcVar18 == (char *)0x0) {\n        lVar5 = 1;\n        __n = 0;\n        puVar14 = puVar17;\n      }\n      else {\n        sVar7 = strlen(*ppcVar18);\n        __n = (ulong)((uint)sVar7 & 0x3fffffff);\n        lVar5 = __n + 1;\n        puVar14 = puVar17 + __n;\n      }\n      *ppcVar15 = (char *)puVar17;\n      __src = *ppcVar18;\n      if (1 < pParse->eParseMode) {\n        for (pRVar9 = pParse->pRename; pRVar9 != (RenameToken *)0x0; pRVar9 = pRVar9->pNext) {\n          if (__src == (char *)pRVar9->p) {\n            pRVar9->p = puVar17;\n            __src = *ppcVar18;\n            break;\n          }\n        }\n      }\n      iVar13 = iVar13 + 1;\n      ppcVar18 = ppcVar18 + 4;\n      memcpy(puVar17,__src,__n);\n      ppcVar15 = ppcVar15 + 2;\n      *puVar14 = '\0';\n      puVar17 = puVar17 + lVar5;\n    } while (iVar13 < local_50);" do (compound_statement "{\n      if (*ppcVar18 == (char *)0x0) {\n        lVar5 = 1;\n        __n = 0;\n        puVar14 = puVar17;\n      }\n      else {\n        sVar7 = strlen(*ppcVar18);\n        __n = (ulong)((uint)sVar7 & 0x3fffffff);\n        lVar5 = __n + 1;\n        puVar14 = puVar17 + __n;\n      }\n      *ppcVar15 = (char *)puVar17;\n      __src = *ppcVar18;\n      if (1 < pParse->eParseMode) {\n        for (pRVar9 = pParse->pRename; pRVar9 != (RenameToken *)0x0; pRVar9 = pRVar9->pNext) {\n          if (__src == (char *)pRVar9->p) {\n            pRVar9->p = puVar17;\n            __src = *ppcVar18;\n            break;\n          }\n        }\n      }\n      iVar13 = iVar13 + 1;\n      ppcVar18 = ppcVar18 + 4;\n      memcpy(puVar17,__src,__n);\n      ppcVar15 = ppcVar15 + 2;\n      *puVar14 = '\0';\n      puVar17 = puVar17 + lVar5;\n    }" { (if_statement "if (*ppcVar18 == (char *)0x0) {\n        lVar5 = 1;\n        __n = 0;\n        puVar14 = puVar17;\n      }\n      else {\n        sVar7 = strlen(*ppcVar18);\n        __n = (ulong)((uint)sVar7 & 0x3fffffff);\n        lVar5 = __n + 1;\n        puVar14 = puVar17 + __n;\n      }" if (parenthesized_expression "(*ppcVar18 == (char *)0x0)" ( (binary_expression "*ppcVar18 == (char *)0x0" (pointer_expression "*ppcVar18" * identifier) == (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        lVar5 = 1;\n        __n = 0;\n        puVar14 = puVar17;\n      }" { (expression_statement "lVar5 = 1;" (assignment_expression "lVar5 = 1" identifier = number_literal) ;) (expression_statement "__n = 0;" (assignment_expression "__n = 0" identifier = number_literal) ;) (expression_statement "puVar14 = puVar17;" (assignment_expression "puVar14 = puVar17" identifier = identifier) ;) }) (else_clause "else {\n        sVar7 = strlen(*ppcVar18);\n        __n = (ulong)((uint)sVar7 & 0x3fffffff);\n        lVar5 = __n + 1;\n        puVar14 = puVar17 + __n;\n      }" else (compound_statement "{\n        sVar7 = strlen(*ppcVar18);\n        __n = (ulong)((uint)sVar7 & 0x3fffffff);\n        lVar5 = __n + 1;\n        puVar14 = puVar17 + __n;\n      }" { (expression_statement "sVar7 = strlen(*ppcVar18);" (assignment_expression "sVar7 = strlen(*ppcVar18)" identifier = (call_expression "strlen(*ppcVar18)" identifier (argument_list "(*ppcVar18)" ( (pointer_expression "*ppcVar18" * identifier) )))) ;) (expression_statement "__n = (ulong)((uint)sVar7 & 0x3fffffff);" (assignment_expression "__n = (ulong)((uint)sVar7 & 0x3fffffff)" identifier = (call_expression "(ulong)((uint)sVar7 & 0x3fffffff)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "((uint)sVar7 & 0x3fffffff)" ( (binary_expression "(uint)sVar7 & 0x3fffffff" (cast_expression "(uint)sVar7" ( (type_descriptor "uint" type_identifier) ) identifier) & number_literal) )))) ;) (expression_statement "lVar5 = __n + 1;" (assignment_expression "lVar5 = __n + 1" identifier = (binary_expression "__n + 1" identifier + number_literal)) ;) (expression_statement "puVar14 = puVar17 + __n;" (assignment_expression "puVar14 = puVar17 + __n" identifier = (binary_expression "puVar17 + __n" identifier + identifier)) ;) }))) (expression_statement "*ppcVar15 = (char *)puVar17;" (assignment_expression "*ppcVar15 = (char *)puVar17" (pointer_expression "*ppcVar15" * identifier) = (cast_expression "(char *)puVar17" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier)) ;) (expression_statement "__src = *ppcVar18;" (assignment_expression "__src = *ppcVar18" identifier = (pointer_expression "*ppcVar18" * identifier)) ;) (if_statement "if (1 < pParse->eParseMode) {\n        for (pRVar9 = pParse->pRename; pRVar9 != (RenameToken *)0x0; pRVar9 = pRVar9->pNext) {\n          if (__src == (char *)pRVar9->p) {\n            pRVar9->p = puVar17;\n            __src = *ppcVar18;\n            break;\n          }\n        }\n      }" if (parenthesized_expression "(1 < pParse->eParseMode)" ( (binary_expression "1 < pParse->eParseMode" number_literal < (field_expression "pParse->eParseMode" identifier -> field_identifier)) )) (compound_statement "{\n        for (pRVar9 = pParse->pRename; pRVar9 != (RenameToken *)0x0; pRVar9 = pRVar9->pNext) {\n          if (__src == (char *)pRVar9->p) {\n            pRVar9->p = puVar17;\n            __src = *ppcVar18;\n            break;\n          }\n        }\n      }" { (for_statement "for (pRVar9 = pParse->pRename; pRVar9 != (RenameToken *)0x0; pRVar9 = pRVar9->pNext) {\n          if (__src == (char *)pRVar9->p) {\n            pRVar9->p = puVar17;\n            __src = *ppcVar18;\n            break;\n          }\n        }" for ( (assignment_expression "pRVar9 = pParse->pRename" identifier = (field_expression "pParse->pRename" identifier -> field_identifier)) ; (binary_expression "pRVar9 != (RenameToken *)0x0" identifier != (cast_expression "(RenameToken *)0x0" ( (type_descriptor "RenameToken *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ; (assignment_expression "pRVar9 = pRVar9->pNext" identifier = (field_expression "pRVar9->pNext" identifier -> field_identifier)) ) (compound_statement "{\n          if (__src == (char *)pRVar9->p) {\n            pRVar9->p = puVar17;\n            __src = *ppcVar18;\n            break;\n          }\n        }" { (if_statement "if (__src == (char *)pRVar9->p) {\n            pRVar9->p = puVar17;\n            __src = *ppcVar18;\n            break;\n          }" if (parenthesized_expression "(__src == (char *)pRVar9->p)" ( (binary_expression "__src == (char *)pRVar9->p" identifier == (cast_expression "(char *)pRVar9->p" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (field_expression "pRVar9->p" identifier -> field_identifier))) )) (compound_statement "{\n            pRVar9->p = puVar17;\n            __src = *ppcVar18;\n            break;\n          }" { (expression_statement "pRVar9->p = puVar17;" (assignment_expression "pRVar9->p = puVar17" (field_expression "pRVar9->p" identifier -> field_identifier) = identifier) ;) (expression_statement "__src = *ppcVar18;" (assignment_expression "__src = *ppcVar18" identifier = (pointer_expression "*ppcVar18" * identifier)) ;) (break_statement "break;" break ;) })) })) })) (expression_statement "iVar13 = iVar13 + 1;" (assignment_expression "iVar13 = iVar13 + 1" identifier = (binary_expression "iVar13 + 1" identifier + number_literal)) ;) (expression_statement "ppcVar18 = ppcVar18 + 4;" (assignment_expression "ppcVar18 = ppcVar18 + 4" identifier = (binary_expression "ppcVar18 + 4" identifier + number_literal)) ;) (expression_statement "memcpy(puVar17,__src,__n);" (call_expression "memcpy(puVar17,__src,__n)" identifier (argument_list "(puVar17,__src,__n)" ( identifier , identifier , identifier ))) ;) (expression_statement "ppcVar15 = ppcVar15 + 2;" (assignment_expression "ppcVar15 = ppcVar15 + 2" identifier = (binary_expression "ppcVar15 + 2" identifier + number_literal)) ;) (expression_statement "*puVar14 = '\0';" (assignment_expression "*puVar14 = '\0'" (pointer_expression "*puVar14" * identifier) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "puVar17 = puVar17 + lVar5;" (assignment_expression "puVar17 = puVar17 + lVar5" identifier = (binary_expression "puVar17 + lVar5" identifier + identifier)) ;) }) while (parenthesized_expression "(iVar13 < local_50)" ( (binary_expression "iVar13 < local_50" identifier < identifier) )) ;) }))) (labeled_statement "LAB_0014c064:\n  local_4c = (undefined2)flags;" statement_identifier : (expression_statement "local_4c = (undefined2)flags;" (assignment_expression "local_4c = (undefined2)flags" identifier = (cast_expression "(undefined2)flags" ( (type_descriptor "undefined2" type_identifier) ) identifier)) ;)) (expression_statement "data->isDeferred = '\0';" (assignment_expression "data->isDeferred = '\0'" (field_expression "data->isDeferred" identifier -> field_identifier) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "*(undefined2 *)data->aAction = local_4c;" (assignment_expression "*(undefined2 *)data->aAction = local_4c" (pointer_expression "*(undefined2 *)data->aAction" * (cast_expression "(undefined2 *)data->aAction" ( (type_descriptor "undefined2 *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "data->aAction" identifier -> field_identifier))) = identifier) ;) (expression_statement "pFVar8 = (FKey *)sqlite3HashInsert(&pTVar3->pSchema->fkeyHash,data->zTo,data);" (assignment_expression "pFVar8 = (FKey *)sqlite3HashInsert(&pTVar3->pSchema->fkeyHash,data->zTo,data)" identifier = (cast_expression "(FKey *)sqlite3HashInsert(&pTVar3->pSchema->fkeyHash,data->zTo,data)" ( (type_descriptor "FKey *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "sqlite3HashInsert(&pTVar3->pSchema->fkeyHash,data->zTo,data)" identifier (argument_list "(&pTVar3->pSchema->fkeyHash,data->zTo,data)" ( (pointer_expression "&pTVar3->pSchema->fkeyHash" & (field_expression "pTVar3->pSchema->fkeyHash" (field_expression "pTVar3->pSchema" identifier -> field_identifier) -> field_identifier)) , (field_expression "data->zTo" identifier -> field_identifier) , identifier ))))) ;) (if_statement "if (pFVar8 == data) {\n    uVar2._0_1_ = db->temp_store;\n    uVar2._1_1_ = db->mallocFailed;\n    uVar2._2_1_ = db->bBenignMalloc;\n    uVar2._3_1_ = db->dfltLockMode;\n    if ((uVar2 & 0xffff00) == 0) {\n      sqlite3OomFault(db);\n    }\nLAB_0014bead:\n    sqlite3DbFreeNN(db,data);\n  }\n  else {\n    if (pFVar8 != (FKey *)0x0) {\n      data->pNextTo = pFVar8;\n      pFVar8->pPrevTo = data;\n    }\n    pTVar3->pFKey = data;\n  }" if (parenthesized_expression "(pFVar8 == data)" ( (binary_expression "pFVar8 == data" identifier == identifier) )) (compound_statement "{\n    uVar2._0_1_ = db->temp_store;\n    uVar2._1_1_ = db->mallocFailed;\n    uVar2._2_1_ = db->bBenignMalloc;\n    uVar2._3_1_ = db->dfltLockMode;\n    if ((uVar2 & 0xffff00) == 0) {\n      sqlite3OomFault(db);\n    }\nLAB_0014bead:\n    sqlite3DbFreeNN(db,data);\n  }" { (expression_statement "uVar2._0_1_ = db->temp_store;" (assignment_expression "uVar2._0_1_ = db->temp_store" (field_expression "uVar2._0_1_" identifier . field_identifier) = (field_expression "db->temp_store" identifier -> field_identifier)) ;) (expression_statement "uVar2._1_1_ = db->mallocFailed;" (assignment_expression "uVar2._1_1_ = db->mallocFailed" (field_expression "uVar2._1_1_" identifier . field_identifier) = (field_expression "db->mallocFailed" identifier -> field_identifier)) ;) (expression_statement "uVar2._2_1_ = db->bBenignMalloc;" (assignment_expression "uVar2._2_1_ = db->bBenignMalloc" (field_expression "uVar2._2_1_" identifier . field_identifier) = (field_expression "db->bBenignMalloc" identifier -> field_identifier)) ;) (expression_statement "uVar2._3_1_ = db->dfltLockMode;" (assignment_expression "uVar2._3_1_ = db->dfltLockMode" (field_expression "uVar2._3_1_" identifier . field_identifier) = (field_expression "db->dfltLockMode" identifier -> field_identifier)) ;) (if_statement "if ((uVar2 & 0xffff00) == 0) {\n      sqlite3OomFault(db);\n    }" if (parenthesized_expression "((uVar2 & 0xffff00) == 0)" ( (binary_expression "(uVar2 & 0xffff00) == 0" (parenthesized_expression "(uVar2 & 0xffff00)" ( (binary_expression "uVar2 & 0xffff00" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n      sqlite3OomFault(db);\n    }" { (expression_statement "sqlite3OomFault(db);" (call_expression "sqlite3OomFault(db)" identifier (argument_list "(db)" ( identifier ))) ;) })) (labeled_statement "LAB_0014bead:\n    sqlite3DbFreeNN(db,data);" statement_identifier : (expression_statement "sqlite3DbFreeNN(db,data);" (call_expression "sqlite3DbFreeNN(db,data)" identifier (argument_list "(db,data)" ( identifier , identifier ))) ;)) }) (else_clause "else {\n    if (pFVar8 != (FKey *)0x0) {\n      data->pNextTo = pFVar8;\n      pFVar8->pPrevTo = data;\n    }\n    pTVar3->pFKey = data;\n  }" else (compound_statement "{\n    if (pFVar8 != (FKey *)0x0) {\n      data->pNextTo = pFVar8;\n      pFVar8->pPrevTo = data;\n    }\n    pTVar3->pFKey = data;\n  }" { (if_statement "if (pFVar8 != (FKey *)0x0) {\n      data->pNextTo = pFVar8;\n      pFVar8->pPrevTo = data;\n    }" if (parenthesized_expression "(pFVar8 != (FKey *)0x0)" ( (binary_expression "pFVar8 != (FKey *)0x0" identifier != (cast_expression "(FKey *)0x0" ( (type_descriptor "FKey *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      data->pNextTo = pFVar8;\n      pFVar8->pPrevTo = data;\n    }" { (expression_statement "data->pNextTo = pFVar8;" (assignment_expression "data->pNextTo = pFVar8" (field_expression "data->pNextTo" identifier -> field_identifier) = identifier) ;) (expression_statement "pFVar8->pPrevTo = data;" (assignment_expression "pFVar8->pPrevTo = data" (field_expression "pFVar8->pPrevTo" identifier -> field_identifier) = identifier) ;) })) (expression_statement "pTVar3->pFKey = data;" (assignment_expression "pTVar3->pFKey = data" (field_expression "pTVar3->pFKey" identifier -> field_identifier) = identifier) ;) }))) (labeled_statement "joined_r0x0014bec0:\n  if (pFromCol != (ExprList *)0x0) {\nLAB_0014bec2:\n    exprListDeleteNN(db,pFromCol);\n  }" statement_identifier : (if_statement "if (pFromCol != (ExprList *)0x0) {\nLAB_0014bec2:\n    exprListDeleteNN(db,pFromCol);\n  }" if (parenthesized_expression "(pFromCol != (ExprList *)0x0)" ( (binary_expression "pFromCol != (ExprList *)0x0" identifier != (cast_expression "(ExprList *)0x0" ( (type_descriptor "ExprList *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\nLAB_0014bec2:\n    exprListDeleteNN(db,pFromCol);\n  }" { (labeled_statement "LAB_0014bec2:\n    exprListDeleteNN(db,pFromCol);" statement_identifier : (expression_statement "exprListDeleteNN(db,pFromCol);" (call_expression "exprListDeleteNN(db,pFromCol)" identifier (argument_list "(db,pFromCol)" ( identifier , identifier ))) ;)) }))) (goto_statement "goto LAB_0014bed1;" goto statement_identifier ;) })))
(translation_unit "void FUN_0014bc80(long *param_1,int *param_2,undefined8 *param_3,int *param_4,undefined2 param_5)\n\n{\n  byte bVar1;\n  long lVar2;\n  long lVar3;\n  long *plVar4;\n  undefined8 uVar5;\n  int iVar6;\n  long *plVar7;\n  long lVar8;\n  long lVar9;\n  size_t sVar10;\n  ulong __n;\n  long *plVar11;\n  undefined8 *puVar12;\n  byte *pbVar13;\n  void *pvVar14;\n  int iVar15;\n  undefined1 *puVar16;\n  long *plVar17;\n  int iVar18;\n  undefined1 *__dest;\n  int *piVar19;\n  int local_50;\n  \n  lVar2 = *param_1;\n  lVar3 = param_1[0x27];\n  if ((lVar3 == 0) || (*(char *)((long)param_1 + 0x10e) == '\x01')) goto joined_r0x0014bec0;\n  if (param_2 != (int *)0x0) {\n    local_50 = *param_2;\n    if (param_4 == (int *)0x0) {\n      plVar7 = (long *)FUN_0011b8f0(lVar2,(long)(local_50 * 0x10 + 0x41 + *(int *)(param_3 + 1)));\n      if (plVar7 != (long *)0x0) {\n        lVar8 = ((long)local_50 + 4) * 0x10;\n        goto LAB_0014bd94;\n      }\n    }\n    else {\n      iVar6 = *param_4;\n      if (iVar6 == local_50) {\n        iVar15 = iVar6 * 0x10 + 0x41 + *(int *)(param_3 + 1);\n        if (0 < iVar6) goto LAB_0014bd06;\n        goto LAB_0014bd6e;\n      }\n      FUN_0014a9d0(param_1,\n                   "number of columns in foreign key does not match the number of columns in the referenced table"\n                  );\n    }\n    goto LAB_0014bec2;\n  }\n  iVar6 = *(short *)(lVar3 + 0x46) + -1;\n  if (-1 < iVar6) {\n    if (param_4 == (int *)0x0) {\n      plVar7 = (long *)FUN_0011b8f0(lVar2,(long)(*(int *)(param_3 + 1) + 0x51));\n      if (plVar7 == (long *)0x0) {\n        return;\n      }\n      lVar8 = 0x50;\n      local_50 = 1;\n    }\n    else {\n      if (*param_4 != 1) {\n        FUN_0014a9d0(param_1,"foreign key on %s should reference only one column of table %T",\n                     *(undefined8 *)((long)iVar6 * 0x20 + *(long *)(lVar3 + 8)),param_3);\n        goto LAB_0014bed9;\n      }\n      local_50 = 1;\n      iVar15 = *(int *)(param_3 + 1) + 0x51;\n      iVar6 = 1;\nLAB_0014bd06:\n      iVar18 = 0;\n      piVar19 = param_4 + 4;\n      do {\n        while (*(char **)piVar19 != (char *)0x0) {\n          sVar10 = strlen(*(char **)piVar19);\n          iVar18 = iVar18 + 1;\n          piVar19 = piVar19 + 8;\n          iVar15 = iVar15 + ((uint)sVar10 & 0x3fffffff) + 1;\n          if (iVar6 <= iVar18) goto LAB_0014bd6e;\n        }\n        iVar18 = iVar18 + 1;\n        piVar19 = piVar19 + 8;\n        iVar15 = iVar15 + 1;\n      } while (iVar18 < iVar6);\nLAB_0014bd6e:\n      plVar7 = (long *)FUN_0011b8f0(lVar2,(long)iVar15);\n      if (plVar7 == (long *)0x0) goto joined_r0x0014bec0;\n      lVar8 = ((long)local_50 + 4) * 0x10;\n    }\nLAB_0014bd94:\n    *plVar7 = lVar3;\n    lVar9 = *(long *)(lVar3 + 0x20);\n    pvVar14 = (void *)((long)plVar7 + lVar8);\n    plVar7[2] = (long)pvVar14;\n    plVar7[1] = lVar9;\n    if ((1 < *(byte *)((long)param_1 + 0x10e)) &&\n       (puVar12 = (undefined8 *)FUN_0011b8f0(*param_1,0x20), puVar12 != (undefined8 *)0x0)) {\n      *puVar12 = pvVar14;\n      uVar5 = param_3[1];\n      puVar12[1] = *param_3;\n      puVar12[2] = uVar5;\n      puVar12[3] = param_1[0x32];\n      param_1[0x32] = (long)puVar12;\n    }\n    memcpy(pvVar14,(void *)*param_3,(ulong)*(uint *)(param_3 + 1));\n    *(undefined1 *)((long)pvVar14 + (ulong)*(uint *)(param_3 + 1)) = 0;\n    FUN_0010f690(pvVar14);\n    iVar6 = *(int *)(param_3 + 1);\n    *(int *)(plVar7 + 5) = local_50;\n    if (param_2 == (int *)0x0) {\n      *(int *)(plVar7 + 8) = *(short *)(lVar3 + 0x46) + -1;\n      if ((param_4 != (int *)0x0) && (0 < local_50)) goto LAB_0014bf4f;\n    }\n    else {\n      lVar8 = 0x40;\n      if (0 < local_50) {\n        iVar15 = 0;\nLAB_0014be20:\n        pbVar13 = *(byte **)((long)param_2 + lVar8 * 2 + -0x70);\n        if (0 < *(short *)(lVar3 + 0x46)) {\n          puVar12 = *(undefined8 **)(lVar3 + 8);\n          iVar18 = 0;\n          do {\n            bVar1 = *(byte *)*puVar12;\n            if ((&DAT_001f5800)[bVar1] == (&DAT_001f5800)[*pbVar13]) {\n              if (bVar1 == 0) goto LAB_0014bf08;\n              lVar9 = 1;\n              while (bVar1 = ((byte *)*puVar12)[lVar9],\n                    (&DAT_001f5800)[bVar1] == (&DAT_001f5800)[pbVar13[lVar9]]) {\n                lVar9 = lVar9 + 1;\n                if (bVar1 == 0) goto LAB_0014bf08;\n              }\n            }\n            iVar18 = iVar18 + 1;\n            puVar12 = puVar12 + 4;\n            if (iVar18 == *(short *)(lVar3 + 0x46)) break;\n          } while( true );\n        }\n        goto LAB_0014be9c;\n      }\n    }\n    goto LAB_0014c064;\n  }\nLAB_0014bed1:\n  if (param_4 == (int *)0x0) {\n    return;\n  }\nLAB_0014bed9:\n  FUN_0012cc80(lVar2,param_4);\n  return;\nLAB_0014bf08:\n  *(int *)((long)plVar7 + lVar8) = iVar18;\n  if (*(short *)(lVar3 + 0x46) <= iVar18) {\n    pbVar13 = *(byte **)(param_2 + (long)iVar15 * 8 + 4);\nLAB_0014be9c:\n    FUN_0014a9d0(param_1,"unknown column \"%s\" in foreign key definition",pbVar13);\n    goto LAB_0014bead;\n  }\n  if (1 < *(byte *)((long)param_1 + 0x10e)) {\n    for (plVar11 = (long *)param_1[0x32]; plVar11 != (long *)0x0; plVar11 = (long *)plVar11[3]) {\n      if (*(long *)((long)param_2 + lVar8 * 2 + -0x70) == *plVar11) {\n        *plVar11 = (long)plVar7 + lVar8;\n        break;\n      }\n    }\n  }\n  iVar15 = iVar15 + 1;\n  lVar8 = lVar8 + 0x10;\n  if (iVar15 == local_50) goto code_r0x0014bf3e;\n  goto LAB_0014be20;\ncode_r0x0014bf3e:\n  if (param_4 != (int *)0x0) {\nLAB_0014bf4f:\n    plVar17 = plVar7 + 9;\n    plVar11 = (long *)(param_4 + 4);\n    iVar15 = 0;\n    __dest = (undefined1 *)((long)pvVar14 + (ulong)(iVar6 + 1));\n    do {\n      if ((char *)*plVar11 == (char *)0x0) {\n        lVar8 = 1;\n        __n = 0;\n        puVar16 = __dest;\n      }\n      else {\n        sVar10 = strlen((char *)*plVar11);\n        __n = (ulong)((uint)sVar10 & 0x3fffffff);\n        lVar8 = __n + 1;\n        puVar16 = __dest + __n;\n      }\n      *plVar17 = (long)__dest;\n      pvVar14 = (void *)*plVar11;\n      if (1 < *(byte *)((long)param_1 + 0x10e)) {\n        for (plVar4 = (long *)param_1[0x32]; plVar4 != (long *)0x0; plVar4 = (long *)plVar4[3]) {\n          if (pvVar14 == (void *)*plVar4) {\n            *plVar4 = (long)__dest;\n            pvVar14 = (void *)*plVar11;\n            break;\n          }\n        }\n      }\n      iVar15 = iVar15 + 1;\n      plVar11 = plVar11 + 4;\n      memcpy(__dest,pvVar14,__n);\n      plVar17 = plVar17 + 2;\n      *puVar16 = 0;\n      __dest = __dest + lVar8;\n    } while (iVar15 < local_50);\n  }\nLAB_0014c064:\n  *(undefined1 *)((long)plVar7 + 0x2c) = 0;\n  *(undefined2 *)((long)plVar7 + 0x2d) = param_5;\n  plVar11 = (long *)FUN_0011da30(*(long *)(lVar3 + 0x70) + 0x50,plVar7[2],plVar7);\n  if (plVar11 == plVar7) {\n    if ((*(uint *)(lVar2 + 0x60) & 0xffff00) == 0) {\n      FUN_0011b860(lVar2);\n    }\nLAB_0014bead:\n    FUN_00119e90(lVar2,plVar7);\n  }\n  else {\n    if (plVar11 != (long *)0x0) {\n      plVar7[3] = (long)plVar11;\n      plVar11[4] = (long)plVar7;\n    }\n    *(long **)(lVar3 + 0x20) = plVar7;\n  }\njoined_r0x0014bec0:\n  if (param_2 != (int *)0x0) {\nLAB_0014bec2:\n    FUN_0012cc80(lVar2,param_2);\n  }\n  goto LAB_0014bed1;\n}\n\n" (function_definition "void FUN_0014bc80(long *param_1,int *param_2,undefined8 *param_3,int *param_4,undefined2 param_5)\n\n{\n  byte bVar1;\n  long lVar2;\n  long lVar3;\n  long *plVar4;\n  undefined8 uVar5;\n  int iVar6;\n  long *plVar7;\n  long lVar8;\n  long lVar9;\n  size_t sVar10;\n  ulong __n;\n  long *plVar11;\n  undefined8 *puVar12;\n  byte *pbVar13;\n  void *pvVar14;\n  int iVar15;\n  undefined1 *puVar16;\n  long *plVar17;\n  int iVar18;\n  undefined1 *__dest;\n  int *piVar19;\n  int local_50;\n  \n  lVar2 = *param_1;\n  lVar3 = param_1[0x27];\n  if ((lVar3 == 0) || (*(char *)((long)param_1 + 0x10e) == '\x01')) goto joined_r0x0014bec0;\n  if (param_2 != (int *)0x0) {\n    local_50 = *param_2;\n    if (param_4 == (int *)0x0) {\n      plVar7 = (long *)FUN_0011b8f0(lVar2,(long)(local_50 * 0x10 + 0x41 + *(int *)(param_3 + 1)));\n      if (plVar7 != (long *)0x0) {\n        lVar8 = ((long)local_50 + 4) * 0x10;\n        goto LAB_0014bd94;\n      }\n    }\n    else {\n      iVar6 = *param_4;\n      if (iVar6 == local_50) {\n        iVar15 = iVar6 * 0x10 + 0x41 + *(int *)(param_3 + 1);\n        if (0 < iVar6) goto LAB_0014bd06;\n        goto LAB_0014bd6e;\n      }\n      FUN_0014a9d0(param_1,\n                   "number of columns in foreign key does not match the number of columns in the referenced table"\n                  );\n    }\n    goto LAB_0014bec2;\n  }\n  iVar6 = *(short *)(lVar3 + 0x46) + -1;\n  if (-1 < iVar6) {\n    if (param_4 == (int *)0x0) {\n      plVar7 = (long *)FUN_0011b8f0(lVar2,(long)(*(int *)(param_3 + 1) + 0x51));\n      if (plVar7 == (long *)0x0) {\n        return;\n      }\n      lVar8 = 0x50;\n      local_50 = 1;\n    }\n    else {\n      if (*param_4 != 1) {\n        FUN_0014a9d0(param_1,"foreign key on %s should reference only one column of table %T",\n                     *(undefined8 *)((long)iVar6 * 0x20 + *(long *)(lVar3 + 8)),param_3);\n        goto LAB_0014bed9;\n      }\n      local_50 = 1;\n      iVar15 = *(int *)(param_3 + 1) + 0x51;\n      iVar6 = 1;\nLAB_0014bd06:\n      iVar18 = 0;\n      piVar19 = param_4 + 4;\n      do {\n        while (*(char **)piVar19 != (char *)0x0) {\n          sVar10 = strlen(*(char **)piVar19);\n          iVar18 = iVar18 + 1;\n          piVar19 = piVar19 + 8;\n          iVar15 = iVar15 + ((uint)sVar10 & 0x3fffffff) + 1;\n          if (iVar6 <= iVar18) goto LAB_0014bd6e;\n        }\n        iVar18 = iVar18 + 1;\n        piVar19 = piVar19 + 8;\n        iVar15 = iVar15 + 1;\n      } while (iVar18 < iVar6);\nLAB_0014bd6e:\n      plVar7 = (long *)FUN_0011b8f0(lVar2,(long)iVar15);\n      if (plVar7 == (long *)0x0) goto joined_r0x0014bec0;\n      lVar8 = ((long)local_50 + 4) * 0x10;\n    }\nLAB_0014bd94:\n    *plVar7 = lVar3;\n    lVar9 = *(long *)(lVar3 + 0x20);\n    pvVar14 = (void *)((long)plVar7 + lVar8);\n    plVar7[2] = (long)pvVar14;\n    plVar7[1] = lVar9;\n    if ((1 < *(byte *)((long)param_1 + 0x10e)) &&\n       (puVar12 = (undefined8 *)FUN_0011b8f0(*param_1,0x20), puVar12 != (undefined8 *)0x0)) {\n      *puVar12 = pvVar14;\n      uVar5 = param_3[1];\n      puVar12[1] = *param_3;\n      puVar12[2] = uVar5;\n      puVar12[3] = param_1[0x32];\n      param_1[0x32] = (long)puVar12;\n    }\n    memcpy(pvVar14,(void *)*param_3,(ulong)*(uint *)(param_3 + 1));\n    *(undefined1 *)((long)pvVar14 + (ulong)*(uint *)(param_3 + 1)) = 0;\n    FUN_0010f690(pvVar14);\n    iVar6 = *(int *)(param_3 + 1);\n    *(int *)(plVar7 + 5) = local_50;\n    if (param_2 == (int *)0x0) {\n      *(int *)(plVar7 + 8) = *(short *)(lVar3 + 0x46) + -1;\n      if ((param_4 != (int *)0x0) && (0 < local_50)) goto LAB_0014bf4f;\n    }\n    else {\n      lVar8 = 0x40;\n      if (0 < local_50) {\n        iVar15 = 0;\nLAB_0014be20:\n        pbVar13 = *(byte **)((long)param_2 + lVar8 * 2 + -0x70);\n        if (0 < *(short *)(lVar3 + 0x46)) {\n          puVar12 = *(undefined8 **)(lVar3 + 8);\n          iVar18 = 0;\n          do {\n            bVar1 = *(byte *)*puVar12;\n            if ((&DAT_001f5800)[bVar1] == (&DAT_001f5800)[*pbVar13]) {\n              if (bVar1 == 0) goto LAB_0014bf08;\n              lVar9 = 1;\n              while (bVar1 = ((byte *)*puVar12)[lVar9],\n                    (&DAT_001f5800)[bVar1] == (&DAT_001f5800)[pbVar13[lVar9]]) {\n                lVar9 = lVar9 + 1;\n                if (bVar1 == 0) goto LAB_0014bf08;\n              }\n            }\n            iVar18 = iVar18 + 1;\n            puVar12 = puVar12 + 4;\n            if (iVar18 == *(short *)(lVar3 + 0x46)) break;\n          } while( true );\n        }\n        goto LAB_0014be9c;\n      }\n    }\n    goto LAB_0014c064;\n  }\nLAB_0014bed1:\n  if (param_4 == (int *)0x0) {\n    return;\n  }\nLAB_0014bed9:\n  FUN_0012cc80(lVar2,param_4);\n  return;\nLAB_0014bf08:\n  *(int *)((long)plVar7 + lVar8) = iVar18;\n  if (*(short *)(lVar3 + 0x46) <= iVar18) {\n    pbVar13 = *(byte **)(param_2 + (long)iVar15 * 8 + 4);\nLAB_0014be9c:\n    FUN_0014a9d0(param_1,"unknown column \"%s\" in foreign key definition",pbVar13);\n    goto LAB_0014bead;\n  }\n  if (1 < *(byte *)((long)param_1 + 0x10e)) {\n    for (plVar11 = (long *)param_1[0x32]; plVar11 != (long *)0x0; plVar11 = (long *)plVar11[3]) {\n      if (*(long *)((long)param_2 + lVar8 * 2 + -0x70) == *plVar11) {\n        *plVar11 = (long)plVar7 + lVar8;\n        break;\n      }\n    }\n  }\n  iVar15 = iVar15 + 1;\n  lVar8 = lVar8 + 0x10;\n  if (iVar15 == local_50) goto code_r0x0014bf3e;\n  goto LAB_0014be20;\ncode_r0x0014bf3e:\n  if (param_4 != (int *)0x0) {\nLAB_0014bf4f:\n    plVar17 = plVar7 + 9;\n    plVar11 = (long *)(param_4 + 4);\n    iVar15 = 0;\n    __dest = (undefined1 *)((long)pvVar14 + (ulong)(iVar6 + 1));\n    do {\n      if ((char *)*plVar11 == (char *)0x0) {\n        lVar8 = 1;\n        __n = 0;\n        puVar16 = __dest;\n      }\n      else {\n        sVar10 = strlen((char *)*plVar11);\n        __n = (ulong)((uint)sVar10 & 0x3fffffff);\n        lVar8 = __n + 1;\n        puVar16 = __dest + __n;\n      }\n      *plVar17 = (long)__dest;\n      pvVar14 = (void *)*plVar11;\n      if (1 < *(byte *)((long)param_1 + 0x10e)) {\n        for (plVar4 = (long *)param_1[0x32]; plVar4 != (long *)0x0; plVar4 = (long *)plVar4[3]) {\n          if (pvVar14 == (void *)*plVar4) {\n            *plVar4 = (long)__dest;\n            pvVar14 = (void *)*plVar11;\n            break;\n          }\n        }\n      }\n      iVar15 = iVar15 + 1;\n      plVar11 = plVar11 + 4;\n      memcpy(__dest,pvVar14,__n);\n      plVar17 = plVar17 + 2;\n      *puVar16 = 0;\n      __dest = __dest + lVar8;\n    } while (iVar15 < local_50);\n  }\nLAB_0014c064:\n  *(undefined1 *)((long)plVar7 + 0x2c) = 0;\n  *(undefined2 *)((long)plVar7 + 0x2d) = param_5;\n  plVar11 = (long *)FUN_0011da30(*(long *)(lVar3 + 0x70) + 0x50,plVar7[2],plVar7);\n  if (plVar11 == plVar7) {\n    if ((*(uint *)(lVar2 + 0x60) & 0xffff00) == 0) {\n      FUN_0011b860(lVar2);\n    }\nLAB_0014bead:\n    FUN_00119e90(lVar2,plVar7);\n  }\n  else {\n    if (plVar11 != (long *)0x0) {\n      plVar7[3] = (long)plVar11;\n      plVar11[4] = (long)plVar7;\n    }\n    *(long **)(lVar3 + 0x20) = plVar7;\n  }\njoined_r0x0014bec0:\n  if (param_2 != (int *)0x0) {\nLAB_0014bec2:\n    FUN_0012cc80(lVar2,param_2);\n  }\n  goto LAB_0014bed1;\n}" primitive_type (function_declarator "FUN_0014bc80(long *param_1,int *param_2,undefined8 *param_3,int *param_4,undefined2 param_5)" identifier (parameter_list "(long *param_1,int *param_2,undefined8 *param_3,int *param_4,undefined2 param_5)" ( (parameter_declaration "long *param_1" (sized_type_specifier "long" long) (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "int *param_2" primitive_type (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "undefined8 *param_3" type_identifier (pointer_declarator "*param_3" * identifier)) , (parameter_declaration "int *param_4" primitive_type (pointer_declarator "*param_4" * identifier)) , (parameter_declaration "undefined2 param_5" type_identifier identifier) ))) (compound_statement "{\n  byte bVar1;\n  long lVar2;\n  long lVar3;\n  long *plVar4;\n  undefined8 uVar5;\n  int iVar6;\n  long *plVar7;\n  long lVar8;\n  long lVar9;\n  size_t sVar10;\n  ulong __n;\n  long *plVar11;\n  undefined8 *puVar12;\n  byte *pbVar13;\n  void *pvVar14;\n  int iVar15;\n  undefined1 *puVar16;\n  long *plVar17;\n  int iVar18;\n  undefined1 *__dest;\n  int *piVar19;\n  int local_50;\n  \n  lVar2 = *param_1;\n  lVar3 = param_1[0x27];\n  if ((lVar3 == 0) || (*(char *)((long)param_1 + 0x10e) == '\x01')) goto joined_r0x0014bec0;\n  if (param_2 != (int *)0x0) {\n    local_50 = *param_2;\n    if (param_4 == (int *)0x0) {\n      plVar7 = (long *)FUN_0011b8f0(lVar2,(long)(local_50 * 0x10 + 0x41 + *(int *)(param_3 + 1)));\n      if (plVar7 != (long *)0x0) {\n        lVar8 = ((long)local_50 + 4) * 0x10;\n        goto LAB_0014bd94;\n      }\n    }\n    else {\n      iVar6 = *param_4;\n      if (iVar6 == local_50) {\n        iVar15 = iVar6 * 0x10 + 0x41 + *(int *)(param_3 + 1);\n        if (0 < iVar6) goto LAB_0014bd06;\n        goto LAB_0014bd6e;\n      }\n      FUN_0014a9d0(param_1,\n                   "number of columns in foreign key does not match the number of columns in the referenced table"\n                  );\n    }\n    goto LAB_0014bec2;\n  }\n  iVar6 = *(short *)(lVar3 + 0x46) + -1;\n  if (-1 < iVar6) {\n    if (param_4 == (int *)0x0) {\n      plVar7 = (long *)FUN_0011b8f0(lVar2,(long)(*(int *)(param_3 + 1) + 0x51));\n      if (plVar7 == (long *)0x0) {\n        return;\n      }\n      lVar8 = 0x50;\n      local_50 = 1;\n    }\n    else {\n      if (*param_4 != 1) {\n        FUN_0014a9d0(param_1,"foreign key on %s should reference only one column of table %T",\n                     *(undefined8 *)((long)iVar6 * 0x20 + *(long *)(lVar3 + 8)),param_3);\n        goto LAB_0014bed9;\n      }\n      local_50 = 1;\n      iVar15 = *(int *)(param_3 + 1) + 0x51;\n      iVar6 = 1;\nLAB_0014bd06:\n      iVar18 = 0;\n      piVar19 = param_4 + 4;\n      do {\n        while (*(char **)piVar19 != (char *)0x0) {\n          sVar10 = strlen(*(char **)piVar19);\n          iVar18 = iVar18 + 1;\n          piVar19 = piVar19 + 8;\n          iVar15 = iVar15 + ((uint)sVar10 & 0x3fffffff) + 1;\n          if (iVar6 <= iVar18) goto LAB_0014bd6e;\n        }\n        iVar18 = iVar18 + 1;\n        piVar19 = piVar19 + 8;\n        iVar15 = iVar15 + 1;\n      } while (iVar18 < iVar6);\nLAB_0014bd6e:\n      plVar7 = (long *)FUN_0011b8f0(lVar2,(long)iVar15);\n      if (plVar7 == (long *)0x0) goto joined_r0x0014bec0;\n      lVar8 = ((long)local_50 + 4) * 0x10;\n    }\nLAB_0014bd94:\n    *plVar7 = lVar3;\n    lVar9 = *(long *)(lVar3 + 0x20);\n    pvVar14 = (void *)((long)plVar7 + lVar8);\n    plVar7[2] = (long)pvVar14;\n    plVar7[1] = lVar9;\n    if ((1 < *(byte *)((long)param_1 + 0x10e)) &&\n       (puVar12 = (undefined8 *)FUN_0011b8f0(*param_1,0x20), puVar12 != (undefined8 *)0x0)) {\n      *puVar12 = pvVar14;\n      uVar5 = param_3[1];\n      puVar12[1] = *param_3;\n      puVar12[2] = uVar5;\n      puVar12[3] = param_1[0x32];\n      param_1[0x32] = (long)puVar12;\n    }\n    memcpy(pvVar14,(void *)*param_3,(ulong)*(uint *)(param_3 + 1));\n    *(undefined1 *)((long)pvVar14 + (ulong)*(uint *)(param_3 + 1)) = 0;\n    FUN_0010f690(pvVar14);\n    iVar6 = *(int *)(param_3 + 1);\n    *(int *)(plVar7 + 5) = local_50;\n    if (param_2 == (int *)0x0) {\n      *(int *)(plVar7 + 8) = *(short *)(lVar3 + 0x46) + -1;\n      if ((param_4 != (int *)0x0) && (0 < local_50)) goto LAB_0014bf4f;\n    }\n    else {\n      lVar8 = 0x40;\n      if (0 < local_50) {\n        iVar15 = 0;\nLAB_0014be20:\n        pbVar13 = *(byte **)((long)param_2 + lVar8 * 2 + -0x70);\n        if (0 < *(short *)(lVar3 + 0x46)) {\n          puVar12 = *(undefined8 **)(lVar3 + 8);\n          iVar18 = 0;\n          do {\n            bVar1 = *(byte *)*puVar12;\n            if ((&DAT_001f5800)[bVar1] == (&DAT_001f5800)[*pbVar13]) {\n              if (bVar1 == 0) goto LAB_0014bf08;\n              lVar9 = 1;\n              while (bVar1 = ((byte *)*puVar12)[lVar9],\n                    (&DAT_001f5800)[bVar1] == (&DAT_001f5800)[pbVar13[lVar9]]) {\n                lVar9 = lVar9 + 1;\n                if (bVar1 == 0) goto LAB_0014bf08;\n              }\n            }\n            iVar18 = iVar18 + 1;\n            puVar12 = puVar12 + 4;\n            if (iVar18 == *(short *)(lVar3 + 0x46)) break;\n          } while( true );\n        }\n        goto LAB_0014be9c;\n      }\n    }\n    goto LAB_0014c064;\n  }\nLAB_0014bed1:\n  if (param_4 == (int *)0x0) {\n    return;\n  }\nLAB_0014bed9:\n  FUN_0012cc80(lVar2,param_4);\n  return;\nLAB_0014bf08:\n  *(int *)((long)plVar7 + lVar8) = iVar18;\n  if (*(short *)(lVar3 + 0x46) <= iVar18) {\n    pbVar13 = *(byte **)(param_2 + (long)iVar15 * 8 + 4);\nLAB_0014be9c:\n    FUN_0014a9d0(param_1,"unknown column \"%s\" in foreign key definition",pbVar13);\n    goto LAB_0014bead;\n  }\n  if (1 < *(byte *)((long)param_1 + 0x10e)) {\n    for (plVar11 = (long *)param_1[0x32]; plVar11 != (long *)0x0; plVar11 = (long *)plVar11[3]) {\n      if (*(long *)((long)param_2 + lVar8 * 2 + -0x70) == *plVar11) {\n        *plVar11 = (long)plVar7 + lVar8;\n        break;\n      }\n    }\n  }\n  iVar15 = iVar15 + 1;\n  lVar8 = lVar8 + 0x10;\n  if (iVar15 == local_50) goto code_r0x0014bf3e;\n  goto LAB_0014be20;\ncode_r0x0014bf3e:\n  if (param_4 != (int *)0x0) {\nLAB_0014bf4f:\n    plVar17 = plVar7 + 9;\n    plVar11 = (long *)(param_4 + 4);\n    iVar15 = 0;\n    __dest = (undefined1 *)((long)pvVar14 + (ulong)(iVar6 + 1));\n    do {\n      if ((char *)*plVar11 == (char *)0x0) {\n        lVar8 = 1;\n        __n = 0;\n        puVar16 = __dest;\n      }\n      else {\n        sVar10 = strlen((char *)*plVar11);\n        __n = (ulong)((uint)sVar10 & 0x3fffffff);\n        lVar8 = __n + 1;\n        puVar16 = __dest + __n;\n      }\n      *plVar17 = (long)__dest;\n      pvVar14 = (void *)*plVar11;\n      if (1 < *(byte *)((long)param_1 + 0x10e)) {\n        for (plVar4 = (long *)param_1[0x32]; plVar4 != (long *)0x0; plVar4 = (long *)plVar4[3]) {\n          if (pvVar14 == (void *)*plVar4) {\n            *plVar4 = (long)__dest;\n            pvVar14 = (void *)*plVar11;\n            break;\n          }\n        }\n      }\n      iVar15 = iVar15 + 1;\n      plVar11 = plVar11 + 4;\n      memcpy(__dest,pvVar14,__n);\n      plVar17 = plVar17 + 2;\n      *puVar16 = 0;\n      __dest = __dest + lVar8;\n    } while (iVar15 < local_50);\n  }\nLAB_0014c064:\n  *(undefined1 *)((long)plVar7 + 0x2c) = 0;\n  *(undefined2 *)((long)plVar7 + 0x2d) = param_5;\n  plVar11 = (long *)FUN_0011da30(*(long *)(lVar3 + 0x70) + 0x50,plVar7[2],plVar7);\n  if (plVar11 == plVar7) {\n    if ((*(uint *)(lVar2 + 0x60) & 0xffff00) == 0) {\n      FUN_0011b860(lVar2);\n    }\nLAB_0014bead:\n    FUN_00119e90(lVar2,plVar7);\n  }\n  else {\n    if (plVar11 != (long *)0x0) {\n      plVar7[3] = (long)plVar11;\n      plVar11[4] = (long)plVar7;\n    }\n    *(long **)(lVar3 + 0x20) = plVar7;\n  }\njoined_r0x0014bec0:\n  if (param_2 != (int *)0x0) {\nLAB_0014bec2:\n    FUN_0012cc80(lVar2,param_2);\n  }\n  goto LAB_0014bed1;\n}" { (declaration "byte bVar1;" type_identifier identifier ;) (declaration "long lVar2;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar3;" (sized_type_specifier "long" long) identifier ;) (declaration "long *plVar4;" (sized_type_specifier "long" long) (pointer_declarator "*plVar4" * identifier) ;) (declaration "undefined8 uVar5;" type_identifier identifier ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "long *plVar7;" (sized_type_specifier "long" long) (pointer_declarator "*plVar7" * identifier) ;) (declaration "long lVar8;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar9;" (sized_type_specifier "long" long) identifier ;) (declaration "size_t sVar10;" primitive_type identifier ;) (declaration "ulong __n;" type_identifier identifier ;) (declaration "long *plVar11;" (sized_type_specifier "long" long) (pointer_declarator "*plVar11" * identifier) ;) (declaration "undefined8 *puVar12;" type_identifier (pointer_declarator "*puVar12" * identifier) ;) (declaration "byte *pbVar13;" type_identifier (pointer_declarator "*pbVar13" * identifier) ;) (declaration "void *pvVar14;" primitive_type (pointer_declarator "*pvVar14" * identifier) ;) (declaration "int iVar15;" primitive_type identifier ;) (declaration "undefined1 *puVar16;" type_identifier (pointer_declarator "*puVar16" * identifier) ;) (declaration "long *plVar17;" (sized_type_specifier "long" long) (pointer_declarator "*plVar17" * identifier) ;) (declaration "int iVar18;" primitive_type identifier ;) (declaration "undefined1 *__dest;" type_identifier (pointer_declarator "*__dest" * identifier) ;) (declaration "int *piVar19;" primitive_type (pointer_declarator "*piVar19" * identifier) ;) (declaration "int local_50;" primitive_type identifier ;) (expression_statement "lVar2 = *param_1;" (assignment_expression "lVar2 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (expression_statement "lVar3 = param_1[0x27];" (assignment_expression "lVar3 = param_1[0x27]" identifier = (subscript_expression "param_1[0x27]" identifier [ number_literal ])) ;) (if_statement "if ((lVar3 == 0) || (*(char *)((long)param_1 + 0x10e) == '\x01')) goto joined_r0x0014bec0;" if (parenthesized_expression "((lVar3 == 0) || (*(char *)((long)param_1 + 0x10e) == '\x01'))" ( (binary_expression "(lVar3 == 0) || (*(char *)((long)param_1 + 0x10e) == '\x01')" (parenthesized_expression "(lVar3 == 0)" ( (binary_expression "lVar3 == 0" identifier == number_literal) )) || (parenthesized_expression "(*(char *)((long)param_1 + 0x10e) == '\x01')" ( (binary_expression "*(char *)((long)param_1 + 0x10e) == '\x01'" (pointer_expression "*(char *)((long)param_1 + 0x10e)" * (cast_expression "(char *)((long)param_1 + 0x10e)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_1 + 0x10e)" ( (binary_expression "(long)param_1 + 0x10e" (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) == (char_literal "'\x01'" ' escape_sequence ')) ))) )) (goto_statement "goto joined_r0x0014bec0;" goto statement_identifier ;)) (if_statement "if (param_2 != (int *)0x0) {\n    local_50 = *param_2;\n    if (param_4 == (int *)0x0) {\n      plVar7 = (long *)FUN_0011b8f0(lVar2,(long)(local_50 * 0x10 + 0x41 + *(int *)(param_3 + 1)));\n      if (plVar7 != (long *)0x0) {\n        lVar8 = ((long)local_50 + 4) * 0x10;\n        goto LAB_0014bd94;\n      }\n    }\n    else {\n      iVar6 = *param_4;\n      if (iVar6 == local_50) {\n        iVar15 = iVar6 * 0x10 + 0x41 + *(int *)(param_3 + 1);\n        if (0 < iVar6) goto LAB_0014bd06;\n        goto LAB_0014bd6e;\n      }\n      FUN_0014a9d0(param_1,\n                   "number of columns in foreign key does not match the number of columns in the referenced table"\n                  );\n    }\n    goto LAB_0014bec2;\n  }" if (parenthesized_expression "(param_2 != (int *)0x0)" ( (binary_expression "param_2 != (int *)0x0" identifier != (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    local_50 = *param_2;\n    if (param_4 == (int *)0x0) {\n      plVar7 = (long *)FUN_0011b8f0(lVar2,(long)(local_50 * 0x10 + 0x41 + *(int *)(param_3 + 1)));\n      if (plVar7 != (long *)0x0) {\n        lVar8 = ((long)local_50 + 4) * 0x10;\n        goto LAB_0014bd94;\n      }\n    }\n    else {\n      iVar6 = *param_4;\n      if (iVar6 == local_50) {\n        iVar15 = iVar6 * 0x10 + 0x41 + *(int *)(param_3 + 1);\n        if (0 < iVar6) goto LAB_0014bd06;\n        goto LAB_0014bd6e;\n      }\n      FUN_0014a9d0(param_1,\n                   "number of columns in foreign key does not match the number of columns in the referenced table"\n                  );\n    }\n    goto LAB_0014bec2;\n  }" { (expression_statement "local_50 = *param_2;" (assignment_expression "local_50 = *param_2" identifier = (pointer_expression "*param_2" * identifier)) ;) (if_statement "if (param_4 == (int *)0x0) {\n      plVar7 = (long *)FUN_0011b8f0(lVar2,(long)(local_50 * 0x10 + 0x41 + *(int *)(param_3 + 1)));\n      if (plVar7 != (long *)0x0) {\n        lVar8 = ((long)local_50 + 4) * 0x10;\n        goto LAB_0014bd94;\n      }\n    }\n    else {\n      iVar6 = *param_4;\n      if (iVar6 == local_50) {\n        iVar15 = iVar6 * 0x10 + 0x41 + *(int *)(param_3 + 1);\n        if (0 < iVar6) goto LAB_0014bd06;\n        goto LAB_0014bd6e;\n      }\n      FUN_0014a9d0(param_1,\n                   "number of columns in foreign key does not match the number of columns in the referenced table"\n                  );\n    }" if (parenthesized_expression "(param_4 == (int *)0x0)" ( (binary_expression "param_4 == (int *)0x0" identifier == (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      plVar7 = (long *)FUN_0011b8f0(lVar2,(long)(local_50 * 0x10 + 0x41 + *(int *)(param_3 + 1)));\n      if (plVar7 != (long *)0x0) {\n        lVar8 = ((long)local_50 + 4) * 0x10;\n        goto LAB_0014bd94;\n      }\n    }" { (expression_statement "plVar7 = (long *)FUN_0011b8f0(lVar2,(long)(local_50 * 0x10 + 0x41 + *(int *)(param_3 + 1)));" (assignment_expression "plVar7 = (long *)FUN_0011b8f0(lVar2,(long)(local_50 * 0x10 + 0x41 + *(int *)(param_3 + 1)))" identifier = (cast_expression "(long *)FUN_0011b8f0(lVar2,(long)(local_50 * 0x10 + 0x41 + *(int *)(param_3 + 1)))" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_0011b8f0(lVar2,(long)(local_50 * 0x10 + 0x41 + *(int *)(param_3 + 1)))" identifier (argument_list "(lVar2,(long)(local_50 * 0x10 + 0x41 + *(int *)(param_3 + 1)))" ( identifier , (cast_expression "(long)(local_50 * 0x10 + 0x41 + *(int *)(param_3 + 1))" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (parenthesized_expression "(local_50 * 0x10 + 0x41 + *(int *)(param_3 + 1))" ( (binary_expression "local_50 * 0x10 + 0x41 + *(int *)(param_3 + 1)" (binary_expression "local_50 * 0x10 + 0x41" (binary_expression "local_50 * 0x10" identifier * number_literal) + number_literal) + (pointer_expression "*(int *)(param_3 + 1)" * (cast_expression "(int *)(param_3 + 1)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 1)" ( (binary_expression "param_3 + 1" identifier + number_literal) ))))) ))) ))))) ;) (if_statement "if (plVar7 != (long *)0x0) {\n        lVar8 = ((long)local_50 + 4) * 0x10;\n        goto LAB_0014bd94;\n      }" if (parenthesized_expression "(plVar7 != (long *)0x0)" ( (binary_expression "plVar7 != (long *)0x0" identifier != (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        lVar8 = ((long)local_50 + 4) * 0x10;\n        goto LAB_0014bd94;\n      }" { (expression_statement "lVar8 = ((long)local_50 + 4) * 0x10;" (assignment_expression "lVar8 = ((long)local_50 + 4) * 0x10" identifier = (binary_expression "((long)local_50 + 4) * 0x10" (parenthesized_expression "((long)local_50 + 4)" ( (binary_expression "(long)local_50 + 4" (cast_expression "(long)local_50" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )) * number_literal)) ;) (goto_statement "goto LAB_0014bd94;" goto statement_identifier ;) })) }) (else_clause "else {\n      iVar6 = *param_4;\n      if (iVar6 == local_50) {\n        iVar15 = iVar6 * 0x10 + 0x41 + *(int *)(param_3 + 1);\n        if (0 < iVar6) goto LAB_0014bd06;\n        goto LAB_0014bd6e;\n      }\n      FUN_0014a9d0(param_1,\n                   "number of columns in foreign key does not match the number of columns in the referenced table"\n                  );\n    }" else (compound_statement "{\n      iVar6 = *param_4;\n      if (iVar6 == local_50) {\n        iVar15 = iVar6 * 0x10 + 0x41 + *(int *)(param_3 + 1);\n        if (0 < iVar6) goto LAB_0014bd06;\n        goto LAB_0014bd6e;\n      }\n      FUN_0014a9d0(param_1,\n                   "number of columns in foreign key does not match the number of columns in the referenced table"\n                  );\n    }" { (expression_statement "iVar6 = *param_4;" (assignment_expression "iVar6 = *param_4" identifier = (pointer_expression "*param_4" * identifier)) ;) (if_statement "if (iVar6 == local_50) {\n        iVar15 = iVar6 * 0x10 + 0x41 + *(int *)(param_3 + 1);\n        if (0 < iVar6) goto LAB_0014bd06;\n        goto LAB_0014bd6e;\n      }" if (parenthesized_expression "(iVar6 == local_50)" ( (binary_expression "iVar6 == local_50" identifier == identifier) )) (compound_statement "{\n        iVar15 = iVar6 * 0x10 + 0x41 + *(int *)(param_3 + 1);\n        if (0 < iVar6) goto LAB_0014bd06;\n        goto LAB_0014bd6e;\n      }" { (expression_statement "iVar15 = iVar6 * 0x10 + 0x41 + *(int *)(param_3 + 1);" (assignment_expression "iVar15 = iVar6 * 0x10 + 0x41 + *(int *)(param_3 + 1)" identifier = (binary_expression "iVar6 * 0x10 + 0x41 + *(int *)(param_3 + 1)" (binary_expression "iVar6 * 0x10 + 0x41" (binary_expression "iVar6 * 0x10" identifier * number_literal) + number_literal) + (pointer_expression "*(int *)(param_3 + 1)" * (cast_expression "(int *)(param_3 + 1)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 1)" ( (binary_expression "param_3 + 1" identifier + number_literal) )))))) ;) (if_statement "if (0 < iVar6) goto LAB_0014bd06;" if (parenthesized_expression "(0 < iVar6)" ( (binary_expression "0 < iVar6" number_literal < identifier) )) (goto_statement "goto LAB_0014bd06;" goto statement_identifier ;)) (goto_statement "goto LAB_0014bd6e;" goto statement_identifier ;) })) (expression_statement "FUN_0014a9d0(param_1,\n                   "number of columns in foreign key does not match the number of columns in the referenced table"\n                  );" (call_expression "FUN_0014a9d0(param_1,\n                   "number of columns in foreign key does not match the number of columns in the referenced table"\n                  )" identifier (argument_list "(param_1,\n                   "number of columns in foreign key does not match the number of columns in the referenced table"\n                  )" ( identifier , (string_literal ""number of columns in foreign key does not match the number of columns in the referenced table"" " string_content ") ))) ;) }))) (goto_statement "goto LAB_0014bec2;" goto statement_identifier ;) })) (expression_statement "iVar6 = *(short *)(lVar3 + 0x46) + -1;" (assignment_expression "iVar6 = *(short *)(lVar3 + 0x46) + -1" identifier = (binary_expression "*(short *)(lVar3 + 0x46) + -1" (pointer_expression "*(short *)(lVar3 + 0x46)" * (cast_expression "(short *)(lVar3 + 0x46)" ( (type_descriptor "short *" (sized_type_specifier "short" short) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar3 + 0x46)" ( (binary_expression "lVar3 + 0x46" identifier + number_literal) )))) + number_literal)) ;) (if_statement "if (-1 < iVar6) {\n    if (param_4 == (int *)0x0) {\n      plVar7 = (long *)FUN_0011b8f0(lVar2,(long)(*(int *)(param_3 + 1) + 0x51));\n      if (plVar7 == (long *)0x0) {\n        return;\n      }\n      lVar8 = 0x50;\n      local_50 = 1;\n    }\n    else {\n      if (*param_4 != 1) {\n        FUN_0014a9d0(param_1,"foreign key on %s should reference only one column of table %T",\n                     *(undefined8 *)((long)iVar6 * 0x20 + *(long *)(lVar3 + 8)),param_3);\n        goto LAB_0014bed9;\n      }\n      local_50 = 1;\n      iVar15 = *(int *)(param_3 + 1) + 0x51;\n      iVar6 = 1;\nLAB_0014bd06:\n      iVar18 = 0;\n      piVar19 = param_4 + 4;\n      do {\n        while (*(char **)piVar19 != (char *)0x0) {\n          sVar10 = strlen(*(char **)piVar19);\n          iVar18 = iVar18 + 1;\n          piVar19 = piVar19 + 8;\n          iVar15 = iVar15 + ((uint)sVar10 & 0x3fffffff) + 1;\n          if (iVar6 <= iVar18) goto LAB_0014bd6e;\n        }\n        iVar18 = iVar18 + 1;\n        piVar19 = piVar19 + 8;\n        iVar15 = iVar15 + 1;\n      } while (iVar18 < iVar6);\nLAB_0014bd6e:\n      plVar7 = (long *)FUN_0011b8f0(lVar2,(long)iVar15);\n      if (plVar7 == (long *)0x0) goto joined_r0x0014bec0;\n      lVar8 = ((long)local_50 + 4) * 0x10;\n    }\nLAB_0014bd94:\n    *plVar7 = lVar3;\n    lVar9 = *(long *)(lVar3 + 0x20);\n    pvVar14 = (void *)((long)plVar7 + lVar8);\n    plVar7[2] = (long)pvVar14;\n    plVar7[1] = lVar9;\n    if ((1 < *(byte *)((long)param_1 + 0x10e)) &&\n       (puVar12 = (undefined8 *)FUN_0011b8f0(*param_1,0x20), puVar12 != (undefined8 *)0x0)) {\n      *puVar12 = pvVar14;\n      uVar5 = param_3[1];\n      puVar12[1] = *param_3;\n      puVar12[2] = uVar5;\n      puVar12[3] = param_1[0x32];\n      param_1[0x32] = (long)puVar12;\n    }\n    memcpy(pvVar14,(void *)*param_3,(ulong)*(uint *)(param_3 + 1));\n    *(undefined1 *)((long)pvVar14 + (ulong)*(uint *)(param_3 + 1)) = 0;\n    FUN_0010f690(pvVar14);\n    iVar6 = *(int *)(param_3 + 1);\n    *(int *)(plVar7 + 5) = local_50;\n    if (param_2 == (int *)0x0) {\n      *(int *)(plVar7 + 8) = *(short *)(lVar3 + 0x46) + -1;\n      if ((param_4 != (int *)0x0) && (0 < local_50)) goto LAB_0014bf4f;\n    }\n    else {\n      lVar8 = 0x40;\n      if (0 < local_50) {\n        iVar15 = 0;\nLAB_0014be20:\n        pbVar13 = *(byte **)((long)param_2 + lVar8 * 2 + -0x70);\n        if (0 < *(short *)(lVar3 + 0x46)) {\n          puVar12 = *(undefined8 **)(lVar3 + 8);\n          iVar18 = 0;\n          do {\n            bVar1 = *(byte *)*puVar12;\n            if ((&DAT_001f5800)[bVar1] == (&DAT_001f5800)[*pbVar13]) {\n              if (bVar1 == 0) goto LAB_0014bf08;\n              lVar9 = 1;\n              while (bVar1 = ((byte *)*puVar12)[lVar9],\n                    (&DAT_001f5800)[bVar1] == (&DAT_001f5800)[pbVar13[lVar9]]) {\n                lVar9 = lVar9 + 1;\n                if (bVar1 == 0) goto LAB_0014bf08;\n              }\n            }\n            iVar18 = iVar18 + 1;\n            puVar12 = puVar12 + 4;\n            if (iVar18 == *(short *)(lVar3 + 0x46)) break;\n          } while( true );\n        }\n        goto LAB_0014be9c;\n      }\n    }\n    goto LAB_0014c064;\n  }" if (parenthesized_expression "(-1 < iVar6)" ( (binary_expression "-1 < iVar6" number_literal < identifier) )) (compound_statement "{\n    if (param_4 == (int *)0x0) {\n      plVar7 = (long *)FUN_0011b8f0(lVar2,(long)(*(int *)(param_3 + 1) + 0x51));\n      if (plVar7 == (long *)0x0) {\n        return;\n      }\n      lVar8 = 0x50;\n      local_50 = 1;\n    }\n    else {\n      if (*param_4 != 1) {\n        FUN_0014a9d0(param_1,"foreign key on %s should reference only one column of table %T",\n                     *(undefined8 *)((long)iVar6 * 0x20 + *(long *)(lVar3 + 8)),param_3);\n        goto LAB_0014bed9;\n      }\n      local_50 = 1;\n      iVar15 = *(int *)(param_3 + 1) + 0x51;\n      iVar6 = 1;\nLAB_0014bd06:\n      iVar18 = 0;\n      piVar19 = param_4 + 4;\n      do {\n        while (*(char **)piVar19 != (char *)0x0) {\n          sVar10 = strlen(*(char **)piVar19);\n          iVar18 = iVar18 + 1;\n          piVar19 = piVar19 + 8;\n          iVar15 = iVar15 + ((uint)sVar10 & 0x3fffffff) + 1;\n          if (iVar6 <= iVar18) goto LAB_0014bd6e;\n        }\n        iVar18 = iVar18 + 1;\n        piVar19 = piVar19 + 8;\n        iVar15 = iVar15 + 1;\n      } while (iVar18 < iVar6);\nLAB_0014bd6e:\n      plVar7 = (long *)FUN_0011b8f0(lVar2,(long)iVar15);\n      if (plVar7 == (long *)0x0) goto joined_r0x0014bec0;\n      lVar8 = ((long)local_50 + 4) * 0x10;\n    }\nLAB_0014bd94:\n    *plVar7 = lVar3;\n    lVar9 = *(long *)(lVar3 + 0x20);\n    pvVar14 = (void *)((long)plVar7 + lVar8);\n    plVar7[2] = (long)pvVar14;\n    plVar7[1] = lVar9;\n    if ((1 < *(byte *)((long)param_1 + 0x10e)) &&\n       (puVar12 = (undefined8 *)FUN_0011b8f0(*param_1,0x20), puVar12 != (undefined8 *)0x0)) {\n      *puVar12 = pvVar14;\n      uVar5 = param_3[1];\n      puVar12[1] = *param_3;\n      puVar12[2] = uVar5;\n      puVar12[3] = param_1[0x32];\n      param_1[0x32] = (long)puVar12;\n    }\n    memcpy(pvVar14,(void *)*param_3,(ulong)*(uint *)(param_3 + 1));\n    *(undefined1 *)((long)pvVar14 + (ulong)*(uint *)(param_3 + 1)) = 0;\n    FUN_0010f690(pvVar14);\n    iVar6 = *(int *)(param_3 + 1);\n    *(int *)(plVar7 + 5) = local_50;\n    if (param_2 == (int *)0x0) {\n      *(int *)(plVar7 + 8) = *(short *)(lVar3 + 0x46) + -1;\n      if ((param_4 != (int *)0x0) && (0 < local_50)) goto LAB_0014bf4f;\n    }\n    else {\n      lVar8 = 0x40;\n      if (0 < local_50) {\n        iVar15 = 0;\nLAB_0014be20:\n        pbVar13 = *(byte **)((long)param_2 + lVar8 * 2 + -0x70);\n        if (0 < *(short *)(lVar3 + 0x46)) {\n          puVar12 = *(undefined8 **)(lVar3 + 8);\n          iVar18 = 0;\n          do {\n            bVar1 = *(byte *)*puVar12;\n            if ((&DAT_001f5800)[bVar1] == (&DAT_001f5800)[*pbVar13]) {\n              if (bVar1 == 0) goto LAB_0014bf08;\n              lVar9 = 1;\n              while (bVar1 = ((byte *)*puVar12)[lVar9],\n                    (&DAT_001f5800)[bVar1] == (&DAT_001f5800)[pbVar13[lVar9]]) {\n                lVar9 = lVar9 + 1;\n                if (bVar1 == 0) goto LAB_0014bf08;\n              }\n            }\n            iVar18 = iVar18 + 1;\n            puVar12 = puVar12 + 4;\n            if (iVar18 == *(short *)(lVar3 + 0x46)) break;\n          } while( true );\n        }\n        goto LAB_0014be9c;\n      }\n    }\n    goto LAB_0014c064;\n  }" { (if_statement "if (param_4 == (int *)0x0) {\n      plVar7 = (long *)FUN_0011b8f0(lVar2,(long)(*(int *)(param_3 + 1) + 0x51));\n      if (plVar7 == (long *)0x0) {\n        return;\n      }\n      lVar8 = 0x50;\n      local_50 = 1;\n    }\n    else {\n      if (*param_4 != 1) {\n        FUN_0014a9d0(param_1,"foreign key on %s should reference only one column of table %T",\n                     *(undefined8 *)((long)iVar6 * 0x20 + *(long *)(lVar3 + 8)),param_3);\n        goto LAB_0014bed9;\n      }\n      local_50 = 1;\n      iVar15 = *(int *)(param_3 + 1) + 0x51;\n      iVar6 = 1;\nLAB_0014bd06:\n      iVar18 = 0;\n      piVar19 = param_4 + 4;\n      do {\n        while (*(char **)piVar19 != (char *)0x0) {\n          sVar10 = strlen(*(char **)piVar19);\n          iVar18 = iVar18 + 1;\n          piVar19 = piVar19 + 8;\n          iVar15 = iVar15 + ((uint)sVar10 & 0x3fffffff) + 1;\n          if (iVar6 <= iVar18) goto LAB_0014bd6e;\n        }\n        iVar18 = iVar18 + 1;\n        piVar19 = piVar19 + 8;\n        iVar15 = iVar15 + 1;\n      } while (iVar18 < iVar6);\nLAB_0014bd6e:\n      plVar7 = (long *)FUN_0011b8f0(lVar2,(long)iVar15);\n      if (plVar7 == (long *)0x0) goto joined_r0x0014bec0;\n      lVar8 = ((long)local_50 + 4) * 0x10;\n    }" if (parenthesized_expression "(param_4 == (int *)0x0)" ( (binary_expression "param_4 == (int *)0x0" identifier == (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      plVar7 = (long *)FUN_0011b8f0(lVar2,(long)(*(int *)(param_3 + 1) + 0x51));\n      if (plVar7 == (long *)0x0) {\n        return;\n      }\n      lVar8 = 0x50;\n      local_50 = 1;\n    }" { (expression_statement "plVar7 = (long *)FUN_0011b8f0(lVar2,(long)(*(int *)(param_3 + 1) + 0x51));" (assignment_expression "plVar7 = (long *)FUN_0011b8f0(lVar2,(long)(*(int *)(param_3 + 1) + 0x51))" identifier = (cast_expression "(long *)FUN_0011b8f0(lVar2,(long)(*(int *)(param_3 + 1) + 0x51))" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_0011b8f0(lVar2,(long)(*(int *)(param_3 + 1) + 0x51))" identifier (argument_list "(lVar2,(long)(*(int *)(param_3 + 1) + 0x51))" ( identifier , (cast_expression "(long)(*(int *)(param_3 + 1) + 0x51)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (parenthesized_expression "(*(int *)(param_3 + 1) + 0x51)" ( (binary_expression "*(int *)(param_3 + 1) + 0x51" (pointer_expression "*(int *)(param_3 + 1)" * (cast_expression "(int *)(param_3 + 1)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 1)" ( (binary_expression "param_3 + 1" identifier + number_literal) )))) + number_literal) ))) ))))) ;) (if_statement "if (plVar7 == (long *)0x0) {\n        return;\n      }" if (parenthesized_expression "(plVar7 == (long *)0x0)" ( (binary_expression "plVar7 == (long *)0x0" identifier == (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        return;\n      }" { (return_statement "return;" return ;) })) (expression_statement "lVar8 = 0x50;" (assignment_expression "lVar8 = 0x50" identifier = number_literal) ;) (expression_statement "local_50 = 1;" (assignment_expression "local_50 = 1" identifier = number_literal) ;) }) (else_clause "else {\n      if (*param_4 != 1) {\n        FUN_0014a9d0(param_1,"foreign key on %s should reference only one column of table %T",\n                     *(undefined8 *)((long)iVar6 * 0x20 + *(long *)(lVar3 + 8)),param_3);\n        goto LAB_0014bed9;\n      }\n      local_50 = 1;\n      iVar15 = *(int *)(param_3 + 1) + 0x51;\n      iVar6 = 1;\nLAB_0014bd06:\n      iVar18 = 0;\n      piVar19 = param_4 + 4;\n      do {\n        while (*(char **)piVar19 != (char *)0x0) {\n          sVar10 = strlen(*(char **)piVar19);\n          iVar18 = iVar18 + 1;\n          piVar19 = piVar19 + 8;\n          iVar15 = iVar15 + ((uint)sVar10 & 0x3fffffff) + 1;\n          if (iVar6 <= iVar18) goto LAB_0014bd6e;\n        }\n        iVar18 = iVar18 + 1;\n        piVar19 = piVar19 + 8;\n        iVar15 = iVar15 + 1;\n      } while (iVar18 < iVar6);\nLAB_0014bd6e:\n      plVar7 = (long *)FUN_0011b8f0(lVar2,(long)iVar15);\n      if (plVar7 == (long *)0x0) goto joined_r0x0014bec0;\n      lVar8 = ((long)local_50 + 4) * 0x10;\n    }" else (compound_statement "{\n      if (*param_4 != 1) {\n        FUN_0014a9d0(param_1,"foreign key on %s should reference only one column of table %T",\n                     *(undefined8 *)((long)iVar6 * 0x20 + *(long *)(lVar3 + 8)),param_3);\n        goto LAB_0014bed9;\n      }\n      local_50 = 1;\n      iVar15 = *(int *)(param_3 + 1) + 0x51;\n      iVar6 = 1;\nLAB_0014bd06:\n      iVar18 = 0;\n      piVar19 = param_4 + 4;\n      do {\n        while (*(char **)piVar19 != (char *)0x0) {\n          sVar10 = strlen(*(char **)piVar19);\n          iVar18 = iVar18 + 1;\n          piVar19 = piVar19 + 8;\n          iVar15 = iVar15 + ((uint)sVar10 & 0x3fffffff) + 1;\n          if (iVar6 <= iVar18) goto LAB_0014bd6e;\n        }\n        iVar18 = iVar18 + 1;\n        piVar19 = piVar19 + 8;\n        iVar15 = iVar15 + 1;\n      } while (iVar18 < iVar6);\nLAB_0014bd6e:\n      plVar7 = (long *)FUN_0011b8f0(lVar2,(long)iVar15);\n      if (plVar7 == (long *)0x0) goto joined_r0x0014bec0;\n      lVar8 = ((long)local_50 + 4) * 0x10;\n    }" { (if_statement "if (*param_4 != 1) {\n        FUN_0014a9d0(param_1,"foreign key on %s should reference only one column of table %T",\n                     *(undefined8 *)((long)iVar6 * 0x20 + *(long *)(lVar3 + 8)),param_3);\n        goto LAB_0014bed9;\n      }" if (parenthesized_expression "(*param_4 != 1)" ( (binary_expression "*param_4 != 1" (pointer_expression "*param_4" * identifier) != number_literal) )) (compound_statement "{\n        FUN_0014a9d0(param_1,"foreign key on %s should reference only one column of table %T",\n                     *(undefined8 *)((long)iVar6 * 0x20 + *(long *)(lVar3 + 8)),param_3);\n        goto LAB_0014bed9;\n      }" { (expression_statement "FUN_0014a9d0(param_1,"foreign key on %s should reference only one column of table %T",\n                     *(undefined8 *)((long)iVar6 * 0x20 + *(long *)(lVar3 + 8)),param_3);" (call_expression "FUN_0014a9d0(param_1,"foreign key on %s should reference only one column of table %T",\n                     *(undefined8 *)((long)iVar6 * 0x20 + *(long *)(lVar3 + 8)),param_3)" identifier (argument_list "(param_1,"foreign key on %s should reference only one column of table %T",\n                     *(undefined8 *)((long)iVar6 * 0x20 + *(long *)(lVar3 + 8)),param_3)" ( identifier , (string_literal ""foreign key on %s should reference only one column of table %T"" " string_content ") , (pointer_expression "*(undefined8 *)((long)iVar6 * 0x20 + *(long *)(lVar3 + 8))" * (cast_expression "(undefined8 *)((long)iVar6 * 0x20 + *(long *)(lVar3 + 8))" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)iVar6 * 0x20 + *(long *)(lVar3 + 8))" ( (binary_expression "(long)iVar6 * 0x20 + *(long *)(lVar3 + 8)" (binary_expression "(long)iVar6 * 0x20" (cast_expression "(long)iVar6" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) * number_literal) + (pointer_expression "*(long *)(lVar3 + 8)" * (cast_expression "(long *)(lVar3 + 8)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar3 + 8)" ( (binary_expression "lVar3 + 8" identifier + number_literal) ))))) )))) , identifier ))) ;) (goto_statement "goto LAB_0014bed9;" goto statement_identifier ;) })) (expression_statement "local_50 = 1;" (assignment_expression "local_50 = 1" identifier = number_literal) ;) (expression_statement "iVar15 = *(int *)(param_3 + 1) + 0x51;" (assignment_expression "iVar15 = *(int *)(param_3 + 1) + 0x51" identifier = (binary_expression "*(int *)(param_3 + 1) + 0x51" (pointer_expression "*(int *)(param_3 + 1)" * (cast_expression "(int *)(param_3 + 1)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 1)" ( (binary_expression "param_3 + 1" identifier + number_literal) )))) + number_literal)) ;) (expression_statement "iVar6 = 1;" (assignment_expression "iVar6 = 1" identifier = number_literal) ;) (labeled_statement "LAB_0014bd06:\n      iVar18 = 0;" statement_identifier : (expression_statement "iVar18 = 0;" (assignment_expression "iVar18 = 0" identifier = number_literal) ;)) (expression_statement "piVar19 = param_4 + 4;" (assignment_expression "piVar19 = param_4 + 4" identifier = (binary_expression "param_4 + 4" identifier + number_literal)) ;) (do_statement "do {\n        while (*(char **)piVar19 != (char *)0x0) {\n          sVar10 = strlen(*(char **)piVar19);\n          iVar18 = iVar18 + 1;\n          piVar19 = piVar19 + 8;\n          iVar15 = iVar15 + ((uint)sVar10 & 0x3fffffff) + 1;\n          if (iVar6 <= iVar18) goto LAB_0014bd6e;\n        }\n        iVar18 = iVar18 + 1;\n        piVar19 = piVar19 + 8;\n        iVar15 = iVar15 + 1;\n      } while (iVar18 < iVar6);" do (compound_statement "{\n        while (*(char **)piVar19 != (char *)0x0) {\n          sVar10 = strlen(*(char **)piVar19);\n          iVar18 = iVar18 + 1;\n          piVar19 = piVar19 + 8;\n          iVar15 = iVar15 + ((uint)sVar10 & 0x3fffffff) + 1;\n          if (iVar6 <= iVar18) goto LAB_0014bd6e;\n        }\n        iVar18 = iVar18 + 1;\n        piVar19 = piVar19 + 8;\n        iVar15 = iVar15 + 1;\n      }" { (while_statement "while (*(char **)piVar19 != (char *)0x0) {\n          sVar10 = strlen(*(char **)piVar19);\n          iVar18 = iVar18 + 1;\n          piVar19 = piVar19 + 8;\n          iVar15 = iVar15 + ((uint)sVar10 & 0x3fffffff) + 1;\n          if (iVar6 <= iVar18) goto LAB_0014bd6e;\n        }" while (parenthesized_expression "(*(char **)piVar19 != (char *)0x0)" ( (binary_expression "*(char **)piVar19 != (char *)0x0" (pointer_expression "*(char **)piVar19" * (cast_expression "(char **)piVar19" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) identifier)) != (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n          sVar10 = strlen(*(char **)piVar19);\n          iVar18 = iVar18 + 1;\n          piVar19 = piVar19 + 8;\n          iVar15 = iVar15 + ((uint)sVar10 & 0x3fffffff) + 1;\n          if (iVar6 <= iVar18) goto LAB_0014bd6e;\n        }" { (expression_statement "sVar10 = strlen(*(char **)piVar19);" (assignment_expression "sVar10 = strlen(*(char **)piVar19)" identifier = (call_expression "strlen(*(char **)piVar19)" identifier (argument_list "(*(char **)piVar19)" ( (pointer_expression "*(char **)piVar19" * (cast_expression "(char **)piVar19" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) identifier)) )))) ;) (expression_statement "iVar18 = iVar18 + 1;" (assignment_expression "iVar18 = iVar18 + 1" identifier = (binary_expression "iVar18 + 1" identifier + number_literal)) ;) (expression_statement "piVar19 = piVar19 + 8;" (assignment_expression "piVar19 = piVar19 + 8" identifier = (binary_expression "piVar19 + 8" identifier + number_literal)) ;) (expression_statement "iVar15 = iVar15 + ((uint)sVar10 & 0x3fffffff) + 1;" (assignment_expression "iVar15 = iVar15 + ((uint)sVar10 & 0x3fffffff) + 1" identifier = (binary_expression "iVar15 + ((uint)sVar10 & 0x3fffffff) + 1" (binary_expression "iVar15 + ((uint)sVar10 & 0x3fffffff)" identifier + (parenthesized_expression "((uint)sVar10 & 0x3fffffff)" ( (binary_expression "(uint)sVar10 & 0x3fffffff" (cast_expression "(uint)sVar10" ( (type_descriptor "uint" type_identifier) ) identifier) & number_literal) ))) + number_literal)) ;) (if_statement "if (iVar6 <= iVar18) goto LAB_0014bd6e;" if (parenthesized_expression "(iVar6 <= iVar18)" ( (binary_expression "iVar6 <= iVar18" identifier <= identifier) )) (goto_statement "goto LAB_0014bd6e;" goto statement_identifier ;)) })) (expression_statement "iVar18 = iVar18 + 1;" (assignment_expression "iVar18 = iVar18 + 1" identifier = (binary_expression "iVar18 + 1" identifier + number_literal)) ;) (expression_statement "piVar19 = piVar19 + 8;" (assignment_expression "piVar19 = piVar19 + 8" identifier = (binary_expression "piVar19 + 8" identifier + number_literal)) ;) (expression_statement "iVar15 = iVar15 + 1;" (assignment_expression "iVar15 = iVar15 + 1" identifier = (binary_expression "iVar15 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar18 < iVar6)" ( (binary_expression "iVar18 < iVar6" identifier < identifier) )) ;) (labeled_statement "LAB_0014bd6e:\n      plVar7 = (long *)FUN_0011b8f0(lVar2,(long)iVar15);" statement_identifier : (expression_statement "plVar7 = (long *)FUN_0011b8f0(lVar2,(long)iVar15);" (assignment_expression "plVar7 = (long *)FUN_0011b8f0(lVar2,(long)iVar15)" identifier = (cast_expression "(long *)FUN_0011b8f0(lVar2,(long)iVar15)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_0011b8f0(lVar2,(long)iVar15)" identifier (argument_list "(lVar2,(long)iVar15)" ( identifier , (cast_expression "(long)iVar15" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) ))))) ;)) (if_statement "if (plVar7 == (long *)0x0) goto joined_r0x0014bec0;" if (parenthesized_expression "(plVar7 == (long *)0x0)" ( (binary_expression "plVar7 == (long *)0x0" identifier == (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) )) (goto_statement "goto joined_r0x0014bec0;" goto statement_identifier ;)) (expression_statement "lVar8 = ((long)local_50 + 4) * 0x10;" (assignment_expression "lVar8 = ((long)local_50 + 4) * 0x10" identifier = (binary_expression "((long)local_50 + 4) * 0x10" (parenthesized_expression "((long)local_50 + 4)" ( (binary_expression "(long)local_50 + 4" (cast_expression "(long)local_50" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )) * number_literal)) ;) }))) (labeled_statement "LAB_0014bd94:\n    *plVar7 = lVar3;" statement_identifier : (expression_statement "*plVar7 = lVar3;" (assignment_expression "*plVar7 = lVar3" (pointer_expression "*plVar7" * identifier) = identifier) ;)) (expression_statement "lVar9 = *(long *)(lVar3 + 0x20);" (assignment_expression "lVar9 = *(long *)(lVar3 + 0x20)" identifier = (pointer_expression "*(long *)(lVar3 + 0x20)" * (cast_expression "(long *)(lVar3 + 0x20)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar3 + 0x20)" ( (binary_expression "lVar3 + 0x20" identifier + number_literal) ))))) ;) (expression_statement "pvVar14 = (void *)((long)plVar7 + lVar8);" (assignment_expression "pvVar14 = (void *)((long)plVar7 + lVar8)" identifier = (cast_expression "(void *)((long)plVar7 + lVar8)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)plVar7 + lVar8)" ( (binary_expression "(long)plVar7 + lVar8" (cast_expression "(long)plVar7" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + identifier) )))) ;) (expression_statement "plVar7[2] = (long)pvVar14;" (assignment_expression "plVar7[2] = (long)pvVar14" (subscript_expression "plVar7[2]" identifier [ number_literal ]) = (cast_expression "(long)pvVar14" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) ;) (expression_statement "plVar7[1] = lVar9;" (assignment_expression "plVar7[1] = lVar9" (subscript_expression "plVar7[1]" identifier [ number_literal ]) = identifier) ;) (if_statement "if ((1 < *(byte *)((long)param_1 + 0x10e)) &&\n       (puVar12 = (undefined8 *)FUN_0011b8f0(*param_1,0x20), puVar12 != (undefined8 *)0x0)) {\n      *puVar12 = pvVar14;\n      uVar5 = param_3[1];\n      puVar12[1] = *param_3;\n      puVar12[2] = uVar5;\n      puVar12[3] = param_1[0x32];\n      param_1[0x32] = (long)puVar12;\n    }" if (parenthesized_expression "((1 < *(byte *)((long)param_1 + 0x10e)) &&\n       (puVar12 = (undefined8 *)FUN_0011b8f0(*param_1,0x20), puVar12 != (undefined8 *)0x0))" ( (binary_expression "(1 < *(byte *)((long)param_1 + 0x10e)) &&\n       (puVar12 = (undefined8 *)FUN_0011b8f0(*param_1,0x20), puVar12 != (undefined8 *)0x0)" (parenthesized_expression "(1 < *(byte *)((long)param_1 + 0x10e))" ( (binary_expression "1 < *(byte *)((long)param_1 + 0x10e)" number_literal < (pointer_expression "*(byte *)((long)param_1 + 0x10e)" * (cast_expression "(byte *)((long)param_1 + 0x10e)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_1 + 0x10e)" ( (binary_expression "(long)param_1 + 0x10e" (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) ))))) )) && (parenthesized_expression "(puVar12 = (undefined8 *)FUN_0011b8f0(*param_1,0x20), puVar12 != (undefined8 *)0x0)" ( (comma_expression "puVar12 = (undefined8 *)FUN_0011b8f0(*param_1,0x20), puVar12 != (undefined8 *)0x0" (assignment_expression "puVar12 = (undefined8 *)FUN_0011b8f0(*param_1,0x20)" identifier = (cast_expression "(undefined8 *)FUN_0011b8f0(*param_1,0x20)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_0011b8f0(*param_1,0x20)" identifier (argument_list "(*param_1,0x20)" ( (pointer_expression "*param_1" * identifier) , number_literal ))))) , (binary_expression "puVar12 != (undefined8 *)0x0" identifier != (cast_expression "(undefined8 *)0x0" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal))) ))) )) (compound_statement "{\n      *puVar12 = pvVar14;\n      uVar5 = param_3[1];\n      puVar12[1] = *param_3;\n      puVar12[2] = uVar5;\n      puVar12[3] = param_1[0x32];\n      param_1[0x32] = (long)puVar12;\n    }" { (expression_statement "*puVar12 = pvVar14;" (assignment_expression "*puVar12 = pvVar14" (pointer_expression "*puVar12" * identifier) = identifier) ;) (expression_statement "uVar5 = param_3[1];" (assignment_expression "uVar5 = param_3[1]" identifier = (subscript_expression "param_3[1]" identifier [ number_literal ])) ;) (expression_statement "puVar12[1] = *param_3;" (assignment_expression "puVar12[1] = *param_3" (subscript_expression "puVar12[1]" identifier [ number_literal ]) = (pointer_expression "*param_3" * identifier)) ;) (expression_statement "puVar12[2] = uVar5;" (assignment_expression "puVar12[2] = uVar5" (subscript_expression "puVar12[2]" identifier [ number_literal ]) = identifier) ;) (expression_statement "puVar12[3] = param_1[0x32];" (assignment_expression "puVar12[3] = param_1[0x32]" (subscript_expression "puVar12[3]" identifier [ number_literal ]) = (subscript_expression "param_1[0x32]" identifier [ number_literal ])) ;) (expression_statement "param_1[0x32] = (long)puVar12;" (assignment_expression "param_1[0x32] = (long)puVar12" (subscript_expression "param_1[0x32]" identifier [ number_literal ]) = (cast_expression "(long)puVar12" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) ;) })) (expression_statement "memcpy(pvVar14,(void *)*param_3,(ulong)*(uint *)(param_3 + 1));" (call_expression "memcpy(pvVar14,(void *)*param_3,(ulong)*(uint *)(param_3 + 1))" identifier (argument_list "(pvVar14,(void *)*param_3,(ulong)*(uint *)(param_3 + 1))" ( identifier , (cast_expression "(void *)*param_3" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_3" * identifier)) , (binary_expression "(ulong)*(uint *)(param_3 + 1)" (parenthesized_expression "(ulong)" ( identifier )) * (cast_expression "(uint *)(param_3 + 1)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 1)" ( (binary_expression "param_3 + 1" identifier + number_literal) )))) ))) ;) (expression_statement "*(undefined1 *)((long)pvVar14 + (ulong)*(uint *)(param_3 + 1)) = 0;" (assignment_expression "*(undefined1 *)((long)pvVar14 + (ulong)*(uint *)(param_3 + 1)) = 0" (pointer_expression "*(undefined1 *)((long)pvVar14 + (ulong)*(uint *)(param_3 + 1))" * (cast_expression "(undefined1 *)((long)pvVar14 + (ulong)*(uint *)(param_3 + 1))" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)pvVar14 + (ulong)*(uint *)(param_3 + 1))" ( (binary_expression "(long)pvVar14 + (ulong)*(uint *)(param_3 + 1)" (cast_expression "(long)pvVar14" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (binary_expression "(ulong)*(uint *)(param_3 + 1)" (parenthesized_expression "(ulong)" ( identifier )) * (cast_expression "(uint *)(param_3 + 1)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 1)" ( (binary_expression "param_3 + 1" identifier + number_literal) ))))) )))) = number_literal) ;) (expression_statement "FUN_0010f690(pvVar14);" (call_expression "FUN_0010f690(pvVar14)" identifier (argument_list "(pvVar14)" ( identifier ))) ;) (expression_statement "iVar6 = *(int *)(param_3 + 1);" (assignment_expression "iVar6 = *(int *)(param_3 + 1)" identifier = (pointer_expression "*(int *)(param_3 + 1)" * (cast_expression "(int *)(param_3 + 1)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 1)" ( (binary_expression "param_3 + 1" identifier + number_literal) ))))) ;) (expression_statement "*(int *)(plVar7 + 5) = local_50;" (assignment_expression "*(int *)(plVar7 + 5) = local_50" (pointer_expression "*(int *)(plVar7 + 5)" * (cast_expression "(int *)(plVar7 + 5)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(plVar7 + 5)" ( (binary_expression "plVar7 + 5" identifier + number_literal) )))) = identifier) ;) (if_statement "if (param_2 == (int *)0x0) {\n      *(int *)(plVar7 + 8) = *(short *)(lVar3 + 0x46) + -1;\n      if ((param_4 != (int *)0x0) && (0 < local_50)) goto LAB_0014bf4f;\n    }\n    else {\n      lVar8 = 0x40;\n      if (0 < local_50) {\n        iVar15 = 0;\nLAB_0014be20:\n        pbVar13 = *(byte **)((long)param_2 + lVar8 * 2 + -0x70);\n        if (0 < *(short *)(lVar3 + 0x46)) {\n          puVar12 = *(undefined8 **)(lVar3 + 8);\n          iVar18 = 0;\n          do {\n            bVar1 = *(byte *)*puVar12;\n            if ((&DAT_001f5800)[bVar1] == (&DAT_001f5800)[*pbVar13]) {\n              if (bVar1 == 0) goto LAB_0014bf08;\n              lVar9 = 1;\n              while (bVar1 = ((byte *)*puVar12)[lVar9],\n                    (&DAT_001f5800)[bVar1] == (&DAT_001f5800)[pbVar13[lVar9]]) {\n                lVar9 = lVar9 + 1;\n                if (bVar1 == 0) goto LAB_0014bf08;\n              }\n            }\n            iVar18 = iVar18 + 1;\n            puVar12 = puVar12 + 4;\n            if (iVar18 == *(short *)(lVar3 + 0x46)) break;\n          } while( true );\n        }\n        goto LAB_0014be9c;\n      }\n    }" if (parenthesized_expression "(param_2 == (int *)0x0)" ( (binary_expression "param_2 == (int *)0x0" identifier == (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      *(int *)(plVar7 + 8) = *(short *)(lVar3 + 0x46) + -1;\n      if ((param_4 != (int *)0x0) && (0 < local_50)) goto LAB_0014bf4f;\n    }" { (expression_statement "*(int *)(plVar7 + 8) = *(short *)(lVar3 + 0x46) + -1;" (assignment_expression "*(int *)(plVar7 + 8) = *(short *)(lVar3 + 0x46) + -1" (pointer_expression "*(int *)(plVar7 + 8)" * (cast_expression "(int *)(plVar7 + 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(plVar7 + 8)" ( (binary_expression "plVar7 + 8" identifier + number_literal) )))) = (binary_expression "*(short *)(lVar3 + 0x46) + -1" (pointer_expression "*(short *)(lVar3 + 0x46)" * (cast_expression "(short *)(lVar3 + 0x46)" ( (type_descriptor "short *" (sized_type_specifier "short" short) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar3 + 0x46)" ( (binary_expression "lVar3 + 0x46" identifier + number_literal) )))) + number_literal)) ;) (if_statement "if ((param_4 != (int *)0x0) && (0 < local_50)) goto LAB_0014bf4f;" if (parenthesized_expression "((param_4 != (int *)0x0) && (0 < local_50))" ( (binary_expression "(param_4 != (int *)0x0) && (0 < local_50)" (parenthesized_expression "(param_4 != (int *)0x0)" ( (binary_expression "param_4 != (int *)0x0" identifier != (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) && (parenthesized_expression "(0 < local_50)" ( (binary_expression "0 < local_50" number_literal < identifier) ))) )) (goto_statement "goto LAB_0014bf4f;" goto statement_identifier ;)) }) (else_clause "else {\n      lVar8 = 0x40;\n      if (0 < local_50) {\n        iVar15 = 0;\nLAB_0014be20:\n        pbVar13 = *(byte **)((long)param_2 + lVar8 * 2 + -0x70);\n        if (0 < *(short *)(lVar3 + 0x46)) {\n          puVar12 = *(undefined8 **)(lVar3 + 8);\n          iVar18 = 0;\n          do {\n            bVar1 = *(byte *)*puVar12;\n            if ((&DAT_001f5800)[bVar1] == (&DAT_001f5800)[*pbVar13]) {\n              if (bVar1 == 0) goto LAB_0014bf08;\n              lVar9 = 1;\n              while (bVar1 = ((byte *)*puVar12)[lVar9],\n                    (&DAT_001f5800)[bVar1] == (&DAT_001f5800)[pbVar13[lVar9]]) {\n                lVar9 = lVar9 + 1;\n                if (bVar1 == 0) goto LAB_0014bf08;\n              }\n            }\n            iVar18 = iVar18 + 1;\n            puVar12 = puVar12 + 4;\n            if (iVar18 == *(short *)(lVar3 + 0x46)) break;\n          } while( true );\n        }\n        goto LAB_0014be9c;\n      }\n    }" else (compound_statement "{\n      lVar8 = 0x40;\n      if (0 < local_50) {\n        iVar15 = 0;\nLAB_0014be20:\n        pbVar13 = *(byte **)((long)param_2 + lVar8 * 2 + -0x70);\n        if (0 < *(short *)(lVar3 + 0x46)) {\n          puVar12 = *(undefined8 **)(lVar3 + 8);\n          iVar18 = 0;\n          do {\n            bVar1 = *(byte *)*puVar12;\n            if ((&DAT_001f5800)[bVar1] == (&DAT_001f5800)[*pbVar13]) {\n              if (bVar1 == 0) goto LAB_0014bf08;\n              lVar9 = 1;\n              while (bVar1 = ((byte *)*puVar12)[lVar9],\n                    (&DAT_001f5800)[bVar1] == (&DAT_001f5800)[pbVar13[lVar9]]) {\n                lVar9 = lVar9 + 1;\n                if (bVar1 == 0) goto LAB_0014bf08;\n              }\n            }\n            iVar18 = iVar18 + 1;\n            puVar12 = puVar12 + 4;\n            if (iVar18 == *(short *)(lVar3 + 0x46)) break;\n          } while( true );\n        }\n        goto LAB_0014be9c;\n      }\n    }" { (expression_statement "lVar8 = 0x40;" (assignment_expression "lVar8 = 0x40" identifier = number_literal) ;) (if_statement "if (0 < local_50) {\n        iVar15 = 0;\nLAB_0014be20:\n        pbVar13 = *(byte **)((long)param_2 + lVar8 * 2 + -0x70);\n        if (0 < *(short *)(lVar3 + 0x46)) {\n          puVar12 = *(undefined8 **)(lVar3 + 8);\n          iVar18 = 0;\n          do {\n            bVar1 = *(byte *)*puVar12;\n            if ((&DAT_001f5800)[bVar1] == (&DAT_001f5800)[*pbVar13]) {\n              if (bVar1 == 0) goto LAB_0014bf08;\n              lVar9 = 1;\n              while (bVar1 = ((byte *)*puVar12)[lVar9],\n                    (&DAT_001f5800)[bVar1] == (&DAT_001f5800)[pbVar13[lVar9]]) {\n                lVar9 = lVar9 + 1;\n                if (bVar1 == 0) goto LAB_0014bf08;\n              }\n            }\n            iVar18 = iVar18 + 1;\n            puVar12 = puVar12 + 4;\n            if (iVar18 == *(short *)(lVar3 + 0x46)) break;\n          } while( true );\n        }\n        goto LAB_0014be9c;\n      }" if (parenthesized_expression "(0 < local_50)" ( (binary_expression "0 < local_50" number_literal < identifier) )) (compound_statement "{\n        iVar15 = 0;\nLAB_0014be20:\n        pbVar13 = *(byte **)((long)param_2 + lVar8 * 2 + -0x70);\n        if (0 < *(short *)(lVar3 + 0x46)) {\n          puVar12 = *(undefined8 **)(lVar3 + 8);\n          iVar18 = 0;\n          do {\n            bVar1 = *(byte *)*puVar12;\n            if ((&DAT_001f5800)[bVar1] == (&DAT_001f5800)[*pbVar13]) {\n              if (bVar1 == 0) goto LAB_0014bf08;\n              lVar9 = 1;\n              while (bVar1 = ((byte *)*puVar12)[lVar9],\n                    (&DAT_001f5800)[bVar1] == (&DAT_001f5800)[pbVar13[lVar9]]) {\n                lVar9 = lVar9 + 1;\n                if (bVar1 == 0) goto LAB_0014bf08;\n              }\n            }\n            iVar18 = iVar18 + 1;\n            puVar12 = puVar12 + 4;\n            if (iVar18 == *(short *)(lVar3 + 0x46)) break;\n          } while( true );\n        }\n        goto LAB_0014be9c;\n      }" { (expression_statement "iVar15 = 0;" (assignment_expression "iVar15 = 0" identifier = number_literal) ;) (labeled_statement "LAB_0014be20:\n        pbVar13 = *(byte **)((long)param_2 + lVar8 * 2 + -0x70);" statement_identifier : (expression_statement "pbVar13 = *(byte **)((long)param_2 + lVar8 * 2 + -0x70);" (assignment_expression "pbVar13 = *(byte **)((long)param_2 + lVar8 * 2 + -0x70)" identifier = (pointer_expression "*(byte **)((long)param_2 + lVar8 * 2 + -0x70)" * (cast_expression "(byte **)((long)param_2 + lVar8 * 2 + -0x70)" ( (type_descriptor "byte **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "((long)param_2 + lVar8 * 2 + -0x70)" ( (binary_expression "(long)param_2 + lVar8 * 2 + -0x70" (binary_expression "(long)param_2 + lVar8 * 2" (cast_expression "(long)param_2" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (binary_expression "lVar8 * 2" identifier * number_literal)) + number_literal) ))))) ;)) (if_statement "if (0 < *(short *)(lVar3 + 0x46)) {\n          puVar12 = *(undefined8 **)(lVar3 + 8);\n          iVar18 = 0;\n          do {\n            bVar1 = *(byte *)*puVar12;\n            if ((&DAT_001f5800)[bVar1] == (&DAT_001f5800)[*pbVar13]) {\n              if (bVar1 == 0) goto LAB_0014bf08;\n              lVar9 = 1;\n              while (bVar1 = ((byte *)*puVar12)[lVar9],\n                    (&DAT_001f5800)[bVar1] == (&DAT_001f5800)[pbVar13[lVar9]]) {\n                lVar9 = lVar9 + 1;\n                if (bVar1 == 0) goto LAB_0014bf08;\n              }\n            }\n            iVar18 = iVar18 + 1;\n            puVar12 = puVar12 + 4;\n            if (iVar18 == *(short *)(lVar3 + 0x46)) break;\n          } while( true );\n        }" if (parenthesized_expression "(0 < *(short *)(lVar3 + 0x46))" ( (binary_expression "0 < *(short *)(lVar3 + 0x46)" number_literal < (pointer_expression "*(short *)(lVar3 + 0x46)" * (cast_expression "(short *)(lVar3 + 0x46)" ( (type_descriptor "short *" (sized_type_specifier "short" short) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar3 + 0x46)" ( (binary_expression "lVar3 + 0x46" identifier + number_literal) ))))) )) (compound_statement "{\n          puVar12 = *(undefined8 **)(lVar3 + 8);\n          iVar18 = 0;\n          do {\n            bVar1 = *(byte *)*puVar12;\n            if ((&DAT_001f5800)[bVar1] == (&DAT_001f5800)[*pbVar13]) {\n              if (bVar1 == 0) goto LAB_0014bf08;\n              lVar9 = 1;\n              while (bVar1 = ((byte *)*puVar12)[lVar9],\n                    (&DAT_001f5800)[bVar1] == (&DAT_001f5800)[pbVar13[lVar9]]) {\n                lVar9 = lVar9 + 1;\n                if (bVar1 == 0) goto LAB_0014bf08;\n              }\n            }\n            iVar18 = iVar18 + 1;\n            puVar12 = puVar12 + 4;\n            if (iVar18 == *(short *)(lVar3 + 0x46)) break;\n          } while( true );\n        }" { (expression_statement "puVar12 = *(undefined8 **)(lVar3 + 8);" (assignment_expression "puVar12 = *(undefined8 **)(lVar3 + 8)" identifier = (pointer_expression "*(undefined8 **)(lVar3 + 8)" * (cast_expression "(undefined8 **)(lVar3 + 8)" ( (type_descriptor "undefined8 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(lVar3 + 8)" ( (binary_expression "lVar3 + 8" identifier + number_literal) ))))) ;) (expression_statement "iVar18 = 0;" (assignment_expression "iVar18 = 0" identifier = number_literal) ;) (do_statement "do {\n            bVar1 = *(byte *)*puVar12;\n            if ((&DAT_001f5800)[bVar1] == (&DAT_001f5800)[*pbVar13]) {\n              if (bVar1 == 0) goto LAB_0014bf08;\n              lVar9 = 1;\n              while (bVar1 = ((byte *)*puVar12)[lVar9],\n                    (&DAT_001f5800)[bVar1] == (&DAT_001f5800)[pbVar13[lVar9]]) {\n                lVar9 = lVar9 + 1;\n                if (bVar1 == 0) goto LAB_0014bf08;\n              }\n            }\n            iVar18 = iVar18 + 1;\n            puVar12 = puVar12 + 4;\n            if (iVar18 == *(short *)(lVar3 + 0x46)) break;\n          } while( true );" do (compound_statement "{\n            bVar1 = *(byte *)*puVar12;\n            if ((&DAT_001f5800)[bVar1] == (&DAT_001f5800)[*pbVar13]) {\n              if (bVar1 == 0) goto LAB_0014bf08;\n              lVar9 = 1;\n              while (bVar1 = ((byte *)*puVar12)[lVar9],\n                    (&DAT_001f5800)[bVar1] == (&DAT_001f5800)[pbVar13[lVar9]]) {\n                lVar9 = lVar9 + 1;\n                if (bVar1 == 0) goto LAB_0014bf08;\n              }\n            }\n            iVar18 = iVar18 + 1;\n            puVar12 = puVar12 + 4;\n            if (iVar18 == *(short *)(lVar3 + 0x46)) break;\n          }" { (expression_statement "bVar1 = *(byte *)*puVar12;" (assignment_expression "bVar1 = *(byte *)*puVar12" identifier = (pointer_expression "*(byte *)*puVar12" * (cast_expression "(byte *)*puVar12" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar12" * identifier)))) ;) (if_statement "if ((&DAT_001f5800)[bVar1] == (&DAT_001f5800)[*pbVar13]) {\n              if (bVar1 == 0) goto LAB_0014bf08;\n              lVar9 = 1;\n              while (bVar1 = ((byte *)*puVar12)[lVar9],\n                    (&DAT_001f5800)[bVar1] == (&DAT_001f5800)[pbVar13[lVar9]]) {\n                lVar9 = lVar9 + 1;\n                if (bVar1 == 0) goto LAB_0014bf08;\n              }\n            }" if (parenthesized_expression "((&DAT_001f5800)[bVar1] == (&DAT_001f5800)[*pbVar13])" ( (binary_expression "(&DAT_001f5800)[bVar1] == (&DAT_001f5800)[*pbVar13]" (subscript_expression "(&DAT_001f5800)[bVar1]" (parenthesized_expression "(&DAT_001f5800)" ( (pointer_expression "&DAT_001f5800" & identifier) )) [ identifier ]) == (subscript_expression "(&DAT_001f5800)[*pbVar13]" (parenthesized_expression "(&DAT_001f5800)" ( (pointer_expression "&DAT_001f5800" & identifier) )) [ (pointer_expression "*pbVar13" * identifier) ])) )) (compound_statement "{\n              if (bVar1 == 0) goto LAB_0014bf08;\n              lVar9 = 1;\n              while (bVar1 = ((byte *)*puVar12)[lVar9],\n                    (&DAT_001f5800)[bVar1] == (&DAT_001f5800)[pbVar13[lVar9]]) {\n                lVar9 = lVar9 + 1;\n                if (bVar1 == 0) goto LAB_0014bf08;\n              }\n            }" { (if_statement "if (bVar1 == 0) goto LAB_0014bf08;" if (parenthesized_expression "(bVar1 == 0)" ( (binary_expression "bVar1 == 0" identifier == number_literal) )) (goto_statement "goto LAB_0014bf08;" goto statement_identifier ;)) (expression_statement "lVar9 = 1;" (assignment_expression "lVar9 = 1" identifier = number_literal) ;) (while_statement "while (bVar1 = ((byte *)*puVar12)[lVar9],\n                    (&DAT_001f5800)[bVar1] == (&DAT_001f5800)[pbVar13[lVar9]]) {\n                lVar9 = lVar9 + 1;\n                if (bVar1 == 0) goto LAB_0014bf08;\n              }" while (parenthesized_expression "(bVar1 = ((byte *)*puVar12)[lVar9],\n                    (&DAT_001f5800)[bVar1] == (&DAT_001f5800)[pbVar13[lVar9]])" ( (comma_expression "bVar1 = ((byte *)*puVar12)[lVar9],\n                    (&DAT_001f5800)[bVar1] == (&DAT_001f5800)[pbVar13[lVar9]]" (assignment_expression "bVar1 = ((byte *)*puVar12)[lVar9]" identifier = (subscript_expression "((byte *)*puVar12)[lVar9]" (parenthesized_expression "((byte *)*puVar12)" ( (cast_expression "(byte *)*puVar12" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar12" * identifier)) )) [ identifier ])) , (binary_expression "(&DAT_001f5800)[bVar1] == (&DAT_001f5800)[pbVar13[lVar9]]" (subscript_expression "(&DAT_001f5800)[bVar1]" (parenthesized_expression "(&DAT_001f5800)" ( (pointer_expression "&DAT_001f5800" & identifier) )) [ identifier ]) == (subscript_expression "(&DAT_001f5800)[pbVar13[lVar9]]" (parenthesized_expression "(&DAT_001f5800)" ( (pointer_expression "&DAT_001f5800" & identifier) )) [ (subscript_expression "pbVar13[lVar9]" identifier [ identifier ]) ]))) )) (compound_statement "{\n                lVar9 = lVar9 + 1;\n                if (bVar1 == 0) goto LAB_0014bf08;\n              }" { (expression_statement "lVar9 = lVar9 + 1;" (assignment_expression "lVar9 = lVar9 + 1" identifier = (binary_expression "lVar9 + 1" identifier + number_literal)) ;) (if_statement "if (bVar1 == 0) goto LAB_0014bf08;" if (parenthesized_expression "(bVar1 == 0)" ( (binary_expression "bVar1 == 0" identifier == number_literal) )) (goto_statement "goto LAB_0014bf08;" goto statement_identifier ;)) })) })) (expression_statement "iVar18 = iVar18 + 1;" (assignment_expression "iVar18 = iVar18 + 1" identifier = (binary_expression "iVar18 + 1" identifier + number_literal)) ;) (expression_statement "puVar12 = puVar12 + 4;" (assignment_expression "puVar12 = puVar12 + 4" identifier = (binary_expression "puVar12 + 4" identifier + number_literal)) ;) (if_statement "if (iVar18 == *(short *)(lVar3 + 0x46)) break;" if (parenthesized_expression "(iVar18 == *(short *)(lVar3 + 0x46))" ( (binary_expression "iVar18 == *(short *)(lVar3 + 0x46)" identifier == (pointer_expression "*(short *)(lVar3 + 0x46)" * (cast_expression "(short *)(lVar3 + 0x46)" ( (type_descriptor "short *" (sized_type_specifier "short" short) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar3 + 0x46)" ( (binary_expression "lVar3 + 0x46" identifier + number_literal) ))))) )) (break_statement "break;" break ;)) }) while (parenthesized_expression "( true )" ( true )) ;) })) (goto_statement "goto LAB_0014be9c;" goto statement_identifier ;) })) }))) (goto_statement "goto LAB_0014c064;" goto statement_identifier ;) })) (labeled_statement "LAB_0014bed1:\n  if (param_4 == (int *)0x0) {\n    return;\n  }" statement_identifier : (if_statement "if (param_4 == (int *)0x0) {\n    return;\n  }" if (parenthesized_expression "(param_4 == (int *)0x0)" ( (binary_expression "param_4 == (int *)0x0" identifier == (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    return;\n  }" { (return_statement "return;" return ;) }))) (labeled_statement "LAB_0014bed9:\n  FUN_0012cc80(lVar2,param_4);" statement_identifier : (expression_statement "FUN_0012cc80(lVar2,param_4);" (call_expression "FUN_0012cc80(lVar2,param_4)" identifier (argument_list "(lVar2,param_4)" ( identifier , identifier ))) ;)) (return_statement "return;" return ;) (labeled_statement "LAB_0014bf08:\n  *(int *)((long)plVar7 + lVar8) = iVar18;" statement_identifier : (expression_statement "*(int *)((long)plVar7 + lVar8) = iVar18;" (assignment_expression "*(int *)((long)plVar7 + lVar8) = iVar18" (pointer_expression "*(int *)((long)plVar7 + lVar8)" * (cast_expression "(int *)((long)plVar7 + lVar8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)plVar7 + lVar8)" ( (binary_expression "(long)plVar7 + lVar8" (cast_expression "(long)plVar7" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + identifier) )))) = identifier) ;)) (if_statement "if (*(short *)(lVar3 + 0x46) <= iVar18) {\n    pbVar13 = *(byte **)(param_2 + (long)iVar15 * 8 + 4);\nLAB_0014be9c:\n    FUN_0014a9d0(param_1,"unknown column \"%s\" in foreign key definition",pbVar13);\n    goto LAB_0014bead;\n  }" if (parenthesized_expression "(*(short *)(lVar3 + 0x46) <= iVar18)" ( (binary_expression "*(short *)(lVar3 + 0x46) <= iVar18" (pointer_expression "*(short *)(lVar3 + 0x46)" * (cast_expression "(short *)(lVar3 + 0x46)" ( (type_descriptor "short *" (sized_type_specifier "short" short) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar3 + 0x46)" ( (binary_expression "lVar3 + 0x46" identifier + number_literal) )))) <= identifier) )) (compound_statement "{\n    pbVar13 = *(byte **)(param_2 + (long)iVar15 * 8 + 4);\nLAB_0014be9c:\n    FUN_0014a9d0(param_1,"unknown column \"%s\" in foreign key definition",pbVar13);\n    goto LAB_0014bead;\n  }" { (expression_statement "pbVar13 = *(byte **)(param_2 + (long)iVar15 * 8 + 4);" (assignment_expression "pbVar13 = *(byte **)(param_2 + (long)iVar15 * 8 + 4)" identifier = (pointer_expression "*(byte **)(param_2 + (long)iVar15 * 8 + 4)" * (cast_expression "(byte **)(param_2 + (long)iVar15 * 8 + 4)" ( (type_descriptor "byte **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_2 + (long)iVar15 * 8 + 4)" ( (binary_expression "param_2 + (long)iVar15 * 8 + 4" (binary_expression "param_2 + (long)iVar15 * 8" identifier + (binary_expression "(long)iVar15 * 8" (cast_expression "(long)iVar15" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) * number_literal)) + number_literal) ))))) ;) (labeled_statement "LAB_0014be9c:\n    FUN_0014a9d0(param_1,"unknown column \"%s\" in foreign key definition",pbVar13);" statement_identifier : (expression_statement "FUN_0014a9d0(param_1,"unknown column \"%s\" in foreign key definition",pbVar13);" (call_expression "FUN_0014a9d0(param_1,"unknown column \"%s\" in foreign key definition",pbVar13)" identifier (argument_list "(param_1,"unknown column \"%s\" in foreign key definition",pbVar13)" ( identifier , (string_literal ""unknown column \"%s\" in foreign key definition"" " string_content escape_sequence string_content escape_sequence string_content ") , identifier ))) ;)) (goto_statement "goto LAB_0014bead;" goto statement_identifier ;) })) (if_statement "if (1 < *(byte *)((long)param_1 + 0x10e)) {\n    for (plVar11 = (long *)param_1[0x32]; plVar11 != (long *)0x0; plVar11 = (long *)plVar11[3]) {\n      if (*(long *)((long)param_2 + lVar8 * 2 + -0x70) == *plVar11) {\n        *plVar11 = (long)plVar7 + lVar8;\n        break;\n      }\n    }\n  }" if (parenthesized_expression "(1 < *(byte *)((long)param_1 + 0x10e))" ( (binary_expression "1 < *(byte *)((long)param_1 + 0x10e)" number_literal < (pointer_expression "*(byte *)((long)param_1 + 0x10e)" * (cast_expression "(byte *)((long)param_1 + 0x10e)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_1 + 0x10e)" ( (binary_expression "(long)param_1 + 0x10e" (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) ))))) )) (compound_statement "{\n    for (plVar11 = (long *)param_1[0x32]; plVar11 != (long *)0x0; plVar11 = (long *)plVar11[3]) {\n      if (*(long *)((long)param_2 + lVar8 * 2 + -0x70) == *plVar11) {\n        *plVar11 = (long)plVar7 + lVar8;\n        break;\n      }\n    }\n  }" { (for_statement "for (plVar11 = (long *)param_1[0x32]; plVar11 != (long *)0x0; plVar11 = (long *)plVar11[3]) {\n      if (*(long *)((long)param_2 + lVar8 * 2 + -0x70) == *plVar11) {\n        *plVar11 = (long)plVar7 + lVar8;\n        break;\n      }\n    }" for ( (assignment_expression "plVar11 = (long *)param_1[0x32]" identifier = (cast_expression "(long *)param_1[0x32]" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[0x32]" identifier [ number_literal ]))) ; (binary_expression "plVar11 != (long *)0x0" identifier != (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) ; (assignment_expression "plVar11 = (long *)plVar11[3]" identifier = (cast_expression "(long *)plVar11[3]" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (subscript_expression "plVar11[3]" identifier [ number_literal ]))) ) (compound_statement "{\n      if (*(long *)((long)param_2 + lVar8 * 2 + -0x70) == *plVar11) {\n        *plVar11 = (long)plVar7 + lVar8;\n        break;\n      }\n    }" { (if_statement "if (*(long *)((long)param_2 + lVar8 * 2 + -0x70) == *plVar11) {\n        *plVar11 = (long)plVar7 + lVar8;\n        break;\n      }" if (parenthesized_expression "(*(long *)((long)param_2 + lVar8 * 2 + -0x70) == *plVar11)" ( (binary_expression "*(long *)((long)param_2 + lVar8 * 2 + -0x70) == *plVar11" (pointer_expression "*(long *)((long)param_2 + lVar8 * 2 + -0x70)" * (cast_expression "(long *)((long)param_2 + lVar8 * 2 + -0x70)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_2 + lVar8 * 2 + -0x70)" ( (binary_expression "(long)param_2 + lVar8 * 2 + -0x70" (binary_expression "(long)param_2 + lVar8 * 2" (cast_expression "(long)param_2" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (binary_expression "lVar8 * 2" identifier * number_literal)) + number_literal) )))) == (pointer_expression "*plVar11" * identifier)) )) (compound_statement "{\n        *plVar11 = (long)plVar7 + lVar8;\n        break;\n      }" { (expression_statement "*plVar11 = (long)plVar7 + lVar8;" (assignment_expression "*plVar11 = (long)plVar7 + lVar8" (pointer_expression "*plVar11" * identifier) = (binary_expression "(long)plVar7 + lVar8" (cast_expression "(long)plVar7" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + identifier)) ;) (break_statement "break;" break ;) })) })) })) (expression_statement "iVar15 = iVar15 + 1;" (assignment_expression "iVar15 = iVar15 + 1" identifier = (binary_expression "iVar15 + 1" identifier + number_literal)) ;) (expression_statement "lVar8 = lVar8 + 0x10;" (assignment_expression "lVar8 = lVar8 + 0x10" identifier = (binary_expression "lVar8 + 0x10" identifier + number_literal)) ;) (if_statement "if (iVar15 == local_50) goto code_r0x0014bf3e;" if (parenthesized_expression "(iVar15 == local_50)" ( (binary_expression "iVar15 == local_50" identifier == identifier) )) (goto_statement "goto code_r0x0014bf3e;" goto statement_identifier ;)) (goto_statement "goto LAB_0014be20;" goto statement_identifier ;) (labeled_statement "code_r0x0014bf3e:\n  if (param_4 != (int *)0x0) {\nLAB_0014bf4f:\n    plVar17 = plVar7 + 9;\n    plVar11 = (long *)(param_4 + 4);\n    iVar15 = 0;\n    __dest = (undefined1 *)((long)pvVar14 + (ulong)(iVar6 + 1));\n    do {\n      if ((char *)*plVar11 == (char *)0x0) {\n        lVar8 = 1;\n        __n = 0;\n        puVar16 = __dest;\n      }\n      else {\n        sVar10 = strlen((char *)*plVar11);\n        __n = (ulong)((uint)sVar10 & 0x3fffffff);\n        lVar8 = __n + 1;\n        puVar16 = __dest + __n;\n      }\n      *plVar17 = (long)__dest;\n      pvVar14 = (void *)*plVar11;\n      if (1 < *(byte *)((long)param_1 + 0x10e)) {\n        for (plVar4 = (long *)param_1[0x32]; plVar4 != (long *)0x0; plVar4 = (long *)plVar4[3]) {\n          if (pvVar14 == (void *)*plVar4) {\n            *plVar4 = (long)__dest;\n            pvVar14 = (void *)*plVar11;\n            break;\n          }\n        }\n      }\n      iVar15 = iVar15 + 1;\n      plVar11 = plVar11 + 4;\n      memcpy(__dest,pvVar14,__n);\n      plVar17 = plVar17 + 2;\n      *puVar16 = 0;\n      __dest = __dest + lVar8;\n    } while (iVar15 < local_50);\n  }" statement_identifier : (if_statement "if (param_4 != (int *)0x0) {\nLAB_0014bf4f:\n    plVar17 = plVar7 + 9;\n    plVar11 = (long *)(param_4 + 4);\n    iVar15 = 0;\n    __dest = (undefined1 *)((long)pvVar14 + (ulong)(iVar6 + 1));\n    do {\n      if ((char *)*plVar11 == (char *)0x0) {\n        lVar8 = 1;\n        __n = 0;\n        puVar16 = __dest;\n      }\n      else {\n        sVar10 = strlen((char *)*plVar11);\n        __n = (ulong)((uint)sVar10 & 0x3fffffff);\n        lVar8 = __n + 1;\n        puVar16 = __dest + __n;\n      }\n      *plVar17 = (long)__dest;\n      pvVar14 = (void *)*plVar11;\n      if (1 < *(byte *)((long)param_1 + 0x10e)) {\n        for (plVar4 = (long *)param_1[0x32]; plVar4 != (long *)0x0; plVar4 = (long *)plVar4[3]) {\n          if (pvVar14 == (void *)*plVar4) {\n            *plVar4 = (long)__dest;\n            pvVar14 = (void *)*plVar11;\n            break;\n          }\n        }\n      }\n      iVar15 = iVar15 + 1;\n      plVar11 = plVar11 + 4;\n      memcpy(__dest,pvVar14,__n);\n      plVar17 = plVar17 + 2;\n      *puVar16 = 0;\n      __dest = __dest + lVar8;\n    } while (iVar15 < local_50);\n  }" if (parenthesized_expression "(param_4 != (int *)0x0)" ( (binary_expression "param_4 != (int *)0x0" identifier != (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\nLAB_0014bf4f:\n    plVar17 = plVar7 + 9;\n    plVar11 = (long *)(param_4 + 4);\n    iVar15 = 0;\n    __dest = (undefined1 *)((long)pvVar14 + (ulong)(iVar6 + 1));\n    do {\n      if ((char *)*plVar11 == (char *)0x0) {\n        lVar8 = 1;\n        __n = 0;\n        puVar16 = __dest;\n      }\n      else {\n        sVar10 = strlen((char *)*plVar11);\n        __n = (ulong)((uint)sVar10 & 0x3fffffff);\n        lVar8 = __n + 1;\n        puVar16 = __dest + __n;\n      }\n      *plVar17 = (long)__dest;\n      pvVar14 = (void *)*plVar11;\n      if (1 < *(byte *)((long)param_1 + 0x10e)) {\n        for (plVar4 = (long *)param_1[0x32]; plVar4 != (long *)0x0; plVar4 = (long *)plVar4[3]) {\n          if (pvVar14 == (void *)*plVar4) {\n            *plVar4 = (long)__dest;\n            pvVar14 = (void *)*plVar11;\n            break;\n          }\n        }\n      }\n      iVar15 = iVar15 + 1;\n      plVar11 = plVar11 + 4;\n      memcpy(__dest,pvVar14,__n);\n      plVar17 = plVar17 + 2;\n      *puVar16 = 0;\n      __dest = __dest + lVar8;\n    } while (iVar15 < local_50);\n  }" { (labeled_statement "LAB_0014bf4f:\n    plVar17 = plVar7 + 9;" statement_identifier : (expression_statement "plVar17 = plVar7 + 9;" (assignment_expression "plVar17 = plVar7 + 9" identifier = (binary_expression "plVar7 + 9" identifier + number_literal)) ;)) (expression_statement "plVar11 = (long *)(param_4 + 4);" (assignment_expression "plVar11 = (long *)(param_4 + 4)" identifier = (cast_expression "(long *)(param_4 + 4)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_4 + 4)" ( (binary_expression "param_4 + 4" identifier + number_literal) )))) ;) (expression_statement "iVar15 = 0;" (assignment_expression "iVar15 = 0" identifier = number_literal) ;) (expression_statement "__dest = (undefined1 *)((long)pvVar14 + (ulong)(iVar6 + 1));" (assignment_expression "__dest = (undefined1 *)((long)pvVar14 + (ulong)(iVar6 + 1))" identifier = (cast_expression "(undefined1 *)((long)pvVar14 + (ulong)(iVar6 + 1))" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)pvVar14 + (ulong)(iVar6 + 1))" ( (binary_expression "(long)pvVar14 + (ulong)(iVar6 + 1)" (cast_expression "(long)pvVar14" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (call_expression "(ulong)(iVar6 + 1)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(iVar6 + 1)" ( (binary_expression "iVar6 + 1" identifier + number_literal) )))) )))) ;) (do_statement "do {\n      if ((char *)*plVar11 == (char *)0x0) {\n        lVar8 = 1;\n        __n = 0;\n        puVar16 = __dest;\n      }\n      else {\n        sVar10 = strlen((char *)*plVar11);\n        __n = (ulong)((uint)sVar10 & 0x3fffffff);\n        lVar8 = __n + 1;\n        puVar16 = __dest + __n;\n      }\n      *plVar17 = (long)__dest;\n      pvVar14 = (void *)*plVar11;\n      if (1 < *(byte *)((long)param_1 + 0x10e)) {\n        for (plVar4 = (long *)param_1[0x32]; plVar4 != (long *)0x0; plVar4 = (long *)plVar4[3]) {\n          if (pvVar14 == (void *)*plVar4) {\n            *plVar4 = (long)__dest;\n            pvVar14 = (void *)*plVar11;\n            break;\n          }\n        }\n      }\n      iVar15 = iVar15 + 1;\n      plVar11 = plVar11 + 4;\n      memcpy(__dest,pvVar14,__n);\n      plVar17 = plVar17 + 2;\n      *puVar16 = 0;\n      __dest = __dest + lVar8;\n    } while (iVar15 < local_50);" do (compound_statement "{\n      if ((char *)*plVar11 == (char *)0x0) {\n        lVar8 = 1;\n        __n = 0;\n        puVar16 = __dest;\n      }\n      else {\n        sVar10 = strlen((char *)*plVar11);\n        __n = (ulong)((uint)sVar10 & 0x3fffffff);\n        lVar8 = __n + 1;\n        puVar16 = __dest + __n;\n      }\n      *plVar17 = (long)__dest;\n      pvVar14 = (void *)*plVar11;\n      if (1 < *(byte *)((long)param_1 + 0x10e)) {\n        for (plVar4 = (long *)param_1[0x32]; plVar4 != (long *)0x0; plVar4 = (long *)plVar4[3]) {\n          if (pvVar14 == (void *)*plVar4) {\n            *plVar4 = (long)__dest;\n            pvVar14 = (void *)*plVar11;\n            break;\n          }\n        }\n      }\n      iVar15 = iVar15 + 1;\n      plVar11 = plVar11 + 4;\n      memcpy(__dest,pvVar14,__n);\n      plVar17 = plVar17 + 2;\n      *puVar16 = 0;\n      __dest = __dest + lVar8;\n    }" { (if_statement "if ((char *)*plVar11 == (char *)0x0) {\n        lVar8 = 1;\n        __n = 0;\n        puVar16 = __dest;\n      }\n      else {\n        sVar10 = strlen((char *)*plVar11);\n        __n = (ulong)((uint)sVar10 & 0x3fffffff);\n        lVar8 = __n + 1;\n        puVar16 = __dest + __n;\n      }" if (parenthesized_expression "((char *)*plVar11 == (char *)0x0)" ( (binary_expression "(char *)*plVar11 == (char *)0x0" (cast_expression "(char *)*plVar11" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*plVar11" * identifier)) == (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        lVar8 = 1;\n        __n = 0;\n        puVar16 = __dest;\n      }" { (expression_statement "lVar8 = 1;" (assignment_expression "lVar8 = 1" identifier = number_literal) ;) (expression_statement "__n = 0;" (assignment_expression "__n = 0" identifier = number_literal) ;) (expression_statement "puVar16 = __dest;" (assignment_expression "puVar16 = __dest" identifier = identifier) ;) }) (else_clause "else {\n        sVar10 = strlen((char *)*plVar11);\n        __n = (ulong)((uint)sVar10 & 0x3fffffff);\n        lVar8 = __n + 1;\n        puVar16 = __dest + __n;\n      }" else (compound_statement "{\n        sVar10 = strlen((char *)*plVar11);\n        __n = (ulong)((uint)sVar10 & 0x3fffffff);\n        lVar8 = __n + 1;\n        puVar16 = __dest + __n;\n      }" { (expression_statement "sVar10 = strlen((char *)*plVar11);" (assignment_expression "sVar10 = strlen((char *)*plVar11)" identifier = (call_expression "strlen((char *)*plVar11)" identifier (argument_list "((char *)*plVar11)" ( (cast_expression "(char *)*plVar11" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*plVar11" * identifier)) )))) ;) (expression_statement "__n = (ulong)((uint)sVar10 & 0x3fffffff);" (assignment_expression "__n = (ulong)((uint)sVar10 & 0x3fffffff)" identifier = (call_expression "(ulong)((uint)sVar10 & 0x3fffffff)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "((uint)sVar10 & 0x3fffffff)" ( (binary_expression "(uint)sVar10 & 0x3fffffff" (cast_expression "(uint)sVar10" ( (type_descriptor "uint" type_identifier) ) identifier) & number_literal) )))) ;) (expression_statement "lVar8 = __n + 1;" (assignment_expression "lVar8 = __n + 1" identifier = (binary_expression "__n + 1" identifier + number_literal)) ;) (expression_statement "puVar16 = __dest + __n;" (assignment_expression "puVar16 = __dest + __n" identifier = (binary_expression "__dest + __n" identifier + identifier)) ;) }))) (expression_statement "*plVar17 = (long)__dest;" (assignment_expression "*plVar17 = (long)__dest" (pointer_expression "*plVar17" * identifier) = (cast_expression "(long)__dest" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) ;) (expression_statement "pvVar14 = (void *)*plVar11;" (assignment_expression "pvVar14 = (void *)*plVar11" identifier = (cast_expression "(void *)*plVar11" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*plVar11" * identifier))) ;) (if_statement "if (1 < *(byte *)((long)param_1 + 0x10e)) {\n        for (plVar4 = (long *)param_1[0x32]; plVar4 != (long *)0x0; plVar4 = (long *)plVar4[3]) {\n          if (pvVar14 == (void *)*plVar4) {\n            *plVar4 = (long)__dest;\n            pvVar14 = (void *)*plVar11;\n            break;\n          }\n        }\n      }" if (parenthesized_expression "(1 < *(byte *)((long)param_1 + 0x10e))" ( (binary_expression "1 < *(byte *)((long)param_1 + 0x10e)" number_literal < (pointer_expression "*(byte *)((long)param_1 + 0x10e)" * (cast_expression "(byte *)((long)param_1 + 0x10e)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_1 + 0x10e)" ( (binary_expression "(long)param_1 + 0x10e" (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) ))))) )) (compound_statement "{\n        for (plVar4 = (long *)param_1[0x32]; plVar4 != (long *)0x0; plVar4 = (long *)plVar4[3]) {\n          if (pvVar14 == (void *)*plVar4) {\n            *plVar4 = (long)__dest;\n            pvVar14 = (void *)*plVar11;\n            break;\n          }\n        }\n      }" { (for_statement "for (plVar4 = (long *)param_1[0x32]; plVar4 != (long *)0x0; plVar4 = (long *)plVar4[3]) {\n          if (pvVar14 == (void *)*plVar4) {\n            *plVar4 = (long)__dest;\n            pvVar14 = (void *)*plVar11;\n            break;\n          }\n        }" for ( (assignment_expression "plVar4 = (long *)param_1[0x32]" identifier = (cast_expression "(long *)param_1[0x32]" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[0x32]" identifier [ number_literal ]))) ; (binary_expression "plVar4 != (long *)0x0" identifier != (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) ; (assignment_expression "plVar4 = (long *)plVar4[3]" identifier = (cast_expression "(long *)plVar4[3]" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (subscript_expression "plVar4[3]" identifier [ number_literal ]))) ) (compound_statement "{\n          if (pvVar14 == (void *)*plVar4) {\n            *plVar4 = (long)__dest;\n            pvVar14 = (void *)*plVar11;\n            break;\n          }\n        }" { (if_statement "if (pvVar14 == (void *)*plVar4) {\n            *plVar4 = (long)__dest;\n            pvVar14 = (void *)*plVar11;\n            break;\n          }" if (parenthesized_expression "(pvVar14 == (void *)*plVar4)" ( (binary_expression "pvVar14 == (void *)*plVar4" identifier == (cast_expression "(void *)*plVar4" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*plVar4" * identifier))) )) (compound_statement "{\n            *plVar4 = (long)__dest;\n            pvVar14 = (void *)*plVar11;\n            break;\n          }" { (expression_statement "*plVar4 = (long)__dest;" (assignment_expression "*plVar4 = (long)__dest" (pointer_expression "*plVar4" * identifier) = (cast_expression "(long)__dest" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) ;) (expression_statement "pvVar14 = (void *)*plVar11;" (assignment_expression "pvVar14 = (void *)*plVar11" identifier = (cast_expression "(void *)*plVar11" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*plVar11" * identifier))) ;) (break_statement "break;" break ;) })) })) })) (expression_statement "iVar15 = iVar15 + 1;" (assignment_expression "iVar15 = iVar15 + 1" identifier = (binary_expression "iVar15 + 1" identifier + number_literal)) ;) (expression_statement "plVar11 = plVar11 + 4;" (assignment_expression "plVar11 = plVar11 + 4" identifier = (binary_expression "plVar11 + 4" identifier + number_literal)) ;) (expression_statement "memcpy(__dest,pvVar14,__n);" (call_expression "memcpy(__dest,pvVar14,__n)" identifier (argument_list "(__dest,pvVar14,__n)" ( identifier , identifier , identifier ))) ;) (expression_statement "plVar17 = plVar17 + 2;" (assignment_expression "plVar17 = plVar17 + 2" identifier = (binary_expression "plVar17 + 2" identifier + number_literal)) ;) (expression_statement "*puVar16 = 0;" (assignment_expression "*puVar16 = 0" (pointer_expression "*puVar16" * identifier) = number_literal) ;) (expression_statement "__dest = __dest + lVar8;" (assignment_expression "__dest = __dest + lVar8" identifier = (binary_expression "__dest + lVar8" identifier + identifier)) ;) }) while (parenthesized_expression "(iVar15 < local_50)" ( (binary_expression "iVar15 < local_50" identifier < identifier) )) ;) }))) (labeled_statement "LAB_0014c064:\n  *(undefined1 *)((long)plVar7 + 0x2c) = 0;" statement_identifier : (expression_statement "*(undefined1 *)((long)plVar7 + 0x2c) = 0;" (assignment_expression "*(undefined1 *)((long)plVar7 + 0x2c) = 0" (pointer_expression "*(undefined1 *)((long)plVar7 + 0x2c)" * (cast_expression "(undefined1 *)((long)plVar7 + 0x2c)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)plVar7 + 0x2c)" ( (binary_expression "(long)plVar7 + 0x2c" (cast_expression "(long)plVar7" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) = number_literal) ;)) (expression_statement "*(undefined2 *)((long)plVar7 + 0x2d) = param_5;" (assignment_expression "*(undefined2 *)((long)plVar7 + 0x2d) = param_5" (pointer_expression "*(undefined2 *)((long)plVar7 + 0x2d)" * (cast_expression "(undefined2 *)((long)plVar7 + 0x2d)" ( (type_descriptor "undefined2 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)plVar7 + 0x2d)" ( (binary_expression "(long)plVar7 + 0x2d" (cast_expression "(long)plVar7" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) = identifier) ;) (expression_statement "plVar11 = (long *)FUN_0011da30(*(long *)(lVar3 + 0x70) + 0x50,plVar7[2],plVar7);" (assignment_expression "plVar11 = (long *)FUN_0011da30(*(long *)(lVar3 + 0x70) + 0x50,plVar7[2],plVar7)" identifier = (cast_expression "(long *)FUN_0011da30(*(long *)(lVar3 + 0x70) + 0x50,plVar7[2],plVar7)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_0011da30(*(long *)(lVar3 + 0x70) + 0x50,plVar7[2],plVar7)" identifier (argument_list "(*(long *)(lVar3 + 0x70) + 0x50,plVar7[2],plVar7)" ( (binary_expression "*(long *)(lVar3 + 0x70) + 0x50" (pointer_expression "*(long *)(lVar3 + 0x70)" * (cast_expression "(long *)(lVar3 + 0x70)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar3 + 0x70)" ( (binary_expression "lVar3 + 0x70" identifier + number_literal) )))) + number_literal) , (subscript_expression "plVar7[2]" identifier [ number_literal ]) , identifier ))))) ;) (if_statement "if (plVar11 == plVar7) {\n    if ((*(uint *)(lVar2 + 0x60) & 0xffff00) == 0) {\n      FUN_0011b860(lVar2);\n    }\nLAB_0014bead:\n    FUN_00119e90(lVar2,plVar7);\n  }\n  else {\n    if (plVar11 != (long *)0x0) {\n      plVar7[3] = (long)plVar11;\n      plVar11[4] = (long)plVar7;\n    }\n    *(long **)(lVar3 + 0x20) = plVar7;\n  }" if (parenthesized_expression "(plVar11 == plVar7)" ( (binary_expression "plVar11 == plVar7" identifier == identifier) )) (compound_statement "{\n    if ((*(uint *)(lVar2 + 0x60) & 0xffff00) == 0) {\n      FUN_0011b860(lVar2);\n    }\nLAB_0014bead:\n    FUN_00119e90(lVar2,plVar7);\n  }" { (if_statement "if ((*(uint *)(lVar2 + 0x60) & 0xffff00) == 0) {\n      FUN_0011b860(lVar2);\n    }" if (parenthesized_expression "((*(uint *)(lVar2 + 0x60) & 0xffff00) == 0)" ( (binary_expression "(*(uint *)(lVar2 + 0x60) & 0xffff00) == 0" (parenthesized_expression "(*(uint *)(lVar2 + 0x60) & 0xffff00)" ( (binary_expression "*(uint *)(lVar2 + 0x60) & 0xffff00" (pointer_expression "*(uint *)(lVar2 + 0x60)" * (cast_expression "(uint *)(lVar2 + 0x60)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar2 + 0x60)" ( (binary_expression "lVar2 + 0x60" identifier + number_literal) )))) & number_literal) )) == number_literal) )) (compound_statement "{\n      FUN_0011b860(lVar2);\n    }" { (expression_statement "FUN_0011b860(lVar2);" (call_expression "FUN_0011b860(lVar2)" identifier (argument_list "(lVar2)" ( identifier ))) ;) })) (labeled_statement "LAB_0014bead:\n    FUN_00119e90(lVar2,plVar7);" statement_identifier : (expression_statement "FUN_00119e90(lVar2,plVar7);" (call_expression "FUN_00119e90(lVar2,plVar7)" identifier (argument_list "(lVar2,plVar7)" ( identifier , identifier ))) ;)) }) (else_clause "else {\n    if (plVar11 != (long *)0x0) {\n      plVar7[3] = (long)plVar11;\n      plVar11[4] = (long)plVar7;\n    }\n    *(long **)(lVar3 + 0x20) = plVar7;\n  }" else (compound_statement "{\n    if (plVar11 != (long *)0x0) {\n      plVar7[3] = (long)plVar11;\n      plVar11[4] = (long)plVar7;\n    }\n    *(long **)(lVar3 + 0x20) = plVar7;\n  }" { (if_statement "if (plVar11 != (long *)0x0) {\n      plVar7[3] = (long)plVar11;\n      plVar11[4] = (long)plVar7;\n    }" if (parenthesized_expression "(plVar11 != (long *)0x0)" ( (binary_expression "plVar11 != (long *)0x0" identifier != (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      plVar7[3] = (long)plVar11;\n      plVar11[4] = (long)plVar7;\n    }" { (expression_statement "plVar7[3] = (long)plVar11;" (assignment_expression "plVar7[3] = (long)plVar11" (subscript_expression "plVar7[3]" identifier [ number_literal ]) = (cast_expression "(long)plVar11" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) ;) (expression_statement "plVar11[4] = (long)plVar7;" (assignment_expression "plVar11[4] = (long)plVar7" (subscript_expression "plVar11[4]" identifier [ number_literal ]) = (cast_expression "(long)plVar7" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) ;) })) (expression_statement "*(long **)(lVar3 + 0x20) = plVar7;" (assignment_expression "*(long **)(lVar3 + 0x20) = plVar7" (pointer_expression "*(long **)(lVar3 + 0x20)" * (cast_expression "(long **)(lVar3 + 0x20)" ( (type_descriptor "long **" (sized_type_specifier "long" long) (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(lVar3 + 0x20)" ( (binary_expression "lVar3 + 0x20" identifier + number_literal) )))) = identifier) ;) }))) (labeled_statement "joined_r0x0014bec0:\n  if (param_2 != (int *)0x0) {\nLAB_0014bec2:\n    FUN_0012cc80(lVar2,param_2);\n  }" statement_identifier : (if_statement "if (param_2 != (int *)0x0) {\nLAB_0014bec2:\n    FUN_0012cc80(lVar2,param_2);\n  }" if (parenthesized_expression "(param_2 != (int *)0x0)" ( (binary_expression "param_2 != (int *)0x0" identifier != (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\nLAB_0014bec2:\n    FUN_0012cc80(lVar2,param_2);\n  }" { (labeled_statement "LAB_0014bec2:\n    FUN_0012cc80(lVar2,param_2);" statement_identifier : (expression_statement "FUN_0012cc80(lVar2,param_2);" (call_expression "FUN_0012cc80(lVar2,param_2)" identifier (argument_list "(lVar2,param_2)" ( identifier , identifier ))) ;)) }))) (goto_statement "goto LAB_0014bed1;" goto statement_identifier ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration (sized_type_specifier long) (pointer_declarator * IDENT)) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration (sized_type_specifier long) (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) (pointer_declarator * IDENT) ;) (declaration (sized_type_specifier long) IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration (sized_type_specifier long) (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT == LIT) )) || (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + LIT) )))) == (char_literal ' escape_sequence ')) ))) )) (goto_statement goto statement_identifier ;)) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( IDENT , (cast_expression ( (type_descriptor (sized_type_specifier long)) ) (parenthesized_expression ( (binary_expression (binary_expression (binary_expression IDENT * LIT) + LIT) + (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ))) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + LIT) )) * LIT)) ;) (goto_statement goto statement_identifier ;) })) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression (binary_expression IDENT * LIT) + LIT) + (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))))) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (goto_statement goto statement_identifier ;)) (goto_statement goto statement_identifier ;) })) (expression_statement (call_expression IDENT (argument_list ( IDENT , (string_literal " string_content ") ))) ;) }))) (goto_statement goto statement_identifier ;) })) (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier short) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( IDENT , (cast_expression ( (type_descriptor (sized_type_specifier long)) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + LIT) ))) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (return_statement return ;) })) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) }) (else_clause else (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) != LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT , (string_literal " string_content ") , (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) * LIT) + (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) )))) , IDENT ))) ;) (goto_statement goto statement_identifier ;) })) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + LIT)) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = LIT) ;)) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (do_statement do (compound_statement { (while_statement while (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) IDENT)) != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) IDENT)) )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT + (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) & LIT) ))) + LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT <= IDENT) )) (goto_statement goto statement_identifier ;)) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT < IDENT) )) ;) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( IDENT , (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) ))))) ;)) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) LIT)) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + LIT) )) * LIT)) ;) }))) (labeled_statement statement_identifier : (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;)) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + IDENT) )))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT)) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression LIT < (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + LIT) ))))) )) && (parenthesized_expression ( (comma_expression (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( (pointer_expression * IDENT) , LIT ))))) , (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT))) ))) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT)) ;) })) (expression_statement (call_expression IDENT (argument_list ( IDENT , (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT)) , (binary_expression (parenthesized_expression ( IDENT )) * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + (binary_expression (parenthesized_expression ( IDENT )) * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) )))) = LIT) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier short) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) && (parenthesized_expression ( (binary_expression LIT < IDENT) ))) )) (goto_statement goto statement_identifier ;)) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + (binary_expression IDENT * LIT)) + LIT) ))))) ;)) (if_statement if (parenthesized_expression ( (binary_expression LIT < (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier short) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT)))) ;) (if_statement if (parenthesized_expression ( (binary_expression (subscript_expression (parenthesized_expression ( (pointer_expression & IDENT) )) [ IDENT ]) == (subscript_expression (parenthesized_expression ( (pointer_expression & IDENT) )) [ (pointer_expression * IDENT) ])) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = LIT) ;) (while_statement while (parenthesized_expression ( (comma_expression (assignment_expression IDENT = (subscript_expression (parenthesized_expression ( (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT)) )) [ IDENT ])) , (binary_expression (subscript_expression (parenthesized_expression ( (pointer_expression & IDENT) )) [ IDENT ]) == (subscript_expression (parenthesized_expression ( (pointer_expression & IDENT) )) [ (subscript_expression IDENT [ IDENT ]) ]))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (goto_statement goto statement_identifier ;)) })) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier short) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) )) (break_statement break ;)) }) while (parenthesized_expression ( BOOL )) ;) })) (goto_statement goto statement_identifier ;) })) }))) (goto_statement goto statement_identifier ;) })) (labeled_statement statement_identifier : (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (return_statement return ;) }))) (labeled_statement statement_identifier : (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT ))) ;)) (return_statement return ;) (labeled_statement statement_identifier : (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + IDENT) )))) = IDENT) ;)) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier short) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) <= IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT + (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) * LIT)) + LIT) ))))) ;) (labeled_statement statement_identifier : (expression_statement (call_expression IDENT (argument_list ( IDENT , (string_literal " string_content escape_sequence string_content escape_sequence string_content ") , IDENT ))) ;)) (goto_statement goto statement_identifier ;) })) (if_statement if (parenthesized_expression ( (binary_expression LIT < (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + LIT) ))))) )) (compound_statement { (for_statement for ( (assignment_expression IDENT = (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) ; (binary_expression IDENT != (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) LIT)) ; (assignment_expression IDENT = (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) ) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + (binary_expression IDENT * LIT)) + LIT) )))) == (pointer_expression * IDENT)) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * IDENT) = (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + IDENT)) ;) (break_statement break ;) })) })) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == IDENT) )) (goto_statement goto statement_identifier ;)) (goto_statement goto statement_identifier ;) (labeled_statement statement_identifier : (if_statement if (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;)) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT + LIT) )))) )))) ;) (do_statement do (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT)) == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT)) )))) ;) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) & LIT) )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) }))) (expression_statement (assignment_expression (pointer_expression * IDENT) = (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT)) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + LIT) ))))) )) (compound_statement { (for_statement for ( (assignment_expression IDENT = (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) ; (binary_expression IDENT != (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) LIT)) ; (assignment_expression IDENT = (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) ) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * IDENT) = (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT)) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) ;) (break_statement break ;) })) })) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT ))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = LIT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT < IDENT) )) ;) }))) (labeled_statement statement_identifier : (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + LIT) )))) = LIT) ;)) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + LIT) , (subscript_expression IDENT [ LIT ]) , IDENT ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == IDENT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) & LIT) )) == LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) })) (labeled_statement statement_identifier : (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT ))) ;)) }) (else_clause else (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT)) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT)) ;) })) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) }))) (labeled_statement statement_identifier : (if_statement if (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (labeled_statement statement_identifier : (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT ))) ;)) }))) (goto_statement goto statement_identifier ;) })))
(function_definition "void FUN_0014bc80(long *param_1,int *param_2,undefined8 *param_3,int *param_4,undefined2 param_5)\n\n{\n  byte bVar1;\n  long lVar2;\n  long lVar3;\n  long *plVar4;\n  undefined8 uVar5;\n  int iVar6;\n  long *plVar7;\n  long lVar8;\n  long lVar9;\n  size_t sVar10;\n  ulong __n;\n  long *plVar11;\n  undefined8 *puVar12;\n  byte *pbVar13;\n  void *pvVar14;\n  int iVar15;\n  undefined1 *puVar16;\n  long *plVar17;\n  int iVar18;\n  undefined1 *__dest;\n  int *piVar19;\n  int local_50;\n  \n  lVar2 = *param_1;\n  lVar3 = param_1[0x27];\n  if ((lVar3 == 0) || (*(char *)((long)param_1 + 0x10e) == '\x01')) goto joined_r0x0014bec0;\n  if (param_2 != (int *)0x0) {\n    local_50 = *param_2;\n    if (param_4 == (int *)0x0) {\n      plVar7 = (long *)FUN_0011b8f0(lVar2,(long)(local_50 * 0x10 + 0x41 + *(int *)(param_3 + 1)));\n      if (plVar7 != (long *)0x0) {\n        lVar8 = ((long)local_50 + 4) * 0x10;\n        goto LAB_0014bd94;\n      }\n    }\n    else {\n      iVar6 = *param_4;\n      if (iVar6 == local_50) {\n        iVar15 = iVar6 * 0x10 + 0x41 + *(int *)(param_3 + 1);\n        if (0 < iVar6) goto LAB_0014bd06;\n        goto LAB_0014bd6e;\n      }\n      FUN_0014a9d0(param_1,\n                   "number of columns in foreign key does not match the number of columns in the referenced table"\n                  );\n    }\n    goto LAB_0014bec2;\n  }\n  iVar6 = *(short *)(lVar3 + 0x46) + -1;\n  if (-1 < iVar6) {\n    if (param_4 == (int *)0x0) {\n      plVar7 = (long *)FUN_0011b8f0(lVar2,(long)(*(int *)(param_3 + 1) + 0x51));\n      if (plVar7 == (long *)0x0) {\n        return;\n      }\n      lVar8 = 0x50;\n      local_50 = 1;\n    }\n    else {\n      if (*param_4 != 1) {\n        FUN_0014a9d0(param_1,"foreign key on %s should reference only one column of table %T",\n                     *(undefined8 *)((long)iVar6 * 0x20 + *(long *)(lVar3 + 8)),param_3);\n        goto LAB_0014bed9;\n      }\n      local_50 = 1;\n      iVar15 = *(int *)(param_3 + 1) + 0x51;\n      iVar6 = 1;\nLAB_0014bd06:\n      iVar18 = 0;\n      piVar19 = param_4 + 4;\n      do {\n        while (*(char **)piVar19 != (char *)0x0) {\n          sVar10 = strlen(*(char **)piVar19);\n          iVar18 = iVar18 + 1;\n          piVar19 = piVar19 + 8;\n          iVar15 = iVar15 + ((uint)sVar10 & 0x3fffffff) + 1;\n          if (iVar6 <= iVar18) goto LAB_0014bd6e;\n        }\n        iVar18 = iVar18 + 1;\n        piVar19 = piVar19 + 8;\n        iVar15 = iVar15 + 1;\n      } while (iVar18 < iVar6);\nLAB_0014bd6e:\n      plVar7 = (long *)FUN_0011b8f0(lVar2,(long)iVar15);\n      if (plVar7 == (long *)0x0) goto joined_r0x0014bec0;\n      lVar8 = ((long)local_50 + 4) * 0x10;\n    }\nLAB_0014bd94:\n    *plVar7 = lVar3;\n    lVar9 = *(long *)(lVar3 + 0x20);\n    pvVar14 = (void *)((long)plVar7 + lVar8);\n    plVar7[2] = (long)pvVar14;\n    plVar7[1] = lVar9;\n    if ((1 < *(byte *)((long)param_1 + 0x10e)) &&\n       (puVar12 = (undefined8 *)FUN_0011b8f0(*param_1,0x20), puVar12 != (undefined8 *)0x0)) {\n      *puVar12 = pvVar14;\n      uVar5 = param_3[1];\n      puVar12[1] = *param_3;\n      puVar12[2] = uVar5;\n      puVar12[3] = param_1[0x32];\n      param_1[0x32] = (long)puVar12;\n    }\n    memcpy(pvVar14,(void *)*param_3,(ulong)*(uint *)(param_3 + 1));\n    *(undefined1 *)((long)pvVar14 + (ulong)*(uint *)(param_3 + 1)) = 0;\n    FUN_0010f690(pvVar14);\n    iVar6 = *(int *)(param_3 + 1);\n    *(int *)(plVar7 + 5) = local_50;\n    if (param_2 == (int *)0x0) {\n      *(int *)(plVar7 + 8) = *(short *)(lVar3 + 0x46) + -1;\n      if ((param_4 != (int *)0x0) && (0 < local_50)) goto LAB_0014bf4f;\n    }\n    else {\n      lVar8 = 0x40;\n      if (0 < local_50) {\n        iVar15 = 0;\nLAB_0014be20:\n        pbVar13 = *(byte **)((long)param_2 + lVar8 * 2 + -0x70);\n        if (0 < *(short *)(lVar3 + 0x46)) {\n          puVar12 = *(undefined8 **)(lVar3 + 8);\n          iVar18 = 0;\n          do {\n            bVar1 = *(byte *)*puVar12;\n            if ((&DAT_001f5800)[bVar1] == (&DAT_001f5800)[*pbVar13]) {\n              if (bVar1 == 0) goto LAB_0014bf08;\n              lVar9 = 1;\n              while (bVar1 = ((byte *)*puVar12)[lVar9],\n                    (&DAT_001f5800)[bVar1] == (&DAT_001f5800)[pbVar13[lVar9]]) {\n                lVar9 = lVar9 + 1;\n                if (bVar1 == 0) goto LAB_0014bf08;\n              }\n            }\n            iVar18 = iVar18 + 1;\n            puVar12 = puVar12 + 4;\n            if (iVar18 == *(short *)(lVar3 + 0x46)) break;\n          } while( true );\n        }\n        goto LAB_0014be9c;\n      }\n    }\n    goto LAB_0014c064;\n  }\nLAB_0014bed1:\n  if (param_4 == (int *)0x0) {\n    return;\n  }\nLAB_0014bed9:\n  FUN_0012cc80(lVar2,param_4);\n  return;\nLAB_0014bf08:\n  *(int *)((long)plVar7 + lVar8) = iVar18;\n  if (*(short *)(lVar3 + 0x46) <= iVar18) {\n    pbVar13 = *(byte **)(param_2 + (long)iVar15 * 8 + 4);\nLAB_0014be9c:\n    FUN_0014a9d0(param_1,"unknown column \"%s\" in foreign key definition",pbVar13);\n    goto LAB_0014bead;\n  }\n  if (1 < *(byte *)((long)param_1 + 0x10e)) {\n    for (plVar11 = (long *)param_1[0x32]; plVar11 != (long *)0x0; plVar11 = (long *)plVar11[3]) {\n      if (*(long *)((long)param_2 + lVar8 * 2 + -0x70) == *plVar11) {\n        *plVar11 = (long)plVar7 + lVar8;\n        break;\n      }\n    }\n  }\n  iVar15 = iVar15 + 1;\n  lVar8 = lVar8 + 0x10;\n  if (iVar15 == local_50) goto code_r0x0014bf3e;\n  goto LAB_0014be20;\ncode_r0x0014bf3e:\n  if (param_4 != (int *)0x0) {\nLAB_0014bf4f:\n    plVar17 = plVar7 + 9;\n    plVar11 = (long *)(param_4 + 4);\n    iVar15 = 0;\n    __dest = (undefined1 *)((long)pvVar14 + (ulong)(iVar6 + 1));\n    do {\n      if ((char *)*plVar11 == (char *)0x0) {\n        lVar8 = 1;\n        __n = 0;\n        puVar16 = __dest;\n      }\n      else {\n        sVar10 = strlen((char *)*plVar11);\n        __n = (ulong)((uint)sVar10 & 0x3fffffff);\n        lVar8 = __n + 1;\n        puVar16 = __dest + __n;\n      }\n      *plVar17 = (long)__dest;\n      pvVar14 = (void *)*plVar11;\n      if (1 < *(byte *)((long)param_1 + 0x10e)) {\n        for (plVar4 = (long *)param_1[0x32]; plVar4 != (long *)0x0; plVar4 = (long *)plVar4[3]) {\n          if (pvVar14 == (void *)*plVar4) {\n            *plVar4 = (long)__dest;\n            pvVar14 = (void *)*plVar11;\n            break;\n          }\n        }\n      }\n      iVar15 = iVar15 + 1;\n      plVar11 = plVar11 + 4;\n      memcpy(__dest,pvVar14,__n);\n      plVar17 = plVar17 + 2;\n      *puVar16 = 0;\n      __dest = __dest + lVar8;\n    } while (iVar15 < local_50);\n  }\nLAB_0014c064:\n  *(undefined1 *)((long)plVar7 + 0x2c) = 0;\n  *(undefined2 *)((long)plVar7 + 0x2d) = param_5;\n  plVar11 = (long *)FUN_0011da30(*(long *)(lVar3 + 0x70) + 0x50,plVar7[2],plVar7);\n  if (plVar11 == plVar7) {\n    if ((*(uint *)(lVar2 + 0x60) & 0xffff00) == 0) {\n      FUN_0011b860(lVar2);\n    }\nLAB_0014bead:\n    FUN_00119e90(lVar2,plVar7);\n  }\n  else {\n    if (plVar11 != (long *)0x0) {\n      plVar7[3] = (long)plVar11;\n      plVar11[4] = (long)plVar7;\n    }\n    *(long **)(lVar3 + 0x20) = plVar7;\n  }\njoined_r0x0014bec0:\n  if (param_2 != (int *)0x0) {\nLAB_0014bec2:\n    FUN_0012cc80(lVar2,param_2);\n  }\n  goto LAB_0014bed1;\n}" (primitive_type "void") (function_declarator "FUN_0014bc80(long *param_1,int *param_2,undefined8 *param_3,int *param_4,undefined2 param_5)" (identifier "FUN_0014bc80") (parameter_list "(long *param_1,int *param_2,undefined8 *param_3,int *param_4,undefined2 param_5)" (( "(") (parameter_declaration "long *param_1" (sized_type_specifier "long" (long "long")) (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "int *param_2" (primitive_type "int") (pointer_declarator "*param_2" (* "*") (identifier "param_2"))) (, ",") (parameter_declaration "undefined8 *param_3" (type_identifier "undefined8") (pointer_declarator "*param_3" (* "*") (identifier "param_3"))) (, ",") (parameter_declaration "int *param_4" (primitive_type "int") (pointer_declarator "*param_4" (* "*") (identifier "param_4"))) (, ",") (parameter_declaration "undefined2 param_5" (type_identifier "undefined2") (identifier "param_5")) () ")"))) (compound_statement "{\n  byte bVar1;\n  long lVar2;\n  long lVar3;\n  long *plVar4;\n  undefined8 uVar5;\n  int iVar6;\n  long *plVar7;\n  long lVar8;\n  long lVar9;\n  size_t sVar10;\n  ulong __n;\n  long *plVar11;\n  undefined8 *puVar12;\n  byte *pbVar13;\n  void *pvVar14;\n  int iVar15;\n  undefined1 *puVar16;\n  long *plVar17;\n  int iVar18;\n  undefined1 *__dest;\n  int *piVar19;\n  int local_50;\n  \n  lVar2 = *param_1;\n  lVar3 = param_1[0x27];\n  if ((lVar3 == 0) || (*(char *)((long)param_1 + 0x10e) == '\x01')) goto joined_r0x0014bec0;\n  if (param_2 != (int *)0x0) {\n    local_50 = *param_2;\n    if (param_4 == (int *)0x0) {\n      plVar7 = (long *)FUN_0011b8f0(lVar2,(long)(local_50 * 0x10 + 0x41 + *(int *)(param_3 + 1)));\n      if (plVar7 != (long *)0x0) {\n        lVar8 = ((long)local_50 + 4) * 0x10;\n        goto LAB_0014bd94;\n      }\n    }\n    else {\n      iVar6 = *param_4;\n      if (iVar6 == local_50) {\n        iVar15 = iVar6 * 0x10 + 0x41 + *(int *)(param_3 + 1);\n        if (0 < iVar6) goto LAB_0014bd06;\n        goto LAB_0014bd6e;\n      }\n      FUN_0014a9d0(param_1,\n                   "number of columns in foreign key does not match the number of columns in the referenced table"\n                  );\n    }\n    goto LAB_0014bec2;\n  }\n  iVar6 = *(short *)(lVar3 + 0x46) + -1;\n  if (-1 < iVar6) {\n    if (param_4 == (int *)0x0) {\n      plVar7 = (long *)FUN_0011b8f0(lVar2,(long)(*(int *)(param_3 + 1) + 0x51));\n      if (plVar7 == (long *)0x0) {\n        return;\n      }\n      lVar8 = 0x50;\n      local_50 = 1;\n    }\n    else {\n      if (*param_4 != 1) {\n        FUN_0014a9d0(param_1,"foreign key on %s should reference only one column of table %T",\n                     *(undefined8 *)((long)iVar6 * 0x20 + *(long *)(lVar3 + 8)),param_3);\n        goto LAB_0014bed9;\n      }\n      local_50 = 1;\n      iVar15 = *(int *)(param_3 + 1) + 0x51;\n      iVar6 = 1;\nLAB_0014bd06:\n      iVar18 = 0;\n      piVar19 = param_4 + 4;\n      do {\n        while (*(char **)piVar19 != (char *)0x0) {\n          sVar10 = strlen(*(char **)piVar19);\n          iVar18 = iVar18 + 1;\n          piVar19 = piVar19 + 8;\n          iVar15 = iVar15 + ((uint)sVar10 & 0x3fffffff) + 1;\n          if (iVar6 <= iVar18) goto LAB_0014bd6e;\n        }\n        iVar18 = iVar18 + 1;\n        piVar19 = piVar19 + 8;\n        iVar15 = iVar15 + 1;\n      } while (iVar18 < iVar6);\nLAB_0014bd6e:\n      plVar7 = (long *)FUN_0011b8f0(lVar2,(long)iVar15);\n      if (plVar7 == (long *)0x0) goto joined_r0x0014bec0;\n      lVar8 = ((long)local_50 + 4) * 0x10;\n    }\nLAB_0014bd94:\n    *plVar7 = lVar3;\n    lVar9 = *(long *)(lVar3 + 0x20);\n    pvVar14 = (void *)((long)plVar7 + lVar8);\n    plVar7[2] = (long)pvVar14;\n    plVar7[1] = lVar9;\n    if ((1 < *(byte *)((long)param_1 + 0x10e)) &&\n       (puVar12 = (undefined8 *)FUN_0011b8f0(*param_1,0x20), puVar12 != (undefined8 *)0x0)) {\n      *puVar12 = pvVar14;\n      uVar5 = param_3[1];\n      puVar12[1] = *param_3;\n      puVar12[2] = uVar5;\n      puVar12[3] = param_1[0x32];\n      param_1[0x32] = (long)puVar12;\n    }\n    memcpy(pvVar14,(void *)*param_3,(ulong)*(uint *)(param_3 + 1));\n    *(undefined1 *)((long)pvVar14 + (ulong)*(uint *)(param_3 + 1)) = 0;\n    FUN_0010f690(pvVar14);\n    iVar6 = *(int *)(param_3 + 1);\n    *(int *)(plVar7 + 5) = local_50;\n    if (param_2 == (int *)0x0) {\n      *(int *)(plVar7 + 8) = *(short *)(lVar3 + 0x46) + -1;\n      if ((param_4 != (int *)0x0) && (0 < local_50)) goto LAB_0014bf4f;\n    }\n    else {\n      lVar8 = 0x40;\n      if (0 < local_50) {\n        iVar15 = 0;\nLAB_0014be20:\n        pbVar13 = *(byte **)((long)param_2 + lVar8 * 2 + -0x70);\n        if (0 < *(short *)(lVar3 + 0x46)) {\n          puVar12 = *(undefined8 **)(lVar3 + 8);\n          iVar18 = 0;\n          do {\n            bVar1 = *(byte *)*puVar12;\n            if ((&DAT_001f5800)[bVar1] == (&DAT_001f5800)[*pbVar13]) {\n              if (bVar1 == 0) goto LAB_0014bf08;\n              lVar9 = 1;\n              while (bVar1 = ((byte *)*puVar12)[lVar9],\n                    (&DAT_001f5800)[bVar1] == (&DAT_001f5800)[pbVar13[lVar9]]) {\n                lVar9 = lVar9 + 1;\n                if (bVar1 == 0) goto LAB_0014bf08;\n              }\n            }\n            iVar18 = iVar18 + 1;\n            puVar12 = puVar12 + 4;\n            if (iVar18 == *(short *)(lVar3 + 0x46)) break;\n          } while( true );\n        }\n        goto LAB_0014be9c;\n      }\n    }\n    goto LAB_0014c064;\n  }\nLAB_0014bed1:\n  if (param_4 == (int *)0x0) {\n    return;\n  }\nLAB_0014bed9:\n  FUN_0012cc80(lVar2,param_4);\n  return;\nLAB_0014bf08:\n  *(int *)((long)plVar7 + lVar8) = iVar18;\n  if (*(short *)(lVar3 + 0x46) <= iVar18) {\n    pbVar13 = *(byte **)(param_2 + (long)iVar15 * 8 + 4);\nLAB_0014be9c:\n    FUN_0014a9d0(param_1,"unknown column \"%s\" in foreign key definition",pbVar13);\n    goto LAB_0014bead;\n  }\n  if (1 < *(byte *)((long)param_1 + 0x10e)) {\n    for (plVar11 = (long *)param_1[0x32]; plVar11 != (long *)0x0; plVar11 = (long *)plVar11[3]) {\n      if (*(long *)((long)param_2 + lVar8 * 2 + -0x70) == *plVar11) {\n        *plVar11 = (long)plVar7 + lVar8;\n        break;\n      }\n    }\n  }\n  iVar15 = iVar15 + 1;\n  lVar8 = lVar8 + 0x10;\n  if (iVar15 == local_50) goto code_r0x0014bf3e;\n  goto LAB_0014be20;\ncode_r0x0014bf3e:\n  if (param_4 != (int *)0x0) {\nLAB_0014bf4f:\n    plVar17 = plVar7 + 9;\n    plVar11 = (long *)(param_4 + 4);\n    iVar15 = 0;\n    __dest = (undefined1 *)((long)pvVar14 + (ulong)(iVar6 + 1));\n    do {\n      if ((char *)*plVar11 == (char *)0x0) {\n        lVar8 = 1;\n        __n = 0;\n        puVar16 = __dest;\n      }\n      else {\n        sVar10 = strlen((char *)*plVar11);\n        __n = (ulong)((uint)sVar10 & 0x3fffffff);\n        lVar8 = __n + 1;\n        puVar16 = __dest + __n;\n      }\n      *plVar17 = (long)__dest;\n      pvVar14 = (void *)*plVar11;\n      if (1 < *(byte *)((long)param_1 + 0x10e)) {\n        for (plVar4 = (long *)param_1[0x32]; plVar4 != (long *)0x0; plVar4 = (long *)plVar4[3]) {\n          if (pvVar14 == (void *)*plVar4) {\n            *plVar4 = (long)__dest;\n            pvVar14 = (void *)*plVar11;\n            break;\n          }\n        }\n      }\n      iVar15 = iVar15 + 1;\n      plVar11 = plVar11 + 4;\n      memcpy(__dest,pvVar14,__n);\n      plVar17 = plVar17 + 2;\n      *puVar16 = 0;\n      __dest = __dest + lVar8;\n    } while (iVar15 < local_50);\n  }\nLAB_0014c064:\n  *(undefined1 *)((long)plVar7 + 0x2c) = 0;\n  *(undefined2 *)((long)plVar7 + 0x2d) = param_5;\n  plVar11 = (long *)FUN_0011da30(*(long *)(lVar3 + 0x70) + 0x50,plVar7[2],plVar7);\n  if (plVar11 == plVar7) {\n    if ((*(uint *)(lVar2 + 0x60) & 0xffff00) == 0) {\n      FUN_0011b860(lVar2);\n    }\nLAB_0014bead:\n    FUN_00119e90(lVar2,plVar7);\n  }\n  else {\n    if (plVar11 != (long *)0x0) {\n      plVar7[3] = (long)plVar11;\n      plVar11[4] = (long)plVar7;\n    }\n    *(long **)(lVar3 + 0x20) = plVar7;\n  }\njoined_r0x0014bec0:\n  if (param_2 != (int *)0x0) {\nLAB_0014bec2:\n    FUN_0012cc80(lVar2,param_2);\n  }\n  goto LAB_0014bed1;\n}" ({ "{") (declaration "byte bVar1;" (type_identifier "byte") (identifier "bVar1") (; ";")) (declaration "long lVar2;" (sized_type_specifier "long" (long "long")) (identifier "lVar2") (; ";")) (declaration "long lVar3;" (sized_type_specifier "long" (long "long")) (identifier "lVar3") (; ";")) (declaration "long *plVar4;" (sized_type_specifier "long" (long "long")) (pointer_declarator "*plVar4" (* "*") (identifier "plVar4")) (; ";")) (declaration "undefined8 uVar5;" (type_identifier "undefined8") (identifier "uVar5") (; ";")) (declaration "int iVar6;" (primitive_type "int") (identifier "iVar6") (; ";")) (declaration "long *plVar7;" (sized_type_specifier "long" (long "long")) (pointer_declarator "*plVar7" (* "*") (identifier "plVar7")) (; ";")) (declaration "long lVar8;" (sized_type_specifier "long" (long "long")) (identifier "lVar8") (; ";")) (declaration "long lVar9;" (sized_type_specifier "long" (long "long")) (identifier "lVar9") (; ";")) (declaration "size_t sVar10;" (primitive_type "size_t") (identifier "sVar10") (; ";")) (declaration "ulong __n;" (type_identifier "ulong") (identifier "__n") (; ";")) (declaration "long *plVar11;" (sized_type_specifier "long" (long "long")) (pointer_declarator "*plVar11" (* "*") (identifier "plVar11")) (; ";")) (declaration "undefined8 *puVar12;" (type_identifier "undefined8") (pointer_declarator "*puVar12" (* "*") (identifier "puVar12")) (; ";")) (declaration "byte *pbVar13;" (type_identifier "byte") (pointer_declarator "*pbVar13" (* "*") (identifier "pbVar13")) (; ";")) (declaration "void *pvVar14;" (primitive_type "void") (pointer_declarator "*pvVar14" (* "*") (identifier "pvVar14")) (; ";")) (declaration "int iVar15;" (primitive_type "int") (identifier "iVar15") (; ";")) (declaration "undefined1 *puVar16;" (type_identifier "undefined1") (pointer_declarator "*puVar16" (* "*") (identifier "puVar16")) (; ";")) (declaration "long *plVar17;" (sized_type_specifier "long" (long "long")) (pointer_declarator "*plVar17" (* "*") (identifier "plVar17")) (; ";")) (declaration "int iVar18;" (primitive_type "int") (identifier "iVar18") (; ";")) (declaration "undefined1 *__dest;" (type_identifier "undefined1") (pointer_declarator "*__dest" (* "*") (identifier "__dest")) (; ";")) (declaration "int *piVar19;" (primitive_type "int") (pointer_declarator "*piVar19" (* "*") (identifier "piVar19")) (; ";")) (declaration "int local_50;" (primitive_type "int") (identifier "local_50") (; ";")) (expression_statement "lVar2 = *param_1;" (assignment_expression "lVar2 = *param_1" (identifier "lVar2") (= "=") (pointer_expression "*param_1" (* "*") (identifier "param_1"))) (; ";")) (expression_statement "lVar3 = param_1[0x27];" (assignment_expression "lVar3 = param_1[0x27]" (identifier "lVar3") (= "=") (subscript_expression "param_1[0x27]" (identifier "param_1") ([ "[") (number_literal "0x27") (] "]"))) (; ";")) (if_statement "if ((lVar3 == 0) || (*(char *)((long)param_1 + 0x10e) == '\x01')) goto joined_r0x0014bec0;" (if "if") (parenthesized_expression "((lVar3 == 0) || (*(char *)((long)param_1 + 0x10e) == '\x01'))" (( "(") (binary_expression "(lVar3 == 0) || (*(char *)((long)param_1 + 0x10e) == '\x01')" (parenthesized_expression "(lVar3 == 0)" (( "(") (binary_expression "lVar3 == 0" (identifier "lVar3") (== "==") (number_literal "0")) () ")")) (|| "||") (parenthesized_expression "(*(char *)((long)param_1 + 0x10e) == '\x01')" (( "(") (binary_expression "*(char *)((long)param_1 + 0x10e) == '\x01'" (pointer_expression "*(char *)((long)param_1 + 0x10e)" (* "*") (cast_expression "(char *)((long)param_1 + 0x10e)" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)param_1 + 0x10e)" (( "(") (binary_expression "(long)param_1 + 0x10e" (cast_expression "(long)param_1" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "param_1")) (+ "+") (number_literal "0x10e")) () ")")))) (== "==") (char_literal "'\x01'" (' "'") (escape_sequence "\x01") (' "'"))) () ")"))) () ")")) (goto_statement "goto joined_r0x0014bec0;" (goto "goto") (statement_identifier "joined_r0x0014bec0") (; ";"))) (if_statement "if (param_2 != (int *)0x0) {\n    local_50 = *param_2;\n    if (param_4 == (int *)0x0) {\n      plVar7 = (long *)FUN_0011b8f0(lVar2,(long)(local_50 * 0x10 + 0x41 + *(int *)(param_3 + 1)));\n      if (plVar7 != (long *)0x0) {\n        lVar8 = ((long)local_50 + 4) * 0x10;\n        goto LAB_0014bd94;\n      }\n    }\n    else {\n      iVar6 = *param_4;\n      if (iVar6 == local_50) {\n        iVar15 = iVar6 * 0x10 + 0x41 + *(int *)(param_3 + 1);\n        if (0 < iVar6) goto LAB_0014bd06;\n        goto LAB_0014bd6e;\n      }\n      FUN_0014a9d0(param_1,\n                   "number of columns in foreign key does not match the number of columns in the referenced table"\n                  );\n    }\n    goto LAB_0014bec2;\n  }" (if "if") (parenthesized_expression "(param_2 != (int *)0x0)" (( "(") (binary_expression "param_2 != (int *)0x0" (identifier "param_2") (!= "!=") (cast_expression "(int *)0x0" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n    local_50 = *param_2;\n    if (param_4 == (int *)0x0) {\n      plVar7 = (long *)FUN_0011b8f0(lVar2,(long)(local_50 * 0x10 + 0x41 + *(int *)(param_3 + 1)));\n      if (plVar7 != (long *)0x0) {\n        lVar8 = ((long)local_50 + 4) * 0x10;\n        goto LAB_0014bd94;\n      }\n    }\n    else {\n      iVar6 = *param_4;\n      if (iVar6 == local_50) {\n        iVar15 = iVar6 * 0x10 + 0x41 + *(int *)(param_3 + 1);\n        if (0 < iVar6) goto LAB_0014bd06;\n        goto LAB_0014bd6e;\n      }\n      FUN_0014a9d0(param_1,\n                   "number of columns in foreign key does not match the number of columns in the referenced table"\n                  );\n    }\n    goto LAB_0014bec2;\n  }" ({ "{") (expression_statement "local_50 = *param_2;" (assignment_expression "local_50 = *param_2" (identifier "local_50") (= "=") (pointer_expression "*param_2" (* "*") (identifier "param_2"))) (; ";")) (if_statement "if (param_4 == (int *)0x0) {\n      plVar7 = (long *)FUN_0011b8f0(lVar2,(long)(local_50 * 0x10 + 0x41 + *(int *)(param_3 + 1)));\n      if (plVar7 != (long *)0x0) {\n        lVar8 = ((long)local_50 + 4) * 0x10;\n        goto LAB_0014bd94;\n      }\n    }\n    else {\n      iVar6 = *param_4;\n      if (iVar6 == local_50) {\n        iVar15 = iVar6 * 0x10 + 0x41 + *(int *)(param_3 + 1);\n        if (0 < iVar6) goto LAB_0014bd06;\n        goto LAB_0014bd6e;\n      }\n      FUN_0014a9d0(param_1,\n                   "number of columns in foreign key does not match the number of columns in the referenced table"\n                  );\n    }" (if "if") (parenthesized_expression "(param_4 == (int *)0x0)" (( "(") (binary_expression "param_4 == (int *)0x0" (identifier "param_4") (== "==") (cast_expression "(int *)0x0" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n      plVar7 = (long *)FUN_0011b8f0(lVar2,(long)(local_50 * 0x10 + 0x41 + *(int *)(param_3 + 1)));\n      if (plVar7 != (long *)0x0) {\n        lVar8 = ((long)local_50 + 4) * 0x10;\n        goto LAB_0014bd94;\n      }\n    }" ({ "{") (expression_statement "plVar7 = (long *)FUN_0011b8f0(lVar2,(long)(local_50 * 0x10 + 0x41 + *(int *)(param_3 + 1)));" (assignment_expression "plVar7 = (long *)FUN_0011b8f0(lVar2,(long)(local_50 * 0x10 + 0x41 + *(int *)(param_3 + 1)))" (identifier "plVar7") (= "=") (cast_expression "(long *)FUN_0011b8f0(lVar2,(long)(local_50 * 0x10 + 0x41 + *(int *)(param_3 + 1)))" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "FUN_0011b8f0(lVar2,(long)(local_50 * 0x10 + 0x41 + *(int *)(param_3 + 1)))" (identifier "FUN_0011b8f0") (argument_list "(lVar2,(long)(local_50 * 0x10 + 0x41 + *(int *)(param_3 + 1)))" (( "(") (identifier "lVar2") (, ",") (cast_expression "(long)(local_50 * 0x10 + 0x41 + *(int *)(param_3 + 1))" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (parenthesized_expression "(local_50 * 0x10 + 0x41 + *(int *)(param_3 + 1))" (( "(") (binary_expression "local_50 * 0x10 + 0x41 + *(int *)(param_3 + 1)" (binary_expression "local_50 * 0x10 + 0x41" (binary_expression "local_50 * 0x10" (identifier "local_50") (* "*") (number_literal "0x10")) (+ "+") (number_literal "0x41")) (+ "+") (pointer_expression "*(int *)(param_3 + 1)" (* "*") (cast_expression "(int *)(param_3 + 1)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_3 + 1)" (( "(") (binary_expression "param_3 + 1" (identifier "param_3") (+ "+") (number_literal "1")) () ")"))))) () ")"))) () ")"))))) (; ";")) (if_statement "if (plVar7 != (long *)0x0) {\n        lVar8 = ((long)local_50 + 4) * 0x10;\n        goto LAB_0014bd94;\n      }" (if "if") (parenthesized_expression "(plVar7 != (long *)0x0)" (( "(") (binary_expression "plVar7 != (long *)0x0" (identifier "plVar7") (!= "!=") (cast_expression "(long *)0x0" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n        lVar8 = ((long)local_50 + 4) * 0x10;\n        goto LAB_0014bd94;\n      }" ({ "{") (expression_statement "lVar8 = ((long)local_50 + 4) * 0x10;" (assignment_expression "lVar8 = ((long)local_50 + 4) * 0x10" (identifier "lVar8") (= "=") (binary_expression "((long)local_50 + 4) * 0x10" (parenthesized_expression "((long)local_50 + 4)" (( "(") (binary_expression "(long)local_50 + 4" (cast_expression "(long)local_50" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "local_50")) (+ "+") (number_literal "4")) () ")")) (* "*") (number_literal "0x10"))) (; ";")) (goto_statement "goto LAB_0014bd94;" (goto "goto") (statement_identifier "LAB_0014bd94") (; ";")) (} "}"))) (} "}")) (else_clause "else {\n      iVar6 = *param_4;\n      if (iVar6 == local_50) {\n        iVar15 = iVar6 * 0x10 + 0x41 + *(int *)(param_3 + 1);\n        if (0 < iVar6) goto LAB_0014bd06;\n        goto LAB_0014bd6e;\n      }\n      FUN_0014a9d0(param_1,\n                   "number of columns in foreign key does not match the number of columns in the referenced table"\n                  );\n    }" (else "else") (compound_statement "{\n      iVar6 = *param_4;\n      if (iVar6 == local_50) {\n        iVar15 = iVar6 * 0x10 + 0x41 + *(int *)(param_3 + 1);\n        if (0 < iVar6) goto LAB_0014bd06;\n        goto LAB_0014bd6e;\n      }\n      FUN_0014a9d0(param_1,\n                   "number of columns in foreign key does not match the number of columns in the referenced table"\n                  );\n    }" ({ "{") (expression_statement "iVar6 = *param_4;" (assignment_expression "iVar6 = *param_4" (identifier "iVar6") (= "=") (pointer_expression "*param_4" (* "*") (identifier "param_4"))) (; ";")) (if_statement "if (iVar6 == local_50) {\n        iVar15 = iVar6 * 0x10 + 0x41 + *(int *)(param_3 + 1);\n        if (0 < iVar6) goto LAB_0014bd06;\n        goto LAB_0014bd6e;\n      }" (if "if") (parenthesized_expression "(iVar6 == local_50)" (( "(") (binary_expression "iVar6 == local_50" (identifier "iVar6") (== "==") (identifier "local_50")) () ")")) (compound_statement "{\n        iVar15 = iVar6 * 0x10 + 0x41 + *(int *)(param_3 + 1);\n        if (0 < iVar6) goto LAB_0014bd06;\n        goto LAB_0014bd6e;\n      }" ({ "{") (expression_statement "iVar15 = iVar6 * 0x10 + 0x41 + *(int *)(param_3 + 1);" (assignment_expression "iVar15 = iVar6 * 0x10 + 0x41 + *(int *)(param_3 + 1)" (identifier "iVar15") (= "=") (binary_expression "iVar6 * 0x10 + 0x41 + *(int *)(param_3 + 1)" (binary_expression "iVar6 * 0x10 + 0x41" (binary_expression "iVar6 * 0x10" (identifier "iVar6") (* "*") (number_literal "0x10")) (+ "+") (number_literal "0x41")) (+ "+") (pointer_expression "*(int *)(param_3 + 1)" (* "*") (cast_expression "(int *)(param_3 + 1)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_3 + 1)" (( "(") (binary_expression "param_3 + 1" (identifier "param_3") (+ "+") (number_literal "1")) () ")")))))) (; ";")) (if_statement "if (0 < iVar6) goto LAB_0014bd06;" (if "if") (parenthesized_expression "(0 < iVar6)" (( "(") (binary_expression "0 < iVar6" (number_literal "0") (< "<") (identifier "iVar6")) () ")")) (goto_statement "goto LAB_0014bd06;" (goto "goto") (statement_identifier "LAB_0014bd06") (; ";"))) (goto_statement "goto LAB_0014bd6e;" (goto "goto") (statement_identifier "LAB_0014bd6e") (; ";")) (} "}"))) (expression_statement "FUN_0014a9d0(param_1,\n                   "number of columns in foreign key does not match the number of columns in the referenced table"\n                  );" (call_expression "FUN_0014a9d0(param_1,\n                   "number of columns in foreign key does not match the number of columns in the referenced table"\n                  )" (identifier "FUN_0014a9d0") (argument_list "(param_1,\n                   "number of columns in foreign key does not match the number of columns in the referenced table"\n                  )" (( "(") (identifier "param_1") (, ",") (string_literal ""number of columns in foreign key does not match the number of columns in the referenced table"" (" """) (string_content "number of columns in foreign key does not match the number of columns in the referenced table") (" """)) () ")"))) (; ";")) (} "}")))) (goto_statement "goto LAB_0014bec2;" (goto "goto") (statement_identifier "LAB_0014bec2") (; ";")) (} "}"))) (expression_statement "iVar6 = *(short *)(lVar3 + 0x46) + -1;" (assignment_expression "iVar6 = *(short *)(lVar3 + 0x46) + -1" (identifier "iVar6") (= "=") (binary_expression "*(short *)(lVar3 + 0x46) + -1" (pointer_expression "*(short *)(lVar3 + 0x46)" (* "*") (cast_expression "(short *)(lVar3 + 0x46)" (( "(") (type_descriptor "short *" (sized_type_specifier "short" (short "short")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar3 + 0x46)" (( "(") (binary_expression "lVar3 + 0x46" (identifier "lVar3") (+ "+") (number_literal "0x46")) () ")")))) (+ "+") (number_literal "-1"))) (; ";")) (if_statement "if (-1 < iVar6) {\n    if (param_4 == (int *)0x0) {\n      plVar7 = (long *)FUN_0011b8f0(lVar2,(long)(*(int *)(param_3 + 1) + 0x51));\n      if (plVar7 == (long *)0x0) {\n        return;\n      }\n      lVar8 = 0x50;\n      local_50 = 1;\n    }\n    else {\n      if (*param_4 != 1) {\n        FUN_0014a9d0(param_1,"foreign key on %s should reference only one column of table %T",\n                     *(undefined8 *)((long)iVar6 * 0x20 + *(long *)(lVar3 + 8)),param_3);\n        goto LAB_0014bed9;\n      }\n      local_50 = 1;\n      iVar15 = *(int *)(param_3 + 1) + 0x51;\n      iVar6 = 1;\nLAB_0014bd06:\n      iVar18 = 0;\n      piVar19 = param_4 + 4;\n      do {\n        while (*(char **)piVar19 != (char *)0x0) {\n          sVar10 = strlen(*(char **)piVar19);\n          iVar18 = iVar18 + 1;\n          piVar19 = piVar19 + 8;\n          iVar15 = iVar15 + ((uint)sVar10 & 0x3fffffff) + 1;\n          if (iVar6 <= iVar18) goto LAB_0014bd6e;\n        }\n        iVar18 = iVar18 + 1;\n        piVar19 = piVar19 + 8;\n        iVar15 = iVar15 + 1;\n      } while (iVar18 < iVar6);\nLAB_0014bd6e:\n      plVar7 = (long *)FUN_0011b8f0(lVar2,(long)iVar15);\n      if (plVar7 == (long *)0x0) goto joined_r0x0014bec0;\n      lVar8 = ((long)local_50 + 4) * 0x10;\n    }\nLAB_0014bd94:\n    *plVar7 = lVar3;\n    lVar9 = *(long *)(lVar3 + 0x20);\n    pvVar14 = (void *)((long)plVar7 + lVar8);\n    plVar7[2] = (long)pvVar14;\n    plVar7[1] = lVar9;\n    if ((1 < *(byte *)((long)param_1 + 0x10e)) &&\n       (puVar12 = (undefined8 *)FUN_0011b8f0(*param_1,0x20), puVar12 != (undefined8 *)0x0)) {\n      *puVar12 = pvVar14;\n      uVar5 = param_3[1];\n      puVar12[1] = *param_3;\n      puVar12[2] = uVar5;\n      puVar12[3] = param_1[0x32];\n      param_1[0x32] = (long)puVar12;\n    }\n    memcpy(pvVar14,(void *)*param_3,(ulong)*(uint *)(param_3 + 1));\n    *(undefined1 *)((long)pvVar14 + (ulong)*(uint *)(param_3 + 1)) = 0;\n    FUN_0010f690(pvVar14);\n    iVar6 = *(int *)(param_3 + 1);\n    *(int *)(plVar7 + 5) = local_50;\n    if (param_2 == (int *)0x0) {\n      *(int *)(plVar7 + 8) = *(short *)(lVar3 + 0x46) + -1;\n      if ((param_4 != (int *)0x0) && (0 < local_50)) goto LAB_0014bf4f;\n    }\n    else {\n      lVar8 = 0x40;\n      if (0 < local_50) {\n        iVar15 = 0;\nLAB_0014be20:\n        pbVar13 = *(byte **)((long)param_2 + lVar8 * 2 + -0x70);\n        if (0 < *(short *)(lVar3 + 0x46)) {\n          puVar12 = *(undefined8 **)(lVar3 + 8);\n          iVar18 = 0;\n          do {\n            bVar1 = *(byte *)*puVar12;\n            if ((&DAT_001f5800)[bVar1] == (&DAT_001f5800)[*pbVar13]) {\n              if (bVar1 == 0) goto LAB_0014bf08;\n              lVar9 = 1;\n              while (bVar1 = ((byte *)*puVar12)[lVar9],\n                    (&DAT_001f5800)[bVar1] == (&DAT_001f5800)[pbVar13[lVar9]]) {\n                lVar9 = lVar9 + 1;\n                if (bVar1 == 0) goto LAB_0014bf08;\n              }\n            }\n            iVar18 = iVar18 + 1;\n            puVar12 = puVar12 + 4;\n            if (iVar18 == *(short *)(lVar3 + 0x46)) break;\n          } while( true );\n        }\n        goto LAB_0014be9c;\n      }\n    }\n    goto LAB_0014c064;\n  }" (if "if") (parenthesized_expression "(-1 < iVar6)" (( "(") (binary_expression "-1 < iVar6" (number_literal "-1") (< "<") (identifier "iVar6")) () ")")) (compound_statement "{\n    if (param_4 == (int *)0x0) {\n      plVar7 = (long *)FUN_0011b8f0(lVar2,(long)(*(int *)(param_3 + 1) + 0x51));\n      if (plVar7 == (long *)0x0) {\n        return;\n      }\n      lVar8 = 0x50;\n      local_50 = 1;\n    }\n    else {\n      if (*param_4 != 1) {\n        FUN_0014a9d0(param_1,"foreign key on %s should reference only one column of table %T",\n                     *(undefined8 *)((long)iVar6 * 0x20 + *(long *)(lVar3 + 8)),param_3);\n        goto LAB_0014bed9;\n      }\n      local_50 = 1;\n      iVar15 = *(int *)(param_3 + 1) + 0x51;\n      iVar6 = 1;\nLAB_0014bd06:\n      iVar18 = 0;\n      piVar19 = param_4 + 4;\n      do {\n        while (*(char **)piVar19 != (char *)0x0) {\n          sVar10 = strlen(*(char **)piVar19);\n          iVar18 = iVar18 + 1;\n          piVar19 = piVar19 + 8;\n          iVar15 = iVar15 + ((uint)sVar10 & 0x3fffffff) + 1;\n          if (iVar6 <= iVar18) goto LAB_0014bd6e;\n        }\n        iVar18 = iVar18 + 1;\n        piVar19 = piVar19 + 8;\n        iVar15 = iVar15 + 1;\n      } while (iVar18 < iVar6);\nLAB_0014bd6e:\n      plVar7 = (long *)FUN_0011b8f0(lVar2,(long)iVar15);\n      if (plVar7 == (long *)0x0) goto joined_r0x0014bec0;\n      lVar8 = ((long)local_50 + 4) * 0x10;\n    }\nLAB_0014bd94:\n    *plVar7 = lVar3;\n    lVar9 = *(long *)(lVar3 + 0x20);\n    pvVar14 = (void *)((long)plVar7 + lVar8);\n    plVar7[2] = (long)pvVar14;\n    plVar7[1] = lVar9;\n    if ((1 < *(byte *)((long)param_1 + 0x10e)) &&\n       (puVar12 = (undefined8 *)FUN_0011b8f0(*param_1,0x20), puVar12 != (undefined8 *)0x0)) {\n      *puVar12 = pvVar14;\n      uVar5 = param_3[1];\n      puVar12[1] = *param_3;\n      puVar12[2] = uVar5;\n      puVar12[3] = param_1[0x32];\n      param_1[0x32] = (long)puVar12;\n    }\n    memcpy(pvVar14,(void *)*param_3,(ulong)*(uint *)(param_3 + 1));\n    *(undefined1 *)((long)pvVar14 + (ulong)*(uint *)(param_3 + 1)) = 0;\n    FUN_0010f690(pvVar14);\n    iVar6 = *(int *)(param_3 + 1);\n    *(int *)(plVar7 + 5) = local_50;\n    if (param_2 == (int *)0x0) {\n      *(int *)(plVar7 + 8) = *(short *)(lVar3 + 0x46) + -1;\n      if ((param_4 != (int *)0x0) && (0 < local_50)) goto LAB_0014bf4f;\n    }\n    else {\n      lVar8 = 0x40;\n      if (0 < local_50) {\n        iVar15 = 0;\nLAB_0014be20:\n        pbVar13 = *(byte **)((long)param_2 + lVar8 * 2 + -0x70);\n        if (0 < *(short *)(lVar3 + 0x46)) {\n          puVar12 = *(undefined8 **)(lVar3 + 8);\n          iVar18 = 0;\n          do {\n            bVar1 = *(byte *)*puVar12;\n            if ((&DAT_001f5800)[bVar1] == (&DAT_001f5800)[*pbVar13]) {\n              if (bVar1 == 0) goto LAB_0014bf08;\n              lVar9 = 1;\n              while (bVar1 = ((byte *)*puVar12)[lVar9],\n                    (&DAT_001f5800)[bVar1] == (&DAT_001f5800)[pbVar13[lVar9]]) {\n                lVar9 = lVar9 + 1;\n                if (bVar1 == 0) goto LAB_0014bf08;\n              }\n            }\n            iVar18 = iVar18 + 1;\n            puVar12 = puVar12 + 4;\n            if (iVar18 == *(short *)(lVar3 + 0x46)) break;\n          } while( true );\n        }\n        goto LAB_0014be9c;\n      }\n    }\n    goto LAB_0014c064;\n  }" ({ "{") (if_statement "if (param_4 == (int *)0x0) {\n      plVar7 = (long *)FUN_0011b8f0(lVar2,(long)(*(int *)(param_3 + 1) + 0x51));\n      if (plVar7 == (long *)0x0) {\n        return;\n      }\n      lVar8 = 0x50;\n      local_50 = 1;\n    }\n    else {\n      if (*param_4 != 1) {\n        FUN_0014a9d0(param_1,"foreign key on %s should reference only one column of table %T",\n                     *(undefined8 *)((long)iVar6 * 0x20 + *(long *)(lVar3 + 8)),param_3);\n        goto LAB_0014bed9;\n      }\n      local_50 = 1;\n      iVar15 = *(int *)(param_3 + 1) + 0x51;\n      iVar6 = 1;\nLAB_0014bd06:\n      iVar18 = 0;\n      piVar19 = param_4 + 4;\n      do {\n        while (*(char **)piVar19 != (char *)0x0) {\n          sVar10 = strlen(*(char **)piVar19);\n          iVar18 = iVar18 + 1;\n          piVar19 = piVar19 + 8;\n          iVar15 = iVar15 + ((uint)sVar10 & 0x3fffffff) + 1;\n          if (iVar6 <= iVar18) goto LAB_0014bd6e;\n        }\n        iVar18 = iVar18 + 1;\n        piVar19 = piVar19 + 8;\n        iVar15 = iVar15 + 1;\n      } while (iVar18 < iVar6);\nLAB_0014bd6e:\n      plVar7 = (long *)FUN_0011b8f0(lVar2,(long)iVar15);\n      if (plVar7 == (long *)0x0) goto joined_r0x0014bec0;\n      lVar8 = ((long)local_50 + 4) * 0x10;\n    }" (if "if") (parenthesized_expression "(param_4 == (int *)0x0)" (( "(") (binary_expression "param_4 == (int *)0x0" (identifier "param_4") (== "==") (cast_expression "(int *)0x0" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n      plVar7 = (long *)FUN_0011b8f0(lVar2,(long)(*(int *)(param_3 + 1) + 0x51));\n      if (plVar7 == (long *)0x0) {\n        return;\n      }\n      lVar8 = 0x50;\n      local_50 = 1;\n    }" ({ "{") (expression_statement "plVar7 = (long *)FUN_0011b8f0(lVar2,(long)(*(int *)(param_3 + 1) + 0x51));" (assignment_expression "plVar7 = (long *)FUN_0011b8f0(lVar2,(long)(*(int *)(param_3 + 1) + 0x51))" (identifier "plVar7") (= "=") (cast_expression "(long *)FUN_0011b8f0(lVar2,(long)(*(int *)(param_3 + 1) + 0x51))" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "FUN_0011b8f0(lVar2,(long)(*(int *)(param_3 + 1) + 0x51))" (identifier "FUN_0011b8f0") (argument_list "(lVar2,(long)(*(int *)(param_3 + 1) + 0x51))" (( "(") (identifier "lVar2") (, ",") (cast_expression "(long)(*(int *)(param_3 + 1) + 0x51)" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (parenthesized_expression "(*(int *)(param_3 + 1) + 0x51)" (( "(") (binary_expression "*(int *)(param_3 + 1) + 0x51" (pointer_expression "*(int *)(param_3 + 1)" (* "*") (cast_expression "(int *)(param_3 + 1)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_3 + 1)" (( "(") (binary_expression "param_3 + 1" (identifier "param_3") (+ "+") (number_literal "1")) () ")")))) (+ "+") (number_literal "0x51")) () ")"))) () ")"))))) (; ";")) (if_statement "if (plVar7 == (long *)0x0) {\n        return;\n      }" (if "if") (parenthesized_expression "(plVar7 == (long *)0x0)" (( "(") (binary_expression "plVar7 == (long *)0x0" (identifier "plVar7") (== "==") (cast_expression "(long *)0x0" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n        return;\n      }" ({ "{") (return_statement "return;" (return "return") (; ";")) (} "}"))) (expression_statement "lVar8 = 0x50;" (assignment_expression "lVar8 = 0x50" (identifier "lVar8") (= "=") (number_literal "0x50")) (; ";")) (expression_statement "local_50 = 1;" (assignment_expression "local_50 = 1" (identifier "local_50") (= "=") (number_literal "1")) (; ";")) (} "}")) (else_clause "else {\n      if (*param_4 != 1) {\n        FUN_0014a9d0(param_1,"foreign key on %s should reference only one column of table %T",\n                     *(undefined8 *)((long)iVar6 * 0x20 + *(long *)(lVar3 + 8)),param_3);\n        goto LAB_0014bed9;\n      }\n      local_50 = 1;\n      iVar15 = *(int *)(param_3 + 1) + 0x51;\n      iVar6 = 1;\nLAB_0014bd06:\n      iVar18 = 0;\n      piVar19 = param_4 + 4;\n      do {\n        while (*(char **)piVar19 != (char *)0x0) {\n          sVar10 = strlen(*(char **)piVar19);\n          iVar18 = iVar18 + 1;\n          piVar19 = piVar19 + 8;\n          iVar15 = iVar15 + ((uint)sVar10 & 0x3fffffff) + 1;\n          if (iVar6 <= iVar18) goto LAB_0014bd6e;\n        }\n        iVar18 = iVar18 + 1;\n        piVar19 = piVar19 + 8;\n        iVar15 = iVar15 + 1;\n      } while (iVar18 < iVar6);\nLAB_0014bd6e:\n      plVar7 = (long *)FUN_0011b8f0(lVar2,(long)iVar15);\n      if (plVar7 == (long *)0x0) goto joined_r0x0014bec0;\n      lVar8 = ((long)local_50 + 4) * 0x10;\n    }" (else "else") (compound_statement "{\n      if (*param_4 != 1) {\n        FUN_0014a9d0(param_1,"foreign key on %s should reference only one column of table %T",\n                     *(undefined8 *)((long)iVar6 * 0x20 + *(long *)(lVar3 + 8)),param_3);\n        goto LAB_0014bed9;\n      }\n      local_50 = 1;\n      iVar15 = *(int *)(param_3 + 1) + 0x51;\n      iVar6 = 1;\nLAB_0014bd06:\n      iVar18 = 0;\n      piVar19 = param_4 + 4;\n      do {\n        while (*(char **)piVar19 != (char *)0x0) {\n          sVar10 = strlen(*(char **)piVar19);\n          iVar18 = iVar18 + 1;\n          piVar19 = piVar19 + 8;\n          iVar15 = iVar15 + ((uint)sVar10 & 0x3fffffff) + 1;\n          if (iVar6 <= iVar18) goto LAB_0014bd6e;\n        }\n        iVar18 = iVar18 + 1;\n        piVar19 = piVar19 + 8;\n        iVar15 = iVar15 + 1;\n      } while (iVar18 < iVar6);\nLAB_0014bd6e:\n      plVar7 = (long *)FUN_0011b8f0(lVar2,(long)iVar15);\n      if (plVar7 == (long *)0x0) goto joined_r0x0014bec0;\n      lVar8 = ((long)local_50 + 4) * 0x10;\n    }" ({ "{") (if_statement "if (*param_4 != 1) {\n        FUN_0014a9d0(param_1,"foreign key on %s should reference only one column of table %T",\n                     *(undefined8 *)((long)iVar6 * 0x20 + *(long *)(lVar3 + 8)),param_3);\n        goto LAB_0014bed9;\n      }" (if "if") (parenthesized_expression "(*param_4 != 1)" (( "(") (binary_expression "*param_4 != 1" (pointer_expression "*param_4" (* "*") (identifier "param_4")) (!= "!=") (number_literal "1")) () ")")) (compound_statement "{\n        FUN_0014a9d0(param_1,"foreign key on %s should reference only one column of table %T",\n                     *(undefined8 *)((long)iVar6 * 0x20 + *(long *)(lVar3 + 8)),param_3);\n        goto LAB_0014bed9;\n      }" ({ "{") (expression_statement "FUN_0014a9d0(param_1,"foreign key on %s should reference only one column of table %T",\n                     *(undefined8 *)((long)iVar6 * 0x20 + *(long *)(lVar3 + 8)),param_3);" (call_expression "FUN_0014a9d0(param_1,"foreign key on %s should reference only one column of table %T",\n                     *(undefined8 *)((long)iVar6 * 0x20 + *(long *)(lVar3 + 8)),param_3)" (identifier "FUN_0014a9d0") (argument_list "(param_1,"foreign key on %s should reference only one column of table %T",\n                     *(undefined8 *)((long)iVar6 * 0x20 + *(long *)(lVar3 + 8)),param_3)" (( "(") (identifier "param_1") (, ",") (string_literal ""foreign key on %s should reference only one column of table %T"" (" """) (string_content "foreign key on %s should reference only one column of table %T") (" """)) (, ",") (pointer_expression "*(undefined8 *)((long)iVar6 * 0x20 + *(long *)(lVar3 + 8))" (* "*") (cast_expression "(undefined8 *)((long)iVar6 * 0x20 + *(long *)(lVar3 + 8))" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)iVar6 * 0x20 + *(long *)(lVar3 + 8))" (( "(") (binary_expression "(long)iVar6 * 0x20 + *(long *)(lVar3 + 8)" (binary_expression "(long)iVar6 * 0x20" (cast_expression "(long)iVar6" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "iVar6")) (* "*") (number_literal "0x20")) (+ "+") (pointer_expression "*(long *)(lVar3 + 8)" (* "*") (cast_expression "(long *)(lVar3 + 8)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar3 + 8)" (( "(") (binary_expression "lVar3 + 8" (identifier "lVar3") (+ "+") (number_literal "8")) () ")"))))) () ")")))) (, ",") (identifier "param_3") () ")"))) (; ";")) (goto_statement "goto LAB_0014bed9;" (goto "goto") (statement_identifier "LAB_0014bed9") (; ";")) (} "}"))) (expression_statement "local_50 = 1;" (assignment_expression "local_50 = 1" (identifier "local_50") (= "=") (number_literal "1")) (; ";")) (expression_statement "iVar15 = *(int *)(param_3 + 1) + 0x51;" (assignment_expression "iVar15 = *(int *)(param_3 + 1) + 0x51" (identifier "iVar15") (= "=") (binary_expression "*(int *)(param_3 + 1) + 0x51" (pointer_expression "*(int *)(param_3 + 1)" (* "*") (cast_expression "(int *)(param_3 + 1)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_3 + 1)" (( "(") (binary_expression "param_3 + 1" (identifier "param_3") (+ "+") (number_literal "1")) () ")")))) (+ "+") (number_literal "0x51"))) (; ";")) (expression_statement "iVar6 = 1;" (assignment_expression "iVar6 = 1" (identifier "iVar6") (= "=") (number_literal "1")) (; ";")) (labeled_statement "LAB_0014bd06:\n      iVar18 = 0;" (statement_identifier "LAB_0014bd06") (: ":") (expression_statement "iVar18 = 0;" (assignment_expression "iVar18 = 0" (identifier "iVar18") (= "=") (number_literal "0")) (; ";"))) (expression_statement "piVar19 = param_4 + 4;" (assignment_expression "piVar19 = param_4 + 4" (identifier "piVar19") (= "=") (binary_expression "param_4 + 4" (identifier "param_4") (+ "+") (number_literal "4"))) (; ";")) (do_statement "do {\n        while (*(char **)piVar19 != (char *)0x0) {\n          sVar10 = strlen(*(char **)piVar19);\n          iVar18 = iVar18 + 1;\n          piVar19 = piVar19 + 8;\n          iVar15 = iVar15 + ((uint)sVar10 & 0x3fffffff) + 1;\n          if (iVar6 <= iVar18) goto LAB_0014bd6e;\n        }\n        iVar18 = iVar18 + 1;\n        piVar19 = piVar19 + 8;\n        iVar15 = iVar15 + 1;\n      } while (iVar18 < iVar6);" (do "do") (compound_statement "{\n        while (*(char **)piVar19 != (char *)0x0) {\n          sVar10 = strlen(*(char **)piVar19);\n          iVar18 = iVar18 + 1;\n          piVar19 = piVar19 + 8;\n          iVar15 = iVar15 + ((uint)sVar10 & 0x3fffffff) + 1;\n          if (iVar6 <= iVar18) goto LAB_0014bd6e;\n        }\n        iVar18 = iVar18 + 1;\n        piVar19 = piVar19 + 8;\n        iVar15 = iVar15 + 1;\n      }" ({ "{") (while_statement "while (*(char **)piVar19 != (char *)0x0) {\n          sVar10 = strlen(*(char **)piVar19);\n          iVar18 = iVar18 + 1;\n          piVar19 = piVar19 + 8;\n          iVar15 = iVar15 + ((uint)sVar10 & 0x3fffffff) + 1;\n          if (iVar6 <= iVar18) goto LAB_0014bd6e;\n        }" (while "while") (parenthesized_expression "(*(char **)piVar19 != (char *)0x0)" (( "(") (binary_expression "*(char **)piVar19 != (char *)0x0" (pointer_expression "*(char **)piVar19" (* "*") (cast_expression "(char **)piVar19" (( "(") (type_descriptor "char **" (primitive_type "char") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (identifier "piVar19"))) (!= "!=") (cast_expression "(char *)0x0" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n          sVar10 = strlen(*(char **)piVar19);\n          iVar18 = iVar18 + 1;\n          piVar19 = piVar19 + 8;\n          iVar15 = iVar15 + ((uint)sVar10 & 0x3fffffff) + 1;\n          if (iVar6 <= iVar18) goto LAB_0014bd6e;\n        }" ({ "{") (expression_statement "sVar10 = strlen(*(char **)piVar19);" (assignment_expression "sVar10 = strlen(*(char **)piVar19)" (identifier "sVar10") (= "=") (call_expression "strlen(*(char **)piVar19)" (identifier "strlen") (argument_list "(*(char **)piVar19)" (( "(") (pointer_expression "*(char **)piVar19" (* "*") (cast_expression "(char **)piVar19" (( "(") (type_descriptor "char **" (primitive_type "char") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (identifier "piVar19"))) () ")")))) (; ";")) (expression_statement "iVar18 = iVar18 + 1;" (assignment_expression "iVar18 = iVar18 + 1" (identifier "iVar18") (= "=") (binary_expression "iVar18 + 1" (identifier "iVar18") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "piVar19 = piVar19 + 8;" (assignment_expression "piVar19 = piVar19 + 8" (identifier "piVar19") (= "=") (binary_expression "piVar19 + 8" (identifier "piVar19") (+ "+") (number_literal "8"))) (; ";")) (expression_statement "iVar15 = iVar15 + ((uint)sVar10 & 0x3fffffff) + 1;" (assignment_expression "iVar15 = iVar15 + ((uint)sVar10 & 0x3fffffff) + 1" (identifier "iVar15") (= "=") (binary_expression "iVar15 + ((uint)sVar10 & 0x3fffffff) + 1" (binary_expression "iVar15 + ((uint)sVar10 & 0x3fffffff)" (identifier "iVar15") (+ "+") (parenthesized_expression "((uint)sVar10 & 0x3fffffff)" (( "(") (binary_expression "(uint)sVar10 & 0x3fffffff" (cast_expression "(uint)sVar10" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "sVar10")) (& "&") (number_literal "0x3fffffff")) () ")"))) (+ "+") (number_literal "1"))) (; ";")) (if_statement "if (iVar6 <= iVar18) goto LAB_0014bd6e;" (if "if") (parenthesized_expression "(iVar6 <= iVar18)" (( "(") (binary_expression "iVar6 <= iVar18" (identifier "iVar6") (<= "<=") (identifier "iVar18")) () ")")) (goto_statement "goto LAB_0014bd6e;" (goto "goto") (statement_identifier "LAB_0014bd6e") (; ";"))) (} "}"))) (expression_statement "iVar18 = iVar18 + 1;" (assignment_expression "iVar18 = iVar18 + 1" (identifier "iVar18") (= "=") (binary_expression "iVar18 + 1" (identifier "iVar18") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "piVar19 = piVar19 + 8;" (assignment_expression "piVar19 = piVar19 + 8" (identifier "piVar19") (= "=") (binary_expression "piVar19 + 8" (identifier "piVar19") (+ "+") (number_literal "8"))) (; ";")) (expression_statement "iVar15 = iVar15 + 1;" (assignment_expression "iVar15 = iVar15 + 1" (identifier "iVar15") (= "=") (binary_expression "iVar15 + 1" (identifier "iVar15") (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(iVar18 < iVar6)" (( "(") (binary_expression "iVar18 < iVar6" (identifier "iVar18") (< "<") (identifier "iVar6")) () ")")) (; ";")) (labeled_statement "LAB_0014bd6e:\n      plVar7 = (long *)FUN_0011b8f0(lVar2,(long)iVar15);" (statement_identifier "LAB_0014bd6e") (: ":") (expression_statement "plVar7 = (long *)FUN_0011b8f0(lVar2,(long)iVar15);" (assignment_expression "plVar7 = (long *)FUN_0011b8f0(lVar2,(long)iVar15)" (identifier "plVar7") (= "=") (cast_expression "(long *)FUN_0011b8f0(lVar2,(long)iVar15)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "FUN_0011b8f0(lVar2,(long)iVar15)" (identifier "FUN_0011b8f0") (argument_list "(lVar2,(long)iVar15)" (( "(") (identifier "lVar2") (, ",") (cast_expression "(long)iVar15" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "iVar15")) () ")"))))) (; ";"))) (if_statement "if (plVar7 == (long *)0x0) goto joined_r0x0014bec0;" (if "if") (parenthesized_expression "(plVar7 == (long *)0x0)" (( "(") (binary_expression "plVar7 == (long *)0x0" (identifier "plVar7") (== "==") (cast_expression "(long *)0x0" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (goto_statement "goto joined_r0x0014bec0;" (goto "goto") (statement_identifier "joined_r0x0014bec0") (; ";"))) (expression_statement "lVar8 = ((long)local_50 + 4) * 0x10;" (assignment_expression "lVar8 = ((long)local_50 + 4) * 0x10" (identifier "lVar8") (= "=") (binary_expression "((long)local_50 + 4) * 0x10" (parenthesized_expression "((long)local_50 + 4)" (( "(") (binary_expression "(long)local_50 + 4" (cast_expression "(long)local_50" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "local_50")) (+ "+") (number_literal "4")) () ")")) (* "*") (number_literal "0x10"))) (; ";")) (} "}")))) (labeled_statement "LAB_0014bd94:\n    *plVar7 = lVar3;" (statement_identifier "LAB_0014bd94") (: ":") (expression_statement "*plVar7 = lVar3;" (assignment_expression "*plVar7 = lVar3" (pointer_expression "*plVar7" (* "*") (identifier "plVar7")) (= "=") (identifier "lVar3")) (; ";"))) (expression_statement "lVar9 = *(long *)(lVar3 + 0x20);" (assignment_expression "lVar9 = *(long *)(lVar3 + 0x20)" (identifier "lVar9") (= "=") (pointer_expression "*(long *)(lVar3 + 0x20)" (* "*") (cast_expression "(long *)(lVar3 + 0x20)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar3 + 0x20)" (( "(") (binary_expression "lVar3 + 0x20" (identifier "lVar3") (+ "+") (number_literal "0x20")) () ")"))))) (; ";")) (expression_statement "pvVar14 = (void *)((long)plVar7 + lVar8);" (assignment_expression "pvVar14 = (void *)((long)plVar7 + lVar8)" (identifier "pvVar14") (= "=") (cast_expression "(void *)((long)plVar7 + lVar8)" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)plVar7 + lVar8)" (( "(") (binary_expression "(long)plVar7 + lVar8" (cast_expression "(long)plVar7" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "plVar7")) (+ "+") (identifier "lVar8")) () ")")))) (; ";")) (expression_statement "plVar7[2] = (long)pvVar14;" (assignment_expression "plVar7[2] = (long)pvVar14" (subscript_expression "plVar7[2]" (identifier "plVar7") ([ "[") (number_literal "2") (] "]")) (= "=") (cast_expression "(long)pvVar14" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "pvVar14"))) (; ";")) (expression_statement "plVar7[1] = lVar9;" (assignment_expression "plVar7[1] = lVar9" (subscript_expression "plVar7[1]" (identifier "plVar7") ([ "[") (number_literal "1") (] "]")) (= "=") (identifier "lVar9")) (; ";")) (if_statement "if ((1 < *(byte *)((long)param_1 + 0x10e)) &&\n       (puVar12 = (undefined8 *)FUN_0011b8f0(*param_1,0x20), puVar12 != (undefined8 *)0x0)) {\n      *puVar12 = pvVar14;\n      uVar5 = param_3[1];\n      puVar12[1] = *param_3;\n      puVar12[2] = uVar5;\n      puVar12[3] = param_1[0x32];\n      param_1[0x32] = (long)puVar12;\n    }" (if "if") (parenthesized_expression "((1 < *(byte *)((long)param_1 + 0x10e)) &&\n       (puVar12 = (undefined8 *)FUN_0011b8f0(*param_1,0x20), puVar12 != (undefined8 *)0x0))" (( "(") (binary_expression "(1 < *(byte *)((long)param_1 + 0x10e)) &&\n       (puVar12 = (undefined8 *)FUN_0011b8f0(*param_1,0x20), puVar12 != (undefined8 *)0x0)" (parenthesized_expression "(1 < *(byte *)((long)param_1 + 0x10e))" (( "(") (binary_expression "1 < *(byte *)((long)param_1 + 0x10e)" (number_literal "1") (< "<") (pointer_expression "*(byte *)((long)param_1 + 0x10e)" (* "*") (cast_expression "(byte *)((long)param_1 + 0x10e)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)param_1 + 0x10e)" (( "(") (binary_expression "(long)param_1 + 0x10e" (cast_expression "(long)param_1" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "param_1")) (+ "+") (number_literal "0x10e")) () ")"))))) () ")")) (&& "&&") (parenthesized_expression "(puVar12 = (undefined8 *)FUN_0011b8f0(*param_1,0x20), puVar12 != (undefined8 *)0x0)" (( "(") (comma_expression "puVar12 = (undefined8 *)FUN_0011b8f0(*param_1,0x20), puVar12 != (undefined8 *)0x0" (assignment_expression "puVar12 = (undefined8 *)FUN_0011b8f0(*param_1,0x20)" (identifier "puVar12") (= "=") (cast_expression "(undefined8 *)FUN_0011b8f0(*param_1,0x20)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "FUN_0011b8f0(*param_1,0x20)" (identifier "FUN_0011b8f0") (argument_list "(*param_1,0x20)" (( "(") (pointer_expression "*param_1" (* "*") (identifier "param_1")) (, ",") (number_literal "0x20") () ")"))))) (, ",") (binary_expression "puVar12 != (undefined8 *)0x0" (identifier "puVar12") (!= "!=") (cast_expression "(undefined8 *)0x0" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0")))) () ")"))) () ")")) (compound_statement "{\n      *puVar12 = pvVar14;\n      uVar5 = param_3[1];\n      puVar12[1] = *param_3;\n      puVar12[2] = uVar5;\n      puVar12[3] = param_1[0x32];\n      param_1[0x32] = (long)puVar12;\n    }" ({ "{") (expression_statement "*puVar12 = pvVar14;" (assignment_expression "*puVar12 = pvVar14" (pointer_expression "*puVar12" (* "*") (identifier "puVar12")) (= "=") (identifier "pvVar14")) (; ";")) (expression_statement "uVar5 = param_3[1];" (assignment_expression "uVar5 = param_3[1]" (identifier "uVar5") (= "=") (subscript_expression "param_3[1]" (identifier "param_3") ([ "[") (number_literal "1") (] "]"))) (; ";")) (expression_statement "puVar12[1] = *param_3;" (assignment_expression "puVar12[1] = *param_3" (subscript_expression "puVar12[1]" (identifier "puVar12") ([ "[") (number_literal "1") (] "]")) (= "=") (pointer_expression "*param_3" (* "*") (identifier "param_3"))) (; ";")) (expression_statement "puVar12[2] = uVar5;" (assignment_expression "puVar12[2] = uVar5" (subscript_expression "puVar12[2]" (identifier "puVar12") ([ "[") (number_literal "2") (] "]")) (= "=") (identifier "uVar5")) (; ";")) (expression_statement "puVar12[3] = param_1[0x32];" (assignment_expression "puVar12[3] = param_1[0x32]" (subscript_expression "puVar12[3]" (identifier "puVar12") ([ "[") (number_literal "3") (] "]")) (= "=") (subscript_expression "param_1[0x32]" (identifier "param_1") ([ "[") (number_literal "0x32") (] "]"))) (; ";")) (expression_statement "param_1[0x32] = (long)puVar12;" (assignment_expression "param_1[0x32] = (long)puVar12" (subscript_expression "param_1[0x32]" (identifier "param_1") ([ "[") (number_literal "0x32") (] "]")) (= "=") (cast_expression "(long)puVar12" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "puVar12"))) (; ";")) (} "}"))) (expression_statement "memcpy(pvVar14,(void *)*param_3,(ulong)*(uint *)(param_3 + 1));" (call_expression "memcpy(pvVar14,(void *)*param_3,(ulong)*(uint *)(param_3 + 1))" (identifier "memcpy") (argument_list "(pvVar14,(void *)*param_3,(ulong)*(uint *)(param_3 + 1))" (( "(") (identifier "pvVar14") (, ",") (cast_expression "(void *)*param_3" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*param_3" (* "*") (identifier "param_3"))) (, ",") (binary_expression "(ulong)*(uint *)(param_3 + 1)" (parenthesized_expression "(ulong)" (( "(") (identifier "ulong") () ")")) (* "*") (cast_expression "(uint *)(param_3 + 1)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_3 + 1)" (( "(") (binary_expression "param_3 + 1" (identifier "param_3") (+ "+") (number_literal "1")) () ")")))) () ")"))) (; ";")) (expression_statement "*(undefined1 *)((long)pvVar14 + (ulong)*(uint *)(param_3 + 1)) = 0;" (assignment_expression "*(undefined1 *)((long)pvVar14 + (ulong)*(uint *)(param_3 + 1)) = 0" (pointer_expression "*(undefined1 *)((long)pvVar14 + (ulong)*(uint *)(param_3 + 1))" (* "*") (cast_expression "(undefined1 *)((long)pvVar14 + (ulong)*(uint *)(param_3 + 1))" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)pvVar14 + (ulong)*(uint *)(param_3 + 1))" (( "(") (binary_expression "(long)pvVar14 + (ulong)*(uint *)(param_3 + 1)" (cast_expression "(long)pvVar14" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "pvVar14")) (+ "+") (binary_expression "(ulong)*(uint *)(param_3 + 1)" (parenthesized_expression "(ulong)" (( "(") (identifier "ulong") () ")")) (* "*") (cast_expression "(uint *)(param_3 + 1)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_3 + 1)" (( "(") (binary_expression "param_3 + 1" (identifier "param_3") (+ "+") (number_literal "1")) () ")"))))) () ")")))) (= "=") (number_literal "0")) (; ";")) (expression_statement "FUN_0010f690(pvVar14);" (call_expression "FUN_0010f690(pvVar14)" (identifier "FUN_0010f690") (argument_list "(pvVar14)" (( "(") (identifier "pvVar14") () ")"))) (; ";")) (expression_statement "iVar6 = *(int *)(param_3 + 1);" (assignment_expression "iVar6 = *(int *)(param_3 + 1)" (identifier "iVar6") (= "=") (pointer_expression "*(int *)(param_3 + 1)" (* "*") (cast_expression "(int *)(param_3 + 1)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_3 + 1)" (( "(") (binary_expression "param_3 + 1" (identifier "param_3") (+ "+") (number_literal "1")) () ")"))))) (; ";")) (expression_statement "*(int *)(plVar7 + 5) = local_50;" (assignment_expression "*(int *)(plVar7 + 5) = local_50" (pointer_expression "*(int *)(plVar7 + 5)" (* "*") (cast_expression "(int *)(plVar7 + 5)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(plVar7 + 5)" (( "(") (binary_expression "plVar7 + 5" (identifier "plVar7") (+ "+") (number_literal "5")) () ")")))) (= "=") (identifier "local_50")) (; ";")) (if_statement "if (param_2 == (int *)0x0) {\n      *(int *)(plVar7 + 8) = *(short *)(lVar3 + 0x46) + -1;\n      if ((param_4 != (int *)0x0) && (0 < local_50)) goto LAB_0014bf4f;\n    }\n    else {\n      lVar8 = 0x40;\n      if (0 < local_50) {\n        iVar15 = 0;\nLAB_0014be20:\n        pbVar13 = *(byte **)((long)param_2 + lVar8 * 2 + -0x70);\n        if (0 < *(short *)(lVar3 + 0x46)) {\n          puVar12 = *(undefined8 **)(lVar3 + 8);\n          iVar18 = 0;\n          do {\n            bVar1 = *(byte *)*puVar12;\n            if ((&DAT_001f5800)[bVar1] == (&DAT_001f5800)[*pbVar13]) {\n              if (bVar1 == 0) goto LAB_0014bf08;\n              lVar9 = 1;\n              while (bVar1 = ((byte *)*puVar12)[lVar9],\n                    (&DAT_001f5800)[bVar1] == (&DAT_001f5800)[pbVar13[lVar9]]) {\n                lVar9 = lVar9 + 1;\n                if (bVar1 == 0) goto LAB_0014bf08;\n              }\n            }\n            iVar18 = iVar18 + 1;\n            puVar12 = puVar12 + 4;\n            if (iVar18 == *(short *)(lVar3 + 0x46)) break;\n          } while( true );\n        }\n        goto LAB_0014be9c;\n      }\n    }" (if "if") (parenthesized_expression "(param_2 == (int *)0x0)" (( "(") (binary_expression "param_2 == (int *)0x0" (identifier "param_2") (== "==") (cast_expression "(int *)0x0" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n      *(int *)(plVar7 + 8) = *(short *)(lVar3 + 0x46) + -1;\n      if ((param_4 != (int *)0x0) && (0 < local_50)) goto LAB_0014bf4f;\n    }" ({ "{") (expression_statement "*(int *)(plVar7 + 8) = *(short *)(lVar3 + 0x46) + -1;" (assignment_expression "*(int *)(plVar7 + 8) = *(short *)(lVar3 + 0x46) + -1" (pointer_expression "*(int *)(plVar7 + 8)" (* "*") (cast_expression "(int *)(plVar7 + 8)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(plVar7 + 8)" (( "(") (binary_expression "plVar7 + 8" (identifier "plVar7") (+ "+") (number_literal "8")) () ")")))) (= "=") (binary_expression "*(short *)(lVar3 + 0x46) + -1" (pointer_expression "*(short *)(lVar3 + 0x46)" (* "*") (cast_expression "(short *)(lVar3 + 0x46)" (( "(") (type_descriptor "short *" (sized_type_specifier "short" (short "short")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar3 + 0x46)" (( "(") (binary_expression "lVar3 + 0x46" (identifier "lVar3") (+ "+") (number_literal "0x46")) () ")")))) (+ "+") (number_literal "-1"))) (; ";")) (if_statement "if ((param_4 != (int *)0x0) && (0 < local_50)) goto LAB_0014bf4f;" (if "if") (parenthesized_expression "((param_4 != (int *)0x0) && (0 < local_50))" (( "(") (binary_expression "(param_4 != (int *)0x0) && (0 < local_50)" (parenthesized_expression "(param_4 != (int *)0x0)" (( "(") (binary_expression "param_4 != (int *)0x0" (identifier "param_4") (!= "!=") (cast_expression "(int *)0x0" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (&& "&&") (parenthesized_expression "(0 < local_50)" (( "(") (binary_expression "0 < local_50" (number_literal "0") (< "<") (identifier "local_50")) () ")"))) () ")")) (goto_statement "goto LAB_0014bf4f;" (goto "goto") (statement_identifier "LAB_0014bf4f") (; ";"))) (} "}")) (else_clause "else {\n      lVar8 = 0x40;\n      if (0 < local_50) {\n        iVar15 = 0;\nLAB_0014be20:\n        pbVar13 = *(byte **)((long)param_2 + lVar8 * 2 + -0x70);\n        if (0 < *(short *)(lVar3 + 0x46)) {\n          puVar12 = *(undefined8 **)(lVar3 + 8);\n          iVar18 = 0;\n          do {\n            bVar1 = *(byte *)*puVar12;\n            if ((&DAT_001f5800)[bVar1] == (&DAT_001f5800)[*pbVar13]) {\n              if (bVar1 == 0) goto LAB_0014bf08;\n              lVar9 = 1;\n              while (bVar1 = ((byte *)*puVar12)[lVar9],\n                    (&DAT_001f5800)[bVar1] == (&DAT_001f5800)[pbVar13[lVar9]]) {\n                lVar9 = lVar9 + 1;\n                if (bVar1 == 0) goto LAB_0014bf08;\n              }\n            }\n            iVar18 = iVar18 + 1;\n            puVar12 = puVar12 + 4;\n            if (iVar18 == *(short *)(lVar3 + 0x46)) break;\n          } while( true );\n        }\n        goto LAB_0014be9c;\n      }\n    }" (else "else") (compound_statement "{\n      lVar8 = 0x40;\n      if (0 < local_50) {\n        iVar15 = 0;\nLAB_0014be20:\n        pbVar13 = *(byte **)((long)param_2 + lVar8 * 2 + -0x70);\n        if (0 < *(short *)(lVar3 + 0x46)) {\n          puVar12 = *(undefined8 **)(lVar3 + 8);\n          iVar18 = 0;\n          do {\n            bVar1 = *(byte *)*puVar12;\n            if ((&DAT_001f5800)[bVar1] == (&DAT_001f5800)[*pbVar13]) {\n              if (bVar1 == 0) goto LAB_0014bf08;\n              lVar9 = 1;\n              while (bVar1 = ((byte *)*puVar12)[lVar9],\n                    (&DAT_001f5800)[bVar1] == (&DAT_001f5800)[pbVar13[lVar9]]) {\n                lVar9 = lVar9 + 1;\n                if (bVar1 == 0) goto LAB_0014bf08;\n              }\n            }\n            iVar18 = iVar18 + 1;\n            puVar12 = puVar12 + 4;\n            if (iVar18 == *(short *)(lVar3 + 0x46)) break;\n          } while( true );\n        }\n        goto LAB_0014be9c;\n      }\n    }" ({ "{") (expression_statement "lVar8 = 0x40;" (assignment_expression "lVar8 = 0x40" (identifier "lVar8") (= "=") (number_literal "0x40")) (; ";")) (if_statement "if (0 < local_50) {\n        iVar15 = 0;\nLAB_0014be20:\n        pbVar13 = *(byte **)((long)param_2 + lVar8 * 2 + -0x70);\n        if (0 < *(short *)(lVar3 + 0x46)) {\n          puVar12 = *(undefined8 **)(lVar3 + 8);\n          iVar18 = 0;\n          do {\n            bVar1 = *(byte *)*puVar12;\n            if ((&DAT_001f5800)[bVar1] == (&DAT_001f5800)[*pbVar13]) {\n              if (bVar1 == 0) goto LAB_0014bf08;\n              lVar9 = 1;\n              while (bVar1 = ((byte *)*puVar12)[lVar9],\n                    (&DAT_001f5800)[bVar1] == (&DAT_001f5800)[pbVar13[lVar9]]) {\n                lVar9 = lVar9 + 1;\n                if (bVar1 == 0) goto LAB_0014bf08;\n              }\n            }\n            iVar18 = iVar18 + 1;\n            puVar12 = puVar12 + 4;\n            if (iVar18 == *(short *)(lVar3 + 0x46)) break;\n          } while( true );\n        }\n        goto LAB_0014be9c;\n      }" (if "if") (parenthesized_expression "(0 < local_50)" (( "(") (binary_expression "0 < local_50" (number_literal "0") (< "<") (identifier "local_50")) () ")")) (compound_statement "{\n        iVar15 = 0;\nLAB_0014be20:\n        pbVar13 = *(byte **)((long)param_2 + lVar8 * 2 + -0x70);\n        if (0 < *(short *)(lVar3 + 0x46)) {\n          puVar12 = *(undefined8 **)(lVar3 + 8);\n          iVar18 = 0;\n          do {\n            bVar1 = *(byte *)*puVar12;\n            if ((&DAT_001f5800)[bVar1] == (&DAT_001f5800)[*pbVar13]) {\n              if (bVar1 == 0) goto LAB_0014bf08;\n              lVar9 = 1;\n              while (bVar1 = ((byte *)*puVar12)[lVar9],\n                    (&DAT_001f5800)[bVar1] == (&DAT_001f5800)[pbVar13[lVar9]]) {\n                lVar9 = lVar9 + 1;\n                if (bVar1 == 0) goto LAB_0014bf08;\n              }\n            }\n            iVar18 = iVar18 + 1;\n            puVar12 = puVar12 + 4;\n            if (iVar18 == *(short *)(lVar3 + 0x46)) break;\n          } while( true );\n        }\n        goto LAB_0014be9c;\n      }" ({ "{") (expression_statement "iVar15 = 0;" (assignment_expression "iVar15 = 0" (identifier "iVar15") (= "=") (number_literal "0")) (; ";")) (labeled_statement "LAB_0014be20:\n        pbVar13 = *(byte **)((long)param_2 + lVar8 * 2 + -0x70);" (statement_identifier "LAB_0014be20") (: ":") (expression_statement "pbVar13 = *(byte **)((long)param_2 + lVar8 * 2 + -0x70);" (assignment_expression "pbVar13 = *(byte **)((long)param_2 + lVar8 * 2 + -0x70)" (identifier "pbVar13") (= "=") (pointer_expression "*(byte **)((long)param_2 + lVar8 * 2 + -0x70)" (* "*") (cast_expression "(byte **)((long)param_2 + lVar8 * 2 + -0x70)" (( "(") (type_descriptor "byte **" (type_identifier "byte") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "((long)param_2 + lVar8 * 2 + -0x70)" (( "(") (binary_expression "(long)param_2 + lVar8 * 2 + -0x70" (binary_expression "(long)param_2 + lVar8 * 2" (cast_expression "(long)param_2" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "param_2")) (+ "+") (binary_expression "lVar8 * 2" (identifier "lVar8") (* "*") (number_literal "2"))) (+ "+") (number_literal "-0x70")) () ")"))))) (; ";"))) (if_statement "if (0 < *(short *)(lVar3 + 0x46)) {\n          puVar12 = *(undefined8 **)(lVar3 + 8);\n          iVar18 = 0;\n          do {\n            bVar1 = *(byte *)*puVar12;\n            if ((&DAT_001f5800)[bVar1] == (&DAT_001f5800)[*pbVar13]) {\n              if (bVar1 == 0) goto LAB_0014bf08;\n              lVar9 = 1;\n              while (bVar1 = ((byte *)*puVar12)[lVar9],\n                    (&DAT_001f5800)[bVar1] == (&DAT_001f5800)[pbVar13[lVar9]]) {\n                lVar9 = lVar9 + 1;\n                if (bVar1 == 0) goto LAB_0014bf08;\n              }\n            }\n            iVar18 = iVar18 + 1;\n            puVar12 = puVar12 + 4;\n            if (iVar18 == *(short *)(lVar3 + 0x46)) break;\n          } while( true );\n        }" (if "if") (parenthesized_expression "(0 < *(short *)(lVar3 + 0x46))" (( "(") (binary_expression "0 < *(short *)(lVar3 + 0x46)" (number_literal "0") (< "<") (pointer_expression "*(short *)(lVar3 + 0x46)" (* "*") (cast_expression "(short *)(lVar3 + 0x46)" (( "(") (type_descriptor "short *" (sized_type_specifier "short" (short "short")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar3 + 0x46)" (( "(") (binary_expression "lVar3 + 0x46" (identifier "lVar3") (+ "+") (number_literal "0x46")) () ")"))))) () ")")) (compound_statement "{\n          puVar12 = *(undefined8 **)(lVar3 + 8);\n          iVar18 = 0;\n          do {\n            bVar1 = *(byte *)*puVar12;\n            if ((&DAT_001f5800)[bVar1] == (&DAT_001f5800)[*pbVar13]) {\n              if (bVar1 == 0) goto LAB_0014bf08;\n              lVar9 = 1;\n              while (bVar1 = ((byte *)*puVar12)[lVar9],\n                    (&DAT_001f5800)[bVar1] == (&DAT_001f5800)[pbVar13[lVar9]]) {\n                lVar9 = lVar9 + 1;\n                if (bVar1 == 0) goto LAB_0014bf08;\n              }\n            }\n            iVar18 = iVar18 + 1;\n            puVar12 = puVar12 + 4;\n            if (iVar18 == *(short *)(lVar3 + 0x46)) break;\n          } while( true );\n        }" ({ "{") (expression_statement "puVar12 = *(undefined8 **)(lVar3 + 8);" (assignment_expression "puVar12 = *(undefined8 **)(lVar3 + 8)" (identifier "puVar12") (= "=") (pointer_expression "*(undefined8 **)(lVar3 + 8)" (* "*") (cast_expression "(undefined8 **)(lVar3 + 8)" (( "(") (type_descriptor "undefined8 **" (type_identifier "undefined8") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(lVar3 + 8)" (( "(") (binary_expression "lVar3 + 8" (identifier "lVar3") (+ "+") (number_literal "8")) () ")"))))) (; ";")) (expression_statement "iVar18 = 0;" (assignment_expression "iVar18 = 0" (identifier "iVar18") (= "=") (number_literal "0")) (; ";")) (do_statement "do {\n            bVar1 = *(byte *)*puVar12;\n            if ((&DAT_001f5800)[bVar1] == (&DAT_001f5800)[*pbVar13]) {\n              if (bVar1 == 0) goto LAB_0014bf08;\n              lVar9 = 1;\n              while (bVar1 = ((byte *)*puVar12)[lVar9],\n                    (&DAT_001f5800)[bVar1] == (&DAT_001f5800)[pbVar13[lVar9]]) {\n                lVar9 = lVar9 + 1;\n                if (bVar1 == 0) goto LAB_0014bf08;\n              }\n            }\n            iVar18 = iVar18 + 1;\n            puVar12 = puVar12 + 4;\n            if (iVar18 == *(short *)(lVar3 + 0x46)) break;\n          } while( true );" (do "do") (compound_statement "{\n            bVar1 = *(byte *)*puVar12;\n            if ((&DAT_001f5800)[bVar1] == (&DAT_001f5800)[*pbVar13]) {\n              if (bVar1 == 0) goto LAB_0014bf08;\n              lVar9 = 1;\n              while (bVar1 = ((byte *)*puVar12)[lVar9],\n                    (&DAT_001f5800)[bVar1] == (&DAT_001f5800)[pbVar13[lVar9]]) {\n                lVar9 = lVar9 + 1;\n                if (bVar1 == 0) goto LAB_0014bf08;\n              }\n            }\n            iVar18 = iVar18 + 1;\n            puVar12 = puVar12 + 4;\n            if (iVar18 == *(short *)(lVar3 + 0x46)) break;\n          }" ({ "{") (expression_statement "bVar1 = *(byte *)*puVar12;" (assignment_expression "bVar1 = *(byte *)*puVar12" (identifier "bVar1") (= "=") (pointer_expression "*(byte *)*puVar12" (* "*") (cast_expression "(byte *)*puVar12" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*puVar12" (* "*") (identifier "puVar12"))))) (; ";")) (if_statement "if ((&DAT_001f5800)[bVar1] == (&DAT_001f5800)[*pbVar13]) {\n              if (bVar1 == 0) goto LAB_0014bf08;\n              lVar9 = 1;\n              while (bVar1 = ((byte *)*puVar12)[lVar9],\n                    (&DAT_001f5800)[bVar1] == (&DAT_001f5800)[pbVar13[lVar9]]) {\n                lVar9 = lVar9 + 1;\n                if (bVar1 == 0) goto LAB_0014bf08;\n              }\n            }" (if "if") (parenthesized_expression "((&DAT_001f5800)[bVar1] == (&DAT_001f5800)[*pbVar13])" (( "(") (binary_expression "(&DAT_001f5800)[bVar1] == (&DAT_001f5800)[*pbVar13]" (subscript_expression "(&DAT_001f5800)[bVar1]" (parenthesized_expression "(&DAT_001f5800)" (( "(") (pointer_expression "&DAT_001f5800" (& "&") (identifier "DAT_001f5800")) () ")")) ([ "[") (identifier "bVar1") (] "]")) (== "==") (subscript_expression "(&DAT_001f5800)[*pbVar13]" (parenthesized_expression "(&DAT_001f5800)" (( "(") (pointer_expression "&DAT_001f5800" (& "&") (identifier "DAT_001f5800")) () ")")) ([ "[") (pointer_expression "*pbVar13" (* "*") (identifier "pbVar13")) (] "]"))) () ")")) (compound_statement "{\n              if (bVar1 == 0) goto LAB_0014bf08;\n              lVar9 = 1;\n              while (bVar1 = ((byte *)*puVar12)[lVar9],\n                    (&DAT_001f5800)[bVar1] == (&DAT_001f5800)[pbVar13[lVar9]]) {\n                lVar9 = lVar9 + 1;\n                if (bVar1 == 0) goto LAB_0014bf08;\n              }\n            }" ({ "{") (if_statement "if (bVar1 == 0) goto LAB_0014bf08;" (if "if") (parenthesized_expression "(bVar1 == 0)" (( "(") (binary_expression "bVar1 == 0" (identifier "bVar1") (== "==") (number_literal "0")) () ")")) (goto_statement "goto LAB_0014bf08;" (goto "goto") (statement_identifier "LAB_0014bf08") (; ";"))) (expression_statement "lVar9 = 1;" (assignment_expression "lVar9 = 1" (identifier "lVar9") (= "=") (number_literal "1")) (; ";")) (while_statement "while (bVar1 = ((byte *)*puVar12)[lVar9],\n                    (&DAT_001f5800)[bVar1] == (&DAT_001f5800)[pbVar13[lVar9]]) {\n                lVar9 = lVar9 + 1;\n                if (bVar1 == 0) goto LAB_0014bf08;\n              }" (while "while") (parenthesized_expression "(bVar1 = ((byte *)*puVar12)[lVar9],\n                    (&DAT_001f5800)[bVar1] == (&DAT_001f5800)[pbVar13[lVar9]])" (( "(") (comma_expression "bVar1 = ((byte *)*puVar12)[lVar9],\n                    (&DAT_001f5800)[bVar1] == (&DAT_001f5800)[pbVar13[lVar9]]" (assignment_expression "bVar1 = ((byte *)*puVar12)[lVar9]" (identifier "bVar1") (= "=") (subscript_expression "((byte *)*puVar12)[lVar9]" (parenthesized_expression "((byte *)*puVar12)" (( "(") (cast_expression "(byte *)*puVar12" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*puVar12" (* "*") (identifier "puVar12"))) () ")")) ([ "[") (identifier "lVar9") (] "]"))) (, ",") (binary_expression "(&DAT_001f5800)[bVar1] == (&DAT_001f5800)[pbVar13[lVar9]]" (subscript_expression "(&DAT_001f5800)[bVar1]" (parenthesized_expression "(&DAT_001f5800)" (( "(") (pointer_expression "&DAT_001f5800" (& "&") (identifier "DAT_001f5800")) () ")")) ([ "[") (identifier "bVar1") (] "]")) (== "==") (subscript_expression "(&DAT_001f5800)[pbVar13[lVar9]]" (parenthesized_expression "(&DAT_001f5800)" (( "(") (pointer_expression "&DAT_001f5800" (& "&") (identifier "DAT_001f5800")) () ")")) ([ "[") (subscript_expression "pbVar13[lVar9]" (identifier "pbVar13") ([ "[") (identifier "lVar9") (] "]")) (] "]")))) () ")")) (compound_statement "{\n                lVar9 = lVar9 + 1;\n                if (bVar1 == 0) goto LAB_0014bf08;\n              }" ({ "{") (expression_statement "lVar9 = lVar9 + 1;" (assignment_expression "lVar9 = lVar9 + 1" (identifier "lVar9") (= "=") (binary_expression "lVar9 + 1" (identifier "lVar9") (+ "+") (number_literal "1"))) (; ";")) (if_statement "if (bVar1 == 0) goto LAB_0014bf08;" (if "if") (parenthesized_expression "(bVar1 == 0)" (( "(") (binary_expression "bVar1 == 0" (identifier "bVar1") (== "==") (number_literal "0")) () ")")) (goto_statement "goto LAB_0014bf08;" (goto "goto") (statement_identifier "LAB_0014bf08") (; ";"))) (} "}"))) (} "}"))) (expression_statement "iVar18 = iVar18 + 1;" (assignment_expression "iVar18 = iVar18 + 1" (identifier "iVar18") (= "=") (binary_expression "iVar18 + 1" (identifier "iVar18") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "puVar12 = puVar12 + 4;" (assignment_expression "puVar12 = puVar12 + 4" (identifier "puVar12") (= "=") (binary_expression "puVar12 + 4" (identifier "puVar12") (+ "+") (number_literal "4"))) (; ";")) (if_statement "if (iVar18 == *(short *)(lVar3 + 0x46)) break;" (if "if") (parenthesized_expression "(iVar18 == *(short *)(lVar3 + 0x46))" (( "(") (binary_expression "iVar18 == *(short *)(lVar3 + 0x46)" (identifier "iVar18") (== "==") (pointer_expression "*(short *)(lVar3 + 0x46)" (* "*") (cast_expression "(short *)(lVar3 + 0x46)" (( "(") (type_descriptor "short *" (sized_type_specifier "short" (short "short")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar3 + 0x46)" (( "(") (binary_expression "lVar3 + 0x46" (identifier "lVar3") (+ "+") (number_literal "0x46")) () ")"))))) () ")")) (break_statement "break;" (break "break") (; ";"))) (} "}")) (while "while") (parenthesized_expression "( true )" (( "(") (true "true") () ")")) (; ";")) (} "}"))) (goto_statement "goto LAB_0014be9c;" (goto "goto") (statement_identifier "LAB_0014be9c") (; ";")) (} "}"))) (} "}")))) (goto_statement "goto LAB_0014c064;" (goto "goto") (statement_identifier "LAB_0014c064") (; ";")) (} "}"))) (labeled_statement "LAB_0014bed1:\n  if (param_4 == (int *)0x0) {\n    return;\n  }" (statement_identifier "LAB_0014bed1") (: ":") (if_statement "if (param_4 == (int *)0x0) {\n    return;\n  }" (if "if") (parenthesized_expression "(param_4 == (int *)0x0)" (( "(") (binary_expression "param_4 == (int *)0x0" (identifier "param_4") (== "==") (cast_expression "(int *)0x0" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n    return;\n  }" ({ "{") (return_statement "return;" (return "return") (; ";")) (} "}")))) (labeled_statement "LAB_0014bed9:\n  FUN_0012cc80(lVar2,param_4);" (statement_identifier "LAB_0014bed9") (: ":") (expression_statement "FUN_0012cc80(lVar2,param_4);" (call_expression "FUN_0012cc80(lVar2,param_4)" (identifier "FUN_0012cc80") (argument_list "(lVar2,param_4)" (( "(") (identifier "lVar2") (, ",") (identifier "param_4") () ")"))) (; ";"))) (return_statement "return;" (return "return") (; ";")) (labeled_statement "LAB_0014bf08:\n  *(int *)((long)plVar7 + lVar8) = iVar18;" (statement_identifier "LAB_0014bf08") (: ":") (expression_statement "*(int *)((long)plVar7 + lVar8) = iVar18;" (assignment_expression "*(int *)((long)plVar7 + lVar8) = iVar18" (pointer_expression "*(int *)((long)plVar7 + lVar8)" (* "*") (cast_expression "(int *)((long)plVar7 + lVar8)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)plVar7 + lVar8)" (( "(") (binary_expression "(long)plVar7 + lVar8" (cast_expression "(long)plVar7" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "plVar7")) (+ "+") (identifier "lVar8")) () ")")))) (= "=") (identifier "iVar18")) (; ";"))) (if_statement "if (*(short *)(lVar3 + 0x46) <= iVar18) {\n    pbVar13 = *(byte **)(param_2 + (long)iVar15 * 8 + 4);\nLAB_0014be9c:\n    FUN_0014a9d0(param_1,"unknown column \"%s\" in foreign key definition",pbVar13);\n    goto LAB_0014bead;\n  }" (if "if") (parenthesized_expression "(*(short *)(lVar3 + 0x46) <= iVar18)" (( "(") (binary_expression "*(short *)(lVar3 + 0x46) <= iVar18" (pointer_expression "*(short *)(lVar3 + 0x46)" (* "*") (cast_expression "(short *)(lVar3 + 0x46)" (( "(") (type_descriptor "short *" (sized_type_specifier "short" (short "short")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar3 + 0x46)" (( "(") (binary_expression "lVar3 + 0x46" (identifier "lVar3") (+ "+") (number_literal "0x46")) () ")")))) (<= "<=") (identifier "iVar18")) () ")")) (compound_statement "{\n    pbVar13 = *(byte **)(param_2 + (long)iVar15 * 8 + 4);\nLAB_0014be9c:\n    FUN_0014a9d0(param_1,"unknown column \"%s\" in foreign key definition",pbVar13);\n    goto LAB_0014bead;\n  }" ({ "{") (expression_statement "pbVar13 = *(byte **)(param_2 + (long)iVar15 * 8 + 4);" (assignment_expression "pbVar13 = *(byte **)(param_2 + (long)iVar15 * 8 + 4)" (identifier "pbVar13") (= "=") (pointer_expression "*(byte **)(param_2 + (long)iVar15 * 8 + 4)" (* "*") (cast_expression "(byte **)(param_2 + (long)iVar15 * 8 + 4)" (( "(") (type_descriptor "byte **" (type_identifier "byte") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_2 + (long)iVar15 * 8 + 4)" (( "(") (binary_expression "param_2 + (long)iVar15 * 8 + 4" (binary_expression "param_2 + (long)iVar15 * 8" (identifier "param_2") (+ "+") (binary_expression "(long)iVar15 * 8" (cast_expression "(long)iVar15" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "iVar15")) (* "*") (number_literal "8"))) (+ "+") (number_literal "4")) () ")"))))) (; ";")) (labeled_statement "LAB_0014be9c:\n    FUN_0014a9d0(param_1,"unknown column \"%s\" in foreign key definition",pbVar13);" (statement_identifier "LAB_0014be9c") (: ":") (expression_statement "FUN_0014a9d0(param_1,"unknown column \"%s\" in foreign key definition",pbVar13);" (call_expression "FUN_0014a9d0(param_1,"unknown column \"%s\" in foreign key definition",pbVar13)" (identifier "FUN_0014a9d0") (argument_list "(param_1,"unknown column \"%s\" in foreign key definition",pbVar13)" (( "(") (identifier "param_1") (, ",") (string_literal ""unknown column \"%s\" in foreign key definition"" (" """) (string_content "unknown column ") (escape_sequence "\"") (string_content "%s") (escape_sequence "\"") (string_content " in foreign key definition") (" """)) (, ",") (identifier "pbVar13") () ")"))) (; ";"))) (goto_statement "goto LAB_0014bead;" (goto "goto") (statement_identifier "LAB_0014bead") (; ";")) (} "}"))) (if_statement "if (1 < *(byte *)((long)param_1 + 0x10e)) {\n    for (plVar11 = (long *)param_1[0x32]; plVar11 != (long *)0x0; plVar11 = (long *)plVar11[3]) {\n      if (*(long *)((long)param_2 + lVar8 * 2 + -0x70) == *plVar11) {\n        *plVar11 = (long)plVar7 + lVar8;\n        break;\n      }\n    }\n  }" (if "if") (parenthesized_expression "(1 < *(byte *)((long)param_1 + 0x10e))" (( "(") (binary_expression "1 < *(byte *)((long)param_1 + 0x10e)" (number_literal "1") (< "<") (pointer_expression "*(byte *)((long)param_1 + 0x10e)" (* "*") (cast_expression "(byte *)((long)param_1 + 0x10e)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)param_1 + 0x10e)" (( "(") (binary_expression "(long)param_1 + 0x10e" (cast_expression "(long)param_1" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "param_1")) (+ "+") (number_literal "0x10e")) () ")"))))) () ")")) (compound_statement "{\n    for (plVar11 = (long *)param_1[0x32]; plVar11 != (long *)0x0; plVar11 = (long *)plVar11[3]) {\n      if (*(long *)((long)param_2 + lVar8 * 2 + -0x70) == *plVar11) {\n        *plVar11 = (long)plVar7 + lVar8;\n        break;\n      }\n    }\n  }" ({ "{") (for_statement "for (plVar11 = (long *)param_1[0x32]; plVar11 != (long *)0x0; plVar11 = (long *)plVar11[3]) {\n      if (*(long *)((long)param_2 + lVar8 * 2 + -0x70) == *plVar11) {\n        *plVar11 = (long)plVar7 + lVar8;\n        break;\n      }\n    }" (for "for") (( "(") (assignment_expression "plVar11 = (long *)param_1[0x32]" (identifier "plVar11") (= "=") (cast_expression "(long *)param_1[0x32]" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "param_1[0x32]" (identifier "param_1") ([ "[") (number_literal "0x32") (] "]")))) (; ";") (binary_expression "plVar11 != (long *)0x0" (identifier "plVar11") (!= "!=") (cast_expression "(long *)0x0" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) (; ";") (assignment_expression "plVar11 = (long *)plVar11[3]" (identifier "plVar11") (= "=") (cast_expression "(long *)plVar11[3]" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "plVar11[3]" (identifier "plVar11") ([ "[") (number_literal "3") (] "]")))) () ")") (compound_statement "{\n      if (*(long *)((long)param_2 + lVar8 * 2 + -0x70) == *plVar11) {\n        *plVar11 = (long)plVar7 + lVar8;\n        break;\n      }\n    }" ({ "{") (if_statement "if (*(long *)((long)param_2 + lVar8 * 2 + -0x70) == *plVar11) {\n        *plVar11 = (long)plVar7 + lVar8;\n        break;\n      }" (if "if") (parenthesized_expression "(*(long *)((long)param_2 + lVar8 * 2 + -0x70) == *plVar11)" (( "(") (binary_expression "*(long *)((long)param_2 + lVar8 * 2 + -0x70) == *plVar11" (pointer_expression "*(long *)((long)param_2 + lVar8 * 2 + -0x70)" (* "*") (cast_expression "(long *)((long)param_2 + lVar8 * 2 + -0x70)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)param_2 + lVar8 * 2 + -0x70)" (( "(") (binary_expression "(long)param_2 + lVar8 * 2 + -0x70" (binary_expression "(long)param_2 + lVar8 * 2" (cast_expression "(long)param_2" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "param_2")) (+ "+") (binary_expression "lVar8 * 2" (identifier "lVar8") (* "*") (number_literal "2"))) (+ "+") (number_literal "-0x70")) () ")")))) (== "==") (pointer_expression "*plVar11" (* "*") (identifier "plVar11"))) () ")")) (compound_statement "{\n        *plVar11 = (long)plVar7 + lVar8;\n        break;\n      }" ({ "{") (expression_statement "*plVar11 = (long)plVar7 + lVar8;" (assignment_expression "*plVar11 = (long)plVar7 + lVar8" (pointer_expression "*plVar11" (* "*") (identifier "plVar11")) (= "=") (binary_expression "(long)plVar7 + lVar8" (cast_expression "(long)plVar7" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "plVar7")) (+ "+") (identifier "lVar8"))) (; ";")) (break_statement "break;" (break "break") (; ";")) (} "}"))) (} "}"))) (} "}"))) (expression_statement "iVar15 = iVar15 + 1;" (assignment_expression "iVar15 = iVar15 + 1" (identifier "iVar15") (= "=") (binary_expression "iVar15 + 1" (identifier "iVar15") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "lVar8 = lVar8 + 0x10;" (assignment_expression "lVar8 = lVar8 + 0x10" (identifier "lVar8") (= "=") (binary_expression "lVar8 + 0x10" (identifier "lVar8") (+ "+") (number_literal "0x10"))) (; ";")) (if_statement "if (iVar15 == local_50) goto code_r0x0014bf3e;" (if "if") (parenthesized_expression "(iVar15 == local_50)" (( "(") (binary_expression "iVar15 == local_50" (identifier "iVar15") (== "==") (identifier "local_50")) () ")")) (goto_statement "goto code_r0x0014bf3e;" (goto "goto") (statement_identifier "code_r0x0014bf3e") (; ";"))) (goto_statement "goto LAB_0014be20;" (goto "goto") (statement_identifier "LAB_0014be20") (; ";")) (labeled_statement "code_r0x0014bf3e:\n  if (param_4 != (int *)0x0) {\nLAB_0014bf4f:\n    plVar17 = plVar7 + 9;\n    plVar11 = (long *)(param_4 + 4);\n    iVar15 = 0;\n    __dest = (undefined1 *)((long)pvVar14 + (ulong)(iVar6 + 1));\n    do {\n      if ((char *)*plVar11 == (char *)0x0) {\n        lVar8 = 1;\n        __n = 0;\n        puVar16 = __dest;\n      }\n      else {\n        sVar10 = strlen((char *)*plVar11);\n        __n = (ulong)((uint)sVar10 & 0x3fffffff);\n        lVar8 = __n + 1;\n        puVar16 = __dest + __n;\n      }\n      *plVar17 = (long)__dest;\n      pvVar14 = (void *)*plVar11;\n      if (1 < *(byte *)((long)param_1 + 0x10e)) {\n        for (plVar4 = (long *)param_1[0x32]; plVar4 != (long *)0x0; plVar4 = (long *)plVar4[3]) {\n          if (pvVar14 == (void *)*plVar4) {\n            *plVar4 = (long)__dest;\n            pvVar14 = (void *)*plVar11;\n            break;\n          }\n        }\n      }\n      iVar15 = iVar15 + 1;\n      plVar11 = plVar11 + 4;\n      memcpy(__dest,pvVar14,__n);\n      plVar17 = plVar17 + 2;\n      *puVar16 = 0;\n      __dest = __dest + lVar8;\n    } while (iVar15 < local_50);\n  }" (statement_identifier "code_r0x0014bf3e") (: ":") (if_statement "if (param_4 != (int *)0x0) {\nLAB_0014bf4f:\n    plVar17 = plVar7 + 9;\n    plVar11 = (long *)(param_4 + 4);\n    iVar15 = 0;\n    __dest = (undefined1 *)((long)pvVar14 + (ulong)(iVar6 + 1));\n    do {\n      if ((char *)*plVar11 == (char *)0x0) {\n        lVar8 = 1;\n        __n = 0;\n        puVar16 = __dest;\n      }\n      else {\n        sVar10 = strlen((char *)*plVar11);\n        __n = (ulong)((uint)sVar10 & 0x3fffffff);\n        lVar8 = __n + 1;\n        puVar16 = __dest + __n;\n      }\n      *plVar17 = (long)__dest;\n      pvVar14 = (void *)*plVar11;\n      if (1 < *(byte *)((long)param_1 + 0x10e)) {\n        for (plVar4 = (long *)param_1[0x32]; plVar4 != (long *)0x0; plVar4 = (long *)plVar4[3]) {\n          if (pvVar14 == (void *)*plVar4) {\n            *plVar4 = (long)__dest;\n            pvVar14 = (void *)*plVar11;\n            break;\n          }\n        }\n      }\n      iVar15 = iVar15 + 1;\n      plVar11 = plVar11 + 4;\n      memcpy(__dest,pvVar14,__n);\n      plVar17 = plVar17 + 2;\n      *puVar16 = 0;\n      __dest = __dest + lVar8;\n    } while (iVar15 < local_50);\n  }" (if "if") (parenthesized_expression "(param_4 != (int *)0x0)" (( "(") (binary_expression "param_4 != (int *)0x0" (identifier "param_4") (!= "!=") (cast_expression "(int *)0x0" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\nLAB_0014bf4f:\n    plVar17 = plVar7 + 9;\n    plVar11 = (long *)(param_4 + 4);\n    iVar15 = 0;\n    __dest = (undefined1 *)((long)pvVar14 + (ulong)(iVar6 + 1));\n    do {\n      if ((char *)*plVar11 == (char *)0x0) {\n        lVar8 = 1;\n        __n = 0;\n        puVar16 = __dest;\n      }\n      else {\n        sVar10 = strlen((char *)*plVar11);\n        __n = (ulong)((uint)sVar10 & 0x3fffffff);\n        lVar8 = __n + 1;\n        puVar16 = __dest + __n;\n      }\n      *plVar17 = (long)__dest;\n      pvVar14 = (void *)*plVar11;\n      if (1 < *(byte *)((long)param_1 + 0x10e)) {\n        for (plVar4 = (long *)param_1[0x32]; plVar4 != (long *)0x0; plVar4 = (long *)plVar4[3]) {\n          if (pvVar14 == (void *)*plVar4) {\n            *plVar4 = (long)__dest;\n            pvVar14 = (void *)*plVar11;\n            break;\n          }\n        }\n      }\n      iVar15 = iVar15 + 1;\n      plVar11 = plVar11 + 4;\n      memcpy(__dest,pvVar14,__n);\n      plVar17 = plVar17 + 2;\n      *puVar16 = 0;\n      __dest = __dest + lVar8;\n    } while (iVar15 < local_50);\n  }" ({ "{") (labeled_statement "LAB_0014bf4f:\n    plVar17 = plVar7 + 9;" (statement_identifier "LAB_0014bf4f") (: ":") (expression_statement "plVar17 = plVar7 + 9;" (assignment_expression "plVar17 = plVar7 + 9" (identifier "plVar17") (= "=") (binary_expression "plVar7 + 9" (identifier "plVar7") (+ "+") (number_literal "9"))) (; ";"))) (expression_statement "plVar11 = (long *)(param_4 + 4);" (assignment_expression "plVar11 = (long *)(param_4 + 4)" (identifier "plVar11") (= "=") (cast_expression "(long *)(param_4 + 4)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_4 + 4)" (( "(") (binary_expression "param_4 + 4" (identifier "param_4") (+ "+") (number_literal "4")) () ")")))) (; ";")) (expression_statement "iVar15 = 0;" (assignment_expression "iVar15 = 0" (identifier "iVar15") (= "=") (number_literal "0")) (; ";")) (expression_statement "__dest = (undefined1 *)((long)pvVar14 + (ulong)(iVar6 + 1));" (assignment_expression "__dest = (undefined1 *)((long)pvVar14 + (ulong)(iVar6 + 1))" (identifier "__dest") (= "=") (cast_expression "(undefined1 *)((long)pvVar14 + (ulong)(iVar6 + 1))" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)pvVar14 + (ulong)(iVar6 + 1))" (( "(") (binary_expression "(long)pvVar14 + (ulong)(iVar6 + 1)" (cast_expression "(long)pvVar14" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "pvVar14")) (+ "+") (call_expression "(ulong)(iVar6 + 1)" (parenthesized_expression "(ulong)" (( "(") (identifier "ulong") () ")")) (argument_list "(iVar6 + 1)" (( "(") (binary_expression "iVar6 + 1" (identifier "iVar6") (+ "+") (number_literal "1")) () ")")))) () ")")))) (; ";")) (do_statement "do {\n      if ((char *)*plVar11 == (char *)0x0) {\n        lVar8 = 1;\n        __n = 0;\n        puVar16 = __dest;\n      }\n      else {\n        sVar10 = strlen((char *)*plVar11);\n        __n = (ulong)((uint)sVar10 & 0x3fffffff);\n        lVar8 = __n + 1;\n        puVar16 = __dest + __n;\n      }\n      *plVar17 = (long)__dest;\n      pvVar14 = (void *)*plVar11;\n      if (1 < *(byte *)((long)param_1 + 0x10e)) {\n        for (plVar4 = (long *)param_1[0x32]; plVar4 != (long *)0x0; plVar4 = (long *)plVar4[3]) {\n          if (pvVar14 == (void *)*plVar4) {\n            *plVar4 = (long)__dest;\n            pvVar14 = (void *)*plVar11;\n            break;\n          }\n        }\n      }\n      iVar15 = iVar15 + 1;\n      plVar11 = plVar11 + 4;\n      memcpy(__dest,pvVar14,__n);\n      plVar17 = plVar17 + 2;\n      *puVar16 = 0;\n      __dest = __dest + lVar8;\n    } while (iVar15 < local_50);" (do "do") (compound_statement "{\n      if ((char *)*plVar11 == (char *)0x0) {\n        lVar8 = 1;\n        __n = 0;\n        puVar16 = __dest;\n      }\n      else {\n        sVar10 = strlen((char *)*plVar11);\n        __n = (ulong)((uint)sVar10 & 0x3fffffff);\n        lVar8 = __n + 1;\n        puVar16 = __dest + __n;\n      }\n      *plVar17 = (long)__dest;\n      pvVar14 = (void *)*plVar11;\n      if (1 < *(byte *)((long)param_1 + 0x10e)) {\n        for (plVar4 = (long *)param_1[0x32]; plVar4 != (long *)0x0; plVar4 = (long *)plVar4[3]) {\n          if (pvVar14 == (void *)*plVar4) {\n            *plVar4 = (long)__dest;\n            pvVar14 = (void *)*plVar11;\n            break;\n          }\n        }\n      }\n      iVar15 = iVar15 + 1;\n      plVar11 = plVar11 + 4;\n      memcpy(__dest,pvVar14,__n);\n      plVar17 = plVar17 + 2;\n      *puVar16 = 0;\n      __dest = __dest + lVar8;\n    }" ({ "{") (if_statement "if ((char *)*plVar11 == (char *)0x0) {\n        lVar8 = 1;\n        __n = 0;\n        puVar16 = __dest;\n      }\n      else {\n        sVar10 = strlen((char *)*plVar11);\n        __n = (ulong)((uint)sVar10 & 0x3fffffff);\n        lVar8 = __n + 1;\n        puVar16 = __dest + __n;\n      }" (if "if") (parenthesized_expression "((char *)*plVar11 == (char *)0x0)" (( "(") (binary_expression "(char *)*plVar11 == (char *)0x0" (cast_expression "(char *)*plVar11" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*plVar11" (* "*") (identifier "plVar11"))) (== "==") (cast_expression "(char *)0x0" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n        lVar8 = 1;\n        __n = 0;\n        puVar16 = __dest;\n      }" ({ "{") (expression_statement "lVar8 = 1;" (assignment_expression "lVar8 = 1" (identifier "lVar8") (= "=") (number_literal "1")) (; ";")) (expression_statement "__n = 0;" (assignment_expression "__n = 0" (identifier "__n") (= "=") (number_literal "0")) (; ";")) (expression_statement "puVar16 = __dest;" (assignment_expression "puVar16 = __dest" (identifier "puVar16") (= "=") (identifier "__dest")) (; ";")) (} "}")) (else_clause "else {\n        sVar10 = strlen((char *)*plVar11);\n        __n = (ulong)((uint)sVar10 & 0x3fffffff);\n        lVar8 = __n + 1;\n        puVar16 = __dest + __n;\n      }" (else "else") (compound_statement "{\n        sVar10 = strlen((char *)*plVar11);\n        __n = (ulong)((uint)sVar10 & 0x3fffffff);\n        lVar8 = __n + 1;\n        puVar16 = __dest + __n;\n      }" ({ "{") (expression_statement "sVar10 = strlen((char *)*plVar11);" (assignment_expression "sVar10 = strlen((char *)*plVar11)" (identifier "sVar10") (= "=") (call_expression "strlen((char *)*plVar11)" (identifier "strlen") (argument_list "((char *)*plVar11)" (( "(") (cast_expression "(char *)*plVar11" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*plVar11" (* "*") (identifier "plVar11"))) () ")")))) (; ";")) (expression_statement "__n = (ulong)((uint)sVar10 & 0x3fffffff);" (assignment_expression "__n = (ulong)((uint)sVar10 & 0x3fffffff)" (identifier "__n") (= "=") (call_expression "(ulong)((uint)sVar10 & 0x3fffffff)" (parenthesized_expression "(ulong)" (( "(") (identifier "ulong") () ")")) (argument_list "((uint)sVar10 & 0x3fffffff)" (( "(") (binary_expression "(uint)sVar10 & 0x3fffffff" (cast_expression "(uint)sVar10" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "sVar10")) (& "&") (number_literal "0x3fffffff")) () ")")))) (; ";")) (expression_statement "lVar8 = __n + 1;" (assignment_expression "lVar8 = __n + 1" (identifier "lVar8") (= "=") (binary_expression "__n + 1" (identifier "__n") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "puVar16 = __dest + __n;" (assignment_expression "puVar16 = __dest + __n" (identifier "puVar16") (= "=") (binary_expression "__dest + __n" (identifier "__dest") (+ "+") (identifier "__n"))) (; ";")) (} "}")))) (expression_statement "*plVar17 = (long)__dest;" (assignment_expression "*plVar17 = (long)__dest" (pointer_expression "*plVar17" (* "*") (identifier "plVar17")) (= "=") (cast_expression "(long)__dest" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "__dest"))) (; ";")) (expression_statement "pvVar14 = (void *)*plVar11;" (assignment_expression "pvVar14 = (void *)*plVar11" (identifier "pvVar14") (= "=") (cast_expression "(void *)*plVar11" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*plVar11" (* "*") (identifier "plVar11")))) (; ";")) (if_statement "if (1 < *(byte *)((long)param_1 + 0x10e)) {\n        for (plVar4 = (long *)param_1[0x32]; plVar4 != (long *)0x0; plVar4 = (long *)plVar4[3]) {\n          if (pvVar14 == (void *)*plVar4) {\n            *plVar4 = (long)__dest;\n            pvVar14 = (void *)*plVar11;\n            break;\n          }\n        }\n      }" (if "if") (parenthesized_expression "(1 < *(byte *)((long)param_1 + 0x10e))" (( "(") (binary_expression "1 < *(byte *)((long)param_1 + 0x10e)" (number_literal "1") (< "<") (pointer_expression "*(byte *)((long)param_1 + 0x10e)" (* "*") (cast_expression "(byte *)((long)param_1 + 0x10e)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)param_1 + 0x10e)" (( "(") (binary_expression "(long)param_1 + 0x10e" (cast_expression "(long)param_1" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "param_1")) (+ "+") (number_literal "0x10e")) () ")"))))) () ")")) (compound_statement "{\n        for (plVar4 = (long *)param_1[0x32]; plVar4 != (long *)0x0; plVar4 = (long *)plVar4[3]) {\n          if (pvVar14 == (void *)*plVar4) {\n            *plVar4 = (long)__dest;\n            pvVar14 = (void *)*plVar11;\n            break;\n          }\n        }\n      }" ({ "{") (for_statement "for (plVar4 = (long *)param_1[0x32]; plVar4 != (long *)0x0; plVar4 = (long *)plVar4[3]) {\n          if (pvVar14 == (void *)*plVar4) {\n            *plVar4 = (long)__dest;\n            pvVar14 = (void *)*plVar11;\n            break;\n          }\n        }" (for "for") (( "(") (assignment_expression "plVar4 = (long *)param_1[0x32]" (identifier "plVar4") (= "=") (cast_expression "(long *)param_1[0x32]" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "param_1[0x32]" (identifier "param_1") ([ "[") (number_literal "0x32") (] "]")))) (; ";") (binary_expression "plVar4 != (long *)0x0" (identifier "plVar4") (!= "!=") (cast_expression "(long *)0x0" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) (; ";") (assignment_expression "plVar4 = (long *)plVar4[3]" (identifier "plVar4") (= "=") (cast_expression "(long *)plVar4[3]" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "plVar4[3]" (identifier "plVar4") ([ "[") (number_literal "3") (] "]")))) () ")") (compound_statement "{\n          if (pvVar14 == (void *)*plVar4) {\n            *plVar4 = (long)__dest;\n            pvVar14 = (void *)*plVar11;\n            break;\n          }\n        }" ({ "{") (if_statement "if (pvVar14 == (void *)*plVar4) {\n            *plVar4 = (long)__dest;\n            pvVar14 = (void *)*plVar11;\n            break;\n          }" (if "if") (parenthesized_expression "(pvVar14 == (void *)*plVar4)" (( "(") (binary_expression "pvVar14 == (void *)*plVar4" (identifier "pvVar14") (== "==") (cast_expression "(void *)*plVar4" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*plVar4" (* "*") (identifier "plVar4")))) () ")")) (compound_statement "{\n            *plVar4 = (long)__dest;\n            pvVar14 = (void *)*plVar11;\n            break;\n          }" ({ "{") (expression_statement "*plVar4 = (long)__dest;" (assignment_expression "*plVar4 = (long)__dest" (pointer_expression "*plVar4" (* "*") (identifier "plVar4")) (= "=") (cast_expression "(long)__dest" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "__dest"))) (; ";")) (expression_statement "pvVar14 = (void *)*plVar11;" (assignment_expression "pvVar14 = (void *)*plVar11" (identifier "pvVar14") (= "=") (cast_expression "(void *)*plVar11" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*plVar11" (* "*") (identifier "plVar11")))) (; ";")) (break_statement "break;" (break "break") (; ";")) (} "}"))) (} "}"))) (} "}"))) (expression_statement "iVar15 = iVar15 + 1;" (assignment_expression "iVar15 = iVar15 + 1" (identifier "iVar15") (= "=") (binary_expression "iVar15 + 1" (identifier "iVar15") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "plVar11 = plVar11 + 4;" (assignment_expression "plVar11 = plVar11 + 4" (identifier "plVar11") (= "=") (binary_expression "plVar11 + 4" (identifier "plVar11") (+ "+") (number_literal "4"))) (; ";")) (expression_statement "memcpy(__dest,pvVar14,__n);" (call_expression "memcpy(__dest,pvVar14,__n)" (identifier "memcpy") (argument_list "(__dest,pvVar14,__n)" (( "(") (identifier "__dest") (, ",") (identifier "pvVar14") (, ",") (identifier "__n") () ")"))) (; ";")) (expression_statement "plVar17 = plVar17 + 2;" (assignment_expression "plVar17 = plVar17 + 2" (identifier "plVar17") (= "=") (binary_expression "plVar17 + 2" (identifier "plVar17") (+ "+") (number_literal "2"))) (; ";")) (expression_statement "*puVar16 = 0;" (assignment_expression "*puVar16 = 0" (pointer_expression "*puVar16" (* "*") (identifier "puVar16")) (= "=") (number_literal "0")) (; ";")) (expression_statement "__dest = __dest + lVar8;" (assignment_expression "__dest = __dest + lVar8" (identifier "__dest") (= "=") (binary_expression "__dest + lVar8" (identifier "__dest") (+ "+") (identifier "lVar8"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(iVar15 < local_50)" (( "(") (binary_expression "iVar15 < local_50" (identifier "iVar15") (< "<") (identifier "local_50")) () ")")) (; ";")) (} "}")))) (labeled_statement "LAB_0014c064:\n  *(undefined1 *)((long)plVar7 + 0x2c) = 0;" (statement_identifier "LAB_0014c064") (: ":") (expression_statement "*(undefined1 *)((long)plVar7 + 0x2c) = 0;" (assignment_expression "*(undefined1 *)((long)plVar7 + 0x2c) = 0" (pointer_expression "*(undefined1 *)((long)plVar7 + 0x2c)" (* "*") (cast_expression "(undefined1 *)((long)plVar7 + 0x2c)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)plVar7 + 0x2c)" (( "(") (binary_expression "(long)plVar7 + 0x2c" (cast_expression "(long)plVar7" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "plVar7")) (+ "+") (number_literal "0x2c")) () ")")))) (= "=") (number_literal "0")) (; ";"))) (expression_statement "*(undefined2 *)((long)plVar7 + 0x2d) = param_5;" (assignment_expression "*(undefined2 *)((long)plVar7 + 0x2d) = param_5" (pointer_expression "*(undefined2 *)((long)plVar7 + 0x2d)" (* "*") (cast_expression "(undefined2 *)((long)plVar7 + 0x2d)" (( "(") (type_descriptor "undefined2 *" (type_identifier "undefined2") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)plVar7 + 0x2d)" (( "(") (binary_expression "(long)plVar7 + 0x2d" (cast_expression "(long)plVar7" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "plVar7")) (+ "+") (number_literal "0x2d")) () ")")))) (= "=") (identifier "param_5")) (; ";")) (expression_statement "plVar11 = (long *)FUN_0011da30(*(long *)(lVar3 + 0x70) + 0x50,plVar7[2],plVar7);" (assignment_expression "plVar11 = (long *)FUN_0011da30(*(long *)(lVar3 + 0x70) + 0x50,plVar7[2],plVar7)" (identifier "plVar11") (= "=") (cast_expression "(long *)FUN_0011da30(*(long *)(lVar3 + 0x70) + 0x50,plVar7[2],plVar7)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "FUN_0011da30(*(long *)(lVar3 + 0x70) + 0x50,plVar7[2],plVar7)" (identifier "FUN_0011da30") (argument_list "(*(long *)(lVar3 + 0x70) + 0x50,plVar7[2],plVar7)" (( "(") (binary_expression "*(long *)(lVar3 + 0x70) + 0x50" (pointer_expression "*(long *)(lVar3 + 0x70)" (* "*") (cast_expression "(long *)(lVar3 + 0x70)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar3 + 0x70)" (( "(") (binary_expression "lVar3 + 0x70" (identifier "lVar3") (+ "+") (number_literal "0x70")) () ")")))) (+ "+") (number_literal "0x50")) (, ",") (subscript_expression "plVar7[2]" (identifier "plVar7") ([ "[") (number_literal "2") (] "]")) (, ",") (identifier "plVar7") () ")"))))) (; ";")) (if_statement "if (plVar11 == plVar7) {\n    if ((*(uint *)(lVar2 + 0x60) & 0xffff00) == 0) {\n      FUN_0011b860(lVar2);\n    }\nLAB_0014bead:\n    FUN_00119e90(lVar2,plVar7);\n  }\n  else {\n    if (plVar11 != (long *)0x0) {\n      plVar7[3] = (long)plVar11;\n      plVar11[4] = (long)plVar7;\n    }\n    *(long **)(lVar3 + 0x20) = plVar7;\n  }" (if "if") (parenthesized_expression "(plVar11 == plVar7)" (( "(") (binary_expression "plVar11 == plVar7" (identifier "plVar11") (== "==") (identifier "plVar7")) () ")")) (compound_statement "{\n    if ((*(uint *)(lVar2 + 0x60) & 0xffff00) == 0) {\n      FUN_0011b860(lVar2);\n    }\nLAB_0014bead:\n    FUN_00119e90(lVar2,plVar7);\n  }" ({ "{") (if_statement "if ((*(uint *)(lVar2 + 0x60) & 0xffff00) == 0) {\n      FUN_0011b860(lVar2);\n    }" (if "if") (parenthesized_expression "((*(uint *)(lVar2 + 0x60) & 0xffff00) == 0)" (( "(") (binary_expression "(*(uint *)(lVar2 + 0x60) & 0xffff00) == 0" (parenthesized_expression "(*(uint *)(lVar2 + 0x60) & 0xffff00)" (( "(") (binary_expression "*(uint *)(lVar2 + 0x60) & 0xffff00" (pointer_expression "*(uint *)(lVar2 + 0x60)" (* "*") (cast_expression "(uint *)(lVar2 + 0x60)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar2 + 0x60)" (( "(") (binary_expression "lVar2 + 0x60" (identifier "lVar2") (+ "+") (number_literal "0x60")) () ")")))) (& "&") (number_literal "0xffff00")) () ")")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      FUN_0011b860(lVar2);\n    }" ({ "{") (expression_statement "FUN_0011b860(lVar2);" (call_expression "FUN_0011b860(lVar2)" (identifier "FUN_0011b860") (argument_list "(lVar2)" (( "(") (identifier "lVar2") () ")"))) (; ";")) (} "}"))) (labeled_statement "LAB_0014bead:\n    FUN_00119e90(lVar2,plVar7);" (statement_identifier "LAB_0014bead") (: ":") (expression_statement "FUN_00119e90(lVar2,plVar7);" (call_expression "FUN_00119e90(lVar2,plVar7)" (identifier "FUN_00119e90") (argument_list "(lVar2,plVar7)" (( "(") (identifier "lVar2") (, ",") (identifier "plVar7") () ")"))) (; ";"))) (} "}")) (else_clause "else {\n    if (plVar11 != (long *)0x0) {\n      plVar7[3] = (long)plVar11;\n      plVar11[4] = (long)plVar7;\n    }\n    *(long **)(lVar3 + 0x20) = plVar7;\n  }" (else "else") (compound_statement "{\n    if (plVar11 != (long *)0x0) {\n      plVar7[3] = (long)plVar11;\n      plVar11[4] = (long)plVar7;\n    }\n    *(long **)(lVar3 + 0x20) = plVar7;\n  }" ({ "{") (if_statement "if (plVar11 != (long *)0x0) {\n      plVar7[3] = (long)plVar11;\n      plVar11[4] = (long)plVar7;\n    }" (if "if") (parenthesized_expression "(plVar11 != (long *)0x0)" (( "(") (binary_expression "plVar11 != (long *)0x0" (identifier "plVar11") (!= "!=") (cast_expression "(long *)0x0" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n      plVar7[3] = (long)plVar11;\n      plVar11[4] = (long)plVar7;\n    }" ({ "{") (expression_statement "plVar7[3] = (long)plVar11;" (assignment_expression "plVar7[3] = (long)plVar11" (subscript_expression "plVar7[3]" (identifier "plVar7") ([ "[") (number_literal "3") (] "]")) (= "=") (cast_expression "(long)plVar11" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "plVar11"))) (; ";")) (expression_statement "plVar11[4] = (long)plVar7;" (assignment_expression "plVar11[4] = (long)plVar7" (subscript_expression "plVar11[4]" (identifier "plVar11") ([ "[") (number_literal "4") (] "]")) (= "=") (cast_expression "(long)plVar7" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "plVar7"))) (; ";")) (} "}"))) (expression_statement "*(long **)(lVar3 + 0x20) = plVar7;" (assignment_expression "*(long **)(lVar3 + 0x20) = plVar7" (pointer_expression "*(long **)(lVar3 + 0x20)" (* "*") (cast_expression "(long **)(lVar3 + 0x20)" (( "(") (type_descriptor "long **" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(lVar3 + 0x20)" (( "(") (binary_expression "lVar3 + 0x20" (identifier "lVar3") (+ "+") (number_literal "0x20")) () ")")))) (= "=") (identifier "plVar7")) (; ";")) (} "}")))) (labeled_statement "joined_r0x0014bec0:\n  if (param_2 != (int *)0x0) {\nLAB_0014bec2:\n    FUN_0012cc80(lVar2,param_2);\n  }" (statement_identifier "joined_r0x0014bec0") (: ":") (if_statement "if (param_2 != (int *)0x0) {\nLAB_0014bec2:\n    FUN_0012cc80(lVar2,param_2);\n  }" (if "if") (parenthesized_expression "(param_2 != (int *)0x0)" (( "(") (binary_expression "param_2 != (int *)0x0" (identifier "param_2") (!= "!=") (cast_expression "(int *)0x0" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\nLAB_0014bec2:\n    FUN_0012cc80(lVar2,param_2);\n  }" ({ "{") (labeled_statement "LAB_0014bec2:\n    FUN_0012cc80(lVar2,param_2);" (statement_identifier "LAB_0014bec2") (: ":") (expression_statement "FUN_0012cc80(lVar2,param_2);" (call_expression "FUN_0012cc80(lVar2,param_2)" (identifier "FUN_0012cc80") (argument_list "(lVar2,param_2)" (( "(") (identifier "lVar2") (, ",") (identifier "param_2") () ")"))) (; ";"))) (} "}")))) (goto_statement "goto LAB_0014bed1;" (goto "goto") (statement_identifier "LAB_0014bed1") (; ";")) (} "}")))

void function_1(type_1 *pParse,type_2 *var_2,type_3 *pTo,type_2 *var_3,int flags)

{
  type_4 var_17;
  type_5 var_22;
  type_6 *db;
  type_7 *var_1;
  type_8 uVar4;
  type_9 *var_6;
  long var_13;
  long var_18;
  size_t sVar7;
  type_10 var_23;
  type_9 *var_27;
  type_11 *var_14;
  type_4 *pbVar10;
  int var_12;
  char *var_24;
  type_12 *var_19;
  int var_7;
  type_13 *puVar14;
  char **var_25;
  int var_10;
  type_13 *var_21;
  char **var_11;
  int var_5;
  type_14 local_4c;
  
  db = pParse->db;
  var_1 = pParse->pNewTable;
  if ((var_1 == (type_7 *)0x0) || (pParse->eParseMode == '\x01')) goto joined_r0x0014bec0;
  if (var_2 != (type_2 *)0x0) {
    var_5 = var_2->nExpr;
    if (var_3 == (type_2 *)0x0) {
      var_6 = (type_9 *)var_4(db,(long)(int)(var_5 * 0x10 + 0x41 + pTo->n));
      if (var_6 != (type_9 *)0x0) {
        var_13 = ((long)var_5 + 4) * 0x10;
        goto LAB_0014bd94;
      }
    }
    else {
      var_7 = var_3->nExpr;
      if (var_7 == var_5) {
        var_12 = var_7 * 0x10 + 0x41 + pTo->n;
        if (0 < var_7) goto LAB_0014bd06;
        goto LAB_0014bd6e;
      }
      var_8(pParse,
                      "number of columns in foreign key does not match the number of columns in the referenced table"
                     );
    }
    goto LAB_0014bec2;
  }
  var_7 = var_1->nCol + -1;
  if (-1 < var_7) {
    if (var_3 == (type_2 *)0x0) {
      var_6 = (type_9 *)var_4(db,(long)(int)(pTo->n + 0x51));
      if (var_6 == (type_9 *)0x0) {
        return;
      }
      var_13 = 0x50;
      var_5 = 1;
    }
    else {
      if (var_3->nExpr != 1) {
        var_8(pParse,"foreign key on %s should reference only one column of table %T",
                        var_1->aCol[var_7].zName,pTo);
        goto LAB_0014bed9;
      }
      var_5 = 1;
      var_12 = pTo->n + 0x51;
      var_7 = 1;
LAB_0014bd06:
      var_10 = 0;
      var_11 = &var_3->a[0].zName;
      do {
        while (*var_11 != (char *)0x0) {
          sVar7 = var_9(*var_11);
          var_10 = var_10 + 1;
          var_11 = var_11 + 4;
          var_12 = var_12 + ((type_5)sVar7 & 0x3fffffff) + 1;
          if (var_7 <= var_10) goto LAB_0014bd6e;
        }
        var_10 = var_10 + 1;
        var_11 = var_11 + 4;
        var_12 = var_12 + 1;
      } while (var_10 < var_7);
LAB_0014bd6e:
      var_6 = (type_9 *)var_4(db,(long)var_12);
      if (var_6 == (type_9 *)0x0) goto joined_r0x0014bec0;
      var_13 = ((long)var_5 + 4) * 0x10;
    }
LAB_0014bd94:
    var_6->pFrom = var_1;
    var_27 = var_1->pFKey;
    var_21 = var_6->aAction + var_13 + -0x2d;
    var_6->zTo = (char *)var_21;
    var_6->pNextFrom = var_27;
    if ((1 < pParse->eParseMode) &&
       (var_14 = (type_11 *)var_4(pParse->db,0x20), var_14 != (type_11 *)0x0))
    {
      var_14->p = var_21;
      var_22 = pTo->n;
      uVar4 = *(type_8 *)&pTo->field_0xc;
      (var_14->t).z = pTo->z;
      (var_14->t).n = var_22;
      *(type_8 *)&(var_14->t).field_0xc = uVar4;
      var_14->pNext = pParse->pRename;
      pParse->pRename = var_14;
    }
    var_15(var_21,pTo->z,(type_10)pTo->n);
    var_21[pTo->n] = '\0';
    var_16((char *)var_21);
    var_22 = pTo->n;
    var_6->nCol = var_5;
    if (var_2 == (type_2 *)0x0) {
      var_6->aCol[0].iFrom = var_1->nCol + -1;
      if ((var_3 != (type_2 *)0x0) && (0 < var_5)) goto LAB_0014bf4f;
    }
    else {
      var_13 = 0x40;
      if (0 < var_5) {
        var_7 = 0;
LAB_0014be20:
        pbVar10 = *(type_4 **)((long)var_2->a + var_13 * 2 + -0x78);
        if (0 < var_1->nCol) {
          var_19 = var_1->aCol;
          var_12 = 0;
          do {
            var_17 = *var_19->zName;
            if (""[var_17] == ""[*pbVar10]) {
              if (var_17 == 0) goto LAB_0014bf08;
              var_18 = 1;
              while (var_17 = var_19->zName[var_18], ""[var_17] == ""[pbVar10[var_18]]) {
                var_18 = var_18 + 1;
                if (var_17 == 0) goto LAB_0014bf08;
              }
            }
            var_12 = var_12 + 1;
            var_19 = var_19 + 1;
            if (var_12 == var_1->nCol) break;
          } while( true );
        }
        goto LAB_0014be9c;
      }
    }
    goto LAB_0014c064;
  }
LAB_0014bed1:
  if (var_3 == (type_2 *)0x0) {
    return;
  }
LAB_0014bed9:
  var_20(db,var_3);
  return;
LAB_0014bf08:
  *(int *)(var_6->aAction + var_13 + -0x2d) = var_12;
  if (var_1->nCol <= var_12) {
    pbVar10 = (type_4 *)var_2->a[var_7].zName;
LAB_0014be9c:
    var_8(pParse,"unknown column \"%s\" in foreign key definition",pbVar10);
    goto LAB_0014bead;
  }
  if (1 < pParse->eParseMode) {
    for (var_14 = pParse->pRename; var_14 != (type_11 *)0x0; var_14 = var_14->pNext) {
      if (*(void **)((long)var_2->a + var_13 * 2 + -0x78) == var_14->p) {
        var_14->p = var_6->aAction + var_13 + -0x2d;
        break;
      }
    }
  }
  var_7 = var_7 + 1;
  var_13 = var_13 + 0x10;
  if (var_7 == var_5) goto code_r0x0014bf3e;
  goto LAB_0014be20;
code_r0x0014bf3e:
  if (var_3 != (type_2 *)0x0) {
LAB_0014bf4f:
    var_25 = &var_6->aCol[0].zCol;
    var_11 = &var_3->a[0].zName;
    var_7 = 0;
    var_21 = var_21 + (var_22 + 1);
    do {
      if (*var_11 == (char *)0x0) {
        var_13 = 1;
        var_23 = 0;
        puVar14 = var_21;
      }
      else {
        sVar7 = var_9(*var_11);
        var_23 = (type_10)((type_5)sVar7 & 0x3fffffff);
        var_13 = var_23 + 1;
        puVar14 = var_21 + var_23;
      }
      *var_25 = (char *)var_21;
      var_24 = *var_11;
      if (1 < pParse->eParseMode) {
        for (var_14 = pParse->pRename; var_14 != (type_11 *)0x0; var_14 = var_14->pNext) {
          if (var_24 == (char *)var_14->p) {
            var_14->p = var_21;
            var_24 = *var_11;
            break;
          }
        }
      }
      var_7 = var_7 + 1;
      var_11 = var_11 + 4;
      var_15(var_21,var_24,var_23);
      var_25 = var_25 + 2;
      *puVar14 = '\0';
      var_21 = var_21 + var_13;
    } while (var_7 < var_5);
  }
LAB_0014c064:
  local_4c = (type_14)flags;
  var_6->isDeferred = '\0';
  *(type_14 *)var_6->aAction = local_4c;
  var_27 = (type_9 *)var_26(&var_1->pSchema->fkeyHash,var_6->zTo,var_6);
  if (var_27 == var_6) {
    var_22._0_1_ = db->temp_store;
    var_22._1_1_ = db->mallocFailed;
    var_22._2_1_ = db->bBenignMalloc;
    var_22._3_1_ = db->dfltLockMode;
    if ((var_22 & 0xffff00) == 0) {
      var_28(db);
    }
LAB_0014bead:
    var_29(db,var_6);
  }
  else {
    if (var_27 != (type_9 *)0x0) {
      var_6->pNextTo = var_27;
      var_27->pPrevTo = var_6;
    }
    var_1->pFKey = var_6;
  }
joined_r0x0014bec0:
  if (var_2 != (type_2 *)0x0) {
LAB_0014bec2:
    var_20(db,var_2);
  }
  goto LAB_0014bed1;
}


(translation_unit (function_definition type: (primitive_type) declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (sized_type_specifier) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (type_identifier) declarator: (identifier)))) body: (compound_statement (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (sized_type_specifier) declarator: (identifier)) (declaration type: (sized_type_specifier) declarator: (identifier)) (declaration type: (sized_type_specifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (sized_type_specifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (sized_type_specifier) declarator: (identifier)) (declaration type: (sized_type_specifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (sized_type_specifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (sized_type_specifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (identifier)) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier)) right: (number_literal))))) right: (char_literal (escape_sequence)))))) consequence: (goto_statement label: (statement_identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (call_expression function: (identifier) arguments: (argument_list (identifier) (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (parenthesized_expression (binary_expression left: (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (number_literal)) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier)) right: (number_literal))) right: (number_literal)))) (goto_statement label: (statement_identifier))))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (number_literal)) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (identifier))) consequence: (goto_statement label: (statement_identifier))) (goto_statement label: (statement_identifier)))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (string_literal (string_content)))))))) (goto_statement label: (statement_identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (identifier))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (call_expression function: (identifier) arguments: (argument_list (identifier) (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (compound_statement (return_statement))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (number_literal)))) alternative: (else_clause (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (string_literal (string_content)) (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier)) right: (number_literal)) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))))) (identifier)))) (goto_statement label: (statement_identifier)))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (do_statement body: (compound_statement (while_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (identifier))) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (number_literal)))) body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (identifier))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (identifier) right: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (number_literal)))) right: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (goto_statement label: (statement_identifier))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier)))) (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (call_expression function: (identifier) arguments: (argument_list (identifier) (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier)))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (goto_statement label: (statement_identifier))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier)) right: (number_literal))) right: (number_literal))))))) (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier)) right: (identifier)))))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier)))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (number_literal) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier)) right: (number_literal))))))) right: (parenthesized_expression (comma_expression left: (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (call_expression function: (identifier) arguments: (argument_list (pointer_expression argument: (identifier)) (number_literal))))) right: (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal))))))) consequence: (compound_statement (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal)))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (pointer_expression argument: (identifier)))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (identifier))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (subscript_expression argument: (identifier) index: (number_literal)))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier)))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (pointer_expression argument: (identifier))) (binary_expression left: (parenthesized_expression (identifier)) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier)) right: (binary_expression left: (parenthesized_expression (identifier)) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))))) right: (number_literal))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (compound_statement (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (number_literal)))) right: (parenthesized_expression (binary_expression left: (number_literal) right: (identifier))))) consequence: (goto_statement label: (statement_identifier)))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier)) right: (binary_expression left: (identifier) right: (number_literal))) right: (number_literal)))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (pointer_expression argument: (identifier)))))) (if_statement condition: (parenthesized_expression (binary_expression left: (subscript_expression argument: (parenthesized_expression (pointer_expression argument: (identifier))) index: (identifier)) right: (subscript_expression argument: (parenthesized_expression (pointer_expression argument: (identifier))) index: (pointer_expression argument: (identifier))))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (goto_statement label: (statement_identifier))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (while_statement condition: (parenthesized_expression (comma_expression left: (assignment_expression left: (identifier) right: (subscript_expression argument: (parenthesized_expression (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (pointer_expression argument: (identifier)))) index: (identifier))) right: (binary_expression left: (subscript_expression argument: (parenthesized_expression (pointer_expression argument: (identifier))) index: (identifier)) right: (subscript_expression argument: (parenthesized_expression (pointer_expression argument: (identifier))) index: (subscript_expression argument: (identifier) index: (identifier)))))) body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (goto_statement label: (statement_identifier))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) consequence: (break_statement))) condition: (parenthesized_expression (true))))) (goto_statement label: (statement_identifier))))))) (goto_statement label: (statement_identifier)))) (labeled_statement label: (statement_identifier) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (compound_statement (return_statement)))) (labeled_statement label: (statement_identifier) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier))))) (return_statement) (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier)) right: (identifier))))) right: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier)) right: (number_literal))) right: (number_literal))))))) (labeled_statement label: (statement_identifier) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (string_literal (string_content) (escape_sequence) (string_content) (escape_sequence) (string_content)) (identifier))))) (goto_statement label: (statement_identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier)) right: (number_literal))))))) consequence: (compound_statement (for_statement initializer: (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (subscript_expression argument: (identifier) index: (number_literal)))) condition: (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (number_literal))) update: (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (subscript_expression argument: (identifier) index: (number_literal)))) body: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier)) right: (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))))) right: (pointer_expression argument: (identifier)))) consequence: (compound_statement (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier)) right: (identifier)))) (break_statement))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (goto_statement label: (statement_identifier))) (goto_statement label: (statement_identifier)) (labeled_statement label: (statement_identifier) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (compound_statement (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier)) right: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal))))))))) (do_statement body: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (pointer_expression argument: (identifier))) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (identifier)))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (pointer_expression argument: (identifier))))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier))))))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (pointer_expression argument: (identifier))))) (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier)) right: (number_literal))))))) consequence: (compound_statement (for_statement initializer: (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (subscript_expression argument: (identifier) index: (number_literal)))) condition: (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (number_literal))) update: (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (subscript_expression argument: (identifier) index: (number_literal)))) body: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (pointer_expression argument: (identifier))))) consequence: (compound_statement (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (pointer_expression argument: (identifier))))) (break_statement))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier) (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier))))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))))))) (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier)) right: (number_literal))))) right: (number_literal)))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier)) right: (number_literal))))) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (call_expression function: (identifier) arguments: (argument_list (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal)) (subscript_expression argument: (identifier) index: (number_literal)) (identifier)))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))) right: (number_literal))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier)))))) (labeled_statement label: (statement_identifier) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier)))))) alternative: (else_clause (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (compound_statement (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier)))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier)))))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (identifier)))))) (labeled_statement label: (statement_identifier) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (compound_statement (labeled_statement label: (statement_identifier) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier)))))))) (goto_statement label: (statement_identifier)))))

void MASKED(long *param_1,int *param_2,undefined8 *param_3,int *param_4,undefined2 param_5)

{
  byte bVar1;
  long lVar2;
  long lVar3;
  long *plVar4;
  undefined8 uVar5;
  int iVar6;
  long *plVar7;
  long lVar8;
  long lVar9;
  size_t sVar10;
  ulong __n;
  long *plVar11;
  undefined8 *puVar12;
  byte *pbVar13;
  void *pvVar14;
  int iVar15;
  undefined1 *puVar16;
  long *plVar17;
  int iVar18;
  undefined1 *__dest;
  int *piVar19;
  int local_50;
  
  lVar2 = *param_1;
  lVar3 = param_1[0x27];
  if ((lVar3 == 0) || (*(char *)((long)param_1 + 0x10e) == '\x01')) goto joined_r0x0014bec0;
  if (param_2 != (int *)0x0) {
    local_50 = *param_2;
    if (param_4 == (int *)0x0) {
      plVar7 = (long *)FUN_0011b8f0(lVar2,(long)(local_50 * 0x10 + 0x41 + *(int *)(param_3 + 1)));
      if (plVar7 != (long *)0x0) {
        lVar8 = ((long)local_50 + 4) * 0x10;
        goto LAB_0014bd94;
      }
    }
    else {
      iVar6 = *param_4;
      if (iVar6 == local_50) {
        iVar15 = iVar6 * 0x10 + 0x41 + *(int *)(param_3 + 1);
        if (0 < iVar6) goto LAB_0014bd06;
        goto LAB_0014bd6e;
      }
      FUN_0014a9d0(param_1,
                   "number of columns in foreign key does not match the number of columns in the referenced table"
                  );
    }
    goto LAB_0014bec2;
  }
  iVar6 = *(short *)(lVar3 + 0x46) + -1;
  if (-1 < iVar6) {
    if (param_4 == (int *)0x0) {
      plVar7 = (long *)FUN_0011b8f0(lVar2,(long)(*(int *)(param_3 + 1) + 0x51));
      if (plVar7 == (long *)0x0) {
        return;
      }
      lVar8 = 0x50;
      local_50 = 1;
    }
    else {
      if (*param_4 != 1) {
        FUN_0014a9d0(param_1,"foreign key on %s should reference only one column of table %T",
                     *(undefined8 *)((long)iVar6 * 0x20 + *(long *)(lVar3 + 8)),param_3);
        goto LAB_0014bed9;
      }
      local_50 = 1;
      iVar15 = *(int *)(param_3 + 1) + 0x51;
      iVar6 = 1;
LAB_0014bd06:
      iVar18 = 0;
      piVar19 = param_4 + 4;
      do {
        while (*(char **)piVar19 != (char *)0x0) {
          sVar10 = strlen(*(char **)piVar19);
          iVar18 = iVar18 + 1;
          piVar19 = piVar19 + 8;
          iVar15 = iVar15 + ((uint)sVar10 & 0x3fffffff) + 1;
          if (iVar6 <= iVar18) goto LAB_0014bd6e;
        }
        iVar18 = iVar18 + 1;
        piVar19 = piVar19 + 8;
        iVar15 = iVar15 + 1;
      } while (iVar18 < iVar6);
LAB_0014bd6e:
      plVar7 = (long *)FUN_0011b8f0(lVar2,(long)iVar15);
      if (plVar7 == (long *)0x0) goto joined_r0x0014bec0;
      lVar8 = ((long)local_50 + 4) * 0x10;
    }
LAB_0014bd94:
    *plVar7 = lVar3;
    lVar9 = *(long *)(lVar3 + 0x20);
    pvVar14 = (void *)((long)plVar7 + lVar8);
    plVar7[2] = (long)pvVar14;
    plVar7[1] = lVar9;
    if ((1 < *(byte *)((long)param_1 + 0x10e)) &&
       (puVar12 = (undefined8 *)FUN_0011b8f0(*param_1,0x20), puVar12 != (undefined8 *)0x0)) {
      *puVar12 = pvVar14;
      uVar5 = param_3[1];
      puVar12[1] = *param_3;
      puVar12[2] = uVar5;
      puVar12[3] = param_1[0x32];
      param_1[0x32] = (long)puVar12;
    }
    memcpy(pvVar14,(void *)*param_3,(ulong)*(uint *)(param_3 + 1));
    *(undefined1 *)((long)pvVar14 + (ulong)*(uint *)(param_3 + 1)) = 0;
    FUN_0010f690(pvVar14);
    iVar6 = *(int *)(param_3 + 1);
    *(int *)(plVar7 + 5) = local_50;
    if (param_2 == (int *)0x0) {
      *(int *)(plVar7 + 8) = *(short *)(lVar3 + 0x46) + -1;
      if ((param_4 != (int *)0x0) && (0 < local_50)) goto LAB_0014bf4f;
    }
    else {
      lVar8 = 0x40;
      if (0 < local_50) {
        iVar15 = 0;
LAB_0014be20:
        pbVar13 = *(byte **)((long)param_2 + lVar8 * 2 + -0x70);
        if (0 < *(short *)(lVar3 + 0x46)) {
          puVar12 = *(undefined8 **)(lVar3 + 8);
          iVar18 = 0;
          do {
            bVar1 = *(byte *)*puVar12;
            if ((&DAT_001f5800)[bVar1] == (&DAT_001f5800)[*pbVar13]) {
              if (bVar1 == 0) goto LAB_0014bf08;
              lVar9 = 1;
              while (bVar1 = ((byte *)*puVar12)[lVar9],
                    (&DAT_001f5800)[bVar1] == (&DAT_001f5800)[pbVar13[lVar9]]) {
                lVar9 = lVar9 + 1;
                if (bVar1 == 0) goto LAB_0014bf08;
              }
            }
            iVar18 = iVar18 + 1;
            puVar12 = puVar12 + 4;
            if (iVar18 == *(short *)(lVar3 + 0x46)) break;
          } while( true );
        }
        goto LAB_0014be9c;
      }
    }
    goto LAB_0014c064;
  }
LAB_0014bed1:
  if (param_4 == (int *)0x0) {
    return;
  }
LAB_0014bed9:
  FUN_0012cc80(lVar2,param_4);
  return;
LAB_0014bf08:
  *(int *)((long)plVar7 + lVar8) = iVar18;
  if (*(short *)(lVar3 + 0x46) <= iVar18) {
    pbVar13 = *(byte **)(param_2 + (long)iVar15 * 8 + 4);
LAB_0014be9c:
    FUN_0014a9d0(param_1,"unknown column \"%s\" in foreign key definition",pbVar13);
    goto LAB_0014bead;
  }
  if (1 < *(byte *)((long)param_1 + 0x10e)) {
    for (plVar11 = (long *)param_1[0x32]; plVar11 != (long *)0x0; plVar11 = (long *)plVar11[3]) {
      if (*(long *)((long)param_2 + lVar8 * 2 + -0x70) == *plVar11) {
        *plVar11 = (long)plVar7 + lVar8;
        break;
      }
    }
  }
  iVar15 = iVar15 + 1;
  lVar8 = lVar8 + 0x10;
  if (iVar15 == local_50) goto code_r0x0014bf3e;
  goto LAB_0014be20;
code_r0x0014bf3e:
  if (param_4 != (int *)0x0) {
LAB_0014bf4f:
    plVar17 = plVar7 + 9;
    plVar11 = (long *)(param_4 + 4);
    iVar15 = 0;
    __dest = (undefined1 *)((long)pvVar14 + (ulong)(iVar6 + 1));
    do {
      if ((char *)*plVar11 == (char *)0x0) {
        lVar8 = 1;
        __n = 0;
        puVar16 = __dest;
      }
      else {
        sVar10 = strlen((char *)*plVar11);
        __n = (ulong)((uint)sVar10 & 0x3fffffff);
        lVar8 = __n + 1;
        puVar16 = __dest + __n;
      }
      *plVar17 = (long)__dest;
      pvVar14 = (void *)*plVar11;
      if (1 < *(byte *)((long)param_1 + 0x10e)) {
        for (plVar4 = (long *)param_1[0x32]; plVar4 != (long *)0x0; plVar4 = (long *)plVar4[3]) {
          if (pvVar14 == (void *)*plVar4) {
            *plVar4 = (long)__dest;
            pvVar14 = (void *)*plVar11;
            break;
          }
        }
      }
      iVar15 = iVar15 + 1;
      plVar11 = plVar11 + 4;
      memcpy(__dest,pvVar14,__n);
      plVar17 = plVar17 + 2;
      *puVar16 = 0;
      __dest = __dest + lVar8;
    } while (iVar15 < local_50);
  }
LAB_0014c064:
  *(undefined1 *)((long)plVar7 + 0x2c) = 0;
  *(undefined2 *)((long)plVar7 + 0x2d) = param_5;
  plVar11 = (long *)FUN_0011da30(*(long *)(lVar3 + 0x70) + 0x50,plVar7[2],plVar7);
  if (plVar11 == plVar7) {
    if ((*(uint *)(lVar2 + 0x60) & 0xffff00) == 0) {
      FUN_0011b860(lVar2);
    }
LAB_0014bead:
    FUN_00119e90(lVar2,plVar7);
  }
  else {
    if (plVar11 != (long *)0x0) {
      plVar7[3] = (long)plVar11;
      plVar11[4] = (long)plVar7;
    }
    *(long **)(lVar3 + 0x20) = plVar7;
  }
joined_r0x0014bec0:
  if (param_2 != (int *)0x0) {
LAB_0014bec2:
    FUN_0012cc80(lVar2,param_2);
  }
  goto LAB_0014bed1;
}

