/*( getnum )*/

#define DEMO

char subr[2796];

int rel98[]={
0x18,0x1a,0x1c,0x1e,0x20,0x22,0x24,0x26,
0x2e,0x33,0x38,0x56,0x6e,0x77,0x7c,0x86,
0xad,0xa6d,0xa88,0xac3,0xacd,0xad8,0xae0,0
};
int relme[]={
0x18,0x1a,0x1c,0x1e,0x20,0x22,0x24,0x26,
0x2e,0x33,0x38,0x56,0x6e,0x77,0x7c,0x86,
0xac,0xa6c,0xa87,0xac2,0xacc,0xad7,0xadf,0
};
int reloff,*rel;

#ifdef SELF
char cr[]="                Windows 9X RAM Limitation Patch 3.2  Copyright (C) 2007 by Rudolph R. Loew. All Rights Reserved.            ";
#endif

#ifdef PRO
char cr[]="                Windows 9X RAM Limitation Patch 3.2  Copyright (C) 2007 by Rudolph R. Loew. All Rights Reserved.  €€€€€€€€  ";
#endif

#ifdef DEMO
char cr[]="                Windows 9X RAM Limitation Patch 3.2  (DEMO)  Copyright (C) 2007 by Rudolph R. Loew. All Rights Reserved.    ";
#endif

char mz[]={
0x4d,0x5a,0,0,6,0,0,0,4,0,0,0,0xff,0xff,0,0,
0xb8,0,0,0,0,0,0,0,0x40,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0x80,0,0,0,
0xe,0x1f,0xba,0xe,0,0xb4,9,0xcd,0x21,0xb8,1,0x4c,0xcd,0x21,0x54,0x68,
0x69,0x73,0x20,0x70,0x72,0x6f,0x67,0x72,0x61,0x6d,0x20,0x63,0x61,0x6e,0x6e,0x6f,
0x74,0x20,0x62,0x65,0x20,0x72,0x75,0x6e,0x20,0x69,0x6e,0x20,0x44,0x4f,0x53,0x20,
0x6d,0x6f,0x64,0x65,0x2e,0xd,0xa,0x24,0,0,0,0,0,0,0,0,
};

char vmm1998[]={
// 0x80,0xfc,0xff,
// 0xc1,4,0x52,0x52,0x4c,0x20,0xc0,0x1c,0xc1,1,0x3e,0x80,0xdf,3,
0xc1,4,0x52,0x52,0x4c,0x20,0xc0,0x30,0xc1,2,0xfe,7,0xc0,0x3e,0xc1,
1,0x3e,0xc0,7,0xc1,1,0x3e,0xc0,0x4b,0xc1,2,0x2c,3,0xc0,0x5e,0xc1,
2,0x1c,0xb2,0x80,0xd3,3,0xc1,0xcd,0xe,0,0,0,2,0,0,0,
6,0,0,0,6,0,0,0,2,0,0,0,0x1e,0,0,0,
6,0,0,0,6,0,0,0,6,0,0,0,6,0,0,0,
6,0,0,0,6,0,0,0,6,0,0,0,6,0,0,0,
6,0,0,0,6,0,0,0,6,0,0,0,6,0,0,0,
0xe,0,0,0,2,0,0,0,2,0,0,0,2,0,0,0,
0xe,0,0,0,2,0,0,0,0x1e,0,0,0,0x1e,0,0,0,
0x1e,0,0,0,2,0,0,0,0xe,0,0,0,0xe,0,0,0,
2,0,0,0,2,0,0,0,2,0,0,0,0xe,0,0,0,
2,0,0,0,2,0,0,0,2,0,0,0,2,0,0,0,
0x3e,0,0,0,2,0,0,0,2,0,0,0,2,0,0,0,
0x1e,0,0,0,0xe,0,0,0,2,0,0,0,6,0,0,0,
0xe,0,0,0,6,0,0,0,6,0,0,0,2,0,0,0,
0xe,0,0,0,0xe,0x80,0xec,1,0xc1,2,0x2c,0x3f,0x80,0xdd,3,0xc1,
2,0x2c,0x3f,0x80,0xcb,4,0xc1,2,0x14,0x3f,0x80,0xf9,8,0xc1,2,0x14,
0x3f,0x80,0x77,2,0xc1,2,0x34,0x3f,0x80,0x46,0x28,0xc1,2,0x14,0x3f,0xc0,
7,0xc1,2,0x14,0x3d,0x80,0x39,1,0xc1,2,0x1c,0x3f,0xc0,0xb,0xc1,2,
0x14,0x3f,0xc0,0x42,0xc1,2,0x3c,0x3f,0xc0,0x19,0xc1,2,0x34,0x3f,0x80,0x41,
1,0xc1,2,0x1c,0x3f,0xc0,0x4e,0xc1,2,0x3c,0x3f,0x80,0xb7,8,0xc1,2,
0x14,0x3f,0x80,0x13,5,0xc1,2,0x14,0x3f,0x80,0xc2,1,0xc1,2,0x34,0x3f,
0x80,0xf3,0x17,0xc1,2,0x1c,0x3f,0xc0,0x89,0xc1,2,0x14,0x3f,0x80,0xb0,1,
0xc1,6,0x10,0,0,0,0x90,0xa6,0xc2,2,1,0,0xc0,0x1d,0xc1,2,
0x14,0x3f,0xc0,0x65,0xc1,2,0x1c,0x3f,0x80,0xf4,1,0xc1,2,0x14,0x3f,0x80,
0xee,8,0xc1,2,0x34,0x3f,0x80,0xda,0xc,0xc1,2,0x34,0x3f,0x80,0x79,0x11,
0xc1,2,0x34,0x3f,0x80,0xc0,4,0xc1,2,0x14,0x3f,0x80,0xa4,2,0xc1,2,
0x14,0x3f,0x80,0xe,8,0xc1,2,0x14,0x3f,0x80,1,1,0xc1,2,0x2c,0x3f,
0xc0,0x88,0xc1,2,0x1c,0x3f,0x80,0x39,6,0xc1,2,0x14,0x3f,0x80,0xa,2,
0xc1,2,0x14,0x3f,0xc0,0xef,0xc1,2,0x14,0x3f,0x80,0xd7,4,0xc5,2,0,
0x80,0xe4,5,0xc1,2,0x2c,0x3f,0xc0,0x48,0xc1,2,0x2c,0x3f,0xc0,0x12,0xc1,
2,0x2c,0x3f,0x80,0x2d,0x21,0xc1,2,0x2c,0x3f,0x80,0x39,0x1a,0xc1,2,0x14,
0x3f,0xc0,0x3b,0xc1,2,0x14,0x3f,0x80,0xb4,0x33,0xc1,2,0x14,0x3f,0xc0,0x42,
0xc1,2,0x14,0x3f,0x80,0x4a,0x14,0xc1,2,0x34,0x3f,0xc0,0x53,0xc1,2,0x34,
0x3f,0xc0,0xa5,0xc1,2,0x34,0x3f,0xc0,0x59,0xc1,2,0x34,0x3f,0xc0,0x19,0xc1,
2,0x34,0x3f,0xc0,0x28,0xc1,2,0x34,0x3f,0xc0,0x79,0xc1,2,0x34,0x3f,0xc0,
0x13,0xc1,2,0x34,0x3f,0xc0,0x99,0xc1,2,0x34,0x3f,0x80,0xbc,0x98,0xc1,6,
0x14,0x3f,0,0,0x14,0x3d,0x80,0x8a,0xb,0xc1,2,0x34,0x3f,0x80,0x6a,1,
0xc1,2,0x14,0x3f,0x80,0x35,2,0xc1,2,0x3c,0x3f,0xc0,0xb,0xc1,2,0x1c,
0x3f,0xc0,0x13,0xc1,2,0x3c,0x3f,0xc0,0xf,0xc1,2,0x1c,0x3f,0x80,0x4b,0x14,
0xc1,2,0x1c,0x3f,0xc0,0xe,0xc1,2,0x3c,0x3f,0xc0,0xf,0xc1,2,0x1c,0x3f,
0xc0,0x19,0xc1,2,0x3c,0x3f,0x80,0xaf,0x3d,0xc1,2,0x14,0x3f,0xc0,0x5f,0xc1,
2,0x14,0x3f,0xc0,8,0xc1,2,0x14,0x3f,0x80,0xc0,2,0xc1,2,0x14,0x3f,
0x80,0xf7,0xd,0xc1,2,0x14,0x3f,0xc0,0x83,0xc1,2,0x14,0x3f,0x80,0x8e,1,
0xc1,2,0x14,0x3f,0xc0,0xf2,0xc1,2,0x34,0x3f,0x80,0xa3,0xb6,0xc1,2,0x14,
0x3f,0x80,0xab,3,0xc1,2,0x1c,0x3f,0x80,0xa3,3,0xc1,2,0x1c,0x3f,0xc0,
0x90,0xc1,2,0xa4,6,0xc0,5,0xc1,2,0xa4,6,0x80,0x23,1,0xc1,2,
0x30,0xc3,0xc0,6,0xc1,2,0x30,0xc3,0xc0,0x27,0xc1,3,0x90,0xa6,1,0xc0,
0x3f,0xc1,2,0x14,0x3f,0xc0,0x6b,0xc1,2,0x14,0x3f,0xc0,0x26,0xc1,2,0x14,
0x3f,0xc0,0x2e,0xc1,2,0x14,0x3f,0xc0,0x35,0xc1,2,0x14,0x3f,0xc0,0x2c,0xc1,
2,0x14,0x3f,0x80,0x37,1,0xc1,1,0xc,0xc0,0x3e,0xc1,1,0xc0,0xc0,0x73,
0xc1,2,0x14,0x3f,0xc0,0x12,0xc1,2,0x14,0x3f,0x80,0x87,2,0xc1,2,0x14,
0x3f,0xc0,0x16,0xc1,2,0x14,0x3f,0xc0,0x2f,0xc1,2,0x14,0x3f,0xc0,0xdb,0xc1,
1,0x80,0xc0,0x19,0xc1,1,0x80,0x80,0x50,2,0xc1,2,0x14,0x3f,0xc0,0x38,
0xc1,1,0x24,0x80,0xbe,0x21,0xc1,2,0x34,0x3f,0x80,0x6f,3,0xc1,2,0x34,
0x3f,0xc0,0x54,0xc1,2,0x34,0x3f,0x40,0x2e,8,1,0xc1,2,0x34,0x3f,0x80,
0xaa,0xbd,0xc1,2,0x34,0x3f,0x80,0xc7,0x2e,0xc1,2,0x14,0x3f,0x80,0x1d,6,
0xc1,2,0x14,0x3f,0x80,0xb2,0x3f,0xc1,2,0x14,0x3f,0x80,0xa0,1,0xc1,2,
0x14,0x3f,0xc0,0xfd,0xc1,2,0x14,0x3f,0xc0,0x88,0xc1,2,0x2c,0x3f,0xc0,9,
0xc1,2,0x2c,0x3f,0xc0,0x6c,0xc1,2,0x2c,0x3f,0xc0,0xc8,0xc1,2,0x2c,0x3f,
0x80,0xfb,3,0xc1,2,0x1c,0x3f,0xc0,0x2c,0xc1,2,0x1c,0x3f,0x80,0xb7,0x45,
0xc1,2,0x14,0x3f,0xc0,0x2d,0xc1,2,0x14,0x3f,0x80,0xfa,5,0xc1,2,0x14,
0x3f,0x80,0x29,1,0xc1,2,0x14,0x3f,0x80,0xe4,0x17,0xc1,2,0x14,0x3f,0xc0,
0x98,0xc1,2,0x14,0x3f,0xc0,0x95,0xc1,2,0x14,0x3f,0xc0,0x66,0xc1,2,0x14,
0x3f,0x80,0x7c,0x4d,-1,0
};

