diff --git a/.gitmodules b/.gitmodules deleted file mode 100644 index 9d52f04..0000000 --- a/.gitmodules +++ /dev/null @@ -1,6 +0,0 @@ -[submodule "Dobby"] - path = Dobby - url = https://github.com/jmpews/Dobby -[submodule "deps/Dobby"] - path = deps/Dobby - url = https://github.com/jmpews/Dobby diff --git a/CMakeLists.txt b/CMakeLists.txt index 58a67c2..7ade1f0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,19 +1,6 @@ cmake_minimum_required(VERSION 3.20) -project(Configurer64) - -set(DOBBY_GENERATE_SHARED OFF CACHE BOOL "" FORCE) -set(DOBBY_DEBUG OFF CACHE BOOL "" FORCE) -set(NearBranch ON CACHE BOOL "" FORCE) -set(DynamicBinaryInstrument OFF CACHE BOOL "" FORCE) -set(FullFloatingPointRegisterPack OFF CACHE BOOL "" FORCE) -set(EnableObfuscation OFF CACHE BOOL "" FORCE) -set(Plugin.SymbolResolver OFF CACHE BOOL "" FORCE) -set(Plugin.GlobalOffsetTableHook ON CACHE BOOL "" FORCE) -set(Plugin.LinkerLoadCallback OFF CACHE BOOL "" FORCE) -set(Plugin.ApplicationEventMonitor OFF CACHE BOOL "" FORCE) -set(Plugin.Android.BionicLinkerRestriction OFF CACHE BOOL "" FORCE) -add_subdirectory(deps/Dobby) +project(UIWarp) add_library(${PROJECT_NAME} SHARED src/main.cpp @@ -28,9 +15,12 @@ target_compile_options(${PROJECT_NAME} PRIVATE -fvisibility-inlines-hidden ) -target_compile_options(${PROJECT_NAME} PRIVATE - -fpass-plugin=${CMAKE_SOURCE_DIR}/ollvm.dylib -) +# Add OLLVM plugin if exists +if (EXISTS ${CMAKE_SOURCE_DIR}/ollvm.dylib) + target_compile_options(${PROJECT_NAME} PRIVATE + -fpass-plugin=${CMAKE_SOURCE_DIR}/ollvm.dylib + ) +endif() target_link_libraries(${PROJECT_NAME} PRIVATE "-framework Foundation" @@ -41,9 +31,4 @@ target_link_libraries(${PROJECT_NAME} PRIVATE target_link_libraries(${PROJECT_NAME} PRIVATE objc - dobby -) - -target_include_directories(${PROJECT_NAME} PRIVATE - ${CMAKE_SOURCE_DIR}/Dobby/include ) diff --git a/assets/PDFM.background.png b/assets/PDFM.background.png index 981fe08..a920f12 100644 Binary files a/assets/PDFM.background.png and b/assets/PDFM.background.png differ diff --git a/crack/pdfm-18.0.1.53056/prl_client_app b/crack/pdfm-18.0.1.53056/prl_client_app new file mode 100644 index 0000000..699b311 Binary files /dev/null and b/crack/pdfm-18.0.1.53056/prl_client_app differ diff --git a/crack/pdfm-18.0.1.53056/prl_client_app.md b/crack/pdfm-18.0.1.53056/prl_client_app.md new file mode 100644 index 0000000..fae08af --- /dev/null +++ b/crack/pdfm-18.0.1.53056/prl_client_app.md @@ -0,0 +1,96 @@ +# patch prl_client_app + +## 1. patch /usr/bin/codesign verify + +find string xref to "/usr/bin/codesign" + +### x86_64 + +``` +__text:000000010093B8D0 55 push rbp +__text:000000010093B8D1 48 89 E5 mov rbp, rsp +__text:000000010093B8D4 41 57 push r15 +__text:000000010093B8D6 41 56 push r14 +__text:000000010093B8D8 41 55 push r13 +__text:000000010093B8DA 41 54 push r12 +__text:000000010093B8DC 53 push rbx +__text:000000010093B8DD 48 81 EC 38 04 00 00 sub rsp, 438h +__text:000000010093B8E4 4C 89 85 B8 FB FF FF mov [rbp+var_448], r8 +__text:000000010093B8EB 48 89 8D B0 FB FF FF mov [rbp+var_450], rcx +__text:000000010093B8F2 48 89 95 A8 FB FF FF mov [rbp+var_458], rdx +__text:000000010093B8F9 41 89 F4 mov r12d, esi +__text:000000010093B8FC 48 89 FB mov rbx, rdi +__text:000000010093B8FF 48 8B 05 F2 91 B7 01 mov rax, cs:___stack_chk_guard_ptr +__text:000000010093B906 48 8B 00 mov rax, [rax] +__text:000000010093B909 48 89 45 D0 mov [rbp+var_30], rax +__text:000000010093B90D 48 8B 0D AC D9 C6 01 mov rcx, cs:off_1025A92C0 ; "4C6364ACXT" +__text:000000010093B914 48 8D 15 AC F2 18 00 lea rdx, aAnchorAppleGen_0 ; "=anchor apple generic and certificate l"... +__text:000000010093B91B 45 31 F6 xor r14d, r14d +__text:000000010093B91E 48 8D BD D0 FB FF FF lea rdi, [rbp+__str] ; __str +__text:000000010093B925 BE 00 04 00 00 mov esi, 400h ; __size +__text:000000010093B92A 31 C0 xor eax, eax +__text:000000010093B92C E8 11 A0 01 00 call _snprintf +__text:000000010093B931 48 C7 85 C0 FB FF FF 00+ mov [rbp+staticCode], 0 +__text:000000010093B931 00 00 00 +__text:000000010093B93C 48 8D 3D 72 F2 18 00 lea rdi, __file ; "/usr/bin/codesign" +__text:000000010093B943 BE 01 00 00 00 mov esi, 1 ; int +__text:000000010093B948 E8 73 9A 01 00 call _access +__text:000000010093B94D 85 C0 test eax, eax +__text:000000010093B94F 74 29 jz short loc_10093B97A +``` + +after + + +``` +__text:000000010093B8D0 sub_10093B8D0 proc near ; CODE XREF: sub_10093B890+11↑j +__text:000000010093B8D0 ; sub_10093B8B0+C↑j +__text:000000010093B8D0 6A 01 push 1 +__text:000000010093B8D2 58 pop rax +__text:000000010093B8D3 C3 retn +__text:000000010093B8D3 sub_10093B8D0 endp +``` + +### arm64 + +``` +__text:0000000100977800 FA 67 BB A9 STP X26, X25, [SP,#-0x10+var_40]! +__text:0000000100977804 F8 5F 01 A9 STP X24, X23, [SP,#0x40+var_30] +__text:0000000100977808 F6 57 02 A9 STP X22, X21, [SP,#0x40+var_20] +__text:000000010097780C F4 4F 03 A9 STP X20, X19, [SP,#0x40+var_10] +__text:0000000100977810 FD 7B 04 A9 STP X29, X30, [SP,#0x40+var_s0] +__text:0000000100977814 FD 03 01 91 ADD X29, SP, #0x40 +__text:0000000100977818 FF 43 11 D1 SUB SP, SP, #0x450 +__text:000000010097781C F6 03 04 AA MOV X22, X4 +__text:0000000100977820 F7 03 03 AA MOV X23, X3 +__text:0000000100977824 F4 03 02 AA MOV X20, X2 +__text:0000000100977828 F5 03 01 AA MOV X21, X1 +__text:000000010097782C F3 03 00 AA MOV X19, X0 +__text:0000000100977830 48 DB 00 B0 ADRP X8, #___stack_chk_guard_ptr@PAGE +__text:0000000100977834 08 69 45 F9 LDR X8, [X8,#___stack_chk_guard_ptr@PAGEOFF] +__text:0000000100977838 08 01 40 F9 LDR X8, [X8] +__text:000000010097783C A8 83 1B F8 STUR X8, [X29,#var_48] +__text:0000000100977840 E8 E2 00 D0 ADRP X8, #off_1025D5358@PAGE ; "4C6364ACXT" +__text:0000000100977844 08 AD 41 F9 LDR X8, [X8,#off_1025D5358@PAGEOFF] ; "4C6364ACXT" +__text:0000000100977848 E8 03 00 F9 STR X8, [SP,#0x490+var_490] +__text:000000010097784C C2 D9 00 F0 42 4C 3C 91 ADRL X2, aAnchorAppleGen_0 ; "=anchor apple generic and certificate l"... +__text:0000000100977854 E0 23 01 91 ADD X0, SP, #0x490+__str ; __str +__text:0000000100977858 01 80 80 52 MOV W1, #0x400 ; __size +__text:000000010097785C E1 7D 00 94 BL _snprintf +__text:0000000100977860 FF 1F 00 F9 STR XZR, [SP,#0x490+staticCode] +__text:0000000100977864 C0 D9 00 F0 00 04 3C 91 ADRL X0, aUsrBinCodesign ; "/usr/bin/codesign" +__text:000000010097786C 21 00 80 52 MOV W1, #1 ; int +__text:0000000100977870 1B 7B 00 94 BL _access +__text:0000000100977874 E0 01 00 34 CBZ W0, loc_1009778B0 +``` + +after + +``` +__text:0000000100977800 sub_100977800 ; CODE XREF: sub_1009777DC+10↑j +__text:0000000100977800 ; sub_1009777F0+C↑j +__text:0000000100977800 20 00 80 D2 MOV X0, #1 +__text:0000000100977804 C0 03 5F D6 RET +__text:0000000100977804 ; End of function sub_100977800 +``` + diff --git a/crack/pdfm-18.0.1.53056/prl_disp_service b/crack/pdfm-18.0.1.53056/prl_disp_service new file mode 100644 index 0000000..432d434 Binary files /dev/null and b/crack/pdfm-18.0.1.53056/prl_disp_service differ diff --git a/crack/pdfm-18.0.1.53056/prl_disp_service.md b/crack/pdfm-18.0.1.53056/prl_disp_service.md new file mode 100644 index 0000000..e1cdac8 --- /dev/null +++ b/crack/pdfm-18.0.1.53056/prl_disp_service.md @@ -0,0 +1,202 @@ +# patch prl_disp_app + +## 1. patch /usr/bin/codesign verify + +find string xref to "/usr/bin/codesign" + +### x86_64 + +``` +__text:00000001007C9280 55 push rbp +__text:00000001007C9281 48 89 E5 mov rbp, rsp +__text:00000001007C9284 41 57 push r15 +__text:00000001007C9286 41 56 push r14 +__text:00000001007C9288 41 55 push r13 +__text:00000001007C928A 41 54 push r12 +__text:00000001007C928C 53 push rbx +__text:00000001007C928D 48 81 EC 38 04 00 00 sub rsp, 438h +__text:00000001007C9294 4C 89 85 B8 FB FF FF mov [rbp+var_448], r8 +__text:00000001007C929B 48 89 8D B0 FB FF FF mov [rbp+var_450], rcx +__text:00000001007C92A2 48 89 95 A8 FB FF FF mov [rbp+var_458], rdx +__text:00000001007C92A9 41 89 F4 mov r12d, esi +__text:00000001007C92AC 48 89 FB mov rbx, rdi +__text:00000001007C92AF 48 8B 05 7A 70 1C 00 mov rax, cs:___stack_chk_guard_ptr +__text:00000001007C92B6 48 8B 00 mov rax, [rax] +__text:00000001007C92B9 48 89 45 D0 mov [rbp+var_30], rax +__text:00000001007C92BD 48 8B 0D B4 83 27 00 mov rcx, cs:off_100A41678 ; "4C6364ACXT" +__text:00000001007C92C4 48 8D 15 C4 2A 15 00 lea rdx, aAnchorAppleGen_0 ; "=anchor apple generic and certificate l"... +__text:00000001007C92CB 45 31 F6 xor r14d, r14d +__text:00000001007C92CE 48 8D BD D0 FB FF FF lea rdi, [rbp+__str] ; __str +__text:00000001007C92D5 BE 00 04 00 00 mov esi, 400h ; __size +__text:00000001007C92DA 31 C0 xor eax, eax +__text:00000001007C92DC E8 73 CA 01 00 call _snprintf +__text:00000001007C92E1 48 C7 85 C0 FB FF FF 00+ mov [rbp+staticCode], 0 +__text:00000001007C92E1 00 00 00 +__text:00000001007C92EC 48 8D 3D 8A 2A 15 00 lea rdi, __file ; "/usr/bin/codesign" +__text:00000001007C92F3 BE 01 00 00 00 mov esi, 1 ; int +__text:00000001007C92F8 E8 3F C4 01 00 call _access +__text:00000001007C92FD 85 C0 test eax, eax +__text:00000001007C92FF 74 29 jz short loc_1007C932A +``` + +after + +``` +__text:00000001007C9280 sub_1007C9280 proc near ; CODE XREF: sub_100175930+28F↑p +__text:00000001007C9280 6A 01 push 1 +__text:00000001007C9282 58 pop rax +__text:00000001007C9283 C3 retn +__text:00000001007C9283 sub_1007C9280 endp +``` + +### arm64 + +``` +__text:00000001007B3A14 FA 67 BB A9 STP X26, X25, [SP,#-0x10+var_40]! +__text:00000001007B3A18 F8 5F 01 A9 STP X24, X23, [SP,#0x40+var_30] +__text:00000001007B3A1C F6 57 02 A9 STP X22, X21, [SP,#0x40+var_20] +__text:00000001007B3A20 F4 4F 03 A9 STP X20, X19, [SP,#0x40+var_10] +__text:00000001007B3A24 FD 7B 04 A9 STP X29, X30, [SP,#0x40+var_s0] +__text:00000001007B3A28 FD 03 01 91 ADD X29, SP, #0x40 +__text:00000001007B3A2C FF 43 11 D1 SUB SP, SP, #0x450 +__text:00000001007B3A30 F6 03 04 AA MOV X22, X4 +__text:00000001007B3A34 F7 03 03 AA MOV X23, X3 +__text:00000001007B3A38 F4 03 02 AA MOV X20, X2 +__text:00000001007B3A3C F5 03 01 AA MOV X21, X1 +__text:00000001007B3A40 F3 03 00 AA MOV X19, X0 +__text:00000001007B3A44 C8 0D 00 B0 ADRP X8, #___stack_chk_guard_ptr@PAGE +__text:00000001007B3A48 08 6D 41 F9 LDR X8, [X8,#___stack_chk_guard_ptr@PAGEOFF] +__text:00000001007B3A4C 08 01 40 F9 LDR X8, [X8] +__text:00000001007B3A50 A8 83 1B F8 STUR X8, [X29,#var_48] +__text:00000001007B3A54 48 13 00 D0 ADRP X8, #off_100A1DB18@PAGE ; "4C6364ACXT" +__text:00000001007B3A58 08 8D 45 F9 LDR X8, [X8,#off_100A1DB18@PAGEOFF] ; "4C6364ACXT" +__text:00000001007B3A5C E8 03 00 F9 STR X8, [SP,#0x490+var_490] +__text:00000001007B3A60 C2 0C 00 90 42 18 34 91 ADRL X2, aAnchorAppleGen_0 ; "=anchor apple generic and certificate l"... +__text:00000001007B3A68 E0 23 01 91 ADD X0, SP, #0x490+__str ; __str +__text:00000001007B3A6C 01 80 80 52 MOV W1, #0x400 ; __size +__text:00000001007B3A70 AA 76 00 94 BL _snprintf +__text:00000001007B3A74 FF 1F 00 F9 STR XZR, [SP,#0x490+staticCode] +__text:00000001007B3A78 C0 0C 00 90 00 D0 33 91 ADRL X0, aUsrBinCodesign ; "/usr/bin/codesign" +__text:00000001007B3A80 21 00 80 52 MOV W1, #1 ; int +__text:00000001007B3A84 93 73 00 94 BL _access +__text:00000001007B3A88 E0 01 00 34 CBZ W0, loc_1007B3AC4 +__text:00000001007B3A8C +``` + +after + +``` +__text:00000001007B3A14 sub_1007B3A14 ; CODE XREF: sub_10018297C+2D4↑p +__text:00000001007B3A14 20 00 80 D2 MOV X0, #1 +__text:00000001007B3A18 C0 03 5F D6 RET +__text:00000001007B3A18 ; End of function sub_1007B3A14 +``` + +## 2. patch Signature::SignCheckerImpl + +### 2.1 find vtable + +x86_64 + +``` +__const:00000001009B2A70 ; `vtable for'Signature::SignCheckerImpl +__const:00000001009B2A70 00 00 00 00 00 00 00 00 _ZTVN9Signature15SignCheckerImplE dq 0 ; DATA XREF: sub_100349A00+28↑o +__const:00000001009B2A70 ; offset to this +__const:00000001009B2A78 A8 2A 9B 00 01 00 00 00 dq offset _ZTIN9Signature15SignCheckerImplE ; `typeinfo for'Signature::SignCheckerImpl +__const:00000001009B2A80 00 0B 5B 00 01 00 00 00 dq offset sub_1005B0B00 +__const:00000001009B2A88 10 0B 5B 00 01 00 00 00 dq offset sub_1005B0B10 +__const:00000001009B2A90 80 07 5B 00 01 00 00 00 dq offset sub_1005B0780 +``` + +arm64 + +``` + +``` + +### 2.2 patch function `sub_1005B0780` + +x86_64 + +``` +__text:00000001005B0780 55 push rbp +__text:00000001005B0781 48 89 E5 mov rbp, rsp +__text:00000001005B0784 41 57 push r15 +__text:00000001005B0786 41 56 push r14 +__text:00000001005B0788 41 54 push r12 +__text:00000001005B078A 53 push rbx +__text:00000001005B078B 48 81 EC A0 00 00 00 sub rsp, 0A0h +__text:00000001005B0792 49 89 CE mov r14, rcx +__text:00000001005B0795 49 89 D7 mov r15, rdx +__text:00000001005B0798 49 89 F4 mov r12, rsi +__text:00000001005B079B BF D0 0A 00 00 mov edi, 0AD0h ; unsigned __int64 +__text:00000001005B07A0 E8 D7 4E 23 00 call __Znwm ; operator new(ulong) +__text:00000001005B07A5 48 89 C3 mov rbx, rax +__text:00000001005B07A8 48 89 45 A0 mov [rbp+var_60], rax +__text:00000001005B07AC 0F 28 05 DD 8F 38 00 movaps xmm0, cs:xmmword_100939790 +__text:00000001005B07B3 0F 29 45 90 movaps [rbp+var_70], xmm0 +__text:00000001005B07B7 48 8D 35 58 8F 31 00 lea rsi, aBeginCertifica ; "-----BEGIN CERTIFICATE-----\nMIIHzTCCBb"... +__text:00000001005B07BE BA CC 0A 00 00 mov edx, 0ACCh ; __n +__text:00000001005B07C3 48 89 C7 mov rdi, rax ; __dst +__text:00000001005B07C6 E8 3D 53 23 00 call _memcpy +__text:00000001005B07CB C6 83 CC 0A 00 00 00 mov byte ptr [rbx+0ACCh], 0 +__text:00000001005B07D2 48 8D BD 48 FF FF FF lea rdi, [rbp+var_B8] +__text:00000001005B07D9 48 8D 75 90 lea rsi, [rbp+var_70] +__text:00000001005B07DD E8 CE 07 00 00 call sub_1005B0FB0 +__text:00000001005B07E2 F6 45 90 01 test byte ptr [rbp+var_70], 1 +__text:00000001005B07E6 74 09 jz short loc_1005B07F1 +__text:00000001005B07E8 48 8B 7D A0 mov rdi, [rbp+var_60] ; void * +__text:00000001005B07EC E8 61 4E 23 00 call __ZdlPv ; operator delete(void *) +__text:00000001005B07F1 +``` + +after + +``` +__text:00000001005B0780 sub_1005B0780 proc near ; DATA XREF: __const:00000001009B2A90↓o +__text:00000001005B0780 6A 01 push 1 +__text:00000001005B0782 58 pop rax +__text:00000001005B0783 C3 retn +__text:00000001005B0783 sub_1005B0780 endp +``` + +arm64 + +``` +__text:00000001005DE584 FF 03 03 D1 SUB SP, SP, #0xC0 +__text:00000001005DE588 F6 57 09 A9 STP X22, X21, [SP,#0xB0+var_20] +__text:00000001005DE58C F4 4F 0A A9 STP X20, X19, [SP,#0xB0+var_10] +__text:00000001005DE590 FD 7B 0B A9 STP X29, X30, [SP,#0xB0+var_s0] +__text:00000001005DE594 FD C3 02 91 ADD X29, SP, #0xB0 +__text:00000001005DE598 F3 03 03 AA MOV X19, X3 +__text:00000001005DE59C F4 03 02 AA MOV X20, X2 +__text:00000001005DE5A0 F5 03 01 AA MOV X21, X1 +__text:00000001005DE5A4 00 5A 81 52 MOV W0, #0xAD0 ; unsigned __int64 +__text:00000001005DE5A8 70 C8 07 94 BL __Znwm ; operator new(ulong) +__text:00000001005DE5AC F6 03 00 AA MOV X22, X0 +__text:00000001005DE5B0 E0 2B 00 F9 STR X0, [SP,#0xB0+var_60] +__text:00000001005DE5B4 E8 10 00 B0 ADRP X8, #xmmword_1007FB2D0@PAGE +__text:00000001005DE5B8 00 B5 C0 3D LDR Q0, [X8,#xmmword_1007FB2D0@PAGEOFF] +__text:00000001005DE5BC E0 83 85 3C STUR Q0, [SP,#0xB0+var_58] +__text:00000001005DE5C0 C1 18 00 F0 21 84 25 91 ADRL X1, aBeginCertifica ; "-----BEGIN CERTIFICATE-----\nMIIHzTCCBb"... +__text:00000001005DE5C8 82 59 81 52 MOV W2, #0xACC ; __n +__text:00000001005DE5CC A7 CA 07 94 BL _memcpy +__text:00000001005DE5D0 DF 32 2B 39 STRB WZR, [X22,#0xACC] +__text:00000001005DE5D4 A0 23 01 D1 SUB X0, X29, #-var_48 +__text:00000001005DE5D8 E1 43 01 91 ADD X1, SP, #0xB0+var_60 +__text:00000001005DE5DC 00 02 00 94 BL j___ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC1ERKS5_ ; std::string::basic_string(std::string const&) +__text:00000001005DE5E0 E8 9F C1 39 LDRSB W8, [SP,#0xB0+var_58+0xF] +__text:00000001005DE5E4 68 00 F8 36 TBZ W8, #0x1F, loc_1005DE5F0 +__text:00000001005DE5E8 E0 2B 40 F9 LDR X0, [SP,#0xB0+var_60] ; void * +__text:00000001005DE5EC 4A C8 07 94 BL __ZdlPv ; operator delete(void *) +__text:00000001005DE5F0 +``` + +after + +``` +__text:00000001005DE584 sub_1005DE584 ; DATA XREF: __const:0000000100988540↓o +__text:00000001005DE584 20 00 80 D2 MOV X0, #1 +__text:00000001005DE588 C0 03 5F D6 RET +__text:00000001005DE588 ; End of function sub_1005DE584 +``` diff --git a/deps/Dobby b/deps/Dobby deleted file mode 160000 index 223aabc..0000000 --- a/deps/Dobby +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 223aabced0431525c7d45196f9409fc505d58ac8 diff --git a/entitlements/ParallelsDesktop/ParallelsDesktop.entitlements b/entitlements/ParallelsDesktop/ParallelsDesktop.entitlements new file mode 100644 index 0000000..ba165b6 --- /dev/null +++ b/entitlements/ParallelsDesktop/ParallelsDesktop.entitlements @@ -0,0 +1,33 @@ + + + + + + com.apple.security.automation.apple-events + + com.apple.security.device.audio-input + + com.apple.security.device.camera + + + diff --git a/entitlements/ParallelsDesktop/ParallelsMacVM.entitlements b/entitlements/ParallelsDesktop/ParallelsMacVM.entitlements new file mode 100644 index 0000000..4838721 --- /dev/null +++ b/entitlements/ParallelsDesktop/ParallelsMacVM.entitlements @@ -0,0 +1,14 @@ + + + + + com.apple.security.app-sandbox + + com.apple.security.virtualization + + + + diff --git a/entitlements/ParallelsDesktop/ParallelsService.entitlements b/entitlements/ParallelsDesktop/ParallelsService.entitlements new file mode 100644 index 0000000..7205e03 --- /dev/null +++ b/entitlements/ParallelsDesktop/ParallelsService.entitlements @@ -0,0 +1,8 @@ + + + + + com.apple.security.smartcard + + + diff --git a/entitlements/ParallelsDesktop/ParallelsVM.entitlements b/entitlements/ParallelsDesktop/ParallelsVM.entitlements new file mode 100644 index 0000000..310f693 --- /dev/null +++ b/entitlements/ParallelsDesktop/ParallelsVM.entitlements @@ -0,0 +1,20 @@ + + + + + + com.apple.security.cs.allow-unsigned-executable-memory + + com.apple.security.hypervisor + + com.apple.vm.device-access + + + diff --git a/entitlements/ParallelsDesktop/ParallelsVM1014.entitlements b/entitlements/ParallelsDesktop/ParallelsVM1014.entitlements new file mode 100644 index 0000000..a1c430a --- /dev/null +++ b/entitlements/ParallelsDesktop/ParallelsVM1014.entitlements @@ -0,0 +1,8 @@ + + + + + com.apple.security.cs.allow-unsigned-executable-memory + + + diff --git a/entitlements/ParallelsDesktop/gen.sh b/entitlements/ParallelsDesktop/gen.sh new file mode 100644 index 0000000..9c8deaa --- /dev/null +++ b/entitlements/ParallelsDesktop/gen.sh @@ -0,0 +1,7 @@ +#!/bin/sh + +codesign -d --entitlements - --xml "/Volumes/Parallels Desktop 18/Parallels Desktop.app/Contents/MacOS/Parallels Mac VM.app" 2>/dev/null | plutil -convert xml1 -o - - > ParallelsMacVM.entitlements +codesign -d --entitlements - --xml "/Volumes/Parallels Desktop 18/Parallels Desktop.app/Contents/MacOS/Parallels Service.app" 2>/dev/null | plutil -convert xml1 -o - - > ParallelsService.entitlements +codesign -d --entitlements - --xml "/Volumes/Parallels Desktop 18/Parallels Desktop.app/Contents/MacOS/Parallels VM 10.14.app" 2>/dev/null | plutil -convert xml1 -o - - > ParallelsVM1014.entitlements +codesign -d --entitlements - --xml "/Volumes/Parallels Desktop 18/Parallels Desktop.app/Contents/MacOS/Parallels VM.app" 2>/dev/null | plutil -convert xml1 -o - - > ParallelsVM.entitlements +codesign -d --entitlements - --xml "/Volumes/Parallels Desktop 18/Parallels Desktop.app" 2>/dev/null | plutil -convert xml1 -o - - > ParallelsDesktop.entitlements diff --git a/entitlements/ParallelsDesktop/pd.provisionprofile b/entitlements/ParallelsDesktop/pd.provisionprofile new file mode 100644 index 0000000..45bc1ba Binary files /dev/null and b/entitlements/ParallelsDesktop/pd.provisionprofile differ diff --git a/readme.md b/readme.md index 9438a85..7960b41 100644 --- a/readme.md +++ b/readme.md @@ -1,10 +1,28 @@ # Parallels Desktop Crack -Crack for Parallels Desktop 17.1.4 51567 & Toolbox 5.5.1 4410. +Crack for Parallels Desktop. -Only work for Intel macOS. +[x] Support Intel & Apple Silicon (M1) +[ ] Network problem +[ ] USB problem + + +# Network & USB problem + +Parallels Desktop new version use Apple's hypervisor framework vmnet API need a paid Developer ID and request to Apple enable vmnet access permission. + +So i don't know how to bypass it. + +Here have a temp solution: + +``` +killall -9 prl_client_app +sudo sed -i '' 's|.*|0|' /Library/Preferences/Parallels/network.desktop.xml +sudo sed -i '' 's|.*|1|' /Library/Preferences/Parallels/dispatcher.desktop.xml +``` + +After this, network will work, USB only work with storage device. -I write some arm64 version patch code but i don't have arm64 macOS test, you can continue this work if you interested. # Build @@ -14,24 +32,22 @@ git submodule update --init --recursive ./scripts/build.bat ``` + # Install & Test ``` sudo ./scripts/install.sh ``` + # Publish DMG ``` +brew install create-dmg ./scripts/publish.sh ``` You can found packaged dmg file in `publish` folder. -``` -ParallelsDesktop-17.1.4-51567_Crack.dmg -ParallelsToolbox-5.5.1-4410_Crack.dmg -``` - Good Luck! diff --git a/scripts/build.sh b/scripts/build.sh index 40c093b..ddaab63 100644 --- a/scripts/build.sh +++ b/scripts/build.sh @@ -19,7 +19,6 @@ cmake -S "${ROOT_PATH}" -B "${ROOT_PATH}/build" \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_OSX_ARCHITECTURES="x86_64;arm64" \ -DCMAKE_OSX_DEPLOYMENT_TARGET="11.0" \ - -DLOGGING_DISABLE=1 \ && \ -cmake --build "${ROOT_PATH}/build" --target Configurer64 -j8 \ +cmake --build "${ROOT_PATH}/build" --target UIWarp -j8 \ && echo "[*] Build Success" diff --git a/scripts/install.sh b/scripts/install.sh index 0f423da..361a21c 100644 --- a/scripts/install.sh +++ b/scripts/install.sh @@ -4,12 +4,17 @@ CUR_PATH=$(cd "$(dirname $(readlink -f "$0"))" && pwd) ROOT_PATH=$(cd "${CUR_PATH}/../" && pwd) PTFM_APP_DIR="/Applications/Parallels Toolbox.app" PDFM_APP_DIR="/Applications/Parallels Desktop.app" -CRACK_LIB="${ROOT_PATH}/build/libConfigurer64.dylib" -# CODESIGN_CERT=B8474E27C322DFB3D4A0168127EB02DB877C3F81 +CRACK_LIB="${ROOT_PATH}/build/libUIWarp.dylib" +CRACK_LIB_DST_NAME="libUIWarp" + CODESIGN_CERT=- +if [ -n "$(security find-identity -v -p codesigning | grep B8474E27C322DFB3D4A0168127EB02DB877C3F81)" ]; then + CODESIGN_CERT=B8474E27C322DFB3D4A0168127EB02DB877C3F81 +fi + function sign_cmd() { - codesign -f -s ${CODESIGN_CERT} --all-architectures --deep "$1" + codesign -f -s ${CODESIGN_CERT} -o runtime --all-architectures --deep "$@" } function kill_ptfm_app() { @@ -27,8 +32,8 @@ function apply_ptfm_crack() { /usr/local/opt/llvm/bin/llvm-strip -s "${CRACK_LIB}" > /dev/null fi - RPATH="@rpath/libConfigurer64.dylib" - DST="${PTFM_APP_DIR}/Contents/Frameworks/libConfigurer64.dylib" + RPATH="@rpath/${CRACK_LIB_DST_NAME}.dylib" + DST="${PTFM_APP_DIR}/Contents/Frameworks/${CRACK_LIB_DST_NAME}.dylib" LOADER="${PTFM_APP_DIR}/Contents/Frameworks/libLogging.dylib" if ! grep -q "${RPATH}" "${LOADER}"; then @@ -47,8 +52,8 @@ function apply_pdfm_crack() { /usr/local/opt/llvm/bin/llvm-strip -s "${CRACK_LIB}" > /dev/null fi - RPATH="@rpath/libConfigurer64.dylib" - DST="${PDFM_APP_DIR}/Contents/Frameworks/libConfigurer64.dylib" + RPATH="@rpath/${CRACK_LIB_DST_NAME}.dylib" + DST="${PDFM_APP_DIR}/Contents/Frameworks/${CRACK_LIB_DST_NAME}.dylib" LOADER="${PDFM_APP_DIR}/Contents/Frameworks/QtXml.framework/Versions/5/QtXml" if ! grep -q "${RPATH}" "${LOADER}"; then @@ -121,14 +126,23 @@ function sign_ptfm() { function sign_pdfm() { echo "[*] Sign Parallels Desktop App" + sign_cmd "${PDFM_APP_DIR}/Contents/Library/QuickLook/ExeQL.qlgenerator" + sign_cmd "${PDFM_APP_DIR}/Contents/Library/QuickLook/ParallelsQL.qlgenerator" + sign_cmd "${PDFM_APP_DIR}/Contents/Resources/launchd_wrapper" + sign_cmd "${PDFM_APP_DIR}/Contents/Resources/libprl_shared_apps.dylib" + sign_cmd "${PDFM_APP_DIR}/Contents/Resources/lua/ssl.so" + sign_cmd "${PDFM_APP_DIR}/Contents/Resources/lua/mime/core.so" + sign_cmd "${PDFM_APP_DIR}/Contents/Resources/lua/socket/core.so" + sign_cmd "${PDFM_APP_DIR}/Contents/Resources/lua/socket/serial.so" + sign_cmd "${PDFM_APP_DIR}/Contents/Resources/lua/socket/unix.so" sign_cmd "${PDFM_APP_DIR}/Contents/Applications/Parallels Link.app" sign_cmd "${PDFM_APP_DIR}/Contents/Applications/Parallels Mounter.app" sign_cmd "${PDFM_APP_DIR}/Contents/Applications/Parallels Technical Data Reporter.app" - sign_cmd "${PDFM_APP_DIR}/Contents/MacOS/Parallels Mac VM.app" - sign_cmd "${PDFM_APP_DIR}/Contents/MacOS/Parallels Service.app" - sign_cmd "${PDFM_APP_DIR}/Contents/MacOS/Parallels VM 10.14.app" - sign_cmd "${PDFM_APP_DIR}/Contents/MacOS/Parallels VM.app" - sign_cmd "${PDFM_APP_DIR}" + sign_cmd --entitlements "${ROOT_PATH}/entitlements/ParallelsDesktop/ParallelsMacVM.entitlements" "${PDFM_APP_DIR}/Contents/MacOS/Parallels Mac VM.app" + sign_cmd --entitlements "${ROOT_PATH}/entitlements/ParallelsDesktop/ParallelsService.entitlements" "${PDFM_APP_DIR}/Contents/MacOS/Parallels Service.app" + sign_cmd --entitlements "${ROOT_PATH}/entitlements/ParallelsDesktop/ParallelsVM1014.entitlements" "${PDFM_APP_DIR}/Contents/MacOS/Parallels VM 10.14.app" + sign_cmd --entitlements "${ROOT_PATH}/entitlements/ParallelsDesktop/ParallelsVM.entitlements" "${PDFM_APP_DIR}/Contents/MacOS/Parallels VM.app" + sign_cmd --entitlements "${ROOT_PATH}/entitlements/ParallelsDesktop/ParallelsDesktop.entitlements" "${PDFM_APP_DIR}" } if [ -d "${PTFM_APP_DIR}" ]; then diff --git a/scripts/publish.sh b/scripts/publish.sh index 9828e4a..ead4074 100644 --- a/scripts/publish.sh +++ b/scripts/publish.sh @@ -6,13 +6,13 @@ TEMP_PATH="${ROOT_PATH}/tmp" PUBLISH_PATH="${ROOT_PATH}/publish" PTFM_VERSION="5.5.1-4410" -PDFM_VERSION="17.1.4-51567" +PDFM_VERSION="18.0.1-53056" PTFM_SHA256SUM="412bddebac28e229c7973dad6d702c67d1b42195b99b009af26ef036f5631349" -PDFM_SHA256SUM="8232f140e4c5b95821bf5063fb37db356f7bab520ddabbab4a73d08b5de0cd10" +PDFM_SHA256SUM="8a021158b29b814f2942bb0afa5ca33fc6a87729578d1ad194e95a3f929b1e6f" PTFM_DMG_DOWNLOAD_URL="https://download.parallels.com/toolbox/v5/${PTFM_VERSION}/ParallelsToolbox-${PTFM_VERSION}.dmg" -PDFM_DMG_DOWNLOAD_URL="https://download.parallels.com/desktop/v17/${PDFM_VERSION}/ParallelsDesktop-${PDFM_VERSION}.dmg" +PDFM_DMG_DOWNLOAD_URL="https://download.parallels.com/desktop/v18/${PDFM_VERSION}/ParallelsDesktop-${PDFM_VERSION}.dmg" PTFM_DMG_FILE="${TEMP_PATH}/download/ParallelsToolbox-${PTFM_VERSION}.dmg" PDFM_DMG_FILE="${TEMP_PATH}/download/ParallelsDesktop-${PDFM_VERSION}.dmg" @@ -20,16 +20,20 @@ PDFM_DMG_FILE="${TEMP_PATH}/download/ParallelsDesktop-${PDFM_VERSION}.dmg" PTFM_PUBLISH_FILE="${PUBLISH_PATH}/ParallelsToolbox-${PTFM_VERSION}_Crack.dmg" PDFM_PUBLISH_FILE="${PUBLISH_PATH}/ParallelsDesktop-${PDFM_VERSION}_Crack.dmg" -# CODESIGN_CERT=B8474E27C322DFB3D4A0168127EB02DB877C3F81 CODESIGN_CERT=- -CRACK_LIB="${ROOT_PATH}/build/libConfigurer64.dylib" +if [ -n "$(security find-identity -v -p codesigning | grep B8474E27C322DFB3D4A0168127EB02DB877C3F81)" ]; then + CODESIGN_CERT=B8474E27C322DFB3D4A0168127EB02DB877C3F81 +fi + +CRACK_LIB_DST_NAME="libUIWarp" +CRACK_LIB="${ROOT_PATH}/build/${CRACK_LIB_DST_NAME}.dylib" PTFM_TMP_DIR="${TEMP_PATH}/ptfm_files" PDFM_TMP_DIR="${TEMP_PATH}/pdfm_files" function sign_cmd() { - codesign -f -s ${CODESIGN_CERT} --all-architectures --deep "$1" + codesign -f -s ${CODESIGN_CERT} -o runtime --all-architectures --deep "$@" } function ensure_download_ptfm_dmg() { @@ -90,9 +94,9 @@ function copy_pdfm_files() { mkdir -p "${PDFM_TMP_DIR}" > /dev/null hdiutil attach -noverify -noautofsck -noautoopen "${PDFM_DMG_FILE}" - cp -R -X "/Volumes/Parallels Desktop 17/Install.app" "${PDFM_TMP_DIR}/" > /dev/null - cp -R -X "/Volumes/Parallels Desktop 17/Parallels Desktop.app" "${PDFM_TMP_DIR}/" > /dev/null - hdiutil detach "/Volumes/Parallels Desktop 17" + cp -R -X "/Volumes/Parallels Desktop 18/Install.app" "${PDFM_TMP_DIR}/" > /dev/null + cp -R -X "/Volumes/Parallels Desktop 18/Parallels Desktop.app" "${PDFM_TMP_DIR}/" > /dev/null + hdiutil detach "/Volumes/Parallels Desktop 18" rm -f "${PDFM_TMP_DIR}/Parallels Desktop.app/Contents/embedded.provisionprofile" > /dev/null chflags -R 0 "${PDFM_TMP_DIR}" > /dev/null @@ -106,8 +110,8 @@ function apply_ptfm_crack() { /usr/local/opt/llvm/bin/llvm-strip -s "${CRACK_LIB}" > /dev/null fi - RPATH="@rpath/libConfigurer64.dylib" - DST="${PTFM_TMP_DIR}/Install Parallels Toolbox.app/Contents/Frameworks/libConfigurer64.dylib" + RPATH="@rpath/${CRACK_LIB_DST_NAME}.dylib" + DST="${PTFM_TMP_DIR}/Install Parallels Toolbox.app/Contents/Frameworks/${CRACK_LIB_DST_NAME}.dylib" LOADER="${PTFM_TMP_DIR}/Install Parallels Toolbox.app/Contents/Frameworks/libLogging.dylib" "${CUR_PATH}/insert_dylib" --inplace --overwrite --no-strip-codesig --all-yes \ @@ -123,14 +127,22 @@ function apply_pdfm_crack() { /usr/local/opt/llvm/bin/llvm-strip -s "${CRACK_LIB}" > /dev/null fi - RPATH="@rpath/libConfigurer64.dylib" - DST="${PDFM_TMP_DIR}/Parallels Desktop.app/Contents/Frameworks/libConfigurer64.dylib" + RPATH="@rpath/${CRACK_LIB_DST_NAME}.dylib" + DST="${PDFM_TMP_DIR}/Parallels Desktop.app/Contents/Frameworks/${CRACK_LIB_DST_NAME}.dylib" LOADER="${PDFM_TMP_DIR}/Parallels Desktop.app/Contents/Frameworks/QtXml.framework/Versions/5/QtXml" "${CUR_PATH}/insert_dylib" --inplace --overwrite --no-strip-codesig --all-yes \ "${RPATH}" "${LOADER}" > /dev/null cp -f -X "${CRACK_LIB}" "${DST}" > /dev/null + + SRC="${ROOT_PATH}/crack/pdfm-18.0.1.53056/prl_client_app" + DST="${PDFM_TMP_DIR}/Parallels Desktop.app/Contents/MacOS/prl_client_app" + cp -f -X "${SRC}" "${DST}" > /dev/null + + SRC="${ROOT_PATH}/crack/pdfm-18.0.1.53056/prl_disp_service" + DST="${PDFM_TMP_DIR}/Parallels Desktop.app/Contents/MacOS/Parallels Service.app/Contents/MacOS/prl_disp_service" + cp -f -X "${SRC}" "${DST}" > /dev/null } function sign_ptfm() { @@ -195,15 +207,23 @@ function sign_ptfm() { function sign_pdfm() { echo "[*] Sign Parallels Desktop App" + sign_cmd "${PDFM_TMP_DIR}/Parallels Desktop.app/Contents/Library/QuickLook/ExeQL.qlgenerator" + sign_cmd "${PDFM_TMP_DIR}/Parallels Desktop.app/Contents/Library/QuickLook/ParallelsQL.qlgenerator" + sign_cmd "${PDFM_TMP_DIR}/Parallels Desktop.app/Contents/Resources/launchd_wrapper" + sign_cmd "${PDFM_TMP_DIR}/Parallels Desktop.app/Contents/Resources/libprl_shared_apps.dylib" + sign_cmd "${PDFM_TMP_DIR}/Parallels Desktop.app/Contents/Resources/lua/ssl.so" + sign_cmd "${PDFM_TMP_DIR}/Parallels Desktop.app/Contents/Resources/lua/mime/core.so" + sign_cmd "${PDFM_TMP_DIR}/Parallels Desktop.app/Contents/Resources/lua/socket/core.so" + sign_cmd "${PDFM_TMP_DIR}/Parallels Desktop.app/Contents/Resources/lua/socket/serial.so" + sign_cmd "${PDFM_TMP_DIR}/Parallels Desktop.app/Contents/Resources/lua/socket/unix.so" sign_cmd "${PDFM_TMP_DIR}/Parallels Desktop.app/Contents/Applications/Parallels Link.app" sign_cmd "${PDFM_TMP_DIR}/Parallels Desktop.app/Contents/Applications/Parallels Mounter.app" sign_cmd "${PDFM_TMP_DIR}/Parallels Desktop.app/Contents/Applications/Parallels Technical Data Reporter.app" - sign_cmd "${PDFM_TMP_DIR}/Parallels Desktop.app/Contents/MacOS/Parallels Mac VM.app" - sign_cmd "${PDFM_TMP_DIR}/Parallels Desktop.app/Contents/MacOS/Parallels Service.app" - sign_cmd "${PDFM_TMP_DIR}/Parallels Desktop.app/Contents/MacOS/Parallels VM 10.14.app" - sign_cmd "${PDFM_TMP_DIR}/Parallels Desktop.app/Contents/MacOS/Parallels VM.app" - sign_cmd "${PDFM_TMP_DIR}/Parallels Desktop.app" - sign_cmd "${PDFM_TMP_DIR}/Install.app" + sign_cmd --entitlements "${ROOT_PATH}/entitlements/ParallelsDesktop/ParallelsMacVM.entitlements" "${PDFM_TMP_DIR}/Parallels Desktop.app/Contents/MacOS/Parallels Mac VM.app" + sign_cmd --entitlements "${ROOT_PATH}/entitlements/ParallelsDesktop/ParallelsService.entitlements" "${PDFM_TMP_DIR}/Parallels Desktop.app/Contents/MacOS/Parallels Service.app" + sign_cmd --entitlements "${ROOT_PATH}/entitlements/ParallelsDesktop/ParallelsVM1014.entitlements" "${PDFM_TMP_DIR}/Parallels Desktop.app/Contents/MacOS/Parallels VM 10.14.app" + sign_cmd --entitlements "${ROOT_PATH}/entitlements/ParallelsDesktop/ParallelsVM.entitlements" "${PDFM_TMP_DIR}/Parallels Desktop.app/Contents/MacOS/Parallels VM.app" + sign_cmd --entitlements "${ROOT_PATH}/entitlements/ParallelsDesktop/ParallelsDesktop.entitlements" "${PDFM_TMP_DIR}/Parallels Desktop.app" } function set_pdfm_app_hide() { @@ -240,7 +260,7 @@ function create_pdfm_dmg() { fi create-dmg \ - --volname "Parallels Desktop 17" \ + --volname "Parallels Desktop 18" \ --volicon "${ROOT_PATH}/assets/PDFM.VolumeIcon.icns" \ --background "${ROOT_PATH}/assets/PDFM.background.png" \ --window-pos 0 0 \ @@ -269,5 +289,5 @@ function publish_pdfm_crack_dmg() { create_pdfm_dmg } -publish_ptfm_crack_dmg +# publish_ptfm_crack_dmg publish_pdfm_crack_dmg diff --git a/src/main.cpp b/src/main.cpp index 3adf925..80ecc9b 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -26,9 +26,6 @@ #include #include -#define LOGGING_DISABLE -#include - #define JM_XORSTR_DISABLE_AVX_INTRINSICS #include "xorstr.hpp" @@ -46,35 +43,6 @@ objc_msgSend(id _Nullable self, SEL _Nonnull op, ...) #error unsupported arch #endif -#if !defined(TARGET_ARCH_X64) -__attribute__((constructor)) -void func_load() { - const char* header = "Error"; - const char* message = "This crack version only support intel CPU!"; - CFStringRef header_ref = CFStringCreateWithCString(NULL, header, strlen(header)); - CFStringRef message_ref = CFStringCreateWithCString(NULL,message,strlen(message)); - - CFOptionFlags result; - CFUserNotificationDisplayAlert( - 0, //timeout - kCFUserNotificationNoDefaultButtonFlag, //flags - NULL, //iconURL - NULL, // soundURL - NULL, // localizationURL - header_ref, // alertHeader - message_ref, // alertMessage - NULL, // defaultButtonTitle just "ok" - NULL, // alternateButtonTitle - NULL, // otherButtonTitle - &result // responseFlags - ); - exit(0); -} -#endif - - -#ifdef TARGET_ARCH_X64 - // #define ENABLE_DLOG 1 #if defined(ENABLE_DLOG) @@ -83,70 +51,8 @@ void func_load() { #define dlog(format, ...) #endif - -#ifdef TARGET_ARCH_X64 -#define OPCODE_RETURN_0 { 0x48, 0x31, 0xC0, 0xC3 } -#define OPCODE_RETURN_1 { 0x6A, 0x01, 0x58, 0xC3 } -#endif - -#ifdef TARGET_ARCH_ARM64 -#define OPCODE_RETURN_0 { 0x00, 0x00, 0x80, 0xd2, 0xc0, 0x03, 0x5f, 0xd6 } -#define OPCODE_RETURN_1 { 0x20, 0x00, 0x80, 0xd2, 0xc0, 0x03, 0x5f, 0xd6 } -#endif - - id vars_g_static_class = nullptr; -typedef uint64_t (*type_AppDelegate_checkForUpdates_t)(uint64_t, uint64_t, int); -type_AppDelegate_checkForUpdates_t vars_g_old_AppDelegate_checkForUpdates; - -uint64_t func_hook_AppDelegate_checkForUpdates(uint64_t a1, uint64_t a2, int a3) -{ - if (a3 == 1) - return vars_g_old_AppDelegate_checkForUpdates(a1, a2, 1LL); - return 0; -} - -int func_return_0() { - return 0; -} - -int func_return_1() { - return 1; -} - -typedef void (*type_objc_void_bool_t)(void*, void*, bool); - -type_objc_void_bool_t vars_g_CEPLog_setCEPDisabled; - -void func_hook_CEPLog_setCEPDisabled(void* a1, void* a2, bool disbale) -{ - if (!disbale) - { - dlog("[*] hook [CEPLog setCEPDisabled: true] hook to false"); - } - else - { - dlog("[*] hook [CEPLog setCEPDisabled: false]"); - } - vars_g_CEPLog_setCEPDisabled(a1, a2, 1); -} - -type_objc_void_bool_t vars_g_CEPLog_setCEPSentAfterDisabling; - -void func_hook_CEPLog_setCEPSentAfterDisabling(void* a1, void* a2, bool disable) -{ - if (!disable) - { - dlog("[*] enter [CEPLog setCEPSentAfterDisabling: true] hook to false"); - } - else - { - dlog("[*] enter [CEPLog setCEPSentAfterDisabling: false]"); - } - vars_g_CEPLog_setCEPSentAfterDisabling(a1, a2, 1); -} - bool str_ends_with(const char* a1, const char* a2) { auto a1_len = strlen(a1); auto a2_len = strlen(a2); @@ -154,1181 +60,64 @@ bool str_ends_with(const char* a1, const char* a2) { return 0 == strcmp(a1 + a1_len - a2_len, a2); } -IMP func_getObjcMethod(const char *className, const char *methodName) -{ - auto c = objc_getClass(className); - auto s = sel_registerName(methodName); - auto m = class_getInstanceMethod(c, s); - return method_getImplementation(m); -} - -void func_patch_objc(const char* className, const char* methodName, void *replace, int replace_size) -{ - auto addr = (void *)func_getObjcMethod(className, methodName); - if (!addr) - { - dlog("[-] can not found [%s %s].", className, methodName) - return; - } - if (kMemoryOperationSuccess == CodePatch(addr, (uint8_t*)replace, replace_size)) - { - dlog("[+] patch success [%s %s].", className, methodName) - } - else - { - dlog("[-] patch fail [%s %s].", className, methodName) - } -} - -void func_hook_objc(const char* className, const char* methodName, void* replace, void** original) -{ - auto addr = (void *)func_getObjcMethod(className, methodName); - if (!addr) - { - dlog("[-] can not found [%s %s].", className, methodName) - return; - } - if (RS_SUCCESS == DobbyHook(addr, replace, original)) - { - dlog("[+] patch success [%s %s].", className, methodName) - } - else - { - dlog("[-] patch fail [%s %s].", className, methodName) - } -} - -bool func_patch_data(void* addr, void *replace, int replace_size) -{ - auto ret = CodePatch(addr, (uint8_t*)replace, replace_size); - return kMemoryOperationSuccess == ret; -} - -bool func_check_version(const char *func_check_version) -{ - // @autoreleasepool { - // NSString * version = [[NSBundle mainBundle] objectForInfoDictionaryKey: (NSString *)kCFBundleVersionKey]; - // return 0 == strcmp([version UTF8String], func_check_version); - // } - - auto cls_NSBundle = (id)objc_getClass(xorstr_("NSBundle")); - if (!cls_NSBundle) { - dlog("[-] get NSBundle fail"); - return false; - } - auto sel_mainBundle = sel_registerName(xorstr_("mainBundle")); - auto mainBundle = (id)objc_msgSend(cls_NSBundle, sel_mainBundle); - if (!mainBundle) { - dlog("[-] get mainBundle fail"); - return false; - } - auto cls_NSString = (id)objc_getClass(xorstr_("NSString")); - auto sel_stringWithUTF8String = sel_registerName(xorstr_("stringWithUTF8String:")); - auto cls_kCFBundleVersionKey = (id)objc_msgSend(cls_NSString, sel_stringWithUTF8String, xorstr_("CFBundleVersion")); - auto sel_objectForInfoDictionaryKey = sel_registerName(xorstr_("objectForInfoDictionaryKey:")); - auto build_nsstring = objc_msgSend(mainBundle, sel_objectForInfoDictionaryKey, cls_kCFBundleVersionKey); - if (!build_nsstring) { - dlog("[-] get build_nsstring fail"); - return false; - } - auto sel_UTF8String = sel_registerName(xorstr_("UTF8String")); - char* pCFBundleVersion = (char*)objc_msgSend(build_nsstring, sel_UTF8String); - dlog("[*] version: %s", pCFBundleVersion); - return 0 == strcmp(pCFBundleVersion, func_check_version); -} - -void func_patch_libprl_shared_apps_dylib(char* image_base) -{ - if (image_base) - { - #ifdef TARGET_ARCH_X64 - { - // __text:000000000002ADA0 55 push rbp ; <--- patch return 0; - // __text:000000000002ADA1 48 89 E5 mov rbp, rsp - // __text:000000000002ADA4 41 57 push r15 - // __text:000000000002ADA6 41 56 push r14 - // __text:000000000002ADA8 41 55 push r13 - // __text:000000000002ADAA 41 54 push r12 - // __text:000000000002ADAC 53 push rbx - // __text:000000000002ADAD 48 81 EC D8 05 00 00 sub rsp, 5D8h - // __text:000000000002ADB4 48 8B 05 75 54 09 00 mov rax, cs:___stack_chk_guard_ptr - // __text:000000000002ADBB 48 8B 00 mov rax, [rax] - // __text:000000000002ADBE 48 89 45 D0 mov [rbp+var_30], rax - // __text:000000000002ADC2 E8 79 06 00 00 call sub_2B440 - // __text:000000000002ADC7 E8 B4 99 03 00 call sub_64780 - // __text:000000000002ADCC 85 C0 test eax, eax - // __text:000000000002ADCE 0F 84 AA 04 00 00 jz loc_2B27E - // __text:000000000002ADD4 C7 85 28 FA FF FF 90 01 00 00 mov [rbp+var_5D8], 190h - // __text:000000000002ADDE C7 85 2C FA FF FF E8 03 00 00 mov [rbp+var_5D4], 3E8h - // __text:000000000002ADE8 4C 8D 35 89 58 0A 00 lea r14, qword_D0678 - // __text:000000000002ADEF 4C 8D BD 40 FE FF FF lea r15, [rbp+var_1C0] - // __text:000000000002ADF6 4C 8D 85 28 FA FF FF lea r8, [rbp+var_5D8] - // __text:000000000002ADFD BF 79 10 01 80 mov edi, 80011079h - // __text:000000000002AE02 BE 01 00 00 00 mov esi, 1 - // __text:000000000002AE07 BA 01 00 00 00 mov edx, 1 - // __text:000000000002AE0C 4C 89 F9 mov rcx, r15 - // __text:000000000002AE0F 41 FF 16 call qword ptr [r14] - // __text:000000000002AE12 48 8D 9D 50 FA FF FF lea rbx, [rbp+var_5B0] - // __text:000000000002AE19 4C 8D 85 2C FA FF FF lea r8, [rbp+var_5D4] - // __text:000000000002AE20 BF 79 10 01 80 mov edi, 80011079h - // __text:000000000002AE25 31 F6 xor esi, esi - // __text:000000000002AE27 BA 01 00 00 00 mov edx, 1 - // __text:000000000002AE2C 48 89 D9 mov rcx, rbx - // __text:000000000002AE2F 41 FF 16 call qword ptr [r14] - // __text:000000000002AE32 48 8B 3D 3F 2A 0A 00 mov rdi, cs:classRef_NSString ; id - // __text:000000000002AE39 4C 8B 35 78 15 0A 00 mov r14, cs:selRef_stringWithUTF8String_ - // __text:000000000002AE40 4C 8B 2D 41 54 09 00 mov r13, cs:_objc_msgSend_ptr - // __text:000000000002AE47 4C 89 F6 mov rsi, r14 ; SEL - // __text:000000000002AE4A 48 89 DA mov rdx, rbx - - uint8_t replace[] = OPCODE_RETURN_1; - if (func_patch_data(image_base + 0x2ada0, replace, sizeof(replace))) - { - dlog("[+] patch libprl_shared_apps.dylib 1 success."); - } - else - { - dlog("[-] patch libprl_shared_apps.dylib 1 fail."); - } - } - #endif - #ifdef TARGET_ARCH_ARM64 - { - uint8_t replace[] = OPCODE_RETURN_1; - if (func_patch_data(image_base + 0x29308, replace, sizeof(replace))) - { - dlog("[+] patch libprl_shared_apps.dylib 1 success."); - } - else - { - dlog("[-] patch libprl_shared_apps.dylib 1 fail."); - } - } - #endif - } - -} - -int hook_PrlSrv_HasRestriction( - void* hServer, - int nRestrictionKey, - uint32_t* pbHasRestriction) { - if (*pbHasRestriction) { - *pbHasRestriction = 1; - return 1; - } - return 0; -} - -int hook_PrlLic_IsValid( - void* hLicense, - uint32_t* pbValue) { - if (*pbValue) { - *pbValue = 1; - return 1; - } - return 0; -} - -int hook_PrlLic_GetUserName( - void* hLicense, - char* sUserName, - uint32_t* pnUserNameBufLength) { - if (pnUserNameBufLength) { - if (!sUserName) { - *pnUserNameBufLength = 4; - return 6; - } - if (*pnUserNameBufLength >= 4) { - strcpy(sUserName, "Day"); - return 0; - } - } - return 3; -} - -void func_patch_ParallelsVirtualizationSDK(char* image_base, int i) -{ - if (image_base) - { - char* image_name = (char*)_dyld_get_image_name(i); - // if (0 == DobbyGlobalOffsetTableReplace(image_name, xorstr_("PrlSrv_IsFeatureSupported"), (void*)hook_PrlSrv_IsFeatureSupported, nullptr)) { - // dlog("[+] hook PrlSrv_IsFeatureSupported success"); - // } else { - // dlog("[+] hook PrlSrv_IsFeatureSupported fail"); - // } - // if (0 == DobbyGlobalOffsetTableReplace(image_name, xorstr_("PrlSrvCfg_IsUsbSupported"), (void*)func_return_1, nullptr)) { - // dlog("[+] hook PrlSrvCfg_IsUsbSupported success"); - // } else { - // dlog("[+] hook PrlSrvCfg_IsUsbSupported fail"); - // } - // if (0 == DobbyGlobalOffsetTableReplace(image_name, xorstr_("PrlSrvCfg_IsVtdSupported"), (void*)func_return_1, nullptr)) { - // dlog("[+] hook PrlSrvCfg_IsVtdSupported success"); - // } else { - // dlog("[+] hook PrlSrvCfg_IsVtdSupported fail"); - // } - if (0 == DobbyGlobalOffsetTableReplace(image_name, xorstr_("PrlSrv_HasRestriction"), (void*)hook_PrlSrv_HasRestriction, nullptr)) { - dlog("[+] hook PrlSrv_HasRestriction success"); - } else { - dlog("[+] hook PrlSrv_HasRestriction fail"); - } - if (0 == DobbyGlobalOffsetTableReplace(image_name, xorstr_("PrlSrv_SendProblemReport "), (void*)func_return_0, nullptr)) { - dlog("[+] hook PrlSrv_SendProblemReport success"); - } else { - dlog("[+] hook PrlSrv_SendProblemReport fail"); - } - if (0 == DobbyGlobalOffsetTableReplace(image_name, xorstr_("PrlSrv_GetProblemReport"), (void*)func_return_0, nullptr)) { - dlog("[+] hook PrlSrv_GetProblemReport success"); - } else { - dlog("[+] hook PrlSrv_GetProblemReport fail"); - } - if (0 == DobbyGlobalOffsetTableReplace(image_name, xorstr_("PrlSrv_GetPackedProblemReport"), (void*)func_return_0, nullptr)) { - dlog("[+] hook PrlSrv_GetPackedProblemReport success"); - } else { - dlog("[+] hook PrlSrv_GetPackedProblemReport fail"); - } - if (0 == DobbyGlobalOffsetTableReplace(image_name, xorstr_("PrlReport_Send"), (void*)func_return_0, nullptr)) { - dlog("[+] hook PrlReport_Send success"); - } else { - dlog("[+] hook PrlReport_Send fail"); - } - if (0 == DobbyGlobalOffsetTableReplace(image_name, xorstr_("PrlLic_GetUserName"), (void*)hook_PrlLic_GetUserName, nullptr)) { - dlog("[+] hook PrlLic_GetUserName success"); - } else { - dlog("[+] hook PrlLic_GetUserName fail"); - } - if (0 == DobbyGlobalOffsetTableReplace(image_name, xorstr_("PrlLic_GetCompanyName"), (void*)hook_PrlLic_GetUserName, nullptr)) { - dlog("[+] hook PrlLic_GetCompanyName success"); - } else { - dlog("[+] hook PrlLic_GetCompanyName fail"); - } - - } -} - -void func_patch_dylibs() -{ - for (int i = 0; i < _dyld_image_count(); ++i) - { - const char *name = _dyld_get_image_name(i); - - if (str_ends_with(name, xorstr_("libprl_shared_apps.dylib"))) - { - dlog("[*] patch %s start.", name); - func_patch_libprl_shared_apps_dylib((char*)_dyld_get_image_header(i)); - dlog("[*] patch %s over.", name); - } - else if (str_ends_with(name, xorstr_("ParallelsVirtualizationSDK"))) - { - dlog("[*] patch %s start.", name); - func_patch_ParallelsVirtualizationSDK((char*)_dyld_get_image_header(i), i); - dlog("[*] patch %s over.", name); - } - else if (str_ends_with(name, xorstr_("LicenseServices"))) - { - dlog("[*] patch %s start.", name); - uint8_t replace0[] = OPCODE_RETURN_0; - uint8_t replace1[] = OPCODE_RETURN_1; - func_patch_objc(xorstr_("LocalPdInfo"), xorstr_("isLicenseValid"), replace1, sizeof(replace1)); - func_patch_objc(xorstr_("LocalPdInfo"), xorstr_("isBusinessEdition"), replace1, sizeof(replace1)); - func_patch_objc(xorstr_("LICLicenseInfo"), xorstr_("isBusiness"), replace1, sizeof(replace1)); - func_patch_objc(xorstr_("LICLicenseInfo"), xorstr_("rawStatus"), replace0, sizeof(replace0)); - func_patch_objc(xorstr_("LICLicenseInfo"), xorstr_("toolset"), replace1, sizeof(replace1)); - func_patch_objc(xorstr_("LocalPdInfo"), xorstr_("reinit"), replace0, sizeof(replace0)); - - // func_hook_objc(xorstr_("LocalPdInfo"), xorstr_("isLicenseValid"), (void *)func_return_1, nullptr); - // func_hook_objc(xorstr_("LocalPdInfo"), xorstr_("isBusinessEdition"), (void *)func_return_1, nullptr); - // func_hook_objc(xorstr_("LICLicenseInfo"), xorstr_("isBusiness"), (void *)func_return_1, nullptr); - // func_hook_objc(xorstr_("LICLicenseInfo"), xorstr_("rawStatus"), (void *)func_return_0, nullptr); - // func_hook_objc(xorstr_("LICLicenseInfo"), xorstr_("toolset"), (void *)func_return_1, nullptr); - // func_hook_objc(xorstr_("LocalPdInfo"), xorstr_("reinit"), (void *)func_return_0, nullptr); - dlog("[*] patch %s over.", name); - } - else if (str_ends_with(name, xorstr_("LicenseViews"))) - { - dlog("[*] patch %s start.", name); - uint8_t replace0[] = OPCODE_RETURN_0; - func_patch_objc(xorstr_("GeoIPLocator"), xorstr_("locate:"), replace0, sizeof(replace0)); - // func_hook_objc(xorstr_("GeoIPLocator"), xorstr_("locate:"), (void *)func_return_0, nullptr); - dlog("[*] patch %s over.", name); - } - else if (str_ends_with(name, xorstr_("ToolboxCommon"))) - { - dlog("[*] patch %s start.", name); - uint8_t replace0[] = OPCODE_RETURN_0; - uint8_t replace1[] = OPCODE_RETURN_1; - func_patch_objc(xorstr_("LocalPdInfo"), xorstr_("sendCEP"), replace0, sizeof(replace0)); - func_hook_objc(xorstr_("CEPLog"), xorstr_("setCEPDisabled:"), (void *)func_hook_CEPLog_setCEPDisabled, (void**)&vars_g_CEPLog_setCEPDisabled); - func_hook_objc(xorstr_("CEPLog"), xorstr_("setCEPSentAfterDisabling:"), (void *)func_hook_CEPLog_setCEPSentAfterDisabling, (void**)&vars_g_CEPLog_setCEPSentAfterDisabling); - // func_patch_objc(xorstr_("CEPLicenseInfo"), xorstr_("isTrial"), replace0, sizeof(replace0)); - // func_patch_objc(xorstr_("CEPLicenseInfo"), xorstr_("isBonus"), replace0, sizeof(replace0)); - // func_patch_objc(xorstr_("CEPLicenseInfo"), xorstr_("isReferralBonus"), replace0, sizeof(replace0)); - // func_patch_objc(xorstr_("CEPLicenseInfo"), xorstr_("isPDSubscription"), replace0, sizeof(replace0)); - // func_patch_objc(xorstr_("CEPLicenseInfo"), xorstr_("isBusiness"), replace1, sizeof(replace1)); - // func_patch_objc(xorstr_("CEPLicenseInfo"), xorstr_("isLocalPDBusiness"), replace0, sizeof(replace0)); - // func_patch_objc(xorstr_("CEPLicenseInfo"), xorstr_("isLocalPD"), replace0, sizeof(replace0)); - // func_patch_objc(xorstr_("CEPLicenseInfo"), xorstr_("isAutoRenewable"), replace0, sizeof(replace0)); - // func_patch_objc(xorstr_("CEPLicenseInfo"), xorstr_("isLicenseExpired"), replace0, sizeof(replace0)); - // func_patch_objc(xorstr_("CEPLicenseInfo"), xorstr_("isNoLicensePresented"), replace1, sizeof(replace1)); - - // func_hook_objc(xorstr_("CEPLog"), xorstr_("sendCEP"), (void *)func_return_0, nullptr); - // func_hook_objc(xorstr_("CEPLog"), xorstr_("setCEPDisabled:"), (void *)func_hook_CEPLog_setCEPDisabled, (void**)&vars_g_CEPLog_setCEPDisabled); - // func_hook_objc(xorstr_("CEPLog"), xorstr_("setCEPSentAfterDisabling:"), (void *)func_hook_CEPLog_setCEPSentAfterDisabling, (void**)&vars_g_CEPLog_setCEPSentAfterDisabling); - // func_hook_objc(xorstr_("CEPLicenseInfo"), xorstr_("isTrial"), (void *)func_return_0, nullptr); - // func_hook_objc(xorstr_("CEPLicenseInfo"), xorstr_("isBonus"), (void *)func_return_0, nullptr); - // func_hook_objc(xorstr_("CEPLicenseInfo"), xorstr_("isReferralBonus"), (void *)func_return_0, nullptr); - // func_hook_objc(xorstr_("CEPLicenseInfo"), xorstr_("isPDSubscription"), (void *)func_return_0, nullptr); - // func_hook_objc(xorstr_("CEPLicenseInfo"), xorstr_("isBusiness"), (void *)func_return_1, nullptr); - // func_hook_objc(xorstr_("CEPLicenseInfo"), xorstr_("isLocalPDBusiness"), (void *)func_return_0, nullptr); - // func_hook_objc(xorstr_("CEPLicenseInfo"), xorstr_("isLocalPD"), (void *)func_return_0, nullptr); - // func_hook_objc(xorstr_("CEPLicenseInfo"), xorstr_("isAutoRenewable"), (void *)func_return_0, nullptr); - // func_hook_objc(xorstr_("CEPLicenseInfo"), xorstr_("isLicenseExpired"), (void *)func_return_0, nullptr); - // func_hook_objc(xorstr_("CEPLicenseInfo"), xorstr_("isNoLicensePresented"), (void *)func_return_1, nullptr); - // func_hook_objc("CEPLicenseInfo", "expirationDate", (void *)func_return_0, nullptr); - dlog("[*] patch %s over.", name); - } - } -} - -void func_patch_Parallels_Toolbox() -{ - if (!func_check_version(xorstr_("4410"))) - { - dlog("[-] unsupport version."); - exit(0); - } - - uint8_t replace[] = OPCODE_RETURN_1; - func_hook_objc(xorstr_("ReportCollectorWithUI"), xorstr_("sendReport:parent:"), (void *)func_return_0, nullptr); - func_hook_objc(xorstr_("ReportCollector"), xorstr_("grabScreenshots"), (void *)func_return_0, nullptr); - func_hook_objc(xorstr_("ReportContactInfoWindowController"), xorstr_("onSendPress:"), (void *)func_return_0, nullptr); -} - -void func_patch_prl_vm_app() -{ - auto image_base = (char*)_dyld_get_image_header(0); - if (image_base) - { - #ifdef TARGET_ARCH_X64 - { - // __text:000000010000CD70 E8 8B 9C 9A 00 call sub_1009B6A00 - // __text:000000010000CD75 45 84 E4 test r12b, r12b - // __text:000000010000CD78 74 5B jz short loc_10000CDD5 ; <--- patch - // __text:000000010000CD7A 48 8D 05 EF FA 03 01 lea rax, qword_10104C870 - // __text:000000010000CD81 48 8B 18 mov rbx, [rax] - // __text:000000010000CD84 0F 57 C0 xorps xmm0, xmm0 - // __text:000000010000CD87 0F 29 45 A0 movaps xmmword ptr [rbp+var_60], xmm0 - // __text:000000010000CD8B 48 C7 45 B0 00 00 00 00 mov [rbp+var_50], 0 - // __text:000000010000CD93 48 8D BD 78 FF FF FF lea rdi, [rbp+var_88] - // __text:000000010000CD9A E8 31 B3 03 00 call sub_1000480D0 - // __text:000000010000CD9F 48 8D 55 A0 lea rdx, [rbp+var_60] - // __text:000000010000CDA3 48 8D 8D 78 FF FF FF lea rcx, [rbp+var_88] - // __text:000000010000CDAA 48 89 DF mov rdi, rbx - // __text:000000010000CDAD BE 79 10 01 80 mov esi, 80011079h ; <--- find - - uint8_t replace[] = { 0xEB }; - if (func_patch_data(image_base + 0xCD78, replace, sizeof(replace))) - { - dlog("[+] patch prl_vm_app 1 success."); - } - else - { - dlog("[-] patch prl_vm_app 1 fail."); - } - } - // patch dlopen bGliQ29uZmlndXJlcjY0LmR5bGli -> libConfigurer64.dylib - { - uint8_t replace[] = OPCODE_RETURN_0; - if (func_patch_data(image_base + 0x12780, replace, sizeof(replace))) - { - dlog("[+] patch prl_vm_app 2 success."); - } - else - { - dlog("[-] patch prl_vm_app 2 fail."); - } - } - #endif - - #ifdef TARGET_ARCH_ARM64 - { - // __text:000000010000E2C8 6B 66 22 94 BL sub_1008A7C74 - // __text:000000010000E2CC 97 02 00 34 CBZ W23, loc_10000E31C ; <--- patch - // __text:000000010000E2D0 08 65 00 D0 ADRP X8, #qword_100CB0020@PAGE - // __text:000000010000E2D4 1F 20 03 D5 NOP - // __text:000000010000E2D8 15 11 40 F9 LDR X21, [X8,#qword_100CB0020@PAGEOFF] - // __text:000000010000E2DC FF 7F 03 A9 STP XZR, XZR, [SP,#0x90+var_60] - // __text:000000010000E2E0 FF 23 00 F9 STR XZR, [SP,#0x90+var_50] - // __text:000000010000E2E4 E0 03 00 91 MOV X0, SP - // __text:000000010000E2E8 06 EE 00 94 BL sub_100049B00 - // __text:000000010000E2EC E2 C3 00 91 ADD X2, SP, #0x90+var_60 - // __text:000000010000E2F0 E3 03 00 91 MOV X3, SP - // __text:000000010000E2F4 E0 03 15 AA MOV X0, X21 - // __text:000000010000E2F8 21 0F 82 52 21 00 B0 72 MOV W1, #0x80011079 ; <--- find - uint8_t replace[] = {0x14, 0x00, 0x00, 0x14}; - if (func_patch_data(image_base + 0xE2CC, replace, sizeof(replace))) - { - dlog("[+] patch prl_vm_app 1 success."); - } - else - { - dlog("[-] patch prl_vm_app 1 fail."); - } - } - // patch dlopen bGliQ29uZmlndXJlcjY0LmR5bGli -> libConfigurer64.dylib - { - uint8_t replace[] = OPCODE_RETURN_0; - if (func_patch_data(image_base + 0x14014, replace, sizeof(replace))) - { - dlog("[+] patch prl_vm_app 2 success."); - } - else - { - dlog("[-] patch prl_vm_app 2 fail."); - } - } - #endif - } -} - void func_write_fake_license() { - unsigned char fake_license_data[11699] = { + unsigned char fake_license_data[829] = { 0xA1, 0xD0, 0xFA, 0xFA, 0xFA, 0xFA, 0xF8, 0xB6, 0xB3, 0xB9, 0xBF, 0xB4, 0xA9, 0xBF, 0xF8, 0xE0, - 0xFA, 0xF8, 0xA1, 0x86, 0xF8, 0xB4, 0xBB, 0xB7, 0xBF, 0x86, 0xF8, 0xE0, 0xFA, 0x86, 0xF8, 0x8A, - 0xA8, 0xB6, 0x8A, 0xA8, 0xB5, 0xEB, 0xED, 0x86, 0xF8, 0xF6, 0xFA, 0x86, 0xF8, 0xAF, 0xAF, 0xB3, - 0xBE, 0x86, 0xF8, 0xE0, 0xFA, 0x86, 0xF8, 0x86, 0xF8, 0xF6, 0xFA, 0x86, 0xF8, 0xB6, 0xB3, 0xB9, - 0x85, 0xB1, 0xBF, 0xA3, 0x86, 0xF8, 0xE0, 0xFA, 0x86, 0xF8, 0x86, 0xF8, 0xF6, 0xFA, 0x86, 0xF8, - 0xAA, 0xA8, 0xB5, 0xBE, 0xAF, 0xB9, 0xAE, 0x85, 0xAC, 0xBF, 0xA8, 0xA9, 0xB3, 0xB5, 0xB4, 0x86, - 0xF8, 0xE0, 0xFA, 0x86, 0xF8, 0xEB, 0xED, 0xF4, 0xF0, 0x86, 0xF8, 0xF6, 0xFA, 0x86, 0xF8, 0xB3, - 0xA9, 0x85, 0xAF, 0xAA, 0xBD, 0xA8, 0xBB, 0xBE, 0xBF, 0x86, 0xF8, 0xE0, 0xFA, 0xBC, 0xBB, 0xB6, - 0xA9, 0xBF, 0xF6, 0xFA, 0x86, 0xF8, 0xB3, 0xA9, 0x85, 0xA9, 0xAF, 0xB8, 0xB6, 0xB3, 0xB9, 0xBF, - 0xB4, 0xA9, 0xBF, 0x86, 0xF8, 0xE0, 0xFA, 0xBC, 0xBB, 0xB6, 0xA9, 0xBF, 0xF6, 0xFA, 0x86, 0xF8, - 0xAA, 0xBB, 0xA8, 0xBF, 0xB4, 0xAE, 0x85, 0xB1, 0xBF, 0xA3, 0x86, 0xF8, 0xE0, 0xFA, 0xB4, 0xAF, - 0xB6, 0xB6, 0xF6, 0xFA, 0x86, 0xF8, 0xAA, 0xBB, 0xA8, 0xBF, 0xB4, 0xAE, 0x85, 0xAF, 0xAF, 0xB3, - 0xBE, 0x86, 0xF8, 0xE0, 0xFA, 0xB4, 0xAF, 0xB6, 0xB6, 0xF6, 0xFA, 0x86, 0xF8, 0xB7, 0xBB, 0xB3, - 0xB4, 0x85, 0xAA, 0xBF, 0xA8, 0xB3, 0xB5, 0xBE, 0x85, 0xBF, 0xB4, 0xBE, 0xA9, 0x85, 0xBB, 0xAE, - 0x86, 0xF8, 0xE0, 0xFA, 0x86, 0xF8, 0xE8, 0xEA, 0xEE, 0xEF, 0xF7, 0xEA, 0xEF, 0xF7, 0xEA, 0xE3, - 0xFA, 0xEA, 0xEA, 0xE0, 0xEA, 0xEA, 0xE0, 0xEA, 0xEA, 0x86, 0xF8, 0xF6, 0xFA, 0x86, 0xF8, 0xBD, - 0xA8, 0xBB, 0xB9, 0xBF, 0x85, 0xAA, 0xBF, 0xA8, 0xB3, 0xB5, 0xBE, 0x85, 0xBF, 0xB4, 0xBE, 0xA9, - 0x85, 0xBB, 0xAE, 0x86, 0xF8, 0xE0, 0xFA, 0x86, 0xF8, 0xE8, 0xEA, 0xEE, 0xEF, 0xF7, 0xEA, 0xEF, - 0xF7, 0xEA, 0xE3, 0xFA, 0xEA, 0xEA, 0xE0, 0xEA, 0xEA, 0xE0, 0xEA, 0xEA, 0x86, 0xF8, 0xF6, 0xFA, - 0x86, 0xF8, 0xB3, 0xA9, 0x85, 0xBB, 0xAF, 0xAE, 0xB5, 0x85, 0xA8, 0xBF, 0xB4, 0xBF, 0xAD, 0xBB, - 0xB8, 0xB6, 0xBF, 0x86, 0xF8, 0xE0, 0xFA, 0xBC, 0xBB, 0xB6, 0xA9, 0xBF, 0xF6, 0xFA, 0x86, 0xF8, - 0xB3, 0xA9, 0x85, 0xB4, 0xBC, 0xA8, 0x86, 0xF8, 0xE0, 0xFA, 0xBC, 0xBB, 0xB6, 0xA9, 0xBF, 0xF6, - 0xFA, 0x86, 0xF8, 0xB3, 0xA9, 0x85, 0xB8, 0xBF, 0xAE, 0xBB, 0x86, 0xF8, 0xE0, 0xFA, 0xBC, 0xBB, - 0xB6, 0xA9, 0xBF, 0xF6, 0xFA, 0x86, 0xF8, 0xB3, 0xA9, 0x85, 0xB9, 0xB2, 0xB3, 0xB4, 0xBB, 0x86, - 0xF8, 0xE0, 0xFA, 0xBC, 0xBB, 0xB6, 0xA9, 0xBF, 0xF6, 0xFA, 0x86, 0xF8, 0xB3, 0xA9, 0x85, 0xA9, - 0xAF, 0xA9, 0xAA, 0xBF, 0xB4, 0xBE, 0xBF, 0xBE, 0x86, 0xF8, 0xE0, 0xFA, 0xBC, 0xBB, 0xB6, 0xA9, - 0xBF, 0xF6, 0xFA, 0x86, 0xF8, 0xB3, 0xA9, 0x85, 0xBF, 0xA2, 0xAA, 0xB3, 0xA8, 0xBF, 0xBE, 0x86, - 0xF8, 0xE0, 0xFA, 0xBC, 0xBB, 0xB6, 0xA9, 0xBF, 0xF6, 0xFA, 0x86, 0xF8, 0xB3, 0xA9, 0x85, 0xBD, - 0xA8, 0xBB, 0xB9, 0xBF, 0x85, 0xAA, 0xBF, 0xA8, 0xB3, 0xB5, 0xBE, 0x86, 0xF8, 0xE0, 0xFA, 0xBC, - 0xBB, 0xB6, 0xA9, 0xBF, 0xF6, 0xFA, 0x86, 0xF8, 0xB3, 0xA9, 0x85, 0xAA, 0xAF, 0xA8, 0xB9, 0xB2, - 0xBB, 0xA9, 0xBF, 0xBE, 0x85, 0xB5, 0xB4, 0xB6, 0xB3, 0xB4, 0xBF, 0x86, 0xF8, 0xE0, 0xFA, 0xBC, - 0xBB, 0xB6, 0xA9, 0xBF, 0xF6, 0xFA, 0x86, 0xF8, 0xB6, 0xB3, 0xB7, 0xB3, 0xAE, 0x86, 0xF8, 0xE0, - 0xFA, 0xEB, 0xEA, 0xF6, 0xFA, 0x86, 0xF8, 0xAF, 0xA9, 0xBB, 0xBD, 0xBF, 0x86, 0xF8, 0xE0, 0xFA, - 0xEB, 0xF6, 0xFA, 0x86, 0xF8, 0xBF, 0xBE, 0xB3, 0xAE, 0xB3, 0xB5, 0xB4, 0x86, 0xF8, 0xE0, 0xFA, - 0xE8, 0xF6, 0xFA, 0x86, 0xF8, 0xAA, 0xB6, 0xBB, 0xAE, 0xBC, 0xB5, 0xA8, 0xB7, 0x86, 0xF8, 0xE0, - 0xFA, 0xE9, 0xF6, 0xFA, 0x86, 0xF8, 0xAA, 0xA8, 0xB5, 0xBE, 0xAF, 0xB9, 0xAE, 0x86, 0xF8, 0xE0, - 0xFA, 0xED, 0xF6, 0xFA, 0x86, 0xF8, 0xB5, 0xBC, 0xBC, 0xB6, 0xB3, 0xB4, 0xBF, 0x86, 0xF8, 0xE0, - 0xFA, 0xAE, 0xA8, 0xAF, 0xBF, 0xF6, 0xFA, 0x86, 0xF8, 0xB9, 0xAA, 0xAF, 0x85, 0xB6, 0xB3, 0xB7, - 0xB3, 0xAE, 0x86, 0xF8, 0xE0, 0xFA, 0xE9, 0xE8, 0xF6, 0xFA, 0x86, 0xF8, 0xA8, 0xBB, 0xB7, 0x85, - 0xB6, 0xB3, 0xB7, 0xB3, 0xAE, 0x86, 0xF8, 0xE0, 0xFA, 0xEB, 0xE9, 0xEB, 0xEA, 0xED, 0xE8, 0xF6, - 0xFA, 0x86, 0xF8, 0xB2, 0xB5, 0xA9, 0xAE, 0xA9, 0x86, 0xF8, 0xE0, 0xFA, 0x81, 0xA1, 0x86, 0xF8, - 0xB4, 0xBB, 0xB7, 0xBF, 0x86, 0xF8, 0xE0, 0xFA, 0x86, 0xF8, 0x9D, 0x9E, 0x8A, 0x88, 0x85, 0x92, - 0x93, 0x9E, 0x9E, 0x9F, 0x94, 0x86, 0xF8, 0xF6, 0xFA, 0x86, 0xF8, 0xB2, 0xAD, 0x85, 0xB3, 0xBE, - 0x86, 0xF8, 0xE0, 0xFA, 0x86, 0xF8, 0x86, 0xF8, 0xF6, 0xFA, 0x86, 0xF8, 0xAA, 0xA8, 0xB5, 0xBE, - 0xAF, 0xB9, 0xAE, 0x85, 0xAC, 0xBF, 0xA8, 0xA9, 0xB3, 0xB5, 0xB4, 0x86, 0xF8, 0xE0, 0xFA, 0x86, - 0xF8, 0x86, 0xF8, 0xF6, 0xFA, 0x86, 0xF8, 0xBB, 0xB9, 0xAE, 0xB3, 0xAC, 0xBB, 0xAE, 0xBF, 0xBE, - 0x85, 0xBB, 0xAE, 0x86, 0xF8, 0xE0, 0xFA, 0x86, 0xF8, 0xE8, 0xEA, 0xE8, 0xEB, 0xF7, 0xEA, 0xEF, - 0xF7, 0xEA, 0xE3, 0xFA, 0xEA, 0xEA, 0xE0, 0xEA, 0xEA, 0xE0, 0xEA, 0xEA, 0x86, 0xF8, 0xA7, 0x87, - 0xF6, 0xFA, 0x86, 0xF8, 0xB3, 0xA9, 0x85, 0xAE, 0xA8, 0xB3, 0xBB, 0xB6, 0x86, 0xF8, 0xE0, 0xFA, - 0xBC, 0xBB, 0xB6, 0xA9, 0xBF, 0xA7, 0xF8, 0xF6, 0xD0, 0xFA, 0xFA, 0xFA, 0xFA, 0xF8, 0xAA, 0xAF, - 0xB8, 0xB6, 0xB3, 0xB9, 0x99, 0xBF, 0xA8, 0xAE, 0xA9, 0xF8, 0xE0, 0xFA, 0xF8, 0xF7, 0xF7, 0xF7, - 0xF7, 0xF7, 0x98, 0x9F, 0x9D, 0x93, 0x94, 0xFA, 0x99, 0x9F, 0x88, 0x8E, 0x93, 0x9C, 0x93, 0x99, - 0x9B, 0x8E, 0x9F, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0x86, 0xB4, 0x97, 0x93, 0x93, 0x9D, 0xAA, 0x9E, - 0x99, 0x99, 0x98, 0x93, 0xA3, 0xBD, 0x9B, 0xAD, 0x93, 0x98, 0x9B, 0xBD, 0x93, 0x99, 0x9F, 0x9B, - 0x9B, 0xAD, 0x9E, 0x8B, 0x83, 0x90, 0x91, 0xB5, 0x80, 0x93, 0xB2, 0xAC, 0xB9, 0x94, 0x9B, 0x8B, - 0x9F, 0x96, 0x98, 0x8B, 0x9B, 0xAD, 0xBE, 0x9E, 0x9F, 0x96, 0x97, 0x9B, 0xB1, 0x9D, 0x9B, 0xEB, - 0x8F, 0x9F, 0x98, 0xB2, 0x97, 0x99, 0x8F, 0xB6, 0x8F, 0xA2, 0x86, 0xB4, 0x9E, 0xA0, 0x9B, 0x94, - 0x98, 0xBD, 0x94, 0x8C, 0x98, 0x9B, 0xB9, 0x97, 0x98, 0xB1, 0xEB, 0xAC, 0xB9, 0xE8, 0x94, 0xAC, - 0xBE, 0xA0, 0x9F, 0xB0, 0x97, 0x99, 0x9F, 0x9D, 0x9B, 0xEB, 0x8F, 0x9F, 0x99, 0xBD, 0xAD, 0xBB, - 0x8F, 0x9D, 0x9C, 0xA3, 0x83, 0x8D, 0xA2, 0xA9, 0x80, 0x8D, 0xA2, 0xA0, 0x93, 0x9F, 0xB6, 0x8B, - 0x93, 0x9F, 0xB2, 0xAC, 0xB8, 0x9D, 0x88, 0xAA, 0xB8, 0xB7, 0xBE, 0xA0, 0x86, 0xB4, 0x93, 0x9F, - 0xBE, 0xAE, 0x83, 0xB1, 0xBD, 0xA2, 0x9F, 0x9E, 0x9B, 0x95, 0x98, 0xBD, 0x94, 0x8C, 0x98, 0x9B, - 0xA9, 0x97, 0x98, 0xEA, 0x88, 0xB6, 0xB9, 0xE8, 0xAE, 0xEA, 0xB8, 0xE9, 0x9B, 0xA2, 0x92, 0x8E, - 0x9B, 0xB8, 0x98, 0xBD, 0x94, 0x8C, 0x98, 0x9B, 0x97, 0x97, 0x9C, 0x9C, 0x98, 0xB2, 0xB9, 0xB7, - 0x9C, 0xA9, 0xB8, 0x9D, 0x8C, 0xA9, 0xB9, 0xA3, 0x98, 0x9F, 0x80, 0x82, 0x94, 0xA8, 0x86, 0xB4, - 0xBE, 0x9D, 0xE3, 0xAD, 0x93, 0x9F, 0x94, 0x98, 0x97, 0x98, 0xEE, 0x82, 0x9E, 0x8E, 0x9F, 0xEE, - 0x97, 0x8E, 0x93, 0xA3, 0x94, 0x9E, 0x9B, 0xEF, 0x97, 0x9E, 0x97, 0xEB, 0x94, 0xEB, 0xB5, 0x82, - 0x9E, 0x8E, 0x93, 0xEE, 0x97, 0x8E, 0x9F, 0xAD, 0x94, 0xB0, 0x9B, 0xEF, 0x97, 0x9E, 0x97, 0xEB, - 0x94, 0xEB, 0xB5, 0xAD, 0xBE, 0xA0, 0x9F, 0x96, 0x97, 0x9B, 0xB1, 0x9D, 0x9B, 0xEB, 0x8F, 0x9F, - 0x86, 0xB4, 0x98, 0xB2, 0x97, 0x99, 0x8F, 0xB6, 0x8F, 0xA2, 0x9E, 0xA0, 0x9B, 0x94, 0x98, 0xBD, - 0x94, 0x8C, 0x98, 0x9B, 0xB9, 0x8E, 0x98, 0xB1, 0xEB, 0xAC, 0xB9, 0xE8, 0x94, 0xAC, 0xBE, 0xA0, - 0x9F, 0xB6, 0x97, 0x99, 0x97, 0x9D, 0x9B, 0xEB, 0x8F, 0x9F, 0x99, 0xB2, 0x97, 0xB9, 0x8F, 0x9D, - 0x9C, 0xA3, 0x83, 0x8D, 0xA2, 0xA9, 0x80, 0x8D, 0xA2, 0xA0, 0x93, 0x9F, 0xB6, 0xAF, 0xBE, 0x9D, - 0x8C, 0xA3, 0x86, 0xB4, 0xB8, 0xB7, 0x9C, 0xEA, 0xBB, 0x8D, 0xE3, 0xAF, 0x83, 0x8D, 0xAD, 0xBD, - 0x88, 0xE8, 0xEB, 0xB3, 0x89, 0x9E, 0x9F, 0x8B, 0x97, 0x9B, 0xEE, 0x9D, 0x9B, 0xEB, 0x8F, 0x9F, - 0x99, 0xA2, 0x97, 0x92, 0x88, 0x9D, 0x8C, 0xA0, 0xBB, 0xE9, 0x88, 0xAC, 0xB9, 0x9E, 0x9F, 0xBF, - 0x97, 0x98, 0xAD, 0x9D, 0x9B, 0xEB, 0x8F, 0x9F, 0x9B, 0xA2, 0x97, 0x8C, 0x80, 0x9D, 0x8C, 0xA0, - 0xBB, 0xE9, 0x88, 0xAC, 0x86, 0xB4, 0xB9, 0x99, 0xEF, 0xAD, 0x83, 0x82, 0x90, 0xB2, 0xB8, 0x9D, - 0xA2, 0xB6, 0xB8, 0x92, 0x97, 0xAF, 0x83, 0xE8, 0xE3, 0xAE, 0x97, 0x93, 0x93, 0x98, 0x93, 0xB0, - 0x9B, 0x94, 0x98, 0xBD, 0xB1, 0xAB, 0xB2, 0xB1, 0xB3, 0x9D, 0xE3, 0xAD, 0xEA, 0x98, 0x9B, 0x8B, - 0x9F, 0x9C, 0x9B, 0x9B, 0x95, 0x99, 0x9B, 0x8B, 0xE2, 0x9B, 0x97, 0x93, 0x93, 0x98, 0x99, 0xBD, - 0x91, 0x99, 0x9B, 0x8B, 0x9F, 0x9B, 0x86, 0xB4, 0xA0, 0xB5, 0x8C, 0x8A, 0x8A, 0xEC, 0xEA, 0xB5, - 0x83, 0x8E, 0xB0, 0xA9, 0xAD, 0x97, 0xE2, 0xAC, 0xA9, 0x8D, 0xBD, 0xAA, 0x94, 0x95, 0x9C, 0xE3, - 0x80, 0xA3, 0x98, 0xE9, 0xAD, 0x8F, 0xF5, 0xA9, 0x90, 0xBF, 0x83, 0xAE, 0xB7, 0xBF, 0x99, 0xF1, - 0xEA, 0xBF, 0x8E, 0x8C, 0x9E, 0xAB, 0x83, 0xBC, 0x93, 0xE2, 0x8B, 0xAB, 0xE8, 0xF5, 0x9B, 0xB5, - 0x9E, 0x96, 0xB2, 0x9F, 0x93, 0xBD, 0xEC, 0xB9, 0x86, 0xB4, 0xAC, 0xBE, 0xE2, 0xAC, 0x9D, 0x9E, - 0x8F, 0xB7, 0x82, 0x8E, 0xAC, 0xB1, 0x82, 0xF1, 0xA8, 0xF5, 0xB8, 0x80, 0x99, 0x89, 0xE3, 0xB5, - 0x88, 0xEC, 0xB5, 0xE9, 0x97, 0xE8, 0xB5, 0xAE, 0xA9, 0xBD, 0xAD, 0x97, 0xA0, 0xA9, 0x88, 0x8B, - 0x8B, 0xBD, 0x95, 0x8D, 0xBC, 0xB4, 0xBD, 0xA3, 0x98, 0xE9, 0x8A, 0x8C, 0xB2, 0xEA, 0x8C, 0xF1, - 0x9C, 0x97, 0xEC, 0xE2, 0x9E, 0xB5, 0x99, 0x80, 0x80, 0x9C, 0x86, 0xB4, 0x96, 0x89, 0x83, 0x8B, - 0xE9, 0x9D, 0xB2, 0xAC, 0xED, 0x9B, 0x91, 0xE8, 0xEB, 0x97, 0xF5, 0xBD, 0xEE, 0x8E, 0xB9, 0x91, - 0x9C, 0x83, 0xE9, 0xEA, 0xB4, 0xBD, 0xB9, 0xE3, 0xBB, 0xAC, 0x97, 0x90, 0xBF, 0x90, 0xEC, 0xB6, - 0x89, 0x96, 0xA0, 0xAA, 0x9F, 0xA3, 0x8C, 0xEC, 0x83, 0xB1, 0x9E, 0xB8, 0x98, 0xEA, 0x8C, 0x98, - 0xB9, 0x9B, 0x95, 0x89, 0xBF, 0xEA, 0x9B, 0xA3, 0x9B, 0x8F, 0x94, 0xEE, 0x86, 0xB4, 0xBB, 0xE3, - 0xEF, 0xED, 0x8F, 0xAD, 0x88, 0xAE, 0xE8, 0xB2, 0x8C, 0xB4, 0xEF, 0xB1, 0x99, 0xA8, 0xEF, 0x9E, - 0x8A, 0xB0, 0xBF, 0xEE, 0xAD, 0xEB, 0xA2, 0x82, 0xB4, 0x92, 0x93, 0xA2, 0xF1, 0x97, 0xB2, 0xA8, - 0xB2, 0x9D, 0xBD, 0x8F, 0xA0, 0xEA, 0xA9, 0xAE, 0x8B, 0x82, 0xE8, 0x83, 0xAF, 0xEE, 0xBF, 0xE8, - 0xF1, 0xB6, 0xAA, 0xA3, 0xEA, 0xA8, 0x98, 0x9F, 0x8F, 0xED, 0x92, 0x93, 0xAB, 0xBF, 0x86, 0xB4, - 0xAA, 0x99, 0xAB, 0x8C, 0x89, 0xAD, 0x89, 0xBF, 0x9B, 0xBC, 0xA8, 0xBD, 0xB5, 0xB4, 0xAD, 0x8F, - 0x9B, 0x98, 0xEB, 0xBE, 0x8E, 0x8A, 0x89, 0x80, 0xEF, 0xAD, 0x92, 0x98, 0x83, 0xB3, 0x82, 0xE9, - 0xEA, 0xA2, 0xF1, 0x8F, 0xBB, 0x97, 0x89, 0xB9, 0x92, 0xB6, 0x92, 0xAF, 0x8A, 0x95, 0xA8, 0x8F, - 0xA3, 0xEE, 0xB8, 0x89, 0xE8, 0xBF, 0xEF, 0xB7, 0x97, 0x88, 0xF1, 0x9C, 0x8D, 0x9D, 0xB2, 0xE3, - 0x86, 0xB4, 0xAC, 0xE9, 0xB5, 0x94, 0x98, 0x88, 0x97, 0xB2, 0x96, 0x8A, 0x90, 0x9D, 0xE3, 0x83, - 0x93, 0xAB, 0xAF, 0x9D, 0x9F, 0xEE, 0xAE, 0xAD, 0x93, 0x9E, 0x9B, 0x8B, 0x9B, 0x98, 0xB5, 0xEE, - 0x93, 0x99, 0x95, 0xA0, 0x99, 0x99, 0x9B, 0xB0, 0xB9, 0xAD, 0x9E, 0x9B, 0x83, 0x9E, 0x8C, 0x88, - 0xEA, 0x8E, 0x9B, 0x8B, 0x92, 0xF5, 0x98, 0x9B, 0x93, 0xAD, 0x9B, 0x9E, 0x9B, 0x95, 0x98, 0xBD, - 0x94, 0x8C, 0x86, 0xB4, 0x92, 0x8B, 0xE2, 0x98, 0x9B, 0xBC, 0xE2, 0x9F, 0x98, 0x9B, 0x97, 0x99, - 0x98, 0xEE, 0x9B, 0xAD, 0x92, 0x8B, 0x83, 0x9E, 0x8C, 0x88, 0xEA, 0x95, 0x98, 0x98, 0x83, 0x9F, - 0x9C, 0x9D, 0xEB, 0xB8, 0xB3, 0x82, 0xAD, 0x89, 0xB5, 0x9E, 0xEE, 0x90, 0xAD, 0xB0, 0x99, 0xB4, - 0xAB, 0xED, 0xB1, 0xAB, 0x8F, 0xE2, 0xBC, 0xBD, 0x82, 0x94, 0xAC, 0xE8, 0x97, 0x98, 0xE2, 0x9D, - 0x9B, 0xEB, 0x8F, 0xBE, 0x86, 0xB4, 0x93, 0xAD, 0x8B, 0x83, 0x97, 0x98, 0xBB, 0x9B, 0x9C, 0x9B, - 0x96, 0xB1, 0xA0, 0xBC, 0x96, 0xEB, 0x9D, 0xB2, 0x8D, 0x9E, 0xB8, 0xBC, 0x99, 0xA8, 0xA8, 0xAD, - 0x8B, 0x88, 0xA2, 0x88, 0xBC, 0xEF, 0xE8, 0x9F, 0xA3, 0x8A, 0x97, 0x9F, 0x9F, 0x9D, 0x99, 0x99, - 0xA9, 0x9D, 0x9B, 0x8B, 0x8F, 0x9C, 0x98, 0xAD, 0x9F, 0x98, 0x98, 0x9E, 0x8F, 0xAD, 0x97, 0xA0, - 0x9B, 0xA2, 0x98, 0xBD, 0xBD, 0xA8, 0x86, 0xB4, 0x98, 0xBD, 0x9F, 0x9C, 0x98, 0x8B, 0xB9, 0xAD, - 0x9B, 0xB5, 0x83, 0xB6, 0xBB, 0x92, 0x88, 0xEA, 0xB9, 0x9E, 0xB5, 0xAC, 0x96, 0xE9, 0xBE, 0xE9, - 0xBE, 0xA3, 0xEF, 0xAD, 0x83, 0x82, 0x90, 0xB2, 0xB8, 0x9D, 0xA2, 0xB6, 0xB8, 0x92, 0x97, 0xAF, - 0x83, 0xE8, 0xE3, 0xAE, 0x96, 0xE8, 0x94, 0xB2, 0x96, 0xE9, 0x98, 0xB1, 0x82, 0xE8, 0x94, 0xB2, - 0x96, 0xB4, 0x98, 0xB6, 0xB8, 0x8E, 0x9B, 0xE8, 0x86, 0xB4, 0x98, 0xBD, 0x94, 0x8C, 0x92, 0x88, - 0xE2, 0x9F, 0x96, 0xA0, 0x9B, 0xAE, 0x97, 0x99, 0xAF, 0xBD, 0x91, 0xBB, 0x9B, 0xB4, 0xB2, 0xB3, - 0x8C, 0xB5, 0xBE, 0x92, 0x88, 0xAD, 0x95, 0xB3, 0xE2, 0xAC, 0xBE, 0xE9, 0xBE, 0xE9, 0x96, 0xB4, - 0x98, 0xB2, 0xB9, 0xB7, 0x9C, 0xA9, 0xB8, 0x9D, 0x8C, 0xA9, 0xB9, 0xA3, 0xEF, 0xB0, 0xB8, 0xE8, - 0xEA, 0xAC, 0x83, 0xE8, 0x9F, 0xAC, 0xB9, 0x9D, 0x88, 0xBC, 0x86, 0xB4, 0x83, 0xE8, 0x9F, 0xAF, - 0x83, 0xE9, 0x90, 0xA9, 0x97, 0x93, 0x93, 0x98, 0x90, 0xBD, 0x83, 0x9E, 0x8C, 0x88, 0xEA, 0xBD, - 0x98, 0x93, 0x93, 0x98, 0x92, 0x8E, 0x99, 0x99, 0x9B, 0x88, 0xB1, 0xAD, 0xBD, 0xBB, 0xEA, 0x9D, - 0x9E, 0xB3, 0xA9, 0x9D, 0x9B, 0x8B, 0x8B, 0x98, 0xBD, 0xB9, 0xAD, 0xED, 0xBD, 0xE9, 0xEA, 0x99, - 0x9B, 0xBD, 0x9F, 0x98, 0x97, 0x93, 0x9D, 0xBB, 0x97, 0x9E, 0xB1, 0x9D, 0x86, 0xB4, 0x99, 0x99, - 0xA9, 0x9D, 0x9B, 0x8B, 0x8F, 0x9C, 0x98, 0xAD, 0x93, 0x98, 0x9C, 0xB3, 0xEB, 0xB5, 0xBE, 0x92, - 0x88, 0xAD, 0x95, 0xB3, 0xE2, 0xAC, 0x83, 0xE8, 0x9F, 0xAF, 0xB9, 0x9D, 0x9C, 0xA3, 0x83, 0x8D, - 0xA2, 0xA9, 0x80, 0x8D, 0xA2, 0xA0, 0x96, 0xB7, 0xEF, 0xB6, 0xBE, 0x99, 0xE3, 0xB0, 0x83, 0x89, - 0xE3, 0xAD, 0x83, 0x82, 0x90, 0xB2, 0xB8, 0x9D, 0xA2, 0xB6, 0xB8, 0x92, 0x94, 0xBC, 0x86, 0xB4, - 0x83, 0xE9, 0x98, 0xA0, 0x96, 0xB7, 0xB2, 0xEA, 0xB8, 0x8D, 0xAD, 0xAD, 0x82, 0x8B, 0x83, 0x93, - 0x91, 0xAD, 0x83, 0x98, 0x98, 0x8B, 0x8F, 0x92, 0x9B, 0xBD, 0x93, 0xAD, 0x8F, 0x8E, 0x9B, 0xBC, - 0x9D, 0xB2, 0xB2, 0x8B, 0x83, 0x82, 0x90, 0xB2, 0xB8, 0x9D, 0xA2, 0xB6, 0xB8, 0x92, 0x97, 0xBD, - 0x89, 0x9D, 0xE3, 0xA9, 0x80, 0x9D, 0xB6, 0xAF, 0x80, 0xE9, 0x97, 0xA9, 0x93, 0x9D, 0xA2, 0xEA, - 0x86, 0xB4, 0x80, 0x99, 0xEE, 0xAD, 0x9B, 0xAD, 0x93, 0x98, 0x9B, 0x88, 0xB5, 0xAF, 0x88, 0x82, - 0xB2, 0xEA, 0x80, 0x82, 0x90, 0xAF, 0x83, 0x8D, 0xAD, 0xBD, 0x8B, 0xB7, 0x9C, 0xA0, 0xBB, 0x8D, - 0x97, 0xBD, 0x8B, 0xE8, 0x8C, 0xA3, 0xBE, 0x9D, 0xB6, 0xB7, 0xBB, 0x8D, 0x94, 0xB2, 0xBE, 0x9D, - 0xE3, 0xAF, 0x93, 0x9C, 0x98, 0xA3, 0x83, 0x8D, 0x94, 0xEA, 0xBB, 0x8D, 0x94, 0xB6, 0x93, 0x9C, - 0x94, 0xEA, 0x86, 0xB4, 0x83, 0x82, 0x88, 0xB6, 0xB8, 0x8D, 0x8C, 0xAF, 0xBE, 0x9E, 0x98, 0xB4, - 0x98, 0xBD, 0xEE, 0xA8, 0x98, 0xBD, 0x9F, 0x9F, 0x9B, 0x83, 0x92, 0x97, 0x95, 0xEE, 0x94, 0xE3, - 0x9B, 0xBD, 0x90, 0xB7, 0x9B, 0xA0, 0x98, 0x8C, 0x97, 0x9C, 0x97, 0x9D, 0x99, 0x99, 0xA9, 0x9D, - 0x9B, 0x8B, 0x8F, 0x9C, 0x98, 0xAD, 0x93, 0x99, 0x97, 0x9F, 0xB9, 0xAD, 0x92, 0xA2, 0xB5, 0x83, - 0x8F, 0x9D, 0x9C, 0xA3, 0x86, 0xB4, 0x83, 0x8D, 0xA2, 0xA9, 0x80, 0x8D, 0xA2, 0xA0, 0x93, 0x9F, - 0xB2, 0xAC, 0xB8, 0x9D, 0x88, 0xAA, 0xB8, 0xB7, 0xBE, 0xA0, 0x96, 0x99, 0x98, 0xA9, 0xBE, 0x9D, - 0x8B, 0xAF, 0x97, 0x9B, 0x97, 0x99, 0x9B, 0x8B, 0x9F, 0xBB, 0x90, 0x9C, 0x98, 0xB2, 0xB9, 0xB7, - 0x9C, 0xA9, 0xB8, 0x9D, 0x8C, 0xA9, 0xB9, 0xA3, 0x98, 0x9F, 0x80, 0x82, 0x94, 0xA8, 0xBE, 0x9D, - 0xE3, 0xAD, 0x93, 0x9F, 0x94, 0xB6, 0x86, 0xB4, 0xB9, 0xB4, 0x88, 0xAA, 0x80, 0xB7, 0xB6, 0xB0, - 0x83, 0x82, 0x88, 0xB6, 0x93, 0x9C, 0x98, 0xAC, 0xB8, 0x9D, 0xB6, 0xB0, 0xBF, 0x8E, 0x9B, 0xA3, - 0x98, 0xBD, 0x94, 0x8C, 0x92, 0x88, 0x9F, 0x9F, 0x91, 0xA0, 0x9B, 0xAA, 0xBD, 0xB2, 0x8C, 0xB1, - 0x80, 0x82, 0x94, 0xA8, 0xBE, 0x9D, 0xE3, 0xAD, 0x96, 0xB4, 0x98, 0xB2, 0xB9, 0xB7, 0x9C, 0xA9, - 0xB8, 0x9D, 0x8C, 0xA9, 0xB9, 0xA3, 0xEF, 0xB0, 0x86, 0xB4, 0xB8, 0xE8, 0xE8, 0x99, 0x9F, 0x9D, - 0xEB, 0xEF, 0x96, 0xB4, 0x98, 0xB2, 0xB9, 0xB7, 0x9C, 0xA9, 0xB8, 0x9D, 0x8C, 0xA9, 0xB9, 0xA3, - 0xEF, 0xB0, 0xB8, 0xE8, 0xEA, 0xAD, 0x9E, 0x8B, 0x83, 0x90, 0x91, 0xB5, 0x80, 0x93, 0xB2, 0xAC, - 0xB9, 0x94, 0x9B, 0x8B, 0x9F, 0x96, 0x98, 0x8B, 0x9B, 0x9E, 0xBD, 0xBD, 0x93, 0x98, 0x9B, 0x93, - 0x8C, 0xB5, 0x8C, 0xAC, 0xA2, 0xAD, 0x97, 0x90, 0x96, 0xBB, 0x86, 0xB4, 0xAE, 0xA9, 0xB2, 0xB5, - 0xBB, 0xBF, 0xBB, 0xEB, 0xB8, 0xAB, 0xA9, 0xB4, 0x9E, 0xE8, 0x9C, 0x8F, 0xEB, 0xA8, 0xF5, 0x9C, - 0xB5, 0x8B, 0xA3, 0xEB, 0xB4, 0xAA, 0xEF, 0xB3, 0xBC, 0x91, 0x8B, 0xED, 0xBC, 0xAC, 0x9E, 0xA8, - 0xF1, 0xA0, 0xE2, 0xBD, 0x83, 0xEA, 0xB5, 0x91, 0x9E, 0xA8, 0x95, 0xB8, 0x88, 0xB9, 0x83, 0x8E, - 0xBF, 0xB3, 0x88, 0xBC, 0x89, 0x9D, 0x9D, 0xEB, 0x8E, 0xA3, 0x82, 0x8D, 0x86, 0xB4, 0x94, 0xBC, - 0x83, 0xE3, 0xB4, 0xB6, 0xBD, 0xB8, 0x96, 0x90, 0x95, 0xED, 0xBC, 0x97, 0xEF, 0xAC, 0xAA, 0xAB, - 0xAC, 0xB0, 0xEF, 0x8D, 0x8B, 0x90, 0x94, 0xBB, 0x8F, 0xB0, 0x93, 0xA0, 0xA2, 0x94, 0xB9, 0xB3, - 0xAE, 0x94, 0xB4, 0xED, 0xAE, 0xBF, 0x9D, 0xEF, 0xB9, 0xEF, 0xF5, 0x99, 0xEA, 0xBC, 0xB1, 0xB3, - 0x8D, 0xBF, 0x9E, 0x92, 0xE3, 0xAE, 0xEA, 0xEB, 0xBD, 0x96, 0x88, 0xAA, 0xAC, 0x95, 0x86, 0xB4, - 0xB1, 0xEF, 0x98, 0xEE, 0xA0, 0x9E, 0xBC, 0xE2, 0x9B, 0x92, 0xB8, 0xB1, 0xB0, 0xA8, 0xBC, 0xED, - 0xE9, 0xAD, 0xB2, 0x80, 0xA0, 0xB3, 0xAF, 0x8A, 0xB2, 0xB8, 0xA3, 0x99, 0xA3, 0xA2, 0xB0, 0xAC, - 0xBE, 0xB4, 0x8C, 0xB5, 0xAF, 0x8A, 0xEF, 0xB5, 0x8A, 0xAD, 0x98, 0xE3, 0x97, 0x83, 0x8B, 0x96, - 0xA3, 0xA2, 0x8B, 0x97, 0xB6, 0x8C, 0xAC, 0x83, 0xB6, 0xEA, 0x98, 0x99, 0xEE, 0xAD, 0x98, 0xB3, - 0x86, 0xB4, 0xB1, 0xB1, 0xBB, 0xA3, 0xB7, 0xAB, 0x8D, 0x98, 0x93, 0xA2, 0xBF, 0x91, 0x98, 0x8D, - 0x9E, 0x9F, 0x8B, 0xA3, 0x9D, 0xAC, 0x8C, 0xBB, 0xB8, 0xA9, 0x95, 0xB5, 0xEB, 0x91, 0xA8, 0xB5, - 0xEC, 0xA2, 0xB1, 0xEF, 0xA9, 0xEC, 0x89, 0xAF, 0xAF, 0xAE, 0x97, 0x9F, 0xEC, 0x96, 0xE3, 0xED, - 0xB1, 0xB7, 0x8B, 0xBB, 0x88, 0x9D, 0xB8, 0x95, 0xAC, 0xB8, 0x99, 0x80, 0xE3, 0xEF, 0xB4, 0xB3, - 0x9F, 0x92, 0x86, 0xB4, 0xBF, 0x91, 0xAF, 0xBB, 0xF5, 0xEB, 0x94, 0xBD, 0xAE, 0xE3, 0x8F, 0xE9, - 0x83, 0xEC, 0xBC, 0x8A, 0xAD, 0x8A, 0xEC, 0xBD, 0x8C, 0xBB, 0x8B, 0xBD, 0xB6, 0x80, 0x98, 0xB9, - 0x8A, 0xBD, 0xA9, 0xEF, 0xF1, 0xEE, 0xBB, 0xF1, 0xB2, 0xBE, 0xF5, 0xE2, 0xBD, 0x8A, 0x80, 0xF1, - 0x82, 0xB8, 0x8C, 0x82, 0xA9, 0x91, 0xEC, 0xE2, 0xB0, 0xE3, 0xBF, 0x8F, 0x97, 0xAF, 0xB2, 0x97, - 0xB5, 0x9C, 0xBE, 0x91, 0x86, 0xB4, 0xB9, 0xBB, 0x94, 0xBF, 0xB0, 0xB4, 0x8B, 0xAE, 0xE9, 0x99, - 0xAC, 0xA9, 0xB4, 0xAA, 0xED, 0xB5, 0xB2, 0x89, 0xB5, 0x88, 0x83, 0xE9, 0xA8, 0x91, 0xBE, 0xBC, - 0x9D, 0xEA, 0x93, 0xBE, 0xA3, 0xF5, 0xEE, 0x92, 0x90, 0x99, 0xB3, 0x99, 0x99, 0x95, 0xB4, 0x9E, - 0x9E, 0xAA, 0x8A, 0x82, 0xAC, 0xAB, 0x8B, 0xAB, 0x9B, 0xB5, 0xEA, 0xB9, 0xAD, 0x9F, 0xB2, 0xB8, - 0x89, 0xB0, 0x93, 0xEC, 0xEC, 0x83, 0x86, 0xB4, 0xA0, 0xBE, 0xAE, 0x9F, 0xB1, 0x99, 0x9C, 0xAA, - 0x8D, 0xA0, 0xE8, 0xE9, 0xA8, 0x9D, 0x9F, 0xB6, 0x8B, 0x97, 0xA2, 0x93, 0xA9, 0xEC, 0xB5, 0xB0, - 0xAD, 0x91, 0xF5, 0xBD, 0xAF, 0xEF, 0xF1, 0xA9, 0x90, 0xAA, 0x9F, 0xF1, 0xB6, 0xED, 0x8B, 0xAA, - 0x82, 0xBC, 0x99, 0x93, 0xB2, 0xA8, 0xA3, 0xAB, 0x9D, 0xAB, 0x88, 0x92, 0xAA, 0xBE, 0xB1, 0x89, - 0x9E, 0xAA, 0xED, 0x8A, 0xB9, 0xEB, 0x90, 0xA8, 0x86, 0xB4, 0x90, 0x97, 0xAA, 0xA3, 0x94, 0xB2, - 0x9E, 0x9F, 0x93, 0xEA, 0x8B, 0xB0, 0x8A, 0x82, 0xB1, 0x89, 0xB4, 0x97, 0x8C, 0xA2, 0x97, 0x8B, - 0xAF, 0x92, 0x8F, 0xB3, 0xBE, 0x9B, 0x88, 0xA8, 0xEE, 0xE9, 0x95, 0xE9, 0xE8, 0xA3, 0xAE, 0xEA, - 0x8C, 0x9E, 0xF5, 0x80, 0xA3, 0xAE, 0xEC, 0xA9, 0xB8, 0xE8, 0xBD, 0xB7, 0x93, 0xB4, 0x9C, 0xEC, - 0x82, 0x90, 0xA8, 0xB6, 0x83, 0x99, 0x9E, 0xAC, 0x95, 0xA0, 0x86, 0xB4, 0xAA, 0xAF, 0x91, 0x8A, - 0xB5, 0x95, 0x9F, 0xE3, 0x9F, 0x97, 0x93, 0xED, 0xEE, 0x82, 0xA0, 0x91, 0xAD, 0xEF, 0x9C, 0xA9, - 0x8C, 0xB2, 0x8C, 0x8F, 0xAA, 0xE2, 0x8D, 0xBF, 0xB7, 0xE2, 0x93, 0xA8, 0xED, 0xBF, 0x8A, 0xEC, - 0x9D, 0x80, 0xED, 0xB2, 0x8A, 0xE8, 0xEB, 0x90, 0xED, 0x99, 0xE3, 0xAE, 0x8A, 0xB1, 0xB3, 0x83, - 0xB0, 0x90, 0xAB, 0x82, 0xEC, 0xB0, 0x90, 0xAC, 0xAC, 0x96, 0x9F, 0xEC, 0x86, 0xB4, 0xB8, 0x8A, - 0x9F, 0x8E, 0xB6, 0x96, 0xEE, 0xE2, 0xBF, 0xA9, 0x8D, 0xEF, 0xEF, 0x80, 0xB7, 0x9F, 0xEF, 0xED, - 0x89, 0x9F, 0xF1, 0x9C, 0xEB, 0xB5, 0xAB, 0x91, 0xF5, 0xB2, 0x8B, 0xEF, 0xAE, 0x9E, 0x90, 0xAD, - 0xB4, 0xBF, 0x9F, 0xA8, 0xA3, 0x90, 0x80, 0xF1, 0xE2, 0x91, 0xB5, 0xB3, 0x9E, 0xEE, 0xE8, 0x89, - 0x91, 0xBB, 0xBC, 0xEA, 0xB1, 0xE8, 0xE3, 0xB3, 0x8B, 0xBC, 0x82, 0x92, 0xEB, 0x9C, 0x86, 0xB4, - 0x83, 0x89, 0xB9, 0x9D, 0xB6, 0x92, 0xEF, 0xE2, 0xA8, 0x82, 0x82, 0xB0, 0x9B, 0x80, 0xAC, 0xF1, - 0xB1, 0x92, 0x94, 0x8E, 0xA9, 0x90, 0xF1, 0xA0, 0x96, 0x82, 0xF5, 0xF5, 0x91, 0xAA, 0xA0, 0x8E, - 0x86, 0xB4, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0x9F, 0x94, 0x9E, 0xFA, 0x99, 0x9F, 0x88, 0x8E, 0x93, - 0x9C, 0x93, 0x99, 0x9B, 0x8E, 0x9F, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0x86, 0xB4, 0xF7, 0xF7, 0xF7, - 0xF7, 0xF7, 0x98, 0x9F, 0x9D, 0x93, 0x94, 0xFA, 0x99, 0x9F, 0x88, 0x8E, 0x93, 0x9C, 0x93, 0x99, - 0x9B, 0x8E, 0x9F, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0x86, 0xB4, 0x97, 0x93, 0x93, 0x92, 0xE3, 0x8E, - 0x99, 0x99, 0x98, 0xBE, 0xE8, 0xBD, 0x9B, 0xAD, 0x93, 0x98, 0x9B, 0xBD, 0x93, 0x99, 0x9F, 0x9B, - 0x97, 0xAD, 0x9E, 0x8B, 0x83, 0x90, 0x91, 0xB5, 0x80, 0x93, 0xB2, 0xAC, 0xB9, 0x94, 0x9B, 0x8B, - 0x9F, 0x96, 0x98, 0x8B, 0x9B, 0xAD, 0xBE, 0x9E, 0x9F, 0x96, 0x97, 0x9B, 0xB1, 0x9D, 0x9B, 0xEB, - 0x8F, 0x9F, 0x98, 0xB2, 0x97, 0x99, 0x8F, 0xB6, 0x8F, 0xA2, 0x86, 0xB4, 0x9E, 0xA0, 0x9B, 0x94, - 0x98, 0xBD, 0x94, 0x8C, 0x98, 0x9B, 0xB9, 0x97, 0x98, 0xB1, 0xEB, 0xAC, 0xBE, 0xE8, 0x94, 0xAC, - 0xBE, 0xA0, 0x9F, 0xB0, 0x97, 0x99, 0x9F, 0x9D, 0x9B, 0xEB, 0x8F, 0x9F, 0x99, 0xBD, 0xAD, 0xBB, - 0x8F, 0x9D, 0x9C, 0xA3, 0x83, 0x8D, 0xA2, 0xA9, 0x80, 0x8D, 0xA2, 0xA0, 0x93, 0x9F, 0xB6, 0x8B, - 0x93, 0x9F, 0xB2, 0xAC, 0xB8, 0x9D, 0x88, 0xAA, 0xB8, 0xB7, 0xBE, 0xA0, 0x86, 0xB4, 0x93, 0x9F, - 0xBE, 0xAE, 0x83, 0xB1, 0xBD, 0xA2, 0x9E, 0xB0, 0x9B, 0x97, 0x98, 0xBD, 0x94, 0x8C, 0x98, 0x9B, - 0xA9, 0x97, 0x98, 0x8F, 0x94, 0xA9, 0xB8, 0xE9, 0x8C, 0xB1, 0x97, 0x88, 0xE2, 0xAD, 0x92, 0x8B, - 0x83, 0x9E, 0x8C, 0x8B, 0x8B, 0x9E, 0x9E, 0x98, 0x80, 0x8B, 0x83, 0x82, 0x90, 0xB2, 0xB8, 0x9D, - 0x8C, 0xA9, 0xB9, 0xA3, 0x98, 0x90, 0xB9, 0xE9, 0x94, 0xEB, 0xBB, 0x8D, 0xEF, 0xB4, 0x86, 0xB4, - 0x93, 0x9F, 0x94, 0x98, 0x93, 0x99, 0x97, 0xA2, 0x97, 0x98, 0xEE, 0x82, 0x9E, 0x8E, 0x9F, 0xEE, - 0x97, 0x8E, 0x93, 0xA3, 0x94, 0x9E, 0x9B, 0xEF, 0x97, 0x9E, 0x9F, 0xEB, 0x97, 0x9C, 0xB5, 0x82, - 0x9E, 0x8E, 0x97, 0xA2, 0x97, 0x9E, 0x9F, 0xA3, 0x97, 0xA0, 0x9B, 0xEF, 0x97, 0x9E, 0x9F, 0xEB, - 0x97, 0x9C, 0xB5, 0xAD, 0xBE, 0x9E, 0x9F, 0x96, 0x97, 0x9B, 0xB1, 0x9D, 0x9B, 0xEB, 0x8F, 0x9F, - 0x86, 0xB4, 0x98, 0xB2, 0x97, 0x99, 0x8F, 0xB6, 0x8F, 0xA2, 0x9E, 0xA0, 0x9B, 0x94, 0x98, 0xBD, - 0x94, 0x8C, 0x98, 0x9B, 0xB9, 0x97, 0x98, 0xB1, 0xEB, 0xAC, 0xB9, 0xE8, 0x94, 0xAC, 0xBE, 0xA0, - 0x9F, 0xB0, 0x97, 0x99, 0x9F, 0x9D, 0x9B, 0xEB, 0x8F, 0x9F, 0x99, 0xBD, 0xAD, 0xBB, 0x8F, 0x9D, - 0x9C, 0xA3, 0x83, 0x8D, 0xA2, 0xA9, 0x80, 0x8D, 0xA2, 0xA0, 0x93, 0x9F, 0xB6, 0x8B, 0x93, 0x9F, - 0xB2, 0xAC, 0x86, 0xB4, 0xB8, 0x9D, 0x88, 0xAA, 0xB8, 0xB7, 0xBE, 0xA0, 0x93, 0x9F, 0xBE, 0xAE, - 0x83, 0xB1, 0xBD, 0xA2, 0x9F, 0x9E, 0x9B, 0x95, 0x98, 0xBD, 0x94, 0x8C, 0x98, 0x9B, 0xA9, 0x97, - 0x98, 0xEA, 0x88, 0xB6, 0xB9, 0xE8, 0xAE, 0xEA, 0xB8, 0xE9, 0x9B, 0xA2, 0x92, 0x8E, 0x9B, 0xB8, - 0x98, 0xBD, 0x94, 0x8C, 0x98, 0x9B, 0x97, 0x97, 0x9C, 0x9C, 0x98, 0xB2, 0xB9, 0xB7, 0x9C, 0xA9, - 0xB8, 0x9D, 0x8C, 0xA9, 0x86, 0xB4, 0xB9, 0xA3, 0x98, 0x9F, 0x80, 0x82, 0x94, 0xA8, 0xBE, 0x9D, - 0xE3, 0xAD, 0x93, 0x9F, 0x94, 0x98, 0x97, 0x93, 0x93, 0x99, 0x93, 0xB0, 0x9B, 0x94, 0x98, 0xBD, - 0xB1, 0xAB, 0xB2, 0xB1, 0xB3, 0x9D, 0xE3, 0xAD, 0xEA, 0x98, 0x9B, 0x8B, 0x9F, 0x9C, 0x9B, 0x9B, - 0x95, 0x99, 0x9B, 0xBD, 0xE2, 0x9B, 0x97, 0x93, 0x93, 0x99, 0x99, 0xBD, 0x91, 0x99, 0x9B, 0xBD, - 0x9F, 0x9B, 0xE8, 0xA8, 0xEC, 0x8A, 0x86, 0xB4, 0xA0, 0xF5, 0xBC, 0x9F, 0xEE, 0x8D, 0x9F, 0x89, - 0x82, 0xB1, 0xAF, 0xBE, 0x8E, 0xE2, 0xEA, 0xB1, 0xB1, 0xF1, 0xBE, 0xB1, 0x91, 0xF5, 0x91, 0x9C, - 0x97, 0xE3, 0x9B, 0xAB, 0xB7, 0xB7, 0x92, 0x98, 0xBE, 0xA2, 0xE8, 0x91, 0x88, 0x98, 0x91, 0x82, - 0x8A, 0xAF, 0x95, 0x90, 0xB4, 0x8B, 0xB5, 0xAA, 0xEC, 0xBE, 0x89, 0xF1, 0x80, 0x88, 0x88, 0x83, - 0xBD, 0xA3, 0xA0, 0xAB, 0xAC, 0x9C, 0x83, 0xB6, 0x86, 0xB4, 0x95, 0x8C, 0xA3, 0xE3, 0xB5, 0x80, - 0xB2, 0x90, 0xE2, 0xAB, 0xAE, 0xA8, 0x8B, 0x92, 0xED, 0xEB, 0xB5, 0xA8, 0xB4, 0x96, 0xF5, 0x80, - 0x94, 0x93, 0x8F, 0x98, 0x97, 0x95, 0xB5, 0x8B, 0xEB, 0x92, 0xBD, 0xE3, 0x95, 0xAB, 0xBB, 0xAB, - 0xAD, 0xA8, 0xE8, 0xB8, 0xEA, 0xEE, 0xAB, 0x8D, 0x8C, 0xED, 0x88, 0x93, 0xB0, 0x8D, 0xEF, 0xB8, - 0x9D, 0xEA, 0x8B, 0x98, 0xBD, 0x9B, 0x83, 0xAF, 0x9E, 0x82, 0x86, 0xB4, 0xAF, 0xAB, 0xEF, 0xBE, - 0xB4, 0xEB, 0x9B, 0xE2, 0xAF, 0x9E, 0x8D, 0xB5, 0x8A, 0x83, 0xBE, 0xB7, 0x8F, 0xA8, 0xA9, 0xF1, - 0xB5, 0xB3, 0xA8, 0xEA, 0xB1, 0xA2, 0x8F, 0xAF, 0xBD, 0xAF, 0xB7, 0x8D, 0x89, 0x83, 0x83, 0xA0, - 0xB2, 0x9D, 0x95, 0xB5, 0x9E, 0xA2, 0xAA, 0x99, 0x89, 0xAA, 0x82, 0xAB, 0x89, 0xB5, 0xAC, 0x83, - 0x95, 0xB9, 0xA3, 0x9F, 0x94, 0xB3, 0xB4, 0x9E, 0xE8, 0x94, 0x9C, 0xA9, 0x86, 0xB4, 0xEC, 0x8E, - 0xEC, 0x99, 0x90, 0xEB, 0x97, 0x99, 0xF5, 0xA3, 0x8E, 0x8F, 0xA3, 0xAF, 0xE2, 0xB5, 0x96, 0x99, - 0x97, 0xA9, 0x82, 0xB3, 0xB7, 0xA3, 0x92, 0xBC, 0xBF, 0xF1, 0xAA, 0xB1, 0xB4, 0x90, 0xEB, 0xB9, - 0x89, 0x89, 0xEE, 0xB3, 0xE9, 0xA0, 0x8B, 0xED, 0xAE, 0x88, 0x8C, 0xBE, 0x9C, 0x97, 0xAC, 0xB8, - 0x96, 0xBE, 0x8A, 0xB8, 0x95, 0xB1, 0x9E, 0xBB, 0x8E, 0xF5, 0x80, 0x9C, 0xA3, 0xB2, 0x86, 0xB4, - 0xBF, 0x92, 0x95, 0xA8, 0xAA, 0x98, 0x91, 0xBB, 0xBF, 0x93, 0xB4, 0xA9, 0x94, 0xB5, 0x99, 0xB5, - 0x82, 0xB5, 0x95, 0x89, 0xAB, 0xE3, 0x91, 0xE2, 0x99, 0xA0, 0x83, 0xAB, 0xE9, 0xB7, 0x9F, 0xB3, - 0xB1, 0x9F, 0xF5, 0xAE, 0xE9, 0x8A, 0x98, 0xF1, 0xE2, 0x90, 0xB8, 0x99, 0x97, 0xB1, 0xBC, 0xEF, - 0xBD, 0xF1, 0x9F, 0xAF, 0xAA, 0xEE, 0x88, 0xB0, 0xB6, 0x8B, 0xBF, 0x93, 0x96, 0xAF, 0xF5, 0x80, - 0x86, 0xB4, 0xAB, 0x9F, 0xB1, 0x9D, 0xA3, 0x90, 0xAE, 0xB5, 0xAC, 0xAF, 0x88, 0xB4, 0x8A, 0xB2, - 0xBB, 0xEB, 0x89, 0x8F, 0xAD, 0xEF, 0x8B, 0xB3, 0xA0, 0xEC, 0x9F, 0xA3, 0x96, 0x9E, 0xBB, 0x96, - 0xAF, 0xBD, 0xEC, 0x88, 0xBF, 0xB0, 0x8A, 0xB3, 0x8B, 0x80, 0x92, 0xB3, 0xB5, 0xEB, 0xEA, 0xF5, - 0xA0, 0xB5, 0xAC, 0xB6, 0xBB, 0x94, 0xE3, 0xBB, 0x9C, 0xED, 0xEE, 0x99, 0x9D, 0x98, 0xED, 0x93, - 0xB0, 0xB0, 0x86, 0xB4, 0x8E, 0x9B, 0x97, 0xB2, 0xA2, 0x94, 0xEE, 0xE8, 0xE9, 0xA2, 0x91, 0x8B, - 0xBF, 0xAA, 0x9C, 0x8A, 0xB3, 0x8A, 0x8B, 0xAE, 0xB4, 0x80, 0x9D, 0xB1, 0xBF, 0xEB, 0xEB, 0xAF, - 0xA8, 0x9E, 0xED, 0xAA, 0xA3, 0x93, 0x88, 0x90, 0x8B, 0xB2, 0x8B, 0xB8, 0x8A, 0x90, 0xBF, 0xA3, - 0x92, 0x8A, 0x80, 0x96, 0xB5, 0x9B, 0x83, 0xF5, 0x80, 0xB4, 0xE9, 0x96, 0xAF, 0xEA, 0xE9, 0xAD, - 0xAA, 0xAB, 0xB4, 0xEE, 0x86, 0xB4, 0xAF, 0x8C, 0xB6, 0x9F, 0xBC, 0xA8, 0xAC, 0x8C, 0xE9, 0xAA, - 0xAC, 0xE3, 0xBD, 0xB4, 0xB7, 0xB7, 0xBF, 0xF5, 0x97, 0x8F, 0x8D, 0xA3, 0xBF, 0xBD, 0xB3, 0x95, - 0xA2, 0x94, 0xEA, 0xA2, 0xB6, 0xBD, 0x98, 0xB1, 0xBD, 0xB0, 0xBE, 0x99, 0xB5, 0xF5, 0xBE, 0xED, - 0xEE, 0x91, 0x94, 0xB0, 0xBC, 0xB9, 0x9E, 0xF5, 0x8A, 0xEE, 0xAB, 0x88, 0xBB, 0xF1, 0xAC, 0xEF, - 0xEA, 0xBE, 0xBE, 0xB6, 0x95, 0x82, 0x86, 0xB4, 0xB2, 0xAF, 0x89, 0x9B, 0xB3, 0xB9, 0xE9, 0x96, - 0xB5, 0xAD, 0xAB, 0xB3, 0xA0, 0x93, 0xE3, 0xF1, 0xB0, 0xA9, 0x8F, 0xEB, 0x94, 0x89, 0x99, 0x83, - 0xF5, 0xA9, 0xA9, 0x97, 0xB4, 0xBB, 0x9C, 0x8E, 0x8C, 0x99, 0x9D, 0xB0, 0xAE, 0xB9, 0x8A, 0xAB, - 0xE8, 0x80, 0xB5, 0x9F, 0xEC, 0xB4, 0xE2, 0x94, 0x9D, 0xEB, 0xBE, 0x8D, 0x94, 0x9F, 0xAC, 0x9C, - 0x90, 0x8B, 0xEB, 0xBF, 0xB6, 0x80, 0x9E, 0xBC, 0x86, 0xB4, 0x80, 0x8F, 0x8B, 0x8A, 0xF5, 0xEF, - 0xA8, 0xEF, 0xB5, 0xB2, 0xBF, 0x9F, 0xA3, 0x98, 0xB4, 0x95, 0xAF, 0xAE, 0x90, 0xB7, 0xA8, 0x97, - 0x8C, 0xBB, 0xB2, 0x99, 0xB3, 0xEC, 0xB3, 0xAA, 0xA2, 0xAC, 0xED, 0xEE, 0x9E, 0x8A, 0xA0, 0x9D, - 0xAB, 0x90, 0x99, 0x82, 0xE2, 0x82, 0xED, 0x8C, 0x92, 0xA8, 0xF1, 0x9E, 0xE8, 0xA0, 0xBF, 0x9F, - 0xBD, 0x94, 0xA8, 0xB5, 0xBE, 0x9E, 0xE9, 0xB3, 0x9C, 0xF5, 0x86, 0xB4, 0xAB, 0xE8, 0xA3, 0x91, - 0xEB, 0xAB, 0x8A, 0xE3, 0xF5, 0xBC, 0xBE, 0x95, 0xB1, 0xEF, 0x99, 0xBB, 0xB0, 0x80, 0x8C, 0xB9, - 0x91, 0xBF, 0xA2, 0xAE, 0x8D, 0xBE, 0x83, 0x98, 0xA9, 0xE3, 0xA8, 0x97, 0xF1, 0xEA, 0x83, 0x9C, - 0xF1, 0xA9, 0x9F, 0x99, 0x9B, 0xAD, 0x9F, 0x9B, 0x9B, 0xBB, 0x95, 0x99, 0x9B, 0xB5, 0xE2, 0xAD, - 0xBD, 0xBD, 0x91, 0x96, 0x97, 0x98, 0x93, 0x9D, 0x9B, 0xEB, 0x8F, 0xBE, 0x86, 0xB4, 0x9F, 0xAD, - 0x9F, 0x98, 0xF5, 0xAD, 0x8B, 0x93, 0x97, 0x9B, 0x83, 0x98, 0x9B, 0xBC, 0xE2, 0x99, 0x9B, 0x8B, - 0x9B, 0xAD, 0x9E, 0xAD, 0x83, 0x9E, 0x8C, 0x88, 0xEA, 0xB1, 0x9B, 0x8B, 0x92, 0xF5, 0x98, 0x9B, - 0x8F, 0xAD, 0x9B, 0xEE, 0x9B, 0x98, 0x9B, 0x9E, 0x9B, 0x91, 0x98, 0xBD, 0x94, 0x8C, 0x92, 0x8E, - 0x83, 0x9F, 0x9B, 0xAD, 0x93, 0x98, 0x9B, 0x9E, 0x9B, 0x95, 0x98, 0xBD, 0x94, 0x8C, 0x86, 0xB4, - 0x92, 0x8B, 0xE2, 0x98, 0x9B, 0xBC, 0xE2, 0x9F, 0x98, 0x9B, 0x97, 0x99, 0x9B, 0x8B, 0x83, 0xAD, - 0x92, 0x8B, 0x83, 0x9E, 0x8C, 0x88, 0xEA, 0x95, 0x98, 0x98, 0x83, 0x9F, 0x9C, 0x9B, 0x96, 0xB1, - 0xA0, 0xBC, 0x96, 0xEB, 0x9D, 0xB2, 0x8D, 0x9E, 0xB8, 0xBC, 0x99, 0xA8, 0xA8, 0xAD, 0x8B, 0x88, - 0xA2, 0x88, 0xBC, 0xEF, 0xE8, 0x9F, 0xA3, 0x8A, 0x97, 0x98, 0xE2, 0x9D, 0x9B, 0xEB, 0x8F, 0xBE, - 0x86, 0xB4, 0x93, 0xAD, 0x8B, 0x83, 0x97, 0x98, 0xBB, 0x9B, 0x9C, 0x9E, 0xAF, 0x8E, 0x9F, 0xBC, - 0xA9, 0xBC, 0xEF, 0xE3, 0x9C, 0xF1, 0x89, 0x99, 0xAD, 0xED, 0xB7, 0xA2, 0x8B, 0xE3, 0x91, 0xAB, - 0x8C, 0x8A, 0xBD, 0xF5, 0xEB, 0x91, 0x97, 0x9E, 0xE2, 0x9D, 0x99, 0x99, 0xA9, 0x9D, 0x9B, 0x8B, - 0x8F, 0x9C, 0x98, 0xAD, 0x9F, 0x98, 0x98, 0x9E, 0x97, 0xAD, 0x97, 0x8E, 0x9B, 0xAC, 0x98, 0xBD, - 0xBD, 0xA8, 0x86, 0xB4, 0x98, 0xBD, 0x9F, 0x9C, 0x98, 0x8B, 0xB9, 0xAD, 0x9B, 0xB5, 0x83, 0xB0, - 0xBB, 0x92, 0x88, 0xEA, 0xB9, 0x9E, 0xB5, 0xAC, 0x96, 0xE8, 0x94, 0xB2, 0x96, 0xB4, 0x98, 0xB2, - 0xB9, 0xB7, 0x9C, 0xA9, 0xB8, 0x9D, 0x8C, 0xA9, 0xB9, 0xA3, 0xEF, 0xAF, 0x80, 0x82, 0x8B, 0xAC, - 0x83, 0xE8, 0x9F, 0xAC, 0xB9, 0xB7, 0xE3, 0xAC, 0xBE, 0x99, 0xEF, 0xAD, 0x80, 0x8D, 0xEA, 0xAD, - 0x94, 0xAD, 0x83, 0x9E, 0x86, 0xB4, 0x8C, 0x88, 0xEA, 0xBC, 0x98, 0x9E, 0x9B, 0xAD, 0x96, 0xB0, - 0x9B, 0xA9, 0xB5, 0x99, 0xAB, 0xBD, 0x91, 0x93, 0x83, 0xB7, 0xBB, 0x92, 0x88, 0xEA, 0xB9, 0x9E, - 0xB5, 0xAC, 0x96, 0xE8, 0x94, 0xB2, 0x96, 0xB4, 0x98, 0xB2, 0xB9, 0xB7, 0x9C, 0xA9, 0xB8, 0x9D, - 0x8C, 0xA9, 0xB9, 0xA3, 0xEF, 0xAF, 0x80, 0x82, 0x8B, 0xAC, 0x83, 0xE8, 0x9F, 0xAC, 0xB9, 0xB7, - 0xE3, 0xAC, 0xBE, 0x9C, 0xE3, 0xB0, 0x86, 0xB4, 0x83, 0x89, 0xEF, 0xB0, 0xB9, 0xB7, 0xAD, 0xAD, - 0xBD, 0xBD, 0x9D, 0x97, 0x98, 0xBD, 0x94, 0x8C, 0x92, 0x89, 0x9B, 0x9F, 0xBD, 0xBD, 0x9D, 0x9E, - 0x97, 0x93, 0x93, 0x98, 0xBC, 0xA0, 0x99, 0x98, 0xA8, 0x8B, 0x83, 0x95, 0x91, 0xAD, 0x83, 0x98, - 0x98, 0x9B, 0x9D, 0x98, 0xA0, 0x9E, 0xAF, 0x9E, 0xBC, 0x8B, 0x93, 0x99, 0x9B, 0x8B, 0x9F, 0xAD, - 0xBD, 0x80, 0xB5, 0xAD, 0x95, 0x8B, 0x83, 0x93, 0x86, 0xB4, 0x91, 0xAD, 0x83, 0x98, 0x98, 0x8B, - 0x8F, 0x92, 0x9B, 0xBD, 0x9F, 0x8D, 0x96, 0x8D, 0xB2, 0xEA, 0xBE, 0x92, 0x9B, 0xEC, 0x96, 0xA3, - 0xE3, 0xB0, 0x83, 0x89, 0xEF, 0xAD, 0x83, 0x82, 0x90, 0xB2, 0xB8, 0x9D, 0xA2, 0xB6, 0xB8, 0x92, - 0x97, 0xAF, 0xB8, 0xB7, 0x8C, 0xEA, 0x96, 0xE8, 0x94, 0xB2, 0x96, 0xE9, 0x98, 0xB2, 0xB9, 0xB7, - 0x9C, 0xA9, 0xB8, 0x9D, 0x8C, 0xA9, 0xB9, 0xEB, 0xE3, 0xB0, 0x86, 0xB4, 0xB9, 0x92, 0x97, 0xAF, - 0xBB, 0x92, 0x88, 0xAE, 0xB8, 0x9E, 0x98, 0xBE, 0x98, 0xBD, 0xBD, 0xA8, 0x98, 0xBD, 0x9F, 0x9C, - 0x98, 0x8B, 0xB9, 0x99, 0x9B, 0xB0, 0x98, 0x88, 0x97, 0x98, 0xE2, 0xBB, 0x9D, 0x9C, 0x98, 0xB2, - 0xB9, 0xB7, 0x9C, 0xA9, 0xB8, 0x9D, 0x8C, 0xA9, 0xB9, 0xA3, 0x98, 0x93, 0xB8, 0xE8, 0xA2, 0xB1, - 0xBB, 0x8D, 0xEF, 0xB4, 0xB9, 0xA3, 0xAD, 0xBD, 0xB8, 0x92, 0x88, 0xB1, 0x86, 0xB4, 0x96, 0xB0, - 0x9B, 0x9E, 0x9B, 0xBD, 0x9F, 0x98, 0x9D, 0xB3, 0xEF, 0x9C, 0xBF, 0x92, 0x88, 0xB6, 0xB9, 0xB7, - 0xEF, 0xB2, 0xB8, 0x99, 0x98, 0x99, 0x83, 0x82, 0x94, 0xAA, 0x83, 0xA3, 0x98, 0x9E, 0x80, 0x82, - 0x90, 0xEA, 0xBB, 0x8D, 0x80, 0xAA, 0x83, 0xE8, 0x9C, 0xEA, 0xB8, 0xE8, 0xEE, 0xBD, 0x8F, 0x92, - 0x90, 0xB2, 0x83, 0xE9, 0x88, 0xAA, 0x83, 0xE8, 0x8F, 0xBD, 0x8F, 0xE9, 0x88, 0xB2, 0x86, 0xB4, - 0xBE, 0x9D, 0x8C, 0xAE, 0x80, 0x8D, 0xEF, 0xEA, 0x97, 0x9D, 0x8B, 0x9D, 0x9E, 0xB3, 0xA9, 0x9D, - 0x9B, 0x8B, 0x8B, 0x98, 0xBD, 0xB9, 0xAD, 0xED, 0xBD, 0xE9, 0xEA, 0x99, 0x9B, 0xBD, 0x9F, 0x99, - 0x97, 0x9C, 0x93, 0xAD, 0x8F, 0x9B, 0x83, 0x93, 0x91, 0xAD, 0x83, 0x98, 0x98, 0x8B, 0x8F, 0x92, - 0x9B, 0xBD, 0x93, 0xAD, 0x88, 0x9E, 0x9B, 0xBC, 0x9D, 0xB2, 0xB2, 0x8B, 0x83, 0x82, 0x90, 0xB2, - 0x86, 0xB4, 0xB8, 0x9D, 0xA2, 0xB6, 0xB8, 0x92, 0x97, 0xBD, 0x89, 0x9D, 0xE3, 0xA9, 0x80, 0x9D, - 0xB6, 0xAF, 0x80, 0xE9, 0x97, 0xA9, 0x93, 0x9D, 0xA2, 0xEA, 0x80, 0x99, 0xEE, 0xAD, 0x9B, 0xAD, - 0x93, 0x98, 0x9B, 0x88, 0xB5, 0xB2, 0x88, 0x82, 0xB2, 0xEA, 0x80, 0x82, 0x90, 0xAF, 0x83, 0x8D, - 0xAD, 0xBD, 0x8B, 0xB7, 0x9C, 0xA0, 0xBB, 0x8D, 0x97, 0xBD, 0x8B, 0xE8, 0x8C, 0xA3, 0xBE, 0x9D, - 0xB6, 0xB7, 0x86, 0xB4, 0xBB, 0x8D, 0x94, 0xB2, 0xBE, 0x9D, 0x8F, 0xBD, 0x8F, 0x9D, 0xE3, 0xA9, - 0xBB, 0x8D, 0x94, 0xEF, 0x97, 0x9D, 0xB9, 0x9D, 0x9E, 0xB3, 0xA9, 0x9D, 0x9B, 0x8B, 0x8B, 0x98, - 0xBD, 0xB9, 0xAD, 0xED, 0xBD, 0xE9, 0xEA, 0x99, 0x9B, 0xB7, 0x83, 0x9E, 0x97, 0x9C, 0x8F, 0xAD, - 0x8F, 0xAD, 0x83, 0x93, 0x91, 0xAD, 0x83, 0x98, 0x98, 0x8B, 0x8F, 0x92, 0x9B, 0xBD, 0x93, 0xAD, - 0x88, 0xA0, 0x9B, 0xBC, 0x86, 0xB4, 0x9D, 0xB2, 0xB2, 0x8B, 0x83, 0x82, 0x90, 0xB2, 0xB8, 0x9D, - 0xA2, 0xB6, 0xB8, 0x92, 0x97, 0xBD, 0x89, 0x9D, 0xE3, 0xA9, 0x80, 0x9D, 0xB6, 0xAF, 0x80, 0xE9, - 0x97, 0xA9, 0x93, 0x9D, 0xA2, 0xEA, 0x80, 0x99, 0xEE, 0xAD, 0x9B, 0xAD, 0x93, 0x98, 0x9B, 0x88, - 0xB5, 0xB1, 0x8F, 0x9D, 0x9C, 0xA3, 0x83, 0x8D, 0xA2, 0xA9, 0x80, 0x8D, 0xA2, 0xA0, 0x93, 0x9F, - 0x88, 0xB6, 0xB9, 0xE8, 0xAE, 0xEA, 0x86, 0xB4, 0xB8, 0xE9, 0x9B, 0xBD, 0x8B, 0xE8, 0x8C, 0xA3, - 0xBE, 0x9D, 0xB6, 0xB7, 0xBB, 0x8D, 0x94, 0xB2, 0xBE, 0x9D, 0x8F, 0xBD, 0x8F, 0x9D, 0xE3, 0xA9, - 0xBB, 0x8D, 0x94, 0xEF, 0x97, 0x9B, 0xEA, 0x9D, 0x99, 0x89, 0xAB, 0x9D, 0x89, 0x93, 0xB8, 0xE9, - 0x9E, 0x8B, 0x9F, 0x98, 0x99, 0xAD, 0x8F, 0x9B, 0x9B, 0xEE, 0x93, 0x99, 0x9B, 0x8B, 0x9B, 0xAA, - 0x98, 0xE3, 0x90, 0x80, 0x8E, 0xF1, 0xB9, 0xAD, 0x86, 0xB4, 0x91, 0x89, 0x9D, 0x80, 0xAF, 0x88, - 0xEF, 0x96, 0xB0, 0xBF, 0xEB, 0xB6, 0xBD, 0xA2, 0xAF, 0xBF, 0x97, 0x9F, 0xB1, 0xAB, 0xEA, 0x8B, - 0xA8, 0x98, 0x8F, 0xBD, 0x93, 0xBB, 0xB3, 0xB0, 0x93, 0xB7, 0x8E, 0xB5, 0xEF, 0xB4, 0xAD, 0x9E, - 0xE9, 0xB0, 0x89, 0xAA, 0x92, 0x82, 0xE9, 0xB3, 0xAD, 0x82, 0xEB, 0xEB, 0x9E, 0x9B, 0xEA, 0xAD, - 0xAC, 0x9E, 0x9E, 0xB2, 0x89, 0xE8, 0xB8, 0x8A, 0x95, 0x83, 0x86, 0xB4, 0x99, 0xAC, 0x95, 0xB4, - 0xE3, 0x91, 0x9C, 0xA3, 0xF1, 0xB3, 0x93, 0xB6, 0xB3, 0xEA, 0xB9, 0xB9, 0xEB, 0xF5, 0xEE, 0xB1, - 0x98, 0x92, 0xF5, 0x9E, 0x83, 0xA9, 0x9B, 0xB2, 0xF1, 0x89, 0x8F, 0xBE, 0x80, 0xA9, 0xF5, 0xAD, - 0xE9, 0x9D, 0xF5, 0xEA, 0x90, 0xA9, 0xAF, 0xB9, 0x8B, 0x9E, 0xEF, 0x9B, 0xBB, 0x96, 0xE9, 0xAA, - 0xBF, 0xB2, 0xA9, 0xBC, 0xE9, 0xBE, 0x80, 0xBC, 0x88, 0xED, 0xB9, 0xAB, 0x86, 0xB4, 0xE9, 0xAB, - 0xE2, 0x9E, 0xEC, 0xB3, 0xBB, 0xF5, 0x89, 0xB5, 0x97, 0xA8, 0x9E, 0x96, 0xAA, 0x8B, 0x99, 0x90, - 0xB0, 0xB7, 0xED, 0xE3, 0xE2, 0xA3, 0x8F, 0xBF, 0xAC, 0xB3, 0xEE, 0x80, 0x94, 0x90, 0xAD, 0x9F, - 0x92, 0x93, 0x95, 0x92, 0xEF, 0xBD, 0x94, 0xAC, 0xED, 0xEC, 0xBF, 0x99, 0xA2, 0xF1, 0xB4, 0x94, - 0x90, 0x92, 0xAC, 0xB4, 0xAD, 0xEA, 0xA3, 0x91, 0x91, 0xBC, 0xAB, 0xEF, 0xE8, 0x97, 0x86, 0xB4, - 0xB2, 0xEC, 0xBB, 0x8C, 0x88, 0x98, 0xB3, 0x9C, 0xED, 0xE9, 0x96, 0xB9, 0xAC, 0x99, 0xB7, 0x94, - 0xAE, 0xBD, 0xBF, 0x9E, 0x90, 0xA2, 0x8A, 0x8F, 0x9B, 0xBE, 0xB8, 0x8C, 0x83, 0xBD, 0xAC, 0xED, - 0xB8, 0xEA, 0xA0, 0xAA, 0xBD, 0xA3, 0xAA, 0xB1, 0xAA, 0xB2, 0xEA, 0xBB, 0x8D, 0x8B, 0x8A, 0xE3, - 0xEA, 0xAE, 0xAB, 0x8A, 0x9B, 0x8D, 0xB4, 0xAA, 0xB0, 0x92, 0x8B, 0xE8, 0x8A, 0xED, 0xF5, 0xB5, - 0x86, 0xB4, 0x8A, 0xF1, 0xA3, 0xB4, 0x91, 0x98, 0xE9, 0xBE, 0x82, 0xEC, 0x80, 0xB9, 0x9B, 0xEF, - 0x99, 0x90, 0xEF, 0xB5, 0xEE, 0xB0, 0x82, 0x90, 0x82, 0xF5, 0xF1, 0xAC, 0x89, 0xEB, 0x92, 0x8B, - 0x8D, 0xAF, 0x8E, 0x8F, 0xE2, 0x99, 0xB2, 0x83, 0x98, 0xA2, 0x9C, 0x98, 0xEC, 0xED, 0xBF, 0x99, - 0x8A, 0x9E, 0xAE, 0xB8, 0xAD, 0xAE, 0x88, 0xAD, 0x96, 0xB7, 0x89, 0xEE, 0x8E, 0x8E, 0x96, 0x98, - 0xAA, 0x82, 0x86, 0xB4, 0xBD, 0x9F, 0x8D, 0x8D, 0xE2, 0xB0, 0xBB, 0x90, 0x99, 0xB7, 0xEE, 0xA9, - 0x83, 0x96, 0x97, 0xB7, 0xB0, 0xF5, 0xAF, 0xAD, 0xE9, 0x9B, 0xAB, 0xA8, 0x82, 0x92, 0xE9, 0x8E, - 0x9C, 0x80, 0x9F, 0xBE, 0xBB, 0xAB, 0xB2, 0x82, 0x8E, 0xE3, 0xA9, 0xEC, 0xB3, 0xBD, 0x98, 0x96, - 0xED, 0x8C, 0xEA, 0x94, 0xA8, 0x99, 0xE8, 0xA8, 0x93, 0xAA, 0xAB, 0xB0, 0xBD, 0xE3, 0xB8, 0xEB, - 0x80, 0xA3, 0xB8, 0x83, 0x86, 0xB4, 0x80, 0xBB, 0xF5, 0xBD, 0x99, 0xBC, 0x8A, 0x90, 0xED, 0xE9, - 0xA9, 0x93, 0x8F, 0xB1, 0x9C, 0xB5, 0xB6, 0xBB, 0xEB, 0x91, 0xA8, 0xEF, 0xEA, 0x89, 0xB0, 0xBB, - 0xA8, 0xEC, 0xBB, 0x9C, 0xBC, 0x8B, 0x9E, 0xB0, 0x83, 0x99, 0xBC, 0x80, 0xBF, 0x99, 0xEC, 0xA9, - 0xEE, 0x8C, 0xBD, 0x88, 0xEC, 0xAA, 0xEA, 0xB8, 0xA9, 0xED, 0xB0, 0xA8, 0xEC, 0xEB, 0xA0, 0xAD, - 0xA9, 0x8A, 0x8F, 0xB6, 0x99, 0xAF, 0x86, 0xB4, 0x9B, 0x80, 0x8D, 0x9B, 0xB3, 0x97, 0xAE, 0xAA, - 0xA0, 0x9B, 0xAB, 0xEC, 0x83, 0x90, 0x83, 0xE9, 0xB4, 0xB0, 0x82, 0x8E, 0x80, 0x8B, 0xB4, 0xB6, - 0x9C, 0x80, 0xE8, 0xBF, 0x9B, 0xB7, 0xBD, 0xA2, 0x83, 0x9E, 0xBB, 0x99, 0x88, 0xBD, 0xB0, 0x9E, - 0xB4, 0x80, 0xAE, 0x92, 0x8C, 0x94, 0xE2, 0xA9, 0x8C, 0xA9, 0xB9, 0xEC, 0xAC, 0x98, 0x90, 0xB2, - 0xEC, 0x82, 0xBB, 0x88, 0xE2, 0xEE, 0xAE, 0xF1, 0x86, 0xB4, 0xB3, 0xAE, 0x9E, 0x9D, 0x90, 0xBC, - 0xAA, 0xB7, 0xEA, 0x88, 0x82, 0x95, 0xA3, 0xE8, 0xB8, 0xB8, 0xB6, 0xB7, 0xB6, 0xBF, 0x8C, 0x8A, - 0x98, 0x9E, 0xB8, 0x9D, 0x9E, 0xA8, 0xAF, 0x95, 0xA0, 0x94, 0x90, 0xAC, 0x98, 0xF1, 0xEA, 0x92, - 0xEC, 0x8A, 0xB8, 0x97, 0xAB, 0x83, 0xEB, 0x88, 0x95, 0xA3, 0xEE, 0x80, 0xB9, 0x96, 0x91, 0x8C, - 0xBC, 0xAE, 0x8B, 0xA0, 0x89, 0xB9, 0x83, 0x98, 0x8F, 0x8B, 0x86, 0xB4, 0xBE, 0x9E, 0xBE, 0x8E, - 0xF1, 0xEE, 0xBD, 0x8A, 0xB1, 0x93, 0xAF, 0xEB, 0x83, 0xB2, 0xA0, 0x98, 0x8B, 0xB0, 0x97, 0x94, - 0x9C, 0xF5, 0xB1, 0x8A, 0xAD, 0x8F, 0x8A, 0x9F, 0xE2, 0x8D, 0xAC, 0x8C, 0xAA, 0xBF, 0xEF, 0xB8, - 0x8E, 0xF1, 0x8C, 0x97, 0xB0, 0xED, 0xAE, 0x93, 0x82, 0xE8, 0xAD, 0x8B, 0x93, 0x90, 0xB9, 0xBE, - 0x94, 0x9D, 0x93, 0xAC, 0xA3, 0x99, 0x8B, 0xEF, 0xBB, 0x8D, 0xB5, 0xAB, 0x86, 0xB4, 0xBF, 0xB5, - 0xEC, 0x8B, 0xB2, 0x8D, 0xB7, 0x94, 0xB6, 0xB9, 0xE9, 0xB1, 0xF5, 0xB1, 0xEC, 0xE9, 0x97, 0xB2, - 0xA2, 0x88, 0x94, 0xBF, 0xEF, 0xEF, 0xB9, 0xAB, 0xEC, 0xEE, 0x8C, 0xA3, 0xA9, 0xB1, 0x9C, 0x9B, - 0xE7, 0xE7, 0x86, 0xB4, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0x9F, 0x94, 0x9E, 0xFA, 0x99, 0x9F, 0x88, - 0x8E, 0x93, 0x9C, 0x93, 0x99, 0x9B, 0x8E, 0x9F, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0x86, 0xB4, 0xF7, - 0xF7, 0xF7, 0xF7, 0xF7, 0x98, 0x9F, 0x9D, 0x93, 0x94, 0xFA, 0x99, 0x9F, 0x88, 0x8E, 0x93, 0x9C, - 0x93, 0x99, 0x9B, 0x8E, 0x9F, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0x86, 0xB4, 0x97, 0x93, 0x93, 0x92, - 0xAC, 0x8E, 0x99, 0x99, 0x98, 0xBB, 0x8D, 0xBD, 0x9B, 0xAD, 0x93, 0x98, 0x9B, 0xBD, 0x93, 0x90, - 0x9B, 0x91, 0xBC, 0x9F, 0xE3, 0xAB, 0xED, 0xB3, 0xB1, 0xAB, 0xED, 0xB7, 0x97, 0x9B, 0xEA, 0x9D, - 0x99, 0x89, 0xAB, 0x9D, 0x89, 0x93, 0xB8, 0xE9, 0x9E, 0x8B, 0x9F, 0x98, 0x99, 0xAD, 0x8F, 0x9B, - 0x97, 0x93, 0x9D, 0xBD, 0x97, 0x8B, 0xA9, 0xAD, 0x99, 0x8B, 0x83, 0x9E, 0x86, 0xB4, 0x8C, 0x8B, - 0x8B, 0x9D, 0x9F, 0xAD, 0x90, 0x9E, 0x89, 0x9E, 0x9F, 0x8C, 0x97, 0x98, 0x97, 0x9D, 0x9B, 0xEB, - 0x8F, 0x9F, 0x98, 0xAD, 0xAD, 0x97, 0x8F, 0xE8, 0x94, 0xB5, 0x83, 0x8D, 0x80, 0xB7, 0xBB, 0x9D, - 0x9C, 0xEB, 0xB9, 0xE8, 0x8C, 0xAF, 0x97, 0x89, 0x97, 0xAD, 0x93, 0x8B, 0x83, 0x9E, 0x8C, 0x8B, - 0x8B, 0x91, 0x9E, 0x98, 0xAA, 0x8B, 0x8B, 0x8C, 0x90, 0x98, 0x8E, 0x9F, 0xA2, 0x9C, 0x86, 0xB4, - 0x8E, 0x9C, 0x97, 0xBD, 0x89, 0x8C, 0x9B, 0xBD, 0x89, 0x9D, 0xE3, 0xA9, 0x80, 0x9D, 0xB6, 0xAF, - 0x80, 0xE9, 0x97, 0xBD, 0x88, 0xE8, 0xEB, 0xB3, 0x89, 0x9E, 0x9F, 0x96, 0x97, 0x9B, 0xB1, 0x9D, - 0x9B, 0xEB, 0x8F, 0x9F, 0x99, 0xAD, 0xAD, 0x99, 0x89, 0x8C, 0x8B, 0xA2, 0x93, 0xA0, 0x9B, 0xB2, - 0x98, 0xBD, 0x94, 0x8C, 0x98, 0x9B, 0x97, 0x97, 0x9D, 0xB6, 0x98, 0xB2, 0xB9, 0xB7, 0x9C, 0xA9, - 0x86, 0xB4, 0xB8, 0x9D, 0x8C, 0xA9, 0xB9, 0xA3, 0x98, 0x9C, 0xBF, 0x92, 0x88, 0xB6, 0xB9, 0xB7, - 0xEF, 0xB2, 0xB8, 0x99, 0x98, 0xA3, 0xB8, 0xE8, 0xE3, 0xEA, 0x93, 0x9F, 0x94, 0x98, 0x97, 0x89, - 0x97, 0xAD, 0x93, 0x8B, 0x83, 0x90, 0x91, 0xB5, 0x80, 0x93, 0xB2, 0xAC, 0xB9, 0x94, 0x9B, 0x8B, - 0xB1, 0x98, 0x9C, 0xB2, 0x88, 0xB2, 0x80, 0x9D, 0xEB, 0xAA, 0xB8, 0xB4, 0x94, 0x9B, 0xB9, 0x9D, - 0x9C, 0xA3, 0x86, 0xB4, 0x83, 0x8D, 0xA2, 0xA9, 0x80, 0x8D, 0xA2, 0xA0, 0x96, 0xB7, 0x94, 0xAC, - 0xB8, 0x8E, 0x9B, 0xBF, 0x9C, 0xAD, 0xEA, 0xA2, 0x94, 0xB0, 0x9F, 0xAD, 0x97, 0x9E, 0xB9, 0xA2, - 0x94, 0x9E, 0x9F, 0xA3, 0x97, 0xB0, 0x8C, 0xBB, 0x9C, 0xAD, 0xEA, 0xA3, 0x95, 0x9E, 0x9F, 0xA2, - 0x97, 0x9E, 0x83, 0xA2, 0x94, 0x9E, 0x9F, 0xA3, 0x97, 0xB0, 0x8C, 0xBB, 0x97, 0x92, 0x8B, 0xA2, - 0x99, 0xA0, 0x9B, 0x90, 0x86, 0xB4, 0x98, 0xBD, 0x94, 0x8C, 0x98, 0x9B, 0x83, 0x8E, 0x9B, 0xB6, - 0x90, 0x8C, 0x97, 0x8B, 0xE2, 0xAD, 0x9E, 0x8B, 0x83, 0x9E, 0x8C, 0x8B, 0x8B, 0x92, 0x9E, 0x9B, - 0x80, 0x94, 0xB8, 0xE9, 0xBE, 0xB0, 0xB8, 0xE9, 0xB9, 0xA2, 0x93, 0xA0, 0x9B, 0xB2, 0x98, 0xBD, - 0x94, 0x8C, 0x98, 0x9B, 0xB5, 0x97, 0x9D, 0xB6, 0x98, 0xB2, 0xB9, 0xB7, 0x9C, 0xA9, 0xB8, 0x9D, - 0x8C, 0xA9, 0xB9, 0xA3, 0x98, 0x90, 0x86, 0xB4, 0x8F, 0x99, 0x98, 0x93, 0xB8, 0xE8, 0xA2, 0xB1, - 0xBB, 0x8D, 0xEF, 0xB4, 0xB9, 0xA3, 0x98, 0x92, 0xB8, 0x8D, 0x90, 0x93, 0x97, 0x8B, 0xEE, 0xAD, - 0x9E, 0x9B, 0x83, 0x9E, 0x8C, 0x8B, 0x8B, 0x96, 0x9E, 0x9B, 0x8C, 0x9E, 0xB8, 0x9D, 0xE3, 0xEB, - 0x80, 0x9E, 0x9F, 0xBC, 0x97, 0x98, 0xEA, 0x9D, 0x9B, 0xEB, 0x8F, 0x9F, 0x9B, 0xAD, 0xAD, 0x8D, - 0x8F, 0x9D, 0x9C, 0xA3, 0x83, 0x8D, 0xA2, 0xB6, 0x86, 0xB4, 0xB8, 0x92, 0x97, 0xBD, 0x89, 0x82, - 0x94, 0xA0, 0xBE, 0x8D, 0xB6, 0xAF, 0x80, 0xA3, 0x98, 0x9E, 0x8B, 0x89, 0x9B, 0xB0, 0x97, 0x8E, - 0x99, 0x99, 0x9B, 0xB3, 0x93, 0xAD, 0x9E, 0x8B, 0x83, 0x90, 0x91, 0xB5, 0x80, 0x93, 0xB2, 0xAC, - 0xB9, 0x94, 0x9B, 0x8B, 0x9F, 0x98, 0x98, 0x8B, 0x9B, 0x9E, 0xBD, 0xBD, 0x93, 0x8A, 0x9B, 0x9E, - 0x99, 0x99, 0x9B, 0xBD, 0xB5, 0x99, 0xBD, 0xBD, 0x93, 0x98, 0x86, 0xB4, 0x9B, 0x96, 0xB4, 0xA2, - 0x93, 0xB9, 0x9D, 0xA9, 0xB2, 0xE3, 0xB5, 0xA0, 0xB2, 0x8F, 0x8C, 0xB8, 0xA3, 0xE2, 0xB7, 0xB6, - 0x99, 0xB9, 0xEF, 0x82, 0x8B, 0xA2, 0x91, 0x94, 0xBC, 0x8D, 0xEC, 0xBE, 0x9D, 0x8D, 0xF5, 0x89, - 0xB4, 0x91, 0xB8, 0xA2, 0xAA, 0xAB, 0xA8, 0x82, 0xBC, 0xAA, 0x8B, 0xEA, 0xBD, 0x94, 0x95, 0xEC, - 0x8D, 0xB5, 0x96, 0x93, 0xF5, 0x9F, 0x95, 0x89, 0xAD, 0xB1, 0xED, 0x99, 0x86, 0xB4, 0x80, 0xB8, - 0xB5, 0xF5, 0x91, 0xB9, 0xF5, 0xEA, 0xBB, 0xB8, 0xB7, 0xAF, 0xE8, 0xEC, 0x83, 0xBF, 0xA2, 0xB3, - 0xB3, 0x92, 0x9F, 0xBC, 0xEA, 0x9C, 0xBE, 0xB0, 0x89, 0xF1, 0xE3, 0xA3, 0x89, 0x92, 0xAB, 0x90, - 0x95, 0xBD, 0xBC, 0xEC, 0xB1, 0x91, 0xB9, 0xB6, 0x99, 0xE3, 0x90, 0x99, 0xEE, 0x9E, 0xA8, 0xF1, - 0x9C, 0x9D, 0x80, 0x93, 0x89, 0x9D, 0xE3, 0x9D, 0xE8, 0xBC, 0xB1, 0xA0, 0x8E, 0xB4, 0x86, 0xB4, - 0x94, 0xB9, 0xA9, 0xA8, 0x92, 0xB1, 0xE3, 0xB8, 0xAE, 0xB3, 0xB3, 0xEE, 0xAD, 0x9E, 0x80, 0xE3, - 0x91, 0xB0, 0xA0, 0xF1, 0xE9, 0xE3, 0xE2, 0x99, 0xE9, 0xA3, 0xA9, 0xA2, 0x91, 0xE8, 0xEB, 0xA2, - 0xB0, 0xB1, 0xB1, 0xF1, 0x88, 0xBF, 0xEB, 0x95, 0x82, 0xB6, 0xE2, 0x9F, 0xF1, 0x8F, 0xB2, 0xB9, - 0xEC, 0xED, 0xB0, 0xB8, 0xA0, 0xEA, 0xF5, 0xEA, 0x8E, 0xB0, 0xBE, 0xEA, 0xBE, 0xED, 0x90, 0xA9, - 0x86, 0xB4, 0xB0, 0x8C, 0xB0, 0xAE, 0x91, 0x80, 0xA2, 0x8B, 0xAE, 0xA9, 0xE3, 0x89, 0x8C, 0xE9, - 0x91, 0xA0, 0xA8, 0xAF, 0xAD, 0xBC, 0x8E, 0xA3, 0xB2, 0xBD, 0xB1, 0x8D, 0xF5, 0xEE, 0x8C, 0xA2, - 0xB7, 0x8A, 0xEE, 0x88, 0x99, 0x90, 0xAB, 0xBB, 0xEB, 0x8E, 0xBD, 0x9E, 0x96, 0x8C, 0x96, 0xE3, - 0xE2, 0xBC, 0x80, 0xB0, 0x8E, 0x8B, 0x98, 0x9D, 0xE3, 0xB9, 0x95, 0xB0, 0xE9, 0xAE, 0x9D, 0x88, - 0x91, 0xBE, 0x86, 0xB4, 0x80, 0xAE, 0xE9, 0x9F, 0x8C, 0xE9, 0x8B, 0xBE, 0x9E, 0x82, 0x9C, 0x8A, - 0xEA, 0xE2, 0x89, 0xEC, 0xE8, 0x99, 0xB1, 0x97, 0x95, 0xA2, 0x8D, 0xB4, 0xF1, 0x9C, 0xBE, 0xBB, - 0xE3, 0x98, 0x8A, 0xBD, 0xEC, 0xA0, 0xE2, 0xE9, 0xB4, 0xBF, 0xF1, 0x8E, 0xA0, 0xB7, 0x88, 0x9F, - 0x90, 0xEE, 0xB2, 0xB6, 0xBB, 0xBC, 0xB0, 0xE8, 0xB1, 0x88, 0xBD, 0xF1, 0xEB, 0xBE, 0x91, 0xA9, - 0x99, 0x94, 0x8F, 0xA0, 0x86, 0xB4, 0x80, 0x94, 0xF1, 0xB4, 0x92, 0x83, 0x8C, 0xB1, 0xA2, 0x94, - 0x96, 0xB6, 0xE3, 0xB0, 0x94, 0xF5, 0xEE, 0xEB, 0xEF, 0x99, 0xBE, 0x82, 0x9B, 0x8A, 0x94, 0xBC, - 0x8D, 0x83, 0xB5, 0xB3, 0xB8, 0xAD, 0xBF, 0x9D, 0xEA, 0x8B, 0xB0, 0x93, 0xEE, 0x96, 0xBE, 0xE9, - 0xF5, 0xAF, 0xBF, 0xEA, 0x9E, 0x8F, 0x9F, 0xB7, 0x95, 0x83, 0xEE, 0xAE, 0xAF, 0xED, 0xB5, 0xBC, - 0x8B, 0x95, 0x9E, 0xB4, 0x97, 0x9F, 0x86, 0xB4, 0xE8, 0x8E, 0xB2, 0x8D, 0xA8, 0x91, 0x9C, 0xE2, - 0x92, 0x89, 0xB4, 0xA2, 0xB2, 0xE2, 0xB5, 0x9C, 0x94, 0x8E, 0x98, 0xB7, 0xE2, 0x90, 0xEF, 0x90, - 0xB2, 0xE9, 0xAA, 0x8E, 0xAC, 0x91, 0xAD, 0xF1, 0xAE, 0x90, 0xBE, 0xAB, 0xB8, 0x9B, 0x8F, 0xB3, - 0xE3, 0xA3, 0xB1, 0x9B, 0x94, 0xED, 0xF5, 0x97, 0xF1, 0x94, 0xAD, 0xA2, 0xB4, 0x83, 0xEF, 0xB8, - 0xEB, 0xAD, 0xBD, 0xBE, 0xBE, 0x92, 0xBB, 0x8B, 0x86, 0xB4, 0xB1, 0xA2, 0xBB, 0xBF, 0xBE, 0xBB, - 0xA8, 0xB4, 0xAD, 0x8B, 0xBC, 0x88, 0x93, 0x9C, 0xBB, 0x8C, 0xAC, 0x94, 0x99, 0x88, 0xB9, 0xB5, - 0x80, 0x8C, 0x9E, 0xE3, 0xAB, 0xAE, 0xEC, 0xAC, 0xF5, 0xB0, 0xB4, 0x93, 0xE2, 0xA2, 0x9F, 0x8E, - 0xA2, 0xBC, 0x95, 0xB0, 0xBE, 0xEC, 0x8D, 0x95, 0xBC, 0xBD, 0xE9, 0xEE, 0x80, 0xAB, 0xBE, 0xA3, - 0x82, 0x96, 0x82, 0xEE, 0xAE, 0xAE, 0xAB, 0x91, 0xEA, 0x97, 0x86, 0xB4, 0x9F, 0xBD, 0x93, 0xE8, - 0x92, 0xA2, 0xAD, 0x88, 0xB2, 0x8D, 0x9B, 0xAC, 0x92, 0xB6, 0xEF, 0xB5, 0x88, 0xED, 0x92, 0x89, - 0xE3, 0xBD, 0x99, 0xA2, 0x97, 0x83, 0xEF, 0x90, 0xAC, 0x8A, 0x8B, 0xE2, 0x89, 0xF1, 0xBB, 0xAF, - 0xEB, 0x82, 0x89, 0xF5, 0xA2, 0xAD, 0xF5, 0x96, 0xEE, 0x95, 0x90, 0x8C, 0x83, 0x8E, 0xA8, 0x95, - 0x8C, 0x8D, 0xAF, 0xAC, 0xA0, 0x92, 0xEF, 0xEA, 0x94, 0xA9, 0xA8, 0x92, 0x86, 0xB4, 0xB7, 0xB9, - 0x88, 0xEE, 0x94, 0xEC, 0x9E, 0xEF, 0xF1, 0x9F, 0x83, 0x89, 0xA8, 0xA3, 0xAF, 0x96, 0xB2, 0x96, - 0xF1, 0x94, 0xAF, 0xB0, 0xF5, 0x9C, 0x8F, 0xE9, 0xED, 0xF1, 0xA0, 0xB8, 0x91, 0xB9, 0x80, 0x91, - 0x9E, 0xEB, 0xAB, 0x93, 0x92, 0x97, 0xB4, 0xE9, 0xBC, 0xB8, 0xBC, 0xB5, 0xA3, 0xA9, 0xAA, 0x9C, - 0xE9, 0xED, 0x91, 0x98, 0xB1, 0xB8, 0xBD, 0xBC, 0xE2, 0x91, 0xF1, 0xEB, 0x99, 0xAB, 0x86, 0xB4, - 0x96, 0xB9, 0xE8, 0x8F, 0x8F, 0xA9, 0x89, 0xB7, 0x80, 0x96, 0x9E, 0xB4, 0x88, 0xF1, 0xB0, 0x9E, - 0xEA, 0x8E, 0xE2, 0xA0, 0x9F, 0xA3, 0x98, 0x8E, 0x88, 0xEB, 0xBB, 0xE3, 0xB3, 0x99, 0x9B, 0x9B, - 0xA3, 0xE2, 0xAC, 0xEF, 0xEA, 0x95, 0xB1, 0xF1, 0x93, 0x90, 0x92, 0x80, 0x9B, 0xBD, 0x97, 0x98, - 0x9B, 0x9B, 0x9D, 0xB0, 0xBD, 0xBD, 0x93, 0xB0, 0x97, 0x93, 0x93, 0x99, 0x92, 0xA0, 0x9B, 0x8A, - 0x86, 0xB4, 0x98, 0xBD, 0x94, 0x8C, 0x92, 0x88, 0x97, 0x98, 0x9B, 0xBC, 0xE2, 0x9F, 0x98, 0x8E, - 0x9B, 0x9E, 0x9B, 0x8B, 0x92, 0xF5, 0x97, 0x9B, 0xE2, 0x9D, 0x9B, 0xEB, 0x8F, 0xBE, 0x90, 0x9B, - 0x9F, 0x98, 0xF5, 0xAD, 0x8B, 0x9C, 0x97, 0x9B, 0x95, 0x9B, 0x9B, 0x8B, 0x9B, 0xAD, 0x99, 0xBD, - 0x83, 0x9E, 0x8C, 0x88, 0xEA, 0xE8, 0x98, 0x9B, 0x97, 0x99, 0x9B, 0x8B, 0x9B, 0xAD, 0x9E, 0xBD, - 0x83, 0x9E, 0x86, 0xB4, 0x8C, 0x88, 0xEA, 0x8A, 0x9B, 0x8B, 0x92, 0xF5, 0x98, 0x9B, 0x8B, 0x9E, - 0x9B, 0xBD, 0x9F, 0x9D, 0x97, 0x98, 0xEA, 0x9D, 0x9B, 0xEB, 0x8F, 0xBE, 0x9E, 0xBD, 0x8B, 0x8D, - 0x98, 0x98, 0x8B, 0xED, 0xB1, 0xA2, 0x92, 0xED, 0x92, 0xF1, 0xBC, 0x88, 0xBC, 0xB1, 0xBD, 0xA9, - 0x95, 0xEF, 0xA9, 0x8F, 0x8A, 0x89, 0xAB, 0xB6, 0x8E, 0xEE, 0x8A, 0xE3, 0x89, 0xB0, 0x9B, 0xBC, - 0x98, 0xBD, 0x94, 0x8C, 0x86, 0xB4, 0x92, 0x89, 0x97, 0x9F, 0x9D, 0x9E, 0x9B, 0x8D, 0xBD, 0x98, - 0x8B, 0xEF, 0x8A, 0x95, 0xB9, 0xBE, 0xB3, 0x8E, 0xAE, 0xA3, 0xEF, 0xF5, 0xB8, 0xBB, 0xEC, 0xA3, - 0xA3, 0x9C, 0xEB, 0x96, 0x83, 0x97, 0x88, 0xAB, 0xB6, 0x9B, 0x9F, 0x8E, 0x9B, 0xF5, 0x98, 0xBD, - 0xBD, 0xA8, 0x98, 0xBD, 0x9F, 0x9C, 0x98, 0x8B, 0xB9, 0x98, 0x9B, 0x8B, 0x8B, 0xA0, 0x97, 0x9E, - 0x9F, 0xAD, 0x96, 0xAD, 0x83, 0x93, 0x86, 0xB4, 0x91, 0xAD, 0x83, 0x98, 0x98, 0x8B, 0x8F, 0x92, - 0x97, 0x9B, 0x91, 0x9D, 0x93, 0xE8, 0xB2, 0xEA, 0xBE, 0x92, 0x9B, 0xEC, 0x96, 0xA3, 0xE3, 0xB0, - 0x83, 0x89, 0xEF, 0xAD, 0x83, 0x82, 0x90, 0xB2, 0xB8, 0x9D, 0xA2, 0xB6, 0xB8, 0x92, 0x97, 0xAF, - 0xB8, 0xB7, 0x8C, 0xEA, 0x96, 0xE8, 0x94, 0xB2, 0x96, 0xE9, 0x90, 0xAC, 0xB8, 0xE9, 0x8B, 0xAF, - 0xB9, 0x9D, 0x8C, 0xAE, 0x97, 0x9E, 0xB9, 0x9D, 0x86, 0xB4, 0x9B, 0xEB, 0x8F, 0xBE, 0x92, 0xAD, - 0x8B, 0xAD, 0x97, 0x99, 0xEE, 0xAD, 0x96, 0x91, 0x9B, 0xAB, 0xB5, 0x99, 0xB3, 0x9D, 0x90, 0xB7, - 0xB2, 0xEA, 0xBE, 0x92, 0x9B, 0xEC, 0x96, 0xA3, 0xE3, 0xB0, 0x83, 0x89, 0xEF, 0xAD, 0x83, 0x82, - 0x90, 0xB2, 0xB8, 0x9D, 0xA2, 0xB6, 0xB8, 0x92, 0x97, 0xAF, 0xB8, 0xB7, 0x8C, 0xEA, 0x96, 0xE8, - 0x94, 0xB2, 0x96, 0xE9, 0x90, 0xAC, 0xB8, 0xE9, 0x88, 0xBC, 0x86, 0xB4, 0x83, 0xE8, 0x9F, 0xAF, - 0x83, 0xE9, 0x90, 0xA9, 0x97, 0x93, 0x93, 0x98, 0x93, 0xAD, 0x83, 0x9E, 0x8C, 0x88, 0xEA, 0xBD, - 0x98, 0x93, 0x93, 0x98, 0x9D, 0xB0, 0x99, 0x99, 0x9B, 0x88, 0x83, 0xAD, 0xBD, 0xBB, 0xEA, 0x9D, - 0x9E, 0xB3, 0xA9, 0x9D, 0x9B, 0x8B, 0x8B, 0x98, 0xBD, 0xB9, 0xAD, 0xED, 0xBD, 0xE9, 0xEA, 0x99, - 0x9B, 0xBD, 0x9F, 0x98, 0x97, 0x93, 0x9D, 0xBB, 0x97, 0x9E, 0xB1, 0x9D, 0x86, 0xB4, 0x99, 0x99, - 0xA9, 0x9D, 0x9B, 0x8B, 0x8F, 0x9C, 0x98, 0xAD, 0x93, 0x98, 0x9C, 0xB3, 0xEB, 0xB5, 0xBE, 0x92, - 0x88, 0xAD, 0x95, 0xB3, 0xE2, 0xAC, 0x83, 0xE8, 0x9F, 0xAF, 0xB9, 0x9D, 0x9C, 0xA3, 0x83, 0x8D, - 0xA2, 0xA9, 0x80, 0x8D, 0xA2, 0xA0, 0x96, 0xB7, 0xEF, 0xB6, 0xBE, 0x99, 0xE3, 0xB0, 0x83, 0x89, - 0xE3, 0xAD, 0x83, 0x82, 0x90, 0xB2, 0xB8, 0x9D, 0xA2, 0xB6, 0xB8, 0x92, 0x94, 0xBC, 0x86, 0xB4, - 0x83, 0xE9, 0x98, 0xA0, 0x96, 0xB7, 0xB2, 0xEA, 0xB8, 0x8D, 0xAD, 0xAD, 0x82, 0x8B, 0x83, 0x93, - 0x91, 0xAD, 0x83, 0x98, 0x98, 0x8B, 0x8F, 0x92, 0x9B, 0xBD, 0x93, 0xAD, 0x8F, 0x8E, 0x9B, 0xBC, - 0x9D, 0xB2, 0xB2, 0x8B, 0x83, 0x82, 0x90, 0xB2, 0xB8, 0x9D, 0xA2, 0xB6, 0xB8, 0x92, 0x97, 0xBD, - 0x89, 0x9D, 0xE3, 0xA9, 0x80, 0x9D, 0xB6, 0xAF, 0x80, 0xE9, 0x97, 0xA9, 0x93, 0x9D, 0xA2, 0xEA, - 0x86, 0xB4, 0x80, 0x99, 0xEE, 0xAD, 0x9B, 0xAD, 0x93, 0x98, 0x9B, 0x88, 0xB5, 0xAF, 0x88, 0x82, - 0xB2, 0xEA, 0x80, 0x82, 0x90, 0xAF, 0x83, 0x8D, 0xAD, 0xBD, 0x8B, 0xB7, 0x9C, 0xA0, 0xBB, 0x8D, - 0x97, 0xBD, 0x8B, 0xE8, 0x8C, 0xA3, 0xBE, 0x9D, 0xB6, 0xB7, 0xBB, 0x8D, 0x94, 0xB2, 0xBE, 0x9D, - 0xE3, 0xAF, 0x93, 0x9C, 0x98, 0xA3, 0x83, 0x8D, 0x94, 0xEA, 0xBB, 0x8D, 0x94, 0xB6, 0x93, 0x9C, - 0x94, 0xEA, 0x86, 0xB4, 0x83, 0x82, 0x88, 0xB6, 0xB8, 0x8D, 0x8C, 0xAF, 0xBE, 0x9E, 0x98, 0xB1, - 0x98, 0xBD, 0xEE, 0xA8, 0x98, 0xBD, 0x9F, 0x9F, 0x9B, 0x83, 0x92, 0x97, 0x95, 0xEE, 0x94, 0xE3, - 0x9B, 0xBD, 0x93, 0x98, 0x9B, 0xB0, 0x98, 0x89, 0x97, 0x9C, 0x9B, 0x9D, 0x99, 0x99, 0xA9, 0x9D, - 0x9B, 0x8B, 0x8F, 0x9C, 0x98, 0xAD, 0x93, 0x99, 0x97, 0x9F, 0x8B, 0xAD, 0x92, 0xA2, 0xB5, 0x83, - 0x8F, 0x9D, 0x9C, 0xA3, 0x86, 0xB4, 0x83, 0x8D, 0xA2, 0xA9, 0x80, 0x8D, 0xA2, 0xA0, 0x93, 0x9F, - 0xB2, 0xAC, 0xB8, 0x9D, 0x88, 0xAA, 0xB8, 0xB7, 0xBE, 0xA0, 0x96, 0x99, 0x98, 0xA9, 0xBE, 0x9D, - 0x8B, 0xAF, 0x97, 0x9B, 0x97, 0x99, 0x9B, 0x8B, 0x9F, 0xBB, 0x93, 0x8F, 0x8C, 0xEE, 0xBE, 0x9D, - 0x8C, 0xA3, 0xB8, 0xB7, 0x9C, 0xA9, 0x93, 0x9F, 0x90, 0xB2, 0xB9, 0xE8, 0xB6, 0xB0, 0x93, 0x9F, - 0x94, 0xB6, 0xB9, 0xB4, 0x88, 0xAA, 0x86, 0xB4, 0x80, 0xB7, 0xB6, 0xB0, 0x83, 0x82, 0x88, 0xB6, - 0x93, 0x9C, 0x98, 0xAC, 0xB8, 0x9D, 0xB6, 0xB0, 0xBF, 0x8E, 0x9B, 0x94, 0x98, 0xBD, 0xB1, 0xAB, - 0xB2, 0xB1, 0xB3, 0x9D, 0xE3, 0xAD, 0xEA, 0x98, 0x9B, 0x8B, 0xA9, 0x9C, 0x9B, 0x9B, 0x95, 0x99, - 0x9B, 0xBD, 0x9F, 0x9B, 0xB0, 0x99, 0xBE, 0x9C, 0xB8, 0x8D, 0xB4, 0xBE, 0xA0, 0x9D, 0xB4, 0xAF, - 0xAD, 0xAA, 0xE2, 0xB7, 0xA8, 0xA3, 0xF5, 0xA3, 0x86, 0xB4, 0xB1, 0x95, 0x89, 0x95, 0xEB, 0xEF, - 0x94, 0xA3, 0x8F, 0xBC, 0xAF, 0xB2, 0x89, 0xAB, 0x80, 0xEE, 0xB3, 0x89, 0x88, 0xEC, 0xAE, 0xB7, - 0xA3, 0x8D, 0xA8, 0xB5, 0xE2, 0x88, 0x92, 0xBB, 0xA8, 0xE3, 0xEE, 0xE3, 0xA2, 0xA0, 0x8D, 0xA0, - 0xAF, 0x9C, 0xBE, 0xF1, 0xB1, 0xA2, 0xE3, 0xEB, 0x96, 0x93, 0x92, 0xEA, 0x90, 0x9B, 0xB5, 0xEC, - 0xB0, 0xED, 0x98, 0x80, 0x90, 0xBB, 0xE3, 0x80, 0xBB, 0xF5, 0x86, 0xB4, 0x9C, 0x9C, 0x9E, 0xEA, - 0xE3, 0xB7, 0x8D, 0x96, 0xEE, 0xAD, 0xED, 0x90, 0xBE, 0xE9, 0xB9, 0xBE, 0xAA, 0x93, 0x9B, 0xA8, - 0x92, 0x89, 0xF1, 0xA2, 0xBB, 0x92, 0x8C, 0xAC, 0x92, 0x92, 0xA2, 0xB9, 0xE3, 0x91, 0xA0, 0xF1, - 0xBE, 0xE9, 0xA3, 0x9B, 0xB4, 0xA2, 0x97, 0xB4, 0x95, 0x80, 0xB9, 0xB4, 0xB9, 0xAB, 0xB0, 0x8A, - 0x82, 0x9B, 0xA2, 0xA0, 0xB8, 0xE8, 0xB2, 0x9B, 0x8A, 0xEC, 0xEE, 0xAD, 0x86, 0xB4, 0xAD, 0x8A, - 0x9D, 0x83, 0x98, 0xA8, 0xB5, 0xEC, 0xBD, 0x83, 0xBE, 0xAC, 0xBD, 0x8E, 0x94, 0x93, 0xA9, 0xE9, - 0x92, 0x80, 0x9F, 0xB1, 0xBB, 0xB8, 0x94, 0xE8, 0xBF, 0x98, 0xB8, 0x9C, 0x9D, 0xBC, 0xAF, 0x97, - 0xE8, 0xE9, 0x99, 0x99, 0x94, 0x93, 0x99, 0x9F, 0xB8, 0xEB, 0x83, 0xB0, 0x80, 0x9D, 0x8C, 0xAC, - 0xEE, 0x96, 0x88, 0xAD, 0x98, 0xAD, 0xBD, 0xA9, 0x89, 0xB3, 0xEE, 0xB5, 0xAF, 0xEF, 0x86, 0xB4, - 0x8C, 0x88, 0xBE, 0xED, 0xA0, 0x94, 0x90, 0xEA, 0xB5, 0x8B, 0xB4, 0x89, 0x89, 0xA2, 0xB6, 0xE9, - 0x8C, 0xBE, 0x97, 0x83, 0xB8, 0xB6, 0xF5, 0x9B, 0xEE, 0xE2, 0x92, 0x89, 0xE3, 0xBE, 0x9B, 0xB0, - 0x89, 0xB1, 0xBD, 0xB3, 0xB4, 0x8B, 0xB0, 0xA9, 0xBC, 0xED, 0xBD, 0xBF, 0x99, 0xAB, 0x91, 0xEE, - 0xAF, 0x9E, 0xAC, 0x8C, 0xA9, 0x80, 0xBC, 0xB8, 0x8F, 0xAE, 0xEC, 0x9B, 0xE9, 0x95, 0x8E, 0xA3, - 0x86, 0xB4, 0xB7, 0xBF, 0xB6, 0x91, 0xE2, 0x8B, 0x9B, 0x8C, 0xB1, 0xE9, 0x82, 0x9E, 0x9B, 0x9D, - 0xB5, 0xB7, 0x99, 0x9E, 0x9E, 0x80, 0xB0, 0x89, 0x95, 0xB7, 0xA0, 0xB6, 0xAD, 0xB0, 0x9D, 0xB0, - 0xAD, 0xAF, 0x98, 0x94, 0x82, 0x8F, 0x97, 0xAA, 0xEC, 0x98, 0xAA, 0xA3, 0x9E, 0xAC, 0xEC, 0xB5, - 0x8E, 0x8E, 0xF1, 0xB5, 0xB1, 0x9B, 0xB7, 0x8B, 0xBD, 0xBB, 0xEB, 0xBD, 0x92, 0xB9, 0xA8, 0x97, - 0xB4, 0xBF, 0x86, 0xB4, 0x8F, 0xB5, 0xE9, 0xEE, 0xA3, 0x91, 0xEF, 0xBC, 0xE3, 0x93, 0xB5, 0xF1, - 0xAA, 0xE8, 0xBB, 0x8A, 0x96, 0x80, 0x8D, 0x8E, 0xEB, 0x92, 0x92, 0xB3, 0xB0, 0x92, 0x92, 0x8A, - 0x8C, 0xEC, 0xA8, 0x8F, 0xBF, 0xBE, 0x9C, 0xE3, 0x88, 0x8C, 0xB1, 0xAF, 0xB4, 0x96, 0x9E, 0x9D, - 0x95, 0xB9, 0x97, 0x8B, 0xB6, 0x95, 0x99, 0xB9, 0x82, 0x9B, 0xB1, 0x8D, 0x9E, 0x8F, 0xBB, 0xB1, - 0x8C, 0xE3, 0xA3, 0x89, 0x86, 0xB4, 0x99, 0xB9, 0xAC, 0x8C, 0xB2, 0xB8, 0xB2, 0x9B, 0xBF, 0xBD, - 0xB8, 0x80, 0xA2, 0x8C, 0x9D, 0x8F, 0xA2, 0xB3, 0xAF, 0x9C, 0x83, 0x8A, 0x9B, 0xB2, 0xBE, 0x89, - 0x90, 0xAD, 0x97, 0xB9, 0xEE, 0xB0, 0xAD, 0x8A, 0x90, 0xE8, 0x8A, 0xEC, 0xB0, 0xBB, 0xAC, 0xBC, - 0x99, 0xBC, 0x89, 0x96, 0xEE, 0x94, 0xBC, 0xBC, 0xAF, 0x91, 0xE3, 0x96, 0xF5, 0xB3, 0xB3, 0xA8, - 0x80, 0xBD, 0xB4, 0xBD, 0xEB, 0x99, 0x86, 0xB4, 0xF5, 0x91, 0xAF, 0xB0, 0xEC, 0x9F, 0xE2, 0x9F, - 0xA3, 0x9B, 0x95, 0xED, 0xB1, 0xEB, 0x94, 0x89, 0x97, 0x95, 0x9E, 0x9D, 0xEF, 0x96, 0x98, 0xEB, - 0x8C, 0xBD, 0xEF, 0x8B, 0x97, 0xAE, 0x8E, 0xB9, 0xAA, 0xA3, 0x89, 0x8A, 0x8D, 0xB0, 0x83, 0xEA, - 0xA2, 0xAF, 0xA9, 0xE3, 0xB2, 0xB8, 0x8F, 0x88, 0x8C, 0xE3, 0x91, 0xA8, 0xBE, 0xBE, 0x97, 0xB4, - 0x93, 0x8C, 0xB4, 0xB7, 0xA8, 0xEC, 0x82, 0xB5, 0x86, 0xB4, 0x9B, 0xEE, 0xE2, 0xBC, 0xB6, 0xA2, - 0xE9, 0x89, 0x83, 0xAB, 0x82, 0xF5, 0x98, 0x93, 0xB1, 0xB2, 0xEF, 0xAE, 0xA9, 0xF1, 0x9D, 0xE8, - 0x95, 0xEA, 0xAF, 0xBC, 0x88, 0xB2, 0xB7, 0xE8, 0x82, 0x93, 0xA8, 0xB1, 0xE2, 0x8F, 0xF1, 0xF1, - 0xB9, 0xF1, 0x82, 0x96, 0xAD, 0x98, 0xAA, 0x8A, 0x93, 0x95, 0x94, 0xB5, 0xB8, 0xE3, 0xE2, 0xBF, - 0xA2, 0x83, 0x91, 0x9C, 0xEA, 0x93, 0xB1, 0xB0, 0xA8, 0xAE, 0x86, 0xB4, 0xAB, 0xAE, 0x93, 0x97, - 0xB0, 0x94, 0x9F, 0xA2, 0x9F, 0x8B, 0xE3, 0x88, 0x90, 0xBF, 0xAE, 0xB1, 0xB1, 0xB7, 0x83, 0xF1, - 0x80, 0x8E, 0xE8, 0xB8, 0x80, 0x96, 0xA8, 0xB5, 0x9E, 0xBC, 0x9D, 0xB3, 0x82, 0x93, 0xA0, 0xAE, - 0xA2, 0x8B, 0xAC, 0xB9, 0xAF, 0xA0, 0xE8, 0x95, 0xBC, 0xB2, 0xEE, 0xB4, 0x96, 0xEA, 0xEC, 0x97, - 0x95, 0x8D, 0x92, 0x89, 0xBC, 0xF5, 0x9B, 0x8C, 0xBD, 0x8D, 0xB9, 0x91, 0x86, 0xB4, 0x99, 0xB7, - 0xAA, 0x8D, 0xAB, 0xBE, 0x9D, 0x82, 0xB0, 0xA3, 0xAD, 0xA0, 0x97, 0x8E, 0x96, 0xAA, 0x94, 0xA0, - 0xB2, 0xAA, 0xB4, 0xF5, 0x97, 0xE7, 0x86, 0xB4, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0x9F, 0x94, 0x9E, - 0xFA, 0x99, 0x9F, 0x88, 0x8E, 0x93, 0x9C, 0x93, 0x99, 0x9B, 0x8E, 0x9F, 0xF7, 0xF7, 0xF7, 0xF7, - 0xF7, 0x86, 0xB4, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0x98, 0x9F, 0x9D, 0x93, 0x94, 0xFA, 0x99, 0x9F, - 0x88, 0x8E, 0x93, 0x9C, 0x93, 0x99, 0x9B, 0x8E, 0x9F, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0x86, 0xB4, - 0x97, 0x93, 0x93, 0x92, 0xA0, 0x8E, 0x99, 0x99, 0x98, 0xB8, 0x8D, 0xBD, 0x9B, 0xAD, 0x93, 0x98, - 0x9B, 0xBD, 0x93, 0x90, 0x9B, 0x91, 0x9D, 0xEA, 0xAE, 0xAC, 0xBB, 0xB3, 0x97, 0xA9, 0xB6, 0xF1, - 0x97, 0x9B, 0xEA, 0x9D, 0x99, 0x89, 0xAB, 0x9D, 0x89, 0x93, 0xB8, 0xE9, 0x9E, 0x8B, 0x9F, 0x98, - 0x99, 0xAD, 0x8F, 0x9B, 0x97, 0x93, 0x9D, 0xBD, 0x97, 0x8B, 0xA9, 0xAD, 0x99, 0x8B, 0x83, 0x9E, - 0x86, 0xB4, 0x8C, 0x8B, 0x8B, 0x9D, 0x9F, 0xAD, 0x90, 0x9E, 0x89, 0x9E, 0x9F, 0x8C, 0x97, 0x98, - 0x97, 0x9D, 0x9B, 0xEB, 0x8F, 0x9F, 0x98, 0xAD, 0xAD, 0x97, 0x8F, 0xE8, 0x94, 0xB5, 0x83, 0x8D, - 0x80, 0xB7, 0xBB, 0x9D, 0x9C, 0xEB, 0xB9, 0xE8, 0x8C, 0xAF, 0x97, 0x89, 0x97, 0xAD, 0x93, 0x8B, - 0x83, 0x9E, 0x8C, 0x8B, 0x8B, 0x91, 0x9E, 0x98, 0xAA, 0x8B, 0x8B, 0x8C, 0x90, 0x98, 0x8E, 0x9F, - 0xA2, 0x9C, 0x86, 0xB4, 0x8E, 0x9C, 0x97, 0xBD, 0x89, 0x8C, 0x9B, 0xBD, 0x89, 0x9D, 0xE3, 0xA9, - 0x80, 0x9D, 0xB6, 0xAF, 0x80, 0xE9, 0x97, 0xBD, 0x88, 0xE8, 0xEB, 0xB3, 0x89, 0x9E, 0x9F, 0x96, - 0x97, 0x9B, 0xB1, 0x9D, 0x9B, 0xEB, 0x8F, 0x9F, 0x99, 0xAD, 0xAD, 0x99, 0x89, 0x8C, 0x8B, 0xA2, - 0x93, 0xA0, 0x9B, 0xB2, 0x98, 0xBD, 0x94, 0x8C, 0x98, 0x9B, 0x97, 0x97, 0x9D, 0xB6, 0x98, 0xB2, - 0xB9, 0xB7, 0x9C, 0xA9, 0x86, 0xB4, 0xB8, 0x9D, 0x8C, 0xA9, 0xB9, 0xA3, 0x98, 0x9C, 0xBF, 0x92, - 0x88, 0xB6, 0xB9, 0xB7, 0xEF, 0xB2, 0xB8, 0x99, 0x98, 0xA3, 0xB8, 0xE8, 0xE3, 0xEA, 0x93, 0x9F, - 0x94, 0x98, 0x97, 0x89, 0x97, 0xAD, 0x93, 0x8B, 0x83, 0x90, 0x91, 0xB5, 0x80, 0x93, 0xB2, 0xAC, - 0xB9, 0x94, 0x9B, 0x8B, 0xB1, 0x98, 0x9C, 0xB2, 0x88, 0xB2, 0x80, 0x9D, 0xEB, 0xAA, 0xB8, 0xB4, - 0x94, 0x9B, 0xB9, 0x9D, 0x9C, 0xA3, 0x86, 0xB4, 0x83, 0x8D, 0xA2, 0xA9, 0x80, 0x8D, 0xA2, 0xA0, - 0x96, 0xB7, 0x94, 0xAC, 0xB8, 0x8E, 0x9B, 0xBF, 0x9C, 0xAD, 0xEA, 0xA2, 0x97, 0xA0, 0x9B, 0xE9, - 0x97, 0x8E, 0x83, 0xA2, 0x94, 0x9E, 0x8F, 0xEA, 0x97, 0xB0, 0x88, 0xBB, 0x9C, 0xAD, 0xEA, 0xA3, - 0x95, 0x9E, 0x9B, 0xE9, 0x97, 0x8E, 0x93, 0xA2, 0x94, 0x9E, 0x8F, 0xEA, 0x97, 0xB0, 0x88, 0xBB, - 0x97, 0x93, 0x9D, 0xBD, 0x97, 0x8B, 0xA9, 0xAD, 0x86, 0xB4, 0x99, 0x8B, 0x83, 0x9E, 0x8C, 0x8B, - 0x8B, 0x9D, 0x9F, 0xAD, 0x90, 0x9E, 0x89, 0x9E, 0x9F, 0x8C, 0x97, 0x98, 0x97, 0x9D, 0x9B, 0xEB, - 0x8F, 0x9F, 0x98, 0xAD, 0xAD, 0x97, 0x8F, 0xE8, 0x94, 0xB5, 0x83, 0x8D, 0x80, 0xB7, 0xBB, 0x9D, - 0x9C, 0xEB, 0xB9, 0xE8, 0x8C, 0xAF, 0x97, 0x89, 0x97, 0xAD, 0x93, 0x8B, 0x83, 0x9E, 0x8C, 0x8B, - 0x8B, 0x91, 0x9E, 0x98, 0xAA, 0x8B, 0x8B, 0x8C, 0x90, 0x98, 0x86, 0xB4, 0x8E, 0x9F, 0xA2, 0x9C, - 0x8E, 0x9C, 0x97, 0xBD, 0x89, 0x8C, 0x9B, 0xBD, 0x89, 0x9D, 0xE3, 0xA9, 0x80, 0x9D, 0xB6, 0xAF, - 0x80, 0xE9, 0x97, 0xBD, 0x88, 0xE8, 0xEB, 0xB3, 0x89, 0x9E, 0x9F, 0x96, 0x97, 0x9B, 0xB1, 0x9D, - 0x9B, 0xEB, 0x8F, 0x9F, 0x99, 0xAD, 0xAD, 0x99, 0x89, 0x8C, 0x8B, 0xA2, 0x93, 0xA0, 0x9B, 0xB2, - 0x98, 0xBD, 0x94, 0x8C, 0x98, 0x9B, 0x97, 0x97, 0x9D, 0xB6, 0x98, 0xB2, 0x86, 0xB4, 0xB9, 0xB7, - 0x9C, 0xA9, 0xB8, 0x9D, 0x8C, 0xA9, 0xB9, 0xA3, 0x98, 0x9C, 0xBF, 0x92, 0x88, 0xB6, 0xB9, 0xB7, - 0xEF, 0xB2, 0xB8, 0x99, 0x98, 0xA3, 0xB8, 0xE8, 0xE3, 0xEA, 0x93, 0x9F, 0x94, 0x98, 0x97, 0x89, - 0x97, 0xAD, 0x93, 0x8B, 0x83, 0x90, 0x91, 0xB5, 0x80, 0x93, 0xB2, 0xAC, 0xB9, 0x94, 0x9B, 0x8B, - 0xB1, 0x98, 0x9C, 0xB2, 0x88, 0xB2, 0x80, 0x9D, 0xEB, 0xAA, 0xB8, 0xB4, 0x94, 0x9B, 0x86, 0xB4, - 0xB9, 0x9D, 0x9C, 0xA3, 0x83, 0x8D, 0xA2, 0xA9, 0x80, 0x8D, 0xA2, 0xA0, 0x96, 0xB7, 0x94, 0xAC, - 0xB8, 0x8E, 0x99, 0x99, 0x9B, 0xB3, 0x93, 0xAD, 0x9E, 0x8B, 0x83, 0x90, 0x91, 0xB5, 0x80, 0x93, - 0xB2, 0xAC, 0xB9, 0x94, 0x9B, 0x8B, 0x9F, 0x98, 0x98, 0x8B, 0x9B, 0x9E, 0xBD, 0xBD, 0x93, 0x8A, - 0x9B, 0x9E, 0x99, 0x99, 0x9B, 0xBD, 0xB5, 0x99, 0xBD, 0xBD, 0x93, 0x98, 0x9B, 0x94, 0x8A, 0x9C, - 0x86, 0xB4, 0x8E, 0x91, 0x88, 0xE8, 0xAC, 0xB3, 0xAF, 0xEA, 0xB7, 0xA0, 0x91, 0x9F, 0xEF, 0xA9, - 0x9D, 0xBB, 0x97, 0xB9, 0x96, 0x93, 0xEC, 0x95, 0xA0, 0x90, 0x88, 0xEA, 0x8A, 0xB0, 0xEF, 0x96, - 0xAB, 0x9C, 0x8A, 0xE9, 0x9F, 0xA9, 0xB7, 0x9D, 0x8D, 0x8F, 0x8B, 0xB0, 0xB5, 0x99, 0xB8, 0x94, - 0xAF, 0x9F, 0x9D, 0x80, 0xB7, 0xA0, 0xB0, 0xF5, 0xAA, 0xA3, 0xE8, 0xB5, 0xE9, 0x8C, 0x9D, 0xAB, - 0xEB, 0xE2, 0x86, 0xB4, 0xEC, 0x8F, 0x95, 0x8F, 0x9C, 0x8A, 0xE2, 0xE2, 0x83, 0x94, 0xE9, 0xED, - 0x93, 0x9F, 0x82, 0x8F, 0xBC, 0x8B, 0x82, 0xB1, 0xBC, 0x97, 0xF5, 0x83, 0xE3, 0x97, 0xED, 0xB7, - 0xA3, 0xEE, 0xE3, 0x9E, 0xEE, 0xE3, 0x9B, 0xB8, 0x9E, 0xB8, 0xB8, 0xB8, 0x9F, 0x90, 0x9E, 0xA9, - 0xA8, 0xB8, 0xA2, 0xEF, 0x83, 0x97, 0xF1, 0xB0, 0x8D, 0xB8, 0x95, 0xB4, 0x83, 0xE9, 0x9B, 0xBC, - 0xAF, 0x8D, 0xAF, 0x8A, 0x86, 0xB4, 0xBC, 0xAE, 0xA2, 0xB8, 0xE2, 0xB4, 0x9E, 0x93, 0xAC, 0x8F, - 0xB5, 0xE9, 0xEA, 0x98, 0x94, 0xAD, 0x93, 0xE2, 0xE2, 0x95, 0x8F, 0x9D, 0xB9, 0xAE, 0xE8, 0xA3, - 0xAA, 0xAE, 0x97, 0x83, 0xBD, 0xA0, 0xEF, 0xA3, 0x94, 0xA2, 0xA2, 0xB8, 0xA8, 0xB0, 0xBE, 0xBE, - 0x91, 0xAB, 0x8C, 0x93, 0xEA, 0xAA, 0xEB, 0xB3, 0xB9, 0xF1, 0x97, 0xE9, 0x92, 0xA0, 0x8E, 0x90, - 0xB3, 0xAF, 0xAF, 0xAB, 0xBF, 0x92, 0x86, 0xB4, 0xBC, 0x8F, 0x89, 0xE3, 0xF1, 0xE9, 0x83, 0xA9, - 0x97, 0xB1, 0x90, 0x99, 0x9C, 0x8B, 0xEE, 0xF1, 0xA9, 0xE3, 0x96, 0xA0, 0xB6, 0xED, 0xAE, 0xF5, - 0x93, 0xEC, 0xA0, 0xB6, 0xBE, 0xAD, 0x99, 0xAB, 0x8F, 0xB3, 0xB9, 0x8C, 0xB0, 0x83, 0x91, 0xEA, - 0xA0, 0x9E, 0xA2, 0xE9, 0xB8, 0xED, 0xEE, 0xB3, 0x80, 0x97, 0x8A, 0xEA, 0x91, 0x9E, 0x80, 0x99, - 0xAA, 0xEE, 0xB7, 0xB8, 0xAC, 0xBE, 0xED, 0xBE, 0x86, 0xB4, 0xE3, 0xE8, 0xAB, 0x88, 0x80, 0x91, - 0x88, 0xEA, 0xA2, 0x89, 0xEA, 0x9B, 0xB3, 0x90, 0xBE, 0xB1, 0xE2, 0xEE, 0xED, 0xEE, 0xB3, 0xA2, - 0xEC, 0xE9, 0xAC, 0x95, 0x80, 0xA9, 0xA2, 0xAC, 0xEE, 0x90, 0xB7, 0xAF, 0xB4, 0x8F, 0xAB, 0xBC, - 0xEB, 0xF1, 0xA9, 0x9D, 0xA9, 0xBF, 0x80, 0xBD, 0xBD, 0x9C, 0x83, 0xEB, 0x8A, 0xAB, 0xB0, 0xBC, - 0xB3, 0x8E, 0xB4, 0xE3, 0xE2, 0xAB, 0x95, 0xB7, 0x92, 0xB6, 0x86, 0xB4, 0xBE, 0x82, 0xBE, 0x90, - 0xB7, 0xB0, 0x9D, 0x96, 0xEE, 0xBB, 0x95, 0x8D, 0xF5, 0xEF, 0xB7, 0xAC, 0xBC, 0x8B, 0xB3, 0x93, - 0x91, 0xAE, 0xF1, 0xE2, 0x83, 0xB8, 0xA8, 0x9F, 0xEA, 0x98, 0x80, 0xAE, 0xAE, 0xB2, 0xA9, 0x8A, - 0x9D, 0x96, 0xEB, 0xBE, 0xB6, 0xEA, 0x98, 0x8F, 0xA8, 0xE2, 0x9C, 0x9C, 0xB0, 0xA0, 0xA9, 0xEB, - 0xEC, 0x9D, 0xA2, 0x97, 0xEC, 0x8F, 0xEB, 0xED, 0xAB, 0xA3, 0xE8, 0x96, 0x86, 0xB4, 0xAD, 0xEB, - 0x89, 0x8B, 0xAE, 0x80, 0xBB, 0xB7, 0xF5, 0xB9, 0x8A, 0xE2, 0xBB, 0xB9, 0xEB, 0xAD, 0x96, 0x9E, - 0xB4, 0x91, 0xF1, 0xA3, 0x80, 0xBB, 0x95, 0x9B, 0x9C, 0xA8, 0xE2, 0xEB, 0x82, 0x83, 0xBB, 0x98, - 0xA8, 0xAB, 0xEF, 0xAE, 0xBF, 0xA0, 0x99, 0xEB, 0xB8, 0x99, 0xE8, 0xB2, 0x91, 0xEF, 0xBF, 0x83, - 0xBC, 0x97, 0xB9, 0xEC, 0x97, 0xB6, 0xED, 0xAF, 0x92, 0xB1, 0x9D, 0xF5, 0x96, 0xF1, 0x86, 0xB4, - 0x8B, 0xB6, 0xEE, 0x8E, 0x8C, 0xBB, 0xB1, 0x8F, 0xB2, 0x96, 0xA9, 0xBB, 0xA3, 0x9B, 0x8E, 0xAB, - 0xAC, 0x9D, 0xE2, 0xAC, 0xBC, 0xAF, 0xB3, 0xED, 0xB3, 0x95, 0xEF, 0xB3, 0x98, 0xEC, 0xB2, 0xF1, - 0xB1, 0xEF, 0xED, 0xE9, 0x9F, 0x8A, 0xB6, 0xB4, 0x8A, 0xEB, 0x98, 0xBC, 0xBB, 0x9F, 0xA9, 0xA3, - 0x9E, 0xEB, 0xA0, 0x9D, 0xBC, 0xB2, 0xEC, 0xA3, 0x96, 0x9E, 0xEB, 0xAE, 0xA0, 0xED, 0xBB, 0xB4, - 0x86, 0xB4, 0xBE, 0xEF, 0xE9, 0xB7, 0xA2, 0x9F, 0x9B, 0xA3, 0x9E, 0xB9, 0xB8, 0x99, 0xA0, 0xA0, - 0x94, 0xB1, 0xA9, 0x9F, 0x8C, 0x89, 0xB8, 0xF5, 0xBD, 0xB0, 0x8D, 0xB0, 0x8B, 0xB1, 0xB4, 0x88, - 0xBF, 0xA0, 0xA0, 0xE9, 0x9B, 0xB4, 0x89, 0x8D, 0x89, 0x99, 0x88, 0x9B, 0xEF, 0x99, 0xAF, 0x94, - 0xE3, 0xB2, 0x8C, 0xEB, 0x9E, 0xB9, 0xEE, 0xEC, 0xB2, 0x91, 0xEB, 0x93, 0xAF, 0x94, 0x9F, 0xEA, - 0x9B, 0x99, 0x86, 0xB4, 0xA2, 0x9F, 0x97, 0xEC, 0xAE, 0xB0, 0x8E, 0xED, 0xEC, 0x83, 0x9C, 0xAF, - 0x8B, 0xA2, 0x94, 0xAF, 0x82, 0xF5, 0x99, 0xAE, 0x8E, 0x9C, 0xB4, 0x97, 0x93, 0x9E, 0x83, 0xB8, - 0x9D, 0x98, 0xAA, 0x94, 0xB6, 0xA2, 0x93, 0xB3, 0xBC, 0x90, 0xE2, 0xB5, 0xE3, 0xB0, 0xAB, 0x89, - 0x96, 0x8F, 0xBE, 0x9C, 0xBE, 0xA3, 0xEE, 0x94, 0x91, 0x8F, 0x9F, 0xB6, 0xB6, 0x82, 0xA2, 0xED, - 0xAB, 0x94, 0xB2, 0x9E, 0x86, 0xB4, 0x91, 0x9C, 0xB4, 0x91, 0xE8, 0x91, 0xAA, 0x8F, 0xEC, 0x96, - 0xB9, 0x96, 0xB3, 0xB4, 0x91, 0xB4, 0xA2, 0x98, 0x8B, 0x82, 0xEA, 0x8A, 0xB0, 0x9E, 0xB8, 0xBD, - 0xE3, 0xAE, 0xE3, 0x88, 0x98, 0x82, 0xAD, 0x93, 0xBF, 0xEF, 0xA0, 0xF1, 0xAA, 0xF5, 0x9B, 0xBD, - 0x97, 0x98, 0x9B, 0x9B, 0x9D, 0xB0, 0xBD, 0xBD, 0x93, 0x9D, 0x97, 0x93, 0x93, 0x99, 0x9B, 0xB0, - 0x9B, 0x8A, 0x98, 0xBD, 0x94, 0x8C, 0x86, 0xB4, 0x92, 0x88, 0x97, 0x98, 0x9B, 0xBC, 0xE2, 0x9F, - 0x98, 0x8E, 0x9B, 0x9E, 0x9B, 0x8B, 0x92, 0xF5, 0x97, 0x9B, 0xEE, 0x9D, 0x9B, 0xEB, 0x8F, 0xBE, - 0x9E, 0xAD, 0x9F, 0x98, 0xF5, 0xAD, 0x8B, 0x9F, 0x9B, 0xAD, 0x93, 0x98, 0x98, 0xB0, 0x9B, 0xBE, - 0x98, 0xBD, 0x94, 0x8C, 0x92, 0x8B, 0xEE, 0x9F, 0x9C, 0xBD, 0x8B, 0x8F, 0x95, 0x8E, 0xA0, 0xB4, - 0x92, 0x83, 0xB1, 0xED, 0xB9, 0xAF, 0xBC, 0xE8, 0x86, 0xB4, 0xE8, 0xAF, 0xA9, 0xA9, 0xB2, 0xBE, - 0x89, 0xE8, 0x9E, 0x9F, 0xBB, 0xAA, 0x8B, 0x98, 0x9F, 0xAD, 0x92, 0xAD, 0x83, 0x9E, 0x8C, 0x88, - 0xEA, 0xB0, 0x98, 0x98, 0xBD, 0xAD, 0x9C, 0xB5, 0x9B, 0x8F, 0x95, 0x8E, 0xA0, 0xB4, 0x92, 0x83, - 0xB1, 0xED, 0xB9, 0xAF, 0xBC, 0xE8, 0xE8, 0xAF, 0xA9, 0xA9, 0xB2, 0xBE, 0x89, 0xE8, 0x9E, 0x9F, - 0xBB, 0xAA, 0x8B, 0x98, 0x9F, 0xAD, 0x8A, 0xAD, 0x83, 0x93, 0x86, 0xB4, 0x91, 0xAD, 0x83, 0x98, - 0x98, 0x8B, 0x8F, 0x92, 0x9B, 0x8B, 0x9F, 0x9F, 0x97, 0xA0, 0x9B, 0xA2, 0x97, 0x99, 0xE2, 0x9D, - 0x99, 0x99, 0xA9, 0x9D, 0x9B, 0x8B, 0x8F, 0x9C, 0x98, 0xA0, 0x9B, 0x99, 0xB2, 0xB3, 0x94, 0xB5, - 0xBE, 0x92, 0x88, 0xAD, 0x95, 0xB3, 0xE2, 0xAC, 0x83, 0xE8, 0x9F, 0xAF, 0xB9, 0x9D, 0x9C, 0xA3, - 0x83, 0x8D, 0xA2, 0xA9, 0x80, 0x8D, 0xA2, 0xA0, 0x96, 0xB7, 0xEF, 0xB6, 0x86, 0xB4, 0xBE, 0x99, - 0xE3, 0xB0, 0x83, 0x89, 0xE3, 0xA3, 0xB8, 0xE8, 0xE3, 0xEA, 0x96, 0xB4, 0x98, 0xB6, 0xB8, 0x8E, - 0x9B, 0xE9, 0x98, 0xBD, 0x94, 0x8C, 0x92, 0x88, 0xE2, 0x9F, 0x97, 0x9E, 0x9B, 0xAF, 0x97, 0x99, - 0xA3, 0xBD, 0x91, 0xAB, 0x9B, 0xB5, 0xB2, 0xB3, 0x80, 0xB5, 0xBE, 0x92, 0x88, 0xAD, 0x95, 0xB3, - 0xE2, 0xAC, 0x83, 0xE8, 0x9F, 0xAF, 0xB9, 0x9D, 0x9C, 0xA3, 0x83, 0x8D, 0xA2, 0xA9, 0x86, 0xB4, - 0x80, 0x8D, 0xA2, 0xA0, 0x96, 0xB7, 0xEF, 0xB6, 0xBE, 0x99, 0xE3, 0xB0, 0x83, 0x89, 0xE3, 0xA3, - 0xB8, 0xE8, 0xE3, 0xEA, 0x82, 0xE8, 0x94, 0xB2, 0x96, 0xB7, 0x94, 0xA3, 0xB8, 0x9E, 0x99, 0x99, - 0x9B, 0x89, 0x97, 0x9D, 0x9B, 0xEB, 0x8F, 0xBE, 0x93, 0x9B, 0x89, 0x99, 0x9B, 0x88, 0xB5, 0xAD, - 0xBD, 0xBD, 0x9F, 0x8D, 0x97, 0x93, 0x9D, 0xAE, 0x98, 0xBD, 0xEE, 0xA8, 0x98, 0xBD, 0x9F, 0x9F, - 0x86, 0xB4, 0x9B, 0x83, 0x92, 0x97, 0x95, 0xEE, 0x94, 0xE3, 0x9B, 0xBD, 0x93, 0x98, 0x9B, 0x8E, - 0x99, 0x98, 0xB7, 0xB0, 0x9B, 0xEF, 0x98, 0xBD, 0xBD, 0xA8, 0x98, 0xBD, 0x9F, 0x9C, 0x98, 0x8B, - 0xB9, 0x99, 0x9B, 0x88, 0x83, 0xAE, 0xBB, 0x92, 0x88, 0xEA, 0xB9, 0x9E, 0xB5, 0xAC, 0x96, 0xE8, - 0x94, 0xB2, 0x96, 0xB4, 0x98, 0xB2, 0xB9, 0xB7, 0x9C, 0xA9, 0xB8, 0x9D, 0x8C, 0xA9, 0xB9, 0xA3, - 0xEF, 0xAF, 0x86, 0xB4, 0x80, 0x82, 0x8B, 0xAC, 0x83, 0xE8, 0x9F, 0xAC, 0xB9, 0x9D, 0x9C, 0xA3, - 0x83, 0x8D, 0xA2, 0xA9, 0x80, 0x8D, 0xA2, 0xA0, 0x82, 0xE8, 0x94, 0xAD, 0xB9, 0xA3, 0xEF, 0xB5, - 0xBE, 0x9D, 0xEB, 0xA9, 0x97, 0x9C, 0xEA, 0x9D, 0x99, 0x99, 0xA9, 0x9D, 0x9B, 0x8B, 0x8F, 0x9C, - 0x98, 0xAD, 0x93, 0x99, 0x97, 0x9C, 0x9F, 0xAD, 0x92, 0xA2, 0xB5, 0x83, 0x8F, 0x9D, 0x9C, 0xA3, - 0x83, 0x8D, 0xA2, 0xA9, 0x86, 0xB4, 0x80, 0x8D, 0xA2, 0xA0, 0x93, 0x9F, 0xB2, 0xAC, 0xB8, 0x9D, - 0x88, 0xAA, 0xB8, 0xB7, 0xBE, 0xA0, 0x96, 0x99, 0x98, 0xA9, 0xBE, 0x9D, 0x8B, 0xAF, 0x97, 0x9B, - 0x97, 0x99, 0x9B, 0x8B, 0x9F, 0xBB, 0x96, 0xB1, 0x8C, 0xEE, 0xBE, 0x9D, 0x8C, 0xA3, 0xB8, 0xB7, - 0x9C, 0xA9, 0x93, 0x9F, 0x90, 0xB2, 0xB9, 0xE8, 0xB6, 0xB0, 0x93, 0x9F, 0x94, 0xB6, 0xB9, 0xB4, - 0x88, 0xAA, 0x80, 0xB7, 0xB6, 0xB0, 0x86, 0xB4, 0x83, 0x82, 0x88, 0xAC, 0xB8, 0xB3, 0x98, 0x8B, - 0xB9, 0xB7, 0x9C, 0xB0, 0xBE, 0x9D, 0xB6, 0xB0, 0x80, 0x89, 0x98, 0x8E, 0xBE, 0x9D, 0x9C, 0xEA, - 0x80, 0x8D, 0xEB, 0xB6, 0xB8, 0xB4, 0x8B, 0xAD, 0x80, 0x9B, 0x83, 0x95, 0x91, 0xAD, 0x83, 0x98, - 0x98, 0x9B, 0x9D, 0x98, 0xA0, 0x9E, 0xAF, 0x9E, 0xBC, 0x8B, 0x93, 0x99, 0x9B, 0x8B, 0x93, 0xAD, - 0x8F, 0xB0, 0x98, 0x8B, 0x98, 0xBD, 0xBD, 0xA8, 0x86, 0xB4, 0x98, 0xBD, 0x9F, 0x9C, 0x98, 0x8B, - 0xB9, 0x99, 0x9B, 0xB0, 0x98, 0x9F, 0x97, 0x98, 0xE2, 0xBB, 0x9D, 0x9C, 0x98, 0xB2, 0xB9, 0xB7, - 0x9C, 0xA9, 0xB8, 0x9D, 0x8C, 0xA9, 0xB9, 0xA3, 0x98, 0x93, 0xB8, 0xE8, 0xA2, 0xB1, 0xBB, 0x8D, - 0xEF, 0xB4, 0xB9, 0xA3, 0xAD, 0xBD, 0xB8, 0x92, 0x88, 0xB1, 0x96, 0xB0, 0x9B, 0x9E, 0x9B, 0xBD, - 0x9F, 0x98, 0x9D, 0xB3, 0x9C, 0x9C, 0xBF, 0x92, 0x88, 0xB6, 0x86, 0xB4, 0xB9, 0xB7, 0xEF, 0xB2, - 0xB8, 0x99, 0x98, 0x99, 0x83, 0x82, 0x94, 0xAA, 0x83, 0xA3, 0x98, 0x9E, 0x80, 0x82, 0x90, 0xEA, - 0xBB, 0x8D, 0x80, 0xAA, 0x83, 0xE8, 0x9C, 0xEA, 0x80, 0x89, 0x98, 0x8B, 0xB8, 0xE8, 0xA2, 0xAA, - 0x83, 0xE9, 0xB1, 0xAD, 0x9E, 0x8B, 0x83, 0x90, 0x91, 0xB5, 0x80, 0x93, 0xB2, 0xAC, 0xB9, 0x94, - 0x9B, 0x8B, 0x9F, 0x96, 0x98, 0x8B, 0x9B, 0x9E, 0xBD, 0xBD, 0x93, 0x98, 0x86, 0xB4, 0x9B, 0x9F, - 0xF1, 0x80, 0x94, 0xA9, 0xB9, 0xEE, 0xE3, 0x88, 0x90, 0xEC, 0x80, 0xAE, 0xB4, 0x8A, 0x9E, 0x8B, - 0xEF, 0x88, 0xE3, 0xB4, 0x8D, 0x91, 0x8C, 0xB5, 0x8B, 0x8B, 0x92, 0xAA, 0x90, 0x80, 0xB5, 0xA8, - 0xAD, 0xB5, 0x8F, 0x9D, 0xA3, 0xF1, 0x99, 0x8F, 0x89, 0xBC, 0x96, 0xE2, 0xAF, 0xA2, 0xE9, 0xEF, - 0xAD, 0xB2, 0xB7, 0xB8, 0xBE, 0xB3, 0x9D, 0x8B, 0x90, 0xE8, 0xED, 0x97, 0xB7, 0xE3, 0x86, 0xB4, - 0x80, 0x90, 0x8C, 0xA8, 0xBC, 0x9E, 0x92, 0x91, 0xAE, 0xB7, 0x8A, 0xED, 0xBD, 0x9D, 0xB9, 0x8C, - 0xED, 0x8C, 0xF1, 0x97, 0x8D, 0x8C, 0x8A, 0xBF, 0xB4, 0x88, 0xBB, 0x9E, 0xAA, 0xEA, 0xAC, 0xB6, - 0xBE, 0xEC, 0xB1, 0xEF, 0xB3, 0x8D, 0xEE, 0x80, 0xB0, 0xA0, 0xE3, 0x93, 0x88, 0xB4, 0x8F, 0x8B, - 0xEE, 0xAF, 0xEE, 0xEA, 0xAC, 0xB4, 0x8F, 0xB0, 0xEF, 0xEF, 0xAF, 0xA9, 0xB7, 0x91, 0xEE, 0x8C, - 0x86, 0xB4, 0xB9, 0xAC, 0xB9, 0x98, 0xBC, 0x9E, 0xF5, 0x98, 0xB2, 0x9E, 0xEF, 0xED, 0x8B, 0xB0, - 0x8B, 0xB8, 0xAE, 0xEB, 0xBD, 0x92, 0x83, 0xEE, 0x88, 0x9E, 0x96, 0xAB, 0x97, 0xB6, 0x94, 0x80, - 0xAE, 0x89, 0xA9, 0xA2, 0x97, 0x83, 0xB7, 0xBB, 0xAC, 0xF5, 0x8D, 0x91, 0x93, 0xBC, 0xED, 0xAB, - 0xEC, 0x92, 0xB0, 0x8E, 0xB7, 0x97, 0xAE, 0x80, 0x91, 0x98, 0xF1, 0xF5, 0x94, 0xAD, 0x8C, 0xAE, - 0xE3, 0xEA, 0x86, 0xB4, 0xEE, 0xA0, 0xAE, 0x97, 0x9D, 0x9E, 0x9B, 0xB8, 0xE3, 0xB6, 0x9F, 0xB0, - 0x9D, 0xE9, 0x9E, 0xAB, 0xEE, 0xB1, 0xB6, 0x89, 0xA0, 0x8C, 0xBC, 0x9D, 0x97, 0xEC, 0x9C, 0x96, - 0xB8, 0x97, 0xA2, 0xF5, 0x8B, 0xEC, 0xAD, 0xA3, 0xB2, 0xF1, 0xAC, 0x8C, 0xE2, 0x95, 0xB2, 0xE9, - 0x8B, 0x8A, 0xF5, 0xE8, 0x9B, 0xEF, 0xF5, 0xE2, 0x93, 0x88, 0x99, 0xEE, 0xA9, 0xAA, 0x8F, 0xAA, - 0x88, 0x97, 0xB8, 0x8D, 0x86, 0xB4, 0xAD, 0x9E, 0xBE, 0xAD, 0xA9, 0xAB, 0xBC, 0xB6, 0x99, 0xB8, - 0xA8, 0x9E, 0xAA, 0xB5, 0x97, 0x95, 0xA2, 0xED, 0xAA, 0xB4, 0x8C, 0x9B, 0xF1, 0x9B, 0xB6, 0xE3, - 0x82, 0xBF, 0x90, 0x83, 0x8F, 0xBE, 0xA8, 0x96, 0xEB, 0x9D, 0xAC, 0xEC, 0x88, 0xBB, 0x80, 0x89, - 0x97, 0xEA, 0xB6, 0xF1, 0x83, 0x98, 0x8C, 0x9C, 0x97, 0x9B, 0x93, 0xED, 0x98, 0xEE, 0x89, 0x8B, - 0x91, 0xAD, 0xB0, 0xB9, 0x98, 0xED, 0x86, 0xB4, 0x96, 0xAF, 0x8D, 0x8B, 0x9D, 0x94, 0xED, 0x8D, - 0x90, 0x8E, 0x92, 0xB9, 0xB8, 0x8F, 0xB7, 0xB3, 0x97, 0xB4, 0xBE, 0xB3, 0xA2, 0xEE, 0xBD, 0xAD, - 0x88, 0xAA, 0x98, 0xAE, 0xBE, 0xB8, 0xBB, 0xED, 0x9E, 0xEF, 0xAD, 0x91, 0x96, 0xA2, 0xB9, 0xBF, - 0x9B, 0xA0, 0x82, 0xB2, 0x95, 0xA8, 0x9B, 0x96, 0xED, 0xB6, 0x9B, 0xEB, 0xAB, 0x8A, 0xBF, 0x94, - 0xB2, 0xE2, 0x94, 0x98, 0xEB, 0x93, 0x99, 0x8E, 0x86, 0xB4, 0xA8, 0xE2, 0xE2, 0x95, 0xE2, 0xED, - 0xAF, 0x96, 0xB9, 0x93, 0x90, 0xAA, 0xB5, 0xB0, 0xBF, 0xEC, 0x94, 0xBD, 0xA3, 0xAF, 0xB2, 0xE2, - 0xBE, 0xBE, 0x92, 0xBC, 0xF5, 0xAA, 0x89, 0xB1, 0xAB, 0xF5, 0xB1, 0x98, 0x83, 0xB6, 0x8A, 0xEC, - 0x89, 0x9B, 0xAC, 0xBD, 0xED, 0xA2, 0xAF, 0xA9, 0xB8, 0x89, 0x9E, 0xBE, 0xAB, 0xAD, 0xB2, 0x8B, - 0xBB, 0xB9, 0x80, 0x83, 0xA2, 0xF5, 0x9D, 0x97, 0xA9, 0x9D, 0x86, 0xB4, 0x90, 0xB9, 0xB8, 0xA2, - 0xEF, 0xA2, 0x9B, 0xB4, 0xB7, 0xB8, 0xB7, 0xAE, 0xED, 0xE2, 0x89, 0x99, 0xBF, 0xE8, 0xAC, 0xA9, - 0x9F, 0xB5, 0x95, 0x9F, 0xB7, 0xA9, 0xF1, 0xB8, 0xE8, 0x8D, 0x99, 0x97, 0xB8, 0xA9, 0x93, 0xB1, - 0xB8, 0x98, 0x8C, 0xAE, 0xEB, 0x98, 0xF5, 0xA8, 0xE9, 0xE3, 0xBE, 0xA8, 0xBB, 0x8A, 0x91, 0xED, - 0xF5, 0xB7, 0xE2, 0x90, 0x90, 0x83, 0xAA, 0x8B, 0x8A, 0xAD, 0x8D, 0xA3, 0x86, 0xB4, 0xBB, 0x94, - 0xF5, 0x9D, 0xEE, 0xBD, 0x95, 0x98, 0x92, 0xAD, 0x91, 0xB8, 0xAE, 0x9B, 0xB4, 0xF1, 0xE3, 0xA2, - 0x82, 0x80, 0xA8, 0xB5, 0x94, 0xAB, 0xB6, 0xB0, 0x9B, 0x89, 0x8D, 0x94, 0x83, 0xA9, 0xA2, 0xBF, - 0x96, 0x95, 0x80, 0x82, 0xF1, 0xB1, 0xB1, 0x9D, 0xEB, 0xAE, 0xAD, 0xE8, 0xA0, 0x8E, 0xAD, 0x8E, - 0x82, 0x9E, 0x95, 0x8E, 0xEB, 0xAE, 0x95, 0xBB, 0x91, 0x95, 0xA2, 0x97, 0x8A, 0x95, 0x86, 0xB4, - 0xB3, 0xAB, 0xEE, 0x92, 0xEE, 0x9D, 0x93, 0x90, 0xB9, 0xEC, 0x80, 0x83, 0xEB, 0x80, 0xEB, 0x80, - 0xF5, 0x8B, 0xAF, 0xB6, 0xB4, 0x93, 0xAD, 0xEA, 0x8D, 0xEB, 0x8F, 0xE2, 0xA8, 0xBF, 0x8D, 0x97, - 0xBF, 0xAF, 0xB0, 0xBB, 0x82, 0x9D, 0xAD, 0xB2, 0xA3, 0xAB, 0x80, 0xB2, 0x99, 0xF1, 0x95, 0xA0, - 0xB9, 0xB4, 0xE3, 0xBC, 0x8F, 0x96, 0x8E, 0xF1, 0x8E, 0x83, 0x92, 0x8B, 0x8F, 0x99, 0xA8, 0xB5, - 0x86, 0xB4, 0x88, 0x91, 0xA2, 0xF1, 0xAD, 0xF1, 0x8C, 0x97, 0x93, 0x82, 0xAA, 0x93, 0x8D, 0xAC, - 0x8D, 0x98, 0xF1, 0xB0, 0xA2, 0xE2, 0xB8, 0xE3, 0xEF, 0xB4, 0x9D, 0xAB, 0xAD, 0xAF, 0xEC, 0xF1, - 0xB6, 0xAE, 0xE9, 0x80, 0xE9, 0xA3, 0x9B, 0xAE, 0x83, 0xBB, 0x8F, 0xB8, 0x96, 0xBE, 0x86, 0xB4, - 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0x9F, 0x94, 0x9E, 0xFA, 0x99, 0x9F, 0x88, 0x8E, 0x93, 0x9C, 0x93, - 0x99, 0x9B, 0x8E, 0x9F, 0xF7, 0xF7, 0xF7, 0xF7, 0xF7, 0x86, 0xB4, 0xF8, 0xF6, 0xD0, 0xFA, 0xFA, - 0xFA, 0xFA, 0xF8, 0xA9, 0xB3, 0xBD, 0xB4, 0xBB, 0xAE, 0xAF, 0xA8, 0xBF, 0xF8, 0xE0, 0xFA, 0xF8, - 0xF8, 0xD0, 0xA7 - }; - - // const char* fake_license_data = "{\n \"license\": \"{\\\"name\\\": \\\"PrlPro17\\\", \\\"uuid\\\": \\\"\\\", \\\"lic_key\\\": \\\"\\\", \\\"product_version\\\": \\\"17.*\\\", \\\"is_upgrade\\\": false, \\\"is_sublicense\\\": false, \\\"parent_key\\\": null, \\\"parent_uuid\\\": null, \\\"main_period_ends_at\\\": \\\"2045-05-09 00:00:00\\\", \\\"grace_period_ends_at\\\": \\\"2045-05-09 00:00:00\\\", \\\"is_auto_renewable\\\": false, \\\"is_nfr\\\": false, \\\"is_beta\\\": false, \\\"is_china\\\": false, \\\"is_suspended\\\": false, \\\"is_expired\\\": false, \\\"is_grace_period\\\": false, \\\"is_purchased_online\\\": false, \\\"limit\\\": 10, \\\"usage\\\": 1, \\\"edition\\\": 2, \\\"platform\\\": 3, \\\"product\\\": 7, \\\"offline\\\": true, \\\"cpu_limit\\\": 32, \\\"ram_limit\\\": 131072, \\\"hosts\\\": [{\\\"name\\\": \\\"GDPR_HIDDEN\\\", \\\"hw_id\\\": \\\"\\\", \\\"product_version\\\": \\\"\\\", \\\"activated_at\\\": \\\"2021-05-09 00:00:00\\\"}], \\\"is_trial\\\": false}\",\n \"publicCerts\": \"-----BEGIN CERTIFICATE-----\\nMIIGpDCCBIygAwIBAgICEAAwDQYJKoZIhvcNAQELBQAwdDELMAkGA1UEBhMCUlUx\\nDzANBgNVBAcMBk1vc2NvdzEjMCEGA1UECgwaUGFyYWxsZWxzIElQIEhvbGRpbmdz\\nIEdtYkgxEDAOBgNVBAsMB0Rlc2t0b3AxHTAbBgNVBAMMFFBhcmFsbGVscyBEZXNr\\ndG9wIENBMB4XDTE4MTIyNDA5MDM1N1oXDTI4MTEwNjA5MDM1N1owdzELMAkGA1UE\\nBhMCUlUxDzANBgNVBAcTBk1vc2NvdzElMCMGA1UEChMcUGFyYWxsZWxzIEludGVy\\nbmF0aW9uYWwgR21iSDEQMA4GA1UECxMHRGVza3RvcDEeMBwGA1UEAxMVZGVza3Rv\\ncC5wYXJhbGxlbHMuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA\\nzoVPP60oYTjswM8vsWgpNOF9ZyB3wU/sJeYtmeC+0eTVDqYfI8Qq2/AoDLhEIg6c\\nvd8vGDUmXTvkX+r/bZCS9oR6o3M2otsgwMzsRQQgOWfngyB3PVh0V+FM68DoCZZF\\nLSYQ3Ghv7AK21M/g4TcKFY30ngc9avMJeJ6lSLzpEyV6YkDbB0VBcAOSe0AyAUN4\\na957UwRt2hVn5kCr5DPje4w1xXnHIx+MhrhGgUz0stQX2Yu4e2+lpy0rBEU7HIqe\\npCqVSwSeAfrgonwUAB1dTPSZ5wHBYiX30x+UaMScHlHuPOrUy4bS2e5mMR+FWGh9\\nv3oNBRMhLPJG9YIquGE4twIDAQABo4ICOzCCAjcwDAYDVR0TAQH/BAIwADAOBgNV\\nHQ8BAf8EBAMCB4AwHQYDVR0OBBYEFG1biXwSoD4JwjCnq7kqU8fgXNv2MB8GA1Ud\\nIwQYMBaAFALkzfL1GhWDbfCrrwQRxRf52EyPMEEGCCsGAQUFBwEBBDUwMzAxBggr\\nBgEFBQcwAoYlaHR0cDovL3d3dy5wYXJhbGxlbHMuY29tL2NhL3BkX2NhLnBlbTA2\\nBgNVHR8ELzAtMCugKaAnhiVodHRwOi8vd3d3LnBhcmFsbGVscy5jb20vY2EvcGRf\\nY2EuY3JsMIIBJgYDVR0gBIIBHTCCARkwga0GDisGAQQBgcw7g30CAgEBMIGaMDkG\\nCCsGAQUFBwIBFi1odHRwOi8vY2EucGFyYWxsZWxzLm5ldC9jYS9wYXJhbGxlbHNf\\nY3BzLmh0bWwwXQYIKwYBBQUHAgIwUTAfGhhQYXJhbGxlbHMgSG9sZGluZ3MsIGx0\\nZC4wAwIBARouRXh0ZXJuYWwgQmFzaWMgQ2VydGlmaWNhdG9uIFByYWN0aWNlIFN0\\nYXRlbWVudDBnBg4rBgEEAYHMO4N9AgJmAzBVMFMGCCsGAQUFBwICMEcwHxoYUGFy\\nYWxsZWxzIEhvbGRpbmdzLCBsdGQuMAMCAQEaJFBhcmFsbGVscyBEZXNrdG9wIENl\\ncnRpZmljYXRlIFBvbGljeTAyBgNVHREEKzApghVkZXNrdG9wLnBhcmFsbGVscy5j\\nb22CEG15LnBhcmFsbGVscy5jb20wDQYJKoZIhvcNAQELBQADggIBAIVoVvxwMJLa\\ntshoaea1bqsnD2FU1r/FoQy1np5ifKQ7fvDr+z8gY0oKDrObRcYTeiRfSGG1TyXW\\nNfY9nlgbLJO7fM5vpqvj5WQJNaUjIzxNcitNn7teG5c5/C0fkiWeDH9t01gLRpvO\\nk5B4zDf8AHbkjrf73whZziuPhbyCyxjvdnVouP5oPwB9MYQLyxQMlVvYl0BC4wBi\\nkkaymqWBIxeKBWDEQyGvVabsOo1Kro6xk5s6SuutME6L97kmQaRGbOvbCZ95niEH\\neKua/1Ngt9U3Y6fPwP6gVaQglZBcPgs5+4a+hd/8gPZ+XbVXsK68j9eUMuhMoFdK\\ncaNejnQt3Cvsnp7ohSoRY3rKdfG0Idy/4HJCiCCOnDDpPXvqQqAo0cwEhbSjI66Y\\nzdtEkCFpWz23rGElQMxIs6ojwK/gu5+sJpE+l7QpXfCIhryqGqRHpdkSDp7Pc1Jr\\nJMpyNhDEI0QjPXkSnMVxMQuHUidARr43O32yt0VD/Zyt6sb2gmInF6XJrlYCDvOz\\npuKPoOE9EMI74XzKw5FsVhVUp8Wem8Ir7eP6GZ7hP21J7C9tPkiYjJqX6jJvvLE6\\nbPETlL48esW55ZmE57SE+F1oqK/hQ5tDJwneEryJZ+8KoiD42SKaf0k29iQfXH1F\\nYScGlH58rXXjAZv+kHNTsJ+zLX//KpzT\\n-----END CERTIFICATE-----\\n-----BEGIN CERTIFICATE-----\\nMIIH9TCCBd2gAwIBAgICEAMwDQYJKoZIhvcNAQELBQAwdDELMAkGA1UEBhMCUlUx\\nDzANBgNVBAcMBk1vd2NvdzEjMCEGA1UECgwaUGFyYWxsZWxzIElQIEhvbGRpbmdz\\nIEdtYkgxDjAMBgNVBAsMBUNsb3VkMR8wHQYDVQQDDBZQYXJhbGVscyBJc3N1aW5n\\nIENBICMxMB4XDTE4MTIyNDA5MDE1MFoXDTMxMDEyMzA5MDE1MFowdDELMAkGA1UE\\nBhMCUlUxDzANBgNVBAcMBk1vc2NvdzEjMCEGA1UECgwaUGFyYWxsZWxzIElQIEhv\\nbGRpbmdzIEdtYkgxEDAOBgNVBAsMB0Rlc2t0b3AxHTAbBgNVBAMMFFBhcmFsbGVs\\ncyBEZXNrdG9wIENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA2r6P\\nz/fE4WESXkudT80kk+dkK/KFM9AqmmHBdx2KRBKXPuOJnQop6dS+ZRRYgyzqvFYl\\nOVy9oZhJ8qtrQH71ornL/ZNIUBMOoQ1Hg9Oqaqwr2b04qWV7RIjW5bG0QBgAYuDX\\nuq5dn1A8uDWoPYdmUrs+oir0kxUugumWSYYzhGOoDxpCSpXqSovYOcyENinD2NFs\\n6T6CJ1MC/yTUyu8oLCMsXimyHfe+pknJ1cSS4i3zQ7tRVdFMvbLdPbOkDaT/ZFyh\\neHOrpBKaeInsNoCoXoOSq9K8CzYq3mEikE/t3PB+8JbCMkf5g+Eup4RjlQeILu/Z\\nqEkGyJtovuRnPha1SUw5Qiz6EyLDaLug6RejPiQZHio10/zovlaN9aF74CGB7Ijj\\nTAMhxN423xKQepFPiPQtnZGke11urD7pyIRJQhQbPJeyHPZLoAY/Zn3Lu03wpqn4\\nuVlEfrvV3pv9gnmme/MUWyegiOxN0xlgBkgjdCo/d74KNjfcD/P4qRa+v50ddlOX\\nhuSAic3LowqizI9+jsU1NSCY/ssMnaFTVCGjtcPq2ZoE6n8NG1dWNEvFJQ1elZDf\\nZUQP/5r5oheEyBnOutJmrMVahCi6ipxv74DPzGqJCX8X7VHr+D2zeEgNrodD3iF/\\nq2yK1qP9/fdOk5CajZVcKextWdYBs9rM+0YF+sECAwEAAaOCAo8wggKLMBIGA1Ud\\nEwEB/wQIMAYBAf8CAQAwDwYDVR0kAQH/BAUwA4ABADAKBgNVHTYEAwIBADAOBgNV\\nHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFALkzfL1GhWDbfCrrwQRxRf52EyPMB8GA1Ud\\nIwQYMBaAFDuTEfsf59F+SCw7mxQ9KqVPg/1KMD8GCCsGAQUFBwEBBDMwMTAvBggr\\nBgEFBQcwAoYjaHR0cDovL2NhLnBhcmFsbGVscy5uZXQvY2Evcm9vdC5wZW0wNwYD\\nVR0fBDAwLjAsoCqgKIYmaHR0cDovL2NhLnBhcmFsbGVscy5uZXQvY2Evcm9vdF9j\\nYS5jcmwwggGMBgNVHSAEggGDMIIBfzCBrQYOKwYBBAGBzDuDfQICAQEwgZowOQYI\\nKwYBBQUHAgEWLWh0dHA6Ly9jYS5wYXJhbGxlbHMubmV0L2NhL3BhcmFsbGVsc19j\\ncHMuaHRtbDBdBggrBgEFBQcCAjBRMB8aGFBhcmFsbGVscyBIb2xkaW5ncywgbHRk\\nLjADAgEBGi5FeHRlcm5hbCBCYXNpYyBDZXJ0aWZpY2F0b24gUHJhY3RpY2UgU3Rh\\ndGVtZW50MGQGDisGAQQBgcw7g30CAgECMFIwUAYIKwYBBQUHAgIwRDAfGhhQYXJh\\nbGxlbHMgSG9sZGluZ3MsIGx0ZC4wAwIBARohRXh0ZXJuYWwgQmFzaWMgQ2VydGlm\\naWNhdGUgUG9saWN5MGcGDisGAQQBgcw7g30CAmYDMFUwUwYIKwYBBQUHAgIwRzAf\\nGhhQYXJhbGxlbHMgSG9sZGluZ3MsIGx0ZC4wAwIBARokUGFyYWxsZWxzIERlc2t0\\nb3AgQ2VydGlmaWNhdGUgUG9saWN5MA0GCSqGSIb3DQEBCwUAA4ICAQApB9JZT+cw\\nKSGZuR5Lje1lgxueMEkq0QrBUgIaijImTo5nwD3jSpHX3iwX11DA0wvDDhS2bPOY\\nCvOn9KFy+iIli0cc1/4kBH/DYsAh+SUdZs/w3G/0JsucQD5AaL3pehsf3dZfR7cq\\n3q8D6ia/SoMrDLpQCJjm798yUevi4ZNJwEHIOH5gNv76eCx+nNJHvnw0yKKfq52M\\nh6aVRBiF73LcvCmNtgeDJxPUAdbVYgv7b0zpgypkph0aWQP90tqPAWnpjHQ2P7/o\\nP+ynKB3dX6ZcA5CJ5o4jXJX/+vS1HQWuTU8ChYBxFB67eCPDtbwtRwLmS4TTLBpX\\ngEWW8jaJCm4sYLMmj/uw3AqrXH3TFZEdaqhXT9s6igBL7V0NrC2rIpqjg9b1ZybY\\nZa/gCfPJ73sIUkFola1Kr50Sjar6aFfQDjYCfZeC6s4VgR6p0bs7jr61zwsPUlCu\\nAZWAiMtpzAq6YJY3njXTZQnlFZ2eAmgxYDaCRgjDnZtHVN8sVsc6vBJh6XaR84t+\\nitDGJfpm0RXOy2bblmleVPBDbGDruOzNJvB+0H6PbMqY1ROy4ZcLKVftQzScYBUQ\\ndDdT+4gPkIu1YhzBQjMNF/kPwUPE8WvVpe5bT+VMj7tIX2wQIJcdNGIvyCQ5aWoq\\neo6QhWmNlc3k/k63MhxRNe55cq64VyskFA==\\n-----END CERTIFICATE-----\\n-----BEGIN CERTIFICATE-----\\nMIIHvTCCBaWgAwIBAgIJAKfE9q7ikq7mMA0GCSqGSIb3DQEBCwUAMIGgMQswCQYD\\nVQQGEwJDSDEVMBMGA1UEBwwMU2NoYWZmaGF1c2VuMSMwIQYDVQQKDBpQQVJBTExF\\nTFMgSVAgSG9sZGluZ3MgR21iSDELMAkGA1UECwwCSVQxIzAhBgNVBAMMGlBhcmFs\\nbGVscyBFeHRlcm5hbCByb290IENBMSMwIQYJKoZIhvcNAQkBFhRhZG1pbnNAcGFy\\nYWxsZWxzLmNvbTAeFw0xNjEwMDcxNDEyMjVaFw0yODExMDYxNDEyMjVaMHQxCzAJ\\nBgNVBAYTAlJVMQ8wDQYDVQQHDAZNb3djb3cxIzAhBgNVBAoMGlBhcmFsbGVscyBJ\\nUCBIb2xkaW5ncyBHbWJIMQ4wDAYDVQQLDAVDbG91ZDEfMB0GA1UEAwwWUGFyYWxl\\nbHMgSXNzdWluZyBDQSAjMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIB\\nALnxIcGsh9ozhUVby8mlCc5XQxKNfW6dGW/SnKbxpqrXfpQ0gNO6WoLI/EOSwk7C\\nZbo/Kc/0abmu26YexiiHEf0FdjS+9ySHqJOgf6kKclC9JC4Dr+FGZISG9G2fkzTn\\nNcsrHk9btii4wDZ9Kjz+398C3ysxK21xjkk+Re1OXl8E+Uhc67jbz0/0Tjd0d7Js\\njVjtKZxQts9SV3KzruwfTyhgkW/4VxmP4RCJqa1TgDLVL98fZjTQBG9cOj3tGRKd\\nZt3EV3QdDXFP08S62CkMOxWn+Fda9BPg6z83ne+TzmREJ4hlafj2kRg+1dKsCNUz\\nZN+nHYVkxNLl9jN/415CdXAPNfWYoibweG0QjI4Ld3/ue0DUEmOY4tu7ofQODnME\\n2ThWrKF8HSnxh8oFNTBm8J5Jh3pTvKw+tJdqbAUi9ykAN7/M+NwxnY5b1wgddHaQ\\nkxaedarnwQfRIFaVvNCRcoZVD9qt6v/jnI8xETxfOjd6WOfg34ZqdyXLX4ttqK0M\\nEgI2HxwRhWAvHl5oR7HS9gCxMY5JvPQ8S+au1XS/xw/L4OJVYTrOVWuvzH50NsrH\\nmcR4N6D5+EYSryuLhL+Nuj/FU37+zbKcZKD1qIHMn3fbfoyspF37KBkbgf8K+1Cq\\nLc2UUsSmZLDnR+jD0T8zEyBTR1a9iCAAy8v50Ok+IJHZAgMBAAGjggIjMIICHzAP\\nBgNVHRMBAf8EBTADAQH/MA8GA1UdJAEB/wQFMAOAAQAwCgYDVR02BAMCAQAwDgYD\\nVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBQ7kxH7H+fRfkgsO5sUPSqlT4P9SjAfBgNV\\nHSMEGDAWgBQ5POcdiTty5/ba6yyF1LYMRqlAETA/BggrBgEFBQcBAQQzMDEwLwYI\\nKwYBBQUHMAKGI2h0dHA6Ly9jYS5wYXJhbGxlbHMubmV0L2NhL3Jvb3QucGVtMDcG\\nA1UdHwQwMC4wLKAqoCiGJmh0dHA6Ly9jYS5wYXJhbGxlbHMubmV0L2NhL3Jvb3Rf\\nY2EuY3JsMIIBIwYDVR0gBIIBGjCCARYwga0GDisGAQQBgcw7g30CAgEBMIGaMDkG\\nCCsGAQUFBwIBFi1odHRwOi8vY2EucGFyYWxsZWxzLm5ldC9jYS9wYXJhbGxlbHNf\\nY3BzLmh0bWwwXQYIKwYBBQUHAgIwUTAfGhhQYXJhbGxlbHMgSG9sZGluZ3MsIGx0\\nZC4wAwIBARouRXh0ZXJuYWwgQmFzaWMgQ2VydGlmaWNhdG9uIFByYWN0aWNlIFN0\\nYXRlbWVudDBkBg4rBgEEAYHMO4N9AgIBAjBSMFAGCCsGAQUFBwICMEQwHxoYUGFy\\nYWxsZWxzIEhvbGRpbmdzLCBsdGQuMAMCAQEaIUV4dGVybmFsIEJhc2ljIENlcnRp\\nZmljYXRlIFBvbGljeTANBgkqhkiG9w0BAQsFAAOCAgEAjCdFbWndzGnuwp8mry/y\\nkOSO15NyUfuhSqZ4iSR6tmyWro8RHar949xzWzuFd+kx91LIH0JAo6j7BZJa9Za/\\nFFD09mWL4w7Jd3cdpIArHS+xaHVvHHxc9Kz+d3yAnxMnOZcncqjPXAxzb2hAP64w\\nwPGYBro6gYdvgTNIs3HZEkabN2eBbFGfuM23CCNICEb1YjZGVv4LRwBwgsSi4ou5\\nVRd7zNJ0oQnSSxl3VdMYbl/A48HS9dAjSkginQjsf7geCqK4uDvVsZfbUt6A3OTy\\nmelK8QAVk3XDAGomCDDZjSOmzlwjGjwuBNXUMp6BpyDv6oTT+okAmQga1gHcrMne\\nUo34yK5f9Io+p2aPLZWT1HHijHHPV6rUedF9RVkunLDGOcMQlOCcXAkWDUakV9yS\\nCcvVhbhAegbZxVGUxiuFYPAhdSJwMc4jwPJ2P6javfCfSL4NffuK9L/iirZgng1C\\n/Kuj6E8EyAO7k1NSMODG5LB1Vg5QMtTcpySPWjY0xus9hbURV9KrddMnIVnmr6Xo\\nA48flx3SYqX/BIkh5ts+G2O0ufRhm2XIrk8U++c+XLwBpPIONob98exYKF0Ikjrt\\nqtIMjNExEQ9RJetkkmY+ZT2bZLroDfGiXIztxQvcuz2Ofh4nL06MOWHSf/AVgWcK\\nCmpWqdGXjywzMTLpNzhpn/M=\\n-----END CERTIFICATE-----\\n-----BEGIN CERTIFICATE-----\\nMIIHzTCCBbWgAwIBAgIJAKG0tvaiMsl+MA0GCSqGSIb3DQEBCwUAMIGgMQswCQYD\\nVQQGEwJDSDEVMBMGA1UEBwwMU2NoYWZmaGF1c2VuMSMwIQYDVQQKDBpQQVJBTExF\\nTFMgSVAgSG9sZGluZ3MgR21iSDELMAkGA1UECwwCSVQxIzAhBgNVBAMMGlBhcmFs\\nbGVscyBFeHRlcm5hbCByb290IENBMSMwIQYJKoZIhvcNAQkBFhRhZG1pbnNAcGFy\\nYWxsZWxzLmNvbTAeFw0xMzA3MTYxNDU0MjRaFw0yODA3MTIxNDU0MjRaMIGgMQsw\\nCQYDVQQGEwJDSDEVMBMGA1UEBwwMU2NoYWZmaGF1c2VuMSMwIQYDVQQKDBpQQVJB\\nTExFTFMgSVAgSG9sZGluZ3MgR21iSDELMAkGA1UECwwCSVQxIzAhBgNVBAMMGlBh\\ncmFsbGVscyBFeHRlcm5hbCByb290IENBMSMwIQYJKoZIhvcNAQkBFhRhZG1pbnNA\\ncGFyYWxsZWxzLmNvbTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANPF\\nTKR2viu0mzKE5sGaMcLI6OzJR0Pj5LqFP3EsmGWUQjoCbNuEGZmzj/py2o3VGq18\\n6UOUFP88YN37IEXUfQXkfM/Y9M7my49D49AbDbbbEJDsrbx5YM+jWbOnY3AfuWuP\\nftxb8nDIvUo30BNwI88OUGct2yptMYgz5yNxxbrjddKqVI0p1ic+M3HzTJiuuqeH\\nfUS9+3YsMkJCFQ4+s9Lzl7t/I6zldwCqUicVjYK0zDx3b74iZMP0KDZCp4mbvd7d\\n92qRZKR0xS0AiJdk8474ix63vOZsxv4JmunUqf1+sGseZggFY1PqjfiTn98qOmHl\\ndXdJmjGL4aOW/5mvfQiIKt+8YbrE0BZtthsPGL1dl0BUr8FFjzs16GxM6U17qy2L\\nw1SQtZam/cP8ac1wLDnK+yZaOAFr81XYaBrq5tezC1bC2hK5eYfMc6Ml7uHkG/L+\\nQl4TVakUhLsayATqvG8vfui7iO5iB6h+k573EPlnP1BfaEsyD1zGfh6yLD1tz7an\\nd53mxEAyDcbCzzNksEVSb/gjWjQknRezz3AnSWSCRA5CuN9hV1Dc46hK1IuNE0AC\\nxEM6tjT76YFuQxNuX/CtTFnMIDYbGBpNlxIifJ8o9jqSLUdFdy4NKUEllXx7qNhD\\nKFnK2KpU6LcLinKnxBQX0PjDbg9t9RBXwIe5z+p/AgMBAAGjggIGMIICAjAPBgNV\\nHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUOTznHYk7cuf2\\n2usshdS2DEapQBEwHwYDVR0jBBgwFoAUOTznHYk7cuf22usshdS2DEapQBEwPwYI\\nKwYBBQUHAQEEMzAxMC8GCCsGAQUFBzAChiNodHRwOi8vY2EucGFyYWxsZWxzLm5l\\ndC9jYS9yb290LnBlbTA3BgNVHR8EMDAuMCygKqAohiZodHRwOi8vY2EucGFyYWxs\\nZWxzLm5ldC9jYS9yb290X2NhLmNybDCCASMGA1UdIASCARowggEWMIGtBg4rBgEE\\nAYHMO4N9AgIBATCBmjA5BggrBgEFBQcCARYtaHR0cDovL2NhLnBhcmFsbGVscy5u\\nZXQvY2EvcGFyYWxsZWxzX2Nwcy5odG1sMF0GCCsGAQUFBwICMFEwHxoYUGFyYWxs\\nZWxzIEhvbGRpbmdzLCBsdGQuMAMCAQEaLkV4dGVybmFsIEJhc2ljIENlcnRpZmlj\\nYXRvbiBQcmFjdGljZSBTdGF0ZW1lbnQwZAYOKwYBBAGBzDuDfQICAQIwUjBQBggr\\nBgEFBQcCAjBEMB8aGFBhcmFsbGVscyBIb2xkaW5ncywgbHRkLjADAgEBGiFFeHRl\\ncm5hbCBCYXNpYyBDZXJ0aWZpY2F0ZSBQb2xpY3kwDQYJKoZIhvcNAQELBQADggIB\\nAE+ZNsc49RJ6ZtnPDQ5R9nWKVoQQHpJZorwoUGy+CUSfL8ux35whmbdiGQJ27Mm9\\nZJVrfDHKtmP7gGcV7V+MWVPenRaDp0vld6k5iW4Zjz9IRnUQ4u40vnUj55usmK4V\\ncvcBfD/BhD57QjQbt1gHY4RDLqMlNZtSsxMYmav/WKIf7q6HjTmMtZKB+/NwVt90\\n4ztMGDAb9lEjG3Dq4klSzVfGM6FLbMx/Q6wyh+vV8Oh3QP/2A5/8IRC4spUpRMbW\\nwDdwsqflCbrDpoMOx7pnVA+Al9XeJYUdrL1Gv6RaZSM0l+YBVFMAI7B4SQKwjcB7\\nLuWQGN7WJTHcbUmiMndix4gwRpBtdba7D5wKLxceAzXhOrAL7lA1qPeNh8NB1ICT\\nr88O87uLcIJpoje6Ngyuh8ddHf/pSkq/kBYlP6SAvg7xusbSDdqwhQacZYx/GMsG\\nJcbx5xAnmbmt78SCe2vsEoOEms+b2WCMbsIkbBVt1B/r39draPK7/m8JJYpQPwWy\\naN/G4gOBHwKbtAn+9xXZroNqljASWNYsxeLOZX+kkG1tw2zTwTXDOT1tOaKOxMPO\\niq4H4GIJc6ZY1Z1Z/QulnIw0W1U8reWMeujaXGwhyqZhC+Ozcn9fULT+TYHQUCro\\nRKx+w+VMIXpIWvWB+jx8b95nGqwu6+lt3Z3yAtYaUbLd\\n-----END CERTIFICATE-----\\n\",\n \"signature\": \"\"\n}"; + 0xFA, 0xF8, 0xA1, 0x86, 0xF8, 0xB4, 0xBB, 0xB7, 0xBF, 0x86, 0xF8, 0xE0, 0xFA, 0xB4, 0xAF, 0xB6, + 0xB6, 0xF6, 0xFA, 0x86, 0xF8, 0xAF, 0xAF, 0xB3, 0xBE, 0x86, 0xF8, 0xE0, 0xFA, 0x86, 0xF8, 0x86, + 0xF8, 0xF6, 0xFA, 0x86, 0xF8, 0xB6, 0xB3, 0xB9, 0x85, 0xB1, 0xBF, 0xA3, 0x86, 0xF8, 0xE0, 0xFA, + 0x86, 0xF8, 0x86, 0xF8, 0xF6, 0xFA, 0x86, 0xF8, 0xAA, 0xA8, 0xB5, 0xBE, 0xAF, 0xB9, 0xAE, 0x85, + 0xAC, 0xBF, 0xA8, 0xA9, 0xB3, 0xB5, 0xB4, 0x86, 0xF8, 0xE0, 0xFA, 0x86, 0xF8, 0xEB, 0xE2, 0xF4, + 0xF0, 0x86, 0xF8, 0xF6, 0xFA, 0x86, 0xF8, 0xB3, 0xA9, 0x85, 0xAF, 0xAA, 0xBD, 0xA8, 0xBB, 0xBE, + 0xBF, 0x86, 0xF8, 0xE0, 0xFA, 0xBC, 0xBB, 0xB6, 0xA9, 0xBF, 0xF6, 0xFA, 0x86, 0xF8, 0xB3, 0xA9, + 0x85, 0xA9, 0xAF, 0xB8, 0xB6, 0xB3, 0xB9, 0xBF, 0xB4, 0xA9, 0xBF, 0x86, 0xF8, 0xE0, 0xFA, 0xBC, + 0xBB, 0xB6, 0xA9, 0xBF, 0xF6, 0xFA, 0x86, 0xF8, 0xAA, 0xBB, 0xA8, 0xBF, 0xB4, 0xAE, 0x85, 0xB1, + 0xBF, 0xA3, 0x86, 0xF8, 0xE0, 0xFA, 0xB4, 0xAF, 0xB6, 0xB6, 0xF6, 0xFA, 0x86, 0xF8, 0xAA, 0xBB, + 0xA8, 0xBF, 0xB4, 0xAE, 0x85, 0xAF, 0xAF, 0xB3, 0xBE, 0x86, 0xF8, 0xE0, 0xFA, 0xB4, 0xAF, 0xB6, + 0xB6, 0xF6, 0xFA, 0x86, 0xF8, 0xB7, 0xBB, 0xB3, 0xB4, 0x85, 0xAA, 0xBF, 0xA8, 0xB3, 0xB5, 0xBE, + 0x85, 0xBF, 0xB4, 0xBE, 0xA9, 0x85, 0xBB, 0xAE, 0x86, 0xF8, 0xE0, 0xFA, 0x86, 0xF8, 0xE8, 0xEA, + 0xE3, 0xE3, 0xF7, 0xEA, 0xE3, 0xF7, 0xEA, 0xE3, 0xFA, 0xEA, 0xEA, 0xE0, 0xEA, 0xEA, 0xE0, 0xEA, + 0xEA, 0x86, 0xF8, 0xF6, 0xFA, 0x86, 0xF8, 0xBD, 0xA8, 0xBB, 0xB9, 0xBF, 0x85, 0xAA, 0xBF, 0xA8, + 0xB3, 0xB5, 0xBE, 0x85, 0xBF, 0xB4, 0xBE, 0xA9, 0x85, 0xBB, 0xAE, 0x86, 0xF8, 0xE0, 0xFA, 0x86, + 0xF8, 0xE8, 0xEA, 0xE3, 0xE3, 0xF7, 0xEA, 0xE3, 0xF7, 0xEA, 0xE3, 0xFA, 0xEA, 0xEA, 0xE0, 0xEA, + 0xEA, 0xE0, 0xEA, 0xEA, 0x86, 0xF8, 0xF6, 0xFA, 0x86, 0xF8, 0xB3, 0xA9, 0x85, 0xBB, 0xAF, 0xAE, + 0xB5, 0x85, 0xA8, 0xBF, 0xB4, 0xBF, 0xAD, 0xBB, 0xB8, 0xB6, 0xBF, 0x86, 0xF8, 0xE0, 0xFA, 0xBC, + 0xBB, 0xB6, 0xA9, 0xBF, 0xF6, 0xFA, 0x86, 0xF8, 0xB3, 0xA9, 0x85, 0xB4, 0xBC, 0xA8, 0x86, 0xF8, + 0xE0, 0xFA, 0xBC, 0xBB, 0xB6, 0xA9, 0xBF, 0xF6, 0xFA, 0x86, 0xF8, 0xB3, 0xA9, 0x85, 0xB8, 0xBF, + 0xAE, 0xBB, 0x86, 0xF8, 0xE0, 0xFA, 0xBC, 0xBB, 0xB6, 0xA9, 0xBF, 0xF6, 0xFA, 0x86, 0xF8, 0xB3, + 0xA9, 0x85, 0xB9, 0xB2, 0xB3, 0xB4, 0xBB, 0x86, 0xF8, 0xE0, 0xFA, 0xBC, 0xBB, 0xB6, 0xA9, 0xBF, + 0xF6, 0xFA, 0x86, 0xF8, 0xB3, 0xA9, 0x85, 0xA9, 0xAF, 0xA9, 0xAA, 0xBF, 0xB4, 0xBE, 0xBF, 0xBE, + 0x86, 0xF8, 0xE0, 0xFA, 0xBC, 0xBB, 0xB6, 0xA9, 0xBF, 0xF6, 0xFA, 0x86, 0xF8, 0xB3, 0xA9, 0x85, + 0xBF, 0xA2, 0xAA, 0xB3, 0xA8, 0xBF, 0xBE, 0x86, 0xF8, 0xE0, 0xFA, 0xBC, 0xBB, 0xB6, 0xA9, 0xBF, + 0xF6, 0xFA, 0x86, 0xF8, 0xB3, 0xA9, 0x85, 0xBD, 0xA8, 0xBB, 0xB9, 0xBF, 0x85, 0xAA, 0xBF, 0xA8, + 0xB3, 0xB5, 0xBE, 0x86, 0xF8, 0xE0, 0xFA, 0xBC, 0xBB, 0xB6, 0xA9, 0xBF, 0xF6, 0xFA, 0x86, 0xF8, + 0xB3, 0xA9, 0x85, 0xAA, 0xAF, 0xA8, 0xB9, 0xB2, 0xBB, 0xA9, 0xBF, 0xBE, 0x85, 0xB5, 0xB4, 0xB6, + 0xB3, 0xB4, 0xBF, 0x86, 0xF8, 0xE0, 0xFA, 0xBC, 0xBB, 0xB6, 0xA9, 0xBF, 0xF6, 0xFA, 0x86, 0xF8, + 0xB6, 0xB3, 0xB7, 0xB3, 0xAE, 0x86, 0xF8, 0xE0, 0xFA, 0xEB, 0xEA, 0xF6, 0xFA, 0x86, 0xF8, 0xAF, + 0xA9, 0xBB, 0xBD, 0xBF, 0x86, 0xF8, 0xE0, 0xFA, 0xEB, 0xF6, 0xFA, 0x86, 0xF8, 0xBF, 0xBE, 0xB3, + 0xAE, 0xB3, 0xB5, 0xB4, 0x86, 0xF8, 0xE0, 0xFA, 0xE8, 0xF6, 0xFA, 0x86, 0xF8, 0xAA, 0xB6, 0xBB, + 0xAE, 0xBC, 0xB5, 0xA8, 0xB7, 0x86, 0xF8, 0xE0, 0xFA, 0xE9, 0xF6, 0xFA, 0x86, 0xF8, 0xAA, 0xA8, + 0xB5, 0xBE, 0xAF, 0xB9, 0xAE, 0x86, 0xF8, 0xE0, 0xFA, 0xED, 0xF6, 0xFA, 0x86, 0xF8, 0xB5, 0xBC, + 0xBC, 0xB6, 0xB3, 0xB4, 0xBF, 0x86, 0xF8, 0xE0, 0xFA, 0xAE, 0xA8, 0xAF, 0xBF, 0xF6, 0xFA, 0x86, + 0xF8, 0xB9, 0xAA, 0xAF, 0x85, 0xB6, 0xB3, 0xB7, 0xB3, 0xAE, 0x86, 0xF8, 0xE0, 0xFA, 0xE9, 0xE8, + 0xF6, 0xFA, 0x86, 0xF8, 0xA8, 0xBB, 0xB7, 0x85, 0xB6, 0xB3, 0xB7, 0xB3, 0xAE, 0x86, 0xF8, 0xE0, + 0xFA, 0xEB, 0xE9, 0xEB, 0xEA, 0xED, 0xE8, 0xF6, 0xFA, 0x86, 0xF8, 0xB2, 0xB5, 0xA9, 0xAE, 0xA9, + 0x86, 0xF8, 0xE0, 0xFA, 0x81, 0xA1, 0x86, 0xF8, 0xB4, 0xBB, 0xB7, 0xBF, 0x86, 0xF8, 0xE0, 0xFA, + 0x86, 0xF8, 0x9D, 0x9E, 0x8A, 0x88, 0x85, 0x92, 0x93, 0x9E, 0x9E, 0x9F, 0x94, 0x86, 0xF8, 0xF6, + 0xFA, 0x86, 0xF8, 0xB2, 0xAD, 0x85, 0xB3, 0xBE, 0x86, 0xF8, 0xE0, 0xFA, 0x86, 0xF8, 0x86, 0xF8, + 0xF6, 0xFA, 0x86, 0xF8, 0xAA, 0xA8, 0xB5, 0xBE, 0xAF, 0xB9, 0xAE, 0x85, 0xAC, 0xBF, 0xA8, 0xA9, + 0xB3, 0xB5, 0xB4, 0x86, 0xF8, 0xE0, 0xFA, 0x86, 0xF8, 0x86, 0xF8, 0xF6, 0xFA, 0x86, 0xF8, 0xBB, + 0xB9, 0xAE, 0xB3, 0xAC, 0xBB, 0xAE, 0xBF, 0xBE, 0x85, 0xBB, 0xAE, 0x86, 0xF8, 0xE0, 0xFA, 0x86, + 0xF8, 0xE8, 0xEA, 0xE8, 0xEB, 0xF7, 0xEA, 0xEF, 0xF7, 0xEA, 0xE3, 0xFA, 0xEA, 0xEA, 0xE0, 0xEA, + 0xEA, 0xE0, 0xEA, 0xEA, 0x86, 0xF8, 0xA7, 0x87, 0xF6, 0xFA, 0x86, 0xF8, 0xB3, 0xA9, 0x85, 0xAE, + 0xA8, 0xB3, 0xBB, 0xB6, 0x86, 0xF8, 0xE0, 0xFA, 0xBC, 0xBB, 0xB6, 0xA9, 0xBF, 0xA7, 0xF8, 0xF6, + 0xD0, 0xFA, 0xFA, 0xFA, 0xFA, 0xF8, 0xAA, 0xAF, 0xB8, 0xB6, 0xB3, 0xB9, 0x99, 0xBF, 0xA8, 0xAE, + 0xA9, 0xF8, 0xE0, 0xFA, 0xF8, 0xF8, 0xF6, 0xD0, 0xFA, 0xFA, 0xFA, 0xFA, 0xF8, 0xA9, 0xB3, 0xBD, + 0xB4, 0xBB, 0xAE, 0xAF, 0xA8, 0xBF, 0xF8, 0xE0, 0xFA, 0xF8, 0xF8, 0xD0, 0xA7 +}; + + // const char* fake_license_data = "{\n "license": "{\\"name\\": null, \\"uuid\\": \\"\\", \\"lic_key\\": \\"\\", \\"product_version\\": \\"18.*\\", \\"is_upgrade\\": false, \\"is_sublicense\\": false, \\"parent_key\\": null, \\"parent_uuid\\": null, \\"main_period_ends_at\\": \\"2099-09-09 00:00:00\\", \\"grace_period_ends_at\\": \\"2099-09-09 00:00:00\\", \\"is_auto_renewable\\": false, \\"is_nfr\\": false, \\"is_beta\\": false, \\"is_china\\": false, \\"is_suspended\\": false, \\"is_expired\\": false, \\"is_grace_period\\": false, \\"is_purchased_online\\": false, \\"limit\\": 10, \\"usage\\": 1, \\"edition\\": 2, \\"platform\\": 3, \\"product\\": 7, \\"offline\\": true, \\"cpu_limit\\": 32, \\"ram_limit\\": 131072, \\"hosts\\": [{\\"name\\": \\"GDPR_HIDDEN\\", \\"hw_id\\": \\"\\", \\"product_version\\": \\"\\", \\"activated_at\\": \\"2021-05-09 00:00:00\\"}], \\"is_trial\\": false}",\n "publicCerts": "",\n "signature": ""\n}"; auto file = fopen(xorstr_("/Library/Preferences/Parallels/licenses.json"), xorstr_("wb")); if (file) @@ -1352,266 +141,6 @@ void func_write_fake_license() void func_patch_prl_disp_service() { func_write_fake_license(); - - auto image_base = (char*)_dyld_get_image_header(0); - if (image_base) - { - #ifdef TARGET_ARCH_X64 - { - // license verify - { - // __const:0000000100976548 ; `vtable for'DspLic::SignCheckerImpl - // __const:0000000100976548 _ZTVN6DspLic15SignCheckerImplE dq 0 ; DATA XREF: sub_10033E970+31↑o - // __const:0000000100976548 ; offset to this - // __const:0000000100976550 dq offset _ZTIN6DspLic15SignCheckerImplE ; `typeinfo for'DspLic::SignCheckerImpl - // __const:0000000100976558 dq offset sub_10058F8F0 - // __const:0000000100976560 dq offset sub_10058F900 - // __const:0000000100976568 dq offset sub_10058F570 ; <--- patch sign verify - - // __text:000000010058F570 55 push rbp ; <---- patch - // __text:000000010058F571 48 89 E5 mov rbp, rsp - // __text:000000010058F574 41 57 push r15 - // __text:000000010058F576 41 56 push r14 - // __text:000000010058F578 41 54 push r12 - // __text:000000010058F57A 53 push rbx - // __text:000000010058F57B 48 81 EC A0 00 00 00 sub rsp, 0A0h ; <---- find - // __text:000000010058F582 49 89 CE mov r14, rcx - // __text:000000010058F585 49 89 D7 mov r15, rdx - // __text:000000010058F588 49 89 F4 mov r12, rsi - // __text:000000010058F58B BF D0 0A 00 00 mov edi, 0AD0h ; unsigned __int64 - // __text:000000010058F590 E8 BD FB 22 00 call __Znwm ; operator new(ulong) - // __text:000000010058F595 48 89 C3 mov rbx, rax - // __text:000000010058F598 48 89 45 A0 mov [rbp+var_60], rax - // __text:000000010058F59C 0F 28 05 DD 17 37 00 movaps xmm0, cs:xmmword_100900D80 - // __text:000000010058F5A3 0F 29 45 90 movaps [rbp+var_70], xmm0 - // __text:000000010058F5A7 48 8D 35 96 83 30 00 lea rsi, aBeginCertifica ; "-----BEGIN CERTIFICATE-----\nMIIHzTCCBb"... - // __text:000000010058F5AE BA CC 0A 00 00 mov edx, 0ACCh ; __n - // __text:000000010058F5B3 48 89 C7 mov rdi, rax ; __dst - // __text:000000010058F5B6 E8 17 00 23 00 call _memcpy - - { - uint8_t replace[] = OPCODE_RETURN_1; - if (func_patch_data(image_base + 0x58F570, replace, sizeof(replace))) - { - dlog("[+] patch prl_disp_service 1 success."); - } - else - { - dlog("[-] patch prl_disp_service 1 fail."); - } - } - } - // scheduleToSendReport - { - // __text:000000010029D4E8 0F 8C E5 04 00 00 jl loc_10029D9D3 - // __text:000000010029D4EE 48 8D 35 F5 97 5B 00 lea rsi, aObjcGetclass ; "objc_getClass" - // __text:000000010029D4F5 48 C7 C7 FE FF FF FF mov rdi, 0FFFFFFFFFFFFFFFEh ; __handle - // __text:000000010029D4FC E8 37 1E 52 00 call _dlsym - // __text:000000010029D501 48 8D 3D F0 97 5B 00 lea rdi, asc_100856CF8 ; "�" - // __text:000000010029D508 FF D0 call rax - // __text:000000010029D50A 49 89 C7 mov r15, rax - // __text:000000010029D50D 48 85 C0 test rax, rax - // __text:000000010029D510 4C 89 B5 E0 FC FF FF mov [rbp+var_320], r14 - - // __text:000000010029D517 0F 84 19 02 00 00 jz loc_10029D736 ; <---- patch jmp loc_10029D736 - - // __text:000000010029D517 90 nop - // __text:000000010029D518 E9 19 02 00 00 jmp loc_10029D736 - - // __text:000000010029D51D 48 8B 05 44 6B 6B 00 mov rax, cs:__ZN10QArrayData11shared_nullE_ptr - // __text:000000010029D524 48 89 85 00 FD FF FF mov [rbp+var_300], rax - // __text:000000010029D52B 48 8D 3D DE 94 5F 00 lea rdi, stru_100896A10 ; this - // __text:000000010029D532 31 F6 xor esi, esi ; char * - // __text:000000010029D534 E8 49 FE 51 00 call __ZN7QString16fromAscii_helperEPKci ; QString::fromAscii_helper(char const*,int) - // __text:000000010029D539 48 89 85 08 FD FF FF mov [rbp+var_2F8], rax - // __text:000000010029D540 48 8D 85 08 FD FF FF lea rax, [rbp+var_2F8] - // __text:000000010029D547 48 89 04 24 mov [rsp+330h+var_330], rax - // __text:000000010029D54B C7 44 24 08 00 00 00 00 mov [rsp+330h+var_328], 0 - // __text:000000010029D553 48 8D BD 38 FD FF FF lea rdi, [rbp+var_2C8] - // __text:000000010029D55A 48 8D 95 00 FD FF FF lea rdx, [rbp+var_300] - // __text:000000010029D561 BE 97 88 01 00 mov esi, 18897h - // __text:000000010029D566 B9 01 00 00 00 mov ecx, 1 - // __text:000000010029D56B 41 B8 79 10 01 80 mov r8d, 80011079h ; <---- find - // __text:000000010029D571 45 31 C9 xor r9d, r9d - // __text:000000010029D574 E8 7D FF 51 00 call __ZN8CVmEventC1E15_PRL_EVENT_TYPE7QString22_PRL_EVENT_ISSUER_TYPEiN3PVE17VmEventRespOptionES1_NS3_12VmEventLevelE ; CVmEvent::CVmEvent(_PRL_EVENT_TYPE,QString,_PRL_EVENT_ISSUER_TYPE,int,PVE::VmEventRespOption,QString,PVE::VmEventLevel) - // __text:000000010029D579 48 8B BD 08 FD FF FF mov rdi, [rbp+var_2F8] - // __text:000000010029D580 8B 07 mov eax, [rdi] - // __text:000000010029D582 83 F8 FF cmp eax, 0FFFFFFFFh - // __text:000000010029D585 74 1F jz short loc_10029D5A6 - // __text:000000010029D587 85 C0 test eax, eax - - uint8_t replace[] = { 0x90, 0xE9 }; - if (func_patch_data(image_base + 0x29D517, replace, sizeof(replace))) - { - dlog("[+] patch prl_disp_service 2 success."); - } - else - { - dlog("[-] patch prl_disp_service 2 fail."); - } - } - // /usr/bin/codesign - { - uint8_t replace[] = OPCODE_RETURN_1; - if (func_patch_data(image_base + 0x7a2d50, replace, sizeof(replace))) - { - dlog("[+] patch prl_disp_service 3 success."); - } - else - { - dlog("[-] patch prl_disp_service 3 fail."); - } - } - } - #endif - #ifdef TARGET_ARCH_ARM64 - { - // license verify - { - // __text:00000001005CF6C4 FF 03 03 D1 SUB SP, SP, #0xC0 - // __text:00000001005CF6C8 F6 57 09 A9 STP X22, X21, [SP,#0xB0+var_20] - // __text:00000001005CF6CC F4 4F 0A A9 STP X20, X19, [SP,#0xB0+var_10] - // __text:00000001005CF6D0 FD 7B 0B A9 STP X29, X30, [SP,#0xB0+var_s0] - // __text:00000001005CF6D4 FD C3 02 91 ADD X29, SP, #0xB0 - // __text:00000001005CF6D8 F3 03 03 AA MOV X19, X3 - // __text:00000001005CF6DC F4 03 02 AA MOV X20, X2 - // __text:00000001005CF6E0 F5 03 01 AA MOV X21, X1 - // __text:00000001005CF6E4 00 5A 81 52 MOV W0, #0xAD0 ; unsigned __int64 - // __text:00000001005CF6E8 68 C4 07 94 BL __Znwm ; operator new(ulong) - // __text:00000001005CF6EC F6 03 00 AA MOV X22, X0 - // __text:00000001005CF6F0 E0 2B 00 F9 STR X0, [SP,#0xB0+var_60] - // __text:00000001005CF6F4 C8 10 00 90 ADRP X8, #xmmword_1007E7760@PAGE - // __text:00000001005CF6F8 00 D9 C1 3D LDR Q0, [X8,#xmmword_1007E7760@PAGEOFF] - // __text:00000001005CF6FC E0 83 85 3C STUR Q0, [SP,#0xB0+var_58] - // __text:00000001005CF700 41 18 00 F0 21 58 03 91 ADRL X1, aBeginCertifica ; "-----BEGIN CERTIFICATE-----\nMIIHzTCCBb"... - // __text:00000001005CF708 82 59 81 52 MOV W2, #0xACC ; __n - // __text:00000001005CF70C 9C C6 07 94 BL _memcpy - uint8_t replace[] = OPCODE_RETURN_1; - if (func_patch_data(image_base + 0x5CF6C4, replace, sizeof(replace))) - // if (func_hook_func(image_base + 0x5CF6C4, (void *)func_return_1, nullptr)) - { - dlog("[+] patch prl_disp_service 1 success."); - } - else - { - dlog("[-] patch prl_disp_service 1 fail."); - } - } - // scheduleToSendReport - { - // __text:00000001002BF0B8 C0 2E 00 D0 00 D0 15 91 ADRL X0, asc_100899574 ; "�" - // __text:00000001002BF0C0 00 01 3F D6 BLR X8 - // __text:00000001002BF0C4 F4 03 00 AA MOV X20, X0 - // __text:00000001002BF0C8 60 0F 00 B4 CBZ X0, loc_1002BF2B4 ; <--- patch jmp - // __text:00000001002BF0CC F8 13 00 F9 STR X24, [SP,#0x330+var_310] - // __text:00000001002BF0D0 E0 2D 00 F0 00 80 3A 91 ADRL X0, asc_10087EEA0 ; "" - // __text:00000001002BF0D8 01 00 80 52 MOV W1, #0 ; char * - - uint8_t replace[] = { 0x7B, 0x00, 0x00, 0x14 }; - if (func_patch_data(image_base + 0x2BF0C8, replace, sizeof(replace))) - { - dlog("[+] patch prl_disp_service 2 success."); - } - else - { - dlog("[-] patch prl_disp_service 2 fail."); - } - } - // /usr/bin/codesign - { - uint8_t replace[] = OPCODE_RETURN_1; - if (func_patch_data(image_base + 0x7a3c14, replace, sizeof(replace))) - { - dlog("[+] patch prl_disp_service 3 success."); - } - else - { - dlog("[-] patch prl_disp_service 3 fail."); - } - } - } - #endif - } - -} - -void func_patch_prl_client_app() -{ - if (!func_check_version(xorstr_("51567"))) - { - dlog("[-] unsupport version."); - exit(0); - } - - auto image_base = (char*)_dyld_get_image_header(0); - if (image_base) - { - #ifdef TARGET_ARCH_X64 - { - { - // __text:000000010027A286 83 CB 01 or ebx, 1 - // __text:000000010027A289 81 FB 07 00 00 30 cmp ebx, 30000007h ; <--- find - // __text:000000010027A28F 0F 85 E3 08 00 00 jnz loc_10027AB78 ; <--- patch - // __text:000000010027A295 41 81 FE 04 00 00 30 cmp r14d, 30000004h - // __text:000000010027A29C 0F 85 D6 08 00 00 jnz loc_10027AB78 - - uint8_t replace[] = { 0x90, 0xE9 }; - if (func_patch_data(image_base + 0x27a28f, replace, sizeof(replace))) - { - dlog("[+] patch prl_client_app 1 success."); - } - else - { - dlog("[-] patch prl_client_app 1 fail."); - } - } - // /usr/bin/codesign - { - uint8_t replace[] = OPCODE_RETURN_1; - if (func_patch_data(image_base + 0x915dd0, replace, sizeof(replace))) - { - dlog("[+] patch prl_client_app 2 success."); - } - else - { - dlog("[-] patch prl_client_app 2 fail."); - } - } - } - #endif - #ifdef TARGET_ARCH_ARM64 - { - { - // __text:000000010029BDC0 97 00 80 52 17 00 A6 72 MOV W23, #0x30000004 ; <--- find - // __text:000000010029BDC8 A8 02 00 32 ORR W8, W21, #1 - // __text:000000010029BDCC E9 06 00 32 ORR W9, W23, #3 - // __text:000000010029BDD0 1F 01 09 6B CMP W8, W9 - // __text:000000010029BDD4 41 40 00 54 B.NE loc_10029C5DC ; <--- patch - uint8_t replace[] = { 0x02, 0x02, 0x00, 0x14 }; - if (func_patch_data(image_base + 0x29bdd4, replace, sizeof(replace))) - { - dlog("[+] patch prl_client_app 1 success."); - } - else - { - dlog("[-] patch prl_client_app 1 fail."); - } - } - // /usr/bin/codesign - { - uint8_t replace[] = OPCODE_RETURN_1; - if (func_patch_data(image_base + 0x95b59c, replace, sizeof(replace))) - { - dlog("[+] patch prl_client_app 2 success."); - } - else - { - dlog("[-] patch prl_client_app 2 fail."); - } - } - } - #endif - } } void func_hook_applicationDidBecomeActive(id, SEL) @@ -1796,33 +325,12 @@ void func_load() const char *moduleName = _dyld_get_image_name(0); dlog("[*] load %s", moduleName); - if (str_ends_with(moduleName, xorstr_("prl_client_app"))) - { - dlog("patch prl_client_app start"); - func_patch_prl_client_app(); - dlog("patch prl_client_app over"); - } - else if (str_ends_with(moduleName, xorstr_("prl_disp_service"))) + if (str_ends_with(moduleName, xorstr_("prl_disp_service"))) { dlog("patch prl_disp_service start"); func_patch_prl_disp_service(); dlog("patch prl_disp_service over"); } - else if (str_ends_with(moduleName, xorstr_("prl_vm_app"))) - { - dlog("patch prl_vm_app start"); - func_patch_prl_vm_app(); - dlog("patch prl_vm_app over"); - } - else if (str_ends_with(moduleName, xorstr_("Parallels Toolbox"))) - { - dlog("patch Parallels Toolbox start"); - func_patch_Parallels_Toolbox(); - dlog("patch Parallels Toolbox over"); - } - func_patch_dylibs(); func_hook_menu(); } - -#endif \ No newline at end of file