diff --git a/lib/Backend/BailOut.cpp b/lib/Backend/BailOut.cpp index dc64cf8825c..e1a52a068ea 100644 --- a/lib/Backend/BailOut.cpp +++ b/lib/Backend/BailOut.cpp @@ -1773,7 +1773,7 @@ void BailOutRecord::ScheduleFunctionCodeGen(Js::ScriptFunction * function, Js::S bailOutRecordNotConst->bailOutCount++; Js::FunctionEntryPointInfo *entryPointInfo = function->GetFunctionEntryPointInfo(); - uint8 callsCount = entryPointInfo->callsCount; + uint8 callsCount = entryPointInfo->callsCount > 255 ? 255 : static_cast(entryPointInfo->callsCount); RejitReason rejitReason = RejitReason::None; bool reThunk = false; @@ -2330,11 +2330,7 @@ void BailOutRecord::ScheduleLoopBodyCodeGen(Js::ScriptFunction * function, Js::S entryPointInfo->totalJittedLoopIterations += entryPointInfo->jittedLoopIterationsSinceLastBailout; entryPointInfo->jittedLoopIterationsSinceLastBailout = 0; - if (entryPointInfo->totalJittedLoopIterations > UINT8_MAX) - { - entryPointInfo->totalJittedLoopIterations = UINT8_MAX; - } - uint8 totalJittedLoopIterations = (uint8)entryPointInfo->totalJittedLoopIterations; + uint8 totalJittedLoopIterations = entryPointInfo->totalJittedLoopIterations > 255 ? 255 : static_cast(entryPointInfo->totalJittedLoopIterations); totalJittedLoopIterations = totalJittedLoopIterations <= Js::LoopEntryPointInfo::GetDecrLoopCountPerBailout() ? 0 : totalJittedLoopIterations - Js::LoopEntryPointInfo::GetDecrLoopCountPerBailout(); CheckPreemptiveRejit(executeFunction, bailOutKind, bailOutRecordNotConst, totalJittedLoopIterations, interpreterFrame->GetCurrentLoopNum()); diff --git a/lib/Backend/FunctionJITTimeInfo.cpp b/lib/Backend/FunctionJITTimeInfo.cpp index b9d4b316523..954a0f13ed4 100644 --- a/lib/Backend/FunctionJITTimeInfo.cpp +++ b/lib/Backend/FunctionJITTimeInfo.cpp @@ -37,7 +37,7 @@ FunctionJITTimeInfo::BuildJITTimeData( jitData->inlineesBv = (BVFixedIDL*)codeGenData->inlineesBv; - if (codeGenData->GetFunctionInfo()->HasBody()) + if (codeGenData->GetFunctionInfo()->HasBody() && codeGenData->GetFunctionInfo()->GetFunctionProxy()->IsFunctionBody()) { Assert(isInlinee == !!runtimeData); const Js::FunctionCodeGenRuntimeData * targetRuntimeData = nullptr; diff --git a/lib/Backend/Inline.cpp b/lib/Backend/Inline.cpp index 6876331742b..9d6d89a1eb4 100644 --- a/lib/Backend/Inline.cpp +++ b/lib/Backend/Inline.cpp @@ -526,7 +526,9 @@ uint Inline::FillInlineesDataArray( } intptr_t inlineeFunctionInfoAddr = inlineeJitTimeData->GetFunctionInfoAddr(); - if (!PHASE_OFF(Js::PolymorphicInlinePhase, inlineeJitTimeData)) +#ifdef DBG + if (inlineeJitTimeData->HasBody() && !PHASE_OFF(Js::PolymorphicInlinePhase, inlineeJitTimeData)) +#endif { const FunctionJITTimeInfo* rightInlineeJitTimeData = inlineeJitTimeData->GetJitTimeDataFromFunctionInfoAddr(inlineeFunctionInfoAddr); @@ -573,28 +575,31 @@ void Inline::FillInlineesDataArrayUsingFixedMethods( JITTimeFunctionBody* inlineeFuncBody = nullptr; while (inlineeJitTimeData) { - inlineeFuncBody = inlineeJitTimeData->GetBody(); - if (!PHASE_OFF(Js::PolymorphicInlinePhase, inlineeJitTimeData) && !PHASE_OFF(Js::PolymorphicInlineFixedMethodsPhase, inlineeJitTimeData)) + if (inlineeJitTimeData->HasBody()) { - const FunctionJITTimeInfo * jitTimeData = inlineeJitTimeData->GetJitTimeDataFromFunctionInfoAddr(inlineeJitTimeData->GetFunctionInfoAddr()); - if (jitTimeData) + inlineeFuncBody = inlineeJitTimeData->GetBody(); + if (!PHASE_OFF(Js::PolymorphicInlinePhase, inlineeJitTimeData) && !PHASE_OFF(Js::PolymorphicInlineFixedMethodsPhase, inlineeJitTimeData)) { - for (uint16 i = 0; i < cachedFixedInlineeCount; i++) + const FunctionJITTimeInfo * jitTimeData = inlineeJitTimeData->GetJitTimeDataFromFunctionInfoAddr(inlineeJitTimeData->GetFunctionInfoAddr()); + if (jitTimeData) { - if (inlineeJitTimeData->GetFunctionInfoAddr() == fixedFieldInfoArray[i].GetFuncInfoAddr()) + for (uint16 i = 0; i < cachedFixedInlineeCount; i++) { - inlineesDataArray[i] = inlineeJitTimeData->GetJitTimeDataFromFunctionInfoAddr(inlineeJitTimeData->GetFunctionInfoAddr()); - break; + if (inlineeJitTimeData->GetFunctionInfoAddr() == fixedFieldInfoArray[i].GetFuncInfoAddr()) + { + inlineesDataArray[i] = inlineeJitTimeData->GetJitTimeDataFromFunctionInfoAddr(inlineeJitTimeData->GetFunctionInfoAddr()); + break; + } } } - } - else - { + else + { #if defined(DBG_DUMP) || defined(ENABLE_DEBUG_CONFIG_OPTIONS) - char16 debugStringBuffer[MAX_FUNCTION_BODY_DEBUG_STRING_SIZE]; + char16 debugStringBuffer[MAX_FUNCTION_BODY_DEBUG_STRING_SIZE]; #endif - POLYMORPHIC_INLINE_TESTTRACE(_u("INLINING (Polymorphic): Missing jit time data skipped inlinee\tInlinee: %s (%s)\n"), - inlineeFuncBody->GetDisplayName(), inlineeJitTimeData->GetDebugNumberSet(debugStringBuffer)); + POLYMORPHIC_INLINE_TESTTRACE(_u("INLINING (Polymorphic): Missing jit time data skipped inlinee\tInlinee: %s (%s)\n"), + inlineeFuncBody->GetDisplayName(), inlineeJitTimeData->GetDebugNumberSet(debugStringBuffer)); + } } } inlineeJitTimeData = inlineeJitTimeData->GetNext(); @@ -1028,7 +1033,7 @@ Inline::InlinePolymorphicFunction(IR::Instr *callInstr, const FunctionJITTimeInf IR::RegOpnd* functionObject = callInstr->GetSrc1()->AsRegOpnd(); dispatchStartLabel->InsertBefore(IR::BranchInstr::New(Js::OpCode::BrAddr_A, inlineeStartLabel, IR::IndirOpnd::New(functionObject, Js::JavascriptFunction::GetOffsetOfFunctionInfo(), TyMachPtr, dispatchStartLabel->m_func), - IR::AddrOpnd::New(inlineesDataArray[i]->GetBody()->GetAddr(), IR::AddrOpndKindDynamicFunctionBody, dispatchStartLabel->m_func), dispatchStartLabel->m_func)); + IR::AddrOpnd::New(inlineesDataArray[i]->GetFunctionInfoAddr(), IR::AddrOpndKindDynamicFunctionBody, dispatchStartLabel->m_func), dispatchStartLabel->m_func)); } CompletePolymorphicInlining(callInstr, returnValueOpnd, doneLabel, dispatchStartLabel, /*ldMethodFldInstr*/nullptr, IR::BailOutOnPolymorphicInlineFunction); @@ -4143,14 +4148,14 @@ Inline::InsertJsFunctionCheck(IR::Instr *callInstr, IR::Instr *insertBeforeInstr } void -Inline::InsertFunctionBodyCheck(IR::Instr *callInstr, IR::Instr *insertBeforeInstr, IR::Instr* bailoutInstr, const FunctionJITTimeInfo *funcInfo) +Inline::InsertFunctionInfoCheck(IR::Instr *callInstr, IR::Instr *insertBeforeInstr, IR::Instr* bailoutInstr, const FunctionJITTimeInfo *funcInfo) { // if (JavascriptFunction::FromVar(r1)->functionInfo != funcInfo) goto noInlineLabel // BrNeq_I4 noInlineLabel, r1->functionInfo, funcInfo - IR::IndirOpnd* funcBody = IR::IndirOpnd::New(callInstr->GetSrc1()->AsRegOpnd(), Js::JavascriptFunction::GetOffsetOfFunctionInfo(), TyMachPtr, callInstr->m_func); - IR::AddrOpnd* inlinedFuncBody = IR::AddrOpnd::New(funcInfo->GetFunctionInfoAddr(), IR::AddrOpndKindDynamicFunctionBody, callInstr->m_func); - bailoutInstr->SetSrc1(funcBody); - bailoutInstr->SetSrc2(inlinedFuncBody); + IR::IndirOpnd* opndFuncInfo = IR::IndirOpnd::New(callInstr->GetSrc1()->AsRegOpnd(), Js::JavascriptFunction::GetOffsetOfFunctionInfo(), TyMachPtr, callInstr->m_func); + IR::AddrOpnd* inlinedFuncInfo = IR::AddrOpnd::New(funcInfo->GetFunctionInfoAddr(), IR::AddrOpndKindDynamicFunctionInfo, callInstr->m_func); + bailoutInstr->SetSrc1(opndFuncInfo); + bailoutInstr->SetSrc2(inlinedFuncInfo); insertBeforeInstr->InsertBefore(bailoutInstr); } @@ -4188,7 +4193,7 @@ Inline::PrepareInsertionPoint(IR::Instr *callInstr, const FunctionJITTimeInfo *f InsertFunctionTypeIdCheck(callInstr, insertBeforeInstr, bailOutIfNotJsFunction); // 3. Bailout if function body doesn't match funcInfo - InsertFunctionBodyCheck(callInstr, insertBeforeInstr, primaryBailOutInstr, funcInfo); + InsertFunctionInfoCheck(callInstr, insertBeforeInstr, primaryBailOutInstr, funcInfo); return primaryBailOutInstr; } diff --git a/lib/Backend/Inline.h b/lib/Backend/Inline.h index b683352d0e9..620518f2f10 100644 --- a/lib/Backend/Inline.h +++ b/lib/Backend/Inline.h @@ -129,7 +129,7 @@ class Inline void InsertObjectCheck(IR::Instr *callInstr, IR::Instr* insertBeforeInstr, IR::Instr*bailOutInstr); void InsertFunctionTypeIdCheck(IR::Instr *callInstr, IR::Instr* insertBeforeInstr, IR::Instr*bailOutInstr); void InsertJsFunctionCheck(IR::Instr *callInstr, IR::Instr *insertBeforeInstr, IR::BailOutKind bailOutKind); - void InsertFunctionBodyCheck(IR::Instr *callInstr, IR::Instr *insertBeforeInstr, IR::Instr* bailoutInstr, const FunctionJITTimeInfo *funcInfo); + void InsertFunctionInfoCheck(IR::Instr *callInstr, IR::Instr *insertBeforeInstr, IR::Instr* bailoutInstr, const FunctionJITTimeInfo *funcInfo); void InsertFunctionObjectCheck(IR::Instr *callInstr, IR::Instr *insertBeforeInstr, IR::Instr* bailoutInstr, const FunctionJITTimeInfo *funcInfo); void TryResetObjTypeSpecFldInfoOn(IR::PropertySymOpnd* propertySymOpnd); diff --git a/lib/Backend/InliningDecider.cpp b/lib/Backend/InliningDecider.cpp index 30e7ebaa127..199a8232de0 100644 --- a/lib/Backend/InliningDecider.cpp +++ b/lib/Backend/InliningDecider.cpp @@ -151,7 +151,7 @@ uint InliningDecider::InlinePolymorphicCallSite(Js::FunctionBody *const inliner, AssertMsg(inlineeCount >= 2, "There are at least two polymorphic call site"); break; } - if (Inline(inliner, functionBodyArray[inlineeCount], isConstructorCall, true /*isPolymorphicCall*/, 0, profiledCallSiteId, recursiveInlineDepth, false)) + if (Inline(inliner, functionBodyArray[inlineeCount]->GetFunctionInfo(), isConstructorCall, true /*isPolymorphicCall*/, 0, profiledCallSiteId, recursiveInlineDepth, false)) { canInlineArray[inlineeCount] = true; actualInlineeCount++; @@ -272,7 +272,7 @@ Js::FunctionInfo *InliningDecider::Inline(Js::FunctionBody *const inliner, Js::F #endif this->bytecodeInlinedCount += inlinee->GetByteCodeCount(); - return inlinee; + return inlinee->GetFunctionInfo(); } Js::OpCode builtInInlineCandidateOpCode; diff --git a/lib/Backend/InterpreterThunkEmitter.cpp b/lib/Backend/InterpreterThunkEmitter.cpp index 69d9f286f6e..5111209042c 100644 --- a/lib/Backend/InterpreterThunkEmitter.cpp +++ b/lib/Backend/InterpreterThunkEmitter.cpp @@ -7,14 +7,15 @@ #ifdef ENABLE_NATIVE_CODEGEN #ifdef _M_X64 #ifdef _WIN32 -const BYTE InterpreterThunkEmitter::FunctionBodyOffset = 23; -const BYTE InterpreterThunkEmitter::DynamicThunkAddressOffset = 27; -const BYTE InterpreterThunkEmitter::CallBlockStartAddrOffset = 37; -const BYTE InterpreterThunkEmitter::ThunkSizeOffset = 51; -const BYTE InterpreterThunkEmitter::ErrorOffset = 60; -const BYTE InterpreterThunkEmitter::ThunkAddressOffset = 77; - -const BYTE InterpreterThunkEmitter::PrologSize = 76; +const BYTE InterpreterThunkEmitter::FunctionInfoOffset = 23; +const BYTE InterpreterThunkEmitter::FunctionProxyOffset = 27; +const BYTE InterpreterThunkEmitter::DynamicThunkAddressOffset = 31; +const BYTE InterpreterThunkEmitter::CallBlockStartAddrOffset = 41; +const BYTE InterpreterThunkEmitter::ThunkSizeOffset = 55; +const BYTE InterpreterThunkEmitter::ErrorOffset = 64; +const BYTE InterpreterThunkEmitter::ThunkAddressOffset = 81; + +const BYTE InterpreterThunkEmitter::PrologSize = 80; const BYTE InterpreterThunkEmitter::StackAllocSize = 0x28; // @@ -29,8 +30,9 @@ const BYTE InterpreterThunkEmitter::InterpreterThunk[] = { 0x48, 0x89, 0x4C, 0x24, 0x08, // mov qword ptr [rsp+8],rcx 0x4C, 0x89, 0x44, 0x24, 0x18, // mov qword ptr [rsp+18h],r8 0x4C, 0x89, 0x4C, 0x24, 0x20, // mov qword ptr [rsp+20h],r9 - 0x48, 0x8B, 0x41, 0x00, // mov rax, qword ptr [rcx+FunctionBodyOffset] - 0x48, 0x8B, 0x50, 0x00, // mov rdx, qword ptr [rax+DynamicThunkAddressOffset] + 0x48, 0x8B, 0x41, 0x00, // mov rax, qword ptr [rcx+FunctionInfoOffset] + 0x48, 0x8B, 0x48, 0x00, // mov rcx, qword ptr [rax+FunctionProxyOffset] + 0x48, 0x8B, 0x51, 0x00, // mov rdx, qword ptr [rcx+DynamicThunkAddressOffset] // Range Check for Valid call target 0x48, 0x83, 0xE2, 0xF8, // and rdx, 0xFFFFFFFFFFFFFFF8h ;Force 8 byte alignment 0x48, 0x8b, 0xca, // mov rcx, rdx @@ -46,7 +48,7 @@ const BYTE InterpreterThunkEmitter::InterpreterThunk[] = { 0x48, 0x83, 0xEC, StackAllocSize, // sub rsp,28h 0x48, 0xB8, 0x00, 0x00, 0x00 ,0x00, 0x00, 0x00, 0x00, 0x00, // mov rax, 0xFF, 0xE2, // jmp rdx - 0xCC // int 3 ;for alignment to size of 8 we are adding this + 0xCC, 0xCC, 0xCC, 0xCC, 0xCC // int 3 ;for alignment to size of 8 we are adding this }; const BYTE InterpreterThunkEmitter::Epilog[] = { @@ -54,21 +56,23 @@ const BYTE InterpreterThunkEmitter::Epilog[] = { 0xC3 // ret }; #else // Sys V AMD64 -const BYTE InterpreterThunkEmitter::FunctionBodyOffset = 7; -const BYTE InterpreterThunkEmitter::DynamicThunkAddressOffset = 11; -const BYTE InterpreterThunkEmitter::CallBlockStartAddrOffset = 21; -const BYTE InterpreterThunkEmitter::ThunkSizeOffset = 35; -const BYTE InterpreterThunkEmitter::ErrorOffset = 44; -const BYTE InterpreterThunkEmitter::ThunkAddressOffset = 57; - -const BYTE InterpreterThunkEmitter::PrologSize = 56; +const BYTE InterpreterThunkEmitter::FunctionInfoOffset = 7; +const BYTE InterpreterThunkEmitter::FunctionProxyOffset = 11; +const BYTE InterpreterThunkEmitter::DynamicThunkAddressOffset = 15; +const BYTE InterpreterThunkEmitter::CallBlockStartAddrOffset = 25; +const BYTE InterpreterThunkEmitter::ThunkSizeOffset = 39; +const BYTE InterpreterThunkEmitter::ErrorOffset = 48; +const BYTE InterpreterThunkEmitter::ThunkAddressOffset = 61; + +const BYTE InterpreterThunkEmitter::PrologSize = 60; const BYTE InterpreterThunkEmitter::StackAllocSize = 0x0; const BYTE InterpreterThunkEmitter::InterpreterThunk[] = { 0x55, // push rbp // Prolog - setup the stack frame 0x48, 0x89, 0xe5, // mov rbp, rsp - 0x48, 0x8b, 0x47, 0x00, // mov rax, qword ptr [rdi + FunctionBodyOffset] - 0x48, 0x8b, 0x50, 0x00, // mov rdx, qword ptr [rax + DynamicThunkAddressOffset] + 0x48, 0x8b, 0x47, 0x00, // mov rax, qword ptr [rdi + FunctionInfoOffset] + 0x48, 0x8B, 0x48, 0x00, // mov rcx, qword ptr [rax+FunctionProxyOffset] + 0x48, 0x8B, 0x51, 0x00, // mov rdx, qword ptr [rcx+DynamicThunkAddressOffset] // Range Check for Valid call target 0x48, 0x83, 0xE2, 0xF8, // and rdx, 0xfffffffffffffff8 // Force 8 byte alignment 0x48, 0x89, 0xd1, // mov rcx, rdx @@ -83,7 +87,7 @@ const BYTE InterpreterThunkEmitter::InterpreterThunk[] = { 0x48, 0x8d, 0x7c, 0x24, 0x10, // lea rdi, [rsp+0x10] 0x48, 0xB8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // mov rax, // stack already 16-byte aligned 0xff, 0xe2, // jmp rdx - 0xcc, 0xcc, 0xcc, 0xcc, 0xcc // int 3 // for alignment to size of 8 + 0xcc // int 3 // for alignment to size of 8 }; const BYTE InterpreterThunkEmitter::Epilog[] = { @@ -93,11 +97,12 @@ const BYTE InterpreterThunkEmitter::Epilog[] = { #endif #elif defined(_M_ARM) const BYTE InterpreterThunkEmitter::ThunkAddressOffset = 8; -const BYTE InterpreterThunkEmitter::FunctionBodyOffset = 18; -const BYTE InterpreterThunkEmitter::DynamicThunkAddressOffset = 22; -const BYTE InterpreterThunkEmitter::CallBlockStartAddressInstrOffset = 38; -const BYTE InterpreterThunkEmitter::CallThunkSizeInstrOffset = 50; -const BYTE InterpreterThunkEmitter::ErrorOffset = 60; +const BYTE InterpreterThunkEmitter::FunctionInfoOffset = 18; +const BYTE InterpreterThunkEmitter::FunctionProxyOffset = 22; +const BYTE InterpreterThunkEmitter::DynamicThunkAddressOffset = 26; +const BYTE InterpreterThunkEmitter::CallBlockStartAddressInstrOffset = 42; +const BYTE InterpreterThunkEmitter::CallThunkSizeInstrOffset = 54; +const BYTE InterpreterThunkEmitter::ErrorOffset = 64; const BYTE InterpreterThunkEmitter::InterpreterThunk[] = { 0x0F, 0xB4, // push {r0-r3} @@ -106,7 +111,8 @@ const BYTE InterpreterThunkEmitter::InterpreterThunk[] = { 0x00, 0x00, 0x00, 0x00, // movw r1,ThunkAddress 0x00, 0x00, 0x00, 0x00, // movt r1,ThunkAddress 0xD0, 0xF8, 0x00, 0x20, // ldr.w r2,[r0,#0x00] - 0xD2, 0xF8, 0x00, 0x30, // ldr.w r3,[r2,#0x00] + 0xD2, 0xF8, 0x00, 0x00, // ldr.w r0,[r2,#0x00] + 0xD0, 0xF8, 0x00, 0x30, // ldr.w r3,[r0,#0x00] 0x4F, 0xF6, 0xF9, 0x70, // mov r0,#0xFFF9 0xCF, 0xF6, 0xFF, 0x70, // movt r0,#0xFFFF 0x03, 0xEA, 0x00, 0x03, // and r3,r3,r0 @@ -122,9 +128,7 @@ const BYTE InterpreterThunkEmitter::InterpreterThunk[] = { //$safe: 0x02, 0xA8, // add r0,sp,#8 - 0x18, 0x47, // bx r3 - 0xFE, 0xDE, // int 3 ;Required for alignment - 0xFE, 0xDE // int 3 ;Required for alignment + 0x18, 0x47 // bx r3 }; const BYTE InterpreterThunkEmitter::JmpOffset = 2; @@ -140,9 +144,10 @@ const BYTE InterpreterThunkEmitter::Epilog[] = { 0x5D, 0xF8, 0x14, 0xFB // ldr pc,[sp],#0x14 }; #elif defined(_M_ARM64) -const BYTE InterpreterThunkEmitter::FunctionBodyOffset = 24; -const BYTE InterpreterThunkEmitter::DynamicThunkAddressOffset = 28; -const BYTE InterpreterThunkEmitter::ThunkAddressOffset = 32; +const BYTE InterpreterThunkEmitter::FunctionInfoOffset = 24; +const BYTE InterpreterThunkEmitter::FunctionProxyOffset = 28; +const BYTE InterpreterThunkEmitter::DynamicThunkAddressOffset = 32; +const BYTE InterpreterThunkEmitter::ThunkAddressOffset = 36; //TODO: saravind :Implement Range Check for ARM64 const BYTE InterpreterThunkEmitter::InterpreterThunk[] = { @@ -153,7 +158,8 @@ const BYTE InterpreterThunkEmitter::InterpreterThunk[] = { 0xE4, 0x17, 0x03, 0xA9, //stp x4, x5, [sp, #48] 0xE6, 0x1F, 0x04, 0xA9, //stp x6, x7, [sp, #64] 0x02, 0x00, 0x40, 0xF9, //ldr x2, [x0, #0x00] ;offset will be replaced with Offset of FunctionInfo - 0x43, 0x00, 0x40, 0xF9, //ldr x3, [x2, #0x00] ;offset will be replaced with offset of DynamicInterpreterThunk + 0x40, 0x00, 0x40, 0xF9, //ldr x0, [x2, #0x00] ;offset will be replaced with Offset of FunctionProxy + 0x03, 0x00, 0x40, 0xF9, //ldr x3, [x0, #0x00] ;offset will be replaced with offset of DynamicInterpreterThunk //Following 4 MOV Instrs are to move the 64-bit address of the InterpreterThunk address into register x1. 0x00, 0x00, 0x00, 0x00, //movz x1, #0x00 ;This is overwritten with the actual thunk address(16 - 0 bits) move 0x00, 0x00, 0x00, 0x00, //movk x1, #0x00, lsl #16 ;This is overwritten with the actual thunk address(32 - 16 bits) move @@ -175,18 +181,20 @@ const BYTE InterpreterThunkEmitter::Epilog[] = { 0xc0, 0x03, 0x5f, 0xd6 // ret }; #else -const BYTE InterpreterThunkEmitter::FunctionBodyOffset = 8; -const BYTE InterpreterThunkEmitter::DynamicThunkAddressOffset = 11; -const BYTE InterpreterThunkEmitter::CallBlockStartAddrOffset = 18; -const BYTE InterpreterThunkEmitter::ThunkSizeOffset = 23; -const BYTE InterpreterThunkEmitter::ErrorOffset = 30; -const BYTE InterpreterThunkEmitter::ThunkAddressOffset = 41; +const BYTE InterpreterThunkEmitter::FunctionInfoOffset = 8; +const BYTE InterpreterThunkEmitter::FunctionProxyOffset = 11; +const BYTE InterpreterThunkEmitter::DynamicThunkAddressOffset = 14; +const BYTE InterpreterThunkEmitter::CallBlockStartAddrOffset = 21; +const BYTE InterpreterThunkEmitter::ThunkSizeOffset = 26; +const BYTE InterpreterThunkEmitter::ErrorOffset = 33; +const BYTE InterpreterThunkEmitter::ThunkAddressOffset = 44; const BYTE InterpreterThunkEmitter::InterpreterThunk[] = { 0x55, // push ebp ;Prolog - setup the stack frame 0x8B, 0xEC, // mov ebp,esp 0x8B, 0x45, 0x08, // mov eax, dword ptr [ebp+8] - 0x8B, 0x40, 0x00, // mov eax, dword ptr [eax+FunctionBodyOffset] + 0x8B, 0x40, 0x00, // mov eax, dword ptr [eax+FunctionInfoOffset] + 0x8B, 0x40, 0x00, // mov eax, dword ptr [eax+FunctionProxyOffset] 0x8B, 0x48, 0x00, // mov ecx, dword ptr [eax+DynamicThunkAddressOffset] // Range Check for Valid call target 0x83, 0xE1, 0xF8, // and ecx, 0FFFFFFF8h @@ -202,7 +210,7 @@ const BYTE InterpreterThunkEmitter::InterpreterThunk[] = { 0x50, // push eax 0xB8, 0x00, 0x00, 0x00, 0x00, // mov eax, 0xFF, 0xE1, // jmp ecx - 0xCC // int 3 for 8byte alignment + 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC // int 3 for 8byte alignment }; const BYTE InterpreterThunkEmitter::Epilog[] = { @@ -515,7 +523,8 @@ void InterpreterThunkEmitter::EncodeInterpreterThunk( Emit(thunkBuffer, ThunkAddressOffset + sizeof(movW), movT); // Encode LDR - Load of function Body - thunkBuffer[FunctionBodyOffset] = Js::JavascriptFunction::GetOffsetOfFunctionInfo(); + thunkBuffer[FunctionInfoOffset] = Js::JavascriptFunction::GetOffsetOfFunctionInfo(); + thunkBuffer[FunctionProxyOffset] = Js::FunctionInfo::GetOffsetOfFunctionProxy(); // Encode LDR - Load of interpreter thunk number thunkBuffer[DynamicThunkAddressOffset] = Js::FunctionBody::GetOffsetOfDynamicInterpreterThunk(); @@ -612,7 +621,12 @@ void InterpreterThunkEmitter::EncodeInterpreterThunk( ULONG offsetOfFunctionInfo = Js::JavascriptFunction::GetOffsetOfFunctionInfo(); AssertMsg(offsetOfFunctionInfo % 8 == 0, "Immediate offset for LDR must be 8 byte aligned"); AssertMsg(offsetOfFunctionInfo < 0x8000, "Immediate offset for LDR must be less than 0x8000"); - *(PULONG)&thunkBuffer[FunctionBodyOffset] |= (offsetOfFunctionInfo / 8) << 10; + *(PULONG)&thunkBuffer[FunctionInfoOffset] |= (offsetOfFunctionInfo / 8) << 10; + + ULONG offsetOfFunctionProxy = Js::FunctionInfo::GetOffsetOfFunctionProxy(); + AssertMsg(offsetOfFunctionProxy % 8 == 0, "Immediate offset for LDR must be 8 byte aligned"); + AssertMsg(offsetOfFunctionProxy < 0x8000, "Immediate offset for LDR must be less than 0x8000"); + *(PULONG)&thunkBuffer[FunctionProxyOffset] |= (offsetOfFunctionProxy / 8) << 10; // Encode LDR - Load of interpreter thunk number ULONG offsetOfDynamicInterpreterThunk = Js::FunctionBody::GetOffsetOfDynamicInterpreterThunk(); @@ -657,7 +671,8 @@ void InterpreterThunkEmitter::EncodeInterpreterThunk( _Analysis_assume_(thunkSize == HeaderSize); Emit(thunkBuffer, ThunkAddressOffset, (uintptr_t)interpreterThunk); thunkBuffer[DynamicThunkAddressOffset] = Js::FunctionBody::GetOffsetOfDynamicInterpreterThunk(); - thunkBuffer[FunctionBodyOffset] = Js::JavascriptFunction::GetOffsetOfFunctionInfo(); + thunkBuffer[FunctionInfoOffset] = Js::JavascriptFunction::GetOffsetOfFunctionInfo(); + thunkBuffer[FunctionProxyOffset] = Js::FunctionInfo::GetOffsetOfFunctionProxy(); Emit(thunkBuffer, CallBlockStartAddrOffset, (uintptr_t) thunkBufferStartAddress + HeaderSize); uint totalThunkSize = (uint)(epilogStart - (thunkBufferStartAddress + HeaderSize)); Emit(thunkBuffer, ThunkSizeOffset, totalThunkSize); diff --git a/lib/Backend/InterpreterThunkEmitter.h b/lib/Backend/InterpreterThunkEmitter.h index b80087cf0f9..516536b8149 100644 --- a/lib/Backend/InterpreterThunkEmitter.h +++ b/lib/Backend/InterpreterThunkEmitter.h @@ -69,7 +69,8 @@ class InterpreterThunkEmitter /* -------static constants ----------*/ // Interpreter thunk buffer includes function prolog, setting up of arguments, jumping to the appropriate calling point. static const BYTE ThunkAddressOffset; - static const BYTE FunctionBodyOffset; + static const BYTE FunctionInfoOffset; + static const BYTE FunctionProxyOffset; static const BYTE DynamicThunkAddressOffset; static const BYTE InterpreterThunkEmitter::CallBlockStartAddrOffset; static const BYTE InterpreterThunkEmitter::ThunkSizeOffset; diff --git a/lib/Backend/JITTimeFunctionBody.cpp b/lib/Backend/JITTimeFunctionBody.cpp index 33fdf42898a..16baf8ebb3a 100644 --- a/lib/Backend/JITTimeFunctionBody.cpp +++ b/lib/Backend/JITTimeFunctionBody.cpp @@ -954,12 +954,12 @@ JITTimeFunctionBody::GetRootObject() const return m_bodyData.constTable[Js::FunctionBody::RootObjectRegSlot - Js::FunctionBody::FirstRegSlot]; } -intptr_t +Js::FunctionInfoPtrPtr JITTimeFunctionBody::GetNestedFuncRef(uint index) const { Assert(index < GetNestedCount()); - intptr_t baseAddr = m_bodyData.nestedFuncArrayAddr; - return baseAddr + (index * sizeof(void*)); + Js::FunctionInfoPtrPtr baseAddr = (Js::FunctionInfoPtrPtr)m_bodyData.nestedFuncArrayAddr; + return baseAddr + index; } intptr_t diff --git a/lib/Backend/JITTimeFunctionBody.h b/lib/Backend/JITTimeFunctionBody.h index 8842de0850c..76c69e62fae 100644 --- a/lib/Backend/JITTimeFunctionBody.h +++ b/lib/Backend/JITTimeFunctionBody.h @@ -104,7 +104,7 @@ class JITTimeFunctionBody uint GetFullStatementMapCount() const; void * ReadFromAuxData(uint offset) const; void * ReadFromAuxContextData(uint offset) const; - intptr_t GetNestedFuncRef(uint index) const; + Js::FunctionInfoPtrPtr GetNestedFuncRef(uint index) const; intptr_t GetConstantVar(Js::RegSlot location) const; JITRecyclableObject * GetConstantContent(Js::RegSlot location) const; diff --git a/lib/Backend/Lower.cpp b/lib/Backend/Lower.cpp index 19061ab20cb..001dd3170de 100644 --- a/lib/Backend/Lower.cpp +++ b/lib/Backend/Lower.cpp @@ -5844,11 +5844,10 @@ Lowerer::LoadFunctionBodyAsArgument(IR::Instr *instr, IR::IntConstOpnd * functio // At which point the deferred function proxy may be collect. // Just pass it the address where we will find the function proxy/body - intptr_t proxyRef = instr->m_func->GetJITFunctionBody()->GetNestedFuncRef((uint)functionBodySlotOpnd->GetValue()); - AssertMsg(proxyRef, "Expected FunctionProxy for index of NewScFunc or NewScGenFunc opnd"); - //AssertMsg(*proxyRef, "Expected FunctionProxy for index of NewScFunc or NewScGenFunc opnd"); + Js::FunctionInfoPtrPtr infoRef = instr->m_func->GetJITFunctionBody()->GetNestedFuncRef((uint)functionBodySlotOpnd->GetValue()); + AssertMsg(infoRef, "Expected FunctionProxy for index of NewScFunc or NewScGenFunc opnd"); - IR::AddrOpnd * indexOpnd = IR::AddrOpnd::New((Js::Var)proxyRef, IR::AddrOpndKindDynamicMisc, m_func); + IR::AddrOpnd * indexOpnd = IR::AddrOpnd::New((Js::Var)infoRef, IR::AddrOpndKindDynamicMisc, m_func); instrPrev = m_lowererMD.LoadHelperArgument(instr, indexOpnd); m_lowererMD.LoadHelperArgument(instr, envOpnd); @@ -6533,7 +6532,7 @@ Lowerer::LowerIsInst(IR::Instr * isInstInstr, IR::JnHelperMethod helperMethod) } void -Lowerer::GenerateStackScriptFunctionInit(StackSym * stackSym, intptr_t nestedProxy) +Lowerer::GenerateStackScriptFunctionInit(StackSym * stackSym, Js::FunctionInfoPtrPtr nestedInfo) { Func * func = this->m_func; Assert(func->HasAnyStackNestedFunc()); @@ -6547,7 +6546,7 @@ Lowerer::GenerateStackScriptFunctionInit(StackSym * stackSym, intptr_t nestedPro // Currently we don't initialize the environment until we actually allocate the function, we also // walk the list of stack function when we need to box them. so we should use initialize it to NullFrameDisplay - GenerateStackScriptFunctionInit(addressOpnd, nestedProxy, + GenerateStackScriptFunctionInit(addressOpnd, nestedInfo, IR::AddrOpnd::New(func->GetThreadContextInfo()->GetNullFrameDisplayAddr(), IR::AddrOpndKindDynamicMisc, func), insertBeforeInstr); // Establish the next link @@ -6557,26 +6556,28 @@ Lowerer::GenerateStackScriptFunctionInit(StackSym * stackSym, intptr_t nestedPro void Lowerer::GenerateScriptFunctionInit(IR::RegOpnd * regOpnd, IR::Opnd * vtableAddressOpnd, - intptr_t nestedProxy, IR::Opnd * envOpnd, IR::Instr * insertBeforeInstr, bool isZeroed) + Js::FunctionInfoPtrPtr nestedInfo, IR::Opnd * envOpnd, IR::Instr * insertBeforeInstr, bool isZeroed) { Func * func = this->m_func; IR::Opnd * functionProxyOpnd; + IR::Opnd * functionInfoOpnd = nullptr; IR::Opnd * typeOpnd = nullptr; bool doCheckTypeOpnd = true; - if (m_func->IsOOPJIT() || !CONFIG_FLAG(OOPJITMissingOpts) || (*(Js::FunctionProxy **)nestedProxy)->IsDeferred()) + if (m_func->IsOOPJIT() || !CONFIG_FLAG(OOPJITMissingOpts) || (*nestedInfo)->IsDeferred()) { + functionInfoOpnd = IR::RegOpnd::New(TyMachPtr, func); + InsertMove(functionInfoOpnd, IR::MemRefOpnd::New(nestedInfo, TyMachPtr, func), insertBeforeInstr); functionProxyOpnd = IR::RegOpnd::New(TyMachPtr, func); - InsertMove(functionProxyOpnd, IR::MemRefOpnd::New(nestedProxy, TyMachPtr, func), insertBeforeInstr); + InsertMove(functionProxyOpnd, IR::IndirOpnd::New(functionInfoOpnd->AsRegOpnd(), Js::FunctionInfo::GetOffsetOfFunctionProxy(), TyMachPtr, func), insertBeforeInstr); typeOpnd = IR::RegOpnd::New(TyMachPtr, func); InsertMove(typeOpnd, IR::IndirOpnd::New(functionProxyOpnd->AsRegOpnd(), Js::FunctionProxy::GetOffsetOfDeferredPrototypeType(), TyMachPtr, func), insertBeforeInstr); } else { - Js::FunctionProxy * functionProxy = *(Js::FunctionProxy **)nestedProxy; - Js::FunctionBody * functionBody = functionProxy->GetFunctionBody(); + Js::FunctionBody * functionBody = (*nestedInfo)->GetFunctionBody(); functionProxyOpnd = CreateFunctionBodyOpnd(functionBody); - Js::ScriptFunctionType * type = functionProxy->GetDeferredPrototypeType(); + Js::ScriptFunctionType * type = functionBody->GetDeferredPrototypeType(); if (type != nullptr) { typeOpnd = IR::AddrOpnd::New(type, IR::AddrOpndKindDynamicType, func); @@ -6614,19 +6615,30 @@ Lowerer::GenerateScriptFunctionInit(IR::RegOpnd * regOpnd, IR::Opnd * vtableAddr GenerateMemInit(regOpnd, Js::ScriptFunction::GetOffsetOfConstructorCache(), LoadLibraryValueOpnd(insertBeforeInstr, LibraryValue::ValueConstructorCacheDefaultInstance), insertBeforeInstr, isZeroed); - GenerateMemInit(regOpnd, Js::ScriptFunction::GetOffsetOfFunctionInfo(), functionProxyOpnd, insertBeforeInstr, isZeroed); + if (!functionInfoOpnd) + { + if (functionProxyOpnd->IsRegOpnd()) + { + functionInfoOpnd = IR::IndirOpnd::New(functionProxyOpnd->AsRegOpnd(), Js::FunctionProxy::GetOffsetOfFunctionInfo(), TyMachReg, func); + } + else + { + functionInfoOpnd = IR::MemRefOpnd::New((BYTE*)functionProxyOpnd->AsAddrOpnd()->m_address + Js::FunctionProxy::GetOffsetOfFunctionInfo(), TyMachReg, func); + } + } + GenerateMemInit(regOpnd, Js::ScriptFunction::GetOffsetOfFunctionInfo(), functionInfoOpnd, insertBeforeInstr, isZeroed); GenerateMemInit(regOpnd, Js::ScriptFunction::GetOffsetOfEnvironment(), envOpnd, insertBeforeInstr, isZeroed); GenerateMemInitNull(regOpnd, Js::ScriptFunction::GetOffsetOfCachedScopeObj(), insertBeforeInstr, isZeroed); GenerateMemInitNull(regOpnd, Js::ScriptFunction::GetOffsetOfHasInlineCaches(), insertBeforeInstr, isZeroed); } void -Lowerer::GenerateStackScriptFunctionInit(IR::RegOpnd * regOpnd, intptr_t nestedProxy, IR::Opnd * envOpnd, IR::Instr * insertBeforeInstr) +Lowerer::GenerateStackScriptFunctionInit(IR::RegOpnd * regOpnd, Js::FunctionInfoPtrPtr nestedInfo, IR::Opnd * envOpnd, IR::Instr * insertBeforeInstr) { Func * func = this->m_func; GenerateScriptFunctionInit(regOpnd, LoadVTableValueOpnd(insertBeforeInstr, VTableValue::VtableStackScriptFunction), - nestedProxy, envOpnd, insertBeforeInstr); + nestedInfo, envOpnd, insertBeforeInstr); InsertMove(IR::IndirOpnd::New(regOpnd, Js::StackScriptFunction::GetOffsetOfBoxedScriptFunction(), TyMachPtr, func), IR::AddrOpnd::NewNull(func), insertBeforeInstr); } @@ -6679,7 +6691,7 @@ Lowerer::GenerateNewStackScFunc(IR::Instr * newScFuncInstr, IR::RegOpnd ** ppEnv IR::IntConstOpnd::New(Js::FunctionBody::Flags_StackNestedFunc, TyInt8, func, true), Js::OpCode::BrEq_A, labelNoStackFunc, newScFuncInstr); - intptr_t nestedProxy = func->GetJITFunctionBody()->GetNestedFuncRef(index); + Js::FunctionInfoPtrPtr nestedInfo = func->GetJITFunctionBody()->GetNestedFuncRef(index); IR::Instr * instrAssignDst; IR::RegOpnd * envOpnd = *ppEnvOpnd; if (!func->IsLoopBody()) @@ -6688,7 +6700,7 @@ Lowerer::GenerateNewStackScFunc(IR::Instr * newScFuncInstr, IR::RegOpnd ** ppEnv StackSym * stackSym = StackSym::New(TyMisc, func); // ScriptFunction and it's next pointer this->m_func->StackAllocate(stackSym, sizeof(Js::StackScriptFunction) + sizeof(Js::StackScriptFunction *)); - GenerateStackScriptFunctionInit(stackSym, nestedProxy); + GenerateStackScriptFunctionInit(stackSym, nestedInfo); InsertMove(IR::SymOpnd::New(stackSym, Js::ScriptFunction::GetOffsetOfEnvironment(), TyMachPtr, func), envOpnd, @@ -14967,22 +14979,65 @@ IR::Instr *Lowerer::InsertConvertFloat64ToFloat32( return instr; } -void Lowerer::InsertIncUInt8PreventOverflow( +void Lowerer::InsertDecUInt32PreventOverflow( IR::Opnd *const dst, IR::Opnd *const src, IR::Instr *const insertBeforeInstr, IR::Instr * *const onOverflowInsertBeforeInstrRef) { - LowererMD::InsertIncUInt8PreventOverflow(dst, src, insertBeforeInstr, onOverflowInsertBeforeInstrRef); -} + Assert(dst); + Assert(dst->GetType() == TyUint32); + Assert(src); + Assert(src->GetType() == TyUint32); + Assert(insertBeforeInstr); -void Lowerer::InsertDecUInt8PreventOverflow( - IR::Opnd *const dst, - IR::Opnd *const src, - IR::Instr *const insertBeforeInstr, - IR::Instr * *const onOverflowInsertBeforeInstrRef) -{ - LowererMD::InsertDecUInt8PreventOverflow(dst, src, insertBeforeInstr, onOverflowInsertBeforeInstrRef); + Func *const func = insertBeforeInstr->m_func; + + // Generate: + // subs temp, src, 1 + // bcs $overflow + // mov dst, temp + // b $continue + // $overflow: + // mov dst, 0 + // $continue: + + IR::LabelInstr *const overflowLabel = Lowerer::InsertLabel(false, insertBeforeInstr); + + // subs temp, src, 1 + IR::RegOpnd *const tempOpnd = IR::RegOpnd::New(StackSym::New(TyUint32, func), TyUint32, func); + const IR::AutoReuseOpnd autoReuseTempOpnd(tempOpnd, func); + Lowerer::InsertSub(true, tempOpnd, src, IR::IntConstOpnd::New(1, TyUint32, func, true), overflowLabel); + + // bcs $overflow + Lowerer::InsertBranch(Js::OpCode::BrLt_A, true, overflowLabel, overflowLabel); + + // mov dst, temp + Lowerer::InsertMove(dst, tempOpnd, overflowLabel); + + const bool dstEqualsSrc = dst->IsEqual(src); + if(!dstEqualsSrc || onOverflowInsertBeforeInstrRef) + { + // b $continue + // $overflow: + // mov dst, 0 + // $continue: + IR::LabelInstr *const continueLabel = Lowerer::InsertLabel(false, insertBeforeInstr); + Lowerer::InsertBranch(Js::OpCode::Br, continueLabel, overflowLabel); + if(!dstEqualsSrc) + { + Lowerer::InsertMove(dst, IR::IntConstOpnd::New(0, TyUint32, func, true), continueLabel); + } + + if(onOverflowInsertBeforeInstrRef) + { + *onOverflowInsertBeforeInstrRef = continueLabel; + } + } + else + { + // $overflow: + } } void Lowerer::InsertFloatCheckForZeroOrNanBranch( @@ -22373,18 +22428,16 @@ void Lowerer::LowerFunctionBodyCallCountChange(IR::Instr *const insertBeforeInst IR::AddrOpnd::New((Js::Var)func->GetWorkItem()->GetCallsCountAddress(), IR::AddrOpndKindDynamicMisc, func, true), insertBeforeInstr); - IR::IndirOpnd *const countOpnd = IR::IndirOpnd::New(countAddressOpnd, 0, TyUint8, func); + IR::IndirOpnd *const countOpnd = IR::IndirOpnd::New(countAddressOpnd, 0, TyUint32, func); const IR::AutoReuseOpnd autoReuseCountOpnd(countOpnd, func); if(!isSimpleJit) { - // InsertIncUint8PreventOverflow [countAddress] - InsertIncUInt8PreventOverflow(countOpnd, countOpnd, insertBeforeInstr); + InsertAdd(false, countOpnd, countOpnd, IR::IntConstOpnd::New(1, TyUint32, func), insertBeforeInstr); return; } - // InsertDecUint8PreventOverflow [countAddress] IR::Instr *onOverflowInsertBeforeInstr; - InsertDecUInt8PreventOverflow( + InsertDecUInt32PreventOverflow( countOpnd, countOpnd, insertBeforeInstr, diff --git a/lib/Backend/Lower.h b/lib/Backend/Lower.h index cd36b6e37da..47beeca796b 100644 --- a/lib/Backend/Lower.h +++ b/lib/Backend/Lower.h @@ -154,10 +154,10 @@ class Lowerer void EnsureZeroLastStackFunctionNext(); void AllocStackClosure(); IR::Instr * GenerateNewStackScFunc(IR::Instr * newScFuncInstr, IR::RegOpnd ** ppEnvOpnd); - void GenerateStackScriptFunctionInit(StackSym * stackSym, intptr_t nestedProxy); + void GenerateStackScriptFunctionInit(StackSym * stackSym, Js::FunctionInfoPtrPtr nestedInfo); void GenerateScriptFunctionInit(IR::RegOpnd * regOpnd, IR::Opnd * vtableAddressOpnd, - intptr_t nestedProxy, IR::Opnd * envOpnd, IR::Instr * insertBeforeInstr, bool isZeroed = false); - void GenerateStackScriptFunctionInit(IR::RegOpnd * regOpnd, intptr_t nestedProxy, IR::Opnd * envOpnd, IR::Instr * insertBeforeInstr); + Js::FunctionInfoPtrPtr nestedInfo, IR::Opnd * envOpnd, IR::Instr * insertBeforeInstr, bool isZeroed = false); + void GenerateStackScriptFunctionInit(IR::RegOpnd * regOpnd, Js::FunctionInfoPtrPtr nestedInfo, IR::Opnd * envOpnd, IR::Instr * insertBeforeInstr); IR::Instr * LowerProfiledStFld(IR::JitProfilingInstr * instr, Js::PropertyOperationFlags flags); IR::Instr * LowerStFld(IR::Instr * stFldInstr, IR::JnHelperMethod helperMethod, IR::JnHelperMethod polymorphicHelperMethod, bool withInlineCache, IR::LabelInstr *ppBailOutLabel = nullptr, bool isHelper = false, bool withPutFlags = false, Js::PropertyOperationFlags flags = Js::PropertyOperation_None); IR::Instr * LowerScopedStFld(IR::Instr * stFldInstr, IR::JnHelperMethod helperMethod, bool withInlineCache, @@ -347,8 +347,7 @@ class Lowerer static IR::Instr * InsertConvertFloat64ToFloat32(IR::Opnd *const dst, IR::Opnd *const src, IR::Instr *const insertBeforeInstr); public: - static void InsertIncUInt8PreventOverflow(IR::Opnd *const dst, IR::Opnd *const src, IR::Instr *const insertBeforeInstr, IR::Instr * *const onOverflowInsertBeforeInstrRef = nullptr); - static void InsertDecUInt8PreventOverflow(IR::Opnd *const dst, IR::Opnd *const src, IR::Instr *const insertBeforeInstr, IR::Instr * *const onOverflowInsertBeforeInstrRef = nullptr); + static void InsertDecUInt32PreventOverflow(IR::Opnd *const dst, IR::Opnd *const src, IR::Instr *const insertBeforeInstr, IR::Instr * *const onOverflowInsertBeforeInstrRef = nullptr); void InsertFloatCheckForZeroOrNanBranch(IR::Opnd *const src, const bool branchOnZeroOrNan, IR::LabelInstr *const target, IR::LabelInstr *const fallthroughLabel, IR::Instr *const insertBeforeInstr); public: diff --git a/lib/Backend/LowerMDShared.cpp b/lib/Backend/LowerMDShared.cpp index 54c7491ccb1..9b793d47c5c 100644 --- a/lib/Backend/LowerMDShared.cpp +++ b/lib/Backend/LowerMDShared.cpp @@ -1495,13 +1495,15 @@ LowererMD::Legalize(IR::Instr *const instr, bool fPostRegAlloc) if(instr->m_opcode == Js::OpCode::MOV) { uint src1Forms = L_Reg | L_Mem | L_Ptr; // Allow 64 bit values in x64 as well -#if _M_X64 if (dst->IsMemoryOpnd()) { +#if _M_X64 // Only allow <= 32 bit values src1Forms = L_Reg | L_Imm32; - } +#else + src1Forms = L_Reg | L_Ptr; #endif + } LegalizeOpnds( instr, L_Reg | L_Mem, @@ -4867,83 +4869,6 @@ LowererMD::GenerateStFldFromLocalInlineCache( instrStFld->InsertBefore(instr); } -void LowererMD::InsertIncUInt8PreventOverflow( - IR::Opnd *const dst, - IR::Opnd *const src, - IR::Instr *const insertBeforeInstr, - IR::Instr * *const onOverflowInsertBeforeInstrRef) -{ - Assert(dst); - Assert(dst->GetType() == TyUint8); - Assert(src); - Assert(src->GetType() == TyUint8); - Assert(insertBeforeInstr); - - Func *const func = insertBeforeInstr->m_func; - - // Generate: - // cmp src, static_cast(-1) - // jeq $done - // dst = add src, 1 - // $noOverflow: - - IR::LabelInstr *const noOverflowLabel = Lowerer::InsertLabel(false, insertBeforeInstr); - - Lowerer::InsertCompareBranch(src, IR::IntConstOpnd::New(static_cast(-1), TyUint8, func, true), - Js::OpCode::BrEq_A, noOverflowLabel, noOverflowLabel); - - // inc dst, src - Lowerer::InsertAdd(true, dst, src, IR::IntConstOpnd::New(1, TyUint8, func, true), noOverflowLabel); - - // $done: - - if(onOverflowInsertBeforeInstrRef) - { - *onOverflowInsertBeforeInstrRef = noOverflowLabel; - } -} - -void LowererMD::InsertDecUInt8PreventOverflow( - IR::Opnd *const dst, - IR::Opnd *const src, - IR::Instr *const insertBeforeInstr, - IR::Instr * *const onOverflowInsertBeforeInstrRef) -{ - Assert(dst); - Assert(dst->GetType() == TyUint8); - Assert(src); - Assert(src->GetType() == TyUint8); - Assert(insertBeforeInstr); - - Func *const func = insertBeforeInstr->m_func; - - // Generate: - // sub dst, src, 1 - // jnc $noOverflow - // mov dst, 0 - // $noOverflow: - - IR::LabelInstr *const noOverflowLabel = Lowerer::InsertLabel(false, insertBeforeInstr); - - // sub dst, src, 1 - IR::Instr *const instr = IR::Instr::New(Js::OpCode::SUB, dst, src, IR::IntConstOpnd::New(1, TyUint8, func, true), func); - noOverflowLabel->InsertBefore(instr); - MakeDstEquSrc1(instr); - - // jnc $noOverflow - Lowerer::InsertBranch(Js::OpCode::BrGe_A, true, noOverflowLabel, noOverflowLabel); - - // mov dst, 0 - Lowerer::InsertMove(dst, IR::IntConstOpnd::New(0, TyUint8, func, true), noOverflowLabel); - - // $noOverflow: - - if(onOverflowInsertBeforeInstrRef) - { - *onOverflowInsertBeforeInstrRef = noOverflowLabel; - } -} - //---------------------------------------------------------------------------- // // LowererMD::GenerateFastScopedLdFld diff --git a/lib/Backend/LowerMDShared.h b/lib/Backend/LowerMDShared.h index 1a6885a20eb..65e3b2bbbdd 100644 --- a/lib/Backend/LowerMDShared.h +++ b/lib/Backend/LowerMDShared.h @@ -323,8 +323,6 @@ class LowererMD } public: - static void InsertIncUInt8PreventOverflow(IR::Opnd *const dst, IR::Opnd *const src, IR::Instr *const insertBeforeInstr, IR::Instr * *const onOverflowInsertBeforeInstrRef = nullptr); - static void InsertDecUInt8PreventOverflow(IR::Opnd *const dst, IR::Opnd *const src, IR::Instr *const insertBeforeInstr, IR::Instr * *const onOverflowInsertBeforeInstrRef = nullptr); #ifdef ENABLE_SIMDJS void Simd128InitOpcodeMap(); diff --git a/lib/Backend/NativeCodeGenerator.cpp b/lib/Backend/NativeCodeGenerator.cpp index f1ee9217f26..1e0a62128c8 100644 --- a/lib/Backend/NativeCodeGenerator.cpp +++ b/lib/Backend/NativeCodeGenerator.cpp @@ -2688,7 +2688,7 @@ NativeCodeGenerator::GatherCodeGenData( if (!isJitTimeDataComputed) { - Js::FunctionCodeGenJitTimeData *inlineeJitTimeData = jitTimeData->AddInlinee(recycler, profiledCallSiteId, inlineeFunctionBodyArray[id], isInlined); + Js::FunctionCodeGenJitTimeData *inlineeJitTimeData = jitTimeData->AddInlinee(recycler, profiledCallSiteId, inlineeFunctionBodyArray[id]->GetFunctionInfo(), isInlined); if (isInlined) { GatherCodeGenData( @@ -2984,7 +2984,7 @@ NativeCodeGenerator::GatherCodeGenData(Js::FunctionBody *const topFunctionBody, const auto recycler = scriptContext->GetRecycler(); { - const auto jitTimeData = RecyclerNew(recycler, Js::FunctionCodeGenJitTimeData, functionBody, entryPoint); + const auto jitTimeData = RecyclerNew(recycler, Js::FunctionCodeGenJitTimeData, functionBody->GetFunctionInfo(), entryPoint); InliningDecider inliningDecider(functionBody, workItem->Type() == JsLoopBodyWorkItemType, functionBody->IsInDebugMode(), workItem->GetJitMode()); BEGIN_TEMP_ALLOCATOR(gatherCodeGenDataAllocator, scriptContext, _u("GatherCodeGenData")); @@ -3643,7 +3643,7 @@ bool NativeCodeGenerator::TryAggressiveInlining(Js::FunctionBody *const topFunct } else { - inlinee = inliningDecider.Inline(inlineeFunctionBody, inlinee, isConstructorCall, false, inliningDecider.GetConstantArgInfo(inlineeFunctionBody, profiledCallSiteId), profiledCallSiteId, inlineeFunctionBody == inlinee ? recursiveInlineDepth + 1 : 0, true); + inlinee = inliningDecider.Inline(inlineeFunctionBody, inlinee, isConstructorCall, false, inliningDecider.GetConstantArgInfo(inlineeFunctionBody, profiledCallSiteId), profiledCallSiteId, inlineeFunctionBody->GetFunctionInfo() == inlinee ? recursiveInlineDepth + 1 : 0, true); if (!inlinee) { return false; diff --git a/lib/Backend/Opnd.cpp b/lib/Backend/Opnd.cpp index 351b81c3ad4..fbc76654143 100644 --- a/lib/Backend/Opnd.cpp +++ b/lib/Backend/Opnd.cpp @@ -3468,12 +3468,12 @@ Opnd::GetAddrDescription(__out_ecount(count) char16 *const description, const si WriteToBuffer(&buffer, &n, _u(" (&RecyclerAllocatorFreeList)")); break; - case IR::AddrOpndKindDynamicFunctionBody: + case IR::AddrOpndKindDynamicFunctionInfo: DumpAddress(address, printToConsole, skipMaskedAddress); if (func->IsOOPJIT()) { // TODO: OOP JIT, dump more info - WriteToBuffer(&buffer, &n, _u(" (FunctionBody)")); + WriteToBuffer(&buffer, &n, _u(" (FunctionInfo)")); } else { @@ -3481,6 +3481,11 @@ Opnd::GetAddrDescription(__out_ecount(count) char16 *const description, const si } break; + case IR::AddrOpndKindDynamicFunctionBody: + DumpAddress(address, printToConsole, skipMaskedAddress); + DumpFunctionInfo(&buffer, &n, ((Js::FunctionBody *)address)->GetFunctionInfo(), printToConsole); + break; + case IR::AddrOpndKindDynamicFunctionBodyWeakRef: DumpAddress(address, printToConsole, skipMaskedAddress); @@ -3491,7 +3496,7 @@ Opnd::GetAddrDescription(__out_ecount(count) char16 *const description, const si } else { - DumpFunctionInfo(&buffer, &n, ((RecyclerWeakReference *)address)->FastGet(), printToConsole, _u("FunctionBodyWeakRef")); + DumpFunctionInfo(&buffer, &n, ((RecyclerWeakReference *)address)->FastGet()->GetFunctionInfo(), printToConsole, _u("FunctionBodyWeakRef")); } break; diff --git a/lib/Backend/Opnd.h b/lib/Backend/Opnd.h index 9882045d246..5940a0b35dd 100644 --- a/lib/Backend/Opnd.h +++ b/lib/Backend/Opnd.h @@ -61,6 +61,7 @@ enum AddrOpndKind : BYTE { AddrOpndKindDynamicMisc, // no profiling in dynamic JIT AddrOpndKindDynamicFunctionBody, + AddrOpndKindDynamicFunctionInfo, // use LoadRuntimeInlineCacheOpnd for runtime caches, // in relocatable JIT polymorphic inline caches aren't generated and can // be referenced directly (for now) diff --git a/lib/Backend/arm/LowerMD.cpp b/lib/Backend/arm/LowerMD.cpp index 4e811ab54ba..af089f6f635 100644 --- a/lib/Backend/arm/LowerMD.cpp +++ b/lib/Backend/arm/LowerMD.cpp @@ -452,135 +452,6 @@ LowererMD::GenerateFunctionObjectTest(IR::Instr * callInstr, IR::RegOpnd *funct } } -void LowererMD::InsertIncUInt8PreventOverflow( - IR::Opnd *const dst, - IR::Opnd *const src, - IR::Instr *const insertBeforeInstr, - IR::Instr * *const onOverflowInsertBeforeInstrRef) -{ - Assert(dst); - Assert(dst->GetType() == TyUint8); - Assert(src); - Assert(src->GetType() == TyUint8); - Assert(insertBeforeInstr); - - Func *const func = insertBeforeInstr->m_func; - - // Generate: - // add temp, src, 1 - // tst temp, static_cast(-1) - // beq $overflow - // mov dst, temp - // b $continue - // $overflow: - // mov dst, static_cast(-1) - // $continue: - - IR::LabelInstr *const overflowLabel = Lowerer::InsertLabel(false, insertBeforeInstr); - - // add temp, src, 1 - IR::RegOpnd *const tempOpnd = IR::RegOpnd::New(StackSym::New(TyUint8, func), TyUint8, func); - const IR::AutoReuseOpnd autoReuseTempOpnd(tempOpnd, func); - Lowerer::InsertAdd(false, tempOpnd, src, IR::IntConstOpnd::New(1, TyUint8, func, true), overflowLabel); - - // tst temp, 0xff - // beq $overflow - Lowerer::InsertTestBranch( - tempOpnd, - IR::IntConstOpnd::New(static_cast(-1), TyUint8, func, true), - Js::OpCode::BrEq_A, - overflowLabel, - overflowLabel); - - // mov dst, temp - Lowerer::InsertMove(dst, tempOpnd, overflowLabel); - - const bool dstEqualsSrc = dst->IsEqual(src); - if(!dstEqualsSrc || onOverflowInsertBeforeInstrRef) - { - // b $continue - // $overflow: - // mov dst, static_cast(-1) - // $continue: - IR::LabelInstr *const continueLabel = Lowerer::InsertLabel(false, insertBeforeInstr); - Lowerer::InsertBranch(Js::OpCode::Br, continueLabel, overflowLabel); - if(!dstEqualsSrc) - { - Lowerer::InsertMove(dst, IR::IntConstOpnd::New(static_cast(-1), TyUint8, func, true), continueLabel); - } - - if(onOverflowInsertBeforeInstrRef) - { - *onOverflowInsertBeforeInstrRef = continueLabel; - } - } - else - { - // $overflow: - } -} - -void LowererMD::InsertDecUInt8PreventOverflow( - IR::Opnd *const dst, - IR::Opnd *const src, - IR::Instr *const insertBeforeInstr, - IR::Instr * *const onOverflowInsertBeforeInstrRef) -{ - Assert(dst); - Assert(dst->GetType() == TyUint8); - Assert(src); - Assert(src->GetType() == TyUint8); - Assert(insertBeforeInstr); - - Func *const func = insertBeforeInstr->m_func; - - // Generate: - // subs temp, src, 1 - // bcs $overflow - // mov dst, temp - // b $continue - // $overflow: - // mov dst, 0 - // $continue: - - IR::LabelInstr *const overflowLabel = Lowerer::InsertLabel(false, insertBeforeInstr); - - // subs temp, src, 1 - IR::RegOpnd *const tempOpnd = IR::RegOpnd::New(StackSym::New(TyUint8, func), TyUint8, func); - const IR::AutoReuseOpnd autoReuseTempOpnd(tempOpnd, func); - Lowerer::InsertSub(true, tempOpnd, src, IR::IntConstOpnd::New(1, TyUint8, func, true), overflowLabel); - - // bcs $overflow - Lowerer::InsertBranch(Js::OpCode::BrLt_A, true, overflowLabel, overflowLabel); - - // mov dst, temp - Lowerer::InsertMove(dst, tempOpnd, overflowLabel); - - const bool dstEqualsSrc = dst->IsEqual(src); - if(!dstEqualsSrc || onOverflowInsertBeforeInstrRef) - { - // b $continue - // $overflow: - // mov dst, 0 - // $continue: - IR::LabelInstr *const continueLabel = Lowerer::InsertLabel(false, insertBeforeInstr); - Lowerer::InsertBranch(Js::OpCode::Br, continueLabel, overflowLabel); - if(!dstEqualsSrc) - { - Lowerer::InsertMove(dst, IR::IntConstOpnd::New(0, TyUint8, func, true), continueLabel); - } - - if(onOverflowInsertBeforeInstrRef) - { - *onOverflowInsertBeforeInstrRef = continueLabel; - } - } - else - { - // $overflow: - } -} - IR::Instr* LowererMD::GeneratePreCall(IR::Instr * callInstr, IR::Opnd *functionObjOpnd) { diff --git a/lib/Backend/arm/LowerMD.h b/lib/Backend/arm/LowerMD.h index ef534e92d59..0a1c94e0f13 100644 --- a/lib/Backend/arm/LowerMD.h +++ b/lib/Backend/arm/LowerMD.h @@ -277,10 +277,6 @@ class LowererMD void LowerInlineSpreadArgOutLoop(IR::Instr *callInstr, IR::RegOpnd *indexOpnd, IR::RegOpnd *arrayElementsStartOpnd); -public: - static void InsertIncUInt8PreventOverflow(IR::Opnd *const dst, IR::Opnd *const src, IR::Instr *const insertBeforeInstr, IR::Instr * *const onOverflowInsertBeforeInstrRef = nullptr); - static void InsertDecUInt8PreventOverflow(IR::Opnd *const dst, IR::Opnd *const src, IR::Instr *const insertBeforeInstr, IR::Instr * *const onOverflowInsertBeforeInstrRef = nullptr); - private: void GenerateFlagInlineCacheCheckForGetterSetter( IR::Instr * insertBeforeInstr, diff --git a/lib/Backend/arm64/LowerMD.h b/lib/Backend/arm64/LowerMD.h index a7b653eb668..1036dcd5afd 100644 --- a/lib/Backend/arm64/LowerMD.h +++ b/lib/Backend/arm64/LowerMD.h @@ -269,8 +269,4 @@ class LowererMD void ResetHelperArgsCount() { __debugbreak(); } void LowerInlineSpreadArgOutLoop(IR::Instr *callInstr, IR::RegOpnd *indexOpnd, IR::RegOpnd *arrayElementsStartOpnd) { __debugbreak(); } - -public: - static void InsertIncUInt8PreventOverflow(IR::Opnd *const dst, IR::Opnd *const src, IR::Instr *const insertBeforeInstr, IR::Instr * *const onOverflowInsertBeforeInstrRef = nullptr) { __debugbreak(); } - static void InsertDecUInt8PreventOverflow(IR::Opnd *const dst, IR::Opnd *const src, IR::Instr *const insertBeforeInstr, IR::Instr * *const onOverflowInsertBeforeInstrRef = nullptr) { __debugbreak(); } }; diff --git a/lib/Common/ConfigFlagsList.h b/lib/Common/ConfigFlagsList.h index 201cd215c42..faaa75f4858 100644 --- a/lib/Common/ConfigFlagsList.h +++ b/lib/Common/ConfigFlagsList.h @@ -10,6 +10,7 @@ PHASE(All) PHASE(Parse) PHASE(RegexCompile) PHASE(DeferParse) + PHASE(Redeferral) PHASE(DeferEventHandlers) PHASE(FunctionSourceInfoParse) PHASE(StringTemplateParse) diff --git a/lib/Common/DataStructures/BaseDictionary.h b/lib/Common/DataStructures/BaseDictionary.h index 78b4259414d..7336cb158ab 100644 --- a/lib/Common/DataStructures/BaseDictionary.h +++ b/lib/Common/DataStructures/BaseDictionary.h @@ -724,8 +724,10 @@ namespace JsUtil { if(buckets[i] != -1) { - for (int currentIndex = buckets[i] ; currentIndex != -1 ; currentIndex = entries[currentIndex].next) + int nextIndex = -1; + for (int currentIndex = buckets[i] ; currentIndex != -1 ; currentIndex = nextIndex) { + nextIndex = entries[currentIndex].next; if (fn(entries[currentIndex])) { return true; // fn condition succeeds diff --git a/lib/Common/Memory/CustomHeap.cpp b/lib/Common/Memory/CustomHeap.cpp index 4dda97cc104..64a8d9b0ed6 100644 --- a/lib/Common/Memory/CustomHeap.cpp +++ b/lib/Common/Memory/CustomHeap.cpp @@ -235,6 +235,10 @@ Allocation* Heap::Alloc(size_t bytes, ushort pdataCount, ushort xdataSize, bool { page = AllocNewPage(bucket, canAllocInPreReservedHeapPageSegment, isAnyJittedCode, isAllJITCodeInPreReservedRegion); } + else if (!canAllocInPreReservedHeapPageSegment && isAnyJittedCode) + { + *isAllJITCodeInPreReservedRegion = false; + } // Out of memory if (page == nullptr) diff --git a/lib/Parser/Parse.cpp b/lib/Parser/Parse.cpp index 811fc7ceb42..e12fb404ac9 100644 --- a/lib/Parser/Parse.cpp +++ b/lib/Parser/Parse.cpp @@ -4883,7 +4883,8 @@ bool Parser::ParseFncDeclHelper(ParseNodePtr pnodeFnc, LPCOLESTR pNameHint, usho BOOL isDeferredFnc = IsDeferredFnc(); AnalysisAssert(isDeferredFnc || pnodeFnc); isTopLevelDeferredFunc = - (!isDeferredFnc + (!fLambda + && pnodeFnc && DeferredParse(pnodeFnc->sxFnc.functionId) && (!pnodeFnc->sxFnc.IsNested() || CONFIG_FLAG(DeferNested)) // Don't defer if this is a function expression not contained in a statement or other expression. @@ -4894,6 +4895,12 @@ bool Parser::ParseFncDeclHelper(ParseNodePtr pnodeFnc, LPCOLESTR pNameHint, usho && !fModule ); + if (pnodeFnc) + { + pnodeFnc->sxFnc.SetCanBeDeferred(isTopLevelDeferredFunc && PnFnc::CanBeRedeferred(pnodeFnc->sxFnc.fncFlags)); + } + isTopLevelDeferredFunc = isTopLevelDeferredFunc && !isDeferredFnc; + if (!fLambda && !isDeferredFnc && !isLikelyIIFE && @@ -6394,6 +6401,11 @@ ParseNodePtr Parser::GenerateEmptyConstructor(bool extends) pnodeFnc->sxFnc.deferredStub = nullptr; pnodeFnc->sxFnc.funcInfo = nullptr; + // In order to (re-)defer the default constructor, we need to, for instance, track + // deferred class expression the way we track function expression, since we lose the part of the source + // that tells us which we have. + pnodeFnc->sxFnc.canBeDeferred = false; + #ifdef DBG pnodeFnc->sxFnc.deferredParseNextFunctionId = *(this->m_nextFunctionId); #endif @@ -10344,6 +10356,7 @@ void Parser::ParseStmtList(ParseNodePtr *ppnodeList, ParseNodePtr **pppnodeLast, // i.e. smEnvironment == SM_OnFunctionCode Assert(m_currentNodeFunc != nullptr); m_currentNodeFunc->sxFnc.SetAsmjsMode(); + m_currentNodeFunc->sxFnc.SetCanBeDeferred(false); m_InAsmMode = true; CHAKRATEL_LANGSTATS_INC_LANGFEATURECOUNT(AsmJSFunctionCount, m_scriptContext); @@ -10598,7 +10611,7 @@ void Parser::InitPids() wellKnownPropertyPids._star = m_phtbl->PidHashNameLen(_u("*"), sizeof("*") - 1); } -void Parser::RestoreScopeInfo(Js::FunctionBody* functionBody) +void Parser::RestoreScopeInfo(Js::ParseableFunctionInfo* functionBody) { if (!functionBody) { @@ -10654,7 +10667,7 @@ void Parser::RestoreScopeInfo(Js::FunctionBody* functionBody) scopeInfo->GetScopeInfo(this, nullptr, nullptr, scope); } -void Parser::FinishScopeInfo(Js::FunctionBody *functionBody) +void Parser::FinishScopeInfo(Js::ParseableFunctionInfo *functionBody) { if (!functionBody) { diff --git a/lib/Parser/Parse.h b/lib/Parser/Parse.h index 7e6af255704..2c357c4daf4 100644 --- a/lib/Parser/Parse.h +++ b/lib/Parser/Parse.h @@ -967,8 +967,8 @@ class Parser void RemovePrevPidRef(IdentPtr pid, PidRefStack *lastRef); void SetPidRefsInScopeDynamic(IdentPtr pid, int blockId); - void RestoreScopeInfo(Js::FunctionBody* functionBody); - void FinishScopeInfo(Js::FunctionBody* functionBody); + void RestoreScopeInfo(Js::ParseableFunctionInfo* functionBody); + void FinishScopeInfo(Js::ParseableFunctionInfo* functionBody); BOOL PnodeLabelNoAST(IdentToken* pToken, LabelId* pLabelIdList); LabelId* CreateLabelId(IdentToken* pToken); diff --git a/lib/Parser/ptree.h b/lib/Parser/ptree.h index 723bc1f2e65..a4d39a45bfe 100644 --- a/lib/Parser/ptree.h +++ b/lib/Parser/ptree.h @@ -246,9 +246,12 @@ struct PnFnc #endif RestorePoint *pRestorePoint; DeferredFunctionStub *deferredStub; + bool canBeDeferred; static const int32 MaxStackClosureAST = 800000; + static bool CanBeRedeferred(unsigned int flags) { return !(flags & (kFunctionIsGenerator | kFunctionIsAsync)); } + private: void SetFlags(uint flags, bool set) { @@ -316,6 +319,7 @@ struct PnFnc void SetUsesArguments(bool set = true) { SetFlags(kFunctionUsesArguments, set); } void SetIsDefaultModuleExport(bool set = true) { SetFlags(kFunctionIsDefaultModuleExport, set); } void SetNestedFuncEscapes(bool set = true) { nestedFuncEscapes = set; } + void SetCanBeDeferred(bool set = true) { canBeDeferred = set; } bool CallsEval() const { return HasFlags(kFunctionCallsEval); } bool ChildCallsEval() const { return HasFlags(kFunctionChildCallsEval); } @@ -353,6 +357,7 @@ struct PnFnc bool UsesArguments() const { return HasFlags(kFunctionUsesArguments); } bool IsDefaultModuleExport() const { return HasFlags(kFunctionIsDefaultModuleExport); } bool NestedFuncEscapes() const { return nestedFuncEscapes; } + bool CanBeDeferred() const { return canBeDeferred; } size_t LengthInBytes() { diff --git a/lib/Runtime/Base/FunctionBody.cpp b/lib/Runtime/Base/FunctionBody.cpp index 241064eb74a..5b74e9cc8b2 100644 --- a/lib/Runtime/Base/FunctionBody.cpp +++ b/lib/Runtime/Base/FunctionBody.cpp @@ -68,13 +68,11 @@ namespace Js #endif // FunctionProxy methods - FunctionProxy::FunctionProxy(JavascriptMethod entryPoint, Attributes attributes, LocalFunctionId functionId, ScriptContext* scriptContext, Utf8SourceInfo* utf8SourceInfo, uint functionNumber): - FunctionInfo(entryPoint, attributes, functionId, this), + FunctionProxy::FunctionProxy(ScriptContext* scriptContext, Utf8SourceInfo* utf8SourceInfo, uint functionNumber): m_isTopLevel(false), m_isPublicLibraryCode(false), m_scriptContext(scriptContext), m_utf8SourceInfo(utf8SourceInfo), - m_referenceInParentFunction(nullptr), m_functionNumber(functionNumber), m_defaultEntryPointInfo(nullptr) { @@ -334,16 +332,6 @@ namespace Js void FunctionBody::CopySourceInfo(ParseableFunctionInfo* originalFunctionInfo) { - this->m_sourceIndex = originalFunctionInfo->GetSourceIndex(); - this->m_cchStartOffset = originalFunctionInfo->StartInDocument(); - this->m_cchLength = originalFunctionInfo->LengthInChars(); - this->m_lineNumber = originalFunctionInfo->GetRelativeLineNumber(); - this->m_columnNumber = originalFunctionInfo->GetRelativeColumnNumber(); - this->m_isEval = originalFunctionInfo->IsEval(); - this->m_isDynamicFunction = originalFunctionInfo->IsDynamicFunction(); - this->m_cbStartOffset = originalFunctionInfo->StartOffset(); - this->m_cbLength = originalFunctionInfo->LengthInBytes(); - this->FinishSourceInfo(); } @@ -397,7 +385,7 @@ namespace Js } FunctionBody * FunctionBody::NewFromRecycler(ScriptContext * scriptContext, const char16 * displayName, uint displayNameLength, uint displayShortNameOffset, uint nestedCount, - Utf8SourceInfo* sourceInfo, uint uScriptId, Js::LocalFunctionId functionId, Js::PropertyRecordList* boundPropertyRecords, Attributes attributes, FunctionBodyFlags flags + Utf8SourceInfo* sourceInfo, uint uScriptId, Js::LocalFunctionId functionId, Js::PropertyRecordList* boundPropertyRecords, FunctionInfo::Attributes attributes, FunctionBodyFlags flags #ifdef PERF_COUNTERS , bool isDeserializedFunction #endif @@ -412,7 +400,7 @@ namespace Js } FunctionBody * FunctionBody::NewFromRecycler(ScriptContext * scriptContext, const char16 * displayName, uint displayNameLength, uint displayShortNameOffset, uint nestedCount, - Utf8SourceInfo* sourceInfo, uint uFunctionNumber, uint uScriptId, Js::LocalFunctionId functionId, Js::PropertyRecordList* boundPropertyRecords, Attributes attributes, FunctionBodyFlags flags + Utf8SourceInfo* sourceInfo, uint uFunctionNumber, uint uScriptId, Js::LocalFunctionId functionId, Js::PropertyRecordList* boundPropertyRecords, FunctionInfo::Attributes attributes, FunctionBodyFlags flags #ifdef PERF_COUNTERS , bool isDeserializedFunction #endif @@ -425,15 +413,34 @@ namespace Js #endif } + FunctionBody * + FunctionBody::NewFromParseableFunctionInfo(ParseableFunctionInfo * parseableFunctionInfo) + { + ScriptContext * scriptContext = parseableFunctionInfo->GetScriptContext(); + uint nestedCount = parseableFunctionInfo->GetNestedCount(); + + FunctionBody * functionBody = RecyclerNewWithBarrierFinalized(scriptContext->GetRecycler(), + FunctionBody, + parseableFunctionInfo); + + // Initialize nested function array, update back pointers + for (uint i = 0; i < nestedCount; i++) + { + FunctionInfo * nestedInfo = parseableFunctionInfo->GetNestedFunc(i); + functionBody->SetNestedFunc(nestedInfo, i, 0); + } + + return functionBody; + } FunctionBody::FunctionBody(ScriptContext* scriptContext, const char16* displayName, uint displayNameLength, uint displayShortNameOffset, uint nestedCount, Utf8SourceInfo* utf8SourceInfo, uint uFunctionNumber, uint uScriptId, - Js::LocalFunctionId functionId, Js::PropertyRecordList* boundPropertyRecords, Attributes attributes, FunctionBodyFlags flags + Js::LocalFunctionId functionId, Js::PropertyRecordList* boundPropertyRecords, FunctionInfo::Attributes attributes, FunctionBodyFlags flags #ifdef PERF_COUNTERS , bool isDeserializedFunction #endif ) : - ParseableFunctionInfo(scriptContext->CurrentThunk, nestedCount, functionId, utf8SourceInfo, scriptContext, uFunctionNumber, displayName, displayNameLength, displayShortNameOffset, attributes, boundPropertyRecords), + ParseableFunctionInfo(scriptContext->CurrentThunk, nestedCount, functionId, utf8SourceInfo, scriptContext, uFunctionNumber, displayName, displayNameLength, displayShortNameOffset, attributes, boundPropertyRecords, flags), counters(this), m_uScriptId(uScriptId), cleanedUp(false), @@ -456,10 +463,10 @@ namespace Js m_argUsedForBranch(0), m_envDepth((uint16)-1), interpretedCount(0), + lastInterpretedCount(0), loopInterpreterLimit(CONFIG_FLAG(LoopInterpretCount)), savedPolymorphicCacheState(0), debuggerScopeIndex(0), - flags(flags), m_hasFinally(false), #if ENABLE_PROFILE_INFO dynamicProfileInfo(nullptr), @@ -570,6 +577,291 @@ namespace Js InitDisableInlineSpread(); } + FunctionBody::FunctionBody(ParseableFunctionInfo * proxy) : + ParseableFunctionInfo(proxy), + counters(this), + m_uScriptId(proxy->GetUtf8SourceInfo()->GetSrcInfo()->sourceContextInfo->sourceContextId), + cleanedUp(false), + sourceInfoCleanedUp(false), + profiledLdElemCount(0), + profiledStElemCount(0), + profiledCallSiteCount(0), + profiledArrayCallSiteCount(0), + profiledDivOrRemCount(0), + profiledSwitchCount(0), + profiledReturnTypeCount(0), + profiledSlotCount(0), + m_isFuncRegistered(false), + m_isFuncRegisteredToDiag(false), + m_hasBailoutInstrInJittedCode(false), + m_depth(0), + inlineDepth(0), + m_pendingLoopHeaderRelease(false), + hasCachedScopePropIds(false), + m_argUsedForBranch(0), + m_envDepth((uint16)-1), + interpretedCount(0), + lastInterpretedCount(0), + loopInterpreterLimit(CONFIG_FLAG(LoopInterpretCount)), + savedPolymorphicCacheState(0), + debuggerScopeIndex(0), + m_hasFinally(false), +#if ENABLE_PROFILE_INFO + dynamicProfileInfo(nullptr), +#endif + savedInlinerVersion(0), +#if ENABLE_NATIVE_CODEGEN + savedImplicitCallsFlags(ImplicitCall_HasNoInfo), +#endif + hasExecutionDynamicProfileInfo(false), + m_hasAllNonLocalReferenced(false), + m_hasSetIsObject(false), + m_hasFunExprNameReference(false), + m_CallsEval(false), + m_ChildCallsEval(false), + m_hasReferenceableBuiltInArguments(false), + m_isParamAndBodyScopeMerged(true), + m_firstFunctionObject(true), + m_inlineCachesOnFunctionObject(false), + m_hasDoneAllNonLocalReferenced(false), + m_hasFunctionCompiledSent(false), + byteCodeCache(nullptr), + m_hasLocalClosureRegister(false), + m_hasParamClosureRegister(false), + m_hasLocalFrameDisplayRegister(false), + m_hasEnvRegister(false), + m_hasThisRegisterForEventHandler(false), + m_hasFirstInnerScopeRegister(false), + m_hasFuncExprScopeRegister(false), + m_hasFirstTmpRegister(false), + m_tag(TRUE), + m_nativeEntryPointUsed(FALSE), + bailOnMisingProfileCount(0), + bailOnMisingProfileRejitCount(0), + byteCodeBlock(nullptr), + entryPoints(nullptr), + m_constTable(nullptr), + inlineCaches(nullptr), + cacheIdToPropertyIdMap(nullptr), + executionMode(ExecutionMode::Interpreter), + interpreterLimit(0), + autoProfilingInterpreter0Limit(0), + profilingInterpreter0Limit(0), + autoProfilingInterpreter1Limit(0), + simpleJitLimit(0), + profilingInterpreter1Limit(0), + fullJitThreshold(0), + fullJitRequeueThreshold(0), + committedProfiledIterations(0), + wasCalledFromLoop(false), + hasScopeObject(false), + hasNestedLoop(false), + recentlyBailedOutOfJittedLoopBody(false), + m_isAsmJsScheduledForFullJIT(false), + m_asmJsTotalLoopCount(0) + // + // Even if the function does not require any locals, we must always have "R0" to propagate + // a return value. By enabling this here, we avoid unnecessary conditionals during execution. + // +#ifdef IR_VIEWER + ,m_isIRDumpEnabled(false) + ,m_irDumpBaseObject(nullptr) +#endif /* IR_VIEWER */ + , m_isFromNativeCodeModule(false) + , hasHotLoop(false) + , m_isPartialDeserializedFunction(false) +#if DBG + , m_isSerialized(false) +#endif +#ifdef PERF_COUNTERS + , m_isDeserializedFunction(false) +#endif +#if DBG + , m_DEBUG_executionCount(0) + , m_nativeEntryPointIsInterpreterThunk(false) + , m_canDoStackNestedFunc(false) + , m_inlineCacheTypes(nullptr) + , m_iProfileSession(-1) + , initializedExecutionModeAndLimits(false) +#endif +#if ENABLE_DEBUG_CONFIG_OPTIONS + , regAllocLoadCount(0) + , regAllocStoreCount(0) + , callCountStats(0) +#endif + { + ScriptContext * scriptContext = proxy->GetScriptContext(); + + SetCountField(CounterFields::ConstantCount, 1); + + proxy->UpdateFunctionBodyImpl(this); + + void* validationCookie = nullptr; + +#if ENABLE_NATIVE_CODEGEN + validationCookie = (void*)scriptContext->GetNativeCodeGenerator(); +#endif + + this->m_defaultEntryPointInfo = RecyclerNewFinalized(scriptContext->GetRecycler(), + FunctionEntryPointInfo, this, scriptContext->CurrentThunk, scriptContext->GetThreadContext(), validationCookie); + + this->SetDefaultFunctionEntryPointInfo((FunctionEntryPointInfo*) this->GetDefaultEntryPointInfo(), DefaultEntryThunk); + this->m_hasBeenParsed = true; + + Assert(!proxy->GetUtf8SourceInfo() || m_uScriptId == proxy->GetUtf8SourceInfo()->GetSrcInfo()->sourceContextInfo->sourceContextId); + + // Sync entryPoints changes to etw rundown lock + CriticalSection* syncObj = scriptContext->GetThreadContext()->GetEtwRundownCriticalSection(); + this->entryPoints = RecyclerNew(scriptContext->GetRecycler(), FunctionEntryPointList, scriptContext->GetRecycler(), syncObj); + + this->AddEntryPointToEntryPointList(this->GetDefaultFunctionEntryPointInfo()); + + Assert(this->GetDefaultEntryPointInfo()->jsMethod != nullptr); + + InitDisableInlineApply(); + InitDisableInlineSpread(); + } + + bool FunctionBody::InterpretedSinceCallCountCollection() const + { + return this->interpretedCount != this->lastInterpretedCount; + } + + void FunctionBody::CollectInterpretedCounts() + { + this->lastInterpretedCount = this->interpretedCount; + } + + void FunctionBody::IncrInactiveCount(uint increment) + { + this->inactiveCount = UInt32Math::Add(this->inactiveCount, increment); + } + + bool FunctionBody::IsActiveFunction(ActiveFunctionSet * pActiveFuncs) const + { + return !!pActiveFuncs->Test(this->GetFunctionNumber()); + } + + bool FunctionBody::TestAndUpdateActiveFunctions(ActiveFunctionSet * pActiveFuncs) const + { + return !!pActiveFuncs->TestAndSet(this->GetFunctionNumber()); + } + + void FunctionBody::UpdateActiveFunctionSet(ActiveFunctionSet *pActiveFuncs) const + { + if (this->TestAndUpdateActiveFunctions(pActiveFuncs)) + { + return; + } + FunctionCodeGenRuntimeData **data = this->GetCodeGenRuntimeData(); + if (data == nullptr) + { + return; + } + for (uint i = 0; i < this->GetProfiledCallSiteCount(); i++) + { + for (FunctionCodeGenRuntimeData *inlineeData = data[i]; inlineeData; inlineeData = inlineeData->GetNext()) + { + inlineeData->GetFunctionBody()->UpdateActiveFunctionSet(pActiveFuncs); + } + } + } + + bool FunctionBody::DoRedeferFunction(uint inactiveThreshold) const + { + bool isJitCandidate = false; + + if (!(this->GetFunctionInfo()->GetFunctionProxy() == this && + this->CanBeDeferred() && + this->GetByteCode() && + this->GetCanDefer())) + { + return false; + } + + if (!PHASE_FORCE(Js::RedeferralPhase, this) && !PHASE_STRESS(Js::RedeferralPhase, this)) + { + uint tmpThreshold; + auto fn = [&](){ tmpThreshold = 0xFFFFFFFF; }; + tmpThreshold = UInt32Math::Mul(inactiveThreshold, this->GetCompileCount(), fn); + if (this->GetInactiveCount() < tmpThreshold) + { + return false; + } + } + + // Make sure the function won't be jitted + bool isJitModeFunction = !this->IsInterpreterExecutionMode(); + MapEntryPoints([&](int index, FunctionEntryPointInfo *entryPointInfo) + { + if ((entryPointInfo->IsCodeGenPending() && isJitModeFunction) || entryPointInfo->IsCodeGenQueued() || entryPointInfo->IsCodeGenRecorded() || (entryPointInfo->IsCodeGenDone() && !entryPointInfo->nativeEntryPointProcessed)) + { + isJitCandidate = true; + } + }); + if (isJitCandidate) + { + return false; + } + + return true; + } + + void FunctionBody::RedeferFunction() + { + Assert(this->CanBeDeferred()); + +#if DBG + if (PHASE_STATS(RedeferralPhase, this)) + { + ThreadContext * threadContext = this->GetScriptContext()->GetThreadContext(); + threadContext->redeferredFunctions++; + threadContext->recoveredBytes += sizeof(*this) + this->GetInlineCacheCount() * sizeof(InlineCache); + if (this->byteCodeBlock) + { + threadContext->recoveredBytes += this->byteCodeBlock->GetLength(); + if (this->GetAuxiliaryData()) + { + threadContext->recoveredBytes += this->GetAuxiliaryData()->GetLength(); + } + } + this->MapEntryPoints([&](int index, FunctionEntryPointInfo * info) { + threadContext->recoveredBytes += sizeof(info); + }); + + // TODO: Get size of polymorphic caches, jitted code, etc. + } +#endif + + PHASE_PRINT_TRACE(Js::RedeferralPhase, this, _u("Redeferring function %d.%d: %s\n"), + GetSourceContextId(), GetLocalFunctionId(), + GetDisplayName() ? GetDisplayName() : _u("Anonymous function)")); + + ParseableFunctionInfo * parseableFunctionInfo = + Js::ParseableFunctionInfo::NewDeferredFunctionFromFunctionBody(this); + FunctionInfo * functionInfo = this->GetFunctionInfo(); + + this->MapFunctionObjectTypes([&](DynamicType* type) + { + Assert(type->GetTypeId() == TypeIds_Function); + + ScriptFunctionType* functionType = (ScriptFunctionType*)type; + functionType->SetEntryPoint(GetScriptContext()->DeferredParsingThunk); + }); + + this->Cleanup(false); + if (GetIsFuncRegistered()) + { + this->GetUtf8SourceInfo()->RemoveFunctionBody(this); + } + + // New allocation is done at this point, so update existing structures + // Adjust functionInfo attributes, point to new proxy + functionInfo->SetAttributes((FunctionInfo::Attributes)(functionInfo->GetAttributes() | FunctionInfo::Attributes::DeferredParse)); + functionInfo->SetFunctionProxy(parseableFunctionInfo); + functionInfo->SetOriginalEntryPoint(DefaultEntryThunk); + } + void FunctionBody::SetDefaultFunctionEntryPointInfo(FunctionEntryPointInfo* entryPointInfo, const JavascriptMethod originalEntryPoint) { Assert(entryPointInfo); @@ -609,7 +901,7 @@ namespace Js } ByteBlock* - FunctionBody::GetByteCode() + FunctionBody::GetByteCode() const { return this->byteCodeBlock; } @@ -859,7 +1151,7 @@ namespace Js #if DBG BOOL FunctionBody::IsInterpreterThunk() const { - bool isInterpreterThunk = this->originalEntryPoint == DefaultEntryThunk; + bool isInterpreterThunk = this->GetOriginalEntryPoint_Unchecked() == DefaultEntryThunk; #if DYNAMIC_INTERPRETER_THUNK isInterpreterThunk = isInterpreterThunk || IsDynamicInterpreterThunk(); #endif @@ -869,7 +1161,7 @@ namespace Js BOOL FunctionBody::IsDynamicInterpreterThunk() const { #if DYNAMIC_INTERPRETER_THUNK - return this->GetScriptContext()->IsDynamicInterpreterThunk(this->originalEntryPoint); + return this->GetScriptContext()->IsDynamicInterpreterThunk(this->GetOriginalEntryPoint_Unchecked()); #else return FALSE; #endif @@ -1038,9 +1330,10 @@ namespace Js } } - void ParseableFunctionInfo::Copy(FunctionBody* other) + void ParseableFunctionInfo::Copy(ParseableFunctionInfo * other) { #define CopyDeferParseField(field) other->field = this->field; + CopyDeferParseField(flags); CopyDeferParseField(m_isDeclaration); CopyDeferParseField(m_isAccessor); CopyDeferParseField(m_isStrictMode); @@ -1066,44 +1359,62 @@ namespace Js other->SetDeferredStubs(this->GetDeferredStubs()); CopyDeferParseField(m_isAsmjsMode); CopyDeferParseField(m_isAsmJsFunction); -#undef CopyDeferParseField - other->CopySourceInfo(this); - } + other->SetFunctionObjectTypeList(this->GetFunctionObjectTypeList()); + + CopyDeferParseField(m_sourceIndex); + CopyDeferParseField(m_cchStartOffset); + CopyDeferParseField(m_cchLength); + CopyDeferParseField(m_lineNumber); + CopyDeferParseField(m_columnNumber); + CopyDeferParseField(m_cbStartOffset); + CopyDeferParseField(m_cbLength); - void FunctionProxy::SetReferenceInParentFunction(FunctionProxyPtrPtr reference) + this->CopyNestedArray(other); +#undef CopyDeferParseField + } + + void ParseableFunctionInfo::Copy(FunctionBody* other) { - // No need to tag the reference because the first field of the nested array - // is count, so the reference here won't be same as address of the parent nested - // array (even for index 0) - this->m_referenceInParentFunction = reference; + this->Copy(static_cast(other)); + other->CopySourceInfo(this); } - void FunctionProxy::UpdateReferenceInParentFunction(FunctionProxy* newFunctionInfo) + void ParseableFunctionInfo::CopyNestedArray(ParseableFunctionInfo * other) { - if (this->m_referenceInParentFunction) + NestedArray * thisNestedArray = this->GetNestedArray(); + NestedArray * otherNestedArray = other->GetNestedArray(); + if (thisNestedArray == nullptr) + { + Assert(otherNestedArray == nullptr); + return; + } + Assert(otherNestedArray->nestedCount == thisNestedArray->nestedCount); + + for (uint i = 0; i < thisNestedArray->nestedCount; i++) { - *m_referenceInParentFunction = newFunctionInfo; + otherNestedArray->functionInfoArray[i] = thisNestedArray->functionInfoArray[i]; } } // DeferDeserializeFunctionInfo methods - DeferDeserializeFunctionInfo::DeferDeserializeFunctionInfo(int nestedCount, LocalFunctionId functionId, ByteCodeCache* byteCodeCache, const byte* serializedFunction, Utf8SourceInfo* sourceInfo, ScriptContext* scriptContext, uint functionNumber, const char16* displayName, uint displayNameLength, uint displayShortNameOffset, NativeModule *nativeModule, Attributes attributes) : - FunctionProxy(DefaultDeferredDeserializeThunk, (Attributes)(attributes | DeferredDeserialize), functionId, scriptContext, sourceInfo, functionNumber), + DeferDeserializeFunctionInfo::DeferDeserializeFunctionInfo(int nestedCount, LocalFunctionId functionId, ByteCodeCache* byteCodeCache, const byte* serializedFunction, Utf8SourceInfo* sourceInfo, ScriptContext* scriptContext, uint functionNumber, const char16* displayName, uint displayNameLength, uint displayShortNameOffset, NativeModule *nativeModule, FunctionInfo::Attributes attributes) : + FunctionProxy(scriptContext, sourceInfo, functionNumber), m_cache(byteCodeCache), m_functionBytes(serializedFunction), m_displayName(nullptr), m_displayNameLength(0), m_nativeModule(nativeModule) { + this->functionInfo = RecyclerNew(scriptContext->GetRecycler(), FunctionInfo, DefaultDeferredDeserializeThunk, (FunctionInfo::Attributes)(attributes | FunctionInfo::Attributes::DeferredDeserialize), functionId, this); this->m_defaultEntryPointInfo = RecyclerNew(scriptContext->GetRecycler(), ProxyEntryPointInfo, DefaultDeferredDeserializeThunk); PERF_COUNTER_INC(Code, DeferDeserializeFunctionProxy); SetDisplayName(displayName, displayNameLength, displayShortNameOffset, FunctionProxy::SetDisplayNameFlagsDontCopy); } - DeferDeserializeFunctionInfo* DeferDeserializeFunctionInfo::New(ScriptContext* scriptContext, int nestedCount, LocalFunctionId functionId, ByteCodeCache* byteCodeCache, const byte* serializedFunction, Utf8SourceInfo* sourceInfo, const char16* displayName, uint displayNameLength, uint displayShortNameOffset, NativeModule *nativeModule, Attributes attributes) + DeferDeserializeFunctionInfo* DeferDeserializeFunctionInfo::New(ScriptContext* scriptContext, int nestedCount, LocalFunctionId functionId, ByteCodeCache* byteCodeCache, const byte* serializedFunction, Utf8SourceInfo* sourceInfo, const char16* displayName, uint displayNameLength, uint displayShortNameOffset, NativeModule *nativeModule, FunctionInfo::Attributes attributes) { return RecyclerNewFinalized(scriptContext->GetRecycler(), DeferDeserializeFunctionInfo, @@ -1130,11 +1441,12 @@ namespace Js // ParseableFunctionInfo methods ParseableFunctionInfo::ParseableFunctionInfo(JavascriptMethod entryPoint, int nestedCount, LocalFunctionId functionId, Utf8SourceInfo* sourceInfo, ScriptContext* scriptContext, uint functionNumber, - const char16* displayName, uint displayNameLength, uint displayShortNameOffset, Attributes attributes, Js::PropertyRecordList* propertyRecords) : - FunctionProxy(entryPoint, attributes, functionId, scriptContext, sourceInfo, functionNumber), + const char16* displayName, uint displayNameLength, uint displayShortNameOffset, FunctionInfo::Attributes attributes, Js::PropertyRecordList* propertyRecords, FunctionBodyFlags flags) : + FunctionProxy(scriptContext, sourceInfo, functionNumber), #if DYNAMIC_INTERPRETER_THUNK m_dynamicInterpreterThunk(nullptr), #endif + flags(flags), m_hasBeenParsed(false), m_isGlobalFunc(false), m_isDeclaration(false), @@ -1173,6 +1485,8 @@ namespace Js ,scopeObjectSize(0) #endif { + this->functionInfo = RecyclerNew(scriptContext->GetRecycler(), FunctionInfo, entryPoint, attributes, functionId, this); + if (nestedCount > 0) { nestedArray = RecyclerNewPlusZ(m_scriptContext->GetRecycler(), @@ -1201,11 +1515,46 @@ namespace Js } SetDisplayName(displayName, displayNameLength, displayShortNameOffset); - this->originalEntryPoint = DefaultEntryThunk; + this->SetOriginalEntryPoint(DefaultEntryThunk); + } + + ParseableFunctionInfo::ParseableFunctionInfo(ParseableFunctionInfo * proxy) : + FunctionProxy(proxy->GetScriptContext(), proxy->GetUtf8SourceInfo(), proxy->GetFunctionNumber()), +#if DYNAMIC_INTERPRETER_THUNK + m_dynamicInterpreterThunk(nullptr), +#endif + m_hasBeenParsed(false), + m_isNamedFunctionExpression(proxy->GetIsNamedFunctionExpression()), + m_isNameIdentifierRef (proxy->GetIsNameIdentifierRef()), + m_isStaticNameFunction(proxy->GetIsStaticNameFunction()), + m_reportedInParamCount(proxy->GetReportedInParamsCount()), + m_reparsed(proxy->IsReparsed()) +#if DBG + ,m_wasEverAsmjsMode(proxy->m_wasEverAsmjsMode) +#endif + { + FunctionInfo * functionInfo = proxy->GetFunctionInfo(); + this->functionInfo = functionInfo; + + uint nestedCount = proxy->GetNestedCount(); + if (nestedCount > 0) + { + nestedArray = RecyclerNewPlusZ(m_scriptContext->GetRecycler(), + nestedCount*sizeof(FunctionProxy*), NestedArray, nestedCount); + } + else + { + nestedArray = nullptr; + } + + proxy->Copy(this); + + SetBoundPropertyRecords(proxy->GetBoundPropertyRecords()); + SetDisplayName(proxy->GetDisplayName(), proxy->GetDisplayNameLength(), proxy->GetShortDisplayNameOffset()); } ParseableFunctionInfo* ParseableFunctionInfo::New(ScriptContext* scriptContext, int nestedCount, - LocalFunctionId functionId, Utf8SourceInfo* sourceInfo, const char16* displayName, uint displayNameLength, uint displayShortNameOffset, Js::PropertyRecordList* propertyRecords, Attributes attributes) + LocalFunctionId functionId, Utf8SourceInfo* sourceInfo, const char16* displayName, uint displayNameLength, uint displayShortNameOffset, Js::PropertyRecordList* propertyRecords, FunctionInfo::Attributes attributes, FunctionBodyFlags flags) { #ifdef ENABLE_SCRIPT_PROFILING Assert( @@ -1240,8 +1589,34 @@ namespace Js displayName, displayNameLength, displayShortNameOffset, - (Attributes)(attributes | DeferredParse), - propertyRecords); + (FunctionInfo::Attributes)(attributes | FunctionInfo::Attributes::DeferredParse), + propertyRecords, + flags); + } + + ParseableFunctionInfo * + ParseableFunctionInfo::NewDeferredFunctionFromFunctionBody(FunctionBody * functionBody) + { + ScriptContext * scriptContext = functionBody->GetScriptContext(); + uint nestedCount = functionBody->GetNestedCount(); + + ParseableFunctionInfo * info = RecyclerNewWithBarrierFinalized(scriptContext->GetRecycler(), + ParseableFunctionInfo, + functionBody); + + // Create new entry point info + info->m_defaultEntryPointInfo = RecyclerNew(scriptContext->GetRecycler(), ProxyEntryPointInfo, scriptContext->DeferredParsingThunk); + + // Initialize nested function array, update back pointers + for (uint i = 0; i < nestedCount; i++) + { + FunctionInfo * nestedInfo = functionBody->GetNestedFunc(i); + info->SetNestedFunc(nestedInfo, i, 0); + } + + // Update function objects + + return info; } DWORD_PTR FunctionProxy::GetSecondaryHostSourceContext() const @@ -1414,23 +1789,21 @@ namespace Js this->SetDeferredStubs(BuildDeferredStubTree(pnodeFnc, recycler)); } - FunctionProxyArray ParseableFunctionInfo::GetNestedFuncArray() + FunctionInfoArray ParseableFunctionInfo::GetNestedFuncArray() { Assert(GetNestedArray() != nullptr); - return GetNestedArray()->functionProxyArray; + return GetNestedArray()->functionInfoArray; } - void ParseableFunctionInfo::SetNestedFunc(FunctionProxy* nestedFunc, uint index, uint32 flags) + void ParseableFunctionInfo::SetNestedFunc(FunctionInfo* nestedFunc, uint index, uint32 flags) { AssertMsg(index < this->GetNestedCount(), "Trying to write past the nested func array"); - FunctionProxyArray nested = this->GetNestedFuncArray(); + FunctionInfoArray nested = this->GetNestedFuncArray(); nested[index] = nestedFunc; if (nestedFunc) { - nestedFunc->SetReferenceInParentFunction(GetNestedFuncReference(index)); - if (!this->GetSourceContextInfo()->IsDynamic() && nestedFunc->IsDeferredParseFunction() && nestedFunc->GetParseableFunctionInfo()->GetIsDeclaration() && this->GetIsTopLevel() && !(flags & fscrEvalCode)) { this->GetUtf8SourceInfo()->TrackDeferredFunction(nestedFunc->GetLocalFunctionId(), nestedFunc->GetParseableFunctionInfo()); @@ -1439,27 +1812,32 @@ namespace Js } - FunctionProxy* ParseableFunctionInfo::GetNestedFunc(uint index) + FunctionInfo* ParseableFunctionInfo::GetNestedFunc(uint index) { return *(GetNestedFuncReference(index)); } - FunctionProxyPtrPtr ParseableFunctionInfo::GetNestedFuncReference(uint index) + FunctionProxy* ParseableFunctionInfo::GetNestedFunctionProxy(uint index) + { + FunctionInfo *info = GetNestedFunc(index); + return info ? info->GetFunctionProxy() : nullptr; + } + + FunctionInfoPtrPtr ParseableFunctionInfo::GetNestedFuncReference(uint index) { AssertMsg(index < this->GetNestedCount(), "Trying to write past the nested func array"); - FunctionProxyArray nested = this->GetNestedFuncArray(); + FunctionInfoArray nested = this->GetNestedFuncArray(); return &nested[index]; } ParseableFunctionInfo* ParseableFunctionInfo::GetNestedFunctionForExecution(uint index) { - FunctionProxy* currentNestedFunction = this->GetNestedFunc(index); + FunctionInfo* currentNestedFunction = this->GetNestedFunc(index); Assert(currentNestedFunction); if (currentNestedFunction->IsDeferredDeserializeFunction()) { - currentNestedFunction = currentNestedFunction->EnsureDeserialized(); - this->SetNestedFunc(currentNestedFunction, index, 0u); + currentNestedFunction->GetFunctionProxy()->EnsureDeserialized(); } return currentNestedFunction->GetParseableFunctionInfo(); @@ -1468,23 +1846,12 @@ namespace Js void FunctionProxy::UpdateFunctionBodyImpl(FunctionBody * body) { - Assert(functionBodyImpl == ((FunctionProxy*) this)); + FunctionInfo *functionInfo = this->GetFunctionInfo(); + Assert(functionInfo->GetFunctionProxy() == this); Assert(!this->IsFunctionBody() || body == this); - this->functionBodyImpl = body; - this->attributes = (Attributes)(this->attributes & ~(DeferredParse | DeferredDeserialize)); - this->UpdateReferenceInParentFunction(body); - } - - void ParseableFunctionInfo::ClearNestedFunctionParentFunctionReference() - { - this->ForEachNestedFunc([](FunctionProxy* proxy, uint32 index) - { - if (proxy) - { - proxy->SetReferenceInParentFunction(nullptr); - } - return true; - }); + functionInfo->SetFunctionProxy(body); + body->SetFunctionInfo(functionInfo); + body->SetAttributes((FunctionInfo::Attributes)(functionInfo->GetAttributes() & ~(FunctionInfo::Attributes::DeferredParse | FunctionInfo::Attributes::DeferredDeserialize))); } // @@ -1495,17 +1862,18 @@ namespace Js // ParseableFunctionInfo * FunctionProxy::EnsureDeserialized() { - FunctionProxy * executionFunctionBody = this->functionBodyImpl; + Assert(this == this->GetFunctionInfo()->GetFunctionProxy()); + FunctionProxy * executionFunctionBody = this; - if (executionFunctionBody == this && IsDeferredDeserializeFunction()) + if (IsDeferredDeserializeFunction()) { // No need to deserialize function body if scriptContext closed because we can't execute it. // Bigger problem is the script engine might have released bytecode file mapping and we can't deserialize. Assert(!m_scriptContext->IsClosed()); executionFunctionBody = ((DeferDeserializeFunctionInfo*) this)->Deserialize(); - this->functionBodyImpl = executionFunctionBody; - Assert(executionFunctionBody->HasBody()); + this->GetFunctionInfo()->SetFunctionProxy(executionFunctionBody); + Assert(executionFunctionBody->GetFunctionInfo()->HasBody()); Assert(executionFunctionBody != this); } @@ -1519,7 +1887,7 @@ namespace Js ScriptFunctionType * FunctionProxy::EnsureDeferredPrototypeType() { - Assert(this->GetFunctionProxy() == this); + Assert(this->GetFunctionInfo()->GetFunctionProxy() == this); return deferredPrototypeType != nullptr ? static_cast(deferredPrototypeType) : AllocDeferredPrototypeType(); } @@ -1539,10 +1907,20 @@ namespace Js } // Function object type list methods + FunctionProxy::FunctionTypeWeakRefList* FunctionProxy::GetFunctionObjectTypeList() const + { + return static_cast(this->GetAuxPtr(AuxPointerType::FunctionObjectTypeList)); + } + + void FunctionProxy::SetFunctionObjectTypeList(FunctionProxy::FunctionTypeWeakRefList* list) + { + this->SetAuxPtr(AuxPointerType::FunctionObjectTypeList, list); + } + template void FunctionProxy::MapFunctionObjectTypes(Fn func) { - FunctionTypeWeakRefList* functionObjectTypeList = static_cast(this->GetAuxPtr(AuxPointerType::FunctionObjectTypeList)); + FunctionTypeWeakRefList* functionObjectTypeList = this->GetFunctionObjectTypeList(); if (functionObjectTypeList != nullptr) { functionObjectTypeList->Map([&](int, FunctionTypeWeakRef* typeWeakRef) @@ -1566,14 +1944,15 @@ namespace Js FunctionProxy::FunctionTypeWeakRefList* FunctionProxy::EnsureFunctionObjectTypeList() { - FunctionTypeWeakRefList* functionObjectTypeList = static_cast(this->GetAuxPtr(AuxPointerType::FunctionObjectTypeList)); + FunctionTypeWeakRefList* functionObjectTypeList = this->GetFunctionObjectTypeList(); if (functionObjectTypeList == nullptr) { Recycler* recycler = this->GetScriptContext()->GetRecycler(); - this->SetAuxPtr(AuxPointerType::FunctionObjectTypeList, RecyclerNew(recycler, FunctionTypeWeakRefList, recycler)); + functionObjectTypeList = RecyclerNew(recycler, FunctionTypeWeakRefList, recycler); + this->SetFunctionObjectTypeList(functionObjectTypeList); } - return static_cast(this->GetAuxPtr(AuxPointerType::FunctionObjectTypeList)); + return functionObjectTypeList; } void FunctionProxy::RegisterFunctionObjectType(DynamicType* functionType) @@ -1626,14 +2005,16 @@ namespace Js FunctionBody* DeferDeserializeFunctionInfo::Deserialize() { - if (functionBodyImpl == (FunctionBody*) this) - { - FunctionBody * body = ByteCodeSerializer::DeserializeFunction(this->m_scriptContext, this); - this->Copy(body); - this->UpdateFunctionBodyImpl(body); - } + Assert(this->GetFunctionInfo()->GetFunctionProxy() == this); - return GetFunctionBody(); + FunctionBody * body = ByteCodeSerializer::DeserializeFunction(this->m_scriptContext, this); + this->SetLocalFunctionId(body->GetLocalFunctionId()); + this->SetOriginalEntryPoint(body->GetOriginalEntryPoint()); + this->Copy(body); + this->UpdateFunctionBodyImpl(body); + + Assert(body->GetFunctionBody() == body); + return body; } // @@ -1682,7 +2063,8 @@ namespace Js FunctionBody* ParseableFunctionInfo::Parse(ScriptFunction ** functionRef, bool isByteCodeDeserialization) { - if ((functionBodyImpl != (FunctionBody*) this) || !IsDeferredParseFunction()) + Assert(this == this->GetFunctionInfo()->GetFunctionProxy()); + if (!IsDeferredParseFunction()) { // If not deferredparsed, the functionBodyImpl and this will be the same, just return the current functionBody. Assert(GetFunctionBody()->IsFunctionParsed()); @@ -1705,25 +2087,8 @@ namespace Js // - This is an already parsed asm.js module, which has been invalidated at link time and must be reparsed as a non-asm.js function if (!this->m_hasBeenParsed) { - funcBody = FunctionBody::NewFromRecycler( - this->m_scriptContext, - this->m_displayName, - this->m_displayNameLength, - this->m_displayShortNameOffset, - this->GetNestedCount(), - this->GetUtf8SourceInfo(), - this->m_functionNumber, - this->GetUtf8SourceInfo()->GetSrcInfo()->sourceContextInfo->sourceContextId, /* script id */ - this->functionId, /* function id */ - propertyRecordList, - (Attributes)(this->GetAttributes() & ~(Attributes::DeferredDeserialize | Attributes::DeferredParse)), - Js::FunctionBody::FunctionBodyFlags::Flags_HasNoExplicitReturnValue -#ifdef PERF_COUNTERS - , false /* is function from deferred deserialized proxy */ -#endif - ); + funcBody = FunctionBody::NewFromParseableFunctionInfo(this); - this->Copy(funcBody); PERF_COUNTER_DEC(Code, DeferredFunction); if (!this->GetSourceContextInfo()->IsDynamic()) @@ -1862,7 +2227,7 @@ namespace Js hrParser = ps.ParseSourceWithOffset(&parseTree, pszStart, offset, length, charOffset, isCesu8, grfscr, &se, &nextFunctionId, funcBody->GetRelativeLineNumber(), funcBody->GetSourceContextInfo(), funcBody); - Assert(FAILED(hrParser) || nextFunctionId == funcBody->deferredParseNextFunctionId || isDebugOrAsmJsReparse || isByteCodeDeserialization); +// Assert(FAILED(hrParser) || nextFunctionId == funcBody->deferredParseNextFunctionId || isDebugOrAsmJsReparse || isByteCodeDeserialization); if (FAILED(hrParser)) { @@ -1948,11 +2313,13 @@ namespace Js // Restore if the function has nameIdentifier reference, as that name on the left side will not be parsed again while deferparse. funcBody->SetIsNameIdentifierRef(this->GetIsNameIdentifierRef()); - this->UpdateFunctionBodyImpl(funcBody); this->m_hasBeenParsed = true; + returnFunctionBody = funcBody; + } + else + { + returnFunctionBody = this->GetFunctionBody(); } - - returnFunctionBody = GetFunctionBody(); LEAVE_PINNED_SCOPE(); @@ -1980,10 +2347,10 @@ namespace Js this->GetNestedCount(), this->GetUtf8SourceInfo(), this->m_functionNumber, - this->GetUtf8SourceInfo()->GetSrcInfo()->sourceContextInfo->sourceContextId, /* script id */ - this->functionId, /* function id */ + this->GetUtf8SourceInfo()->GetSrcInfo()->sourceContextInfo->sourceContextId, + this->GetLocalFunctionId(), propertyRecordList, - (Attributes)(this->GetAttributes() & ~(Attributes::DeferredDeserialize | Attributes::DeferredParse)), + (FunctionInfo::Attributes)(this->GetAttributes() & ~(FunctionInfo::Attributes::DeferredDeserialize | FunctionInfo::Attributes::DeferredParse)), Js::FunctionBody::FunctionBodyFlags::Flags_HasNoExplicitReturnValue #ifdef PERF_COUNTERS , false /* is function from deferred deserialized proxy */ @@ -2053,7 +2420,9 @@ namespace Js UpdateFunctionBodyImpl(funcBody); m_hasBeenParsed = true; - returnFunctionBody = GetFunctionBody(); + Assert(funcBody->GetFunctionBody() == funcBody); + + returnFunctionBody = funcBody; LEAVE_PINNED_SCOPE(); @@ -2067,7 +2436,7 @@ namespace Js if (!this->m_hasBeenParsed) { - if (!this->GetSourceContextInfo()->IsDynamic() && !this->GetIsTopLevel()) + if (!this->GetSourceContextInfo()->IsDynamic() && !this->GetIsTopLevel()) { this->GetUtf8SourceInfo()->StopTrackingDeferredFunction(this->GetLocalFunctionId()); } @@ -2309,17 +2678,14 @@ namespace Js #if DBG_DUMP if (PHASE_TRACE1(Js::FunctionSourceInfoParsePhase)) { - if (this->HasBody()) + Assert(this->GetFunctionInfo()->HasBody()); + if (this->IsFunctionBody()) { - FunctionProxy* proxy = this->GetFunctionProxy(); - if (proxy->IsFunctionBody()) - { - FunctionBody* functionBody = this->GetFunctionBody(); - Assert( functionBody != nullptr ); + FunctionBody* functionBody = this->GetFunctionBody(); + Assert( functionBody != nullptr ); - functionBody->PrintStatementSourceLineFromStartOffset(functionBody->StartInDocument()); - Output::Flush(); - } + functionBody->PrintStatementSourceLineFromStartOffset(functionBody->StartInDocument()); + Output::Flush(); } } #endif @@ -2932,7 +3298,7 @@ namespace Js BOOL FunctionBody::IsNativeOriginalEntryPoint() const { #if ENABLE_NATIVE_CODEGEN - return this->GetScriptContext()->IsNativeAddress((void*)this->originalEntryPoint); + return this->GetScriptContext()->IsNativeAddress((void*)this->GetOriginalEntryPoint_Unchecked()); #else return false; #endif @@ -2943,13 +3309,11 @@ namespace Js const FunctionEntryPointInfo *const simpleJitEntryPointInfo = GetSimpleJitEntryPointInfo(); return simpleJitEntryPointInfo && - reinterpret_cast(simpleJitEntryPointInfo->GetNativeAddress()) == originalEntryPoint; + reinterpret_cast(simpleJitEntryPointInfo->GetNativeAddress()) == GetOriginalEntryPoint_Unchecked(); } void FunctionProxy::Finalize(bool isShutdown) { - __super::Finalize(isShutdown); - this->CleanupFunctionProxyCounters(); } @@ -2993,7 +3357,7 @@ namespace Js bool FunctionProxy::HasValidNonProfileEntryPoint() const { JavascriptMethod directEntryPoint = this->GetDefaultEntryPointInfo()->jsMethod; - JavascriptMethod originalEntryPoint = this->originalEntryPoint; + JavascriptMethod originalEntryPoint = this->GetOriginalEntryPoint_Unchecked(); // Check the direct entry point to see if it is codegen thunk // if it is not, the background codegen thread has updated both original entry point and direct entry point @@ -3013,11 +3377,13 @@ namespace Js bool FunctionProxy::HasValidProfileEntryPoint() const { JavascriptMethod directEntryPoint = this->GetDefaultEntryPointInfo()->jsMethod; - if (this->originalEntryPoint == DefaultDeferredParsingThunk) + JavascriptMethod originalEntryPoint = this->GetOriginalEntryPoint_Unchecked(); + + if (originalEntryPoint == DefaultDeferredParsingThunk) { return directEntryPoint == ProfileDeferredParsingThunk; } - if (this->originalEntryPoint == DefaultDeferredDeserializeThunk) + if (originalEntryPoint == DefaultDeferredDeserializeThunk) { return directEntryPoint == ProfileDeferredDeserializeThunk; } @@ -3074,28 +3440,31 @@ namespace Js #endif this->SetEntryPoint(this->GetDefaultEntryPointInfo(), m_scriptContext->DeferredParsingThunk); - originalEntryPoint = DefaultDeferredParsingThunk; + this->SetOriginalEntryPoint(DefaultDeferredParsingThunk); } void ParseableFunctionInfo::SetInitialDefaultEntryPoint() { #ifdef ENABLE_SCRIPT_PROFILING Assert(m_scriptContext->CurrentThunk == ProfileEntryThunk || m_scriptContext->CurrentThunk == DefaultEntryThunk); - Assert(originalEntryPoint == DefaultDeferredParsingThunk || originalEntryPoint == ProfileDeferredParsingThunk || - originalEntryPoint == DefaultDeferredDeserializeThunk || originalEntryPoint == ProfileDeferredDeserializeThunk || - originalEntryPoint == DefaultEntryThunk || originalEntryPoint == ProfileEntryThunk); + Assert(this->GetOriginalEntryPoint_Unchecked() == DefaultDeferredParsingThunk || + this->GetOriginalEntryPoint_Unchecked() == ProfileDeferredParsingThunk || + this->GetOriginalEntryPoint_Unchecked() == DefaultDeferredDeserializeThunk || + this->GetOriginalEntryPoint_Unchecked() == ProfileDeferredDeserializeThunk || + this->GetOriginalEntryPoint_Unchecked() == DefaultEntryThunk || + this->GetOriginalEntryPoint_Unchecked() == ProfileEntryThunk); #else Assert(m_scriptContext->CurrentThunk == DefaultEntryThunk); - Assert(originalEntryPoint == DefaultDeferredParsingThunk || - originalEntryPoint == DefaultDeferredDeserializeThunk || - originalEntryPoint == DefaultEntryThunk); + Assert(this->GetOriginalEntryPoint_Unchecked() == DefaultDeferredParsingThunk || + this->GetOriginalEntryPoint_Unchecked() == DefaultDeferredDeserializeThunk || + this->GetOriginalEntryPoint_Unchecked() == DefaultEntryThunk); #endif Assert(this->m_defaultEntryPointInfo != nullptr); // CONSIDER: we can optimize this to generate the dynamic interpreter thunk up front // If we know that we are in the defer parsing thunk already this->SetEntryPoint(this->GetDefaultEntryPointInfo(), m_scriptContext->CurrentThunk); - this->originalEntryPoint = DefaultEntryThunk; + this->SetOriginalEntryPoint(DefaultEntryThunk); } void FunctionBody::SetCheckCodeGenEntryPoint(FunctionEntryPointInfo* entryPointInfo, JavascriptMethod entryPoint) @@ -3121,17 +3490,17 @@ namespace Js if (m_isAsmJsFunction) { - this->originalEntryPoint = this->m_scriptContext->GetNextDynamicAsmJsInterpreterThunk(&this->m_dynamicInterpreterThunk); + this->SetOriginalEntryPoint(this->m_scriptContext->GetNextDynamicAsmJsInterpreterThunk(&this->m_dynamicInterpreterThunk)); } else { - this->originalEntryPoint = this->m_scriptContext->GetNextDynamicInterpreterThunk(&this->m_dynamicInterpreterThunk); + this->SetOriginalEntryPoint(this->m_scriptContext->GetNextDynamicInterpreterThunk(&this->m_dynamicInterpreterThunk)); } JS_ETW(EtwTrace::LogMethodInterpreterThunkLoadEvent(this)); } else { - this->originalEntryPoint = (JavascriptMethod)InterpreterThunkEmitter::ConvertToEntryPoint(this->m_dynamicInterpreterThunk); + this->SetOriginalEntryPoint((JavascriptMethod)InterpreterThunkEmitter::ConvertToEntryPoint(this->m_dynamicInterpreterThunk)); } } @@ -3149,18 +3518,18 @@ namespace Js if (InterpreterStackFrame::IsDelayDynamicInterpreterThunk(this->GetEntryPoint(entryPointInfo))) { // We are not doing code gen on this function, just change the entry point directly - Assert(InterpreterStackFrame::IsDelayDynamicInterpreterThunk(originalEntryPoint)); + Assert(InterpreterStackFrame::IsDelayDynamicInterpreterThunk(this->GetOriginalEntryPoint_Unchecked())); GenerateDynamicInterpreterThunk(); - this->SetEntryPoint(entryPointInfo, originalEntryPoint); + this->SetEntryPoint(entryPointInfo, this->GetOriginalEntryPoint_Unchecked()); } else if (this->GetEntryPoint(entryPointInfo) == ProfileEntryThunk) { // We are not doing codegen on this function, just change the entry point directly // Don't replace the profile entry thunk - Assert(InterpreterStackFrame::IsDelayDynamicInterpreterThunk(originalEntryPoint)); + Assert(InterpreterStackFrame::IsDelayDynamicInterpreterThunk(this->GetOriginalEntryPoint_Unchecked())); GenerateDynamicInterpreterThunk(); } - else if (InterpreterStackFrame::IsDelayDynamicInterpreterThunk(originalEntryPoint)) + else if (InterpreterStackFrame::IsDelayDynamicInterpreterThunk(this->GetOriginalEntryPoint_Unchecked())) { JsUtil::JobProcessor * jobProcessor = this->GetScriptContext()->GetThreadContext()->GetJobProcessor(); if (jobProcessor->ProcessesInBackground()) @@ -3168,7 +3537,7 @@ namespace Js JsUtil::BackgroundJobProcessor * backgroundJobProcessor = static_cast(jobProcessor); AutoCriticalSection autocs(backgroundJobProcessor->GetCriticalSection()); // Check again under lock - if (InterpreterStackFrame::IsDelayDynamicInterpreterThunk(originalEntryPoint)) + if (InterpreterStackFrame::IsDelayDynamicInterpreterThunk(this->GetOriginalEntryPoint_Unchecked())) { // If the original entry point is DelayDynamicInterpreterThunk then there must be a version of this // function being codegen'd. @@ -3184,7 +3553,7 @@ namespace Js GenerateDynamicInterpreterThunk(); } } - return this->originalEntryPoint; + return this->GetOriginalEntryPoint_Unchecked(); } #endif @@ -3202,7 +3571,7 @@ namespace Js // keep originalEntryPoint updated with the latest known good native entry point if (entryPointInfo == this->GetDefaultEntryPointInfo()) { - this->originalEntryPoint = originalEntryPoint; + this->SetOriginalEntryPoint(originalEntryPoint); } if (entryPointInfo->entryPointIndex == 0 && this->NeedEnsureDynamicProfileInfo()) @@ -3446,33 +3815,42 @@ namespace Js } } - void FunctionBody::SetStackNestedFuncParent(FunctionBody * parentFunctionBody) + void FunctionBody::SetStackNestedFuncParent(FunctionInfo * parentFunctionInfo) { - Assert(this->GetStackNestedFuncParent() == nullptr); - Assert(CanDoStackNestedFunc()); + FunctionBody * parentFunctionBody = parentFunctionInfo->GetFunctionBody(); + RecyclerWeakReference* parent = this->GetStackNestedFuncParent(); + if (parent != nullptr) + { + Assert(parent->Get() == parentFunctionInfo); + return; + } +// Redeferral invalidates this assertion, as we may be recompiling with a different view of nested functions and +// thus making different stack-nested-function decisions. I'm inclined to allow this, since things that have been +// re-deferred will likely not be executed again, so it makes sense to exclude them from our analysis. +// Assert(CanDoStackNestedFunc()); Assert(parentFunctionBody->DoStackNestedFunc()); - this->SetAuxPtr(AuxPointerType::StackNestedFuncParent, this->GetScriptContext()->GetRecycler()->CreateWeakReferenceHandle(parentFunctionBody)); + this->SetAuxPtr(AuxPointerType::StackNestedFuncParent, this->GetScriptContext()->GetRecycler()->CreateWeakReferenceHandle(parentFunctionInfo)); } - FunctionBody * FunctionBody::GetStackNestedFuncParentStrongRef() + FunctionInfo * FunctionBody::GetStackNestedFuncParentStrongRef() { Assert(this->GetStackNestedFuncParent() != nullptr); return this->GetStackNestedFuncParent()->Get(); } - RecyclerWeakReference * FunctionBody::GetStackNestedFuncParent() + RecyclerWeakReference * FunctionBody::GetStackNestedFuncParent() { - return static_cast*>(this->GetAuxPtr(AuxPointerType::StackNestedFuncParent)); + return static_cast*>(this->GetAuxPtr(AuxPointerType::StackNestedFuncParent)); } - FunctionBody * FunctionBody::GetAndClearStackNestedFuncParent() + FunctionInfo * FunctionBody::GetAndClearStackNestedFuncParent() { if (this->GetAuxPtr(AuxPointerType::StackNestedFuncParent)) { - FunctionBody * parentFunctionBody = GetStackNestedFuncParentStrongRef(); + FunctionInfo * parentFunctionInfo = GetStackNestedFuncParentStrongRef(); ClearStackNestedFuncParent(); - return parentFunctionBody; + return parentFunctionInfo; } return nullptr; } @@ -4130,7 +4508,7 @@ namespace Js } #endif - void FunctionBody::SetIsNonUserCode(bool set) + void ParseableFunctionInfo::SetIsNonUserCode(bool set) { // Mark current function as a non-user code, so that we can distinguish cases where exceptions are // caught in non-user code (see ProbeContainer::HasAllowedForException). @@ -4139,7 +4517,7 @@ namespace Js // Propagate setting for all functions in this scope (nested). this->ForEachNestedFunc([&](FunctionProxy* proxy, uint32 index) { - Js::FunctionBody * pBody = proxy->GetFunctionBody(); + ParseableFunctionInfo * pBody = proxy->GetParseableFunctionInfo(); if (pBody != nullptr) { pBody->SetIsNonUserCode(set); @@ -4285,11 +4663,11 @@ namespace Js if (!IsIntermediateCodeGenThunk(defaultEntryPointInfo->jsMethod) && defaultEntryPointInfo->jsMethod != DynamicProfileInfo::EnsureDynamicProfileInfoThunk) { - if (this->originalEntryPoint == DefaultDeferredParsingThunk) + if (this->GetOriginalEntryPoint_Unchecked() == DefaultDeferredParsingThunk) { defaultEntryPointInfo->jsMethod = ProfileDeferredParsingThunk; } - else if (this->originalEntryPoint == DefaultDeferredDeserializeThunk) + else if (this->GetOriginalEntryPoint_Unchecked() == DefaultDeferredDeserializeThunk) { defaultEntryPointInfo->jsMethod = ProfileDeferredDeserializeThunk; } @@ -4311,7 +4689,7 @@ namespace Js if (!this->HasValidEntryPoint()) { OUTPUT_TRACE_DEBUGONLY(Js::ScriptProfilerPhase, _u("FunctionBody::SetEntryToProfileMode, Assert due to HasValidEntryPoint(), directEntrypoint : 0x%0IX, originalentrypoint : 0x%0IX\n"), - this->GetDefaultEntryPointInfo()->jsMethod, this->originalEntryPoint); + this->GetDefaultEntryPointInfo()->jsMethod, this->GetOriginalEntryPoint()); AssertMsg(false, "Not a valid EntryPoint"); } @@ -4360,9 +4738,9 @@ namespace Js #endif // Store the originalEntryPoint to restore it back immediately. - JavascriptMethod originalEntryPoint = this->originalEntryPoint; + JavascriptMethod originalEntryPoint = this->GetOriginalEntryPoint_Unchecked(); this->CreateNewDefaultEntryPoint(); - this->originalEntryPoint = originalEntryPoint; + this->SetOriginalEntryPoint(originalEntryPoint); if (this->m_defaultEntryPointInfo) { this->GetDefaultFunctionEntryPointInfo()->entryPointIndex = 0; @@ -4499,11 +4877,11 @@ namespace Js defaultEntryPointInfo->jsMethod = DefaultDeferredParsingThunk; } - this->originalEntryPoint = DefaultDeferredParsingThunk; + this->SetOriginalEntryPoint(DefaultDeferredParsingThunk); // Abandon the shared type so a new function will get a new one this->deferredPrototypeType = nullptr; - this->attributes = (FunctionInfo::Attributes) (this->attributes | FunctionInfo::Attributes::DeferredParse); + this->SetAttributes((FunctionInfo::Attributes) (this->GetAttributes() | FunctionInfo::Attributes::DeferredParse)); } // Set other state back to before parse as well @@ -4547,7 +4925,7 @@ namespace Js this->entryPoints->ClearAndZero(); this->CreateNewDefaultEntryPoint(); - this->originalEntryPoint = DefaultEntryThunk; + this->SetOriginalEntryPoint(DefaultEntryThunk); m_defaultEntryPointInfo->jsMethod = m_scriptContext->CurrentThunk; if (this->deferredPrototypeType) @@ -4562,12 +4940,12 @@ namespace Js void FunctionBody::AddDeferParseAttribute() { - this->attributes = (FunctionInfo::Attributes) (this->attributes | DeferredParse); + this->SetAttributes((FunctionInfo::Attributes) (this->GetAttributes() | FunctionInfo::Attributes::DeferredParse)); } void FunctionBody::RemoveDeferParseAttribute() { - this->attributes = (FunctionInfo::Attributes) (this->attributes & (~DeferredParse)); + this->SetAttributes((FunctionInfo::Attributes) (this->GetAttributes() & (~FunctionInfo::Attributes::DeferredParse))); } Js::DebuggerScope * FunctionBody::GetDiagCatchScopeObjectAt(int byteCodeOffset) @@ -5660,7 +6038,9 @@ namespace Js uint FunctionBody::NewLiteralRegex() { - Assert(!this->GetLiteralRegexes()); + // We can't always assert that we have no regexes allocated, because this may be a function nested in a redeferred function, + // and we may be merely reusing the allocated regexes. + Assert(!this->GetLiteralRegexes() || this->byteCodeBlock); return IncLiteralRegexCount(); } @@ -6499,7 +6879,7 @@ namespace Js if(GetDefaultFunctionEntryPointInfo() == simpleJitEntryPointInfo) { Assert(GetExecutionMode() == ExecutionMode::SimpleJit); - const int newSimpleJitCallCount = max(0, simpleJitEntryPointInfo->callsCount + limitScale); + const int newSimpleJitCallCount = max(0, (int)simpleJitEntryPointInfo->callsCount + limitScale); Assert(static_cast(static_cast(newSimpleJitCallCount)) == newSimpleJitCallCount); SetSimpleJitCallCount(static_cast(newSimpleJitCallCount)); } @@ -6637,11 +7017,11 @@ namespace Js } // Simple JIT counts down and transitions on overflow - const uint8 callCount = simpleJitEntryPointInfo->callsCount; + const uint32 callCount = simpleJitEntryPointInfo->callsCount; Assert(simpleJitLimit == 0 ? callCount == 0 : simpleJitLimit > callCount); return callCount == 0 ? static_cast(simpleJitLimit) : - static_cast(simpleJitLimit) - callCount - 1; + static_cast(simpleJitLimit) - static_cast(callCount) - 1; } void FunctionBody::ResetSimpleJitLimitAndCallCount() @@ -7047,7 +7427,6 @@ namespace Js #endif this->Cleanup(isShutdown); this->CleanupSourceInfo(isShutdown); - this->ClearNestedFunctionParentFunctionReference(); this->CleanupFunctionProxyCounters(); } @@ -7188,6 +7567,7 @@ namespace Js } else { + inlineCache->Unregister(this->m_scriptContext); AllocatorDelete(CacheAllocator, this->m_scriptContext->GetIsInstInlineCacheAllocator(), inlineCache); } } @@ -7479,7 +7859,7 @@ namespace Js void FunctionBody::InitDisableInlineApply() { SetDisableInlineApply( - (this->functionId != Js::Constants::NoFunctionId && PHASE_OFF(Js::InlinePhase, this)) || + (this->GetLocalFunctionId() != Js::Constants::NoFunctionId && PHASE_OFF(Js::InlinePhase, this)) || PHASE_OFF(Js::InlineApplyPhase, this)); } @@ -9007,6 +9387,16 @@ namespace Js } #endif + bool FunctionEntryPointInfo::ExecutedSinceCallCountCollection() const + { + return this->callsCount != this->lastCallsCount; + } + + void FunctionEntryPointInfo::CollectCallCounts() + { + this->lastCallsCount = this->callsCount; + } + void FunctionEntryPointInfo::ReleasePendingWorkItem() { // Do this outside of Cleanup since cleanup can be called from the background thread @@ -9042,7 +9432,7 @@ namespace Js { if (this->IsCodeGenDone()) { - Assert(this->functionProxy->HasBody()); + Assert(this->functionProxy->GetFunctionInfo()->HasBody()); #if ENABLE_NATIVE_CODEGEN if (nullptr != this->inlineeFrameMap) { diff --git a/lib/Runtime/Base/FunctionBody.h b/lib/Runtime/Base/FunctionBody.h index 3703ad9f59d..6f1e63aab3d 100644 --- a/lib/Runtime/Base/FunctionBody.h +++ b/lib/Runtime/Base/FunctionBody.h @@ -17,6 +17,8 @@ class DynamicProfileMutatorImpl; #endif #define MAX_FUNCTION_BODY_DEBUG_STRING_SIZE 42 //11*3+8+1 +typedef BVSparse ActiveFunctionSet; + namespace Js { #pragma region Class Forward Declarations @@ -719,6 +721,11 @@ namespace Js return this->GetState() == CodeGenPending; } + bool IsCodeGenRecorded() const + { + return this->GetState() == CodeGenRecorded; + } + bool IsNativeCode() const { #if ENABLE_NATIVE_CODEGEN @@ -1056,8 +1063,8 @@ namespace Js int32 localVarChangedOffset; uint entryPointIndex; - uint8 callsCount; - uint8 lastCallsCount; + uint32 callsCount; + uint32 lastCallsCount; bool nativeEntryPointProcessed; private: @@ -1077,6 +1084,9 @@ namespace Js //End AsmJS Support #endif + bool ExecutedSinceCallCountCollection() const; + void CollectCallCounts(); + virtual FunctionBody *GetFunctionBody() const override; #if ENABLE_NATIVE_CODEGEN ExecutionMode GetJitMode() const; @@ -1285,8 +1295,8 @@ namespace Js class FunctionProxy; - typedef FunctionProxy** FunctionProxyArray; - typedef FunctionProxy** FunctionProxyPtrPtr; + typedef FunctionInfo** FunctionInfoArray; + typedef FunctionInfo** FunctionInfoPtrPtr; // // FunctionProxy represents a user defined function @@ -1294,7 +1304,7 @@ namespace Js // The function need not have been compiled yet- it could be parsed or compiled // at a later time // - class FunctionProxy : public FunctionInfo + class FunctionProxy : public FinalizableObject { static CriticalSection GlobalLock; public: @@ -1303,9 +1313,8 @@ namespace Js typedef JsUtil::List FunctionTypeWeakRefList; protected: - FunctionProxy(JavascriptMethod entryPoint, Attributes attributes, - LocalFunctionId functionId, ScriptContext* scriptContext, Utf8SourceInfo* utf8SourceInfo, uint functionNumber); - DEFINE_VTABLE_CTOR_NO_REGISTER(FunctionProxy, FunctionInfo); + FunctionProxy(ScriptContext* scriptContext, Utf8SourceInfo* utf8SourceInfo, uint functionNumber); + DEFINE_VTABLE_CTOR_NOBASE(FunctionProxy); enum class AuxPointerType : uint8 { DeferredStubs = 0, @@ -1343,6 +1352,8 @@ namespace Js void* GetAuxPtrWithLock(AuxPointerType e) const; void SetAuxPtr(AuxPointerType e, void* ptr); + FunctionInfo *functionInfo; + public: enum SetDisplayNameFlags { @@ -1351,6 +1362,55 @@ namespace Js SetDisplayNameFlagsRecyclerAllocated = 2 }; + virtual void Dispose(bool isShutdown) override + { + } + + virtual void Mark(Recycler *recycler) override { AssertMsg(false, "Mark called on object that isn't TrackableObject"); } + + static const uint GetOffsetOfFunctionInfo() { return offsetof(FunctionProxy, functionInfo); } + FunctionInfo * GetFunctionInfo() const + { + return this->functionInfo; + } + void SetFunctionInfo(FunctionInfo * functionInfo) + { + this->functionInfo = functionInfo; + } + + LocalFunctionId GetLocalFunctionId() const; + void SetLocalFunctionId(LocalFunctionId functionId); + + ParseableFunctionInfo* GetParseableFunctionInfo() const; + ParseableFunctionInfo** GetParseableFunctionInfoRef() const; + DeferDeserializeFunctionInfo* GetDeferDeserializeFunctionInfo() const; + FunctionBody * GetFunctionBody() const; + + void VerifyOriginalEntryPoint() const; + JavascriptMethod GetOriginalEntryPoint() const; + JavascriptMethod GetOriginalEntryPoint_Unchecked() const; + void SetOriginalEntryPoint(const JavascriptMethod originalEntryPoint); + + bool IsAsync() const; + bool IsDeferred() const; + bool IsLambda() const; + bool IsConstructor() const; + bool IsGenerator() const; + bool IsClassConstructor() const; + bool IsClassMethod() const; + bool IsModule() const; + bool HasSuperReference() const; + bool IsCoroutine() const; + bool GetCapturesThis() const; + void SetCapturesThis(); + bool GetEnclosedByGlobalFunc() const; + void SetEnclosedByGlobalFunc(); + bool CanBeDeferred() const; + BOOL IsDeferredDeserializeFunction() const; + BOOL IsDeferredParseFunction() const; + FunctionInfo::Attributes GetAttributes() const; + void SetAttributes(FunctionInfo::Attributes attributes); + Recycler* GetRecycler() const; uint32 GetSourceContextId() const; char16* GetDebugNumberSet(wchar(&bufferToWriteTo)[MAX_FUNCTION_BODY_DEBUG_STRING_SIZE]) const; @@ -1362,8 +1422,6 @@ namespace Js ScriptContext* GetScriptContext() const; Utf8SourceInfo* GetUtf8SourceInfo() const { return this->m_utf8SourceInfo; } void SetUtf8SourceInfo(Utf8SourceInfo* utf8SourceInfo) { m_utf8SourceInfo = utf8SourceInfo; } - void SetReferenceInParentFunction(FunctionProxyPtrPtr reference); - void UpdateReferenceInParentFunction(FunctionProxy* newFunctionInfo); bool IsInDebugMode() const { return this->m_utf8SourceInfo->IsInDebugMode(); } DWORD_PTR GetSecondaryHostSourceContext() const; @@ -1377,6 +1435,8 @@ namespace Js void UpdateFunctionBodyImpl(FunctionBody* body); bool IsFunctionBody() const; + uint GetCompileCount() const; + void SetCompileCount(uint count); ProxyEntryPointInfo* GetDefaultEntryPointInfo() const; ScriptFunctionType * GetDeferredPrototypeType() const; ScriptFunctionType * EnsureDeferredPrototypeType(); @@ -1384,6 +1444,8 @@ namespace Js // Function object type list methods FunctionTypeWeakRefList* EnsureFunctionObjectTypeList(); + FunctionTypeWeakRefList* GetFunctionObjectTypeList() const; + void SetFunctionObjectTypeList(FunctionTypeWeakRefList* list); void RegisterFunctionObjectType(DynamicType* functionType); template void MapFunctionObjectTypes(Fn func); @@ -1446,7 +1508,6 @@ namespace Js NoWriteBarrierPtr m_scriptContext; // Memory context for this function body WriteBarrierPtr m_utf8SourceInfo; // WriteBarrier-TODO: Consider changing this to NoWriteBarrierPtr, and skip tagging- also, tagging is likely unnecessary since that pointer in question is likely not resolvable - FunctionProxyPtrPtr m_referenceInParentFunction; // Reference to nested function reference to this function in the parent function body (tagged to not be actual reference) WriteBarrierPtr deferredPrototypeType; WriteBarrierPtr m_defaultEntryPointInfo; // The default entry point info for the function proxy @@ -1454,6 +1515,7 @@ namespace Js bool m_isTopLevel : 1; // Indicates that this function is top-level function, currently being used in script profiler and debugger bool m_isPublicLibraryCode: 1; // Indicates this function is public boundary library code that should be visible in JS stack + bool m_canBeDeferred : 1; void CleanupFunctionProxyCounters() { PERF_COUNTER_DEC(Code, TotalFunction); @@ -1467,6 +1529,219 @@ namespace Js ScriptFunctionType * AllocDeferredPrototypeType(); }; + inline Js::LocalFunctionId FunctionProxy::GetLocalFunctionId() const + { + Assert(GetFunctionInfo()); + return GetFunctionInfo()->GetLocalFunctionId(); + } + + inline void FunctionProxy::SetLocalFunctionId(LocalFunctionId functionId) + { + Assert(GetFunctionInfo()); + Assert(GetFunctionInfo()->GetFunctionProxy() == this); + return GetFunctionInfo()->SetLocalFunctionId(functionId); + } + + inline void FunctionProxy::VerifyOriginalEntryPoint() const + { + Assert(GetFunctionInfo()); + Assert(GetFunctionInfo()->GetFunctionProxy() == this); + return GetFunctionInfo()->VerifyOriginalEntryPoint(); + } + + inline JavascriptMethod FunctionProxy::GetOriginalEntryPoint() const + { + Assert(GetFunctionInfo()); + Assert(GetFunctionInfo()->GetFunctionProxy() == this); + return GetFunctionInfo()->GetOriginalEntryPoint(); + } + + inline JavascriptMethod FunctionProxy::GetOriginalEntryPoint_Unchecked() const + { + Assert(GetFunctionInfo()); + Assert(GetFunctionInfo()->GetFunctionProxy() == this); + return GetFunctionInfo()->GetOriginalEntryPoint_Unchecked(); + } + + inline void FunctionProxy::SetOriginalEntryPoint(const JavascriptMethod originalEntryPoint) + { + Assert(GetFunctionInfo()); + Assert(GetFunctionInfo()->GetFunctionProxy() == this); + GetFunctionInfo()->SetOriginalEntryPoint(originalEntryPoint); + } + + inline bool FunctionProxy::IsAsync() const + { + Assert(GetFunctionInfo()); + Assert(GetFunctionInfo()->GetFunctionProxy() == this); + return GetFunctionInfo()->IsAsync(); + } + + inline bool FunctionProxy::IsDeferred() const + { + Assert(GetFunctionInfo()); + Assert(GetFunctionInfo()->GetFunctionProxy() == this); + return GetFunctionInfo()->IsDeferred(); + } + + inline bool FunctionProxy::IsConstructor() const + { + Assert(GetFunctionInfo()); + Assert(GetFunctionInfo()->GetFunctionProxy() == this); + return GetFunctionInfo()->IsConstructor(); + } + + inline bool FunctionProxy::IsGenerator() const + { + Assert(GetFunctionInfo()); + Assert(GetFunctionInfo()->GetFunctionProxy() == this); + return GetFunctionInfo()->IsGenerator(); + } + + inline bool FunctionProxy::HasSuperReference() const + { + Assert(GetFunctionInfo()); + Assert(GetFunctionInfo()->GetFunctionProxy() == this); + return GetFunctionInfo()->HasSuperReference(); + } + + inline bool FunctionProxy::IsCoroutine() const + { + Assert(GetFunctionInfo()); + Assert(GetFunctionInfo()->GetFunctionProxy() == this); + return GetFunctionInfo()->IsCoroutine(); + } + + inline bool FunctionProxy::GetCapturesThis() const + { + Assert(GetFunctionInfo()); + Assert(GetFunctionInfo()->GetFunctionProxy() == this); + return GetFunctionInfo()->GetCapturesThis(); + } + + inline void FunctionProxy::SetCapturesThis() + { + Assert(GetFunctionInfo()); + Assert(GetFunctionInfo()->GetFunctionProxy() == this); + GetFunctionInfo()->SetCapturesThis(); + } + + inline bool FunctionProxy::GetEnclosedByGlobalFunc() const + { + Assert(GetFunctionInfo()); + Assert(GetFunctionInfo()->GetFunctionProxy() == this); + return GetFunctionInfo()->GetEnclosedByGlobalFunc(); + } + + inline void FunctionProxy::SetEnclosedByGlobalFunc() + { + Assert(GetFunctionInfo()); + Assert(GetFunctionInfo()->GetFunctionProxy() == this); + GetFunctionInfo()->SetEnclosedByGlobalFunc(); + } + + inline BOOL FunctionProxy::IsDeferredDeserializeFunction() const + { + Assert(GetFunctionInfo()); + Assert(GetFunctionInfo()->GetFunctionProxy() == this); + return GetFunctionInfo()->IsDeferredDeserializeFunction(); + } + + inline BOOL FunctionProxy::IsDeferredParseFunction() const + { + Assert(GetFunctionInfo()); + Assert(GetFunctionInfo()->GetFunctionProxy() == this); + return GetFunctionInfo()->IsDeferredParseFunction(); + } + + inline FunctionInfo::Attributes FunctionProxy::GetAttributes() const + { + Assert(GetFunctionInfo()); + Assert(GetFunctionInfo()->GetFunctionProxy() == this); + return GetFunctionInfo()->GetAttributes(); + } + + inline void FunctionProxy::SetAttributes(FunctionInfo::Attributes attributes) + { + Assert(GetFunctionInfo()); + Assert(GetFunctionInfo()->GetFunctionProxy() == this); + GetFunctionInfo()->SetAttributes(attributes); + } + + inline ParseableFunctionInfo** FunctionProxy::GetParseableFunctionInfoRef() const + { + Assert(GetFunctionInfo()); + Assert(GetFunctionInfo()->GetFunctionProxy() == this); + return GetFunctionInfo()->GetParseableFunctionInfoRef(); + } + + inline bool FunctionProxy::IsLambda() const + { + Assert(GetFunctionInfo()); + Assert(GetFunctionInfo()->GetFunctionProxy() == this); + return GetFunctionInfo()->IsLambda(); + } + + inline bool FunctionProxy::CanBeDeferred() const + { + Assert(GetFunctionInfo()); + Assert(GetFunctionInfo()->GetFunctionProxy() == this); + return GetFunctionInfo()->CanBeDeferred(); + } + + inline bool FunctionProxy::IsClassConstructor() const + { + Assert(GetFunctionInfo()); + Assert(GetFunctionInfo()->GetFunctionProxy() == this); + return GetFunctionInfo()->IsClassConstructor(); + } + + inline bool FunctionProxy::IsClassMethod() const + { + Assert(GetFunctionInfo()); + Assert(GetFunctionInfo()->GetFunctionProxy() == this); + return GetFunctionInfo()->IsClassMethod(); + } + + inline bool FunctionProxy::IsModule() const + { + Assert(GetFunctionInfo()); + Assert(GetFunctionInfo()->GetFunctionProxy() == this); + return GetFunctionInfo()->IsModule(); + } + + inline uint FunctionProxy::GetCompileCount() const + { + Assert(GetFunctionInfo()); + Assert(GetFunctionInfo()->GetFunctionProxy() == this); + return GetFunctionInfo()->GetCompileCount(); + } + + inline void FunctionProxy::SetCompileCount(uint count) + { + Assert(GetFunctionInfo()); + Assert(GetFunctionInfo()->GetFunctionProxy() == this); + GetFunctionInfo()->SetCompileCount(count); + } + + inline ParseableFunctionInfo* FunctionProxy::GetParseableFunctionInfo() const + { + Assert(!IsDeferredDeserializeFunction()); + return (ParseableFunctionInfo*)this; + } + + inline DeferDeserializeFunctionInfo* FunctionProxy::GetDeferDeserializeFunctionInfo() const + { + Assert(IsDeferredDeserializeFunction()); + return (DeferDeserializeFunctionInfo*)this; + } + + inline FunctionBody * FunctionProxy::GetFunctionBody() const + { + Assert(IsFunctionBody()); + return (FunctionBody*)this; + } + // Represents a function from the byte code cache which will // be deserialized upon use class DeferDeserializeFunctionInfo: public FunctionProxy @@ -1474,9 +1749,9 @@ namespace Js friend struct ByteCodeSerializer; private: - DeferDeserializeFunctionInfo(int nestedFunctionCount, LocalFunctionId functionId, ByteCodeCache* byteCodeCache, const byte* serializedFunction, Utf8SourceInfo* sourceInfo, ScriptContext* scriptContext, uint functionNumber, const char16* displayName, uint displayNameLength, uint displayShortNameOffset, NativeModule *nativeModule, Attributes attributes); + DeferDeserializeFunctionInfo(int nestedFunctionCount, LocalFunctionId functionId, ByteCodeCache* byteCodeCache, const byte* serializedFunction, Utf8SourceInfo* sourceInfo, ScriptContext* scriptContext, uint functionNumber, const char16* displayName, uint displayNameLength, uint displayShortNameOffset, NativeModule *nativeModule, FunctionInfo::Attributes attributes); public: - static DeferDeserializeFunctionInfo* New(ScriptContext* scriptContext, int nestedFunctionCount, LocalFunctionId functionId, ByteCodeCache* byteCodeCache, const byte* serializedFunction, Utf8SourceInfo* utf8SourceInfo, const char16* displayName, uint displayNameLength, uint displayShortNameOffset, NativeModule *nativeModule, Attributes attributes); + static DeferDeserializeFunctionInfo* New(ScriptContext* scriptContext, int nestedFunctionCount, LocalFunctionId functionId, ByteCodeCache* byteCodeCache, const byte* serializedFunction, Utf8SourceInfo* utf8SourceInfo, const char16* displayName, uint displayNameLength, uint displayShortNameOffset, NativeModule *nativeModule, FunctionInfo::Attributes attributes); virtual void Finalize(bool isShutdown) override; FunctionBody* Deserialize(); @@ -1500,15 +1775,32 @@ namespace Js { friend class ByteCodeBufferReader; + public: + + enum FunctionBodyFlags : byte + { + Flags_None = 0x00, + Flags_StackNestedFunc = 0x01, + Flags_HasOrParentHasArguments = 0x02, + Flags_HasTry = 0x04, + Flags_HasThis = 0x08, + Flags_NonUserCode = 0x10, + Flags_HasOnlyThisStatements = 0x20, + Flags_HasNoExplicitReturnValue = 0x40, // Returns undefined, i.e. has no return statements or return with no expression + Flags_HasRestParameter = 0x80 + }; + protected: - ParseableFunctionInfo(JavascriptMethod method, int nestedFunctionCount, LocalFunctionId functionId, Utf8SourceInfo* sourceInfo, ScriptContext* scriptContext, uint functionNumber, const char16* displayName, uint m_displayNameLength, uint displayShortNameOffset, Attributes attributes, Js::PropertyRecordList* propertyRecordList); + ParseableFunctionInfo(JavascriptMethod method, int nestedFunctionCount, LocalFunctionId functionId, Utf8SourceInfo* sourceInfo, ScriptContext* scriptContext, uint functionNumber, const char16* displayName, uint m_displayNameLength, uint displayShortNameOffset, FunctionInfo::Attributes attributes, Js::PropertyRecordList* propertyRecordList, FunctionBodyFlags flags); + + ParseableFunctionInfo(ParseableFunctionInfo * proxy); public: struct NestedArray { NestedArray(uint32 count) :nestedCount(count) {} uint32 nestedCount; - FunctionProxy* functionProxyArray[0]; + FunctionInfo* functionInfoArray[0]; }; template void ForEachNestedFunc(Fn fn) @@ -1518,7 +1810,7 @@ namespace Js { for (uint i = 0; i < nestedArray->nestedCount; i++) { - if (!fn(nestedArray->functionProxyArray[i], i)) + if (!fn(nestedArray->functionInfoArray[i]->GetFunctionProxy(), i)) { break; } @@ -1530,13 +1822,46 @@ namespace Js uint GetNestedCount() const { return nestedArray == nullptr ? 0 : nestedArray->nestedCount; } public: - static ParseableFunctionInfo* New(ScriptContext* scriptContext, int nestedFunctionCount, LocalFunctionId functionId, Utf8SourceInfo* utf8SourceInfo, const char16* displayName, uint m_displayNameLength, uint displayShortNameOffset, Js::PropertyRecordList* propertyRecordList, Attributes attributes); + static ParseableFunctionInfo* New(ScriptContext* scriptContext, int nestedFunctionCount, LocalFunctionId functionId, Utf8SourceInfo* utf8SourceInfo, const char16* displayName, uint m_displayNameLength, uint displayShortNameOffset, Js::PropertyRecordList* propertyRecordList, FunctionInfo::Attributes attributes, FunctionBodyFlags flags); + static ParseableFunctionInfo* NewDeferredFunctionFromFunctionBody(FunctionBody *functionBody); DEFINE_VTABLE_CTOR_NO_REGISTER(ParseableFunctionInfo, FunctionProxy); FunctionBody* Parse(ScriptFunction ** functionRef = nullptr, bool isByteCodeDeserialization = false); #ifdef ASMJS_PLAT FunctionBody* ParseAsmJs(Parser * p, __out CompileScriptException * se, __out ParseNodePtr * ptree); #endif + + FunctionBodyFlags GetFlags() const { return flags; } + + static bool GetHasThis(FunctionBodyFlags flags) { return (flags & Flags_HasThis) != 0; } + bool GetHasThis() const { return GetHasThis(flags); } + void SetHasThis(bool has) { SetFlags(has, Flags_HasThis); } + + static bool GetHasTry(FunctionBodyFlags flags) { return (flags & Flags_HasTry) != 0; } + bool GetHasTry() const { return GetHasTry(flags); } + void SetHasTry(bool has) { SetFlags(has, Flags_HasTry); } + + static bool GetHasOrParentHasArguments(FunctionBodyFlags flags) { return (flags & Flags_HasOrParentHasArguments) != 0; } + bool GetHasOrParentHasArguments() const { return GetHasOrParentHasArguments(flags); } + void SetHasOrParentHasArguments(bool has) { SetFlags(has, Flags_HasOrParentHasArguments); } + + static bool DoStackNestedFunc(FunctionBodyFlags flags) { return (flags & Flags_StackNestedFunc) != 0; } + bool DoStackNestedFunc() const { return DoStackNestedFunc(flags); } + void SetStackNestedFunc(bool does) { SetFlags(does, Flags_StackNestedFunc); } + + bool IsNonUserCode() const { return (flags & Flags_NonUserCode) != 0; } + void SetIsNonUserCode(bool set); + + bool GetHasNoExplicitReturnValue() { return (flags & Flags_HasNoExplicitReturnValue) != 0; } + void SetHasNoExplicitReturnValue(bool has) { SetFlags(has, Flags_HasNoExplicitReturnValue); } + + bool GetHasOnlyThisStmts() const { return (flags & Flags_HasOnlyThisStatements) != 0; } + void SetHasOnlyThisStmts(bool has) { SetFlags(has, Flags_HasOnlyThisStatements); } + + static bool GetHasRestParameter(FunctionBodyFlags flags) { return (flags & Flags_HasRestParameter) != 0; } + bool GetHasRestParameter() const { return GetHasRestParameter(flags); } + void SetHasRestParameter() { SetFlags(true, Flags_HasRestParameter); } + virtual uint GetDisplayNameLength() const { return m_displayNameLength; } virtual uint GetShortDisplayNameOffset() const { return m_displayShortNameOffset; } bool GetIsDeclaration() const { return m_isDeclaration; } @@ -1697,7 +2022,9 @@ namespace Js void SetSourceInfo(uint sourceIndex, ParseNodePtr node, bool isEval, bool isDynamicFunction); void SetSourceInfo(uint sourceIndex); + void Copy(ParseableFunctionInfo * other); void Copy(FunctionBody* other); + void CopyNestedArray(ParseableFunctionInfo * other); const char16* GetExternalDisplayName() const; @@ -1727,26 +2054,32 @@ namespace Js this->SetAuxPtr(AuxPointerType::CachedSourceString, sourceString); } - FunctionProxyArray GetNestedFuncArray(); - FunctionProxy* GetNestedFunc(uint index); - FunctionProxyPtrPtr GetNestedFuncReference(uint index); + FunctionInfoArray GetNestedFuncArray(); + FunctionInfo* GetNestedFunc(uint index); + FunctionInfoPtrPtr GetNestedFuncReference(uint index); + FunctionProxy* GetNestedFunctionProxy(uint index); ParseableFunctionInfo* GetNestedFunctionForExecution(uint index); - void SetNestedFunc(FunctionProxy* nestedFunc, uint index, uint32 flags); - void ClearNestedFunctionParentFunctionReference(); - - void SetCapturesThis() { attributes = (Attributes)(attributes | Attributes::CapturesThis); } - bool GetCapturesThis() { return (attributes & Attributes::CapturesThis) != 0; } - - void SetEnclosedByGlobalFunc() { attributes = (Attributes)(attributes | Attributes::EnclosedByGlobalFunc ); } - bool GetEnclosedByGlobalFunc() { return (attributes & Attributes::EnclosedByGlobalFunc) != 0; } - + void SetNestedFunc(FunctionInfo* nestedFunc, uint index, uint32 flags); void BuildDeferredStubs(ParseNode *pnodeFnc); DeferredFunctionStub *GetDeferredStubs() const { return static_cast(this->GetAuxPtr(AuxPointerType::DeferredStubs)); } void SetDeferredStubs(DeferredFunctionStub *stub) { this->SetAuxPtr(AuxPointerType::DeferredStubs, stub); } void RegisterFuncToDiag(ScriptContext * scriptContext, char16 const * pszTitle); + protected: static HRESULT MapDeferredReparseError(HRESULT& hrParse, const CompileScriptException& se); + void SetFlags(bool does, FunctionBodyFlags newFlags) + { + if (does) + { + flags = (FunctionBodyFlags)(flags | newFlags); + } + else + { + flags = (FunctionBodyFlags)(flags & ~newFlags); + } + } + bool m_hasBeenParsed : 1; // Has function body been parsed- true for actual function bodies, false for deferparse bool m_isDeclaration : 1; bool m_isAccessor : 1; // Function is a property getter or setter @@ -2069,19 +2402,6 @@ namespace Js // This value be set on the stack (on a particular offset), when the frame value got changed. static const int LocalsChangeDirtyValue = 1; - enum FunctionBodyFlags : byte - { - Flags_None = 0x00, - Flags_StackNestedFunc = 0x01, - Flags_HasOrParentHasArguments = 0x02, - Flags_HasTry = 0x04, - Flags_HasThis = 0x08, - Flags_NonUserCode = 0x10, - Flags_HasOnlyThisStatements = 0x20, - Flags_HasNoExplicitReturnValue = 0x40, // Returns undefined, i.e. has no return statements or return with no expression - Flags_HasRestParameter = 0x80 - }; - #define DEFINE_FUNCTION_BODY_FIELDS 1 #define CURRENT_ACCESS_MODIFIER public: #include "SerializableFunctionFields.h" @@ -2175,8 +2495,10 @@ namespace Js NoWriteBarrierField committedProfiledIterations; NoWriteBarrierField m_depth; // Indicates how many times the function has been entered (so increases by one on each recursive call, decreases by one when we're done) + NoWriteBarrierField inactiveCount; uint32 interpretedCount; + uint32 lastInterpretedCount; uint32 loopInterpreterLimit; uint32 debuggerScopeIndex; uint32 savedPolymorphicCacheState; @@ -2206,12 +2528,14 @@ namespace Js #endif FunctionBody(ScriptContext* scriptContext, const char16* displayName, uint displayNameLength, uint displayShortNameOffset, uint nestedCount, Utf8SourceInfo* sourceInfo, - uint uFunctionNumber, uint uScriptId, Js::LocalFunctionId functionId, Js::PropertyRecordList* propRecordList, Attributes attributes, FunctionBodyFlags flags + uint uFunctionNumber, uint uScriptId, Js::LocalFunctionId functionId, Js::PropertyRecordList* propRecordList, FunctionInfo::Attributes attributes, FunctionBodyFlags flags #ifdef PERF_COUNTERS , bool isDeserializedFunction = false #endif ); + FunctionBody(ParseableFunctionInfo * parseableFunctionInfo); + void SetNativeEntryPoint(FunctionEntryPointInfo* entryPointInfo, JavascriptMethod originalEntryPoint, JavascriptMethod directEntryPoint); #if DYNAMIC_INTERPRETER_THUNK void GenerateDynamicInterpreterThunk(); @@ -2225,7 +2549,7 @@ namespace Js public: FunctionBody(ByteCodeCache* cache, Utf8SourceInfo* sourceInfo, ScriptContext* scriptContext): - ParseableFunctionInfo((JavascriptMethod) nullptr, 0, (LocalFunctionId) 0, sourceInfo, scriptContext, 0, nullptr, 0, 0, None, nullptr) + ParseableFunctionInfo((JavascriptMethod) nullptr, 0, (LocalFunctionId) 0, sourceInfo, scriptContext, 0, nullptr, 0, 0, FunctionInfo::Attributes::None, nullptr, Flags_None) { // Dummy constructor- does nothing // Must be stack allocated @@ -2233,23 +2557,36 @@ namespace Js } static FunctionBody * NewFromRecycler(Js::ScriptContext * scriptContext, const char16 * displayName, uint displayNameLength, uint displayShortNameOffset, uint nestedCount, - Utf8SourceInfo* sourceInfo, uint uScriptId, Js::LocalFunctionId functionId, Js::PropertyRecordList* boundPropertyRecords, Attributes attributes + Utf8SourceInfo* sourceInfo, uint uScriptId, Js::LocalFunctionId functionId, Js::PropertyRecordList* boundPropertyRecords, FunctionInfo::Attributes attributes , FunctionBodyFlags flags #ifdef PERF_COUNTERS , bool isDeserializedFunction #endif ); static FunctionBody * NewFromRecycler(Js::ScriptContext * scriptContext, const char16 * displayName, uint displayNameLength, uint displayShortNameOffset, uint nestedCount, - Utf8SourceInfo* sourceInfo, uint uFunctionNumber, uint uScriptId, Js::LocalFunctionId functionId, Js::PropertyRecordList* boundPropertyRecords, Attributes attributes + Utf8SourceInfo* sourceInfo, uint uFunctionNumber, uint uScriptId, Js::LocalFunctionId functionId, Js::PropertyRecordList* boundPropertyRecords, FunctionInfo::Attributes attributes , FunctionBodyFlags flags #ifdef PERF_COUNTERS , bool isDeserializedFunction #endif ); + static FunctionBody * NewFromParseableFunctionInfo(ParseableFunctionInfo * info); + FunctionEntryPointInfo * GetEntryPointInfo(int index) const; FunctionEntryPointInfo * TryGetEntryPointInfo(int index) const; + bool DoRedeferFunction(uint inactiveThreshold) const; + void RedeferFunction(); + bool IsActiveFunction(ActiveFunctionSet * pActiveFuncs) const; + bool TestAndUpdateActiveFunctions(ActiveFunctionSet * pActiveFuncs) const; + void UpdateActiveFunctionSet(ActiveFunctionSet * pActiveFuncs) const; + uint GetInactiveCount() const { return inactiveCount; } + void SetInactiveCount(uint count) { inactiveCount = count; } + void IncrInactiveCount(uint increment); + bool InterpretedSinceCallCountCollection() const; + void CollectInterpretedCounts(); + Js::RootObjectBase * LoadRootObject() const; Js::RootObjectBase * GetRootObject() const; ByteBlock* GetAuxiliaryData() const { return static_cast(this->GetAuxPtr(AuxPointerType::AuxBlock)); } @@ -2261,7 +2598,7 @@ namespace Js void SetFormalsPropIdArray(PropertyIdArray * propIdArray); PropertyIdArray* GetFormalsPropIdArray(bool checkForNull = true); Var GetFormalsPropIdArrayOrNullObj(); - ByteBlock* GetByteCode(); + ByteBlock* GetByteCode() const; ByteBlock* GetOriginalByteCode(); // Returns original bytecode without probes (such as BPs). Js::ByteCodeCache * GetByteCodeCache() const { return this->byteCodeCache; } void SetByteCodeCache(Js::ByteCodeCache *byteCodeCache) @@ -2499,8 +2836,6 @@ namespace Js void CleanupPerfCounter(); #endif - virtual void Dispose(bool isShutdown) override { } - bool HasRejit() const { if(this->entryPoints) @@ -2619,6 +2954,7 @@ namespace Js // Field accessors bool GetHasBailoutInstrInJittedCode() const { return this->m_hasBailoutInstrInJittedCode; } void SetHasBailoutInstrInJittedCode(bool hasBailout) { this->m_hasBailoutInstrInJittedCode = hasBailout; } + bool GetCanDefer() const { return this->functionInfo->CanBeDeferred() && this->m_depth == 0; } bool GetCanReleaseLoopHeaders() const { return (this->m_depth == 0); } void SetPendingLoopHeaderRelease(bool pendingLoopHeaderRelease) { this->m_pendingLoopHeaderRelease = pendingLoopHeaderRelease; } @@ -2674,7 +3010,7 @@ namespace Js void SetDisableInlineApply(bool set); bool IsInlineSpreadDisabled() const { return disableInlineSpread; } - void InitDisableInlineSpread() { disableInlineSpread = this->functionId != Js::Constants::NoFunctionId && PHASE_OFF(Js::InlinePhase, this); } + void InitDisableInlineSpread() { disableInlineSpread = this->GetLocalFunctionId() != Js::Constants::NoFunctionId && PHASE_OFF(Js::InlinePhase, this); } void SetDisableInlineSpread(bool set) { disableInlineSpread = set; } bool CheckCalleeContextForInlining(FunctionProxy* calleeFunctionProxy); @@ -2805,50 +3141,22 @@ namespace Js private: void ResetProfileIds(); - void SetFlags(bool does, FunctionBodyFlags newFlags) - { - if (does) - { - flags = (FunctionBodyFlags)(flags | newFlags); - } - else - { - flags = (FunctionBodyFlags)(flags & ~newFlags); - } - } public: - FunctionBodyFlags GetFlags() { return this->flags; } - - static bool GetHasThis(FunctionBodyFlags flags) { return (flags & Flags_HasThis) != 0; } - bool GetHasThis() const { return GetHasThis(this->flags); } - void SetHasThis(bool has) { SetFlags(has, Flags_HasThis); } - - static bool GetHasTry(FunctionBodyFlags flags) { return (flags & Flags_HasTry) != 0; } - bool GetHasTry() const { return GetHasTry(this->flags); } - void SetHasTry(bool has) { SetFlags(has, Flags_HasTry); } - bool GetHasFinally() const { return m_hasFinally; } void SetHasFinally(bool has){ m_hasFinally = has; } bool GetFuncEscapes() const { return funcEscapes; } void SetFuncEscapes(bool does) { funcEscapes = does; } - static bool GetHasOrParentHasArguments(FunctionBodyFlags flags) { return (flags & Flags_HasOrParentHasArguments) != 0; } - bool GetHasOrParentHasArguments() const { return GetHasOrParentHasArguments(this->flags); } - void SetHasOrParentHasArguments(bool has) { SetFlags(has, Flags_HasOrParentHasArguments); } - - static bool DoStackNestedFunc(FunctionBodyFlags flags) { return (flags & Flags_StackNestedFunc) != 0; } - bool DoStackNestedFunc() const { return DoStackNestedFunc(flags); } - void SetStackNestedFunc(bool does) { SetFlags(does, Flags_StackNestedFunc); } #if DBG bool CanDoStackNestedFunc() const { return m_canDoStackNestedFunc; } void SetCanDoStackNestedFunc() { m_canDoStackNestedFunc = true; } #endif - RecyclerWeakReference * GetStackNestedFuncParent(); - FunctionBody * GetStackNestedFuncParentStrongRef(); - FunctionBody * GetAndClearStackNestedFuncParent(); + RecyclerWeakReference * GetStackNestedFuncParent(); + FunctionInfo * GetStackNestedFuncParentStrongRef(); + FunctionInfo * GetAndClearStackNestedFuncParent(); void ClearStackNestedFuncParent(); - void SetStackNestedFuncParent(FunctionBody * parentFunctionBody); + void SetStackNestedFuncParent(FunctionInfo * parentFunctionInfo); uint GetScopeSlotArraySize() const { @@ -2874,25 +3182,12 @@ namespace Js bool DoStackFrameDisplay() const { return DoStackClosure(this) && !PHASE_OFF(StackClosurePhase, this); } bool DoStackScopeSlots() const { return DoStackClosure(this) && !PHASE_OFF(StackClosurePhase, this); } - bool IsNonUserCode() const { return (flags & Flags_NonUserCode) != 0; } - void SetIsNonUserCode(bool set); - - bool GetHasNoExplicitReturnValue() { return (flags & Flags_HasNoExplicitReturnValue) != 0; } - void SetHasNoExplicitReturnValue(bool has) { SetFlags(has, Flags_HasNoExplicitReturnValue); } - - bool GetHasOnlyThisStmts() const { return (flags & Flags_HasOnlyThisStatements) != 0; } - void SetHasOnlyThisStmts(bool has) { SetFlags(has, Flags_HasOnlyThisStatements); } - bool GetIsFirstFunctionObject() const { return m_firstFunctionObject; } void SetIsNotFirstFunctionObject() { m_firstFunctionObject = false; } bool GetInlineCachesOnFunctionObject() { return m_inlineCachesOnFunctionObject; } void SetInlineCachesOnFunctionObject(bool has) { m_inlineCachesOnFunctionObject = has; } - static bool GetHasRestParameter(FunctionBodyFlags flags) { return (flags & Flags_HasRestParameter) != 0; } - bool GetHasRestParameter() const { return GetHasRestParameter(this->flags); } - void SetHasRestParameter() { SetFlags(true, Flags_HasRestParameter); } - bool NeedScopeObjectForArguments(bool hasNonSimpleParams) { Assert(HasReferenceableBuiltInArguments()); diff --git a/lib/Runtime/Base/FunctionInfo.cpp b/lib/Runtime/Base/FunctionInfo.cpp index ae9f93c7f02..3259ebeda11 100644 --- a/lib/Runtime/Base/FunctionInfo.cpp +++ b/lib/Runtime/Base/FunctionInfo.cpp @@ -7,7 +7,7 @@ namespace Js { FunctionInfo::FunctionInfo(JavascriptMethod entryPoint, Attributes attributes, LocalFunctionId functionId, FunctionProxy* functionBodyImpl) - : originalEntryPoint(entryPoint), attributes(attributes), functionBodyImpl(functionBodyImpl), functionId(functionId) + : originalEntryPoint(entryPoint), attributes(attributes), functionBodyImpl(functionBodyImpl), functionId(functionId), compileCount(0) { #if !DYNAMIC_INTERPRETER_THUNK Assert(entryPoint != nullptr); @@ -40,8 +40,7 @@ namespace Js FunctionBody * FunctionInfo::GetFunctionBody() const { - Assert(functionBodyImpl == nullptr || functionBodyImpl->IsFunctionBody()); - return (FunctionBody *)functionBodyImpl; + return functionBodyImpl == nullptr ? nullptr : functionBodyImpl->GetFunctionBody(); } FunctionInfo::Attributes FunctionInfo::GetAttributes(Js::RecyclableObject * function) diff --git a/lib/Runtime/Base/FunctionInfo.h b/lib/Runtime/Base/FunctionInfo.h index 89f7c4cff73..32afa8f399a 100644 --- a/lib/Runtime/Base/FunctionInfo.h +++ b/lib/Runtime/Base/FunctionInfo.h @@ -38,10 +38,16 @@ namespace Js Async = 0x10000, Module = 0x20000, // The function is the function body wrapper for a module EnclosedByGlobalFunc = 0x40000, + CanDefer = 0x80000 }; - FunctionInfo(JavascriptMethod entryPoint, Attributes attributes = None, LocalFunctionId functionId = Js::Constants::NoFunctionId, FunctionProxy* functionBodyImpl = NULL); + FunctionInfo(JavascriptMethod entryPoint, Attributes attributes = None, LocalFunctionId functionId = Js::Constants::NoFunctionId, FunctionProxy* functionBodyImpl = nullptr); static DWORD GetFunctionBodyImplOffset() { return offsetof(FunctionInfo, functionBodyImpl); } + static BYTE GetOffsetOfFunctionProxy() + { + CompileAssert(offsetof(FunctionInfo, functionBodyImpl) <= UCHAR_MAX); + return offsetof(FunctionInfo, functionBodyImpl); + } static DWORD GetAttributesOffset() { return offsetof(FunctionInfo, attributes); } void VerifyOriginalEntryPoint() const; @@ -62,6 +68,7 @@ namespace Js bool IsClassMethod() const { return ((this->attributes & ClassMethod) != 0); } bool IsModule() const { return ((this->attributes & Module) != 0); } bool HasSuperReference() const { return ((this->attributes & SuperReference) != 0); } + bool CanBeDeferred() const { return ((this->attributes & CanDefer) != 0); } static bool IsCoroutine(Attributes attributes) { return ((attributes & (Async | Generator)) != 0); } bool IsCoroutine() const { return IsCoroutine(this->attributes); } @@ -73,10 +80,14 @@ namespace Js { return functionBodyImpl; } + void SetFunctionProxy(FunctionProxy * proxy) + { + functionBodyImpl = proxy; + } ParseableFunctionInfo* GetParseableFunctionInfo() const { - Assert(functionBodyImpl == NULL || !IsDeferredDeserializeFunction()); - return (ParseableFunctionInfo*) functionBodyImpl; + Assert(functionBodyImpl == nullptr || !IsDeferredDeserializeFunction()); + return (ParseableFunctionInfo*)functionBodyImpl; } ParseableFunctionInfo** GetParseableFunctionInfoRef() const { @@ -85,19 +96,26 @@ namespace Js } DeferDeserializeFunctionInfo* GetDeferDeserializeFunctionInfo() const { - Assert(functionBodyImpl == NULL || IsDeferredDeserializeFunction()); + Assert(functionBodyImpl == nullptr || IsDeferredDeserializeFunction()); return (DeferDeserializeFunctionInfo*)functionBodyImpl; } FunctionBody * GetFunctionBody() const; Attributes GetAttributes() const { return attributes; } static Attributes GetAttributes(Js::RecyclableObject * function); - Js::LocalFunctionId GetLocalFunctionId() const { return functionId; } - virtual void Finalize(bool isShutdown) + void SetAttributes(Attributes attr) { attributes = attr; } + + LocalFunctionId GetLocalFunctionId() const { return functionId; } + void SetLocalFunctionId(LocalFunctionId functionId) { this->functionId = functionId; } + + uint GetCompileCount() const { return compileCount; } + void SetCompileCount(uint count) { compileCount = count; } + + virtual void Finalize(bool isShutdown) override { } - virtual void Dispose(bool isShutdown) + virtual void Dispose(bool isShutdown) override { } @@ -105,6 +123,10 @@ namespace Js BOOL IsDeferredDeserializeFunction() const { return ((this->attributes & DeferredDeserialize) == DeferredDeserialize); } BOOL IsDeferredParseFunction() const { return ((this->attributes & DeferredParse) == DeferredParse); } + void SetCapturesThis() { attributes = (Attributes)(attributes | Attributes::CapturesThis); } + bool GetCapturesThis() const { return (attributes & Attributes::CapturesThis) != 0; } + void SetEnclosedByGlobalFunc() { attributes = (Attributes)(attributes | Attributes::EnclosedByGlobalFunc ); } + bool GetEnclosedByGlobalFunc() const { return (attributes & Attributes::EnclosedByGlobalFunc) != 0; } protected: JavascriptMethod originalEntryPoint; @@ -112,6 +134,7 @@ namespace Js // However, proxies are not allocated as write barrier memory currently so its fine to not set the write barrier for this field FunctionProxy * functionBodyImpl; // Implementation of the function- null if the function doesn't have a body LocalFunctionId functionId; // Per host source context (source file) function Id + uint compileCount; Attributes attributes; }; diff --git a/lib/Runtime/Base/ScriptContext.cpp b/lib/Runtime/Base/ScriptContext.cpp index 57d7a4e4152..e98319984a6 100644 --- a/lib/Runtime/Base/ScriptContext.cpp +++ b/lib/Runtime/Base/ScriptContext.cpp @@ -1050,6 +1050,70 @@ namespace Js } #endif + void ScriptContext::RedeferFunctionBodies(ActiveFunctionSet *pActiveFuncs, uint inactiveThreshold) + { + Assert(!this->IsClosed()); + + if (!this->IsScriptContextInNonDebugMode()) + { + return; + } + + // For each active function, collect call counts, update inactive counts, and redefer if appropriate. + // In the redeferral case, we require 2 passes over the set of FunctionBody's. + // This is because a function inlined in a non-redeferred function cannot itself be redeferred. + // So we first need to close over the set of non-redeferrable functions, then go back and redefer + // the eligible candidates. + + auto fn = [&](FunctionBody *functionBody) { + bool exec = functionBody->InterpretedSinceCallCountCollection(); + functionBody->CollectInterpretedCounts(); + functionBody->MapEntryPoints([&](int index, FunctionEntryPointInfo *entryPointInfo) { + if (!entryPointInfo->IsCleanedUp() && entryPointInfo->ExecutedSinceCallCountCollection()) + { + exec = true; + } + entryPointInfo->CollectCallCounts(); + }); + if (exec) + { + functionBody->SetInactiveCount(0); + } + else + { + functionBody->IncrInactiveCount(inactiveThreshold); + } + + if (pActiveFuncs) + { + Assert(this->GetThreadContext()->DoRedeferFunctionBodies()); + bool doRedefer = functionBody->DoRedeferFunction(inactiveThreshold); + if (!doRedefer) + { + functionBody->UpdateActiveFunctionSet(pActiveFuncs); + } + } + }; + + this->MapFunction(fn); + + if (!pActiveFuncs) + { + return; + } + + auto fnRedefer = [&](FunctionBody * functionBody) { + Assert(pActiveFuncs); + if (!functionBody->IsActiveFunction(pActiveFuncs)) + { + Assert(functionBody->DoRedeferFunction(inactiveThreshold)); + functionBody->RedeferFunction(); + } + }; + + this->MapFunction(fnRedefer); + } + bool ScriptContext::DoUndeferGlobalFunctions() const { return CONFIG_FLAG(DeferTopLevelTillFirstCall) && !AutoSystemInfo::Data.IsLowMemoryProcess(); @@ -2195,7 +2259,7 @@ if (!sourceList) dict->Add(key, pFuncScript); } - bool ScriptContext::IsInNewFunctionMap(EvalMapString const& key, ParseableFunctionInfo **ppFuncBody) + bool ScriptContext::IsInNewFunctionMap(EvalMapString const& key, FunctionInfo **ppFuncInfo) { if (this->cache->newFunctionCache == nullptr) { @@ -2203,7 +2267,7 @@ if (!sourceList) } // If eval map cleanup is false, to preserve existing behavior, add it to the eval map MRU list - bool success = this->cache->newFunctionCache->TryGetValue(key, ppFuncBody); + bool success = this->cache->newFunctionCache->TryGetValue(key, ppFuncInfo); if (success) { this->cache->newFunctionCache->NotifyAdd(key); @@ -2217,13 +2281,13 @@ if (!sourceList) return success; } - void ScriptContext::AddToNewFunctionMap(EvalMapString const& key, ParseableFunctionInfo *pFuncBody) + void ScriptContext::AddToNewFunctionMap(EvalMapString const& key, FunctionInfo *pFuncInfo) { if (this->cache->newFunctionCache == nullptr) { this->cache->newFunctionCache = RecyclerNew(this->recycler, NewFunctionCache, this->recycler); } - this->cache->newFunctionCache->Add(key, pFuncBody); + this->cache->newFunctionCache->Add(key, pFuncInfo); } @@ -3236,50 +3300,12 @@ if (!sourceList) JavascriptMethod entryPoint = pFunction->GetEntryPoint(); FunctionInfo * info = pFunction->GetFunctionInfo(); FunctionProxy * proxy = info->GetFunctionProxy(); - if (proxy != info) - { -#ifdef ENABLE_SCRIPT_PROFILING - // Not a script function or, the thunk can deal with moving to the function body - Assert(proxy == nullptr || entryPoint == DefaultDeferredParsingThunk - || entryPoint == ProfileDeferredParsingThunk - || entryPoint == ProfileDeferredDeserializeThunk - || entryPoint == CrossSite::ProfileThunk - || entryPoint == DefaultDeferredDeserializeThunk - || entryPoint == CrossSite::DefaultThunk); -#else - // Not a script function or, the thunk can deal with moving to the function body - Assert(proxy == nullptr || entryPoint == DefaultDeferredParsingThunk - || entryPoint == DefaultDeferredDeserializeThunk - || entryPoint == CrossSite::DefaultThunk); -#endif - - // Replace entry points for built-ins/external/winrt functions so that we can wrap them with try-catch for "continue after exception". - if (!pFunction->IsScriptFunction() && IsExceptionWrapperForBuiltInsEnabled(scriptContext)) - { -#ifdef ENABLE_SCRIPT_PROFILING - if (scriptContext->IsScriptContextInDebugMode()) - { - // We are attaching. - // For built-ins, WinRT and DOM functions which are already in recycler, change entry points to route to debug/profile thunk. - ScriptContext::SetEntryPointToProfileThunk(pFunction); - } - else - { - // We are detaching. - // For built-ins, WinRT and DOM functions which are already in recycler, restore entry points to original. - if (!scriptContext->IsProfiling()) - { - ScriptContext::RestoreEntryPointFromProfileThunk(pFunction); - } - // If we are profiling, don't change anything. - } -#else - AssertMsg(false, "Profiling needs to be enabled to change thunks for debugging"); -#endif - } + if (proxy == nullptr) + { return; } + Assert(proxy->GetFunctionInfo() == info); if (!proxy->IsFunctionBody()) { @@ -3382,27 +3408,6 @@ if (!sourceList) #endif OUTPUT_TRACE(Js::ScriptProfilerPhase, _u("\n")); - FunctionInfo * info = pFunction->GetFunctionInfo(); - if (proxy != info) - { - // The thunk can deal with moving to the function body -#ifdef ENABLE_SCRIPT_PROFILING - Assert(entryPoint == DefaultDeferredParsingThunk || entryPoint == ProfileDeferredParsingThunk - || entryPoint == DefaultDeferredDeserializeThunk || entryPoint == ProfileDeferredDeserializeThunk - || entryPoint == CrossSite::DefaultThunk || entryPoint == CrossSite::ProfileThunk); -#else - Assert(entryPoint == DefaultDeferredParsingThunk - || entryPoint == DefaultDeferredDeserializeThunk - || entryPoint == CrossSite::DefaultThunk); -#endif - - Assert(!proxy->IsDeferred()); - Assert(proxy->GetFunctionBody()->GetProfileSession() == proxy->GetScriptContext()->GetProfileSession()); - - return; - } - - #if ENABLE_NATIVE_CODEGEN if (!IsIntermediateCodeGenThunk(entryPoint) && entryPoint != DynamicProfileInfo::EnsureDynamicProfileInfoThunk) #endif diff --git a/lib/Runtime/Base/ScriptContext.h b/lib/Runtime/Base/ScriptContext.h index 46d7e7448a1..79b1f5766bd 100644 --- a/lib/Runtime/Base/ScriptContext.h +++ b/lib/Runtime/Base/ScriptContext.h @@ -325,7 +325,7 @@ namespace Js typedef JsUtil::BaseDictionary SecondLevelEvalCache; typedef TwoLevelHashRecord EvalMapRecord; typedef JsUtil::Cache, FastEvalMapStringComparer> EvalCacheTopLevelDictionary; - typedef JsUtil::Cache> NewFunctionCache; + typedef JsUtil::Cache> NewFunctionCache; typedef JsUtil::BaseDictionary ParseableFunctionInfoMap; // This is the dictionary used by script context to cache the eval. typedef TwoLevelHashDictionary EvalCacheDictionary; @@ -424,6 +424,7 @@ namespace Js const ScriptContextBase* GetScriptContextBase() const { return static_cast(this); } + void RedeferFunctionBodies(ActiveFunctionSet *pActive, uint inactiveThreshold); bool DoUndeferGlobalFunctions() const; bool IsUndeclBlockVar(Var var) const { return this->javascriptLibrary->IsUndeclBlockVar(var); } @@ -1027,8 +1028,8 @@ namespace Js inline bool EnableEvalMapCleanup() { return CONFIG_FLAG(EnableEvalMapCleanup); }; uint GetNextSourceContextId(); - bool IsInNewFunctionMap(EvalMapString const& key, ParseableFunctionInfo **ppFuncBody); - void AddToNewFunctionMap(EvalMapString const& key, ParseableFunctionInfo *pFuncBody); + bool IsInNewFunctionMap(EvalMapString const& key, FunctionInfo **ppFuncInfo); + void AddToNewFunctionMap(EvalMapString const& key, FunctionInfo *pFuncInfo); SourceContextInfo * GetSourceContextInfo(DWORD_PTR hostSourceContext, IActiveScriptDataCache* profileDataCache); SourceContextInfo * GetSourceContextInfo(uint hash); diff --git a/lib/Runtime/Base/ThreadContext.cpp b/lib/Runtime/Base/ThreadContext.cpp index 439f04e0769..1de98619ba8 100644 --- a/lib/Runtime/Base/ThreadContext.cpp +++ b/lib/Runtime/Base/ThreadContext.cpp @@ -188,6 +188,9 @@ ThreadContext::ThreadContext(AllocationPolicyManager * allocationPolicyManager, rootPendingClose(nullptr), isProfilingUserCode(true), loopDepth(0), + redeferralState(InitialRedeferralState), + gcSinceLastRedeferral(0), + gcSinceCallCountsCollected(0), tridentLoadAddress(nullptr), m_remoteThreadContextInfo(nullptr), debugManager(nullptr) @@ -1728,6 +1731,16 @@ ThreadContext::ProbeStackNoDispose(size_t size, Js::ScriptContext *scriptContext this->CheckInterruptPoll(); } } + +#if DBG + if (PHASE_STRESS1(Js::RedeferralPhase)) + { + if (JsUtil::ExternalApi::IsScriptActiveOnCurrentThreadContext()) + { + this->TryRedeferral(); + } + } +#endif } void @@ -2518,6 +2531,7 @@ ThreadContext::PreCollectionCallBack(CollectionFlags flags) #ifdef PERF_COUNTERS PHASE_PRINT_TESTTRACE1(Js::DeferParsePhase, _u("TestTrace: deferparse - # of func: %d # deferparsed: %d\n"), PerfCounter::CodeCounterSet::GetTotalFunctionCounter().GetValue(), PerfCounter::CodeCounterSet::GetDeferredFunctionCounter().GetValue()); #endif + // This needs to be done before ClearInlineCaches since that method can empty the list of // script contexts with inline caches this->ClearScriptContextCaches(); @@ -2602,13 +2616,228 @@ ThreadContext::PostCollectionCallBack() // Recycler is null in the case where the ThreadContext is in the process of creating the recycler and // we have a GC triggered (say because the -recyclerStress flag is passed in) - if (this->recycler != NULL && this->recycler->InCacheCleanupCollection()) + if (this->recycler != NULL) { - this->recycler->ClearCacheCleanupCollection(); - for (Js::ScriptContext *scriptContext = scriptContextList; scriptContext; scriptContext = scriptContext->next) + if (this->recycler->InCacheCleanupCollection()) + { + this->recycler->ClearCacheCleanupCollection(); + for (Js::ScriptContext *scriptContext = scriptContextList; scriptContext; scriptContext = scriptContext->next) + { + scriptContext->CleanupWeakReferenceDictionaries(); + } + } + + if (this->DoTryRedeferral()) + { + HRESULT hr = S_OK; + BEGIN_TRANSLATE_OOM_TO_HRESULT + { + this->TryRedeferral(); + } + END_TRANSLATE_OOM_TO_HRESULT(hr); + } + + this->UpdateRedeferralState(); + } +} + +bool +ThreadContext::DoTryRedeferral() const +{ + if (PHASE_FORCE1(Js::RedeferralPhase) || PHASE_STRESS1(Js::RedeferralPhase)) + { + return true; + } + + if (PHASE_OFF1(Js::RedeferralPhase)) + { + return false; + } + + switch (this->redeferralState) + { + case InitialRedeferralState: + return false; + + case StartupRedeferralState: + return gcSinceCallCountsCollected >= StartupRedeferralInactiveThreshold; + + case MainRedeferralState: + return gcSinceCallCountsCollected >= MainRedeferralInactiveThreshold; + + default: + Assert(0); + return false; + }; +} + +bool +ThreadContext::DoRedeferFunctionBodies() const +{ + if (PHASE_FORCE1(Js::RedeferralPhase) || PHASE_STRESS1(Js::RedeferralPhase)) + { + return true; + } + + if (PHASE_OFF1(Js::RedeferralPhase)) + { + return false; + } + + switch (this->redeferralState) + { + case InitialRedeferralState: + return false; + + case StartupRedeferralState: + return gcSinceLastRedeferral >= StartupRedeferralCheckInterval; + + case MainRedeferralState: + return gcSinceLastRedeferral >= MainRedeferralCheckInterval; + + default: + Assert(0); + return false; + }; +} + +uint +ThreadContext::GetRedeferralCollectionInterval() const +{ + switch(this->redeferralState) + { + case InitialRedeferralState: + return InitialRedeferralDelay; + + case StartupRedeferralState: + return StartupRedeferralCheckInterval; + + case MainRedeferralState: + return MainRedeferralCheckInterval; + + default: + Assert(0); + return (uint)-1; + } +} + +uint +ThreadContext::GetRedeferralInactiveThreshold() const +{ + switch(this->redeferralState) + { + case InitialRedeferralState: + return InitialRedeferralDelay; + + case StartupRedeferralState: + return StartupRedeferralInactiveThreshold; + + case MainRedeferralState: + return MainRedeferralInactiveThreshold; + + default: + Assert(0); + return (uint)-1; + } +} + +void +ThreadContext::TryRedeferral() +{ + bool doRedefer = this->DoRedeferFunctionBodies(); + + // Collect the set of active functions. + ActiveFunctionSet *pActiveFuncs = nullptr; + if (doRedefer) + { + pActiveFuncs = Anew(this->GetThreadAlloc(), ActiveFunctionSet, this->GetThreadAlloc()); + this->GetActiveFunctions(pActiveFuncs); +#if DBG + this->redeferredFunctions = 0; + this->recoveredBytes = 0; +#endif + } + + uint inactiveThreshold = this->GetRedeferralInactiveThreshold(); + Js::ScriptContext *scriptContext; + for (scriptContext = GetScriptContextList(); scriptContext; scriptContext = scriptContext->next) + { + if (scriptContext->IsClosed()) { - scriptContext->CleanupWeakReferenceDictionaries(); + continue; } + scriptContext->RedeferFunctionBodies(pActiveFuncs, inactiveThreshold); + } + + if (pActiveFuncs) + { + Adelete(this->GetThreadAlloc(), pActiveFuncs); +#if DBG + if (PHASE_STATS1(Js::RedeferralPhase) && this->redeferredFunctions) + { + Output::Print(_u("Redeferred: %d, Bytes: 0x%x\n"), this->redeferredFunctions, this->recoveredBytes); + } +#endif + } +} + +void +ThreadContext::GetActiveFunctions(ActiveFunctionSet * pActiveFuncs) +{ + if (!this->IsInScript() || this->entryExitRecord == nullptr) + { + return; + } + + Js::JavascriptStackWalker walker(GetScriptContextList(), TRUE, NULL, true); + Js::JavascriptFunction *function = nullptr; + while (walker.GetCallerWithoutInlinedFrames(&function)) + { + if (function->GetFunctionInfo()->HasBody()) + { + Js::FunctionBody *body = function->GetFunctionInfo()->GetFunctionBody(); + body->UpdateActiveFunctionSet(pActiveFuncs); + } + } +} + +void +ThreadContext::UpdateRedeferralState() +{ + uint inactiveThreshold = this->GetRedeferralInactiveThreshold(); + uint collectInterval = this->GetRedeferralCollectionInterval(); + + if (this->gcSinceCallCountsCollected >= inactiveThreshold) + { + this->gcSinceCallCountsCollected = 0; + if (this->gcSinceLastRedeferral >= collectInterval) + { + // Advance state + switch (this->redeferralState) + { + case InitialRedeferralState: + this->redeferralState = StartupRedeferralState; + break; + + case StartupRedeferralState: + this->redeferralState = MainRedeferralState; + break; + + case MainRedeferralState: + break; + + default: + Assert(0); + break; + } + + this->gcSinceLastRedeferral = 0; + } + } + else + { + this->gcSinceCallCountsCollected++; + this->gcSinceLastRedeferral++; } } diff --git a/lib/Runtime/Base/ThreadContext.h b/lib/Runtime/Base/ThreadContext.h index 6bd979c3bfd..97f19969730 100644 --- a/lib/Runtime/Base/ThreadContext.h +++ b/lib/Runtime/Base/ThreadContext.h @@ -14,6 +14,8 @@ namespace Js typedef JsUtil::List ReturnedValueList; } +typedef BVSparse ActiveFunctionSet; + using namespace PlatformAgnostic; struct IAuthorFileContext; @@ -650,6 +652,22 @@ class ThreadContext sealed : uint functionCount; uint sourceInfoCount; + enum RedeferralState + { + InitialRedeferralState, + StartupRedeferralState, + MainRedeferralState + }; + RedeferralState redeferralState; + uint gcSinceLastRedeferral; + uint gcSinceCallCountsCollected; + + static const uint InitialRedeferralDelay = 5; + static const uint StartupRedeferralCheckInterval = 10; + static const uint StartupRedeferralInactiveThreshold = 5; + static const uint MainRedeferralCheckInterval = 20; + static const uint MainRedeferralInactiveThreshold = 10; + Js::TypeId nextTypeId; uint32 polymorphicCacheState; @@ -1139,6 +1157,18 @@ class ThreadContext sealed : static size_t GetProcessCodeSize() { return processNativeCodeSize; } size_t GetSourceSize() { return sourceCodeSize; } + bool DoTryRedeferral() const; + void TryRedeferral(); + bool DoRedeferFunctionBodies() const; + void UpdateRedeferralState(); + uint GetRedeferralCollectionInterval() const; + uint GetRedeferralInactiveThreshold() const; + void GetActiveFunctions(ActiveFunctionSet * pActive); +#if DBG + uint redeferredFunctions; + uint recoveredBytes; +#endif + Js::ScriptEntryExitRecord * GetScriptEntryExit() const { return entryExitRecord; } void RegisterCodeGenRecyclableData(Js::CodeGenRecyclableData *const codeGenRecyclableData); void UnregisterCodeGenRecyclableData(Js::CodeGenRecyclableData *const codeGenRecyclableData); diff --git a/lib/Runtime/ByteCode/ByteCodeDumper.cpp b/lib/Runtime/ByteCode/ByteCodeDumper.cpp index d7ad2f8c10b..1091d44d9bc 100644 --- a/lib/Runtime/ByteCode/ByteCodeDumper.cpp +++ b/lib/Runtime/ByteCode/ByteCodeDumper.cpp @@ -21,7 +21,7 @@ namespace Js ByteCodeDumper::Dump(dumpFunction); for (uint i = 0; i < dumpFunction->GetNestedCount(); i ++) { - dumpFunction->GetNestedFunc(i)->EnsureDeserialized(); + dumpFunction->GetNestedFunctionForExecution(i); ByteCodeDumper::DumpRecursively(dumpFunction->GetNestedFunc(i)->GetFunctionBody()); } } @@ -826,7 +826,7 @@ namespace Js case OpCode::NewInnerScFunc: case OpCode::NewInnerScGenFunc: { - FunctionProxy* pfuncActual = dumpFunction->GetNestedFunc((uint)data->SlotIndex)->GetFunctionProxy(); + FunctionProxy* pfuncActual = dumpFunction->GetNestedFunctionProxy((uint)data->SlotIndex); Output::Print(_u(" R%d = env:R%d, %s()"), data->Value, data->Instance, pfuncActual->EnsureDeserialized()->GetDisplayName()); break; @@ -876,7 +876,7 @@ namespace Js case OpCode::NewStackScFunc: case OpCode::NewScGenFunc: { - FunctionProxy* pfuncActual = dumpFunction->GetNestedFunc((uint)data->SlotIndex)->GetFunctionProxy(); + FunctionProxy* pfuncActual = dumpFunction->GetNestedFunctionProxy((uint)data->SlotIndex); Output::Print(_u(" R%d = %s()"), data->Value, pfuncActual->EnsureDeserialized()->GetDisplayName()); break; diff --git a/lib/Runtime/ByteCode/ByteCodeEmitter.cpp b/lib/Runtime/ByteCode/ByteCodeEmitter.cpp index f0800368699..a871d821878 100644 --- a/lib/Runtime/ByteCode/ByteCodeEmitter.cpp +++ b/lib/Runtime/ByteCode/ByteCodeEmitter.cpp @@ -2998,6 +2998,12 @@ void ByteCodeGenerator::EmitOneFunction(ParseNode *pnode) // so they have pointers to the stub sub-trees they need.) byteCodeFunction->SetDeferredStubs(nullptr); + if (byteCodeFunction->GetByteCode() != nullptr) + { + // Previously compiled function nested within a re-deferred and re-compiled function. + return; + } + try { // Bug : 301517 @@ -3225,10 +3231,10 @@ void ByteCodeGenerator::EmitOneFunction(ParseNode *pnode) uint nestedCount = byteCodeFunction->GetNestedCount(); for (uint i = 0; i < nestedCount; i++) { - Js::FunctionProxy * nested = byteCodeFunction->GetNestedFunc(i); + Js::FunctionProxy * nested = byteCodeFunction->GetNestedFunctionProxy(i); if (nested->IsFunctionBody()) { - nested->GetFunctionBody()->SetStackNestedFuncParent(byteCodeFunction); + nested->GetFunctionBody()->SetStackNestedFuncParent(byteCodeFunction->GetFunctionInfo()); } } } @@ -3462,6 +3468,7 @@ void ByteCodeGenerator::EmitOneFunction(ParseNode *pnode) byteCodeFunction->SetInitialDefaultEntryPoint(); + byteCodeFunction->SetCompileCount(UInt32Math::Add(byteCodeFunction->GetCompileCount(), 1)); #ifdef ENABLE_DEBUG_CONFIG_OPTIONS if (byteCodeFunction->IsInDebugMode() != scriptContext->IsScriptContextInDebugMode()) // debug mode mismatch @@ -3660,7 +3667,7 @@ void ByteCodeGenerator::EmitScopeList(ParseNode *pnode, ParseNode *breakOnBodySc this->EmitOneFunction(pnode); this->EndEmitFunction(pnode); - Assert(pnode->sxFnc.pnodeBody == nullptr || funcInfo->GetCurrentChildScope() == funcInfo->GetBodyScope()); + Assert(pnode->sxFnc.pnodeBody == nullptr || funcInfo->isReused || funcInfo->GetCurrentChildScope() == funcInfo->GetBodyScope()); funcInfo->SetCurrentChildScope(nullptr); } pnode = pnode->sxFnc.pnodeNext; diff --git a/lib/Runtime/ByteCode/ByteCodeGenerator.cpp b/lib/Runtime/ByteCode/ByteCodeGenerator.cpp index 879c17b48ac..e4f819aace8 100644 --- a/lib/Runtime/ByteCode/ByteCodeGenerator.cpp +++ b/lib/Runtime/ByteCode/ByteCodeGenerator.cpp @@ -967,7 +967,7 @@ Js::RegSlot ByteCodeGenerator::EnregisterStringTemplateCallsiteConstant(ParseNod // // Restore all outer func scope info when reparsing a deferred func. // -void ByteCodeGenerator::RestoreScopeInfo(Js::FunctionBody* functionBody) +void ByteCodeGenerator::RestoreScopeInfo(Js::ParseableFunctionInfo* functionBody) { if (functionBody && functionBody->GetScopeInfo()) { @@ -1040,7 +1040,7 @@ void ByteCodeGenerator::RestoreScopeInfo(Js::FunctionBody* functionBody) FuncInfo * ByteCodeGenerator::StartBindGlobalStatements(ParseNode *pnode) { - if (parentScopeInfo) + if (parentScopeInfo && parentScopeInfo->GetParent() && (!parentScopeInfo->GetParent()->GetIsGlobalFunc() || parentScopeInfo->GetParent()->IsEval())) { Assert(CONFIG_FLAG(DeferNested)); trackEnvDepth = true; @@ -1163,7 +1163,7 @@ ParseNode* VisitBlock(ParseNode *pnode, ByteCodeGenerator* byteCodeGenerator, Pr return pnodeLastVal; } -FuncInfo * ByteCodeGenerator::StartBindFunction(const char16 *name, uint nameLength, uint shortNameOffset, bool* pfuncExprWithName, ParseNode *pnode) +FuncInfo * ByteCodeGenerator::StartBindFunction(const char16 *name, uint nameLength, uint shortNameOffset, bool* pfuncExprWithName, ParseNode *pnode, Js::ParseableFunctionInfo * reuseNestedFunc) { bool funcExprWithName; union @@ -1193,6 +1193,11 @@ FuncInfo * ByteCodeGenerator::StartBindFunction(const char16 *name, uint nameLen Assert(!parsedFunctionBody->IsDeferredParseFunction() || parsedFunctionBody->IsReparsed()); pnode->sxFnc.SetDeclaration(parsedFunctionBody->GetIsDeclaration()); + if (!pnode->sxFnc.CanBeDeferred()) + { + parsedFunctionBody->SetAttributes( + (Js::FunctionInfo::Attributes)(parsedFunctionBody->GetAttributes() & ~Js::FunctionInfo::Attributes::CanDefer)); + } funcExprWithName = !(parsedFunctionBody->GetIsDeclaration() || pnode->sxFnc.IsMethod()) && pnode->sxFnc.pnodeName != nullptr && @@ -1211,8 +1216,7 @@ FuncInfo * ByteCodeGenerator::StartBindFunction(const char16 *name, uint nameLen Js::ParseableFunctionInfo *parent = parsedFunctionBody->GetScopeInfo()->GetParent(); if (parent) { - Assert(parent->GetFunctionBody()); - if (parent->GetFunctionBody()->GetHasOrParentHasArguments()) + if (parent->GetHasOrParentHasArguments()) { parsedFunctionBody->SetHasOrParentHasArguments(true); } @@ -1268,21 +1272,33 @@ FuncInfo * ByteCodeGenerator::StartBindFunction(const char16 *name, uint nameLen { attributes = (Js::FunctionInfo::Attributes)(attributes | Js::FunctionInfo::Attributes::Module); } + if (pnode->sxFnc.CanBeDeferred()) + { + attributes = (Js::FunctionInfo::Attributes)(attributes | Js::FunctionInfo::Attributes::CanDefer); + } if (createFunctionBody) { ENTER_PINNED_SCOPE(Js::PropertyRecordList, propertyRecordList); propertyRecordList = EnsurePropertyRecordList(); - parsedFunctionBody = Js::FunctionBody::NewFromRecycler(scriptContext, name, nameLength, shortNameOffset, pnode->sxFnc.nestedCount, m_utf8SourceInfo, - m_utf8SourceInfo->GetSrcInfo()->sourceContextInfo->sourceContextId, functionId, propertyRecordList - , attributes - , pnode->sxFnc.IsClassConstructor() ? - Js::FunctionBody::FunctionBodyFlags::Flags_None : - Js::FunctionBody::FunctionBodyFlags::Flags_HasNoExplicitReturnValue + if (reuseNestedFunc) + { + Assert(reuseNestedFunc->IsFunctionBody()); + parsedFunctionBody = reuseNestedFunc->GetFunctionBody(); + } + else + { + parsedFunctionBody = Js::FunctionBody::NewFromRecycler(scriptContext, name, nameLength, shortNameOffset, pnode->sxFnc.nestedCount, m_utf8SourceInfo, + m_utf8SourceInfo->GetSrcInfo()->sourceContextInfo->sourceContextId, functionId, propertyRecordList + , attributes + , pnode->sxFnc.IsClassConstructor() ? + Js::FunctionBody::FunctionBodyFlags::Flags_None : + Js::FunctionBody::FunctionBodyFlags::Flags_HasNoExplicitReturnValue #ifdef PERF_COUNTERS - , false /* is function from deferred deserialized proxy */ + , false /* is function from deferred deserialized proxy */ #endif - ); + ); + } LEAVE_PINNED_SCOPE(); } else @@ -1295,7 +1311,17 @@ FuncInfo * ByteCodeGenerator::StartBindFunction(const char16 *name, uint nameLen propertyRecordList = EnsurePropertyRecordList(); } - parseableFunctionInfo = Js::ParseableFunctionInfo::New(scriptContext, pnode->sxFnc.nestedCount, functionId, m_utf8SourceInfo, name, nameLength, shortNameOffset, propertyRecordList, attributes); + if (reuseNestedFunc) + { + parseableFunctionInfo = reuseNestedFunc; + } + else + { + parseableFunctionInfo = Js::ParseableFunctionInfo::New(scriptContext, pnode->sxFnc.nestedCount, functionId, m_utf8SourceInfo, name, nameLength, shortNameOffset, propertyRecordList, attributes, + pnode->sxFnc.IsClassConstructor() ? + Js::FunctionBody::FunctionBodyFlags::Flags_None : + Js::FunctionBody::FunctionBodyFlags::Flags_HasNoExplicitReturnValue); + } LEAVE_PINNED_SCOPE(); } @@ -1358,6 +1384,10 @@ FuncInfo * ByteCodeGenerator::StartBindFunction(const char16 *name, uint nameLen FuncInfo *funcInfo = Anew(alloc, FuncInfo, name, alloc, paramScope, bodyScope, pnode, parseableFunctionInfo); +#if DBG + funcInfo->isReused = (reuseNestedFunc != nullptr); +#endif + if (pnode->sxFnc.GetArgumentsObjectEscapes()) { // If the parser detected that the arguments object escapes, then the function scope escapes @@ -1893,7 +1923,7 @@ void ByteCodeGenerator::Generate(__in ParseNode *pnode, uint32 grfscr, __in Byte void ByteCodeGenerator::CheckDeferParseHasMaybeEscapedNestedFunc() { - if (!this->parentScopeInfo) + if (!this->parentScopeInfo || (this->parentScopeInfo->GetParent() && this->parentScopeInfo->GetParent()->GetIsGlobalFunc())) { return; } @@ -1921,15 +1951,14 @@ void ByteCodeGenerator::CheckDeferParseHasMaybeEscapedNestedFunc() else { // We have to wait until it is parsed before we populate the stack nested func parent. - Js::FunctionBody * parentFunctionBody = nullptr; FuncInfo * parentFunc = top->GetBodyScope()->GetEnclosingFunc(); if (!parentFunc->IsGlobalFunction()) { - parentFunctionBody = parentFunc->GetParsedFunctionBody(); - Assert(parentFunctionBody != rootFuncBody); - if (parentFunctionBody->DoStackNestedFunc()) + Assert(parentFunc->byteCodeFunction != rootFuncBody); + Js::ParseableFunctionInfo * parentFunctionInfo = parentFunc->byteCodeFunction; + if (parentFunctionInfo->DoStackNestedFunc()) { - rootFuncBody->SetStackNestedFuncParent(parentFunctionBody); + rootFuncBody->SetStackNestedFuncParent(parentFunctionInfo->GetFunctionInfo()); } } } @@ -1938,12 +1967,17 @@ void ByteCodeGenerator::CheckDeferParseHasMaybeEscapedNestedFunc() { FuncInfo * funcInfo = i.Data(); Assert(funcInfo->IsRestored()); - Js::FunctionBody * functionBody = funcInfo->GetParsedFunctionBody(); - bool didStackNestedFunc = functionBody->DoStackNestedFunc(); + Js::ParseableFunctionInfo * parseableFunctionInfo = funcInfo->byteCodeFunction; + bool didStackNestedFunc = parseableFunctionInfo->DoStackNestedFunc(); if (!didStackNestedFunc) { return; } + if (!parseableFunctionInfo->IsFunctionBody()) + { + continue; + } + Js::FunctionBody * functionBody = funcInfo->GetParsedFunctionBody(); if (funcInfo->HasMaybeEscapedNestedFunc()) { // This should box the rest of the parent functions. @@ -2249,7 +2283,7 @@ void VisitFncDecls(ParseNode *fns, Fn action) } } -FuncInfo* PreVisitFunction(ParseNode* pnode, ByteCodeGenerator* byteCodeGenerator) +FuncInfo* PreVisitFunction(ParseNode* pnode, ByteCodeGenerator* byteCodeGenerator, Js::ParseableFunctionInfo *reuseNestedFunc) { // Do binding of function name(s), initialize function scope, propagate function-wide properties from // the parent (if any). @@ -2303,7 +2337,7 @@ FuncInfo* PreVisitFunction(ParseNode* pnode, ByteCodeGenerator* byteCodeGenerato } Assert(pnode->sxFnc.funcInfo == nullptr); - FuncInfo* funcInfo = pnode->sxFnc.funcInfo = byteCodeGenerator->StartBindFunction(funcName, funcNameLength, functionNameOffset, &funcExprWithName, pnode); + FuncInfo* funcInfo = pnode->sxFnc.funcInfo = byteCodeGenerator->StartBindFunction(funcName, funcNameLength, functionNameOffset, &funcExprWithName, pnode, reuseNestedFunc); funcInfo->byteCodeFunction->SetIsNamedFunctionExpression(funcExprWithName); funcInfo->byteCodeFunction->SetIsNameIdentifierRef(pnode->sxFnc.isNameIdentifierRef); if (fIsRoot) @@ -3152,7 +3186,7 @@ void VisitNestedScopes(ParseNode* pnodeScopeList, ParseNode* pnodeParent, ByteCo // If the current function is not parsed yet, its function body is not generated yet. // Reset pCurrentFunction to null so that it will not be able re-use anything. - Js::FunctionProxy* proxy = pLastReuseFunc->GetNestedFunc((*pIndex)); + Js::FunctionProxy* proxy = pLastReuseFunc->GetNestedFunctionProxy((*pIndex)); if (proxy && proxy->IsFunctionBody()) { byteCodeGenerator->pCurrentFunction = proxy->GetFunctionBody(); @@ -3169,7 +3203,19 @@ void VisitNestedScopes(ParseNode* pnodeScopeList, ParseNode* pnodeParent, ByteCo byteCodeGenerator->pCurrentFunction = nullptr; } } - PreVisitFunction(pnodeScope, byteCodeGenerator); + + Js::ParseableFunctionInfo::NestedArray * parentNestedArray = parentFunc->GetNestedArray(); + Js::ParseableFunctionInfo* reuseNestedFunc = nullptr; + if (parentNestedArray && byteCodeGenerator->GetScriptContext()->IsScriptContextInNonDebugMode()) + { + Assert(*pIndex < parentNestedArray->nestedCount); + Js::FunctionInfo * info = parentNestedArray->functionInfoArray[*pIndex]; + if (info) + { + reuseNestedFunc = info->GetParseableFunctionInfo(); + } + } + PreVisitFunction(pnodeScope, byteCodeGenerator, reuseNestedFunc); FuncInfo *funcInfo = pnodeScope->sxFnc.funcInfo; parentFuncInfo->OnStartVisitFunction(pnodeScope); @@ -3181,7 +3227,7 @@ void VisitNestedScopes(ParseNode* pnodeScopeList, ParseNode* pnodeParent, ByteCo // Patch current non-parsed function's FunctionBodyImpl with the new generated function body. // So that the function object (pointing to the old function body) can able to get to the new one. - Js::FunctionProxy* proxy = pLastReuseFunc->GetNestedFunc((*pIndex)); + Js::FunctionProxy* proxy = pLastReuseFunc->GetNestedFunctionProxy((*pIndex)); if (proxy && !proxy->IsFunctionBody()) { proxy->UpdateFunctionBodyImpl(funcInfo->byteCodeFunction->GetFunctionBody()); @@ -3257,14 +3303,6 @@ void VisitNestedScopes(ParseNode* pnodeScopeList, ParseNode* pnodeParent, ByteCo EndVisitBlock(pnodeScope->sxFnc.pnodeBodyScope, byteCodeGenerator); EndVisitBlock(pnodeScope->sxFnc.pnodeScopes, byteCodeGenerator); } - else if (pnodeScope->sxFnc.nestedCount) - { - // The nested function is deferred but has its own nested functions. - // Make sure we at least zero-initialize its array in case, for instance, we get cloned - // before the function is called and the array filled in. - - memset(funcInfo->byteCodeFunction->GetNestedFuncArray(), 0, pnodeScope->sxFnc.nestedCount * sizeof(Js::FunctionBody*)); - } if (!pnodeScope->sxFnc.pnodeBody) { @@ -3276,7 +3314,7 @@ void VisitNestedScopes(ParseNode* pnodeScopeList, ParseNode* pnodeParent, ByteCo if (!parentFuncInfo->IsFakeGlobalFunction(byteCodeGenerator->GetFlags())) { pnodeScope->sxFnc.nestedIndex = *pIndex; - parentFunc->SetNestedFunc(funcInfo->byteCodeFunction, (*pIndex)++, byteCodeGenerator->GetFlags()); + parentFunc->SetNestedFunc(funcInfo->byteCodeFunction->GetFunctionInfo(), (*pIndex)++, byteCodeGenerator->GetFlags()); } Assert(parentFunc); diff --git a/lib/Runtime/ByteCode/ByteCodeGenerator.h b/lib/Runtime/ByteCode/ByteCodeGenerator.h index 2126386138d..913f0073222 100644 --- a/lib/Runtime/ByteCode/ByteCodeGenerator.h +++ b/lib/Runtime/ByteCode/ByteCodeGenerator.h @@ -207,7 +207,7 @@ class ByteCodeGenerator return protoReg; } - void RestoreScopeInfo(Js::FunctionBody* funcInfo); + void RestoreScopeInfo(Js::ParseableFunctionInfo* funcInfo); FuncInfo *StartBindGlobalStatements(ParseNode *pnode); void AssignPropertyId(Symbol *sym, Js::ParseableFunctionInfo* functionInfo); void AssignPropertyId(IdentPtr pid); @@ -224,7 +224,7 @@ class ByteCodeGenerator void AssignPropertyIds(Js::ParseableFunctionInfo* functionInfo); void MapCacheIdsToPropertyIds(FuncInfo *funcInfo); void MapReferencedPropertyIds(FuncInfo *funcInfo); - FuncInfo *StartBindFunction(const char16 *name, uint nameLength, uint shortNameOffset, bool* pfuncExprWithName, ParseNode *pnode); + FuncInfo *StartBindFunction(const char16 *name, uint nameLength, uint shortNameOffset, bool* pfuncExprWithName, ParseNode *pnode, Js::ParseableFunctionInfo * reuseNestedFunc); void EndBindFunction(bool funcExprWithName); void StartBindCatch(ParseNode *pnode); diff --git a/lib/Runtime/ByteCode/ByteCodeSerializer.cpp b/lib/Runtime/ByteCode/ByteCodeSerializer.cpp index a9084b1c447..f08281fca80 100644 --- a/lib/Runtime/ByteCode/ByteCodeSerializer.cpp +++ b/lib/Runtime/ByteCode/ByteCodeSerializer.cpp @@ -2009,7 +2009,7 @@ class ByteCodeBufferBuilder ; PrependInt32(builder, _u("BitFlags"), bitFlags); - PrependInt32(builder, _u("Relative Function ID"), function->functionId - topFunctionId); // Serialized function ids are relative to the top function ID + PrependInt32(builder, _u("Relative Function ID"), function->GetLocalFunctionId() - topFunctionId); // Serialized function ids are relative to the top function ID PrependInt32(builder, _u("Attributes"), function->GetAttributes()); AssertMsg((function->GetAttributes() & ~(FunctionInfo::Attributes::ErrorOnNew @@ -2201,7 +2201,7 @@ class ByteCodeBufferBuilder HRESULT AddTopFunctionBody(FunctionBody * function, SRCINFO const * srcInfo) { - topFunctionId = function->functionId; + topFunctionId = function->GetLocalFunctionId(); return AddFunctionBody(functionsTable, function, srcInfo); } @@ -3575,7 +3575,8 @@ class ByteCodeBufferReader } else { - *function = ParseableFunctionInfo::New(this->scriptContext, nestedCount, firstFunctionId + functionId, utf8SourceInfo, displayName, displayNameLength, displayShortNameOffset, nullptr, (FunctionInfo::Attributes)attributes); + *function = ParseableFunctionInfo::New(this->scriptContext, nestedCount, firstFunctionId + functionId, utf8SourceInfo, displayName, displayNameLength, displayShortNameOffset, nullptr, (FunctionInfo::Attributes)attributes, + Js::FunctionBody::FunctionBodyFlags::Flags_None); } // These fields are manually deserialized previously @@ -3792,7 +3793,7 @@ class ByteCodeBufferReader return hr; } - (*function)->SetNestedFunc(nestedFunction, i, 0u); + (*function)->SetNestedFunc(nestedFunction->GetFunctionInfo(), i, 0u); } } } diff --git a/lib/Runtime/ByteCode/FuncInfo.cpp b/lib/Runtime/ByteCode/FuncInfo.cpp index 64660e3ebe8..10ad51a04e4 100644 --- a/lib/Runtime/ByteCode/FuncInfo.cpp +++ b/lib/Runtime/ByteCode/FuncInfo.cpp @@ -67,6 +67,9 @@ FuncInfo::FuncInfo( hasEscapedUseNestedFunc(false), needEnvRegister(false), hasCapturedThis(false), +#if DBG + isReused(false), +#endif staticFuncId(-1), inlineCacheMap(nullptr), slotProfileIdMap(alloc), diff --git a/lib/Runtime/ByteCode/FuncInfo.h b/lib/Runtime/ByteCode/FuncInfo.h index 7138586ee01..9201a059726 100644 --- a/lib/Runtime/ByteCode/FuncInfo.h +++ b/lib/Runtime/ByteCode/FuncInfo.h @@ -139,6 +139,10 @@ class FuncInfo uint hasEscapedUseNestedFunc : 1; uint needEnvRegister : 1; uint hasCapturedThis : 1; +#if DBG + // FunctionBody was reused on recompile of a redeferred enclosing function. + uint isReused:1; +#endif typedef JsUtil::BaseDictionary ConstantRegisterMap; ConstantRegisterMap constantToRegister; // maps uint constant to register @@ -430,7 +434,7 @@ class FuncInfo Js::FunctionBody* GetParsedFunctionBody() const { AssertMsg(this->byteCodeFunction->IsFunctionParsed(), "Function must be parsed in order to call this method"); - Assert(!IsDeferred()); + Assert(!IsDeferred() || this->byteCodeFunction->GetFunctionBody()->GetByteCode() != nullptr); return this->byteCodeFunction->GetFunctionBody(); } diff --git a/lib/Runtime/ByteCode/ScopeInfo.cpp b/lib/Runtime/ByteCode/ScopeInfo.cpp index a3802e3edf2..27909aa0bd1 100644 --- a/lib/Runtime/ByteCode/ScopeInfo.cpp +++ b/lib/Runtime/ByteCode/ScopeInfo.cpp @@ -48,7 +48,7 @@ namespace Js ScopeInfo* ScopeInfo::FromParent(FunctionBody* parent) { return RecyclerNew(parent->GetScriptContext()->GetRecycler(), // Alloc with ParseableFunctionInfo - ScopeInfo, parent, 0); + ScopeInfo, parent->GetFunctionInfo(), 0); } inline void AddSlotCount(int& count, int addCount) @@ -62,7 +62,7 @@ namespace Js // // Create scope info for an outer scope. // - ScopeInfo* ScopeInfo::FromScope(ByteCodeGenerator* byteCodeGenerator, FunctionBody* parent, Scope* scope, ScriptContext *scriptContext) + ScopeInfo* ScopeInfo::FromScope(ByteCodeGenerator* byteCodeGenerator, ParseableFunctionInfo* parent, Scope* scope, ScriptContext *scriptContext) { int count = scope->Count(); @@ -74,7 +74,7 @@ namespace Js ScopeInfo* scopeInfo = RecyclerNewPlusZ(scriptContext->GetRecycler(), count * sizeof(SymbolInfo), - ScopeInfo, parent, count); + ScopeInfo, parent ? parent->GetFunctionInfo() : nullptr, count); scopeInfo->isDynamic = scope->GetIsDynamic(); scopeInfo->isObject = scope->GetIsObject(); scopeInfo->mustInstantiate = scope->GetMustInstantiate(); @@ -130,7 +130,9 @@ namespace Js TRACE_BYTECODE(_u("\nSave ScopeInfo: %s parent: %s\n\n"), funcBody->GetDisplayName(), parent->GetDisplayName()); - funcBody->SetScopeInfo(FromParent(parent)); + ScopeInfo *info = FromParent(parent); + info->parentOnly = true; + funcBody->SetScopeInfo(info); } // @@ -146,9 +148,9 @@ namespace Js // If we are reparsing a deferred function, we already have correct "parent" info in // funcBody->scopeInfo. parentFunc is the knopProg shell and should not be used in this // case. We should use existing parent if available. - FunctionBody * parent = funcBody->GetScopeInfo() ? + ParseableFunctionInfo * parent = funcBody->GetScopeInfo() ? funcBody->GetScopeInfo()->GetParent() : - parentFunc ? parentFunc->byteCodeFunction->GetFunctionBody() : nullptr; + parentFunc ? parentFunc->byteCodeFunction : nullptr; ScopeInfo* funcExprScopeInfo = nullptr; Scope* funcExprScope = func->GetFuncExprScope(); @@ -181,6 +183,14 @@ namespace Js // We will have to implement encoding block scope info to enable, which will also // enable defer parsing function that are in block scopes. + if (funcInfo->byteCodeFunction && + funcInfo->byteCodeFunction->GetScopeInfo() != nullptr && + !funcInfo->byteCodeFunction->GetScopeInfo()->IsParentInfoOnly()) + { + // No need to regenerate scope info if we re-compile an enclosing function + return; + } + Scope* currentScope = byteCodeGenerator->GetCurrentScope(); Assert(currentScope == funcInfo->GetBodyScope()); if (funcInfo->IsDeferred()) diff --git a/lib/Runtime/ByteCode/ScopeInfo.h b/lib/Runtime/ByteCode/ScopeInfo.h index bce1cdffda2..e71cf106e7c 100644 --- a/lib/Runtime/ByteCode/ScopeInfo.h +++ b/lib/Runtime/ByteCode/ScopeInfo.h @@ -34,7 +34,7 @@ namespace Js { }; private: - FunctionBody * const parent; // link to parent function body + FunctionInfo * const parent; // link to parent function ScopeInfo* funcExprScopeInfo; // optional func expr scope info ScopeInfo* paramScopeInfo; // optional param scope info @@ -46,6 +46,7 @@ namespace Js { BYTE areNamesCached : 1; BYTE canMergeWithBodyScope : 1; BYTE hasLocalInClosure : 1; + BYTE parentOnly : 1; Scope *scope; int scopeId; @@ -53,11 +54,13 @@ namespace Js { SymbolInfo symbols[]; // symbol PropertyIDs, index == sym.scopeSlot private: - ScopeInfo(FunctionBody * parent, int symbolCount) - : parent(parent), funcExprScopeInfo(nullptr), paramScopeInfo(nullptr), symbolCount(symbolCount), scope(nullptr), areNamesCached(false), canMergeWithBodyScope(true), hasLocalInClosure(false) + ScopeInfo(FunctionInfo * parent, int symbolCount) + : parent(parent), funcExprScopeInfo(nullptr), paramScopeInfo(nullptr), symbolCount(symbolCount), scope(nullptr), areNamesCached(false), canMergeWithBodyScope(true), hasLocalInClosure(false), parentOnly(false) { } + bool IsParentInfoOnly() const { return parentOnly; } + void SetFuncExprScopeInfo(ScopeInfo* funcExprScopeInfo) { this->funcExprScopeInfo = funcExprScopeInfo; @@ -177,19 +180,19 @@ namespace Js { void SaveSymbolInfo(Symbol* sym, MapSymbolData* mapSymbolData); static ScopeInfo* FromParent(FunctionBody* parent); - static ScopeInfo* FromScope(ByteCodeGenerator* byteCodeGenerator, FunctionBody* parent, Scope* scope, ScriptContext *scriptContext); + static ScopeInfo* FromScope(ByteCodeGenerator* byteCodeGenerator, ParseableFunctionInfo* parent, Scope* scope, ScriptContext *scriptContext); static void SaveParentScopeInfo(FuncInfo* parentFunc, FuncInfo* func); static void SaveScopeInfo(ByteCodeGenerator* byteCodeGenerator, FuncInfo* parentFunc, FuncInfo* func); public: - FunctionBody * GetParent() const + ParseableFunctionInfo * GetParent() const { - return parent; + return parent ? parent->GetParseableFunctionInfo() : nullptr; } ScopeInfo* GetParentScopeInfo() const { - return parent->GetScopeInfo(); + return parent ? parent->GetParseableFunctionInfo()->GetScopeInfo() : nullptr; } ScopeInfo* GetFuncExprScopeInfo() const diff --git a/lib/Runtime/Debug/TTEvents.cpp b/lib/Runtime/Debug/TTEvents.cpp index 58e25a03b86..730b480cf0d 100644 --- a/lib/Runtime/Debug/TTEvents.cpp +++ b/lib/Runtime/Debug/TTEvents.cpp @@ -258,7 +258,7 @@ namespace TTD { for(uint32 i = 0; i < resBody->GetNestedCount(); ++i) { - Js::ParseableFunctionInfo* ipfi = resBody->GetNestedFunc(i)->EnsureDeserialized(); + Js::ParseableFunctionInfo* ipfi = resBody->GetNestedFunctionForExecution(i); Js::FunctionBody* ifb = JsSupport::ForceAndGetFunctionBody(ipfi); if(this->m_functionLine == ifb->GetLineNumber() && this->m_functionColumn == ifb->GetColumnNumber()) @@ -273,7 +273,7 @@ namespace TTD uint32 endColumn = UINT32_MAX; if(i + 1 < resBody->GetNestedCount()) { - Js::ParseableFunctionInfo* ipfinext = resBody->GetNestedFunc(i + 1)->EnsureDeserialized(); + Js::ParseableFunctionInfo* ipfinext = resBody->GetNestedFunctionForExecution(i + 1); Js::FunctionBody* ifbnext = JsSupport::ForceAndGetFunctionBody(ipfinext); endLine = ifbnext->GetLineNumber(); diff --git a/lib/Runtime/Debug/TTRuntmeInfoTracker.cpp b/lib/Runtime/Debug/TTRuntmeInfoTracker.cpp index a4ab6fb113e..0881323bbef 100644 --- a/lib/Runtime/Debug/TTRuntmeInfoTracker.cpp +++ b/lib/Runtime/Debug/TTRuntmeInfoTracker.cpp @@ -449,7 +449,7 @@ namespace TTD for(uint32 i = 0; i < body->GetNestedCount(); ++i) { - Js::ParseableFunctionInfo* pfiMid = body->GetNestedFunc(i)->EnsureDeserialized(); + Js::ParseableFunctionInfo* pfiMid = body->GetNestedFunctionForExecution(i); Js::FunctionBody* currfb = TTD::JsSupport::ForceAndGetFunctionBody(pfiMid); this->ProcessFunctionBodyOnLoad(currfb, body); diff --git a/lib/Runtime/Debug/TTSnapValues.cpp b/lib/Runtime/Debug/TTSnapValues.cpp index 6bbc20047a0..8e06bbdb74a 100644 --- a/lib/Runtime/Debug/TTSnapValues.cpp +++ b/lib/Runtime/Debug/TTSnapValues.cpp @@ -1311,7 +1311,7 @@ namespace TTD functionInfo->SetGrfscr(functionInfo->GetGrfscr() | fscrGlobalCode); Js::EvalMapString key(source, length, moduleID, strictMode, /* isLibraryCode = */ false); - ctx->AddToNewFunctionMap(key, functionInfo); + ctx->AddToNewFunctionMap(key, functionInfo->GetFunctionInfo()); Js::FunctionBody* fb = JsSupport::ForceAndGetFunctionBody(pfuncScript->GetParseableFunctionInfo()); @@ -1477,7 +1477,7 @@ namespace TTD uint32 blength = parentBody->GetNestedCount(); for(uint32 i = 0; i < blength; ++i) { - Js::ParseableFunctionInfo* pfi = parentBody->GetNestedFunc(i)->EnsureDeserialized(); + Js::ParseableFunctionInfo* pfi = parentBody->GetNestedFunctionForExecution(i); Js::FunctionBody* currfb = JsSupport::ForceAndGetFunctionBody(pfi); if(fbInfo->OptLine == currfb->GetLineNumber() && fbInfo->OptColumn == currfb->GetColumnNumber()) diff --git a/lib/Runtime/Language/AsmJsModule.cpp b/lib/Runtime/Language/AsmJsModule.cpp index 3327bbbe348..0e53f802562 100644 --- a/lib/Runtime/Language/AsmJsModule.cpp +++ b/lib/Runtime/Language/AsmJsModule.cpp @@ -618,6 +618,7 @@ namespace Js CompileScriptException se; funcBody = deferParseFunction->ParseAsmJs(&ps, &se, &parseTree); + fncNode->sxFnc.funcInfo->byteCodeFunction = funcBody; TRACE_BYTECODE(_u("\nDeferred parse %s\n"), funcBody->GetDisplayName()); if (parseTree && parseTree->nop == knopProg) @@ -634,7 +635,6 @@ namespace Js } } GetByteCodeGenerator()->PushFuncInfo(_u("Start asm.js AST prepass"), fncNode->sxFnc.funcInfo); - fncNode->sxFnc.funcInfo->byteCodeFunction->SetBoundPropertyRecords(GetByteCodeGenerator()->EnsurePropertyRecordList()); BindArguments(fncNode->sxFnc.pnodeParams); ASTPrepass(pnodeBody, func); GetByteCodeGenerator()->PopFuncInfo(_u("End asm.js AST prepass")); diff --git a/lib/Runtime/Language/DynamicProfileInfo.cpp b/lib/Runtime/Language/DynamicProfileInfo.cpp index e258da4f049..f27b5657ebd 100644 --- a/lib/Runtime/Language/DynamicProfileInfo.cpp +++ b/lib/Runtime/Language/DynamicProfileInfo.cpp @@ -423,7 +423,7 @@ namespace Js } // Mark the callsite bit where caller and callee is same function - if (functionBody == calleeFunctionInfo && callSiteId < 32) + if (calleeFunctionInfo && functionBody == calleeFunctionInfo->GetFunctionProxy() && callSiteId < 32) { this->m_recursiveInlineInfo = this->m_recursiveInlineInfo | (1 << callSiteId); } @@ -780,7 +780,8 @@ namespace Js if (sourceId == CurrentSourceId) // caller and callee in same file { - return functionBody->GetUtf8SourceInfo()->FindFunction(functionId); + FunctionProxy *inlineeProxy = functionBody->GetUtf8SourceInfo()->FindFunction(functionId); + return inlineeProxy ? inlineeProxy->GetFunctionInfo() : nullptr; } if (sourceId != NoSourceId && sourceId != InvalidSourceId) @@ -794,7 +795,8 @@ namespace Js Utf8SourceInfo *srcInfo = sourceList->Item(i)->Get(); if (srcInfo && srcInfo->GetHostSourceContext() == sourceId) { - return srcInfo->FindFunction(functionId); + FunctionProxy *inlineeProxy = srcInfo->FindFunction(functionId); + return inlineeProxy ? inlineeProxy->GetFunctionInfo() : nullptr; } } } diff --git a/lib/Runtime/Language/FunctionCodeGenJitTimeData.cpp b/lib/Runtime/Language/FunctionCodeGenJitTimeData.cpp index 0d610290760..b14d883e5c4 100644 --- a/lib/Runtime/Language/FunctionCodeGenJitTimeData.cpp +++ b/lib/Runtime/Language/FunctionCodeGenJitTimeData.cpp @@ -35,7 +35,8 @@ namespace Js FunctionBody *FunctionCodeGenJitTimeData::GetFunctionBody() const { - return this->functionInfo->GetFunctionBody(); + FunctionProxy *proxy = this->functionInfo->GetFunctionProxy(); + return proxy && proxy->IsFunctionBody() ? proxy->GetFunctionBody() : nullptr; } Var FunctionCodeGenJitTimeData::GetGlobalThisObject() const diff --git a/lib/Runtime/Language/FunctionCodeGenJitTimeData.h b/lib/Runtime/Language/FunctionCodeGenJitTimeData.h index 66ea8b74331..3a2fe4bcc84 100644 --- a/lib/Runtime/Language/FunctionCodeGenJitTimeData.h +++ b/lib/Runtime/Language/FunctionCodeGenJitTimeData.h @@ -120,7 +120,7 @@ namespace Js bool IsPolymorphicCallSite(const ProfileId profiledCallSiteId) const; // This function walks all the chained jittimedata and returns the one which match the functionInfo. // This can return null, if the functionInfo doesn't match. - const FunctionCodeGenJitTimeData *GetJitTimeDataFromFunctionInfo(FunctionInfo *polyFunctionInfo) const; + const FunctionCodeGenJitTimeData *GetJitTimeDataFromFunctionInfo(FunctionInfo *polyFunctioInfoy) const; uint GetGlobalObjTypeSpecFldInfoCount() const { return this->globalObjTypeSpecFldInfoCount; } ObjTypeSpecFldInfo** GetGlobalObjTypeSpecFldInfoArray() const {return this->globalObjTypeSpecFldInfoArray; } diff --git a/lib/Runtime/Language/FunctionCodeGenRuntimeData.cpp b/lib/Runtime/Language/FunctionCodeGenRuntimeData.cpp index fe4a2770365..543efbe7532 100644 --- a/lib/Runtime/Language/FunctionCodeGenRuntimeData.cpp +++ b/lib/Runtime/Language/FunctionCodeGenRuntimeData.cpp @@ -124,7 +124,8 @@ namespace Js const FunctionCodeGenRuntimeData *FunctionCodeGenRuntimeData::GetRuntimeDataFromFunctionInfo(FunctionInfo *polyFunctionInfo) const { const FunctionCodeGenRuntimeData *next = this; - while (next && next->functionBody != polyFunctionInfo) + FunctionProxy *polyFunctionProxy = polyFunctionInfo->GetFunctionProxy(); + while (next && next->functionBody != polyFunctionProxy) { next = next->next; } diff --git a/lib/Runtime/Language/InlineCache.h b/lib/Runtime/Language/InlineCache.h index 87ab87663ec..5c3261aee68 100644 --- a/lib/Runtime/Language/InlineCache.h +++ b/lib/Runtime/Language/InlineCache.h @@ -969,6 +969,7 @@ namespace Js bool IsEmpty() const { return type == nullptr; } bool TryGetResult(Var instance, JavascriptFunction * function, JavascriptBoolean ** result); void Cache(Type * instanceType, JavascriptFunction * function, JavascriptBoolean * result, ScriptContext * scriptContext); + void Unregister(ScriptContext * scriptContext); static uint32 OffsetOfFunction(); static uint32 OffsetOfResult(); @@ -977,7 +978,6 @@ namespace Js private: void Set(Type * instanceType, JavascriptFunction * function, JavascriptBoolean * result); void Clear(); - void Unregister(ScriptContext * scriptContext); }; // Two-entry Type-indexed circular cache diff --git a/lib/Runtime/Language/InterpreterStackFrame.cpp b/lib/Runtime/Language/InterpreterStackFrame.cpp index 9c2d5f85db1..8dc46ff1c1f 100644 --- a/lib/Runtime/Language/InterpreterStackFrame.cpp +++ b/lib/Runtime/Language/InterpreterStackFrame.cpp @@ -501,7 +501,7 @@ { \ PROCESS_READ_LAYOUT(name, ElementSlot, suffix); \ SetReg(playout->Value, \ - func((FrameDisplay*)GetNonVarReg(playout->Instance), reinterpret_cast(this->m_functionBody->GetNestedFuncReference(playout->SlotIndex)))); \ + func((FrameDisplay*)GetNonVarReg(playout->Instance), this->m_functionBody->GetNestedFuncReference(playout->SlotIndex))); \ break; \ } @@ -512,7 +512,7 @@ { \ PROCESS_READ_LAYOUT(name, ElementSlotI1, suffix); \ SetReg(playout->Value, \ - func(this->GetFrameDisplayForNestedFunc(), reinterpret_cast(this->m_functionBody->GetNestedFuncReference(playout->SlotIndex)))); \ + func(this->GetFrameDisplayForNestedFunc(), this->m_functionBody->GetNestedFuncReference(playout->SlotIndex))); \ break; \ } @@ -1920,6 +1920,8 @@ namespace Js AssertMsg(!executeFunction->IsDeferredParseFunction(), "Non-intrinsic functions must provide byte-code to execute"); + executeFunction->BeginExecution(); + bool fReleaseAlloc = false; InterpreterStackFrame* newInstance = nullptr; Var* allocation = nullptr; @@ -2049,8 +2051,6 @@ namespace Js } #endif - executeFunction->BeginExecution(); - Var aReturn = nullptr; { @@ -2808,9 +2808,9 @@ namespace Js const auto& modFunc = info->GetFunction(i); // TODO: add more runtime checks here - auto proxy = m_functionBody->GetNestedFuncReference(i); + FunctionInfoPtrPtr functionInfo = m_functionBody->GetNestedFuncReference(i); - AsmJsScriptFunction* scriptFuncObj = (AsmJsScriptFunction*)ScriptFunction::OP_NewScFunc(pDisplay, (FunctionProxy**)proxy); + AsmJsScriptFunction* scriptFuncObj = (AsmJsScriptFunction*)ScriptFunction::OP_NewScFunc(pDisplay, functionInfo); localModuleFunctions[modFunc.location] = scriptFuncObj; if (i == 0 && info->GetUsesChangeHeap()) { @@ -3940,7 +3940,7 @@ namespace Js AssertMsg(static_cast(args.Info.Flags) == flags, "Flags don't fit into the CallInfo field?"); if (spreadIndices != nullptr) { - JavascriptFunction::CallSpreadFunction(function, function->GetEntryPoint(), args, spreadIndices); + JavascriptFunction::CallSpreadFunction(function, args, spreadIndices); } else { @@ -3954,7 +3954,7 @@ namespace Js AssertMsg(static_cast(args.Info.Flags) == flags, "Flags don't fit into the CallInfo field?"); if (spreadIndices != nullptr) { - SetReg((RegSlot)playout->Return, JavascriptFunction::CallSpreadFunction(function, function->GetEntryPoint(), args, spreadIndices)); + SetReg((RegSlot)playout->Return, JavascriptFunction::CallSpreadFunction(function, args, spreadIndices)); } else { @@ -7373,7 +7373,7 @@ const byte * InterpreterStackFrame::OP_ProfiledLoopBodyStart(const byte * ip) FrameDisplay *frameDisplay = this->GetFrameDisplayForNestedFunc(); SetRegAllowStackVarEnableOnly(playout->Value, StackScriptFunction::OP_NewStackScFunc(frameDisplay, - reinterpret_cast(this->m_functionBody->GetNestedFuncReference(funcIndex)), + this->m_functionBody->GetNestedFuncReference(funcIndex), this->GetStackNestedFunction(funcIndex))); } @@ -7384,7 +7384,7 @@ const byte * InterpreterStackFrame::OP_ProfiledLoopBodyStart(const byte * ip) FrameDisplay *frameDisplay = (FrameDisplay*)GetNonVarReg(playout->Instance); SetRegAllowStackVarEnableOnly(playout->Value, StackScriptFunction::OP_NewStackScFunc(frameDisplay, - reinterpret_cast(this->m_functionBody->GetNestedFuncReference(funcIndex)), + this->m_functionBody->GetNestedFuncReference(funcIndex), this->GetStackNestedFunction(funcIndex))); } @@ -7532,7 +7532,7 @@ const byte * InterpreterStackFrame::OP_ProfiledLoopBodyStart(const byte * ip) for (uint i = 0; i < nestedCount; i++) { StackScriptFunction * stackScriptFunction = scriptFunctions + i; - FunctionProxy* nestedProxy = functionBody->GetNestedFunc(i); + FunctionProxy* nestedProxy = functionBody->GetNestedFunctionProxy(i); ScriptFunctionType* type = nestedProxy->EnsureDeferredPrototypeType(); new (stackScriptFunction)StackScriptFunction(nestedProxy, type); } diff --git a/lib/Runtime/Language/JavascriptOperators.cpp b/lib/Runtime/Language/JavascriptOperators.cpp index c013acd030d..c9ad3dddbcc 100644 --- a/lib/Runtime/Language/JavascriptOperators.cpp +++ b/lib/Runtime/Language/JavascriptOperators.cpp @@ -5549,13 +5549,6 @@ namespace Js ScriptFunction *func = entry->func; FunctionProxy * proxy = func->GetFunctionProxy(); - if (proxy != proxy->GetFunctionProxy()) - { - // The FunctionProxy has changed since the object was cached, e.g., due to execution - // of a deferred function through a different object. - proxy = proxy->GetFunctionProxy(); - func->SetFunctionInfo(proxy); - } // Reset the function's type to the default type with no properties // Use the cached type on the function proxy rather than the type in the func cache entry @@ -5581,7 +5574,7 @@ namespace Js uint nestedIndex = entry->nestedIndex; uint scopeSlot = entry->scopeSlot; - FunctionProxy * proxy = funcParent->GetFunctionBody()->GetNestedFunc(nestedIndex); + FunctionProxy * proxy = funcParent->GetFunctionBody()->GetNestedFunctionProxy(nestedIndex); ScriptFunction *func = scriptContext->GetLibrary()->CreateScriptFunction(proxy); @@ -9842,10 +9835,7 @@ namespace Js JavascriptOperators::GetDeferredDeserializedFunctionProxy(JavascriptFunction* func) { FunctionProxy* proxy = func->GetFunctionProxy(); - if (proxy->GetFunctionProxy() != proxy) - { - proxy = proxy->GetFunctionProxy(); - } + Assert(proxy->GetFunctionInfo()->GetFunctionProxy() != proxy); return proxy; } diff --git a/lib/Runtime/Language/i386/AsmJsJitTemplate.cpp b/lib/Runtime/Language/i386/AsmJsJitTemplate.cpp index ea16a67473c..578089483f7 100644 --- a/lib/Runtime/Language/i386/AsmJsJitTemplate.cpp +++ b/lib/Runtime/Language/i386/AsmJsJitTemplate.cpp @@ -523,11 +523,7 @@ namespace Js //CodeGenDone status is set by TJ if ((entryPointInfo->IsNotScheduled() || entryPointInfo->IsCodeGenDone()) && !PHASE_OFF(BackEndPhase, body) && !PHASE_OFF(FullJitPhase, body)) { - if (entryPointInfo->callsCount < 255) - { - ++entryPointInfo->callsCount; - } - const int minTemplatizedJitRunCount = (int)CONFIG_FLAG(MinTemplatizedJitRunCount); + const uint32 minTemplatizedJitRunCount = (uint32)CONFIG_FLAG(MinTemplatizedJitRunCount); if ((entryPointInfo->callsCount >= minTemplatizedJitRunCount || body->IsHotAsmJsLoop())) { if (PHASE_TRACE1(AsmjsEntryPointInfoPhase)) diff --git a/lib/Runtime/Library/GlobalObject.cpp b/lib/Runtime/Library/GlobalObject.cpp index 7e7d1e69fdd..0ad0eb4f478 100644 --- a/lib/Runtime/Library/GlobalObject.cpp +++ b/lib/Runtime/Library/GlobalObject.cpp @@ -764,6 +764,7 @@ namespace Js { // This could happen if the top level function is marked as deferred, we need to parse this to generate the script compile information (RegisterScript depends on that) Js::JavascriptFunction::DeferredParse(&pEvalFunction); + proxy = pEvalFunction->GetFunctionProxy(); } scriptContext->RegisterScript(proxy); @@ -985,7 +986,7 @@ namespace Js { FunctionBody* parentFuncBody = pfuncCaller->GetFunctionBody(); Utf8SourceInfo* parentUtf8SourceInfo = parentFuncBody->GetUtf8SourceInfo(); - Utf8SourceInfo* utf8SourceInfo = funcBody->GetFunctionProxy()->GetUtf8SourceInfo(); + Utf8SourceInfo* utf8SourceInfo = funcBody->GetUtf8SourceInfo(); utf8SourceInfo->SetCallerUtf8SourceInfo(parentUtf8SourceInfo); } } diff --git a/lib/Runtime/Library/InJavascript/Intl.js.bc.32b.h b/lib/Runtime/Library/InJavascript/Intl.js.bc.32b.h index c7e5784a5d6..7f0aea8552b 100644 --- a/lib/Runtime/Library/InJavascript/Intl.js.bc.32b.h +++ b/lib/Runtime/Library/InJavascript/Intl.js.bc.32b.h @@ -2732,18 +2732,18 @@ namespace Js /* 00005230 */ 0x00, 0x3B, 0x1A, 0x01, 0x00, 0x6D, 0x1A, 0x01, 0x00, 0x6D, 0x1A, 0x01, 0x00, 0x8D, 0x1A, 0x01, /* 00005240 */ 0x00, 0x8D, 0x1A, 0x01, 0x00, 0x0A, 0x1B, 0x01, 0x00, 0x0A, 0x1B, 0x01, 0x00, 0x8F, 0x1B, 0x01, /* 00005250 */ 0x00, 0x8F, 0x1B, 0x01, 0x00, 0x18, 0x1C, 0x01, 0x00, 0x18, 0x1C, 0x01, 0x00, 0x1F, 0x1C, 0x01, -/* 00005260 */ 0x00, 0x1F, 0x1C, 0x01, 0x00, 0x24, 0x1C, 0x01, 0x00, 0x24, 0x1C, 0x01, 0x00, 0x44, 0x39, 0x6E, -/* 00005270 */ 0x00, 0x08, 0x00, 0xFC, 0x09, 0xFE, 0xA4, 0x02, 0xFF, 0xA8, 0x41, 0x40, 0x00, 0x00, 0x00, 0xFE, +/* 00005260 */ 0x00, 0x1F, 0x1C, 0x01, 0x00, 0x24, 0x1C, 0x01, 0x00, 0x24, 0x1C, 0x01, 0x00, 0x44, 0xB9, 0xDC, +/* 00005270 */ 0x00, 0x00, 0x00, 0xFC, 0x09, 0xFE, 0xA4, 0x02, 0xFF, 0xA8, 0x41, 0x40, 0x00, 0x00, 0x00, 0xFE, /* 00005280 */ 0x75, 0x01, 0x01, 0xFF, 0x00, 0x10, 0x01, 0x00, 0xFE, 0x75, 0x01, 0xFF, 0xAF, 0x1A, 0x01, 0x00, -/* 00005290 */ 0xFF, 0xAF, 0x1A, 0x01, 0x00, 0x01, 0x04, 0x04, 0x05, 0x05, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, +/* 00005290 */ 0xFF, 0xAF, 0x1A, 0x01, 0x00, 0x40, 0x01, 0x04, 0x04, 0x05, 0x05, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 000052A0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 000052B0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x02, 0xFE, 0xA5, 0x02, /* 000052C0 */ 0x07, 0x0C, 0xA8, 0x00, 0xD4, 0x00, 0x00, 0x00, 0x00, 0x04, 0xFA, 0x04, 0x24, 0x00, 0x00, 0x00, -/* 000052D0 */ 0x00, 0x00, 0x01, 0x0A, 0x00, 0x00, 0x00, 0x00, 0xDC, 0x52, 0x00, 0x00, 0xBF, 0x7E, 0x10, 0x0A, +/* 000052D0 */ 0x00, 0x00, 0x01, 0x0A, 0x00, 0x00, 0x00, 0x00, 0xDC, 0x52, 0x00, 0x00, 0xBF, 0xFD, 0x20, 0x04, /* 000052E0 */ 0x4F, 0xFC, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x01, 0xFF, 0xA2, 0x41, 0x51, 0x00, 0x01, /* 000052F0 */ 0x00, 0xFE, 0x97, 0x01, 0x18, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFE, 0x97, 0x01, 0xFF, -/* 00005300 */ 0x89, 0x1A, 0x01, 0x00, 0xFF, 0x89, 0x1A, 0x01, 0x00, 0x39, 0x13, 0x2F, 0x3E, 0x09, 0xFE, 0xAC, -/* 00005310 */ 0x01, 0xFE, 0xA7, 0x01, 0x21, 0x10, 0x40, 0x3D, 0x3C, 0x3D, 0x3D, 0x12, 0x3B, 0xFF, 0xFF, 0xFF, +/* 00005300 */ 0x89, 0x1A, 0x01, 0x00, 0xFF, 0x89, 0x1A, 0x01, 0x00, 0x40, 0x39, 0x13, 0x2F, 0x3E, 0x09, 0xFE, +/* 00005310 */ 0xAC, 0x01, 0xFE, 0xA7, 0x01, 0x21, 0x10, 0x3D, 0x3C, 0x3D, 0x3D, 0x12, 0x3B, 0xFF, 0xFF, 0xFF, /* 00005320 */ 0xFF, 0xFF, 0x3C, 0x3D, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 00005330 */ 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x02, 0xFE, 0xA6, 0x02, 0x02, 0xFE, 0xA7, 0x02, 0x02, 0xFE, 0xA8, /* 00005340 */ 0x02, 0x02, 0xFE, 0xA9, 0x02, 0x03, 0x04, 0x02, 0xFE, 0xAA, 0x02, 0x02, 0xFE, 0xAB, 0x02, 0x02, @@ -2967,7 +2967,7 @@ namespace Js /* 000060E0 */ 0xDC, 0x00, 0x00, 0x81, 0xDB, 0x00, 0x00, 0x08, 0xD8, 0x00, 0x00, 0xF1, 0xD4, 0x00, 0x00, 0xAD, /* 000060F0 */ 0xD3, 0x00, 0x00, 0x6F, 0xD1, 0x00, 0x00, 0x99, 0xD0, 0x00, 0x00, 0xC3, 0xCF, 0x00, 0x00, 0xED, /* 00006100 */ 0xCE, 0x00, 0x00, 0x1D, 0xCC, 0x00, 0x00, 0xC4, 0xCA, 0x00, 0x00, 0x65, 0xB2, 0x00, 0x00, 0xD5, -/* 00006110 */ 0x99, 0x00, 0x00, 0x17, 0x61, 0x00, 0x00, 0xBF, 0x7E, 0x31, 0x02, 0x4F, 0xFD, 0x0F, 0xFF, 0xFF, +/* 00006110 */ 0x99, 0x00, 0x00, 0x17, 0x61, 0x00, 0x00, 0x3F, 0xFD, 0x62, 0x04, 0x4F, 0xFD, 0x0F, 0xFF, 0xFF, /* 00006120 */ 0xFF, 0xFF, 0xFF, 0xFE, 0x7F, 0x03, 0x1A, 0xFF, 0xA0, 0x41, 0x51, 0x00, 0x33, 0x00, 0xFE, 0x84, /* 00006130 */ 0xAC, 0x0E, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFE, 0x84, 0xAC, 0xFE, 0xAF, 0x6D, 0xFE, /* 00006140 */ 0xAF, 0x6D, 0x01, 0x13, 0x2F, 0x3B, 0x09, 0xD9, 0xD9, 0x01, 0x10, 0x01, 0x09, 0x11, 0x11, 0x11, @@ -3089,10 +3089,10 @@ namespace Js /* 00006880 */ 0x00, 0x00, 0x37, 0x8F, 0x00, 0x00, 0x90, 0x8E, 0x00, 0x00, 0x4A, 0x8C, 0x00, 0x00, 0x3F, 0x8A, /* 00006890 */ 0x00, 0x00, 0x96, 0x85, 0x00, 0x00, 0xEB, 0x7B, 0x00, 0x00, 0x6B, 0x79, 0x00, 0x00, 0xEF, 0x76, /* 000068A0 */ 0x00, 0x00, 0x73, 0x74, 0x00, 0x00, 0xBC, 0x71, 0x00, 0x00, 0x12, 0x6F, 0x00, 0x00, 0xCC, 0x6D, -/* 000068B0 */ 0x00, 0x00, 0xB6, 0x68, 0x00, 0x00, 0xBF, 0x7E, 0x11, 0x0A, 0x4F, 0xFC, 0x0F, 0xFE, 0x2D, 0x03, +/* 000068B0 */ 0x00, 0x00, 0xB6, 0x68, 0x00, 0x00, 0xBF, 0xFD, 0x22, 0x04, 0x4F, 0xFC, 0x0F, 0xFE, 0x2D, 0x03, /* 000068C0 */ 0xFE, 0x4D, 0x05, 0x1B, 0xFF, 0xA0, 0x41, 0x43, 0x00, 0x42, 0x00, 0xFF, 0x7D, 0x10, 0x01, 0x00, /* 000068D0 */ 0x01, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFF, 0x7D, 0x10, 0x01, 0x00, 0xFE, 0x0D, 0x08, -/* 000068E0 */ 0xFE, 0x0D, 0x08, 0x03, 0x07, 0x15, 0x19, 0x09, 0x7A, 0x7A, 0x04, 0x08, 0x09, 0x08, 0x20, 0x20, +/* 000068E0 */ 0xFE, 0x0D, 0x08, 0x08, 0x03, 0x07, 0x15, 0x19, 0x09, 0x7A, 0x7A, 0x04, 0x08, 0x09, 0x20, 0x20, /* 000068F0 */ 0x20, 0x20, 0x01, 0x16, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x17, 0x18, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 00006900 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x02, 0xFE, 0x19, 0x03, /* 00006910 */ 0x02, 0xFE, 0xC4, 0x03, 0x02, 0xFE, 0xCE, 0x02, 0x02, 0xFE, 0xFD, 0x02, 0x02, 0xFE, 0xC5, 0x03, @@ -3154,10 +3154,10 @@ namespace Js /* 00006C90 */ 0x01, 0x00, 0xFF, 0xB3, 0x10, 0x01, 0x00, 0x0A, 0x05, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x3D, 0x00, /* 00006CA0 */ 0x2A, 0x00, 0x92, 0x00, 0x29, 0x00, 0x4C, 0x00, 0x25, 0x00, 0x6C, 0x00, 0x2A, 0x00, 0x92, 0x00, /* 00006CB0 */ 0x13, 0x01, 0xDE, 0x03, 0x28, 0x00, 0x3F, 0x00, 0x61, 0x00, 0x5B, 0x01, 0x3B, 0x00, 0x45, 0x00, -/* 00006CC0 */ 0x00, 0xC5, 0x6C, 0x00, 0x00, 0x3F, 0x7E, 0x1D, 0x0A, 0x00, 0xFC, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, +/* 00006CC0 */ 0x00, 0xC5, 0x6C, 0x00, 0x00, 0xBF, 0xFC, 0x3A, 0x04, 0x00, 0xFC, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, /* 00006CD0 */ 0xFF, 0xFE, 0x66, 0x05, 0x60, 0xFF, 0xA2, 0x41, 0x51, 0x00, 0x43, 0x00, 0xFF, 0x31, 0x17, 0x01, -/* 00006CE0 */ 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFF, 0x31, 0x17, 0x01, 0x00, 0xE9, 0xE9, 0x04, -/* 00006CF0 */ 0x05, 0x07, 0x05, 0x1A, 0x1A, 0x05, 0x02, 0x01, 0x01, 0x05, 0x41, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, +/* 00006CE0 */ 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFF, 0x31, 0x17, 0x01, 0x00, 0xE9, 0xE9, 0x41, +/* 00006CF0 */ 0x04, 0x05, 0x07, 0x05, 0x1A, 0x1A, 0x05, 0x02, 0x01, 0x01, 0x05, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 00006D00 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x06, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 00006D10 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x02, 0xFE, 0xB8, 0x03, /* 00006D20 */ 0x02, 0xFE, 0x67, 0x03, 0x04, 0x90, 0x8F, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, @@ -3170,11 +3170,11 @@ namespace Js /* 00006D90 */ 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x07, 0x04, 0x00, 0x8F, 0x01, 0x00, 0x00, 0x00, 0x03, /* 00006DA0 */ 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x98, 0x08, 0x08, 0x05, 0x01, 0x00, 0x9D, 0x08, 0x07, 0x05, /* 00006DB0 */ 0x00, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x60, 0x17, 0x01, 0x00, 0x03, 0x00, -/* 00006DC0 */ 0x00, 0x00, 0x00, 0x68, 0x00, 0x84, 0x00, 0x26, 0x00, 0x35, 0x00, 0x00, 0x3F, 0x7E, 0x11, 0x0A, +/* 00006DC0 */ 0x00, 0x00, 0x00, 0x68, 0x00, 0x84, 0x00, 0x26, 0x00, 0x35, 0x00, 0x00, 0xBF, 0xFC, 0x22, 0x04, /* 00006DD0 */ 0x0F, 0xFC, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x3E, 0x05, 0x39, 0xFF, 0xA0, 0x41, 0x51, /* 00006DE0 */ 0x00, 0x41, 0x00, 0xFF, 0x61, 0x0D, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFF, -/* 00006DF0 */ 0x61, 0x0D, 0x01, 0x00, 0xFE, 0x6B, 0x02, 0xFE, 0x6B, 0x02, 0x05, 0x05, 0x08, 0x04, 0x25, 0x24, -/* 00006E00 */ 0x04, 0x03, 0x01, 0x09, 0x04, 0x04, 0x04, 0x04, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, +/* 00006DF0 */ 0x61, 0x0D, 0x01, 0x00, 0xFE, 0x6B, 0x02, 0xFE, 0x6B, 0x02, 0x09, 0x05, 0x05, 0x08, 0x04, 0x25, +/* 00006E00 */ 0x24, 0x04, 0x03, 0x01, 0x04, 0x04, 0x04, 0x04, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 00006E10 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 00006E20 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x02, 0xFE, 0x19, 0x03, 0x02, 0xFE, 0xC3, /* 00006E30 */ 0x03, 0x02, 0xFE, 0xCE, 0x02, 0xAA, 0x5B, 0x05, 0xB4, 0x05, 0x05, 0x2C, 0x08, 0x05, 0x15, 0x03, @@ -3191,10 +3191,10 @@ namespace Js /* 00006EE0 */ 0x00, 0x00, 0xFE, 0x3C, 0x02, 0xFE, 0x08, 0x02, 0xFE, 0x41, 0x02, 0xFE, 0x4D, 0x02, 0x00, 0xFF, /* 00006EF0 */ 0x88, 0x0D, 0x01, 0x00, 0x07, 0x05, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x3D, 0x00, 0x2A, 0x00, 0x8B, /* 00006F00 */ 0x00, 0x26, 0x00, 0x4C, 0x00, 0x15, 0x00, 0x6C, 0x00, 0x2A, 0x00, 0x8B, 0x00, 0x09, 0x00, 0x38, -/* 00006F10 */ 0x00, 0x00, 0x3F, 0x7E, 0x15, 0x0A, 0x0F, 0xFC, 0x07, 0xFE, 0x5B, 0x03, 0xFE, 0x22, 0x05, 0x10, +/* 00006F10 */ 0x00, 0x00, 0xBF, 0xFC, 0x2A, 0x04, 0x0F, 0xFC, 0x07, 0xFE, 0x5B, 0x03, 0xFE, 0x22, 0x05, 0x10, /* 00006F20 */ 0xFF, 0xA1, 0x41, 0x61, 0x00, 0x40, 0x00, 0xFF, 0xE3, 0x06, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, -/* 00006F30 */ 0x00, 0x01, 0x01, 0xFF, 0xE3, 0x06, 0x01, 0x00, 0xFE, 0xCA, 0x03, 0xFE, 0xCA, 0x03, 0x0A, 0x09, -/* 00006F40 */ 0x0D, 0x0A, 0x61, 0x60, 0x04, 0x03, 0x0C, 0x06, 0x0B, 0x07, 0x07, 0x07, 0x07, 0xFF, 0xFF, 0xFF, +/* 00006F30 */ 0x00, 0x01, 0x01, 0xFF, 0xE3, 0x06, 0x01, 0x00, 0xFE, 0xCA, 0x03, 0xFE, 0xCA, 0x03, 0x0B, 0x0A, +/* 00006F40 */ 0x09, 0x0D, 0x0A, 0x61, 0x60, 0x04, 0x03, 0x0C, 0x06, 0x07, 0x07, 0x07, 0x07, 0xFF, 0xFF, 0xFF, /* 00006F50 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0C, 0xFF, 0xFF, 0xFF, /* 00006F60 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x03, 0x02, /* 00006F70 */ 0xFE, 0x19, 0x03, 0x02, 0xFE, 0xC3, 0x03, 0x02, 0xFE, 0xCE, 0x02, 0x01, 0x01, 0x00, 0x00, 0x00, @@ -3233,11 +3233,11 @@ namespace Js /* 00007180 */ 0x2E, 0x02, 0xFE, 0x06, 0x02, 0xFE, 0x31, 0x02, 0x00, 0xFF, 0x0E, 0x07, 0x01, 0x00, 0x0B, 0x07, /* 00007190 */ 0x00, 0x00, 0x00, 0x0B, 0x00, 0x39, 0x00, 0x2A, 0x00, 0x81, 0x00, 0x26, 0x00, 0x48, 0x00, 0x15, /* 000071A0 */ 0x00, 0x68, 0x00, 0x2A, 0x00, 0x83, 0x00, 0x0C, 0x00, 0x36, 0x00, 0x50, 0x00, 0x53, 0x00, 0x20, -/* 000071B0 */ 0x00, 0x51, 0x00, 0x6D, 0x00, 0x85, 0x00, 0x5E, 0x00, 0x52, 0x00, 0x00, 0x3F, 0x7E, 0x15, 0x0A, +/* 000071B0 */ 0x00, 0x51, 0x00, 0x6D, 0x00, 0x85, 0x00, 0x5E, 0x00, 0x52, 0x00, 0x00, 0xBF, 0xFC, 0x2A, 0x04, /* 000071C0 */ 0x0F, 0xFC, 0x07, 0xFE, 0xCE, 0x02, 0xFE, 0x02, 0x05, 0x10, 0xFF, 0xA1, 0x41, 0x61, 0x00, 0x3F, /* 000071D0 */ 0x00, 0xFF, 0x1B, 0x01, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFF, 0x1B, 0x01, -/* 000071E0 */ 0x01, 0x00, 0xFE, 0x69, 0x05, 0xFE, 0x69, 0x05, 0x0A, 0x08, 0x0F, 0x05, 0x67, 0x5E, 0x04, 0x02, -/* 000071F0 */ 0x09, 0x09, 0x0B, 0x08, 0x07, 0x08, 0x08, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, +/* 000071E0 */ 0x01, 0x00, 0xFE, 0x69, 0x05, 0xFE, 0x69, 0x05, 0x0B, 0x0A, 0x08, 0x0F, 0x05, 0x67, 0x5E, 0x04, +/* 000071F0 */ 0x02, 0x09, 0x09, 0x08, 0x07, 0x08, 0x08, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 00007200 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0E, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 00007210 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x03, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, /* 00007220 */ 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x04, 0x02, 0xFE, 0xCE, 0x02, 0xFE, 0xD5, 0x01, @@ -3277,10 +3277,10 @@ namespace Js /* 00007440 */ 0x44, 0x00, 0x20, 0x00, 0x5B, 0x00, 0x26, 0x00, 0x38, 0x00, 0x22, 0x00, 0x39, 0x00, 0x25, 0x00, /* 00007450 */ 0xA1, 0x00, 0x26, 0x00, 0x49, 0x00, 0x0A, 0x00, 0x3B, 0x00, 0x25, 0x00, 0x40, 0x00, 0x26, 0x00, /* 00007460 */ 0x5B, 0x00, 0x23, 0x00, 0x51, 0x00, 0x42, 0x00, 0x67, 0x00, 0x0B, 0x00, 0x3F, 0x00, 0x08, 0x00, -/* 00007470 */ 0x1D, 0x00, 0x00, 0x3F, 0x7E, 0x15, 0x0A, 0x1F, 0xFC, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, +/* 00007470 */ 0x1D, 0x00, 0x00, 0xBF, 0xFC, 0x2A, 0x04, 0x1F, 0xFC, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, /* 00007480 */ 0xF5, 0x04, 0x64, 0xFF, 0xA0, 0x41, 0x71, 0x00, 0x3E, 0x00, 0xFE, 0x21, 0xFE, 0xFF, 0x00, 0x10, -/* 00007490 */ 0x01, 0x00, 0x01, 0x01, 0xFE, 0x21, 0xFE, 0xFE, 0xBA, 0x02, 0xFE, 0xBA, 0x02, 0x0A, 0x0B, 0x10, -/* 000074A0 */ 0x0A, 0x5D, 0x5A, 0x03, 0x02, 0x0B, 0x0B, 0x0B, 0x03, 0x03, 0x03, 0x03, 0x01, 0xFF, 0xFF, 0xFF, +/* 00007490 */ 0x01, 0x00, 0x01, 0x01, 0xFE, 0x21, 0xFE, 0xFE, 0xBA, 0x02, 0xFE, 0xBA, 0x02, 0x0B, 0x0A, 0x0B, +/* 000074A0 */ 0x10, 0x0A, 0x5D, 0x5A, 0x03, 0x02, 0x0B, 0x0B, 0x03, 0x03, 0x03, 0x03, 0x01, 0xFF, 0xFF, 0xFF, /* 000074B0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xFF, /* 000074C0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x03, 0x02, /* 000074D0 */ 0xFE, 0x19, 0x03, 0x02, 0xFE, 0x7D, 0x03, 0x02, 0xFE, 0x68, 0x03, 0x04, 0x02, 0xFE, 0xC2, 0x03, @@ -3316,11 +3316,11 @@ namespace Js /* 000076B0 */ 0x10, 0x08, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x00, 0x00, 0xFE, 0x3C, 0x02, 0xFE, /* 000076C0 */ 0x06, 0x02, 0xFE, 0x31, 0x02, 0x00, 0xFE, 0x40, 0xFE, 0x09, 0x07, 0x00, 0x00, 0x00, 0x23, 0x00, /* 000076D0 */ 0x50, 0x00, 0x2A, 0x00, 0x71, 0x00, 0x45, 0x00, 0x54, 0x00, 0x44, 0x00, 0x3D, 0x00, 0x06, 0x00, -/* 000076E0 */ 0x3B, 0x00, 0x25, 0x00, 0x3B, 0x00, 0x56, 0x00, 0x77, 0x00, 0x69, 0x00, 0x5B, 0x00, 0x00, 0x3F, -/* 000076F0 */ 0x7E, 0x15, 0x0A, 0x1F, 0xFC, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xE8, 0x04, 0x64, 0xFF, +/* 000076E0 */ 0x3B, 0x00, 0x25, 0x00, 0x3B, 0x00, 0x56, 0x00, 0x77, 0x00, 0x69, 0x00, 0x5B, 0x00, 0x00, 0xBF, +/* 000076F0 */ 0xFC, 0x2A, 0x04, 0x1F, 0xFC, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xE8, 0x04, 0x64, 0xFF, /* 00007700 */ 0xA0, 0x41, 0x71, 0x00, 0x3D, 0x00, 0xFE, 0xF9, 0xFA, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, -/* 00007710 */ 0xFE, 0xF9, 0xFA, 0xFE, 0xBA, 0x02, 0xFE, 0xBA, 0x02, 0x0A, 0x0B, 0x10, 0x0A, 0x5D, 0x5A, 0x03, -/* 00007720 */ 0x02, 0x0B, 0x0B, 0x0B, 0x03, 0x03, 0x03, 0x03, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, +/* 00007710 */ 0xFE, 0xF9, 0xFA, 0xFE, 0xBA, 0x02, 0xFE, 0xBA, 0x02, 0x0B, 0x0A, 0x0B, 0x10, 0x0A, 0x5D, 0x5A, +/* 00007720 */ 0x03, 0x02, 0x0B, 0x0B, 0x03, 0x03, 0x03, 0x03, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 00007730 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 00007740 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x03, 0x02, 0xFE, 0x19, 0x03, 0x02, /* 00007750 */ 0xFE, 0x7C, 0x03, 0x02, 0xFE, 0x68, 0x03, 0x04, 0x02, 0xFE, 0xC2, 0x03, 0x01, 0x00, 0x00, 0x00, @@ -3356,10 +3356,10 @@ namespace Js /* 00007930 */ 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x00, 0x00, 0xFE, 0x3C, 0x02, 0xFE, 0x06, 0x02, 0xFE, 0x31, /* 00007940 */ 0x02, 0x00, 0xFE, 0x18, 0xFB, 0x09, 0x07, 0x00, 0x00, 0x00, 0x23, 0x00, 0x50, 0x00, 0x2A, 0x00, /* 00007950 */ 0x71, 0x00, 0x45, 0x00, 0x54, 0x00, 0x44, 0x00, 0x3D, 0x00, 0x06, 0x00, 0x3B, 0x00, 0x25, 0x00, -/* 00007960 */ 0x3B, 0x00, 0x56, 0x00, 0x77, 0x00, 0x69, 0x00, 0x5B, 0x00, 0x00, 0x3F, 0x7E, 0x15, 0x0A, 0x1F, +/* 00007960 */ 0x3B, 0x00, 0x56, 0x00, 0x77, 0x00, 0x69, 0x00, 0x5B, 0x00, 0x00, 0xBF, 0xFC, 0x2A, 0x04, 0x1F, /* 00007970 */ 0xFC, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xDB, 0x04, 0x60, 0xFF, 0xA0, 0x41, 0x71, 0x00, /* 00007980 */ 0x3C, 0x00, 0xFE, 0xD7, 0xF7, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFE, 0xD7, 0xF7, 0xFE, -/* 00007990 */ 0xB4, 0x02, 0xFE, 0xB4, 0x02, 0x0A, 0x0C, 0x11, 0x0A, 0x5D, 0x5A, 0x03, 0x02, 0x0B, 0x0B, 0x0B, +/* 00007990 */ 0xB4, 0x02, 0xFE, 0xB4, 0x02, 0x0B, 0x0A, 0x0C, 0x11, 0x0A, 0x5D, 0x5A, 0x03, 0x02, 0x0B, 0x0B, /* 000079A0 */ 0x03, 0x03, 0x03, 0x03, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 000079B0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 000079C0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x03, 0x02, 0xFE, 0x19, 0x03, 0x02, 0xFE, 0x7B, 0x03, 0x02, @@ -3396,11 +3396,11 @@ namespace Js /* 00007BB0 */ 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x00, 0x00, 0xFE, 0x3C, 0x02, 0xFE, 0x06, 0x02, 0xFE, 0x31, /* 00007BC0 */ 0x02, 0x00, 0xFE, 0xF6, 0xF7, 0x09, 0x07, 0x00, 0x00, 0x00, 0x23, 0x00, 0x50, 0x00, 0x2A, 0x00, /* 00007BD0 */ 0x6D, 0x00, 0x45, 0x00, 0x54, 0x00, 0x44, 0x00, 0x3D, 0x00, 0x06, 0x00, 0x3B, 0x00, 0x25, 0x00, -/* 00007BE0 */ 0x3B, 0x00, 0x56, 0x00, 0x75, 0x00, 0x69, 0x00, 0x5B, 0x00, 0x00, 0x3F, 0x7E, 0x25, 0x0B, 0x4F, +/* 00007BE0 */ 0x3B, 0x00, 0x56, 0x00, 0x75, 0x00, 0x69, 0x00, 0x5B, 0x00, 0x00, 0xBF, 0xFC, 0x4A, 0x06, 0x4F, /* 00007BF0 */ 0xFD, 0x07, 0xFE, 0x88, 0x03, 0xFE, 0x58, 0x04, 0x0C, 0xFF, 0xB3, 0x41, 0x41, 0x00, 0x3B, 0x00, /* 00007C00 */ 0xFE, 0x61, 0xDB, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x04, 0x04, 0xFE, 0x61, 0xDB, 0xFE, 0x04, 0x1C, -/* 00007C10 */ 0xFE, 0x04, 0x1C, 0x1C, 0x29, 0x41, 0x07, 0xFE, 0xAA, 0x01, 0xFE, 0x8A, 0x01, 0x03, 0x01, 0x0C, -/* 00007C20 */ 0x22, 0x0E, 0x45, 0x2B, 0x2B, 0x2B, 0x2B, 0x01, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, +/* 00007C10 */ 0xFE, 0x04, 0x1C, 0x45, 0x1C, 0x29, 0x41, 0x07, 0xFE, 0xAA, 0x01, 0xFE, 0x8A, 0x01, 0x03, 0x01, +/* 00007C20 */ 0x0C, 0x22, 0x0E, 0x2B, 0x2B, 0x2B, 0x2B, 0x01, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 00007C30 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x41, 0xFF, /* 00007C40 */ 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x02, 0xFE, 0x19, 0x03, 0x02, 0xFE, 0x32, 0x03, 0x04, 0x02, /* 00007C50 */ 0xFE, 0xCE, 0x02, 0x08, 0x02, 0xFE, 0x8A, 0x03, 0x02, 0xFE, 0x89, 0x03, 0x02, 0xFE, 0x21, 0x03, @@ -3551,10 +3551,10 @@ namespace Js /* 00008560 */ 0x00, 0x27, 0x00, 0x6B, 0x00, 0x04, 0x00, 0x38, 0x00, 0x07, 0x00, 0x5C, 0x00, 0x34, 0x00, 0xE3, /* 00008570 */ 0x00, 0x28, 0x00, 0x48, 0x00, 0x01, 0x00, 0x4C, 0x00, 0x1B, 0x00, 0x7C, 0x01, 0x1D, 0x00, 0x7B, /* 00008580 */ 0x00, 0x25, 0x00, 0x68, 0x00, 0x35, 0x00, 0x83, 0x00, 0x0E, 0x00, 0x40, 0x00, 0x0C, 0x00, 0x6F, -/* 00008590 */ 0x00, 0x06, 0x00, 0x40, 0x00, 0x00, 0x3F, 0x7E, 0x15, 0x0A, 0x8F, 0xFC, 0x07, 0xFE, 0x87, 0x03, +/* 00008590 */ 0x00, 0x06, 0x00, 0x40, 0x00, 0x00, 0xBF, 0xFC, 0x2A, 0x04, 0x8F, 0xFC, 0x07, 0xFE, 0x87, 0x03, /* 000085A0 */ 0xFE, 0x1E, 0x04, 0x0C, 0xFF, 0xA3, 0x41, 0x41, 0x00, 0x3A, 0x00, 0xFE, 0xEB, 0xCD, 0xFF, 0x00, -/* 000085B0 */ 0x10, 0x01, 0x00, 0x03, 0x03, 0xFE, 0xEB, 0xCD, 0xFE, 0x66, 0x0D, 0xFE, 0x66, 0x0D, 0x07, 0x12, -/* 000085C0 */ 0x16, 0x06, 0xC8, 0xBB, 0x03, 0x02, 0x10, 0x07, 0x01, 0x0A, 0x0A, 0x0A, 0x0A, 0x02, 0xFF, 0xFF, +/* 000085B0 */ 0x10, 0x01, 0x00, 0x03, 0x03, 0xFE, 0xEB, 0xCD, 0xFE, 0x66, 0x0D, 0xFE, 0x66, 0x0D, 0x01, 0x07, +/* 000085C0 */ 0x12, 0x16, 0x06, 0xC8, 0xBB, 0x03, 0x02, 0x10, 0x07, 0x0A, 0x0A, 0x0A, 0x0A, 0x02, 0xFF, 0xFF, /* 000085D0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x15, 0xFF, 0xFF, /* 000085E0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x02, /* 000085F0 */ 0xFE, 0xB2, 0x03, 0x04, 0x02, 0xFE, 0x98, 0x03, 0x03, 0x02, 0xFE, 0xB3, 0x03, 0x01, 0x00, 0x00, @@ -3625,11 +3625,11 @@ namespace Js /* 00008A00 */ 0x34, 0x01, 0x26, 0x00, 0x91, 0x00, 0x2F, 0x00, 0x77, 0x00, 0x0E, 0x00, 0x41, 0x00, 0x2C, 0x00, /* 00008A10 */ 0x8E, 0x00, 0x0E, 0x00, 0x3F, 0x00, 0x2C, 0x00, 0x8A, 0x00, 0x0E, 0x00, 0x40, 0x00, 0x2C, 0x00, /* 00008A20 */ 0x8C, 0x00, 0x0E, 0x00, 0x42, 0x00, 0x2C, 0x00, 0x90, 0x00, 0x0E, 0x00, 0x42, 0x00, 0x2C, 0x00, -/* 00008A30 */ 0x90, 0x00, 0x0E, 0x00, 0x48, 0x00, 0x2C, 0x00, 0x8F, 0x00, 0x08, 0x00, 0x23, 0x00, 0x00, 0x3F, -/* 00008A40 */ 0x7E, 0x15, 0x0A, 0x0F, 0xFC, 0x07, 0xFE, 0x86, 0x03, 0xFE, 0x0C, 0x04, 0x0C, 0xFF, 0xA3, 0x41, +/* 00008A30 */ 0x90, 0x00, 0x0E, 0x00, 0x48, 0x00, 0x2C, 0x00, 0x8F, 0x00, 0x08, 0x00, 0x23, 0x00, 0x00, 0xBF, +/* 00008A40 */ 0xFC, 0x2A, 0x04, 0x0F, 0xFC, 0x07, 0xFE, 0x86, 0x03, 0xFE, 0x0C, 0x04, 0x0C, 0xFF, 0xA3, 0x41, /* 00008A50 */ 0x41, 0x00, 0x39, 0x00, 0xFE, 0xF7, 0xC8, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x04, 0x04, 0xFE, 0xF7, -/* 00008A60 */ 0xC8, 0xFE, 0x81, 0x04, 0xFE, 0x81, 0x04, 0x09, 0x11, 0x16, 0x07, 0x43, 0x40, 0x03, 0x05, 0x06, -/* 00008A70 */ 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, +/* 00008A60 */ 0xC8, 0xFE, 0x81, 0x04, 0xFE, 0x81, 0x04, 0x01, 0x09, 0x11, 0x16, 0x07, 0x43, 0x40, 0x03, 0x05, +/* 00008A70 */ 0x06, 0x06, 0x01, 0x01, 0x01, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 00008A80 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x15, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 00008A90 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x02, 0xFE, 0xA2, 0x03, 0x02, 0xFE, 0xAD, 0x03, 0x04, /* 00008AA0 */ 0x03, 0x02, 0xFE, 0xAE, 0x03, 0x02, 0xFE, 0xA5, 0x03, 0x02, 0xFE, 0xA6, 0x03, 0x02, 0xFE, 0x98, @@ -3658,10 +3658,10 @@ namespace Js /* 00008C10 */ 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x00, 0x00, 0xFE, 0x0C, 0x02, 0x00, 0xFE, 0xAC, 0xC9, /* 00008C20 */ 0x0A, 0x00, 0x00, 0x00, 0x00, 0x49, 0x00, 0x90, 0x00, 0x08, 0x00, 0x2B, 0x00, 0x42, 0x00, 0x01, /* 00008C30 */ 0x01, 0x06, 0x00, 0x3C, 0x00, 0x08, 0x00, 0x6E, 0x00, 0x47, 0x00, 0x82, 0x00, 0x0E, 0x00, 0x33, -/* 00008C40 */ 0x00, 0x44, 0x00, 0x8D, 0x00, 0x08, 0x00, 0x23, 0x00, 0x00, 0x3F, 0x7E, 0x15, 0x0A, 0x0F, 0xFC, +/* 00008C40 */ 0x00, 0x44, 0x00, 0x8D, 0x00, 0x08, 0x00, 0x23, 0x00, 0x00, 0xBF, 0xFC, 0x2A, 0x04, 0x0F, 0xFC, /* 00008C50 */ 0x07, 0xFE, 0x85, 0x03, 0xFE, 0xFC, 0x03, 0x0C, 0xFF, 0xA3, 0x41, 0x41, 0x00, 0x38, 0x00, 0xFE, /* 00008C60 */ 0xBE, 0xC3, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x04, 0x04, 0xFE, 0xBE, 0xC3, 0xFE, 0x2B, 0x05, 0xFE, -/* 00008C70 */ 0x2B, 0x05, 0x09, 0x14, 0x19, 0x07, 0x50, 0x4B, 0x03, 0x05, 0x06, 0x06, 0x01, 0x01, 0x01, 0x01, +/* 00008C70 */ 0x2B, 0x05, 0x01, 0x09, 0x14, 0x19, 0x07, 0x50, 0x4B, 0x03, 0x05, 0x06, 0x06, 0x01, 0x01, 0x01, /* 00008C80 */ 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 00008C90 */ 0x18, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 00008CA0 */ 0x00, 0x00, 0x02, 0xFE, 0xA2, 0x03, 0x02, 0xFE, 0xA3, 0x03, 0x04, 0x03, 0x02, 0xFE, 0xA4, 0x03, @@ -3695,9 +3695,9 @@ namespace Js /* 00008E60 */ 0x0C, 0x02, 0x00, 0xFE, 0x96, 0xC4, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x49, 0x00, 0x0D, 0x01, 0x08, /* 00008E70 */ 0x00, 0x2B, 0x00, 0x42, 0x00, 0xF6, 0x00, 0x06, 0x00, 0x3C, 0x00, 0x16, 0x00, 0x48, 0x00, 0x52, /* 00008E80 */ 0x00, 0x86, 0x00, 0x08, 0x00, 0x31, 0x00, 0x60, 0x00, 0xC6, 0x00, 0x08, 0x00, 0x23, 0x00, 0x00, -/* 00008E90 */ 0x3F, 0x6E, 0x05, 0x0A, 0x00, 0xFC, 0x07, 0xFE, 0x84, 0x03, 0xFE, 0xF3, 0x03, 0x0C, 0xFF, 0xA3, +/* 00008E90 */ 0xBF, 0xDC, 0x0A, 0x04, 0x00, 0xFC, 0x07, 0xFE, 0x84, 0x03, 0xFE, 0xF3, 0x03, 0x0C, 0xFF, 0xA3, /* 00008EA0 */ 0x41, 0x41, 0x00, 0x37, 0x00, 0xFE, 0x4E, 0xC2, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, -/* 00008EB0 */ 0x4E, 0xC2, 0xEF, 0xEF, 0x03, 0x05, 0x07, 0x0E, 0x0B, 0x03, 0x01, 0x01, 0x01, 0xFF, 0xFF, 0xFF, +/* 00008EB0 */ 0x4E, 0xC2, 0xEF, 0xEF, 0x01, 0x03, 0x05, 0x07, 0x0E, 0x0B, 0x03, 0x01, 0x01, 0xFF, 0xFF, 0xFF, /* 00008EC0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x06, 0xFF, 0xFF, 0xFF, /* 00008ED0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x02, 0xFE, /* 00008EE0 */ 0x14, 0x03, 0x02, 0xFE, 0xC2, 0x02, 0x02, 0xFE, 0x6A, 0x03, 0x34, 0x2C, 0x07, 0x05, 0x14, 0x03, @@ -3705,7 +3705,7 @@ namespace Js /* 00008F00 */ 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x98, 0x07, 0x07, 0x05, 0x00, 0x00, 0x47, 0x00, /* 00008F10 */ 0x07, 0x0F, 0x03, 0x00, 0x07, 0x47, 0x00, 0x04, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x00, /* 00008F20 */ 0x00, 0x00, 0xFE, 0x8A, 0xC2, 0x04, 0x00, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x3C, 0x00, 0x06, 0x00, -/* 00008F30 */ 0x31, 0x00, 0x21, 0x00, 0x45, 0x00, 0x00, 0xBF, 0x7E, 0x31, 0x02, 0x0F, 0xFC, 0x0F, 0xFE, 0x83, +/* 00008F30 */ 0x31, 0x00, 0x21, 0x00, 0x45, 0x00, 0x00, 0x3F, 0xFD, 0x62, 0x04, 0x0F, 0xFC, 0x0F, 0xFE, 0x83, /* 00008F40 */ 0x03, 0xFE, 0xB3, 0x03, 0x0C, 0xFF, 0xA3, 0x41, 0x41, 0x00, 0x35, 0x00, 0xFE, 0x96, 0xB6, 0x01, /* 00008F50 */ 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0x96, 0xB6, 0xFE, 0xC7, 0x09, 0xFE, 0xC7, 0x09, /* 00008F60 */ 0x02, 0x06, 0x17, 0x1B, 0x05, 0xCC, 0xCA, 0x03, 0x0D, 0x02, 0x07, 0x05, 0x05, 0x05, 0x05, 0x18, @@ -3793,10 +3793,10 @@ namespace Js /* 00009480 */ 0x5B, 0x00, 0x28, 0x00, 0x58, 0x00, 0x3A, 0x00, 0x60, 0x00, 0x14, 0x00, 0x39, 0x00, 0x37, 0x00, /* 00009490 */ 0x7A, 0x00, 0x13, 0x00, 0x28, 0x00, 0x37, 0x00, 0x5C, 0x00, 0x13, 0x00, 0x31, 0x00, 0x14, 0x00, /* 000094A0 */ 0x41, 0x00, 0x3A, 0x00, 0x63, 0x00, 0x14, 0x00, 0x40, 0x00, 0x37, 0x00, 0x7D, 0x00, 0x44, 0x00, -/* 000094B0 */ 0x42, 0x01, 0x72, 0x00, 0x73, 0x00, 0x00, 0xBB, 0x94, 0x00, 0x00, 0x3F, 0x7E, 0x15, 0x0A, 0x00, +/* 000094B0 */ 0x42, 0x01, 0x72, 0x00, 0x73, 0x00, 0x00, 0xBB, 0x94, 0x00, 0x00, 0xBF, 0xFC, 0x2A, 0x04, 0x00, /* 000094C0 */ 0xFC, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xDD, 0x03, 0x55, 0xFF, 0xA2, 0x41, 0x51, 0x00, /* 000094D0 */ 0x36, 0x00, 0xFE, 0xEC, 0xBE, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0xEC, 0xBE, 0xB0, -/* 000094E0 */ 0xB0, 0x04, 0x03, 0x05, 0x05, 0x10, 0x10, 0x04, 0x01, 0x01, 0x04, 0x41, 0xFF, 0xFF, 0xFF, 0xFF, +/* 000094E0 */ 0xB0, 0x41, 0x04, 0x03, 0x05, 0x05, 0x10, 0x10, 0x04, 0x01, 0x01, 0x04, 0xFF, 0xFF, 0xFF, 0xFF, /* 000094F0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x04, 0xFF, 0xFF, 0xFF, 0xFF, /* 00009500 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x04, 0x56, 0x8F, /* 00009510 */ 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x98, 0x05, 0x05, 0x03, 0x00, @@ -3805,10 +3805,10 @@ namespace Js /* 00009540 */ 0x00, 0x00, 0x00, 0x06, 0x02, 0x00, 0x5C, 0x01, 0x06, 0x8F, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, /* 00009550 */ 0x00, 0x00, 0x06, 0x03, 0x00, 0x5C, 0x02, 0x06, 0x5C, 0x03, 0x03, 0xEE, 0x04, 0xFF, 0x05, 0x00, /* 00009560 */ 0x00, 0xA8, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x12, 0xBF, 0x03, 0x00, 0x00, 0x00, 0x00, -/* 00009570 */ 0x19, 0x00, 0x2D, 0x00, 0x3B, 0x00, 0x5C, 0x00, 0x00, 0x3F, 0x7E, 0x11, 0x0A, 0x4F, 0xFC, 0x07, +/* 00009570 */ 0x19, 0x00, 0x2D, 0x00, 0x3B, 0x00, 0x5C, 0x00, 0x00, 0xBF, 0xFC, 0x22, 0x04, 0x4F, 0xFC, 0x07, /* 00009580 */ 0xFE, 0x82, 0x03, 0xFE, 0x82, 0x03, 0x0C, 0xFF, 0xA3, 0x41, 0x41, 0x00, 0x34, 0x00, 0xFE, 0xDC, /* 00009590 */ 0xAC, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x04, 0x04, 0xFE, 0xDC, 0xAC, 0xFE, 0x1F, 0x09, 0xFE, 0x1F, -/* 000095A0 */ 0x09, 0x07, 0x15, 0x1A, 0x05, 0x93, 0x8D, 0x03, 0x08, 0x03, 0x01, 0x0C, 0x0C, 0x0C, 0x0C, 0x06, +/* 000095A0 */ 0x09, 0x01, 0x07, 0x15, 0x1A, 0x05, 0x93, 0x8D, 0x03, 0x08, 0x03, 0x0C, 0x0C, 0x0C, 0x0C, 0x06, /* 000095B0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x19, /* 000095C0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, /* 000095D0 */ 0x00, 0x03, 0x04, 0x08, 0x02, 0xFE, 0x89, 0x03, 0x02, 0xFE, 0x8A, 0x03, 0x09, 0x02, 0xFE, 0x8B, @@ -3875,7 +3875,7 @@ namespace Js /* 000099A0 */ 0x03, 0x00, 0x3A, 0x00, 0x10, 0x00, 0x46, 0x00, 0x2A, 0x00, 0x79, 0x00, 0x03, 0x00, 0x3C, 0x00, /* 000099B0 */ 0x17, 0x00, 0x58, 0x00, 0x40, 0x00, 0xCF, 0x00, 0x40, 0x00, 0xD0, 0x00, 0x40, 0x00, 0xDD, 0x00, /* 000099C0 */ 0x17, 0x00, 0x58, 0x00, 0x40, 0x00, 0xCF, 0x00, 0x40, 0x00, 0xD1, 0x00, 0x40, 0x00, 0xE0, 0x00, -/* 000099D0 */ 0x08, 0x00, 0x1D, 0x00, 0x00, 0xBF, 0x7E, 0x31, 0x02, 0x4F, 0xFD, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, +/* 000099D0 */ 0x08, 0x00, 0x1D, 0x00, 0x00, 0x3F, 0xFD, 0x62, 0x04, 0x4F, 0xFD, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, /* 000099E0 */ 0xFF, 0xFE, 0x90, 0x02, 0x18, 0xFF, 0xA0, 0x41, 0x51, 0x00, 0x2B, 0x00, 0xFE, 0x40, 0x7A, 0x06, /* 000099F0 */ 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFE, 0x40, 0x7A, 0xFE, 0xA1, 0x31, 0xFE, 0xA1, 0x31, /* 00009A00 */ 0x01, 0x0D, 0x22, 0x28, 0x09, 0xA6, 0xA6, 0x01, 0x0C, 0x01, 0x09, 0x07, 0x07, 0x07, 0x07, 0x05, @@ -3964,10 +3964,10 @@ namespace Js /* 00009F30 */ 0x37, 0x00, 0x23, 0x01, 0x61, 0x00, 0x9A, 0x00, 0x3E, 0x00, 0x49, 0x00, 0x5C, 0x00, 0xA0, 0x00, /* 00009F40 */ 0x68, 0x00, 0xD8, 0x04, 0x7F, 0x00, 0x25, 0x03, 0x0F, 0x00, 0x88, 0x00, 0x07, 0x00, 0x17, 0x00, /* 00009F50 */ 0x00, 0x8A, 0xA9, 0x00, 0x00, 0xBD, 0xA7, 0x00, 0x00, 0x0C, 0xA5, 0x00, 0x00, 0x48, 0xA3, 0x00, -/* 00009F60 */ 0x00, 0xA9, 0xA0, 0x00, 0x00, 0x69, 0x9F, 0x00, 0x00, 0x3F, 0x7E, 0x11, 0x0A, 0x0F, 0xFC, 0x07, +/* 00009F60 */ 0x00, 0xA9, 0xA0, 0x00, 0x00, 0x69, 0x9F, 0x00, 0x00, 0xBF, 0xFC, 0x22, 0x04, 0x0F, 0xFC, 0x07, /* 00009F70 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x69, 0x03, 0x39, 0xFF, 0xA0, 0x41, 0x51, 0x00, 0x32, 0x00, /* 00009F80 */ 0xFE, 0x8F, 0xA8, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFE, 0x8F, 0xA8, 0xFE, 0x61, 0x02, -/* 00009F90 */ 0xFE, 0x61, 0x02, 0x05, 0x05, 0x08, 0x04, 0x25, 0x24, 0x04, 0x03, 0x01, 0x09, 0x04, 0x04, 0x04, +/* 00009F90 */ 0xFE, 0x61, 0x02, 0x09, 0x05, 0x05, 0x08, 0x04, 0x25, 0x24, 0x04, 0x03, 0x01, 0x04, 0x04, 0x04, /* 00009FA0 */ 0x04, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 00009FB0 */ 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 00009FC0 */ 0x00, 0x00, 0x02, 0xFE, 0x19, 0x03, 0x02, 0xFE, 0x64, 0x03, 0x02, 0xFE, 0xCD, 0x02, 0xAA, 0x5B, @@ -3984,10 +3984,10 @@ namespace Js /* 0000A070 */ 0x06, 0x03, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x00, 0x00, 0xFE, 0x3C, 0x02, 0xFE, 0x08, /* 0000A080 */ 0x02, 0xFE, 0x40, 0x02, 0xFE, 0x4D, 0x02, 0x00, 0xFE, 0xB6, 0xA8, 0x07, 0x05, 0x00, 0x00, 0x00, /* 0000A090 */ 0x0B, 0x00, 0x3D, 0x00, 0x2A, 0x00, 0x87, 0x00, 0x26, 0x00, 0x4C, 0x00, 0x15, 0x00, 0x6A, 0x00, -/* 0000A0A0 */ 0x2A, 0x00, 0x87, 0x00, 0x09, 0x00, 0x38, 0x00, 0x00, 0xBF, 0x7E, 0x11, 0x0A, 0x0F, 0xFC, 0x0F, +/* 0000A0A0 */ 0x2A, 0x00, 0x87, 0x00, 0x09, 0x00, 0x38, 0x00, 0x00, 0xBF, 0xFD, 0x22, 0x04, 0x0F, 0xFC, 0x0F, /* 0000A0B0 */ 0xFE, 0x2D, 0x03, 0xFE, 0x53, 0x03, 0x1B, 0xFF, 0xA0, 0x41, 0x43, 0x00, 0x30, 0x00, 0xFE, 0xA2, /* 0000A0C0 */ 0xA3, 0x01, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFE, 0xA2, 0xA3, 0xFE, 0x1A, 0x04, 0xFE, -/* 0000A0D0 */ 0x1A, 0x04, 0x02, 0x06, 0x07, 0x0B, 0x05, 0x40, 0x40, 0x04, 0x06, 0x07, 0x08, 0x03, 0x03, 0x03, +/* 0000A0D0 */ 0x1A, 0x04, 0x08, 0x02, 0x06, 0x07, 0x0B, 0x05, 0x40, 0x40, 0x04, 0x06, 0x07, 0x03, 0x03, 0x03, /* 0000A0E0 */ 0x03, 0x08, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x09, 0x0A, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000A0F0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x02, 0xFE, 0x19, 0x03, 0x02, 0xFE, /* 0000A100 */ 0x65, 0x03, 0x02, 0xFE, 0xCD, 0x02, 0x03, 0x04, 0xFE, 0x48, 0x01, 0x5B, 0x07, 0xB4, 0x07, 0x07, @@ -4015,10 +4015,10 @@ namespace Js /* 0000A260 */ 0x03, 0xFE, 0xF2, 0x01, 0x00, 0xFE, 0xD8, 0xA3, 0x09, 0x05, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x3D, /* 0000A270 */ 0x00, 0x2A, 0x00, 0x8E, 0x00, 0x29, 0x00, 0x4C, 0x00, 0x25, 0x00, 0x6A, 0x00, 0x2A, 0x00, 0x90, /* 0000A280 */ 0x00, 0x28, 0x00, 0x49, 0x00, 0x3F, 0x00, 0x4A, 0x01, 0x2D, 0x00, 0x3F, 0x00, 0x00, 0x92, 0xA2, -/* 0000A290 */ 0x00, 0x00, 0x3F, 0x6E, 0x0D, 0x0A, 0x00, 0xFC, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x5E, +/* 0000A290 */ 0x00, 0x00, 0xBF, 0xDC, 0x1A, 0x04, 0x00, 0xFC, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x5E, /* 0000A2A0 */ 0x03, 0x48, 0xFF, 0xA2, 0x41, 0x51, 0x00, 0x31, 0x00, 0xFE, 0x62, 0xA6, 0xFF, 0x00, 0x10, 0x01, -/* 0000A2B0 */ 0x00, 0x02, 0x02, 0xFE, 0x62, 0xA6, 0xFC, 0xFC, 0x05, 0x04, 0x06, 0x0D, 0x0D, 0x05, 0x01, 0x01, -/* 0000A2C0 */ 0x02, 0x41, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, +/* 0000A2B0 */ 0x00, 0x02, 0x02, 0xFE, 0x62, 0xA6, 0xFC, 0xFC, 0x41, 0x05, 0x04, 0x06, 0x0D, 0x0D, 0x05, 0x01, +/* 0000A2C0 */ 0x01, 0x02, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000A2D0 */ 0xFF, 0x05, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000A2E0 */ 0xFF, 0x00, 0x00, 0x02, 0xFE, 0x67, 0x03, 0x02, 0xFE, 0x14, 0x03, 0x48, 0x8F, 0x01, 0x00, 0x00, /* 0000A2F0 */ 0x00, 0x02, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x2F, 0x07, 0x02, 0x04, 0x2D, 0x06, 0x06, 0x07, @@ -4026,10 +4026,10 @@ namespace Js /* 0000A310 */ 0x00, 0x06, 0x01, 0x00, 0x8F, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, /* 0000A320 */ 0x2F, 0x08, 0x02, 0x04, 0x98, 0x07, 0x07, 0x08, 0x00, 0x00, 0x9D, 0x07, 0x06, 0x04, 0x00, 0x00, /* 0000A330 */ 0xA8, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x93, 0xA6, 0x03, 0x00, 0x00, 0x00, 0x00, 0x1C, -/* 0000A340 */ 0x00, 0x5B, 0x00, 0x2A, 0x00, 0x6F, 0x00, 0x00, 0x3F, 0x7E, 0x11, 0x0A, 0x0F, 0xFC, 0x07, 0xFE, +/* 0000A340 */ 0x00, 0x5B, 0x00, 0x2A, 0x00, 0x6F, 0x00, 0x00, 0xBF, 0xFC, 0x22, 0x04, 0x0F, 0xFC, 0x07, 0xFE, /* 0000A350 */ 0x5B, 0x03, 0xFE, 0x37, 0x03, 0x10, 0xFF, 0xA3, 0x41, 0x41, 0x00, 0x2F, 0x00, 0xFE, 0xAA, 0x9C, /* 0000A360 */ 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0xAA, 0x9C, 0xFE, 0xF1, 0x02, 0xFE, 0xF1, 0x02, -/* 0000A370 */ 0x08, 0x07, 0x0B, 0x07, 0x3D, 0x39, 0x04, 0x06, 0x03, 0x09, 0x05, 0x05, 0x05, 0x05, 0xFF, 0xFF, +/* 0000A370 */ 0x09, 0x08, 0x07, 0x0B, 0x07, 0x3D, 0x39, 0x04, 0x06, 0x03, 0x05, 0x05, 0x05, 0x05, 0xFF, 0xFF, /* 0000A380 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0A, 0xFF, 0xFF, /* 0000A390 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x02, /* 0000A3A0 */ 0xFE, 0x19, 0x03, 0x02, 0xFE, 0x64, 0x03, 0x02, 0xFE, 0xCD, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, @@ -4054,10 +4054,10 @@ namespace Js /* 0000A4D0 */ 0x00, 0xA8, 0x00, 0x24, 0x00, 0x00, 0x00, 0xFE, 0x31, 0x02, 0xFE, 0x3C, 0x02, 0xFE, 0x08, 0x02, /* 0000A4E0 */ 0xFE, 0x40, 0x02, 0xFE, 0x02, 0x02, 0x00, 0xFE, 0xD4, 0x9C, 0x08, 0x05, 0x00, 0x00, 0x00, 0x26, /* 0000A4F0 */ 0x00, 0x31, 0x00, 0x0B, 0x00, 0x39, 0x00, 0x2A, 0x00, 0x7F, 0x00, 0x26, 0x00, 0x48, 0x00, 0x15, -/* 0000A500 */ 0x00, 0x66, 0x00, 0x2A, 0x00, 0xD8, 0x00, 0x5A, 0x00, 0x57, 0x00, 0x00, 0x3F, 0x7E, 0x15, 0x0A, +/* 0000A500 */ 0x00, 0x66, 0x00, 0x2A, 0x00, 0xD8, 0x00, 0x5A, 0x00, 0x57, 0x00, 0x00, 0xBF, 0xFC, 0x2A, 0x04, /* 0000A510 */ 0x0F, 0xFC, 0x07, 0xFE, 0xCD, 0x02, 0xFE, 0x15, 0x03, 0x10, 0xFF, 0xA1, 0x41, 0x61, 0x00, 0x2E, /* 0000A520 */ 0x00, 0xFE, 0xEB, 0x96, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFE, 0xEB, 0x96, 0xFE, 0x64, -/* 0000A530 */ 0x05, 0xFE, 0x64, 0x05, 0x0A, 0x08, 0x0F, 0x05, 0x67, 0x5E, 0x04, 0x02, 0x09, 0x09, 0x0B, 0x08, +/* 0000A530 */ 0x05, 0xFE, 0x64, 0x05, 0x0B, 0x0A, 0x08, 0x0F, 0x05, 0x67, 0x5E, 0x04, 0x02, 0x09, 0x09, 0x08, /* 0000A540 */ 0x07, 0x08, 0x08, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000A550 */ 0xFF, 0xFF, 0x0E, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000A560 */ 0xFF, 0xFF, 0x00, 0x00, 0x03, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, @@ -4097,11 +4097,11 @@ namespace Js /* 0000A780 */ 0x0C, 0x00, 0x1B, 0x00, 0x09, 0x00, 0x2F, 0x00, 0x18, 0x00, 0x44, 0x00, 0x20, 0x00, 0x59, 0x00, /* 0000A790 */ 0x26, 0x00, 0x3A, 0x00, 0x22, 0x00, 0x39, 0x00, 0x25, 0x00, 0x9F, 0x00, 0x26, 0x00, 0x49, 0x00, /* 0000A7A0 */ 0x0A, 0x00, 0x3B, 0x00, 0x25, 0x00, 0x40, 0x00, 0x26, 0x00, 0x5B, 0x00, 0x23, 0x00, 0x4F, 0x00, -/* 0000A7B0 */ 0x42, 0x00, 0x66, 0x00, 0x0B, 0x00, 0x3F, 0x00, 0x08, 0x00, 0x1D, 0x00, 0x00, 0x3F, 0x7E, 0x15, -/* 0000A7C0 */ 0x0A, 0x1F, 0xFC, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x07, 0x03, 0x62, 0xFF, 0xA0, 0x41, +/* 0000A7B0 */ 0x42, 0x00, 0x66, 0x00, 0x0B, 0x00, 0x3F, 0x00, 0x08, 0x00, 0x1D, 0x00, 0x00, 0xBF, 0xFC, 0x2A, +/* 0000A7C0 */ 0x04, 0x1F, 0xFC, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x07, 0x03, 0x62, 0xFF, 0xA0, 0x41, /* 0000A7D0 */ 0x71, 0x00, 0x2D, 0x00, 0xFE, 0x36, 0x94, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFE, 0x36, -/* 0000A7E0 */ 0x94, 0xFE, 0x73, 0x02, 0xFE, 0x73, 0x02, 0x09, 0x09, 0x0E, 0x07, 0x40, 0x3C, 0x03, 0x02, 0x06, -/* 0000A7F0 */ 0x06, 0x0B, 0x03, 0x03, 0x03, 0x03, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, +/* 0000A7E0 */ 0x94, 0xFE, 0x73, 0x02, 0xFE, 0x73, 0x02, 0x0B, 0x09, 0x09, 0x0E, 0x07, 0x40, 0x3C, 0x03, 0x02, +/* 0000A7F0 */ 0x06, 0x06, 0x03, 0x03, 0x03, 0x03, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000A800 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0D, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000A810 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x03, 0x02, 0xFE, 0x10, 0x03, 0x02, 0xFE, 0x4E, /* 0000A820 */ 0x03, 0x02, 0xFE, 0x4D, 0x03, 0x04, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, @@ -4126,11 +4126,11 @@ namespace Js /* 0000A950 */ 0xEE, 0x02, 0x00, 0x0E, 0x04, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x00, 0x00, 0xFE, /* 0000A960 */ 0x3C, 0x02, 0xFE, 0x31, 0x02, 0xFE, 0x02, 0x02, 0x00, 0xFE, 0x59, 0x94, 0x07, 0x07, 0x00, 0x00, /* 0000A970 */ 0x00, 0x23, 0x00, 0x58, 0x00, 0x2A, 0x00, 0x7B, 0x00, 0x25, 0x00, 0x3F, 0x00, 0x2F, 0x00, 0x58, -/* 0000A980 */ 0x00, 0x26, 0x00, 0x8F, 0x00, 0x5A, 0x00, 0x56, 0x00, 0x00, 0x3F, 0x7E, 0x21, 0x0B, 0x0F, 0xFD, +/* 0000A980 */ 0x00, 0x26, 0x00, 0x8F, 0x00, 0x5A, 0x00, 0x56, 0x00, 0x00, 0xBF, 0xFC, 0x42, 0x06, 0x0F, 0xFD, /* 0000A990 */ 0x07, 0xFE, 0x5D, 0x03, 0xFE, 0x94, 0x02, 0x0C, 0xFF, 0xB3, 0x41, 0x41, 0x00, 0x2C, 0x00, 0xFE, /* 0000A9A0 */ 0x9C, 0x7A, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x04, 0x04, 0xFE, 0x9C, 0x7A, 0xFE, 0x34, 0x19, 0xFE, -/* 0000A9B0 */ 0x34, 0x19, 0x18, 0x23, 0x37, 0x07, 0xFE, 0x83, 0x01, 0xFE, 0x5E, 0x01, 0x03, 0x04, 0x22, 0x10, -/* 0000A9C0 */ 0x45, 0x1E, 0x1E, 0x1E, 0x1E, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, +/* 0000A9B0 */ 0x34, 0x19, 0x45, 0x18, 0x23, 0x37, 0x07, 0xFE, 0x83, 0x01, 0xFE, 0x5E, 0x01, 0x03, 0x04, 0x22, +/* 0000A9C0 */ 0x10, 0x1E, 0x1E, 0x1E, 0x1E, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000A9D0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x36, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x37, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000A9E0 */ 0xFF, 0x00, 0x00, 0x02, 0xFE, 0x19, 0x03, 0x02, 0xFE, 0x32, 0x03, 0x04, 0x02, 0xFE, 0xCD, 0x02, /* 0000A9F0 */ 0x08, 0x02, 0xFE, 0x14, 0x03, 0x03, 0x02, 0xFE, 0x21, 0x03, 0x02, 0xFE, 0x0F, 0x03, 0x02, 0xFE, @@ -4268,7 +4268,7 @@ namespace Js /* 0000B230 */ 0x04, 0x00, 0x4F, 0x00, 0x04, 0x00, 0x51, 0x00, 0x0A, 0x00, 0x43, 0x00, 0x04, 0x00, 0x59, 0x00, /* 0000B240 */ 0x04, 0x00, 0x68, 0x00, 0x04, 0x00, 0x41, 0x00, 0x07, 0x00, 0xAD, 0x00, 0x25, 0x00, 0x4E, 0x00, /* 0000B250 */ 0x01, 0x00, 0x21, 0x00, 0x1B, 0x00, 0x6F, 0x01, 0x1D, 0x00, 0x4D, 0x00, 0x35, 0x00, 0x7F, 0x00, -/* 0000B260 */ 0x06, 0x00, 0x3C, 0x00, 0x00, 0x3F, 0x7E, 0x11, 0x02, 0x4F, 0xFD, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, +/* 0000B260 */ 0x06, 0x00, 0x3C, 0x00, 0x00, 0x3F, 0xFC, 0x22, 0x04, 0x4F, 0xFD, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000B270 */ 0xFF, 0xFE, 0xAB, 0x01, 0x14, 0xFF, 0xA0, 0x41, 0x51, 0x00, 0x23, 0x00, 0xFE, 0xA2, 0x49, 0x06, /* 0000B280 */ 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFE, 0xA2, 0x49, 0xFE, 0x43, 0x30, 0xFE, 0x43, 0x30, /* 0000B290 */ 0x0B, 0x17, 0x1B, 0x09, 0x99, 0x99, 0x01, 0x0C, 0x09, 0x07, 0x07, 0x07, 0x07, 0x05, 0x02, 0xFF, @@ -4351,10 +4351,10 @@ namespace Js /* 0000B760 */ 0x61, 0x00, 0x92, 0x00, 0x3E, 0x00, 0x47, 0x00, 0x5C, 0x00, 0x98, 0x00, 0x68, 0x00, 0xBD, 0x05, /* 0000B770 */ 0x7F, 0x00, 0x12, 0x03, 0x0F, 0x00, 0x80, 0x00, 0x07, 0x00, 0x17, 0x00, 0x00, 0x7F, 0xC1, 0x00, /* 0000B780 */ 0x00, 0x5E, 0xBF, 0x00, 0x00, 0xAD, 0xBC, 0x00, 0x00, 0xC3, 0xBA, 0x00, 0x00, 0xD5, 0xB8, 0x00, -/* 0000B790 */ 0x00, 0x95, 0xB7, 0x00, 0x00, 0x3F, 0x7E, 0x11, 0x0A, 0x0F, 0xFC, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, +/* 0000B790 */ 0x00, 0x95, 0xB7, 0x00, 0x00, 0xBF, 0xFC, 0x22, 0x04, 0x0F, 0xFC, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000B7A0 */ 0xFF, 0xFE, 0x7A, 0x02, 0x3A, 0xFF, 0xA0, 0x41, 0x51, 0x00, 0x2A, 0x00, 0xFE, 0xAC, 0x76, 0xFF, -/* 0000B7B0 */ 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFE, 0xAC, 0x76, 0xFE, 0x50, 0x02, 0xFE, 0x50, 0x02, 0x05, -/* 0000B7C0 */ 0x05, 0x08, 0x04, 0x25, 0x24, 0x03, 0x03, 0x01, 0x09, 0x04, 0x04, 0x04, 0x04, 0xFF, 0xFF, 0xFF, +/* 0000B7B0 */ 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFE, 0xAC, 0x76, 0xFE, 0x50, 0x02, 0xFE, 0x50, 0x02, 0x09, +/* 0000B7C0 */ 0x05, 0x05, 0x08, 0x04, 0x25, 0x24, 0x03, 0x03, 0x01, 0x04, 0x04, 0x04, 0x04, 0xFF, 0xFF, 0xFF, /* 0000B7D0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0xFF, 0xFF, 0xFF, /* 0000B7E0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x02, 0xFE, /* 0000B7F0 */ 0x19, 0x03, 0x02, 0xFE, 0x4B, 0x03, 0x02, 0xFE, 0xC9, 0x02, 0xAA, 0x5B, 0x05, 0xB4, 0x05, 0x05, @@ -4371,10 +4371,10 @@ namespace Js /* 0000B8A0 */ 0x00, 0xA8, 0x00, 0x24, 0x00, 0x00, 0x00, 0xFE, 0x3C, 0x02, 0xFE, 0x08, 0x02, 0xFE, 0x4B, 0x02, /* 0000B8B0 */ 0xFE, 0x4C, 0x02, 0x00, 0xFE, 0xD3, 0x76, 0x07, 0x05, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x3D, 0x00, /* 0000B8C0 */ 0x2A, 0x00, 0x80, 0x00, 0x26, 0x00, 0x4C, 0x00, 0x15, 0x00, 0x66, 0x00, 0x2A, 0x00, 0x80, 0x00, -/* 0000B8D0 */ 0x09, 0x00, 0x39, 0x00, 0x00, 0x3F, 0x7E, 0x11, 0x0A, 0x4F, 0xFC, 0x07, 0xFE, 0x2D, 0x03, 0xFE, +/* 0000B8D0 */ 0x09, 0x00, 0x39, 0x00, 0x00, 0xBF, 0xFC, 0x22, 0x04, 0x4F, 0xFC, 0x07, 0xFE, 0x2D, 0x03, 0xFE, /* 0000B8E0 */ 0x64, 0x02, 0x1B, 0xFF, 0xA0, 0x41, 0x43, 0x00, 0x29, 0x00, 0xFE, 0xD8, 0x70, 0xFF, 0x00, 0x10, -/* 0000B8F0 */ 0x01, 0x00, 0x01, 0x01, 0xFE, 0xD8, 0x70, 0xFE, 0x03, 0x05, 0xFE, 0x03, 0x05, 0x05, 0x0D, 0x10, -/* 0000B900 */ 0x04, 0x33, 0x32, 0x03, 0x03, 0x01, 0x09, 0x11, 0x11, 0x11, 0x11, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, +/* 0000B8F0 */ 0x01, 0x00, 0x01, 0x01, 0xFE, 0xD8, 0x70, 0xFE, 0x03, 0x05, 0xFE, 0x03, 0x05, 0x09, 0x05, 0x0D, +/* 0000B900 */ 0x10, 0x04, 0x33, 0x32, 0x03, 0x03, 0x01, 0x11, 0x11, 0x11, 0x11, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000B910 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000B920 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x02, 0xFE, 0x19, /* 0000B930 */ 0x03, 0x02, 0xFE, 0x4C, 0x03, 0x02, 0xFE, 0xC9, 0x02, 0x02, 0xFE, 0xFD, 0x02, 0x02, 0xFE, 0x33, @@ -4402,10 +4402,10 @@ namespace Js /* 0000BA90 */ 0x4A, 0x02, 0xFE, 0x45, 0x03, 0xFE, 0x49, 0x02, 0xFE, 0xF6, 0x01, 0xFE, 0x48, 0x02, 0xFE, 0x3C, /* 0000BAA0 */ 0x03, 0x00, 0xFE, 0x0E, 0x71, 0x07, 0x05, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x3D, 0x00, 0x2A, 0x00, /* 0000BAB0 */ 0x86, 0x00, 0x26, 0x00, 0x4C, 0x00, 0x15, 0x00, 0x66, 0x00, 0x2A, 0x00, 0x88, 0x00, 0x4A, 0x00, -/* 0000BAC0 */ 0xCF, 0x02, 0x00, 0x3F, 0x7E, 0x11, 0x0A, 0x0F, 0xFC, 0x07, 0xFE, 0x2E, 0x03, 0xFE, 0x4C, 0x02, +/* 0000BAC0 */ 0xCF, 0x02, 0x00, 0xBF, 0xFC, 0x22, 0x04, 0x0F, 0xFC, 0x07, 0xFE, 0x2E, 0x03, 0xFE, 0x4C, 0x02, /* 0000BAD0 */ 0x10, 0xFF, 0xA3, 0x41, 0x41, 0x00, 0x28, 0x00, 0xFE, 0x63, 0x6B, 0xFF, 0x00, 0x10, 0x01, 0x00, -/* 0000BAE0 */ 0x03, 0x03, 0xFE, 0x63, 0x6B, 0xFE, 0x01, 0x03, 0xFE, 0x01, 0x03, 0x09, 0x06, 0x0B, 0x0B, 0x44, -/* 0000BAF0 */ 0x41, 0x03, 0x07, 0x03, 0x09, 0x08, 0x08, 0x08, 0x08, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, +/* 0000BAE0 */ 0x03, 0x03, 0xFE, 0x63, 0x6B, 0xFE, 0x01, 0x03, 0xFE, 0x01, 0x03, 0x09, 0x09, 0x06, 0x0B, 0x0B, +/* 0000BAF0 */ 0x44, 0x41, 0x03, 0x07, 0x03, 0x08, 0x08, 0x08, 0x08, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000BB00 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0A, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000BB10 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x02, 0xFE, 0x19, 0x03, 0x02, 0xFE, /* 0000BB20 */ 0x4B, 0x03, 0x02, 0xFE, 0xC9, 0x02, 0x04, 0xFE, 0x3F, 0x01, 0x5B, 0x08, 0xB4, 0x08, 0x08, 0x2C, @@ -4432,10 +4432,10 @@ namespace Js /* 0000BC70 */ 0x02, 0xFE, 0x4B, 0x02, 0xFE, 0xFD, 0x01, 0xFE, 0x44, 0x02, 0xFE, 0x46, 0x02, 0xFE, 0x47, 0x02, /* 0000BC80 */ 0xFE, 0x49, 0x02, 0x00, 0xFE, 0x91, 0x6B, 0x09, 0x05, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x39, 0x00, /* 0000BC90 */ 0x2A, 0x00, 0x78, 0x00, 0x26, 0x00, 0x48, 0x00, 0x15, 0x00, 0x62, 0x00, 0x2A, 0x00, 0x78, 0x00, -/* 0000BCA0 */ 0x1E, 0x00, 0x24, 0x00, 0x1E, 0x00, 0x26, 0x00, 0x62, 0x00, 0xB5, 0x00, 0x00, 0x3F, 0x7E, 0x15, -/* 0000BCB0 */ 0x0A, 0x0F, 0xFC, 0x07, 0xFE, 0xC9, 0x02, 0xFE, 0x28, 0x02, 0x10, 0xFF, 0xA1, 0x41, 0x61, 0x00, +/* 0000BCA0 */ 0x1E, 0x00, 0x24, 0x00, 0x1E, 0x00, 0x26, 0x00, 0x62, 0x00, 0xB5, 0x00, 0x00, 0xBF, 0xFC, 0x2A, +/* 0000BCB0 */ 0x04, 0x0F, 0xFC, 0x07, 0xFE, 0xC9, 0x02, 0xFE, 0x28, 0x02, 0x10, 0xFF, 0xA1, 0x41, 0x61, 0x00, /* 0000BCC0 */ 0x27, 0x00, 0xFE, 0x3A, 0x65, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFE, 0x3A, 0x65, 0xFE, -/* 0000BCD0 */ 0x84, 0x05, 0xFE, 0x84, 0x05, 0x0A, 0x08, 0x0F, 0x05, 0x67, 0x5E, 0x03, 0x02, 0x09, 0x09, 0x0B, +/* 0000BCD0 */ 0x84, 0x05, 0xFE, 0x84, 0x05, 0x0B, 0x0A, 0x08, 0x0F, 0x05, 0x67, 0x5E, 0x03, 0x02, 0x09, 0x09, /* 0000BCE0 */ 0x08, 0x07, 0x08, 0x08, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000BCF0 */ 0xFF, 0xFF, 0xFF, 0x0E, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000BD00 */ 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x03, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, @@ -4475,11 +4475,11 @@ namespace Js /* 0000BF20 */ 0x00, 0x0C, 0x00, 0x1B, 0x00, 0x09, 0x00, 0x2F, 0x00, 0x18, 0x00, 0x44, 0x00, 0x20, 0x00, 0x55, /* 0000BF30 */ 0x00, 0x26, 0x00, 0x38, 0x00, 0x22, 0x00, 0x39, 0x00, 0x25, 0x00, 0x9B, 0x00, 0x26, 0x00, 0x49, /* 0000BF40 */ 0x00, 0x0A, 0x00, 0x3B, 0x00, 0x25, 0x00, 0x40, 0x00, 0x26, 0x00, 0x5B, 0x00, 0x23, 0x00, 0x79, -/* 0000BF50 */ 0x00, 0x42, 0x00, 0x69, 0x00, 0x0B, 0x00, 0x40, 0x00, 0x08, 0x00, 0x1D, 0x00, 0x00, 0x3F, 0x7E, -/* 0000BF60 */ 0x15, 0x0A, 0x0F, 0xFC, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x16, 0x02, 0x61, 0xFF, 0xA0, +/* 0000BF50 */ 0x00, 0x42, 0x00, 0x69, 0x00, 0x0B, 0x00, 0x40, 0x00, 0x08, 0x00, 0x1D, 0x00, 0x00, 0xBF, 0xFC, +/* 0000BF60 */ 0x2A, 0x04, 0x0F, 0xFC, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x16, 0x02, 0x61, 0xFF, 0xA0, /* 0000BF70 */ 0x41, 0x71, 0x00, 0x26, 0x00, 0xFE, 0x19, 0x61, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFE, -/* 0000BF80 */ 0x19, 0x61, 0xFE, 0xDD, 0x03, 0xFE, 0xDD, 0x03, 0x0A, 0x08, 0x0E, 0x0B, 0x4F, 0x4B, 0x02, 0x03, -/* 0000BF90 */ 0x08, 0x05, 0x0B, 0x07, 0x07, 0x07, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, +/* 0000BF80 */ 0x19, 0x61, 0xFE, 0xDD, 0x03, 0xFE, 0xDD, 0x03, 0x0B, 0x0A, 0x08, 0x0E, 0x0B, 0x4F, 0x4B, 0x02, +/* 0000BF90 */ 0x03, 0x08, 0x05, 0x07, 0x07, 0x07, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000BFA0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0D, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000BFB0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x02, 0xFE, /* 0000BFC0 */ 0x28, 0x03, 0x04, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0xFE, 0x66, 0x01, @@ -4510,10 +4510,10 @@ namespace Js /* 0000C150 */ 0x61, 0x0B, 0x09, 0x00, 0x00, 0x00, 0x09, 0x00, 0x2E, 0x00, 0x12, 0x00, 0x44, 0x00, 0x28, 0x00, /* 0000C160 */ 0x77, 0x00, 0x08, 0x00, 0x2E, 0x00, 0x20, 0x00, 0xF1, 0x00, 0x1E, 0x00, 0x31, 0x00, 0x1E, 0x00, /* 0000C170 */ 0x2E, 0x00, 0x23, 0x00, 0x46, 0x00, 0x2F, 0x00, 0x52, 0x00, 0x62, 0x00, 0xBA, 0x00, 0x00, 0xBF, -/* 0000C180 */ 0x7E, 0x25, 0x0B, 0x0F, 0xFD, 0x0F, 0xFE, 0x31, 0x03, 0xFE, 0xAF, 0x01, 0x0C, 0xFF, 0xB3, 0x41, +/* 0000C180 */ 0xFD, 0x4A, 0x06, 0x0F, 0xFD, 0x0F, 0xFE, 0x31, 0x03, 0xFE, 0xAF, 0x01, 0x0C, 0xFF, 0xB3, 0x41, /* 0000C190 */ 0x41, 0x00, 0x24, 0x00, 0xFE, 0xFE, 0x49, 0x01, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x04, 0x04, 0xFE, -/* 0000C1A0 */ 0xFE, 0x49, 0xFE, 0xB6, 0x16, 0xFE, 0xB6, 0x16, 0x03, 0x15, 0x24, 0x35, 0x08, 0xFE, 0x0B, 0x01, -/* 0000C1B0 */ 0xFA, 0x02, 0x02, 0x05, 0x12, 0x0F, 0x44, 0x14, 0x14, 0x14, 0x14, 0x01, 0x32, 0xFF, 0xFF, 0xFF, +/* 0000C1A0 */ 0xFE, 0x49, 0xFE, 0xB6, 0x16, 0xFE, 0xB6, 0x16, 0x44, 0x03, 0x15, 0x24, 0x35, 0x08, 0xFE, 0x0B, +/* 0000C1B0 */ 0x01, 0xFA, 0x02, 0x02, 0x05, 0x12, 0x0F, 0x14, 0x14, 0x14, 0x14, 0x01, 0x32, 0xFF, 0xFF, 0xFF, /* 0000C1C0 */ 0xFF, 0xFF, 0x33, 0x34, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x35, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, /* 0000C1D0 */ 0x00, 0x02, 0xFE, 0x19, 0x03, 0x02, 0xFE, 0x32, 0x03, 0x04, 0x02, 0xFE, 0xC9, 0x02, 0x08, 0x02, /* 0000C1E0 */ 0xFE, 0x14, 0x03, 0x03, 0x02, 0xFE, 0x21, 0x03, 0x02, 0xFE, 0x0F, 0x03, 0x02, 0xFE, 0x06, 0x03, @@ -4614,10 +4614,10 @@ namespace Js /* 0000C7D0 */ 0x1B, 0x00, 0x06, 0x00, 0x56, 0x00, 0x04, 0x00, 0x2F, 0x00, 0x08, 0x00, 0x4E, 0x00, 0x04, 0x00, /* 0000C7E0 */ 0x49, 0x00, 0x04, 0x00, 0x2B, 0x00, 0x04, 0x00, 0x37, 0x00, 0x04, 0x00, 0x43, 0x00, 0x0C, 0x00, /* 0000C7F0 */ 0x33, 0x00, 0x0C, 0x00, 0x2F, 0x00, 0x0C, 0x00, 0x33, 0x00, 0x06, 0x00, 0x34, 0x00, 0x00, 0x03, -/* 0000C800 */ 0xC8, 0x00, 0x00, 0x3F, 0x7E, 0x35, 0x0A, 0xCF, 0xFC, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, +/* 0000C800 */ 0xC8, 0x00, 0x00, 0xBF, 0xFC, 0x6A, 0x04, 0xCF, 0xFC, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, /* 0000C810 */ 0xD1, 0x01, 0x57, 0xFF, 0xA2, 0x41, 0x51, 0x00, 0x25, 0x00, 0xFE, 0xE3, 0x51, 0xFF, 0x00, 0x10, -/* 0000C820 */ 0x01, 0x00, 0x02, 0x02, 0xFE, 0xE3, 0x51, 0xFE, 0xDB, 0x04, 0xFE, 0xDB, 0x04, 0x09, 0x15, 0x1A, -/* 0000C830 */ 0x0B, 0x5E, 0x59, 0x03, 0x03, 0x05, 0x01, 0x08, 0x41, 0x03, 0x03, 0x03, 0x03, 0x01, 0x01, 0xFF, +/* 0000C820 */ 0x01, 0x00, 0x02, 0x02, 0xFE, 0xE3, 0x51, 0xFE, 0xDB, 0x04, 0xFE, 0xDB, 0x04, 0x41, 0x09, 0x15, +/* 0000C830 */ 0x1A, 0x0B, 0x5E, 0x59, 0x03, 0x03, 0x05, 0x01, 0x08, 0x03, 0x03, 0x03, 0x03, 0x01, 0x01, 0xFF, /* 0000C840 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x19, 0xFF, /* 0000C850 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, /* 0000C860 */ 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x02, 0xFE, 0xC2, 0x02, 0x02, 0xFE, @@ -4658,10 +4658,10 @@ namespace Js /* 0000CA90 */ 0x10, 0x52, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x2C, 0x00, 0x83, 0x00, 0x09, 0x00, 0x2D, 0x00, 0x22, /* 0000CAA0 */ 0x00, 0x4D, 0x00, 0x1E, 0x00, 0x4C, 0x00, 0x7C, 0x00, 0xA0, 0x00, 0x1E, 0x00, 0x4A, 0x00, 0x0A, /* 0000CAB0 */ 0x00, 0x3C, 0x00, 0x5E, 0x00, 0xAB, 0x00, 0x0D, 0x00, 0x4F, 0x00, 0x32, 0x00, 0x01, 0x01, 0x0C, -/* 0000CAC0 */ 0x00, 0x43, 0x00, 0x00, 0x3F, 0x7E, 0x15, 0x0A, 0x8F, 0xFC, 0x07, 0xFE, 0xF9, 0x02, 0xFE, 0x9A, +/* 0000CAC0 */ 0x00, 0x43, 0x00, 0x00, 0xBF, 0xFC, 0x2A, 0x04, 0x8F, 0xFC, 0x07, 0xFE, 0xF9, 0x02, 0xFE, 0x9A, /* 0000CAD0 */ 0x01, 0x1E, 0xFF, 0xA0, 0x41, 0x41, 0x00, 0x22, 0x00, 0xFE, 0x41, 0x47, 0xFF, 0x00, 0x10, 0x01, -/* 0000CAE0 */ 0x00, 0x01, 0x01, 0xFE, 0x41, 0x47, 0xFE, 0x12, 0x02, 0xFE, 0x12, 0x02, 0x0A, 0x05, 0x0B, 0x06, -/* 0000CAF0 */ 0x29, 0x22, 0x01, 0x04, 0x02, 0x02, 0x01, 0x02, 0x02, 0x02, 0x02, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, +/* 0000CAE0 */ 0x00, 0x01, 0x01, 0xFE, 0x41, 0x47, 0xFE, 0x12, 0x02, 0xFE, 0x12, 0x02, 0x01, 0x0A, 0x05, 0x0B, +/* 0000CAF0 */ 0x06, 0x29, 0x22, 0x01, 0x04, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000CB00 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0A, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000CB10 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x01, 0x01, 0x00, /* 0000CB20 */ 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x02, 0xFE, 0x25, 0x03, 0xB2, 0x8F, 0x01, 0x00, 0x00, @@ -4679,8 +4679,8 @@ namespace Js /* 0000CBE0 */ 0xFE, 0x0C, 0x02, 0xFE, 0x00, 0x02, 0x00, 0x0E, 0xFE, 0x26, 0x03, 0x00, 0xFE, 0x58, 0x47, 0x0B, /* 0000CBF0 */ 0x00, 0x00, 0x00, 0x00, 0x4C, 0x00, 0x60, 0x00, 0x09, 0x00, 0x20, 0x00, 0x09, 0x00, 0x23, 0x00, /* 0000CC00 */ 0x15, 0x00, 0x51, 0x00, 0x14, 0x00, 0x41, 0x00, 0x06, 0x00, 0x1C, 0x00, 0x09, 0x00, 0x33, 0x00, -/* 0000CC10 */ 0x0A, 0x00, 0x29, 0x00, 0x08, 0x00, 0x39, 0x00, 0x08, 0x00, 0x14, 0x00, 0x00, 0xBF, 0x7E, 0x11, -/* 0000CC20 */ 0x02, 0x00, 0xFC, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x88, 0x01, 0x31, 0xFF, 0xA0, 0x41, +/* 0000CC10 */ 0x0A, 0x00, 0x29, 0x00, 0x08, 0x00, 0x39, 0x00, 0x08, 0x00, 0x14, 0x00, 0x00, 0x3F, 0xFD, 0x22, +/* 0000CC20 */ 0x04, 0x00, 0xFC, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x88, 0x01, 0x31, 0xFF, 0xA0, 0x41, /* 0000CC30 */ 0x51, 0x00, 0x1F, 0x00, 0xFE, 0x63, 0x44, 0x01, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFE, /* 0000CC40 */ 0x63, 0x44, 0xFE, 0xB8, 0x02, 0xFE, 0xB8, 0x02, 0x01, 0x06, 0x04, 0x07, 0x08, 0x1C, 0x1C, 0x01, /* 0000CC50 */ 0x03, 0x06, 0x04, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x05, 0x06, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, @@ -4695,11 +4695,11 @@ namespace Js /* 0000CCE0 */ 0x08, 0xD4, 0x00, 0x00, 0x00, 0x00, 0x08, 0x5C, 0x03, 0x08, 0xEE, 0x04, 0xFF, 0x07, 0x01, 0x00, /* 0000CCF0 */ 0x93, 0x02, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x00, /* 0000CD00 */ 0x00, 0xFE, 0x23, 0x03, 0x00, 0xFE, 0x7A, 0x44, 0x04, 0x00, 0x00, 0x00, 0x00, 0x28, 0x00, 0x30, -/* 0000CD10 */ 0x00, 0x5A, 0x00, 0x5A, 0x02, 0x0D, 0x00, 0x16, 0x00, 0x00, 0x1E, 0xCD, 0x00, 0x00, 0xBF, 0x7E, -/* 0000CD20 */ 0x1D, 0x0A, 0x00, 0xFC, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x8A, 0x01, 0x6B, 0xFF, 0xA2, +/* 0000CD10 */ 0x00, 0x5A, 0x00, 0x5A, 0x02, 0x0D, 0x00, 0x16, 0x00, 0x00, 0x1E, 0xCD, 0x00, 0x00, 0xBF, 0xFD, +/* 0000CD20 */ 0x3A, 0x04, 0x00, 0xFC, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x8A, 0x01, 0x6B, 0xFF, 0xA2, /* 0000CD30 */ 0x41, 0x51, 0x00, 0x20, 0x00, 0xFE, 0x0D, 0x45, 0x01, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, -/* 0000CD40 */ 0xFE, 0x0D, 0x45, 0xFE, 0xEB, 0x01, 0xFE, 0xEB, 0x01, 0x02, 0x07, 0x04, 0x08, 0x08, 0x20, 0x20, -/* 0000CD50 */ 0x02, 0x01, 0x01, 0x03, 0x08, 0x40, 0x05, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x06, 0x07, 0xFF, 0xFF, +/* 0000CD40 */ 0xFE, 0x0D, 0x45, 0xFE, 0xEB, 0x01, 0xFE, 0xEB, 0x01, 0x40, 0x02, 0x07, 0x04, 0x08, 0x08, 0x20, +/* 0000CD50 */ 0x20, 0x02, 0x01, 0x01, 0x03, 0x08, 0x05, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x06, 0x07, 0xFF, 0xFF, /* 0000CD60 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x03, /* 0000CD70 */ 0x04, 0xB4, 0x8F, 0x02, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x98, 0x08, /* 0000CD80 */ 0x08, 0x04, 0x00, 0x00, 0x96, 0x02, 0x00, 0x00, 0x00, 0x08, 0x8F, 0x02, 0x00, 0x00, 0x00, 0x08, @@ -4714,20 +4714,20 @@ namespace Js /* 0000CE10 */ 0x00, 0x08, 0x06, 0x00, 0x93, 0x03, 0x00, 0x00, 0x00, 0x09, 0x07, 0x00, 0x9D, 0x09, 0x08, 0x04, /* 0000CE20 */ 0x00, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x00, 0x00, 0xFE, 0x7E, 0x01, 0xFE, 0x24, 0x03, 0x00, 0xFE, /* 0000CE30 */ 0x2E, 0x45, 0x05, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x43, 0x00, 0x28, 0x00, 0x37, 0x00, 0x56, -/* 0000CE40 */ 0x00, 0x28, 0x01, 0x1C, 0x00, 0x27, 0x00, 0x00, 0x4C, 0xCE, 0x00, 0x00, 0x3F, 0x6E, 0x0D, 0x0A, +/* 0000CE40 */ 0x00, 0x28, 0x01, 0x1C, 0x00, 0x27, 0x00, 0x00, 0x4C, 0xCE, 0x00, 0x00, 0xBF, 0xDC, 0x1A, 0x04, /* 0000CE50 */ 0x00, 0xFC, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x8E, 0x01, 0x56, 0xFF, 0xA2, 0x41, 0x51, /* 0000CE60 */ 0x00, 0x21, 0x00, 0xFE, 0xF2, 0x45, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0xF2, 0x45, -/* 0000CE70 */ 0xCC, 0xCC, 0x04, 0x03, 0x06, 0x0A, 0x09, 0x03, 0x01, 0x01, 0x02, 0x41, 0xFF, 0xFF, 0xFF, 0xFF, +/* 0000CE70 */ 0xCC, 0xCC, 0x41, 0x04, 0x03, 0x06, 0x0A, 0x09, 0x03, 0x01, 0x01, 0x02, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000CE80 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x05, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000CE90 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x02, 0xFE, 0xC2, /* 0000CEA0 */ 0x02, 0x33, 0x8F, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x98, 0x06, /* 0000CEB0 */ 0x06, 0x03, 0x00, 0x00, 0x47, 0x04, 0x06, 0x15, 0x03, 0x00, 0x04, 0x02, 0x09, 0x12, 0x00, 0x8F, /* 0000CEC0 */ 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x06, 0x01, 0x00, 0x9D, 0x03, 0x06, 0x04, 0x00, /* 0000CED0 */ 0x00, 0xA8, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x19, 0x46, 0x04, 0x00, 0x00, 0x00, 0x00, -/* 0000CEE0 */ 0x15, 0x00, 0x34, 0x00, 0x08, 0x00, 0x2E, 0x00, 0x14, 0x00, 0x42, 0x00, 0x00, 0x3F, 0x7E, 0x15, -/* 0000CEF0 */ 0x0A, 0x0F, 0xFC, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x67, 0x01, 0x8D, 0xFF, 0xA2, 0x41, +/* 0000CEE0 */ 0x15, 0x00, 0x34, 0x00, 0x08, 0x00, 0x2E, 0x00, 0x14, 0x00, 0x42, 0x00, 0x00, 0xBF, 0xFC, 0x2A, +/* 0000CEF0 */ 0x04, 0x0F, 0xFC, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x67, 0x01, 0x8D, 0xFF, 0xA2, 0x41, /* 0000CF00 */ 0x31, 0x00, 0x1E, 0x00, 0xFE, 0xFA, 0x3B, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0xFA, -/* 0000CF10 */ 0x3B, 0xD0, 0xD0, 0x07, 0x06, 0x0B, 0x06, 0x19, 0x16, 0x01, 0x01, 0x01, 0x02, 0x0B, 0x01, 0x01, +/* 0000CF10 */ 0x3B, 0xD0, 0xD0, 0x0B, 0x07, 0x06, 0x0B, 0x06, 0x19, 0x16, 0x01, 0x01, 0x01, 0x02, 0x01, 0x01, /* 0000CF20 */ 0x01, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000CF30 */ 0xFF, 0x0A, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000CF40 */ 0xFF, 0x00, 0x00, 0x03, 0x01, 0x02, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x04, 0x5E, @@ -4738,10 +4738,10 @@ namespace Js /* 0000CF90 */ 0x00, 0x35, 0x00, 0x00, 0x00, 0x0C, 0x01, 0x00, 0x5C, 0x02, 0x0C, 0x5C, 0x03, 0x06, 0x5C, 0x04, /* 0000CFA0 */ 0x08, 0xEE, 0x05, 0x00, 0x0B, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x00, 0x00, /* 0000CFB0 */ 0xF0, 0x00, 0xFE, 0x18, 0x3C, 0x03, 0x07, 0x00, 0x00, 0x00, 0x20, 0x00, 0x4A, 0x00, 0x35, 0x00, -/* 0000CFC0 */ 0x67, 0x00, 0x00, 0x3F, 0x7E, 0x15, 0x0A, 0x0F, 0xFC, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, +/* 0000CFC0 */ 0x67, 0x00, 0x00, 0xBF, 0xFC, 0x2A, 0x04, 0x0F, 0xFC, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, /* 0000CFD0 */ 0x5B, 0x01, 0x89, 0xFF, 0xA2, 0x41, 0x31, 0x00, 0x1D, 0x00, 0xFE, 0x55, 0x38, 0xFF, 0x00, 0x10, -/* 0000CFE0 */ 0x01, 0x00, 0x02, 0x02, 0xFE, 0x55, 0x38, 0xCE, 0xCE, 0x07, 0x06, 0x0B, 0x06, 0x19, 0x16, 0x01, -/* 0000CFF0 */ 0x01, 0x01, 0x02, 0x0B, 0x01, 0x01, 0x01, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, +/* 0000CFE0 */ 0x01, 0x00, 0x02, 0x02, 0xFE, 0x55, 0x38, 0xCE, 0xCE, 0x0B, 0x07, 0x06, 0x0B, 0x06, 0x19, 0x16, +/* 0000CFF0 */ 0x01, 0x01, 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000D000 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0A, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000D010 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x03, 0x01, 0x02, 0x00, 0x00, 0x00, 0x01, /* 0000D020 */ 0x01, 0x00, 0x00, 0x00, 0x04, 0x5E, 0x5B, 0x09, 0xB4, 0x09, 0x09, 0xAE, 0x07, 0x62, 0x0B, 0x07, @@ -4751,10 +4751,10 @@ namespace Js /* 0000D060 */ 0x01, 0x09, 0x8F, 0x01, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00, 0x0C, 0x01, 0x00, 0x5C, 0x02, /* 0000D070 */ 0x0C, 0x5C, 0x03, 0x06, 0x5C, 0x04, 0x08, 0xEE, 0x05, 0x00, 0x0B, 0x00, 0x00, 0x09, 0x02, 0x00, /* 0000D080 */ 0xA8, 0x00, 0x24, 0x00, 0x00, 0x00, 0xF0, 0x00, 0xFE, 0x73, 0x38, 0x03, 0x07, 0x00, 0x00, 0x00, -/* 0000D090 */ 0x20, 0x00, 0x4A, 0x00, 0x35, 0x00, 0x65, 0x00, 0x00, 0x3F, 0x7E, 0x15, 0x0A, 0x0F, 0xFC, 0x07, +/* 0000D090 */ 0x20, 0x00, 0x4A, 0x00, 0x35, 0x00, 0x65, 0x00, 0x00, 0xBF, 0xFC, 0x2A, 0x04, 0x0F, 0xFC, 0x07, /* 0000D0A0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x4F, 0x01, 0x81, 0xFF, 0xA2, 0x41, 0x31, 0x00, 0x1C, 0x00, -/* 0000D0B0 */ 0xFE, 0xC0, 0x34, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0xC0, 0x34, 0xCA, 0xCA, 0x07, -/* 0000D0C0 */ 0x06, 0x0B, 0x06, 0x19, 0x16, 0x01, 0x01, 0x01, 0x02, 0x0B, 0x01, 0x01, 0x01, 0x01, 0xFF, 0xFF, +/* 0000D0B0 */ 0xFE, 0xC0, 0x34, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0xC0, 0x34, 0xCA, 0xCA, 0x0B, +/* 0000D0C0 */ 0x07, 0x06, 0x0B, 0x06, 0x19, 0x16, 0x01, 0x01, 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, 0xFF, 0xFF, /* 0000D0D0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0A, 0xFF, 0xFF, /* 0000D0E0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x03, /* 0000D0F0 */ 0x01, 0x02, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x04, 0x5E, 0x5B, 0x09, 0xB4, 0x09, @@ -4764,11 +4764,11 @@ namespace Js /* 0000D130 */ 0x05, 0x00, 0x5C, 0x00, 0x05, 0x5C, 0x01, 0x09, 0x8F, 0x01, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, /* 0000D140 */ 0x00, 0x0C, 0x01, 0x00, 0x5C, 0x02, 0x0C, 0x5C, 0x03, 0x06, 0x5C, 0x04, 0x08, 0xEE, 0x05, 0x00, /* 0000D150 */ 0x0B, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x00, 0x00, 0xF0, 0x00, 0xFE, 0xDE, -/* 0000D160 */ 0x34, 0x03, 0x07, 0x00, 0x00, 0x00, 0x20, 0x00, 0x4A, 0x00, 0x35, 0x00, 0x61, 0x00, 0x00, 0x3F, -/* 0000D170 */ 0x7E, 0x11, 0x0A, 0x0F, 0xFC, 0x07, 0xFE, 0xB1, 0x02, 0xFE, 0x33, 0x01, 0x1D, 0xFF, 0xA2, 0x41, +/* 0000D160 */ 0x34, 0x03, 0x07, 0x00, 0x00, 0x00, 0x20, 0x00, 0x4A, 0x00, 0x35, 0x00, 0x61, 0x00, 0x00, 0xBF, +/* 0000D170 */ 0xFC, 0x22, 0x04, 0x0F, 0xFC, 0x07, 0xFE, 0xB1, 0x02, 0xFE, 0x33, 0x01, 0x1D, 0xFF, 0xA2, 0x41, /* 0000D180 */ 0x41, 0x00, 0x1B, 0x00, 0xFE, 0x5D, 0x2F, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFE, 0x5D, -/* 0000D190 */ 0x2F, 0xFE, 0x7E, 0x03, 0xFE, 0x7E, 0x03, 0x08, 0x08, 0x0C, 0x0A, 0x51, 0x4E, 0x01, 0x09, 0x07, -/* 0000D1A0 */ 0x01, 0x05, 0x05, 0x05, 0x05, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, +/* 0000D190 */ 0x2F, 0xFE, 0x7E, 0x03, 0xFE, 0x7E, 0x03, 0x01, 0x08, 0x08, 0x0C, 0x0A, 0x51, 0x4E, 0x01, 0x09, +/* 0000D1A0 */ 0x07, 0x05, 0x05, 0x05, 0x05, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000D1B0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0x0B, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000D1C0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x04, 0x02, 0xFE, 0x14, 0x03, 0x02, 0xFE, 0x06, 0x03, 0x02, /* 0000D1D0 */ 0xFE, 0x20, 0x03, 0x02, 0xFE, 0x21, 0x03, 0x02, 0xFE, 0x22, 0x03, 0xFE, 0x8C, 0x01, 0xA8, 0x0A, @@ -4800,10 +4800,10 @@ namespace Js /* 0000D370 */ 0x30, 0x02, 0xFE, 0x32, 0x02, 0xFE, 0xFC, 0x01, 0xFE, 0xFE, 0x01, 0x00, 0xFE, 0x9A, 0x2F, 0x0B, /* 0000D380 */ 0x02, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x36, 0x00, 0x0B, 0x00, 0x33, 0x00, 0x07, 0x00, 0x30, 0x00, /* 0000D390 */ 0x0B, 0x00, 0x37, 0x00, 0x26, 0x00, 0x39, 0x00, 0x10, 0x00, 0x4B, 0x00, 0x48, 0x00, 0x9B, 0x00, -/* 0000D3A0 */ 0x13, 0x00, 0x4D, 0x00, 0x6E, 0x00, 0x95, 0x00, 0x4E, 0x00, 0x6F, 0x00, 0x00, 0x3F, 0x7E, 0x11, -/* 0000D3B0 */ 0x0A, 0x0F, 0xFC, 0x07, 0xFE, 0xF0, 0x02, 0xFE, 0x25, 0x01, 0x24, 0xFF, 0xA2, 0x41, 0x41, 0x00, +/* 0000D3A0 */ 0x13, 0x00, 0x4D, 0x00, 0x6E, 0x00, 0x95, 0x00, 0x4E, 0x00, 0x6F, 0x00, 0x00, 0xBF, 0xFC, 0x22, +/* 0000D3B0 */ 0x04, 0x0F, 0xFC, 0x07, 0xFE, 0xF0, 0x02, 0xFE, 0x25, 0x01, 0x24, 0xFF, 0xA2, 0x41, 0x41, 0x00, /* 0000D3C0 */ 0x1A, 0x00, 0xFE, 0x60, 0x2D, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x05, 0x05, 0xFE, 0x60, 0x2D, 0xFE, -/* 0000D3D0 */ 0xB2, 0x01, 0xFE, 0xB2, 0x01, 0x08, 0x05, 0x0B, 0x04, 0x28, 0x27, 0x01, 0x04, 0x02, 0x01, 0x03, +/* 0000D3D0 */ 0xB2, 0x01, 0xFE, 0xB2, 0x01, 0x01, 0x08, 0x05, 0x0B, 0x04, 0x28, 0x27, 0x01, 0x04, 0x02, 0x03, /* 0000D3E0 */ 0x03, 0x03, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000D3F0 */ 0xFF, 0xFF, 0x0A, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000D400 */ 0xFF, 0xFF, 0x00, 0x00, 0x03, 0x02, 0xFE, 0xAD, 0x02, 0x04, 0xB9, 0x14, 0x0D, 0x00, 0x05, 0x02, @@ -4821,7 +4821,7 @@ namespace Js /* 0000D4C0 */ 0xA8, 0x00, 0x24, 0x00, 0x00, 0x00, 0xFE, 0x2D, 0x02, 0xFE, 0x08, 0x02, 0xFE, 0x36, 0x02, 0x00, /* 0000D4D0 */ 0xFE, 0x9B, 0x2D, 0x07, 0x00, 0x00, 0x00, 0x00, 0x12, 0x00, 0x38, 0x00, 0x23, 0x00, 0x43, 0x00, /* 0000D4E0 */ 0x26, 0x00, 0x39, 0x00, 0x16, 0x00, 0x4D, 0x00, 0x23, 0x00, 0x43, 0x00, 0x23, 0x00, 0x32, 0x00, -/* 0000D4F0 */ 0x00, 0xBF, 0x7E, 0x31, 0x02, 0x4F, 0xFC, 0x0F, 0xFE, 0xD3, 0x02, 0xFE, 0x12, 0x01, 0x04, 0xFF, +/* 0000D4F0 */ 0x00, 0x3F, 0xFD, 0x62, 0x04, 0x4F, 0xFC, 0x0F, 0xFE, 0xD3, 0x02, 0xFE, 0x12, 0x01, 0x04, 0xFF, /* 0000D500 */ 0xA3, 0x41, 0x41, 0x00, 0x18, 0x00, 0xFE, 0xB8, 0x29, 0x01, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x04, /* 0000D510 */ 0x04, 0xFE, 0xB8, 0x29, 0xFE, 0x80, 0x03, 0xFE, 0x80, 0x03, 0x04, 0x09, 0x0A, 0x10, 0x05, 0x20, /* 0000D520 */ 0x20, 0x01, 0x02, 0x01, 0x05, 0x03, 0x03, 0x03, 0x03, 0x01, 0x0D, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, @@ -4843,10 +4843,10 @@ namespace Js /* 0000D620 */ 0x00, 0x00, 0x00, 0xFE, 0x89, 0x01, 0xFE, 0x88, 0x01, 0xFE, 0x87, 0x01, 0xFE, 0x1C, 0x03, 0xFE, /* 0000D630 */ 0x1D, 0x03, 0xFE, 0x1E, 0x03, 0xFE, 0x1F, 0x03, 0x00, 0xFE, 0x0C, 0x2A, 0x06, 0x0C, 0x00, 0x00, /* 0000D640 */ 0x00, 0x0B, 0x00, 0x1A, 0x00, 0x06, 0x00, 0x18, 0x00, 0x33, 0x00, 0x7C, 0x02, 0x4C, 0x00, 0x69, -/* 0000D650 */ 0x00, 0x0D, 0x00, 0x14, 0x00, 0x00, 0x5A, 0xD6, 0x00, 0x00, 0x3F, 0x7E, 0x01, 0x0B, 0x4F, 0xFD, +/* 0000D650 */ 0x00, 0x0D, 0x00, 0x14, 0x00, 0x00, 0x5A, 0xD6, 0x00, 0x00, 0xBF, 0xFC, 0x02, 0x06, 0x4F, 0xFD, /* 0000D660 */ 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x15, 0x01, 0x41, 0xFF, 0xB2, 0x41, 0x51, 0x00, 0x19, /* 0000D670 */ 0x00, 0xFE, 0x77, 0x2A, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0x77, 0x2A, 0xFE, 0x37, -/* 0000D680 */ 0x02, 0xFE, 0x37, 0x02, 0x08, 0x0B, 0x0F, 0x06, 0x30, 0x2F, 0x02, 0x03, 0x07, 0x45, 0x05, 0x05, +/* 0000D680 */ 0x02, 0xFE, 0x37, 0x02, 0x45, 0x08, 0x0B, 0x0F, 0x06, 0x30, 0x2F, 0x02, 0x03, 0x07, 0x05, 0x05, /* 0000D690 */ 0x05, 0x05, 0x01, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000D6A0 */ 0xFF, 0xFF, 0xFF, 0x0E, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, /* 0000D6B0 */ 0x00, 0x04, 0x02, 0xFE, 0xB0, 0x02, 0x02, 0xFE, 0xCA, 0x02, 0x09, 0x02, 0xFE, 0xCC, 0x02, 0x02, @@ -4870,7 +4870,7 @@ namespace Js /* 0000D7D0 */ 0x00, 0x00, 0x86, 0x01, 0x00, 0x00, 0x00, 0xFE, 0xF4, 0x01, 0xFE, 0x89, 0x01, 0xFE, 0x88, 0x01, /* 0000D7E0 */ 0xFE, 0x87, 0x01, 0xFE, 0x86, 0x01, 0x00, 0xFE, 0xAF, 0x2A, 0x07, 0x05, 0x00, 0x00, 0x00, 0x41, /* 0000D7F0 */ 0x00, 0x5F, 0x00, 0x0B, 0x00, 0x2C, 0x00, 0x5A, 0x00, 0x8E, 0x00, 0x20, 0x00, 0x35, 0x00, 0x01, -/* 0000D800 */ 0x00, 0x1E, 0x00, 0x1E, 0x00, 0x92, 0x00, 0x00, 0xBF, 0x7E, 0x31, 0x02, 0x0F, 0xFC, 0x0F, 0xFE, +/* 0000D800 */ 0x00, 0x1E, 0x00, 0x1E, 0x00, 0x92, 0x00, 0x00, 0x3F, 0xFD, 0x62, 0x04, 0x0F, 0xFC, 0x0F, 0xFE, /* 0000D810 */ 0xD2, 0x02, 0xED, 0x04, 0xFF, 0xA3, 0x41, 0x41, 0x00, 0x16, 0x00, 0xFE, 0x5B, 0x25, 0x01, 0xFF, /* 0000D820 */ 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0x5B, 0x25, 0xFE, 0x55, 0x04, 0xFE, 0x55, 0x04, 0x01, /* 0000D830 */ 0x08, 0x05, 0x0A, 0x05, 0x29, 0x26, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x07, 0xFF, @@ -4891,10 +4891,10 @@ namespace Js /* 0000D920 */ 0x03, 0xFE, 0x34, 0x02, 0xF0, 0xFE, 0x18, 0x03, 0x00, 0xFE, 0x8F, 0x25, 0x0A, 0x00, 0x00, 0x00, /* 0000D930 */ 0x00, 0x0B, 0x00, 0x33, 0x00, 0x08, 0x00, 0x21, 0x00, 0x0B, 0x00, 0x30, 0x00, 0x0C, 0x00, 0x2B, /* 0000D940 */ 0x00, 0x26, 0x00, 0x2F, 0x00, 0x2A, 0x00, 0x71, 0x00, 0x0B, 0x00, 0x1A, 0x00, 0x27, 0x00, 0xA5, -/* 0000D950 */ 0x02, 0x0D, 0x00, 0x12, 0x00, 0x00, 0x5A, 0xD9, 0x00, 0x00, 0x3F, 0x7E, 0x11, 0x0A, 0x0F, 0xFC, +/* 0000D950 */ 0x02, 0x0D, 0x00, 0x12, 0x00, 0x00, 0x5A, 0xD9, 0x00, 0x00, 0xBF, 0xFC, 0x22, 0x04, 0x0F, 0xFC, /* 0000D960 */ 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x22, 0xFF, 0xA2, 0x41, 0x51, 0x00, 0x17, 0x00, 0xFE, /* 0000D970 */ 0x12, 0x27, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0x12, 0x27, 0xFE, 0x7C, 0x02, 0xFE, -/* 0000D980 */ 0x7C, 0x02, 0x06, 0x08, 0x0B, 0x06, 0x49, 0x47, 0x02, 0x08, 0x07, 0x41, 0x05, 0x05, 0x05, 0x05, +/* 0000D980 */ 0x7C, 0x02, 0x41, 0x06, 0x08, 0x0B, 0x06, 0x49, 0x47, 0x02, 0x08, 0x07, 0x05, 0x05, 0x05, 0x05, /* 0000D990 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0A, /* 0000D9A0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, /* 0000D9B0 */ 0x00, 0x02, 0xFE, 0x0F, 0x03, 0x02, 0xFE, 0x19, 0x03, 0x03, 0x02, 0xFE, 0x1A, 0x03, 0x04, 0x01, @@ -4926,9 +4926,9 @@ namespace Js /* 0000DB50 */ 0x01, 0xFE, 0x35, 0x02, 0xFE, 0xFC, 0x01, 0x00, 0xFE, 0x33, 0x27, 0x09, 0x00, 0x00, 0x00, 0x00, /* 0000DB60 */ 0x1E, 0x00, 0x66, 0x00, 0x25, 0x00, 0x4A, 0x00, 0x26, 0x00, 0x34, 0x00, 0x2A, 0x00, 0x3F, 0x00, /* 0000DB70 */ 0x3E, 0x00, 0x4E, 0x00, 0x26, 0x00, 0x39, 0x00, 0x4B, 0x00, 0x66, 0x00, 0x3B, 0x00, 0x4A, 0x00, -/* 0000DB80 */ 0x00, 0x3F, 0x7E, 0x11, 0x0A, 0x0F, 0xFC, 0x07, 0xFE, 0xD1, 0x02, 0xE6, 0x04, 0xFF, 0xA3, 0x41, +/* 0000DB80 */ 0x00, 0xBF, 0xFC, 0x22, 0x04, 0x0F, 0xFC, 0x07, 0xFE, 0xD1, 0x02, 0xE6, 0x04, 0xFF, 0xA3, 0x41, /* 0000DB90 */ 0x41, 0x00, 0x15, 0x00, 0xFE, 0x35, 0x24, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0x35, -/* 0000DBA0 */ 0x24, 0xA6, 0xA6, 0x05, 0x03, 0x05, 0x04, 0x14, 0x13, 0x01, 0x02, 0x03, 0x01, 0x02, 0x02, 0x02, +/* 0000DBA0 */ 0x24, 0xA6, 0xA6, 0x01, 0x05, 0x03, 0x05, 0x04, 0x14, 0x13, 0x01, 0x02, 0x03, 0x02, 0x02, 0x02, /* 0000DBB0 */ 0x02, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000DBC0 */ 0x04, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000DBD0 */ 0x00, 0x00, 0x03, 0x63, 0x8F, 0x01, 0x00, 0x00, 0x00, 0x2D, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, @@ -4939,10 +4939,10 @@ namespace Js /* 0000DC20 */ 0x02, 0x07, 0xF2, 0x03, 0x05, 0x05, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x44, 0x00, 0x05, 0x02, /* 0000DC30 */ 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x00, 0x00, 0xFE, 0x30, 0x02, 0xFE, 0x0C, 0x02, 0x00, /* 0000DC40 */ 0xFE, 0x68, 0x24, 0x03, 0x00, 0x00, 0x00, 0x00, 0x26, 0x00, 0x2B, 0x00, 0x3B, 0x00, 0x47, 0x00, -/* 0000DC50 */ 0x00, 0x3F, 0x7E, 0x15, 0x0A, 0x0F, 0xFC, 0x07, 0xFE, 0xD0, 0x02, 0xD6, 0x04, 0xFF, 0xA3, 0x41, +/* 0000DC50 */ 0x00, 0xBF, 0xFC, 0x2A, 0x04, 0x0F, 0xFC, 0x07, 0xFE, 0xD0, 0x02, 0xD6, 0x04, 0xFF, 0xA3, 0x41, /* 0000DC60 */ 0x41, 0x00, 0x14, 0x00, 0xFE, 0xDE, 0x21, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x06, 0x06, 0xFE, 0xDE, -/* 0000DC70 */ 0x21, 0xFE, 0x4F, 0x02, 0xFE, 0x4F, 0x02, 0x0B, 0x07, 0x0F, 0x08, 0x3B, 0x38, 0x01, 0x01, 0x06, -/* 0000DC80 */ 0x05, 0x01, 0x03, 0x03, 0x03, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, +/* 0000DC70 */ 0x21, 0xFE, 0x4F, 0x02, 0xFE, 0x4F, 0x02, 0x01, 0x0B, 0x07, 0x0F, 0x08, 0x3B, 0x38, 0x01, 0x01, +/* 0000DC80 */ 0x06, 0x05, 0x03, 0x03, 0x03, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000DC90 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0E, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000DCA0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x02, 0xFE, 0x14, 0x03, 0x04, 0x02, 0xFE, 0x15, 0x03, /* 0000DCB0 */ 0x02, 0xFE, 0x16, 0x03, 0x02, 0xFE, 0x17, 0x03, 0xFE, 0x10, 0x01, 0xA8, 0x0D, 0x98, 0x0F, 0x07, @@ -4965,10 +4965,10 @@ namespace Js /* 0000DDC0 */ 0x00, 0x47, 0x00, 0x0B, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x00, 0x00, 0xFE, 0x31, 0x02, /* 0000DDD0 */ 0xFE, 0x32, 0x02, 0x23, 0x00, 0xFE, 0x31, 0x22, 0x08, 0x02, 0x00, 0x00, 0x00, 0x09, 0x00, 0x2D, /* 0000DDE0 */ 0x00, 0x0B, 0x00, 0x34, 0x00, 0x26, 0x00, 0x41, 0x00, 0x32, 0x00, 0x66, 0x00, 0x6F, 0x00, 0x90, -/* 0000DDF0 */ 0x00, 0x29, 0x00, 0x42, 0x00, 0x08, 0x00, 0x21, 0x00, 0x00, 0x3F, 0x7E, 0x15, 0x0A, 0x0F, 0xFC, +/* 0000DDF0 */ 0x00, 0x29, 0x00, 0x42, 0x00, 0x08, 0x00, 0x21, 0x00, 0x00, 0xBF, 0xFC, 0x2A, 0x04, 0x0F, 0xFC, /* 0000DE00 */ 0x07, 0xFE, 0xCF, 0x02, 0xBC, 0x04, 0xFF, 0xA3, 0x41, 0x41, 0x00, 0x13, 0x00, 0xFE, 0xA7, 0x1E, /* 0000DE10 */ 0xFF, 0x00, 0x10, 0x01, 0x00, 0x06, 0x06, 0xFE, 0xA7, 0x1E, 0xFE, 0x2F, 0x03, 0xFE, 0x2F, 0x03, -/* 0000DE20 */ 0x0B, 0x0A, 0x11, 0x0A, 0x50, 0x4A, 0x01, 0x01, 0x08, 0x06, 0x01, 0x04, 0x04, 0x04, 0x04, 0xFF, +/* 0000DE20 */ 0x01, 0x0B, 0x0A, 0x11, 0x0A, 0x50, 0x4A, 0x01, 0x01, 0x08, 0x06, 0x04, 0x04, 0x04, 0x04, 0xFF, /* 0000DE30 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x10, 0xFF, /* 0000DE40 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, /* 0000DE50 */ 0x02, 0xFE, 0x0E, 0x03, 0x02, 0xFE, 0x0F, 0x03, 0x02, 0xFE, 0x10, 0x03, 0x04, 0x01, 0xFF, 0xFF, @@ -5001,7 +5001,7 @@ namespace Js /* 0000E000 */ 0x02, 0x00, 0xFE, 0xF0, 0x1E, 0x0D, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x2A, 0x00, 0x0A, 0x00, /* 0000E010 */ 0x28, 0x00, 0x08, 0x00, 0x2A, 0x00, 0x26, 0x00, 0x48, 0x00, 0x08, 0x00, 0x29, 0x00, 0x26, 0x00, /* 0000E020 */ 0x40, 0x00, 0x08, 0x00, 0x29, 0x00, 0x26, 0x00, 0x40, 0x00, 0x3F, 0x00, 0x6C, 0x00, 0x96, 0x00, -/* 0000E030 */ 0xA9, 0x00, 0x06, 0x00, 0x24, 0x00, 0x08, 0x00, 0x16, 0x00, 0x00, 0x3F, 0x7E, 0x11, 0x02, 0x4F, +/* 0000E030 */ 0xA9, 0x00, 0x06, 0x00, 0x24, 0x00, 0x08, 0x00, 0x16, 0x00, 0x00, 0x3F, 0xFC, 0x22, 0x04, 0x4F, /* 0000E040 */ 0xFC, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x8D, 0x14, 0xFF, 0xA0, 0x41, 0x51, 0x00, 0x0C, 0x00, /* 0000E050 */ 0xFE, 0x1B, 0x19, 0x06, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFE, 0x1B, 0x19, 0xFE, 0x0A, /* 0000E060 */ 0x05, 0xFE, 0x0A, 0x05, 0x04, 0x0A, 0x0B, 0x04, 0x1D, 0x1D, 0x01, 0x01, 0x01, 0x06, 0x06, 0x06, @@ -5023,10 +5023,10 @@ namespace Js /* 0000E160 */ 0x03, 0x00, 0x00, 0x00, 0xFE, 0x08, 0x03, 0xFE, 0x30, 0x02, 0xFE, 0x31, 0x02, 0xFE, 0x2F, 0x02, /* 0000E170 */ 0xFE, 0x34, 0x02, 0xFE, 0x0D, 0x03, 0x00, 0xFE, 0x32, 0x19, 0x02, 0x00, 0x00, 0x00, 0x00, 0x8C, /* 0000E180 */ 0x00, 0xF2, 0x04, 0x00, 0x91, 0xE5, 0x00, 0x00, 0xFB, 0xE4, 0x00, 0x00, 0x65, 0xE4, 0x00, 0x00, -/* 0000E190 */ 0xCF, 0xE3, 0x00, 0x00, 0x7E, 0xE2, 0x00, 0x00, 0x9C, 0xE1, 0x00, 0x00, 0x3F, 0xFE, 0x11, 0x0E, +/* 0000E190 */ 0xCF, 0xE3, 0x00, 0x00, 0x7E, 0xE2, 0x00, 0x00, 0x9C, 0xE1, 0x00, 0x00, 0xBF, 0xFC, 0x23, 0x0C, /* 0000E1A0 */ 0x00, 0xFC, 0x07, 0xFE, 0x0D, 0x03, 0xAC, 0x19, 0xFF, 0xA2, 0x41, 0x41, 0x00, 0x12, 0x00, 0xFE, /* 0000E1B0 */ 0xCF, 0x1C, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFE, 0xCF, 0x1C, 0xFE, 0x3D, 0x01, 0xFE, -/* 0000E1C0 */ 0x3D, 0x01, 0x05, 0x04, 0x07, 0x05, 0x1C, 0x1A, 0x19, 0x01, 0x02, 0x03, 0x01, 0x01, 0xFF, 0xFF, +/* 0000E1C0 */ 0x3D, 0x01, 0x01, 0x05, 0x04, 0x07, 0x05, 0x1C, 0x1A, 0x19, 0x01, 0x02, 0x03, 0x01, 0xFF, 0xFF, /* 0000E1D0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x06, 0xFF, 0xFF, /* 0000E1E0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0x6A, /* 0000E1F0 */ 0x00, 0x04, 0x08, 0x6E, 0xEB, 0x00, 0xEC, 0x00, 0x0F, 0x03, 0x00, 0x04, 0x09, 0x5D, 0x00, 0x8F, @@ -5037,10 +5037,10 @@ namespace Js /* 0000E240 */ 0x15, 0x00, 0x00, 0x00, 0x07, 0x02, 0x00, 0x07, 0x02, 0x00, 0x5C, 0x00, 0x02, 0x5C, 0x01, 0x04, /* 0000E250 */ 0xEE, 0x02, 0x07, 0x07, 0x01, 0x00, 0x47, 0x04, 0x07, 0x09, 0x9A, 0xFF, 0xED, 0x00, 0xA8, 0x00, /* 0000E260 */ 0x24, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x26, 0x1D, 0x05, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x1A, -/* 0000E270 */ 0x00, 0x34, 0x00, 0x55, 0x00, 0x08, 0x00, 0x39, 0x00, 0x25, 0x00, 0x3D, 0x00, 0x00, 0x3F, 0x7E, -/* 0000E280 */ 0x51, 0x0A, 0x0F, 0xFC, 0x07, 0xFE, 0x0C, 0x03, 0xA3, 0x16, 0xFF, 0xA2, 0x41, 0x41, 0x00, 0x11, +/* 0000E270 */ 0x00, 0x34, 0x00, 0x55, 0x00, 0x08, 0x00, 0x39, 0x00, 0x25, 0x00, 0x3D, 0x00, 0x00, 0xBF, 0xFC, +/* 0000E280 */ 0xA2, 0x04, 0x0F, 0xFC, 0x07, 0xFE, 0x0C, 0x03, 0xA3, 0x16, 0xFF, 0xA2, 0x41, 0x41, 0x00, 0x11, /* 0000E290 */ 0x00, 0xFE, 0xAF, 0x1B, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0xAF, 0x1B, 0xFE, 0x02, -/* 0000E2A0 */ 0x01, 0xFE, 0x02, 0x01, 0x09, 0x06, 0x0A, 0x07, 0x2A, 0x25, 0x01, 0x05, 0x01, 0x04, 0x01, 0x02, +/* 0000E2A0 */ 0x01, 0xFE, 0x02, 0x01, 0x01, 0x09, 0x06, 0x0A, 0x07, 0x2A, 0x25, 0x01, 0x05, 0x01, 0x04, 0x02, /* 0000E2B0 */ 0x02, 0x02, 0x02, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000E2C0 */ 0xFF, 0xFF, 0x09, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000E2D0 */ 0xFF, 0xFF, 0x00, 0x00, 0x04, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x01, @@ -5058,38 +5058,38 @@ namespace Js /* 0000E390 */ 0x0D, 0x00, 0x00, 0x5C, 0x01, 0x0C, 0xF2, 0x02, 0x0A, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, /* 0000E3A0 */ 0x47, 0x08, 0x0A, 0x47, 0x00, 0x08, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x00, 0x00, 0x1B, /* 0000E3B0 */ 0x29, 0x00, 0xFE, 0xCF, 0x1B, 0x06, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x2A, 0x00, 0x03, 0x00, -/* 0000E3C0 */ 0x1A, 0x00, 0x44, 0x00, 0x39, 0x00, 0x59, 0x00, 0x4B, 0x00, 0x08, 0x00, 0x19, 0x00, 0x00, 0x3F, -/* 0000E3D0 */ 0x7E, 0x11, 0x0A, 0x00, 0xFC, 0x07, 0xFE, 0x0B, 0x03, 0x9F, 0x1E, 0xFF, 0xA2, 0x41, 0x41, 0x00, +/* 0000E3C0 */ 0x1A, 0x00, 0x44, 0x00, 0x39, 0x00, 0x59, 0x00, 0x4B, 0x00, 0x08, 0x00, 0x19, 0x00, 0x00, 0xBF, +/* 0000E3D0 */ 0xFC, 0x22, 0x04, 0x00, 0xFC, 0x07, 0xFE, 0x0B, 0x03, 0x9F, 0x1E, 0xFF, 0xA2, 0x41, 0x41, 0x00, /* 0000E3E0 */ 0x10, 0x00, 0xFE, 0x35, 0x1B, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0x35, 0x1B, 0x5F, -/* 0000E3F0 */ 0x5F, 0x03, 0x03, 0x05, 0x03, 0x10, 0x0E, 0x01, 0x01, 0x01, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, +/* 0000E3F0 */ 0x5F, 0x01, 0x03, 0x03, 0x05, 0x03, 0x10, 0x0E, 0x01, 0x01, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000E400 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x04, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000E410 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x04, 0x37, 0xA8, 0x05, /* 0000E420 */ 0x15, 0x03, 0x00, 0x03, 0x05, 0x09, 0x21, 0x00, 0x8F, 0x01, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, /* 0000E430 */ 0x00, 0x05, 0x00, 0x00, 0x07, 0x02, 0x00, 0x5C, 0x00, 0x02, 0x5C, 0x01, 0x03, 0xEE, 0x02, 0x05, /* 0000E440 */ 0x05, 0x00, 0x00, 0x47, 0x00, 0x05, 0x09, 0x05, 0x00, 0xA8, 0x05, 0x47, 0x00, 0x05, 0x09, 0x02, /* 0000E450 */ 0x00, 0xA8, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x55, 0x1B, 0x02, 0x00, 0x00, 0x00, 0x00, -/* 0000E460 */ 0x35, 0x00, 0x3E, 0x00, 0x00, 0x3F, 0x7E, 0x11, 0x0A, 0x00, 0xFC, 0x07, 0xFE, 0x0A, 0x03, 0x9B, +/* 0000E460 */ 0x35, 0x00, 0x3E, 0x00, 0x00, 0xBF, 0xFC, 0x22, 0x04, 0x00, 0xFC, 0x07, 0xFE, 0x0A, 0x03, 0x9B, /* 0000E470 */ 0x16, 0xFF, 0xA2, 0x41, 0x41, 0x00, 0x0F, 0x00, 0xFE, 0xBA, 0x1A, 0xFF, 0x00, 0x10, 0x01, 0x00, -/* 0000E480 */ 0x02, 0x02, 0xFE, 0xBA, 0x1A, 0x58, 0x58, 0x03, 0x03, 0x05, 0x03, 0x10, 0x0E, 0x01, 0x01, 0x01, +/* 0000E480 */ 0x02, 0x02, 0xFE, 0xBA, 0x1A, 0x58, 0x58, 0x01, 0x03, 0x03, 0x05, 0x03, 0x10, 0x0E, 0x01, 0x01, /* 0000E490 */ 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000E4A0 */ 0x04, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000E4B0 */ 0x00, 0x00, 0x04, 0x37, 0xA8, 0x05, 0x14, 0x03, 0x00, 0x03, 0x05, 0x09, 0x08, 0x00, 0xA9, 0x05, /* 0000E4C0 */ 0x47, 0x00, 0x05, 0x09, 0x1E, 0x00, 0x8F, 0x01, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x05, /* 0000E4D0 */ 0x00, 0x00, 0x07, 0x02, 0x00, 0x5C, 0x00, 0x02, 0x5C, 0x01, 0x03, 0xEE, 0x02, 0x05, 0x05, 0x00, /* 0000E4E0 */ 0x00, 0x47, 0x00, 0x05, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xDA, -/* 0000E4F0 */ 0x1A, 0x02, 0x00, 0x00, 0x00, 0x00, 0x35, 0x00, 0x37, 0x00, 0x00, 0x3F, 0x7E, 0x11, 0x0A, 0x00, +/* 0000E4F0 */ 0x1A, 0x02, 0x00, 0x00, 0x00, 0x00, 0x35, 0x00, 0x37, 0x00, 0x00, 0xBF, 0xFC, 0x22, 0x04, 0x00, /* 0000E500 */ 0xFC, 0x07, 0xFE, 0x09, 0x03, 0x96, 0x16, 0xFF, 0xA2, 0x41, 0x41, 0x00, 0x0E, 0x00, 0xFE, 0x3F, -/* 0000E510 */ 0x1A, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0x3F, 0x1A, 0x5E, 0x5E, 0x03, 0x03, 0x05, -/* 0000E520 */ 0x03, 0x10, 0x0E, 0x01, 0x01, 0x01, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, +/* 0000E510 */ 0x1A, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0x3F, 0x1A, 0x5E, 0x5E, 0x01, 0x03, 0x03, +/* 0000E520 */ 0x05, 0x03, 0x10, 0x0E, 0x01, 0x01, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000E530 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x04, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000E540 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x04, 0x37, 0xA8, 0x05, 0x15, 0x03, 0x00, 0x03, /* 0000E550 */ 0x05, 0x09, 0x21, 0x00, 0x8F, 0x01, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, /* 0000E560 */ 0x07, 0x02, 0x00, 0x5C, 0x00, 0x02, 0x5C, 0x01, 0x03, 0xEE, 0x02, 0x05, 0x05, 0x00, 0x00, 0x47, /* 0000E570 */ 0x00, 0x05, 0x09, 0x05, 0x00, 0xA8, 0x05, 0x47, 0x00, 0x05, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, /* 0000E580 */ 0x00, 0x00, 0x00, 0x00, 0xFE, 0x5F, 0x1A, 0x02, 0x00, 0x00, 0x00, 0x00, 0x35, 0x00, 0x3D, 0x00, -/* 0000E590 */ 0x00, 0x3F, 0x7E, 0x11, 0x0A, 0x0F, 0xFC, 0x07, 0xFE, 0x08, 0x03, 0x8F, 0x16, 0xFF, 0xA2, 0x41, +/* 0000E590 */ 0x00, 0xBF, 0xFC, 0x22, 0x04, 0x0F, 0xFC, 0x07, 0xFE, 0x08, 0x03, 0x8F, 0x16, 0xFF, 0xA2, 0x41, /* 0000E5A0 */ 0x41, 0x00, 0x0D, 0x00, 0xFE, 0x5F, 0x19, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0x5F, -/* 0000E5B0 */ 0x19, 0xC5, 0xC5, 0x04, 0x04, 0x06, 0x03, 0x17, 0x15, 0x01, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, +/* 0000E5B0 */ 0x19, 0xC5, 0xC5, 0x01, 0x04, 0x04, 0x06, 0x03, 0x17, 0x15, 0x01, 0x02, 0x02, 0x01, 0x01, 0x01, /* 0000E5C0 */ 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000E5D0 */ 0x05, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000E5E0 */ 0x00, 0x00, 0x03, 0x04, 0x5F, 0x14, 0x03, 0x00, 0x04, 0x02, 0x09, 0x20, 0x00, 0x8F, 0x01, 0x00, @@ -5099,10 +5099,10 @@ namespace Js /* 0000E620 */ 0x06, 0x01, 0x00, 0x07, 0x02, 0x00, 0x5C, 0x00, 0x03, 0x5C, 0x01, 0x04, 0xEE, 0x02, 0x06, 0x06, /* 0000E630 */ 0x01, 0x00, 0x47, 0x00, 0x06, 0x09, 0x05, 0x00, 0xA8, 0x06, 0x47, 0x00, 0x06, 0x09, 0x02, 0x00, /* 0000E640 */ 0xA8, 0x00, 0x24, 0x00, 0x00, 0x00, 0xFE, 0x2A, 0x02, 0x00, 0xFE, 0x7F, 0x19, 0x04, 0x00, 0x00, -/* 0000E650 */ 0x00, 0x00, 0x08, 0x00, 0x27, 0x00, 0x20, 0x00, 0x40, 0x00, 0x35, 0x00, 0x3D, 0x00, 0x00, 0x3F, -/* 0000E660 */ 0x7E, 0x15, 0x0A, 0x8F, 0xFC, 0x07, 0xFE, 0xED, 0x02, 0x89, 0x20, 0xFF, 0xA0, 0x41, 0x41, 0x00, +/* 0000E650 */ 0x00, 0x00, 0x08, 0x00, 0x27, 0x00, 0x20, 0x00, 0x40, 0x00, 0x35, 0x00, 0x3D, 0x00, 0x00, 0xBF, +/* 0000E660 */ 0xFC, 0x2A, 0x04, 0x8F, 0xFC, 0x07, 0xFE, 0xED, 0x02, 0x89, 0x20, 0xFF, 0xA0, 0x41, 0x41, 0x00, /* 0000E670 */ 0x0B, 0x00, 0xFE, 0x95, 0x18, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFE, 0x95, 0x18, 0x6D, -/* 0000E680 */ 0x6D, 0x05, 0x03, 0x04, 0x06, 0x12, 0x12, 0x01, 0x01, 0x02, 0x01, 0x01, 0x02, 0x02, 0x02, 0x02, +/* 0000E680 */ 0x6D, 0x01, 0x05, 0x03, 0x04, 0x06, 0x12, 0x12, 0x01, 0x01, 0x02, 0x01, 0x02, 0x02, 0x02, 0x02, /* 0000E690 */ 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000E6A0 */ 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000E6B0 */ 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x56, 0x8F, 0x01, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, @@ -5112,10 +5112,10 @@ namespace Js /* 0000E6F0 */ 0x06, 0xE0, 0x06, 0x00, 0x5C, 0x02, 0x06, 0xF2, 0x03, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0000E700 */ 0x00, 0x98, 0x00, 0x04, 0x02, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x00, 0x00, /* 0000E710 */ 0xFE, 0x0C, 0x02, 0xFE, 0x00, 0x02, 0x00, 0x09, 0xFE, 0x07, 0x03, 0x00, 0xFE, 0xAC, 0x18, 0x02, -/* 0000E720 */ 0x00, 0x00, 0x00, 0x00, 0x54, 0x00, 0x55, 0x00, 0x00, 0x3F, 0xFE, 0x15, 0x0E, 0x0F, 0xFC, 0x07, +/* 0000E720 */ 0x00, 0x00, 0x00, 0x00, 0x54, 0x00, 0x55, 0x00, 0x00, 0xBF, 0xFC, 0x2B, 0x0C, 0x0F, 0xFC, 0x07, /* 0000E730 */ 0xFE, 0xEC, 0x02, 0x79, 0x19, 0xFF, 0xA2, 0x41, 0x41, 0x00, 0x0A, 0x00, 0xFE, 0xC9, 0x15, 0xFF, -/* 0000E740 */ 0x00, 0x10, 0x01, 0x00, 0x05, 0x05, 0xFE, 0xC9, 0x15, 0xFE, 0xA8, 0x02, 0xFE, 0xA8, 0x02, 0x0C, -/* 0000E750 */ 0x06, 0x10, 0x06, 0x42, 0x37, 0x18, 0x01, 0x01, 0x04, 0x04, 0x01, 0x01, 0x02, 0x02, 0x02, 0x02, +/* 0000E740 */ 0x00, 0x10, 0x01, 0x00, 0x05, 0x05, 0xFE, 0xC9, 0x15, 0xFE, 0xA8, 0x02, 0xFE, 0xA8, 0x02, 0x01, +/* 0000E750 */ 0x0C, 0x06, 0x10, 0x06, 0x42, 0x37, 0x18, 0x01, 0x01, 0x04, 0x04, 0x01, 0x02, 0x02, 0x02, 0x02, /* 0000E760 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, /* 0000E770 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, /* 0000E780 */ 0x7A, 0xD1, 0x00, 0x02, 0xFE, 0x06, 0x03, 0x04, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, @@ -5139,7 +5139,7 @@ namespace Js /* 0000E8A0 */ 0x04, 0x00, 0x00, 0x00, 0x30, 0x00, 0x62, 0x00, 0x1E, 0x00, 0x36, 0x00, 0x0F, 0x00, 0x34, 0x00, /* 0000E8B0 */ 0x16, 0x00, 0x3A, 0x00, 0x07, 0x00, 0x0B, 0x00, 0x08, 0x00, 0x20, 0x00, 0x2D, 0x00, 0x6A, 0x00, /* 0000E8C0 */ 0x0E, 0x00, 0x36, 0x00, 0x08, 0x00, 0x4C, 0xFF, 0x08, 0x00, 0xE8, 0x00, 0x2B, 0x00, 0x52, 0x00, -/* 0000E8D0 */ 0x00, 0xBF, 0x7E, 0x35, 0x02, 0xCF, 0xFD, 0x0F, 0xFE, 0xEB, 0x02, 0x5A, 0x1E, 0xFF, 0xA2, 0x41, +/* 0000E8D0 */ 0x00, 0x3F, 0xFD, 0x6A, 0x04, 0xCF, 0xFD, 0x0F, 0xFE, 0xEB, 0x02, 0x5A, 0x1E, 0xFF, 0xA2, 0x41, /* 0000E8E0 */ 0x41, 0x00, 0x07, 0x00, 0xFE, 0xD8, 0x0E, 0x02, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x05, 0x05, 0xFE, /* 0000E8F0 */ 0xD8, 0x0E, 0xFE, 0xD4, 0x06, 0xFE, 0xD4, 0x06, 0x03, 0x10, 0x0C, 0x15, 0x09, 0x62, 0x5B, 0x01, /* 0000E900 */ 0x01, 0x08, 0x01, 0x09, 0x05, 0x05, 0x05, 0x05, 0x01, 0x01, 0x01, 0x12, 0xFF, 0xFF, 0xFF, 0xFF, @@ -5183,11 +5183,11 @@ namespace Js /* 0000EB60 */ 0x00, 0x0D, 0xFE, 0x04, 0x03, 0x00, 0xFE, 0x1D, 0x0F, 0x0B, 0x0C, 0x00, 0x00, 0x00, 0x2E, 0x00, /* 0000EB70 */ 0x37, 0x00, 0x07, 0x00, 0x1C, 0x00, 0x33, 0x00, 0x3F, 0x02, 0x3D, 0x00, 0x4A, 0x00, 0x1D, 0x00, /* 0000EB80 */ 0x39, 0x00, 0x12, 0x00, 0x51, 0x00, 0x0B, 0x00, 0x20, 0x00, 0x33, 0x00, 0xBF, 0x01, 0x0B, 0x00, -/* 0000EB90 */ 0x2A, 0x00, 0xBA, 0x00, 0x1F, 0x01, 0x00, 0xDB, 0xEC, 0x00, 0x00, 0x9F, 0xEB, 0x00, 0x00, 0x3F, -/* 0000EBA0 */ 0x7E, 0x15, 0x0A, 0x8F, 0xFC, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x68, 0x3D, 0xFF, 0xA2, 0x41, +/* 0000EB90 */ 0x2A, 0x00, 0xBA, 0x00, 0x1F, 0x01, 0x00, 0xDB, 0xEC, 0x00, 0x00, 0x9F, 0xEB, 0x00, 0x00, 0xBF, +/* 0000EBA0 */ 0xFC, 0x2A, 0x04, 0x8F, 0xFC, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x68, 0x3D, 0xFF, 0xA2, 0x41, /* 0000EBB0 */ 0x51, 0x00, 0x09, 0x00, 0xFE, 0xD4, 0x12, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0xD4, -/* 0000EBC0 */ 0x12, 0xFE, 0x7D, 0x01, 0xFE, 0x7D, 0x01, 0x07, 0x05, 0x09, 0x05, 0x22, 0x20, 0x02, 0x01, 0x03, -/* 0000EBD0 */ 0x06, 0x41, 0x01, 0x01, 0x01, 0x01, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, +/* 0000EBC0 */ 0x12, 0xFE, 0x7D, 0x01, 0xFE, 0x7D, 0x01, 0x41, 0x07, 0x05, 0x09, 0x05, 0x22, 0x20, 0x02, 0x01, +/* 0000EBD0 */ 0x03, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000EBE0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x08, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000EBF0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x04, 0x01, 0xFF, /* 0000EC00 */ 0xFF, 0xFF, 0xFF, 0xB3, 0x8F, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, @@ -5203,10 +5203,10 @@ namespace Js /* 0000ECA0 */ 0x02, 0x00, 0x00, 0x00, 0x0A, 0x05, 0x00, 0x5C, 0x02, 0x0A, 0x5C, 0x03, 0x05, 0xEE, 0x04, 0xFF, /* 0000ECB0 */ 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x00, 0x00, 0xFE, 0x0C, 0x02, 0x00, 0x0E, 0xFE, 0x05, /* 0000ECC0 */ 0x03, 0x00, 0xFE, 0xF9, 0x12, 0x05, 0x00, 0x00, 0x00, 0x00, 0x2C, 0x00, 0x7B, 0x00, 0x09, 0x00, -/* 0000ECD0 */ 0x25, 0x00, 0x41, 0x00, 0x60, 0x00, 0x3B, 0x00, 0x57, 0x00, 0x00, 0x3F, 0x7E, 0x11, 0x0A, 0x00, +/* 0000ECD0 */ 0x25, 0x00, 0x41, 0x00, 0x60, 0x00, 0x3B, 0x00, 0x57, 0x00, 0x00, 0xBF, 0xFC, 0x22, 0x04, 0x00, /* 0000ECE0 */ 0xFC, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x5D, 0x3D, 0xFF, 0xA2, 0x41, 0x51, 0x00, 0x08, 0x00, -/* 0000ECF0 */ 0xFE, 0xA1, 0x0F, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0xA1, 0x0F, 0x61, 0x61, 0x04, -/* 0000ED00 */ 0x05, 0x07, 0x06, 0x0F, 0x0F, 0x02, 0x01, 0x03, 0x41, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, +/* 0000ECF0 */ 0xFE, 0xA1, 0x0F, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0xA1, 0x0F, 0x61, 0x61, 0x41, +/* 0000ED00 */ 0x04, 0x05, 0x07, 0x06, 0x0F, 0x0F, 0x02, 0x01, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000ED10 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x06, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000ED20 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x02, 0xFE, 0xFF, 0x02, 0x02, 0xFE, /* 0000ED30 */ 0xC2, 0x02, 0x04, 0x50, 0x8F, 0x02, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, @@ -5215,10 +5215,10 @@ namespace Js /* 0000ED60 */ 0x00, 0x5C, 0x02, 0x08, 0x2F, 0x08, 0x02, 0x05, 0x5C, 0x03, 0x08, 0x5D, 0x04, 0x03, 0x00, 0x00, /* 0000ED70 */ 0xEE, 0x05, 0x07, 0x07, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, /* 0000ED80 */ 0xA8, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xB5, 0x0F, 0x02, 0x00, 0x00, 0x00, 0x00, 0x4E, -/* 0000ED90 */ 0x00, 0x4C, 0x00, 0x00, 0x3F, 0x7E, 0x11, 0x0A, 0x0F, 0xFC, 0x07, 0xFE, 0xFC, 0x02, 0x52, 0x1F, +/* 0000ED90 */ 0x00, 0x4C, 0x00, 0x00, 0xBF, 0xFC, 0x22, 0x04, 0x0F, 0xFC, 0x07, 0xFE, 0xFC, 0x02, 0x52, 0x1F, /* 0000EDA0 */ 0xFF, 0xA2, 0x41, 0x41, 0x00, 0x06, 0x00, 0xFE, 0xA2, 0x0D, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, -/* 0000EDB0 */ 0x03, 0xFE, 0xA2, 0x0D, 0xFE, 0x14, 0x01, 0xFE, 0x14, 0x01, 0x06, 0x02, 0x06, 0x03, 0x15, 0x12, -/* 0000EDC0 */ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, +/* 0000EDB0 */ 0x03, 0xFE, 0xA2, 0x0D, 0xFE, 0x14, 0x01, 0xFE, 0x14, 0x01, 0x01, 0x06, 0x02, 0x06, 0x03, 0x15, +/* 0000EDC0 */ 0x12, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000EDD0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x05, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000EDE0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x4E, 0x8F, 0x01, 0x00, 0x00, 0x00, 0x07, /* 0000EDF0 */ 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x6D, 0x06, 0x07, 0x00, 0x07, 0x02, 0x00, 0x5C, 0x00, 0x07, @@ -5227,29 +5227,29 @@ namespace Js /* 0000EE20 */ 0x00, 0x14, 0x03, 0x00, 0x03, 0x04, 0x09, 0x05, 0x00, 0xA8, 0x00, 0x09, 0x08, 0x00, 0x47, 0x00, /* 0000EE30 */ 0x04, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x01, 0x00, 0xFE, 0xCE, /* 0000EE40 */ 0x0D, 0x07, 0x00, 0x00, 0x00, 0x00, 0x26, 0x00, 0x47, 0x00, 0x08, 0x00, 0x1E, 0x00, 0x09, 0x00, -/* 0000EE50 */ 0x25, 0x00, 0x08, 0x00, 0x26, 0x00, 0x05, 0x00, 0x1B, 0x00, 0x08, 0x00, 0x1C, 0x00, 0x00, 0x3F, -/* 0000EE60 */ 0x7E, 0x11, 0x0A, 0x0F, 0xFC, 0x07, 0xFE, 0xEA, 0x02, 0x4E, 0x1C, 0xFF, 0xA2, 0x41, 0x41, 0x00, +/* 0000EE50 */ 0x25, 0x00, 0x08, 0x00, 0x26, 0x00, 0x05, 0x00, 0x1B, 0x00, 0x08, 0x00, 0x1C, 0x00, 0x00, 0xBF, +/* 0000EE60 */ 0xFC, 0x22, 0x04, 0x0F, 0xFC, 0x07, 0xFE, 0xEA, 0x02, 0x4E, 0x1C, 0xFF, 0xA2, 0x41, 0x41, 0x00, /* 0000EE70 */ 0x05, 0x00, 0xFE, 0x2B, 0x0D, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFE, 0x2B, 0x0D, 0x53, -/* 0000EE80 */ 0x53, 0x05, 0x02, 0x05, 0x04, 0x0B, 0x0B, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0xFF, +/* 0000EE80 */ 0x53, 0x01, 0x05, 0x02, 0x05, 0x04, 0x0B, 0x0B, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0xFF, /* 0000EE90 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x04, 0xFF, /* 0000EEA0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, /* 0000EEB0 */ 0x2D, 0x8F, 0x01, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x6D, 0x05, 0x06, /* 0000EEC0 */ 0x00, 0x07, 0x03, 0x00, 0x5C, 0x00, 0x06, 0x5C, 0x01, 0x03, 0x5C, 0x02, 0x02, 0xF2, 0x03, 0x00, /* 0000EED0 */ 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x00, 0x00, /* 0000EEE0 */ 0xFE, 0x7A, 0x02, 0x00, 0xFE, 0x49, 0x0D, 0x02, 0x00, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x34, 0x00, -/* 0000EEF0 */ 0x00, 0x3F, 0x6E, 0x01, 0x08, 0x0F, 0xFC, 0x07, 0xFE, 0xE9, 0x02, 0x48, 0x1C, 0xFF, 0xA2, 0x41, +/* 0000EEF0 */ 0x00, 0xBF, 0xDC, 0x02, 0x00, 0x0F, 0xFC, 0x07, 0xFE, 0xE9, 0x02, 0x48, 0x1C, 0xFF, 0xA2, 0x41, /* 0000EF00 */ 0x41, 0x00, 0x04, 0x00, 0xFE, 0x8B, 0x0C, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0x8B, -/* 0000EF10 */ 0x0C, 0x7F, 0x7F, 0x02, 0x04, 0x05, 0x0A, 0x0A, 0x01, 0x41, 0x01, 0x01, 0x01, 0x01, 0xFF, 0xFF, +/* 0000EF10 */ 0x0C, 0x7F, 0x7F, 0x41, 0x02, 0x04, 0x05, 0x0A, 0x0A, 0x01, 0x01, 0x01, 0x01, 0x01, 0xFF, 0xFF, /* 0000EF20 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000EF30 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000EF40 */ 0xFF, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0xF9, 0x7F, 0xFD, 0xDF, 0xC1, 0x05, 0x00, 0x00, 0x40, /* 0000EF50 */ 0xFE, 0x7F, 0xFD, 0xDF, 0xC1, 0x1E, 0x62, 0x05, 0x04, 0x00, 0x14, 0x0F, 0x00, 0x05, 0x02, 0x09, /* 0000EF60 */ 0x00, 0x00, 0x62, 0x05, 0x04, 0x00, 0x14, 0x03, 0x00, 0x05, 0x03, 0x09, 0x02, 0x00, 0x23, 0x04, /* 0000EF70 */ 0xA8, 0x00, 0x24, 0x00, 0x00, 0x00, 0xFE, 0x12, 0x01, 0x00, 0xFE, 0xA4, 0x0C, 0x03, 0x00, 0x00, -/* 0000EF80 */ 0x00, 0x00, 0x18, 0x00, 0x4B, 0x00, 0x04, 0x00, 0x1A, 0x00, 0x00, 0x3F, 0xFE, 0x15, 0x0C, 0x00, +/* 0000EF80 */ 0x00, 0x00, 0x18, 0x00, 0x4B, 0x00, 0x04, 0x00, 0x1A, 0x00, 0x00, 0xBF, 0xFC, 0x2B, 0x08, 0x00, /* 0000EF90 */ 0xFC, 0x07, 0xFE, 0xFB, 0x02, 0x3E, 0x12, 0xFF, 0xA2, 0x41, 0x41, 0x00, 0x03, 0x00, 0xFE, 0x5B, -/* 0000EFA0 */ 0x0B, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x04, 0x04, 0xFE, 0x5B, 0x0B, 0xA9, 0xA9, 0x06, 0x05, 0x09, -/* 0000EFB0 */ 0x03, 0x11, 0x0F, 0x0D, 0x01, 0x01, 0x01, 0x01, 0x41, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, +/* 0000EFA0 */ 0x0B, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x04, 0x04, 0xFE, 0x5B, 0x0B, 0xA9, 0xA9, 0x41, 0x06, 0x05, +/* 0000EFB0 */ 0x09, 0x03, 0x11, 0x0F, 0x0D, 0x01, 0x01, 0x01, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000EFC0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000EFD0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x03, 0x2F, 0x00, /* 0000EFE0 */ 0x01, 0x00, 0x00, 0x00, 0x00, 0x04, 0x01, 0x01, 0x00, 0x00, 0x00, 0x33, 0x47, 0x08, 0x02, 0xEB, @@ -5257,10 +5257,10 @@ namespace Js /* 0000F000 */ 0x00, 0x5C, 0x00, 0x03, 0x98, 0x0A, 0x05, 0x08, 0x00, 0x00, 0x5C, 0x01, 0x0A, 0xEE, 0x02, 0xFF, /* 0000F010 */ 0x09, 0x00, 0x00, 0x28, 0x08, 0x08, 0x09, 0xD8, 0xFF, 0xED, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x00, /* 0000F020 */ 0x00, 0x00, 0xFE, 0x83, 0x0B, 0x05, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x23, 0x00, 0x08, 0x00, -/* 0000F030 */ 0x21, 0x00, 0x18, 0x00, 0x21, 0x00, 0x0A, 0x00, 0x1B, 0x00, 0x00, 0x3F, 0x7E, 0x11, 0x0A, 0x00, +/* 0000F030 */ 0x21, 0x00, 0x18, 0x00, 0x21, 0x00, 0x0A, 0x00, 0x1B, 0x00, 0x00, 0xBF, 0xFC, 0x22, 0x04, 0x00, /* 0000F040 */ 0xFC, 0x07, 0xFE, 0xDE, 0x02, 0x28, 0x1F, 0xFF, 0xA2, 0x41, 0x41, 0x00, 0x02, 0x00, 0xFE, 0x22, -/* 0000F050 */ 0x07, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x04, 0x04, 0xFE, 0x22, 0x07, 0x73, 0x73, 0x06, 0x04, 0x08, -/* 0000F060 */ 0x09, 0x10, 0x10, 0x01, 0x02, 0x02, 0x41, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, +/* 0000F050 */ 0x07, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x04, 0x04, 0xFE, 0x22, 0x07, 0x73, 0x73, 0x41, 0x06, 0x04, +/* 0000F060 */ 0x08, 0x09, 0x10, 0x10, 0x01, 0x02, 0x02, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000F070 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000F080 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x03, 0x04, 0x45, 0x8F, 0x01, 0x00, 0x00, 0x00, /* 0000F090 */ 0x14, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x07, 0x04, 0x00, 0x5C, 0x00, 0x03, 0x5C, 0x01, 0x04, diff --git a/lib/Runtime/Library/InJavascript/Intl.js.bc.64b.h b/lib/Runtime/Library/InJavascript/Intl.js.bc.64b.h index 9d03ff4e44d..6d9136cb3a8 100644 --- a/lib/Runtime/Library/InJavascript/Intl.js.bc.64b.h +++ b/lib/Runtime/Library/InJavascript/Intl.js.bc.64b.h @@ -2732,18 +2732,18 @@ namespace Js /* 00005230 */ 0x00, 0x3B, 0x1A, 0x01, 0x00, 0x6D, 0x1A, 0x01, 0x00, 0x6D, 0x1A, 0x01, 0x00, 0x8D, 0x1A, 0x01, /* 00005240 */ 0x00, 0x8D, 0x1A, 0x01, 0x00, 0x0A, 0x1B, 0x01, 0x00, 0x0A, 0x1B, 0x01, 0x00, 0x8F, 0x1B, 0x01, /* 00005250 */ 0x00, 0x8F, 0x1B, 0x01, 0x00, 0x18, 0x1C, 0x01, 0x00, 0x18, 0x1C, 0x01, 0x00, 0x1F, 0x1C, 0x01, -/* 00005260 */ 0x00, 0x1F, 0x1C, 0x01, 0x00, 0x24, 0x1C, 0x01, 0x00, 0x24, 0x1C, 0x01, 0x00, 0x44, 0x39, 0x6E, -/* 00005270 */ 0x00, 0x08, 0x00, 0xFC, 0x09, 0xFE, 0xA4, 0x02, 0xFF, 0xA8, 0x41, 0x40, 0x00, 0x00, 0x00, 0xFE, +/* 00005260 */ 0x00, 0x1F, 0x1C, 0x01, 0x00, 0x24, 0x1C, 0x01, 0x00, 0x24, 0x1C, 0x01, 0x00, 0x44, 0xB9, 0xDC, +/* 00005270 */ 0x00, 0x00, 0x00, 0xFC, 0x09, 0xFE, 0xA4, 0x02, 0xFF, 0xA8, 0x41, 0x40, 0x00, 0x00, 0x00, 0xFE, /* 00005280 */ 0x75, 0x01, 0x01, 0xFF, 0x00, 0x10, 0x01, 0x00, 0xFE, 0x75, 0x01, 0xFF, 0xAF, 0x1A, 0x01, 0x00, -/* 00005290 */ 0xFF, 0xAF, 0x1A, 0x01, 0x00, 0x01, 0x04, 0x04, 0x05, 0x05, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, +/* 00005290 */ 0xFF, 0xAF, 0x1A, 0x01, 0x00, 0x40, 0x01, 0x04, 0x04, 0x05, 0x05, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 000052A0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 000052B0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x02, 0xFE, 0xA5, 0x02, /* 000052C0 */ 0x07, 0x0C, 0xA8, 0x00, 0xD4, 0x00, 0x00, 0x00, 0x00, 0x04, 0xFA, 0x04, 0x24, 0x00, 0x00, 0x00, -/* 000052D0 */ 0x00, 0x00, 0x01, 0x0A, 0x00, 0x00, 0x00, 0x00, 0xDC, 0x52, 0x00, 0x00, 0xBF, 0x7E, 0x10, 0x0A, +/* 000052D0 */ 0x00, 0x00, 0x01, 0x0A, 0x00, 0x00, 0x00, 0x00, 0xDC, 0x52, 0x00, 0x00, 0xBF, 0xFD, 0x20, 0x04, /* 000052E0 */ 0x4F, 0xFC, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x01, 0xFF, 0xA2, 0x41, 0x51, 0x00, 0x01, /* 000052F0 */ 0x00, 0xFE, 0x97, 0x01, 0x18, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFE, 0x97, 0x01, 0xFF, -/* 00005300 */ 0x89, 0x1A, 0x01, 0x00, 0xFF, 0x89, 0x1A, 0x01, 0x00, 0x39, 0x13, 0x2F, 0x3E, 0x09, 0xFE, 0xAC, -/* 00005310 */ 0x01, 0xFE, 0xA7, 0x01, 0x21, 0x10, 0x40, 0x3D, 0x3C, 0x3D, 0x3D, 0x12, 0x3B, 0xFF, 0xFF, 0xFF, +/* 00005300 */ 0x89, 0x1A, 0x01, 0x00, 0xFF, 0x89, 0x1A, 0x01, 0x00, 0x40, 0x39, 0x13, 0x2F, 0x3E, 0x09, 0xFE, +/* 00005310 */ 0xAC, 0x01, 0xFE, 0xA7, 0x01, 0x21, 0x10, 0x3D, 0x3C, 0x3D, 0x3D, 0x12, 0x3B, 0xFF, 0xFF, 0xFF, /* 00005320 */ 0xFF, 0xFF, 0x3C, 0x3D, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 00005330 */ 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x02, 0xFE, 0xA6, 0x02, 0x02, 0xFE, 0xA7, 0x02, 0x02, 0xFE, 0xA8, /* 00005340 */ 0x02, 0x02, 0xFE, 0xA9, 0x02, 0x03, 0x04, 0x02, 0xFE, 0xAA, 0x02, 0x02, 0xFE, 0xAB, 0x02, 0x02, @@ -2967,7 +2967,7 @@ namespace Js /* 000060E0 */ 0xDC, 0x00, 0x00, 0x84, 0xDB, 0x00, 0x00, 0x0B, 0xD8, 0x00, 0x00, 0xF4, 0xD4, 0x00, 0x00, 0xB0, /* 000060F0 */ 0xD3, 0x00, 0x00, 0x72, 0xD1, 0x00, 0x00, 0x9C, 0xD0, 0x00, 0x00, 0xC6, 0xCF, 0x00, 0x00, 0xF0, /* 00006100 */ 0xCE, 0x00, 0x00, 0x20, 0xCC, 0x00, 0x00, 0xC4, 0xCA, 0x00, 0x00, 0x65, 0xB2, 0x00, 0x00, 0xD5, -/* 00006110 */ 0x99, 0x00, 0x00, 0x17, 0x61, 0x00, 0x00, 0xBF, 0x7E, 0x31, 0x02, 0x4F, 0xFD, 0x0F, 0xFF, 0xFF, +/* 00006110 */ 0x99, 0x00, 0x00, 0x17, 0x61, 0x00, 0x00, 0x3F, 0xFD, 0x62, 0x04, 0x4F, 0xFD, 0x0F, 0xFF, 0xFF, /* 00006120 */ 0xFF, 0xFF, 0xFF, 0xFE, 0x7F, 0x03, 0x1A, 0xFF, 0xA0, 0x41, 0x51, 0x00, 0x33, 0x00, 0xFE, 0x84, /* 00006130 */ 0xAC, 0x0E, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFE, 0x84, 0xAC, 0xFE, 0xAF, 0x6D, 0xFE, /* 00006140 */ 0xAF, 0x6D, 0x01, 0x13, 0x2F, 0x3B, 0x09, 0xD9, 0xD9, 0x01, 0x10, 0x01, 0x09, 0x11, 0x11, 0x11, @@ -3089,10 +3089,10 @@ namespace Js /* 00006880 */ 0x00, 0x00, 0x37, 0x8F, 0x00, 0x00, 0x90, 0x8E, 0x00, 0x00, 0x4A, 0x8C, 0x00, 0x00, 0x3F, 0x8A, /* 00006890 */ 0x00, 0x00, 0x96, 0x85, 0x00, 0x00, 0xEB, 0x7B, 0x00, 0x00, 0x6B, 0x79, 0x00, 0x00, 0xEF, 0x76, /* 000068A0 */ 0x00, 0x00, 0x73, 0x74, 0x00, 0x00, 0xBC, 0x71, 0x00, 0x00, 0x12, 0x6F, 0x00, 0x00, 0xCC, 0x6D, -/* 000068B0 */ 0x00, 0x00, 0xB6, 0x68, 0x00, 0x00, 0xBF, 0x7E, 0x11, 0x0A, 0x4F, 0xFC, 0x0F, 0xFE, 0x2D, 0x03, +/* 000068B0 */ 0x00, 0x00, 0xB6, 0x68, 0x00, 0x00, 0xBF, 0xFD, 0x22, 0x04, 0x4F, 0xFC, 0x0F, 0xFE, 0x2D, 0x03, /* 000068C0 */ 0xFE, 0x4D, 0x05, 0x1B, 0xFF, 0xA0, 0x41, 0x43, 0x00, 0x42, 0x00, 0xFF, 0x7D, 0x10, 0x01, 0x00, /* 000068D0 */ 0x01, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFF, 0x7D, 0x10, 0x01, 0x00, 0xFE, 0x0D, 0x08, -/* 000068E0 */ 0xFE, 0x0D, 0x08, 0x03, 0x07, 0x15, 0x19, 0x09, 0x7A, 0x7A, 0x04, 0x08, 0x09, 0x08, 0x20, 0x20, +/* 000068E0 */ 0xFE, 0x0D, 0x08, 0x08, 0x03, 0x07, 0x15, 0x19, 0x09, 0x7A, 0x7A, 0x04, 0x08, 0x09, 0x20, 0x20, /* 000068F0 */ 0x20, 0x20, 0x01, 0x16, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x17, 0x18, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 00006900 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x02, 0xFE, 0x19, 0x03, /* 00006910 */ 0x02, 0xFE, 0xC4, 0x03, 0x02, 0xFE, 0xCE, 0x02, 0x02, 0xFE, 0xFD, 0x02, 0x02, 0xFE, 0xC5, 0x03, @@ -3154,10 +3154,10 @@ namespace Js /* 00006C90 */ 0x01, 0x00, 0xFF, 0xB3, 0x10, 0x01, 0x00, 0x0A, 0x05, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x3D, 0x00, /* 00006CA0 */ 0x2A, 0x00, 0x92, 0x00, 0x29, 0x00, 0x4C, 0x00, 0x25, 0x00, 0x6C, 0x00, 0x2A, 0x00, 0x92, 0x00, /* 00006CB0 */ 0x13, 0x01, 0xDE, 0x03, 0x28, 0x00, 0x3F, 0x00, 0x61, 0x00, 0x5B, 0x01, 0x3B, 0x00, 0x45, 0x00, -/* 00006CC0 */ 0x00, 0xC5, 0x6C, 0x00, 0x00, 0x3F, 0x7E, 0x1D, 0x0A, 0x00, 0xFC, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, +/* 00006CC0 */ 0x00, 0xC5, 0x6C, 0x00, 0x00, 0xBF, 0xFC, 0x3A, 0x04, 0x00, 0xFC, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, /* 00006CD0 */ 0xFF, 0xFE, 0x66, 0x05, 0x60, 0xFF, 0xA2, 0x41, 0x51, 0x00, 0x43, 0x00, 0xFF, 0x31, 0x17, 0x01, -/* 00006CE0 */ 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFF, 0x31, 0x17, 0x01, 0x00, 0xE9, 0xE9, 0x04, -/* 00006CF0 */ 0x05, 0x07, 0x05, 0x1A, 0x1A, 0x05, 0x02, 0x01, 0x01, 0x05, 0x41, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, +/* 00006CE0 */ 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFF, 0x31, 0x17, 0x01, 0x00, 0xE9, 0xE9, 0x41, +/* 00006CF0 */ 0x04, 0x05, 0x07, 0x05, 0x1A, 0x1A, 0x05, 0x02, 0x01, 0x01, 0x05, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 00006D00 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x06, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 00006D10 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x02, 0xFE, 0xB8, 0x03, /* 00006D20 */ 0x02, 0xFE, 0x67, 0x03, 0x04, 0x90, 0x8F, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, @@ -3170,11 +3170,11 @@ namespace Js /* 00006D90 */ 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x07, 0x04, 0x00, 0x8F, 0x01, 0x00, 0x00, 0x00, 0x03, /* 00006DA0 */ 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x98, 0x08, 0x08, 0x05, 0x01, 0x00, 0x9D, 0x08, 0x07, 0x05, /* 00006DB0 */ 0x00, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x60, 0x17, 0x01, 0x00, 0x03, 0x00, -/* 00006DC0 */ 0x00, 0x00, 0x00, 0x68, 0x00, 0x84, 0x00, 0x26, 0x00, 0x35, 0x00, 0x00, 0x3F, 0x7E, 0x11, 0x0A, +/* 00006DC0 */ 0x00, 0x00, 0x00, 0x68, 0x00, 0x84, 0x00, 0x26, 0x00, 0x35, 0x00, 0x00, 0xBF, 0xFC, 0x22, 0x04, /* 00006DD0 */ 0x0F, 0xFC, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x3E, 0x05, 0x39, 0xFF, 0xA0, 0x41, 0x51, /* 00006DE0 */ 0x00, 0x41, 0x00, 0xFF, 0x61, 0x0D, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFF, -/* 00006DF0 */ 0x61, 0x0D, 0x01, 0x00, 0xFE, 0x6B, 0x02, 0xFE, 0x6B, 0x02, 0x05, 0x05, 0x08, 0x04, 0x25, 0x24, -/* 00006E00 */ 0x04, 0x03, 0x01, 0x09, 0x04, 0x04, 0x04, 0x04, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, +/* 00006DF0 */ 0x61, 0x0D, 0x01, 0x00, 0xFE, 0x6B, 0x02, 0xFE, 0x6B, 0x02, 0x09, 0x05, 0x05, 0x08, 0x04, 0x25, +/* 00006E00 */ 0x24, 0x04, 0x03, 0x01, 0x04, 0x04, 0x04, 0x04, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 00006E10 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 00006E20 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x02, 0xFE, 0x19, 0x03, 0x02, 0xFE, 0xC3, /* 00006E30 */ 0x03, 0x02, 0xFE, 0xCE, 0x02, 0xAA, 0x5B, 0x05, 0xB4, 0x05, 0x05, 0x2C, 0x08, 0x05, 0x15, 0x03, @@ -3191,10 +3191,10 @@ namespace Js /* 00006EE0 */ 0x00, 0x00, 0xFE, 0x3C, 0x02, 0xFE, 0x08, 0x02, 0xFE, 0x41, 0x02, 0xFE, 0x4D, 0x02, 0x00, 0xFF, /* 00006EF0 */ 0x88, 0x0D, 0x01, 0x00, 0x07, 0x05, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x3D, 0x00, 0x2A, 0x00, 0x8B, /* 00006F00 */ 0x00, 0x26, 0x00, 0x4C, 0x00, 0x15, 0x00, 0x6C, 0x00, 0x2A, 0x00, 0x8B, 0x00, 0x09, 0x00, 0x38, -/* 00006F10 */ 0x00, 0x00, 0x3F, 0x7E, 0x15, 0x0A, 0x0F, 0xFC, 0x07, 0xFE, 0x5B, 0x03, 0xFE, 0x22, 0x05, 0x10, +/* 00006F10 */ 0x00, 0x00, 0xBF, 0xFC, 0x2A, 0x04, 0x0F, 0xFC, 0x07, 0xFE, 0x5B, 0x03, 0xFE, 0x22, 0x05, 0x10, /* 00006F20 */ 0xFF, 0xA1, 0x41, 0x61, 0x00, 0x40, 0x00, 0xFF, 0xE3, 0x06, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, -/* 00006F30 */ 0x00, 0x01, 0x01, 0xFF, 0xE3, 0x06, 0x01, 0x00, 0xFE, 0xCA, 0x03, 0xFE, 0xCA, 0x03, 0x0A, 0x09, -/* 00006F40 */ 0x0D, 0x0A, 0x61, 0x60, 0x04, 0x03, 0x0C, 0x06, 0x0B, 0x07, 0x07, 0x07, 0x07, 0xFF, 0xFF, 0xFF, +/* 00006F30 */ 0x00, 0x01, 0x01, 0xFF, 0xE3, 0x06, 0x01, 0x00, 0xFE, 0xCA, 0x03, 0xFE, 0xCA, 0x03, 0x0B, 0x0A, +/* 00006F40 */ 0x09, 0x0D, 0x0A, 0x61, 0x60, 0x04, 0x03, 0x0C, 0x06, 0x07, 0x07, 0x07, 0x07, 0xFF, 0xFF, 0xFF, /* 00006F50 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0C, 0xFF, 0xFF, 0xFF, /* 00006F60 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x03, 0x02, /* 00006F70 */ 0xFE, 0x19, 0x03, 0x02, 0xFE, 0xC3, 0x03, 0x02, 0xFE, 0xCE, 0x02, 0x01, 0x01, 0x00, 0x00, 0x00, @@ -3233,11 +3233,11 @@ namespace Js /* 00007180 */ 0x2E, 0x02, 0xFE, 0x06, 0x02, 0xFE, 0x31, 0x02, 0x00, 0xFF, 0x0E, 0x07, 0x01, 0x00, 0x0B, 0x07, /* 00007190 */ 0x00, 0x00, 0x00, 0x0B, 0x00, 0x39, 0x00, 0x2A, 0x00, 0x81, 0x00, 0x26, 0x00, 0x48, 0x00, 0x15, /* 000071A0 */ 0x00, 0x68, 0x00, 0x2A, 0x00, 0x83, 0x00, 0x0C, 0x00, 0x36, 0x00, 0x50, 0x00, 0x53, 0x00, 0x20, -/* 000071B0 */ 0x00, 0x51, 0x00, 0x6D, 0x00, 0x85, 0x00, 0x5E, 0x00, 0x52, 0x00, 0x00, 0x3F, 0x7E, 0x15, 0x0A, +/* 000071B0 */ 0x00, 0x51, 0x00, 0x6D, 0x00, 0x85, 0x00, 0x5E, 0x00, 0x52, 0x00, 0x00, 0xBF, 0xFC, 0x2A, 0x04, /* 000071C0 */ 0x0F, 0xFC, 0x07, 0xFE, 0xCE, 0x02, 0xFE, 0x02, 0x05, 0x10, 0xFF, 0xA1, 0x41, 0x61, 0x00, 0x3F, /* 000071D0 */ 0x00, 0xFF, 0x1B, 0x01, 0x01, 0x00, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFF, 0x1B, 0x01, -/* 000071E0 */ 0x01, 0x00, 0xFE, 0x69, 0x05, 0xFE, 0x69, 0x05, 0x0A, 0x08, 0x0F, 0x05, 0x67, 0x5E, 0x04, 0x02, -/* 000071F0 */ 0x09, 0x09, 0x0B, 0x08, 0x07, 0x08, 0x08, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, +/* 000071E0 */ 0x01, 0x00, 0xFE, 0x69, 0x05, 0xFE, 0x69, 0x05, 0x0B, 0x0A, 0x08, 0x0F, 0x05, 0x67, 0x5E, 0x04, +/* 000071F0 */ 0x02, 0x09, 0x09, 0x08, 0x07, 0x08, 0x08, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 00007200 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0E, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 00007210 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x03, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, /* 00007220 */ 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x04, 0x02, 0xFE, 0xCE, 0x02, 0xFE, 0xD5, 0x01, @@ -3277,10 +3277,10 @@ namespace Js /* 00007440 */ 0x44, 0x00, 0x20, 0x00, 0x5B, 0x00, 0x26, 0x00, 0x38, 0x00, 0x22, 0x00, 0x39, 0x00, 0x25, 0x00, /* 00007450 */ 0xA1, 0x00, 0x26, 0x00, 0x49, 0x00, 0x0A, 0x00, 0x3B, 0x00, 0x25, 0x00, 0x40, 0x00, 0x26, 0x00, /* 00007460 */ 0x5B, 0x00, 0x23, 0x00, 0x51, 0x00, 0x42, 0x00, 0x67, 0x00, 0x0B, 0x00, 0x3F, 0x00, 0x08, 0x00, -/* 00007470 */ 0x1D, 0x00, 0x00, 0x3F, 0x7E, 0x15, 0x0A, 0x1F, 0xFC, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, +/* 00007470 */ 0x1D, 0x00, 0x00, 0xBF, 0xFC, 0x2A, 0x04, 0x1F, 0xFC, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, /* 00007480 */ 0xF5, 0x04, 0x64, 0xFF, 0xA0, 0x41, 0x71, 0x00, 0x3E, 0x00, 0xFE, 0x21, 0xFE, 0xFF, 0x00, 0x10, -/* 00007490 */ 0x01, 0x00, 0x01, 0x01, 0xFE, 0x21, 0xFE, 0xFE, 0xBA, 0x02, 0xFE, 0xBA, 0x02, 0x0A, 0x0B, 0x10, -/* 000074A0 */ 0x0A, 0x5D, 0x5A, 0x03, 0x02, 0x0B, 0x0B, 0x0B, 0x03, 0x03, 0x03, 0x03, 0x01, 0xFF, 0xFF, 0xFF, +/* 00007490 */ 0x01, 0x00, 0x01, 0x01, 0xFE, 0x21, 0xFE, 0xFE, 0xBA, 0x02, 0xFE, 0xBA, 0x02, 0x0B, 0x0A, 0x0B, +/* 000074A0 */ 0x10, 0x0A, 0x5D, 0x5A, 0x03, 0x02, 0x0B, 0x0B, 0x03, 0x03, 0x03, 0x03, 0x01, 0xFF, 0xFF, 0xFF, /* 000074B0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xFF, /* 000074C0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x03, 0x02, /* 000074D0 */ 0xFE, 0x19, 0x03, 0x02, 0xFE, 0x7D, 0x03, 0x02, 0xFE, 0x68, 0x03, 0x04, 0x02, 0xFE, 0xC2, 0x03, @@ -3316,11 +3316,11 @@ namespace Js /* 000076B0 */ 0x10, 0x08, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x00, 0x00, 0xFE, 0x3C, 0x02, 0xFE, /* 000076C0 */ 0x06, 0x02, 0xFE, 0x31, 0x02, 0x00, 0xFE, 0x40, 0xFE, 0x09, 0x07, 0x00, 0x00, 0x00, 0x23, 0x00, /* 000076D0 */ 0x50, 0x00, 0x2A, 0x00, 0x71, 0x00, 0x45, 0x00, 0x54, 0x00, 0x44, 0x00, 0x3D, 0x00, 0x06, 0x00, -/* 000076E0 */ 0x3B, 0x00, 0x25, 0x00, 0x3B, 0x00, 0x56, 0x00, 0x77, 0x00, 0x69, 0x00, 0x5B, 0x00, 0x00, 0x3F, -/* 000076F0 */ 0x7E, 0x15, 0x0A, 0x1F, 0xFC, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xE8, 0x04, 0x64, 0xFF, +/* 000076E0 */ 0x3B, 0x00, 0x25, 0x00, 0x3B, 0x00, 0x56, 0x00, 0x77, 0x00, 0x69, 0x00, 0x5B, 0x00, 0x00, 0xBF, +/* 000076F0 */ 0xFC, 0x2A, 0x04, 0x1F, 0xFC, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xE8, 0x04, 0x64, 0xFF, /* 00007700 */ 0xA0, 0x41, 0x71, 0x00, 0x3D, 0x00, 0xFE, 0xF9, 0xFA, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, -/* 00007710 */ 0xFE, 0xF9, 0xFA, 0xFE, 0xBA, 0x02, 0xFE, 0xBA, 0x02, 0x0A, 0x0B, 0x10, 0x0A, 0x5D, 0x5A, 0x03, -/* 00007720 */ 0x02, 0x0B, 0x0B, 0x0B, 0x03, 0x03, 0x03, 0x03, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, +/* 00007710 */ 0xFE, 0xF9, 0xFA, 0xFE, 0xBA, 0x02, 0xFE, 0xBA, 0x02, 0x0B, 0x0A, 0x0B, 0x10, 0x0A, 0x5D, 0x5A, +/* 00007720 */ 0x03, 0x02, 0x0B, 0x0B, 0x03, 0x03, 0x03, 0x03, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 00007730 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 00007740 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x03, 0x02, 0xFE, 0x19, 0x03, 0x02, /* 00007750 */ 0xFE, 0x7C, 0x03, 0x02, 0xFE, 0x68, 0x03, 0x04, 0x02, 0xFE, 0xC2, 0x03, 0x01, 0x00, 0x00, 0x00, @@ -3356,10 +3356,10 @@ namespace Js /* 00007930 */ 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x00, 0x00, 0xFE, 0x3C, 0x02, 0xFE, 0x06, 0x02, 0xFE, 0x31, /* 00007940 */ 0x02, 0x00, 0xFE, 0x18, 0xFB, 0x09, 0x07, 0x00, 0x00, 0x00, 0x23, 0x00, 0x50, 0x00, 0x2A, 0x00, /* 00007950 */ 0x71, 0x00, 0x45, 0x00, 0x54, 0x00, 0x44, 0x00, 0x3D, 0x00, 0x06, 0x00, 0x3B, 0x00, 0x25, 0x00, -/* 00007960 */ 0x3B, 0x00, 0x56, 0x00, 0x77, 0x00, 0x69, 0x00, 0x5B, 0x00, 0x00, 0x3F, 0x7E, 0x15, 0x0A, 0x1F, +/* 00007960 */ 0x3B, 0x00, 0x56, 0x00, 0x77, 0x00, 0x69, 0x00, 0x5B, 0x00, 0x00, 0xBF, 0xFC, 0x2A, 0x04, 0x1F, /* 00007970 */ 0xFC, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xDB, 0x04, 0x60, 0xFF, 0xA0, 0x41, 0x71, 0x00, /* 00007980 */ 0x3C, 0x00, 0xFE, 0xD7, 0xF7, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFE, 0xD7, 0xF7, 0xFE, -/* 00007990 */ 0xB4, 0x02, 0xFE, 0xB4, 0x02, 0x0A, 0x0C, 0x11, 0x0A, 0x5D, 0x5A, 0x03, 0x02, 0x0B, 0x0B, 0x0B, +/* 00007990 */ 0xB4, 0x02, 0xFE, 0xB4, 0x02, 0x0B, 0x0A, 0x0C, 0x11, 0x0A, 0x5D, 0x5A, 0x03, 0x02, 0x0B, 0x0B, /* 000079A0 */ 0x03, 0x03, 0x03, 0x03, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 000079B0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 000079C0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x03, 0x02, 0xFE, 0x19, 0x03, 0x02, 0xFE, 0x7B, 0x03, 0x02, @@ -3396,11 +3396,11 @@ namespace Js /* 00007BB0 */ 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x00, 0x00, 0xFE, 0x3C, 0x02, 0xFE, 0x06, 0x02, 0xFE, 0x31, /* 00007BC0 */ 0x02, 0x00, 0xFE, 0xF6, 0xF7, 0x09, 0x07, 0x00, 0x00, 0x00, 0x23, 0x00, 0x50, 0x00, 0x2A, 0x00, /* 00007BD0 */ 0x6D, 0x00, 0x45, 0x00, 0x54, 0x00, 0x44, 0x00, 0x3D, 0x00, 0x06, 0x00, 0x3B, 0x00, 0x25, 0x00, -/* 00007BE0 */ 0x3B, 0x00, 0x56, 0x00, 0x75, 0x00, 0x69, 0x00, 0x5B, 0x00, 0x00, 0x3F, 0x7E, 0x25, 0x0B, 0x4F, +/* 00007BE0 */ 0x3B, 0x00, 0x56, 0x00, 0x75, 0x00, 0x69, 0x00, 0x5B, 0x00, 0x00, 0xBF, 0xFC, 0x4A, 0x06, 0x4F, /* 00007BF0 */ 0xFD, 0x07, 0xFE, 0x88, 0x03, 0xFE, 0x58, 0x04, 0x0C, 0xFF, 0xB3, 0x41, 0x41, 0x00, 0x3B, 0x00, /* 00007C00 */ 0xFE, 0x61, 0xDB, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x04, 0x04, 0xFE, 0x61, 0xDB, 0xFE, 0x04, 0x1C, -/* 00007C10 */ 0xFE, 0x04, 0x1C, 0x1C, 0x29, 0x41, 0x07, 0xFE, 0xAA, 0x01, 0xFE, 0x8A, 0x01, 0x03, 0x01, 0x0C, -/* 00007C20 */ 0x22, 0x0E, 0x45, 0x2B, 0x2B, 0x2B, 0x2B, 0x01, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, +/* 00007C10 */ 0xFE, 0x04, 0x1C, 0x45, 0x1C, 0x29, 0x41, 0x07, 0xFE, 0xAA, 0x01, 0xFE, 0x8A, 0x01, 0x03, 0x01, +/* 00007C20 */ 0x0C, 0x22, 0x0E, 0x2B, 0x2B, 0x2B, 0x2B, 0x01, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 00007C30 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x41, 0xFF, /* 00007C40 */ 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x02, 0xFE, 0x19, 0x03, 0x02, 0xFE, 0x32, 0x03, 0x04, 0x02, /* 00007C50 */ 0xFE, 0xCE, 0x02, 0x08, 0x02, 0xFE, 0x8A, 0x03, 0x02, 0xFE, 0x89, 0x03, 0x02, 0xFE, 0x21, 0x03, @@ -3551,10 +3551,10 @@ namespace Js /* 00008560 */ 0x00, 0x27, 0x00, 0x6B, 0x00, 0x04, 0x00, 0x38, 0x00, 0x07, 0x00, 0x5C, 0x00, 0x34, 0x00, 0xE3, /* 00008570 */ 0x00, 0x28, 0x00, 0x48, 0x00, 0x01, 0x00, 0x4C, 0x00, 0x1B, 0x00, 0x7C, 0x01, 0x1D, 0x00, 0x7B, /* 00008580 */ 0x00, 0x25, 0x00, 0x68, 0x00, 0x35, 0x00, 0x83, 0x00, 0x0E, 0x00, 0x40, 0x00, 0x0C, 0x00, 0x6F, -/* 00008590 */ 0x00, 0x06, 0x00, 0x40, 0x00, 0x00, 0x3F, 0x7E, 0x15, 0x0A, 0x8F, 0xFC, 0x07, 0xFE, 0x87, 0x03, +/* 00008590 */ 0x00, 0x06, 0x00, 0x40, 0x00, 0x00, 0xBF, 0xFC, 0x2A, 0x04, 0x8F, 0xFC, 0x07, 0xFE, 0x87, 0x03, /* 000085A0 */ 0xFE, 0x1E, 0x04, 0x0C, 0xFF, 0xA3, 0x41, 0x41, 0x00, 0x3A, 0x00, 0xFE, 0xEB, 0xCD, 0xFF, 0x00, -/* 000085B0 */ 0x10, 0x01, 0x00, 0x03, 0x03, 0xFE, 0xEB, 0xCD, 0xFE, 0x66, 0x0D, 0xFE, 0x66, 0x0D, 0x07, 0x12, -/* 000085C0 */ 0x16, 0x06, 0xC8, 0xBB, 0x03, 0x02, 0x10, 0x07, 0x01, 0x0A, 0x0A, 0x0A, 0x0A, 0x02, 0xFF, 0xFF, +/* 000085B0 */ 0x10, 0x01, 0x00, 0x03, 0x03, 0xFE, 0xEB, 0xCD, 0xFE, 0x66, 0x0D, 0xFE, 0x66, 0x0D, 0x01, 0x07, +/* 000085C0 */ 0x12, 0x16, 0x06, 0xC8, 0xBB, 0x03, 0x02, 0x10, 0x07, 0x0A, 0x0A, 0x0A, 0x0A, 0x02, 0xFF, 0xFF, /* 000085D0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x15, 0xFF, 0xFF, /* 000085E0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x02, /* 000085F0 */ 0xFE, 0xB2, 0x03, 0x04, 0x02, 0xFE, 0x98, 0x03, 0x03, 0x02, 0xFE, 0xB3, 0x03, 0x01, 0x00, 0x00, @@ -3625,11 +3625,11 @@ namespace Js /* 00008A00 */ 0x34, 0x01, 0x26, 0x00, 0x91, 0x00, 0x2F, 0x00, 0x77, 0x00, 0x0E, 0x00, 0x41, 0x00, 0x2C, 0x00, /* 00008A10 */ 0x8E, 0x00, 0x0E, 0x00, 0x3F, 0x00, 0x2C, 0x00, 0x8A, 0x00, 0x0E, 0x00, 0x40, 0x00, 0x2C, 0x00, /* 00008A20 */ 0x8C, 0x00, 0x0E, 0x00, 0x42, 0x00, 0x2C, 0x00, 0x90, 0x00, 0x0E, 0x00, 0x42, 0x00, 0x2C, 0x00, -/* 00008A30 */ 0x90, 0x00, 0x0E, 0x00, 0x48, 0x00, 0x2C, 0x00, 0x8F, 0x00, 0x08, 0x00, 0x23, 0x00, 0x00, 0x3F, -/* 00008A40 */ 0x7E, 0x15, 0x0A, 0x0F, 0xFC, 0x07, 0xFE, 0x86, 0x03, 0xFE, 0x0C, 0x04, 0x0C, 0xFF, 0xA3, 0x41, +/* 00008A30 */ 0x90, 0x00, 0x0E, 0x00, 0x48, 0x00, 0x2C, 0x00, 0x8F, 0x00, 0x08, 0x00, 0x23, 0x00, 0x00, 0xBF, +/* 00008A40 */ 0xFC, 0x2A, 0x04, 0x0F, 0xFC, 0x07, 0xFE, 0x86, 0x03, 0xFE, 0x0C, 0x04, 0x0C, 0xFF, 0xA3, 0x41, /* 00008A50 */ 0x41, 0x00, 0x39, 0x00, 0xFE, 0xF7, 0xC8, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x04, 0x04, 0xFE, 0xF7, -/* 00008A60 */ 0xC8, 0xFE, 0x81, 0x04, 0xFE, 0x81, 0x04, 0x09, 0x11, 0x16, 0x07, 0x43, 0x40, 0x03, 0x05, 0x06, -/* 00008A70 */ 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, +/* 00008A60 */ 0xC8, 0xFE, 0x81, 0x04, 0xFE, 0x81, 0x04, 0x01, 0x09, 0x11, 0x16, 0x07, 0x43, 0x40, 0x03, 0x05, +/* 00008A70 */ 0x06, 0x06, 0x01, 0x01, 0x01, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 00008A80 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x15, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 00008A90 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x02, 0xFE, 0xA2, 0x03, 0x02, 0xFE, 0xAD, 0x03, 0x04, /* 00008AA0 */ 0x03, 0x02, 0xFE, 0xAE, 0x03, 0x02, 0xFE, 0xA5, 0x03, 0x02, 0xFE, 0xA6, 0x03, 0x02, 0xFE, 0x98, @@ -3658,10 +3658,10 @@ namespace Js /* 00008C10 */ 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x00, 0x00, 0xFE, 0x0C, 0x02, 0x00, 0xFE, 0xAC, 0xC9, /* 00008C20 */ 0x0A, 0x00, 0x00, 0x00, 0x00, 0x49, 0x00, 0x90, 0x00, 0x08, 0x00, 0x2B, 0x00, 0x42, 0x00, 0x01, /* 00008C30 */ 0x01, 0x06, 0x00, 0x3C, 0x00, 0x08, 0x00, 0x6E, 0x00, 0x47, 0x00, 0x82, 0x00, 0x0E, 0x00, 0x33, -/* 00008C40 */ 0x00, 0x44, 0x00, 0x8D, 0x00, 0x08, 0x00, 0x23, 0x00, 0x00, 0x3F, 0x7E, 0x15, 0x0A, 0x0F, 0xFC, +/* 00008C40 */ 0x00, 0x44, 0x00, 0x8D, 0x00, 0x08, 0x00, 0x23, 0x00, 0x00, 0xBF, 0xFC, 0x2A, 0x04, 0x0F, 0xFC, /* 00008C50 */ 0x07, 0xFE, 0x85, 0x03, 0xFE, 0xFC, 0x03, 0x0C, 0xFF, 0xA3, 0x41, 0x41, 0x00, 0x38, 0x00, 0xFE, /* 00008C60 */ 0xBE, 0xC3, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x04, 0x04, 0xFE, 0xBE, 0xC3, 0xFE, 0x2B, 0x05, 0xFE, -/* 00008C70 */ 0x2B, 0x05, 0x09, 0x14, 0x19, 0x07, 0x50, 0x4B, 0x03, 0x05, 0x06, 0x06, 0x01, 0x01, 0x01, 0x01, +/* 00008C70 */ 0x2B, 0x05, 0x01, 0x09, 0x14, 0x19, 0x07, 0x50, 0x4B, 0x03, 0x05, 0x06, 0x06, 0x01, 0x01, 0x01, /* 00008C80 */ 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 00008C90 */ 0x18, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 00008CA0 */ 0x00, 0x00, 0x02, 0xFE, 0xA2, 0x03, 0x02, 0xFE, 0xA3, 0x03, 0x04, 0x03, 0x02, 0xFE, 0xA4, 0x03, @@ -3695,9 +3695,9 @@ namespace Js /* 00008E60 */ 0x0C, 0x02, 0x00, 0xFE, 0x96, 0xC4, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x49, 0x00, 0x0D, 0x01, 0x08, /* 00008E70 */ 0x00, 0x2B, 0x00, 0x42, 0x00, 0xF6, 0x00, 0x06, 0x00, 0x3C, 0x00, 0x16, 0x00, 0x48, 0x00, 0x52, /* 00008E80 */ 0x00, 0x86, 0x00, 0x08, 0x00, 0x31, 0x00, 0x60, 0x00, 0xC6, 0x00, 0x08, 0x00, 0x23, 0x00, 0x00, -/* 00008E90 */ 0x3F, 0x6E, 0x05, 0x0A, 0x00, 0xFC, 0x07, 0xFE, 0x84, 0x03, 0xFE, 0xF3, 0x03, 0x0C, 0xFF, 0xA3, +/* 00008E90 */ 0xBF, 0xDC, 0x0A, 0x04, 0x00, 0xFC, 0x07, 0xFE, 0x84, 0x03, 0xFE, 0xF3, 0x03, 0x0C, 0xFF, 0xA3, /* 00008EA0 */ 0x41, 0x41, 0x00, 0x37, 0x00, 0xFE, 0x4E, 0xC2, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, -/* 00008EB0 */ 0x4E, 0xC2, 0xEF, 0xEF, 0x03, 0x05, 0x07, 0x0E, 0x0B, 0x03, 0x01, 0x01, 0x01, 0xFF, 0xFF, 0xFF, +/* 00008EB0 */ 0x4E, 0xC2, 0xEF, 0xEF, 0x01, 0x03, 0x05, 0x07, 0x0E, 0x0B, 0x03, 0x01, 0x01, 0xFF, 0xFF, 0xFF, /* 00008EC0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x06, 0xFF, 0xFF, 0xFF, /* 00008ED0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x02, 0xFE, /* 00008EE0 */ 0x14, 0x03, 0x02, 0xFE, 0xC2, 0x02, 0x02, 0xFE, 0x6A, 0x03, 0x34, 0x2C, 0x07, 0x05, 0x14, 0x03, @@ -3705,7 +3705,7 @@ namespace Js /* 00008F00 */ 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x98, 0x07, 0x07, 0x05, 0x00, 0x00, 0x47, 0x00, /* 00008F10 */ 0x07, 0x0F, 0x03, 0x00, 0x07, 0x47, 0x00, 0x04, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x00, /* 00008F20 */ 0x00, 0x00, 0xFE, 0x8A, 0xC2, 0x04, 0x00, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x3C, 0x00, 0x06, 0x00, -/* 00008F30 */ 0x31, 0x00, 0x21, 0x00, 0x45, 0x00, 0x00, 0xBF, 0x7E, 0x31, 0x02, 0x0F, 0xFC, 0x0F, 0xFE, 0x83, +/* 00008F30 */ 0x31, 0x00, 0x21, 0x00, 0x45, 0x00, 0x00, 0x3F, 0xFD, 0x62, 0x04, 0x0F, 0xFC, 0x0F, 0xFE, 0x83, /* 00008F40 */ 0x03, 0xFE, 0xB3, 0x03, 0x0C, 0xFF, 0xA3, 0x41, 0x41, 0x00, 0x35, 0x00, 0xFE, 0x96, 0xB6, 0x01, /* 00008F50 */ 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0x96, 0xB6, 0xFE, 0xC7, 0x09, 0xFE, 0xC7, 0x09, /* 00008F60 */ 0x02, 0x06, 0x17, 0x1B, 0x05, 0xCC, 0xCA, 0x03, 0x0D, 0x02, 0x07, 0x05, 0x05, 0x05, 0x05, 0x18, @@ -3793,10 +3793,10 @@ namespace Js /* 00009480 */ 0x5B, 0x00, 0x28, 0x00, 0x58, 0x00, 0x3A, 0x00, 0x60, 0x00, 0x14, 0x00, 0x39, 0x00, 0x37, 0x00, /* 00009490 */ 0x7A, 0x00, 0x13, 0x00, 0x28, 0x00, 0x37, 0x00, 0x5C, 0x00, 0x13, 0x00, 0x31, 0x00, 0x14, 0x00, /* 000094A0 */ 0x41, 0x00, 0x3A, 0x00, 0x63, 0x00, 0x14, 0x00, 0x40, 0x00, 0x37, 0x00, 0x7D, 0x00, 0x44, 0x00, -/* 000094B0 */ 0x42, 0x01, 0x72, 0x00, 0x73, 0x00, 0x00, 0xBB, 0x94, 0x00, 0x00, 0x3F, 0x7E, 0x15, 0x0A, 0x00, +/* 000094B0 */ 0x42, 0x01, 0x72, 0x00, 0x73, 0x00, 0x00, 0xBB, 0x94, 0x00, 0x00, 0xBF, 0xFC, 0x2A, 0x04, 0x00, /* 000094C0 */ 0xFC, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xDD, 0x03, 0x55, 0xFF, 0xA2, 0x41, 0x51, 0x00, /* 000094D0 */ 0x36, 0x00, 0xFE, 0xEC, 0xBE, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0xEC, 0xBE, 0xB0, -/* 000094E0 */ 0xB0, 0x04, 0x03, 0x05, 0x05, 0x10, 0x10, 0x04, 0x01, 0x01, 0x04, 0x41, 0xFF, 0xFF, 0xFF, 0xFF, +/* 000094E0 */ 0xB0, 0x41, 0x04, 0x03, 0x05, 0x05, 0x10, 0x10, 0x04, 0x01, 0x01, 0x04, 0xFF, 0xFF, 0xFF, 0xFF, /* 000094F0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x04, 0xFF, 0xFF, 0xFF, 0xFF, /* 00009500 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x04, 0x56, 0x8F, /* 00009510 */ 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x98, 0x05, 0x05, 0x03, 0x00, @@ -3805,10 +3805,10 @@ namespace Js /* 00009540 */ 0x00, 0x00, 0x00, 0x06, 0x02, 0x00, 0x5C, 0x01, 0x06, 0x8F, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, /* 00009550 */ 0x00, 0x00, 0x06, 0x03, 0x00, 0x5C, 0x02, 0x06, 0x5C, 0x03, 0x03, 0xEE, 0x04, 0xFF, 0x05, 0x00, /* 00009560 */ 0x00, 0xA8, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x12, 0xBF, 0x03, 0x00, 0x00, 0x00, 0x00, -/* 00009570 */ 0x19, 0x00, 0x2D, 0x00, 0x3B, 0x00, 0x5C, 0x00, 0x00, 0x3F, 0x7E, 0x11, 0x0A, 0x4F, 0xFC, 0x07, +/* 00009570 */ 0x19, 0x00, 0x2D, 0x00, 0x3B, 0x00, 0x5C, 0x00, 0x00, 0xBF, 0xFC, 0x22, 0x04, 0x4F, 0xFC, 0x07, /* 00009580 */ 0xFE, 0x82, 0x03, 0xFE, 0x82, 0x03, 0x0C, 0xFF, 0xA3, 0x41, 0x41, 0x00, 0x34, 0x00, 0xFE, 0xDC, /* 00009590 */ 0xAC, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x04, 0x04, 0xFE, 0xDC, 0xAC, 0xFE, 0x1F, 0x09, 0xFE, 0x1F, -/* 000095A0 */ 0x09, 0x07, 0x15, 0x1A, 0x05, 0x93, 0x8D, 0x03, 0x08, 0x03, 0x01, 0x0C, 0x0C, 0x0C, 0x0C, 0x06, +/* 000095A0 */ 0x09, 0x01, 0x07, 0x15, 0x1A, 0x05, 0x93, 0x8D, 0x03, 0x08, 0x03, 0x0C, 0x0C, 0x0C, 0x0C, 0x06, /* 000095B0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x19, /* 000095C0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, /* 000095D0 */ 0x00, 0x03, 0x04, 0x08, 0x02, 0xFE, 0x89, 0x03, 0x02, 0xFE, 0x8A, 0x03, 0x09, 0x02, 0xFE, 0x8B, @@ -3875,7 +3875,7 @@ namespace Js /* 000099A0 */ 0x03, 0x00, 0x3A, 0x00, 0x10, 0x00, 0x46, 0x00, 0x2A, 0x00, 0x79, 0x00, 0x03, 0x00, 0x3C, 0x00, /* 000099B0 */ 0x17, 0x00, 0x58, 0x00, 0x40, 0x00, 0xCF, 0x00, 0x40, 0x00, 0xD0, 0x00, 0x40, 0x00, 0xDD, 0x00, /* 000099C0 */ 0x17, 0x00, 0x58, 0x00, 0x40, 0x00, 0xCF, 0x00, 0x40, 0x00, 0xD1, 0x00, 0x40, 0x00, 0xE0, 0x00, -/* 000099D0 */ 0x08, 0x00, 0x1D, 0x00, 0x00, 0xBF, 0x7E, 0x31, 0x02, 0x4F, 0xFD, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, +/* 000099D0 */ 0x08, 0x00, 0x1D, 0x00, 0x00, 0x3F, 0xFD, 0x62, 0x04, 0x4F, 0xFD, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, /* 000099E0 */ 0xFF, 0xFE, 0x90, 0x02, 0x18, 0xFF, 0xA0, 0x41, 0x51, 0x00, 0x2B, 0x00, 0xFE, 0x40, 0x7A, 0x06, /* 000099F0 */ 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFE, 0x40, 0x7A, 0xFE, 0xA1, 0x31, 0xFE, 0xA1, 0x31, /* 00009A00 */ 0x01, 0x0D, 0x22, 0x28, 0x09, 0xA6, 0xA6, 0x01, 0x0C, 0x01, 0x09, 0x07, 0x07, 0x07, 0x07, 0x05, @@ -3964,10 +3964,10 @@ namespace Js /* 00009F30 */ 0x37, 0x00, 0x23, 0x01, 0x61, 0x00, 0x9A, 0x00, 0x3E, 0x00, 0x49, 0x00, 0x5C, 0x00, 0xA0, 0x00, /* 00009F40 */ 0x68, 0x00, 0xD8, 0x04, 0x7F, 0x00, 0x25, 0x03, 0x0F, 0x00, 0x88, 0x00, 0x07, 0x00, 0x17, 0x00, /* 00009F50 */ 0x00, 0x8A, 0xA9, 0x00, 0x00, 0xBD, 0xA7, 0x00, 0x00, 0x0C, 0xA5, 0x00, 0x00, 0x48, 0xA3, 0x00, -/* 00009F60 */ 0x00, 0xA9, 0xA0, 0x00, 0x00, 0x69, 0x9F, 0x00, 0x00, 0x3F, 0x7E, 0x11, 0x0A, 0x0F, 0xFC, 0x07, +/* 00009F60 */ 0x00, 0xA9, 0xA0, 0x00, 0x00, 0x69, 0x9F, 0x00, 0x00, 0xBF, 0xFC, 0x22, 0x04, 0x0F, 0xFC, 0x07, /* 00009F70 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x69, 0x03, 0x39, 0xFF, 0xA0, 0x41, 0x51, 0x00, 0x32, 0x00, /* 00009F80 */ 0xFE, 0x8F, 0xA8, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFE, 0x8F, 0xA8, 0xFE, 0x61, 0x02, -/* 00009F90 */ 0xFE, 0x61, 0x02, 0x05, 0x05, 0x08, 0x04, 0x25, 0x24, 0x04, 0x03, 0x01, 0x09, 0x04, 0x04, 0x04, +/* 00009F90 */ 0xFE, 0x61, 0x02, 0x09, 0x05, 0x05, 0x08, 0x04, 0x25, 0x24, 0x04, 0x03, 0x01, 0x04, 0x04, 0x04, /* 00009FA0 */ 0x04, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 00009FB0 */ 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 00009FC0 */ 0x00, 0x00, 0x02, 0xFE, 0x19, 0x03, 0x02, 0xFE, 0x64, 0x03, 0x02, 0xFE, 0xCD, 0x02, 0xAA, 0x5B, @@ -3984,10 +3984,10 @@ namespace Js /* 0000A070 */ 0x06, 0x03, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x00, 0x00, 0xFE, 0x3C, 0x02, 0xFE, 0x08, /* 0000A080 */ 0x02, 0xFE, 0x40, 0x02, 0xFE, 0x4D, 0x02, 0x00, 0xFE, 0xB6, 0xA8, 0x07, 0x05, 0x00, 0x00, 0x00, /* 0000A090 */ 0x0B, 0x00, 0x3D, 0x00, 0x2A, 0x00, 0x87, 0x00, 0x26, 0x00, 0x4C, 0x00, 0x15, 0x00, 0x6A, 0x00, -/* 0000A0A0 */ 0x2A, 0x00, 0x87, 0x00, 0x09, 0x00, 0x38, 0x00, 0x00, 0xBF, 0x7E, 0x11, 0x0A, 0x0F, 0xFC, 0x0F, +/* 0000A0A0 */ 0x2A, 0x00, 0x87, 0x00, 0x09, 0x00, 0x38, 0x00, 0x00, 0xBF, 0xFD, 0x22, 0x04, 0x0F, 0xFC, 0x0F, /* 0000A0B0 */ 0xFE, 0x2D, 0x03, 0xFE, 0x53, 0x03, 0x1B, 0xFF, 0xA0, 0x41, 0x43, 0x00, 0x30, 0x00, 0xFE, 0xA2, /* 0000A0C0 */ 0xA3, 0x01, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFE, 0xA2, 0xA3, 0xFE, 0x1A, 0x04, 0xFE, -/* 0000A0D0 */ 0x1A, 0x04, 0x02, 0x06, 0x07, 0x0B, 0x05, 0x40, 0x40, 0x04, 0x06, 0x07, 0x08, 0x03, 0x03, 0x03, +/* 0000A0D0 */ 0x1A, 0x04, 0x08, 0x02, 0x06, 0x07, 0x0B, 0x05, 0x40, 0x40, 0x04, 0x06, 0x07, 0x03, 0x03, 0x03, /* 0000A0E0 */ 0x03, 0x08, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x09, 0x0A, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000A0F0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x02, 0xFE, 0x19, 0x03, 0x02, 0xFE, /* 0000A100 */ 0x65, 0x03, 0x02, 0xFE, 0xCD, 0x02, 0x03, 0x04, 0xFE, 0x48, 0x01, 0x5B, 0x07, 0xB4, 0x07, 0x07, @@ -4015,10 +4015,10 @@ namespace Js /* 0000A260 */ 0x03, 0xFE, 0xF2, 0x01, 0x00, 0xFE, 0xD8, 0xA3, 0x09, 0x05, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x3D, /* 0000A270 */ 0x00, 0x2A, 0x00, 0x8E, 0x00, 0x29, 0x00, 0x4C, 0x00, 0x25, 0x00, 0x6A, 0x00, 0x2A, 0x00, 0x90, /* 0000A280 */ 0x00, 0x28, 0x00, 0x49, 0x00, 0x3F, 0x00, 0x4A, 0x01, 0x2D, 0x00, 0x3F, 0x00, 0x00, 0x92, 0xA2, -/* 0000A290 */ 0x00, 0x00, 0x3F, 0x6E, 0x0D, 0x0A, 0x00, 0xFC, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x5E, +/* 0000A290 */ 0x00, 0x00, 0xBF, 0xDC, 0x1A, 0x04, 0x00, 0xFC, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x5E, /* 0000A2A0 */ 0x03, 0x48, 0xFF, 0xA2, 0x41, 0x51, 0x00, 0x31, 0x00, 0xFE, 0x62, 0xA6, 0xFF, 0x00, 0x10, 0x01, -/* 0000A2B0 */ 0x00, 0x02, 0x02, 0xFE, 0x62, 0xA6, 0xFC, 0xFC, 0x05, 0x04, 0x06, 0x0D, 0x0D, 0x05, 0x01, 0x01, -/* 0000A2C0 */ 0x02, 0x41, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, +/* 0000A2B0 */ 0x00, 0x02, 0x02, 0xFE, 0x62, 0xA6, 0xFC, 0xFC, 0x41, 0x05, 0x04, 0x06, 0x0D, 0x0D, 0x05, 0x01, +/* 0000A2C0 */ 0x01, 0x02, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000A2D0 */ 0xFF, 0x05, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000A2E0 */ 0xFF, 0x00, 0x00, 0x02, 0xFE, 0x67, 0x03, 0x02, 0xFE, 0x14, 0x03, 0x48, 0x8F, 0x01, 0x00, 0x00, /* 0000A2F0 */ 0x00, 0x02, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x2F, 0x07, 0x02, 0x04, 0x2D, 0x06, 0x06, 0x07, @@ -4026,10 +4026,10 @@ namespace Js /* 0000A310 */ 0x00, 0x06, 0x01, 0x00, 0x8F, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, /* 0000A320 */ 0x2F, 0x08, 0x02, 0x04, 0x98, 0x07, 0x07, 0x08, 0x00, 0x00, 0x9D, 0x07, 0x06, 0x04, 0x00, 0x00, /* 0000A330 */ 0xA8, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x93, 0xA6, 0x03, 0x00, 0x00, 0x00, 0x00, 0x1C, -/* 0000A340 */ 0x00, 0x5B, 0x00, 0x2A, 0x00, 0x6F, 0x00, 0x00, 0x3F, 0x7E, 0x11, 0x0A, 0x0F, 0xFC, 0x07, 0xFE, +/* 0000A340 */ 0x00, 0x5B, 0x00, 0x2A, 0x00, 0x6F, 0x00, 0x00, 0xBF, 0xFC, 0x22, 0x04, 0x0F, 0xFC, 0x07, 0xFE, /* 0000A350 */ 0x5B, 0x03, 0xFE, 0x37, 0x03, 0x10, 0xFF, 0xA3, 0x41, 0x41, 0x00, 0x2F, 0x00, 0xFE, 0xAA, 0x9C, /* 0000A360 */ 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0xAA, 0x9C, 0xFE, 0xF1, 0x02, 0xFE, 0xF1, 0x02, -/* 0000A370 */ 0x08, 0x07, 0x0B, 0x07, 0x3D, 0x39, 0x04, 0x06, 0x03, 0x09, 0x05, 0x05, 0x05, 0x05, 0xFF, 0xFF, +/* 0000A370 */ 0x09, 0x08, 0x07, 0x0B, 0x07, 0x3D, 0x39, 0x04, 0x06, 0x03, 0x05, 0x05, 0x05, 0x05, 0xFF, 0xFF, /* 0000A380 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0A, 0xFF, 0xFF, /* 0000A390 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x02, /* 0000A3A0 */ 0xFE, 0x19, 0x03, 0x02, 0xFE, 0x64, 0x03, 0x02, 0xFE, 0xCD, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, @@ -4054,10 +4054,10 @@ namespace Js /* 0000A4D0 */ 0x00, 0xA8, 0x00, 0x24, 0x00, 0x00, 0x00, 0xFE, 0x31, 0x02, 0xFE, 0x3C, 0x02, 0xFE, 0x08, 0x02, /* 0000A4E0 */ 0xFE, 0x40, 0x02, 0xFE, 0x02, 0x02, 0x00, 0xFE, 0xD4, 0x9C, 0x08, 0x05, 0x00, 0x00, 0x00, 0x26, /* 0000A4F0 */ 0x00, 0x31, 0x00, 0x0B, 0x00, 0x39, 0x00, 0x2A, 0x00, 0x7F, 0x00, 0x26, 0x00, 0x48, 0x00, 0x15, -/* 0000A500 */ 0x00, 0x66, 0x00, 0x2A, 0x00, 0xD8, 0x00, 0x5A, 0x00, 0x57, 0x00, 0x00, 0x3F, 0x7E, 0x15, 0x0A, +/* 0000A500 */ 0x00, 0x66, 0x00, 0x2A, 0x00, 0xD8, 0x00, 0x5A, 0x00, 0x57, 0x00, 0x00, 0xBF, 0xFC, 0x2A, 0x04, /* 0000A510 */ 0x0F, 0xFC, 0x07, 0xFE, 0xCD, 0x02, 0xFE, 0x15, 0x03, 0x10, 0xFF, 0xA1, 0x41, 0x61, 0x00, 0x2E, /* 0000A520 */ 0x00, 0xFE, 0xEB, 0x96, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFE, 0xEB, 0x96, 0xFE, 0x64, -/* 0000A530 */ 0x05, 0xFE, 0x64, 0x05, 0x0A, 0x08, 0x0F, 0x05, 0x67, 0x5E, 0x04, 0x02, 0x09, 0x09, 0x0B, 0x08, +/* 0000A530 */ 0x05, 0xFE, 0x64, 0x05, 0x0B, 0x0A, 0x08, 0x0F, 0x05, 0x67, 0x5E, 0x04, 0x02, 0x09, 0x09, 0x08, /* 0000A540 */ 0x07, 0x08, 0x08, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000A550 */ 0xFF, 0xFF, 0x0E, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000A560 */ 0xFF, 0xFF, 0x00, 0x00, 0x03, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, @@ -4097,11 +4097,11 @@ namespace Js /* 0000A780 */ 0x0C, 0x00, 0x1B, 0x00, 0x09, 0x00, 0x2F, 0x00, 0x18, 0x00, 0x44, 0x00, 0x20, 0x00, 0x59, 0x00, /* 0000A790 */ 0x26, 0x00, 0x3A, 0x00, 0x22, 0x00, 0x39, 0x00, 0x25, 0x00, 0x9F, 0x00, 0x26, 0x00, 0x49, 0x00, /* 0000A7A0 */ 0x0A, 0x00, 0x3B, 0x00, 0x25, 0x00, 0x40, 0x00, 0x26, 0x00, 0x5B, 0x00, 0x23, 0x00, 0x4F, 0x00, -/* 0000A7B0 */ 0x42, 0x00, 0x66, 0x00, 0x0B, 0x00, 0x3F, 0x00, 0x08, 0x00, 0x1D, 0x00, 0x00, 0x3F, 0x7E, 0x15, -/* 0000A7C0 */ 0x0A, 0x1F, 0xFC, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x07, 0x03, 0x62, 0xFF, 0xA0, 0x41, +/* 0000A7B0 */ 0x42, 0x00, 0x66, 0x00, 0x0B, 0x00, 0x3F, 0x00, 0x08, 0x00, 0x1D, 0x00, 0x00, 0xBF, 0xFC, 0x2A, +/* 0000A7C0 */ 0x04, 0x1F, 0xFC, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x07, 0x03, 0x62, 0xFF, 0xA0, 0x41, /* 0000A7D0 */ 0x71, 0x00, 0x2D, 0x00, 0xFE, 0x36, 0x94, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFE, 0x36, -/* 0000A7E0 */ 0x94, 0xFE, 0x73, 0x02, 0xFE, 0x73, 0x02, 0x09, 0x09, 0x0E, 0x07, 0x40, 0x3C, 0x03, 0x02, 0x06, -/* 0000A7F0 */ 0x06, 0x0B, 0x03, 0x03, 0x03, 0x03, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, +/* 0000A7E0 */ 0x94, 0xFE, 0x73, 0x02, 0xFE, 0x73, 0x02, 0x0B, 0x09, 0x09, 0x0E, 0x07, 0x40, 0x3C, 0x03, 0x02, +/* 0000A7F0 */ 0x06, 0x06, 0x03, 0x03, 0x03, 0x03, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000A800 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0D, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000A810 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x03, 0x02, 0xFE, 0x10, 0x03, 0x02, 0xFE, 0x4E, /* 0000A820 */ 0x03, 0x02, 0xFE, 0x4D, 0x03, 0x04, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, @@ -4126,11 +4126,11 @@ namespace Js /* 0000A950 */ 0xEE, 0x02, 0x00, 0x0E, 0x04, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x00, 0x00, 0xFE, /* 0000A960 */ 0x3C, 0x02, 0xFE, 0x31, 0x02, 0xFE, 0x02, 0x02, 0x00, 0xFE, 0x59, 0x94, 0x07, 0x07, 0x00, 0x00, /* 0000A970 */ 0x00, 0x23, 0x00, 0x58, 0x00, 0x2A, 0x00, 0x7B, 0x00, 0x25, 0x00, 0x3F, 0x00, 0x2F, 0x00, 0x58, -/* 0000A980 */ 0x00, 0x26, 0x00, 0x8F, 0x00, 0x5A, 0x00, 0x56, 0x00, 0x00, 0x3F, 0x7E, 0x21, 0x0B, 0x0F, 0xFD, +/* 0000A980 */ 0x00, 0x26, 0x00, 0x8F, 0x00, 0x5A, 0x00, 0x56, 0x00, 0x00, 0xBF, 0xFC, 0x42, 0x06, 0x0F, 0xFD, /* 0000A990 */ 0x07, 0xFE, 0x5D, 0x03, 0xFE, 0x94, 0x02, 0x0C, 0xFF, 0xB3, 0x41, 0x41, 0x00, 0x2C, 0x00, 0xFE, /* 0000A9A0 */ 0x9C, 0x7A, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x04, 0x04, 0xFE, 0x9C, 0x7A, 0xFE, 0x34, 0x19, 0xFE, -/* 0000A9B0 */ 0x34, 0x19, 0x18, 0x23, 0x37, 0x07, 0xFE, 0x83, 0x01, 0xFE, 0x5E, 0x01, 0x03, 0x04, 0x22, 0x10, -/* 0000A9C0 */ 0x45, 0x1E, 0x1E, 0x1E, 0x1E, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, +/* 0000A9B0 */ 0x34, 0x19, 0x45, 0x18, 0x23, 0x37, 0x07, 0xFE, 0x83, 0x01, 0xFE, 0x5E, 0x01, 0x03, 0x04, 0x22, +/* 0000A9C0 */ 0x10, 0x1E, 0x1E, 0x1E, 0x1E, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000A9D0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x36, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x37, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000A9E0 */ 0xFF, 0x00, 0x00, 0x02, 0xFE, 0x19, 0x03, 0x02, 0xFE, 0x32, 0x03, 0x04, 0x02, 0xFE, 0xCD, 0x02, /* 0000A9F0 */ 0x08, 0x02, 0xFE, 0x14, 0x03, 0x03, 0x02, 0xFE, 0x21, 0x03, 0x02, 0xFE, 0x0F, 0x03, 0x02, 0xFE, @@ -4268,7 +4268,7 @@ namespace Js /* 0000B230 */ 0x04, 0x00, 0x4F, 0x00, 0x04, 0x00, 0x51, 0x00, 0x0A, 0x00, 0x43, 0x00, 0x04, 0x00, 0x59, 0x00, /* 0000B240 */ 0x04, 0x00, 0x68, 0x00, 0x04, 0x00, 0x41, 0x00, 0x07, 0x00, 0xAD, 0x00, 0x25, 0x00, 0x4E, 0x00, /* 0000B250 */ 0x01, 0x00, 0x21, 0x00, 0x1B, 0x00, 0x6F, 0x01, 0x1D, 0x00, 0x4D, 0x00, 0x35, 0x00, 0x7F, 0x00, -/* 0000B260 */ 0x06, 0x00, 0x3C, 0x00, 0x00, 0x3F, 0x7E, 0x11, 0x02, 0x4F, 0xFD, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, +/* 0000B260 */ 0x06, 0x00, 0x3C, 0x00, 0x00, 0x3F, 0xFC, 0x22, 0x04, 0x4F, 0xFD, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000B270 */ 0xFF, 0xFE, 0xAB, 0x01, 0x14, 0xFF, 0xA0, 0x41, 0x51, 0x00, 0x23, 0x00, 0xFE, 0xA2, 0x49, 0x06, /* 0000B280 */ 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFE, 0xA2, 0x49, 0xFE, 0x43, 0x30, 0xFE, 0x43, 0x30, /* 0000B290 */ 0x0B, 0x17, 0x1B, 0x09, 0x99, 0x99, 0x01, 0x0C, 0x09, 0x07, 0x07, 0x07, 0x07, 0x05, 0x02, 0xFF, @@ -4351,10 +4351,10 @@ namespace Js /* 0000B760 */ 0x61, 0x00, 0x92, 0x00, 0x3E, 0x00, 0x47, 0x00, 0x5C, 0x00, 0x98, 0x00, 0x68, 0x00, 0xBD, 0x05, /* 0000B770 */ 0x7F, 0x00, 0x12, 0x03, 0x0F, 0x00, 0x80, 0x00, 0x07, 0x00, 0x17, 0x00, 0x00, 0x7F, 0xC1, 0x00, /* 0000B780 */ 0x00, 0x5E, 0xBF, 0x00, 0x00, 0xAD, 0xBC, 0x00, 0x00, 0xC3, 0xBA, 0x00, 0x00, 0xD5, 0xB8, 0x00, -/* 0000B790 */ 0x00, 0x95, 0xB7, 0x00, 0x00, 0x3F, 0x7E, 0x11, 0x0A, 0x0F, 0xFC, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, +/* 0000B790 */ 0x00, 0x95, 0xB7, 0x00, 0x00, 0xBF, 0xFC, 0x22, 0x04, 0x0F, 0xFC, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000B7A0 */ 0xFF, 0xFE, 0x7A, 0x02, 0x3A, 0xFF, 0xA0, 0x41, 0x51, 0x00, 0x2A, 0x00, 0xFE, 0xAC, 0x76, 0xFF, -/* 0000B7B0 */ 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFE, 0xAC, 0x76, 0xFE, 0x50, 0x02, 0xFE, 0x50, 0x02, 0x05, -/* 0000B7C0 */ 0x05, 0x08, 0x04, 0x25, 0x24, 0x03, 0x03, 0x01, 0x09, 0x04, 0x04, 0x04, 0x04, 0xFF, 0xFF, 0xFF, +/* 0000B7B0 */ 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFE, 0xAC, 0x76, 0xFE, 0x50, 0x02, 0xFE, 0x50, 0x02, 0x09, +/* 0000B7C0 */ 0x05, 0x05, 0x08, 0x04, 0x25, 0x24, 0x03, 0x03, 0x01, 0x04, 0x04, 0x04, 0x04, 0xFF, 0xFF, 0xFF, /* 0000B7D0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0xFF, 0xFF, 0xFF, /* 0000B7E0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x02, 0xFE, /* 0000B7F0 */ 0x19, 0x03, 0x02, 0xFE, 0x4B, 0x03, 0x02, 0xFE, 0xC9, 0x02, 0xAA, 0x5B, 0x05, 0xB4, 0x05, 0x05, @@ -4371,10 +4371,10 @@ namespace Js /* 0000B8A0 */ 0x00, 0xA8, 0x00, 0x24, 0x00, 0x00, 0x00, 0xFE, 0x3C, 0x02, 0xFE, 0x08, 0x02, 0xFE, 0x4B, 0x02, /* 0000B8B0 */ 0xFE, 0x4C, 0x02, 0x00, 0xFE, 0xD3, 0x76, 0x07, 0x05, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x3D, 0x00, /* 0000B8C0 */ 0x2A, 0x00, 0x80, 0x00, 0x26, 0x00, 0x4C, 0x00, 0x15, 0x00, 0x66, 0x00, 0x2A, 0x00, 0x80, 0x00, -/* 0000B8D0 */ 0x09, 0x00, 0x39, 0x00, 0x00, 0x3F, 0x7E, 0x11, 0x0A, 0x4F, 0xFC, 0x07, 0xFE, 0x2D, 0x03, 0xFE, +/* 0000B8D0 */ 0x09, 0x00, 0x39, 0x00, 0x00, 0xBF, 0xFC, 0x22, 0x04, 0x4F, 0xFC, 0x07, 0xFE, 0x2D, 0x03, 0xFE, /* 0000B8E0 */ 0x64, 0x02, 0x1B, 0xFF, 0xA0, 0x41, 0x43, 0x00, 0x29, 0x00, 0xFE, 0xD8, 0x70, 0xFF, 0x00, 0x10, -/* 0000B8F0 */ 0x01, 0x00, 0x01, 0x01, 0xFE, 0xD8, 0x70, 0xFE, 0x03, 0x05, 0xFE, 0x03, 0x05, 0x05, 0x0D, 0x10, -/* 0000B900 */ 0x04, 0x33, 0x32, 0x03, 0x03, 0x01, 0x09, 0x11, 0x11, 0x11, 0x11, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, +/* 0000B8F0 */ 0x01, 0x00, 0x01, 0x01, 0xFE, 0xD8, 0x70, 0xFE, 0x03, 0x05, 0xFE, 0x03, 0x05, 0x09, 0x05, 0x0D, +/* 0000B900 */ 0x10, 0x04, 0x33, 0x32, 0x03, 0x03, 0x01, 0x11, 0x11, 0x11, 0x11, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000B910 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000B920 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x02, 0xFE, 0x19, /* 0000B930 */ 0x03, 0x02, 0xFE, 0x4C, 0x03, 0x02, 0xFE, 0xC9, 0x02, 0x02, 0xFE, 0xFD, 0x02, 0x02, 0xFE, 0x33, @@ -4402,10 +4402,10 @@ namespace Js /* 0000BA90 */ 0x4A, 0x02, 0xFE, 0x45, 0x03, 0xFE, 0x49, 0x02, 0xFE, 0xF6, 0x01, 0xFE, 0x48, 0x02, 0xFE, 0x3C, /* 0000BAA0 */ 0x03, 0x00, 0xFE, 0x0E, 0x71, 0x07, 0x05, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x3D, 0x00, 0x2A, 0x00, /* 0000BAB0 */ 0x86, 0x00, 0x26, 0x00, 0x4C, 0x00, 0x15, 0x00, 0x66, 0x00, 0x2A, 0x00, 0x88, 0x00, 0x4A, 0x00, -/* 0000BAC0 */ 0xCF, 0x02, 0x00, 0x3F, 0x7E, 0x11, 0x0A, 0x0F, 0xFC, 0x07, 0xFE, 0x2E, 0x03, 0xFE, 0x4C, 0x02, +/* 0000BAC0 */ 0xCF, 0x02, 0x00, 0xBF, 0xFC, 0x22, 0x04, 0x0F, 0xFC, 0x07, 0xFE, 0x2E, 0x03, 0xFE, 0x4C, 0x02, /* 0000BAD0 */ 0x10, 0xFF, 0xA3, 0x41, 0x41, 0x00, 0x28, 0x00, 0xFE, 0x63, 0x6B, 0xFF, 0x00, 0x10, 0x01, 0x00, -/* 0000BAE0 */ 0x03, 0x03, 0xFE, 0x63, 0x6B, 0xFE, 0x01, 0x03, 0xFE, 0x01, 0x03, 0x09, 0x06, 0x0B, 0x0B, 0x44, -/* 0000BAF0 */ 0x41, 0x03, 0x07, 0x03, 0x09, 0x08, 0x08, 0x08, 0x08, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, +/* 0000BAE0 */ 0x03, 0x03, 0xFE, 0x63, 0x6B, 0xFE, 0x01, 0x03, 0xFE, 0x01, 0x03, 0x09, 0x09, 0x06, 0x0B, 0x0B, +/* 0000BAF0 */ 0x44, 0x41, 0x03, 0x07, 0x03, 0x08, 0x08, 0x08, 0x08, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000BB00 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0A, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000BB10 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x02, 0xFE, 0x19, 0x03, 0x02, 0xFE, /* 0000BB20 */ 0x4B, 0x03, 0x02, 0xFE, 0xC9, 0x02, 0x04, 0xFE, 0x3F, 0x01, 0x5B, 0x08, 0xB4, 0x08, 0x08, 0x2C, @@ -4432,10 +4432,10 @@ namespace Js /* 0000BC70 */ 0x02, 0xFE, 0x4B, 0x02, 0xFE, 0xFD, 0x01, 0xFE, 0x44, 0x02, 0xFE, 0x46, 0x02, 0xFE, 0x47, 0x02, /* 0000BC80 */ 0xFE, 0x49, 0x02, 0x00, 0xFE, 0x91, 0x6B, 0x09, 0x05, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x39, 0x00, /* 0000BC90 */ 0x2A, 0x00, 0x78, 0x00, 0x26, 0x00, 0x48, 0x00, 0x15, 0x00, 0x62, 0x00, 0x2A, 0x00, 0x78, 0x00, -/* 0000BCA0 */ 0x1E, 0x00, 0x24, 0x00, 0x1E, 0x00, 0x26, 0x00, 0x62, 0x00, 0xB5, 0x00, 0x00, 0x3F, 0x7E, 0x15, -/* 0000BCB0 */ 0x0A, 0x0F, 0xFC, 0x07, 0xFE, 0xC9, 0x02, 0xFE, 0x28, 0x02, 0x10, 0xFF, 0xA1, 0x41, 0x61, 0x00, +/* 0000BCA0 */ 0x1E, 0x00, 0x24, 0x00, 0x1E, 0x00, 0x26, 0x00, 0x62, 0x00, 0xB5, 0x00, 0x00, 0xBF, 0xFC, 0x2A, +/* 0000BCB0 */ 0x04, 0x0F, 0xFC, 0x07, 0xFE, 0xC9, 0x02, 0xFE, 0x28, 0x02, 0x10, 0xFF, 0xA1, 0x41, 0x61, 0x00, /* 0000BCC0 */ 0x27, 0x00, 0xFE, 0x3A, 0x65, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFE, 0x3A, 0x65, 0xFE, -/* 0000BCD0 */ 0x84, 0x05, 0xFE, 0x84, 0x05, 0x0A, 0x08, 0x0F, 0x05, 0x67, 0x5E, 0x03, 0x02, 0x09, 0x09, 0x0B, +/* 0000BCD0 */ 0x84, 0x05, 0xFE, 0x84, 0x05, 0x0B, 0x0A, 0x08, 0x0F, 0x05, 0x67, 0x5E, 0x03, 0x02, 0x09, 0x09, /* 0000BCE0 */ 0x08, 0x07, 0x08, 0x08, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000BCF0 */ 0xFF, 0xFF, 0xFF, 0x0E, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000BD00 */ 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x03, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, @@ -4475,11 +4475,11 @@ namespace Js /* 0000BF20 */ 0x00, 0x0C, 0x00, 0x1B, 0x00, 0x09, 0x00, 0x2F, 0x00, 0x18, 0x00, 0x44, 0x00, 0x20, 0x00, 0x55, /* 0000BF30 */ 0x00, 0x26, 0x00, 0x38, 0x00, 0x22, 0x00, 0x39, 0x00, 0x25, 0x00, 0x9B, 0x00, 0x26, 0x00, 0x49, /* 0000BF40 */ 0x00, 0x0A, 0x00, 0x3B, 0x00, 0x25, 0x00, 0x40, 0x00, 0x26, 0x00, 0x5B, 0x00, 0x23, 0x00, 0x79, -/* 0000BF50 */ 0x00, 0x42, 0x00, 0x69, 0x00, 0x0B, 0x00, 0x40, 0x00, 0x08, 0x00, 0x1D, 0x00, 0x00, 0x3F, 0x7E, -/* 0000BF60 */ 0x15, 0x0A, 0x0F, 0xFC, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x16, 0x02, 0x61, 0xFF, 0xA0, +/* 0000BF50 */ 0x00, 0x42, 0x00, 0x69, 0x00, 0x0B, 0x00, 0x40, 0x00, 0x08, 0x00, 0x1D, 0x00, 0x00, 0xBF, 0xFC, +/* 0000BF60 */ 0x2A, 0x04, 0x0F, 0xFC, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x16, 0x02, 0x61, 0xFF, 0xA0, /* 0000BF70 */ 0x41, 0x71, 0x00, 0x26, 0x00, 0xFE, 0x19, 0x61, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFE, -/* 0000BF80 */ 0x19, 0x61, 0xFE, 0xDD, 0x03, 0xFE, 0xDD, 0x03, 0x0A, 0x08, 0x0E, 0x0B, 0x4F, 0x4B, 0x02, 0x03, -/* 0000BF90 */ 0x08, 0x05, 0x0B, 0x07, 0x07, 0x07, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, +/* 0000BF80 */ 0x19, 0x61, 0xFE, 0xDD, 0x03, 0xFE, 0xDD, 0x03, 0x0B, 0x0A, 0x08, 0x0E, 0x0B, 0x4F, 0x4B, 0x02, +/* 0000BF90 */ 0x03, 0x08, 0x05, 0x07, 0x07, 0x07, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000BFA0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0D, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000BFB0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x02, 0xFE, /* 0000BFC0 */ 0x28, 0x03, 0x04, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0xFE, 0x66, 0x01, @@ -4510,10 +4510,10 @@ namespace Js /* 0000C150 */ 0x61, 0x0B, 0x09, 0x00, 0x00, 0x00, 0x09, 0x00, 0x2E, 0x00, 0x12, 0x00, 0x44, 0x00, 0x28, 0x00, /* 0000C160 */ 0x77, 0x00, 0x08, 0x00, 0x2E, 0x00, 0x20, 0x00, 0xF1, 0x00, 0x1E, 0x00, 0x31, 0x00, 0x1E, 0x00, /* 0000C170 */ 0x2E, 0x00, 0x23, 0x00, 0x46, 0x00, 0x2F, 0x00, 0x52, 0x00, 0x62, 0x00, 0xBA, 0x00, 0x00, 0xBF, -/* 0000C180 */ 0x7E, 0x25, 0x0B, 0x0F, 0xFD, 0x0F, 0xFE, 0x31, 0x03, 0xFE, 0xAF, 0x01, 0x0C, 0xFF, 0xB3, 0x41, +/* 0000C180 */ 0xFD, 0x4A, 0x06, 0x0F, 0xFD, 0x0F, 0xFE, 0x31, 0x03, 0xFE, 0xAF, 0x01, 0x0C, 0xFF, 0xB3, 0x41, /* 0000C190 */ 0x41, 0x00, 0x24, 0x00, 0xFE, 0xFE, 0x49, 0x01, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x04, 0x04, 0xFE, -/* 0000C1A0 */ 0xFE, 0x49, 0xFE, 0xB6, 0x16, 0xFE, 0xB6, 0x16, 0x03, 0x15, 0x24, 0x35, 0x08, 0xFE, 0x0B, 0x01, -/* 0000C1B0 */ 0xFA, 0x02, 0x02, 0x05, 0x12, 0x0F, 0x44, 0x14, 0x14, 0x14, 0x14, 0x01, 0x32, 0xFF, 0xFF, 0xFF, +/* 0000C1A0 */ 0xFE, 0x49, 0xFE, 0xB6, 0x16, 0xFE, 0xB6, 0x16, 0x44, 0x03, 0x15, 0x24, 0x35, 0x08, 0xFE, 0x0B, +/* 0000C1B0 */ 0x01, 0xFA, 0x02, 0x02, 0x05, 0x12, 0x0F, 0x14, 0x14, 0x14, 0x14, 0x01, 0x32, 0xFF, 0xFF, 0xFF, /* 0000C1C0 */ 0xFF, 0xFF, 0x33, 0x34, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x35, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, /* 0000C1D0 */ 0x00, 0x02, 0xFE, 0x19, 0x03, 0x02, 0xFE, 0x32, 0x03, 0x04, 0x02, 0xFE, 0xC9, 0x02, 0x08, 0x02, /* 0000C1E0 */ 0xFE, 0x14, 0x03, 0x03, 0x02, 0xFE, 0x21, 0x03, 0x02, 0xFE, 0x0F, 0x03, 0x02, 0xFE, 0x06, 0x03, @@ -4614,10 +4614,10 @@ namespace Js /* 0000C7D0 */ 0x1B, 0x00, 0x06, 0x00, 0x56, 0x00, 0x04, 0x00, 0x2F, 0x00, 0x08, 0x00, 0x4E, 0x00, 0x04, 0x00, /* 0000C7E0 */ 0x49, 0x00, 0x04, 0x00, 0x2B, 0x00, 0x04, 0x00, 0x37, 0x00, 0x04, 0x00, 0x43, 0x00, 0x0C, 0x00, /* 0000C7F0 */ 0x33, 0x00, 0x0C, 0x00, 0x2F, 0x00, 0x0C, 0x00, 0x33, 0x00, 0x06, 0x00, 0x34, 0x00, 0x00, 0x03, -/* 0000C800 */ 0xC8, 0x00, 0x00, 0x3F, 0x7E, 0x35, 0x0A, 0xCF, 0xFC, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, +/* 0000C800 */ 0xC8, 0x00, 0x00, 0xBF, 0xFC, 0x6A, 0x04, 0xCF, 0xFC, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, /* 0000C810 */ 0xD1, 0x01, 0x57, 0xFF, 0xA2, 0x41, 0x51, 0x00, 0x25, 0x00, 0xFE, 0xE3, 0x51, 0xFF, 0x00, 0x10, -/* 0000C820 */ 0x01, 0x00, 0x02, 0x02, 0xFE, 0xE3, 0x51, 0xFE, 0xDB, 0x04, 0xFE, 0xDB, 0x04, 0x09, 0x15, 0x1A, -/* 0000C830 */ 0x0B, 0x5E, 0x59, 0x03, 0x03, 0x05, 0x01, 0x08, 0x41, 0x03, 0x03, 0x03, 0x03, 0x01, 0x01, 0xFF, +/* 0000C820 */ 0x01, 0x00, 0x02, 0x02, 0xFE, 0xE3, 0x51, 0xFE, 0xDB, 0x04, 0xFE, 0xDB, 0x04, 0x41, 0x09, 0x15, +/* 0000C830 */ 0x1A, 0x0B, 0x5E, 0x59, 0x03, 0x03, 0x05, 0x01, 0x08, 0x03, 0x03, 0x03, 0x03, 0x01, 0x01, 0xFF, /* 0000C840 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x19, 0xFF, /* 0000C850 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, /* 0000C860 */ 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x02, 0xFE, 0xC2, 0x02, 0x02, 0xFE, @@ -4658,10 +4658,10 @@ namespace Js /* 0000CA90 */ 0x10, 0x52, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x2C, 0x00, 0x83, 0x00, 0x09, 0x00, 0x2D, 0x00, 0x22, /* 0000CAA0 */ 0x00, 0x4D, 0x00, 0x1E, 0x00, 0x4C, 0x00, 0x7C, 0x00, 0xA0, 0x00, 0x1E, 0x00, 0x4A, 0x00, 0x0A, /* 0000CAB0 */ 0x00, 0x3C, 0x00, 0x5E, 0x00, 0xAB, 0x00, 0x0D, 0x00, 0x4F, 0x00, 0x32, 0x00, 0x01, 0x01, 0x0C, -/* 0000CAC0 */ 0x00, 0x43, 0x00, 0x00, 0x3F, 0x7E, 0x15, 0x0A, 0x8F, 0xFC, 0x07, 0xFE, 0xF9, 0x02, 0xFE, 0x9A, +/* 0000CAC0 */ 0x00, 0x43, 0x00, 0x00, 0xBF, 0xFC, 0x2A, 0x04, 0x8F, 0xFC, 0x07, 0xFE, 0xF9, 0x02, 0xFE, 0x9A, /* 0000CAD0 */ 0x01, 0x1E, 0xFF, 0xA0, 0x41, 0x41, 0x00, 0x22, 0x00, 0xFE, 0x41, 0x47, 0xFF, 0x00, 0x10, 0x01, -/* 0000CAE0 */ 0x00, 0x01, 0x01, 0xFE, 0x41, 0x47, 0xFE, 0x12, 0x02, 0xFE, 0x12, 0x02, 0x0A, 0x05, 0x0B, 0x06, -/* 0000CAF0 */ 0x2A, 0x23, 0x01, 0x04, 0x02, 0x02, 0x01, 0x02, 0x02, 0x02, 0x02, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, +/* 0000CAE0 */ 0x00, 0x01, 0x01, 0xFE, 0x41, 0x47, 0xFE, 0x12, 0x02, 0xFE, 0x12, 0x02, 0x01, 0x0A, 0x05, 0x0B, +/* 0000CAF0 */ 0x06, 0x2A, 0x23, 0x01, 0x04, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000CB00 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0A, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000CB10 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x01, 0x01, 0x00, /* 0000CB20 */ 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x02, 0xFE, 0x25, 0x03, 0xB5, 0x8F, 0x01, 0x00, 0x00, @@ -4680,7 +4680,7 @@ namespace Js /* 0000CBF0 */ 0x58, 0x47, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x4C, 0x00, 0x60, 0x00, 0x09, 0x00, 0x20, 0x00, 0x09, /* 0000CC00 */ 0x00, 0x23, 0x00, 0x15, 0x00, 0x51, 0x00, 0x14, 0x00, 0x41, 0x00, 0x06, 0x00, 0x1C, 0x00, 0x09, /* 0000CC10 */ 0x00, 0x33, 0x00, 0x0A, 0x00, 0x29, 0x00, 0x0B, 0x00, 0x39, 0x00, 0x08, 0x00, 0x14, 0x00, 0x00, -/* 0000CC20 */ 0xBF, 0x7E, 0x11, 0x02, 0x00, 0xFC, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x88, 0x01, 0x31, +/* 0000CC20 */ 0x3F, 0xFD, 0x22, 0x04, 0x00, 0xFC, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x88, 0x01, 0x31, /* 0000CC30 */ 0xFF, 0xA0, 0x41, 0x51, 0x00, 0x1F, 0x00, 0xFE, 0x63, 0x44, 0x01, 0xFF, 0x00, 0x10, 0x01, 0x00, /* 0000CC40 */ 0x01, 0x01, 0xFE, 0x63, 0x44, 0xFE, 0xB8, 0x02, 0xFE, 0xB8, 0x02, 0x01, 0x06, 0x04, 0x07, 0x08, /* 0000CC50 */ 0x1C, 0x1C, 0x01, 0x03, 0x06, 0x04, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x05, 0x06, 0xFF, 0xFF, 0xFF, @@ -4696,10 +4696,10 @@ namespace Js /* 0000CCF0 */ 0x07, 0x01, 0x00, 0x93, 0x02, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, /* 0000CD00 */ 0x24, 0x00, 0x00, 0x00, 0xFE, 0x23, 0x03, 0x00, 0xFE, 0x7A, 0x44, 0x04, 0x00, 0x00, 0x00, 0x00, /* 0000CD10 */ 0x28, 0x00, 0x30, 0x00, 0x5A, 0x00, 0x5A, 0x02, 0x0D, 0x00, 0x16, 0x00, 0x00, 0x21, 0xCD, 0x00, -/* 0000CD20 */ 0x00, 0xBF, 0x7E, 0x1D, 0x0A, 0x00, 0xFC, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x8A, 0x01, +/* 0000CD20 */ 0x00, 0xBF, 0xFD, 0x3A, 0x04, 0x00, 0xFC, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x8A, 0x01, /* 0000CD30 */ 0x6B, 0xFF, 0xA2, 0x41, 0x51, 0x00, 0x20, 0x00, 0xFE, 0x0D, 0x45, 0x01, 0xFF, 0x00, 0x10, 0x01, -/* 0000CD40 */ 0x00, 0x02, 0x02, 0xFE, 0x0D, 0x45, 0xFE, 0xEB, 0x01, 0xFE, 0xEB, 0x01, 0x02, 0x07, 0x04, 0x08, -/* 0000CD50 */ 0x08, 0x20, 0x20, 0x02, 0x01, 0x01, 0x03, 0x08, 0x40, 0x05, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x06, +/* 0000CD40 */ 0x00, 0x02, 0x02, 0xFE, 0x0D, 0x45, 0xFE, 0xEB, 0x01, 0xFE, 0xEB, 0x01, 0x40, 0x02, 0x07, 0x04, +/* 0000CD50 */ 0x08, 0x08, 0x20, 0x20, 0x02, 0x01, 0x01, 0x03, 0x08, 0x05, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x06, /* 0000CD60 */ 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000CD70 */ 0x00, 0x00, 0x03, 0x04, 0xB4, 0x8F, 0x02, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x00, 0x08, 0x00, /* 0000CD80 */ 0x00, 0x98, 0x08, 0x08, 0x04, 0x00, 0x00, 0x96, 0x02, 0x00, 0x00, 0x00, 0x08, 0x8F, 0x02, 0x00, @@ -4714,10 +4714,10 @@ namespace Js /* 0000CE10 */ 0x02, 0x00, 0x00, 0x00, 0x08, 0x06, 0x00, 0x93, 0x03, 0x00, 0x00, 0x00, 0x09, 0x07, 0x00, 0x9D, /* 0000CE20 */ 0x09, 0x08, 0x04, 0x00, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x00, 0x00, 0xFE, 0x7E, 0x01, 0xFE, 0x24, /* 0000CE30 */ 0x03, 0x00, 0xFE, 0x2E, 0x45, 0x05, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x43, 0x00, 0x28, 0x00, -/* 0000CE40 */ 0x37, 0x00, 0x56, 0x00, 0x28, 0x01, 0x1C, 0x00, 0x27, 0x00, 0x00, 0x4F, 0xCE, 0x00, 0x00, 0x3F, -/* 0000CE50 */ 0x6E, 0x0D, 0x0A, 0x00, 0xFC, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x8E, 0x01, 0x56, 0xFF, +/* 0000CE40 */ 0x37, 0x00, 0x56, 0x00, 0x28, 0x01, 0x1C, 0x00, 0x27, 0x00, 0x00, 0x4F, 0xCE, 0x00, 0x00, 0xBF, +/* 0000CE50 */ 0xDC, 0x1A, 0x04, 0x00, 0xFC, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x8E, 0x01, 0x56, 0xFF, /* 0000CE60 */ 0xA2, 0x41, 0x51, 0x00, 0x21, 0x00, 0xFE, 0xF2, 0x45, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, -/* 0000CE70 */ 0xFE, 0xF2, 0x45, 0xCC, 0xCC, 0x04, 0x03, 0x06, 0x0A, 0x09, 0x03, 0x01, 0x01, 0x02, 0x41, 0xFF, +/* 0000CE70 */ 0xFE, 0xF2, 0x45, 0xCC, 0xCC, 0x41, 0x04, 0x03, 0x06, 0x0A, 0x09, 0x03, 0x01, 0x01, 0x02, 0xFF, /* 0000CE80 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x05, 0xFF, /* 0000CE90 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, /* 0000CEA0 */ 0x02, 0xFE, 0xC2, 0x02, 0x33, 0x8F, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x06, 0x00, @@ -4725,10 +4725,10 @@ namespace Js /* 0000CEC0 */ 0x12, 0x00, 0x8F, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x06, 0x01, 0x00, 0x9D, 0x03, /* 0000CED0 */ 0x06, 0x04, 0x00, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x19, 0x46, 0x04, 0x00, /* 0000CEE0 */ 0x00, 0x00, 0x00, 0x15, 0x00, 0x34, 0x00, 0x08, 0x00, 0x2E, 0x00, 0x14, 0x00, 0x42, 0x00, 0x00, -/* 0000CEF0 */ 0x3F, 0x7E, 0x15, 0x0A, 0x0F, 0xFC, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x67, 0x01, 0x8D, +/* 0000CEF0 */ 0xBF, 0xFC, 0x2A, 0x04, 0x0F, 0xFC, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x67, 0x01, 0x8D, /* 0000CF00 */ 0xFF, 0xA2, 0x41, 0x31, 0x00, 0x1E, 0x00, 0xFE, 0xFA, 0x3B, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, -/* 0000CF10 */ 0x02, 0xFE, 0xFA, 0x3B, 0xD0, 0xD0, 0x07, 0x06, 0x0B, 0x06, 0x19, 0x16, 0x01, 0x01, 0x01, 0x02, -/* 0000CF20 */ 0x0B, 0x01, 0x01, 0x01, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, +/* 0000CF10 */ 0x02, 0xFE, 0xFA, 0x3B, 0xD0, 0xD0, 0x0B, 0x07, 0x06, 0x0B, 0x06, 0x19, 0x16, 0x01, 0x01, 0x01, +/* 0000CF20 */ 0x02, 0x01, 0x01, 0x01, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000CF30 */ 0xFF, 0xFF, 0xFF, 0xFF, 0x0A, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000CF40 */ 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x03, 0x01, 0x02, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, /* 0000CF50 */ 0x00, 0x04, 0x5E, 0x5B, 0x09, 0xB4, 0x09, 0x09, 0xAE, 0x07, 0x62, 0x0B, 0x07, 0x00, 0x12, 0x03, @@ -4738,10 +4738,10 @@ namespace Js /* 0000CF90 */ 0x01, 0x00, 0x00, 0x00, 0x35, 0x00, 0x00, 0x00, 0x0C, 0x01, 0x00, 0x5C, 0x02, 0x0C, 0x5C, 0x03, /* 0000CFA0 */ 0x06, 0x5C, 0x04, 0x08, 0xEE, 0x05, 0x00, 0x0B, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, /* 0000CFB0 */ 0x00, 0x00, 0x00, 0xF0, 0x00, 0xFE, 0x18, 0x3C, 0x03, 0x07, 0x00, 0x00, 0x00, 0x20, 0x00, 0x4A, -/* 0000CFC0 */ 0x00, 0x35, 0x00, 0x67, 0x00, 0x00, 0x3F, 0x7E, 0x15, 0x0A, 0x0F, 0xFC, 0x07, 0xFF, 0xFF, 0xFF, +/* 0000CFC0 */ 0x00, 0x35, 0x00, 0x67, 0x00, 0x00, 0xBF, 0xFC, 0x2A, 0x04, 0x0F, 0xFC, 0x07, 0xFF, 0xFF, 0xFF, /* 0000CFD0 */ 0xFF, 0xFF, 0xFE, 0x5B, 0x01, 0x89, 0xFF, 0xA2, 0x41, 0x31, 0x00, 0x1D, 0x00, 0xFE, 0x55, 0x38, -/* 0000CFE0 */ 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0x55, 0x38, 0xCE, 0xCE, 0x07, 0x06, 0x0B, 0x06, -/* 0000CFF0 */ 0x19, 0x16, 0x01, 0x01, 0x01, 0x02, 0x0B, 0x01, 0x01, 0x01, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, +/* 0000CFE0 */ 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0x55, 0x38, 0xCE, 0xCE, 0x0B, 0x07, 0x06, 0x0B, +/* 0000CFF0 */ 0x06, 0x19, 0x16, 0x01, 0x01, 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000D000 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0A, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000D010 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x03, 0x01, 0x02, 0x00, /* 0000D020 */ 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x04, 0x5E, 0x5B, 0x09, 0xB4, 0x09, 0x09, 0xAE, 0x07, @@ -4751,10 +4751,10 @@ namespace Js /* 0000D060 */ 0x00, 0x05, 0x5C, 0x01, 0x09, 0x8F, 0x01, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00, 0x0C, 0x01, /* 0000D070 */ 0x00, 0x5C, 0x02, 0x0C, 0x5C, 0x03, 0x06, 0x5C, 0x04, 0x08, 0xEE, 0x05, 0x00, 0x0B, 0x00, 0x00, /* 0000D080 */ 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x00, 0x00, 0xF0, 0x00, 0xFE, 0x73, 0x38, 0x03, 0x07, -/* 0000D090 */ 0x00, 0x00, 0x00, 0x20, 0x00, 0x4A, 0x00, 0x35, 0x00, 0x65, 0x00, 0x00, 0x3F, 0x7E, 0x15, 0x0A, +/* 0000D090 */ 0x00, 0x00, 0x00, 0x20, 0x00, 0x4A, 0x00, 0x35, 0x00, 0x65, 0x00, 0x00, 0xBF, 0xFC, 0x2A, 0x04, /* 0000D0A0 */ 0x0F, 0xFC, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x4F, 0x01, 0x81, 0xFF, 0xA2, 0x41, 0x31, /* 0000D0B0 */ 0x00, 0x1C, 0x00, 0xFE, 0xC0, 0x34, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0xC0, 0x34, -/* 0000D0C0 */ 0xCA, 0xCA, 0x07, 0x06, 0x0B, 0x06, 0x19, 0x16, 0x01, 0x01, 0x01, 0x02, 0x0B, 0x01, 0x01, 0x01, +/* 0000D0C0 */ 0xCA, 0xCA, 0x0B, 0x07, 0x06, 0x0B, 0x06, 0x19, 0x16, 0x01, 0x01, 0x01, 0x02, 0x01, 0x01, 0x01, /* 0000D0D0 */ 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000D0E0 */ 0x0A, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000D0F0 */ 0x00, 0x00, 0x03, 0x01, 0x02, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x04, 0x5E, 0x5B, @@ -4765,10 +4765,10 @@ namespace Js /* 0000D140 */ 0x31, 0x00, 0x00, 0x00, 0x0C, 0x01, 0x00, 0x5C, 0x02, 0x0C, 0x5C, 0x03, 0x06, 0x5C, 0x04, 0x08, /* 0000D150 */ 0xEE, 0x05, 0x00, 0x0B, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x00, 0x00, 0xF0, /* 0000D160 */ 0x00, 0xFE, 0xDE, 0x34, 0x03, 0x07, 0x00, 0x00, 0x00, 0x20, 0x00, 0x4A, 0x00, 0x35, 0x00, 0x61, -/* 0000D170 */ 0x00, 0x00, 0x3F, 0x7E, 0x11, 0x0A, 0x0F, 0xFC, 0x07, 0xFE, 0xB1, 0x02, 0xFE, 0x33, 0x01, 0x1D, +/* 0000D170 */ 0x00, 0x00, 0xBF, 0xFC, 0x22, 0x04, 0x0F, 0xFC, 0x07, 0xFE, 0xB1, 0x02, 0xFE, 0x33, 0x01, 0x1D, /* 0000D180 */ 0xFF, 0xA2, 0x41, 0x41, 0x00, 0x1B, 0x00, 0xFE, 0x5D, 0x2F, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, -/* 0000D190 */ 0x03, 0xFE, 0x5D, 0x2F, 0xFE, 0x7E, 0x03, 0xFE, 0x7E, 0x03, 0x08, 0x08, 0x0C, 0x0A, 0x51, 0x4E, -/* 0000D1A0 */ 0x01, 0x09, 0x07, 0x01, 0x05, 0x05, 0x05, 0x05, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, +/* 0000D190 */ 0x03, 0xFE, 0x5D, 0x2F, 0xFE, 0x7E, 0x03, 0xFE, 0x7E, 0x03, 0x01, 0x08, 0x08, 0x0C, 0x0A, 0x51, +/* 0000D1A0 */ 0x4E, 0x01, 0x09, 0x07, 0x05, 0x05, 0x05, 0x05, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000D1B0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0B, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000D1C0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x04, 0x02, 0xFE, 0x14, 0x03, 0x02, 0xFE, /* 0000D1D0 */ 0x06, 0x03, 0x02, 0xFE, 0x20, 0x03, 0x02, 0xFE, 0x21, 0x03, 0x02, 0xFE, 0x22, 0x03, 0xFE, 0x8C, @@ -4801,10 +4801,10 @@ namespace Js /* 0000D380 */ 0x9A, 0x2F, 0x0B, 0x02, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x36, 0x00, 0x0B, 0x00, 0x33, 0x00, 0x07, /* 0000D390 */ 0x00, 0x30, 0x00, 0x0B, 0x00, 0x37, 0x00, 0x26, 0x00, 0x39, 0x00, 0x10, 0x00, 0x4B, 0x00, 0x48, /* 0000D3A0 */ 0x00, 0x9B, 0x00, 0x13, 0x00, 0x4D, 0x00, 0x6E, 0x00, 0x95, 0x00, 0x4E, 0x00, 0x6F, 0x00, 0x00, -/* 0000D3B0 */ 0x3F, 0x7E, 0x11, 0x0A, 0x0F, 0xFC, 0x07, 0xFE, 0xF0, 0x02, 0xFE, 0x25, 0x01, 0x24, 0xFF, 0xA2, +/* 0000D3B0 */ 0xBF, 0xFC, 0x22, 0x04, 0x0F, 0xFC, 0x07, 0xFE, 0xF0, 0x02, 0xFE, 0x25, 0x01, 0x24, 0xFF, 0xA2, /* 0000D3C0 */ 0x41, 0x41, 0x00, 0x1A, 0x00, 0xFE, 0x60, 0x2D, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x05, 0x05, 0xFE, -/* 0000D3D0 */ 0x60, 0x2D, 0xFE, 0xB2, 0x01, 0xFE, 0xB2, 0x01, 0x08, 0x05, 0x0B, 0x04, 0x28, 0x27, 0x01, 0x04, -/* 0000D3E0 */ 0x02, 0x01, 0x03, 0x03, 0x03, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, +/* 0000D3D0 */ 0x60, 0x2D, 0xFE, 0xB2, 0x01, 0xFE, 0xB2, 0x01, 0x01, 0x08, 0x05, 0x0B, 0x04, 0x28, 0x27, 0x01, +/* 0000D3E0 */ 0x04, 0x02, 0x03, 0x03, 0x03, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000D3F0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0A, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000D400 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x03, 0x02, 0xFE, 0xAD, 0x02, 0x04, 0xB9, 0x14, 0x0D, /* 0000D410 */ 0x00, 0x05, 0x02, 0x09, 0x00, 0x00, 0xA8, 0x0B, 0x14, 0x03, 0x00, 0x05, 0x0B, 0x09, 0x23, 0x00, @@ -4821,7 +4821,7 @@ namespace Js /* 0000D4C0 */ 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x00, 0x00, 0xFE, 0x2D, 0x02, 0xFE, 0x08, 0x02, 0xFE, /* 0000D4D0 */ 0x36, 0x02, 0x00, 0xFE, 0x9B, 0x2D, 0x07, 0x00, 0x00, 0x00, 0x00, 0x12, 0x00, 0x38, 0x00, 0x23, /* 0000D4E0 */ 0x00, 0x43, 0x00, 0x26, 0x00, 0x39, 0x00, 0x16, 0x00, 0x4D, 0x00, 0x23, 0x00, 0x43, 0x00, 0x23, -/* 0000D4F0 */ 0x00, 0x32, 0x00, 0x00, 0xBF, 0x7E, 0x31, 0x02, 0x4F, 0xFC, 0x0F, 0xFE, 0xD3, 0x02, 0xFE, 0x12, +/* 0000D4F0 */ 0x00, 0x32, 0x00, 0x00, 0x3F, 0xFD, 0x62, 0x04, 0x4F, 0xFC, 0x0F, 0xFE, 0xD3, 0x02, 0xFE, 0x12, /* 0000D500 */ 0x01, 0x04, 0xFF, 0xA3, 0x41, 0x41, 0x00, 0x18, 0x00, 0xFE, 0xB8, 0x29, 0x01, 0xFF, 0x00, 0x10, /* 0000D510 */ 0x01, 0x00, 0x04, 0x04, 0xFE, 0xB8, 0x29, 0xFE, 0x80, 0x03, 0xFE, 0x80, 0x03, 0x04, 0x09, 0x0A, /* 0000D520 */ 0x10, 0x05, 0x20, 0x20, 0x01, 0x02, 0x01, 0x05, 0x03, 0x03, 0x03, 0x03, 0x01, 0x0D, 0xFF, 0xFF, @@ -4843,11 +4843,11 @@ namespace Js /* 0000D620 */ 0x00, 0x87, 0x01, 0x00, 0x00, 0x00, 0xFE, 0x89, 0x01, 0xFE, 0x88, 0x01, 0xFE, 0x87, 0x01, 0xFE, /* 0000D630 */ 0x1C, 0x03, 0xFE, 0x1D, 0x03, 0xFE, 0x1E, 0x03, 0xFE, 0x1F, 0x03, 0x00, 0xFE, 0x0C, 0x2A, 0x06, /* 0000D640 */ 0x0C, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x1A, 0x00, 0x06, 0x00, 0x18, 0x00, 0x33, 0x00, 0x7C, 0x02, -/* 0000D650 */ 0x4C, 0x00, 0x69, 0x00, 0x0D, 0x00, 0x14, 0x00, 0x00, 0x5D, 0xD6, 0x00, 0x00, 0x3F, 0x7E, 0x01, -/* 0000D660 */ 0x0B, 0x4F, 0xFD, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x15, 0x01, 0x41, 0xFF, 0xB2, 0x41, +/* 0000D650 */ 0x4C, 0x00, 0x69, 0x00, 0x0D, 0x00, 0x14, 0x00, 0x00, 0x5D, 0xD6, 0x00, 0x00, 0xBF, 0xFC, 0x02, +/* 0000D660 */ 0x06, 0x4F, 0xFD, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x15, 0x01, 0x41, 0xFF, 0xB2, 0x41, /* 0000D670 */ 0x51, 0x00, 0x19, 0x00, 0xFE, 0x77, 0x2A, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0x77, -/* 0000D680 */ 0x2A, 0xFE, 0x37, 0x02, 0xFE, 0x37, 0x02, 0x08, 0x0B, 0x0F, 0x06, 0x30, 0x2F, 0x02, 0x03, 0x07, -/* 0000D690 */ 0x45, 0x05, 0x05, 0x05, 0x05, 0x01, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, +/* 0000D680 */ 0x2A, 0xFE, 0x37, 0x02, 0xFE, 0x37, 0x02, 0x45, 0x08, 0x0B, 0x0F, 0x06, 0x30, 0x2F, 0x02, 0x03, +/* 0000D690 */ 0x07, 0x05, 0x05, 0x05, 0x05, 0x01, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000D6A0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0E, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xFF, /* 0000D6B0 */ 0xFF, 0xFF, 0x00, 0x00, 0x04, 0x02, 0xFE, 0xB0, 0x02, 0x02, 0xFE, 0xCA, 0x02, 0x09, 0x02, 0xFE, /* 0000D6C0 */ 0xCC, 0x02, 0x02, 0xFE, 0xCB, 0x02, 0x08, 0x03, 0x01, 0x01, 0x00, 0x00, 0x00, 0xEC, 0xA8, 0x0D, @@ -4870,7 +4870,7 @@ namespace Js /* 0000D7D0 */ 0x00, 0x87, 0x01, 0x00, 0x00, 0x86, 0x01, 0x00, 0x00, 0x00, 0xFE, 0xF4, 0x01, 0xFE, 0x89, 0x01, /* 0000D7E0 */ 0xFE, 0x88, 0x01, 0xFE, 0x87, 0x01, 0xFE, 0x86, 0x01, 0x00, 0xFE, 0xAF, 0x2A, 0x07, 0x05, 0x00, /* 0000D7F0 */ 0x00, 0x00, 0x41, 0x00, 0x5F, 0x00, 0x0B, 0x00, 0x2C, 0x00, 0x5A, 0x00, 0x8E, 0x00, 0x20, 0x00, -/* 0000D800 */ 0x35, 0x00, 0x01, 0x00, 0x1E, 0x00, 0x1E, 0x00, 0x92, 0x00, 0x00, 0xBF, 0x7E, 0x31, 0x02, 0x0F, +/* 0000D800 */ 0x35, 0x00, 0x01, 0x00, 0x1E, 0x00, 0x1E, 0x00, 0x92, 0x00, 0x00, 0x3F, 0xFD, 0x62, 0x04, 0x0F, /* 0000D810 */ 0xFC, 0x0F, 0xFE, 0xD2, 0x02, 0xED, 0x04, 0xFF, 0xA3, 0x41, 0x41, 0x00, 0x16, 0x00, 0xFE, 0x5B, /* 0000D820 */ 0x25, 0x01, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0x5B, 0x25, 0xFE, 0x55, 0x04, 0xFE, /* 0000D830 */ 0x55, 0x04, 0x01, 0x08, 0x05, 0x0A, 0x05, 0x29, 0x26, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, @@ -4891,10 +4891,10 @@ namespace Js /* 0000D920 */ 0x00, 0xFE, 0x08, 0x03, 0xFE, 0x34, 0x02, 0xF0, 0xFE, 0x18, 0x03, 0x00, 0xFE, 0x8F, 0x25, 0x0A, /* 0000D930 */ 0x00, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x33, 0x00, 0x08, 0x00, 0x21, 0x00, 0x0B, 0x00, 0x30, 0x00, /* 0000D940 */ 0x0C, 0x00, 0x2B, 0x00, 0x26, 0x00, 0x2F, 0x00, 0x2A, 0x00, 0x71, 0x00, 0x0B, 0x00, 0x1A, 0x00, -/* 0000D950 */ 0x27, 0x00, 0xA5, 0x02, 0x0D, 0x00, 0x12, 0x00, 0x00, 0x5D, 0xD9, 0x00, 0x00, 0x3F, 0x7E, 0x11, -/* 0000D960 */ 0x0A, 0x0F, 0xFC, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x22, 0xFF, 0xA2, 0x41, 0x51, 0x00, +/* 0000D950 */ 0x27, 0x00, 0xA5, 0x02, 0x0D, 0x00, 0x12, 0x00, 0x00, 0x5D, 0xD9, 0x00, 0x00, 0xBF, 0xFC, 0x22, +/* 0000D960 */ 0x04, 0x0F, 0xFC, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x22, 0xFF, 0xA2, 0x41, 0x51, 0x00, /* 0000D970 */ 0x17, 0x00, 0xFE, 0x12, 0x27, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0x12, 0x27, 0xFE, -/* 0000D980 */ 0x7C, 0x02, 0xFE, 0x7C, 0x02, 0x06, 0x08, 0x0B, 0x06, 0x49, 0x47, 0x02, 0x08, 0x07, 0x41, 0x05, +/* 0000D980 */ 0x7C, 0x02, 0xFE, 0x7C, 0x02, 0x41, 0x06, 0x08, 0x0B, 0x06, 0x49, 0x47, 0x02, 0x08, 0x07, 0x05, /* 0000D990 */ 0x05, 0x05, 0x05, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000D9A0 */ 0xFF, 0xFF, 0x0A, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000D9B0 */ 0xFF, 0xFF, 0x00, 0x00, 0x02, 0xFE, 0x0F, 0x03, 0x02, 0xFE, 0x19, 0x03, 0x03, 0x02, 0xFE, 0x1A, @@ -4926,9 +4926,9 @@ namespace Js /* 0000DB50 */ 0x02, 0xFE, 0xFB, 0x01, 0xFE, 0x35, 0x02, 0xFE, 0xFC, 0x01, 0x00, 0xFE, 0x33, 0x27, 0x09, 0x00, /* 0000DB60 */ 0x00, 0x00, 0x00, 0x1E, 0x00, 0x66, 0x00, 0x25, 0x00, 0x4A, 0x00, 0x26, 0x00, 0x34, 0x00, 0x2A, /* 0000DB70 */ 0x00, 0x3F, 0x00, 0x3E, 0x00, 0x4E, 0x00, 0x26, 0x00, 0x39, 0x00, 0x4B, 0x00, 0x66, 0x00, 0x3B, -/* 0000DB80 */ 0x00, 0x4A, 0x00, 0x00, 0x3F, 0x7E, 0x11, 0x0A, 0x0F, 0xFC, 0x07, 0xFE, 0xD1, 0x02, 0xE6, 0x04, +/* 0000DB80 */ 0x00, 0x4A, 0x00, 0x00, 0xBF, 0xFC, 0x22, 0x04, 0x0F, 0xFC, 0x07, 0xFE, 0xD1, 0x02, 0xE6, 0x04, /* 0000DB90 */ 0xFF, 0xA3, 0x41, 0x41, 0x00, 0x15, 0x00, 0xFE, 0x35, 0x24, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, -/* 0000DBA0 */ 0x02, 0xFE, 0x35, 0x24, 0xA6, 0xA6, 0x05, 0x03, 0x05, 0x04, 0x14, 0x13, 0x01, 0x02, 0x03, 0x01, +/* 0000DBA0 */ 0x02, 0xFE, 0x35, 0x24, 0xA6, 0xA6, 0x01, 0x05, 0x03, 0x05, 0x04, 0x14, 0x13, 0x01, 0x02, 0x03, /* 0000DBB0 */ 0x02, 0x02, 0x02, 0x02, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000DBC0 */ 0xFF, 0xFF, 0xFF, 0x04, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000DBD0 */ 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x03, 0x63, 0x8F, 0x01, 0x00, 0x00, 0x00, 0x2D, 0x00, 0x00, 0x00, @@ -4939,10 +4939,10 @@ namespace Js /* 0000DC20 */ 0x02, 0x00, 0x5C, 0x02, 0x07, 0xF2, 0x03, 0x05, 0x05, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x44, /* 0000DC30 */ 0x00, 0x05, 0x02, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x00, 0x00, 0xFE, 0x30, 0x02, 0xFE, /* 0000DC40 */ 0x0C, 0x02, 0x00, 0xFE, 0x68, 0x24, 0x03, 0x00, 0x00, 0x00, 0x00, 0x26, 0x00, 0x2B, 0x00, 0x3B, -/* 0000DC50 */ 0x00, 0x47, 0x00, 0x00, 0x3F, 0x7E, 0x15, 0x0A, 0x0F, 0xFC, 0x07, 0xFE, 0xD0, 0x02, 0xD6, 0x04, +/* 0000DC50 */ 0x00, 0x47, 0x00, 0x00, 0xBF, 0xFC, 0x2A, 0x04, 0x0F, 0xFC, 0x07, 0xFE, 0xD0, 0x02, 0xD6, 0x04, /* 0000DC60 */ 0xFF, 0xA3, 0x41, 0x41, 0x00, 0x14, 0x00, 0xFE, 0xDE, 0x21, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x06, -/* 0000DC70 */ 0x06, 0xFE, 0xDE, 0x21, 0xFE, 0x4F, 0x02, 0xFE, 0x4F, 0x02, 0x0B, 0x07, 0x0F, 0x08, 0x3B, 0x38, -/* 0000DC80 */ 0x01, 0x01, 0x06, 0x05, 0x01, 0x03, 0x03, 0x03, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, +/* 0000DC70 */ 0x06, 0xFE, 0xDE, 0x21, 0xFE, 0x4F, 0x02, 0xFE, 0x4F, 0x02, 0x01, 0x0B, 0x07, 0x0F, 0x08, 0x3B, +/* 0000DC80 */ 0x38, 0x01, 0x01, 0x06, 0x05, 0x03, 0x03, 0x03, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000DC90 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0E, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000DCA0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x02, 0xFE, 0x14, 0x03, 0x04, 0x02, /* 0000DCB0 */ 0xFE, 0x15, 0x03, 0x02, 0xFE, 0x16, 0x03, 0x02, 0xFE, 0x17, 0x03, 0xFE, 0x10, 0x01, 0xA8, 0x0D, @@ -4965,10 +4965,10 @@ namespace Js /* 0000DDC0 */ 0x00, 0x09, 0x06, 0x00, 0x47, 0x00, 0x0B, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x00, 0x00, /* 0000DDD0 */ 0xFE, 0x31, 0x02, 0xFE, 0x32, 0x02, 0x23, 0x00, 0xFE, 0x31, 0x22, 0x08, 0x02, 0x00, 0x00, 0x00, /* 0000DDE0 */ 0x09, 0x00, 0x2D, 0x00, 0x0B, 0x00, 0x34, 0x00, 0x26, 0x00, 0x41, 0x00, 0x32, 0x00, 0x66, 0x00, -/* 0000DDF0 */ 0x6F, 0x00, 0x90, 0x00, 0x29, 0x00, 0x42, 0x00, 0x08, 0x00, 0x21, 0x00, 0x00, 0x3F, 0x7E, 0x15, -/* 0000DE00 */ 0x0A, 0x0F, 0xFC, 0x07, 0xFE, 0xCF, 0x02, 0xBC, 0x04, 0xFF, 0xA3, 0x41, 0x41, 0x00, 0x13, 0x00, +/* 0000DDF0 */ 0x6F, 0x00, 0x90, 0x00, 0x29, 0x00, 0x42, 0x00, 0x08, 0x00, 0x21, 0x00, 0x00, 0xBF, 0xFC, 0x2A, +/* 0000DE00 */ 0x04, 0x0F, 0xFC, 0x07, 0xFE, 0xCF, 0x02, 0xBC, 0x04, 0xFF, 0xA3, 0x41, 0x41, 0x00, 0x13, 0x00, /* 0000DE10 */ 0xFE, 0xA7, 0x1E, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x06, 0x06, 0xFE, 0xA7, 0x1E, 0xFE, 0x2F, 0x03, -/* 0000DE20 */ 0xFE, 0x2F, 0x03, 0x0B, 0x0A, 0x11, 0x0A, 0x50, 0x4A, 0x01, 0x01, 0x08, 0x06, 0x01, 0x04, 0x04, +/* 0000DE20 */ 0xFE, 0x2F, 0x03, 0x01, 0x0B, 0x0A, 0x11, 0x0A, 0x50, 0x4A, 0x01, 0x01, 0x08, 0x06, 0x04, 0x04, /* 0000DE30 */ 0x04, 0x04, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000DE40 */ 0xFF, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000DE50 */ 0xFF, 0x00, 0x00, 0x02, 0xFE, 0x0E, 0x03, 0x02, 0xFE, 0x0F, 0x03, 0x02, 0xFE, 0x10, 0x03, 0x04, @@ -5001,8 +5001,8 @@ namespace Js /* 0000E000 */ 0x02, 0xFE, 0x32, 0x02, 0x00, 0xFE, 0xF0, 0x1E, 0x0D, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x2A, /* 0000E010 */ 0x00, 0x0A, 0x00, 0x28, 0x00, 0x08, 0x00, 0x2A, 0x00, 0x26, 0x00, 0x48, 0x00, 0x08, 0x00, 0x29, /* 0000E020 */ 0x00, 0x26, 0x00, 0x40, 0x00, 0x08, 0x00, 0x29, 0x00, 0x26, 0x00, 0x40, 0x00, 0x3F, 0x00, 0x6C, -/* 0000E030 */ 0x00, 0x96, 0x00, 0xA9, 0x00, 0x06, 0x00, 0x24, 0x00, 0x08, 0x00, 0x16, 0x00, 0x00, 0x3F, 0x7E, -/* 0000E040 */ 0x11, 0x02, 0x4F, 0xFC, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x8D, 0x14, 0xFF, 0xA0, 0x41, 0x51, +/* 0000E030 */ 0x00, 0x96, 0x00, 0xA9, 0x00, 0x06, 0x00, 0x24, 0x00, 0x08, 0x00, 0x16, 0x00, 0x00, 0x3F, 0xFC, +/* 0000E040 */ 0x22, 0x04, 0x4F, 0xFC, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x8D, 0x14, 0xFF, 0xA0, 0x41, 0x51, /* 0000E050 */ 0x00, 0x0C, 0x00, 0xFE, 0x1B, 0x19, 0x06, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFE, 0x1B, /* 0000E060 */ 0x19, 0xFE, 0x0A, 0x05, 0xFE, 0x0A, 0x05, 0x04, 0x0A, 0x0B, 0x04, 0x1D, 0x1D, 0x01, 0x01, 0x01, /* 0000E070 */ 0x06, 0x06, 0x06, 0x06, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, @@ -5023,10 +5023,10 @@ namespace Js /* 0000E160 */ 0x00, 0x00, 0x0D, 0x03, 0x00, 0x00, 0x00, 0xFE, 0x08, 0x03, 0xFE, 0x30, 0x02, 0xFE, 0x31, 0x02, /* 0000E170 */ 0xFE, 0x2F, 0x02, 0xFE, 0x34, 0x02, 0xFE, 0x0D, 0x03, 0x00, 0xFE, 0x32, 0x19, 0x02, 0x00, 0x00, /* 0000E180 */ 0x00, 0x00, 0x8C, 0x00, 0xF2, 0x04, 0x00, 0x94, 0xE5, 0x00, 0x00, 0xFE, 0xE4, 0x00, 0x00, 0x68, -/* 0000E190 */ 0xE4, 0x00, 0x00, 0xD2, 0xE3, 0x00, 0x00, 0x81, 0xE2, 0x00, 0x00, 0x9F, 0xE1, 0x00, 0x00, 0x3F, -/* 0000E1A0 */ 0xFE, 0x11, 0x0E, 0x00, 0xFC, 0x07, 0xFE, 0x0D, 0x03, 0xAC, 0x19, 0xFF, 0xA2, 0x41, 0x41, 0x00, +/* 0000E190 */ 0xE4, 0x00, 0x00, 0xD2, 0xE3, 0x00, 0x00, 0x81, 0xE2, 0x00, 0x00, 0x9F, 0xE1, 0x00, 0x00, 0xBF, +/* 0000E1A0 */ 0xFC, 0x23, 0x0C, 0x00, 0xFC, 0x07, 0xFE, 0x0D, 0x03, 0xAC, 0x19, 0xFF, 0xA2, 0x41, 0x41, 0x00, /* 0000E1B0 */ 0x12, 0x00, 0xFE, 0xCF, 0x1C, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFE, 0xCF, 0x1C, 0xFE, -/* 0000E1C0 */ 0x3D, 0x01, 0xFE, 0x3D, 0x01, 0x05, 0x04, 0x07, 0x05, 0x1C, 0x1A, 0x19, 0x01, 0x02, 0x03, 0x01, +/* 0000E1C0 */ 0x3D, 0x01, 0xFE, 0x3D, 0x01, 0x01, 0x05, 0x04, 0x07, 0x05, 0x1C, 0x1A, 0x19, 0x01, 0x02, 0x03, /* 0000E1D0 */ 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000E1E0 */ 0x06, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000E1F0 */ 0x01, 0x00, 0x6A, 0x00, 0x04, 0x08, 0x6E, 0xEB, 0x00, 0xEC, 0x00, 0x0F, 0x03, 0x00, 0x04, 0x09, @@ -5038,10 +5038,10 @@ namespace Js /* 0000E250 */ 0x5C, 0x01, 0x04, 0xEE, 0x02, 0x07, 0x07, 0x01, 0x00, 0x47, 0x04, 0x07, 0x09, 0x9A, 0xFF, 0xED, /* 0000E260 */ 0x00, 0xA8, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x26, 0x1D, 0x05, 0x04, 0x00, 0x00, 0x00, /* 0000E270 */ 0x07, 0x00, 0x1A, 0x00, 0x34, 0x00, 0x55, 0x00, 0x08, 0x00, 0x39, 0x00, 0x25, 0x00, 0x3D, 0x00, -/* 0000E280 */ 0x00, 0x3F, 0x7E, 0x51, 0x0A, 0x0F, 0xFC, 0x07, 0xFE, 0x0C, 0x03, 0xA3, 0x16, 0xFF, 0xA2, 0x41, +/* 0000E280 */ 0x00, 0xBF, 0xFC, 0xA2, 0x04, 0x0F, 0xFC, 0x07, 0xFE, 0x0C, 0x03, 0xA3, 0x16, 0xFF, 0xA2, 0x41, /* 0000E290 */ 0x41, 0x00, 0x11, 0x00, 0xFE, 0xAF, 0x1B, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0xAF, -/* 0000E2A0 */ 0x1B, 0xFE, 0x02, 0x01, 0xFE, 0x02, 0x01, 0x09, 0x06, 0x0A, 0x07, 0x2A, 0x25, 0x01, 0x05, 0x01, -/* 0000E2B0 */ 0x04, 0x01, 0x02, 0x02, 0x02, 0x02, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, +/* 0000E2A0 */ 0x1B, 0xFE, 0x02, 0x01, 0xFE, 0x02, 0x01, 0x01, 0x09, 0x06, 0x0A, 0x07, 0x2A, 0x25, 0x01, 0x05, +/* 0000E2B0 */ 0x01, 0x04, 0x02, 0x02, 0x02, 0x02, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000E2C0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x09, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000E2D0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x04, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, /* 0000E2E0 */ 0x00, 0x00, 0x01, 0x20, 0x00, 0x00, 0x00, 0xC8, 0x8F, 0x01, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, @@ -5059,37 +5059,37 @@ namespace Js /* 0000E3A0 */ 0x00, 0x03, 0x00, 0x47, 0x08, 0x0A, 0x47, 0x00, 0x08, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, /* 0000E3B0 */ 0x00, 0x00, 0x1B, 0x29, 0x00, 0xFE, 0xCF, 0x1B, 0x06, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x2A, /* 0000E3C0 */ 0x00, 0x03, 0x00, 0x1A, 0x00, 0x44, 0x00, 0x39, 0x00, 0x59, 0x00, 0x4B, 0x00, 0x08, 0x00, 0x19, -/* 0000E3D0 */ 0x00, 0x00, 0x3F, 0x7E, 0x11, 0x0A, 0x00, 0xFC, 0x07, 0xFE, 0x0B, 0x03, 0x9F, 0x1E, 0xFF, 0xA2, +/* 0000E3D0 */ 0x00, 0x00, 0xBF, 0xFC, 0x22, 0x04, 0x00, 0xFC, 0x07, 0xFE, 0x0B, 0x03, 0x9F, 0x1E, 0xFF, 0xA2, /* 0000E3E0 */ 0x41, 0x41, 0x00, 0x10, 0x00, 0xFE, 0x35, 0x1B, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, -/* 0000E3F0 */ 0x35, 0x1B, 0x5F, 0x5F, 0x03, 0x03, 0x05, 0x03, 0x10, 0x0E, 0x01, 0x01, 0x01, 0x01, 0xFF, 0xFF, +/* 0000E3F0 */ 0x35, 0x1B, 0x5F, 0x5F, 0x01, 0x03, 0x03, 0x05, 0x03, 0x10, 0x0E, 0x01, 0x01, 0x01, 0xFF, 0xFF, /* 0000E400 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x04, 0xFF, 0xFF, /* 0000E410 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x04, /* 0000E420 */ 0x37, 0xA8, 0x05, 0x15, 0x03, 0x00, 0x03, 0x05, 0x09, 0x21, 0x00, 0x8F, 0x01, 0x00, 0x00, 0x00, /* 0000E430 */ 0x0B, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x07, 0x02, 0x00, 0x5C, 0x00, 0x02, 0x5C, 0x01, 0x03, /* 0000E440 */ 0xEE, 0x02, 0x05, 0x05, 0x00, 0x00, 0x47, 0x00, 0x05, 0x09, 0x05, 0x00, 0xA8, 0x05, 0x47, 0x00, /* 0000E450 */ 0x05, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x55, 0x1B, 0x02, 0x00, -/* 0000E460 */ 0x00, 0x00, 0x00, 0x35, 0x00, 0x3E, 0x00, 0x00, 0x3F, 0x7E, 0x11, 0x0A, 0x00, 0xFC, 0x07, 0xFE, +/* 0000E460 */ 0x00, 0x00, 0x00, 0x35, 0x00, 0x3E, 0x00, 0x00, 0xBF, 0xFC, 0x22, 0x04, 0x00, 0xFC, 0x07, 0xFE, /* 0000E470 */ 0x0A, 0x03, 0x9B, 0x16, 0xFF, 0xA2, 0x41, 0x41, 0x00, 0x0F, 0x00, 0xFE, 0xBA, 0x1A, 0xFF, 0x00, -/* 0000E480 */ 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0xBA, 0x1A, 0x58, 0x58, 0x03, 0x03, 0x05, 0x03, 0x10, 0x0E, -/* 0000E490 */ 0x01, 0x01, 0x01, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, +/* 0000E480 */ 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0xBA, 0x1A, 0x58, 0x58, 0x01, 0x03, 0x03, 0x05, 0x03, 0x10, +/* 0000E490 */ 0x0E, 0x01, 0x01, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000E4A0 */ 0xFF, 0xFF, 0xFF, 0x04, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000E4B0 */ 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x04, 0x37, 0xA8, 0x05, 0x14, 0x03, 0x00, 0x03, 0x05, 0x09, 0x08, /* 0000E4C0 */ 0x00, 0xA9, 0x05, 0x47, 0x00, 0x05, 0x09, 0x1E, 0x00, 0x8F, 0x01, 0x00, 0x00, 0x00, 0x0E, 0x00, /* 0000E4D0 */ 0x00, 0x00, 0x05, 0x00, 0x00, 0x07, 0x02, 0x00, 0x5C, 0x00, 0x02, 0x5C, 0x01, 0x03, 0xEE, 0x02, /* 0000E4E0 */ 0x05, 0x05, 0x00, 0x00, 0x47, 0x00, 0x05, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x00, 0x00, -/* 0000E4F0 */ 0x00, 0xFE, 0xDA, 0x1A, 0x02, 0x00, 0x00, 0x00, 0x00, 0x35, 0x00, 0x37, 0x00, 0x00, 0x3F, 0x7E, -/* 0000E500 */ 0x11, 0x0A, 0x00, 0xFC, 0x07, 0xFE, 0x09, 0x03, 0x96, 0x16, 0xFF, 0xA2, 0x41, 0x41, 0x00, 0x0E, +/* 0000E4F0 */ 0x00, 0xFE, 0xDA, 0x1A, 0x02, 0x00, 0x00, 0x00, 0x00, 0x35, 0x00, 0x37, 0x00, 0x00, 0xBF, 0xFC, +/* 0000E500 */ 0x22, 0x04, 0x00, 0xFC, 0x07, 0xFE, 0x09, 0x03, 0x96, 0x16, 0xFF, 0xA2, 0x41, 0x41, 0x00, 0x0E, /* 0000E510 */ 0x00, 0xFE, 0x3F, 0x1A, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0x3F, 0x1A, 0x5E, 0x5E, -/* 0000E520 */ 0x03, 0x03, 0x05, 0x03, 0x10, 0x0E, 0x01, 0x01, 0x01, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, +/* 0000E520 */ 0x01, 0x03, 0x03, 0x05, 0x03, 0x10, 0x0E, 0x01, 0x01, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000E530 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x04, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000E540 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x04, 0x37, 0xA8, 0x05, 0x15, /* 0000E550 */ 0x03, 0x00, 0x03, 0x05, 0x09, 0x21, 0x00, 0x8F, 0x01, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, /* 0000E560 */ 0x05, 0x00, 0x00, 0x07, 0x02, 0x00, 0x5C, 0x00, 0x02, 0x5C, 0x01, 0x03, 0xEE, 0x02, 0x05, 0x05, /* 0000E570 */ 0x00, 0x00, 0x47, 0x00, 0x05, 0x09, 0x05, 0x00, 0xA8, 0x05, 0x47, 0x00, 0x05, 0x09, 0x02, 0x00, /* 0000E580 */ 0xA8, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x5F, 0x1A, 0x02, 0x00, 0x00, 0x00, 0x00, 0x35, -/* 0000E590 */ 0x00, 0x3D, 0x00, 0x00, 0x3F, 0x7E, 0x11, 0x0A, 0x0F, 0xFC, 0x07, 0xFE, 0x08, 0x03, 0x8F, 0x16, +/* 0000E590 */ 0x00, 0x3D, 0x00, 0x00, 0xBF, 0xFC, 0x22, 0x04, 0x0F, 0xFC, 0x07, 0xFE, 0x08, 0x03, 0x8F, 0x16, /* 0000E5A0 */ 0xFF, 0xA2, 0x41, 0x41, 0x00, 0x0D, 0x00, 0xFE, 0x5F, 0x19, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, -/* 0000E5B0 */ 0x02, 0xFE, 0x5F, 0x19, 0xC5, 0xC5, 0x04, 0x04, 0x06, 0x03, 0x17, 0x15, 0x01, 0x02, 0x02, 0x01, +/* 0000E5B0 */ 0x02, 0xFE, 0x5F, 0x19, 0xC5, 0xC5, 0x01, 0x04, 0x04, 0x06, 0x03, 0x17, 0x15, 0x01, 0x02, 0x02, /* 0000E5C0 */ 0x01, 0x01, 0x01, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000E5D0 */ 0xFF, 0xFF, 0xFF, 0x05, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000E5E0 */ 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x03, 0x04, 0x5F, 0x14, 0x03, 0x00, 0x04, 0x02, 0x09, 0x20, 0x00, @@ -5100,9 +5100,9 @@ namespace Js /* 0000E630 */ 0x02, 0x06, 0x06, 0x01, 0x00, 0x47, 0x00, 0x06, 0x09, 0x05, 0x00, 0xA8, 0x06, 0x47, 0x00, 0x06, /* 0000E640 */ 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x00, 0x00, 0xFE, 0x2A, 0x02, 0x00, 0xFE, 0x7F, 0x19, /* 0000E650 */ 0x04, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x27, 0x00, 0x20, 0x00, 0x40, 0x00, 0x35, 0x00, 0x3D, -/* 0000E660 */ 0x00, 0x00, 0x3F, 0x7E, 0x15, 0x0A, 0x8F, 0xFC, 0x07, 0xFE, 0xED, 0x02, 0x89, 0x20, 0xFF, 0xA0, +/* 0000E660 */ 0x00, 0x00, 0xBF, 0xFC, 0x2A, 0x04, 0x8F, 0xFC, 0x07, 0xFE, 0xED, 0x02, 0x89, 0x20, 0xFF, 0xA0, /* 0000E670 */ 0x41, 0x41, 0x00, 0x0B, 0x00, 0xFE, 0x95, 0x18, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x01, 0x01, 0xFE, -/* 0000E680 */ 0x95, 0x18, 0x6D, 0x6D, 0x05, 0x03, 0x04, 0x06, 0x12, 0x12, 0x01, 0x01, 0x02, 0x01, 0x01, 0x02, +/* 0000E680 */ 0x95, 0x18, 0x6D, 0x6D, 0x01, 0x05, 0x03, 0x04, 0x06, 0x12, 0x12, 0x01, 0x01, 0x02, 0x01, 0x02, /* 0000E690 */ 0x02, 0x02, 0x02, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000E6A0 */ 0xFF, 0xFF, 0xFF, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000E6B0 */ 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x56, 0x8F, 0x01, 0x00, 0x00, 0x00, @@ -5112,10 +5112,10 @@ namespace Js /* 0000E6F0 */ 0x00, 0x5C, 0x01, 0x06, 0xE0, 0x06, 0x00, 0x5C, 0x02, 0x06, 0xF2, 0x03, 0x04, 0x04, 0x00, 0x00, /* 0000E700 */ 0x00, 0x00, 0x00, 0x00, 0x98, 0x00, 0x04, 0x02, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, /* 0000E710 */ 0x00, 0x00, 0x00, 0xFE, 0x0C, 0x02, 0xFE, 0x00, 0x02, 0x00, 0x09, 0xFE, 0x07, 0x03, 0x00, 0xFE, -/* 0000E720 */ 0xAC, 0x18, 0x02, 0x00, 0x00, 0x00, 0x00, 0x54, 0x00, 0x55, 0x00, 0x00, 0x3F, 0xFE, 0x15, 0x0E, +/* 0000E720 */ 0xAC, 0x18, 0x02, 0x00, 0x00, 0x00, 0x00, 0x54, 0x00, 0x55, 0x00, 0x00, 0xBF, 0xFC, 0x2B, 0x0C, /* 0000E730 */ 0x0F, 0xFC, 0x07, 0xFE, 0xEC, 0x02, 0x79, 0x19, 0xFF, 0xA2, 0x41, 0x41, 0x00, 0x0A, 0x00, 0xFE, /* 0000E740 */ 0xC9, 0x15, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x05, 0x05, 0xFE, 0xC9, 0x15, 0xFE, 0xA8, 0x02, 0xFE, -/* 0000E750 */ 0xA8, 0x02, 0x0C, 0x06, 0x10, 0x06, 0x42, 0x37, 0x18, 0x01, 0x01, 0x04, 0x04, 0x01, 0x01, 0x02, +/* 0000E750 */ 0xA8, 0x02, 0x01, 0x0C, 0x06, 0x10, 0x06, 0x42, 0x37, 0x18, 0x01, 0x01, 0x04, 0x04, 0x01, 0x02, /* 0000E760 */ 0x02, 0x02, 0x02, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000E770 */ 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000E780 */ 0xFF, 0xFF, 0x01, 0x7A, 0xD1, 0x00, 0x02, 0xFE, 0x06, 0x03, 0x04, 0x01, 0x00, 0x00, 0x00, 0x00, @@ -5139,7 +5139,7 @@ namespace Js /* 0000E8A0 */ 0x19, 0x16, 0x0C, 0x04, 0x00, 0x00, 0x00, 0x30, 0x00, 0x62, 0x00, 0x1E, 0x00, 0x36, 0x00, 0x0F, /* 0000E8B0 */ 0x00, 0x34, 0x00, 0x16, 0x00, 0x3A, 0x00, 0x07, 0x00, 0x0B, 0x00, 0x08, 0x00, 0x20, 0x00, 0x2D, /* 0000E8C0 */ 0x00, 0x6A, 0x00, 0x0E, 0x00, 0x36, 0x00, 0x08, 0x00, 0x4C, 0xFF, 0x08, 0x00, 0xE8, 0x00, 0x2B, -/* 0000E8D0 */ 0x00, 0x52, 0x00, 0x00, 0xBF, 0x7E, 0x35, 0x02, 0xCF, 0xFD, 0x0F, 0xFE, 0xEB, 0x02, 0x5A, 0x1E, +/* 0000E8D0 */ 0x00, 0x52, 0x00, 0x00, 0x3F, 0xFD, 0x6A, 0x04, 0xCF, 0xFD, 0x0F, 0xFE, 0xEB, 0x02, 0x5A, 0x1E, /* 0000E8E0 */ 0xFF, 0xA2, 0x41, 0x41, 0x00, 0x07, 0x00, 0xFE, 0xD8, 0x0E, 0x02, 0xFF, 0x00, 0x10, 0x01, 0x00, /* 0000E8F0 */ 0x05, 0x05, 0xFE, 0xD8, 0x0E, 0xFE, 0xD4, 0x06, 0xFE, 0xD4, 0x06, 0x03, 0x10, 0x0C, 0x15, 0x09, /* 0000E900 */ 0x62, 0x5B, 0x01, 0x01, 0x08, 0x01, 0x09, 0x05, 0x05, 0x05, 0x05, 0x01, 0x01, 0x01, 0x12, 0xFF, @@ -5184,10 +5184,10 @@ namespace Js /* 0000EB70 */ 0x00, 0x2E, 0x00, 0x37, 0x00, 0x07, 0x00, 0x1C, 0x00, 0x33, 0x00, 0x3F, 0x02, 0x3D, 0x00, 0x4A, /* 0000EB80 */ 0x00, 0x1D, 0x00, 0x39, 0x00, 0x12, 0x00, 0x51, 0x00, 0x0B, 0x00, 0x20, 0x00, 0x33, 0x00, 0xBF, /* 0000EB90 */ 0x01, 0x0B, 0x00, 0x2A, 0x00, 0xBA, 0x00, 0x1F, 0x01, 0x00, 0xDE, 0xEC, 0x00, 0x00, 0xA2, 0xEB, -/* 0000EBA0 */ 0x00, 0x00, 0x3F, 0x7E, 0x15, 0x0A, 0x8F, 0xFC, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x68, 0x3D, +/* 0000EBA0 */ 0x00, 0x00, 0xBF, 0xFC, 0x2A, 0x04, 0x8F, 0xFC, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x68, 0x3D, /* 0000EBB0 */ 0xFF, 0xA2, 0x41, 0x51, 0x00, 0x09, 0x00, 0xFE, 0xD4, 0x12, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, -/* 0000EBC0 */ 0x02, 0xFE, 0xD4, 0x12, 0xFE, 0x7D, 0x01, 0xFE, 0x7D, 0x01, 0x07, 0x05, 0x09, 0x05, 0x22, 0x20, -/* 0000EBD0 */ 0x02, 0x01, 0x03, 0x06, 0x41, 0x01, 0x01, 0x01, 0x01, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, +/* 0000EBC0 */ 0x02, 0xFE, 0xD4, 0x12, 0xFE, 0x7D, 0x01, 0xFE, 0x7D, 0x01, 0x41, 0x07, 0x05, 0x09, 0x05, 0x22, +/* 0000EBD0 */ 0x20, 0x02, 0x01, 0x03, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000EBE0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x08, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000EBF0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, /* 0000EC00 */ 0x04, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xB3, 0x8F, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, @@ -5203,10 +5203,10 @@ namespace Js /* 0000ECA0 */ 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0A, 0x05, 0x00, 0x5C, 0x02, 0x0A, 0x5C, 0x03, 0x05, /* 0000ECB0 */ 0xEE, 0x04, 0xFF, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x00, 0x00, 0xFE, 0x0C, 0x02, 0x00, /* 0000ECC0 */ 0x0E, 0xFE, 0x05, 0x03, 0x00, 0xFE, 0xF9, 0x12, 0x05, 0x00, 0x00, 0x00, 0x00, 0x2C, 0x00, 0x7B, -/* 0000ECD0 */ 0x00, 0x09, 0x00, 0x25, 0x00, 0x41, 0x00, 0x60, 0x00, 0x3B, 0x00, 0x57, 0x00, 0x00, 0x3F, 0x7E, -/* 0000ECE0 */ 0x11, 0x0A, 0x00, 0xFC, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x5D, 0x3D, 0xFF, 0xA2, 0x41, 0x51, +/* 0000ECD0 */ 0x00, 0x09, 0x00, 0x25, 0x00, 0x41, 0x00, 0x60, 0x00, 0x3B, 0x00, 0x57, 0x00, 0x00, 0xBF, 0xFC, +/* 0000ECE0 */ 0x22, 0x04, 0x00, 0xFC, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x5D, 0x3D, 0xFF, 0xA2, 0x41, 0x51, /* 0000ECF0 */ 0x00, 0x08, 0x00, 0xFE, 0xA1, 0x0F, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, 0x02, 0xFE, 0xA1, 0x0F, -/* 0000ED00 */ 0x61, 0x61, 0x04, 0x05, 0x07, 0x06, 0x0F, 0x0F, 0x02, 0x01, 0x03, 0x41, 0xFF, 0xFF, 0xFF, 0xFF, +/* 0000ED00 */ 0x61, 0x61, 0x41, 0x04, 0x05, 0x07, 0x06, 0x0F, 0x0F, 0x02, 0x01, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000ED10 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x06, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000ED20 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x02, 0xFE, 0xFF, /* 0000ED30 */ 0x02, 0x02, 0xFE, 0xC2, 0x02, 0x04, 0x50, 0x8F, 0x02, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, @@ -5215,10 +5215,10 @@ namespace Js /* 0000ED60 */ 0x00, 0x08, 0x02, 0x00, 0x5C, 0x02, 0x08, 0x2F, 0x08, 0x02, 0x05, 0x5C, 0x03, 0x08, 0x5D, 0x04, /* 0000ED70 */ 0x03, 0x00, 0x00, 0xEE, 0x05, 0x07, 0x07, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, /* 0000ED80 */ 0x00, 0x00, 0x07, 0xA8, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xB5, 0x0F, 0x02, 0x00, 0x00, -/* 0000ED90 */ 0x00, 0x00, 0x4E, 0x00, 0x4C, 0x00, 0x00, 0x3F, 0x7E, 0x11, 0x0A, 0x0F, 0xFC, 0x07, 0xFE, 0xFC, +/* 0000ED90 */ 0x00, 0x00, 0x4E, 0x00, 0x4C, 0x00, 0x00, 0xBF, 0xFC, 0x22, 0x04, 0x0F, 0xFC, 0x07, 0xFE, 0xFC, /* 0000EDA0 */ 0x02, 0x52, 0x1F, 0xFF, 0xA2, 0x41, 0x41, 0x00, 0x06, 0x00, 0xFE, 0xA2, 0x0D, 0xFF, 0x00, 0x10, -/* 0000EDB0 */ 0x01, 0x00, 0x03, 0x03, 0xFE, 0xA2, 0x0D, 0xFE, 0x14, 0x01, 0xFE, 0x14, 0x01, 0x06, 0x02, 0x06, -/* 0000EDC0 */ 0x03, 0x15, 0x12, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, +/* 0000EDB0 */ 0x01, 0x00, 0x03, 0x03, 0xFE, 0xA2, 0x0D, 0xFE, 0x14, 0x01, 0xFE, 0x14, 0x01, 0x01, 0x06, 0x02, +/* 0000EDC0 */ 0x06, 0x03, 0x15, 0x12, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000EDD0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x05, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000EDE0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x4E, 0x8F, 0x01, 0x00, /* 0000EDF0 */ 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x6D, 0x06, 0x07, 0x00, 0x07, 0x02, 0x00, @@ -5228,28 +5228,28 @@ namespace Js /* 0000EE30 */ 0x00, 0x47, 0x00, 0x04, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x01, /* 0000EE40 */ 0x00, 0xFE, 0xCE, 0x0D, 0x07, 0x00, 0x00, 0x00, 0x00, 0x26, 0x00, 0x47, 0x00, 0x08, 0x00, 0x1E, /* 0000EE50 */ 0x00, 0x09, 0x00, 0x25, 0x00, 0x08, 0x00, 0x26, 0x00, 0x05, 0x00, 0x1B, 0x00, 0x08, 0x00, 0x1C, -/* 0000EE60 */ 0x00, 0x00, 0x3F, 0x7E, 0x11, 0x0A, 0x0F, 0xFC, 0x07, 0xFE, 0xEA, 0x02, 0x4E, 0x1C, 0xFF, 0xA2, +/* 0000EE60 */ 0x00, 0x00, 0xBF, 0xFC, 0x22, 0x04, 0x0F, 0xFC, 0x07, 0xFE, 0xEA, 0x02, 0x4E, 0x1C, 0xFF, 0xA2, /* 0000EE70 */ 0x41, 0x41, 0x00, 0x05, 0x00, 0xFE, 0x2B, 0x0D, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x03, 0x03, 0xFE, -/* 0000EE80 */ 0x2B, 0x0D, 0x53, 0x53, 0x05, 0x02, 0x05, 0x04, 0x0B, 0x0B, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, +/* 0000EE80 */ 0x2B, 0x0D, 0x53, 0x53, 0x01, 0x05, 0x02, 0x05, 0x04, 0x0B, 0x0B, 0x01, 0x01, 0x01, 0x01, 0x01, /* 0000EE90 */ 0x01, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000EEA0 */ 0xFF, 0x04, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000EEB0 */ 0xFF, 0x00, 0x00, 0x2D, 0x8F, 0x01, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, /* 0000EEC0 */ 0x6D, 0x05, 0x06, 0x00, 0x07, 0x03, 0x00, 0x5C, 0x00, 0x06, 0x5C, 0x01, 0x03, 0x5C, 0x02, 0x02, /* 0000EED0 */ 0xF2, 0x03, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x02, 0x00, 0xA8, 0x00, 0x24, /* 0000EEE0 */ 0x00, 0x00, 0x00, 0xFE, 0x7A, 0x02, 0x00, 0xFE, 0x49, 0x0D, 0x02, 0x00, 0x00, 0x00, 0x00, 0x2B, -/* 0000EEF0 */ 0x00, 0x34, 0x00, 0x00, 0x3F, 0x6E, 0x01, 0x08, 0x0F, 0xFC, 0x07, 0xFE, 0xE9, 0x02, 0x48, 0x1C, +/* 0000EEF0 */ 0x00, 0x34, 0x00, 0x00, 0xBF, 0xDC, 0x02, 0x00, 0x0F, 0xFC, 0x07, 0xFE, 0xE9, 0x02, 0x48, 0x1C, /* 0000EF00 */ 0xFF, 0xA2, 0x41, 0x41, 0x00, 0x04, 0x00, 0xFE, 0x8B, 0x0C, 0xFF, 0x00, 0x10, 0x01, 0x00, 0x02, -/* 0000EF10 */ 0x02, 0xFE, 0x8B, 0x0C, 0x7F, 0x7F, 0x02, 0x04, 0x05, 0x0A, 0x0A, 0x01, 0x41, 0x01, 0x01, 0x01, +/* 0000EF10 */ 0x02, 0xFE, 0x8B, 0x0C, 0x7F, 0x7F, 0x41, 0x02, 0x04, 0x05, 0x0A, 0x0A, 0x01, 0x01, 0x01, 0x01, /* 0000EF20 */ 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000EF30 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000EF40 */ 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x01, 0x1C, 0x00, 0x0A, 0x80, 0x01, 0x07, 0x00, 0x0A, 0x80, /* 0000EF50 */ 0x1E, 0x62, 0x05, 0x04, 0x00, 0x14, 0x0F, 0x00, 0x05, 0x02, 0x09, 0x00, 0x00, 0x62, 0x05, 0x04, /* 0000EF60 */ 0x00, 0x14, 0x03, 0x00, 0x05, 0x03, 0x09, 0x02, 0x00, 0x23, 0x04, 0xA8, 0x00, 0x24, 0x00, 0x00, /* 0000EF70 */ 0x00, 0xFE, 0x12, 0x01, 0x00, 0xFE, 0xA4, 0x0C, 0x03, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x4B, -/* 0000EF80 */ 0x00, 0x04, 0x00, 0x1A, 0x00, 0x00, 0x3F, 0xFE, 0x15, 0x0C, 0x00, 0xFC, 0x07, 0xFE, 0xFB, 0x02, +/* 0000EF80 */ 0x00, 0x04, 0x00, 0x1A, 0x00, 0x00, 0xBF, 0xFC, 0x2B, 0x08, 0x00, 0xFC, 0x07, 0xFE, 0xFB, 0x02, /* 0000EF90 */ 0x3E, 0x12, 0xFF, 0xA2, 0x41, 0x41, 0x00, 0x03, 0x00, 0xFE, 0x5B, 0x0B, 0xFF, 0x00, 0x10, 0x01, -/* 0000EFA0 */ 0x00, 0x04, 0x04, 0xFE, 0x5B, 0x0B, 0xA9, 0xA9, 0x06, 0x05, 0x09, 0x03, 0x11, 0x0F, 0x0D, 0x01, -/* 0000EFB0 */ 0x01, 0x01, 0x01, 0x41, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, +/* 0000EFA0 */ 0x00, 0x04, 0x04, 0xFE, 0x5B, 0x0B, 0xA9, 0xA9, 0x41, 0x06, 0x05, 0x09, 0x03, 0x11, 0x0F, 0x0D, +/* 0000EFB0 */ 0x01, 0x01, 0x01, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000EFC0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000EFD0 */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x03, 0x2F, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, /* 0000EFE0 */ 0x04, 0x01, 0x01, 0x00, 0x00, 0x00, 0x33, 0x47, 0x08, 0x02, 0xEB, 0x00, 0xEC, 0x00, 0x12, 0x03, @@ -5257,10 +5257,10 @@ namespace Js /* 0000F000 */ 0x0A, 0x05, 0x08, 0x00, 0x00, 0x5C, 0x01, 0x0A, 0xEE, 0x02, 0xFF, 0x09, 0x00, 0x00, 0x28, 0x08, /* 0000F010 */ 0x08, 0x09, 0xD8, 0xFF, 0xED, 0x00, 0xA8, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x83, 0x0B, /* 0000F020 */ 0x05, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x23, 0x00, 0x08, 0x00, 0x21, 0x00, 0x18, 0x00, 0x21, -/* 0000F030 */ 0x00, 0x0A, 0x00, 0x1B, 0x00, 0x00, 0x3F, 0x7E, 0x11, 0x0A, 0x00, 0xFC, 0x07, 0xFE, 0xDE, 0x02, +/* 0000F030 */ 0x00, 0x0A, 0x00, 0x1B, 0x00, 0x00, 0xBF, 0xFC, 0x22, 0x04, 0x00, 0xFC, 0x07, 0xFE, 0xDE, 0x02, /* 0000F040 */ 0x28, 0x1F, 0xFF, 0xA2, 0x41, 0x41, 0x00, 0x02, 0x00, 0xFE, 0x22, 0x07, 0xFF, 0x00, 0x10, 0x01, -/* 0000F050 */ 0x00, 0x04, 0x04, 0xFE, 0x22, 0x07, 0x73, 0x73, 0x06, 0x04, 0x08, 0x09, 0x10, 0x10, 0x01, 0x02, -/* 0000F060 */ 0x02, 0x41, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, +/* 0000F050 */ 0x00, 0x04, 0x04, 0xFE, 0x22, 0x07, 0x73, 0x73, 0x41, 0x06, 0x04, 0x08, 0x09, 0x10, 0x10, 0x01, +/* 0000F060 */ 0x02, 0x02, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000F070 */ 0xFF, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* 0000F080 */ 0xFF, 0x00, 0x00, 0x03, 0x04, 0x45, 0x8F, 0x01, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x08, /* 0000F090 */ 0x00, 0x00, 0x07, 0x04, 0x00, 0x5C, 0x00, 0x03, 0x5C, 0x01, 0x04, 0x5C, 0x02, 0x05, 0x8F, 0x01, diff --git a/lib/Runtime/Library/IntlEngineInterfaceExtensionObject.cpp b/lib/Runtime/Library/IntlEngineInterfaceExtensionObject.cpp index bff1d408499..f7ced1d35ee 100644 --- a/lib/Runtime/Library/IntlEngineInterfaceExtensionObject.cpp +++ b/lib/Runtime/Library/IntlEngineInterfaceExtensionObject.cpp @@ -414,7 +414,7 @@ namespace Js break; } - Js::ScriptFunction *function = scriptContext->GetLibrary()->CreateScriptFunction(intlByteCode->GetNestedFunc(0)->EnsureDeserialized()); + Js::ScriptFunction *function = scriptContext->GetLibrary()->CreateScriptFunction(intlByteCode->GetNestedFunctionForExecution(0)); // If we are profiling, we need to register the script to the profiler callback, so the script compiled event will be sent. if (scriptContext->IsProfiling()) diff --git a/lib/Runtime/Library/JavascriptFunction.cpp b/lib/Runtime/Library/JavascriptFunction.cpp index 7f584e72397..f1ead8c88ad 100644 --- a/lib/Runtime/Library/JavascriptFunction.cpp +++ b/lib/Runtime/Library/JavascriptFunction.cpp @@ -208,11 +208,11 @@ namespace Js BOOL strictMode = FALSE; JavascriptFunction *pfuncScript; - ParseableFunctionInfo *pfuncBodyCache = NULL; + FunctionInfo *pfuncInfoCache = NULL; char16 const * sourceString = bs->GetSz(); charcount_t sourceLen = bs->GetLength(); EvalMapString key(sourceString, sourceLen, moduleID, strictMode, /* isLibraryCode = */ false); - if (!scriptContext->IsInNewFunctionMap(key, &pfuncBodyCache)) + if (!scriptContext->IsInNewFunctionMap(key, &pfuncInfoCache)) { // Validate formals here scriptContext->GetGlobalObject()->ValidateSyntax( @@ -237,20 +237,15 @@ namespace Js Assert(functionInfo); functionInfo->SetGrfscr(functionInfo->GetGrfscr() | fscrGlobalCode); - scriptContext->AddToNewFunctionMap(key, functionInfo); + scriptContext->AddToNewFunctionMap(key, functionInfo->GetFunctionInfo()); + } + else if (pfuncInfoCache->IsCoroutine()) + { + pfuncScript = scriptContext->GetLibrary()->CreateGeneratorVirtualScriptFunction(pfuncInfoCache->GetFunctionProxy()); } else { - // Get the latest proxy - FunctionProxy * proxy = pfuncBodyCache->GetFunctionProxy(); - if (proxy->IsCoroutine()) - { - pfuncScript = scriptContext->GetLibrary()->CreateGeneratorVirtualScriptFunction(proxy); - } - else - { - pfuncScript = scriptContext->GetLibrary()->CreateScriptFunction(proxy); - } + pfuncScript = scriptContext->GetLibrary()->CreateScriptFunction(pfuncInfoCache->GetFunctionProxy()); } #if ENABLE_TTD @@ -902,7 +897,7 @@ namespace Js Var functionResult; if (spreadIndices != nullptr) { - functionResult = CallSpreadFunction(functionObj, functionObj->GetEntryPoint(), newArgs, spreadIndices); + functionResult = CallSpreadFunction(functionObj, newArgs, spreadIndices); } else { @@ -945,7 +940,7 @@ namespace Js RUNTIME_ARGUMENTS(args, spreadIndices, function, callInfo); - return JavascriptFunction::CallSpreadFunction(function, function->GetEntryPoint(), args, spreadIndices); + return JavascriptFunction::CallSpreadFunction(function, args, spreadIndices); } uint32 JavascriptFunction::GetSpreadSize(const Arguments args, const Js::AuxArray *spreadIndices, ScriptContext *scriptContext) @@ -1086,7 +1081,7 @@ namespace Js } } - Var JavascriptFunction::CallSpreadFunction(RecyclableObject* function, JavascriptMethod entryPoint, Arguments args, const Js::AuxArray *spreadIndices) + Var JavascriptFunction::CallSpreadFunction(RecyclableObject* function, Arguments args, const Js::AuxArray *spreadIndices) { ScriptContext* scriptContext = function->GetScriptContext(); @@ -1113,7 +1108,7 @@ namespace Js SpreadArgs(args, outArgs, spreadIndices, scriptContext); - return JavascriptFunction::CallFunction(function, entryPoint, outArgs); + return JavascriptFunction::CallFunction(function, function->GetEntryPoint(), outArgs); } Var JavascriptFunction::CallFunction(Arguments args) @@ -1652,8 +1647,19 @@ void __cdecl _alloca_probe_16() Assert(functionInfo); + // Prevent redeferring during parsing + bool canBeDeferred = functionInfo->CanBeDeferred(); + functionInfo->SetAttributes((FunctionInfo::Attributes)(functionInfo->GetAttributes() & ~FunctionInfo::Attributes::CanDefer)); + if (functionInfo->IsDeferredParseFunction()) { + if (ScriptFunctionWithInlineCache::Is(*functionRef)) + { + // If inline caches were populated from a function body that has been redeferred, the caches have been cleaned up, + // so clear the pointers. REVIEW: Is this a perf loss in some cases? + ScriptFunctionWithInlineCache::FromVar(*functionRef)->ClearBorrowedInlineCacheOnFunctionObject(); + } + funcBody = functionInfo->Parse(functionRef); fParsed = funcBody->IsFunctionParsed() ? TRUE : FALSE; @@ -1676,6 +1682,13 @@ void __cdecl _alloca_probe_16() #else // !ENABLE_SCRIPT_PROFILING Assert(directEntryPoint != DefaultDeferredParsingThunk); #endif + + // Restore the can-be-deferred attribute. + if (canBeDeferred) + { + funcBody->SetAttributes((FunctionInfo::Attributes)(funcBody->GetAttributes() | FunctionInfo::Attributes::CanDefer)); + } + return (*functionRef)->UpdateUndeferredBody(funcBody); } @@ -1684,7 +1697,6 @@ void __cdecl _alloca_probe_16() ParseableFunctionInfo* functionInfo = (*functionRef)->GetParseableFunctionInfo(); Assert(functionInfo); - Assert(functionInfo->HasBody()); functionInfo->GetFunctionBody()->AddDeferParseAttribute(); functionInfo->GetFunctionBody()->ResetEntryPoint(); functionInfo->GetFunctionBody()->ResetInParams(); @@ -1799,7 +1811,7 @@ void __cdecl _alloca_probe_16() // calls the default entry point the next time around if (funcInfo->IsDeferredDeserializeFunction()) { - DeferDeserializeFunctionInfo* deferDeserializeFunction = (DeferDeserializeFunctionInfo*) funcInfo; + DeferDeserializeFunctionInfo* deferDeserializeFunction = funcInfo->GetDeferDeserializeFunctionInfo(); // This is the first call to the function, ensure dynamic profile info // Deserialize is a no-op if the function has already been deserialized diff --git a/lib/Runtime/Library/JavascriptFunction.h b/lib/Runtime/Library/JavascriptFunction.h index 72c87837f10..4ea6e71988c 100644 --- a/lib/Runtime/Library/JavascriptFunction.h +++ b/lib/Runtime/Library/JavascriptFunction.h @@ -119,7 +119,7 @@ namespace Js #endif template static Var CallFunction(RecyclableObject* obj, JavascriptMethod entryPoint, Arguments args); - static Var CallSpreadFunction(RecyclableObject* obj, JavascriptMethod entryPoint, Arguments args, const Js::AuxArray *spreadIndices); + static Var CallSpreadFunction(RecyclableObject* obj, Arguments args, const Js::AuxArray *spreadIndices); static uint32 GetSpreadSize(const Arguments args, const Js::AuxArray *spreadIndices, ScriptContext *scriptContext); static void SpreadArgs(const Arguments args, Arguments& destArgs, const Js::AuxArray *spreadIndices, ScriptContext *scriptContext); static Var EntrySpreadCall(const Js::AuxArray *spreadIndices, RecyclableObject* function, CallInfo callInfo, ...); diff --git a/lib/Runtime/Library/JavascriptGeneratorFunction.cpp b/lib/Runtime/Library/JavascriptGeneratorFunction.cpp index 5f3d6a5c704..014954df064 100644 --- a/lib/Runtime/Library/JavascriptGeneratorFunction.cpp +++ b/lib/Runtime/Library/JavascriptGeneratorFunction.cpp @@ -82,9 +82,9 @@ namespace Js return static_cast(var); } - JavascriptGeneratorFunction* JavascriptGeneratorFunction::OP_NewScGenFunc(FrameDisplay *environment, FunctionProxy** proxyRef) + JavascriptGeneratorFunction* JavascriptGeneratorFunction::OP_NewScGenFunc(FrameDisplay *environment, FunctionInfoPtrPtr infoRef) { - FunctionProxy* functionProxy = *proxyRef; + FunctionProxy* functionProxy = (*infoRef)->GetFunctionProxy(); ScriptContext* scriptContext = functionProxy->GetScriptContext(); bool hasSuperReference = functionProxy->HasSuperReference(); diff --git a/lib/Runtime/Library/JavascriptGeneratorFunction.h b/lib/Runtime/Library/JavascriptGeneratorFunction.h index 615829324e9..31caacafde9 100644 --- a/lib/Runtime/Library/JavascriptGeneratorFunction.h +++ b/lib/Runtime/Library/JavascriptGeneratorFunction.h @@ -33,7 +33,7 @@ namespace Js static JavascriptGeneratorFunction* FromVar(Var var); static bool Is(Var var); - static JavascriptGeneratorFunction* OP_NewScGenFunc(FrameDisplay* environment, FunctionProxy** proxyRef); + static JavascriptGeneratorFunction* OP_NewScGenFunc(FrameDisplay* environment, FunctionInfoPtrPtr infoRef); static Var EntryGeneratorFunctionImplementation(RecyclableObject* function, CallInfo callInfo, ...); static Var EntryAsyncFunctionImplementation(RecyclableObject* function, CallInfo callInfo, ...); static DWORD GetOffsetOfScriptFunction() { return offsetof(JavascriptGeneratorFunction, scriptFunction); } diff --git a/lib/Runtime/Library/JavascriptProxy.cpp b/lib/Runtime/Library/JavascriptProxy.cpp index 1d711814f96..febf7ad691f 100644 --- a/lib/Runtime/Library/JavascriptProxy.cpp +++ b/lib/Runtime/Library/JavascriptProxy.cpp @@ -1939,7 +1939,7 @@ namespace Js Var functionResult; if (spreadIndices != nullptr) { - functionResult = JavascriptFunction::CallSpreadFunction(this, this->GetEntryPoint(), args, spreadIndices); + functionResult = JavascriptFunction::CallSpreadFunction(this, args, spreadIndices); } else { diff --git a/lib/Runtime/Library/ScriptFunction.cpp b/lib/Runtime/Library/ScriptFunction.cpp index 177f18169a4..cf492f6edbb 100644 --- a/lib/Runtime/Library/ScriptFunction.cpp +++ b/lib/Runtime/Library/ScriptFunction.cpp @@ -32,11 +32,11 @@ namespace Js {} ScriptFunction::ScriptFunction(FunctionProxy * proxy, ScriptFunctionType* deferredPrototypeType) - : ScriptFunctionBase(deferredPrototypeType, proxy), + : ScriptFunctionBase(deferredPrototypeType, proxy->GetFunctionInfo()), environment((FrameDisplay*)&NullFrameDisplay), cachedScopeObj(nullptr), homeObj(nullptr), hasInlineCaches(false), hasSuperReference(false), isActiveScript(false) { - Assert(proxy->GetFunctionProxy() == proxy); + Assert(proxy->GetFunctionInfo()->GetFunctionProxy() == proxy); Assert(proxy->EnsureDeferredPrototypeType() == deferredPrototypeType); DebugOnly(VerifyEntryPoint()); @@ -60,10 +60,10 @@ namespace Js #endif } - ScriptFunction * ScriptFunction::OP_NewScFunc(FrameDisplay *environment, FunctionProxy** proxyRef) + ScriptFunction * ScriptFunction::OP_NewScFunc(FrameDisplay *environment, FunctionInfoPtrPtr infoRef) { - AssertMsg(proxyRef!= nullptr, "BYTE-CODE VERIFY: Must specify a valid function to create"); - FunctionProxy* functionProxy = (*proxyRef); + AssertMsg(infoRef!= nullptr, "BYTE-CODE VERIFY: Must specify a valid function to create"); + FunctionProxy* functionProxy = (*infoRef)->GetFunctionProxy(); AssertMsg(functionProxy!= nullptr, "BYTE-CODE VERIFY: Must specify a valid function to create"); ScriptContext* scriptContext = functionProxy->GetScriptContext(); @@ -260,31 +260,25 @@ namespace Js FunctionProxy * ScriptFunction::GetFunctionProxy() const { Assert(this->functionInfo->HasBody()); - return reinterpret_cast(this->functionInfo); + return this->functionInfo->GetFunctionProxy(); } JavascriptMethod ScriptFunction::UpdateUndeferredBody(FunctionBody* newFunctionInfo) { // Update deferred parsed/serialized function to the real function body Assert(this->functionInfo->HasBody()); - if (this->functionInfo != newFunctionInfo) - { - Assert(this->functionInfo->GetFunctionBody() == newFunctionInfo); - Assert(!newFunctionInfo->IsDeferred()); - DynamicType * type = this->GetDynamicType(); + Assert(this->functionInfo->GetFunctionBody() == newFunctionInfo); + Assert(!newFunctionInfo->IsDeferred()); - // If the type is shared, it must be the shared one in the old function proxy + DynamicType * type = this->GetDynamicType(); - DebugOnly(FunctionProxy * oldProxy = this->GetFunctionProxy()); - this->functionInfo = newFunctionInfo; + // If the type is shared, it must be the shared one in the old function proxy - if (type->GetIsShared()) - { - // if it is shared, it must still be the deferred prototype from the old proxy - Assert(type == oldProxy->GetDeferredPrototypeType()); + this->functionInfo = newFunctionInfo->GetFunctionInfo(); - // the type is still shared, we can't modify it, just migrate to the shared one in the function body - this->ReplaceType(newFunctionInfo->EnsureDeferredPrototypeType()); - } + if (type->GetIsShared()) + { + // the type is still shared, we can't modify it, just migrate to the shared one in the function body + this->ReplaceType(newFunctionInfo->EnsureDeferredPrototypeType()); } // The type has change from the default, it is not share, just use that one. @@ -297,8 +291,7 @@ namespace Js #endif Js::FunctionEntryPointInfo* defaultEntryPointInfo = newFunctionInfo->GetDefaultFunctionEntryPointInfo(); - JavascriptMethod thunkEntryPoint = this->UpdateThunkEntryPoint(defaultEntryPointInfo, - directEntryPoint); + JavascriptMethod thunkEntryPoint = this->UpdateThunkEntryPoint(defaultEntryPointInfo, directEntryPoint); this->GetScriptFunctionType()->SetEntryPointInfo(defaultEntryPointInfo); @@ -746,7 +739,7 @@ namespace Js uint totalCacheCount = isInstInlineCacheStart + isInstInlineCacheCount; if (this->GetHasInlineCaches() && this->m_inlineCaches && this->hasOwnInlineCaches) { - Js::ScriptContext* scriptContext = this->GetFunctionBody()->GetScriptContext(); + Js::ScriptContext* scriptContext = this->GetParseableFunctionInfo()->GetScriptContext(); uint i = 0; uint unregisteredInlineCacheCount = 0; uint plainInlineCacheEnd = rootObjectLoadInlineCacheStart; @@ -977,4 +970,13 @@ namespace Js } SetHasInlineCaches(false); } + + void ScriptFunctionWithInlineCache::ClearBorrowedInlineCacheOnFunctionObject() + { + if (this->hasOwnInlineCaches) + { + return; + } + ClearInlineCacheOnFunctionObject(); + } } diff --git a/lib/Runtime/Library/ScriptFunction.h b/lib/Runtime/Library/ScriptFunction.h index 5e2970ae843..87e3b27064e 100644 --- a/lib/Runtime/Library/ScriptFunction.h +++ b/lib/Runtime/Library/ScriptFunction.h @@ -47,7 +47,7 @@ namespace Js ScriptFunction(FunctionProxy * proxy, ScriptFunctionType* deferredPrototypeType); static bool Is(Var func); static ScriptFunction * FromVar(Var func); - static ScriptFunction * OP_NewScFunc(FrameDisplay *environment, FunctionProxy** proxyRef); + static ScriptFunction * OP_NewScFunc(FrameDisplay *environment, FunctionInfoPtrPtr infoRef); ProxyEntryPointInfo* GetEntryPointInfo() const; FunctionEntryPointInfo* GetFunctionEntryPointInfo() const @@ -169,6 +169,7 @@ namespace Js void CreateInlineCache(); void AllocateInlineCache(); void ClearInlineCacheOnFunctionObject(); + void ClearBorrowedInlineCacheOnFunctionObject(); InlineCache * GetInlineCache(uint index); uint GetInlineCacheCount() { return inlineCacheCount; } void** GetInlineCaches() { return m_inlineCaches; } diff --git a/lib/Runtime/Library/StackScriptFunction.cpp b/lib/Runtime/Library/StackScriptFunction.cpp index 00b93184867..5b848ebf4ce 100644 --- a/lib/Runtime/Library/StackScriptFunction.cpp +++ b/lib/Runtime/Library/StackScriptFunction.cpp @@ -76,8 +76,9 @@ namespace Js Assert(ThreadContext::IsOnStack(stackScriptFunction)); Assert(stackScriptFunction->boxedScriptFunction == nullptr); - FunctionBody * functionParent = stackScriptFunction->GetFunctionBody()->GetStackNestedFuncParentStrongRef(); - Assert(functionParent != nullptr); + FunctionInfo * functionInfoParent = stackScriptFunction->GetFunctionBody()->GetStackNestedFuncParentStrongRef(); + Assert(functionInfoParent != nullptr); + FunctionBody * functionParent = functionInfoParent->GetFunctionBody(); ScriptContext * scriptContext = stackScriptFunction->GetScriptContext(); ScriptFunction * boxedFunction; @@ -124,14 +125,15 @@ namespace Js for (uint i = 0; i < current->GetNestedCount(); i++) { - FunctionProxy * nested = current->GetNestedFunc(i); - functionObjectToBox.Add(nested->GetFunctionProxy()); + FunctionProxy * nested = current->GetNestedFunctionProxy(i); + functionObjectToBox.Add(nested); if (nested->IsFunctionBody()) { nested->GetFunctionBody()->ClearStackNestedFuncParent(); } } - current = current->GetAndClearStackNestedFuncParent(); + FunctionInfo * functionInfo = current->GetAndClearStackNestedFuncParent(); + current = functionInfo ? functionInfo->GetFunctionBody() : nullptr; } while (current && current->DoStackNestedFunc()); } @@ -143,7 +145,7 @@ namespace Js bool StackScriptFunction::BoxState::NeedBoxScriptFunction(ScriptFunction * scriptFunction) { - return functionObjectToBox.Contains(scriptFunction->GetFunctionProxy()->GetFunctionProxy()); + return functionObjectToBox.Contains(scriptFunction->GetFunctionProxy()); } void StackScriptFunction::BoxState::Box() @@ -727,15 +729,14 @@ namespace Js Output::Flush(); } - // Make sure we use the latest function proxy (if it is parsed or deserialized) - FunctionProxy * functionBody = stackFunction->GetFunctionProxy()->GetFunctionProxy(); - boxedFunction = ScriptFunction::OP_NewScFunc(boxedFrameDisplay, &functionBody); + FunctionInfo * functionInfo = stackFunction->GetFunctionInfo(); + boxedFunction = ScriptFunction::OP_NewScFunc(boxedFrameDisplay, &functionInfo); stackFunction->boxedScriptFunction = boxedFunction; stackFunction->SetEnvironment(boxedFrameDisplay); return boxedFunction; } - ScriptFunction * StackScriptFunction::OP_NewStackScFunc(FrameDisplay *environment, FunctionProxy** proxyRef, ScriptFunction * stackFunction) + ScriptFunction * StackScriptFunction::OP_NewStackScFunc(FrameDisplay *environment, FunctionInfoPtrPtr infoRef, ScriptFunction * stackFunction) { if (stackFunction) { @@ -743,7 +744,7 @@ namespace Js char16 debugStringBuffer[MAX_FUNCTION_BODY_DEBUG_STRING_SIZE]; #endif - FunctionProxy* functionProxy = (*proxyRef); + FunctionProxy* functionProxy = (*infoRef)->GetFunctionProxy(); AssertMsg(functionProxy != nullptr, "BYTE-CODE VERIFY: Must specify a valid function to create"); Assert(stackFunction->GetFunctionInfo()->GetFunctionProxy() == functionProxy); Assert(!functionProxy->IsFunctionBody() || functionProxy->GetFunctionBody()->GetStackNestedFuncParentStrongRef() != nullptr); @@ -757,7 +758,7 @@ namespace Js functionProxy->GetDebugNumberSet(debugStringBuffer), stackFunction); return stackFunction; } - return ScriptFunction::OP_NewScFunc(environment, proxyRef); + return ScriptFunction::OP_NewScFunc(environment, infoRef); } #if ENABLE_TTD diff --git a/lib/Runtime/Library/StackScriptFunction.h b/lib/Runtime/Library/StackScriptFunction.h index 98eea153090..dbd95f28c13 100644 --- a/lib/Runtime/Library/StackScriptFunction.h +++ b/lib/Runtime/Library/StackScriptFunction.h @@ -16,7 +16,7 @@ namespace Js static JavascriptFunction * EnsureBoxed(BOX_PARAM(JavascriptFunction * function, void * returnAddress, char16 const * reason)); static void Box(FunctionBody * functionBody, ScriptFunction ** functionRef); - static ScriptFunction * OP_NewStackScFunc(FrameDisplay *environment, FunctionProxy** proxyRef, ScriptFunction * stackFunction); + static ScriptFunction * OP_NewStackScFunc(FrameDisplay *environment, FunctionInfoPtrPtr infoRef, ScriptFunction * stackFunction); static uint32 GetOffsetOfBoxedScriptFunction() { return offsetof(StackScriptFunction, boxedScriptFunction); } static JavascriptFunction * GetCurrentFunctionObject(JavascriptFunction * function); diff --git a/lib/Runtime/Runtime.h b/lib/Runtime/Runtime.h index ffef36c263f..58f4f3db93c 100644 --- a/lib/Runtime/Runtime.h +++ b/lib/Runtime/Runtime.h @@ -243,6 +243,7 @@ namespace Js struct TickDelta; class ByteBlock; class FunctionInfo; + class FunctionProxy; class FunctionBody; class ParseableFunctionInfo; struct StatementLocation; diff --git a/lib/Runtime/SerializableFunctionFields.h b/lib/Runtime/SerializableFunctionFields.h index 50174c8e0fd..ca44565e88d 100644 --- a/lib/Runtime/SerializableFunctionFields.h +++ b/lib/Runtime/SerializableFunctionFields.h @@ -37,6 +37,7 @@ PROTECTED_FIELDS DECLARE_SERIALIZABLE_FIELD(charcount_t, m_cchLength, CharCount); // length of the function in code points (not bytes) DECLARE_SERIALIZABLE_FIELD(uint, m_cbLength, UInt32); // length of the function in bytes DECLARE_SERIALIZABLE_FIELD(uint, m_displayShortNameOffset, UInt32); // Offset into the display name where the short name is found + DECLARE_SERIALIZABLE_FIELD(FunctionBodyFlags, flags, FunctionBodyFlags); PUBLIC_FIELDS DECLARE_SERIALIZABLE_FIELD(UINT, scopeSlotArraySize, UInt32); @@ -67,7 +68,6 @@ PRIVATE_FIELDS DECLARE_SERIALIZABLE_FIELD(ProfileId, profiledReturnTypeCount, UInt16); DECLARE_SERIALIZABLE_FIELD(ProfileId, profiledSlotCount, UInt16); DECLARE_SERIALIZABLE_ACCESSOR_FIELD(uint, LoopCount, RegSlot); - DECLARE_SERIALIZABLE_FIELD(FunctionBodyFlags, flags, FunctionBodyFlags); DECLARE_SERIALIZABLE_FIELD(bool, m_hasFinally, Bool); DECLARE_SERIALIZABLE_FIELD(bool, hasScopeObject, Bool); DECLARE_SERIALIZABLE_FIELD(bool, hasCachedScopePropIds, Bool); diff --git a/lib/Runtime/Types/ScriptFunctionType.cpp b/lib/Runtime/Types/ScriptFunctionType.cpp index fd76a03654a..76c7eb57731 100644 --- a/lib/Runtime/Types/ScriptFunctionType.cpp +++ b/lib/Runtime/Types/ScriptFunctionType.cpp @@ -21,7 +21,7 @@ namespace Js ScriptFunctionType * ScriptFunctionType::New(FunctionProxy * proxy, bool isShared) { - Assert(proxy->GetFunctionProxy() == proxy); + Assert(proxy->GetFunctionInfo()->GetFunctionProxy() == proxy); ScriptContext * scriptContext = proxy->GetScriptContext(); JavascriptLibrary * library = scriptContext->GetLibrary(); DynamicObject * functionPrototype = proxy->IsAsync() ? library->GetAsyncFunctionPrototype() : library->GetFunctionPrototype(); diff --git a/test/DebuggerCommon/returnedvaluetests4.js.dbg.baseline b/test/DebuggerCommon/returnedvaluetests4.js.dbg.baseline index f3e73faeae7..65dacc2ab27 100644 --- a/test/DebuggerCommon/returnedvaluetests4.js.dbg.baseline +++ b/test/DebuggerCommon/returnedvaluetests4.js.dbg.baseline @@ -9,9 +9,6 @@ { "this": "Object {...}", "arguments": "Object {...}", - "functionCallsReturn": { - "[Date returned]": "string " - }, "locals": { "a": "string " } @@ -40,9 +37,6 @@ { "this": "Object {...}", "arguments": "Object {...}", - "functionCallsReturn": { - "[Array returned]": "Array [a,b]" - }, "locals": { "arr": "Array [a,b]", "str": "undefined undefined", diff --git a/test/DebuggerCommon/step_in_from_interpreted_function_attach.js.dbg.baseline b/test/DebuggerCommon/step_in_from_interpreted_function_attach.js.dbg.baseline index e56510ffabe..93b6a151b3b 100644 --- a/test/DebuggerCommon/step_in_from_interpreted_function_attach.js.dbg.baseline +++ b/test/DebuggerCommon/step_in_from_interpreted_function_attach.js.dbg.baseline @@ -99,62 +99,6 @@ } }, "[Return value]": "undefined undefined", - "functionCallsReturn": { - "[Date returned]": { - "#__proto__": { - "#__proto__": "Object {...}", - "constructor": "function ", - "getDate": "function ", - "getDay": "function ", - "getFullYear": "function ", - "getHours": "function ", - "getMilliseconds": "function ", - "getMinutes": "function ", - "getMonth": "function ", - "getSeconds": "function ", - "getTime": "function ", - "getTimezoneOffset": "function ", - "getUTCDate": "function ", - "getUTCDay": "function ", - "getUTCFullYear": "function ", - "getUTCHours": "function ", - "getUTCMilliseconds": "function ", - "getUTCMinutes": "function ", - "getUTCMonth": "function ", - "getUTCSeconds": "function ", - "getVarDate": "function ", - "getYear": "function ", - "setDate": "function ", - "setFullYear": "function ", - "setHours": "function ", - "setMilliseconds": "function ", - "setMinutes": "function ", - "setMonth": "function ", - "setSeconds": "function ", - "setTime": "function ", - "setUTCDate": "function ", - "setUTCFullYear": "function ", - "setUTCHours": "function ", - "setUTCMilliseconds": "function ", - "setUTCMinutes": "function ", - "setUTCMonth": "function ", - "setUTCSeconds": "function ", - "setYear": "function ", - "toDateString": "function ", - "toISOString": "function ", - "toJSON": "function ", - "toLocaleDateString": "function ", - "toLocaleString": "function ", - "toLocaleTimeString": "function ", - "toString": "function ", - "toTimeString": "function ", - "toUTCString": "function ", - "toGMTString": "function ", - "valueOf": "function ", - "Symbol.toPrimitive": "function " - } - } - }, "locals": { "a": "string bar", "b": {