Restructure repository to include all source folders

Move git root from Client/ to src/ to track all source code:
- Client: Game client source (moved to Client/Client/)
- Server: Game server source
- GameTools: Development tools
- CryptoSource: Encryption utilities
- database: Database scripts
- Script: Game scripts
- rylCoder_16.02.2008_src: Legacy coder tools
- GMFont, Game: Additional resources

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2025-11-29 20:17:20 +09:00
parent 5d3cd64a25
commit dd97ddec92
11602 changed files with 1446576 additions and 0 deletions

View File

@@ -0,0 +1,205 @@
// XORCrypt.cpp: implementation of the CXORCrypt class.
//
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "XORCrypt.h"
#include <ctime>
#include <cstdlib>
#include "GMMemory.h"
CXORCrypt CXORCrypt::ms_this;
CXORCrypt::CXORCrypt()
{
InitCodePage();
for(int iVer = 2; iVer < 4; ++iVer)
{
for(int iPage = 0; iPage < CODE_PAGE; ++iPage)
{
for( int iBit = 0; iBit < BIT_COUNT; ++iBit)
{
BitFields[iVer][iPage][iBit] = BitFields[iVer][iPage][iBit]^BitFields[0][iPage][iBit];
}
}
}
return;
}
CXORCrypt::~CXORCrypt()
{
}
//Interface////////////////////////////////////////////////////////////////////////////////////
// XORF [ public ] - XOR 연산. # 순방향
// Parameter : 1st : 시작 포인터, 2st : 길이, 3st : 코드 페이지
// Return:
void CXORCrypt::XORF(char *Start_In, int Length_In, unsigned short PageVer,
unsigned char PageNum1, unsigned char PageNum2)
{
for (int Counter = 0; Counter < Length_In; ++Counter)
{
*Start_In = *Start_In ^ BitFields[PageVer][PageNum1][Counter % BIT_COUNT];
*Start_In = *Start_In ^ BitFields[PageVer][PageNum2][Counter % BIT_COUNT];
++Start_In;
}
}
//Interface////////////////////////////////////////////////////////////////////////////////////
// XORB [ public ] - XOR 연산. # 역방향
// Parameter : 1st : 시작 포인터, 2st : 길이, 3st : 코드 페이지
// Return:
void CXORCrypt::XORB(char *Start_In, int Length_In, unsigned short PageVer,
unsigned char PageNum1, unsigned char PageNum2)
{
for (int Counter = 0; Counter < Length_In; ++Counter)
{
*Start_In = *Start_In ^ BitFields[PageVer][PageNum2][Counter % BIT_COUNT];
*Start_In = *Start_In ^ BitFields[PageVer][PageNum1][Counter % BIT_COUNT];
++Start_In;
}
}
//Interface////////////////////////////////////////////////////////////////////////////////////
// InitCODE_PAGE [ public ] - 암호 페이지를 초기화 한다
// Parameter :
// Return:
void CXORCrypt::InitCodePage(void)
{
int CODE_PAGENums = CODE_PAGE * 10;
srand((unsigned)time(NULL));
for (int Counter = 0; Counter < CODE_PAGENums; ++Counter)
{
m_CodePage[Counter] = rand() % CODE_PAGE;
if(Counter > 1)
{
if (m_CodePage[Counter] == m_CodePage[Counter - 1])
{
--Counter;
}
}
}
m_CodePageCount = rand() % (CODE_PAGE * 10);
}
//Interface////////////////////////////////////////////////////////////////////////////////////
// GetCODE_PAGE [ public ] - 암호 페이지를 얻는다
// Parameter :
// Return:
unsigned long CXORCrypt::GetCodePage(void)
{
if(0xffffff00 < m_CodePageCount)
{
m_CodePageCount = 0;
}
m_CodePageCount = (m_CodePageCount + 2) % (CODE_PAGE * 10);
return (((unsigned long)PAGE_VERSION << 16) & 0xffff0000) |
(((unsigned long)m_CodePage[m_CodePageCount] << 8) & 0x0000ff00) |
((unsigned long)m_CodePage[m_CodePageCount - 1] & 0x000000ff);
}
unsigned long CXORCrypt::GetCodePage(unsigned short PageVer_In)
{
if(0xffffff00 < m_CodePageCount)
{
m_CodePageCount = 0;
}
m_CodePageCount = (m_CodePageCount + 2) % (CODE_PAGE * 10);
return (((unsigned long)PageVer_In << 16) & 0xffff0000) |
(((unsigned long)m_CodePage[m_CodePageCount] << 8) & 0x0000ff00) |
((unsigned long)m_CodePage[m_CodePageCount - 1] & 0x000000ff);
}
//Interface////////////////////////////////////////////////////////////////////////////////////
// InnerEncodeS [ public ] - 데이터 암호화 : 데이터를 XOR 연산 한다. # 클라이언트 용
// Parameter : 1st : 시작 포인터, 2st : 길이, 3st : 코드 페이지
// Return:
bool CXORCrypt::EncodePacket(char *Start_In, int Length_In, unsigned long CodePage_In)
{
unsigned short PageVer = 0;
unsigned char PageNum1 = 0, PageNum2 = 0;
PageVer = (unsigned short)(((CodePage_In & 0xffff0000) >> 16) & 0x0000ffff);
PageNum1 = (unsigned char)(((CodePage_In & 0xff00) >> 8) & 0x00ff);
PageNum2 = (unsigned char)(CodePage_In & 0x00ff);
if(PageVer < 0 || PageVer > 4)
return false;
if(PageNum1 < 0 || PageNum1 >= CODE_PAGE || PageNum2 < 0 || PageNum2 >= CODE_PAGE)
return false;
XORF(Start_In, Length_In, PageVer, PageNum1, PageNum2);
return true;
}
//Interface////////////////////////////////////////////////////////////////////////////////////
// InnerEncodeS [ public ] - 데이터 암호화 : 데이터를 XOR 연산 한다. # 서버용
// Parameter : 1st : 시작 포인터, 2st : 길이, 3st : 코드 페이지
// Return:
bool CXORCrypt::DecodePacket(char *Start_In, int Length_In, unsigned long CodePage_In)
{
unsigned short PageVer = 0;
unsigned char PageNum1 = 0, PageNum2 = 0;
PageVer = (unsigned short)(((CodePage_In & 0xffff0000) >> 16) & 0x0000ffff);
PageNum1 = (unsigned char)(((CodePage_In & 0xff00) >> 8) & 0x00ff);
PageNum2 = (unsigned char)(CodePage_In & 0x00ff);
if(PageVer < 0 || PageVer > 4)
return false;
if(PageNum1 < 0 || PageNum1 >= CODE_PAGE || PageNum2 < 0 || PageNum2 >= CODE_PAGE)
return false;
XORB(Start_In, Length_In, PageVer, PageNum1, PageNum2);
return true;
}
//Interface////////////////////////////////////////////////////////////////////////////////////
// EncodeHeader [ public ] - 데이터 암호화 : 데이터를 XOR 연산 한다.
// Parameter : 1st : 시작 포인터, 2st : 길이
// Return:
void CXORCrypt::EncodeHeader(char *Start_In, int Length_In, unsigned short PageVer_In, unsigned char PageNum_In)
{
for(int Counter = 0; Counter < Length_In; ++Counter)
{
*Start_In = *Start_In ^ BitFields[PageVer_In][PageNum_In][Counter % BIT_COUNT];
*Start_In = (((*Start_In & 0x80) >> 7) & 0x01) | ((*Start_In << 1) & 0xFE);
++Start_In;
}
}
//Interface////////////////////////////////////////////////////////////////////////////////////
// DecodeHeader [ public ] - 데이터 복호화 : 데이터를 XOR 연산 한다. # 서버용
// Parameter : 1st : 시작 포인터, 2st : 길이
// Return:
void CXORCrypt::DecodeHeader(char *Start_In, int Length_In, unsigned short PageVer_In, unsigned char PageNum_In)
{
for(int Counter = 0; Counter < Length_In; ++Counter)
{
*Start_In = (((*Start_In & 0x01) << 7) & 0x80) | ((*Start_In >> 1) & 0x7F);
*Start_In = *Start_In ^ BitFields[PageVer_In][PageNum_In][Counter % BIT_COUNT];
++Start_In;
}
}

