/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1 * Ghidra 12.1.2 decompiler output for 0x1400b4400 FUN_1400b4400 * Pseudocode, not original source. */ /* WARNING: Function: __chkstk replaced with injection: alloca_probe */ /* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */ /* WARNING: Removing unreachable block (ram,0x0001400b4b40) */ /* WARNING: Removing unreachable block (ram,0x0001400b4b4c) */ /* WARNING: Removing unreachable block (ram,0x0001400b4b44) */ /* WARNING: Removing unreachable block (ram,0x0001400b4b52) */ /* WARNING: Removing unreachable block (ram,0x0001400b49d7) */ /* WARNING: Removing unreachable block (ram,0x0001400b49de) */ /* WARNING: Removing unreachable block (ram,0x0001400b49f6) */ /* WARNING: Removing unreachable block (ram,0x0001400b4a02) */ /* WARNING: Removing unreachable block (ram,0x0001400b49fa) */ /* WARNING: Removing unreachable block (ram,0x0001400b4a08) */ /* WARNING: Removing unreachable block (ram,0x0001400b4a24) */ /* WARNING: Removing unreachable block (ram,0x0001400b4920) */ /* WARNING: Removing unreachable block (ram,0x0001400b4927) */ /* WARNING: Removing unreachable block (ram,0x0001400b4940) */ /* WARNING: Removing unreachable block (ram,0x0001400b494c) */ /* WARNING: Removing unreachable block (ram,0x0001400b4944) */ /* WARNING: Removing unreachable block (ram,0x0001400b4952) */ /* WARNING: Removing unreachable block (ram,0x0001400b496e) */ ulonglong FUN_1400b4400(longlong *param_1,TypeDescriptor *param_2,TypeDescriptor *param_3, TypeDescriptor *param_4,uint param_5) { undefined *puVar1; undefined8 uVar2; undefined4 uVar3; uint uVar4; int iVar5; uint uVar6; uint uVar7; TypeDescriptor *pTVar8; void *pvVar9; void *pvVar10; TypeDescriptor *pTVar11; TypeDescriptor *extraout_RAX; uint *puVar12; longlong *plVar13; int *piVar14; longlong lVar15; TypeDescriptor *pTVar16; undefined8 *puVar17; TypeDescriptor *pTVar18; undefined8 uVar19; undefined1 *puVar20; undefined4 *puVar21; uint *puVar22; int iVar23; TypeDescriptor *pTVar24; uint uVar25; ulonglong uVar26; TypeDescriptor *pTVar27; uint uVar28; TypeDescriptor *pTVar29; SIZE_T SVar30; undefined4 *puVar31; longlong *plVar32; TypeDescriptor *pTVar33; TypeDescriptor *pTVar34; undefined1 auStackY_2c38 [32]; undefined8 local_2c08; undefined1 local_2c00 [16]; TypeDescriptor *local_2bf0; ulonglong local_2be8; undefined8 local_2be0; TypeDescriptor *local_2bd8; uint uStack_2bd0; undefined4 uStack_2bcc; undefined4 local_2bc8; undefined4 local_2bc4; TypeDescriptor local_2bc0; uint local_2bb0; int local_2bac; TypeDescriptor *local_2ba0; TypeDescriptor local_2b98; undefined1 local_2b88; undefined4 local_2b84; undefined1 local_2b80; undefined1 local_2b7f; void *local_2b78; undefined8 local_2b70; longlong *local_2b68; undefined **local_2b60; longlong *local_2b58; TypeDescriptor *local_2b50; uint local_2b48; undefined8 local_2b44; undefined4 local_2b3c; TypeDescriptor *local_2b38; int *local_2b30; undefined4 local_2b28; undefined4 uStack_2b24; int *local_2b20; char local_2b18; TypeDescriptor *local_2b10; longlong *local_2b08; TypeDescriptor *local_2b00; void *local_2af0; undefined8 local_2ae0; exception local_2ad8 [72]; exception local_2a90 [72]; exception local_2a48 [80]; undefined4 local_29f8 [2]; TypeDescriptor local_29f0; undefined4 local_29e0; int local_29dc; undefined1 local_29d0 [136]; TypeDescriptor local_2948; ulonglong local_2938; undefined8 local_2930; undefined8 auStack_2928 [100]; TypeDescriptor local_2608 [200]; TypeDescriptor *local_1988; undefined4 local_1980; int local_197c; undefined1 local_1978 [3200]; undefined1 *local_cf8; undefined4 local_cf0; int local_cec; TypeDescriptor local_ce8 [200]; TypeDescriptor *local_68; undefined4 local_60; undefined4 local_5c; ulonglong local_58; local_2ae0 = 0xfffffffffffffffe; local_58 = DAT_1401ac5a0 ^ (ulonglong)auStackY_2c38; pTVar16 = (TypeDescriptor *)0x0; local_2b78 = (void *)0x0; pTVar18 = param_2; pTVar29 = param_3; pTVar33 = param_4; local_2ba0 = param_2; local_2b68 = param_1; local_2b38 = param_3; local_2b10 = param_2; local_2b08 = param_1; local_2b20 = (int *)(**(code **)(*param_1 + 0x58))(); FUN_14006b350(local_2b20); puVar1 = PTR_u_Cannot_send_messages_unless_conn_1401ad1e0; local_2b18 = '\x01'; plVar32 = (longlong *)param_1[699]; uVar28 = 0; if (((plVar32 != (longlong *)0x0) && (*plVar32 != 0)) && ((int)param_1[0x2af] != 0)) { local_2948.pVFTable = (void *)0x0; local_2930 = 0; local_2948.spare = (void *)0x0; local_2938 = 100; if (0 < (int)param_5) { uVar26 = (ulonglong)param_5; do { uVar4 = *(uint *)¶m_4->pVFTable; pTVar18 = (TypeDescriptor *)(ulonglong)uVar4; if (uVar4 != 0) { pTVar29 = &local_2948; FUN_1400b3500(param_1,uVar4,(longlong *)pTVar29,pTVar33); } param_4 = (TypeDescriptor *)((longlong)¶m_4->pVFTable + 4); uVar26 = uVar26 - 1; } while (uVar26 != 0); } FUN_1400a2b80((longlong *)&local_2948); local_2b58 = (longlong *)0x0; local_2b3c = 0; local_2b50 = (TypeDescriptor *)0x0; local_2b48 = 0; local_2b44 = 0; local_2b60 = Proud::CNetClientImpl::BypassDestList_C::vftable; local_2b70 = (TypeDescriptor *)((ulonglong)local_2b70._4_4_ << 0x20); pTVar11 = pTVar16; pTVar24 = pTVar16; pTVar34 = pTVar16; while( true ) { iVar5 = (int)pTVar11; local_2c08 = (uint *)CONCAT44(local_2c08._4_4_,iVar5); lVar15 = (longlong)iVar5; iVar23 = (int)pTVar24; if ((longlong)local_2948.spare <= lVar15) break; if (iVar5 < 0) { /* WARNING: Subroutine does not return */ FUN_14006be00(); } if (local_2938 < 0x65) { puVar17 = auStack_2928 + lVar15; } else { puVar17 = (undefined8 *)((longlong)local_2948.pVFTable + lVar15 * 8); } pTVar11 = (TypeDescriptor *)*puVar17; pTVar8 = (TypeDescriptor *)(param_1 + 0xc); if (param_1 == (longlong *)0x0) { pTVar8 = pTVar16; } if ((pTVar11 == pTVar8) && (*(char *)((longlong)¶m_3[2].spare + 5) != '\0')) { FUN_1400bca00((undefined4 *)local_2c00); pTVar18 = (TypeDescriptor *)local_2c00; FUN_1400de810((longlong)local_2ba0,(int *)pTVar18,(SIZE_T)pTVar29,pTVar33); pvVar9 = (void *)param_1[0x2a8]; if ((longlong *)local_2b68[0x2a6] == (longlong *)0x0) { pTVar8 = (TypeDescriptor *)FUN_14006cbf0(0x38); } else { pTVar18 = (TypeDescriptor *)0x38; pTVar8 = (TypeDescriptor *)(**(code **)(*(longlong *)local_2b68[0x2a6] + 8))(); } local_2b00 = pTVar8; if (pTVar8 != (TypeDescriptor *)0x0) { pTVar18 = (TypeDescriptor *)local_2c00; local_2bd8 = pTVar8; FUN_1400bca30((undefined4 *)(pTVar8 + 1),(undefined4 *)pTVar18); } param_1 = local_2b68; pTVar8->spare = pvVar9; pTVar8->pVFTable = (void *)0x0; local_2b68[0x2a9] = local_2b68[0x2a9] + 1; if ((longlong *)local_2b68[0x2a8] == (longlong *)0x0) { local_2b68[0x2a7] = (longlong)pTVar8; } else { *(longlong *)local_2b68[0x2a8] = (longlong)pTVar8; } local_2b68[0x2a8] = (longlong)pTVar8; local_2bd8 = (TypeDescriptor *)(local_2c00 + 8); FUN_1400d1800((longlong *)(local_2c00 + 8)); if ((local_2bf0 != (TypeDescriptor *)0x0) && ((longlong)local_2be8 < 0)) { /* WARNING: Subroutine does not return */ FUN_14006be00(); } } param_2 = local_2ba0; if (pTVar11 == (TypeDescriptor *)(param_1 + 0x2aa)) { local_2b98.pVFTable._0_4_ = *(undefined4 *)¶m_3[2].pVFTable; local_2b98.spare = param_3[1].spare; local_2b88 = *(undefined1 *)((longlong)¶m_3[2].spare + 5); local_2b84 = *(undefined4 *)¶m_3[3].pVFTable; local_2b80 = *(undefined1 *)((longlong)¶m_3[4].pVFTable + 1); local_2b7f = *(undefined1 *)¶m_3[4].pVFTable; local_2bd8 = local_ce8; local_5c = 200; local_60 = 0; local_68 = local_ce8; FUN_1400a20e0((longlong *)(local_2ba0 + 200),&local_68,pTVar29,pTVar33); pTVar33 = local_ce8; pTVar29 = (TypeDescriptor *)(ulonglong)*(uint *)¶m_3->pVFTable; pTVar18 = (TypeDescriptor *)0x1; FUN_1400a24b0((longlong)param_1,1,*(uint *)¶m_3->pVFTable,(SIZE_T *)pTVar33, (SIZE_T *)&local_2b98); } else if (pTVar11 != (TypeDescriptor *)0x0) { pTVar33 = &Proud::CRemotePeer_C::RTTI_Type_Descriptor; pTVar29 = &Proud::ISendDest_C::RTTI_Type_Descriptor; pTVar18 = (TypeDescriptor *)0x0; pvVar9 = (void *)__RTDynamicCast(pTVar11); param_2 = local_2ba0; local_2b78 = pvVar9; if (pvVar9 != (void *)0x0) { if ((((*(char *)((longlong)pvVar9 + 0x608) != '\0') || (*(int *)¶m_3[1].pVFTable <= (int)local_2b70)) || (*(double *)((longlong)pvVar9 + 0x50) <= 0.0)) || ((*(double *)((longlong)pvVar9 + 0x60) <= 0.0 || ((*(double *)((longlong)pvVar9 + 0x60) + (double)param_1[0x9f]) / *(double *)((longlong)pvVar9 + 0x50) < (double)param_3[3].spare)))) { if (*(int *)¶m_3->pVFTable == 1) { FUN_1400f5f50((undefined8 *)(*(longlong *)((longlong)pvVar9 + 0x640) + 8), (longlong *)CONCAT71((int7)((ulonglong)pTVar18 >> 8),1), (longlong *)pTVar29,pTVar33); uVar3 = FUN_1400f48b0((longlong)pvVar9 + 0x638); local_2af0 = (void *)CONCAT44(local_2af0._4_4_,uVar3); if (iVar23 < 0) { /* WARNING: Subroutine does not return */ FUN_14006be00(); } pTVar18 = (TypeDescriptor *)(ulonglong)(iVar23 + 1U); FUN_1400a1b60((longlong)&local_2b60,iVar23 + 1U,pTVar29,(longlong)pTVar33); pTVar11 = local_2b50; if (local_2b48 == 0) { pTVar11 = pTVar16; } pTVar11[iVar23].pVFTable = pvVar9; pvVar10 = local_2af0; LAB_1400b4a55: pTVar24 = (TypeDescriptor *)(ulonglong)local_2b48; pTVar11[iVar23].spare = pvVar10; pTVar34 = local_2b50; } else if (*(char *)((longlong)¶m_3[2].spare + 6) != '\0') { local_2b28 = 0; if (iVar23 < 0) { /* WARNING: Subroutine does not return */ FUN_14006be00(); } pTVar18 = (TypeDescriptor *)(ulonglong)(iVar23 + 1U); FUN_1400a1b60((longlong)&local_2b60,iVar23 + 1U,pTVar29,(longlong)pTVar33); pTVar11 = local_2b50; if (local_2b48 == 0) { pTVar11 = pTVar16; } pTVar11[iVar23].pVFTable = pvVar9; pvVar10 = (void *)CONCAT44(uStack_2b24,local_2b28); goto LAB_1400b4a55; } if (*(char *)((longlong)¶m_3[2].spare + 4) != '\0') { *(undefined1 *)((longlong)pvVar9 + 0x21) = 1; } } else { local_2b70 = (TypeDescriptor *)CONCAT44(local_2b70._4_4_,(int)local_2b70 + 1); if (*(char *)((longlong)¶m_3[4].pVFTable + 1) == '\0') { *(int *)((longlong)pvVar9 + 0x40) = *(int *)((longlong)pvVar9 + 0x40) + 1; } pTVar18 = local_2ba0; if (*(int *)¶m_3->pVFTable == 1) { FUN_1400f4910((longlong)pvVar9 + 0x638,(longlong)local_2ba0,pTVar29,pTVar33); } else { local_2b98.pVFTable._0_4_ = *(undefined4 *)¶m_3[2].pVFTable; local_2b98.spare = param_3[1].spare; local_2b88 = *(undefined1 *)((longlong)¶m_3[2].spare + 5); local_2b84 = *(undefined4 *)¶m_3[3].pVFTable; local_2b80 = *(undefined1 *)((longlong)¶m_3[4].pVFTable + 1); local_2b7f = *(undefined1 *)¶m_3[4].pVFTable; pTVar29 = &local_2b98; FUN_1400eff60((longlong *)((longlong)pvVar9 + 0x668),(longlong)local_2ba0, &pTVar29->pVFTable); } } } } pTVar11 = (TypeDescriptor *)(ulonglong)((int)local_2c08 + 1); } if (iVar23 < 1) goto LAB_1400b530b; if (*(int *)¶m_3->pVFTable != 0) { local_5c = 200; local_60 = 0; local_68 = local_ce8; FUN_1400bca00(local_29f8); FUN_1400bc680((longlong)local_29f8,(longlong)local_29d0,0x80,pTVar33); puVar31 = local_29f8; FUN_1400db480((longlong)param_2,(longlong)local_ce8,(SIZE_T)puVar31,pTVar33); local_2c00._8_8_ = (longlong *)0x0; local_2bf0 = (TypeDescriptor *)0x0; local_2be8 = 0; local_2be0 = 0; local_2c00._0_8_ = Proud::BypassDestList::vftable; puVar20 = local_2c00; FUN_1400a3400((longlong)&local_2b60,(longlong)puVar20,puVar31,(longlong)pTVar33); local_cec = 200; local_cf0 = 0; local_cf8 = local_1978; FUN_1400bca00(&local_2bc8); FUN_1400bc4d0((longlong)&local_2bc8,puVar20,(SIZE_T)puVar31,pTVar33); FUN_140054a10((longlong)&local_2bc8,CONCAT71((int7)((ulonglong)puVar20 >> 8),0x14), (SIZE_T)puVar31,pTVar33); FUN_1400be0f0((longlong)&local_2bc8,(longlong)local_2c00,(SIZE_T)puVar31,pTVar33); puVar21 = &local_2bc8; FUN_1400bc450((longlong *)&local_2b30,(longlong)puVar21); iVar5 = FUN_1400de5d0((longlong)local_ce8,puVar21,puVar31,pTVar33); lVar15 = (longlong)iVar5; FUN_1400bddd0((longlong)&local_2bc8,lVar15,(SIZE_T)puVar31,pTVar33); local_197c = 200; local_1980 = 0; local_1988 = local_2608; if (local_2bc0.pVFTable == (void *)0x0) { uStack_2bd0 = local_2bb0; if (local_2bc0.spare == (TypeDescriptor *)0x0) { /* WARNING: Subroutine does not return */ FUN_1400d1900(0,lVar15,puVar31,pTVar33); } } else { uStack_2bd0 = *(uint *)((longlong)local_2bc0.pVFTable + 0x18); } local_2608[0].pVFTable = local_2bc0.spare; if (local_2bc0.spare == (TypeDescriptor *)0x0) { if (local_2bc0.pVFTable == (void *)0x0) { /* WARNING: Subroutine does not return */ FUN_1400d1900(0,(ulonglong)uStack_2bd0,puVar31,pTVar33); } local_2608[0].pVFTable = pTVar16; if (*(int *)((longlong)local_2bc0.pVFTable + 0x18) != 0) { local_2608[0].pVFTable = *(void **)((longlong)local_2bc0.pVFTable + 0x10); } } local_1980 = 1; local_2608[0].spare = (void *)CONCAT44(uStack_2bcc,uStack_2bd0); local_2bd8 = local_2608[0].pVFTable; FUN_14007cb60((longlong)local_1978,(longlong)local_2608,puVar31,pTVar33); if (local_1988 == (TypeDescriptor *)0x0) { FUN_14006ba50(local_2ad8,(wchar_t *)PTR_u_ArrayWithExternalBuffer_is_unini_1401ad9a0,puVar31 ,pTVar33); /* WARNING: Subroutine does not return */ _CxxThrowException(local_2ad8,(ThrowInfo *)&DAT_1401a93e8); } if (local_197c < 0) { /* WARNING: Subroutine does not return */ FUN_14006be00(); } FUN_14007cb60((longlong)local_1978,(longlong)local_ce8,puVar31,pTVar33); local_2b98.pVFTable._0_4_ = *(undefined4 *)¶m_3[2].pVFTable; local_2b98.spare = param_3[1].spare; local_2b88 = *(undefined1 *)((longlong)¶m_3[2].spare + 5); local_2b84 = *(undefined4 *)¶m_3[3].pVFTable; local_2b7f = *(undefined1 *)¶m_3[4].pVFTable; local_2b80 = 1; local_2bd8 = local_2608; local_197c = 200; local_1980 = 0; local_1988 = local_2608; FUN_1400a20e0((longlong *)&local_cf8,&local_1988,puVar31,pTVar33); pTVar18 = local_2608; pTVar33 = (TypeDescriptor *)0x0; plVar32 = (longlong *)0x1; FUN_1400a24b0((longlong)param_1,0,1,(SIZE_T *)pTVar18,(SIZE_T *)&local_2b98); FUN_1400bc470((longlong *)&local_2b30); local_2bd8 = &local_2bc0; FUN_1400d1800((longlong *)&local_2bc0); if (local_2bc0.spare != (TypeDescriptor *)0x0) { if (local_2bac < 0) { /* WARNING: Subroutine does not return */ FUN_14006be00(); } local_2bb0 = 0; } FUN_14007ca50((longlong)local_1978,pTVar33,plVar32,pTVar18); local_2c00._0_8_ = Proud::CFastArray::vftable; if (local_2bf0 != (TypeDescriptor *)0x0) { plVar32 = (longlong *)local_2c00._8_8_; if ((longlong *)local_2c00._8_8_ == (longlong *)0x0) { FUN_14006cc60(local_2bf0); } else { pTVar33 = local_2bf0; (**(code **)(*(longlong *)local_2c00._8_8_ + 0x18))(local_2c00._8_8_); } } local_2bd8 = &local_29f0; FUN_1400d1800((longlong *)&local_29f0); if (local_29f0.spare != (void *)0x0) { if (local_29dc < 0) { /* WARNING: Subroutine does not return */ FUN_14006be00(); } local_29e0 = 0; } pTVar11 = (TypeDescriptor *)FUN_14007ca50((longlong)local_ce8,pTVar33,plVar32,pTVar18); goto LAB_1400b530b; } local_2c00._8_8_ = (longlong *)0x0; local_2bf0 = (TypeDescriptor *)0x0; local_2be8 = 0; local_2be0 = 0; local_2c00._0_8_ = Proud::HostIDArray::vftable; local_2c08 = (uint *)((ulonglong)local_2c08._4_4_ << 0x20); local_2b78 = (void *)0x0; pTVar11 = pTVar16; pTVar8 = pTVar34; pTVar27 = pTVar16; pTVar24 = pTVar16; if (0 < iVar23) { do { local_2b70 = pTVar8; if (((longlong)local_2b78 < 0) || (iVar23 <= (int)pTVar11)) { /* WARNING: Subroutine does not return */ FUN_14006be30(local_2b78,pTVar8,pTVar29,pTVar33); } local_2af0 = pTVar8->spare; local_2b38 = (TypeDescriptor *)((longlong)pTVar8->pVFTable + 0x56c); iVar5 = (int)pTVar27; if (iVar5 < 0) { /* WARNING: Subroutine does not return */ FUN_14006be00(); } FUN_14007b600((longlong)local_2c00,iVar5 + 1,(longlong)pTVar29); pTVar24 = local_2bf0; uVar28 = (uint)local_2be8; pTVar27 = (TypeDescriptor *)(local_2be8 & 0xffffffff); pTVar18 = local_2bf0; if ((uint)local_2be8 == 0) { pTVar18 = pTVar16; } pTVar29 = (TypeDescriptor *)0x4; FUN_140006500((undefined8 *)((longlong)&pTVar18->pVFTable + (longlong)iVar5 * 4), &local_2b38->pVFTable,4); uVar4 = (int)local_2c08 + 1; local_2c08 = (uint *)CONCAT44(local_2c08._4_4_,uVar4); local_2b78 = (void *)((longlong)local_2b78 + 1); pTVar18 = local_2b70 + 1; pTVar11 = (TypeDescriptor *)(ulonglong)uVar4; pTVar8 = pTVar18; local_2b70 = pTVar18; } while ((int)uVar4 < iVar23); } uVar2 = local_2c00._8_8_; FUN_1400bca00(&local_2bc8); FUN_1400bc4d0((longlong)&local_2bc8,pTVar18,(SIZE_T)pTVar29,pTVar33); FUN_140054a10((longlong)&local_2bc8,CONCAT71((int7)((ulonglong)pTVar18 >> 8),0x15), (SIZE_T)pTVar29,pTVar33); FUN_140054a10((longlong)&local_2bc8,(ulonglong)*(byte *)¶m_3[2].pVFTable,(SIZE_T)pTVar29, pTVar33); FUN_1400bddd0((longlong)&local_2bc8,(longlong)param_3[1].spare,(SIZE_T)pTVar29,pTVar33); FUN_1400bddd0((longlong)&local_2bc8,(longlong)(int)uVar28,(SIZE_T)pTVar29,pTVar33); pTVar18 = pTVar24; if (uVar28 == 0) { pTVar18 = pTVar16; } SVar30 = (SIZE_T)(uVar28 * 4); if (uVar28 * 4 != 0) { local_2bc4 = 0; if (local_2bc0.pVFTable == (void *)0x0) { if (local_2bc0.spare == (TypeDescriptor *)0x0) { /* WARNING: Subroutine does not return */ FUN_1400d1900(0,pTVar18,SVar30,pTVar33); } LAB_1400b4c5e: FUN_1400145e0((longlong *)&local_2bc0.spare,&pTVar18->pVFTable,SVar30,pTVar33); } else { if (local_2bc0.spare != (TypeDescriptor *)0x0) goto LAB_1400b4c5e; if (local_2bc0.pVFTable == (void *)0x0) { /* WARNING: Subroutine does not return */ FUN_1400d1900(0,pTVar18,SVar30,pTVar33); } FUN_1400147b0((longlong)local_2bc0.pVFTable,&pTVar18->pVFTable,SVar30); } FUN_140014820((longlong)&local_2bc8,pTVar18,SVar30,pTVar33); } puVar21 = &local_2bc8; FUN_1400bc450((longlong *)&local_2b30,(longlong)puVar21); pTVar18 = local_2ba0; iVar5 = FUN_1400de5d0((longlong)local_2ba0,puVar21,SVar30,pTVar33); lVar15 = (longlong)iVar5; FUN_1400bddd0((longlong)&local_2bc8,lVar15,SVar30,pTVar33); local_cec = 200; local_cf0 = 0; local_cf8 = local_1978; local_197c = 200; local_1980 = 0; local_1988 = local_2608; if (local_2bc0.pVFTable == (void *)0x0) { uStack_2bd0 = local_2bb0; if (local_2bc0.spare == (TypeDescriptor *)0x0) { /* WARNING: Subroutine does not return */ FUN_1400d1900(0,lVar15,SVar30,pTVar33); } } else { uStack_2bd0 = *(uint *)((longlong)local_2bc0.pVFTable + 0x18); } local_2608[0].pVFTable = local_2bc0.spare; if (local_2bc0.spare == (TypeDescriptor *)0x0) { if (local_2bc0.pVFTable == (void *)0x0) { /* WARNING: Subroutine does not return */ FUN_1400d1900(0,(ulonglong)uStack_2bd0,SVar30,pTVar33); } local_2608[0].pVFTable = pTVar16; if (*(int *)((longlong)local_2bc0.pVFTable + 0x18) != 0) { local_2608[0].pVFTable = *(void **)((longlong)local_2bc0.pVFTable + 0x10); } } local_1980 = 1; local_2608[0].spare = (void *)CONCAT44(uStack_2bcc,uStack_2bd0); local_2bd8 = local_2608[0].pVFTable; FUN_14007cb60((longlong)local_1978,(longlong)local_2608,SVar30,pTVar33); if (local_1988 == (TypeDescriptor *)0x0) { FUN_14006ba50(local_2a90,(wchar_t *)PTR_u_ArrayWithExternalBuffer_is_unini_1401ad9a0,SVar30, pTVar33); /* WARNING: Subroutine does not return */ _CxxThrowException(local_2a90,(ThrowInfo *)&DAT_1401a93e8); } if (local_197c < 0) { /* WARNING: Subroutine does not return */ FUN_14006be00(); } FUN_14007cb60((longlong)local_1978,(longlong)pTVar18,SVar30,pTVar33); local_2b98.pVFTable._0_4_ = *(undefined4 *)¶m_3[2].pVFTable; local_2b98.spare = param_3[1].spare; local_2b88 = *(undefined1 *)((longlong)¶m_3[2].spare + 5); local_2b84 = *(undefined4 *)¶m_3[3].pVFTable; local_2b7f = *(undefined1 *)¶m_3[4].pVFTable; local_2b80 = 1; local_2bd8 = local_2608; local_197c = 200; local_1980 = 0; local_1988 = local_2608; FUN_1400a20e0((longlong *)&local_cf8,&local_1988,SVar30,pTVar33); plVar32 = local_2b68; local_2bd8 = local_2608; FUN_1400a1420((longlong)local_2b68); if ((undefined8 *)plVar32[0x2ae] != (undefined8 *)0x0) { pTVar16 = *(TypeDescriptor **)plVar32[0x2ae]; } pTVar18 = &local_2b98; pTVar33 = local_2608; uVar19 = 0; FUN_1400e8ed0((longlong *)pTVar16,0,(longlong)pTVar33,&pTVar18->pVFTable); FUN_14007ca50((longlong)local_2608,uVar19,pTVar33,pTVar18); if (local_cf8 == (undefined1 *)0x0) { FUN_14006ba50(local_2a48,(wchar_t *)PTR_u_ArrayWithExternalBuffer_is_unini_1401ad9a0,pTVar33, pTVar18); /* WARNING: Subroutine does not return */ _CxxThrowException(local_2a48,(ThrowInfo *)&DAT_1401a93e8); } if (local_cec < 0) { /* WARNING: Subroutine does not return */ FUN_14006be00(); } local_cf0 = 0; FUN_1400bc470((longlong *)&local_2b30); local_2bd8 = &local_2bc0; pTVar11 = (TypeDescriptor *)FUN_1400d1800((longlong *)&local_2bc0); if (local_2bc0.spare != (TypeDescriptor *)0x0) { if (local_2bac < 0) { /* WARNING: Subroutine does not return */ FUN_14006be00(); } local_2bb0 = 0; } if (pTVar24 != (TypeDescriptor *)0x0) { if ((longlong *)uVar2 == (longlong *)0x0) { pTVar11 = (TypeDescriptor *)FUN_14006cc60(pTVar24); } else { pTVar11 = (TypeDescriptor *)(**(code **)(*(longlong *)uVar2 + 0x18))(uVar2,pTVar24); } } LAB_1400b530b: if (pTVar34 != (TypeDescriptor *)0x0) { if (local_2b58 == (longlong *)0x0) { pTVar11 = (TypeDescriptor *)FUN_14006cc60(pTVar34); } else { pTVar11 = (TypeDescriptor *)(**(code **)(*local_2b58 + 0x18))(local_2b58,pTVar34); } } if (100 < local_2938) { operator_delete__(local_2948.pVFTable); pTVar11 = extraout_RAX; } if (local_2b18 != '\0') { pTVar11 = (TypeDescriptor *)FUN_14006b3e0((longlong)local_2b20); } return CONCAT71((int7)((ulonglong)pTVar11 >> 8),1); } FUN_14006cb70(plVar32,pTVar18,pTVar29,pTVar33); local_2c08 = (uint *)PTR_DAT_1401ac010; uVar4 = FUN_14006c9f0((short *)puVar1); if ((local_2c08 != (uint *)0x0) && (pTVar16 = (TypeDescriptor *)0x0, local_2c08 != (uint *)PTR_DAT_1401ac010)) { pTVar16 = (TypeDescriptor *)(ulonglong)local_2c08[-2]; } uVar6 = uVar4; if ((((int)uVar4 <= (int)pTVar16) && (uVar6 = uVar28, local_2c08 != (uint *)0x0)) && (local_2c08 != (uint *)PTR_DAT_1401ac010)) { uVar6 = local_2c08[-2]; } uVar25 = 1; if (1 < (int)uVar6) { uVar25 = uVar6; } uVar7 = 0; uVar6 = uVar7; if ((local_2c08 != (uint *)0x0) && (local_2c08 != (uint *)PTR_DAT_1401ac010)) { uVar6 = local_2c08[-2]; } if ((int)uVar6 < (int)uVar25) { if (local_2c08 == (uint *)0x0) { local_2c08 = (uint *)PTR_DAT_1401ac010; } if ((int)uVar25 < 0) { /* WARNING: Subroutine does not return */ FUN_14006be00(); } if (uVar25 == 0) { FUN_1400031e0(&local_2c08,PTR_DAT_1401ac010,pTVar16,pTVar33); } else { uVar6 = uVar7; if ((local_2c08 != (uint *)0x0) && (local_2c08 != (uint *)PTR_DAT_1401ac010)) { uVar6 = local_2c08[-2]; } if (uVar25 != uVar6) { puVar12 = (uint *)FUN_14006cbf0((longlong)(int)uVar25 * 2 + 10); if (puVar12 != (uint *)0x0) { *puVar12 = 0; puVar12[1] = 1; } *puVar12 = uVar25; uVar6 = uVar7; if ((local_2c08 != (uint *)0x0) && (local_2c08 != (uint *)PTR_DAT_1401ac010)) { uVar6 = local_2c08[-2]; } puVar22 = (uint *)PTR_DAT_1401ac010; if ((int)uVar25 < (int)uVar6) { LAB_1400b5465: if (local_2c08 != (uint *)0x0) { puVar22 = local_2c08; } } else { uVar25 = uVar28; if (local_2c08 != (uint *)0x0) { if (local_2c08 != (uint *)PTR_DAT_1401ac010) { uVar25 = local_2c08[-2]; } goto LAB_1400b5465; } } uVar26 = (ulonglong)uVar25; FUN_14006ca20(puVar12 + 2,puVar22,uVar25); FUN_1400031e0(&local_2c08,puVar22,uVar26,pTVar33); local_2c08 = puVar12 + 2; } } } FUN_140002e40(&local_2c08); puVar12 = local_2c08; if (local_2c08 == (uint *)0x0) { puVar12 = (uint *)PTR_DAT_1401ac010; } FUN_14006ca20(puVar12,puVar1,uVar4); puVar12 = local_2c08; if (local_2c08 == (uint *)0x0) { puVar12 = (uint *)PTR_DAT_1401ac010; } uVar4 = FUN_14006c9f0((short *)puVar12); uVar28 = 0; if (0 < (int)uVar4) { uVar28 = uVar4; } uVar4 = uVar7; if ((local_2c08 != (uint *)0x0) && (local_2c08 != (uint *)PTR_DAT_1401ac010)) { uVar4 = local_2c08[-2]; } if (((int)uVar4 <= (int)uVar28) && (uVar28 = uVar7, local_2c08 != (uint *)0x0)) { if (local_2c08 == (uint *)PTR_DAT_1401ac010) goto LAB_1400b551a; uVar28 = local_2c08[-2]; } if (((local_2c08 != (uint *)PTR_DAT_1401ac010) && (local_2c08 != (uint *)0x0)) && (local_2c08 + -2 != (uint *)0x0)) { local_2c08[-2] = uVar28; *(undefined2 *)((longlong)local_2c08 + (longlong)(int)uVar28 * 2) = 0; } LAB_1400b551a: local_2c00._8_8_ = (void *)0x0; local_2bf0 = (TypeDescriptor *)0x0; local_2be8 = 0; local_2be0 = 0; local_2c00._0_8_ = Proud::ByteArray::vftable; plVar32 = &local_2c08; plVar13 = FUN_140078c10((longlong *)&local_2bd8,0x12,0,plVar32,(longlong)local_2c00); lVar15 = *param_1; (**(code **)(lVar15 + 0x80))(param_1); puVar17 = (undefined8 *)local_2c00; FUN_140078360(puVar17); puVar12 = local_2c08; if (((local_2c08 != (uint *)0x0) && (local_2c08 != (uint *)PTR_DAT_1401ac010)) && (puVar22 = local_2c08 + -2, puVar22 != (uint *)0x0)) { piVar14 = (int *)FUN_14006cb70(puVar17,plVar13,lVar15,plVar32); local_2b30 = piVar14; FUN_14006b350(piVar14); local_2b28 = CONCAT31(local_2b28._1_3_,1); puVar12 = puVar12 + -1; *puVar12 = *puVar12 - 1; if (*puVar12 == 0) { FUN_14006cc60(puVar22); } FUN_14006b3e0((longlong)piVar14); } uVar26 = FUN_14006b3e0((longlong)local_2b20); return uVar26 & 0xffffffffffffff00; }