char vmm1999[]={
// 0x80,0xfc,0xf7,
0xc1,4,0x52,0x52,0x4c,0x20,0xc0,0x30,0xc1,1,2,0xc0,0x3f,
0xc1,1,2,0xc0,7,0xc1,1,2,0xc0,0x4b,0xc1,2,0x2c,3,0xc0,0x5e,
0xc1,2,0x1c,0xb2,0x80,0xd3,3,0xc1,0xcd,2,0,0,0,0xe,0,0,
0,2,0,0,0,2,0,0,0,0xe,0,0,0,2,0,0,
0,2,0,0,0,2,0,0,0,2,0,0,0,2,0,0,
0,2,0,0,0,2,0,0,0,2,0,0,0,2,0,0,
0,2,0,0,0,2,0,0,0,2,0,0,0,2,0,0,
0,2,0,0,0,6,0,0,0,0x7e,0,0,0,6,0,0,
0,2,0,0,0,0x7e,0,0,0,2,0,0,0,2,0,0,
0,2,0,0,0,6,0,0,0,2,0,0,0,2,0,0,
0,0x1e,0,0,0,0x1e,0,0,0,6,0,0,0,2,0,0,
0,6,0,0,0,6,0,0,0,6,0,0,0,0x3e,0,0,
0,2,0,0,0,0xe,0,0,0,6,0,0,0,6,0,0,
0,2,0,0,0,2,0,0,0,6,0,0,0,2,0,0,
0,2,0,0,0,2,0,0,0,2,0,0,0,0xe,0,0,
0,2,0,0,0,2,0x80,0xac,2,0xc1,2,0x2c,0x3f,0x80,0xb1,3,
0xc1,2,0x2c,0x3f,0x80,0xf8,4,0xc1,2,0x34,0x3f,0x80,0xe,7,0xc1,2,
0x74,0x3f,0x80,0x84,4,0xc1,2,0x14,0x3f,0x80,0xea,0x23,0xc1,2,0x74,0x3f,
0xc0,7,0xc1,2,0x74,0x3d,0x80,0x20,5,0xc1,2,0x3c,0x3f,0xc0,0x19,0xc1,
2,0x34,0x3f,0xc0,0x2b,0xc1,2,0x1c,0x3f,0xc0,0xb,0xc1,2,0x14,0x3f,0x80,
0x37,1,0xc1,2,0x3c,0x3f,0xc0,0x39,0xc1,2,0x1c,0x3f,0x80,0xae,9,0xc1,
2,0x34,0x3f,0x80,0xa2,5,0xc1,2,0x34,0x3f,0x80,0x5c,1,0xc1,2,0x14,
0x3f,0x80,0x83,0x15,0xc1,2,0x74,0x3f,0xc0,0x71,0xc1,2,0x7c,0x3f,0x80,0x21,
2,0xc1,2,0x3c,0x3f,0xc0,0xa7,0xc1,2,0x34,0x3f,0xc0,0x46,0xc1,6,0x10,
0,0,0,0x90,0xa6,0xc2,2,1,0,0x80,0xc7,2,0xc1,2,0x34,0x3f,
0x80,0xf2,9,0xc1,2,0x14,0x3f,0x80,0x51,0xc,0xc1,2,0x14,0x3f,0x80,0xbf,
0x10,0xc1,2,0x14,0x3f,0x80,0x52,5,0xc1,2,0x34,0x3f,0x80,0xb4,2,0xc1,
2,0x34,0x3f,0x80,0x59,6,0xc1,2,0x6c,0x3f,0xc0,0x60,0xc1,2,0x7c,0x3f,
0x80,0x7f,1,0xc1,2,0x34,0x3f,0x80,0x5b,7,0xc1,2,0x34,0x3f,0x80,0x4b,
1,0xc1,2,0x74,0x3f,0xc0,0xb2,0xc1,2,0x34,0x3f,0x80,0x2e,5,0xc5,2,
0,0x80,0xe4,5,0xc1,2,0x2c,0x3f,0xc0,0x48,0xc1,2,0x2c,0x3f,0xc0,0x12,
0xc1,2,0x2c,0x3f,0x80,0x2d,0x21,0xc1,2,0x2c,0x3f,0x80,0x39,0x1a,0xc1,2,
0x34,0x3f,0xc0,0x3b,0xc1,2,0x34,0x3f,0x80,0xb4,0x33,0xc1,2,0x74,0x3f,0xc0,
0x42,0xc1,2,0x74,0x3f,0x80,0x4a,0x14,0xc1,2,0x14,0x3f,0xc0,0x53,0xc1,2,
0x14,0x3f,0xc0,0xa5,0xc1,2,0x14,0x3f,0xc0,0x59,0xc1,2,0x14,0x3f,0xc0,0x19,
0xc1,2,0x14,0x3f,0xc0,0x28,0xc1,2,0x14,0x3f,0xc0,0x79,0xc1,2,0x14,0x3f,
0xc0,0x13,0xc1,2,0x14,0x3f,0xc0,0x99,0xc1,2,0x14,0x3f,0x80,0xbc,0x98,0xc1,
6,0x74,0x3f,0,0,0x74,0x3d,0x80,0x8a,0xb,0xc1,2,0x14,0x3f,0x80,0x6a,
1,0xc1,2,0x34,0x3f,0x80,0x45,2,0xc1,2,0x1c,0x3f,0xc0,0xb,0xc1,2,
0x3c,0x3f,0xc0,0x13,0xc1,2,0x1c,0x3f,0xc0,0xf,0xc1,2,0x3c,0x3f,0x80,0x4b,
0x14,0xc1,2,0x3c,0x3f,0xc0,0xe,0xc1,2,0x1c,0x3f,0xc0,0xf,0xc1,2,0x3c,
0x3f,0xc0,0x19,0xc1,2,0x1c,0x3f,0x80,0x9f,0x3d,0xc1,2,0x34,0x3f,0xc0,0x5f,
0xc1,2,0x34,0x3f,0xc0,8,0xc1,2,0x34,0x3f,0x80,0xc0,2,0xc1,2,0x34,
0x3f,0x80,0xf7,0xd,0xc1,2,0x34,0x3f,0xc0,0x83,0xc1,2,0x34,0x3f,0x80,0x8e,
1,0xc1,2,0x34,0x3f,0xc0,0xf2,0xc1,2,0x14,0x3f,0x80,0xa3,0xb6,0xc1,2,
0x74,0x3f,0x80,0xab,3,0xc1,2,0x7c,0x3f,0x80,0xa3,3,0xc1,2,0x3c,0x3f,
0xc0,0x90,0xc1,2,0xa4,6,0xc0,5,0xc1,2,0xa4,6,0x80,0x23,1,0xc1,
2,0x30,0xc3,0xc0,6,0xc1,2,0x30,0xc3,0xc0,0x27,0xc1,3,0x90,0xa6,1,
0xc0,0x3f,0xc1,2,0x34,0x3f,0xc0,0x6b,0xc1,2,0x34,0x3f,0xc0,0x26,0xc1,2,
0x34,0x3f,0xc0,0x2e,0xc1,2,0x34,0x3f,0xc0,0x35,0xc1,2,0x34,0x3f,0xc0,0x2c,
0xc1,2,0x34,0x3f,0x80,0x37,1,0xc1,1,0xc,0xc0,0x3e,0xc1,1,0xc0,0xc0,
0x73,0xc1,2,0x34,0x3f,0xc0,0x12,0xc1,2,0x34,0x3f,0x80,0x87,2,0xc1,2,
0x34,0x3f,0xc0,0x16,0xc1,2,0x34,0x3f,0xc0,0x2f,0xc1,2,0x34,0x3f,0xc0,0xdb,
0xc1,1,0x80,0xc0,0x19,0xc1,1,0x80,0x80,0x50,2,0xc1,2,0x34,0x3f,0xc0,
0x38,0xc1,1,0x24,0x80,0xbe,0x21,0xc1,2,0x14,0x3f,0x80,0x6f,3,0xc1,2,
0x14,0x3f,0xc0,0x54,0xc1,2,0x14,0x3f,0x40,0x2e,8,1,0xc1,2,0x14,0x3f,
0x80,0xaa,0xbd,0xc1,2,0x14,0x3f,0x80,0xc7,0x2e,0xc1,2,0x34,0x3f,0x80,0x1d,
6,0xc1,2,0x34,0x3f,0x80,0xb2,0x3f,0xc1,2,0x34,0x3f,0x80,0xa0,1,0xc1,
2,0x34,0x3f,0xc0,0xfd,0xc1,2,0x34,0x3f,0xc0,0x88,0xc1,2,0x6c,0x3f,0xc0,
9,0xc1,2,0x6c,0x3f,0xc0,0x6c,0xc1,2,0x6c,0x3f,0xc0,0xc8,0xc1,2,0x6c,
0x3f,0x80,0xfb,3,0xc1,2,0x7c,0x3f,0xc0,0x2c,0xc1,2,0x7c,0x3f,0x80,0xb7,
0x45,0xc1,2,0x34,0x3f,0xc0,0x2d,0xc1,2,0x34,0x3f,0x80,0xfa,5,0xc1,2,
0x34,0x3f,0x80,0x29,1,0xc1,2,0x34,0x3f,0x80,0xe4,0x17,0xc1,2,0x34,0x3f,
0xc0,0x98,0xc1,2,0x34,0x3f,0xc0,0x95,0xc1,2,0x34,0x3f,0xc0,0x66,0xc1,2,
0x74,0x3f,0x80,0xa4,0x4f,-1,0
};