View File

@@ -0,0 +1,59 @@
#ifndef _CXOR_CRYPT_H_
#define _CXOR_CRYPT_H_
#pragma once
#include <Pattern/Singleton.h>
class CXORCrypt : public CSingleton<CXORCrypt>
{
public:
enum
{
PAGE_VERSION = 3,
BIT_COUNT = 40,
CODE_PAGE = 10,
};
private:
static unsigned char BitFields[][CODE_PAGE][BIT_COUNT];
unsigned char m_CodePage[CODE_PAGE * 10];
unsigned long m_CodePageCount;
void InitCodePage(void);
void XORF(char *Start_In, int Length_In, unsigned short PageVer, unsigned char PageNum1, unsigned char PageNum2);
void XORB(char *Start_In, int Length_In, unsigned short PageVer, unsigned char PageNum1, unsigned char PageNum2);
// To make Singleton Class.
CXORCrypt();
static CXORCrypt ms_this;
public:
~CXORCrypt();
// interface of encoder, decoder
unsigned long GetCodePage(void);
unsigned long GetCodePage(unsigned short PageVer_In);
inline unsigned short GetPageVer(unsigned long CodePage_In);
bool EncodePacket(char *Start_In, int Length_In, unsigned long CodePage_In);
bool DecodePacket(char *Start_In, int Length_In, unsigned long CodePage_In);
void EncodeHeader(char *Start_In, int HeaderLen_In, unsigned short PageVer_In, unsigned char PageNum_In);
void DecodeHeader(char *Start_In, int HeaderLen_In, unsigned short PageVer_In, unsigned char PageNum_In);
};
inline unsigned short CXORCrypt::GetPageVer(unsigned long CodePage_In)
{
return (unsigned short)(((CodePage_In & 0xffff0000) >> 16) & 0x0000ffff);
}
#endif

