mirror of
https://github.com/1dot13/source.git
synced 2026-07-22 13:40:22 +02:00
941 lines
20 KiB
C++
941 lines
20 KiB
C++
/*
|
|
*
|
|
* This file contains code for the AI linked list which
|
|
* (in TURNBASED COMBAT) keeps track of which AI guy should
|
|
* be handled next.
|
|
*
|
|
* The basic plan is to insert everyone into this list by their
|
|
* alert status at the beginning of the turn, in descending order
|
|
* (BLACK, then RED, then YELLOW, then GREEN)
|
|
*
|
|
*/
|
|
|
|
#include "AIList.h"
|
|
#include "Overhead.h"
|
|
#include "DEBUG.H"
|
|
#include "AIInternals.h"
|
|
#include "ai.h"
|
|
#include "opplist.h"
|
|
#include "Interface.h"
|
|
#include "Tactical Save.h"
|
|
|
|
#define AI_LIST_SIZE TOTAL_SOLDIERS
|
|
|
|
AILIST gAIList[ AI_LIST_SIZE ];
|
|
AILIST * gpFirstAIListEntry = NULL;
|
|
|
|
BOOLEAN SatisfiesAIListConditions( SOLDIERTYPE * pSoldier, UINT16 * pubDoneCount, BOOLEAN fDoRandomChecks );
|
|
|
|
void ClearAIList( void )
|
|
{
|
|
UINT16 ubLoop;
|
|
|
|
for ( ubLoop = 0; ubLoop < AI_LIST_SIZE; ubLoop++ )
|
|
{
|
|
gAIList[ ubLoop ].ubID = NOBODY;
|
|
gAIList[ ubLoop ].bPriority = 0;
|
|
gAIList[ ubLoop ].pNext = NULL;
|
|
}
|
|
gpFirstAIListEntry = NULL; // ??
|
|
}
|
|
|
|
void DeleteAIListEntry( AILIST * pEntry )
|
|
{
|
|
pEntry->ubID = NOBODY;
|
|
pEntry->bPriority = 0;
|
|
pEntry->pNext = NULL;
|
|
}
|
|
|
|
SoldierID FindEmptyAIListEntry( void )
|
|
{
|
|
UINT16 ubLoop;
|
|
|
|
for ( ubLoop = 0; ubLoop < AI_LIST_SIZE; ubLoop++ )
|
|
{
|
|
if ( gAIList[ ubLoop ].ubID == NOBODY )
|
|
{
|
|
return( ubLoop );
|
|
}
|
|
}
|
|
AssertMsg( 0, "Fatal error: Could not find empty AI list entry." );
|
|
return( AI_LIST_SIZE );
|
|
}
|
|
|
|
AILIST * CreateNewAIListEntry( UINT16 ubNewEntry, SoldierID ubID, INT8 bPriority )
|
|
{
|
|
gAIList[ ubNewEntry ].ubID = ubID;
|
|
gAIList[ ubNewEntry ].bPriority = bPriority;
|
|
gAIList[ ubNewEntry ].pNext = NULL;
|
|
return( &(gAIList[ ubNewEntry ]) );
|
|
}
|
|
|
|
SoldierID RemoveFirstAIListEntry( void )
|
|
{
|
|
AILIST *pOldFirstEntry;
|
|
SoldierID ubID;
|
|
|
|
while ( gpFirstAIListEntry != NULL)
|
|
{
|
|
// record pointer to start of list, and advance head ptr
|
|
pOldFirstEntry = gpFirstAIListEntry;
|
|
gpFirstAIListEntry = gpFirstAIListEntry->pNext;
|
|
|
|
// record ID, and delete old now unused entry
|
|
ubID = pOldFirstEntry->ubID;
|
|
DeleteAIListEntry( pOldFirstEntry );
|
|
|
|
// make sure conditions still met
|
|
if ( SatisfiesAIListConditions( ubID, NULL, FALSE ) )
|
|
{
|
|
return( ubID );
|
|
}
|
|
}
|
|
|
|
return( NOBODY );
|
|
}
|
|
|
|
void RemoveAIListEntryForID( SoldierID ubID )
|
|
{
|
|
AILIST * pEntry;
|
|
AILIST * pPrevEntry;
|
|
|
|
pEntry = gpFirstAIListEntry;
|
|
pPrevEntry = NULL;
|
|
|
|
while( pEntry != NULL )
|
|
{
|
|
if ( pEntry->ubID == ubID )
|
|
{
|
|
if ( pEntry == gpFirstAIListEntry )
|
|
{
|
|
RemoveFirstAIListEntry();
|
|
}
|
|
else
|
|
{
|
|
pPrevEntry->pNext = pEntry->pNext;
|
|
DeleteAIListEntry( pEntry );
|
|
}
|
|
return;
|
|
}
|
|
pPrevEntry = pEntry;
|
|
pEntry = pEntry->pNext;
|
|
}
|
|
// none found, that's okay
|
|
}
|
|
|
|
BOOLEAN InsertIntoAIList( SoldierID ubID, INT8 bPriority )
|
|
{
|
|
SoldierID ubNewEntry;
|
|
AILIST * pEntry, * pNewEntry, * pPrevEntry = NULL;
|
|
|
|
ubNewEntry = FindEmptyAIListEntry();
|
|
|
|
pNewEntry = CreateNewAIListEntry( ubNewEntry, ubID, bPriority );
|
|
|
|
// look through the list now to see where to insert the entry
|
|
if (gpFirstAIListEntry == NULL)
|
|
{
|
|
// empty list!
|
|
gpFirstAIListEntry = pNewEntry;
|
|
// new entry's next ptr is null already
|
|
return( TRUE );
|
|
}
|
|
else
|
|
{
|
|
pEntry = gpFirstAIListEntry;
|
|
do
|
|
{
|
|
if ( bPriority > pEntry->bPriority )
|
|
{
|
|
// insert before this entry
|
|
pNewEntry->pNext = pEntry;
|
|
if (pEntry == gpFirstAIListEntry)
|
|
{
|
|
// inserting at head of list
|
|
gpFirstAIListEntry = pNewEntry;
|
|
}
|
|
else
|
|
{
|
|
Assert(pPrevEntry != NULL);
|
|
pPrevEntry->pNext = pNewEntry;
|
|
}
|
|
return( TRUE );
|
|
}
|
|
else if (pEntry->pNext == NULL)
|
|
{
|
|
// end of list!
|
|
pEntry->pNext = pNewEntry;
|
|
return( TRUE );
|
|
}
|
|
pPrevEntry = pEntry;
|
|
pEntry = pEntry->pNext;
|
|
AssertMsg( pEntry != gpFirstAIListEntry, "Fatal error: Loop in AI list!" );
|
|
}
|
|
while( pEntry != NULL );
|
|
}
|
|
|
|
// I don't know how the heck we would get here...
|
|
return( FALSE );
|
|
}
|
|
|
|
BOOLEAN SatisfiesAIListConditions( SOLDIERTYPE * pSoldier, UINT16 * pubDoneCount, BOOLEAN fDoRandomChecks )
|
|
{
|
|
if ( (gTacticalStatus.bBoxingState == BOXING) && !(pSoldier->flags.uiStatusFlags & SOLDIER_BOXER) )
|
|
{
|
|
return( FALSE );
|
|
}
|
|
|
|
if ( ! ( pSoldier->bActive && pSoldier->bInSector ) )
|
|
{
|
|
// the check for
|
|
return( FALSE );
|
|
}
|
|
|
|
if ( ! ( pSoldier->stats.bLife >= OKLIFE && pSoldier->bBreath >= OKBREATH ) )
|
|
{
|
|
return( FALSE );
|
|
}
|
|
|
|
if ( pSoldier->aiData.bMoved )
|
|
{
|
|
if ( pSoldier->bActionPoints <= 1 && pubDoneCount )
|
|
{
|
|
(*pubDoneCount)++;
|
|
}
|
|
return( FALSE );
|
|
}
|
|
|
|
// do we need to re-evaluate alert status here?
|
|
DecideAlertStatus( pSoldier );
|
|
|
|
// if we are dealing with the civ team and this person
|
|
// hasn't heard any gunfire, handle only 1 time in 10
|
|
if (PTR_CIVILIAN)
|
|
{
|
|
if ( pSoldier->ubBodyType == CROW || pSoldier->ubBodyType == COW )
|
|
{
|
|
// don't handle cows and crows in TB!
|
|
return( FALSE );
|
|
}
|
|
|
|
// if someone in a civ group is neutral but the civ group is non-neutral, should be handled all the time
|
|
if ( pSoldier->aiData.bNeutral && (pSoldier->ubCivilianGroup == NON_CIV_GROUP || gTacticalStatus.fCivGroupHostile[pSoldier->ubCivilianGroup] == CIV_GROUP_NEUTRAL ) )
|
|
{
|
|
if ( pSoldier->aiData.bAlertStatus < STATUS_RED )
|
|
{
|
|
// unalerted, barely handle
|
|
if ( fDoRandomChecks && PreRandom( 10 ) && !(pSoldier->ubQuoteRecord) )
|
|
{
|
|
return( FALSE );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
// heard gunshots
|
|
if ( pSoldier->flags.uiStatusFlags & SOLDIER_COWERING )
|
|
{
|
|
if ( pSoldier->bVisible == TRUE )
|
|
{
|
|
// if have profile, don't handle, don't want them running around
|
|
if ( pSoldier->ubProfile != NO_PROFILE )
|
|
{
|
|
return( FALSE );
|
|
}
|
|
// else don't handle much
|
|
if ( fDoRandomChecks && PreRandom( 3 ) )
|
|
{
|
|
return( FALSE );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
// never handle
|
|
return( FALSE );
|
|
}
|
|
}
|
|
else if ( pSoldier->ubBodyType == COW || pSoldier->ubBodyType == CRIPPLECIV )
|
|
{
|
|
// don't handle much
|
|
if ( fDoRandomChecks && PreRandom( 3 ) )
|
|
{
|
|
return( FALSE );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
// non-neutral civs should be handled all the time, right?
|
|
// reset last action if cowering
|
|
|
|
if ( pSoldier->flags.uiStatusFlags & SOLDIER_COWERING )
|
|
{
|
|
pSoldier->aiData.bLastAction = AI_ACTION_NONE;
|
|
}
|
|
|
|
}
|
|
|
|
return( TRUE );
|
|
}
|
|
|
|
BOOLEAN MoveToFrontOfAIList( SoldierID ubID )
|
|
{
|
|
// we'll have to fake this guy's alert status (in the list) to be the same as the current
|
|
// front of the list
|
|
INT8 bPriority;
|
|
SoldierID ubNewEntry;
|
|
AILIST *pNewEntry;
|
|
|
|
if ( !SatisfiesAIListConditions( ubID, NULL, FALSE ) )
|
|
{
|
|
// can't do dat!
|
|
return( FALSE );
|
|
}
|
|
|
|
RemoveAIListEntryForID( ubID );
|
|
|
|
if (gpFirstAIListEntry == NULL)
|
|
{
|
|
return( InsertIntoAIList( ubID, MAX_AI_PRIORITY ) );
|
|
}
|
|
else
|
|
{
|
|
bPriority = gpFirstAIListEntry->bPriority;
|
|
ubNewEntry = FindEmptyAIListEntry();
|
|
pNewEntry = CreateNewAIListEntry( ubNewEntry, ubID, bPriority );
|
|
|
|
// insert at front
|
|
pNewEntry->pNext = gpFirstAIListEntry;
|
|
gpFirstAIListEntry = pNewEntry;
|
|
return( TRUE );
|
|
}
|
|
}
|
|
|
|
BOOLEAN BuildAIListForTeam( INT8 bTeam )
|
|
{
|
|
// loop through all non-player-team guys and add to list
|
|
UINT32 uiLoop;
|
|
BOOLEAN fInsertRet;
|
|
SOLDIERTYPE * pSoldier;
|
|
BOOLEAN fRet = FALSE;
|
|
UINT16 ubCount = 0;
|
|
UINT16 ubDoneCount = 0;
|
|
INT8 bPriority;
|
|
|
|
// this team is being given control so reset their muzzle flashes
|
|
TurnOffTeamsMuzzleFlashes( bTeam );
|
|
|
|
// clear the AI list
|
|
ClearAIList();
|
|
|
|
// create a new list
|
|
for( uiLoop = 0; uiLoop < guiNumMercSlots; uiLoop++ )
|
|
{
|
|
// non-null merc slot ensures active
|
|
pSoldier = MercSlots[ uiLoop ];
|
|
if ( pSoldier && pSoldier->bTeam == bTeam )
|
|
{
|
|
if ( !SatisfiesAIListConditions( pSoldier, &ubDoneCount, TRUE ) )
|
|
{
|
|
continue;
|
|
}
|
|
|
|
bPriority = pSoldier->aiData.bAlertStatus;
|
|
if ( pSoldier->bVisible == TRUE )
|
|
{
|
|
bPriority += 3;
|
|
}
|
|
|
|
fInsertRet = InsertIntoAIList( pSoldier->ubID, bPriority );
|
|
if (fInsertRet == FALSE)
|
|
{
|
|
// wtf???
|
|
break;
|
|
}
|
|
else
|
|
{
|
|
fRet = TRUE;
|
|
ubCount++;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (fRet && ubCount > 0)
|
|
{
|
|
InitEnemyUIBar( ubCount, ubDoneCount );
|
|
}
|
|
return( fRet );
|
|
}
|
|
|
|
UINT8 gubEncryptionArray1[ BASE_NUMBER_OF_ROTATION_ARRAYS * 3 ][ NEW_ROTATION_ARRAY_SIZE ] =
|
|
{
|
|
{
|
|
11,129,18,136,163,80,128,
|
|
53,174,146,188,240,208,162,
|
|
127,192,251,6,52,128,119,
|
|
123,234,131,60,66,171,237,
|
|
89,192,17,37,139,20,185,
|
|
48,218,176,116,87,91,156,
|
|
166,224,215,100,237,71,157
|
|
},
|
|
|
|
{
|
|
99,93,179,25,113,109,38,
|
|
135,144,248,17,108,178,84,
|
|
210,254,54,240,209,92,35,
|
|
121,166,153,203,239,27,134,
|
|
231,193,97,73,188,59,87,
|
|
146,111,103,48,161,25,196,
|
|
84,201,179,208,220,189,113
|
|
},
|
|
|
|
{
|
|
217,122,77,162,22,25,203,
|
|
190,115,43,235,154,27,227,
|
|
44,125,34,58,157,17,83,
|
|
26,63,221,159,135,149,85,
|
|
26,32,201,22,253,189,250,
|
|
113,185,171,252,214,115,41,
|
|
65,49,3,174,27,220,206
|
|
},
|
|
|
|
{
|
|
180,29,63,146,101,192,164,
|
|
128,7,28,111,172,125,203,
|
|
63,77,184,220,27,184,98,
|
|
224,64,156,178,229,167,105,
|
|
169,147,215,103,168,25,40,
|
|
114,156,45,253,198,179,207,
|
|
35,235,225,20,205,34,14
|
|
},
|
|
|
|
{
|
|
144,113,83,76,208,239,2,
|
|
236,97,66,38,195,185,52,
|
|
121,123,196,66,34,78,50,
|
|
66,57,247,79,216,38,63,
|
|
155,107,62,234,218,142,175,
|
|
125,209,159,31,135,99,143,
|
|
250,243,90,127,249,32,121
|
|
},
|
|
|
|
{
|
|
76,189,22,40,143,9,197,
|
|
91,66,142,145,3,138,202,
|
|
4,170,214,219,20,140,212,
|
|
214,183,197,98,142,57,235,
|
|
16,71,13,186,77,72,147,
|
|
14,206,204,152,226,86,66,
|
|
219,148,100,89,148,22,243
|
|
},
|
|
|
|
{
|
|
206,52,86,217,117,60,134,
|
|
215,114,154,137,4,37,66,
|
|
48,147,170,113,137,175,130,
|
|
112,246,87,69,40,64,249,
|
|
227,97,91,216,102,11,40,
|
|
195,173,91,205,85,32,40,
|
|
248,63,194,73,172,181,184
|
|
},
|
|
|
|
{
|
|
95,234,168,147,217,213,204,
|
|
132,140,158,22,201,182,222,
|
|
191,104,206,165,108,154,226,
|
|
236,135,245,247,166,112,180,
|
|
49,43,146,43,23,40,249,
|
|
206,228,226,135,211,33,241,
|
|
74,214,104,47,44,132,187
|
|
},
|
|
|
|
{
|
|
26,121,193,40,90,98,61,
|
|
42,168,13,248,146,203,80,
|
|
166,90,223,172,107,45,168,
|
|
161,239,10,34,239,59,209,
|
|
4,231,81,23,120,85,12,
|
|
12,182,35,39,229,187,83,
|
|
243,142,218,94,179,241,90
|
|
},
|
|
|
|
{
|
|
142,9,212,220,121,125,115,
|
|
191,40,144,216,56,6,76,
|
|
46,90,51,206,241,201,77,
|
|
202,90,67,73,116,203,199,
|
|
115,197,174,133,56,174,132,
|
|
91,185,8,143,5,221,216,
|
|
232,211,225,219,86,5,16
|
|
},
|
|
|
|
{
|
|
195,200,131,175,42,189,78,
|
|
186,174,122,45,142,55,106,
|
|
248,10,204,112,38,82,5,
|
|
154,209,193,124,244,5,29,
|
|
79,237,97,175,16,8,250,
|
|
93,44,79,143,63,64,84,
|
|
205,244,74,6,242,42,58
|
|
},
|
|
|
|
{
|
|
82,107,124,208,214,175,77,
|
|
77,123,32,162,220,87,3,
|
|
156,62,171,114,178,161,88,
|
|
102,51,47,152,147,54,41,
|
|
105,91,137,53,107,125,183,
|
|
174,142,207,195,133,127,164,
|
|
165,161,2,37,44,65,60
|
|
},
|
|
|
|
{
|
|
79,86,68,37,213,189,232,
|
|
15,143,41,230,136,191,222,
|
|
103,133,217,205,204,23,10,
|
|
45,197,140,55,160,166,99,
|
|
169,119,117,198,35,51,178,
|
|
15,139,203,66,8,252,236,
|
|
125,90,88,169,222,244,35
|
|
},
|
|
|
|
{
|
|
206,62,201,224,92,24,183,
|
|
166,85,215,246,29,100,157,
|
|
224,164,126,118,116,219,18,
|
|
120,92,60,230,206,224,4,
|
|
51,19,146,37,19,255,11,
|
|
123,233,236,157,232,207,13,
|
|
66,177,158,229,169,180,180
|
|
},
|
|
|
|
{
|
|
254,188,196,16,50,108,215,
|
|
198,166,37,72,138,227,191,
|
|
212,60,245,70,171,57,30,
|
|
97,27,98,4,211,66,152,
|
|
225,198,91,154,166,86,234,
|
|
10,124,31,130,130,182,56,
|
|
85,134,152,104,78,51,237
|
|
},
|
|
|
|
{
|
|
236,233,113,237,175,131,167,
|
|
99,63,81,142,139,103,199,
|
|
62,171,185,154,14,203,229,
|
|
21,89,153,52,2,198,224,
|
|
253,212,40,155,123,88,134,
|
|
5,188,144,130,185,34,11,
|
|
131,71,64,82,241,56,101
|
|
},
|
|
|
|
{
|
|
201,241,254,183,146,209,209,
|
|
56,204,180,211,122,211,146,
|
|
154,117,190,49,116,68,216,
|
|
29,125,35,65,69,224,144,
|
|
123,84,91,223,20,83,90,
|
|
22,36,186,200,111,220,126,
|
|
240,96,223,53,112,101,142
|
|
},
|
|
|
|
{
|
|
243,182,138,24,233,13,236,
|
|
111,101,139,30,233,72,14,
|
|
184,190,152,139,8,27,43,
|
|
209,11,1,28,32,184,180,
|
|
23,136,221,224,23,172,92,
|
|
54,164,174,55,183,64,226,
|
|
55,110,252,49,136,184,237
|
|
},
|
|
|
|
{
|
|
168,31,242,128,40,66,176,
|
|
76,175,24,54,137,56,123,
|
|
117,172,160,14,64,79,145,
|
|
189,229,248,232,177,1,228,
|
|
140,236,147,75,46,114,76,
|
|
98,236,88,11,153,87,150,
|
|
113,38,187,224,182,142,66
|
|
},
|
|
|
|
{
|
|
122,108,52,202,69,109,124,
|
|
11,236,192,188,209,141,143,
|
|
107,2,161,242,191,43,149,
|
|
213,80,56,214,152,203,56,
|
|
184,181,95,171,8,24,230,
|
|
90,155,103,126,27,205,246,
|
|
138,151,25,142,214,114,214
|
|
},
|
|
|
|
{
|
|
213,206,212,75,128,138,215,
|
|
3,9,165,183,182,42,136,
|
|
95,160,201,65,37,150,152,
|
|
120,86,194,18,154,95,72,
|
|
32,216,51,191,18,14,196,
|
|
210,34,39,38,205,70,33,
|
|
49,149,117,58,69,184,47
|
|
},
|
|
|
|
{
|
|
103,250,19,106,176,94,193,
|
|
170,129,145,215,119,136,99,
|
|
150,230,68,189,140,121,205,
|
|
122,113,250,249,128,25,160,
|
|
111,175,78,31,194,145,244,
|
|
241,50,63,74,129,28,126,
|
|
145,114,195,134,27,192,129
|
|
},
|
|
|
|
{
|
|
105,226,237,237,149,175,252,
|
|
47,105,12,92,232,88,227,
|
|
150,6,135,43,231,207,108,
|
|
96,125,141,94,67,149,47,
|
|
140,149,47,26,91,70,142,
|
|
191,156,210,71,9,152,66,
|
|
2,50,96,134,186,44,99
|
|
},
|
|
|
|
{
|
|
170,175,37,193,148,175,69,
|
|
82,195,14,57,200,212,237,
|
|
173,12,48,17,66,33,172,
|
|
253,26,162,149,146,154,80,
|
|
201,219,119,146,111,85,150,
|
|
130,251,78,244,97,242,176,
|
|
24,248,51,221,36,223,33
|
|
},
|
|
|
|
{
|
|
213,62,25,152,108,57,4,
|
|
234,182,62,27,201,109,115,
|
|
108,127,138,80,90,52,185,
|
|
155,125,184,249,199,67,143,
|
|
9,170,32,163,226,66,228,
|
|
119,8,136,33,43,190,251,
|
|
25,44,15,242,48,231,170
|
|
},
|
|
|
|
{
|
|
69,91,100,123,125,126,3,
|
|
16,15,53,81,162,184,255,
|
|
71,231,166,75,180,107,111,
|
|
70,76,164,128,12,27,134,
|
|
15,3,189,185,48,3,58,
|
|
65,38,37,200,190,124,195,
|
|
106,2,12,153,166,58,138
|
|
},
|
|
|
|
{
|
|
123,65,90,159,168,71,9,
|
|
59,29,75,192,44,243,30,
|
|
96,151,51,235,228,107,25,
|
|
10,122,99,77,82,172,172,
|
|
238,98,218,213,14,151,193,
|
|
17,99,33,53,103,222,249,
|
|
211,243,248,47,243,195,56
|
|
},
|
|
|
|
{
|
|
56,101,106,235,205,98,227,
|
|
149,9,73,232,235,35,111,
|
|
57,2,186,181,5,123,226,
|
|
25,5,73,234,254,89,240,
|
|
29,109,202,196,100,234,133,
|
|
21,35,57,225,202,22,171,
|
|
86,96,154,71,43,190,51
|
|
},
|
|
|
|
{
|
|
113,4,220,161,78,222,190,
|
|
105,166,150,161,29,113,135,
|
|
244,63,197,107,244,34,109,
|
|
12,130,139,204,212,9,130,
|
|
89,234,19,21,88,222,93,
|
|
119,22,135,8,75,90,48,
|
|
186,108,73,157,75,30,108
|
|
},
|
|
|
|
{
|
|
17,212,231,18,216,185,255,
|
|
206,139,136,155,69,129,54,
|
|
249,247,173,184,136,88,86,
|
|
87,234,205,238,209,80,233,
|
|
120,180,224,128,177,228,157,
|
|
229,131,214,148,251,230,103,
|
|
174,80,190,201,4,2,208
|
|
},
|
|
|
|
{
|
|
146,254,166,111,69,45,224,
|
|
229,101,23,235,77,130,235,
|
|
201,210,60,113,78,20,166,
|
|
239,198,159,25,140,106,57,
|
|
210,220,85,242,120,14,58,
|
|
186,211,127,152,111,219,20,
|
|
147,21,114,47,54,65,221
|
|
},
|
|
|
|
{
|
|
155,85,87,94,68,199,179,
|
|
247,16,43,80,193,182,242,
|
|
2,222,241,243,234,109,211,
|
|
36,48,131,165,204,150,166,
|
|
31,224,17,175,90,178,226,
|
|
156,73,193,106,70,25,207,
|
|
45,110,76,9,57,33,236
|
|
},
|
|
|
|
{
|
|
92,120,224,167,215,16,147,
|
|
48,40,91,171,186,7,158,
|
|
131,243,194,20,101,62,158,
|
|
82,46,144,65,190,23,223,
|
|
233,24,132,74,164,166,105,
|
|
255,50,68,41,33,225,183,
|
|
114,136,18,144,18,185,137
|
|
},
|
|
|
|
{
|
|
17,38,234,111,64,195,105,
|
|
13,188,100,59,18,103,53,
|
|
94,165,126,168,103,216,69,
|
|
76,238,220,198,89,149,145,
|
|
208,249,2,180,199,181,161,
|
|
111,85,255,154,106,166,101,
|
|
176,38,55,72,130,223,209
|
|
},
|
|
|
|
{
|
|
167,241,154,215,233,21,164,
|
|
109,34,121,61,150,197,43,
|
|
152,236,80,57,1,247,197,
|
|
38,56,196,145,26,241,225,
|
|
184,26,125,57,215,61,108,
|
|
5,217,25,106,86,248,82,
|
|
244,93,228,157,51,255,155
|
|
},
|
|
|
|
{
|
|
17,171,212,222,22,253,38,
|
|
199,218,104,6,108,146,77,
|
|
24,18,109,109,32,217,136,
|
|
11,245,112,196,192,233,176,
|
|
199,40,69,165,19,35,228,
|
|
253,123,233,162,79,218,165,
|
|
141,47,92,202,150,152,45
|
|
},
|
|
|
|
{
|
|
225,196,143,248,9,135,132,
|
|
255,208,73,103,33,197,201,
|
|
226,174,65,101,190,110,210,
|
|
217,216,142,238,169,181,244,
|
|
21,167,20,177,57,211,138,
|
|
7,141,14,153,186,125,207,
|
|
52,40,255,101,49,219,7
|
|
},
|
|
|
|
{
|
|
221,161,17,57,52,123,239,
|
|
174,209,155,220,246,5,150,
|
|
183,9,120,65,88,110,87,
|
|
121,50,70,26,37,101,116,
|
|
179,214,27,159,28,19,139,
|
|
66,223,181,127,121,199,102,
|
|
162,222,47,153,130,15,38
|
|
},
|
|
|
|
{
|
|
17,153,36,244,88,45,209,
|
|
13,52,102,102,28,128,115,
|
|
92,56,99,16,189,213,111,
|
|
73,11,146,130,213,230,111,
|
|
254,221,49,151,65,127,210,
|
|
67,208,249,241,212,65,196,
|
|
197,202,67,119,183,143,207
|
|
},
|
|
|
|
{
|
|
215,34,213,248,221,72,132,
|
|
67,21,208,217,15,31,125,
|
|
206,1,200,69,102,231,110,
|
|
158,231,21,29,36,182,156,
|
|
61,82,201,119,35,142,102,
|
|
8,89,59,54,229,1,5,
|
|
70,123,34,41,23,101,57
|
|
},
|
|
|
|
{
|
|
237,73,8,231,245,255,96,
|
|
23,192,156,114,102,247,212,
|
|
103,60,202,216,189,92,25,
|
|
135,142,70,147,87,94,74,
|
|
147,3,108,158,231,159,5,
|
|
78,65,36,186,99,128,2,
|
|
18,25,152,230,144,115,68
|
|
},
|
|
|
|
{
|
|
67,160,17,62,161,74,151,
|
|
54,117,56,133,66,108,253,
|
|
205,246,229,26,15,240,160,
|
|
164,184,238,53,49,8,79,
|
|
128,206,34,19,134,160,42,
|
|
46,244,13,175,78,210,242,
|
|
70,225,118,232,164,133,95
|
|
},
|
|
|
|
{
|
|
234,31,155,10,134,212,66,
|
|
76,236,106,93,102,226,169,
|
|
245,73,20,225,147,59,178,
|
|
82,227,106,224,136,73,140,
|
|
225,8,166,24,129,254,2,
|
|
60,177,128,86,36,201,254,
|
|
46,168,120,115,83,251,187
|
|
},
|
|
|
|
{
|
|
250,68,115,1,74,167,252,
|
|
185,210,119,96,136,228,20,
|
|
226,83,178,12,92,93,137,
|
|
176,99,183,16,82,157,33,
|
|
240,58,214,190,190,59,230,
|
|
162,107,243,19,160,47,144,
|
|
237,98,48,50,92,59,202
|
|
},
|
|
|
|
{
|
|
200,215,171,200,126,118,10,
|
|
108,131,226,88,154,98,215,
|
|
172,254,156,39,46,143,200,
|
|
255,29,50,226,118,222,231,
|
|
11,231,124,91,113,98,162,
|
|
28,148,147,126,109,164,97,
|
|
127,240,42,199,123,23,180
|
|
},
|
|
|
|
{
|
|
12,31,155,207,220,35,247,
|
|
228,132,83,16,83,176,193,
|
|
3,101,248,53,107,111,184,
|
|
58,242,191,69,225,126,151,
|
|
54,140,231,245,181,216,122,
|
|
88,139,10,38,53,235,254,
|
|
183,99,170,32,231,44,224
|
|
},
|
|
|
|
{
|
|
58,165,53,170,203,99,6,
|
|
7,176,212,91,123,166,220,
|
|
253,142,168,30,92,181,147,
|
|
230,151,199,9,241,63,145,
|
|
18,185,118,166,114,193,176,
|
|
248,40,177,209,100,8,139,
|
|
202,181,248,231,144,70,195
|
|
},
|
|
|
|
{
|
|
130,125,204,233,239,251,121,
|
|
125,221,146,233,122,172,27,
|
|
30,135,191,89,246,172,84,
|
|
164,101,232,68,230,205,26,
|
|
131,152,212,69,170,4,10,
|
|
157,124,120,171,85,158,175,
|
|
253,165,128,27,100,7,165
|
|
},
|
|
|
|
{
|
|
73,196,31,75,40,86,63,
|
|
169,84,115,12,176,43,123,
|
|
51,162,223,112,169,80,73,
|
|
82,110,99,145,226,70,121,
|
|
158,222,108,131,72,70,172,
|
|
32,48,207,219,106,99,30,
|
|
51,249,130,195,120,123,171
|
|
},
|
|
|
|
{
|
|
200,109,185,213,166,141,95,
|
|
219,114,120,103,244,57,23,
|
|
111,193,41,233,225,180,176,
|
|
121,66,10,13,97,114,5,
|
|
125,233,83,167,164,179,138,
|
|
170,44,99,209,215,82,191,
|
|
160,149,104,78,138,201,227
|
|
},
|
|
|
|
{
|
|
213,42,215,30,187,239,231,
|
|
72,204,179,60,193,67,75,
|
|
188,94,173,32,126,173,132,
|
|
254,121,236,7,2,33,168,
|
|
68,249,31,180,211,23,228,
|
|
135,44,63,68,159,20,222,
|
|
221,240,43,142,123,23,244
|
|
},
|
|
|
|
{
|
|
94,48,61,112,51,92,118,
|
|
161,242,95,128,16,237,38,
|
|
159,179,81,76,164,62,254,
|
|
14,169,65,160,197,179,44,
|
|
81,30,183,138,178,196,54,
|
|
141,197,193,234,76,97,64,
|
|
186,179,158,235,115,169,11
|
|
},
|
|
|
|
{
|
|
168,114,74,10,218,199,193,
|
|
41,245,250,186,205,131,243,
|
|
215,15,105,59,42,17,150,
|
|
13,40,194,220,108,22,72,
|
|
37,197,83,249,187,57,148,
|
|
64,234,33,109,51,156,254,
|
|
53,72,55,68,174,240,117
|
|
},
|
|
|
|
{
|
|
55,124,124,107,105,194,22,
|
|
114,242,8,53,46,244,181,
|
|
96,111,133,70,140,37,165,
|
|
131,1,12,65,220,11,103,
|
|
233,72,92,101,91,163,116,
|
|
125,83,15,224,107,242,66,
|
|
178,12,37,63,4,213,48
|
|
},
|
|
|
|
{
|
|
115,221,24,12,172,92,193,
|
|
137,224,105,238,239,70,221,
|
|
224,35,164,110,174,229,104,
|
|
50,86,88,100,25,108,68,
|
|
195,55,41,87,21,47,249,
|
|
212,245,152,96,232,85,190,
|
|
77,39,177,136,180,82,111
|
|
},
|
|
|
|
{
|
|
231,138,6,145,159,235,88,
|
|
248,198,164,9,130,209,202,
|
|
96,14,128,170,71,217,142,
|
|
180,183,53,110,173,41,252,
|
|
249,214,242,217,100,66,95,
|
|
181,71,11,111,109,35,175,
|
|
240,32,51,69,251,41,220
|
|
},
|
|
|
|
{
|
|
177,114,53,161,177,151,101,
|
|
226,222,87,255,85,102,86,
|
|
161,114,178,99,106,206,188,
|
|
98,29,157,53,65,169,67,
|
|
74,31,24,83,60,48,80,
|
|
186,116,113,179,144,90,220,
|
|
252,71,167,25,110,167,94
|
|
},
|
|
|
|
};
|