char vmm2222[]={
// 0x80,0xfc,0xff,
// 0xc1,4,0x52,0x52,0x4c,0x21,0xc0,0x1c,0xc1,1,2,0x80,0xdf,3,
0xc1,4,0x52,0x52,0x4c,0x21,0xc0,0x30,0xc1,1,0xe,0xc0,0x3f,0xc1,1,
2,0xc0,7,0xc1,1,2,0xc0,0x4b,0xc1,2,0x2c,1,0xc0,0x5e,0xc1,2,
0x1c,0xb2,0x80,0xd3,3,0xc1,0xcd,2,0,0,0,2,0,0,0,6,
0,0,0,6,0,0,0,2,0,0,0,0xe,0,0,0,6,
0,0,0,6,0,0,0,6,0,0,0,6,0,0,0,6,
0,0,0,6,0,0,0,6,0,0,0,6,0,0,0,6,
0,0,0,6,0,0,0,6,0,0,0,6,0,0,0,0x1e,
0,0,0,2,0,0,0,2,0,0,0,2,0,0,0,0x3e,
0,0,0,2,0,0,0,0xe,0,0,0,0xe,0,0,0,0xe,
0,0,0,6,0,0,0,2,0,0,0,2,0,0,0,6,
0,0,0,6,0,0,0,0x1e,0,0,0,0x1e,0,0,0,6,
0,0,0,2,0,0,0,0xe,0,0,0,0xe,0,0,0,0xe,
0,0,0,2,0,0,0,6,0,0,0,2,0,0,0,2,
0,0,0,0x3e,0,0,0,6,0,0,0,6,0,0,0,2,
0,0,0,6,0,0,0,2,0,0,0,0x3e,0,0,0,0x1e,
0,0,0,0x3e,0x80,0xe2,1,0xc1,2,0x2c,0x3d,0x80,0x17,4,0xc1,2,
0x2c,0x3d,0x80,0x5b,4,0xc1,2,0x14,0x3d,0x80,0xeb,8,0xc1,2,0x14,0x3d,
0x80,0xd9,2,0xc1,2,0x34,0x3d,0x80,0xe7,0x27,0xc1,2,0x14,0x3d,0xc0,7,
0xc1,2,0x14,0x3d,0x80,0x4a,1,0xc1,2,0x1c,0x3d,0xc0,0xb,0xc1,2,0x14,
0x3d,0xc0,0x47,0xc1,2,0x3c,0x3d,0xc0,0xb,0xc1,2,0x34,0x3d,0x80,0x34,1,
0xc1,2,0x1c,0x3d,0xc0,0x61,0xc1,2,0x3c,0x3d,0x80,0xc7,8,0xc1,2,0x14,
0x3d,0x80,0x2e,5,0xc1,2,0x14,0x3d,0x80,0x8a,1,0xc1,2,0x34,0x3d,0x80,
6,0x18,0xc1,2,0x1c,0x3d,0xc0,0x95,0xc1,2,0x14,0x3d,0x80,0xa5,1,0xc1,
6,0x10,0,0,0,0x90,0xa6,0xc2,2,1,0,0xc0,0x2f,0xc1,2,0x14,
0x3d,0xc0,0x6e,0xc1,2,0x1c,0x3d,0x80,0xa7,1,0xc1,2,0x14,0x3d,0x80,4,
9,0xc1,2,0x34,0x3d,0x80,0x12,0xd,0xc1,2,0x34,0x3d,0x80,0xdd,0x11,0xc1,
2,0x34,0x3d,0x80,0x77,4,0xc1,2,0x14,0x3d,0x80,0xce,2,0xc1,2,0x14,
0x3d,0x80,0x3c,8,0xc1,2,0x14,0x3d,0x80,5,1,0xc1,2,0x2c,0x3d,0xc0,
0x78,0xc1,2,0x1c,0x3d,0x80,0x17,6,0xc1,2,0x14,0x3d,0x80,0x2d,2,0xc1,
2,0x14,0x3d,0xc0,0xf1,0xc1,2,0x14,0x3d,0x80,0x87,4,0xc5,2,0,0x80,
0xe4,5,0xc1,2,0x2c,0x3d,0xc0,0x48,0xc1,2,0x2c,0x3d,0xc0,0x12,0xc1,2,
0x2c,0x3d,0x80,0x2d,0x21,0xc1,2,0x2c,0x3d,0x80,0x39,0x1a,0xc1,2,0x14,0x3d,
0xc0,0x3b,0xc1,2,0x14,0x3d,0x80,0xe4,0x33,0xc1,2,0x14,0x3d,0xc0,0x42,0xc1,
2,0x14,0x3d,0x80,0x4a,0x14,0xc1,2,0x34,0x3d,0xc0,0x53,0xc1,2,0x34,0x3d,
0xc0,0xa5,0xc1,2,0x34,0x3d,0xc0,0x59,0xc1,2,0x34,0x3d,0xc0,0x19,0xc1,2,
0x34,0x3d,0xc0,0x28,0xc1,2,0x34,0x3d,0xc0,0x79,0xc1,2,0x34,0x3d,0xc0,0x13,
0xc1,2,0x34,0x3d,0xc0,0x99,0xc1,2,0x34,0x3d,0x80,0x44,0x99,0xc1,6,0x14,
0x3d,0,0,0x14,0x3d,0x80,0x82,0xb,0xc1,2,0x34,0x3d,0x80,0x6a,1,0xc1,
2,0x14,0x3d,0x80,0x35,2,0xc1,2,0x3c,0x3d,0xc0,0xb,0xc1,2,0x1c,0x3d,
0xc0,0x13,0xc1,2,0x3c,0x3d,0xc0,0xf,0xc1,2,0x1c,0x3d,0x80,0x5b,0x14,0xc1,
2,0x1c,0x3d,0xc0,0xe,0xc1,2,0x3c,0x3d,0xc0,0xf,0xc1,2,0x1c,0x3d,0xc0,
0x19,0xc1,2,0x3c,0x3d,0x80,0xef,0x3c,0xc1,2,0x14,0x3d,0xc0,0x5f,0xc1,2,
0x14,0x3d,0xc0,8,0xc1,2,0x14,0x3d,0x80,0xc0,2,0xc1,2,0x14,0x3d,0x80,
0xf7,0xd,0xc1,2,0x14,0x3d,0xc0,0x83,0xc1,2,0x14,0x3d,0x80,0x8e,1,0xc1,
2,0x14,0x3d,0xc0,0xf2,0xc1,2,0x34,0x3d,0x80,0xa3,0xb6,0xc1,2,0x14,0x3d,
0x80,0xab,3,0xc1,2,0x1c,0x3d,0x80,0xa3,3,0xc1,2,0x1c,0x3d,0xc0,0x90,
0xc1,2,0xa4,6,0xc0,5,0xc1,2,0xa4,6,0x80,0x23,1,0xc1,2,0x30,
0xc3,0xc0,6,0xc1,2,0x30,0xc3,0xc0,0x27,0xc1,3,0x90,0xa6,1,0xc0,0x3f,
0xc1,2,0x14,0x3d,0xc0,0x6b,0xc1,2,0x14,0x3d,0xc0,0x26,0xc1,2,0x14,0x3d,
0xc0,0x2e,0xc1,2,0x14,0x3d,0xc0,0x35,0xc1,2,0x14,0x3d,0xc0,0x2c,0xc1,2,
0x14,0x3d,0x80,0x35,1,0xc1,1,0xc,0xc0,0x3e,0xc1,1,0xc0,0xc0,0x73,0xc1,
2,0x14,0x3d,0xc0,0x12,0xc1,2,0x14,0x3d,0x80,0x89,2,0xc1,2,0x14,0x3d,
0xc0,0x16,0xc1,2,0x14,0x3d,0xc0,0x2f,0xc1,2,0x14,0x3d,0xc0,0xdb,0xc1,1,
0x80,0xc0,0x19,0xc1,1,0x80,0x80,0x50,2,0xc1,2,0x14,0x3d,0xc0,0x38,0xc1,
1,0x24,0x80,0xbe,0x21,0xc1,2,0x34,0x3d,0x80,0x6f,3,0xc1,2,0x34,0x3d,
0xc0,0x54,0xc1,2,0x34,0x3d,0x40,0x2e,8,1,0xc1,2,0x34,0x3d,0x80,0xaa,
0xbd,0xc1,2,0x34,0x3d,0x80,0xf7,0x2e,0xc1,2,0x14,0x3d,0x80,0x1d,6,0xc1,
2,0x14,0x3d,0x80,0x82,0x3f,0xc1,2,0x14,0x3d,0x80,0xa0,1,0xc1,2,0x14,
0x3d,0xc0,0xfd,0xc1,2,0x14,0x3d,0xc0,0x88,0xc1,2,0x2c,0x3d,0xc0,9,0xc1,
2,0x2c,0x3d,0xc0,0x6c,0xc1,2,0x2c,0x3d,0xc0,0xc8,0xc1,2,0x2c,0x3d,0x80,
0xfb,3,0xc1,2,0x1c,0x3d,0xc0,0x2c,0xc1,2,0x1c,0x3d,0x80,0xb7,0x45,0xc1,
2,0x14,0x3d,0xc0,0x2d,0xc1,2,0x14,0x3d,0x80,0xfa,5,0xc1,2,0x14,0x3d,
0x80,0x29,1,0xc1,2,0x14,0x3d,0x80,0xe4,0x17,0xc1,2,0x14,0x3d,0xc0,0x98,
0xc1,2,0x14,0x3d,0xc0,0x95,0xc1,2,0x14,0x3d,0xc0,0x66,0xc1,2,0x14,0x3d,
0x80,0x7c,0x4d,-1,0
};

char vmm2223[]={
// 0x80,0xfc,0xf7,
0xc1,4,0x52,0x52,0x4c,0x21,0xc0,0x30,0xc1,1,2,0xc0,0x3f,
0xc1,1,6,0xc0,7,0xc1,1,6,0xc0,0x4b,0xc1,2,0x2c,1,0xc0,0x5e,
0xc1,2,0x1c,0xb2,0x80,0xd3,3,0xc1,0xcd,6,0,0,0,0xfe,0,0,
0,2,0,0,0,2,0,0,0,0x3e,0,0,0,2,0,0,
0,2,0,0,0,2,0,0,0,2,0,0,0,2,0,0,
0,2,0,0,0,2,0,0,0,2,0,0,0,2,0,0,
0,2,0,0,0,2,0,0,0,2,0,0,0,2,0,0,
0,2,0,0,0,6,0,0,0,0xe,0,0,0,6,0,0,
0,2,0,0,0,0xe,0,0,0,2,0,0,0,2,0,0,
0,2,0,0,0,2,0,0,0,0x1e,0,0,0,0x1e,0,0,
0,2,0,0,0,2,0,0,0,2,0,0,0,2,0,0,
0,2,0,0,0,0x1e,0,0,0,2,0,0,0,2,0,0,
0,2,0,0,0,0x7e,0,0,0,2,0,0,0,6,0,0,
0,6,0,0,0,2,0,0,0,2,0,0,0,2,0,0,
0,6,0,0,0,2,0,0,0,0xfe,0x1f,0,0,2,0,0,
0,2,0,0,0,2,0x80,0xa0,2,0xc1,2,0x2c,0x3d,0x80,0xe7,3,
0xc1,2,0x2c,0x3d,0x80,0xc1,4,0xc1,2,0x34,0x3d,0x80,0xd1,6,0xc1,2,
0xf4,0x3d,0x80,0xb2,4,0xc1,2,0x14,0x3d,0x80,0xe6,0x25,0xc1,2,0xf4,0x3d,
0xc0,7,0xc1,2,0xf4,2,0x80,2,3,0xc1,2,0x3c,0x3d,0xc0,0xb,0xc1,
2,0x34,0x3d,0xc0,0x2d,0xc1,2,0x1c,0x3d,0xc0,0x14,0xc1,2,0x14,0x3d,0x80,
0x3b,1,0xc1,2,0x3c,0x3d,0xc0,0x55,0xc1,2,0x1c,0x3d,0x80,0xb0,9,0xc1,
2,0x34,0x3d,0x80,0x77,5,0xc1,2,0x34,0x3d,0x80,0x87,1,0xc1,2,0x14,
0x3d,0x80,0x6e,0x15,0xc1,2,0xf4,0x3d,0xc0,0x6a,0xc1,2,0xfc,0x3d,0x80,0x39,
2,0xc1,2,0x3c,0x3d,0xc0,0x8f,0xc1,2,0x34,0x3d,0xc0,0x4b,0xc1,6,0x10,
0,0,0,0x90,0xa6,0xc2,2,1,0,0x80,0xa0,2,0xc1,2,0x34,0x3d,
0x80,0x3e,0xa,0xc1,2,0x14,0x3d,0x80,0x30,0xc,0xc1,2,0x14,0x3d,0x80,0x3e,
0x11,0xc1,2,0x14,0x3d,0x80,0x17,5,0xc1,2,0x34,0x3d,0x80,0xdc,2,0xc1,
2,0x34,0x3d,0x80,0x61,6,0xc1,2,0xec,0x3d,0xc0,0x67,0xc1,2,0xfc,0x3d,
0x80,0x9f,1,0xc1,2,0x34,0x3d,0x80,0x4f,7,0xc1,2,0x34,0x3d,0x80,0x1e,
1,0xc1,2,0xf4,0x3d,0xc0,0xc7,0xc1,2,0x34,0x3d,0x80,0xe9,4,0xc5,2,
0,0x80,0xe4,5,0xc1,2,0x2c,0x3d,0xc0,0x48,0xc1,2,0x2c,0x3d,0xc0,0x12,
0xc1,2,0x2c,0x3d,0x80,0x2d,0x21,0xc1,2,0x2c,0x3d,0x80,0x39,0x1a,0xc1,2,
0x34,0x3d,0xc0,0x3b,0xc1,2,0x34,0x3d,0x80,0xe4,0x33,0xc1,2,0xf4,0x3d,0xc0,
0x42,0xc1,2,0xf4,0x3d,0x80,0x4a,0x14,0xc1,2,0x14,0x3d,0xc0,0x53,0xc1,2,
0x14,0x3d,0xc0,0xa5,0xc1,2,0x14,0x3d,0xc0,0x59,0xc1,2,0x14,0x3d,0xc0,0x19,
0xc1,2,0x14,0x3d,0xc0,0x28,0xc1,2,0x14,0x3d,0xc0,0x79,0xc1,2,0x14,0x3d,
0xc0,0x13,0xc1,2,0x14,0x3d,0xc0,0x99,0xc1,2,0x14,0x3d,0x80,0x44,0x99,0xc1,
6,0xf4,0x3d,0,0,0xf4,2,0x80,0x82,0xb,0xc1,2,0x14,0x3d,0x80,0x6a,
1,0xc1,2,0x34,0x3d,0x80,0x45,2,0xc1,2,0x1c,0x3d,0xc0,0xb,0xc1,2,
0x3c,0x3d,0xc0,0x13,0xc1,2,0x1c,0x3d,0xc0,0xf,0xc1,2,0x3c,0x3d,0x80,0x5b,
0x14,0xc1,2,0x3c,0x3d,0xc0,0xe,0xc1,2,0x1c,0x3d,0xc0,0xf,0xc1,2,0x3c,
0x3d,0xc0,0x19,0xc1,2,0x1c,0x3d,0x80,0xdf,0x3c,0xc1,2,0x34,0x3d,0xc0,0x5f,
0xc1,2,0x34,0x3d,0xc0,8,0xc1,2,0x34,0x3d,0x80,0xc0,2,0xc1,2,0x34,
0x3d,0x80,0xf7,0xd,0xc1,2,0x34,0x3d,0xc0,0x83,0xc1,2,0x34,0x3d,0x80,0x8e,
1,0xc1,2,0x34,0x3d,0xc0,0xf2,0xc1,2,0x14,0x3d,0x80,0xa3,0xb6,0xc1,2,
0xf4,0x3d,0x80,0xab,3,0xc1,2,0xfc,0x3d,0x80,0xa3,3,0xc1,2,0x3c,0x3d,
0xc0,0x90,0xc1,2,0xa4,6,0xc0,5,0xc1,2,0xa4,6,0x80,0x23,1,0xc1,
2,0x30,0xc3,0xc0,6,0xc1,2,0x30,0xc3,0xc0,0x27,0xc1,3,0x90,0xa6,1,
0xc0,0x3f,0xc1,2,0x34,0x3d,0xc0,0x6b,0xc1,2,0x34,0x3d,0xc0,0x26,0xc1,2,
0x34,0x3d,0xc0,0x2e,0xc1,2,0x34,0x3d,0xc0,0x35,0xc1,2,0x34,0x3d,0xc0,0x2c,
0xc1,2,0x34,0x3d,0x80,0x35,1,0xc1,1,0xc,0xc0,0x3e,0xc1,1,0xc0,0xc0,
0x73,0xc1,2,0x34,0x3d,0xc0,0x12,0xc1,2,0x34,0x3d,0x80,0x89,2,0xc1,2,
0x34,0x3d,0xc0,0x16,0xc1,2,0x34,0x3d,0xc0,0x2f,0xc1,2,0x34,0x3d,0xc0,0xdb,
0xc1,1,0x80,0xc0,0x19,0xc1,1,0x80,0x80,0x50,2,0xc1,2,0x34,0x3d,0xc0,
0x38,0xc1,1,0x24,0x80,0xbe,0x21,0xc1,2,0x14,0x3d,0x80,0x6f,3,0xc1,2,
0x14,0x3d,0xc0,0x54,0xc1,2,0x14,0x3d,0x40,0x2e,8,1,0xc1,2,0x14,0x3d,
0x80,0xaa,0xbd,0xc1,2,0x14,0x3d,0x80,0xf7,0x2e,0xc1,2,0x34,0x3d,0x80,0x1d,
6,0xc1,2,0x34,0x3d,0x80,0x82,0x3f,0xc1,2,0x34,0x3d,0x80,0xa0,1,0xc1,
2,0x34,0x3d,0xc0,0xfd,0xc1,2,0x34,0x3d,0xc0,0x88,0xc1,2,0xec,0x3d,0xc0,
9,0xc1,2,0xec,0x3d,0xc0,0x6c,0xc1,2,0xec,0x3d,0xc0,0xc8,0xc1,2,0xec,
0x3d,0x80,0xfb,3,0xc1,2,0xfc,0x3d,0xc0,0x2c,0xc1,2,0xfc,0x3d,0x80,0xb7,
0x45,0xc1,2,0x34,0x3d,0xc0,0x2d,0xc1,2,0x34,0x3d,0x80,0xfa,5,0xc1,2,
0x34,0x3d,0x80,0x29,1,0xc1,2,0x34,0x3d,0x80,0xe4,0x17,0xc1,2,0x34,0x3d,
0xc0,0x98,0xc1,2,0x34,0x3d,0xc0,0x95,0xc1,2,0x34,0x3d,0xc0,0x66,0xc1,2,
0xf4,0x3d,0x80,0xa4,0x4f,-1,0
};

