1
0
mirror of https://github.com/Ylianst/MeshAgent synced 2025-12-15 15:53:55 +00:00

1. Integrated polyfill for promise

2. Modified Immediate, so a reference is automatically saved until it expires
3. ) updated Buffer.alloc to support non-zero fill
4. added bignum support using OpenSSL if linked
This commit is contained in:
Bryan Roe
2019-01-11 12:25:34 -08:00
parent 24d97b3b34
commit 07c3eeb3bc

View File

@@ -46,6 +46,208 @@ typedef enum ILibDuktape_Console_DestinationFlags
ILibDuktape_Console_DestinationFlags_LogFile = 8
}ILibDuktape_Console_DestinationFlags;
// refer to ../modules/promise.js for the human readable source
char promise[] =
{
0x2F,0x2A,0x0A,0x43,0x6F,0x70,0x79,0x72,0x69,0x67,0x68,0x74,0x20,0x32,0x30,0x31,0x38,0x20,0x49,0x6E,0x74,0x65,0x6C,0x20,0x43,0x6F,0x72,0x70,0x6F,0x72,0x61,0x74,
0x69,0x6F,0x6E,0x0A,0x0A,0x4C,0x69,0x63,0x65,0x6E,0x73,0x65,0x64,0x20,0x75,0x6E,0x64,0x65,0x72,0x20,0x74,0x68,0x65,0x20,0x41,0x70,0x61,0x63,0x68,0x65,0x20,0x4C,
0x69,0x63,0x65,0x6E,0x73,0x65,0x2C,0x20,0x56,0x65,0x72,0x73,0x69,0x6F,0x6E,0x20,0x32,0x2E,0x30,0x20,0x28,0x74,0x68,0x65,0x20,0x22,0x4C,0x69,0x63,0x65,0x6E,0x73,
0x65,0x22,0x29,0x3B,0x0A,0x79,0x6F,0x75,0x20,0x6D,0x61,0x79,0x20,0x6E,0x6F,0x74,0x20,0x75,0x73,0x65,0x20,0x74,0x68,0x69,0x73,0x20,0x66,0x69,0x6C,0x65,0x20,0x65,
0x78,0x63,0x65,0x70,0x74,0x20,0x69,0x6E,0x20,0x63,0x6F,0x6D,0x70,0x6C,0x69,0x61,0x6E,0x63,0x65,0x20,0x77,0x69,0x74,0x68,0x20,0x74,0x68,0x65,0x20,0x4C,0x69,0x63,
0x65,0x6E,0x73,0x65,0x2E,0x0A,0x59,0x6F,0x75,0x20,0x6D,0x61,0x79,0x20,0x6F,0x62,0x74,0x61,0x69,0x6E,0x20,0x61,0x20,0x63,0x6F,0x70,0x79,0x20,0x6F,0x66,0x20,0x74,
0x68,0x65,0x20,0x4C,0x69,0x63,0x65,0x6E,0x73,0x65,0x20,0x61,0x74,0x0A,0x0A,0x20,0x20,0x20,0x20,0x68,0x74,0x74,0x70,0x3A,0x2F,0x2F,0x77,0x77,0x77,0x2E,0x61,0x70,
0x61,0x63,0x68,0x65,0x2E,0x6F,0x72,0x67,0x2F,0x6C,0x69,0x63,0x65,0x6E,0x73,0x65,0x73,0x2F,0x4C,0x49,0x43,0x45,0x4E,0x53,0x45,0x2D,0x32,0x2E,0x30,0x0A,0x0A,0x55,
0x6E,0x6C,0x65,0x73,0x73,0x20,0x72,0x65,0x71,0x75,0x69,0x72,0x65,0x64,0x20,0x62,0x79,0x20,0x61,0x70,0x70,0x6C,0x69,0x63,0x61,0x62,0x6C,0x65,0x20,0x6C,0x61,0x77,
0x20,0x6F,0x72,0x20,0x61,0x67,0x72,0x65,0x65,0x64,0x20,0x74,0x6F,0x20,0x69,0x6E,0x20,0x77,0x72,0x69,0x74,0x69,0x6E,0x67,0x2C,0x20,0x73,0x6F,0x66,0x74,0x77,0x61,
0x72,0x65,0x0A,0x64,0x69,0x73,0x74,0x72,0x69,0x62,0x75,0x74,0x65,0x64,0x20,0x75,0x6E,0x64,0x65,0x72,0x20,0x74,0x68,0x65,0x20,0x4C,0x69,0x63,0x65,0x6E,0x73,0x65,
0x20,0x69,0x73,0x20,0x64,0x69,0x73,0x74,0x72,0x69,0x62,0x75,0x74,0x65,0x64,0x20,0x6F,0x6E,0x20,0x61,0x6E,0x20,0x22,0x41,0x53,0x20,0x49,0x53,0x22,0x20,0x42,0x41,
0x53,0x49,0x53,0x2C,0x0A,0x57,0x49,0x54,0x48,0x4F,0x55,0x54,0x20,0x57,0x41,0x52,0x52,0x41,0x4E,0x54,0x49,0x45,0x53,0x20,0x4F,0x52,0x20,0x43,0x4F,0x4E,0x44,0x49,
0x54,0x49,0x4F,0x4E,0x53,0x20,0x4F,0x46,0x20,0x41,0x4E,0x59,0x20,0x4B,0x49,0x4E,0x44,0x2C,0x20,0x65,0x69,0x74,0x68,0x65,0x72,0x20,0x65,0x78,0x70,0x72,0x65,0x73,
0x73,0x20,0x6F,0x72,0x20,0x69,0x6D,0x70,0x6C,0x69,0x65,0x64,0x2E,0x0A,0x53,0x65,0x65,0x20,0x74,0x68,0x65,0x20,0x4C,0x69,0x63,0x65,0x6E,0x73,0x65,0x20,0x66,0x6F,
0x72,0x20,0x74,0x68,0x65,0x20,0x73,0x70,0x65,0x63,0x69,0x66,0x69,0x63,0x20,0x6C,0x61,0x6E,0x67,0x75,0x61,0x67,0x65,0x20,0x67,0x6F,0x76,0x65,0x72,0x6E,0x69,0x6E,
0x67,0x20,0x70,0x65,0x72,0x6D,0x69,0x73,0x73,0x69,0x6F,0x6E,0x73,0x20,0x61,0x6E,0x64,0x0A,0x6C,0x69,0x6D,0x69,0x74,0x61,0x74,0x69,0x6F,0x6E,0x73,0x20,0x75,0x6E,
0x64,0x65,0x72,0x20,0x74,0x68,0x65,0x20,0x4C,0x69,0x63,0x65,0x6E,0x73,0x65,0x2E,0x0A,0x2A,0x2F,0x0A,0x0A,0x76,0x61,0x72,0x20,0x72,0x65,0x66,0x54,0x61,0x62,0x6C,
0x65,0x20,0x3D,0x20,0x7B,0x7D,0x3B,0x0A,0x0A,0x66,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x20,0x65,0x76,0x65,0x6E,0x74,0x5F,0x73,0x77,0x69,0x74,0x63,0x68,0x65,0x72,
0x5F,0x68,0x65,0x6C,0x70,0x65,0x72,0x28,0x64,0x65,0x73,0x69,0x72,0x65,0x64,0x5F,0x63,0x61,0x6C,0x6C,0x65,0x65,0x2C,0x20,0x74,0x61,0x72,0x67,0x65,0x74,0x29,0x0A,
0x7B,0x0A,0x20,0x20,0x20,0x20,0x74,0x68,0x69,0x73,0x2E,0x5F,0x4F,0x62,0x6A,0x65,0x63,0x74,0x49,0x44,0x20,0x3D,0x20,0x27,0x65,0x76,0x65,0x6E,0x74,0x5F,0x73,0x77,
0x69,0x74,0x63,0x68,0x65,0x72,0x27,0x3B,0x0A,0x20,0x20,0x20,0x20,0x74,0x68,0x69,0x73,0x2E,0x66,0x75,0x6E,0x63,0x20,0x3D,0x20,0x66,0x75,0x6E,0x63,0x74,0x69,0x6F,
0x6E,0x20,0x66,0x75,0x6E,0x63,0x28,0x29,0x0D,0x0A,0x20,0x20,0x20,0x20,0x7B,0x0D,0x0A,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x76,0x61,0x72,0x20,0x61,0x72,0x67,
0x73,0x20,0x3D,0x20,0x5B,0x5D,0x3B,0x0D,0x0A,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x66,0x6F,0x72,0x28,0x76,0x61,0x72,0x20,0x69,0x20,0x69,0x6E,0x20,0x61,0x72,
0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x29,0x0D,0x0A,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7B,0x0D,0x0A,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x61,0x72,0x67,0x73,0x2E,0x70,0x75,0x73,0x68,0x28,0x61,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x5B,0x69,0x5D,0x29,0x3B,0x0D,0x0A,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x7D,0x0D,0x0A,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x72,0x65,0x74,0x75,0x72,0x6E,0x20,0x28,0x66,0x75,0x6E,0x63,0x2E,0x74,0x61,0x72,0x67,0x65,
0x74,0x2E,0x61,0x70,0x70,0x6C,0x79,0x28,0x66,0x75,0x6E,0x63,0x2E,0x64,0x65,0x73,0x69,0x72,0x65,0x64,0x2C,0x20,0x61,0x72,0x67,0x73,0x29,0x29,0x3B,0x0D,0x0A,0x20,
0x20,0x20,0x20,0x7D,0x3B,0x0D,0x0A,0x20,0x20,0x20,0x20,0x74,0x68,0x69,0x73,0x2E,0x66,0x75,0x6E,0x63,0x2E,0x64,0x65,0x73,0x69,0x72,0x65,0x64,0x20,0x3D,0x20,0x64,
0x65,0x73,0x69,0x72,0x65,0x64,0x5F,0x63,0x61,0x6C,0x6C,0x65,0x65,0x3B,0x0D,0x0A,0x20,0x20,0x20,0x20,0x74,0x68,0x69,0x73,0x2E,0x66,0x75,0x6E,0x63,0x2E,0x74,0x61,
0x72,0x67,0x65,0x74,0x20,0x3D,0x20,0x74,0x61,0x72,0x67,0x65,0x74,0x3B,0x0D,0x0A,0x20,0x20,0x20,0x20,0x74,0x68,0x69,0x73,0x2E,0x66,0x75,0x6E,0x63,0x2E,0x73,0x65,
0x6C,0x66,0x20,0x3D,0x20,0x74,0x68,0x69,0x73,0x3B,0x0D,0x0A,0x7D,0x0A,0x66,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x20,0x65,0x76,0x65,0x6E,0x74,0x5F,0x73,0x77,0x69,
0x74,0x63,0x68,0x65,0x72,0x28,0x64,0x65,0x73,0x69,0x72,0x65,0x64,0x5F,0x63,0x61,0x6C,0x6C,0x65,0x65,0x2C,0x20,0x74,0x61,0x72,0x67,0x65,0x74,0x29,0x0A,0x7B,0x0D,
0x0A,0x20,0x20,0x20,0x20,0x72,0x65,0x74,0x75,0x72,0x6E,0x20,0x28,0x6E,0x65,0x77,0x20,0x65,0x76,0x65,0x6E,0x74,0x5F,0x73,0x77,0x69,0x74,0x63,0x68,0x65,0x72,0x5F,
0x68,0x65,0x6C,0x70,0x65,0x72,0x28,0x64,0x65,0x73,0x69,0x72,0x65,0x64,0x5F,0x63,0x61,0x6C,0x6C,0x65,0x65,0x2C,0x20,0x74,0x61,0x72,0x67,0x65,0x74,0x29,0x29,0x3B,
0x0D,0x0A,0x7D,0x0A,0x0A,0x66,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x20,0x50,0x72,0x6F,0x6D,0x69,0x73,0x65,0x28,0x70,0x72,0x6F,0x6D,0x69,0x73,0x65,0x46,0x75,0x6E,
0x63,0x29,0x0A,0x7B,0x0A,0x20,0x20,0x20,0x20,0x74,0x68,0x69,0x73,0x2E,0x5F,0x4F,0x62,0x6A,0x65,0x63,0x74,0x49,0x44,0x20,0x3D,0x20,0x27,0x70,0x72,0x6F,0x6D,0x69,
0x73,0x65,0x27,0x3B,0x0A,0x20,0x20,0x20,0x20,0x74,0x68,0x69,0x73,0x2E,0x70,0x72,0x6F,0x6D,0x69,0x73,0x65,0x20,0x3D,0x20,0x74,0x68,0x69,0x73,0x3B,0x0A,0x20,0x20,
0x20,0x20,0x74,0x68,0x69,0x73,0x2E,0x5F,0x69,0x6E,0x74,0x65,0x72,0x6E,0x61,0x6C,0x20,0x3D,0x20,0x7B,0x20,0x5F,0x4F,0x62,0x6A,0x65,0x63,0x74,0x49,0x44,0x3A,0x20,
0x27,0x70,0x72,0x6F,0x6D,0x69,0x73,0x65,0x2E,0x69,0x6E,0x74,0x65,0x72,0x6E,0x61,0x6C,0x27,0x2C,0x20,0x70,0x72,0x6F,0x6D,0x69,0x73,0x65,0x3A,0x20,0x74,0x68,0x69,
0x73,0x2C,0x20,0x66,0x75,0x6E,0x63,0x3A,0x20,0x70,0x72,0x6F,0x6D,0x69,0x73,0x65,0x46,0x75,0x6E,0x63,0x2C,0x20,0x63,0x6F,0x6D,0x70,0x6C,0x65,0x74,0x65,0x64,0x3A,
0x20,0x66,0x61,0x6C,0x73,0x65,0x2C,0x20,0x65,0x72,0x72,0x6F,0x72,0x73,0x3A,0x20,0x66,0x61,0x6C,0x73,0x65,0x2C,0x20,0x63,0x6F,0x6D,0x70,0x6C,0x65,0x74,0x65,0x64,
0x41,0x72,0x67,0x73,0x3A,0x20,0x5B,0x5D,0x20,0x7D,0x3B,0x0A,0x20,0x20,0x20,0x20,0x72,0x65,0x71,0x75,0x69,0x72,0x65,0x28,0x27,0x65,0x76,0x65,0x6E,0x74,0x73,0x27,
0x29,0x2E,0x45,0x76,0x65,0x6E,0x74,0x45,0x6D,0x69,0x74,0x74,0x65,0x72,0x2E,0x63,0x61,0x6C,0x6C,0x28,0x74,0x68,0x69,0x73,0x2E,0x5F,0x69,0x6E,0x74,0x65,0x72,0x6E,
0x61,0x6C,0x29,0x3B,0x0A,0x20,0x20,0x20,0x20,0x74,0x68,0x69,0x73,0x2E,0x5F,0x69,0x6E,0x74,0x65,0x72,0x6E,0x61,0x6C,0x2E,0x6F,0x6E,0x28,0x27,0x5F,0x65,0x76,0x65,
0x6E,0x74,0x48,0x6F,0x6F,0x6B,0x27,0x2C,0x20,0x66,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x20,0x28,0x65,0x76,0x65,0x6E,0x74,0x4E,0x61,0x6D,0x65,0x2C,0x20,0x65,0x76,
0x65,0x6E,0x74,0x43,0x61,0x6C,0x6C,0x62,0x61,0x63,0x6B,0x29,0x0A,0x20,0x20,0x20,0x20,0x7B,0x0A,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x2F,0x2F,0x63,0x6F,0x6E,
0x73,0x6F,0x6C,0x65,0x2E,0x6C,0x6F,0x67,0x28,0x27,0x68,0x6F,0x6F,0x6B,0x27,0x2C,0x20,0x65,0x76,0x65,0x6E,0x74,0x4E,0x61,0x6D,0x65,0x2C,0x20,0x27,0x65,0x72,0x72,
0x6F,0x72,0x73,0x2F,0x27,0x20,0x2B,0x20,0x74,0x68,0x69,0x73,0x2E,0x65,0x72,0x72,0x6F,0x72,0x73,0x20,0x2B,0x20,0x27,0x20,0x63,0x6F,0x6D,0x70,0x6C,0x65,0x74,0x65,
0x64,0x2F,0x27,0x20,0x2B,0x20,0x74,0x68,0x69,0x73,0x2E,0x63,0x6F,0x6D,0x70,0x6C,0x65,0x74,0x65,0x64,0x29,0x3B,0x0A,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x76,
0x61,0x72,0x20,0x72,0x20,0x3D,0x20,0x6E,0x75,0x6C,0x6C,0x3B,0x0A,0x0A,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x69,0x66,0x20,0x28,0x65,0x76,0x65,0x6E,0x74,0x4E,
0x61,0x6D,0x65,0x20,0x3D,0x3D,0x20,0x27,0x72,0x65,0x73,0x6F,0x6C,0x76,0x65,0x64,0x27,0x20,0x26,0x26,0x20,0x21,0x74,0x68,0x69,0x73,0x2E,0x65,0x72,0x72,0x6F,0x72,
0x73,0x20,0x26,0x26,0x20,0x74,0x68,0x69,0x73,0x2E,0x63,0x6F,0x6D,0x70,0x6C,0x65,0x74,0x65,0x64,0x29,0x0A,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7B,0x0A,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x72,0x20,0x3D,0x20,0x65,0x76,0x65,0x6E,0x74,0x43,0x61,0x6C,0x6C,0x62,0x61,0x63,0x6B,0x2E,0x61,0x70,0x70,
0x6C,0x79,0x28,0x74,0x68,0x69,0x73,0x2C,0x20,0x74,0x68,0x69,0x73,0x2E,0x63,0x6F,0x6D,0x70,0x6C,0x65,0x74,0x65,0x64,0x41,0x72,0x67,0x73,0x29,0x3B,0x0A,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x69,0x66,0x28,0x72,0x21,0x3D,0x6E,0x75,0x6C,0x6C,0x29,0x0A,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x7B,0x0A,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x74,0x68,0x69,0x73,0x2E,0x65,0x6D,0x69,0x74,0x5F,0x72,0x65,
0x74,0x75,0x72,0x6E,0x56,0x61,0x6C,0x75,0x65,0x28,0x27,0x72,0x65,0x73,0x6F,0x6C,0x76,0x65,0x64,0x27,0x2C,0x20,0x72,0x29,0x3B,0x0A,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x7D,0x0A,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7D,0x0A,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x69,0x66,0x20,0x28,0x65,0x76,
0x65,0x6E,0x74,0x4E,0x61,0x6D,0x65,0x20,0x3D,0x3D,0x20,0x27,0x72,0x65,0x6A,0x65,0x63,0x74,0x65,0x64,0x27,0x20,0x26,0x26,0x20,0x74,0x68,0x69,0x73,0x2E,0x65,0x72,
0x72,0x6F,0x72,0x73,0x20,0x26,0x26,0x20,0x74,0x68,0x69,0x73,0x2E,0x63,0x6F,0x6D,0x70,0x6C,0x65,0x74,0x65,0x64,0x29,0x0A,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x7B,0x0A,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x65,0x76,0x65,0x6E,0x74,0x43,0x61,0x6C,0x6C,0x62,0x61,0x63,0x6B,0x2E,0x61,0x70,0x70,0x6C,
0x79,0x28,0x74,0x68,0x69,0x73,0x2C,0x20,0x74,0x68,0x69,0x73,0x2E,0x63,0x6F,0x6D,0x70,0x6C,0x65,0x74,0x65,0x64,0x41,0x72,0x67,0x73,0x29,0x3B,0x0A,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x7D,0x0A,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x69,0x66,0x20,0x28,0x65,0x76,0x65,0x6E,0x74,0x4E,0x61,0x6D,0x65,0x20,0x3D,0x3D,0x20,
0x27,0x73,0x65,0x74,0x74,0x6C,0x65,0x64,0x27,0x20,0x26,0x26,0x20,0x74,0x68,0x69,0x73,0x2E,0x63,0x6F,0x6D,0x70,0x6C,0x65,0x74,0x65,0x64,0x29,0x0A,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x7B,0x0A,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x65,0x76,0x65,0x6E,0x74,0x43,0x61,0x6C,0x6C,0x62,0x61,0x63,0x6B,
0x2E,0x61,0x70,0x70,0x6C,0x79,0x28,0x74,0x68,0x69,0x73,0x2C,0x20,0x5B,0x5D,0x29,0x3B,0x0A,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7D,0x0A,0x20,0x20,0x20,0x20,
0x7D,0x29,0x3B,0x0A,0x20,0x20,0x20,0x20,0x74,0x68,0x69,0x73,0x2E,0x5F,0x69,0x6E,0x74,0x65,0x72,0x6E,0x61,0x6C,0x2E,0x72,0x65,0x73,0x6F,0x6C,0x76,0x65,0x72,0x20,
0x3D,0x20,0x66,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x20,0x5F,0x72,0x65,0x73,0x6F,0x6C,0x76,0x65,0x72,0x28,0x29,0x0A,0x20,0x20,0x20,0x20,0x7B,0x0A,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x5F,0x72,0x65,0x73,0x6F,0x6C,0x76,0x65,0x72,0x2E,0x5F,0x73,0x65,0x6C,0x66,0x2E,0x65,0x72,0x72,0x6F,0x72,0x73,0x20,0x3D,0x20,0x66,0x61,
0x6C,0x73,0x65,0x3B,0x0A,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x5F,0x72,0x65,0x73,0x6F,0x6C,0x76,0x65,0x72,0x2E,0x5F,0x73,0x65,0x6C,0x66,0x2E,0x63,0x6F,0x6D,
0x70,0x6C,0x65,0x74,0x65,0x64,0x20,0x3D,0x20,0x74,0x72,0x75,0x65,0x3B,0x0A,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x5F,0x72,0x65,0x73,0x6F,0x6C,0x76,0x65,0x72,
0x2E,0x5F,0x73,0x65,0x6C,0x66,0x2E,0x63,0x6F,0x6D,0x70,0x6C,0x65,0x74,0x65,0x64,0x41,0x72,0x67,0x73,0x20,0x3D,0x20,0x5B,0x5D,0x3B,0x0A,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x76,0x61,0x72,0x20,0x61,0x72,0x67,0x73,0x20,0x3D,0x20,0x5B,0x27,0x72,0x65,0x73,0x6F,0x6C,0x76,0x65,0x64,0x27,0x5D,0x3B,0x0A,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x69,0x66,0x20,0x28,0x74,0x68,0x69,0x73,0x2E,0x65,0x6D,0x69,0x74,0x5F,0x72,0x65,0x74,0x75,0x72,0x6E,0x56,0x61,0x6C,0x75,0x65,0x20,0x26,0x26,
0x20,0x74,0x68,0x69,0x73,0x2E,0x65,0x6D,0x69,0x74,0x5F,0x72,0x65,0x74,0x75,0x72,0x6E,0x56,0x61,0x6C,0x75,0x65,0x28,0x27,0x72,0x65,0x73,0x6F,0x6C,0x76,0x65,0x64,
0x27,0x29,0x20,0x21,0x3D,0x20,0x6E,0x75,0x6C,0x6C,0x29,0x0A,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7B,0x0A,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x5F,0x72,0x65,0x73,0x6F,0x6C,0x76,0x65,0x72,0x2E,0x5F,0x73,0x65,0x6C,0x66,0x2E,0x63,0x6F,0x6D,0x70,0x6C,0x65,0x74,0x65,0x64,0x41,0x72,0x67,0x73,0x2E,
0x70,0x75,0x73,0x68,0x28,0x74,0x68,0x69,0x73,0x2E,0x65,0x6D,0x69,0x74,0x5F,0x72,0x65,0x74,0x75,0x72,0x6E,0x56,0x61,0x6C,0x75,0x65,0x28,0x27,0x72,0x65,0x73,0x6F,
0x6C,0x76,0x65,0x64,0x27,0x29,0x29,0x3B,0x0A,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x61,0x72,0x67,0x73,0x2E,0x70,0x75,0x73,0x68,0x28,0x74,
0x68,0x69,0x73,0x2E,0x65,0x6D,0x69,0x74,0x5F,0x72,0x65,0x74,0x75,0x72,0x6E,0x56,0x61,0x6C,0x75,0x65,0x28,0x27,0x72,0x65,0x73,0x6F,0x6C,0x76,0x65,0x64,0x27,0x29,
0x29,0x3B,0x0A,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7D,0x0A,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x65,0x6C,0x73,0x65,0x0A,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x7B,0x0A,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x66,0x6F,0x72,0x20,0x28,0x76,0x61,0x72,0x20,0x61,0x20,0x69,0x6E,0x20,0x61,0x72,
0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x29,0x0A,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7B,0x0A,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x5F,0x72,0x65,0x73,0x6F,0x6C,0x76,0x65,0x72,0x2E,0x5F,0x73,0x65,0x6C,0x66,0x2E,0x63,0x6F,0x6D,0x70,0x6C,0x65,0x74,0x65,0x64,
0x41,0x72,0x67,0x73,0x2E,0x70,0x75,0x73,0x68,0x28,0x61,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x5B,0x61,0x5D,0x29,0x3B,0x0A,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x61,0x72,0x67,0x73,0x2E,0x70,0x75,0x73,0x68,0x28,0x61,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x5B,0x61,0x5D,0x29,
0x3B,0x0A,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7D,0x0A,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7D,0x0A,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x5F,0x72,0x65,0x73,0x6F,0x6C,0x76,0x65,0x72,0x2E,0x5F,0x73,0x65,0x6C,0x66,0x2E,0x65,0x6D,0x69,0x74,0x2E,0x61,0x70,0x70,0x6C,0x79,0x28,0x5F,0x72,0x65,
0x73,0x6F,0x6C,0x76,0x65,0x72,0x2E,0x5F,0x73,0x65,0x6C,0x66,0x2C,0x20,0x61,0x72,0x67,0x73,0x29,0x3B,0x0A,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x5F,0x72,0x65,
0x73,0x6F,0x6C,0x76,0x65,0x72,0x2E,0x5F,0x73,0x65,0x6C,0x66,0x2E,0x65,0x6D,0x69,0x74,0x28,0x27,0x73,0x65,0x74,0x74,0x6C,0x65,0x64,0x27,0x29,0x3B,0x0A,0x20,0x20,
0x20,0x20,0x7D,0x3B,0x0A,0x20,0x20,0x20,0x20,0x74,0x68,0x69,0x73,0x2E,0x5F,0x69,0x6E,0x74,0x65,0x72,0x6E,0x61,0x6C,0x2E,0x72,0x65,0x6A,0x65,0x63,0x74,0x6F,0x72,
0x20,0x3D,0x20,0x66,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x20,0x5F,0x72,0x65,0x6A,0x65,0x63,0x74,0x6F,0x72,0x28,0x29,0x0A,0x20,0x20,0x20,0x20,0x7B,0x0A,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x5F,0x72,0x65,0x6A,0x65,0x63,0x74,0x6F,0x72,0x2E,0x5F,0x73,0x65,0x6C,0x66,0x2E,0x65,0x72,0x72,0x6F,0x72,0x73,0x20,0x3D,0x20,0x74,
0x72,0x75,0x65,0x3B,0x0A,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x5F,0x72,0x65,0x6A,0x65,0x63,0x74,0x6F,0x72,0x2E,0x5F,0x73,0x65,0x6C,0x66,0x2E,0x63,0x6F,0x6D,
0x70,0x6C,0x65,0x74,0x65,0x64,0x20,0x3D,0x20,0x74,0x72,0x75,0x65,0x3B,0x0A,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x5F,0x72,0x65,0x6A,0x65,0x63,0x74,0x6F,0x72,
0x2E,0x5F,0x73,0x65,0x6C,0x66,0x2E,0x63,0x6F,0x6D,0x70,0x6C,0x65,0x74,0x65,0x64,0x41,0x72,0x67,0x73,0x20,0x3D,0x20,0x5B,0x5D,0x3B,0x0A,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x76,0x61,0x72,0x20,0x61,0x72,0x67,0x73,0x20,0x3D,0x20,0x5B,0x27,0x72,0x65,0x6A,0x65,0x63,0x74,0x65,0x64,0x27,0x5D,0x3B,0x0A,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x66,0x6F,0x72,0x20,0x28,0x76,0x61,0x72,0x20,0x61,0x20,0x69,0x6E,0x20,0x61,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x29,0x0A,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x7B,0x0A,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x5F,0x72,0x65,0x6A,0x65,0x63,0x74,0x6F,0x72,0x2E,0x5F,0x73,0x65,
0x6C,0x66,0x2E,0x63,0x6F,0x6D,0x70,0x6C,0x65,0x74,0x65,0x64,0x41,0x72,0x67,0x73,0x2E,0x70,0x75,0x73,0x68,0x28,0x61,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x5B,
0x61,0x5D,0x29,0x3B,0x0A,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x61,0x72,0x67,0x73,0x2E,0x70,0x75,0x73,0x68,0x28,0x61,0x72,0x67,0x75,0x6D,
0x65,0x6E,0x74,0x73,0x5B,0x61,0x5D,0x29,0x3B,0x0A,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7D,0x0A,0x0A,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x5F,0x72,0x65,
0x6A,0x65,0x63,0x74,0x6F,0x72,0x2E,0x5F,0x73,0x65,0x6C,0x66,0x2E,0x65,0x6D,0x69,0x74,0x2E,0x61,0x70,0x70,0x6C,0x79,0x28,0x5F,0x72,0x65,0x6A,0x65,0x63,0x74,0x6F,
0x72,0x2E,0x5F,0x73,0x65,0x6C,0x66,0x2C,0x20,0x61,0x72,0x67,0x73,0x29,0x3B,0x0A,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x5F,0x72,0x65,0x6A,0x65,0x63,0x74,0x6F,
0x72,0x2E,0x5F,0x73,0x65,0x6C,0x66,0x2E,0x65,0x6D,0x69,0x74,0x28,0x27,0x73,0x65,0x74,0x74,0x6C,0x65,0x64,0x27,0x29,0x3B,0x0A,0x20,0x20,0x20,0x20,0x7D,0x3B,0x0A,
0x20,0x20,0x20,0x20,0x74,0x68,0x69,0x73,0x2E,0x63,0x61,0x74,0x63,0x68,0x20,0x3D,0x20,0x66,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x28,0x66,0x75,0x6E,0x63,0x29,0x0A,
0x20,0x20,0x20,0x20,0x7B,0x0A,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x74,0x68,0x69,0x73,0x2E,0x5F,0x69,0x6E,0x74,0x65,0x72,0x6E,0x61,0x6C,0x2E,0x6F,0x6E,0x63,
0x65,0x28,0x27,0x72,0x65,0x6A,0x65,0x63,0x74,0x65,0x64,0x27,0x2C,0x20,0x65,0x76,0x65,0x6E,0x74,0x5F,0x73,0x77,0x69,0x74,0x63,0x68,0x65,0x72,0x28,0x74,0x68,0x69,
0x73,0x2C,0x20,0x66,0x75,0x6E,0x63,0x29,0x2E,0x66,0x75,0x6E,0x63,0x29,0x3B,0x0A,0x20,0x20,0x20,0x20,0x7D,0x0A,0x20,0x20,0x20,0x20,0x74,0x68,0x69,0x73,0x2E,0x66,
0x69,0x6E,0x61,0x6C,0x6C,0x79,0x20,0x3D,0x20,0x66,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x20,0x28,0x66,0x75,0x6E,0x63,0x29,0x0A,0x20,0x20,0x20,0x20,0x7B,0x0A,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x74,0x68,0x69,0x73,0x2E,0x5F,0x69,0x6E,0x74,0x65,0x72,0x6E,0x61,0x6C,0x2E,0x6F,0x6E,0x63,0x65,0x28,0x27,0x73,0x65,0x74,0x74,
0x6C,0x65,0x64,0x27,0x2C,0x20,0x65,0x76,0x65,0x6E,0x74,0x5F,0x73,0x77,0x69,0x74,0x63,0x68,0x65,0x72,0x28,0x74,0x68,0x69,0x73,0x2C,0x20,0x66,0x75,0x6E,0x63,0x29,
0x2E,0x66,0x75,0x6E,0x63,0x29,0x3B,0x0A,0x20,0x20,0x20,0x20,0x7D,0x3B,0x0A,0x20,0x20,0x20,0x20,0x74,0x68,0x69,0x73,0x2E,0x74,0x68,0x65,0x6E,0x20,0x3D,0x20,0x66,
0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x20,0x28,0x72,0x65,0x73,0x6F,0x6C,0x76,0x65,0x64,0x2C,0x20,0x72,0x65,0x6A,0x65,0x63,0x74,0x65,0x64,0x29,0x0A,0x20,0x20,0x20,
0x20,0x7B,0x0A,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x69,0x66,0x20,0x28,0x72,0x65,0x73,0x6F,0x6C,0x76,0x65,0x64,0x29,0x20,0x7B,0x20,0x74,0x68,0x69,0x73,0x2E,
0x5F,0x69,0x6E,0x74,0x65,0x72,0x6E,0x61,0x6C,0x2E,0x6F,0x6E,0x63,0x65,0x28,0x27,0x72,0x65,0x73,0x6F,0x6C,0x76,0x65,0x64,0x27,0x2C,0x20,0x65,0x76,0x65,0x6E,0x74,
0x5F,0x73,0x77,0x69,0x74,0x63,0x68,0x65,0x72,0x28,0x74,0x68,0x69,0x73,0x2C,0x20,0x72,0x65,0x73,0x6F,0x6C,0x76,0x65,0x64,0x29,0x2E,0x66,0x75,0x6E,0x63,0x29,0x3B,
0x20,0x7D,0x0A,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x69,0x66,0x20,0x28,0x72,0x65,0x6A,0x65,0x63,0x74,0x65,0x64,0x29,0x20,0x7B,0x20,0x74,0x68,0x69,0x73,0x2E,
0x5F,0x69,0x6E,0x74,0x65,0x72,0x6E,0x61,0x6C,0x2E,0x6F,0x6E,0x63,0x65,0x28,0x27,0x72,0x65,0x6A,0x65,0x63,0x74,0x65,0x64,0x27,0x2C,0x20,0x65,0x76,0x65,0x6E,0x74,
0x5F,0x73,0x77,0x69,0x74,0x63,0x68,0x65,0x72,0x28,0x74,0x68,0x69,0x73,0x2C,0x20,0x72,0x65,0x6A,0x65,0x63,0x74,0x65,0x64,0x29,0x2E,0x66,0x75,0x6E,0x63,0x29,0x3B,
0x20,0x7D,0x0A,0x0A,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x76,0x61,0x72,0x20,0x72,0x65,0x74,0x56,0x61,0x6C,0x20,0x3D,0x20,0x6E,0x65,0x77,0x20,0x50,0x72,0x6F,
0x6D,0x69,0x73,0x65,0x28,0x66,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x20,0x28,0x72,0x2C,0x20,0x6A,0x29,0x20,0x7B,0x20,0x7D,0x29,0x3B,0x0A,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x74,0x68,0x69,0x73,0x2E,0x5F,0x69,0x6E,0x74,0x65,0x72,0x6E,0x61,0x6C,0x2E,0x6F,0x6E,0x63,0x65,0x28,0x27,0x72,0x65,0x73,0x6F,0x6C,0x76,0x65,0x64,
0x27,0x2C,0x20,0x72,0x65,0x74,0x56,0x61,0x6C,0x2E,0x5F,0x69,0x6E,0x74,0x65,0x72,0x6E,0x61,0x6C,0x2E,0x72,0x65,0x73,0x6F,0x6C,0x76,0x65,0x72,0x29,0x3B,0x0A,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x74,0x68,0x69,0x73,0x2E,0x5F,0x69,0x6E,0x74,0x65,0x72,0x6E,0x61,0x6C,0x2E,0x6F,0x6E,0x63,0x65,0x28,0x27,0x72,0x65,0x6A,0x65,
0x63,0x74,0x65,0x64,0x27,0x2C,0x20,0x72,0x65,0x74,0x56,0x61,0x6C,0x2E,0x5F,0x69,0x6E,0x74,0x65,0x72,0x6E,0x61,0x6C,0x2E,0x72,0x65,0x6A,0x65,0x63,0x74,0x6F,0x72,
0x29,0x3B,0x0A,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x72,0x65,0x74,0x56,0x61,0x6C,0x2E,0x70,0x61,0x72,0x65,0x6E,0x74,0x50,0x72,0x6F,0x6D,0x69,0x73,0x65,0x20,
0x3D,0x20,0x74,0x68,0x69,0x73,0x3B,0x0A,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x72,0x65,0x74,0x75,0x72,0x6E,0x20,0x28,0x72,0x65,0x74,0x56,0x61,0x6C,0x29,0x3B,
0x0A,0x20,0x20,0x20,0x20,0x7D,0x3B,0x0A,0x0A,0x20,0x20,0x20,0x20,0x74,0x68,0x69,0x73,0x2E,0x5F,0x69,0x6E,0x74,0x65,0x72,0x6E,0x61,0x6C,0x2E,0x72,0x65,0x73,0x6F,
0x6C,0x76,0x65,0x72,0x2E,0x5F,0x73,0x65,0x6C,0x66,0x20,0x3D,0x20,0x74,0x68,0x69,0x73,0x2E,0x5F,0x69,0x6E,0x74,0x65,0x72,0x6E,0x61,0x6C,0x3B,0x0A,0x20,0x20,0x20,
0x20,0x74,0x68,0x69,0x73,0x2E,0x5F,0x69,0x6E,0x74,0x65,0x72,0x6E,0x61,0x6C,0x2E,0x72,0x65,0x6A,0x65,0x63,0x74,0x6F,0x72,0x2E,0x5F,0x73,0x65,0x6C,0x66,0x20,0x3D,
0x20,0x74,0x68,0x69,0x73,0x2E,0x5F,0x69,0x6E,0x74,0x65,0x72,0x6E,0x61,0x6C,0x3B,0x3B,0x0A,0x0A,0x20,0x20,0x20,0x20,0x74,0x72,0x79,0x0A,0x20,0x20,0x20,0x20,0x7B,
0x0A,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x70,0x72,0x6F,0x6D,0x69,0x73,0x65,0x46,0x75,0x6E,0x63,0x2E,0x63,0x61,0x6C,0x6C,0x28,0x74,0x68,0x69,0x73,0x2C,0x20,
0x74,0x68,0x69,0x73,0x2E,0x5F,0x69,0x6E,0x74,0x65,0x72,0x6E,0x61,0x6C,0x2E,0x72,0x65,0x73,0x6F,0x6C,0x76,0x65,0x72,0x2C,0x20,0x74,0x68,0x69,0x73,0x2E,0x5F,0x69,
0x6E,0x74,0x65,0x72,0x6E,0x61,0x6C,0x2E,0x72,0x65,0x6A,0x65,0x63,0x74,0x6F,0x72,0x29,0x3B,0x0A,0x20,0x20,0x20,0x20,0x7D,0x0A,0x20,0x20,0x20,0x20,0x63,0x61,0x74,
0x63,0x68,0x28,0x65,0x29,0x0A,0x20,0x20,0x20,0x20,0x7B,0x0A,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x74,0x68,0x69,0x73,0x2E,0x5F,0x69,0x6E,0x74,0x65,0x72,0x6E,
0x61,0x6C,0x2E,0x65,0x72,0x72,0x6F,0x72,0x73,0x20,0x3D,0x20,0x74,0x72,0x75,0x65,0x3B,0x0A,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x74,0x68,0x69,0x73,0x2E,0x5F,
0x69,0x6E,0x74,0x65,0x72,0x6E,0x61,0x6C,0x2E,0x63,0x6F,0x6D,0x70,0x6C,0x65,0x74,0x65,0x64,0x20,0x3D,0x20,0x74,0x72,0x75,0x65,0x3B,0x0A,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x74,0x68,0x69,0x73,0x2E,0x5F,0x69,0x6E,0x74,0x65,0x72,0x6E,0x61,0x6C,0x2E,0x63,0x6F,0x6D,0x70,0x6C,0x65,0x74,0x65,0x64,0x41,0x72,0x67,0x73,0x20,
0x3D,0x20,0x5B,0x65,0x5D,0x3B,0x0A,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x74,0x68,0x69,0x73,0x2E,0x5F,0x69,0x6E,0x74,0x65,0x72,0x6E,0x61,0x6C,0x2E,0x65,0x6D,
0x69,0x74,0x28,0x27,0x72,0x65,0x6A,0x65,0x63,0x74,0x65,0x64,0x27,0x2C,0x20,0x65,0x29,0x3B,0x0A,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x74,0x68,0x69,0x73,0x2E,
0x5F,0x69,0x6E,0x74,0x65,0x72,0x6E,0x61,0x6C,0x2E,0x65,0x6D,0x69,0x74,0x28,0x27,0x73,0x65,0x74,0x74,0x6C,0x65,0x64,0x27,0x29,0x3B,0x0A,0x20,0x20,0x20,0x20,0x7D,
0x0A,0x0A,0x20,0x20,0x20,0x20,0x69,0x66,0x28,0x21,0x74,0x68,0x69,0x73,0x2E,0x5F,0x69,0x6E,0x74,0x65,0x72,0x6E,0x61,0x6C,0x2E,0x63,0x6F,0x6D,0x70,0x6C,0x65,0x74,
0x65,0x64,0x29,0x0A,0x20,0x20,0x20,0x20,0x7B,0x0A,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x2F,0x2F,0x20,0x53,0x61,0x76,0x65,0x20,0x72,0x65,0x66,0x65,0x72,0x65,
0x6E,0x63,0x65,0x20,0x6F,0x66,0x20,0x74,0x68,0x69,0x73,0x20,0x6F,0x62,0x6A,0x65,0x63,0x74,0x0A,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x72,0x65,0x66,0x54,0x61,
0x62,0x6C,0x65,0x5B,0x74,0x68,0x69,0x73,0x2E,0x5F,0x69,0x6E,0x74,0x65,0x72,0x6E,0x61,0x6C,0x2E,0x5F,0x68,0x61,0x73,0x68,0x43,0x6F,0x64,0x65,0x28,0x29,0x5D,0x20,
0x3D,0x20,0x74,0x68,0x69,0x73,0x2E,0x5F,0x69,0x6E,0x74,0x65,0x72,0x6E,0x61,0x6C,0x3B,0x0A,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x74,0x68,0x69,0x73,0x2E,0x5F,
0x69,0x6E,0x74,0x65,0x72,0x6E,0x61,0x6C,0x2E,0x6F,0x6E,0x63,0x65,0x28,0x27,0x73,0x65,0x74,0x74,0x6C,0x65,0x64,0x27,0x2C,0x20,0x66,0x75,0x6E,0x63,0x74,0x69,0x6F,
0x6E,0x20,0x28,0x29,0x20,0x7B,0x20,0x72,0x65,0x66,0x54,0x61,0x62,0x6C,0x65,0x5B,0x74,0x68,0x69,0x73,0x2E,0x5F,0x68,0x61,0x73,0x68,0x43,0x6F,0x64,0x65,0x28,0x29,
0x5D,0x20,0x3D,0x20,0x6E,0x75,0x6C,0x6C,0x3B,0x20,0x7D,0x29,0x3B,0x0A,0x20,0x20,0x20,0x20,0x7D,0x0A,0x7D,0x0A,0x0A,0x50,0x72,0x6F,0x6D,0x69,0x73,0x65,0x2E,0x72,
0x65,0x73,0x6F,0x6C,0x76,0x65,0x20,0x3D,0x20,0x66,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x20,0x72,0x65,0x73,0x6F,0x6C,0x76,0x65,0x28,0x29,0x0A,0x7B,0x0A,0x20,0x20,
0x20,0x20,0x76,0x61,0x72,0x20,0x72,0x65,0x74,0x56,0x61,0x6C,0x20,0x3D,0x20,0x6E,0x65,0x77,0x20,0x50,0x72,0x6F,0x6D,0x69,0x73,0x65,0x28,0x66,0x75,0x6E,0x63,0x74,
0x69,0x6F,0x6E,0x20,0x28,0x72,0x2C,0x20,0x6A,0x29,0x20,0x7B,0x20,0x7D,0x29,0x3B,0x0A,0x20,0x20,0x20,0x20,0x76,0x61,0x72,0x20,0x61,0x72,0x67,0x73,0x20,0x3D,0x20,
0x5B,0x5D,0x3B,0x0A,0x20,0x20,0x20,0x20,0x66,0x6F,0x72,0x20,0x28,0x76,0x61,0x72,0x20,0x69,0x20,0x69,0x6E,0x20,0x61,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x29,
0x0A,0x20,0x20,0x20,0x20,0x7B,0x0A,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x61,0x72,0x67,0x73,0x2E,0x70,0x75,0x73,0x68,0x28,0x61,0x72,0x67,0x75,0x6D,0x65,0x6E,
0x74,0x73,0x5B,0x69,0x5D,0x29,0x3B,0x0A,0x20,0x20,0x20,0x20,0x7D,0x0A,0x20,0x20,0x20,0x20,0x72,0x65,0x74,0x56,0x61,0x6C,0x2E,0x5F,0x69,0x6E,0x74,0x65,0x72,0x6E,
0x61,0x6C,0x2E,0x72,0x65,0x73,0x6F,0x6C,0x76,0x65,0x72,0x2E,0x61,0x70,0x70,0x6C,0x79,0x28,0x72,0x65,0x74,0x56,0x61,0x6C,0x2E,0x5F,0x69,0x6E,0x74,0x65,0x72,0x6E,
0x61,0x6C,0x2C,0x20,0x61,0x72,0x67,0x73,0x29,0x3B,0x0A,0x20,0x20,0x20,0x20,0x72,0x65,0x74,0x75,0x72,0x6E,0x20,0x28,0x72,0x65,0x74,0x56,0x61,0x6C,0x29,0x3B,0x0A,
0x7D,0x3B,0x0A,0x50,0x72,0x6F,0x6D,0x69,0x73,0x65,0x2E,0x72,0x65,0x6A,0x65,0x63,0x74,0x20,0x3D,0x20,0x66,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x20,0x72,0x65,0x6A,
0x65,0x63,0x74,0x28,0x29,0x20,0x7B,0x0A,0x20,0x20,0x20,0x20,0x76,0x61,0x72,0x20,0x72,0x65,0x74,0x56,0x61,0x6C,0x20,0x3D,0x20,0x6E,0x65,0x77,0x20,0x50,0x72,0x6F,
0x6D,0x69,0x73,0x65,0x28,0x66,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x20,0x28,0x72,0x2C,0x20,0x6A,0x29,0x20,0x7B,0x20,0x7D,0x29,0x3B,0x0A,0x20,0x20,0x20,0x20,0x76,
0x61,0x72,0x20,0x61,0x72,0x67,0x73,0x20,0x3D,0x20,0x5B,0x5D,0x3B,0x0A,0x20,0x20,0x20,0x20,0x66,0x6F,0x72,0x20,0x28,0x76,0x61,0x72,0x20,0x69,0x20,0x69,0x6E,0x20,
0x61,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x29,0x20,0x7B,0x0A,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x61,0x72,0x67,0x73,0x2E,0x70,0x75,0x73,0x68,0x28,0x61,
0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x5B,0x69,0x5D,0x29,0x3B,0x0A,0x20,0x20,0x20,0x20,0x7D,0x0A,0x20,0x20,0x20,0x20,0x72,0x65,0x74,0x56,0x61,0x6C,0x2E,0x5F,
0x69,0x6E,0x74,0x65,0x72,0x6E,0x61,0x6C,0x2E,0x72,0x65,0x6A,0x65,0x63,0x74,0x6F,0x72,0x2E,0x61,0x70,0x70,0x6C,0x79,0x28,0x72,0x65,0x74,0x56,0x61,0x6C,0x2E,0x5F,
0x69,0x6E,0x74,0x65,0x72,0x6E,0x61,0x6C,0x2C,0x20,0x61,0x72,0x67,0x73,0x29,0x3B,0x0A,0x20,0x20,0x20,0x20,0x72,0x65,0x74,0x75,0x72,0x6E,0x20,0x28,0x72,0x65,0x74,
0x56,0x61,0x6C,0x29,0x3B,0x0A,0x7D,0x3B,0x0A,0x50,0x72,0x6F,0x6D,0x69,0x73,0x65,0x2E,0x61,0x6C,0x6C,0x20,0x3D,0x20,0x66,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x20,
0x61,0x6C,0x6C,0x28,0x70,0x72,0x6F,0x6D,0x69,0x73,0x65,0x4C,0x69,0x73,0x74,0x29,0x0D,0x0A,0x7B,0x0D,0x0A,0x20,0x20,0x20,0x20,0x76,0x61,0x72,0x20,0x72,0x65,0x74,
0x20,0x3D,0x20,0x6E,0x65,0x77,0x20,0x50,0x72,0x6F,0x6D,0x69,0x73,0x65,0x28,0x66,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x20,0x28,0x72,0x65,0x73,0x2C,0x20,0x72,0x65,
0x6A,0x29,0x0D,0x0A,0x20,0x20,0x20,0x20,0x7B,0x0D,0x0A,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x74,0x68,0x69,0x73,0x2E,0x5F,0x5F,0x72,0x65,0x6A,0x65,0x63,0x74,
0x6F,0x72,0x20,0x3D,0x20,0x72,0x65,0x6A,0x3B,0x0D,0x0A,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x74,0x68,0x69,0x73,0x2E,0x5F,0x5F,0x72,0x65,0x73,0x6F,0x6C,0x76,
0x65,0x72,0x20,0x3D,0x20,0x72,0x65,0x73,0x3B,0x0D,0x0A,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x74,0x68,0x69,0x73,0x2E,0x5F,0x5F,0x70,0x72,0x6F,0x6D,0x69,0x73,
0x65,0x4C,0x69,0x73,0x74,0x20,0x3D,0x20,0x70,0x72,0x6F,0x6D,0x69,0x73,0x65,0x4C,0x69,0x73,0x74,0x3B,0x0D,0x0A,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x74,0x68,
0x69,0x73,0x2E,0x5F,0x5F,0x64,0x6F,0x6E,0x65,0x20,0x3D,0x20,0x66,0x61,0x6C,0x73,0x65,0x3B,0x0D,0x0A,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x74,0x68,0x69,0x73,
0x2E,0x5F,0x5F,0x63,0x6F,0x75,0x6E,0x74,0x20,0x3D,0x20,0x30,0x3B,0x0D,0x0A,0x20,0x20,0x20,0x20,0x7D,0x29,0x3B,0x0D,0x0A,0x0D,0x0A,0x20,0x20,0x20,0x20,0x66,0x6F,
0x72,0x20,0x28,0x76,0x61,0x72,0x20,0x69,0x20,0x69,0x6E,0x20,0x70,0x72,0x6F,0x6D,0x69,0x73,0x65,0x4C,0x69,0x73,0x74,0x29,0x0D,0x0A,0x20,0x20,0x20,0x20,0x7B,0x0D,
0x0A,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x70,0x72,0x6F,0x6D,0x69,0x73,0x65,0x4C,0x69,0x73,0x74,0x5B,0x69,0x5D,0x2E,0x74,0x68,0x65,0x6E,0x28,0x66,0x75,0x6E,
0x63,0x74,0x69,0x6F,0x6E,0x20,0x28,0x29,0x0D,0x0A,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7B,0x0D,0x0A,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x2F,0x2F,0x20,0x53,0x75,0x63,0x63,0x65,0x73,0x73,0x0D,0x0A,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x69,0x66,0x28,0x2B,0x2B,0x72,0x65,
0x74,0x2E,0x5F,0x5F,0x63,0x6F,0x75,0x6E,0x74,0x20,0x3D,0x3D,0x20,0x72,0x65,0x74,0x2E,0x5F,0x5F,0x70,0x72,0x6F,0x6D,0x69,0x73,0x65,0x4C,0x69,0x73,0x74,0x2E,0x6C,
0x65,0x6E,0x67,0x74,0x68,0x29,0x0D,0x0A,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7B,0x0D,0x0A,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x72,0x65,0x74,0x2E,0x5F,0x5F,0x64,0x6F,0x6E,0x65,0x20,0x3D,0x20,0x74,0x72,0x75,0x65,0x3B,0x0D,0x0A,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x72,0x65,0x74,0x2E,0x5F,0x5F,0x72,0x65,0x73,0x6F,0x6C,0x76,0x65,0x72,0x28,0x72,0x65,0x74,0x2E,0x5F,0x5F,
0x70,0x72,0x6F,0x6D,0x69,0x73,0x65,0x4C,0x69,0x73,0x74,0x29,0x3B,0x0D,0x0A,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7D,0x0D,0x0A,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x7D,0x2C,0x20,0x66,0x75,0x6E,0x63,0x74,0x69,0x6F,0x6E,0x20,0x28,0x61,0x72,0x67,0x29,0x0D,0x0A,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x7B,0x0D,0x0A,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x2F,0x2F,0x20,0x46,0x61,0x69,0x6C,0x75,0x72,0x65,0x0D,0x0A,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x69,0x66,0x28,0x21,0x72,0x65,0x74,0x2E,0x5F,0x5F,0x64,0x6F,0x6E,0x65,0x29,0x0D,0x0A,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x7B,0x0D,0x0A,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x72,0x65,0x74,0x2E,0x5F,0x5F,0x64,0x6F,
0x6E,0x65,0x20,0x3D,0x20,0x74,0x72,0x75,0x65,0x3B,0x0D,0x0A,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x72,0x65,0x74,0x2E,
0x5F,0x5F,0x72,0x65,0x6A,0x65,0x63,0x74,0x6F,0x72,0x28,0x61,0x72,0x67,0x29,0x3B,0x0D,0x0A,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7D,0x0D,
0x0A,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7D,0x29,0x3B,0x0D,0x0A,0x20,0x20,0x20,0x20,0x7D,0x0D,0x0A,0x20,0x20,0x20,0x20,0x69,0x66,0x20,0x28,0x70,0x72,0x6F,
0x6D,0x69,0x73,0x65,0x4C,0x69,0x73,0x74,0x2E,0x6C,0x65,0x6E,0x67,0x74,0x68,0x20,0x3D,0x3D,0x20,0x30,0x29,0x0D,0x0A,0x20,0x20,0x20,0x20,0x7B,0x0D,0x0A,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x72,0x65,0x74,0x2E,0x5F,0x5F,0x72,0x65,0x73,0x6F,0x6C,0x76,0x65,0x72,0x28,0x70,0x72,0x6F,0x6D,0x69,0x73,0x65,0x4C,0x69,0x73,0x74,
0x29,0x3B,0x0D,0x0A,0x20,0x20,0x20,0x20,0x7D,0x0D,0x0A,0x20,0x20,0x20,0x20,0x72,0x65,0x74,0x75,0x72,0x6E,0x20,0x28,0x72,0x65,0x74,0x29,0x3B,0x0D,0x0A,0x7D,0x3B,
0x0A,0x0A,0x6D,0x6F,0x64,0x75,0x6C,0x65,0x2E,0x65,0x78,0x70,0x6F,0x72,0x74,0x73,0x20,0x3D,0x20,0x50,0x72,0x6F,0x6D,0x69,0x73,0x65,0x3B };
int g_displayStreamPipeMessages = 0;
int g_displayFinalizerMessages = 0;
@@ -133,8 +335,7 @@ duk_ret_t ILibDuktape_Polyfills_Buffer_from(duk_context *ctx)
if (nargs == 1)
{
str = (char*)duk_get_lstring(ctx, 0, &strlength);
duk_push_fixed_buffer(ctx, strlength);
buffer = Duktape_GetBuffer(ctx, -1, NULL);
buffer = duk_push_fixed_buffer(ctx, strlength);
memcpy_s(buffer, strlength, str, strlength);
duk_push_buffer_object(ctx, -1, 0, strlength, DUK_BUFOBJ_NODEJS_BUFFER);
return(1);
@@ -151,16 +352,14 @@ duk_ret_t ILibDuktape_Polyfills_Buffer_from(duk_context *ctx)
if (strcmp(encoding, "base64") == 0)
{
// Base64
duk_push_fixed_buffer(ctx, ILibBase64DecodeLength((int)strlength));
buffer = Duktape_GetBuffer(ctx, -1, NULL);
// Base64
buffer = duk_push_fixed_buffer(ctx, ILibBase64DecodeLength((int)strlength));
bufferLen = ILibBase64Decode((unsigned char*)str, (int)strlength, (unsigned char**)&buffer);
duk_push_buffer_object(ctx, -1, 0, bufferLen, DUK_BUFOBJ_NODEJS_BUFFER);
}
else if (strcmp(encoding, "hex") == 0)
{
duk_push_fixed_buffer(ctx, strlength / 2);
buffer = Duktape_GetBuffer(ctx, -1, NULL);
{
buffer = duk_push_fixed_buffer(ctx, strlength / 2);
bufferLen = util_hexToBuf(str, (int)strlength, buffer);
duk_push_buffer_object(ctx, -1, 0, bufferLen, DUK_BUFOBJ_NODEJS_BUFFER);
}
@@ -187,9 +386,13 @@ duk_ret_t ILibDuktape_Polyfills_Buffer_readInt32BE(duk_context *ctx)
duk_ret_t ILibDuktape_Polyfills_Buffer_alloc(duk_context *ctx)
{
int sz = duk_require_int(ctx, 0);
int fill = 0;
if (duk_is_number(ctx, 1)) { fill = duk_require_int(ctx, 1); }
duk_push_fixed_buffer(ctx, sz);
char *buffer = Duktape_GetBuffer(ctx, -1, NULL);
memset(buffer, 0, sz);
memset(buffer, fill, sz);
duk_push_buffer_object(ctx, -1, 0, sz, DUK_BUFOBJ_NODEJS_BUFFER);
return(1);
}
@@ -713,6 +916,9 @@ void ILibDuktape_Polyfills_timer_elapsed(void *obj)
duk_context *ctx = ptrs->ctx;
char *funcName;
if (!ILibMemory_CanaryOK(ptrs)) { return; }
if (duk_check_stack(ctx, 3) == 0) { return; }
duk_push_heapptr(ctx, ptrs->callback); // [func]
funcName = Duktape_GetStringPropertyValue(ctx, -1, "name", "unknown_method");
duk_push_heapptr(ctx, ptrs->object); // [func][this]
@@ -724,6 +930,13 @@ void ILibDuktape_Polyfills_timer_elapsed(void *obj)
}
else
{
if (ptrs->timerType == ILibDuktape_Timer_Type_IMMEDIATE)
{
duk_push_heap_stash(ctx);
duk_del_prop_string(ctx, -1, Duktape_GetStashKey(ptrs->object));
duk_pop(ctx);
}
duk_del_prop_string(ctx, -2, "\xFF_callback");
duk_del_prop_string(ctx, -2, "\xFF_argArray");
duk_del_prop_string(ctx, -2, ILibDuktape_Timer_Ptrs);
@@ -751,11 +964,16 @@ duk_ret_t ILibDuktape_Polyfills_timer_set(duk_context *ctx)
duk_get_prop_string(ctx, -1, "type");
timerType = (ILibDuktape_Timer_Type)duk_get_int(ctx, -1);
duk_push_object(ctx); //[retVal]
duk_push_object(ctx); //[retVal]
switch (timerType)
{
case ILibDuktape_Timer_Type_IMMEDIATE:
ILibDuktape_WriteID(ctx, "Timers.immediate");
ILibDuktape_WriteID(ctx, "Timers.immediate");
// We're only saving a reference for immediates
duk_push_heap_stash(ctx); //[retVal][stash]
duk_dup(ctx, -2); //[retVal][stash][immediate]
duk_put_prop_string(ctx, -2, Duktape_GetStashKey(duk_get_heapptr(ctx, -1))); //[retVal][stash]
duk_pop(ctx); //[retVal]
break;
case ILibDuktape_Timer_Type_INTERVAL:
ILibDuktape_WriteID(ctx, "Timers.interval");
@@ -765,10 +983,9 @@ duk_ret_t ILibDuktape_Polyfills_timer_set(duk_context *ctx)
break;
}
ILibDuktape_CreateFinalizer(ctx, ILibDuktape_Polyfills_timer_finalizer);
duk_push_fixed_buffer(ctx, sizeof(ILibDuktape_Timer)); //[retVal][ptrs]
ptrs = (ILibDuktape_Timer*)Duktape_GetBuffer(ctx, -1, NULL);
memset(ptrs, 0, sizeof(ILibDuktape_Timer));
duk_put_prop_string(ctx, -2, ILibDuktape_Timer_Ptrs); //[retVal]
ptrs = (ILibDuktape_Timer*)Duktape_PushBuffer(ctx, sizeof(ILibDuktape_Timer)); //[retVal][ptrs]
duk_put_prop_string(ctx, -2, ILibDuktape_Timer_Ptrs); //[retVal]
ptrs->ctx = ctx;
ptrs->object = duk_get_heapptr(ctx, -1);
@@ -816,6 +1033,13 @@ duk_ret_t ILibDuktape_Polyfills_timer_clear(duk_context *ctx)
duk_get_prop_string(ctx, 0, ILibDuktape_Timer_Ptrs);
ptrs = (ILibDuktape_Timer*)Duktape_GetBuffer(ctx, -1, NULL);
if (ptrs->timerType == ILibDuktape_Timer_Type_IMMEDIATE)
{
duk_push_heap_stash(ctx);
duk_del_prop_string(ctx, -1, Duktape_GetStashKey(ptrs->object));
duk_pop(ctx);
}
ILibLifeTime_Remove(ILibGetBaseTimer(Duktape_GetChain(ctx)), ptrs);
return 0;
}
@@ -1244,7 +1468,6 @@ duk_ret_t ILibDuktape_Stream_Writable_WriteSink_Flush(duk_context *ctx)
}
else
{
duk_push_this(ctx);
ILibDuktape_WritableStream *WS = (ILibDuktape_WritableStream*)Duktape_GetPointerProperty(ctx, -1, ILibDuktape_Stream_WritablePtr);
ILibDuktape_WritableStream_Ready(WS);
}
@@ -1275,6 +1498,7 @@ ILibTransport_DoneState ILibDuktape_Stream_Writable_WriteSink(struct ILibDuktape
duk_dup(stream->ctx, -2); // [_write][this][string/buffer][callback][stash][callback]
duk_put_prop_string(stream->ctx, -2, Duktape_GetStashKey(h)); // [_write][this][string/buffer][callback][stash]
duk_pop(stream->ctx); // [_write][this][string/buffer][callback]
duk_push_pointer(stream->ctx, stream); duk_put_prop_string(stream->ctx, -2, ILibDuktape_Stream_WritablePtr);
duk_push_pointer(stream->ctx, &retVal); // [_write][this][string/buffer][callback][retval]
duk_put_prop_string(stream->ctx, -2, "retval"); // [_write][this][string/buffer][callback]
@@ -1294,12 +1518,24 @@ ILibTransport_DoneState ILibDuktape_Stream_Writable_WriteSink(struct ILibDuktape
return(retVal);
}
duk_ret_t ILibDuktape_Stream_Writable_EndSink_finish(duk_context *ctx)
{
duk_push_current_function(ctx);
ILibDuktape_WritableStream *ws = (ILibDuktape_WritableStream*)Duktape_GetPointerProperty(ctx, -1, "ptr");
if (ILibMemory_CanaryOK(ws))
{
ILibDuktape_WritableStream_Finish(ws);
}
return(0);
}
void ILibDuktape_Stream_Writable_EndSink(struct ILibDuktape_WritableStream *stream, void *user)
{
duk_push_this(stream->ctx); // [writable]
duk_get_prop_string(stream->ctx, -1, "_final"); // [writable][_final]
duk_swap_top(stream->ctx, -2); // [_final][this]
if (duk_pcall_method(stream->ctx, 0) != 0) { ILibDuktape_Process_UncaughtExceptionEx(stream->ctx, "stream.writable._final(): "); }
duk_push_this(stream->ctx); // [writable]
duk_get_prop_string(stream->ctx, -1, "_final"); // [writable][_final]
duk_swap_top(stream->ctx, -2); // [_final][this]
duk_push_c_function(stream->ctx, ILibDuktape_Stream_Writable_EndSink_finish, 0); // [_final][this][callback]
duk_push_pointer(stream->ctx, stream); duk_put_prop_string(stream->ctx, -2, "ptr");
if (duk_pcall_method(stream->ctx, 1) != 0) { ILibDuktape_Process_UncaughtExceptionEx(stream->ctx, "stream.writable._final(): "); }
duk_pop(stream->ctx); // ...
}
duk_ret_t ILibDuktape_Stream_newWritable(duk_context *ctx)
@@ -1529,6 +1765,12 @@ duk_ret_t ILibDuktape_Polyfills_Object_hashCode(duk_context *ctx)
duk_push_string(ctx, Duktape_GetStashKey(duk_get_heapptr(ctx, -1)));
return(1);
}
duk_ret_t ILibDuktape_Polyfills_Array_peek(duk_context *ctx)
{
duk_push_this(ctx); // [Array]
duk_get_prop_index(ctx, -1, (duk_uarridx_t)duk_get_length(ctx, -1) - 1);
return(1);
}
void ILibDuktape_Polyfills_object(duk_context *ctx)
{
// Polyfill Object._hashCode()
@@ -1537,9 +1779,164 @@ void ILibDuktape_Polyfills_object(duk_context *ctx)
duk_push_c_function(ctx, ILibDuktape_Polyfills_Object_hashCode, 0); // [g][Object][prototype][func]
ILibDuktape_CreateReadonlyProperty(ctx, "_hashCode"); // [g][Object][prototype]
duk_pop_2(ctx); // [g]
duk_get_prop_string(ctx, -1, "Array"); // [g][Array]
duk_get_prop_string(ctx, -1, "prototype"); // [g][Array][prototype]
duk_push_c_function(ctx, ILibDuktape_Polyfills_Array_peek, 0); // [g][Array][prototype][peek]
ILibDuktape_CreateReadonlyProperty(ctx, "peek"); // [g][Array][prototype]
duk_pop_2(ctx); // [g]
}
#ifndef MICROSTACK_NOTLS
void ILibDuktape_bignum_addBigNumMethods(duk_context *ctx, BIGNUM *b);
duk_ret_t ILibDuktape_bignum_toString(duk_context *ctx)
{
duk_push_this(ctx);
BIGNUM *b = (BIGNUM*)Duktape_GetPointerProperty(ctx, -1, "\xFF_BIGNUM");
if (b != NULL)
{
char *numstr = BN_bn2dec(b);
duk_push_string(ctx, numstr);
OPENSSL_free(numstr);
return(1);
}
else
{
return(ILibDuktape_Error(ctx, "Invalid BIGNUM"));
}
}
duk_ret_t ILibDuktape_bignum_add(duk_context* ctx)
{
BIGNUM *ret = BN_new();
BIGNUM *r1, *r2;
duk_push_this(ctx);
r1 = (BIGNUM*)Duktape_GetPointerProperty(ctx, -1, "\xFF_BIGNUM");
r2 = (BIGNUM*)Duktape_GetPointerProperty(ctx, 0, "\xFF_BIGNUM");
BN_add(ret, r1, r2);
ILibDuktape_bignum_addBigNumMethods(ctx, ret);
return(1);
}
duk_ret_t ILibDuktape_bignum_sub(duk_context* ctx)
{
BIGNUM *ret = BN_new();
BIGNUM *r1, *r2;
duk_push_this(ctx);
r1 = (BIGNUM*)Duktape_GetPointerProperty(ctx, -1, "\xFF_BIGNUM");
r2 = (BIGNUM*)Duktape_GetPointerProperty(ctx, 0, "\xFF_BIGNUM");
BN_sub(ret, r1, r2);
ILibDuktape_bignum_addBigNumMethods(ctx, ret);
return(1);
}
duk_ret_t ILibDuktape_bignum_mul(duk_context* ctx)
{
BN_CTX *bx = BN_CTX_new();
BIGNUM *ret = BN_new();
BIGNUM *r1, *r2;
duk_push_this(ctx);
r1 = (BIGNUM*)Duktape_GetPointerProperty(ctx, -1, "\xFF_BIGNUM");
r2 = (BIGNUM*)Duktape_GetPointerProperty(ctx, 0, "\xFF_BIGNUM");
BN_mul(ret, r1, r2, bx);
BN_CTX_free(bx);
ILibDuktape_bignum_addBigNumMethods(ctx, ret);
return(1);
}
duk_ret_t ILibDuktape_bignum_div(duk_context* ctx)
{
BN_CTX *bx = BN_CTX_new();
BIGNUM *ret = BN_new();
BIGNUM *r1, *r2;
duk_push_this(ctx);
r1 = (BIGNUM*)Duktape_GetPointerProperty(ctx, -1, "\xFF_BIGNUM");
r2 = (BIGNUM*)Duktape_GetPointerProperty(ctx, 0, "\xFF_BIGNUM");
BN_div(ret, NULL, r1, r2, bx);
BN_CTX_free(bx);
ILibDuktape_bignum_addBigNumMethods(ctx, ret);
return(1);
}
duk_ret_t ILibDuktape_bignum_mod(duk_context* ctx)
{
BN_CTX *bx = BN_CTX_new();
BIGNUM *ret = BN_new();
BIGNUM *r1, *r2;
duk_push_this(ctx);
r1 = (BIGNUM*)Duktape_GetPointerProperty(ctx, -1, "\xFF_BIGNUM");
r2 = (BIGNUM*)Duktape_GetPointerProperty(ctx, 0, "\xFF_BIGNUM");
BN_div(NULL, ret, r1, r2, bx);
BN_CTX_free(bx);
ILibDuktape_bignum_addBigNumMethods(ctx, ret);
return(1);
}
duk_ret_t ILibDuktape_bignum_finalizer(duk_context *ctx)
{
BIGNUM *b = (BIGNUM*)Duktape_GetPointerProperty(ctx, 0, "\xFF_BIGNUM");
if (b != NULL)
{
BN_free(b);
}
return(0);
}
void ILibDuktape_bignum_addBigNumMethods(duk_context *ctx, BIGNUM *b)
{
duk_push_object(ctx);
duk_push_pointer(ctx, b); duk_put_prop_string(ctx, -2, "\xFF_BIGNUM");
ILibDuktape_CreateProperty_InstanceMethod(ctx, "toString", ILibDuktape_bignum_toString, DUK_VARARGS);
ILibDuktape_CreateInstanceMethod(ctx, "add", ILibDuktape_bignum_add, 1);
ILibDuktape_CreateInstanceMethod(ctx, "sub", ILibDuktape_bignum_sub, 1);
ILibDuktape_CreateInstanceMethod(ctx, "mul", ILibDuktape_bignum_mul, 1);
ILibDuktape_CreateInstanceMethod(ctx, "div", ILibDuktape_bignum_div, 1);
ILibDuktape_CreateInstanceMethod(ctx, "mod", ILibDuktape_bignum_mod, 1);
duk_push_c_function(ctx, ILibDuktape_bignum_finalizer, 1); duk_set_finalizer(ctx, -2);
duk_eval_string(ctx, "(function toNumber(){return(parseInt(this.toString()));})"); duk_put_prop_string(ctx, -2, "toNumber");
}
duk_ret_t ILibDuktape_bignum_fromBuffer(duk_context *ctx)
{
char *endian = duk_get_top(ctx) > 1 ? Duktape_GetStringPropertyValue(ctx, 1, "endian", "big") : "big";
duk_size_t len;
char *buffer = Duktape_GetBuffer(ctx, 0, &len);
BIGNUM *b;
if (strcmp(endian, "big") == 0)
{
b = BN_bin2bn((unsigned char*)buffer, (int)len, NULL);
}
else if (strcmp(endian, "little") == 0)
{
b = BN_lebin2bn((unsigned char*)buffer, (int)len, NULL);
}
else
{
return(ILibDuktape_Error(ctx, "Invalid endian specified"));
}
ILibDuktape_bignum_addBigNumMethods(ctx, b);
return(1);
}
duk_ret_t ILibDuktape_bignum_func(duk_context *ctx)
{
BIGNUM *b = NULL;
BN_dec2bn(&b, duk_require_string(ctx, 0));
ILibDuktape_bignum_addBigNumMethods(ctx, b);
return(1);
}
void ILibDuktape_bignum_Push(duk_context *ctx, void *chain)
{
duk_push_c_function(ctx, ILibDuktape_bignum_func, DUK_VARARGS);
duk_push_c_function(ctx, ILibDuktape_bignum_fromBuffer, DUK_VARARGS); duk_put_prop_string(ctx, -2, "fromBuffer");
}
#endif
void ILibDuktape_Polyfills_Init(duk_context *ctx)
{
ILibDuktape_ModSearch_AddHandler(ctx, "queue", ILibDuktape_Queue_Push);
@@ -1548,6 +1945,11 @@ void ILibDuktape_Polyfills_Init(duk_context *ctx)
#ifndef MICROSTACK_NOTLS
ILibDuktape_ModSearch_AddHandler(ctx, "pkcs7", ILibDuktape_PKCS7_Push);
#endif
ILibDuktape_ModSearch_AddModule(ctx, "promise", promise, sizeof(promise) - 1);
#ifndef MICROSTACK_NOTLS
ILibDuktape_ModSearch_AddHandler(ctx, "bignum", ILibDuktape_bignum_Push);
#endif
// Global Polyfills
duk_push_global_object(ctx); // [g]