« Fichier NPCs » : différence entre les versions
(Page créée avec « == Format du fichier NPCs.wda == Sur cette page vous seront exposés tous les algorithmes et les constantes nécessaires à la programmation de votre propre éditeur de PN... ») |
Aucun résumé des modifications |
||
| Ligne 12 : | Ligne 12 : | ||
Cas spécial: | Cas spécial: | ||
20 (14000000) ASSIGNATION Assignation d'une valeur à une variable temporaire<pre> | 20 (14000000) ASSIGNATION Assignation d'une valeur à une variable temporaire</pre> | ||
==== Instructions originales présentes dans la version 1.25 de Vircom ==== | ==== Instructions originales présentes dans la version 1.25 de Vircom ==== | ||
<pre>Valeur Nom de la commande Params Paramètre 1 Paramètre 2 Paramètre 3 | <pre>Valeur Nom de la commande Params Paramètre 1 Paramètre 2 Paramètre 3 | ||
Dernière version du 7 mars 2016 à 21:21
Format du fichier NPCs.wda
Sur cette page vous seront exposés tous les algorithmes et les constantes nécessaires à la programmation de votre propre éditeur de PNJs. Les index de liste déroulante sont les mêmes que ceux des listes déroulantes de l'éditeur Vircom. Le cryptage est un XOR sur des blocs de données de 3418 octets.
Indices des commandes
Les valeurs entre parenthèses sont les valeurs hexa swappées, c'est à dire exactement telles qu'elles apparaissent dans le fichier décrypté parcouru avec un éditeur hexadécimal. Tous les paramètres sont des chaînes de caractères, y compris ceux qui sont censés ne contenir qu'une valeur numérique.
Structures conditionnelles
Ces valeurs définissent des sous-blocs d'instructions. Ce ne sont pas des instructions à proprement parler mais des marqueurs de sous-bloc.
Valeur Structure Rôle ================================================================================================ 2 (02000000) IF Evaluation d'expression et branchement conditionnel 5 (05000000) FOR Répétition d'un bloc un nombre défini de fois 6 (06000000) WHILE Répétition d'un bloc tant qu'une condition évaluée est vraie Cas spécial: 20 (14000000) ASSIGNATION Assignation d'une valeur à une variable temporaire
Instructions originales présentes dans la version 1.25 de Vircom
Valeur Nom de la commande Params Paramètre 1 Paramètre 2 Paramètre 3 ================================================================================================ 7 (07000000) GiveItem 1 ID de l'objet 8 (08000000) GiveXP 1 Formule 9 (09000000) SetFlag 2 ID du flag Formule 10 (0A000000) HealPlayer 1 Formule 11 (0B000000) SayText 1 Texte 12 (0C000000) BreakConversation 0 13 (0D000000) FightPlayer 0 14 (0E000000) TakeItem 1 ID de l'objet 15 (0F000000) Teleport 3 Position X Position Y Monde 16 (10000000) CastSpell 1 ID du sort 17 (11000000) CastSpellOnNPC 1 ID du sort 18 (12000000) GiveGold 1 Formule 19 (13000000) TakeGold 1 Formule 21 (15000000) DisplayItemsSoldByNPC 0 22 (16000000) DisplayItemsBoughtByNPC 0 23 (17000000) DisplayTrainedSkills 0 24 (18000000) DisplayTaughtSkills 0
Additions de Dialsoft pour la V2
Valeur Nom de la commande Params Paramètre 1 Paramètre 2 Paramètre 3 ================================================================================================ 25 (19000000) PrivateSysMessage 1 Texte 26 (1A000000) GlobalSysMessage 1 Texte 27 (1B000000) ShoutMessage 2 Nom du canal Message 28 (1E000000) SetGlobalFlag 2 ID du flag Formule 29 (1F000000) GiveKarma 1 Formule
Structure du fichier NPCs.wda décrypté
TODO: mettre en forme
Taille type Description
===============================================================================
4 unsigned long Type de WDA ou signature (toujours 1)
Bloc des PNJs
=============
4 unsigned long Nombre de PNJs
Pour chaque PNJ:
{
4 unsigned long Taille de la chaîne de caractères suivante
(variable) char * Nom du PNJ
4 unsigned long Taille de la chaîne de caractères suivante
(variable) char * ID du PNJ
4 unsigned long Version du PNJ (Par défaut 1 si 2 c'est une nouveauté de Dialsoft)
4 unsigned long Taille de la chaîne de caractères suivante
(variable) char * Apparence du PNJ
Si Version du PNJ == 2 (Version dialsoft):
{
1 unsigned char Le PNJ peut ce déplacer
1 unsigned char Le PNJ parle en messages privés
for (int i = 0; i < 512; i++) {
1 unsigned char Dummy (Merci pour cette stupidité...)
}
}
4 unsigned long Nombre d'objets vendus par le PNJ
Pour chaque objet vendu par le PNJ:
{
4 unsigned long Taille de la chaîne de caractères suivante
(variable) char * ID de l'objet
4 unsigned long Prix de l'objet
}
4 unsigned long Nombre de types d'objets achetés par le PNJ
Pour chaque type d'objet acheté par le PNJ:
{
4 unsigned long ID du type d'objet (NON SEQUENTIEL)
4 unsigned long Prix minimum pour ce type d'objet
4 unsigned long Prix maximum pour ce type d'objet
}
4 unsigned long Nombre d'entraînements dispensés par le PNJ
Pour chaque entraînement dispensé par le PNJ:
{
4 unsigned long ID de la compétence à entraîner (NON SEQUENTIEL)
4 unsigned long Points maximum obtenables dans la compétence
4 unsigned long Prix de l'entraînement par point de compétence entraîné
}
4 unsigned long Nombre d'enseignements dispensés par le PNJ
Pour chaque enseignement dispensé par le PNJ:
{
4 unsigned long ID du sort à enseigner
4 unsigned long Coût en points de compétences de l'enseignement
4 unsigned long Prix de l'enseignement
}
4 unsigned long ??? (toujours 1)
4 unsigned long ??? (toujours 1)
4 unsigned long Nombre de répliques
Pour chaque réplique:
{
4 unsigned long ??? (toujours 1)
1 unsigned char Type de réplique (0 = normale, 1 = texte initial, 2 = par défaut)
4 unsigned long Relation entre les mots-clés (1 = ET, 2 = OU, 3 = ordonné)
4 unsigned long Nombre de mots-clés (0 pour texte initial et texte par défaut)
Pour chaque mot-clé:
{
4 unsigned long Taille de la chaîne de caractères suivante
(variable) char * Mot-clé
}
+--> :: 4 unsigned long ??? (toujours 1)
| :: 4 unsigned long ??? (toujours 1)
| :: 4 unsigned long Nombre d'instructions
| ::
| :: Pour chaque instruction:
| :: {
| :: 4 unsigned long ID de l'instruction
| ::
| :: Si ID de l'instruction == "IF" (02000000)
| :: {
| :: 4 unsigned long Taille de la chaîne de caractères suivante
| :: (variable) char * Condition de l'instruction
| ::
| :: 1 unsigned char Présence de cas général (ELSE)
| ::
| :: Si présence de cas général:
| :: {
+----::------------------------ Réentrance
| :: }
| ::
| :: 4 unsigned long Nombre de cas supplémentaires (ELSE IF)
| ::
| :: Pour chaque cas supplémentaire:
| :: {
| :: 4 unsigned long Taille de la chaîne de caractères suivante
| :: (variable) char * Condition du cas
+----::------------------------ Réentrance
| :: }
| ::
+----::---------------- Réentrance
| :: }
| :: Sinon si ID de l'instruction == "FOR" (05000000)
| :: {
| :: 4 unsigned long Taille de la chaîne de caractères suivante
| :: (variable) char * Valeur de départ de la boucle
| :: 4 unsigned long Taille de la chaîne de caractères suivante
| :: (variable) char * Valeur d'arrivée de la boucle
| :: 4 unsigned long Taille de la chaîne de caractères suivante
| :: (variable) char * Nom de la variable à incrémenter
+----::---------------- Réentrance
| :: }
| :: Sinon si ID de l'instruction == "WHILE" (06000000)
| :: {
| :: 4 unsigned long Taille de la chaîne de caractères suivante
| :: (variable) char * Condition de la boucle
+----::---------------- Réentrance
:: }
:: Sinon si ID de l'instruction == NOMINATION (14000000)
:: {
:: 4 unsigned long Taille de la chaîne de caractères suivante
:: (variable) char * Variable
:: 4 unsigned long Taille de la chaîne de caractères suivante
:: (variable) char * Valeur
:: }
:: Sinon
:: {
:: 4 unsigned long Nombre de paramètres de l'instruction
::
:: Pour chaque paramètre de l'instruction:
:: {
:: 4 unsigned long Taille de la chaîne de caractères suivante
:: (variable) char * Paramètre de l'instruction
:: }
:: 4 unsigned long ??? (toujours 1)
:: }
::
:: }
}
}
Cryptographie des fichiers WDA
Clé de cryptage
Il s'agit d'un tableau de 3418 octets choisis arbitrairement par Vircom pour masquer les données originales avec la technique du ou exclusif (XOR). Cette technique est la technique d'encryption la plus simple qui soit : la même clé, combinée à la même opération, soit encrypte soit décrypte chaque octet des données sur laquelle elle s'applique.
Voici la clé utilisée par Vircom pour masquer les données :
unsigned char key[3418] =
{
0xE1, 0xC4, 0x9B, 0x1B, 0xC0, 0xC6, 0x30, 0xC5, 0x0D, 0x58, 0xB7, 0x01, 0xCE, 0x7F, 0x33, 0xD3, 0x07, 0x3D, 0xA9,
0x3F, 0xBA, 0x99, 0x1C, 0x4A, 0xED, 0x94, 0x90, 0xF7, 0xA3, 0x33, 0x09, 0x4A, 0xE1, 0x7B, 0x8B, 0x47, 0xA9, 0x6F,
0x1B, 0xF3, 0x01, 0x14, 0xBC, 0x51, 0xED, 0x6C, 0x73, 0x65, 0x6F, 0x7D, 0x42, 0x34, 0x8D, 0x4A, 0x2F, 0xC1, 0x4A,
0xD8, 0x3D, 0x10, 0xAA, 0x2A, 0x71, 0x25, 0xB1, 0x43, 0xCD, 0x05, 0x64, 0x2A, 0x57, 0xB3, 0xC6, 0xE0, 0x12, 0x33,
0xDC, 0x6B, 0x03, 0x89, 0xA8, 0xCE, 0x2C, 0xBA, 0x30, 0x0D, 0x93, 0xC9, 0x77, 0x2D, 0x3C, 0xBA, 0x82, 0x31, 0x29,
0x91, 0x53, 0x1D, 0x60, 0x53, 0xF0, 0xF5, 0xE4, 0x03, 0x5C, 0xBE, 0xB9, 0xA5, 0x9C, 0x7B, 0xE4, 0x3E, 0xB2, 0x30,
0x68, 0xD1, 0xA4, 0xE1, 0x49, 0x62, 0x76, 0x93, 0x8B, 0xF5, 0x2A, 0x49, 0x33, 0x8F, 0xC6, 0x07, 0x44, 0x32, 0x4D,
0xD1, 0xC2, 0xE4, 0xC3, 0xAC, 0xB1, 0xA9, 0x2D, 0x9B, 0x16, 0x84, 0x8E, 0xA2, 0xF4, 0x78, 0xEA, 0xC6, 0x4F, 0x8C,
0x45, 0x0A, 0x2C, 0xC1, 0xA4, 0x72, 0x8D, 0x1D, 0x0A, 0x02, 0x79, 0xA3, 0x7B, 0xBF, 0xF1, 0x57, 0xFB, 0xAC, 0xFA,
0x3D, 0x8F, 0xCD, 0x99, 0x5A, 0x3A, 0x26, 0xD1, 0xB1, 0x00, 0xBC, 0xA7, 0x47, 0xE6, 0x92, 0x1D, 0x1E, 0xEE, 0xAC,
0x39, 0x3C, 0x1E, 0x0E, 0xFE, 0xA4, 0x7A, 0xBD, 0x71, 0x5A, 0x04, 0xBC, 0x94, 0x63, 0xC2, 0x0F, 0x6D, 0xC2, 0xB7,
0xBB, 0x00, 0x7B, 0xE7, 0xC3, 0x4F, 0x92, 0x57, 0x2B, 0x60, 0x0C, 0x0A, 0xF7, 0x36, 0xEC, 0x04, 0x2C, 0xD5, 0x36,
0x49, 0xCC, 0x42, 0xEF, 0xDE, 0x7F, 0x1A, 0xC6, 0x63, 0x92, 0xBB, 0x05, 0x61, 0x7F, 0xD6, 0xA0, 0xDB, 0x48, 0x6F,
0x99, 0xD5, 0xF3, 0x8B, 0xF6, 0x53, 0x83, 0x2D, 0xBB, 0x5A, 0xFD, 0x5A, 0xEA, 0xED, 0x63, 0x14, 0x89, 0x10, 0xBB,
0x61, 0x9B, 0xC8, 0x09, 0x44, 0x24, 0x17, 0x4F, 0xC2, 0x29, 0x03, 0x93, 0xDD, 0xAD, 0x90, 0xD8, 0x9B, 0xB4, 0xC0,
0x22, 0xFF, 0x42, 0x99, 0x76, 0x0E, 0x5C, 0x1E, 0xD6, 0xCB, 0x05, 0x54, 0x48, 0x3A, 0x41, 0x3D, 0xD0, 0x5F, 0x15,
0xDF, 0x70, 0x3E, 0x83, 0x3D, 0x2E, 0xDC, 0x91, 0x5C, 0x0D, 0x3C, 0x43, 0x3E, 0x12, 0x63, 0x9B, 0xE9, 0x3F, 0x53,
0x9F, 0x61, 0x9A, 0x12, 0x52, 0xA8, 0x26, 0xA3, 0xB8, 0xC4, 0xE8, 0x0B, 0xD6, 0xB8, 0xE3, 0x4C, 0xAF, 0x88, 0x1B,
0x6C, 0x47, 0x39, 0x94, 0x6E, 0xA2, 0xCD, 0x52, 0x57, 0xC5, 0x4B, 0x5A, 0x29, 0xB3, 0xB4, 0xAF, 0xEA, 0x70, 0x0E,
0x55, 0x9E, 0x00, 0x5B, 0x51, 0x47, 0x68, 0xA2, 0xA6, 0xEB, 0xAB, 0xE4, 0x58, 0x8D, 0xCD, 0x27, 0x6B, 0x31, 0xD3,
0x6E, 0xE4, 0xDC, 0xC0, 0xBD, 0xC6, 0x91, 0x98, 0x18, 0x15, 0x54, 0x5F, 0x84, 0xD5, 0x29, 0x19, 0x04, 0x0B, 0x15,
0xCB, 0x9C, 0xBA, 0x1B, 0x78, 0x51, 0xE6, 0x3F, 0x25, 0x26, 0x94, 0x85, 0xD4, 0x1F, 0xC7, 0xF2, 0x8B, 0x40, 0x83,
0x89, 0x4D, 0x8E, 0xCC, 0x4E, 0x1F, 0x0C, 0xA6, 0x46, 0x03, 0xBE, 0x16, 0x74, 0xFF, 0xA8, 0x1F, 0xDC, 0x17, 0xCF,
0xC6, 0x82, 0x4D, 0x36, 0x0D, 0x6A, 0xA7, 0xE1, 0xFA, 0x99, 0x28, 0xD4, 0x90, 0x12, 0xD4, 0x14, 0xD4, 0xDA, 0xB0,
0xA4, 0xC9, 0xF3, 0xBF, 0x88, 0x72, 0x63, 0x05, 0xC5, 0xD6, 0x2D, 0x86, 0x5E, 0xF6, 0x56, 0x47, 0x57, 0xD8, 0xE0,
0x4A, 0xB4, 0x7F, 0xD1, 0x96, 0x7A, 0xEF, 0x2D, 0x2C, 0xAB, 0x2D, 0xF6, 0x12, 0x4D, 0x3C, 0x32, 0x4B, 0x64, 0x20,
0xE4, 0xDB, 0xF3, 0xDD, 0x10, 0xC6, 0xFD, 0x78, 0xBB, 0x11, 0x89, 0xF3, 0xE8, 0xBF, 0x98, 0x55, 0x9B, 0xD4, 0x30,
0x9F, 0xD8, 0x55, 0x54, 0xD7, 0xA4, 0x45, 0x08, 0x00, 0x01, 0xA8, 0x50, 0x1E, 0xF6, 0x82, 0x31, 0x35, 0x84, 0xD8,
0xAE, 0x4A, 0xB1, 0xAD, 0xCC, 0x60, 0x80, 0x05, 0x8D, 0x7B, 0xF5, 0xE4, 0xF7, 0xA0, 0x14, 0x4F, 0x0D, 0xD1, 0xE2,
0x49, 0xD3, 0x15, 0x62, 0xD6, 0x4E, 0x6D, 0x98, 0xFA, 0x81, 0xDE, 0x89, 0xBA, 0x70, 0x6D, 0x38, 0x19, 0x20, 0x1D,
0xA9, 0x1B, 0x93, 0xF3, 0xE0, 0xC5, 0xCF, 0xF1, 0xE2, 0x1A, 0xD7, 0x1D, 0xB1, 0x1E, 0xB0, 0x7B, 0x54, 0xD5, 0x5D,
0x0D, 0xCC, 0x43, 0xE2, 0xD9, 0x1F, 0x6D, 0x43, 0xE2, 0x4F, 0x56, 0x85, 0x2C, 0x63, 0x03, 0xAA, 0xBB, 0x5C, 0x76,
0xB8, 0x94, 0x40, 0xB5, 0xB3, 0xBA, 0x12, 0xC4, 0x9D, 0x32, 0xD6, 0xA5, 0x7C, 0xFE, 0x91, 0x5E, 0x53, 0x24, 0x45,
0xF2, 0x27, 0xA7, 0xF8, 0x65, 0xFB, 0x8B, 0xAE, 0xBB, 0xD2, 0xD5, 0x69, 0xF9, 0xB3, 0x88, 0x2F, 0x22, 0x9F, 0xA8,
0x03, 0x3A, 0x9C, 0x3A, 0xEA, 0x46, 0xAD, 0x40, 0xE6, 0x49, 0xD6, 0xC0, 0xFD, 0x47, 0x1C, 0xBD, 0x32, 0x44, 0x82,
0x3C, 0x8A, 0x45, 0x0C, 0x40, 0x07, 0x4D, 0xBE, 0xCD, 0xAF, 0x60, 0x9D, 0xE7, 0x86, 0x82, 0xAB, 0x93, 0x8E, 0xB8,
0xEF, 0xD3, 0xCD, 0x05, 0x6A, 0xAE, 0x46, 0x6D, 0x22, 0x25, 0xFD, 0xF5, 0x1A, 0x3E, 0xF7, 0xA0, 0x56, 0xFB, 0x37,
0x72, 0xDA, 0x63, 0xC1, 0x6F, 0xAB, 0x77, 0x99, 0x9B, 0xCC, 0x3D, 0xC4, 0xFB, 0x41, 0xB8, 0x45, 0x92, 0x0F, 0xEC,
0x20, 0x65, 0x38, 0xDD, 0x59, 0x76, 0xC2, 0x90, 0xF5, 0xCB, 0xB1, 0x08, 0xF7, 0x67, 0x07, 0x49, 0x63, 0x4F, 0xCA,
0x58, 0x3E, 0x85, 0xFD, 0x38, 0x8A, 0x0F, 0xA5, 0xED, 0x4D, 0xF0, 0xC4, 0x7B, 0x8B, 0x2D, 0x60, 0xE7, 0x46, 0xC9,
0x7C, 0x34, 0x84, 0xC8, 0x1D, 0x66, 0x48, 0x2E, 0x46, 0x81, 0x96, 0xFF, 0xFB, 0x8A, 0x73, 0x40, 0x84, 0xE2, 0xF4,
0x19, 0x73, 0xE7, 0x20, 0x8B, 0x5B, 0x86, 0xC6, 0x99, 0x41, 0xC4, 0xEC, 0x47, 0x28, 0xA4, 0x95, 0x9A, 0x14, 0x2A,
0xC6, 0x95, 0x0A, 0x5B, 0x81, 0x3C, 0x0D, 0x39, 0xCC, 0x93, 0x21, 0xCA, 0xAA, 0x9F, 0x4A, 0x12, 0x20, 0x63, 0x8D,
0x13, 0x31, 0xE3, 0xEC, 0xD3, 0xE1, 0x23, 0x6E, 0x55, 0x34, 0x28, 0x14, 0x9D, 0x2E, 0xF5, 0xE4, 0xB0, 0xD4, 0x8E,
0xE1, 0x91, 0x29, 0xF8, 0x0F, 0x44, 0x32, 0x36, 0x72, 0xCD, 0xF1, 0x4C, 0x0F, 0x31, 0x6C, 0x3E, 0xE9, 0x73, 0xA6,
0x10, 0x04, 0x97, 0xA3, 0xC7, 0x65, 0xA2, 0x68, 0x66, 0x0E, 0x96, 0xF8, 0xF2, 0x05, 0x79, 0x57, 0x6D, 0x4E, 0x8A,
0xDD, 0xEB, 0x1A, 0x93, 0x45, 0xE2, 0xE0, 0x78, 0xAA, 0x36, 0xA4, 0x3D, 0x0E, 0xEC, 0x6A, 0xE4, 0x77, 0x06, 0x37,
0x73, 0xE9, 0x8A, 0x0E, 0xED, 0x66, 0x7B, 0xF3, 0x56, 0xF4, 0xDE, 0xEA, 0xB3, 0x96, 0xB5, 0xF8, 0x07, 0x50, 0x06,
0x20, 0x56, 0x27, 0xD5, 0x66, 0xA4, 0x1D, 0x24, 0xCE, 0xF6, 0x38, 0xF9, 0x5D, 0x4E, 0x7C, 0x57, 0x16, 0xB3, 0xEB,
0x42, 0xFD, 0x26, 0x8B, 0xBF, 0x17, 0xAD, 0x5F, 0xD1, 0x66, 0x4B, 0x6C, 0x7C, 0xF0, 0x04, 0xB4, 0xC4, 0xB9, 0xDC,
0x3D, 0xAE, 0xC3, 0xD8, 0x0B, 0x3D, 0x14, 0xFB, 0x20, 0x75, 0xAF, 0x49, 0x82, 0x5A, 0x98, 0xC7, 0x34, 0xF1, 0xD4,
0x78, 0x3A, 0x3D, 0x66, 0x60, 0x99, 0x42, 0x52, 0x83, 0x53, 0x04, 0x9D, 0xE6, 0x6E, 0x88, 0x49, 0x8C, 0xEE, 0xD1,
0x5C, 0x79, 0xD5, 0xE3, 0xD9, 0xB1, 0x29, 0xC3, 0xC5, 0x39, 0xED, 0x74, 0x23, 0x14, 0x26, 0xFA, 0xF7, 0x46, 0xD6,
0x59, 0x45, 0xD4, 0x03, 0x96, 0x11, 0xC0, 0xB0, 0xB4, 0x60, 0x10, 0xE2, 0xB7, 0x35, 0xC8, 0x9C, 0xA3, 0x95, 0xEA,
0xE1, 0x7D, 0x82, 0x7C, 0xB8, 0x48, 0x02, 0x81, 0x22, 0x08, 0x18, 0xFD, 0x25, 0xC1, 0xC9, 0xF5, 0xC4, 0x78, 0x17,
0x6C, 0x03, 0x30, 0x08, 0x66, 0xE7, 0xED, 0xA0, 0xE7, 0x73, 0xB4, 0xE1, 0xF4, 0xAB, 0x88, 0xD1, 0x90, 0x93, 0x6D,
0x73, 0xBF, 0x30, 0x67, 0xCB, 0x86, 0x85, 0x7B, 0xDE, 0xE7, 0x96, 0xAC, 0xAE, 0xE8, 0x67, 0xFE, 0x41, 0x8C, 0xFD,
0x75, 0x9B, 0xD8, 0x5B, 0x16, 0xBE, 0xCF, 0x85, 0xE4, 0xB0, 0x75, 0x80, 0xE3, 0x74, 0xCE, 0x4E, 0x17, 0x0F, 0xDF,
0xF5, 0x85, 0x83, 0xAB, 0x79, 0x30, 0xD6, 0x36, 0xDC, 0x1C, 0x0B, 0x84, 0x24, 0x4E, 0x27, 0x9A, 0x54, 0xC8, 0x2D,
0x7B, 0x71, 0x91, 0x21, 0x2B, 0x7D, 0xAA, 0x07, 0xAE, 0x7E, 0x18, 0xE3, 0x09, 0x77, 0xE0, 0xBA, 0x3F, 0x6D, 0x05,
0x8F, 0x54, 0x62, 0x8C, 0x66, 0x4D, 0x5C, 0x77, 0x44, 0x2C, 0x5E, 0xCC, 0x2C, 0xF7, 0x6D, 0x8E, 0x22, 0xB2, 0x8C,
0xC2, 0x2A, 0x5F, 0xBF, 0x6B, 0x49, 0x04, 0x0A, 0x8D, 0x82, 0xA4, 0x71, 0x2C, 0xD9, 0x44, 0xF9, 0x4C, 0x53, 0xE6,
0xA5, 0xF2, 0x90, 0x7A, 0x21, 0xBC, 0x45, 0x7A, 0xDD, 0xB4, 0x0A, 0xAB, 0x2B, 0xDF, 0xE1, 0x10, 0x0E, 0x40, 0xD0,
0xAE, 0x8A, 0xDB, 0x87, 0xA3, 0xB4, 0x04, 0xA1, 0x5E, 0xD0, 0x51, 0xFF, 0xBE, 0x31, 0xC5, 0xA6, 0xC7, 0xDD, 0x64,
0x99, 0x7D, 0xD8, 0x33, 0xDC, 0xE5, 0x24, 0x34, 0x73, 0x02, 0xC7, 0x6E, 0x62, 0xD8, 0xC5, 0xE2, 0xAE, 0x6C, 0x20,
0x95, 0x5A, 0xC0, 0xDE, 0x8C, 0x6B, 0xDA, 0x02, 0xCB, 0xE3, 0xBE, 0x90, 0x54, 0xC8, 0x6E, 0x8C, 0x2D, 0x1D, 0xF0,
0xFB, 0x59, 0xE7, 0x47, 0xE0, 0xDC, 0x28, 0x77, 0x3F, 0xBA, 0xE6, 0x85, 0x1D, 0xF8, 0x24, 0x74, 0x7D, 0x99, 0xE7,
0x48, 0x63, 0xA1, 0x31, 0x05, 0xD3, 0x15, 0x08, 0xB0, 0xD2, 0xF8, 0x70, 0x4C, 0x63, 0x4E, 0x6B, 0xDD, 0x8A, 0x1B,
0xFF, 0x68, 0x4B, 0x64, 0x2F, 0xEF, 0xAB, 0x2B, 0xFF, 0x78, 0xAD, 0x77, 0x74, 0x07, 0x55, 0x49, 0x91, 0x9E, 0xA7,
0x5A, 0x43, 0xA8, 0x94, 0xD3, 0xF9, 0x5B, 0x14, 0x01, 0xC4, 0x2B, 0xE7, 0xA9, 0xE8, 0xDE, 0x89, 0xAB, 0xCA, 0x30,
0xEB, 0xCE, 0x6E, 0x25, 0x12, 0x16, 0xD8, 0xC2, 0x01, 0x88, 0x0D, 0x09, 0xBC, 0x27, 0x10, 0x00, 0x48, 0xF7, 0xE5,
0xAB, 0xA7, 0xFC, 0x90, 0x0C, 0xDF, 0x3B, 0x16, 0x29, 0xF4, 0xB7, 0x7A, 0x05, 0xE8, 0x74, 0xC0, 0xA5, 0xC1, 0x77,
0xEC, 0x0B, 0x82, 0xC3, 0x03, 0x3D, 0x2F, 0x5C, 0x08, 0x3E, 0xCD, 0x46, 0xFF, 0x13, 0x5F, 0x86, 0xED, 0xBF, 0xE9,
0x1E, 0xD5, 0x46, 0x6F, 0x14, 0xBB, 0xAC, 0xF6, 0x6C, 0xA3, 0xF5, 0x81, 0x28, 0x91, 0x26, 0x14, 0x4E, 0x8A, 0x42,
0xB4, 0xE2, 0x91, 0x4D, 0x64, 0xE6, 0xAB, 0x4C, 0x28, 0x60, 0xDA, 0x42, 0x04, 0x53, 0x24, 0x33, 0xFC, 0xC3, 0x8C,
0x23, 0x15, 0xB4, 0x17, 0x52, 0x2B, 0xC8, 0x12, 0xB8, 0x2B, 0xA3, 0x18, 0x49, 0xB8, 0xAC, 0x2D, 0x0B, 0xD7, 0xE7,
0x56, 0x01, 0x8B, 0x59, 0x96, 0x30, 0xD8, 0x05, 0xF1, 0x9A, 0xC2, 0xEF, 0x6C, 0x45, 0x4E, 0x1C, 0x09, 0x34, 0x7F,
0x8F, 0xCE, 0x6C, 0x59, 0x4C, 0xBF, 0xF0, 0xE0, 0x57, 0xDE, 0xC4, 0x19, 0xB5, 0x31, 0xEC, 0x07, 0x69, 0xBB, 0x6C,
0xAE, 0x77, 0x81, 0x49, 0x13, 0xE3, 0x85, 0x86, 0x38, 0xB2, 0xCD, 0x27, 0x23, 0xE7, 0x5C, 0x31, 0xD8, 0x86, 0x37,
0xA7, 0x59, 0x94, 0x60, 0x8D, 0xAC, 0x13, 0xDD, 0xE7, 0xD4, 0x09, 0xB1, 0xBA, 0xD5, 0x7A, 0xE1, 0x09, 0xB4, 0x68,
0x70, 0xD8, 0x74, 0xD9, 0x62, 0x2C, 0x19, 0xD0, 0xBB, 0x07, 0xA7, 0x51, 0x7F, 0x6F, 0x23, 0x61, 0xB3, 0x67, 0x90,
0x03, 0x5A, 0xF4, 0xF2, 0x3B, 0x79, 0x19, 0x4E, 0x0D, 0x12, 0xDA, 0xA6, 0x7E, 0x2B, 0x3B, 0x00, 0x91, 0xC7, 0x41,
0x60, 0x4A, 0xEB, 0xEF, 0xC8, 0xAE, 0x99, 0x49, 0x3E, 0xC0, 0xD7, 0x53, 0xC5, 0x84, 0xA8, 0x12, 0x61, 0xFE, 0x11,
0x88, 0x17, 0x32, 0x14, 0xBC, 0xEA, 0x25, 0xB7, 0xAF, 0xDE, 0xDA, 0xFE, 0x67, 0xF7, 0x55, 0xEB, 0xE7, 0x3A, 0x9B,
0x84, 0x33, 0xAA, 0xAF, 0xCC, 0x4F, 0x4B, 0x95, 0xC7, 0x40, 0x22, 0x51, 0x7A, 0x09, 0x31, 0xE8, 0xAF, 0x7E, 0x5D,
0x15, 0x34, 0x0C, 0xB4, 0x05, 0x9E, 0xE0, 0xF2, 0xBD, 0xF0, 0xFD, 0x19, 0x40, 0x2E, 0x67, 0x2F, 0x92, 0x5D, 0x22,
0x38, 0xB7, 0x80, 0x33, 0x36, 0xB4, 0x9B, 0x9D, 0x2F, 0x8C, 0xB2, 0x64, 0x26, 0x43, 0xCA, 0x8C, 0x1F, 0xDE, 0xE6,
0x1A, 0x1F, 0x60, 0x0A, 0x11, 0x29, 0xCD, 0x3B, 0x75, 0x41, 0x29, 0x7B, 0x4A, 0x6B, 0x79, 0xD0, 0x95, 0xAC, 0xBF,
0x3E, 0x59, 0x07, 0x01, 0xC7, 0x9A, 0x80, 0x43, 0x71, 0x5D, 0x1B, 0x87, 0x3F, 0xA4, 0xDD, 0xD3, 0x35, 0x75, 0xC9,
0x2B, 0x58, 0xD4, 0xE3, 0x91, 0xAB, 0xC3, 0x30, 0x0B, 0x32, 0x48, 0xB2, 0x9C, 0xF1, 0x66, 0x6F, 0x48, 0xED, 0x21,
0x6B, 0x13, 0x29, 0x7E, 0xA8, 0x02, 0xA9, 0x80, 0x2C, 0x18, 0x72, 0x2B, 0xFA, 0x59, 0x86, 0x83, 0x17, 0xCA, 0xEB,
0x8D, 0x85, 0x6E, 0xA5, 0x4C, 0x4A, 0x49, 0xB6, 0xC4, 0x69, 0x5F, 0x24, 0xFA, 0xE7, 0xB5, 0xF2, 0xF1, 0xC6, 0x4E,
0x24, 0xAD, 0x0C, 0x2E, 0xBF, 0x32, 0xBD, 0x59, 0xC6, 0x84, 0xDB, 0xD4, 0x3D, 0xA8, 0x6C, 0xA2, 0x28, 0xA1, 0x73,
0xC7, 0x8C, 0x74, 0xF4, 0x47, 0x6C, 0x23, 0xF4, 0x27, 0xCC, 0xB4, 0x75, 0x6A, 0xB0, 0x2A, 0x7E, 0x14, 0x1D, 0x8A,
0x10, 0x2A, 0x16, 0xD6, 0x30, 0xAF, 0x9F, 0x14, 0xE3, 0xA7, 0xBD, 0x47, 0x2C, 0x16, 0x73, 0x74, 0x10, 0x01, 0xC5,
0x9E, 0x92, 0x6B, 0xB7, 0xC9, 0xB5, 0x58, 0x4E, 0xF9, 0x80, 0xCC, 0x8C, 0x32, 0xF4, 0xCC, 0x77, 0x79, 0x17, 0x5B,
0x13, 0xD1, 0xEC, 0x7D, 0x62, 0x3F, 0x77, 0x36, 0x6A, 0xC5, 0xBD, 0x8B, 0x2F, 0x69, 0xC0, 0x7F, 0xB3, 0x2E, 0x87,
0x16, 0xFC, 0x18, 0x13, 0x55, 0x0D, 0x2C, 0x69, 0x3F, 0xEA, 0x6D, 0x8E, 0xD8, 0x97, 0xDF, 0x85, 0x24, 0x19, 0x87,
0x53, 0x28, 0x73, 0x67, 0xFA, 0xE6, 0xA9, 0x85, 0x80, 0x65, 0xC0, 0xE5, 0xE9, 0xA6, 0xBB, 0x89, 0x37, 0xAF, 0x9E,
0x77, 0x70, 0x82, 0x6D, 0xB2, 0x97, 0x26, 0x2D, 0x3E, 0xB0, 0x9C, 0xE1, 0x20, 0xBF, 0xEA, 0x8D, 0x5B, 0xC9, 0x13,
0x35, 0xF3, 0xD1, 0x1B, 0xDE, 0xEC, 0xDC, 0x07, 0x8B, 0x4B, 0xEC, 0xD9, 0x40, 0x13, 0x07, 0x97, 0x02, 0x48, 0x30,
0x45, 0xD3, 0xEE, 0x6C, 0xE5, 0xB9, 0x0A, 0xBD, 0x7D, 0xB8, 0x9F, 0x29, 0x10, 0xD2, 0xB1, 0xB3, 0xA2, 0x0D, 0x45,
0x60, 0x38, 0x6C, 0x5D, 0x32, 0xD5, 0xF3, 0xFF, 0x2F, 0x7D, 0xA7, 0x2F, 0x5B, 0x35, 0x8B, 0xEF, 0xB8, 0xFF, 0xA3,
0x45, 0x4C, 0xE1, 0xF3, 0x34, 0x1A, 0xDE, 0x80, 0xC1, 0x26, 0xFB, 0x4D, 0xEE, 0x75, 0x3B, 0x5E, 0xC1, 0x0A, 0xA2,
0xB8, 0x3D, 0xE9, 0x34, 0x5D, 0x67, 0x16, 0xF6, 0x53, 0x41, 0x96, 0xEA, 0x9E, 0xD1, 0x6C, 0x16, 0x40, 0x1A, 0x9C,
0x7E, 0x3F, 0x21, 0x2A, 0x24, 0x9E, 0xE9, 0x1B, 0x0E, 0x61, 0x76, 0x72, 0x3F, 0x8D, 0xCC, 0x33, 0xBC, 0x25, 0xEF,
0x62, 0x87, 0x2D, 0xE4, 0x04, 0xA6, 0xA9, 0xAE, 0x1C, 0x1D, 0x9E, 0x52, 0xAE, 0xEE, 0x0F, 0xD2, 0xBF, 0x1F, 0x00,
0x34, 0x52, 0xB3, 0x75, 0x7B, 0x6B, 0xAE, 0x73, 0xAC, 0x0E, 0x15, 0xFD, 0xC9, 0x40, 0xEA, 0x17, 0xD8, 0x04, 0x34,
0xC6, 0xDD, 0x5E, 0xF4, 0x0D, 0xDA, 0x52, 0x2F, 0xF0, 0xD5, 0xE5, 0xEA, 0x73, 0xD1, 0x1A, 0x28, 0x9A, 0xD2, 0xF5,
0xEE, 0x6A, 0xDC, 0x7B, 0x3E, 0xE6, 0xF4, 0xAE, 0x1E, 0x13, 0x1D, 0x94, 0x92, 0xF3, 0x5C, 0x31, 0x9C, 0x8C, 0xB3,
0x87, 0x42, 0xE1, 0x28, 0x9C, 0x87, 0xF7, 0xBE, 0x73, 0x6F, 0xD1, 0x7A, 0x10, 0xFF, 0x72, 0x5E, 0x78, 0x39, 0xE1,
0x70, 0xAE, 0x23, 0x1F, 0xB3, 0xB6, 0xC1, 0x32, 0x2C, 0x94, 0x15, 0x1D, 0xDE, 0x4D, 0x25, 0xE4, 0xCC, 0xE4, 0xF4,
0x8C, 0xFD, 0x5D, 0x87, 0x18, 0x72, 0xBC, 0xE0, 0x8C, 0x31, 0x06, 0x05, 0xEC, 0x3D, 0x3E, 0xF9, 0x3D, 0x9A, 0x68,
0xC1, 0x82, 0x4D, 0x89, 0x5F, 0xBF, 0x59, 0xA4, 0xD9, 0xF8, 0xC2, 0xBD, 0x33, 0x32, 0x8C, 0xD8, 0x6F, 0x70, 0xBC,
0xFA, 0x93, 0xB6, 0x55, 0x25, 0xA2, 0x08, 0x5B, 0x60, 0xA0, 0x6B, 0xD2, 0xAC, 0x92, 0xE2, 0xBF, 0x0F, 0x7B, 0x71,
0x25, 0x8B, 0x5F, 0x1D, 0x08, 0x27, 0x42, 0xE9, 0x6D, 0xE4, 0x29, 0xD9, 0x57, 0xC8, 0x17, 0xF1, 0xCA, 0xD6, 0x10,
0x36, 0xCA, 0x12, 0x18, 0xAB, 0x5B, 0x80, 0x34, 0x54, 0x82, 0x25, 0x67, 0x35, 0x42, 0x04, 0xB5, 0x53, 0xA0, 0x22,
0x23, 0xB1, 0x9E, 0x81, 0xB3, 0x53, 0x42, 0x27, 0x6B, 0x3D, 0x8F, 0x17, 0x4F, 0x74, 0x8A, 0x55, 0x61, 0xFB, 0x35,
0xE6, 0xA7, 0xD6, 0x96, 0xCD, 0x24, 0x0A, 0xB1, 0x0E, 0xDC, 0x9A, 0x88, 0xAD, 0xD4, 0x8A, 0x21, 0xAF, 0x0F, 0xDE,
0x7F, 0x17, 0x91, 0x9B, 0xA6, 0xE9, 0x5E, 0xC4, 0x9B, 0x2A, 0x7B, 0x5D, 0x60, 0xDD, 0xEB, 0x6A, 0xFB, 0x06, 0xB2,
0xF0, 0x70, 0xA9, 0xD5, 0xF2, 0xC1, 0xCA, 0x56, 0x74, 0xF4, 0x6E, 0x3B, 0x7A, 0x0C, 0x98, 0x88, 0x09, 0x0E, 0x4D,
0x3F, 0x24, 0xFD, 0x8F, 0x66, 0xCF, 0xDC, 0x64, 0x00, 0x0F, 0xB2, 0xCF, 0x11, 0xE6, 0x80, 0xD5, 0x9E, 0x5A, 0x4C,
0x78, 0xAA, 0x6F, 0x19, 0xBE, 0x39, 0x27, 0xEB, 0xAA, 0x4F, 0x88, 0xC7, 0x41, 0xF1, 0x95, 0xAF, 0x86, 0x22, 0x53,
0xA9, 0x7D, 0xE6, 0xC4, 0xB9, 0x2A, 0x42, 0xEE, 0xE1, 0x91, 0x38, 0xD4, 0x27, 0xB7, 0xCE, 0x7B, 0x8E, 0x9F, 0x08,
0xE5, 0x1B, 0x4E, 0xE8, 0x18, 0xD0, 0xC6, 0x74, 0x18, 0xB3, 0x0D, 0xAF, 0xE7, 0xC7, 0x26, 0x9D, 0x8B, 0x11, 0x16,
0x43, 0x07, 0x94, 0xDF, 0xA4, 0x5F, 0x54, 0x87, 0xC4, 0x98, 0x55, 0x11, 0xA7, 0xB5, 0x9B, 0x82, 0x52, 0xBA, 0x2B,
0xDD, 0xC8, 0xAB, 0x08, 0x25, 0x0D, 0x8D, 0x36, 0x61, 0x25, 0x62, 0xBA, 0x92, 0x15, 0x31, 0x97, 0xBE, 0xE0, 0xFB,
0xD1, 0xE8, 0x8A, 0xC6, 0x6C, 0x14, 0x18, 0x95, 0x6D, 0x47, 0x8D, 0x6C, 0xD7, 0x84, 0xED, 0x4F, 0xAE, 0xCF, 0x3C,
0x43, 0xF7, 0x2C, 0x7E, 0x4B, 0xB4, 0xA0, 0xB8, 0x6B, 0xEB, 0x2E, 0xED, 0xA8, 0x9F, 0xDA, 0x22, 0x05, 0xD5, 0xA8,
0x59, 0x86, 0x90, 0x9D, 0x98, 0x2F, 0xD4, 0xBC, 0xE2, 0x05, 0xA5, 0x09, 0x3C, 0x0B, 0x08, 0x89, 0xA9, 0x45, 0xFF,
0x3F, 0x2C, 0xB7, 0x90, 0x2F, 0xCC, 0x66, 0xBF, 0x5D, 0x8A, 0x55, 0x8E, 0xCD, 0x6C, 0x88, 0x03, 0x84, 0x75, 0x03,
0x21, 0x85, 0xA9, 0xCB, 0xED, 0xD5, 0x0D, 0xE3, 0x6A, 0x76, 0xA4, 0x4F, 0x9B, 0x6E, 0x72, 0x14, 0x87, 0xC0, 0x7B,
0x35, 0x2F, 0x71, 0xC4, 0xB6, 0x99, 0x84, 0x50, 0x9B, 0xC8, 0xFC, 0x23, 0xE9, 0xC0, 0xE0, 0x41, 0xA2, 0x86, 0x31,
0xAF, 0xCD, 0x1D, 0xF5, 0x70, 0x6B, 0x89, 0x2F, 0x88, 0x82, 0xCE, 0xE3, 0xFB, 0x14, 0xF1, 0x16, 0xCE, 0x28, 0xF4,
0xCB, 0x04, 0xBF, 0xDE, 0x06, 0xA1, 0xDF, 0xB0, 0xCB, 0xAA, 0x8B, 0x70, 0x1F, 0x22, 0xC7, 0x21, 0x04, 0x0D, 0x98,
0xC7, 0x81, 0x6F, 0x00, 0x66, 0x97, 0x4D, 0x05, 0x03, 0x4C, 0xAA, 0xAB, 0xA1, 0xA3, 0x8A, 0xF4, 0x44, 0xA0, 0xF1,
0xE6, 0xF1, 0x47, 0xE4, 0x84, 0xAB, 0x9D, 0x66, 0xD2, 0x76, 0xA5, 0x7B, 0xD5, 0x56, 0x63, 0x27, 0x90, 0x4F, 0xDC,
0x6F, 0x07, 0x66, 0x13, 0x56, 0x3F, 0x9E, 0x0C, 0xE0, 0x3A, 0xFC, 0xCB, 0x12, 0xFE, 0x83, 0x55, 0xEF, 0x8E, 0x36,
0xAC, 0x7B, 0xEF, 0x1C, 0xD7, 0xBA, 0x24, 0x36, 0xD7, 0xB0, 0x31, 0x8A, 0xB2, 0x62, 0x1A, 0x1B, 0x6B, 0xD3, 0xE4,
0xED, 0x06, 0x08, 0x91, 0x04, 0x87, 0x03, 0x27, 0x65, 0xF3, 0xCA, 0xAA, 0x13, 0x4D, 0x61, 0x1C, 0x13, 0x99, 0xCA,
0x83, 0x67, 0xDC, 0x0B, 0xE2, 0x15, 0x18, 0x27, 0x3E, 0x20, 0x53, 0x22, 0x9A, 0x8D, 0x91, 0x00, 0xFA, 0x5E, 0xD4,
0xC6, 0x62, 0x99, 0x22, 0x77, 0xD6, 0x41, 0x7E, 0x18, 0x5B, 0xED, 0xAB, 0xF4, 0xE9, 0x71, 0x36, 0xA5, 0xF1, 0x10,
0xBC, 0x73, 0x77, 0xCD, 0x41, 0x61, 0x7D, 0xAD, 0xCA, 0x73, 0x09, 0xB3, 0x5A, 0xAD, 0x1E, 0xE2, 0xF5, 0x14, 0xC0,
0x41, 0x9F, 0xAA, 0xF4, 0xD1, 0x5D, 0x76, 0xBC, 0x98, 0x32, 0x79, 0x1F, 0x99, 0x22, 0xB9, 0x1E, 0xD8, 0x32, 0x39,
0xBF, 0x5A, 0x65, 0xFD, 0x04, 0x22, 0xBF, 0x09, 0xF4, 0x34, 0x44, 0x62, 0x90, 0x94, 0xF8, 0x0B, 0xDE, 0x47, 0xE0,
0x08, 0xE1, 0x50, 0xFF, 0x5E, 0x9D, 0xB3, 0x5A, 0x0F, 0x16, 0x74, 0xF3, 0x22, 0x51, 0x98, 0xD0, 0x98, 0x51, 0x22,
0xF4, 0x76, 0x1A, 0x16, 0x64, 0xC1, 0xB1, 0x79, 0x22, 0x7C, 0x19, 0x4D, 0x34, 0xAC, 0x56, 0x98, 0x9E, 0x53, 0x6C,
0x5E, 0x62, 0x77, 0x60, 0xA1, 0x86, 0x1C, 0x35, 0x67, 0x0D, 0x44, 0xEF, 0xB3, 0xFB, 0xF5, 0x92, 0x89, 0x55, 0x32,
0x23, 0xEE, 0x1D, 0xFF, 0xA5, 0xE5, 0x59, 0x60, 0x1C, 0x72, 0x0D, 0x5A, 0x8C, 0x99, 0x3B, 0xF0, 0xFA, 0x5F, 0xE9,
0x26, 0x69, 0xC7, 0x1A, 0x01, 0xDD, 0xD5, 0xD3, 0x84, 0x5B, 0x8E, 0x16, 0xB3, 0xE6, 0xF4, 0xE9, 0x92, 0x82, 0x0D,
0x4F, 0x26, 0x33, 0xDD, 0x4D, 0x72, 0xFE, 0x66, 0xE6, 0x7A, 0xE5, 0xAE, 0x1E, 0x42, 0xEF, 0xB8, 0xF9, 0xCF, 0x1D,
0x88, 0x7B, 0x24, 0x75, 0x23, 0xA9, 0x45, 0xFA, 0x8C, 0x86, 0x37, 0xB0, 0xC7, 0x17, 0xFD, 0x9B, 0xD8, 0x5E, 0x9B,
0xC0, 0xC4, 0x61, 0x15, 0x22, 0x8E, 0x23, 0x6F, 0xC5, 0x3A, 0xA8, 0xAE, 0xCD, 0xF5, 0xD5, 0xDF, 0x49, 0x0D, 0xE9,
0x5E, 0xB4, 0xF4, 0xEC, 0x2F, 0x11, 0xAF, 0xE4, 0x54, 0x65, 0x40, 0xD4, 0xD3, 0xB3, 0xAD, 0xC1, 0xAF, 0xFF, 0xFA,
0xAD, 0xED, 0x4D, 0x29, 0x9E, 0x8F, 0xA2, 0x40, 0x98, 0x9B, 0x01, 0x42, 0x9D, 0x14, 0x6E, 0x33, 0xB3, 0xFF, 0xED,
0x18, 0xDD, 0x5E, 0x83, 0xF4, 0x1F, 0x37, 0x33, 0xCB, 0x7E, 0x8E, 0x01, 0xA1, 0xFC, 0x65, 0xF1, 0x7B, 0xA0, 0xC2,
0x08, 0x5C, 0x6B, 0xA8, 0x49, 0x48, 0x62, 0x1B, 0xB8, 0x43, 0x8A, 0x20, 0x5A, 0x52, 0xE6, 0xBA, 0x31, 0x78, 0x7B,
0xED, 0x43, 0xB9, 0x4B, 0xBD, 0x94, 0x19, 0x5C, 0x2F, 0x26, 0x9D, 0xB2, 0x46, 0xFF, 0x48, 0x4F, 0x06, 0x22, 0x1E,
0x39, 0x73, 0x94, 0x24, 0x73, 0x92, 0x57, 0x5D, 0x01, 0x66, 0x71, 0xCD, 0xE8, 0xF3, 0xE5, 0x78, 0x2A, 0x3D, 0xB8,
0x63, 0xCD, 0x49, 0xEC, 0x91, 0xD5, 0x1A, 0x87, 0x06, 0x44, 0xB4, 0x8C, 0xC6, 0x20, 0x1C, 0x00, 0xD6, 0x6C, 0x55,
0xE6, 0x39, 0x2D, 0x63, 0x42, 0xF3, 0x65, 0x4A, 0x18, 0x09, 0x1A, 0x0F, 0x6D, 0x7D, 0x4F, 0xB5, 0x43, 0x55, 0x09,
0x40, 0xA0, 0x95, 0x4B, 0xB4, 0x88, 0x3F, 0x19, 0x16, 0xFD, 0x59, 0x77, 0x69, 0x05, 0xE6, 0x69, 0xB1, 0xA3, 0xEA,
0xF4, 0xF2, 0xDC, 0x6A, 0x1B, 0x31, 0xB2, 0x69, 0xE2, 0x71, 0x2B, 0xEB, 0x4E, 0xB6, 0x4B, 0xF4, 0x62, 0x05, 0x14,
0x89, 0x22, 0x61, 0x8C, 0xAD, 0x92, 0xCE, 0xB6, 0x64, 0xB7, 0x50, 0x96, 0xB3, 0x94, 0xEC, 0x31, 0x9C, 0x2D, 0xA5,
0x89, 0x25, 0x86, 0x7F, 0xA4, 0x52, 0xA4, 0x7E, 0x86, 0x25, 0x8A, 0xA7, 0x31, 0xA4, 0x3C, 0xFD, 0xAB, 0xD2, 0xBF,
0x84, 0xF7, 0xB3, 0x15, 0x40, 0x1A, 0x4C, 0x45, 0x36, 0x16, 0xA0, 0x50, 0x69, 0xF1, 0xB3, 0x3B, 0xDD, 0xAE, 0x89,
0x0B, 0x97, 0x52, 0x27, 0xC3, 0x9A, 0xE0, 0x90, 0x68, 0xEA, 0x5C, 0xC8, 0xFC, 0x8B, 0xCA, 0xD3, 0x85, 0x81, 0x2E,
0xB6, 0x06, 0xD1, 0x8D, 0x74, 0x84, 0x7E, 0xEA, 0x11, 0x01, 0x8D, 0x4A, 0x92, 0x83, 0x00, 0xAF, 0xF9, 0x0D, 0xDD,
0x1F, 0x4C, 0xA4, 0x27, 0x9D, 0x8F, 0x4B, 0xE3, 0x2D, 0xC4, 0x06, 0x14, 0xD4, 0xF1, 0xD9, 0xBE, 0x95, 0x19, 0xC9,
0xE5, 0x74, 0x41, 0xD8, 0x8D, 0x76, 0x6B, 0x0C, 0xBB, 0x9D, 0x69, 0x72, 0xEF, 0xDA, 0xF1, 0xB6, 0x6F, 0x27, 0xAA,
0x8C, 0x22, 0x86, 0x97, 0xF7, 0x0B, 0xFD, 0xBD, 0xFB, 0x2E, 0x90, 0x1E, 0x9C, 0x8F, 0x41, 0xC0, 0xDF, 0x33, 0x16,
0xA6, 0xC7, 0x1C, 0x12, 0xD5, 0x58, 0x51, 0x39, 0x50, 0x96, 0xD3, 0x90, 0x1B, 0x86, 0xA8, 0x19, 0x3A, 0x2B, 0xD2,
0xDB, 0xB1, 0x89, 0x58, 0xD7, 0x85, 0xA5, 0x3B, 0x13, 0xB9, 0x81, 0x91, 0x52, 0x23, 0x2D, 0x58, 0x52, 0x8F, 0x43,
0x69, 0xBF, 0xC7, 0xCA, 0x9C, 0xD1, 0xBE, 0x7E, 0xEE, 0xB0, 0x2B, 0x89, 0xB7, 0x68, 0x12, 0xEF, 0xFD, 0xFE, 0x78,
0xB5, 0xC3, 0x75, 0x60, 0xDE, 0x0E, 0xD1, 0xCE, 0x6E, 0xE0, 0x16, 0xC6, 0x6A, 0x3F, 0x49, 0x4D, 0xD5, 0x2F, 0x6D,
0x66, 0xB3, 0xB2, 0x86, 0x15, 0x08, 0xCE, 0x99, 0x5E, 0xD9, 0x86, 0xA8, 0x46, 0x28, 0xDE, 0xB9, 0xD0, 0xFC, 0xDB,
0xD0, 0x00, 0x56, 0x80, 0xEF, 0xDA, 0x3C, 0xD1, 0x1C, 0x63, 0xB1, 0xD2, 0x5A, 0x9E, 0xB9, 0x88, 0xAD, 0x8F, 0x58,
0xF6, 0x1A, 0x3B, 0x93, 0x20, 0xA4, 0xA5, 0x6D, 0x0A, 0x4F, 0xD1, 0xEA, 0xB9, 0x1F, 0xC3, 0x0F, 0x30, 0x19, 0x80,
0xDE, 0x73, 0x40, 0x0B, 0x5D, 0x87, 0x98, 0x68, 0x90, 0x6E, 0x25, 0x9B, 0x79, 0x2E, 0xEC, 0xA9, 0x1E, 0xCB, 0xF0,
0x95, 0x82, 0x47, 0x35, 0x63, 0xAA, 0xA8, 0xC0, 0x17, 0x98, 0xF1, 0x94, 0xB6, 0x52, 0x26, 0xB5, 0x43
};
Algorithme de cryptage
void ToggleEncryption (unsigned char *wda_data, int wda_data_size)
{
// Algorithme de cryptage, version C. Parcourt tout le buffer wda_data sur wda_data_size
// octets et masque ou démasque l'encryption des données sur celui-ci.
register int i; // Variables register = internes au CPU, leur utilisation est plus rapide
// Pour chaque octet de wda_data jusqu'à wda_data_size...
for (i = 0; i < wda_data_size; i++)
wda_data[i] ^= key[i % 3418]; // Ou exclusif avec la clé par blocs de 3418 octets
return; // aussi simple que ça :)
}
Comment créer votre propre éditeur de PNJ ?
Il est possible de programmer un éditeur de PNJ qui travaille exclusivement sur le fichier NPCs.wda, mais cet éditeur ne saura modifier que la *logique interne* des PNJ ; il ne saura pas leur attribuer de créature associée. Il faudra donc vous attendre à développer un éditeur qui soit capable de lire et d'interpréter également le format des fichiers T4C Worlds et T4C Edit.
Dans cette section ne sera abordée que la manière de parcourir le fichier NPCs. Pour des informations de parcours des fichiers T4C Worlds et T4C Edit, reportez-vous à la page correspondante.
[TODO: pseudocode du parser]
Exemples d'éditeurs de PNJ :
- les WDATools (auteur Sorkvild)
- T4C Realm Editor (auteur Gustaf)
- ...
--Sorkvild 14 mars 2008 à 04:57 (MSK)