char vmm2225[]={
// 0x80,0xfc,0xf9,
0xc1,4,0x52,0x52,0x4c,0x21,0xc0,0x30,0xc1,1,6,0xc0,0x3f,
0xc1,1,0x1e,0xc0,7,0xc1,1,0x1e,0xc0,0x4b,0xc1,2,0x6c,7,0xc0,0x5e,
0xc1,2,0x1c,0xb2,0x80,0xdb,3,0xc1,0xce,6,0,0,0,6,0,0,
0,6,0,0,0,2,0,0,0,2,0,0,0,2,0,0,
0,0xe,0,0,0,0xe,0,0,0,0xe,0,0,0,0xe,0,0,
0,0xe,0,0,0,0xe,0,0,0,0xe,0,0,0,0xe,0,0,
0,0xe,0,0,0,0xe,0,0,0,0xe,0,0,0,0xe,0,0,
0,6,0,0,0,2,0,0,0,6,0,0,0,0xe,0,0,
0,2,0,0,0,6,0,0,0,0xe,0,0,0,2,0,0,
0,2,0,0,0,2,0,0,0,2,0,0,0,2,0,0,
0,2,0,0,0,2,0,0,0,2,0,0,0,0x3e,0,0,
0,6,0,0,0,2,0,0,0,0xe,0,0,0,2,0,0,
0,0xe,0,0,0,2,0,0,0,2,0,0,0,2,0,0,
0,0xe,0,0,0,0x1e,0,0,0,2,0,0,0,6,0,0,
0,0x1e,0,0,0,6,0,0,0,6,0,0,0,2,0,0,
0,0x1e,0,0,0,0xfe,1,0xc0,0x50,0xc1,2,0x6c,3,0x80,0xad,4,
0xc1,2,0x6c,3,0x80,0xcd,6,0xc1,2,0x14,3,0x80,0xea,6,0xc1,2,
0x14,3,0x80,0xac,1,0xc1,2,0x74,3,0x80,0xc1,0x28,0xc1,2,0x14,3,
0xc0,7,0xc1,2,0x14,3,0x80,0xa,1,0xc1,2,0x7c,3,0xc0,0xb,0xc1,
2,0x74,3,0x80,0x46,2,0xc1,2,0x1c,3,0xc0,0xb,0xc1,2,0x14,3,
0xc0,0x22,0xc1,2,0x7c,3,0x80,0x13,1,0xc1,2,0x1c,3,0x80,0xc9,0xa,
0xc1,2,0x14,3,0x80,0x81,1,0xc1,2,0x74,3,0x80,0x4b,4,0xc1,2,
0x14,3,0x80,0x6c,0x16,0xc1,2,0x14,3,0xc0,0x6f,0xc1,2,0x1c,3,0x80,
0xba,1,0xc1,6,0x10,0,0,0,0xb0,0xa6,0xc2,2,1,0,0xc0,0xa4,
0xc1,2,0x1c,3,0xc0,0x6c,0xc1,2,0x14,3,0x80,0x14,3,0xc1,2,0x14,
3,0x80,0xd1,4,0xc1,2,0x74,3,0x80,0xeb,0xe,0xc1,2,0x74,3,0x80,
0xd,0x12,0xc1,2,0x74,3,0x80,0xba,6,0xc1,2,0x14,3,0x80,0xf2,2,
0xc1,2,0x14,3,0x80,0x19,6,0xc1,2,0x6c,3,0xc0,0x59,0xc1,2,0x1c,
3,0x80,0x92,1,0xc1,2,0x14,3,0x80,0x3b,7,0xc1,2,0x14,3,0x80,
0xe,1,0xc1,2,0x14,3,0xc0,0xaa,0xc1,2,0x14,3,0x80,0x6c,4,0xc5,
2,0,0x80,0xe4,5,0xc1,2,0x6c,3,0xc0,0x48,0xc1,2,0x6c,3,0xc0,
0x12,0xc1,2,0x6c,3,0x80,0x4d,0x21,0xc1,2,0x6c,3,0x80,0x79,0x1a,0xc1,
2,0x14,3,0xc0,0x3b,0xc1,2,0x14,3,0x80,4,0x34,0xc1,2,0x14,3,
0xc0,0x42,0xc1,2,0x14,3,0x80,0x4a,0x14,0xc1,2,0x74,3,0xc0,0x53,0xc1,
2,0x74,3,0xc0,0xa5,0xc1,2,0x74,3,0xc0,0x59,0xc1,2,0x74,3,0xc0,
0x19,0xc1,2,0x74,3,0xc0,0x28,0xc1,2,0x74,3,0xc0,0x79,0xc1,2,0x74,
3,0xc0,0x13,0xc1,2,0x74,3,0xc0,0x99,0xc1,2,0x74,3,0x80,0x58,0x99,
0xc1,6,0x14,3,0,0,0x14,3,0x80,0x7e,0xb,0xc1,2,0x74,3,0x80,
0x6a,1,0xc1,2,0x14,3,0x80,0x45,2,0xc1,2,0x7c,3,0xc0,0xb,0xc1,
2,0x1c,3,0xc0,0x13,0xc1,2,0x7c,3,0xc0,0xf,0xc1,2,0x1c,3,0x80,
0x95,0x14,0xc1,2,0x1c,3,0xc0,0xe,0xc1,2,0x7c,3,0xc0,0xf,0xc1,2,
0x1c,3,0xc0,0x17,0xc1,2,0x7c,3,0x80,0x17,0x4c,0xc1,2,0x14,3,0xc0,
0x5f,0xc1,2,0x14,3,0xc0,8,0xc1,2,0x14,3,0x80,0xc0,2,0xc1,2,
0x14,3,0x80,0xf7,0xd,0xc1,2,0x14,3,0xc0,0x83,0xc1,2,0x14,3,0x80,
0x8e,1,0xc1,2,0x14,3,0xc0,0xf2,0xc1,2,0x74,3,0x80,0xe3,0xb6,0xc1,
2,0x14,3,0x80,0xab,3,0xc1,2,0x1c,3,0x80,0xa3,3,0xc1,2,0x1c,
3,0xc0,0x90,0xc1,2,0xa4,6,0xc0,5,0xc1,2,0xa4,6,0x80,0x23,1,
0xc1,2,0x30,0xc3,0xc0,6,0xc1,2,0x30,0xc3,0xc0,0x27,0xc1,3,0x90,0xa6,
1,0xc0,0x3f,0xc1,2,0x14,3,0xc0,0x6b,0xc1,2,0x14,3,0xc0,0x26,0xc1,
2,0x14,3,0xc0,0x2e,0xc1,2,0x14,3,0xc0,0x35,0xc1,2,0x14,3,0xc0,
0x2c,0xc1,2,0x14,3,0x80,0x35,1,0xc1,1,0xc,0xc0,0x3e,0xc1,1,0xc0,
0xc0,0x73,0xc1,2,0x14,3,0xc0,0x12,0xc1,2,0x14,3,0x80,0x89,2,0xc1,
2,0x14,3,0xc0,0x16,0xc1,2,0x14,3,0xc0,0x2f,0xc1,2,0x14,3,0xc0,
0xdb,0xc1,1,0x80,0xc0,0x19,0xc1,1,0x80,0x80,0x50,2,0xc1,2,0x14,3,
0xc0,0x38,0xc1,1,0x24,0x80,0xbe,0x21,0xc1,2,0x74,3,0x80,0x6f,3,0xc1,
2,0x74,3,0xc0,0x54,0xc1,2,0x74,3,0x40,0xee,7,1,0xc1,2,0x74,
3,0x80,0xaa,0xbd,0xc1,2,0x74,3,0x80,0xf7,0x2e,0xc1,2,0x14,3,0x80,
0x1d,6,0xc1,2,0x14,3,0x80,0x82,0x3f,0xc1,2,0x14,3,0x80,0xa0,1,
0xc1,2,0x14,3,0xc0,0xfd,0xc1,2,0x14,3,0xc0,0x88,0xc1,2,0x6c,3,
0xc0,9,0xc1,2,0x6c,3,0xc0,0x6c,0xc1,2,0x6c,3,0xc0,0xc8,0xc1,2,
0x6c,3,0x80,0xfb,3,0xc1,2,0x1c,3,0xc0,0x2c,0xc1,2,0x1c,3,0x80,
0xb7,0x45,0xc1,2,0x14,3,0xc0,0x2d,0xc1,2,0x14,3,0x80,0xfa,5,0xc1,
2,0x14,3,0x80,0x29,1,0xc1,2,0x14,3,0x80,0xe4,0x17,0xc1,2,0x14,
3,0xc0,0x98,0xc1,2,0x14,3,0xc0,0x95,0xc1,2,0x14,3,0xc0,0x66,0xc1,
2,0x14,3,0x80,0xa4,0x4f,-1,0
};

