BgpGxFindSubRectangle
INT64 __fastcall BgpGxFindSubRectangle(UINT64 *a1, INT64 a2, _QWORD *a3, UINT64 *a4, _BYTE *a5){
UINT64 *v5;
__int64 *v6;
UINT64 *v7;
unsigned int v8;
unsigned int v9;
unsigned int v10;
unsigned int v11;
UINT64 v12;
unsigned int v13;
unsigned int v14;
unsigned int v15;
unsigned int v16;
unsigned int v17;
unsigned int i;
int v19;
__int64 v20;
INT64 result;
unsigned int v22;
UINT64 v23;
UINT8 *v24;
UINT8 *v25;
__int64 v26;
unsigned int v27;
unsigned int v28;
unsigned int v29;
unsigned int v30;
unsigned int v31;
unsigned int v32;
__int64 v33;
unsigned int v34;
unsigned int v35;
unsigned int v36;
unsigned int v37;
char v38;
int v39[24];
v39[2] = 0;
v5 = a4;
v6 = a3;
v7 = a1;
if( !a4 )
return 3221225485i64;
if( !a1 )
return 3221225485i64;
v8 = *((_DWORD *)a1 + 2);
if( ((v8 - 24) & 0xFFFFFFF7) != 0 )
return 3221225485i64;
v9 = *(_DWORD *)a1;
v10 = *((_DWORD *)a1 + 1);
v11 = 0;
v12 = a1[3];
v13 = 0;
v14 = v8 >> 3;
v15 = v9;
v38 = 0;
v16 = v10;
if( (_DWORD)a2 == -16777216 && v14 == 4 )
{
v17 = 0;
if( !v9 )
{
LABEL_33:
*a5 = 1;
*a3 = 0i64;
return 0i64;
}
do
{
for( i = 0; i < v10; ++i )
{
if( *(_DWORD *)v12 )
{
v38 = 1;
v27 = i;
if( i >= v16 )
v27 = v16;
v16 = v27;
v28 = i;
if( i <= v13 )
v28 = v13;
v13 = v28;
v29 = v17;
if( v17 >= v15 )
v29 = v15;
v15 = v29;
v30 = v17;
if( v17 <= v11 )
v30 = v11;
v11 = v30;
}
v12 += 4i64;
}
++v17;
}
while( v17 < v9 );
}
else
{
v31 = 0;
if( !v9 )
goto LABEL_33;
do
{
v32 = 0;
if( v10 )
{
v33 = v14;
do
{
if( *(_BYTE *)(v12 + 2) != BYTE2(a2) || *(_WORD *)v12 != (_WORD)a2 )
{
v38 = 1;
v34 = v32;
if( v32 >= v16 )
v34 = v16;
v16 = v34;
v35 = v32;
if( v32 <= v13 )
v35 = v13;
v13 = v35;
v36 = v31;
if( v31 >= v15 )
v36 = v15;
v15 = v36;
v37 = v31;
if( v31 <= v11 )
v37 = v11;
v11 = v37;
v33 = v14;
}
v12 += v33;
++v32;
}
while( v32 < v10 );
}
++v31;
}
while( v31 < v9 );
v7 = a1;
v5 = a4;
v6 = a3;
}
if( !v38 )
goto LABEL_33;
v19 = v13 - v16 + 1;
v20 = v11 - v15 + 1;
v39[0] = v19;
v39[1] = v20;
if( !v15 && !v16 && v19 == v10 && (_DWORD)v20 == v9 )
return 3221226021i64;
result = BgpGxRectangleCreate(v39, v8, v6);
if( (int)result >= 0 )
{
v22 = v14 * *((_DWORD *)v7 + 1);
v23 = v14 * v19;
v24 = (UINT8 *)(v7[3] + v22 * v15 + v16 * v14);
v25 = *(UINT8 **)(*a3 + 24i64);
if( (_DWORD)v20 )
{
v26 = v22;
do
{
memmove(v25, v24, v23);
v25 += v23;
v24 += v26;
--v20;
}
while( v20 );
}
*(_DWORD *)v5 = v16;
*((_DWORD *)v5 + 1) = v15;
*a5 = 0;
return 0i64;
}
return result;
}Referenced by:
AnFwDisplayFade