/* AgentManager_Release_x64.exe sha256 8fd8ca91725858651a7839d34257b10c2970ac16c97e60c523b8b0c983fcb186 * Ghidra 12.1.2 decompiler output for 0x1400b5fd0 FUN_1400b5fd0 * Pseudocode, not original source. */ void FUN_1400b5fd0(longlong *param_1,uint param_2,SIZE_T param_3,undefined *param_4) { undefined8 *puVar1; char cVar2; uint uVar3; uint uVar4; uint uVar5; uint uVar6; int iVar7; longlong *plVar8; longlong *plVar9; ulonglong uVar10; uint *puVar11; int *piVar12; int *piVar13; undefined **ppuVar14; undefined ***pppuVar15; longlong lVar16; longlong **pplVar17; uint *puVar18; undefined8 uVar19; uint *puVar20; uint uVar21; undefined *puVar22; undefined *puVar23; ulonglong uVar24; short *psVar25; longlong *plVar26; longlong *local_res8; uint local_res10; uint *local_res18; longlong *local_res20; undefined **local_228; undefined4 local_220; undefined2 local_21c; undefined *local_218; undefined *local_210; undefined *local_208; undefined *local_200; longlong *local_1f8; undefined1 local_1f0; undefined *local_1e8; undefined *local_1e0; undefined4 local_1d8 [2]; ulonglong local_1d0 [2]; longlong local_1c0 [2]; undefined **local_1b0; undefined8 local_1a8; undefined8 local_1a0; undefined8 local_198; undefined8 local_190; longlong local_188; longlong local_180; ulonglong local_178; undefined4 local_168; undefined **local_160; undefined8 local_158; undefined8 local_150; undefined8 local_148; undefined8 local_140; undefined **local_130; undefined4 local_128; undefined2 local_124; undefined **local_118; undefined8 local_110; undefined8 local_108; undefined8 local_100; undefined8 local_f8; int *local_e8; undefined1 local_e0; int *local_d8; undefined1 local_d0; longlong *local_c8; undefined1 local_c0; undefined8 local_b8; longlong *local_b0; undefined1 local_a8; int *local_a0; undefined1 local_98; int *local_90; undefined1 local_88; undefined **local_80; undefined1 local_78; longlong *local_70; local_b8 = 0xfffffffffffffffe; plVar26 = (longlong *)0x0; uVar5 = 0; plVar8 = plVar26; if ((undefined8 *)param_1[0x2ae] != (undefined8 *)0x0) { plVar8 = *(longlong **)param_1[0x2ae]; } if ((char)plVar8[0x10] != '\x01') { return; } plVar8 = plVar26; if ((undefined8 *)param_1[0x2ae] != (undefined8 *)0x0) { plVar8 = *(longlong **)param_1[0x2ae]; } uVar19 = 0; local_res10 = param_2; FUN_1400c8280(plVar8,'\0'); local_1d0[0] = 0; local_1c0[0] = 0; local_1c0[1] = 0; local_1a8 = 0; local_1a0 = 0; local_198 = 0; local_190 = 0; local_1b0 = Proud::ByteArray::vftable; local_178 = 0; local_180 = 0; local_188 = 0; local_158 = 0; local_150 = 0; local_148 = 0; local_140 = 0; local_160 = Proud::ByteArray::vftable; local_130 = Proud::AddrPort::vftable; local_128 = 0; local_124 = 0; local_110 = 0; local_108 = 0; local_100 = 0; local_f8 = 0; local_118 = Proud::ByteArray::vftable; local_res20 = (longlong *)FUN_14003e840(0x60); plVar8 = plVar26; if (local_res20 != (longlong *)0x0) { plVar8 = FUN_140071b80(local_res20,uVar19,param_3,param_4); } if (plVar8 == (longlong *)0x0) { local_res20 = (longlong *)0x0; plVar9 = plVar26; } else { plVar9 = (longlong *)FUN_14003e840(0x48); local_70 = plVar9; if (plVar9 != (longlong *)0x0) { local_res20 = plVar9; uVar10 = FUN_140094860(); param_3 = CONCAT71((int7)(param_3 >> 8),1); FUN_14003cf60((undefined4 *)plVar9,uVar10 & 0xffffffff,param_3,param_4); } local_res20 = plVar9; FUN_14003d040((int *)plVar9); plVar9[8] = 1; plVar9[7] = (longlong)plVar8; FUN_14003d0d0((longlong)plVar9); } pplVar17 = &local_res20; FUN_14005d770(local_1d0,(ulonglong *)pplVar17,param_3,param_4); if (plVar9 != (longlong *)0x0) { local_1f8 = plVar9; FUN_14003d040((int *)plVar9); local_1f0 = 1; plVar8 = plVar9 + 8; *plVar8 = *plVar8 + -1; if (*plVar8 == 0) { FUN_14003d0d0((longlong)plVar9); local_1f0 = 0; FUN_140038210((undefined4 *)plVar9,pplVar17,param_3,param_4); } else { FUN_14003d0d0((longlong)plVar9); local_1f0 = 0; } } local_1d8[0] = 0xd; plVar8 = plVar26; if (local_1d0[0] != 0) { plVar8 = *(longlong **)(local_1d0[0] + 0x38); } *(undefined4 *)plVar8 = 0x1c; local_168 = 1; FUN_1400b1d40(param_1,local_1d8,param_3,param_4); plVar8 = plVar26; if ((undefined8 *)param_1[0x2ae] != (undefined8 *)0x0) { plVar8 = *(longlong **)param_1[0x2ae]; } puVar1 = (undefined8 *)param_1[0x2ae]; if ((int)plVar8[0x28] < DAT_14016f088) { plVar8 = plVar26; if (puVar1 != (undefined8 *)0x0) { plVar8 = (longlong *)*puVar1; } plVar8[0x20] = DAT_140176190; plVar8 = plVar26; if ((undefined8 *)param_1[0x2ae] != (undefined8 *)0x0) { plVar8 = *(longlong **)param_1[0x2ae]; } *(int *)(plVar8 + 0x28) = (int)plVar8[0x28] + 1; } else { plVar8 = plVar26; if (puVar1 != (undefined8 *)0x0) { plVar8 = (longlong *)*puVar1; } plVar8[0x20] = DAT_14016f078; } if (((char)param_1[0x2f2] == '\0') && ((int)param_1[0xd9] == 0)) goto LAB_1400b6922; FUN_1400a8ae0((longlong)param_1,(longlong *)&local_210,param_3,param_4); plVar8 = param_1 + 0xe; (**(code **)(*plVar8 + 0x1c0))(plVar8); if (((longlong *)param_1[0x2a4] != (longlong *)0x0) && ((lVar16 = *(longlong *)param_1[0x2a4], lVar16 != 0 && (lVar16 != 0x40)))) { (**(code **)(*plVar8 + 0x1c0))(plVar8); } if ((((longlong *)param_1[0x2a4] == (longlong *)0x0) || (lVar16 = *(longlong *)param_1[0x2a4], lVar16 == 0)) || (lVar16 == 0x40)) { local_220 = DAT_14016f3d0; local_21c = DAT_14016f3d4; } else { plVar9 = plVar26; if (lVar16 != 0) { plVar9 = (longlong *)(lVar16 + -0x40); } local_220 = (undefined4)plVar9[0x26]; local_21c = *(undefined2 *)((longlong)plVar9 + 0x134); } local_228 = Proud::AddrPort::vftable; ppuVar14 = &local_200; pppuVar15 = &local_228; plVar9 = FUN_1400420f0((longlong)pppuVar15,(longlong *)ppuVar14,param_3,param_4); psVar25 = (short *)*plVar9; if ((short *)*plVar9 == (short *)0x0) { psVar25 = (short *)PTR_DAT_14016f010; } FUN_14003e7c0(pppuVar15,ppuVar14,param_3,param_4); puVar20 = (uint *)PTR_DAT_14016f010; local_res18 = (uint *)PTR_DAT_14016f010; uVar3 = FUN_14003e620(psVar25); plVar9 = plVar26; if ((puVar20 != (uint *)0x0) && (plVar9 = (longlong *)0x0, puVar20 != (uint *)PTR_DAT_14016f010)) { plVar9 = (longlong *)(ulonglong)*(uint *)((longlong)puVar20 + -8); } uVar4 = uVar3; if ((((int)uVar3 <= (int)plVar9) && (uVar4 = uVar5, puVar20 != (uint *)0x0)) && (puVar20 != (uint *)PTR_DAT_14016f010)) { uVar4 = *(uint *)((longlong)puVar20 + -8); } uVar21 = 1; if (1 < (int)uVar4) { uVar21 = uVar4; } uVar4 = uVar5; if ((puVar20 != (uint *)0x0) && (puVar20 != (uint *)PTR_DAT_14016f010)) { uVar4 = *(uint *)((longlong)puVar20 + -8); } uVar6 = 0; if ((int)uVar4 < (int)uVar21) { if (puVar20 == (uint *)0x0) { puVar20 = (uint *)PTR_DAT_14016f010; } local_res18 = puVar20; if ((int)uVar21 < 0) { /* WARNING: Subroutine does not return */ FUN_14003dec0(); } if (uVar21 == 0) { FUN_140002190((longlong *)&local_res18,plVar9,param_3,param_4); } else { uVar4 = uVar6; if ((puVar20 != (uint *)0x0) && (puVar20 != (uint *)PTR_DAT_14016f010)) { uVar4 = puVar20[-2]; } if (uVar21 != uVar4) { puVar11 = (uint *)FUN_14003e840((longlong)(int)uVar21 * 2 + 10); if (puVar11 != (uint *)0x0) { *puVar11 = 0; puVar11[1] = 1; } *puVar11 = uVar21; uVar4 = uVar6; if ((puVar20 != (uint *)0x0) && (puVar20 != (uint *)PTR_DAT_14016f010)) { uVar4 = puVar20[-2]; } puVar18 = (uint *)PTR_DAT_14016f010; if ((int)uVar21 < (int)uVar4) { LAB_1400b646a: if (puVar20 != (uint *)0x0) { puVar18 = puVar20; } } else { uVar21 = uVar5; if (puVar20 != (uint *)0x0) { if (puVar20 != (uint *)PTR_DAT_14016f010) { uVar21 = puVar20[-2]; } goto LAB_1400b646a; } } uVar10 = (ulonglong)uVar21; FUN_14003e650(puVar11 + 2,puVar18,uVar21); FUN_140002190((longlong *)&local_res18,puVar18,uVar10,param_4); local_res18 = puVar11 + 2; } } } FUN_140001df0((longlong *)&local_res18); puVar20 = local_res18; puVar11 = local_res18; if (local_res18 == (uint *)0x0) { puVar11 = (uint *)PTR_DAT_14016f010; } puVar18 = (uint *)(ulonglong)uVar3; FUN_14003e650(puVar11,psVar25,uVar3); puVar11 = puVar20; if (puVar20 == (uint *)0x0) { puVar11 = (uint *)PTR_DAT_14016f010; } uVar5 = FUN_14003e620((short *)puVar11); plVar9 = plVar26; if (0 < (int)uVar5) { plVar9 = (longlong *)(ulonglong)uVar5; } if ((puVar20 != (uint *)0x0) && (puVar20 != (uint *)PTR_DAT_14016f010)) { uVar6 = puVar20[-2]; } if (((int)plVar9 < (int)uVar6) || (plVar9 = plVar26, puVar20 == (uint *)0x0)) { LAB_1400b6506: if (((puVar20 != (uint *)PTR_DAT_14016f010) && (puVar20 != (uint *)0x0)) && (puVar18 = puVar20 + -2, puVar18 != (uint *)0x0)) { *puVar18 = (uint)plVar9; *(undefined2 *)((longlong)puVar20 + (longlong)(int)(uint)plVar9 * 2) = 0; } } else if (puVar20 != (uint *)PTR_DAT_14016f010) { plVar9 = (longlong *)(ulonglong)puVar20[-2]; goto LAB_1400b6506; } if (((local_200 != (undefined *)0x0) && (local_200 != PTR_DAT_14016f010)) && (local_200 + -8 != (undefined *)0x0)) { piVar12 = (int *)FUN_14003e7c0(PTR_DAT_14016f010,plVar9,puVar18,param_4); local_a0 = piVar12; FUN_14003d040(piVar12); local_98 = 1; piVar13 = (int *)(local_200 + -4); *piVar13 = *piVar13 + -1; if (*piVar13 == 0) { FUN_14003e8b0(local_200 + -8); } FUN_14003d0d0((longlong)piVar12); } local_res8 = (longlong *)((ulonglong)local_res8 & 0xffffffffffffff00); local_200 = PTR_DAT_14016f010; cVar2 = (**(code **)(*plVar8 + 0x158))(plVar8,&local_res8); uVar5 = 1; if (cVar2 != '\0') { uVar5 = 1; if ((char)local_res8 == '\0') { uVar5 = 2; } } plVar8 = (longlong *)(**(code **)(*plVar8 + 0xb0))(plVar8,&local_1e8); piVar13 = (int *)*plVar8; if (piVar13 == (int *)0x0) { iVar7 = 0; } else if (piVar13 == (int *)PTR_DAT_14016f010) { iVar7 = 0; } else { iVar7 = piVar13[-2]; } puVar23 = PTR_DAT_14016f010; if (((local_1e8 != (undefined *)0x0) && (local_1e8 != PTR_DAT_14016f010)) && (local_1e8 + -8 != (undefined *)0x0)) { piVar13 = (int *)FUN_14003e7c0(piVar13,PTR_DAT_14016f010,puVar18,param_4); local_e8 = piVar13; FUN_14003d040(piVar13); local_e0 = 1; piVar12 = (int *)(local_1e8 + -4); *piVar12 = *piVar12 + -1; if (*piVar12 == 0) { FUN_14003e8b0(local_1e8 + -8); } FUN_14003d0d0((longlong)piVar13); } if (iVar7 != 0) { uVar5 = uVar5 + 1; } FUN_14003e7c0(piVar13,puVar23,puVar18,param_4); local_218 = PTR_DAT_14016f010; FUN_14003e4d0((longlong *)&local_1e0,puVar23,puVar18,param_4); (**(code **)(param_1[0xe] + 0xb0))(); if (param_1[0xbb] == 0) { lVar16 = 0; } else { lVar16 = *(longlong *)(param_1[0xbb] + 0x38); } uVar24 = (ulonglong)*(uint *)(lVar16 + 0x2a8); uVar10 = (ulonglong)local_res10; ppuVar14 = &local_218; FUN_140029b80((longlong *)ppuVar14, L"(first chance) to-server UDP punch lost##Reason:%d##CliInstCount=%d##RecentElapTime=%3.3f##DisconnedCount=%d##recv count=%d##last ok recv interval=%3.3f##Recurred:%d##LocalIP:%s##UDP kept time:%3.3f##Time diff since RecvIssue:%3.3f##NAT name=%s##%s##Process=%s" ,uVar10,uVar24); if (((local_208 != (undefined *)0x0) && (local_208 != PTR_DAT_14016f010)) && (local_208 + -8 != (undefined *)0x0)) { ppuVar14 = (undefined **)FUN_14003e7c0(ppuVar14,PTR_DAT_14016f010,uVar10,uVar24); local_80 = ppuVar14; FUN_14003d040((int *)ppuVar14); local_78 = 1; piVar13 = (int *)(local_208 + -4); *piVar13 = *piVar13 + -1; if (*piVar13 == 0) { FUN_14003e8b0(local_208 + -8); } FUN_14003d0d0((longlong)ppuVar14); } local_208 = PTR_DAT_14016f010; if (((local_1e0 != (undefined *)0x0) && (local_1e0 != PTR_DAT_14016f010)) && (local_1e0 + -8 != (undefined *)0x0)) { piVar12 = (int *)FUN_14003e7c0(ppuVar14,PTR_DAT_14016f010,uVar10,uVar24); local_d8 = piVar12; FUN_14003d040(piVar12); local_d0 = 1; piVar13 = (int *)(local_1e0 + -4); *piVar13 = *piVar13 + -1; if (*piVar13 == 0) { FUN_14003e8b0(local_1e0 + -8); } FUN_14003d0d0((longlong)piVar12); } puVar23 = local_218; puVar22 = &DAT_14012e3f0; uVar10 = (ulonglong)uVar5; plVar8 = param_1; param_4 = local_218; FUN_1400aa4c0((longlong)param_1,uVar10,L"%s",local_218); if (((puVar23 != (undefined *)0x0) && (puVar23 != PTR_DAT_14016f010)) && (puVar23 + -8 != (undefined *)0x0)) { plVar8 = (longlong *)FUN_14003e7c0(plVar8,uVar10,puVar22,param_4); local_c8 = plVar8; FUN_14003d040((int *)plVar8); local_c0 = 1; piVar13 = (int *)(puVar23 + -4); *piVar13 = *piVar13 + -1; if (*piVar13 == 0) { FUN_14003e8b0(puVar23 + -8); } FUN_14003d0d0((longlong)plVar8); } puVar20 = local_res18; if (((local_res18 != (uint *)0x0) && (local_res18 != (uint *)PTR_DAT_14016f010)) && (puVar11 = local_res18 + -2, puVar11 != (uint *)0x0)) { plVar8 = (longlong *)FUN_14003e7c0(plVar8,uVar10,puVar22,param_4); local_b0 = plVar8; FUN_14003d040((int *)plVar8); local_a8 = 1; puVar20 = puVar20 + -1; *puVar20 = *puVar20 - 1; if (*puVar20 == 0) { FUN_14003e8b0(puVar11); } FUN_14003d0d0((longlong)plVar8); } if (((local_210 != (undefined *)0x0) && (local_210 != PTR_DAT_14016f010)) && (local_210 + -8 != (undefined *)0x0)) { piVar12 = (int *)FUN_14003e7c0(plVar8,uVar10,puVar22,param_4); local_90 = piVar12; FUN_14003d040(piVar12); local_88 = 1; piVar13 = (int *)(local_210 + -4); *piVar13 = *piVar13 + -1; if (*piVar13 == 0) { FUN_14003e8b0(local_210 + -8); } FUN_14003d0d0((longlong)piVar12); } LAB_1400b6922: puVar23 = &DAT_140177f90; uVar19 = 1; (**(code **)(param_1[0x303] + 0x50))(); FUN_140049e40(&local_118); FUN_140049e40(&local_160); local_res8 = &local_188; FUN_14008a320(&local_188); if (local_180 != 0) { if ((longlong)local_178 < 0) { /* WARNING: Subroutine does not return */ FUN_14003dec0(); } local_178 = local_178 & 0xffffffff00000000; } FUN_140049e40(&local_1b0); FUN_1400641e0(local_1c0 + 1,uVar19,puVar23,param_4); FUN_140064160(local_1c0,uVar19,puVar23,param_4); FUN_140038280((longlong *)local_1d0,uVar19,puVar23,param_4); return; }