char vmm2226[]={
// 0x80,0xfc,0xf7,
0xc1,4,0x52,0x52,0x4c,0x21,0xc0,0x30,0xc1,1,0x3e,0xc0,0x3f,
0xc1,1,2,0xc0,7,0xc1,1,2,0xc0,0x4b,0xc1,2,0x2c,1,0xc0,0x5e,
0xc1,2,0x1c,0xb2,0x80,0xd3,3,0xc1,0xcd,6,0,0,0,0xfe,0,0,
0,2,0,0,0,2,0,0,0,0x3e,0,0,0,2,0,0,
0,2,0,0,0,2,0,0,0,2,0,0,0,2,0,0,
0,2,0,0,0,2,0,0,0,2,0,0,0,2,0,0,
0,2,0,0,0,2,0,0,0,2,0,0,0,2,0,0,
0,2,0,0,0,6,0,0,0,0xe,0,0,0,6,0,0,
0,2,0,0,0,0xe,0,0,0,2,0,0,0,2,0,0,
0,2,0,0,0,2,0,0,0,0x1e,0,0,0,0x1e,0,0,
0,2,0,0,0,2,0,0,0,2,0,0,0,2,0,0,
0,0xe,0,0,0,2,0,0,0,0x3e,0,0,0,0x1e,0,0,
0,0xfe,7,0,0,2,0,0,0,6,0,0,0,2,0,0,
0,2,0,0,0,0xe,0,0,0,6,0,0,0,6,0,0,
0,2,0,0,0,6,0,0,0,2,0,0,0,0xe,0,0,
0,0xe,0,0,0,0xe,0x80,0xa0,2,0xc1,2,0x2c,0x3d,0x80,0xe7,3,
0xc1,2,0x2c,0x3d,0x80,0xc1,4,0xc1,2,0x34,0x3d,0x80,0xd1,6,0xc1,2,
0x74,0x3d,0x80,0xb2,4,0xc1,2,0x14,0x3d,0x80,0xe6,0x25,0xc1,2,0x74,0x3d,
0xc0,7,0xc1,2,0x74,3,0x80,0xf4,2,0xc1,2,0x3c,0x3d,0xc0,0x19,0xc1,
2,0x34,0x3d,0xc0,0x2d,0xc1,2,0x1c,0x3d,0xc0,0x14,0xc1,2,0x14,0x3d,0x80,
0x3b,1,0xc1,2,0x3c,0x3d,0xc0,0x55,0xc1,2,0x1c,0x3d,0x80,0xb0,9,0xc1,
2,0x34,0x3d,0x80,0x77,5,0xc1,2,0x34,0x3d,0x80,0x87,1,0xc1,2,0x14,
0x3d,0x80,0x6e,0x15,0xc1,2,0x74,0x3d,0xc0,0x6a,0xc1,2,0x7c,0x3d,0x80,0x39,
2,0xc1,2,0x3c,0x3d,0xc0,0x8f,0xc1,2,0x34,0x3d,0xc0,0x4b,0xc1,6,0x10,
0,0,0,0x90,0xa6,0xc2,2,1,0,0x80,0xa9,2,0xc1,2,0x34,0x3d,
0x80,0x35,0xa,0xc1,2,0x14,0x3d,0x80,0x30,0xc,0xc1,2,0x14,0x3d,0x80,0x3e,
0x11,0xc1,2,0x14,0x3d,0x80,7,5,0xc1,2,0x34,0x3d,0x80,0xf8,2,0xc1,
2,0x34,0x3d,0x80,0x5b,6,0xc1,2,0x6c,0x3d,0xc0,0x67,0xc1,2,0x7c,0x3d,
0x80,0xa9,1,0xc1,2,0x34,0x3d,0x80,0x55,7,0xc1,2,0x34,0x3d,0x80,0xe,
1,0xc1,2,0x74,0x3d,0xc0,0xd5,0xc1,2,0x34,0x3d,0x80,0xd5,4,0xc5,2,
0,0x80,0xe4,5,0xc1,2,0x2c,0x3d,0xc0,0x48,0xc1,2,0x2c,0x3d,0xc0,0x12,
0xc1,2,0x2c,0x3d,0x80,0x2d,0x21,0xc1,2,0x2c,0x3d,0x80,0x39,0x1a,0xc1,2,
0x34,0x3d,0xc0,0x3b,0xc1,2,0x34,0x3d,0x80,0xe4,0x33,0xc1,2,0x74,0x3d,0xc0,
0x42,0xc1,2,0x74,0x3d,0x80,0x4a,0x14,0xc1,2,0x14,0x3d,0xc0,0x53,0xc1,2,
0x14,0x3d,0xc0,0xa5,0xc1,2,0x14,0x3d,0xc0,0x59,0xc1,2,0x14,0x3d,0xc0,0x19,
0xc1,2,0x14,0x3d,0xc0,0x28,0xc1,2,0x14,0x3d,0xc0,0x79,0xc1,2,0x14,0x3d,
0xc0,0x13,0xc1,2,0x14,0x3d,0xc0,0x99,0xc1,2,0x14,0x3d,0x80,0x44,0x99,0xc1,
6,0x74,0x3d,0,0,0x74,3,0x80,0x82,0xb,0xc1,2,0x14,0x3d,0x80,0x6a,
1,0xc1,2,0x34,0x3d,0x80,0x45,2,0xc1,2,0x1c,0x3d,0xc0,0xb,0xc1,2,
0x3c,0x3d,0xc0,0x13,0xc1,2,0x1c,0x3d,0xc0,0xf,0xc1,2,0x3c,0x3d,0x80,0x95,
0x14,0xc1,2,0x3c,0x3d,0xc0,0xe,0xc1,2,0x1c,0x3d,0xc0,0xf,0xc1,2,0x3c,
0x3d,0xc0,0x17,0xc1,2,0x1c,0x3d,0x80,0xa7,0x3c,0xc1,2,0x34,0x3d,0xc0,0x5f,
0xc1,2,0x34,0x3d,0xc0,8,0xc1,2,0x34,0x3d,0x80,0xc0,2,0xc1,2,0x34,
0x3d,0x80,0xf7,0xd,0xc1,2,0x34,0x3d,0xc0,0x83,0xc1,2,0x34,0x3d,0x80,0x8e,
1,0xc1,2,0x34,0x3d,0xc0,0xf2,0xc1,2,0x14,0x3d,0x80,0xa3,0xb6,0xc1,2,
0x74,0x3d,0x80,0xab,3,0xc1,2,0x7c,0x3d,0x80,0xa3,3,0xc1,2,0x3c,0x3d,
0xc0,0x90,0xc1,2,0xa4,6,0xc0,5,0xc1,2,0xa4,6,0x80,0x23,1,0xc1,
2,0x30,0xc3,0xc0,6,0xc1,2,0x30,0xc3,0xc0,0x27,0xc1,3,0x90,0xa6,1,
0xc0,0x3f,0xc1,2,0x34,0x3d,0xc0,0x6b,0xc1,2,0x34,0x3d,0xc0,0x26,0xc1,2,
0x34,0x3d,0xc0,0x2e,0xc1,2,0x34,0x3d,0xc0,0x35,0xc1,2,0x34,0x3d,0xc0,0x2c,
0xc1,2,0x34,0x3d,0x80,0x35,1,0xc1,1,0xc,0xc0,0x3e,0xc1,1,0xc0,0xc0,
0x73,0xc1,2,0x34,0x3d,0xc0,0x12,0xc1,2,0x34,0x3d,0x80,0x89,2,0xc1,2,
0x34,0x3d,0xc0,0x16,0xc1,2,0x34,0x3d,0xc0,0x2f,0xc1,2,0x34,0x3d,0xc0,0xdb,
0xc1,1,0x80,0xc0,0x19,0xc1,1,0x80,0x80,0x50,2,0xc1,2,0x34,0x3d,0xc0,
0x38,0xc1,1,0x24,0x80,0xbe,0x21,0xc1,2,0x14,0x3d,0x80,0x6f,3,0xc1,2,
0x14,0x3d,0xc0,0x54,0xc1,2,0x14,0x3d,0x40,0x2e,8,1,0xc1,2,0x14,0x3d,
0x80,0xaa,0xbd,0xc1,2,0x14,0x3d,0x80,0x17,0x2f,0xc1,2,0x34,0x3d,0x80,0x1d,
6,0xc1,2,0x34,0x3d,0x80,0x62,0x3f,0xc1,2,0x34,0x3d,0x80,0xa0,1,0xc1,
2,0x34,0x3d,0xc0,0xfd,0xc1,2,0x34,0x3d,0xc0,0x88,0xc1,2,0x6c,0x3d,0xc0,
9,0xc1,2,0x6c,0x3d,0xc0,0x6c,0xc1,2,0x6c,0x3d,0xc0,0xc8,0xc1,2,0x6c,
0x3d,0x80,0xfb,3,0xc1,2,0x7c,0x3d,0xc0,0x2c,0xc1,2,0x7c,0x3d,0x80,0xb7,
0x45,0xc1,2,0x34,0x3d,0xc0,0x2d,0xc1,2,0x34,0x3d,0x80,0xfa,5,0xc1,2,
0x34,0x3d,0x80,0x29,1,0xc1,2,0x34,0x3d,0x80,0xe4,0x17,0xc1,2,0x34,0x3d,
0xc0,0x98,0xc1,2,0x34,0x3d,0xc0,0x95,0xc1,2,0x34,0x3d,0xc0,0x66,0xc1,2,
0x74,0x3d,0x80,0xa4,0x4f,-1,0
};

char vmm3000[]={
// 0x80,0xfc,0xcf,
// 0xc1,4,0x52,0x52,0x4c,0x22,0xc0,0x1c,0xc1,1,0xc,0x80,0xdf,3,
0xc1,4,0x52,0x52,0x4c,0x22,0xc0,0x30,0xc1,1,4,0xc0,0x3f,0xc1,1,
0xc,0xc0,7,0xc1,1,0xc,0x80,0x2c,2,0xc1,2,0x10,3,0x80,0xe2,2,
0xc1,0xd,4,0,0,0,4,0,0,0,0x3c,0,0,0,4,0x80,
0x3f,0xa1,0xc1,2,0xe0,0xbd,0xc0,0x2f,0xc1,6,0x10,0,0,0,0x5c,0x73,
0xc2,2,1,0,0xc0,0x4b,0xc1,6,0x10,0,0,0,0xbc,0x70,0xc2,2,
1,0,0x80,0xaf,0xe,0xc5,4,0,0x40,0xc3,0x55,5,0xc1,2,0x34,0x19,
0xc0,0xb2,0xc1,2,0xd0,0xe2,0x80,0x77,2,0xc1,1,0xa,0xc0,0x29,0xc1,1,
0xa0,0x80,0xc3,0x34,-1,0
};

char vmm3002[]={
// 0x80,4,0xcc,
0xc1,4,0x52,0x52,0x4c,0x22,0xc0,0x30,0xc1,1,4,0xc0,0x3f,
0xc1,1,0xc,0xc0,7,0xc1,1,0xc,0x80,0x2c,2,0xc1,2,0x10,3,0x80,
0xea,2,0xc1,0xd,4,0,0,0,0x1c,0,0,0,4,0,0,0,
0xc,0x80,0x6a,0xa1,0xc1,2,0xe0,0xbd,0xc0,0x2f,0xc1,6,0x10,0,0,0,
0x5c,0x73,0xc2,2,1,0,0xc0,0x4b,0xc1,6,0x10,0,0,0,0xbc,0x70,
0xc2,2,1,0,0x80,0x74,0x1c,0xc5,4,0,0x40,0xc3,0x65,5,0xc1,2,
0x34,0x19,0xc0,0xb2,0xc1,2,0xd0,0xe2,0x80,0x77,2,0xc1,1,0xa,0xc0,0x29,
0xc1,1,0xa0,0x80,0xdd,0x36,-1,0
};

