_BYTE *__fastcall LogoRenderScanline(int a1, int Scanline, int a3, int a4)
{
int v4; // esi
int v5; // ebx
_BYTE *Pool; // edi
_BYTE *result; // eax
signed int n7; // ebp
int (__cdecl **v9)(int, int, _BYTE *); // eax
int v10; // esi
__int64 v11; // rax
int v12; // ecx
int n0x7FFFFFFF_1; // eax
int v15; // [esp+10h] [ebp-14h]
int n0x7FFFFFFF; // [esp+14h] [ebp-10h]
int v17; // [esp+18h] [ebp-Ch]
_BYTE *Pool_1; // [esp+1Ch] [ebp-8h]
v4 = a1;
v5 = a1 * a1;
n0x7FFFFFFF = 0x7FFFFFFF;
Pool = (_BYTE *)PeiAllocatePool((void *)(a1 * a1));
result = 0;
if ( Pool )
{
Pool_1 = 0;
n7 = 0;
v9 = (int (__cdecl **)(int, int, _BYTE *))(a4 + 3392);
v17 = a4 + 3392;
do
{
v10 = (*v9)(v4, Scanline, Pool);
v11 = (v5 + 200 * (v10 + ImageRenderDitherLine(a1, (int)Pool, n7, a3, a4))) / v5;
v12 = ((int)v11 - HIDWORD(v11)) >> 1;
v15 = v12 - 50;
if ( v12 - 50 <= 0 )
v15 = (-50 - v12) / 5;
v4 = a1;
n0x7FFFFFFF_1 = 10 * v15 + ImageRenderLineConvert(a1, Pool);
if ( n0x7FFFFFFF_1 < n0x7FFFFFFF )
{
n0x7FFFFFFF = n0x7FFFFFFF_1;
Pool_1 = Pool;
Pool = (_BYTE *)PeiAllocatePool((void *)v5);
if ( !Pool )
break;
}
++n7;
v9 = (int (__cdecl **)(int, int, _BYTE *))(v17 + 4);
v17 += 4;
}
while ( n7 < 8 );
return Pool_1;
}
return result;
}