diff --git a/hyperdbg/hprdbgctrl/code/debugger/script-engine-wrapper/script-engine-wrapper.cpp b/hyperdbg/hprdbgctrl/code/debugger/script-engine-wrapper/script-engine-wrapper.cpp index 8567c843..12646812 100644 --- a/hyperdbg/hprdbgctrl/code/debugger/script-engine-wrapper/script-engine-wrapper.cpp +++ b/hyperdbg/hprdbgctrl/code/debugger/script-engine-wrapper/script-engine-wrapper.cpp @@ -358,6 +358,14 @@ ScriptEngineEvalWrapper(PGUEST_REGS GuestRegs, ACTION_BUFFER ActionBuffer = {0}; SYMBOL ErrorSymbol = {0}; + // + // + // + PSYMBOL_BUFFER StackBuffer = GetStackBuffer(); + int StackIndx = 0; + int StackBaseIndx = 0; + int StackTempBaseIndx = 0; + if (CodeBuffer->Message == NULL) { for (UINT64 i = 0; i < CodeBuffer->Pointer;) @@ -386,6 +394,10 @@ ScriptEngineEvalWrapper(PGUEST_REGS GuestRegs, &VariablesList, CodeBuffer, &i, + StackBuffer, + &StackIndx, + &StackBaseIndx, + &StackTempBaseIndx, &ErrorSymbol) == TRUE) { CHAR NameOfOperator[MAX_FUNCTION_NAME_LENGTH] = {0}; diff --git a/hyperdbg/hprdbgkd/code/debugger/core/Debugger.c b/hyperdbg/hprdbgkd/code/debugger/core/Debugger.c index 6565c133..cfeaa5bd 100644 --- a/hyperdbg/hprdbgkd/code/debugger/core/Debugger.c +++ b/hyperdbg/hprdbgkd/code/debugger/core/Debugger.c @@ -1653,6 +1653,10 @@ DebuggerPerformRunScript(PROCESSOR_DEBUGGING_STATE * DbgState, &VariablesList, &CodeBuffer, &i, + NULL, + NULL, + NULL, + NULL, &ErrorSymbol) == TRUE) { CHAR NameOfOperator[MAX_FUNCTION_NAME_LENGTH] = {0}; diff --git a/hyperdbg/include/SDK/Imports/HyperDbgScriptImports.h b/hyperdbg/include/SDK/Imports/HyperDbgScriptImports.h index 356f2aff..f677985b 100644 --- a/hyperdbg/include/SDK/Imports/HyperDbgScriptImports.h +++ b/hyperdbg/include/SDK/Imports/HyperDbgScriptImports.h @@ -19,6 +19,7 @@ extern "C" { #endif __declspec(dllimport) PSYMBOL_BUFFER ScriptEngineParse(char * str); +__declspec(dllimport) PSYMBOL_BUFFER GetStackBuffer(); __declspec(dllimport) void PrintSymbolBuffer(const PSYMBOL_BUFFER SymbolBuffer); __declspec(dllimport) void PrintSymbol(PSYMBOL Symbol); __declspec(dllimport) void RemoveSymbolBuffer(PSYMBOL_BUFFER SymbolBuffer); diff --git a/hyperdbg/script-engine/code/common.c b/hyperdbg/script-engine/code/common.c index 4da088f0..9c93693a 100644 --- a/hyperdbg/script-engine/code/common.c +++ b/hyperdbg/script-engine/code/common.c @@ -165,7 +165,20 @@ PrintToken(PTOKEN Token) case UNKNOWN: printf(" UNKNOWN>\n"); break; - + case INPUT_VARIABLE_TYPE: + printf(" INPUT_VARIABLE_TYPE>\n"); + break; + case HANDLED_VARIABLE_TYPE: + printf(" HANDLED_VARIABLE_TYPE>\n"); + break; + case FUNCTION_TYPE: + printf(" FUNCTION_TYPE>\n"); + break; + case FUNCTION_PARAMETER_ID: + printf(" FUNCTION_PARAMETER_ID>\n"); + break; + case STACK_TEMP: + printf(" STACK_TEMP>\n"); default: printf(" ERROR>\n"); break; @@ -238,7 +251,7 @@ AppendWchar(PTOKEN Token, wchar_t c) // // Append the new charcter to the wstring // - *((wchar_t *)(Token->Value) + Token->Len/2) = c; + *((wchar_t *)(Token->Value) + Token->Len / 2) = c; Token->Len += 2; } @@ -394,7 +407,7 @@ Pop(PTOKEN_LIST TokenList) // Calculate address to read most recent token // if (TokenList->Pointer > 0) - TokenList->Pointer--; + TokenList->Pointer--; // not consider what if the token's type is string or wstring uintptr_t Head = (uintptr_t)TokenList->Head; uintptr_t Pointer = (uintptr_t)TokenList->Pointer; PTOKEN * ReadAddr = (PTOKEN *)(Head + Pointer * sizeof(PTOKEN)); @@ -507,16 +520,55 @@ IsOctal(char c) * @return PTOKEN */ PTOKEN -NewTemp(PSCRIPT_ENGINE_ERROR_TYPE Error) +NewTemp(PSCRIPT_ENGINE_ERROR_TYPE Error, PSYMBOL CurrentFunctionSymbol) +{ + if (CurrentFunctionSymbol) + { + return NewStackTemp(Error); + } + else + { + static unsigned int TempID = 0; + int i; + for (i = 0; i < MAX_TEMP_COUNT; i++) + { + if (TempMap[i] == 0) + { + TempID = i; + TempMap[i] = 1; + break; + } + } + if (i == MAX_TEMP_COUNT) + { + *Error = SCRIPT_ENGINE_ERROR_TEMP_LIST_FULL; + } + PTOKEN Temp = NewUnknownToken(); + char TempValue[8]; + sprintf(TempValue, "%d", TempID); + strcpy(Temp->Value, TempValue); + Temp->Type = TEMP; + return Temp; + } +} + +/** + * @brief Allocates a new temporary variable in stack and returns it + * + * @param Error + * @return PTOKEN + */ +PTOKEN +NewStackTemp(PSCRIPT_ENGINE_ERROR_TYPE Error) { static unsigned int TempID = 0; int i; for (i = 0; i < MAX_TEMP_COUNT; i++) { - if (TempMap[i] == 0) + if (StackTempMap[i] == 0) { - TempID = i; - TempMap[i] = 1; + TempID = i; + StackTempMap[i] = 1; break; } } @@ -528,7 +580,7 @@ NewTemp(PSCRIPT_ENGINE_ERROR_TYPE Error) char TempValue[8]; sprintf(TempValue, "%d", TempID); strcpy(Temp->Value, TempValue); - Temp->Type = TEMP; + Temp->Type = STACK_TEMP; return Temp; } @@ -545,6 +597,10 @@ FreeTemp(PTOKEN Temp) { TempMap[id] = 0; } + else if (Temp->Type == STACK_TEMP) + { + StackTempMap[id] = 0; + } } /** @@ -556,7 +612,8 @@ CleanTempList(void) { for (int i = 0; i < MAX_TEMP_COUNT; i++) { - TempMap[i] = 0; + TempMap[i] = 0; + StackTempMap[i] = 0; } } @@ -860,6 +917,28 @@ IsType14Func(PTOKEN Operator) return 0; } +/** + * @brief Checks whether this Token type is VariableType + * + * @param Operator + * @return char + */ + +char +IsVariableType(PTOKEN Operator) +{ + unsigned int n = VARIABLETYPE_LENGTH; + for (int i = 0; i < n; i++) + { + if (!strcmp(Operator->Value, VARIABLETYPE[i])) + { + return 1; + } + } + + return 0; +} + /** * @brief Checks whether this Token is noneterminal * NoneTerminal token starts with capital letter @@ -939,6 +1018,13 @@ GetTerminalId(PTOKEN Token) return i; } } + else if (Token->Type == FUNCTION_PARAMETER_ID) + { + if (!strcmp("_function_parameter_id", TerminalMap[i])) + { + return i; + } + } else if (Token->Type == REGISTER) { if (!strcmp("_register", TerminalMap[i])) @@ -1044,6 +1130,13 @@ LalrGetTerminalId(PTOKEN Token) return i; } } + else if (Token->Type == FUNCTION_PARAMETER_ID) + { + if (!strcmp("_function_parameter_id", LalrTerminalMap[i])) + { + return i; + } + } else if (Token->Type == REGISTER) { if (!strcmp("_register", LalrTerminalMap[i])) @@ -1292,10 +1385,10 @@ BinaryToInt(char * str) } /** -* @brief Rotate a character array to the left by one time -* -* @param str -*/ + * @brief Rotate a character array to the left by one time + * + * @param str + */ void RotateLeftStringOnce(char * str) { @@ -1306,5 +1399,4 @@ RotateLeftStringOnce(char * str) str[i] = str[i + 1]; } str[length - 1] = temp; - } \ No newline at end of file diff --git a/hyperdbg/script-engine/code/globals.c b/hyperdbg/script-engine/code/globals.c index aa0a3c60..644bb6b1 100644 --- a/hyperdbg/script-engine/code/globals.c +++ b/hyperdbg/script-engine/code/globals.c @@ -16,3 +16,4 @@ * */ char TempMap[MAX_TEMP_COUNT] = {0}; +char StackTempMap[MAX_TEMP_COUNT] = {0}; \ No newline at end of file diff --git a/hyperdbg/script-engine/code/parse-table.c b/hyperdbg/script-engine/code/parse-table.c index dfe89fb2..297a2b45 100644 --- a/hyperdbg/script-engine/code/parse-table.c +++ b/hyperdbg/script-engine/code/parse-table.c @@ -12,7 +12,47 @@ const struct _TOKEN Lhs[RULES_COUNT]= {NON_TERMINAL, "STATEMENT"}, {NON_TERMINAL, "STATEMENT"}, {NON_TERMINAL, "STATEMENT"}, - {NON_TERMINAL, "ASSIGNMENT_STATEMENT"}, + {NON_TERMINAL, "STATEMENT"}, + {NON_TERMINAL, "S2"}, + {NON_TERMINAL, "S2"}, + {NON_TERMINAL, "S2"}, + {NON_TERMINAL, "STATEMENT2"}, + {NON_TERMINAL, "STATEMENT2"}, + {NON_TERMINAL, "STATEMENT2"}, + {NON_TERMINAL, "STATEMENT2"}, + {NON_TERMINAL, "STATEMENT2"}, + {NON_TERMINAL, "STATEMENT2"}, + {NON_TERMINAL, "STATEMENT2"}, + {NON_TERMINAL, "STATEMENT2"}, + {NON_TERMINAL, "STATEMENT2"}, + {NON_TERMINAL, "STATEMENT2"}, + {NON_TERMINAL, "RETURN"}, + {NON_TERMINAL, "RETURN"}, + {NON_TERMINAL, "VARIABLE_TYPE1"}, + {NON_TERMINAL, "VARIABLE_TYPE1"}, + {NON_TERMINAL, "VARIABLE_TYPE1"}, + {NON_TERMINAL, "VARIABLE_TYPE1"}, + {NON_TERMINAL, "VARIABLE_TYPE1"}, + {NON_TERMINAL, "VARIABLE_TYPE1"}, + {NON_TERMINAL, "VARIABLE_TYPE1"}, + {NON_TERMINAL, "VARIABLE_TYPE1"}, + {NON_TERMINAL, "VARIABLE_TYPE1"}, + {NON_TERMINAL, "VARIABLE_TYPE1"}, + {NON_TERMINAL, "VARIABLE_TYPE2"}, + {NON_TERMINAL, "VARIABLE_TYPE2"}, + {NON_TERMINAL, "VARIABLE_TYPE3"}, + {NON_TERMINAL, "VARIABLE_TYPE4"}, + {NON_TERMINAL, "VARIABLE_TYPE4"}, + {NON_TERMINAL, "VARIABLE_TYPE5"}, + {NON_TERMINAL, "VARIABLE_TYPE5"}, + {NON_TERMINAL, "VARIABLE_TYPE6"}, + {NON_TERMINAL, "VARIABLE_TYPE6"}, + {NON_TERMINAL, "L_VALUE2"}, + {NON_TERMINAL, "L_VALUE2"}, + {NON_TERMINAL, "CALL_USER_DEFINED_FUNCTION_PARAMETER"}, + {NON_TERMINAL, "CALL_USER_DEFINED_FUNCTION_PARAMETER"}, + {NON_TERMINAL, "CALL_USER_DEFINED_FUNCTION_PARAMETER2"}, + {NON_TERMINAL, "CALL_USER_DEFINED_FUNCTION_PARAMETER2"}, {NON_TERMINAL, "ASSIGNMENT_STATEMENT'"}, {NON_TERMINAL, "ASSIGNMENT_STATEMENT'"}, {NON_TERMINAL, "ASSIGNMENT_STATEMENT'"}, @@ -80,6 +120,7 @@ const struct _TOKEN Lhs[RULES_COUNT]= {NON_TERMINAL, "FOR_STATEMENT"}, {NON_TERMINAL, "SIMPLE_ASSIGNMENT"}, {NON_TERMINAL, "SIMPLE_ASSIGNMENT"}, + {NON_TERMINAL, "SIMPLE_ASSIGNMENT"}, {NON_TERMINAL, "SIMPLE_ASSIGNMENT'"}, {NON_TERMINAL, "INC_DEC"}, {NON_TERMINAL, "INC_DEC'"}, @@ -140,8 +181,8 @@ const struct _TOKEN Lhs[RULES_COUNT]= {NON_TERMINAL, "E12"}, {NON_TERMINAL, "E12"}, {NON_TERMINAL, "E12"}, - {NON_TERMINAL, "E12"}, - {NON_TERMINAL, "E12"}, + {NON_TERMINAL, "E13"}, + {NON_TERMINAL, "E13"}, {NON_TERMINAL, "E12"}, {NON_TERMINAL, "E12"}, {NON_TERMINAL, "E12"}, @@ -157,6 +198,7 @@ const struct _TOKEN Lhs[RULES_COUNT]= {NON_TERMINAL, "L_VALUE"}, {NON_TERMINAL, "L_VALUE"}, {NON_TERMINAL, "L_VALUE"}, + {NON_TERMINAL, "L_VALUE"}, {NON_TERMINAL, "StringNumber"}, {NON_TERMINAL, "StringNumber"}, {NON_TERMINAL, "WstringNumber"}, @@ -171,11 +213,51 @@ const struct _TOKEN Rhs[RULES_COUNT][MAX_RHS_LEN]= {{NON_TERMINAL, "WHILE_STATEMENT"}}, {{NON_TERMINAL, "DO_WHILE_STATEMENT"}}, {{NON_TERMINAL, "FOR_STATEMENT"}}, - {{NON_TERMINAL, "ASSIGNMENT_STATEMENT"},{SPECIAL_TOKEN, ";"}}, + {{NON_TERMINAL, "L_VALUE"},{NON_TERMINAL, "L_VALUE2"}}, {{NON_TERMINAL, "CALL_FUNC_STATEMENT"},{SPECIAL_TOKEN, ";"}}, {{KEYWORD, "break"},{SEMANTIC_RULE, "@BREAK"},{SPECIAL_TOKEN, ";"}}, {{KEYWORD, "continue"},{SEMANTIC_RULE, "@CONTINUE"},{SPECIAL_TOKEN, ";"}}, - {{NON_TERMINAL, "L_VALUE"},{NON_TERMINAL, "ASSIGNMENT_STATEMENT'"}}, + {{NON_TERMINAL, "VARIABLE_TYPE3"}}, + {{NON_TERMINAL, "STATEMENT2"},{NON_TERMINAL, "S2"}}, + {{SPECIAL_TOKEN, "{"},{NON_TERMINAL, "STATEMENT2"},{NON_TERMINAL, "S2"},{SPECIAL_TOKEN, "}"}}, + {{EPSILON, "eps"}}, + {{NON_TERMINAL, "IF_STATEMENT"}}, + {{NON_TERMINAL, "WHILE_STATEMENT"}}, + {{NON_TERMINAL, "DO_WHILE_STATEMENT"}}, + {{NON_TERMINAL, "FOR_STATEMENT"}}, + {{NON_TERMINAL, "L_VALUE"},{NON_TERMINAL, "L_VALUE2"}}, + {{NON_TERMINAL, "CALL_FUNC_STATEMENT"},{SPECIAL_TOKEN, ";"}}, + {{KEYWORD, "break"},{SEMANTIC_RULE, "@BREAK"},{SPECIAL_TOKEN, ";"}}, + {{KEYWORD, "continue"},{SEMANTIC_RULE, "@CONTINUE"},{SPECIAL_TOKEN, ";"}}, + {{NON_TERMINAL, "VARIABLE_TYPE1"},{NON_TERMINAL, "VARIABLE_TYPE2"},{NON_TERMINAL, "L_VALUE"},{SPECIAL_TOKEN, "="},{NON_TERMINAL, "EXPRESSION"},{SEMANTIC_RULE, "@MOV"},{SPECIAL_TOKEN, ";"}}, + {{KEYWORD, "return"},{NON_TERMINAL, "RETURN"},{SPECIAL_TOKEN, ";"}}, + {{EPSILON, "eps"},{SEMANTIC_RULE, "@RETURN_OF_USER_DEFINED_FUNCTION_WITHOUT_VALUE"}}, + {{NON_TERMINAL, "EXPRESSION"},{SEMANTIC_RULE, "@RETURN_OF_USER_DEFINED_FUNCTION_WITH_VALUE"}}, + {{SEMANTIC_RULE, "@VOID"},{KEYWORD, "void"}}, + {{SEMANTIC_RULE, "@BOOL"},{KEYWORD, "bool"}}, + {{SEMANTIC_RULE, "@CHAR"},{KEYWORD, "char"}}, + {{SEMANTIC_RULE, "@SHORT"},{KEYWORD, "short"}}, + {{SEMANTIC_RULE, "@INT"},{KEYWORD, "int"}}, + {{SEMANTIC_RULE, "@LONG"},{KEYWORD, "long"}}, + {{SEMANTIC_RULE, "@UNSIGNED"},{KEYWORD, "unsigned"}}, + {{SEMANTIC_RULE, "@SIGNED"},{KEYWORD, "signed"}}, + {{SEMANTIC_RULE, "@FLOAT"},{KEYWORD, "float"}}, + {{SEMANTIC_RULE, "@DOUBLE"},{KEYWORD, "double"}}, + {{NON_TERMINAL, "VARIABLE_TYPE1"}}, + {{EPSILON, "eps"}}, + {{NON_TERMINAL, "VARIABLE_TYPE1"},{NON_TERMINAL, "VARIABLE_TYPE2"},{NON_TERMINAL, "L_VALUE"},{NON_TERMINAL, "VARIABLE_TYPE4"}}, + {{SPECIAL_TOKEN, "="},{NON_TERMINAL, "EXPRESSION"},{SEMANTIC_RULE, "@MOV"},{SPECIAL_TOKEN, ";"}}, + {{SEMANTIC_RULE, "@START_OF_USER_DEFINED_FUNCTION"},{SPECIAL_TOKEN, "("},{NON_TERMINAL, "VARIABLE_TYPE5"},{SPECIAL_TOKEN, ")"},{SPECIAL_TOKEN, "{"},{NON_TERMINAL, "S2"},{SEMANTIC_RULE, "@END_OF_USER_DEFINED_FUNCTION"},{SPECIAL_TOKEN, "}"}}, + {{EPSILON, "eps"}}, + {{NON_TERMINAL, "VARIABLE_TYPE1"},{NON_TERMINAL, "VARIABLE_TYPE2"},{NON_TERMINAL, "L_VALUE"},{SEMANTIC_RULE, "@FUNCTION_PARAMETER"},{NON_TERMINAL, "VARIABLE_TYPE6"}}, + {{SPECIAL_TOKEN, ","},{NON_TERMINAL, "VARIABLE_TYPE1"},{NON_TERMINAL, "VARIABLE_TYPE2"},{NON_TERMINAL, "L_VALUE"},{SEMANTIC_RULE, "@FUNCTION_PARAMETER"},{NON_TERMINAL, "VARIABLE_TYPE6"}}, + {{EPSILON, "eps"}}, + {{NON_TERMINAL, "ASSIGNMENT_STATEMENT'"},{SPECIAL_TOKEN, ";"}}, + {{SEMANTIC_RULE, "@CALL_USER_DEFINED_FUNCTION"},{SPECIAL_TOKEN, "("},{NON_TERMINAL, "CALL_USER_DEFINED_FUNCTION_PARAMETER"},{SPECIAL_TOKEN, ")"},{SEMANTIC_RULE, "@END_OF_CALLING_USER_DEFINED_FUNCTION_WITHOUT_RETURNING_VALUE"},{SPECIAL_TOKEN, ";"}}, + {{EPSILON, "eps"}}, + {{NON_TERMINAL, "EXPRESSION"},{SEMANTIC_RULE, "@CALL_USER_DEFINED_FUNCTION_PARAMETER"},{NON_TERMINAL, "CALL_USER_DEFINED_FUNCTION_PARAMETER2"}}, + {{SPECIAL_TOKEN, ","},{NON_TERMINAL, "EXPRESSION"},{SEMANTIC_RULE, "@CALL_USER_DEFINED_FUNCTION_PARAMETER"},{NON_TERMINAL, "CALL_USER_DEFINED_FUNCTION_PARAMETER2"}}, + {{EPSILON, "eps"}}, {{SPECIAL_TOKEN, "++"},{SEMANTIC_RULE, "@INC"}}, {{SPECIAL_TOKEN, "--"},{SEMANTIC_RULE, "@DEC"}}, {{SPECIAL_TOKEN, "="},{NON_TERMINAL, "EXPRESSION"},{SEMANTIC_RULE, "@MOV"}}, @@ -231,16 +313,17 @@ const struct _TOKEN Rhs[RULES_COUNT][MAX_RHS_LEN]= {{KEYWORD, "memcpy"},{SPECIAL_TOKEN, "("},{NON_TERMINAL, "EXPRESSION"},{SPECIAL_TOKEN, ","},{NON_TERMINAL, "EXPRESSION"},{SPECIAL_TOKEN, ","},{NON_TERMINAL, "EXPRESSION"},{SEMANTIC_RULE, "@MEMCPY"},{SPECIAL_TOKEN, ")"}}, {{SPECIAL_TOKEN, ","},{NON_TERMINAL, "EXPRESSION"},{NON_TERMINAL, "VA"}}, {{EPSILON, "eps"}}, - {{KEYWORD, "if"},{SEMANTIC_RULE, "@START_OF_IF"},{SPECIAL_TOKEN, "("},{NON_TERMINAL, "BOOLEAN_EXPRESSION"},{SPECIAL_TOKEN, ")"},{SEMANTIC_RULE, "@JZ"},{SPECIAL_TOKEN, "{"},{NON_TERMINAL, "S"},{SPECIAL_TOKEN, "}"},{NON_TERMINAL, "ELSIF_STATEMENT"},{NON_TERMINAL, "ELSE_STATEMENT"},{SEMANTIC_RULE, "@END_OF_IF"},{NON_TERMINAL, "END_OF_IF"}}, - {{KEYWORD, "elsif"},{SEMANTIC_RULE, "@JMP_TO_END_AND_JZCOMPLETED"},{SPECIAL_TOKEN, "("},{NON_TERMINAL, "BOOLEAN_EXPRESSION"},{SPECIAL_TOKEN, ")"},{SEMANTIC_RULE, "@JZ"},{SPECIAL_TOKEN, "{"},{NON_TERMINAL, "S"},{SPECIAL_TOKEN, "}"},{NON_TERMINAL, "ELSIF_STATEMENT"}}, + {{KEYWORD, "if"},{SEMANTIC_RULE, "@START_OF_IF"},{SPECIAL_TOKEN, "("},{NON_TERMINAL, "BOOLEAN_EXPRESSION"},{SPECIAL_TOKEN, ")"},{SEMANTIC_RULE, "@JZ"},{SPECIAL_TOKEN, "{"},{NON_TERMINAL, "S2"},{SPECIAL_TOKEN, "}"},{NON_TERMINAL, "ELSIF_STATEMENT"},{NON_TERMINAL, "ELSE_STATEMENT"},{SEMANTIC_RULE, "@END_OF_IF"},{NON_TERMINAL, "END_OF_IF"}}, + {{KEYWORD, "elsif"},{SEMANTIC_RULE, "@JMP_TO_END_AND_JZCOMPLETED"},{SPECIAL_TOKEN, "("},{NON_TERMINAL, "BOOLEAN_EXPRESSION"},{SPECIAL_TOKEN, ")"},{SEMANTIC_RULE, "@JZ"},{SPECIAL_TOKEN, "{"},{NON_TERMINAL, "S2"},{SPECIAL_TOKEN, "}"},{NON_TERMINAL, "ELSIF_STATEMENT"}}, {{SEMANTIC_RULE, "@JMP_TO_END_AND_JZCOMPLETED"},{NON_TERMINAL, "ELSIF_STATEMENT'"}}, {{EPSILON, "eps"}}, - {{KEYWORD, "else"},{SPECIAL_TOKEN, "{"},{NON_TERMINAL, "S"},{SPECIAL_TOKEN, "}"}}, + {{KEYWORD, "else"},{SPECIAL_TOKEN, "{"},{NON_TERMINAL, "S2"},{SPECIAL_TOKEN, "}"}}, {{EPSILON, "eps"}}, {{EPSILON, "eps"}}, - {{KEYWORD, "while"},{SEMANTIC_RULE, "@START_OF_WHILE"},{SPECIAL_TOKEN, "("},{NON_TERMINAL, "BOOLEAN_EXPRESSION"},{SPECIAL_TOKEN, ")"},{SEMANTIC_RULE, "@START_OF_WHILE_COMMANDS"},{SPECIAL_TOKEN, "{"},{NON_TERMINAL, "S"},{SEMANTIC_RULE, "@END_OF_WHILE"},{SPECIAL_TOKEN, "}"}}, - {{KEYWORD, "do"},{SEMANTIC_RULE, "@START_OF_DO_WHILE"},{SPECIAL_TOKEN, "{"},{NON_TERMINAL, "S"},{SPECIAL_TOKEN, "}"},{KEYWORD, "while"},{SPECIAL_TOKEN, "("},{NON_TERMINAL, "BOOLEAN_EXPRESSION"},{SPECIAL_TOKEN, ")"},{SEMANTIC_RULE, "@END_OF_DO_WHILE"},{SPECIAL_TOKEN, ";"}}, - {{KEYWORD, "for"},{SPECIAL_TOKEN, "("},{NON_TERMINAL, "SIMPLE_ASSIGNMENT"},{SPECIAL_TOKEN, ";"},{SEMANTIC_RULE, "@START_OF_FOR"},{NON_TERMINAL, "BOOLEAN_EXPRESSION"},{SPECIAL_TOKEN, ";"},{SEMANTIC_RULE, "@FOR_INC_DEC"},{NON_TERMINAL, "INC_DEC"},{SPECIAL_TOKEN, ")"},{SPECIAL_TOKEN, "{"},{SEMANTIC_RULE, "@START_OF_FOR_COMMANDS"},{NON_TERMINAL, "S"},{SEMANTIC_RULE, "@END_OF_FOR"},{SPECIAL_TOKEN, "}"}}, + {{KEYWORD, "while"},{SEMANTIC_RULE, "@START_OF_WHILE"},{SPECIAL_TOKEN, "("},{NON_TERMINAL, "BOOLEAN_EXPRESSION"},{SPECIAL_TOKEN, ")"},{SEMANTIC_RULE, "@START_OF_WHILE_COMMANDS"},{SPECIAL_TOKEN, "{"},{NON_TERMINAL, "S2"},{SEMANTIC_RULE, "@END_OF_WHILE"},{SPECIAL_TOKEN, "}"}}, + {{KEYWORD, "do"},{SEMANTIC_RULE, "@START_OF_DO_WHILE"},{SPECIAL_TOKEN, "{"},{NON_TERMINAL, "S2"},{SPECIAL_TOKEN, "}"},{KEYWORD, "while"},{SPECIAL_TOKEN, "("},{NON_TERMINAL, "BOOLEAN_EXPRESSION"},{SPECIAL_TOKEN, ")"},{SEMANTIC_RULE, "@END_OF_DO_WHILE"},{SPECIAL_TOKEN, ";"}}, + {{KEYWORD, "for"},{SPECIAL_TOKEN, "("},{NON_TERMINAL, "SIMPLE_ASSIGNMENT"},{SPECIAL_TOKEN, ";"},{SEMANTIC_RULE, "@START_OF_FOR"},{NON_TERMINAL, "BOOLEAN_EXPRESSION"},{SPECIAL_TOKEN, ";"},{SEMANTIC_RULE, "@FOR_INC_DEC"},{NON_TERMINAL, "INC_DEC"},{SPECIAL_TOKEN, ")"},{SPECIAL_TOKEN, "{"},{SEMANTIC_RULE, "@START_OF_FOR_COMMANDS"},{NON_TERMINAL, "S2"},{SEMANTIC_RULE, "@END_OF_FOR"},{SPECIAL_TOKEN, "}"}}, + {{NON_TERMINAL, "VARIABLE_TYPE1"},{NON_TERMINAL, "VARIABLE_TYPE2"},{NON_TERMINAL, "L_VALUE"},{SPECIAL_TOKEN, "="},{NON_TERMINAL, "EXPRESSION"},{SEMANTIC_RULE, "@MOV"},{NON_TERMINAL, "SIMPLE_ASSIGNMENT'"}}, {{NON_TERMINAL, "L_VALUE"},{SPECIAL_TOKEN, "="},{NON_TERMINAL, "EXPRESSION"},{SEMANTIC_RULE, "@MOV"},{NON_TERMINAL, "SIMPLE_ASSIGNMENT'"}}, {{EPSILON, "eps"}}, {{EPSILON, "eps"}}, @@ -302,9 +385,9 @@ const struct _TOKEN Rhs[RULES_COUNT][MAX_RHS_LEN]= {{KEYWORD, "wcslen"},{SPECIAL_TOKEN, "("},{NON_TERMINAL, "WstringNumber"},{SEMANTIC_RULE, "@WCSLEN"},{SPECIAL_TOKEN, ")"}}, {{KEYWORD, "wcscmp"},{SPECIAL_TOKEN, "("},{NON_TERMINAL, "WstringNumber"},{SPECIAL_TOKEN, ","},{NON_TERMINAL, "WstringNumber"},{SEMANTIC_RULE, "@WCSCMP"},{SPECIAL_TOKEN, ")"}}, {{SPECIAL_TOKEN, "("},{NON_TERMINAL, "EXPRESSION"},{SPECIAL_TOKEN, ")"}}, - {{SEMANTIC_RULE, "@PUSH"},{REGISTER, "_register"}}, - {{SEMANTIC_RULE, "@PUSH"},{LOCAL_ID, "_local_id"}}, - {{SEMANTIC_RULE, "@PUSH"},{GLOBAL_ID, "_global_id"}}, + {{NON_TERMINAL, "L_VALUE"},{NON_TERMINAL, "E13"}}, + {{EPSILON, "eps"}}, + {{SEMANTIC_RULE, "@CALL_USER_DEFINED_FUNCTION"},{SPECIAL_TOKEN, "("},{NON_TERMINAL, "CALL_USER_DEFINED_FUNCTION_PARAMETER"},{SPECIAL_TOKEN, ")"},{SEMANTIC_RULE, "@END_OF_CALLING_USER_DEFINED_FUNCTION_WITH_RETURNING_VALUE"}}, {{SEMANTIC_RULE, "@PUSH"},{HEX, "_hex"}}, {{SEMANTIC_RULE, "@PUSH"},{DECIMAL, "_decimal"}}, {{SEMANTIC_RULE, "@PUSH"},{OCTAL, "_octal"}}, @@ -320,6 +403,7 @@ const struct _TOKEN Rhs[RULES_COUNT][MAX_RHS_LEN]= {{SEMANTIC_RULE, "@PUSH"},{GLOBAL_ID, "_global_id"}}, {{SEMANTIC_RULE, "@PUSH"},{LOCAL_ID, "_local_id"}}, {{SEMANTIC_RULE, "@PUSH"},{REGISTER, "_register"}}, + {{SEMANTIC_RULE, "@PUSH"},{FUNCTION_PARAMETER_ID, "_function_parameter_id"}}, {{NON_TERMINAL, "EXPRESSION"}}, {{NON_TERMINAL, "STRING"}}, {{NON_TERMINAL, "EXPRESSION"}}, @@ -338,7 +422,47 @@ const unsigned int RhsSize[RULES_COUNT]= 2, 3, 3, +1, 2, +4, +1, +1, +1, +1, +1, +2, +2, +3, +3, +7, +3, +2, +2, +2, +2, +2, +2, +2, +2, +2, +2, +2, +2, +1, +1, +4, +4, +8, +1, +5, +6, +1, +2, +6, +1, +3, +4, +1, 2, 2, 3, @@ -404,6 +528,7 @@ const unsigned int RhsSize[RULES_COUNT]= 10, 11, 15, +7, 5, 1, 1, @@ -466,8 +591,8 @@ const unsigned int RhsSize[RULES_COUNT]= 7, 3, 2, -2, -2, +1, +5, 2, 2, 2, @@ -483,6 +608,7 @@ const unsigned int RhsSize[RULES_COUNT]= 2, 2, 2, +2, 1, 1, 1, @@ -490,177 +616,223 @@ const unsigned int RhsSize[RULES_COUNT]= }; const char* NoneTerminalMap[NONETERMINAL_COUNT]= { -"E4'", -"INC_DEC'", -"WSTRING", -"E1", -"E3", -"EXPRESSION", -"E3'", -"BOOLEAN_EXPRESSION", -"L_VALUE", -"E5'", -"FOR_STATEMENT", -"INC_DEC", -"DO_WHILE_STATEMENT", -"VA", -"END_OF_IF", -"STATEMENT", -"SIMPLE_ASSIGNMENT'", -"E2'", -"E4", -"STRING", -"WstringNumber", -"E0'", "ELSE_STATEMENT", -"ELSIF_STATEMENT'", -"E1'", +"WstringNumber", +"INC_DEC", "SIMPLE_ASSIGNMENT", -"IF_STATEMENT", -"CALL_FUNC_STATEMENT", +"VA", +"L_VALUE", +"VARIABLE_TYPE2", +"EXPRESSION", +"E4", +"FOR_STATEMENT", "E2", +"ELSIF_STATEMENT'", +"IF_STATEMENT", +"VARIABLE_TYPE6", +"E13", +"VARIABLE_TYPE5", +"E1'", +"END_OF_IF", +"E3", +"VARIABLE_TYPE4", +"CALL_USER_DEFINED_FUNCTION_PARAMETER2", +"DO_WHILE_STATEMENT", +"RETURN", +"STRING", +"WSTRING", +"E5'", "E5", -"ASSIGNMENT_STATEMENT'", +"StringNumber", +"VARIABLE_TYPE1", "E12", -"ASSIGNMENT_STATEMENT", -"S", +"INC_DEC'", +"CALL_FUNC_STATEMENT", +"SIMPLE_ASSIGNMENT'", +"E3'", +"E2'", +"E1", +"STATEMENT", "ELSIF_STATEMENT", +"S2", +"ASSIGNMENT_STATEMENT'", +"CALL_USER_DEFINED_FUNCTION_PARAMETER", +"STATEMENT2", +"S", +"BOOLEAN_EXPRESSION", +"E4'", +"VARIABLE_TYPE3", "WHILE_STATEMENT", -"StringNumber" +"L_VALUE2", +"E0'" }; const char* TerminalMap[TERMINAL_COUNT]= { -"_wstring", -"continue", -"event_trace_step_in", +"flush", +"char", +"physical_to_virtual", +"else", +"dq", +"spinlock_unlock", +"check_address", +"wcscmp", "formats", -"(", -"eq", -"interlocked_decrement", -"printf", -"*", -"event_trace_instrumentation_step", "do", -"=", -"_hex", -"ed", -"^", -"wcslen", -"dw", -"_octal", -"+", -"eb", -"event_trace_step", -"_global_id", +"_decimal", +"continue", +"~", +"memcpy", +"_binary", +"eq", +"unsigned", +"hi", "spinlock_lock_custom_wait", "event_trace_instrumentation_step_in", -"event_enable", -"++", -"_register", -"<<", -"event_inject_error_code", -"event_trace_step_out", -"{", -"else", -"interlocked_exchange", -"_pseudo_register", -"spinlock_unlock", -"_local_id", -"strlen", -"poi", -"interlocked_increment", -"not", -";", -"neg", -"event_clear", -"event_inject", -"memcmp", -"spinlock_lock", -"flush", -"--", -"strcmp", -"%", -"_string", -"db", -"wcscmp", -"/", -"while", -"hi", -"break", -"|", -"check_address", -"dq", -"test_statement", -"_binary", -"event_disable", -"disassemble_len", -"memcpy", -"physical_to_virtual", -"interlocked_compare_exchange", -"print", -"reference", -"interlocked_exchange_add", -"-", -"disassemble_len32", -"elsif", -"event_sc", "dd", +"bool", +"(", +"short", +"++", +"*", +"break", +"^", +"_function_parameter_id", "low", -"if", -"&", -"$", -"~", -"virtual_to_physical", -"}", -"_decimal", -">>", -"pause", -"for", +";", +"int", ")", +"print", +"$", +"while", +"disassemble_len32", +"--", +"neg", +">>", +"not", +"event_inject", +"reference", +"-", +"event_trace_step", +"event_trace_instrumentation_step", +"event_enable", +"return", +"_octal", +"interlocked_compare_exchange", +"}", +"if", +"event_inject_error_code", +"_global_id", +"db", +"for", +"|", +"_hex", +"pause", +"double", +"signed", +"interlocked_increment", +"&", +"printf", +"eb", +"test_statement", +"_wstring", +"virtual_to_physical", +"event_trace_step_out", +"spinlock_lock", +",", +"ed", +"long", +"interlocked_exchange", +"dw", +"strcmp", +"<<", +"_pseudo_register", +"%", +"{", +"void", +"interlocked_exchange_add", +"poi", +"elsif", +"_string", +"memcmp", +"wcslen", +"/", +"_register", +"event_clear", "disassemble_len64", -"," +"strlen", +"interlocked_decrement", +"=", +"+", +"disassemble_len", +"event_trace_step_in", +"_local_id", +"float", +"event_sc", +"event_disable" }; const int ParseTable[NONETERMINAL_COUNT][TERMINAL_COUNT]= { - {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,102 ,-999 ,-999 ,-999 ,100 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,102 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,102 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,102 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,101 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,102 ,-999 ,-999 ,-999 ,-999 ,-999 ,102 ,-999 ,-999 ,102 ,-999 ,102 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,83 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,81 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,82 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,84 ,-999 ,-999 }, - {152 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,89 ,89 ,89 ,-999 ,89 ,-999 ,-999 ,-999 ,89 ,89 ,-999 ,89 ,89 ,89 ,89 ,89 ,-999 ,89 ,-999 ,-999 ,-999 ,-999 ,89 ,-999 ,-999 ,-999 ,-999 ,-999 ,89 ,89 ,-999 ,89 ,89 ,89 ,89 ,89 ,-999 ,89 ,-999 ,-999 ,89 ,-999 ,-999 ,-999 ,89 ,-999 ,-999 ,89 ,89 ,-999 ,-999 ,89 ,-999 ,-999 ,89 ,89 ,-999 ,89 ,-999 ,89 ,-999 ,89 ,89 ,-999 ,89 ,89 ,89 ,89 ,-999 ,-999 ,89 ,89 ,-999 ,89 ,-999 ,89 ,89 ,-999 ,89 ,-999 ,-999 ,-999 ,-999 ,89 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,95 ,95 ,95 ,-999 ,95 ,-999 ,-999 ,-999 ,95 ,95 ,-999 ,95 ,95 ,95 ,95 ,95 ,-999 ,95 ,-999 ,-999 ,-999 ,-999 ,95 ,-999 ,-999 ,-999 ,-999 ,-999 ,95 ,95 ,-999 ,95 ,95 ,95 ,95 ,95 ,-999 ,95 ,-999 ,-999 ,95 ,-999 ,-999 ,-999 ,95 ,-999 ,-999 ,95 ,95 ,-999 ,-999 ,95 ,-999 ,-999 ,95 ,95 ,-999 ,95 ,-999 ,95 ,-999 ,95 ,95 ,-999 ,95 ,95 ,95 ,95 ,-999 ,-999 ,95 ,95 ,-999 ,95 ,-999 ,95 ,95 ,-999 ,95 ,-999 ,-999 ,-999 ,-999 ,95 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,86 ,86 ,86 ,-999 ,86 ,-999 ,-999 ,-999 ,86 ,86 ,-999 ,86 ,86 ,86 ,86 ,86 ,-999 ,86 ,-999 ,-999 ,-999 ,-999 ,86 ,-999 ,-999 ,-999 ,-999 ,-999 ,86 ,86 ,-999 ,86 ,86 ,86 ,86 ,86 ,-999 ,86 ,-999 ,-999 ,86 ,-999 ,-999 ,-999 ,86 ,-999 ,-999 ,86 ,86 ,-999 ,-999 ,86 ,-999 ,-999 ,86 ,86 ,-999 ,86 ,-999 ,86 ,-999 ,86 ,86 ,-999 ,86 ,86 ,86 ,86 ,-999 ,-999 ,86 ,86 ,-999 ,86 ,-999 ,86 ,86 ,-999 ,86 ,-999 ,-999 ,-999 ,-999 ,86 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,98 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,97 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,98 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,98 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,98 ,-999 ,-999 ,-999 ,-999 ,-999 ,96 ,-999 ,-999 ,98 ,-999 ,98 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,85 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,85 ,-999 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,153 ,-999 ,-999 ,-999 ,-999 ,155 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,154 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,106 ,-999 ,-999 ,-999 ,-999 ,-999 ,107 ,-999 ,-999 ,-999 ,107 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,107 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,107 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,105 ,-999 ,-999 ,-999 ,104 ,-999 ,-999 ,-999 ,107 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,107 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,107 ,-999 ,-999 ,-999 ,-999 ,-999 ,107 ,-999 ,-999 ,107 ,-999 ,107 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,76 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,80 ,-999 ,-999 ,-999 ,-999 ,80 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,80 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,75 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,66 ,-999 ,65 }, - {-999 ,73 ,73 ,73 ,-999 ,73 ,73 ,73 ,-999 ,73 ,73 ,-999 ,-999 ,73 ,-999 ,73 ,73 ,-999 ,-999 ,73 ,73 ,73 ,73 ,73 ,73 ,-999 ,73 ,-999 ,73 ,73 ,73 ,-999 ,73 ,-999 ,73 ,73 ,73 ,73 ,73 ,73 ,-999 ,73 ,73 ,73 ,73 ,73 ,73 ,-999 ,73 ,-999 ,-999 ,73 ,73 ,-999 ,73 ,73 ,73 ,-999 ,73 ,73 ,73 ,-999 ,73 ,73 ,73 ,73 ,73 ,73 ,73 ,73 ,-999 ,73 ,-999 ,73 ,73 ,73 ,73 ,-999 ,73 ,-999 ,73 ,73 ,-999 ,-999 ,73 ,73 ,-999 ,73 ,-999 }, - {-999 ,10 ,8 ,8 ,-999 ,8 ,8 ,8 ,-999 ,8 ,5 ,-999 ,-999 ,8 ,-999 ,8 ,8 ,-999 ,-999 ,8 ,8 ,7 ,8 ,8 ,8 ,-999 ,7 ,-999 ,8 ,8 ,-999 ,-999 ,8 ,-999 ,8 ,7 ,8 ,8 ,8 ,8 ,-999 ,8 ,8 ,8 ,8 ,8 ,8 ,-999 ,8 ,-999 ,-999 ,8 ,8 ,-999 ,4 ,8 ,9 ,-999 ,8 ,8 ,8 ,-999 ,8 ,8 ,8 ,8 ,8 ,8 ,8 ,8 ,-999 ,8 ,-999 ,8 ,8 ,8 ,3 ,-999 ,-999 ,-999 ,8 ,-999 ,-999 ,-999 ,8 ,6 ,-999 ,8 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,79 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,79 ,-999 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,94 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,94 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,94 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,93 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,94 ,-999 ,94 }, - {-999 ,-999 ,-999 ,-999 ,99 ,99 ,99 ,-999 ,99 ,-999 ,-999 ,-999 ,99 ,99 ,-999 ,99 ,99 ,99 ,99 ,99 ,-999 ,99 ,-999 ,-999 ,-999 ,-999 ,99 ,-999 ,-999 ,-999 ,-999 ,-999 ,99 ,99 ,-999 ,99 ,99 ,99 ,99 ,99 ,-999 ,99 ,-999 ,-999 ,99 ,-999 ,-999 ,-999 ,99 ,-999 ,-999 ,99 ,99 ,-999 ,-999 ,99 ,-999 ,-999 ,99 ,99 ,-999 ,99 ,-999 ,99 ,-999 ,99 ,99 ,-999 ,99 ,99 ,99 ,99 ,-999 ,-999 ,99 ,99 ,-999 ,99 ,-999 ,99 ,99 ,-999 ,99 ,-999 ,-999 ,-999 ,-999 ,99 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,151 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, - {159 ,-999 ,-999 ,-999 ,158 ,158 ,158 ,-999 ,158 ,-999 ,-999 ,-999 ,158 ,158 ,-999 ,158 ,158 ,158 ,158 ,158 ,-999 ,158 ,-999 ,-999 ,-999 ,-999 ,158 ,-999 ,-999 ,-999 ,-999 ,-999 ,158 ,158 ,-999 ,158 ,158 ,158 ,158 ,158 ,-999 ,158 ,-999 ,-999 ,158 ,-999 ,-999 ,-999 ,158 ,-999 ,-999 ,158 ,158 ,-999 ,-999 ,158 ,-999 ,-999 ,158 ,158 ,-999 ,158 ,-999 ,158 ,-999 ,158 ,158 ,-999 ,158 ,158 ,158 ,158 ,-999 ,-999 ,158 ,158 ,-999 ,158 ,-999 ,158 ,158 ,-999 ,158 ,-999 ,-999 ,-999 ,-999 ,158 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,88 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,87 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,88 ,-999 ,88 }, - {-999 ,72 ,72 ,72 ,-999 ,72 ,72 ,72 ,-999 ,72 ,72 ,-999 ,-999 ,72 ,-999 ,72 ,72 ,-999 ,-999 ,72 ,72 ,72 ,72 ,72 ,72 ,-999 ,72 ,-999 ,72 ,72 ,72 ,71 ,72 ,-999 ,72 ,72 ,72 ,72 ,72 ,72 ,-999 ,72 ,72 ,72 ,72 ,72 ,72 ,-999 ,72 ,-999 ,-999 ,72 ,72 ,-999 ,72 ,72 ,72 ,-999 ,72 ,72 ,72 ,-999 ,72 ,72 ,72 ,72 ,72 ,72 ,72 ,72 ,-999 ,72 ,-999 ,72 ,72 ,72 ,72 ,-999 ,72 ,-999 ,72 ,72 ,-999 ,-999 ,72 ,72 ,-999 ,72 ,-999 }, - {-999 ,70 ,70 ,70 ,-999 ,70 ,70 ,70 ,-999 ,70 ,70 ,-999 ,-999 ,70 ,-999 ,70 ,70 ,-999 ,-999 ,70 ,70 ,70 ,70 ,70 ,70 ,-999 ,70 ,-999 ,70 ,70 ,70 ,70 ,70 ,-999 ,70 ,70 ,70 ,70 ,70 ,70 ,-999 ,70 ,70 ,70 ,70 ,70 ,70 ,-999 ,70 ,-999 ,-999 ,70 ,70 ,-999 ,70 ,70 ,70 ,-999 ,70 ,70 ,70 ,-999 ,70 ,70 ,70 ,70 ,70 ,70 ,70 ,70 ,-999 ,70 ,-999 ,70 ,70 ,70 ,70 ,-999 ,70 ,-999 ,70 ,70 ,-999 ,-999 ,70 ,70 ,-999 ,70 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,90 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,91 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,91 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,91 ,-999 ,91 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,77 ,-999 ,-999 ,-999 ,-999 ,77 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,77 ,-999 ,-999 ,-999 ,-999 ,78 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,67 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,28 ,16 ,-999 ,54 ,48 ,24 ,-999 ,30 ,-999 ,-999 ,-999 ,52 ,-999 ,61 ,37 ,-999 ,-999 ,53 ,27 ,-999 ,32 ,31 ,17 ,-999 ,-999 ,-999 ,63 ,29 ,-999 ,-999 ,55 ,-999 ,22 ,-999 ,58 ,34 ,47 ,42 ,-999 ,39 ,19 ,33 ,60 ,21 ,26 ,-999 ,59 ,-999 ,-999 ,35 ,62 ,-999 ,-999 ,40 ,-999 ,-999 ,43 ,38 ,20 ,-999 ,18 ,44 ,64 ,50 ,57 ,15 ,49 ,56 ,-999 ,45 ,-999 ,23 ,36 ,41 ,-999 ,-999 ,-999 ,-999 ,51 ,-999 ,-999 ,-999 ,25 ,-999 ,-999 ,46 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,92 ,92 ,92 ,-999 ,92 ,-999 ,-999 ,-999 ,92 ,92 ,-999 ,92 ,92 ,92 ,92 ,92 ,-999 ,92 ,-999 ,-999 ,-999 ,-999 ,92 ,-999 ,-999 ,-999 ,-999 ,-999 ,92 ,92 ,-999 ,92 ,92 ,92 ,92 ,92 ,-999 ,92 ,-999 ,-999 ,92 ,-999 ,-999 ,-999 ,92 ,-999 ,-999 ,92 ,92 ,-999 ,-999 ,92 ,-999 ,-999 ,92 ,92 ,-999 ,92 ,-999 ,92 ,-999 ,92 ,92 ,-999 ,92 ,92 ,92 ,92 ,-999 ,-999 ,92 ,92 ,-999 ,92 ,-999 ,92 ,92 ,-999 ,92 ,-999 ,-999 ,-999 ,-999 ,92 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,103 ,103 ,103 ,-999 ,103 ,-999 ,-999 ,-999 ,103 ,103 ,-999 ,103 ,103 ,103 ,103 ,103 ,-999 ,103 ,-999 ,-999 ,-999 ,-999 ,103 ,-999 ,-999 ,-999 ,-999 ,-999 ,103 ,103 ,-999 ,103 ,103 ,103 ,103 ,103 ,-999 ,103 ,-999 ,-999 ,103 ,-999 ,-999 ,-999 ,103 ,-999 ,-999 ,103 ,103 ,-999 ,-999 ,103 ,-999 ,-999 ,103 ,103 ,-999 ,103 ,-999 ,103 ,-999 ,103 ,103 ,-999 ,103 ,103 ,103 ,103 ,-999 ,-999 ,103 ,103 ,-999 ,103 ,-999 ,103 ,103 ,-999 ,103 ,-999 ,-999 ,-999 ,-999 ,103 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,14 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,12 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,13 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,137 ,128 ,122 ,-999 ,149 ,-999 ,-999 ,-999 ,141 ,126 ,-999 ,135 ,111 ,143 ,147 ,127 ,-999 ,140 ,-999 ,-999 ,-999 ,-999 ,138 ,-999 ,-999 ,-999 ,-999 ,-999 ,129 ,145 ,-999 ,139 ,132 ,108 ,121 ,116 ,-999 ,113 ,-999 ,-999 ,134 ,-999 ,-999 ,-999 ,133 ,-999 ,-999 ,109 ,136 ,-999 ,-999 ,114 ,-999 ,-999 ,117 ,112 ,-999 ,144 ,-999 ,118 ,-999 ,124 ,131 ,-999 ,123 ,130 ,146 ,119 ,-999 ,-999 ,110 ,115 ,-999 ,150 ,-999 ,148 ,125 ,-999 ,142 ,-999 ,-999 ,-999 ,-999 ,120 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,11 ,-999 ,-999 ,-999 ,-999 ,11 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,11 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, - {-999 ,0 ,0 ,0 ,-999 ,0 ,0 ,0 ,-999 ,0 ,0 ,-999 ,-999 ,0 ,-999 ,0 ,0 ,-999 ,-999 ,0 ,0 ,0 ,0 ,0 ,0 ,-999 ,0 ,-999 ,0 ,0 ,1 ,-999 ,0 ,-999 ,0 ,0 ,0 ,0 ,0 ,0 ,-999 ,0 ,0 ,0 ,0 ,0 ,0 ,-999 ,0 ,-999 ,-999 ,0 ,0 ,-999 ,0 ,0 ,0 ,-999 ,0 ,0 ,0 ,-999 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,-999 ,0 ,-999 ,0 ,0 ,0 ,0 ,-999 ,2 ,-999 ,0 ,2 ,-999 ,-999 ,0 ,0 ,-999 ,0 ,-999 }, - {-999 ,69 ,69 ,69 ,-999 ,69 ,69 ,69 ,-999 ,69 ,69 ,-999 ,-999 ,69 ,-999 ,69 ,69 ,-999 ,-999 ,69 ,69 ,69 ,69 ,69 ,69 ,-999 ,69 ,-999 ,69 ,69 ,69 ,69 ,69 ,-999 ,69 ,69 ,69 ,69 ,69 ,69 ,-999 ,69 ,69 ,69 ,69 ,69 ,69 ,-999 ,69 ,-999 ,-999 ,69 ,69 ,-999 ,69 ,69 ,69 ,-999 ,69 ,69 ,69 ,-999 ,69 ,69 ,69 ,69 ,69 ,69 ,69 ,69 ,-999 ,69 ,68 ,69 ,69 ,69 ,69 ,-999 ,69 ,-999 ,69 ,69 ,-999 ,-999 ,69 ,69 ,-999 ,69 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,74 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,156 ,156 ,156 ,-999 ,156 ,-999 ,-999 ,-999 ,156 ,156 ,-999 ,156 ,156 ,156 ,156 ,156 ,-999 ,156 ,-999 ,-999 ,-999 ,-999 ,156 ,-999 ,-999 ,-999 ,-999 ,-999 ,156 ,156 ,-999 ,156 ,156 ,156 ,156 ,156 ,-999 ,156 ,-999 ,-999 ,156 ,-999 ,-999 ,-999 ,156 ,-999 ,157 ,156 ,156 ,-999 ,-999 ,156 ,-999 ,-999 ,156 ,156 ,-999 ,156 ,-999 ,156 ,-999 ,156 ,156 ,-999 ,156 ,156 ,156 ,156 ,-999 ,-999 ,156 ,156 ,-999 ,156 ,-999 ,156 ,156 ,-999 ,156 ,-999 ,-999 ,-999 ,-999 ,156 ,-999 } + {112 ,112 ,112 ,111 ,112 ,112 ,112 ,112 ,112 ,112 ,-999 ,112 ,-999 ,112 ,-999 ,112 ,112 ,112 ,112 ,112 ,112 ,112 ,-999 ,112 ,-999 ,-999 ,112 ,-999 ,112 ,112 ,-999 ,112 ,-999 ,112 ,112 ,112 ,112 ,-999 ,112 ,-999 ,112 ,112 ,112 ,-999 ,112 ,112 ,112 ,112 ,-999 ,112 ,112 ,112 ,112 ,112 ,112 ,112 ,-999 ,-999 ,112 ,112 ,112 ,112 ,-999 ,112 ,112 ,112 ,-999 ,112 ,112 ,112 ,-999 ,112 ,112 ,112 ,112 ,112 ,-999 ,-999 ,-999 ,112 ,112 ,112 ,112 ,-999 ,-999 ,112 ,112 ,-999 ,112 ,112 ,112 ,112 ,112 ,-999 ,-999 ,112 ,112 ,112 ,112 ,112 ,112 }, + {-999 ,-999 ,200 ,-999 ,200 ,-999 ,200 ,200 ,-999 ,-999 ,200 ,-999 ,200 ,-999 ,200 ,200 ,-999 ,200 ,-999 ,-999 ,200 ,-999 ,200 ,-999 ,-999 ,200 ,-999 ,-999 ,200 ,200 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,200 ,-999 ,200 ,-999 ,200 ,-999 ,200 ,200 ,-999 ,-999 ,-999 ,-999 ,200 ,200 ,-999 ,-999 ,-999 ,200 ,200 ,-999 ,-999 ,200 ,-999 ,-999 ,-999 ,200 ,200 ,-999 ,200 ,-999 ,201 ,200 ,-999 ,-999 ,-999 ,200 ,-999 ,200 ,200 ,200 ,-999 ,200 ,-999 ,-999 ,-999 ,200 ,200 ,-999 ,-999 ,200 ,200 ,-999 ,200 ,-999 ,200 ,200 ,200 ,-999 ,200 ,200 ,-999 ,200 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,121 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,121 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,121 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,121 ,-999 ,-999 ,-999 }, + {-999 ,117 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,117 ,-999 ,-999 ,-999 ,-999 ,117 ,-999 ,117 ,-999 ,-999 ,-999 ,-999 ,118 ,-999 ,119 ,117 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,118 ,-999 ,-999 ,-999 ,-999 ,-999 ,117 ,117 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,117 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,117 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,118 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,118 ,117 ,-999 ,-999 }, + {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,106 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,105 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,197 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,194 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,196 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,195 ,-999 ,-999 ,-999 }, + {-999 ,37 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,37 ,-999 ,-999 ,-999 ,-999 ,37 ,-999 ,37 ,-999 ,-999 ,-999 ,-999 ,38 ,-999 ,-999 ,37 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,38 ,-999 ,-999 ,-999 ,-999 ,-999 ,37 ,37 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,37 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,37 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,38 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,38 ,37 ,-999 ,-999 }, + {-999 ,-999 ,127 ,-999 ,127 ,-999 ,127 ,127 ,-999 ,-999 ,127 ,-999 ,127 ,-999 ,127 ,127 ,-999 ,127 ,-999 ,-999 ,127 ,-999 ,127 ,-999 ,-999 ,127 ,-999 ,-999 ,127 ,127 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,127 ,-999 ,127 ,-999 ,127 ,-999 ,127 ,127 ,-999 ,-999 ,-999 ,-999 ,127 ,127 ,-999 ,-999 ,-999 ,127 ,127 ,-999 ,-999 ,127 ,-999 ,-999 ,-999 ,127 ,127 ,-999 ,127 ,-999 ,-999 ,127 ,-999 ,-999 ,-999 ,127 ,-999 ,127 ,127 ,127 ,-999 ,127 ,-999 ,-999 ,-999 ,127 ,127 ,-999 ,-999 ,127 ,127 ,-999 ,127 ,-999 ,127 ,127 ,127 ,-999 ,127 ,127 ,-999 ,127 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,140 ,-999 ,140 ,-999 ,140 ,140 ,-999 ,-999 ,140 ,-999 ,140 ,-999 ,140 ,140 ,-999 ,140 ,-999 ,-999 ,140 ,-999 ,140 ,-999 ,-999 ,140 ,-999 ,-999 ,140 ,140 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,140 ,-999 ,140 ,-999 ,140 ,-999 ,140 ,140 ,-999 ,-999 ,-999 ,-999 ,140 ,140 ,-999 ,-999 ,-999 ,140 ,140 ,-999 ,-999 ,140 ,-999 ,-999 ,-999 ,140 ,140 ,-999 ,140 ,-999 ,-999 ,140 ,-999 ,-999 ,-999 ,140 ,-999 ,140 ,140 ,140 ,-999 ,140 ,-999 ,-999 ,-999 ,140 ,140 ,-999 ,-999 ,140 ,140 ,-999 ,140 ,-999 ,140 ,140 ,140 ,-999 ,140 ,140 ,-999 ,140 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,116 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,133 ,-999 ,133 ,-999 ,133 ,133 ,-999 ,-999 ,133 ,-999 ,133 ,-999 ,133 ,133 ,-999 ,133 ,-999 ,-999 ,133 ,-999 ,133 ,-999 ,-999 ,133 ,-999 ,-999 ,133 ,133 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,133 ,-999 ,133 ,-999 ,133 ,-999 ,133 ,133 ,-999 ,-999 ,-999 ,-999 ,133 ,133 ,-999 ,-999 ,-999 ,133 ,133 ,-999 ,-999 ,133 ,-999 ,-999 ,-999 ,133 ,133 ,-999 ,133 ,-999 ,-999 ,133 ,-999 ,-999 ,-999 ,133 ,-999 ,133 ,133 ,133 ,-999 ,133 ,-999 ,-999 ,-999 ,133 ,133 ,-999 ,-999 ,133 ,133 ,-999 ,133 ,-999 ,133 ,133 ,133 ,-999 ,133 ,133 ,-999 ,133 ,-999 ,-999 ,-999 }, + {110 ,110 ,110 ,110 ,110 ,110 ,110 ,110 ,110 ,110 ,-999 ,110 ,-999 ,110 ,-999 ,110 ,110 ,110 ,110 ,110 ,110 ,110 ,-999 ,110 ,-999 ,-999 ,110 ,-999 ,110 ,110 ,-999 ,110 ,-999 ,110 ,110 ,110 ,110 ,-999 ,110 ,-999 ,110 ,110 ,110 ,-999 ,110 ,110 ,110 ,110 ,-999 ,110 ,110 ,110 ,110 ,110 ,110 ,110 ,-999 ,-999 ,110 ,110 ,110 ,110 ,-999 ,110 ,110 ,110 ,-999 ,110 ,110 ,110 ,-999 ,110 ,110 ,110 ,110 ,110 ,-999 ,-999 ,-999 ,110 ,110 ,110 ,110 ,-999 ,-999 ,110 ,110 ,-999 ,110 ,110 ,110 ,110 ,110 ,-999 ,-999 ,110 ,110 ,110 ,110 ,110 ,110 }, + {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,107 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,45 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,44 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,181 ,-999 ,-999 ,180 ,-999 ,180 ,-999 ,-999 ,180 ,-999 ,180 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,180 ,-999 ,-999 ,-999 ,180 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,180 ,-999 ,-999 ,-999 ,-999 ,-999 ,180 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,180 ,-999 ,-999 ,-999 ,-999 ,-999 ,180 ,-999 ,180 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,180 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,180 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,43 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,43 ,-999 ,-999 ,-999 ,-999 ,43 ,-999 ,43 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,43 ,42 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,43 ,43 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,43 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,43 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,43 ,-999 ,-999 }, + {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,131 ,-999 ,-999 ,132 ,-999 ,132 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,132 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,132 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {113 ,113 ,113 ,-999 ,113 ,113 ,113 ,113 ,113 ,113 ,-999 ,113 ,-999 ,113 ,-999 ,113 ,113 ,113 ,113 ,113 ,113 ,113 ,-999 ,113 ,-999 ,-999 ,113 ,-999 ,113 ,113 ,-999 ,113 ,-999 ,113 ,113 ,113 ,113 ,-999 ,113 ,-999 ,113 ,113 ,113 ,-999 ,113 ,113 ,113 ,113 ,-999 ,113 ,113 ,113 ,113 ,113 ,113 ,113 ,-999 ,-999 ,113 ,113 ,113 ,113 ,-999 ,113 ,113 ,113 ,-999 ,113 ,113 ,113 ,-999 ,113 ,113 ,113 ,113 ,113 ,-999 ,-999 ,-999 ,113 ,113 ,113 ,113 ,-999 ,-999 ,113 ,113 ,-999 ,113 ,113 ,113 ,113 ,113 ,-999 ,-999 ,113 ,113 ,113 ,113 ,113 ,113 }, + {-999 ,-999 ,136 ,-999 ,136 ,-999 ,136 ,136 ,-999 ,-999 ,136 ,-999 ,136 ,-999 ,136 ,136 ,-999 ,136 ,-999 ,-999 ,136 ,-999 ,136 ,-999 ,-999 ,136 ,-999 ,-999 ,136 ,136 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,136 ,-999 ,136 ,-999 ,136 ,-999 ,136 ,136 ,-999 ,-999 ,-999 ,-999 ,136 ,136 ,-999 ,-999 ,-999 ,136 ,136 ,-999 ,-999 ,136 ,-999 ,-999 ,-999 ,136 ,136 ,-999 ,136 ,-999 ,-999 ,136 ,-999 ,-999 ,-999 ,136 ,-999 ,136 ,136 ,136 ,-999 ,136 ,-999 ,-999 ,-999 ,136 ,136 ,-999 ,-999 ,136 ,136 ,-999 ,136 ,-999 ,136 ,136 ,136 ,-999 ,136 ,136 ,-999 ,136 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,41 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,40 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,51 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,50 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,115 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,26 ,-999 ,26 ,-999 ,26 ,26 ,-999 ,-999 ,26 ,-999 ,26 ,-999 ,26 ,26 ,-999 ,26 ,-999 ,-999 ,26 ,-999 ,26 ,-999 ,-999 ,26 ,-999 ,-999 ,26 ,26 ,25 ,-999 ,-999 ,-999 ,-999 ,-999 ,26 ,-999 ,26 ,-999 ,26 ,-999 ,26 ,26 ,-999 ,-999 ,-999 ,-999 ,26 ,26 ,-999 ,-999 ,-999 ,26 ,26 ,-999 ,-999 ,26 ,-999 ,-999 ,-999 ,26 ,26 ,-999 ,26 ,-999 ,-999 ,26 ,-999 ,-999 ,-999 ,26 ,-999 ,26 ,26 ,26 ,-999 ,26 ,-999 ,-999 ,-999 ,26 ,26 ,-999 ,-999 ,26 ,26 ,-999 ,26 ,-999 ,26 ,26 ,26 ,-999 ,26 ,26 ,-999 ,26 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,192 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,193 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,147 ,-999 ,148 ,-999 ,-999 ,148 ,-999 ,148 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,148 ,-999 ,-999 ,-999 ,148 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,148 ,-999 ,-999 ,-999 ,-999 ,-999 ,148 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,148 ,-999 ,-999 ,-999 ,-999 ,-999 ,148 ,-999 ,146 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,145 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,148 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,144 ,-999 ,144 ,-999 ,144 ,144 ,-999 ,-999 ,144 ,-999 ,144 ,-999 ,144 ,144 ,-999 ,144 ,-999 ,-999 ,144 ,-999 ,144 ,-999 ,-999 ,144 ,-999 ,-999 ,144 ,144 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,144 ,-999 ,144 ,-999 ,144 ,-999 ,144 ,144 ,-999 ,-999 ,-999 ,-999 ,144 ,144 ,-999 ,-999 ,-999 ,144 ,144 ,-999 ,-999 ,144 ,-999 ,-999 ,-999 ,144 ,144 ,-999 ,144 ,-999 ,-999 ,144 ,-999 ,-999 ,-999 ,144 ,-999 ,144 ,144 ,144 ,-999 ,144 ,-999 ,-999 ,-999 ,144 ,144 ,-999 ,-999 ,144 ,144 ,-999 ,144 ,-999 ,144 ,144 ,144 ,-999 ,144 ,144 ,-999 ,144 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,198 ,-999 ,198 ,-999 ,198 ,198 ,-999 ,-999 ,198 ,-999 ,198 ,-999 ,198 ,198 ,-999 ,198 ,-999 ,-999 ,198 ,-999 ,198 ,-999 ,-999 ,198 ,-999 ,-999 ,198 ,198 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,198 ,-999 ,198 ,-999 ,198 ,-999 ,198 ,198 ,-999 ,-999 ,-999 ,-999 ,198 ,198 ,-999 ,-999 ,-999 ,198 ,198 ,-999 ,-999 ,198 ,-999 ,-999 ,-999 ,198 ,198 ,-999 ,198 ,-999 ,-999 ,198 ,-999 ,-999 ,-999 ,198 ,-999 ,198 ,198 ,198 ,-999 ,198 ,-999 ,-999 ,-999 ,198 ,198 ,-999 ,199 ,198 ,198 ,-999 ,198 ,-999 ,198 ,198 ,198 ,-999 ,198 ,198 ,-999 ,198 ,-999 ,-999 ,-999 }, + {-999 ,29 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,33 ,-999 ,-999 ,-999 ,-999 ,28 ,-999 ,30 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,31 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,36 ,34 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,32 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,27 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,35 ,-999 ,-999 }, + {-999 ,-999 ,165 ,-999 ,153 ,-999 ,158 ,177 ,-999 ,-999 ,183 ,-999 ,189 ,-999 ,185 ,169 ,-999 ,155 ,-999 ,-999 ,151 ,-999 ,178 ,-999 ,-999 ,190 ,-999 ,-999 ,179 ,156 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,160 ,-999 ,154 ,-999 ,157 ,-999 ,164 ,187 ,-999 ,-999 ,-999 ,-999 ,184 ,172 ,-999 ,-999 ,-999 ,179 ,150 ,-999 ,-999 ,182 ,-999 ,-999 ,-999 ,162 ,191 ,-999 ,168 ,-999 ,-999 ,166 ,-999 ,-999 ,-999 ,167 ,-999 ,170 ,152 ,174 ,-999 ,186 ,-999 ,-999 ,-999 ,171 ,149 ,-999 ,-999 ,175 ,176 ,-999 ,179 ,-999 ,161 ,173 ,163 ,-999 ,188 ,159 ,-999 ,179 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,122 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,125 ,-999 ,-999 ,-999 ,-999 ,123 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,124 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {66 ,-999 ,90 ,-999 ,78 ,62 ,83 ,102 ,56 ,-999 ,-999 ,-999 ,-999 ,104 ,-999 ,94 ,-999 ,80 ,72 ,71 ,76 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,81 ,-999 ,-999 ,-999 ,55 ,-999 ,-999 ,85 ,-999 ,79 ,-999 ,82 ,73 ,89 ,-999 ,67 ,70 ,57 ,-999 ,-999 ,97 ,-999 ,-999 ,103 ,-999 ,75 ,-999 ,-999 ,-999 ,65 ,-999 ,-999 ,87 ,-999 ,64 ,93 ,60 ,-999 ,91 ,69 ,61 ,-999 ,92 ,-999 ,95 ,77 ,99 ,-999 ,-999 ,-999 ,-999 ,-999 ,96 ,74 ,-999 ,-999 ,100 ,101 ,-999 ,-999 ,59 ,86 ,98 ,88 ,-999 ,-999 ,84 ,68 ,-999 ,-999 ,63 ,58 }, + {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,120 ,-999 ,120 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,139 ,-999 ,-999 ,139 ,-999 ,139 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,137 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,139 ,-999 ,-999 ,-999 ,-999 ,-999 ,139 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,139 ,-999 ,-999 ,-999 ,-999 ,-999 ,138 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,135 ,-999 ,-999 ,135 ,-999 ,135 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,135 ,-999 ,-999 ,-999 ,-999 ,-999 ,134 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,135 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,130 ,-999 ,130 ,-999 ,130 ,130 ,-999 ,-999 ,130 ,-999 ,130 ,-999 ,130 ,130 ,-999 ,130 ,-999 ,-999 ,130 ,-999 ,130 ,-999 ,-999 ,130 ,-999 ,-999 ,130 ,130 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,130 ,-999 ,130 ,-999 ,130 ,-999 ,130 ,130 ,-999 ,-999 ,-999 ,-999 ,130 ,130 ,-999 ,-999 ,-999 ,130 ,130 ,-999 ,-999 ,130 ,-999 ,-999 ,-999 ,130 ,130 ,-999 ,130 ,-999 ,-999 ,130 ,-999 ,-999 ,-999 ,130 ,-999 ,130 ,130 ,130 ,-999 ,130 ,-999 ,-999 ,-999 ,130 ,130 ,-999 ,-999 ,130 ,130 ,-999 ,130 ,-999 ,130 ,130 ,130 ,-999 ,130 ,130 ,-999 ,130 ,-999 ,-999 ,-999 }, + {8 ,11 ,8 ,-999 ,8 ,8 ,8 ,8 ,8 ,5 ,-999 ,10 ,-999 ,8 ,-999 ,8 ,11 ,8 ,8 ,8 ,8 ,11 ,-999 ,11 ,-999 ,-999 ,9 ,-999 ,7 ,8 ,-999 ,11 ,-999 ,8 ,-999 ,4 ,8 ,-999 ,8 ,-999 ,8 ,8 ,8 ,-999 ,8 ,8 ,8 ,-999 ,-999 ,8 ,-999 ,3 ,8 ,7 ,8 ,6 ,-999 ,-999 ,8 ,11 ,11 ,8 ,-999 ,8 ,8 ,8 ,-999 ,8 ,8 ,8 ,-999 ,8 ,11 ,8 ,8 ,8 ,-999 ,-999 ,-999 ,-999 ,11 ,8 ,8 ,-999 ,-999 ,8 ,8 ,-999 ,7 ,8 ,8 ,8 ,8 ,-999 ,-999 ,8 ,8 ,7 ,11 ,8 ,8 }, + {109 ,109 ,109 ,109 ,109 ,109 ,109 ,109 ,109 ,109 ,-999 ,109 ,-999 ,109 ,-999 ,109 ,109 ,109 ,109 ,109 ,109 ,109 ,-999 ,109 ,-999 ,-999 ,109 ,-999 ,109 ,109 ,-999 ,109 ,-999 ,109 ,109 ,109 ,109 ,-999 ,109 ,-999 ,109 ,109 ,109 ,-999 ,109 ,109 ,109 ,109 ,-999 ,109 ,109 ,109 ,109 ,109 ,109 ,109 ,-999 ,-999 ,109 ,109 ,109 ,109 ,-999 ,109 ,109 ,109 ,-999 ,109 ,109 ,109 ,-999 ,109 ,109 ,109 ,109 ,109 ,-999 ,-999 ,-999 ,109 ,109 ,109 ,109 ,108 ,-999 ,109 ,109 ,-999 ,109 ,109 ,109 ,109 ,109 ,-999 ,-999 ,109 ,109 ,109 ,109 ,109 ,109 }, + {12 ,12 ,12 ,-999 ,12 ,12 ,12 ,12 ,12 ,12 ,-999 ,12 ,-999 ,12 ,-999 ,12 ,12 ,12 ,12 ,12 ,12 ,12 ,-999 ,12 ,-999 ,-999 ,12 ,-999 ,12 ,12 ,-999 ,12 ,-999 ,12 ,-999 ,12 ,12 ,-999 ,12 ,-999 ,12 ,12 ,12 ,-999 ,12 ,12 ,12 ,12 ,-999 ,12 ,14 ,12 ,12 ,12 ,12 ,12 ,-999 ,-999 ,12 ,12 ,12 ,12 ,-999 ,12 ,12 ,12 ,-999 ,12 ,12 ,12 ,-999 ,12 ,12 ,12 ,12 ,12 ,-999 ,-999 ,-999 ,13 ,12 ,12 ,12 ,-999 ,-999 ,12 ,12 ,-999 ,12 ,12 ,12 ,12 ,12 ,-999 ,-999 ,12 ,12 ,12 ,12 ,12 ,12 }, + {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,52 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,53 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,54 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,49 ,-999 ,49 ,-999 ,49 ,49 ,-999 ,-999 ,49 ,-999 ,49 ,-999 ,49 ,49 ,-999 ,49 ,-999 ,-999 ,49 ,-999 ,49 ,-999 ,-999 ,49 ,-999 ,-999 ,49 ,49 ,-999 ,-999 ,48 ,-999 ,-999 ,-999 ,49 ,-999 ,49 ,-999 ,49 ,-999 ,49 ,49 ,-999 ,-999 ,-999 ,-999 ,49 ,49 ,-999 ,-999 ,-999 ,49 ,49 ,-999 ,-999 ,49 ,-999 ,-999 ,-999 ,49 ,49 ,-999 ,49 ,-999 ,-999 ,49 ,-999 ,-999 ,-999 ,49 ,-999 ,49 ,49 ,49 ,-999 ,49 ,-999 ,-999 ,-999 ,49 ,49 ,-999 ,-999 ,49 ,49 ,-999 ,49 ,-999 ,49 ,49 ,49 ,-999 ,49 ,49 ,-999 ,49 ,-999 ,-999 ,-999 }, + {20 ,23 ,20 ,-999 ,20 ,20 ,20 ,20 ,20 ,17 ,-999 ,22 ,-999 ,20 ,-999 ,20 ,23 ,20 ,20 ,20 ,20 ,23 ,-999 ,23 ,-999 ,-999 ,21 ,-999 ,19 ,20 ,-999 ,23 ,-999 ,20 ,-999 ,16 ,20 ,-999 ,20 ,-999 ,20 ,20 ,20 ,-999 ,20 ,20 ,20 ,24 ,-999 ,20 ,-999 ,15 ,20 ,19 ,20 ,18 ,-999 ,-999 ,20 ,23 ,23 ,20 ,-999 ,20 ,20 ,20 ,-999 ,20 ,20 ,20 ,-999 ,20 ,23 ,20 ,20 ,20 ,-999 ,-999 ,-999 ,-999 ,23 ,20 ,20 ,-999 ,-999 ,20 ,20 ,-999 ,19 ,20 ,20 ,20 ,20 ,-999 ,-999 ,20 ,20 ,19 ,23 ,20 ,20 }, + {0 ,0 ,0 ,-999 ,0 ,0 ,0 ,0 ,0 ,0 ,-999 ,0 ,-999 ,0 ,-999 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,-999 ,0 ,-999 ,-999 ,0 ,-999 ,0 ,0 ,-999 ,0 ,-999 ,0 ,2 ,0 ,0 ,-999 ,0 ,-999 ,0 ,0 ,0 ,-999 ,0 ,0 ,0 ,-999 ,-999 ,0 ,2 ,0 ,0 ,0 ,0 ,0 ,-999 ,-999 ,0 ,0 ,0 ,0 ,-999 ,0 ,0 ,0 ,-999 ,0 ,0 ,0 ,-999 ,0 ,0 ,0 ,0 ,0 ,-999 ,-999 ,-999 ,1 ,0 ,0 ,0 ,-999 ,-999 ,0 ,0 ,-999 ,0 ,0 ,0 ,0 ,0 ,-999 ,-999 ,0 ,0 ,0 ,0 ,0 ,0 }, + {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,126 ,-999 ,126 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,143 ,-999 ,-999 ,143 ,-999 ,143 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,143 ,-999 ,-999 ,-999 ,142 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,143 ,-999 ,-999 ,-999 ,-999 ,-999 ,143 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,143 ,-999 ,-999 ,-999 ,-999 ,-999 ,143 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,141 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,39 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,39 ,-999 ,-999 ,-999 ,-999 ,39 ,-999 ,39 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,39 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,39 ,39 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,39 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,39 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,39 ,-999 ,-999 }, + {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,114 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,47 ,-999 ,46 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,46 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,46 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,129 ,-999 ,129 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,128 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,129 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 } }; const char* KeywordList[]= { +"void", +"bool", +"char", +"short", +"int", +"long", +"unsigned", +"signed", +"float", +"double", "print", "formats", "event_enable", @@ -841,6 +1013,18 @@ const char* ZeroOpFunc1[] = { const char* VarArgFunc1[] = { "@PRINTF" }; +const char* VARIABLETYPE[] = { +"@VOID", +"@BOOL", +"@CHAR", +"@SHORT", +"@INT", +"@LONG", +"@UNSIGNED", +"@SIGNED", +"@FLOAT", +"@DOUBLE", +}; const SYMBOL_MAP SemanticRulesMapList[]= { {"@INC", FUNC_INC}, {"@DEC", FUNC_DEC}, @@ -881,6 +1065,25 @@ const SYMBOL_MAP SemanticRulesMapList[]= { {"@START_OF_FOR_OMMANDS", FUNC_START_OF_FOR_OMMANDS}, {"@END_OF_IF", FUNC_END_OF_IF}, {"@IGNORE_LVALUE", FUNC_IGNORE_LVALUE}, +{"@END_OF_USER_DEFINED_FUNCTION", FUNC_END_OF_USER_DEFINED_FUNCTION}, +{"@RETURN_OF_USER_DEFINED_FUNCTION_WITH_VALUE", FUNC_RETURN_OF_USER_DEFINED_FUNCTION_WITH_VALUE}, +{"@RETURN_OF_USER_DEFINED_FUNCTION_WITHOUT_VALUE", FUNC_RETURN_OF_USER_DEFINED_FUNCTION_WITHOUT_VALUE}, +{"@CALL_USER_DEFINED_FUNCTION_PARAMETER", FUNC_CALL_USER_DEFINED_FUNCTION_PARAMETER}, +{"@END_OF_CALLING_USER_DEFINED_FUNCTION_WITHOUT_RETURNING_VALUE", FUNC_END_OF_CALLING_USER_DEFINED_FUNCTION_WITHOUT_RETURNING_VALUE}, +{"@END_OF_CALLING_USER_DEFINED_FUNCTION_WITH_RETURNING_VALUE", FUNC_END_OF_CALLING_USER_DEFINED_FUNCTION_WITH_RETURNING_VALUE}, +{"@CALL_USER_DEFINED_FUNCTION", FUNC_CALL_USER_DEFINED_FUNCTION}, +{"@START_OF_USER_DEFINED_FUNCTION", FUNC_START_OF_USER_DEFINED_FUNCTION}, +{"@MOV_RETURN_VALUE", FUNC_MOV_RETURN_VALUE}, +{"@VOID", FUNC_VOID}, +{"@BOOL", FUNC_BOOL}, +{"@CHAR", FUNC_CHAR}, +{"@SHORT", FUNC_SHORT}, +{"@INT", FUNC_INT}, +{"@LONG", FUNC_LONG}, +{"@UNSIGNED", FUNC_UNSIGNED}, +{"@SIGNED", FUNC_SIGNED}, +{"@FLOAT", FUNC_FLOAT}, +{"@DOUBLE", FUNC_DOUBLE}, {"@PRINT", FUNC_PRINT}, {"@FORMATS", FUNC_FORMATS}, {"@EVENT_ENABLE", FUNC_EVENT_ENABLE}, @@ -1179,6 +1382,7 @@ const struct _TOKEN LalrLhs[RULES_COUNT]= {NON_TERMINAL, "E12"}, {NON_TERMINAL, "E12"}, {NON_TERMINAL, "E12"}, + {NON_TERMINAL, "E12"}, {NON_TERMINAL, "STRING"}, {NON_TERMINAL, "WSTRING"}, {NON_TERMINAL, "StringNumber"}, @@ -1261,6 +1465,7 @@ const struct _TOKEN LalrRhs[RULES_COUNT][MAX_RHS_LEN]= {{REGISTER, "_register"},{SEMANTIC_RULE, "@PUSH"}}, {{GLOBAL_ID, "_global_id"},{SEMANTIC_RULE, "@PUSH"}}, {{LOCAL_ID, "_local_id"},{SEMANTIC_RULE, "@PUSH"}}, + {{FUNCTION_PARAMETER_ID, "_function_parameter_id"},{SEMANTIC_RULE, "@PUSH"}}, {{HEX, "_hex"},{SEMANTIC_RULE, "@PUSH"}}, {{DECIMAL, "_decimal"},{SEMANTIC_RULE, "@PUSH"}}, {{OCTAL, "_octal"},{SEMANTIC_RULE, "@PUSH"}}, @@ -1355,6 +1560,7 @@ const unsigned int LalrRhsSize[RULES_COUNT]= 2, 2, 2, +2, 1, 1, 1, @@ -1362,94 +1568,95 @@ const unsigned int LalrRhsSize[RULES_COUNT]= }; const char* LalrNoneTerminalMap[NONETERMINAL_COUNT]= { -"B1", -"WSTRING", -"E3", -"BE", -"E10", -"B3", -"B2", -"B5", -"E4", -"STRING", "WstringNumber", -"CMP", -"E12", -"B4", -"EXP", -"E5", -"S", +"B3", "B6", -"StringNumber" +"E4", +"B4", +"E3", +"B2", +"CMP", +"WSTRING", +"E5", +"StringNumber", +"E12", +"E10", +"B1", +"S", +"B5", +"STRING", +"EXP", +"BE" }; const char* LalrTerminalMap[TERMINAL_COUNT]= { -"_wstring", -"interlocked_increment", -"reference", -"not", -"neg", -"<", -"eb", -"interlocked_exchange_add", -"memcmp", -"-", +"&&", +"interlocked_compare_exchange", +"physical_to_virtual", +"^", +"<<", "||", -"disassemble_len32", -"(", +"%", +"_global_id", +"_pseudo_register", +"dq", ">=", -"dd", +"db", +"check_address", +"wcscmp", +"interlocked_exchange_add", +"|", +"_decimal", +"_hex", +"_function_parameter_id", "low", +")", +"~", +"poi", +"_string", +"memcmp", +"/", +"wcslen", +"&", +"interlocked_increment", +"_binary", +"$", +"_register", +"!=", +"strlen", +"disassemble_len64", +"eb", "eq", "interlocked_decrement", -"strcmp", -"_global_id", -"!=", -"*", -"&", -"$", -"%", -"~", -"_string", -">", -"db", -"_hex", -"wcscmp", -"_register", -"virtual_to_physical", -"<<", -"ed", -"_decimal", -"^", -"/", -">>", -"interlocked_exchange", -"|", +"_wstring", "hi", -"==", -"&&", -"dq", -"check_address", -"_pseudo_register", -"_binary", -"wcslen", -"disassemble_len", -"strlen", -"<=", -"_local_id", -"dw", -")", -"disassemble_len64", -"physical_to_virtual", -"poi", -"interlocked_compare_exchange", -"_octal", +"disassemble_len32", +"virtual_to_physical", +"neg", +"dd", +">>", "+", -"," +"not", +"disassemble_len", +"_local_id", +"(", +"*", +"reference", +"-", +"<=", +",", +">", +"<", +"ed", +"==", +"interlocked_exchange", +"_octal", +"dw", +"strcmp" }; const int LalrGotoTable[LALR_STATE_COUNT][LALR_NONTERMINAL_COUNT]= { - {3 ,-999 ,11 ,2 ,14 ,5 ,4 ,7 ,12 ,-999 ,-999 ,9 ,15 ,6 ,10 ,13 ,1 ,8 ,-999 }, + {-999 ,5 ,8 ,12 ,6 ,11 ,4 ,9 ,-999 ,13 ,-999 ,15 ,14 ,3 ,1 ,7 ,-999 ,10 ,2 }, {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, @@ -1473,11 +1680,17 @@ const int LalrGotoTable[LALR_STATE_COUNT][LALR_NONTERMINAL_COUNT]= {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,84 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,86 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,89 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,90 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,92 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,5 ,8 ,12 ,6 ,11 ,4 ,9 ,-999 ,13 ,-999 ,15 ,14 ,3 ,-999 ,7 ,-999 ,10 ,93 }, {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, @@ -1507,44 +1720,36 @@ const int LalrGotoTable[LALR_STATE_COUNT][LALR_NONTERMINAL_COUNT]= {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,111 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,11 ,-999 ,14 ,5 ,112 ,7 ,12 ,-999 ,-999 ,9 ,15 ,6 ,10 ,13 ,-999 ,8 ,-999 }, - {-999 ,-999 ,11 ,-999 ,14 ,113 ,-999 ,7 ,12 ,-999 ,-999 ,9 ,15 ,6 ,10 ,13 ,-999 ,8 ,-999 }, - {-999 ,-999 ,11 ,-999 ,14 ,-999 ,-999 ,7 ,12 ,-999 ,-999 ,9 ,15 ,114 ,10 ,13 ,-999 ,8 ,-999 }, - {-999 ,-999 ,11 ,-999 ,14 ,-999 ,-999 ,115 ,12 ,-999 ,-999 ,9 ,15 ,-999 ,10 ,13 ,-999 ,8 ,-999 }, - {-999 ,-999 ,11 ,-999 ,14 ,-999 ,-999 ,-999 ,12 ,-999 ,-999 ,9 ,15 ,-999 ,10 ,13 ,-999 ,116 ,-999 }, - {-999 ,-999 ,11 ,-999 ,14 ,-999 ,-999 ,-999 ,12 ,-999 ,-999 ,-999 ,15 ,-999 ,117 ,13 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,11 ,-999 ,14 ,-999 ,-999 ,-999 ,12 ,-999 ,-999 ,-999 ,15 ,-999 ,118 ,13 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,11 ,-999 ,14 ,-999 ,-999 ,-999 ,12 ,-999 ,-999 ,-999 ,15 ,-999 ,119 ,13 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,11 ,-999 ,14 ,-999 ,-999 ,-999 ,12 ,-999 ,-999 ,-999 ,15 ,-999 ,120 ,13 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,11 ,-999 ,14 ,-999 ,-999 ,-999 ,12 ,-999 ,-999 ,-999 ,15 ,-999 ,121 ,13 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,11 ,-999 ,14 ,-999 ,-999 ,-999 ,12 ,-999 ,-999 ,-999 ,15 ,-999 ,122 ,13 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,14 ,-999 ,-999 ,-999 ,123 ,-999 ,-999 ,-999 ,15 ,-999 ,-999 ,13 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,14 ,-999 ,-999 ,-999 ,124 ,-999 ,-999 ,-999 ,15 ,-999 ,-999 ,13 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,14 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,15 ,-999 ,-999 ,125 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,14 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,15 ,-999 ,-999 ,126 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,127 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,15 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,128 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,15 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,129 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,15 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,11 ,-999 ,14 ,-999 ,-999 ,-999 ,12 ,132 ,-999 ,-999 ,15 ,-999 ,131 ,13 ,-999 ,-999 ,133 }, - {-999 ,136 ,11 ,-999 ,14 ,-999 ,-999 ,-999 ,12 ,-999 ,137 ,-999 ,15 ,-999 ,135 ,13 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,11 ,-999 ,14 ,-999 ,-999 ,-999 ,12 ,-999 ,-999 ,-999 ,15 ,-999 ,139 ,13 ,-999 ,-999 ,-999 }, - {-999 ,136 ,11 ,-999 ,14 ,-999 ,-999 ,-999 ,12 ,-999 ,141 ,-999 ,15 ,-999 ,140 ,13 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,11 ,-999 ,14 ,-999 ,-999 ,-999 ,12 ,132 ,-999 ,-999 ,15 ,-999 ,142 ,13 ,-999 ,-999 ,143 }, - {-999 ,-999 ,11 ,-999 ,14 ,-999 ,-999 ,-999 ,12 ,-999 ,-999 ,-999 ,15 ,-999 ,144 ,13 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,11 ,-999 ,14 ,-999 ,-999 ,-999 ,12 ,-999 ,-999 ,-999 ,15 ,-999 ,145 ,13 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,11 ,-999 ,14 ,-999 ,-999 ,-999 ,12 ,-999 ,-999 ,-999 ,15 ,-999 ,146 ,13 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,11 ,-999 ,14 ,-999 ,-999 ,-999 ,12 ,-999 ,-999 ,-999 ,15 ,-999 ,147 ,13 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,11 ,-999 ,14 ,-999 ,-999 ,-999 ,12 ,-999 ,-999 ,-999 ,15 ,-999 ,148 ,13 ,-999 ,-999 ,-999 }, + {-999 ,5 ,8 ,12 ,6 ,11 ,113 ,9 ,-999 ,13 ,-999 ,15 ,14 ,-999 ,-999 ,7 ,-999 ,10 ,-999 }, + {-999 ,114 ,8 ,12 ,6 ,11 ,-999 ,9 ,-999 ,13 ,-999 ,15 ,14 ,-999 ,-999 ,7 ,-999 ,10 ,-999 }, + {-999 ,-999 ,8 ,12 ,115 ,11 ,-999 ,9 ,-999 ,13 ,-999 ,15 ,14 ,-999 ,-999 ,7 ,-999 ,10 ,-999 }, + {-999 ,-999 ,8 ,12 ,-999 ,11 ,-999 ,9 ,-999 ,13 ,-999 ,15 ,14 ,-999 ,-999 ,116 ,-999 ,10 ,-999 }, + {-999 ,-999 ,117 ,12 ,-999 ,11 ,-999 ,9 ,-999 ,13 ,-999 ,15 ,14 ,-999 ,-999 ,-999 ,-999 ,10 ,-999 }, + {-999 ,-999 ,-999 ,12 ,-999 ,11 ,-999 ,-999 ,-999 ,13 ,-999 ,15 ,14 ,-999 ,-999 ,-999 ,-999 ,118 ,-999 }, + {-999 ,-999 ,-999 ,12 ,-999 ,11 ,-999 ,-999 ,-999 ,13 ,-999 ,15 ,14 ,-999 ,-999 ,-999 ,-999 ,119 ,-999 }, + {-999 ,-999 ,-999 ,12 ,-999 ,11 ,-999 ,-999 ,-999 ,13 ,-999 ,15 ,14 ,-999 ,-999 ,-999 ,-999 ,120 ,-999 }, + {-999 ,-999 ,-999 ,12 ,-999 ,11 ,-999 ,-999 ,-999 ,13 ,-999 ,15 ,14 ,-999 ,-999 ,-999 ,-999 ,121 ,-999 }, + {-999 ,-999 ,-999 ,12 ,-999 ,11 ,-999 ,-999 ,-999 ,13 ,-999 ,15 ,14 ,-999 ,-999 ,-999 ,-999 ,122 ,-999 }, + {-999 ,-999 ,-999 ,12 ,-999 ,11 ,-999 ,-999 ,-999 ,13 ,-999 ,15 ,14 ,-999 ,-999 ,-999 ,-999 ,123 ,-999 }, + {-999 ,-999 ,-999 ,124 ,-999 ,-999 ,-999 ,-999 ,-999 ,13 ,-999 ,15 ,14 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,-999 ,125 ,-999 ,-999 ,-999 ,-999 ,-999 ,13 ,-999 ,15 ,14 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,126 ,-999 ,15 ,14 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,127 ,-999 ,15 ,14 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,15 ,128 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,15 ,129 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,15 ,130 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,-999 ,12 ,-999 ,11 ,-999 ,-999 ,-999 ,13 ,133 ,15 ,14 ,-999 ,-999 ,-999 ,132 ,131 ,-999 }, + {-999 ,-999 ,-999 ,12 ,-999 ,11 ,-999 ,-999 ,-999 ,13 ,136 ,15 ,14 ,-999 ,-999 ,-999 ,132 ,135 ,-999 }, + {-999 ,-999 ,-999 ,12 ,-999 ,11 ,-999 ,-999 ,-999 ,13 ,-999 ,15 ,14 ,-999 ,-999 ,-999 ,-999 ,137 ,-999 }, + {-999 ,-999 ,-999 ,12 ,-999 ,11 ,-999 ,-999 ,-999 ,13 ,-999 ,15 ,14 ,-999 ,-999 ,-999 ,-999 ,138 ,-999 }, + {-999 ,-999 ,-999 ,12 ,-999 ,11 ,-999 ,-999 ,-999 ,13 ,-999 ,15 ,14 ,-999 ,-999 ,-999 ,-999 ,139 ,-999 }, + {-999 ,-999 ,-999 ,12 ,-999 ,11 ,-999 ,-999 ,-999 ,13 ,-999 ,15 ,14 ,-999 ,-999 ,-999 ,-999 ,140 ,-999 }, {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,11 ,-999 ,14 ,-999 ,-999 ,-999 ,12 ,-999 ,-999 ,-999 ,15 ,-999 ,149 ,13 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,11 ,-999 ,14 ,-999 ,-999 ,-999 ,12 ,-999 ,-999 ,-999 ,15 ,-999 ,150 ,13 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,11 ,-999 ,14 ,-999 ,-999 ,-999 ,12 ,-999 ,-999 ,-999 ,15 ,-999 ,151 ,13 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,11 ,-999 ,14 ,-999 ,-999 ,-999 ,12 ,-999 ,-999 ,-999 ,15 ,-999 ,152 ,13 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,11 ,-999 ,14 ,-999 ,-999 ,-999 ,12 ,-999 ,-999 ,-999 ,15 ,-999 ,153 ,13 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,11 ,-999 ,14 ,-999 ,-999 ,-999 ,12 ,-999 ,-999 ,-999 ,15 ,-999 ,154 ,13 ,-999 ,-999 ,-999 }, + {143 ,-999 ,-999 ,12 ,-999 ,11 ,-999 ,-999 ,142 ,13 ,-999 ,15 ,14 ,-999 ,-999 ,-999 ,-999 ,141 ,-999 }, {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,-999 ,12 ,-999 ,11 ,-999 ,-999 ,-999 ,13 ,-999 ,15 ,14 ,-999 ,-999 ,-999 ,-999 ,145 ,-999 }, + {-999 ,-999 ,-999 ,12 ,-999 ,11 ,-999 ,-999 ,-999 ,13 ,-999 ,15 ,14 ,-999 ,-999 ,-999 ,-999 ,146 ,-999 }, {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, {-999 ,-999 ,11 ,-999 ,14 ,-999 ,-999 ,-999 ,12 ,-999 ,-999 ,-999 ,15 ,-999 ,155 ,13 ,-999 ,-999 ,-999 }, {-999 ,-999 ,11 ,-999 ,14 ,-999 ,-999 ,-999 ,12 ,-999 ,-999 ,-999 ,15 ,-999 ,156 ,13 ,-999 ,-999 ,-999 }, @@ -1556,12 +1761,28 @@ const int LalrGotoTable[LALR_STATE_COUNT][LALR_NONTERMINAL_COUNT]= {-999 ,-999 ,11 ,-999 ,14 ,-999 ,-999 ,-999 ,12 ,-999 ,-999 ,-999 ,15 ,-999 ,162 ,13 ,-999 ,-999 ,-999 }, {-999 ,-999 ,11 ,-999 ,14 ,-999 ,-999 ,-999 ,12 ,132 ,-999 ,-999 ,15 ,-999 ,142 ,13 ,-999 ,-999 ,163 }, {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,11 ,-999 ,14 ,-999 ,-999 ,-999 ,12 ,-999 ,-999 ,-999 ,15 ,-999 ,164 ,13 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,11 ,-999 ,14 ,-999 ,-999 ,-999 ,12 ,-999 ,-999 ,-999 ,15 ,-999 ,165 ,13 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,11 ,-999 ,14 ,-999 ,-999 ,-999 ,12 ,-999 ,-999 ,-999 ,15 ,-999 ,166 ,13 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,11 ,-999 ,14 ,-999 ,-999 ,-999 ,12 ,-999 ,-999 ,-999 ,15 ,-999 ,167 ,13 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,-999 ,12 ,-999 ,11 ,-999 ,-999 ,-999 ,13 ,-999 ,15 ,14 ,-999 ,-999 ,-999 ,-999 ,147 ,-999 }, + {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,-999 ,12 ,-999 ,11 ,-999 ,-999 ,-999 ,13 ,-999 ,15 ,14 ,-999 ,-999 ,-999 ,-999 ,149 ,-999 }, + {-999 ,-999 ,-999 ,12 ,-999 ,11 ,-999 ,-999 ,-999 ,13 ,-999 ,15 ,14 ,-999 ,-999 ,-999 ,-999 ,150 ,-999 }, + {-999 ,-999 ,-999 ,12 ,-999 ,11 ,-999 ,-999 ,-999 ,13 ,151 ,15 ,14 ,-999 ,-999 ,-999 ,132 ,131 ,-999 }, + {-999 ,-999 ,-999 ,12 ,-999 ,11 ,-999 ,-999 ,-999 ,13 ,-999 ,15 ,14 ,-999 ,-999 ,-999 ,-999 ,152 ,-999 }, + {-999 ,-999 ,-999 ,12 ,-999 ,11 ,-999 ,-999 ,-999 ,13 ,-999 ,15 ,14 ,-999 ,-999 ,-999 ,-999 ,153 ,-999 }, + {-999 ,-999 ,-999 ,12 ,-999 ,11 ,-999 ,-999 ,-999 ,13 ,-999 ,15 ,14 ,-999 ,-999 ,-999 ,-999 ,154 ,-999 }, + {-999 ,-999 ,-999 ,12 ,-999 ,11 ,-999 ,-999 ,-999 ,13 ,-999 ,15 ,14 ,-999 ,-999 ,-999 ,-999 ,155 ,-999 }, + {-999 ,-999 ,-999 ,12 ,-999 ,11 ,-999 ,-999 ,-999 ,13 ,-999 ,15 ,14 ,-999 ,-999 ,-999 ,-999 ,156 ,-999 }, + {-999 ,-999 ,-999 ,12 ,-999 ,11 ,-999 ,-999 ,-999 ,13 ,-999 ,15 ,14 ,-999 ,-999 ,-999 ,-999 ,157 ,-999 }, + {159 ,-999 ,-999 ,12 ,-999 ,11 ,-999 ,-999 ,142 ,13 ,-999 ,15 ,14 ,-999 ,-999 ,-999 ,-999 ,158 ,-999 }, + {-999 ,-999 ,-999 ,12 ,-999 ,11 ,-999 ,-999 ,-999 ,13 ,-999 ,15 ,14 ,-999 ,-999 ,-999 ,-999 ,160 ,-999 }, + {-999 ,-999 ,-999 ,12 ,-999 ,11 ,-999 ,-999 ,-999 ,13 ,-999 ,15 ,14 ,-999 ,-999 ,-999 ,-999 ,161 ,-999 }, + {-999 ,-999 ,-999 ,12 ,-999 ,11 ,-999 ,-999 ,-999 ,13 ,-999 ,15 ,14 ,-999 ,-999 ,-999 ,-999 ,162 ,-999 }, + {-999 ,-999 ,-999 ,12 ,-999 ,11 ,-999 ,-999 ,-999 ,13 ,-999 ,15 ,14 ,-999 ,-999 ,-999 ,-999 ,163 ,-999 }, + {-999 ,-999 ,-999 ,12 ,-999 ,11 ,-999 ,-999 ,-999 ,13 ,-999 ,15 ,14 ,-999 ,-999 ,-999 ,-999 ,164 ,-999 }, + {-999 ,-999 ,-999 ,12 ,-999 ,11 ,-999 ,-999 ,-999 ,13 ,-999 ,15 ,14 ,-999 ,-999 ,-999 ,-999 ,165 ,-999 }, + {-999 ,-999 ,-999 ,12 ,-999 ,11 ,-999 ,-999 ,-999 ,13 ,-999 ,15 ,14 ,-999 ,-999 ,-999 ,-999 ,166 ,-999 }, + {-999 ,-999 ,-999 ,12 ,-999 ,11 ,-999 ,-999 ,-999 ,13 ,-999 ,15 ,14 ,-999 ,-999 ,-999 ,-999 ,167 ,-999 }, + {-999 ,-999 ,-999 ,12 ,-999 ,11 ,-999 ,-999 ,-999 ,13 ,-999 ,15 ,14 ,-999 ,-999 ,-999 ,-999 ,168 ,-999 }, {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, @@ -1618,6 +1839,7 @@ const int LalrGotoTable[LALR_STATE_COUNT][LALR_NONTERMINAL_COUNT]= {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,-999 ,12 ,-999 ,11 ,-999 ,-999 ,-999 ,13 ,201 ,15 ,14 ,-999 ,-999 ,-999 ,132 ,131 ,-999 }, {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, {-999 ,-999 ,11 ,-999 ,14 ,-999 ,-999 ,-999 ,12 ,-999 ,-999 ,-999 ,15 ,-999 ,200 ,13 ,-999 ,-999 ,-999 }, {-999 ,136 ,11 ,-999 ,14 ,-999 ,-999 ,-999 ,12 ,-999 ,202 ,-999 ,15 ,-999 ,201 ,13 ,-999 ,-999 ,-999 }, @@ -1627,28 +1849,32 @@ const int LalrGotoTable[LALR_STATE_COUNT][LALR_NONTERMINAL_COUNT]= {-999 ,-999 ,11 ,-999 ,14 ,-999 ,-999 ,-999 ,12 ,132 ,-999 ,-999 ,15 ,-999 ,142 ,13 ,-999 ,-999 ,203 }, {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,-999 ,12 ,-999 ,11 ,-999 ,-999 ,-999 ,13 ,-999 ,15 ,14 ,-999 ,-999 ,-999 ,-999 ,202 ,-999 }, + {204 ,-999 ,-999 ,12 ,-999 ,11 ,-999 ,-999 ,142 ,13 ,-999 ,15 ,14 ,-999 ,-999 ,-999 ,-999 ,203 ,-999 }, {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,-999 ,12 ,-999 ,11 ,-999 ,-999 ,-999 ,13 ,205 ,15 ,14 ,-999 ,-999 ,-999 ,132 ,131 ,-999 }, {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,11 ,-999 ,14 ,-999 ,-999 ,-999 ,12 ,-999 ,-999 ,-999 ,15 ,-999 ,204 ,13 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,-999 ,12 ,-999 ,11 ,-999 ,-999 ,-999 ,13 ,-999 ,15 ,14 ,-999 ,-999 ,-999 ,-999 ,206 ,-999 }, {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,11 ,-999 ,14 ,-999 ,-999 ,-999 ,12 ,-999 ,-999 ,-999 ,15 ,-999 ,205 ,13 ,-999 ,-999 ,-999 }, {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, {-999 ,-999 ,11 ,-999 ,14 ,-999 ,-999 ,-999 ,12 ,-999 ,-999 ,-999 ,15 ,-999 ,206 ,13 ,-999 ,-999 ,-999 }, {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,-999 ,12 ,-999 ,11 ,-999 ,-999 ,-999 ,13 ,-999 ,15 ,14 ,-999 ,-999 ,-999 ,-999 ,207 ,-999 }, {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,11 ,-999 ,14 ,-999 ,-999 ,-999 ,12 ,-999 ,-999 ,-999 ,15 ,-999 ,207 ,13 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,-999 ,12 ,-999 ,11 ,-999 ,-999 ,-999 ,13 ,-999 ,15 ,14 ,-999 ,-999 ,-999 ,-999 ,208 ,-999 }, + {-999 ,-999 ,-999 ,12 ,-999 ,11 ,-999 ,-999 ,-999 ,13 ,-999 ,15 ,14 ,-999 ,-999 ,-999 ,-999 ,209 ,-999 }, + {-999 ,-999 ,-999 ,12 ,-999 ,11 ,-999 ,-999 ,-999 ,13 ,-999 ,15 ,14 ,-999 ,-999 ,-999 ,-999 ,210 ,-999 }, {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, {-999 ,-999 ,11 ,-999 ,14 ,-999 ,-999 ,-999 ,12 ,132 ,-999 ,-999 ,15 ,-999 ,142 ,13 ,-999 ,-999 ,208 }, {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,11 ,-999 ,14 ,-999 ,-999 ,-999 ,12 ,-999 ,-999 ,-999 ,15 ,-999 ,209 ,13 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,-999 ,12 ,-999 ,11 ,-999 ,-999 ,-999 ,13 ,-999 ,15 ,14 ,-999 ,-999 ,-999 ,-999 ,211 ,-999 }, {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,11 ,-999 ,14 ,-999 ,-999 ,-999 ,12 ,-999 ,-999 ,-999 ,15 ,-999 ,210 ,13 ,-999 ,-999 ,-999 }, {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, @@ -1665,243 +1891,247 @@ const int LalrGotoTable[LALR_STATE_COUNT][LALR_NONTERMINAL_COUNT]= {-999 ,-999 ,11 ,-999 ,14 ,-999 ,-999 ,-999 ,12 ,-999 ,-999 ,-999 ,15 ,-999 ,221 ,13 ,-999 ,-999 ,-999 }, {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,-999 ,12 ,-999 ,11 ,-999 ,-999 ,-999 ,13 ,-999 ,15 ,14 ,-999 ,-999 ,-999 ,-999 ,222 ,-999 }, {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, {-999 ,-999 ,11 ,-999 ,14 ,-999 ,-999 ,-999 ,12 ,-999 ,-999 ,-999 ,15 ,-999 ,222 ,13 ,-999 ,-999 ,-999 }, {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,-999 ,12 ,-999 ,11 ,-999 ,-999 ,-999 ,13 ,-999 ,15 ,14 ,-999 ,-999 ,-999 ,-999 ,223 ,-999 }, + {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 } }; const int LalrActionTable[LALR_STATE_COUNT][LALR_TERMINAL_COUNT]= { - {-999 ,31 ,36 ,34 ,54 ,-999 ,39 ,44 ,22 ,41 ,-999 ,23 ,16 ,-999 ,56 ,50 ,49 ,28 ,52 ,27 ,-999 ,42 ,58 ,-999 ,-999 ,33 ,-999 ,-999 ,35 ,26 ,18 ,24 ,46 ,-999 ,37 ,40 ,-999 ,-999 ,-999 ,55 ,-999 ,43 ,-999 ,-999 ,38 ,45 ,29 ,32 ,21 ,19 ,17 ,-999 ,51 ,30 ,-999 ,25 ,48 ,47 ,57 ,20 ,53 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-1 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,59 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-2 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-2 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-4 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-4 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,60 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-4 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-6 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-6 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,61 ,-999 ,-999 ,-6 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-6 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-8 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-8 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,62 ,-999 ,-999 ,-999 ,-8 ,-999 ,-999 ,-8 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-8 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-10 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,63 ,-10 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-10 ,-999 ,-999 ,-999 ,-10 ,-999 ,-999 ,-10 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-10 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-12 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-12 ,-12 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-12 ,-999 ,-999 ,-999 ,-12 ,-999 ,-999 ,-12 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-12 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,64 ,-999 ,-999 ,-999 ,-999 ,-13 ,-999 ,-999 ,68 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,67 ,-999 ,-13 ,-13 ,-999 ,-999 ,-999 ,65 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-13 ,-999 ,-999 ,-999 ,-13 ,-999 ,69 ,-13 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,66 ,-999 ,-999 ,-13 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-20 ,-999 ,-999 ,-999 ,-999 ,-20 ,-999 ,-999 ,-20 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-20 ,-999 ,-20 ,-20 ,-999 ,-999 ,-999 ,-20 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-20 ,-999 ,-999 ,-999 ,-20 ,-999 ,-20 ,-20 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-20 ,-999 ,-999 ,-20 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-21 ,-999 ,-999 ,-999 ,-999 ,-21 ,-999 ,-999 ,-21 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-21 ,-999 ,-21 ,-21 ,-999 ,-999 ,-999 ,-21 ,-999 ,-999 ,-999 ,-999 ,-999 ,71 ,-999 ,-999 ,-21 ,-999 ,70 ,-999 ,-21 ,-999 ,-21 ,-21 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-21 ,-999 ,-999 ,-21 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-21 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-24 ,-999 ,-999 ,-999 ,72 ,-24 ,-999 ,-999 ,-24 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-24 ,-999 ,-24 ,-24 ,-999 ,-999 ,-999 ,-24 ,-999 ,-999 ,-999 ,-999 ,-999 ,-24 ,-999 ,-999 ,-24 ,-999 ,-24 ,-999 ,-24 ,-999 ,-24 ,-24 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-24 ,-999 ,-999 ,-24 ,-999 ,-999 ,-999 ,-999 ,-999 ,73 ,-24 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-27 ,-999 ,-999 ,-999 ,-27 ,-27 ,-999 ,-999 ,-27 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-27 ,74 ,-27 ,-27 ,76 ,-999 ,-999 ,-27 ,-999 ,-999 ,-999 ,-999 ,-999 ,-27 ,-999 ,-999 ,-27 ,75 ,-27 ,-999 ,-27 ,-999 ,-27 ,-27 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-27 ,-999 ,-999 ,-27 ,-999 ,-999 ,-999 ,-999 ,-999 ,-27 ,-27 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-31 ,-999 ,-999 ,-999 ,-31 ,-31 ,-999 ,-999 ,-31 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-31 ,-31 ,-31 ,-31 ,-31 ,-999 ,-999 ,-31 ,-999 ,-999 ,-999 ,-999 ,-999 ,-31 ,-999 ,-999 ,-31 ,-31 ,-31 ,-999 ,-31 ,-999 ,-31 ,-31 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-31 ,-999 ,-999 ,-31 ,-999 ,-999 ,-999 ,-999 ,-999 ,-31 ,-31 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-32 ,-999 ,-999 ,-999 ,-32 ,-32 ,-999 ,-999 ,-32 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-32 ,-32 ,-32 ,-32 ,-32 ,-999 ,-999 ,-32 ,-999 ,-999 ,-999 ,-999 ,-999 ,-32 ,-999 ,-999 ,-32 ,-32 ,-32 ,-999 ,-32 ,-999 ,-32 ,-32 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-32 ,-999 ,-999 ,-32 ,-999 ,-999 ,-999 ,-999 ,-999 ,-32 ,-32 }, - {-999 ,31 ,36 ,34 ,54 ,-999 ,39 ,44 ,22 ,41 ,-999 ,23 ,16 ,-999 ,56 ,50 ,49 ,28 ,52 ,27 ,-999 ,42 ,58 ,-999 ,-999 ,33 ,-999 ,-999 ,35 ,26 ,18 ,24 ,46 ,-999 ,37 ,40 ,-999 ,-999 ,-999 ,55 ,-999 ,43 ,-999 ,-999 ,38 ,45 ,29 ,32 ,21 ,19 ,17 ,-999 ,51 ,30 ,-999 ,25 ,48 ,47 ,57 ,20 ,53 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,78 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,79 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,80 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-76 ,-999 ,-999 ,-999 ,-76 ,-76 ,-999 ,-999 ,-76 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-76 ,-76 ,-76 ,-76 ,-76 ,-999 ,-999 ,-76 ,-999 ,-999 ,-999 ,-999 ,-999 ,-76 ,-999 ,-999 ,-76 ,-76 ,-76 ,-999 ,-76 ,-999 ,-76 ,-76 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-76 ,-999 ,-999 ,-76 ,-999 ,-999 ,-999 ,-999 ,-999 ,-76 ,-76 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,81 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,82 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,83 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-71 ,-999 ,-999 ,-999 ,-71 ,-71 ,-999 ,-999 ,-71 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-71 ,-71 ,-71 ,-71 ,-71 ,-999 ,-999 ,-71 ,-999 ,-999 ,-999 ,-999 ,-999 ,-71 ,-999 ,-999 ,-71 ,-71 ,-71 ,-999 ,-71 ,-999 ,-71 ,-71 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-71 ,-999 ,-999 ,-71 ,-999 ,-999 ,-999 ,-999 ,-999 ,-71 ,-71 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,84 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-74 ,-999 ,-999 ,-999 ,-74 ,-74 ,-999 ,-999 ,-74 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-74 ,-74 ,-74 ,-74 ,-74 ,-999 ,-999 ,-74 ,-999 ,-999 ,-999 ,-999 ,-999 ,-74 ,-999 ,-999 ,-74 ,-74 ,-74 ,-999 ,-74 ,-999 ,-74 ,-74 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-74 ,-999 ,-999 ,-74 ,-999 ,-999 ,-999 ,-999 ,-999 ,-74 ,-74 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-72 ,-999 ,-999 ,-999 ,-72 ,-72 ,-999 ,-999 ,-72 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-72 ,-72 ,-72 ,-72 ,-72 ,-999 ,-999 ,-72 ,-999 ,-999 ,-999 ,-999 ,-999 ,-72 ,-999 ,-999 ,-72 ,-72 ,-72 ,-999 ,-72 ,-999 ,-72 ,-72 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-72 ,-999 ,-999 ,-72 ,-999 ,-999 ,-999 ,-999 ,-999 ,-72 ,-72 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,85 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-78 ,-999 ,-999 ,-999 ,-78 ,-78 ,-999 ,-999 ,-78 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-78 ,-78 ,-78 ,-78 ,-78 ,-999 ,-999 ,-78 ,-999 ,-999 ,-999 ,-999 ,-999 ,-78 ,-999 ,-999 ,-78 ,-78 ,-78 ,-999 ,-78 ,-999 ,-78 ,-78 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-78 ,-999 ,-999 ,-78 ,-999 ,-999 ,-999 ,-999 ,-999 ,-78 ,-78 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,86 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,87 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-77 ,-999 ,-999 ,-999 ,-77 ,-77 ,-999 ,-999 ,-77 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-77 ,-77 ,-77 ,-77 ,-77 ,-999 ,-999 ,-77 ,-999 ,-999 ,-999 ,-999 ,-999 ,-77 ,-999 ,-999 ,-77 ,-77 ,-77 ,-999 ,-77 ,-999 ,-77 ,-77 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-77 ,-999 ,-999 ,-77 ,-999 ,-999 ,-999 ,-999 ,-999 ,-77 ,-77 }, - {-999 ,31 ,36 ,34 ,54 ,-999 ,39 ,44 ,22 ,-999 ,-999 ,23 ,16 ,-999 ,56 ,50 ,49 ,28 ,52 ,27 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,35 ,26 ,18 ,24 ,46 ,-999 ,37 ,40 ,-999 ,-999 ,-999 ,55 ,-999 ,43 ,-999 ,-999 ,38 ,45 ,29 ,32 ,21 ,19 ,17 ,-999 ,51 ,30 ,-999 ,25 ,48 ,47 ,57 ,20 ,-999 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,89 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,90 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,91 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,92 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,93 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,94 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-75 ,-999 ,-999 ,-999 ,-75 ,-75 ,-999 ,-999 ,-75 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-75 ,-75 ,-75 ,-75 ,-75 ,-999 ,-999 ,-75 ,-999 ,-999 ,-999 ,-999 ,-999 ,-75 ,-999 ,-999 ,-75 ,-75 ,-75 ,-999 ,-75 ,-999 ,-75 ,-75 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-75 ,-999 ,-999 ,-75 ,-999 ,-999 ,-999 ,-999 ,-999 ,-75 ,-75 }, - {-999 ,31 ,36 ,34 ,54 ,-999 ,39 ,44 ,22 ,-999 ,-999 ,23 ,16 ,-999 ,56 ,50 ,49 ,28 ,52 ,27 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,35 ,26 ,18 ,24 ,46 ,-999 ,37 ,40 ,-999 ,-999 ,-999 ,55 ,-999 ,43 ,-999 ,-999 ,38 ,45 ,29 ,32 ,21 ,19 ,17 ,-999 ,51 ,30 ,-999 ,25 ,48 ,47 ,57 ,20 ,-999 ,-999 }, - {-999 ,31 ,36 ,34 ,54 ,-999 ,39 ,44 ,22 ,-999 ,-999 ,23 ,16 ,-999 ,56 ,50 ,49 ,28 ,52 ,27 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,35 ,26 ,18 ,24 ,46 ,-999 ,37 ,40 ,-999 ,-999 ,-999 ,55 ,-999 ,43 ,-999 ,-999 ,38 ,45 ,29 ,32 ,21 ,19 ,17 ,-999 ,51 ,30 ,-999 ,25 ,48 ,47 ,57 ,20 ,-999 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,97 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,98 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,99 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,100 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,101 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,102 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,103 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,104 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-73 ,-999 ,-999 ,-999 ,-73 ,-73 ,-999 ,-999 ,-73 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-73 ,-73 ,-73 ,-73 ,-73 ,-999 ,-999 ,-73 ,-999 ,-999 ,-999 ,-999 ,-999 ,-73 ,-999 ,-999 ,-73 ,-73 ,-73 ,-999 ,-73 ,-999 ,-73 ,-73 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-73 ,-999 ,-999 ,-73 ,-999 ,-999 ,-999 ,-999 ,-999 ,-73 ,-73 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,105 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, - {-999 ,31 ,36 ,34 ,54 ,-999 ,39 ,44 ,22 ,-999 ,-999 ,23 ,16 ,-999 ,56 ,50 ,49 ,28 ,52 ,27 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,35 ,26 ,18 ,24 ,46 ,-999 ,37 ,40 ,-999 ,-999 ,-999 ,55 ,-999 ,43 ,-999 ,-999 ,38 ,45 ,29 ,32 ,21 ,19 ,17 ,-999 ,51 ,30 ,-999 ,25 ,48 ,47 ,57 ,20 ,-999 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,107 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,108 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,109 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,110 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, - {-999 ,31 ,36 ,34 ,54 ,-999 ,39 ,44 ,22 ,-999 ,-999 ,23 ,16 ,-999 ,56 ,50 ,49 ,28 ,52 ,27 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,35 ,26 ,18 ,24 ,46 ,-999 ,37 ,40 ,-999 ,-999 ,-999 ,55 ,-999 ,43 ,-999 ,-999 ,38 ,45 ,29 ,32 ,21 ,19 ,17 ,-999 ,51 ,30 ,-999 ,25 ,48 ,47 ,57 ,20 ,-999 ,-999 }, - {-999 ,31 ,36 ,34 ,54 ,-999 ,39 ,44 ,22 ,41 ,-999 ,23 ,16 ,-999 ,56 ,50 ,49 ,28 ,52 ,27 ,-999 ,42 ,58 ,-999 ,-999 ,33 ,-999 ,-999 ,35 ,26 ,18 ,24 ,46 ,-999 ,37 ,40 ,-999 ,-999 ,-999 ,55 ,-999 ,43 ,-999 ,-999 ,38 ,45 ,29 ,32 ,21 ,19 ,17 ,-999 ,51 ,30 ,-999 ,25 ,48 ,47 ,57 ,20 ,53 ,-999 }, - {-999 ,31 ,36 ,34 ,54 ,-999 ,39 ,44 ,22 ,41 ,-999 ,23 ,16 ,-999 ,56 ,50 ,49 ,28 ,52 ,27 ,-999 ,42 ,58 ,-999 ,-999 ,33 ,-999 ,-999 ,35 ,26 ,18 ,24 ,46 ,-999 ,37 ,40 ,-999 ,-999 ,-999 ,55 ,-999 ,43 ,-999 ,-999 ,38 ,45 ,29 ,32 ,21 ,19 ,17 ,-999 ,51 ,30 ,-999 ,25 ,48 ,47 ,57 ,20 ,53 ,-999 }, - {-999 ,31 ,36 ,34 ,54 ,-999 ,39 ,44 ,22 ,41 ,-999 ,23 ,16 ,-999 ,56 ,50 ,49 ,28 ,52 ,27 ,-999 ,42 ,58 ,-999 ,-999 ,33 ,-999 ,-999 ,35 ,26 ,18 ,24 ,46 ,-999 ,37 ,40 ,-999 ,-999 ,-999 ,55 ,-999 ,43 ,-999 ,-999 ,38 ,45 ,29 ,32 ,21 ,19 ,17 ,-999 ,51 ,30 ,-999 ,25 ,48 ,47 ,57 ,20 ,53 ,-999 }, - {-999 ,31 ,36 ,34 ,54 ,-999 ,39 ,44 ,22 ,41 ,-999 ,23 ,16 ,-999 ,56 ,50 ,49 ,28 ,52 ,27 ,-999 ,42 ,58 ,-999 ,-999 ,33 ,-999 ,-999 ,35 ,26 ,18 ,24 ,46 ,-999 ,37 ,40 ,-999 ,-999 ,-999 ,55 ,-999 ,43 ,-999 ,-999 ,38 ,45 ,29 ,32 ,21 ,19 ,17 ,-999 ,51 ,30 ,-999 ,25 ,48 ,47 ,57 ,20 ,53 ,-999 }, - {-999 ,31 ,36 ,34 ,54 ,-999 ,39 ,44 ,22 ,41 ,-999 ,23 ,16 ,-999 ,56 ,50 ,49 ,28 ,52 ,27 ,-999 ,42 ,58 ,-999 ,-999 ,33 ,-999 ,-999 ,35 ,26 ,18 ,24 ,46 ,-999 ,37 ,40 ,-999 ,-999 ,-999 ,55 ,-999 ,43 ,-999 ,-999 ,38 ,45 ,29 ,32 ,21 ,19 ,17 ,-999 ,51 ,30 ,-999 ,25 ,48 ,47 ,57 ,20 ,53 ,-999 }, - {-999 ,31 ,36 ,34 ,54 ,-999 ,39 ,44 ,22 ,41 ,-999 ,23 ,16 ,-999 ,56 ,50 ,49 ,28 ,52 ,27 ,-999 ,42 ,58 ,-999 ,-999 ,33 ,-999 ,-999 ,35 ,26 ,18 ,24 ,46 ,-999 ,37 ,40 ,-999 ,-999 ,-999 ,55 ,-999 ,43 ,-999 ,-999 ,38 ,45 ,29 ,32 ,21 ,19 ,17 ,-999 ,51 ,30 ,-999 ,25 ,48 ,47 ,57 ,20 ,53 ,-999 }, - {-999 ,31 ,36 ,34 ,54 ,-999 ,39 ,44 ,22 ,41 ,-999 ,23 ,16 ,-999 ,56 ,50 ,49 ,28 ,52 ,27 ,-999 ,42 ,58 ,-999 ,-999 ,33 ,-999 ,-999 ,35 ,26 ,18 ,24 ,46 ,-999 ,37 ,40 ,-999 ,-999 ,-999 ,55 ,-999 ,43 ,-999 ,-999 ,38 ,45 ,29 ,32 ,21 ,19 ,17 ,-999 ,51 ,30 ,-999 ,25 ,48 ,47 ,57 ,20 ,53 ,-999 }, - {-999 ,31 ,36 ,34 ,54 ,-999 ,39 ,44 ,22 ,41 ,-999 ,23 ,16 ,-999 ,56 ,50 ,49 ,28 ,52 ,27 ,-999 ,42 ,58 ,-999 ,-999 ,33 ,-999 ,-999 ,35 ,26 ,18 ,24 ,46 ,-999 ,37 ,40 ,-999 ,-999 ,-999 ,55 ,-999 ,43 ,-999 ,-999 ,38 ,45 ,29 ,32 ,21 ,19 ,17 ,-999 ,51 ,30 ,-999 ,25 ,48 ,47 ,57 ,20 ,53 ,-999 }, - {-999 ,31 ,36 ,34 ,54 ,-999 ,39 ,44 ,22 ,41 ,-999 ,23 ,16 ,-999 ,56 ,50 ,49 ,28 ,52 ,27 ,-999 ,42 ,58 ,-999 ,-999 ,33 ,-999 ,-999 ,35 ,26 ,18 ,24 ,46 ,-999 ,37 ,40 ,-999 ,-999 ,-999 ,55 ,-999 ,43 ,-999 ,-999 ,38 ,45 ,29 ,32 ,21 ,19 ,17 ,-999 ,51 ,30 ,-999 ,25 ,48 ,47 ,57 ,20 ,53 ,-999 }, - {-999 ,31 ,36 ,34 ,54 ,-999 ,39 ,44 ,22 ,41 ,-999 ,23 ,16 ,-999 ,56 ,50 ,49 ,28 ,52 ,27 ,-999 ,42 ,58 ,-999 ,-999 ,33 ,-999 ,-999 ,35 ,26 ,18 ,24 ,46 ,-999 ,37 ,40 ,-999 ,-999 ,-999 ,55 ,-999 ,43 ,-999 ,-999 ,38 ,45 ,29 ,32 ,21 ,19 ,17 ,-999 ,51 ,30 ,-999 ,25 ,48 ,47 ,57 ,20 ,53 ,-999 }, - {-999 ,31 ,36 ,34 ,54 ,-999 ,39 ,44 ,22 ,41 ,-999 ,23 ,16 ,-999 ,56 ,50 ,49 ,28 ,52 ,27 ,-999 ,42 ,58 ,-999 ,-999 ,33 ,-999 ,-999 ,35 ,26 ,18 ,24 ,46 ,-999 ,37 ,40 ,-999 ,-999 ,-999 ,55 ,-999 ,43 ,-999 ,-999 ,38 ,45 ,29 ,32 ,21 ,19 ,17 ,-999 ,51 ,30 ,-999 ,25 ,48 ,47 ,57 ,20 ,53 ,-999 }, - {-999 ,31 ,36 ,34 ,54 ,-999 ,39 ,44 ,22 ,41 ,-999 ,23 ,16 ,-999 ,56 ,50 ,49 ,28 ,52 ,27 ,-999 ,42 ,58 ,-999 ,-999 ,33 ,-999 ,-999 ,35 ,26 ,18 ,24 ,46 ,-999 ,37 ,40 ,-999 ,-999 ,-999 ,55 ,-999 ,43 ,-999 ,-999 ,38 ,45 ,29 ,32 ,21 ,19 ,17 ,-999 ,51 ,30 ,-999 ,25 ,48 ,47 ,57 ,20 ,53 ,-999 }, - {-999 ,31 ,36 ,34 ,54 ,-999 ,39 ,44 ,22 ,41 ,-999 ,23 ,16 ,-999 ,56 ,50 ,49 ,28 ,52 ,27 ,-999 ,42 ,58 ,-999 ,-999 ,33 ,-999 ,-999 ,35 ,26 ,18 ,24 ,46 ,-999 ,37 ,40 ,-999 ,-999 ,-999 ,55 ,-999 ,43 ,-999 ,-999 ,38 ,45 ,29 ,32 ,21 ,19 ,17 ,-999 ,51 ,30 ,-999 ,25 ,48 ,47 ,57 ,20 ,53 ,-999 }, - {-999 ,31 ,36 ,34 ,54 ,-999 ,39 ,44 ,22 ,41 ,-999 ,23 ,16 ,-999 ,56 ,50 ,49 ,28 ,52 ,27 ,-999 ,42 ,58 ,-999 ,-999 ,33 ,-999 ,-999 ,35 ,26 ,18 ,24 ,46 ,-999 ,37 ,40 ,-999 ,-999 ,-999 ,55 ,-999 ,43 ,-999 ,-999 ,38 ,45 ,29 ,32 ,21 ,19 ,17 ,-999 ,51 ,30 ,-999 ,25 ,48 ,47 ,57 ,20 ,53 ,-999 }, - {-999 ,31 ,36 ,34 ,54 ,-999 ,39 ,44 ,22 ,41 ,-999 ,23 ,16 ,-999 ,56 ,50 ,49 ,28 ,52 ,27 ,-999 ,42 ,58 ,-999 ,-999 ,33 ,-999 ,-999 ,35 ,26 ,18 ,24 ,46 ,-999 ,37 ,40 ,-999 ,-999 ,-999 ,55 ,-999 ,43 ,-999 ,-999 ,38 ,45 ,29 ,32 ,21 ,19 ,17 ,-999 ,51 ,30 ,-999 ,25 ,48 ,47 ,57 ,20 ,53 ,-999 }, - {-999 ,31 ,36 ,34 ,54 ,-999 ,39 ,44 ,22 ,41 ,-999 ,23 ,16 ,-999 ,56 ,50 ,49 ,28 ,52 ,27 ,-999 ,42 ,58 ,-999 ,-999 ,33 ,-999 ,-999 ,35 ,26 ,18 ,24 ,46 ,-999 ,37 ,40 ,-999 ,-999 ,-999 ,55 ,-999 ,43 ,-999 ,-999 ,38 ,45 ,29 ,32 ,21 ,19 ,17 ,-999 ,51 ,30 ,-999 ,25 ,48 ,47 ,57 ,20 ,53 ,-999 }, - {-999 ,31 ,36 ,34 ,54 ,-999 ,39 ,44 ,22 ,41 ,-999 ,23 ,16 ,-999 ,56 ,50 ,49 ,28 ,52 ,27 ,-999 ,42 ,58 ,-999 ,-999 ,33 ,-999 ,-999 ,35 ,26 ,18 ,24 ,46 ,-999 ,37 ,40 ,-999 ,-999 ,-999 ,55 ,-999 ,43 ,-999 ,-999 ,38 ,45 ,29 ,32 ,21 ,19 ,17 ,-999 ,51 ,30 ,-999 ,25 ,48 ,47 ,57 ,20 ,53 ,-999 }, - {-999 ,31 ,36 ,34 ,54 ,-999 ,39 ,44 ,22 ,41 ,-999 ,23 ,16 ,-999 ,56 ,50 ,49 ,28 ,52 ,27 ,-999 ,42 ,58 ,-999 ,-999 ,33 ,-999 ,-999 ,35 ,26 ,18 ,24 ,46 ,-999 ,37 ,40 ,-999 ,-999 ,-999 ,55 ,-999 ,43 ,-999 ,-999 ,38 ,45 ,29 ,32 ,21 ,19 ,17 ,-999 ,51 ,30 ,-999 ,25 ,48 ,47 ,57 ,20 ,53 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,130 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, - {-999 ,31 ,36 ,34 ,54 ,-999 ,39 ,44 ,22 ,41 ,-999 ,23 ,16 ,-999 ,56 ,50 ,49 ,28 ,52 ,27 ,-999 ,42 ,58 ,-999 ,-999 ,33 ,134 ,-999 ,35 ,26 ,18 ,24 ,46 ,-999 ,37 ,40 ,-999 ,-999 ,-999 ,55 ,-999 ,43 ,-999 ,-999 ,38 ,45 ,29 ,32 ,21 ,19 ,17 ,-999 ,51 ,30 ,-999 ,25 ,48 ,47 ,57 ,20 ,53 ,-999 }, - {138 ,31 ,36 ,34 ,54 ,-999 ,39 ,44 ,22 ,41 ,-999 ,23 ,16 ,-999 ,56 ,50 ,49 ,28 ,52 ,27 ,-999 ,42 ,58 ,-999 ,-999 ,33 ,-999 ,-999 ,35 ,26 ,18 ,24 ,46 ,-999 ,37 ,40 ,-999 ,-999 ,-999 ,55 ,-999 ,43 ,-999 ,-999 ,38 ,45 ,29 ,32 ,21 ,19 ,17 ,-999 ,51 ,30 ,-999 ,25 ,48 ,47 ,57 ,20 ,53 ,-999 }, - {-999 ,31 ,36 ,34 ,54 ,-999 ,39 ,44 ,22 ,41 ,-999 ,23 ,16 ,-999 ,56 ,50 ,49 ,28 ,52 ,27 ,-999 ,42 ,58 ,-999 ,-999 ,33 ,-999 ,-999 ,35 ,26 ,18 ,24 ,46 ,-999 ,37 ,40 ,-999 ,-999 ,-999 ,55 ,-999 ,43 ,-999 ,-999 ,38 ,45 ,29 ,32 ,21 ,19 ,17 ,-999 ,51 ,30 ,-999 ,25 ,48 ,47 ,57 ,20 ,53 ,-999 }, - {138 ,31 ,36 ,34 ,54 ,-999 ,39 ,44 ,22 ,41 ,-999 ,23 ,16 ,-999 ,56 ,50 ,49 ,28 ,52 ,27 ,-999 ,42 ,58 ,-999 ,-999 ,33 ,-999 ,-999 ,35 ,26 ,18 ,24 ,46 ,-999 ,37 ,40 ,-999 ,-999 ,-999 ,55 ,-999 ,43 ,-999 ,-999 ,38 ,45 ,29 ,32 ,21 ,19 ,17 ,-999 ,51 ,30 ,-999 ,25 ,48 ,47 ,57 ,20 ,53 ,-999 }, - {-999 ,31 ,36 ,34 ,54 ,-999 ,39 ,44 ,22 ,41 ,-999 ,23 ,16 ,-999 ,56 ,50 ,49 ,28 ,52 ,27 ,-999 ,42 ,58 ,-999 ,-999 ,33 ,134 ,-999 ,35 ,26 ,18 ,24 ,46 ,-999 ,37 ,40 ,-999 ,-999 ,-999 ,55 ,-999 ,43 ,-999 ,-999 ,38 ,45 ,29 ,32 ,21 ,19 ,17 ,-999 ,51 ,30 ,-999 ,25 ,48 ,47 ,57 ,20 ,53 ,-999 }, - {-999 ,31 ,36 ,34 ,54 ,-999 ,39 ,44 ,22 ,41 ,-999 ,23 ,16 ,-999 ,56 ,50 ,49 ,28 ,52 ,27 ,-999 ,42 ,58 ,-999 ,-999 ,33 ,-999 ,-999 ,35 ,26 ,18 ,24 ,46 ,-999 ,37 ,40 ,-999 ,-999 ,-999 ,55 ,-999 ,43 ,-999 ,-999 ,38 ,45 ,29 ,32 ,21 ,19 ,17 ,-999 ,51 ,30 ,-999 ,25 ,48 ,47 ,57 ,20 ,53 ,-999 }, - {-999 ,31 ,36 ,34 ,54 ,-999 ,39 ,44 ,22 ,41 ,-999 ,23 ,16 ,-999 ,56 ,50 ,49 ,28 ,52 ,27 ,-999 ,42 ,58 ,-999 ,-999 ,33 ,-999 ,-999 ,35 ,26 ,18 ,24 ,46 ,-999 ,37 ,40 ,-999 ,-999 ,-999 ,55 ,-999 ,43 ,-999 ,-999 ,38 ,45 ,29 ,32 ,21 ,19 ,17 ,-999 ,51 ,30 ,-999 ,25 ,48 ,47 ,57 ,20 ,53 ,-999 }, - {-999 ,31 ,36 ,34 ,54 ,-999 ,39 ,44 ,22 ,41 ,-999 ,23 ,16 ,-999 ,56 ,50 ,49 ,28 ,52 ,27 ,-999 ,42 ,58 ,-999 ,-999 ,33 ,-999 ,-999 ,35 ,26 ,18 ,24 ,46 ,-999 ,37 ,40 ,-999 ,-999 ,-999 ,55 ,-999 ,43 ,-999 ,-999 ,38 ,45 ,29 ,32 ,21 ,19 ,17 ,-999 ,51 ,30 ,-999 ,25 ,48 ,47 ,57 ,20 ,53 ,-999 }, - {-999 ,31 ,36 ,34 ,54 ,-999 ,39 ,44 ,22 ,41 ,-999 ,23 ,16 ,-999 ,56 ,50 ,49 ,28 ,52 ,27 ,-999 ,42 ,58 ,-999 ,-999 ,33 ,-999 ,-999 ,35 ,26 ,18 ,24 ,46 ,-999 ,37 ,40 ,-999 ,-999 ,-999 ,55 ,-999 ,43 ,-999 ,-999 ,38 ,45 ,29 ,32 ,21 ,19 ,17 ,-999 ,51 ,30 ,-999 ,25 ,48 ,47 ,57 ,20 ,53 ,-999 }, - {-999 ,31 ,36 ,34 ,54 ,-999 ,39 ,44 ,22 ,41 ,-999 ,23 ,16 ,-999 ,56 ,50 ,49 ,28 ,52 ,27 ,-999 ,42 ,58 ,-999 ,-999 ,33 ,-999 ,-999 ,35 ,26 ,18 ,24 ,46 ,-999 ,37 ,40 ,-999 ,-999 ,-999 ,55 ,-999 ,43 ,-999 ,-999 ,38 ,45 ,29 ,32 ,21 ,19 ,17 ,-999 ,51 ,30 ,-999 ,25 ,48 ,47 ,57 ,20 ,53 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-35 ,-999 ,-999 ,-999 ,-35 ,-35 ,-999 ,-999 ,-35 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-35 ,-35 ,-35 ,-35 ,-35 ,-999 ,-999 ,-35 ,-999 ,-999 ,-999 ,-999 ,-999 ,-35 ,-999 ,-999 ,-35 ,-35 ,-35 ,-999 ,-35 ,-999 ,-35 ,-35 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-35 ,-999 ,-999 ,-35 ,-999 ,-999 ,-999 ,-999 ,-999 ,-35 ,-35 }, - {-999 ,31 ,36 ,34 ,54 ,-999 ,39 ,44 ,22 ,41 ,-999 ,23 ,16 ,-999 ,56 ,50 ,49 ,28 ,52 ,27 ,-999 ,42 ,58 ,-999 ,-999 ,33 ,-999 ,-999 ,35 ,26 ,18 ,24 ,46 ,-999 ,37 ,40 ,-999 ,-999 ,-999 ,55 ,-999 ,43 ,-999 ,-999 ,38 ,45 ,29 ,32 ,21 ,19 ,17 ,-999 ,51 ,30 ,-999 ,25 ,48 ,47 ,57 ,20 ,53 ,-999 }, - {-999 ,31 ,36 ,34 ,54 ,-999 ,39 ,44 ,22 ,41 ,-999 ,23 ,16 ,-999 ,56 ,50 ,49 ,28 ,52 ,27 ,-999 ,42 ,58 ,-999 ,-999 ,33 ,-999 ,-999 ,35 ,26 ,18 ,24 ,46 ,-999 ,37 ,40 ,-999 ,-999 ,-999 ,55 ,-999 ,43 ,-999 ,-999 ,38 ,45 ,29 ,32 ,21 ,19 ,17 ,-999 ,51 ,30 ,-999 ,25 ,48 ,47 ,57 ,20 ,53 ,-999 }, - {-999 ,31 ,36 ,34 ,54 ,-999 ,39 ,44 ,22 ,41 ,-999 ,23 ,16 ,-999 ,56 ,50 ,49 ,28 ,52 ,27 ,-999 ,42 ,58 ,-999 ,-999 ,33 ,-999 ,-999 ,35 ,26 ,18 ,24 ,46 ,-999 ,37 ,40 ,-999 ,-999 ,-999 ,55 ,-999 ,43 ,-999 ,-999 ,38 ,45 ,29 ,32 ,21 ,19 ,17 ,-999 ,51 ,30 ,-999 ,25 ,48 ,47 ,57 ,20 ,53 ,-999 }, - {-999 ,31 ,36 ,34 ,54 ,-999 ,39 ,44 ,22 ,41 ,-999 ,23 ,16 ,-999 ,56 ,50 ,49 ,28 ,52 ,27 ,-999 ,42 ,58 ,-999 ,-999 ,33 ,-999 ,-999 ,35 ,26 ,18 ,24 ,46 ,-999 ,37 ,40 ,-999 ,-999 ,-999 ,55 ,-999 ,43 ,-999 ,-999 ,38 ,45 ,29 ,32 ,21 ,19 ,17 ,-999 ,51 ,30 ,-999 ,25 ,48 ,47 ,57 ,20 ,53 ,-999 }, - {-999 ,31 ,36 ,34 ,54 ,-999 ,39 ,44 ,22 ,41 ,-999 ,23 ,16 ,-999 ,56 ,50 ,49 ,28 ,52 ,27 ,-999 ,42 ,58 ,-999 ,-999 ,33 ,-999 ,-999 ,35 ,26 ,18 ,24 ,46 ,-999 ,37 ,40 ,-999 ,-999 ,-999 ,55 ,-999 ,43 ,-999 ,-999 ,38 ,45 ,29 ,32 ,21 ,19 ,17 ,-999 ,51 ,30 ,-999 ,25 ,48 ,47 ,57 ,20 ,53 ,-999 }, - {-999 ,31 ,36 ,34 ,54 ,-999 ,39 ,44 ,22 ,41 ,-999 ,23 ,16 ,-999 ,56 ,50 ,49 ,28 ,52 ,27 ,-999 ,42 ,58 ,-999 ,-999 ,33 ,-999 ,-999 ,35 ,26 ,18 ,24 ,46 ,-999 ,37 ,40 ,-999 ,-999 ,-999 ,55 ,-999 ,43 ,-999 ,-999 ,38 ,45 ,29 ,32 ,21 ,19 ,17 ,-999 ,51 ,30 ,-999 ,25 ,48 ,47 ,57 ,20 ,53 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-33 ,-999 ,-999 ,-999 ,-33 ,-33 ,-999 ,-999 ,-33 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-33 ,-33 ,-33 ,-33 ,-33 ,-999 ,-999 ,-33 ,-999 ,-999 ,-999 ,-999 ,-999 ,-33 ,-999 ,-999 ,-33 ,-33 ,-33 ,-999 ,-33 ,-999 ,-33 ,-33 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-33 ,-999 ,-999 ,-33 ,-999 ,-999 ,-999 ,-999 ,-999 ,-33 ,-33 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-36 ,-999 ,-999 ,-999 ,-36 ,-36 ,-999 ,-999 ,-36 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-36 ,-36 ,-36 ,-36 ,-36 ,-999 ,-999 ,-36 ,-999 ,-999 ,-999 ,-999 ,-999 ,-36 ,-999 ,-999 ,-36 ,-36 ,-36 ,-999 ,-36 ,-999 ,-36 ,-36 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-36 ,-999 ,-999 ,-36 ,-999 ,-999 ,-999 ,-999 ,-999 ,-36 ,-36 }, - {-999 ,31 ,36 ,34 ,54 ,-999 ,39 ,44 ,22 ,41 ,-999 ,23 ,16 ,-999 ,56 ,50 ,49 ,28 ,52 ,27 ,-999 ,42 ,58 ,-999 ,-999 ,33 ,-999 ,-999 ,35 ,26 ,18 ,24 ,46 ,-999 ,37 ,40 ,-999 ,-999 ,-999 ,55 ,-999 ,43 ,-999 ,-999 ,38 ,45 ,29 ,32 ,21 ,19 ,17 ,-999 ,51 ,30 ,-999 ,25 ,48 ,47 ,57 ,20 ,53 ,-999 }, - {-999 ,31 ,36 ,34 ,54 ,-999 ,39 ,44 ,22 ,41 ,-999 ,23 ,16 ,-999 ,56 ,50 ,49 ,28 ,52 ,27 ,-999 ,42 ,58 ,-999 ,-999 ,33 ,-999 ,-999 ,35 ,26 ,18 ,24 ,46 ,-999 ,37 ,40 ,-999 ,-999 ,-999 ,55 ,-999 ,43 ,-999 ,-999 ,38 ,45 ,29 ,32 ,21 ,19 ,17 ,-999 ,51 ,30 ,-999 ,25 ,48 ,47 ,57 ,20 ,53 ,-999 }, - {-999 ,31 ,36 ,34 ,54 ,-999 ,39 ,44 ,22 ,41 ,-999 ,23 ,16 ,-999 ,56 ,50 ,49 ,28 ,52 ,27 ,-999 ,42 ,58 ,-999 ,-999 ,33 ,-999 ,-999 ,35 ,26 ,18 ,24 ,46 ,-999 ,37 ,40 ,-999 ,-999 ,-999 ,55 ,-999 ,43 ,-999 ,-999 ,38 ,45 ,29 ,32 ,21 ,19 ,17 ,-999 ,51 ,30 ,-999 ,25 ,48 ,47 ,57 ,20 ,53 ,-999 }, - {-999 ,31 ,36 ,34 ,54 ,-999 ,39 ,44 ,22 ,41 ,-999 ,23 ,16 ,-999 ,56 ,50 ,49 ,28 ,52 ,27 ,-999 ,42 ,58 ,-999 ,-999 ,33 ,-999 ,-999 ,35 ,26 ,18 ,24 ,46 ,-999 ,37 ,40 ,-999 ,-999 ,-999 ,55 ,-999 ,43 ,-999 ,-999 ,38 ,45 ,29 ,32 ,21 ,19 ,17 ,-999 ,51 ,30 ,-999 ,25 ,48 ,47 ,57 ,20 ,53 ,-999 }, - {-999 ,31 ,36 ,34 ,54 ,-999 ,39 ,44 ,22 ,41 ,-999 ,23 ,16 ,-999 ,56 ,50 ,49 ,28 ,52 ,27 ,-999 ,42 ,58 ,-999 ,-999 ,33 ,-999 ,-999 ,35 ,26 ,18 ,24 ,46 ,-999 ,37 ,40 ,-999 ,-999 ,-999 ,55 ,-999 ,43 ,-999 ,-999 ,38 ,45 ,29 ,32 ,21 ,19 ,17 ,-999 ,51 ,30 ,-999 ,25 ,48 ,47 ,57 ,20 ,53 ,-999 }, - {-999 ,31 ,36 ,34 ,54 ,-999 ,39 ,44 ,22 ,41 ,-999 ,23 ,16 ,-999 ,56 ,50 ,49 ,28 ,52 ,27 ,-999 ,42 ,58 ,-999 ,-999 ,33 ,-999 ,-999 ,35 ,26 ,18 ,24 ,46 ,-999 ,37 ,40 ,-999 ,-999 ,-999 ,55 ,-999 ,43 ,-999 ,-999 ,38 ,45 ,29 ,32 ,21 ,19 ,17 ,-999 ,51 ,30 ,-999 ,25 ,48 ,47 ,57 ,20 ,53 ,-999 }, - {-999 ,31 ,36 ,34 ,54 ,-999 ,39 ,44 ,22 ,41 ,-999 ,23 ,16 ,-999 ,56 ,50 ,49 ,28 ,52 ,27 ,-999 ,42 ,58 ,-999 ,-999 ,33 ,-999 ,-999 ,35 ,26 ,18 ,24 ,46 ,-999 ,37 ,40 ,-999 ,-999 ,-999 ,55 ,-999 ,43 ,-999 ,-999 ,38 ,45 ,29 ,32 ,21 ,19 ,17 ,-999 ,51 ,30 ,-999 ,25 ,48 ,47 ,57 ,20 ,53 ,-999 }, - {-999 ,31 ,36 ,34 ,54 ,-999 ,39 ,44 ,22 ,41 ,-999 ,23 ,16 ,-999 ,56 ,50 ,49 ,28 ,52 ,27 ,-999 ,42 ,58 ,-999 ,-999 ,33 ,-999 ,-999 ,35 ,26 ,18 ,24 ,46 ,-999 ,37 ,40 ,-999 ,-999 ,-999 ,55 ,-999 ,43 ,-999 ,-999 ,38 ,45 ,29 ,32 ,21 ,19 ,17 ,-999 ,51 ,30 ,-999 ,25 ,48 ,47 ,57 ,20 ,53 ,-999 }, - {-999 ,31 ,36 ,34 ,54 ,-999 ,39 ,44 ,22 ,41 ,-999 ,23 ,16 ,-999 ,56 ,50 ,49 ,28 ,52 ,27 ,-999 ,42 ,58 ,-999 ,-999 ,33 ,134 ,-999 ,35 ,26 ,18 ,24 ,46 ,-999 ,37 ,40 ,-999 ,-999 ,-999 ,55 ,-999 ,43 ,-999 ,-999 ,38 ,45 ,29 ,32 ,21 ,19 ,17 ,-999 ,51 ,30 ,-999 ,25 ,48 ,47 ,57 ,20 ,53 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-34 ,-999 ,-999 ,-999 ,-34 ,-34 ,-999 ,-999 ,-34 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-34 ,-34 ,-34 ,-34 ,-34 ,-999 ,-999 ,-34 ,-999 ,-999 ,-999 ,-999 ,-999 ,-34 ,-999 ,-999 ,-34 ,-34 ,-34 ,-999 ,-34 ,-999 ,-34 ,-34 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-34 ,-999 ,-999 ,-34 ,-999 ,-999 ,-999 ,-999 ,-999 ,-34 ,-34 }, - {-999 ,31 ,36 ,34 ,54 ,-999 ,39 ,44 ,22 ,41 ,-999 ,23 ,16 ,-999 ,56 ,50 ,49 ,28 ,52 ,27 ,-999 ,42 ,58 ,-999 ,-999 ,33 ,-999 ,-999 ,35 ,26 ,18 ,24 ,46 ,-999 ,37 ,40 ,-999 ,-999 ,-999 ,55 ,-999 ,43 ,-999 ,-999 ,38 ,45 ,29 ,32 ,21 ,19 ,17 ,-999 ,51 ,30 ,-999 ,25 ,48 ,47 ,57 ,20 ,53 ,-999 }, - {-999 ,31 ,36 ,34 ,54 ,-999 ,39 ,44 ,22 ,41 ,-999 ,23 ,16 ,-999 ,56 ,50 ,49 ,28 ,52 ,27 ,-999 ,42 ,58 ,-999 ,-999 ,33 ,-999 ,-999 ,35 ,26 ,18 ,24 ,46 ,-999 ,37 ,40 ,-999 ,-999 ,-999 ,55 ,-999 ,43 ,-999 ,-999 ,38 ,45 ,29 ,32 ,21 ,19 ,17 ,-999 ,51 ,30 ,-999 ,25 ,48 ,47 ,57 ,20 ,53 ,-999 }, - {-999 ,31 ,36 ,34 ,54 ,-999 ,39 ,44 ,22 ,41 ,-999 ,23 ,16 ,-999 ,56 ,50 ,49 ,28 ,52 ,27 ,-999 ,42 ,58 ,-999 ,-999 ,33 ,-999 ,-999 ,35 ,26 ,18 ,24 ,46 ,-999 ,37 ,40 ,-999 ,-999 ,-999 ,55 ,-999 ,43 ,-999 ,-999 ,38 ,45 ,29 ,32 ,21 ,19 ,17 ,-999 ,51 ,30 ,-999 ,25 ,48 ,47 ,57 ,20 ,53 ,-999 }, - {-999 ,31 ,36 ,34 ,54 ,-999 ,39 ,44 ,22 ,41 ,-999 ,23 ,16 ,-999 ,56 ,50 ,49 ,28 ,52 ,27 ,-999 ,42 ,58 ,-999 ,-999 ,33 ,-999 ,-999 ,35 ,26 ,18 ,24 ,46 ,-999 ,37 ,40 ,-999 ,-999 ,-999 ,55 ,-999 ,43 ,-999 ,-999 ,38 ,45 ,29 ,32 ,21 ,19 ,17 ,-999 ,51 ,30 ,-999 ,25 ,48 ,47 ,57 ,20 ,53 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-37 ,-999 ,-999 ,-999 ,-37 ,-37 ,-999 ,-999 ,-37 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-37 ,-37 ,-37 ,-37 ,-37 ,-999 ,-999 ,-37 ,-999 ,-999 ,-999 ,-999 ,-999 ,-37 ,-999 ,-999 ,-37 ,-37 ,-37 ,-999 ,-37 ,-999 ,-37 ,-37 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-37 ,-999 ,-999 ,-37 ,-999 ,-999 ,-999 ,-999 ,-999 ,-37 ,-37 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-3 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-3 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,60 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-3 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-5 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-5 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,61 ,-999 ,-999 ,-5 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-5 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-7 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-7 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,62 ,-999 ,-999 ,-999 ,-7 ,-999 ,-999 ,-7 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-7 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-9 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,63 ,-9 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-9 ,-999 ,-999 ,-999 ,-9 ,-999 ,-999 ,-9 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-9 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-11 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-11 ,-11 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-11 ,-999 ,-999 ,-999 ,-11 ,-999 ,-999 ,-11 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-11 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-15 ,-999 ,-999 ,-999 ,-999 ,-15 ,-999 ,-999 ,-15 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-15 ,-999 ,-15 ,-15 ,-999 ,-999 ,-999 ,-15 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-15 ,-999 ,-999 ,-999 ,-15 ,-999 ,-15 ,-15 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-15 ,-999 ,-999 ,-15 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-14 ,-999 ,-999 ,-999 ,-999 ,-14 ,-999 ,-999 ,-14 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-14 ,-999 ,-14 ,-14 ,-999 ,-999 ,-999 ,-14 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-14 ,-999 ,-999 ,-999 ,-14 ,-999 ,-14 ,-14 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-14 ,-999 ,-999 ,-14 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-17 ,-999 ,-999 ,-999 ,-999 ,-17 ,-999 ,-999 ,-17 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-17 ,-999 ,-17 ,-17 ,-999 ,-999 ,-999 ,-17 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-17 ,-999 ,-999 ,-999 ,-17 ,-999 ,-17 ,-17 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-17 ,-999 ,-999 ,-17 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-19 ,-999 ,-999 ,-999 ,-999 ,-19 ,-999 ,-999 ,-19 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-19 ,-999 ,-19 ,-19 ,-999 ,-999 ,-999 ,-19 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-19 ,-999 ,-999 ,-999 ,-19 ,-999 ,-19 ,-19 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-19 ,-999 ,-999 ,-19 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-16 ,-999 ,-999 ,-999 ,-999 ,-16 ,-999 ,-999 ,-16 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-16 ,-999 ,-16 ,-16 ,-999 ,-999 ,-999 ,-16 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-16 ,-999 ,-999 ,-999 ,-16 ,-999 ,-16 ,-16 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-16 ,-999 ,-999 ,-16 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-18 ,-999 ,-999 ,-999 ,-999 ,-18 ,-999 ,-999 ,-18 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-18 ,-999 ,-18 ,-18 ,-999 ,-999 ,-999 ,-18 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-18 ,-999 ,-999 ,-999 ,-18 ,-999 ,-18 ,-18 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-18 ,-999 ,-999 ,-18 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-22 ,-999 ,-999 ,-999 ,72 ,-22 ,-999 ,-999 ,-22 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-22 ,-999 ,-22 ,-22 ,-999 ,-999 ,-999 ,-22 ,-999 ,-999 ,-999 ,-999 ,-999 ,-22 ,-999 ,-999 ,-22 ,-999 ,-22 ,-999 ,-22 ,-999 ,-22 ,-22 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-22 ,-999 ,-999 ,-22 ,-999 ,-999 ,-999 ,-999 ,-999 ,73 ,-22 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-23 ,-999 ,-999 ,-999 ,72 ,-23 ,-999 ,-999 ,-23 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-23 ,-999 ,-23 ,-23 ,-999 ,-999 ,-999 ,-23 ,-999 ,-999 ,-999 ,-999 ,-999 ,-23 ,-999 ,-999 ,-23 ,-999 ,-23 ,-999 ,-23 ,-999 ,-23 ,-23 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-23 ,-999 ,-999 ,-23 ,-999 ,-999 ,-999 ,-999 ,-999 ,73 ,-23 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-26 ,-999 ,-999 ,-999 ,-26 ,-26 ,-999 ,-999 ,-26 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-26 ,74 ,-26 ,-26 ,76 ,-999 ,-999 ,-26 ,-999 ,-999 ,-999 ,-999 ,-999 ,-26 ,-999 ,-999 ,-26 ,75 ,-26 ,-999 ,-26 ,-999 ,-26 ,-26 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-26 ,-999 ,-999 ,-26 ,-999 ,-999 ,-999 ,-999 ,-999 ,-26 ,-26 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-25 ,-999 ,-999 ,-999 ,-25 ,-25 ,-999 ,-999 ,-25 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-25 ,74 ,-25 ,-25 ,76 ,-999 ,-999 ,-25 ,-999 ,-999 ,-999 ,-999 ,-999 ,-25 ,-999 ,-999 ,-25 ,75 ,-25 ,-999 ,-25 ,-999 ,-25 ,-25 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-25 ,-999 ,-999 ,-25 ,-999 ,-999 ,-999 ,-999 ,-999 ,-25 ,-25 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-30 ,-999 ,-999 ,-999 ,-30 ,-30 ,-999 ,-999 ,-30 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-30 ,-30 ,-30 ,-30 ,-30 ,-999 ,-999 ,-30 ,-999 ,-999 ,-999 ,-999 ,-999 ,-30 ,-999 ,-999 ,-30 ,-30 ,-30 ,-999 ,-30 ,-999 ,-30 ,-30 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-30 ,-999 ,-999 ,-30 ,-999 ,-999 ,-999 ,-999 ,-999 ,-30 ,-30 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-28 ,-999 ,-999 ,-999 ,-28 ,-28 ,-999 ,-999 ,-28 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-28 ,-28 ,-28 ,-28 ,-28 ,-999 ,-999 ,-28 ,-999 ,-999 ,-999 ,-999 ,-999 ,-28 ,-999 ,-999 ,-28 ,-28 ,-28 ,-999 ,-28 ,-999 ,-28 ,-28 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-28 ,-999 ,-999 ,-28 ,-999 ,-999 ,-999 ,-999 ,-999 ,-28 ,-28 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-29 ,-999 ,-999 ,-999 ,-29 ,-29 ,-999 ,-999 ,-29 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-29 ,-29 ,-29 ,-29 ,-29 ,-999 ,-999 ,-29 ,-999 ,-999 ,-999 ,-999 ,-999 ,-29 ,-999 ,-999 ,-29 ,-29 ,-29 ,-999 ,-29 ,-999 ,-29 ,-29 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-29 ,-999 ,-999 ,-29 ,-999 ,-999 ,-999 ,-999 ,-999 ,-29 ,-29 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-70 ,-999 ,-999 ,-999 ,-70 ,-70 ,-999 ,-999 ,-70 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-70 ,-70 ,-70 ,-70 ,-70 ,-999 ,-999 ,-70 ,-999 ,-999 ,-999 ,-999 ,-999 ,-70 ,-999 ,-999 ,-70 ,-70 ,-70 ,-999 ,-70 ,-999 ,-70 ,-70 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-70 ,-999 ,-999 ,-70 ,-999 ,-999 ,-999 ,-999 ,-999 ,-70 ,-70 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-81 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-82 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-82 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,169 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-79 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-79 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,170 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-84 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-84 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,171 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-80 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-80 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,172 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,173 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,174 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-81 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-81 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,175 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,176 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,177 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,178 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,179 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,180 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,181 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,182 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,183 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,184 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,185 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,186 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,187 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,188 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,189 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,190 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,191 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,192 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,193 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,194 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,195 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,196 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,197 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,198 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,199 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-48 ,-999 ,-999 ,-999 ,-48 ,-48 ,-999 ,-999 ,-48 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-48 ,-48 ,-48 ,-48 ,-48 ,-999 ,-999 ,-48 ,-999 ,-999 ,-999 ,-999 ,-999 ,-48 ,-999 ,-999 ,-48 ,-48 ,-48 ,-999 ,-48 ,-999 ,-48 ,-48 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-48 ,-999 ,-999 ,-48 ,-999 ,-999 ,-999 ,-999 ,-999 ,-48 ,-48 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-65 ,-999 ,-999 ,-999 ,-65 ,-65 ,-999 ,-999 ,-65 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-65 ,-65 ,-65 ,-65 ,-65 ,-999 ,-999 ,-65 ,-999 ,-999 ,-999 ,-999 ,-999 ,-65 ,-999 ,-999 ,-65 ,-65 ,-65 ,-999 ,-65 ,-999 ,-65 ,-65 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-65 ,-999 ,-999 ,-65 ,-999 ,-999 ,-999 ,-999 ,-999 ,-65 ,-65 }, - {-999 ,31 ,36 ,34 ,54 ,-999 ,39 ,44 ,22 ,41 ,-999 ,23 ,16 ,-999 ,56 ,50 ,49 ,28 ,52 ,27 ,-999 ,42 ,58 ,-999 ,-999 ,33 ,-999 ,-999 ,35 ,26 ,18 ,24 ,46 ,-999 ,37 ,40 ,-999 ,-999 ,-999 ,55 ,-999 ,43 ,-999 ,-999 ,38 ,45 ,29 ,32 ,21 ,19 ,17 ,-999 ,51 ,30 ,-999 ,25 ,48 ,47 ,57 ,20 ,53 ,-999 }, - {138 ,31 ,36 ,34 ,54 ,-999 ,39 ,44 ,22 ,41 ,-999 ,23 ,16 ,-999 ,56 ,50 ,49 ,28 ,52 ,27 ,-999 ,42 ,58 ,-999 ,-999 ,33 ,-999 ,-999 ,35 ,26 ,18 ,24 ,46 ,-999 ,37 ,40 ,-999 ,-999 ,-999 ,55 ,-999 ,43 ,-999 ,-999 ,38 ,45 ,29 ,32 ,21 ,19 ,17 ,-999 ,51 ,30 ,-999 ,25 ,48 ,47 ,57 ,20 ,53 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-50 ,-999 ,-999 ,-999 ,-50 ,-50 ,-999 ,-999 ,-50 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-50 ,-50 ,-50 ,-50 ,-50 ,-999 ,-999 ,-50 ,-999 ,-999 ,-999 ,-999 ,-999 ,-50 ,-999 ,-999 ,-50 ,-50 ,-50 ,-999 ,-50 ,-999 ,-50 ,-50 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-50 ,-999 ,-999 ,-50 ,-999 ,-999 ,-999 ,-999 ,-999 ,-50 ,-50 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-49 ,-999 ,-999 ,-999 ,-49 ,-49 ,-999 ,-999 ,-49 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-49 ,-49 ,-49 ,-49 ,-49 ,-999 ,-999 ,-49 ,-999 ,-999 ,-999 ,-999 ,-999 ,-49 ,-999 ,-999 ,-49 ,-49 ,-49 ,-999 ,-49 ,-999 ,-49 ,-49 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-49 ,-999 ,-999 ,-49 ,-999 ,-999 ,-999 ,-999 ,-999 ,-49 ,-49 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-68 ,-999 ,-999 ,-999 ,-68 ,-68 ,-999 ,-999 ,-68 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-68 ,-68 ,-68 ,-68 ,-68 ,-999 ,-999 ,-68 ,-999 ,-999 ,-999 ,-999 ,-999 ,-68 ,-999 ,-999 ,-68 ,-68 ,-68 ,-999 ,-68 ,-999 ,-68 ,-68 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-68 ,-999 ,-999 ,-68 ,-999 ,-999 ,-999 ,-999 ,-999 ,-68 ,-68 }, - {-999 ,31 ,36 ,34 ,54 ,-999 ,39 ,44 ,22 ,41 ,-999 ,23 ,16 ,-999 ,56 ,50 ,49 ,28 ,52 ,27 ,-999 ,42 ,58 ,-999 ,-999 ,33 ,134 ,-999 ,35 ,26 ,18 ,24 ,46 ,-999 ,37 ,40 ,-999 ,-999 ,-999 ,55 ,-999 ,43 ,-999 ,-999 ,38 ,45 ,29 ,32 ,21 ,19 ,17 ,-999 ,51 ,30 ,-999 ,25 ,48 ,47 ,57 ,20 ,53 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-51 ,-999 ,-999 ,-999 ,-51 ,-51 ,-999 ,-999 ,-51 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-51 ,-51 ,-51 ,-51 ,-51 ,-999 ,-999 ,-51 ,-999 ,-999 ,-999 ,-999 ,-999 ,-51 ,-999 ,-999 ,-51 ,-51 ,-51 ,-999 ,-51 ,-999 ,-51 ,-51 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-51 ,-999 ,-999 ,-51 ,-999 ,-999 ,-999 ,-999 ,-999 ,-51 ,-51 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-52 ,-999 ,-999 ,-999 ,-52 ,-52 ,-999 ,-999 ,-52 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-52 ,-52 ,-52 ,-52 ,-52 ,-999 ,-999 ,-52 ,-999 ,-999 ,-999 ,-999 ,-999 ,-52 ,-999 ,-999 ,-52 ,-52 ,-52 ,-999 ,-52 ,-999 ,-52 ,-52 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-52 ,-999 ,-999 ,-52 ,-999 ,-999 ,-999 ,-999 ,-999 ,-52 ,-52 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-54 ,-999 ,-999 ,-999 ,-54 ,-54 ,-999 ,-999 ,-54 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-54 ,-54 ,-54 ,-54 ,-54 ,-999 ,-999 ,-54 ,-999 ,-999 ,-999 ,-999 ,-999 ,-54 ,-999 ,-999 ,-54 ,-54 ,-54 ,-999 ,-54 ,-999 ,-54 ,-54 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-54 ,-999 ,-999 ,-54 ,-999 ,-999 ,-999 ,-999 ,-999 ,-54 ,-54 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-41 ,-999 ,-999 ,-999 ,-41 ,-41 ,-999 ,-999 ,-41 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-41 ,-41 ,-41 ,-41 ,-41 ,-999 ,-999 ,-41 ,-999 ,-999 ,-999 ,-999 ,-999 ,-41 ,-999 ,-999 ,-41 ,-41 ,-41 ,-999 ,-41 ,-999 ,-41 ,-41 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-41 ,-999 ,-999 ,-41 ,-999 ,-999 ,-999 ,-999 ,-999 ,-41 ,-41 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-53 ,-999 ,-999 ,-999 ,-53 ,-53 ,-999 ,-999 ,-53 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-53 ,-53 ,-53 ,-53 ,-53 ,-999 ,-999 ,-53 ,-999 ,-999 ,-999 ,-999 ,-999 ,-53 ,-999 ,-999 ,-53 ,-53 ,-53 ,-999 ,-53 ,-999 ,-53 ,-53 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-53 ,-999 ,-999 ,-53 ,-999 ,-999 ,-999 ,-999 ,-999 ,-53 ,-53 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-46 ,-999 ,-999 ,-999 ,-46 ,-46 ,-999 ,-999 ,-46 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-46 ,-46 ,-46 ,-46 ,-46 ,-999 ,-999 ,-46 ,-999 ,-999 ,-999 ,-999 ,-999 ,-46 ,-999 ,-999 ,-46 ,-46 ,-46 ,-999 ,-46 ,-999 ,-46 ,-46 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-46 ,-999 ,-999 ,-46 ,-999 ,-999 ,-999 ,-999 ,-999 ,-46 ,-46 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-39 ,-999 ,-999 ,-999 ,-39 ,-39 ,-999 ,-999 ,-39 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-39 ,-39 ,-39 ,-39 ,-39 ,-999 ,-999 ,-39 ,-999 ,-999 ,-999 ,-999 ,-999 ,-39 ,-999 ,-999 ,-39 ,-39 ,-39 ,-999 ,-39 ,-999 ,-39 ,-39 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-39 ,-999 ,-999 ,-39 ,-999 ,-999 ,-999 ,-999 ,-999 ,-39 ,-39 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-55 ,-999 ,-999 ,-999 ,-55 ,-55 ,-999 ,-999 ,-55 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-55 ,-55 ,-55 ,-55 ,-55 ,-999 ,-999 ,-55 ,-999 ,-999 ,-999 ,-999 ,-999 ,-55 ,-999 ,-999 ,-55 ,-55 ,-55 ,-999 ,-55 ,-999 ,-55 ,-55 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-55 ,-999 ,-999 ,-55 ,-999 ,-999 ,-999 ,-999 ,-999 ,-55 ,-55 }, - {-999 ,31 ,36 ,34 ,54 ,-999 ,39 ,44 ,22 ,41 ,-999 ,23 ,16 ,-999 ,56 ,50 ,49 ,28 ,52 ,27 ,-999 ,42 ,58 ,-999 ,-999 ,33 ,-999 ,-999 ,35 ,26 ,18 ,24 ,46 ,-999 ,37 ,40 ,-999 ,-999 ,-999 ,55 ,-999 ,43 ,-999 ,-999 ,38 ,45 ,29 ,32 ,21 ,19 ,17 ,-999 ,51 ,30 ,-999 ,25 ,48 ,47 ,57 ,20 ,53 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-42 ,-999 ,-999 ,-999 ,-42 ,-42 ,-999 ,-999 ,-42 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-42 ,-42 ,-42 ,-42 ,-42 ,-999 ,-999 ,-42 ,-999 ,-999 ,-999 ,-999 ,-999 ,-42 ,-999 ,-999 ,-42 ,-42 ,-42 ,-999 ,-42 ,-999 ,-42 ,-42 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-42 ,-999 ,-999 ,-42 ,-999 ,-999 ,-999 ,-999 ,-999 ,-42 ,-42 }, - {-999 ,31 ,36 ,34 ,54 ,-999 ,39 ,44 ,22 ,41 ,-999 ,23 ,16 ,-999 ,56 ,50 ,49 ,28 ,52 ,27 ,-999 ,42 ,58 ,-999 ,-999 ,33 ,-999 ,-999 ,35 ,26 ,18 ,24 ,46 ,-999 ,37 ,40 ,-999 ,-999 ,-999 ,55 ,-999 ,43 ,-999 ,-999 ,38 ,45 ,29 ,32 ,21 ,19 ,17 ,-999 ,51 ,30 ,-999 ,25 ,48 ,47 ,57 ,20 ,53 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-44 ,-999 ,-999 ,-999 ,-44 ,-44 ,-999 ,-999 ,-44 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-44 ,-44 ,-44 ,-44 ,-44 ,-999 ,-999 ,-44 ,-999 ,-999 ,-999 ,-999 ,-999 ,-44 ,-999 ,-999 ,-44 ,-44 ,-44 ,-999 ,-44 ,-999 ,-44 ,-44 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-44 ,-999 ,-999 ,-44 ,-999 ,-999 ,-999 ,-999 ,-999 ,-44 ,-44 }, - {-999 ,31 ,36 ,34 ,54 ,-999 ,39 ,44 ,22 ,41 ,-999 ,23 ,16 ,-999 ,56 ,50 ,49 ,28 ,52 ,27 ,-999 ,42 ,58 ,-999 ,-999 ,33 ,-999 ,-999 ,35 ,26 ,18 ,24 ,46 ,-999 ,37 ,40 ,-999 ,-999 ,-999 ,55 ,-999 ,43 ,-999 ,-999 ,38 ,45 ,29 ,32 ,21 ,19 ,17 ,-999 ,51 ,30 ,-999 ,25 ,48 ,47 ,57 ,20 ,53 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-47 ,-999 ,-999 ,-999 ,-47 ,-47 ,-999 ,-999 ,-47 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-47 ,-47 ,-47 ,-47 ,-47 ,-999 ,-999 ,-47 ,-999 ,-999 ,-999 ,-999 ,-999 ,-47 ,-999 ,-999 ,-47 ,-47 ,-47 ,-999 ,-47 ,-999 ,-47 ,-47 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-47 ,-999 ,-999 ,-47 ,-999 ,-999 ,-999 ,-999 ,-999 ,-47 ,-47 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-57 ,-999 ,-999 ,-999 ,-57 ,-57 ,-999 ,-999 ,-57 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-57 ,-57 ,-57 ,-57 ,-57 ,-999 ,-999 ,-57 ,-999 ,-999 ,-999 ,-999 ,-999 ,-57 ,-999 ,-999 ,-57 ,-57 ,-57 ,-999 ,-57 ,-999 ,-57 ,-57 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-57 ,-999 ,-999 ,-57 ,-999 ,-999 ,-999 ,-999 ,-999 ,-57 ,-57 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-38 ,-999 ,-999 ,-999 ,-38 ,-38 ,-999 ,-999 ,-38 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-38 ,-38 ,-38 ,-38 ,-38 ,-999 ,-999 ,-38 ,-999 ,-999 ,-999 ,-999 ,-999 ,-38 ,-999 ,-999 ,-38 ,-38 ,-38 ,-999 ,-38 ,-999 ,-38 ,-38 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-38 ,-999 ,-999 ,-38 ,-999 ,-999 ,-999 ,-999 ,-999 ,-38 ,-38 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-56 ,-999 ,-999 ,-999 ,-56 ,-56 ,-999 ,-999 ,-56 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-56 ,-56 ,-56 ,-56 ,-56 ,-999 ,-999 ,-56 ,-999 ,-999 ,-999 ,-999 ,-999 ,-56 ,-999 ,-999 ,-56 ,-56 ,-56 ,-999 ,-56 ,-999 ,-56 ,-56 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-56 ,-999 ,-999 ,-56 ,-999 ,-999 ,-999 ,-999 ,-999 ,-56 ,-56 }, - {-999 ,31 ,36 ,34 ,54 ,-999 ,39 ,44 ,22 ,41 ,-999 ,23 ,16 ,-999 ,56 ,50 ,49 ,28 ,52 ,27 ,-999 ,42 ,58 ,-999 ,-999 ,33 ,-999 ,-999 ,35 ,26 ,18 ,24 ,46 ,-999 ,37 ,40 ,-999 ,-999 ,-999 ,55 ,-999 ,43 ,-999 ,-999 ,38 ,45 ,29 ,32 ,21 ,19 ,17 ,-999 ,51 ,30 ,-999 ,25 ,48 ,47 ,57 ,20 ,53 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-45 ,-999 ,-999 ,-999 ,-45 ,-45 ,-999 ,-999 ,-45 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-45 ,-45 ,-45 ,-45 ,-45 ,-999 ,-999 ,-45 ,-999 ,-999 ,-999 ,-999 ,-999 ,-45 ,-999 ,-999 ,-45 ,-45 ,-45 ,-999 ,-45 ,-999 ,-45 ,-45 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-45 ,-999 ,-999 ,-45 ,-999 ,-999 ,-999 ,-999 ,-999 ,-45 ,-45 }, - {-999 ,31 ,36 ,34 ,54 ,-999 ,39 ,44 ,22 ,41 ,-999 ,23 ,16 ,-999 ,56 ,50 ,49 ,28 ,52 ,27 ,-999 ,42 ,58 ,-999 ,-999 ,33 ,134 ,-999 ,35 ,26 ,18 ,24 ,46 ,-999 ,37 ,40 ,-999 ,-999 ,-999 ,55 ,-999 ,43 ,-999 ,-999 ,38 ,45 ,29 ,32 ,21 ,19 ,17 ,-999 ,51 ,30 ,-999 ,25 ,48 ,47 ,57 ,20 ,53 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-43 ,-999 ,-999 ,-999 ,-43 ,-43 ,-999 ,-999 ,-43 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-43 ,-43 ,-43 ,-43 ,-43 ,-999 ,-999 ,-43 ,-999 ,-999 ,-999 ,-999 ,-999 ,-43 ,-999 ,-999 ,-43 ,-43 ,-43 ,-999 ,-43 ,-999 ,-43 ,-43 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-43 ,-999 ,-999 ,-43 ,-999 ,-999 ,-999 ,-999 ,-999 ,-43 ,-43 }, - {-999 ,31 ,36 ,34 ,54 ,-999 ,39 ,44 ,22 ,41 ,-999 ,23 ,16 ,-999 ,56 ,50 ,49 ,28 ,52 ,27 ,-999 ,42 ,58 ,-999 ,-999 ,33 ,-999 ,-999 ,35 ,26 ,18 ,24 ,46 ,-999 ,37 ,40 ,-999 ,-999 ,-999 ,55 ,-999 ,43 ,-999 ,-999 ,38 ,45 ,29 ,32 ,21 ,19 ,17 ,-999 ,51 ,30 ,-999 ,25 ,48 ,47 ,57 ,20 ,53 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-40 ,-999 ,-999 ,-999 ,-40 ,-40 ,-999 ,-999 ,-40 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-40 ,-40 ,-40 ,-40 ,-40 ,-999 ,-999 ,-40 ,-999 ,-999 ,-999 ,-999 ,-999 ,-40 ,-999 ,-999 ,-40 ,-40 ,-40 ,-999 ,-40 ,-999 ,-40 ,-40 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-40 ,-999 ,-999 ,-40 ,-999 ,-999 ,-999 ,-999 ,-999 ,-40 ,-40 }, - {-999 ,31 ,36 ,34 ,54 ,-999 ,39 ,44 ,22 ,41 ,-999 ,23 ,16 ,-999 ,56 ,50 ,49 ,28 ,52 ,27 ,-999 ,42 ,58 ,-999 ,-999 ,33 ,-999 ,-999 ,35 ,26 ,18 ,24 ,46 ,-999 ,37 ,40 ,-999 ,-999 ,-999 ,55 ,-999 ,43 ,-999 ,-999 ,38 ,45 ,29 ,32 ,21 ,19 ,17 ,-999 ,51 ,30 ,-999 ,25 ,48 ,47 ,57 ,20 ,53 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,211 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-83 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,212 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,213 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,214 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,215 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,216 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,217 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,218 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,219 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,220 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-63 ,-999 ,-999 ,-999 ,-63 ,-63 ,-999 ,-999 ,-63 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-63 ,-63 ,-63 ,-63 ,-63 ,-999 ,-999 ,-63 ,-999 ,-999 ,-999 ,-999 ,-999 ,-63 ,-999 ,-999 ,-63 ,-63 ,-63 ,-999 ,-63 ,-999 ,-63 ,-63 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-63 ,-999 ,-999 ,-63 ,-999 ,-999 ,-999 ,-999 ,-999 ,-63 ,-63 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-69 ,-999 ,-999 ,-999 ,-69 ,-69 ,-999 ,-999 ,-69 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-69 ,-69 ,-69 ,-69 ,-69 ,-999 ,-999 ,-69 ,-999 ,-999 ,-999 ,-999 ,-999 ,-69 ,-999 ,-999 ,-69 ,-69 ,-69 ,-999 ,-69 ,-999 ,-69 ,-69 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-69 ,-999 ,-999 ,-69 ,-999 ,-999 ,-999 ,-999 ,-999 ,-69 ,-69 }, - {-999 ,31 ,36 ,34 ,54 ,-999 ,39 ,44 ,22 ,41 ,-999 ,23 ,16 ,-999 ,56 ,50 ,49 ,28 ,52 ,27 ,-999 ,42 ,58 ,-999 ,-999 ,33 ,-999 ,-999 ,35 ,26 ,18 ,24 ,46 ,-999 ,37 ,40 ,-999 ,-999 ,-999 ,55 ,-999 ,43 ,-999 ,-999 ,38 ,45 ,29 ,32 ,21 ,19 ,17 ,-999 ,51 ,30 ,-999 ,25 ,48 ,47 ,57 ,20 ,53 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-58 ,-999 ,-999 ,-999 ,-58 ,-58 ,-999 ,-999 ,-58 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-58 ,-58 ,-58 ,-58 ,-58 ,-999 ,-999 ,-58 ,-999 ,-999 ,-999 ,-999 ,-999 ,-58 ,-999 ,-999 ,-58 ,-58 ,-58 ,-999 ,-58 ,-999 ,-58 ,-58 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-58 ,-999 ,-999 ,-58 ,-999 ,-999 ,-999 ,-999 ,-999 ,-58 ,-58 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-59 ,-999 ,-999 ,-999 ,-59 ,-59 ,-999 ,-999 ,-59 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-59 ,-59 ,-59 ,-59 ,-59 ,-999 ,-999 ,-59 ,-999 ,-999 ,-999 ,-999 ,-999 ,-59 ,-999 ,-999 ,-59 ,-59 ,-59 ,-999 ,-59 ,-999 ,-59 ,-59 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-59 ,-999 ,-999 ,-59 ,-999 ,-999 ,-999 ,-999 ,-999 ,-59 ,-59 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-62 ,-999 ,-999 ,-999 ,-62 ,-62 ,-999 ,-999 ,-62 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-62 ,-62 ,-62 ,-62 ,-62 ,-999 ,-999 ,-62 ,-999 ,-999 ,-999 ,-999 ,-999 ,-62 ,-999 ,-999 ,-62 ,-62 ,-62 ,-999 ,-62 ,-999 ,-62 ,-62 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-62 ,-999 ,-999 ,-62 ,-999 ,-999 ,-999 ,-999 ,-999 ,-62 ,-62 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-60 ,-999 ,-999 ,-999 ,-60 ,-60 ,-999 ,-999 ,-60 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-60 ,-60 ,-60 ,-60 ,-60 ,-999 ,-999 ,-60 ,-999 ,-999 ,-999 ,-999 ,-999 ,-60 ,-999 ,-999 ,-60 ,-60 ,-60 ,-999 ,-60 ,-999 ,-60 ,-60 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-60 ,-999 ,-999 ,-60 ,-999 ,-999 ,-999 ,-999 ,-999 ,-60 ,-60 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-66 ,-999 ,-999 ,-999 ,-66 ,-66 ,-999 ,-999 ,-66 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-66 ,-66 ,-66 ,-66 ,-66 ,-999 ,-999 ,-66 ,-999 ,-999 ,-999 ,-999 ,-999 ,-66 ,-999 ,-999 ,-66 ,-66 ,-66 ,-999 ,-66 ,-999 ,-66 ,-66 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-66 ,-999 ,-999 ,-66 ,-999 ,-999 ,-999 ,-999 ,-999 ,-66 ,-66 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-61 ,-999 ,-999 ,-999 ,-61 ,-61 ,-999 ,-999 ,-61 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-61 ,-61 ,-61 ,-61 ,-61 ,-999 ,-999 ,-61 ,-999 ,-999 ,-999 ,-999 ,-999 ,-61 ,-999 ,-999 ,-61 ,-61 ,-61 ,-999 ,-61 ,-999 ,-61 ,-61 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-61 ,-999 ,-999 ,-61 ,-999 ,-999 ,-999 ,-999 ,-999 ,-61 ,-61 }, - {-999 ,31 ,36 ,34 ,54 ,-999 ,39 ,44 ,22 ,41 ,-999 ,23 ,16 ,-999 ,56 ,50 ,49 ,28 ,52 ,27 ,-999 ,42 ,58 ,-999 ,-999 ,33 ,-999 ,-999 ,35 ,26 ,18 ,24 ,46 ,-999 ,37 ,40 ,-999 ,-999 ,-999 ,55 ,-999 ,43 ,-999 ,-999 ,38 ,45 ,29 ,32 ,21 ,19 ,17 ,-999 ,51 ,30 ,-999 ,25 ,48 ,47 ,57 ,20 ,53 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,223 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,224 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-67 ,-999 ,-999 ,-999 ,-67 ,-67 ,-999 ,-999 ,-67 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-67 ,-67 ,-67 ,-67 ,-67 ,-999 ,-999 ,-67 ,-999 ,-999 ,-999 ,-999 ,-999 ,-67 ,-999 ,-999 ,-67 ,-67 ,-67 ,-999 ,-67 ,-999 ,-67 ,-67 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-67 ,-999 ,-999 ,-67 ,-999 ,-999 ,-999 ,-999 ,-999 ,-67 ,-67 }, - {-999 ,-999 ,-999 ,-999 ,-999 ,-64 ,-999 ,-999 ,-999 ,-64 ,-64 ,-999 ,-999 ,-64 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-64 ,-64 ,-64 ,-64 ,-64 ,-999 ,-999 ,-64 ,-999 ,-999 ,-999 ,-999 ,-999 ,-64 ,-999 ,-999 ,-64 ,-64 ,-64 ,-999 ,-64 ,-999 ,-64 ,-64 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-64 ,-999 ,-999 ,-64 ,-999 ,-999 ,-999 ,-999 ,-999 ,-64 ,-64 } + {-999 ,55 ,20 ,-999 ,-999 ,-999 ,-999 ,24 ,56 ,37 ,-999 ,22 ,39 ,25 ,48 ,-999 ,49 ,53 ,41 ,19 ,-999 ,29 ,54 ,-999 ,36 ,-999 ,44 ,23 ,35 ,21 ,-999 ,58 ,-999 ,17 ,40 ,50 ,38 ,52 ,-999 ,46 ,28 ,18 ,27 ,57 ,-999 ,32 ,34 ,31 ,51 ,33 ,26 ,42 ,30 ,-999 ,-999 ,-999 ,-999 ,43 ,-999 ,47 ,45 ,59 ,16 }, + {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-1 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,-999 ,-999 ,-999 ,60 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-2 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-2 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {61 ,-999 ,-999 ,-999 ,-999 ,-4 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-4 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-4 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-6 ,-999 ,-999 ,-999 ,-999 ,-6 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,62 ,-999 ,-999 ,-999 ,-999 ,-6 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-6 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-8 ,-999 ,-999 ,63 ,-999 ,-8 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-8 ,-999 ,-999 ,-999 ,-999 ,-8 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-8 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-10 ,-999 ,-999 ,-10 ,-999 ,-10 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-10 ,-999 ,-999 ,-999 ,-999 ,-10 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,64 ,-999 ,-999 ,-10 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-12 ,-999 ,-999 ,-12 ,-999 ,-12 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-12 ,-999 ,-999 ,-999 ,-999 ,-12 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-12 ,-999 ,-999 ,-12 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-13 ,-999 ,-999 ,-13 ,-999 ,-13 ,-999 ,-999 ,-999 ,-999 ,69 ,-999 ,-999 ,-999 ,-999 ,-13 ,-999 ,-999 ,-999 ,-999 ,-13 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-13 ,-999 ,-999 ,-13 ,-999 ,67 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,70 ,-999 ,65 ,68 ,-999 ,66 ,-999 ,-999 ,-999 ,-999 }, + {-20 ,-999 ,-999 ,-20 ,-999 ,-20 ,-999 ,-999 ,-999 ,-999 ,-20 ,-999 ,-999 ,-999 ,-999 ,-20 ,-999 ,-999 ,-999 ,-999 ,-20 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-20 ,-999 ,-999 ,-20 ,-999 ,-20 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-20 ,-999 ,-20 ,-20 ,-999 ,-20 ,-999 ,-999 ,-999 ,-999 }, + {-21 ,-999 ,-999 ,-21 ,71 ,-21 ,-999 ,-999 ,-999 ,-999 ,-21 ,-999 ,-999 ,-999 ,-999 ,-21 ,-999 ,-999 ,-999 ,-999 ,-21 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-21 ,-999 ,-999 ,-21 ,-999 ,-21 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,72 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-21 ,-21 ,-21 ,-21 ,-999 ,-21 ,-999 ,-999 ,-999 ,-999 }, + {-24 ,-999 ,-999 ,-24 ,-24 ,-24 ,-999 ,-999 ,-999 ,-999 ,-24 ,-999 ,-999 ,-999 ,-999 ,-24 ,-999 ,-999 ,-999 ,-999 ,-24 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-24 ,-999 ,-999 ,-24 ,-999 ,-24 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-24 ,74 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,73 ,-24 ,-24 ,-24 ,-24 ,-999 ,-24 ,-999 ,-999 ,-999 ,-999 }, + {-27 ,-999 ,-999 ,-27 ,-27 ,-27 ,77 ,-999 ,-999 ,-999 ,-27 ,-999 ,-999 ,-999 ,-999 ,-27 ,-999 ,-999 ,-999 ,-999 ,-27 ,-999 ,-999 ,-999 ,-999 ,76 ,-999 ,-27 ,-999 ,-999 ,-27 ,-999 ,-27 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-27 ,-27 ,-999 ,-999 ,-999 ,-999 ,75 ,-999 ,-27 ,-27 ,-27 ,-27 ,-27 ,-999 ,-27 ,-999 ,-999 ,-999 ,-999 }, + {-31 ,-999 ,-999 ,-31 ,-31 ,-31 ,-31 ,-999 ,-999 ,-999 ,-31 ,-999 ,-999 ,-999 ,-999 ,-31 ,-999 ,-999 ,-999 ,-999 ,-31 ,-999 ,-999 ,-999 ,-999 ,-31 ,-999 ,-31 ,-999 ,-999 ,-31 ,-999 ,-31 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-31 ,-31 ,-999 ,-999 ,-999 ,-999 ,-31 ,-999 ,-31 ,-31 ,-31 ,-31 ,-31 ,-999 ,-31 ,-999 ,-999 ,-999 ,-999 }, + {-32 ,-999 ,-999 ,-32 ,-32 ,-32 ,-32 ,-999 ,-999 ,-999 ,-32 ,-999 ,-999 ,-999 ,-999 ,-32 ,-999 ,-999 ,-999 ,-999 ,-32 ,-999 ,-999 ,-999 ,-999 ,-32 ,-999 ,-32 ,-999 ,-999 ,-32 ,-999 ,-32 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-32 ,-32 ,-999 ,-999 ,-999 ,-999 ,-32 ,-999 ,-32 ,-32 ,-32 ,-32 ,-32 ,-999 ,-32 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,78 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,79 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,80 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,81 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,82 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-78 ,-999 ,-999 ,-78 ,-78 ,-78 ,-78 ,-999 ,-999 ,-999 ,-78 ,-999 ,-999 ,-999 ,-999 ,-78 ,-999 ,-999 ,-999 ,-999 ,-78 ,-999 ,-999 ,-999 ,-999 ,-78 ,-999 ,-78 ,-999 ,-999 ,-78 ,-999 ,-78 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-78 ,-78 ,-999 ,-999 ,-999 ,-999 ,-78 ,-999 ,-78 ,-78 ,-78 ,-78 ,-78 ,-999 ,-78 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,83 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,55 ,20 ,-999 ,-999 ,-999 ,-999 ,24 ,56 ,37 ,-999 ,22 ,39 ,25 ,48 ,-999 ,49 ,53 ,41 ,19 ,-999 ,-999 ,54 ,-999 ,36 ,-999 ,44 ,-999 ,35 ,21 ,-999 ,58 ,-999 ,17 ,40 ,50 ,38 ,52 ,-999 ,46 ,28 ,18 ,27 ,57 ,-999 ,-999 ,34 ,31 ,51 ,33 ,-999 ,42 ,-999 ,-999 ,-999 ,-999 ,-999 ,43 ,-999 ,47 ,45 ,59 ,16 }, + {-72 ,-999 ,-999 ,-72 ,-72 ,-72 ,-72 ,-999 ,-999 ,-999 ,-72 ,-999 ,-999 ,-999 ,-999 ,-72 ,-999 ,-999 ,-999 ,-999 ,-72 ,-999 ,-999 ,-999 ,-999 ,-72 ,-999 ,-72 ,-999 ,-999 ,-72 ,-999 ,-72 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-72 ,-72 ,-999 ,-999 ,-999 ,-999 ,-72 ,-999 ,-72 ,-72 ,-72 ,-72 ,-72 ,-999 ,-72 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,85 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,55 ,20 ,-999 ,-999 ,-999 ,-999 ,24 ,56 ,37 ,-999 ,22 ,39 ,25 ,48 ,-999 ,49 ,53 ,41 ,19 ,-999 ,-999 ,54 ,-999 ,36 ,-999 ,44 ,-999 ,35 ,21 ,-999 ,58 ,-999 ,17 ,40 ,50 ,38 ,52 ,-999 ,46 ,28 ,18 ,27 ,57 ,-999 ,-999 ,34 ,31 ,51 ,33 ,-999 ,42 ,-999 ,-999 ,-999 ,-999 ,-999 ,43 ,-999 ,47 ,45 ,59 ,16 }, + {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,87 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,88 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,55 ,20 ,-999 ,-999 ,-999 ,-999 ,24 ,56 ,37 ,-999 ,22 ,39 ,25 ,48 ,-999 ,49 ,53 ,41 ,19 ,-999 ,-999 ,54 ,-999 ,36 ,-999 ,44 ,-999 ,35 ,21 ,-999 ,58 ,-999 ,17 ,40 ,50 ,38 ,52 ,-999 ,46 ,28 ,18 ,27 ,57 ,-999 ,-999 ,34 ,31 ,51 ,33 ,-999 ,42 ,-999 ,-999 ,-999 ,-999 ,-999 ,43 ,-999 ,47 ,45 ,59 ,16 }, + {-999 ,55 ,20 ,-999 ,-999 ,-999 ,-999 ,24 ,56 ,37 ,-999 ,22 ,39 ,25 ,48 ,-999 ,49 ,53 ,41 ,19 ,-999 ,-999 ,54 ,-999 ,36 ,-999 ,44 ,-999 ,35 ,21 ,-999 ,58 ,-999 ,17 ,40 ,50 ,38 ,52 ,-999 ,46 ,28 ,18 ,27 ,57 ,-999 ,-999 ,34 ,31 ,51 ,33 ,-999 ,42 ,-999 ,-999 ,-999 ,-999 ,-999 ,43 ,-999 ,47 ,45 ,59 ,16 }, + {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,91 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,55 ,20 ,-999 ,-999 ,-999 ,-999 ,24 ,56 ,37 ,-999 ,22 ,39 ,25 ,48 ,-999 ,49 ,53 ,41 ,19 ,-999 ,-999 ,54 ,-999 ,36 ,-999 ,44 ,-999 ,35 ,21 ,-999 ,58 ,-999 ,17 ,40 ,50 ,38 ,52 ,-999 ,46 ,28 ,18 ,27 ,57 ,-999 ,-999 ,34 ,31 ,51 ,33 ,-999 ,42 ,-999 ,-999 ,-999 ,-999 ,-999 ,43 ,-999 ,47 ,45 ,59 ,16 }, + {-999 ,55 ,20 ,-999 ,-999 ,-999 ,-999 ,24 ,56 ,37 ,-999 ,22 ,39 ,25 ,48 ,-999 ,49 ,53 ,41 ,19 ,-999 ,29 ,54 ,-999 ,36 ,-999 ,44 ,23 ,35 ,21 ,-999 ,58 ,-999 ,17 ,40 ,50 ,38 ,52 ,-999 ,46 ,28 ,18 ,27 ,57 ,-999 ,32 ,34 ,31 ,51 ,33 ,26 ,42 ,30 ,-999 ,-999 ,-999 ,-999 ,43 ,-999 ,47 ,45 ,59 ,16 }, + {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,94 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,95 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,96 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,97 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,98 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,99 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,100 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-74 ,-999 ,-999 ,-74 ,-74 ,-74 ,-74 ,-999 ,-999 ,-999 ,-74 ,-999 ,-999 ,-999 ,-999 ,-74 ,-999 ,-999 ,-999 ,-999 ,-74 ,-999 ,-999 ,-999 ,-999 ,-74 ,-999 ,-74 ,-999 ,-999 ,-74 ,-999 ,-74 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-74 ,-74 ,-999 ,-999 ,-999 ,-999 ,-74 ,-999 ,-74 ,-74 ,-74 ,-74 ,-74 ,-999 ,-74 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,101 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,102 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,103 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-77 ,-999 ,-999 ,-77 ,-77 ,-77 ,-77 ,-999 ,-999 ,-999 ,-77 ,-999 ,-999 ,-999 ,-999 ,-77 ,-999 ,-999 ,-999 ,-999 ,-77 ,-999 ,-999 ,-999 ,-999 ,-77 ,-999 ,-77 ,-999 ,-999 ,-77 ,-999 ,-77 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-77 ,-77 ,-999 ,-999 ,-999 ,-999 ,-77 ,-999 ,-77 ,-77 ,-77 ,-77 ,-77 ,-999 ,-77 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,104 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,105 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,106 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-76 ,-999 ,-999 ,-76 ,-76 ,-76 ,-76 ,-999 ,-999 ,-999 ,-76 ,-999 ,-999 ,-999 ,-999 ,-76 ,-999 ,-999 ,-999 ,-999 ,-76 ,-999 ,-999 ,-999 ,-999 ,-76 ,-999 ,-76 ,-999 ,-999 ,-76 ,-999 ,-76 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-76 ,-76 ,-999 ,-999 ,-999 ,-999 ,-76 ,-999 ,-76 ,-76 ,-76 ,-76 ,-76 ,-999 ,-76 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,107 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-73 ,-999 ,-999 ,-73 ,-73 ,-73 ,-73 ,-999 ,-999 ,-999 ,-73 ,-999 ,-999 ,-999 ,-999 ,-73 ,-999 ,-999 ,-999 ,-999 ,-73 ,-999 ,-999 ,-999 ,-999 ,-73 ,-999 ,-73 ,-999 ,-999 ,-73 ,-999 ,-73 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-73 ,-73 ,-999 ,-999 ,-999 ,-999 ,-73 ,-999 ,-73 ,-73 ,-73 ,-73 ,-73 ,-999 ,-73 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,108 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-75 ,-999 ,-999 ,-75 ,-75 ,-75 ,-75 ,-999 ,-999 ,-999 ,-75 ,-999 ,-999 ,-999 ,-999 ,-75 ,-999 ,-999 ,-999 ,-999 ,-75 ,-999 ,-999 ,-999 ,-999 ,-75 ,-999 ,-75 ,-999 ,-999 ,-75 ,-999 ,-75 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-75 ,-75 ,-999 ,-999 ,-999 ,-999 ,-75 ,-999 ,-75 ,-75 ,-75 ,-75 ,-75 ,-999 ,-75 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,109 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,110 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-79 ,-999 ,-999 ,-79 ,-79 ,-79 ,-79 ,-999 ,-999 ,-999 ,-79 ,-999 ,-999 ,-999 ,-999 ,-79 ,-999 ,-999 ,-999 ,-999 ,-79 ,-999 ,-999 ,-999 ,-999 ,-79 ,-999 ,-79 ,-999 ,-999 ,-79 ,-999 ,-79 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-79 ,-79 ,-999 ,-999 ,-999 ,-999 ,-79 ,-999 ,-79 ,-79 ,-79 ,-79 ,-79 ,-999 ,-79 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,111 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-71 ,-999 ,-999 ,-71 ,-71 ,-71 ,-71 ,-999 ,-999 ,-999 ,-71 ,-999 ,-999 ,-999 ,-999 ,-71 ,-999 ,-999 ,-999 ,-999 ,-71 ,-999 ,-999 ,-999 ,-999 ,-71 ,-999 ,-71 ,-999 ,-999 ,-71 ,-999 ,-71 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-71 ,-71 ,-999 ,-999 ,-999 ,-999 ,-71 ,-999 ,-71 ,-71 ,-71 ,-71 ,-71 ,-999 ,-71 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,112 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,55 ,20 ,-999 ,-999 ,-999 ,-999 ,24 ,56 ,37 ,-999 ,22 ,39 ,25 ,48 ,-999 ,49 ,53 ,41 ,19 ,-999 ,29 ,54 ,-999 ,36 ,-999 ,44 ,23 ,35 ,21 ,-999 ,58 ,-999 ,17 ,40 ,50 ,38 ,52 ,-999 ,46 ,28 ,18 ,27 ,57 ,-999 ,32 ,34 ,31 ,51 ,33 ,26 ,42 ,30 ,-999 ,-999 ,-999 ,-999 ,43 ,-999 ,47 ,45 ,59 ,16 }, + {-999 ,55 ,20 ,-999 ,-999 ,-999 ,-999 ,24 ,56 ,37 ,-999 ,22 ,39 ,25 ,48 ,-999 ,49 ,53 ,41 ,19 ,-999 ,29 ,54 ,-999 ,36 ,-999 ,44 ,23 ,35 ,21 ,-999 ,58 ,-999 ,17 ,40 ,50 ,38 ,52 ,-999 ,46 ,28 ,18 ,27 ,57 ,-999 ,32 ,34 ,31 ,51 ,33 ,26 ,42 ,30 ,-999 ,-999 ,-999 ,-999 ,43 ,-999 ,47 ,45 ,59 ,16 }, + {-999 ,55 ,20 ,-999 ,-999 ,-999 ,-999 ,24 ,56 ,37 ,-999 ,22 ,39 ,25 ,48 ,-999 ,49 ,53 ,41 ,19 ,-999 ,29 ,54 ,-999 ,36 ,-999 ,44 ,23 ,35 ,21 ,-999 ,58 ,-999 ,17 ,40 ,50 ,38 ,52 ,-999 ,46 ,28 ,18 ,27 ,57 ,-999 ,32 ,34 ,31 ,51 ,33 ,26 ,42 ,30 ,-999 ,-999 ,-999 ,-999 ,43 ,-999 ,47 ,45 ,59 ,16 }, + {-999 ,55 ,20 ,-999 ,-999 ,-999 ,-999 ,24 ,56 ,37 ,-999 ,22 ,39 ,25 ,48 ,-999 ,49 ,53 ,41 ,19 ,-999 ,29 ,54 ,-999 ,36 ,-999 ,44 ,23 ,35 ,21 ,-999 ,58 ,-999 ,17 ,40 ,50 ,38 ,52 ,-999 ,46 ,28 ,18 ,27 ,57 ,-999 ,32 ,34 ,31 ,51 ,33 ,26 ,42 ,30 ,-999 ,-999 ,-999 ,-999 ,43 ,-999 ,47 ,45 ,59 ,16 }, + {-999 ,55 ,20 ,-999 ,-999 ,-999 ,-999 ,24 ,56 ,37 ,-999 ,22 ,39 ,25 ,48 ,-999 ,49 ,53 ,41 ,19 ,-999 ,29 ,54 ,-999 ,36 ,-999 ,44 ,23 ,35 ,21 ,-999 ,58 ,-999 ,17 ,40 ,50 ,38 ,52 ,-999 ,46 ,28 ,18 ,27 ,57 ,-999 ,32 ,34 ,31 ,51 ,33 ,26 ,42 ,30 ,-999 ,-999 ,-999 ,-999 ,43 ,-999 ,47 ,45 ,59 ,16 }, + {-999 ,55 ,20 ,-999 ,-999 ,-999 ,-999 ,24 ,56 ,37 ,-999 ,22 ,39 ,25 ,48 ,-999 ,49 ,53 ,41 ,19 ,-999 ,29 ,54 ,-999 ,36 ,-999 ,44 ,23 ,35 ,21 ,-999 ,58 ,-999 ,17 ,40 ,50 ,38 ,52 ,-999 ,46 ,28 ,18 ,27 ,57 ,-999 ,32 ,34 ,31 ,51 ,33 ,26 ,42 ,30 ,-999 ,-999 ,-999 ,-999 ,43 ,-999 ,47 ,45 ,59 ,16 }, + {-999 ,55 ,20 ,-999 ,-999 ,-999 ,-999 ,24 ,56 ,37 ,-999 ,22 ,39 ,25 ,48 ,-999 ,49 ,53 ,41 ,19 ,-999 ,29 ,54 ,-999 ,36 ,-999 ,44 ,23 ,35 ,21 ,-999 ,58 ,-999 ,17 ,40 ,50 ,38 ,52 ,-999 ,46 ,28 ,18 ,27 ,57 ,-999 ,32 ,34 ,31 ,51 ,33 ,26 ,42 ,30 ,-999 ,-999 ,-999 ,-999 ,43 ,-999 ,47 ,45 ,59 ,16 }, + {-999 ,55 ,20 ,-999 ,-999 ,-999 ,-999 ,24 ,56 ,37 ,-999 ,22 ,39 ,25 ,48 ,-999 ,49 ,53 ,41 ,19 ,-999 ,29 ,54 ,-999 ,36 ,-999 ,44 ,23 ,35 ,21 ,-999 ,58 ,-999 ,17 ,40 ,50 ,38 ,52 ,-999 ,46 ,28 ,18 ,27 ,57 ,-999 ,32 ,34 ,31 ,51 ,33 ,26 ,42 ,30 ,-999 ,-999 ,-999 ,-999 ,43 ,-999 ,47 ,45 ,59 ,16 }, + {-999 ,55 ,20 ,-999 ,-999 ,-999 ,-999 ,24 ,56 ,37 ,-999 ,22 ,39 ,25 ,48 ,-999 ,49 ,53 ,41 ,19 ,-999 ,29 ,54 ,-999 ,36 ,-999 ,44 ,23 ,35 ,21 ,-999 ,58 ,-999 ,17 ,40 ,50 ,38 ,52 ,-999 ,46 ,28 ,18 ,27 ,57 ,-999 ,32 ,34 ,31 ,51 ,33 ,26 ,42 ,30 ,-999 ,-999 ,-999 ,-999 ,43 ,-999 ,47 ,45 ,59 ,16 }, + {-999 ,55 ,20 ,-999 ,-999 ,-999 ,-999 ,24 ,56 ,37 ,-999 ,22 ,39 ,25 ,48 ,-999 ,49 ,53 ,41 ,19 ,-999 ,29 ,54 ,-999 ,36 ,-999 ,44 ,23 ,35 ,21 ,-999 ,58 ,-999 ,17 ,40 ,50 ,38 ,52 ,-999 ,46 ,28 ,18 ,27 ,57 ,-999 ,32 ,34 ,31 ,51 ,33 ,26 ,42 ,30 ,-999 ,-999 ,-999 ,-999 ,43 ,-999 ,47 ,45 ,59 ,16 }, + {-999 ,55 ,20 ,-999 ,-999 ,-999 ,-999 ,24 ,56 ,37 ,-999 ,22 ,39 ,25 ,48 ,-999 ,49 ,53 ,41 ,19 ,-999 ,29 ,54 ,-999 ,36 ,-999 ,44 ,23 ,35 ,21 ,-999 ,58 ,-999 ,17 ,40 ,50 ,38 ,52 ,-999 ,46 ,28 ,18 ,27 ,57 ,-999 ,32 ,34 ,31 ,51 ,33 ,26 ,42 ,30 ,-999 ,-999 ,-999 ,-999 ,43 ,-999 ,47 ,45 ,59 ,16 }, + {-999 ,55 ,20 ,-999 ,-999 ,-999 ,-999 ,24 ,56 ,37 ,-999 ,22 ,39 ,25 ,48 ,-999 ,49 ,53 ,41 ,19 ,-999 ,29 ,54 ,-999 ,36 ,-999 ,44 ,23 ,35 ,21 ,-999 ,58 ,-999 ,17 ,40 ,50 ,38 ,52 ,-999 ,46 ,28 ,18 ,27 ,57 ,-999 ,32 ,34 ,31 ,51 ,33 ,26 ,42 ,30 ,-999 ,-999 ,-999 ,-999 ,43 ,-999 ,47 ,45 ,59 ,16 }, + {-999 ,55 ,20 ,-999 ,-999 ,-999 ,-999 ,24 ,56 ,37 ,-999 ,22 ,39 ,25 ,48 ,-999 ,49 ,53 ,41 ,19 ,-999 ,29 ,54 ,-999 ,36 ,-999 ,44 ,23 ,35 ,21 ,-999 ,58 ,-999 ,17 ,40 ,50 ,38 ,52 ,-999 ,46 ,28 ,18 ,27 ,57 ,-999 ,32 ,34 ,31 ,51 ,33 ,26 ,42 ,30 ,-999 ,-999 ,-999 ,-999 ,43 ,-999 ,47 ,45 ,59 ,16 }, + {-999 ,55 ,20 ,-999 ,-999 ,-999 ,-999 ,24 ,56 ,37 ,-999 ,22 ,39 ,25 ,48 ,-999 ,49 ,53 ,41 ,19 ,-999 ,29 ,54 ,-999 ,36 ,-999 ,44 ,23 ,35 ,21 ,-999 ,58 ,-999 ,17 ,40 ,50 ,38 ,52 ,-999 ,46 ,28 ,18 ,27 ,57 ,-999 ,32 ,34 ,31 ,51 ,33 ,26 ,42 ,30 ,-999 ,-999 ,-999 ,-999 ,43 ,-999 ,47 ,45 ,59 ,16 }, + {-999 ,55 ,20 ,-999 ,-999 ,-999 ,-999 ,24 ,56 ,37 ,-999 ,22 ,39 ,25 ,48 ,-999 ,49 ,53 ,41 ,19 ,-999 ,29 ,54 ,-999 ,36 ,-999 ,44 ,23 ,35 ,21 ,-999 ,58 ,-999 ,17 ,40 ,50 ,38 ,52 ,-999 ,46 ,28 ,18 ,27 ,57 ,-999 ,32 ,34 ,31 ,51 ,33 ,26 ,42 ,30 ,-999 ,-999 ,-999 ,-999 ,43 ,-999 ,47 ,45 ,59 ,16 }, + {-999 ,55 ,20 ,-999 ,-999 ,-999 ,-999 ,24 ,56 ,37 ,-999 ,22 ,39 ,25 ,48 ,-999 ,49 ,53 ,41 ,19 ,-999 ,29 ,54 ,-999 ,36 ,-999 ,44 ,23 ,35 ,21 ,-999 ,58 ,-999 ,17 ,40 ,50 ,38 ,52 ,-999 ,46 ,28 ,18 ,27 ,57 ,-999 ,32 ,34 ,31 ,51 ,33 ,26 ,42 ,30 ,-999 ,-999 ,-999 ,-999 ,43 ,-999 ,47 ,45 ,59 ,16 }, + {-999 ,55 ,20 ,-999 ,-999 ,-999 ,-999 ,24 ,56 ,37 ,-999 ,22 ,39 ,25 ,48 ,-999 ,49 ,53 ,41 ,19 ,-999 ,29 ,54 ,-999 ,36 ,-999 ,44 ,23 ,35 ,21 ,-999 ,58 ,-999 ,17 ,40 ,50 ,38 ,52 ,-999 ,46 ,28 ,18 ,27 ,57 ,-999 ,32 ,34 ,31 ,51 ,33 ,26 ,42 ,30 ,-999 ,-999 ,-999 ,-999 ,43 ,-999 ,47 ,45 ,59 ,16 }, + {-999 ,55 ,20 ,-999 ,-999 ,-999 ,-999 ,24 ,56 ,37 ,-999 ,22 ,39 ,25 ,48 ,-999 ,49 ,53 ,41 ,19 ,-999 ,29 ,54 ,-999 ,36 ,-999 ,44 ,23 ,35 ,21 ,-999 ,58 ,-999 ,17 ,40 ,50 ,38 ,52 ,-999 ,46 ,28 ,18 ,27 ,57 ,-999 ,32 ,34 ,31 ,51 ,33 ,26 ,42 ,30 ,-999 ,-999 ,-999 ,-999 ,43 ,-999 ,47 ,45 ,59 ,16 }, + {-999 ,55 ,20 ,-999 ,-999 ,-999 ,-999 ,24 ,56 ,37 ,-999 ,22 ,39 ,25 ,48 ,-999 ,49 ,53 ,41 ,19 ,-999 ,29 ,54 ,134 ,36 ,-999 ,44 ,23 ,35 ,21 ,-999 ,58 ,-999 ,17 ,40 ,50 ,38 ,52 ,-999 ,46 ,28 ,18 ,27 ,57 ,-999 ,32 ,34 ,31 ,51 ,33 ,26 ,42 ,30 ,-999 ,-999 ,-999 ,-999 ,43 ,-999 ,47 ,45 ,59 ,16 }, + {-999 ,55 ,20 ,-999 ,-999 ,-999 ,-999 ,24 ,56 ,37 ,-999 ,22 ,39 ,25 ,48 ,-999 ,49 ,53 ,41 ,19 ,-999 ,29 ,54 ,134 ,36 ,-999 ,44 ,23 ,35 ,21 ,-999 ,58 ,-999 ,17 ,40 ,50 ,38 ,52 ,-999 ,46 ,28 ,18 ,27 ,57 ,-999 ,32 ,34 ,31 ,51 ,33 ,26 ,42 ,30 ,-999 ,-999 ,-999 ,-999 ,43 ,-999 ,47 ,45 ,59 ,16 }, + {-999 ,55 ,20 ,-999 ,-999 ,-999 ,-999 ,24 ,56 ,37 ,-999 ,22 ,39 ,25 ,48 ,-999 ,49 ,53 ,41 ,19 ,-999 ,29 ,54 ,-999 ,36 ,-999 ,44 ,23 ,35 ,21 ,-999 ,58 ,-999 ,17 ,40 ,50 ,38 ,52 ,-999 ,46 ,28 ,18 ,27 ,57 ,-999 ,32 ,34 ,31 ,51 ,33 ,26 ,42 ,30 ,-999 ,-999 ,-999 ,-999 ,43 ,-999 ,47 ,45 ,59 ,16 }, + {-999 ,55 ,20 ,-999 ,-999 ,-999 ,-999 ,24 ,56 ,37 ,-999 ,22 ,39 ,25 ,48 ,-999 ,49 ,53 ,41 ,19 ,-999 ,29 ,54 ,-999 ,36 ,-999 ,44 ,23 ,35 ,21 ,-999 ,58 ,-999 ,17 ,40 ,50 ,38 ,52 ,-999 ,46 ,28 ,18 ,27 ,57 ,-999 ,32 ,34 ,31 ,51 ,33 ,26 ,42 ,30 ,-999 ,-999 ,-999 ,-999 ,43 ,-999 ,47 ,45 ,59 ,16 }, + {-999 ,55 ,20 ,-999 ,-999 ,-999 ,-999 ,24 ,56 ,37 ,-999 ,22 ,39 ,25 ,48 ,-999 ,49 ,53 ,41 ,19 ,-999 ,29 ,54 ,-999 ,36 ,-999 ,44 ,23 ,35 ,21 ,-999 ,58 ,-999 ,17 ,40 ,50 ,38 ,52 ,-999 ,46 ,28 ,18 ,27 ,57 ,-999 ,32 ,34 ,31 ,51 ,33 ,26 ,42 ,30 ,-999 ,-999 ,-999 ,-999 ,43 ,-999 ,47 ,45 ,59 ,16 }, + {-999 ,55 ,20 ,-999 ,-999 ,-999 ,-999 ,24 ,56 ,37 ,-999 ,22 ,39 ,25 ,48 ,-999 ,49 ,53 ,41 ,19 ,-999 ,29 ,54 ,-999 ,36 ,-999 ,44 ,23 ,35 ,21 ,-999 ,58 ,-999 ,17 ,40 ,50 ,38 ,52 ,-999 ,46 ,28 ,18 ,27 ,57 ,-999 ,32 ,34 ,31 ,51 ,33 ,26 ,42 ,30 ,-999 ,-999 ,-999 ,-999 ,43 ,-999 ,47 ,45 ,59 ,16 }, + {-37 ,-999 ,-999 ,-37 ,-37 ,-37 ,-37 ,-999 ,-999 ,-999 ,-37 ,-999 ,-999 ,-999 ,-999 ,-37 ,-999 ,-999 ,-999 ,-999 ,-37 ,-999 ,-999 ,-999 ,-999 ,-37 ,-999 ,-37 ,-999 ,-999 ,-37 ,-999 ,-37 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-37 ,-37 ,-999 ,-999 ,-999 ,-999 ,-37 ,-999 ,-37 ,-37 ,-37 ,-37 ,-37 ,-999 ,-37 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,55 ,20 ,-999 ,-999 ,-999 ,-999 ,24 ,56 ,37 ,-999 ,22 ,39 ,25 ,48 ,-999 ,49 ,53 ,41 ,19 ,-999 ,29 ,54 ,-999 ,36 ,-999 ,44 ,23 ,35 ,21 ,-999 ,58 ,-999 ,17 ,40 ,50 ,38 ,52 ,144 ,46 ,28 ,18 ,27 ,57 ,-999 ,32 ,34 ,31 ,51 ,33 ,26 ,42 ,30 ,-999 ,-999 ,-999 ,-999 ,43 ,-999 ,47 ,45 ,59 ,16 }, + {-36 ,-999 ,-999 ,-36 ,-36 ,-36 ,-36 ,-999 ,-999 ,-999 ,-36 ,-999 ,-999 ,-999 ,-999 ,-36 ,-999 ,-999 ,-999 ,-999 ,-36 ,-999 ,-999 ,-999 ,-999 ,-36 ,-999 ,-36 ,-999 ,-999 ,-36 ,-999 ,-36 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-36 ,-36 ,-999 ,-999 ,-999 ,-999 ,-36 ,-999 ,-36 ,-36 ,-36 ,-36 ,-36 ,-999 ,-36 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,55 ,20 ,-999 ,-999 ,-999 ,-999 ,24 ,56 ,37 ,-999 ,22 ,39 ,25 ,48 ,-999 ,49 ,53 ,41 ,19 ,-999 ,29 ,54 ,-999 ,36 ,-999 ,44 ,23 ,35 ,21 ,-999 ,58 ,-999 ,17 ,40 ,50 ,38 ,52 ,-999 ,46 ,28 ,18 ,27 ,57 ,-999 ,32 ,34 ,31 ,51 ,33 ,26 ,42 ,30 ,-999 ,-999 ,-999 ,-999 ,43 ,-999 ,47 ,45 ,59 ,16 }, + {-999 ,55 ,20 ,-999 ,-999 ,-999 ,-999 ,24 ,56 ,37 ,-999 ,22 ,39 ,25 ,48 ,-999 ,49 ,53 ,41 ,19 ,-999 ,29 ,54 ,-999 ,36 ,-999 ,44 ,23 ,35 ,21 ,-999 ,58 ,-999 ,17 ,40 ,50 ,38 ,52 ,-999 ,46 ,28 ,18 ,27 ,57 ,-999 ,32 ,34 ,31 ,51 ,33 ,26 ,42 ,30 ,-999 ,-999 ,-999 ,-999 ,43 ,-999 ,47 ,45 ,59 ,16 }, + {-35 ,-999 ,-999 ,-35 ,-35 ,-35 ,-35 ,-999 ,-999 ,-999 ,-35 ,-999 ,-999 ,-999 ,-999 ,-35 ,-999 ,-999 ,-999 ,-999 ,-35 ,-999 ,-999 ,-999 ,-999 ,-35 ,-999 ,-35 ,-999 ,-999 ,-35 ,-999 ,-35 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-35 ,-35 ,-999 ,-999 ,-999 ,-999 ,-35 ,-999 ,-35 ,-35 ,-35 ,-35 ,-35 ,-999 ,-35 ,-999 ,-999 ,-999 ,-999 }, + {-33 ,-999 ,-999 ,-33 ,-33 ,-33 ,-33 ,-999 ,-999 ,-999 ,-33 ,-999 ,-999 ,-999 ,-999 ,-33 ,-999 ,-999 ,-999 ,-999 ,-33 ,-999 ,-999 ,-999 ,-999 ,-33 ,-999 ,-33 ,-999 ,-999 ,-33 ,-999 ,-33 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-33 ,-33 ,-999 ,-999 ,-999 ,-999 ,-33 ,-999 ,-33 ,-33 ,-33 ,-33 ,-33 ,-999 ,-33 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,55 ,20 ,-999 ,-999 ,-999 ,-999 ,24 ,56 ,37 ,-999 ,22 ,39 ,25 ,48 ,-999 ,49 ,53 ,41 ,19 ,-999 ,29 ,54 ,-999 ,36 ,-999 ,44 ,23 ,35 ,21 ,-999 ,58 ,-999 ,17 ,40 ,50 ,38 ,52 ,-999 ,46 ,28 ,18 ,27 ,57 ,-999 ,32 ,34 ,31 ,51 ,33 ,26 ,42 ,30 ,-999 ,-999 ,-999 ,-999 ,43 ,-999 ,47 ,45 ,59 ,16 }, + {-34 ,-999 ,-999 ,-34 ,-34 ,-34 ,-34 ,-999 ,-999 ,-999 ,-34 ,-999 ,-999 ,-999 ,-999 ,-34 ,-999 ,-999 ,-999 ,-999 ,-34 ,-999 ,-999 ,-999 ,-999 ,-34 ,-999 ,-34 ,-999 ,-999 ,-34 ,-999 ,-34 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-34 ,-34 ,-999 ,-999 ,-999 ,-999 ,-34 ,-999 ,-34 ,-34 ,-34 ,-34 ,-34 ,-999 ,-34 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,148 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,55 ,20 ,-999 ,-999 ,-999 ,-999 ,24 ,56 ,37 ,-999 ,22 ,39 ,25 ,48 ,-999 ,49 ,53 ,41 ,19 ,-999 ,29 ,54 ,-999 ,36 ,-999 ,44 ,23 ,35 ,21 ,-999 ,58 ,-999 ,17 ,40 ,50 ,38 ,52 ,-999 ,46 ,28 ,18 ,27 ,57 ,-999 ,32 ,34 ,31 ,51 ,33 ,26 ,42 ,30 ,-999 ,-999 ,-999 ,-999 ,43 ,-999 ,47 ,45 ,59 ,16 }, + {-999 ,55 ,20 ,-999 ,-999 ,-999 ,-999 ,24 ,56 ,37 ,-999 ,22 ,39 ,25 ,48 ,-999 ,49 ,53 ,41 ,19 ,-999 ,29 ,54 ,-999 ,36 ,-999 ,44 ,23 ,35 ,21 ,-999 ,58 ,-999 ,17 ,40 ,50 ,38 ,52 ,-999 ,46 ,28 ,18 ,27 ,57 ,-999 ,32 ,34 ,31 ,51 ,33 ,26 ,42 ,30 ,-999 ,-999 ,-999 ,-999 ,43 ,-999 ,47 ,45 ,59 ,16 }, + {-999 ,55 ,20 ,-999 ,-999 ,-999 ,-999 ,24 ,56 ,37 ,-999 ,22 ,39 ,25 ,48 ,-999 ,49 ,53 ,41 ,19 ,-999 ,29 ,54 ,134 ,36 ,-999 ,44 ,23 ,35 ,21 ,-999 ,58 ,-999 ,17 ,40 ,50 ,38 ,52 ,-999 ,46 ,28 ,18 ,27 ,57 ,-999 ,32 ,34 ,31 ,51 ,33 ,26 ,42 ,30 ,-999 ,-999 ,-999 ,-999 ,43 ,-999 ,47 ,45 ,59 ,16 }, + {-999 ,55 ,20 ,-999 ,-999 ,-999 ,-999 ,24 ,56 ,37 ,-999 ,22 ,39 ,25 ,48 ,-999 ,49 ,53 ,41 ,19 ,-999 ,29 ,54 ,-999 ,36 ,-999 ,44 ,23 ,35 ,21 ,-999 ,58 ,-999 ,17 ,40 ,50 ,38 ,52 ,-999 ,46 ,28 ,18 ,27 ,57 ,-999 ,32 ,34 ,31 ,51 ,33 ,26 ,42 ,30 ,-999 ,-999 ,-999 ,-999 ,43 ,-999 ,47 ,45 ,59 ,16 }, + {-999 ,55 ,20 ,-999 ,-999 ,-999 ,-999 ,24 ,56 ,37 ,-999 ,22 ,39 ,25 ,48 ,-999 ,49 ,53 ,41 ,19 ,-999 ,29 ,54 ,-999 ,36 ,-999 ,44 ,23 ,35 ,21 ,-999 ,58 ,-999 ,17 ,40 ,50 ,38 ,52 ,-999 ,46 ,28 ,18 ,27 ,57 ,-999 ,32 ,34 ,31 ,51 ,33 ,26 ,42 ,30 ,-999 ,-999 ,-999 ,-999 ,43 ,-999 ,47 ,45 ,59 ,16 }, + {-999 ,55 ,20 ,-999 ,-999 ,-999 ,-999 ,24 ,56 ,37 ,-999 ,22 ,39 ,25 ,48 ,-999 ,49 ,53 ,41 ,19 ,-999 ,29 ,54 ,-999 ,36 ,-999 ,44 ,23 ,35 ,21 ,-999 ,58 ,-999 ,17 ,40 ,50 ,38 ,52 ,-999 ,46 ,28 ,18 ,27 ,57 ,-999 ,32 ,34 ,31 ,51 ,33 ,26 ,42 ,30 ,-999 ,-999 ,-999 ,-999 ,43 ,-999 ,47 ,45 ,59 ,16 }, + {-999 ,55 ,20 ,-999 ,-999 ,-999 ,-999 ,24 ,56 ,37 ,-999 ,22 ,39 ,25 ,48 ,-999 ,49 ,53 ,41 ,19 ,-999 ,29 ,54 ,-999 ,36 ,-999 ,44 ,23 ,35 ,21 ,-999 ,58 ,-999 ,17 ,40 ,50 ,38 ,52 ,-999 ,46 ,28 ,18 ,27 ,57 ,-999 ,32 ,34 ,31 ,51 ,33 ,26 ,42 ,30 ,-999 ,-999 ,-999 ,-999 ,43 ,-999 ,47 ,45 ,59 ,16 }, + {-999 ,55 ,20 ,-999 ,-999 ,-999 ,-999 ,24 ,56 ,37 ,-999 ,22 ,39 ,25 ,48 ,-999 ,49 ,53 ,41 ,19 ,-999 ,29 ,54 ,-999 ,36 ,-999 ,44 ,23 ,35 ,21 ,-999 ,58 ,-999 ,17 ,40 ,50 ,38 ,52 ,-999 ,46 ,28 ,18 ,27 ,57 ,-999 ,32 ,34 ,31 ,51 ,33 ,26 ,42 ,30 ,-999 ,-999 ,-999 ,-999 ,43 ,-999 ,47 ,45 ,59 ,16 }, + {-999 ,55 ,20 ,-999 ,-999 ,-999 ,-999 ,24 ,56 ,37 ,-999 ,22 ,39 ,25 ,48 ,-999 ,49 ,53 ,41 ,19 ,-999 ,29 ,54 ,-999 ,36 ,-999 ,44 ,23 ,35 ,21 ,-999 ,58 ,-999 ,17 ,40 ,50 ,38 ,52 ,-999 ,46 ,28 ,18 ,27 ,57 ,-999 ,32 ,34 ,31 ,51 ,33 ,26 ,42 ,30 ,-999 ,-999 ,-999 ,-999 ,43 ,-999 ,47 ,45 ,59 ,16 }, + {-999 ,55 ,20 ,-999 ,-999 ,-999 ,-999 ,24 ,56 ,37 ,-999 ,22 ,39 ,25 ,48 ,-999 ,49 ,53 ,41 ,19 ,-999 ,29 ,54 ,-999 ,36 ,-999 ,44 ,23 ,35 ,21 ,-999 ,58 ,-999 ,17 ,40 ,50 ,38 ,52 ,144 ,46 ,28 ,18 ,27 ,57 ,-999 ,32 ,34 ,31 ,51 ,33 ,26 ,42 ,30 ,-999 ,-999 ,-999 ,-999 ,43 ,-999 ,47 ,45 ,59 ,16 }, + {-999 ,55 ,20 ,-999 ,-999 ,-999 ,-999 ,24 ,56 ,37 ,-999 ,22 ,39 ,25 ,48 ,-999 ,49 ,53 ,41 ,19 ,-999 ,29 ,54 ,-999 ,36 ,-999 ,44 ,23 ,35 ,21 ,-999 ,58 ,-999 ,17 ,40 ,50 ,38 ,52 ,-999 ,46 ,28 ,18 ,27 ,57 ,-999 ,32 ,34 ,31 ,51 ,33 ,26 ,42 ,30 ,-999 ,-999 ,-999 ,-999 ,43 ,-999 ,47 ,45 ,59 ,16 }, + {-999 ,55 ,20 ,-999 ,-999 ,-999 ,-999 ,24 ,56 ,37 ,-999 ,22 ,39 ,25 ,48 ,-999 ,49 ,53 ,41 ,19 ,-999 ,29 ,54 ,-999 ,36 ,-999 ,44 ,23 ,35 ,21 ,-999 ,58 ,-999 ,17 ,40 ,50 ,38 ,52 ,-999 ,46 ,28 ,18 ,27 ,57 ,-999 ,32 ,34 ,31 ,51 ,33 ,26 ,42 ,30 ,-999 ,-999 ,-999 ,-999 ,43 ,-999 ,47 ,45 ,59 ,16 }, + {-999 ,55 ,20 ,-999 ,-999 ,-999 ,-999 ,24 ,56 ,37 ,-999 ,22 ,39 ,25 ,48 ,-999 ,49 ,53 ,41 ,19 ,-999 ,29 ,54 ,-999 ,36 ,-999 ,44 ,23 ,35 ,21 ,-999 ,58 ,-999 ,17 ,40 ,50 ,38 ,52 ,-999 ,46 ,28 ,18 ,27 ,57 ,-999 ,32 ,34 ,31 ,51 ,33 ,26 ,42 ,30 ,-999 ,-999 ,-999 ,-999 ,43 ,-999 ,47 ,45 ,59 ,16 }, + {-999 ,55 ,20 ,-999 ,-999 ,-999 ,-999 ,24 ,56 ,37 ,-999 ,22 ,39 ,25 ,48 ,-999 ,49 ,53 ,41 ,19 ,-999 ,29 ,54 ,-999 ,36 ,-999 ,44 ,23 ,35 ,21 ,-999 ,58 ,-999 ,17 ,40 ,50 ,38 ,52 ,-999 ,46 ,28 ,18 ,27 ,57 ,-999 ,32 ,34 ,31 ,51 ,33 ,26 ,42 ,30 ,-999 ,-999 ,-999 ,-999 ,43 ,-999 ,47 ,45 ,59 ,16 }, + {-999 ,55 ,20 ,-999 ,-999 ,-999 ,-999 ,24 ,56 ,37 ,-999 ,22 ,39 ,25 ,48 ,-999 ,49 ,53 ,41 ,19 ,-999 ,29 ,54 ,-999 ,36 ,-999 ,44 ,23 ,35 ,21 ,-999 ,58 ,-999 ,17 ,40 ,50 ,38 ,52 ,-999 ,46 ,28 ,18 ,27 ,57 ,-999 ,32 ,34 ,31 ,51 ,33 ,26 ,42 ,30 ,-999 ,-999 ,-999 ,-999 ,43 ,-999 ,47 ,45 ,59 ,16 }, + {-999 ,55 ,20 ,-999 ,-999 ,-999 ,-999 ,24 ,56 ,37 ,-999 ,22 ,39 ,25 ,48 ,-999 ,49 ,53 ,41 ,19 ,-999 ,29 ,54 ,-999 ,36 ,-999 ,44 ,23 ,35 ,21 ,-999 ,58 ,-999 ,17 ,40 ,50 ,38 ,52 ,-999 ,46 ,28 ,18 ,27 ,57 ,-999 ,32 ,34 ,31 ,51 ,33 ,26 ,42 ,30 ,-999 ,-999 ,-999 ,-999 ,43 ,-999 ,47 ,45 ,59 ,16 }, + {-999 ,55 ,20 ,-999 ,-999 ,-999 ,-999 ,24 ,56 ,37 ,-999 ,22 ,39 ,25 ,48 ,-999 ,49 ,53 ,41 ,19 ,-999 ,29 ,54 ,-999 ,36 ,-999 ,44 ,23 ,35 ,21 ,-999 ,58 ,-999 ,17 ,40 ,50 ,38 ,52 ,-999 ,46 ,28 ,18 ,27 ,57 ,-999 ,32 ,34 ,31 ,51 ,33 ,26 ,42 ,30 ,-999 ,-999 ,-999 ,-999 ,43 ,-999 ,47 ,45 ,59 ,16 }, + {-999 ,55 ,20 ,-999 ,-999 ,-999 ,-999 ,24 ,56 ,37 ,-999 ,22 ,39 ,25 ,48 ,-999 ,49 ,53 ,41 ,19 ,-999 ,29 ,54 ,-999 ,36 ,-999 ,44 ,23 ,35 ,21 ,-999 ,58 ,-999 ,17 ,40 ,50 ,38 ,52 ,-999 ,46 ,28 ,18 ,27 ,57 ,-999 ,32 ,34 ,31 ,51 ,33 ,26 ,42 ,30 ,-999 ,-999 ,-999 ,-999 ,43 ,-999 ,47 ,45 ,59 ,16 }, + {-999 ,55 ,20 ,-999 ,-999 ,-999 ,-999 ,24 ,56 ,37 ,-999 ,22 ,39 ,25 ,48 ,-999 ,49 ,53 ,41 ,19 ,-999 ,29 ,54 ,-999 ,36 ,-999 ,44 ,23 ,35 ,21 ,-999 ,58 ,-999 ,17 ,40 ,50 ,38 ,52 ,-999 ,46 ,28 ,18 ,27 ,57 ,-999 ,32 ,34 ,31 ,51 ,33 ,26 ,42 ,30 ,-999 ,-999 ,-999 ,-999 ,43 ,-999 ,47 ,45 ,59 ,16 }, + {61 ,-999 ,-999 ,-999 ,-999 ,-3 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-3 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-3 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-5 ,-999 ,-999 ,-999 ,-999 ,-5 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,62 ,-999 ,-999 ,-999 ,-999 ,-5 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-5 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-7 ,-999 ,-999 ,63 ,-999 ,-7 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-7 ,-999 ,-999 ,-999 ,-999 ,-7 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-7 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-9 ,-999 ,-999 ,-9 ,-999 ,-9 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-9 ,-999 ,-999 ,-999 ,-999 ,-9 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,64 ,-999 ,-999 ,-9 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-11 ,-999 ,-999 ,-11 ,-999 ,-11 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-11 ,-999 ,-999 ,-999 ,-999 ,-11 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-11 ,-999 ,-999 ,-11 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-14 ,-999 ,-999 ,-14 ,-999 ,-14 ,-999 ,-999 ,-999 ,-999 ,-14 ,-999 ,-999 ,-999 ,-999 ,-14 ,-999 ,-999 ,-999 ,-999 ,-14 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-14 ,-999 ,-999 ,-14 ,-999 ,-14 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-14 ,-999 ,-14 ,-14 ,-999 ,-14 ,-999 ,-999 ,-999 ,-999 }, + {-18 ,-999 ,-999 ,-18 ,-999 ,-18 ,-999 ,-999 ,-999 ,-999 ,-18 ,-999 ,-999 ,-999 ,-999 ,-18 ,-999 ,-999 ,-999 ,-999 ,-18 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-18 ,-999 ,-999 ,-18 ,-999 ,-18 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-18 ,-999 ,-18 ,-18 ,-999 ,-18 ,-999 ,-999 ,-999 ,-999 }, + {-19 ,-999 ,-999 ,-19 ,-999 ,-19 ,-999 ,-999 ,-999 ,-999 ,-19 ,-999 ,-999 ,-999 ,-999 ,-19 ,-999 ,-999 ,-999 ,-999 ,-19 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-19 ,-999 ,-999 ,-19 ,-999 ,-19 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-19 ,-999 ,-19 ,-19 ,-999 ,-19 ,-999 ,-999 ,-999 ,-999 }, + {-15 ,-999 ,-999 ,-15 ,-999 ,-15 ,-999 ,-999 ,-999 ,-999 ,-15 ,-999 ,-999 ,-999 ,-999 ,-15 ,-999 ,-999 ,-999 ,-999 ,-15 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-15 ,-999 ,-999 ,-15 ,-999 ,-15 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-15 ,-999 ,-15 ,-15 ,-999 ,-15 ,-999 ,-999 ,-999 ,-999 }, + {-16 ,-999 ,-999 ,-16 ,-999 ,-16 ,-999 ,-999 ,-999 ,-999 ,-16 ,-999 ,-999 ,-999 ,-999 ,-16 ,-999 ,-999 ,-999 ,-999 ,-16 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-16 ,-999 ,-999 ,-16 ,-999 ,-16 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-16 ,-999 ,-16 ,-16 ,-999 ,-16 ,-999 ,-999 ,-999 ,-999 }, + {-17 ,-999 ,-999 ,-17 ,-999 ,-17 ,-999 ,-999 ,-999 ,-999 ,-17 ,-999 ,-999 ,-999 ,-999 ,-17 ,-999 ,-999 ,-999 ,-999 ,-17 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-17 ,-999 ,-999 ,-17 ,-999 ,-17 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-17 ,-999 ,-17 ,-17 ,-999 ,-17 ,-999 ,-999 ,-999 ,-999 }, + {-23 ,-999 ,-999 ,-23 ,-23 ,-23 ,-999 ,-999 ,-999 ,-999 ,-23 ,-999 ,-999 ,-999 ,-999 ,-23 ,-999 ,-999 ,-999 ,-999 ,-23 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-23 ,-999 ,-999 ,-23 ,-999 ,-23 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-23 ,74 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,73 ,-23 ,-23 ,-23 ,-23 ,-999 ,-23 ,-999 ,-999 ,-999 ,-999 }, + {-22 ,-999 ,-999 ,-22 ,-22 ,-22 ,-999 ,-999 ,-999 ,-999 ,-22 ,-999 ,-999 ,-999 ,-999 ,-22 ,-999 ,-999 ,-999 ,-999 ,-22 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-22 ,-999 ,-999 ,-22 ,-999 ,-22 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-22 ,74 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,73 ,-22 ,-22 ,-22 ,-22 ,-999 ,-22 ,-999 ,-999 ,-999 ,-999 }, + {-26 ,-999 ,-999 ,-26 ,-26 ,-26 ,77 ,-999 ,-999 ,-999 ,-26 ,-999 ,-999 ,-999 ,-999 ,-26 ,-999 ,-999 ,-999 ,-999 ,-26 ,-999 ,-999 ,-999 ,-999 ,76 ,-999 ,-26 ,-999 ,-999 ,-26 ,-999 ,-26 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-26 ,-26 ,-999 ,-999 ,-999 ,-999 ,75 ,-999 ,-26 ,-26 ,-26 ,-26 ,-26 ,-999 ,-26 ,-999 ,-999 ,-999 ,-999 }, + {-25 ,-999 ,-999 ,-25 ,-25 ,-25 ,77 ,-999 ,-999 ,-999 ,-25 ,-999 ,-999 ,-999 ,-999 ,-25 ,-999 ,-999 ,-999 ,-999 ,-25 ,-999 ,-999 ,-999 ,-999 ,76 ,-999 ,-25 ,-999 ,-999 ,-25 ,-999 ,-25 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-25 ,-25 ,-999 ,-999 ,-999 ,-999 ,75 ,-999 ,-25 ,-25 ,-25 ,-25 ,-25 ,-999 ,-25 ,-999 ,-999 ,-999 ,-999 }, + {-30 ,-999 ,-999 ,-30 ,-30 ,-30 ,-30 ,-999 ,-999 ,-999 ,-30 ,-999 ,-999 ,-999 ,-999 ,-30 ,-999 ,-999 ,-999 ,-999 ,-30 ,-999 ,-999 ,-999 ,-999 ,-30 ,-999 ,-30 ,-999 ,-999 ,-30 ,-999 ,-30 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-30 ,-30 ,-999 ,-999 ,-999 ,-999 ,-30 ,-999 ,-30 ,-30 ,-30 ,-30 ,-30 ,-999 ,-30 ,-999 ,-999 ,-999 ,-999 }, + {-28 ,-999 ,-999 ,-28 ,-28 ,-28 ,-28 ,-999 ,-999 ,-999 ,-28 ,-999 ,-999 ,-999 ,-999 ,-28 ,-999 ,-999 ,-999 ,-999 ,-28 ,-999 ,-999 ,-999 ,-999 ,-28 ,-999 ,-28 ,-999 ,-999 ,-28 ,-999 ,-28 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-28 ,-28 ,-999 ,-999 ,-999 ,-999 ,-28 ,-999 ,-28 ,-28 ,-28 ,-28 ,-28 ,-999 ,-28 ,-999 ,-999 ,-999 ,-999 }, + {-29 ,-999 ,-999 ,-29 ,-29 ,-29 ,-29 ,-999 ,-999 ,-999 ,-29 ,-999 ,-999 ,-999 ,-999 ,-29 ,-999 ,-999 ,-999 ,-999 ,-29 ,-999 ,-999 ,-999 ,-999 ,-29 ,-999 ,-29 ,-999 ,-999 ,-29 ,-999 ,-29 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-29 ,-29 ,-999 ,-999 ,-999 ,-999 ,-29 ,-999 ,-29 ,-29 ,-29 ,-29 ,-29 ,-999 ,-29 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-82 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-82 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-83 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-83 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,169 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-80 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-80 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,170 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,171 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,172 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,173 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,174 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,175 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-84 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-85 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-85 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,177 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-81 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-81 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,178 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,179 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,180 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-70 ,-999 ,-999 ,-70 ,-70 ,-70 ,-70 ,-999 ,-999 ,-999 ,-70 ,-999 ,-999 ,-999 ,-999 ,-70 ,-999 ,-999 ,-999 ,-999 ,-70 ,-999 ,-999 ,-999 ,-999 ,-70 ,-999 ,-70 ,-999 ,-999 ,-70 ,-999 ,-70 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-70 ,-70 ,-999 ,-999 ,-999 ,-999 ,-70 ,-999 ,-70 ,-70 ,-70 ,-70 ,-70 ,-999 ,-70 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,181 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,182 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,183 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,184 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,185 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,186 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,187 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,188 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,189 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-84 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,191 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,192 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,193 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,194 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,195 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,196 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,197 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,198 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,199 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,200 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,55 ,20 ,-999 ,-999 ,-999 ,-999 ,24 ,56 ,37 ,-999 ,22 ,39 ,25 ,48 ,-999 ,49 ,53 ,41 ,19 ,-999 ,29 ,54 ,134 ,36 ,-999 ,44 ,23 ,35 ,21 ,-999 ,58 ,-999 ,17 ,40 ,50 ,38 ,52 ,-999 ,46 ,28 ,18 ,27 ,57 ,-999 ,32 ,34 ,31 ,51 ,33 ,26 ,42 ,30 ,-999 ,-999 ,-999 ,-999 ,43 ,-999 ,47 ,45 ,59 ,16 }, + {-48 ,-999 ,-999 ,-48 ,-48 ,-48 ,-48 ,-999 ,-999 ,-999 ,-48 ,-999 ,-999 ,-999 ,-999 ,-48 ,-999 ,-999 ,-999 ,-999 ,-48 ,-999 ,-999 ,-999 ,-999 ,-48 ,-999 ,-48 ,-999 ,-999 ,-48 ,-999 ,-48 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-48 ,-48 ,-999 ,-999 ,-999 ,-999 ,-48 ,-999 ,-48 ,-48 ,-48 ,-48 ,-48 ,-999 ,-48 ,-999 ,-999 ,-999 ,-999 }, + {-65 ,-999 ,-999 ,-65 ,-65 ,-65 ,-65 ,-999 ,-999 ,-999 ,-65 ,-999 ,-999 ,-999 ,-999 ,-65 ,-999 ,-999 ,-999 ,-999 ,-65 ,-999 ,-999 ,-999 ,-999 ,-65 ,-999 ,-65 ,-999 ,-999 ,-65 ,-999 ,-65 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-65 ,-65 ,-999 ,-999 ,-999 ,-999 ,-65 ,-999 ,-65 ,-65 ,-65 ,-65 ,-65 ,-999 ,-65 ,-999 ,-999 ,-999 ,-999 }, + {-57 ,-999 ,-999 ,-57 ,-57 ,-57 ,-57 ,-999 ,-999 ,-999 ,-57 ,-999 ,-999 ,-999 ,-999 ,-57 ,-999 ,-999 ,-999 ,-999 ,-57 ,-999 ,-999 ,-999 ,-999 ,-57 ,-999 ,-57 ,-999 ,-999 ,-57 ,-999 ,-57 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-57 ,-57 ,-999 ,-999 ,-999 ,-999 ,-57 ,-999 ,-57 ,-57 ,-57 ,-57 ,-57 ,-999 ,-57 ,-999 ,-999 ,-999 ,-999 }, + {-45 ,-999 ,-999 ,-45 ,-45 ,-45 ,-45 ,-999 ,-999 ,-999 ,-45 ,-999 ,-999 ,-999 ,-999 ,-45 ,-999 ,-999 ,-999 ,-999 ,-45 ,-999 ,-999 ,-999 ,-999 ,-45 ,-999 ,-45 ,-999 ,-999 ,-45 ,-999 ,-45 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-45 ,-45 ,-999 ,-999 ,-999 ,-999 ,-45 ,-999 ,-45 ,-45 ,-45 ,-45 ,-45 ,-999 ,-45 ,-999 ,-999 ,-999 ,-999 }, + {-56 ,-999 ,-999 ,-56 ,-56 ,-56 ,-56 ,-999 ,-999 ,-999 ,-56 ,-999 ,-999 ,-999 ,-999 ,-56 ,-999 ,-999 ,-999 ,-999 ,-56 ,-999 ,-999 ,-999 ,-999 ,-56 ,-999 ,-56 ,-999 ,-999 ,-56 ,-999 ,-56 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-56 ,-56 ,-999 ,-999 ,-999 ,-999 ,-56 ,-999 ,-56 ,-56 ,-56 ,-56 ,-56 ,-999 ,-56 ,-999 ,-999 ,-999 ,-999 }, + {-39 ,-999 ,-999 ,-39 ,-39 ,-39 ,-39 ,-999 ,-999 ,-999 ,-39 ,-999 ,-999 ,-999 ,-999 ,-39 ,-999 ,-999 ,-999 ,-999 ,-39 ,-999 ,-999 ,-999 ,-999 ,-39 ,-999 ,-39 ,-999 ,-999 ,-39 ,-999 ,-39 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-39 ,-39 ,-999 ,-999 ,-999 ,-999 ,-39 ,-999 ,-39 ,-39 ,-39 ,-39 ,-39 ,-999 ,-39 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,55 ,20 ,-999 ,-999 ,-999 ,-999 ,24 ,56 ,37 ,-999 ,22 ,39 ,25 ,48 ,-999 ,49 ,53 ,41 ,19 ,-999 ,29 ,54 ,-999 ,36 ,-999 ,44 ,23 ,35 ,21 ,-999 ,58 ,-999 ,17 ,40 ,50 ,38 ,52 ,-999 ,46 ,28 ,18 ,27 ,57 ,-999 ,32 ,34 ,31 ,51 ,33 ,26 ,42 ,30 ,-999 ,-999 ,-999 ,-999 ,43 ,-999 ,47 ,45 ,59 ,16 }, + {-999 ,55 ,20 ,-999 ,-999 ,-999 ,-999 ,24 ,56 ,37 ,-999 ,22 ,39 ,25 ,48 ,-999 ,49 ,53 ,41 ,19 ,-999 ,29 ,54 ,-999 ,36 ,-999 ,44 ,23 ,35 ,21 ,-999 ,58 ,-999 ,17 ,40 ,50 ,38 ,52 ,144 ,46 ,28 ,18 ,27 ,57 ,-999 ,32 ,34 ,31 ,51 ,33 ,26 ,42 ,30 ,-999 ,-999 ,-999 ,-999 ,43 ,-999 ,47 ,45 ,59 ,16 }, + {-43 ,-999 ,-999 ,-43 ,-43 ,-43 ,-43 ,-999 ,-999 ,-999 ,-43 ,-999 ,-999 ,-999 ,-999 ,-43 ,-999 ,-999 ,-999 ,-999 ,-43 ,-999 ,-999 ,-999 ,-999 ,-43 ,-999 ,-43 ,-999 ,-999 ,-43 ,-999 ,-43 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-43 ,-43 ,-999 ,-999 ,-999 ,-999 ,-43 ,-999 ,-43 ,-43 ,-43 ,-43 ,-43 ,-999 ,-43 ,-999 ,-999 ,-999 ,-999 }, + {-51 ,-999 ,-999 ,-51 ,-51 ,-51 ,-51 ,-999 ,-999 ,-999 ,-51 ,-999 ,-999 ,-999 ,-999 ,-51 ,-999 ,-999 ,-999 ,-999 ,-51 ,-999 ,-999 ,-999 ,-999 ,-51 ,-999 ,-51 ,-999 ,-999 ,-51 ,-999 ,-51 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-51 ,-51 ,-999 ,-999 ,-999 ,-999 ,-51 ,-999 ,-51 ,-51 ,-51 ,-51 ,-51 ,-999 ,-51 ,-999 ,-999 ,-999 ,-999 }, + {-50 ,-999 ,-999 ,-50 ,-50 ,-50 ,-50 ,-999 ,-999 ,-999 ,-50 ,-999 ,-999 ,-999 ,-999 ,-50 ,-999 ,-999 ,-999 ,-999 ,-50 ,-999 ,-999 ,-999 ,-999 ,-50 ,-999 ,-50 ,-999 ,-999 ,-50 ,-999 ,-50 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-50 ,-50 ,-999 ,-999 ,-999 ,-999 ,-50 ,-999 ,-50 ,-50 ,-50 ,-50 ,-50 ,-999 ,-50 ,-999 ,-999 ,-999 ,-999 }, + {-46 ,-999 ,-999 ,-46 ,-46 ,-46 ,-46 ,-999 ,-999 ,-999 ,-46 ,-999 ,-999 ,-999 ,-999 ,-46 ,-999 ,-999 ,-999 ,-999 ,-46 ,-999 ,-999 ,-999 ,-999 ,-46 ,-999 ,-46 ,-999 ,-999 ,-46 ,-999 ,-46 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-46 ,-46 ,-999 ,-999 ,-999 ,-999 ,-46 ,-999 ,-46 ,-46 ,-46 ,-46 ,-46 ,-999 ,-46 ,-999 ,-999 ,-999 ,-999 }, + {-53 ,-999 ,-999 ,-53 ,-53 ,-53 ,-53 ,-999 ,-999 ,-999 ,-53 ,-999 ,-999 ,-999 ,-999 ,-53 ,-999 ,-999 ,-999 ,-999 ,-53 ,-999 ,-999 ,-999 ,-999 ,-53 ,-999 ,-53 ,-999 ,-999 ,-53 ,-999 ,-53 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-53 ,-53 ,-999 ,-999 ,-999 ,-999 ,-53 ,-999 ,-53 ,-53 ,-53 ,-53 ,-53 ,-999 ,-53 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,55 ,20 ,-999 ,-999 ,-999 ,-999 ,24 ,56 ,37 ,-999 ,22 ,39 ,25 ,48 ,-999 ,49 ,53 ,41 ,19 ,-999 ,29 ,54 ,134 ,36 ,-999 ,44 ,23 ,35 ,21 ,-999 ,58 ,-999 ,17 ,40 ,50 ,38 ,52 ,-999 ,46 ,28 ,18 ,27 ,57 ,-999 ,32 ,34 ,31 ,51 ,33 ,26 ,42 ,30 ,-999 ,-999 ,-999 ,-999 ,43 ,-999 ,47 ,45 ,59 ,16 }, + {-42 ,-999 ,-999 ,-42 ,-42 ,-42 ,-42 ,-999 ,-999 ,-999 ,-42 ,-999 ,-999 ,-999 ,-999 ,-42 ,-999 ,-999 ,-999 ,-999 ,-42 ,-999 ,-999 ,-999 ,-999 ,-42 ,-999 ,-42 ,-999 ,-999 ,-42 ,-999 ,-42 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-42 ,-42 ,-999 ,-999 ,-999 ,-999 ,-42 ,-999 ,-42 ,-42 ,-42 ,-42 ,-42 ,-999 ,-42 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,55 ,20 ,-999 ,-999 ,-999 ,-999 ,24 ,56 ,37 ,-999 ,22 ,39 ,25 ,48 ,-999 ,49 ,53 ,41 ,19 ,-999 ,29 ,54 ,-999 ,36 ,-999 ,44 ,23 ,35 ,21 ,-999 ,58 ,-999 ,17 ,40 ,50 ,38 ,52 ,-999 ,46 ,28 ,18 ,27 ,57 ,-999 ,32 ,34 ,31 ,51 ,33 ,26 ,42 ,30 ,-999 ,-999 ,-999 ,-999 ,43 ,-999 ,47 ,45 ,59 ,16 }, + {-47 ,-999 ,-999 ,-47 ,-47 ,-47 ,-47 ,-999 ,-999 ,-999 ,-47 ,-999 ,-999 ,-999 ,-999 ,-47 ,-999 ,-999 ,-999 ,-999 ,-47 ,-999 ,-999 ,-999 ,-999 ,-47 ,-999 ,-47 ,-999 ,-999 ,-47 ,-999 ,-47 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-47 ,-47 ,-999 ,-999 ,-999 ,-999 ,-47 ,-999 ,-47 ,-47 ,-47 ,-47 ,-47 ,-999 ,-47 ,-999 ,-999 ,-999 ,-999 }, + {-52 ,-999 ,-999 ,-52 ,-52 ,-52 ,-52 ,-999 ,-999 ,-999 ,-52 ,-999 ,-999 ,-999 ,-999 ,-52 ,-999 ,-999 ,-999 ,-999 ,-52 ,-999 ,-999 ,-999 ,-999 ,-52 ,-999 ,-52 ,-999 ,-999 ,-52 ,-999 ,-52 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-52 ,-52 ,-999 ,-999 ,-999 ,-999 ,-52 ,-999 ,-52 ,-52 ,-52 ,-52 ,-52 ,-999 ,-52 ,-999 ,-999 ,-999 ,-999 }, + {-55 ,-999 ,-999 ,-55 ,-55 ,-55 ,-55 ,-999 ,-999 ,-999 ,-55 ,-999 ,-999 ,-999 ,-999 ,-55 ,-999 ,-999 ,-999 ,-999 ,-55 ,-999 ,-999 ,-999 ,-999 ,-55 ,-999 ,-55 ,-999 ,-999 ,-55 ,-999 ,-55 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-55 ,-55 ,-999 ,-999 ,-999 ,-999 ,-55 ,-999 ,-55 ,-55 ,-55 ,-55 ,-55 ,-999 ,-55 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,55 ,20 ,-999 ,-999 ,-999 ,-999 ,24 ,56 ,37 ,-999 ,22 ,39 ,25 ,48 ,-999 ,49 ,53 ,41 ,19 ,-999 ,29 ,54 ,-999 ,36 ,-999 ,44 ,23 ,35 ,21 ,-999 ,58 ,-999 ,17 ,40 ,50 ,38 ,52 ,-999 ,46 ,28 ,18 ,27 ,57 ,-999 ,32 ,34 ,31 ,51 ,33 ,26 ,42 ,30 ,-999 ,-999 ,-999 ,-999 ,43 ,-999 ,47 ,45 ,59 ,16 }, + {-49 ,-999 ,-999 ,-49 ,-49 ,-49 ,-49 ,-999 ,-999 ,-999 ,-49 ,-999 ,-999 ,-999 ,-999 ,-49 ,-999 ,-999 ,-999 ,-999 ,-49 ,-999 ,-999 ,-999 ,-999 ,-49 ,-999 ,-49 ,-999 ,-999 ,-49 ,-999 ,-49 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-49 ,-49 ,-999 ,-999 ,-999 ,-999 ,-49 ,-999 ,-49 ,-49 ,-49 ,-49 ,-49 ,-999 ,-49 ,-999 ,-999 ,-999 ,-999 }, + {-68 ,-999 ,-999 ,-68 ,-68 ,-68 ,-68 ,-999 ,-999 ,-999 ,-68 ,-999 ,-999 ,-999 ,-999 ,-68 ,-999 ,-999 ,-999 ,-999 ,-68 ,-999 ,-999 ,-999 ,-999 ,-68 ,-999 ,-68 ,-999 ,-999 ,-68 ,-999 ,-68 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-68 ,-68 ,-999 ,-999 ,-999 ,-999 ,-68 ,-999 ,-68 ,-68 ,-68 ,-68 ,-68 ,-999 ,-68 ,-999 ,-999 ,-999 ,-999 }, + {-44 ,-999 ,-999 ,-44 ,-44 ,-44 ,-44 ,-999 ,-999 ,-999 ,-44 ,-999 ,-999 ,-999 ,-999 ,-44 ,-999 ,-999 ,-999 ,-999 ,-44 ,-999 ,-999 ,-999 ,-999 ,-44 ,-999 ,-44 ,-999 ,-999 ,-44 ,-999 ,-44 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-44 ,-44 ,-999 ,-999 ,-999 ,-999 ,-44 ,-999 ,-44 ,-44 ,-44 ,-44 ,-44 ,-999 ,-44 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,55 ,20 ,-999 ,-999 ,-999 ,-999 ,24 ,56 ,37 ,-999 ,22 ,39 ,25 ,48 ,-999 ,49 ,53 ,41 ,19 ,-999 ,29 ,54 ,-999 ,36 ,-999 ,44 ,23 ,35 ,21 ,-999 ,58 ,-999 ,17 ,40 ,50 ,38 ,52 ,-999 ,46 ,28 ,18 ,27 ,57 ,-999 ,32 ,34 ,31 ,51 ,33 ,26 ,42 ,30 ,-999 ,-999 ,-999 ,-999 ,43 ,-999 ,47 ,45 ,59 ,16 }, + {-999 ,55 ,20 ,-999 ,-999 ,-999 ,-999 ,24 ,56 ,37 ,-999 ,22 ,39 ,25 ,48 ,-999 ,49 ,53 ,41 ,19 ,-999 ,29 ,54 ,-999 ,36 ,-999 ,44 ,23 ,35 ,21 ,-999 ,58 ,-999 ,17 ,40 ,50 ,38 ,52 ,-999 ,46 ,28 ,18 ,27 ,57 ,-999 ,32 ,34 ,31 ,51 ,33 ,26 ,42 ,30 ,-999 ,-999 ,-999 ,-999 ,43 ,-999 ,47 ,45 ,59 ,16 }, + {-999 ,55 ,20 ,-999 ,-999 ,-999 ,-999 ,24 ,56 ,37 ,-999 ,22 ,39 ,25 ,48 ,-999 ,49 ,53 ,41 ,19 ,-999 ,29 ,54 ,-999 ,36 ,-999 ,44 ,23 ,35 ,21 ,-999 ,58 ,-999 ,17 ,40 ,50 ,38 ,52 ,-999 ,46 ,28 ,18 ,27 ,57 ,-999 ,32 ,34 ,31 ,51 ,33 ,26 ,42 ,30 ,-999 ,-999 ,-999 ,-999 ,43 ,-999 ,47 ,45 ,59 ,16 }, + {-54 ,-999 ,-999 ,-54 ,-54 ,-54 ,-54 ,-999 ,-999 ,-999 ,-54 ,-999 ,-999 ,-999 ,-999 ,-54 ,-999 ,-999 ,-999 ,-999 ,-54 ,-999 ,-999 ,-999 ,-999 ,-54 ,-999 ,-54 ,-999 ,-999 ,-54 ,-999 ,-54 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-54 ,-54 ,-999 ,-999 ,-999 ,-999 ,-54 ,-999 ,-54 ,-54 ,-54 ,-54 ,-54 ,-999 ,-54 ,-999 ,-999 ,-999 ,-999 }, + {-38 ,-999 ,-999 ,-38 ,-38 ,-38 ,-38 ,-999 ,-999 ,-999 ,-38 ,-999 ,-999 ,-999 ,-999 ,-38 ,-999 ,-999 ,-999 ,-999 ,-38 ,-999 ,-999 ,-999 ,-999 ,-38 ,-999 ,-38 ,-999 ,-999 ,-38 ,-999 ,-38 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-38 ,-38 ,-999 ,-999 ,-999 ,-999 ,-38 ,-999 ,-38 ,-38 ,-38 ,-38 ,-38 ,-999 ,-38 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,55 ,20 ,-999 ,-999 ,-999 ,-999 ,24 ,56 ,37 ,-999 ,22 ,39 ,25 ,48 ,-999 ,49 ,53 ,41 ,19 ,-999 ,29 ,54 ,-999 ,36 ,-999 ,44 ,23 ,35 ,21 ,-999 ,58 ,-999 ,17 ,40 ,50 ,38 ,52 ,-999 ,46 ,28 ,18 ,27 ,57 ,-999 ,32 ,34 ,31 ,51 ,33 ,26 ,42 ,30 ,-999 ,-999 ,-999 ,-999 ,43 ,-999 ,47 ,45 ,59 ,16 }, + {-40 ,-999 ,-999 ,-40 ,-40 ,-40 ,-40 ,-999 ,-999 ,-999 ,-40 ,-999 ,-999 ,-999 ,-999 ,-40 ,-999 ,-999 ,-999 ,-999 ,-40 ,-999 ,-999 ,-999 ,-999 ,-40 ,-999 ,-40 ,-999 ,-999 ,-40 ,-999 ,-40 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-40 ,-40 ,-999 ,-999 ,-999 ,-999 ,-40 ,-999 ,-40 ,-40 ,-40 ,-40 ,-40 ,-999 ,-40 ,-999 ,-999 ,-999 ,-999 }, + {-41 ,-999 ,-999 ,-41 ,-41 ,-41 ,-41 ,-999 ,-999 ,-999 ,-41 ,-999 ,-999 ,-999 ,-999 ,-41 ,-999 ,-999 ,-999 ,-999 ,-41 ,-999 ,-999 ,-999 ,-999 ,-41 ,-999 ,-41 ,-999 ,-999 ,-41 ,-999 ,-41 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-41 ,-41 ,-999 ,-999 ,-999 ,-999 ,-41 ,-999 ,-41 ,-41 ,-41 ,-41 ,-41 ,-999 ,-41 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,212 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,213 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-84 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,214 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,215 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,216 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,217 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,218 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,219 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,220 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,221 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-66 ,-999 ,-999 ,-66 ,-66 ,-66 ,-66 ,-999 ,-999 ,-999 ,-66 ,-999 ,-999 ,-999 ,-999 ,-66 ,-999 ,-999 ,-999 ,-999 ,-66 ,-999 ,-999 ,-999 ,-999 ,-66 ,-999 ,-66 ,-999 ,-999 ,-66 ,-999 ,-66 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-66 ,-66 ,-999 ,-999 ,-999 ,-999 ,-66 ,-999 ,-66 ,-66 ,-66 ,-66 ,-66 ,-999 ,-66 ,-999 ,-999 ,-999 ,-999 }, + {-63 ,-999 ,-999 ,-63 ,-63 ,-63 ,-63 ,-999 ,-999 ,-999 ,-63 ,-999 ,-999 ,-999 ,-999 ,-63 ,-999 ,-999 ,-999 ,-999 ,-63 ,-999 ,-999 ,-999 ,-999 ,-63 ,-999 ,-63 ,-999 ,-999 ,-63 ,-999 ,-63 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-63 ,-63 ,-999 ,-999 ,-999 ,-999 ,-63 ,-999 ,-63 ,-63 ,-63 ,-63 ,-63 ,-999 ,-63 ,-999 ,-999 ,-999 ,-999 }, + {-69 ,-999 ,-999 ,-69 ,-69 ,-69 ,-69 ,-999 ,-999 ,-999 ,-69 ,-999 ,-999 ,-999 ,-999 ,-69 ,-999 ,-999 ,-999 ,-999 ,-69 ,-999 ,-999 ,-999 ,-999 ,-69 ,-999 ,-69 ,-999 ,-999 ,-69 ,-999 ,-69 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-69 ,-69 ,-999 ,-999 ,-999 ,-999 ,-69 ,-999 ,-69 ,-69 ,-69 ,-69 ,-69 ,-999 ,-69 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,55 ,20 ,-999 ,-999 ,-999 ,-999 ,24 ,56 ,37 ,-999 ,22 ,39 ,25 ,48 ,-999 ,49 ,53 ,41 ,19 ,-999 ,29 ,54 ,-999 ,36 ,-999 ,44 ,23 ,35 ,21 ,-999 ,58 ,-999 ,17 ,40 ,50 ,38 ,52 ,-999 ,46 ,28 ,18 ,27 ,57 ,-999 ,32 ,34 ,31 ,51 ,33 ,26 ,42 ,30 ,-999 ,-999 ,-999 ,-999 ,43 ,-999 ,47 ,45 ,59 ,16 }, + {-60 ,-999 ,-999 ,-60 ,-60 ,-60 ,-60 ,-999 ,-999 ,-999 ,-60 ,-999 ,-999 ,-999 ,-999 ,-60 ,-999 ,-999 ,-999 ,-999 ,-60 ,-999 ,-999 ,-999 ,-999 ,-60 ,-999 ,-60 ,-999 ,-999 ,-60 ,-999 ,-60 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-60 ,-60 ,-999 ,-999 ,-999 ,-999 ,-60 ,-999 ,-60 ,-60 ,-60 ,-60 ,-60 ,-999 ,-60 ,-999 ,-999 ,-999 ,-999 }, + {-58 ,-999 ,-999 ,-58 ,-58 ,-58 ,-58 ,-999 ,-999 ,-999 ,-58 ,-999 ,-999 ,-999 ,-999 ,-58 ,-999 ,-999 ,-999 ,-999 ,-58 ,-999 ,-999 ,-999 ,-999 ,-58 ,-999 ,-58 ,-999 ,-999 ,-58 ,-999 ,-58 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-58 ,-58 ,-999 ,-999 ,-999 ,-999 ,-58 ,-999 ,-58 ,-58 ,-58 ,-58 ,-58 ,-999 ,-58 ,-999 ,-999 ,-999 ,-999 }, + {-61 ,-999 ,-999 ,-61 ,-61 ,-61 ,-61 ,-999 ,-999 ,-999 ,-61 ,-999 ,-999 ,-999 ,-999 ,-61 ,-999 ,-999 ,-999 ,-999 ,-61 ,-999 ,-999 ,-999 ,-999 ,-61 ,-999 ,-61 ,-999 ,-999 ,-61 ,-999 ,-61 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-61 ,-61 ,-999 ,-999 ,-999 ,-999 ,-61 ,-999 ,-61 ,-61 ,-61 ,-61 ,-61 ,-999 ,-61 ,-999 ,-999 ,-999 ,-999 }, + {-62 ,-999 ,-999 ,-62 ,-62 ,-62 ,-62 ,-999 ,-999 ,-999 ,-62 ,-999 ,-999 ,-999 ,-999 ,-62 ,-999 ,-999 ,-999 ,-999 ,-62 ,-999 ,-999 ,-999 ,-999 ,-62 ,-999 ,-62 ,-999 ,-999 ,-62 ,-999 ,-62 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-62 ,-62 ,-999 ,-999 ,-999 ,-999 ,-62 ,-999 ,-62 ,-62 ,-62 ,-62 ,-62 ,-999 ,-62 ,-999 ,-999 ,-999 ,-999 }, + {-59 ,-999 ,-999 ,-59 ,-59 ,-59 ,-59 ,-999 ,-999 ,-999 ,-59 ,-999 ,-999 ,-999 ,-999 ,-59 ,-999 ,-999 ,-999 ,-999 ,-59 ,-999 ,-999 ,-999 ,-999 ,-59 ,-999 ,-59 ,-999 ,-999 ,-59 ,-999 ,-59 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-59 ,-59 ,-999 ,-999 ,-999 ,-999 ,-59 ,-999 ,-59 ,-59 ,-59 ,-59 ,-59 ,-999 ,-59 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,55 ,20 ,-999 ,-999 ,-999 ,-999 ,24 ,56 ,37 ,-999 ,22 ,39 ,25 ,48 ,-999 ,49 ,53 ,41 ,19 ,-999 ,29 ,54 ,-999 ,36 ,-999 ,44 ,23 ,35 ,21 ,-999 ,58 ,-999 ,17 ,40 ,50 ,38 ,52 ,-999 ,46 ,28 ,18 ,27 ,57 ,-999 ,32 ,34 ,31 ,51 ,33 ,26 ,42 ,30 ,-999 ,-999 ,-999 ,-999 ,43 ,-999 ,47 ,45 ,59 ,16 }, + {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,224 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,225 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 }, + {-67 ,-999 ,-999 ,-67 ,-67 ,-67 ,-67 ,-999 ,-999 ,-999 ,-67 ,-999 ,-999 ,-999 ,-999 ,-67 ,-999 ,-999 ,-999 ,-999 ,-67 ,-999 ,-999 ,-999 ,-999 ,-67 ,-999 ,-67 ,-999 ,-999 ,-67 ,-999 ,-67 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-67 ,-67 ,-999 ,-999 ,-999 ,-999 ,-67 ,-999 ,-67 ,-67 ,-67 ,-67 ,-67 ,-999 ,-67 ,-999 ,-999 ,-999 ,-999 }, + {-64 ,-999 ,-999 ,-64 ,-64 ,-64 ,-64 ,-999 ,-999 ,-999 ,-64 ,-999 ,-999 ,-999 ,-999 ,-64 ,-999 ,-999 ,-999 ,-999 ,-64 ,-999 ,-999 ,-999 ,-999 ,-64 ,-999 ,-64 ,-999 ,-999 ,-64 ,-999 ,-64 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-999 ,-64 ,-64 ,-999 ,-999 ,-999 ,-999 ,-64 ,-999 ,-64 ,-64 ,-64 ,-64 ,-64 ,-999 ,-64 ,-999 ,-999 ,-999 ,-999 } }; const struct _TOKEN LalrSemanticRules[RULES_COUNT]= { @@ -1985,6 +2215,7 @@ const struct _TOKEN LalrSemanticRules[RULES_COUNT]= {SEMANTIC_RULE, "@PUSH"}, {SEMANTIC_RULE, "@PUSH"}, {SEMANTIC_RULE, "@PUSH"}, + {SEMANTIC_RULE, "@PUSH"}, {UNKNOWN, ""}, {UNKNOWN, ""}, {UNKNOWN, ""}, diff --git a/hyperdbg/script-engine/code/scanner.c b/hyperdbg/script-engine/code/scanner.c index a10a7327..95f46ee0 100644 --- a/hyperdbg/script-engine/code/scanner.c +++ b/hyperdbg/script-engine/code/scanner.c @@ -51,8 +51,8 @@ GetToken(char * c, char * str) else if (*c == 'x') { char ByteString[] = "000"; - int len = strlen(ByteString); - int i = 0; + int len = strlen(ByteString); + int i = 0; for (; i < len; i++) { *c = sgetc(str); @@ -60,7 +60,7 @@ GetToken(char * c, char * str) break; RotateLeftStringOnce(ByteString); - ByteString[len-1] = *c; + ByteString[len - 1] = *c; } if (i == 0 || i == 3) @@ -712,13 +712,20 @@ GetToken(char * c, char * str) } else { - if (GetLocalIdentifierVal(Token) != -1) + if (GetFunctionParameterIdentifier(Token) != -1) { - Token->Type = LOCAL_ID; + Token->Type = FUNCTION_PARAMETER_ID; } else { - Token->Type = LOCAL_UNRESOLVED_ID; + if (GetLocalIdentifierVal(Token) != -1) + { + Token->Type = LOCAL_ID; + } + else + { + Token->Type = LOCAL_UNRESOLVED_ID; + } } } } @@ -762,13 +769,20 @@ GetToken(char * c, char * str) } else { - if (GetLocalIdentifierVal(Token) != -1) + if (GetFunctionParameterIdentifier(Token) != -1) { - Token->Type = LOCAL_ID; + Token->Type = FUNCTION_PARAMETER_ID; } else { - Token->Type = LOCAL_UNRESOLVED_ID; + if (GetLocalIdentifierVal(Token) != -1) + { + Token->Type = LOCAL_ID; + } + else + { + Token->Type = LOCAL_UNRESOLVED_ID; + } } } } @@ -823,13 +837,20 @@ GetToken(char * c, char * str) } else { - if (GetLocalIdentifierVal(Token) != -1) + if (GetFunctionParameterIdentifier(Token) != -1) { - Token->Type = LOCAL_ID; + Token->Type = FUNCTION_PARAMETER_ID; } else { - Token->Type = LOCAL_UNRESOLVED_ID; + if (GetLocalIdentifierVal(Token) != -1) + { + Token->Type = LOCAL_ID; + } + else + { + Token->Type = LOCAL_UNRESOLVED_ID; + } } } } diff --git a/hyperdbg/script-engine/code/script-engine.c b/hyperdbg/script-engine/code/script-engine.c index 671c4b48..371584e8 100644 --- a/hyperdbg/script-engine/code/script-engine.c +++ b/hyperdbg/script-engine/code/script-engine.c @@ -265,14 +265,18 @@ ScriptEngineParse(char * str) PTOKEN_LIST MatchedStack = NewTokenList(); PSYMBOL_BUFFER CodeBuffer = NewSymbolBuffer(); + // will modify here later + PSYMBOL_BUFFER UserDefinedFunctions = NewSymbolBuffer(); + SCRIPT_ENGINE_ERROR_TYPE Error = SCRIPT_ENGINE_ERROR_FREE; char * ErrorMessage = NULL; static FirstCall = 1; if (FirstCall) { - IdTable = NewTokenList(); - FirstCall = 0; + IdTable = NewTokenList(); + FunctionParameterIdTable = NewTokenList(); + FirstCall = 0; } PTOKEN TopToken = NewUnknownToken(); @@ -337,7 +341,7 @@ ScriptEngineParse(char * str) { UINT64 BooleanExpressionSize = BooleanExpressionExtractEnd(str, &WaitForWaitStatementBooleanExpression, CurrentIn); - ScriptEngineBooleanExpresssionParse(BooleanExpressionSize, CurrentIn, MatchedStack, CodeBuffer, str, &c, &Error); + ScriptEngineBooleanExpresssionParse(BooleanExpressionSize, CurrentIn, MatchedStack, UserDefinedFunctions, CodeBuffer, str, &c, &Error); if (Error != SCRIPT_ENGINE_ERROR_FREE) { break; @@ -347,7 +351,7 @@ ScriptEngineParse(char * str) CurrentIn = Scan(str, &c); if (CurrentIn->Type == UNKNOWN) { - Error = SCRIPT_ENGINE_ERROR_UNKOWN_TOKEN; + Error = SCRIPT_ENGINE_ERROR_UNKNOWN_TOKEN; break; } @@ -355,7 +359,7 @@ ScriptEngineParse(char * str) CurrentIn = Scan(str, &c); if (CurrentIn->Type == UNKNOWN) { - Error = SCRIPT_ENGINE_ERROR_UNKOWN_TOKEN; + Error = SCRIPT_ENGINE_ERROR_UNKNOWN_TOKEN; break; } RemoveToken(&TopToken); @@ -420,7 +424,7 @@ ScriptEngineParse(char * str) { WaitForWaitStatementBooleanExpression = TRUE; } - CodeGen(MatchedStack, CodeBuffer, TopToken, &Error); + CodeGen(MatchedStack, UserDefinedFunctions, CodeBuffer, TopToken, &Error); if (Error != SCRIPT_ENGINE_ERROR_FREE) { break; @@ -470,12 +474,21 @@ ScriptEngineParse(char * str) if (MatchedStack) RemoveTokenList(MatchedStack); + if (UserDefinedFunctions) + RemoveSymbolBuffer(UserDefinedFunctions); + if (CurrentIn) RemoveToken(&CurrentIn); if (TopToken) RemoveToken(&TopToken); + if (FunctionParameterIdTable) + { + RemoveTokenList(FunctionParameterIdTable); + FunctionParameterIdTable = NewTokenList(); + } + return CodeBuffer; } @@ -488,20 +501,25 @@ ScriptEngineParse(char * str) * @param Error */ void -CodeGen(PTOKEN_LIST MatchedStack, PSYMBOL_BUFFER CodeBuffer, PTOKEN Operator, PSCRIPT_ENGINE_ERROR_TYPE Error) +CodeGen(PTOKEN_LIST MatchedStack, PSYMBOL_BUFFER UserDefinedFunctions, PSYMBOL_BUFFER CodeBuffer, PTOKEN Operator, PSCRIPT_ENGINE_ERROR_TYPE Error) { PTOKEN Op0 = NULL; PTOKEN Op1 = NULL; PTOKEN Op2 = NULL; PTOKEN Temp = NULL; - PSYMBOL OperatorSymbol = NULL; - PSYMBOL Op0Symbol = NULL; - PSYMBOL Op1Symbol = NULL; - PSYMBOL Op2Symbol = NULL; - PSYMBOL TempSymbol = NULL; + PSYMBOL OperatorSymbol = NULL; + PSYMBOL Op0Symbol = NULL; + PSYMBOL Op1Symbol = NULL; + PSYMBOL Op2Symbol = NULL; + PSYMBOL TempSymbol = NULL; + VARIABLE_TYPE * VariableType = NULL; - OperatorSymbol = ToSymbol(Operator, Error); + // + // It is in user-defined function if CurrentFunctionSymbol is not null + // + static PSYMBOL CurrentFunctionSymbol = NULL; + OperatorSymbol = ToSymbol(Operator, Error); #ifdef _SCRIPT_ENGINE_CODEGEN_DBG_EN // @@ -522,7 +540,355 @@ CodeGen(PTOKEN_LIST MatchedStack, PSYMBOL_BUFFER CodeBuffer, PTOKEN Operator, PS while (TRUE) { - if (!strcmp(Operator->Value, "@MOV")) + if (IsVariableType(Operator)) + { + PTOKEN PToken = CopyToken(Operator); + PToken->Type = INPUT_VARIABLE_TYPE; + Push(MatchedStack, PToken); + } + else if (!strcmp(Operator->Value, "@START_OF_USER_DEFINED_FUNCTION")) + { + Op0 = Pop(MatchedStack); + VariableType = HandleType(MatchedStack); + + if (VariableType == VARIABLE_TYPE_UNKNOWN) + { + *Error = SCRIPT_ENGINE_ERROR_UNDEFINED_VARIABLE_TYPE; + break; + } + + UINT64 CurrentPointer = CodeBuffer->Pointer; + // + // Add jmp instruction to Code Buffer + // + PSYMBOL JumpInstruction = NewSymbol(); + JumpInstruction->Type = SYMBOL_SEMANTIC_RULE_TYPE; + JumpInstruction->Value = FUNC_JMP; + PushSymbol(CodeBuffer, JumpInstruction); + RemoveSymbol(&JumpInstruction); + + // + // Push jump address + // + + PSYMBOL JumpAddressSymbol = NewSymbol(); + JumpAddressSymbol->Type = SYMBOL_NUM_TYPE; + JumpAddressSymbol->Value = 0xffffffffffffffff; + PushSymbol(CodeBuffer, JumpAddressSymbol); + RemoveSymbol(&JumpAddressSymbol); + + PushSymbol(UserDefinedFunctions, NewFunctionSymbol(Op0->Value, VariableType)); + CurrentFunctionSymbol = NewFunctionSymbol(Op0->Value, VariableType); + PushSymbol(CodeBuffer, CurrentFunctionSymbol); + + PushSymbol(CodeBuffer, OperatorSymbol); + + PSYMBOL StackTempNumberSymbol = NewSymbol(); + StackTempNumberSymbol->Type = SYMBOL_NUM_TYPE; + StackTempNumberSymbol->Value = 0xffffffffffffffff; + PushSymbol(CodeBuffer, StackTempNumberSymbol); + RemoveSymbol(&StackTempNumberSymbol); + } + else if (!strcmp(Operator->Value, "@FUNCTION_PARAMETER")) + { + Op0 = Pop(MatchedStack); + VariableType = HandleType(MatchedStack); + + if (VariableType == VARIABLE_TYPE_UNKNOWN) + { + *Error = SCRIPT_ENGINE_ERROR_UNDEFINED_VARIABLE_TYPE; + break; + } + + Op0Symbol = NewSymbol(); + free(Op0Symbol->Value); + Op0Symbol->Value = NewFunctionParameterIdentifier(Op0); + SetType(&Op0Symbol->Type, SYMBOL_FUNCTION_PARAMETER_ID_TYPE); + + PushSymbol(UserDefinedFunctions, Op0Symbol); + } + else if (!strcmp(Operator->Value, "@END_OF_USER_DEFINED_FUNCTION")) + { + PushSymbol(CodeBuffer, OperatorSymbol); + UINT64 CurrentPointer = CodeBuffer->Pointer; + PSYMBOL Symbol = NULL; + + BOOL Found = FALSE; + int i = 0; + // for loop not able to begin from CodeBuffer->Pointer to 0 because of string and wstring's size + for (; i < CodeBuffer->Pointer;) + { + Symbol = CodeBuffer->Head + i; + + if (Symbol->Type == SYMBOL_USER_DEFINED_FUNCTION_TYPE && !strcmp(CurrentFunctionSymbol->Value, Symbol->Value)) + { + Found = TRUE; + break; + } + else if (Symbol->Type == SYMBOL_STRING_TYPE || Symbol->Type == SYMBOL_WSTRING_TYPE) + { + int temp = GetSymbolHeapSize(Symbol); + i += temp; + } + else + { + i++; + } + } + + if (!Found) + { + *Error = SCRIPT_ENGINE_ERROR_SYNTAX; + break; + } + + // + // skip excuting user-defined function first time + // + Symbol = CodeBuffer->Head + i - 1; + Symbol->Value = CurrentPointer; + + int StackTempNumber = 0; + for (int j = i; j < CurrentPointer; j++) + { + Symbol = CodeBuffer->Head + j; + if (Symbol->Type == SYMBOL_STACK_TEMP_TYPE && (Symbol->Value + 1) > StackTempNumber) + { + StackTempNumber = Symbol->Value + 1; + } + } + + Symbol = CodeBuffer->Head + i + 2; + Symbol->Value = StackTempNumber; + + CurrentFunctionSymbol = NULL; + } + else if (!strcmp(Operator->Value, "@RETURN_OF_USER_DEFINED_FUNCTION_WITHOUT_VALUE")) + { + if (!CurrentFunctionSymbol) + { + *Error = SCRIPT_ENGINE_ERROR_SYNTAX; + break; + } + if (CurrentFunctionSymbol->VariableType != VARIABLE_TYPE_VOID) + { + *Error = SCRIPT_ENGINE_ERROR_NON_VOID_FUNCTION_NOT_RETURNING_VALUE; + break; + } + PushSymbol(CodeBuffer, OperatorSymbol); + } + else if (!strcmp(Operator->Value, "@RETURN_OF_USER_DEFINED_FUNCTION_WITH_VALUE")) + { + if (!CurrentFunctionSymbol) + { + *Error = SCRIPT_ENGINE_ERROR_SYNTAX; + break; + } + if (CurrentFunctionSymbol->VariableType == VARIABLE_TYPE_VOID) + { + *Error = SCRIPT_ENGINE_ERROR_VOID_FUNCTION_RETURNING_VALUE; + break; + } + + PushSymbol(CodeBuffer, OperatorSymbol); + + Op0 = Pop(MatchedStack); + Op0Symbol = ToSymbol(Op0, Error); + PushSymbol(CodeBuffer, Op0Symbol); + FreeTemp(Op0); + + if (*Error != SCRIPT_ENGINE_ERROR_FREE) + { + break; + } + } + + else if (!strcmp(Operator->Value, "@CALL_USER_DEFINED_FUNCTION")) + { + PSYMBOL Symbol = NULL; + int i = 0; + PTOKEN FunctionToken = Top(MatchedStack); + BOOL Found = FALSE; + + // + // find function's address + // + for (; i < CodeBuffer->Pointer;) + { + Symbol = CodeBuffer->Head + i; + + if (Symbol->Type == SYMBOL_USER_DEFINED_FUNCTION_TYPE && !strcmp(FunctionToken->Value, Symbol->Value)) + { + Found = TRUE; + break; + } + else if (Symbol->Type == SYMBOL_STRING_TYPE || Symbol->Type == SYMBOL_WSTRING_TYPE) + { + int temp = GetSymbolHeapSize(Symbol); + i += temp; + } + else + { + i++; + } + } + + if (!Found) + { + *Error = SCRIPT_ENGINE_ERROR_UNDEFINED_FUNCTION; + break; + } + + FunctionToken->Type = FUNCTION_TYPE; + PushSymbol(CodeBuffer, OperatorSymbol); + } + else if (!strcmp(Operator->Value, "@CALL_USER_DEFINED_FUNCTION_PARAMETER")) + { + // will rewrite here to input variable's type + PushSymbol(CodeBuffer, OperatorSymbol); + + Op0Symbol = ToSymbol(Top(MatchedStack), Error); + PushSymbol(CodeBuffer, Op0Symbol); + if (*Error != SCRIPT_ENGINE_ERROR_FREE) + { + break; + } + } + else if (!strcmp(Operator->Value, "@END_OF_CALLING_USER_DEFINED_FUNCTION_WITHOUT_RETURNING_VALUE") || !strcmp(Operator->Value, "@END_OF_CALLING_USER_DEFINED_FUNCTION_WITH_RETURNING_VALUE")) + { + PSYMBOL Symbol = NULL; + int i = 0; + int TargetFunctionVariableNum = 0; + int VariableNum = 0; + PTOKEN FunctionToken = NULL; + BOOL Found = FALSE; + PTOKEN ReturnValueToken = NULL; + + while (MatchedStack->Pointer > 0) + { + FunctionToken = Pop(MatchedStack); + + if (FunctionToken->Type == FUNCTION_TYPE) + { + break; + } + else + { + VariableNum++; + // RemoveToken(&FunctionToken); + } + } + + // + // find function's address + // + for (; i < CodeBuffer->Pointer;) + { + Symbol = CodeBuffer->Head + i; + + if (Symbol->Type == SYMBOL_USER_DEFINED_FUNCTION_TYPE && !strcmp(FunctionToken->Value, Symbol->Value)) + { + Found = TRUE; + break; + } + else if (Symbol->Type == SYMBOL_STRING_TYPE || Symbol->Type == SYMBOL_WSTRING_TYPE) + { + int temp = GetSymbolHeapSize(Symbol); + i += temp; + } + else + { + i++; + } + } + + if (!Found) + { + *Error = SCRIPT_ENGINE_ERROR_UNDEFINED_FUNCTION; + break; + } + + // will rewrite here + for (int j = 0; j < UserDefinedFunctions->Pointer; j++) + { + Symbol = UserDefinedFunctions->Head + j; + if (Symbol->Type == SYMBOL_USER_DEFINED_FUNCTION_TYPE && !strcmp(FunctionToken->Value, Symbol->Value)) + { + j++; + Symbol = UserDefinedFunctions->Head + j; + while (Symbol->Type != SYMBOL_USER_DEFINED_FUNCTION_TYPE && j < UserDefinedFunctions->Pointer) + { + TargetFunctionVariableNum++; + j++; + Symbol = UserDefinedFunctions->Head + j; + } + goto ExitLoop; + } + } + + ExitLoop: + + if (VariableNum != TargetFunctionVariableNum) + { + *Error = SCRIPT_ENGINE_ERROR_SYNTAX; + break; + } + + // + // Add call user-defined function instruction + // + PushSymbol(CodeBuffer, OperatorSymbol); + + // + // Add function's address + // + PSYMBOL JumpAddressSymbol = NewSymbol(); + JumpAddressSymbol->Type = SYMBOL_NUM_TYPE; + JumpAddressSymbol->Value = i; + PushSymbol(CodeBuffer, JumpAddressSymbol); + RemoveSymbol(&JumpAddressSymbol); + + // + // Add return address + // + JumpAddressSymbol = NewSymbol(); + JumpAddressSymbol->Type = SYMBOL_RETURN_ADDRESS_TYPE; + JumpAddressSymbol->Value = CodeBuffer->Pointer + 1; + PushSymbol(CodeBuffer, JumpAddressSymbol); + RemoveSymbol(&JumpAddressSymbol); + + if (!strcmp(Operator->Value, "@END_OF_CALLING_USER_DEFINED_FUNCTION_WITH_RETURNING_VALUE")) + { + if (FunctionToken->Type == VARIABLE_TYPE_VOID) + { + *Error = SCRIPT_ENGINE_ERROR_VOID_FUNCTION_RETURNING_VALUE; + break; + } + + // + // Add return variable symbol + // + Temp = NewTemp(Error,CurrentFunctionSymbol); + Push(MatchedStack, Temp); + + PSYMBOL Symbol = NewSymbol(); + Symbol->Type = SYMBOL_SEMANTIC_RULE_TYPE; + Symbol->Value = FUNC_MOV_RETURN_VALUE; + PushSymbol(CodeBuffer, Symbol); + RemoveSymbol(&Symbol); + + TempSymbol = ToSymbol(Temp, Error); + PushSymbol(CodeBuffer, TempSymbol); + + if (*Error != SCRIPT_ENGINE_ERROR_FREE) + { + break; + } + } + + RemoveToken(&FunctionToken); + } + else if (!strcmp(Operator->Value, "@MOV")) { PushSymbol(CodeBuffer, OperatorSymbol); Op0 = Pop(MatchedStack); @@ -548,6 +914,22 @@ CodeGen(PTOKEN_LIST MatchedStack, PSYMBOL_BUFFER CodeBuffer, PTOKEN Operator, PS Op1Symbol = ToSymbol(Op1, Error); } + if (MatchedStack->Pointer > 0) + { + if (Top(MatchedStack)->Type == INPUT_VARIABLE_TYPE) + { + VariableType = HandleType(MatchedStack); + + if (VariableType == VARIABLE_TYPE_UNKNOWN) + { + *Error = SCRIPT_ENGINE_ERROR_UNDEFINED_VARIABLE_TYPE; + break; + } + + Op1Symbol->VariableType = VariableType; + } + } + PushSymbol(CodeBuffer, Op0Symbol); PushSymbol(CodeBuffer, Op1Symbol); @@ -579,7 +961,7 @@ CodeGen(PTOKEN_LIST MatchedStack, PSYMBOL_BUFFER CodeBuffer, PTOKEN Operator, PS Op0 = Pop(MatchedStack); Op0Symbol = ToSymbol(Op0, Error); - Temp = NewTemp(Error); + Temp = NewTemp(Error, CurrentFunctionSymbol); Push(MatchedStack, Temp); TempSymbol = ToSymbol(Temp, Error); @@ -739,7 +1121,7 @@ CodeGen(PTOKEN_LIST MatchedStack, PSYMBOL_BUFFER CodeBuffer, PTOKEN Operator, PS break; } - Temp = NewTemp(Error); + Temp = NewTemp(Error, CurrentFunctionSymbol); Push(MatchedStack, Temp); TempSymbol = ToSymbol(Temp, Error); PushSymbol(CodeBuffer, TempSymbol); @@ -787,7 +1169,7 @@ CodeGen(PTOKEN_LIST MatchedStack, PSYMBOL_BUFFER CodeBuffer, PTOKEN Operator, PS PushSymbol(CodeBuffer, Op1Symbol); PushSymbol(CodeBuffer, Op2Symbol); - Temp = NewTemp(Error); + Temp = NewTemp(Error, CurrentFunctionSymbol); Push(MatchedStack, Temp); TempSymbol = ToSymbol(Temp, Error); PushSymbol(CodeBuffer, TempSymbol); @@ -839,7 +1221,7 @@ CodeGen(PTOKEN_LIST MatchedStack, PSYMBOL_BUFFER CodeBuffer, PTOKEN Operator, PS Op1 = Pop(MatchedStack); Op1Symbol = ToSymbol(Op1, Error); - Temp = NewTemp(Error); + Temp = NewTemp(Error, CurrentFunctionSymbol); Push(MatchedStack, Temp); TempSymbol = ToSymbol(Temp, Error); @@ -886,7 +1268,7 @@ CodeGen(PTOKEN_LIST MatchedStack, PSYMBOL_BUFFER CodeBuffer, PTOKEN Operator, PS } else if (!strcmp(Operator->Value, "@JZ")) { - UINT64 CurrentPointer = CodeBuffer->Pointer; + // UINT64 CurrentPointer = CodeBuffer->Pointer; PushSymbol(CodeBuffer, OperatorSymbol); PSYMBOL JumpAddressSymbol = NewSymbol(); @@ -1494,7 +1876,7 @@ CodeGen(PTOKEN_LIST MatchedStack, PSYMBOL_BUFFER CodeBuffer, PTOKEN Operator, PS Op0 = Pop(MatchedStack); Op0Symbol = ToSymbol(Op0, Error); - Temp = NewTemp(Error); + Temp = NewTemp(Error, CurrentFunctionSymbol); Push(MatchedStack, Temp); TempSymbol = ToSymbol(Temp, Error); @@ -1523,7 +1905,7 @@ CodeGen(PTOKEN_LIST MatchedStack, PSYMBOL_BUFFER CodeBuffer, PTOKEN Operator, PS break; } - Temp = NewTemp(Error); + Temp = NewTemp(Error, CurrentFunctionSymbol); Push(MatchedStack, Temp); TempSymbol = ToSymbol(Temp, Error); PushSymbol(CodeBuffer, TempSymbol); @@ -1550,7 +1932,7 @@ CodeGen(PTOKEN_LIST MatchedStack, PSYMBOL_BUFFER CodeBuffer, PTOKEN Operator, PS PushSymbol(CodeBuffer, Op1Symbol); PushSymbol(CodeBuffer, Op2Symbol); - Temp = NewTemp(Error); + Temp = NewTemp(Error, CurrentFunctionSymbol); Push(MatchedStack, Temp); TempSymbol = ToSymbol(Temp, Error); PushSymbol(CodeBuffer, TempSymbol); @@ -1573,7 +1955,7 @@ CodeGen(PTOKEN_LIST MatchedStack, PSYMBOL_BUFFER CodeBuffer, PTOKEN Operator, PS Op0 = Pop(MatchedStack); Op0Symbol = ToSymbol(Op0, Error); - Temp = NewTemp(Error); + Temp = NewTemp(Error, CurrentFunctionSymbol); Push(MatchedStack, Temp); TempSymbol = ToSymbol(Temp, Error); @@ -1602,7 +1984,7 @@ CodeGen(PTOKEN_LIST MatchedStack, PSYMBOL_BUFFER CodeBuffer, PTOKEN Operator, PS break; } - Temp = NewTemp(Error); + Temp = NewTemp(Error, CurrentFunctionSymbol); Push(MatchedStack, Temp); TempSymbol = ToSymbol(Temp, Error); PushSymbol(CodeBuffer, TempSymbol); @@ -1723,6 +2105,7 @@ ScriptEngineBooleanExpresssionParse( UINT64 BooleanExpressionSize, PTOKEN FirstToken, PTOKEN_LIST MatchedStack, + PSYMBOL_BUFFER UserDefinedFunctions, PSYMBOL_BUFFER CodeBuffer, char * str, char * c, @@ -1854,7 +2237,7 @@ ScriptEngineBooleanExpresssionParse( } else { - CodeGen(MatchedStack, CodeBuffer, SemanticRule, Error); + CodeGen(MatchedStack, UserDefinedFunctions, CodeBuffer, SemanticRule, Error); if (*Error != SCRIPT_ENGINE_ERROR_FREE) { break; @@ -1898,10 +2281,11 @@ PSYMBOL NewSymbol(void) { PSYMBOL Symbol; - Symbol = (PSYMBOL)malloc(sizeof(SYMBOL)); - Symbol->Value = 0; - Symbol->Len = 0; - Symbol->Type = 0; + Symbol = (PSYMBOL)malloc(sizeof(SYMBOL)); + Symbol->Value = 0; + Symbol->Len = 0; + Symbol->Type = 0; + Symbol->VariableType = 0; return Symbol; } @@ -1915,11 +2299,12 @@ PSYMBOL NewStringSymbol(PTOKEN Token) { PSYMBOL Symbol; - int BufferSize = (2 * sizeof(unsigned long long) + Token->Len) / sizeof(SYMBOL) + 1; + int BufferSize = (3 * sizeof(unsigned long long) + Token->Len) / sizeof(SYMBOL) + 1; Symbol = (unsigned long long)calloc(sizeof(SYMBOL), BufferSize); memcpy(&Symbol->Value, Token->Value, Token->Len); SetType(&Symbol->Type, SYMBOL_STRING_TYPE); - Symbol->Len = Token->Len; + Symbol->Len = Token->Len; + Symbol->VariableType = 0; return Symbol; } @@ -1933,14 +2318,40 @@ PSYMBOL NewWstringSymbol(PTOKEN Token) { PSYMBOL Symbol; - int BufferSize = (2 * sizeof(unsigned long long) + Token->Len) / sizeof(SYMBOL) + 1; + int BufferSize = (3 * sizeof(unsigned long long) + Token->Len) / sizeof(SYMBOL) + 1; Symbol = (unsigned long long)malloc(BufferSize * sizeof(SYMBOL)); memcpy(&Symbol->Value, Token->Value, Token->Len); SetType(&Symbol->Type, SYMBOL_WSTRING_TYPE); - Symbol->Len = Token->Len; + Symbol->Len = Token->Len; + Symbol->VariableType = 0; return Symbol; } +/** + * @brief + * + * @return PSYMBOL + */ +PSYMBOL +NewFunctionSymbol(char * FunctionName, VARIABLE_TYPE * VariableType) +{ + int Length = strlen(FunctionName); + PSYMBOL Symbol = NewSymbol(); + Symbol = (PSYMBOL)malloc(sizeof(SYMBOL)); + Symbol->Value = (char *)calloc(Length + 1, sizeof(char)); + memcpy(Symbol->Value, FunctionName, Length); + Symbol->Len = Length; + Symbol->Type = SYMBOL_USER_DEFINED_FUNCTION_TYPE; + Symbol->VariableType = VariableType; + return Symbol; +} + +/** + * @brief + * + * @return PSYMBOL + */ + /** * @brief Returns the number of SYMBOL objects (24 bytes) allocated by string or wstring sybmol * @@ -1950,7 +2361,7 @@ NewWstringSymbol(PTOKEN Token) unsigned int GetSymbolHeapSize(PSYMBOL Symbol) { - int Temp = (2 * sizeof(unsigned long long) + Symbol->Len) / sizeof(SYMBOL) + 1; + int Temp = (3 * sizeof(unsigned long long) + Symbol->Len) / sizeof(SYMBOL) + 1; return Temp; } @@ -2002,22 +2413,27 @@ ToSymbol(PTOKEN Token, PSCRIPT_ENGINE_ERROR_TYPE Error) Symbol->Value = GetGlobalIdentifierVal(Token); SetType(&Symbol->Type, SYMBOL_GLOBAL_ID_TYPE); return Symbol; + case LOCAL_ID: Symbol->Value = GetLocalIdentifierVal(Token); SetType(&Symbol->Type, SYMBOL_LOCAL_ID_TYPE); return Symbol; + case DECIMAL: Symbol->Value = DecimalToInt(Token->Value); SetType(&Symbol->Type, SYMBOL_NUM_TYPE); return Symbol; + case HEX: Symbol->Value = HexToInt(Token->Value); SetType(&Symbol->Type, SYMBOL_NUM_TYPE); return Symbol; + case OCTAL: Symbol->Value = OctalToInt(Token->Value); SetType(&Symbol->Type, SYMBOL_NUM_TYPE); return Symbol; + case BINARY: Symbol->Value = BinaryToInt(Token->Value); SetType(&Symbol->Type, SYMBOL_NUM_TYPE); @@ -2037,11 +2453,17 @@ ToSymbol(PTOKEN Token, PSCRIPT_ENGINE_ERROR_TYPE Error) Symbol->Value = SemanticRuleToInt(Token->Value); SetType(&Symbol->Type, SYMBOL_SEMANTIC_RULE_TYPE); return Symbol; + case TEMP: Symbol->Value = DecimalToInt(Token->Value); SetType(&Symbol->Type, SYMBOL_TEMP_TYPE); return Symbol; + case STACK_TEMP: + Symbol->Value = DecimalToInt(Token->Value); + SetType(&Symbol->Type, SYMBOL_STACK_TEMP_TYPE); + return Symbol; + case STRING: RemoveSymbol(&Symbol); return NewStringSymbol(Token); @@ -2050,6 +2472,11 @@ ToSymbol(PTOKEN Token, PSCRIPT_ENGINE_ERROR_TYPE Error) RemoveSymbol(&Symbol); return NewWstringSymbol(Token); + case FUNCTION_PARAMETER_ID: + Symbol->Value = GetFunctionParameterIdentifier(Token); + SetType(&Symbol->Type, SYMBOL_FUNCTION_PARAMETER_ID_TYPE); + return Symbol; + default: *Error = SCRIPT_ENGINE_ERROR_UNRESOLVED_VARIABLE; Symbol->Type = INVALID; @@ -2346,7 +2773,7 @@ HandleError(PSCRIPT_ENGINE_ERROR_TYPE Error, char * str) strcat(Message, "Invalid Syntax"); return Message; - case SCRIPT_ENGINE_ERROR_UNKOWN_TOKEN: + case SCRIPT_ENGINE_ERROR_UNKNOWN_TOKEN: strcat(Message, "Syntax Error: "); strcat(Message, "Unknown Token"); return Message; @@ -2366,6 +2793,18 @@ HandleError(PSCRIPT_ENGINE_ERROR_TYPE Error, char * str) strcat(Message, "Please split the expression to many smaller expressions."); return Message; + case SCRIPT_ENGINE_ERROR_UNDEFINED_FUNCTION: + strcat(Message, "Undefined Function"); + return Message; + case SCRIPT_ENGINE_ERROR_UNDEFINED_VARIABLE_TYPE: + strcat(Message, "Undefined Variable Type"); + return Message; + case SCRIPT_ENGINE_ERROR_VOID_FUNCTION_RETURNING_VALUE: + strcat(Message, "Returning a value in void function"); + return Message; + case SCRIPT_ENGINE_ERROR_NON_VOID_FUNCTION_NOT_RETURNING_VALUE: + strcat(Message, "Not returning a value in noo-void function"); + return Message; default: strcat(Message, "Unkown Error: "); return Message; @@ -2442,6 +2881,41 @@ NewLocalIdentifier(PTOKEN Token) return IdTable->Pointer - 1; } +/** + * @brief + * + * @param Token + * @return int + */ +int +NewFunctionParameterIdentifier(PTOKEN Token) +{ + PTOKEN CopiedToken = CopyToken(Token); + FunctionParameterIdTable = Push(FunctionParameterIdTable, CopiedToken); + return FunctionParameterIdTable->Pointer - 1; +} + +/** + * @brief + * + * @param Token + * @return int + */ +int +GetFunctionParameterIdentifier(PTOKEN Token) +{ + PTOKEN CurrentToken; + for (uintptr_t i = 0; i < FunctionParameterIdTable->Pointer; i++) + { + CurrentToken = *(FunctionParameterIdTable->Head + i); + if (!strcmp(Token->Value, CurrentToken->Value)) + { + return (int)i; + } + } + return -1; +} + /** * @brief Returns the size of Right Hand Side (RHS) of a rule * @@ -2488,6 +2962,10 @@ LalrIsOperandType(PTOKEN Token) { return TRUE; } + else if (Token->Type == FUNCTION_PARAMETER_ID) + { + return TRUE; + } else if (Token->Type == DECIMAL) { return TRUE; @@ -2526,3 +3004,14 @@ LalrIsOperandType(PTOKEN Token) } return FALSE; } + +PSYMBOL_BUFFER +GetStackBuffer() +{ + PSYMBOL_BUFFER StackBuffer = NewSymbolBuffer(); + for (int i = 0; i < 128; i++) + { + PushSymbol(StackBuffer, NewSymbol()); + } + return StackBuffer; +} \ No newline at end of file diff --git a/hyperdbg/script-engine/code/type.c b/hyperdbg/script-engine/code/type.c new file mode 100644 index 00000000..a087ded8 --- /dev/null +++ b/hyperdbg/script-engine/code/type.c @@ -0,0 +1,165 @@ +#include "pch.h" + +VARIABLE_TYPE * VARIABLE_TYPE_UNKNOWN = &(VARIABLE_TYPE) {TY_UNKNOWN}; + +VARIABLE_TYPE * VARIABLE_TYPE_VOID = &(VARIABLE_TYPE) {TY_VOID, 1, 1}; +VARIABLE_TYPE * VARIABLE_TYPE_BOOL = &(VARIABLE_TYPE) {TY_BOOL, 1, 1}; + +VARIABLE_TYPE * VARIABLE_TYPE_CHAR = &(VARIABLE_TYPE) {TY_CHAR, 1, 1}; +VARIABLE_TYPE * VARIABLE_TYPE_SHORT = &(VARIABLE_TYPE) {TY_SHORT, 2, 2}; +VARIABLE_TYPE * VARIABLE_TYPE_INT = &(VARIABLE_TYPE) {TY_INT, 4, 4}; +VARIABLE_TYPE * VARIABLE_TYPE_LONG = &(VARIABLE_TYPE) {TY_LONG, 8, 8}; + +VARIABLE_TYPE * VARIABLE_TYPE_UCHAR = &(VARIABLE_TYPE) {TY_CHAR, 1, 1, TRUE}; +VARIABLE_TYPE * VARIABLE_TYPE_USHORT = &(VARIABLE_TYPE) {TY_SHORT, 2, 2, TRUE}; +VARIABLE_TYPE * VARIABLE_TYPE_UINT = &(VARIABLE_TYPE) {TY_INT, 4, 4, TRUE}; +VARIABLE_TYPE * VARIABLE_TYPE_ULONG = &(VARIABLE_TYPE) {TY_LONG, 8, 8, TRUE}; + +VARIABLE_TYPE * VARIABLE_TYPE_FLOAT = &(VARIABLE_TYPE) {TY_FLOAT, 4, 4}; +VARIABLE_TYPE * VARIABLE_TYPE_DOUBLE = &(VARIABLE_TYPE) {TY_DOUBLE, 8, 8}; +VARIABLE_TYPE * VARIABLE_TYPE_LDOUBLE = &(VARIABLE_TYPE) {TY_LDOUBLE, 16, 16}; + +/** + * @brief Return a variable type + * + * @param str + */ +VARIABLE_TYPE * +HandleType(PTOKEN_LIST PtokenStack) +{ + enum + { + ENUM_VOID = 1 << 0, + ENUM_BOOL = 1 << 2, + ENUM_CHAR = 1 << 4, + ENUM_SHORT = 1 << 6, + ENUM_INT = 1 << 8, + ENUM_LONG = 1 << 10, + ENUM_FLOAT = 1 << 12, + ENUM_DOUBLE = 1 << 14, + ENUM_OTHER = 1 << 16, + ENUM_SIGNED = 1 << 17, + ENUM_UNSIGNED = 1 << 18, + }; + + VARIABLE_TYPE * Result = VARIABLE_TYPE_UNKNOWN; + int Counter = 0; + PTOKEN TopToken = NULL; + + while (PtokenStack->Pointer > 0) + { + TopToken = Pop(PtokenStack); + if (TopToken->Type != INPUT_VARIABLE_TYPE) + { + Push(PtokenStack, TopToken); + break; + } + if (!strcmp(TopToken->Value, "@VOID")) + { + Counter += ENUM_VOID; + } + else if (!strcmp(TopToken->Value, "@BOOL")) + { + Counter += ENUM_BOOL; + } + else if (!strcmp(TopToken->Value, "@CHAR")) + { + Counter += ENUM_CHAR; + } + else if (!strcmp(TopToken->Value, "@SHORT")) + { + Counter += ENUM_SHORT; + } + else if (!strcmp(TopToken->Value, "@INT")) + { + Counter += ENUM_INT; + } + else if (!strcmp(TopToken->Value, "@LONG")) + { + Counter += ENUM_LONG; + } + else if (!strcmp(TopToken->Value, "@FLOAT")) + { + Counter += ENUM_FLOAT; + } + else if (!strcmp(TopToken->Value, "@DOUBLE")) + { + Counter += ENUM_DOUBLE; + } + else if (!strcmp(TopToken->Value, "@SIGNED")) + { + Counter |= ENUM_SIGNED; + } + else if (!strcmp(TopToken->Value, "@UNSIGNED")) + { + Counter |= ENUM_UNSIGNED; + } + else + { + return VARIABLE_TYPE_UNKNOWN; + } + RemoveToken(&TopToken); + + switch (Counter) + { + case ENUM_VOID: + Result = VARIABLE_TYPE_VOID; + break; + case ENUM_BOOL: + Result = VARIABLE_TYPE_BOOL; + break; + case ENUM_CHAR: + case ENUM_SIGNED + ENUM_CHAR: + Result = VARIABLE_TYPE_CHAR; + break; + case ENUM_UNSIGNED + ENUM_CHAR: + Result = VARIABLE_TYPE_UCHAR; + break; + case ENUM_SHORT: + case ENUM_SHORT + ENUM_INT: + case ENUM_SIGNED + ENUM_SHORT: + case ENUM_SIGNED + ENUM_SHORT + ENUM_INT: + Result = VARIABLE_TYPE_INT; + break; + case ENUM_UNSIGNED + ENUM_SHORT: + case ENUM_UNSIGNED + ENUM_SHORT + ENUM_INT: + Result = VARIABLE_TYPE_USHORT; + break; + case ENUM_INT: + case ENUM_SIGNED: + case ENUM_SIGNED + ENUM_INT: + Result = VARIABLE_TYPE_INT; + break; + case ENUM_UNSIGNED: + case ENUM_UNSIGNED + ENUM_INT: + Result = VARIABLE_TYPE_UINT; + break; + case ENUM_LONG: + case ENUM_LONG + ENUM_INT: + case ENUM_LONG + ENUM_LONG: + case ENUM_LONG + ENUM_LONG + ENUM_INT: + case ENUM_SIGNED + ENUM_LONG: + case ENUM_SIGNED + ENUM_LONG + ENUM_INT: + case ENUM_SIGNED + ENUM_LONG + ENUM_LONG: + case ENUM_SIGNED + ENUM_LONG + ENUM_LONG + ENUM_INT: + Result = VARIABLE_TYPE_LONG; + break; + case ENUM_UNSIGNED + ENUM_LONG: + case ENUM_UNSIGNED + ENUM_LONG + ENUM_INT: + case ENUM_UNSIGNED + ENUM_LONG + ENUM_LONG: + case ENUM_UNSIGNED + ENUM_LONG + ENUM_LONG + ENUM_INT: + Result = VARIABLE_TYPE_ULONG; + break; + case ENUM_FLOAT: + Result = VARIABLE_TYPE_FLOAT; + break; + case ENUM_DOUBLE: + Result = VARIABLE_TYPE_DOUBLE; + break; + case ENUM_LONG + ENUM_DOUBLE: + Result = VARIABLE_TYPE_LDOUBLE; + break; + } + } + return Result; +} \ No newline at end of file diff --git a/hyperdbg/script-engine/header/common.h b/hyperdbg/script-engine/header/common.h index 9fe5d05d..711c605d 100644 --- a/hyperdbg/script-engine/header/common.h +++ b/hyperdbg/script-engine/header/common.h @@ -57,6 +57,11 @@ typedef enum TOKEN_TYPE TEMP, STRING, WSTRING, + INPUT_VARIABLE_TYPE, + HANDLED_VARIABLE_TYPE, + FUNCTION_TYPE, + FUNCTION_PARAMETER_ID, + STACK_TEMP, UNKNOWN } TOKEN_TYPE; @@ -106,7 +111,10 @@ PTOKEN CopyToken(PTOKEN Token); PTOKEN -NewTemp(PSCRIPT_ENGINE_ERROR_TYPE); +NewTemp(PSCRIPT_ENGINE_ERROR_TYPE, PSYMBOL); + +PTOKEN +NewStackTemp(PSCRIPT_ENGINE_ERROR_TYPE); void FreeTemp(PTOKEN Temp); @@ -194,7 +202,7 @@ BinaryToInt(char * str); void RotateLeftStringOnce(char * str); - //////////////////////////////////////////////////// +//////////////////////////////////////////////////// // Semantic Rule Related Functions // //////////////////////////////////////////////////// @@ -243,4 +251,7 @@ IsTwoOperandOperator(PTOKEN Operator); char IsOneOperandOperator(PTOKEN Operator); +char +IsVariableType(PTOKEN Operator); + #endif // !COMMON_H diff --git a/hyperdbg/script-engine/header/globals.h b/hyperdbg/script-engine/header/globals.h index c1221ed1..3c69d1e2 100644 --- a/hyperdbg/script-engine/header/globals.h +++ b/hyperdbg/script-engine/header/globals.h @@ -16,5 +16,5 @@ # define MAX_TEMP_COUNT 128 extern char TempMap[MAX_TEMP_COUNT]; - +extern char StackTempMap[MAX_TEMP_COUNT]; #endif // !GLOBALS_H diff --git a/hyperdbg/script-engine/header/parse-table.h b/hyperdbg/script-engine/header/parse-table.h index 68a16dd1..81c0710a 100644 --- a/hyperdbg/script-engine/header/parse-table.h +++ b/hyperdbg/script-engine/header/parse-table.h @@ -1,17 +1,17 @@ #pragma once #ifndef PARSE_TABLE_H #define PARSE_TABLE_H -#define RULES_COUNT 160 -#define TERMINAL_COUNT 89 -#define NONETERMINAL_COUNT 37 +#define RULES_COUNT 202 +#define TERMINAL_COUNT 101 +#define NONETERMINAL_COUNT 49 #define START_VARIABLE "S" #define MAX_RHS_LEN 15 -#define KEYWORD_LIST_LENGTH 79 +#define KEYWORD_LIST_LENGTH 89 #define OPERATORS_ONE_OPERAND_LIST_LENGTH 4 #define OPERATORS_TWO_OPERAND_LIST_LENGTH 16 #define REGISTER_MAP_LIST_LENGTH 120 #define PSEUDO_REGISTER_MAP_LIST_LENGTH 14 -#define SEMANTIC_RULES_MAP_LIST_LENGTH 118 +#define SEMANTIC_RULES_MAP_LIST_LENGTH 137 #define THREEOPFUNC1_LENGTH 1 #define THREEOPFUNC2_LENGTH 2 #define TWOOPFUNC1_LENGTH 5 @@ -25,6 +25,7 @@ #define TWOOPFUNC4_LENGTH 1 #define ZEROOPFUNC1_LENGTH 7 #define VARARGFUNC1_LENGTH 1 +#define VARIABLETYPE_LENGTH 10 extern const struct _TOKEN Lhs[RULES_COUNT]; extern const struct _TOKEN Rhs[RULES_COUNT][MAX_RHS_LEN]; extern const unsigned int RhsSize[RULES_COUNT]; @@ -47,16 +48,17 @@ extern const char* OneOpFunc4[]; extern const char* TwoOpFunc4[]; extern const char* ZeroOpFunc1[]; extern const char* VarArgFunc1[]; +extern const char* VARIABLETYPE[]; extern const SYMBOL_MAP SemanticRulesMapList[]; extern const SYMBOL_MAP RegisterMapList[]; extern const SYMBOL_MAP PseudoRegisterMapList[]; -#define LALR_RULES_COUNT 84 -#define LALR_TERMINAL_COUNT 62 +#define LALR_RULES_COUNT 85 +#define LALR_TERMINAL_COUNT 63 #define LALR_NONTERMINAL_COUNT 19 #define LALR_MAX_RHS_LEN 9 -#define LALR_STATE_COUNT 225 +#define LALR_STATE_COUNT 226 extern const struct _TOKEN LalrLhs[RULES_COUNT]; extern const struct _TOKEN LalrRhs[RULES_COUNT][MAX_RHS_LEN]; extern const unsigned int LalrRhsSize[RULES_COUNT]; diff --git a/hyperdbg/script-engine/header/scanner.h b/hyperdbg/script-engine/header/scanner.h index d20de9e7..8abea1ff 100644 --- a/hyperdbg/script-engine/header/scanner.h +++ b/hyperdbg/script-engine/header/scanner.h @@ -19,6 +19,11 @@ */ PTOKEN_LIST IdTable; +/** + * @brief + */ +PTOKEN_LIST FunctionParameterIdTable; + /** * @brief number of read characters from input */ diff --git a/hyperdbg/script-engine/header/script-engine.h b/hyperdbg/script-engine/header/script-engine.h index 0b00a559..ef41b655 100644 --- a/hyperdbg/script-engine/header/script-engine.h +++ b/hyperdbg/script-engine/header/script-engine.h @@ -9,7 +9,9 @@ * @copyright This project is released under the GNU Public License v3. * */ + #pragma once +#include "type.h" #ifndef SCRIPT_ENGINE_H # define SCRIPT_ENGINE_H @@ -54,10 +56,14 @@ typedef enum _SCRIPT_ENGINE_ERROR_TYPE { SCRIPT_ENGINE_ERROR_FREE, SCRIPT_ENGINE_ERROR_SYNTAX, - SCRIPT_ENGINE_ERROR_UNKOWN_TOKEN, + SCRIPT_ENGINE_ERROR_UNKNOWN_TOKEN, SCRIPT_ENGINE_ERROR_UNRESOLVED_VARIABLE, SCRIPT_ENGINE_ERROR_UNHANDLED_SEMANTIC_RULE, - SCRIPT_ENGINE_ERROR_TEMP_LIST_FULL + SCRIPT_ENGINE_ERROR_TEMP_LIST_FULL, + SCRIPT_ENGINE_ERROR_UNDEFINED_FUNCTION, + SCRIPT_ENGINE_ERROR_UNDEFINED_VARIABLE_TYPE, + SCRIPT_ENGINE_ERROR_VOID_FUNCTION_RETURNING_VALUE, + SCRIPT_ENGINE_ERROR_NON_VOID_FUNCTION_NOT_RETURNING_VALUE } SCRIPT_ENGINE_ERROR_TYPE, *PSCRIPT_ENGINE_ERROR_TYPE; @@ -70,6 +76,12 @@ NewStringSymbol(PTOKEN Token); PSYMBOL NewWstringSymbol(PTOKEN Token); +PSYMBOL +NewFunctionSymbol(char * FunctionName, VARIABLE_TYPE * VariableType); + +PSYMBOL +NewVariableSymbol(char * VariableName, VARIABLE_TYPE * VariableType); + unsigned int GetSymbolHeapSize(PSYMBOL Symbol); @@ -92,12 +104,14 @@ PSYMBOL ToSymbol(PTOKEN PTOKEN, PSCRIPT_ENGINE_ERROR_TYPE Error); __declspec(dllexport) PSYMBOL_BUFFER ScriptEngineParse(char * str); +__declspec(dllimport) PSYMBOL_BUFFER GetStackBuffer(); void ScriptEngineBooleanExpresssionParse( UINT64 BooleanExpressionSize, PTOKEN FirstToken, PTOKEN_LIST MatchedStack, + PSYMBOL_BUFFER UserDefinedFunctions, PSYMBOL_BUFFER CodeBuffer, char * str, char * c, @@ -107,7 +121,7 @@ UINT64 BooleanExpressionExtractEnd(char * str, BOOL * WaitForWaitStatementBooleanExpression, PTOKEN CurrentIn); void -CodeGen(PTOKEN_LIST MatchedStack, PSYMBOL_BUFFER CodeBuffer, PTOKEN Operator, PSCRIPT_ENGINE_ERROR_TYPE Error); +CodeGen(PTOKEN_LIST MatchedStack, PSYMBOL_BUFFER UserDefinedFunctions, PSYMBOL_BUFFER CodeBuffer, PTOKEN Operator, PSCRIPT_ENGINE_ERROR_TYPE Error); unsigned long long int RegisterToInt(char * str); @@ -139,4 +153,9 @@ LalrGetRhsSize(int RuleId); BOOL LalrIsOperandType(PTOKEN PTOKEN); +int +NewFunctionParameterIdentifier(PTOKEN Token); + +int +GetFunctionParameterIdentifier(PTOKEN Token); #endif diff --git a/hyperdbg/script-engine/header/type.h b/hyperdbg/script-engine/header/type.h new file mode 100644 index 00000000..98289513 --- /dev/null +++ b/hyperdbg/script-engine/header/type.h @@ -0,0 +1,56 @@ +#pragma once + +#ifndef TYPE_H +# define TYPE_H + +typedef enum +{ + TY_UNKNOWN, + TY_VOID, + TY_BOOL, + TY_CHAR, + TY_SHORT, + TY_INT, + TY_LONG, + TY_FLOAT, + TY_DOUBLE, + TY_LDOUBLE, + TY_ENUM, + TY_PTR, + TY_FUNC, + TY_ARRAY, + TY_VLA, // variable-length array + TY_STRUCT, + TY_UNION, +} VARIABLE_TYPE_KIND; + +typedef struct VARIABLE_TYPE +{ + VARIABLE_TYPE_KIND Kind; + int Size; // sizeof() value + int Align; // alignment + BOOLEAN IsUnsigned; +} VARIABLE_TYPE; + +extern VARIABLE_TYPE * VARIABLE_TYPE_UNKNOWN; + +extern VARIABLE_TYPE * VARIABLE_TYPE_VOID; +extern VARIABLE_TYPE * VARIABLE_TYPE_BOOL; + +extern VARIABLE_TYPE * VARIABLE_TYPE_CHAR; +extern VARIABLE_TYPE * VARIABLE_TYPE_SHORT; +extern VARIABLE_TYPE * VARIABLE_TYPE_INT; +extern VARIABLE_TYPE * VARIABLE_TYPE_LONG; + +extern VARIABLE_TYPE * VARIABLE_TYPE_UCHAR; +extern VARIABLE_TYPE * VARIABLE_TYPE_USHORT; +extern VARIABLE_TYPE * VARIABLE_TYPE_UINT; +extern VARIABLE_TYPE * VARIABLE_TYPE_ULONG; + +extern VARIABLE_TYPE * VARIABLE_TYPE_FLOAT; +extern VARIABLE_TYPE * VARIABLE_TYPE_DOUBLE; +extern VARIABLE_TYPE * VARIABLE_TYPE_LDOUBLE; + +VARIABLE_TYPE * +HandleType(PTOKEN_LIST PtokenStack); +#endif \ No newline at end of file diff --git a/hyperdbg/script-engine/pch.h b/hyperdbg/script-engine/pch.h index c04a08d3..66276290 100644 --- a/hyperdbg/script-engine/pch.h +++ b/hyperdbg/script-engine/pch.h @@ -32,3 +32,4 @@ #include "..\script-eval\header\ScriptEngineCommonDefinitions.h" #include "script-engine.h" #include "parse-table.h" +#include "type.h" diff --git a/hyperdbg/script-engine/python/Boolean_Expression_Grammar.txt b/hyperdbg/script-engine/python/Boolean_Expression_Grammar.txt index 746fabaf..6706bfa0 100644 --- a/hyperdbg/script-engine/python/Boolean_Expression_Grammar.txt +++ b/hyperdbg/script-engine/python/Boolean_Expression_Grammar.txt @@ -91,12 +91,11 @@ E12->.TwoOpFunc4 ( WstringNumber , WstringNumber ) @.TwoOpFunc4 E12->( BE ) - # Types must have '_' at the first E12->_register @PUSH E12->_global_id @PUSH E12->_local_id @PUSH - +E12->_function_parameter_id @PUSH # numbers E12->_hex @PUSH diff --git a/hyperdbg/script-engine/python/Grammar.txt b/hyperdbg/script-engine/python/Grammar.txt index 8dc70954..5cd83620 100644 --- a/hyperdbg/script-engine/python/Grammar.txt +++ b/hyperdbg/script-engine/python/Grammar.txt @@ -38,7 +38,7 @@ .OperatorsTwoOperand->or xor and asr asl add sub mul div mod gt lt egt elt equal neq .OperatorsOneOperand->inc dec reference dereference -.SemantiRules->start_of_if jmp jz jnz jmp_to_end_and_jzcompleted end_of_if start_of_while end_of_while vargstart mov start_of_do_while start_of_do_while_commands end_of_do_while start_of_for for_inc_dec start_of_for_ommands end_of_if ignore_lvalue +.SemantiRules->start_of_if jmp jz jnz jmp_to_end_and_jzcompleted end_of_if start_of_while end_of_while vargstart mov start_of_do_while start_of_do_while_commands end_of_do_while start_of_for for_inc_dec start_of_for_ommands end_of_if ignore_lvalue end_of_user_defined_function return_of_user_defined_function_with_value return_of_user_defined_function_without_value call_user_defined_function_parameter end_of_calling_user_defined_function_without_returning_value end_of_calling_user_defined_function_with_returning_value call_user_defined_function start_of_user_defined_function mov_return_value .Registers->rax eax ax ah al rcx ecx cx ch cl rdx edx dx dh dl rbx ebx bx bh bl rsp esp sp spl rbp ebp bp bpl rsi esi si sil rdi edi di dil r8 r8d r8w r8h r8l r9 r9d r9w r9h r9l r10 r10d r10w r10h r10l r11 r11d r11w r11h r11l r12 r12d r12w r12h r12l r13 r13d r13w r13h r13l r14 r14d r14w r14h r14l r15 r15d r15w r15h r15l ds es fs gs cs ss rflags eflags flags cf pf af zf sf tf if df of iopl nt rf vm ac vif vip id rip eip ip idtr ldtr gdtr tr cr0 cr2 cr3 cr4 cr8 dr0 dr1 dr2 dr3 dr6 dr7 @@ -48,19 +48,59 @@ S->STATEMENT S S->{ STATEMENT S } S->eps - STATEMENT->IF_STATEMENT STATEMENT->WHILE_STATEMENT STATEMENT->DO_WHILE_STATEMENT STATEMENT->FOR_STATEMENT -STATEMENT->ASSIGNMENT_STATEMENT ; +STATEMENT->L_VALUE L_VALUE2 STATEMENT->CALL_FUNC_STATEMENT ; STATEMENT->break @BREAK ; STATEMENT->continue @CONTINUE ; +STATEMENT->VARIABLE_TYPE3 +S2->STATEMENT2 S2 +S2->{ STATEMENT2 S2 } +S2->eps +STATEMENT2->IF_STATEMENT +STATEMENT2->WHILE_STATEMENT +STATEMENT2->DO_WHILE_STATEMENT +STATEMENT2->FOR_STATEMENT +STATEMENT2->L_VALUE L_VALUE2 +STATEMENT2->CALL_FUNC_STATEMENT ; +STATEMENT2->break @BREAK ; +STATEMENT2->continue @CONTINUE ; +STATEMENT2->VARIABLE_TYPE1 VARIABLE_TYPE2 L_VALUE = EXPRESSION @MOV ; +STATEMENT2->return RETURN ; +RETURN->eps @RETURN_OF_USER_DEFINED_FUNCTION_WITHOUT_VALUE +RETURN->EXPRESSION @RETURN_OF_USER_DEFINED_FUNCTION_WITH_VALUE + +# name started with a dot is a list of fun, wii rewrite here +.VARIABLETYPE->void bool char short int long unsigned signed float double +VARIABLE_TYPE1->@PUSH .VARIABLETYPE + +VARIABLE_TYPE2->VARIABLE_TYPE1 +VARIABLE_TYPE2->eps + +VARIABLE_TYPE3->VARIABLE_TYPE1 VARIABLE_TYPE2 L_VALUE VARIABLE_TYPE4 +VARIABLE_TYPE4->= EXPRESSION @MOV ; + +# define function +VARIABLE_TYPE4->@START_OF_USER_DEFINED_FUNCTION ( VARIABLE_TYPE5 ) { S2 @END_OF_USER_DEFINED_FUNCTION } + +VARIABLE_TYPE5->eps +VARIABLE_TYPE5->VARIABLE_TYPE1 VARIABLE_TYPE2 L_VALUE @FUNCTION_PARAMETER VARIABLE_TYPE6 +VARIABLE_TYPE6->, VARIABLE_TYPE1 VARIABLE_TYPE2 L_VALUE @FUNCTION_PARAMETER VARIABLE_TYPE6 +VARIABLE_TYPE6->eps + +# L_VALUE2 is to decide whether is assignemnt or call user-defined function +L_VALUE2->ASSIGNMENT_STATEMENT' ; +L_VALUE2->@CALL_USER_DEFINED_FUNCTION ( CALL_USER_DEFINED_FUNCTION_PARAMETER ) @END_OF_CALLING_USER_DEFINED_FUNCTION_WITHOUT_RETURNING_VALUE ; +CALL_USER_DEFINED_FUNCTION_PARAMETER->eps +CALL_USER_DEFINED_FUNCTION_PARAMETER->EXPRESSION @CALL_USER_DEFINED_FUNCTION_PARAMETER CALL_USER_DEFINED_FUNCTION_PARAMETER2 +CALL_USER_DEFINED_FUNCTION_PARAMETER2->, EXPRESSION @CALL_USER_DEFINED_FUNCTION_PARAMETER CALL_USER_DEFINED_FUNCTION_PARAMETER2 +CALL_USER_DEFINED_FUNCTION_PARAMETER2->eps -ASSIGNMENT_STATEMENT->L_VALUE ASSIGNMENT_STATEMENT' ASSIGNMENT_STATEMENT'->++ @INC ASSIGNMENT_STATEMENT'->-- @DEC ASSIGNMENT_STATEMENT'->= EXPRESSION @MOV @@ -81,20 +121,21 @@ CALL_FUNC_STATEMENT->.ThreeOpFunc2 ( EXPRESSION , EXPRESSION , EXPRESSION @.Thre VA->, EXPRESSION VA VA->eps -IF_STATEMENT->if @START_OF_IF ( BOOLEAN_EXPRESSION ) @JZ { S } ELSIF_STATEMENT ELSE_STATEMENT @END_OF_IF END_OF_IF -ELSIF_STATEMENT->elsif @JMP_TO_END_AND_JZCOMPLETED ( BOOLEAN_EXPRESSION ) @JZ { S } ELSIF_STATEMENT +IF_STATEMENT->if @START_OF_IF ( BOOLEAN_EXPRESSION ) @JZ { S2 } ELSIF_STATEMENT ELSE_STATEMENT @END_OF_IF END_OF_IF +ELSIF_STATEMENT->elsif @JMP_TO_END_AND_JZCOMPLETED ( BOOLEAN_EXPRESSION ) @JZ { S2 } ELSIF_STATEMENT ELSIF_STATEMENT->@JMP_TO_END_AND_JZCOMPLETED ELSIF_STATEMENT' ELSIF_STATEMENT'->eps -ELSE_STATEMENT->else { S } +ELSE_STATEMENT->else { S2 } ELSE_STATEMENT->eps END_OF_IF->eps -WHILE_STATEMENT->while @START_OF_WHILE ( BOOLEAN_EXPRESSION ) @START_OF_WHILE_COMMANDS { S @END_OF_WHILE } -DO_WHILE_STATEMENT->do @START_OF_DO_WHILE { S } while ( BOOLEAN_EXPRESSION ) @END_OF_DO_WHILE ; +WHILE_STATEMENT->while @START_OF_WHILE ( BOOLEAN_EXPRESSION ) @START_OF_WHILE_COMMANDS { S2 @END_OF_WHILE } +DO_WHILE_STATEMENT->do @START_OF_DO_WHILE { S2 } while ( BOOLEAN_EXPRESSION ) @END_OF_DO_WHILE ; -FOR_STATEMENT->for ( SIMPLE_ASSIGNMENT ; @START_OF_FOR BOOLEAN_EXPRESSION ; @FOR_INC_DEC INC_DEC ) { @START_OF_FOR_COMMANDS S @END_OF_FOR } +FOR_STATEMENT->for ( SIMPLE_ASSIGNMENT ; @START_OF_FOR BOOLEAN_EXPRESSION ; @FOR_INC_DEC INC_DEC ) { @START_OF_FOR_COMMANDS S2 @END_OF_FOR } +SIMPLE_ASSIGNMENT->VARIABLE_TYPE1 VARIABLE_TYPE2 L_VALUE = EXPRESSION @MOV SIMPLE_ASSIGNMENT' SIMPLE_ASSIGNMENT->L_VALUE = EXPRESSION @MOV SIMPLE_ASSIGNMENT' SIMPLE_ASSIGNMENT->eps SIMPLE_ASSIGNMENT'->eps @@ -157,10 +198,10 @@ E12->.TwoOpFunc4 ( WstringNumber , WstringNumber @.TwoOpFunc4 ) E12->( EXPRESSION ) -# Types must have '_' at the first -E12->@PUSH _register -E12->@PUSH _local_id -E12->@PUSH _global_id +E12->L_VALUE E13 +E13->eps +E13->@CALL_USER_DEFINED_FUNCTION ( CALL_USER_DEFINED_FUNCTION_PARAMETER ) @END_OF_CALLING_USER_DEFINED_FUNCTION_WITH_RETURNING_VALUE + # numbers @@ -178,18 +219,15 @@ E12->~ E12 @NOT E12->* E12 @POI E12->& E12 @REFERENCE - - - - +# Types must have '_' at the first STRING->@PUSH _string WSTRING->@PUSH _wstring L_VALUE->@PUSH _global_id L_VALUE->@PUSH _local_id L_VALUE->@PUSH _register +L_VALUE->@PUSH _function_parameter_id StringNumber->EXPRESSION StringNumber->STRING WstringNumber->EXPRESSION WstringNumber->WSTRING - diff --git a/hyperdbg/script-engine/python/generator.py b/hyperdbg/script-engine/python/generator.py index 478cd8cc..34824f0a 100644 --- a/hyperdbg/script-engine/python/generator.py +++ b/hyperdbg/script-engine/python/generator.py @@ -41,6 +41,7 @@ class Generator(): typedef struct SYMBOL { long long unsigned Type; long long unsigned Len; + long long unsigned VariableType; long long unsigned Value; } SYMBOL, * PSYMBOL; typedef struct SYMBOL_BUFFER { @@ -75,8 +76,13 @@ typedef struct ACTION_BUFFER { #define SYMBOL_MEM_VALID_CHECK_MASK (1 << 31) #define SYMBOL_INVALID 9 #define SYMBOL_WSTRING_TYPE 10 -#define INVALID 0xffffffff -#define LALR_ACCEPT 0x7fffffff +#define SYMBOL_USER_DEFINED_FUNCTION_TYPE 11 +#define SYMBOL_FUNCTION_PARAMETER_ID_TYPE 12 +#define SYMBOL_RETURN_ADDRESS_TYPE 13 +#define SYMBOL_STACK_TEMP_TYPE 14 +#define SYMBOL_FUNCTION_PARAMETER_TYPE 15 +#define INVALID -999 +#define LALR_ACCEPT 999 \n\n""") diff --git a/hyperdbg/script-engine/python/ll1_parser.py b/hyperdbg/script-engine/python/ll1_parser.py index 722288f4..dd995ec5 100644 --- a/hyperdbg/script-engine/python/ll1_parser.py +++ b/hyperdbg/script-engine/python/ll1_parser.py @@ -762,6 +762,9 @@ class LL1Parser: j = 0 for Terminal in self.TerminalList: if Terminal in self.PredictDict[RuleId]: + if i ==34 and j ==3: + dccc=3 + if self.ParseTable[i][j] == self.INVALID: self.ParseTable[i][j] = RuleId diff --git a/hyperdbg/script-engine/script-engine.vcxproj b/hyperdbg/script-engine/script-engine.vcxproj index 03bcfbdf..671c6dc8 100644 --- a/hyperdbg/script-engine/script-engine.vcxproj +++ b/hyperdbg/script-engine/script-engine.vcxproj @@ -108,6 +108,7 @@ + @@ -116,6 +117,7 @@ + Create Create diff --git a/hyperdbg/script-engine/script-engine.vcxproj.filters b/hyperdbg/script-engine/script-engine.vcxproj.filters index 3e918814..6f89306c 100644 --- a/hyperdbg/script-engine/script-engine.vcxproj.filters +++ b/hyperdbg/script-engine/script-engine.vcxproj.filters @@ -29,6 +29,9 @@ header + + header + @@ -49,5 +52,8 @@ code + + code + \ No newline at end of file diff --git a/hyperdbg/script-eval/code/Functions.c b/hyperdbg/script-eval/code/Functions.c index a2c9e5ad..56e5abb9 100644 --- a/hyperdbg/script-eval/code/Functions.c +++ b/hyperdbg/script-eval/code/Functions.c @@ -30,7 +30,11 @@ GetValue(PGUEST_REGS GuestRegs, PACTION_BUFFER ActionBuffer, SCRIPT_ENGINE_VARIABLES_LIST * VariablesList, PSYMBOL Symbol, - BOOLEAN ReturnReference); + BOOLEAN ReturnReference, + SYMBOL_BUFFER * StackBuffer, + int * StackIndx, + int * StackBaseIndx, + int * StackTempBaseIndx); // // *** Functions *** @@ -1271,7 +1275,11 @@ ScriptEngineFunctionPrintf(PGUEST_REGS GuestRegs, char * Format, UINT64 ArgCount, PSYMBOL FirstArg, - BOOLEAN * HasError) + BOOLEAN * HasError, + SYMBOL_BUFFER * StackBuffer, + int * StackIndx, + int * StackBaseIndx, + int * StackTempBaseIndx) { // // *** The printf function *** @@ -1304,7 +1312,7 @@ ScriptEngineFunctionPrintf(PGUEST_REGS GuestRegs, memcpy(&TempSymbol, Symbol, sizeof(SYMBOL)); TempSymbol.Type &= 0x7fffffff; - Val = GetValue(GuestRegs, ActionDetail, VariablesList, &TempSymbol, FALSE); + Val = GetValue(GuestRegs, ActionDetail, VariablesList, &TempSymbol, FALSE, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); CHAR PercentageChar = Format[Position]; diff --git a/hyperdbg/script-eval/code/ScriptEngineEval.c b/hyperdbg/script-eval/code/ScriptEngineEval.c index 12099d58..ab5c18bc 100644 --- a/hyperdbg/script-eval/code/ScriptEngineEval.c +++ b/hyperdbg/script-eval/code/ScriptEngineEval.c @@ -89,7 +89,11 @@ GetValue(PGUEST_REGS GuestRegs, PACTION_BUFFER ActionBuffer, PSCRIPT_ENGINE_VARIABLES_LIST VariablesList, PSYMBOL Symbol, - BOOLEAN ReturnReference) + BOOLEAN ReturnReference, + SYMBOL_BUFFER * StackBuffer, + int * StackIndx, + int * StackBaseIndx, + int * StackTempBaseIndx) { switch (Symbol->Type) { @@ -129,22 +133,27 @@ GetValue(PGUEST_REGS GuestRegs, return GetPseudoRegValue(Symbol, ActionBuffer); case SYMBOL_TEMP_TYPE: - if (ReturnReference) return ((UINT64)&VariablesList->TempList[Symbol->Value]); else return VariablesList->TempList[Symbol->Value]; - default: -#ifdef SCRIPT_ENGINE_USER_MODE - ShowMessages("err, invalid value requested"); -#endif // SCRIPT_ENGINE_USER_MODE + case SYMBOL_STACK_TEMP_TYPE: + { + PSYMBOL StackSymbol = NULL; -#ifdef SCRIPT_ENGINE_KERNEL_MODE - LogInfo("Err, invalid value requested"); -#endif // SCRIPT_ENGINE_KERNEL_MODE + StackSymbol = (PSYMBOL)((unsigned long long)StackBuffer->Head + + (unsigned long long)((*StackTempBaseIndx + Symbol->Value) * sizeof(SYMBOL))); + return StackSymbol->Value; + } + case SYMBOL_FUNCTION_PARAMETER_ID_TYPE: + { + PSYMBOL StackSymbol = NULL; - return NULL_ZERO; + StackSymbol = (PSYMBOL)((unsigned long long)StackBuffer->Head + + (unsigned long long)((*StackBaseIndx + Symbol->Value) * sizeof(SYMBOL))); + return StackSymbol->Value; + } } } @@ -158,7 +167,7 @@ GetValue(PGUEST_REGS GuestRegs, * @return VOID */ VOID -SetValue(PGUEST_REGS GuestRegs, SCRIPT_ENGINE_VARIABLES_LIST * VariablesList, PSYMBOL Symbol, UINT64 Value) +SetValue(PGUEST_REGS GuestRegs, SCRIPT_ENGINE_VARIABLES_LIST * VariablesList, PSYMBOL Symbol, UINT64 Value, SYMBOL_BUFFER * StackBuffer, int * StackIndx, int * StackBaseIndx, int * StackTempBaseIndx) { switch (Symbol->Type) { @@ -174,6 +183,22 @@ SetValue(PGUEST_REGS GuestRegs, SCRIPT_ENGINE_VARIABLES_LIST * VariablesList, PS case SYMBOL_REGISTER_TYPE: SetRegValue(GuestRegs, Symbol, Value); return; + case SYMBOL_STACK_TEMP_TYPE: + { + PSYMBOL StackSymbol = NULL; + + StackSymbol = (PSYMBOL)((unsigned long long)StackBuffer->Head + + (unsigned long long)((*StackTempBaseIndx + Symbol->Value) * sizeof(SYMBOL))); + StackSymbol->Value = Value; + return; + } + case SYMBOL_FUNCTION_PARAMETER_ID_TYPE: + { + PSYMBOL StackSymbol = (PSYMBOL)((unsigned long long)StackBuffer->Head + + (unsigned long long)((*StackBaseIndx + Symbol->Value) * sizeof(SYMBOL))); + StackSymbol->Value = Value; + return; + } } } @@ -232,7 +257,11 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, ACTION_BUFFER * ActionDetail, SCRIPT_ENGINE_VARIABLES_LIST * VariablesList, SYMBOL_BUFFER * CodeBuffer, - UINT64 * Indx, + int * Indx, + SYMBOL_BUFFER * StackBuffer, + int * StackIndx, + int * StackBaseIndx, + int * StackTempBaseIndx, SYMBOL * ErrorOperator) { PSYMBOL Operator; @@ -248,6 +277,9 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, UINT64 DesVal; BOOL HasError = FALSE; + static int StackIndxTemp = NULL; + static unsigned long long ReturnValue = NULL; + Operator = (PSYMBOL)((unsigned long long)CodeBuffer->Head + (unsigned long long)(*Indx * sizeof(SYMBOL))); @@ -273,7 +305,7 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, *Indx = *Indx + 1; SrcVal0 = - GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE); + GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); Src1 = (PSYMBOL)((unsigned long long)CodeBuffer->Head + (unsigned long long)(*Indx * sizeof(SYMBOL))); @@ -281,7 +313,7 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, *Indx = *Indx + 1; SrcVal1 = - GetValue(GuestRegs, ActionDetail, VariablesList, Src1, FALSE); + GetValue(GuestRegs, ActionDetail, VariablesList, Src1, FALSE, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); Des = (PSYMBOL)((unsigned long long)CodeBuffer->Head + (unsigned long long)(*Indx * sizeof(SYMBOL))); @@ -290,7 +322,7 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, DesVal = ScriptEngineFunctionEd(SrcVal1, (DWORD)SrcVal0, &HasError); - SetValue(GuestRegs, VariablesList, Des, DesVal); + SetValue(GuestRegs, VariablesList, Des, DesVal, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); break; @@ -302,7 +334,7 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, *Indx = *Indx + 1; SrcVal0 = - GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE); + GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); Src1 = (PSYMBOL)((unsigned long long)CodeBuffer->Head + (unsigned long long)(*Indx * sizeof(SYMBOL))); @@ -310,7 +342,7 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, *Indx = *Indx + 1; SrcVal1 = - GetValue(GuestRegs, ActionDetail, VariablesList, Src1, FALSE); + GetValue(GuestRegs, ActionDetail, VariablesList, Src1, FALSE, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); Des = (PSYMBOL)((unsigned long long)CodeBuffer->Head + (unsigned long long)(*Indx * sizeof(SYMBOL))); @@ -319,7 +351,7 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, DesVal = ScriptEngineFunctionEb(SrcVal1, (BYTE)SrcVal0, &HasError); - SetValue(GuestRegs, VariablesList, Des, DesVal); + SetValue(GuestRegs, VariablesList, Des, DesVal, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); break; @@ -330,7 +362,7 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, *Indx = *Indx + 1; SrcVal0 = - GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE); + GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); Src1 = (PSYMBOL)((unsigned long long)CodeBuffer->Head + (unsigned long long)(*Indx * sizeof(SYMBOL))); @@ -338,7 +370,7 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, *Indx = *Indx + 1; SrcVal1 = - GetValue(GuestRegs, ActionDetail, VariablesList, Src1, FALSE); + GetValue(GuestRegs, ActionDetail, VariablesList, Src1, FALSE, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); Des = (PSYMBOL)((unsigned long long)CodeBuffer->Head + (unsigned long long)(*Indx * sizeof(SYMBOL))); @@ -347,7 +379,7 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, DesVal = ScriptEngineFunctionEq(SrcVal1, SrcVal0, &HasError); - SetValue(GuestRegs, VariablesList, Des, DesVal); + SetValue(GuestRegs, VariablesList, Des, DesVal, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); break; @@ -359,7 +391,7 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, *Indx = *Indx + 1; SrcVal0 = - GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE); + GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); Src1 = (PSYMBOL)((unsigned long long)CodeBuffer->Head + (unsigned long long)(*Indx * sizeof(SYMBOL))); @@ -367,7 +399,7 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, *Indx = *Indx + 1; SrcVal1 = - GetValue(GuestRegs, ActionDetail, VariablesList, Src1, FALSE); + GetValue(GuestRegs, ActionDetail, VariablesList, Src1, FALSE, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); Des = (PSYMBOL)((unsigned long long)CodeBuffer->Head + (unsigned long long)(*Indx * sizeof(SYMBOL))); @@ -375,7 +407,7 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, DesVal = ScriptEngineFunctionInterlockedExchange((volatile long long *)SrcVal1, SrcVal0, &HasError); - SetValue(GuestRegs, VariablesList, Des, DesVal); + SetValue(GuestRegs, VariablesList, Des, DesVal, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); break; @@ -387,7 +419,7 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, *Indx = *Indx + 1; SrcVal0 = - GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE); + GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); Src1 = (PSYMBOL)((unsigned long long)CodeBuffer->Head + (unsigned long long)(*Indx * sizeof(SYMBOL))); @@ -395,7 +427,7 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, *Indx = *Indx + 1; SrcVal1 = - GetValue(GuestRegs, ActionDetail, VariablesList, Src1, FALSE); + GetValue(GuestRegs, ActionDetail, VariablesList, Src1, FALSE, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); Des = (PSYMBOL)((unsigned long long)CodeBuffer->Head + (unsigned long long)(*Indx * sizeof(SYMBOL))); @@ -404,7 +436,7 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, DesVal = ScriptEngineFunctionInterlockedExchangeAdd((volatile long long *)SrcVal1, SrcVal0, &HasError); - SetValue(GuestRegs, VariablesList, Des, DesVal); + SetValue(GuestRegs, VariablesList, Des, DesVal, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); break; @@ -416,14 +448,14 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, *Indx = *Indx + 1; SrcVal0 = - GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE); + GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); Src1 = (PSYMBOL)((unsigned long long)CodeBuffer->Head + (unsigned long long)(*Indx * sizeof(SYMBOL))); *Indx = *Indx + 1; SrcVal1 = - GetValue(GuestRegs, ActionDetail, VariablesList, Src1, FALSE); + GetValue(GuestRegs, ActionDetail, VariablesList, Src1, FALSE, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); Src2 = (PSYMBOL)((unsigned long long)CodeBuffer->Head + (unsigned long long)(*Indx * sizeof(SYMBOL))); @@ -431,7 +463,7 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, *Indx = *Indx + 1; SrcVal2 = - GetValue(GuestRegs, ActionDetail, VariablesList, Src2, FALSE); + GetValue(GuestRegs, ActionDetail, VariablesList, Src2, FALSE, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); Des = (PSYMBOL)((unsigned long long)CodeBuffer->Head + (unsigned long long)(*Indx * sizeof(SYMBOL))); @@ -439,7 +471,7 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, DesVal = ScriptEngineFunctionInterlockedCompareExchange((volatile long long *)SrcVal2, SrcVal1, SrcVal0, &HasError); - SetValue(GuestRegs, VariablesList, Des, DesVal); + SetValue(GuestRegs, VariablesList, Des, DesVal, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); break; @@ -451,14 +483,14 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, *Indx = *Indx + 1; SrcVal0 = - GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE); + GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); Src1 = (PSYMBOL)((unsigned long long)CodeBuffer->Head + (unsigned long long)(*Indx * sizeof(SYMBOL))); *Indx = *Indx + 1; SrcVal1 = - GetValue(GuestRegs, ActionDetail, VariablesList, Src1, FALSE); + GetValue(GuestRegs, ActionDetail, VariablesList, Src1, FALSE, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); Src2 = (PSYMBOL)((unsigned long long)CodeBuffer->Head + (unsigned long long)(*Indx * sizeof(SYMBOL))); @@ -466,7 +498,7 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, *Indx = *Indx + 1; SrcVal2 = - GetValue(GuestRegs, ActionDetail, VariablesList, Src2, FALSE); + GetValue(GuestRegs, ActionDetail, VariablesList, Src2, FALSE, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); Des = (PSYMBOL)((unsigned long long)CodeBuffer->Head + (unsigned long long)(*Indx * sizeof(SYMBOL))); @@ -484,14 +516,14 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, *Indx = *Indx + 1; SrcVal0 = - GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE); + GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); Src1 = (PSYMBOL)((unsigned long long)CodeBuffer->Head + (unsigned long long)(*Indx * sizeof(SYMBOL))); *Indx = *Indx + 1; SrcVal1 = - GetValue(GuestRegs, ActionDetail, VariablesList, Src1, FALSE); + GetValue(GuestRegs, ActionDetail, VariablesList, Src1, FALSE, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); Src2 = (PSYMBOL)((unsigned long long)CodeBuffer->Head + (unsigned long long)(*Indx * sizeof(SYMBOL))); @@ -499,7 +531,7 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, *Indx = *Indx + 1; SrcVal2 = - GetValue(GuestRegs, ActionDetail, VariablesList, Src2, FALSE); + GetValue(GuestRegs, ActionDetail, VariablesList, Src2, FALSE, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); Des = (PSYMBOL)((unsigned long long)CodeBuffer->Head + (unsigned long long)(*Indx * sizeof(SYMBOL))); @@ -517,7 +549,7 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, *Indx = *Indx + 1; SrcVal0 = - GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE); + GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); Src1 = (PSYMBOL)((unsigned long long)CodeBuffer->Head + (unsigned long long)(*Indx * sizeof(SYMBOL))); @@ -525,7 +557,7 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, *Indx = *Indx + 1; SrcVal1 = - GetValue(GuestRegs, ActionDetail, VariablesList, Src1, FALSE); + GetValue(GuestRegs, ActionDetail, VariablesList, Src1, FALSE, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); ScriptEngineFunctionSpinlockLockCustomWait((volatile long *)SrcVal1, (UINT32)SrcVal0, &HasError); @@ -539,7 +571,7 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, *Indx = *Indx + 1; SrcVal0 = - GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE); + GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); Src1 = (PSYMBOL)((unsigned long long)CodeBuffer->Head + (unsigned long long)(*Indx * sizeof(SYMBOL))); @@ -547,7 +579,7 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, *Indx = *Indx + 1; SrcVal1 = - GetValue(GuestRegs, ActionDetail, VariablesList, Src1, FALSE); + GetValue(GuestRegs, ActionDetail, VariablesList, Src1, FALSE, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); ScriptEngineFunctionEventInject((UINT32)SrcVal1, (UINT32)SrcVal0, &HasError); @@ -594,7 +626,7 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, *Indx = *Indx + 1; SrcVal0 = - GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE); + GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); Des = (PSYMBOL)((unsigned long long)CodeBuffer->Head + (unsigned long long)(*Indx * sizeof(SYMBOL))); @@ -612,7 +644,7 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, *Indx = *Indx + 1; SrcVal0 = - GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE); + GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); Src1 = (PSYMBOL)((unsigned long long)CodeBuffer->Head + (unsigned long long)(*Indx * sizeof(SYMBOL))); @@ -620,7 +652,7 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, *Indx = *Indx + 1; SrcVal1 = - GetValue(GuestRegs, ActionDetail, VariablesList, Src1, FALSE); + GetValue(GuestRegs, ActionDetail, VariablesList, Src1, FALSE, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); Des = (PSYMBOL)((unsigned long long)CodeBuffer->Head + (unsigned long long)(*Indx * sizeof(SYMBOL))); @@ -629,7 +661,7 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, DesVal = SrcVal1 | SrcVal0; - SetValue(GuestRegs, VariablesList, Des, DesVal); + SetValue(GuestRegs, VariablesList, Des, DesVal, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); break; @@ -640,13 +672,13 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, *Indx = *Indx + 1; SrcVal0 = - GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE); + GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); DesVal = SrcVal0 + 1; Des = Src0; - SetValue(GuestRegs, VariablesList, Des, DesVal); + SetValue(GuestRegs, VariablesList, Des, DesVal, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); break; @@ -657,13 +689,13 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, *Indx = *Indx + 1; SrcVal0 = - GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE); + GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); DesVal = SrcVal0 - 1; Des = Src0; - SetValue(GuestRegs, VariablesList, Des, DesVal); + SetValue(GuestRegs, VariablesList, Des, DesVal, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); break; @@ -674,7 +706,7 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, *Indx = *Indx + 1; SrcVal0 = - GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE); + GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); Src1 = (PSYMBOL)((unsigned long long)CodeBuffer->Head + (unsigned long long)(*Indx * sizeof(SYMBOL))); @@ -682,7 +714,7 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, *Indx = *Indx + 1; SrcVal1 = - GetValue(GuestRegs, ActionDetail, VariablesList, Src1, FALSE); + GetValue(GuestRegs, ActionDetail, VariablesList, Src1, FALSE, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); Des = (PSYMBOL)((unsigned long long)CodeBuffer->Head + (unsigned long long)(*Indx * sizeof(SYMBOL))); @@ -690,7 +722,7 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, DesVal = SrcVal1 ^ SrcVal0; - SetValue(GuestRegs, VariablesList, Des, DesVal); + SetValue(GuestRegs, VariablesList, Des, DesVal, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); break; @@ -701,14 +733,14 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, *Indx = *Indx + 1; SrcVal0 = - GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE); + GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); Src1 = (PSYMBOL)((unsigned long long)CodeBuffer->Head + (unsigned long long)(*Indx * sizeof(SYMBOL))); *Indx = *Indx + 1; SrcVal1 = - GetValue(GuestRegs, ActionDetail, VariablesList, Src1, FALSE); + GetValue(GuestRegs, ActionDetail, VariablesList, Src1, FALSE, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); Des = (PSYMBOL)((unsigned long long)CodeBuffer->Head + (unsigned long long)(*Indx * sizeof(SYMBOL))); @@ -716,7 +748,7 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, DesVal = SrcVal1 & SrcVal0; - SetValue(GuestRegs, VariablesList, Des, DesVal); + SetValue(GuestRegs, VariablesList, Des, DesVal, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); break; @@ -727,14 +759,14 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, *Indx = *Indx + 1; SrcVal0 = - GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE); + GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); Src1 = (PSYMBOL)((unsigned long long)CodeBuffer->Head + (unsigned long long)(*Indx * sizeof(SYMBOL))); *Indx = *Indx + 1; SrcVal1 = - GetValue(GuestRegs, ActionDetail, VariablesList, Src1, FALSE); + GetValue(GuestRegs, ActionDetail, VariablesList, Src1, FALSE, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); Des = (PSYMBOL)((unsigned long long)CodeBuffer->Head + (unsigned long long)(*Indx * sizeof(SYMBOL))); @@ -742,7 +774,7 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, DesVal = SrcVal1 >> SrcVal0; - SetValue(GuestRegs, VariablesList, Des, DesVal); + SetValue(GuestRegs, VariablesList, Des, DesVal, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); break; @@ -753,7 +785,7 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, *Indx = *Indx + 1; SrcVal0 = - GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE); + GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); Src1 = (PSYMBOL)((unsigned long long)CodeBuffer->Head + (unsigned long long)(*Indx * sizeof(SYMBOL))); @@ -761,7 +793,7 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, *Indx = *Indx + 1; SrcVal1 = - GetValue(GuestRegs, ActionDetail, VariablesList, Src1, FALSE); + GetValue(GuestRegs, ActionDetail, VariablesList, Src1, FALSE, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); Des = (PSYMBOL)((unsigned long long)CodeBuffer->Head + (unsigned long long)(*Indx * sizeof(SYMBOL))); @@ -770,7 +802,7 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, DesVal = SrcVal1 << SrcVal0; - SetValue(GuestRegs, VariablesList, Des, DesVal); + SetValue(GuestRegs, VariablesList, Des, DesVal, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); break; @@ -781,14 +813,14 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, *Indx = *Indx + 1; SrcVal0 = - GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE); + GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); Src1 = (PSYMBOL)((unsigned long long)CodeBuffer->Head + (unsigned long long)(*Indx * sizeof(SYMBOL))); *Indx = *Indx + 1; SrcVal1 = - GetValue(GuestRegs, ActionDetail, VariablesList, Src1, FALSE); + GetValue(GuestRegs, ActionDetail, VariablesList, Src1, FALSE, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); Des = (PSYMBOL)((unsigned long long)CodeBuffer->Head + (unsigned long long)(*Indx * sizeof(SYMBOL))); @@ -796,7 +828,7 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, DesVal = SrcVal1 + SrcVal0; - SetValue(GuestRegs, VariablesList, Des, DesVal); + SetValue(GuestRegs, VariablesList, Des, DesVal, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); break; @@ -808,7 +840,7 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, *Indx = *Indx + 1; SrcVal0 = - GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE); + GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); Src1 = (PSYMBOL)((unsigned long long)CodeBuffer->Head + (unsigned long long)(*Indx * sizeof(SYMBOL))); @@ -816,7 +848,7 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, *Indx = *Indx + 1; SrcVal1 = - GetValue(GuestRegs, ActionDetail, VariablesList, Src1, FALSE); + GetValue(GuestRegs, ActionDetail, VariablesList, Src1, FALSE, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); Des = (PSYMBOL)((unsigned long long)CodeBuffer->Head + (unsigned long long)(*Indx * sizeof(SYMBOL))); @@ -824,7 +856,7 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, DesVal = SrcVal1 - SrcVal0; - SetValue(GuestRegs, VariablesList, Des, DesVal); + SetValue(GuestRegs, VariablesList, Des, DesVal, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); break; @@ -835,14 +867,14 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, *Indx = *Indx + 1; SrcVal0 = - GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE); + GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); Src1 = (PSYMBOL)((unsigned long long)CodeBuffer->Head + (unsigned long long)(*Indx * sizeof(SYMBOL))); *Indx = *Indx + 1; SrcVal1 = - GetValue(GuestRegs, ActionDetail, VariablesList, Src1, FALSE); + GetValue(GuestRegs, ActionDetail, VariablesList, Src1, FALSE, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); Des = (PSYMBOL)((unsigned long long)CodeBuffer->Head + (unsigned long long)(*Indx * sizeof(SYMBOL))); @@ -850,7 +882,7 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, DesVal = SrcVal1 * SrcVal0; - SetValue(GuestRegs, VariablesList, Des, DesVal); + SetValue(GuestRegs, VariablesList, Des, DesVal, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); break; @@ -861,14 +893,14 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, *Indx = *Indx + 1; SrcVal0 = - GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE); + GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); Src1 = (PSYMBOL)((unsigned long long)CodeBuffer->Head + (unsigned long long)(*Indx * sizeof(SYMBOL))); *Indx = *Indx + 1; SrcVal1 = - GetValue(GuestRegs, ActionDetail, VariablesList, Src1, FALSE); + GetValue(GuestRegs, ActionDetail, VariablesList, Src1, FALSE, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); Des = (PSYMBOL)((unsigned long long)CodeBuffer->Head + (unsigned long long)(*Indx * sizeof(SYMBOL))); @@ -883,7 +915,7 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, DesVal = SrcVal1 / SrcVal0; - SetValue(GuestRegs, VariablesList, Des, DesVal); + SetValue(GuestRegs, VariablesList, Des, DesVal, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); break; @@ -894,14 +926,14 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, *Indx = *Indx + 1; SrcVal0 = - GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE); + GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); Src1 = (PSYMBOL)((unsigned long long)CodeBuffer->Head + (unsigned long long)(*Indx * sizeof(SYMBOL))); *Indx = *Indx + 1; SrcVal1 = - GetValue(GuestRegs, ActionDetail, VariablesList, Src1, FALSE); + GetValue(GuestRegs, ActionDetail, VariablesList, Src1, FALSE, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); Des = (PSYMBOL)((unsigned long long)CodeBuffer->Head + (unsigned long long)(*Indx * sizeof(SYMBOL))); @@ -915,7 +947,7 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, DesVal = SrcVal1 % SrcVal0; - SetValue(GuestRegs, VariablesList, Des, DesVal); + SetValue(GuestRegs, VariablesList, Des, DesVal, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); break; @@ -926,14 +958,14 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, *Indx = *Indx + 1; SrcVal0 = - GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE); + GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); Src1 = (PSYMBOL)((unsigned long long)CodeBuffer->Head + (unsigned long long)(*Indx * sizeof(SYMBOL))); *Indx = *Indx + 1; SrcVal1 = - GetValue(GuestRegs, ActionDetail, VariablesList, Src1, FALSE); + GetValue(GuestRegs, ActionDetail, VariablesList, Src1, FALSE, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); Des = (PSYMBOL)((unsigned long long)CodeBuffer->Head + (unsigned long long)(*Indx * sizeof(SYMBOL))); @@ -941,7 +973,7 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, DesVal = (INT64)SrcVal1 > (INT64)SrcVal0; - SetValue(GuestRegs, VariablesList, Des, DesVal); + SetValue(GuestRegs, VariablesList, Des, DesVal, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); break; @@ -952,14 +984,14 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, *Indx = *Indx + 1; SrcVal0 = - GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE); + GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); Src1 = (PSYMBOL)((unsigned long long)CodeBuffer->Head + (unsigned long long)(*Indx * sizeof(SYMBOL))); *Indx = *Indx + 1; SrcVal1 = - GetValue(GuestRegs, ActionDetail, VariablesList, Src1, FALSE); + GetValue(GuestRegs, ActionDetail, VariablesList, Src1, FALSE, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); Des = (PSYMBOL)((unsigned long long)CodeBuffer->Head + (unsigned long long)(*Indx * sizeof(SYMBOL))); @@ -967,7 +999,7 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, DesVal = (INT64)SrcVal1 < (INT64)SrcVal0; - SetValue(GuestRegs, VariablesList, Des, DesVal); + SetValue(GuestRegs, VariablesList, Des, DesVal, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); break; @@ -978,14 +1010,14 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, *Indx = *Indx + 1; SrcVal0 = - GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE); + GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); Src1 = (PSYMBOL)((unsigned long long)CodeBuffer->Head + (unsigned long long)(*Indx * sizeof(SYMBOL))); *Indx = *Indx + 1; SrcVal1 = - GetValue(GuestRegs, ActionDetail, VariablesList, Src1, FALSE); + GetValue(GuestRegs, ActionDetail, VariablesList, Src1, FALSE, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); Des = (PSYMBOL)((unsigned long long)CodeBuffer->Head + (unsigned long long)(*Indx * sizeof(SYMBOL))); @@ -993,7 +1025,7 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, DesVal = (INT64)SrcVal1 >= (INT64)SrcVal0; - SetValue(GuestRegs, VariablesList, Des, DesVal); + SetValue(GuestRegs, VariablesList, Des, DesVal, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); break; @@ -1004,14 +1036,14 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, *Indx = *Indx + 1; SrcVal0 = - GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE); + GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); Src1 = (PSYMBOL)((unsigned long long)CodeBuffer->Head + (unsigned long long)(*Indx * sizeof(SYMBOL))); *Indx = *Indx + 1; SrcVal1 = - GetValue(GuestRegs, ActionDetail, VariablesList, Src1, FALSE); + GetValue(GuestRegs, ActionDetail, VariablesList, Src1, FALSE, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); Des = (PSYMBOL)((unsigned long long)CodeBuffer->Head + (unsigned long long)(*Indx * sizeof(SYMBOL))); @@ -1020,7 +1052,7 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, DesVal = (INT64)SrcVal1 <= (INT64)SrcVal0; - SetValue(GuestRegs, VariablesList, Des, DesVal); + SetValue(GuestRegs, VariablesList, Des, DesVal, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); break; @@ -1031,7 +1063,7 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, *Indx = *Indx + 1; SrcVal0 = - GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE); + GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); Src1 = (PSYMBOL)((unsigned long long)CodeBuffer->Head + (unsigned long long)(*Indx * sizeof(SYMBOL))); @@ -1039,7 +1071,7 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, *Indx = *Indx + 1; SrcVal1 = - GetValue(GuestRegs, ActionDetail, VariablesList, Src1, FALSE); + GetValue(GuestRegs, ActionDetail, VariablesList, Src1, FALSE, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); Des = (PSYMBOL)((unsigned long long)CodeBuffer->Head + (unsigned long long)(*Indx * sizeof(SYMBOL))); @@ -1047,7 +1079,7 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, DesVal = SrcVal1 == SrcVal0; - SetValue(GuestRegs, VariablesList, Des, DesVal); + SetValue(GuestRegs, VariablesList, Des, DesVal, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); break; @@ -1059,7 +1091,7 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, *Indx = *Indx + 1; SrcVal0 = - GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE); + GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); Src1 = (PSYMBOL)((unsigned long long)CodeBuffer->Head + (unsigned long long)(*Indx * sizeof(SYMBOL))); @@ -1067,7 +1099,7 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, *Indx = *Indx + 1; SrcVal1 = - GetValue(GuestRegs, ActionDetail, VariablesList, Src1, FALSE); + GetValue(GuestRegs, ActionDetail, VariablesList, Src1, FALSE, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); Des = (PSYMBOL)((unsigned long long)CodeBuffer->Head + (unsigned long long)(*Indx * sizeof(SYMBOL))); @@ -1075,7 +1107,7 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, DesVal = SrcVal1 != SrcVal0; - SetValue(GuestRegs, VariablesList, Des, DesVal); + SetValue(GuestRegs, VariablesList, Des, DesVal, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); break; @@ -1086,16 +1118,16 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, *Indx = *Indx + 1; SrcVal0 = - GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE); + GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); Des = (PSYMBOL)((unsigned long long)CodeBuffer->Head + (unsigned long long)(*Indx * sizeof(SYMBOL))); *Indx = *Indx + 1; - DesVal = ScriptEngineKeywordPoi((PUINT64)GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE), + DesVal = ScriptEngineKeywordPoi((PUINT64)GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx), &HasError); - SetValue(GuestRegs, VariablesList, Des, DesVal); + SetValue(GuestRegs, VariablesList, Des, DesVal, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); break; @@ -1106,15 +1138,15 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, *Indx = *Indx + 1; SrcVal0 = - GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE); + GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); Des = (PSYMBOL)((unsigned long long)CodeBuffer->Head + (unsigned long long)(*Indx * sizeof(SYMBOL))); *Indx = *Indx + 1; - DesVal = ScriptEngineKeywordDb((PUINT64)GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE), + DesVal = ScriptEngineKeywordDb((PUINT64)GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx), &HasError); - SetValue(GuestRegs, VariablesList, Des, DesVal); + SetValue(GuestRegs, VariablesList, Des, DesVal, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); break; @@ -1125,16 +1157,16 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, *Indx = *Indx + 1; SrcVal0 = - GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE); + GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); Des = (PSYMBOL)((unsigned long long)CodeBuffer->Head + (unsigned long long)(*Indx * sizeof(SYMBOL))); *Indx = *Indx + 1; - DesVal = ScriptEngineKeywordDd((PUINT64)GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE), + DesVal = ScriptEngineKeywordDd((PUINT64)GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx), &HasError); - SetValue(GuestRegs, VariablesList, Des, DesVal); + SetValue(GuestRegs, VariablesList, Des, DesVal, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); break; @@ -1146,16 +1178,16 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, *Indx = *Indx + 1; SrcVal0 = - GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE); + GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); Des = (PSYMBOL)((unsigned long long)CodeBuffer->Head + (unsigned long long)(*Indx * sizeof(SYMBOL))); *Indx = *Indx + 1; - DesVal = ScriptEngineKeywordDw((PUINT64)GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE), + DesVal = ScriptEngineKeywordDw((PUINT64)GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx), &HasError); - SetValue(GuestRegs, VariablesList, Des, DesVal); + SetValue(GuestRegs, VariablesList, Des, DesVal, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); break; @@ -1166,16 +1198,16 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, *Indx = *Indx + 1; SrcVal0 = - GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE); + GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); Des = (PSYMBOL)((unsigned long long)CodeBuffer->Head + (unsigned long long)(*Indx * sizeof(SYMBOL))); *Indx = *Indx + 1; - DesVal = ScriptEngineKeywordDq((PUINT64)GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE), + DesVal = ScriptEngineKeywordDq((PUINT64)GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx), &HasError); - SetValue(GuestRegs, VariablesList, Des, DesVal); + SetValue(GuestRegs, VariablesList, Des, DesVal, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); break; @@ -1186,7 +1218,7 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, *Indx = *Indx + 1; SrcVal0 = - GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE); + GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); Des = (PSYMBOL)((unsigned long long)CodeBuffer->Head + (unsigned long long)(*Indx * sizeof(SYMBOL))); @@ -1195,7 +1227,7 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, DesVal = ~SrcVal0; - SetValue(GuestRegs, VariablesList, Des, DesVal); + SetValue(GuestRegs, VariablesList, Des, DesVal, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); break; @@ -1209,7 +1241,7 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, // // It's reference, we need an address // - SrcVal0 = GetValue(GuestRegs, ActionDetail, VariablesList, Src0, TRUE); + SrcVal0 = GetValue(GuestRegs, ActionDetail, VariablesList, Src0, TRUE, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); Des = (PSYMBOL)((unsigned long long)CodeBuffer->Head + (unsigned long long)(*Indx * sizeof(SYMBOL))); @@ -1217,7 +1249,7 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, DesVal = SrcVal0; - SetValue(GuestRegs, VariablesList, Des, DesVal); + SetValue(GuestRegs, VariablesList, Des, DesVal, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); break; @@ -1228,15 +1260,15 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, *Indx = *Indx + 1; SrcVal0 = - GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE); + GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); Des = (PSYMBOL)((unsigned long long)CodeBuffer->Head + (unsigned long long)(*Indx * sizeof(SYMBOL))); *Indx = *Indx + 1; - DesVal = ScriptEngineFunctionPhysicalToVirtual(GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE)); + DesVal = ScriptEngineFunctionPhysicalToVirtual(GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx)); - SetValue(GuestRegs, VariablesList, Des, DesVal); + SetValue(GuestRegs, VariablesList, Des, DesVal, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); break; @@ -1247,15 +1279,15 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, *Indx = *Indx + 1; SrcVal0 = - GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE); + GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); Des = (PSYMBOL)((unsigned long long)CodeBuffer->Head + (unsigned long long)(*Indx * sizeof(SYMBOL))); *Indx = *Indx + 1; - DesVal = ScriptEngineFunctionVirtualToPhysical(GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE)); + DesVal = ScriptEngineFunctionVirtualToPhysical(GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx)); - SetValue(GuestRegs, VariablesList, Des, DesVal); + SetValue(GuestRegs, VariablesList, Des, DesVal, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); break; @@ -1266,7 +1298,7 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, *Indx = *Indx + 1; SrcVal0 = - GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE); + GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); Des = (PSYMBOL)((unsigned long long)CodeBuffer->Head + (unsigned long long)(*Indx * sizeof(SYMBOL))); @@ -1277,7 +1309,7 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, else DesVal = 0; // FALSE - SetValue(GuestRegs, VariablesList, Des, DesVal); + SetValue(GuestRegs, VariablesList, Des, DesVal, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); break; @@ -1290,14 +1322,14 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, if (Src0->Type == SYMBOL_STRING_TYPE) { *Indx = - *Indx + ((2 * sizeof(unsigned long long) + Src0->Len) / + *Indx + ((3 * sizeof(unsigned long long) + Src0->Len) / sizeof(SYMBOL)); SrcVal0 = (UINT64)&Src0->Value; } else { SrcVal0 = - GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE); + GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); } Des = (PSYMBOL)((unsigned long long)CodeBuffer->Head + @@ -1306,7 +1338,7 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, DesVal = ScriptEngineFunctionStrlen((const char *)SrcVal0); - SetValue(GuestRegs, VariablesList, Des, DesVal); + SetValue(GuestRegs, VariablesList, Des, DesVal, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); break; @@ -1318,7 +1350,7 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, *Indx = *Indx + 1; SrcVal0 = - GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE); + GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); Des = (PSYMBOL)((unsigned long long)CodeBuffer->Head + (unsigned long long)(*Indx * sizeof(SYMBOL))); @@ -1326,7 +1358,7 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, DesVal = ScriptEngineFunctionDisassembleLen((PVOID)SrcVal0, FALSE); - SetValue(GuestRegs, VariablesList, Des, DesVal); + SetValue(GuestRegs, VariablesList, Des, DesVal, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); break; @@ -1337,7 +1369,7 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, *Indx = *Indx + 1; SrcVal0 = - GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE); + GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); Des = (PSYMBOL)((unsigned long long)CodeBuffer->Head + (unsigned long long)(*Indx * sizeof(SYMBOL))); @@ -1345,7 +1377,7 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, DesVal = ScriptEngineFunctionDisassembleLen((PVOID)SrcVal0, TRUE); - SetValue(GuestRegs, VariablesList, Des, DesVal); + SetValue(GuestRegs, VariablesList, Des, DesVal, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); break; @@ -1358,14 +1390,14 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, if (Src0->Type == SYMBOL_WSTRING_TYPE) { *Indx = - *Indx + ((2 * sizeof(unsigned long long) + Src0->Len) / + *Indx + ((3 * sizeof(unsigned long long) + Src0->Len) / sizeof(SYMBOL)); SrcVal0 = (UINT64)&Src0->Value; } else { SrcVal0 = - GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE); + GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); } Des = (PSYMBOL)((unsigned long long)CodeBuffer->Head + @@ -1374,7 +1406,7 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, DesVal = ScriptEngineFunctionWcslen((const wchar_t *)SrcVal0); - SetValue(GuestRegs, VariablesList, Des, DesVal); + SetValue(GuestRegs, VariablesList, Des, DesVal, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); break; @@ -1385,7 +1417,7 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, *Indx = *Indx + 1; SrcVal0 = - GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE); + GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); Des = (PSYMBOL)((unsigned long long)CodeBuffer->Head + (unsigned long long)(*Indx * sizeof(SYMBOL))); @@ -1394,7 +1426,7 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, DesVal = ScriptEngineFunctionInterlockedIncrement((volatile long long *)SrcVal0, &HasError); - SetValue(GuestRegs, VariablesList, Des, DesVal); + SetValue(GuestRegs, VariablesList, Des, DesVal, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); break; @@ -1405,7 +1437,7 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, *Indx = *Indx + 1; SrcVal0 = - GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE); + GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); Des = (PSYMBOL)((unsigned long long)CodeBuffer->Head + (unsigned long long)(*Indx * sizeof(SYMBOL))); @@ -1413,7 +1445,7 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, DesVal = ScriptEngineFunctionInterlockedDecrement((volatile long long *)SrcVal0, &HasError); - SetValue(GuestRegs, VariablesList, Des, DesVal); + SetValue(GuestRegs, VariablesList, Des, DesVal, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); break; @@ -1425,7 +1457,7 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, *Indx = *Indx + 1; SrcVal0 = - GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE); + GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); Des = (PSYMBOL)((unsigned long long)CodeBuffer->Head + (unsigned long long)(*Indx * sizeof(SYMBOL))); @@ -1433,7 +1465,7 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, DesVal = -(INT64)SrcVal0; - SetValue(GuestRegs, VariablesList, Des, DesVal); + SetValue(GuestRegs, VariablesList, Des, DesVal, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); break; @@ -1444,15 +1476,15 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, *Indx = *Indx + 1; SrcVal0 = - GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE); + GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); Des = (PSYMBOL)((unsigned long long)CodeBuffer->Head + (unsigned long long)(*Indx * sizeof(SYMBOL))); *Indx = *Indx + 1; - DesVal = ScriptEngineKeywordHi((PUINT64)GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE), + DesVal = ScriptEngineKeywordHi((PUINT64)GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx), &HasError); - SetValue(GuestRegs, VariablesList, Des, DesVal); + SetValue(GuestRegs, VariablesList, Des, DesVal, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); break; @@ -1464,16 +1496,16 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, *Indx = *Indx + 1; SrcVal0 = - GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE); + GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); Des = (PSYMBOL)((unsigned long long)CodeBuffer->Head + (unsigned long long)(*Indx * sizeof(SYMBOL))); *Indx = *Indx + 1; - DesVal = ScriptEngineKeywordLow((PUINT64)GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE), + DesVal = ScriptEngineKeywordLow((PUINT64)GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx), &HasError); - SetValue(GuestRegs, VariablesList, Des, DesVal); + SetValue(GuestRegs, VariablesList, Des, DesVal, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); break; @@ -1484,7 +1516,7 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, *Indx = *Indx + 1; SrcVal0 = - GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE); + GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); Des = (PSYMBOL)((unsigned long long)CodeBuffer->Head + (unsigned long long)(*Indx * sizeof(SYMBOL))); @@ -1492,7 +1524,7 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, DesVal = SrcVal0; - SetValue(GuestRegs, VariablesList, Des, DesVal); + SetValue(GuestRegs, VariablesList, Des, DesVal, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); break; @@ -1504,7 +1536,7 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, *Indx = *Indx + 1; SrcVal0 = - GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE); + GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); // // Call the target function @@ -1519,7 +1551,7 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, (unsigned long long)(*Indx * sizeof(SYMBOL))); *Indx = *Indx + 1; SrcVal0 = - GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE); + GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); // // Call the target function @@ -1535,7 +1567,7 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, *Indx = *Indx + 1; SrcVal0 = - GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE); + GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); // // Call the target function @@ -1549,7 +1581,7 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, (unsigned long long)(*Indx * sizeof(SYMBOL))); *Indx = *Indx + 1; SrcVal0 = - GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE); + GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); // // Call the target function @@ -1564,7 +1596,7 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, (unsigned long long)(*Indx * sizeof(SYMBOL))); *Indx = *Indx + 1; SrcVal0 = - GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE); + GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); ScriptEngineFunctionEventEnable(SrcVal0); @@ -1576,7 +1608,7 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, (unsigned long long)(*Indx * sizeof(SYMBOL))); *Indx = *Indx + 1; SrcVal0 = - GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE); + GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); ScriptEngineFunctionEventDisable(SrcVal0); @@ -1588,7 +1620,7 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, (unsigned long long)(*Indx * sizeof(SYMBOL))); *Indx = *Indx + 1; SrcVal0 = - GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE); + GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); ScriptEngineFunctionEventClear(SrcVal0); @@ -1600,7 +1632,7 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, (unsigned long long)(*Indx * sizeof(SYMBOL))); *Indx = *Indx + 1; SrcVal0 = - GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE); + GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); // // Call the target function @@ -1618,14 +1650,14 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, (unsigned long long)(*Indx * sizeof(SYMBOL))); *Indx = *Indx + 1; SrcVal0 = - GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE); + GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); Src1 = (PSYMBOL)((unsigned long long)CodeBuffer->Head + (unsigned long long)(*Indx * sizeof(SYMBOL))); *Indx = *Indx + 1; SrcVal1 = - GetValue(GuestRegs, ActionDetail, VariablesList, Src1, FALSE); + GetValue(GuestRegs, ActionDetail, VariablesList, Src1, FALSE, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); if (SrcVal1 == 0) *Indx = SrcVal0; @@ -1639,14 +1671,14 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, *Indx = *Indx + 1; SrcVal0 = - GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE); + GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); Src1 = (PSYMBOL)((unsigned long long)CodeBuffer->Head + (unsigned long long)(*Indx * sizeof(SYMBOL))); *Indx = *Indx + 1; SrcVal1 = - GetValue(GuestRegs, ActionDetail, VariablesList, Src1, FALSE); + GetValue(GuestRegs, ActionDetail, VariablesList, Src1, FALSE, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); if (SrcVal1 != 0) *Indx = SrcVal0; @@ -1659,12 +1691,175 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, (unsigned long long)(*Indx * sizeof(SYMBOL))); *Indx = *Indx + 1; SrcVal0 = - GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE); + GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); *Indx = SrcVal0; break; + case FUNC_CALL_USER_DEFINED_FUNCTION: + StackIndxTemp = *StackIndx; + break; + case FUNC_CALL_USER_DEFINED_FUNCTION_PARAMETER: + + // + // push parameter variable into stack + // + Src0 = (PSYMBOL)((unsigned long long)CodeBuffer->Head + + (unsigned long long)(*Indx * sizeof(SYMBOL))); + *Indx = *Indx + 1; + SrcVal0 = + GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); + + Src1 = (PSYMBOL)((unsigned long long)StackBuffer->Head + + (unsigned long long)(*StackIndx * sizeof(SYMBOL))); + *StackIndx = *StackIndx + 1; + Src1->Len = 0; + Src1->Type = SYMBOL_FUNCTION_PARAMETER_TYPE; + Src1->VariableType = 0; + Src1->Value = SrcVal0; + + break; + + case FUNC_END_OF_CALLING_USER_DEFINED_FUNCTION_WITHOUT_RETURNING_VALUE: + case FUNC_END_OF_CALLING_USER_DEFINED_FUNCTION_WITH_RETURNING_VALUE: + { + // + // + // + Src0 = (PSYMBOL)((unsigned long long)CodeBuffer->Head + + (unsigned long long)(*Indx * sizeof(SYMBOL))); + *Indx = *Indx + 1; + UINT64 FunctionAddress = + GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); + + // + // push return address symbol into stack + // + Src0 = (PSYMBOL)((unsigned long long)CodeBuffer->Head + + (unsigned long long)(*Indx * sizeof(SYMBOL))); + *Indx = *Indx + 1; + Src1 = (PSYMBOL)((unsigned long long)StackBuffer->Head + + (unsigned long long)(*StackIndx * sizeof(SYMBOL))); + *StackIndx = *StackIndx + 1; + Src1->Len = Src0->Len; + Src1->Type = Src0->Type; + Src1->Value = Src0->Value; + Src1->VariableType = Src0->VariableType; + + *StackTempBaseIndx = *StackIndx; + *StackBaseIndx = 0; + + *StackBaseIndx = StackIndxTemp; + + // jump to function + *Indx = FunctionAddress + 1; + } + + break; + + case FUNC_START_OF_USER_DEFINED_FUNCTION: + Src0 = (PSYMBOL)((unsigned long long)CodeBuffer->Head + + (unsigned long long)(*Indx * sizeof(SYMBOL))); + *Indx = *Indx + 1; + + SrcVal0 = GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); + *StackIndx = *StackIndx + SrcVal0; + + break; + + case FUNC_MOV_RETURN_VALUE: + Des = (PSYMBOL)((unsigned long long)CodeBuffer->Head + + (unsigned long long)(*Indx * sizeof(SYMBOL))); + *Indx = *Indx + 1; + SetValue(GuestRegs, VariablesList, Des, ReturnValue, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); + break; + + case FUNC_END_OF_USER_DEFINED_FUNCTION: + case FUNC_RETURN_OF_USER_DEFINED_FUNCTION_WITHOUT_VALUE: + // check + case FUNC_RETURN_OF_USER_DEFINED_FUNCTION_WITH_VALUE: + { + if (Operator->Value == FUNC_RETURN_OF_USER_DEFINED_FUNCTION_WITH_VALUE) + { + Src0 = (PSYMBOL)((unsigned long long)CodeBuffer->Head + + (unsigned long long)(*Indx * sizeof(SYMBOL))); + *Indx = *Indx + 1; + ReturnValue = + GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); + } + + // + // pop return address + // + UINT64 ReturnAddress = 0; + + Src0 = (PSYMBOL)((unsigned long long)StackBuffer->Head + + (unsigned long long)((*StackTempBaseIndx - 1) * sizeof(SYMBOL))); + + if (Src0->Type == SYMBOL_RETURN_ADDRESS_TYPE) + { + ReturnAddress = Src0->Value; + } + else + { + // error + } + + *StackIndx = *StackBaseIndx; + + // update StackBaseIndx and StackTempBaseIndx + + if (*StackIndx == 0) + { + *StackTempBaseIndx = 0; + *StackBaseIndx = 0; + } + else + { + int i = *StackIndx; + PSYMBOL StackSymbol = NULL; + + *StackTempBaseIndx = 0; + *StackBaseIndx = 0; + for (; i > 0; i--) + { + StackSymbol = (PSYMBOL)((unsigned long long)StackBuffer->Head + + (unsigned long long)((i - 1) * sizeof(SYMBOL))); + if (StackSymbol->Type == SYMBOL_RETURN_ADDRESS_TYPE) + { + *StackTempBaseIndx = i; + *StackBaseIndx = *StackTempBaseIndx - 1; + break; + } + } + + for (i = *StackTempBaseIndx - 2; i >= 0; i--) + { + StackSymbol = (PSYMBOL)((unsigned long long)StackBuffer->Head + + (unsigned long long)((i) * sizeof(SYMBOL))); + if (StackSymbol->Type == SYMBOL_FUNCTION_PARAMETER_TYPE) + { + continue; + } + else + { + *StackBaseIndx = i + 1; + break; + } + } + + if (i == -1) + { + *StackBaseIndx = 0; + } + } + + *Indx = ReturnAddress; + } + + break; + case FUNC_STRCMP: Src0 = (PSYMBOL)((unsigned long long)CodeBuffer->Head + @@ -1675,14 +1870,14 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, if (Src0->Type == SYMBOL_STRING_TYPE) { *Indx = - *Indx + ((2 * sizeof(unsigned long long) + Src0->Len) / + *Indx + ((3 * sizeof(unsigned long long) + Src0->Len) / sizeof(SYMBOL)); SrcVal0 = (UINT64)&Src0->Value; } else { SrcVal0 = - GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE); + GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); } Src1 = (PSYMBOL)((unsigned long long)CodeBuffer->Head + @@ -1693,14 +1888,14 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, if (Src1->Type == SYMBOL_STRING_TYPE) { *Indx = - *Indx + ((2 * sizeof(unsigned long long) + Src1->Len) / + *Indx + ((3 * sizeof(unsigned long long) + Src1->Len) / sizeof(SYMBOL)); SrcVal1 = (UINT64)&Src1->Value; } else { SrcVal1 = - GetValue(GuestRegs, ActionDetail, VariablesList, Src1, FALSE); + GetValue(GuestRegs, ActionDetail, VariablesList, Src1, FALSE, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); } Des = (PSYMBOL)((unsigned long long)CodeBuffer->Head + @@ -1710,7 +1905,7 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, DesVal = ScriptEngineFunctionStrcmp((const char *)SrcVal1, (const char *)SrcVal0); - SetValue(GuestRegs, VariablesList, Des, DesVal); + SetValue(GuestRegs, VariablesList, Des, DesVal, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); break; @@ -1724,14 +1919,14 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, if (Src0->Type == SYMBOL_WSTRING_TYPE) { *Indx = - *Indx + ((2 * sizeof(unsigned long long) + Src0->Len) / + *Indx + ((3 * sizeof(unsigned long long) + Src0->Len) / sizeof(SYMBOL)); SrcVal0 = (UINT64)&Src0->Value; } else { SrcVal0 = - GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE); + GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); } Src1 = (PSYMBOL)((unsigned long long)CodeBuffer->Head + @@ -1742,14 +1937,14 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, if (Src1->Type == SYMBOL_WSTRING_TYPE) { *Indx = - *Indx + ((2 * sizeof(unsigned long long) + Src1->Len) / + *Indx + ((3 * sizeof(unsigned long long) + Src1->Len) / sizeof(SYMBOL)); SrcVal1 = (UINT64)&Src1->Value; } else { SrcVal1 = - GetValue(GuestRegs, ActionDetail, VariablesList, Src1, FALSE); + GetValue(GuestRegs, ActionDetail, VariablesList, Src1, FALSE, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); } Des = (PSYMBOL)((unsigned long long)CodeBuffer->Head + @@ -1759,7 +1954,7 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, DesVal = ScriptEngineFunctionWcscmp((const wchar_t *)SrcVal1, (const wchar_t *)SrcVal0); - SetValue(GuestRegs, VariablesList, Des, DesVal); + SetValue(GuestRegs, VariablesList, Des, DesVal, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); break; @@ -1771,7 +1966,7 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, *Indx = *Indx + 1; SrcVal0 = - GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE); + GetValue(GuestRegs, ActionDetail, VariablesList, Src0, FALSE, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); Src1 = (PSYMBOL)((unsigned long long)CodeBuffer->Head + (unsigned long long)(*Indx * sizeof(SYMBOL))); @@ -1781,14 +1976,14 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, if (Src1->Type == SYMBOL_STRING_TYPE) { *Indx = - *Indx + ((2 * sizeof(unsigned long long) + Src1->Len) / + *Indx + ((3 * sizeof(unsigned long long) + Src1->Len) / sizeof(SYMBOL)); SrcVal1 = (UINT64)&Src1->Value; } else { SrcVal1 = - GetValue(GuestRegs, ActionDetail, VariablesList, Src1, FALSE); + GetValue(GuestRegs, ActionDetail, VariablesList, Src1, FALSE, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); } Src2 = (PSYMBOL)((unsigned long long)CodeBuffer->Head + @@ -1799,14 +1994,14 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, if (Src2->Type == SYMBOL_STRING_TYPE) { *Indx = - *Indx + ((2 * sizeof(unsigned long long) + Src2->Len) / + *Indx + ((3 * sizeof(unsigned long long) + Src2->Len) / sizeof(SYMBOL)); SrcVal2 = (UINT64)&Src2->Value; } else { SrcVal2 = - GetValue(GuestRegs, ActionDetail, VariablesList, Src2, FALSE); + GetValue(GuestRegs, ActionDetail, VariablesList, Src2, FALSE, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); } Des = (PSYMBOL)((unsigned long long)CodeBuffer->Head + @@ -1816,7 +2011,7 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, DesVal = ScriptEngineFunctionMemcmp((const char *)SrcVal2, (const char *)SrcVal1, SrcVal0); - SetValue(GuestRegs, VariablesList, Des, DesVal); + SetValue(GuestRegs, VariablesList, Des, DesVal, StackBuffer, StackIndx, StackBaseIndx, StackTempBaseIndx); break; @@ -1831,7 +2026,7 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, // *Indx = - *Indx + ((2 * sizeof(unsigned long long) + Src0->Len) / + *Indx + ((3 * sizeof(unsigned long long) + Src0->Len) / sizeof(SYMBOL)); Src1 = (PSYMBOL)((unsigned long long)CodeBuffer->Head + @@ -1858,7 +2053,11 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, (char *)&Src0->Value, Src1->Value, Src2, - (BOOLEAN *)&HasError); + (BOOLEAN *)&HasError, + StackBuffer, + StackIndx, + StackBaseIndx, + StackTempBaseIndx); break; } diff --git a/hyperdbg/script-eval/header/ScriptEngineCommonDefinitions.h b/hyperdbg/script-eval/header/ScriptEngineCommonDefinitions.h index b66ebaed..8a6ed3d7 100644 --- a/hyperdbg/script-eval/header/ScriptEngineCommonDefinitions.h +++ b/hyperdbg/script-eval/header/ScriptEngineCommonDefinitions.h @@ -4,6 +4,7 @@ typedef struct SYMBOL { long long unsigned Type; long long unsigned Len; + long long unsigned VariableType; long long unsigned Value; } SYMBOL, * PSYMBOL; typedef struct SYMBOL_BUFFER { @@ -38,8 +39,13 @@ typedef struct ACTION_BUFFER { #define SYMBOL_MEM_VALID_CHECK_MASK (1 << 31) #define SYMBOL_INVALID 9 #define SYMBOL_WSTRING_TYPE 10 -#define INVALID 0xffffffff -#define LALR_ACCEPT 0x7fffffff +#define SYMBOL_USER_DEFINED_FUNCTION_TYPE 11 +#define SYMBOL_FUNCTION_PARAMETER_ID_TYPE 12 +#define SYMBOL_RETURN_ADDRESS_TYPE 13 +#define SYMBOL_STACK_TEMP_TYPE 14 +#define SYMBOL_FUNCTION_PARAMETER_TYPE 15 +#define INVALID -999 +#define LALR_ACCEPT 999 @@ -199,320 +205,396 @@ typedef struct ACTION_BUFFER { #define FUNC_IGNORE_LVALUE 38 #endif // !FUNC_IGNORE_LVALUE +#ifndef FUNC_END_OF_USER_DEFINED_FUNCTION +#define FUNC_END_OF_USER_DEFINED_FUNCTION 39 +#endif // !FUNC_END_OF_USER_DEFINED_FUNCTION + +#ifndef FUNC_RETURN_OF_USER_DEFINED_FUNCTION_WITH_VALUE +#define FUNC_RETURN_OF_USER_DEFINED_FUNCTION_WITH_VALUE 40 +#endif // !FUNC_RETURN_OF_USER_DEFINED_FUNCTION_WITH_VALUE + +#ifndef FUNC_RETURN_OF_USER_DEFINED_FUNCTION_WITHOUT_VALUE +#define FUNC_RETURN_OF_USER_DEFINED_FUNCTION_WITHOUT_VALUE 41 +#endif // !FUNC_RETURN_OF_USER_DEFINED_FUNCTION_WITHOUT_VALUE + +#ifndef FUNC_CALL_USER_DEFINED_FUNCTION_PARAMETER +#define FUNC_CALL_USER_DEFINED_FUNCTION_PARAMETER 42 +#endif // !FUNC_CALL_USER_DEFINED_FUNCTION_PARAMETER + +#ifndef FUNC_END_OF_CALLING_USER_DEFINED_FUNCTION_WITHOUT_RETURNING_VALUE +#define FUNC_END_OF_CALLING_USER_DEFINED_FUNCTION_WITHOUT_RETURNING_VALUE 43 +#endif // !FUNC_END_OF_CALLING_USER_DEFINED_FUNCTION_WITHOUT_RETURNING_VALUE + +#ifndef FUNC_END_OF_CALLING_USER_DEFINED_FUNCTION_WITH_RETURNING_VALUE +#define FUNC_END_OF_CALLING_USER_DEFINED_FUNCTION_WITH_RETURNING_VALUE 44 +#endif // !FUNC_END_OF_CALLING_USER_DEFINED_FUNCTION_WITH_RETURNING_VALUE + +#ifndef FUNC_CALL_USER_DEFINED_FUNCTION +#define FUNC_CALL_USER_DEFINED_FUNCTION 45 +#endif // !FUNC_CALL_USER_DEFINED_FUNCTION + +#ifndef FUNC_START_OF_USER_DEFINED_FUNCTION +#define FUNC_START_OF_USER_DEFINED_FUNCTION 46 +#endif // !FUNC_START_OF_USER_DEFINED_FUNCTION + +#ifndef FUNC_MOV_RETURN_VALUE +#define FUNC_MOV_RETURN_VALUE 47 +#endif // !FUNC_MOV_RETURN_VALUE + +#ifndef FUNC_VOID +#define FUNC_VOID 48 +#endif // !FUNC_VOID + +#ifndef FUNC_BOOL +#define FUNC_BOOL 49 +#endif // !FUNC_BOOL + +#ifndef FUNC_CHAR +#define FUNC_CHAR 50 +#endif // !FUNC_CHAR + +#ifndef FUNC_SHORT +#define FUNC_SHORT 51 +#endif // !FUNC_SHORT + +#ifndef FUNC_INT +#define FUNC_INT 52 +#endif // !FUNC_INT + +#ifndef FUNC_LONG +#define FUNC_LONG 53 +#endif // !FUNC_LONG + +#ifndef FUNC_UNSIGNED +#define FUNC_UNSIGNED 54 +#endif // !FUNC_UNSIGNED + +#ifndef FUNC_SIGNED +#define FUNC_SIGNED 55 +#endif // !FUNC_SIGNED + +#ifndef FUNC_FLOAT +#define FUNC_FLOAT 56 +#endif // !FUNC_FLOAT + +#ifndef FUNC_DOUBLE +#define FUNC_DOUBLE 57 +#endif // !FUNC_DOUBLE + #ifndef FUNC_PRINT -#define FUNC_PRINT 39 +#define FUNC_PRINT 58 #endif // !FUNC_PRINT #ifndef FUNC_FORMATS -#define FUNC_FORMATS 40 +#define FUNC_FORMATS 59 #endif // !FUNC_FORMATS #ifndef FUNC_EVENT_ENABLE -#define FUNC_EVENT_ENABLE 41 +#define FUNC_EVENT_ENABLE 60 #endif // !FUNC_EVENT_ENABLE #ifndef FUNC_EVENT_DISABLE -#define FUNC_EVENT_DISABLE 42 +#define FUNC_EVENT_DISABLE 61 #endif // !FUNC_EVENT_DISABLE #ifndef FUNC_EVENT_CLEAR -#define FUNC_EVENT_CLEAR 43 +#define FUNC_EVENT_CLEAR 62 #endif // !FUNC_EVENT_CLEAR #ifndef FUNC_TEST_STATEMENT -#define FUNC_TEST_STATEMENT 44 +#define FUNC_TEST_STATEMENT 63 #endif // !FUNC_TEST_STATEMENT #ifndef FUNC_SPINLOCK_LOCK -#define FUNC_SPINLOCK_LOCK 45 +#define FUNC_SPINLOCK_LOCK 64 #endif // !FUNC_SPINLOCK_LOCK #ifndef FUNC_SPINLOCK_UNLOCK -#define FUNC_SPINLOCK_UNLOCK 46 +#define FUNC_SPINLOCK_UNLOCK 65 #endif // !FUNC_SPINLOCK_UNLOCK #ifndef FUNC_EVENT_SC -#define FUNC_EVENT_SC 47 +#define FUNC_EVENT_SC 66 #endif // !FUNC_EVENT_SC #ifndef FUNC_PRINTF -#define FUNC_PRINTF 48 +#define FUNC_PRINTF 67 #endif // !FUNC_PRINTF #ifndef FUNC_PAUSE -#define FUNC_PAUSE 49 +#define FUNC_PAUSE 68 #endif // !FUNC_PAUSE #ifndef FUNC_FLUSH -#define FUNC_FLUSH 50 +#define FUNC_FLUSH 69 #endif // !FUNC_FLUSH #ifndef FUNC_EVENT_TRACE_STEP -#define FUNC_EVENT_TRACE_STEP 51 +#define FUNC_EVENT_TRACE_STEP 70 #endif // !FUNC_EVENT_TRACE_STEP #ifndef FUNC_EVENT_TRACE_STEP_IN -#define FUNC_EVENT_TRACE_STEP_IN 52 +#define FUNC_EVENT_TRACE_STEP_IN 71 #endif // !FUNC_EVENT_TRACE_STEP_IN #ifndef FUNC_EVENT_TRACE_STEP_OUT -#define FUNC_EVENT_TRACE_STEP_OUT 53 +#define FUNC_EVENT_TRACE_STEP_OUT 72 #endif // !FUNC_EVENT_TRACE_STEP_OUT #ifndef FUNC_EVENT_TRACE_INSTRUMENTATION_STEP -#define FUNC_EVENT_TRACE_INSTRUMENTATION_STEP 54 +#define FUNC_EVENT_TRACE_INSTRUMENTATION_STEP 73 #endif // !FUNC_EVENT_TRACE_INSTRUMENTATION_STEP #ifndef FUNC_EVENT_TRACE_INSTRUMENTATION_STEP_IN -#define FUNC_EVENT_TRACE_INSTRUMENTATION_STEP_IN 55 +#define FUNC_EVENT_TRACE_INSTRUMENTATION_STEP_IN 74 #endif // !FUNC_EVENT_TRACE_INSTRUMENTATION_STEP_IN #ifndef FUNC_SPINLOCK_LOCK_CUSTOM_WAIT -#define FUNC_SPINLOCK_LOCK_CUSTOM_WAIT 56 +#define FUNC_SPINLOCK_LOCK_CUSTOM_WAIT 75 #endif // !FUNC_SPINLOCK_LOCK_CUSTOM_WAIT #ifndef FUNC_EVENT_INJECT -#define FUNC_EVENT_INJECT 57 +#define FUNC_EVENT_INJECT 76 #endif // !FUNC_EVENT_INJECT #ifndef FUNC_POI -#define FUNC_POI 58 +#define FUNC_POI 77 #endif // !FUNC_POI #ifndef FUNC_DB -#define FUNC_DB 59 +#define FUNC_DB 78 #endif // !FUNC_DB #ifndef FUNC_DD -#define FUNC_DD 60 +#define FUNC_DD 79 #endif // !FUNC_DD #ifndef FUNC_DW -#define FUNC_DW 61 +#define FUNC_DW 80 #endif // !FUNC_DW #ifndef FUNC_DQ -#define FUNC_DQ 62 +#define FUNC_DQ 81 #endif // !FUNC_DQ #ifndef FUNC_NEG -#define FUNC_NEG 63 +#define FUNC_NEG 82 #endif // !FUNC_NEG #ifndef FUNC_HI -#define FUNC_HI 64 +#define FUNC_HI 83 #endif // !FUNC_HI #ifndef FUNC_LOW -#define FUNC_LOW 65 +#define FUNC_LOW 84 #endif // !FUNC_LOW #ifndef FUNC_NOT -#define FUNC_NOT 66 +#define FUNC_NOT 85 #endif // !FUNC_NOT #ifndef FUNC_CHECK_ADDRESS -#define FUNC_CHECK_ADDRESS 67 +#define FUNC_CHECK_ADDRESS 86 #endif // !FUNC_CHECK_ADDRESS #ifndef FUNC_DISASSEMBLE_LEN -#define FUNC_DISASSEMBLE_LEN 68 +#define FUNC_DISASSEMBLE_LEN 87 #endif // !FUNC_DISASSEMBLE_LEN #ifndef FUNC_DISASSEMBLE_LEN32 -#define FUNC_DISASSEMBLE_LEN32 69 +#define FUNC_DISASSEMBLE_LEN32 88 #endif // !FUNC_DISASSEMBLE_LEN32 #ifndef FUNC_DISASSEMBLE_LEN64 -#define FUNC_DISASSEMBLE_LEN64 70 +#define FUNC_DISASSEMBLE_LEN64 89 #endif // !FUNC_DISASSEMBLE_LEN64 #ifndef FUNC_INTERLOCKED_INCREMENT -#define FUNC_INTERLOCKED_INCREMENT 71 +#define FUNC_INTERLOCKED_INCREMENT 90 #endif // !FUNC_INTERLOCKED_INCREMENT #ifndef FUNC_INTERLOCKED_DECREMENT -#define FUNC_INTERLOCKED_DECREMENT 72 +#define FUNC_INTERLOCKED_DECREMENT 91 #endif // !FUNC_INTERLOCKED_DECREMENT #ifndef FUNC_REFERENCE -#define FUNC_REFERENCE 73 +#define FUNC_REFERENCE 92 #endif // !FUNC_REFERENCE #ifndef FUNC_PHYSICAL_TO_VIRTUAL -#define FUNC_PHYSICAL_TO_VIRTUAL 74 +#define FUNC_PHYSICAL_TO_VIRTUAL 93 #endif // !FUNC_PHYSICAL_TO_VIRTUAL #ifndef FUNC_VIRTUAL_TO_PHYSICAL -#define FUNC_VIRTUAL_TO_PHYSICAL 75 +#define FUNC_VIRTUAL_TO_PHYSICAL 94 #endif // !FUNC_VIRTUAL_TO_PHYSICAL #ifndef FUNC_ED -#define FUNC_ED 76 +#define FUNC_ED 95 #endif // !FUNC_ED #ifndef FUNC_EB -#define FUNC_EB 77 +#define FUNC_EB 96 #endif // !FUNC_EB #ifndef FUNC_EQ -#define FUNC_EQ 78 +#define FUNC_EQ 97 #endif // !FUNC_EQ #ifndef FUNC_INTERLOCKED_EXCHANGE -#define FUNC_INTERLOCKED_EXCHANGE 79 +#define FUNC_INTERLOCKED_EXCHANGE 98 #endif // !FUNC_INTERLOCKED_EXCHANGE #ifndef FUNC_INTERLOCKED_EXCHANGE_ADD -#define FUNC_INTERLOCKED_EXCHANGE_ADD 80 +#define FUNC_INTERLOCKED_EXCHANGE_ADD 99 #endif // !FUNC_INTERLOCKED_EXCHANGE_ADD #ifndef FUNC_INTERLOCKED_COMPARE_EXCHANGE -#define FUNC_INTERLOCKED_COMPARE_EXCHANGE 81 +#define FUNC_INTERLOCKED_COMPARE_EXCHANGE 100 #endif // !FUNC_INTERLOCKED_COMPARE_EXCHANGE #ifndef FUNC_STRLEN -#define FUNC_STRLEN 82 +#define FUNC_STRLEN 101 #endif // !FUNC_STRLEN #ifndef FUNC_STRCMP -#define FUNC_STRCMP 83 +#define FUNC_STRCMP 102 #endif // !FUNC_STRCMP #ifndef FUNC_MEMCMP -#define FUNC_MEMCMP 84 +#define FUNC_MEMCMP 103 #endif // !FUNC_MEMCMP #ifndef FUNC_WCSLEN -#define FUNC_WCSLEN 85 +#define FUNC_WCSLEN 104 #endif // !FUNC_WCSLEN #ifndef FUNC_WCSCMP -#define FUNC_WCSCMP 86 +#define FUNC_WCSCMP 105 #endif // !FUNC_WCSCMP #ifndef FUNC_EVENT_INJECT_ERROR_CODE -#define FUNC_EVENT_INJECT_ERROR_CODE 87 +#define FUNC_EVENT_INJECT_ERROR_CODE 106 #endif // !FUNC_EVENT_INJECT_ERROR_CODE #ifndef FUNC_MEMCPY -#define FUNC_MEMCPY 88 +#define FUNC_MEMCPY 107 #endif // !FUNC_MEMCPY #ifndef FUNC_POI -#define FUNC_POI 89 +#define FUNC_POI 108 #endif // !FUNC_POI #ifndef FUNC_DB -#define FUNC_DB 90 +#define FUNC_DB 109 #endif // !FUNC_DB #ifndef FUNC_DD -#define FUNC_DD 91 +#define FUNC_DD 110 #endif // !FUNC_DD #ifndef FUNC_DW -#define FUNC_DW 92 +#define FUNC_DW 111 #endif // !FUNC_DW #ifndef FUNC_DQ -#define FUNC_DQ 93 +#define FUNC_DQ 112 #endif // !FUNC_DQ #ifndef FUNC_NEG -#define FUNC_NEG 94 +#define FUNC_NEG 113 #endif // !FUNC_NEG #ifndef FUNC_HI -#define FUNC_HI 95 +#define FUNC_HI 114 #endif // !FUNC_HI #ifndef FUNC_LOW -#define FUNC_LOW 96 +#define FUNC_LOW 115 #endif // !FUNC_LOW #ifndef FUNC_NOT -#define FUNC_NOT 97 +#define FUNC_NOT 116 #endif // !FUNC_NOT #ifndef FUNC_CHECK_ADDRESS -#define FUNC_CHECK_ADDRESS 98 +#define FUNC_CHECK_ADDRESS 117 #endif // !FUNC_CHECK_ADDRESS #ifndef FUNC_DISASSEMBLE_LEN -#define FUNC_DISASSEMBLE_LEN 99 +#define FUNC_DISASSEMBLE_LEN 118 #endif // !FUNC_DISASSEMBLE_LEN #ifndef FUNC_DISASSEMBLE_LEN32 -#define FUNC_DISASSEMBLE_LEN32 100 +#define FUNC_DISASSEMBLE_LEN32 119 #endif // !FUNC_DISASSEMBLE_LEN32 #ifndef FUNC_DISASSEMBLE_LEN64 -#define FUNC_DISASSEMBLE_LEN64 101 +#define FUNC_DISASSEMBLE_LEN64 120 #endif // !FUNC_DISASSEMBLE_LEN64 #ifndef FUNC_INTERLOCKED_INCREMENT -#define FUNC_INTERLOCKED_INCREMENT 102 +#define FUNC_INTERLOCKED_INCREMENT 121 #endif // !FUNC_INTERLOCKED_INCREMENT #ifndef FUNC_INTERLOCKED_DECREMENT -#define FUNC_INTERLOCKED_DECREMENT 103 +#define FUNC_INTERLOCKED_DECREMENT 122 #endif // !FUNC_INTERLOCKED_DECREMENT #ifndef FUNC_REFERENCE -#define FUNC_REFERENCE 104 +#define FUNC_REFERENCE 123 #endif // !FUNC_REFERENCE #ifndef FUNC_PHYSICAL_TO_VIRTUAL -#define FUNC_PHYSICAL_TO_VIRTUAL 105 +#define FUNC_PHYSICAL_TO_VIRTUAL 124 #endif // !FUNC_PHYSICAL_TO_VIRTUAL #ifndef FUNC_VIRTUAL_TO_PHYSICAL -#define FUNC_VIRTUAL_TO_PHYSICAL 106 +#define FUNC_VIRTUAL_TO_PHYSICAL 125 #endif // !FUNC_VIRTUAL_TO_PHYSICAL #ifndef FUNC_ED -#define FUNC_ED 107 +#define FUNC_ED 126 #endif // !FUNC_ED #ifndef FUNC_EB -#define FUNC_EB 108 +#define FUNC_EB 127 #endif // !FUNC_EB #ifndef FUNC_EQ -#define FUNC_EQ 109 +#define FUNC_EQ 128 #endif // !FUNC_EQ #ifndef FUNC_INTERLOCKED_EXCHANGE -#define FUNC_INTERLOCKED_EXCHANGE 110 +#define FUNC_INTERLOCKED_EXCHANGE 129 #endif // !FUNC_INTERLOCKED_EXCHANGE #ifndef FUNC_INTERLOCKED_EXCHANGE_ADD -#define FUNC_INTERLOCKED_EXCHANGE_ADD 111 +#define FUNC_INTERLOCKED_EXCHANGE_ADD 130 #endif // !FUNC_INTERLOCKED_EXCHANGE_ADD #ifndef FUNC_INTERLOCKED_COMPARE_EXCHANGE -#define FUNC_INTERLOCKED_COMPARE_EXCHANGE 112 +#define FUNC_INTERLOCKED_COMPARE_EXCHANGE 131 #endif // !FUNC_INTERLOCKED_COMPARE_EXCHANGE #ifndef FUNC_STRLEN -#define FUNC_STRLEN 113 +#define FUNC_STRLEN 132 #endif // !FUNC_STRLEN #ifndef FUNC_STRCMP -#define FUNC_STRCMP 114 +#define FUNC_STRCMP 133 #endif // !FUNC_STRCMP #ifndef FUNC_MEMCMP -#define FUNC_MEMCMP 115 +#define FUNC_MEMCMP 134 #endif // !FUNC_MEMCMP #ifndef FUNC_WCSLEN -#define FUNC_WCSLEN 116 +#define FUNC_WCSLEN 135 #endif // !FUNC_WCSLEN #ifndef FUNC_WCSCMP -#define FUNC_WCSCMP 117 +#define FUNC_WCSCMP 136 #endif // !FUNC_WCSCMP typedef enum REGS_ENUM { diff --git a/hyperdbg/script-eval/header/ScriptEngineHeader.h b/hyperdbg/script-eval/header/ScriptEngineHeader.h index 61705a03..072cb926 100644 --- a/hyperdbg/script-eval/header/ScriptEngineHeader.h +++ b/hyperdbg/script-eval/header/ScriptEngineHeader.h @@ -16,7 +16,11 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, ACTION_BUFFER * ActionDetail, SCRIPT_ENGINE_VARIABLES_LIST * VariablesList, SYMBOL_BUFFER * CodeBuffer, - UINT64 * Indx, + int * Indx, + SYMBOL_BUFFER * StackBuffer, + int * StackIndx, + int * StackBaseIndx, + int * StackTempBaseIndx, SYMBOL * ErrorOperator); UINT64 diff --git a/hyperdbg/script-eval/header/ScriptEngineInternalHeader.h b/hyperdbg/script-eval/header/ScriptEngineInternalHeader.h index f60f28f0..3dbba7d7 100644 --- a/hyperdbg/script-eval/header/ScriptEngineInternalHeader.h +++ b/hyperdbg/script-eval/header/ScriptEngineInternalHeader.h @@ -196,7 +196,11 @@ ScriptEngineFunctionPrintf(PGUEST_REGS GuestRegs, char * Format, UINT64 ArgCount, PSYMBOL FirstArg, - BOOLEAN * HasError); + BOOLEAN * HasError, + SYMBOL_BUFFER * StackBuffer, + int * StackIndx, + int * StackBaseIndx, + int * StackTempBaseIndx); VOID ScriptEngineFunctionEventInject(UINT32 InterruptionType, UINT32 Vector, BOOL * HasError);