char vmm3003[]={
// 0x80,4,0xcc,
0xc1,4,0x52,0x52,0x4c,0x22,0xc0,0x30,0xc1,1,4,0xc0,0x3f,
0xc1,1,0xc,0xc0,7,0xc1,1,0xc,0x80,0x2c,2,0xc1,2,0x10,3,0x80,
0xea,2,0xc1,0xd,4,0,0,0,0x1c,0,0,0,4,0,0,0,
0xc,0x80,0x6a,0xa1,0xc1,2,0xe0,0xbd,0xc0,0x2f,0xc1,6,0x10,0,0,0,
0x5c,0x73,0xc2,2,1,0,0xc0,0x4b,0xc1,6,0x10,0,0,0,0xbc,0x70,
0xc2,2,1,0,0x80,0x64,0x1c,0xc1,4,0x50,0x32,3,0x78,0xc0,0xc,0xc5,
4,0,0x40,0xc3,0x65,5,0xc1,2,0x34,0x19,0xc0,0xb2,0xc1,2,0xd0,0xe2,
0x80,0x77,2,0xc1,1,0xa,0xc0,0x29,0xc1,1,0xa0,0x80,0xdd,0x36,-1,0
};


char vc1998[]={
0xc0,0x7c,0xc1,4,0x52,0x52,0x4c,0x20,0x80,0xa5,0x5c,0xc1,2,0x20,1,0xc0,
5,0xc1,2,0x20,1,0x80,0xd0,0x31,-1,0
};

char vc2183[]={
0xc0,0x7c,0xc1,4,0x52,0x52,0x4c,0x20,0x80,0xa5,0x5c,0xc1,2,0x20,1,0xc0,
5,0xc1,2,0x20,1,0x80,0x11,0x34,-1,0
};

char vc2222[]={
0xc0,0x7c,0xc1,4,0x52,0x52,0x4c,0x21,0x80,0xa5,0x5c,0xc1,2,0x20,1,0xc0,
5,0xc1,2,0x20,1,0x80,0xd0,0x31,-1,0
};

char vc3000[]={
0xc0,0x7c,0xc1,4,0x52,0x52,0x4c,0x22,0x80,0x36,0x7d,0xc1,2,0x20,1,0xc0,
5,0xc1,2,0x20,1,0x80,0xf7,2,-1,0
};

#ifdef SELF

char vc98[]={
0xc0,0x7c,0xc1,4,0x52,0x52,0x4c,0x20,0x80,0xa5,0x5c,0xc1,2,0x20,1,0xc0,
5,0xc1,2,0x20,1,0x80,0xf9,0x33,-1,0
};

char vcse[]={
0xc0,0x7c,0xc1,4,0x52,0x52,0x4c,0x21,0x80,0xa5,0x5c,0xc1,2,0x20,1,0xc0,
5,0xc1,2,0x20,1,0x80,0xf9,0x33,-1,0
};

char vcme[]={
0xc0,0xc4,0xc1,4,0x52,0x52,0x4c,0x22,0x80,0xee,0x80,0xc1,2,0xa0,1,0xc0,
5,0xc1,2,0xa0,1,0x80,0x2a,5,-1,0
};

#endif

char histd[]={0x80,0x92,0x69,0xc1,1,0x60,0x80,0x14,0x18,-1,0};
char hialt[]={0x80,0x92,0x69,0xc1,1,0x60,0x80,0x34,0x16,-1,0};

long vcksm[]={0xd45cca26,0xc7344b5,
              0xe07b4b6d,0x93547a1f,0x55bcfe4f,0xc505fd37,
              0x207254df,0x937f1942,0xcf5602f2,

#ifdef SELF
              0xd45cc626,0xe07b476d,0x207250df,       // VMM32.VXD
#endif

              0};

long ccksm[]={0x8043d766,0x6e62a261,0x27b08324,0x53e5ed19,

#ifdef SELF
              0x9ec7707,0x654b15c9,0xdc106d9,       // VCACHE.VXD
#endif

              0};

long hcksm[]={0x57d1875c,0x71e78d3f,0};

#ifdef SELF
long ring3_98[]={0x40c57,0x4192a,0x41b8e,0x41bc5,0x41c07,0x41c36,0x41c88,0x424fd,0};
long ring3_se[]={0x40c57,0x4192a,0x41b8c,0x41bc3,0x41c05,0x41c34,0x41c86,0x424fd,0};
long ring3_me[]={0x6d577,0x6e0b7,0x6e25c,0x6e9e3,0};
long ring3off[]={0,-0xc00,0,-0xc00,0x640,-0xc00,0,0x1600,0x1600,0,0,0};
long *r3=0;
#endif

char v3name[256];
char vname[256],vback[256];
char cname[256],cback[256];
char hname[256],hback[256];
char *b,*diff;
int f,f2,n,np;

long base,table[1024],lseek();

int rl(f,b)
int f;
char *b;
{
int i,j;
i=0;
lp: j=_read(f,b+i,1);
if (j<1) return(0);
if (b[i]<32) {
if (i==0) goto lp;
b[i]=0;return(i);
}
if (i<255) i++;
goto lp;
}

uncomp(src,dest)
int src,dest;
{
int i,j,k,l[2];
*(long *)(subr+2792)=0xcbf53de8;  // 0xe8,0x3d,0xf5,0xcb   call $-0xaco  retf
i=0;j=(int)(&subr);k=(int)(&l);
while(rel[i]) {(*(int *)(subr+rel[i]))+=j-reloff;i++;}
rel[0]=0;j+=0xae8;
_asm {
db 0x60
push ds
push es
push ds
pop es
cld
mov bx,[k]
mov ax,[j]
mov [bx],ax
mov [bx+2],ds
mov si,[src]
mov di,[dest]
mov ax,0x2000
db 0xff,0x1f
pop es
pop ds
mov [i],ax
db 0x61
};
return(i);
}

int readd(b1,l)
char *b1;
int l;
{
memcpy(b1,diff,l);diff+=l;return(l);
}

int readx(a,bb,l)
long a;
char *bb;
int l;
{
long y,z;
int i,j;
a-=base;
while(l) {
y=a>>13;
if (y-np) {
lseek(f,table[y],0);
z=table[y+1]-table[y];i=z;
if (z>0x2000) return(-1);
if (z<0x2000) {
if (_read(f,b+0x6000,i)<i) return(-1);
if (uncomp(b+0x6000,b+0x4000)-8192) return(-1);
}
else {
if (_read(f,b+0x4000,8192)<8192) return(-1);
}
np=y;
}
i=a&8191;j=8192-i;
if (l<j) j=l;
memcpy(bb,b+0x4000+i,j);a+=j;bb+=j;l-=j;
}
return(1);
}

char *dmake(f1,df,f3)
int f1,f3;
char *df;
{
unsigned long i,j,k;
char *b2,z[5];
b2=b+8192;diff=df;
lp: *(long *)(z+1)=0;
readd(z,2);
j=(z[0]>>6)&3;j=3-j;
readd(z+2,j);
z[0]&=0x3f;
i= *(unsigned long *)(z+1);
switch(z[0]) {
case 0x3f: if (_read(f1,b,1)>0) goto badd;
           return(0);
case 0: while(i>0) {
        j=i;
        if (j>8192) j=8192;
        if (_read(f1,b,j)<j) goto rerr;
        if (_write(f3,b,j)<j) goto werr;
        i-=j;
        }
        goto lp;
case 1: while(i>0) {
        k=i;
        if (k>8192) k=8192;
        if (_read(f1,b,k)<k) goto rerr;
        readd(b2,k);
        for (j=0;j<k;j++) b[j]^=b2[j];
        if (_write(f3,b,k)<k) goto werr;
        i-=k;
        }
        goto lp;
case 2: while(i>0) {
        j=i;
        if (j>8192) j=8192;
        readd(b2,j);
        if (_write(f3,b2,j)<j) goto werr;
        i-=j;
        }
        goto lp;
case 3: while(i>0) {
        k=i;
        if (k>8192) k=8192;
        if (_read(f1,b,k)<k) goto rerr;
        readd(b2,k);
        for (j=0;j<k;j++) if (b[j]-b2[j]) goto badd;
        i-=k;
        }
        goto lp;
case 4: readd(b2,1);
        while(i>0) {
        k=i;
        if (k>8192) k=8192;
        for (j=1;j<k;j++) b2[j]=b2[0];
        if (_write(f3,b2,k)<k) goto werr;
        i-=k;
        }
        goto lp;
case 5: readd(b2,1);
        while(i>0) {
        k=i;
        if (k>8192) k=8192;
        if (_read(f1,b,k)<k) goto rerr;
        for (j=1;j<k;j++) b2[j]=b2[0];
        for (j=0;j<k;j++) if (b[j]-b2[j]) goto badd;
        i-=k;
        }
        goto lp;
default: return("Unknown Block");
};
rerr: return("Source Too Short");
badd: return("Invalid File or Already Patched");
werr: return("Error Writing Dest");
}

int bakname(n,b,e,r)
char *n,*b,*e;
int *r;
{
int i,j,k,l;
b[0]=0;*r=0;
if (n[0]) {
strcpy(b,n);i=strlen(b);k=l= -1;
for (j=0;j<i;j++) {
if (b[j]=='.') k=j;
if (b[j]=='\\') {k= -1;l=j;}
}
if (k<0) strcat(b,".BAK");
else strcpy(b+k+1,"BAK");
if (strlen(b)>(l+13)) {printf("Invalid %s Name\n",e);return(20);}
if (stricmp(n,b)==0) {printf("%s Name Conflicts with Backup Name\n",e);return(20);}
(*r)=4;
i=_open(n,0);
if (i>0) {_close(i);(*r)|=1;}
i=_open(b,0);
if (i>0) {_close(i);(*r)|=2;}
}
return(0);
}