View File

@@ -0,0 +1,422 @@
#include "stdafx.h"
#include "XORCrypt.h"
#include "GMMemory.h"
unsigned char CXORCrypt::BitFields[][CODE_PAGE][BIT_COUNT] =
{
///////////////////////////////////////////////////////////////////////
//Code Version 0
{
// Code Page 1
0x82, 0x53, 0x43, 0x4C, 0x2B,
0x0D, 0x37, 0xD7, 0xD9, 0xD8,
0x1B, 0x6D, 0xA0, 0xC3, 0x2B,
0xEE, 0x45, 0x88, 0x1A, 0xA6,
0x18, 0x1D, 0x9D, 0x38, 0x2A,
0x55, 0x03, 0x1D, 0xCD, 0xA6,
0x73, 0x07, 0xED, 0x8D, 0xC5,
0xDB, 0xA3, 0xBD, 0xB6, 0xD5,
// Code Page 2
0x34, 0xB5, 0xB2, 0x3D, 0x7D,
0x43, 0x8C, 0xC0, 0x21, 0x25,
0xCD, 0xB6, 0x53, 0x76, 0xCE,
0x5D, 0xD4, 0x87, 0xCA, 0x84,
0x81, 0xCB, 0x5E, 0x04, 0xBA,
0x69, 0x3E, 0x65, 0xDE, 0x21,
0x8A, 0x63, 0x62, 0x71, 0x90,
0x87, 0x0A, 0x52, 0x28, 0x44,
// Code Page 3
0xA3, 0x49, 0xDC, 0xEA, 0x09,
0xB7, 0x01, 0xA4, 0xA1, 0x11,
0x11, 0x8E, 0x80, 0x35, 0x5B,
0xDD, 0x38, 0xD5, 0x4E, 0x36,
0x0C, 0xA2, 0xBB, 0x05, 0x36,
0x57, 0x2E, 0x98, 0xBE, 0x88,
0x3C, 0x28, 0x43, 0x63, 0xA0,
0xE9, 0xE1, 0x6D, 0x51, 0xCB,
// Code Page 4
0x4D, 0x62, 0x84, 0x43, 0x89,
0xC7, 0x89, 0x83, 0x65, 0x29,
0x53, 0x95, 0x7C, 0xC0, 0xA1,
0x0C, 0xDB, 0xD7, 0x04, 0xD8,
0x6A, 0xD1, 0x73, 0x1D, 0x21,
0x67, 0x86, 0x8D, 0xA4, 0xA0,
0x34, 0xBD, 0x31, 0x20, 0x61,
0x0E, 0xE9, 0x63, 0xB4, 0xC0,
// Code Page 5
0xC7, 0x36, 0x1B, 0x41, 0x23,
0x9C, 0xD1, 0x8C, 0x25, 0x53,
0x42, 0x2E, 0x45, 0x6D, 0x42,
0x7B, 0x4E, 0x5B, 0xEB, 0x24,
0x33, 0x74, 0x52, 0x28, 0xC6,
0x2A, 0xC3, 0x16, 0x60, 0xA5,
0x45, 0x35, 0xDB, 0x9A, 0x54,
0x97, 0xE2, 0xEE, 0x9B, 0xDE,
// Code Page 6
0xE0, 0xC3, 0x84, 0x41, 0xED,
0x45, 0x4C, 0x69, 0xD9, 0x28,
0x55, 0x27, 0x8E, 0x3A, 0x3C,
0x8E, 0x84, 0x97, 0x14, 0xE6,
0x58, 0x51, 0x26, 0x0D, 0xE2,
0x9E, 0x66, 0x7C, 0x0D, 0x01,
0x7D, 0x17, 0x4C, 0x08, 0xDD,
0x97, 0x1C, 0x7B, 0xCE, 0x5D,
// Code Page 7
0x54, 0x37, 0x7C, 0x0C, 0x8E,
0x27, 0x7A, 0x78, 0x2E, 0xE6,
0x6D, 0x25, 0x62, 0x62, 0x98,
0x20, 0x2E, 0x23, 0x15, 0x61,
0x7D, 0x97, 0x50, 0x07, 0x20,
0x7A, 0x04, 0x29, 0x62, 0x90,
0x6B, 0xE9, 0xE6, 0x22, 0x72,
0x38, 0x56, 0xC9, 0x06, 0x2E,
// Code Page 8
0x3B, 0x47, 0x08, 0x2D, 0x21,
0x42, 0x07, 0x69, 0x4A, 0x57,
0x8B, 0x79, 0xE7, 0x56, 0x27,
0x23, 0x24, 0x85, 0x47, 0x74,
0x75, 0x85, 0xA9, 0xEB, 0x10,
0xCB, 0x17, 0x85, 0x4B, 0x5E,
0x20, 0x78, 0xD0, 0x7D, 0x86,
0x5E, 0x14, 0x7E, 0x64, 0x50,
// Code Page 9
0x69, 0x52, 0x4A, 0xBD, 0x8C,
0x9B, 0xD6, 0x63, 0xBD, 0x26,
0x86, 0x32, 0x95, 0xA4, 0x02,
0x9B, 0x01, 0x14, 0x49, 0x78,
0x88, 0x57, 0x3A, 0x01, 0x4A,
0xBC, 0x50, 0xCD, 0x31, 0x39,
0x71, 0x30, 0x5B, 0x9C, 0x4D,
0x21, 0x67, 0x82, 0xE8, 0x5C,
// Code Page 10
0x66, 0x10, 0xA9, 0x7D, 0xD2,
0x36, 0xE2, 0xB1, 0x28, 0x20,
0xD5, 0xE7, 0xD5, 0x0E, 0xD4,
0x0C, 0x2C, 0x77, 0x80, 0x0E,
0xA6, 0x37, 0xBE, 0x61, 0xAD,
0xD6, 0x17, 0x65, 0x13, 0x70,
0xAE, 0x40, 0x3B, 0x52, 0xEE,
0x53, 0x84, 0xEB, 0x04, 0x0D,
},
///////////////////////////////////////////////////////////////////////
//Code Version 1
{
// Code Page 1
0x49, 0x8C, 0x77, 0xC0, 0xC0,
0x64, 0x54, 0x0B, 0x22, 0xBD,
0x82, 0x93, 0x9A, 0x23, 0x8D,
0xE4, 0xC8, 0x9D, 0xB3, 0x50,
0x44, 0xB1, 0xE2, 0x9E, 0x15,
0x7A, 0xA1, 0x0C, 0x24, 0xE3,
0x1E, 0x0A, 0x0A, 0x73, 0x6A,
0xA5, 0x8B, 0x3A, 0x53, 0x33,
// Code Page 2
0xB0, 0xE6, 0xB7, 0x51, 0x70,
0xDA, 0xD6, 0x29, 0xAA, 0x10,
0xB5, 0x8A, 0x38, 0x37, 0x4E,
0x7A, 0x3B, 0x74, 0x7B, 0x63,
0x41, 0x7C, 0x21, 0x65, 0x5E,
0x26, 0x95, 0x44, 0x75, 0xA3,
0x74, 0xDD, 0xB4, 0x33, 0x9E,
0x54, 0x3C, 0x95, 0x5E, 0x34,
// Code Page 3
0x10, 0x19, 0x43, 0x64, 0x78,
0x2B, 0xA6, 0x60, 0x7D, 0xCD,
0xA9, 0x28, 0xB8, 0x85, 0x0E,
0x66, 0xC7, 0x3C, 0x28, 0xDC,
0xA1, 0x4D, 0x60, 0x9B, 0xC7,
0xD3, 0x74, 0x93, 0xE6, 0xC3,
0x97, 0x76, 0x12, 0xA4, 0xCB,
0xB9, 0x22, 0x51, 0xB9, 0x79,
// Code Page 4
0x5C, 0x68, 0xDB, 0xE6, 0x59,
0x57, 0x95, 0xCD, 0xAE, 0xCA,
0x67, 0xB8, 0x37, 0x90, 0xBA,
0x54, 0x98, 0x95, 0x73, 0x8E,
0x47, 0xC1, 0x40, 0xBA, 0x80,
0x26, 0x10, 0xAA, 0x60, 0x64,
0xD8, 0x69, 0xC7, 0x0D, 0x2B,
0x28, 0xA6, 0xBA, 0x01, 0x4A,
// Code Page 5
0xEE, 0x28, 0x65, 0xC4, 0x9D,
0x41, 0x8D, 0x91, 0x6C, 0x91,
0x7E, 0x80, 0xC3, 0xD1, 0xAE,
0xB6, 0x92, 0x41, 0x66, 0x13,
0x72, 0x20, 0x26, 0xA1, 0x72,
0x05, 0x29, 0x08, 0x88, 0x30,
0x40, 0x6D, 0x5A, 0x41, 0x01,
0x7A, 0xDB, 0x2C, 0xEE, 0xC3,
// Code Page 6
0x5C, 0x03, 0x38, 0xD8, 0x95,
0xE7, 0xB4, 0x67, 0x30, 0x51,
0x21, 0x68, 0x78, 0x89, 0x68,
0x0B, 0xE3, 0xB0, 0x28, 0xB3,
0xA9, 0x38, 0x18, 0xE4, 0x59,
0x43, 0xC9, 0x52, 0x75, 0x04,
0x15, 0x07, 0x97, 0x14, 0x07,
0x27, 0xDA, 0xE5, 0xD9, 0xDB,
// Code Page 7
0xDB, 0x08, 0x27, 0xA3, 0x64,
0xDC, 0x42, 0xE3, 0x3D, 0x0D,
0x26, 0xA2, 0xC3, 0x5E, 0x3E,
0xA7, 0x47, 0xE4, 0x1C, 0x73,
0x13, 0x99, 0x9E, 0xBA, 0xD3,
0x08, 0x73, 0x88, 0x03, 0x01,
0x24, 0x2E, 0x09, 0xBD, 0x3A,
0x6E, 0x3C, 0xB6, 0xA2, 0x22,
// Code Page 8
0xE7, 0x27, 0x60, 0x20, 0x85,
0xDA, 0xEA, 0x84, 0x86, 0x41,
0x67, 0x1C, 0x83, 0xBE, 0x7A,
0x61, 0x67, 0x01, 0x18, 0x30,
0xC6, 0x37, 0xBC, 0x51, 0xBC,
0x78, 0xA1, 0x53, 0x53, 0x58,
0x9B, 0x32, 0x05, 0x67, 0x6B,
0xC7, 0x3A, 0x7C, 0xA8, 0xE5,
// Code Page 9
0x70, 0x10, 0x29, 0x88, 0x94,
0xC0, 0xEE, 0x8D, 0x52, 0x20,
0xD9, 0xC3, 0x3C, 0xB3, 0x43,
0x74, 0x83, 0xC8, 0xC5, 0xAA,
0x90, 0x58, 0x0C, 0xD0, 0xBC,
0x2A, 0xED, 0x04, 0x05, 0x8E,
0x27, 0xDE, 0x9C, 0x37, 0x57,
0x2A, 0x93, 0x63, 0x1B, 0x9E,
// Code Page 10
0xC3, 0x52, 0xDB, 0xE9, 0x63,
0x9A, 0x87, 0x18, 0x6D, 0xBE,
0x1B, 0x37, 0x6A, 0xEA, 0x01,
0x02, 0x01, 0xB5, 0x74, 0x71,
0xA5, 0x9A, 0x9A, 0x3A, 0x11,
0x8B, 0x62, 0xD7, 0xB0, 0x06,
0x0C, 0xA0, 0x10, 0x09, 0x97,
0x5A, 0xEB, 0xEA, 0x18, 0xB8,
},
///////////////////////////////////////////////////////////////////////
//Code Version 2
{
// Code Page 1
0xDD, 0x9E, 0xB4, 0x33, 0x74,
0x32, 0x6B, 0x05, 0x67, 0x9B,
0xD6, 0x10, 0x29, 0xAA, 0xDA,
0x8A, 0x4E, 0x38, 0x37, 0xB5,
0x3B, 0x63, 0x74, 0x7B, 0x7A,
0x7C, 0x5E, 0x21, 0x65, 0x41,
0x3A, 0xE5, 0x7C, 0xA8, 0xC7,
0x10, 0x94, 0x29, 0x88, 0x70,
// Code Page 2
0x68, 0x68, 0x78, 0x89, 0x21,
0xA0, 0x97, 0x10, 0x09, 0x0C,
0xB4, 0x51, 0x67, 0x30, 0xE7,
0x47, 0x73, 0xE4, 0x1C, 0xA7,
0x99, 0xD3, 0x9E, 0xBA, 0x13,
0x74, 0xC3, 0x93, 0xE6, 0xD3,
0x76, 0xCB, 0x12, 0xA4, 0x97,
0xE3, 0xB3, 0xB0, 0x28, 0x0B,
// Code Page 3
0x45, 0xA6, 0x88, 0x1A, 0xEE,
0x1D, 0x2A, 0x9D, 0x38, 0x18,
0xA3, 0xD5, 0xBD, 0xB6, 0xDB,
0x95, 0xCA, 0xCD, 0xAE, 0x57,
0x38, 0x36, 0xD5, 0x4E, 0xDD,
0x2E, 0x88, 0x98, 0xBE, 0x57,
0x89, 0x29, 0x83, 0x65, 0xC7,
0x95, 0xA1, 0x7C, 0xC0, 0x53,
// Code Page 4
0xD1, 0x21, 0x73, 0x1D, 0x6A,
0x86, 0xA0, 0x8D, 0xA4, 0x67,
0xA2, 0x36, 0xBB, 0x05, 0x0C,
0xBD, 0x61, 0x31, 0x20, 0x34,
0x36, 0x23, 0x1B, 0x41, 0xC7,
0xD1, 0x53, 0x8C, 0x25, 0x9C,
0x2E, 0x42, 0x45, 0x6D, 0x42,
0x4E, 0x24, 0x5B, 0xEB, 0x7B,
// Code Page 5
0x74, 0xC6, 0x52, 0x28, 0x33,
0xC3, 0xA5, 0x16, 0x60, 0x2A,
0x35, 0x54, 0xDB, 0x9A, 0x45,
0xE2, 0xDE, 0xEE, 0x9B, 0x97,
0xC3, 0xED, 0x84, 0x41, 0xE0,
0x4C, 0x28, 0x69, 0xD9, 0x45,
0x27, 0x3C, 0x8E, 0x3A, 0x55,
0x84, 0xE6, 0x97, 0x14, 0x8E,
// Code Page 6
0x69, 0x2B, 0xC7, 0x0D, 0xD8,
0xA6, 0x4A, 0xBA, 0x01, 0x28,
0x28, 0x9D, 0x65, 0xC4, 0xEE,
0x98, 0x8E, 0x95, 0x73, 0x54,
0x51, 0xE2, 0x26, 0x0D, 0x58,
0xDB, 0xD8, 0xD7, 0x04, 0x0C,
0x66, 0x01, 0x7C, 0x0D, 0x9E,
0x17, 0xDD, 0x4C, 0x08, 0x7D,
// Code Page 7
0x25, 0x98, 0x62, 0x62, 0x6D,
0x2E, 0x61, 0x23, 0x15, 0x20,
0x97, 0x20, 0x50, 0x07, 0x7D,
0x1C, 0x5D, 0x7B, 0xCE, 0x97,
0x37, 0x8E, 0x7C, 0x0C, 0x54,
0x7A, 0xE6, 0x78, 0x2E, 0x27,
0x04, 0x90, 0x29, 0x62, 0x7A,
0xE9, 0x72, 0xE6, 0x22, 0x6B,
// Code Page 8
0x07, 0x57, 0x69, 0x4A, 0x42,
0x79, 0x27, 0xE7, 0x56, 0x8B,
0xC8, 0x50, 0x9D, 0xB3, 0xE4,
0xB1, 0x15, 0xE2, 0x9E, 0x44,
0x56, 0x2E, 0xC9, 0x06, 0x38,
0x47, 0x21, 0x08, 0x2D, 0x3B,
0xA1, 0xE3, 0x0C, 0x24, 0x7A,
0x24, 0x74, 0x85, 0x47, 0x23,
// Code Page 9
0x14, 0x50, 0x7E, 0x64, 0x5E,
0x52, 0x8C, 0x4A, 0xBD, 0x69,
0xD6, 0x26, 0x63, 0xBD, 0x9B,
0x85, 0x10, 0xA9, 0xEB, 0x75,
0x17, 0x5E, 0x85, 0x4B, 0xCB,
0x78, 0x86, 0xD0, 0x7D, 0x20,
0x32, 0x02, 0x95, 0xA4, 0x86,
0x01, 0x78, 0x14, 0x49, 0x9B,
// Code Page 10
0x57, 0x4A, 0x3A, 0x01, 0x88,
0x07, 0x07, 0x97, 0x14, 0x15,
0xDA, 0xDB, 0xE5, 0xD9, 0x27,
0x50, 0x39, 0xCD, 0x31, 0xBC,
0x30, 0x4D, 0x5B, 0x9C, 0x71,
0x67, 0x5C, 0x82, 0xE8, 0x21,
0x08, 0x64, 0x27, 0xA3, 0xDB,
0x42, 0x0D, 0xE3, 0x3D, 0xDC,
},
///////////////////////////////////////////////////////////////////////
//Code Version 3
{
// Code Page 1
0xA2, 0x3E, 0xC3, 0x5E, 0x26,
0xE7, 0xD4, 0xD5, 0x0E, 0xD5,
0x2C, 0x0E, 0x77, 0x80, 0x0C,
0x37, 0xAD, 0xBE, 0x61, 0xA6,
0x10, 0xD2, 0xA9, 0x7D, 0x66,
0xE2, 0x20, 0xB1, 0x28, 0x36,
0x17, 0x70, 0x65, 0x13, 0xD6,
0x40, 0xEE, 0x3B, 0x52, 0xAE,
// Code Page 2
0x37, 0x01, 0x6A, 0xEA, 0x1B,
0x0A, 0x6A, 0x0A, 0x73, 0x1E,
0xB5, 0x7D, 0xB2, 0x3D, 0x34,
0x8C, 0x25, 0xC0, 0x21, 0x43,
0x01, 0x71, 0xB5, 0x74, 0x02,
0x84, 0x0D, 0xEB, 0x04, 0x53,
0x87, 0xBE, 0x18, 0x6D, 0x9A,
0x93, 0x8D, 0x9A, 0x23, 0x82,
// Code Page 3
0xE6, 0x70, 0xB7, 0x51, 0xB0,
0x8C, 0xC0, 0x77, 0xC0, 0x49,
0xCB, 0xBA, 0x5E, 0x04, 0x81,
0x3E, 0x21, 0x65, 0xDE, 0x69,
0x63, 0x90, 0x62, 0x71, 0x8A,
0x62, 0x89, 0x84, 0x43, 0x4D,
0xE9, 0xC0, 0x63, 0xB4, 0x0E,
0x28, 0x0E, 0xB8, 0x85, 0xA9,
// Code Page 4
0xC7, 0xDC, 0x3C, 0x28, 0x66,
0x68, 0x59, 0xDB, 0xE6, 0x5C,
0x0A, 0x44, 0x52, 0x28, 0x87,
0x95, 0xA3, 0x44, 0x75, 0x26,
0x3C, 0x34, 0x95, 0x5E, 0x54,
0x19, 0x78, 0x43, 0x64, 0x10,
0x4D, 0xC7, 0x60, 0x9B, 0xA1,
0x8B, 0x33, 0x3A, 0x53, 0xA5,
// Code Page 5
0xB8, 0xBA, 0x37, 0x90, 0x67,
0xEE, 0x20, 0x8D, 0x52, 0xC0,
0xED, 0x8E, 0x04, 0x05, 0x2A,
0xB6, 0xCE, 0x53, 0x76, 0xCD,
0xD4, 0x84, 0x87, 0xCA, 0x5D,
0x62, 0x06, 0xD7, 0xB0, 0x8B,
0xC1, 0x80, 0x40, 0xBA, 0x47,
0x10, 0x64, 0xAA, 0x60, 0x26,
// Code Page 6
0x54, 0xBD, 0x0B, 0x22, 0x64,
0x53, 0x2B, 0x43, 0x4C, 0x82,
0x37, 0xD8, 0xD7, 0xD9, 0x0D,
0x6D, 0x2B, 0xA0, 0xC3, 0x1B,
0x49, 0x09, 0xDC, 0xEA, 0xA3,
0x01, 0x11, 0xA4, 0xA1, 0xB7,
0x8E, 0x5B, 0x80, 0x35, 0x11,
0x6D, 0x01, 0x5A, 0x41, 0x40,
// Code Page 7
0xDB, 0xC3, 0x2C, 0xEE, 0x7A,
0x03, 0x95, 0x38, 0xD8, 0x5C,
0x8D, 0x91, 0x91, 0x6C, 0x41,
0x80, 0xAE, 0xC3, 0xD1, 0x7E,
0x38, 0x59, 0x18, 0xE4, 0xA9,
0xC9, 0x04, 0x52, 0x75, 0x43,
0x92, 0x13, 0x41, 0x66, 0xB6,
0x20, 0x72, 0x26, 0xA1, 0x72,
// Code Page 8
0x29, 0x30, 0x08, 0x88, 0x05,
0x3C, 0x22, 0xB6, 0xA2, 0x6E,
0x27, 0x85, 0x60, 0x20, 0xE7,
0x73, 0x01, 0x88, 0x03, 0x08,
0x2E, 0x3A, 0x09, 0xBD, 0x24,
0xEA, 0x41, 0x84, 0x86, 0xDA,
0x1C, 0x7A, 0x83, 0xBE, 0x67,
0x67, 0x30, 0x01, 0x18, 0x61,
// Code Page 9
0x37, 0xBC, 0xBC, 0x51, 0xC6,
0xA1, 0x58, 0x53, 0x53, 0x78,
0xDE, 0x57, 0x9C, 0x37, 0x27,
0xC3, 0x43, 0x3C, 0xB3, 0xD9,
0x83, 0xAA, 0xC8, 0xC5, 0x74,
0x58, 0xBC, 0x0C, 0xD0, 0x90,
0x93, 0x9E, 0x63, 0x1B, 0x2A,
0x52, 0x63, 0xDB, 0xE9, 0xC3,
// Code Page 10
0x9A, 0x11, 0x9A, 0x3A, 0xA5,
0x22, 0x79, 0x51, 0xB9, 0xB9,
0xEB, 0xB8, 0xEA, 0x18, 0x5A,
0x28, 0xA0, 0x43, 0x63, 0x3C,
0xE1, 0xCB, 0x6D, 0x51, 0xE9,
0xA6, 0xCD, 0x60, 0x7D, 0x2B,
0x03, 0xA6, 0x1D, 0xCD, 0x55,
0x07, 0xC5, 0xED, 0x8D, 0x73,
}
};