main(c,v)
int c;
char **v;
{
int exist,i,j,k,max,t,h,un;
long x,y,z,ckv,ckc,ckh,header[256];
char *a;
un=1;max=512;f2= -1;
if (c>1) if (v[1][0]=='+') {max=getnum(v[1]+1);c--;v++;}
*(int *)(vc1998+0xd)= *(int *)(vc1998+0x13)=max^0x320;
*(int *)(vc2183+0xd)= *(int *)(vc2183+0x13)=max^0x320;
*(int *)(vc2222+0xd)= *(int *)(vc2222+0x13)=max^0x320;
*(int *)(vc3000+0xd)= *(int *)(vc3000+0x13)=max^0x320;

#ifdef SELF
*(int *)(vc98+0xd)= *(int *)(vc98+0x13)=max^0x320;
*(int *)(vcse+0xd)= *(int *)(vcse+0x13)=max^0x320;
*(int *)(vcme+0xd)= *(int *)(vcme+0x13)=max^0x320;
if (c>1) if (v[1][0]=='#') {r3++;c--;v++;}
if ((c>1) && (c-5)) {printf("PATCHMEM [+MAXCACHE] [#Ring3] [VMM32File VMMFile VCACHEFile HimemFile]\n");return(20);}
printf("\nWindows 98/SE/ME RAM Limitation Patch  Version 3.2 RRL\nCopyright (C) 2007 by Rudolph R. Loew. All Rights Reserved.\n\n");
#endif

#ifdef PRO
if ((c>1) && (c-5)) {printf("PATCHMEM [+MAXCACHE] [VMM32File VMMFile VCACHEFile HimemFile]\n");return(20);}
printf("\nWindows 98/SE/ME RAM Limitation Patch  Version 3.2\nCopyright (C) 2007 by Rudolph R. Loew. All Rights Reserved.\n\n");
#endif

#ifdef DEMO
if ((c>1) && (c-5)) {printf("PATCHM [+MAXCACHE] [VMM32File VMMFile VCACHEFile HimemFile]\n");return(20);}
printf("\nWindows 98/SE/ME RAM Limitation Patch  (DEMO) Version 3.2\nCopyright (C) 2007 by Rudolph R. Loew. All Rights Reserved.\n\n");
#endif

v3name[0]=vname[0]=cname[0]=hname[0]=0;
b=(char *)malloc(32767);
if (b==0) {printf("Not Enough Memory\n");return(20);}
f=_open("C:\\MSDOS.SYS",0);
if (f<0) goto nodir;
while((i=rl(f,b))>0) if (i>9) {
if (b[6]=='=') b[6]=0;
if (stricmp(b,"WINDIR")==0) if (v3name[0]==0) strcpy(v3name,(char *)b+7);
if (i>13) {
if (b[10]=='=') b[10]=0;
if (hname[0]==0) if (stricmp(b,"WINBOOTDIR")==0) strcpy(hname,(char *)b+11);
}
}
_close(f);
nodir: if (v3name[0]) {
strcpy(vname,v3name);strcat(vname,"\\SYSTEM\\VMM32\\VMM.VXD");
strcpy(cname,v3name);strcat(cname,"\\SYSTEM\\VMM32\\VCACHE.VXD");
strcat(v3name,"\\SYSTEM\\VMM32.VXD");
}
if (hname[0]) strcat(hname,"\\HIMEM.SYS");
if (c>1) {
if (v[1][0]=='-') v3name[0]=0;
else if (v[1][0]-'*') strcpy(v3name,v[1]);
if (v[2][0]=='-') vname[0]=0;
else if (v[2][0]-'*') strcpy(vname,v[2]);
if (v[3][0]=='-') cname[0]=0;
else if (v[3][0]-'*') strcpy(cname,v[3]);
if (v[4][0]=='-') hname[0]=0;
else if (v[4][0]-'*') strcpy(hname,v[4]);
}
else {
if (v3name[0]==0) {printf("Cannot Locate Windows Directory\n");return(20);}
if (hname[0]==0) {printf("Cannot Locate Windows Boot Directory\n");return(20);}
}
exist=0;
if (bakname(v3name,b,"VMM32",&i)) return(20);
exist|=i;
if (bakname(vname,vback,"VMM",&i)) return(20);
exist|=i<<4;
if (bakname(cname,cback,"VCACHE",&i)) return(20);
exist|=i<<8;
if (bakname(hname,hback,"HIMEM",&i)) return(20);
exist|=i<<12;
if ((exist&0x4440)==0) {printf("No Files Specified for Update\n");return(20);}
if (exist&2) {printf("%s Found: Cannot Patch modified VMM32.VXD\n",b);return(20);}
if ((exist&0x30)==0x20) {
printf("VMM Backup Found without VMM File - Rename (Y/N) ? (N) ");read(0,&i,4);
if ((i&0xdf)-'Y') return(20);
if (rename(vback,vname)) {printf("Unable To Rename Backup\n");return(20);}
exist-=0x10;
}
if ((exist&0x300)==0x200) {
printf("VCACHE Backup Found without VCACHE File - Rename (Y/N) ? (N) ");read(0,&i,4);
if ((i&0xdf)-'Y') return(20);
if (rename(cback,cname)) {printf("Unable To Rename Backup\n");return(20);}
exist-=0x100;
}
if ((exist&0x3000)==0x2000) {
printf("HIMEM Backup Found without HIMEM File - Rename (Y/N) ? (N) ");read(0,&i,4);
if ((i&0xdf)-'Y') return(20);
if (rename(hback,hname)) {printf("Unable To Rename Backup\n");return(20);}
exist-=0x1000;
}
if ((exist&1)==0) {
if (c<5) {printf("%s Missing\n",v3name);return(20);}
if ((exist&0x50)==0x40) {printf("%s File Not Found - VMM32File Required\n",vname);return(20);}
if ((exist&0x500)==0x400) {printf("%s File Not Found - VMM32File Required\n",cname);return(20);}
}
if ((exist&0x5000)==0x4000) {printf("%s File Not Found\n",hname);return(20);}
t=0;f= -1;
if (exist&0x10) f=_open(vname,0);
else if (exist&1) f=_open(v3name,0);
if (f>=0) {
if (_read(f,b,64)<64) {printf("Error Reading VMM Header\n");return(20);}
x= *(long *)(b+0x3c);
lseek(f,x-4,0);
if (_read(f,b,4)<4) {printf("Error Reading Patch Flag\n");return(20);}
x= *(long *)b;
if (x) {
if ((x&0xffffff)-0x4c5252) {printf("Unknown Data in Patch Flag Area\n");return(20);}
if ((exist&0x10)==0) {printf("VMM32 File Patched - Uninstall Patch using Original Patcher then Rerun Patch\n");return(20);}
t=(x>>24)&255;
}
_close(f);
}
if ((exist&0x50)==0x50) {
f=_open(vname,0);
if (f<0) {printf("Cannot Open VMM File\n");return(20);}
if (_read(f,b,64)<64) {printf("Error Reading VMM Header\n");return(20);}
z= *(long *)(b+0x3c);
lseek(f,z-4,0);
if (_read(f,b,4)<4) {printf("Error Reading VMM Patch Flag\n");return(20);}
z= *(long *)b;
if (z) {
if ((z&0xffffff)-0x4c5252) {printf("VMM File Overwritten by Unknown File\n");return(20);}
if ((exist&0x20)==0) {
printf("\nWARNING: Patched VMM File Found Without Backup - Skipping\n");
exist&=0xff0f;
}
}
else {
if (exist&0x20) {
printf("VMM File Updated by Other Program - Removing Backup\n");
if (unlink(vback)) {printf("Cannot Remove VMM Backup\n");return(20);}
exist&=0xffdf;
}
}
_close(f);
}
if ((exist&0x500)==0x500) {
f=_open(cname,0);
if (f<0) {printf("Cannot Open VCACHE File\n");return(20);}
if (_read(f,b,64)<64) {printf("Error Reading VCACHE Header\n");return(20);}
z= *(long *)(b+0x3c);
lseek(f,z-4,0);
if (_read(f,b,4)<4) {printf("Error Reading VCACHE Patch Flag\n");return(20);}
z= *(long *)b;
if (z) {
if ((z&0xffffff)-0x4c5252) {printf("VCACHE File Overwritten by Unknown File\n");return(20);}
if ((exist&0x200)==0) {
printf("\nWARNING: Patched VCACHE File Found Without Backup - Skipping\n");
exist&=0xf0ff;
}
}
else {
if (exist&0x200) {
printf("VCACHE File Updated by Other Program - Removing Backup\n");
if (unlink(cback)) {printf("Cannot Remove VCACHE Backup\n");return(20);}
exist&=0xfdff;
}
}
_close(f);
}
if ((exist&0x5000)==0x5000) {
f=_open(hname,0);
if (f<0) {printf("Cannot Open HIMEM File\n");return(20);}
lseek(f,0x6992L,0);
if (_read(f,b,1)<1) {printf("Error Reading HIMEM Patch\n");return(20);}
if ((b[0]-0x30) && (b[0]-0x50)) {printf("HIMEM File Overwritten by Unknown File\n");return(20);}
if (b[0]==0x50) {
if ((exist&0x2000)==0) {
printf("\nWARNING: Patched HIMEM File Found Without Backup - Skipping\n");
exist&=0xfff;
}
}
else {
if (exist&0x2000) {
printf("HIMEM File Updated by Other Program - Removing Backup\n");
if (unlink(hback)) {printf("Cannot Remove HIMEM Backup\n");return(20);}
exist&=0xdfff;
}
}
_close(f);
}
i=j=0;
if ((exist&0x60)==0x60) i++;
if ((exist&0x60)==0x40) j++;
if ((exist&0x600)==0x600) i++;
if ((exist&0x600)==0x400) j++;
if ((exist&0x6000)==0x6000) i++;
if ((exist&0x6000)==0x4000) j++;
if (i && j) {
printf("Incomplete Installation Detected - Continue/UnInstall/Quit (C/U/Q) ? (Q) ");
read(0,&i,4);
if ((i&0xdf)=='C') goto inst;
if ((i&0xdf)=='U') goto uninst;
return(20);
}
if (j) goto inst;
if (i==0) {printf("\nNo Changes Made\n\n");return(1);}
printf("\nPatch Already Installed - Uninstall (Y/N) ? (N) ");read(0,&i,4);
if ((i&0xdf)-'Y') return(1);
uninst: _close(f);_close(f2);
if (exist&0x80) {
if (unlink(vname)) printf("Cannot Remove VMM File\n");
else if (rename(vback,vname)) printf("Cannot Rename Backup VMM File\n");
exist&=0xff0f;
}
if (exist&0x800) {
if (unlink(cname)) printf("Cannot Remove VCACHE File\n");
else if (rename(cback,cname)) printf("Cannot Rename Backup VCACHE File\n");
exist&=0xf0ff;
}
if (exist&0x8000) {
if (unlink(hname)) printf("Cannot Remove HIMEM File\n");
else if (rename(hback,hname)) printf("Cannot Rename Backup HIMEM File\n");
exist&=0xfff;
}
if ((exist&0x70)==0x70) {
z=0;
f=_open(vname,0);
if (f<0) {printf("Cannot Open VMM File\n");return(20);}
if (_read(f,b,64)<64) {printf("Error Reading VMM Header\n");goto unvm;}
z= *(long *)(b+0x3c);
lseek(f,z-4,0);
if (_read(f,b,4)<4) {printf("Error Reading VMM Patch Flag\n");goto unvm;}
z= *(long *)b;
unvm: _close(f);
f=_open(vback,0);
if (f<0) {printf("Error Opening %s\n",vback);return(20);}
if (unlink(vname)) {printf("Cannot Remove Patched VMM32 File\n");return(20);}
_close(f);
if (z&0x10000000) {
if (unlink(vback)) {printf("Cannot Remove VMM32 Backup\n");return(20);}
}
else {
if (rename(vback,vname)) {printf("Cannot Rename VMM32 Backup\n");return(20);}
}
}
if ((exist&0x700)==0x700) {
z=0;
f=_open(cname,0);
if (f<0) {printf("Cannot Open VCACHE File\n");return(20);}
if (_read(f,b,64)<64) {printf("Error Reading VCACHE Header\n");goto unvc;}
z= *(long *)(b+0x3c);
lseek(f,z-4,0);
if (_read(f,b,4)<4) {printf("Error Reading VCACHE Patch Flag\n");goto unvc;}
z= *(long *)b;
unvc: _close(f);
f=_open(cback,0);
if (f<0) {printf("Error Opening %s\n",cback);return(20);}
if (unlink(cname)) {printf("Cannot Remove Patched VCACHE File\n");return(20);}
_close(f);
if (z&0x10000000) {
if (unlink(cback)) {printf("Cannot Remove VCACHE Backup\n");return(20);}
}
else {
if (rename(cback,cname)) {printf("Cannot Rename VCACHE Backup\n");return(20);}
}
}
if ((exist&0x7000)==0x7000) {
f=_open(hback,0);
if (f<0) {printf("Error Opening %s\n",hback);return(20);}
if (unlink(hname)) {printf("Cannot Remove Patched HIMEM File\n");return(20);}
_close(f);
if (rename(hback,hname)) {printf("Cannot Rename HIMEM Backup\n");return(20);}
}
if (un) printf("\nUninstall Completed\n\n");
return(0);
inst: un=0;
if (((exist&0x70)==0x40) || ((exist&0x700)==0x400)) {
f=_open(v3name,0);
if (f<0) {printf("Cannot Open %s\n",v3name);return(20);}
i=_read(f,b,0x6000);
if (i<0x4c00) goto bad;
if ((*(long *)(b+0x40ca))==0x2e061e60) {
rel=rel98;reloff=0x3ea2;memcpy(subr,b+0x40a2,2792);goto ok;
}
if ((*(long *)(b+0x3636))==0x2e061e60) {
rel=relme;reloff=0x340e;memcpy(subr,b+0x360e,2792);goto ok;
}
printf("Unrecognized Decompressor in VMM32 File\n");return(20);
ok: base= *(long *)(b+0x3c);x=lseek(f,0L,2);lseek(f,base,0);
if (_read(f,b,16)<16) goto bad;
i= *(int *)b;
if (i-0x3457) {printf("Not Compressed VMM32 File\n");return(20);}
i= *(int *)(b+4);
if (i-0x2000) goto bad;
n= *(int *)(b+6);np= -1;
if (n>1022) goto bad;
table[n]=x;table[n+1]=0;i=n<<2;
if (_read(f,table,i)<i) goto bad;
if (readx(base,b,8192)<1) {printf("Decompression Error\n");return(20);}
i= *(int *)b;
if (i-0x3357) goto bad;
i=b[0x470];
switch(i&255) {
case 0x5f: break;
case 0xa8: t|=1;break;
case 0x64: t|=2;break;
default: goto bad;
};
memcpy(header,b,1024);
if (header[4]-0x204d4d56) {printf("Unexpected VMM32 Format\n");return(20);}
if ((exist&0x70)==0x40) {
f2=_creat(vname,0);
if (f2<0) {printf("Cannot Create New VMM File\n");return(20);}
lseek(f,0L,0);
if (_read(f,b,64)<64) goto badvmr;
(*(long *)(b+0x3c))+=0x400;
if (_write(f2,b,64)<64) goto badvmw;
y=base-64;
while(y) {
i=y;
if (y>0x4000) i=0x4000;
if (_read(f,b,i)<i) goto badvmr;
if (_write(f2,b,i)<i) goto badvmw;
y-=i;
}
x=base;
if (readx(x,b,0x484)<1) goto badvcr;
y= *(long *)(b+0x414);z= *(long *)(b+0x42c);z=(4096-z)&4095;y=(y<<12)-z;
y+= *(long *)(b+0x480) - base;
for (i=32;i<1024;i++) b[i]=0;
b[4]=1;i=0x484;goto vmp;
while(y) {
i=y;
if (y>0x4000) i=0x4000;
if (readx(x,b,i)<1) goto badvmr;
vmp: if (_write(f2,b,i)<i) goto badvmw;
y-=i;x+=i;
}
_close(f2);
vmm1998[5]|=0x10;vmm2222[5]|=0x10;vmm3000[5]|=0x10;
exist|=0x10;printf("VMM File Extracted\n");
}
if ((exist&0x700)==0x400) {
for (i=4;i<256;i+=4) {
if ((header[i]==0x43414356) && (header[i+1]==0x20204548)) goto vcok;
}
printf("VCACHE Module Not in VMM32 File\n");return(20);
vcok: f2=_creat(cname,0);
if (f2<0) {printf("Cannot Create New VCACHE File\n");return(20);}
if (_write(f2,mz,128)<128) goto badvcw;
x=header[i+2];
if (readx(x,b,132)<1) goto badvcr;
y= *(long *)(b+0x14);z= *(long *)(b+0x2c);z=(4096-z)&4095;y=(y<<12)-z;
z= *(long *)(b+0x70);
if (z>0xb80) goto badvcr;
z= *(long *)(b+0x80) - x;
if (z<0xc00) goto badvcr;
if (z>0x4000) goto badvcr;
(*(long *)(b+128))=0xc00;
if (_write(f2,b,132)<132) goto badvcw;
if (readx(x+132,b,0xafc)<1) goto badvcr;
if (_write(f2,b,0xafc)<0xafc) goto badvcw;
x+=z;
while(y) {
i=y;
if (y>0x4000) i=0x4000;
if (readx(x,b,i)<1) goto badvcr;
if (_write(f2,b,i)<i) goto badvcw;
y-=i;x+=i;
}
_close(f2);
vc1998[7]|=0x10;vc2222[7]|=0x10;vc3000[7]|=0x10;

#ifdef SELF
vc98[7]|=0x10;vcse[7]|=0x10;vcme[7]|=0x10;
#endif

exist|=0x100;printf("VCACHE File Extracted\n");
}
_close(f);
}
if ((exist&0x70)==0x50) {
f=_open(vname,0);
if (f<0) {printf("Cannot Open VMM File\n");return(20);}
y=0;
while((i=_read(f,b,0x6000))>0) {
i=i& -4;
for (j=0;j<i;j+=4) y+= *(long *)(b+j);
}
_close(f);
ckv= -1;
while(vcksm[++ckv]) if (y==vcksm[ckv]) goto vfnd;
printf("Unknown VMM File\n");return(20);
}
vfnd: if ((exist&0x700)==0x500) {
f=_open(cname,0);
if (f<0) {printf("Cannot Open VCACHE File\n");return(20);}
y=0;
while((i=_read(f,b,0x6000))>0) {
i=i& -4;
for (j=0;j<i;j+=4) y+= *(long *)(b+j);
}
_close(f);
ckc= -1;
while(ccksm[++ckc]) if (y==ccksm[ckc]) goto cfnd;
printf("Unknown VCACHE File\n");return(20);
}
cfnd: if ((exist&0x7000)==0x5000) {
f=_open(hname,0);
if (f<0) {printf("Cannot Open HIMEM File\n");return(20);}
y=0;
while((i=_read(f,b,0x6000))>0) {
i=i& -4;
for (j=0;j<i;j+=4) y+= *(long *)(b+j);
}
_close(f);
ckh= -1;
while(hcksm[++ckh]) if (y==hcksm[ckh]) goto hfnd;
printf("Unknown HIMEM File\n");return(20);
}
hfnd: if ((exist&0x70)==0x50) {
if (rename(vname,vback)) {printf("Cannot Rename VMM File\n");return(20);}
exist|=80;
f=_open(vback,0);
if (f<0) {printf("Cannot Open Old VMM File\n");goto uninst;}
f2=_creat(vname,0);
if (f2<0) {printf("Cannot Create New VMM File\n");goto uninst;}
_close(f2);f2=_open(vname,0x44);
if (f2<0) {printf("Cannot Reopen New VMM File\n");goto uninst;}
if (_read(f,b,64)<64) goto undovmr;
x= *(long *)(b+0x3c);

#ifdef SELF
if (ckv>=9) {
x+=1024;
if (ckv==9) ckv=0;
if (ckv==10) ckv=2;
if (ckv==11) ckv=6;
}
#endif

if (_write(f2,b,64)<64) goto undovmw;
y=x-192;
while(y) {
i=y;
if (y>0x4000) i=0x4000;
if (_read(f,b,i)<i) goto undovmr;
if (_write(f2,b,i)<i) goto undovmw;
y-=i;
}
if (_read(f,b,124)<124) goto undovmr;
if (_write(f2,cr,124)<124) goto undovmw;

if ((ckv==0) || (ckv==2) || (ckv==6)) {
lseek(f2,-1024L,1);
if (_read(f2,b,1024)<1024) goto undovmw;
if (ckv==0) {*(long *)b=0x204c5252;b[32]^=0x3e;}
if (ckv==2) {*(long *)b=0x214c5252;b[32]^=2;}
if (ckv==6) {*(long *)b=0x224c5252;b[32]^=0xc;}
lseek(f2,-1024L,1);
if (_write(f2,b,1024)<1024) goto undovmw;
}
switch(ckv) {
case 9:
case 0: a=dmake(f,vmm1998,f2);i=1998;break;
case 1: a=dmake(f,vmm1999,f2);i=1999;break;
case 10:
case 2: a=dmake(f,vmm2222,f2);i=2222;break;
case 3: a=dmake(f,vmm2223,f2);i=2223;break;
case 4: a=dmake(f,vmm2225,f2);i=2225;break;
case 5: a=dmake(f,vmm2226,f2);i=2226;break;
case 11:
case 6: a=dmake(f,vmm3000,f2);i=3000;break;
case 7: a=dmake(f,vmm3002,f2);i=3002;break;
case 8: a=dmake(f,vmm3003,f2);i=3003;break;
};

#ifdef SELF
if (r3) {
switch(ckv) {
case 0:
case 1:
case 9: r3=ring3_98;break;
case 2:
case 3:
case 4:
case 5:
case 10: r3=ring3_se;break;
case 6:
case 7:
case 8:
case 11: r3=ring3_me;
};
j=7;
while(*r3) {
lseek(f2,(*(r3++))+ring3off[ckv],0);
if (_write(f2,&j,1)<1) {a="Write Error";goto skip;}
j=6;
}
skip:;
}
#endif

#ifdef DEMO
if (a==0) {
switch(ckv) {
case 0:
case 2: x=0x40ad3;break;
case 1:
case 3:
case 5: x=0x3fed3;break;
case 4: x=0x4110b;break;
case 6: x=0x6d3f8;break;
case 7:
case 8: x=0x6e9f8;break;
};
lseek(f2,0L,0);
if (_read(f2,b,64)<64) {a="Read Error";goto skip;}
z= *(long *)(b+0x3c);
lseek(f2,z-4,0);
if (_read(f2,b,4)<4) {a="Read Error";goto skip;}
b[3]|=0x40;
lseek(f2,z-4,0);
if (_write(f2,b,4)<4) {a="Write Error";goto skip;}
if (z>0x404) {
lseek(f2,z-0x404,0);
if (_read(f2,b+4,4)<4) {a="Read Error";goto skip;}
b[7]|=0x40;
if ((*(int *)b) == (*(int *)(b+4))) { 
lseek(f2,z-0x404,0);
if (_write(f2,b+4,4)<4) {a="Read Error";goto skip;}
}              
}
lseek(f2,x,0);z=0xbf;
if (_write(f2,&z,1)<1) {a="Write Error";goto skip;}
skip:;
}
#endif

_close(f);_close(f2);
if (a) {printf("VMM Patch Error: %s\n",a);goto uninst;}
exist|=0x20;exist&=0xff7f;

#ifdef DEMO
printf("VMM Version %d Patched (DEMO)\n",i);
#else
printf("VMM Version %d Patched\n",i);
#endif

}
if ((exist&0x700)==0x500) {
if (rename(cname,cback)) {printf("Cannot Rename VCACHE File\n");goto uninst;}
exist|=0x800;
f=_open(cback,0);
if (f<0) {printf("Cannot Open Old VCACHE File\n");goto uninst;}
f2=_creat(cname,0);
if (f2<0) {printf("Cannot Create New VCACHE File\n");goto uninst;}
switch(ckc) {
case 0: a=dmake(f,vc1998,f2);i=1998;break;
case 1: a=dmake(f,vc2183,f2);i=2183;break;
case 2: a=dmake(f,vc2222,f2);i=2222;break;
case 3: a=dmake(f,vc3000,f2);i=3000;break;

#ifdef SELF
case 4: a=dmake(f,vc98,f2);i=1998;break;
case 5: a=dmake(f,vcse,f2);i=2222;break;
case 6: a=dmake(f,vcme,f2);i=3000;break;
#endif

};
_close(f);_close(f2);
if (a) {printf("VCACHE Patch Error: %s\n");goto uninst;}
exist|=0x200;printf("VCACHE Version %d Patched\n",i);
}
exist&=0xf7ff;
if ((exist&0x7000)==0x5000) {
if (rename(hname,hback)) {printf("Cannot Rename HIMEM File\n");goto uninst;}
exist|=0x8000;
f=_open(hback,0);
if (f<0) {printf("Cannot Open Old HIMEM File\n");goto uninst;}
f2=_creat(hname,0);
if (f2<0) {printf("Cannot Create New HIMEM File\n");goto uninst;}
switch(ckh) {
case 0: a=dmake(f,histd,f2);i=7;break;
case 1: a=dmake(f,hialt,f2);i=8;break;
};
_close(f);_close(f2);
if (a) {printf("HIMEM Patch Error: %s\n");goto uninst;}
exist|=0x2000;printf("HIMEM DOS-%d Version Patched\n",i);
}
exist&=0x7fff;

#ifdef DEMO
printf("\nDEMO Patch Installed Successfully - Use in SAFE MODE Only\n\n");
#else
printf("\nPatch Installed Successfully\n\n");
#endif

return(0);
bad: printf("Invalid VMM32 File\n");return(20);
badvmr: printf("Invalid VMM32 File\n");_close(f);_close(f2);
if (unlink(vname)) printf("Unable to remove bad VMM File\n");
return(20);
badvmw: printf("Error Writing VMM File\n");_close(f);_close(f2);
if (unlink(vname)) printf("Unable to remove bad VMM File\n");
return(20);
badvcr: printf("Invalid VMM32 File\n");_close(f);_close(f2);
if (unlink(cname)) printf("Unable to remove bad VCACHE File\n");
return(20);
badvcw: printf("Error Writing VCACHE File\n");_close(f);_close(f2);
if (unlink(cname)) printf("Unable to remove bad VCACHE File\n");
return(20);
undovmr: printf("Invalid VMM32 File\n");goto uninst;
undovmw: printf("Error Writing VMM File\n");goto uninst;
}
