diff --git a/BDK32/BrokerProgPref.exe b/BDK32/BrokerProgPref.exe deleted file mode 100644 index 0e15161..0000000 Binary files a/BDK32/BrokerProgPref.exe and /dev/null differ diff --git a/BDK32/Brokerprogpref.GID b/BDK32/Brokerprogpref.GID deleted file mode 100644 index 412a94e..0000000 Binary files a/BDK32/Brokerprogpref.GID and /dev/null differ diff --git a/BDK32/Brokerprogpref.hlp b/BDK32/Brokerprogpref.hlp deleted file mode 100644 index fe5daf9..0000000 Binary files a/BDK32/Brokerprogpref.hlp and /dev/null differ diff --git a/BDK32/Help/Broker.hlp b/BDK32/Help/Broker.hlp deleted file mode 100644 index 7ee535a..0000000 Binary files a/BDK32/Help/Broker.hlp and /dev/null differ diff --git a/BDK32/Help/broker.GID b/BDK32/Help/broker.GID deleted file mode 100644 index 501b8fa..0000000 Binary files a/BDK32/Help/broker.GID and /dev/null differ diff --git a/BDK32/Help/broker.als b/BDK32/Help/broker.als deleted file mode 100644 index da0db25..0000000 --- a/BDK32/Help/broker.als +++ /dev/null @@ -1,126 +0,0 @@ -about_this_version -application_level_issues -blocking_an_rpc -broker_overview -brokerexample -buffer_clearing -checking_rpc_availability_on_a_remote_server -debug -debug_overview -developer_considerations -dll_c_connect -dll_c_create -dll_c_destroy -dll_c_execute -dll_c_init -dll_c_intro -dll_cpp_connect -dll_cpp_create -dll_cpp_destroy -dll_cpp_execute -dll_cpp_init -dll_cpp_intro -dll_cpp_methods -dll_function_rpcbcall -dll_function_rpcbcreate -dll_function_rpcbcreatecontext -dll_function_rpcbfree -dll_function_rpcbmultitemget -dll_function_rpcbmultpropget -dll_function_rpcbmultset -dll_function_rpcbmultsortedset -dll_function_rpcbparamget -dll_function_rpcbparamset -dll_function_rpcbpropget -dll_function_rpcbpropset -dll_getserverinfo -dll_intro -dll_results -dll_vb_connect -dll_vb_create -dll_vb_destroy -dll_vb_execute -dll_vb_init -dll_vb_intro -ebrokererror -error_handling -hash_unit -id_handler -id_listener -idh_brokprogpref -ig_helpfile -introduction -loginfrm_unit -memory_leaks -mfunstr_unit -options_for_running_rpcs_on_a_remote_server -orientation -otherapi_broker -otherapi_encrypt -otherapi_getserverinfo -otherapi_getvarvalue -otherapi_m_emulation -otherapi_overview -otherapi_rtrnfmt -otherapi_splash -overview_of_deferred_rpcs -rpc_cleanup -rpc_create -rpc_document -rpc_entry_point_examples -rpc_execute_from_client -rpc_file_entry -rpc_first_input_param -rpc_good -rpc_input_parameter_types -rpc_limits -rpc_overview -rpc_register -rpc_return_value_types -rpc_routine_relationship -rpc_version_in_remote_procedure_file -rpcconf1_unit -rpcslogin_unit -silent_login -splvista_unit -tccowrpcbroker_component -testing_connection -tmult_class -tparamrecord_class -tparams_class -trpcb_unit -trpcbroker_component -tsharedrpcbroker_component -tut_fmdc -tut_intro -tut_pascal -tut_prep -tut_register -tut_step1 -tut_step10 -tut_step2 -tut_step3 -tut_step4 -tut_step5 -tut_step6 -tut_step7 -tut_step8 -tut_step9 -tvcedit_unit -tvistalogin_class -tvistauser_class -txwbrichedit_component -using_an_existing_m_api -whats_new_in_the_bdk -xwb_are_rpcs_available -xwb_deferred_clear -xwb_deferred_clearall -xwb_deferred_getdata -xwb_deferred_rpc -xwb_deferred_status -xwb_direct_rpc -xwb_is_rpc_available -xwb_remote_clear -xwb_remote_getdata -xwb_remote_rpc -xwb_remote_status_check diff --git a/BDK32/Help/broker.cnt b/BDK32/Help/broker.cnt deleted file mode 100644 index 328654a..0000000 --- a/BDK32/Help/broker.cnt +++ /dev/null @@ -1,157 +0,0 @@ -:Base broker.hlp>main -:Title RPC Broker Developer's Guide -:Link delphi4.hlp -:Link delphi5.hlp -:Link delphi6.hlp -:Link del6vcl.hlp -:Link Fmdc.hlp -1 RPC Broker V. 1.1 Developer's Guide -2 Overview -3 Contents=Contents -3 Introduction=introduction -3 Broker Overview=Broker_Overview -3 Orientation=Orientation -3 About this Version of the RPC Broker=About_this_version -3 What's New in the BDK=Whats_New_in_the_BDK -3 Developer Considerations=Developer_Considerations -3 Application Issues=Application_Level_Issues -3 Silent Login=Silent_Login -3 Context-sensitive Help for the RPC Broker Components=ig_helpfile -2 RPC Broker Components, Classes, and Units -3 EBrokerError Exception=EBrokerError -3 Classes -4 TMult=TMult_Class -4 TParamRecord=TParamRecord_Class -4 TParams=TParams_Class -4 TVistaLogin=TVistaLogin_Class -4 TVistaUser=TVistaUser_Class -3 Components -4 TCCOWRPCBroker=TCCOWRPCBroker_Component -4 TRPCBroker=TRPCBroker_Component -4 TSharedBroker=TSharedBroker_Component -4 TSharedRPCBroker=TSharedRPCBroker_Component -4 TXWBRichEdit=TXWBRichEdit_Component -3 Units -4 Hash=Hash_unit -4 LoginFrm=LoginFrm_Unit -4 MFunStr=MFunStr_unit -4 RPCConf1=RPCConf1_unit -4 RpcSLogin=RpcSLogin_Unit -4 SplVista=SplVista_unit -4 TRPCB=TRPCB_unit -4 TVCEdit=TVCEdit_Unit -2 Remote Procedure Calls (RPCs) -3 Overview=rpc_overview -3 What Makes a Good RPC?=rpc_good -3 Creating RPCs=rpc_create -3 Using an Existing M API=Using_an_Existing_M_API -3 M Entry Point for an RPC -4 Relationship Between an M Entry Point and an RPC=rpc_routine_relationship -4 First Input Parameter=rpc_first_input_param -4 Return Value Types=rpc_return_value_types -4 Input Parameters=rpc_input_parameter_types -4 Examples=rpc_entry_point_examples -3 RPC Entry in the Remote Procedure File -4 RPC Entry in the Remote Procedure File=rpc_file_entry -4 RPC Version in the Remote Procedure File=RPC_Version_in_Remote_Procedure_File -4 Blocking an RPC in the Remote Procedure File=Blocking_an_RPC -4 Cleanup after RPC Execution=rpc_cleanup -4 Documenting RPCs=rpc_document -3 Executing RPCs from Clients -4 How to Execute an RPC from a Client=rpc_execute_from_client -4 RPC Security: How to Register an RPC=rpc_register -4 RPC Limits=RPC_limits -4 BrokerExample Online Code Example=BrokerExample -2 Other RPC Broker APIs -3 Overview=otherapi_Overview -3 Encryption Functions=otherapi_encrypt -3 GetServerInfo Function=otherapi_getserverinfo -3 M Emulation Functions=otherapi_m_emulation -3 VistA Splash Screen Procedures=otherapi_splash -3 $$BROKER^XWBLIB=otherapi_broker -3 $$RTRNFMT^XWBLIB=otherapi_rtrnfmt -3 XWB ARE RPCS AVAILABLE=XWB_ARE_RPCS_AVAILABLE -3 XWB IS RPC AVAILABLE=XWB_IS_RPC_AVAILABLE -3 XWB GET VARIABLE VALUE RPC=otherapi_getvarvalue -3 Running RPCs on a Remote Server -4 Options For Running RPCs on a Remote Server=Options_For_Running_RPCs_on_a_Remote_Server -4 Checking RPC Availability on a Remote Server=Checking_RPC_Availability_on_a_Remote_Server -4 XWB DIRECT RPC=XWB_DIRECT_RPC -4 XWB REMOTE RPC=XWB_REMOTE_RPC -4 XWB REMOTE STATUS CHECK=XWB_REMOTE_STATUS_CHECK -4 XWB REMOTE GETDATA=XWB_REMOTE_GETDATA -4 XWB REMOTE CLEAR=XWB_REMOTE_CLEAR -3 Deferred RPCs -4 Overview of Deferred RPCs=Overview_of_Deferred_RPCs -4 XWB DEFERRED RPC=XWB_DEFERRED_RPC -4 XWB DEFERRED STATUS=XWB_DEFERRED_STATUS -4 XWB DEFERRED GETDATA=XWB_DEFERRED_GETDATA -4 XWB DEFERRED CLEAR=XWB_DEFERRED_CLEAR -4 XWB DEFERRED CLEARALL=XWB_DEFERRED_CLEARALL -2 Debugging and Troubleshooting -3 Overview=debug_overview -3 How to Debug Your Application=debug -3 RPC Error Trapping=Error_Handling -3 Identifying the Listener Process on the Server=ID_Listener -3 Identifying the Handler Process on the Server=ID_Handler -3 Testing Your RPC Broker Connection=Testing_Connection -3 Client Timeout and Buffer Clearing=Buffer_Clearing -3 Memory Leaks=memory_leaks -2 Developer Utilities -3 RPC Broker Programmer Preferences=IDH_brokprogpref -2 Tutorial -3 Introduction=tut_intro -3 Advanced Preparation=tut_prep -3 Step 1: Create Application with an RPC Broker Component=tut_step1 -3 Step 2: Get Server/Port=tut_step2 -3 Step 3: Establish Broker Connection=tut_step3 -3 Step 4: RPC Routine to List Terminal Types=tut_step4 -3 Step 5: RPC to List Terminal Types=tut_step5 -3 Step 6: Call the ZxxxTT LIST RPC=tut_step6 -3 Step 7: Associate IENs=tut_step7 -3 Step 8: Routine to Retrieve Terminal Types=tut_step8 -3 Step 9: RPC to Retrieve Terminal Types=tut_step9 -3 Step 10: Call Zxxx RETRIEVE RPC=tut_step10 -3 Step 11: Register RPCs=tut_register -3 See Also: FileMan Delphi Components (FMDC)=tut_fmdc -3 Tutorial Source Code=tut_pascal -2 DLL Interface -3 Introduction=dll_intro -3 DLL Special Issues -4 RPC Results from DLL Calls=dll_results -4 GetServerInfo Function and the DLL=dll_getserverinfo -3 DLL Exported Functions -4 RPCBCall=dll_function_rpcbcall -4 RPCBCreate=dll_function_rpcbcreate -4 RPCBCreateContext=dll_function_rpcbcreatecontext -4 RPCBFree=dll_function_rpcbfree -4 RPCBMultItemGet=dll_function_rpcbmultitemget -4 RPCBMultPropGet=dll_function_rpcbmultpropget -4 RPCBMultSet=dll_function_rpcbmultset -4 RPCBMultSortedSet=dll_function_rpcbmultsortedset -4 RPCBParamGet=dll_function_rpcbParamGet -4 RPCBParamSet=dll_function_rpcbParamSet -4 RPCBPropGet=dll_function_rpcbpropget -4 RPCBPropSet=dll_function_rpcbpropset -3 Guidelines for C++ -4 Overview=dll_cpp_intro -4 TRPCBroker C++ Class Methods=dll_cpp_methods -4 Initialize the Class=dll_cpp_init -4 Create Broker Instances=dll_cpp_create -4 Connect to the Server=dll_cpp_connect -4 Execute RPCs=dll_cpp_execute -4 Destroy Broker Instances=dll_cpp_destroy -3 Guidelines for C -4 Overview=dll_c_intro -4 Initialize—LoadLibrary and GetProcAddress=dll_c_init -4 Create Broker Components=dll_c_create -4 Connect to the Server=dll_c_connect -4 Execute RPCs=dll_c_execute -4 Destroy Broker Components=dll_c_destroy -3 Guidelines for Visual Basic -4 Overview=dll_vb_intro -4 Initialize=dll_vb_init -4 Create Broker Components=dll_vb_create -4 Connect to the Server=dll_vb_connect -4 Execute RPCs=dll_vb_execute -4 Destroy Broker Components=dll_vb_destroy diff --git a/BDK32/Help/broker.toc b/BDK32/Help/broker.toc deleted file mode 100644 index 97777ca..0000000 --- a/BDK32/Help/broker.toc +++ /dev/null @@ -1,150 +0,0 @@ -:Base broker.hlp>main -:Title RPC Broker Developer's Guide - -1 RPC Broker V. 1.1 Developer's Guide -2 Overview -3 Introduction=introduction -3 Broker Overview=Broker_Overview -3 Orientation=Orientation -3 About this Version of the RPC Broker=About_this_version -3 What's New in the BDK=Whats_New_in_the_BDK -3 Developer Considerations=Developer_Considerations -3 Application Issues=Application_Level_Issues -3 Silent Login=Silent_Login -3 Context-sensitive Help for the TRPCBroker Component=ig_helpfile -2 RPC Broker Components and Classes -3 TCCOWRPCBroker=TCCOWRPCBroker_Component -3 TRPCBroker Component=TRPCBroker -3 TSharedRPCBroker Component=TSharedRPCBroker_Component -3 TXWBRichEdit Component=TXWBRichEdit_Component -3 TMult Class=TMult_Class -3 TParamRecord Class=TParamRecord_Class -3 TParams Class=TParams_Class -3 TVistaLogin Class=TVistaLogin_Class -3 TVistaUser Class=TVistaUser_Class -3 EBrokerError Exception=EBrokerError -3 Units -4 Hash Unit=Hash_unit -4 LoginFrm Unit=LoginFrm_Unit -4 MFunStr Unit=MFunStr_unit -4 RPCConf1 Unit=RPCConf1_unit -4 RpcSLogin Unit=RpcSLogin_Unit -4 SplVista Unit=SplVista_unit -4 TCCOWRPCBroker Unit=TCCOWRPRCBroker_unit -4 TRPCB Unit=TRPCB_unit -4 TVCEdit Unit=TVCEdit_Unit -2 Remote Procedure Calls (RPCs) -3 Overview=rpc_overview -3 What Makes a Good RPC?=rpc_good -3 Creating RPCs=rpc_create -3 Using an Existing M API=Using_an_Existing_M_API -3 M Entry Point for an RPC -4 Relationship Between an M Entry Point and an RPC=rpc_routine_relationship -4 First Input Parameter=rpc_first_input_param -4 Return Value Types=rpc_return_value_types -4 Input Parameters=rpc_input_parameter_types -4 Examples=rpc_entry_point_examples -3 RPC Entry in the Remote Procedure File -4 RPC Entry in the Remote Procedure File=rpc_file_entry -4 RPC Version in the Remote Procedure File=RPC_Version_in_Remote_Procedure_File -4 Blocking an RPC in the Remote Procedure File=Blocking_an_RPC -4 Cleanup after RPC Execution=rpc_cleanup -4 Documenting RPCs=rpc_document -3 Executing RPCs from Clients -4 How to Execute an RPC from a Client=rpc_execute_from_client -4 RPC Security: How to Register an RPC=rpc_register -4 RPC Limits=RPC_limits -4 BrokerExample Online Code Example=BrokerExample -2 Other RPC Broker APIs -3 Overview=otherapi_Overview -3 Encryption Functions=otherapi_encrypt -3 GetServerInfo Function=otherapi_getserverinfo -3 M Emulation Functions=otherapi_m_emulation -3 VistA Splash Screen Procedures=otherapi_splash -3 $$BROKER^XWBLIB=otherapi_broker -3 $$RTRNFMT^XWBLIB=otherapi_rtrnfmt -3 XWB ARE RPCS AVAILABLE=XWB_ARE_RPCS_AVAILABLE -3 XWB IS RPC AVAILABLE=XWB_IS_RPC_AVAILABLE -3 XWB GET VARIABLE VALUE RPC=otherapi_getvarvalue -3 Running RPCs on a Remote Server -4 Options For Running RPCs on a Remote Server=Options_For_Running_RPCs_on_a_Remote_Server -4 Checking RPC Availability on a Remote Server=Checking_RPC_Availability_on_a_Remote_Server -4 XWB DIRECT RPC=XWB_DIRECT_RPC -4 XWB REMOTE RPC=XWB_REMOTE_RPC -4 XWB REMOTE STATUS CHECK=XWB_REMOTE_STATUS_CHECK -4 XWB REMOTE GETDATA=XWB_REMOTE_GETDATA -4 XWB REMOTE CLEAR=XWB_REMOTE_CLEAR -3 Deferred RPCs -4 Overview of Deferred RPCs=Overview_of_Deferred_RPCs -4 XWB DEFERRED RPC=XWB_DEFERRED_RPC -4 XWB DEFERRED STATUS=XWB_DEFERRED_STATUS -4 XWB DEFERRED GETDATA=XWB_DEFERRED_GETDATA -4 XWB DEFERRED CLEAR=XWB_DEFERRED_CLEAR -4 XWB DEFERRED CLEARALL=XWB_DEFERRED_CLEARALL -2 Debugging and Troubleshooting -3 Overview=debug_overview -3 How to Debug Your Application=debug -3 RPC Error Trapping=Error_Handling -3 Identifying the Listener Process on the Server=ID_Listener -3 Identifying the Handler Process on the Server=ID_Handler -3 Testing Your RPC Broker Connection=Testing_Connection -3 Client Timeout and Buffer Clearing=Buffer_Clearing -3 Memory Leaks=memory_leaks -2 Developer Utilities -3 RPC Broker Programmer Preferences=IDH_brokprogpref -2 Tutorial -3 Introduction=tut_intro -3 Advanced Preparation=tut_prep -3 Step 1: Create Application with an RPC Broker Component=tut_step1 -3 Step 2: Get Server/Port=tut_step2 -3 Step 3: Establish Broker Connection=tut_step3 -3 Step 4: RPC Routine to List Terminal Types=tut_step4 -3 Step 5: RPC to List Terminal Types=tut_step5 -3 Step 6: Call the ZxxxTT LIST RPC=tut_step6 -3 Step 7: Associate IENs=tut_step7 -3 Step 8: Routine to Retrieve Terminal Types=tut_step8 -3 Step 9: RPC to Retrieve Terminal Types=tut_step9 -3 Step 10: Call Zxxx RETRIEVE RPC=tut_step10 -3 Step 11: Register RPCs=tut_register -3 See Also: FileMan Delphi Components (FMDC)=tut_fmdc -3 Tutorial Source Code=tut_pascal -2 DLL Interface -3 Introduction=dll_intro -3 DLL Special Issues -4 RPC Results from DLL Calls=dll_results -4 GetServerInfo Function and the DLL=dll_getserverinfo -3 DLL Exported Functions -4 RPCBCall=dll_function_rpcbcall -4 RPCBCreate=dll_function_rpcbcreate -4 RPCBCreateContext=dll_function_rpcbcreatecontext -4 RPCBFree=dll_function_rpcbfree -4 RPCBMultItemGet=dll_function_rpcbmultitemget -4 RPCBMultPropGet=dll_function_rpcbmultpropget -4 RPCBMultSet=dll_function_rpcbmultset -4 RPCBMultSortedSet=dll_function_rpcbmultsortedset -4 RPCBParamGet=dll_function_rpcbParamGet -4 RPCBParamSet=dll_function_rpcbParamSet -4 RPCBPropGet=dll_function_rpcbpropget -4 RPCBPropSet=dll_function_rpcbpropset -3 Guidelines for C++ -4 Overview=dll_cpp_intro -4 TRPCBroker C++ Class Methods=dll_cpp_methods -4 Initialize the Class=dll_cpp_init -4 Create Broker Instances=dll_cpp_create -4 Connect to the Server=dll_cpp_connect -4 Execute RPCs=dll_cpp_execute -4 Destroy Broker Instances=dll_cpp_destroy -3 Guidelines for C -4 Overview=dll_c_intro -4 Initialize—LoadLibrary and GetProcAddress=dll_c_init -4 Create Broker Components=dll_c_create -4 Connect to the Server=dll_c_connect -4 Execute RPCs=dll_c_execute -4 Destroy Broker Components=dll_c_destroy -3 Guidelines for Visual Basic -4 Overview=dll_vb_intro -4 Initialize=dll_vb_init -4 Create Broker Components=dll_vb_create -4 Connect to the Server=dll_vb_connect -4 Execute RPCs=dll_vb_execute -4 Destroy Broker Components=dll_vb_destroy diff --git a/BDK32/INSTALL.LOG b/BDK32/INSTALL.LOG deleted file mode 100644 index feeec70..0000000 --- a/BDK32/INSTALL.LOG +++ /dev/null @@ -1,330 +0,0 @@ -*** Installation Started 05/08/2007 17:50 *** -Title: tA RPCBroker 1.1 for Delphi XWB*1.1*40 Installation -Source: C:\Shared\Delphi\XWB1_1P40PG.EXE -Made Dir: C:\Program Files\Borland\Delphi7\Lib\BDK32 -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\UNWISE.EXE -RegDB Key: Software\Microsoft\Windows\CurrentVersion\Uninstall\VistA RPCBroker 1.1 for Delphi XWB*1.1*40 -RegDB Val: VistA RPCBroker 1.1 for Delphi XWB*1.1*40 -RegDB Name: DisplayName -RegDB Root: 2 -RegDB Key: Software\Microsoft\Windows\CurrentVersion\Uninstall\VistA RPCBroker 1.1 for Delphi XWB*1.1*40 -RegDB Val: C:\PROGRA~1\BORLAND\DELPHI7\LIB\BDK32\UNWISE.EXE C:\PROGRA~1\BORLAND\DELPHI7\LIB\BDK32\INSTALL.LOG -RegDB Name: UninstallString -RegDB Root: 2 -Made Dir: C:\Program Files\Borland\Delphi7\Lib\BDK32\Samples -Made Dir: C:\Program Files\Borland\Delphi7\Lib\BDK32\Samples\SharedRPCBroker -Made Dir: C:\Program Files\Borland\Delphi7\Lib\BDK32\Samples\SharedRPCBroker\BrokerEx -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Samples\SharedRPCBroker\BrokerEx\BrokerExampleAboutFrm.PAS -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Samples\SharedRPCBroker\BrokerEx\BrokerExampleAboutFrm.dfm -Made Dir: C:\Program Files\Borland\Delphi7\Lib\BDK32\Samples\RPCBroker -Made Dir: C:\Program Files\Borland\Delphi7\Lib\BDK32\Samples\RPCBroker\SilentSignOn -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Samples\RPCBroker\SilentSignOn\XWBOnFail.res -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Samples\RPCBroker\SilentSignOn\XWBOnFail.exe -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Samples\RPCBroker\SilentSignOn\XWBOnFail.dpr -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Samples\RPCBroker\SilentSignOn\XWBOnFail.dof -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Samples\RPCBroker\SilentSignOn\XWBAVCodes.res -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Samples\RPCBroker\SilentSignOn\XWBAVCodes.exe -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Samples\RPCBroker\SilentSignOn\XWBAVCodes.dpr -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Samples\RPCBroker\SilentSignOn\XWBAVCodes.dof -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Samples\RPCBroker\SilentSignOn\XWBAppHandle2.res -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Samples\RPCBroker\SilentSignOn\XWBAppHandle2.exe -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Samples\RPCBroker\SilentSignOn\XWBAppHandle2.dpr -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Samples\RPCBroker\SilentSignOn\XWBAppHandle2.dof -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Samples\RPCBroker\SilentSignOn\XWBAppHandle1.res -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Samples\RPCBroker\SilentSignOn\XWBAppHandle1.exe -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Samples\RPCBroker\SilentSignOn\XWBAppHandle1.dpr -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Samples\RPCBroker\SilentSignOn\XWBAppHandle1.dof -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Samples\RPCBroker\SilentSignOn\ReadMeForSamples.txt -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Samples\RPCBroker\SilentSignOn\fXWBOnFail.pas -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Samples\RPCBroker\SilentSignOn\fXWBOnFail.dfm -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Samples\RPCBroker\SilentSignOn\fXWBAVCodes.pas -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Samples\RPCBroker\SilentSignOn\fXWBAVCodes.dfm -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Samples\RPCBroker\SilentSignOn\fXWBAppHandle2.pas -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Samples\RPCBroker\SilentSignOn\fXWBAppHandle2.dfm -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Samples\RPCBroker\SilentSignOn\fXWBAppHandle1.pas -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Samples\RPCBroker\SilentSignOn\fXWBAppHandle1.dfm -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Samples\RPCBroker\SilentSignOn\frmVistAAbout.pas -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Samples\RPCBroker\SilentSignOn\frmVistAAbout.dfm -Made Dir: C:\Program Files\Borland\Delphi7\Lib\BDK32\Samples\RPCBroker\BrokerEx -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Samples\RPCBroker\BrokerEx\fVistAAbout.pas -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Samples\RPCBroker\BrokerEx\fVistAAbout.dfm -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Samples\RPCBroker\BrokerEx\frmVistAAbout.pas -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Samples\RPCBroker\BrokerEx\frmVistAAbout.dfm -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Samples\RPCBroker\BrokerEx\fBrokerExampleCCOW.pas -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Samples\RPCBroker\BrokerEx\fBrokerExampleCCOW.dfm -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Samples\RPCBroker\BrokerEx\fBrokerExample.pas -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Samples\RPCBroker\BrokerEx\fBrokerExample.dfm -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Samples\RPCBroker\BrokerEx\BrokerExampleCCOW.res -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Samples\RPCBroker\BrokerEx\BrokerExampleCCOW.exe -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Samples\RPCBroker\BrokerEx\BrokerExampleCCOW.dpr -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Samples\RPCBroker\BrokerEx\BrokerExampleCCOW.dof -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Samples\RPCBroker\BrokerEx\BrokerExample.res -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Samples\RPCBroker\BrokerEx\BrokerExample.exe -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Samples\RPCBroker\BrokerEx\BrokerExample.dpr -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Samples\RPCBroker\BrokerEx\BrokerExample.dof -Made Dir: C:\Program Files\Borland\Delphi7\Lib\BDK32\Help -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Help\broker.toc -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Help\Broker.hlp -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Help\broker.cnt -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Help\broker.als -Made Dir: C:\Program Files\Borland\Delphi7\Lib\BDK32\Source -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Source\VergenceContextor.dll -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Source\CCOWRPCBroker.pas -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Source\fVistaBar.res -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Source\frmVistAAbout.pas -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Source\frmVistAAbout.dfm -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Source\fDebugInfo.pas -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Source\fDebugInfo.dfm -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Source\CCOW_const.pas -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Source\uSharedBroker1.pas -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Source\uSharedBroker1.dpk -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Source\uSharedBroker1.dof -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Source\UnitTestMFunStr.res -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Source\UnitTestMFunStr.exe -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Source\UnitTestMFunStr.dpr -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Source\UnitTestMFunStr.dof -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Source\UnitTestBroker.res -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Source\UnitTestBroker.exe -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Source\XWBReg.pas -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Source\XWBRich20.PAS -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Source\Xwbut1.pas -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Source\SharedRPCBroker.pas -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Source\SharedRPCBroker.dcr -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Source\SgnonCnf.pas -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Source\SgnonCnf.dfm -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Source\SelDiv.pas -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Source\SelDiv.dfm -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Source\RpcSLogin.pas -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Source\RPCSharedBrokerSessionMgr1_TLB_SRB.pas -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Source\RPCSharedBrokerSessionMgr1_TLB.pas -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Source\RPCSharedBrokerSessionMgr1_TLB.dcr -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Source\RPCSharedBrokerSessionMgr1.tlb -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Source\RPCSharedBrokerSessionMgr1.res -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Source\RPCSharedBrokerSessionMgr1.exe -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Source\RPCSharedBrokerSessionMgr1.dpr -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Source\RPCSharedBrokerSessionMgr1.dof -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Source\Rpcnet.pas -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Source\Rpcnet.dfm -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Source\Rpcconf1.pas -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Source\Rpcconf1.dfm -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Source\RpcbErr.pas -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Source\RpcbErr.dfm -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Source\Rpcbedtr.pas -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Source\Mfunstr.pas -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Source\Loginfrm.pas -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Source\Loginfrm.dfm -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Source\IISBase.inc -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Source\Hash.pas -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Source\fVistaBar.pas -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Source\fVistaBar.dfm -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Source\fSignonConfigColor.pas -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Source\fSignonConfigColor.dfm -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Source\fSgnonDlg.pas -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Source\fSgnonDlg.dfm -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Source\fRPCSharedBrokerSessionMgr1.pas -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Source\fRPCSharedBrokerSessionMgr1.dfm -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Source\fRPCBErrMsg.pas -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Source\fRPCBErrMsg.dfm -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Source\frmSignonMessage.pas -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Source\frmSignonMessage.dfm -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Source\dunit.ini -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Source\AddServer.pas -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Source\AddServer.dfm -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Source\uSharedBroker1.res -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Source\uUnitTestBroker.pas -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Source\uUnitTestMFunStr.pas -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Source\VCEdit.dfm -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Source\VCEdit.pas -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Source\Wsockc.pas -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Source\SharedRPCBrokerReg.pas -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Source\SharedRPCBrokerSink.pas -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Source\Splvista.dfm -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Source\Splvista.pas -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Source\Trpcb.pas -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Source\UnitTestBroker.dof -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Source\UnitTestBroker.dpr -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Source\VERGENCECONTEXTORLib_TLB.pas -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Source\VERGENCECONTEXTORLib_TLB.dcr -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Source\XWB_R50.res -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Source\XWB_R50.dpk -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Source\XWB_R50.dof -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Source\XWB_D50.res -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Source\XWB_D50.dpk -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Source\XWB_D50.dof -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Source\XWB_D50.dcr -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Source\SharedRPCBroker_R50.res -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Source\SharedRPCBroker_R50.dpk -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Source\SharedRPCBroker_R50.dof -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Source\SharedRPCBroker_D50.res -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Source\SharedRPCBroker_D50.dpk -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Source\SharedRPCBroker_D50.dof -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Source\XWB_R70.res -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Source\XWB_R70.dpk -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Source\XWB_R70.dof -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Source\XWB_D70.res -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Source\XWB_D70.dpk -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Source\XWB_D70.dof -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Source\XWB_D70.dcr -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Source\SharedRPCBroker_R70.res -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Source\SharedRPCBroker_R70.dpk -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Source\SharedRPCBroker_R70.dof -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Source\SharedRPCBroker_D70.res -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Source\SharedRPCBroker_D70.dpk -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Source\SharedRPCBroker_D70.dof -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Source\XWB_R60.res -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Source\XWB_R60.dpk -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Source\XWB_R60.dof -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Source\XWB_D60.res -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Source\XWB_D60.dpk -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Source\SharedRPCBroker_D60.dof -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Source\SharedRPCBroker_D60.dpk -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Source\SharedRPCBroker_D60.res -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Source\SharedRPCBroker_R60.dof -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Source\SharedRPCBroker_R60.dpk -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Source\SharedRPCBroker_R60.res -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Source\XWB_D60.dcr -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Source\XWB_D60.dof -Made Dir: C:\Program Files\Borland\Delphi7\Lib\BDK32\D7 -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\D7\XWB_D70.dpk -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\D7\XWB_D70.dof -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\D7\XWB_D70.dcr -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\D7\SharedRPCBroker_R70.res -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\D7\SharedRPCBroker_R70.dpk -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\D7\SharedRPCBroker_R70.dof -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\D7\SharedRPCBroker_D70.res -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\D7\SharedRPCBroker_D70.dpk -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\D7\SharedRPCBroker_D70.dof -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\D7\XWB_D70.res -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\D7\XWB_R70.dof -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\D7\XWB_R70.dpk -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\D7\XWB_R70.res -File Copy: C:\WINDOWS\system32\INETWH32.dll -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Serverlist.hlp -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\ServerList.exe -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Brokerprogpref.hlp -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\BrokerProgPref.exe -Made Dir: C:\Program Files\Borland\Delphi7\Lib\BDK32\Samples\SharedRPCBroker\SilentSignOn -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Samples\SharedRPCBroker\SilentSignOn\XWBOnFail.res -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Samples\SharedRPCBroker\SilentSignOn\XWBOnFail.exe -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Samples\SharedRPCBroker\SilentSignOn\XWBOnFail.dpr -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Samples\SharedRPCBroker\SilentSignOn\XWBOnFail.dof -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Samples\SharedRPCBroker\SilentSignOn\XWBAVCodes.res -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Samples\SharedRPCBroker\SilentSignOn\XWBAVCodes.exe -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Samples\SharedRPCBroker\SilentSignOn\XWBAVCodes.dpr -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Samples\SharedRPCBroker\SilentSignOn\XWBAVCodes.dof -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Samples\SharedRPCBroker\SilentSignOn\XWBAppHandle2.res -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Samples\SharedRPCBroker\SilentSignOn\XWBAppHandle2.exe -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Samples\SharedRPCBroker\SilentSignOn\XWBAppHandle2.dpr -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Samples\SharedRPCBroker\SilentSignOn\XWBAppHandle2.dof -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Samples\SharedRPCBroker\SilentSignOn\XWBAppHandle1.res -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Samples\SharedRPCBroker\SilentSignOn\XWBAppHandle1.exe -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Samples\SharedRPCBroker\SilentSignOn\XWBAppHandle1.dpr -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Samples\SharedRPCBroker\SilentSignOn\XWBAppHandle1.dof -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Samples\SharedRPCBroker\SilentSignOn\ReadMeForSamples.txt -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Samples\SharedRPCBroker\SilentSignOn\fXWBOnFail.pas -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Samples\SharedRPCBroker\SilentSignOn\fXWBOnFail.dfm -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Samples\SharedRPCBroker\SilentSignOn\fXWBAVCodes.pas -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Samples\SharedRPCBroker\SilentSignOn\fXWBAVCodes.dfm -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Samples\SharedRPCBroker\SilentSignOn\fXWBAppHandle2.pas -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Samples\SharedRPCBroker\SilentSignOn\fXWBAppHandle2.dfm -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Samples\SharedRPCBroker\SilentSignOn\fXWBAppHandle1.pas -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Samples\SharedRPCBroker\SilentSignOn\fXWBAppHandle1.dfm -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Samples\SharedRPCBroker\SilentSignOn\frmVistAAbout.pas -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Samples\SharedRPCBroker\SilentSignOn\frmVistAAbout.dfm -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Samples\SharedRPCBroker\BrokerEx\fBrokerExample.pas -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Samples\SharedRPCBroker\BrokerEx\fBrokerExample.dfm -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Samples\SharedRPCBroker\BrokerEx\frmVistAAbout.pas -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Samples\SharedRPCBroker\BrokerEx\frmVistAAbout.dfm -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Samples\SharedRPCBroker\BrokerEx\BrokerExample.res -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Samples\SharedRPCBroker\BrokerEx\BrokerExample.exe -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Samples\SharedRPCBroker\BrokerEx\BrokerExample.dpr -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\Samples\SharedRPCBroker\BrokerEx\BrokerExample.dof -Made Dir: C:\Program Files\Borland\Delphi7\Lib\BDK32\SharedBrokerDebugger -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\SharedBrokerDebugger\SharedBrokerDebugger.res -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\SharedBrokerDebugger\uBrokerConnectionInfo.pas -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\SharedBrokerDebugger\fClientInfo.pas -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\SharedBrokerDebugger\fClientRPCLogger.dfm -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\SharedBrokerDebugger\fClientRPCLogger.pas -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\SharedBrokerDebugger\fSharedBrokerDebugger.dfm -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\SharedBrokerDebugger\fSharedBrokerDebugger.pas -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\SharedBrokerDebugger\RPCSharedBrokerSessionMgr1_TLB.pas -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\SharedBrokerDebugger\SharedBrokerDebugger.dof -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\SharedBrokerDebugger\SharedBrokerDebugger.dpr -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\SharedBrokerDebugger\SharedBrokerDebugger.exe -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\SharedBrokerDebugger\uClientInfo.pas -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\SharedBrokerDebugger\uParam.pas -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\SharedBrokerDebugger\uRpcLogEntry.pas -File Copy: C:\WINDOWS\system32\roboex32.dll -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\D7\VERGENCECONTEXTORLib_TLB.dcu -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\D7\fDebugInfo.dcu -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\D7\CCOW_const.dcu -File Copy: C:\Program Files\Borland\Delphi7\Projects\Bpl\XWB_R70.dcp -File Copy: C:\Program Files\Borland\Delphi7\Projects\Bpl\XWB_R70.bpl -File Copy: C:\Program Files\Borland\Delphi7\Projects\Bpl\XWB_D70.dcp -File Copy: C:\Program Files\Borland\Delphi7\Projects\Bpl\XWB_D70.bpl -File Copy: C:\Program Files\Borland\Delphi7\Projects\Bpl\SharedRPCBroker_R70.dcp -File Copy: C:\Program Files\Borland\Delphi7\Projects\Bpl\SharedRPCBroker_R70.bpl -File Copy: C:\Program Files\Borland\Delphi7\Projects\Bpl\SharedRPCBroker_D70.dcp -File Copy: C:\Program Files\Borland\Delphi7\Projects\Bpl\SharedRPCBroker_D70.bpl -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\D7\fDebugInfo.dfm -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\D7\CCOWRPCBroker.dcu -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\D7\frmVistAAbout.dfm -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\D7\AddServer.dcu -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\D7\AddServer.dfm -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\D7\frmSignonMessage.dcu -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\D7\frmSignonMessage.dfm -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\D7\fRPCBErrMsg.dcu -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\D7\fRPCBErrMsg.dfm -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\D7\fRPCSharedBrokerSessionMgr1.dfm -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\D7\fSgnonDlg.dcu -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\D7\fSgnonDlg.dfm -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\D7\fSignonConfigColor.dfm -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\D7\fVistaBar.dfm -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\D7\Hash.dcu -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\D7\Loginfrm.dcu -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\D7\Loginfrm.dfm -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\D7\MFunStr.dcu -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\D7\RpcbEdtr.dcu -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\D7\Rpcberr.dcu -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\D7\Rpcberr.dfm -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\D7\Rpcconf1.dcu -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\D7\Rpcconf1.dfm -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\D7\RpcNet.dcu -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\D7\Rpcnet.dfm -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\D7\RPCSharedBrokerSessionMgr1_TLB.dcu -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\D7\RPCSharedBrokerSessionMgr1_TLB_SRB.dcu -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\D7\RpcSLogin.dcu -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\D7\seldiv.dcu -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\D7\SelDiv.dfm -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\D7\Sgnoncnf.dcu -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\D7\SgnonCnf.dfm -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\D7\SharedRPCBroker.dcu -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\D7\SharedRPCBroker_D70.dcu -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\D7\SharedRPCBroker_R70.dcu -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\D7\SharedRPCBrokerReg.dcu -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\D7\SharedRPCBrokerSink.dcu -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\D7\Splvista.dcu -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\D7\Splvista.dfm -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\D7\Trpcb.dcu -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\D7\VCEdit.dcu -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\D7\VCEdit.dfm -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\D7\WSockc.dcu -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\D7\XWB_D70.dcu -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\D7\XWB_R70.dcu -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\D7\XWBReg.dcu -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\D7\XWBRich20.dcu -File Copy: C:\Program Files\Borland\Delphi7\Lib\BDK32\D7\Xwbut1.dcu -RegDB Key: Software\Vista\Broker -RegDB Val: 1 -RegDB Name: IDEConnect -RegDB Root: 2 -RegDB Key: Software\Vista\Broker -RegDB Val: C:\PROGRA~1\BORLAND\DELPHI7\LIB\BDK32 -RegDB Name: BDKDr -RegDB Root: 2 -RegDB Old: C:\Program Files\Borland\Delphi7\Lib\BDK32 -RegDB Key: Software\Vista\Broker -RegDB Val: 1.1.36.0 -RegDB Name: BDK Version -RegDB Root: 2 -Self-Register: C:\Program Files\Borland\Delphi7\Lib\BDK32\Source\VergenceContextor.dll diff --git a/BDK32/Samples/RPCBroker/BrokerEx/BrokerExample.dof b/BDK32/Samples/RPCBroker/BrokerEx/BrokerExample.dof deleted file mode 100644 index 00d6f0c..0000000 --- a/BDK32/Samples/RPCBroker/BrokerEx/BrokerExample.dof +++ /dev/null @@ -1,80 +0,0 @@ -[Compiler] -A=1 -B=0 -C=1 -D=1 -E=0 -F=0 -G=1 -H=1 -I=1 -J=1 -K=0 -L=1 -M=0 -N=1 -O=1 -P=1 -Q=0 -R=0 -S=0 -T=0 -U=0 -V=1 -W=0 -X=1 -Y=1 -Z=1 -ShowHints=1 -ShowWarnings=1 -UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; -[Linker] -MapFile=0 -OutputObjs=0 -ConsoleApp=1 -DebugInfo=0 -RemoteSymbols=0 -MinStackSize=16384 -MaxStackSize=1048576 -ImageBase=4194304 -ExeDescription= -[Directories] -OutputDir= -UnitOutputDir= -PackageDLLOutputDir= -PackageDCPOutputDir= -SearchPath= -Packages=Vcl50;Vclx50;Vcldb50;Vclbde50;VclSmp50;vclado50;ibevnt50;vcldbx50;Qrpt50;TeeUI50;TeeDB50;Tee50;Dss50;TeeQR50;VCLIB50;Vclmid50;vclie50;Inetdb50;Inet50;NMFast50;webmid50;dclocx50;dclaxserver50;JLITestFDE;Rz252N50;Rz252D50;CS20Comps50;CSP20I50;gmunitsd5;gmctrlsd5;gmchrtedd5;gmdaouid5;GMDaod5;gmdbgend5;gmdbctrld5;gmadouid5;GMAdod5;democomponentsd5;Indy50;XWB_R50;SharedBroker_D50;CPRSctrls;ZipMasterD5;ICSDEL50;TCynthesisAppUpdateD5 -Conditionals= -DebugSourceDirs= -UsePackages=0 -[Parameters] -RunParams= -HostApplication= -[Version Info] -IncludeVerInfo=1 -AutoIncBuild=0 -MajorVer=1 -MinorVer=1 -Release=31 -Build=2 -Debug=0 -PreRelease=0 -Special=0 -Private=0 -DLL=0 -Locale=1033 -CodePage=1252 -[Version Info Keys] -CompanyName= -FileDescription=Example Program using RPCBroker and different types of calls -FileVersion=1.1.31.2 -InternalName=Broker Example -LegalCopyright=(c) 1997-2002 -LegalTrademarks= -OriginalFilename= -ProductName=RPCBroker BrokerExample -ProductVersion=1.1.31.0 -Comments= -[Excluded Packages] -$(DELPHI)\Bin\dclite50.bpl=Borland Integrated Translation Environment diff --git a/BDK32/Samples/RPCBroker/BrokerEx/BrokerExample.dpr b/BDK32/Samples/RPCBroker/BrokerEx/BrokerExample.dpr deleted file mode 100644 index 9094387..0000000 --- a/BDK32/Samples/RPCBroker/BrokerEx/BrokerExample.dpr +++ /dev/null @@ -1,17 +0,0 @@ -program BrokerExample; - -uses - Forms, - fBrokerExample in 'fBrokerExample.pas' {frmBrokerExample}, - SplVista; - -// include to display Vista splash - -{$R *.RES} - -begin - Application.CreateForm(TfrmBrokerExample, frmBrokerExample); - SplashOpen; // display splash screen - SplashClose(3000); // min splash time 3 seconds, then close - Application.Run; -end. diff --git a/BDK32/Samples/RPCBroker/BrokerEx/BrokerExample.exe b/BDK32/Samples/RPCBroker/BrokerEx/BrokerExample.exe deleted file mode 100644 index 999824c..0000000 Binary files a/BDK32/Samples/RPCBroker/BrokerEx/BrokerExample.exe and /dev/null differ diff --git a/BDK32/Samples/RPCBroker/BrokerEx/BrokerExample.res b/BDK32/Samples/RPCBroker/BrokerEx/BrokerExample.res deleted file mode 100644 index 5615259..0000000 Binary files a/BDK32/Samples/RPCBroker/BrokerEx/BrokerExample.res and /dev/null differ diff --git a/BDK32/Samples/RPCBroker/BrokerEx/BrokerExampleCCOW.dof b/BDK32/Samples/RPCBroker/BrokerEx/BrokerExampleCCOW.dof deleted file mode 100644 index 423b750..0000000 --- a/BDK32/Samples/RPCBroker/BrokerEx/BrokerExampleCCOW.dof +++ /dev/null @@ -1,84 +0,0 @@ -[Compiler] -A=1 -B=0 -C=1 -D=1 -E=0 -F=0 -G=1 -H=1 -I=1 -J=1 -K=0 -L=1 -M=0 -N=1 -O=1 -P=1 -Q=0 -R=0 -S=0 -T=0 -U=0 -V=1 -W=0 -X=1 -Y=1 -Z=1 -ShowHints=1 -ShowWarnings=1 -UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; -[Linker] -MapFile=0 -OutputObjs=0 -ConsoleApp=1 -DebugInfo=0 -RemoteSymbols=0 -MinStackSize=16384 -MaxStackSize=1048576 -ImageBase=4194304 -ExeDescription= -[Directories] -OutputDir= -UnitOutputDir= -PackageDLLOutputDir= -PackageDCPOutputDir= -SearchPath= -Packages=Vcl50;Vclx50;Vcldb50;Vclbde50;VclSmp50;vclado50;ibevnt50;vcldbx50;Qrpt50;TeeUI50;TeeDB50;Tee50;Dss50;TeeQR50;VCLIB50;Vclmid50;vclie50;Inetdb50;Inet50;NMFast50;webmid50;dclocx50;dclaxserver50;JLITestFDE;Rz252N50;Rz252D50;CS20Comps50;CSP20I50;gmunitsd5;gmctrlsd5;gmchrtedd5;gmdaouid5;GMDaod5;gmdbgend5;gmdbctrld5;gmadouid5;GMAdod5;democomponentsd5;Indy50;XWB_R50;SharedBroker_D50;CPRSctrls;ZipMasterD5;ICSDEL50;TCynthesisAppUpdateD5 -Conditionals= -DebugSourceDirs= -UsePackages=0 -[Parameters] -RunParams= -HostApplication= -[Language] -ActiveLang= -ProjectLang=$00000409 -RootDir= -[Version Info] -IncludeVerInfo=1 -AutoIncBuild=0 -MajorVer=1 -MinorVer=0 -Release=0 -Build=0 -Debug=0 -PreRelease=0 -Special=0 -Private=0 -DLL=0 -Locale=1033 -CodePage=1252 -[Version Info Keys] -CompanyName= -FileDescription= -FileVersion=1.0.0.0 -InternalName= -LegalCopyright= -LegalTrademarks= -OriginalFilename= -ProductName= -ProductVersion=1.0.0.0 -Comments= -[Excluded Packages] -D:\PROGRA~1\Borland\Delphi5\Projects\Bpl\Fmdc_R50.bpl=VistA Fileman Delphi Components diff --git a/BDK32/Samples/RPCBroker/BrokerEx/BrokerExampleCCOW.dpr b/BDK32/Samples/RPCBroker/BrokerEx/BrokerExampleCCOW.dpr deleted file mode 100644 index 77bdb11..0000000 --- a/BDK32/Samples/RPCBroker/BrokerEx/BrokerExampleCCOW.dpr +++ /dev/null @@ -1,19 +0,0 @@ -program BrokerExampleCCOW; - -uses - Forms, - fBrokerExampleCCOW in 'fBrokerExampleCCOW.pas' {frmBrokerExampleCCOW}, - SplVista, - fOkToTerminate in 'fOkToTerminate.pas' {frmOKToTerminate}; - -// include to display Vista splash - -{$R *.RES} - -begin - Application.CreateForm(TfrmBrokerExampleCCOW, frmBrokerExampleCCOW); - Application.CreateForm(TfrmOKToTerminate, frmOKToTerminate); - SplashOpen; // display splash screen - SplashClose(3000); // min splash time 3 seconds, then close - Application.Run; -end. diff --git a/BDK32/Samples/RPCBroker/BrokerEx/BrokerExampleCCOW.exe b/BDK32/Samples/RPCBroker/BrokerEx/BrokerExampleCCOW.exe deleted file mode 100644 index d5b5162..0000000 Binary files a/BDK32/Samples/RPCBroker/BrokerEx/BrokerExampleCCOW.exe and /dev/null differ diff --git a/BDK32/Samples/RPCBroker/BrokerEx/BrokerExampleCCOW.res b/BDK32/Samples/RPCBroker/BrokerEx/BrokerExampleCCOW.res deleted file mode 100644 index 5615259..0000000 Binary files a/BDK32/Samples/RPCBroker/BrokerEx/BrokerExampleCCOW.res and /dev/null differ diff --git a/BDK32/Samples/RPCBroker/BrokerEx/fBrokerExample.dfm b/BDK32/Samples/RPCBroker/BrokerEx/fBrokerExample.dfm deleted file mode 100644 index 64821b8..0000000 --- a/BDK32/Samples/RPCBroker/BrokerEx/fBrokerExample.dfm +++ /dev/null @@ -1,615 +0,0 @@ -object frmBrokerExample: TfrmBrokerExample - Left = 248 - Top = 112 - BorderStyle = bsSingle - Caption = 'RPCBroker Example UCX RPCBroker (p40)' - ClientHeight = 389 - ClientWidth = 472 - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clBtnText - Font.Height = -13 - Font.Name = 'System' - Font.Style = [] - Menu = MainMenu1 - OldCreateOrder = True - Position = poScreenCenter - OnCreate = FormCreate - PixelsPerInch = 96 - TextHeight = 16 - object GroupBox2: TGroupBox - Left = 8 - Top = 0 - Width = 457 - Height = 73 - Caption = 'VistA Server' - TabOrder = 0 - object Label2: TLabel - Left = 6 - Top = 51 - Width = 67 - Height = 16 - AutoSize = False - Caption = 'Status:' - end - object Label3: TLabel - Left = 73 - Top = 51 - Width = 88 - Height = 16 - Caption = 'Disconnected' - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clRed - Font.Height = -13 - Font.Name = 'System' - Font.Style = [] - ParentColor = False - ParentFont = False - end - object btnConnect: TButton - Left = 354 - Top = 12 - Width = 91 - Height = 25 - Caption = '&Connect' - Default = True - TabOrder = 2 - OnClick = btnConnectClick - end - object edtPort: TEdit - Left = 192 - Top = 24 - Width = 49 - Height = 24 - Hint = 'Listener port number' - ParentShowHint = False - ShowHint = True - TabOrder = 1 - Text = '9200' - OnChange = edtServerChange - end - object edtServer: TEdit - Left = 8 - Top = 24 - Width = 177 - Height = 24 - Hint = 'Name of server or IP address' - ParentShowHint = False - ShowHint = True - TabOrder = 0 - Text = 'BROKERSERVER' - OnChange = edtServerChange - end - object BitBtn1: TBitBtn - Left = 354 - Top = 44 - Width = 91 - Height = 25 - TabOrder = 3 - Kind = bkClose - end - object btnGetServerInfo: TBitBtn - Left = 248 - Top = 24 - Width = 73 - Height = 25 - Hint = 'GetServerInfo' - Caption = 'Server' - ParentShowHint = False - ShowHint = True - TabOrder = 4 - OnClick = btnGetServerInfoClick - Glyph.Data = { - 76010000424D7601000000000000760000002800000020000000100000000100 - 04000000000000010000120B0000120B00001000000000000000000000000000 - 800000800000008080008000000080008000808000007F7F7F00BFBFBF000000 - FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00333000000000 - 00333FF777777777773F0000FFFFFFFFFF0377773F3F3F3F3F7308880F0F0F0F - 0FF07F33737373737337088880FFFFFFFFF07F3337FFFFFFFFF7088880000000 - 00037F3337777777777308888033330F03337F3337F3FF7F7FFF088880300000 - 00007F3337F7777777770FFFF030FFFFFFF07F3FF7F7F3FFFFF708008030F000 - 00F07F7737F7F77777F70FFFF030F0AAE0F07F3FF7F7F7F337F708008030F0DA - D0F07F7737F7F7FFF7F70FFFF030F00000F07F33F7F7F77777370FF9F030FFFF - FFF07F3737F7FFFFFFF70FFFF030000000007FFFF7F777777777000000333333 - 3333777777333333333333333333333333333333333333333333} - NumGlyphs = 2 - end - object cbxBackwardCompatible: TCheckBox - Left = 186 - Top = 54 - Width = 161 - Height = 17 - Action = actBackwardCompatible - State = cbChecked - TabOrder = 5 - end - end - object PageControl1: TPageControl - Left = 8 - Top = 76 - Width = 457 - Height = 305 - ActivePage = TabSheet1 - TabOrder = 1 - object TabSheet1: TTabSheet - Caption = 'Echo string' - object lblSend: TLabel - Left = 8 - Top = 24 - Width = 96 - Height = 16 - Caption = 'Original string:' - end - object lblReturn: TLabel - Left = 8 - Top = 144 - Width = 93 - Height = 16 - Caption = 'Echoed string:' - end - object edtStrOrig: TEdit - Left = 8 - Top = 40 - Width = 225 - Height = 24 - TabOrder = 0 - Text = 'Hello World!' - end - object edtStrRtrn: TEdit - Left = 8 - Top = 160 - Width = 225 - Height = 24 - ReadOnly = True - TabOrder = 1 - end - object btnEchoString: TButton - Left = 8 - Top = 88 - Width = 225 - Height = 25 - Hint = 'XWB EXAMPLE ECHO STRING' - Caption = 'Execute RPC' - Default = True - ParentShowHint = False - ShowHint = True - TabOrder = 2 - OnClick = btnEchoStringClick - end - object Memo1: TMemo - Left = 240 - Top = 8 - Width = 201 - Height = 257 - TabStop = False - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -13 - Font.Name = 'MS Sans Serif' - Font.Style = [] - Lines.Strings = ( - 'Uses TRPCBroker.Call method ' - 'to return a single string.' - '' - 'Original string passed in as ' - 'PType literal.' - '' - 'RPC: XWB EXAMPLE ECHO ' - 'STRING.' - '' - 'Return Value Type: SINGLE ' - 'VALUE.') - ParentColor = True - ParentFont = False - ReadOnly = True - TabOrder = 3 - end - end - object TabSheet2: TTabSheet - Caption = 'Pass by reference' - object Label1: TLabel - Left = 8 - Top = 24 - Width = 70 - Height = 16 - Caption = 'Reference:' - end - object Label4: TLabel - Left = 8 - Top = 144 - Width = 40 - Height = 16 - Caption = 'Value:' - end - object edtReference: TEdit - Left = 8 - Top = 40 - Width = 225 - Height = 24 - TabOrder = 0 - Text = '$HOROLOG' - end - object edtValue: TEdit - Left = 8 - Top = 160 - Width = 225 - Height = 24 - ReadOnly = True - TabOrder = 1 - end - object btnPassByRef: TButton - Left = 8 - Top = 88 - Width = 225 - Height = 25 - Hint = 'XWB GET VARIABLE VALUE' - Caption = 'Execute RPC' - Default = True - ParentShowHint = False - ShowHint = True - TabOrder = 2 - OnClick = btnPassByRefClick - end - object Memo2: TMemo - Left = 240 - Top = 8 - Width = 201 - Height = 257 - TabStop = False - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -13 - Font.Name = 'MS Sans Serif' - Font.Style = [] - Lines.Strings = ( - 'Uses TRPCBroker.strCall ' - 'method to return a single string.' - '' - 'Parameter passed in as PType ' - 'reference.' - '' - 'RPC: XWB GET VARIABLE ' - 'VALUE.' - '' - 'Return Value Type: SINGLE ' - 'VALUE.') - ParentColor = True - ParentFont = False - ReadOnly = True - TabOrder = 3 - end - end - object TabSheet3: TTabSheet - Caption = 'Get list' - object Label5: TLabel - Left = 8 - Top = 120 - Width = 87 - Height = 16 - Caption = 'Returned list:' - end - object lstData: TListBox - Left = 8 - Top = 136 - Width = 225 - Height = 129 - ItemHeight = 16 - TabOrder = 0 - end - object btnGetList: TButton - Left = 8 - Top = 88 - Width = 225 - Height = 25 - Hint = 'XWB EXAMPLE GET LIST' - Caption = 'Execute RPC' - Default = True - ParentShowHint = False - ShowHint = True - TabOrder = 1 - OnClick = btnGetListClick - end - object RadioButton1: TRadioButton - Left = 16 - Top = 16 - Width = 137 - Height = 17 - Caption = 'Number of lines' - Checked = True - TabOrder = 2 - TabStop = True - end - object RadioButton2: TRadioButton - Left = 16 - Top = 48 - Width = 137 - Height = 17 - Caption = 'Kilobytes of data' - TabOrder = 3 - end - object spnLines: TSpinEdit - Left = 160 - Top = 16 - Width = 65 - Height = 26 - MaxValue = 0 - MinValue = 0 - TabOrder = 4 - Value = 50 - end - object spnKbytes: TSpinEdit - Left = 160 - Top = 48 - Width = 65 - Height = 26 - MaxValue = 0 - MinValue = 0 - TabOrder = 5 - Value = 32 - end - object Memo3: TMemo - Left = 240 - Top = 8 - Width = 201 - Height = 257 - TabStop = False - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -13 - Font.Name = 'MS Sans Serif' - Font.Style = [] - Lines.Strings = ( - 'Uses TRPCBroker.Call method ' - 'to return several strings.' - '' - 'Two parameters passed in as ' - 'PType literal.' - '' - 'RPC: XWB EXAMPLE GET LIST.' - '' - 'Return Value Type: GLOBAL ' - 'ARRAY.' - '' - 'WORD WRAP ON field is True ' - 'to break appart call result into ' - 'separate Results strings instead ' - 'of one long Results[0] string.') - ParentColor = True - ParentFont = False - ReadOnly = True - TabOrder = 6 - end - end - object TabSheet4: TTabSheet - Caption = 'WP Text' - object lblList: TLabel - Left = 8 - Top = 56 - Width = 177 - Height = 17 - AutoSize = False - Caption = 'REMOTE PROCEDURE file description:' - end - object btnWPText: TButton - Left = 8 - Top = 16 - Width = 225 - Height = 25 - Hint = 'XWB EXAMPLE WPTEXT' - Caption = 'Execute RPC' - Default = True - ParentShowHint = False - ShowHint = True - TabOrder = 0 - OnClick = btnWPTextClick - end - object mmoText: TMemo - Left = 8 - Top = 80 - Width = 225 - Height = 185 - ReadOnly = True - ScrollBars = ssVertical - TabOrder = 1 - end - object Memo4: TMemo - Left = 240 - Top = 8 - Width = 201 - Height = 257 - TabStop = False - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -13 - Font.Name = 'MS Sans Serif' - Font.Style = [] - Lines.Strings = ( - 'Uses TRPCBroker.lstCall ' - 'method to return several strings.' - '' - 'No parameters are used in this ' - 'call.' - '' - 'RPC: XWB EXAMPLE WPTEXT.' - '' - 'Return Value Type: WORD ' - 'PROCESSING.' - '' - 'WORD WRAP ON field is False ' - 'to allow memo box to control ' - 'word wrapping as necessary.') - ParentColor = True - ParentFont = False - ReadOnly = True - TabOrder = 2 - end - end - object TabSheet5: TTabSheet - Caption = 'Sort numbers' - object Label6: TLabel - Left = 8 - Top = 120 - Width = 87 - Height = 16 - Caption = 'Returned list:' - end - object Label7: TLabel - Left = 8 - Top = 8 - Width = 72 - Height = 16 - Caption = 'How many:' - end - object lblStatus: TLabel - Left = 8 - Top = 56 - Width = 57 - Height = 16 - Caption = 'lblStatus' - Visible = False - end - object lstSorted: TListBox - Left = 8 - Top = 136 - Width = 225 - Height = 129 - ItemHeight = 16 - TabOrder = 0 - end - object btnSortNum: TButton - Left = 8 - Top = 88 - Width = 225 - Height = 25 - Hint = 'XWB EXAMPLE SORT NUMBERS' - Caption = 'Execute RPC' - Default = True - ParentShowHint = False - ShowHint = True - TabOrder = 1 - OnClick = btnSortNumClick - end - object spnNumbers: TSpinEdit - Left = 8 - Top = 24 - Width = 81 - Height = 26 - MaxValue = 10000 - MinValue = 0 - TabOrder = 2 - Value = 500 - end - object rgrDirection: TRadioGroup - Left = 104 - Top = 8 - Width = 121 - Height = 65 - Caption = 'Sort direction' - ItemIndex = 0 - Items.Strings = ( - 'low -> high' - 'high -> low') - TabOrder = 3 - end - object Memo5: TMemo - Left = 240 - Top = 88 - Width = 201 - Height = 177 - TabStop = False - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -13 - Font.Name = 'MS Sans Serif' - Font.Style = [] - ParentColor = True - ParentFont = False - ReadOnly = True - ScrollBars = ssVertical - TabOrder = 4 - end - object rgArrayType: TRadioGroup - Left = 240 - Top = 8 - Width = 185 - Height = 65 - Caption = 'Array Type' - ItemIndex = 0 - Items.Strings = ( - 'Local' - 'Global') - TabOrder = 5 - OnClick = rgArrayTypeClick - end - end - end - object MainMenu1: TMainMenu - Left = 160 - Top = 320 - object mnuOptions: TMenuItem - Caption = '&Options' - object mnuOptOldConnectionOnly: TMenuItem - Action = actOldConnectionOnly - Caption = 'Old Connection Type Only' - end - object mnuOptBackwardCompatible: TMenuItem - Action = actBackwardCompatible - end - object mnuOptDebugMode: TMenuItem - Action = actDebugMode - end - object mnuOptUserContext: TMenuItem - Action = actUserContext - end - end - object Help1: TMenuItem - Caption = '&Help' - object AboutExample: TMenuItem - Caption = '&About RPC Broker Example...' - OnClick = AboutExampleClick - end - end - end - object Timer1: TTimer - OnTimer = Timer1Timer - Left = 16 - Top = 320 - end - object ActionList1: TActionList - Left = 52 - Top = 295 - object actBackwardCompatible: TAction - Caption = '&Backward Compatible' - Checked = True - OnExecute = actBackwardCompatibleExecute - end - object actOldConnectionOnly: TAction - Caption = '&Old Connection Only' - OnExecute = actOldConnectionOnlyExecute - end - object actDebugMode: TAction - Caption = '&Debug Mode' - OnExecute = actDebugModeExecute - end - object actUserContext: TAction - Caption = '&CCOW User Context' - Enabled = False - OnExecute = actUserContextExecute - end - end - object RPCBroker1: TRPCBroker - ClearParameters = True - ClearResults = True - Connected = False - ListenerPort = 9200 - RpcVersion = '0' - Server = 'BROKERSERVER' - KernelLogIn = True - LogIn.Mode = lmAVCodes - LogIn.PromptDivision = False - OldConnectionOnly = False - Left = 100 - Top = 335 - end -end diff --git a/BDK32/Samples/RPCBroker/BrokerEx/fBrokerExample.pas b/BDK32/Samples/RPCBroker/BrokerEx/fBrokerExample.pas deleted file mode 100644 index ad6fdd4..0000000 --- a/BDK32/Samples/RPCBroker/BrokerEx/fBrokerExample.pas +++ /dev/null @@ -1,425 +0,0 @@ -{************************************************** -RPC Broker Example form ver. 1.1 9/3/97 - Broker Development Team - San Francisco IRM Field Office, Dept. of Veterans Affairs - -Disclaimer: - This example does not attempt to teach general Delphi and M programming. - We intentionally removed any safeguards from the code that prevents - passing values that are too small or too large. Therefore, the important - code remains uncluttered and the programmer is free to experiment and - push the program beyond its limits. - -Purpose: - This sample application is an example of how to program client/server - applications in Delphi and M using the RPC Broker. The demonstrated features - include: - - Connecting to an M server - - Creating an application context - - Using the GetServerInfo function - - Displaying the VistA splash screen - - Setting the TRPCBroker Param property for each Param PType (literal, - reference, list) - - Calling RPCs with the Call method - - Calling RPCs with the lstCall and strCall methods - - We encourage you to study the Delphi and M source code to see how the - Broker is used to accomplish these tasks. Try changing some of the - RPCBroker1 component properties to see what happens. Also, try other - values in the fields of the remote procedure records in the - REMOTE PROCEDURE file. - -Warning: "Get list" and "Sort numbers" tabs can potentially take excessively -large data samples which can either crash server process or cause the -connection timeout. Final note, memory allocation errors are not recorded -in the Kernel error trap. They are recorded in the operating system error -trap. - -Context option for this application: - XWB BROKER EXAMPLE - -Remote procedures used: - XWB EXAMPLE ECHO STRING - XWB EXAMPLE GET LIST - XWB EXAMPLE SORT NUMBERS - XWB EXAMPLE WPTEXT - XWB GET VARIABLE VALUE - -Server M routine: - XWBEXMPL -**************************************************} -unit fBrokerExample; - -interface - -uses - SysUtils,Forms, StdCtrls,Graphics, Dialogs, WinTypes, - Controls, Classes, ExtCtrls, TRPCB, XWBut1, MFunStr, Menus, WinProcs, - RpcConf1, Spin, ComCtrls, fVistAAbout, Buttons, - ActiveX, ActnList, CCOWRPCBroker, OleCtrls, VERGENCECONTEXTORLib_TLB; - -type - TfrmBrokerExample = class(TForm) - GroupBox2: TGroupBox; - Label2: TLabel; - Label3: TLabel; - MainMenu1: TMainMenu; - Help1: TMenuItem; - AboutExample: TMenuItem; - btnConnect: TButton; - edtPort: TEdit; - edtServer: TEdit; - PageControl1: TPageControl; - TabSheet1: TTabSheet; - TabSheet2: TTabSheet; - TabSheet3: TTabSheet; - TabSheet4: TTabSheet; - TabSheet5: TTabSheet; - lblSend: TLabel; - edtStrOrig: TEdit; - lblReturn: TLabel; - edtStrRtrn: TEdit; - btnEchoString: TButton; - lblList: TLabel; - Label1: TLabel; - edtReference: TEdit; - Label4: TLabel; - edtValue: TEdit; - btnPassByRef: TButton; - lstData: TListBox; - Label5: TLabel; - btnGetList: TButton; - btnWPText: TButton; - Label6: TLabel; - lstSorted: TListBox; - btnSortNum: TButton; - spnNumbers: TSpinEdit; - Label7: TLabel; - rgrDirection: TRadioGroup; - RadioButton1: TRadioButton; - RadioButton2: TRadioButton; - spnLines: TSpinEdit; - spnKbytes: TSpinEdit; - Timer1: TTimer; - mmoText: TMemo; - lblStatus: TLabel; - BitBtn1: TBitBtn; - btnGetServerInfo: TBitBtn; - Memo1: TMemo; - Memo2: TMemo; - Memo3: TMemo; - Memo4: TMemo; - Memo5: TMemo; - rgArrayType: TRadioGroup; - cbxBackwardCompatible: TCheckBox; - mnuOptions: TMenuItem; - mnuOptBackwardCompatible: TMenuItem; - mnuOptDebugMode: TMenuItem; - mnuOptUserContext: TMenuItem; - mnuOptOldConnectionOnly: TMenuItem; - ActionList1: TActionList; - actBackwardCompatible: TAction; - actOldConnectionOnly: TAction; - actDebugMode: TAction; - actUserContext: TAction; - RPCBroker1: TRPCBroker; - procedure AboutExampleClick(Sender: TObject); - procedure btnEchoStringClick(Sender: TObject); - procedure btnConnectClick(Sender: TObject); - procedure btnPassByRefClick(Sender: TObject); - procedure btnGetListClick(Sender: TObject); - procedure btnSortNumClick(Sender: TObject); - procedure btnWPTextClick(Sender: TObject); - procedure Timer1Timer(Sender: TObject); - procedure btnGetServerInfoClick(Sender: TObject); - procedure edtServerChange(Sender: TObject); - procedure FormCreate(Sender: TObject); - procedure rgArrayTypeClick(Sender: TObject); - procedure actBackwardCompatibleExecute(Sender: TObject); - procedure actDebugModeExecute(Sender: TObject); - procedure actUserContextExecute(Sender: TObject); - procedure actOldConnectionOnlyExecute(Sender: TObject); - public - procedure OnCCOWCommit(Sender: TObject); // CCOW related -end; - - - -var - frmBrokerExample: TfrmBrokerExample; - ContextorControl1: TContextorControl; // CCOW related - - -implementation - -{$R *.DFM} - -procedure TfrmBrokerExample.btnEchoStringClick(Sender: TObject); -begin - RPCBroker1.RemoteProcedure := 'XWB EXAMPLE ECHO STRING'; - RPCBroker1.Param[0].Value := edtStrOrig.Text; - RPCBroker1.Param[0].PType := literal; - RPCBroker1.Call; //execute RPC - edtStrRtrn.Text := RPCBroker1.Results[0]; //for single value use Results[0] -end; - - - -procedure TfrmBrokerExample.btnPassByRefClick(Sender: TObject); -begin - RPCBroker1.RemoteProcedure := 'XWB GET VARIABLE VALUE'; - RPCBroker1.Param[0].Value := edtReference.Text; - RPCBroker1.Param[0].PType := reference; - edtValue.Text := RPCBroker1.strCall; //execute RPC and show result in one call -end; - - - -procedure TfrmBrokerExample.btnGetListClick(Sender: TObject); -begin - RPCBroker1.RemoteProcedure := 'XWB EXAMPLE GET LIST'; - if RadioButton1.Checked then begin - RPCBroker1.Param[0].Value := 'LINES'; - RPCBroker1.Param[0].PType := literal; - RPCBroker1.Param[1].Value := IntToStr(spnLines.Value); - RPCBroker1.Param[1].PType := literal; - end - else begin - RPCBroker1.Param[0].Value := 'KILOBYTES'; - RPCBroker1.Param[0].PType := literal; - RPCBroker1.Param[1].Value := IntToStr(spnKbytes.Value); - RPCBroker1.Param[1].PType := literal - end; - RPCBroker1.Call; //execute RPC - lstData.Items := RPCBroker1.Results; //show results of the call -end; - - - -procedure TfrmBrokerExample.btnWPTextClick(Sender: TObject); -begin - RPCBroker1.RemoteProcedure := 'XWB EXAMPLE WPTEXT'; - RPCBroker1.lstCall(mmoText.Lines); //execute RPC and show results in one call -end; - - - -procedure TfrmBrokerExample.btnSortNumClick(Sender: TObject); -var - I, SaveRPCTimeLimit, DefaultRange: integer; -begin - lblStatus.Visible := True; //turn on status label - lblStatus.Caption := 'building'; //tell user what's happenning - Application.ProcessMessages; //give Windows chance to paint - with RPCBroker1 do - begin - if rgArrayType.ItemIndex = 0 then - begin - RemoteProcedure := 'XWB EXAMPLE SORT NUMBERS'; - DefaultRange := 10000; - end - else - begin - RemoteProcedure := 'XWB EXAMPLE GLOBAL SORT'; - DefaultRange := 100000; - end; - - if rgrDirection.ItemIndex = 0 then Param[0].Value := 'LO' - else Param[0].Value := 'HI'; - Param[0].PType := literal; - with Param[1] do begin - if rgArrayType.ItemIndex = 0 then - PType := list //tells Broker to pass Mult - else - PType := global; - for I := 0 to spnNumbers.Value - 1 do //build Mult one by one - Mult['"A'+IntToStr(I)+'"'] := IntToStr(Random(DefaultRange)+1); //subscript and value are strings! - end; - lblStatus.Caption := 'RPC running'; - Application.ProcessMessages; //give Windows chance to paint - SaveRPCTimeLimit := RPCTimeLimit; - RPCTimeLimit := spnNumbers.Value div 10; //adjust in case a lot of numbers - Call; //execute RPC - lstSorted.Items := Results; //show results of the call - RPCTimeLimit := SaveRPCTimeLimit; //restore original value - end; - lblStatus.Visible := False; //turn off status label -end; - - - -procedure TfrmBrokerExample.btnConnectClick(Sender: TObject); -begin - if btnConnect.Caption = '&Connect' then - begin //connect - RpcBroker1.IsBackwardCompatibleConnection := actBackwardCompatible.Checked; - RpcBroker1.OldConnectionOnly := actOldConnectionOnly.Checked; - RpcBroker1.DebugMode := actDebugMode.Checked; - if RpcBroker1.IsBackwardCompatibleConnection or RpcBroker1.OldConnectionOnly then - begin - rgArrayType.ItemIndex := 0; - rgArrayType.Enabled := False; - end - else - begin - rgArrayType.Enabled := True; - end; -{ - // *********************** CCOW User Context **************************** - if actUserContext.Checked then - begin - if (RPCBroker1.Contextor = nil) then - begin - if ContextorControl1 = nil then - begin - ContextorControl1 := TContextorControl.Create(Self); - ContextorControl1.OnCommitted := OnCCOWCommit; - try - ContextorControl1.Run('CCOWTerm#', '', TRUE, '*'); - except - ShowMessage('Problem with Contextor.Run'); - ContextorControl1.Free; - ContextorControl1 := nil; - end; - end; - end; - RPCBroker1.Contextor := ContextorControl1; - end - else - RPCBroker1.Contextor := nil; - - // *********************** End CCOW User Context ************************* -} - - RPCBroker1.ClearParameters := True; //try False, see what happens - try - RPCBroker1.Connected := True; - //establish connection - if not RPCBroker1.CreateContext('XWB BROKER EXAMPLE') then - ShowMessage('Context could not be created!'); - except - on e: Exception do - ShowMessage('Error: ' + e.Message); - end; - end - else //disconnect - RPCBroker1.Connected := False; -end; - - - -procedure TfrmBrokerExample.btnGetServerInfoClick(Sender: TObject); -var - strServer, strPort: string; -begin - if GetServerInfo(strServer, strPort)<> mrCancel then - begin {getsvrinfo} - edtServer.Text := strServer; //use chosen server - edtPort.Text := strPort; //use chosen port - end; -end; - - - -procedure TfrmBrokerExample.edtServerChange(Sender: TObject); -begin - RPCBroker1.Server := edtServer.Text; //use specified server name/addr - RPCBroker1.ListenerPort := StrToInt(edtPort.Text); //use specified port -end; - - - -procedure TfrmBrokerExample.Timer1Timer(Sender: TObject); -begin - if RPCBroker1.Connected then begin - btnConnect.Caption := '&Disconnect'; - btnConnect.Default := False; - mnuOptions.Enabled := False; - cbxBackwardCompatible.Enabled := False; - Label3.Caption := 'Connected'; - Label3.Font.Color := clLime; // clGreen; // went to lime for higher contrast at some of the High contrast desktops - end - else begin - btnConnect.Caption := '&Connect'; - btnConnect.Default := True; - mnuOptions.Enabled := True; - if not actOldConnectionOnly.Checked then - cbxBackwardCompatible.Enabled := True; - Label3.Caption := 'Disconnected'; - Label3.Font.Color := clRed; // Stayed with Red, generated a high contrast across all of the various combinations - // Attempted to use clHighlight, but it did not show up like a highlight. - end; -end; - - - -procedure TfrmBrokerExample.AboutExampleClick(Sender: TObject); -begin - ShowAboutBox; -end; - - -procedure TfrmBrokerExample.FormCreate(Sender: TObject); -begin -{ - CoInitialize(nil); // needed for CCOW -} -end; - -procedure TfrmBrokerExample.rgArrayTypeClick(Sender: TObject); -begin - if rgArrayType.ItemIndex = 0 then - spnNumbers.Value := 500 - else - spnNumbers.Value := 5000; -end; - -procedure TfrmBrokerExample.actBackwardCompatibleExecute(Sender: TObject); -begin - if actBackwardCompatible.Checked then - actBackwardCompatible.Checked := False - else - actBackwardCompatible.Checked := True; -end; - -procedure TfrmBrokerExample.actDebugModeExecute(Sender: TObject); -begin - if actDebugMode.Checked then - actDebugMode.Checked := False - else - actDebugMode.Checked := True; -end; - -procedure TfrmBrokerExample.actUserContextExecute(Sender: TObject); -begin - if actuserContext.Checked then - actUserContext.Checked := False - else - actUserContext.Checked := True; -end; - -procedure TfrmBrokerExample.actOldConnectionOnlyExecute(Sender: TObject); -begin - if actOldConnectionOnly.Checked then - begin - actOldConnectionOnly.Checked := False; - actBackwardCompatible.Enabled := True; - end - else - begin - actOldConnectionOnly.Checked := True; - actBackwardCompatible.Enabled := False; - end; -end; - -procedure TfrmBrokerExample.OnCCOWCommit(Sender: TObject); -begin -{ // uses CCOWRPCBroker - if RpcBroker1.WasUserDefined and RpcBroker1.IsUserCleared then - Halt; -} -end; - -end. - - diff --git a/BDK32/Samples/RPCBroker/BrokerEx/fBrokerExampleCCOW.dfm b/BDK32/Samples/RPCBroker/BrokerEx/fBrokerExampleCCOW.dfm deleted file mode 100644 index a079aa3..0000000 --- a/BDK32/Samples/RPCBroker/BrokerEx/fBrokerExampleCCOW.dfm +++ /dev/null @@ -1,615 +0,0 @@ -object frmBrokerExampleCCOW: TfrmBrokerExampleCCOW - Left = 247 - Top = 112 - BorderStyle = bsSingle - Caption = 'RPCBroker Example CCOW-enabled (p40)' - ClientHeight = 389 - ClientWidth = 473 - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clBtnText - Font.Height = -13 - Font.Name = 'System' - Font.Style = [] - Menu = MainMenu1 - OldCreateOrder = True - Position = poScreenCenter - OnCreate = FormCreate - PixelsPerInch = 96 - TextHeight = 16 - object GroupBox2: TGroupBox - Left = 8 - Top = 0 - Width = 457 - Height = 73 - Caption = 'VistA Server' - TabOrder = 0 - object Label2: TLabel - Left = 6 - Top = 51 - Width = 67 - Height = 16 - AutoSize = False - Caption = 'Status:' - end - object Label3: TLabel - Left = 73 - Top = 51 - Width = 88 - Height = 16 - Caption = 'Disconnected' - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clRed - Font.Height = -13 - Font.Name = 'System' - Font.Style = [] - ParentColor = False - ParentFont = False - end - object btnConnect: TButton - Left = 354 - Top = 12 - Width = 91 - Height = 25 - Caption = '&Connect' - Default = True - TabOrder = 2 - OnClick = btnConnectClick - end - object edtPort: TEdit - Left = 192 - Top = 24 - Width = 49 - Height = 24 - Hint = 'Listener port number' - ParentShowHint = False - ShowHint = True - TabOrder = 1 - Text = '9200' - OnChange = edtServerChange - end - object edtServer: TEdit - Left = 8 - Top = 24 - Width = 177 - Height = 24 - Hint = 'Name of server or IP address' - ParentShowHint = False - ShowHint = True - TabOrder = 0 - Text = 'BROKERSERVER' - OnChange = edtServerChange - end - object BitBtn1: TBitBtn - Left = 354 - Top = 44 - Width = 91 - Height = 25 - TabOrder = 3 - Kind = bkClose - end - object btnGetServerInfo: TBitBtn - Left = 248 - Top = 24 - Width = 73 - Height = 25 - Hint = 'GetServerInfo' - Caption = 'Server' - ParentShowHint = False - ShowHint = True - TabOrder = 4 - OnClick = btnGetServerInfoClick - Glyph.Data = { - 76010000424D7601000000000000760000002800000020000000100000000100 - 04000000000000010000120B0000120B00001000000000000000000000000000 - 800000800000008080008000000080008000808000007F7F7F00BFBFBF000000 - FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00333000000000 - 00333FF777777777773F0000FFFFFFFFFF0377773F3F3F3F3F7308880F0F0F0F - 0FF07F33737373737337088880FFFFFFFFF07F3337FFFFFFFFF7088880000000 - 00037F3337777777777308888033330F03337F3337F3FF7F7FFF088880300000 - 00007F3337F7777777770FFFF030FFFFFFF07F3FF7F7F3FFFFF708008030F000 - 00F07F7737F7F77777F70FFFF030F0AAE0F07F3FF7F7F7F337F708008030F0DA - D0F07F7737F7F7FFF7F70FFFF030F00000F07F33F7F7F77777370FF9F030FFFF - FFF07F3737F7FFFFFFF70FFFF030000000007FFFF7F777777777000000333333 - 3333777777333333333333333333333333333333333333333333} - NumGlyphs = 2 - end - object cbxBackwardCompatible: TCheckBox - Left = 186 - Top = 54 - Width = 161 - Height = 17 - Action = actBackwardCompatible - State = cbChecked - TabOrder = 5 - end - end - object PageControl1: TPageControl - Left = 8 - Top = 76 - Width = 457 - Height = 305 - ActivePage = TabSheet1 - TabOrder = 1 - object TabSheet1: TTabSheet - Caption = 'Echo string' - object lblSend: TLabel - Left = 8 - Top = 24 - Width = 96 - Height = 16 - Caption = 'Original string:' - end - object lblReturn: TLabel - Left = 8 - Top = 144 - Width = 93 - Height = 16 - Caption = 'Echoed string:' - end - object edtStrOrig: TEdit - Left = 8 - Top = 40 - Width = 225 - Height = 24 - TabOrder = 0 - Text = 'Hello World!' - end - object edtStrRtrn: TEdit - Left = 8 - Top = 160 - Width = 225 - Height = 24 - ReadOnly = True - TabOrder = 1 - end - object btnEchoString: TButton - Left = 8 - Top = 88 - Width = 225 - Height = 25 - Hint = 'XWB EXAMPLE ECHO STRING' - Caption = 'Execute RPC' - Default = True - ParentShowHint = False - ShowHint = True - TabOrder = 2 - OnClick = btnEchoStringClick - end - object Memo1: TMemo - Left = 240 - Top = 8 - Width = 201 - Height = 257 - TabStop = False - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -13 - Font.Name = 'MS Sans Serif' - Font.Style = [] - Lines.Strings = ( - 'Uses TRPCBroker.Call method ' - 'to return a single string.' - '' - 'Original string passed in as ' - 'PType literal.' - '' - 'RPC: XWB EXAMPLE ECHO ' - 'STRING.' - '' - 'Return Value Type: SINGLE ' - 'VALUE.') - ParentColor = True - ParentFont = False - ReadOnly = True - TabOrder = 3 - end - end - object TabSheet2: TTabSheet - Caption = 'Pass by reference' - object Label1: TLabel - Left = 8 - Top = 24 - Width = 70 - Height = 16 - Caption = 'Reference:' - end - object Label4: TLabel - Left = 8 - Top = 144 - Width = 40 - Height = 16 - Caption = 'Value:' - end - object edtReference: TEdit - Left = 8 - Top = 40 - Width = 225 - Height = 24 - TabOrder = 0 - Text = '$HOROLOG' - end - object edtValue: TEdit - Left = 8 - Top = 160 - Width = 225 - Height = 24 - ReadOnly = True - TabOrder = 1 - end - object btnPassByRef: TButton - Left = 8 - Top = 88 - Width = 225 - Height = 25 - Hint = 'XWB GET VARIABLE VALUE' - Caption = 'Execute RPC' - Default = True - ParentShowHint = False - ShowHint = True - TabOrder = 2 - OnClick = btnPassByRefClick - end - object Memo2: TMemo - Left = 240 - Top = 8 - Width = 201 - Height = 257 - TabStop = False - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -13 - Font.Name = 'MS Sans Serif' - Font.Style = [] - Lines.Strings = ( - 'Uses TRPCBroker.strCall ' - 'method to return a single string.' - '' - 'Parameter passed in as PType ' - 'reference.' - '' - 'RPC: XWB GET VARIABLE ' - 'VALUE.' - '' - 'Return Value Type: SINGLE ' - 'VALUE.') - ParentColor = True - ParentFont = False - ReadOnly = True - TabOrder = 3 - end - end - object TabSheet3: TTabSheet - Caption = 'Get list' - object Label5: TLabel - Left = 8 - Top = 120 - Width = 87 - Height = 16 - Caption = 'Returned list:' - end - object lstData: TListBox - Left = 8 - Top = 136 - Width = 225 - Height = 129 - ItemHeight = 16 - TabOrder = 0 - end - object btnGetList: TButton - Left = 8 - Top = 88 - Width = 225 - Height = 25 - Hint = 'XWB EXAMPLE GET LIST' - Caption = 'Execute RPC' - Default = True - ParentShowHint = False - ShowHint = True - TabOrder = 1 - OnClick = btnGetListClick - end - object RadioButton1: TRadioButton - Left = 16 - Top = 16 - Width = 137 - Height = 17 - Caption = 'Number of lines' - Checked = True - TabOrder = 2 - TabStop = True - end - object RadioButton2: TRadioButton - Left = 16 - Top = 48 - Width = 137 - Height = 17 - Caption = 'Kilobytes of data' - TabOrder = 3 - end - object spnLines: TSpinEdit - Left = 160 - Top = 16 - Width = 65 - Height = 26 - MaxValue = 0 - MinValue = 0 - TabOrder = 4 - Value = 50 - end - object spnKbytes: TSpinEdit - Left = 160 - Top = 48 - Width = 65 - Height = 26 - MaxValue = 0 - MinValue = 0 - TabOrder = 5 - Value = 32 - end - object Memo3: TMemo - Left = 240 - Top = 8 - Width = 201 - Height = 257 - TabStop = False - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -13 - Font.Name = 'MS Sans Serif' - Font.Style = [] - Lines.Strings = ( - 'Uses TRPCBroker.Call method ' - 'to return several strings.' - '' - 'Two parameters passed in as ' - 'PType literal.' - '' - 'RPC: XWB EXAMPLE GET LIST.' - '' - 'Return Value Type: GLOBAL ' - 'ARRAY.' - '' - 'WORD WRAP ON field is True ' - 'to break appart call result into ' - 'separate Results strings instead ' - 'of one long Results[0] string.') - ParentColor = True - ParentFont = False - ReadOnly = True - TabOrder = 6 - end - end - object TabSheet4: TTabSheet - Caption = 'WP Text' - object lblList: TLabel - Left = 8 - Top = 56 - Width = 177 - Height = 17 - AutoSize = False - Caption = 'REMOTE PROCEDURE file description:' - end - object btnWPText: TButton - Left = 8 - Top = 16 - Width = 225 - Height = 25 - Hint = 'XWB EXAMPLE WPTEXT' - Caption = 'Execute RPC' - Default = True - ParentShowHint = False - ShowHint = True - TabOrder = 0 - OnClick = btnWPTextClick - end - object mmoText: TMemo - Left = 8 - Top = 80 - Width = 225 - Height = 185 - ReadOnly = True - ScrollBars = ssVertical - TabOrder = 1 - end - object Memo4: TMemo - Left = 240 - Top = 8 - Width = 201 - Height = 257 - TabStop = False - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -13 - Font.Name = 'MS Sans Serif' - Font.Style = [] - Lines.Strings = ( - 'Uses TRPCBroker.lstCall ' - 'method to return several strings.' - '' - 'No parameters are used in this ' - 'call.' - '' - 'RPC: XWB EXAMPLE WPTEXT.' - '' - 'Return Value Type: WORD ' - 'PROCESSING.' - '' - 'WORD WRAP ON field is False ' - 'to allow memo box to control ' - 'word wrapping as necessary.') - ParentColor = True - ParentFont = False - ReadOnly = True - TabOrder = 2 - end - end - object TabSheet5: TTabSheet - Caption = 'Sort numbers' - object Label6: TLabel - Left = 8 - Top = 120 - Width = 87 - Height = 16 - Caption = 'Returned list:' - end - object Label7: TLabel - Left = 8 - Top = 8 - Width = 72 - Height = 16 - Caption = 'How many:' - end - object lblStatus: TLabel - Left = 8 - Top = 56 - Width = 57 - Height = 16 - Caption = 'lblStatus' - Visible = False - end - object lstSorted: TListBox - Left = 8 - Top = 136 - Width = 225 - Height = 129 - ItemHeight = 16 - TabOrder = 0 - end - object btnSortNum: TButton - Left = 8 - Top = 88 - Width = 225 - Height = 25 - Hint = 'XWB EXAMPLE SORT NUMBERS' - Caption = 'Execute RPC' - Default = True - ParentShowHint = False - ShowHint = True - TabOrder = 1 - OnClick = btnSortNumClick - end - object spnNumbers: TSpinEdit - Left = 8 - Top = 24 - Width = 81 - Height = 26 - MaxValue = 10000 - MinValue = 0 - TabOrder = 2 - Value = 500 - end - object rgrDirection: TRadioGroup - Left = 104 - Top = 8 - Width = 121 - Height = 65 - Caption = 'Sort direction' - ItemIndex = 0 - Items.Strings = ( - 'low -> high' - 'high -> low') - TabOrder = 3 - end - object Memo5: TMemo - Left = 240 - Top = 88 - Width = 201 - Height = 177 - TabStop = False - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -13 - Font.Name = 'MS Sans Serif' - Font.Style = [] - ParentColor = True - ParentFont = False - ReadOnly = True - ScrollBars = ssVertical - TabOrder = 4 - end - object rgArrayType: TRadioGroup - Left = 240 - Top = 8 - Width = 185 - Height = 65 - Caption = 'Array Type' - ItemIndex = 0 - Items.Strings = ( - 'Local' - 'Global') - TabOrder = 5 - OnClick = rgArrayTypeClick - end - end - end - object MainMenu1: TMainMenu - Left = 160 - Top = 320 - object mnuOptions: TMenuItem - Caption = '&Options' - object mnuOptOldConnectionOnly: TMenuItem - Action = actOldConnectionOnly - Caption = 'Old Connection Type Only' - end - object mnuOptBackwardCompatible: TMenuItem - Action = actBackwardCompatible - end - object mnuOptDebugMode: TMenuItem - Action = actDebugMode - end - object mnuOptUserContext: TMenuItem - Action = actUserContext - end - end - object mnuHelp: TMenuItem - Caption = '&Help' - object AboutExample: TMenuItem - Caption = '&About RPC Broker Example...' - OnClick = AboutExampleClick - end - end - end - object Timer1: TTimer - OnTimer = Timer1Timer - Left = 16 - Top = 320 - end - object ActionList1: TActionList - Left = 52 - Top = 295 - object actBackwardCompatible: TAction - Caption = '&Backward Compatible' - Checked = True - OnExecute = actBackwardCompatibleExecute - end - object actOldConnectionOnly: TAction - Caption = '&Old Connection Only' - OnExecute = actOldConnectionOnlyExecute - end - object actDebugMode: TAction - Caption = '&Debug Mode' - OnExecute = actDebugModeExecute - end - object actUserContext: TAction - Caption = '&CCOW User Context' - Checked = True - OnExecute = actUserContextExecute - end - end - object RPCBroker1: TCCOWRPCBroker - ClearParameters = True - ClearResults = True - Connected = False - ListenerPort = 9200 - RpcVersion = '0' - Server = 'BROKERSERVER' - KernelLogIn = True - LogIn.Mode = lmAVCodes - LogIn.PromptDivision = False - OldConnectionOnly = False - Left = 108 - Top = 327 - end -end diff --git a/BDK32/Samples/RPCBroker/BrokerEx/fBrokerExampleCCOW.pas b/BDK32/Samples/RPCBroker/BrokerEx/fBrokerExampleCCOW.pas deleted file mode 100644 index 64198ed..0000000 --- a/BDK32/Samples/RPCBroker/BrokerEx/fBrokerExampleCCOW.pas +++ /dev/null @@ -1,444 +0,0 @@ -{************************************************** -RPC Broker Example form ver. 1.1 9/3/97 - Broker Development Team - San Francisco IRM Field Office, Dept. of Veterans Affairs - -Disclaimer: - This example does not attempt to teach general Delphi and M programming. - We intentionally removed any safeguards from the code that prevents - passing values that are too small or too large. Therefore, the important - code remains uncluttered and the programmer is free to experiment and - push the program beyond its limits. - -Purpose: - This sample application is an example of how to program client/server - applications in Delphi and M using the RPC Broker. The demonstrated features - include: - - Connecting to an M server - - Creating an application context - - Using the GetServerInfo function - - Displaying the VistA splash screen - - Setting the TRPCBroker Param property for each Param PType (literal, - reference, list) - - Calling RPCs with the Call method - - Calling RPCs with the lstCall and strCall methods - - We encourage you to study the Delphi and M source code to see how the - Broker is used to accomplish these tasks. Try changing some of the - RPCBroker1 component properties to see what happens. Also, try other - values in the fields of the remote procedure records in the - REMOTE PROCEDURE file. - -Warning: "Get list" and "Sort numbers" tabs can potentially take excessively -large data samples which can either crash server process or cause the -connection timeout. Final note, memory allocation errors are not recorded -in the Kernel error trap. They are recorded in the operating system error -trap. - -Context option for this application: - XWB BROKER EXAMPLE - -Remote procedures used: - XWB EXAMPLE ECHO STRING - XWB EXAMPLE GET LIST - XWB EXAMPLE SORT NUMBERS - XWB EXAMPLE WPTEXT - XWB GET VARIABLE VALUE - -Server M routine: - XWBEXMPL -**************************************************} -unit fBrokerExampleCCOW; - -interface - -uses - SysUtils,Forms, StdCtrls,Graphics, Dialogs, WinTypes, - Controls, Classes, ExtCtrls, TRPCB, XWBut1, MFunStr, Menus, WinProcs, - RpcConf1, Spin, ComCtrls, fVistAAbout, Buttons, - ActiveX, ActnList, CCOWRPCBroker, OleCtrls, VERGENCECONTEXTORLib_TLB; - -type - TfrmBrokerExampleCCOW = class(TForm) - GroupBox2: TGroupBox; - Label2: TLabel; - Label3: TLabel; - MainMenu1: TMainMenu; - mnuHelp: TMenuItem; - AboutExample: TMenuItem; - btnConnect: TButton; - edtPort: TEdit; - edtServer: TEdit; - PageControl1: TPageControl; - TabSheet1: TTabSheet; - TabSheet2: TTabSheet; - TabSheet3: TTabSheet; - TabSheet4: TTabSheet; - TabSheet5: TTabSheet; - lblSend: TLabel; - edtStrOrig: TEdit; - lblReturn: TLabel; - edtStrRtrn: TEdit; - btnEchoString: TButton; - lblList: TLabel; - Label1: TLabel; - edtReference: TEdit; - Label4: TLabel; - edtValue: TEdit; - btnPassByRef: TButton; - lstData: TListBox; - Label5: TLabel; - btnGetList: TButton; - btnWPText: TButton; - Label6: TLabel; - lstSorted: TListBox; - btnSortNum: TButton; - spnNumbers: TSpinEdit; - Label7: TLabel; - rgrDirection: TRadioGroup; - RadioButton1: TRadioButton; - RadioButton2: TRadioButton; - spnLines: TSpinEdit; - spnKbytes: TSpinEdit; - Timer1: TTimer; - mmoText: TMemo; - lblStatus: TLabel; - BitBtn1: TBitBtn; - btnGetServerInfo: TBitBtn; - Memo1: TMemo; - Memo2: TMemo; - Memo3: TMemo; - Memo4: TMemo; - Memo5: TMemo; - rgArrayType: TRadioGroup; - cbxBackwardCompatible: TCheckBox; - mnuOptions: TMenuItem; - mnuOptBackwardCompatible: TMenuItem; - mnuOptDebugMode: TMenuItem; - mnuOptUserContext: TMenuItem; - mnuOptOldConnectionOnly: TMenuItem; - ActionList1: TActionList; - actBackwardCompatible: TAction; - actOldConnectionOnly: TAction; - actDebugMode: TAction; - actUserContext: TAction; - RPCBroker1: TCCOWRPCBroker; - procedure AboutExampleClick(Sender: TObject); - procedure btnEchoStringClick(Sender: TObject); - procedure btnConnectClick(Sender: TObject); - procedure btnPassByRefClick(Sender: TObject); - procedure btnGetListClick(Sender: TObject); - procedure btnSortNumClick(Sender: TObject); - procedure btnWPTextClick(Sender: TObject); - procedure Timer1Timer(Sender: TObject); - procedure btnGetServerInfoClick(Sender: TObject); - procedure edtServerChange(Sender: TObject); - procedure FormCreate(Sender: TObject); - procedure rgArrayTypeClick(Sender: TObject); - procedure actBackwardCompatibleExecute(Sender: TObject); - procedure actDebugModeExecute(Sender: TObject); - procedure actUserContextExecute(Sender: TObject); - procedure actOldConnectionOnlyExecute(Sender: TObject); - public - procedure OnCCOWCommit(Sender: TObject); // CCOW related - procedure HandlePendingEvent(Sender: TObject; const aContextItemCollection: - IDispatch); -end; - - - -var - frmBrokerExampleCCOW: TfrmBrokerExampleCCOW; - ContextorControl1: TContextorControl; // CCOW related - - -implementation - -uses fOkToTerminate; - -{$R *.DFM} - -procedure TfrmBrokerExampleCCOW.btnEchoStringClick(Sender: TObject); -begin - RPCBroker1.RemoteProcedure := 'XWB EXAMPLE ECHO STRING'; - RPCBroker1.Param[0].Value := edtStrOrig.Text; - RPCBroker1.Param[0].PType := literal; - RPCBroker1.Call; //execute RPC - edtStrRtrn.Text := RPCBroker1.Results[0]; //for single value use Results[0] -end; - - - -procedure TfrmBrokerExampleCCOW.btnPassByRefClick(Sender: TObject); -begin - RPCBroker1.RemoteProcedure := 'XWB GET VARIABLE VALUE'; - RPCBroker1.Param[0].Value := edtReference.Text; - RPCBroker1.Param[0].PType := reference; - edtValue.Text := RPCBroker1.strCall; //execute RPC and show result in one call -end; - - - -procedure TfrmBrokerExampleCCOW.btnGetListClick(Sender: TObject); -begin - RPCBroker1.RemoteProcedure := 'XWB EXAMPLE GET LIST'; - if RadioButton1.Checked then begin - RPCBroker1.Param[0].Value := 'LINES'; - RPCBroker1.Param[0].PType := literal; - RPCBroker1.Param[1].Value := IntToStr(spnLines.Value); - RPCBroker1.Param[1].PType := literal; - end - else begin - RPCBroker1.Param[0].Value := 'KILOBYTES'; - RPCBroker1.Param[0].PType := literal; - RPCBroker1.Param[1].Value := IntToStr(spnKbytes.Value); - RPCBroker1.Param[1].PType := literal - end; - RPCBroker1.Call; //execute RPC - lstData.Items := RPCBroker1.Results; //show results of the call -end; - - - -procedure TfrmBrokerExampleCCOW.btnWPTextClick(Sender: TObject); -begin - RPCBroker1.RemoteProcedure := 'XWB EXAMPLE WPTEXT'; - RPCBroker1.lstCall(mmoText.Lines); //execute RPC and show results in one call -end; - - - -procedure TfrmBrokerExampleCCOW.btnSortNumClick(Sender: TObject); -var - I, SaveRPCTimeLimit, DefaultRange: integer; -begin - lblStatus.Visible := True; //turn on status label - lblStatus.Caption := 'building'; //tell user what's happenning - Application.ProcessMessages; //give Windows chance to paint - with RPCBroker1 do - begin - if rgArrayType.ItemIndex = 0 then - begin - RemoteProcedure := 'XWB EXAMPLE SORT NUMBERS'; - DefaultRange := 10000; - end - else - begin - RemoteProcedure := 'XWB EXAMPLE GLOBAL SORT'; - DefaultRange := 100000; - end; - - if rgrDirection.ItemIndex = 0 then Param[0].Value := 'LO' - else Param[0].Value := 'HI'; - Param[0].PType := literal; - with Param[1] do begin - if rgArrayType.ItemIndex = 0 then - PType := list //tells Broker to pass Mult - else - PType := global; - for I := 0 to spnNumbers.Value - 1 do //build Mult one by one - Mult['"A'+IntToStr(I)+'"'] := IntToStr(Random(DefaultRange)+1); //subscript and value are strings! - end; - lblStatus.Caption := 'RPC running'; - Application.ProcessMessages; //give Windows chance to paint - SaveRPCTimeLimit := RPCTimeLimit; - RPCTimeLimit := spnNumbers.Value div 10; //adjust in case a lot of numbers - Call; //execute RPC - lstSorted.Items := Results; //show results of the call - RPCTimeLimit := SaveRPCTimeLimit; //restore original value - end; - lblStatus.Visible := False; //turn off status label -end; - - - -procedure TfrmBrokerExampleCCOW.btnConnectClick(Sender: TObject); -begin - if btnConnect.Caption = '&Connect' then - begin //connect - RpcBroker1.IsBackwardCompatibleConnection := actBackwardCompatible.Checked; - RpcBroker1.OldConnectionOnly := actOldConnectionOnly.Checked; - RpcBroker1.DebugMode := actDebugMode.Checked; - if RpcBroker1.IsBackwardCompatibleConnection or RpcBroker1.OldConnectionOnly then - begin - rgArrayType.ItemIndex := 0; - rgArrayType.Enabled := False; - end - else - begin - rgArrayType.Enabled := True; - end; - - // *********************** CCOW User Context **************************** - if actUserContext.Checked then - begin - if (RPCBroker1.Contextor = nil) then - begin - if ContextorControl1 = nil then - begin - ContextorControl1 := TContextorControl.Create(Self); - ContextorControl1.OnCommitted := OnCCOWCommit; - ContextorControl1.OnPending := HandlePendingEvent; - try - ContextorControl1.Run('CCOWTerm#', '', TRUE, '*'); - except - ShowMessage('Problem with Contextor.Run'); - ContextorControl1.Free; - ContextorControl1 := nil; - end; - end; - end; - RPCBroker1.Contextor := ContextorControl1; - end - else - RPCBroker1.Contextor := nil; - - // *********************** End CCOW User Context ************************* - - - RPCBroker1.ClearParameters := True; //try False, see what happens - try - RPCBroker1.Connected := True; - //establish connection - if not RPCBroker1.CreateContext('XWB BROKER EXAMPLE') then - ShowMessage('Context could not be created!'); - except - on e: Exception do - ShowMessage('Error: ' + e.Message); - end; - end - else //disconnect - RPCBroker1.Connected := False; -end; - - - -procedure TfrmBrokerExampleCCOW.btnGetServerInfoClick(Sender: TObject); -var - strServer, strPort: string; -begin - if GetServerInfo(strServer, strPort)<> mrCancel then - begin {getsvrinfo} - edtServer.Text := strServer; //use chosen server - edtPort.Text := strPort; //use chosen port - end; -end; - - - -procedure TfrmBrokerExampleCCOW.edtServerChange(Sender: TObject); -begin - RPCBroker1.Server := edtServer.Text; //use specified server name/addr - RPCBroker1.ListenerPort := StrToInt(edtPort.Text); //use specified port -end; - - - -procedure TfrmBrokerExampleCCOW.Timer1Timer(Sender: TObject); -begin - if RPCBroker1.Connected then begin - btnConnect.Caption := '&Disconnect'; - btnConnect.Default := False; - mnuOptions.Enabled := False; - cbxBackwardCompatible.Enabled := False; - Label3.Caption := 'Connected'; - Label3.Font.Color := clLime; // clGreen; // went to lime for higher contrast at some of the High contrast desktops - end - else begin - btnConnect.Caption := '&Connect'; - btnConnect.Default := True; - mnuOptions.Enabled := True; - if not actOldConnectionOnly.Checked then - cbxBackwardCompatible.Enabled := True; - Label3.Caption := 'Disconnected'; - Label3.Font.Color := clRed; // Stayed with Red, generated a high contrast across all of the various combinations - // Attempted to use clHighlight, but it did not show up like a highlight. - end; -end; - - - -procedure TfrmBrokerExampleCCOW.AboutExampleClick(Sender: TObject); -begin - ShowAboutBox; -end; - - -procedure TfrmBrokerExampleCCOW.FormCreate(Sender: TObject); -begin - CoInitialize(nil); // needed for CCOW -end; - -procedure TfrmBrokerExampleCCOW.rgArrayTypeClick(Sender: TObject); -begin - if rgArrayType.ItemIndex = 0 then - spnNumbers.Value := 500 - else - spnNumbers.Value := 5000; -end; - -procedure TfrmBrokerExampleCCOW.actBackwardCompatibleExecute(Sender: TObject); -begin - if actBackwardCompatible.Checked then - actBackwardCompatible.Checked := False - else - actBackwardCompatible.Checked := True; -end; - -procedure TfrmBrokerExampleCCOW.actDebugModeExecute(Sender: TObject); -begin - if actDebugMode.Checked then - actDebugMode.Checked := False - else - actDebugMode.Checked := True; -end; - -procedure TfrmBrokerExampleCCOW.actUserContextExecute(Sender: TObject); -begin - if actuserContext.Checked then - actUserContext.Checked := False - else - actUserContext.Checked := True; -end; - -procedure TfrmBrokerExampleCCOW.actOldConnectionOnlyExecute(Sender: TObject); -begin - if actOldConnectionOnly.Checked then - begin - actOldConnectionOnly.Checked := False; - actBackwardCompatible.Enabled := True; - end - else - begin - actOldConnectionOnly.Checked := True; - actBackwardCompatible.Enabled := False; - end; -end; - -procedure TfrmBrokerExampleCCOW.OnCCOWCommit(Sender: TObject); -begin - if RpcBroker1.WasUserDefined and RpcBroker1.IsUserCleared then - Halt; -end; - -procedure TfrmBrokerExampleCCOW.HandlePendingEvent(Sender: TObject; const - aContextItemCollection: IDispatch); -var - data : IContextItemCollection; -begin - data := IContextItemCollection(aContextItemCollection) ; - if RPCBroker1.IsUserContextPending(data) then - begin - frmOkToTerminate := TfrmOkToTerminate.Create(Self); - try - if not (frmOkToTerminate.ShowModal = mrOK) then - ContextorControl1.SetSurveyResponse('No Way'); - finally - frmOkToTerminate.Free; - end; - end; -end; - -end. - - diff --git a/BDK32/Samples/RPCBroker/BrokerEx/fVistAAbout.dfm b/BDK32/Samples/RPCBroker/BrokerEx/fVistAAbout.dfm deleted file mode 100644 index 9966ef6..0000000 --- a/BDK32/Samples/RPCBroker/BrokerEx/fVistAAbout.dfm +++ /dev/null @@ -1,1201 +0,0 @@ -object frmVistAAbout: TfrmVistAAbout - Left = 279 - Top = 106 - BorderStyle = bsDialog - Caption = 'About' - ClientHeight = 236 - ClientWidth = 353 - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'MS Sans Serif' - Font.Style = [] - OldCreateOrder = True - Position = poScreenCenter - OnCreate = FormCreate - PixelsPerInch = 96 - TextHeight = 13 - object Panel1: TPanel - Left = 8 - Top = 8 - Width = 337 - Height = 185 - BevelInner = bvRaised - BevelOuter = bvLowered - ParentColor = True - TabOrder = 0 - object VistaLogo: TImage - Left = 8 - Top = 8 - Width = 153 - Height = 73 - Center = True - Picture.Data = { - 07544269746D61702A880000424D2A8800000000000036000000280000009600 - 00004D0000000100180000000000F48700000000000000000000000000000000 - 0000C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C00000C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C00000C0C0C0C0C0C0DDDDDDFFFFFFDDDDDDCCCCCCB2B2B2CC - CCCCF1F1F1DDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1DDDDDDCCCCCCCCCCCCC0C0C0C0C0C0DDDDDDF1F1F1F1F1F1DDDDDDCCCC - CCFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1FF - FFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFDDDDDD - DDDDDDDDDDDDF1F1F1FFFFFFFFFFFFFFFFFFDDDDDDF1F1F1F1F1F1F1F1F1FFFF - FFFFFFFFFFFFFFDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1CCCCCCF1F1F1F1F1F1F1F1F1 - F1F1F1C0C0C0FFFFFFC0C0C0DDDDDDDDDDDDF1F1F1F1F1F1FFFFFFFFFFFFFFFF - FFDDDDDDDDDDDDCCCCCCF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1 - F1F1F1F1F1F1F1F1F1F1F1DDDDDDCCCCCCC0C0C0F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDDDDDF1F1F1DDDDDDF1F1 - F1FFFFFFF1F1F1DDDDDD999999CCCCCCF1F1F1CCCCCCCCCCCCF1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1DDDDDDCCCCCCF1F1F1F1F1F1DDDDDDCCCCCCB2B2B2 - CCCCCCC0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0F1F1F1FFFFFFF1F1F1DDDDDD - FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1CCCCCCB2B2B2CCCCCCF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1 - F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1DDDDDDDDDDDDDDDDDDDDDDDDF1F1F1F1F1F1F1F1F1DDDDDDCCCCCCF1F1F1F1 - F1F1FFFFFFFFFFFFDDDDDDC0C0C0F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1FFFFFFF1F1 - F1F1F1F1DDDDDDCCCCCCF1F1F1DDDDDDFFFFFFF1F1F1F1F1F1FFFFFFFFFFFFFF - FFFFFFFFFFF1F1F1DDDDDDCCCCCCF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1DDDDDDC0C0C0DDDDDDF1F1F1F1F1F1FFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1FF - FFFFFFFFFFF1F1F1DDDDDDC0C0C0CCCCCCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDDDDDDDCCCCCCFFFFFFDDDDDDB2B2B2C0C0 - C0FFFFFFFFFFFFC0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0FFFFFFFFFFFFF1F1 - F1F1F1F1CCCCCCFFFFFFCCCCCCF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1CCCCCCFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1FFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFF1F1F1DDDDDDF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1 - F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1DDDDDDDDDDDDDDDDDDDDDDDDCCCCCCC0C0C0CCCCCCC0C0C0DDDDDD - F1F1F1FFFFFFFFFFFFFFFFFFB2B2B2C0C0C0F1F1F1F1F1F1F1F1F1F1F1F1FFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1FFFFFFFFFFFFF1 - F1F1F1F1F1F1F1F1DDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFF - FFFFFFFFFFFFF1F1F1DDDDDDC0C0C0DDDDDDF1F1F1F1F1F1F1F1F1FFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1CCCCCCCCCCCCF1F1F1F1F1F1FF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFF1F1F1F1F1F1DDDDDDC0C0C0FFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFC0C0C0F1 - F1F1F1F1F1FFFFFFFFFFFFC0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0FFFFFFFF - FFFFF1F1F1F1F1F1DDDDDDFFFFFFC0C0C0FFFFFFF1F1F1CCCCCCF1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDDDDDDDDDDDDDC0C0C0CCCCCCCCCCCCCCCC - CCF1F1F1F1F1F1FFFFFFFFFFFFF1F1F1CCCCCCDDDDDDF1F1F1F1F1F1F1F1F1F1 - F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFF1F1F1CCCCCCCCCCCCDDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1 - F1FFFFFFFFFFFFFFFFFFF1F1F1C0C0C0CCCCCCF1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1C0C0C0DDDDDDF1F1F1 - F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDDDDDDDC0C0C0FFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDD - C0C0C0F1F1F1FFFFFFFFFFFFFFFFFFC0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0 - F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1CCCCCCC0C0C0DDDDDDCCCCCCDDDDDDDDDD - DDCCCCCCF1F1F1F1F1F1DDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1DDDDDDF1 - F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1C0C0C0F1F1F1FFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1CCCCCCCCCCCCFFFFFFFF - FFFFF1F1F1F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1DDDDDDDDDDDDF1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1FFFFFFFFFF - FFF1F1F1F1F1F1F1F1F1DDDDDDFFFFFFFFFFFFFFFFFFDDDDDDF1F1F1F1F1F1F1 - F1F1F1F1F1FFFFFFFFFFFFFFFFFFC0C0C0DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1DDDDDDC0C0C0F1F1 - F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1FFFFFFFFFFFFFF - FFFFDDDDDDCCCCCCC0C0C0C0C0C0CCCCCCC0C0C0CCCCCCB2B2B2F1F1F1FFFFFF - FFFFFFFFFFFFFFFFFFF1F1F1DDDDDDC0C0C0CCCCCCCCCCCCCCCCCCDDDDDDC0C0 - C0CCCCCCDDDDDDFFFFFFFFFFFFFFFFFFFFFFFFC0C0C0C0C0C0C0C0C00000C0C0 - C0C0C0C0F1F1F1FFFFFFF1F1F1F1F1F1DDDDDDC0C0C0F1F1F1FFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDDDDDDDF1F1F1DDDDDDDDDDDDDDDDDD - CCCCCCF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDC0C0C0FFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFF1 - F1F1F1F1F1F1F1F1F1F1F1DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1C0C0C0C0C0C0 - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1DDDDDDDDDD - DDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FF - FFFFFFFFFFF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFDDDDDDF1F1F1F1F1F1 - FFFFFFF1F1F1F1F1F1F1F1F1FFFFFFF1F1F1DDDDDDF1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1DDDDDDCCCCCCC0C0C0F1 - F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFF - FFFFFFFFFFFFC0C0C0CCCCCCDDDDDDF1F1F1F1F1F1DDDDDDDDDDDDDDDDDDFFFF - FFFFFFFFFFFFFFFFFFFFDDDDDDDDDDDDCCCCCCF1F1F1F1F1F1F1F1F1FFFFFFFF - FFFFF1F1F1FFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFC0C0C0C0C0C0C0C0C0 - 0000C0C0C0C0C0C0F1F1F1DDDDDDF1F1F1F1F1F1C0C0C0CCCCCCFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDDDDDDDDDDDDDDDDDDDDDDDDDDD - DDDDDDDD0000FFF1F1F1FFFFFFF1F1F1F1F1F1FFFFFFF1F1F1DDDDDDDDDDDDFF - FFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFF1F1F1F1F1F1DDDDDDF1F1F1F1F1F1F1F1F1CCCCCCCCCCCCC0C0C0C0C0 - C0DDDDDDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1DD - DDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1DDDDDDF1F1F1F1F1F1DDDDDDF1F1 - F1F1F1F1DDDDDDF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1FF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1DDDDDDCCCCCCC0C0C0 - F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1FFFFFFDDDDDDDDDDDDC0C0C0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1C0C0C0C0C0C0C0C0C0FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1 - F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0C0C0C0C0 - C0C0C0C00000C0C0C0C0C0C0F1F1F1F1F1F1F1F1F1F1F1F1CCCCCCDDDDDDFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDDDDDDDDDDDDDDDDDDD - DDDDDDDDDDDDDDDD0000FFF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1DDDDDD - DDDDDDCCCCCCF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFF1F1F1CCCCCCCCCCCCF1F1F1F1F1F1F1F1F1CCCCCCCCCCCCCC - CCCCDDDDDDF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDD - F1F1F1DDDDDDDDDDDDF1F1F1DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1DDDDDDF1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1CCCCCCF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDC0C0 - C0DDDDDDFFFFFFFFFFFFF1F1F1F1F1F1DDDDDDFFFFFFF1F1F1F1F1F1F1F1F1F1 - F1F1FFFFFFFFFFFFF1F1F1DDDDDDC0C0C0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - FFFFFFF1F1F1FFFFFFFFFFFFF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1FFFF - FFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1C0 - C0C0C0C0C0C0C0C00000C0C0C0C0C0C0F1F1F1DDDDDDDDDDDDDDDDDDDDDDDDF1 - F1F1FFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDDDDDDDDDDD - C0C0C0C0C0C0C0C0C0B2B2B20000FF0000FFFFFFFFFFFFFFFFFFFFFFFFFFF1F1 - F1DDDDDDDDDDDDF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFDDDDDDDDDDDDCCCCCCDDDDDDFFFFFFFFFFFFFFFFFFF1F1F1 - F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDDDDDDDDD - DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDCCCCCCF1F1F1F1F1F1F1F1F1FFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDDDDDDDDDDDDDF1F1F1 - F1F1F1F1F1F1F1F1F1DDDDDDC0C0C0F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFF - FFF1F1F1FFFFFFFFFFFFF1F1F1DDDDDDF1F1F1F1F1F1F1F1F1DDDDDDDDDDDDC0 - C0C0C0C0C0FFFFFFFFFFFFFFFFFFFFFFFFC0C0C0DDDDDDF1F1F1F1F1F1F1F1F1 - FFFFFFF1F1F1FFFFFFFFFFFFF1F1F1F1F1F1DDDDDDF1F1F1F1F1F1F1F1F1FFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFF1F1F1F1F1F1DD - DDDDCCCCCCDDDDDDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1 - F1F1F1C0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0CCCCCCCCCCCCDDDDDDDDDDDD - FFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCCCC - CCC0C0C0DDDDDDF1F1F1F1F1F10000FF0000FF0000FF0000FFFFFFFFF1F1F1F1 - F1F1F1F1F1DDDDDDDDDDDDCCCCCCC0C0C0DDDDDDFFFFFFFFFFFFF1F1F1F1F1F1 - F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1DDDDDDDDDDDDF1F1F1F1F1F1F1F1 - F1C0C0C0F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFC0C0C0C0C0C0CC - CCCCF1F1F1DDDDDDDDDDDDCCCCCCCCCCCCCCCCCCB2B2B2F1F1F1F1F1F1F1F1F1 - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1CCCCCCCCCCCCF1F1F1F1F1F1FFFFFFFFFFFFF1 - F1F1F1F1F1F1F1F1F1F1F1FFFFFFF1F1F1DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1 - CCCCCCC0C0C0DDDDDDFFFFFFFFFFFFFFFFFFF1F1F1CCCCCCF1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFF - FFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1 - DDDDDDDDDDDDCCCCCCDDDDDDF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1 - F1F1F1F1F1F1F1C0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0F1F1F1F1F1F1FFFF - FFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFC0C0C0C0C0C0F1F1F1F1F1F1FFFFFF0000FF0000FF0000FF0000FF0000FF - F1F1F1F1F1F1F1F1F1DDDDDDDDDDDDB2B2B2FFFFFFFFFFFFFFFFFFF1F1F1DDDD - DDF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1FFFFFFF1F1F1DDDDDDF1 - F1F1F1F1F1C0C0C0F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1FFFFFFCCCCCC - DDDDDDF1F1F1FFFFFFDDDDDDCCCCCCB2B2B2DDDDDDB2B2B2C0C0C0F1F1F1F1F1 - F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1 - F1F1F1F1F1DDDDDDF1F1F1F1F1F1F1F1F1CCCCCCDDDDDDF1F1F1FFFFFFFFFFFF - FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFDDDDDDDDDDDDF1F1F1DDDDDDF1F1 - F1F1F1F1B2B2B2DDDDDDF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1FFFFFFF1F1F1F1F1F1DDDDDDF1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1 - F1F1F1F1F1F1F1F1F1F1F1C0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0FFFFFFFF - FFFFFFFFFFFFFFFFF1F1F1F1F1F1DDDDDDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - F1F1F1DDDDDDDDDDDDF1F1F1F1F1F1F1F1F1FFFFFF0000FF0000FF0000FF0000 - FF0000FF0000FFF1F1F1F1F1F1F1F1F1DDDDDDCCCCCCFFFFFFFFFFFFF1F1F1DD - DDDDC0C0C0F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFF1F1F1 - DDDDDDDDDDDDCCCCCCC0C0C0F1F1F1F1F1F1DDDDDDC0C0C0F1F1F1F1F1F1F1F1 - F1FFFFFFF1F1F1F1F1F1F1F1F1CCCCCCC0C0C0DDDDDDF1F1F1FFFFFFF1F1F1F1 - F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1 - F1F1F1F1F1F1C0C0C0C0C0C0CCCCCCF1F1F1F1F1F1CCCCCCDDDDDDFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1FFFFFFFFFFFFF1F1F1DDDDDDF1F1F1F1 - F1F1CCCCCCB2B2B2DDDDDDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1 - FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1CCCC - CCCCCCCCDDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDDD - DDDDDDDDDDCCCCCCC0C0C0F1F1F1F1F1F1F1F1F1CCCCCCDDDDDDFFFFFFFFFFFF - FFFFFFF1F1F1F1F1F1DDDDDDDDDDDDC0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0 - FFFFFFFFFFFFFFFFFFDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDF1F1F1F1F1F1F1F1 - F1DDDDDDDDDDDDDDDDDDDDDDDDF1F1F1F1F1F1F1F1F1FFFFFF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FFF1F1F1F1F1F1F1F1F1CCCCCCFFFFFFFFFFFF - FFFFFFDDDDDDC0C0C0F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1 - F1F1F1F1DDDDDDF1F1F1CCCCCCF1F1F1F1F1F1FFFFFFF1F1F1C0C0C0F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDDDDDDDF1F1F1FFFFFFF1F1F1FFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1 - F1FFFFFFFFFFFFC0C0C0DDDDDDF1F1F1F1F1F1FFFFFFF1F1F1DDDDDDF1F1F1F1 - F1F1F1F1F1FFFFFFFFFFFFF1F1F1FFFFFFF1F1F1F1F1F1FFFFFFFFFFFFDDDDDD - CCCCCCC0C0C0C0C0C0DDDDDDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1 - F1CCCCCCDDDDDDF1F1F1F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1FFFFFFFFFFFFFF - FFFFFFFFFFF1F1F1F1F1F1FFFFFFF1F1F1F1F1F1DDDDDDDDDDDDDDDDDDDDDDDD - F1F1F1B2B2B2C0C0C0CCCCCCDDDDDDFFFFFFF1F1F1F1F1F1CCCCCCCCCCCCFFFF - FFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1C0C0C0C0C0C0C0C0C00000C0C0 - C0C0C0C0FFFFFFFFFFFFFFFFFFDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDF1F1F1F1 - F1F1F1F1F1DDDDDDDDDDDDF1F1F1DDDDDDF1F1F1F1F1F1FFFFFFFFFFFF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FFF1F1F1F1F1F1F1F1F1CCCCCCFFFF - FFFFFFFFFFFFFFDDDDDDCCCCCCF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1 - F1F1F1F1F1F1F1F1DDDDDDDDDDDDC0C0C0F1F1F1F1F1F1F1F1F1DDDDDDCCCCCC - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFF1F1F1FFFFFFFFFFFFF1 - F1F1F1F1F1FFFFFFFFFFFFCCCCCCF1F1F1F1F1F1FFFFFFFFFFFFF1F1F1DDDDDD - FFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFDDDDDDC0C0C0C0C0C0DDDDDDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFDDDDDDC0C0C0F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDDDDDF1F1F1DDDDDDDDDDDDDDDD - DDDDDDDDCCCCCCC0C0C0DDDDDDFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDB2B2B2C0 - C0C0F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1C0C0C0C0C0C0C0C0C0 - 0000C0C0C0C0C0C0FFFFFFFFFFFFDDDDDDDDDDDDF1F1F1F1F1F1DDDDDDF1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1CCCCCCFFFFFFFFFFFFFFFFFFDDDD - DD0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFF1F1F1F1F1F1F1 - F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1CCCCCCF1F1F1FFFFFFFFFFFFF1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDDDDDDDF1F1F1F1F1F1FFFFFFFFFF - FFF1F1F1F1F1F1FFFFFFF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFF1F1F1FFFFFFFFFFFFFFFFFFC0C0C0F1F1F1FFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFF1F1F1F1F1F1F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFF1F1F1CCCCCCCCCCCCF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFCCCCCCF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFF1F1F1F1F1F1F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1FFFFFFDDDDDDCC - CCCCCCCCCCDDDDDDB2B2B2FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDCCCCCC - DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1C0C0C0C0C0 - C0C0C0C00000C0C0C0C0C0C0FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1C0C0C0C0C0C0DDDDDDFFFFFFF1F1F1DD - DDDDDDDDDD0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFF1F1F1 - F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1C0C0C0DDDDDDF1F1F1F1F1F1FFFF - FFDDDDDDDDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FF - FFFFF1F1F1CCCCCCF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFF1F1F1FFFFFFFFFFFFFFFFFF999999C0C0C0FFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFDDDDDDDDDDDDF1F1F1F1F1F1DDDDDDCCCCCCFFFFFFFFFFFFFF - FFFFFFFFFFF1F1F1F1F1F1DDDDDDDDDDDDDDDDDDCCCCCCDDDDDDFFFFFFFFFFFF - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDF1F1F1FFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFF1F1F1F1F1F1C0C0C0DDDDDDF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFF - FFFFFFF1F1F1F1F1F1DDDDDDF1F1F1FFFFFFFFFFFFF1F1F1DDDDDDCCCCCCFFFF - FFF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDF1F1F1C0 - C0C0C0C0C0C0C0C00000C0C0C0C0C0C0FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1DDDDDDDDDDDDB2B2B2DDDDDDF1F1F1F1F1F1FFFFFF - FFFFFFDDDDDDDDDDDD0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FFDDDDDDC0C0C0C0C0C0CCCCCCDDDDDDC0C0C0F1F1F1F1F1F1FF - FFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDCCCCCC - F1F1F1FFFFFFC0C0C0C0C0C0F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFCCCCCCCCCCCCFFFFFFDDDDDDCCCCCCDDDDDDF1F1F1FFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1DDDDDDC0C0C0DDDDDDF1F1F1 - FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1CCCCCCC0C0C0C0C0C0CCCCCCFFFFFFF1F1 - F1F1F1F1F1F1F1DDDDDDDDDDDDF1F1F1F1F1F1DDDDDDF1F1F1FFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1DDDDDDB2B2B2F1F1F1 - FFFFFFDDDDDDDDDDDDC0C0C0DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFF - FFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFDDDDDDDDDDDDCC - CCCCF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1DDDDDD - C0C0C0C0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0FFFFFFFFFFFFFFFFFFFFFFFF - F1F1F1F1F1F1F1F1F1DDDDDDDDDDDDDDDDDDDDDDDDCCCCCCFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFDDDDDDDDDDDD0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FFC0C0C0B2B2B2CCCCCCF1F1F1F1F1F1DDDDDDF1F1F1 - F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1FFFFFFF1F1F1F1F1F1DDDD - DDFFFFFFFFFFFFFFFFFFC0C0C0CCCCCCF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFF1F1F1DDDDDDC0C0C0CCCCCCFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1CCCCCCC0C0C0F1F1 - F1F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1CCCCCCB2B2B2C0C0C0CCCCCCF1F1F1FF - FFFFF1F1F1DDDDDDDDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDC0C0 - C0FFFFFFDDDDDDF1F1F1CCCCCCC0C0C0F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFF - FFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFDDDDDD - DDDDDDF1F1F1DDDDDDF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1C0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0FFFFFFFFFFFFFFFF - FFF1F1F1F1F1F1F1F1F1DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDCCCCCCF1F1F1F1 - F1F1F1F1F1F1F1F1FFFFFFDDDDDDDDDDDD0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FFF1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1FFFFFFDDDDDDCC - CCCCC0C0C0FFFFFFF1F1F1F1F1F1CCCCCCDDDDDDFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFDDDDDDDDDDDDCCCCCCF1F1F1FFFFFFFFFFFFFFFFFFF1F1F1FFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1DDDDDDC0C0C0F1 - F1F1F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1C0C0C0C0C0C0FFFFFFFFFFFFFFFFFF - FFFFFFF1F1F1CCCCCCB2B2B2CCCCCCC0C0C0CCCCCCF1F1F1F1F1F1F1F1F1DDDD - DDFFFFFFCCCCCCF1F1F1F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1C0 - C0C0DDDDDDFFFFFFFFFFFFF1F1F1DDDDDDF1F1F1F1F1F1F1F1F1FFFFFFFFFFFF - FFFFFFFFFFFFF1F1F1DDDDDDDDDDDDF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFDDDDDDDDDDDDCCCCCCF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1 - F1F1F1F1F1FFFFFFFFFFFFC0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0FFFFFFFF - FFFFF1F1F1F1F1F1CCCCCCC0C0C0C0C0C0CCCCCCDDDDDDF1F1F1F1F1F1CCCCCC - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1CCCCCCDDDDDD0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFFFFFFFFFF1F1F1F1 - F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDDDDDDDF1F1F1F1F1F1 - FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDB2B2B2C0C0C0FFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1C0C0C0F1F1F1FFFFFFFFFFFFF1F1F1F1 - F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1CCCCCC - DDDDDDF1F1F1FFFFFFFFFFFFF1F1F1F1F1F1CCCCCCDDDDDDFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1CCCCCCCCCCCCCC - CCCCDDDDDDFFFFFFC0C0C0F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1C0C0C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1FFFF - FFFFFFFFFFFFFFCCCCCCC0C0C0B2B2B2DDDDDDF1F1F1FFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFDDDDDDF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0 - FFFFFFFFFFFFF1F1F1F1F1F1B2B2B2C0C0C0CCCCCCCCCCCCDDDDDDC0C0C0C0C0 - C0C0C0C0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F10000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFFF - FFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1CCCCCCCCCCCCF1F1 - F1F1F1F1FFFFFFFFFFFFDDDDDDF1F1F1F1F1F1CCCCCCC0C0C0DDDDDDF1F1F1FF - FFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1CCCCCCFFFFFFFFFFFFFFFFFF - F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1DDDD - DDDDDDDDDDDDDDF1F1F1F1F1F1FFFFFFF1F1F1F1F1F1C0C0C0F1F1F1FFFFFFFF - FFFFFFFFFFF1F1F1FFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFF1F1F1F1F1F1CCCCCCF1F1F1FFFFFFFFFFFFF1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1C0C0C0FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1 - F1F1FFFFFFFFFFFFF1F1F1B2B2B2C0C0C0C0C0C0F1F1F1F1F1F1FFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDDDDDF1F1F1FFFFFFFFFFFFF1F1F1FFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0C0C0C0C0C0C0C0C00000C0C0 - C0C0C0C0F1F1F1FFFFFFF1F1F1CCCCCCDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F10000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1DDDDDDC0 - C0C0F1F1F1FFFFFFFFFFFFFFFFFFDDDDDDDDDDDDCCCCCCC0C0C0F1F1F1F1F1F1 - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1CCCCCCCCCCCCF1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1FFFFFF - FFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1 - F1F1F1F1F1F1F1F1F1F1F1DDDDDDFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDC0C0C0 - F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFF - FFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFDDDDDDDDDDDDCCCCCCC0C0C0F1F1F1FF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFC0C0C0C0C0C0C0C0C0 - 0000C0C0C0C0C0C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1 - F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F10000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1DDDDDDC0C0C0 - B2B2B2CCCCCCFFFFFFFFFFFFFFFFFFDDDDDDDDDDDD999999C0C0C0FFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCCCCCCC0C0C0CCCCCCF1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1DDDDDDF1F1F1CCCCCCDDDDDDDDDDDDF1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDDDDDDDC0C0C0DDDDDDFF - FFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFF - FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1DDDDDDDDDDDDFFFFFFFFFFFFDDDDDDCCCC - CCDDDDDDFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFF - FFFFFFFFFFFFFFFFDDDDDDF1F1F1F1F1F1DDDDDDC0C0C0CCCCCCCCCCCCDDDDDD - F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1C0C0C0C0C0 - C0C0C0C00000C0C0C0C0C0C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1 - F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1FFFFFFFFFFFFF1 - F1F10000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FFF1F1F1F1F1F1F1F1F1DDDDDDC0C0 - C0CCCCCCCCCCCCDDDDDDFFFFFFFFFFFFFFFFFFDDDDDDDDDDDDC0C0C0DDDDDDFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDDDDDDDDDDDF1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1CCCCCCFFFFFFFFFFFFF1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDDDDDDDCCCCCC - F1F1F1FFFFFFFFFFFFFFFFFFDDDDDDF1F1F1FFFFFFFFFFFFF1F1F1FFFFFFF1F1 - F1FFFFFFFFFFFFFFFFFFDDDDDDDDDDDDDDDDDDCCCCCCDDDDDDFFFFFFF1F1F1DD - DDDDCCCCCCF1F1F1DDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - FFFFFFFFFFFFFFFFFFFFFFFFDDDDDDF1F1F1DDDDDDCCCCCCB2B2B2F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDDDDDDDDDDDDDCCCCCCC0 - C0C0C0C0C0C0C0C00000C0C0C0C0C0C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFDDDDDDF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1FFFFFFFFFFFF - F1F1F1F1F1F10000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFF1F1F1DDDDDDDDDDDDC0 - C0C0DDDDDDF1F1F1F1F1F1FFFFFFFFFFFFDDDDDDDDDDDDDDDDDDC0C0C0DDDDDD - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFF1F1F1F1F1 - F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1 - F1F1F1F1F1CCCCCCCCCCCCDDDDDDDDDDDDC0C0C0B2B2B2CCCCCCF1F1F1FFFFFF - F1F1F1F1F1F1DDDDDDF1F1F1F1F1F1F1F1F1DDDDDDCCCCCCF1F1F1DDDDDDDDDD - DDDDDDDDFFFFFFFFFFFFF1F1F1C0C0C0F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1F1 - F1F1F1F1F1FFFFFFFFFFFFDDDDDDCCCCCCCCCCCCCCCCCCCCCCCCDDDDDDF1F1F1 - F1F1F1F1F1F1FFFFFFFFFFFFDDDDDDFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDDDDDDDDDDDDDDDDDB2B2B2CCCCCCFF - FFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDD - F1F1F1C0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0FFFFFFFFFFFFFFFFFFF1F1F1 - F1F1F1F1F1F1CCCCCCF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFF1F1F1CCCCCCC0C0C00000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFC0C0C0 - 999999DDDDDDF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFDDDDDDDDDDDDDDDDDDF1F1 - F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFF1F1F1FFFFFFFFFFFFFF - FFFFF1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1DDDDDDC0C0C0 - F1F1F1F1F1F1DDDDDDC0C0C0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFF - FFFFFFFFF1F1F1DDDDDDF1F1F1F1F1F1DDDDDDC0C0C0CCCCCCF1F1F1FFFFFFF1 - F1F1DDDDDDDDDDDDF1F1F1DDDDDDCCCCCCDDDDDDFFFFFFFFFFFFFFFFFFF1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1CCCCCCDDDDDDF1 - F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1CCCCCCDDDDDDFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1C0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0F1F1F1FFFFFFF1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFF1F1F1F1F1F1F1F1F1F1F1F10000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FFF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDDDDDDDDDDDDD - DDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1CCCC - CCFFFFFFF1F1F1DDDDDDC0C0C0B2B2B2DDDDDDF1F1F1F1F1F1FFFFFFFFFFFFFF - FFFFFFFFFFF1F1F1FFFFFFF1F1F1DDDDDDF1F1F1F1F1F1FFFFFFFFFFFFFFFFFF - FFFFFFF1F1F1DDDDDDF1F1F1F1F1F1CCCCCCCCCCCCF1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1 - F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1DDDDDDC0C0C0 - CCCCCCF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1FFFF - FFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFF1F1F1C0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0DDDDDDF1 - F1F1F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F10000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1FFFFFFF1F1F1 - CCCCCCCCCCCCF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDF1F1F1F1 - F1F1DDDDDDF1F1F1FFFFFFFFFFFFCCCCCCCCCCCCDDDDDDF1F1F1F1F1F1FFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1CCCCCCDDDDDDF1F1F1F1F1F1DDDDDDF1F1 - F1FFFFFFFFFFFFF1F1F1DDDDDDF1F1F1F1F1F1CCCCCCCCCCCCF1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDDDDDDDDDDDDDDD - DDC0C0C0CCCCCCF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1FFFFFFFF - FFFFFFFFFFDDDDDDCCCCCCCCCCCCF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1 - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0 - DDDDDDF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDDD - DDF1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F10000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFF - FFFFFFFFFFFFFFF1F1F1DDDDDDCCCCCCCCCCCCDDDDDDDDDDDDDDDDDDDDDDDDDD - DDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDDDDDDDDDDDDD - DDDDDDCCCCCCC0C0C0F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1 - F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1DD - DDDDF1F1F1FFFFFFF1F1F1DDDDDDDDDDDDDDDDDDDDDDDDC0C0C0CCCCCCF1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1 - F1F1F1F1F1F1F1F1F1F1DDDDDDF1F1F1FFFFFFFFFFFFFFFFFFDDDDDDDDDDDDDD - DDDDDDDDDDC0C0C0DDDDDDF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1DDDDDDF1F1F1FFFFFFFFFFFFFFFFFFFFFF - FFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1C0C0C0C0C0C0C0C0C00000C0C0 - C0C0C0C0C0C0C0F1F1F1FFFFFFFFFFFFF1F1F1FFFFFFFFFFFFF1F1F1F1F1F1F1 - F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F10000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1CCCCCCCCCCCCCCCCCC - CCCCCCCCCCCCDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1C0C0C0C0C0C0DDDD - DDCCCCCCF1F1F1DDDDDDF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1 - F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1FFFFFFF1F1F1DDDDDDDDDDDDCCCCCCC0C0C0C0C0C0DDDD - DDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1 - F1F1DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1DDDDDDF1F1F1FFFFFFFFFFFFDDDDDD - DDDDDDDDDDDDDDDDDDCCCCCCF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDC0C0C0C0C0C0C0C0C0 - 0000C0C0C0C0C0C0CCCCCCF1F1F1FFFFFFF1F1F1F1F1F1FFFFFFFFFFFFF1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1CCCCCCDDDDDDF1F1F10000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1C0C0C0DD - DDDDF1F1F1F1F1F1FFFFFFF1F1F1F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDDDDDDDDDDDDD999999B2B2B2DD - DDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFF - FFFFFFF1F1F1DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFF1F1 - F1DDDDDDDDDDDDDDDDDDDDDDDDCCCCCCF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1 - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1DDDDDDC0C0C0C0C0 - C0C0C0C00000C0C0C0C0C0C0FFFFFFF1F1F1FFFFFFF1F1F1F1F1F1FFFFFFF1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDF1F1F1F1F1F1C0C0C0DDDDDDFFFFFF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FFF1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFF1 - F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFCCCCCCF1F1F1F1F1F1F1F1F1F1F1F1 - CCCCCCF1F1F1F1F1F1F1F1F1FFFFFFF1F1F1DDDDDDF1F1F1DDDDDDF1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDCCCCCCDDDDDDCCCCCCC0C0C0DDDDDD - F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFF - FFFFFFFFF1F1F1DDDDDDDDDDDDDDDDDDDDDDDDCCCCCCFFFFFFF1F1F1F1F1F1DD - DDDDDDDDDDDDDDDDDDDDDDDDDDDDF1F1F1CCCCCCDDDDDDFFFFFFFFFFFFFFFFFF - F1F1F1F1F1F1CCCCCCF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1 - F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCCCCCCDDDDDDF1F1F1F1F1F1C0 - C0C0C0C0C0C0C0C00000C0C0C0C0C0C0FFFFFFF1F1F1DDDDDDF1F1F1F1F1F1F1 - F1F1DDDDDDCCCCCCCCCCCCF1F1F1F1F1F1F1F1F1F1F1F1C0C0C0DDDDDDF1F1F1 - FFFFFF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1DDDDDDFFFFFFF1F1F1F1F1 - F1F1F1F1CCCCCCDDDDDDFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1DDDDDDCCCCCCC0 - C0C0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1C0C0C0C0C0C0CCCCCCF1F1F1DDDDDDF1F1 - F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFCCCCCCCCCCCCCCCCCCFFFFFFF1F1F1DDDDDDDDDDDDF1F1F1F1F1F1 - F1F1F1DDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1CCCCCCCCCCCCFFFFFFFFFF - FFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1 - F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFF1F1F1 - F1F1F1C0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0FFFFFFDDDDDDF1F1F1FFFFFF - F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1CCCCCCC0C0C0F1F1 - F1F1F1F1FFFFFF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1 - F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1FFFFFFF1 - F1F1F1F1F1F1F1F1CCCCCCDDDDDDF1F1F1FFFFFFFFFFFFFFFFFFF1F1F1DDDDDD - C0C0C0C0C0C0F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1C0C0C0CCCCCCF1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFF1F1F1FFFFFFDDDDDDF1F1F1F1F1F1FFFFFFF1F1F1DDDDDDDDDDDDF1F1 - F1F1F1F1DDDDDDCCCCCCDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1CCCCCCCCCCCCF1 - F1F1F1F1F1FFFFFFDDDDDDDDDDDDDDDDDDF1F1F1DDDDDDDDDDDDDDDDDDDDDDDD - F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFDDDDDDF1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1C0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0FFFFFFF1F1F1F1F1 - F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDDDDDDDF1 - F1F1F1F1F1F1F1F1FFFFFF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFF1F1F1F1F1F1DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDCCCCCCFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFDDDDDDCCCCCCDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFF - FFFFF1F1F1F1F1F1F1F1F1F1F1F1DDDDDDDDDDDDDDDDDDCCCCCCC0C0C0F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFF - FFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFDDDDDDDD - DDDDDDDDDDDDDDDDDDDDDDFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1CCCCCC - DDDDDDF1F1F1F1F1F1F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1DDDDDDDDDDDDDDDD - DDDDDDDDDDDDDDDDDDDDCCCCCCDDDDDDC0C0C0CCCCCCB2B2B2F1F1F1F1F1F1FF - FFFFFFFFFFFFFFFFF1F1F1C0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0FFFFFFF1 - F1F1DDDDDDDDDDDDDDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1FFFFFF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDDDDDDDDDDDDDF1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1CCCCCCFFFFFFFFFFFFFF - FFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD - DDF1F1F1FFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFCCCCCCF1F1F1FF - FFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1DDDDDDDDDDDDF1F1F1FFFFFFDDDDDD - DDDDDDDDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1DDDDDDC0C0C0F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1CCCCCCC0C0C0DD - DDDDDDDDDDCCCCCCCCCCCC999999DDDDDDDDDDDDFFFFFFFFFFFFDDDDDDFFFFFF - FFFFFFFFFFFFFFFFFFF1F1F1DDDDDDC0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0 - F1F1F1FFFFFFDDDDDDDDDDDDF1F1F1CCCCCCF1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDDDDDF1F1F1DDDDDDDDDDDDF1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1DDDDDDF1F1F1F1F1F1DDDDDDCCCCCCCCCCCCFFFFFF - FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFF - FFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFDDDDDDDDDDDDDD - DDDDDDDDDDDDDDDDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDDDDD - F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1DDDDDDDDDDDDF1F1F1FFFF - FFF1F1F1DDDDDDDDDDDDDDDDDDDDDDDDF1F1F1DDDDDDF1F1F1F1F1F1F1F1F1DD - DDDDC0C0C0C0C0C0B2B2B2F1F1F1F1F1F1F1F1F1FFFFFFF1F1F1DDDDDDC0C0C0 - DDDDDDF1F1F1CCCCCCCCCCCCC0C0C0C0C0C0FFFFFFFFFFFFFFFFFFFFFFFFF1F1 - F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1C0C0C0C0C0C0C0C0C00000C0C0 - C0C0C0C0F1F1F1F1F1F1CCCCCCDDDDDDDDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F10000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FFFFFFFFFFFFFFFFFFFF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFCCCCCCCCCC - CCDDDDDDF1F1F1DDDDDDCCCCCCF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1C0C0C0C0C0C0C0C0C0 - 0000C0C0C0C0C0C0FFFFFFFFFFFFFFFFFFFFFFFFDDDDDDF1F1F1F1F1F1FFFFFF - FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F10000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FFF1F1F1F1F1F10000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1 - F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFF1F1F1DDDDDDC0C0C0C0C0C0CCCCCCDDDDDDCCCCCCC0C0C0C0C0 - C0C0C0C00000C0C0C0C0C0C0FFFFFFF1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1 - F1F1F1F1F1F1F1DDDDDDCCCCCCF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFF1F1F10000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFF - FFFFFFFFF1F1F1F1F1F1DDDDDDCCCCCCDDDDDDFFFFFFFFFFFFFFFFFFFFFFFFC0 - C0C0C0C0C0C0C0C00000C0C0C0C0C0C0F1F1F1CCCCCCFFFFFFFFFFFFFFFFFFFF - FFFFF1F1F1F1F1F1F1F1F1F1F1F1DDDDDDF1F1F1FFFFFFFFFFFFFFFFFFFFFFFF - FFFFFF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFDDDDDDF1F1F1 - F1F1F1F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFF - FFC0C0C0F1F1F1F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFF - FFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - CCCCCCDDDDDDF1F1F1F1F1F1F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1DDDDDDDDDD - DDDDDDDDDDDDDDCCCCCCF1F1F1F1F1F1FFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFF - FFFFDDDDDDDDDDDDDDDDDDF1F1F1FFFFFFFFFFFFF1F1F1F1F1F1C0C0C0F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1FF - FFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFF - F1F1F1C0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0DDDDDDDDDDDDDDDDDDF1F1F1 - FFFFFFFFFFFFF1F1F1CCCCCCC0C0C0CCCCCCDDDDDDFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFF1F1F10000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FFF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1 - F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1FFFFFFFFFF - FFF1F1F1DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFF1F1F1DDDDDDDDDDDDDD - DDDDDDDDDDF1F1F1F1F1F1DDDDDDF1F1F1F1F1F1F1F1F1DDDDDDDDDDDDCCCCCC - F1F1F1F1F1F1DDDDDDCCCCCCF1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1DDDDDDF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1FF - FFFFF1F1F1DDDDDDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1 - F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1FFFFFFFFFFFFC0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0DDDDDDDDDDDDC0C0 - C0CCCCCCF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFF1F1F1FFFFFFF1F1F1DD - DDDDDDDDDDDDDDDDDDDDDD0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFFF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FFFFFFFFFFFFFFFFFFFFFFFFFF800000800000800000F1F1F1 - FFFFFFF1F1F1FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1FFFFFFFFFFFF8000008000 - 00800000800000800000800000800000800000800000FFFFFFC0C0C0DDDDDDCC - CCCCDDDDDDC0C0C0DDDDDDF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1800000 - 800000800000DDDDDDCCCCCCC0C0C0C0C0C0DDDDDD0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FFDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1DDDDDDCCCCCCF1F1F10000FF0000FF0000FF0000FF0000FF0000FF0000FF - F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1DDDDDDFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFF1F1F1F1F1F1DDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1FFFFFFC0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0DDDDDDDD - DDDDCCCCCCCCCCCCF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFF - F1F1F1DDDDDDDDDDDDDDDDDDDDDDDD0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFFFFF - FFFF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FFFFFFFFFFFFFFFFFFFFFFFFFF8000008000008000 - 00800000FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F180 - 0000800000800000800000800000800000800000800000800000800000DDDDDD - F1F1F1DDDDDDF1F1F1DDDDDDF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1 - F1F1F1F1800000800000800000C0C0C0C0C0C0DDDDDDF1F1F10000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FFF1F1F1FFFFFFF1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1DDDDDDCCCCCCF1F1F10000FF0000FF0000FF0000FF0000FF0000 - FF0000FFF1F1F1F1F1F1FFFFFFF1F1F1DDDDDDF1F1F1FFFFFFF1F1F1FFFFFFFF - FFFFFFFFFFFFFFFFF1F1F1F1F1F1DDDDDDC0C0C0F1F1F1F1F1F1F1F1F1FFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1C0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0 - DDDDDDDDDDDDC0C0C0DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFF - FFFFFFFFF1F1F1DDDDDDDDDDDDDDDDDD0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - F1F1F1DDDDDD0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FFF1F1F1F1F1F1FFFFFFFFFFFFFF - FFFF800000800000800000F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1800000 - 8000008000008000008000008000008000008000008000008000008000008000 - 00800000800000800000F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1FFFFFFFFFFFFF1 - F1F1F1F1F1F1F1F1800000800000800000800000CCCCCCFFFFFFFFFFFFF1F1F1 - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFF1F1F1DDDD - DDDDDDDDDDDDDDDDDDDDDDDDDDCCCCCCFFFFFFFFFFFF0000FF0000FF0000FF00 - 00FF0000FF0000FFF1F1F1F1F1F1FFFFFFDDDDDDDDDDDDCCCCCCF1F1F1F1F1F1 - FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1C0C0C0CCCCCCF1F1F1F1F1F1FFFF - FFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1FFFFFFC0C0C0C0C0C0C0C0C00000C0C0 - C0C0C0C0F1F1F1CCCCCCF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1CCCCCC0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FFF1F1F1FFFFFFDDDDDD0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFF1F1F1DDDDDD - F1F1F1F1F1F1F1F1F1800000800000800000F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1800000800000800000800000800000F1F1F1DDDDDDDDDDDDFFFFFFFFFFFFFF - FFFFFFFFFF800000800000800000800000800000FFFFFFF1F1F1F1F1F1DDDDDD - DDDDDDCCCCCCC0C0C0F1F1F1DDDDDD800000800000800000800000FFFFFFFFFF - FFF1F1F1F1F1F1F1F1F10000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FFCCCCCCDDDDDDCCCCCCDDDDDDC0C0C0DDDDDDFFFFFFFFFFFFFFFFFF0000FF - 0000FF0000FF0000FF0000FF0000FFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1FFFF - FFF1F1F1DDDDDDFFFFFFFFFFFFF1F1F1F1F1F1DDDDDDC0C0C0CCCCCCF1F1F1F1 - F1F1FFFFFFF1F1F1F1F1F1F1F1F1DDDDDDCCCCCCB2B2B2C0C0C0C0C0C0C0C0C0 - 0000C0C0C0C0C0C0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1CCCCCC0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FFF1F1F1F1F1F1F1F1F10000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFDDDD - DDDDDDDDF1F1F1F1F1F1F1F1F1800000800000800000DDDDDDF1F1F1DDDDDDF1 - F1F1F1F1F1800000800000800000800000F1F1F1DDDDDDDDDDDDDDDDDDFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1800000800000800000F1F1F1F1F1F1F1F1 - F1DDDDDDDDDDDD999999B2B2B2F1F1F1DDDDDDDDDDDD800000800000800000FF - FFFFFFFFFFF1F1F1FFFFFFFFFFFF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FFF1F1F1F1F1F1DDDDDDDDDDDDDDDDDDFFFFFFF1F1F1F1F1F1F1F1 - F10000FF0000FF0000FF0000FF0000FF0000FFFFFFFFFFFFFFFFFFFFF1F1F1FF - FFFFFFFFFFFFFFFFDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1DDDDDDC0C0C0CCCCCC - F1F1F1F1F1F1FFFFFFF1F1F1F1F1F1DDDDDDDDDDDDC0C0C0CCCCCCC0C0C0C0C0 - C0C0C0C00000C0C0C0C0C0C0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F10000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F10000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FFF1F1F1F1F1F1DDDDDDF1F1F1800000800000800000DDDDDD - DDDDDDF1F1F1DDDDDD800000800000800000800000F1F1F1DDDDDDDDDDDDDDDD - DDDDDDDDDDDDDDCCCCCCF1F1F1F1F1F1F1F1F1F1F1F180000080000080000080 - 0000F1F1F1C0C0C0B2B2B2DDDDDDFFFFFFFFFFFFFFFFFFF1F1F1800000800000 - 800000800000F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1DDDDDDDDDDDDDDDDDDC0C0 - C0CCCCCCF1F1F1FFFFFFFFFFFFF1F1F1F1F1F1CCCCCC999999CCCCCCF1F1F1C0 - C0C0C0C0C0C0C0C00000C0C0C0C0C0C0F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFF - FFFFF1F1F1FFFFFFFFFFFFDDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F100 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FFF1F1F1F1F1F1FFFFFFF1F1F1F1F1F18000008000 - 00800000C0C0C0CCCCCCC0C0C0C0C0C0800000800000800000F1F1F1DDDDDDDD - DDDDDDDDDDCCCCCCC0C0C0DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFF - 800000800000800000CCCCCCDDDDDDFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDDDDD - DD800000800000800000800000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F100 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDDDDDDDDDDDDDF1 - F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDC0C0C0DDDDDDF1F1F1 - FFFFFFC0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0F1F1F1DDDDDDFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F10000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FFF1F1F1F1F1F1F1F1F1DDDDDD - DDDDDDCCCCCC0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FFF1F1F1F1F1F1F1F1F1F1F1F180 - 0000800000800000800000FFFFFFF1F1F1FFFFFFFFFFFF800000800000800000 - DDDDDDDDDDDDDDDDDDC0C0C0F1F1F1F1F1F1F1F1F1FFFFFFF1F1F1F1F1F1FFFF - FFFFFFFF800000800000800000800000FFFFFFFFFFFFFFFFFFFFFFFFCCCCCCC0 - C0C0C0C0C0C0C0C0CCCCCC800000800000800000FFFFFFFFFFFFFFFFFFFFFFFF - F1F1F1DDDDDD0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDDDDDDDF1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDF1F1F1FFFFFFF1F1F1DDDDDDDDDDDDFFFF - FFF1F1F1FFFFFFC0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0F1F1F1DDDDDDFFFF - FFFFFFFFF1F1F1F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1DDDDDDCCCCCCF1F1F1F1 - F1F1F1F1F1F1F1F10000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFF1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1C0C0C0CCCCCC0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFF1F1F1F1F1F1 - F1F1F1F1F1F1800000800000800000800000FFFFFFFFFFFFFFFFFFFFFFFFF1F1 - F1F1F1F1DDDDDDDDDDDDDDDDDDC0C0C0F1F1F1F1F1F1F1F1F1FFFFFFF1F1F1FF - FFFFFFFFFFFFFFFF800000800000800000800000800000FFFFFFFFFFFFFFFFFF - CCCCCCCCCCCCCCCCCCDDDDDDDDDDDD800000800000800000DDDDDDC0C0C0F1F1 - F1F1F1F1F1F1F1DDDDDDF1F1F10000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDFFFFFFF1F1F1DDDDDDF1 - F1F1FFFFFFF1F1F1FFFFFFC0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0C0C0C0DD - DDDDF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1DDDDDDCCCCCCDDDDDD - DDDDDDF1F1F1CCCCCCCCCCCC0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFF1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1DDDDDDF1F1F10000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FFF1F1F1F1F1F1F1F1F1DDDDDD800000800000800000F1F1F1FFFFFFFFFFFFFF - FFFFFFFFFFF1F1F1CCCCCCB2B2B2CCCCCCCCCCCCFFFFFFF1F1F1F1F1F1FFFFFF - F1F1F1FFFFFFFFFFFF800000800000800000800000800000800000F1F1F1FFFF - FFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFF800000800000800000C0 - C0C0FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F10000FF0000FF0000FF - 0000FF0000FF0000FF0000FFF1F1F1FFFFFFFFFFFFFFFFFF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FFFFFFFFF1F1F1F1F1F1FFFFFFFFFFFFF1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDC0C0C0C0C0C0FFFFFFFFFFFF - F1F1F1DDDDDDCCCCCCDDDDDDF1F1F1C0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0 - F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1DDDD - DDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F10000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - FFFFFFFFFFFFF1F1F1DDDDDDF1F1F1F1F1F1FFFFFFFFFFFF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FFF1F1F1DDDDDDDDDDDDDDDDDDDDDDDD800000800000800000FFFFFF - FFFFFFFFFFFFFFFFFFC0C0C0CCCCCCDDDDDDFFFFFFFFFFFFF1F1F1CCCCCCF1F1 - F1FFFFFF800000800000800000800000800000800000800000800000DDDDDDDD - DDDDF1F1F1DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1800000 - 800000800000F1F1F1F1F1F1DDDDDDCCCCCCCCCCCCDDDDDDF1F1F1F1F1F10000 - FF0000FF0000FF0000FF0000FF0000FF0000FFF1F1F1F1F1F1F1F1F1F1F1F100 - 00FF0000FF0000FF0000FF0000FF0000FFF1F1F1F1F1F1F1F1F1FFFFFFFFFFFF - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDB2B2B2C0C0C0DDDDDDFFFFFFFFFF - FFFFFFFFDDDDDDDDDDDDDDDDDDF1F1F1FFFFFFC0C0C0C0C0C0C0C0C00000C0C0 - C0C0C0C0F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1DDDDDDF1F1F1F1F1F1F1F1F1F1F1F10000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FFFFFFFFFFFFFFF1F1F1DDDDDDDDDDDDCCCCCCDDDDDDF1F1F10000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FFCCCCCCCCCCCCDDDDDDCCCCCC8000008000008000 - 00FFFFFFFFFFFFFFFFFFF1F1F1C0C0C0F1F1F1FFFFFFFFFFFFFFFFFFCCCCCCDD - DDDDF1F1F1800000800000800000800000800000800000800000800000800000 - F1F1F1F1F1F1F1F1F1DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1800000800000800000F1F1F1F1F1F1F1F1F1DDDDDDDDDDDDF1F1F1F1F1F1F1 - F1F10000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFFFF1F1F1 - F1F1F10000FF0000FF0000FF0000FF0000FF0000FFF1F1F1F1F1F1F1F1F1FFFF - FFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1DDDDDDC0C0C0C0C0C0DDDDDDFFFFFFFF - FFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFC0C0C0C0C0C0C0C0C0 - 0000C0C0C0C0C0C0FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1DDDDDDDDDDDDCCCCCCF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFF1F1F1F1F1 - F1FFFFFFFFFFFFF1F1F1FFFFFFFFFFFFF1F1F1DDDDDDF1F1F1DDDDDDDDDDDDDD - DDDDFFFFFFFFFFFFFFFFFFFFFFFFC0C0C0CCCCCCCCCCCCF1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F10000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FFF1F1F1F1F1F1DDDDDDF1F1F180 - 0000800000800000800000F1F1F1DDDDDDDDDDDDFFFFFFFFFFFFFFFFFFF1F1F1 - 8000008000008000008000008000008000008000008000008000008000008000 - 00F1F1F1FFFFFFF1F1F1B2B2B2C0C0C0DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1800000800000800000800000FFFFFFF1F1F1F1F1F1FFFFFF - FFFFFFF1F1F1F1F1F1F1F1F10000FF0000FF0000FF0000FF0000FF0000FF0000 - FFF1F1F1F1F1F1F1F1F10000FF0000FF0000FF0000FF0000FFF1F1F1FFFFFFFF - FFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1CCCCCCC0C0C0CCCCCCFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1C0C0C0C0C0 - C0C0C0C00000C0C0C0C0C0C0F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1C0C0C0C0C0C0DDDDDDF1F1F1FFFFFFF1F1F1FFFFFFF1F1F1FF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1DDDDDDFFFFFFFFFFFFF1F1F1F1F1F1CCCCCCFFFFFFF1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F10000FF0000FF0000FF0000FF0000FF0000FFF1F1F100 - 00FF0000FF0000FF0000FFFFFFFF0000FF0000FF0000FF0000FFF1F1F1F1F1F1 - F1F1F1FFFFFF800000800000800000F1F1F1DDDDDDCCCCCCF1F1F1F1F1F1F1F1 - F1F1F1F1800000800000800000800000800000800000800000800000F1F1F1F1 - F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1800000800000800000FFFFFFF1F1F1FFFF - FFFFFFFFFFFFFFFFFFFFCCCCCCC0C0C0C0C0C0F1F1F10000FF0000FF0000FF00 - 00FF0000FF0000FFF1F1F1F1F1F10000FF0000FF0000FF0000FF0000FF0000FF - FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1C0C0C0DDDDDDFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1C0 - C0C0C0C0C0C0C0C00000C0C0C0C0C0C0F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1F1 - F1F1F1F1F1F1F1F1DDDDDDC0C0C0CCCCCCFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1 - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1CCCCCCFFFFFFFFFFFFF1F1F1F1F1F1DDDDDDF1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1FFFFFFF1F1F10000FF0000FF0000FF0000FF0000FF - 0000FFFFFFFF0000FF0000FFFFFFFFFFFFFF0000FF0000FF0000FF0000FFF1F1 - F1F1F1F1F1F1F1FFFFFF800000800000800000800000DDDDDDC0C0C0F1F1F1F1 - F1F1F1F1F1F1F1F1800000800000800000800000800000FFFFFFFFFFFFFFFFFF - FFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFF1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1800000800000800000FF - FFFFFFFFFFFFFFFFFFFFFFF1F1F1B2B2B2C0C0C0CCCCCCDDDDDD0000FF0000FF - 0000FF0000FF0000FF0000FF0000FFF1F1F10000FF0000FF0000FF0000FF0000 - FF0000FFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1CCCCCCCCCCCCF1F1F1FF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1 - F1F1F1C0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0FFFFFFFFFFFFFFFFFFF1F1F1 - F1F1F1DDDDDDDDDDDDDDDDDDDDDDDDC0C0C0CCCCCCFFFFFFF1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1DDDDDDCCCCCCC0C0C0F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFF1F1F10000FF0000FF0000 - FF0000FF0000FF0000FFFFFFFFFFFFFFFFFFFFFFFFFF0000FF0000FF0000FF00 - 00FF0000FFFFFFFFFFFFFFFFFFFFFFFFFF800000800000800000800000CCCCCC - F1F1F1F1F1F1F1F1F1F1F1F1800000800000800000800000FFFFFFFFFFFFFFFF - FFFFFFFFF1F1F1CCCCCCFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDF1F1F1F1F1F1FF - FFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1800000800000 - 800000FFFFFFF1F1F1FFFFFFF1F1F1DDDDDDCCCCCCF1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F10000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FFF1F1F1DDDDDDF1F1F1F1F1F1F1F1F1CCCCCC999999F1F1F1 - F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1 - F1F1F1F1F1F1F1C0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0FFFFFFDDDDDDDDDD - DDDDDDDDDDDDDDDDDDDDDDDDDDF1F1F1DDDDDDC0C0C0CCCCCCF1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1DDDDDDDDDDDDF1F1F1F1F1F1 - F1F1F1F1F1F1CCCCCCC0C0C0DDDDDDF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFDDDD - DDDDDDDDC0C0C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1CCCCCC0000FF00 - 00FF0000FF0000FF0000FFDDDDDDDDDDDDDDDDDDF1F1F1FFFFFFFFFFFF0000FF - 0000FF0000FF0000FF0000FFF1F1F1DDDDDDDDDDDDCCCCCCDDDDDD8000008000 - 00F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1FFFFFF800000800000800000F1F1F1F1 - F1F1DDDDDDC0C0C0CCCCCCCCCCCCFFFFFFFFFFFFF1F1F1DDDDDDC0C0C0800000 - 800000800000F1F1F1F1F1F1F1F1F1FFFFFFF1F1F1F1F1F1FFFFFFFFFFFFFFFF - FF800000800000800000800000F1F1F1F1F1F1F1F1F1DDDDDDF1F1F1F1F1F1F1 - F1F1FFFFFFFFFFFFFFFFFF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FFF1F1F1F1F1F1F1F1F1DDDDDDC0C0C0DDDD - DDF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFF1 - F1F1F1F1F1CCCCCCFFFFFFC0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0F1F1F1F1 - F1F1DDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDFFFFFFFFFFFF - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDD - DDDDDDDDDDDDDDDDDDDDCCCCCCF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFF - FFFFDDDDDDDDDDDDC0C0C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - F1F1F10000FF0000FF0000FFDDDDDDDDDDDDDDDDDDDDDDDDCCCCCCF1F1F1FFFF - FFDDDDDDF1F1F1F1F1F10000FF0000FF0000FFB2B2B2C0C0C0DDDDDDF1F1F180 - 0000800000800000FFFFFFFFFFFFF1F1F1F1F1F1FFFFFF800000800000800000 - 800000DDDDDDB2B2B2CCCCCCFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1CCCC - CC800000800000800000F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1FFFFFFFFFFFFFF - FFFFFFFFFFFFFFFF800000800000800000F1F1F1F1F1F1FFFFFFF1F1F1FFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FFDDDDDDDDDDDDDDDDDDCCCCCCCC - CCCCF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1FFFFFFFFFFFF - F1F1F1DDDDDDCCCCCCCCCCCCFFFFFFC0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0 - F1F1F1F1F1F1DDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFF - FFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFF1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1CCCCCCF1F1F1F1F1F1F1F1F1FFFFFFFFFFFF - FFFFFFFFFFFFC0C0C0C0C0C0B2B2B2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFF1F1F10000FF0000FF0000FF0000FF0000FF0000FF0000FFCCCCCCF1 - F1F1F1F1F10000FF0000FF0000FF0000FF0000FF0000FFCCCCCCDDDDDDF1F1F1 - F1F1F1800000800000800000800000FFFFFFF1F1F1FFFFFFFFFFFFF1F1F18000 - 00800000800000F1F1F1C0C0C0DDDDDDFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1 - F1F1DDDDDD800000800000800000F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1FFFFFF - FFFFFFFFFFFFFFFFFFFFFFFF800000800000800000800000FFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F10000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFDDDDDDDDDDDD - 999999DDDDDDF1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFF - FFF1F1F1F1F1F1CCCCCCB2B2B2DDDDDDFFFFFFC0C0C0C0C0C0C0C0C00000C0C0 - C0C0C0C0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFF - F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1CCCCCCCCCCCCF1F1F1F1F1F1F1F1F1FFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1 - F1F1FFFFFFFFFFFFFFFFFFFFFFFF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FFF1F1F1FFFFFF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFF - FFFFFFFFFFFFFFF1F1F1FFFFFF800000800000800000FFFFFFFFFFFFFFFFFFF1 - F1F1F1F1F1800000800000800000800000800000FFFFFFFFFFFFFFFFFFF1F1F1 - F1F1F1F1F1F1F1F1F1800000800000800000800000FFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDC0C0C0800000800000800000800000FF - FFFFFFFFFFF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1 - FFFFFF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFC0C0 - C0C0C0C0CCCCCCF1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1CCCCCCC0C0C0CC - CCCCFFFFFFF1F1F1F1F1F1C0C0C0DDDDDDFFFFFFFFFFFFC0C0C0C0C0C0C0C0C0 - 0000C0C0C0C0C0C0DDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1DDDDDDC0C0C0DDDDDDF1F1F1FFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1FFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFF1F1F1FFFFFFF1F1F1FFFFFFFFFFFFFFFFFF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FFFFFFFF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FFFFFFFFF1F1F1FFFFFFFFFFFF800000800000800000DDDDDDF1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F18000008000008000008000008000008000 - 00800000800000800000800000800000800000800000800000FFFFFFFFFFFFFF - FFFFFFFFFF800000800000800000800000800000800000800000800000800000 - 800000800000800000800000800000800000800000800000800000F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1B2B2B20000FF0000FF0000FF0000FF0000FF0000FF00 - 00FFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFCCCCCC999999B2B2B2 - F1F1F1F1F1F1FFFFFFC0C0C0C0C0C0CCCCCCF1F1F1FFFFFFFFFFFFC0C0C0C0C0 - C0C0C0C00000C0C0C0C0C0C0F1F1F1F1F1F1F1F1F1DDDDDDDDDDDDDDDDDDDDDD - DDC0C0C0C0C0C0F1F1F1F1F1F1DDDDDDDDDDDDF1F1F1F1F1F1FFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1FFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFF1F1F10000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FFFFFFFFF1F1F1DDDDDDF1F1F1DDDDDD8000008000008000 - 00DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F180000080000080000080 - 0000800000800000800000800000800000800000800000800000FFFFFFF1F1F1 - F1F1F1FFFFFFFFFFFF8000008000008000008000008000008000008000008000 - 00800000800000800000800000800000800000800000800000800000800000F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1C0C0C00000FF0000FF0000FF0000FF0000FF - 0000FF0000FFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1B2B2B2CCCC - CCDDDDDDFFFFFFFFFFFFF1F1F1CCCCCCCCCCCCDDDDDDFFFFFFFFFFFFFFFFFFC0 - C0C0C0C0C0C0C0C00000C0C0C0C0C0C0DDDDDDCCCCCCCCCCCCC0C0C0C0C0C0B2 - B2B2CCCCCCDDDDDDFFFFFFFFFFFFDDDDDDDDDDDDCCCCCCDDDDDDF1F1F1F1F1F1 - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1 - F1CCCCCCCCCCCCFFFFFFF1F1F1F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1FF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFF1F1F1F1F1F1 - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FFF1F1F1F1F1F1DDDDDD80000080 - 0000800000800000F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1DDDDDD800000800000800000800000800000800000800000FFFFFFF1F1 - F1DDDDDDF1F1F1F1F1F1F1F1F1F1F1F180000080000080000080000080000080 - 0000800000800000800000800000800000800000800000800000800000800000 - 800000800000800000F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F10000FF0000 - FF0000FF0000FF0000FFFFFFFFFFFFFFDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFC0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1FFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDDDDDDDDDDDCCCCCCF1F1F1F1 - F1F1F1F1F1FFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1F1 - F1F1DDDDDDC0C0C0F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1DDDDDD - DDDDDDDDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDD - DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDC0C0C0CCCCCCF1F1F1F1F1F1FF - FFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - C0C0C0F1F1F1F1F1F1DDDDDDDDDDDDDDDDDDF1F1F1F1F1F1F1F1F1FFFFFFFFFF - FFFFFFFFF1F1F1F1F1F1F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FF - FFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1CCCCCCF1F1F1F1F1F1F1F1F1 - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1 - F1F1F1F1F1F1F1C0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0F1F1F1F1F1F1F1F1 - F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1 - F1F1FFFFFFFFFFFFF1F1F1DDDDDDFFFFFFFFFFFFFFFFFFDDDDDDDDDDDDDDDDDD - F1F1F1FFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFF1F1F1FFFFFFF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1 - F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1 - F1F1F1F1F1F1CCCCCCC0C0C0F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFDDDDDDF1F1 - F1DDDDDDDDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDF1 - F1F1DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDC0C0C0DDDDDDF1F1F1 - F1F1F1F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1DDDDDDC0C0C0F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1 - F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1CCCCCCDDDDDDF1F1 - F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFC0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0F1F1F1FF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - DDDDDDC0C0C0DDDDDDC0C0C0DDDDDDFFFFFFFFFFFFF1F1F1F1F1F1DDDDDDDDDD - DDDDDDDDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFF - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1 - F1F1F1F1F1F1F1DDDDDDC0C0C0DDDDDDF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1 - F1F1DDDDDDDDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDD - C0C0C0DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1CCCCCCDDDD - DDF1F1F1F1F1F1F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1DDDDDDF1F1F1F1 - F1F1C0C0C0C0C0C0F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1FFFFFFF1F1F1FFFFFF - F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1DDDDDDC0C0C0F1 - F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1 - F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFC0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0 - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFC0C0 - C0CCCCCCCCCCCCDDDDDDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1DD - DDDDDDDDDDDDDDDDDDDDDDDDDDDDF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFF1F1 - F1F1F1F1F1F1F1DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFF1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1C0C0C0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFF - FFFFFFF1F1F1DDDDDDCCCCCCDDDDDDF1F1F1DDDDDDDDDDDDDDDDDDC0C0C0CCCC - CCCCCCCCCCCCCCF1F1F1DDDDDDDDDDDDF1F1F1F1F1F1F1F1F1DDDDDDDDDDDDCC - CCCCF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1DDDDDDDDDDDD - DDDDDDDDDDDDC0C0C0DDDDDDF1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1 - F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1DDDDDD - CCCCCCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFC0C0C0C0C0C0C0C0C00000C0C0 - C0C0C0C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1FFFFFFF1 - F1F1DDDDDDF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1CCCCCC - DDDDDDC0C0C0CCCCCCDDDDDDC0C0C0C0C0C0CCCCCCF1F1F1FFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDDDDDDDDD - DDDDF1F1F1F1F1F1CCCCCCDDDDDDF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1 - FFFFFFF1F1F1F1F1F1DDDDDDC0C0C0DDDDDDF1F1F1F1F1F1FFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFC0C0C0CCCCCCF1F1F1F1F1F1DDDDDDDDDDDDC0C0C0DDDDDDDD - DDDDF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFF1F1F1FFFFFFF1F1F1F1F1F1DDDDDD - DDDDDDDDDDDDDDDDDDFFFFFFF1F1F1FFFFFFFFFFFFDDDDDDDDDDDDF1F1F1F1F1 - F1DDDDDDCCCCCCDDDDDDDDDDDDF1F1F1FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1FF - FFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCCCCCCDDDDDDF1F1F1 - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1DDDD - DDCCCCCCCCCCCCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0C0C0C0C0C0C0C0C0 - 0000C0C0C0C0C0C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1 - F1F1F1F1F1F1DDDDDDF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1 - F1DDDDDDCCCCCCC0C0C0DDDDDDCCCCCCC0C0C0CCCCCCF1F1F1FFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDF1F1F1F1F1F1F1F1F1DDDDDD - CCCCCCC0C0C0DDDDDDCCCCCCC0C0C0F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFF - FFF1F1F1FFFFFFF1F1F1DDDDDDC0C0C0CCCCCCF1F1F1F1F1F1FFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFF1F1F1DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDD - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1 - F1DDDDDDDDDDDDDDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1CCCCCCDDDDDDF1F1F1F1F1F1FFFFFFF1F1F1FFFFFFF1F1F1F1F1F1 - F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1B2B2B2CCCC - CCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1 - F1F1DDDDDDC0C0C0F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0C0C0C0C0 - C0C0C0C00000C0C0C0C0C0C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1 - F1F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1FFFFFFF1F1F1F1F1F1FFFFFFF1F1F1FF - FFFFF1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1 - F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1DDDDDDC0C0C0CCCCCCF1F1F1DDDD - DDC0C0C0DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFF1F1F1F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1DD - DDDDDDDDDDDDDDDDDDDDDDDDDDDDF1F1F1DDDDDDCCCCCCDDDDDDF1F1F1FFFFFF - FFFFFFFFFFFFF1F1F1DDDDDDF1F1F1FFFFFFF1F1F1FFFFFFFFFFFFF1F1F1DDDD - DDF1F1F1FFFFFFFFFFFFF1F1F1DDDDDDF1F1F1FFFFFFF1F1F1DDDDDDCCCCCCDD - DDDDF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - DDDDDDCCCCCCB2B2B2C0C0C0FFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1CCCCCCC0 - C0C0C0C0C0C0C0C00000C0C0C0C0C0C0F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFF1F1F1F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFF1F1F1F1F1F1DDDDDDCCCCCCCCCCCCF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1CC - CCCCCCCCCCC0C0C0F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1FFFF - FFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1 - DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDCCCCCCC0C0C0CCCCCCDDDDDDF1F1F1F1F1 - F1FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFF1 - F1F1F1F1F1FFFFFFFFFFFFDDDDDDCCCCCCCCCCCCF1F1F1FFFFFFFFFFFFF1F1F1 - F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1DDDDDDDDDDDDC0C0C0 - CCCCCCC0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C00000} - Stretch = True - IsControl = True - end - object lblProductName: TLabel - Left = 5 - Top = 80 - Width = 68 - Height = 13 - Alignment = taCenter - Caption = 'Product Name' - IsControl = True - end - object lblVersion: TLabel - Left = 8 - Top = 160 - Width = 74 - Height = 13 - Caption = 'Version: 1.1.1.1' - IsControl = True - end - object lblGovStatement: TLabel - Left = 5 - Top = 96 - Width = 231 - Height = 13 - Alignment = taCenter - Caption = 'Developed by the Department of Veterans Affairs' - IsControl = True - end - object lblCRC: TLabel - Left = 232 - Top = 160 - Width = 92 - Height = 13 - Caption = 'CRC: DDDDDDDD' - end - object lblDate: TLabel - Left = 97 - Top = 160 - Width = 82 - Height = 13 - Alignment = taCenter - Caption = 'January 30, 2000' - end - object ProgramIcon: TImage - Left = 176 - Top = 8 - Width = 145 - Height = 73 - end - object Memo1: TMemo - Left = 8 - Top = 112 - Width = 321 - Height = 49 - BorderStyle = bsNone - Lines.Strings = ( - 'Unauthorized access or use of this system and/or its data is a ' - - 'federal crime. Use of all data must be in accordance with VA po' + - 'licy ' - 'on security and privacy.') - ParentColor = True - TabOrder = 0 - end - end - object OKButton: TButton - Left = 139 - Top = 204 - Width = 75 - Height = 25 - Caption = 'OK' - Default = True - ModalResult = 1 - TabOrder = 1 - end -end diff --git a/BDK32/Samples/RPCBroker/BrokerEx/fVistAAbout.pas b/BDK32/Samples/RPCBroker/BrokerEx/fVistAAbout.pas deleted file mode 100644 index 6abfc37..0000000 --- a/BDK32/Samples/RPCBroker/BrokerEx/fVistAAbout.pas +++ /dev/null @@ -1,267 +0,0 @@ -unit fVistAAbout; - -interface - -uses Windows, SysUtils, Classes, Graphics, Forms, Controls, StdCtrls, - Buttons, ExtCtrls, jpeg, jconsts, Dialogs; - -TYPE - TInteger8 = Int64; - -type - TfrmVistAAbout = class(TForm) - Panel1: TPanel; - VistaLogo: TImage; - lblProductName: TLabel; - lblVersion: TLabel; - lblGovStatement: TLabel; - OKButton: TButton; - lblCRC: TLabel; - Memo1: TMemo; - lblDate: TLabel; - ProgramIcon: TImage; - procedure FormCreate(Sender: TObject); - private - { Private declarations } - public - { Public declarations } - procedure getfileinfo(var Version: String; var ProductName: String); virtual; - end; - -procedure ShowAboutBox; - -implementation - -{$R *.DFM} - - CONST - table: ARRAY[0..255] OF DWORD = - ($00000000, $77073096, $EE0E612C, $990951BA, - $076DC419, $706AF48F, $E963A535, $9E6495A3, - $0EDB8832, $79DCB8A4, $E0D5E91E, $97D2D988, - $09B64C2B, $7EB17CBD, $E7B82D07, $90BF1D91, - $1DB71064, $6AB020F2, $F3B97148, $84BE41DE, - $1ADAD47D, $6DDDE4EB, $F4D4B551, $83D385C7, - $136C9856, $646BA8C0, $FD62F97A, $8A65C9EC, - $14015C4F, $63066CD9, $FA0F3D63, $8D080DF5, - $3B6E20C8, $4C69105E, $D56041E4, $A2677172, - $3C03E4D1, $4B04D447, $D20D85FD, $A50AB56B, - $35B5A8FA, $42B2986C, $DBBBC9D6, $ACBCF940, - $32D86CE3, $45DF5C75, $DCD60DCF, $ABD13D59, - $26D930AC, $51DE003A, $C8D75180, $BFD06116, - $21B4F4B5, $56B3C423, $CFBA9599, $B8BDA50F, - $2802B89E, $5F058808, $C60CD9B2, $B10BE924, - $2F6F7C87, $58684C11, $C1611DAB, $B6662D3D, - - $76DC4190, $01DB7106, $98D220BC, $EFD5102A, - $71B18589, $06B6B51F, $9FBFE4A5, $E8B8D433, - $7807C9A2, $0F00F934, $9609A88E, $E10E9818, - $7F6A0DBB, $086D3D2D, $91646C97, $E6635C01, - $6B6B51F4, $1C6C6162, $856530D8, $F262004E, - $6C0695ED, $1B01A57B, $8208F4C1, $F50FC457, - $65B0D9C6, $12B7E950, $8BBEB8EA, $FCB9887C, - $62DD1DDF, $15DA2D49, $8CD37CF3, $FBD44C65, - $4DB26158, $3AB551CE, $A3BC0074, $D4BB30E2, - $4ADFA541, $3DD895D7, $A4D1C46D, $D3D6F4FB, - $4369E96A, $346ED9FC, $AD678846, $DA60B8D0, - $44042D73, $33031DE5, $AA0A4C5F, $DD0D7CC9, - $5005713C, $270241AA, $BE0B1010, $C90C2086, - $5768B525, $206F85B3, $B966D409, $CE61E49F, - $5EDEF90E, $29D9C998, $B0D09822, $C7D7A8B4, - $59B33D17, $2EB40D81, $B7BD5C3B, $C0BA6CAD, - - $EDB88320, $9ABFB3B6, $03B6E20C, $74B1D29A, - $EAD54739, $9DD277AF, $04DB2615, $73DC1683, - $E3630B12, $94643B84, $0D6D6A3E, $7A6A5AA8, - $E40ECF0B, $9309FF9D, $0A00AE27, $7D079EB1, - $F00F9344, $8708A3D2, $1E01F268, $6906C2FE, - $F762575D, $806567CB, $196C3671, $6E6B06E7, - $FED41B76, $89D32BE0, $10DA7A5A, $67DD4ACC, - $F9B9DF6F, $8EBEEFF9, $17B7BE43, $60B08ED5, - $D6D6A3E8, $A1D1937E, $38D8C2C4, $4FDFF252, - $D1BB67F1, $A6BC5767, $3FB506DD, $48B2364B, - $D80D2BDA, $AF0A1B4C, $36034AF6, $41047A60, - $DF60EFC3, $A867DF55, $316E8EEF, $4669BE79, - $CB61B38C, $BC66831A, $256FD2A0, $5268E236, - $CC0C7795, $BB0B4703, $220216B9, $5505262F, - $C5BA3BBE, $B2BD0B28, $2BB45A92, $5CB36A04, - $C2D7FFA7, $B5D0CF31, $2CD99E8B, $5BDEAE1D, - - $9B64C2B0, $EC63F226, $756AA39C, $026D930A, - $9C0906A9, $EB0E363F, $72076785, $05005713, - $95BF4A82, $E2B87A14, $7BB12BAE, $0CB61B38, - $92D28E9B, $E5D5BE0D, $7CDCEFB7, $0BDBDF21, - $86D3D2D4, $F1D4E242, $68DDB3F8, $1FDA836E, - $81BE16CD, $F6B9265B, $6FB077E1, $18B74777, - $88085AE6, $FF0F6A70, $66063BCA, $11010B5C, - $8F659EFF, $F862AE69, $616BFFD3, $166CCF45, - $A00AE278, $D70DD2EE, $4E048354, $3903B3C2, - $A7672661, $D06016F7, $4969474D, $3E6E77DB, - $AED16A4A, $D9D65ADC, $40DF0B66, $37D83BF0, - $A9BCAE53, $DEBB9EC5, $47B2CF7F, $30B5FFE9, - $BDBDF21C, $CABAC28A, $53B39330, $24B4A3A6, - $BAD03605, $CDD70693, $54DE5729, $23D967BF, - $B3667A2E, $C4614AB8, $5D681B02, $2A6F2B94, - $B40BBE37, $C30C8EA1, $5A05DF1B, $2D02EF8D); - - // Use CalcCRC32 as a procedure so CRCValue can be passed in but - // also returned. This allows multiple calls to CalcCRC32 for - // the "same" CRC-32 calculation. - PROCEDURE CalcCRC32 (p: pointer; ByteCount: DWORD; VAR CRCValue: DWORD); - // The following is a little cryptic (but executes very quickly). - // The algorithm is as follows: - // 1. exclusive-or the input byte with the low-order byte of - // the CRC register to get an INDEX - // 2. shift the CRC register eight bits to the right - // 3. exclusive-or the CRC register with the contents of - // Table[INDEX] - // 4. repeat steps 1 through 3 for all bytes - - VAR - i: DWORD; - q: ^BYTE; - BEGIN - q := p; - FOR i := 0 TO ByteCount-1 DO BEGIN - CRCvalue := (CRCvalue SHR 8) XOR - Table[ q^ XOR (CRCvalue AND $000000FF) ]; - INC(q) - END - END {CalcCRC32}; - - - // The CRC-32 value calculated here matches the one from the PKZIP program. - // Use MemoryStream to read file in binary mode. - PROCEDURE CalcFileCRC32 (FromName: STRING; VAR CRCvalue: DWORD; - VAR TotalBytes: TInteger8; - VAR error: WORD); - VAR - Stream: TMemoryStream; - BEGIN - error := 0; - CRCValue := $FFFFFFFF; - Stream := TMemoryStream.Create; - TRY - TRY - Stream.LoadFromFile(FromName); - IF Stream.Size > 0 - THEN CalcCRC32 (Stream.Memory, Stream.Size, CRCvalue) - EXCEPT - ON E: EReadError DO - error := 1 - END; - - CRCvalue := NOT CRCvalue; - TotalBytes := Stream.Size - FINALLY - Stream.Free - END; - END {CalcFileCRC32}; - -procedure TfrmVistAAbout.FormCreate(Sender: TObject); -var - CRC32: DWord; - TotalBytes: Int64; - Error: Word; - Text: String; - Version: String; - ProductName: String; -begin - CalcFileCRC32(Application.ExeName, CRC32, TotalBytes, Error); - lblCRC.Caption := 'CRC: ' + IntToHex(CRC32,8); - Text := Application.ExeName; - while pos('\',Text) > 0 do - begin - Text := copy(Text,pos('\',Text)+1,Length(Text)); - end; // while - Text := copy(Text,1,Length(Text)-4); - Caption := 'About ' + Text; - getfileinfo(Version, ProductName); - lblProductName.Caption := ProductName; - lblVersion.Caption := 'Version: ' + Version; - lblProductName.Width := Panel1.Width-10; - lblGovStatement.Width := Panel1.Width-10; - if ProgramIcon.Picture.Graphic = nil then - begin - VistALogo.Left := (Panel1.Width - VistALogo.Width) div 2; - end; -end; - -procedure TfrmVistAAbout.GetFileInfo(var Version: String; var ProductName: String); -var - VerInfoSize: DWORD; // holds the size of the version info resource - GetInfoSizeJunk: DWORD; // a junk variable, its value is ignored - VersionInfo: Pointer; // points to the version info resource - Translation: Pointer; // holds version info translation table - InfoPointer: Pointer; // a pointer to version information - - VersionInfoSize: UINT; // holds the size of version information - VersionValue: string; // holds the version info request string - SearchRec: TSearchRec; - DateTimeVal: TDateTime; - WriteTime: Integer; -begin - {retrieve the size of the version information resource, if one exists} - VerInfoSize := GetFileVersionInfoSize(PChar(Application.ExeName), - GetInfoSizeJunk); - - {if there was a version information resource available...} - - if VerInfoSize>0 then - begin - {retrieve enough memory to hold the version resource} - GetMem(VersionInfo, VerInfoSize); - - {retrieve the version resource for the selected file} - GetFileVersionInfo(PChar(Application.ExeName), 0, - VerInfoSize, VersionInfo); - - {retrieve a pointer to the translation table} - VerQueryValue(VersionInfo, '\\VarFileInfo\\Translation', - Translation, VersionInfoSize); - - {initialize the version value request string} - VersionValue :='\\StringFileInfo\\'+ - IntToHex(LoWord(LongInt(Translation^)),4)+ - IntToHex(HiWord(LongInt(Translation^)),4)+ - '\\'; - - {retrieve and display the file version} - VerQueryValue(VersionInfo, PChar(VersionValue+'FileVersion'), InfoPointer, - VersionInfoSize); - Version := string(PChar(InfoPointer)); - - {retrieve and display the product name} - VerQueryValue(VersionInfo, PChar(VersionValue+'ProductName'), InfoPointer, - VersionInfoSize); - ProductName := string(PChar(InfoPointer)); - - {free the version resource memory} - FreeMem(VersionInfo, VerInfoSize); - end - else - begin - Version := 'Not in File'; - ProductName := 'Not Identified In File'; - end; - if findfirst(Application.ExeName, faAnyFile, SearchRec) = 0 then - begin - WriteTime := SearchRec.Time; - DateTimeVal := FileDateToDateTime(WriteTime); - lblDate.Caption := FormatDateTime('mmmm dd, yyyy hh:nn',DateTimeVal); - end; -end; - -procedure ShowAboutBox; -begin - with TfrmVistAAbout.Create(Application) do - try - ShowModal; - finally - free; - end; -end; - -end. - - \ No newline at end of file diff --git a/BDK32/Samples/RPCBroker/BrokerEx/frmVistAAbout.dfm b/BDK32/Samples/RPCBroker/BrokerEx/frmVistAAbout.dfm deleted file mode 100644 index 9966ef6..0000000 --- a/BDK32/Samples/RPCBroker/BrokerEx/frmVistAAbout.dfm +++ /dev/null @@ -1,1201 +0,0 @@ -object frmVistAAbout: TfrmVistAAbout - Left = 279 - Top = 106 - BorderStyle = bsDialog - Caption = 'About' - ClientHeight = 236 - ClientWidth = 353 - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'MS Sans Serif' - Font.Style = [] - OldCreateOrder = True - Position = poScreenCenter - OnCreate = FormCreate - PixelsPerInch = 96 - TextHeight = 13 - object Panel1: TPanel - Left = 8 - Top = 8 - Width = 337 - Height = 185 - BevelInner = bvRaised - BevelOuter = bvLowered - ParentColor = True - TabOrder = 0 - object VistaLogo: TImage - Left = 8 - Top = 8 - Width = 153 - Height = 73 - Center = True - Picture.Data = { - 07544269746D61702A880000424D2A8800000000000036000000280000009600 - 00004D0000000100180000000000F48700000000000000000000000000000000 - 0000C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C00000C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C00000C0C0C0C0C0C0DDDDDDFFFFFFDDDDDDCCCCCCB2B2B2CC - CCCCF1F1F1DDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1DDDDDDCCCCCCCCCCCCC0C0C0C0C0C0DDDDDDF1F1F1F1F1F1DDDDDDCCCC - CCFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1FF - FFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFDDDDDD - DDDDDDDDDDDDF1F1F1FFFFFFFFFFFFFFFFFFDDDDDDF1F1F1F1F1F1F1F1F1FFFF - FFFFFFFFFFFFFFDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1CCCCCCF1F1F1F1F1F1F1F1F1 - F1F1F1C0C0C0FFFFFFC0C0C0DDDDDDDDDDDDF1F1F1F1F1F1FFFFFFFFFFFFFFFF - FFDDDDDDDDDDDDCCCCCCF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1 - F1F1F1F1F1F1F1F1F1F1F1DDDDDDCCCCCCC0C0C0F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDDDDDF1F1F1DDDDDDF1F1 - F1FFFFFFF1F1F1DDDDDD999999CCCCCCF1F1F1CCCCCCCCCCCCF1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1DDDDDDCCCCCCF1F1F1F1F1F1DDDDDDCCCCCCB2B2B2 - CCCCCCC0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0F1F1F1FFFFFFF1F1F1DDDDDD - FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1CCCCCCB2B2B2CCCCCCF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1 - F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1DDDDDDDDDDDDDDDDDDDDDDDDF1F1F1F1F1F1F1F1F1DDDDDDCCCCCCF1F1F1F1 - F1F1FFFFFFFFFFFFDDDDDDC0C0C0F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1FFFFFFF1F1 - F1F1F1F1DDDDDDCCCCCCF1F1F1DDDDDDFFFFFFF1F1F1F1F1F1FFFFFFFFFFFFFF - FFFFFFFFFFF1F1F1DDDDDDCCCCCCF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1DDDDDDC0C0C0DDDDDDF1F1F1F1F1F1FFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1FF - FFFFFFFFFFF1F1F1DDDDDDC0C0C0CCCCCCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDDDDDDDCCCCCCFFFFFFDDDDDDB2B2B2C0C0 - C0FFFFFFFFFFFFC0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0FFFFFFFFFFFFF1F1 - F1F1F1F1CCCCCCFFFFFFCCCCCCF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1CCCCCCFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1FFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFF1F1F1DDDDDDF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1 - F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1DDDDDDDDDDDDDDDDDDDDDDDDCCCCCCC0C0C0CCCCCCC0C0C0DDDDDD - F1F1F1FFFFFFFFFFFFFFFFFFB2B2B2C0C0C0F1F1F1F1F1F1F1F1F1F1F1F1FFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1FFFFFFFFFFFFF1 - F1F1F1F1F1F1F1F1DDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFF - FFFFFFFFFFFFF1F1F1DDDDDDC0C0C0DDDDDDF1F1F1F1F1F1F1F1F1FFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1CCCCCCCCCCCCF1F1F1F1F1F1FF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFF1F1F1F1F1F1DDDDDDC0C0C0FFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFC0C0C0F1 - F1F1F1F1F1FFFFFFFFFFFFC0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0FFFFFFFF - FFFFF1F1F1F1F1F1DDDDDDFFFFFFC0C0C0FFFFFFF1F1F1CCCCCCF1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDDDDDDDDDDDDDC0C0C0CCCCCCCCCCCCCCCC - CCF1F1F1F1F1F1FFFFFFFFFFFFF1F1F1CCCCCCDDDDDDF1F1F1F1F1F1F1F1F1F1 - F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFF1F1F1CCCCCCCCCCCCDDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1 - F1FFFFFFFFFFFFFFFFFFF1F1F1C0C0C0CCCCCCF1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1C0C0C0DDDDDDF1F1F1 - F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDDDDDDDC0C0C0FFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDD - C0C0C0F1F1F1FFFFFFFFFFFFFFFFFFC0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0 - F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1CCCCCCC0C0C0DDDDDDCCCCCCDDDDDDDDDD - DDCCCCCCF1F1F1F1F1F1DDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1DDDDDDF1 - F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1C0C0C0F1F1F1FFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1CCCCCCCCCCCCFFFFFFFF - FFFFF1F1F1F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1DDDDDDDDDDDDF1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1FFFFFFFFFF - FFF1F1F1F1F1F1F1F1F1DDDDDDFFFFFFFFFFFFFFFFFFDDDDDDF1F1F1F1F1F1F1 - F1F1F1F1F1FFFFFFFFFFFFFFFFFFC0C0C0DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1DDDDDDC0C0C0F1F1 - F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1FFFFFFFFFFFFFF - FFFFDDDDDDCCCCCCC0C0C0C0C0C0CCCCCCC0C0C0CCCCCCB2B2B2F1F1F1FFFFFF - FFFFFFFFFFFFFFFFFFF1F1F1DDDDDDC0C0C0CCCCCCCCCCCCCCCCCCDDDDDDC0C0 - C0CCCCCCDDDDDDFFFFFFFFFFFFFFFFFFFFFFFFC0C0C0C0C0C0C0C0C00000C0C0 - C0C0C0C0F1F1F1FFFFFFF1F1F1F1F1F1DDDDDDC0C0C0F1F1F1FFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDDDDDDDF1F1F1DDDDDDDDDDDDDDDDDD - CCCCCCF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDC0C0C0FFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFF1 - F1F1F1F1F1F1F1F1F1F1F1DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1C0C0C0C0C0C0 - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1DDDDDDDDDD - DDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FF - FFFFFFFFFFF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFDDDDDDF1F1F1F1F1F1 - FFFFFFF1F1F1F1F1F1F1F1F1FFFFFFF1F1F1DDDDDDF1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1DDDDDDCCCCCCC0C0C0F1 - F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFF - FFFFFFFFFFFFC0C0C0CCCCCCDDDDDDF1F1F1F1F1F1DDDDDDDDDDDDDDDDDDFFFF - FFFFFFFFFFFFFFFFFFFFDDDDDDDDDDDDCCCCCCF1F1F1F1F1F1F1F1F1FFFFFFFF - FFFFF1F1F1FFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFC0C0C0C0C0C0C0C0C0 - 0000C0C0C0C0C0C0F1F1F1DDDDDDF1F1F1F1F1F1C0C0C0CCCCCCFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDDDDDDDDDDDDDDDDDDDDDDDDDDD - DDDDDDDD0000FFF1F1F1FFFFFFF1F1F1F1F1F1FFFFFFF1F1F1DDDDDDDDDDDDFF - FFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFF1F1F1F1F1F1DDDDDDF1F1F1F1F1F1F1F1F1CCCCCCCCCCCCC0C0C0C0C0 - C0DDDDDDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1DD - DDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1DDDDDDF1F1F1F1F1F1DDDDDDF1F1 - F1F1F1F1DDDDDDF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1FF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1DDDDDDCCCCCCC0C0C0 - F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1FFFFFFDDDDDDDDDDDDC0C0C0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1C0C0C0C0C0C0C0C0C0FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1 - F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0C0C0C0C0 - C0C0C0C00000C0C0C0C0C0C0F1F1F1F1F1F1F1F1F1F1F1F1CCCCCCDDDDDDFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDDDDDDDDDDDDDDDDDDD - DDDDDDDDDDDDDDDD0000FFF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1DDDDDD - DDDDDDCCCCCCF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFF1F1F1CCCCCCCCCCCCF1F1F1F1F1F1F1F1F1CCCCCCCCCCCCCC - CCCCDDDDDDF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDD - F1F1F1DDDDDDDDDDDDF1F1F1DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1DDDDDDF1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1CCCCCCF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDC0C0 - C0DDDDDDFFFFFFFFFFFFF1F1F1F1F1F1DDDDDDFFFFFFF1F1F1F1F1F1F1F1F1F1 - F1F1FFFFFFFFFFFFF1F1F1DDDDDDC0C0C0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - FFFFFFF1F1F1FFFFFFFFFFFFF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1FFFF - FFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1C0 - C0C0C0C0C0C0C0C00000C0C0C0C0C0C0F1F1F1DDDDDDDDDDDDDDDDDDDDDDDDF1 - F1F1FFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDDDDDDDDDDD - C0C0C0C0C0C0C0C0C0B2B2B20000FF0000FFFFFFFFFFFFFFFFFFFFFFFFFFF1F1 - F1DDDDDDDDDDDDF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFDDDDDDDDDDDDCCCCCCDDDDDDFFFFFFFFFFFFFFFFFFF1F1F1 - F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDDDDDDDDD - DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDCCCCCCF1F1F1F1F1F1F1F1F1FFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDDDDDDDDDDDDDF1F1F1 - F1F1F1F1F1F1F1F1F1DDDDDDC0C0C0F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFF - FFF1F1F1FFFFFFFFFFFFF1F1F1DDDDDDF1F1F1F1F1F1F1F1F1DDDDDDDDDDDDC0 - C0C0C0C0C0FFFFFFFFFFFFFFFFFFFFFFFFC0C0C0DDDDDDF1F1F1F1F1F1F1F1F1 - FFFFFFF1F1F1FFFFFFFFFFFFF1F1F1F1F1F1DDDDDDF1F1F1F1F1F1F1F1F1FFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFF1F1F1F1F1F1DD - DDDDCCCCCCDDDDDDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1 - F1F1F1C0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0CCCCCCCCCCCCDDDDDDDDDDDD - FFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCCCC - CCC0C0C0DDDDDDF1F1F1F1F1F10000FF0000FF0000FF0000FFFFFFFFF1F1F1F1 - F1F1F1F1F1DDDDDDDDDDDDCCCCCCC0C0C0DDDDDDFFFFFFFFFFFFF1F1F1F1F1F1 - F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1DDDDDDDDDDDDF1F1F1F1F1F1F1F1 - F1C0C0C0F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFC0C0C0C0C0C0CC - CCCCF1F1F1DDDDDDDDDDDDCCCCCCCCCCCCCCCCCCB2B2B2F1F1F1F1F1F1F1F1F1 - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1CCCCCCCCCCCCF1F1F1F1F1F1FFFFFFFFFFFFF1 - F1F1F1F1F1F1F1F1F1F1F1FFFFFFF1F1F1DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1 - CCCCCCC0C0C0DDDDDDFFFFFFFFFFFFFFFFFFF1F1F1CCCCCCF1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFF - FFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1 - DDDDDDDDDDDDCCCCCCDDDDDDF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1 - F1F1F1F1F1F1F1C0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0F1F1F1F1F1F1FFFF - FFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFC0C0C0C0C0C0F1F1F1F1F1F1FFFFFF0000FF0000FF0000FF0000FF0000FF - F1F1F1F1F1F1F1F1F1DDDDDDDDDDDDB2B2B2FFFFFFFFFFFFFFFFFFF1F1F1DDDD - DDF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1FFFFFFF1F1F1DDDDDDF1 - F1F1F1F1F1C0C0C0F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1FFFFFFCCCCCC - DDDDDDF1F1F1FFFFFFDDDDDDCCCCCCB2B2B2DDDDDDB2B2B2C0C0C0F1F1F1F1F1 - F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1 - F1F1F1F1F1DDDDDDF1F1F1F1F1F1F1F1F1CCCCCCDDDDDDF1F1F1FFFFFFFFFFFF - FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFDDDDDDDDDDDDF1F1F1DDDDDDF1F1 - F1F1F1F1B2B2B2DDDDDDF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1FFFFFFF1F1F1F1F1F1DDDDDDF1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1 - F1F1F1F1F1F1F1F1F1F1F1C0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0FFFFFFFF - FFFFFFFFFFFFFFFFF1F1F1F1F1F1DDDDDDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - F1F1F1DDDDDDDDDDDDF1F1F1F1F1F1F1F1F1FFFFFF0000FF0000FF0000FF0000 - FF0000FF0000FFF1F1F1F1F1F1F1F1F1DDDDDDCCCCCCFFFFFFFFFFFFF1F1F1DD - DDDDC0C0C0F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFF1F1F1 - DDDDDDDDDDDDCCCCCCC0C0C0F1F1F1F1F1F1DDDDDDC0C0C0F1F1F1F1F1F1F1F1 - F1FFFFFFF1F1F1F1F1F1F1F1F1CCCCCCC0C0C0DDDDDDF1F1F1FFFFFFF1F1F1F1 - F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1 - F1F1F1F1F1F1C0C0C0C0C0C0CCCCCCF1F1F1F1F1F1CCCCCCDDDDDDFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1FFFFFFFFFFFFF1F1F1DDDDDDF1F1F1F1 - F1F1CCCCCCB2B2B2DDDDDDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1 - FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1CCCC - CCCCCCCCDDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDDD - DDDDDDDDDDCCCCCCC0C0C0F1F1F1F1F1F1F1F1F1CCCCCCDDDDDDFFFFFFFFFFFF - FFFFFFF1F1F1F1F1F1DDDDDDDDDDDDC0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0 - FFFFFFFFFFFFFFFFFFDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDF1F1F1F1F1F1F1F1 - F1DDDDDDDDDDDDDDDDDDDDDDDDF1F1F1F1F1F1F1F1F1FFFFFF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FFF1F1F1F1F1F1F1F1F1CCCCCCFFFFFFFFFFFF - FFFFFFDDDDDDC0C0C0F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1 - F1F1F1F1DDDDDDF1F1F1CCCCCCF1F1F1F1F1F1FFFFFFF1F1F1C0C0C0F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDDDDDDDF1F1F1FFFFFFF1F1F1FFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1 - F1FFFFFFFFFFFFC0C0C0DDDDDDF1F1F1F1F1F1FFFFFFF1F1F1DDDDDDF1F1F1F1 - F1F1F1F1F1FFFFFFFFFFFFF1F1F1FFFFFFF1F1F1F1F1F1FFFFFFFFFFFFDDDDDD - CCCCCCC0C0C0C0C0C0DDDDDDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1 - F1CCCCCCDDDDDDF1F1F1F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1FFFFFFFFFFFFFF - FFFFFFFFFFF1F1F1F1F1F1FFFFFFF1F1F1F1F1F1DDDDDDDDDDDDDDDDDDDDDDDD - F1F1F1B2B2B2C0C0C0CCCCCCDDDDDDFFFFFFF1F1F1F1F1F1CCCCCCCCCCCCFFFF - FFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1C0C0C0C0C0C0C0C0C00000C0C0 - C0C0C0C0FFFFFFFFFFFFFFFFFFDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDF1F1F1F1 - F1F1F1F1F1DDDDDDDDDDDDF1F1F1DDDDDDF1F1F1F1F1F1FFFFFFFFFFFF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FFF1F1F1F1F1F1F1F1F1CCCCCCFFFF - FFFFFFFFFFFFFFDDDDDDCCCCCCF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1 - F1F1F1F1F1F1F1F1DDDDDDDDDDDDC0C0C0F1F1F1F1F1F1F1F1F1DDDDDDCCCCCC - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFF1F1F1FFFFFFFFFFFFF1 - F1F1F1F1F1FFFFFFFFFFFFCCCCCCF1F1F1F1F1F1FFFFFFFFFFFFF1F1F1DDDDDD - FFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFDDDDDDC0C0C0C0C0C0DDDDDDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFDDDDDDC0C0C0F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDDDDDF1F1F1DDDDDDDDDDDDDDDD - DDDDDDDDCCCCCCC0C0C0DDDDDDFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDB2B2B2C0 - C0C0F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1C0C0C0C0C0C0C0C0C0 - 0000C0C0C0C0C0C0FFFFFFFFFFFFDDDDDDDDDDDDF1F1F1F1F1F1DDDDDDF1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1CCCCCCFFFFFFFFFFFFFFFFFFDDDD - DD0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFF1F1F1F1F1F1F1 - F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1CCCCCCF1F1F1FFFFFFFFFFFFF1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDDDDDDDF1F1F1F1F1F1FFFFFFFFFF - FFF1F1F1F1F1F1FFFFFFF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFF1F1F1FFFFFFFFFFFFFFFFFFC0C0C0F1F1F1FFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFF1F1F1F1F1F1F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFF1F1F1CCCCCCCCCCCCF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFCCCCCCF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFF1F1F1F1F1F1F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1FFFFFFDDDDDDCC - CCCCCCCCCCDDDDDDB2B2B2FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDCCCCCC - DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1C0C0C0C0C0 - C0C0C0C00000C0C0C0C0C0C0FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1C0C0C0C0C0C0DDDDDDFFFFFFF1F1F1DD - DDDDDDDDDD0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFF1F1F1 - F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1C0C0C0DDDDDDF1F1F1F1F1F1FFFF - FFDDDDDDDDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FF - FFFFF1F1F1CCCCCCF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFF1F1F1FFFFFFFFFFFFFFFFFF999999C0C0C0FFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFDDDDDDDDDDDDF1F1F1F1F1F1DDDDDDCCCCCCFFFFFFFFFFFFFF - FFFFFFFFFFF1F1F1F1F1F1DDDDDDDDDDDDDDDDDDCCCCCCDDDDDDFFFFFFFFFFFF - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDF1F1F1FFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFF1F1F1F1F1F1C0C0C0DDDDDDF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFF - FFFFFFF1F1F1F1F1F1DDDDDDF1F1F1FFFFFFFFFFFFF1F1F1DDDDDDCCCCCCFFFF - FFF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDF1F1F1C0 - C0C0C0C0C0C0C0C00000C0C0C0C0C0C0FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1DDDDDDDDDDDDB2B2B2DDDDDDF1F1F1F1F1F1FFFFFF - FFFFFFDDDDDDDDDDDD0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FFDDDDDDC0C0C0C0C0C0CCCCCCDDDDDDC0C0C0F1F1F1F1F1F1FF - FFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDCCCCCC - F1F1F1FFFFFFC0C0C0C0C0C0F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFCCCCCCCCCCCCFFFFFFDDDDDDCCCCCCDDDDDDF1F1F1FFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1DDDDDDC0C0C0DDDDDDF1F1F1 - FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1CCCCCCC0C0C0C0C0C0CCCCCCFFFFFFF1F1 - F1F1F1F1F1F1F1DDDDDDDDDDDDF1F1F1F1F1F1DDDDDDF1F1F1FFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1DDDDDDB2B2B2F1F1F1 - FFFFFFDDDDDDDDDDDDC0C0C0DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFF - FFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFDDDDDDDDDDDDCC - CCCCF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1DDDDDD - C0C0C0C0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0FFFFFFFFFFFFFFFFFFFFFFFF - F1F1F1F1F1F1F1F1F1DDDDDDDDDDDDDDDDDDDDDDDDCCCCCCFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFDDDDDDDDDDDD0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FFC0C0C0B2B2B2CCCCCCF1F1F1F1F1F1DDDDDDF1F1F1 - F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1FFFFFFF1F1F1F1F1F1DDDD - DDFFFFFFFFFFFFFFFFFFC0C0C0CCCCCCF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFF1F1F1DDDDDDC0C0C0CCCCCCFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1CCCCCCC0C0C0F1F1 - F1F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1CCCCCCB2B2B2C0C0C0CCCCCCF1F1F1FF - FFFFF1F1F1DDDDDDDDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDC0C0 - C0FFFFFFDDDDDDF1F1F1CCCCCCC0C0C0F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFF - FFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFDDDDDD - DDDDDDF1F1F1DDDDDDF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1C0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0FFFFFFFFFFFFFFFF - FFF1F1F1F1F1F1F1F1F1DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDCCCCCCF1F1F1F1 - F1F1F1F1F1F1F1F1FFFFFFDDDDDDDDDDDD0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FFF1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1FFFFFFDDDDDDCC - CCCCC0C0C0FFFFFFF1F1F1F1F1F1CCCCCCDDDDDDFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFDDDDDDDDDDDDCCCCCCF1F1F1FFFFFFFFFFFFFFFFFFF1F1F1FFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1DDDDDDC0C0C0F1 - F1F1F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1C0C0C0C0C0C0FFFFFFFFFFFFFFFFFF - FFFFFFF1F1F1CCCCCCB2B2B2CCCCCCC0C0C0CCCCCCF1F1F1F1F1F1F1F1F1DDDD - DDFFFFFFCCCCCCF1F1F1F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1C0 - C0C0DDDDDDFFFFFFFFFFFFF1F1F1DDDDDDF1F1F1F1F1F1F1F1F1FFFFFFFFFFFF - FFFFFFFFFFFFF1F1F1DDDDDDDDDDDDF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFDDDDDDDDDDDDCCCCCCF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1 - F1F1F1F1F1FFFFFFFFFFFFC0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0FFFFFFFF - FFFFF1F1F1F1F1F1CCCCCCC0C0C0C0C0C0CCCCCCDDDDDDF1F1F1F1F1F1CCCCCC - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1CCCCCCDDDDDD0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFFFFFFFFFF1F1F1F1 - F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDDDDDDDF1F1F1F1F1F1 - FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDB2B2B2C0C0C0FFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1C0C0C0F1F1F1FFFFFFFFFFFFF1F1F1F1 - F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1CCCCCC - DDDDDDF1F1F1FFFFFFFFFFFFF1F1F1F1F1F1CCCCCCDDDDDDFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1CCCCCCCCCCCCCC - CCCCDDDDDDFFFFFFC0C0C0F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1C0C0C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1FFFF - FFFFFFFFFFFFFFCCCCCCC0C0C0B2B2B2DDDDDDF1F1F1FFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFDDDDDDF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0 - FFFFFFFFFFFFF1F1F1F1F1F1B2B2B2C0C0C0CCCCCCCCCCCCDDDDDDC0C0C0C0C0 - C0C0C0C0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F10000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFFF - FFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1CCCCCCCCCCCCF1F1 - F1F1F1F1FFFFFFFFFFFFDDDDDDF1F1F1F1F1F1CCCCCCC0C0C0DDDDDDF1F1F1FF - FFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1CCCCCCFFFFFFFFFFFFFFFFFF - F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1DDDD - DDDDDDDDDDDDDDF1F1F1F1F1F1FFFFFFF1F1F1F1F1F1C0C0C0F1F1F1FFFFFFFF - FFFFFFFFFFF1F1F1FFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFF1F1F1F1F1F1CCCCCCF1F1F1FFFFFFFFFFFFF1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1C0C0C0FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1 - F1F1FFFFFFFFFFFFF1F1F1B2B2B2C0C0C0C0C0C0F1F1F1F1F1F1FFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDDDDDF1F1F1FFFFFFFFFFFFF1F1F1FFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0C0C0C0C0C0C0C0C00000C0C0 - C0C0C0C0F1F1F1FFFFFFF1F1F1CCCCCCDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F10000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1DDDDDDC0 - C0C0F1F1F1FFFFFFFFFFFFFFFFFFDDDDDDDDDDDDCCCCCCC0C0C0F1F1F1F1F1F1 - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1CCCCCCCCCCCCF1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1FFFFFF - FFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1 - F1F1F1F1F1F1F1F1F1F1F1DDDDDDFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDC0C0C0 - F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFF - FFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFDDDDDDDDDDDDCCCCCCC0C0C0F1F1F1FF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFC0C0C0C0C0C0C0C0C0 - 0000C0C0C0C0C0C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1 - F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F10000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1DDDDDDC0C0C0 - B2B2B2CCCCCCFFFFFFFFFFFFFFFFFFDDDDDDDDDDDD999999C0C0C0FFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCCCCCCC0C0C0CCCCCCF1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1DDDDDDF1F1F1CCCCCCDDDDDDDDDDDDF1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDDDDDDDC0C0C0DDDDDDFF - FFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFF - FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1DDDDDDDDDDDDFFFFFFFFFFFFDDDDDDCCCC - CCDDDDDDFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFF - FFFFFFFFFFFFFFFFDDDDDDF1F1F1F1F1F1DDDDDDC0C0C0CCCCCCCCCCCCDDDDDD - F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1C0C0C0C0C0 - C0C0C0C00000C0C0C0C0C0C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1 - F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1FFFFFFFFFFFFF1 - F1F10000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FFF1F1F1F1F1F1F1F1F1DDDDDDC0C0 - C0CCCCCCCCCCCCDDDDDDFFFFFFFFFFFFFFFFFFDDDDDDDDDDDDC0C0C0DDDDDDFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDDDDDDDDDDDF1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1CCCCCCFFFFFFFFFFFFF1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDDDDDDDCCCCCC - F1F1F1FFFFFFFFFFFFFFFFFFDDDDDDF1F1F1FFFFFFFFFFFFF1F1F1FFFFFFF1F1 - F1FFFFFFFFFFFFFFFFFFDDDDDDDDDDDDDDDDDDCCCCCCDDDDDDFFFFFFF1F1F1DD - DDDDCCCCCCF1F1F1DDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - FFFFFFFFFFFFFFFFFFFFFFFFDDDDDDF1F1F1DDDDDDCCCCCCB2B2B2F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDDDDDDDDDDDDDCCCCCCC0 - C0C0C0C0C0C0C0C00000C0C0C0C0C0C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFDDDDDDF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1FFFFFFFFFFFF - F1F1F1F1F1F10000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFF1F1F1DDDDDDDDDDDDC0 - C0C0DDDDDDF1F1F1F1F1F1FFFFFFFFFFFFDDDDDDDDDDDDDDDDDDC0C0C0DDDDDD - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFF1F1F1F1F1 - F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1 - F1F1F1F1F1CCCCCCCCCCCCDDDDDDDDDDDDC0C0C0B2B2B2CCCCCCF1F1F1FFFFFF - F1F1F1F1F1F1DDDDDDF1F1F1F1F1F1F1F1F1DDDDDDCCCCCCF1F1F1DDDDDDDDDD - DDDDDDDDFFFFFFFFFFFFF1F1F1C0C0C0F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1F1 - F1F1F1F1F1FFFFFFFFFFFFDDDDDDCCCCCCCCCCCCCCCCCCCCCCCCDDDDDDF1F1F1 - F1F1F1F1F1F1FFFFFFFFFFFFDDDDDDFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDDDDDDDDDDDDDDDDDB2B2B2CCCCCCFF - FFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDD - F1F1F1C0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0FFFFFFFFFFFFFFFFFFF1F1F1 - F1F1F1F1F1F1CCCCCCF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFF1F1F1CCCCCCC0C0C00000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFC0C0C0 - 999999DDDDDDF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFDDDDDDDDDDDDDDDDDDF1F1 - F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFF1F1F1FFFFFFFFFFFFFF - FFFFF1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1DDDDDDC0C0C0 - F1F1F1F1F1F1DDDDDDC0C0C0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFF - FFFFFFFFF1F1F1DDDDDDF1F1F1F1F1F1DDDDDDC0C0C0CCCCCCF1F1F1FFFFFFF1 - F1F1DDDDDDDDDDDDF1F1F1DDDDDDCCCCCCDDDDDDFFFFFFFFFFFFFFFFFFF1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1CCCCCCDDDDDDF1 - F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1CCCCCCDDDDDDFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1C0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0F1F1F1FFFFFFF1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFF1F1F1F1F1F1F1F1F1F1F1F10000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FFF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDDDDDDDDDDDDD - DDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1CCCC - CCFFFFFFF1F1F1DDDDDDC0C0C0B2B2B2DDDDDDF1F1F1F1F1F1FFFFFFFFFFFFFF - FFFFFFFFFFF1F1F1FFFFFFF1F1F1DDDDDDF1F1F1F1F1F1FFFFFFFFFFFFFFFFFF - FFFFFFF1F1F1DDDDDDF1F1F1F1F1F1CCCCCCCCCCCCF1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1 - F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1DDDDDDC0C0C0 - CCCCCCF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1FFFF - FFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFF1F1F1C0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0DDDDDDF1 - F1F1F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F10000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1FFFFFFF1F1F1 - CCCCCCCCCCCCF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDF1F1F1F1 - F1F1DDDDDDF1F1F1FFFFFFFFFFFFCCCCCCCCCCCCDDDDDDF1F1F1F1F1F1FFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1CCCCCCDDDDDDF1F1F1F1F1F1DDDDDDF1F1 - F1FFFFFFFFFFFFF1F1F1DDDDDDF1F1F1F1F1F1CCCCCCCCCCCCF1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDDDDDDDDDDDDDDD - DDC0C0C0CCCCCCF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1FFFFFFFF - FFFFFFFFFFDDDDDDCCCCCCCCCCCCF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1 - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0 - DDDDDDF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDDD - DDF1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F10000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFF - FFFFFFFFFFFFFFF1F1F1DDDDDDCCCCCCCCCCCCDDDDDDDDDDDDDDDDDDDDDDDDDD - DDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDDDDDDDDDDDDD - DDDDDDCCCCCCC0C0C0F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1 - F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1DD - DDDDF1F1F1FFFFFFF1F1F1DDDDDDDDDDDDDDDDDDDDDDDDC0C0C0CCCCCCF1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1 - F1F1F1F1F1F1F1F1F1F1DDDDDDF1F1F1FFFFFFFFFFFFFFFFFFDDDDDDDDDDDDDD - DDDDDDDDDDC0C0C0DDDDDDF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1DDDDDDF1F1F1FFFFFFFFFFFFFFFFFFFFFF - FFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1C0C0C0C0C0C0C0C0C00000C0C0 - C0C0C0C0C0C0C0F1F1F1FFFFFFFFFFFFF1F1F1FFFFFFFFFFFFF1F1F1F1F1F1F1 - F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F10000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1CCCCCCCCCCCCCCCCCC - CCCCCCCCCCCCDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1C0C0C0C0C0C0DDDD - DDCCCCCCF1F1F1DDDDDDF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1 - F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1FFFFFFF1F1F1DDDDDDDDDDDDCCCCCCC0C0C0C0C0C0DDDD - DDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1 - F1F1DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1DDDDDDF1F1F1FFFFFFFFFFFFDDDDDD - DDDDDDDDDDDDDDDDDDCCCCCCF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDC0C0C0C0C0C0C0C0C0 - 0000C0C0C0C0C0C0CCCCCCF1F1F1FFFFFFF1F1F1F1F1F1FFFFFFFFFFFFF1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1CCCCCCDDDDDDF1F1F10000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1C0C0C0DD - DDDDF1F1F1F1F1F1FFFFFFF1F1F1F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDDDDDDDDDDDDD999999B2B2B2DD - DDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFF - FFFFFFF1F1F1DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFF1F1 - F1DDDDDDDDDDDDDDDDDDDDDDDDCCCCCCF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1 - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1DDDDDDC0C0C0C0C0 - C0C0C0C00000C0C0C0C0C0C0FFFFFFF1F1F1FFFFFFF1F1F1F1F1F1FFFFFFF1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDF1F1F1F1F1F1C0C0C0DDDDDDFFFFFF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FFF1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFF1 - F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFCCCCCCF1F1F1F1F1F1F1F1F1F1F1F1 - CCCCCCF1F1F1F1F1F1F1F1F1FFFFFFF1F1F1DDDDDDF1F1F1DDDDDDF1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDCCCCCCDDDDDDCCCCCCC0C0C0DDDDDD - F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFF - FFFFFFFFF1F1F1DDDDDDDDDDDDDDDDDDDDDDDDCCCCCCFFFFFFF1F1F1F1F1F1DD - DDDDDDDDDDDDDDDDDDDDDDDDDDDDF1F1F1CCCCCCDDDDDDFFFFFFFFFFFFFFFFFF - F1F1F1F1F1F1CCCCCCF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1 - F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCCCCCCDDDDDDF1F1F1F1F1F1C0 - C0C0C0C0C0C0C0C00000C0C0C0C0C0C0FFFFFFF1F1F1DDDDDDF1F1F1F1F1F1F1 - F1F1DDDDDDCCCCCCCCCCCCF1F1F1F1F1F1F1F1F1F1F1F1C0C0C0DDDDDDF1F1F1 - FFFFFF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1DDDDDDFFFFFFF1F1F1F1F1 - F1F1F1F1CCCCCCDDDDDDFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1DDDDDDCCCCCCC0 - C0C0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1C0C0C0C0C0C0CCCCCCF1F1F1DDDDDDF1F1 - F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFCCCCCCCCCCCCCCCCCCFFFFFFF1F1F1DDDDDDDDDDDDF1F1F1F1F1F1 - F1F1F1DDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1CCCCCCCCCCCCFFFFFFFFFF - FFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1 - F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFF1F1F1 - F1F1F1C0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0FFFFFFDDDDDDF1F1F1FFFFFF - F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1CCCCCCC0C0C0F1F1 - F1F1F1F1FFFFFF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1 - F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1FFFFFFF1 - F1F1F1F1F1F1F1F1CCCCCCDDDDDDF1F1F1FFFFFFFFFFFFFFFFFFF1F1F1DDDDDD - C0C0C0C0C0C0F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1C0C0C0CCCCCCF1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFF1F1F1FFFFFFDDDDDDF1F1F1F1F1F1FFFFFFF1F1F1DDDDDDDDDDDDF1F1 - F1F1F1F1DDDDDDCCCCCCDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1CCCCCCCCCCCCF1 - F1F1F1F1F1FFFFFFDDDDDDDDDDDDDDDDDDF1F1F1DDDDDDDDDDDDDDDDDDDDDDDD - F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFDDDDDDF1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1C0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0FFFFFFF1F1F1F1F1 - F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDDDDDDDF1 - F1F1F1F1F1F1F1F1FFFFFF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFF1F1F1F1F1F1DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDCCCCCCFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFDDDDDDCCCCCCDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFF - FFFFF1F1F1F1F1F1F1F1F1F1F1F1DDDDDDDDDDDDDDDDDDCCCCCCC0C0C0F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFF - FFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFDDDDDDDD - DDDDDDDDDDDDDDDDDDDDDDFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1CCCCCC - DDDDDDF1F1F1F1F1F1F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1DDDDDDDDDDDDDDDD - DDDDDDDDDDDDDDDDDDDDCCCCCCDDDDDDC0C0C0CCCCCCB2B2B2F1F1F1F1F1F1FF - FFFFFFFFFFFFFFFFF1F1F1C0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0FFFFFFF1 - F1F1DDDDDDDDDDDDDDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1FFFFFF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDDDDDDDDDDDDDF1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1CCCCCCFFFFFFFFFFFFFF - FFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD - DDF1F1F1FFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFCCCCCCF1F1F1FF - FFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1DDDDDDDDDDDDF1F1F1FFFFFFDDDDDD - DDDDDDDDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1DDDDDDC0C0C0F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1CCCCCCC0C0C0DD - DDDDDDDDDDCCCCCCCCCCCC999999DDDDDDDDDDDDFFFFFFFFFFFFDDDDDDFFFFFF - FFFFFFFFFFFFFFFFFFF1F1F1DDDDDDC0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0 - F1F1F1FFFFFFDDDDDDDDDDDDF1F1F1CCCCCCF1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDDDDDF1F1F1DDDDDDDDDDDDF1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1DDDDDDF1F1F1F1F1F1DDDDDDCCCCCCCCCCCCFFFFFF - FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFF - FFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFDDDDDDDDDDDDDD - DDDDDDDDDDDDDDDDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDDDDD - F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1DDDDDDDDDDDDF1F1F1FFFF - FFF1F1F1DDDDDDDDDDDDDDDDDDDDDDDDF1F1F1DDDDDDF1F1F1F1F1F1F1F1F1DD - DDDDC0C0C0C0C0C0B2B2B2F1F1F1F1F1F1F1F1F1FFFFFFF1F1F1DDDDDDC0C0C0 - DDDDDDF1F1F1CCCCCCCCCCCCC0C0C0C0C0C0FFFFFFFFFFFFFFFFFFFFFFFFF1F1 - F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1C0C0C0C0C0C0C0C0C00000C0C0 - C0C0C0C0F1F1F1F1F1F1CCCCCCDDDDDDDDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F10000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FFFFFFFFFFFFFFFFFFFF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFCCCCCCCCCC - CCDDDDDDF1F1F1DDDDDDCCCCCCF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1C0C0C0C0C0C0C0C0C0 - 0000C0C0C0C0C0C0FFFFFFFFFFFFFFFFFFFFFFFFDDDDDDF1F1F1F1F1F1FFFFFF - FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F10000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FFF1F1F1F1F1F10000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1 - F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFF1F1F1DDDDDDC0C0C0C0C0C0CCCCCCDDDDDDCCCCCCC0C0C0C0C0 - C0C0C0C00000C0C0C0C0C0C0FFFFFFF1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1 - F1F1F1F1F1F1F1DDDDDDCCCCCCF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFF1F1F10000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFF - FFFFFFFFF1F1F1F1F1F1DDDDDDCCCCCCDDDDDDFFFFFFFFFFFFFFFFFFFFFFFFC0 - C0C0C0C0C0C0C0C00000C0C0C0C0C0C0F1F1F1CCCCCCFFFFFFFFFFFFFFFFFFFF - FFFFF1F1F1F1F1F1F1F1F1F1F1F1DDDDDDF1F1F1FFFFFFFFFFFFFFFFFFFFFFFF - FFFFFF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFDDDDDDF1F1F1 - F1F1F1F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFF - FFC0C0C0F1F1F1F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFF - FFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - CCCCCCDDDDDDF1F1F1F1F1F1F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1DDDDDDDDDD - DDDDDDDDDDDDDDCCCCCCF1F1F1F1F1F1FFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFF - FFFFDDDDDDDDDDDDDDDDDDF1F1F1FFFFFFFFFFFFF1F1F1F1F1F1C0C0C0F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1FF - FFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFF - F1F1F1C0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0DDDDDDDDDDDDDDDDDDF1F1F1 - FFFFFFFFFFFFF1F1F1CCCCCCC0C0C0CCCCCCDDDDDDFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFF1F1F10000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FFF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1 - F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1FFFFFFFFFF - FFF1F1F1DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFF1F1F1DDDDDDDDDDDDDD - DDDDDDDDDDF1F1F1F1F1F1DDDDDDF1F1F1F1F1F1F1F1F1DDDDDDDDDDDDCCCCCC - F1F1F1F1F1F1DDDDDDCCCCCCF1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1DDDDDDF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1FF - FFFFF1F1F1DDDDDDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1 - F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1FFFFFFFFFFFFC0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0DDDDDDDDDDDDC0C0 - C0CCCCCCF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFF1F1F1FFFFFFF1F1F1DD - DDDDDDDDDDDDDDDDDDDDDD0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFFF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FFFFFFFFFFFFFFFFFFFFFFFFFF800000800000800000F1F1F1 - FFFFFFF1F1F1FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1FFFFFFFFFFFF8000008000 - 00800000800000800000800000800000800000800000FFFFFFC0C0C0DDDDDDCC - CCCCDDDDDDC0C0C0DDDDDDF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1800000 - 800000800000DDDDDDCCCCCCC0C0C0C0C0C0DDDDDD0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FFDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1DDDDDDCCCCCCF1F1F10000FF0000FF0000FF0000FF0000FF0000FF0000FF - F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1DDDDDDFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFF1F1F1F1F1F1DDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1FFFFFFC0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0DDDDDDDD - DDDDCCCCCCCCCCCCF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFF - F1F1F1DDDDDDDDDDDDDDDDDDDDDDDD0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFFFFF - FFFF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FFFFFFFFFFFFFFFFFFFFFFFFFF8000008000008000 - 00800000FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F180 - 0000800000800000800000800000800000800000800000800000800000DDDDDD - F1F1F1DDDDDDF1F1F1DDDDDDF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1 - F1F1F1F1800000800000800000C0C0C0C0C0C0DDDDDDF1F1F10000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FFF1F1F1FFFFFFF1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1DDDDDDCCCCCCF1F1F10000FF0000FF0000FF0000FF0000FF0000 - FF0000FFF1F1F1F1F1F1FFFFFFF1F1F1DDDDDDF1F1F1FFFFFFF1F1F1FFFFFFFF - FFFFFFFFFFFFFFFFF1F1F1F1F1F1DDDDDDC0C0C0F1F1F1F1F1F1F1F1F1FFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1C0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0 - DDDDDDDDDDDDC0C0C0DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFF - FFFFFFFFF1F1F1DDDDDDDDDDDDDDDDDD0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - F1F1F1DDDDDD0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FFF1F1F1F1F1F1FFFFFFFFFFFFFF - FFFF800000800000800000F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1800000 - 8000008000008000008000008000008000008000008000008000008000008000 - 00800000800000800000F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1FFFFFFFFFFFFF1 - F1F1F1F1F1F1F1F1800000800000800000800000CCCCCCFFFFFFFFFFFFF1F1F1 - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFF1F1F1DDDD - DDDDDDDDDDDDDDDDDDDDDDDDDDCCCCCCFFFFFFFFFFFF0000FF0000FF0000FF00 - 00FF0000FF0000FFF1F1F1F1F1F1FFFFFFDDDDDDDDDDDDCCCCCCF1F1F1F1F1F1 - FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1C0C0C0CCCCCCF1F1F1F1F1F1FFFF - FFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1FFFFFFC0C0C0C0C0C0C0C0C00000C0C0 - C0C0C0C0F1F1F1CCCCCCF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1CCCCCC0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FFF1F1F1FFFFFFDDDDDD0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFF1F1F1DDDDDD - F1F1F1F1F1F1F1F1F1800000800000800000F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1800000800000800000800000800000F1F1F1DDDDDDDDDDDDFFFFFFFFFFFFFF - FFFFFFFFFF800000800000800000800000800000FFFFFFF1F1F1F1F1F1DDDDDD - DDDDDDCCCCCCC0C0C0F1F1F1DDDDDD800000800000800000800000FFFFFFFFFF - FFF1F1F1F1F1F1F1F1F10000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FFCCCCCCDDDDDDCCCCCCDDDDDDC0C0C0DDDDDDFFFFFFFFFFFFFFFFFF0000FF - 0000FF0000FF0000FF0000FF0000FFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1FFFF - FFF1F1F1DDDDDDFFFFFFFFFFFFF1F1F1F1F1F1DDDDDDC0C0C0CCCCCCF1F1F1F1 - F1F1FFFFFFF1F1F1F1F1F1F1F1F1DDDDDDCCCCCCB2B2B2C0C0C0C0C0C0C0C0C0 - 0000C0C0C0C0C0C0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1CCCCCC0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FFF1F1F1F1F1F1F1F1F10000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFDDDD - DDDDDDDDF1F1F1F1F1F1F1F1F1800000800000800000DDDDDDF1F1F1DDDDDDF1 - F1F1F1F1F1800000800000800000800000F1F1F1DDDDDDDDDDDDDDDDDDFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1800000800000800000F1F1F1F1F1F1F1F1 - F1DDDDDDDDDDDD999999B2B2B2F1F1F1DDDDDDDDDDDD800000800000800000FF - FFFFFFFFFFF1F1F1FFFFFFFFFFFF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FFF1F1F1F1F1F1DDDDDDDDDDDDDDDDDDFFFFFFF1F1F1F1F1F1F1F1 - F10000FF0000FF0000FF0000FF0000FF0000FFFFFFFFFFFFFFFFFFFFF1F1F1FF - FFFFFFFFFFFFFFFFDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1DDDDDDC0C0C0CCCCCC - F1F1F1F1F1F1FFFFFFF1F1F1F1F1F1DDDDDDDDDDDDC0C0C0CCCCCCC0C0C0C0C0 - C0C0C0C00000C0C0C0C0C0C0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F10000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F10000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FFF1F1F1F1F1F1DDDDDDF1F1F1800000800000800000DDDDDD - DDDDDDF1F1F1DDDDDD800000800000800000800000F1F1F1DDDDDDDDDDDDDDDD - DDDDDDDDDDDDDDCCCCCCF1F1F1F1F1F1F1F1F1F1F1F180000080000080000080 - 0000F1F1F1C0C0C0B2B2B2DDDDDDFFFFFFFFFFFFFFFFFFF1F1F1800000800000 - 800000800000F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1DDDDDDDDDDDDDDDDDDC0C0 - C0CCCCCCF1F1F1FFFFFFFFFFFFF1F1F1F1F1F1CCCCCC999999CCCCCCF1F1F1C0 - C0C0C0C0C0C0C0C00000C0C0C0C0C0C0F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFF - FFFFF1F1F1FFFFFFFFFFFFDDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F100 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FFF1F1F1F1F1F1FFFFFFF1F1F1F1F1F18000008000 - 00800000C0C0C0CCCCCCC0C0C0C0C0C0800000800000800000F1F1F1DDDDDDDD - DDDDDDDDDDCCCCCCC0C0C0DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFF - 800000800000800000CCCCCCDDDDDDFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDDDDD - DD800000800000800000800000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F100 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDDDDDDDDDDDDDF1 - F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDC0C0C0DDDDDDF1F1F1 - FFFFFFC0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0F1F1F1DDDDDDFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F10000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FFF1F1F1F1F1F1F1F1F1DDDDDD - DDDDDDCCCCCC0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FFF1F1F1F1F1F1F1F1F1F1F1F180 - 0000800000800000800000FFFFFFF1F1F1FFFFFFFFFFFF800000800000800000 - DDDDDDDDDDDDDDDDDDC0C0C0F1F1F1F1F1F1F1F1F1FFFFFFF1F1F1F1F1F1FFFF - FFFFFFFF800000800000800000800000FFFFFFFFFFFFFFFFFFFFFFFFCCCCCCC0 - C0C0C0C0C0C0C0C0CCCCCC800000800000800000FFFFFFFFFFFFFFFFFFFFFFFF - F1F1F1DDDDDD0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDDDDDDDF1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDF1F1F1FFFFFFF1F1F1DDDDDDDDDDDDFFFF - FFF1F1F1FFFFFFC0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0F1F1F1DDDDDDFFFF - FFFFFFFFF1F1F1F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1DDDDDDCCCCCCF1F1F1F1 - F1F1F1F1F1F1F1F10000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFF1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1C0C0C0CCCCCC0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFF1F1F1F1F1F1 - F1F1F1F1F1F1800000800000800000800000FFFFFFFFFFFFFFFFFFFFFFFFF1F1 - F1F1F1F1DDDDDDDDDDDDDDDDDDC0C0C0F1F1F1F1F1F1F1F1F1FFFFFFF1F1F1FF - FFFFFFFFFFFFFFFF800000800000800000800000800000FFFFFFFFFFFFFFFFFF - CCCCCCCCCCCCCCCCCCDDDDDDDDDDDD800000800000800000DDDDDDC0C0C0F1F1 - F1F1F1F1F1F1F1DDDDDDF1F1F10000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDFFFFFFF1F1F1DDDDDDF1 - F1F1FFFFFFF1F1F1FFFFFFC0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0C0C0C0DD - DDDDF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1DDDDDDCCCCCCDDDDDD - DDDDDDF1F1F1CCCCCCCCCCCC0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFF1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1DDDDDDF1F1F10000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FFF1F1F1F1F1F1F1F1F1DDDDDD800000800000800000F1F1F1FFFFFFFFFFFFFF - FFFFFFFFFFF1F1F1CCCCCCB2B2B2CCCCCCCCCCCCFFFFFFF1F1F1F1F1F1FFFFFF - F1F1F1FFFFFFFFFFFF800000800000800000800000800000800000F1F1F1FFFF - FFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFF800000800000800000C0 - C0C0FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F10000FF0000FF0000FF - 0000FF0000FF0000FF0000FFF1F1F1FFFFFFFFFFFFFFFFFF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FFFFFFFFF1F1F1F1F1F1FFFFFFFFFFFFF1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDC0C0C0C0C0C0FFFFFFFFFFFF - F1F1F1DDDDDDCCCCCCDDDDDDF1F1F1C0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0 - F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1DDDD - DDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F10000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - FFFFFFFFFFFFF1F1F1DDDDDDF1F1F1F1F1F1FFFFFFFFFFFF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FFF1F1F1DDDDDDDDDDDDDDDDDDDDDDDD800000800000800000FFFFFF - FFFFFFFFFFFFFFFFFFC0C0C0CCCCCCDDDDDDFFFFFFFFFFFFF1F1F1CCCCCCF1F1 - F1FFFFFF800000800000800000800000800000800000800000800000DDDDDDDD - DDDDF1F1F1DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1800000 - 800000800000F1F1F1F1F1F1DDDDDDCCCCCCCCCCCCDDDDDDF1F1F1F1F1F10000 - FF0000FF0000FF0000FF0000FF0000FF0000FFF1F1F1F1F1F1F1F1F1F1F1F100 - 00FF0000FF0000FF0000FF0000FF0000FFF1F1F1F1F1F1F1F1F1FFFFFFFFFFFF - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDB2B2B2C0C0C0DDDDDDFFFFFFFFFF - FFFFFFFFDDDDDDDDDDDDDDDDDDF1F1F1FFFFFFC0C0C0C0C0C0C0C0C00000C0C0 - C0C0C0C0F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1DDDDDDF1F1F1F1F1F1F1F1F1F1F1F10000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FFFFFFFFFFFFFFF1F1F1DDDDDDDDDDDDCCCCCCDDDDDDF1F1F10000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FFCCCCCCCCCCCCDDDDDDCCCCCC8000008000008000 - 00FFFFFFFFFFFFFFFFFFF1F1F1C0C0C0F1F1F1FFFFFFFFFFFFFFFFFFCCCCCCDD - DDDDF1F1F1800000800000800000800000800000800000800000800000800000 - F1F1F1F1F1F1F1F1F1DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1800000800000800000F1F1F1F1F1F1F1F1F1DDDDDDDDDDDDF1F1F1F1F1F1F1 - F1F10000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFFFF1F1F1 - F1F1F10000FF0000FF0000FF0000FF0000FF0000FFF1F1F1F1F1F1F1F1F1FFFF - FFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1DDDDDDC0C0C0C0C0C0DDDDDDFFFFFFFF - FFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFC0C0C0C0C0C0C0C0C0 - 0000C0C0C0C0C0C0FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1DDDDDDDDDDDDCCCCCCF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFF1F1F1F1F1 - F1FFFFFFFFFFFFF1F1F1FFFFFFFFFFFFF1F1F1DDDDDDF1F1F1DDDDDDDDDDDDDD - DDDDFFFFFFFFFFFFFFFFFFFFFFFFC0C0C0CCCCCCCCCCCCF1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F10000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FFF1F1F1F1F1F1DDDDDDF1F1F180 - 0000800000800000800000F1F1F1DDDDDDDDDDDDFFFFFFFFFFFFFFFFFFF1F1F1 - 8000008000008000008000008000008000008000008000008000008000008000 - 00F1F1F1FFFFFFF1F1F1B2B2B2C0C0C0DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1800000800000800000800000FFFFFFF1F1F1F1F1F1FFFFFF - FFFFFFF1F1F1F1F1F1F1F1F10000FF0000FF0000FF0000FF0000FF0000FF0000 - FFF1F1F1F1F1F1F1F1F10000FF0000FF0000FF0000FF0000FFF1F1F1FFFFFFFF - FFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1CCCCCCC0C0C0CCCCCCFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1C0C0C0C0C0 - C0C0C0C00000C0C0C0C0C0C0F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1C0C0C0C0C0C0DDDDDDF1F1F1FFFFFFF1F1F1FFFFFFF1F1F1FF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1DDDDDDFFFFFFFFFFFFF1F1F1F1F1F1CCCCCCFFFFFFF1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F10000FF0000FF0000FF0000FF0000FF0000FFF1F1F100 - 00FF0000FF0000FF0000FFFFFFFF0000FF0000FF0000FF0000FFF1F1F1F1F1F1 - F1F1F1FFFFFF800000800000800000F1F1F1DDDDDDCCCCCCF1F1F1F1F1F1F1F1 - F1F1F1F1800000800000800000800000800000800000800000800000F1F1F1F1 - F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1800000800000800000FFFFFFF1F1F1FFFF - FFFFFFFFFFFFFFFFFFFFCCCCCCC0C0C0C0C0C0F1F1F10000FF0000FF0000FF00 - 00FF0000FF0000FFF1F1F1F1F1F10000FF0000FF0000FF0000FF0000FF0000FF - FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1C0C0C0DDDDDDFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1C0 - C0C0C0C0C0C0C0C00000C0C0C0C0C0C0F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1F1 - F1F1F1F1F1F1F1F1DDDDDDC0C0C0CCCCCCFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1 - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1CCCCCCFFFFFFFFFFFFF1F1F1F1F1F1DDDDDDF1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1FFFFFFF1F1F10000FF0000FF0000FF0000FF0000FF - 0000FFFFFFFF0000FF0000FFFFFFFFFFFFFF0000FF0000FF0000FF0000FFF1F1 - F1F1F1F1F1F1F1FFFFFF800000800000800000800000DDDDDDC0C0C0F1F1F1F1 - F1F1F1F1F1F1F1F1800000800000800000800000800000FFFFFFFFFFFFFFFFFF - FFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFF1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1800000800000800000FF - FFFFFFFFFFFFFFFFFFFFFFF1F1F1B2B2B2C0C0C0CCCCCCDDDDDD0000FF0000FF - 0000FF0000FF0000FF0000FF0000FFF1F1F10000FF0000FF0000FF0000FF0000 - FF0000FFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1CCCCCCCCCCCCF1F1F1FF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1 - F1F1F1C0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0FFFFFFFFFFFFFFFFFFF1F1F1 - F1F1F1DDDDDDDDDDDDDDDDDDDDDDDDC0C0C0CCCCCCFFFFFFF1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1DDDDDDCCCCCCC0C0C0F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFF1F1F10000FF0000FF0000 - FF0000FF0000FF0000FFFFFFFFFFFFFFFFFFFFFFFFFF0000FF0000FF0000FF00 - 00FF0000FFFFFFFFFFFFFFFFFFFFFFFFFF800000800000800000800000CCCCCC - F1F1F1F1F1F1F1F1F1F1F1F1800000800000800000800000FFFFFFFFFFFFFFFF - FFFFFFFFF1F1F1CCCCCCFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDF1F1F1F1F1F1FF - FFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1800000800000 - 800000FFFFFFF1F1F1FFFFFFF1F1F1DDDDDDCCCCCCF1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F10000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FFF1F1F1DDDDDDF1F1F1F1F1F1F1F1F1CCCCCC999999F1F1F1 - F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1 - F1F1F1F1F1F1F1C0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0FFFFFFDDDDDDDDDD - DDDDDDDDDDDDDDDDDDDDDDDDDDF1F1F1DDDDDDC0C0C0CCCCCCF1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1DDDDDDDDDDDDF1F1F1F1F1F1 - F1F1F1F1F1F1CCCCCCC0C0C0DDDDDDF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFDDDD - DDDDDDDDC0C0C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1CCCCCC0000FF00 - 00FF0000FF0000FF0000FFDDDDDDDDDDDDDDDDDDF1F1F1FFFFFFFFFFFF0000FF - 0000FF0000FF0000FF0000FFF1F1F1DDDDDDDDDDDDCCCCCCDDDDDD8000008000 - 00F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1FFFFFF800000800000800000F1F1F1F1 - F1F1DDDDDDC0C0C0CCCCCCCCCCCCFFFFFFFFFFFFF1F1F1DDDDDDC0C0C0800000 - 800000800000F1F1F1F1F1F1F1F1F1FFFFFFF1F1F1F1F1F1FFFFFFFFFFFFFFFF - FF800000800000800000800000F1F1F1F1F1F1F1F1F1DDDDDDF1F1F1F1F1F1F1 - F1F1FFFFFFFFFFFFFFFFFF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FFF1F1F1F1F1F1F1F1F1DDDDDDC0C0C0DDDD - DDF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFF1 - F1F1F1F1F1CCCCCCFFFFFFC0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0F1F1F1F1 - F1F1DDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDFFFFFFFFFFFF - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDD - DDDDDDDDDDDDDDDDDDDDCCCCCCF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFF - FFFFDDDDDDDDDDDDC0C0C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - F1F1F10000FF0000FF0000FFDDDDDDDDDDDDDDDDDDDDDDDDCCCCCCF1F1F1FFFF - FFDDDDDDF1F1F1F1F1F10000FF0000FF0000FFB2B2B2C0C0C0DDDDDDF1F1F180 - 0000800000800000FFFFFFFFFFFFF1F1F1F1F1F1FFFFFF800000800000800000 - 800000DDDDDDB2B2B2CCCCCCFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1CCCC - CC800000800000800000F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1FFFFFFFFFFFFFF - FFFFFFFFFFFFFFFF800000800000800000F1F1F1F1F1F1FFFFFFF1F1F1FFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FFDDDDDDDDDDDDDDDDDDCCCCCCCC - CCCCF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1FFFFFFFFFFFF - F1F1F1DDDDDDCCCCCCCCCCCCFFFFFFC0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0 - F1F1F1F1F1F1DDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFF - FFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFF1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1CCCCCCF1F1F1F1F1F1F1F1F1FFFFFFFFFFFF - FFFFFFFFFFFFC0C0C0C0C0C0B2B2B2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFF1F1F10000FF0000FF0000FF0000FF0000FF0000FF0000FFCCCCCCF1 - F1F1F1F1F10000FF0000FF0000FF0000FF0000FF0000FFCCCCCCDDDDDDF1F1F1 - F1F1F1800000800000800000800000FFFFFFF1F1F1FFFFFFFFFFFFF1F1F18000 - 00800000800000F1F1F1C0C0C0DDDDDDFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1 - F1F1DDDDDD800000800000800000F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1FFFFFF - FFFFFFFFFFFFFFFFFFFFFFFF800000800000800000800000FFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F10000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFDDDDDDDDDDDD - 999999DDDDDDF1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFF - FFF1F1F1F1F1F1CCCCCCB2B2B2DDDDDDFFFFFFC0C0C0C0C0C0C0C0C00000C0C0 - C0C0C0C0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFF - F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1CCCCCCCCCCCCF1F1F1F1F1F1F1F1F1FFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1 - F1F1FFFFFFFFFFFFFFFFFFFFFFFF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FFF1F1F1FFFFFF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFF - FFFFFFFFFFFFFFF1F1F1FFFFFF800000800000800000FFFFFFFFFFFFFFFFFFF1 - F1F1F1F1F1800000800000800000800000800000FFFFFFFFFFFFFFFFFFF1F1F1 - F1F1F1F1F1F1F1F1F1800000800000800000800000FFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDC0C0C0800000800000800000800000FF - FFFFFFFFFFF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1 - FFFFFF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFC0C0 - C0C0C0C0CCCCCCF1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1CCCCCCC0C0C0CC - CCCCFFFFFFF1F1F1F1F1F1C0C0C0DDDDDDFFFFFFFFFFFFC0C0C0C0C0C0C0C0C0 - 0000C0C0C0C0C0C0DDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1DDDDDDC0C0C0DDDDDDF1F1F1FFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1FFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFF1F1F1FFFFFFF1F1F1FFFFFFFFFFFFFFFFFF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FFFFFFFF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FFFFFFFFF1F1F1FFFFFFFFFFFF800000800000800000DDDDDDF1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F18000008000008000008000008000008000 - 00800000800000800000800000800000800000800000800000FFFFFFFFFFFFFF - FFFFFFFFFF800000800000800000800000800000800000800000800000800000 - 800000800000800000800000800000800000800000800000800000F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1B2B2B20000FF0000FF0000FF0000FF0000FF0000FF00 - 00FFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFCCCCCC999999B2B2B2 - F1F1F1F1F1F1FFFFFFC0C0C0C0C0C0CCCCCCF1F1F1FFFFFFFFFFFFC0C0C0C0C0 - C0C0C0C00000C0C0C0C0C0C0F1F1F1F1F1F1F1F1F1DDDDDDDDDDDDDDDDDDDDDD - DDC0C0C0C0C0C0F1F1F1F1F1F1DDDDDDDDDDDDF1F1F1F1F1F1FFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1FFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFF1F1F10000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FFFFFFFFF1F1F1DDDDDDF1F1F1DDDDDD8000008000008000 - 00DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F180000080000080000080 - 0000800000800000800000800000800000800000800000800000FFFFFFF1F1F1 - F1F1F1FFFFFFFFFFFF8000008000008000008000008000008000008000008000 - 00800000800000800000800000800000800000800000800000800000800000F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1C0C0C00000FF0000FF0000FF0000FF0000FF - 0000FF0000FFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1B2B2B2CCCC - CCDDDDDDFFFFFFFFFFFFF1F1F1CCCCCCCCCCCCDDDDDDFFFFFFFFFFFFFFFFFFC0 - C0C0C0C0C0C0C0C00000C0C0C0C0C0C0DDDDDDCCCCCCCCCCCCC0C0C0C0C0C0B2 - B2B2CCCCCCDDDDDDFFFFFFFFFFFFDDDDDDDDDDDDCCCCCCDDDDDDF1F1F1F1F1F1 - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1 - F1CCCCCCCCCCCCFFFFFFF1F1F1F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1FF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFF1F1F1F1F1F1 - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FFF1F1F1F1F1F1DDDDDD80000080 - 0000800000800000F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1DDDDDD800000800000800000800000800000800000800000FFFFFFF1F1 - F1DDDDDDF1F1F1F1F1F1F1F1F1F1F1F180000080000080000080000080000080 - 0000800000800000800000800000800000800000800000800000800000800000 - 800000800000800000F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F10000FF0000 - FF0000FF0000FF0000FFFFFFFFFFFFFFDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFC0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1FFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDDDDDDDDDDDCCCCCCF1F1F1F1 - F1F1F1F1F1FFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1F1 - F1F1DDDDDDC0C0C0F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1DDDDDD - DDDDDDDDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDD - DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDC0C0C0CCCCCCF1F1F1F1F1F1FF - FFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - C0C0C0F1F1F1F1F1F1DDDDDDDDDDDDDDDDDDF1F1F1F1F1F1F1F1F1FFFFFFFFFF - FFFFFFFFF1F1F1F1F1F1F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FF - FFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1CCCCCCF1F1F1F1F1F1F1F1F1 - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1 - F1F1F1F1F1F1F1C0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0F1F1F1F1F1F1F1F1 - F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1 - F1F1FFFFFFFFFFFFF1F1F1DDDDDDFFFFFFFFFFFFFFFFFFDDDDDDDDDDDDDDDDDD - F1F1F1FFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFF1F1F1FFFFFFF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1 - F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1 - F1F1F1F1F1F1CCCCCCC0C0C0F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFDDDDDDF1F1 - F1DDDDDDDDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDF1 - F1F1DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDC0C0C0DDDDDDF1F1F1 - F1F1F1F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1DDDDDDC0C0C0F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1 - F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1CCCCCCDDDDDDF1F1 - F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFC0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0F1F1F1FF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - DDDDDDC0C0C0DDDDDDC0C0C0DDDDDDFFFFFFFFFFFFF1F1F1F1F1F1DDDDDDDDDD - DDDDDDDDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFF - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1 - F1F1F1F1F1F1F1DDDDDDC0C0C0DDDDDDF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1 - F1F1DDDDDDDDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDD - C0C0C0DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1CCCCCCDDDD - DDF1F1F1F1F1F1F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1DDDDDDF1F1F1F1 - F1F1C0C0C0C0C0C0F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1FFFFFFF1F1F1FFFFFF - F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1DDDDDDC0C0C0F1 - F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1 - F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFC0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0 - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFC0C0 - C0CCCCCCCCCCCCDDDDDDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1DD - DDDDDDDDDDDDDDDDDDDDDDDDDDDDF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFF1F1 - F1F1F1F1F1F1F1DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFF1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1C0C0C0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFF - FFFFFFF1F1F1DDDDDDCCCCCCDDDDDDF1F1F1DDDDDDDDDDDDDDDDDDC0C0C0CCCC - CCCCCCCCCCCCCCF1F1F1DDDDDDDDDDDDF1F1F1F1F1F1F1F1F1DDDDDDDDDDDDCC - CCCCF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1DDDDDDDDDDDD - DDDDDDDDDDDDC0C0C0DDDDDDF1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1 - F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1DDDDDD - CCCCCCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFC0C0C0C0C0C0C0C0C00000C0C0 - C0C0C0C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1FFFFFFF1 - F1F1DDDDDDF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1CCCCCC - DDDDDDC0C0C0CCCCCCDDDDDDC0C0C0C0C0C0CCCCCCF1F1F1FFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDDDDDDDDD - DDDDF1F1F1F1F1F1CCCCCCDDDDDDF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1 - FFFFFFF1F1F1F1F1F1DDDDDDC0C0C0DDDDDDF1F1F1F1F1F1FFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFC0C0C0CCCCCCF1F1F1F1F1F1DDDDDDDDDDDDC0C0C0DDDDDDDD - DDDDF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFF1F1F1FFFFFFF1F1F1F1F1F1DDDDDD - DDDDDDDDDDDDDDDDDDFFFFFFF1F1F1FFFFFFFFFFFFDDDDDDDDDDDDF1F1F1F1F1 - F1DDDDDDCCCCCCDDDDDDDDDDDDF1F1F1FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1FF - FFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCCCCCCDDDDDDF1F1F1 - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1DDDD - DDCCCCCCCCCCCCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0C0C0C0C0C0C0C0C0 - 0000C0C0C0C0C0C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1 - F1F1F1F1F1F1DDDDDDF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1 - F1DDDDDDCCCCCCC0C0C0DDDDDDCCCCCCC0C0C0CCCCCCF1F1F1FFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDF1F1F1F1F1F1F1F1F1DDDDDD - CCCCCCC0C0C0DDDDDDCCCCCCC0C0C0F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFF - FFF1F1F1FFFFFFF1F1F1DDDDDDC0C0C0CCCCCCF1F1F1F1F1F1FFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFF1F1F1DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDD - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1 - F1DDDDDDDDDDDDDDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1CCCCCCDDDDDDF1F1F1F1F1F1FFFFFFF1F1F1FFFFFFF1F1F1F1F1F1 - F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1B2B2B2CCCC - CCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1 - F1F1DDDDDDC0C0C0F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0C0C0C0C0 - C0C0C0C00000C0C0C0C0C0C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1 - F1F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1FFFFFFF1F1F1F1F1F1FFFFFFF1F1F1FF - FFFFF1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1 - F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1DDDDDDC0C0C0CCCCCCF1F1F1DDDD - DDC0C0C0DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFF1F1F1F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1DD - DDDDDDDDDDDDDDDDDDDDDDDDDDDDF1F1F1DDDDDDCCCCCCDDDDDDF1F1F1FFFFFF - FFFFFFFFFFFFF1F1F1DDDDDDF1F1F1FFFFFFF1F1F1FFFFFFFFFFFFF1F1F1DDDD - DDF1F1F1FFFFFFFFFFFFF1F1F1DDDDDDF1F1F1FFFFFFF1F1F1DDDDDDCCCCCCDD - DDDDF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - DDDDDDCCCCCCB2B2B2C0C0C0FFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1CCCCCCC0 - C0C0C0C0C0C0C0C00000C0C0C0C0C0C0F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFF1F1F1F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFF1F1F1F1F1F1DDDDDDCCCCCCCCCCCCF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1CC - CCCCCCCCCCC0C0C0F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1FFFF - FFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1 - DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDCCCCCCC0C0C0CCCCCCDDDDDDF1F1F1F1F1 - F1FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFF1 - F1F1F1F1F1FFFFFFFFFFFFDDDDDDCCCCCCCCCCCCF1F1F1FFFFFFFFFFFFF1F1F1 - F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1DDDDDDDDDDDDC0C0C0 - CCCCCCC0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C00000} - Stretch = True - IsControl = True - end - object lblProductName: TLabel - Left = 5 - Top = 80 - Width = 68 - Height = 13 - Alignment = taCenter - Caption = 'Product Name' - IsControl = True - end - object lblVersion: TLabel - Left = 8 - Top = 160 - Width = 74 - Height = 13 - Caption = 'Version: 1.1.1.1' - IsControl = True - end - object lblGovStatement: TLabel - Left = 5 - Top = 96 - Width = 231 - Height = 13 - Alignment = taCenter - Caption = 'Developed by the Department of Veterans Affairs' - IsControl = True - end - object lblCRC: TLabel - Left = 232 - Top = 160 - Width = 92 - Height = 13 - Caption = 'CRC: DDDDDDDD' - end - object lblDate: TLabel - Left = 97 - Top = 160 - Width = 82 - Height = 13 - Alignment = taCenter - Caption = 'January 30, 2000' - end - object ProgramIcon: TImage - Left = 176 - Top = 8 - Width = 145 - Height = 73 - end - object Memo1: TMemo - Left = 8 - Top = 112 - Width = 321 - Height = 49 - BorderStyle = bsNone - Lines.Strings = ( - 'Unauthorized access or use of this system and/or its data is a ' - - 'federal crime. Use of all data must be in accordance with VA po' + - 'licy ' - 'on security and privacy.') - ParentColor = True - TabOrder = 0 - end - end - object OKButton: TButton - Left = 139 - Top = 204 - Width = 75 - Height = 25 - Caption = 'OK' - Default = True - ModalResult = 1 - TabOrder = 1 - end -end diff --git a/BDK32/Samples/RPCBroker/BrokerEx/frmVistAAbout.pas b/BDK32/Samples/RPCBroker/BrokerEx/frmVistAAbout.pas deleted file mode 100644 index 24437df..0000000 --- a/BDK32/Samples/RPCBroker/BrokerEx/frmVistAAbout.pas +++ /dev/null @@ -1,267 +0,0 @@ -unit frmVistAAbout; - -interface - -uses Windows, SysUtils, Classes, Graphics, Forms, Controls, StdCtrls, - Buttons, ExtCtrls, jpeg, jconsts, Dialogs; - -TYPE - TInteger8 = Int64; - -type - TfrmVistAAbout = class(TForm) - Panel1: TPanel; - VistaLogo: TImage; - lblProductName: TLabel; - lblVersion: TLabel; - lblGovStatement: TLabel; - OKButton: TButton; - lblCRC: TLabel; - Memo1: TMemo; - lblDate: TLabel; - ProgramIcon: TImage; - procedure FormCreate(Sender: TObject); - private - { Private declarations } - public - { Public declarations } - procedure getfileinfo(var Version: String; var ProductName: String); virtual; - end; - -procedure ShowAboutBox; - -implementation - -{$R *.DFM} - - CONST - table: ARRAY[0..255] OF DWORD = - ($00000000, $77073096, $EE0E612C, $990951BA, - $076DC419, $706AF48F, $E963A535, $9E6495A3, - $0EDB8832, $79DCB8A4, $E0D5E91E, $97D2D988, - $09B64C2B, $7EB17CBD, $E7B82D07, $90BF1D91, - $1DB71064, $6AB020F2, $F3B97148, $84BE41DE, - $1ADAD47D, $6DDDE4EB, $F4D4B551, $83D385C7, - $136C9856, $646BA8C0, $FD62F97A, $8A65C9EC, - $14015C4F, $63066CD9, $FA0F3D63, $8D080DF5, - $3B6E20C8, $4C69105E, $D56041E4, $A2677172, - $3C03E4D1, $4B04D447, $D20D85FD, $A50AB56B, - $35B5A8FA, $42B2986C, $DBBBC9D6, $ACBCF940, - $32D86CE3, $45DF5C75, $DCD60DCF, $ABD13D59, - $26D930AC, $51DE003A, $C8D75180, $BFD06116, - $21B4F4B5, $56B3C423, $CFBA9599, $B8BDA50F, - $2802B89E, $5F058808, $C60CD9B2, $B10BE924, - $2F6F7C87, $58684C11, $C1611DAB, $B6662D3D, - - $76DC4190, $01DB7106, $98D220BC, $EFD5102A, - $71B18589, $06B6B51F, $9FBFE4A5, $E8B8D433, - $7807C9A2, $0F00F934, $9609A88E, $E10E9818, - $7F6A0DBB, $086D3D2D, $91646C97, $E6635C01, - $6B6B51F4, $1C6C6162, $856530D8, $F262004E, - $6C0695ED, $1B01A57B, $8208F4C1, $F50FC457, - $65B0D9C6, $12B7E950, $8BBEB8EA, $FCB9887C, - $62DD1DDF, $15DA2D49, $8CD37CF3, $FBD44C65, - $4DB26158, $3AB551CE, $A3BC0074, $D4BB30E2, - $4ADFA541, $3DD895D7, $A4D1C46D, $D3D6F4FB, - $4369E96A, $346ED9FC, $AD678846, $DA60B8D0, - $44042D73, $33031DE5, $AA0A4C5F, $DD0D7CC9, - $5005713C, $270241AA, $BE0B1010, $C90C2086, - $5768B525, $206F85B3, $B966D409, $CE61E49F, - $5EDEF90E, $29D9C998, $B0D09822, $C7D7A8B4, - $59B33D17, $2EB40D81, $B7BD5C3B, $C0BA6CAD, - - $EDB88320, $9ABFB3B6, $03B6E20C, $74B1D29A, - $EAD54739, $9DD277AF, $04DB2615, $73DC1683, - $E3630B12, $94643B84, $0D6D6A3E, $7A6A5AA8, - $E40ECF0B, $9309FF9D, $0A00AE27, $7D079EB1, - $F00F9344, $8708A3D2, $1E01F268, $6906C2FE, - $F762575D, $806567CB, $196C3671, $6E6B06E7, - $FED41B76, $89D32BE0, $10DA7A5A, $67DD4ACC, - $F9B9DF6F, $8EBEEFF9, $17B7BE43, $60B08ED5, - $D6D6A3E8, $A1D1937E, $38D8C2C4, $4FDFF252, - $D1BB67F1, $A6BC5767, $3FB506DD, $48B2364B, - $D80D2BDA, $AF0A1B4C, $36034AF6, $41047A60, - $DF60EFC3, $A867DF55, $316E8EEF, $4669BE79, - $CB61B38C, $BC66831A, $256FD2A0, $5268E236, - $CC0C7795, $BB0B4703, $220216B9, $5505262F, - $C5BA3BBE, $B2BD0B28, $2BB45A92, $5CB36A04, - $C2D7FFA7, $B5D0CF31, $2CD99E8B, $5BDEAE1D, - - $9B64C2B0, $EC63F226, $756AA39C, $026D930A, - $9C0906A9, $EB0E363F, $72076785, $05005713, - $95BF4A82, $E2B87A14, $7BB12BAE, $0CB61B38, - $92D28E9B, $E5D5BE0D, $7CDCEFB7, $0BDBDF21, - $86D3D2D4, $F1D4E242, $68DDB3F8, $1FDA836E, - $81BE16CD, $F6B9265B, $6FB077E1, $18B74777, - $88085AE6, $FF0F6A70, $66063BCA, $11010B5C, - $8F659EFF, $F862AE69, $616BFFD3, $166CCF45, - $A00AE278, $D70DD2EE, $4E048354, $3903B3C2, - $A7672661, $D06016F7, $4969474D, $3E6E77DB, - $AED16A4A, $D9D65ADC, $40DF0B66, $37D83BF0, - $A9BCAE53, $DEBB9EC5, $47B2CF7F, $30B5FFE9, - $BDBDF21C, $CABAC28A, $53B39330, $24B4A3A6, - $BAD03605, $CDD70693, $54DE5729, $23D967BF, - $B3667A2E, $C4614AB8, $5D681B02, $2A6F2B94, - $B40BBE37, $C30C8EA1, $5A05DF1B, $2D02EF8D); - - // Use CalcCRC32 as a procedure so CRCValue can be passed in but - // also returned. This allows multiple calls to CalcCRC32 for - // the "same" CRC-32 calculation. - PROCEDURE CalcCRC32 (p: pointer; ByteCount: DWORD; VAR CRCValue: DWORD); - // The following is a little cryptic (but executes very quickly). - // The algorithm is as follows: - // 1. exclusive-or the input byte with the low-order byte of - // the CRC register to get an INDEX - // 2. shift the CRC register eight bits to the right - // 3. exclusive-or the CRC register with the contents of - // Table[INDEX] - // 4. repeat steps 1 through 3 for all bytes - - VAR - i: DWORD; - q: ^BYTE; - BEGIN - q := p; - FOR i := 0 TO ByteCount-1 DO BEGIN - CRCvalue := (CRCvalue SHR 8) XOR - Table[ q^ XOR (CRCvalue AND $000000FF) ]; - INC(q) - END - END {CalcCRC32}; - - - // The CRC-32 value calculated here matches the one from the PKZIP program. - // Use MemoryStream to read file in binary mode. - PROCEDURE CalcFileCRC32 (FromName: STRING; VAR CRCvalue: DWORD; - VAR TotalBytes: TInteger8; - VAR error: WORD); - VAR - Stream: TMemoryStream; - BEGIN - error := 0; - CRCValue := $FFFFFFFF; - Stream := TMemoryStream.Create; - TRY - TRY - Stream.LoadFromFile(FromName); - IF Stream.Size > 0 - THEN CalcCRC32 (Stream.Memory, Stream.Size, CRCvalue) - EXCEPT - ON E: EReadError DO - error := 1 - END; - - CRCvalue := NOT CRCvalue; - TotalBytes := Stream.Size - FINALLY - Stream.Free - END; - END {CalcFileCRC32}; - -procedure TfrmVistAAbout.FormCreate(Sender: TObject); -var - CRC32: DWord; - TotalBytes: Int64; - Error: Word; - Text: String; - Version: String; - ProductName: String; -begin - CalcFileCRC32(Application.ExeName, CRC32, TotalBytes, Error); - lblCRC.Caption := 'CRC: ' + IntToHex(CRC32,8); - Text := Application.ExeName; - while pos('\',Text) > 0 do - begin - Text := copy(Text,pos('\',Text)+1,Length(Text)); - end; // while - Text := copy(Text,1,Length(Text)-4); - Caption := 'About ' + Text; - getfileinfo(Version, ProductName); - lblProductName.Caption := ProductName; - lblVersion.Caption := 'Version: ' + Version; - lblProductName.Width := Panel1.Width-10; - lblGovStatement.Width := Panel1.Width-10; - if ProgramIcon.Picture.Graphic = nil then - begin - VistALogo.Left := (Panel1.Width - VistALogo.Width) div 2; - end; -end; - -procedure TfrmVistAAbout.GetFileInfo(var Version: String; var ProductName: String); -var - VerInfoSize: DWORD; // holds the size of the version info resource - GetInfoSizeJunk: DWORD; // a junk variable, its value is ignored - VersionInfo: Pointer; // points to the version info resource - Translation: Pointer; // holds version info translation table - InfoPointer: Pointer; // a pointer to version information - - VersionInfoSize: UINT; // holds the size of version information - VersionValue: string; // holds the version info request string - SearchRec: TSearchRec; - DateTimeVal: TDateTime; - WriteTime: Integer; -begin - {retrieve the size of the version information resource, if one exists} - VerInfoSize := GetFileVersionInfoSize(PChar(Application.ExeName), - GetInfoSizeJunk); - - {if there was a version information resource available...} - - if VerInfoSize>0 then - begin - {retrieve enough memory to hold the version resource} - GetMem(VersionInfo, VerInfoSize); - - {retrieve the version resource for the selected file} - GetFileVersionInfo(PChar(Application.ExeName), 0, - VerInfoSize, VersionInfo); - - {retrieve a pointer to the translation table} - VerQueryValue(VersionInfo, '\\VarFileInfo\\Translation', - Translation, VersionInfoSize); - - {initialize the version value request string} - VersionValue :='\\StringFileInfo\\'+ - IntToHex(LoWord(LongInt(Translation^)),4)+ - IntToHex(HiWord(LongInt(Translation^)),4)+ - '\\'; - - {retrieve and display the file version} - VerQueryValue(VersionInfo, PChar(VersionValue+'FileVersion'), InfoPointer, - VersionInfoSize); - Version := string(PChar(InfoPointer)); - - {retrieve and display the product name} - VerQueryValue(VersionInfo, PChar(VersionValue+'ProductName'), InfoPointer, - VersionInfoSize); - ProductName := string(PChar(InfoPointer)); - - {free the version resource memory} - FreeMem(VersionInfo, VerInfoSize); - end - else - begin - Version := 'Not in File'; - ProductName := 'Not Identified In File'; - end; - if findfirst(Application.ExeName, faAnyFile, SearchRec) = 0 then - begin - WriteTime := SearchRec.Time; - DateTimeVal := FileDateToDateTime(WriteTime); - lblDate.Caption := FormatDateTime('mmmm dd, yyyy hh:nn',DateTimeVal); - end; -end; - -procedure ShowAboutBox; -begin - with TfrmVistAAbout.Create(Application) do - try - ShowModal; - finally - free; - end; -end; - -end. - - \ No newline at end of file diff --git a/BDK32/Samples/RPCBroker/SilentSignOn/ReadMeForSamples.txt b/BDK32/Samples/RPCBroker/SilentSignOn/ReadMeForSamples.txt deleted file mode 100644 index fb37eb5..0000000 --- a/BDK32/Samples/RPCBroker/SilentSignOn/ReadMeForSamples.txt +++ /dev/null @@ -1,9 +0,0 @@ -The SilentSignOn(p13) directory under Samples contains four (4) sample programs that illustrate different aspects of patch XWB*1.1*13. Source code is included for each of these programs. - -The program XWBAppHandle1 is used to illustrate the use of the StartProgSLogin method in the RpcSLogin unit. This method is used to launch a second program (XWBAppHandle2) with a silent login using an AppHandle obtained from the server. The AppHandle and information about the server, listener port, and Division are passed on the command line when XWBAppHandle2 is launched. The StartProgSLogin method can also can be used to launch a non-RPCBroker related program and this can be demonstrated by entering the name of a program, and command line arguments if any, in an edit box prior to clicking the Start App2 button. This will launch the specified program without including any broker related arguments on the command line. - -The program XWBAppHandle2 is used to illustrate the use of the GetCmdLine method in the RpcSLogin unit. This method identifies command line arguments related to the RPCBroker (identified by p=, s=, h=, and d= for listener port, server, AppHandle, and Division, respectively). If the arguments include an AppHandle, the connection to the server is attempted as well. This application will display information about the user logged into the server. If an attempt is made to start the application manually, a message box is displayed asking whether the user wants to login manually. If the response is 'OK' the normal RPCBroker login screen is shown. If the response is 'Cancel' the application terminates. - -The program XWBAVCodes is used to illustrate a silent login in which the Access and Verify codes are provided by the program, as opposed to being entered in the RPCBroker login screen. - -The program XWBOnFail is used to illustrate the different types of error handling which are available in patch XWB*1.1*13. These include permitting the application to handle errors via a specified procedure call, to showing normal errors, to simply providing the error message for the application to examine while otherwise ignoring errors completely. \ No newline at end of file diff --git a/BDK32/Samples/RPCBroker/SilentSignOn/XWBAVCodes.dof b/BDK32/Samples/RPCBroker/SilentSignOn/XWBAVCodes.dof deleted file mode 100644 index 5db4153..0000000 --- a/BDK32/Samples/RPCBroker/SilentSignOn/XWBAVCodes.dof +++ /dev/null @@ -1,82 +0,0 @@ -[Compiler] -A=1 -B=0 -C=1 -D=1 -E=0 -F=0 -G=1 -H=1 -I=1 -J=1 -K=0 -L=1 -M=0 -N=1 -O=1 -P=1 -Q=0 -R=0 -S=0 -T=0 -U=0 -V=1 -W=0 -X=1 -Y=1 -Z=1 -ShowHints=1 -ShowWarnings=1 -UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; -[Linker] -MapFile=0 -OutputObjs=0 -ConsoleApp=1 -DebugInfo=0 -RemoteSymbols=0 -MinStackSize=16384 -MaxStackSize=1048576 -ImageBase=4194304 -ExeDescription= -[Directories] -OutputDir= -UnitOutputDir= -PackageDLLOutputDir= -PackageDCPOutputDir= -SearchPath= -Packages=Vcl50;Vclx50;Vcldb50;Vclbde50;VclSmp50;vclado50;ibevnt50;vcldbx50;Qrpt50;TeeUI50;TeeDB50;Tee50;Dss50;TeeQR50;VCLIB50;Vclmid50;vclie50;Inetdb50;Inet50;NMFast50;webmid50;dclocx50;dclaxserver50;JLITestFDE;Rz252N50;Rz252D50;CS20Comps50;CSP20I50;gmunitsd5;gmctrlsd5;gmchrtedd5;gmdaouid5;GMDaod5;gmdbgend5;gmdbctrld5;gmadouid5;GMAdod5;democomponentsd5;Speech;Indy50;vclPerfUtils5;SharedRPCBroker_R50;XWB_R50;TMSColList;osg5220;osdg5220;CPRSctrls_50;KeaBroker_R50;ZipMasterD5;ICSDEL50;TCynthesisAppUpdateD5;Fmdc_R50;CodeRush50;CR_FormPopupFix50;CR_Standard50;Aruser;XUtilsR50;XUDT_R50;XU_R50 -Conditionals= -DebugSourceDirs= -UsePackages=0 -[Parameters] -RunParams= -HostApplication= -[Language] -ActiveLang= -ProjectLang=$00000409 -RootDir= -[Version Info] -IncludeVerInfo=1 -AutoIncBuild=1 -MajorVer=1 -MinorVer=1 -Release=31 -Build=8 -Debug=0 -PreRelease=0 -Special=0 -Private=0 -DLL=0 -Locale=1033 -CodePage=1252 -[Version Info Keys] -CompanyName=Dept of Veteran Affairs, VHA, OI, SD&D, IIS -FileDescription=Sample Silent Login with lmAVCodes -FileVersion=1.1.31.8 -InternalName=a -LegalCopyright=(c) 2002 -LegalTrademarks= -OriginalFilename= -ProductName=XWBAVCodes -ProductVersion=1.1.31.0 -Comments= diff --git a/BDK32/Samples/RPCBroker/SilentSignOn/XWBAVCodes.dpr b/BDK32/Samples/RPCBroker/SilentSignOn/XWBAVCodes.dpr deleted file mode 100644 index 810ab33..0000000 --- a/BDK32/Samples/RPCBroker/SilentSignOn/XWBAVCodes.dpr +++ /dev/null @@ -1,15 +0,0 @@ -program XWBAVCodes; - -uses - Forms, - fXWBAVCodes in 'fXWBAVCodes.pas' {Form1}, - frmVistAAbout in 'frmVistAAbout.pas' {frmVistAAbout}; - -{$R *.RES} - -begin - Application.Initialize; - Application.Title := 'Test4Silent'; - Application.CreateForm(TForm1, Form1); - Application.Run; -end. diff --git a/BDK32/Samples/RPCBroker/SilentSignOn/XWBAVCodes.exe b/BDK32/Samples/RPCBroker/SilentSignOn/XWBAVCodes.exe deleted file mode 100644 index f50510a..0000000 Binary files a/BDK32/Samples/RPCBroker/SilentSignOn/XWBAVCodes.exe and /dev/null differ diff --git a/BDK32/Samples/RPCBroker/SilentSignOn/XWBAVCodes.res b/BDK32/Samples/RPCBroker/SilentSignOn/XWBAVCodes.res deleted file mode 100644 index 22b0c63..0000000 Binary files a/BDK32/Samples/RPCBroker/SilentSignOn/XWBAVCodes.res and /dev/null differ diff --git a/BDK32/Samples/RPCBroker/SilentSignOn/XWBAppHandle1.dof b/BDK32/Samples/RPCBroker/SilentSignOn/XWBAppHandle1.dof deleted file mode 100644 index c86a176..0000000 --- a/BDK32/Samples/RPCBroker/SilentSignOn/XWBAppHandle1.dof +++ /dev/null @@ -1,82 +0,0 @@ -[Compiler] -A=1 -B=0 -C=1 -D=1 -E=0 -F=0 -G=1 -H=1 -I=1 -J=1 -K=0 -L=1 -M=0 -N=1 -O=1 -P=1 -Q=0 -R=0 -S=0 -T=0 -U=0 -V=1 -W=0 -X=1 -Y=1 -Z=1 -ShowHints=1 -ShowWarnings=1 -UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; -[Linker] -MapFile=0 -OutputObjs=0 -ConsoleApp=1 -DebugInfo=0 -RemoteSymbols=0 -MinStackSize=16384 -MaxStackSize=1048576 -ImageBase=4194304 -ExeDescription= -[Directories] -OutputDir= -UnitOutputDir= -PackageDLLOutputDir= -PackageDCPOutputDir= -SearchPath= -Packages= -Conditionals= -DebugSourceDirs= -UsePackages=0 -[Parameters] -RunParams= -HostApplication= -[Language] -ActiveLang= -ProjectLang=$00000409 -RootDir= -[Version Info] -IncludeVerInfo=1 -AutoIncBuild=1 -MajorVer=1 -MinorVer=1 -Release=31 -Build=8 -Debug=0 -PreRelease=0 -Special=0 -Private=0 -DLL=0 -Locale=1033 -CodePage=1252 -[Version Info Keys] -CompanyName=Dept. of Veteran Affairs, VHA, OI, SD&D, IIS -FileDescription=Example program launching another program using the lmAppHandle silent login -FileVersion=1.1.31.8 -InternalName= -LegalCopyright=(c) 2002 -LegalTrademarks= -OriginalFilename= -ProductName=XWBAppHandle1 -ProductVersion=1.1.31.0 -Comments= diff --git a/BDK32/Samples/RPCBroker/SilentSignOn/XWBAppHandle1.dpr b/BDK32/Samples/RPCBroker/SilentSignOn/XWBAppHandle1.dpr deleted file mode 100644 index 3dcac92..0000000 --- a/BDK32/Samples/RPCBroker/SilentSignOn/XWBAppHandle1.dpr +++ /dev/null @@ -1,13 +0,0 @@ -program XWBAppHandle1; - -uses - Forms, - fXWBAppHandle1 in 'fXWBAppHandle1.pas' {Form1}; - -{$R *.RES} - -begin - Application.Initialize; - Application.CreateForm(TForm1, Form1); - Application.Run; -end. diff --git a/BDK32/Samples/RPCBroker/SilentSignOn/XWBAppHandle1.exe b/BDK32/Samples/RPCBroker/SilentSignOn/XWBAppHandle1.exe deleted file mode 100644 index 4107767..0000000 Binary files a/BDK32/Samples/RPCBroker/SilentSignOn/XWBAppHandle1.exe and /dev/null differ diff --git a/BDK32/Samples/RPCBroker/SilentSignOn/XWBAppHandle1.res b/BDK32/Samples/RPCBroker/SilentSignOn/XWBAppHandle1.res deleted file mode 100644 index 0cec2ff..0000000 Binary files a/BDK32/Samples/RPCBroker/SilentSignOn/XWBAppHandle1.res and /dev/null differ diff --git a/BDK32/Samples/RPCBroker/SilentSignOn/XWBAppHandle2.dof b/BDK32/Samples/RPCBroker/SilentSignOn/XWBAppHandle2.dof deleted file mode 100644 index b44810c..0000000 --- a/BDK32/Samples/RPCBroker/SilentSignOn/XWBAppHandle2.dof +++ /dev/null @@ -1,82 +0,0 @@ -[Compiler] -A=1 -B=0 -C=1 -D=1 -E=0 -F=0 -G=1 -H=1 -I=1 -J=1 -K=0 -L=1 -M=0 -N=1 -O=1 -P=1 -Q=0 -R=0 -S=0 -T=0 -U=0 -V=1 -W=0 -X=1 -Y=1 -Z=1 -ShowHints=1 -ShowWarnings=1 -UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; -[Linker] -MapFile=0 -OutputObjs=0 -ConsoleApp=1 -DebugInfo=0 -RemoteSymbols=0 -MinStackSize=16384 -MaxStackSize=1048576 -ImageBase=4194304 -ExeDescription= -[Directories] -OutputDir= -UnitOutputDir= -PackageDLLOutputDir= -PackageDCPOutputDir= -SearchPath= -Packages= -Conditionals= -DebugSourceDirs= -UsePackages=0 -[Parameters] -RunParams= -HostApplication= -[Language] -ActiveLang= -ProjectLang=$00000409 -RootDir= -[Version Info] -IncludeVerInfo=1 -AutoIncBuild=1 -MajorVer=1 -MinorVer=1 -Release=31 -Build=9 -Debug=0 -PreRelease=0 -Special=0 -Private=0 -DLL=0 -Locale=1033 -CodePage=1252 -[Version Info Keys] -CompanyName=Dept. of Veteran Affairs, VHA, OI, SD&D, IIS -FileDescription=Example program of starting an application using an AppHandle token -FileVersion=1.1.31.9 -InternalName= -LegalCopyright=(c) 2002 -LegalTrademarks= -OriginalFilename= -ProductName=XWBAppHandle2 -ProductVersion=1.1.31.0 -Comments= diff --git a/BDK32/Samples/RPCBroker/SilentSignOn/XWBAppHandle2.dpr b/BDK32/Samples/RPCBroker/SilentSignOn/XWBAppHandle2.dpr deleted file mode 100644 index 7b19c97..0000000 --- a/BDK32/Samples/RPCBroker/SilentSignOn/XWBAppHandle2.dpr +++ /dev/null @@ -1,13 +0,0 @@ -program XWBAppHandle2; - -uses - Forms, - fXWBAppHandle2 in 'fXWBAppHandle2.pas' {Form1}; - -{$R *.RES} - -begin - Application.Initialize; - Application.CreateForm(TForm1, Form1); - Application.Run; -end. diff --git a/BDK32/Samples/RPCBroker/SilentSignOn/XWBAppHandle2.exe b/BDK32/Samples/RPCBroker/SilentSignOn/XWBAppHandle2.exe deleted file mode 100644 index 86e423c..0000000 Binary files a/BDK32/Samples/RPCBroker/SilentSignOn/XWBAppHandle2.exe and /dev/null differ diff --git a/BDK32/Samples/RPCBroker/SilentSignOn/XWBAppHandle2.res b/BDK32/Samples/RPCBroker/SilentSignOn/XWBAppHandle2.res deleted file mode 100644 index 7e73f1d..0000000 Binary files a/BDK32/Samples/RPCBroker/SilentSignOn/XWBAppHandle2.res and /dev/null differ diff --git a/BDK32/Samples/RPCBroker/SilentSignOn/XWBOnFail.dof b/BDK32/Samples/RPCBroker/SilentSignOn/XWBOnFail.dof deleted file mode 100644 index b2942f1..0000000 --- a/BDK32/Samples/RPCBroker/SilentSignOn/XWBOnFail.dof +++ /dev/null @@ -1,82 +0,0 @@ -[Compiler] -A=1 -B=0 -C=1 -D=1 -E=0 -F=0 -G=1 -H=1 -I=1 -J=1 -K=0 -L=1 -M=0 -N=1 -O=1 -P=1 -Q=0 -R=0 -S=0 -T=0 -U=0 -V=1 -W=0 -X=1 -Y=1 -Z=1 -ShowHints=1 -ShowWarnings=1 -UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; -[Linker] -MapFile=0 -OutputObjs=0 -ConsoleApp=1 -DebugInfo=0 -RemoteSymbols=0 -MinStackSize=16384 -MaxStackSize=1048576 -ImageBase=4194304 -ExeDescription= -[Directories] -OutputDir= -UnitOutputDir= -PackageDLLOutputDir= -PackageDCPOutputDir= -SearchPath= -Packages= -Conditionals= -DebugSourceDirs= -UsePackages=0 -[Parameters] -RunParams= -HostApplication= -[Language] -ActiveLang= -ProjectLang=$00000409 -RootDir= -[Version Info] -IncludeVerInfo=1 -AutoIncBuild=1 -MajorVer=1 -MinorVer=1 -Release=31 -Build=7 -Debug=0 -PreRelease=0 -Special=0 -Private=0 -DLL=0 -Locale=1033 -CodePage=1252 -[Version Info Keys] -CompanyName=Dept of Veteran Affairs, VHA, OI, SD&D, IIS -FileDescription=Example of available error handling mechanisms for RPCBroker -FileVersion=1.1.31.7 -InternalName= -LegalCopyright=(c) 2002 -LegalTrademarks= -OriginalFilename= -ProductName=XWBOnFail -ProductVersion=1.1.31.0 -Comments= diff --git a/BDK32/Samples/RPCBroker/SilentSignOn/XWBOnFail.dpr b/BDK32/Samples/RPCBroker/SilentSignOn/XWBOnFail.dpr deleted file mode 100644 index c354556..0000000 --- a/BDK32/Samples/RPCBroker/SilentSignOn/XWBOnFail.dpr +++ /dev/null @@ -1,13 +0,0 @@ -program XWBOnFail; - -uses - Forms, - fXWBOnFail in 'fXWBOnFail.pas' {frmXWBOnFail}; - -{$R *.RES} - -begin - Application.Initialize; - Application.CreateForm(TfrmXWBOnFail, frmXWBOnFail); - Application.Run; -end. diff --git a/BDK32/Samples/RPCBroker/SilentSignOn/XWBOnFail.exe b/BDK32/Samples/RPCBroker/SilentSignOn/XWBOnFail.exe deleted file mode 100644 index 748443f..0000000 Binary files a/BDK32/Samples/RPCBroker/SilentSignOn/XWBOnFail.exe and /dev/null differ diff --git a/BDK32/Samples/RPCBroker/SilentSignOn/XWBOnFail.res b/BDK32/Samples/RPCBroker/SilentSignOn/XWBOnFail.res deleted file mode 100644 index 3874dd2..0000000 Binary files a/BDK32/Samples/RPCBroker/SilentSignOn/XWBOnFail.res and /dev/null differ diff --git a/BDK32/Samples/RPCBroker/SilentSignOn/fXWBAVCodes.dfm b/BDK32/Samples/RPCBroker/SilentSignOn/fXWBAVCodes.dfm deleted file mode 100644 index fc31237..0000000 --- a/BDK32/Samples/RPCBroker/SilentSignOn/fXWBAVCodes.dfm +++ /dev/null @@ -1,231 +0,0 @@ -object Form1: TForm1 - Left = 190 - Top = 138 - Width = 662 - Height = 393 - Caption = - 'XWBAVCodes - UCX RPCBroker BackwardsCompatible - Silent Login wi' + - 'th lmAVCodes (P40)' - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'MS Sans Serif' - Font.Style = [] - Menu = MainMenu1 - OldCreateOrder = True - PixelsPerInch = 96 - TextHeight = 13 - object lblAccessCode: TLabel - Left = 24 - Top = 71 - Width = 79 - Height = 13 - Caption = 'Access Code:' - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'MS Sans Serif' - Font.Style = [fsBold] - ParentFont = False - end - object lblVerifyCode: TLabel - Left = 24 - Top = 96 - Width = 70 - Height = 13 - Caption = 'Verify Code:' - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'MS Sans Serif' - Font.Style = [fsBold] - ParentFont = False - end - object lblDUZ: TLabel - Left = 48 - Top = 176 - Width = 26 - Height = 13 - Caption = 'DUZ:' - end - object lblName: TLabel - Left = 48 - Top = 216 - Width = 31 - Height = 13 - Caption = 'Name:' - end - object lblDTime: TLabel - Left = 48 - Top = 256 - Width = 34 - Height = 13 - Caption = 'DTime:' - end - object lblUserName: TLabel - Left = 48 - Top = 288 - Width = 56 - Height = 13 - Caption = 'User Name:' - end - object lblServer: TLabel - Left = 24 - Top = 21 - Width = 42 - Height = 13 - Caption = 'Server:' - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'MS Sans Serif' - Font.Style = [fsBold] - ParentFont = False - end - object lblListenerPort: TLabel - Left = 24 - Top = 46 - Width = 73 - Height = 13 - Caption = 'ListenerPort:' - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'MS Sans Serif' - Font.Style = [fsBold] - ParentFont = False - end - object edtDUZ: TEdit - Left = 112 - Top = 168 - Width = 233 - Height = 21 - TabOrder = 3 - end - object edtName: TEdit - Left = 112 - Top = 208 - Width = 233 - Height = 21 - TabOrder = 2 - end - object edtDTime: TEdit - Left = 112 - Top = 248 - Width = 233 - Height = 21 - TabOrder = 1 - end - object edtUserName: TEdit - Left = 112 - Top = 280 - Width = 233 - Height = 21 - TabOrder = 0 - end - object btnConnect: TButton - Left = 175 - Top = 128 - Width = 75 - Height = 25 - Caption = 'Connect' - Default = True - TabOrder = 8 - OnClick = btnConnectClick - end - object edtAccessCode: TEdit - Left = 112 - Top = 66 - Width = 249 - Height = 21 - PasswordChar = '*' - TabOrder = 6 - end - object edtVerifyCode: TEdit - Left = 112 - Top = 91 - Width = 249 - Height = 21 - PasswordChar = '*' - TabOrder = 7 - end - object btnExit: TButton - Left = 174 - Top = 312 - Width = 75 - Height = 25 - Caption = 'Exit' - TabOrder = 9 - OnClick = btnExitClick - end - object edtServer: TEdit - Left = 112 - Top = 16 - Width = 249 - Height = 21 - TabOrder = 4 - end - object edtListenerPort: TEdit - Left = 112 - Top = 41 - Width = 105 - Height = 21 - TabOrder = 5 - end - object Memo1: TMemo - Left = 384 - Top = 16 - Width = 241 - Height = 233 - Lines.Strings = ( - 'This application provides an ' - 'example of a silent login. The ' - 'server, Listener Port, Access ' - 'Code, and Verify Code need to ' - 'be filled in - these data would ' - 'be supplied in some manner for ' - 'a silent login (Division can also ' - 'be supplied for a multidivision ' - 'individual). After fillng in the ' - 'information enter Return or ' - 'click on the Connect button. ' - 'The connection should be ' - 'made without the broker login ' - 'form appearing. User ' - 'information will be filled in for ' - 'the logged in user.') - TabOrder = 10 - end - object brkrRPCB: TRPCBroker - ClearParameters = True - ClearResults = True - Connected = False - ListenerPort = 9200 - RpcVersion = '0' - Server = 'DHCPSERVER' - KernelLogIn = True - LogIn.Mode = lmAVCodes - LogIn.PromptDivision = False - Left = 16 - Top = 312 - end - object MainMenu1: TMainMenu - Left = 24 - Top = 144 - object mnuFile: TMenuItem - Caption = '&File' - object mnuFileExit: TMenuItem - Caption = 'E&xit' - OnClick = mnuFileExitClick - end - end - object mnuHelp: TMenuItem - Caption = '&Help' - object mnuHelpAbout: TMenuItem - Caption = '&About' - OnClick = mnuHelpAboutClick - end - end - end -end diff --git a/BDK32/Samples/RPCBroker/SilentSignOn/fXWBAVCodes.pas b/BDK32/Samples/RPCBroker/SilentSignOn/fXWBAVCodes.pas deleted file mode 100644 index aa4da22..0000000 --- a/BDK32/Samples/RPCBroker/SilentSignOn/fXWBAVCodes.pas +++ /dev/null @@ -1,129 +0,0 @@ -unit fXWBAVCodes; - -interface - -uses - Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, - StdCtrls, Trpcb, RpcSLogin, Menus, frmVistAAbout; - -type - TForm1 = class(TForm) - edtDUZ: TEdit; - edtName: TEdit; - edtDTime: TEdit; - edtUserName: TEdit; - btnConnect: TButton; - edtAccessCode: TEdit; - edtVerifyCode: TEdit; - lblAccessCode: TLabel; - lblVerifyCode: TLabel; - btnExit: TButton; - lblDUZ: TLabel; - lblName: TLabel; - lblDTime: TLabel; - lblUserName: TLabel; - edtServer: TEdit; - edtListenerPort: TEdit; - lblServer: TLabel; - lblListenerPort: TLabel; - Memo1: TMemo; - MainMenu1: TMainMenu; - mnuFile: TMenuItem; - mnuFileExit: TMenuItem; - mnuHelp: TMenuItem; - mnuHelpAbout: TMenuItem; - brkrRPCB: TRPCBroker; - procedure btnConnectClick(Sender: TObject); - procedure btnExitClick(Sender: TObject); - procedure mnuFileExitClick(Sender: TObject); - procedure mnuHelpAboutClick(Sender: TObject); - private - { Private declarations } - public - { Public declarations } - end; - -var - Form1: TForm1; - Login: TVistaLogin; - -implementation - -{$R *.DFM} - -procedure TForm1.btnConnectClick(Sender: TObject); -var - NChars: Cardinal; - NameBuffer: PChar; -begin - if btnConnect.Caption = 'Connect' then - begin - { check data there for silent login } - if (edtAccessCode.Text = '') or - (edtVerifyCode.Text = '') or - (edtServer.Text = '') or - (edtListenerPort.Text = '') then - ShowMessage('The four Bold edit boxes must be filled in before the connection can be made.') - else - begin - { set up for silent login } - with BrkrRPCB do - begin - Login.AccessCode := edtAccessCode.Text; - Login.VerifyCode := edtVerifyCode.Text; - Server := edtServer.Text; - ListenerPort := StrToInt(edtListenerPort.Text); - KernelLogin := False; - Login.Mode := lmAVCodes; - Login.PromptDivision := True; - Connected := True; - - if Connected = True then - begin - GetUserInfo(brkrRPCB); - edtDUZ.Text := User.DUZ; - edtName.Text := User.Name; - edtDTime.Text := User.DTime; - - { Get local username as well } - NChars := 0; - GetUserName(nil,NChars); - NameBuffer := StrAlloc(NChars); - if GetUserName(NameBuffer, NChars) then - edtUserName.Text := StrPas(NameBuffer) - else - edtUserName.Text := 'Can''t get name'; - btnConnect.Caption := 'Disconnect'; - btnExit.Default := True; - btnConnect.Default := False; - end; // if Connected = True - end; // with brkrRPCB do - end; // else - end // if btnConnect.Caption - else - begin - brkrRPCB.Connected := False; - btnConnect.Caption := 'Connect'; - end; - edtAccessCode.Text := ''; - edtVerifyCode.Text := ''; - Application.ProcessMessages; -end; - -procedure TForm1.btnExitClick(Sender: TObject); -begin - halt; -end; - -procedure TForm1.mnuFileExitClick(Sender: TObject); -begin - halt; -end; - -procedure TForm1.mnuHelpAboutClick(Sender: TObject); -begin - ShowAboutBox; -end; - -end. - \ No newline at end of file diff --git a/BDK32/Samples/RPCBroker/SilentSignOn/fXWBAppHandle1.dfm b/BDK32/Samples/RPCBroker/SilentSignOn/fXWBAppHandle1.dfm deleted file mode 100644 index f24a964..0000000 --- a/BDK32/Samples/RPCBroker/SilentSignOn/fXWBAppHandle1.dfm +++ /dev/null @@ -1,169 +0,0 @@ -object Form1: TForm1 - Left = 230 - Top = 122 - Width = 736 - Height = 319 - Caption = - 'XWBAppHandle1 - UCX RPCBroker (see Options) use of lmAppHandle t' + - 'o start a second application (p40)' - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'MS Sans Serif' - Font.Style = [] - Menu = mnuMainMenu - OldCreateOrder = True - PixelsPerInch = 96 - TextHeight = 13 - object lblOtherProgram: TLabel - Left = 44 - Top = 176 - Width = 71 - Height = 13 - Caption = 'Other Program:' - end - object lblOptional: TLabel - Left = 52 - Top = 192 - Width = 45 - Height = 13 - Caption = '(Optional)' - end - object lblWithFull: TLabel - Left = 124 - Top = 200 - Width = 232 - Height = 13 - Caption = 'With Full Directory Path if not on the System Path' - end - object btnConnect: TButton - Left = 201 - Top = 232 - Width = 75 - Height = 25 - Caption = '&Connect' - TabOrder = 0 - OnClick = btnConnectClick - end - object btnStartApp2: TButton - Left = 326 - Top = 232 - Width = 75 - Height = 25 - Caption = 'Start App2' - TabOrder = 1 - OnClick = btnStartApp2Click - end - object edtOtherProgram: TEdit - Left = 124 - Top = 168 - Width = 269 - Height = 21 - TabOrder = 2 - end - object Memo1: TMemo - Left = 31 - Top = 8 - Width = 666 - Height = 153 - Lines.Strings = ( - - 'This application can be used to start other programs, including ' + - 'ones that use the ' - - 'RPCBroker for connection to a server using a server generated to' + - 'ken.' - '' - - 'To connect with the server, simply press the connect button to s' + - 'elect a server/listener port ' - - 'combination, then sign in. After you are signed in, you can sta' + - 'rt another Broker application ' - - '(XWBAppHandle2) by simply clicking on the "Start App2" button (w' + - 'ith the Other Program ' - 'edit box empty of text).' - '' - - 'A program such as Notepad with or without command line arguments' + - ', can be started at ' - - 'any time by entering the name (and arguments if any) in the Othe' + - 'r Program edit box, then ' - 'clicking on the Start App2 button.' - '') - TabOrder = 3 - end - object btnExit: TButton - Left = 451 - Top = 232 - Width = 75 - Height = 25 - Caption = 'Exit' - TabOrder = 4 - OnClick = btnExitClick - end - object brkrRPCB: TRPCBroker - ClearParameters = True - ClearResults = True - Connected = False - ListenerPort = 9500 - RpcVersion = '0' - Server = 'NXT-Server' - KernelLogIn = True - LogIn.Mode = lmAVCodes - LogIn.PromptDivision = False - OldConnectionOnly = False - Left = 16 - Top = 224 - end - object mnuMainMenu: TMainMenu - Left = 8 - Top = 184 - object mnuFile: TMenuItem - Caption = '&File' - object mnuFileExit: TMenuItem - Caption = '&E&xit' - OnClick = mnuFileExitClick - end - end - object mnuOptions: TMenuItem - Caption = 'Options' - object OnlyOldConnection1: TMenuItem - Caption = 'OnlyOldConnection' - end - object BackwardsCompatible1: TMenuItem - Action = actBackwardsCompatible - end - object DebugMode1: TMenuItem - Action = actDebugMode - end - end - object Help1: TMenuItem - Caption = '&Help' - object mnuAbout: TMenuItem - Caption = '&About' - OnClick = mnuAboutClick - end - end - end - object ActionList1: TActionList - Left = 64 - Top = 224 - object actOldConnectionOnly: TAction - Caption = 'Old Connection Mode Only' - OnExecute = actOldConnectionOnlyExecute - end - object actBackwardsCompatible: TAction - Caption = 'Backwards Compatible' - Checked = True - OnExecute = actBackwardsCompatibleExecute - end - object actDebugMode: TAction - Caption = 'Debug Mode' - OnExecute = actDebugModeExecute - end - end -end diff --git a/BDK32/Samples/RPCBroker/SilentSignOn/fXWBAppHandle1.pas b/BDK32/Samples/RPCBroker/SilentSignOn/fXWBAppHandle1.pas deleted file mode 100644 index 2d21c31..0000000 --- a/BDK32/Samples/RPCBroker/SilentSignOn/fXWBAppHandle1.pas +++ /dev/null @@ -1,155 +0,0 @@ -unit fXWBAppHandle1; - -interface - -uses - Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, - StdCtrls, RpcSlogin, Trpcb, RpcConf1, frmVistAAbout, Menus, ActnList; - -type - TForm1 = class(TForm) - brkrRPCB: TRPCBroker; - btnConnect: TButton; - btnStartApp2: TButton; - edtOtherProgram: TEdit; - lblOtherProgram: TLabel; - lblOptional: TLabel; - lblWithFull: TLabel; - Memo1: TMemo; - btnExit: TButton; - mnuMainMenu: TMainMenu; - mnuFile: TMenuItem; - mnuFileExit: TMenuItem; - Help1: TMenuItem; - mnuAbout: TMenuItem; - mnuOptions: TMenuItem; - OnlyOldConnection1: TMenuItem; - ActionList1: TActionList; - actOldConnectionOnly: TAction; - actBackwardsCompatible: TAction; - actDebugMode: TAction; - BackwardsCompatible1: TMenuItem; - DebugMode1: TMenuItem; - procedure btnConnectClick(Sender: TObject); - procedure btnStartApp2Click(Sender: TObject); - procedure btnExitClick(Sender: TObject); - procedure mnuFileExitClick(Sender: TObject); - procedure mnuAboutClick(Sender: TObject); - procedure actOldConnectionOnlyExecute(Sender: TObject); - procedure actBackwardsCompatibleExecute(Sender: TObject); - procedure actDebugModeExecute(Sender: TObject); - private - { Private declarations } - public - { Public declarations } - end; - -var - Form1: TForm1; - -implementation - -{$R *.DFM} - - -procedure TForm1.btnConnectClick(Sender: TObject); -var - Server, Port: String; -begin - if btnConnect.Caption = '&Connect' then - begin - GetServerInfo(Server, Port); - brkrRPCB.Server := Server; - brkrRPCB.ListenerPort := StrToInt(Port); - brkrRPCB.Connected := True; - if brkrRPCB.Connected then - begin - btnConnect.Caption := '&Disconnect'; - mnuOptions.Enabled := False; - end; - end - else - begin - brkrRPCB.Connected := False; - btnConnect.Caption := '&Connect'; - mnuOptions.Enabled := True; - end; -end; - -procedure TForm1.btnStartApp2Click(Sender: TObject); -var - CurDir: String; -begin - if edtOtherProgram.Text <> '' then - begin - CurDir := edtOtherProgram.Text; - StartProgSLogin(CurDir,nil); - end - else - begin - { Use Test2.exe and expecting it to be in the startup directory for the current application} - CurDir := ExtractFilePath(ParamStr(0)) + 'XWBAppHandle2.exe'; - - { Now start application with silent login } - StartProgSLogin(CurDir, brkrRPCB); - end; -end; - -procedure TForm1.btnExitClick(Sender: TObject); -begin - halt; -end; - -procedure TForm1.mnuFileExitClick(Sender: TObject); -begin - Halt; -end; - -procedure TForm1.mnuAboutClick(Sender: TObject); -begin - ShowAboutBox; -end; - -procedure TForm1.actOldConnectionOnlyExecute(Sender: TObject); -begin - if actOldConnectionOnly.Checked then - begin - actOldConnectionOnly.Checked := False; - brkrRPCB.OldConnectionOnly := False; - end - else - begin - actOldConnectionOnly.Checked := True; - brkrRPCB.OldConnectionOnly := True; - end; -end; - -procedure TForm1.actBackwardsCompatibleExecute(Sender: TObject); -begin - if actBackwardsCompatible.Checked then - begin - actBackwardsCompatible.Checked := False; - brkrRPCB.IsBackwardCompatibleConnection := False; - end - else - begin - brkrRPCB.IsBackwardCompatibleConnection := True; - actBackwardsCompatible.Checked := True; - end; -end; - -procedure TForm1.actDebugModeExecute(Sender: TObject); -begin - if actDebugMode.Checked then - begin - actDebugMode.Checked := False; - brkrRPCB.DebugMode := False; - end - else - begin - brkrRPCB.DebugMode := True; - actDebugMode.Checked := True; - end; -end; - -end. diff --git a/BDK32/Samples/RPCBroker/SilentSignOn/fXWBAppHandle2.dfm b/BDK32/Samples/RPCBroker/SilentSignOn/fXWBAppHandle2.dfm deleted file mode 100644 index eeea868..0000000 --- a/BDK32/Samples/RPCBroker/SilentSignOn/fXWBAppHandle2.dfm +++ /dev/null @@ -1,164 +0,0 @@ -object Form1: TForm1 - Left = 201 - Top = 168 - Width = 635 - Height = 334 - Caption = - 'XWBAppHandle2 - UCX RPCBroker BackwardsCompatible - Started by l' + - 'mAppHandle (P40)' - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'MS Sans Serif' - Font.Style = [] - Menu = MainMenu1 - OldCreateOrder = True - OnCreate = FormCreate - PixelsPerInch = 96 - TextHeight = 13 - object lblDUZ: TLabel - Left = 54 - Top = 17 - Width = 23 - Height = 13 - Caption = 'DUZ' - end - object lblName: TLabel - Left = 54 - Top = 51 - Width = 28 - Height = 13 - Caption = 'Name' - end - object lblDTime: TLabel - Left = 54 - Top = 84 - Width = 31 - Height = 13 - Caption = 'DTime' - end - object lblDivision: TLabel - Left = 54 - Top = 118 - Width = 37 - Height = 13 - Caption = 'Division' - end - object lblUserName: TLabel - Left = 54 - Top = 152 - Width = 50 - Height = 13 - Caption = 'UserName' - end - object Label1: TLabel - Left = 56 - Top = 184 - Width = 59 - Height = 13 - Caption = 'IsProduction' - end - object Label2: TLabel - Left = 56 - Top = 216 - Width = 64 - Height = 13 - Caption = 'DomainName' - end - object edtDuz: TEdit - Left = 126 - Top = 8 - Width = 280 - Height = 21 - TabStop = False - TabOrder = 0 - end - object edtName: TEdit - Left = 126 - Top = 42 - Width = 280 - Height = 21 - TabStop = False - TabOrder = 2 - end - object edtDTime: TEdit - Left = 126 - Top = 76 - Width = 280 - Height = 21 - TabStop = False - TabOrder = 3 - end - object edtUserName: TEdit - Left = 126 - Top = 143 - Width = 280 - Height = 21 - TabStop = False - TabOrder = 4 - end - object btnClose: TButton - Left = 188 - Top = 248 - Width = 75 - Height = 25 - Caption = 'Close' - Default = True - TabOrder = 1 - OnClick = btnCloseClick - end - object edtDivision: TEdit - Left = 126 - Top = 109 - Width = 280 - Height = 21 - TabStop = False - TabOrder = 5 - end - object edtIsProduction: TEdit - Left = 126 - Top = 176 - Width = 281 - Height = 21 - TabOrder = 6 - end - object edtDomainName: TEdit - Left = 126 - Top = 208 - Width = 281 - Height = 21 - TabOrder = 7 - end - object brkrRPCB: TRPCBroker - ClearParameters = True - ClearResults = True - Connected = False - ListenerPort = 9200 - RpcVersion = '0' - Server = 'DHCPSERVER' - KernelLogIn = True - LogIn.Mode = lmAVCodes - LogIn.PromptDivision = False - Left = 8 - Top = 160 - end - object MainMenu1: TMainMenu - Left = 8 - Top = 40 - object File1: TMenuItem - Caption = '&File' - object Exit1: TMenuItem - Caption = 'E&xit' - OnClick = Exit1Click - end - end - object About1: TMenuItem - Caption = '&Help' - object About2: TMenuItem - Caption = '&About' - OnClick = About2Click - end - end - end -end diff --git a/BDK32/Samples/RPCBroker/SilentSignOn/fXWBAppHandle2.pas b/BDK32/Samples/RPCBroker/SilentSignOn/fXWBAppHandle2.pas deleted file mode 100644 index b230030..0000000 --- a/BDK32/Samples/RPCBroker/SilentSignOn/fXWBAppHandle2.pas +++ /dev/null @@ -1,110 +0,0 @@ -unit fXWBAppHandle2; - -interface - -uses - Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, - StdCtrls, Trpcb, RpcSLogin, RpcConf1, frmVistAAbout, Menus; - -type - TForm1 = class(TForm) - brkrRPCB: TRPCBroker; - edtDuz: TEdit; - edtName: TEdit; - edtDTime: TEdit; - edtUserName: TEdit; - btnClose: TButton; - edtDivision: TEdit; - lblDUZ: TLabel; - lblName: TLabel; - lblDTime: TLabel; - lblDivision: TLabel; - lblUserName: TLabel; - MainMenu1: TMainMenu; - File1: TMenuItem; - Exit1: TMenuItem; - About1: TMenuItem; - About2: TMenuItem; - Label1: TLabel; - edtIsProduction: TEdit; - Label2: TLabel; - edtDomainName: TEdit; - procedure FormCreate(Sender: TObject); - procedure btnCloseClick(Sender: TObject); - procedure Exit1Click(Sender: TObject); - procedure About2Click(Sender: TObject); - private - { Private declarations } - public - { Public declarations } - end; - -var - Form1: TForm1; - Login: TVistaLogin; - -implementation - -{$R *.DFM} - - - -procedure TForm1.FormCreate(Sender: TObject); -var - NChars: Cardinal; - NameBuffer: PChar; - Server, Port: String; -begin - { check for silent login data on command line } - if not CheckCmdLine(brkrRPCB) then - begin // Couldn't log on via command line give choice - if Application.MessageBox('Can''t connect by command line arguments, do you want to connect anyway?','Silent Connection Error', MB_OKCANCEL + MB_DEFBUTTON1) = IDOK then - begin - GetServerInfo(Server, Port); - brkrRPCB.Server := Server; - brkrRPCB.ListenerPort := StrToInt(Port); - Caption := 'XWBAppHandle2 - Started by normal sign-on' - end - else - halt; - end; - - { Get and display information on logged in user } - GetUserInfo(brkrRPCB); - edtDUZ.Text := brkrRPCB.User.DUZ; - edtName.Text := brkrRPCB.User.Name; - edtDTime.Text := brkrRPCB.User.DTime; - edtDivision.Text := brkrRPCB.User.Division; - if brkrRPCB.Login.IsProductionAccount then - edtIsProduction.Text := 'True' - else - edtIsProduction.Text := 'False'; - edtDomainName.Text := brkrRPCB.LogIn.DomainName; - - {also show local username } - NChars := 0; - GetUserName(nil,NChars); - NameBuffer := StrAlloc(NChars); - if GetUserName(NameBuffer, NChars) then - edtUserName.Text := NameBuffer - else - edtUserName.Text := 'Can''t get name'; -end; - - -procedure TForm1.btnCloseClick(Sender: TObject); -begin - halt; -end; - -procedure TForm1.Exit1Click(Sender: TObject); -begin - Halt; -end; - -procedure TForm1.About2Click(Sender: TObject); -begin - ShowAboutBox; -end; - -end. diff --git a/BDK32/Samples/RPCBroker/SilentSignOn/fXWBOnFail.dfm b/BDK32/Samples/RPCBroker/SilentSignOn/fXWBOnFail.dfm deleted file mode 100644 index 7946714..0000000 --- a/BDK32/Samples/RPCBroker/SilentSignOn/fXWBOnFail.dfm +++ /dev/null @@ -1,180 +0,0 @@ -object frmXWBOnFail: TfrmXWBOnFail - Left = 207 - Top = 127 - Width = 557 - Height = 343 - Caption = - 'XWBOnFail - UCX RPCBroker Backwards Compatible - Error Handling ' + - 'Demo (P40)' - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'MS Sans Serif' - Font.Style = [] - Menu = MainMenu1 - OldCreateOrder = False - OnCreate = FormCreate - PixelsPerInch = 96 - TextHeight = 13 - object lblLogin_ErrorText: TLabel - Left = 24 - Top = 40 - Width = 75 - Height = 13 - Caption = 'Login_ErrorText' - end - object btnConnect: TButton - Left = 213 - Top = 256 - Width = 75 - Height = 25 - Caption = 'Connect' - TabOrder = 0 - OnClick = btnConnectClick - end - object rgrSelectAction: TRadioGroup - Left = 268 - Top = 64 - Width = 217 - Height = 137 - Caption = 'Select Action' - ItemIndex = 1 - Items.Strings = ( - 'Use OnRPCBFailure property routine' - 'Show Message Boxes' - 'Capture Text Only') - TabOrder = 1 - end - object btnExit: TButton - Left = 410 - Top = 256 - Width = 75 - Height = 25 - Caption = 'Exit' - TabOrder = 2 - OnClick = btnExitClick - end - object Memo1: TMemo - Left = 16 - Top = 64 - Width = 217 - Height = 169 - Lines.Strings = ( - 'This is an example application to illustrate ' - 'the effects of TRPCBroker properties ' - 'related to Error Handling.' - '' - 'The OnRPCBFailure property can be set ' - 'to a procedure to handle errors without ' - 'user interaction. In the sample included ' - 'here, the error handler will save the error ' - 'message and a date/time stamp to a file ' - 'named "Error.Log" in the same directory ' - 'with the application program. YOU WILL ' - 'NOT SEE AN ERROR MESSAGE IN ' - 'THIS CASE!' - '' - 'If OnRPCBFailure property is not ' - 'assigned to a procedure, errors by default ' - 'would be shown in a message box ' - 'created by the TRPCBroker component. ' - 'This behavior is controlled by the ' - 'ShowErrorMsgs property, with a default ' - 'of semShow (Show Message Boxes). ' - '' - 'If the ShowErrorMsgs property is set to ' - 'semRaise (Don'#39't Show Message Boxes), ' - 'the error will be permitted to be handled ' - 'by a higher part of the application. In ' - 'most cases this will produce an error ' - 'dialog box generated by the system in ' - 'general.' - '' - 'If the ShowErrorMsgs property is set to ' - 'semSet (Capture Text Only), there will be ' - 'no error action taken except for the ' - 'setting of error messages into the ' - 'RPCBError and/or Login.ErrorText ' - 'properties. In this case, the application ' - 'MUST check these properties ' - 'immediately after a call to the RPCBroker ' - 'to determine whether any errors were ' - 'encountered and to determine the action ' - 'to be taken.' - '' - 'Select the type of behavior desired by ' - 'clicking on one of the options to the right.' - '' - 'Then press Connect and either cancel ' - 'during the log-in dialog or generate an ' - 'error in some other manner. If you are ' - 'connected, the button will change to ' - 'Disconnect and you can click on it to ' - 'disconnect from the server.' - '' - 'Checking the check box "Use Silent Bad ' - 'Access/Verify" to the left will set the ' - 'AccessVerifyCodes property to ' - #39'monkeysee;monkeydo'#39' which will cause ' - 'a silent login attempt and fails.' - '') - ScrollBars = ssVertical - TabOrder = 3 - end - object edtErrorText: TEdit - Left = 8 - Top = 8 - Width = 473 - Height = 21 - TabOrder = 4 - Text = 'RPCBroker_RPCBError property' - end - object edtLoginError: TEdit - Left = 104 - Top = 32 - Width = 225 - Height = 21 - TabOrder = 5 - Text = 'RPCBroker_Login_ErrorText Property' - end - object cbxBadAccess: TCheckBox - Left = 16 - Top = 256 - Width = 169 - Height = 17 - Caption = 'Use Silent Bad Access/Verify' - TabOrder = 6 - end - object RPCB: TRPCBroker - ClearParameters = True - ClearResults = True - Connected = False - ListenerPort = 9500 - RpcVersion = '0' - Server = 'NXT-Server' - KernelLogIn = True - LogIn.Mode = lmAVCodes - LogIn.PromptDivision = False - Left = 408 - Top = 32 - end - object MainMenu1: TMainMenu - Left = 368 - Top = 32 - object File1: TMenuItem - Caption = '&File' - object Exit1: TMenuItem - Caption = 'E&xit' - OnClick = Exit1Click - end - end - object Help1: TMenuItem - Caption = '&Help' - object About1: TMenuItem - Caption = '&About' - OnClick = About1Click - end - end - end -end diff --git a/BDK32/Samples/RPCBroker/SilentSignOn/fXWBOnFail.pas b/BDK32/Samples/RPCBroker/SilentSignOn/fXWBOnFail.pas deleted file mode 100644 index c48346a..0000000 --- a/BDK32/Samples/RPCBroker/SilentSignOn/fXWBOnFail.pas +++ /dev/null @@ -1,120 +0,0 @@ -unit fXWBOnFail; - -interface - -uses - Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, - StdCtrls, Trpcb, Rpcconf1, ExtCtrls, frmVistAAbout, Menus; - -type - TfrmXWBOnFail = class(TForm) - btnConnect: TButton; - RPCB: TRPCBroker; - rgrSelectAction: TRadioGroup; - btnExit: TButton; - Memo1: TMemo; - edtErrorText: TEdit; - edtLoginError: TEdit; - lblLogin_ErrorText: TLabel; - cbxBadAccess: TCheckBox; - MainMenu1: TMainMenu; - File1: TMenuItem; - Exit1: TMenuItem; - Help1: TMenuItem; - About1: TMenuItem; - procedure btnConnectClick(Sender: TObject); - procedure btnExitClick(Sender: TObject); - procedure FormCreate(Sender: TObject); - procedure Exit1Click(Sender: TObject); - procedure About1Click(Sender: TObject); - private - { Private declarations } - public - { Public declarations } - procedure MyErrorHandler(RPCBroker: TRPCBroker); - end; - -var - frmXWBOnFail: TfrmXWBOnFail; - -implementation - -{$R *.DFM} - -procedure TfrmXWBOnFail.MyErrorHandler(RPCBroker: TRPCBroker); -var - ErrorText: String; - Path: String; - StrLoc: TStringList; - NowVal: TDateTime; -begin - NowVal := Now; - ErrorText := RPCB.RPCBError; - StrLoc := TStringList.Create; - Path := ExtractFilePath(Application.ExeName); - Path := Path + 'Error.Log'; - if FileExists(Path) then - StrLoc.LoadFromFile(Path); - StrLoc.Add(FormatDateTime('mm/dd/yyyy hh:mm:ss ',NowVal) + ErrorText); - StrLoc.SaveToFile(Path); -end; - -procedure TfrmXWBOnFail.btnConnectClick(Sender: TObject); -begin - if btnConnect.Caption = 'Connect' then - begin - edtErrorText.Text := ''; // Clear out old values - edtLoginError.Text := ''; - RPCB.AccessVerifyCodes := ''; - RPCB.KernelLogIn := True; - if cbxBadAccess.Checked then - RPCB.AccessVerifyCodes := 'monkeysee;monkeydo'; - RPCB.OnRPCBFailure := nil; - RPCB.ShowErrorMsgs := semRaise; - case rgrSelectAction.ItemIndex of // - 0: RPCB.OnRPCBFailure := MyErrorHandler; - 1: RPCB.ShowErrorMsgs := semRaise; - 2: RPCB.ShowErrorMsgs := semQuiet; - end; // case - try - RPCB.Connected := True; - if RPCB.Connected then - btnConnect.Caption := 'Disconnect'; - finally - edtErrorText.Text := RPCB.RPCBError; - edtLoginError.Text := RPCB.LogIn.ErrorText; - end; - end - else - begin - RPCB.Connected := False; - btnConnect.Caption := 'Connect'; - end; -end; - -procedure TfrmXWBOnFail.btnExitClick(Sender: TObject); -begin - halt; -end; - -procedure TfrmXWBOnFail.FormCreate(Sender: TObject); -var - Server: String; - Port: String; -begin - GetServerInfo(Server, Port); - RPCB.Server := Server; - RPCB.ListenerPort := StrToInt(Port); -end; - -procedure TfrmXWBOnFail.Exit1Click(Sender: TObject); -begin - Halt; -end; - -procedure TfrmXWBOnFail.About1Click(Sender: TObject); -begin - ShowAboutBox; -end; - -end. diff --git a/BDK32/Samples/RPCBroker/SilentSignOn/frmVistAAbout.dfm b/BDK32/Samples/RPCBroker/SilentSignOn/frmVistAAbout.dfm deleted file mode 100644 index 9966ef6..0000000 --- a/BDK32/Samples/RPCBroker/SilentSignOn/frmVistAAbout.dfm +++ /dev/null @@ -1,1201 +0,0 @@ -object frmVistAAbout: TfrmVistAAbout - Left = 279 - Top = 106 - BorderStyle = bsDialog - Caption = 'About' - ClientHeight = 236 - ClientWidth = 353 - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'MS Sans Serif' - Font.Style = [] - OldCreateOrder = True - Position = poScreenCenter - OnCreate = FormCreate - PixelsPerInch = 96 - TextHeight = 13 - object Panel1: TPanel - Left = 8 - Top = 8 - Width = 337 - Height = 185 - BevelInner = bvRaised - BevelOuter = bvLowered - ParentColor = True - TabOrder = 0 - object VistaLogo: TImage - Left = 8 - Top = 8 - Width = 153 - Height = 73 - Center = True - Picture.Data = { - 07544269746D61702A880000424D2A8800000000000036000000280000009600 - 00004D0000000100180000000000F48700000000000000000000000000000000 - 0000C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C00000C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C00000C0C0C0C0C0C0DDDDDDFFFFFFDDDDDDCCCCCCB2B2B2CC - CCCCF1F1F1DDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1DDDDDDCCCCCCCCCCCCC0C0C0C0C0C0DDDDDDF1F1F1F1F1F1DDDDDDCCCC - CCFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1FF - FFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFDDDDDD - DDDDDDDDDDDDF1F1F1FFFFFFFFFFFFFFFFFFDDDDDDF1F1F1F1F1F1F1F1F1FFFF - FFFFFFFFFFFFFFDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1CCCCCCF1F1F1F1F1F1F1F1F1 - F1F1F1C0C0C0FFFFFFC0C0C0DDDDDDDDDDDDF1F1F1F1F1F1FFFFFFFFFFFFFFFF - FFDDDDDDDDDDDDCCCCCCF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1 - F1F1F1F1F1F1F1F1F1F1F1DDDDDDCCCCCCC0C0C0F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDDDDDF1F1F1DDDDDDF1F1 - F1FFFFFFF1F1F1DDDDDD999999CCCCCCF1F1F1CCCCCCCCCCCCF1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1DDDDDDCCCCCCF1F1F1F1F1F1DDDDDDCCCCCCB2B2B2 - CCCCCCC0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0F1F1F1FFFFFFF1F1F1DDDDDD - FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1CCCCCCB2B2B2CCCCCCF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1 - F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1DDDDDDDDDDDDDDDDDDDDDDDDF1F1F1F1F1F1F1F1F1DDDDDDCCCCCCF1F1F1F1 - F1F1FFFFFFFFFFFFDDDDDDC0C0C0F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1FFFFFFF1F1 - F1F1F1F1DDDDDDCCCCCCF1F1F1DDDDDDFFFFFFF1F1F1F1F1F1FFFFFFFFFFFFFF - FFFFFFFFFFF1F1F1DDDDDDCCCCCCF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1DDDDDDC0C0C0DDDDDDF1F1F1F1F1F1FFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1FF - FFFFFFFFFFF1F1F1DDDDDDC0C0C0CCCCCCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDDDDDDDCCCCCCFFFFFFDDDDDDB2B2B2C0C0 - C0FFFFFFFFFFFFC0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0FFFFFFFFFFFFF1F1 - F1F1F1F1CCCCCCFFFFFFCCCCCCF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1CCCCCCFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1FFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFF1F1F1DDDDDDF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1 - F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1DDDDDDDDDDDDDDDDDDDDDDDDCCCCCCC0C0C0CCCCCCC0C0C0DDDDDD - F1F1F1FFFFFFFFFFFFFFFFFFB2B2B2C0C0C0F1F1F1F1F1F1F1F1F1F1F1F1FFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1FFFFFFFFFFFFF1 - F1F1F1F1F1F1F1F1DDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFF - FFFFFFFFFFFFF1F1F1DDDDDDC0C0C0DDDDDDF1F1F1F1F1F1F1F1F1FFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1CCCCCCCCCCCCF1F1F1F1F1F1FF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFF1F1F1F1F1F1DDDDDDC0C0C0FFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFC0C0C0F1 - F1F1F1F1F1FFFFFFFFFFFFC0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0FFFFFFFF - FFFFF1F1F1F1F1F1DDDDDDFFFFFFC0C0C0FFFFFFF1F1F1CCCCCCF1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDDDDDDDDDDDDDC0C0C0CCCCCCCCCCCCCCCC - CCF1F1F1F1F1F1FFFFFFFFFFFFF1F1F1CCCCCCDDDDDDF1F1F1F1F1F1F1F1F1F1 - F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFF1F1F1CCCCCCCCCCCCDDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1 - F1FFFFFFFFFFFFFFFFFFF1F1F1C0C0C0CCCCCCF1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1C0C0C0DDDDDDF1F1F1 - F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDDDDDDDC0C0C0FFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDD - C0C0C0F1F1F1FFFFFFFFFFFFFFFFFFC0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0 - F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1CCCCCCC0C0C0DDDDDDCCCCCCDDDDDDDDDD - DDCCCCCCF1F1F1F1F1F1DDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1DDDDDDF1 - F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1C0C0C0F1F1F1FFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1CCCCCCCCCCCCFFFFFFFF - FFFFF1F1F1F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1DDDDDDDDDDDDF1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1FFFFFFFFFF - FFF1F1F1F1F1F1F1F1F1DDDDDDFFFFFFFFFFFFFFFFFFDDDDDDF1F1F1F1F1F1F1 - F1F1F1F1F1FFFFFFFFFFFFFFFFFFC0C0C0DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1DDDDDDC0C0C0F1F1 - F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1FFFFFFFFFFFFFF - FFFFDDDDDDCCCCCCC0C0C0C0C0C0CCCCCCC0C0C0CCCCCCB2B2B2F1F1F1FFFFFF - FFFFFFFFFFFFFFFFFFF1F1F1DDDDDDC0C0C0CCCCCCCCCCCCCCCCCCDDDDDDC0C0 - C0CCCCCCDDDDDDFFFFFFFFFFFFFFFFFFFFFFFFC0C0C0C0C0C0C0C0C00000C0C0 - C0C0C0C0F1F1F1FFFFFFF1F1F1F1F1F1DDDDDDC0C0C0F1F1F1FFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDDDDDDDF1F1F1DDDDDDDDDDDDDDDDDD - CCCCCCF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDC0C0C0FFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFF1 - F1F1F1F1F1F1F1F1F1F1F1DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1C0C0C0C0C0C0 - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1DDDDDDDDDD - DDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FF - FFFFFFFFFFF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFDDDDDDF1F1F1F1F1F1 - FFFFFFF1F1F1F1F1F1F1F1F1FFFFFFF1F1F1DDDDDDF1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1DDDDDDCCCCCCC0C0C0F1 - F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFF - FFFFFFFFFFFFC0C0C0CCCCCCDDDDDDF1F1F1F1F1F1DDDDDDDDDDDDDDDDDDFFFF - FFFFFFFFFFFFFFFFFFFFDDDDDDDDDDDDCCCCCCF1F1F1F1F1F1F1F1F1FFFFFFFF - FFFFF1F1F1FFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFC0C0C0C0C0C0C0C0C0 - 0000C0C0C0C0C0C0F1F1F1DDDDDDF1F1F1F1F1F1C0C0C0CCCCCCFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDDDDDDDDDDDDDDDDDDDDDDDDDDD - DDDDDDDD0000FFF1F1F1FFFFFFF1F1F1F1F1F1FFFFFFF1F1F1DDDDDDDDDDDDFF - FFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFF1F1F1F1F1F1DDDDDDF1F1F1F1F1F1F1F1F1CCCCCCCCCCCCC0C0C0C0C0 - C0DDDDDDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1DD - DDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1DDDDDDF1F1F1F1F1F1DDDDDDF1F1 - F1F1F1F1DDDDDDF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1FF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1DDDDDDCCCCCCC0C0C0 - F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1FFFFFFDDDDDDDDDDDDC0C0C0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1C0C0C0C0C0C0C0C0C0FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1 - F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0C0C0C0C0 - C0C0C0C00000C0C0C0C0C0C0F1F1F1F1F1F1F1F1F1F1F1F1CCCCCCDDDDDDFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDDDDDDDDDDDDDDDDDDD - DDDDDDDDDDDDDDDD0000FFF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1DDDDDD - DDDDDDCCCCCCF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFF1F1F1CCCCCCCCCCCCF1F1F1F1F1F1F1F1F1CCCCCCCCCCCCCC - CCCCDDDDDDF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDD - F1F1F1DDDDDDDDDDDDF1F1F1DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1DDDDDDF1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1CCCCCCF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDC0C0 - C0DDDDDDFFFFFFFFFFFFF1F1F1F1F1F1DDDDDDFFFFFFF1F1F1F1F1F1F1F1F1F1 - F1F1FFFFFFFFFFFFF1F1F1DDDDDDC0C0C0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - FFFFFFF1F1F1FFFFFFFFFFFFF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1FFFF - FFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1C0 - C0C0C0C0C0C0C0C00000C0C0C0C0C0C0F1F1F1DDDDDDDDDDDDDDDDDDDDDDDDF1 - F1F1FFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDDDDDDDDDDD - C0C0C0C0C0C0C0C0C0B2B2B20000FF0000FFFFFFFFFFFFFFFFFFFFFFFFFFF1F1 - F1DDDDDDDDDDDDF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFDDDDDDDDDDDDCCCCCCDDDDDDFFFFFFFFFFFFFFFFFFF1F1F1 - F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDDDDDDDDD - DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDCCCCCCF1F1F1F1F1F1F1F1F1FFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDDDDDDDDDDDDDF1F1F1 - F1F1F1F1F1F1F1F1F1DDDDDDC0C0C0F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFF - FFF1F1F1FFFFFFFFFFFFF1F1F1DDDDDDF1F1F1F1F1F1F1F1F1DDDDDDDDDDDDC0 - C0C0C0C0C0FFFFFFFFFFFFFFFFFFFFFFFFC0C0C0DDDDDDF1F1F1F1F1F1F1F1F1 - FFFFFFF1F1F1FFFFFFFFFFFFF1F1F1F1F1F1DDDDDDF1F1F1F1F1F1F1F1F1FFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFF1F1F1F1F1F1DD - DDDDCCCCCCDDDDDDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1 - F1F1F1C0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0CCCCCCCCCCCCDDDDDDDDDDDD - FFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCCCC - CCC0C0C0DDDDDDF1F1F1F1F1F10000FF0000FF0000FF0000FFFFFFFFF1F1F1F1 - F1F1F1F1F1DDDDDDDDDDDDCCCCCCC0C0C0DDDDDDFFFFFFFFFFFFF1F1F1F1F1F1 - F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1DDDDDDDDDDDDF1F1F1F1F1F1F1F1 - F1C0C0C0F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFC0C0C0C0C0C0CC - CCCCF1F1F1DDDDDDDDDDDDCCCCCCCCCCCCCCCCCCB2B2B2F1F1F1F1F1F1F1F1F1 - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1CCCCCCCCCCCCF1F1F1F1F1F1FFFFFFFFFFFFF1 - F1F1F1F1F1F1F1F1F1F1F1FFFFFFF1F1F1DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1 - CCCCCCC0C0C0DDDDDDFFFFFFFFFFFFFFFFFFF1F1F1CCCCCCF1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFF - FFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1 - DDDDDDDDDDDDCCCCCCDDDDDDF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1 - F1F1F1F1F1F1F1C0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0F1F1F1F1F1F1FFFF - FFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFC0C0C0C0C0C0F1F1F1F1F1F1FFFFFF0000FF0000FF0000FF0000FF0000FF - F1F1F1F1F1F1F1F1F1DDDDDDDDDDDDB2B2B2FFFFFFFFFFFFFFFFFFF1F1F1DDDD - DDF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1FFFFFFF1F1F1DDDDDDF1 - F1F1F1F1F1C0C0C0F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1FFFFFFCCCCCC - DDDDDDF1F1F1FFFFFFDDDDDDCCCCCCB2B2B2DDDDDDB2B2B2C0C0C0F1F1F1F1F1 - F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1 - F1F1F1F1F1DDDDDDF1F1F1F1F1F1F1F1F1CCCCCCDDDDDDF1F1F1FFFFFFFFFFFF - FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFDDDDDDDDDDDDF1F1F1DDDDDDF1F1 - F1F1F1F1B2B2B2DDDDDDF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1FFFFFFF1F1F1F1F1F1DDDDDDF1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1 - F1F1F1F1F1F1F1F1F1F1F1C0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0FFFFFFFF - FFFFFFFFFFFFFFFFF1F1F1F1F1F1DDDDDDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - F1F1F1DDDDDDDDDDDDF1F1F1F1F1F1F1F1F1FFFFFF0000FF0000FF0000FF0000 - FF0000FF0000FFF1F1F1F1F1F1F1F1F1DDDDDDCCCCCCFFFFFFFFFFFFF1F1F1DD - DDDDC0C0C0F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFF1F1F1 - DDDDDDDDDDDDCCCCCCC0C0C0F1F1F1F1F1F1DDDDDDC0C0C0F1F1F1F1F1F1F1F1 - F1FFFFFFF1F1F1F1F1F1F1F1F1CCCCCCC0C0C0DDDDDDF1F1F1FFFFFFF1F1F1F1 - F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1 - F1F1F1F1F1F1C0C0C0C0C0C0CCCCCCF1F1F1F1F1F1CCCCCCDDDDDDFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1FFFFFFFFFFFFF1F1F1DDDDDDF1F1F1F1 - F1F1CCCCCCB2B2B2DDDDDDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1 - FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1CCCC - CCCCCCCCDDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDDD - DDDDDDDDDDCCCCCCC0C0C0F1F1F1F1F1F1F1F1F1CCCCCCDDDDDDFFFFFFFFFFFF - FFFFFFF1F1F1F1F1F1DDDDDDDDDDDDC0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0 - FFFFFFFFFFFFFFFFFFDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDF1F1F1F1F1F1F1F1 - F1DDDDDDDDDDDDDDDDDDDDDDDDF1F1F1F1F1F1F1F1F1FFFFFF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FFF1F1F1F1F1F1F1F1F1CCCCCCFFFFFFFFFFFF - FFFFFFDDDDDDC0C0C0F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1 - F1F1F1F1DDDDDDF1F1F1CCCCCCF1F1F1F1F1F1FFFFFFF1F1F1C0C0C0F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDDDDDDDF1F1F1FFFFFFF1F1F1FFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1 - F1FFFFFFFFFFFFC0C0C0DDDDDDF1F1F1F1F1F1FFFFFFF1F1F1DDDDDDF1F1F1F1 - F1F1F1F1F1FFFFFFFFFFFFF1F1F1FFFFFFF1F1F1F1F1F1FFFFFFFFFFFFDDDDDD - CCCCCCC0C0C0C0C0C0DDDDDDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1 - F1CCCCCCDDDDDDF1F1F1F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1FFFFFFFFFFFFFF - FFFFFFFFFFF1F1F1F1F1F1FFFFFFF1F1F1F1F1F1DDDDDDDDDDDDDDDDDDDDDDDD - F1F1F1B2B2B2C0C0C0CCCCCCDDDDDDFFFFFFF1F1F1F1F1F1CCCCCCCCCCCCFFFF - FFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1C0C0C0C0C0C0C0C0C00000C0C0 - C0C0C0C0FFFFFFFFFFFFFFFFFFDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDF1F1F1F1 - F1F1F1F1F1DDDDDDDDDDDDF1F1F1DDDDDDF1F1F1F1F1F1FFFFFFFFFFFF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FFF1F1F1F1F1F1F1F1F1CCCCCCFFFF - FFFFFFFFFFFFFFDDDDDDCCCCCCF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1 - F1F1F1F1F1F1F1F1DDDDDDDDDDDDC0C0C0F1F1F1F1F1F1F1F1F1DDDDDDCCCCCC - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFF1F1F1FFFFFFFFFFFFF1 - F1F1F1F1F1FFFFFFFFFFFFCCCCCCF1F1F1F1F1F1FFFFFFFFFFFFF1F1F1DDDDDD - FFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFDDDDDDC0C0C0C0C0C0DDDDDDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFDDDDDDC0C0C0F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDDDDDF1F1F1DDDDDDDDDDDDDDDD - DDDDDDDDCCCCCCC0C0C0DDDDDDFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDB2B2B2C0 - C0C0F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1C0C0C0C0C0C0C0C0C0 - 0000C0C0C0C0C0C0FFFFFFFFFFFFDDDDDDDDDDDDF1F1F1F1F1F1DDDDDDF1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1CCCCCCFFFFFFFFFFFFFFFFFFDDDD - DD0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFF1F1F1F1F1F1F1 - F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1CCCCCCF1F1F1FFFFFFFFFFFFF1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDDDDDDDF1F1F1F1F1F1FFFFFFFFFF - FFF1F1F1F1F1F1FFFFFFF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFF1F1F1FFFFFFFFFFFFFFFFFFC0C0C0F1F1F1FFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFF1F1F1F1F1F1F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFF1F1F1CCCCCCCCCCCCF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFCCCCCCF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFF1F1F1F1F1F1F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1FFFFFFDDDDDDCC - CCCCCCCCCCDDDDDDB2B2B2FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDCCCCCC - DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1C0C0C0C0C0 - C0C0C0C00000C0C0C0C0C0C0FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1C0C0C0C0C0C0DDDDDDFFFFFFF1F1F1DD - DDDDDDDDDD0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFF1F1F1 - F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1C0C0C0DDDDDDF1F1F1F1F1F1FFFF - FFDDDDDDDDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FF - FFFFF1F1F1CCCCCCF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFF1F1F1FFFFFFFFFFFFFFFFFF999999C0C0C0FFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFDDDDDDDDDDDDF1F1F1F1F1F1DDDDDDCCCCCCFFFFFFFFFFFFFF - FFFFFFFFFFF1F1F1F1F1F1DDDDDDDDDDDDDDDDDDCCCCCCDDDDDDFFFFFFFFFFFF - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDF1F1F1FFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFF1F1F1F1F1F1C0C0C0DDDDDDF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFF - FFFFFFF1F1F1F1F1F1DDDDDDF1F1F1FFFFFFFFFFFFF1F1F1DDDDDDCCCCCCFFFF - FFF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDF1F1F1C0 - C0C0C0C0C0C0C0C00000C0C0C0C0C0C0FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1DDDDDDDDDDDDB2B2B2DDDDDDF1F1F1F1F1F1FFFFFF - FFFFFFDDDDDDDDDDDD0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FFDDDDDDC0C0C0C0C0C0CCCCCCDDDDDDC0C0C0F1F1F1F1F1F1FF - FFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDCCCCCC - F1F1F1FFFFFFC0C0C0C0C0C0F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFCCCCCCCCCCCCFFFFFFDDDDDDCCCCCCDDDDDDF1F1F1FFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1DDDDDDC0C0C0DDDDDDF1F1F1 - FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1CCCCCCC0C0C0C0C0C0CCCCCCFFFFFFF1F1 - F1F1F1F1F1F1F1DDDDDDDDDDDDF1F1F1F1F1F1DDDDDDF1F1F1FFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1DDDDDDB2B2B2F1F1F1 - FFFFFFDDDDDDDDDDDDC0C0C0DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFF - FFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFDDDDDDDDDDDDCC - CCCCF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1DDDDDD - C0C0C0C0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0FFFFFFFFFFFFFFFFFFFFFFFF - F1F1F1F1F1F1F1F1F1DDDDDDDDDDDDDDDDDDDDDDDDCCCCCCFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFDDDDDDDDDDDD0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FFC0C0C0B2B2B2CCCCCCF1F1F1F1F1F1DDDDDDF1F1F1 - F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1FFFFFFF1F1F1F1F1F1DDDD - DDFFFFFFFFFFFFFFFFFFC0C0C0CCCCCCF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFF1F1F1DDDDDDC0C0C0CCCCCCFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1CCCCCCC0C0C0F1F1 - F1F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1CCCCCCB2B2B2C0C0C0CCCCCCF1F1F1FF - FFFFF1F1F1DDDDDDDDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDC0C0 - C0FFFFFFDDDDDDF1F1F1CCCCCCC0C0C0F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFF - FFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFDDDDDD - DDDDDDF1F1F1DDDDDDF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1C0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0FFFFFFFFFFFFFFFF - FFF1F1F1F1F1F1F1F1F1DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDCCCCCCF1F1F1F1 - F1F1F1F1F1F1F1F1FFFFFFDDDDDDDDDDDD0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FFF1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1FFFFFFDDDDDDCC - CCCCC0C0C0FFFFFFF1F1F1F1F1F1CCCCCCDDDDDDFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFDDDDDDDDDDDDCCCCCCF1F1F1FFFFFFFFFFFFFFFFFFF1F1F1FFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1DDDDDDC0C0C0F1 - F1F1F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1C0C0C0C0C0C0FFFFFFFFFFFFFFFFFF - FFFFFFF1F1F1CCCCCCB2B2B2CCCCCCC0C0C0CCCCCCF1F1F1F1F1F1F1F1F1DDDD - DDFFFFFFCCCCCCF1F1F1F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1C0 - C0C0DDDDDDFFFFFFFFFFFFF1F1F1DDDDDDF1F1F1F1F1F1F1F1F1FFFFFFFFFFFF - FFFFFFFFFFFFF1F1F1DDDDDDDDDDDDF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFDDDDDDDDDDDDCCCCCCF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1 - F1F1F1F1F1FFFFFFFFFFFFC0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0FFFFFFFF - FFFFF1F1F1F1F1F1CCCCCCC0C0C0C0C0C0CCCCCCDDDDDDF1F1F1F1F1F1CCCCCC - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1CCCCCCDDDDDD0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFFFFFFFFFF1F1F1F1 - F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDDDDDDDF1F1F1F1F1F1 - FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDB2B2B2C0C0C0FFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1C0C0C0F1F1F1FFFFFFFFFFFFF1F1F1F1 - F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1CCCCCC - DDDDDDF1F1F1FFFFFFFFFFFFF1F1F1F1F1F1CCCCCCDDDDDDFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1CCCCCCCCCCCCCC - CCCCDDDDDDFFFFFFC0C0C0F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1C0C0C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1FFFF - FFFFFFFFFFFFFFCCCCCCC0C0C0B2B2B2DDDDDDF1F1F1FFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFDDDDDDF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0 - FFFFFFFFFFFFF1F1F1F1F1F1B2B2B2C0C0C0CCCCCCCCCCCCDDDDDDC0C0C0C0C0 - C0C0C0C0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F10000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFFF - FFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1CCCCCCCCCCCCF1F1 - F1F1F1F1FFFFFFFFFFFFDDDDDDF1F1F1F1F1F1CCCCCCC0C0C0DDDDDDF1F1F1FF - FFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1CCCCCCFFFFFFFFFFFFFFFFFF - F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1DDDD - DDDDDDDDDDDDDDF1F1F1F1F1F1FFFFFFF1F1F1F1F1F1C0C0C0F1F1F1FFFFFFFF - FFFFFFFFFFF1F1F1FFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFF1F1F1F1F1F1CCCCCCF1F1F1FFFFFFFFFFFFF1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1C0C0C0FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1 - F1F1FFFFFFFFFFFFF1F1F1B2B2B2C0C0C0C0C0C0F1F1F1F1F1F1FFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDDDDDF1F1F1FFFFFFFFFFFFF1F1F1FFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0C0C0C0C0C0C0C0C00000C0C0 - C0C0C0C0F1F1F1FFFFFFF1F1F1CCCCCCDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F10000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1DDDDDDC0 - C0C0F1F1F1FFFFFFFFFFFFFFFFFFDDDDDDDDDDDDCCCCCCC0C0C0F1F1F1F1F1F1 - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1CCCCCCCCCCCCF1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1FFFFFF - FFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1 - F1F1F1F1F1F1F1F1F1F1F1DDDDDDFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDC0C0C0 - F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFF - FFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFDDDDDDDDDDDDCCCCCCC0C0C0F1F1F1FF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFC0C0C0C0C0C0C0C0C0 - 0000C0C0C0C0C0C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1 - F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F10000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1DDDDDDC0C0C0 - B2B2B2CCCCCCFFFFFFFFFFFFFFFFFFDDDDDDDDDDDD999999C0C0C0FFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCCCCCCC0C0C0CCCCCCF1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1DDDDDDF1F1F1CCCCCCDDDDDDDDDDDDF1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDDDDDDDC0C0C0DDDDDDFF - FFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFF - FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1DDDDDDDDDDDDFFFFFFFFFFFFDDDDDDCCCC - CCDDDDDDFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFF - FFFFFFFFFFFFFFFFDDDDDDF1F1F1F1F1F1DDDDDDC0C0C0CCCCCCCCCCCCDDDDDD - F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1C0C0C0C0C0 - C0C0C0C00000C0C0C0C0C0C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1 - F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1FFFFFFFFFFFFF1 - F1F10000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FFF1F1F1F1F1F1F1F1F1DDDDDDC0C0 - C0CCCCCCCCCCCCDDDDDDFFFFFFFFFFFFFFFFFFDDDDDDDDDDDDC0C0C0DDDDDDFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDDDDDDDDDDDF1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1CCCCCCFFFFFFFFFFFFF1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDDDDDDDCCCCCC - F1F1F1FFFFFFFFFFFFFFFFFFDDDDDDF1F1F1FFFFFFFFFFFFF1F1F1FFFFFFF1F1 - F1FFFFFFFFFFFFFFFFFFDDDDDDDDDDDDDDDDDDCCCCCCDDDDDDFFFFFFF1F1F1DD - DDDDCCCCCCF1F1F1DDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - FFFFFFFFFFFFFFFFFFFFFFFFDDDDDDF1F1F1DDDDDDCCCCCCB2B2B2F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDDDDDDDDDDDDDCCCCCCC0 - C0C0C0C0C0C0C0C00000C0C0C0C0C0C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFDDDDDDF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1FFFFFFFFFFFF - F1F1F1F1F1F10000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFF1F1F1DDDDDDDDDDDDC0 - C0C0DDDDDDF1F1F1F1F1F1FFFFFFFFFFFFDDDDDDDDDDDDDDDDDDC0C0C0DDDDDD - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFF1F1F1F1F1 - F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1 - F1F1F1F1F1CCCCCCCCCCCCDDDDDDDDDDDDC0C0C0B2B2B2CCCCCCF1F1F1FFFFFF - F1F1F1F1F1F1DDDDDDF1F1F1F1F1F1F1F1F1DDDDDDCCCCCCF1F1F1DDDDDDDDDD - DDDDDDDDFFFFFFFFFFFFF1F1F1C0C0C0F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1F1 - F1F1F1F1F1FFFFFFFFFFFFDDDDDDCCCCCCCCCCCCCCCCCCCCCCCCDDDDDDF1F1F1 - F1F1F1F1F1F1FFFFFFFFFFFFDDDDDDFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDDDDDDDDDDDDDDDDDB2B2B2CCCCCCFF - FFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDD - F1F1F1C0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0FFFFFFFFFFFFFFFFFFF1F1F1 - F1F1F1F1F1F1CCCCCCF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFF1F1F1CCCCCCC0C0C00000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFC0C0C0 - 999999DDDDDDF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFDDDDDDDDDDDDDDDDDDF1F1 - F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFF1F1F1FFFFFFFFFFFFFF - FFFFF1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1DDDDDDC0C0C0 - F1F1F1F1F1F1DDDDDDC0C0C0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFF - FFFFFFFFF1F1F1DDDDDDF1F1F1F1F1F1DDDDDDC0C0C0CCCCCCF1F1F1FFFFFFF1 - F1F1DDDDDDDDDDDDF1F1F1DDDDDDCCCCCCDDDDDDFFFFFFFFFFFFFFFFFFF1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1CCCCCCDDDDDDF1 - F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1CCCCCCDDDDDDFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1C0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0F1F1F1FFFFFFF1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFF1F1F1F1F1F1F1F1F1F1F1F10000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FFF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDDDDDDDDDDDDD - DDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1CCCC - CCFFFFFFF1F1F1DDDDDDC0C0C0B2B2B2DDDDDDF1F1F1F1F1F1FFFFFFFFFFFFFF - FFFFFFFFFFF1F1F1FFFFFFF1F1F1DDDDDDF1F1F1F1F1F1FFFFFFFFFFFFFFFFFF - FFFFFFF1F1F1DDDDDDF1F1F1F1F1F1CCCCCCCCCCCCF1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1 - F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1DDDDDDC0C0C0 - CCCCCCF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1FFFF - FFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFF1F1F1C0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0DDDDDDF1 - F1F1F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F10000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1FFFFFFF1F1F1 - CCCCCCCCCCCCF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDF1F1F1F1 - F1F1DDDDDDF1F1F1FFFFFFFFFFFFCCCCCCCCCCCCDDDDDDF1F1F1F1F1F1FFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1CCCCCCDDDDDDF1F1F1F1F1F1DDDDDDF1F1 - F1FFFFFFFFFFFFF1F1F1DDDDDDF1F1F1F1F1F1CCCCCCCCCCCCF1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDDDDDDDDDDDDDDD - DDC0C0C0CCCCCCF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1FFFFFFFF - FFFFFFFFFFDDDDDDCCCCCCCCCCCCF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1 - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0 - DDDDDDF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDDD - DDF1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F10000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFF - FFFFFFFFFFFFFFF1F1F1DDDDDDCCCCCCCCCCCCDDDDDDDDDDDDDDDDDDDDDDDDDD - DDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDDDDDDDDDDDDD - DDDDDDCCCCCCC0C0C0F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1 - F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1DD - DDDDF1F1F1FFFFFFF1F1F1DDDDDDDDDDDDDDDDDDDDDDDDC0C0C0CCCCCCF1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1 - F1F1F1F1F1F1F1F1F1F1DDDDDDF1F1F1FFFFFFFFFFFFFFFFFFDDDDDDDDDDDDDD - DDDDDDDDDDC0C0C0DDDDDDF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1DDDDDDF1F1F1FFFFFFFFFFFFFFFFFFFFFF - FFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1C0C0C0C0C0C0C0C0C00000C0C0 - C0C0C0C0C0C0C0F1F1F1FFFFFFFFFFFFF1F1F1FFFFFFFFFFFFF1F1F1F1F1F1F1 - F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F10000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1CCCCCCCCCCCCCCCCCC - CCCCCCCCCCCCDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1C0C0C0C0C0C0DDDD - DDCCCCCCF1F1F1DDDDDDF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1 - F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1FFFFFFF1F1F1DDDDDDDDDDDDCCCCCCC0C0C0C0C0C0DDDD - DDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1 - F1F1DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1DDDDDDF1F1F1FFFFFFFFFFFFDDDDDD - DDDDDDDDDDDDDDDDDDCCCCCCF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDC0C0C0C0C0C0C0C0C0 - 0000C0C0C0C0C0C0CCCCCCF1F1F1FFFFFFF1F1F1F1F1F1FFFFFFFFFFFFF1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1CCCCCCDDDDDDF1F1F10000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1C0C0C0DD - DDDDF1F1F1F1F1F1FFFFFFF1F1F1F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDDDDDDDDDDDDD999999B2B2B2DD - DDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFF - FFFFFFF1F1F1DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFF1F1 - F1DDDDDDDDDDDDDDDDDDDDDDDDCCCCCCF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1 - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1DDDDDDC0C0C0C0C0 - C0C0C0C00000C0C0C0C0C0C0FFFFFFF1F1F1FFFFFFF1F1F1F1F1F1FFFFFFF1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDF1F1F1F1F1F1C0C0C0DDDDDDFFFFFF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FFF1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFF1 - F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFCCCCCCF1F1F1F1F1F1F1F1F1F1F1F1 - CCCCCCF1F1F1F1F1F1F1F1F1FFFFFFF1F1F1DDDDDDF1F1F1DDDDDDF1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDCCCCCCDDDDDDCCCCCCC0C0C0DDDDDD - F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFF - FFFFFFFFF1F1F1DDDDDDDDDDDDDDDDDDDDDDDDCCCCCCFFFFFFF1F1F1F1F1F1DD - DDDDDDDDDDDDDDDDDDDDDDDDDDDDF1F1F1CCCCCCDDDDDDFFFFFFFFFFFFFFFFFF - F1F1F1F1F1F1CCCCCCF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1 - F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCCCCCCDDDDDDF1F1F1F1F1F1C0 - C0C0C0C0C0C0C0C00000C0C0C0C0C0C0FFFFFFF1F1F1DDDDDDF1F1F1F1F1F1F1 - F1F1DDDDDDCCCCCCCCCCCCF1F1F1F1F1F1F1F1F1F1F1F1C0C0C0DDDDDDF1F1F1 - FFFFFF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1DDDDDDFFFFFFF1F1F1F1F1 - F1F1F1F1CCCCCCDDDDDDFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1DDDDDDCCCCCCC0 - C0C0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1C0C0C0C0C0C0CCCCCCF1F1F1DDDDDDF1F1 - F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFCCCCCCCCCCCCCCCCCCFFFFFFF1F1F1DDDDDDDDDDDDF1F1F1F1F1F1 - F1F1F1DDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1CCCCCCCCCCCCFFFFFFFFFF - FFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1 - F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFF1F1F1 - F1F1F1C0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0FFFFFFDDDDDDF1F1F1FFFFFF - F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1CCCCCCC0C0C0F1F1 - F1F1F1F1FFFFFF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1 - F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1FFFFFFF1 - F1F1F1F1F1F1F1F1CCCCCCDDDDDDF1F1F1FFFFFFFFFFFFFFFFFFF1F1F1DDDDDD - C0C0C0C0C0C0F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1C0C0C0CCCCCCF1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFF1F1F1FFFFFFDDDDDDF1F1F1F1F1F1FFFFFFF1F1F1DDDDDDDDDDDDF1F1 - F1F1F1F1DDDDDDCCCCCCDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1CCCCCCCCCCCCF1 - F1F1F1F1F1FFFFFFDDDDDDDDDDDDDDDDDDF1F1F1DDDDDDDDDDDDDDDDDDDDDDDD - F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFDDDDDDF1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1C0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0FFFFFFF1F1F1F1F1 - F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDDDDDDDF1 - F1F1F1F1F1F1F1F1FFFFFF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFF1F1F1F1F1F1DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDCCCCCCFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFDDDDDDCCCCCCDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFF - FFFFF1F1F1F1F1F1F1F1F1F1F1F1DDDDDDDDDDDDDDDDDDCCCCCCC0C0C0F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFF - FFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFDDDDDDDD - DDDDDDDDDDDDDDDDDDDDDDFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1CCCCCC - DDDDDDF1F1F1F1F1F1F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1DDDDDDDDDDDDDDDD - DDDDDDDDDDDDDDDDDDDDCCCCCCDDDDDDC0C0C0CCCCCCB2B2B2F1F1F1F1F1F1FF - FFFFFFFFFFFFFFFFF1F1F1C0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0FFFFFFF1 - F1F1DDDDDDDDDDDDDDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1FFFFFF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDDDDDDDDDDDDDF1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1CCCCCCFFFFFFFFFFFFFF - FFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD - DDF1F1F1FFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFCCCCCCF1F1F1FF - FFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1DDDDDDDDDDDDF1F1F1FFFFFFDDDDDD - DDDDDDDDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1DDDDDDC0C0C0F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1CCCCCCC0C0C0DD - DDDDDDDDDDCCCCCCCCCCCC999999DDDDDDDDDDDDFFFFFFFFFFFFDDDDDDFFFFFF - FFFFFFFFFFFFFFFFFFF1F1F1DDDDDDC0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0 - F1F1F1FFFFFFDDDDDDDDDDDDF1F1F1CCCCCCF1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDDDDDF1F1F1DDDDDDDDDDDDF1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1DDDDDDF1F1F1F1F1F1DDDDDDCCCCCCCCCCCCFFFFFF - FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFF - FFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFDDDDDDDDDDDDDD - DDDDDDDDDDDDDDDDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDDDDD - F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1DDDDDDDDDDDDF1F1F1FFFF - FFF1F1F1DDDDDDDDDDDDDDDDDDDDDDDDF1F1F1DDDDDDF1F1F1F1F1F1F1F1F1DD - DDDDC0C0C0C0C0C0B2B2B2F1F1F1F1F1F1F1F1F1FFFFFFF1F1F1DDDDDDC0C0C0 - DDDDDDF1F1F1CCCCCCCCCCCCC0C0C0C0C0C0FFFFFFFFFFFFFFFFFFFFFFFFF1F1 - F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1C0C0C0C0C0C0C0C0C00000C0C0 - C0C0C0C0F1F1F1F1F1F1CCCCCCDDDDDDDDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F10000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FFFFFFFFFFFFFFFFFFFF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFCCCCCCCCCC - CCDDDDDDF1F1F1DDDDDDCCCCCCF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1C0C0C0C0C0C0C0C0C0 - 0000C0C0C0C0C0C0FFFFFFFFFFFFFFFFFFFFFFFFDDDDDDF1F1F1F1F1F1FFFFFF - FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F10000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FFF1F1F1F1F1F10000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1 - F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFF1F1F1DDDDDDC0C0C0C0C0C0CCCCCCDDDDDDCCCCCCC0C0C0C0C0 - C0C0C0C00000C0C0C0C0C0C0FFFFFFF1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1 - F1F1F1F1F1F1F1DDDDDDCCCCCCF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFF1F1F10000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFF - FFFFFFFFF1F1F1F1F1F1DDDDDDCCCCCCDDDDDDFFFFFFFFFFFFFFFFFFFFFFFFC0 - C0C0C0C0C0C0C0C00000C0C0C0C0C0C0F1F1F1CCCCCCFFFFFFFFFFFFFFFFFFFF - FFFFF1F1F1F1F1F1F1F1F1F1F1F1DDDDDDF1F1F1FFFFFFFFFFFFFFFFFFFFFFFF - FFFFFF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFDDDDDDF1F1F1 - F1F1F1F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFF - FFC0C0C0F1F1F1F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFF - FFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - CCCCCCDDDDDDF1F1F1F1F1F1F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1DDDDDDDDDD - DDDDDDDDDDDDDDCCCCCCF1F1F1F1F1F1FFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFF - FFFFDDDDDDDDDDDDDDDDDDF1F1F1FFFFFFFFFFFFF1F1F1F1F1F1C0C0C0F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1FF - FFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFF - F1F1F1C0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0DDDDDDDDDDDDDDDDDDF1F1F1 - FFFFFFFFFFFFF1F1F1CCCCCCC0C0C0CCCCCCDDDDDDFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFF1F1F10000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FFF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1 - F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1FFFFFFFFFF - FFF1F1F1DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFF1F1F1DDDDDDDDDDDDDD - DDDDDDDDDDF1F1F1F1F1F1DDDDDDF1F1F1F1F1F1F1F1F1DDDDDDDDDDDDCCCCCC - F1F1F1F1F1F1DDDDDDCCCCCCF1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1DDDDDDF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1FF - FFFFF1F1F1DDDDDDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1 - F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1FFFFFFFFFFFFC0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0DDDDDDDDDDDDC0C0 - C0CCCCCCF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFF1F1F1FFFFFFF1F1F1DD - DDDDDDDDDDDDDDDDDDDDDD0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFFF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FFFFFFFFFFFFFFFFFFFFFFFFFF800000800000800000F1F1F1 - FFFFFFF1F1F1FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1FFFFFFFFFFFF8000008000 - 00800000800000800000800000800000800000800000FFFFFFC0C0C0DDDDDDCC - CCCCDDDDDDC0C0C0DDDDDDF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1800000 - 800000800000DDDDDDCCCCCCC0C0C0C0C0C0DDDDDD0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FFDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1DDDDDDCCCCCCF1F1F10000FF0000FF0000FF0000FF0000FF0000FF0000FF - F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1DDDDDDFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFF1F1F1F1F1F1DDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1FFFFFFC0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0DDDDDDDD - DDDDCCCCCCCCCCCCF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFF - F1F1F1DDDDDDDDDDDDDDDDDDDDDDDD0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFFFFF - FFFF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FFFFFFFFFFFFFFFFFFFFFFFFFF8000008000008000 - 00800000FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F180 - 0000800000800000800000800000800000800000800000800000800000DDDDDD - F1F1F1DDDDDDF1F1F1DDDDDDF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1 - F1F1F1F1800000800000800000C0C0C0C0C0C0DDDDDDF1F1F10000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FFF1F1F1FFFFFFF1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1DDDDDDCCCCCCF1F1F10000FF0000FF0000FF0000FF0000FF0000 - FF0000FFF1F1F1F1F1F1FFFFFFF1F1F1DDDDDDF1F1F1FFFFFFF1F1F1FFFFFFFF - FFFFFFFFFFFFFFFFF1F1F1F1F1F1DDDDDDC0C0C0F1F1F1F1F1F1F1F1F1FFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1C0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0 - DDDDDDDDDDDDC0C0C0DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFF - FFFFFFFFF1F1F1DDDDDDDDDDDDDDDDDD0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - F1F1F1DDDDDD0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FFF1F1F1F1F1F1FFFFFFFFFFFFFF - FFFF800000800000800000F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1800000 - 8000008000008000008000008000008000008000008000008000008000008000 - 00800000800000800000F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1FFFFFFFFFFFFF1 - F1F1F1F1F1F1F1F1800000800000800000800000CCCCCCFFFFFFFFFFFFF1F1F1 - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFF1F1F1DDDD - DDDDDDDDDDDDDDDDDDDDDDDDDDCCCCCCFFFFFFFFFFFF0000FF0000FF0000FF00 - 00FF0000FF0000FFF1F1F1F1F1F1FFFFFFDDDDDDDDDDDDCCCCCCF1F1F1F1F1F1 - FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1C0C0C0CCCCCCF1F1F1F1F1F1FFFF - FFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1FFFFFFC0C0C0C0C0C0C0C0C00000C0C0 - C0C0C0C0F1F1F1CCCCCCF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1CCCCCC0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FFF1F1F1FFFFFFDDDDDD0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFF1F1F1DDDDDD - F1F1F1F1F1F1F1F1F1800000800000800000F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1800000800000800000800000800000F1F1F1DDDDDDDDDDDDFFFFFFFFFFFFFF - FFFFFFFFFF800000800000800000800000800000FFFFFFF1F1F1F1F1F1DDDDDD - DDDDDDCCCCCCC0C0C0F1F1F1DDDDDD800000800000800000800000FFFFFFFFFF - FFF1F1F1F1F1F1F1F1F10000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FFCCCCCCDDDDDDCCCCCCDDDDDDC0C0C0DDDDDDFFFFFFFFFFFFFFFFFF0000FF - 0000FF0000FF0000FF0000FF0000FFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1FFFF - FFF1F1F1DDDDDDFFFFFFFFFFFFF1F1F1F1F1F1DDDDDDC0C0C0CCCCCCF1F1F1F1 - F1F1FFFFFFF1F1F1F1F1F1F1F1F1DDDDDDCCCCCCB2B2B2C0C0C0C0C0C0C0C0C0 - 0000C0C0C0C0C0C0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1CCCCCC0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FFF1F1F1F1F1F1F1F1F10000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFDDDD - DDDDDDDDF1F1F1F1F1F1F1F1F1800000800000800000DDDDDDF1F1F1DDDDDDF1 - F1F1F1F1F1800000800000800000800000F1F1F1DDDDDDDDDDDDDDDDDDFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1800000800000800000F1F1F1F1F1F1F1F1 - F1DDDDDDDDDDDD999999B2B2B2F1F1F1DDDDDDDDDDDD800000800000800000FF - FFFFFFFFFFF1F1F1FFFFFFFFFFFF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FFF1F1F1F1F1F1DDDDDDDDDDDDDDDDDDFFFFFFF1F1F1F1F1F1F1F1 - F10000FF0000FF0000FF0000FF0000FF0000FFFFFFFFFFFFFFFFFFFFF1F1F1FF - FFFFFFFFFFFFFFFFDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1DDDDDDC0C0C0CCCCCC - F1F1F1F1F1F1FFFFFFF1F1F1F1F1F1DDDDDDDDDDDDC0C0C0CCCCCCC0C0C0C0C0 - C0C0C0C00000C0C0C0C0C0C0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F10000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F10000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FFF1F1F1F1F1F1DDDDDDF1F1F1800000800000800000DDDDDD - DDDDDDF1F1F1DDDDDD800000800000800000800000F1F1F1DDDDDDDDDDDDDDDD - DDDDDDDDDDDDDDCCCCCCF1F1F1F1F1F1F1F1F1F1F1F180000080000080000080 - 0000F1F1F1C0C0C0B2B2B2DDDDDDFFFFFFFFFFFFFFFFFFF1F1F1800000800000 - 800000800000F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1DDDDDDDDDDDDDDDDDDC0C0 - C0CCCCCCF1F1F1FFFFFFFFFFFFF1F1F1F1F1F1CCCCCC999999CCCCCCF1F1F1C0 - C0C0C0C0C0C0C0C00000C0C0C0C0C0C0F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFF - FFFFF1F1F1FFFFFFFFFFFFDDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F100 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FFF1F1F1F1F1F1FFFFFFF1F1F1F1F1F18000008000 - 00800000C0C0C0CCCCCCC0C0C0C0C0C0800000800000800000F1F1F1DDDDDDDD - DDDDDDDDDDCCCCCCC0C0C0DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFF - 800000800000800000CCCCCCDDDDDDFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDDDDD - DD800000800000800000800000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F100 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDDDDDDDDDDDDDF1 - F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDC0C0C0DDDDDDF1F1F1 - FFFFFFC0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0F1F1F1DDDDDDFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F10000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FFF1F1F1F1F1F1F1F1F1DDDDDD - DDDDDDCCCCCC0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FFF1F1F1F1F1F1F1F1F1F1F1F180 - 0000800000800000800000FFFFFFF1F1F1FFFFFFFFFFFF800000800000800000 - DDDDDDDDDDDDDDDDDDC0C0C0F1F1F1F1F1F1F1F1F1FFFFFFF1F1F1F1F1F1FFFF - FFFFFFFF800000800000800000800000FFFFFFFFFFFFFFFFFFFFFFFFCCCCCCC0 - C0C0C0C0C0C0C0C0CCCCCC800000800000800000FFFFFFFFFFFFFFFFFFFFFFFF - F1F1F1DDDDDD0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDDDDDDDF1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDF1F1F1FFFFFFF1F1F1DDDDDDDDDDDDFFFF - FFF1F1F1FFFFFFC0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0F1F1F1DDDDDDFFFF - FFFFFFFFF1F1F1F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1DDDDDDCCCCCCF1F1F1F1 - F1F1F1F1F1F1F1F10000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFF1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1C0C0C0CCCCCC0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFF1F1F1F1F1F1 - F1F1F1F1F1F1800000800000800000800000FFFFFFFFFFFFFFFFFFFFFFFFF1F1 - F1F1F1F1DDDDDDDDDDDDDDDDDDC0C0C0F1F1F1F1F1F1F1F1F1FFFFFFF1F1F1FF - FFFFFFFFFFFFFFFF800000800000800000800000800000FFFFFFFFFFFFFFFFFF - CCCCCCCCCCCCCCCCCCDDDDDDDDDDDD800000800000800000DDDDDDC0C0C0F1F1 - F1F1F1F1F1F1F1DDDDDDF1F1F10000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDFFFFFFF1F1F1DDDDDDF1 - F1F1FFFFFFF1F1F1FFFFFFC0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0C0C0C0DD - DDDDF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1DDDDDDCCCCCCDDDDDD - DDDDDDF1F1F1CCCCCCCCCCCC0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFF1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1DDDDDDF1F1F10000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FFF1F1F1F1F1F1F1F1F1DDDDDD800000800000800000F1F1F1FFFFFFFFFFFFFF - FFFFFFFFFFF1F1F1CCCCCCB2B2B2CCCCCCCCCCCCFFFFFFF1F1F1F1F1F1FFFFFF - F1F1F1FFFFFFFFFFFF800000800000800000800000800000800000F1F1F1FFFF - FFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFF800000800000800000C0 - C0C0FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F10000FF0000FF0000FF - 0000FF0000FF0000FF0000FFF1F1F1FFFFFFFFFFFFFFFFFF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FFFFFFFFF1F1F1F1F1F1FFFFFFFFFFFFF1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDC0C0C0C0C0C0FFFFFFFFFFFF - F1F1F1DDDDDDCCCCCCDDDDDDF1F1F1C0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0 - F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1DDDD - DDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F10000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - FFFFFFFFFFFFF1F1F1DDDDDDF1F1F1F1F1F1FFFFFFFFFFFF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FFF1F1F1DDDDDDDDDDDDDDDDDDDDDDDD800000800000800000FFFFFF - FFFFFFFFFFFFFFFFFFC0C0C0CCCCCCDDDDDDFFFFFFFFFFFFF1F1F1CCCCCCF1F1 - F1FFFFFF800000800000800000800000800000800000800000800000DDDDDDDD - DDDDF1F1F1DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1800000 - 800000800000F1F1F1F1F1F1DDDDDDCCCCCCCCCCCCDDDDDDF1F1F1F1F1F10000 - FF0000FF0000FF0000FF0000FF0000FF0000FFF1F1F1F1F1F1F1F1F1F1F1F100 - 00FF0000FF0000FF0000FF0000FF0000FFF1F1F1F1F1F1F1F1F1FFFFFFFFFFFF - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDB2B2B2C0C0C0DDDDDDFFFFFFFFFF - FFFFFFFFDDDDDDDDDDDDDDDDDDF1F1F1FFFFFFC0C0C0C0C0C0C0C0C00000C0C0 - C0C0C0C0F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1DDDDDDF1F1F1F1F1F1F1F1F1F1F1F10000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FFFFFFFFFFFFFFF1F1F1DDDDDDDDDDDDCCCCCCDDDDDDF1F1F10000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FFCCCCCCCCCCCCDDDDDDCCCCCC8000008000008000 - 00FFFFFFFFFFFFFFFFFFF1F1F1C0C0C0F1F1F1FFFFFFFFFFFFFFFFFFCCCCCCDD - DDDDF1F1F1800000800000800000800000800000800000800000800000800000 - F1F1F1F1F1F1F1F1F1DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1800000800000800000F1F1F1F1F1F1F1F1F1DDDDDDDDDDDDF1F1F1F1F1F1F1 - F1F10000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFFFF1F1F1 - F1F1F10000FF0000FF0000FF0000FF0000FF0000FFF1F1F1F1F1F1F1F1F1FFFF - FFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1DDDDDDC0C0C0C0C0C0DDDDDDFFFFFFFF - FFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFC0C0C0C0C0C0C0C0C0 - 0000C0C0C0C0C0C0FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1DDDDDDDDDDDDCCCCCCF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFF1F1F1F1F1 - F1FFFFFFFFFFFFF1F1F1FFFFFFFFFFFFF1F1F1DDDDDDF1F1F1DDDDDDDDDDDDDD - DDDDFFFFFFFFFFFFFFFFFFFFFFFFC0C0C0CCCCCCCCCCCCF1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F10000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FFF1F1F1F1F1F1DDDDDDF1F1F180 - 0000800000800000800000F1F1F1DDDDDDDDDDDDFFFFFFFFFFFFFFFFFFF1F1F1 - 8000008000008000008000008000008000008000008000008000008000008000 - 00F1F1F1FFFFFFF1F1F1B2B2B2C0C0C0DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1800000800000800000800000FFFFFFF1F1F1F1F1F1FFFFFF - FFFFFFF1F1F1F1F1F1F1F1F10000FF0000FF0000FF0000FF0000FF0000FF0000 - FFF1F1F1F1F1F1F1F1F10000FF0000FF0000FF0000FF0000FFF1F1F1FFFFFFFF - FFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1CCCCCCC0C0C0CCCCCCFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1C0C0C0C0C0 - C0C0C0C00000C0C0C0C0C0C0F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1C0C0C0C0C0C0DDDDDDF1F1F1FFFFFFF1F1F1FFFFFFF1F1F1FF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1DDDDDDFFFFFFFFFFFFF1F1F1F1F1F1CCCCCCFFFFFFF1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F10000FF0000FF0000FF0000FF0000FF0000FFF1F1F100 - 00FF0000FF0000FF0000FFFFFFFF0000FF0000FF0000FF0000FFF1F1F1F1F1F1 - F1F1F1FFFFFF800000800000800000F1F1F1DDDDDDCCCCCCF1F1F1F1F1F1F1F1 - F1F1F1F1800000800000800000800000800000800000800000800000F1F1F1F1 - F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1800000800000800000FFFFFFF1F1F1FFFF - FFFFFFFFFFFFFFFFFFFFCCCCCCC0C0C0C0C0C0F1F1F10000FF0000FF0000FF00 - 00FF0000FF0000FFF1F1F1F1F1F10000FF0000FF0000FF0000FF0000FF0000FF - FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1C0C0C0DDDDDDFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1C0 - C0C0C0C0C0C0C0C00000C0C0C0C0C0C0F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1F1 - F1F1F1F1F1F1F1F1DDDDDDC0C0C0CCCCCCFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1 - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1CCCCCCFFFFFFFFFFFFF1F1F1F1F1F1DDDDDDF1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1FFFFFFF1F1F10000FF0000FF0000FF0000FF0000FF - 0000FFFFFFFF0000FF0000FFFFFFFFFFFFFF0000FF0000FF0000FF0000FFF1F1 - F1F1F1F1F1F1F1FFFFFF800000800000800000800000DDDDDDC0C0C0F1F1F1F1 - F1F1F1F1F1F1F1F1800000800000800000800000800000FFFFFFFFFFFFFFFFFF - FFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFF1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1800000800000800000FF - FFFFFFFFFFFFFFFFFFFFFFF1F1F1B2B2B2C0C0C0CCCCCCDDDDDD0000FF0000FF - 0000FF0000FF0000FF0000FF0000FFF1F1F10000FF0000FF0000FF0000FF0000 - FF0000FFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1CCCCCCCCCCCCF1F1F1FF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1 - F1F1F1C0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0FFFFFFFFFFFFFFFFFFF1F1F1 - F1F1F1DDDDDDDDDDDDDDDDDDDDDDDDC0C0C0CCCCCCFFFFFFF1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1DDDDDDCCCCCCC0C0C0F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFF1F1F10000FF0000FF0000 - FF0000FF0000FF0000FFFFFFFFFFFFFFFFFFFFFFFFFF0000FF0000FF0000FF00 - 00FF0000FFFFFFFFFFFFFFFFFFFFFFFFFF800000800000800000800000CCCCCC - F1F1F1F1F1F1F1F1F1F1F1F1800000800000800000800000FFFFFFFFFFFFFFFF - FFFFFFFFF1F1F1CCCCCCFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDF1F1F1F1F1F1FF - FFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1800000800000 - 800000FFFFFFF1F1F1FFFFFFF1F1F1DDDDDDCCCCCCF1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F10000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FFF1F1F1DDDDDDF1F1F1F1F1F1F1F1F1CCCCCC999999F1F1F1 - F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1 - F1F1F1F1F1F1F1C0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0FFFFFFDDDDDDDDDD - DDDDDDDDDDDDDDDDDDDDDDDDDDF1F1F1DDDDDDC0C0C0CCCCCCF1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1DDDDDDDDDDDDF1F1F1F1F1F1 - F1F1F1F1F1F1CCCCCCC0C0C0DDDDDDF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFDDDD - DDDDDDDDC0C0C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1CCCCCC0000FF00 - 00FF0000FF0000FF0000FFDDDDDDDDDDDDDDDDDDF1F1F1FFFFFFFFFFFF0000FF - 0000FF0000FF0000FF0000FFF1F1F1DDDDDDDDDDDDCCCCCCDDDDDD8000008000 - 00F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1FFFFFF800000800000800000F1F1F1F1 - F1F1DDDDDDC0C0C0CCCCCCCCCCCCFFFFFFFFFFFFF1F1F1DDDDDDC0C0C0800000 - 800000800000F1F1F1F1F1F1F1F1F1FFFFFFF1F1F1F1F1F1FFFFFFFFFFFFFFFF - FF800000800000800000800000F1F1F1F1F1F1F1F1F1DDDDDDF1F1F1F1F1F1F1 - F1F1FFFFFFFFFFFFFFFFFF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FFF1F1F1F1F1F1F1F1F1DDDDDDC0C0C0DDDD - DDF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFF1 - F1F1F1F1F1CCCCCCFFFFFFC0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0F1F1F1F1 - F1F1DDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDFFFFFFFFFFFF - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDD - DDDDDDDDDDDDDDDDDDDDCCCCCCF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFF - FFFFDDDDDDDDDDDDC0C0C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - F1F1F10000FF0000FF0000FFDDDDDDDDDDDDDDDDDDDDDDDDCCCCCCF1F1F1FFFF - FFDDDDDDF1F1F1F1F1F10000FF0000FF0000FFB2B2B2C0C0C0DDDDDDF1F1F180 - 0000800000800000FFFFFFFFFFFFF1F1F1F1F1F1FFFFFF800000800000800000 - 800000DDDDDDB2B2B2CCCCCCFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1CCCC - CC800000800000800000F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1FFFFFFFFFFFFFF - FFFFFFFFFFFFFFFF800000800000800000F1F1F1F1F1F1FFFFFFF1F1F1FFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FFDDDDDDDDDDDDDDDDDDCCCCCCCC - CCCCF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1FFFFFFFFFFFF - F1F1F1DDDDDDCCCCCCCCCCCCFFFFFFC0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0 - F1F1F1F1F1F1DDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFF - FFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFF1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1CCCCCCF1F1F1F1F1F1F1F1F1FFFFFFFFFFFF - FFFFFFFFFFFFC0C0C0C0C0C0B2B2B2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFF1F1F10000FF0000FF0000FF0000FF0000FF0000FF0000FFCCCCCCF1 - F1F1F1F1F10000FF0000FF0000FF0000FF0000FF0000FFCCCCCCDDDDDDF1F1F1 - F1F1F1800000800000800000800000FFFFFFF1F1F1FFFFFFFFFFFFF1F1F18000 - 00800000800000F1F1F1C0C0C0DDDDDDFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1 - F1F1DDDDDD800000800000800000F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1FFFFFF - FFFFFFFFFFFFFFFFFFFFFFFF800000800000800000800000FFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F10000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFDDDDDDDDDDDD - 999999DDDDDDF1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFF - FFF1F1F1F1F1F1CCCCCCB2B2B2DDDDDDFFFFFFC0C0C0C0C0C0C0C0C00000C0C0 - C0C0C0C0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFF - F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1CCCCCCCCCCCCF1F1F1F1F1F1F1F1F1FFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1 - F1F1FFFFFFFFFFFFFFFFFFFFFFFF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FFF1F1F1FFFFFF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFF - FFFFFFFFFFFFFFF1F1F1FFFFFF800000800000800000FFFFFFFFFFFFFFFFFFF1 - F1F1F1F1F1800000800000800000800000800000FFFFFFFFFFFFFFFFFFF1F1F1 - F1F1F1F1F1F1F1F1F1800000800000800000800000FFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDC0C0C0800000800000800000800000FF - FFFFFFFFFFF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1 - FFFFFF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFC0C0 - C0C0C0C0CCCCCCF1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1CCCCCCC0C0C0CC - CCCCFFFFFFF1F1F1F1F1F1C0C0C0DDDDDDFFFFFFFFFFFFC0C0C0C0C0C0C0C0C0 - 0000C0C0C0C0C0C0DDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1DDDDDDC0C0C0DDDDDDF1F1F1FFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1FFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFF1F1F1FFFFFFF1F1F1FFFFFFFFFFFFFFFFFF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FFFFFFFF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FFFFFFFFF1F1F1FFFFFFFFFFFF800000800000800000DDDDDDF1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F18000008000008000008000008000008000 - 00800000800000800000800000800000800000800000800000FFFFFFFFFFFFFF - FFFFFFFFFF800000800000800000800000800000800000800000800000800000 - 800000800000800000800000800000800000800000800000800000F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1B2B2B20000FF0000FF0000FF0000FF0000FF0000FF00 - 00FFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFCCCCCC999999B2B2B2 - F1F1F1F1F1F1FFFFFFC0C0C0C0C0C0CCCCCCF1F1F1FFFFFFFFFFFFC0C0C0C0C0 - C0C0C0C00000C0C0C0C0C0C0F1F1F1F1F1F1F1F1F1DDDDDDDDDDDDDDDDDDDDDD - DDC0C0C0C0C0C0F1F1F1F1F1F1DDDDDDDDDDDDF1F1F1F1F1F1FFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1FFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFF1F1F10000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FFFFFFFFF1F1F1DDDDDDF1F1F1DDDDDD8000008000008000 - 00DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F180000080000080000080 - 0000800000800000800000800000800000800000800000800000FFFFFFF1F1F1 - F1F1F1FFFFFFFFFFFF8000008000008000008000008000008000008000008000 - 00800000800000800000800000800000800000800000800000800000800000F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1C0C0C00000FF0000FF0000FF0000FF0000FF - 0000FF0000FFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1B2B2B2CCCC - CCDDDDDDFFFFFFFFFFFFF1F1F1CCCCCCCCCCCCDDDDDDFFFFFFFFFFFFFFFFFFC0 - C0C0C0C0C0C0C0C00000C0C0C0C0C0C0DDDDDDCCCCCCCCCCCCC0C0C0C0C0C0B2 - B2B2CCCCCCDDDDDDFFFFFFFFFFFFDDDDDDDDDDDDCCCCCCDDDDDDF1F1F1F1F1F1 - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1 - F1CCCCCCCCCCCCFFFFFFF1F1F1F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1FF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFF1F1F1F1F1F1 - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FFF1F1F1F1F1F1DDDDDD80000080 - 0000800000800000F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1DDDDDD800000800000800000800000800000800000800000FFFFFFF1F1 - F1DDDDDDF1F1F1F1F1F1F1F1F1F1F1F180000080000080000080000080000080 - 0000800000800000800000800000800000800000800000800000800000800000 - 800000800000800000F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F10000FF0000 - FF0000FF0000FF0000FFFFFFFFFFFFFFDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFC0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1FFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDDDDDDDDDDDCCCCCCF1F1F1F1 - F1F1F1F1F1FFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1F1 - F1F1DDDDDDC0C0C0F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1DDDDDD - DDDDDDDDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDD - DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDC0C0C0CCCCCCF1F1F1F1F1F1FF - FFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - C0C0C0F1F1F1F1F1F1DDDDDDDDDDDDDDDDDDF1F1F1F1F1F1F1F1F1FFFFFFFFFF - FFFFFFFFF1F1F1F1F1F1F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FF - FFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1CCCCCCF1F1F1F1F1F1F1F1F1 - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1 - F1F1F1F1F1F1F1C0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0F1F1F1F1F1F1F1F1 - F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1 - F1F1FFFFFFFFFFFFF1F1F1DDDDDDFFFFFFFFFFFFFFFFFFDDDDDDDDDDDDDDDDDD - F1F1F1FFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFF1F1F1FFFFFFF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1 - F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1 - F1F1F1F1F1F1CCCCCCC0C0C0F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFDDDDDDF1F1 - F1DDDDDDDDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDF1 - F1F1DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDC0C0C0DDDDDDF1F1F1 - F1F1F1F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1DDDDDDC0C0C0F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1 - F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1CCCCCCDDDDDDF1F1 - F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFC0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0F1F1F1FF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - DDDDDDC0C0C0DDDDDDC0C0C0DDDDDDFFFFFFFFFFFFF1F1F1F1F1F1DDDDDDDDDD - DDDDDDDDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFF - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1 - F1F1F1F1F1F1F1DDDDDDC0C0C0DDDDDDF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1 - F1F1DDDDDDDDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDD - C0C0C0DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1CCCCCCDDDD - DDF1F1F1F1F1F1F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1DDDDDDF1F1F1F1 - F1F1C0C0C0C0C0C0F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1FFFFFFF1F1F1FFFFFF - F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1DDDDDDC0C0C0F1 - F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1 - F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFC0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0 - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFC0C0 - C0CCCCCCCCCCCCDDDDDDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1DD - DDDDDDDDDDDDDDDDDDDDDDDDDDDDF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFF1F1 - F1F1F1F1F1F1F1DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFF1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1C0C0C0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFF - FFFFFFF1F1F1DDDDDDCCCCCCDDDDDDF1F1F1DDDDDDDDDDDDDDDDDDC0C0C0CCCC - CCCCCCCCCCCCCCF1F1F1DDDDDDDDDDDDF1F1F1F1F1F1F1F1F1DDDDDDDDDDDDCC - CCCCF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1DDDDDDDDDDDD - DDDDDDDDDDDDC0C0C0DDDDDDF1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1 - F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1DDDDDD - CCCCCCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFC0C0C0C0C0C0C0C0C00000C0C0 - C0C0C0C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1FFFFFFF1 - F1F1DDDDDDF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1CCCCCC - DDDDDDC0C0C0CCCCCCDDDDDDC0C0C0C0C0C0CCCCCCF1F1F1FFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDDDDDDDDD - DDDDF1F1F1F1F1F1CCCCCCDDDDDDF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1 - FFFFFFF1F1F1F1F1F1DDDDDDC0C0C0DDDDDDF1F1F1F1F1F1FFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFC0C0C0CCCCCCF1F1F1F1F1F1DDDDDDDDDDDDC0C0C0DDDDDDDD - DDDDF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFF1F1F1FFFFFFF1F1F1F1F1F1DDDDDD - DDDDDDDDDDDDDDDDDDFFFFFFF1F1F1FFFFFFFFFFFFDDDDDDDDDDDDF1F1F1F1F1 - F1DDDDDDCCCCCCDDDDDDDDDDDDF1F1F1FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1FF - FFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCCCCCCDDDDDDF1F1F1 - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1DDDD - DDCCCCCCCCCCCCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0C0C0C0C0C0C0C0C0 - 0000C0C0C0C0C0C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1 - F1F1F1F1F1F1DDDDDDF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1 - F1DDDDDDCCCCCCC0C0C0DDDDDDCCCCCCC0C0C0CCCCCCF1F1F1FFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDF1F1F1F1F1F1F1F1F1DDDDDD - CCCCCCC0C0C0DDDDDDCCCCCCC0C0C0F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFF - FFF1F1F1FFFFFFF1F1F1DDDDDDC0C0C0CCCCCCF1F1F1F1F1F1FFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFF1F1F1DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDD - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1 - F1DDDDDDDDDDDDDDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1CCCCCCDDDDDDF1F1F1F1F1F1FFFFFFF1F1F1FFFFFFF1F1F1F1F1F1 - F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1B2B2B2CCCC - CCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1 - F1F1DDDDDDC0C0C0F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0C0C0C0C0 - C0C0C0C00000C0C0C0C0C0C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1 - F1F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1FFFFFFF1F1F1F1F1F1FFFFFFF1F1F1FF - FFFFF1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1 - F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1DDDDDDC0C0C0CCCCCCF1F1F1DDDD - DDC0C0C0DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFF1F1F1F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1DD - DDDDDDDDDDDDDDDDDDDDDDDDDDDDF1F1F1DDDDDDCCCCCCDDDDDDF1F1F1FFFFFF - FFFFFFFFFFFFF1F1F1DDDDDDF1F1F1FFFFFFF1F1F1FFFFFFFFFFFFF1F1F1DDDD - DDF1F1F1FFFFFFFFFFFFF1F1F1DDDDDDF1F1F1FFFFFFF1F1F1DDDDDDCCCCCCDD - DDDDF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - DDDDDDCCCCCCB2B2B2C0C0C0FFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1CCCCCCC0 - C0C0C0C0C0C0C0C00000C0C0C0C0C0C0F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFF1F1F1F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFF1F1F1F1F1F1DDDDDDCCCCCCCCCCCCF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1CC - CCCCCCCCCCC0C0C0F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1FFFF - FFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1 - DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDCCCCCCC0C0C0CCCCCCDDDDDDF1F1F1F1F1 - F1FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFF1 - F1F1F1F1F1FFFFFFFFFFFFDDDDDDCCCCCCCCCCCCF1F1F1FFFFFFFFFFFFF1F1F1 - F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1DDDDDDDDDDDDC0C0C0 - CCCCCCC0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C00000} - Stretch = True - IsControl = True - end - object lblProductName: TLabel - Left = 5 - Top = 80 - Width = 68 - Height = 13 - Alignment = taCenter - Caption = 'Product Name' - IsControl = True - end - object lblVersion: TLabel - Left = 8 - Top = 160 - Width = 74 - Height = 13 - Caption = 'Version: 1.1.1.1' - IsControl = True - end - object lblGovStatement: TLabel - Left = 5 - Top = 96 - Width = 231 - Height = 13 - Alignment = taCenter - Caption = 'Developed by the Department of Veterans Affairs' - IsControl = True - end - object lblCRC: TLabel - Left = 232 - Top = 160 - Width = 92 - Height = 13 - Caption = 'CRC: DDDDDDDD' - end - object lblDate: TLabel - Left = 97 - Top = 160 - Width = 82 - Height = 13 - Alignment = taCenter - Caption = 'January 30, 2000' - end - object ProgramIcon: TImage - Left = 176 - Top = 8 - Width = 145 - Height = 73 - end - object Memo1: TMemo - Left = 8 - Top = 112 - Width = 321 - Height = 49 - BorderStyle = bsNone - Lines.Strings = ( - 'Unauthorized access or use of this system and/or its data is a ' - - 'federal crime. Use of all data must be in accordance with VA po' + - 'licy ' - 'on security and privacy.') - ParentColor = True - TabOrder = 0 - end - end - object OKButton: TButton - Left = 139 - Top = 204 - Width = 75 - Height = 25 - Caption = 'OK' - Default = True - ModalResult = 1 - TabOrder = 1 - end -end diff --git a/BDK32/Samples/RPCBroker/SilentSignOn/frmVistAAbout.pas b/BDK32/Samples/RPCBroker/SilentSignOn/frmVistAAbout.pas deleted file mode 100644 index 24437df..0000000 --- a/BDK32/Samples/RPCBroker/SilentSignOn/frmVistAAbout.pas +++ /dev/null @@ -1,267 +0,0 @@ -unit frmVistAAbout; - -interface - -uses Windows, SysUtils, Classes, Graphics, Forms, Controls, StdCtrls, - Buttons, ExtCtrls, jpeg, jconsts, Dialogs; - -TYPE - TInteger8 = Int64; - -type - TfrmVistAAbout = class(TForm) - Panel1: TPanel; - VistaLogo: TImage; - lblProductName: TLabel; - lblVersion: TLabel; - lblGovStatement: TLabel; - OKButton: TButton; - lblCRC: TLabel; - Memo1: TMemo; - lblDate: TLabel; - ProgramIcon: TImage; - procedure FormCreate(Sender: TObject); - private - { Private declarations } - public - { Public declarations } - procedure getfileinfo(var Version: String; var ProductName: String); virtual; - end; - -procedure ShowAboutBox; - -implementation - -{$R *.DFM} - - CONST - table: ARRAY[0..255] OF DWORD = - ($00000000, $77073096, $EE0E612C, $990951BA, - $076DC419, $706AF48F, $E963A535, $9E6495A3, - $0EDB8832, $79DCB8A4, $E0D5E91E, $97D2D988, - $09B64C2B, $7EB17CBD, $E7B82D07, $90BF1D91, - $1DB71064, $6AB020F2, $F3B97148, $84BE41DE, - $1ADAD47D, $6DDDE4EB, $F4D4B551, $83D385C7, - $136C9856, $646BA8C0, $FD62F97A, $8A65C9EC, - $14015C4F, $63066CD9, $FA0F3D63, $8D080DF5, - $3B6E20C8, $4C69105E, $D56041E4, $A2677172, - $3C03E4D1, $4B04D447, $D20D85FD, $A50AB56B, - $35B5A8FA, $42B2986C, $DBBBC9D6, $ACBCF940, - $32D86CE3, $45DF5C75, $DCD60DCF, $ABD13D59, - $26D930AC, $51DE003A, $C8D75180, $BFD06116, - $21B4F4B5, $56B3C423, $CFBA9599, $B8BDA50F, - $2802B89E, $5F058808, $C60CD9B2, $B10BE924, - $2F6F7C87, $58684C11, $C1611DAB, $B6662D3D, - - $76DC4190, $01DB7106, $98D220BC, $EFD5102A, - $71B18589, $06B6B51F, $9FBFE4A5, $E8B8D433, - $7807C9A2, $0F00F934, $9609A88E, $E10E9818, - $7F6A0DBB, $086D3D2D, $91646C97, $E6635C01, - $6B6B51F4, $1C6C6162, $856530D8, $F262004E, - $6C0695ED, $1B01A57B, $8208F4C1, $F50FC457, - $65B0D9C6, $12B7E950, $8BBEB8EA, $FCB9887C, - $62DD1DDF, $15DA2D49, $8CD37CF3, $FBD44C65, - $4DB26158, $3AB551CE, $A3BC0074, $D4BB30E2, - $4ADFA541, $3DD895D7, $A4D1C46D, $D3D6F4FB, - $4369E96A, $346ED9FC, $AD678846, $DA60B8D0, - $44042D73, $33031DE5, $AA0A4C5F, $DD0D7CC9, - $5005713C, $270241AA, $BE0B1010, $C90C2086, - $5768B525, $206F85B3, $B966D409, $CE61E49F, - $5EDEF90E, $29D9C998, $B0D09822, $C7D7A8B4, - $59B33D17, $2EB40D81, $B7BD5C3B, $C0BA6CAD, - - $EDB88320, $9ABFB3B6, $03B6E20C, $74B1D29A, - $EAD54739, $9DD277AF, $04DB2615, $73DC1683, - $E3630B12, $94643B84, $0D6D6A3E, $7A6A5AA8, - $E40ECF0B, $9309FF9D, $0A00AE27, $7D079EB1, - $F00F9344, $8708A3D2, $1E01F268, $6906C2FE, - $F762575D, $806567CB, $196C3671, $6E6B06E7, - $FED41B76, $89D32BE0, $10DA7A5A, $67DD4ACC, - $F9B9DF6F, $8EBEEFF9, $17B7BE43, $60B08ED5, - $D6D6A3E8, $A1D1937E, $38D8C2C4, $4FDFF252, - $D1BB67F1, $A6BC5767, $3FB506DD, $48B2364B, - $D80D2BDA, $AF0A1B4C, $36034AF6, $41047A60, - $DF60EFC3, $A867DF55, $316E8EEF, $4669BE79, - $CB61B38C, $BC66831A, $256FD2A0, $5268E236, - $CC0C7795, $BB0B4703, $220216B9, $5505262F, - $C5BA3BBE, $B2BD0B28, $2BB45A92, $5CB36A04, - $C2D7FFA7, $B5D0CF31, $2CD99E8B, $5BDEAE1D, - - $9B64C2B0, $EC63F226, $756AA39C, $026D930A, - $9C0906A9, $EB0E363F, $72076785, $05005713, - $95BF4A82, $E2B87A14, $7BB12BAE, $0CB61B38, - $92D28E9B, $E5D5BE0D, $7CDCEFB7, $0BDBDF21, - $86D3D2D4, $F1D4E242, $68DDB3F8, $1FDA836E, - $81BE16CD, $F6B9265B, $6FB077E1, $18B74777, - $88085AE6, $FF0F6A70, $66063BCA, $11010B5C, - $8F659EFF, $F862AE69, $616BFFD3, $166CCF45, - $A00AE278, $D70DD2EE, $4E048354, $3903B3C2, - $A7672661, $D06016F7, $4969474D, $3E6E77DB, - $AED16A4A, $D9D65ADC, $40DF0B66, $37D83BF0, - $A9BCAE53, $DEBB9EC5, $47B2CF7F, $30B5FFE9, - $BDBDF21C, $CABAC28A, $53B39330, $24B4A3A6, - $BAD03605, $CDD70693, $54DE5729, $23D967BF, - $B3667A2E, $C4614AB8, $5D681B02, $2A6F2B94, - $B40BBE37, $C30C8EA1, $5A05DF1B, $2D02EF8D); - - // Use CalcCRC32 as a procedure so CRCValue can be passed in but - // also returned. This allows multiple calls to CalcCRC32 for - // the "same" CRC-32 calculation. - PROCEDURE CalcCRC32 (p: pointer; ByteCount: DWORD; VAR CRCValue: DWORD); - // The following is a little cryptic (but executes very quickly). - // The algorithm is as follows: - // 1. exclusive-or the input byte with the low-order byte of - // the CRC register to get an INDEX - // 2. shift the CRC register eight bits to the right - // 3. exclusive-or the CRC register with the contents of - // Table[INDEX] - // 4. repeat steps 1 through 3 for all bytes - - VAR - i: DWORD; - q: ^BYTE; - BEGIN - q := p; - FOR i := 0 TO ByteCount-1 DO BEGIN - CRCvalue := (CRCvalue SHR 8) XOR - Table[ q^ XOR (CRCvalue AND $000000FF) ]; - INC(q) - END - END {CalcCRC32}; - - - // The CRC-32 value calculated here matches the one from the PKZIP program. - // Use MemoryStream to read file in binary mode. - PROCEDURE CalcFileCRC32 (FromName: STRING; VAR CRCvalue: DWORD; - VAR TotalBytes: TInteger8; - VAR error: WORD); - VAR - Stream: TMemoryStream; - BEGIN - error := 0; - CRCValue := $FFFFFFFF; - Stream := TMemoryStream.Create; - TRY - TRY - Stream.LoadFromFile(FromName); - IF Stream.Size > 0 - THEN CalcCRC32 (Stream.Memory, Stream.Size, CRCvalue) - EXCEPT - ON E: EReadError DO - error := 1 - END; - - CRCvalue := NOT CRCvalue; - TotalBytes := Stream.Size - FINALLY - Stream.Free - END; - END {CalcFileCRC32}; - -procedure TfrmVistAAbout.FormCreate(Sender: TObject); -var - CRC32: DWord; - TotalBytes: Int64; - Error: Word; - Text: String; - Version: String; - ProductName: String; -begin - CalcFileCRC32(Application.ExeName, CRC32, TotalBytes, Error); - lblCRC.Caption := 'CRC: ' + IntToHex(CRC32,8); - Text := Application.ExeName; - while pos('\',Text) > 0 do - begin - Text := copy(Text,pos('\',Text)+1,Length(Text)); - end; // while - Text := copy(Text,1,Length(Text)-4); - Caption := 'About ' + Text; - getfileinfo(Version, ProductName); - lblProductName.Caption := ProductName; - lblVersion.Caption := 'Version: ' + Version; - lblProductName.Width := Panel1.Width-10; - lblGovStatement.Width := Panel1.Width-10; - if ProgramIcon.Picture.Graphic = nil then - begin - VistALogo.Left := (Panel1.Width - VistALogo.Width) div 2; - end; -end; - -procedure TfrmVistAAbout.GetFileInfo(var Version: String; var ProductName: String); -var - VerInfoSize: DWORD; // holds the size of the version info resource - GetInfoSizeJunk: DWORD; // a junk variable, its value is ignored - VersionInfo: Pointer; // points to the version info resource - Translation: Pointer; // holds version info translation table - InfoPointer: Pointer; // a pointer to version information - - VersionInfoSize: UINT; // holds the size of version information - VersionValue: string; // holds the version info request string - SearchRec: TSearchRec; - DateTimeVal: TDateTime; - WriteTime: Integer; -begin - {retrieve the size of the version information resource, if one exists} - VerInfoSize := GetFileVersionInfoSize(PChar(Application.ExeName), - GetInfoSizeJunk); - - {if there was a version information resource available...} - - if VerInfoSize>0 then - begin - {retrieve enough memory to hold the version resource} - GetMem(VersionInfo, VerInfoSize); - - {retrieve the version resource for the selected file} - GetFileVersionInfo(PChar(Application.ExeName), 0, - VerInfoSize, VersionInfo); - - {retrieve a pointer to the translation table} - VerQueryValue(VersionInfo, '\\VarFileInfo\\Translation', - Translation, VersionInfoSize); - - {initialize the version value request string} - VersionValue :='\\StringFileInfo\\'+ - IntToHex(LoWord(LongInt(Translation^)),4)+ - IntToHex(HiWord(LongInt(Translation^)),4)+ - '\\'; - - {retrieve and display the file version} - VerQueryValue(VersionInfo, PChar(VersionValue+'FileVersion'), InfoPointer, - VersionInfoSize); - Version := string(PChar(InfoPointer)); - - {retrieve and display the product name} - VerQueryValue(VersionInfo, PChar(VersionValue+'ProductName'), InfoPointer, - VersionInfoSize); - ProductName := string(PChar(InfoPointer)); - - {free the version resource memory} - FreeMem(VersionInfo, VerInfoSize); - end - else - begin - Version := 'Not in File'; - ProductName := 'Not Identified In File'; - end; - if findfirst(Application.ExeName, faAnyFile, SearchRec) = 0 then - begin - WriteTime := SearchRec.Time; - DateTimeVal := FileDateToDateTime(WriteTime); - lblDate.Caption := FormatDateTime('mmmm dd, yyyy hh:nn',DateTimeVal); - end; -end; - -procedure ShowAboutBox; -begin - with TfrmVistAAbout.Create(Application) do - try - ShowModal; - finally - free; - end; -end; - -end. - - \ No newline at end of file diff --git a/BDK32/Samples/SharedRPCBroker/BrokerEx/BrokerExample.dof b/BDK32/Samples/SharedRPCBroker/BrokerEx/BrokerExample.dof deleted file mode 100644 index 059fd59..0000000 --- a/BDK32/Samples/SharedRPCBroker/BrokerEx/BrokerExample.dof +++ /dev/null @@ -1,82 +0,0 @@ -[Compiler] -A=1 -B=0 -C=1 -D=1 -E=0 -F=0 -G=1 -H=1 -I=1 -J=1 -K=0 -L=1 -M=0 -N=1 -O=1 -P=1 -Q=0 -R=0 -S=0 -T=0 -U=0 -V=1 -W=0 -X=1 -Y=1 -Z=1 -ShowHints=1 -ShowWarnings=1 -UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; -[Linker] -MapFile=0 -OutputObjs=0 -ConsoleApp=1 -DebugInfo=0 -RemoteSymbols=0 -MinStackSize=16384 -MaxStackSize=1048576 -ImageBase=4194304 -ExeDescription= -[Directories] -OutputDir= -UnitOutputDir= -PackageDLLOutputDir= -PackageDCPOutputDir= -SearchPath= -Packages= -Conditionals= -DebugSourceDirs= -UsePackages=0 -[Parameters] -RunParams= -HostApplication= -[Language] -ActiveLang= -ProjectLang=$00000409 -RootDir= -[Version Info] -IncludeVerInfo=1 -AutoIncBuild=1 -MajorVer=1 -MinorVer=1 -Release=31 -Build=8 -Debug=0 -PreRelease=0 -Special=0 -Private=0 -DLL=0 -Locale=1033 -CodePage=1252 -[Version Info Keys] -CompanyName= -FileDescription=Example Program using RPCBroker and different types of calls -FileVersion=1.1.31.8 -InternalName=Broker Example -LegalCopyright=(c) 1997-2002 -LegalTrademarks= -OriginalFilename= -ProductName=RPCBroker BrokerExample -ProductVersion=1.1.31.0 -Comments= diff --git a/BDK32/Samples/SharedRPCBroker/BrokerEx/BrokerExample.dpr b/BDK32/Samples/SharedRPCBroker/BrokerEx/BrokerExample.dpr deleted file mode 100644 index 8e7d758..0000000 --- a/BDK32/Samples/SharedRPCBroker/BrokerEx/BrokerExample.dpr +++ /dev/null @@ -1,19 +0,0 @@ -program BrokerExample; - -uses - Forms, - fBrokerExample in 'fBrokerExample.pas' {frmBrokerExample}, - SplVista, - fSgnonDlg in '..\..\Source\fSgnonDlg.pas' {frmSignonDialog}; - -// include to display Vista splash - -{$R *.RES} - -begin - Application.CreateForm(TfrmBrokerExample, frmBrokerExample); - Application.CreateForm(TfrmSignonDialog, frmSignonDialog); - SplashOpen; // display splash screen - SplashClose(3000); // min splash time 3 seconds, then close - Application.Run; -end. diff --git a/BDK32/Samples/SharedRPCBroker/BrokerEx/BrokerExample.exe b/BDK32/Samples/SharedRPCBroker/BrokerEx/BrokerExample.exe deleted file mode 100644 index e3d6053..0000000 Binary files a/BDK32/Samples/SharedRPCBroker/BrokerEx/BrokerExample.exe and /dev/null differ diff --git a/BDK32/Samples/SharedRPCBroker/BrokerEx/BrokerExample.res b/BDK32/Samples/SharedRPCBroker/BrokerEx/BrokerExample.res deleted file mode 100644 index 8eefd65..0000000 Binary files a/BDK32/Samples/SharedRPCBroker/BrokerEx/BrokerExample.res and /dev/null differ diff --git a/BDK32/Samples/SharedRPCBroker/BrokerEx/BrokerExampleAboutFrm.PAS b/BDK32/Samples/SharedRPCBroker/BrokerEx/BrokerExampleAboutFrm.PAS deleted file mode 100644 index aec8f0e..0000000 --- a/BDK32/Samples/SharedRPCBroker/BrokerEx/BrokerExampleAboutFrm.PAS +++ /dev/null @@ -1,42 +0,0 @@ -{************************************************** -RPC Broker Example About form ver. 1.1 9/2/97 - Infrastructure Development Team - San Francisco IRM Field Office, Dept. of Veterans Affairs -**************************************************} -unit BrokerExampleAboutFrm; - -interface - -uses WinTypes, WinProcs, Classes, Graphics, Forms, Controls, StdCtrls, - Buttons, ExtCtrls; - -type - TAboutBox = class(TForm) - Panel1: TPanel; - OKButton: TBitBtn; - ProgramIcon: TImage; - ProductName: TLabel; - Version: TLabel; - Copyright: TLabel; - Comments: TLabel; - procedure OKButtonClick(Sender: TObject); - private - { Private declarations } - public - { Public declarations } - end; - -var - AboutBox: TAboutBox; - -implementation - -{$R *.DFM} - -procedure TAboutBox.OKButtonClick(Sender: TObject); -begin - Close; -end; - -end. - diff --git a/BDK32/Samples/SharedRPCBroker/BrokerEx/BrokerExampleAboutFrm.dfm b/BDK32/Samples/SharedRPCBroker/BrokerEx/BrokerExampleAboutFrm.dfm deleted file mode 100644 index a430a11..0000000 --- a/BDK32/Samples/SharedRPCBroker/BrokerEx/BrokerExampleAboutFrm.dfm +++ /dev/null @@ -1,136 +0,0 @@ -object AboutBox: TAboutBox - Left = 315 - Top = 182 - ActiveControl = OKButton - BorderIcons = [biSystemMenu, biMinimize] - BorderStyle = bsDialog - Caption = 'About RPC Broker Example' - ClientHeight = 213 - ClientWidth = 305 - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clBtnText - Font.Height = -13 - Font.Name = 'System' - Font.Style = [] - OldCreateOrder = True - Position = poScreenCenter - PixelsPerInch = 96 - TextHeight = 16 - object Panel1: TPanel - Left = 8 - Top = 8 - Width = 289 - Height = 161 - BevelInner = bvRaised - BevelOuter = bvLowered - TabOrder = 0 - object ProgramIcon: TImage - Left = 8 - Top = 8 - Width = 65 - Height = 57 - Picture.Data = { - 07544269746D617076020000424D760200000000000076000000280000002000 - 0000200000000100040000000000000200000000000000000000100000001000 - 000000000000000080000080000000808000800000008000800080800000C0C0 - C000808080000000FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFF - FF00000000000000000000000000000000000EE8787878EEEEEEE03F30878EEE - EEE00EE8787878EEEEEEE03F30878EEEEEE00EE8787878EEEEEEE03F30878EEE - EEE00EE8787878EEEEEEE03F30878EEEEEE00887787877788888803F3088787E - EEE00788787878878887803F3088887EEEE00788887888878887803F3088887E - EEE00877888887788888703F308887EEEEE00888777778888888037883088888 - 8EE007777777777777703787883087777EE00888888888888803787FF8830888 - 888008888888888880378777778830888880077777777788037873F3F3F87808 - 88E00888888888803787FFFFFFFF8830EEE00887777778800001111111111100 - EEE00888888888888899B999B99999EEEEE00888888888888899B9B99BB9B9EE - EEE0088888888888899BB9BB99BB99EEEEE0078888888888899B999B999999EE - EEE0087788888778899B9B9BB9BB99EEEEE00888778778888E9B9B9BB9999EEE - EEE0088888788888EE9B99B9BB9BEEEEEEE00EE8888888EEEEE999B9999EEEEE - EEE00EEEE888EEEEEEEE99BB999EEEEEEEE00EEEEE8EEEEEEEEEE999B9EEEEEE - EEE00EEEEE8EEEEEEEEEEEE999EEEEEEEEE00EEEEE8EEEEEEEEEEEEE99EEEEEE - EEE00EEEEE8EEEEEEEEEEEEE9EEEEEEEEEE00EEEEE8EEEEEEEEEEEEEEEEEEEEE - EEE00EEEEEEEEEEEEEEEEEEEEEEEEEEEEEE00000000000000000000000000000 - 0000} - Stretch = True - IsControl = True - end - object ProductName: TLabel - Left = 88 - Top = 16 - Width = 118 - Height = 13 - Caption = 'RPC Broker Example' - Font.Charset = DEFAULT_CHARSET - Font.Color = clBtnText - Font.Height = -12 - Font.Name = 'MS Sans Serif' - Font.Style = [fsBold] - ParentFont = False - IsControl = True - end - object Version: TLabel - Left = 88 - Top = 40 - Width = 69 - Height = 13 - Caption = 'Version: 1.1' - Font.Charset = DEFAULT_CHARSET - Font.Color = clBtnText - Font.Height = -12 - Font.Name = 'MS Sans Serif' - Font.Style = [fsBold] - ParentFont = False - IsControl = True - end - object Copyright: TLabel - Left = 8 - Top = 80 - Width = 238 - Height = 13 - Caption = 'Copyright: Department Of Veterans Affairs' - Font.Charset = DEFAULT_CHARSET - Font.Color = clBtnText - Font.Height = -12 - Font.Name = 'MS Sans Serif' - Font.Style = [fsBold] - ParentFont = False - IsControl = True - end - object Comments: TLabel - Left = 4 - Top = 112 - Width = 280 - Height = 39 - Caption = - 'Your feedback is greatly appreciated. Please direct your commen' + - 'ts to: G.RPC_BROKER_COMMENTS@FORUM.VA.GOV' - Font.Charset = DEFAULT_CHARSET - Font.Color = clBtnText - Font.Height = -12 - Font.Name = 'MS Sans Serif' - Font.Style = [fsBold] - ParentFont = False - WordWrap = True - IsControl = True - end - end - object OKButton: TBitBtn - Left = 111 - Top = 178 - Width = 77 - Height = 27 - Font.Charset = DEFAULT_CHARSET - Font.Color = clBtnText - Font.Height = -12 - Font.Name = 'MS Sans Serif' - Font.Style = [fsBold] - ParentFont = False - TabOrder = 1 - OnClick = OKButtonClick - Kind = bkOK - Margin = 2 - Spacing = -1 - IsControl = True - end -end diff --git a/BDK32/Samples/SharedRPCBroker/BrokerEx/fBrokerExample.dfm b/BDK32/Samples/SharedRPCBroker/BrokerEx/fBrokerExample.dfm deleted file mode 100644 index 6e81465..0000000 --- a/BDK32/Samples/SharedRPCBroker/BrokerEx/fBrokerExample.dfm +++ /dev/null @@ -1,568 +0,0 @@ -object frmBrokerExample: TfrmBrokerExample - Left = 203 - Top = 106 - BorderStyle = bsSingle - Caption = 'RPCBroker Example (patch xwb*1.1*40 SharedRPCBroker)' - ClientHeight = 386 - ClientWidth = 473 - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clBtnText - Font.Height = -13 - Font.Name = 'System' - Font.Style = [] - Menu = MainMenu1 - OldCreateOrder = True - Position = poScreenCenter - OnCreate = FormCreate - PixelsPerInch = 96 - TextHeight = 16 - object GroupBox2: TGroupBox - Left = 8 - Top = 0 - Width = 457 - Height = 73 - Caption = 'VistA Server' - TabOrder = 0 - object Label2: TLabel - Left = 6 - Top = 51 - Width = 67 - Height = 16 - AutoSize = False - Caption = 'Status:' - end - object Label3: TLabel - Left = 82 - Top = 51 - Width = 88 - Height = 16 - Caption = 'Disconnected' - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clRed - Font.Height = -13 - Font.Name = 'System' - Font.Style = [] - ParentColor = False - ParentFont = False - end - object btnConnect: TButton - Left = 354 - Top = 12 - Width = 91 - Height = 25 - Caption = '&Connect' - Default = True - TabOrder = 2 - OnClick = btnConnectClick - end - object edtPort: TEdit - Left = 192 - Top = 24 - Width = 49 - Height = 24 - Hint = 'Listener port number' - ParentShowHint = False - ShowHint = True - TabOrder = 1 - Text = '9200' - OnChange = edtServerChange - end - object edtServer: TEdit - Left = 8 - Top = 24 - Width = 177 - Height = 24 - Hint = 'Name of server or IP address' - ParentShowHint = False - ShowHint = True - TabOrder = 0 - Text = 'BROKERSERVER' - OnChange = edtServerChange - end - object BitBtn1: TBitBtn - Left = 354 - Top = 44 - Width = 91 - Height = 25 - TabOrder = 3 - Kind = bkClose - end - object btnGetServerInfo: TBitBtn - Left = 248 - Top = 24 - Width = 73 - Height = 25 - Hint = 'GetServerInfo' - Caption = 'Server' - ParentShowHint = False - ShowHint = True - TabOrder = 4 - OnClick = btnGetServerInfoClick - Glyph.Data = { - 76010000424D7601000000000000760000002800000020000000100000000100 - 04000000000000010000120B0000120B00001000000000000000000000000000 - 800000800000008080008000000080008000808000007F7F7F00BFBFBF000000 - FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00333000000000 - 00333FF777777777773F0000FFFFFFFFFF0377773F3F3F3F3F7308880F0F0F0F - 0FF07F33737373737337088880FFFFFFFFF07F3337FFFFFFFFF7088880000000 - 00037F3337777777777308888033330F03337F3337F3FF7F7FFF088880300000 - 00007F3337F7777777770FFFF030FFFFFFF07F3FF7F7F3FFFFF708008030F000 - 00F07F7737F7F77777F70FFFF030F0AAE0F07F3FF7F7F7F337F708008030F0DA - D0F07F7737F7F7FFF7F70FFFF030F00000F07F33F7F7F77777370FF9F030FFFF - FFF07F3737F7FFFFFFF70FFFF030000000007FFFF7F777777777000000333333 - 3333777777333333333333333333333333333333333333333333} - NumGlyphs = 2 - end - end - object PageControl1: TPageControl - Left = 8 - Top = 76 - Width = 457 - Height = 305 - ActivePage = TabSheet1 - TabOrder = 1 - object TabSheet1: TTabSheet - Caption = 'Echo string' - object lblSend: TLabel - Left = 8 - Top = 24 - Width = 96 - Height = 16 - Caption = 'Original string:' - end - object lblReturn: TLabel - Left = 8 - Top = 144 - Width = 93 - Height = 16 - Caption = 'Echoed string:' - end - object edtStrOrig: TEdit - Left = 8 - Top = 40 - Width = 225 - Height = 24 - TabOrder = 0 - Text = 'Hello World!' - end - object edtStrRtrn: TEdit - Left = 8 - Top = 160 - Width = 225 - Height = 24 - ReadOnly = True - TabOrder = 1 - end - object btnEchoString: TButton - Left = 8 - Top = 88 - Width = 225 - Height = 25 - Hint = 'XWB EXAMPLE ECHO STRING' - Caption = 'Execute RPC' - Default = True - ParentShowHint = False - ShowHint = True - TabOrder = 2 - OnClick = btnEchoStringClick - end - object Memo1: TMemo - Left = 240 - Top = 8 - Width = 201 - Height = 257 - TabStop = False - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -13 - Font.Name = 'MS Sans Serif' - Font.Style = [] - Lines.Strings = ( - 'Uses TRPCBroker.Call method ' - 'to return a single string.' - '' - 'Original string passed in as ' - 'PType literal.' - '' - 'RPC: XWB EXAMPLE ECHO ' - 'STRING.' - '' - 'Return Value Type: SINGLE ' - 'VALUE.') - ParentColor = True - ParentFont = False - ReadOnly = True - TabOrder = 3 - end - end - object TabSheet2: TTabSheet - Caption = 'Pass by reference' - object Label1: TLabel - Left = 8 - Top = 24 - Width = 70 - Height = 16 - Caption = 'Reference:' - end - object Label4: TLabel - Left = 8 - Top = 144 - Width = 40 - Height = 16 - Caption = 'Value:' - end - object edtReference: TEdit - Left = 8 - Top = 40 - Width = 225 - Height = 24 - TabOrder = 0 - Text = '$HOROLOG' - end - object edtValue: TEdit - Left = 8 - Top = 160 - Width = 225 - Height = 24 - ReadOnly = True - TabOrder = 1 - end - object btnPassByRef: TButton - Left = 8 - Top = 88 - Width = 225 - Height = 25 - Hint = 'XWB GET VARIABLE VALUE' - Caption = 'Execute RPC' - Default = True - ParentShowHint = False - ShowHint = True - TabOrder = 2 - OnClick = btnPassByRefClick - end - object Memo2: TMemo - Left = 240 - Top = 8 - Width = 201 - Height = 257 - TabStop = False - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -13 - Font.Name = 'MS Sans Serif' - Font.Style = [] - Lines.Strings = ( - 'Uses TRPCBroker.strCall ' - 'method to return a single string.' - '' - 'Parameter passed in as PType ' - 'reference.' - '' - 'RPC: XWB GET VARIABLE ' - 'VALUE.' - '' - 'Return Value Type: SINGLE ' - 'VALUE.') - ParentColor = True - ParentFont = False - ReadOnly = True - TabOrder = 3 - end - end - object TabSheet3: TTabSheet - Caption = 'Get list' - object Label5: TLabel - Left = 8 - Top = 120 - Width = 87 - Height = 16 - Caption = 'Returned list:' - end - object lstData: TListBox - Left = 8 - Top = 136 - Width = 225 - Height = 129 - ItemHeight = 16 - TabOrder = 0 - end - object btnGetList: TButton - Left = 8 - Top = 88 - Width = 225 - Height = 25 - Hint = 'XWB EXAMPLE GET LIST' - Caption = 'Execute RPC' - Default = True - ParentShowHint = False - ShowHint = True - TabOrder = 1 - OnClick = btnGetListClick - end - object RadioButton1: TRadioButton - Left = 16 - Top = 16 - Width = 137 - Height = 17 - Caption = 'Number of lines' - Checked = True - TabOrder = 2 - TabStop = True - end - object RadioButton2: TRadioButton - Left = 16 - Top = 48 - Width = 137 - Height = 17 - Caption = 'Kilobytes of data' - TabOrder = 3 - end - object spnLines: TSpinEdit - Left = 160 - Top = 16 - Width = 65 - Height = 26 - MaxValue = 0 - MinValue = 0 - TabOrder = 4 - Value = 50 - end - object spnKbytes: TSpinEdit - Left = 160 - Top = 48 - Width = 65 - Height = 26 - MaxValue = 0 - MinValue = 0 - TabOrder = 5 - Value = 32 - end - object Memo3: TMemo - Left = 240 - Top = 8 - Width = 201 - Height = 257 - TabStop = False - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -13 - Font.Name = 'MS Sans Serif' - Font.Style = [] - Lines.Strings = ( - 'Uses TRPCBroker.Call method ' - 'to return several strings.' - '' - 'Two parameters passed in as ' - 'PType literal.' - '' - 'RPC: XWB EXAMPLE GET LIST.' - '' - 'Return Value Type: GLOBAL ' - 'ARRAY.' - '' - 'WORD WRAP ON field is True ' - 'to break appart call result into ' - 'separate Results strings instead ' - 'of one long Results[0] string.') - ParentColor = True - ParentFont = False - ReadOnly = True - TabOrder = 6 - end - end - object TabSheet4: TTabSheet - Caption = 'WP Text' - object lblList: TLabel - Left = 8 - Top = 56 - Width = 177 - Height = 17 - AutoSize = False - Caption = 'REMOTE PROCEDURE file description:' - end - object btnWPText: TButton - Left = 8 - Top = 16 - Width = 225 - Height = 25 - Hint = 'XWB EXAMPLE WPTEXT' - Caption = 'Execute RPC' - Default = True - ParentShowHint = False - ShowHint = True - TabOrder = 0 - OnClick = btnWPTextClick - end - object mmoText: TMemo - Left = 8 - Top = 80 - Width = 225 - Height = 185 - ReadOnly = True - ScrollBars = ssVertical - TabOrder = 1 - end - object Memo4: TMemo - Left = 240 - Top = 8 - Width = 201 - Height = 257 - TabStop = False - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -13 - Font.Name = 'MS Sans Serif' - Font.Style = [] - Lines.Strings = ( - 'Uses TRPCBroker.lstCall ' - 'method to return several strings.' - '' - 'No parameters are used in this ' - 'call.' - '' - 'RPC: XWB EXAMPLE WPTEXT.' - '' - 'Return Value Type: WORD ' - 'PROCESSING.' - '' - 'WORD WRAP ON field is False ' - 'to allow memo box to control ' - 'word wrapping as necessary.') - ParentColor = True - ParentFont = False - ReadOnly = True - TabOrder = 2 - end - end - object TabSheet5: TTabSheet - Caption = 'Sort numbers' - object Label6: TLabel - Left = 8 - Top = 120 - Width = 87 - Height = 16 - Caption = 'Returned list:' - end - object Label7: TLabel - Left = 8 - Top = 8 - Width = 72 - Height = 16 - Caption = 'How many:' - end - object lblStatus: TLabel - Left = 8 - Top = 56 - Width = 57 - Height = 16 - Caption = 'lblStatus' - Visible = False - end - object lstSorted: TListBox - Left = 8 - Top = 136 - Width = 225 - Height = 129 - ItemHeight = 16 - TabOrder = 0 - end - object btnSortNum: TButton - Left = 8 - Top = 88 - Width = 225 - Height = 25 - Hint = 'XWB EXAMPLE SORT NUMBERS' - Caption = 'Execute RPC' - Default = True - ParentShowHint = False - ShowHint = True - TabOrder = 1 - OnClick = btnSortNumClick - end - object spnNumbers: TSpinEdit - Left = 8 - Top = 24 - Width = 81 - Height = 26 - MaxValue = 10000 - MinValue = 0 - TabOrder = 2 - Value = 500 - end - object rgrDirection: TRadioGroup - Left = 104 - Top = 8 - Width = 121 - Height = 65 - Caption = 'Sort direction' - ItemIndex = 0 - Items.Strings = ( - 'low -> high' - 'high -> low') - TabOrder = 3 - end - object Memo5: TMemo - Left = 240 - Top = 8 - Width = 201 - Height = 257 - TabStop = False - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -13 - Font.Name = 'MS Sans Serif' - Font.Style = [] - Lines.Strings = ( - 'Uses TRPCBroker.Call method ' - 'to return several strings.' - '' - 'First parameter passed in as ' - 'literal, second as list. See how ' - 'Mult is used.' - '' - 'RPC: XWB EXAMPLE SORT ' - 'NUMBERS.' - '' - 'Return Value Type: ARRAY.' - '' - 'This call can take a while to ' - 'complete. RPCTimeLimit ' - 'property is adjusted.') - ParentColor = True - ParentFont = False - ReadOnly = True - TabOrder = 4 - end - end - end - object MainMenu1: TMainMenu - Left = 160 - Top = 320 - object Help1: TMenuItem - Caption = '&Help' - object AboutExample: TMenuItem - Caption = '&About RPC Broker Example...' - OnClick = AboutExampleClick - end - end - end - object Timer1: TTimer - OnTimer = Timer1Timer - Left = 16 - Top = 320 - end - object RPCBroker1: TSharedRPCBroker - ClearParameters = True - ClearResults = True - ListenerPort = 0 - RpcVersion = '0' - LogIn.Mode = lmAVCodes - LogIn.PromptDivision = False - AllowShared = True - RPCTimeLimit = 30 - Left = 84 - Top = 327 - end -end diff --git a/BDK32/Samples/SharedRPCBroker/BrokerEx/fBrokerExample.pas b/BDK32/Samples/SharedRPCBroker/BrokerEx/fBrokerExample.pas deleted file mode 100644 index b56e80b..0000000 --- a/BDK32/Samples/SharedRPCBroker/BrokerEx/fBrokerExample.pas +++ /dev/null @@ -1,291 +0,0 @@ -{************************************************** -RPC Broker Example form ver. 1.1 9/3/97 - Broker Development Team - San Francisco IRM Field Office, Dept. of Veterans Affairs - -Disclaimer: - This example does not attempt to teach general Delphi and M programming. - We intentionally removed any safeguards from the code that prevents - passing values that are too small or too large. Therefore, the important - code remains uncluttered and the programmer is free to experiment and - push the program beyond its limits. - -Purpose: - This sample application is an example of how to program client/server - applications in Delphi and M using the RPC Broker. The demonstrated features - include: - - Connecting to an M server - - Creating an application context - - Using the GetServerInfo function - - Displaying the VistA splash screen - - Setting the TRPCBroker Param property for each Param PType (literal, - reference, list) - - Calling RPCs with the Call method - - Calling RPCs with the lstCall and strCall methods - - We encourage you to study the Delphi and M source code to see how the - Broker is used to accomplish these tasks. Try changing some of the - RPCBroker1 component properties to see what happens. Also, try other - values in the fields of the remote procedure records in the - REMOTE PROCEDURE file. - -Warning: "Get list" and "Sort numbers" tabs can potentially take excessively -large data samples which can either crash server process or cause the -connection timeout. Final note, memory allocation errors are not recorded -in the Kernel error trap. They are recorded in the operating system error -trap. - -Context option for this application: - XWB BROKER EXAMPLE - -Remote procedures used: - XWB EXAMPLE ECHO STRING - XWB EXAMPLE GET LIST - XWB EXAMPLE SORT NUMBERS - XWB EXAMPLE WPTEXT - XWB GET VARIABLE VALUE - -Server M routine: - XWBEXMPL -**************************************************} -unit fBrokerExample; - -interface - -uses - SysUtils,Forms, StdCtrls,Graphics, Dialogs, WinTypes, - Controls, Classes, ExtCtrls, TRPCB, XWBut1, MFunStr, Menus, WinProcs, - RpcConf1, Spin, ComCtrls, BrokerExampleAboutFrm, Buttons, - ActiveX, SharedRPCBroker; - -type - TfrmBrokerExample = class(TForm) - GroupBox2: TGroupBox; - Label2: TLabel; - Label3: TLabel; - MainMenu1: TMainMenu; - Help1: TMenuItem; - AboutExample: TMenuItem; - btnConnect: TButton; - edtPort: TEdit; - edtServer: TEdit; - PageControl1: TPageControl; - TabSheet1: TTabSheet; - TabSheet2: TTabSheet; - TabSheet3: TTabSheet; - TabSheet4: TTabSheet; - TabSheet5: TTabSheet; - lblSend: TLabel; - edtStrOrig: TEdit; - lblReturn: TLabel; - edtStrRtrn: TEdit; - btnEchoString: TButton; - lblList: TLabel; - Label1: TLabel; - edtReference: TEdit; - Label4: TLabel; - edtValue: TEdit; - btnPassByRef: TButton; - lstData: TListBox; - Label5: TLabel; - btnGetList: TButton; - btnWPText: TButton; - Label6: TLabel; - lstSorted: TListBox; - btnSortNum: TButton; - spnNumbers: TSpinEdit; - Label7: TLabel; - rgrDirection: TRadioGroup; - RadioButton1: TRadioButton; - RadioButton2: TRadioButton; - spnLines: TSpinEdit; - spnKbytes: TSpinEdit; - Timer1: TTimer; - mmoText: TMemo; - lblStatus: TLabel; - BitBtn1: TBitBtn; - btnGetServerInfo: TBitBtn; - Memo1: TMemo; - Memo2: TMemo; - Memo3: TMemo; - Memo4: TMemo; - Memo5: TMemo; - RPCBroker1: TSharedRPCBroker; - procedure AboutExampleClick(Sender: TObject); - procedure btnEchoStringClick(Sender: TObject); - procedure btnConnectClick(Sender: TObject); - procedure btnPassByRefClick(Sender: TObject); - procedure btnGetListClick(Sender: TObject); - procedure btnSortNumClick(Sender: TObject); - procedure btnWPTextClick(Sender: TObject); - procedure Timer1Timer(Sender: TObject); - procedure btnGetServerInfoClick(Sender: TObject); - procedure edtServerChange(Sender: TObject); - procedure FormCreate(Sender: TObject); -end; - - - -var - frmBrokerExample: TfrmBrokerExample; - - -implementation - -{$R *.DFM} - -procedure TfrmBrokerExample.btnEchoStringClick(Sender: TObject); -begin - RPCBroker1.RemoteProcedure := 'XWB EXAMPLE ECHO STRING'; - RPCBroker1.Param[0].Value := edtStrOrig.Text; - RPCBroker1.Param[0].PType := literal; - RPCBroker1.Call; //execute RPC - edtStrRtrn.Text := RPCBroker1.Results[0]; //for single value use Results[0] -end; - - - -procedure TfrmBrokerExample.btnPassByRefClick(Sender: TObject); -begin - RPCBroker1.RemoteProcedure := 'XWB GET VARIABLE VALUE'; - RPCBroker1.Param[0].Value := edtReference.Text; - RPCBroker1.Param[0].PType := reference; - edtValue.Text := RPCBroker1.strCall; //execute RPC and show result in one call -end; - - - -procedure TfrmBrokerExample.btnGetListClick(Sender: TObject); -begin - RPCBroker1.RemoteProcedure := 'XWB EXAMPLE GET LIST'; - if RadioButton1.Checked then begin - RPCBroker1.Param[0].Value := 'LINES'; - RPCBroker1.Param[0].PType := literal; - RPCBroker1.Param[1].Value := IntToStr(spnLines.Value); - RPCBroker1.Param[1].PType := literal; - end - else begin - RPCBroker1.Param[0].Value := 'KILOBYTES'; - RPCBroker1.Param[0].PType := literal; - RPCBroker1.Param[1].Value := IntToStr(spnKbytes.Value); - RPCBroker1.Param[1].PType := literal - end; - RPCBroker1.Call; //execute RPC - lstData.Items := RPCBroker1.Results; //show results of the call -end; - - - -procedure TfrmBrokerExample.btnWPTextClick(Sender: TObject); -begin - RPCBroker1.RemoteProcedure := 'XWB EXAMPLE WPTEXT'; - RPCBroker1.lstCall(mmoText.Lines); //execute RPC and show results in one call -end; - - - -procedure TfrmBrokerExample.btnSortNumClick(Sender: TObject); -var - I, SaveRPCTimeLimit: integer; -begin - lblStatus.Visible := True; //turn on status label - lblStatus.Caption := 'building'; //tell user what's happenning - Application.ProcessMessages; //give Windows chance to paint - with RPCBroker1 do begin - RemoteProcedure := 'XWB EXAMPLE SORT NUMBERS'; - if rgrDirection.ItemIndex = 0 then Param[0].Value := 'LO' - else Param[0].Value := 'HI'; - Param[0].PType := literal; - with Param[1] do begin - PType := list; //tells Broker to pass Mult - for I := 0 to spnNumbers.Value - 1 do //build Mult one by one - Mult[IntToStr(Random(10000)+1)] := IntToStr(I); //subscript and value are strings! - end; - lblStatus.Caption := 'RPC running'; - Application.ProcessMessages; //give Windows chance to paint - SaveRPCTimeLimit := RPCTimeLimit; - RPCTimeLimit := spnNumbers.Value div 10; //adjust in case a lot of numbers - Call; //execute RPC - lstSorted.Items := Results; //show results of the call - RPCTimeLimit := SaveRPCTimeLimit; //restore original value - end; - lblStatus.Visible := False; //turn off status label -end; - - - -procedure TfrmBrokerExample.btnConnectClick(Sender: TObject); -begin - if btnConnect.Caption = '&Connect' then - begin //connect - RPCBroker1.ClearParameters := True; //try False, see what happens - try - RPCBroker1.Connected := True; - //establish connection - if not RPCBroker1.CreateContext('XWB BROKER EXAMPLE') then - ShowMessage('Context could not be created!'); - except - on e: Exception do - ShowMessage('Error: ' + e.Message); - end; - end - else //disconnect - RPCBroker1.Connected := False; -end; - - - -procedure TfrmBrokerExample.btnGetServerInfoClick(Sender: TObject); -var - strServer, strPort: string; -begin - if GetServerInfo(strServer, strPort)<> mrCancel then - begin {getsvrinfo} - edtServer.Text := strServer; //use chosen server - edtPort.Text := strPort; //use chosen port - end; -end; - - - -procedure TfrmBrokerExample.edtServerChange(Sender: TObject); -begin - RPCBroker1.Server := edtServer.Text; //use specified server name/addr - RPCBroker1.ListenerPort := StrToInt(edtPort.Text); //use specified port -end; - - - -procedure TfrmBrokerExample.Timer1Timer(Sender: TObject); -begin - if RPCBroker1.Connected then begin - btnConnect.Caption := '&Disconnect'; - btnConnect.Default := False; - Label3.Caption := 'Connected'; - Label3.Font.Color := clLime; // clGreen; // went to lime for higher contrast at some of the High contrast desktops - end - else begin - btnConnect.Caption := '&Connect'; - btnConnect.Default := True; - Label3.Caption := 'Disconnected'; - Label3.Font.Color := clRed; // Stayed with Red, generated a high contrast across all of the various combinations - // Attempted to use clHighlight, but it did not show up like a highlight. - end; -end; - - - -procedure TfrmBrokerExample.AboutExampleClick(Sender: TObject); -begin - AboutBox.Show; -end; - - -procedure TfrmBrokerExample.FormCreate(Sender: TObject); -begin - CoInitialize(nil); -end; - -end. - - diff --git a/BDK32/Samples/SharedRPCBroker/BrokerEx/frmVistAAbout.dfm b/BDK32/Samples/SharedRPCBroker/BrokerEx/frmVistAAbout.dfm deleted file mode 100644 index 9966ef6..0000000 --- a/BDK32/Samples/SharedRPCBroker/BrokerEx/frmVistAAbout.dfm +++ /dev/null @@ -1,1201 +0,0 @@ -object frmVistAAbout: TfrmVistAAbout - Left = 279 - Top = 106 - BorderStyle = bsDialog - Caption = 'About' - ClientHeight = 236 - ClientWidth = 353 - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'MS Sans Serif' - Font.Style = [] - OldCreateOrder = True - Position = poScreenCenter - OnCreate = FormCreate - PixelsPerInch = 96 - TextHeight = 13 - object Panel1: TPanel - Left = 8 - Top = 8 - Width = 337 - Height = 185 - BevelInner = bvRaised - BevelOuter = bvLowered - ParentColor = True - TabOrder = 0 - object VistaLogo: TImage - Left = 8 - Top = 8 - Width = 153 - Height = 73 - Center = True - Picture.Data = { - 07544269746D61702A880000424D2A8800000000000036000000280000009600 - 00004D0000000100180000000000F48700000000000000000000000000000000 - 0000C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C00000C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C00000C0C0C0C0C0C0DDDDDDFFFFFFDDDDDDCCCCCCB2B2B2CC - CCCCF1F1F1DDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1DDDDDDCCCCCCCCCCCCC0C0C0C0C0C0DDDDDDF1F1F1F1F1F1DDDDDDCCCC - CCFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1FF - FFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFDDDDDD - DDDDDDDDDDDDF1F1F1FFFFFFFFFFFFFFFFFFDDDDDDF1F1F1F1F1F1F1F1F1FFFF - FFFFFFFFFFFFFFDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1CCCCCCF1F1F1F1F1F1F1F1F1 - F1F1F1C0C0C0FFFFFFC0C0C0DDDDDDDDDDDDF1F1F1F1F1F1FFFFFFFFFFFFFFFF - FFDDDDDDDDDDDDCCCCCCF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1 - F1F1F1F1F1F1F1F1F1F1F1DDDDDDCCCCCCC0C0C0F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDDDDDF1F1F1DDDDDDF1F1 - F1FFFFFFF1F1F1DDDDDD999999CCCCCCF1F1F1CCCCCCCCCCCCF1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1DDDDDDCCCCCCF1F1F1F1F1F1DDDDDDCCCCCCB2B2B2 - CCCCCCC0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0F1F1F1FFFFFFF1F1F1DDDDDD - FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1CCCCCCB2B2B2CCCCCCF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1 - F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1DDDDDDDDDDDDDDDDDDDDDDDDF1F1F1F1F1F1F1F1F1DDDDDDCCCCCCF1F1F1F1 - F1F1FFFFFFFFFFFFDDDDDDC0C0C0F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1FFFFFFF1F1 - F1F1F1F1DDDDDDCCCCCCF1F1F1DDDDDDFFFFFFF1F1F1F1F1F1FFFFFFFFFFFFFF - FFFFFFFFFFF1F1F1DDDDDDCCCCCCF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1DDDDDDC0C0C0DDDDDDF1F1F1F1F1F1FFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1FF - FFFFFFFFFFF1F1F1DDDDDDC0C0C0CCCCCCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDDDDDDDCCCCCCFFFFFFDDDDDDB2B2B2C0C0 - C0FFFFFFFFFFFFC0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0FFFFFFFFFFFFF1F1 - F1F1F1F1CCCCCCFFFFFFCCCCCCF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1CCCCCCFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1FFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFF1F1F1DDDDDDF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1 - F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1DDDDDDDDDDDDDDDDDDDDDDDDCCCCCCC0C0C0CCCCCCC0C0C0DDDDDD - F1F1F1FFFFFFFFFFFFFFFFFFB2B2B2C0C0C0F1F1F1F1F1F1F1F1F1F1F1F1FFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1FFFFFFFFFFFFF1 - F1F1F1F1F1F1F1F1DDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFF - FFFFFFFFFFFFF1F1F1DDDDDDC0C0C0DDDDDDF1F1F1F1F1F1F1F1F1FFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1CCCCCCCCCCCCF1F1F1F1F1F1FF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFF1F1F1F1F1F1DDDDDDC0C0C0FFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFC0C0C0F1 - F1F1F1F1F1FFFFFFFFFFFFC0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0FFFFFFFF - FFFFF1F1F1F1F1F1DDDDDDFFFFFFC0C0C0FFFFFFF1F1F1CCCCCCF1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDDDDDDDDDDDDDC0C0C0CCCCCCCCCCCCCCCC - CCF1F1F1F1F1F1FFFFFFFFFFFFF1F1F1CCCCCCDDDDDDF1F1F1F1F1F1F1F1F1F1 - F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFF1F1F1CCCCCCCCCCCCDDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1 - F1FFFFFFFFFFFFFFFFFFF1F1F1C0C0C0CCCCCCF1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1C0C0C0DDDDDDF1F1F1 - F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDDDDDDDC0C0C0FFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDD - C0C0C0F1F1F1FFFFFFFFFFFFFFFFFFC0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0 - F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1CCCCCCC0C0C0DDDDDDCCCCCCDDDDDDDDDD - DDCCCCCCF1F1F1F1F1F1DDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1DDDDDDF1 - F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1C0C0C0F1F1F1FFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1CCCCCCCCCCCCFFFFFFFF - FFFFF1F1F1F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1DDDDDDDDDDDDF1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1FFFFFFFFFF - FFF1F1F1F1F1F1F1F1F1DDDDDDFFFFFFFFFFFFFFFFFFDDDDDDF1F1F1F1F1F1F1 - F1F1F1F1F1FFFFFFFFFFFFFFFFFFC0C0C0DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1DDDDDDC0C0C0F1F1 - F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1FFFFFFFFFFFFFF - FFFFDDDDDDCCCCCCC0C0C0C0C0C0CCCCCCC0C0C0CCCCCCB2B2B2F1F1F1FFFFFF - FFFFFFFFFFFFFFFFFFF1F1F1DDDDDDC0C0C0CCCCCCCCCCCCCCCCCCDDDDDDC0C0 - C0CCCCCCDDDDDDFFFFFFFFFFFFFFFFFFFFFFFFC0C0C0C0C0C0C0C0C00000C0C0 - C0C0C0C0F1F1F1FFFFFFF1F1F1F1F1F1DDDDDDC0C0C0F1F1F1FFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDDDDDDDF1F1F1DDDDDDDDDDDDDDDDDD - CCCCCCF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDC0C0C0FFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFF1 - F1F1F1F1F1F1F1F1F1F1F1DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1C0C0C0C0C0C0 - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1DDDDDDDDDD - DDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FF - FFFFFFFFFFF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFDDDDDDF1F1F1F1F1F1 - FFFFFFF1F1F1F1F1F1F1F1F1FFFFFFF1F1F1DDDDDDF1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1DDDDDDCCCCCCC0C0C0F1 - F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFF - FFFFFFFFFFFFC0C0C0CCCCCCDDDDDDF1F1F1F1F1F1DDDDDDDDDDDDDDDDDDFFFF - FFFFFFFFFFFFFFFFFFFFDDDDDDDDDDDDCCCCCCF1F1F1F1F1F1F1F1F1FFFFFFFF - FFFFF1F1F1FFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFC0C0C0C0C0C0C0C0C0 - 0000C0C0C0C0C0C0F1F1F1DDDDDDF1F1F1F1F1F1C0C0C0CCCCCCFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDDDDDDDDDDDDDDDDDDDDDDDDDDD - DDDDDDDD0000FFF1F1F1FFFFFFF1F1F1F1F1F1FFFFFFF1F1F1DDDDDDDDDDDDFF - FFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFF1F1F1F1F1F1DDDDDDF1F1F1F1F1F1F1F1F1CCCCCCCCCCCCC0C0C0C0C0 - C0DDDDDDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1DD - DDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1DDDDDDF1F1F1F1F1F1DDDDDDF1F1 - F1F1F1F1DDDDDDF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1FF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1DDDDDDCCCCCCC0C0C0 - F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1FFFFFFDDDDDDDDDDDDC0C0C0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1C0C0C0C0C0C0C0C0C0FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1 - F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0C0C0C0C0 - C0C0C0C00000C0C0C0C0C0C0F1F1F1F1F1F1F1F1F1F1F1F1CCCCCCDDDDDDFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDDDDDDDDDDDDDDDDDDD - DDDDDDDDDDDDDDDD0000FFF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1DDDDDD - DDDDDDCCCCCCF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFF1F1F1CCCCCCCCCCCCF1F1F1F1F1F1F1F1F1CCCCCCCCCCCCCC - CCCCDDDDDDF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDD - F1F1F1DDDDDDDDDDDDF1F1F1DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1DDDDDDF1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1CCCCCCF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDC0C0 - C0DDDDDDFFFFFFFFFFFFF1F1F1F1F1F1DDDDDDFFFFFFF1F1F1F1F1F1F1F1F1F1 - F1F1FFFFFFFFFFFFF1F1F1DDDDDDC0C0C0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - FFFFFFF1F1F1FFFFFFFFFFFFF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1FFFF - FFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1C0 - C0C0C0C0C0C0C0C00000C0C0C0C0C0C0F1F1F1DDDDDDDDDDDDDDDDDDDDDDDDF1 - F1F1FFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDDDDDDDDDDD - C0C0C0C0C0C0C0C0C0B2B2B20000FF0000FFFFFFFFFFFFFFFFFFFFFFFFFFF1F1 - F1DDDDDDDDDDDDF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFDDDDDDDDDDDDCCCCCCDDDDDDFFFFFFFFFFFFFFFFFFF1F1F1 - F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDDDDDDDDD - DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDCCCCCCF1F1F1F1F1F1F1F1F1FFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDDDDDDDDDDDDDF1F1F1 - F1F1F1F1F1F1F1F1F1DDDDDDC0C0C0F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFF - FFF1F1F1FFFFFFFFFFFFF1F1F1DDDDDDF1F1F1F1F1F1F1F1F1DDDDDDDDDDDDC0 - C0C0C0C0C0FFFFFFFFFFFFFFFFFFFFFFFFC0C0C0DDDDDDF1F1F1F1F1F1F1F1F1 - FFFFFFF1F1F1FFFFFFFFFFFFF1F1F1F1F1F1DDDDDDF1F1F1F1F1F1F1F1F1FFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFF1F1F1F1F1F1DD - DDDDCCCCCCDDDDDDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1 - F1F1F1C0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0CCCCCCCCCCCCDDDDDDDDDDDD - FFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCCCC - CCC0C0C0DDDDDDF1F1F1F1F1F10000FF0000FF0000FF0000FFFFFFFFF1F1F1F1 - F1F1F1F1F1DDDDDDDDDDDDCCCCCCC0C0C0DDDDDDFFFFFFFFFFFFF1F1F1F1F1F1 - F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1DDDDDDDDDDDDF1F1F1F1F1F1F1F1 - F1C0C0C0F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFC0C0C0C0C0C0CC - CCCCF1F1F1DDDDDDDDDDDDCCCCCCCCCCCCCCCCCCB2B2B2F1F1F1F1F1F1F1F1F1 - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1CCCCCCCCCCCCF1F1F1F1F1F1FFFFFFFFFFFFF1 - F1F1F1F1F1F1F1F1F1F1F1FFFFFFF1F1F1DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1 - CCCCCCC0C0C0DDDDDDFFFFFFFFFFFFFFFFFFF1F1F1CCCCCCF1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFF - FFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1 - DDDDDDDDDDDDCCCCCCDDDDDDF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1 - F1F1F1F1F1F1F1C0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0F1F1F1F1F1F1FFFF - FFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFC0C0C0C0C0C0F1F1F1F1F1F1FFFFFF0000FF0000FF0000FF0000FF0000FF - F1F1F1F1F1F1F1F1F1DDDDDDDDDDDDB2B2B2FFFFFFFFFFFFFFFFFFF1F1F1DDDD - DDF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1FFFFFFF1F1F1DDDDDDF1 - F1F1F1F1F1C0C0C0F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1FFFFFFCCCCCC - DDDDDDF1F1F1FFFFFFDDDDDDCCCCCCB2B2B2DDDDDDB2B2B2C0C0C0F1F1F1F1F1 - F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1 - F1F1F1F1F1DDDDDDF1F1F1F1F1F1F1F1F1CCCCCCDDDDDDF1F1F1FFFFFFFFFFFF - FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFDDDDDDDDDDDDF1F1F1DDDDDDF1F1 - F1F1F1F1B2B2B2DDDDDDF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1FFFFFFF1F1F1F1F1F1DDDDDDF1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1 - F1F1F1F1F1F1F1F1F1F1F1C0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0FFFFFFFF - FFFFFFFFFFFFFFFFF1F1F1F1F1F1DDDDDDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - F1F1F1DDDDDDDDDDDDF1F1F1F1F1F1F1F1F1FFFFFF0000FF0000FF0000FF0000 - FF0000FF0000FFF1F1F1F1F1F1F1F1F1DDDDDDCCCCCCFFFFFFFFFFFFF1F1F1DD - DDDDC0C0C0F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFF1F1F1 - DDDDDDDDDDDDCCCCCCC0C0C0F1F1F1F1F1F1DDDDDDC0C0C0F1F1F1F1F1F1F1F1 - F1FFFFFFF1F1F1F1F1F1F1F1F1CCCCCCC0C0C0DDDDDDF1F1F1FFFFFFF1F1F1F1 - F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1 - F1F1F1F1F1F1C0C0C0C0C0C0CCCCCCF1F1F1F1F1F1CCCCCCDDDDDDFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1FFFFFFFFFFFFF1F1F1DDDDDDF1F1F1F1 - F1F1CCCCCCB2B2B2DDDDDDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1 - FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1CCCC - CCCCCCCCDDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDDD - DDDDDDDDDDCCCCCCC0C0C0F1F1F1F1F1F1F1F1F1CCCCCCDDDDDDFFFFFFFFFFFF - FFFFFFF1F1F1F1F1F1DDDDDDDDDDDDC0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0 - FFFFFFFFFFFFFFFFFFDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDF1F1F1F1F1F1F1F1 - F1DDDDDDDDDDDDDDDDDDDDDDDDF1F1F1F1F1F1F1F1F1FFFFFF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FFF1F1F1F1F1F1F1F1F1CCCCCCFFFFFFFFFFFF - FFFFFFDDDDDDC0C0C0F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1 - F1F1F1F1DDDDDDF1F1F1CCCCCCF1F1F1F1F1F1FFFFFFF1F1F1C0C0C0F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDDDDDDDF1F1F1FFFFFFF1F1F1FFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1 - F1FFFFFFFFFFFFC0C0C0DDDDDDF1F1F1F1F1F1FFFFFFF1F1F1DDDDDDF1F1F1F1 - F1F1F1F1F1FFFFFFFFFFFFF1F1F1FFFFFFF1F1F1F1F1F1FFFFFFFFFFFFDDDDDD - CCCCCCC0C0C0C0C0C0DDDDDDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1 - F1CCCCCCDDDDDDF1F1F1F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1FFFFFFFFFFFFFF - FFFFFFFFFFF1F1F1F1F1F1FFFFFFF1F1F1F1F1F1DDDDDDDDDDDDDDDDDDDDDDDD - F1F1F1B2B2B2C0C0C0CCCCCCDDDDDDFFFFFFF1F1F1F1F1F1CCCCCCCCCCCCFFFF - FFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1C0C0C0C0C0C0C0C0C00000C0C0 - C0C0C0C0FFFFFFFFFFFFFFFFFFDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDF1F1F1F1 - F1F1F1F1F1DDDDDDDDDDDDF1F1F1DDDDDDF1F1F1F1F1F1FFFFFFFFFFFF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FFF1F1F1F1F1F1F1F1F1CCCCCCFFFF - FFFFFFFFFFFFFFDDDDDDCCCCCCF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1 - F1F1F1F1F1F1F1F1DDDDDDDDDDDDC0C0C0F1F1F1F1F1F1F1F1F1DDDDDDCCCCCC - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFF1F1F1FFFFFFFFFFFFF1 - F1F1F1F1F1FFFFFFFFFFFFCCCCCCF1F1F1F1F1F1FFFFFFFFFFFFF1F1F1DDDDDD - FFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFDDDDDDC0C0C0C0C0C0DDDDDDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFDDDDDDC0C0C0F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDDDDDF1F1F1DDDDDDDDDDDDDDDD - DDDDDDDDCCCCCCC0C0C0DDDDDDFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDB2B2B2C0 - C0C0F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1C0C0C0C0C0C0C0C0C0 - 0000C0C0C0C0C0C0FFFFFFFFFFFFDDDDDDDDDDDDF1F1F1F1F1F1DDDDDDF1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1CCCCCCFFFFFFFFFFFFFFFFFFDDDD - DD0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFF1F1F1F1F1F1F1 - F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1CCCCCCF1F1F1FFFFFFFFFFFFF1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDDDDDDDF1F1F1F1F1F1FFFFFFFFFF - FFF1F1F1F1F1F1FFFFFFF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFF1F1F1FFFFFFFFFFFFFFFFFFC0C0C0F1F1F1FFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFF1F1F1F1F1F1F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFF1F1F1CCCCCCCCCCCCF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFCCCCCCF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFF1F1F1F1F1F1F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1FFFFFFDDDDDDCC - CCCCCCCCCCDDDDDDB2B2B2FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDCCCCCC - DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1C0C0C0C0C0 - C0C0C0C00000C0C0C0C0C0C0FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1C0C0C0C0C0C0DDDDDDFFFFFFF1F1F1DD - DDDDDDDDDD0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFF1F1F1 - F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1C0C0C0DDDDDDF1F1F1F1F1F1FFFF - FFDDDDDDDDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FF - FFFFF1F1F1CCCCCCF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFF1F1F1FFFFFFFFFFFFFFFFFF999999C0C0C0FFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFDDDDDDDDDDDDF1F1F1F1F1F1DDDDDDCCCCCCFFFFFFFFFFFFFF - FFFFFFFFFFF1F1F1F1F1F1DDDDDDDDDDDDDDDDDDCCCCCCDDDDDDFFFFFFFFFFFF - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDF1F1F1FFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFF1F1F1F1F1F1C0C0C0DDDDDDF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFF - FFFFFFF1F1F1F1F1F1DDDDDDF1F1F1FFFFFFFFFFFFF1F1F1DDDDDDCCCCCCFFFF - FFF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDF1F1F1C0 - C0C0C0C0C0C0C0C00000C0C0C0C0C0C0FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1DDDDDDDDDDDDB2B2B2DDDDDDF1F1F1F1F1F1FFFFFF - FFFFFFDDDDDDDDDDDD0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FFDDDDDDC0C0C0C0C0C0CCCCCCDDDDDDC0C0C0F1F1F1F1F1F1FF - FFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDCCCCCC - F1F1F1FFFFFFC0C0C0C0C0C0F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFCCCCCCCCCCCCFFFFFFDDDDDDCCCCCCDDDDDDF1F1F1FFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1DDDDDDC0C0C0DDDDDDF1F1F1 - FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1CCCCCCC0C0C0C0C0C0CCCCCCFFFFFFF1F1 - F1F1F1F1F1F1F1DDDDDDDDDDDDF1F1F1F1F1F1DDDDDDF1F1F1FFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1DDDDDDB2B2B2F1F1F1 - FFFFFFDDDDDDDDDDDDC0C0C0DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFF - FFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFDDDDDDDDDDDDCC - CCCCF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1DDDDDD - C0C0C0C0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0FFFFFFFFFFFFFFFFFFFFFFFF - F1F1F1F1F1F1F1F1F1DDDDDDDDDDDDDDDDDDDDDDDDCCCCCCFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFDDDDDDDDDDDD0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FFC0C0C0B2B2B2CCCCCCF1F1F1F1F1F1DDDDDDF1F1F1 - F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1FFFFFFF1F1F1F1F1F1DDDD - DDFFFFFFFFFFFFFFFFFFC0C0C0CCCCCCF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFF1F1F1DDDDDDC0C0C0CCCCCCFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1CCCCCCC0C0C0F1F1 - F1F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1CCCCCCB2B2B2C0C0C0CCCCCCF1F1F1FF - FFFFF1F1F1DDDDDDDDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDC0C0 - C0FFFFFFDDDDDDF1F1F1CCCCCCC0C0C0F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFF - FFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFDDDDDD - DDDDDDF1F1F1DDDDDDF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1C0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0FFFFFFFFFFFFFFFF - FFF1F1F1F1F1F1F1F1F1DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDCCCCCCF1F1F1F1 - F1F1F1F1F1F1F1F1FFFFFFDDDDDDDDDDDD0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FFF1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1FFFFFFDDDDDDCC - CCCCC0C0C0FFFFFFF1F1F1F1F1F1CCCCCCDDDDDDFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFDDDDDDDDDDDDCCCCCCF1F1F1FFFFFFFFFFFFFFFFFFF1F1F1FFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1DDDDDDC0C0C0F1 - F1F1F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1C0C0C0C0C0C0FFFFFFFFFFFFFFFFFF - FFFFFFF1F1F1CCCCCCB2B2B2CCCCCCC0C0C0CCCCCCF1F1F1F1F1F1F1F1F1DDDD - DDFFFFFFCCCCCCF1F1F1F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1C0 - C0C0DDDDDDFFFFFFFFFFFFF1F1F1DDDDDDF1F1F1F1F1F1F1F1F1FFFFFFFFFFFF - FFFFFFFFFFFFF1F1F1DDDDDDDDDDDDF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFDDDDDDDDDDDDCCCCCCF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1 - F1F1F1F1F1FFFFFFFFFFFFC0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0FFFFFFFF - FFFFF1F1F1F1F1F1CCCCCCC0C0C0C0C0C0CCCCCCDDDDDDF1F1F1F1F1F1CCCCCC - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1CCCCCCDDDDDD0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFFFFFFFFFF1F1F1F1 - F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDDDDDDDF1F1F1F1F1F1 - FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDB2B2B2C0C0C0FFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1C0C0C0F1F1F1FFFFFFFFFFFFF1F1F1F1 - F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1CCCCCC - DDDDDDF1F1F1FFFFFFFFFFFFF1F1F1F1F1F1CCCCCCDDDDDDFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1CCCCCCCCCCCCCC - CCCCDDDDDDFFFFFFC0C0C0F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1C0C0C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1FFFF - FFFFFFFFFFFFFFCCCCCCC0C0C0B2B2B2DDDDDDF1F1F1FFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFDDDDDDF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0 - FFFFFFFFFFFFF1F1F1F1F1F1B2B2B2C0C0C0CCCCCCCCCCCCDDDDDDC0C0C0C0C0 - C0C0C0C0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F10000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFFF - FFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1CCCCCCCCCCCCF1F1 - F1F1F1F1FFFFFFFFFFFFDDDDDDF1F1F1F1F1F1CCCCCCC0C0C0DDDDDDF1F1F1FF - FFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1CCCCCCFFFFFFFFFFFFFFFFFF - F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1DDDD - DDDDDDDDDDDDDDF1F1F1F1F1F1FFFFFFF1F1F1F1F1F1C0C0C0F1F1F1FFFFFFFF - FFFFFFFFFFF1F1F1FFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFF1F1F1F1F1F1CCCCCCF1F1F1FFFFFFFFFFFFF1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1C0C0C0FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1 - F1F1FFFFFFFFFFFFF1F1F1B2B2B2C0C0C0C0C0C0F1F1F1F1F1F1FFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDDDDDF1F1F1FFFFFFFFFFFFF1F1F1FFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0C0C0C0C0C0C0C0C00000C0C0 - C0C0C0C0F1F1F1FFFFFFF1F1F1CCCCCCDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F10000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1DDDDDDC0 - C0C0F1F1F1FFFFFFFFFFFFFFFFFFDDDDDDDDDDDDCCCCCCC0C0C0F1F1F1F1F1F1 - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1CCCCCCCCCCCCF1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1FFFFFF - FFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1 - F1F1F1F1F1F1F1F1F1F1F1DDDDDDFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDC0C0C0 - F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFF - FFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFDDDDDDDDDDDDCCCCCCC0C0C0F1F1F1FF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFC0C0C0C0C0C0C0C0C0 - 0000C0C0C0C0C0C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1 - F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F10000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1DDDDDDC0C0C0 - B2B2B2CCCCCCFFFFFFFFFFFFFFFFFFDDDDDDDDDDDD999999C0C0C0FFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCCCCCCC0C0C0CCCCCCF1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1DDDDDDF1F1F1CCCCCCDDDDDDDDDDDDF1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDDDDDDDC0C0C0DDDDDDFF - FFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFF - FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1DDDDDDDDDDDDFFFFFFFFFFFFDDDDDDCCCC - CCDDDDDDFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFF - FFFFFFFFFFFFFFFFDDDDDDF1F1F1F1F1F1DDDDDDC0C0C0CCCCCCCCCCCCDDDDDD - F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1C0C0C0C0C0 - C0C0C0C00000C0C0C0C0C0C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1 - F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1FFFFFFFFFFFFF1 - F1F10000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FFF1F1F1F1F1F1F1F1F1DDDDDDC0C0 - C0CCCCCCCCCCCCDDDDDDFFFFFFFFFFFFFFFFFFDDDDDDDDDDDDC0C0C0DDDDDDFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDDDDDDDDDDDF1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1CCCCCCFFFFFFFFFFFFF1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDDDDDDDCCCCCC - F1F1F1FFFFFFFFFFFFFFFFFFDDDDDDF1F1F1FFFFFFFFFFFFF1F1F1FFFFFFF1F1 - F1FFFFFFFFFFFFFFFFFFDDDDDDDDDDDDDDDDDDCCCCCCDDDDDDFFFFFFF1F1F1DD - DDDDCCCCCCF1F1F1DDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - FFFFFFFFFFFFFFFFFFFFFFFFDDDDDDF1F1F1DDDDDDCCCCCCB2B2B2F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDDDDDDDDDDDDDCCCCCCC0 - C0C0C0C0C0C0C0C00000C0C0C0C0C0C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFDDDDDDF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1FFFFFFFFFFFF - F1F1F1F1F1F10000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFF1F1F1DDDDDDDDDDDDC0 - C0C0DDDDDDF1F1F1F1F1F1FFFFFFFFFFFFDDDDDDDDDDDDDDDDDDC0C0C0DDDDDD - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFF1F1F1F1F1 - F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1 - F1F1F1F1F1CCCCCCCCCCCCDDDDDDDDDDDDC0C0C0B2B2B2CCCCCCF1F1F1FFFFFF - F1F1F1F1F1F1DDDDDDF1F1F1F1F1F1F1F1F1DDDDDDCCCCCCF1F1F1DDDDDDDDDD - DDDDDDDDFFFFFFFFFFFFF1F1F1C0C0C0F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1F1 - F1F1F1F1F1FFFFFFFFFFFFDDDDDDCCCCCCCCCCCCCCCCCCCCCCCCDDDDDDF1F1F1 - F1F1F1F1F1F1FFFFFFFFFFFFDDDDDDFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDDDDDDDDDDDDDDDDDB2B2B2CCCCCCFF - FFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDD - F1F1F1C0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0FFFFFFFFFFFFFFFFFFF1F1F1 - F1F1F1F1F1F1CCCCCCF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFF1F1F1CCCCCCC0C0C00000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFC0C0C0 - 999999DDDDDDF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFDDDDDDDDDDDDDDDDDDF1F1 - F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFF1F1F1FFFFFFFFFFFFFF - FFFFF1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1DDDDDDC0C0C0 - F1F1F1F1F1F1DDDDDDC0C0C0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFF - FFFFFFFFF1F1F1DDDDDDF1F1F1F1F1F1DDDDDDC0C0C0CCCCCCF1F1F1FFFFFFF1 - F1F1DDDDDDDDDDDDF1F1F1DDDDDDCCCCCCDDDDDDFFFFFFFFFFFFFFFFFFF1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1CCCCCCDDDDDDF1 - F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1CCCCCCDDDDDDFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1C0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0F1F1F1FFFFFFF1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFF1F1F1F1F1F1F1F1F1F1F1F10000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FFF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDDDDDDDDDDDDD - DDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1CCCC - CCFFFFFFF1F1F1DDDDDDC0C0C0B2B2B2DDDDDDF1F1F1F1F1F1FFFFFFFFFFFFFF - FFFFFFFFFFF1F1F1FFFFFFF1F1F1DDDDDDF1F1F1F1F1F1FFFFFFFFFFFFFFFFFF - FFFFFFF1F1F1DDDDDDF1F1F1F1F1F1CCCCCCCCCCCCF1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1 - F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1DDDDDDC0C0C0 - CCCCCCF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1FFFF - FFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFF1F1F1C0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0DDDDDDF1 - F1F1F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F10000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1FFFFFFF1F1F1 - CCCCCCCCCCCCF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDF1F1F1F1 - F1F1DDDDDDF1F1F1FFFFFFFFFFFFCCCCCCCCCCCCDDDDDDF1F1F1F1F1F1FFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1CCCCCCDDDDDDF1F1F1F1F1F1DDDDDDF1F1 - F1FFFFFFFFFFFFF1F1F1DDDDDDF1F1F1F1F1F1CCCCCCCCCCCCF1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDDDDDDDDDDDDDDD - DDC0C0C0CCCCCCF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1FFFFFFFF - FFFFFFFFFFDDDDDDCCCCCCCCCCCCF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1 - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0 - DDDDDDF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDDD - DDF1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F10000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFF - FFFFFFFFFFFFFFF1F1F1DDDDDDCCCCCCCCCCCCDDDDDDDDDDDDDDDDDDDDDDDDDD - DDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDDDDDDDDDDDDD - DDDDDDCCCCCCC0C0C0F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1 - F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1DD - DDDDF1F1F1FFFFFFF1F1F1DDDDDDDDDDDDDDDDDDDDDDDDC0C0C0CCCCCCF1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1 - F1F1F1F1F1F1F1F1F1F1DDDDDDF1F1F1FFFFFFFFFFFFFFFFFFDDDDDDDDDDDDDD - DDDDDDDDDDC0C0C0DDDDDDF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1DDDDDDF1F1F1FFFFFFFFFFFFFFFFFFFFFF - FFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1C0C0C0C0C0C0C0C0C00000C0C0 - C0C0C0C0C0C0C0F1F1F1FFFFFFFFFFFFF1F1F1FFFFFFFFFFFFF1F1F1F1F1F1F1 - F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F10000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1CCCCCCCCCCCCCCCCCC - CCCCCCCCCCCCDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1C0C0C0C0C0C0DDDD - DDCCCCCCF1F1F1DDDDDDF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1 - F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1FFFFFFF1F1F1DDDDDDDDDDDDCCCCCCC0C0C0C0C0C0DDDD - DDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1 - F1F1DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1DDDDDDF1F1F1FFFFFFFFFFFFDDDDDD - DDDDDDDDDDDDDDDDDDCCCCCCF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDC0C0C0C0C0C0C0C0C0 - 0000C0C0C0C0C0C0CCCCCCF1F1F1FFFFFFF1F1F1F1F1F1FFFFFFFFFFFFF1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1CCCCCCDDDDDDF1F1F10000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1C0C0C0DD - DDDDF1F1F1F1F1F1FFFFFFF1F1F1F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDDDDDDDDDDDDD999999B2B2B2DD - DDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFF - FFFFFFF1F1F1DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFF1F1 - F1DDDDDDDDDDDDDDDDDDDDDDDDCCCCCCF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1 - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1DDDDDDC0C0C0C0C0 - C0C0C0C00000C0C0C0C0C0C0FFFFFFF1F1F1FFFFFFF1F1F1F1F1F1FFFFFFF1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDF1F1F1F1F1F1C0C0C0DDDDDDFFFFFF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FFF1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFF1 - F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFCCCCCCF1F1F1F1F1F1F1F1F1F1F1F1 - CCCCCCF1F1F1F1F1F1F1F1F1FFFFFFF1F1F1DDDDDDF1F1F1DDDDDDF1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDCCCCCCDDDDDDCCCCCCC0C0C0DDDDDD - F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFF - FFFFFFFFF1F1F1DDDDDDDDDDDDDDDDDDDDDDDDCCCCCCFFFFFFF1F1F1F1F1F1DD - DDDDDDDDDDDDDDDDDDDDDDDDDDDDF1F1F1CCCCCCDDDDDDFFFFFFFFFFFFFFFFFF - F1F1F1F1F1F1CCCCCCF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1 - F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCCCCCCDDDDDDF1F1F1F1F1F1C0 - C0C0C0C0C0C0C0C00000C0C0C0C0C0C0FFFFFFF1F1F1DDDDDDF1F1F1F1F1F1F1 - F1F1DDDDDDCCCCCCCCCCCCF1F1F1F1F1F1F1F1F1F1F1F1C0C0C0DDDDDDF1F1F1 - FFFFFF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1DDDDDDFFFFFFF1F1F1F1F1 - F1F1F1F1CCCCCCDDDDDDFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1DDDDDDCCCCCCC0 - C0C0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1C0C0C0C0C0C0CCCCCCF1F1F1DDDDDDF1F1 - F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFCCCCCCCCCCCCCCCCCCFFFFFFF1F1F1DDDDDDDDDDDDF1F1F1F1F1F1 - F1F1F1DDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1CCCCCCCCCCCCFFFFFFFFFF - FFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1 - F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFF1F1F1 - F1F1F1C0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0FFFFFFDDDDDDF1F1F1FFFFFF - F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1CCCCCCC0C0C0F1F1 - F1F1F1F1FFFFFF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1 - F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1FFFFFFF1 - F1F1F1F1F1F1F1F1CCCCCCDDDDDDF1F1F1FFFFFFFFFFFFFFFFFFF1F1F1DDDDDD - C0C0C0C0C0C0F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1C0C0C0CCCCCCF1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFF1F1F1FFFFFFDDDDDDF1F1F1F1F1F1FFFFFFF1F1F1DDDDDDDDDDDDF1F1 - F1F1F1F1DDDDDDCCCCCCDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1CCCCCCCCCCCCF1 - F1F1F1F1F1FFFFFFDDDDDDDDDDDDDDDDDDF1F1F1DDDDDDDDDDDDDDDDDDDDDDDD - F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFDDDDDDF1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1C0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0FFFFFFF1F1F1F1F1 - F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDDDDDDDF1 - F1F1F1F1F1F1F1F1FFFFFF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFF1F1F1F1F1F1DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDCCCCCCFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFDDDDDDCCCCCCDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFF - FFFFF1F1F1F1F1F1F1F1F1F1F1F1DDDDDDDDDDDDDDDDDDCCCCCCC0C0C0F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFF - FFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFDDDDDDDD - DDDDDDDDDDDDDDDDDDDDDDFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1CCCCCC - DDDDDDF1F1F1F1F1F1F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1DDDDDDDDDDDDDDDD - DDDDDDDDDDDDDDDDDDDDCCCCCCDDDDDDC0C0C0CCCCCCB2B2B2F1F1F1F1F1F1FF - FFFFFFFFFFFFFFFFF1F1F1C0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0FFFFFFF1 - F1F1DDDDDDDDDDDDDDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1FFFFFF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDDDDDDDDDDDDDF1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1CCCCCCFFFFFFFFFFFFFF - FFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD - DDF1F1F1FFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFCCCCCCF1F1F1FF - FFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1DDDDDDDDDDDDF1F1F1FFFFFFDDDDDD - DDDDDDDDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1DDDDDDC0C0C0F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1CCCCCCC0C0C0DD - DDDDDDDDDDCCCCCCCCCCCC999999DDDDDDDDDDDDFFFFFFFFFFFFDDDDDDFFFFFF - FFFFFFFFFFFFFFFFFFF1F1F1DDDDDDC0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0 - F1F1F1FFFFFFDDDDDDDDDDDDF1F1F1CCCCCCF1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDDDDDF1F1F1DDDDDDDDDDDDF1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1DDDDDDF1F1F1F1F1F1DDDDDDCCCCCCCCCCCCFFFFFF - FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFF - FFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFDDDDDDDDDDDDDD - DDDDDDDDDDDDDDDDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDDDDD - F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1DDDDDDDDDDDDF1F1F1FFFF - FFF1F1F1DDDDDDDDDDDDDDDDDDDDDDDDF1F1F1DDDDDDF1F1F1F1F1F1F1F1F1DD - DDDDC0C0C0C0C0C0B2B2B2F1F1F1F1F1F1F1F1F1FFFFFFF1F1F1DDDDDDC0C0C0 - DDDDDDF1F1F1CCCCCCCCCCCCC0C0C0C0C0C0FFFFFFFFFFFFFFFFFFFFFFFFF1F1 - F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1C0C0C0C0C0C0C0C0C00000C0C0 - C0C0C0C0F1F1F1F1F1F1CCCCCCDDDDDDDDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F10000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FFFFFFFFFFFFFFFFFFFF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFCCCCCCCCCC - CCDDDDDDF1F1F1DDDDDDCCCCCCF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1C0C0C0C0C0C0C0C0C0 - 0000C0C0C0C0C0C0FFFFFFFFFFFFFFFFFFFFFFFFDDDDDDF1F1F1F1F1F1FFFFFF - FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F10000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FFF1F1F1F1F1F10000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1 - F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFF1F1F1DDDDDDC0C0C0C0C0C0CCCCCCDDDDDDCCCCCCC0C0C0C0C0 - C0C0C0C00000C0C0C0C0C0C0FFFFFFF1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1 - F1F1F1F1F1F1F1DDDDDDCCCCCCF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFF1F1F10000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFF - FFFFFFFFF1F1F1F1F1F1DDDDDDCCCCCCDDDDDDFFFFFFFFFFFFFFFFFFFFFFFFC0 - C0C0C0C0C0C0C0C00000C0C0C0C0C0C0F1F1F1CCCCCCFFFFFFFFFFFFFFFFFFFF - FFFFF1F1F1F1F1F1F1F1F1F1F1F1DDDDDDF1F1F1FFFFFFFFFFFFFFFFFFFFFFFF - FFFFFF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFDDDDDDF1F1F1 - F1F1F1F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFF - FFC0C0C0F1F1F1F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFF - FFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - CCCCCCDDDDDDF1F1F1F1F1F1F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1DDDDDDDDDD - DDDDDDDDDDDDDDCCCCCCF1F1F1F1F1F1FFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFF - FFFFDDDDDDDDDDDDDDDDDDF1F1F1FFFFFFFFFFFFF1F1F1F1F1F1C0C0C0F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1FF - FFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFF - F1F1F1C0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0DDDDDDDDDDDDDDDDDDF1F1F1 - FFFFFFFFFFFFF1F1F1CCCCCCC0C0C0CCCCCCDDDDDDFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFF1F1F10000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FFF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1 - F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1FFFFFFFFFF - FFF1F1F1DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFF1F1F1DDDDDDDDDDDDDD - DDDDDDDDDDF1F1F1F1F1F1DDDDDDF1F1F1F1F1F1F1F1F1DDDDDDDDDDDDCCCCCC - F1F1F1F1F1F1DDDDDDCCCCCCF1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1DDDDDDF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1FF - FFFFF1F1F1DDDDDDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1 - F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1FFFFFFFFFFFFC0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0DDDDDDDDDDDDC0C0 - C0CCCCCCF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFF1F1F1FFFFFFF1F1F1DD - DDDDDDDDDDDDDDDDDDDDDD0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFFF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FFFFFFFFFFFFFFFFFFFFFFFFFF800000800000800000F1F1F1 - FFFFFFF1F1F1FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1FFFFFFFFFFFF8000008000 - 00800000800000800000800000800000800000800000FFFFFFC0C0C0DDDDDDCC - CCCCDDDDDDC0C0C0DDDDDDF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1800000 - 800000800000DDDDDDCCCCCCC0C0C0C0C0C0DDDDDD0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FFDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1DDDDDDCCCCCCF1F1F10000FF0000FF0000FF0000FF0000FF0000FF0000FF - F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1DDDDDDFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFF1F1F1F1F1F1DDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1FFFFFFC0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0DDDDDDDD - DDDDCCCCCCCCCCCCF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFF - F1F1F1DDDDDDDDDDDDDDDDDDDDDDDD0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFFFFF - FFFF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FFFFFFFFFFFFFFFFFFFFFFFFFF8000008000008000 - 00800000FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F180 - 0000800000800000800000800000800000800000800000800000800000DDDDDD - F1F1F1DDDDDDF1F1F1DDDDDDF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1 - F1F1F1F1800000800000800000C0C0C0C0C0C0DDDDDDF1F1F10000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FFF1F1F1FFFFFFF1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1DDDDDDCCCCCCF1F1F10000FF0000FF0000FF0000FF0000FF0000 - FF0000FFF1F1F1F1F1F1FFFFFFF1F1F1DDDDDDF1F1F1FFFFFFF1F1F1FFFFFFFF - FFFFFFFFFFFFFFFFF1F1F1F1F1F1DDDDDDC0C0C0F1F1F1F1F1F1F1F1F1FFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1C0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0 - DDDDDDDDDDDDC0C0C0DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFF - FFFFFFFFF1F1F1DDDDDDDDDDDDDDDDDD0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - F1F1F1DDDDDD0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FFF1F1F1F1F1F1FFFFFFFFFFFFFF - FFFF800000800000800000F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1800000 - 8000008000008000008000008000008000008000008000008000008000008000 - 00800000800000800000F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1FFFFFFFFFFFFF1 - F1F1F1F1F1F1F1F1800000800000800000800000CCCCCCFFFFFFFFFFFFF1F1F1 - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFF1F1F1DDDD - DDDDDDDDDDDDDDDDDDDDDDDDDDCCCCCCFFFFFFFFFFFF0000FF0000FF0000FF00 - 00FF0000FF0000FFF1F1F1F1F1F1FFFFFFDDDDDDDDDDDDCCCCCCF1F1F1F1F1F1 - FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1C0C0C0CCCCCCF1F1F1F1F1F1FFFF - FFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1FFFFFFC0C0C0C0C0C0C0C0C00000C0C0 - C0C0C0C0F1F1F1CCCCCCF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1CCCCCC0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FFF1F1F1FFFFFFDDDDDD0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFF1F1F1DDDDDD - F1F1F1F1F1F1F1F1F1800000800000800000F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1800000800000800000800000800000F1F1F1DDDDDDDDDDDDFFFFFFFFFFFFFF - FFFFFFFFFF800000800000800000800000800000FFFFFFF1F1F1F1F1F1DDDDDD - DDDDDDCCCCCCC0C0C0F1F1F1DDDDDD800000800000800000800000FFFFFFFFFF - FFF1F1F1F1F1F1F1F1F10000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FFCCCCCCDDDDDDCCCCCCDDDDDDC0C0C0DDDDDDFFFFFFFFFFFFFFFFFF0000FF - 0000FF0000FF0000FF0000FF0000FFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1FFFF - FFF1F1F1DDDDDDFFFFFFFFFFFFF1F1F1F1F1F1DDDDDDC0C0C0CCCCCCF1F1F1F1 - F1F1FFFFFFF1F1F1F1F1F1F1F1F1DDDDDDCCCCCCB2B2B2C0C0C0C0C0C0C0C0C0 - 0000C0C0C0C0C0C0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1CCCCCC0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FFF1F1F1F1F1F1F1F1F10000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFDDDD - DDDDDDDDF1F1F1F1F1F1F1F1F1800000800000800000DDDDDDF1F1F1DDDDDDF1 - F1F1F1F1F1800000800000800000800000F1F1F1DDDDDDDDDDDDDDDDDDFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1800000800000800000F1F1F1F1F1F1F1F1 - F1DDDDDDDDDDDD999999B2B2B2F1F1F1DDDDDDDDDDDD800000800000800000FF - FFFFFFFFFFF1F1F1FFFFFFFFFFFF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FFF1F1F1F1F1F1DDDDDDDDDDDDDDDDDDFFFFFFF1F1F1F1F1F1F1F1 - F10000FF0000FF0000FF0000FF0000FF0000FFFFFFFFFFFFFFFFFFFFF1F1F1FF - FFFFFFFFFFFFFFFFDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1DDDDDDC0C0C0CCCCCC - F1F1F1F1F1F1FFFFFFF1F1F1F1F1F1DDDDDDDDDDDDC0C0C0CCCCCCC0C0C0C0C0 - C0C0C0C00000C0C0C0C0C0C0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F10000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F10000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FFF1F1F1F1F1F1DDDDDDF1F1F1800000800000800000DDDDDD - DDDDDDF1F1F1DDDDDD800000800000800000800000F1F1F1DDDDDDDDDDDDDDDD - DDDDDDDDDDDDDDCCCCCCF1F1F1F1F1F1F1F1F1F1F1F180000080000080000080 - 0000F1F1F1C0C0C0B2B2B2DDDDDDFFFFFFFFFFFFFFFFFFF1F1F1800000800000 - 800000800000F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1DDDDDDDDDDDDDDDDDDC0C0 - C0CCCCCCF1F1F1FFFFFFFFFFFFF1F1F1F1F1F1CCCCCC999999CCCCCCF1F1F1C0 - C0C0C0C0C0C0C0C00000C0C0C0C0C0C0F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFF - FFFFF1F1F1FFFFFFFFFFFFDDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F100 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FFF1F1F1F1F1F1FFFFFFF1F1F1F1F1F18000008000 - 00800000C0C0C0CCCCCCC0C0C0C0C0C0800000800000800000F1F1F1DDDDDDDD - DDDDDDDDDDCCCCCCC0C0C0DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFF - 800000800000800000CCCCCCDDDDDDFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDDDDD - DD800000800000800000800000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F100 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDDDDDDDDDDDDDF1 - F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDC0C0C0DDDDDDF1F1F1 - FFFFFFC0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0F1F1F1DDDDDDFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F10000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FFF1F1F1F1F1F1F1F1F1DDDDDD - DDDDDDCCCCCC0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FFF1F1F1F1F1F1F1F1F1F1F1F180 - 0000800000800000800000FFFFFFF1F1F1FFFFFFFFFFFF800000800000800000 - DDDDDDDDDDDDDDDDDDC0C0C0F1F1F1F1F1F1F1F1F1FFFFFFF1F1F1F1F1F1FFFF - FFFFFFFF800000800000800000800000FFFFFFFFFFFFFFFFFFFFFFFFCCCCCCC0 - C0C0C0C0C0C0C0C0CCCCCC800000800000800000FFFFFFFFFFFFFFFFFFFFFFFF - F1F1F1DDDDDD0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDDDDDDDF1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDF1F1F1FFFFFFF1F1F1DDDDDDDDDDDDFFFF - FFF1F1F1FFFFFFC0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0F1F1F1DDDDDDFFFF - FFFFFFFFF1F1F1F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1DDDDDDCCCCCCF1F1F1F1 - F1F1F1F1F1F1F1F10000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFF1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1C0C0C0CCCCCC0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFF1F1F1F1F1F1 - F1F1F1F1F1F1800000800000800000800000FFFFFFFFFFFFFFFFFFFFFFFFF1F1 - F1F1F1F1DDDDDDDDDDDDDDDDDDC0C0C0F1F1F1F1F1F1F1F1F1FFFFFFF1F1F1FF - FFFFFFFFFFFFFFFF800000800000800000800000800000FFFFFFFFFFFFFFFFFF - CCCCCCCCCCCCCCCCCCDDDDDDDDDDDD800000800000800000DDDDDDC0C0C0F1F1 - F1F1F1F1F1F1F1DDDDDDF1F1F10000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDFFFFFFF1F1F1DDDDDDF1 - F1F1FFFFFFF1F1F1FFFFFFC0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0C0C0C0DD - DDDDF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1DDDDDDCCCCCCDDDDDD - DDDDDDF1F1F1CCCCCCCCCCCC0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFF1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1DDDDDDF1F1F10000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FFF1F1F1F1F1F1F1F1F1DDDDDD800000800000800000F1F1F1FFFFFFFFFFFFFF - FFFFFFFFFFF1F1F1CCCCCCB2B2B2CCCCCCCCCCCCFFFFFFF1F1F1F1F1F1FFFFFF - F1F1F1FFFFFFFFFFFF800000800000800000800000800000800000F1F1F1FFFF - FFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFF800000800000800000C0 - C0C0FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F10000FF0000FF0000FF - 0000FF0000FF0000FF0000FFF1F1F1FFFFFFFFFFFFFFFFFF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FFFFFFFFF1F1F1F1F1F1FFFFFFFFFFFFF1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDC0C0C0C0C0C0FFFFFFFFFFFF - F1F1F1DDDDDDCCCCCCDDDDDDF1F1F1C0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0 - F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1DDDD - DDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F10000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - FFFFFFFFFFFFF1F1F1DDDDDDF1F1F1F1F1F1FFFFFFFFFFFF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FFF1F1F1DDDDDDDDDDDDDDDDDDDDDDDD800000800000800000FFFFFF - FFFFFFFFFFFFFFFFFFC0C0C0CCCCCCDDDDDDFFFFFFFFFFFFF1F1F1CCCCCCF1F1 - F1FFFFFF800000800000800000800000800000800000800000800000DDDDDDDD - DDDDF1F1F1DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1800000 - 800000800000F1F1F1F1F1F1DDDDDDCCCCCCCCCCCCDDDDDDF1F1F1F1F1F10000 - FF0000FF0000FF0000FF0000FF0000FF0000FFF1F1F1F1F1F1F1F1F1F1F1F100 - 00FF0000FF0000FF0000FF0000FF0000FFF1F1F1F1F1F1F1F1F1FFFFFFFFFFFF - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDB2B2B2C0C0C0DDDDDDFFFFFFFFFF - FFFFFFFFDDDDDDDDDDDDDDDDDDF1F1F1FFFFFFC0C0C0C0C0C0C0C0C00000C0C0 - C0C0C0C0F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1DDDDDDF1F1F1F1F1F1F1F1F1F1F1F10000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FFFFFFFFFFFFFFF1F1F1DDDDDDDDDDDDCCCCCCDDDDDDF1F1F10000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FFCCCCCCCCCCCCDDDDDDCCCCCC8000008000008000 - 00FFFFFFFFFFFFFFFFFFF1F1F1C0C0C0F1F1F1FFFFFFFFFFFFFFFFFFCCCCCCDD - DDDDF1F1F1800000800000800000800000800000800000800000800000800000 - F1F1F1F1F1F1F1F1F1DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1800000800000800000F1F1F1F1F1F1F1F1F1DDDDDDDDDDDDF1F1F1F1F1F1F1 - F1F10000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFFFF1F1F1 - F1F1F10000FF0000FF0000FF0000FF0000FF0000FFF1F1F1F1F1F1F1F1F1FFFF - FFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1DDDDDDC0C0C0C0C0C0DDDDDDFFFFFFFF - FFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFC0C0C0C0C0C0C0C0C0 - 0000C0C0C0C0C0C0FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1DDDDDDDDDDDDCCCCCCF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFF1F1F1F1F1 - F1FFFFFFFFFFFFF1F1F1FFFFFFFFFFFFF1F1F1DDDDDDF1F1F1DDDDDDDDDDDDDD - DDDDFFFFFFFFFFFFFFFFFFFFFFFFC0C0C0CCCCCCCCCCCCF1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F10000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FFF1F1F1F1F1F1DDDDDDF1F1F180 - 0000800000800000800000F1F1F1DDDDDDDDDDDDFFFFFFFFFFFFFFFFFFF1F1F1 - 8000008000008000008000008000008000008000008000008000008000008000 - 00F1F1F1FFFFFFF1F1F1B2B2B2C0C0C0DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1800000800000800000800000FFFFFFF1F1F1F1F1F1FFFFFF - FFFFFFF1F1F1F1F1F1F1F1F10000FF0000FF0000FF0000FF0000FF0000FF0000 - FFF1F1F1F1F1F1F1F1F10000FF0000FF0000FF0000FF0000FFF1F1F1FFFFFFFF - FFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1CCCCCCC0C0C0CCCCCCFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1C0C0C0C0C0 - C0C0C0C00000C0C0C0C0C0C0F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1C0C0C0C0C0C0DDDDDDF1F1F1FFFFFFF1F1F1FFFFFFF1F1F1FF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1DDDDDDFFFFFFFFFFFFF1F1F1F1F1F1CCCCCCFFFFFFF1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F10000FF0000FF0000FF0000FF0000FF0000FFF1F1F100 - 00FF0000FF0000FF0000FFFFFFFF0000FF0000FF0000FF0000FFF1F1F1F1F1F1 - F1F1F1FFFFFF800000800000800000F1F1F1DDDDDDCCCCCCF1F1F1F1F1F1F1F1 - F1F1F1F1800000800000800000800000800000800000800000800000F1F1F1F1 - F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1800000800000800000FFFFFFF1F1F1FFFF - FFFFFFFFFFFFFFFFFFFFCCCCCCC0C0C0C0C0C0F1F1F10000FF0000FF0000FF00 - 00FF0000FF0000FFF1F1F1F1F1F10000FF0000FF0000FF0000FF0000FF0000FF - FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1C0C0C0DDDDDDFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1C0 - C0C0C0C0C0C0C0C00000C0C0C0C0C0C0F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1F1 - F1F1F1F1F1F1F1F1DDDDDDC0C0C0CCCCCCFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1 - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1CCCCCCFFFFFFFFFFFFF1F1F1F1F1F1DDDDDDF1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1FFFFFFF1F1F10000FF0000FF0000FF0000FF0000FF - 0000FFFFFFFF0000FF0000FFFFFFFFFFFFFF0000FF0000FF0000FF0000FFF1F1 - F1F1F1F1F1F1F1FFFFFF800000800000800000800000DDDDDDC0C0C0F1F1F1F1 - F1F1F1F1F1F1F1F1800000800000800000800000800000FFFFFFFFFFFFFFFFFF - FFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFF1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1800000800000800000FF - FFFFFFFFFFFFFFFFFFFFFFF1F1F1B2B2B2C0C0C0CCCCCCDDDDDD0000FF0000FF - 0000FF0000FF0000FF0000FF0000FFF1F1F10000FF0000FF0000FF0000FF0000 - FF0000FFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1CCCCCCCCCCCCF1F1F1FF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1 - F1F1F1C0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0FFFFFFFFFFFFFFFFFFF1F1F1 - F1F1F1DDDDDDDDDDDDDDDDDDDDDDDDC0C0C0CCCCCCFFFFFFF1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1DDDDDDCCCCCCC0C0C0F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFF1F1F10000FF0000FF0000 - FF0000FF0000FF0000FFFFFFFFFFFFFFFFFFFFFFFFFF0000FF0000FF0000FF00 - 00FF0000FFFFFFFFFFFFFFFFFFFFFFFFFF800000800000800000800000CCCCCC - F1F1F1F1F1F1F1F1F1F1F1F1800000800000800000800000FFFFFFFFFFFFFFFF - FFFFFFFFF1F1F1CCCCCCFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDF1F1F1F1F1F1FF - FFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1800000800000 - 800000FFFFFFF1F1F1FFFFFFF1F1F1DDDDDDCCCCCCF1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F10000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FFF1F1F1DDDDDDF1F1F1F1F1F1F1F1F1CCCCCC999999F1F1F1 - F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1 - F1F1F1F1F1F1F1C0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0FFFFFFDDDDDDDDDD - DDDDDDDDDDDDDDDDDDDDDDDDDDF1F1F1DDDDDDC0C0C0CCCCCCF1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1DDDDDDDDDDDDF1F1F1F1F1F1 - F1F1F1F1F1F1CCCCCCC0C0C0DDDDDDF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFDDDD - DDDDDDDDC0C0C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1CCCCCC0000FF00 - 00FF0000FF0000FF0000FFDDDDDDDDDDDDDDDDDDF1F1F1FFFFFFFFFFFF0000FF - 0000FF0000FF0000FF0000FFF1F1F1DDDDDDDDDDDDCCCCCCDDDDDD8000008000 - 00F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1FFFFFF800000800000800000F1F1F1F1 - F1F1DDDDDDC0C0C0CCCCCCCCCCCCFFFFFFFFFFFFF1F1F1DDDDDDC0C0C0800000 - 800000800000F1F1F1F1F1F1F1F1F1FFFFFFF1F1F1F1F1F1FFFFFFFFFFFFFFFF - FF800000800000800000800000F1F1F1F1F1F1F1F1F1DDDDDDF1F1F1F1F1F1F1 - F1F1FFFFFFFFFFFFFFFFFF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FFF1F1F1F1F1F1F1F1F1DDDDDDC0C0C0DDDD - DDF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFF1 - F1F1F1F1F1CCCCCCFFFFFFC0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0F1F1F1F1 - F1F1DDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDFFFFFFFFFFFF - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDD - DDDDDDDDDDDDDDDDDDDDCCCCCCF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFF - FFFFDDDDDDDDDDDDC0C0C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - F1F1F10000FF0000FF0000FFDDDDDDDDDDDDDDDDDDDDDDDDCCCCCCF1F1F1FFFF - FFDDDDDDF1F1F1F1F1F10000FF0000FF0000FFB2B2B2C0C0C0DDDDDDF1F1F180 - 0000800000800000FFFFFFFFFFFFF1F1F1F1F1F1FFFFFF800000800000800000 - 800000DDDDDDB2B2B2CCCCCCFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1CCCC - CC800000800000800000F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1FFFFFFFFFFFFFF - FFFFFFFFFFFFFFFF800000800000800000F1F1F1F1F1F1FFFFFFF1F1F1FFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FFDDDDDDDDDDDDDDDDDDCCCCCCCC - CCCCF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1FFFFFFFFFFFF - F1F1F1DDDDDDCCCCCCCCCCCCFFFFFFC0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0 - F1F1F1F1F1F1DDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFF - FFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFF1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1CCCCCCF1F1F1F1F1F1F1F1F1FFFFFFFFFFFF - FFFFFFFFFFFFC0C0C0C0C0C0B2B2B2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFF1F1F10000FF0000FF0000FF0000FF0000FF0000FF0000FFCCCCCCF1 - F1F1F1F1F10000FF0000FF0000FF0000FF0000FF0000FFCCCCCCDDDDDDF1F1F1 - F1F1F1800000800000800000800000FFFFFFF1F1F1FFFFFFFFFFFFF1F1F18000 - 00800000800000F1F1F1C0C0C0DDDDDDFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1 - F1F1DDDDDD800000800000800000F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1FFFFFF - FFFFFFFFFFFFFFFFFFFFFFFF800000800000800000800000FFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F10000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFDDDDDDDDDDDD - 999999DDDDDDF1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFF - FFF1F1F1F1F1F1CCCCCCB2B2B2DDDDDDFFFFFFC0C0C0C0C0C0C0C0C00000C0C0 - C0C0C0C0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFF - F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1CCCCCCCCCCCCF1F1F1F1F1F1F1F1F1FFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1 - F1F1FFFFFFFFFFFFFFFFFFFFFFFF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FFF1F1F1FFFFFF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFF - FFFFFFFFFFFFFFF1F1F1FFFFFF800000800000800000FFFFFFFFFFFFFFFFFFF1 - F1F1F1F1F1800000800000800000800000800000FFFFFFFFFFFFFFFFFFF1F1F1 - F1F1F1F1F1F1F1F1F1800000800000800000800000FFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDC0C0C0800000800000800000800000FF - FFFFFFFFFFF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1 - FFFFFF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFC0C0 - C0C0C0C0CCCCCCF1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1CCCCCCC0C0C0CC - CCCCFFFFFFF1F1F1F1F1F1C0C0C0DDDDDDFFFFFFFFFFFFC0C0C0C0C0C0C0C0C0 - 0000C0C0C0C0C0C0DDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1DDDDDDC0C0C0DDDDDDF1F1F1FFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1FFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFF1F1F1FFFFFFF1F1F1FFFFFFFFFFFFFFFFFF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FFFFFFFF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FFFFFFFFF1F1F1FFFFFFFFFFFF800000800000800000DDDDDDF1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F18000008000008000008000008000008000 - 00800000800000800000800000800000800000800000800000FFFFFFFFFFFFFF - FFFFFFFFFF800000800000800000800000800000800000800000800000800000 - 800000800000800000800000800000800000800000800000800000F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1B2B2B20000FF0000FF0000FF0000FF0000FF0000FF00 - 00FFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFCCCCCC999999B2B2B2 - F1F1F1F1F1F1FFFFFFC0C0C0C0C0C0CCCCCCF1F1F1FFFFFFFFFFFFC0C0C0C0C0 - C0C0C0C00000C0C0C0C0C0C0F1F1F1F1F1F1F1F1F1DDDDDDDDDDDDDDDDDDDDDD - DDC0C0C0C0C0C0F1F1F1F1F1F1DDDDDDDDDDDDF1F1F1F1F1F1FFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1FFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFF1F1F10000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FFFFFFFFF1F1F1DDDDDDF1F1F1DDDDDD8000008000008000 - 00DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F180000080000080000080 - 0000800000800000800000800000800000800000800000800000FFFFFFF1F1F1 - F1F1F1FFFFFFFFFFFF8000008000008000008000008000008000008000008000 - 00800000800000800000800000800000800000800000800000800000800000F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1C0C0C00000FF0000FF0000FF0000FF0000FF - 0000FF0000FFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1B2B2B2CCCC - CCDDDDDDFFFFFFFFFFFFF1F1F1CCCCCCCCCCCCDDDDDDFFFFFFFFFFFFFFFFFFC0 - C0C0C0C0C0C0C0C00000C0C0C0C0C0C0DDDDDDCCCCCCCCCCCCC0C0C0C0C0C0B2 - B2B2CCCCCCDDDDDDFFFFFFFFFFFFDDDDDDDDDDDDCCCCCCDDDDDDF1F1F1F1F1F1 - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1 - F1CCCCCCCCCCCCFFFFFFF1F1F1F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1FF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFF1F1F1F1F1F1 - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FFF1F1F1F1F1F1DDDDDD80000080 - 0000800000800000F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1DDDDDD800000800000800000800000800000800000800000FFFFFFF1F1 - F1DDDDDDF1F1F1F1F1F1F1F1F1F1F1F180000080000080000080000080000080 - 0000800000800000800000800000800000800000800000800000800000800000 - 800000800000800000F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F10000FF0000 - FF0000FF0000FF0000FFFFFFFFFFFFFFDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFC0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1FFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDDDDDDDDDDDCCCCCCF1F1F1F1 - F1F1F1F1F1FFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1F1 - F1F1DDDDDDC0C0C0F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1DDDDDD - DDDDDDDDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDD - DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDC0C0C0CCCCCCF1F1F1F1F1F1FF - FFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - C0C0C0F1F1F1F1F1F1DDDDDDDDDDDDDDDDDDF1F1F1F1F1F1F1F1F1FFFFFFFFFF - FFFFFFFFF1F1F1F1F1F1F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FF - FFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1CCCCCCF1F1F1F1F1F1F1F1F1 - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1 - F1F1F1F1F1F1F1C0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0F1F1F1F1F1F1F1F1 - F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1 - F1F1FFFFFFFFFFFFF1F1F1DDDDDDFFFFFFFFFFFFFFFFFFDDDDDDDDDDDDDDDDDD - F1F1F1FFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFF1F1F1FFFFFFF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1 - F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1 - F1F1F1F1F1F1CCCCCCC0C0C0F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFDDDDDDF1F1 - F1DDDDDDDDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDF1 - F1F1DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDC0C0C0DDDDDDF1F1F1 - F1F1F1F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1DDDDDDC0C0C0F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1 - F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1CCCCCCDDDDDDF1F1 - F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFC0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0F1F1F1FF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - DDDDDDC0C0C0DDDDDDC0C0C0DDDDDDFFFFFFFFFFFFF1F1F1F1F1F1DDDDDDDDDD - DDDDDDDDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFF - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1 - F1F1F1F1F1F1F1DDDDDDC0C0C0DDDDDDF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1 - F1F1DDDDDDDDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDD - C0C0C0DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1CCCCCCDDDD - DDF1F1F1F1F1F1F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1DDDDDDF1F1F1F1 - F1F1C0C0C0C0C0C0F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1FFFFFFF1F1F1FFFFFF - F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1DDDDDDC0C0C0F1 - F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1 - F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFC0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0 - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFC0C0 - C0CCCCCCCCCCCCDDDDDDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1DD - DDDDDDDDDDDDDDDDDDDDDDDDDDDDF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFF1F1 - F1F1F1F1F1F1F1DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFF1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1C0C0C0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFF - FFFFFFF1F1F1DDDDDDCCCCCCDDDDDDF1F1F1DDDDDDDDDDDDDDDDDDC0C0C0CCCC - CCCCCCCCCCCCCCF1F1F1DDDDDDDDDDDDF1F1F1F1F1F1F1F1F1DDDDDDDDDDDDCC - CCCCF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1DDDDDDDDDDDD - DDDDDDDDDDDDC0C0C0DDDDDDF1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1 - F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1DDDDDD - CCCCCCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFC0C0C0C0C0C0C0C0C00000C0C0 - C0C0C0C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1FFFFFFF1 - F1F1DDDDDDF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1CCCCCC - DDDDDDC0C0C0CCCCCCDDDDDDC0C0C0C0C0C0CCCCCCF1F1F1FFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDDDDDDDDD - DDDDF1F1F1F1F1F1CCCCCCDDDDDDF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1 - FFFFFFF1F1F1F1F1F1DDDDDDC0C0C0DDDDDDF1F1F1F1F1F1FFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFC0C0C0CCCCCCF1F1F1F1F1F1DDDDDDDDDDDDC0C0C0DDDDDDDD - DDDDF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFF1F1F1FFFFFFF1F1F1F1F1F1DDDDDD - DDDDDDDDDDDDDDDDDDFFFFFFF1F1F1FFFFFFFFFFFFDDDDDDDDDDDDF1F1F1F1F1 - F1DDDDDDCCCCCCDDDDDDDDDDDDF1F1F1FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1FF - FFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCCCCCCDDDDDDF1F1F1 - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1DDDD - DDCCCCCCCCCCCCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0C0C0C0C0C0C0C0C0 - 0000C0C0C0C0C0C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1 - F1F1F1F1F1F1DDDDDDF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1 - F1DDDDDDCCCCCCC0C0C0DDDDDDCCCCCCC0C0C0CCCCCCF1F1F1FFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDF1F1F1F1F1F1F1F1F1DDDDDD - CCCCCCC0C0C0DDDDDDCCCCCCC0C0C0F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFF - FFF1F1F1FFFFFFF1F1F1DDDDDDC0C0C0CCCCCCF1F1F1F1F1F1FFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFF1F1F1DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDD - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1 - F1DDDDDDDDDDDDDDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1CCCCCCDDDDDDF1F1F1F1F1F1FFFFFFF1F1F1FFFFFFF1F1F1F1F1F1 - F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1B2B2B2CCCC - CCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1 - F1F1DDDDDDC0C0C0F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0C0C0C0C0 - C0C0C0C00000C0C0C0C0C0C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1 - F1F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1FFFFFFF1F1F1F1F1F1FFFFFFF1F1F1FF - FFFFF1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1 - F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1DDDDDDC0C0C0CCCCCCF1F1F1DDDD - DDC0C0C0DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFF1F1F1F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1DD - DDDDDDDDDDDDDDDDDDDDDDDDDDDDF1F1F1DDDDDDCCCCCCDDDDDDF1F1F1FFFFFF - FFFFFFFFFFFFF1F1F1DDDDDDF1F1F1FFFFFFF1F1F1FFFFFFFFFFFFF1F1F1DDDD - DDF1F1F1FFFFFFFFFFFFF1F1F1DDDDDDF1F1F1FFFFFFF1F1F1DDDDDDCCCCCCDD - DDDDF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - DDDDDDCCCCCCB2B2B2C0C0C0FFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1CCCCCCC0 - C0C0C0C0C0C0C0C00000C0C0C0C0C0C0F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFF1F1F1F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFF1F1F1F1F1F1DDDDDDCCCCCCCCCCCCF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1CC - CCCCCCCCCCC0C0C0F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1FFFF - FFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1 - DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDCCCCCCC0C0C0CCCCCCDDDDDDF1F1F1F1F1 - F1FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFF1 - F1F1F1F1F1FFFFFFFFFFFFDDDDDDCCCCCCCCCCCCF1F1F1FFFFFFFFFFFFF1F1F1 - F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1DDDDDDDDDDDDC0C0C0 - CCCCCCC0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C00000} - Stretch = True - IsControl = True - end - object lblProductName: TLabel - Left = 5 - Top = 80 - Width = 68 - Height = 13 - Alignment = taCenter - Caption = 'Product Name' - IsControl = True - end - object lblVersion: TLabel - Left = 8 - Top = 160 - Width = 74 - Height = 13 - Caption = 'Version: 1.1.1.1' - IsControl = True - end - object lblGovStatement: TLabel - Left = 5 - Top = 96 - Width = 231 - Height = 13 - Alignment = taCenter - Caption = 'Developed by the Department of Veterans Affairs' - IsControl = True - end - object lblCRC: TLabel - Left = 232 - Top = 160 - Width = 92 - Height = 13 - Caption = 'CRC: DDDDDDDD' - end - object lblDate: TLabel - Left = 97 - Top = 160 - Width = 82 - Height = 13 - Alignment = taCenter - Caption = 'January 30, 2000' - end - object ProgramIcon: TImage - Left = 176 - Top = 8 - Width = 145 - Height = 73 - end - object Memo1: TMemo - Left = 8 - Top = 112 - Width = 321 - Height = 49 - BorderStyle = bsNone - Lines.Strings = ( - 'Unauthorized access or use of this system and/or its data is a ' - - 'federal crime. Use of all data must be in accordance with VA po' + - 'licy ' - 'on security and privacy.') - ParentColor = True - TabOrder = 0 - end - end - object OKButton: TButton - Left = 139 - Top = 204 - Width = 75 - Height = 25 - Caption = 'OK' - Default = True - ModalResult = 1 - TabOrder = 1 - end -end diff --git a/BDK32/Samples/SharedRPCBroker/BrokerEx/frmVistAAbout.pas b/BDK32/Samples/SharedRPCBroker/BrokerEx/frmVistAAbout.pas deleted file mode 100644 index 24437df..0000000 --- a/BDK32/Samples/SharedRPCBroker/BrokerEx/frmVistAAbout.pas +++ /dev/null @@ -1,267 +0,0 @@ -unit frmVistAAbout; - -interface - -uses Windows, SysUtils, Classes, Graphics, Forms, Controls, StdCtrls, - Buttons, ExtCtrls, jpeg, jconsts, Dialogs; - -TYPE - TInteger8 = Int64; - -type - TfrmVistAAbout = class(TForm) - Panel1: TPanel; - VistaLogo: TImage; - lblProductName: TLabel; - lblVersion: TLabel; - lblGovStatement: TLabel; - OKButton: TButton; - lblCRC: TLabel; - Memo1: TMemo; - lblDate: TLabel; - ProgramIcon: TImage; - procedure FormCreate(Sender: TObject); - private - { Private declarations } - public - { Public declarations } - procedure getfileinfo(var Version: String; var ProductName: String); virtual; - end; - -procedure ShowAboutBox; - -implementation - -{$R *.DFM} - - CONST - table: ARRAY[0..255] OF DWORD = - ($00000000, $77073096, $EE0E612C, $990951BA, - $076DC419, $706AF48F, $E963A535, $9E6495A3, - $0EDB8832, $79DCB8A4, $E0D5E91E, $97D2D988, - $09B64C2B, $7EB17CBD, $E7B82D07, $90BF1D91, - $1DB71064, $6AB020F2, $F3B97148, $84BE41DE, - $1ADAD47D, $6DDDE4EB, $F4D4B551, $83D385C7, - $136C9856, $646BA8C0, $FD62F97A, $8A65C9EC, - $14015C4F, $63066CD9, $FA0F3D63, $8D080DF5, - $3B6E20C8, $4C69105E, $D56041E4, $A2677172, - $3C03E4D1, $4B04D447, $D20D85FD, $A50AB56B, - $35B5A8FA, $42B2986C, $DBBBC9D6, $ACBCF940, - $32D86CE3, $45DF5C75, $DCD60DCF, $ABD13D59, - $26D930AC, $51DE003A, $C8D75180, $BFD06116, - $21B4F4B5, $56B3C423, $CFBA9599, $B8BDA50F, - $2802B89E, $5F058808, $C60CD9B2, $B10BE924, - $2F6F7C87, $58684C11, $C1611DAB, $B6662D3D, - - $76DC4190, $01DB7106, $98D220BC, $EFD5102A, - $71B18589, $06B6B51F, $9FBFE4A5, $E8B8D433, - $7807C9A2, $0F00F934, $9609A88E, $E10E9818, - $7F6A0DBB, $086D3D2D, $91646C97, $E6635C01, - $6B6B51F4, $1C6C6162, $856530D8, $F262004E, - $6C0695ED, $1B01A57B, $8208F4C1, $F50FC457, - $65B0D9C6, $12B7E950, $8BBEB8EA, $FCB9887C, - $62DD1DDF, $15DA2D49, $8CD37CF3, $FBD44C65, - $4DB26158, $3AB551CE, $A3BC0074, $D4BB30E2, - $4ADFA541, $3DD895D7, $A4D1C46D, $D3D6F4FB, - $4369E96A, $346ED9FC, $AD678846, $DA60B8D0, - $44042D73, $33031DE5, $AA0A4C5F, $DD0D7CC9, - $5005713C, $270241AA, $BE0B1010, $C90C2086, - $5768B525, $206F85B3, $B966D409, $CE61E49F, - $5EDEF90E, $29D9C998, $B0D09822, $C7D7A8B4, - $59B33D17, $2EB40D81, $B7BD5C3B, $C0BA6CAD, - - $EDB88320, $9ABFB3B6, $03B6E20C, $74B1D29A, - $EAD54739, $9DD277AF, $04DB2615, $73DC1683, - $E3630B12, $94643B84, $0D6D6A3E, $7A6A5AA8, - $E40ECF0B, $9309FF9D, $0A00AE27, $7D079EB1, - $F00F9344, $8708A3D2, $1E01F268, $6906C2FE, - $F762575D, $806567CB, $196C3671, $6E6B06E7, - $FED41B76, $89D32BE0, $10DA7A5A, $67DD4ACC, - $F9B9DF6F, $8EBEEFF9, $17B7BE43, $60B08ED5, - $D6D6A3E8, $A1D1937E, $38D8C2C4, $4FDFF252, - $D1BB67F1, $A6BC5767, $3FB506DD, $48B2364B, - $D80D2BDA, $AF0A1B4C, $36034AF6, $41047A60, - $DF60EFC3, $A867DF55, $316E8EEF, $4669BE79, - $CB61B38C, $BC66831A, $256FD2A0, $5268E236, - $CC0C7795, $BB0B4703, $220216B9, $5505262F, - $C5BA3BBE, $B2BD0B28, $2BB45A92, $5CB36A04, - $C2D7FFA7, $B5D0CF31, $2CD99E8B, $5BDEAE1D, - - $9B64C2B0, $EC63F226, $756AA39C, $026D930A, - $9C0906A9, $EB0E363F, $72076785, $05005713, - $95BF4A82, $E2B87A14, $7BB12BAE, $0CB61B38, - $92D28E9B, $E5D5BE0D, $7CDCEFB7, $0BDBDF21, - $86D3D2D4, $F1D4E242, $68DDB3F8, $1FDA836E, - $81BE16CD, $F6B9265B, $6FB077E1, $18B74777, - $88085AE6, $FF0F6A70, $66063BCA, $11010B5C, - $8F659EFF, $F862AE69, $616BFFD3, $166CCF45, - $A00AE278, $D70DD2EE, $4E048354, $3903B3C2, - $A7672661, $D06016F7, $4969474D, $3E6E77DB, - $AED16A4A, $D9D65ADC, $40DF0B66, $37D83BF0, - $A9BCAE53, $DEBB9EC5, $47B2CF7F, $30B5FFE9, - $BDBDF21C, $CABAC28A, $53B39330, $24B4A3A6, - $BAD03605, $CDD70693, $54DE5729, $23D967BF, - $B3667A2E, $C4614AB8, $5D681B02, $2A6F2B94, - $B40BBE37, $C30C8EA1, $5A05DF1B, $2D02EF8D); - - // Use CalcCRC32 as a procedure so CRCValue can be passed in but - // also returned. This allows multiple calls to CalcCRC32 for - // the "same" CRC-32 calculation. - PROCEDURE CalcCRC32 (p: pointer; ByteCount: DWORD; VAR CRCValue: DWORD); - // The following is a little cryptic (but executes very quickly). - // The algorithm is as follows: - // 1. exclusive-or the input byte with the low-order byte of - // the CRC register to get an INDEX - // 2. shift the CRC register eight bits to the right - // 3. exclusive-or the CRC register with the contents of - // Table[INDEX] - // 4. repeat steps 1 through 3 for all bytes - - VAR - i: DWORD; - q: ^BYTE; - BEGIN - q := p; - FOR i := 0 TO ByteCount-1 DO BEGIN - CRCvalue := (CRCvalue SHR 8) XOR - Table[ q^ XOR (CRCvalue AND $000000FF) ]; - INC(q) - END - END {CalcCRC32}; - - - // The CRC-32 value calculated here matches the one from the PKZIP program. - // Use MemoryStream to read file in binary mode. - PROCEDURE CalcFileCRC32 (FromName: STRING; VAR CRCvalue: DWORD; - VAR TotalBytes: TInteger8; - VAR error: WORD); - VAR - Stream: TMemoryStream; - BEGIN - error := 0; - CRCValue := $FFFFFFFF; - Stream := TMemoryStream.Create; - TRY - TRY - Stream.LoadFromFile(FromName); - IF Stream.Size > 0 - THEN CalcCRC32 (Stream.Memory, Stream.Size, CRCvalue) - EXCEPT - ON E: EReadError DO - error := 1 - END; - - CRCvalue := NOT CRCvalue; - TotalBytes := Stream.Size - FINALLY - Stream.Free - END; - END {CalcFileCRC32}; - -procedure TfrmVistAAbout.FormCreate(Sender: TObject); -var - CRC32: DWord; - TotalBytes: Int64; - Error: Word; - Text: String; - Version: String; - ProductName: String; -begin - CalcFileCRC32(Application.ExeName, CRC32, TotalBytes, Error); - lblCRC.Caption := 'CRC: ' + IntToHex(CRC32,8); - Text := Application.ExeName; - while pos('\',Text) > 0 do - begin - Text := copy(Text,pos('\',Text)+1,Length(Text)); - end; // while - Text := copy(Text,1,Length(Text)-4); - Caption := 'About ' + Text; - getfileinfo(Version, ProductName); - lblProductName.Caption := ProductName; - lblVersion.Caption := 'Version: ' + Version; - lblProductName.Width := Panel1.Width-10; - lblGovStatement.Width := Panel1.Width-10; - if ProgramIcon.Picture.Graphic = nil then - begin - VistALogo.Left := (Panel1.Width - VistALogo.Width) div 2; - end; -end; - -procedure TfrmVistAAbout.GetFileInfo(var Version: String; var ProductName: String); -var - VerInfoSize: DWORD; // holds the size of the version info resource - GetInfoSizeJunk: DWORD; // a junk variable, its value is ignored - VersionInfo: Pointer; // points to the version info resource - Translation: Pointer; // holds version info translation table - InfoPointer: Pointer; // a pointer to version information - - VersionInfoSize: UINT; // holds the size of version information - VersionValue: string; // holds the version info request string - SearchRec: TSearchRec; - DateTimeVal: TDateTime; - WriteTime: Integer; -begin - {retrieve the size of the version information resource, if one exists} - VerInfoSize := GetFileVersionInfoSize(PChar(Application.ExeName), - GetInfoSizeJunk); - - {if there was a version information resource available...} - - if VerInfoSize>0 then - begin - {retrieve enough memory to hold the version resource} - GetMem(VersionInfo, VerInfoSize); - - {retrieve the version resource for the selected file} - GetFileVersionInfo(PChar(Application.ExeName), 0, - VerInfoSize, VersionInfo); - - {retrieve a pointer to the translation table} - VerQueryValue(VersionInfo, '\\VarFileInfo\\Translation', - Translation, VersionInfoSize); - - {initialize the version value request string} - VersionValue :='\\StringFileInfo\\'+ - IntToHex(LoWord(LongInt(Translation^)),4)+ - IntToHex(HiWord(LongInt(Translation^)),4)+ - '\\'; - - {retrieve and display the file version} - VerQueryValue(VersionInfo, PChar(VersionValue+'FileVersion'), InfoPointer, - VersionInfoSize); - Version := string(PChar(InfoPointer)); - - {retrieve and display the product name} - VerQueryValue(VersionInfo, PChar(VersionValue+'ProductName'), InfoPointer, - VersionInfoSize); - ProductName := string(PChar(InfoPointer)); - - {free the version resource memory} - FreeMem(VersionInfo, VerInfoSize); - end - else - begin - Version := 'Not in File'; - ProductName := 'Not Identified In File'; - end; - if findfirst(Application.ExeName, faAnyFile, SearchRec) = 0 then - begin - WriteTime := SearchRec.Time; - DateTimeVal := FileDateToDateTime(WriteTime); - lblDate.Caption := FormatDateTime('mmmm dd, yyyy hh:nn',DateTimeVal); - end; -end; - -procedure ShowAboutBox; -begin - with TfrmVistAAbout.Create(Application) do - try - ShowModal; - finally - free; - end; -end; - -end. - - \ No newline at end of file diff --git a/BDK32/Samples/SharedRPCBroker/SilentSignOn/ReadMeForSamples.txt b/BDK32/Samples/SharedRPCBroker/SilentSignOn/ReadMeForSamples.txt deleted file mode 100644 index fb37eb5..0000000 --- a/BDK32/Samples/SharedRPCBroker/SilentSignOn/ReadMeForSamples.txt +++ /dev/null @@ -1,9 +0,0 @@ -The SilentSignOn(p13) directory under Samples contains four (4) sample programs that illustrate different aspects of patch XWB*1.1*13. Source code is included for each of these programs. - -The program XWBAppHandle1 is used to illustrate the use of the StartProgSLogin method in the RpcSLogin unit. This method is used to launch a second program (XWBAppHandle2) with a silent login using an AppHandle obtained from the server. The AppHandle and information about the server, listener port, and Division are passed on the command line when XWBAppHandle2 is launched. The StartProgSLogin method can also can be used to launch a non-RPCBroker related program and this can be demonstrated by entering the name of a program, and command line arguments if any, in an edit box prior to clicking the Start App2 button. This will launch the specified program without including any broker related arguments on the command line. - -The program XWBAppHandle2 is used to illustrate the use of the GetCmdLine method in the RpcSLogin unit. This method identifies command line arguments related to the RPCBroker (identified by p=, s=, h=, and d= for listener port, server, AppHandle, and Division, respectively). If the arguments include an AppHandle, the connection to the server is attempted as well. This application will display information about the user logged into the server. If an attempt is made to start the application manually, a message box is displayed asking whether the user wants to login manually. If the response is 'OK' the normal RPCBroker login screen is shown. If the response is 'Cancel' the application terminates. - -The program XWBAVCodes is used to illustrate a silent login in which the Access and Verify codes are provided by the program, as opposed to being entered in the RPCBroker login screen. - -The program XWBOnFail is used to illustrate the different types of error handling which are available in patch XWB*1.1*13. These include permitting the application to handle errors via a specified procedure call, to showing normal errors, to simply providing the error message for the application to examine while otherwise ignoring errors completely. \ No newline at end of file diff --git a/BDK32/Samples/SharedRPCBroker/SilentSignOn/XWBAVCodes.dof b/BDK32/Samples/SharedRPCBroker/SilentSignOn/XWBAVCodes.dof deleted file mode 100644 index c316fc5..0000000 --- a/BDK32/Samples/SharedRPCBroker/SilentSignOn/XWBAVCodes.dof +++ /dev/null @@ -1,82 +0,0 @@ -[Compiler] -A=1 -B=0 -C=1 -D=1 -E=0 -F=0 -G=1 -H=1 -I=1 -J=1 -K=0 -L=1 -M=0 -N=1 -O=1 -P=1 -Q=0 -R=0 -S=0 -T=0 -U=0 -V=1 -W=0 -X=1 -Y=1 -Z=1 -ShowHints=1 -ShowWarnings=1 -UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; -[Linker] -MapFile=0 -OutputObjs=0 -ConsoleApp=1 -DebugInfo=0 -RemoteSymbols=0 -MinStackSize=16384 -MaxStackSize=1048576 -ImageBase=4194304 -ExeDescription= -[Directories] -OutputDir= -UnitOutputDir= -PackageDLLOutputDir= -PackageDCPOutputDir= -SearchPath= -Packages=Vcl50;Vclx50;Vcldb50;Vclbde50;VclSmp50;vclado50;ibevnt50;vcldbx50;Qrpt50;TeeUI50;TeeDB50;Tee50;Dss50;TeeQR50;VCLIB50;Vclmid50;vclie50;Inetdb50;Inet50;NMFast50;webmid50;dclocx50;dclaxserver50;JLITestFDE;Rz252N50;Rz252D50;CS20Comps50;CSP20I50;gmunitsd5;gmctrlsd5;gmchrtedd5;gmdaouid5;GMDaod5;gmdbgend5;gmdbctrld5;gmadouid5;GMAdod5;democomponentsd5;Speech;Indy50;vclPerfUtils5;SharedRPCBroker_R50;XWB_R50;TMSColList;osg5220;osdg5220;CPRSctrls_50;KeaBroker_R50;ZipMasterD5;ICSDEL50;TCynthesisAppUpdateD5;Fmdc_R50;CodeRush50;CR_FormPopupFix50;CR_Standard50;Aruser;XUtilsR50;XUDT_R50;XU_R50 -Conditionals= -DebugSourceDirs= -UsePackages=0 -[Parameters] -RunParams= -HostApplication= -[Language] -ActiveLang= -ProjectLang=$00000409 -RootDir= -[Version Info] -IncludeVerInfo=1 -AutoIncBuild=1 -MajorVer=1 -MinorVer=1 -Release=31 -Build=6 -Debug=0 -PreRelease=0 -Special=0 -Private=0 -DLL=0 -Locale=1033 -CodePage=1252 -[Version Info Keys] -CompanyName=Dept of Veteran Affairs, VHA, OI, SD&D, IIS -FileDescription=Sample Silent Login with lmAVCodes -FileVersion=1.1.31.6 -InternalName=a -LegalCopyright=(c) 2002 -LegalTrademarks= -OriginalFilename= -ProductName=XWBAVCodes -ProductVersion=1.1.31.0 -Comments= diff --git a/BDK32/Samples/SharedRPCBroker/SilentSignOn/XWBAVCodes.dpr b/BDK32/Samples/SharedRPCBroker/SilentSignOn/XWBAVCodes.dpr deleted file mode 100644 index 810ab33..0000000 --- a/BDK32/Samples/SharedRPCBroker/SilentSignOn/XWBAVCodes.dpr +++ /dev/null @@ -1,15 +0,0 @@ -program XWBAVCodes; - -uses - Forms, - fXWBAVCodes in 'fXWBAVCodes.pas' {Form1}, - frmVistAAbout in 'frmVistAAbout.pas' {frmVistAAbout}; - -{$R *.RES} - -begin - Application.Initialize; - Application.Title := 'Test4Silent'; - Application.CreateForm(TForm1, Form1); - Application.Run; -end. diff --git a/BDK32/Samples/SharedRPCBroker/SilentSignOn/XWBAVCodes.exe b/BDK32/Samples/SharedRPCBroker/SilentSignOn/XWBAVCodes.exe deleted file mode 100644 index 1b6a1b4..0000000 Binary files a/BDK32/Samples/SharedRPCBroker/SilentSignOn/XWBAVCodes.exe and /dev/null differ diff --git a/BDK32/Samples/SharedRPCBroker/SilentSignOn/XWBAVCodes.res b/BDK32/Samples/SharedRPCBroker/SilentSignOn/XWBAVCodes.res deleted file mode 100644 index f897c89..0000000 Binary files a/BDK32/Samples/SharedRPCBroker/SilentSignOn/XWBAVCodes.res and /dev/null differ diff --git a/BDK32/Samples/SharedRPCBroker/SilentSignOn/XWBAppHandle1.dof b/BDK32/Samples/SharedRPCBroker/SilentSignOn/XWBAppHandle1.dof deleted file mode 100644 index 5e0bad4..0000000 --- a/BDK32/Samples/SharedRPCBroker/SilentSignOn/XWBAppHandle1.dof +++ /dev/null @@ -1,82 +0,0 @@ -[Compiler] -A=1 -B=0 -C=1 -D=1 -E=0 -F=0 -G=1 -H=1 -I=1 -J=1 -K=0 -L=1 -M=0 -N=1 -O=1 -P=1 -Q=0 -R=0 -S=0 -T=0 -U=0 -V=1 -W=0 -X=1 -Y=1 -Z=1 -ShowHints=1 -ShowWarnings=1 -UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; -[Linker] -MapFile=0 -OutputObjs=0 -ConsoleApp=1 -DebugInfo=0 -RemoteSymbols=0 -MinStackSize=16384 -MaxStackSize=1048576 -ImageBase=4194304 -ExeDescription= -[Directories] -OutputDir= -UnitOutputDir= -PackageDLLOutputDir= -PackageDCPOutputDir= -SearchPath= -Packages= -Conditionals= -DebugSourceDirs= -UsePackages=0 -[Parameters] -RunParams= -HostApplication= -[Language] -ActiveLang= -ProjectLang=$00000409 -RootDir= -[Version Info] -IncludeVerInfo=1 -AutoIncBuild=1 -MajorVer=1 -MinorVer=1 -Release=31 -Build=7 -Debug=0 -PreRelease=0 -Special=0 -Private=0 -DLL=0 -Locale=1033 -CodePage=1252 -[Version Info Keys] -CompanyName=Dept. of Veteran Affairs, VHA, OI, SD&D, IIS -FileDescription=Example program launching another program using the lmAppHandle silent login -FileVersion=1.1.31.7 -InternalName= -LegalCopyright=(c) 2002 -LegalTrademarks= -OriginalFilename= -ProductName=XWBAppHandle1 -ProductVersion=1.1.31.0 -Comments= diff --git a/BDK32/Samples/SharedRPCBroker/SilentSignOn/XWBAppHandle1.dpr b/BDK32/Samples/SharedRPCBroker/SilentSignOn/XWBAppHandle1.dpr deleted file mode 100644 index 3dcac92..0000000 --- a/BDK32/Samples/SharedRPCBroker/SilentSignOn/XWBAppHandle1.dpr +++ /dev/null @@ -1,13 +0,0 @@ -program XWBAppHandle1; - -uses - Forms, - fXWBAppHandle1 in 'fXWBAppHandle1.pas' {Form1}; - -{$R *.RES} - -begin - Application.Initialize; - Application.CreateForm(TForm1, Form1); - Application.Run; -end. diff --git a/BDK32/Samples/SharedRPCBroker/SilentSignOn/XWBAppHandle1.exe b/BDK32/Samples/SharedRPCBroker/SilentSignOn/XWBAppHandle1.exe deleted file mode 100644 index 95aacb9..0000000 Binary files a/BDK32/Samples/SharedRPCBroker/SilentSignOn/XWBAppHandle1.exe and /dev/null differ diff --git a/BDK32/Samples/SharedRPCBroker/SilentSignOn/XWBAppHandle1.res b/BDK32/Samples/SharedRPCBroker/SilentSignOn/XWBAppHandle1.res deleted file mode 100644 index 18f281e..0000000 Binary files a/BDK32/Samples/SharedRPCBroker/SilentSignOn/XWBAppHandle1.res and /dev/null differ diff --git a/BDK32/Samples/SharedRPCBroker/SilentSignOn/XWBAppHandle2.dof b/BDK32/Samples/SharedRPCBroker/SilentSignOn/XWBAppHandle2.dof deleted file mode 100644 index a4622aa..0000000 --- a/BDK32/Samples/SharedRPCBroker/SilentSignOn/XWBAppHandle2.dof +++ /dev/null @@ -1,82 +0,0 @@ -[Compiler] -A=1 -B=0 -C=1 -D=1 -E=0 -F=0 -G=1 -H=1 -I=1 -J=1 -K=0 -L=1 -M=0 -N=1 -O=1 -P=1 -Q=0 -R=0 -S=0 -T=0 -U=0 -V=1 -W=0 -X=1 -Y=1 -Z=1 -ShowHints=1 -ShowWarnings=1 -UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; -[Linker] -MapFile=0 -OutputObjs=0 -ConsoleApp=1 -DebugInfo=0 -RemoteSymbols=0 -MinStackSize=16384 -MaxStackSize=1048576 -ImageBase=4194304 -ExeDescription= -[Directories] -OutputDir= -UnitOutputDir= -PackageDLLOutputDir= -PackageDCPOutputDir= -SearchPath= -Packages= -Conditionals= -DebugSourceDirs= -UsePackages=0 -[Parameters] -RunParams= -HostApplication= -[Language] -ActiveLang= -ProjectLang=$00000409 -RootDir= -[Version Info] -IncludeVerInfo=1 -AutoIncBuild=1 -MajorVer=1 -MinorVer=1 -Release=31 -Build=5 -Debug=0 -PreRelease=0 -Special=0 -Private=0 -DLL=0 -Locale=1033 -CodePage=1252 -[Version Info Keys] -CompanyName=Dept. of Veteran Affairs, VHA, OI, SD&D, IIS -FileDescription=Example program of starting an application using an AppHandle token -FileVersion=1.1.31.5 -InternalName= -LegalCopyright=(c) 2002 -LegalTrademarks= -OriginalFilename= -ProductName=XWBAppHandle2 -ProductVersion=1.1.31.0 -Comments= diff --git a/BDK32/Samples/SharedRPCBroker/SilentSignOn/XWBAppHandle2.dpr b/BDK32/Samples/SharedRPCBroker/SilentSignOn/XWBAppHandle2.dpr deleted file mode 100644 index 7b19c97..0000000 --- a/BDK32/Samples/SharedRPCBroker/SilentSignOn/XWBAppHandle2.dpr +++ /dev/null @@ -1,13 +0,0 @@ -program XWBAppHandle2; - -uses - Forms, - fXWBAppHandle2 in 'fXWBAppHandle2.pas' {Form1}; - -{$R *.RES} - -begin - Application.Initialize; - Application.CreateForm(TForm1, Form1); - Application.Run; -end. diff --git a/BDK32/Samples/SharedRPCBroker/SilentSignOn/XWBAppHandle2.exe b/BDK32/Samples/SharedRPCBroker/SilentSignOn/XWBAppHandle2.exe deleted file mode 100644 index dbc51ec..0000000 Binary files a/BDK32/Samples/SharedRPCBroker/SilentSignOn/XWBAppHandle2.exe and /dev/null differ diff --git a/BDK32/Samples/SharedRPCBroker/SilentSignOn/XWBAppHandle2.res b/BDK32/Samples/SharedRPCBroker/SilentSignOn/XWBAppHandle2.res deleted file mode 100644 index f4bcb4b..0000000 Binary files a/BDK32/Samples/SharedRPCBroker/SilentSignOn/XWBAppHandle2.res and /dev/null differ diff --git a/BDK32/Samples/SharedRPCBroker/SilentSignOn/XWBOnFail.dof b/BDK32/Samples/SharedRPCBroker/SilentSignOn/XWBOnFail.dof deleted file mode 100644 index 9f7a2fb..0000000 --- a/BDK32/Samples/SharedRPCBroker/SilentSignOn/XWBOnFail.dof +++ /dev/null @@ -1,82 +0,0 @@ -[Compiler] -A=1 -B=0 -C=1 -D=1 -E=0 -F=0 -G=1 -H=1 -I=1 -J=1 -K=0 -L=1 -M=0 -N=1 -O=1 -P=1 -Q=0 -R=0 -S=0 -T=0 -U=0 -V=1 -W=0 -X=1 -Y=1 -Z=1 -ShowHints=1 -ShowWarnings=1 -UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; -[Linker] -MapFile=0 -OutputObjs=0 -ConsoleApp=1 -DebugInfo=0 -RemoteSymbols=0 -MinStackSize=16384 -MaxStackSize=1048576 -ImageBase=4194304 -ExeDescription= -[Directories] -OutputDir= -UnitOutputDir= -PackageDLLOutputDir= -PackageDCPOutputDir= -SearchPath= -Packages= -Conditionals= -DebugSourceDirs= -UsePackages=0 -[Parameters] -RunParams= -HostApplication= -[Language] -ActiveLang= -ProjectLang=$00000409 -RootDir= -[Version Info] -IncludeVerInfo=1 -AutoIncBuild=1 -MajorVer=1 -MinorVer=1 -Release=31 -Build=8 -Debug=0 -PreRelease=0 -Special=0 -Private=0 -DLL=0 -Locale=1033 -CodePage=1252 -[Version Info Keys] -CompanyName=Dept of Veteran Affairs, VHA, OI, SD&D, IIS -FileDescription=Example of available error handling mechanisms for RPCBroker -FileVersion=1.1.31.8 -InternalName= -LegalCopyright=(c) 2002 -LegalTrademarks= -OriginalFilename= -ProductName=XWBOnFail -ProductVersion=1.1.31.0 -Comments= diff --git a/BDK32/Samples/SharedRPCBroker/SilentSignOn/XWBOnFail.dpr b/BDK32/Samples/SharedRPCBroker/SilentSignOn/XWBOnFail.dpr deleted file mode 100644 index c354556..0000000 --- a/BDK32/Samples/SharedRPCBroker/SilentSignOn/XWBOnFail.dpr +++ /dev/null @@ -1,13 +0,0 @@ -program XWBOnFail; - -uses - Forms, - fXWBOnFail in 'fXWBOnFail.pas' {frmXWBOnFail}; - -{$R *.RES} - -begin - Application.Initialize; - Application.CreateForm(TfrmXWBOnFail, frmXWBOnFail); - Application.Run; -end. diff --git a/BDK32/Samples/SharedRPCBroker/SilentSignOn/XWBOnFail.exe b/BDK32/Samples/SharedRPCBroker/SilentSignOn/XWBOnFail.exe deleted file mode 100644 index ac7ac33..0000000 Binary files a/BDK32/Samples/SharedRPCBroker/SilentSignOn/XWBOnFail.exe and /dev/null differ diff --git a/BDK32/Samples/SharedRPCBroker/SilentSignOn/XWBOnFail.res b/BDK32/Samples/SharedRPCBroker/SilentSignOn/XWBOnFail.res deleted file mode 100644 index 2c9a35c..0000000 Binary files a/BDK32/Samples/SharedRPCBroker/SilentSignOn/XWBOnFail.res and /dev/null differ diff --git a/BDK32/Samples/SharedRPCBroker/SilentSignOn/fXWBAVCodes.dfm b/BDK32/Samples/SharedRPCBroker/SilentSignOn/fXWBAVCodes.dfm deleted file mode 100644 index cefb738..0000000 --- a/BDK32/Samples/SharedRPCBroker/SilentSignOn/fXWBAVCodes.dfm +++ /dev/null @@ -1,231 +0,0 @@ -object Form1: TForm1 - Left = 190 - Top = 138 - Width = 574 - Height = 393 - Caption = - 'XWBAVCodes - Silent Login with lmAVCodes (XWB*1.1*40 SharedRPCBr' + - 'oker)' - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'MS Sans Serif' - Font.Style = [] - Menu = MainMenu1 - OldCreateOrder = True - PixelsPerInch = 96 - TextHeight = 13 - object lblAccessCode: TLabel - Left = 24 - Top = 71 - Width = 79 - Height = 13 - Caption = 'Access Code:' - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'MS Sans Serif' - Font.Style = [fsBold] - ParentFont = False - end - object lblVerifyCode: TLabel - Left = 24 - Top = 96 - Width = 70 - Height = 13 - Caption = 'Verify Code:' - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'MS Sans Serif' - Font.Style = [fsBold] - ParentFont = False - end - object lblDUZ: TLabel - Left = 48 - Top = 176 - Width = 26 - Height = 13 - Caption = 'DUZ:' - end - object lblName: TLabel - Left = 48 - Top = 216 - Width = 31 - Height = 13 - Caption = 'Name:' - end - object lblDTime: TLabel - Left = 48 - Top = 256 - Width = 34 - Height = 13 - Caption = 'DTime:' - end - object lblUserName: TLabel - Left = 48 - Top = 288 - Width = 56 - Height = 13 - Caption = 'User Name:' - end - object lblServer: TLabel - Left = 24 - Top = 21 - Width = 42 - Height = 13 - Caption = 'Server:' - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'MS Sans Serif' - Font.Style = [fsBold] - ParentFont = False - end - object lblListenerPort: TLabel - Left = 24 - Top = 46 - Width = 73 - Height = 13 - Caption = 'ListenerPort:' - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'MS Sans Serif' - Font.Style = [fsBold] - ParentFont = False - end - object edtDUZ: TEdit - Left = 112 - Top = 168 - Width = 233 - Height = 21 - TabOrder = 3 - end - object edtName: TEdit - Left = 112 - Top = 208 - Width = 233 - Height = 21 - TabOrder = 2 - end - object edtDTime: TEdit - Left = 112 - Top = 248 - Width = 233 - Height = 21 - TabOrder = 1 - end - object edtUserName: TEdit - Left = 112 - Top = 280 - Width = 233 - Height = 21 - TabOrder = 0 - end - object btnConnect: TButton - Left = 175 - Top = 128 - Width = 75 - Height = 25 - Caption = 'Connect' - Default = True - TabOrder = 8 - OnClick = btnConnectClick - end - object edtAccessCode: TEdit - Left = 112 - Top = 66 - Width = 249 - Height = 21 - PasswordChar = '*' - TabOrder = 6 - end - object edtVerifyCode: TEdit - Left = 112 - Top = 91 - Width = 249 - Height = 21 - PasswordChar = '*' - TabOrder = 7 - end - object btnExit: TButton - Left = 174 - Top = 312 - Width = 75 - Height = 25 - Caption = 'Exit' - TabOrder = 9 - OnClick = btnExitClick - end - object edtServer: TEdit - Left = 112 - Top = 16 - Width = 249 - Height = 21 - TabOrder = 4 - end - object edtListenerPort: TEdit - Left = 112 - Top = 41 - Width = 105 - Height = 21 - TabOrder = 5 - end - object Memo1: TMemo - Left = 384 - Top = 16 - Width = 153 - Height = 233 - Lines.Strings = ( - 'This application provides an ' - 'example of a silent login. The ' - 'server, Listener Port, Access ' - 'Code, and Verify Code need to ' - 'be filled in - these data would ' - 'be supplied in some manner for ' - 'a silent login (Division can also ' - 'be supplied for a multidivision ' - 'individual). After fillng in the ' - 'information enter Return or ' - 'click on the Connect button. ' - 'The connection should be ' - 'made without the broker login ' - 'form appearing. User ' - 'information will be filled in for ' - 'the logged in user.') - TabOrder = 10 - end - object MainMenu1: TMainMenu - Left = 24 - Top = 144 - object mnuFile: TMenuItem - Caption = '&File' - object mnuFileExit: TMenuItem - Caption = 'E&xit' - OnClick = mnuFileExitClick - end - end - object mnuHelp: TMenuItem - Caption = '&Help' - object mnuHelpAbout: TMenuItem - Caption = '&About' - OnClick = mnuHelpAboutClick - end - end - end - object brkrRPCB: TSharedRPCBroker - ClearParameters = True - ClearResults = True - ListenerPort = 0 - RpcVersion = '0' - LogIn.Mode = lmAVCodes - LogIn.PromptDivision = False - OldConnectionOnly = False - AllowShared = True - RPCTimeLimit = 30 - Left = 32 - Top = 312 - end -end diff --git a/BDK32/Samples/SharedRPCBroker/SilentSignOn/fXWBAVCodes.pas b/BDK32/Samples/SharedRPCBroker/SilentSignOn/fXWBAVCodes.pas deleted file mode 100644 index 2551711..0000000 --- a/BDK32/Samples/SharedRPCBroker/SilentSignOn/fXWBAVCodes.pas +++ /dev/null @@ -1,129 +0,0 @@ -unit fXWBAVCodes; - -interface - -uses - Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, - StdCtrls, Trpcb, RpcSLogin, Menus, frmVistAAbout, SharedRPCBroker; - -type - TForm1 = class(TForm) - edtDUZ: TEdit; - edtName: TEdit; - edtDTime: TEdit; - edtUserName: TEdit; - btnConnect: TButton; - edtAccessCode: TEdit; - edtVerifyCode: TEdit; - lblAccessCode: TLabel; - lblVerifyCode: TLabel; - btnExit: TButton; - lblDUZ: TLabel; - lblName: TLabel; - lblDTime: TLabel; - lblUserName: TLabel; - edtServer: TEdit; - edtListenerPort: TEdit; - lblServer: TLabel; - lblListenerPort: TLabel; - Memo1: TMemo; - MainMenu1: TMainMenu; - mnuFile: TMenuItem; - mnuFileExit: TMenuItem; - mnuHelp: TMenuItem; - mnuHelpAbout: TMenuItem; - brkrRPCB: TSharedRPCBroker; - procedure btnConnectClick(Sender: TObject); - procedure btnExitClick(Sender: TObject); - procedure mnuFileExitClick(Sender: TObject); - procedure mnuHelpAboutClick(Sender: TObject); - private - { Private declarations } - public - { Public declarations } - end; - -var - Form1: TForm1; - Login: TVistaLogin; - -implementation - -{$R *.DFM} - -procedure TForm1.btnConnectClick(Sender: TObject); -var - NChars: Cardinal; - NameBuffer: PChar; -begin - if btnConnect.Caption = 'Connect' then - begin - { check data there for silent login } - if (edtAccessCode.Text = '') or - (edtVerifyCode.Text = '') or - (edtServer.Text = '') or - (edtListenerPort.Text = '') then - ShowMessage('The four Bold edit boxes must be filled in before the connection can be made.') - else - begin - { set up for silent login } - with BrkrRPCB do - begin - Login.AccessCode := edtAccessCode.Text; - Login.VerifyCode := edtVerifyCode.Text; - Server := edtServer.Text; - ListenerPort := StrToInt(edtListenerPort.Text); - KernelLogin := False; - Login.Mode := lmAVCodes; - Login.PromptDivision := True; - Connected := True; - - if Connected = True then - begin - GetUserInfo(brkrRPCB); - edtDUZ.Text := User.DUZ; - edtName.Text := User.Name; - edtDTime.Text := User.DTime; - - { Get local username as well } - NChars := 0; - GetUserName(nil,NChars); - NameBuffer := StrAlloc(NChars); - if GetUserName(NameBuffer, NChars) then - edtUserName.Text := StrPas(NameBuffer) - else - edtUserName.Text := 'Can''t get name'; - btnConnect.Caption := 'Disconnect'; - btnExit.Default := True; - btnConnect.Default := False; - end; // if Connected = True - end; // with brkrRPCB do - end; // else - end // if btnConnect.Caption - else - begin - brkrRPCB.Connected := False; - btnConnect.Caption := 'Connect'; - end; - edtAccessCode.Text := ''; - edtVerifyCode.Text := ''; - Application.ProcessMessages; -end; - -procedure TForm1.btnExitClick(Sender: TObject); -begin - halt; -end; - -procedure TForm1.mnuFileExitClick(Sender: TObject); -begin - halt; -end; - -procedure TForm1.mnuHelpAboutClick(Sender: TObject); -begin - ShowAboutBox; -end; - -end. - \ No newline at end of file diff --git a/BDK32/Samples/SharedRPCBroker/SilentSignOn/fXWBAppHandle1.dfm b/BDK32/Samples/SharedRPCBroker/SilentSignOn/fXWBAppHandle1.dfm deleted file mode 100644 index 0cd99f8..0000000 --- a/BDK32/Samples/SharedRPCBroker/SilentSignOn/fXWBAppHandle1.dfm +++ /dev/null @@ -1,138 +0,0 @@ -object Form1: TForm1 - Left = 230 - Top = 122 - Width = 503 - Height = 319 - Caption = - 'XWBAppHandle1 -- use of lmAppHandle to start a second applicatio' + - 'n' - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'MS Sans Serif' - Font.Style = [] - Menu = MainMenu1 - OldCreateOrder = True - PixelsPerInch = 96 - TextHeight = 13 - object lblOtherProgram: TLabel - Left = 44 - Top = 176 - Width = 71 - Height = 13 - Caption = 'Other Program:' - end - object lblOptional: TLabel - Left = 52 - Top = 192 - Width = 45 - Height = 13 - Caption = '(Optional)' - end - object lblWithFull: TLabel - Left = 124 - Top = 200 - Width = 232 - Height = 13 - Caption = 'With Full Directory Path if not on the System Path' - end - object btnConnect: TButton - Left = 85 - Top = 232 - Width = 75 - Height = 25 - Caption = '&Connect' - TabOrder = 0 - OnClick = btnConnectClick - end - object btnStartApp2: TButton - Left = 210 - Top = 232 - Width = 75 - Height = 25 - Caption = 'Start App2' - TabOrder = 1 - OnClick = btnStartApp2Click - end - object edtOtherProgram: TEdit - Left = 124 - Top = 168 - Width = 233 - Height = 21 - TabOrder = 2 - end - object Memo1: TMemo - Left = 31 - Top = 8 - Width = 433 - Height = 153 - Lines.Strings = ( - - 'This application can be used to start other programs, including ' + - 'ones that use the ' - - 'RPCBroker for connection to a server using a server generated to' + - 'ken.' - '' - - 'To connect with the server, simply press the connect button to s' + - 'elect a server/listener port ' - - 'combination, then sign in. After you are signed in, you can sta' + - 'rt another Broker application ' - - '(XWBAppHandle2) by simply clicking on the "Start App2" button (w' + - 'ith the Other Program ' - 'edit box empty of text).' - '' - - 'A program such as Notepad with or without command line arguments' + - ', can be started at ' - - 'any time by entering the name (and arguments if any) in the Othe' + - 'r Program edit box, then ' - 'clicking on the Start App2 button.' - '') - TabOrder = 3 - end - object btnExit: TButton - Left = 335 - Top = 232 - Width = 75 - Height = 25 - Caption = 'Exit' - TabOrder = 4 - OnClick = btnExitClick - end - object MainMenu1: TMainMenu - Left = 8 - Top = 184 - object File1: TMenuItem - Caption = '&File' - object Exit1: TMenuItem - Caption = '&E&xit' - OnClick = Exit1Click - end - end - object Help1: TMenuItem - Caption = '&Help' - object About1: TMenuItem - Caption = '&About' - OnClick = About1Click - end - end - end - object brkrRPCB: TSharedRPCBroker - ClearParameters = True - ClearResults = True - ListenerPort = 0 - RpcVersion = '0' - LogIn.Mode = lmAVCodes - LogIn.PromptDivision = False - AllowShared = True - RPCTimeLimit = 30 - Left = 32 - Top = 232 - end -end diff --git a/BDK32/Samples/SharedRPCBroker/SilentSignOn/fXWBAppHandle1.pas b/BDK32/Samples/SharedRPCBroker/SilentSignOn/fXWBAppHandle1.pas deleted file mode 100644 index 3158098..0000000 --- a/BDK32/Samples/SharedRPCBroker/SilentSignOn/fXWBAppHandle1.pas +++ /dev/null @@ -1,99 +0,0 @@ -unit fXWBAppHandle1; - -interface - -uses - Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, - StdCtrls, RpcSlogin, Trpcb, RpcConf1, frmVistAAbout, Menus, - SharedRPCBroker; - -type - TForm1 = class(TForm) - btnConnect: TButton; - btnStartApp2: TButton; - edtOtherProgram: TEdit; - lblOtherProgram: TLabel; - lblOptional: TLabel; - lblWithFull: TLabel; - Memo1: TMemo; - btnExit: TButton; - MainMenu1: TMainMenu; - File1: TMenuItem; - Exit1: TMenuItem; - Help1: TMenuItem; - About1: TMenuItem; - brkrRPCB: TSharedRPCBroker; - procedure btnConnectClick(Sender: TObject); - procedure btnStartApp2Click(Sender: TObject); - procedure btnExitClick(Sender: TObject); - procedure Exit1Click(Sender: TObject); - procedure About1Click(Sender: TObject); - private - { Private declarations } - public - { Public declarations } - end; - -var - Form1: TForm1; - -implementation - -{$R *.DFM} - - -procedure TForm1.btnConnectClick(Sender: TObject); -var - Server, Port: String; -begin - if btnConnect.Caption = '&Connect' then - begin - GetServerInfo(Server, Port); - brkrRPCB.Server := Server; - brkrRPCB.ListenerPort := StrToInt(Port); - brkrRPCB.Connected := True; - if brkrRPCB.Connected then - btnConnect.Caption := '&Disconnect'; - end - else - begin - brkrRPCB.Connected := False; - btnConnect.Caption := '&Connect'; - end; -end; - -procedure TForm1.btnStartApp2Click(Sender: TObject); -var - CurDir: String; -begin - if edtOtherProgram.Text <> '' then - begin - CurDir := edtOtherProgram.Text; - StartProgSLogin(CurDir,nil); - end - else - begin - { Use Test2.exe and expecting it to be in the startup directory for the current application} - CurDir := ExtractFilePath(ParamStr(0)) + 'XWBAppHandle2.exe'; - - { Now start application with silent login } - StartProgSLogin(CurDir, brkrRPCB); - end; -end; - -procedure TForm1.btnExitClick(Sender: TObject); -begin - halt; -end; - -procedure TForm1.Exit1Click(Sender: TObject); -begin - Halt; -end; - -procedure TForm1.About1Click(Sender: TObject); -begin - ShowAboutBox; -end; - -end. diff --git a/BDK32/Samples/SharedRPCBroker/SilentSignOn/fXWBAppHandle2.dfm b/BDK32/Samples/SharedRPCBroker/SilentSignOn/fXWBAppHandle2.dfm deleted file mode 100644 index 133ad4b..0000000 --- a/BDK32/Samples/SharedRPCBroker/SilentSignOn/fXWBAppHandle2.dfm +++ /dev/null @@ -1,133 +0,0 @@ -object Form1: TForm1 - Left = 201 - Top = 168 - Width = 460 - Height = 279 - Caption = 'XWBAppHandle2 - Started by lmAppHandle (RPCBroker)' - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'MS Sans Serif' - Font.Style = [] - Menu = MainMenu1 - OldCreateOrder = True - OnCreate = FormCreate - PixelsPerInch = 96 - TextHeight = 13 - object lblDUZ: TLabel - Left = 54 - Top = 17 - Width = 23 - Height = 13 - Caption = 'DUZ' - end - object lblName: TLabel - Left = 54 - Top = 51 - Width = 28 - Height = 13 - Caption = 'Name' - end - object lblDTime: TLabel - Left = 54 - Top = 84 - Width = 31 - Height = 13 - Caption = 'DTime' - end - object lblDivision: TLabel - Left = 54 - Top = 118 - Width = 37 - Height = 13 - Caption = 'Division' - end - object lblUserName: TLabel - Left = 54 - Top = 152 - Width = 50 - Height = 13 - Caption = 'UserName' - end - object edtDuz: TEdit - Left = 118 - Top = 8 - Width = 280 - Height = 21 - TabStop = False - TabOrder = 0 - end - object edtName: TEdit - Left = 118 - Top = 42 - Width = 280 - Height = 21 - TabStop = False - TabOrder = 2 - end - object edtDTime: TEdit - Left = 118 - Top = 76 - Width = 280 - Height = 21 - TabStop = False - TabOrder = 3 - end - object edtUserName: TEdit - Left = 118 - Top = 143 - Width = 280 - Height = 21 - TabStop = False - TabOrder = 4 - end - object btnClose: TButton - Left = 188 - Top = 192 - Width = 75 - Height = 25 - Caption = 'Close' - Default = True - TabOrder = 1 - OnClick = btnCloseClick - end - object edtDivision: TEdit - Left = 118 - Top = 109 - Width = 280 - Height = 21 - TabStop = False - TabOrder = 5 - end - object MainMenu1: TMainMenu - Left = 8 - Top = 40 - object File1: TMenuItem - Caption = '&File' - object Exit1: TMenuItem - Caption = 'E&xit' - OnClick = Exit1Click - end - end - object About1: TMenuItem - Caption = '&Help' - object About2: TMenuItem - Caption = '&About' - OnClick = About2Click - end - end - end - object brkrRPCB: TSharedRPCBroker - ClearParameters = True - ClearResults = True - ListenerPort = 0 - RpcVersion = '0' - LogIn.Mode = lmAVCodes - LogIn.PromptDivision = False - AllowShared = True - RPCTimeLimit = 30 - Left = 24 - Top = 192 - end -end diff --git a/BDK32/Samples/SharedRPCBroker/SilentSignOn/fXWBAppHandle2.pas b/BDK32/Samples/SharedRPCBroker/SilentSignOn/fXWBAppHandle2.pas deleted file mode 100644 index 2e71fe9..0000000 --- a/BDK32/Samples/SharedRPCBroker/SilentSignOn/fXWBAppHandle2.pas +++ /dev/null @@ -1,102 +0,0 @@ -unit fXWBAppHandle2; - -interface - -uses - Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, - StdCtrls, Trpcb, RpcSLogin, RpcConf1, frmVistAAbout, Menus, - SharedRPCBroker; - -type - TForm1 = class(TForm) - edtDuz: TEdit; - edtName: TEdit; - edtDTime: TEdit; - edtUserName: TEdit; - btnClose: TButton; - edtDivision: TEdit; - lblDUZ: TLabel; - lblName: TLabel; - lblDTime: TLabel; - lblDivision: TLabel; - lblUserName: TLabel; - MainMenu1: TMainMenu; - File1: TMenuItem; - Exit1: TMenuItem; - About1: TMenuItem; - About2: TMenuItem; - brkrRPCB: TSharedRPCBroker; - procedure FormCreate(Sender: TObject); - procedure btnCloseClick(Sender: TObject); - procedure Exit1Click(Sender: TObject); - procedure About2Click(Sender: TObject); - private - { Private declarations } - public - { Public declarations } - end; - -var - Form1: TForm1; - Login: TVistaLogin; - -implementation - -{$R *.DFM} - - - -procedure TForm1.FormCreate(Sender: TObject); -var - NChars: Cardinal; - NameBuffer: PChar; - Server, Port: String; -begin - { check for silent login data on command line } - if not CheckCmdLine(brkrRPCB) then - begin // Couldn't log on via command line give choice - if Application.MessageBox('Can''t connect by command line arguments, do you want to connect anyway?','Silent Connection Error', MB_OKCANCEL + MB_DEFBUTTON1) = IDOK then - begin - GetServerInfo(Server, Port); - brkrRPCB.Server := Server; - brkrRPCB.ListenerPort := StrToInt(Port); - Caption := 'XWBAppHandle2 - Started by normal sign-on' - end - else - halt; - end; - - { Get and display information on logged in user } - GetUserInfo(brkrRPCB); - edtDUZ.Text := brkrRPCB.User.DUZ; - edtName.Text := brkrRPCB.User.Name; - edtDTime.Text := brkrRPCB.User.DTime; - edtDivision.Text := brkrRPCB.User.Division; - - {also show local username } - NChars := 0; - GetUserName(nil,NChars); - NameBuffer := StrAlloc(NChars); - if GetUserName(NameBuffer, NChars) then - edtUserName.Text := NameBuffer - else - edtUserName.Text := 'Can''t get name'; -end; - - -procedure TForm1.btnCloseClick(Sender: TObject); -begin - halt; -end; - -procedure TForm1.Exit1Click(Sender: TObject); -begin - Halt; -end; - -procedure TForm1.About2Click(Sender: TObject); -begin - ShowAboutBox; -end; - -end. diff --git a/BDK32/Samples/SharedRPCBroker/SilentSignOn/fXWBOnFail.dfm b/BDK32/Samples/SharedRPCBroker/SilentSignOn/fXWBOnFail.dfm deleted file mode 100644 index 0381667..0000000 --- a/BDK32/Samples/SharedRPCBroker/SilentSignOn/fXWBOnFail.dfm +++ /dev/null @@ -1,178 +0,0 @@ -object frmXWBOnFail: TfrmXWBOnFail - Left = 207 - Top = 127 - Width = 509 - Height = 343 - Caption = 'XWBOnFail - Error Handling Demo (XWB*1.1*40 SharedRPCBroker)' - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'MS Sans Serif' - Font.Style = [] - Menu = MainMenu1 - OldCreateOrder = False - OnCreate = FormCreate - PixelsPerInch = 96 - TextHeight = 13 - object lblLogin_ErrorText: TLabel - Left = 24 - Top = 40 - Width = 75 - Height = 13 - Caption = 'Login_ErrorText' - end - object btnConnect: TButton - Left = 213 - Top = 256 - Width = 75 - Height = 25 - Caption = 'Connect' - TabOrder = 0 - OnClick = btnConnectClick - end - object rgrSelectAction: TRadioGroup - Left = 268 - Top = 64 - Width = 217 - Height = 137 - Caption = 'Select Action' - ItemIndex = 1 - Items.Strings = ( - 'Use OnRPCBFailure property routine' - 'Show Message Boxes' - 'Capture Text Only') - TabOrder = 1 - end - object btnExit: TButton - Left = 410 - Top = 256 - Width = 75 - Height = 25 - Caption = 'Exit' - TabOrder = 2 - OnClick = btnExitClick - end - object Memo1: TMemo - Left = 16 - Top = 64 - Width = 217 - Height = 169 - Lines.Strings = ( - 'This is an example application to illustrate ' - 'the effects of TRPCBroker properties ' - 'related to Error Handling.' - '' - 'The OnRPCBFailure property can be set ' - 'to a procedure to handle errors without ' - 'user interaction. In the sample included ' - 'here, the error handler will save the error ' - 'message and a date/time stamp to a file ' - 'named "Error.Log" in the same directory ' - 'with the application program. YOU WILL ' - 'NOT SEE AN ERROR MESSAGE IN ' - 'THIS CASE!' - '' - 'If OnRPCBFailure property is not ' - 'assigned to a procedure, errors by default ' - 'would be shown in a message box ' - 'created by the TRPCBroker component. ' - 'This behavior is controlled by the ' - 'ShowErrorMsgs property, with a default ' - 'of semShow (Show Message Boxes). ' - '' - 'If the ShowErrorMsgs property is set to ' - 'semRaise (Don'#39't Show Message Boxes), ' - 'the error will be permitted to be handled ' - 'by a higher part of the application. In ' - 'most cases this will produce an error ' - 'dialog box generated by the system in ' - 'general.' - '' - 'If the ShowErrorMsgs property is set to ' - 'semSet (Capture Text Only), there will be ' - 'no error action taken except for the ' - 'setting of error messages into the ' - 'RPCBError and/or Login.ErrorText ' - 'properties. In this case, the application ' - 'MUST check these properties ' - 'immediately after a call to the RPCBroker ' - 'to determine whether any errors were ' - 'encountered and to determine the action ' - 'to be taken.' - '' - 'Select the type of behavior desired by ' - 'clicking on one of the options to the right.' - '' - 'Then press Connect and either cancel ' - 'during the log-in dialog or generate an ' - 'error in some other manner. If you are ' - 'connected, the button will change to ' - 'Disconnect and you can click on it to ' - 'disconnect from the server.' - '' - 'Checking the check box "Use Silent Bad ' - 'Access/Verify" to the left will set the ' - 'AccessVerifyCodes property to ' - #39'monkeysee;monkeydo'#39' which will cause ' - 'a silent login attempt and fails.' - '') - ScrollBars = ssVertical - TabOrder = 3 - end - object edtErrorText: TEdit - Left = 8 - Top = 8 - Width = 473 - Height = 21 - TabOrder = 4 - Text = 'RPCBroker_RPCBError property' - end - object edtLoginError: TEdit - Left = 104 - Top = 32 - Width = 225 - Height = 21 - TabOrder = 5 - Text = 'RPCBroker_Login_ErrorText Property' - end - object cbxBadAccess: TCheckBox - Left = 16 - Top = 256 - Width = 169 - Height = 17 - Caption = 'Use Silent Bad Access/Verify' - TabOrder = 6 - end - object MainMenu1: TMainMenu - Left = 112 - Top = 8 - object File1: TMenuItem - Caption = '&File' - object Exit1: TMenuItem - Caption = 'E&xit' - OnClick = Exit1Click - end - end - object Help1: TMenuItem - Caption = '&Help' - object About1: TMenuItem - Caption = '&About' - OnClick = About1Click - end - end - end - object RPCB: TSharedRPCBroker - ClearParameters = True - ClearResults = True - ListenerPort = 0 - RpcVersion = '0' - LogIn.Mode = lmAVCodes - LogIn.PromptDivision = False - OldConnectionOnly = False - AllowShared = True - RPCTimeLimit = 30 - Left = 8 - Top = 224 - end -end diff --git a/BDK32/Samples/SharedRPCBroker/SilentSignOn/fXWBOnFail.pas b/BDK32/Samples/SharedRPCBroker/SilentSignOn/fXWBOnFail.pas deleted file mode 100644 index 6ac3922..0000000 --- a/BDK32/Samples/SharedRPCBroker/SilentSignOn/fXWBOnFail.pas +++ /dev/null @@ -1,121 +0,0 @@ -unit fXWBOnFail; - -interface - -uses - Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, - StdCtrls, Trpcb, Rpcconf1, ExtCtrls, frmVistAAbout, Menus, - SharedRPCBroker; - -type - TfrmXWBOnFail = class(TForm) - btnConnect: TButton; - rgrSelectAction: TRadioGroup; - btnExit: TButton; - Memo1: TMemo; - edtErrorText: TEdit; - edtLoginError: TEdit; - lblLogin_ErrorText: TLabel; - cbxBadAccess: TCheckBox; - MainMenu1: TMainMenu; - File1: TMenuItem; - Exit1: TMenuItem; - Help1: TMenuItem; - About1: TMenuItem; - RPCB: TSharedRPCBroker; - procedure btnConnectClick(Sender: TObject); - procedure btnExitClick(Sender: TObject); - procedure FormCreate(Sender: TObject); - procedure Exit1Click(Sender: TObject); - procedure About1Click(Sender: TObject); - private - { Private declarations } - public - { Public declarations } - procedure MyErrorHandler(RPCBroker: TRPCBroker); - end; - -var - frmXWBOnFail: TfrmXWBOnFail; - -implementation - -{$R *.DFM} - -procedure TfrmXWBOnFail.MyErrorHandler(RPCBroker: TRPCBroker); -var - ErrorText: String; - Path: String; - StrLoc: TStringList; - NowVal: TDateTime; -begin - NowVal := Now; - ErrorText := RPCB.RPCBError; - StrLoc := TStringList.Create; - Path := ExtractFilePath(Application.ExeName); - Path := Path + 'Error.Log'; - if FileExists(Path) then - StrLoc.LoadFromFile(Path); - StrLoc.Add(FormatDateTime('mm/dd/yyyy hh:mm:ss ',NowVal) + ErrorText); - StrLoc.SaveToFile(Path); -end; - -procedure TfrmXWBOnFail.btnConnectClick(Sender: TObject); -begin - if btnConnect.Caption = 'Connect' then - begin - edtErrorText.Text := ''; // Clear out old values - edtLoginError.Text := ''; - RPCB.AccessVerifyCodes := ''; - RPCB.KernelLogIn := True; - if cbxBadAccess.Checked then - RPCB.AccessVerifyCodes := 'monkeysee;monkeydo'; - RPCB.OnRPCBFailure := nil; - RPCB.ShowErrorMsgs := semRaise; - case rgrSelectAction.ItemIndex of // - 0: RPCB.OnRPCBFailure := MyErrorHandler; - 1: RPCB.ShowErrorMsgs := semRaise; - 2: RPCB.ShowErrorMsgs := semQuiet; - end; // case - try - RPCB.Connected := True; - if RPCB.Connected then - btnConnect.Caption := 'Disconnect'; - finally - edtErrorText.Text := RPCB.RPCBError; - edtLoginError.Text := RPCB.LogIn.ErrorText; - end; - end - else - begin - RPCB.Connected := False; - btnConnect.Caption := 'Connect'; - end; -end; - -procedure TfrmXWBOnFail.btnExitClick(Sender: TObject); -begin - halt; -end; - -procedure TfrmXWBOnFail.FormCreate(Sender: TObject); -var - Server: String; - Port: String; -begin - GetServerInfo(Server, Port); - RPCB.Server := Server; - RPCB.ListenerPort := StrToInt(Port); -end; - -procedure TfrmXWBOnFail.Exit1Click(Sender: TObject); -begin - Halt; -end; - -procedure TfrmXWBOnFail.About1Click(Sender: TObject); -begin - ShowAboutBox; -end; - -end. diff --git a/BDK32/Samples/SharedRPCBroker/SilentSignOn/frmVistAAbout.dfm b/BDK32/Samples/SharedRPCBroker/SilentSignOn/frmVistAAbout.dfm deleted file mode 100644 index 9966ef6..0000000 --- a/BDK32/Samples/SharedRPCBroker/SilentSignOn/frmVistAAbout.dfm +++ /dev/null @@ -1,1201 +0,0 @@ -object frmVistAAbout: TfrmVistAAbout - Left = 279 - Top = 106 - BorderStyle = bsDialog - Caption = 'About' - ClientHeight = 236 - ClientWidth = 353 - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'MS Sans Serif' - Font.Style = [] - OldCreateOrder = True - Position = poScreenCenter - OnCreate = FormCreate - PixelsPerInch = 96 - TextHeight = 13 - object Panel1: TPanel - Left = 8 - Top = 8 - Width = 337 - Height = 185 - BevelInner = bvRaised - BevelOuter = bvLowered - ParentColor = True - TabOrder = 0 - object VistaLogo: TImage - Left = 8 - Top = 8 - Width = 153 - Height = 73 - Center = True - Picture.Data = { - 07544269746D61702A880000424D2A8800000000000036000000280000009600 - 00004D0000000100180000000000F48700000000000000000000000000000000 - 0000C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C00000C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C00000C0C0C0C0C0C0DDDDDDFFFFFFDDDDDDCCCCCCB2B2B2CC - CCCCF1F1F1DDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1DDDDDDCCCCCCCCCCCCC0C0C0C0C0C0DDDDDDF1F1F1F1F1F1DDDDDDCCCC - CCFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1FF - FFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFDDDDDD - DDDDDDDDDDDDF1F1F1FFFFFFFFFFFFFFFFFFDDDDDDF1F1F1F1F1F1F1F1F1FFFF - FFFFFFFFFFFFFFDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1CCCCCCF1F1F1F1F1F1F1F1F1 - F1F1F1C0C0C0FFFFFFC0C0C0DDDDDDDDDDDDF1F1F1F1F1F1FFFFFFFFFFFFFFFF - FFDDDDDDDDDDDDCCCCCCF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1 - F1F1F1F1F1F1F1F1F1F1F1DDDDDDCCCCCCC0C0C0F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDDDDDF1F1F1DDDDDDF1F1 - F1FFFFFFF1F1F1DDDDDD999999CCCCCCF1F1F1CCCCCCCCCCCCF1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1DDDDDDCCCCCCF1F1F1F1F1F1DDDDDDCCCCCCB2B2B2 - CCCCCCC0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0F1F1F1FFFFFFF1F1F1DDDDDD - FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1CCCCCCB2B2B2CCCCCCF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1 - F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1DDDDDDDDDDDDDDDDDDDDDDDDF1F1F1F1F1F1F1F1F1DDDDDDCCCCCCF1F1F1F1 - F1F1FFFFFFFFFFFFDDDDDDC0C0C0F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1FFFFFFF1F1 - F1F1F1F1DDDDDDCCCCCCF1F1F1DDDDDDFFFFFFF1F1F1F1F1F1FFFFFFFFFFFFFF - FFFFFFFFFFF1F1F1DDDDDDCCCCCCF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1DDDDDDC0C0C0DDDDDDF1F1F1F1F1F1FFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1FF - FFFFFFFFFFF1F1F1DDDDDDC0C0C0CCCCCCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDDDDDDDCCCCCCFFFFFFDDDDDDB2B2B2C0C0 - C0FFFFFFFFFFFFC0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0FFFFFFFFFFFFF1F1 - F1F1F1F1CCCCCCFFFFFFCCCCCCF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1CCCCCCFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1FFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFF1F1F1DDDDDDF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1 - F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1DDDDDDDDDDDDDDDDDDDDDDDDCCCCCCC0C0C0CCCCCCC0C0C0DDDDDD - F1F1F1FFFFFFFFFFFFFFFFFFB2B2B2C0C0C0F1F1F1F1F1F1F1F1F1F1F1F1FFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1FFFFFFFFFFFFF1 - F1F1F1F1F1F1F1F1DDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFF - FFFFFFFFFFFFF1F1F1DDDDDDC0C0C0DDDDDDF1F1F1F1F1F1F1F1F1FFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1CCCCCCCCCCCCF1F1F1F1F1F1FF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFF1F1F1F1F1F1DDDDDDC0C0C0FFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFC0C0C0F1 - F1F1F1F1F1FFFFFFFFFFFFC0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0FFFFFFFF - FFFFF1F1F1F1F1F1DDDDDDFFFFFFC0C0C0FFFFFFF1F1F1CCCCCCF1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDDDDDDDDDDDDDC0C0C0CCCCCCCCCCCCCCCC - CCF1F1F1F1F1F1FFFFFFFFFFFFF1F1F1CCCCCCDDDDDDF1F1F1F1F1F1F1F1F1F1 - F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFF1F1F1CCCCCCCCCCCCDDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1 - F1FFFFFFFFFFFFFFFFFFF1F1F1C0C0C0CCCCCCF1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1C0C0C0DDDDDDF1F1F1 - F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDDDDDDDC0C0C0FFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDD - C0C0C0F1F1F1FFFFFFFFFFFFFFFFFFC0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0 - F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1CCCCCCC0C0C0DDDDDDCCCCCCDDDDDDDDDD - DDCCCCCCF1F1F1F1F1F1DDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1DDDDDDF1 - F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1C0C0C0F1F1F1FFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1CCCCCCCCCCCCFFFFFFFF - FFFFF1F1F1F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1DDDDDDDDDDDDF1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1FFFFFFFFFF - FFF1F1F1F1F1F1F1F1F1DDDDDDFFFFFFFFFFFFFFFFFFDDDDDDF1F1F1F1F1F1F1 - F1F1F1F1F1FFFFFFFFFFFFFFFFFFC0C0C0DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1DDDDDDC0C0C0F1F1 - F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1FFFFFFFFFFFFFF - FFFFDDDDDDCCCCCCC0C0C0C0C0C0CCCCCCC0C0C0CCCCCCB2B2B2F1F1F1FFFFFF - FFFFFFFFFFFFFFFFFFF1F1F1DDDDDDC0C0C0CCCCCCCCCCCCCCCCCCDDDDDDC0C0 - C0CCCCCCDDDDDDFFFFFFFFFFFFFFFFFFFFFFFFC0C0C0C0C0C0C0C0C00000C0C0 - C0C0C0C0F1F1F1FFFFFFF1F1F1F1F1F1DDDDDDC0C0C0F1F1F1FFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDDDDDDDF1F1F1DDDDDDDDDDDDDDDDDD - CCCCCCF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDC0C0C0FFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFF1 - F1F1F1F1F1F1F1F1F1F1F1DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1C0C0C0C0C0C0 - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1DDDDDDDDDD - DDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FF - FFFFFFFFFFF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFDDDDDDF1F1F1F1F1F1 - FFFFFFF1F1F1F1F1F1F1F1F1FFFFFFF1F1F1DDDDDDF1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1DDDDDDCCCCCCC0C0C0F1 - F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFF - FFFFFFFFFFFFC0C0C0CCCCCCDDDDDDF1F1F1F1F1F1DDDDDDDDDDDDDDDDDDFFFF - FFFFFFFFFFFFFFFFFFFFDDDDDDDDDDDDCCCCCCF1F1F1F1F1F1F1F1F1FFFFFFFF - FFFFF1F1F1FFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFC0C0C0C0C0C0C0C0C0 - 0000C0C0C0C0C0C0F1F1F1DDDDDDF1F1F1F1F1F1C0C0C0CCCCCCFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDDDDDDDDDDDDDDDDDDDDDDDDDDD - DDDDDDDD0000FFF1F1F1FFFFFFF1F1F1F1F1F1FFFFFFF1F1F1DDDDDDDDDDDDFF - FFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFF1F1F1F1F1F1DDDDDDF1F1F1F1F1F1F1F1F1CCCCCCCCCCCCC0C0C0C0C0 - C0DDDDDDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1DD - DDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1DDDDDDF1F1F1F1F1F1DDDDDDF1F1 - F1F1F1F1DDDDDDF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1FF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1DDDDDDCCCCCCC0C0C0 - F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1FFFFFFDDDDDDDDDDDDC0C0C0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1C0C0C0C0C0C0C0C0C0FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1 - F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0C0C0C0C0 - C0C0C0C00000C0C0C0C0C0C0F1F1F1F1F1F1F1F1F1F1F1F1CCCCCCDDDDDDFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDDDDDDDDDDDDDDDDDDD - DDDDDDDDDDDDDDDD0000FFF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1DDDDDD - DDDDDDCCCCCCF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFF1F1F1CCCCCCCCCCCCF1F1F1F1F1F1F1F1F1CCCCCCCCCCCCCC - CCCCDDDDDDF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDD - F1F1F1DDDDDDDDDDDDF1F1F1DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1DDDDDDF1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1CCCCCCF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDC0C0 - C0DDDDDDFFFFFFFFFFFFF1F1F1F1F1F1DDDDDDFFFFFFF1F1F1F1F1F1F1F1F1F1 - F1F1FFFFFFFFFFFFF1F1F1DDDDDDC0C0C0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - FFFFFFF1F1F1FFFFFFFFFFFFF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1FFFF - FFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1C0 - C0C0C0C0C0C0C0C00000C0C0C0C0C0C0F1F1F1DDDDDDDDDDDDDDDDDDDDDDDDF1 - F1F1FFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDDDDDDDDDDD - C0C0C0C0C0C0C0C0C0B2B2B20000FF0000FFFFFFFFFFFFFFFFFFFFFFFFFFF1F1 - F1DDDDDDDDDDDDF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFDDDDDDDDDDDDCCCCCCDDDDDDFFFFFFFFFFFFFFFFFFF1F1F1 - F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDDDDDDDDD - DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDCCCCCCF1F1F1F1F1F1F1F1F1FFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDDDDDDDDDDDDDF1F1F1 - F1F1F1F1F1F1F1F1F1DDDDDDC0C0C0F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFF - FFF1F1F1FFFFFFFFFFFFF1F1F1DDDDDDF1F1F1F1F1F1F1F1F1DDDDDDDDDDDDC0 - C0C0C0C0C0FFFFFFFFFFFFFFFFFFFFFFFFC0C0C0DDDDDDF1F1F1F1F1F1F1F1F1 - FFFFFFF1F1F1FFFFFFFFFFFFF1F1F1F1F1F1DDDDDDF1F1F1F1F1F1F1F1F1FFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFF1F1F1F1F1F1DD - DDDDCCCCCCDDDDDDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1 - F1F1F1C0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0CCCCCCCCCCCCDDDDDDDDDDDD - FFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCCCC - CCC0C0C0DDDDDDF1F1F1F1F1F10000FF0000FF0000FF0000FFFFFFFFF1F1F1F1 - F1F1F1F1F1DDDDDDDDDDDDCCCCCCC0C0C0DDDDDDFFFFFFFFFFFFF1F1F1F1F1F1 - F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1DDDDDDDDDDDDF1F1F1F1F1F1F1F1 - F1C0C0C0F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFC0C0C0C0C0C0CC - CCCCF1F1F1DDDDDDDDDDDDCCCCCCCCCCCCCCCCCCB2B2B2F1F1F1F1F1F1F1F1F1 - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1CCCCCCCCCCCCF1F1F1F1F1F1FFFFFFFFFFFFF1 - F1F1F1F1F1F1F1F1F1F1F1FFFFFFF1F1F1DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1 - CCCCCCC0C0C0DDDDDDFFFFFFFFFFFFFFFFFFF1F1F1CCCCCCF1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFF - FFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1 - DDDDDDDDDDDDCCCCCCDDDDDDF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1 - F1F1F1F1F1F1F1C0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0F1F1F1F1F1F1FFFF - FFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFC0C0C0C0C0C0F1F1F1F1F1F1FFFFFF0000FF0000FF0000FF0000FF0000FF - F1F1F1F1F1F1F1F1F1DDDDDDDDDDDDB2B2B2FFFFFFFFFFFFFFFFFFF1F1F1DDDD - DDF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1FFFFFFF1F1F1DDDDDDF1 - F1F1F1F1F1C0C0C0F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1FFFFFFCCCCCC - DDDDDDF1F1F1FFFFFFDDDDDDCCCCCCB2B2B2DDDDDDB2B2B2C0C0C0F1F1F1F1F1 - F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1 - F1F1F1F1F1DDDDDDF1F1F1F1F1F1F1F1F1CCCCCCDDDDDDF1F1F1FFFFFFFFFFFF - FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFDDDDDDDDDDDDF1F1F1DDDDDDF1F1 - F1F1F1F1B2B2B2DDDDDDF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1FFFFFFF1F1F1F1F1F1DDDDDDF1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1 - F1F1F1F1F1F1F1F1F1F1F1C0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0FFFFFFFF - FFFFFFFFFFFFFFFFF1F1F1F1F1F1DDDDDDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - F1F1F1DDDDDDDDDDDDF1F1F1F1F1F1F1F1F1FFFFFF0000FF0000FF0000FF0000 - FF0000FF0000FFF1F1F1F1F1F1F1F1F1DDDDDDCCCCCCFFFFFFFFFFFFF1F1F1DD - DDDDC0C0C0F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFF1F1F1 - DDDDDDDDDDDDCCCCCCC0C0C0F1F1F1F1F1F1DDDDDDC0C0C0F1F1F1F1F1F1F1F1 - F1FFFFFFF1F1F1F1F1F1F1F1F1CCCCCCC0C0C0DDDDDDF1F1F1FFFFFFF1F1F1F1 - F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1 - F1F1F1F1F1F1C0C0C0C0C0C0CCCCCCF1F1F1F1F1F1CCCCCCDDDDDDFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1FFFFFFFFFFFFF1F1F1DDDDDDF1F1F1F1 - F1F1CCCCCCB2B2B2DDDDDDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1 - FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1CCCC - CCCCCCCCDDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDDD - DDDDDDDDDDCCCCCCC0C0C0F1F1F1F1F1F1F1F1F1CCCCCCDDDDDDFFFFFFFFFFFF - FFFFFFF1F1F1F1F1F1DDDDDDDDDDDDC0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0 - FFFFFFFFFFFFFFFFFFDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDF1F1F1F1F1F1F1F1 - F1DDDDDDDDDDDDDDDDDDDDDDDDF1F1F1F1F1F1F1F1F1FFFFFF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FFF1F1F1F1F1F1F1F1F1CCCCCCFFFFFFFFFFFF - FFFFFFDDDDDDC0C0C0F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1 - F1F1F1F1DDDDDDF1F1F1CCCCCCF1F1F1F1F1F1FFFFFFF1F1F1C0C0C0F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDDDDDDDF1F1F1FFFFFFF1F1F1FFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1 - F1FFFFFFFFFFFFC0C0C0DDDDDDF1F1F1F1F1F1FFFFFFF1F1F1DDDDDDF1F1F1F1 - F1F1F1F1F1FFFFFFFFFFFFF1F1F1FFFFFFF1F1F1F1F1F1FFFFFFFFFFFFDDDDDD - CCCCCCC0C0C0C0C0C0DDDDDDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1 - F1CCCCCCDDDDDDF1F1F1F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1FFFFFFFFFFFFFF - FFFFFFFFFFF1F1F1F1F1F1FFFFFFF1F1F1F1F1F1DDDDDDDDDDDDDDDDDDDDDDDD - F1F1F1B2B2B2C0C0C0CCCCCCDDDDDDFFFFFFF1F1F1F1F1F1CCCCCCCCCCCCFFFF - FFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1C0C0C0C0C0C0C0C0C00000C0C0 - C0C0C0C0FFFFFFFFFFFFFFFFFFDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDF1F1F1F1 - F1F1F1F1F1DDDDDDDDDDDDF1F1F1DDDDDDF1F1F1F1F1F1FFFFFFFFFFFF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FFF1F1F1F1F1F1F1F1F1CCCCCCFFFF - FFFFFFFFFFFFFFDDDDDDCCCCCCF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1 - F1F1F1F1F1F1F1F1DDDDDDDDDDDDC0C0C0F1F1F1F1F1F1F1F1F1DDDDDDCCCCCC - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFF1F1F1FFFFFFFFFFFFF1 - F1F1F1F1F1FFFFFFFFFFFFCCCCCCF1F1F1F1F1F1FFFFFFFFFFFFF1F1F1DDDDDD - FFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFDDDDDDC0C0C0C0C0C0DDDDDDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFDDDDDDC0C0C0F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDDDDDF1F1F1DDDDDDDDDDDDDDDD - DDDDDDDDCCCCCCC0C0C0DDDDDDFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDB2B2B2C0 - C0C0F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1C0C0C0C0C0C0C0C0C0 - 0000C0C0C0C0C0C0FFFFFFFFFFFFDDDDDDDDDDDDF1F1F1F1F1F1DDDDDDF1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1CCCCCCFFFFFFFFFFFFFFFFFFDDDD - DD0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFF1F1F1F1F1F1F1 - F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1CCCCCCF1F1F1FFFFFFFFFFFFF1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDDDDDDDF1F1F1F1F1F1FFFFFFFFFF - FFF1F1F1F1F1F1FFFFFFF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFF1F1F1FFFFFFFFFFFFFFFFFFC0C0C0F1F1F1FFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFF1F1F1F1F1F1F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFF1F1F1CCCCCCCCCCCCF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFCCCCCCF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFF1F1F1F1F1F1F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1FFFFFFDDDDDDCC - CCCCCCCCCCDDDDDDB2B2B2FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDCCCCCC - DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1C0C0C0C0C0 - C0C0C0C00000C0C0C0C0C0C0FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1C0C0C0C0C0C0DDDDDDFFFFFFF1F1F1DD - DDDDDDDDDD0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFF1F1F1 - F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1C0C0C0DDDDDDF1F1F1F1F1F1FFFF - FFDDDDDDDDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FF - FFFFF1F1F1CCCCCCF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFF1F1F1FFFFFFFFFFFFFFFFFF999999C0C0C0FFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFDDDDDDDDDDDDF1F1F1F1F1F1DDDDDDCCCCCCFFFFFFFFFFFFFF - FFFFFFFFFFF1F1F1F1F1F1DDDDDDDDDDDDDDDDDDCCCCCCDDDDDDFFFFFFFFFFFF - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDF1F1F1FFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFF1F1F1F1F1F1C0C0C0DDDDDDF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFF - FFFFFFF1F1F1F1F1F1DDDDDDF1F1F1FFFFFFFFFFFFF1F1F1DDDDDDCCCCCCFFFF - FFF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDF1F1F1C0 - C0C0C0C0C0C0C0C00000C0C0C0C0C0C0FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1DDDDDDDDDDDDB2B2B2DDDDDDF1F1F1F1F1F1FFFFFF - FFFFFFDDDDDDDDDDDD0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FFDDDDDDC0C0C0C0C0C0CCCCCCDDDDDDC0C0C0F1F1F1F1F1F1FF - FFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDCCCCCC - F1F1F1FFFFFFC0C0C0C0C0C0F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFCCCCCCCCCCCCFFFFFFDDDDDDCCCCCCDDDDDDF1F1F1FFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1DDDDDDC0C0C0DDDDDDF1F1F1 - FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1CCCCCCC0C0C0C0C0C0CCCCCCFFFFFFF1F1 - F1F1F1F1F1F1F1DDDDDDDDDDDDF1F1F1F1F1F1DDDDDDF1F1F1FFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1DDDDDDB2B2B2F1F1F1 - FFFFFFDDDDDDDDDDDDC0C0C0DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFF - FFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFDDDDDDDDDDDDCC - CCCCF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1DDDDDD - C0C0C0C0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0FFFFFFFFFFFFFFFFFFFFFFFF - F1F1F1F1F1F1F1F1F1DDDDDDDDDDDDDDDDDDDDDDDDCCCCCCFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFDDDDDDDDDDDD0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FFC0C0C0B2B2B2CCCCCCF1F1F1F1F1F1DDDDDDF1F1F1 - F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1FFFFFFF1F1F1F1F1F1DDDD - DDFFFFFFFFFFFFFFFFFFC0C0C0CCCCCCF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFF1F1F1DDDDDDC0C0C0CCCCCCFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1CCCCCCC0C0C0F1F1 - F1F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1CCCCCCB2B2B2C0C0C0CCCCCCF1F1F1FF - FFFFF1F1F1DDDDDDDDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDC0C0 - C0FFFFFFDDDDDDF1F1F1CCCCCCC0C0C0F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFF - FFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFDDDDDD - DDDDDDF1F1F1DDDDDDF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1C0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0FFFFFFFFFFFFFFFF - FFF1F1F1F1F1F1F1F1F1DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDCCCCCCF1F1F1F1 - F1F1F1F1F1F1F1F1FFFFFFDDDDDDDDDDDD0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FFF1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1FFFFFFDDDDDDCC - CCCCC0C0C0FFFFFFF1F1F1F1F1F1CCCCCCDDDDDDFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFDDDDDDDDDDDDCCCCCCF1F1F1FFFFFFFFFFFFFFFFFFF1F1F1FFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1DDDDDDC0C0C0F1 - F1F1F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1C0C0C0C0C0C0FFFFFFFFFFFFFFFFFF - FFFFFFF1F1F1CCCCCCB2B2B2CCCCCCC0C0C0CCCCCCF1F1F1F1F1F1F1F1F1DDDD - DDFFFFFFCCCCCCF1F1F1F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1C0 - C0C0DDDDDDFFFFFFFFFFFFF1F1F1DDDDDDF1F1F1F1F1F1F1F1F1FFFFFFFFFFFF - FFFFFFFFFFFFF1F1F1DDDDDDDDDDDDF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFDDDDDDDDDDDDCCCCCCF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1 - F1F1F1F1F1FFFFFFFFFFFFC0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0FFFFFFFF - FFFFF1F1F1F1F1F1CCCCCCC0C0C0C0C0C0CCCCCCDDDDDDF1F1F1F1F1F1CCCCCC - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1CCCCCCDDDDDD0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFFFFFFFFFF1F1F1F1 - F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDDDDDDDF1F1F1F1F1F1 - FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDB2B2B2C0C0C0FFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1C0C0C0F1F1F1FFFFFFFFFFFFF1F1F1F1 - F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1CCCCCC - DDDDDDF1F1F1FFFFFFFFFFFFF1F1F1F1F1F1CCCCCCDDDDDDFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1CCCCCCCCCCCCCC - CCCCDDDDDDFFFFFFC0C0C0F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1C0C0C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1FFFF - FFFFFFFFFFFFFFCCCCCCC0C0C0B2B2B2DDDDDDF1F1F1FFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFDDDDDDF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0 - FFFFFFFFFFFFF1F1F1F1F1F1B2B2B2C0C0C0CCCCCCCCCCCCDDDDDDC0C0C0C0C0 - C0C0C0C0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F10000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFFF - FFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1CCCCCCCCCCCCF1F1 - F1F1F1F1FFFFFFFFFFFFDDDDDDF1F1F1F1F1F1CCCCCCC0C0C0DDDDDDF1F1F1FF - FFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1CCCCCCFFFFFFFFFFFFFFFFFF - F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1DDDD - DDDDDDDDDDDDDDF1F1F1F1F1F1FFFFFFF1F1F1F1F1F1C0C0C0F1F1F1FFFFFFFF - FFFFFFFFFFF1F1F1FFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFF1F1F1F1F1F1CCCCCCF1F1F1FFFFFFFFFFFFF1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1C0C0C0FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1 - F1F1FFFFFFFFFFFFF1F1F1B2B2B2C0C0C0C0C0C0F1F1F1F1F1F1FFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDDDDDF1F1F1FFFFFFFFFFFFF1F1F1FFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0C0C0C0C0C0C0C0C00000C0C0 - C0C0C0C0F1F1F1FFFFFFF1F1F1CCCCCCDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F10000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1DDDDDDC0 - C0C0F1F1F1FFFFFFFFFFFFFFFFFFDDDDDDDDDDDDCCCCCCC0C0C0F1F1F1F1F1F1 - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1CCCCCCCCCCCCF1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1FFFFFF - FFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1 - F1F1F1F1F1F1F1F1F1F1F1DDDDDDFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDC0C0C0 - F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFF - FFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFDDDDDDDDDDDDCCCCCCC0C0C0F1F1F1FF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFC0C0C0C0C0C0C0C0C0 - 0000C0C0C0C0C0C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1 - F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F10000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1DDDDDDC0C0C0 - B2B2B2CCCCCCFFFFFFFFFFFFFFFFFFDDDDDDDDDDDD999999C0C0C0FFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCCCCCCC0C0C0CCCCCCF1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1DDDDDDF1F1F1CCCCCCDDDDDDDDDDDDF1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDDDDDDDC0C0C0DDDDDDFF - FFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFF - FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1DDDDDDDDDDDDFFFFFFFFFFFFDDDDDDCCCC - CCDDDDDDFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFF - FFFFFFFFFFFFFFFFDDDDDDF1F1F1F1F1F1DDDDDDC0C0C0CCCCCCCCCCCCDDDDDD - F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1C0C0C0C0C0 - C0C0C0C00000C0C0C0C0C0C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1 - F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1FFFFFFFFFFFFF1 - F1F10000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FFF1F1F1F1F1F1F1F1F1DDDDDDC0C0 - C0CCCCCCCCCCCCDDDDDDFFFFFFFFFFFFFFFFFFDDDDDDDDDDDDC0C0C0DDDDDDFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDDDDDDDDDDDF1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1CCCCCCFFFFFFFFFFFFF1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDDDDDDDCCCCCC - F1F1F1FFFFFFFFFFFFFFFFFFDDDDDDF1F1F1FFFFFFFFFFFFF1F1F1FFFFFFF1F1 - F1FFFFFFFFFFFFFFFFFFDDDDDDDDDDDDDDDDDDCCCCCCDDDDDDFFFFFFF1F1F1DD - DDDDCCCCCCF1F1F1DDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - FFFFFFFFFFFFFFFFFFFFFFFFDDDDDDF1F1F1DDDDDDCCCCCCB2B2B2F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDDDDDDDDDDDDDCCCCCCC0 - C0C0C0C0C0C0C0C00000C0C0C0C0C0C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFDDDDDDF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1FFFFFFFFFFFF - F1F1F1F1F1F10000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFF1F1F1DDDDDDDDDDDDC0 - C0C0DDDDDDF1F1F1F1F1F1FFFFFFFFFFFFDDDDDDDDDDDDDDDDDDC0C0C0DDDDDD - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFF1F1F1F1F1 - F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1 - F1F1F1F1F1CCCCCCCCCCCCDDDDDDDDDDDDC0C0C0B2B2B2CCCCCCF1F1F1FFFFFF - F1F1F1F1F1F1DDDDDDF1F1F1F1F1F1F1F1F1DDDDDDCCCCCCF1F1F1DDDDDDDDDD - DDDDDDDDFFFFFFFFFFFFF1F1F1C0C0C0F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1F1 - F1F1F1F1F1FFFFFFFFFFFFDDDDDDCCCCCCCCCCCCCCCCCCCCCCCCDDDDDDF1F1F1 - F1F1F1F1F1F1FFFFFFFFFFFFDDDDDDFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDDDDDDDDDDDDDDDDDB2B2B2CCCCCCFF - FFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDD - F1F1F1C0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0FFFFFFFFFFFFFFFFFFF1F1F1 - F1F1F1F1F1F1CCCCCCF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFF1F1F1CCCCCCC0C0C00000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFC0C0C0 - 999999DDDDDDF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFDDDDDDDDDDDDDDDDDDF1F1 - F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFF1F1F1FFFFFFFFFFFFFF - FFFFF1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1DDDDDDC0C0C0 - F1F1F1F1F1F1DDDDDDC0C0C0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFF - FFFFFFFFF1F1F1DDDDDDF1F1F1F1F1F1DDDDDDC0C0C0CCCCCCF1F1F1FFFFFFF1 - F1F1DDDDDDDDDDDDF1F1F1DDDDDDCCCCCCDDDDDDFFFFFFFFFFFFFFFFFFF1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1CCCCCCDDDDDDF1 - F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1CCCCCCDDDDDDFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1C0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0F1F1F1FFFFFFF1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFF1F1F1F1F1F1F1F1F1F1F1F10000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FFF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDDDDDDDDDDDDD - DDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1CCCC - CCFFFFFFF1F1F1DDDDDDC0C0C0B2B2B2DDDDDDF1F1F1F1F1F1FFFFFFFFFFFFFF - FFFFFFFFFFF1F1F1FFFFFFF1F1F1DDDDDDF1F1F1F1F1F1FFFFFFFFFFFFFFFFFF - FFFFFFF1F1F1DDDDDDF1F1F1F1F1F1CCCCCCCCCCCCF1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1 - F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1DDDDDDC0C0C0 - CCCCCCF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1FFFF - FFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFF1F1F1C0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0DDDDDDF1 - F1F1F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F10000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1FFFFFFF1F1F1 - CCCCCCCCCCCCF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDF1F1F1F1 - F1F1DDDDDDF1F1F1FFFFFFFFFFFFCCCCCCCCCCCCDDDDDDF1F1F1F1F1F1FFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1CCCCCCDDDDDDF1F1F1F1F1F1DDDDDDF1F1 - F1FFFFFFFFFFFFF1F1F1DDDDDDF1F1F1F1F1F1CCCCCCCCCCCCF1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDDDDDDDDDDDDDDD - DDC0C0C0CCCCCCF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1FFFFFFFF - FFFFFFFFFFDDDDDDCCCCCCCCCCCCF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1 - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0 - DDDDDDF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDDD - DDF1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F10000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFF - FFFFFFFFFFFFFFF1F1F1DDDDDDCCCCCCCCCCCCDDDDDDDDDDDDDDDDDDDDDDDDDD - DDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDDDDDDDDDDDDD - DDDDDDCCCCCCC0C0C0F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1 - F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1DD - DDDDF1F1F1FFFFFFF1F1F1DDDDDDDDDDDDDDDDDDDDDDDDC0C0C0CCCCCCF1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1 - F1F1F1F1F1F1F1F1F1F1DDDDDDF1F1F1FFFFFFFFFFFFFFFFFFDDDDDDDDDDDDDD - DDDDDDDDDDC0C0C0DDDDDDF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1DDDDDDF1F1F1FFFFFFFFFFFFFFFFFFFFFF - FFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1C0C0C0C0C0C0C0C0C00000C0C0 - C0C0C0C0C0C0C0F1F1F1FFFFFFFFFFFFF1F1F1FFFFFFFFFFFFF1F1F1F1F1F1F1 - F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F10000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1CCCCCCCCCCCCCCCCCC - CCCCCCCCCCCCDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1C0C0C0C0C0C0DDDD - DDCCCCCCF1F1F1DDDDDDF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1 - F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1FFFFFFF1F1F1DDDDDDDDDDDDCCCCCCC0C0C0C0C0C0DDDD - DDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1 - F1F1DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1DDDDDDF1F1F1FFFFFFFFFFFFDDDDDD - DDDDDDDDDDDDDDDDDDCCCCCCF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDC0C0C0C0C0C0C0C0C0 - 0000C0C0C0C0C0C0CCCCCCF1F1F1FFFFFFF1F1F1F1F1F1FFFFFFFFFFFFF1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1CCCCCCDDDDDDF1F1F10000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1C0C0C0DD - DDDDF1F1F1F1F1F1FFFFFFF1F1F1F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDDDDDDDDDDDDD999999B2B2B2DD - DDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFF - FFFFFFF1F1F1DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFF1F1 - F1DDDDDDDDDDDDDDDDDDDDDDDDCCCCCCF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1 - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1DDDDDDC0C0C0C0C0 - C0C0C0C00000C0C0C0C0C0C0FFFFFFF1F1F1FFFFFFF1F1F1F1F1F1FFFFFFF1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDF1F1F1F1F1F1C0C0C0DDDDDDFFFFFF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FFF1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFF1 - F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFCCCCCCF1F1F1F1F1F1F1F1F1F1F1F1 - CCCCCCF1F1F1F1F1F1F1F1F1FFFFFFF1F1F1DDDDDDF1F1F1DDDDDDF1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDCCCCCCDDDDDDCCCCCCC0C0C0DDDDDD - F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFF - FFFFFFFFF1F1F1DDDDDDDDDDDDDDDDDDDDDDDDCCCCCCFFFFFFF1F1F1F1F1F1DD - DDDDDDDDDDDDDDDDDDDDDDDDDDDDF1F1F1CCCCCCDDDDDDFFFFFFFFFFFFFFFFFF - F1F1F1F1F1F1CCCCCCF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1 - F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCCCCCCDDDDDDF1F1F1F1F1F1C0 - C0C0C0C0C0C0C0C00000C0C0C0C0C0C0FFFFFFF1F1F1DDDDDDF1F1F1F1F1F1F1 - F1F1DDDDDDCCCCCCCCCCCCF1F1F1F1F1F1F1F1F1F1F1F1C0C0C0DDDDDDF1F1F1 - FFFFFF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1DDDDDDFFFFFFF1F1F1F1F1 - F1F1F1F1CCCCCCDDDDDDFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1DDDDDDCCCCCCC0 - C0C0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1C0C0C0C0C0C0CCCCCCF1F1F1DDDDDDF1F1 - F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFCCCCCCCCCCCCCCCCCCFFFFFFF1F1F1DDDDDDDDDDDDF1F1F1F1F1F1 - F1F1F1DDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1CCCCCCCCCCCCFFFFFFFFFF - FFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1 - F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFF1F1F1 - F1F1F1C0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0FFFFFFDDDDDDF1F1F1FFFFFF - F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1CCCCCCC0C0C0F1F1 - F1F1F1F1FFFFFF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1 - F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1FFFFFFF1 - F1F1F1F1F1F1F1F1CCCCCCDDDDDDF1F1F1FFFFFFFFFFFFFFFFFFF1F1F1DDDDDD - C0C0C0C0C0C0F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1C0C0C0CCCCCCF1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFF1F1F1FFFFFFDDDDDDF1F1F1F1F1F1FFFFFFF1F1F1DDDDDDDDDDDDF1F1 - F1F1F1F1DDDDDDCCCCCCDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1CCCCCCCCCCCCF1 - F1F1F1F1F1FFFFFFDDDDDDDDDDDDDDDDDDF1F1F1DDDDDDDDDDDDDDDDDDDDDDDD - F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFDDDDDDF1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1C0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0FFFFFFF1F1F1F1F1 - F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDDDDDDDF1 - F1F1F1F1F1F1F1F1FFFFFF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFF1F1F1F1F1F1DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDCCCCCCFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFDDDDDDCCCCCCDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFF - FFFFF1F1F1F1F1F1F1F1F1F1F1F1DDDDDDDDDDDDDDDDDDCCCCCCC0C0C0F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFF - FFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFDDDDDDDD - DDDDDDDDDDDDDDDDDDDDDDFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1CCCCCC - DDDDDDF1F1F1F1F1F1F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1DDDDDDDDDDDDDDDD - DDDDDDDDDDDDDDDDDDDDCCCCCCDDDDDDC0C0C0CCCCCCB2B2B2F1F1F1F1F1F1FF - FFFFFFFFFFFFFFFFF1F1F1C0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0FFFFFFF1 - F1F1DDDDDDDDDDDDDDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1FFFFFF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDDDDDDDDDDDDDF1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1CCCCCCFFFFFFFFFFFFFF - FFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD - DDF1F1F1FFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFCCCCCCF1F1F1FF - FFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1DDDDDDDDDDDDF1F1F1FFFFFFDDDDDD - DDDDDDDDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1DDDDDDC0C0C0F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1CCCCCCC0C0C0DD - DDDDDDDDDDCCCCCCCCCCCC999999DDDDDDDDDDDDFFFFFFFFFFFFDDDDDDFFFFFF - FFFFFFFFFFFFFFFFFFF1F1F1DDDDDDC0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0 - F1F1F1FFFFFFDDDDDDDDDDDDF1F1F1CCCCCCF1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDDDDDF1F1F1DDDDDDDDDDDDF1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1DDDDDDF1F1F1F1F1F1DDDDDDCCCCCCCCCCCCFFFFFF - FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFF - FFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFDDDDDDDDDDDDDD - DDDDDDDDDDDDDDDDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDDDDD - F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1DDDDDDDDDDDDF1F1F1FFFF - FFF1F1F1DDDDDDDDDDDDDDDDDDDDDDDDF1F1F1DDDDDDF1F1F1F1F1F1F1F1F1DD - DDDDC0C0C0C0C0C0B2B2B2F1F1F1F1F1F1F1F1F1FFFFFFF1F1F1DDDDDDC0C0C0 - DDDDDDF1F1F1CCCCCCCCCCCCC0C0C0C0C0C0FFFFFFFFFFFFFFFFFFFFFFFFF1F1 - F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1C0C0C0C0C0C0C0C0C00000C0C0 - C0C0C0C0F1F1F1F1F1F1CCCCCCDDDDDDDDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F10000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FFFFFFFFFFFFFFFFFFFF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFCCCCCCCCCC - CCDDDDDDF1F1F1DDDDDDCCCCCCF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1C0C0C0C0C0C0C0C0C0 - 0000C0C0C0C0C0C0FFFFFFFFFFFFFFFFFFFFFFFFDDDDDDF1F1F1F1F1F1FFFFFF - FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F10000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FFF1F1F1F1F1F10000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1 - F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFF1F1F1DDDDDDC0C0C0C0C0C0CCCCCCDDDDDDCCCCCCC0C0C0C0C0 - C0C0C0C00000C0C0C0C0C0C0FFFFFFF1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1 - F1F1F1F1F1F1F1DDDDDDCCCCCCF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFF1F1F10000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFF - FFFFFFFFF1F1F1F1F1F1DDDDDDCCCCCCDDDDDDFFFFFFFFFFFFFFFFFFFFFFFFC0 - C0C0C0C0C0C0C0C00000C0C0C0C0C0C0F1F1F1CCCCCCFFFFFFFFFFFFFFFFFFFF - FFFFF1F1F1F1F1F1F1F1F1F1F1F1DDDDDDF1F1F1FFFFFFFFFFFFFFFFFFFFFFFF - FFFFFF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFDDDDDDF1F1F1 - F1F1F1F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFF - FFC0C0C0F1F1F1F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFF - FFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - CCCCCCDDDDDDF1F1F1F1F1F1F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1DDDDDDDDDD - DDDDDDDDDDDDDDCCCCCCF1F1F1F1F1F1FFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFF - FFFFDDDDDDDDDDDDDDDDDDF1F1F1FFFFFFFFFFFFF1F1F1F1F1F1C0C0C0F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1FF - FFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFF - F1F1F1C0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0DDDDDDDDDDDDDDDDDDF1F1F1 - FFFFFFFFFFFFF1F1F1CCCCCCC0C0C0CCCCCCDDDDDDFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFF1F1F10000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FFF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1 - F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1FFFFFFFFFF - FFF1F1F1DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFF1F1F1DDDDDDDDDDDDDD - DDDDDDDDDDF1F1F1F1F1F1DDDDDDF1F1F1F1F1F1F1F1F1DDDDDDDDDDDDCCCCCC - F1F1F1F1F1F1DDDDDDCCCCCCF1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1DDDDDDF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1FF - FFFFF1F1F1DDDDDDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1 - F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1FFFFFFFFFFFFC0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0DDDDDDDDDDDDC0C0 - C0CCCCCCF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFF1F1F1FFFFFFF1F1F1DD - DDDDDDDDDDDDDDDDDDDDDD0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFFF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FFFFFFFFFFFFFFFFFFFFFFFFFF800000800000800000F1F1F1 - FFFFFFF1F1F1FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1FFFFFFFFFFFF8000008000 - 00800000800000800000800000800000800000800000FFFFFFC0C0C0DDDDDDCC - CCCCDDDDDDC0C0C0DDDDDDF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1800000 - 800000800000DDDDDDCCCCCCC0C0C0C0C0C0DDDDDD0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FFDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1DDDDDDCCCCCCF1F1F10000FF0000FF0000FF0000FF0000FF0000FF0000FF - F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1DDDDDDFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFF1F1F1F1F1F1DDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1FFFFFFC0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0DDDDDDDD - DDDDCCCCCCCCCCCCF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFF - F1F1F1DDDDDDDDDDDDDDDDDDDDDDDD0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFFFFF - FFFF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FFFFFFFFFFFFFFFFFFFFFFFFFF8000008000008000 - 00800000FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F180 - 0000800000800000800000800000800000800000800000800000800000DDDDDD - F1F1F1DDDDDDF1F1F1DDDDDDF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1 - F1F1F1F1800000800000800000C0C0C0C0C0C0DDDDDDF1F1F10000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FFF1F1F1FFFFFFF1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1DDDDDDCCCCCCF1F1F10000FF0000FF0000FF0000FF0000FF0000 - FF0000FFF1F1F1F1F1F1FFFFFFF1F1F1DDDDDDF1F1F1FFFFFFF1F1F1FFFFFFFF - FFFFFFFFFFFFFFFFF1F1F1F1F1F1DDDDDDC0C0C0F1F1F1F1F1F1F1F1F1FFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1C0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0 - DDDDDDDDDDDDC0C0C0DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFF - FFFFFFFFF1F1F1DDDDDDDDDDDDDDDDDD0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - F1F1F1DDDDDD0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FFF1F1F1F1F1F1FFFFFFFFFFFFFF - FFFF800000800000800000F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1800000 - 8000008000008000008000008000008000008000008000008000008000008000 - 00800000800000800000F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1FFFFFFFFFFFFF1 - F1F1F1F1F1F1F1F1800000800000800000800000CCCCCCFFFFFFFFFFFFF1F1F1 - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFF1F1F1DDDD - DDDDDDDDDDDDDDDDDDDDDDDDDDCCCCCCFFFFFFFFFFFF0000FF0000FF0000FF00 - 00FF0000FF0000FFF1F1F1F1F1F1FFFFFFDDDDDDDDDDDDCCCCCCF1F1F1F1F1F1 - FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1C0C0C0CCCCCCF1F1F1F1F1F1FFFF - FFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1FFFFFFC0C0C0C0C0C0C0C0C00000C0C0 - C0C0C0C0F1F1F1CCCCCCF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1CCCCCC0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FFF1F1F1FFFFFFDDDDDD0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFF1F1F1DDDDDD - F1F1F1F1F1F1F1F1F1800000800000800000F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1800000800000800000800000800000F1F1F1DDDDDDDDDDDDFFFFFFFFFFFFFF - FFFFFFFFFF800000800000800000800000800000FFFFFFF1F1F1F1F1F1DDDDDD - DDDDDDCCCCCCC0C0C0F1F1F1DDDDDD800000800000800000800000FFFFFFFFFF - FFF1F1F1F1F1F1F1F1F10000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FFCCCCCCDDDDDDCCCCCCDDDDDDC0C0C0DDDDDDFFFFFFFFFFFFFFFFFF0000FF - 0000FF0000FF0000FF0000FF0000FFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1FFFF - FFF1F1F1DDDDDDFFFFFFFFFFFFF1F1F1F1F1F1DDDDDDC0C0C0CCCCCCF1F1F1F1 - F1F1FFFFFFF1F1F1F1F1F1F1F1F1DDDDDDCCCCCCB2B2B2C0C0C0C0C0C0C0C0C0 - 0000C0C0C0C0C0C0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1CCCCCC0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FFF1F1F1F1F1F1F1F1F10000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFDDDD - DDDDDDDDF1F1F1F1F1F1F1F1F1800000800000800000DDDDDDF1F1F1DDDDDDF1 - F1F1F1F1F1800000800000800000800000F1F1F1DDDDDDDDDDDDDDDDDDFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1800000800000800000F1F1F1F1F1F1F1F1 - F1DDDDDDDDDDDD999999B2B2B2F1F1F1DDDDDDDDDDDD800000800000800000FF - FFFFFFFFFFF1F1F1FFFFFFFFFFFF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FFF1F1F1F1F1F1DDDDDDDDDDDDDDDDDDFFFFFFF1F1F1F1F1F1F1F1 - F10000FF0000FF0000FF0000FF0000FF0000FFFFFFFFFFFFFFFFFFFFF1F1F1FF - FFFFFFFFFFFFFFFFDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1DDDDDDC0C0C0CCCCCC - F1F1F1F1F1F1FFFFFFF1F1F1F1F1F1DDDDDDDDDDDDC0C0C0CCCCCCC0C0C0C0C0 - C0C0C0C00000C0C0C0C0C0C0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F10000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F10000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FFF1F1F1F1F1F1DDDDDDF1F1F1800000800000800000DDDDDD - DDDDDDF1F1F1DDDDDD800000800000800000800000F1F1F1DDDDDDDDDDDDDDDD - DDDDDDDDDDDDDDCCCCCCF1F1F1F1F1F1F1F1F1F1F1F180000080000080000080 - 0000F1F1F1C0C0C0B2B2B2DDDDDDFFFFFFFFFFFFFFFFFFF1F1F1800000800000 - 800000800000F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1DDDDDDDDDDDDDDDDDDC0C0 - C0CCCCCCF1F1F1FFFFFFFFFFFFF1F1F1F1F1F1CCCCCC999999CCCCCCF1F1F1C0 - C0C0C0C0C0C0C0C00000C0C0C0C0C0C0F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFF - FFFFF1F1F1FFFFFFFFFFFFDDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F100 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FFF1F1F1F1F1F1FFFFFFF1F1F1F1F1F18000008000 - 00800000C0C0C0CCCCCCC0C0C0C0C0C0800000800000800000F1F1F1DDDDDDDD - DDDDDDDDDDCCCCCCC0C0C0DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFF - 800000800000800000CCCCCCDDDDDDFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDDDDD - DD800000800000800000800000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F100 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDDDDDDDDDDDDDF1 - F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDC0C0C0DDDDDDF1F1F1 - FFFFFFC0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0F1F1F1DDDDDDFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F10000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FFF1F1F1F1F1F1F1F1F1DDDDDD - DDDDDDCCCCCC0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FFF1F1F1F1F1F1F1F1F1F1F1F180 - 0000800000800000800000FFFFFFF1F1F1FFFFFFFFFFFF800000800000800000 - DDDDDDDDDDDDDDDDDDC0C0C0F1F1F1F1F1F1F1F1F1FFFFFFF1F1F1F1F1F1FFFF - FFFFFFFF800000800000800000800000FFFFFFFFFFFFFFFFFFFFFFFFCCCCCCC0 - C0C0C0C0C0C0C0C0CCCCCC800000800000800000FFFFFFFFFFFFFFFFFFFFFFFF - F1F1F1DDDDDD0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDDDDDDDF1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDF1F1F1FFFFFFF1F1F1DDDDDDDDDDDDFFFF - FFF1F1F1FFFFFFC0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0F1F1F1DDDDDDFFFF - FFFFFFFFF1F1F1F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1DDDDDDCCCCCCF1F1F1F1 - F1F1F1F1F1F1F1F10000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFF1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1C0C0C0CCCCCC0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFF1F1F1F1F1F1 - F1F1F1F1F1F1800000800000800000800000FFFFFFFFFFFFFFFFFFFFFFFFF1F1 - F1F1F1F1DDDDDDDDDDDDDDDDDDC0C0C0F1F1F1F1F1F1F1F1F1FFFFFFF1F1F1FF - FFFFFFFFFFFFFFFF800000800000800000800000800000FFFFFFFFFFFFFFFFFF - CCCCCCCCCCCCCCCCCCDDDDDDDDDDDD800000800000800000DDDDDDC0C0C0F1F1 - F1F1F1F1F1F1F1DDDDDDF1F1F10000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDFFFFFFF1F1F1DDDDDDF1 - F1F1FFFFFFF1F1F1FFFFFFC0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0C0C0C0DD - DDDDF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1DDDDDDCCCCCCDDDDDD - DDDDDDF1F1F1CCCCCCCCCCCC0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFF1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1DDDDDDF1F1F10000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FFF1F1F1F1F1F1F1F1F1DDDDDD800000800000800000F1F1F1FFFFFFFFFFFFFF - FFFFFFFFFFF1F1F1CCCCCCB2B2B2CCCCCCCCCCCCFFFFFFF1F1F1F1F1F1FFFFFF - F1F1F1FFFFFFFFFFFF800000800000800000800000800000800000F1F1F1FFFF - FFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFF800000800000800000C0 - C0C0FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F10000FF0000FF0000FF - 0000FF0000FF0000FF0000FFF1F1F1FFFFFFFFFFFFFFFFFF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FFFFFFFFF1F1F1F1F1F1FFFFFFFFFFFFF1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDC0C0C0C0C0C0FFFFFFFFFFFF - F1F1F1DDDDDDCCCCCCDDDDDDF1F1F1C0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0 - F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1DDDD - DDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F10000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - FFFFFFFFFFFFF1F1F1DDDDDDF1F1F1F1F1F1FFFFFFFFFFFF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FFF1F1F1DDDDDDDDDDDDDDDDDDDDDDDD800000800000800000FFFFFF - FFFFFFFFFFFFFFFFFFC0C0C0CCCCCCDDDDDDFFFFFFFFFFFFF1F1F1CCCCCCF1F1 - F1FFFFFF800000800000800000800000800000800000800000800000DDDDDDDD - DDDDF1F1F1DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1800000 - 800000800000F1F1F1F1F1F1DDDDDDCCCCCCCCCCCCDDDDDDF1F1F1F1F1F10000 - FF0000FF0000FF0000FF0000FF0000FF0000FFF1F1F1F1F1F1F1F1F1F1F1F100 - 00FF0000FF0000FF0000FF0000FF0000FFF1F1F1F1F1F1F1F1F1FFFFFFFFFFFF - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDB2B2B2C0C0C0DDDDDDFFFFFFFFFF - FFFFFFFFDDDDDDDDDDDDDDDDDDF1F1F1FFFFFFC0C0C0C0C0C0C0C0C00000C0C0 - C0C0C0C0F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1DDDDDDF1F1F1F1F1F1F1F1F1F1F1F10000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FFFFFFFFFFFFFFF1F1F1DDDDDDDDDDDDCCCCCCDDDDDDF1F1F10000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FFCCCCCCCCCCCCDDDDDDCCCCCC8000008000008000 - 00FFFFFFFFFFFFFFFFFFF1F1F1C0C0C0F1F1F1FFFFFFFFFFFFFFFFFFCCCCCCDD - DDDDF1F1F1800000800000800000800000800000800000800000800000800000 - F1F1F1F1F1F1F1F1F1DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1800000800000800000F1F1F1F1F1F1F1F1F1DDDDDDDDDDDDF1F1F1F1F1F1F1 - F1F10000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFFFF1F1F1 - F1F1F10000FF0000FF0000FF0000FF0000FF0000FFF1F1F1F1F1F1F1F1F1FFFF - FFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1DDDDDDC0C0C0C0C0C0DDDDDDFFFFFFFF - FFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFC0C0C0C0C0C0C0C0C0 - 0000C0C0C0C0C0C0FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1DDDDDDDDDDDDCCCCCCF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFF1F1F1F1F1 - F1FFFFFFFFFFFFF1F1F1FFFFFFFFFFFFF1F1F1DDDDDDF1F1F1DDDDDDDDDDDDDD - DDDDFFFFFFFFFFFFFFFFFFFFFFFFC0C0C0CCCCCCCCCCCCF1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F10000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FFF1F1F1F1F1F1DDDDDDF1F1F180 - 0000800000800000800000F1F1F1DDDDDDDDDDDDFFFFFFFFFFFFFFFFFFF1F1F1 - 8000008000008000008000008000008000008000008000008000008000008000 - 00F1F1F1FFFFFFF1F1F1B2B2B2C0C0C0DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1800000800000800000800000FFFFFFF1F1F1F1F1F1FFFFFF - FFFFFFF1F1F1F1F1F1F1F1F10000FF0000FF0000FF0000FF0000FF0000FF0000 - FFF1F1F1F1F1F1F1F1F10000FF0000FF0000FF0000FF0000FFF1F1F1FFFFFFFF - FFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1CCCCCCC0C0C0CCCCCCFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1C0C0C0C0C0 - C0C0C0C00000C0C0C0C0C0C0F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1C0C0C0C0C0C0DDDDDDF1F1F1FFFFFFF1F1F1FFFFFFF1F1F1FF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1DDDDDDFFFFFFFFFFFFF1F1F1F1F1F1CCCCCCFFFFFFF1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F10000FF0000FF0000FF0000FF0000FF0000FFF1F1F100 - 00FF0000FF0000FF0000FFFFFFFF0000FF0000FF0000FF0000FFF1F1F1F1F1F1 - F1F1F1FFFFFF800000800000800000F1F1F1DDDDDDCCCCCCF1F1F1F1F1F1F1F1 - F1F1F1F1800000800000800000800000800000800000800000800000F1F1F1F1 - F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1800000800000800000FFFFFFF1F1F1FFFF - FFFFFFFFFFFFFFFFFFFFCCCCCCC0C0C0C0C0C0F1F1F10000FF0000FF0000FF00 - 00FF0000FF0000FFF1F1F1F1F1F10000FF0000FF0000FF0000FF0000FF0000FF - FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1C0C0C0DDDDDDFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1C0 - C0C0C0C0C0C0C0C00000C0C0C0C0C0C0F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1F1 - F1F1F1F1F1F1F1F1DDDDDDC0C0C0CCCCCCFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1 - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1CCCCCCFFFFFFFFFFFFF1F1F1F1F1F1DDDDDDF1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1FFFFFFF1F1F10000FF0000FF0000FF0000FF0000FF - 0000FFFFFFFF0000FF0000FFFFFFFFFFFFFF0000FF0000FF0000FF0000FFF1F1 - F1F1F1F1F1F1F1FFFFFF800000800000800000800000DDDDDDC0C0C0F1F1F1F1 - F1F1F1F1F1F1F1F1800000800000800000800000800000FFFFFFFFFFFFFFFFFF - FFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFF1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1800000800000800000FF - FFFFFFFFFFFFFFFFFFFFFFF1F1F1B2B2B2C0C0C0CCCCCCDDDDDD0000FF0000FF - 0000FF0000FF0000FF0000FF0000FFF1F1F10000FF0000FF0000FF0000FF0000 - FF0000FFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1CCCCCCCCCCCCF1F1F1FF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1 - F1F1F1C0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0FFFFFFFFFFFFFFFFFFF1F1F1 - F1F1F1DDDDDDDDDDDDDDDDDDDDDDDDC0C0C0CCCCCCFFFFFFF1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1DDDDDDCCCCCCC0C0C0F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFF1F1F10000FF0000FF0000 - FF0000FF0000FF0000FFFFFFFFFFFFFFFFFFFFFFFFFF0000FF0000FF0000FF00 - 00FF0000FFFFFFFFFFFFFFFFFFFFFFFFFF800000800000800000800000CCCCCC - F1F1F1F1F1F1F1F1F1F1F1F1800000800000800000800000FFFFFFFFFFFFFFFF - FFFFFFFFF1F1F1CCCCCCFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDF1F1F1F1F1F1FF - FFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1800000800000 - 800000FFFFFFF1F1F1FFFFFFF1F1F1DDDDDDCCCCCCF1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F10000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FFF1F1F1DDDDDDF1F1F1F1F1F1F1F1F1CCCCCC999999F1F1F1 - F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1 - F1F1F1F1F1F1F1C0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0FFFFFFDDDDDDDDDD - DDDDDDDDDDDDDDDDDDDDDDDDDDF1F1F1DDDDDDC0C0C0CCCCCCF1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1DDDDDDDDDDDDF1F1F1F1F1F1 - F1F1F1F1F1F1CCCCCCC0C0C0DDDDDDF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFDDDD - DDDDDDDDC0C0C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1CCCCCC0000FF00 - 00FF0000FF0000FF0000FFDDDDDDDDDDDDDDDDDDF1F1F1FFFFFFFFFFFF0000FF - 0000FF0000FF0000FF0000FFF1F1F1DDDDDDDDDDDDCCCCCCDDDDDD8000008000 - 00F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1FFFFFF800000800000800000F1F1F1F1 - F1F1DDDDDDC0C0C0CCCCCCCCCCCCFFFFFFFFFFFFF1F1F1DDDDDDC0C0C0800000 - 800000800000F1F1F1F1F1F1F1F1F1FFFFFFF1F1F1F1F1F1FFFFFFFFFFFFFFFF - FF800000800000800000800000F1F1F1F1F1F1F1F1F1DDDDDDF1F1F1F1F1F1F1 - F1F1FFFFFFFFFFFFFFFFFF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FFF1F1F1F1F1F1F1F1F1DDDDDDC0C0C0DDDD - DDF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFF1 - F1F1F1F1F1CCCCCCFFFFFFC0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0F1F1F1F1 - F1F1DDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDFFFFFFFFFFFF - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDD - DDDDDDDDDDDDDDDDDDDDCCCCCCF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFF - FFFFDDDDDDDDDDDDC0C0C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - F1F1F10000FF0000FF0000FFDDDDDDDDDDDDDDDDDDDDDDDDCCCCCCF1F1F1FFFF - FFDDDDDDF1F1F1F1F1F10000FF0000FF0000FFB2B2B2C0C0C0DDDDDDF1F1F180 - 0000800000800000FFFFFFFFFFFFF1F1F1F1F1F1FFFFFF800000800000800000 - 800000DDDDDDB2B2B2CCCCCCFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1CCCC - CC800000800000800000F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1FFFFFFFFFFFFFF - FFFFFFFFFFFFFFFF800000800000800000F1F1F1F1F1F1FFFFFFF1F1F1FFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FFDDDDDDDDDDDDDDDDDDCCCCCCCC - CCCCF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1FFFFFFFFFFFF - F1F1F1DDDDDDCCCCCCCCCCCCFFFFFFC0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0 - F1F1F1F1F1F1DDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFF - FFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFF1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1CCCCCCF1F1F1F1F1F1F1F1F1FFFFFFFFFFFF - FFFFFFFFFFFFC0C0C0C0C0C0B2B2B2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFF1F1F10000FF0000FF0000FF0000FF0000FF0000FF0000FFCCCCCCF1 - F1F1F1F1F10000FF0000FF0000FF0000FF0000FF0000FFCCCCCCDDDDDDF1F1F1 - F1F1F1800000800000800000800000FFFFFFF1F1F1FFFFFFFFFFFFF1F1F18000 - 00800000800000F1F1F1C0C0C0DDDDDDFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1 - F1F1DDDDDD800000800000800000F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1FFFFFF - FFFFFFFFFFFFFFFFFFFFFFFF800000800000800000800000FFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F10000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFDDDDDDDDDDDD - 999999DDDDDDF1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFF - FFF1F1F1F1F1F1CCCCCCB2B2B2DDDDDDFFFFFFC0C0C0C0C0C0C0C0C00000C0C0 - C0C0C0C0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFF - F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1CCCCCCCCCCCCF1F1F1F1F1F1F1F1F1FFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1 - F1F1FFFFFFFFFFFFFFFFFFFFFFFF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FFF1F1F1FFFFFF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFF - FFFFFFFFFFFFFFF1F1F1FFFFFF800000800000800000FFFFFFFFFFFFFFFFFFF1 - F1F1F1F1F1800000800000800000800000800000FFFFFFFFFFFFFFFFFFF1F1F1 - F1F1F1F1F1F1F1F1F1800000800000800000800000FFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDC0C0C0800000800000800000800000FF - FFFFFFFFFFF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1 - FFFFFF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFC0C0 - C0C0C0C0CCCCCCF1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1CCCCCCC0C0C0CC - CCCCFFFFFFF1F1F1F1F1F1C0C0C0DDDDDDFFFFFFFFFFFFC0C0C0C0C0C0C0C0C0 - 0000C0C0C0C0C0C0DDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1DDDDDDC0C0C0DDDDDDF1F1F1FFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1FFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFF1F1F1FFFFFFF1F1F1FFFFFFFFFFFFFFFFFF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FFFFFFFF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FFFFFFFFF1F1F1FFFFFFFFFFFF800000800000800000DDDDDDF1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F18000008000008000008000008000008000 - 00800000800000800000800000800000800000800000800000FFFFFFFFFFFFFF - FFFFFFFFFF800000800000800000800000800000800000800000800000800000 - 800000800000800000800000800000800000800000800000800000F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1B2B2B20000FF0000FF0000FF0000FF0000FF0000FF00 - 00FFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFCCCCCC999999B2B2B2 - F1F1F1F1F1F1FFFFFFC0C0C0C0C0C0CCCCCCF1F1F1FFFFFFFFFFFFC0C0C0C0C0 - C0C0C0C00000C0C0C0C0C0C0F1F1F1F1F1F1F1F1F1DDDDDDDDDDDDDDDDDDDDDD - DDC0C0C0C0C0C0F1F1F1F1F1F1DDDDDDDDDDDDF1F1F1F1F1F1FFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1FFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFF1F1F10000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FFFFFFFFF1F1F1DDDDDDF1F1F1DDDDDD8000008000008000 - 00DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F180000080000080000080 - 0000800000800000800000800000800000800000800000800000FFFFFFF1F1F1 - F1F1F1FFFFFFFFFFFF8000008000008000008000008000008000008000008000 - 00800000800000800000800000800000800000800000800000800000800000F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1C0C0C00000FF0000FF0000FF0000FF0000FF - 0000FF0000FFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1B2B2B2CCCC - CCDDDDDDFFFFFFFFFFFFF1F1F1CCCCCCCCCCCCDDDDDDFFFFFFFFFFFFFFFFFFC0 - C0C0C0C0C0C0C0C00000C0C0C0C0C0C0DDDDDDCCCCCCCCCCCCC0C0C0C0C0C0B2 - B2B2CCCCCCDDDDDDFFFFFFFFFFFFDDDDDDDDDDDDCCCCCCDDDDDDF1F1F1F1F1F1 - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1 - F1CCCCCCCCCCCCFFFFFFF1F1F1F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1FF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFF1F1F1F1F1F1 - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FFF1F1F1F1F1F1DDDDDD80000080 - 0000800000800000F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1DDDDDD800000800000800000800000800000800000800000FFFFFFF1F1 - F1DDDDDDF1F1F1F1F1F1F1F1F1F1F1F180000080000080000080000080000080 - 0000800000800000800000800000800000800000800000800000800000800000 - 800000800000800000F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F10000FF0000 - FF0000FF0000FF0000FFFFFFFFFFFFFFDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFC0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1FFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDDDDDDDDDDDCCCCCCF1F1F1F1 - F1F1F1F1F1FFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1F1 - F1F1DDDDDDC0C0C0F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1DDDDDD - DDDDDDDDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDD - DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDC0C0C0CCCCCCF1F1F1F1F1F1FF - FFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - C0C0C0F1F1F1F1F1F1DDDDDDDDDDDDDDDDDDF1F1F1F1F1F1F1F1F1FFFFFFFFFF - FFFFFFFFF1F1F1F1F1F1F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FF - FFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1CCCCCCF1F1F1F1F1F1F1F1F1 - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1 - F1F1F1F1F1F1F1C0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0F1F1F1F1F1F1F1F1 - F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1 - F1F1FFFFFFFFFFFFF1F1F1DDDDDDFFFFFFFFFFFFFFFFFFDDDDDDDDDDDDDDDDDD - F1F1F1FFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFF1F1F1FFFFFFF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1 - F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1 - F1F1F1F1F1F1CCCCCCC0C0C0F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFDDDDDDF1F1 - F1DDDDDDDDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDF1 - F1F1DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDC0C0C0DDDDDDF1F1F1 - F1F1F1F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1DDDDDDC0C0C0F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1 - F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1CCCCCCDDDDDDF1F1 - F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFC0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0F1F1F1FF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - DDDDDDC0C0C0DDDDDDC0C0C0DDDDDDFFFFFFFFFFFFF1F1F1F1F1F1DDDDDDDDDD - DDDDDDDDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFF - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1 - F1F1F1F1F1F1F1DDDDDDC0C0C0DDDDDDF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1 - F1F1DDDDDDDDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDD - C0C0C0DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1CCCCCCDDDD - DDF1F1F1F1F1F1F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1DDDDDDF1F1F1F1 - F1F1C0C0C0C0C0C0F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1FFFFFFF1F1F1FFFFFF - F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1DDDDDDC0C0C0F1 - F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1 - F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFC0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0 - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFC0C0 - C0CCCCCCCCCCCCDDDDDDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1DD - DDDDDDDDDDDDDDDDDDDDDDDDDDDDF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFF1F1 - F1F1F1F1F1F1F1DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFF1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1C0C0C0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFF - FFFFFFF1F1F1DDDDDDCCCCCCDDDDDDF1F1F1DDDDDDDDDDDDDDDDDDC0C0C0CCCC - CCCCCCCCCCCCCCF1F1F1DDDDDDDDDDDDF1F1F1F1F1F1F1F1F1DDDDDDDDDDDDCC - CCCCF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1DDDDDDDDDDDD - DDDDDDDDDDDDC0C0C0DDDDDDF1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1 - F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1DDDDDD - CCCCCCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFC0C0C0C0C0C0C0C0C00000C0C0 - C0C0C0C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1FFFFFFF1 - F1F1DDDDDDF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1CCCCCC - DDDDDDC0C0C0CCCCCCDDDDDDC0C0C0C0C0C0CCCCCCF1F1F1FFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDDDDDDDDD - DDDDF1F1F1F1F1F1CCCCCCDDDDDDF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1 - FFFFFFF1F1F1F1F1F1DDDDDDC0C0C0DDDDDDF1F1F1F1F1F1FFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFC0C0C0CCCCCCF1F1F1F1F1F1DDDDDDDDDDDDC0C0C0DDDDDDDD - DDDDF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFF1F1F1FFFFFFF1F1F1F1F1F1DDDDDD - DDDDDDDDDDDDDDDDDDFFFFFFF1F1F1FFFFFFFFFFFFDDDDDDDDDDDDF1F1F1F1F1 - F1DDDDDDCCCCCCDDDDDDDDDDDDF1F1F1FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1FF - FFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCCCCCCDDDDDDF1F1F1 - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1DDDD - DDCCCCCCCCCCCCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0C0C0C0C0C0C0C0C0 - 0000C0C0C0C0C0C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1 - F1F1F1F1F1F1DDDDDDF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1 - F1DDDDDDCCCCCCC0C0C0DDDDDDCCCCCCC0C0C0CCCCCCF1F1F1FFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDF1F1F1F1F1F1F1F1F1DDDDDD - CCCCCCC0C0C0DDDDDDCCCCCCC0C0C0F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFF - FFF1F1F1FFFFFFF1F1F1DDDDDDC0C0C0CCCCCCF1F1F1F1F1F1FFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFF1F1F1DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDD - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1 - F1DDDDDDDDDDDDDDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1CCCCCCDDDDDDF1F1F1F1F1F1FFFFFFF1F1F1FFFFFFF1F1F1F1F1F1 - F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1B2B2B2CCCC - CCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1 - F1F1DDDDDDC0C0C0F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0C0C0C0C0 - C0C0C0C00000C0C0C0C0C0C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1 - F1F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1FFFFFFF1F1F1F1F1F1FFFFFFF1F1F1FF - FFFFF1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1 - F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1DDDDDDC0C0C0CCCCCCF1F1F1DDDD - DDC0C0C0DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFF1F1F1F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1DD - DDDDDDDDDDDDDDDDDDDDDDDDDDDDF1F1F1DDDDDDCCCCCCDDDDDDF1F1F1FFFFFF - FFFFFFFFFFFFF1F1F1DDDDDDF1F1F1FFFFFFF1F1F1FFFFFFFFFFFFF1F1F1DDDD - DDF1F1F1FFFFFFFFFFFFF1F1F1DDDDDDF1F1F1FFFFFFF1F1F1DDDDDDCCCCCCDD - DDDDF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - DDDDDDCCCCCCB2B2B2C0C0C0FFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1CCCCCCC0 - C0C0C0C0C0C0C0C00000C0C0C0C0C0C0F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFF1F1F1F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFF1F1F1F1F1F1DDDDDDCCCCCCCCCCCCF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1CC - CCCCCCCCCCC0C0C0F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1FFFF - FFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1 - DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDCCCCCCC0C0C0CCCCCCDDDDDDF1F1F1F1F1 - F1FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFF1 - F1F1F1F1F1FFFFFFFFFFFFDDDDDDCCCCCCCCCCCCF1F1F1FFFFFFFFFFFFF1F1F1 - F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1DDDDDDDDDDDDC0C0C0 - CCCCCCC0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C00000} - Stretch = True - IsControl = True - end - object lblProductName: TLabel - Left = 5 - Top = 80 - Width = 68 - Height = 13 - Alignment = taCenter - Caption = 'Product Name' - IsControl = True - end - object lblVersion: TLabel - Left = 8 - Top = 160 - Width = 74 - Height = 13 - Caption = 'Version: 1.1.1.1' - IsControl = True - end - object lblGovStatement: TLabel - Left = 5 - Top = 96 - Width = 231 - Height = 13 - Alignment = taCenter - Caption = 'Developed by the Department of Veterans Affairs' - IsControl = True - end - object lblCRC: TLabel - Left = 232 - Top = 160 - Width = 92 - Height = 13 - Caption = 'CRC: DDDDDDDD' - end - object lblDate: TLabel - Left = 97 - Top = 160 - Width = 82 - Height = 13 - Alignment = taCenter - Caption = 'January 30, 2000' - end - object ProgramIcon: TImage - Left = 176 - Top = 8 - Width = 145 - Height = 73 - end - object Memo1: TMemo - Left = 8 - Top = 112 - Width = 321 - Height = 49 - BorderStyle = bsNone - Lines.Strings = ( - 'Unauthorized access or use of this system and/or its data is a ' - - 'federal crime. Use of all data must be in accordance with VA po' + - 'licy ' - 'on security and privacy.') - ParentColor = True - TabOrder = 0 - end - end - object OKButton: TButton - Left = 139 - Top = 204 - Width = 75 - Height = 25 - Caption = 'OK' - Default = True - ModalResult = 1 - TabOrder = 1 - end -end diff --git a/BDK32/Samples/SharedRPCBroker/SilentSignOn/frmVistAAbout.pas b/BDK32/Samples/SharedRPCBroker/SilentSignOn/frmVistAAbout.pas deleted file mode 100644 index 24437df..0000000 --- a/BDK32/Samples/SharedRPCBroker/SilentSignOn/frmVistAAbout.pas +++ /dev/null @@ -1,267 +0,0 @@ -unit frmVistAAbout; - -interface - -uses Windows, SysUtils, Classes, Graphics, Forms, Controls, StdCtrls, - Buttons, ExtCtrls, jpeg, jconsts, Dialogs; - -TYPE - TInteger8 = Int64; - -type - TfrmVistAAbout = class(TForm) - Panel1: TPanel; - VistaLogo: TImage; - lblProductName: TLabel; - lblVersion: TLabel; - lblGovStatement: TLabel; - OKButton: TButton; - lblCRC: TLabel; - Memo1: TMemo; - lblDate: TLabel; - ProgramIcon: TImage; - procedure FormCreate(Sender: TObject); - private - { Private declarations } - public - { Public declarations } - procedure getfileinfo(var Version: String; var ProductName: String); virtual; - end; - -procedure ShowAboutBox; - -implementation - -{$R *.DFM} - - CONST - table: ARRAY[0..255] OF DWORD = - ($00000000, $77073096, $EE0E612C, $990951BA, - $076DC419, $706AF48F, $E963A535, $9E6495A3, - $0EDB8832, $79DCB8A4, $E0D5E91E, $97D2D988, - $09B64C2B, $7EB17CBD, $E7B82D07, $90BF1D91, - $1DB71064, $6AB020F2, $F3B97148, $84BE41DE, - $1ADAD47D, $6DDDE4EB, $F4D4B551, $83D385C7, - $136C9856, $646BA8C0, $FD62F97A, $8A65C9EC, - $14015C4F, $63066CD9, $FA0F3D63, $8D080DF5, - $3B6E20C8, $4C69105E, $D56041E4, $A2677172, - $3C03E4D1, $4B04D447, $D20D85FD, $A50AB56B, - $35B5A8FA, $42B2986C, $DBBBC9D6, $ACBCF940, - $32D86CE3, $45DF5C75, $DCD60DCF, $ABD13D59, - $26D930AC, $51DE003A, $C8D75180, $BFD06116, - $21B4F4B5, $56B3C423, $CFBA9599, $B8BDA50F, - $2802B89E, $5F058808, $C60CD9B2, $B10BE924, - $2F6F7C87, $58684C11, $C1611DAB, $B6662D3D, - - $76DC4190, $01DB7106, $98D220BC, $EFD5102A, - $71B18589, $06B6B51F, $9FBFE4A5, $E8B8D433, - $7807C9A2, $0F00F934, $9609A88E, $E10E9818, - $7F6A0DBB, $086D3D2D, $91646C97, $E6635C01, - $6B6B51F4, $1C6C6162, $856530D8, $F262004E, - $6C0695ED, $1B01A57B, $8208F4C1, $F50FC457, - $65B0D9C6, $12B7E950, $8BBEB8EA, $FCB9887C, - $62DD1DDF, $15DA2D49, $8CD37CF3, $FBD44C65, - $4DB26158, $3AB551CE, $A3BC0074, $D4BB30E2, - $4ADFA541, $3DD895D7, $A4D1C46D, $D3D6F4FB, - $4369E96A, $346ED9FC, $AD678846, $DA60B8D0, - $44042D73, $33031DE5, $AA0A4C5F, $DD0D7CC9, - $5005713C, $270241AA, $BE0B1010, $C90C2086, - $5768B525, $206F85B3, $B966D409, $CE61E49F, - $5EDEF90E, $29D9C998, $B0D09822, $C7D7A8B4, - $59B33D17, $2EB40D81, $B7BD5C3B, $C0BA6CAD, - - $EDB88320, $9ABFB3B6, $03B6E20C, $74B1D29A, - $EAD54739, $9DD277AF, $04DB2615, $73DC1683, - $E3630B12, $94643B84, $0D6D6A3E, $7A6A5AA8, - $E40ECF0B, $9309FF9D, $0A00AE27, $7D079EB1, - $F00F9344, $8708A3D2, $1E01F268, $6906C2FE, - $F762575D, $806567CB, $196C3671, $6E6B06E7, - $FED41B76, $89D32BE0, $10DA7A5A, $67DD4ACC, - $F9B9DF6F, $8EBEEFF9, $17B7BE43, $60B08ED5, - $D6D6A3E8, $A1D1937E, $38D8C2C4, $4FDFF252, - $D1BB67F1, $A6BC5767, $3FB506DD, $48B2364B, - $D80D2BDA, $AF0A1B4C, $36034AF6, $41047A60, - $DF60EFC3, $A867DF55, $316E8EEF, $4669BE79, - $CB61B38C, $BC66831A, $256FD2A0, $5268E236, - $CC0C7795, $BB0B4703, $220216B9, $5505262F, - $C5BA3BBE, $B2BD0B28, $2BB45A92, $5CB36A04, - $C2D7FFA7, $B5D0CF31, $2CD99E8B, $5BDEAE1D, - - $9B64C2B0, $EC63F226, $756AA39C, $026D930A, - $9C0906A9, $EB0E363F, $72076785, $05005713, - $95BF4A82, $E2B87A14, $7BB12BAE, $0CB61B38, - $92D28E9B, $E5D5BE0D, $7CDCEFB7, $0BDBDF21, - $86D3D2D4, $F1D4E242, $68DDB3F8, $1FDA836E, - $81BE16CD, $F6B9265B, $6FB077E1, $18B74777, - $88085AE6, $FF0F6A70, $66063BCA, $11010B5C, - $8F659EFF, $F862AE69, $616BFFD3, $166CCF45, - $A00AE278, $D70DD2EE, $4E048354, $3903B3C2, - $A7672661, $D06016F7, $4969474D, $3E6E77DB, - $AED16A4A, $D9D65ADC, $40DF0B66, $37D83BF0, - $A9BCAE53, $DEBB9EC5, $47B2CF7F, $30B5FFE9, - $BDBDF21C, $CABAC28A, $53B39330, $24B4A3A6, - $BAD03605, $CDD70693, $54DE5729, $23D967BF, - $B3667A2E, $C4614AB8, $5D681B02, $2A6F2B94, - $B40BBE37, $C30C8EA1, $5A05DF1B, $2D02EF8D); - - // Use CalcCRC32 as a procedure so CRCValue can be passed in but - // also returned. This allows multiple calls to CalcCRC32 for - // the "same" CRC-32 calculation. - PROCEDURE CalcCRC32 (p: pointer; ByteCount: DWORD; VAR CRCValue: DWORD); - // The following is a little cryptic (but executes very quickly). - // The algorithm is as follows: - // 1. exclusive-or the input byte with the low-order byte of - // the CRC register to get an INDEX - // 2. shift the CRC register eight bits to the right - // 3. exclusive-or the CRC register with the contents of - // Table[INDEX] - // 4. repeat steps 1 through 3 for all bytes - - VAR - i: DWORD; - q: ^BYTE; - BEGIN - q := p; - FOR i := 0 TO ByteCount-1 DO BEGIN - CRCvalue := (CRCvalue SHR 8) XOR - Table[ q^ XOR (CRCvalue AND $000000FF) ]; - INC(q) - END - END {CalcCRC32}; - - - // The CRC-32 value calculated here matches the one from the PKZIP program. - // Use MemoryStream to read file in binary mode. - PROCEDURE CalcFileCRC32 (FromName: STRING; VAR CRCvalue: DWORD; - VAR TotalBytes: TInteger8; - VAR error: WORD); - VAR - Stream: TMemoryStream; - BEGIN - error := 0; - CRCValue := $FFFFFFFF; - Stream := TMemoryStream.Create; - TRY - TRY - Stream.LoadFromFile(FromName); - IF Stream.Size > 0 - THEN CalcCRC32 (Stream.Memory, Stream.Size, CRCvalue) - EXCEPT - ON E: EReadError DO - error := 1 - END; - - CRCvalue := NOT CRCvalue; - TotalBytes := Stream.Size - FINALLY - Stream.Free - END; - END {CalcFileCRC32}; - -procedure TfrmVistAAbout.FormCreate(Sender: TObject); -var - CRC32: DWord; - TotalBytes: Int64; - Error: Word; - Text: String; - Version: String; - ProductName: String; -begin - CalcFileCRC32(Application.ExeName, CRC32, TotalBytes, Error); - lblCRC.Caption := 'CRC: ' + IntToHex(CRC32,8); - Text := Application.ExeName; - while pos('\',Text) > 0 do - begin - Text := copy(Text,pos('\',Text)+1,Length(Text)); - end; // while - Text := copy(Text,1,Length(Text)-4); - Caption := 'About ' + Text; - getfileinfo(Version, ProductName); - lblProductName.Caption := ProductName; - lblVersion.Caption := 'Version: ' + Version; - lblProductName.Width := Panel1.Width-10; - lblGovStatement.Width := Panel1.Width-10; - if ProgramIcon.Picture.Graphic = nil then - begin - VistALogo.Left := (Panel1.Width - VistALogo.Width) div 2; - end; -end; - -procedure TfrmVistAAbout.GetFileInfo(var Version: String; var ProductName: String); -var - VerInfoSize: DWORD; // holds the size of the version info resource - GetInfoSizeJunk: DWORD; // a junk variable, its value is ignored - VersionInfo: Pointer; // points to the version info resource - Translation: Pointer; // holds version info translation table - InfoPointer: Pointer; // a pointer to version information - - VersionInfoSize: UINT; // holds the size of version information - VersionValue: string; // holds the version info request string - SearchRec: TSearchRec; - DateTimeVal: TDateTime; - WriteTime: Integer; -begin - {retrieve the size of the version information resource, if one exists} - VerInfoSize := GetFileVersionInfoSize(PChar(Application.ExeName), - GetInfoSizeJunk); - - {if there was a version information resource available...} - - if VerInfoSize>0 then - begin - {retrieve enough memory to hold the version resource} - GetMem(VersionInfo, VerInfoSize); - - {retrieve the version resource for the selected file} - GetFileVersionInfo(PChar(Application.ExeName), 0, - VerInfoSize, VersionInfo); - - {retrieve a pointer to the translation table} - VerQueryValue(VersionInfo, '\\VarFileInfo\\Translation', - Translation, VersionInfoSize); - - {initialize the version value request string} - VersionValue :='\\StringFileInfo\\'+ - IntToHex(LoWord(LongInt(Translation^)),4)+ - IntToHex(HiWord(LongInt(Translation^)),4)+ - '\\'; - - {retrieve and display the file version} - VerQueryValue(VersionInfo, PChar(VersionValue+'FileVersion'), InfoPointer, - VersionInfoSize); - Version := string(PChar(InfoPointer)); - - {retrieve and display the product name} - VerQueryValue(VersionInfo, PChar(VersionValue+'ProductName'), InfoPointer, - VersionInfoSize); - ProductName := string(PChar(InfoPointer)); - - {free the version resource memory} - FreeMem(VersionInfo, VerInfoSize); - end - else - begin - Version := 'Not in File'; - ProductName := 'Not Identified In File'; - end; - if findfirst(Application.ExeName, faAnyFile, SearchRec) = 0 then - begin - WriteTime := SearchRec.Time; - DateTimeVal := FileDateToDateTime(WriteTime); - lblDate.Caption := FormatDateTime('mmmm dd, yyyy hh:nn',DateTimeVal); - end; -end; - -procedure ShowAboutBox; -begin - with TfrmVistAAbout.Create(Application) do - try - ShowModal; - finally - free; - end; -end; - -end. - - \ No newline at end of file diff --git a/BDK32/ServerList.exe b/BDK32/ServerList.exe deleted file mode 100644 index e604378..0000000 Binary files a/BDK32/ServerList.exe and /dev/null differ diff --git a/BDK32/Serverlist.hlp b/BDK32/Serverlist.hlp deleted file mode 100644 index e642a83..0000000 Binary files a/BDK32/Serverlist.hlp and /dev/null differ diff --git a/BDK32/SharedBrokerDebugger/RPCSharedBrokerSessionMgr1_TLB.pas b/BDK32/SharedBrokerDebugger/RPCSharedBrokerSessionMgr1_TLB.pas deleted file mode 100644 index 338f428..0000000 --- a/BDK32/SharedBrokerDebugger/RPCSharedBrokerSessionMgr1_TLB.pas +++ /dev/null @@ -1,867 +0,0 @@ -unit RPCSharedBrokerSessionMgr1_TLB; - -// ************************************************************************ // -// WARNING -// ------- -// The types declared in this file were generated from data read from a -// Type Library. If this type library is explicitly or indirectly (via -// another type library referring to this type library) re-imported, or the -// 'Refresh' command of the Type Library Editor activated while editing the -// Type Library, the contents of this file will be regenerated and all -// manual modifications will be lost. -// ************************************************************************ // - -// PASTLWTR : $Revision: 1.88.1.0.1.0 $ -// File generated on 1/25/2002 11:58:49 AM from Type Library described below. - -// *************************************************************************// -// NOTE: -// Items guarded by $IFDEF_LIVE_SERVER_AT_DESIGN_TIME are used by properties -// which return objects that may need to be explicitly created via a function -// call prior to any access via the property. These items have been disabled -// in order to prevent accidental use from within the object inspector. You -// may enable them by defining LIVE_SERVER_AT_DESIGN_TIME or by selectively -// removing them from the $IFDEF blocks. However, such items must still be -// programmatically created via a method of the appropriate CoClass before -// they can be used. -// ************************************************************************ // -// Type Lib: D:\Development\RPCSharedBroker\Exe1\RPCSharedBrokerSessionMgr1.exe (1) -// IID\LCID: {1F7D1EB0-E54F-46F0-B485-2D56743EBB70}\0 -// Helpfile: -// DepndLst: -// (1) v2.0 stdole, (C:\WINNT\System32\stdole2.tlb) -// (2) v4.0 StdVCL, (C:\WINNT\System32\STDVCL40.DLL) -// Errors: -// Error creating palette bitmap of (TSharedBroker) : Invalid GUID format -// ************************************************************************ // -{$TYPEDADDRESS OFF} // Unit must be compiled without type-checked pointers. -interface - -uses Windows, ActiveX, Classes, Graphics, OleServer, OleCtrls, StdVCL; - -// *********************************************************************// -// GUIDS declared in the TypeLibrary. Following prefixes are used: -// Type Libraries : LIBID_xxxx -// CoClasses : CLASS_xxxx -// DISPInterfaces : DIID_xxxx -// Non-DISP interfaces: IID_xxxx -// *********************************************************************// -const - // TypeLibrary Major and minor versions - RPCSharedBrokerSessionMgr1MajorVersion = 1; - RPCSharedBrokerSessionMgr1MinorVersion = 0; - - LIBID_RPCSharedBrokerSessionMgr1: TGUID = '{1F7D1EB0-E54F-46F0-B485-2D56743EBB70}'; - - IID_ISharedBroker: TGUID = '{E1D9A5E6-B7C6-40AD-AC34-6A3E12BDC328}'; - DIID_ISharedBrokerEvents: TGUID = '{CBEA7167-4F9B-465A-B82E-4CEBDF933C35}'; - CLASS_SharedBroker: TGUID = '{EB44A5CD-1871-429F-A5BC-19C71B722182}'; - -// *********************************************************************// -// Declaration of Enumerations defined in Type Library -// *********************************************************************// -// Constants for enum ISharedBrokerErrorCode -type - ISharedBrokerErrorCode = TOleEnum; -const - GeneralFailure = $00000000; - Success = $00000001; - UniqueRpcIdDoesNotExist = $00000002; - UniqueClientIdDoesNotExist = $00000003; - RpcHistoryIndexOutOfRange = $00000004; - RpcHistoryNotEnabled = $00000005; - CouldNotSetContext = $00000006; - CouldNotConnect = $00000007; - ClientIndexOutOfRange = $00000008; - NilClientPointer = $00000009; - ConnectionIndexOutOfRange = $0000000A; - -// Constants for enum IRegistryRootEnum -type - IRegistryRootEnum = TOleEnum; -const - HKCR = $00000000; - HKCU = $00000001; - HKLM = $00000002; - HKU = $00000003; - HKCC = $00000004; - HKDD = $00000005; - -// Constants for enum ISharedBrokerConnection -type - ISharedBrokerConnection = TOleEnum; -const - Failed = $00000000; - New = $00000001; - Shared = $00000002; - Debug = $00000003; - -// Constants for enum ISharedBrokerClient -type - ISharedBrokerClient = TOleEnum; -const - BrokerClient = $00000000; - DebuggerClient = $00000001; - -// Constants for enum ISharedBrokerShowErrorMsgs -type - ISharedBrokerShowErrorMsgs = TOleEnum; -const - isemRaise = $00000000; - isemQuiet = $00000001; - -type - -// *********************************************************************// -// Forward declaration of types defined in TypeLibrary -// *********************************************************************// - ISharedBroker = interface; - ISharedBrokerDisp = dispinterface; - ISharedBrokerEvents = dispinterface; - -// *********************************************************************// -// Declaration of CoClasses defined in Type Library -// (NOTE: Here we map each CoClass to its Default Interface) -// *********************************************************************// - SharedBroker = ISharedBroker; - - -// *********************************************************************// -// Interface: ISharedBroker -// Flags: (4416) Dual OleAutomation Dispatchable -// GUID: {E1D9A5E6-B7C6-40AD-AC34-6A3E12BDC328} -// *********************************************************************// - ISharedBroker = interface(IDispatch) - ['{E1D9A5E6-B7C6-40AD-AC34-6A3E12BDC328}'] - function BrokerConnect(const ClientName: WideString; ConnectionType: ISharedBrokerClient; - const ServerPort: WideString; WantDebug: WordBool; - AllowShared: WordBool; KernelLogin: WordBool; - ShowErrMsgs: ISharedBrokerShowErrorMsgs; RpcTimeLim: SYSINT; - var LoginStr: WideString; out UniqueClientIId: SYSINT; - out ErrorMsg: WideString): ISharedBrokerErrorCode; safecall; - function BrokerDisconnect: ISharedBrokerErrorCode; safecall; - function BrokerSetContext(const OptionName: WideString): ISharedBrokerErrorCode; safecall; - function BrokerCall(const RpcName: WideString; const RpcParams: WideString; - RpcTimeLimit: Integer; out RpcResults: WideString; - out UniqueRpcCallId: Integer): ISharedBrokerErrorCode; safecall; - function ReadRegDataDefault(Root: IRegistryRootEnum; const Key: WideString; - const Name: WideString; const Default: WideString; - out RegResult: WideString): ISharedBrokerErrorCode; safecall; - function Get_RpcVersion: WideString; safecall; - procedure Set_RpcVersion(const version: WideString); safecall; - function Get_RpcHistoryEnabled: WordBool; safecall; - procedure Set_RpcHistoryEnabled(enabled: WordBool); safecall; - function Get_PerClientRpcHistoryLimit: Integer; safecall; - procedure Set_PerClientRpcHistoryLimit(limit: Integer); safecall; - function GetRpcHistoryCountForClient(UniqueClientId: Integer; out rpcHistoryCount: Integer): ISharedBrokerErrorCode; safecall; - function GetClientIdAndNameFromIndex(clientIndex: Integer; out UniqueClientId: Integer; - out ClientName: WideString): ISharedBrokerErrorCode; safecall; - function LogoutConnectedClients(logoutTimeLimit: Integer): ISharedBrokerErrorCode; safecall; - function GetClientNameFromUniqueClientId(UniqueClientId: Integer; out ClientName: WideString): ISharedBrokerErrorCode; safecall; - function GetActiveBrokerConnectionIndexCount(out connectionIndexCount: Integer): ISharedBrokerErrorCode; safecall; - function GetActiveBrokerConnectionInfo(connectionIndex: Integer; - out connectedServerIp: WideString; - out connectedServerPort: Integer; - out lastContext: WideString): ISharedBrokerErrorCode; safecall; - function GetActiveBrokerConnectionIndexFromUniqueClientId(UniqueClientId: Integer; - out connectionIndex: Integer): ISharedBrokerErrorCode; safecall; - function GetRpcCallFromHistory(uniqueRpcId: Integer; out UniqueClientId: Integer; - out brokerContext: WideString; out RpcName: WideString; - out RpcParams: WideString; out rpcResult: WideString; - out rpcStartDateTime: Double; out rpcDuration: Integer): ISharedBrokerErrorCode; safecall; - function GetRpcCallFromHistoryIndex(UniqueClientId: Integer; rpcCallIndex: Integer; - out uniqueRpcId: Integer; out brokerContext: WideString; - out RpcName: WideString; out RpcParams: WideString; - out rpcResult: WideString; out rpcStartDateTime: Double; - out rpcDuration: Integer): ISharedBrokerErrorCode; safecall; - function GetRpcClientIdFromHistory(uniqueRpcId: Integer; out UniqueClientId: Integer; - out ClientName: WideString): ISharedBrokerErrorCode; safecall; - function GetConnectedClientCount(out connectedClientCount: Integer): ISharedBrokerErrorCode; safecall; - function Get_CurrentContext: WideString; safecall; - function Get_User: WideString; safecall; - function Get_Login: WideString; safecall; - procedure Set_Login(const Value: WideString); safecall; - function Get_RpcbError: WideString; safecall; - function Get_Socket: Integer; safecall; - function Get_KernelLogin: WordBool; safecall; - procedure Set_KernelLogin(Value: WordBool); safecall; - function Get_ShowErrorMsgs: ISharedBrokerShowErrorMsgs; safecall; - procedure Set_ShowErrorMsgs(Value: ISharedBrokerShowErrorMsgs); safecall; - property RpcVersion: WideString read Get_RpcVersion write Set_RpcVersion; - property RpcHistoryEnabled: WordBool read Get_RpcHistoryEnabled write Set_RpcHistoryEnabled; - property PerClientRpcHistoryLimit: Integer read Get_PerClientRpcHistoryLimit write Set_PerClientRpcHistoryLimit; - property CurrentContext: WideString read Get_CurrentContext; - property User: WideString read Get_User; - property Login: WideString read Get_Login write Set_Login; - property RpcbError: WideString read Get_RpcbError; - property Socket: Integer read Get_Socket; - property KernelLogin: WordBool read Get_KernelLogin write Set_KernelLogin; - property ShowErrorMsgs: ISharedBrokerShowErrorMsgs read Get_ShowErrorMsgs write Set_ShowErrorMsgs; - end; - -// *********************************************************************// -// DispIntf: ISharedBrokerDisp -// Flags: (4416) Dual OleAutomation Dispatchable -// GUID: {E1D9A5E6-B7C6-40AD-AC34-6A3E12BDC328} -// *********************************************************************// - ISharedBrokerDisp = dispinterface - ['{E1D9A5E6-B7C6-40AD-AC34-6A3E12BDC328}'] - function BrokerConnect(const ClientName: WideString; ConnectionType: ISharedBrokerClient; - const ServerPort: WideString; WantDebug: WordBool; - AllowShared: WordBool; KernelLogin: WordBool; - ShowErrMsgs: ISharedBrokerShowErrorMsgs; RpcTimeLim: SYSINT; - var LoginStr: WideString; out UniqueClientIId: SYSINT; - out ErrorMsg: WideString): ISharedBrokerErrorCode; dispid 1; - function BrokerDisconnect: ISharedBrokerErrorCode; dispid 2; - function BrokerSetContext(const OptionName: WideString): ISharedBrokerErrorCode; dispid 3; - function BrokerCall(const RpcName: WideString; const RpcParams: WideString; - RpcTimeLimit: Integer; out RpcResults: WideString; - out UniqueRpcCallId: Integer): ISharedBrokerErrorCode; dispid 4; - function ReadRegDataDefault(Root: IRegistryRootEnum; const Key: WideString; - const Name: WideString; const Default: WideString; - out RegResult: WideString): ISharedBrokerErrorCode; dispid 5; - property RpcVersion: WideString dispid 7; - property RpcHistoryEnabled: WordBool dispid 6; - property PerClientRpcHistoryLimit: Integer dispid 8; - function GetRpcHistoryCountForClient(UniqueClientId: Integer; out rpcHistoryCount: Integer): ISharedBrokerErrorCode; dispid 10; - function GetClientIdAndNameFromIndex(clientIndex: Integer; out UniqueClientId: Integer; - out ClientName: WideString): ISharedBrokerErrorCode; dispid 11; - function LogoutConnectedClients(logoutTimeLimit: Integer): ISharedBrokerErrorCode; dispid 12; - function GetClientNameFromUniqueClientId(UniqueClientId: Integer; out ClientName: WideString): ISharedBrokerErrorCode; dispid 13; - function GetActiveBrokerConnectionIndexCount(out connectionIndexCount: Integer): ISharedBrokerErrorCode; dispid 14; - function GetActiveBrokerConnectionInfo(connectionIndex: Integer; - out connectedServerIp: WideString; - out connectedServerPort: Integer; - out lastContext: WideString): ISharedBrokerErrorCode; dispid 15; - function GetActiveBrokerConnectionIndexFromUniqueClientId(UniqueClientId: Integer; - out connectionIndex: Integer): ISharedBrokerErrorCode; dispid 16; - function GetRpcCallFromHistory(uniqueRpcId: Integer; out UniqueClientId: Integer; - out brokerContext: WideString; out RpcName: WideString; - out RpcParams: WideString; out rpcResult: WideString; - out rpcStartDateTime: Double; out rpcDuration: Integer): ISharedBrokerErrorCode; dispid 17; - function GetRpcCallFromHistoryIndex(UniqueClientId: Integer; rpcCallIndex: Integer; - out uniqueRpcId: Integer; out brokerContext: WideString; - out RpcName: WideString; out RpcParams: WideString; - out rpcResult: WideString; out rpcStartDateTime: Double; - out rpcDuration: Integer): ISharedBrokerErrorCode; dispid 18; - function GetRpcClientIdFromHistory(uniqueRpcId: Integer; out UniqueClientId: Integer; - out ClientName: WideString): ISharedBrokerErrorCode; dispid 19; - function GetConnectedClientCount(out connectedClientCount: Integer): ISharedBrokerErrorCode; dispid 20; - property CurrentContext: WideString readonly dispid 9; - property User: WideString readonly dispid 22; - property Login: WideString dispid 23; - property RpcbError: WideString readonly dispid 24; - property Socket: Integer readonly dispid 25; - property KernelLogin: WordBool dispid 26; - property ShowErrorMsgs: ISharedBrokerShowErrorMsgs dispid 27; - end; - -// *********************************************************************// -// DispIntf: ISharedBrokerEvents -// Flags: (4096) Dispatchable -// GUID: {CBEA7167-4F9B-465A-B82E-4CEBDF933C35} -// *********************************************************************// - ISharedBrokerEvents = dispinterface - ['{CBEA7167-4F9B-465A-B82E-4CEBDF933C35}'] - procedure OnLogout; dispid 1; - procedure OnRpcCallRecorded(uniqueRpcId: SYSINT); dispid 2; - procedure OnClientConnect(UniqueClientId: SYSINT; Connection: ISharedBrokerConnection); dispid 3; - procedure OnClientDisconnect(UniqueClientId: SYSINT); dispid 4; - procedure OnContextChanged(connectionIndex: SYSINT; const NewContext: WideString); dispid 5; - procedure OnRPCBFailure(const ErrorText: WideString); dispid 6; - procedure OnLoginError(const ErrorText: WideString); dispid 7; - procedure OnConnectionDropped(connectionIndex: SYSINT; const ErrorText: WideString); dispid 8; - end; - -// *********************************************************************// -// The Class CoSharedBroker provides a Create and CreateRemote method to -// create instances of the default interface ISharedBroker exposed by -// the CoClass SharedBroker. The functions are intended to be used by -// clients wishing to automate the CoClass objects exposed by the -// server of this typelibrary. -// *********************************************************************// - CoSharedBroker = class - class function Create: ISharedBroker; - class function CreateRemote(const MachineName: string): ISharedBroker; - end; - - TSharedBrokerOnRpcCallRecorded = procedure(Sender: TObject; uniqueRpcId: SYSINT) of object; - TSharedBrokerOnClientConnect = procedure(Sender: TObject; UniqueClientId: SYSINT; - Connection: ISharedBrokerConnection) of object; - TSharedBrokerOnClientDisconnect = procedure(Sender: TObject; UniqueClientId: SYSINT) of object; - TSharedBrokerOnContextChanged = procedure(Sender: TObject; connectionIndex: SYSINT; - var NewContext: OleVariant) of object; - TSharedBrokerOnRPCBFailure = procedure(Sender: TObject; var ErrorText: OleVariant) of object; - TSharedBrokerOnLoginError = procedure(Sender: TObject; var ErrorText: OleVariant) of object; - TSharedBrokerOnConnectionDropped = procedure(Sender: TObject; connectionIndex: SYSINT; - var ErrorText: OleVariant) of object; - - -// *********************************************************************// -// OLE Server Proxy class declaration -// Server Object : TSharedBroker -// Help String : SharedBroker Object -// Default Interface: ISharedBroker -// Def. Intf. DISP? : No -// Event Interface: ISharedBrokerEvents -// TypeFlags : (2) CanCreate -// *********************************************************************// -{$IFDEF LIVE_SERVER_AT_DESIGN_TIME} - TSharedBrokerProperties= class; -{$ENDIF} - TSharedBroker = class(TOleServer) - private - FOnLogout: TNotifyEvent; - FOnRpcCallRecorded: TSharedBrokerOnRpcCallRecorded; - FOnClientConnect: TSharedBrokerOnClientConnect; - FOnClientDisconnect: TSharedBrokerOnClientDisconnect; - FOnContextChanged: TSharedBrokerOnContextChanged; - FOnRPCBFailure: TSharedBrokerOnRPCBFailure; - FOnLoginError: TSharedBrokerOnLoginError; - FOnConnectionDropped: TSharedBrokerOnConnectionDropped; - FIntf: ISharedBroker; -{$IFDEF LIVE_SERVER_AT_DESIGN_TIME} - FProps: TSharedBrokerProperties; - function GetServerProperties: TSharedBrokerProperties; -{$ENDIF} - function GetDefaultInterface: ISharedBroker; - protected - procedure InitServerData; override; - procedure InvokeEvent(DispID: TDispID; var Params: TVariantArray); override; - function Get_RpcVersion: WideString; - procedure Set_RpcVersion(const version: WideString); - function Get_RpcHistoryEnabled: WordBool; - procedure Set_RpcHistoryEnabled(enabled: WordBool); - function Get_PerClientRpcHistoryLimit: Integer; - procedure Set_PerClientRpcHistoryLimit(limit: Integer); - function Get_CurrentContext: WideString; - function Get_User: WideString; - function Get_Login: WideString; - procedure Set_Login(const Value: WideString); - function Get_RpcbError: WideString; - function Get_Socket: Integer; - function Get_KernelLogin: WordBool; - procedure Set_KernelLogin(Value: WordBool); - function Get_ShowErrorMsgs: ISharedBrokerShowErrorMsgs; - procedure Set_ShowErrorMsgs(Value: ISharedBrokerShowErrorMsgs); - public - constructor Create(AOwner: TComponent); override; - destructor Destroy; override; - procedure Connect; override; - procedure ConnectTo(svrIntf: ISharedBroker); - procedure Disconnect; override; - function BrokerConnect(const ClientName: WideString; ConnectionType: ISharedBrokerClient; - const ServerPort: WideString; WantDebug: WordBool; - AllowShared: WordBool; KernelLogin: WordBool; - ShowErrMsgs: ISharedBrokerShowErrorMsgs; RpcTimeLim: SYSINT; - var LoginStr: WideString; out UniqueClientIId: SYSINT; - out ErrorMsg: WideString): ISharedBrokerErrorCode; - function BrokerDisconnect: ISharedBrokerErrorCode; - function BrokerSetContext(const OptionName: WideString): ISharedBrokerErrorCode; - function BrokerCall(const RpcName: WideString; const RpcParams: WideString; - RpcTimeLimit: Integer; out RpcResults: WideString; - out UniqueRpcCallId: Integer): ISharedBrokerErrorCode; - function ReadRegDataDefault(Root: IRegistryRootEnum; const Key: WideString; - const Name: WideString; const Default: WideString; - out RegResult: WideString): ISharedBrokerErrorCode; - function GetRpcHistoryCountForClient(UniqueClientId: Integer; out rpcHistoryCount: Integer): ISharedBrokerErrorCode; - function GetClientIdAndNameFromIndex(clientIndex: Integer; out UniqueClientId: Integer; - out ClientName: WideString): ISharedBrokerErrorCode; - function LogoutConnectedClients(logoutTimeLimit: Integer): ISharedBrokerErrorCode; - function GetClientNameFromUniqueClientId(UniqueClientId: Integer; out ClientName: WideString): ISharedBrokerErrorCode; - function GetActiveBrokerConnectionIndexCount(out connectionIndexCount: Integer): ISharedBrokerErrorCode; - function GetActiveBrokerConnectionInfo(connectionIndex: Integer; - out connectedServerIp: WideString; - out connectedServerPort: Integer; - out lastContext: WideString): ISharedBrokerErrorCode; - function GetActiveBrokerConnectionIndexFromUniqueClientId(UniqueClientId: Integer; - out connectionIndex: Integer): ISharedBrokerErrorCode; - function GetRpcCallFromHistory(uniqueRpcId: Integer; out UniqueClientId: Integer; - out brokerContext: WideString; out RpcName: WideString; - out RpcParams: WideString; out rpcResult: WideString; - out rpcStartDateTime: Double; out rpcDuration: Integer): ISharedBrokerErrorCode; - function GetRpcCallFromHistoryIndex(UniqueClientId: Integer; rpcCallIndex: Integer; - out uniqueRpcId: Integer; out brokerContext: WideString; - out RpcName: WideString; out RpcParams: WideString; - out rpcResult: WideString; out rpcStartDateTime: Double; - out rpcDuration: Integer): ISharedBrokerErrorCode; - function GetRpcClientIdFromHistory(uniqueRpcId: Integer; out UniqueClientId: Integer; - out ClientName: WideString): ISharedBrokerErrorCode; - function GetConnectedClientCount(out connectedClientCount: Integer): ISharedBrokerErrorCode; - property DefaultInterface: ISharedBroker read GetDefaultInterface; - property CurrentContext: WideString read Get_CurrentContext; - property User: WideString read Get_User; - property RpcbError: WideString read Get_RpcbError; - property Socket: Integer read Get_Socket; - property RpcVersion: WideString read Get_RpcVersion write Set_RpcVersion; - property RpcHistoryEnabled: WordBool read Get_RpcHistoryEnabled write Set_RpcHistoryEnabled; - property PerClientRpcHistoryLimit: Integer read Get_PerClientRpcHistoryLimit write Set_PerClientRpcHistoryLimit; - property Login: WideString read Get_Login write Set_Login; - property KernelLogin: WordBool read Get_KernelLogin write Set_KernelLogin; - property ShowErrorMsgs: ISharedBrokerShowErrorMsgs read Get_ShowErrorMsgs write Set_ShowErrorMsgs; - published -{$IFDEF LIVE_SERVER_AT_DESIGN_TIME} - property Server: TSharedBrokerProperties read GetServerProperties; -{$ENDIF} - property OnLogout: TNotifyEvent read FOnLogout write FOnLogout; - property OnRpcCallRecorded: TSharedBrokerOnRpcCallRecorded read FOnRpcCallRecorded write FOnRpcCallRecorded; - property OnClientConnect: TSharedBrokerOnClientConnect read FOnClientConnect write FOnClientConnect; - property OnClientDisconnect: TSharedBrokerOnClientDisconnect read FOnClientDisconnect write FOnClientDisconnect; - property OnContextChanged: TSharedBrokerOnContextChanged read FOnContextChanged write FOnContextChanged; - property OnRPCBFailure: TSharedBrokerOnRPCBFailure read FOnRPCBFailure write FOnRPCBFailure; - property OnLoginError: TSharedBrokerOnLoginError read FOnLoginError write FOnLoginError; - property OnConnectionDropped: TSharedBrokerOnConnectionDropped read FOnConnectionDropped write FOnConnectionDropped; - end; - -{$IFDEF LIVE_SERVER_AT_DESIGN_TIME} -// *********************************************************************// -// OLE Server Properties Proxy Class -// Server Object : TSharedBroker -// (This object is used by the IDE's Property Inspector to allow editing -// of the properties of this server) -// *********************************************************************// - TSharedBrokerProperties = class(TPersistent) - private - FServer: TSharedBroker; - function GetDefaultInterface: ISharedBroker; - constructor Create(AServer: TSharedBroker); - protected - function Get_RpcVersion: WideString; - procedure Set_RpcVersion(const version: WideString); - function Get_RpcHistoryEnabled: WordBool; - procedure Set_RpcHistoryEnabled(enabled: WordBool); - function Get_PerClientRpcHistoryLimit: Integer; - procedure Set_PerClientRpcHistoryLimit(limit: Integer); - function Get_CurrentContext: WideString; - function Get_User: WideString; - function Get_Login: WideString; - procedure Set_Login(const Value: WideString); - function Get_RpcbError: WideString; - function Get_Socket: Integer; - function Get_KernelLogin: WordBool; - procedure Set_KernelLogin(Value: WordBool); - function Get_ShowErrorMsgs: ISharedBrokerShowErrorMsgs; - procedure Set_ShowErrorMsgs(Value: ISharedBrokerShowErrorMsgs); - public - property DefaultInterface: ISharedBroker read GetDefaultInterface; - published - property RpcVersion: WideString read Get_RpcVersion write Set_RpcVersion; - property RpcHistoryEnabled: WordBool read Get_RpcHistoryEnabled write Set_RpcHistoryEnabled; - property PerClientRpcHistoryLimit: Integer read Get_PerClientRpcHistoryLimit write Set_PerClientRpcHistoryLimit; - property Login: WideString read Get_Login write Set_Login; - property KernelLogin: WordBool read Get_KernelLogin write Set_KernelLogin; - property ShowErrorMsgs: ISharedBrokerShowErrorMsgs read Get_ShowErrorMsgs write Set_ShowErrorMsgs; - end; -{$ENDIF} - - -// procedure Register; - -implementation - -uses ComObj; - -class function CoSharedBroker.Create: ISharedBroker; -begin - Result := CreateComObject(CLASS_SharedBroker) as ISharedBroker; -end; - -class function CoSharedBroker.CreateRemote(const MachineName: string): ISharedBroker; -begin - Result := CreateRemoteComObject(MachineName, CLASS_SharedBroker) as ISharedBroker; -end; - -procedure TSharedBroker.InitServerData; -const - CServerData: TServerData = ( - ClassID: '{EB44A5CD-1871-429F-A5BC-19C71B722182}'; - IntfIID: '{E1D9A5E6-B7C6-40AD-AC34-6A3E12BDC328}'; - EventIID: '{CBEA7167-4F9B-465A-B82E-4CEBDF933C35}'; - LicenseKey: nil; - Version: 500); -begin - ServerData := @CServerData; -end; - -procedure TSharedBroker.Connect; -var - punk: IUnknown; -begin - if FIntf = nil then - begin - punk := GetServer; - ConnectEvents(punk); - Fintf:= punk as ISharedBroker; - end; -end; - -procedure TSharedBroker.ConnectTo(svrIntf: ISharedBroker); -begin - Disconnect; - FIntf := svrIntf; - ConnectEvents(FIntf); -end; - -procedure TSharedBroker.DisConnect; -begin - if Fintf <> nil then - begin - DisconnectEvents(FIntf); - FIntf := nil; - end; -end; - -function TSharedBroker.GetDefaultInterface: ISharedBroker; -begin - if FIntf = nil then - Connect; - Assert(FIntf <> nil, 'DefaultInterface is NULL. Component is not connected to Server. You must call ''Connect'' or ''ConnectTo'' before this operation'); - Result := FIntf; -end; - -constructor TSharedBroker.Create(AOwner: TComponent); -begin - inherited Create(AOwner); -{$IFDEF LIVE_SERVER_AT_DESIGN_TIME} - FProps := TSharedBrokerProperties.Create(Self); -{$ENDIF} -end; - -destructor TSharedBroker.Destroy; -begin -{$IFDEF LIVE_SERVER_AT_DESIGN_TIME} - FProps.Free; -{$ENDIF} - inherited Destroy; -end; - -{$IFDEF LIVE_SERVER_AT_DESIGN_TIME} -function TSharedBroker.GetServerProperties: TSharedBrokerProperties; -begin - Result := FProps; -end; -{$ENDIF} - -procedure TSharedBroker.InvokeEvent(DispID: TDispID; var Params: TVariantArray); -begin - case DispID of - -1: Exit; // DISPID_UNKNOWN - 1: if Assigned(FOnLogout) then - FOnLogout(Self); - 2: if Assigned(FOnRpcCallRecorded) then - FOnRpcCallRecorded(Self, Params[0] {SYSINT}); - 3: if Assigned(FOnClientConnect) then - FOnClientConnect(Self, Params[0] {SYSINT}, Params[1] {ISharedBrokerConnection}); - 4: if Assigned(FOnClientDisconnect) then - FOnClientDisconnect(Self, Params[0] {SYSINT}); - 5: if Assigned(FOnContextChanged) then - FOnContextChanged(Self, Params[0] {SYSINT}, Params[1] {const WideString}); - 6: if Assigned(FOnRPCBFailure) then - FOnRPCBFailure(Self, Params[0] {const WideString}); - 7: if Assigned(FOnLoginError) then - FOnLoginError(Self, Params[0] {const WideString}); - 8: if Assigned(FOnConnectionDropped) then - FOnConnectionDropped(Self, Params[0] {SYSINT}, Params[1] {const WideString}); - end; {case DispID} -end; - -function TSharedBroker.Get_RpcVersion: WideString; -begin - Result := DefaultInterface.Get_RpcVersion; -end; - -procedure TSharedBroker.Set_RpcVersion(const version: WideString); -begin - DefaultInterface.Set_RpcVersion(version); -end; - -function TSharedBroker.Get_RpcHistoryEnabled: WordBool; -begin - Result := DefaultInterface.Get_RpcHistoryEnabled; -end; - -procedure TSharedBroker.Set_RpcHistoryEnabled(enabled: WordBool); -begin - DefaultInterface.Set_RpcHistoryEnabled(enabled); -end; - -function TSharedBroker.Get_PerClientRpcHistoryLimit: Integer; -begin - Result := DefaultInterface.Get_PerClientRpcHistoryLimit; -end; - -procedure TSharedBroker.Set_PerClientRpcHistoryLimit(limit: Integer); -begin - DefaultInterface.Set_PerClientRpcHistoryLimit(limit); -end; - -function TSharedBroker.Get_CurrentContext: WideString; -begin - Result := DefaultInterface.Get_CurrentContext; -end; - -function TSharedBroker.Get_User: WideString; -begin - Result := DefaultInterface.Get_User; -end; - -function TSharedBroker.Get_Login: WideString; -begin - Result := DefaultInterface.Get_Login; -end; - -procedure TSharedBroker.Set_Login(const Value: WideString); -begin - DefaultInterface.Set_Login(Value); -end; - -function TSharedBroker.Get_RpcbError: WideString; -begin - Result := DefaultInterface.Get_RpcbError; -end; - -function TSharedBroker.Get_Socket: Integer; -begin - Result := DefaultInterface.Get_Socket; -end; - -function TSharedBroker.Get_KernelLogin: WordBool; -begin - Result := DefaultInterface.Get_KernelLogin; -end; - -procedure TSharedBroker.Set_KernelLogin(Value: WordBool); -begin - DefaultInterface.Set_KernelLogin(Value); -end; - -function TSharedBroker.Get_ShowErrorMsgs: ISharedBrokerShowErrorMsgs; -begin - Result := DefaultInterface.Get_ShowErrorMsgs; -end; - -procedure TSharedBroker.Set_ShowErrorMsgs(Value: ISharedBrokerShowErrorMsgs); -begin - DefaultInterface.Set_ShowErrorMsgs(Value); -end; - -function TSharedBroker.BrokerConnect(const ClientName: WideString; - ConnectionType: ISharedBrokerClient; - const ServerPort: WideString; WantDebug: WordBool; - AllowShared: WordBool; KernelLogin: WordBool; - ShowErrMsgs: ISharedBrokerShowErrorMsgs; RpcTimeLim: SYSINT; - var LoginStr: WideString; out UniqueClientIId: SYSINT; - out ErrorMsg: WideString): ISharedBrokerErrorCode; -begin - Result := DefaultInterface.BrokerConnect(ClientName, ConnectionType, ServerPort, WantDebug, - AllowShared, KernelLogin, ShowErrMsgs, RpcTimeLim, - LoginStr, UniqueClientIId, ErrorMsg); -end; - -function TSharedBroker.BrokerDisconnect: ISharedBrokerErrorCode; -begin - Result := DefaultInterface.BrokerDisconnect; -end; - -function TSharedBroker.BrokerSetContext(const OptionName: WideString): ISharedBrokerErrorCode; -begin - Result := DefaultInterface.BrokerSetContext(OptionName); -end; - -function TSharedBroker.BrokerCall(const RpcName: WideString; const RpcParams: WideString; - RpcTimeLimit: Integer; out RpcResults: WideString; - out UniqueRpcCallId: Integer): ISharedBrokerErrorCode; -begin - Result := DefaultInterface.BrokerCall(RpcName, RpcParams, RpcTimeLimit, RpcResults, - UniqueRpcCallId); -end; - -function TSharedBroker.ReadRegDataDefault(Root: IRegistryRootEnum; const Key: WideString; - const Name: WideString; const Default: WideString; - out RegResult: WideString): ISharedBrokerErrorCode; -begin - Result := DefaultInterface.ReadRegDataDefault(Root, Key, Name, Default, RegResult); -end; - -function TSharedBroker.GetRpcHistoryCountForClient(UniqueClientId: Integer; - out rpcHistoryCount: Integer): ISharedBrokerErrorCode; -begin - Result := DefaultInterface.GetRpcHistoryCountForClient(UniqueClientId, rpcHistoryCount); -end; - -function TSharedBroker.GetClientIdAndNameFromIndex(clientIndex: Integer; - out UniqueClientId: Integer; - out ClientName: WideString): ISharedBrokerErrorCode; -begin - Result := DefaultInterface.GetClientIdAndNameFromIndex(clientIndex, UniqueClientId, ClientName); -end; - -function TSharedBroker.LogoutConnectedClients(logoutTimeLimit: Integer): ISharedBrokerErrorCode; -begin - Result := DefaultInterface.LogoutConnectedClients(logoutTimeLimit); -end; - -function TSharedBroker.GetClientNameFromUniqueClientId(UniqueClientId: Integer; - out ClientName: WideString): ISharedBrokerErrorCode; -begin - Result := DefaultInterface.GetClientNameFromUniqueClientId(UniqueClientId, ClientName); -end; - -function TSharedBroker.GetActiveBrokerConnectionIndexCount(out connectionIndexCount: Integer): ISharedBrokerErrorCode; -begin - Result := DefaultInterface.GetActiveBrokerConnectionIndexCount(connectionIndexCount); -end; - -function TSharedBroker.GetActiveBrokerConnectionInfo(connectionIndex: Integer; - out connectedServerIp: WideString; - out connectedServerPort: Integer; - out lastContext: WideString): ISharedBrokerErrorCode; -begin - Result := DefaultInterface.GetActiveBrokerConnectionInfo(connectionIndex, connectedServerIp, - connectedServerPort, lastContext); -end; - -function TSharedBroker.GetActiveBrokerConnectionIndexFromUniqueClientId(UniqueClientId: Integer; - out connectionIndex: Integer): ISharedBrokerErrorCode; -begin - Result := DefaultInterface.GetActiveBrokerConnectionIndexFromUniqueClientId(UniqueClientId, - connectionIndex); -end; - -function TSharedBroker.GetRpcCallFromHistory(uniqueRpcId: Integer; out UniqueClientId: Integer; - out brokerContext: WideString; - out RpcName: WideString; out RpcParams: WideString; - out rpcResult: WideString; - out rpcStartDateTime: Double; out rpcDuration: Integer): ISharedBrokerErrorCode; -begin - Result := DefaultInterface.GetRpcCallFromHistory(uniqueRpcId, UniqueClientId, brokerContext, - RpcName, RpcParams, rpcResult, rpcStartDateTime, - rpcDuration); -end; - -function TSharedBroker.GetRpcCallFromHistoryIndex(UniqueClientId: Integer; rpcCallIndex: Integer; - out uniqueRpcId: Integer; - out brokerContext: WideString; - out RpcName: WideString; - out RpcParams: WideString; - out rpcResult: WideString; - out rpcStartDateTime: Double; - out rpcDuration: Integer): ISharedBrokerErrorCode; -begin - Result := DefaultInterface.GetRpcCallFromHistoryIndex(UniqueClientId, rpcCallIndex, uniqueRpcId, - brokerContext, RpcName, RpcParams, - rpcResult, rpcStartDateTime, rpcDuration); -end; - -function TSharedBroker.GetRpcClientIdFromHistory(uniqueRpcId: Integer; - out UniqueClientId: Integer; - out ClientName: WideString): ISharedBrokerErrorCode; -begin - Result := DefaultInterface.GetRpcClientIdFromHistory(uniqueRpcId, UniqueClientId, ClientName); -end; - -function TSharedBroker.GetConnectedClientCount(out connectedClientCount: Integer): ISharedBrokerErrorCode; -begin - Result := DefaultInterface.GetConnectedClientCount(connectedClientCount); -end; - -{$IFDEF LIVE_SERVER_AT_DESIGN_TIME} -constructor TSharedBrokerProperties.Create(AServer: TSharedBroker); -begin - inherited Create; - FServer := AServer; -end; - -function TSharedBrokerProperties.GetDefaultInterface: ISharedBroker; -begin - Result := FServer.DefaultInterface; -end; - -function TSharedBrokerProperties.Get_RpcVersion: WideString; -begin - Result := DefaultInterface.Get_RpcVersion; -end; - -procedure TSharedBrokerProperties.Set_RpcVersion(const version: WideString); -begin - DefaultInterface.Set_RpcVersion(version); -end; - -function TSharedBrokerProperties.Get_RpcHistoryEnabled: WordBool; -begin - Result := DefaultInterface.Get_RpcHistoryEnabled; -end; - -procedure TSharedBrokerProperties.Set_RpcHistoryEnabled(enabled: WordBool); -begin - DefaultInterface.Set_RpcHistoryEnabled(enabled); -end; - -function TSharedBrokerProperties.Get_PerClientRpcHistoryLimit: Integer; -begin - Result := DefaultInterface.Get_PerClientRpcHistoryLimit; -end; - -procedure TSharedBrokerProperties.Set_PerClientRpcHistoryLimit(limit: Integer); -begin - DefaultInterface.Set_PerClientRpcHistoryLimit(limit); -end; - -function TSharedBrokerProperties.Get_CurrentContext: WideString; -begin - Result := DefaultInterface.Get_CurrentContext; -end; - -function TSharedBrokerProperties.Get_User: WideString; -begin - Result := DefaultInterface.Get_User; -end; - -function TSharedBrokerProperties.Get_Login: WideString; -begin - Result := DefaultInterface.Get_Login; -end; - -procedure TSharedBrokerProperties.Set_Login(const Value: WideString); -begin - DefaultInterface.Set_Login(Value); -end; - -function TSharedBrokerProperties.Get_RpcbError: WideString; -begin - Result := DefaultInterface.Get_RpcbError; -end; - -function TSharedBrokerProperties.Get_Socket: Integer; -begin - Result := DefaultInterface.Get_Socket; -end; - -function TSharedBrokerProperties.Get_KernelLogin: WordBool; -begin - Result := DefaultInterface.Get_KernelLogin; -end; - -procedure TSharedBrokerProperties.Set_KernelLogin(Value: WordBool); -begin - DefaultInterface.Set_KernelLogin(Value); -end; - -function TSharedBrokerProperties.Get_ShowErrorMsgs: ISharedBrokerShowErrorMsgs; -begin - Result := DefaultInterface.Get_ShowErrorMsgs; -end; - -procedure TSharedBrokerProperties.Set_ShowErrorMsgs(Value: ISharedBrokerShowErrorMsgs); -begin - DefaultInterface.Set_ShowErrorMsgs(Value); -end; - -{$ENDIF} -{ -procedure Register; -begin - RegisterComponents('Kernel',[TSharedBroker]); -end; -} -end. diff --git a/BDK32/SharedBrokerDebugger/SharedBrokerDebugger.dof b/BDK32/SharedBrokerDebugger/SharedBrokerDebugger.dof deleted file mode 100644 index a8caf85..0000000 --- a/BDK32/SharedBrokerDebugger/SharedBrokerDebugger.dof +++ /dev/null @@ -1,85 +0,0 @@ -[Compiler] -A=1 -B=0 -C=1 -D=1 -E=0 -F=0 -G=1 -H=1 -I=1 -J=1 -K=0 -L=1 -M=0 -N=1 -O=1 -P=1 -Q=0 -R=0 -S=0 -T=0 -U=0 -V=1 -W=0 -X=1 -Y=1 -Z=1 -ShowHints=1 -ShowWarnings=1 -UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; -[Linker] -MapFile=0 -OutputObjs=0 -ConsoleApp=1 -DebugInfo=0 -RemoteSymbols=0 -MinStackSize=16384 -MaxStackSize=1048576 -ImageBase=4194304 -ExeDescription= -[Directories] -OutputDir= -UnitOutputDir= -PackageDLLOutputDir= -PackageDCPOutputDir= -SearchPath= -Packages=Vcl50;Vclx50;Vcldb50;Vclbde50;VclSmp50;vclado50;ibevnt50;vcldbx50;Qrpt50;TeeUI50;TeeDB50;Tee50;Dss50;TeeQR50;VCLIB50;Vclmid50;vclie50;Inetdb50;Inet50;NMFast50;webmid50;dclocx50;dclaxserver50;JLITestFDE;Rz252N50;Rz252D50;CS20Comps50;CSP20I50;gmunitsd5;gmctrlsd5;gmchrtedd5;gmdaouid5;GMDaod5;gmdbgend5;gmdbctrld5;gmadouid5;GMAdod5;democomponentsd5;XUtilsR50;XUDT_R50;XU_R50;Indy50;XWB_R50 -Conditionals= -DebugSourceDirs= -UsePackages=0 -[Parameters] -RunParams= -HostApplication= -[Language] -ActiveLang= -ProjectLang=$00000409 -RootDir= -[Version Info] -IncludeVerInfo=1 -AutoIncBuild=0 -MajorVer=1 -MinorVer=0 -Release=0 -Build=1 -Debug=0 -PreRelease=0 -Special=0 -Private=0 -DLL=0 -Locale=1033 -CodePage=1252 -[Version Info Keys] -CompanyName=Dept. Veteran Affairs, VHA, OI, SD&D, Infrastructure Enhancement -FileDescription= -FileVersion=1.0.0.1 -InternalName= -LegalCopyright=(c) 2002 -LegalTrademarks= -OriginalFilename= -ProductName=RPCSharedBrokerDebugger -ProductVersion=1.0.0.0 -Comments= -[HistoryLists\hlUnitAliases] -Count=1 -Item0=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; diff --git a/BDK32/SharedBrokerDebugger/SharedBrokerDebugger.dpr b/BDK32/SharedBrokerDebugger/SharedBrokerDebugger.dpr deleted file mode 100644 index dce2402..0000000 --- a/BDK32/SharedBrokerDebugger/SharedBrokerDebugger.dpr +++ /dev/null @@ -1,17 +0,0 @@ -program SharedBrokerDebugger; - -uses - Forms, - uBrokerConnectionInfo in 'uBrokerConnectionInfo.pas', - uClientInfo in 'uClientInfo.pas', - fSharedBrokerDebugger in 'fSharedBrokerDebugger.pas' {frmSharedBrokerDebugger}, - fClientRPCLogger in 'fClientRPCLogger.pas' {frmRpcClientLogger}, - uRpcLogEntry in 'uRpcLogEntry.pas'; - -{$R *.RES} - -begin - Application.Initialize; - Application.CreateForm(TfrmSharedBrokerDebugger, frmSharedBrokerDebugger); - Application.Run; -end. diff --git a/BDK32/SharedBrokerDebugger/SharedBrokerDebugger.exe b/BDK32/SharedBrokerDebugger/SharedBrokerDebugger.exe deleted file mode 100644 index 72c7532..0000000 Binary files a/BDK32/SharedBrokerDebugger/SharedBrokerDebugger.exe and /dev/null differ diff --git a/BDK32/SharedBrokerDebugger/SharedBrokerDebugger.res b/BDK32/SharedBrokerDebugger/SharedBrokerDebugger.res deleted file mode 100644 index b806fbf..0000000 Binary files a/BDK32/SharedBrokerDebugger/SharedBrokerDebugger.res and /dev/null differ diff --git a/BDK32/SharedBrokerDebugger/fClientInfo.pas b/BDK32/SharedBrokerDebugger/fClientInfo.pas deleted file mode 100644 index fbd2dc8..0000000 --- a/BDK32/SharedBrokerDebugger/fClientInfo.pas +++ /dev/null @@ -1,166 +0,0 @@ -unit fClientInfo; - -interface - -uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, - uBrokerConnectionInfo; - - -type - TForm2 = class(TForm) - private - { Private declarations } - public - { Public declarations } - end; - -{ -/// -/// Summary description for ClientInfo. -/// -} - TClientInfo = class(TPersistent) - private - FUniqueId: Integer; - FName: String; - FBrokerConnectionIndex: Integer; - FRpcHistoryEnabled: Boolean; - FRpcLogger: TClientRpcLogger; - FVisible: Boolean; - protected - function GetVisible: Boolean; - procedure SetVisible(Value: Boolean); - procedure Initialize; - public - Constructor Create; overload; virtual; - Constructor Create(uniqueId: Integer; name: String; connectionIndex: Integer; historyEnabled: Boolean); overload; virtual; - procedure AddRpcLogEntry(entry: TRpcLogEntry; overrideCheckBox: Boolean); - function MakeCheckBoxString: String; - function ToString: String; - property Visible: Boolean read GetVisible write SetVisible; - property Name: String read FName write FName; - property RpcHistoryEnabled: Boolean read FRpcHistoryEnabled write FRPCHistoryEnabled; - property UniqueId: Integer read FUniqueId write FUniqueId; - property BrokerConnectionIndex: Integer read FBrokerConnectionIndex write FBrokerConnectionIndex; - end; - -const - kRpcHistoryEnabledDefault: Boolean = true; - kBrokerConnectionIndexDefault: Integer = -1; - -var - Form2: TForm2; - -implementation - -{$R *.DFM} - -Constructor TClientInfo.Create; -begin - inherited; - Initialize; -end; -{ - /// - /// ClientInfo parameterized constructor - /// - /// - /// - /// - /// -} -Constructor TClientInfo.Create(uniqueId: Integer; name: String; connectionIndex: Integer; historyEnabled: Boolean); -begin - Create; - - FUniqueId := uniqueId; - FName := name; - FBrokerConnectionIndex := connectionIndex; - FRpcHistoryEnabled := historyEnabled; -end; - -procedure TClientInfo.AddRpcLogEntry(entry: TRpcLogEntry; overrideCheckBox: Boolean); -begin - if(FRpcLogger <> nil) then - FRpcLogger.AddRpcLogEntry(entry,overrideCheckBox); -end; - -procedure TClientInfo.SetVisible(Value: Boolean); -begin - if(value) then - begin - if(FRpcLogger = nil) then - begin - FRpcLogger := TClientRpcLogger.Create; -// TODO FRpcLogger.OnRpcLoggerClose += new EventHandler(OnRpcLoggerClosedEventHandler); - FRpcLogger.Text := 'RPC Log for '+Name+' ID='+IntToStr(UniqueId); - end; - FRpcLogger.Visible := true; - end - else - begin - if(FRpcLogger <> nil) then - begin - FRpcLogger.Visible := false; - FRpcLogger := nil; - end; - end; -end; - -function TClientInfo.GetVisible: Boolean; -begin - result := false; - if (FRpcLogger <> nil) then - result := FRpcLogger.Visible; -end; -{ - /// - /// OnLogClosed is called when the ClientRpcLogger window is called - /// Any event handlers by owners of this object should assign - /// an event handler to this event - /// -} -// TODO -// public EventHandler OnLogClosed; -{ - /// - /// MakeCheckBoxString creates a string based on the internal members - /// This string is intended to be used for check box list entries. - /// - /// -} -function TClientInfo.MakeCheckBoxString: String; -begin - Result := ToString; -end; - -{ - /// - /// ToString returns a readable string representation of the member - /// - /// -} -function TClientInfo.ToString: String; -begin - result := FName+' connection='+IntToStr(FBrokerConnectionIndex)+' id='+IntToStr(FUniqueId); -end; - -procedure TClientInfo.Initialize; -begin - FBrokerConnectionIndex := kBrokerConnectionIndexDefault; - FRpcHistoryEnabled := kRpcHistoryEnabledDefault; - FRpcLogger := nil; -end; - -// TODO -{ -procedure TClientInfo.OnRpcLoggerClosedEventHandler(object sender, EventArgs e) -begin - // Pass the message on to my owner - Visible := false; - OnLogClosed(Self,nil); -end; -} - -end. - diff --git a/BDK32/SharedBrokerDebugger/fClientRPCLogger.dfm b/BDK32/SharedBrokerDebugger/fClientRPCLogger.dfm deleted file mode 100644 index 873a687..0000000 --- a/BDK32/SharedBrokerDebugger/fClientRPCLogger.dfm +++ /dev/null @@ -1,264 +0,0 @@ -object frmRpcClientLogger: TfrmRpcClientLogger - Left = 173 - Top = 0 - Width = 665 - Height = 578 - Caption = 'frmRpcClientLogger' - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'MS Sans Serif' - Font.Style = [] - Menu = MainMenu1 - OldCreateOrder = False - OnClose = FormClose - PixelsPerInch = 96 - TextHeight = 13 - object lblMaxRPCEntries: TLabel - Left = 232 - Top = 16 - Width = 104 - Height = 13 - Anchors = [akTop, akRight] - Caption = '&Maximum RPC Entries' - end - object cbxEnableRPCLogging: TCheckBox - Left = 528 - Top = 16 - Width = 121 - Height = 17 - Alignment = taLeftJustify - Anchors = [akTop, akRight] - Caption = '&Enable RPC Logging' - Checked = True - State = cbChecked - TabOrder = 7 - end - object UpDown1: TUpDown - Left = 425 - Top = 8 - Width = 15 - Height = 21 - Anchors = [akTop, akRight] - Associate = maxRpcLogEntriesNumericUpDown - Min = 0 - Position = 100 - TabOrder = 0 - Wrap = False - OnClick = UpDown1Click - end - object maxRpcLogEntriesNumericUpDown: TEdit - Left = 360 - Top = 8 - Width = 65 - Height = 21 - Anchors = [akTop, akRight] - TabOrder = 6 - Text = '100' - end - object rpcLogListBox: TListBox - Left = 8 - Top = 32 - Width = 641 - Height = 143 - Anchors = [akLeft, akTop, akRight] - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'Courier New' - Font.Style = [] - ItemHeight = 14 - ParentFont = False - PopupMenu = PopupMenu1 - TabOrder = 1 - OnClick = rpcLogListBoxClick - end - object Panel1: TPanel - Left = 8 - Top = 165 - Width = 641 - Height = 153 - Anchors = [akLeft, akTop, akRight, akBottom] - TabOrder = 2 - object lblRPCName: TLabel - Left = 16 - Top = 16 - Width = 53 - Height = 13 - Caption = 'RPC Name' - end - object lblRPCDebugID: TLabel - Left = 240 - Top = 120 - Width = 71 - Height = 13 - Caption = 'RPC Debug ID' - end - object lblClientName: TLabel - Left = 16 - Top = 88 - Width = 57 - Height = 13 - Caption = 'Client Name' - end - object lblClientDebugID: TLabel - Left = 16 - Top = 120 - Width = 75 - Height = 13 - Caption = 'Client Debug ID' - end - object lblContext: TLabel - Left = 16 - Top = 56 - Width = 36 - Height = 13 - Caption = 'Context' - end - object lblDuration: TLabel - Left = 440 - Top = 120 - Width = 40 - Height = 13 - Caption = 'Duration' - end - object lblParams: TLabel - Left = 8 - Top = 136 - Width = 35 - Height = 13 - Caption = 'Params' - end - object lblResults: TLabel - Left = 336 - Top = 136 - Width = 35 - Height = 13 - Caption = 'Results' - end - object edtRPCName: TEdit - Left = 96 - Top = 16 - Width = 521 - Height = 13 - BorderStyle = bsNone - Color = clBtnFace - TabOrder = 1 - end - object edtRPCDebugID: TEdit - Left = 320 - Top = 120 - Width = 73 - Height = 13 - BorderStyle = bsNone - Color = clBtnFace - TabOrder = 5 - end - object edtClientName: TEdit - Left = 96 - Top = 88 - Width = 521 - Height = 13 - BorderStyle = bsNone - Color = clBtnFace - TabOrder = 3 - end - object edtClientDebugID: TEdit - Left = 96 - Top = 120 - Width = 89 - Height = 13 - BorderStyle = bsNone - Color = clBtnFace - TabOrder = 4 - end - object edtContext: TEdit - Left = 96 - Top = 56 - Width = 521 - Height = 13 - BorderStyle = bsNone - Color = clBtnFace - TabOrder = 2 - end - object edtDuration1: TEdit - Left = 496 - Top = 120 - Width = 121 - Height = 13 - BorderStyle = bsNone - Color = clBtnFace - TabOrder = 6 - end - object Edit2: TEdit - Left = 512 - Top = 136 - Width = 121 - Height = 21 - TabOrder = 0 - Text = 'Edit2' - Visible = False - end - end - object ParamsMemoBox: TRichEdit - Left = 8 - Top = 320 - Width = 313 - Height = 161 - Anchors = [akLeft, akBottom] - Lines.Strings = ( - '') - TabOrder = 3 - end - object ResultsMemoBox: TRichEdit - Left = 336 - Top = 320 - Width = 313 - Height = 161 - Anchors = [akLeft, akRight, akBottom] - TabOrder = 4 - end - object btnClose: TButton - Left = 291 - Top = 496 - Width = 75 - Height = 25 - Anchors = [akLeft, akRight, akBottom] - Caption = 'Close' - TabOrder = 5 - OnClick = btnCloseClick - end - object MainMenu1: TMainMenu - Left = 152 - object File1: TMenuItem - Caption = '&File' - object mnuFileClose: TMenuItem - Caption = '&Close' - OnClick = mnuFileCloseClick - end - end - object Edit1: TMenuItem - Caption = '&Edit' - object mnuEditCopyToClipboard: TMenuItem - Caption = '&Copy Current RPC To ClipBoard' - Enabled = False - OnClick = mnuEditCopyToClipboardClick - end - end - object HGelp1: TMenuItem - Caption = '&Help' - object mnuHelpAbout: TMenuItem - Caption = '&About' - end - end - end - object PopupMenu1: TPopupMenu - Left = 232 - Top = 80 - object mnuPopupCopyToClipboard: TMenuItem - Caption = '&Copy To Clipboard' - OnClick = mnuPopupCopyToClipboardClick - end - end -end diff --git a/BDK32/SharedBrokerDebugger/fClientRPCLogger.pas b/BDK32/SharedBrokerDebugger/fClientRPCLogger.pas deleted file mode 100644 index 3a95391..0000000 --- a/BDK32/SharedBrokerDebugger/fClientRPCLogger.pas +++ /dev/null @@ -1,190 +0,0 @@ -unit fClientRPCLogger; - -interface - -uses - Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, - StdCtrls, ExtCtrls, ComCtrls, Clipbrd, Menus, uRpcLogEntry; - -type - TfrmRpcClientLogger = class(TForm) - cbxEnableRPCLogging: TCheckBox; - lblMaxRPCEntries: TLabel; - UpDown1: TUpDown; - maxRpcLogEntriesNumericUpDown: TEdit; - rpcLogListBox: TListBox; - Panel1: TPanel; - lblRPCName: TLabel; - lblRPCDebugID: TLabel; - lblClientName: TLabel; - lblClientDebugID: TLabel; - lblContext: TLabel; - lblDuration: TLabel; - edtRPCName: TEdit; - edtRPCDebugID: TEdit; - edtClientName: TEdit; - edtClientDebugID: TEdit; - edtContext: TEdit; - edtDuration1: TEdit; - lblParams: TLabel; - lblResults: TLabel; - MainMenu1: TMainMenu; - PopupMenu1: TPopupMenu; - File1: TMenuItem; - mnuFileClose: TMenuItem; - Edit1: TMenuItem; - HGelp1: TMenuItem; - mnuHelpAbout: TMenuItem; - mnuEditCopyToClipboard: TMenuItem; - mnuPopupCopyToClipboard: TMenuItem; - ParamsMemoBox: TRichEdit; - ResultsMemoBox: TRichEdit; - Edit2: TEdit; - btnClose: TButton; - procedure FormClose(Sender: TObject; var Action: TCloseAction); - procedure UpDown1Click(Sender: TObject; Button: TUDBtnType); - procedure mnuEditCopyToClipboardClick(Sender: TObject); - procedure rpcLogListBoxClick(Sender: TObject); - procedure mnuPopupCopyToClipboardClick(Sender: TObject); - procedure mnuFileCloseClick(Sender: TObject); - procedure btnCloseClick(Sender: TObject); - private - { Private declarations } - public - { Public declarations } - procedure DisplayRpcEntry(entry: TRpcLogEntry); - procedure AddRpcLogEntry(entry: TRPCLogEntry; overrideCheckBox: Boolean); - end; - -var - frmRpcClientLogger: TfrmRpcClientLogger; - -implementation - -{$R *.DFM} - -procedure TfrmRpcClientLogger.AddRpcLogEntry(entry: TRPCLogEntry; overrideCheckBox: Boolean); -var - Str, Str1: String; - Max: Integer; -begin - if (cbxEnableRPCLogging.Checked or overrideCheckBox) then - begin - // If the list is full we need to delete the 0th item till we have room for one. - while (rpcLogListBox.Items.Count >= StrToInt(maxRpcLogEntriesNumericUpDown.Text)) do - rpcLogListBox.Items.Delete(0); - with entry do - begin - Max := 30; - if Length(Name) > 30 then - Max := Length(Name); - Str := Copy(Name+' ',1,Max); - Str1 := ' '+IntToStr(Duration); - Str := Str + ' cId: '+IntToStr(UniqueClientId)+' time ='+Copy(Str1,Length(Str1)-5,Length(Str1))+' ms rpcId: '+IntToStr(UniqueId)+' '+ClientName; - end; // with - rpcLogListBox.Items.AddObject(Str, entry); - end; -end; - - procedure TfrmRpcClientLogger.FormClose(Sender: TObject; var Action: TCloseAction); - begin - // - end; - procedure TfrmRpcClientLogger.UpDown1Click(Sender: TObject; Button: TUDBtnType); - begin - // - end; - -procedure TfrmRpcClientLogger.mnuEditCopyToClipboardClick(Sender: TObject); -begin - if RpcLogListBox.ItemIndex > -1 then - mnuPopupCopyToClipboardClick(Self); -end; -procedure TfrmRpcClientLogger.rpcLogListBoxClick(Sender: TObject); -begin - DisplayRpcEntry(TRpcLogEntry(rpcLogListBox.Items.Objects[rpcLogListBox.ItemIndex])); - mnuEditCopyToClipboard.Enabled := True; -end; - -procedure TfrmRpcClientLogger.mnuPopupCopyToClipboardClick(Sender: TObject); -var - RPCEntry: TRpcLogEntry; -begin - RPCEntry := TRpcLogEntry(RpcLogListBox.Items.Objects[RpcLogListBox.ItemIndex]); - Edit2.Text := RPCEntry.CreateClipBoardString; - Edit2.SelectAll; - Edit2.CopyToClipBoard; -end; - - - -// private void rpcLogListBox_SelectedIndexChanged(object sender, System.EventArgs e) - -procedure TfrmRpcClientLogger.DisplayRpcEntry(entry: TRpcLogEntry); -var - Str : String; -begin - Str := entry.CreateParamsDisplayString; //.Split('\n'); - ParamsMemoBox.Lines.Clear; - ParamsMemoBox.Lines.Add(Str); - - resultsMemoBox.Text := entry.CreateResultsDisplayString(); - edtRpcName.Text := entry.Name; - edtRPCDebugId.Text := IntToStr(entry.UniqueId); - edtContext.Text := entry.Context; - if(entry.Duration < 1) then - edtDuration1.Text := '<1ms' - else - edtDuration1.Text := IntToStr(entry.Duration) + ' ms'; - edtClientName.Text := entry.ClientName; - edtClientDebugId.Text := IntToStr(entry.UniqueClientId); -end; - -{ -procedure TfrmRpcClientLogger.FormClose(Sender: TObject; - var Action: TCloseAction); -begin - OnRpcLoggerClose(Self,nil); -end; - -procedure TfrmRpcClientLogger.UpDown1Click(Sender: TObject; - Button: TUDBtnType); -begin - // In case the max entry value is less than the rpc log entries delete the entries - while (StrToInt(maxRpcLogEntriesNumericUpDown.Text) < rpcLogListBox.Items.Count) - rpcLogListBox.Items.Delete(0); -end; - -procedure TfrmRpcClientLogger.mnuEditCopyToClipboardClick(Sender: TObject); -var - Clip: TClipBoard; -begin - // Build a string and put it on the clipboard here. -// Clipboard.SetDataObject(((RpcLogEntry)rpcLogListBox.SelectedItem).CreateClipboardString()); - Clip ::= ClipBoard; - Clip.SetTextBuf(PChar((RpcLogEntry)(rpcLogListBox.Items[rpcLogListBox.ItemIndex]).CreateClipboardString)); -end; - -procedure TfrmRpcClientLogger.rpcLogListBoxClick(Sender: TObject); -begin - DisplayRpcEntry((RpcLogEntry)rpcLogListBox.Items[rpcLogListBox.SelectedIndex]); - mnuEditCopyToClipboard.Enabled := True; -end; - -procedure TfrmRpcClientLogger.mnuPopupCopyToClipboardClick( - Sender: TObject); -begin - mnuEditCopyToClipboardClick(Sender); -end; -} -procedure TfrmRpcClientLogger.mnuFileCloseClick(Sender: TObject); -begin - Self.Visible := False; -end; - -procedure TfrmRpcClientLogger.btnCloseClick(Sender: TObject); -begin - Self.Visible := False; -end; - -end. diff --git a/BDK32/SharedBrokerDebugger/fSharedBrokerDebugger.dfm b/BDK32/SharedBrokerDebugger/fSharedBrokerDebugger.dfm deleted file mode 100644 index a2a2b32..0000000 --- a/BDK32/SharedBrokerDebugger/fSharedBrokerDebugger.dfm +++ /dev/null @@ -1,180 +0,0 @@ -object frmSharedBrokerDebugger: TfrmSharedBrokerDebugger - Left = 146 - Top = 0 - Width = 639 - Height = 571 - Caption = 'SharedRPCBroker Debugger' - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'MS Sans Serif' - Font.Style = [] - Menu = MainMenu1 - OldCreateOrder = False - OnCreate = FormCreate - OnDestroy = FormDestroy - PixelsPerInch = 96 - TextHeight = 13 - object Label1: TLabel - Left = 16 - Top = 16 - Width = 139 - Height = 13 - Caption = 'Current Shared Broker Clients' - end - object Label2: TLabel - Left = 16 - Top = 200 - Width = 126 - Height = 13 - Caption = 'Actual Broker Connections' - end - object Label3: TLabel - Left = 16 - Top = 328 - Width = 109 - Height = 13 - Caption = 'Client Connections Log' - end - object lblMaxRPCEntries: TLabel - Left = 328 - Top = 16 - Width = 80 - Height = 13 - Caption = '&Max RPC Entries' - end - object Label4: TLabel - Left = 160 - Top = 16 - Width = 152 - Height = 13 - Caption = 'Check a box to view RPCs' - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'MS Sans Serif' - Font.Style = [fsBold] - ParentFont = False - end - object Label5: TLabel - Left = 176 - Top = 200 - Width = 235 - Height = 13 - Caption = 'Check a box to view RPCs and their data' - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'MS Sans Serif' - Font.Style = [fsBold] - ParentFont = False - end - object btnExit: TButton - Left = 278 - Top = 492 - Width = 75 - Height = 25 - Caption = 'E&xit' - TabOrder = 6 - OnClick = btnExitClick - end - object EnableRpcCallLogForAllClientsCheckBox: TCheckBox - Left = 480 - Top = 16 - Width = 129 - Height = 17 - Alignment = taLeftJustify - Caption = '&Enable RPC Call Log' - Checked = True - State = cbChecked - TabOrder = 2 - end - object CurrentClientsCheckedListBox: TCheckListBox - Left = 16 - Top = 32 - Width = 593 - Height = 161 - OnClickCheck = CurrentClientsCheckedListBoxClickCheck - ItemHeight = 13 - TabOrder = 3 - end - object actualBrokerConnectionsCheckedListBox: TCheckListBox - Left = 16 - Top = 216 - Width = 593 - Height = 105 - OnClickCheck = actualBrokerConnectionsCheckedListBoxClickCheck - ItemHeight = 13 - TabOrder = 4 - end - object RpcCallLogListBox: TListBox - Left = 520 - Top = 456 - Width = 65 - Height = 57 - TabStop = False - ItemHeight = 13 - TabOrder = 0 - Visible = False - end - object maxAllClientRpcLogEntriesNumericUpDown: TEdit - Left = 416 - Top = 8 - Width = 41 - Height = 21 - TabOrder = 1 - Text = '100' - end - object UpDown1: TUpDown - Left = 457 - Top = 8 - Width = 15 - Height = 21 - Associate = maxAllClientRpcLogEntriesNumericUpDown - Min = 0 - Position = 100 - TabOrder = 7 - Wrap = False - end - object clientConnectionsLogRichTextBox: TRichEdit - Left = 16 - Top = 344 - Width = 593 - Height = 137 - Lines.Strings = ( - '') - TabOrder = 5 - end - object mVistaSession: TSharedBroker - AutoConnect = False - ConnectKind = ckRunningOrNew - Left = 56 - Top = 488 - end - object MainMenu1: TMainMenu - Left = 120 - Top = 496 - object File1: TMenuItem - Caption = '&File' - object Exit1: TMenuItem - Caption = 'E&xit' - OnClick = Exit1Click - end - end - object Edit1: TMenuItem - Caption = '&Edit' - object CopyConnectionsLogToClipboard1: TMenuItem - Caption = '&Copy Connections Log To Clipboard' - OnClick = CopyConnectionsLogToClipboard1Click - end - end - object Help1: TMenuItem - Caption = '&Help' - object About1: TMenuItem - Caption = '&About' - OnClick = About1Click - end - end - end -end diff --git a/BDK32/SharedBrokerDebugger/fSharedBrokerDebugger.pas b/BDK32/SharedBrokerDebugger/fSharedBrokerDebugger.pas deleted file mode 100644 index bed240f..0000000 --- a/BDK32/SharedBrokerDebugger/fSharedBrokerDebugger.pas +++ /dev/null @@ -1,666 +0,0 @@ -unit fSharedBrokerDebugger; - -interface - -uses - Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, - StdCtrls, OleServer, CheckLst, ComCtrls, - Menus, RPCSharedBrokerSessionMgr1_TLB; - -type - - TfrmSharedBrokerDebugger = class(TForm) - Label1: TLabel; - Label2: TLabel; - Label3: TLabel; - btnExit: TButton; - EnableRpcCallLogForAllClientsCheckBox: TCheckBox; - mVistaSession: TSharedBroker; - CurrentClientsCheckedListBox: TCheckListBox; - actualBrokerConnectionsCheckedListBox: TCheckListBox; - RpcCallLogListBox: TListBox; - maxAllClientRpcLogEntriesNumericUpDown: TEdit; - UpDown1: TUpDown; - lblMaxRPCEntries: TLabel; - MainMenu1: TMainMenu; - File1: TMenuItem; - Exit1: TMenuItem; - Edit1: TMenuItem; - Help1: TMenuItem; - About1: TMenuItem; - CopyConnectionsLogToClipboard1: TMenuItem; - clientConnectionsLogRichTextBox: TRichEdit; - Label4: TLabel; - Label5: TLabel; - procedure FormCreate(Sender: TObject); - procedure FormDestroy(Sender: TObject); - procedure btnExitClick(Sender: TObject); - procedure actualBrokerConnectionsCheckedListBoxClickCheck( - Sender: TObject); - procedure Exit1Click(Sender: TObject); - procedure About1Click(Sender: TObject); - procedure CopyConnectionsLogToClipboard1Click(Sender: TObject); - procedure CurrentClientsCheckedListBoxClickCheck(Sender: TObject); - private - { Private declarations } - mClients: TList; // List of broker type clients of the server that are connected. - // debugger type clients are not included - mConnections: TList; - mDoingAForcedLogoutOfClients: Boolean; - mOnLogoutPending: Boolean; - - protected - procedure OnClientConnectEventHandler(Sender: TObject; uniqueClientId: Integer; - connection: ISharedBrokerConnection); - procedure OnRpcCallRecordedEventHandler(Sender: TObject; uniqueRpcId: Integer); - procedure OnClientDisconnectEventHandler(Sender: TObject; uniqueClientId: Integer); - procedure OnContextChangedEventHandler(Sender: TObject; connectionIndex: Integer; var newContext: OleVariant); - public - { Public declarations } - procedure RebuildClientList(uniqueClientId: Integer); - procedure RebuildConnectionList; - end; - -const - kNoUniqueClientId: integer = -1; - KInvalidConnectionIndex: Integer = -1; - -var - frmSharedBrokerDebugger: TfrmSharedBrokerDebugger; - mClients: TList; - mConnections: TList; - -implementation - -uses - uClientInfo, uBrokerConnectionInfo, uRpcLogEntry, frmVistAAbout; - -{$R *.DFM} - -{ - /// - /// The main entry point for the application. - /// - [STAThread] - - static void Main() - - Application.Run(new Form1()); -} -{ -function TfrmSharedBrokerDebugger.OnLogoutEventHandler; integer; -begin - mOnLogoutPending := true; - return 1; -end; - -procedure TfrmSharedBrokerDebugger.OnIdleEventHandler(object sender, EventArgs e) -begin - if (mOnLogoutPending) then - begin - CloseDownVistaSession(); - if (mDoingAForcedLogoutOfClients <> true) then - begin - // Don't do an Application Exit here. - // Should really send a close event on the main window - // Exiting here causes the server to loose its connection and blow up since - // control doesn't return till after this application is gone, and then - // the pointer references on the server are bogus - Application.Exit(); - end; - mDoingAForcedLogoutOfClients := false; - mOnLogoutPending := false; - end; -end; -} -procedure TfrmSharedBrokerDebugger.OnClientConnectEventHandler(Sender: TObject; uniqueClientId: Integer; - connection: ISharedBrokerConnection); -var - connectionTypeName: string; - outString: String; - ClientName: WideString; - ErrorCode: ISharedBrokerErrorCode; -begin - case (connection) of - New: - connectionTypeName := 'New'; - Shared: - connectionTypeName := 'Shared'; - Debug: - connectionTypeName := 'Debug'; - else - connectionTypeName := 'Failed'; - end; - - Assert(mVistaSession <> nil); - - errorCode := mVistaSession.GetClientNameFromUniqueClientId(uniqueClientId, clientName); - if (errorCode = Success) then - begin - outString := 'connect ['+connectionTypeName+'] > '+clientName+' id:='+IntToStr(uniqueClientId)+FormatDateTime(' hh:nn:ss mm/dd/yy',Now); - clientConnectionsLogRichTextBox.Lines.Add(outString); - end - else - begin - // need to throw a debugger exception here - Assert(false); - end; - - RebuildClientList(uniqueClientId); - RebuildConnectionList(); -end; - -procedure TfrmSharedBrokerDebugger.OnClientDisconnectEventHandler(Sender: TObject; uniqueClientId: Integer); -var - outString: String; - clientName: WideString; - foundOne: Boolean; - CInfo: TClientInfo; - ErrorCode: ISharedBrokerErrorCode; - i: Integer; -begin - clientName := 'ERROR'; - foundOne := false; - - Assert(mVistaSession <> nil); - - errorCode := mVistaSession.GetClientNameFromUniqueClientId(uniqueClientId, clientName); - if (errorCode = UniqueClientIdDoesNotExist) then - begin - // General the client should be disconnected and not available any more - // so lets look in our local client list for the name to print dialog. - for i:=0 to Pred(mClients.Count) do - begin - cInfo := TClientInfo(mClients[i]); - if (cInfo.UniqueId = uniqueClientId) then - begin - clientName := cInfo.Name; - foundOne := true; - break; - end; - end; - end; - - if (foundOne) then - begin - outString := 'disconnect > '+clientName+' id:='+ IntToStr(uniqueClientId) + FormatDateTime(' hh:nn:ss mm/dd/yy',Now); - clientConnectionsLogRichTextBox.Lines.Add(outString); - - RebuildClientList(uniqueClientId); - RebuildConnectionList(); - end; -end; - - /// - /// OnRpcCallRecordedEventHandler handles the OnRpcCallRecorded event - /// from the COM interface - /// - /// - /// -procedure TfrmSharedBrokerDebugger.OnRpcCallRecordedEventHandler(Sender: TObject; uniqueRpcId: Integer); -var - UniqueClientId: Integer; - Context: WideString; - RpcName: WideString; - RpcParams: WideString; - ClientName: WideString; - RpcEndDateTime: Double; - RpcDuration: Integer; - RpcResults: WideString; - CInfo, TempCInfo: TClientInfo; - LogEntry: TRpcLogEntry; - I: Integer; - ErrorCode: ISharedBrokerErrorCode; -begin - cInfo:=nil; - - Assert(mVistaSession <> nil); - - errorCode := mVistaSession.GetRpcCallFromHistory(uniqueRpcId, uniqueClientId, context, rpcName, rpcParams, rpcResults, rpcEndDateTime, rpcDuration); - if (errorCode = Success) then - begin - errorCode := mVistaSession.GetClientNameFromUniqueClientId(uniqueClientId, clientName); - if (errorCode = Success) then - begin - for i:=0 to Pred(mClients.Count) do - begin - tempCInfo := (TClientInfo(mClients[i])); - if (tempCInfo.UniqueId = uniqueClientId) then - begin - cInfo := tempCInfo; - break; - end; - end; - Assert(cInfo <> nil); - - logEntry := TRpcLogEntry.Create(uniqueClientId,clientName,cInfo.BrokerConnectionIndex,uniqueRpcId,rpcEndDateTime,rpcDuration,context,rpcName,rpcParams,rpcResults); - if (enableRpcCallLogForAllClientsCheckBox.Checked) then - begin - // If the list is full we need to delete the 0th item till we have room for one. - while (rpcCallLogListBox.Items.Count >= StrToInt(maxAllClientRpcLogEntriesNumericUpDown.Text)) do - rpcCallLogListBox.Items.Delete(0); - - rpcCallLogListBox.Items.AddObject(IntToStr(logEntry.UniqueClientId),logEntry); - end; - - cInfo.AddRpcLogEntry(LogEntry, false); - // (TBrokerConnectionInfo(mConnections[cInfo.BrokerConnectionIndex])).AddRpcLogEntry(logEntry,false); - (TClientInfo(mConnections[cInfo.BrokerConnectionIndex])).AddRpcLogEntry(logEntry,false); - end - else - begin - // Need to throw and exception here -// Assert(false); - end; - end - else - begin - // Need to throw a debugger exception here -// Assert(false); - end; -end; - -procedure TfrmSharedBrokerDebugger.OnContextChangedEventHandler(Sender: TObject; connectionIndex: Integer; var newContext: OleVariant); -var - bInfo: TBrokerConnectionInfo; -begin - if (connectionIndex >=0) and (connectionIndex < mConnections.Count) then - begin - bInfo := TBrokerConnectionInfo(mConnections[connectionIndex]); - if (bInfo.LastContext <> newContext) then - begin - bInfo.LastContext := newContext; - RebuildConnectionList(); - end; - end - else - Assert(false); -end; -{ -procedure TfrmSharedBrokerDebugger.OnClientRpcLogClosedEventHandler(object sender, EventArgs e) -var - CInfo: TClientInfo; -begin - cInfo := (ClientInfo)sender; - for i:=0 to Pred(mClients.Count) do - begin - if (cInfo.UniqueId=((ClientInfo)mClients[i]).UniqueId) then - begin - currentClientsCheckedListBox.SetItemChecked(i,false); - break; - end; - end; -end; - - -procedure TfrmSharedBrokerDebugger.OnConnectionRpcLogClosedEventHandler(object sender, EventArgs e) -var - BInfo: TBrokerConnectionInfo; -begin - bInfo := (TBrokerConnectionInfo)sender; - for i:=0 to Pred(mConnections.Count) do - begin - if (bInfo.ConnectionIndex = ((BrokerConnectionInfo)mConnections[i]).ConnectionIndex) then - begin - actualBrokerConnectionsCheckedListBox.SetItemChecked(i,false); - break; - end; - end; -end; - - -procedure TfrmSharedBrokerDebugger.SetupVistaSession; -begin - if (mVistaSession = nil) then - begin - mVistaSession := TSharedBroker.Create; - - ISharedBrokerEvents_OnLogoutEventHandler OnLogoutEH := new ISharedBrokerEvents_OnLogoutEventHandler(this.OnLogoutEventHandler); - ISharedBrokerEvents_OnClientConnectEventHandler OnClientConnectEH := new ISharedBrokerEvents_OnClientConnectEventHandler(this.OnClientConnectEventHandler); - ISharedBrokerEvents_OnClientDisconnectEventHandler OnClientDisconnectEH := new ISharedBrokerEvents_OnClientDisconnectEventHandler(this.OnClientDisconnectEventHandler); - ISharedBrokerEvents_OnRpcCallRecordedEventHandler OnRpcCallRecorededEH := new ISharedBrokerEvents_OnRpcCallRecordedEventHandler(this.OnRpcCallRecordedEventHandler); - ISharedBrokerEvents_OnContextChangedEventHandler OnContextChangedEH := new ISharedBrokerEvents_OnContextChangedEventHandler(this.OnContextChangedEventHandler); - // Set up the event handlers here. - mVistaSession.OnClientConnect +:= OnClientConnectEH; - mVistaSession.OnClientDisconnect +:= OnClientDisconnectEH; - mVistaSession.OnRpcCallRecorded +:= OnRpcCallRecorededEH; - mVistaSession.OnLogout +:= OnLogoutEH; - mVistaSession.OnContextChanged +:= OnContextChangedEH; - - int uniqueClientId; - - // string listenerPort := ListenerPort.ToString(); - ISharedBrokerErrorCode brokerError := mVistaSession.BrokerConnect( - Application.ExecutablePath, - ISharedBrokerClient.DebuggerClient, - '', // server/port pair is of no meaning in the debugger - false, // debug mode is of no meaning in debugger - false, // AllowShared connection is of no meaning in debugger - 30, // Connection time out limit - out uniqueClientId); - - Debug.Assert(brokerError = ISharedBrokerErrorCode.Success); - RebuildClientList(kNoUniqueClientId); - RebuildConnectionList(); - end; -end; - -procedure TfrmSharedBrokerDebugger.CloseDownVistaSession; -begin - if (mVistaSession <> nil) then - begin - mVistaSession.BrokerDisconnect(); - mVistaSession.Dispose(); - mVistaSession.Finalize(); - mVistaSession := nil; - end; -end; -} -procedure TfrmSharedBrokerDebugger.RebuildClientList(uniqueClientId: Integer); -var - ErrorCode: ISharedBrokerErrorCode; - Count: Integer; - id: Integer; - Name: WideString; - ConnectIndex: Integer; - CInfo: TClientInfo; - i: Integer; - FoundIndex: Integer; -begin - count := 0; - Assert(mVistaSession <> nil); - - errorCode := mVistaSession.GetConnectedClientCount(count); - if (errorCode = Success) then - begin - id := kNoUniqueClientId; - name := ''; - connectIndex := kInvalidConnectionIndex; - - if (uniqueClientId = kNoUniqueClientId) or (count = mClients.Count) then - begin - // Hide any open RPC logger windows - for i:=0 to Pred(mClients.Count) do - (TClientInfo(mClients[i])).Visible := false; - - // Scrap the current list - mClients.Clear(); - - // Scrap the listbox list - currentClientsCheckedListBox.Items.Clear(); - - for i:=0 to Pred(count) do - begin - errorCode := mVistaSession.GetClientIdAndNameFromIndex(i, id, name); - if (errorCode = Success) then - begin - errorCode := mVistaSession.GetActiveBrokerConnectionIndexFromUniqueClientId(id, connectIndex); - if (errorCode = Success) then - begin - cInfo := TClientInfo.Create(id,name,connectIndex,kRpcHistoryEnabledDefault); -// cInfo.OnLogClosed +:= new EventHandler(OnClientRpcLogClosedEventHandler); - mClients.Add(cInfo); - currentClientsCheckedListBox.Items.Add(cInfo.Name+' connection = '+IntToStr(cInfo.BrokerConnectionIndex)+' Id = '+IntToStr(cInfo.UniqueId)); - end; - end; - end; - end - else - begin - if (count > mClients.Count) then - begin - // We need to add a client to the list - errorCode := mVistaSession.GetClientNameFromUniqueClientId(uniqueClientId, name); - if (errorCode = Success) then - begin - errorCode := mVistaSession.GetActiveBrokerConnectionIndexFromUniqueClientId(uniqueClientId, connectIndex); - if (errorCode = Success) then - begin - cInfo := TClientInfo.Create(uniqueClientId,name,connectIndex,kRpcHistoryEnabledDefault); -// cInfo.OnLogClosed +:= new EventHandler(OnClientRpcLogClosedEventHandler); - mClients.Add(cInfo); - currentClientsCheckedListBox.Items.Add(cInfo.Name+' connection = '+IntToStr(cInfo.BrokerConnectionIndex)+' Id = '+IntToStr(cInfo.UniqueId)); - end; - end; - end - else if (count < mClients.Count) then - begin - // We need to delete a client from the list - foundIndex := -1; - - for i:=0 to Pred(mClients.Count) do - begin - cInfo := TClientInfo(mClients[i]); - if (cInfo.UniqueId = uniqueClientId) then - begin - foundIndex := i; - break; - end; - end; - if (foundIndex <> -1) then - begin - (TClientInfo(mClients[foundIndex])).Visible := false; - mClients.Delete(foundIndex); - currentClientsCheckedListBox.Items.Delete(foundIndex); - end; - end; - end; - end; -end; - - -procedure TfrmSharedBrokerDebugger.RebuildConnectionList; -var - ErrorCode: ISharedBrokerErrorCode; - I, IndexCount: integer; - BInfo: TBrokerConnectionInfo; - ServerIP: WideString; - ServerPort: Integer; - LastContext: WideString; -begin - IndexCount := 0; - - for i:=0 to Pred(mConnections.Count) do - (TBrokerConnectionInfo(mConnections[i])).Visible := false; - - mConnections.Clear(); - actualBrokerConnectionsCheckedListBox.Items.Clear(); - - Assert(mVistaSession <> nil); - - errorCode := mVistaSession.GetActiveBrokerConnectionIndexCount(indexCount); - if (errorCode = Success) and (indexCount > 0) then - begin - serverIp := ''; - serverPort := 0; - lastContext := ''; - - for i:=0 to Pred(indexCount) do - begin - errorCode := mVistaSession.GetActiveBrokerConnectionInfo(i, serverIp, serverPort, lastContext); - if (errorCode = Success) then - begin - bInfo := TBrokerConnectionInfo.Create(i,serverIp,serverPort,lastContext); -// bInfo.OnLogClosed +:= new EventHandler(OnConnectionRpcLogClosedEventHandler); - mConnections.Add(bInfo); - actualBrokerConnectionsCheckedListBox.Items.AddObject(IntToStr(bInfo.ConnectionIndex) + ' server: '+bInfo.ConnectedServerIP+' server port: '+IntToStr(bInfo.ConnectedServerPort) + ' Last Context = ' + bInfo.LastContext, bInfo); - end; - end; - end; -end; -{ - private void MaxAllClientRpcLogEntriesNumericUpDown_ValueChanged(object sender, System.EventArgs e) - begin - // In case the max entry value is less than the rpc log entries delete the entries - while (maxAllClientRpcLogEntriesNumericUpDown.Value < rpcCallLogListBox.Items.Count) - rpcCallLogListBox.Items.RemoveAt(0); - end; - - private void CurrentClientsCheckedListBox_ItemCheck(object sender, System.Windows.Forms.ItemCheckEventArgs e) - begin - ClientInfo cInfo := (ClientInfo)mClients[e.Index]; - - if (e.NewValue = CheckState.Checked) then - begin - cInfo.Visible := true; - // Transfer the current list of rpc call entries from the all rpc log - // that correspond to this client - RpcLogEntry entry; - for i:=0 to Pred(rpcCallLogListBox.Items.Count) do - begin - entry := (RpcLogEntry)rpcCallLogListBox.Items[i]; - if (entry.UniqueClientId = cInfo.UniqueId) then - cInfo.AddRpcLogEntry(entry,true); - end; - end; - else - cInfo.Visible := false; - end; - - private void ActualBrokerConnectionsCheckedListBox_ItemCheck(object sender, System.Windows.Forms.ItemCheckEventArgs e) - - private void RpcCallLogListBox_SelectedIndexChanged(object sender, System.EventArgs e) - begin - DisplayRpcEntry((RpcLogEntry)rpcCallLogListBox.Items[rpcCallLogListBox.SelectedIndex]); - copySelectedRpcToClipboardMenuItem.Enabled := true; - end; - -procedure TfrmSharedBrokerDebugger.DisplayRpcEntry(entry: TRpcLogEntry) - List: TStringList; -begin - list := entry.CreateParamsDisplayString().Split('\n'); - paramsListBox.Items.Clear(); - foreach(string s in list) - paramsListBox.Items.Add(s); - - resultsRichTextBox.Text := entry.CreateResultsDisplayString(); - rpcNameOutputLabel.Text := entry.Name; - rpcDebugIdOutputLabel.Text := entry.UniqueId.ToString(); - contextOutputLabel.Text := entry.Context; - string duration ; - if (entry.Duration < 1) then - duration := '<1ms' - else - duration := entry.Duration.ToString() + 'ms'; - durationOutputLabel.Text := duration; - clientNameOutputLabel.Text := entry.ClientName; - clientDebugIdOutputLabel.Text := entry.UniqueClientId.ToString(); - end; - -procedure TfrmSharedBrokerDebugger.copySelectedRpcToClipboardMenuItem_Click(object sender, System.EventArgs e) - begin - // Build a string and put it on the clipboard here. - Clipboard.SetDataObject(((RpcLogEntry)rpcCallLogListBox.SelectedItem).CreateClipboardString()); - end; - end; -end; -} -procedure TfrmSharedBrokerDebugger.FormCreate(Sender: TObject); -var - UniqueClientId: Integer; - ErrMsg: WideString; - LoginStr: WideString; -begin - LoginStr := ''; - mClients := TList.Create; - mConnections := TList.Create; - mVistaSession.BrokerConnect(ParamStr(0),DebuggerClient,'',False,True,True,isemRaise,0,LoginStr,UniqueClientId,ErrMsg); - mVistaSession.OnRpcCallRecorded := OnRpcCallRecordedEventHandler; - mVistaSession.OnClientConnect := OnClientConnectEventHandler; - mVistaSession.OnClientDisconnect := OnClientDisconnectEventHandler; - mVistaSession.OnContextChanged := OnContextChangedEventHandler; - mDoingAForcedLogoutOfClients := false; - mOnLogoutPending := false; - RebuildClientList(kNoUniqueClientId); - RebuildConnectionList; -end; - -procedure TfrmSharedBrokerDebugger.FormDestroy(Sender: TObject); -begin - mClients.Free; - mConnections.Free; - mVistaSession.BrokerDisconnect; -end; - -procedure TfrmSharedBrokerDebugger.btnExitClick(Sender: TObject); -begin - Halt; -end; - -procedure TfrmSharedBrokerDebugger.actualBrokerConnectionsCheckedListBoxClickCheck( - Sender: TObject); -var - BInfo, BInfo2: TBrokerConnectionInfo; - Entry: TRpcLogEntry; - CurrVal: Integer; - i: Integer; -begin - CurrVal := actualBrokerConnectionsCheckedListBox.ItemIndex; - bInfo := (TBrokerConnectionInfo(mConnections[CurrVal])); - bInfo2 := TBrokerConnectionInfo(actualBrokerConnectionsCheckedListBox.Items.Objects[CurrVal]); - - if (actualBrokerConnectionsCheckedListBox.Checked[CurrVal]) then - begin - bInfo.Visible := true; - // Transfer the current list of rpc call entries from the all rpc log - // That correspond to this connection - for i:=0 to Pred(rpcCallLogListBox.Items.Count) do - begin - entry := (TRpcLogEntry(rpcCallLogListBox.Items.Objects[i])); - if (entry.ConnectionIndex = bInfo2.ConnectionIndex) then -// if (entry.ConnectionIndex = ActualBrokerConnectionsCheckedListBox.Items[CurrVal]) then - TBrokerConnectionInfo(mConnections[CurrVal]).AddRpcLogEntry(entry,true); - end; - end - else - bInfo.Visible := false; -end; - -procedure TfrmSharedBrokerDebugger.Exit1Click(Sender: TObject); -begin - Halt; -end; - -procedure TfrmSharedBrokerDebugger.About1Click(Sender: TObject); -begin - ShowAboutBox; -end; - -procedure TfrmSharedBrokerDebugger.CopyConnectionsLogToClipboard1Click( - Sender: TObject); -begin - clientConnectionsLogRichTextBox.SelectAll; - clientConnectionsLogRichTextBox.CopyToClipboard; -end; - -procedure TfrmSharedBrokerDebugger.CurrentClientsCheckedListBoxClickCheck( - Sender: TObject); -var - CInfo: TClientInfo; - Entry: TRpcLogEntry; - CurrVal: Integer; - i: Integer; - listobjUniqueClientID: Integer; -begin - CurrVal := CurrentClientsCheckedListBox.ItemIndex; - CInfo := (TClientInfo(mclients[CurrVal])); - listobjUniqueClientId := CInfo.UniqueId; - - if (CurrentClientsCheckedListBox.Checked[CurrVal]) then - begin - CInfo.Visible := true; - // Transfer the current list of rpc call entries from the all rpc log - // That correspond to this connection - for i:=0 to Pred(rpcCallLogListBox.Items.Count) do - begin - entry := (TRpcLogEntry(rpcCallLogListBox.Items.Objects[i])); - if (entry.UniqueClientId = listobjUniqueClientId) then -// if (entry.ConnectionIndex = ActualBrokerConnectionsCheckedListBox.Items[CurrVal]) then - TClientInfo(mClients[CurrVal]).AddRpcLogEntry(entry,true); - end; - end - else - CInfo.Visible := false; -end; - -end. diff --git a/BDK32/SharedBrokerDebugger/uBrokerConnectionInfo.pas b/BDK32/SharedBrokerDebugger/uBrokerConnectionInfo.pas deleted file mode 100644 index 30acf71..0000000 --- a/BDK32/SharedBrokerDebugger/uBrokerConnectionInfo.pas +++ /dev/null @@ -1,166 +0,0 @@ -unit uBrokerConnectionInfo; - -interface - -uses Windows, Classes, SysUtils, uRpcLogEntry, fClientRPCLogger, Forms; - -Type -{ - TRPCLogEntry = class - end; -} - TClientRPCLogger = class - private - FText: String; - FVisible: Boolean; - public - procedure AddRpcLogEntry(entry: TRpcLogEntry; overrideCheckBox: Boolean); - property Text: String read FText write FText; - property Visible: Boolean read FVisible write FVisible; - end; - - TBrokerConnectionInfo = class(TPersistent) - private - FRpcLogger: TfrmRPCClientLogger; - FConnectionIndex: Integer; - FConnectedServerIp: String; - FConnectedServerPort: Integer; - FLastContext: String; - protected - function GetVisible: Boolean; - procedure SetVisible(Value: Boolean); - public - Constructor Create(); overload; virtual; - Constructor Create(index: Integer; ip: String; port: Integer; lastContext: String); overload; virtual; - function MakeListItemString: String; virtual; - function ToString: String; - procedure AddRpcLogEntry(entry: TRpcLogEntry; overrideCheckBox: bool); - property ConnectionIndex: Integer read FConnectionIndex write FConnectionIndex; - property ConnectedServerIp: String read FConnectedServerIP write FConnectedServerIP; - property ConnectedServerPort: Integer read FConnectedServerPort write FConnectedServerPort; - property LastContext: String read FLastContext write FLastContext; - property Visible: Boolean read GetVisible write SetVisible; - end; - - -const - kNoConnectionIndex = -1; - kNoServerIp: String = '0.0.0.0'; - kNoConnectedServerPort: Integer = 0; - kNoLastContext: String = 'NO CONTEXT'; - -implementation - -Constructor TBrokerConnectionInfo.Create; -begin - ConnectionIndex := kNoConnectionIndex; - ConnectedServerIp := kNoServerIp; - ConnectedServerPort := kNoConnectedServerPort; - LastContext := kNoLastContext; -end; - -{ -/// -/// BrokerConnectionInfo is the parameterized constructor -/// -/// -/// -/// - /// - /// - /// -} -Constructor TClientInfo.Create(uniqueId: Integer; name: String; connectionIndex: Integer; historyEnabled: Boolean); -begin - Create; - - FUniqueId := uniqueId; - FName := name; - FBrokerConnectionIndex := connectionIndex; - FRpcHistoryEnabled := historyEnabled; -end; - -procedure TClientInfo.AddRpcLogEntry(entry: TRpcLogEntry; overrideCheckBox: Boolean); -begin - if(FRpcLogger <> nil) then - FRpcLogger.AddRpcLogEntry(entry, overrideCheckBox); -end; - -procedure TClientInfo.SetVisible(Value: Boolean); -begin - if(value) then - begin - if(FRpcLogger = nil) then - begin - FRpcLogger := TfrmRpcClientLogger.Create(Application); -// TODO FRpcLogger.OnRpcLoggerClose += new EventHandler(OnRpcLoggerClosedEventHandler); - FRpcLogger.Caption := 'RPC Log for '+Name+' ID='+IntToStr(UniqueId); - end; - FRpcLogger.Visible := true; - end - else - begin - if(FRpcLogger <> nil) then - begin - FRpcLogger.Visible := false; - FRpcLogger := nil; - end; - end; -end; - -function TClientInfo.GetVisible: Boolean; -begin - result := false; - if (FRpcLogger <> nil) then - result := FRpcLogger.Visible; -end; -{ - /// - /// OnLogClosed is called when the ClientRpcLogger window is called - /// Any event handlers by owners of this object should assign - /// an event handler to this event - /// -} -// TODO -// public EventHandler OnLogClosed; -{ - /// - /// MakeCheckBoxString creates a string based on the internal members - /// This string is intended to be used for check box list entries. - /// - /// -} -function TClientInfo.MakeCheckBoxString: String; -begin - Result := ToString; -end; - -{ - /// - /// ToString returns a readable string representation of the member - /// - /// -} -function TClientInfo.ToString: String; -begin - result := FName+' connection='+IntToStr(FBrokerConnectionIndex)+' id='+IntToStr(FUniqueId); -end; - -procedure TClientInfo.Initialize; -begin - FBrokerConnectionIndex := kBrokerConnectionIndexDefault; - FRpcHistoryEnabled := kRpcHistoryEnabledDefault; - FRpcLogger := nil; -end; - -// TODO -{ -procedure TClientInfo.OnRpcLoggerClosedEventHandler(object sender, EventArgs e) -begin - // Pass the message on to my owner - Visible := false; - OnLogClosed(Self,nil); -end; -} - -end. - diff --git a/BDK32/SharedBrokerDebugger/uParam.pas b/BDK32/SharedBrokerDebugger/uParam.pas deleted file mode 100644 index fa79c74..0000000 --- a/BDK32/SharedBrokerDebugger/uParam.pas +++ /dev/null @@ -1,414 +0,0 @@ -unit uParam; - -interface - -uses - Classes; - -Type - TParamType = (Literal, Reference, List, Undefined); - - TParamMult = class - private - mName: String; - mMultiple: NameValueCollection; - protected - function GetCount: Integer; - function GetFirst: String; - function GetLast: String; - function GetMultiple(index: String): string; - procedure SetMultiple(index, value: string); - public - property Name: String read mName write mName; - property Count: Integer read GetCount; - property First: String read GetFirst; - property Last: String read GetLast; - property Self[index: string] read GetMultiple write SetMultiple; - end; - - TParamRecord = class - private - mValue: String; - mPType: TParamType; - mMult: TParamMult; - public - property Value: String read mValue write mValue; - property PType: TParamType read mPType write mPType; - property Mult: TParamMult read mMult write mMult; - end; - - TParam = class - private - mParameters: TList; - protected - procedure SetParameter(index: Integer; parameter: TParamRecord); - function GetParameter(index: Integer): TParamRecord; - public - Constructor Create; overload; - Constructor Create(rpcParams: String); overload; - procedure Clear; - property ParamRecord[index: Integer]: TParam read GetParameter write SetParameter; - property Count: Integer read GetCount; - end; - - -implementation - - // Thes classes are ported from Delphi and have hardly been tested. - // Use them at your own discression. - - /// - /// Summary description for Param. - /// -procedure TParam.Clear; -var - i: Integer; -begin - for i:=0 to Pred(mParameters.Count) do - mParameters[i] := nil; - - mParameters.Clear; -end; - -procedure TParam.Assign(source: TParam) -begin - Clear; - for i:=0 to Pred(source.Count) do - begin - Self[i].Value := source[i].Value; - Self[i].PType := source[i].PType; - Self[i].Mult.Assign(source[i].Mult); - end; -end; - - -Constructor TParam.Create; -begin - mParameters := TList.Create; -end; - - /// - /// This Param constructor takes a string and splits it into ParamRecords - /// - /// -Constructor TParam.Create(rpcParams: String) -var - i, curStart, lengthOfRpcParams, EndOfSegment: Integer; - aRef, aVal: String; - ParamRecord: TParamRecord; -begin - -const - // kSEP_FS: char = 28; - kSEP_GS: char = 29; - kSEP_US: char = 30; - kSEP_RS: char = 31; - - mParameters := TList.Create; - if (rpcParams <> nil) then - begin - curStart := 0; - i:= 0; - lengthOfrpcParams := Length(rpcParams); - while (curStart < lengthOfrpcParams-1) - begin - paramRecord := Self[i]; - case (rpcParams[curStart]) of - 'L' : paramRecord.PType := ParamType.Literal; - 'R' : paramRecord.PType := ParamType.Reference; - 'M' : paramRecord.PType := ParamType.List; - else : paramRecord.PType := ParamType.Undefined; - end; - curStart := CurStart + 2; - if (Self[i].PType = ParamType.List) then - begin - endOfSegment := 0; - while (rpcParams[curStart] <> kSEP_GS) do - begin - endOfSegment := PosNext(kSEP_US,curStart,lengthOfrpcParams,rpcParams); - aRef := rpcParams.Substring(curStart,endOfSegment - curStart); - curStart := endOfSegment + 1; - endOfSegment := PosNext(kSEP_RS,curStart,lengthOfrpcParams,rpcParams); - aVal := rpcParams.Substring(curStart,endOfSegment - curStart); - curStart := endOfSegment + 1; - Self[i].Mult[aRef] := aVal; - end; - if (endOfSegment = 0) then - begin - endOfSegment := PosNext(kSEP_GS,curStart,lengthOfrpcParams,rpcParams); - curStart := endOfSegment + 1; - end - else - begin - endOfSegment := PosNext(kSEP_GS,curStart,lengthOfrpcParams,rpcParams); - Self[i].Value := rpcParams.Substring(curStart,endOfSegment-curStart); - curStart := endOfSegment + 1; - end; - Inc(i); - end; - end - else - begin - // The user of this routine should always pass in a valid string - Assert(false); - end; -end; - -Destructor TParam.Destroy; -begin - Clear; - mParameters.Free; -end; - - // Private Methods -function TParam.GetCount: Integer; -begin - Result := mParameters.Count; -end; - -function TParam.GetParameter(int index): ParamRecord; -begin - if (index >= mParameters.Count) then - begin - while (mParameters.Count <:= index) do // Setup placehoders - mParameters.Add(nil); - end; - if (mParameters[index] = nil) - begin - Result := TParamRecord.Create(); - mParameters[index] := result; - end - else - Result := TParamRecord(mParameters[index]); -end; - -procedure TParam.SetParameter(index: Integer; parameter: ParamRecord); -begin - if (index >= mParameters.Count) then - while (mParameters.Count <= index) do // Set up placeholders - mParameters.Add(nil); - - if (mParameters[index] = nil) then - mParameters[index] := parameter; -end; - -function TParam.PosNext(aChar: char; startPos, lengthOfRpcParams: Integer; rpcParams: String): Integer; -begin - Assert(rpcParams <> nil); - - Result := 0; - while (result = 0) and (startPos < lengthOfRpcParams) do - begin - if(rpcParams[startPos] = aChar) - Result := startPos; - Inc(startPos); - end; -end; - - -Constructor TParamRecord.Create; -begin - mMult := new ParamMult(); - mMult.Name := ParamMult.kMultNameDefault; - mValue := nil; - mPType := ParamType.Undefined; -end; - -Destructor TParamRecord.Destroy; -begin - if(mMult <> nil) - begin - mMult := nil; - end; - end; - - // The ParamMult class uses a NameValueCollection dictionary/hashtable as opposted to a string list - // like in Delphi. I think I have ported this properly preserving the desired functionality - // I think the NameValueCollection is the right answer here, but there may be some - // nuances that have been missed. - // Also, an enumerator should be created (provide by NameValueCollection) if the - // list is to be iterated over a lot between changes (for read only access). This - // will provided enhanced performance. -const kMultInstanceNameDefault: string := 'Mult_instance'; -const kMultNameDefault: string := 'Mult'; - - // Public Methods -Constructor TParamMult.Create; -begin - mMultiple := TNameValueCollection.Create; - mName := ''; -end; - - -Destructor TParamMult.Destroy; -begin - ClearAll; - mMultiple.Free; - mMultiple := nil; - mName := nil; -end; - -function TParamMult.Position(subscript: string): Integer; -var - i: Integer; -begin - Result := -1; - - for i:=0 to Pred(mMultiple.Count) do - begin - if (mMultiple.GetKey(i) = subscript) - begin - Result := i; - break; - end; - end; -end; - - -function TParamMult.Subscript(position: Integer): String; -begin - if(position > -1 && position < Count) then - result := mMultiple.GetKey(position); -end; - /// - /// In Assign all of the items from source object are copied one by one into the - /// target. So if the source is later destroyed, target object will continue - /// to hold the copy of all elements, completely unaffected. - /// The source can only be a NameValueCollection or else it with throw an exception. - /// - /// -{ - public void Assign(object source) - begin - ClearAll(); - if (source is ParamMult) - mMultiple.Add((NameValueCollection)source); - else - throw(new ParamMultException('Invalid source type'+ source.GetType()+' in method Assign')); - end; -} - /// - /// Order returns the subscript string of the next or previous element from the - /// StartSubscript. This is very similar to the $O function available in M. - /// nil string ('') is returned when reaching beyong the first or last - /// element, or when list is empty. Note: A major difference between the M $O - /// and this function is that in this function StartSubscript must identify a valid subscript - /// in the list. - /// - /// - /// - /// -function TParamMult.Order(startSubscript: String; direction: Integer): String; -var - index: Integer; -begin - if (startSubscript = '') then - begin - if(direction > 0) then - result := First - else - result := Last; - end - else - begin - index := Position(startSubscript); - if(index > -1) then - begin - if (index < (Count -1)) and (direction > 0) then - result := mMultiple[index+1] - else - result := mMultiple[index-1]; - end; - end; -end; - -{ - public class ParamMultException : Exception - begin - public ParamMultException(string errorString) - :base(kParamMultExceptionLabel + errorString)beginend; - private const string kParamMultExceptionLabel := 'ParamMult Exeption: '; - end; -} -procedure TParamMult.ClearAll; -begin - mMultiple.Clear(); -end; - - -function TParamMult.GetCount: Integer; -begin - Result := mMultiple.Count; -end; - - -function TParamMult.GetFirst: String; -begin - Result := ''; - if (mMultiple.Count > 0) then - Result := mMultiple[0]; -end; - - -function TParamMult.GetLast: String; -begin - Result := ''; - if (mMultiple.Count > 0) then - Result := mMultiple[mMultiple.Count-1]; -end; - - - /// - /// GetMultiple Returns the VALUE of the element whose subscript is passed. - /// - /// - /// -function TParamMult.GetMultiple(index: String): String; -var - TryResult: String; - StrError: String; -begin - tryResult := ''; - try - begin - tryResult := mMultiple[index]; - end; - // The requested string might not be in the string array in which case IndexOf will - // return a -1 so lets handle this through an IndexOutOfRangeException -// catch (ArgumentOutOfRangeException) - except - begin - if (Name <> '') then - StrError :=Name - else - StrError := kMultInstanceNameDefault; - strError +:= StrError + '[' + index + ']'#0D#0A' is undefined'; - - // There was a complicated way to attempt to find this data on exception - // in the Delphi unit trpcb.pas in the broker project under - // TMult.GetFMultiple. I did not understand this so I will throw an - // exception here. -Travis - -// throw( new ParamMultException(strError)); - end; - finally - begin - result := tryResult; - end; -end; - - - /// - /// SetMultiple Stores a new element in the multiple. mMultiple (StringCollection) is the - /// structure, which is used to hold the subscript and value pair. Subscript is stored as - /// the String, value is stored as an object of the string. - /// - /// - /// -procedure TParamMult.SetMultiple(index, newElement: String): -begin - mMultiple.Set(index,newElement); -end; - -end. - \ No newline at end of file diff --git a/BDK32/SharedBrokerDebugger/uRpcLogEntry.pas b/BDK32/SharedBrokerDebugger/uRpcLogEntry.pas deleted file mode 100644 index 2207a62..0000000 --- a/BDK32/SharedBrokerDebugger/uRpcLogEntry.pas +++ /dev/null @@ -1,356 +0,0 @@ -unit uRpcLogEntry; - -interface - -uses - Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, - StdCtrls, TRpcb; - -type - TDisplayFormat = (dfFormatFullWithoutClientName,dfFormatFullWithClientName, - dfFormatForList); - - TMyString = class(TObject) - private - FString: String; - public - Constructor Create(Str: String); - procedure Append(Str: String); - function ToString: String; - end; - - TRpcLogEntry = class(TObject) - private - mUniqueClientId: Integer; - mClientName: String; - mConnectionIndex: Integer; - mContext: String; - mUniqueId: Integer; // unique rpc id - mRpcName: String; - mRpcParamsString: String; - mRpcResults: String; - mRpcEndDateTime: Double; - mRpcDuration: Integer; - mRpcParams: TParams; - protected - procedure SetParamsString(Value: String); - public - Constructor Create; overload; - Constructor Create(uniqueClientId: Integer; clientName: String; - connectionIndex: Integer; rpcUniqueId: Integer; rpcEndDateTime: Double; - rpcDuration: Integer; context, rpcName, rpcParams, rpcResults: String); overload; - property StrResults: String read mRpcResults write mRpcResults; - property EndDateTime: double read mRpcEndDateTime write mRpcEndDateTime; - property Duration: Integer read mRpcDuration write mRpcDuration; - property Params: TParams read mRpcParams; - property UniqueClientId: Integer read mUniqueClientId write mUniqueClientId; - property ClientName: String read mClientName write mClientName; - property ConnectionIndex: Integer read mConnectionIndex write mConnectionIndex; - property UniqueId: Integer read mUniqueId write mUniqueId; - property Context: String read mContext write mContext; - property Name: String read mRpcName write mRpcName; - property ParamsString: String read mRpcParamsString write SetParamsString; - function CreateDisplayString(format: TDisplayFormat): String; - function ToString: String; - function CreateClipboardString: String; - function CreateParamsDisplayString: String; - function CreateResultsDisplayString: String; - end; - - -const - kHeaderStartTag: String = '________________________RPC START____________________'; - kRpcTag: String = 'RPC>'#09#09#09; - kRpcDebugIdTag: String = 'RPC DEBUG ID>'#09; - kClientNameTag: String = 'CLIENT NAME>'#09#09; - kClientDebugIdTag: String = 'CLIENT DEBUG ID>'#09; - kContextTag: String = 'CONTEXT>'#09#09; - kDurationTag: String = 'DURATION>'#09#09; - // kTimeDateTag: String = 'END TIME>'#09#09; - kParamsTag: String = '________________________PARAMS_______________________'; - kResultsTag: String = '________________________RESULTS______________________'; - kHeaderEndTag: String = '________________________RPC END______________________'; - -function PosNext(SubString: String; CurStart: Integer; S: String): Integer; - -implementation - -function PosNext(SubString: string; CurStart: Integer; S: String): Integer; -var - Str1: String; -begin - Str1 := Copy(S,CurStart,Length(S)); - Result := CurStart + Pos(SubString,Str1)-1; -end; - -function TMyString.ToString: string; -begin - Result := FString; -end; - -procedure TMyString.Append(Str: string); -begin - FString := FString + Str; -end; - -constructor TMyString.Create(Str: string); -begin - FString := Str; -end; - - -procedure TRpcLogEntry.SetParamsString(Value: string); -begin - mRpcParamsString := value; - // TODO: - // now break the string into a string array and - // shove it into the Params - // Just rebuild the mParams - if (mRpcParams <> nil) then - begin - mRpcParams.Free; - mRpcParams := nil; - end; - - mRpcParams := TParams.Create(Application); -// mRpcParams. -end; - - /// - /// Summary description for RpcLogEntry. - /// -Constructor TRpcLogEntry.Create; -begin - inherited; -end; - -Constructor TRpcLogEntry.Create(uniqueClientId: Integer; clientName: String; - connectionIndex: Integer; rpcUniqueId: Integer; rpcEndDateTime: Double; - rpcDuration: Integer; context, rpcName, rpcParams, rpcResults: String); -begin - mUniqueClientId := uniqueClientId; - mClientName := clientName; - if (context = '') then - mContext := '' - else - mContext := context; - - mConnectionIndex := connectionIndex; - - mUniqueId := rpcUniqueId; - if (rpcName = '') then - mrpcName := '' - else - mrpcName := rpcName; - - if(rpcParams = '') then - mrpcParamsString := '' - else - mrpcParamsString := rpcParams; - - if(rpcResults = '') then - mrpcResults := '' - else - mrpcResults := rpcResults; - - mRpcEndDateTime := rpcEndDateTime; - mRpcDuration := rpcDuration; -end; - - -function TRpcLogEntry.ToString: String; -begin - Result := CreateDisplayString(dfFormatForList); -end; - - /// - /// CreateDisplayString returns a string with the rpc params - /// formated based on the DisplayFormat format - /// - /// - /// - /// -const - kInitialStringBuilderSize: Integer = 1000; - kNamePad: Integer = 31; - krpcIdPad: Integer = 5; - kcIdpad: Integer = 7; - kDurationPad: Integer = 3; - kLiteral: String = 'literal'; - kReference: String = 'reference'; - kList: String = 'list'; - kUndefined: String = 'undefined'; - - -function TRpcLogEntry.CreateDisplayString(format: TDisplayFormat): String; -var - ResultVal: TMyString; -begin - - ResultVal := TMyString.Create(''); - - case (format) of - dfFormatFullWithClientName: - begin - ResultVal.Append(kHeaderStartTag); - ResultVal.Append(#13#10 + kRpcTag + Name); - ResultVal.Append(#13#10 + kRpcDebugIdTag + IntToStr(UniqueId)); - ResultVal.Append(#13#10 + kClientNameTag + ClientName); - ResultVal.Append(#13#10 + kClientDebugIdTag + IntToStr(UniqueClientId)); - ResultVal.Append(#13#10 + kContextTag + Context); - ResultVal.Append(#13#10 + kDurationTag + IntToStr(Duration) + 'ms'); - //ResultVal.Append(#13#10 + kTimeDateTag + EndDateTime); - ResultVal.Append(#13#10 + kParamsTag + CreateParamsDisplayString); - ResultVal.Append(#13#10 + kResultsTag + CreateResultsDisplayString); - ResultVal.Append(#13#10 + kHeaderEndTag); - end; - dfFormatForList: - begin -// ResultVal.Append(Name+#09rpcId:='+UniqueId+#09cId:='+UniqueClientId+' time:='+Duration+'ms '+ClientName); -{ if(Duration < 1) - durationStr := '<1' - else - durationStr := Duration.ToString(); - - ResultVal.Append( Name.PadRight(kNamePad)+ - ' cId:='+UniqueClientId.ToString().PadRight(kcIdpad)+ - ' time:='+duration.PadLeft(kDurationPad)+'ms'+ - ' rpcId:='+UniqueId.ToString().PadRight(krpcIdPad)+ - ClientName); -} - end; - else - begin - ResultVal.Append(kHeaderStartTag); - ResultVal.Append(#13#10 + kRpcTag + Name); - ResultVal.Append(#13#10 + kRpcDebugIdTag + IntToStr(UniqueId)); - //ResultVal.Append(#13#10 + kClientNameTag + ClientName); - //ResultVal.Append(#13#10 + kClientDebugIdTag + UniqueClientId); - ResultVal.Append(#13#10 + kContextTag + Context); - ResultVal.Append(#13#10 + kDurationTag + IntToStr(Duration) + 'ms'); - //ResultVal.Append(#13#10 + kTimeDateTag + EndDateTime); - ResultVal.Append(#13#10 + kParamsTag + CreateParamsDisplayString()); - ResultVal.Append(#13#10 + kResultsTag + CreateResultsDisplayString()); - ResultVal.Append(#13#10 + kHeaderEndTag); - // Default case is FormatFullWithoutClientName - end; - end; - Result := ResultVal.ToString(); -end; - -function TRpcLogEntry.CreateClipboardString: String; -var - ResultVal: TMyString; -begin - ResultVal := TMyString.Create(''); - ResultVal.Append(kHeaderStartTag); - ResultVal.Append(#13#10#13#10+kRpcTag+Name); - ResultVal.Append(#13#10+kRpcDebugIdTag+ IntToStr(UniqueId)); - ResultVal.Append(#13#10+kClientNameTag+ClientName); - ResultVal.Append(#13#10+kClientDebugIdTag+ IntToStr(UniqueClientId)); - ResultVal.Append(#13#10+kContextTag+Context); - ResultVal.Append(#13#10+kDurationTag+ IntToStr(Duration)); - ResultVal.Append(#13#10#13#10+kParamsTag+#13#10); - ResultVal.Append(CreateParamsDisplayString); - ResultVal.Append(#13#10#13#10+kResultsTag+#13#10); - ResultVal.Append(CreateResultsDisplayString); - ResultVal.Append(#13#10#13#10+kHeaderEndTag+#13#10#13#10); - Result := ResultVal.ToString(); -end; - -// const char kSEP_FS = (char)28; -const kSEP_GS: String = #29; -const kSEP_US: String = #30; -const kSEP_RS: String = #31; - -function TRpcLogEntry.CreateParamsDisplayString: String; -var - Str: String; - Chr: Char; - Chr1: String; - TypeStr{, x, y}: String; - ResultVal: TMyString; - i, {j,} CurrStart: Integer; - LengthOfRpcParams: Integer; - EndOfSegment: Integer; - ARef, AVal: String; - Str2: String; -begin - ResultVal := TMyString.Create(''); - LengthOfRpcParams := Length(mRpcParamsString); - if LengthOfRpcParams > 0 then - begin - Str := mRpcParamsString; - CurrStart := 1; - i := 1; -// for i:=0 to Pred(Params.Count) do - while CurrStart < LengthOfRpcParams do - begin - Chr1 := Copy(Str,CurrStart,1); - Chr := PChar(Chr1)^; - case Chr of // - 'L': typeStr := kLiteral; - 'R': typeStr := kReference; - 'M': typeStr := kList; - else typeStr := kUndefined ; - end; // case - if i <> 1 then - ResultVal.Append(#13#10); - ResultVal.Append(TypeStr+#9); - CurrStart := CurrStart + 2; - if TypeStr = kList then - begin - EndOfSegment := 0; - while Copy(Str,CurrStart,1) <> kSep_GS do - begin - EndOfSegment := PosNext(kSep_US,CurrStart,Str); - ARef := Copy(Str,CurrStart,EndOfSegment-CurrStart); - CurrStart := EndOfSegment + 1; - EndOfSegment := PosNext(kSep_RS,CurrStart,Str); - AVal := Copy(Str,CurrStart,EndOfSegment-CurrStart); - CurrStart := EndOfSegment + 1; - ResultVal.Append(#13#10#9+ARef+#9+AVal); - Str2 := #13#10#9+Aref+#9+Aval; - Aval := Str2; - end; // while - if EndOfSegment = 0 then - EndOfSegment := PosNext(kSep_GS,CurrStart,Str); - CurrStart := EndOfSegment + 1; - end - else - begin - EndOfSegment := PosNext(kSEP_GS,CurrStart,Str); - ResultVal.Append(Copy(Str,CurrStart,EndOfSegment-CurrStart)); - CurrStart := EndOfSegment + 1; - end; - Inc(i); - end; // while - end; -{ - else - Assert(False); -} -{ - if (i<>0) then - ResultVal.Append(#13#10); - ResultVal.Append(typeStr+#09+Params[i].Value); - if (Params[i].PType = List) then - begin - for j:=0 to Pred(Params[i].Mult.Count) do - begin - x := Params[i].Mult.Subscript(j); - y := Params[i].Mult[x]; - ResultVal.Append(#13#10#09+'('+x+'):='+y); - end - end - end; -} - Result := ResultVal.ToString; -end; - -function TRpcLogEntry.CreateResultsDisplayString: String; -begin - Result := StrResults; -end; - -end. diff --git a/BDK32/Source/AddServer.dfm b/BDK32/Source/AddServer.dfm deleted file mode 100644 index 327d530..0000000 --- a/BDK32/Source/AddServer.dfm +++ /dev/null @@ -1,74 +0,0 @@ -object frmAddServer: TfrmAddServer - Left = 287 - Top = 259 - Width = 343 - Height = 147 - Caption = 'Add Server' - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'MS Sans Serif' - Font.Style = [] - OldCreateOrder = False - PixelsPerInch = 96 - TextHeight = 13 - object lblAddress: TLabel - Left = 16 - Top = 16 - Width = 50 - Height = 13 - Caption = 'Address:' - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'MS Sans Serif' - Font.Style = [fsBold] - ParentFont = False - end - object lblPortNumber: TLabel - Left = 16 - Top = 48 - Width = 75 - Height = 13 - Caption = 'Port Number:' - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'MS Sans Serif' - Font.Style = [fsBold] - ParentFont = False - end - object edtAddress: TEdit - Left = 104 - Top = 8 - Width = 177 - Height = 21 - Hint = 'Enter Server Address, either as Server Name or IP Address' - TabOrder = 0 - end - object edtPortNumber: TEdit - Left = 104 - Top = 40 - Width = 113 - Height = 21 - Hint = 'Enter the Port Number to use for this server' - TabOrder = 1 - end - object bbtnOK: TBitBtn - Left = 70 - Top = 80 - Width = 75 - Height = 25 - TabOrder = 2 - Kind = bkOK - end - object bbtnCancel: TBitBtn - Left = 190 - Top = 80 - Width = 75 - Height = 25 - TabOrder = 3 - Kind = bkCancel - end -end diff --git a/BDK32/Source/AddServer.pas b/BDK32/Source/AddServer.pas deleted file mode 100644 index ca8b8f4..0000000 --- a/BDK32/Source/AddServer.pas +++ /dev/null @@ -1,40 +0,0 @@ -{ ************************************************************** - Package: XWB - Kernel RPCBroker - Date Created: Sept 18, 1997 (Version 1.1) - Site Name: Oakland, OI Field Office, Dept of Veteran Affairs - Developers: Joel Ivey - Description: Add Server to list of personal servers for - selection. - Current Release: Version 1.1 Patch 40 (January 7, 2005)) -*************************************************************** } - -unit AddServer; - -interface - -uses - Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, - StdCtrls, Buttons; - -type - TfrmAddServer = class(TForm) - lblAddress: TLabel; - lblPortNumber: TLabel; - edtAddress: TEdit; - edtPortNumber: TEdit; - bbtnOK: TBitBtn; - bbtnCancel: TBitBtn; - private - { Private declarations } - public - { Public declarations } - end; - -var - frmAddServer: TfrmAddServer; - -implementation - -{$R *.DFM} - -end. diff --git a/BDK32/Source/CCOWRPCBroker.pas b/BDK32/Source/CCOWRPCBroker.pas deleted file mode 100644 index 61e70da..0000000 --- a/BDK32/Source/CCOWRPCBroker.pas +++ /dev/null @@ -1,562 +0,0 @@ -{ ************************************************************** - Package: XWB - Kernel RPCBroker - Date Created: Sept 18, 1997 (Version 1.1) - Site Name: Oakland, OI Field Office, Dept of Veteran Affairs - Developers: Danila Manapsal, Don Craven, Joel Ivey - Description: Contains TRPCBroker and related components. - Current Release: Version 1.1 Patch 40 (January 7, 2005) -*************************************************************** } - -{************************************************** -This is the hierarchy of things: - TRPCBroker contains - TParams, which contains - array of TParamRecord each of which contains - TMult - -v1.1*4 Silent Login changes (DCM) 10/22/98 - -1.1*6 Polling to support terminating arphaned server jobs. (P6) - == DPC 4/99 - -1.1*8 Check for Multi-Division users. (P8) - REM 7/13/99 - -1.1*13 More silent login code; deleted obsolete lines (DCM) 9/10/99 // p13 -LAST UPDATED: 5/24/2001 // p13 JLI - -1.1*31 Added new read only property BrokerVersion to TRPCBroker which - should contain the version number for the RPCBroker - (or SharedRPCBroker) in use. -**************************************************} -unit CCOWRPCBroker; - -interface - -{$I IISBase.inc} - -uses - {Delphi standard} - Classes, Controls, Dialogs, {DsgnIntf,} Forms, Graphics, Messages, SysUtils, - WinProcs, WinTypes, Windows, - extctrls, {P6} - {VA} - XWBut1, {RpcbEdtr,} MFunStr, Hash, - ComObj, ActiveX, OleCtrls, trpcb, - VERGENCECONTEXTORLib_TLB; - -const - NoMore: boolean = False; - MIN_RPCTIMELIMIT: integer = 30; - CURRENT_RPC_VERSION: String = 'XWB*1.1*36T1'; - -type - -TCCOWRPCBroker = class(TRPCBroker) -private -protected - FCCOWLogonIDName: String; - FCCOWLogonIDValue: String; - FCCOWLogonName: String; - FCCOWLogonNameValue: String; - FContextor: TContextorControl; //CCOW - FCCOWtoken: string; //CCOW - FVistaDomain: String; - FCCOWLogonVpid: String; - FCCOWLogonVpidValue: String; - FWasUserDefined: Boolean; - procedure SetConnected(Value: Boolean); override; - function GetCCOWHandle(ConnectedBroker: TCCOWRPCBroker): string; - procedure CCOWsetUser(Uname, token, Domain, Vpid: string; Contextor: - TContextorControl); - function GetCCOWduz( Contextor: TContextorControl): string; -public - function GetCCOWtoken(Contextor: TContextorControl): string; - function IsUserCleared: Boolean; - function WasUserDefined: Boolean; - function IsUserContextPending(aContextItemCollection: IContextItemCollection): - Boolean; - property Contextor: TContextorControl - read Fcontextor write FContextor; //CCOW - property CCOWLogonIDName: String read FCCOWLogonIDName; - property CCOWLogonIDValue: String read FCCOWLogonIDValue; - property CCOWLogonName: String read FCCOWLogonName; - property CCOWLogonNameValue: String read FCCOWLogonNameValue; - property CCOWLogonVpid: String read FCCOWLogonVpid; - property CCOWLogonVpidValue: String read FCCOWLogonVpidValue; -published - property Connected: boolean read FConnected write SetConnected; - end; - -procedure AuthenticateUser(ConnectingBroker: TCCOWRPCBroker); - -implementation - -uses - Loginfrm, RpcbErr, WSockc, SelDiv{p8}, RpcSLogin{p13}, fRPCBErrMsg, - CCOW_const; - -var - CCOWToken: String; - Domain: String; - PassCode1: String; - PassCode2: String; - - -{--------------------- TCCOWRPCBroker.SetConnected -------------------- -------------------------------------------------------------------} -procedure TCCOWRPCBroker.SetConnected(Value: Boolean); -var - BrokerDir, Str1, Str2, Str3 :string; - RPCBContextor: TContextorControl; -begin - RPCBError := ''; - Login.ErrorText := ''; - if (Connected <> Value) and not(csReading in ComponentState) then begin - if Value and (FConnecting <> Value) then begin {connect} - FSocket := ExistingSocket(Self); - FConnecting := True; // FConnected := True; - try - if FSocket = 0 then - begin - {Execute Client Agent from directory in Registry.} - BrokerDir := ReadRegData(HKLM, REG_BROKER, 'BrokerDr'); - if BrokerDir <> '' then - ProcessExecute(BrokerDir + '\ClAgent.Exe', sw_ShowNoActivate) - else - ProcessExecute('ClAgent.Exe', sw_ShowNoActivate); - if DebugMode and (not OldConnectionOnly) then - begin - Str1 := 'Control of debugging FOR UCX OR NON-CALLBACK CONNECTIONS has been moved from the client to the server. To start a Debug session, do the following:'+#13#10#13#10; - Str2 := '1. On the server, set initial breakpoints where desired.'+#13#10+'2. DO DEBUG^XWBTCPM.'+#13#10+'3. Enter a unique Listener port number (i.e., a port number not in general use).'+#13#10; - Str3 := '4. Connect the client application using the port number entered in Step #3.'; - ShowMessage(Str1 + Str2 + Str3); - end; - TXWBWinsock(XWBWinsock).IsBackwardsCompatible := IsBackwardCompatibleConnection; - TXWBWinsock(XWBWinsock).OldConnectionOnly := OldConnectionOnly; - FSocket := TXWBWinsock(XWBWinsock).NetworkConnect(DebugMode, FServer, - ListenerPort, FRPCTimeLimit); - AuthenticateUser(Self); - StoreConnection(Self); //MUST store connection before CreateContext() - //CCOW start - if (FContextor <> nil) and (length(CCOWtoken) = 0) then - begin - //Get new CCOW token - CCOWToken := GetCCOWHandle(Self); - if Length(CCOWToken) > 0 then - begin - try - RPCBContextor := TContextorControl.Create(Application); - RPCBContextor.Run('BrokerLoginModule#', PassCode1+PassCode2, TRUE, '*'); - CCOWsetUser(user.name, CCOWToken, Domain, user.Vpid, RPCBContextor); //Clear token - FCCOWLogonIDName := CCOW_LOGON_ID; - FCCOWLogonIdValue := Domain; - FCCOWLogonName := CCOW_LOGON_NAME; - FCCOWLogonNameValue := user.name; - if user.name <> '' then - FWasUserDefined := True; - FCCOWLogonVpid := CCOW_LOGON_VPID; - FCCOWLogonVpidValue := user.Vpid; - RPCBContextor.Free; - RPCBContextor := nil; - except - ShowMessage('Problem with Contextor.Run'); - FreeAndNil(RPCBContextor); - end; - end; // if Length(CCOWToken) > 0 - end; //if - //CCOW end - FPulse.Enabled := True; //P6 Start heartbeat. - CreateContext(''); //Closes XUS SIGNON context. - end - else - begin //p13 - StoreConnection(Self); - FPulse.Enabled := True; //p13 - end; //p13 - FConnected := True; // jli mod 12/17/01 - FConnecting := False; - except - on E: EBrokerError do begin - if E.Code = XWB_BadSignOn then - TXWBWinsock(XWBWinsock).NetworkDisconnect(FSocket); - FSocket := 0; - FConnected := False; - FConnecting := False; - FRPCBError := E.Message; // p13 handle errors as specified - if Login.ErrorText <> '' then - FRPCBError := E.Message + chr(10) + Login.ErrorText; - if Assigned(FOnRPCBFailure) then // p13 - FOnRPCBFailure(Self) // p13 - else if ShowErrorMsgs = semRaise then - Raise; // p13 -// raise; {this is where I would do OnNetError} - end{on}; - end{try}; - end{if} - else if not Value then - begin //p13 - FConnected := False; //p13 - FPulse.Enabled := False; //p13 - if RemoveConnection(Self) = NoMore then begin - {FPulse.Enabled := False; ///P6;p13 } - TXWBWinsock(XWBWinsock).NetworkDisconnect(Socket); {actually disconnect from server} - FSocket := 0; {store internal} - //FConnected := False; //p13 - end{if}; - end; {else} - end{if}; -end; - -function TCCOWRPCBroker.WasUserDefined: Boolean; -begin - Result := FWasUserDefined; -end; - -function TCCOWRPCBroker.IsUserCleared: Boolean; -var - CCOWcontextItem: IContextItemCollection; //CCOW - CCOWdataItem1: IContextItem; //CCOW - Name: String; -begin - Result := False; - Name := CCOW_LOGON_ID; - if (Contextor <> nil) then - try - //See if context contains the ID item - CCOWcontextItem := Contextor.CurrentContext; - CCOWDataItem1 := CCowContextItem.Present(Name); - if (CCOWdataItem1 <> nil) then //1 - begin - If CCOWdataItem1.Value = '' then - Result := True - else - FWasUserDefined := True; - end - else - Result := True; - finally - end; //try -end; - -{------------------------ AuthenticateUser ------------------------ -------------------------------------------------------------------} -procedure AuthenticateUser(ConnectingBroker: TCCOWRPCBroker); -var - SaveClearParmeters, SaveClearResults: boolean; - SaveParam: TParams; - SaveRemoteProcedure, SaveRpcVersion: string; - SaveResults: TStrings; - blnSignedOn: boolean; - SaveKernelLogin: boolean; - SaveVistaLogin: TVistaLogin; - OldExceptionHandler: TExceptionEvent; - OldHandle: THandle; -begin - With ConnectingBroker do - begin - SaveParam := TParams.Create(nil); - SaveParam.Assign(Param); //save off settings - SaveRemoteProcedure := RemoteProcedure; - SaveRpcVersion := RpcVersion; - SaveResults := Results; - SaveClearParmeters := ClearParameters; - SaveClearResults := ClearResults; - ClearParameters := True; //set'em as I need'em - ClearResults := True; - SaveKernelLogin := KernelLogin; // p13 - SaveVistaLogin := Login; // p13 - end; - - blnSignedOn := False; //initialize to bad sign-on - - if ConnectingBroker.AccessVerifyCodes <> '' then // p13 handle as AVCode single signon - begin - ConnectingBroker.Login.AccessCode := Piece(ConnectingBroker.AccessVerifyCodes, ';', 1); - ConnectingBroker.Login.VerifyCode := Piece(ConnectingBroker.AccessVerifyCodes, ';', 2); - ConnectingBroker.Login.Mode := lmAVCodes; - ConnectingBroker.KernelLogIn := False; - end; - - //CCOW start - if ConnectingBroker.KernelLogIn and (not (ConnectingBroker.Contextor = nil)) then - begin - CCOWtoken := ConnectingBroker.GetCCOWtoken(ConnectingBroker.Contextor); - if length(CCOWtoken)>0 then - begin - ConnectingBroker.FKernelLogIn := false; - ConnectingBroker.Login.Mode := lmAppHandle; - ConnectingBroker.Login.LogInHandle := CCOWtoken; - end; - end; - //CCOW end - //CCOW Start // p13 following section for silent signon - if not ConnectingBroker.FKernelLogIn then - if ConnectingBroker.FLogin <> nil then //the user. vistalogin contains login info - begin - blnsignedon := SilentLogin(ConnectingBroker); // RpcSLogin unit - if not blnSignedOn then - begin //Switch back to Kernel Login - ConnectingBroker.FKernelLogIn := true; - ConnectingBroker.Login.Mode := lmAVCodes; - end; - end; - //CCOW end - - if ConnectingBroker.FKernelLogIn then - begin //p13 - if Assigned(Application.OnException) then - OldExceptionHandler := Application.OnException - else - OldExceptionHandler := nil; - Application.OnException := TfrmErrMsg.RPCBShowException; - frmSignon := TfrmSignon.Create(Application); - try - - // ShowApplicationAndFocusOK(Application); - OldHandle := GetForegroundWindow; - SetForegroundWindow(frmSignon.Handle); - PrepareSignonForm(ConnectingBroker); - if SetUpSignOn then //SetUpSignOn in loginfrm unit. - begin //True if signon needed - - if frmSignOn.lblServer.Caption <> '' then - begin - frmSignOn.ShowModal; //do interactive logon // p13 - if frmSignOn.Tag = 1 then //Tag=1 for good logon - blnSignedOn := True; //Successfull logon - end - end - else //False when no logon needed - blnSignedOn := NoSignOnNeeded; //Returns True always (for now!) - if blnSignedOn then //P6 If logged on, retrieve user info. - begin - GetBrokerInfo(ConnectingBroker); - if not SelDiv.ChooseDiv('',ConnectingBroker) then - begin - blnSignedOn := False;//P8 - {Select division if multi-division user. First parameter is 'userid' - (DUZ or username) for future use. (P8)} - ConnectingBroker.Login.ErrorText := 'Failed to select Division'; // p13 set some text indicating problem - end; - end; - SetForegroundWindow(OldHandle); - finally - frmSignon.Free; -// frmSignon.Release; //get rid of signon form - -// if ConnectingBroker.Owner is TForm then -// SetForegroundWindow(TForm(ConnectingBroker.Owner).Handle) -// else -// SetForegroundWindow(ActiveWindow); - ShowApplicationAndFocusOK(Application); - end ; //try - if Assigned(OldExceptionHandler) then - Application.OnException := OldExceptionHandler; - end; //if kernellogin - // p13 following section for silent signon - if (not ConnectingBroker.KernelLogIn) and (not blnsignedon) then // was doing the signon twice if already true - if ConnectingBroker.Login <> nil then //the user. vistalogin contains login info - blnsignedon := SilentLogin(ConnectingBroker); // RpcSLogin unit - if not blnsignedon then - begin -// ConnectingBroker.Login.FailedLogin(ConnectingBroker.Login); - TXWBWinsock(ConnectingBroker.XWBWinsock).NetworkDisconnect(ConnectingBroker.Socket); - end - else - GetBrokerInfo(ConnectingBroker); - - //reset the Broker - with ConnectingBroker do - begin - ClearParameters := SaveClearParmeters; - ClearResults := SaveClearResults; - Param.Assign(SaveParam); //restore settings - SaveParam.Free; - RemoteProcedure := SaveRemoteProcedure; - RpcVersion := SaveRpcVersion; - Results := SaveResults; - FKernelLogin := SaveKernelLogin; // p13 - FLogin := SaveVistaLogin; // p13 - end; - - if not blnSignedOn then //Flag for unsuccessful signon. - TXWBWinsock(ConnectingBroker.XWBWinsock).NetError('',XWB_BadSignOn); //Will raise error. - -end; - -{----------------------- GetCCOWHandle -------------------------- -Private function to return a special CCOW Handle from the server -which is set into the CCOW context. -The Broker of a new application can get the CCOWHandle from the context -and use it to do a ImAPPHandle Sign-on. -----------------------------------------------------------------} -function TCCOWRPCBroker.GetCCOWHandle(ConnectedBroker : TCCOWRPCBroker): String; // p13 -begin - Result := ''; - with ConnectedBroker do - try // to permit it to work correctly if CCOW is not installed on the server. - begin - RemoteProcedure := 'XUS GET CCOW TOKEN'; - Call; - Result := Results[0]; - Domain := Results[1]; - RemoteProcedure := 'XUS CCOW VAULT PARAM'; - Call; - PassCode1 := Results[0]; - PassCode2 := Results[1]; - end; - except - Result := ''; - end; -end; - -//CCOW start -procedure TCCOWRPCBroker.CCOWsetUser(Uname, token, Domain, Vpid: string; Contextor: - TContextorControl); -var - CCOWdata: IContextItemCollection; //CCOW - CCOWdataItem1,CCOWdataItem2,CCOWdataItem3: IContextItem; - CCOWdataItem4,CCOWdataItem5: IContextItem; //CCOW - Cname: string; -begin - if Contextor <> nil then - begin - try - //Part 1 - Contextor.StartContextChange; - //Part 2 Set the new proposed context data - CCOWdata := CoContextItemCollection.Create; - CCOWdataItem1 := CoContextItem.Create; - Cname := CCOW_LOGON_ID; - CCOWdataItem1.Name := Cname; - CCOWdataItem1.Value := domain; - CCOWData.Add(CCOWdataItem1); - CCOWdataItem2 := CoContextItem.Create; - Cname := CCOW_LOGON_TOKEN; - CCOWdataItem2.Name := Cname; - CCOWdataItem2.Value := token; - CCOWdata.Add(CCOWdataItem2); - CCOWdataItem3 := CoContextItem.Create; - Cname := CCOW_LOGON_NAME; - CCOWdataItem3.Name := Cname; - CCOWdataItem3.Value := Uname; - CCOWdata.Add(CCOWdataItem3); - // - CCOWdataItem4 := CoContextItem.Create; - Cname := CCOW_LOGON_VPID; - CCOWdataItem4.Name := Cname; - CCOWdataItem4.Value := Vpid; - CCOWdata.Add(CCOWdataItem4); - // - CCOWdataItem5 := CoContextItem.Create; - Cname := CCOW_USER_NAME; - CCOWdataItem5.Name := Cname; - CCOWdataItem5.Value := Uname; - CCOWdata.Add(CCOWdataItem5); - //Part 3 Make change - Contextor.EndContextChange(true, CCOWdata); - //We don't need to check CCOWresponce - finally - end; //try - end; //if -end; - -//Get Token from CCOW context -function TCCOWRPCBroker.GetCCOWtoken(Contextor: TContextorControl): string; -var - CCOWdataItem1: IContextItem; //CCOW - CCOWcontextItem: IContextItemCollection; //CCOW - name: string; -begin - result := ''; - name := CCOW_LOGON_TOKEN; - if (Contextor <> nil) then - try - CCOWcontextItem := Contextor.CurrentContext; - //See if context contains the ID item - CCOWdataItem1 := CCOWcontextItem.Present(name); - if (CCOWdataItem1 <> nil) then //1 - begin - result := CCOWdataItem1.Value; - if not (result = '') then - FWasUserDefined := True; - end; - FCCOWLogonIDName := CCOW_LOGON_ID; - FCCOWLogonName := CCOW_LOGON_NAME; - FCCOWLogonVpid := CCOW_LOGON_VPID; - CCOWdataItem1 := CCOWcontextItem.Present(CCOW_LOGON_ID); - if CCOWdataItem1 <> nil then - FCCOWLogonIdValue := CCOWdataItem1.Value; - CCOWdataItem1 := CCOWcontextItem.Present(CCOW_LOGON_NAME); - if CCOWdataItem1 <> nil then - FCCOWLogonNameValue := CCOWdataItem1.Value; - CCOWdataItem1 := CCOWcontextItem.Present(CCOW_LOGON_VPID); - if CCOWdataItem1 <> nil then - FCCOWLogonVpidValue := CCOWdataItem1.Value; - finally - end; //try -end; - -//Get Name from CCOW context -function TCCOWRPCBroker.GetCCOWduz(Contextor: TContextorControl): string; -var - CCOWdataItem1: IContextItem; //CCOW - CCOWcontextItem: IContextItemCollection; //CCOW - name: string; -begin - result := ''; - name := CCOW_LOGON_ID; - if (Contextor <> nil) then - try - CCOWcontextItem := Contextor.CurrentContext; - //See if context contains the ID item - CCOWdataItem1 := CCOWcontextItem.Present(name); - if (CCOWdataItem1 <> nil) then //1 - begin - result := CCOWdataItem1.Value; - if result <> '' then - FWasUserDefined := True; - end; - finally - end; //try -end; - -function TCCOWRPCBroker.IsUserContextPending(aContextItemCollection: - IContextItemCollection): Boolean; -var - CCOWdataItem1: IContextItem; //CCOW - Val1: String; -begin - result := false; - if WasUserDefined() then // indicates data was defined - begin - Val1 := ''; // look for any USER Context items defined - result := True; - // - CCOWdataItem1 := aContextItemCollection.Present(CCOW_LOGON_ID); - if (CCOWdataItem1 <> nil) then //1 - Val1 := CCOWdataItem1.Value; - // - CCOWdataItem1 := aContextItemCollection.Present(CCOW_LOGON_ID); - if CCOWdataItem1 <> nil then - Val1 := Val1 + '^' + CCOWdataItem1.Value; - // - CCOWdataItem1 := aContextItemCollection.Present(CCOW_LOGON_NAME); - if CCOWdataItem1 <> nil then - Val1 := Val1 + '^' + CCOWdataItem1.Value; - // - CCOWdataItem1 := aContextItemCollection.Present(CCOW_LOGON_VPID); - if CCOWdataItem1 <> nil then - Val1 := Val1 + '^' + CCOWdataItem1.Value; - // - CCOWdataItem1 := aContextItemCollection.Present(CCOW_USER_NAME); - if CCOWdataItem1 <> nil then - Val1 := Val1 + '^' + CCOWdataItem1.Value; - // - if Val1 <> '' then // something defined, so not user context change - result := False; - end; -end; - -end. - diff --git a/BDK32/Source/CCOW_const.pas b/BDK32/Source/CCOW_const.pas deleted file mode 100644 index ae64abc..0000000 --- a/BDK32/Source/CCOW_const.pas +++ /dev/null @@ -1,24 +0,0 @@ -unit CCOW_const; - -interface -const - // Note: set the 'CCOW' suffix to the suffix this app should look for in the context. - // Eg. Patient.ID.MRN.GeneralHospital, Patient.ID.MRN.VendorAppName, etc. - // This string is used during startup (to check for an existing context), - // during a commit event (to check the new context), etc. - - //The VistA Domain - CCOW_LOGON_ID = 'user.id.logon.vistalogon'; //CCOW - //The VistA Token - CCOW_LOGON_TOKEN = 'user.id.logon.vistatoken'; //CCOW - //The VistA user Name - CCOW_LOGON_NAME = 'user.id.logon.vistaname'; //CCOW - // The VistA Vpid - CCOW_LOGON_VPID = 'user.id.logon.vpid'; - // The generic name - CCOW_USER_NAME = 'user.co.name'; - -implementation - -end. - \ No newline at end of file diff --git a/BDK32/Source/Hash.pas b/BDK32/Source/Hash.pas deleted file mode 100644 index a977464..0000000 --- a/BDK32/Source/Hash.pas +++ /dev/null @@ -1,81 +0,0 @@ -{ ************************************************************** - Package: XWB - Kernel RPCBroker - Date Created: Sept 18, 1997 (Version 1.1) - Site Name: Oakland, OI Field Office, Dept of Veteran Affairs - Developers: Wally Fort, Joel Ivey - Description: Encryption and decryption functions. - Current Release: Version 1.1 Patch 40 (January 7, 2005)) -*************************************************************** } - -unit Hash; - - -interface - -uses SysUtils, Classes; - - -{function and procedure prototypes} -function Decrypt(EncryptedText: string): string; -function Encrypt(NormalText: string): string; - -const - maxKeys = 20; - CipherPad: array[0..maxKeys - 1] of string = ( - - 'wkEo-ZJt!dG)49K{nX1BS$vH<&:Myf*>Ae0jQW=;|#PsO`''%+rmb[gpqN,l6/hFC@DcUa ]z~R}"V\iIxu?872.(TYL5_3', - 'rKv`R;M/9BqAF%&tSs#Vh)dO1DZP> *fX''u[.4lY=-mg_ci802N7LTG<]!CWo:3?{+,5Q}(@jaExn$~p\IyHwzU"|k6Jeb', - '\pV(ZJk"WQmCn!Y,y@1d+~8s?[lNMxgHEt=uw|X:qSLjAI*}6zoF{T3#;ca)/h5%`P4$r]G''9e2if_>UDKb7H=CT8S!', - 'NZW:1}K$byP;jk)7''`x90B|cq@iSsEnu,(l-hf.&Y_?J#R]+voQXU8mrV[!p4tg~OMez CAaGFD6H53%L/dT2<*>"{\wI=', - 'vCiJ[D_0xR32c*4.P"G{r7}E8wUgyudF+6-:B=$(sY,LkbHa#''@Q', - 'hvMX,''4Ty;[a8/{6l~F_V"}qLI\!@x(D7bRmUH]W15J%N0BYPkrs&9:$)Zj>u|zwQ=ieC-oGA.#?tfdcO3gp`S+En K2*<', - 'jd!W5[];4''?ghBzIFN}fAK"#`p_TqtD*1E37XGVs@0nmSe+Y6Qyo-aUu%i8c=H2vJ\) R:MLb.9,wlO~P', - '2ThtjEM+!=xXb)7,ZV{*ci3"8@_l-HS69L>]\AUF/Q%:qD?1~m(yvO0e''<#o$p4dnIzKP|`NrkaGg.ufCRB[; sJYwW}5&', - 'vB\5/zl-9y:Pj|=(R''7QJI *&CTX"p0]_3.idcuOefVU#omwNZ`$Fs?L+1Sk<,b)hM4A6[Y%aDrg@~KqEW8t>H};n!2xG{', - 'sFz0Bo@_HfnK>LR}qWXV+D6`Y28=4Cm~G/7-5A\b9!a#rP.l&M$hc3ijQk;),TvUd<[:I"u1''NZSOw]*gxtE{eJp|y (?%', - 'M@,D}|LJyGO8`$*ZqH .j>c~hanG', - 'xVa1'']_GU#zm+:5b@06O3Ap8=*7ZFY!H-uEQk; .q)i&rhd', - 'I]Jz7AG@QX."%3Lq>METUo{Pp_ |a6<0dYVSv8:b)~W9NK`(r''4fs&wim\kReC2hg=HOj$1B*/nxt,;c#y+![?lFuZ-5D}', - 'Rr(Ge6F Hx>q$m&C%M~Tn,:"o''tX/*yP.{lZ!YkiVhuw_y|m};d)-7DZ"Fe/Y9 WidFN,1KsmwQ)GJM{I4:C%}#Ep(?HB/r;t.&U8o|l[''Lg"2hRDyZ5`nbf]qjc0!zS-TkYO<_=76a\X@$Pe3+xVvu', - 'yYgjf"5VdHc#uA,W1i+v''6|@pr{n;DJ!8(btPGaQM.LT3oe?NB/&9>Z`-}02*%x<7lsqz4OS ~E$\R]KI[:UwC_=h)kXmF', - '5:iar.{YU7mBZR@-K|2 "+~`M%8sq4JhPo<_X\Sg3WC;Tuxz,fvEQ1p9=w}FAI&j/keD0c?)LN6OHV]lGy''$*>nd[(tb!#'); - -implementation - -uses mfunstr {for Translate function}; - - -function Encrypt(normalText: string): string; -var - associatorIndex, identifierIndex: integer; -begin - Randomize; - associatorIndex := random(MaxKeys); - repeat - identifierIndex := Random(MaxKeys); - until associatorIndex <> identifierIndex; {make sure indexes are different} - - Result := chr(AssociatorIndex+32) + - Translate(NormalText, CipherPad[AssociatorIndex], - CipherPad[IdentifierIndex]) + - chr(identifierIndex+32); -end; - - - -function Decrypt(EncryptedText: string): string; -var - AssociatorIndex, IdentifierIndex: integer; -begin - IdentifierIndex := Ord(EncryptedText[1])-32; - AssociatorIndex := Ord(EncryptedText[Length(EncryptedText)])-32; - Result := Translate(copy(EncryptedText,2,Length(EncryptedText)-2), - CipherPad[AssociatorIndex], - CipherPad[IdentifierIndex]); -end; - -end. diff --git a/BDK32/Source/IISBase.inc b/BDK32/Source/IISBase.inc deleted file mode 100644 index fc64f83..0000000 --- a/BDK32/Source/IISBase.inc +++ /dev/null @@ -1,120 +0,0 @@ -{=============================================================================== - Ray Konopka's Conference 2001 Include File - - This file is included into each component unit and serves as a common - place to add conditional defines and compiler directives to be used by all - component units. - - Copyright © 1995-2001 by Ray Konopka -===============================================================================} - -{$IFDEF WIN32} - {$DEFINE D2_OR_HIGHER} -{$ENDIF} - -{$IFNDEF VER80} - {$IFNDEF VER90} - {$IFNDEF VER93} - {$DEFINE D3_OR_HIGHER} - {$IFNDEF VER100} - {$DEFINE BCB3_OR_HIGHER} - {$IFNDEF VER110} - {$DEFINE D4_OR_HIGHER} - {$IFNDEF VER120} - {$DEFINE BCB4_OR_HIGHER} - {$IFNDEF VER125} - {$DEFINE D5_OR_HIGHER} - {$DEFINE BCB5_OR_HIGHER} - {$IFNDEF VER130} - {$DEFINE D6_OR_HIGHER} - {$ENDIF} - {$ENDIF} - {$ENDIF} - {$ENDIF} - {$ENDIF} - {$ENDIF} - {$ENDIF} -{$ENDIF} - -{$IFDEF D6_OR_HIGHER} -{$WARN SYMBOL_PLATFORM OFF} -{$ENDIF} - -{$IFDEF VER80} - {$DEFINE D1_ONLY} -{$ENDIF} -{$IFDEF VER90} - {$DEFINE D2_ONLY} -{$ENDIF} -{$IFDEF VER100} - {$DEFINE D3_ONLY} -{$ENDIF} -{$IFDEF VER110} - {$DEFINE BCB3_ONLY} - {$OBJEXPORTALL ON} -{$ENDIF} -{$IFDEF VER120} - {$DEFINE D4_ONLY} -{$ENDIF} -{$IFDEF VER125} - {$DEFINE BCB4_ONLY} - {$OBJEXPORTALL ON} -{$ENDIF} -{$IFDEF VER130} - {$IFDEF BCB} - {$DEFINE BCB5_ONLY} - {$OBJEXPORTALL ON} - {$ELSE} - {$DEFINE D5_ONLY} - {$ENDIF} -{$ENDIF} -{$IFDEF VER140} - {$DEFINE D6_ONLY} -{$ENDIF} - - - -{== Code Generation Directives ==} - -{$F-} { Force Far Calls } -{$A+} { Word Align Data } -{$U-} { Pentium-Save FDIV } -{$K-} { Smart Callbacks } -{$W-} { Windows Stack Frame } - - -{== Runtime Errors ==} - -{$IFOPT D+} - {$R+} { Range Checking - On - if compiled with Debug Information } -{$ELSE} - {$R-} { Range Checking - Off - if compiled without Debug Information } -{$ENDIF} - -{$S-} { Stack Checking } -{$I+} { I/O Checking } -{$Q-} { Overflow Checking } - - -{== Syntax Options ==} - -{$V-} { Strict Var-Strings } -{$B-} { Complete Boolean Evaluation } -{$X+} { Extended Syntax } -{$T-} { Typed @ Operator } -{$P+} { Open Parameters } -{$IFDEF D4_OR_HIGHER} -{$J+} { Writeable Typed Constants } -{$ENDIF} - -{== Miscellaneous Directives ==} - -{$C MOVEABLE DEMANDLOAD DISCARDABLE} { Code Segment Attribute } -{$G+} { 286 Instructions } -{$N+} { Numeric Coprocessor } -{$Z-} { Word Size Enumerated Types } - -{$IFDEF WIN32} -{$H+} { Long String Support } -{$ENDIF} - diff --git a/BDK32/Source/Loginfrm.dfm b/BDK32/Source/Loginfrm.dfm deleted file mode 100644 index 849f0a0..0000000 --- a/BDK32/Source/Loginfrm.dfm +++ /dev/null @@ -1,616 +0,0 @@ -object frmSignon: TfrmSignon - Left = 115 - Top = 114 - Width = 779 - Height = 580 - HelpContext = 1 - ActiveControl = accessCode - Anchors = [akTop] - Caption = 'VISTA Sign-on' - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'MS Sans Serif' - Font.Style = [] - OldCreateOrder = True - Position = poScreenCenter - Scaled = False - OnClose = FormClose - OnCreate = FormCreate - OnShow = FormShow - PixelsPerInch = 96 - TextHeight = 13 - object Panel1: TPanel - Left = 5 - Top = 0 - Width = 761 - Height = 409 - Alignment = taLeftJustify - Anchors = [akLeft, akTop, akRight, akBottom] - BevelInner = bvLowered - BorderWidth = 4 - TabOrder = 0 - object introText: TXWBRichEdit - Left = 6 - Top = 6 - Width = 749 - Height = 397 - Align = alClient - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -15 - Font.Name = 'Courier New' - Font.Style = [fsBold] - URLDetect = True - Lines.Strings = ( - - '1234567890123456789012345678901234567890123456789012345678901234' + - '5678901234567890 ' + - ' '#13 - - ' 1 2 3 4 5 6 ' + - ' 7 8'#13 - - ' ' + - ' '#13 - ' http://vaww.isc-sf.med.va.gov'#13 - 'a '#13 - 'b'#13 - 'c '#13 - 'd'#13 - 'e '#13 - 'f'#13 - 'g '#13 - 'h'#13 - 'i '#13 - 'j'#13 - 'k '#13 - 'l'#13 - 'm '#13 - 'n'#13 - 'o '#13 - - 'p ' + - ' '#13 - 'q '#13 - 'r'#13 - 's '#13 - 't'#13 - 'u '#13 - 'v'#13 - 'w '#13 - 'x'#13 - 'y '#13) - ParentFont = False - ReadOnly = True - ScrollBars = ssVertical - TabOrder = 0 - end - end - object Panel7: TPanel - Left = 0 - Top = 409 - Width = 771 - Height = 144 - Align = alBottom - BevelOuter = bvNone - TabOrder = 1 - object Image1: TImage - Left = 8 - Top = 8 - Width = 117 - Height = 78 - AutoSize = True - Picture.Data = { - 07544269746D6170BE120000424DBE1200000000000076000000280000007500 - 00004E0000000100040000000000481200000000000000000000100000001000 - 0000000000000000800000800000008080008000000080008000808000008080 - 8000C0C0C0000000FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFF - FF00888888888888888888888888888888888888888888888888888888888888 - 8888888888888888888888888888888888888888888888888888888880008888 - 8888888888888888888888888888888888888888888888888888888888888888 - 8888888888888888888888888888888888888888888888888000888888888888 - 888888888888888888FFFFFFFFFFFFFFFFFFFFF888888888888888FFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFF888888888888888888800088888888888888888888 - 888888887FFFFFFFFFFFFFFFFFFFFFFF8888888888887FFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFF8888888888888888880008888888888888888888888888888 - 788888888888888888888FFF8888888888887888888888888888888888888888 - 8888FFFF88888888888888888000888888888888888888888888888778888888 - 88888888888888FFF88888888887888888888888888888888888888888888FFF - 8888888888888888800088888888888888888888888888778888888888888888 - 888888FFF888888888878888888888888888888888888888888888FFF8888888 - 888888888000888888888888888888888888887888888888888888888888888F - FF88888888788888888888888888888888888888888888FFF888888888888888 - 8000888888888888888888888888877888888888888888888888888FFF888888 - 887888888888888888888888888888888888888FFF8888888888888880008888 - 888888888888888888887788888888888888888888888888FFF8888887888888 - 8888888888888888888888888888888FFFF88888888888888000888888888888 - 8888888888887888888888888888888888888888FFFF88888788888888888888 - 888888888888888888888888FFF8888888888888800088888888888888888888 - 888778888888888888888888888888888FFF8888788888888888888888888888 - 88888888888888888FFF88888888888880008888888888888888888888778888 - 88888888888888888888888888FFF88878888888888888888888888888888888 - 888888888FFF8888888888888000888888888888888888888878888888888888 - 888888888888888888FFF8878888888888888888888888888888888888888888 - 88FFF88888888888800088888888888888888888877888888888888888888888 - 88888888888FFF78888888888888888888888888888888888888888888FFFF88 - 8888888880008888888888888888888887888888888888888888888888888888 - 888FFF788888888888888888888888888888888888888888888FFF8888888888 - 80008888888888888888888877888888888888888FF77777777777777777FF88 - 8888888888777777777777777777777777777777777777F88888888880008888 - 888888888888888778888888888888888FF777777777777777777F8888888888 - 8777777777777777777777777777777777777FF8888888888000888888888888 - 888888878888888888888888FF77777777777777777778888888888877777777 - 77777777777777777777777777777FFF88888888800088888888888888888877 - 888888888888888FFF88888888888888888777888888888FF888888888888888 - 888888888888888888878FFFF888888880008888888888888888877888888888 - 8888888FF888888888888888888777788888888F888888888888888888888888 - 88888888888788FFF888888880008888888888888888878888888888888888FF - 8888888888888888888877788888888F88888888888888888888888888888888 - 8878888FFF88888880008888888888888888778888888888888888FF88888888 - 8888888888887777888888F8888888888888888888888888888888888788888F - FF8888888000888888888888888878888888888888888FF88888888888888888 - 88888777888888F88888888888888888888888888888888887888888FFF88888 - 800088888888888888877888888888888888FFF8888888888888888888888777 - 78888FF88888888888888888888888888888888878888888FFFF888880008888 - 8888888888778888888888888888FF8888888888888888888888887778888F88 - 88888888888888888888888888888888788888888FFF88888000888888888888 - 8778888888888888888FF88888888888888888888888887777888F8888888888 - 8888888888888888888888878888888888FFF888800088888888888887888888 - 8888888888FFF8888888888888888888888888877788F8888888888888888888 - 88888888888888878888888888FFF88880008888888888887788888888888888 - 88FF88888888888888888888888888877778F888888888888888888888888888 - 8888887888888888888FFF88800088888888888878888888888888888FF88888 - 888888888888888888888888777FF88888888888888888888888888888888788 - 88888888888FFFF8800088888888888778888888888888888FF8888888888888 - 88888888888888887777FFFFFFFFFFFFFFFFFFF8888888888888878888888888 - 8888FF8880008888888888778888888888888888FF8888888888888888888888 - 8888888887777FFFFFFFFFFFFFFFFF888888888888887888888888888888FF88 - 8000888888888878888888888888888FFF888888888888888888888888888888 - 877778888888888888888F88888888888888788888888888888FF88880008888 - 88888778888888888888888FF888888888888888888F88888888888888777788 - 888888888888F888888888888887888888888888888FF8888000888888888788 - 88888888888888FF8888888888888888887FF888888888888887778888888888 - 888F888888888888888788888888888888FF8888800088888888778888888888 - 88888FFF888888888888888887FFFF88888888888887777888888888888F8888 - 88888888887888888888888888FF888880008888888778888888888888888FF8 - 8888888888888888878FFF8888888888888877788888888888F8888888888888 - 87888888888888888FF888888000888888878888888888888888FF8888888888 - 888888887888FFF888888888888877778888888888F888888888888887888888 - 88888888FFF888888000888888778888888888888888FF888888888888888887 - 8888FFF88888888888888777888888888F888888888888887888888888888888 - FF888888800088888778888888888888888FF888888888888888888788888FFF - 888888888888877778888888F888888888888888788888888888888FF8888888 - 80008888878888888888888888FFF888888888888888887888888FFFF8888888 - 8888887778888888F888888888888887888888888888888FF888888880008888 - 778888888888888888FF88888888888888888788888888FFF888888888888877 - 7788888F888888888888888788888888888888FF888888888000888778888888 - 888888888FF8888888888888888887888888888FFF888888888888877778888F - 888888888888887888888888888888FF88888888800088878888888888888888 - FFF8888888888888888878888888888FFF88888888888887777888F888888888 - 888888788888888888888FF888888888800088778888888888888888FF888888 - 888888888888788888888888FFF888888888888877788F888888888888888788 - 888888888888FFF88888888880008778888888888888888FF888888888888888 - 8887888888888888FFFF88888888888877788F88888888888888788888888888 - 8888FF888888888880008778888888888888888FF88888888888888888788888 - 888888888FFF8888888888888778F888888888888888788888888888888FF888 - 888888888000877788888888888888FF88888888888888888878888888888888 - 88FFF888888888888778F888888888888887888888888888888FF88888888888 - 800087778888888888888FFF8888888888888888878888888888888888FFF888 - 88888888887F888888888888888788888888888888FF88888888888880008877 - 7888888888888FF888888888888888887888888888888888888FFF8888888888 - 8888888888888888887888888888888888FF8888888888888000887777888888 - 8888FF8888888888888888887888888888888888888FFFF88888888888888888 - 8888888888788888888888888FF88888888888888000888777888888888FFF88 - 888888888888888788888888888887888888FFF8888888888888888888888888 - 8788888888888888FFF88888888888888000888877788888888FF88888888888 - 88888887888888888888877888888FFF88888888888888888888888878888888 - 88888888FF88888888888888800088887778888888FF88888888888888888878 - 888888888888F77888888FFF888888888888888888888888788888888888888F - F888888888888888800088888777888888FF8888888888888888878888888888 - 8888F777888888FFF88888888888888888888887888888888888888FF8888888 - 8888888880008888877778888FF88888888888888888878888888888888FF777 - 788888FFFF888888888888888888888788888888888888FF8888888888888888 - 8000888888777888FFF8888888888888888878888888888888FFF8777888888F - FF888888888888888888887888888888888888FF888888888888888880008888 - 88877788FF88888888888888888878888888888888FF888777888888FFF88888 - 88888888888888788888888888888FF88888888888888888800088888887778F - F88888888888888888878888888888888FF8888777888888FFF8888888888888 - 888887888888888888888FF88888888888888888800088888888777FF8888888 - 8888888888788888888888888FF88888777888888FFF88888888888888888788 - 888888888888FF8888888888888888888000888888887777FFFFFFFFFFFFFFFF - FF88888888888888FF888888777788888FFFFFFFFFFFFFFFFFFF788888888888 - 888FFF8888888888888888888000888888888777FFFFFFFFFFFFFFFFF8888888 - 8888888FFF8888888777888888FFFFFFFFFFFFFFFFFF788888888888888FF888 - 888888888888888880008888888888777888888888888888888888888888888F - F8888888887778888888888888888888888888888888888888FF888888888888 - 888888888000888888888887788888888888888888888888888888FF88888888 - 887777888888888888888888888888888888888888FF88888888888888888888 - 800088888888888777888888888888888888888888888FFF8888888888877788 - 888888888888888888888888888888888FF88888888888888888888880008888 - 8888888877788888888888888888888888888FF8888888888888777888888888 - 8888888888888888888888888FF8888888888888888888888000888888888888 - 7778888888888888888888888888FF8888888888888877778888888888888888 - 8888888888888888FF8888888888888888888888800088888888888887778888 - 8888888888888888888FFF888888888888888777888888888888888888888888 - 8888888FFF888888888888888888888880008888888888888777888888888888 - 88888888888FF88888888888888888777888888888888888888888888888888F - F888888888888888888888888000888888888888887778888888888888888888 - 88FF88888888888888888877788888888888888888888888888888FF88888888 - 8888888888888888800088888888888888777788888888888888888888FF8888 - 8888888888888887778888888888888888888888888888FF8888888888888888 - 8888888880008888888888888887778888888888888888888FF8888888888888 - 8888888877788888888888888888888888888FF8888888888888888888888888 - 8000888888888888888877788888888888888888FFF888888888888888888888 - 77788888888888888888888888888FF888888888888888888888888880008888 - 88888888888877788888888888888888FF888888888888888888888887778888 - 88888888888888888888FF888888888888888888888888888000888888888888 - 88888777777777777777777FF888888888888888888888888777777777777777 - 777777777777FF88888888888888888888888888800088888888888888888777 - 777777777777777FF88888888888888888888888887777777777777777777777 - 7777888888888888888888888888888880008888888888888888888888888888 - 8888888888888888888888888888888888888888888888888888888888888888 - 8888888888888888888888888000888888888888888888888888888888888888 - 8888888888888888888888888888888888888888888888888888888888888888 - 88888888888888888000} - Stretch = True - end - object Bevel1: TBevel - Left = 0 - Top = 118 - Width = 771 - Height = 26 - Align = alBottom - Style = bsRaised - end - object Bevel2: TBevel - Left = 4 - Top = 120 - Width = 165 - Height = 20 - Anchors = [akLeft, akBottom] - end - object Bevel3: TBevel - Left = 172 - Top = 120 - Width = 109 - Height = 20 - Anchors = [akLeft, akBottom] - end - object Bevel4: TBevel - Left = 284 - Top = 120 - Width = 85 - Height = 20 - Anchors = [akLeft, akBottom] - end - object Bevel5: TBevel - Left = 372 - Top = 120 - Width = 117 - Height = 20 - Anchors = [akLeft, akBottom] - end - object Label3: TLabel - Left = 8 - Top = 122 - Width = 43 - Height = 16 - Anchors = [akLeft, akBottom] - Caption = 'Server:' - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -15 - Font.Name = 'MS Sans Serif' - Font.Style = [] - ParentFont = False - end - object Label4: TLabel - Left = 176 - Top = 122 - Width = 49 - Height = 16 - Anchors = [akLeft, akBottom] - Caption = 'Volume:' - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -15 - Font.Name = 'MS Sans Serif' - Font.Style = [] - ParentFont = False - end - object Label5: TLabel - Left = 288 - Top = 122 - Width = 25 - Height = 16 - Anchors = [akLeft, akBottom] - Caption = 'UCI:' - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -15 - Font.Name = 'MS Sans Serif' - Font.Style = [] - ParentFont = False - end - object Label6: TLabel - Left = 376 - Top = 122 - Width = 27 - Height = 16 - Anchors = [akLeft, akBottom] - Caption = 'Port:' - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -15 - Font.Name = 'MS Sans Serif' - Font.Style = [] - ParentFont = False - end - object lblServer: TLabel - Left = 64 - Top = 122 - Width = 5 - Height = 16 - Anchors = [akLeft, akBottom] - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -15 - Font.Name = 'MS Sans Serif' - Font.Style = [fsBold] - ParentFont = False - end - object lblVolume: TLabel - Left = 240 - Top = 122 - Width = 5 - Height = 16 - Anchors = [akLeft, akBottom] - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -15 - Font.Name = 'MS Sans Serif' - Font.Style = [fsBold] - ParentFont = False - end - object lblUCI: TLabel - Left = 328 - Top = 122 - Width = 5 - Height = 16 - Anchors = [akLeft, akBottom] - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -15 - Font.Name = 'MS Sans Serif' - Font.Style = [fsBold] - ParentFont = False - end - object lblPort: TLabel - Left = 416 - Top = 122 - Width = 5 - Height = 16 - Anchors = [akLeft, akBottom] - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -15 - Font.Name = 'MS Sans Serif' - Font.Style = [fsBold] - ParentFont = False - end - object Panel8: TPanel - Left = 422 - Top = 0 - Width = 349 - Height = 118 - Align = alRight - BevelOuter = bvNone - TabOrder = 0 - object Label1: TLabel - Left = 24 - Top = 16 - Width = 97 - Height = 16 - Alignment = taRightJustify - Caption = 'Access Code:' - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -13 - Font.Name = 'MS Sans Serif' - Font.Style = [fsBold] - ParentFont = False - end - object Label2: TLabel - Left = 35 - Top = 56 - Width = 86 - Height = 16 - Alignment = taRightJustify - Caption = 'Verify Code:' - Font.Charset = ANSI_CHARSET - Font.Color = clWindowText - Font.Height = -13 - Font.Name = 'MS Sans Serif' - Font.Style = [fsBold] - ParentFont = False - end - object verifyCode: TEdit - Left = 128 - Top = 56 - Width = 97 - Height = 25 - AutoSize = False - CharCase = ecUpperCase - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -13 - Font.Name = 'MS Sans Serif' - Font.Style = [fsBold] - ParentFont = False - PasswordChar = '*' - TabOrder = 1 - end - object accessCode: TEdit - Left = 128 - Top = 16 - Width = 97 - Height = 25 - AutoSize = False - CharCase = ecUpperCase - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -13 - Font.Name = 'MS Sans Serif' - Font.Style = [fsBold] - ParentFont = False - PasswordChar = '*' - TabOrder = 0 - end - object btnOk: TBitBtn - Left = 252 - Top = 16 - Width = 85 - Height = 26 - Caption = '&OK' - Default = True - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -13 - Font.Name = 'MS Sans Serif' - Font.Style = [fsBold] - ParentFont = False - TabOrder = 2 - OnClick = btnOkClick - Glyph.Data = { - BE060000424DBE06000000000000360400002800000024000000120000000100 - 0800000000008802000000000000000000000001000000010000000000000000 - 80000080000000808000800000008000800080800000C0C0C000C0DCC000F0C8 - A400000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000F0FBFF00A4A0A000808080000000 - FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00030303030303 - 0303030303030303030303030303030303030303030303030303030303030303 - 03030303030303030303030303030303030303030303FF030303030303030303 - 03030303030303040403030303030303030303030303030303F8F8FF03030303 - 03030303030303030303040202040303030303030303030303030303F80303F8 - FF030303030303030303030303040202020204030303030303030303030303F8 - 03030303F8FF0303030303030303030304020202020202040303030303030303 - 0303F8030303030303F8FF030303030303030304020202FA0202020204030303 - 0303030303F8FF0303F8FF030303F8FF03030303030303020202FA03FA020202 - 040303030303030303F8FF03F803F8FF0303F8FF03030303030303FA02FA0303 - 03FA0202020403030303030303F8FFF8030303F8FF0303F8FF03030303030303 - FA0303030303FA0202020403030303030303F80303030303F8FF0303F8FF0303 - 0303030303030303030303FA0202020403030303030303030303030303F8FF03 - 03F8FF03030303030303030303030303FA020202040303030303030303030303 - 0303F8FF0303F8FF03030303030303030303030303FA02020204030303030303 - 03030303030303F8FF0303F8FF03030303030303030303030303FA0202020403 - 030303030303030303030303F8FF0303F8FF03030303030303030303030303FA - 0202040303030303030303030303030303F8FF03F8FF03030303030303030303 - 03030303FA0202030303030303030303030303030303F8FFF803030303030303 - 030303030303030303FA0303030303030303030303030303030303F803030303 - 0303030303030303030303030303030303030303030303030303030303030303 - 0303} - Margin = 2 - NumGlyphs = 2 - Spacing = -1 - IsControl = True - end - object btnCancel: TBitBtn - Left = 252 - Top = 56 - Width = 85 - Height = 26 - Cancel = True - Caption = '&Cancel' - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -13 - Font.Name = 'MS Sans Serif' - Font.Style = [fsBold] - ModalResult = 2 - ParentFont = False - TabOrder = 3 - OnClick = btnCancelClick - Glyph.Data = { - DE010000424DDE01000000000000760000002800000024000000120000000100 - 0400000000006801000000000000000000001000000000000000000000000000 - 80000080000000808000800000008000800080800000C0C0C000808080000000 - FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00333333333333 - 333333333333333333333333000033338833333333333333333F333333333333 - 0000333911833333983333333388F333333F3333000033391118333911833333 - 38F38F333F88F33300003339111183911118333338F338F3F8338F3300003333 - 911118111118333338F3338F833338F3000033333911111111833333338F3338 - 3333F8330000333333911111183333333338F333333F83330000333333311111 - 8333333333338F3333383333000033333339111183333333333338F333833333 - 00003333339111118333333333333833338F3333000033333911181118333333 - 33338333338F333300003333911183911183333333383338F338F33300003333 - 9118333911183333338F33838F338F33000033333913333391113333338FF833 - 38F338F300003333333333333919333333388333338FFF830000333333333333 - 3333333333333333333888330000333333333333333333333333333333333333 - 0000} - Margin = 2 - NumGlyphs = 2 - Spacing = -1 - IsControl = True - end - object cbxChangeVerifyCode: TCheckBox - Left = 128 - Top = 90 - Width = 161 - Height = 17 - Anchors = [akLeft, akBottom] - Caption = 'Change Verify Code' - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -13 - Font.Name = 'Microsoft Sans Serif' - Font.Style = [fsBold] - ParentFont = False - TabOrder = 4 - end - end - end - object RpcbiBroker: TRPCBroker - ClearParameters = True - ClearResults = True - Connected = False - ListenerPort = 9500 - RpcVersion = '0' - Server = 'NXT-Server' - KernelLogIn = True - LogIn.Mode = lmAVCodes - LogIn.PromptDivision = False - OldConnectionOnly = False - Left = 16 - Top = 24 - end -end diff --git a/BDK32/Source/Loginfrm.pas b/BDK32/Source/Loginfrm.pas deleted file mode 100644 index 864995a..0000000 --- a/BDK32/Source/Loginfrm.pas +++ /dev/null @@ -1,413 +0,0 @@ -{ ************************************************************** - Package: XWB - Kernel RPCBroker - Date Created: Sept 18, 1997 (Version 1.1) - Site Name: Oakland, OI Field Office, Dept of Veteran Affairs - Developers: Danila Manapsal, Don Craven, Joel Ivey - Description: Code supportin Login form. - Current Release: Version 1.1 Patch 40 (January 7, 2005)) -*************************************************************** } - -{************************************************** -ver. 1.1.4 1/6/99 (DCM) - -XWB*1.1*4 adds a try-except block in SetUpSignOn to close -login form when the server job times out. Also adds a try- -except block in btnOkClick in order to cancel the action -if the server job times out. Danila - -ver. 1.1.11 9/13/99 -XWB*1.1*11 deleted obsolete code. DCM (9/13/99) -**********************************************************} -unit Loginfrm; - -interface - -uses - SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls, - Forms, Dialogs, StdCtrls, XWBut1, ExtCtrls, Buttons, - Hash, MFunStr, Trpcb, SgnonCnf, frmSignonMessage, ShellApi, - Windows, XWBRich20{, ActiveX}; //, {OleServer;} - -{ TODO : remove units from directory: APi, xuesap_TLB, fRPCBTimer, fConfirmMapping, fESSOConf } - -type - TfrmSignon = class(TForm) - Panel1: TPanel; - Panel7: TPanel; - Panel8: TPanel; - Label1: TLabel; - Label2: TLabel; - verifyCode: TEdit; - accessCode: TEdit; - btnOk: TBitBtn; - btnCancel: TBitBtn; - Image1: TImage; - Bevel1: TBevel; - Bevel2: TBevel; - Bevel3: TBevel; - Bevel4: TBevel; - Bevel5: TBevel; - Label3: TLabel; - Label4: TLabel; - Label5: TLabel; - Label6: TLabel; - lblServer: TLabel; - lblVolume: TLabel; - lblUCI: TLabel; - lblPort: TLabel; - introText: TXWBRichEdit; - cbxChangeVerifyCode: TCheckBox; - RpcbiBroker: TRPCBroker; - procedure btnOkClick(Sender: TObject); - procedure btnCancelClick(Sender: TObject); - procedure FormShow(Sender: TObject); - procedure FormCreate(Sender: TObject); - procedure FormClose(Sender: TObject; var Action: TCloseAction); - procedure introTextURLClick(Sender: TObject; URL: String); - private - FChngVerify: Boolean; // indicates whether user has requested changing verify code - OrigHelp : String; //Help filename of calling application. - function DoVerify: Boolean; - procedure WMSysCommand(var Message: TWMSysCommand); message WM_SYSCOMMAND; - public - DefaultSignonConfiguration: TSignonValues; -public -end; - -procedure PrepareSignonForm(AppBroker: TRPCBroker); -function SetUpSignOn : Boolean; - -var - frmSignon: TfrmSignon; - intDeviceLock: integer; - LoginfrmSignOnBroker: TRPCBroker; - -Const - SC_Configure = 1; - SC_About = 2; - -implementation - - -uses - RpcSlogin, VCEdit, fRPCBErrMsg, RpcConf1; - -var - SysMenu: HMenu; - -{$R *.DFM} - -procedure PrepareSignonForm(AppBroker: TRPCBroker); -begin - LoginfrmSignonBroker := AppBroker; -end; - -function SetUpSignOn : Boolean; -begin - Result := True; //By default Signon is needed. - if LoginfrmSignonBroker = nil then LoginfrmSignonBroker := frmSignon.RpcbiBroker; - {SignonBroker superseeds RpcbiBroker} - with frmSignon do - begin - try - with LoginfrmSignonBroker do - begin - RemoteProcedure := 'XUS SIGNON SETUP'; - Call; - end; - except {P4} - frmSignon.Free; {P4} // Release jli 041104 - exit; {P4} - end; {P4} - lblServer.Caption := LoginfrmSignonBroker.Results[0]; - lblVolume.Caption := LoginfrmSignonBroker.Results[1]; - lblUCI.Caption := LoginfrmSignonBroker.Results[2]; - lblPort.Caption := LoginfrmSignonBroker.Results[3]; - intDeviceLock := 0; - if LoginfrmSignonBroker.Results.Count > 5 then //Server sent single signon info. - if LoginfrmSignonBroker.Results[5] = '1' then //Signon not needed - Result := False - else - Result := True; - LoginfrmSignonBroker.Login.IsProductionAccount := False; - LoginfrmSignonBroker.Login.DomainName := ''; - if LoginfrmSignonBroker.Results.Count > 7 then - begin - LoginfrmSignonBroker.Login.DomainName := LoginfrmSignonBroker.Results[6]; - if LoginfrmSignonBroker.Results[7] = '1' then - LoginfrmSignonBroker.Login.IsProductionAccount := True; - end; - end; -end; - -{--------------------- TfrmSignon.btnOkClick --------------------- -This gets called when user presses OK button on the login form. -Access and verify codes are transmitted as access;verify to the server. -Server responds with a multi-purpose array where each node has some -special meaning, which may change periodically and should be revised. -SignonBroker.Results[0] - DUZ (0 if unsuccessful signon) -SignonBroker.Results[1] - 0=OK 1=device lock (too many bad tries) -SignonBroker.Results[2] - 0=verify doesn't need to be changed - 1=verify needs changing -SignonBroker.Results[3] - message (i.e. signon inhibited, etc.) -SignonBroker.Results[4] - reserved -SignonBroker.Results[5] - number of lines in greeting message - (currently hard set to 0) to suppress msg display -SignonBroker.Results[6-n] - greeting message -------------------------------------------------------------------} -procedure TfrmSignon.btnOkClick(Sender: TObject); -var - I: integer; -begin - frmSignon.Tag := 0; {initialize signon flag} - try //P4 - with LoginfrmSignonBroker do begin - with Param[0] do begin - Value := Encrypt(accessCode.text + ';' + verifyCode.text); - PType := literal; - end; - RemoteProcedure := 'XUS AV CODE'; - Call; - - {Device is locked -- too many failures} - if Results[1] = '1' then - begin - RPCBShowErrMsg(Results[3]); - Close; - end - - {Verify code must change} - else if Results[2] = '1' then - begin - MessageDlg('You must change your VERIFY CODE at this time.', - mtWarning, [mbOK], 0); //Notify that VC must change. - if DoVerify then - frmSignon.Tag := 1; //VC changed -> OK - Close; - {Note: if VC change necessary and it wasn't made, - Tag remains 0 meaning unsuccessful signon.} - end - - {Signon failed for some other reason} - else if Results[0] = '0' then - begin - accessCode.text := ''; - verifyCode.text := ''; - RPCBShowErrMsg(Results[3]); - accessCode.SetFocus; //Try again. - end - - {Signon succeeded.} - else - begin - frmSignon.Tag := 1; {set flag that signon was good} - {display any server greeting messages} - - if cbxChangeVerifyCode.Checked then - DoVerify; - if Results.Count > 5 then - begin - if Results[5] <> '0' then - begin - frmSignonMsg := TfrmSignonMsg.Create(Self); - try - with frmSignonMsg do begin - for I := 1 to StrToInt(Results[5]) do - mmoMsg.Lines.Add(Results[5+I]); - ShowApplicationAndFocusOK(Application); - ShowModal; - end; - finally - frmSignonMsg.Free; // Release; jli 041104 - end; - end; - end; - Close; - end; - end; - except //P4 - btnCancelClick(self); //P4 - end; //P4 -end; - -procedure TfrmSignon.btnCancelClick(Sender: TObject); -begin - LoginfrmSignOnBroker.Login.ErrorText := 'User Cancelled Login Process'; - Close; -end; - -procedure TfrmSignon.FormShow(Sender: TObject); -var - Str: String; -begin - Str := 'RPCBroker'; - {add Configure... to system menu} - SysMenu := GetSystemMenu(Handle, False); - AppendMenu(SysMenu, MF_Enabled + MF_String + MF_Unchecked, SC_Configure, - '&Properties...'); - AppendMenu(SysMenu, MF_Enabled + MF_String + MF_Unchecked, SC_About,PChar('&About '+Str)); - with LoginfrmSignonBroker do begin - RemoteProcedure := 'XUS INTRO MSG'; - lstCall(introText.Lines); - end; - OrigHelp := Application.HelpFile; // Save original helpfile. - Application.HelpFile := ReadRegData(HKLM, REG_BROKER, 'BrokerDr') + - '\clagent.hlp'; // Identify ConnectTo helpfile. -end; - -procedure TfrmSignon.FormCreate(Sender: TObject); -var - SignonConfiguration: TSignonConfiguration; -begin - if Pos('RPCSharedBrokerSessionMgr',ParamStr(0)) > 0 then - IsSharedBroker := True; - - if (Pos('LARGE',UpperCase(ReadRegDataDefault(HKCU, 'Control Panel\Appearance', 'Current',''))) > 0) or - (Screen.Width < 800) then - begin - WindowState := wsMaximized; - with Screen do - begin - if Width < 700 then // 640 - IntroText.Font.Size := 9 - else if Width < 750 then // 720 - IntroText.Font.Size := 10 - else if Width < 900 then // 800 - IntroText.Font.Size := 11 - else if Width < 1100 then // 1024 - IntroText.Font.Size := 15 - else if Width < 1200 then // 1152 - IntroText.Font.Size := 16 - else - IntroText.Font.Size := 19; // 1280 - end; // with - end; - - FormStyle := fsStayOnTop; // make form stay on top of others so it can be found - {adjust appearance per user's preferences} - SignonConfiguration := TSignonConfiguration.Create; - try - DefaultSignonConfiguration := TSignOnValues.Create; - DefaultSignonConfiguration.BackColor := IntroText.Color; - DefaultSignonConfiguration.Height := Height; - DefaultSignonConfiguration.Width := Width; - DefaultSignonConfiguration.Position := '0'; - DefaultSignonConfiguration.Size := '0'; - DefaultSignonConfiguration.Left := Left; - DefaultSignonConfiguration.Top := Top; - DefaultSignonConfiguration.Font := IntroText.Font; - DefaultSignonConfiguration.TextColor := IntroText.Font.Color; - DefaultSignonConfiguration.FontStyles := IntroText.Font.Style; - SignonDefaults.SetEqual(DefaultSignonConfiguration); - - - SignonConfiguration.ReadRegistrySettings; - if InitialValues.Size = '0' then - begin {restore defaults} - Width:= DefaultSignonConfiguration.Width; - Height := DefaultSignonConfiguration.Height; - end - else begin - try - Position := poDesigned; - Width := StrToInt(Piece(strSize,U,2)); - Height := StrToInt(Piece(strSize,U,3)); - except - Width:= DefaultSignonConfiguration.Width; - Height := DefaultSignonConfiguration.Height; - end; - end; - - if InitialValues.Position = '0' then {restore defaults} - Position := poScreenCenter - else begin - try - Top:= StrToInt(Piece(strPosition,U,2)); - Left := StrToInt(Piece(strPosition,U,3)); - except - Position := poScreenCenter - end; - end; - - if InitialValues.BackColor <> 0 then - introText.Color := InitialValues.BackColor - else - introText.Color := clWindow; - - introText.Font := InitialValues.Font; - - finally - SignonConfiguration.Free; - end; - FChngVerify := False; -end; - -procedure TfrmSignon.WMSysCommand(var Message: TWMSysCommand); -var - Str: String; - SignonConfiguration: TSignonConfiguration; - frmErrMsg: TfrmErrMsg; -begin - if Message.CmdType = SC_Configure then - begin - if IsSharedBroker then - Self.WindowState := wsMinimized; - SignonConfiguration := TSignonConfiguration.Create; - try - ShowApplicationAndFocusOK(Application); - SignonConfiguration.ShowModal; - finally - SignonConfiguration.Free; - Self.WindowState := wsNormal; - end; - end - else if Message.CmdType = SC_About then - begin - frmErrMsg := TfrmErrMsg.Create(Application); - try - frmErrMsg.Caption := 'About RPCBroker'; - Str := 'RPCBroker Version is '+RpcbiBroker.BrokerVersion; - frmErrMsg.mmoErrorMessage.Lines.Add(Str); - ShowApplicationAndFocusOK(Application); - frmErrMsg.ShowModal; - finally - frmErrMsg.Free; - end; - end - else inherited; -end; - -procedure TfrmSignon.FormClose(Sender: TObject; var Action: TCloseAction); -begin - if Piece(strSize,U,1) = '2' then begin - strSize := '2^'+IntToStr(Width)+ U + IntToStr(Height); - WriteRegData(HKCU, REG_SIGNON, 'SignonSiz', strSize); - end; - - if Piece(strPosition,U,1) = '2' then begin - strPosition := '2^'+IntToStr(Top)+ U + IntToStr(Left); - WriteRegData(HKCU, REG_SIGNON, 'SignonPos', strPosition); - end; - Application.HelpFile := OrigHelp; // Restore helpfile. -end; - -procedure TfrmSignon.introTextURLClick(Sender: TObject; URL: String); -begin - ShellExecute(Application.Handle,'open',PChar(URL),nil,nil,SW_NORMAL); -end; - -function TfrmSignon.DoVerify: Boolean; -var - VCEdit1: TVCEdit; -begin - VCEdit1 := TVCEdit.Create(Self); - try - VCEdit1.RPCBroker := LoginfrmSignonBroker; - Result := VCEdit1.ChangeVCKnowOldVC(VerifyCode.Text); //invoke VCEdit form. - finally - VCEdit1.Free; - end; -end; - -end. - diff --git a/BDK32/Source/Mfunstr.pas b/BDK32/Source/Mfunstr.pas deleted file mode 100644 index 5dfdbb2..0000000 --- a/BDK32/Source/Mfunstr.pas +++ /dev/null @@ -1,89 +0,0 @@ -{ ************************************************************** - Package: XWB - Kernel RPCBroker - Date Created: Sept 18, 1997 (Version 1.1) - Site Name: Oakland, OI Field Office, Dept of Veteran Affairs - Developers: Danila Manapsal, Don Craven, Joel Ivey - Description: Functions that emulate MUMPS functions. - Current Release: Version 1.1 Patch 40 (January 7, 2005)) -*************************************************************** } - -unit MFunStr; - -interface - -uses SysUtils, Dialogs; - -{procedure and function prototypes} -function Piece(x: string; del: string; piece1: integer = 1; piece2: integer=0): string; -function Translate(passedString, identifier, associator: string): string; - -const - U: string = '^'; - -implementation - -function Translate(passedString, identifier, associator: string): string; -{TRANSLATE(string,identifier,associator) -Performs a character-for-character replacement within a string.} -var - index, position: integer; - newString: string; - substring: string; - -begin - newString := ''; {initialize NewString} - for index := 1 to length(passedString) do begin - substring := copy(passedString,index,1); - position := pos(substring,identifier); - if position > 0 then - newString := newString + copy(associator,position,1) - else - newString := newString + copy(passedString,index,1) - end; - result := newString; -end; - - -function Piece(x: string; del: string; piece1: integer = 1; piece2: integer=0) : string; -{PIECE(string,delimiter,piece number) -Returns a field within a string using the specified delimiter.} -var - delIndex,pieceNumber: integer; - Resval: String; - Str: String; -begin - {initialize variables} - pieceNumber := 1; - Str := x; - {delIndex :=1;} - if piece2 = 0 then - piece2 := piece1; - Resval := ''; - repeat - delIndex := Pos(del,Str); - if (delIndex > 0) or ((pieceNumber > Pred(piece1)) and (pieceNumber < (piece2+1))) then begin - if (pieceNumber > Pred(piece1)) and (pieceNumber < (piece2+1)) then - begin - if (pieceNumber > piece1) and (Str <> '') then - Resval := Resval + del; - if delIndex > 0 then - begin - Resval := Resval + Copy(Str,1,delIndex-1); - Str := Copy(Str,delIndex+Length(del),Length(Str)); - end - else - begin - Resval := Resval + Str; - Str := ''; - end; - end - else - Str := Copy(Str,delIndex+Length(del),Length(Str)); - end - else if Str <> '' then - Str := ''; - inc(pieceNumber); - until (pieceNumber > piece2); - Result := Resval; -end; -end. diff --git a/BDK32/Source/RPCSharedBrokerSessionMgr1.dof b/BDK32/Source/RPCSharedBrokerSessionMgr1.dof deleted file mode 100644 index fcbd122..0000000 --- a/BDK32/Source/RPCSharedBrokerSessionMgr1.dof +++ /dev/null @@ -1,82 +0,0 @@ -[Compiler] -A=1 -B=0 -C=1 -D=1 -E=0 -F=0 -G=1 -H=1 -I=1 -J=1 -K=0 -L=1 -M=0 -N=1 -O=1 -P=1 -Q=0 -R=0 -S=0 -T=0 -U=0 -V=1 -W=0 -X=1 -Y=1 -Z=1 -ShowHints=1 -ShowWarnings=1 -UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; -[Linker] -MapFile=0 -OutputObjs=0 -ConsoleApp=1 -DebugInfo=0 -RemoteSymbols=0 -MinStackSize=16384 -MaxStackSize=1048576 -ImageBase=4194304 -ExeDescription= -[Directories] -OutputDir= -UnitOutputDir= -PackageDLLOutputDir= -PackageDCPOutputDir= -SearchPath= -Packages=Vcl50;Vclx50;Vcldb50;Vclbde50;VclSmp50;vclado50;ibevnt50;vcldbx50;Qrpt50;TeeUI50;TeeDB50;Tee50;Dss50;TeeQR50;VCLIB50;Vclmid50;vclie50;Inetdb50;Inet50;NMFast50;webmid50;dclocx50;dclaxserver50;JLITestFDE;Rz252N50;Rz252D50;CS20Comps50;CSP20I50;gmunitsd5;gmctrlsd5;gmchrtedd5;gmdaouid5;GMDaod5;gmdbgend5;gmdbctrld5;gmadouid5;GMAdod5;democomponentsd5;XUtilsR50;XUDT_R50;XU_R50;Indy50;XWB_R50 -Conditionals= -DebugSourceDirs= -UsePackages=0 -[Parameters] -RunParams= -HostApplication= -[Language] -ActiveLang= -ProjectLang=$00000409 -RootDir= -[Version Info] -IncludeVerInfo=0 -AutoIncBuild=0 -MajorVer=1 -MinorVer=0 -Release=0 -Build=0 -Debug=0 -PreRelease=0 -Special=0 -Private=0 -DLL=0 -Locale=1033 -CodePage=1252 -[Version Info Keys] -CompanyName= -FileDescription= -FileVersion=1.0.0.0 -InternalName= -LegalCopyright= -LegalTrademarks= -OriginalFilename= -ProductName= -ProductVersion=1.0.0.0 -Comments= diff --git a/BDK32/Source/RPCSharedBrokerSessionMgr1.dpr b/BDK32/Source/RPCSharedBrokerSessionMgr1.dpr deleted file mode 100644 index a90fdab..0000000 --- a/BDK32/Source/RPCSharedBrokerSessionMgr1.dpr +++ /dev/null @@ -1,17 +0,0 @@ -program RPCSharedBrokerSessionMgr1; - -uses - Forms, - RPCSharedBrokerSessionMgr1_TLB in 'RPCSharedBrokerSessionMgr1_TLB.pas', - uSharedBroker1 in 'uSharedBroker1.pas' {SharedBroker: CoClass}, - fVistaBar in 'fVistaBar.pas' {frmVistABar}, - fDebugInfo in 'fDebugInfo.pas' {frmDebugInfo}; - -{$R *.TLB} - -begin - Application.Initialize; - Application.CreateForm(TfrmVistABar, frmVistABar); - Application.CreateForm(TfrmDebugInfo, frmDebugInfo); - Application.Run; -end. diff --git a/BDK32/Source/RPCSharedBrokerSessionMgr1.exe b/BDK32/Source/RPCSharedBrokerSessionMgr1.exe deleted file mode 100644 index 39da5f6..0000000 Binary files a/BDK32/Source/RPCSharedBrokerSessionMgr1.exe and /dev/null differ diff --git a/BDK32/Source/RPCSharedBrokerSessionMgr1.res b/BDK32/Source/RPCSharedBrokerSessionMgr1.res deleted file mode 100644 index 55f8742..0000000 Binary files a/BDK32/Source/RPCSharedBrokerSessionMgr1.res and /dev/null differ diff --git a/BDK32/Source/RPCSharedBrokerSessionMgr1.tlb b/BDK32/Source/RPCSharedBrokerSessionMgr1.tlb deleted file mode 100644 index d77f0a6..0000000 Binary files a/BDK32/Source/RPCSharedBrokerSessionMgr1.tlb and /dev/null differ diff --git a/BDK32/Source/RPCSharedBrokerSessionMgr1_TLB.dcr b/BDK32/Source/RPCSharedBrokerSessionMgr1_TLB.dcr deleted file mode 100644 index a48ba53..0000000 Binary files a/BDK32/Source/RPCSharedBrokerSessionMgr1_TLB.dcr and /dev/null differ diff --git a/BDK32/Source/RPCSharedBrokerSessionMgr1_TLB.pas b/BDK32/Source/RPCSharedBrokerSessionMgr1_TLB.pas deleted file mode 100644 index 5a5fe8a..0000000 --- a/BDK32/Source/RPCSharedBrokerSessionMgr1_TLB.pas +++ /dev/null @@ -1,876 +0,0 @@ -{ ************************************************************** - Package: XWB - Kernel RPCBroker - Date Created: Sept 18, 1997 (Version 1.1) - Site Name: Oakland, OI Field Office, Dept of Veteran Affairs - Developers: Joel Ivey - Description: Type library for use with SharedRPCBroker. - Current Release: Version 1.1 Patch 40 (January 7, 2005)) -*************************************************************** } - -unit RPCSharedBrokerSessionMgr1_TLB; - -// ************************************************************************ // -// WARNING -// ------- -// The types declared in this file were generated from data read from a -// Type Library. If this type library is explicitly or indirectly (via -// another type library referring to this type library) re-imported, or the -// 'Refresh' command of the Type Library Editor activated while editing the -// Type Library, the contents of this file will be regenerated and all -// manual modifications will be lost. -// ************************************************************************ // - -// PASTLWTR : $Revision: 1.88.1.0.1.0 $ -// File generated on 1/25/2002 11:58:49 AM from Type Library described below. - -// *************************************************************************// -// NOTE: -// Items guarded by $IFDEF_LIVE_SERVER_AT_DESIGN_TIME are used by properties -// which return objects that may need to be explicitly created via a function -// call prior to any access via the property. These items have been disabled -// in order to prevent accidental use from within the object inspector. You -// may enable them by defining LIVE_SERVER_AT_DESIGN_TIME or by selectively -// removing them from the $IFDEF blocks. However, such items must still be -// programmatically created via a method of the appropriate CoClass before -// they can be used. -// ************************************************************************ // -// Type Lib: D:\Development\RPCSharedBroker\Exe1\RPCSharedBrokerSessionMgr1.exe (1) -// IID\LCID: {1F7D1EB0-E54F-46F0-B485-2D56743EBB70}\0 -// Helpfile: -// DepndLst: -// (1) v2.0 stdole, (C:\WINNT\System32\stdole2.tlb) -// (2) v4.0 StdVCL, (C:\WINNT\System32\STDVCL40.DLL) -// Errors: -// Error creating palette bitmap of (TSharedBroker) : Invalid GUID format -// ************************************************************************ // -{$TYPEDADDRESS OFF} // Unit must be compiled without type-checked pointers. -interface - -uses Windows, ActiveX, Classes, Graphics, OleServer, OleCtrls, StdVCL; - -// *********************************************************************// -// GUIDS declared in the TypeLibrary. Following prefixes are used: -// Type Libraries : LIBID_xxxx -// CoClasses : CLASS_xxxx -// DISPInterfaces : DIID_xxxx -// Non-DISP interfaces: IID_xxxx -// *********************************************************************// -const - // TypeLibrary Major and minor versions - RPCSharedBrokerSessionMgr1MajorVersion = 1; - RPCSharedBrokerSessionMgr1MinorVersion = 0; - - LIBID_RPCSharedBrokerSessionMgr1: TGUID = '{1F7D1EB0-E54F-46F0-B485-2D56743EBB70}'; - - IID_ISharedBroker: TGUID = '{E1D9A5E6-B7C6-40AD-AC34-6A3E12BDC328}'; - DIID_ISharedBrokerEvents: TGUID = '{CBEA7167-4F9B-465A-B82E-4CEBDF933C35}'; - CLASS_SharedBroker: TGUID = '{EB44A5CD-1871-429F-A5BC-19C71B722182}'; - -// *********************************************************************// -// Declaration of Enumerations defined in Type Library -// *********************************************************************// -// Constants for enum ISharedBrokerErrorCode -type - ISharedBrokerErrorCode = TOleEnum; -const - GeneralFailure = $00000000; - Success = $00000001; - UniqueRpcIdDoesNotExist = $00000002; - UniqueClientIdDoesNotExist = $00000003; - RpcHistoryIndexOutOfRange = $00000004; - RpcHistoryNotEnabled = $00000005; - CouldNotSetContext = $00000006; - CouldNotConnect = $00000007; - ClientIndexOutOfRange = $00000008; - NilClientPointer = $00000009; - ConnectionIndexOutOfRange = $0000000A; - -// Constants for enum IRegistryRootEnum -type - IRegistryRootEnum = TOleEnum; -const - HKCR = $00000000; - HKCU = $00000001; - HKLM = $00000002; - HKU = $00000003; - HKCC = $00000004; - HKDD = $00000005; - -// Constants for enum ISharedBrokerConnection -type - ISharedBrokerConnection = TOleEnum; -const - Failed = $00000000; - New = $00000001; - Shared = $00000002; - Debug = $00000003; - -// Constants for enum ISharedBrokerClient -type - ISharedBrokerClient = TOleEnum; -const - BrokerClient = $00000000; - DebuggerClient = $00000001; - -// Constants for enum ISharedBrokerShowErrorMsgs -type - ISharedBrokerShowErrorMsgs = TOleEnum; -const - isemRaise = $00000000; - isemQuiet = $00000001; - -type - -// *********************************************************************// -// Forward declaration of types defined in TypeLibrary -// *********************************************************************// - ISharedBroker = interface; - ISharedBrokerDisp = dispinterface; - ISharedBrokerEvents = dispinterface; - -// *********************************************************************// -// Declaration of CoClasses defined in Type Library -// (NOTE: Here we map each CoClass to its Default Interface) -// *********************************************************************// - SharedBroker = ISharedBroker; - - -// *********************************************************************// -// Interface: ISharedBroker -// Flags: (4416) Dual OleAutomation Dispatchable -// GUID: {E1D9A5E6-B7C6-40AD-AC34-6A3E12BDC328} -// *********************************************************************// - ISharedBroker = interface(IDispatch) - ['{E1D9A5E6-B7C6-40AD-AC34-6A3E12BDC328}'] - function BrokerConnect(const ClientName: WideString; ConnectionType: ISharedBrokerClient; - const ServerPort: WideString; WantDebug: WordBool; - AllowShared: WordBool; KernelLogin: WordBool; - ShowErrMsgs: ISharedBrokerShowErrorMsgs; RpcTimeLim: SYSINT; - var LoginStr: WideString; out UniqueClientIId: SYSINT; - out ErrorMsg: WideString): ISharedBrokerErrorCode; safecall; - function BrokerDisconnect: ISharedBrokerErrorCode; safecall; - function BrokerSetContext(const OptionName: WideString): ISharedBrokerErrorCode; safecall; - function BrokerCall(const RpcName: WideString; const RpcParams: WideString; - RpcTimeLimit: Integer; out RpcResults: WideString; - out UniqueRpcCallId: Integer): ISharedBrokerErrorCode; safecall; - function ReadRegDataDefault(Root: IRegistryRootEnum; const Key: WideString; - const Name: WideString; const Default: WideString; - out RegResult: WideString): ISharedBrokerErrorCode; safecall; - function Get_RpcVersion: WideString; safecall; - procedure Set_RpcVersion(const version: WideString); safecall; - function Get_RpcHistoryEnabled: WordBool; safecall; - procedure Set_RpcHistoryEnabled(enabled: WordBool); safecall; - function Get_PerClientRpcHistoryLimit: Integer; safecall; - procedure Set_PerClientRpcHistoryLimit(limit: Integer); safecall; - function GetRpcHistoryCountForClient(UniqueClientId: Integer; out rpcHistoryCount: Integer): ISharedBrokerErrorCode; safecall; - function GetClientIdAndNameFromIndex(clientIndex: Integer; out UniqueClientId: Integer; - out ClientName: WideString): ISharedBrokerErrorCode; safecall; - function LogoutConnectedClients(logoutTimeLimit: Integer): ISharedBrokerErrorCode; safecall; - function GetClientNameFromUniqueClientId(UniqueClientId: Integer; out ClientName: WideString): ISharedBrokerErrorCode; safecall; - function GetActiveBrokerConnectionIndexCount(out connectionIndexCount: Integer): ISharedBrokerErrorCode; safecall; - function GetActiveBrokerConnectionInfo(connectionIndex: Integer; - out connectedServerIp: WideString; - out connectedServerPort: Integer; - out lastContext: WideString): ISharedBrokerErrorCode; safecall; - function GetActiveBrokerConnectionIndexFromUniqueClientId(UniqueClientId: Integer; - out connectionIndex: Integer): ISharedBrokerErrorCode; safecall; - function GetRpcCallFromHistory(uniqueRpcId: Integer; out UniqueClientId: Integer; - out brokerContext: WideString; out RpcName: WideString; - out RpcParams: WideString; out rpcResult: WideString; - out rpcStartDateTime: Double; out rpcDuration: Integer): ISharedBrokerErrorCode; safecall; - function GetRpcCallFromHistoryIndex(UniqueClientId: Integer; rpcCallIndex: Integer; - out uniqueRpcId: Integer; out brokerContext: WideString; - out RpcName: WideString; out RpcParams: WideString; - out rpcResult: WideString; out rpcStartDateTime: Double; - out rpcDuration: Integer): ISharedBrokerErrorCode; safecall; - function GetRpcClientIdFromHistory(uniqueRpcId: Integer; out UniqueClientId: Integer; - out ClientName: WideString): ISharedBrokerErrorCode; safecall; - function GetConnectedClientCount(out connectedClientCount: Integer): ISharedBrokerErrorCode; safecall; - function Get_CurrentContext: WideString; safecall; - function Get_User: WideString; safecall; - function Get_Login: WideString; safecall; - procedure Set_Login(const Value: WideString); safecall; - function Get_RpcbError: WideString; safecall; - function Get_Socket: Integer; safecall; - function Get_KernelLogin: WordBool; safecall; - procedure Set_KernelLogin(Value: WordBool); safecall; - function Get_ShowErrorMsgs: ISharedBrokerShowErrorMsgs; safecall; - procedure Set_ShowErrorMsgs(Value: ISharedBrokerShowErrorMsgs); safecall; - property RpcVersion: WideString read Get_RpcVersion write Set_RpcVersion; - property RpcHistoryEnabled: WordBool read Get_RpcHistoryEnabled write Set_RpcHistoryEnabled; - property PerClientRpcHistoryLimit: Integer read Get_PerClientRpcHistoryLimit write Set_PerClientRpcHistoryLimit; - property CurrentContext: WideString read Get_CurrentContext; - property User: WideString read Get_User; - property Login: WideString read Get_Login write Set_Login; - property RpcbError: WideString read Get_RpcbError; - property Socket: Integer read Get_Socket; - property KernelLogin: WordBool read Get_KernelLogin write Set_KernelLogin; - property ShowErrorMsgs: ISharedBrokerShowErrorMsgs read Get_ShowErrorMsgs write Set_ShowErrorMsgs; - end; - -// *********************************************************************// -// DispIntf: ISharedBrokerDisp -// Flags: (4416) Dual OleAutomation Dispatchable -// GUID: {E1D9A5E6-B7C6-40AD-AC34-6A3E12BDC328} -// *********************************************************************// - ISharedBrokerDisp = dispinterface - ['{E1D9A5E6-B7C6-40AD-AC34-6A3E12BDC328}'] - function BrokerConnect(const ClientName: WideString; ConnectionType: ISharedBrokerClient; - const ServerPort: WideString; WantDebug: WordBool; - AllowShared: WordBool; KernelLogin: WordBool; - ShowErrMsgs: ISharedBrokerShowErrorMsgs; RpcTimeLim: SYSINT; - var LoginStr: WideString; out UniqueClientIId: SYSINT; - out ErrorMsg: WideString): ISharedBrokerErrorCode; dispid 1; - function BrokerDisconnect: ISharedBrokerErrorCode; dispid 2; - function BrokerSetContext(const OptionName: WideString): ISharedBrokerErrorCode; dispid 3; - function BrokerCall(const RpcName: WideString; const RpcParams: WideString; - RpcTimeLimit: Integer; out RpcResults: WideString; - out UniqueRpcCallId: Integer): ISharedBrokerErrorCode; dispid 4; - function ReadRegDataDefault(Root: IRegistryRootEnum; const Key: WideString; - const Name: WideString; const Default: WideString; - out RegResult: WideString): ISharedBrokerErrorCode; dispid 5; - property RpcVersion: WideString dispid 7; - property RpcHistoryEnabled: WordBool dispid 6; - property PerClientRpcHistoryLimit: Integer dispid 8; - function GetRpcHistoryCountForClient(UniqueClientId: Integer; out rpcHistoryCount: Integer): ISharedBrokerErrorCode; dispid 10; - function GetClientIdAndNameFromIndex(clientIndex: Integer; out UniqueClientId: Integer; - out ClientName: WideString): ISharedBrokerErrorCode; dispid 11; - function LogoutConnectedClients(logoutTimeLimit: Integer): ISharedBrokerErrorCode; dispid 12; - function GetClientNameFromUniqueClientId(UniqueClientId: Integer; out ClientName: WideString): ISharedBrokerErrorCode; dispid 13; - function GetActiveBrokerConnectionIndexCount(out connectionIndexCount: Integer): ISharedBrokerErrorCode; dispid 14; - function GetActiveBrokerConnectionInfo(connectionIndex: Integer; - out connectedServerIp: WideString; - out connectedServerPort: Integer; - out lastContext: WideString): ISharedBrokerErrorCode; dispid 15; - function GetActiveBrokerConnectionIndexFromUniqueClientId(UniqueClientId: Integer; - out connectionIndex: Integer): ISharedBrokerErrorCode; dispid 16; - function GetRpcCallFromHistory(uniqueRpcId: Integer; out UniqueClientId: Integer; - out brokerContext: WideString; out RpcName: WideString; - out RpcParams: WideString; out rpcResult: WideString; - out rpcStartDateTime: Double; out rpcDuration: Integer): ISharedBrokerErrorCode; dispid 17; - function GetRpcCallFromHistoryIndex(UniqueClientId: Integer; rpcCallIndex: Integer; - out uniqueRpcId: Integer; out brokerContext: WideString; - out RpcName: WideString; out RpcParams: WideString; - out rpcResult: WideString; out rpcStartDateTime: Double; - out rpcDuration: Integer): ISharedBrokerErrorCode; dispid 18; - function GetRpcClientIdFromHistory(uniqueRpcId: Integer; out UniqueClientId: Integer; - out ClientName: WideString): ISharedBrokerErrorCode; dispid 19; - function GetConnectedClientCount(out connectedClientCount: Integer): ISharedBrokerErrorCode; dispid 20; - property CurrentContext: WideString readonly dispid 9; - property User: WideString readonly dispid 22; - property Login: WideString dispid 23; - property RpcbError: WideString readonly dispid 24; - property Socket: Integer readonly dispid 25; - property KernelLogin: WordBool dispid 26; - property ShowErrorMsgs: ISharedBrokerShowErrorMsgs dispid 27; - end; - -// *********************************************************************// -// DispIntf: ISharedBrokerEvents -// Flags: (4096) Dispatchable -// GUID: {CBEA7167-4F9B-465A-B82E-4CEBDF933C35} -// *********************************************************************// - ISharedBrokerEvents = dispinterface - ['{CBEA7167-4F9B-465A-B82E-4CEBDF933C35}'] - procedure OnLogout; dispid 1; - procedure OnRpcCallRecorded(uniqueRpcId: SYSINT); dispid 2; - procedure OnClientConnect(UniqueClientId: SYSINT; Connection: ISharedBrokerConnection); dispid 3; - procedure OnClientDisconnect(UniqueClientId: SYSINT); dispid 4; - procedure OnContextChanged(connectionIndex: SYSINT; const NewContext: WideString); dispid 5; - procedure OnRPCBFailure(const ErrorText: WideString); dispid 6; - procedure OnLoginError(const ErrorText: WideString); dispid 7; - procedure OnConnectionDropped(connectionIndex: SYSINT; const ErrorText: WideString); dispid 8; - end; - -// *********************************************************************// -// The Class CoSharedBroker provides a Create and CreateRemote method to -// create instances of the default interface ISharedBroker exposed by -// the CoClass SharedBroker. The functions are intended to be used by -// clients wishing to automate the CoClass objects exposed by the -// server of this typelibrary. -// *********************************************************************// - CoSharedBroker = class - class function Create: ISharedBroker; - class function CreateRemote(const MachineName: string): ISharedBroker; - end; - - TSharedBrokerOnRpcCallRecorded = procedure(Sender: TObject; uniqueRpcId: SYSINT) of object; - TSharedBrokerOnClientConnect = procedure(Sender: TObject; UniqueClientId: SYSINT; - Connection: ISharedBrokerConnection) of object; - TSharedBrokerOnClientDisconnect = procedure(Sender: TObject; UniqueClientId: SYSINT) of object; - TSharedBrokerOnContextChanged = procedure(Sender: TObject; connectionIndex: SYSINT; - var NewContext: OleVariant) of object; - TSharedBrokerOnRPCBFailure = procedure(Sender: TObject; var ErrorText: OleVariant) of object; - TSharedBrokerOnLoginError = procedure(Sender: TObject; var ErrorText: OleVariant) of object; - TSharedBrokerOnConnectionDropped = procedure(Sender: TObject; connectionIndex: SYSINT; - var ErrorText: OleVariant) of object; - - -// *********************************************************************// -// OLE Server Proxy class declaration -// Server Object : TSharedBroker -// Help String : SharedBroker Object -// Default Interface: ISharedBroker -// Def. Intf. DISP? : No -// Event Interface: ISharedBrokerEvents -// TypeFlags : (2) CanCreate -// *********************************************************************// -{$IFDEF LIVE_SERVER_AT_DESIGN_TIME} - TSharedBrokerProperties= class; -{$ENDIF} - TSharedBroker = class(TOleServer) - private - FOnLogout: TNotifyEvent; - FOnRpcCallRecorded: TSharedBrokerOnRpcCallRecorded; - FOnClientConnect: TSharedBrokerOnClientConnect; - FOnClientDisconnect: TSharedBrokerOnClientDisconnect; - FOnContextChanged: TSharedBrokerOnContextChanged; - FOnRPCBFailure: TSharedBrokerOnRPCBFailure; - FOnLoginError: TSharedBrokerOnLoginError; - FOnConnectionDropped: TSharedBrokerOnConnectionDropped; - FIntf: ISharedBroker; -{$IFDEF LIVE_SERVER_AT_DESIGN_TIME} - FProps: TSharedBrokerProperties; - function GetServerProperties: TSharedBrokerProperties; -{$ENDIF} - function GetDefaultInterface: ISharedBroker; - protected - procedure InitServerData; override; - procedure InvokeEvent(DispID: TDispID; var Params: TVariantArray); override; - function Get_RpcVersion: WideString; - procedure Set_RpcVersion(const version: WideString); - function Get_RpcHistoryEnabled: WordBool; - procedure Set_RpcHistoryEnabled(enabled: WordBool); - function Get_PerClientRpcHistoryLimit: Integer; - procedure Set_PerClientRpcHistoryLimit(limit: Integer); - function Get_CurrentContext: WideString; - function Get_User: WideString; - function Get_Login: WideString; - procedure Set_Login(const Value: WideString); - function Get_RpcbError: WideString; - function Get_Socket: Integer; - function Get_KernelLogin: WordBool; - procedure Set_KernelLogin(Value: WordBool); - function Get_ShowErrorMsgs: ISharedBrokerShowErrorMsgs; - procedure Set_ShowErrorMsgs(Value: ISharedBrokerShowErrorMsgs); - public - constructor Create(AOwner: TComponent); override; - destructor Destroy; override; - procedure Connect; override; - procedure ConnectTo(svrIntf: ISharedBroker); - procedure Disconnect; override; - function BrokerConnect(const ClientName: WideString; ConnectionType: ISharedBrokerClient; - const ServerPort: WideString; WantDebug: WordBool; - AllowShared: WordBool; KernelLogin: WordBool; - ShowErrMsgs: ISharedBrokerShowErrorMsgs; RpcTimeLim: SYSINT; - var LoginStr: WideString; out UniqueClientIId: SYSINT; - out ErrorMsg: WideString): ISharedBrokerErrorCode; - function BrokerDisconnect: ISharedBrokerErrorCode; - function BrokerSetContext(const OptionName: WideString): ISharedBrokerErrorCode; - function BrokerCall(const RpcName: WideString; const RpcParams: WideString; - RpcTimeLimit: Integer; out RpcResults: WideString; - out UniqueRpcCallId: Integer): ISharedBrokerErrorCode; - function ReadRegDataDefault(Root: IRegistryRootEnum; const Key: WideString; - const Name: WideString; const Default: WideString; - out RegResult: WideString): ISharedBrokerErrorCode; - function GetRpcHistoryCountForClient(UniqueClientId: Integer; out rpcHistoryCount: Integer): ISharedBrokerErrorCode; - function GetClientIdAndNameFromIndex(clientIndex: Integer; out UniqueClientId: Integer; - out ClientName: WideString): ISharedBrokerErrorCode; - function LogoutConnectedClients(logoutTimeLimit: Integer): ISharedBrokerErrorCode; - function GetClientNameFromUniqueClientId(UniqueClientId: Integer; out ClientName: WideString): ISharedBrokerErrorCode; - function GetActiveBrokerConnectionIndexCount(out connectionIndexCount: Integer): ISharedBrokerErrorCode; - function GetActiveBrokerConnectionInfo(connectionIndex: Integer; - out connectedServerIp: WideString; - out connectedServerPort: Integer; - out lastContext: WideString): ISharedBrokerErrorCode; - function GetActiveBrokerConnectionIndexFromUniqueClientId(UniqueClientId: Integer; - out connectionIndex: Integer): ISharedBrokerErrorCode; - function GetRpcCallFromHistory(uniqueRpcId: Integer; out UniqueClientId: Integer; - out brokerContext: WideString; out RpcName: WideString; - out RpcParams: WideString; out rpcResult: WideString; - out rpcStartDateTime: Double; out rpcDuration: Integer): ISharedBrokerErrorCode; - function GetRpcCallFromHistoryIndex(UniqueClientId: Integer; rpcCallIndex: Integer; - out uniqueRpcId: Integer; out brokerContext: WideString; - out RpcName: WideString; out RpcParams: WideString; - out rpcResult: WideString; out rpcStartDateTime: Double; - out rpcDuration: Integer): ISharedBrokerErrorCode; - function GetRpcClientIdFromHistory(uniqueRpcId: Integer; out UniqueClientId: Integer; - out ClientName: WideString): ISharedBrokerErrorCode; - function GetConnectedClientCount(out connectedClientCount: Integer): ISharedBrokerErrorCode; - property DefaultInterface: ISharedBroker read GetDefaultInterface; - property CurrentContext: WideString read Get_CurrentContext; - property User: WideString read Get_User; - property RpcbError: WideString read Get_RpcbError; - property Socket: Integer read Get_Socket; - property RpcVersion: WideString read Get_RpcVersion write Set_RpcVersion; - property RpcHistoryEnabled: WordBool read Get_RpcHistoryEnabled write Set_RpcHistoryEnabled; - property PerClientRpcHistoryLimit: Integer read Get_PerClientRpcHistoryLimit write Set_PerClientRpcHistoryLimit; - property Login: WideString read Get_Login write Set_Login; - property KernelLogin: WordBool read Get_KernelLogin write Set_KernelLogin; - property ShowErrorMsgs: ISharedBrokerShowErrorMsgs read Get_ShowErrorMsgs write Set_ShowErrorMsgs; - published -{$IFDEF LIVE_SERVER_AT_DESIGN_TIME} - property Server: TSharedBrokerProperties read GetServerProperties; -{$ENDIF} - property OnLogout: TNotifyEvent read FOnLogout write FOnLogout; - property OnRpcCallRecorded: TSharedBrokerOnRpcCallRecorded read FOnRpcCallRecorded write FOnRpcCallRecorded; - property OnClientConnect: TSharedBrokerOnClientConnect read FOnClientConnect write FOnClientConnect; - property OnClientDisconnect: TSharedBrokerOnClientDisconnect read FOnClientDisconnect write FOnClientDisconnect; - property OnContextChanged: TSharedBrokerOnContextChanged read FOnContextChanged write FOnContextChanged; - property OnRPCBFailure: TSharedBrokerOnRPCBFailure read FOnRPCBFailure write FOnRPCBFailure; - property OnLoginError: TSharedBrokerOnLoginError read FOnLoginError write FOnLoginError; - property OnConnectionDropped: TSharedBrokerOnConnectionDropped read FOnConnectionDropped write FOnConnectionDropped; - end; - -{$IFDEF LIVE_SERVER_AT_DESIGN_TIME} -// *********************************************************************// -// OLE Server Properties Proxy Class -// Server Object : TSharedBroker -// (This object is used by the IDE's Property Inspector to allow editing -// of the properties of this server) -// *********************************************************************// - TSharedBrokerProperties = class(TPersistent) - private - FServer: TSharedBroker; - function GetDefaultInterface: ISharedBroker; - constructor Create(AServer: TSharedBroker); - protected - function Get_RpcVersion: WideString; - procedure Set_RpcVersion(const version: WideString); - function Get_RpcHistoryEnabled: WordBool; - procedure Set_RpcHistoryEnabled(enabled: WordBool); - function Get_PerClientRpcHistoryLimit: Integer; - procedure Set_PerClientRpcHistoryLimit(limit: Integer); - function Get_CurrentContext: WideString; - function Get_User: WideString; - function Get_Login: WideString; - procedure Set_Login(const Value: WideString); - function Get_RpcbError: WideString; - function Get_Socket: Integer; - function Get_KernelLogin: WordBool; - procedure Set_KernelLogin(Value: WordBool); - function Get_ShowErrorMsgs: ISharedBrokerShowErrorMsgs; - procedure Set_ShowErrorMsgs(Value: ISharedBrokerShowErrorMsgs); - public - property DefaultInterface: ISharedBroker read GetDefaultInterface; - published - property RpcVersion: WideString read Get_RpcVersion write Set_RpcVersion; - property RpcHistoryEnabled: WordBool read Get_RpcHistoryEnabled write Set_RpcHistoryEnabled; - property PerClientRpcHistoryLimit: Integer read Get_PerClientRpcHistoryLimit write Set_PerClientRpcHistoryLimit; - property Login: WideString read Get_Login write Set_Login; - property KernelLogin: WordBool read Get_KernelLogin write Set_KernelLogin; - property ShowErrorMsgs: ISharedBrokerShowErrorMsgs read Get_ShowErrorMsgs write Set_ShowErrorMsgs; - end; -{$ENDIF} - - -// procedure Register; - -implementation - -uses ComObj; - -class function CoSharedBroker.Create: ISharedBroker; -begin - Result := CreateComObject(CLASS_SharedBroker) as ISharedBroker; -end; - -class function CoSharedBroker.CreateRemote(const MachineName: string): ISharedBroker; -begin - Result := CreateRemoteComObject(MachineName, CLASS_SharedBroker) as ISharedBroker; -end; - -procedure TSharedBroker.InitServerData; -const - CServerData: TServerData = ( - ClassID: '{EB44A5CD-1871-429F-A5BC-19C71B722182}'; - IntfIID: '{E1D9A5E6-B7C6-40AD-AC34-6A3E12BDC328}'; - EventIID: '{CBEA7167-4F9B-465A-B82E-4CEBDF933C35}'; - LicenseKey: nil; - Version: 500); -begin - ServerData := @CServerData; -end; - -procedure TSharedBroker.Connect; -var - punk: IUnknown; -begin - if FIntf = nil then - begin - punk := GetServer; - ConnectEvents(punk); - Fintf:= punk as ISharedBroker; - end; -end; - -procedure TSharedBroker.ConnectTo(svrIntf: ISharedBroker); -begin - Disconnect; - FIntf := svrIntf; - ConnectEvents(FIntf); -end; - -procedure TSharedBroker.DisConnect; -begin - if Fintf <> nil then - begin - DisconnectEvents(FIntf); - FIntf := nil; - end; -end; - -function TSharedBroker.GetDefaultInterface: ISharedBroker; -begin - if FIntf = nil then - Connect; - Assert(FIntf <> nil, 'DefaultInterface is NULL. Component is not connected to Server. You must call ''Connect'' or ''ConnectTo'' before this operation'); - Result := FIntf; -end; - -constructor TSharedBroker.Create(AOwner: TComponent); -begin - inherited Create(AOwner); -{$IFDEF LIVE_SERVER_AT_DESIGN_TIME} - FProps := TSharedBrokerProperties.Create(Self); -{$ENDIF} -end; - -destructor TSharedBroker.Destroy; -begin -{$IFDEF LIVE_SERVER_AT_DESIGN_TIME} - FProps.Free; -{$ENDIF} - inherited Destroy; -end; - -{$IFDEF LIVE_SERVER_AT_DESIGN_TIME} -function TSharedBroker.GetServerProperties: TSharedBrokerProperties; -begin - Result := FProps; -end; -{$ENDIF} - -procedure TSharedBroker.InvokeEvent(DispID: TDispID; var Params: TVariantArray); -begin - case DispID of - -1: Exit; // DISPID_UNKNOWN - 1: if Assigned(FOnLogout) then - FOnLogout(Self); - 2: if Assigned(FOnRpcCallRecorded) then - FOnRpcCallRecorded(Self, Params[0] {SYSINT}); - 3: if Assigned(FOnClientConnect) then - FOnClientConnect(Self, Params[0] {SYSINT}, Params[1] {ISharedBrokerConnection}); - 4: if Assigned(FOnClientDisconnect) then - FOnClientDisconnect(Self, Params[0] {SYSINT}); - 5: if Assigned(FOnContextChanged) then - FOnContextChanged(Self, Params[0] {SYSINT}, Params[1] {const WideString}); - 6: if Assigned(FOnRPCBFailure) then - FOnRPCBFailure(Self, Params[0] {const WideString}); - 7: if Assigned(FOnLoginError) then - FOnLoginError(Self, Params[0] {const WideString}); - 8: if Assigned(FOnConnectionDropped) then - FOnConnectionDropped(Self, Params[0] {SYSINT}, Params[1] {const WideString}); - end; {case DispID} -end; - -function TSharedBroker.Get_RpcVersion: WideString; -begin - Result := DefaultInterface.Get_RpcVersion; -end; - -procedure TSharedBroker.Set_RpcVersion(const version: WideString); -begin - DefaultInterface.Set_RpcVersion(version); -end; - -function TSharedBroker.Get_RpcHistoryEnabled: WordBool; -begin - Result := DefaultInterface.Get_RpcHistoryEnabled; -end; - -procedure TSharedBroker.Set_RpcHistoryEnabled(enabled: WordBool); -begin - DefaultInterface.Set_RpcHistoryEnabled(enabled); -end; - -function TSharedBroker.Get_PerClientRpcHistoryLimit: Integer; -begin - Result := DefaultInterface.Get_PerClientRpcHistoryLimit; -end; - -procedure TSharedBroker.Set_PerClientRpcHistoryLimit(limit: Integer); -begin - DefaultInterface.Set_PerClientRpcHistoryLimit(limit); -end; - -function TSharedBroker.Get_CurrentContext: WideString; -begin - Result := DefaultInterface.Get_CurrentContext; -end; - -function TSharedBroker.Get_User: WideString; -begin - Result := DefaultInterface.Get_User; -end; - -function TSharedBroker.Get_Login: WideString; -begin - Result := DefaultInterface.Get_Login; -end; - -procedure TSharedBroker.Set_Login(const Value: WideString); -begin - DefaultInterface.Set_Login(Value); -end; - -function TSharedBroker.Get_RpcbError: WideString; -begin - Result := DefaultInterface.Get_RpcbError; -end; - -function TSharedBroker.Get_Socket: Integer; -begin - Result := DefaultInterface.Get_Socket; -end; - -function TSharedBroker.Get_KernelLogin: WordBool; -begin - Result := DefaultInterface.Get_KernelLogin; -end; - -procedure TSharedBroker.Set_KernelLogin(Value: WordBool); -begin - DefaultInterface.Set_KernelLogin(Value); -end; - -function TSharedBroker.Get_ShowErrorMsgs: ISharedBrokerShowErrorMsgs; -begin - Result := DefaultInterface.Get_ShowErrorMsgs; -end; - -procedure TSharedBroker.Set_ShowErrorMsgs(Value: ISharedBrokerShowErrorMsgs); -begin - DefaultInterface.Set_ShowErrorMsgs(Value); -end; - -function TSharedBroker.BrokerConnect(const ClientName: WideString; - ConnectionType: ISharedBrokerClient; - const ServerPort: WideString; WantDebug: WordBool; - AllowShared: WordBool; KernelLogin: WordBool; - ShowErrMsgs: ISharedBrokerShowErrorMsgs; RpcTimeLim: SYSINT; - var LoginStr: WideString; out UniqueClientIId: SYSINT; - out ErrorMsg: WideString): ISharedBrokerErrorCode; -begin - Result := DefaultInterface.BrokerConnect(ClientName, ConnectionType, ServerPort, WantDebug, - AllowShared, KernelLogin, ShowErrMsgs, RpcTimeLim, - LoginStr, UniqueClientIId, ErrorMsg); -end; - -function TSharedBroker.BrokerDisconnect: ISharedBrokerErrorCode; -begin - Result := DefaultInterface.BrokerDisconnect; -end; - -function TSharedBroker.BrokerSetContext(const OptionName: WideString): ISharedBrokerErrorCode; -begin - Result := DefaultInterface.BrokerSetContext(OptionName); -end; - -function TSharedBroker.BrokerCall(const RpcName: WideString; const RpcParams: WideString; - RpcTimeLimit: Integer; out RpcResults: WideString; - out UniqueRpcCallId: Integer): ISharedBrokerErrorCode; -begin - Result := DefaultInterface.BrokerCall(RpcName, RpcParams, RpcTimeLimit, RpcResults, - UniqueRpcCallId); -end; - -function TSharedBroker.ReadRegDataDefault(Root: IRegistryRootEnum; const Key: WideString; - const Name: WideString; const Default: WideString; - out RegResult: WideString): ISharedBrokerErrorCode; -begin - Result := DefaultInterface.ReadRegDataDefault(Root, Key, Name, Default, RegResult); -end; - -function TSharedBroker.GetRpcHistoryCountForClient(UniqueClientId: Integer; - out rpcHistoryCount: Integer): ISharedBrokerErrorCode; -begin - Result := DefaultInterface.GetRpcHistoryCountForClient(UniqueClientId, rpcHistoryCount); -end; - -function TSharedBroker.GetClientIdAndNameFromIndex(clientIndex: Integer; - out UniqueClientId: Integer; - out ClientName: WideString): ISharedBrokerErrorCode; -begin - Result := DefaultInterface.GetClientIdAndNameFromIndex(clientIndex, UniqueClientId, ClientName); -end; - -function TSharedBroker.LogoutConnectedClients(logoutTimeLimit: Integer): ISharedBrokerErrorCode; -begin - Result := DefaultInterface.LogoutConnectedClients(logoutTimeLimit); -end; - -function TSharedBroker.GetClientNameFromUniqueClientId(UniqueClientId: Integer; - out ClientName: WideString): ISharedBrokerErrorCode; -begin - Result := DefaultInterface.GetClientNameFromUniqueClientId(UniqueClientId, ClientName); -end; - -function TSharedBroker.GetActiveBrokerConnectionIndexCount(out connectionIndexCount: Integer): ISharedBrokerErrorCode; -begin - Result := DefaultInterface.GetActiveBrokerConnectionIndexCount(connectionIndexCount); -end; - -function TSharedBroker.GetActiveBrokerConnectionInfo(connectionIndex: Integer; - out connectedServerIp: WideString; - out connectedServerPort: Integer; - out lastContext: WideString): ISharedBrokerErrorCode; -begin - Result := DefaultInterface.GetActiveBrokerConnectionInfo(connectionIndex, connectedServerIp, - connectedServerPort, lastContext); -end; - -function TSharedBroker.GetActiveBrokerConnectionIndexFromUniqueClientId(UniqueClientId: Integer; - out connectionIndex: Integer): ISharedBrokerErrorCode; -begin - Result := DefaultInterface.GetActiveBrokerConnectionIndexFromUniqueClientId(UniqueClientId, - connectionIndex); -end; - -function TSharedBroker.GetRpcCallFromHistory(uniqueRpcId: Integer; out UniqueClientId: Integer; - out brokerContext: WideString; - out RpcName: WideString; out RpcParams: WideString; - out rpcResult: WideString; - out rpcStartDateTime: Double; out rpcDuration: Integer): ISharedBrokerErrorCode; -begin - Result := DefaultInterface.GetRpcCallFromHistory(uniqueRpcId, UniqueClientId, brokerContext, - RpcName, RpcParams, rpcResult, rpcStartDateTime, - rpcDuration); -end; - -function TSharedBroker.GetRpcCallFromHistoryIndex(UniqueClientId: Integer; rpcCallIndex: Integer; - out uniqueRpcId: Integer; - out brokerContext: WideString; - out RpcName: WideString; - out RpcParams: WideString; - out rpcResult: WideString; - out rpcStartDateTime: Double; - out rpcDuration: Integer): ISharedBrokerErrorCode; -begin - Result := DefaultInterface.GetRpcCallFromHistoryIndex(UniqueClientId, rpcCallIndex, uniqueRpcId, - brokerContext, RpcName, RpcParams, - rpcResult, rpcStartDateTime, rpcDuration); -end; - -function TSharedBroker.GetRpcClientIdFromHistory(uniqueRpcId: Integer; - out UniqueClientId: Integer; - out ClientName: WideString): ISharedBrokerErrorCode; -begin - Result := DefaultInterface.GetRpcClientIdFromHistory(uniqueRpcId, UniqueClientId, ClientName); -end; - -function TSharedBroker.GetConnectedClientCount(out connectedClientCount: Integer): ISharedBrokerErrorCode; -begin - Result := DefaultInterface.GetConnectedClientCount(connectedClientCount); -end; - -{$IFDEF LIVE_SERVER_AT_DESIGN_TIME} -constructor TSharedBrokerProperties.Create(AServer: TSharedBroker); -begin - inherited Create; - FServer := AServer; -end; - -function TSharedBrokerProperties.GetDefaultInterface: ISharedBroker; -begin - Result := FServer.DefaultInterface; -end; - -function TSharedBrokerProperties.Get_RpcVersion: WideString; -begin - Result := DefaultInterface.Get_RpcVersion; -end; - -procedure TSharedBrokerProperties.Set_RpcVersion(const version: WideString); -begin - DefaultInterface.Set_RpcVersion(version); -end; - -function TSharedBrokerProperties.Get_RpcHistoryEnabled: WordBool; -begin - Result := DefaultInterface.Get_RpcHistoryEnabled; -end; - -procedure TSharedBrokerProperties.Set_RpcHistoryEnabled(enabled: WordBool); -begin - DefaultInterface.Set_RpcHistoryEnabled(enabled); -end; - -function TSharedBrokerProperties.Get_PerClientRpcHistoryLimit: Integer; -begin - Result := DefaultInterface.Get_PerClientRpcHistoryLimit; -end; - -procedure TSharedBrokerProperties.Set_PerClientRpcHistoryLimit(limit: Integer); -begin - DefaultInterface.Set_PerClientRpcHistoryLimit(limit); -end; - -function TSharedBrokerProperties.Get_CurrentContext: WideString; -begin - Result := DefaultInterface.Get_CurrentContext; -end; - -function TSharedBrokerProperties.Get_User: WideString; -begin - Result := DefaultInterface.Get_User; -end; - -function TSharedBrokerProperties.Get_Login: WideString; -begin - Result := DefaultInterface.Get_Login; -end; - -procedure TSharedBrokerProperties.Set_Login(const Value: WideString); -begin - DefaultInterface.Set_Login(Value); -end; - -function TSharedBrokerProperties.Get_RpcbError: WideString; -begin - Result := DefaultInterface.Get_RpcbError; -end; - -function TSharedBrokerProperties.Get_Socket: Integer; -begin - Result := DefaultInterface.Get_Socket; -end; - -function TSharedBrokerProperties.Get_KernelLogin: WordBool; -begin - Result := DefaultInterface.Get_KernelLogin; -end; - -procedure TSharedBrokerProperties.Set_KernelLogin(Value: WordBool); -begin - DefaultInterface.Set_KernelLogin(Value); -end; - -function TSharedBrokerProperties.Get_ShowErrorMsgs: ISharedBrokerShowErrorMsgs; -begin - Result := DefaultInterface.Get_ShowErrorMsgs; -end; - -procedure TSharedBrokerProperties.Set_ShowErrorMsgs(Value: ISharedBrokerShowErrorMsgs); -begin - DefaultInterface.Set_ShowErrorMsgs(Value); -end; - -{$ENDIF} -{ -procedure Register; -begin - RegisterComponents('Kernel',[TSharedBroker]); -end; -} -end. diff --git a/BDK32/Source/RPCSharedBrokerSessionMgr1_TLB_SRB.pas b/BDK32/Source/RPCSharedBrokerSessionMgr1_TLB_SRB.pas deleted file mode 100644 index e79f57d..0000000 --- a/BDK32/Source/RPCSharedBrokerSessionMgr1_TLB_SRB.pas +++ /dev/null @@ -1,300 +0,0 @@ -{ ************************************************************** - Package: XWB - Kernel RPCBroker - Date Created: Sept 18, 1997 (Version 1.1) - Site Name: Oakland, OI Field Office, Dept of Veteran Affairs - Developers: Joel Ivey - Description: Type library for use with uSharedBroker1 in - building RPCSharedBrokerSessionMgr1.exe. - Current Release: Version 1.1 Patch 40 (January 7, 2005)) -*************************************************************** } - -unit RPCSharedBrokerSessionMgr1_TLB_SRB; - -// ************************************************************************ // -// WARNING -// ------- -// The types declared in this file were generated from data read from a -// Type Library. If this type library is explicitly or indirectly (via -// another type library referring to this type library) re-imported, or the -// 'Refresh' command of the Type Library Editor activated while editing the -// Type Library, the contents of this file will be regenerated and all -// manual modifications will be lost. -// ************************************************************************ // - -// PASTLWTR : $Revision: 1.88.1.0.1.0 $ -// File generated on 1/24/2002 12:39:11 PM from Type Library described below. - -// ************************************************************************ // -// Type Lib: D:\Development\RPCSharedBroker\Exe1\RPCSharedBrokerSessionMgr1.tlb (1) -// IID\LCID: {1F7D1EB0-E54F-46F0-B485-2D56743EBB70}\0 -// Helpfile: -// DepndLst: -// (1) v2.0 stdole, (C:\WINNT\System32\stdole2.tlb) -// (2) v4.0 StdVCL, (C:\WINNT\System32\STDVCL40.DLL) -// ************************************************************************ // -{$TYPEDADDRESS OFF} // Unit must be compiled without type-checked pointers. -interface - -uses Windows, ActiveX, Classes, Graphics, {OleServer,} OleCtrls, StdVCL; - -// *********************************************************************// -// GUIDS declared in the TypeLibrary. Following prefixes are used: -// Type Libraries : LIBID_xxxx -// CoClasses : CLASS_xxxx -// DISPInterfaces : DIID_xxxx -// Non-DISP interfaces: IID_xxxx -// *********************************************************************// -const - // TypeLibrary Major and minor versions - RPCSharedBrokerSessionMgr1MajorVersion = 1; - RPCSharedBrokerSessionMgr1MinorVersion = 0; - - LIBID_RPCSharedBrokerSessionMgr1: TGUID = '{1F7D1EB0-E54F-46F0-B485-2D56743EBB70}'; - - IID_ISharedBroker: TGUID = '{E1D9A5E6-B7C6-40AD-AC34-6A3E12BDC328}'; - DIID_ISharedBrokerEvents: TGUID = '{CBEA7167-4F9B-465A-B82E-4CEBDF933C35}'; - CLASS_SharedBroker: TGUID = '{EB44A5CD-1871-429F-A5BC-19C71B722182}'; - -// *********************************************************************// -// Declaration of Enumerations defined in Type Library -// *********************************************************************// -// Constants for enum ISharedBrokerErrorCode -type - ISharedBrokerErrorCode = TOleEnum; -const - GeneralFailure = $00000000; - Success = $00000001; - UniqueRpcIdDoesNotExist = $00000002; - UniqueClientIdDoesNotExist = $00000003; - RpcHistoryIndexOutOfRange = $00000004; - RpcHistoryNotEnabled = $00000005; - CouldNotSetContext = $00000006; - CouldNotConnect = $00000007; - ClientIndexOutOfRange = $00000008; - NilClientPointer = $00000009; - ConnectionIndexOutOfRange = $0000000A; - -// Constants for enum IRegistryRootEnum -type - IRegistryRootEnum = TOleEnum; -const - HKCR = $00000000; - HKCU = $00000001; - HKLM = $00000002; - HKU = $00000003; - HKCC = $00000004; - HKDD = $00000005; - -// Constants for enum ISharedBrokerConnection -type - ISharedBrokerConnection = TOleEnum; -const - Failed = $00000000; - New = $00000001; - Shared = $00000002; - Debug = $00000003; - -// Constants for enum ISharedBrokerClient -type - ISharedBrokerClient = TOleEnum; -const - BrokerClient = $00000000; - DebuggerClient = $00000001; - -// Constants for enum ISharedBrokerShowErrorMsgs -type - ISharedBrokerShowErrorMsgs = TOleEnum; -const - isemRaise = $00000000; - isemQuiet = $00000001; - -type - -// *********************************************************************// -// Forward declaration of types defined in TypeLibrary -// *********************************************************************// - ISharedBroker = interface; - ISharedBrokerDisp = dispinterface; - ISharedBrokerEvents = dispinterface; - -// *********************************************************************// -// Declaration of CoClasses defined in Type Library -// (NOTE: Here we map each CoClass to its Default Interface) -// *********************************************************************// - SharedBroker = ISharedBroker; - - -// *********************************************************************// -// Interface: ISharedBroker -// Flags: (4416) Dual OleAutomation Dispatchable -// GUID: {E1D9A5E6-B7C6-40AD-AC34-6A3E12BDC328} -// *********************************************************************// - ISharedBroker = interface(IDispatch) - ['{E1D9A5E6-B7C6-40AD-AC34-6A3E12BDC328}'] - function BrokerConnect(const ClientName: WideString; ConnectionType: ISharedBrokerClient; - const ServerPort: WideString; WantDebug: WordBool; - AllowShared: WordBool; KernelLogin: WordBool; - ShowErrMsgs: ISharedBrokerShowErrorMsgs; RpcTimeLim: SYSINT; - var LoginStr: WideString; out UniqueClientIId: SYSINT; - out ErrorMsg: WideString): ISharedBrokerErrorCode; safecall; - function BrokerDisconnect: ISharedBrokerErrorCode; safecall; - function BrokerSetContext(const OptionName: WideString): ISharedBrokerErrorCode; safecall; - function BrokerCall(const RpcName: WideString; const RpcParams: WideString; - RpcTimeLimit: Integer; out RpcResults: WideString; - out UniqueRpcCallId: Integer): ISharedBrokerErrorCode; safecall; - function ReadRegDataDefault(Root: IRegistryRootEnum; const Key: WideString; - const Name: WideString; const Default: WideString; - out RegResult: WideString): ISharedBrokerErrorCode; safecall; - function Get_RpcVersion: WideString; safecall; - procedure Set_RpcVersion(const version: WideString); safecall; - function Get_RpcHistoryEnabled: WordBool; safecall; - procedure Set_RpcHistoryEnabled(enabled: WordBool); safecall; - function Get_PerClientRpcHistoryLimit: Integer; safecall; - procedure Set_PerClientRpcHistoryLimit(limit: Integer); safecall; - function GetRpcHistoryCountForClient(UniqueClientId: Integer; out rpcHistoryCount: Integer): ISharedBrokerErrorCode; safecall; - function GetClientIdAndNameFromIndex(clientIndex: Integer; out UniqueClientId: Integer; - out ClientName: WideString): ISharedBrokerErrorCode; safecall; - function LogoutConnectedClients(logoutTimeLimit: Integer): ISharedBrokerErrorCode; safecall; - function GetClientNameFromUniqueClientId(UniqueClientId: Integer; out ClientName: WideString): ISharedBrokerErrorCode; safecall; - function GetActiveBrokerConnectionIndexCount(out connectionIndexCount: Integer): ISharedBrokerErrorCode; safecall; - function GetActiveBrokerConnectionInfo(connectionIndex: Integer; - out connectedServerIp: WideString; - out connectedServerPort: Integer; - out lastContext: WideString): ISharedBrokerErrorCode; safecall; - function GetActiveBrokerConnectionIndexFromUniqueClientId(UniqueClientId: Integer; - out connectionIndex: Integer): ISharedBrokerErrorCode; safecall; - function GetRpcCallFromHistory(uniqueRpcId: Integer; out UniqueClientId: Integer; - out brokerContext: WideString; out RpcName: WideString; - out RpcParams: WideString; out rpcResult: WideString; - out rpcStartDateTime: Double; out rpcDuration: Integer): ISharedBrokerErrorCode; safecall; - function GetRpcCallFromHistoryIndex(UniqueClientId: Integer; rpcCallIndex: Integer; - out uniqueRpcId: Integer; out brokerContext: WideString; - out RpcName: WideString; out RpcParams: WideString; - out rpcResult: WideString; out rpcStartDateTime: Double; - out rpcDuration: Integer): ISharedBrokerErrorCode; safecall; - function GetRpcClientIdFromHistory(uniqueRpcId: Integer; out UniqueClientId: Integer; - out ClientName: WideString): ISharedBrokerErrorCode; safecall; - function GetConnectedClientCount(out connectedClientCount: Integer): ISharedBrokerErrorCode; safecall; - function Get_CurrentContext: WideString; safecall; - function Get_User: WideString; safecall; - function Get_Login: WideString; safecall; - procedure Set_Login(const Value: WideString); safecall; - function Get_RpcbError: WideString; safecall; - function Get_Socket: Integer; safecall; - function Get_KernelLogin: WordBool; safecall; - procedure Set_KernelLogin(Value: WordBool); safecall; - function Get_ShowErrorMsgs: ISharedBrokerShowErrorMsgs; safecall; - procedure Set_ShowErrorMsgs(Value: ISharedBrokerShowErrorMsgs); safecall; - property RpcVersion: WideString read Get_RpcVersion write Set_RpcVersion; - property RpcHistoryEnabled: WordBool read Get_RpcHistoryEnabled write Set_RpcHistoryEnabled; - property PerClientRpcHistoryLimit: Integer read Get_PerClientRpcHistoryLimit write Set_PerClientRpcHistoryLimit; - property CurrentContext: WideString read Get_CurrentContext; - property User: WideString read Get_User; - property Login: WideString read Get_Login write Set_Login; - property RpcbError: WideString read Get_RpcbError; - property Socket: Integer read Get_Socket; - property KernelLogin: WordBool read Get_KernelLogin write Set_KernelLogin; - property ShowErrorMsgs: ISharedBrokerShowErrorMsgs read Get_ShowErrorMsgs write Set_ShowErrorMsgs; - end; - -// *********************************************************************// -// DispIntf: ISharedBrokerDisp -// Flags: (4416) Dual OleAutomation Dispatchable -// GUID: {E1D9A5E6-B7C6-40AD-AC34-6A3E12BDC328} -// *********************************************************************// - ISharedBrokerDisp = dispinterface - ['{E1D9A5E6-B7C6-40AD-AC34-6A3E12BDC328}'] - function BrokerConnect(const ClientName: WideString; ConnectionType: ISharedBrokerClient; - const ServerPort: WideString; WantDebug: WordBool; - AllowShared: WordBool; KernelLogin: WordBool; - ShowErrMsgs: ISharedBrokerShowErrorMsgs; RpcTimeLim: SYSINT; - var LoginStr: WideString; out UniqueClientIId: SYSINT; - out ErrorMsg: WideString): ISharedBrokerErrorCode; dispid 1; - function BrokerDisconnect: ISharedBrokerErrorCode; dispid 2; - function BrokerSetContext(const OptionName: WideString): ISharedBrokerErrorCode; dispid 3; - function BrokerCall(const RpcName: WideString; const RpcParams: WideString; - RpcTimeLimit: Integer; out RpcResults: WideString; - out UniqueRpcCallId: Integer): ISharedBrokerErrorCode; dispid 4; - function ReadRegDataDefault(Root: IRegistryRootEnum; const Key: WideString; - const Name: WideString; const Default: WideString; - out RegResult: WideString): ISharedBrokerErrorCode; dispid 5; - property RpcVersion: WideString dispid 7; - property RpcHistoryEnabled: WordBool dispid 6; - property PerClientRpcHistoryLimit: Integer dispid 8; - function GetRpcHistoryCountForClient(UniqueClientId: Integer; out rpcHistoryCount: Integer): ISharedBrokerErrorCode; dispid 10; - function GetClientIdAndNameFromIndex(clientIndex: Integer; out UniqueClientId: Integer; - out ClientName: WideString): ISharedBrokerErrorCode; dispid 11; - function LogoutConnectedClients(logoutTimeLimit: Integer): ISharedBrokerErrorCode; dispid 12; - function GetClientNameFromUniqueClientId(UniqueClientId: Integer; out ClientName: WideString): ISharedBrokerErrorCode; dispid 13; - function GetActiveBrokerConnectionIndexCount(out connectionIndexCount: Integer): ISharedBrokerErrorCode; dispid 14; - function GetActiveBrokerConnectionInfo(connectionIndex: Integer; - out connectedServerIp: WideString; - out connectedServerPort: Integer; - out lastContext: WideString): ISharedBrokerErrorCode; dispid 15; - function GetActiveBrokerConnectionIndexFromUniqueClientId(UniqueClientId: Integer; - out connectionIndex: Integer): ISharedBrokerErrorCode; dispid 16; - function GetRpcCallFromHistory(uniqueRpcId: Integer; out UniqueClientId: Integer; - out brokerContext: WideString; out RpcName: WideString; - out RpcParams: WideString; out rpcResult: WideString; - out rpcStartDateTime: Double; out rpcDuration: Integer): ISharedBrokerErrorCode; dispid 17; - function GetRpcCallFromHistoryIndex(UniqueClientId: Integer; rpcCallIndex: Integer; - out uniqueRpcId: Integer; out brokerContext: WideString; - out RpcName: WideString; out RpcParams: WideString; - out rpcResult: WideString; out rpcStartDateTime: Double; - out rpcDuration: Integer): ISharedBrokerErrorCode; dispid 18; - function GetRpcClientIdFromHistory(uniqueRpcId: Integer; out UniqueClientId: Integer; - out ClientName: WideString): ISharedBrokerErrorCode; dispid 19; - function GetConnectedClientCount(out connectedClientCount: Integer): ISharedBrokerErrorCode; dispid 20; - property CurrentContext: WideString readonly dispid 9; - property User: WideString readonly dispid 22; - property Login: WideString dispid 23; - property RpcbError: WideString readonly dispid 24; - property Socket: Integer readonly dispid 25; - property KernelLogin: WordBool dispid 26; - property ShowErrorMsgs: ISharedBrokerShowErrorMsgs dispid 27; - end; - -// *********************************************************************// -// DispIntf: ISharedBrokerEvents -// Flags: (4096) Dispatchable -// GUID: {CBEA7167-4F9B-465A-B82E-4CEBDF933C35} -// *********************************************************************// - ISharedBrokerEvents = dispinterface - ['{CBEA7167-4F9B-465A-B82E-4CEBDF933C35}'] - procedure OnLogout; dispid 1; - procedure OnRpcCallRecorded(uniqueRpcId: SYSINT); dispid 2; - procedure OnClientConnect(UniqueClientId: SYSINT; Connection: ISharedBrokerConnection); dispid 3; - procedure OnClientDisconnect(UniqueClientId: SYSINT); dispid 4; - procedure OnContextChanged(connectionIndex: SYSINT; const NewContext: WideString); dispid 5; - procedure OnRPCBFailure(const ErrorText: WideString); dispid 6; - procedure OnLoginError(const ErrorText: WideString); dispid 7; - procedure OnConnectionDropped(ConnectionIndex: SYSINT; const ErrorText: WideString); dispid 8; - end; - -// *********************************************************************// -// The Class CoSharedBroker provides a Create and CreateRemote method to -// create instances of the default interface ISharedBroker exposed by -// the CoClass SharedBroker. The functions are intended to be used by -// clients wishing to automate the CoClass objects exposed by the -// server of this typelibrary. -// *********************************************************************// - CoSharedBroker = class - class function Create: ISharedBroker; - class function CreateRemote(const MachineName: string): ISharedBroker; - end; - -implementation - -uses ComObj; - -class function CoSharedBroker.Create: ISharedBroker; -begin - Result := CreateComObject(CLASS_SharedBroker) as ISharedBroker; -end; - -class function CoSharedBroker.CreateRemote(const MachineName: string): ISharedBroker; -begin - Result := CreateRemoteComObject(MachineName, CLASS_SharedBroker) as ISharedBroker; -end; - -end. diff --git a/BDK32/Source/RpcSLogin.pas b/BDK32/Source/RpcSLogin.pas deleted file mode 100644 index 01788b4..0000000 --- a/BDK32/Source/RpcSLogin.pas +++ /dev/null @@ -1,295 +0,0 @@ -{ ************************************************************** - Package: XWB - Kernel RPCBroker - Date Created: Sept 18, 1997 (Version 1.1) - Site Name: Oakland, OI Field Office, Dept of Veteran Affairs - Developers: Danila Manapsal, Joel Ivey - Description: Silent Login functionality. - Current Release: Version 1.1 Patch 40 (January 7, 2005)) -*************************************************************** } - -unit RpcSLogin; - -interface - -Uses -Sysutils, Classes, Messages, WinProcs, IniFiles, -Dialogs, Registry, -trpcb, ccowrpcbroker; - - -{------ TVistaSession------} //hold attributes of a session {p13} -{TVistaSession = class(TObject) -private - FServerIPAddress: string; - FDateTimeLogin: String; - FPollingInterval: integer; -public - property ServerIPAddresss: String; - property DateTimeLogin: String; - property PollingInterval (BAT): integer; - procedure CreateHandle; - function ValidateHandle; -end; } - -function SilentLogIn(SLBroker: TRPCBroker): boolean; -procedure GetUserInfo(ConnectedBroker: TRPCBroker); -procedure GetSessionInfo(ConnectedBroker: TRPCBroker); -procedure StartProgSLogin(const ProgLine: String; ConnectedBroker: TRPCBroker); -function CheckCmdLine(SLBroker: TRPCBroker): Boolean; - -implementation - -uses wsockc, loginfrm, rpcberr, seldiv, hash; - -//validate a/v codes -function ValidAVCodes(SLBroker: TRPCBroker): boolean; -begin - try - with SLBroker do - begin - Param[0].Value := Encrypt(LogIn.AccessCode + ';' + LogIn.VerifyCode); - Param[0].PType := literal; - RemoteProcedure := 'XUS AV CODE'; - Call; - if Results[0] > '0' then - begin - Login.DUZ := Results[0]; - Result := True; - end - else - begin - Result := False; - if Results[2] = '1' then Login.ErrorText := 'Expired Verify Code' //vcode needs changing; - else if Results[0] = '0' then Login.ErrorText :='Invalid Access/Verify Codes' //no valid DUZ returned; - else Login.ErrorText := Results[3]; - end; - end; - except - raise - end; -end; - -//validate application Handle -function ValidAppHandle(SLBroker: TRPCBroker): boolean; -begin - Result := False; - try - with SLBroker do - begin - Param[0].Value := SLBroker.Login.LogInHandle; - Param[0].PType := literal; - RemoteProcedure := 'XUS AV CODE'; - Call; - if StrToInt(SLBroker.Results[0]) > 0 then - begin - Login.DUZ := Results[0]; - Result := True; - end - else if Results[2] = '1' then Login.ErrorText := 'Expired Verify Code' //vcode needs changing; - else if Results[0] = '0' then Login.ErrorText :='Invalid Access/Verify Codes' //no valid DUZ returned; - else Login.ErrorText := Results[3]; - end; - except - raise - end; -end; - -function ValidNTToken(SLBroker: TRPCBroker): boolean; -begin - Result := False; -end; - -{IF 2, PASS CONTROL TO AUTHENTICATION PROXY - WHAT DOES IT NEED? } - -{: -This function is used to initiate a silent login with the RPCBroker. It uses the information -stored in the Login property of the TRPCBroker to make the connection. -} -function SilentLogIn(SLBroker: TRPCBroker): boolean; -begin - Result := False; - //determine if signon is needed - try - with SLBroker do begin - RemoteProcedure := 'XUS SIGNON SETUP'; - Call; - SLBroker.Login.IsProductionAccount := False; - SLBroker.Login.DomainName := ''; - if SLBroker.Results.Count > 7 then - begin - SLBroker.Login.DomainName := SLBroker.Results[6]; - if SLBroker.Results[7] = '1' then - SLBroker.Login.IsProductionAccount := True; - end; - if Results.Count > 5 then //Server sent auto signon info. - if SLBroker.Results[5] = '1' then //User already logged in - begin - Result := True; - GetUserInfo(SLBroker); - exit; - end; - if Login.Mode = lmAVCodes then //Access & Verify codes authentication - if ValidAVCodes(SLBroker) then Result := True; - if Login.Mode = lmAppHandle then - if ValidAppHandle(SLBroker)then Result := True; - if Login.Mode = lmNTToken then - if ValidNTToken(SLBroker) then Result := True; - if Result and (not (SLBroker is TCCOWRPCBroker)) then - begin - //determine if user is multidivisional - makes calls to Seldiv. - LogIn.MultiDivision := MultDiv(SLBroker); - if not LogIn.MultiDivision then - begin - Result := True; - exit; - end; - if LogIn.PromptDivision then - Result := SelectDivision(LogIn.DivList, SLBroker) - else if Login.Division <> '' then - Result := SetDiv(Login.Division, SLBroker) - else - begin - Result := False; - Login.ErrorText := 'No Division Selected'; - end; - if not Result then - exit; - end; - if Result then - GetUserInfo(SLBroker); - end; - except - exit; - end; -end; - -procedure GetUserInfo(ConnectedBroker: TRPCBroker); //get info for TVistaUser; -begin - with ConnectedBroker do - begin - try - RemoteProcedure := 'XUS GET USER INFO'; - Call; - if Results.Count > 0 then - with ConnectedBroker.User do - begin - DUZ := Results[0]; - Name := Results[1]; - StandardName := Results[2]; - Division := Results[3]; - Title := Results[4]; - ServiceSection := Results[5]; - Language := Results[6]; - DTime := Results[7]; - if Results.Count > 8 then - Vpid := Results[8] - else - Vpid := ''; - end; - except - end; - end; -end; - -procedure GetSessionInfo(ConnectedBroker: TRPCBroker); //get info for TVistaSession; -begin - with ConnectedBroker do //get info for TVistaSession; - begin - try - RemoteProcedure := 'XWB GET SESSION INFO'; - Call; - if Results.Count > 0 then - begin - {VistaSession.Create; - with VistaSession do - begin - DUZ := Results[0] - //other properties follow - end;} - end; - except - end; - end; -end; - -{: -This procedure can be used to start a second application and pass on the command line the data -which would be needed to initiate a silent login using a LoginHandle value. It is assumed that -the command line would be read using the CheckCmdLine procedure or one similar to it as the form -for the new application was loaded. This procedure can also be used to start a non-RPCBroker -application. If the value for ConnectedBroker is nil, the application specified in ProgLine -will be started and any command line included in ProgLine will be passed to the application. -} -procedure StartProgSLogin(const ProgLine: String; ConnectedBroker: TRPCBroker); -var - StartupInfo: TStartupInfo; - ProcessInfo: TProcessInformation; - AppHandle: String; - CmndLine: String; -begin - FillChar(StartupInfo, SizeOf(TStartupInfo), 0); - with StartupInfo do - begin - cb := SizeOf(TStartupInfo); - dwFlags := STARTF_USESHOWWINDOW; - wShowWindow := SW_SHOWNORMAL; - end; - CmndLine := ProgLine; - if ConnectedBroker <> nil then - begin - AppHandle := GetAppHandle(ConnectedBroker); - CmndLine := CmndLine + ' s='+ConnectedBroker.Server + ' p=' - + IntToStr(ConnectedBroker.ListenerPort) + ' h=' - + AppHandle + ' d=' + ConnectedBroker.User.Division; - end; - CreateProcess(nil, PChar(CmndLine), nil, nil, False, - NORMAL_PRIORITY_CLASS, nil, nil, StartupInfo, ProcessInfo); -end; - -{: -This procedure can be used to check whether the command line contains information on the broker -settings and can setup for a Silent Login using the LoginHandle value passed from another application. -This procedure would normally be called within the code associated with FormCreate event. It assumes -the Server, ListenerPort, Division, and LoginHandle values (if present) are indicated by s=, p=, d=, and -h=, respectively. The argument is a reference to the TRPCBroker instance to be used. -} -function CheckCmdLine(SLBroker: TRPCBroker): Boolean; -var - j: Integer; -begin - with SLBroker do - begin - for j := 1 to ParamCount do // Iterate through possible command line arguments - begin - if Pos('p=',ParamStr(j)) > 0 then - ListenerPort := StrToInt(Copy(ParamStr(j), - (Pos('=',ParamStr(j))+1),length(ParamStr(j)))); - if Pos('s=',ParamStr(j)) > 0 then - Server := Copy(ParamStr(j), - (Pos('=',ParamStr(j))+1),length(ParamStr(j))); - if Pos('h=',ParamStr(j)) > 0 then - begin - Login.LoginHandle := Copy(ParamStr(j), - (Pos('=',ParamStr(j))+1),length(ParamStr(j))); - if Login.LoginHandle <> '' then - begin - KernelLogin := False; - Login.Mode := lmAppHandle; - end; - end; - if Pos('d=',ParamStr(j)) > 0 then - Login.Division := Copy(ParamStr(j), - (Pos('=',ParamStr(j))+1),length(ParamStr(j))); - end; // for - if Login.Mode = lmAppHandle then - Connected := True; // Go ahead and make the connection - Result := False; - if Connected then - Result := True; - end; // with SLBroker -end; - - -end. - - diff --git a/BDK32/Source/RpcbErr.dfm b/BDK32/Source/RpcbErr.dfm deleted file mode 100644 index 0706abe..0000000 --- a/BDK32/Source/RpcbErr.dfm +++ /dev/null @@ -1,89 +0,0 @@ -object frmRpcbError: TfrmRpcbError - Left = 187 - Top = 278 - BorderStyle = bsDialog - Caption = 'Error!' - ClientHeight = 227 - ClientWidth = 393 - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'MS Sans Serif' - Font.Style = [fsBold] - OldCreateOrder = True - Position = poScreenCenter - OnCreate = FormCreate - PixelsPerInch = 96 - TextHeight = 13 - object Bevel1: TBevel - Left = 8 - Top = 8 - Width = 377 - Height = 177 - end - object Label1: TLabel - Left = 72 - Top = 24 - Width = 41 - Height = 13 - Alignment = taRightJustify - Caption = 'Action:' - end - object Symbol: TImage - Left = 16 - Top = 16 - Width = 41 - Height = 41 - end - object Label2: TLabel - Left = 79 - Top = 48 - Width = 34 - Height = 13 - Alignment = taRightJustify - Caption = 'Code:' - end - object Label3: TLabel - Left = 16 - Top = 80 - Width = 55 - Height = 13 - Caption = 'Message:' - end - object lblAction: TLabel - Left = 120 - Top = 24 - Width = 5 - Height = 13 - end - object lblCode: TLabel - Left = 120 - Top = 48 - Width = 5 - Height = 13 - end - object lblMessage: TLabel - Left = 80 - Top = 80 - Width = 289 - Height = 97 - AutoSize = False - end - object BitBtn1: TBitBtn - Left = 200 - Top = 200 - Width = 81 - Height = 27 - TabOrder = 0 - Kind = bkOK - end - object BitBtn3: TBitBtn - Left = 304 - Top = 200 - Width = 81 - Height = 27 - TabOrder = 1 - Kind = bkHelp - end -end diff --git a/BDK32/Source/RpcbErr.pas b/BDK32/Source/RpcbErr.pas deleted file mode 100644 index 9ffe38d..0000000 --- a/BDK32/Source/RpcbErr.pas +++ /dev/null @@ -1,186 +0,0 @@ -{ ************************************************************** - Package: XWB - Kernel RPCBroker - Date Created: Sept 18, 1997 (Version 1.1) - Site Name: Oakland, OI Field Office, Dept of Veteran Affairs - Developers: Danila Manapsal, Don Craven, Joel Ivey - Description: Error handling for TRPCBroker. - Current Release: Version 1.1 Patch 40 (January 7, 2005)) -*************************************************************** } - -unit Rpcberr; - -interface - -uses - TRPCB, Winsock, Classes, Forms, SysUtils, Controls, - StdCtrls, Buttons, ExtCtrls, Graphics, WinProcs; - -type - TfrmRpcbError = class(TForm) - BitBtn1: TBitBtn; - BitBtn3: TBitBtn; - Label1: TLabel; - Bevel1: TBevel; - Symbol: TImage; - Label2: TLabel; - Label3: TLabel; - lblAction: TLabel; - lblCode: TLabel; - lblMessage: TLabel; - procedure FormCreate(Sender: TObject); - end; - -var - frmRpcbError: TfrmRpcbError; - -procedure ShowBrokerError(BrokerError: EBrokerError); -procedure NetError(Action: string; ErrType: integer); - -const - XWBBASEERR = {WSABASEERR + 1} 20000; - - {Broker Application Error Constants} - XWB_NO_HEAP = XWBBASEERR + 1; - XWB_M_REJECT = XWBBASEERR + 2; - XWB_BadSignOn = XWBBASEERR + 4; - XWB_BldConnectList = XWBBASEERR + 5; - XWB_NullRpcVer = XWBBASEERR + 6; - XWB_ExeNoMem = XWBBASEERR + 100; - XWB_ExeNoFile = XWB_ExeNoMem + 2; - XWB_ExeNoPath = XWB_ExeNoMem + 3; - XWB_ExeShare = XWB_ExeNoMem + 5; - XWB_ExeSepSeg = XWB_ExeNoMem + 6; - XWB_ExeLoMem = XWB_ExeNoMem + 8; - XWB_ExeWinVer = XWB_ExeNoMem + 10; - XWB_ExeBadExe = XWB_ExeNoMem + 11; - XWB_ExeDifOS = XWB_ExeNoMem + 12; - XWB_RpcNotReg = XWBBASEERR + 201; -implementation -uses wsockc; -{$R *.DFM} - - -procedure ShowBrokerError(BrokerError: EBrokerError); -begin - try - Application.CreateForm(TfrmRpcbError, frmRpcbError); - with frmRpcbError do begin - lblAction.Caption := BrokerError.Action; - lblCode.Caption := IntToStr(BrokerError.Code); - lblMessage.Caption := BrokerError.Mnemonic; - ShowModal; - end - finally - frmRpcbError.Release; - end; -end; - - -procedure TfrmRpcbError.FormCreate(Sender: TObject); -var - FIcon: TIcon; -begin - FIcon := TIcon.Create; - try - FIcon.Handle := LoadIcon(0, IDI_HAND); - Symbol.Picture.Graphic := FIcon; - Symbol.BoundsRect := Bounds(Symbol.Left, Symbol.Top, FIcon.Width, FIcon.Height); - finally - FIcon.Free; - end; -end; - -procedure NetError(Action : String; ErrType: integer); -var - x,s: string; - r: integer; - BrokerError: EBrokerError; -begin - Screen.Cursor := crDefault; - r := 0; - if ErrType > 0 then r := ErrType; - if ErrType = 0 then - begin - r := WSAGetLastError; -// if r = WSAEINTR then xFlush := True; -// if WSAIsBlocking = True then WSACancelBlockingCall; - end; - Case r of - WSAEINTR : x := 'WSAEINTR'; - WSAEBADF : x := 'WSAEINTR'; - WSAEFAULT : x := 'WSAEFAULT'; - WSAEINVAL : x := 'WSAEINVAL'; - WSAEMFILE : x := 'WSAEMFILE'; - WSAEWOULDBLOCK : x := 'WSAEWOULDBLOCK'; - WSAEINPROGRESS : x := 'WSAEINPROGRESS'; - WSAEALREADY : x := 'WSAEALREADY'; - WSAENOTSOCK : x := 'WSAENOTSOCK'; - WSAEDESTADDRREQ : x := 'WSAEDESTADDRREQ'; - WSAEMSGSIZE : x := 'WSAEMSGSIZE'; - WSAEPROTOTYPE : x := 'WSAEPROTOTYPE'; - WSAENOPROTOOPT : x := 'WSAENOPROTOOPT'; - WSAEPROTONOSUPPORT : x := 'WSAEPROTONOSUPPORT'; - WSAESOCKTNOSUPPORT : x := 'WSAESOCKTNOSUPPORT'; - WSAEOPNOTSUPP : x := 'WSAEOPNOTSUPP'; - WSAEPFNOSUPPORT : x := 'WSAEPFNOSUPPORT'; - WSAEAFNOSUPPORT : x := 'WSAEAFNOSUPPORT'; - WSAEADDRINUSE : x := 'WSAEADDRINUSE'; - WSAEADDRNOTAVAIL : x := 'WSAEADDRNOTAVAIL'; - WSAENETDOWN : x := 'WSAENETDOWN'; - WSAENETUNREACH : x := 'WSAENETUNREACH'; - WSAENETRESET : x := 'WSAENETRESET'; - WSAECONNABORTED : x := 'WSAECONNABORTED'; - WSAECONNRESET : x := 'WSAECONNRESET'; - WSAENOBUFS : x := 'WSAENOBUFS'; - WSAEISCONN : x := 'WSAEISCONN'; - WSAENOTCONN : x := 'WSAENOTCONN'; - WSAESHUTDOWN : x := 'WSAESHUTDOWN'; - WSAETOOMANYREFS : x := 'WSAETOOMANYREFS'; - WSAETIMEDOUT : x := 'WSAETIMEDOUT'; - WSAECONNREFUSED : x := 'WSAECONNREFUSED'; - WSAELOOP : x := 'WSAELOOP'; - WSAENAMETOOLONG : x := 'WSAENAMETOOLONG'; - WSAEHOSTDOWN : x := 'WSAEHOSTDOWN'; - WSAEHOSTUNREACH : x := 'WSAEHOSTUNREACH'; - WSAENOTEMPTY : x := 'WSAENOTEMPTY'; - WSAEPROCLIM : x := 'WSAEPROCLIM'; - WSAEUSERS : x := 'WSAEUSERS'; - WSAEDQUOT : x := 'WSAEDQUOT'; - WSAESTALE : x := 'WSAESTALE'; - WSAEREMOTE : x := 'WSAEREMOTE'; - WSASYSNOTREADY : x := 'WSASYSNOTREADY'; - WSAVERNOTSUPPORTED : x := 'WSAVERNOTSUPPORTED'; - WSANOTINITIALISED : x := 'WSANOTINITIALISED'; - WSAHOST_NOT_FOUND : x := 'WSAHOST_NOT_FOUND'; - WSATRY_AGAIN : x := 'WSATRY_AGAIN'; - WSANO_RECOVERY : x := 'WSANO_RECOVERY'; - WSANO_DATA : x := 'WSANO_DATA'; - - XWB_NO_HEAP : x := 'Insufficient Heap'; - XWB_M_REJECT : x := 'M Error - Use ^XTER'; - XWB_BadSignOn : x := 'Sign-on was not completed.'; - XWB_ExeNoMem : x := 'System was out of memory, executable file was corrupt, or relocations were invalid.'; - XWB_ExeNoFile : x := 'File was not found.'; - XWB_ExeNoPath : x := 'Path was not found.'; - XWB_ExeShare : x := 'Attempt was made to dynamically link to a task,' + - ' or there was a sharing or network-protection error.'; - XWB_ExeSepSeg : x := 'Library required separate data segments for each task.'; - XWB_ExeLoMem : x := 'There was insufficient memory to start the application.'; - XWB_ExeWinVer : x := 'Windows version was incorrect.'; - XWB_ExeBadExe : x := 'Executable file was invalid.' + - ' Either it was not a Windows application or there was an error in the .EXE image.'; - XWB_ExeDifOS : x := 'Application was designed for a different operating system.'; - XWB_RpcNotReg : X := 'Remote procedure not registered to application.'; - XWB_BldConnectList : x := 'BrokerConnections list could not be created'; - XWB_NullRpcVer : x := 'RpcVersion cannot be empty.' + #13 + 'Default is 0 (zero).'; - else x := IntToStr(r); - end; - s := 'Error encountered.' + chr(13)+chr(10) + 'Function was: ' + Action + chr(13)+chr(10) + 'Error was: ' + x; - BrokerError := EBrokerError.Create(s); - BrokerError.Action := Action; - BrokerError.Code := r; - BrokerError.Mnemonic := x; - raise BrokerError; -end; - -end. diff --git a/BDK32/Source/Rpcbedtr.pas b/BDK32/Source/Rpcbedtr.pas deleted file mode 100644 index 8725de3..0000000 --- a/BDK32/Source/Rpcbedtr.pas +++ /dev/null @@ -1,177 +0,0 @@ -{ ************************************************************** - Package: XWB - Kernel RPCBroker - Date Created: Sept 18, 1997 (Version 1.1) - Site Name: Oakland, OI Field Office, Dept of Veteran Affairs - Developers: Danila Manapsal, Don Craven, Joel Ivey - Description: Property Editors for TRPCBroker component. - Current Release: Version 1.1 Patch 40 (January 7, 2005)) -*************************************************************** } - -unit RpcbEdtr; - -{$I IISBase.inc} - -interface - -uses - {Delphi standard} - Classes, Controls, Dialogs, - {$IFDEF D6_OR_HIGHER} - DesignIntf, DesignEditors, DesignMenus, - {$ELSE} - DsgnIntf, - {$ENDIF} - Forms, Graphics, Messages, SysUtils, - WinProcs, WinTypes, - Trpcb; //P14 -- pack split - - -type - -{------ TRemoteProc property editor ------} - {This property editor gets a list of remote procedures from the API file.} - -TRemoteProcProperty = class(TStringProperty) -private - { Private declarations } -protected - { Protected declarations } -public - { Public declarations } - function GetAttributes: TPropertyAttributes; override; - procedure GetValues(Proc: TGetStrProc); override; - procedure SetValue(const Value: string); override; -end; - - -{------ TServerProperty property editor ------} - {This property editor gets a list of servers from the C:\WINDOWS\HOSTS file} - -TServerProperty = class(TStringProperty) -private - { Private declarations } -protected - { Protected declarations } -public - { Public declarations } - function GetAttributes: TPropertyAttributes; override; - procedure GetValues(Proc: TGetStrProc); override; - function GetValue: string; override; - procedure SetValue(const Value: string); override; -end; - - -{------ TRpcVersion property editor ------} - {This property editor checks to make sure that RpcVersion is not eimpty. - If it is, it stuffs '0' (default).} - -TRpcVersionProperty = class(TStringProperty) -private - { Private declarations } -protected - { Protected declarations } -public - { Public declarations } - procedure SetValue(const Value: string); override; -end; - - -procedure Register; - - -implementation - - -uses - XWBut1, MFunStr, {TRPCB,} Hash, RpcbErr; //P14 -- pack split - -function TRemoteProcProperty.GetAttributes; -begin - Result := [paAutoUpdate,paValueList]; -end; - -procedure TRemoteProcProperty.GetValues(Proc: TGetStrProc); -var - RpcbEdited, RPCBTemp: TRPCBroker; - I: integer; -begin - RPCBTemp := nil; - RpcbEdited := GetComponent(0) as TRPCBroker; - try - RPCBTemp := TRPCBroker.Create(RpcbEdited); - with RpcbTemp do begin - ShowErrorMsgs := RpcbEdited.ShowErrorMsgs; - Server := RpcbEdited.Server; - ListenerPort := RpcbEdited.ListenerPort; - ClearParameters := True; - ClearResults := True; - RemoteProcedure := 'XWB RPC LIST'; - Param[0].Value := GetValue; - Param[0].PType := literal; - Call; - for I := 0 to Results.Count - 1 do Proc(Results[I]); - end; - finally - RPCBTemp.Free; - end; -end; - -procedure TRemoteProcProperty.SetValue(const Value: string); -begin - SetStrValue(UpperCase(Piece(Value,' [',1))); {convert user entry all to upper case} -end; - -function TServerProperty.GetAttributes; -begin - Result := [paAutoUpdate,paValueList]; -end; - -function TServerProperty.GetValue: string; -begin - Result := Piece(GetStrValue,' [',1); {get just the name} -end; - -procedure TServerProperty.GetValues(Proc: TGetStrProc); -var - ServerList: TStringList; - I: integer; -begin - ServerList := TStringList.Create; - GetHostList(ServerList); - for I := 0 to ServerList.Count - 1 do Proc(ServerList[I]); - ServerList.Free; -end; - -procedure TServerProperty.SetValue(const Value: string); -begin - SetStrValue(Piece(Value,' [',1)); {get just the name} -end; - -procedure TRpcVersionProperty.SetValue(const Value: string); -begin -{ - try - if Value = '' then NetError('Configure',XWB_NullRpcVer) - else SetStrValue(Value); - except - on E: EBrokerError do begin - ShowBrokerError(E); - SetStrValue('0'); - end; - end; -} - if Value <> '' then SetStrValue(Value) - else begin - ShowMessage('RPCVersion cannot be empty. Default is 0 (zero).'); - SetStrValue('0'); - end; -end; - -procedure Register; -begin - RegisterPropertyEditor(TypeInfo(TRemoteProc),nil,'',TRemoteProcProperty); - RegisterPropertyEditor(TypeInfo(TServer),nil,'',TServerProperty); - RegisterPropertyEditor(TypeInfo(TRpcVersion),nil,'',TRpcVersionProperty); -end; - -end. diff --git a/BDK32/Source/Rpcconf1.dfm b/BDK32/Source/Rpcconf1.dfm deleted file mode 100644 index 1fd3201..0000000 --- a/BDK32/Source/Rpcconf1.dfm +++ /dev/null @@ -1,233 +0,0 @@ -object rpcConfig: TrpcConfig - Left = 434 - Top = 329 - HelpContext = 4 - BorderIcons = [] - BorderStyle = bsSingle - Caption = 'Connect To' - ClientHeight = 157 - ClientWidth = 397 - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -13 - Font.Name = 'System' - Font.Style = [] - OldCreateOrder = True - Position = poScreenCenter - OnClose = FormClose - OnCreate = FormCreate - PixelsPerInch = 96 - TextHeight = 16 - object cboServer: TComboBox - Left = 8 - Top = 16 - Width = 385 - Height = 24 - Hint = 'Choose a Server Name' - Style = csDropDownList - Anchors = [akLeft, akTop, akRight] - DropDownCount = 6 - ItemHeight = 16 - ParentShowHint = False - ShowHint = True - TabOrder = 0 - OnClick = cboServerClick - OnDblClick = cboServerClick - OnExit = cboServerExit - end - object Panel2: TPanel - Left = 0 - Top = 133 - Width = 397 - Height = 24 - Align = alBottom - TabOrder = 3 - object Panel3: TPanel - Left = 185 - Top = 1 - Width = 95 - Height = 22 - Align = alLeft - Alignment = taLeftJustify - BevelInner = bvLowered - BevelOuter = bvNone - BorderWidth = 1 - Caption = 'Port:' - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -15 - Font.Name = 'MS Sans Serif' - Font.Style = [] - ParentFont = False - TabOrder = 0 - object pnlPort: TPanel - Left = 34 - Top = 2 - Width = 59 - Height = 18 - Align = alRight - BevelOuter = bvLowered - Caption = '99999' - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -15 - Font.Name = 'MS Sans Serif' - Font.Style = [fsBold] - ParentFont = False - TabOrder = 0 - end - end - object Panel1: TPanel - Left = 1 - Top = 1 - Width = 184 - Height = 22 - Align = alLeft - Alignment = taLeftJustify - BevelInner = bvLowered - BevelOuter = bvNone - BorderWidth = 1 - Caption = 'Address:' - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -15 - Font.Name = 'MS Sans Serif' - Font.Style = [] - ParentFont = False - TabOrder = 1 - object Panel4: TPanel - Left = 64 - Top = 2 - Width = 118 - Height = 18 - Align = alRight - BevelOuter = bvLowered - Caption = '255.255.255.255' - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -15 - Font.Name = 'MS Sans Serif' - Font.Style = [fsBold] - ParentFont = False - TabOrder = 0 - end - end - end - object btnOk: TBitBtn - Left = 5 - Top = 104 - Width = 85 - Height = 26 - Anchors = [akLeft, akBottom] - Caption = '&OK' - Default = True - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -13 - Font.Name = 'MS Sans Serif' - Font.Style = [fsBold] - ParentFont = False - TabOrder = 1 - OnClick = butOkClick - Glyph.Data = { - BE060000424DBE06000000000000360400002800000024000000120000000100 - 0800000000008802000000000000000000000001000000010000000000000000 - 80000080000000808000800000008000800080800000C0C0C000C0DCC000F0C8 - A400000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000F0FBFF00A4A0A000808080000000 - FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00030303030303 - 0303030303030303030303030303030303030303030303030303030303030303 - 03030303030303030303030303030303030303030303FF030303030303030303 - 03030303030303040403030303030303030303030303030303F8F8FF03030303 - 03030303030303030303040202040303030303030303030303030303F80303F8 - FF030303030303030303030303040202020204030303030303030303030303F8 - 03030303F8FF0303030303030303030304020202020202040303030303030303 - 0303F8030303030303F8FF030303030303030304020202FA0202020204030303 - 0303030303F8FF0303F8FF030303F8FF03030303030303020202FA03FA020202 - 040303030303030303F8FF03F803F8FF0303F8FF03030303030303FA02FA0303 - 03FA0202020403030303030303F8FFF8030303F8FF0303F8FF03030303030303 - FA0303030303FA0202020403030303030303F80303030303F8FF0303F8FF0303 - 0303030303030303030303FA0202020403030303030303030303030303F8FF03 - 03F8FF03030303030303030303030303FA020202040303030303030303030303 - 0303F8FF0303F8FF03030303030303030303030303FA02020204030303030303 - 03030303030303F8FF0303F8FF03030303030303030303030303FA0202020403 - 030303030303030303030303F8FF0303F8FF03030303030303030303030303FA - 0202040303030303030303030303030303F8FF03F8FF03030303030303030303 - 03030303FA0202030303030303030303030303030303F8FFF803030303030303 - 030303030303030303FA0303030303030303030303030303030303F803030303 - 0303030303030303030303030303030303030303030303030303030303030303 - 0303} - Margin = 2 - NumGlyphs = 2 - Spacing = -1 - IsControl = True - end - object btnCancel: TBitBtn - Left = 109 - Top = 104 - Width = 85 - Height = 26 - Anchors = [akLeft, akBottom] - Caption = '&Cancel' - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -13 - Font.Name = 'MS Sans Serif' - Font.Style = [fsBold] - ParentFont = False - TabOrder = 2 - OnClick = butCancelClick - Kind = bkCancel - Margin = 2 - Spacing = -1 - IsControl = True - end - object btnHelp: TBitBtn - Left = 208 - Top = 104 - Width = 85 - Height = 25 - Anchors = [akRight, akBottom] - TabOrder = 4 - Kind = bkHelp - end - object New: TButton - Left = 304 - Top = 104 - Width = 85 - Height = 25 - Anchors = [akRight, akBottom] - Caption = '&New' - TabOrder = 5 - OnClick = NewClick - end -end diff --git a/BDK32/Source/Rpcconf1.pas b/BDK32/Source/Rpcconf1.pas deleted file mode 100644 index 70d169e..0000000 --- a/BDK32/Source/Rpcconf1.pas +++ /dev/null @@ -1,266 +0,0 @@ -{ ************************************************************** - Package: XWB - Kernel RPCBroker - Date Created: Sept 18, 1997 (Version 1.1) - Site Name: Oakland, OI Field Office, Dept of Veteran Affairs - Developers: Danila Manapsal, Raul Mendoza, Joel Ivey - Description: Server selection dialog. - Current Release: Version 1.1 Patch 40 (January 7, 2005)) -*************************************************************** } - -{************************************************** - p13 - added an OnDestroy event to release the - help file. - REM (4/25/00) -**************************************************} -unit Rpcconf1; - -interface - -uses - SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls, - Forms, Dialogs, StdCtrls, Buttons, ExtCtrls, Xwbut1, - WinSock, rpcnet, MFunStr; - -type - TrpcConfig = class(TForm) - cboServer: TComboBox; - Panel2: TPanel; - Panel3: TPanel; - pnlPort: TPanel; - btnOk: TBitBtn; - btnCancel: TBitBtn; - Panel1: TPanel; - Panel4: TPanel; - btnHelp: TBitBtn; - New: TButton; - procedure cboServerClick(Sender: TObject); - procedure FormClose(Sender: TObject; var Action: TCloseAction); - procedure FormCreate(Sender: TObject); - procedure butOkClick(Sender: TObject); - procedure butCancelClick(Sender: TObject); - procedure FormDestroy(Sender: TObject); - procedure cboServerExit(Sender: TObject); - procedure NewClick(Sender: TObject); - - private - { Private declarations } - OrigHelp : String; //Help filename of calling application. - - public - { Public declarations } - ServerPairs : TStringList; - end; - -function GetServerInfo(var Server,Port: string): integer; -function GetServerIP(ServerName: String): String; - -var - rpcConfig: TrpcConfig; - ButtonStatus, Instance: integer; - rServer, rPort: string; - TaskInstance: integer; - -implementation - -uses AddServer; - -{$R *.DFM} - - -function IsIPAddress(Val: String): Boolean; -var - I: Integer; - C: Char; -begin - Result := True; - for I := 1 to Length(Val) do // Iterate - begin - C := Val[I]; - if not (C in ['0','1','2','3','4','5','6','7','8','9','.']) then - begin - Result := False; - Break; - end; - end; // for -end; - -{: Library function to obtain an IP address, given a server name } -function GetServerIP(ServerName: String): String; -var - host,outcome: PChar; -begin - TaskInstance := LibOpen; - if not IsIPAddress(ServerName) then - begin - outcome := StrAlloc(256); - host := StrAlloc(length(ServerName) + 1); - StrPCopy(host, ServerName); - LibGetHostIP1(TaskInstance, host, outcome); - Result := StrPas(outcome); - StrDispose(outcome); - StrDispose(host); - end - else - Result := ServerName; - LibClose(TaskInstance); -end; - - -procedure TrpcConfig.cboServerClick(Sender: TObject); -var - index: integer; -begin - {Based on selction, set port and server variable} - index := cboServer.ItemIndex; - rPort := Piece(ServerPairs[index], ',', 2); - pnlPort.Caption := rPort; - rServer := Piece(ServerPairs[index], ',', 1); - btnOk.Enabled := True; - - {Based on Server, get IP addresss.} - Panel4.Caption := GetServerIP(rServer); -end; - -procedure TrpcConfig.FormCreate(Sender: TObject); -begin - FormStyle := fsStayOnTop; - OrigHelp := Application.HelpFile; // Save original helpfile. - Application.HelpFile := ReadRegData(HKLM, REG_BROKER, 'BrokerDr') + - '\clagent.hlp'; // Identify ConnectTo helpfile. - ServerPairs := TStringList.Create; -end; - -procedure TrpcConfig.FormClose(Sender: TObject; var Action: TCloseAction); -begin - cboServer.Clear; - pnlPort.Caption := ''; - ServerPairs.Free; - Application.HelpFile := OrigHelp; // Restore helpfile. -end; - -function GetServerInfo(var Server,Port: string): integer; -var - index: integer; - //tmp,fname,: string; {P14} - tmpServerPairs : TStringList; //Format: SERVER,port# - TextStr: String; - -begin - rpcconfig := Trpcconfig.Create(Application); - TaskInstance := LibOpen; - - with rpcConfig do - begin - tmpServerPairs := TStringList.Create; - ReadRegValueNames(HKLM, REG_SERVERS, tmpServerPairs); - ServerPairs.Assign(tmpServerPairs); - tmpServerPairs.Clear; - ReadRegValueNames(HKCU, REG_SERVERS, tmpServerPairs); - for index := 0 to (tmpServerPairs.Count-1) do - begin - TextStr := tmpServerPairs[index]; - if ServerPairs.IndexOf(TextStr) < 0 then - ServerPairs.Add(TextStr); - end; - - ButtonStatus := mrOk; - - if ServerPairs.Count < 1 then - begin - WriteRegData(HKLM, REG_SERVERS, 'BROKERSERVER,9200', ''); - ServerPairs.Add('BROKERSERVER,9200'); - end; - - - if ServerPairs.Count > 1 then // P31 //need to show form - begin - //Initialize form. - for index := 0 to (ServerPairs.Count -1) do //Load combobox - cboServer.Items.Add(ServerPairs[index]); -// cboServer.Items.Add(Piece(ServerPairs[index], ',', 1)); - cboServer.ItemIndex := 0; - rServer := Piece(ServerPairs[0], ',', 1); - pnlPort.Caption := Piece(ServerPairs[0], ',', 2); - rPort := Piece(ServerPairs[0], ',', 2); - - //Get and display IP address. - panel4.Caption := GetServerIP(rServer); - ShowModal; //Display form - end - else //One choice: form not shown, value returned. - begin - rServer := Piece(ServerPairs[0], ',', 1); - rPort := Piece(ServerPairs[0], ',', 2); - end; - - if ButtonStatus = mrOk then - begin - Server := rServer; - Port := rPort; - end; - Result := ButtonStatus; - - tmpServerPairs.Free; - libClose(TaskInstance); - Release; - end; -end; - -procedure TrpcConfig.butOkClick(Sender: TObject); -begin - ButtonStatus := mrOk; - rServer := Piece(cboServer.Text,',',1); - rPort := pnlPort.Caption; - rpcConfig.close; -end; - -procedure TrpcConfig.butCancelClick(Sender: TObject); -begin - ButtonStatus := mrCancel; - rServer := cboServer.Text; - rPort := pnlPort.Caption; - rpcConfig.close; -end; - -procedure TrpcConfig.FormDestroy(Sender: TObject); -begin - ServerPairs := TStringList.Create; // {p13 - REM} - ServerPairs.Free; // Release Help File. - Application.HelpFile := OrigHelp; // -end; - -procedure TrpcConfig.cboServerExit(Sender: TObject); -begin - // -end; - -procedure TrpcConfig.NewClick(Sender: TObject); -var - I: Integer; - ServerForm: TfrmAddServer; - strServer, strName, strPort: String; -begin - ServerForm := TfrmAddServer.Create(Self); - if ServerForm.ShowModal <> mrCancel then - begin - strServer := ServerForm.edtAddress.Text; - strPort := ServerForm.edtPortNumber.Text; - ServerForm.edtPortNumber.Text := strPort; - strName := strServer + ',' + strPort; - WriteRegData(HKCU, REG_SERVERS, strName, ''); - ServerPairs.Add(strName); - strName := ServerPairs[ServerPairs.Count-1]; - cboServer.Items.Add(strName); - for I := 0 to cboServer.Items.Count-1 do // Iterate - begin - if cboServer.Items[I] = strName then - cboServer.ItemIndex := I; - end; // for -// cboServer.Text := strServer; -// pnlPort.Caption := strPort; - cboServerClick(Self); - end; - ServerForm.Free; -end; - -end. - diff --git a/BDK32/Source/Rpcnet.ddp b/BDK32/Source/Rpcnet.ddp deleted file mode 100644 index 4370276..0000000 Binary files a/BDK32/Source/Rpcnet.ddp and /dev/null differ diff --git a/BDK32/Source/Rpcnet.dfm b/BDK32/Source/Rpcnet.dfm deleted file mode 100644 index 23de80a..0000000 --- a/BDK32/Source/Rpcnet.dfm +++ /dev/null @@ -1,17 +0,0 @@ -object RPCFRM1: TRPCFRM1 - Left = 447 - Top = 304 - BorderStyle = bsNone - Caption = 'DLL' - ClientHeight = 101 - ClientWidth = 239 - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -13 - Font.Name = 'System' - Font.Style = [] - OldCreateOrder = True - PixelsPerInch = 96 - TextHeight = 16 -end diff --git a/BDK32/Source/Rpcnet.pas b/BDK32/Source/Rpcnet.pas deleted file mode 100644 index 92eddd5..0000000 --- a/BDK32/Source/Rpcnet.pas +++ /dev/null @@ -1,435 +0,0 @@ -{ ************************************************************** - Package: XWB - Kernel RPCBroker - Date Created: Sept 18, 1997 (Version 1.1) - Site Name: Oakland, OI Field Office, Dept of Veteran Affairs - Developers: Danila Manapsal, Don Craven, Joel Ivey - Description: winsock utilities. - Current Release: Version 1.1 Patch 40 (January 7, 2005)) -*************************************************************** } - - -unit RpcNet ; -{ - Changes in v1.1.13 (JLI -- 8/23/00) -- XWB*1.1*13 - Made changes to cursor dependent on current cursor being crDefault so - that the application can set it to a different cursor for long or - repeated processes without the cursor 'flashing' repeatedly. -} -interface - -uses - SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls, - Forms, Dialogs, winsock; - -Const XWB_GHIP = WM_USER + 10000; -//Const XWB_SELECT = WM_USER + 10001; - -Const WINSOCK1_1 = $0101; -Const PF_INET = 2; -Const SOCK_STREAM = 1; -Const IPPROTO_TCP = 6; -Const INVALID_SOCKET = -1; -Const SOCKET_ERROR = -1; -Const FIONREAD = $4004667F; -Const ActiveConnection: boolean = False; - -type EchatError = class(Exception); - -type - TRPCFRM1 = class(TForm) - private - { Private declarations } - public - { Public declarations } - procedure XWBGHIP(var msgSock: TMessage); - //procedure xwbSelect(var msgSock: TMessage); //P14 - procedure WndProc(var Message : TMessage); reintroduce; //P14 -end; - -type - WinTaskRec = record - InUse: boolean; - pTCPResult: Pointer; - strTemp: string; {generic output string for async calls} - chrTemp: PChar; {generic out PChar for async calls} - hTCP: THandle; {pseudo handle for async calls} - hWin: hWnd; {handle for owner window} - CallWait: boolean; - CallAbort: boolean; - RPCFRM1: TRPCFRM1; - end; - -var - WRec: array[1..128] of WinTaskRec; - Hash: array[0..159] of char; - -{Windows OS abstraction functions. Should be taken over by VA Kernel} - -function libGetCurrentProcess: word; - -{Socket functions using library RPCLIB.DLL, in this case called locally} - -//function libAbortCall(inst: integer): integer; export; //P14 -function libGetHostIP1(inst: integer; HostName: PChar; - var outcome: PChar): integer; export; -function libGetLocalIP(inst: integer; var outcome: PChar): integer; export; -procedure libClose(inst: integer); export; -function libOpen:integer; export; - -function GetTCPError:string; - -{Secure Hash Algorithm functions, library SHA.DLL and local interfaces} - -function libGetLocalModule: PChar; export; -function GetFileHash(fn: PChar): longint; export; - -implementation - -uses rpcconf1; - -{function shsTest: integer; far; external 'SHA'; -procedure shsHash(plain: PChar; size: integer; - Hash: PChar); far; external 'SHA';} //Removed in P14 - -{$R *.DFM} - - - -function libGetCurrentProcess: word; -begin - Result := GetCurrentProcess; -end; - -function libGetLocalIP(inst: integer; var outcome: PChar): integer; -var - local: PChar; -begin - local := StrAlloc(255); - gethostname( local, 255); - Result := libGetHostIP1(inst, local, outcome); - StrDispose(local); -end; - -function libGetLocalModule: PChar; -var - tsk: THandle; - name: PChar; -begin - tsk := GetCurrentProcess; - name := StrAlloc(1024); - GetModuleFilename(tsk, name, 1024); - Result := name; - -end; - -function GetFileHash(fn: PChar): longint; -var - hFn: integer; - finfo: TOFSTRUCT; - bytesRead, status: longint; - tBuf: PChar; - -begin - tBuf := StrAlloc(160); - hFn := OpenFile(fn, finfo, OF_READ); - bytesRead := 0; - status := _lread(hFn, tBuf, sizeof(tBuf)); - while status <> 0 do - begin - status := _lread(hFn, tBuf, sizeof(tBuf)); - inc(bytesRead,status); - end; - _lclose(hFn); - StrDispose(tBuf); - Result := bytesRead; -end; - -function libOpen:integer; -var - inst: integer; - WSData: TWSADATA; - RPCFRM1: TRPCFRM1; -begin - inst := 1; {in this case, no DLL so instance is always 1} - RPCFRM1 := TRPCFRM1.Create(nil); //P14 - with WRec[inst] do - begin - hWin := AllocateHWnd(RPCFRM1.wndproc); - - WSAStartUp(WINSOCK1_1, WSData); - WSAUnhookBlockingHook; - - Result := inst; - InUse := True; - end; - RPCFRM1.Release; //P14 -end; - -procedure libClose(inst: integer); -begin - - with WRec[inst] do - begin - InUse := False; - WSACleanup; - DeallocateHWnd(hWin); - end; -end; - -function libGetHostIP1(inst: integer; HostName: PChar; - var outcome: PChar): integer; -var - //RPCFRM1: TRPCFRM1; {P14} - //wMsg: TMSG; {P14} - //hWnd: THandle; {P14} - ChangeCursor: Boolean; - -begin - - outcome[0] := #0; - - if Screen.Cursor = crDefault then - ChangeCursor := True - else - ChangeCursor := False; - if ChangeCursor then - Screen.Cursor := crHourGlass; - - with WRec[inst] do - begin - - if HostName[0] = #0 then - begin - StrCat(outcome,'No Name to Resolve!'); - Result := -1; - exit; - end; - - if CallWait = True then - begin - outcome[0] := #0; - StrCat(outcome, 'Call in Progress'); - Result := -1; - exit; - end; - - if inet_addr(HostName) > INADDR_ANY then - begin - outcome := Hostname; - Result := 0; - if ChangeCursor then - Screen.Cursor := crDefault; - WSACleanup; - exit; - end; - - GetMem(pTCPResult, MAXGETHOSTSTRUCT+1); - try - begin - CallWait := True; - CallAbort := False; - PHostEnt(pTCPResult)^.h_name := nil; - hTCP := WSAAsyncGetHostByName(hWin, XWB_GHIP, HostName, - pTCPResult, MAXGETHOSTSTRUCT ); - { loop while CallWait is True } - CallAbort := False; - while CallWait = True do - Application.ProcessMessages; - end; - except on EInValidPointer do - begin - StrCat(outcome,'Error in GetHostByName'); - if ChangeCursor then - Screen.Cursor := crDefault; - end; - - end; - - FreeMem(pTCPResult, MAXGETHOSTSTRUCT+1); - StrCopy(outcome,chrTemp); - Result := 0; - if ChangeCursor then - Screen.Cursor := crDefault; - end; - end; - -(*procedure TRPCFRM1.XWBSELECT(var msgSock: TMessage); -var - noop: integer; -begin - case msgSock.lparam of - FD_ACCEPT: {connection arrived} - begin - noop := 1; - end; - FD_CONNECT: {connection initiated} - begin - noop := 1; - end; - FD_READ: {data received, put in display} - begin - noop := 1; - end; - FD_CLOSE: {disconnection of accepted socket} - begin - noop := 1; - end; - else - noop := 1; - end; -end;*) //Procedure removed in P14. - -procedure TRPCFRM1.WndProc(var Message : TMessage); -begin - with Message do - case Msg of - {XWB_SELECT : xwbSelect(Message);} //P14 - XWB_GHIP: xwbghip(Message); - else - DefWindowProc(WRec[1].hWin, Msg, wParam, lParam); - {Inherited WndProc(Message);} - end; -end; - -procedure TRPCFRM1.XWBGHIP(var msgSock: TMessage); -var - TCPResult: PHostEnt; - WSAError: integer; - HostAddr: TSockaddr; - inst: integer; - -begin - inst := 1; {local case is always 1} - - - with WRec[inst] do - begin - - hTCP := msgSock.WParam; - - chrTemp := StrAlloc(512); - - CallWait := False; - If CallAbort = True then { User aborted call } - begin - StrCopy(ChrTemp,'Abort!'); - exit; - end; - - WSAError := WSAGetAsyncError(hTCP); { in case async call failed } - If WSAError < 0 then - begin - StrPCopy(chrTemp,IntToStr(WSAError)); - exit; - end; - - try - begin - TCPResult := PHostEnt(pTCPResult); - StrTemp := ''; - if TCPResult^.h_name = nil then - begin - StrCopy(chrTemp, 'Unknown!'); - if rpcconfig <> nil then - rpcconfig.panel4.Caption := StrPas(chrTemp); - exit; - end; - {success, return resolved address} - HostAddr.sin_addr.S_addr := longint(plongint(TCPResult^.h_addr_list^)^); - chrTemp := inet_ntoa(HostAddr.sin_addr); - end; - except on EInValidPointer do StrCat(chrTemp, 'Error in GetHostByName'); - end; -end; -end; - -(*function libAbortCall(inst: integer): integer; -var - WSAError: integer; -begin - - with WRec[inst] do - begin - - WSAError := WSACancelAsyncRequest(hTCP); - if WSAError = Socket_Error then - begin - WSAError := WSAGetLastError; - CallWait := False; - CallAbort := True; - Result := WSAError; - end; - - CallAbort := True; - CallWait := False; - Result := WSAError; - - end; - -end; *) //Removed in P14 - -function GetTCPError:string; -var - x: string; - r: integer; - -begin - r := WSAGetLastError; - Case r of - WSAEINTR : x := 'WSAEINTR'; - WSAEBADF : x := 'WSAEINTR'; - WSAEFAULT : x := 'WSAEFAULT'; - WSAEINVAL : x := 'WSAEINVAL'; - WSAEMFILE : x := 'WSAEMFILE'; - WSAEWOULDBLOCK : x := 'WSAEWOULDBLOCK'; - WSAEINPROGRESS : x := 'WSAEINPROGRESS'; - WSAEALREADY : x := 'WSAEALREADY'; - WSAENOTSOCK : x := 'WSAENOTSOCK'; - WSAEDESTADDRREQ : x := 'WSAEDESTADDRREQ'; - WSAEMSGSIZE : x := 'WSAEMSGSIZE'; - WSAEPROTOTYPE : x := 'WSAEPROTOTYPE'; - WSAENOPROTOOPT : x := 'WSAENOPROTOOPT'; - WSAEPROTONOSUPPORT : x := 'WSAEPROTONOSUPPORT'; - WSAESOCKTNOSUPPORT : x := 'WSAESOCKTNOSUPPORT'; - WSAEOPNOTSUPP : x := 'WSAEOPNOTSUPP'; - WSAEPFNOSUPPORT : x := 'WSAEPFNOSUPPORT'; - WSAEAFNOSUPPORT : x := 'WSAEAFNOSUPPORT'; - WSAEADDRINUSE : x := 'WSAEADDRINUSE'; - WSAEADDRNOTAVAIL : x := 'WSAEADDRNOTAVAIL'; - WSAENETDOWN : x := 'WSAENETDOWN'; - WSAENETUNREACH : x := 'WSAENETUNREACH'; - WSAENETRESET : x := 'WSAENETRESET'; - WSAECONNABORTED : x := 'WSAECONNABORTED'; - WSAECONNRESET : x := 'WSAECONNRESET'; - WSAENOBUFS : x := 'WSAENOBUFS'; - WSAEISCONN : x := 'WSAEISCONN'; - WSAENOTCONN : x := 'WSAENOTCONN'; - WSAESHUTDOWN : x := 'WSAESHUTDOWN'; - WSAETOOMANYREFS : x := 'WSAETOOMANYREFS'; - WSAETIMEDOUT : x := 'WSAETIMEDOUT'; - WSAECONNREFUSED : x := 'WSAECONNREFUSED'; - WSAELOOP : x := 'WSAELOOP'; - WSAENAMETOOLONG : x := 'WSAENAMETOOLONG'; - WSAEHOSTDOWN : x := 'WSAEHOSTDOWN'; - WSAEHOSTUNREACH : x := 'WSAEHOSTUNREACH'; - WSAENOTEMPTY : x := 'WSAENOTEMPTY'; - WSAEPROCLIM : x := 'WSAEPROCLIM'; - WSAEUSERS : x := 'WSAEUSERS'; - WSAEDQUOT : x := 'WSAEDQUOT'; - WSAESTALE : x := 'WSAESTALE'; - WSAEREMOTE : x := 'WSAEREMOTE'; - WSASYSNOTREADY : x := 'WSASYSNOTREADY'; - WSAVERNOTSUPPORTED : x := 'WSAVERNOTSUPPORTED'; - WSANOTINITIALISED : x := 'WSANOTINITIALISED'; - WSAHOST_NOT_FOUND : x := 'WSAHOST_NOT_FOUND'; - WSATRY_AGAIN : x := 'WSATRY_AGAIN'; - WSANO_RECOVERY : x := 'WSANO_RECOVERY'; - WSANO_DATA : x := 'WSANO_DATA'; - - else x := 'Unknown Error'; - end; - Result := x + ' (' + IntToStr(r) + ')'; -end; - - -end. diff --git a/BDK32/Source/Rpcnet.~dfm b/BDK32/Source/Rpcnet.~dfm deleted file mode 100644 index 33f11b1..0000000 --- a/BDK32/Source/Rpcnet.~dfm +++ /dev/null @@ -1,17 +0,0 @@ -object RPCFRM1: TRPCFRM1 - Left = 279 - Top = 352 - BorderStyle = bsNone - Caption = 'DLL' - ClientHeight = 101 - ClientWidth = 239 - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -13 - Font.Name = 'System' - Font.Style = [] - OldCreateOrder = True - PixelsPerInch = 96 - TextHeight = 16 -end diff --git a/BDK32/Source/Rpcnet.~pas b/BDK32/Source/Rpcnet.~pas deleted file mode 100644 index 92eddd5..0000000 --- a/BDK32/Source/Rpcnet.~pas +++ /dev/null @@ -1,435 +0,0 @@ -{ ************************************************************** - Package: XWB - Kernel RPCBroker - Date Created: Sept 18, 1997 (Version 1.1) - Site Name: Oakland, OI Field Office, Dept of Veteran Affairs - Developers: Danila Manapsal, Don Craven, Joel Ivey - Description: winsock utilities. - Current Release: Version 1.1 Patch 40 (January 7, 2005)) -*************************************************************** } - - -unit RpcNet ; -{ - Changes in v1.1.13 (JLI -- 8/23/00) -- XWB*1.1*13 - Made changes to cursor dependent on current cursor being crDefault so - that the application can set it to a different cursor for long or - repeated processes without the cursor 'flashing' repeatedly. -} -interface - -uses - SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls, - Forms, Dialogs, winsock; - -Const XWB_GHIP = WM_USER + 10000; -//Const XWB_SELECT = WM_USER + 10001; - -Const WINSOCK1_1 = $0101; -Const PF_INET = 2; -Const SOCK_STREAM = 1; -Const IPPROTO_TCP = 6; -Const INVALID_SOCKET = -1; -Const SOCKET_ERROR = -1; -Const FIONREAD = $4004667F; -Const ActiveConnection: boolean = False; - -type EchatError = class(Exception); - -type - TRPCFRM1 = class(TForm) - private - { Private declarations } - public - { Public declarations } - procedure XWBGHIP(var msgSock: TMessage); - //procedure xwbSelect(var msgSock: TMessage); //P14 - procedure WndProc(var Message : TMessage); reintroduce; //P14 -end; - -type - WinTaskRec = record - InUse: boolean; - pTCPResult: Pointer; - strTemp: string; {generic output string for async calls} - chrTemp: PChar; {generic out PChar for async calls} - hTCP: THandle; {pseudo handle for async calls} - hWin: hWnd; {handle for owner window} - CallWait: boolean; - CallAbort: boolean; - RPCFRM1: TRPCFRM1; - end; - -var - WRec: array[1..128] of WinTaskRec; - Hash: array[0..159] of char; - -{Windows OS abstraction functions. Should be taken over by VA Kernel} - -function libGetCurrentProcess: word; - -{Socket functions using library RPCLIB.DLL, in this case called locally} - -//function libAbortCall(inst: integer): integer; export; //P14 -function libGetHostIP1(inst: integer; HostName: PChar; - var outcome: PChar): integer; export; -function libGetLocalIP(inst: integer; var outcome: PChar): integer; export; -procedure libClose(inst: integer); export; -function libOpen:integer; export; - -function GetTCPError:string; - -{Secure Hash Algorithm functions, library SHA.DLL and local interfaces} - -function libGetLocalModule: PChar; export; -function GetFileHash(fn: PChar): longint; export; - -implementation - -uses rpcconf1; - -{function shsTest: integer; far; external 'SHA'; -procedure shsHash(plain: PChar; size: integer; - Hash: PChar); far; external 'SHA';} //Removed in P14 - -{$R *.DFM} - - - -function libGetCurrentProcess: word; -begin - Result := GetCurrentProcess; -end; - -function libGetLocalIP(inst: integer; var outcome: PChar): integer; -var - local: PChar; -begin - local := StrAlloc(255); - gethostname( local, 255); - Result := libGetHostIP1(inst, local, outcome); - StrDispose(local); -end; - -function libGetLocalModule: PChar; -var - tsk: THandle; - name: PChar; -begin - tsk := GetCurrentProcess; - name := StrAlloc(1024); - GetModuleFilename(tsk, name, 1024); - Result := name; - -end; - -function GetFileHash(fn: PChar): longint; -var - hFn: integer; - finfo: TOFSTRUCT; - bytesRead, status: longint; - tBuf: PChar; - -begin - tBuf := StrAlloc(160); - hFn := OpenFile(fn, finfo, OF_READ); - bytesRead := 0; - status := _lread(hFn, tBuf, sizeof(tBuf)); - while status <> 0 do - begin - status := _lread(hFn, tBuf, sizeof(tBuf)); - inc(bytesRead,status); - end; - _lclose(hFn); - StrDispose(tBuf); - Result := bytesRead; -end; - -function libOpen:integer; -var - inst: integer; - WSData: TWSADATA; - RPCFRM1: TRPCFRM1; -begin - inst := 1; {in this case, no DLL so instance is always 1} - RPCFRM1 := TRPCFRM1.Create(nil); //P14 - with WRec[inst] do - begin - hWin := AllocateHWnd(RPCFRM1.wndproc); - - WSAStartUp(WINSOCK1_1, WSData); - WSAUnhookBlockingHook; - - Result := inst; - InUse := True; - end; - RPCFRM1.Release; //P14 -end; - -procedure libClose(inst: integer); -begin - - with WRec[inst] do - begin - InUse := False; - WSACleanup; - DeallocateHWnd(hWin); - end; -end; - -function libGetHostIP1(inst: integer; HostName: PChar; - var outcome: PChar): integer; -var - //RPCFRM1: TRPCFRM1; {P14} - //wMsg: TMSG; {P14} - //hWnd: THandle; {P14} - ChangeCursor: Boolean; - -begin - - outcome[0] := #0; - - if Screen.Cursor = crDefault then - ChangeCursor := True - else - ChangeCursor := False; - if ChangeCursor then - Screen.Cursor := crHourGlass; - - with WRec[inst] do - begin - - if HostName[0] = #0 then - begin - StrCat(outcome,'No Name to Resolve!'); - Result := -1; - exit; - end; - - if CallWait = True then - begin - outcome[0] := #0; - StrCat(outcome, 'Call in Progress'); - Result := -1; - exit; - end; - - if inet_addr(HostName) > INADDR_ANY then - begin - outcome := Hostname; - Result := 0; - if ChangeCursor then - Screen.Cursor := crDefault; - WSACleanup; - exit; - end; - - GetMem(pTCPResult, MAXGETHOSTSTRUCT+1); - try - begin - CallWait := True; - CallAbort := False; - PHostEnt(pTCPResult)^.h_name := nil; - hTCP := WSAAsyncGetHostByName(hWin, XWB_GHIP, HostName, - pTCPResult, MAXGETHOSTSTRUCT ); - { loop while CallWait is True } - CallAbort := False; - while CallWait = True do - Application.ProcessMessages; - end; - except on EInValidPointer do - begin - StrCat(outcome,'Error in GetHostByName'); - if ChangeCursor then - Screen.Cursor := crDefault; - end; - - end; - - FreeMem(pTCPResult, MAXGETHOSTSTRUCT+1); - StrCopy(outcome,chrTemp); - Result := 0; - if ChangeCursor then - Screen.Cursor := crDefault; - end; - end; - -(*procedure TRPCFRM1.XWBSELECT(var msgSock: TMessage); -var - noop: integer; -begin - case msgSock.lparam of - FD_ACCEPT: {connection arrived} - begin - noop := 1; - end; - FD_CONNECT: {connection initiated} - begin - noop := 1; - end; - FD_READ: {data received, put in display} - begin - noop := 1; - end; - FD_CLOSE: {disconnection of accepted socket} - begin - noop := 1; - end; - else - noop := 1; - end; -end;*) //Procedure removed in P14. - -procedure TRPCFRM1.WndProc(var Message : TMessage); -begin - with Message do - case Msg of - {XWB_SELECT : xwbSelect(Message);} //P14 - XWB_GHIP: xwbghip(Message); - else - DefWindowProc(WRec[1].hWin, Msg, wParam, lParam); - {Inherited WndProc(Message);} - end; -end; - -procedure TRPCFRM1.XWBGHIP(var msgSock: TMessage); -var - TCPResult: PHostEnt; - WSAError: integer; - HostAddr: TSockaddr; - inst: integer; - -begin - inst := 1; {local case is always 1} - - - with WRec[inst] do - begin - - hTCP := msgSock.WParam; - - chrTemp := StrAlloc(512); - - CallWait := False; - If CallAbort = True then { User aborted call } - begin - StrCopy(ChrTemp,'Abort!'); - exit; - end; - - WSAError := WSAGetAsyncError(hTCP); { in case async call failed } - If WSAError < 0 then - begin - StrPCopy(chrTemp,IntToStr(WSAError)); - exit; - end; - - try - begin - TCPResult := PHostEnt(pTCPResult); - StrTemp := ''; - if TCPResult^.h_name = nil then - begin - StrCopy(chrTemp, 'Unknown!'); - if rpcconfig <> nil then - rpcconfig.panel4.Caption := StrPas(chrTemp); - exit; - end; - {success, return resolved address} - HostAddr.sin_addr.S_addr := longint(plongint(TCPResult^.h_addr_list^)^); - chrTemp := inet_ntoa(HostAddr.sin_addr); - end; - except on EInValidPointer do StrCat(chrTemp, 'Error in GetHostByName'); - end; -end; -end; - -(*function libAbortCall(inst: integer): integer; -var - WSAError: integer; -begin - - with WRec[inst] do - begin - - WSAError := WSACancelAsyncRequest(hTCP); - if WSAError = Socket_Error then - begin - WSAError := WSAGetLastError; - CallWait := False; - CallAbort := True; - Result := WSAError; - end; - - CallAbort := True; - CallWait := False; - Result := WSAError; - - end; - -end; *) //Removed in P14 - -function GetTCPError:string; -var - x: string; - r: integer; - -begin - r := WSAGetLastError; - Case r of - WSAEINTR : x := 'WSAEINTR'; - WSAEBADF : x := 'WSAEINTR'; - WSAEFAULT : x := 'WSAEFAULT'; - WSAEINVAL : x := 'WSAEINVAL'; - WSAEMFILE : x := 'WSAEMFILE'; - WSAEWOULDBLOCK : x := 'WSAEWOULDBLOCK'; - WSAEINPROGRESS : x := 'WSAEINPROGRESS'; - WSAEALREADY : x := 'WSAEALREADY'; - WSAENOTSOCK : x := 'WSAENOTSOCK'; - WSAEDESTADDRREQ : x := 'WSAEDESTADDRREQ'; - WSAEMSGSIZE : x := 'WSAEMSGSIZE'; - WSAEPROTOTYPE : x := 'WSAEPROTOTYPE'; - WSAENOPROTOOPT : x := 'WSAENOPROTOOPT'; - WSAEPROTONOSUPPORT : x := 'WSAEPROTONOSUPPORT'; - WSAESOCKTNOSUPPORT : x := 'WSAESOCKTNOSUPPORT'; - WSAEOPNOTSUPP : x := 'WSAEOPNOTSUPP'; - WSAEPFNOSUPPORT : x := 'WSAEPFNOSUPPORT'; - WSAEAFNOSUPPORT : x := 'WSAEAFNOSUPPORT'; - WSAEADDRINUSE : x := 'WSAEADDRINUSE'; - WSAEADDRNOTAVAIL : x := 'WSAEADDRNOTAVAIL'; - WSAENETDOWN : x := 'WSAENETDOWN'; - WSAENETUNREACH : x := 'WSAENETUNREACH'; - WSAENETRESET : x := 'WSAENETRESET'; - WSAECONNABORTED : x := 'WSAECONNABORTED'; - WSAECONNRESET : x := 'WSAECONNRESET'; - WSAENOBUFS : x := 'WSAENOBUFS'; - WSAEISCONN : x := 'WSAEISCONN'; - WSAENOTCONN : x := 'WSAENOTCONN'; - WSAESHUTDOWN : x := 'WSAESHUTDOWN'; - WSAETOOMANYREFS : x := 'WSAETOOMANYREFS'; - WSAETIMEDOUT : x := 'WSAETIMEDOUT'; - WSAECONNREFUSED : x := 'WSAECONNREFUSED'; - WSAELOOP : x := 'WSAELOOP'; - WSAENAMETOOLONG : x := 'WSAENAMETOOLONG'; - WSAEHOSTDOWN : x := 'WSAEHOSTDOWN'; - WSAEHOSTUNREACH : x := 'WSAEHOSTUNREACH'; - WSAENOTEMPTY : x := 'WSAENOTEMPTY'; - WSAEPROCLIM : x := 'WSAEPROCLIM'; - WSAEUSERS : x := 'WSAEUSERS'; - WSAEDQUOT : x := 'WSAEDQUOT'; - WSAESTALE : x := 'WSAESTALE'; - WSAEREMOTE : x := 'WSAEREMOTE'; - WSASYSNOTREADY : x := 'WSASYSNOTREADY'; - WSAVERNOTSUPPORTED : x := 'WSAVERNOTSUPPORTED'; - WSANOTINITIALISED : x := 'WSANOTINITIALISED'; - WSAHOST_NOT_FOUND : x := 'WSAHOST_NOT_FOUND'; - WSATRY_AGAIN : x := 'WSATRY_AGAIN'; - WSANO_RECOVERY : x := 'WSANO_RECOVERY'; - WSANO_DATA : x := 'WSANO_DATA'; - - else x := 'Unknown Error'; - end; - Result := x + ' (' + IntToStr(r) + ')'; -end; - - -end. diff --git a/BDK32/Source/SelDiv.dfm b/BDK32/Source/SelDiv.dfm deleted file mode 100644 index 6fd5dcb..0000000 --- a/BDK32/Source/SelDiv.dfm +++ /dev/null @@ -1,156 +0,0 @@ -object SelDivForm: TSelDivForm - Left = 368 - Top = 193 - Width = 445 - Height = 213 - Caption = 'Select Division' - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -16 - Font.Name = 'MS Sans Serif' - Font.Style = [fsBold] - OldCreateOrder = True - OnCreate = FormCreate - PixelsPerInch = 96 - TextHeight = 20 - object DivLabel1: TLabel - Left = 16 - Top = 8 - Width = 268 - Height = 16 - Caption = 'Must Select Division To Continue Signon!' - Color = clBtnFace - Font.Charset = ANSI_CHARSET - Font.Color = clWindowText - Font.Height = -13 - Font.Name = 'System' - Font.Style = [fsBold] - ParentColor = False - ParentFont = False - end - object btnOK: TBitBtn - Left = 16 - Top = 137 - Width = 81 - Height = 25 - Anchors = [akRight] - Caption = '&OK' - Default = True - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -13 - Font.Name = 'MS Sans Serif' - Font.Style = [fsBold] - ParentFont = False - TabOrder = 1 - OnClick = btnOKClick - Glyph.Data = { - BE060000424DBE06000000000000360400002800000024000000120000000100 - 0800000000008802000000000000000000000001000000010000000000000000 - 80000080000000808000800000008000800080800000C0C0C000C0DCC000F0CA - A600000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000F0FBFF00A4A0A000808080000000 - FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00030303030303 - 0303030303030303030303030303030303030303030303030303030303030303 - 03030303030303030303030303030303030303030303FF030303030303030303 - 03030303030303040403030303030303030303030303030303F8F8FF03030303 - 03030303030303030303040202040303030303030303030303030303F80303F8 - FF030303030303030303030303040202020204030303030303030303030303F8 - 03030303F8FF0303030303030303030304020202020202040303030303030303 - 0303F8030303030303F8FF030303030303030304020202FA0202020204030303 - 0303030303F8FF0303F8FF030303F8FF03030303030303020202FA03FA020202 - 040303030303030303F8FF03F803F8FF0303F8FF03030303030303FA02FA0303 - 03FA0202020403030303030303F8FFF8030303F8FF0303F8FF03030303030303 - FA0303030303FA0202020403030303030303F80303030303F8FF0303F8FF0303 - 0303030303030303030303FA0202020403030303030303030303030303F8FF03 - 03F8FF03030303030303030303030303FA020202040303030303030303030303 - 0303F8FF0303F8FF03030303030303030303030303FA02020204030303030303 - 03030303030303F8FF0303F8FF03030303030303030303030303FA0202020403 - 030303030303030303030303F8FF0303F8FF03030303030303030303030303FA - 0202040303030303030303030303030303F8FF03F8FF03030303030303030303 - 03030303FA0202030303030303030303030303030303F8FFF803030303030303 - 030303030303030303FA0303030303030303030303030303030303F803030303 - 0303030303030303030303030303030303030303030303030303030303030303 - 0303} - NumGlyphs = 2 - end - object btnCancel: TBitBtn - Left = 168 - Top = 137 - Width = 83 - Height = 25 - Anchors = [akRight] - Caption = '&Cancel' - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -13 - Font.Name = 'MS Sans Serif' - Font.Style = [fsBold] - ParentFont = False - TabOrder = 2 - OnClick = btnCancelClick - Kind = bkCancel - end - object btnHelp: TBitBtn - Left = 336 - Top = 135 - Width = 83 - Height = 26 - Anchors = [akRight] - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -13 - Font.Name = 'MS Sans Serif' - Font.Style = [fsBold] - ParentFont = False - TabOrder = 3 - OnClick = btnHelpClick - Kind = bkHelp - end - object DivListBox: TListBox - Left = 16 - Top = 32 - Width = 401 - Height = 90 - Anchors = [akTop, akRight] - Font.Charset = ANSI_CHARSET - Font.Color = clWindowText - Font.Height = -13 - Font.Name = 'System' - Font.Style = [fsBold] - ItemHeight = 16 - ParentFont = False - Sorted = True - TabOrder = 0 - OnDblClick = btnOKClick - end -end diff --git a/BDK32/Source/SelDiv.pas b/BDK32/Source/SelDiv.pas deleted file mode 100644 index c441e91..0000000 --- a/BDK32/Source/SelDiv.pas +++ /dev/null @@ -1,245 +0,0 @@ -{ ************************************************************** - Package: XWB - Kernel RPCBroker - Date Created: Sept 18, 1997 (Version 1.1) - Site Name: Oakland, OI Field Office, Dept of Veteran Affairs - Developers: Danila Manapsal, Don Craven, Joel Ivey - Description: Handles Division selection for multidivision - users. - Current Release: Version 1.1 Patch 40 (January 7, 2005)) -*************************************************************** } - -{************************************************** -This will ONLY be invoked when user has more than one division to select from -in NEW Person file. If user only has one division, that division will be used; -else it will default to whatever is in the Kernel Site Parameter file. - -XWB*1.1*13, Silent Login, allows for silent log-in functionality - DCM -last updated: 5/24/00 -------------------------------------------------------------------------------} - - -unit SelDiv; - -interface - -uses - Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, - StdCtrls, MFunStr, Buttons, Trpcb; - -type - TSelDivForm = class(TForm) - btnOK: TBitBtn; - btnCancel: TBitBtn; - btnHelp: TBitBtn; - DivLabel1: TLabel; - DivListBox: TListBox; - procedure btnOKClick(Sender: TObject); - procedure btnCancelClick(Sender: TObject); - procedure btnHelpClick(Sender: TObject); - procedure FormCreate(Sender: TObject); - private - { Private declarations } - public - { Public declarations } - procedure Enter; - end; - -function ChooseDiv(userid : string; MDivBroker: TRPCBroker): Boolean; -function SetDiv(division : string; MDivBroker: TRPCBroker): boolean; //p13 -function MultDiv(MDivBroker: TRPCBroker): boolean; -function SelectDivision(DivisionArray: TStrings; MDivBroker: TRPCBroker): Boolean; - -var - SelDivForm: TSelDivForm; - -implementation - -var - DivSel : string; - CntDiv : integer; - DivArray : TStrings; //Holds Results from 'XUS Division Get' -{$R *.DFM} - -{------------------------------ChooseDiv---------------------------------} -{ This function will retrieve the divisions for a user. The user will - then choose one division for signon. 'USERID' parameter is for future use - that will bring back a list of divisions for a user based on their DUZ - (or username to lookup DUZ), not based on the DUZ as it exists in the - symbol table. } - -function ChooseDiv(userid : string; MDivBroker: TRPCBroker): Boolean; -var - division : string; -begin - Result := false; // stays 'false' if user not select division. - with MDivBroker do begin - if userid <> '' then // future use - - DUZ is passed in. - begin - with Param[0] do begin - Value := userid; - PType := literal; - end; - end; - RemoteProcedure := 'XUS DIVISION GET'; - Call; - CntDiv := StrToInt(MDivBroker.Results[0]); //count of divisions. - end;{with} - - if CntDiv = 0 then Result := true; //using the Kernel default division. - - if CntDiv > 0 then - begin - DivArray := TStringlist.Create; //Put Results in DivArray - DivArray.Assign(MDivBroker.Results); - try - SelDivForm := TSelDivForm.Create(Application); //create division form. - ShowApplicationAndFocusOK(Application); - SetForegroundWindow(SelDivForm.Handle); - SelDivForm.Enter; - finally; - SelDivForm.Free; - end; - end;{if/begin} - - if SelDiv.DivSel <> '' then - begin - Result := True; //user selected a division. - division := Piece((Piece(SelDiv.DivSel,'(',2)),')',1); - if SetDiv(division,MDivBroker) then MDivBroker.User.Division := Division; - - end;{if/begin} -end;{procedure} - -function SelectDivision(DivisionArray: TStrings; MDivBroker: TRPCBroker): Boolean; -var - division : string; -begin - Result := false; - with MDivBroker do - begin - if DivisionArray.Count = 0 then - begin - RemoteProcedure := 'XUS DIVISION GET'; - Call; - CntDiv := StrToInt(Results[0]); //count of divisions. - DivisionArray.Assign(Results); - end; - end;{with} - if CntDiv = 0 then //using the Kernel default division. - begin - Result := true; - exit; - end; - if CntDiv > 0 then - begin - DivArray := TStringlist.Create; //Put Results in DivArray - DivArray.Assign(DivisionArray); - try - SelDivForm := TSelDivForm.Create(Application); //create division form. - ShowApplicationAndFocusOK(Application); - SetForegroundWindow(SelDivForm.Handle); - SelDivForm.Enter; - finally; - SelDivForm.Free; - end; {try} - end; {if/begin} - if DivSel <> '' then - begin - Result := True; //user selected a division. - division := Piece((Piece(SelDiv.DivSel,'(',2)),')',1); - //division := Piece(SelDiv.DivSel,'^',2); - if SetDiv(division,MDivBroker) then MDivBroker.User.Division := Division; - end{if divsel} - else MDivBroker.LogIn.ErrorText := 'Invalid Division'; -end;{function} - -function MultDiv(MDivBroker: TRPCBroker): boolean; -begin - Result := False; - with MDivBroker do - begin - RemoteProcedure := 'XUS DIVISION GET'; - Call; - CntDiv := StrToInt(Results[0]); //count of divisions. - if CntDiv > 0 then - with Login do - begin - DivList.Assign(Results);//store the divisions - MultiDivision := True; - Result := True; - end; - end; -end; - -{----------------------------SetDiv--------------------------------} -{ This function will set DUZ(2) to the division the user selected. } - -function SetDiv(division : string; MDivBroker: TRPCBroker): boolean; -begin - Result := False; - with MDivBroker do begin - Param[0].Value := division; - Param[0].PType := literal; - RemoteProcedure := 'XUS DIVISION SET'; - Call; - if Results[0] = '1' then Result := True //1= DUZ(2) set successfully to division. - else Login.ErrorText := 'Invalid Division'; - end;{with} //0= DUZ(2) NOT able to set to division. -end; - -procedure TSelDivForm.Enter; -begin - try - ShowModal; //invoke division form - finally - - end; -end; - -procedure TSelDivForm.btnOKClick(Sender: TObject); -begin - if DivListBox.ItemIndex = -1 then //nothing selected. - ShowMessage('A Division was not selected!') - else - begin - SelDiv.DivSel := DivListBox.Items [DivListBox.ItemIndex]; //division - close; // selected. - end; -end; - -procedure TSelDivForm.btnCancelClick(Sender: TObject); -begin - close; -end; - -procedure TSelDivForm.btnHelpClick(Sender: TObject); -begin - ShowMessage('Select a division from the list and click OK.'+ - ' A division must be selected in order to continue with your signon.' + - ' To abort process click on Cancel but signon will NOT be completed.') -end; - -procedure TSelDivForm.FormCreate(Sender: TObject); -var - I : integer; - X : string; - y,def: string; -begin - def := ''; - SelDiv.DivSel := ''; //clear any old selection - I := 1; - while not (I > CntDiv) do - begin - X := DivArray[I]; - y := '(' + Piece(X,U,3) + ') ' + Piece(X,U,2); //p13 moved div# in front - //of div name - DivListBox.Items.Add(y); // + ' ^' + IntToStr(I)); - if Piece(X,U,4) = '1' then def := y; - I := I + 1; - end; - DivListBox.Sorted := TRUE; - if def <> '' then DivListBox.ItemIndex := DivListBox.Items.Indexof(def); //use itemindex to highlight the default division -end; - -end. - diff --git a/BDK32/Source/SgnonCnf.dfm b/BDK32/Source/SgnonCnf.dfm deleted file mode 100644 index fd2e2eb..0000000 --- a/BDK32/Source/SgnonCnf.dfm +++ /dev/null @@ -1,210 +0,0 @@ -object frmSignonConfig: TfrmSignonConfig - Left = 232 - Top = 110 - HelpContext = 2 - ActiveControl = CancelBtn - BorderStyle = bsDialog - Caption = 'Sign-on Properties' - ClientHeight = 258 - ClientWidth = 401 - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'Courier New' - Font.Style = [fsBold] - FormStyle = fsStayOnTop - OldCreateOrder = True - Position = poScreenCenter - OnShow = FormShow - PixelsPerInch = 96 - TextHeight = 14 - object Bevel1: TBevel - Left = 8 - Top = 8 - Width = 289 - Height = 249 - Shape = bsFrame - IsControl = True - end - object OKBtn: TBitBtn - Left = 312 - Top = 8 - Width = 77 - Height = 27 - Caption = 'OK' - ModalResult = 1 - TabOrder = 5 - OnClick = OKBtnClick - Glyph.Data = { - DE010000424DDE01000000000000760000002800000024000000120000000100 - 0400000000006801000000000000000000001000000000000000000000000000 - 80000080000000808000800000008000800080800000C0C0C000808080000000 - FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00333333333333 - 3333333333333333333333330000333333333333333333333333F33333333333 - 00003333344333333333333333388F3333333333000033334224333333333333 - 338338F3333333330000333422224333333333333833338F3333333300003342 - 222224333333333383333338F3333333000034222A22224333333338F338F333 - 8F33333300003222A3A2224333333338F3838F338F33333300003A2A333A2224 - 33333338F83338F338F33333000033A33333A222433333338333338F338F3333 - 0000333333333A222433333333333338F338F33300003333333333A222433333 - 333333338F338F33000033333333333A222433333333333338F338F300003333 - 33333333A222433333333333338F338F00003333333333333A22433333333333 - 3338F38F000033333333333333A223333333333333338F830000333333333333 - 333A333333333333333338330000333333333333333333333333333333333333 - 0000} - Margin = 2 - NumGlyphs = 2 - Spacing = -1 - IsControl = True - end - object CancelBtn: TBitBtn - Left = 312 - Top = 48 - Width = 77 - Height = 27 - Cancel = True - Caption = 'Cancel' - Default = True - ModalResult = 2 - TabOrder = 0 - Glyph.Data = { - DE010000424DDE01000000000000760000002800000024000000120000000100 - 0400000000006801000000000000000000001000000000000000000000000000 - 80000080000000808000800000008000800080800000C0C0C000808080000000 - FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00333333333333 - 333333333333333333333333000033338833333333333333333F333333333333 - 0000333911833333983333333388F333333F3333000033391118333911833333 - 38F38F333F88F33300003339111183911118333338F338F3F8338F3300003333 - 911118111118333338F3338F833338F3000033333911111111833333338F3338 - 3333F8330000333333911111183333333338F333333F83330000333333311111 - 8333333333338F3333383333000033333339111183333333333338F333833333 - 00003333339111118333333333333833338F3333000033333911181118333333 - 33338333338F333300003333911183911183333333383338F338F33300003333 - 9118333911183333338F33838F338F33000033333913333391113333338FF833 - 38F338F300003333333333333919333333388333338FFF830000333333333333 - 3333333333333333333888330000333333333333333333333333333333333333 - 0000} - Margin = 2 - NumGlyphs = 2 - Spacing = -1 - IsControl = True - end - object HelpBtn: TBitBtn - Left = 312 - Top = 128 - Width = 77 - Height = 27 - TabOrder = 6 - Kind = bkHelp - Margin = 2 - Spacing = -1 - IsControl = True - end - object rgrWindowPosition: TRadioGroup - Left = 24 - Top = 24 - Width = 121 - Height = 81 - Caption = 'Window Position' - Items.Strings = ( - 'Center' - 'Current' - 'Remember') - TabOrder = 2 - TabStop = True - end - object rgrWindowSize: TRadioGroup - Left = 160 - Top = 24 - Width = 121 - Height = 81 - Caption = 'Window Size' - Items.Strings = ( - 'Normal' - 'Current' - 'Remember') - TabOrder = 3 - TabStop = True - end - object GroupBox1: TGroupBox - Left = 24 - Top = 120 - Width = 257 - Height = 121 - Caption = 'Intro Text' - TabOrder = 4 - object Button1: TButton - Left = 16 - Top = 80 - Width = 97 - Height = 27 - Caption = 'Change Font' - TabOrder = 1 - OnClick = Button1Click - end - object rgrIntroBackClr: TRadioGroup - Left = 16 - Top = 24 - Width = 225 - Height = 41 - Caption = 'Background Color' - Columns = 2 - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'Courier New' - Font.Style = [fsBold] - Items.Strings = ( - 'Current' - 'Select New') - ParentFont = False - TabOrder = 0 - TabStop = True - OnClick = rgrIntroBackClrClick - end - end - object btnDefaults: TBitBtn - Left = 312 - Top = 88 - Width = 77 - Height = 27 - HelpContext = 4 - Caption = '&Defaults' - ModalResult = 5 - TabOrder = 1 - Glyph.Data = { - 76010000424D7601000000000000760000002800000020000000100000000100 - 0400000000000001000000000000000000001000000010000000000000000000 - 800000800000008080008000000080008000808000007F7F7F00BFBFBF000000 - FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00333333333333 - 3333333333FFFFF3333333333999993333333333F77777FFF333333999999999 - 3333333777333777FF3333993333339993333377FF3333377FF3399993333339 - 993337777FF3333377F3393999333333993337F777FF333337FF993399933333 - 399377F3777FF333377F993339993333399377F33777FF33377F993333999333 - 399377F333777FF3377F993333399933399377F3333777FF377F993333339993 - 399377FF3333777FF7733993333339993933373FF3333777F7F3399933333399 - 99333773FF3333777733339993333339933333773FFFFFF77333333999999999 - 3333333777333777333333333999993333333333377777333333} - Margin = 2 - NumGlyphs = 2 - Spacing = -1 - IsControl = True - end - object FontDialog1: TFontDialog - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -13 - Font.Name = 'System' - Font.Style = [] - MinFontSize = 0 - MaxFontSize = 0 - Left = 136 - Top = 200 - end - object ColorDialog1: TColorDialog - Ctl3D = True - Left = 336 - Top = 216 - end -end diff --git a/BDK32/Source/SgnonCnf.pas b/BDK32/Source/SgnonCnf.pas deleted file mode 100644 index 23aae1e..0000000 --- a/BDK32/Source/SgnonCnf.pas +++ /dev/null @@ -1,602 +0,0 @@ -{ ************************************************************** - Package: XWB - Kernel RPCBroker - Date Created: Sept 18, 1997 (Version 1.1) - Site Name: Oakland, OI Field Office, Dept of Veteran Affairs - Developers: Danila Manapsal, Don Craven, Joel Ivey - Description: Signon Form Configuration Dialog. - Current Release: Version 1.1 Patch 40 (January 7, 2005)) -*************************************************************** } - -{************************************************** -1.1P31 - Modified to store signon configuration under - the HKCU key - this permits users on NT2000 - machines who have USER access to set their - configuration. Also, makes configuration specific - to users on machines which might be shared. - - Also make it so that configuration is only written - to the registry when the user indicates that it - should be saved (previously the default values - were written into the registry as well as applied - to the window if data was not in the registry). - The default values previously stored in the registry - would override any changes in the signon window - design via coding. To overcome this, if the user - does not have saved configuration data, the window - generated on opening will be used as the default, and - the default data written into the registry as defaults. - This will permit the user to restore to the current - window defaults if desired, but will not overwrite - changes released for the window in later patches. -************************************************************} - -unit Sgnoncnf; - -interface - -uses WinTypes, WinProcs, Classes, Graphics, Forms, Controls, Buttons, - StdCtrls, ExtCtrls, Dialogs, SysUtils, MFunStr, XWBut1; - -type - TSignonValues = class(TObject) - private - FHeight: Integer; - FWidth: Integer; - FTextColor: LongInt; - FPosition: String; - FSize: String; - FIntroFont: String; - FIntroFontStyles: String; - FBackColor: LongInt; - FFont: TFont; - FFontStyles: TFontStyles; - FTop: Integer; - FLeft: Integer; - procedure SetSize(const Value: String); - procedure SetPosition(const Value: String); - procedure SetIntroFont(const Value: String); - procedure SetIntroFontStyles(const Value: String); - procedure SetFont(Value: TFont); - procedure SetTextColor(Value: LongInt); - public - procedure Clear; virtual; - constructor Create; - destructor Destroy; override; - procedure SetEqual(EqualToValue: TSignonValues); - property Height: Integer read FHeight write FHeight; - property Width: Integer read FWidth write FWidth; - property TextColor: LongInt read FTextColor write SetTextColor; - property Position: String read FPosition write SetPosition; - property Size: String read FSize write SetSize; - property IntroFont: String read FIntroFont write SetIntroFont; - property IntroFontStyles: String read FIntroFontStyles write SetIntroFontStyles; - property BackColor: LongInt read FBackColor write FBackColor; - property Font: TFont read FFont write SetFont; - property FontStyles: TFontStyles read FFontStyles write FFontStyles; - property Top: Integer read FTop write FTop; - property Left: Integer read FLeft write FLeft; - end; - - TSignonConfiguration = class; - -{ - This class is the form shown for configuration of the signon form -} - TfrmSignonConfig = class(TForm) - OKBtn: TBitBtn; - CancelBtn: TBitBtn; - HelpBtn: TBitBtn; - Bevel1: TBevel; - rgrWindowPosition: TRadioGroup; - rgrWindowSize: TRadioGroup; - FontDialog1: TFontDialog; - GroupBox1: TGroupBox; - Button1: TButton; - btnDefaults: TBitBtn; - rgrIntroBackClr: TRadioGroup; - ColorDialog1: TColorDialog; - procedure Button1Click(Sender: TObject); - procedure OKBtnClick(Sender: TObject); - procedure FormShow(Sender: TObject); - procedure rgrIntroBackClrClick(Sender: TObject); - private - { Private declarations } - FController: TSignonConfiguration; - public - property Controller: TSignonConfiguration read FController write FController; - { Public declarations } - end; - -{ - This class handles the processing for signon configuration -} - TSignonConfiguration = class(TObject) - private - OrigHelp: String; - FIntroBackColor: LongInt; - FIntroFontValue: String; - FIntroFontStyles: String; - FIntroTextColor: LongInt; - FPosition: String; - FSize: String; - protected - procedure ResetToDefaults; virtual; - procedure UserClickedOK; virtual; - procedure IntroBackColor; virtual; - procedure FontDialog; virtual; - procedure UpdateWindow; - public - function ShowModal: Integer; virtual; - procedure ReadRegistrySettings; - constructor Create; - end; - -function StoreFontStyle(Values: TFontStyles): string; -function RestoreFontStyles(Value: String): TFontStyles; - - -var - frmSignonConfig: TfrmSignonConfig; - strPosition, strSize: string; - InitialValues: TSignonValues; - SignonDefaults: TSignonValues; - IsSharedBroker: Boolean; - -{ -const - DfltWidth: integer = 794; // 631; // 611; // 608; - DfltHeight: integer = 591; // 467; // 300; - DfltIntroClr: longint = clWindow; - DfltPosition: string = '0'; - DfltSize: string = '0'; - DfltIntroFont: string = ''; // 'Fixedsys^8'; // 'Courier New^8'; - DfltIntroFontStyle: TFontStyles = [fsBold]; - DfltBackClr: integer = 0; - p:string = '['; -} - -implementation - -{$R *.DFM} - -uses LoginFrm, fSgnonDlg, Trpcb; - -procedure TfrmSignonConfig.Button1Click(Sender: TObject); -begin -// FontDialog1.Execute; - Controller.FontDialog; -end; - -procedure TfrmSignonConfig.OKBtnClick(Sender: TObject); -begin - -end; - -{-------------- TSignonConfiguration.ReadRegistrySettings -------------- -Read Signon related settings from the Registry. Substitute defaults -for missing values. -------------------------------------------------------------------} -procedure TSignonConfiguration.ReadRegistrySettings; -var - strFontStyle: String; - strFontColor: String; - strFontSettings: String; -begin - { Test handling of Defaults } -// ShowMessage - InitialValues.SetEqual(SignonDefaults); - InitialValues.Position := '0'; - InitialValues.Size := '0'; - InitialValues.BackColor := clWindow; - InitialValues.TextColor := clWindowText; - - {%%%%%%% Sign-on Window Position %%%%%%%} - strPosition := ReadRegDataDefault(HKCU, REG_SIGNON, 'SignonPos',''); - if strPosition <> '' then - InitialValues.Position := strPosition; - - {%%%%%%% Sign-on Window Size %%%%%%%} - strSize := ReadRegDataDefault(HKCU, REG_SIGNON, 'SignonSiz', ''); - if strSize <> '' then - InitialValues.Size := strSize; - - {%%%%%%% Intro Text Background Color %%%%%%%} - if ReadRegDataDefault(HKCU, REG_SIGNON, 'IntroBackClr', '') <> '' then - InitialValues.BackColor := StrToInt(ReadRegDataDefault(HKCU, REG_SIGNON, 'IntroBackClr', '')); - - {%%%%%%% Intro Text Font %%%%%%%} - strFontSettings := ReadRegDataDefault(HKCU, REG_SIGNON, 'IntroTextFont', ''); - if strFontSettings <> '' then - begin - InitialValues.IntroFont := strFontSettings; - InitialValues.Font.Name := Piece(strFontSettings,U,1); - InitialValues.Font.Size := StrToInt(Piece(strFontSettings,U,2)); - end; - - {%%%%%%% Intro Text Color %%%%%%%} - strFontColor := ReadRegDataDefault(HKCU, REG_SIGNON, 'IntroTextClr', ''); - if strFontColor <> '' then - begin - InitialValues.TextColor := StrToInt(strFontColor); - InitialValues.Font.Color := InitialValues.TextColor; - end; - - {%%%%%%% Intro Text Font Styles %%%%%%%} - strFontStyle := ReadRegDataDefault(HKCU, REG_SIGNON, 'IntroTextStyle', ''); - if strFontStyle <> '' then - begin - InitialValues.IntroFontStyles := strFontStyle; - InitialValues.Font.Style := RestoreFontStyles(strFontStyle) - end; -end; - - -function StoreFontStyle(Values: TFontStyles): String; -begin - Result := ''; - if fsBold in Values then - Result := Result + 'B'; - if FsItalic in Values then - Result := Result + 'I'; - if fsUnderline in Values then - Result := Result + 'U'; - if fsStrikeout in Values then - Result := Result + 'S'; -end; - -procedure TfrmSignonConfig.FormShow(Sender: TObject); -begin - // -end; - -function RestoreFontStyles(Value: String): TFontStyles; -begin - Result := []; - if pos('B',Value) > 0 then - Result := Result + [fsBold]; - if pos('I',Value) > 0 then - Result := Result + [fsItalic]; - if pos('U',Value) > 0 then - Result := Result + [fsUnderline]; - if pos('S',Value) > 0 then - Result := Result + [fsStrikeout]; -end; - -procedure TfrmSignonConfig.rgrIntroBackClrClick(Sender: TObject); -begin - Controller.IntroBackColor; -end; - -function TSignonConfiguration.ShowModal: Integer; -var - ModalValue: Integer; -begin - ReadRegistrySettings; - if frmSignonConfig = nil then - frmSignonConfig := TfrmSignonConfig.Create(Application); - frmSignonConfig.Controller := Self; - OrigHelp := Application.HelpFile; // Save original helpfile. - try - Application.HelpFile := ReadRegData(HKLM, REG_BROKER, 'BrokerDr') + - '\clagent.hlp'; // Identify ConnectTo helpfile. - with frmSignonConfig do - begin - // set selections for entry to form - rgrIntroBackClr.ItemIndex := 0; // Current Background - rgrWindowPosition.ItemIndex := StrToInt(Piece(InitialValues.Position,U,1)); - rgrWindowSize.ItemIndex := StrToInt(Piece(InitialValues.Size,U,1)); - // initialize font values to current settings - FIntroFontValue := InitialValues.IntroFont; - FIntroTextColor := InitialValues.TextColor; - FIntroFontStyles := InitialValues.IntroFontStyles; - - ShowApplicationAndFocusOK(Application); - ModalValue := frmSignonConfig.ShowModal; - if ModalValue = mrOK then // establish changes for user - begin - UserClickedOK - end - else if ModalValue = mrIgnore then // restore default values - ResetToDefaults; - end; // with SignonForm - Result := ModalValue; - finally - frmSignonConfig.Free; // Release; jli 041104 - Application.HelpFile := OrigHelp; // Restore helpfile. - end; -end; - -{ - called if user changes selection for Background Color - selection 0 is to current value - selection 1 is to select new color -} -procedure TSignonConfiguration.IntroBackColor; -var - frmSignonDialog: TfrmSignonDialog; - OldHandle: THandle; -begin - OldHandle := GetForegroundWindow; - if frmSignonConfig.rgrIntroBackClr.ItemIndex = 1 then - begin - frmSignonDialog := TfrmSignonDialog.Create(Application); -// ShowApplicationAndFocusOK(Application); - SetForegroundWindow(frmSignonDialog.Handle); - if frmSignonDialog.ShowModal = mrOK then - FIntroBackColor := clWindow - else - begin - ShowApplicationAndFocusOK(Application); - if IsSharedBroker then - frmSignonConfig.WindowState := wsMinimized; - if frmSignonConfig.ColorDialog1.Execute then - FIntroBackColor := frmSignonConfig.ColorDialog1.Color; - frmSignonConfig.WindowState := wsNormal; - end; - end - else - FIntroBackColor := InitialValues.BackColor; - SetForegroundWindow(OldHandle); -end; - -{ called if user selects to change font for signon form } -procedure TSignonConfiguration.FontDialog; -var - frmSignonDialog: TfrmSignonDialog; - OldHandle: THandle; - FFontValue: TFont; -begin - FFontValue := TFont.Create; - OldHandle := GetForegroundWindow; - try - FFontValue.Name := InitialValues.Font.Name; - FFontValue.Size := InitialValues.Font.Size; - FFontValue.Style := InitialValues.Font.Style; - FFontValue.Color := InitialValues.Font.Color; - frmSignonDialog := TfrmSignonDialog.Create(Application); - frmSignonDialog.Label1.Caption := 'Do you want to use the Default Font face and size?'; - // ShowApplicationAndFocusOK(Application); - - SetForegroundWindow(frmSignonDialog.Handle); - if frmSignonDialog.ShowModal = mrOK then - FFontValue := SignonDefaults.Font - else - begin - // initialize font to current values - frmSignonConfig.FontDialog1.Font.Color := InitialValues.Font.Color; - frmSignonConfig.FontDialog1.Font.Name := InitialValues.Font.Name; - frmSignonConfig.FontDialog1.Font.Size := InitialValues.Font.Size; - frmSignonConfig.FontDialog1.Font.Style := InitialValues.Font.Style; - ShowApplicationAndFocusOK(Application); - if IsSharedBroker then - frmSignonConfig.WindowState := wsMinimized; - if frmSignonConfig.FontDialog1.Execute then - FFontValue := frmSignonConfig.FontDialog1.Font; - frmSignonConfig.WindowState := wsNormal; - end; - FIntroFontValue := FFontValue.Name + U + IntToStr(FFontValue.Size); - FIntroFontStyles := StoreFontStyle(FFontValue.Style); - FIntroTextColor := FFontValue.Color; - finally - FFontValue.Free; - SetForegroundWindow(OldHandle); - end; -end; - -procedure TSignonConfiguration.ResetToDefaults; -begin - if MessageDlg('Are you sure you want to reset all settings to their defaults?', - mtWarning, [mbNo, mbYes], 0) = mrYes then - begin - // P31 remove setting of default values into registry - - // remove entries from registry and use default window in app - DeleteRegData(HKCU, REG_SIGNON, 'SignonPos'); - DeleteRegData(HKCU, REG_SIGNON, 'SignonSiz'); - DeleteRegData(HKCU, REG_SIGNON, 'IntroBackClr'); - DeleteRegData(HKCU, REG_SIGNON, 'IntroTextClr'); - DeleteRegData(HKCU, REG_SIGNON, 'IntroTextFont'); - DeleteRegData(HKCU, REG_SIGNON, 'IntroTextStyle'); - strPosition := '0'; - strSize := '0'; - // Restore values to Defaults at Signon - InitialValues.SetEqual(SignonDefaults); - - UpdateWindow; - end; -end; - -procedure TSignonConfiguration.UserClickedOK; -var - JPosition: Integer; - JSize: Integer; -begin - JPosition := frmSignonConfig.rgrWindowPosition.ItemIndex; - JSize := frmSignonConfig.rgrWindowSize.ItemIndex; - - if JPosition = 0 then - FPosition := '0' - else - FPosition := IntToStr(JPosition)+U+IntToStr(frmSignon.Top)+U+IntToStr(frmSignon.Left); - strPosition := FPosition; - - if JSize = 0 then - FSize := '0' - else - FSize := IntToStr(JSize)+U+IntToStr(frmSignon.Width)+U+IntToStr(frmSignon.Height); - strSize := FSize; - - if FIntroBackColor <> InitialValues.BackColor then - begin - InitialValues.BackColor := FIntroBackColor; - if InitialValues.BackColor <> SignonDefaults.BackColor then - WriteRegData(HKCU, REG_SIGNON, 'IntroBackClr',IntToStr(FIntroBackColor)) - else - DeleteRegData(HKCU, REG_SIGNON, 'IntroBackClr'); - end; - - if FIntroTextColor <> InitialValues.TextColor then - begin - InitialValues.TextColor := FIntroTextColor; - if InitialValues.BackColor <> SignonDefaults.BackColor then - WriteRegData(HKCU, REG_SIGNON, 'IntroTextClr',IntToStr(FIntroTextColor)) - else - DeleteRegData(HKCU, REG_SIGNON, 'IntroTextClr'); - end; - - if FIntroFontValue <> InitialValues.IntroFont then - begin - InitialValues.IntroFont := FIntrofontValue; - if InitialValues.IntroFont <> SignonDefaults.IntroFont then - WriteRegData(HKCU, REG_SIGNON, 'IntroTextFont',FIntroFontValue) - else - DeleteRegData(HKCU, REG_SIGNON, 'IntroTextFont'); - end; - - if FIntroFontStyles <> InitialValues.IntroFontStyles then - begin - InitialValues.IntroFontStyles := FIntrofontStyles; - if InitialValues.IntroFontStyles <> SignonDefaults.IntroFontStyles then - WriteRegData(HKCU, REG_SIGNON, 'IntroTextStyle',FIntroFontStyles) - else - DeleteRegData(HKCU, REG_SIGNON, 'IntroTextStyle'); - end; - - if FPosition <> InitialValues.Position then - begin - InitialValues.Position := FPosition; - if InitialValues.Position <> SignonDefaults.Position then - WriteRegData(HKCU, REG_SIGNON, 'SignonPos',FPosition) - else - DeleteRegData(HKCU, REG_SIGNON, 'SignonPos'); - end; - - if FSize <> InitialValues.Size then - begin - InitialValues.Size := FSize; - if InitialValues.Size <> SignonDefaults.Size then - WriteRegData(HKCU, REG_SIGNON, 'SignonSiz',FSize) - else - DeleteRegData(HKCU, REG_SIGNON, 'SignonSiz'); - end; - - UpdateWindow; -end; - -constructor TSignonConfiguration.Create; -begin - inherited; - if SignonDefaults = nil then - SignonDefaults := TSignonValues.Create; - if InitialValues = nil then - InitialValues := TSignonValues.Create; - -end; - -procedure TSignonConfiguration.UpdateWindow; -begin - // TODO -cMM: default body inserted - frmSignon.IntroText.Color := InitialValues.BackColor; - frmSignon.IntroText.Font.Name := InitialValues.Font.Name; - frmSignon.IntroText.Font.Size := InitialValues.Font.Size; - frmSignon.IntroText.Font.Style := InitialValues.Font.Style; - frmSignon.IntroText.Font.Color := InitialValues.Font.Color; - frmSignon.Left := SignonDefaults.Left; - frmSignon.Top := SignonDefaults.Top; - frmSignon.Width := SignonDefaults.Width; - frmSignon.Height := SignonDefaults.Height; -end; - -procedure TSignonValues.Clear; -begin - FHeight := 0; - FWidth := 0; - FTextColor := clWindowText; - FPosition := ''; - FSize := ''; - FIntroFont := ''; - FIntroFontStyles := ''; - FBackColor := clWindow; - FFont.Name := 'Courier New' ; - FFont.Size := 11; - FFont.Style := []; -end; - -constructor TSignonValues.Create; -begin - inherited; - FFont := TFont.Create; -end; - -destructor TSignonValues.Destroy; -begin - FFont.Free; - inherited; -end; - -procedure TSignonValues.SetSize(const Value: String); -begin - FSize := Value; - if Value <> '0' then - begin - FWidth := StrToInt(Piece(Value,U,2)); - FHeight := StrToInt(Piece(Value,U,3)); - end; -end; - -procedure TSignonValues.SetPosition(const Value: String); -begin - FPosition := Value; - if Value <> '0' then - begin - FTop := StrToInt(Piece(Value,U,2)); - FLeft := StrToInt(Piece(Value,U,3)); - end; -end; - -procedure TSignonValues.SetIntroFont(const Value: String); -begin - FIntroFont := Value; - FFont.Name := Piece(Value,U,1); - FFont.Size := StrToInt(Piece(Value,U,2)); -end; - -procedure TSignonValues.SetIntroFontStyles(const Value: String); -begin - FIntroFontStyles := Value; - if Value <> '' then - FFont.Style := RestoreFontStyles(Value) - else - FFont.Style := []; -end; - -procedure TSignonValues.SetEqual(EqualToValue: TSignonValues); -begin - BackColor := EqualToValue.BackColor; - Font.Name := EqualToValue.Font.Name; - Font.Size := EqualToValue.Font.Size; - FontStyles := EqualToValue.FontStyles; - Height := EqualToValue.Height; - IntroFont := EqualToValue.IntroFont; - IntroFontStyles := EqualToValue.IntroFontStyles; - Left := EqualToValue.Left; - Position := EqualToValue.Position; - Size := EqualToValue.Size; - TextColor := EqualToValue.TextColor; - Top := EqualToValue.Top; - Width := EqualToValue.Width; -end; - -procedure TSignonValues.SetFont(Value: TFont); -begin - FFont := Value; - FIntroFont := Value.Name+U+IntToStr(Value.Size); - FIntroFontStyles := StoreFontStyle(FFont.Style) -end; - -procedure TSignonValues.SetTextColor(Value: LongInt); -begin - FTextColor := Value; - FFont.Color := Value; -end; - -end. diff --git a/BDK32/Source/SharedRPCBroker.dcr b/BDK32/Source/SharedRPCBroker.dcr deleted file mode 100644 index c7f5b76..0000000 Binary files a/BDK32/Source/SharedRPCBroker.dcr and /dev/null differ diff --git a/BDK32/Source/SharedRPCBroker.pas b/BDK32/Source/SharedRPCBroker.pas deleted file mode 100644 index f201b28..0000000 --- a/BDK32/Source/SharedRPCBroker.pas +++ /dev/null @@ -1,769 +0,0 @@ -{ ************************************************************** - Package: XWB - Kernel RPCBroker - Date Created: Sept 18, 1997 (Version 1.1) - Site Name: Oakland, OI Field Office, Dept of Veteran Affairs - Developers: Kevin Meldrum, Travis Hilton, Joel Ivey - Description: Describes TSharedRPCBroker class. - Current Release: Version 1.1 Patch 40 (January 7, 2005)) -*************************************************************** } - -unit SharedRPCBroker; - -interface - -uses - Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, - RPCSharedBrokerSessionMgr1_TLB_SRB, Trpcb, ActiveX, Extctrls; - // TRPCB is only used for data classes like TParams. There is no TRPCBroker dependency. - - -type - TLogout = procedure () of object; - - TOnConnectionDropped = procedure (ConnectionIndex: Integer; ErrorText: WideString) of object; -{ - TOnClientConnected = procedure (uniqueClientId: Integer) of object; - TOnClientDisconnected = procedure (uniqueClientId: Integer) of object; -} - -// TSharedBrokerDataCollector is a data container class that collects all RPC call parameters BEFORE -// an RPC call is made. When the actual RPC call is made all of the parameters are turned into a WideString -// and passed through the Out-of-process COM interface to the TSharedBroker class found in VistASessionMgr.exe. -// After the call the results are put back into Results which is a TStrings class like in TRPCBroker. -// The parameters are stored in a local TParams member just like in TRPCBroker. -// All Connections to the backend Mumps server are done through TSharedBroker which actually instantiates a real -// TRPCBroker and uses it for the connection. - -// Thus this class becomes a Delphi Component that wraps all of the data and keeps performance as high as possible. -// If these calls were to be moved into the VistASessionMgr.exe then there would be two major problems -// 1. Performance suffers when marshaling data across an out-of-process COM connection -// 2. It is impossible to keeps the same Params and Results access interface that exists in TRPCBroker -// since the COM interface will not support structured data. - -{ - Modified 11/27/2001 jli to TSharedRPCBroker from TSharedBrokerDataCollector, - and changed as derived from TRPCBroker instead of TComponent, since other - components have properties which are of Type TRPCBroker and the - TSharedBrokerDataCollector derived from TComponent can't be used as a value - for those properties. -} - - -// TSharedBrokerDataCollector = class(TComponent) - TSharedRPCBroker = class(TRPCBroker) - private -{ FAccessVerifyCodes: TAccessVerifyCodes; - FClearParameters: Boolean; - FClearResults: Boolean; - FConnected: Boolean; - FConnecting: Boolean; - FCurrentContext: String; - FDebugMode: Boolean; - FListenerPort: integer; - FParams: TParams; - FResults: TStrings; - FRemoteProcedure: TRemoteProc; - FRpcVersion: TRpcVersion; - FServer: TServer; - FSocket: integer; - FRPCTimeLimit : integer; //for adjusting client RPC duration timeouts - FPulse : TTimer; //P6 - FKernelLogIn : Boolean; //p13 - FLogIn: TVistaLogIn; //p13 - FUser: TVistaUser; //p13 - FOnRPCBFailure: TOnRPCBFailure; - FShowErrorMsgs: TShowErrorMsgs; - FRPCBError: String; -} - FAllowShared: Boolean; - FVistaSession: ISharedBroker; // TSharedBroker; - FCurrRPCVersion: TRpcVersion; -// FOnLogout: TNotifyEvent; - FOnLogout: TLogout; - FOnConnectionDropped: TOnConnectionDropped; -{ - FOnClientConnected: TOnClientConnected; - FOnClientDisconnected: TOnClientDisconnected; -} - FSinkCookie: LongInt; - FKernelLogin: Boolean; - FRPCTimeLimit: integer; - FSocket: Integer; - FRPCBError: String; - FOnRPCBFailure: TOnRPCBFailure; - FLogin: TVistaLogin; - FUser: TVistaUser; - protected - procedure SetLoginStr(Str: string); virtual; - procedure SetUserStr(Str: String); - procedure SetConnected(Value: Boolean); override; - function GetConnected: Boolean; - procedure SetResults(Value: TStrings); override; - procedure SetClearParameters(Value: Boolean); override; - procedure SetClearResults(Value: Boolean); override; - procedure SetRPCTimeLimit(Value: integer); override; //Screen changes to timeout. -// procedure SetOnLogout(EventHandler: TNotifyEvent); - procedure SetOnLogout(EventHandler: TLogout); - function GetRpcVersion:TRpcVersion; - procedure SetRpcVersion(version: TRpcVersion); - function LoginStr: String; -{ - procedure SetRPC(Value: TRemoteProc); - function GetRPC: TRemoteProc; -} - public - constructor Create(AOwner: TComponent); override; - destructor Destroy; override; -// procedure OnLogoutEventHandlerDefault(Sender: TObject); virtual; - procedure OnLogoutEventHandlerDefault; virtual; - procedure OnConnectionDroppedHandler(ConnectionIndex: Integer; ErrorText: WideString); virtual; - function GetBrokerConnectionIndexFromUniqueClientId(UniqueClientId: Integer): Integer; - - property RPCBError: String read FRPCBError write FRPCBError; - property OnRPCBFailure: TOnRPCBFailure read FOnRPCBFailure write FOnRPCBFailure; - - property User: TVistaUser read FUser write FUser; // jli - property Login: TVistaLogin read FLogin write FLogin; // jli - property OnConnectionDropped: TOnConnectionDropped read FOnConnectionDropped write FOnConnectionDropped; -{ - property OnClientConnected: TOnClientConnected read FOnClientConnected write FOnClientConnected; - property OnClientDisconnected: TOnClientDisconnected read FOnClientDisconnected write FOnClientDisconnected; -} - published - // Call is he invocation entry point of the RPC call. - // The RPC Name, params, server and listener port must all be set up before - // making this call - procedure Call; override; - - // lstCall is similar to the method Call, but puts Results in OutputBuffer - // lstCall actually calls Call so it is really more efficient to use the - // Call method and get the results from the Results property - procedure lstCall(OutputBuffer: TStrings); override; - - // pchCall makes an RPC call and returns the results in a PChar; - // pchCall actually calls the Call method and then converts the results - // to PChar before returning. - // Making a call to Call and then using the Results property to get - // results is more efficient - function pchCall: PChar; override; - - // strCall makes an RPC call and returns the results in a string; - // strCall actually calls the Call method and then converts the results - // to a string before returning. - // Making a call to Call and then using the Results property to get - // results is more efficient - function strCall: string; override; - - // CreateContext sets up the context for the RPC call on the M server - function CreateContext(strContext: string): boolean; override; - - -{ - // Server sets the server name or direct IP address - // Must be set BEFORE making the connection or the default on the system - // will be used - property Server: TServer read FServer write FServer; -} - // AllowShared allows this connection to share with and existing one - // Must be set BEFORE making a connection - property AllowShared: Boolean read FAllowShared write FAllowShared; -{ - // DebugMode turns the debug mode on or off. - // Must be set BEFORE making an RPC Call - property DebugMode: boolean read FDebugMode write FDebugMode default False; - - // ListenerPort sets the listener port on the server - // Must be set BEFORE making a connection - property ListenerPort: integer read FListenerPort write FListenerPort; - - // Param accesses the parameters for the RPC call. - // Set them BEFORE making the RPC call - property Param: TParams read FParams write FParams; - - // Results contains the results of the most recent RPC call - property Results: TStrings read FResults write SetResults; - - // RemoteProcedure sets the name of the RPC to be made - // Set this BEFORE making the Call - property RemoteProcedure: TRemoteProc read FRemoteProcedure1 write FRemoteProcedure1; -// property RemoteProcedure: TRemoteProc read GetRPC write SetRPC; - - // The RpcVersion property is used to tell the M server on the other end of the RPCBroker connection - // which version of the RPC call it is expecting the M server to service. This is for the Client - // to specify. - // Note: This is NOT the version of the RPCBroker! - property RpcVersion: TRpcVersion read GetRpcVersion write SetRpcVersion; - - // ClearParameters clears out the params data if set to true so one can start over easily with - // new parameters - property ClearParameters: boolean read FClearParameters write SetClearParameters; - - // ClearResults clears out the Results data if set to true. This is from legacy code. In - // the current implementation the Results from a recent call overwrite the current Results anyway. - property ClearResults: boolean read FClearResults write SetClearResults; -} - // If Connected is set to True then it makes a BrokerConnection call to the VistASessionMgr. -// property Connected: boolean read FConnected write SetConnected; - property Connected: boolean read GetConnected write SetConnected default False; - - // RPCTimeLimit allows the application to change the network operation timeout prior to a call. - // This may be useful during times when it is known that a certain RPC, by its nature, - // can take a significant amount of time to execute. The value of this property is an - // integer that can not be less than 30 seconds nor greater that 32767 seconds. - // Care should be taken when altering this value, since the network operation will block - // the application until the operation finishes or the timeout is triggered. - property RPCTimeLimit : integer read FRPCTimeLimit write SetRPCTimeLimit; - - // OnLogout sets/gets the OnLogout event handler to be called whenever the VistASessionMgr - // logs out. -// property OnLogout: TNotifyEvent read FOnLogout write SetOnLogout; - property OnLogout: TLogout read FOnLogout write SetOnLogout; - - property Socket: Integer read FSocket; - - property KernelLogin: Boolean read FKernelLogin write FKernelLogin default True; // jli - - end; - -implementation - -uses ComObj, MfunStr, SharedRPCBrokerSink, fRPCBErrMsg; - -const - {Keys} - REG_BROKER = 'Software\Vista\Broker'; - REG_VISTA = 'Software\Vista'; - REG_SIGNON = 'Software\Vista\Signon'; - REG_SERVERS = 'Software\Vista\Broker\Servers'; - - -procedure TSharedRPCBroker.SetLoginStr(Str: string); - - function TorF(Value: String): Boolean; - begin - Result := False; - if Value = '1' then - Result := True; - end; -const - SEP_FS = #28; - SEP_GS = #29; -var - DivStr: String; - StrFS: String; - StrGS: String; - ModeVal: String; - I: Integer; - DivisionList: TStringList; -begin - StrFS := SEP_FS; - StrGS := SEP_GS; - with FLogin do - begin - LoginHandle := Piece(Str,StrFS,1); - NTToken := Piece(Str,StrFS,2); - AccessCode := Piece(Str,StrFS,3); - VerifyCode := Piece(Str,StrFS,4); - Division := Piece(Str,StrFS,5); - ModeVal := Piece(Str,StrFS,6); - DivStr := Piece(Str,StrFS,7); - MultiDivision := TorF(Piece(Str,StrFS,8)); - DUZ := Piece(Str,StrFS,9); - PromptDivision := TorF(Piece(Str,StrFS,10)); - ErrorText := Piece(Str,StrFS,11); - if ModeVal = '1' then - Mode := lmAVCodes - else if ModeVal = '2' then - Mode := lmAppHandle - else if ModeVal = '3' then - Mode := lmNTToken; - if DivStr <> '' then - begin - DivisionList := TStringList.Create; - try - I := 1; - while Piece(DivStr,StrGS,I) <> '' do - begin - DivisionList.Add(Piece(DivStr,StrGS,I)); - Inc(I); - end; // while - DivList.Assign(DivisionList); - finally - DivisionList.Free; - end; - end; - end; // with -end; - -procedure TSharedRPCBroker.SetUserStr(Str: String); -const - SEP_FS = #28; -var - VC: String; - StrFS: String; -begin - StrFS := SEP_FS; - with User do - begin - DUZ := Piece(Str,StrFS,1); - Name := Piece(Str,StrFS,2); - StandardName := Piece(Str,StrFS,3); - Division := Piece(Str,StrFS,4); - VC := Piece(Str,StrFS,5); - Title := Piece(Str,StrFS,6); - ServiceSection := Piece(Str,StrFS,7); - Language := Piece(Str,StrFS,8); - DTime := Piece(Str,StrFS,9); - if VC = '0' then - VerifyCodeChngd := False - else if VC = '1' then - VerifyCodeChngd := True; - end; // with -end; - -function TSharedRPCBroker.LoginStr: string; - function TorF1(Value: Boolean): String; - begin - Result := '0'; - if Value then - Result := '1'; - end; - -const - SEP_FS = #28; - SEP_GS = #29; -var - Str: String; - ModeVal: String; - DivLst: String; - MultiDiv: String; - PromptDiv: String; - StrFS, StrGS: String; -begin - Str := ''; - with FLogin do - begin - StrFS := SEP_FS; - StrGS := SEP_GS; - ModeVal := ''; - if Mode = lmAVCodes then - ModeVal := '1' - else if Mode = lmAppHandle then - ModeVal := '2' - else if Mode = lmNTToken then - ModeVal := '3'; - DivLst := ''; - MultiDiv := TorF1(MultiDivision); - PromptDiv := TorF1(PromptDivision); - Str := LoginHandle + StrFS + NTToken + StrFS + AccessCode + StrFS; - Str := Str + VerifyCode + StrFS + Division + StrFS + ModeVal + StrFS; - Str := Str + DivLst + StrFS + MultiDiv + StrFS + DUZ + StrFS; - Str := Str + PromptDiv + StrFS + ErrorText + StrFS; - end; // with - Result := Str; -end; - // Constructor and Destructor implemented here -constructor TSharedRPCBroker.Create(AOwner: TComponent); -const - ProgID = 'RPCSharedBrokerSessionMgr.Application'; -//var -// brokerError: ISharedBrokerErrorCode; -// regResult: WideString; -begin - inherited Create(AOwner); - FConnected := False; - DebugMode := False; - FParams := TParams.Create(Self); -// FResults := TStringList.Create; - RpcVersion := '0'; - FCurrRpcVersion := '0'; - FRPCTimeLimit := MIN_RPCTIMELIMIT; // MIN_RPCTIMELIMIT comes from TRPCBroker (30 seconds) -// FAllowShared := False; - FOnLogout := OnLogoutEventHandlerDefault; // Supply this one incase the application doesn't - FOnConnectionDropped := OnConnectionDroppedHandler; - Server := ''; - ListenerPort := 0; - - FKernelLogin := True; // jli - FUser := TVistaUser.Create; // jli - FLogin := TVistaLogin.Create(Self); // jli - -// CoInitialize(nil); -{ try - if not (CoInitialize(nil) = S_OK) then - ShowMessage('CoInitialize Problem!'); - except - end; -} -end; - -destructor TSharedRPCBroker.Destroy; -begin - if Connected then // FConnected - begin - Connected := False; - FConnected := False; - end; - FParams.Free; - FParams := nil; -{ - FResults.Free; - FResults := nil; -} - if FVistaSession <> nil then - begin -// FVistaSession.Free; - FVistaSession := nil; - end; -{ - FUser.Free; - FLogin.Free; -} - inherited; -end; - -//procedure TSharedRPCBroker.OnLogoutEventHandlerDefault(Sender: TObject); -procedure TSharedRPCBroker.OnLogoutEventHandlerDefault; -begin - // This event handler will get called if the application that uses - // this component does not supply one. - SendMessage(Application.MainForm.Handle,WM_CLOSE,0,0); -end; - -procedure TSharedRPCBroker.OnConnectionDroppedHandler(ConnectionIndex: Integer; ErrorText: WideString); -var - Str: String; -// BrokerError: EBrokerError; -begin - Str := ErrorText; - RPCBShowErrMsg(ErrorText); -// FConnected := False; - // Raising an error here returns an error 'The Server Threw an exception' back into the server -// BrokerError := EBrokerError.Create(Str); -// raise BrokerError; -end; - -// Published Methods implemented here -procedure TSharedRPCBroker.Call; -const - SEP_FS = #28; - SEP_GS = #29; - SEP_US = #30; - SEP_RS = #31; -var - i, j, ErrCode: Integer; - rpcParams, ASub, AVal: string; - ReturnedResults: WideString; - AnError: EBrokerError; - ErrCode1: ISharedBrokerErrorCode; -begin - try - rpcParams := ''; - if not Connected then Connected := True; - for i := 0 to Pred(Param.Count) do - begin - case Param[i].PType of - literal: rpcParams := rpcParams + 'L' + SEP_FS; - reference: rpcParams := rpcParams + 'R' + SEP_FS; - list: rpcParams := rpcParams + 'M' + SEP_FS; - else rpcParams := rpcParams + 'U' + SEP_FS; - end; {case} - if Param[i].PType = list then - begin - for j := 0 to Pred(Param[i].Mult.Count) do - begin - ASub := Param[i].Mult.Subscript(j); - AVal := Param[i].Mult[ASub]; - rpcParams := rpcParams + ASub + SEP_US + AVal + SEP_RS; - end; - rpcParams := rpcParams + SEP_GS; - end else - begin - rpcParams := rpcParams + Param[i].Value + SEP_GS; - end; {if Param[i]...else} - end; {for i} - if RpcVersion <> FCurrRpcVersion then - FVistaSession.Set_RPCVersion(RPCVersion); - - RPCBError := ''; - - ErrCode1 := FVistaSession.BrokerCall(RemoteProcedure, rpcParams, RPCTimeLimit, ReturnedResults, ErrCode); - - if ClearParameters = true then - Param.Clear; - - if ErrCode1 = Success then - Results.Text := ReturnedResults - else - begin - Results.Text := ''; - RPCBError := FVistaSession.RpcbError; - if Assigned(FOnRPCBFailure) then // p13 - FOnRPCBFailure(Self) // p13 - else if ShowErrorMsgs = semRaise then - begin - AnError := EBrokerError.Create(FRPCBError); - raise AnError; - end - else - exit; - end; {if ErrCode...else} - except - on e: Exception do - begin - AnError := EBrokerError.Create('Error: ' + e.Message); - raise AnError; - end; - end; -end; - -function TSharedRPCBroker.CreateContext(strContext: string): boolean; -var - Intval: Integer; -begin - // hides the RPCBroker CreateContext - if not Connected then SetConnected(TRUE); // FConnected - - Intval := FVistaSession.BrokerSetContext(strContext); - Result := Intval = 1; -end; - -procedure TSharedRPCBroker.lstCall(OutputBuffer: TStrings); -begin - Call; - OutputBuffer.Text := Results.Text; -end; - -function TSharedRPCBroker.pchCall: PChar; -begin - Call; - Result := Results.GetText; -end; - -function TSharedRPCBroker.strCall: string; -begin - Call; - Result := Results.Text; -end; - -procedure TSharedRPCBroker.SetConnected(Value: Boolean); -var - uniqueClientId: Integer; - brokerError: ISharedBrokerErrorCode; - regResult: WideString; - CurrWindow: HWND; - AnError: EBrokerError; - UserStr: String; - RPCError: WideString; - BrokerErrorVal: EBrokerError; - ShowErrMsgs: ISharedBrokerShowErrorMsgs; - LoginStrX: WideString; - SBSink: TSharedRPCBrokerSink; -begin - try - { call connect method for VistaSession } - if Value then - begin - if FVistaSession = nil then - begin - FVistaSession := CreateComObject(CLASS_SharedBroker) as ISharedBroker; // TSharedBroker.Create(self); -// FVistaSession.Connect; - //No need to keep hold of event sink. It will be destroyed - //through interface reference counting when the client - //disconnects from the server in the form's OnDestroy event handler - SBSink := TSharedRPCBrokerSink.Create; - SBSink.Broker := Self; - InterfaceConnect(FVistaSession, ISharedBrokerEvents, SBSink, FSinkCookie); - -// ConnectEvents(FVistaSession); -{ If Assigned(FOnLogout) then - FVistaSession.OnLogout := FOnLogout; - if Assigned(FOnConnectionDropped) then - FVistaSession.OnConnectionDropped := OnConnectionDroppedHandler; -} - regResult := ''; - brokerError := FVistaSession.ReadRegDataDefault(HKLM,REG_BROKER,'ClearParameters','1',regResult); - Assert(brokerError = Success); - - ClearParameters := boolean(StrToInt(regResult)); // FClearParameters - - brokerError := FVistaSession.ReadRegDataDefault(HKLM,REG_BROKER,'ClearResults','1',regResult); - Assert(brokerError = Success); - ClearResults := boolean(StrToInt(regResult)); // FClearResults - -// DebugMode := False; -// FParams := TParams.Create(Self); -// FResults := TStringList.Create; ??? - - if Server = '' then - begin - brokerError := FVistaSession.ReadRegDataDefault(HKLM,REG_BROKER,'Server','BROKERSERVER',regResult); - Assert(brokerError = Success); - Server := regResult; - end; - - if ListenerPort = 0 then - begin - brokerError := FVistaSession.ReadRegDataDefault(HKLM,REG_BROKER,'ListenerPort','9000',regResult); - Assert(brokerError = Success); - ListenerPort := StrToInt(regResult); - end; - - RpcVersion := '0'; // TODO: Remove this when the property is remove. It is UESLESS! - -// FRPCTimeLimit := MIN_RPCTIMELIMIT; // MIN_RPCTIMELIMIT comes from TRPCBroker (30 seconds) -// AllowShared := True; - end; - - if FConnected <> True then // FConnected - begin - // Connect to the M server through the COm Server - CurrWindow := GetActiveWindow; - if AccessVerifyCodes <> '' then // p13 handle as AVCode single signon - begin - Login.AccessCode := Piece(AccessVerifyCodes, ';', 1); - Login.VerifyCode := Piece(AccessVerifyCodes, ';', 2); - Login.Mode := lmAVCodes; - FKernelLogIn := False; - end; - if ShowErrorMsgs = semRaise then - ShowErrMsgs := isemRaise - else - ShowErrMsgs := isemQuiet; - BrokerError := GeneralFailure; - LoginStrX := WideString(LoginStr); - try - brokerError := FVistaSession.BrokerConnect(ParamStr(0),BrokerClient,Server + ':' + IntToStr(ListenerPort), - DebugMode, FAllowShared, FKernelLogin, ShowErrMsgs, RPCTimeLimit, LoginStrX, uniqueClientId, RPCError); - except - end; - FRPCBError := RPCError; - SetLoginStr(LoginStrX); - ShowApplicationAndFocusOK(Application); - SetForegroundWindow(CurrWindow); - if brokerError = Success then - begin - FConnected := True; // FConnected - FSocket := 1; // temporarily handle socket until it can be pulled from Shared Broker; - UserStr := FVistaSession.User; - SetUserStr(UserStr); - end - else - begin - if Assigned(FOnRPCBFailure) then // p13 - FOnRPCBFailure(Self) // p13 - else if ShowErrorMsgs = semRaise then - begin - BrokerErrorVal := EBrokerError.Create(FRPCBError); - raise BrokerErrorVal; - end; - end; - end; - - end else - begin - if FVistaSession<>nil then - begin - if FConnected = true then // FConnected - begin - // Lets make the OnLogout event handler nil to eliminate - // circularity problems before we do the disconnects. - OnLogout := nil; - - FVistaSession.BrokerDisconnect; // Disconnect from the Broker -// FVistaSession.Disconnect; // Disconnect from the COM server - FSocket := 0; // temporarily handle socket until it can be pulled from Shared Broker - end; -// FVistaSession.Free; - InterfaceDisconnect(FVistaSession, ISharedBrokerEvents, FSinkCookie); - FVistaSession := nil; - end; - FConnected := False; // FConnected - end; - except - on e: Exception do - begin - AnError := EBrokerError.Create('Error: ' + e.Message); - raise AnError; - end; - end; -end; - -procedure TSharedRPCBroker.SetResults(Value: TStrings); -begin - Results.Assign(Value); // FResults -end; - -procedure TSharedRPCBroker.SetClearParameters(Value: Boolean); -begin - if Value then Param.Clear; // FParams - FClearParameters := Value; // FClearParameters -end; - -procedure TSharedRPCBroker.SetClearResults(Value: Boolean); -begin - if Value then Results.Clear; // FResults - FClearResults := Value; // FClearResults -end; - -procedure TSharedRPCBroker.SetRPCTimeLimit(Value: integer); -begin - if Value <> RPCTimeLimit then // FRPCTimeLimit - if Value > MIN_RPCTIMELIMIT then - FRPCTimeLimit := Value // FRPCTimeLimit - else - FRPCTimeLimit := MIN_RPCTIMELIMIT; // FRPCTimeLimit -end; - -//procedure TSharedRPCBroker.SetOnLogout(EventHandler: TNotifyEvent); -procedure TSharedRPCBroker.SetOnLogout(EventHandler: TLogout); -begin - FOnLogout := EventHandler; -// if FVistaSession <> nil then -// FVistaSession.OnLogout := FOnLogout; -end; - -function TSharedRPCBroker.GetRpcVersion: TRpcVersion; -begin - if FVistaSession <> nil then Result := FVistaSession.RPCVersion else Result := '0'; -end; - -procedure TSharedRPCBroker.SetRpcVersion(version: TRpcVersion); -begin - if FVistaSession <> nil then FVistaSession.RPCVersion:= version; -end; - -function TSharedRPCBroker.GetConnected: Boolean; -begin - Result := FConnected; -end; - -{ -procedure TSharedRPCBroker.SetRPC(Value: TRemoteProc); -begin - RemoteProcedure := Value; -end; - -function TSharedRPCBroker.GetRPC: TRemoteProc; -begin - Result := FRemoteProcedure1; -end; -} -{ -procedure Register; -begin - RegisterComponents('Kernel', [TSharedBrokerDataCollector]); -end; -} - -function TSharedRPCBroker.GetBrokerConnectionIndexFromUniqueClientId(UniqueClientId: Integer): Integer; -var - ConnectionIndex: Integer; -begin - ConnectionIndex := -1; - if FVistaSession <> nil then - FVistaSession.GetActiveBrokerConnectionIndexFromUniqueClientId(UniqueClientId, ConnectionIndex); - Result := ConnectionIndex; -end; - -end. diff --git a/BDK32/Source/SharedRPCBrokerReg.pas b/BDK32/Source/SharedRPCBrokerReg.pas deleted file mode 100644 index 7d55027..0000000 --- a/BDK32/Source/SharedRPCBrokerReg.pas +++ /dev/null @@ -1,46 +0,0 @@ -{ ************************************************************** - Package: XWB - Kernel RPCBroker - Date Created: Sept 18, 1997 (Version 1.1) - Site Name: Oakland, OI Field Office, Dept of Veteran Affairs - Developers: Danila Manapsal, Don Craven, Joel Ivey - Description: Registers TSharedRPCBroker. - Current Release: Version 1.1 Patch 40 (January 7, 2005)) -*************************************************************** } - - -unit SharedRPCBrokerReg; - -{$I IISBase.inc} - -interface - -procedure Register; - -implementation - -uses Classes, - {$IFDEF D6_OR_HIGHER} - DesignIntf, DesignEditors, DesignMenus, - {$ELSE} - DsgnIntf, - {$ENDIF} - //kt mod 6/29/07 Remove line --> ExptIntf, //Delphi units -{$IFDEF D5_OR_HIGHER} - RPCSharedBrokerSessionMgr1_TLB, //Broker units -{$ENDIF} - SharedRPCBroker; - - -procedure Register; -begin - -{$IFDEF D5_OR_HIGHER} - RegisterComponents('Kernel',[TSharedRPCBroker, TSharedBroker]); -{$ELSE} - RegisterComponents('Kernel',[TSharedRPCBroker]); -{$ENDIF} - -end; - -end. - \ No newline at end of file diff --git a/BDK32/Source/SharedRPCBrokerReg.~pas b/BDK32/Source/SharedRPCBrokerReg.~pas deleted file mode 100644 index cd30bcd..0000000 --- a/BDK32/Source/SharedRPCBrokerReg.~pas +++ /dev/null @@ -1,46 +0,0 @@ -{ ************************************************************** - Package: XWB - Kernel RPCBroker - Date Created: Sept 18, 1997 (Version 1.1) - Site Name: Oakland, OI Field Office, Dept of Veteran Affairs - Developers: Danila Manapsal, Don Craven, Joel Ivey - Description: Registers TSharedRPCBroker. - Current Release: Version 1.1 Patch 40 (January 7, 2005)) -*************************************************************** } - - -unit SharedRPCBrokerReg; - -{$I IISBase.inc} - -interface - -procedure Register; - -implementation - -uses Classes, - {$IFDEF D6_OR_HIGHER} - DesignIntf, DesignEditors, DesignMenus, - {$ELSE} - DsgnIntf, - {$ENDIF} - ExptIntf, //Delphi units -{$IFDEF D5_OR_HIGHER} - RPCSharedBrokerSessionMgr1_TLB, //Broker units -{$ENDIF} - SharedRPCBroker; - - -procedure Register; -begin - -{$IFDEF D5_OR_HIGHER} - RegisterComponents('Kernel',[TSharedRPCBroker, TSharedBroker]); -{$ELSE} - RegisterComponents('Kernel',[TSharedRPCBroker]); -{$ENDIF} - -end; - -end. - \ No newline at end of file diff --git a/BDK32/Source/SharedRPCBrokerSink.pas b/BDK32/Source/SharedRPCBrokerSink.pas deleted file mode 100644 index 2ce9508..0000000 --- a/BDK32/Source/SharedRPCBrokerSink.pas +++ /dev/null @@ -1,136 +0,0 @@ -{ ************************************************************** - Package: XWB - Kernel RPCBroker - Date Created: Sept 18, 1997 (Version 1.1) - Site Name: Oakland, OI Field Office, Dept of Veteran Affairs - Developers: Kevin Meldrum, Travis Hilton, Joel Ivey - Description: Provides Event Sink for - RPCSharedBrokerSessionMgr1. - Current Release: Version 1.1 Patch 40 (January 7, 2005)) -*************************************************************** } - -unit SharedRPCBrokerSink; - -interface -uses - ComObj, SharedRPCBroker; - -type - TSharedRPCBrokerSink = class(TInterfacedObject, IUnknown, IDispatch) - private - FBroker: TSharedRPCBroker; - public - //IUnknown - //Method resolution clause to allow QueryInterface to be redefined - function IUnknown.QueryInterface = QueryInterface; - function QueryInterface(const IID: TGUID; out Obj): HResult; stdcall; - //IDispatch - function GetTypeInfoCount(out Count: Integer): HResult; stdcall; - function GetTypeInfo(Index, LocaleID: Integer; out TypeInfo): HResult; stdcall; - function GetIDsOfNames(const IID: TGUID; Names: Pointer; - NameCount, LocaleID: Integer; DispIDs: Pointer): HResult; stdcall; - function Invoke(DispID: Integer; const IID: TGUID; LocaleID: Integer; - Flags: Word; var Params; VarResult, ExcepInfo, ArgErr: Pointer): HResult; stdcall; - public - property Broker: TSharedRPCBroker read FBroker write FBroker; - end; - -implementation - -uses - Windows, ActiveX, RPCSharedBrokerSessionMgr1_TLB_SRB; - -function TSharedRPCBrokerSink.QueryInterface(const IID: TGUID; out Obj): HResult; -begin - Result := E_NOINTERFACE; - //If events interface requested, return IDispatch - if IsEqualIID(IID, DIID_ISharedBrokerEvents) then - begin - if GetInterface(IDispatch, Obj) then - Result := S_OK - end - else - //Handle other interface requests normally - - if GetInterface(IID, Obj) then - Result := S_OK -end; - -function TSharedRPCBrokerSink.GetIDsOfNames(const IID: TGUID; Names: Pointer; - NameCount, LocaleID: Integer; DispIDs: Pointer): HResult; -begin - Result := E_NOTIMPL -end; - -function TSharedRPCBrokerSink.GetTypeInfo(Index, LocaleID: Integer; - out TypeInfo): HResult; -begin - Result := E_NOTIMPL -end; - -function TSharedRPCBrokerSink.GetTypeInfoCount(out Count: Integer): HResult; -begin - Count := 0; - Result := S_OK -end; - -function TSharedRPCBrokerSink.Invoke(DispID: Integer; const IID: TGUID; - LocaleID: Integer; Flags: Word; var Params; VarResult, ExcepInfo, - ArgErr: Pointer): HResult; -var - Args: PVariantArgList; - ASharedBroker: ISharedBroker; - ConnectionIndex: Integer; - ErrorText: WideString; -// UniqueClientID: Integer; -// BrokerConnectionType: ISharedBrokerConnection; -begin - Result := S_OK; - ConnectionIndex := 0; - // UniqueClientID := -1; - - //This is called to trigger an event interface method, if implemented - //We need to check which one it is (by DispID) and do something sensible if we - //support the triggered event - - //Both event methods happen to have the same parameters, - //so we can extract them just once to save duplication - Args := TDispParams(Params).rgvarg; - //Params are in reverse order: - //Last parameter is at pos. 0 - //First parameter is at pos. cArgs - 1 - If DispID = 1 then - ASharedBroker := IUnknown(OleVariant(Args^[0])) as ISharedBroker; - If DispID = 3 then - begin - // UniqueClientID := OleVariant(Args^[1]); - // BrokerConnectionType := OleVariant(Args^[0]); - end; - if DispID = 4 then - begin - // UniqueClientID := OleVariant(Args^[0]); - end; - If DispId = 8 then - begin - ConnectionIndex := OleVariant(Args^[1]); - ErrorText := OleVariant(Args^[0]); - end; - //This is called to trigger an event interface method, if implemented - //We need to check which one it is (by DispID) and do something sensible if we - //support the triggered event - case DispID of - 1: if Assigned(FBroker.OnLogout) then - FBroker.OnLogout; -{ - 3: if Assigned(FBroker.OnClientConnected) then - FBroker.OnClientConnected(UniqueClientID); - 4: if Assigned(FBroker.OnClientDisconnected) then - FBroker.OnClientDisconnected(UniqueClientID); -} - 8: if Assigned(FBroker.OnConnectionDropped) then - FBroker.OnConnectionDropped(ConnectionIndex, ErrorText); - else - //Ignore other events - end -end; - -end. diff --git a/BDK32/Source/SharedRPCBroker_D50.dof b/BDK32/Source/SharedRPCBroker_D50.dof deleted file mode 100644 index 8f5a9a9..0000000 --- a/BDK32/Source/SharedRPCBroker_D50.dof +++ /dev/null @@ -1,86 +0,0 @@ -[Compiler] -A=1 -B=0 -C=1 -D=1 -E=0 -F=0 -G=1 -H=1 -I=1 -J=1 -K=0 -L=1 -M=0 -N=1 -O=1 -P=1 -Q=0 -R=0 -S=0 -T=0 -U=0 -V=1 -W=0 -X=1 -Y=1 -Z=1 -ShowHints=1 -ShowWarnings=1 -UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; -[Linker] -MapFile=0 -OutputObjs=0 -ConsoleApp=1 -DebugInfo=0 -RemoteSymbols=0 -MinStackSize=16384 -MaxStackSize=1048576 -ImageBase=4194304 -ExeDescription=VistA SharedRPCBroker Components -[Directories] -OutputDir= -UnitOutputDir=..\D5 -PackageDLLOutputDir= -PackageDCPOutputDir= -SearchPath= -Packages=Vcl50;Vclx50;Vcldb50;Vclbde50;VclSmp50;vclado50;ibevnt50;vcldbx50;Qrpt50;TeeUI50;TeeDB50;Tee50;Dss50;TeeQR50;VCLIB50;Vclmid50;vclie50;Inetdb50;Inet50;NMFast50;webmid50;dclocx50;dclaxserver50;JLITestFDE;Rz252N50;Rz252D50;CS20Comps50;CSP20I50;gmunitsd5;gmctrlsd5;gmchrtedd5;gmdaouid5;GMDaod5;gmdbgend5;gmdbctrld5;gmadouid5;GMAdod5;democomponentsd5;XUtilsR50;XUDT_R50;XU_R50;Indy50 -Conditionals= -DebugSourceDirs= -UsePackages=0 -[Parameters] -RunParams= -HostApplication= -[Version Info] -IncludeVerInfo=1 -AutoIncBuild=1 -MajorVer=1 -MinorVer=1 -Release=40 -Build=11 -Debug=0 -PreRelease=0 -Special=0 -Private=0 -DLL=0 -Locale=1033 -CodePage=1252 -[Version Info Keys] -CompanyName=Dept of Veteran Affairs, OI, SD&D -FileDescription=SharedRPCBroker Designtime package -FileVersion=1.1.40.11 -InternalName= -LegalCopyright=(c) 2002-2004 -LegalTrademarks= -OriginalFilename= -ProductName=VistA SharedRPCBroker Components -ProductVersion=1.1.40.0 -Comments= -[Excluded Packages] -$(DELPHI)\Bin\dclite50.bpl=Borland Integrated Translation Environment -[HistoryLists\hlUnitAliases] -Count=1 -Item0=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; -[HistoryLists\hlUnitOutputDirectory] -Count=1 -Item0=..\D5 diff --git a/BDK32/Source/SharedRPCBroker_D50.dpk b/BDK32/Source/SharedRPCBroker_D50.dpk deleted file mode 100644 index c698a2c..0000000 --- a/BDK32/Source/SharedRPCBroker_D50.dpk +++ /dev/null @@ -1,38 +0,0 @@ -package SharedRPCBroker_D50; - -{$R *.RES} -{$R 'SharedRPCBroker.dcr'} -{$ALIGN ON} -{$ASSERTIONS ON} -{$BOOLEVAL OFF} -{$DEBUGINFO ON} -{$EXTENDEDSYNTAX ON} -{$IMPORTEDDATA ON} -{$IOCHECKS ON} -{$LOCALSYMBOLS ON} -{$LONGSTRINGS ON} -{$OPENSTRINGS ON} -{$OPTIMIZATION ON} -{$OVERFLOWCHECKS OFF} -{$RANGECHECKS OFF} -{$REFERENCEINFO ON} -{$SAFEDIVIDE OFF} -{$STACKFRAMES OFF} -{$TYPEDADDRESS OFF} -{$VARSTRINGCHECKS ON} -{$WRITEABLECONST ON} -{$MINENUMSIZE 1} -{$IMAGEBASE $400000} -{$DESCRIPTION 'VistA SharedRPCBroker Components'} -{$DESIGNONLY} -{$IMPLICITBUILD OFF} - -requires - vcl50, - XWB_R50, - SharedRPCBroker_R50; - -contains - SharedRPCBrokerReg in 'SharedRPCBrokerReg.pas'; - -end. diff --git a/BDK32/Source/SharedRPCBroker_D50.res b/BDK32/Source/SharedRPCBroker_D50.res deleted file mode 100644 index 935541e..0000000 Binary files a/BDK32/Source/SharedRPCBroker_D50.res and /dev/null differ diff --git a/BDK32/Source/SharedRPCBroker_D60.dof b/BDK32/Source/SharedRPCBroker_D60.dof deleted file mode 100644 index 2b6ca09..0000000 --- a/BDK32/Source/SharedRPCBroker_D60.dof +++ /dev/null @@ -1,93 +0,0 @@ -[FileVersion] -Version=6.0 -[Compiler] -A=8 -B=0 -C=1 -D=1 -E=0 -F=0 -G=1 -H=1 -I=1 -J=1 -K=0 -L=1 -M=0 -N=1 -O=1 -P=1 -Q=0 -R=0 -S=0 -T=0 -U=0 -V=1 -W=0 -X=1 -Y=1 -Z=1 -ShowHints=1 -ShowWarnings=1 -UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; -[Linker] -MapFile=0 -OutputObjs=0 -ConsoleApp=1 -DebugInfo=0 -RemoteSymbols=0 -MinStackSize=16384 -MaxStackSize=1048576 -ImageBase=4194304 -ExeDescription=VistA SharedBroker Components -[Directories] -OutputDir= -UnitOutputDir=..\D6 -PackageDLLOutputDir= -PackageDCPOutputDir= -SearchPath= -Packages=vcl;rtl;vclx;VclSmp;vclshlctrls;dbrtl;adortl;vcldb;qrpt;bdertl;vcldbx;dsnap;cds;bdecds;teeui;teedb;tee;teeqr;ibxpress;visualclx;visualdbclx;vclie;xmlrtl;inet;inetdbbde;inetdbxpress;inetdb;nmfast;dbexpress;dbxcds;indy;dclOffice2k -Conditionals= -DebugSourceDirs= -UsePackages=0 -[Parameters] -RunParams= -HostApplication= -Launcher= -UseLauncher=0 -DebugCWD= -[Language] -ActiveLang= -ProjectLang= -RootDir=C:\Program Files\Borland\Delphi6\Bin\ -[Version Info] -IncludeVerInfo=1 -AutoIncBuild=1 -MajorVer=1 -MinorVer=1 -Release=40 -Build=11 -Debug=0 -PreRelease=0 -Special=0 -Private=0 -DLL=0 -Locale=1033 -CodePage=1252 -[Version Info Keys] -CompanyName=Dept of Veteran Affairs, VHA, OI, SDD -FileDescription= -FileVersion=1.1.40.11 -InternalName= -LegalCopyright= -LegalTrademarks= -OriginalFilename= -ProductName= -ProductVersion=1.1.40.0 -Comments= -[HistoryLists\hlUnitAliases] -Count=1 -Item0=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; -[HistoryLists\hlUnitOutputDirectory] -Count=1 -Item0=..\D6 diff --git a/BDK32/Source/SharedRPCBroker_D60.dpk b/BDK32/Source/SharedRPCBroker_D60.dpk deleted file mode 100644 index 00d5908..0000000 --- a/BDK32/Source/SharedRPCBroker_D60.dpk +++ /dev/null @@ -1,39 +0,0 @@ -package SharedRPCBroker_D60; - -{$R *.res} -{$R 'SharedRPCBroker.dcr'} -{$ALIGN 8} -{$ASSERTIONS ON} -{$BOOLEVAL OFF} -{$DEBUGINFO ON} -{$EXTENDEDSYNTAX ON} -{$IMPORTEDDATA ON} -{$IOCHECKS ON} -{$LOCALSYMBOLS ON} -{$LONGSTRINGS ON} -{$OPENSTRINGS ON} -{$OPTIMIZATION ON} -{$OVERFLOWCHECKS OFF} -{$RANGECHECKS OFF} -{$REFERENCEINFO ON} -{$SAFEDIVIDE OFF} -{$STACKFRAMES OFF} -{$TYPEDADDRESS OFF} -{$VARSTRINGCHECKS ON} -{$WRITEABLECONST ON} -{$MINENUMSIZE 1} -{$IMAGEBASE $400000} -{$DESCRIPTION 'VistA SharedBroker Components'} -{$DESIGNONLY} -{$IMPLICITBUILD ON} - -requires - vcl, - XWB_R60, - SharedRPCBroker_R60, - designide; - -contains - SharedRPCBrokerReg in 'SharedRPCBrokerReg.pas'; - -end. diff --git a/BDK32/Source/SharedRPCBroker_D60.res b/BDK32/Source/SharedRPCBroker_D60.res deleted file mode 100644 index 8679bdf..0000000 Binary files a/BDK32/Source/SharedRPCBroker_D60.res and /dev/null differ diff --git a/BDK32/Source/SharedRPCBroker_D70.dof b/BDK32/Source/SharedRPCBroker_D70.dof deleted file mode 100644 index 8035f2a..0000000 --- a/BDK32/Source/SharedRPCBroker_D70.dof +++ /dev/null @@ -1,143 +0,0 @@ -[FileVersion] -Version=7.0 -[Compiler] -A=8 -B=0 -C=1 -D=1 -E=0 -F=0 -G=1 -H=1 -I=1 -J=1 -K=0 -L=1 -M=0 -N=1 -O=1 -P=1 -Q=0 -R=0 -S=0 -T=0 -U=0 -V=1 -W=0 -X=1 -Y=1 -Z=1 -ShowHints=1 -ShowWarnings=1 -UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; -NamespacePrefix= -SymbolDeprecated=1 -SymbolLibrary=1 -SymbolPlatform=1 -UnitLibrary=1 -UnitPlatform=1 -UnitDeprecated=1 -HResultCompat=1 -HidingMember=1 -HiddenVirtual=1 -Garbage=1 -BoundsError=1 -ZeroNilCompat=1 -StringConstTruncated=1 -ForLoopVarVarPar=1 -TypedConstVarPar=1 -AsgToTypedConst=1 -CaseLabelRange=1 -ForVariable=1 -ConstructingAbstract=1 -ComparisonFalse=1 -ComparisonTrue=1 -ComparingSignedUnsigned=1 -CombiningSignedUnsigned=1 -UnsupportedConstruct=1 -FileOpen=1 -FileOpenUnitSrc=1 -BadGlobalSymbol=1 -DuplicateConstructorDestructor=1 -InvalidDirective=1 -PackageNoLink=1 -PackageThreadVar=1 -ImplicitImport=1 -HPPEMITIgnored=1 -NoRetVal=1 -UseBeforeDef=1 -ForLoopVarUndef=1 -UnitNameMismatch=1 -NoCFGFileFound=1 -MessageDirective=1 -ImplicitVariants=1 -UnicodeToLocale=1 -LocaleToUnicode=1 -ImagebaseMultiple=1 -SuspiciousTypecast=1 -PrivatePropAccessor=1 -UnsafeType=1 -UnsafeCode=1 -UnsafeCast=1 -[Linker] -MapFile=0 -OutputObjs=0 -ConsoleApp=1 -DebugInfo=0 -RemoteSymbols=0 -MinStackSize=16384 -MaxStackSize=1048576 -ImageBase=4194304 -ExeDescription=VistA SharedBroker Components -[Directories] -OutputDir= -UnitOutputDir=..\D7 -PackageDLLOutputDir= -PackageDCPOutputDir= -SearchPath= -Packages=vcl;rtl;vclx;VclSmp;vclshlctrls;dbrtl;adortl;vcldb;qrpt;bdertl;vcldbx;dsnap;cds;bdecds;teeui;teedb;tee;teeqr;ibxpress;visualclx;visualdbclx;vclie;xmlrtl;inet;inetdbbde;inetdbxpress;inetdb;nmfast;dbexpress;dbxcds;indy;dclOffice2k -Conditionals= -DebugSourceDirs= -UsePackages=0 -[Parameters] -RunParams= -HostApplication= -Launcher= -UseLauncher=0 -DebugCWD= -[Language] -ActiveLang= -ProjectLang= -RootDir=C:\Program Files\Borland\Delphi6\Bin\ -[Version Info] -IncludeVerInfo=1 -AutoIncBuild=1 -MajorVer=1 -MinorVer=1 -Release=40 -Build=11 -Debug=0 -PreRelease=0 -Special=0 -Private=0 -DLL=0 -Locale=1033 -CodePage=1252 -[Version Info Keys] -CompanyName=Dept of Veteran Affairs, OI, SD&D -FileDescription=SharedRPCBroker Designtime package -FileVersion=1.1.40.11 -InternalName= -LegalCopyright=(c) 2002-2004 -LegalTrademarks= -OriginalFilename= -ProductName= -ProductVersion=1.1.40.0 -Comments= -[HistoryLists\hlUnitAliases] -Count=1 -Item0=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; -[HistoryLists\hlUnitOutputDirectory] -Count=2 -Item0=..\D7 -Item1=..\D6 diff --git a/BDK32/Source/SharedRPCBroker_D70.dpk b/BDK32/Source/SharedRPCBroker_D70.dpk deleted file mode 100644 index 67ed764..0000000 --- a/BDK32/Source/SharedRPCBroker_D70.dpk +++ /dev/null @@ -1,39 +0,0 @@ -package SharedRPCBroker_D70; - -{$R *.res} -{$R 'SharedRPCBroker.dcr'} -{$ALIGN 8} -{$ASSERTIONS ON} -{$BOOLEVAL OFF} -{$DEBUGINFO ON} -{$EXTENDEDSYNTAX ON} -{$IMPORTEDDATA ON} -{$IOCHECKS ON} -{$LOCALSYMBOLS ON} -{$LONGSTRINGS ON} -{$OPENSTRINGS ON} -{$OPTIMIZATION ON} -{$OVERFLOWCHECKS OFF} -{$RANGECHECKS OFF} -{$REFERENCEINFO ON} -{$SAFEDIVIDE OFF} -{$STACKFRAMES OFF} -{$TYPEDADDRESS OFF} -{$VARSTRINGCHECKS ON} -{$WRITEABLECONST ON} -{$MINENUMSIZE 1} -{$IMAGEBASE $400000} -{$DESCRIPTION 'VistA SharedBroker Components'} -{$DESIGNONLY} -{$IMPLICITBUILD ON} - -requires - vcl, - XWB_R70, - SharedRPCBroker_R70, - designide; - -contains - SharedRPCBrokerReg in 'SharedRPCBrokerReg.pas'; - -end. diff --git a/BDK32/Source/SharedRPCBroker_D70.res b/BDK32/Source/SharedRPCBroker_D70.res deleted file mode 100644 index ab0f674..0000000 Binary files a/BDK32/Source/SharedRPCBroker_D70.res and /dev/null differ diff --git a/BDK32/Source/SharedRPCBroker_R50.dof b/BDK32/Source/SharedRPCBroker_R50.dof deleted file mode 100644 index 8c9816b..0000000 --- a/BDK32/Source/SharedRPCBroker_R50.dof +++ /dev/null @@ -1,89 +0,0 @@ -[Compiler] -A=1 -B=0 -C=1 -D=1 -E=0 -F=0 -G=1 -H=1 -I=1 -J=1 -K=0 -L=1 -M=0 -N=1 -O=1 -P=1 -Q=0 -R=0 -S=0 -T=0 -U=0 -V=1 -W=0 -X=1 -Y=1 -Z=1 -ShowHints=1 -ShowWarnings=1 -UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; -[Linker] -MapFile=0 -OutputObjs=0 -ConsoleApp=1 -DebugInfo=0 -RemoteSymbols=0 -MinStackSize=16384 -MaxStackSize=1048576 -ImageBase=4194304 -ExeDescription=VistA SharedRPCBroker Components -[Directories] -OutputDir= -UnitOutputDir=..\D5 -PackageDLLOutputDir= -PackageDCPOutputDir= -SearchPath= -Packages=Vcl50;Vclx50;Vcldb50;Vclbde50;VclSmp50;vclado50;ibevnt50;vcldbx50;Qrpt50;TeeUI50;TeeDB50;Tee50;Dss50;TeeQR50;VCLIB50;Vclmid50;vclie50;Inetdb50;Inet50;NMFast50;webmid50;dclocx50;dclaxserver50;JLITestFDE;Rz252N50;Rz252D50;CS20Comps50;CSP20I50;gmunitsd5;gmctrlsd5;gmchrtedd5;gmdaouid5;GMDaod5;gmdbgend5;gmdbctrld5;gmadouid5;GMAdod5;democomponentsd5;XUtilsR50;XUDT_R50;XU_R50;Indy50 -Conditionals= -DebugSourceDirs= -UsePackages=0 -[Parameters] -RunParams= -HostApplication= -[Version Info] -IncludeVerInfo=1 -AutoIncBuild=1 -MajorVer=1 -MinorVer=1 -Release=40 -Build=11 -Debug=0 -PreRelease=0 -Special=0 -Private=0 -DLL=0 -Locale=1033 -CodePage=1252 -[Version Info Keys] -CompanyName=Dept of Veteran Affairs, OI, SD&D -FileDescription=SharedRPCBroker Runtime -FileVersion=1.1.40.11 -InternalName= -LegalCopyright=(c) 2002-2004 -LegalTrademarks= -OriginalFilename= -ProductName=VistA SharedRPCBroker Runtime Package -ProductVersion=1.1.40.0 -Comments= -[Excluded Packages] -$(DELPHI)\Bin\dclite50.bpl=Borland Integrated Translation Environment -[HistoryLists\hlUnitAliases] -Count=1 -Item0=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; -[HistoryLists\hlSearchPath] -Count=1 -Item0=d:\development\bdk32\D5;d:\development\bdk32\source -[HistoryLists\hlUnitOutputDirectory] -Count=1 -Item0=..\D5 diff --git a/BDK32/Source/SharedRPCBroker_R50.dpk b/BDK32/Source/SharedRPCBroker_R50.dpk deleted file mode 100644 index 39d51d6..0000000 --- a/BDK32/Source/SharedRPCBroker_R50.dpk +++ /dev/null @@ -1,40 +0,0 @@ -package SharedRPCBroker_R50; - -{$R *.RES} -{$R 'SharedRPCBroker.dcr'} -{$ALIGN ON} -{$ASSERTIONS ON} -{$BOOLEVAL OFF} -{$DEBUGINFO ON} -{$EXTENDEDSYNTAX ON} -{$IMPORTEDDATA ON} -{$IOCHECKS ON} -{$LOCALSYMBOLS ON} -{$LONGSTRINGS ON} -{$OPENSTRINGS ON} -{$OPTIMIZATION ON} -{$OVERFLOWCHECKS OFF} -{$RANGECHECKS OFF} -{$REFERENCEINFO ON} -{$SAFEDIVIDE OFF} -{$STACKFRAMES OFF} -{$TYPEDADDRESS OFF} -{$VARSTRINGCHECKS ON} -{$WRITEABLECONST ON} -{$MINENUMSIZE 1} -{$IMAGEBASE $400000} -{$DESCRIPTION 'VistA SharedRPCBroker Components'} -{$RUNONLY} -{$IMPLICITBUILD OFF} - -requires - vcl50, - XWB_R50; - -contains - SharedRPCBroker in 'SharedRPCBroker.pas', - RPCSharedBrokerSessionMgr1_TLB in 'RPCSharedBrokerSessionMgr1_TLB.pas', - SharedRPCBrokerSink in 'SharedRPCBrokerSink.pas', - RPCSharedBrokerSessionMgr1_TLB_SRB in 'RPCSharedBrokerSessionMgr1_TLB_SRB.pas'; - -end. diff --git a/BDK32/Source/SharedRPCBroker_R50.res b/BDK32/Source/SharedRPCBroker_R50.res deleted file mode 100644 index 9a81576..0000000 Binary files a/BDK32/Source/SharedRPCBroker_R50.res and /dev/null differ diff --git a/BDK32/Source/SharedRPCBroker_R60.dof b/BDK32/Source/SharedRPCBroker_R60.dof deleted file mode 100644 index ae6f997..0000000 --- a/BDK32/Source/SharedRPCBroker_R60.dof +++ /dev/null @@ -1,94 +0,0 @@ -[FileVersion] -Version=6.0 -[Compiler] -A=8 -B=0 -C=1 -D=1 -E=0 -F=0 -G=1 -H=1 -I=1 -J=1 -K=0 -L=1 -M=0 -N=1 -O=1 -P=1 -Q=0 -R=0 -S=0 -T=0 -U=0 -V=1 -W=0 -X=1 -Y=1 -Z=1 -ShowHints=1 -ShowWarnings=1 -UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; -[Linker] -MapFile=0 -OutputObjs=0 -ConsoleApp=1 -DebugInfo=0 -RemoteSymbols=0 -MinStackSize=16384 -MaxStackSize=1048576 -ImageBase=4194304 -ExeDescription=VistA SharedBroker Components -[Directories] -OutputDir= -UnitOutputDir=..\D6 -PackageDLLOutputDir= -PackageDCPOutputDir= -SearchPath= -Packages=Vcl50;Vclx50;Vcldb50;Vclbde50;VclSmp50;vclado50;ibevnt50;vcldbx50;Qrpt50;TeeUI50;TeeDB50;Tee50;Dss50;TeeQR50;VCLIB50;Vclmid50;vclie50;Inetdb50;Inet50;NMFast50;webmid50;dclocx50;dclaxserver50;JLITestFDE;Rz252N50;Rz252D50;CS20Comps50;CSP20I50;gmunitsd5;gmctrlsd5;gmchrtedd5;gmdaouid5;GMDaod5;gmdbgend5;gmdbctrld5;gmadouid5;GMAdod5;democomponentsd5;XUtilsR50;XUDT_R50;XU_R50;Indy50 -Conditionals= -DebugSourceDirs= -UsePackages=0 -[Parameters] -RunParams= -HostApplication= -Launcher= -UseLauncher=0 -DebugCWD= -[Language] -ActiveLang= -ProjectLang=$00000409 -RootDir= -[Version Info] -IncludeVerInfo=1 -AutoIncBuild=1 -MajorVer=1 -MinorVer=1 -Release=40 -Build=11 -Debug=0 -PreRelease=0 -Special=0 -Private=0 -DLL=0 -Locale=1033 -CodePage=1252 -[Version Info Keys] -CompanyName= -FileDescription= -FileVersion=1.1.40.11 -InternalName= -LegalCopyright= -LegalTrademarks= -OriginalFilename= -ProductName= -ProductVersion=1.1.40.0 -Comments= -[HistoryLists\hlUnitAliases] -Count=1 -Item0=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; -[HistoryLists\hlUnitOutputDirectory] -Count=2 -Item0=..\D6 -Item1=..\D5 diff --git a/BDK32/Source/SharedRPCBroker_R60.dpk b/BDK32/Source/SharedRPCBroker_R60.dpk deleted file mode 100644 index f692a91..0000000 --- a/BDK32/Source/SharedRPCBroker_R60.dpk +++ /dev/null @@ -1,40 +0,0 @@ -package SharedRPCBroker_R60; - -{$R *.res} -{$R 'SharedRPCBroker.dcr'} -{$ALIGN 8} -{$ASSERTIONS ON} -{$BOOLEVAL OFF} -{$DEBUGINFO ON} -{$EXTENDEDSYNTAX ON} -{$IMPORTEDDATA ON} -{$IOCHECKS ON} -{$LOCALSYMBOLS ON} -{$LONGSTRINGS ON} -{$OPENSTRINGS ON} -{$OPTIMIZATION ON} -{$OVERFLOWCHECKS OFF} -{$RANGECHECKS OFF} -{$REFERENCEINFO ON} -{$SAFEDIVIDE OFF} -{$STACKFRAMES OFF} -{$TYPEDADDRESS OFF} -{$VARSTRINGCHECKS ON} -{$WRITEABLECONST ON} -{$MINENUMSIZE 1} -{$IMAGEBASE $400000} -{$DESCRIPTION 'VistA SharedBroker Components'} -{$RUNONLY} -{$IMPLICITBUILD ON} - -requires - vcl, - XWB_R60; - -contains - SharedRPCBroker in 'SharedRPCBroker.pas', - RPCSharedBrokerSessionMgr1_TLB in 'RPCSharedBrokerSessionMgr1_TLB.pas', - SharedRPCBrokerSink in 'SharedRPCBrokerSink.pas', - RPCSharedBrokerSessionMgr1_TLB_SRB in 'RPCSharedBrokerSessionMgr1_TLB_SRB.pas'; - -end. diff --git a/BDK32/Source/SharedRPCBroker_R60.res b/BDK32/Source/SharedRPCBroker_R60.res deleted file mode 100644 index 35eda29..0000000 Binary files a/BDK32/Source/SharedRPCBroker_R60.res and /dev/null differ diff --git a/BDK32/Source/SharedRPCBroker_R70.dof b/BDK32/Source/SharedRPCBroker_R70.dof deleted file mode 100644 index bf00d91..0000000 --- a/BDK32/Source/SharedRPCBroker_R70.dof +++ /dev/null @@ -1,144 +0,0 @@ -[FileVersion] -Version=7.0 -[Compiler] -A=8 -B=0 -C=1 -D=1 -E=0 -F=0 -G=1 -H=1 -I=1 -J=1 -K=0 -L=1 -M=0 -N=1 -O=1 -P=1 -Q=0 -R=0 -S=0 -T=0 -U=0 -V=1 -W=0 -X=1 -Y=1 -Z=1 -ShowHints=1 -ShowWarnings=1 -UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; -NamespacePrefix= -SymbolDeprecated=1 -SymbolLibrary=1 -SymbolPlatform=1 -UnitLibrary=1 -UnitPlatform=1 -UnitDeprecated=1 -HResultCompat=1 -HidingMember=1 -HiddenVirtual=1 -Garbage=1 -BoundsError=1 -ZeroNilCompat=1 -StringConstTruncated=1 -ForLoopVarVarPar=1 -TypedConstVarPar=1 -AsgToTypedConst=1 -CaseLabelRange=1 -ForVariable=1 -ConstructingAbstract=1 -ComparisonFalse=1 -ComparisonTrue=1 -ComparingSignedUnsigned=1 -CombiningSignedUnsigned=1 -UnsupportedConstruct=1 -FileOpen=1 -FileOpenUnitSrc=1 -BadGlobalSymbol=1 -DuplicateConstructorDestructor=1 -InvalidDirective=1 -PackageNoLink=1 -PackageThreadVar=1 -ImplicitImport=1 -HPPEMITIgnored=1 -NoRetVal=1 -UseBeforeDef=1 -ForLoopVarUndef=1 -UnitNameMismatch=1 -NoCFGFileFound=1 -MessageDirective=1 -ImplicitVariants=1 -UnicodeToLocale=1 -LocaleToUnicode=1 -ImagebaseMultiple=1 -SuspiciousTypecast=1 -PrivatePropAccessor=1 -UnsafeType=1 -UnsafeCode=1 -UnsafeCast=1 -[Linker] -MapFile=0 -OutputObjs=0 -ConsoleApp=1 -DebugInfo=0 -RemoteSymbols=0 -MinStackSize=16384 -MaxStackSize=1048576 -ImageBase=4194304 -ExeDescription=VistA SharedBroker Components -[Directories] -OutputDir= -UnitOutputDir=..\D7 -PackageDLLOutputDir= -PackageDCPOutputDir= -SearchPath= -Packages=Vcl50;Vclx50;Vcldb50;Vclbde50;VclSmp50;vclado50;ibevnt50;vcldbx50;Qrpt50;TeeUI50;TeeDB50;Tee50;Dss50;TeeQR50;VCLIB50;Vclmid50;vclie50;Inetdb50;Inet50;NMFast50;webmid50;dclocx50;dclaxserver50;JLITestFDE;Rz252N50;Rz252D50;CS20Comps50;CSP20I50;gmunitsd5;gmctrlsd5;gmchrtedd5;gmdaouid5;GMDaod5;gmdbgend5;gmdbctrld5;gmadouid5;GMAdod5;democomponentsd5;XUtilsR50;XUDT_R50;XU_R50;Indy50 -Conditionals= -DebugSourceDirs= -UsePackages=0 -[Parameters] -RunParams= -HostApplication= -Launcher= -UseLauncher=0 -DebugCWD= -[Language] -ActiveLang= -ProjectLang=$00000409 -RootDir= -[Version Info] -IncludeVerInfo=1 -AutoIncBuild=1 -MajorVer=1 -MinorVer=1 -Release=40 -Build=11 -Debug=0 -PreRelease=0 -Special=0 -Private=0 -DLL=0 -Locale=1033 -CodePage=1252 -[Version Info Keys] -CompanyName=Dept of Veteran Affairs, OI, SD&D -FileDescription=SharedRPCBroker Runtime -FileVersion=1.1.40.11 -InternalName= -LegalCopyright=(c) 2002-2004 -LegalTrademarks= -OriginalFilename= -ProductName= -ProductVersion=1.1.40.0 -Comments= -[HistoryLists\hlUnitAliases] -Count=1 -Item0=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; -[HistoryLists\hlUnitOutputDirectory] -Count=3 -Item0=..\D7 -Item1=..\D6 -Item2=..\D5 diff --git a/BDK32/Source/SharedRPCBroker_R70.dpk b/BDK32/Source/SharedRPCBroker_R70.dpk deleted file mode 100644 index 84b1792..0000000 --- a/BDK32/Source/SharedRPCBroker_R70.dpk +++ /dev/null @@ -1,40 +0,0 @@ -package SharedRPCBroker_R70; - -{$R *.res} -{$R 'SharedRPCBroker.dcr'} -{$ALIGN 8} -{$ASSERTIONS ON} -{$BOOLEVAL OFF} -{$DEBUGINFO ON} -{$EXTENDEDSYNTAX ON} -{$IMPORTEDDATA ON} -{$IOCHECKS ON} -{$LOCALSYMBOLS ON} -{$LONGSTRINGS ON} -{$OPENSTRINGS ON} -{$OPTIMIZATION ON} -{$OVERFLOWCHECKS OFF} -{$RANGECHECKS OFF} -{$REFERENCEINFO ON} -{$SAFEDIVIDE OFF} -{$STACKFRAMES OFF} -{$TYPEDADDRESS OFF} -{$VARSTRINGCHECKS ON} -{$WRITEABLECONST ON} -{$MINENUMSIZE 1} -{$IMAGEBASE $400000} -{$DESCRIPTION 'VistA SharedBroker Components'} -{$RUNONLY} -{$IMPLICITBUILD ON} - -requires - vcl, - XWB_R70; - -contains - SharedRPCBroker in 'SharedRPCBroker.pas', - RPCSharedBrokerSessionMgr1_TLB in 'RPCSharedBrokerSessionMgr1_TLB.pas', - SharedRPCBrokerSink in 'SharedRPCBrokerSink.pas', - RPCSharedBrokerSessionMgr1_TLB_SRB in 'RPCSharedBrokerSessionMgr1_TLB_SRB.pas'; - -end. diff --git a/BDK32/Source/SharedRPCBroker_R70.res b/BDK32/Source/SharedRPCBroker_R70.res deleted file mode 100644 index 4ec9c7d..0000000 Binary files a/BDK32/Source/SharedRPCBroker_R70.res and /dev/null differ diff --git a/BDK32/Source/Splvista.dfm b/BDK32/Source/Splvista.dfm deleted file mode 100644 index 6718ef2..0000000 --- a/BDK32/Source/Splvista.dfm +++ /dev/null @@ -1,7288 +0,0 @@ -object frmVistaSplash: TfrmVistaSplash - Left = 275 - Top = 148 - BorderIcons = [] - BorderStyle = bsNone - ClientHeight = 250 - ClientWidth = 330 - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -13 - Font.Name = 'System' - Font.Style = [] - FormStyle = fsStayOnTop - OldCreateOrder = True - Position = poScreenCenter - Scaled = False - OnCreate = FormCreate - PixelsPerInch = 96 - TextHeight = 16 - object Panel1: TPanel - Left = 0 - Top = 0 - Width = 330 - Height = 250 - Align = alClient - BevelWidth = 5 - BorderStyle = bsSingle - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -13 - Font.Name = 'System' - Font.Style = [] - ParentFont = False - TabOrder = 0 - object Image1: TImage - Left = 5 - Top = 5 - Width = 316 - Height = 236 - Align = alClient - Picture.Data = { - 07544269746D617036840300424D368403000000000036000000280000004001 - 0000F0000000010018000000000000840300C40E0000C40E0000000000000000 - 0000FCFCFCFFFFFFFFFFFFE9E9E9E6E6E6E4E4E4ABABABC6C6C6F4F4F4F7F7F7 - FCFCFCFFFFFFFFFFFFEDEDEDEDEDEDEDEDEDEDEDEDD7D7D7DEDEDEF4F4F4F3F3 - F3F2F2F2F4F4F4F6F6F6F7F7F7F4F4F4F5F5F5F9F9F9F9F9F9F8F8F8F8F8F8FA - FAFAFBFBFBFBFBFBFBFBFBFCFCFCFFFFFFFFFFFFE6E6E6E6E6E6E3E3E3E3E3E3 - E4E4E4E3E3E3E7E7E7EAEAEAEAEAEACFCFCFD5D5D5F1F1F1F5F5F5F5F5F5F7F7 - F7F8F8F8F8F8F8F8F8F8F7F7F7F8F8F8FCFCFCFFFFFFFFFFFFEBEBEBE7E7E7E6 - E6E6E7E7E7E6E6E6E4E4E4DFDFDFE4E4E4EBEBEBD6D6D6DBDBDBF3F3F3FCFCFC - FFFFFFFFFFFFFBFBFBE4E4E4E4E4E4E1E1E1E2E2E2B8B8B8CACACAEEEEEEF0F0 - F0F4F4F4F4F4F4F7F7F7F9F9F9FAFAFAFBFBFBFDFDFDFDFDFDFBFBFBFFFFFFFF - FFFFFFFFFFEAEAEAE8E8E8E6E6E6E5E5E5E7E7E7E9E9E9EAEAEAE8E8E8E9E9E9 - E7E7E7E6E6E6F0F0F0F0F0F0EAEAEAECECECEEEEEEECECECE9E9E9E7E7E7E6E6 - E6E9E9E9EAEAEAEBEBEBEBEBEBEAEAEAEDEDEDEAEAEAE7E7E7D0D0D0BDBDBDE2 - E2E2F5F5F5F8F8F8F8F8F8F8F8F8F9F9F9FAFAFAFEFEFEFBFBFBFFFFFFFFFFFF - F8F8F8E6E6E6E5E5E5E5E5E5E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7ECEC - ECEAEAEAE5E5E5E5E5E5E3E3E3E4E4E4E4E4E4DFDFDFE4E4E4E4E4E4E6E6E6E9 - E9E9E9E9E9E9E9E9E9E9E9E9E9E9D9D9D9E9E9E9D9D9D9D5D5D5F2F2F2F3F3F3 - F6F6F6F8F8F8FFFFFFFFFFFFF9F9F9EAEAEAECECECECECECE7E7E7E7E7E7E7E7 - E7C4C4C4D5D5D5F5F5F5F1F1F1F2F2F2F6F6F6F8F8F8F9F9F9FFFFFFFFFFFFFB - FBFBE9E9E9E2E2E2E5E5E5CCCCCCE4E4E4FFFFFFFDFDFDCCCCCCFFFFFFFFFFFF - BEBEBECFCFCFF4F4F4F4F4F4F7F7F7F8F8F8F7F7F7F7F7F7F9F9F9FCFCFCFCFC - FCFCFCFCF9F9F9FFFFFFFFFFFFF9F9F9EEEEEEE9E9E9E9E9E9E9E9E9E7E7E7BA - BABAD0D0D0F7F7F7FEFEFEFFFFFFFFFFFFFFFFFFE9E9E9E8E8E8C6C6C6D7D7D7 - F1F1F1F4F4F4F9F9F9F9F9F9FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7E7E7 - E7E7E7E7E8E8E8E8E8E8E8E8E8E8E8E8E4E4E4E1E1E1E6E6E6EBEBEBEBEBEBE9 - E9E9EAEAEAECECECEDEDEDEEEEEEECECECECECECECECECECECECEAEAEAEAEAEA - EAEAEAD6D6D6D6D6D6E8E8E8D7D7D7FFFFFFFFFFFFECECECE5E5E5E7E7E7EAEA - EAEAEAEAE5E5E5E7E7E7C7C7C7D4D4D4F8F8F8FAFAFAF9F9F9FFFFFFFEFEFEF8 - F8F8F3F3F3F1F1F1FFFFFFFFFFFFE8E8E8E7E7E7E7E7E7BBBBBBCCCCCCFFFFFF - FFFFFFE6E6E6E7E7E7E4E4E4DEDEDEE3E3E3E9E9E9E9E9E9EAEAEAEAEAEAEAEA - EAEAEAEAE8E8E8E8E8E8E6E6E6E6E6E6E8E8E8E9E9E9E9E9E9E9E9E9E9E9E9FF - FFFFFCFCFCFFFFFFFFFFFFE9E9E9E6E6E6CBCBCB8F8F8FC9C9C9F7F7F7FCFCFC - FFFFFFFFFFFFFFFFFFEDEDEDEDEDEDEDEDEDEDEDEDD6D6D6DDDDDDF4F4F4F4F4 - F4F4F4F4F5F5F5F6F6F6F7F7F7F4F4F4F5F5F5F8F8F8F9F9F9F7F7F7F8F8F8FA - FAFAFBFBFBFBFBFBFBFBFBFBFBFBFFFFFFFFFFFFE6E6E6E6E6E6E4E4E4E5E5E5 - E5E5E5E7E7E7EAEAEAEAEAEADCDCDCC0C0C0D5D5D5F1F1F1F5F5F5F5F5F5F7F7 - F7F9F9F9F8F8F8F8F8F8F7F7F7F8F8F8F9F9F9FFFFFFFAFAFAE9E9E9E6E6E6E6 - E6E6E7E7E7E7E7E7E4E4E4E1E1E1EAEAEAF0F0F0E2E2E2E9E9E9F5F5F5FCFCFC - FAFAFAFFFFFFF8F8F8E2E2E2E1E1E1DFDFDFCACACA939393C2C2C2EAEAEAEEEE - EEF5F5F5F5F5F5F7F7F7FAFAFAFBFBFBFDFDFDFFFFFFFFFFFFFCFCFCFFFFFFFF - FFFFFFFFFFEDEDEDEAEAEAE9E9E9E6E6E6E7E7E7E9E9E9EAEAEAE8E8E8E9E9E9 - E7E7E7E7E7E7F1F1F1F0F0F0EAEAEAECECECEEEEEEECECECE9E9E9E7E7E7E6E6 - E6E9E9E9EAEAEAEBEBEBEBEBEBEAEAEAEDEDEDECECECE9E9E9BCBCBCB7B7B7E1 - E1E1F5F5F5F8F8F8F8F8F8F9F9F9FAFAFAFAFAFAFEFEFEFBFBFBF4F4F4FFFFFF - F8F8F8E6E6E6E5E5E5E5E5E5E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7ECEC - ECEAEAEAE5E5E5E5E5E5E3E3E3E4E4E4E2E2E2DCDCDCE0E0E0E3E3E3E6E6E6E9 - E9E9E9E9E9E9E9E9E9E9E9E9E9E9D9D9D9F5F5F5D9D9D9D5D5D5F2F2F2F3F3F3 - F6F6F6F8F8F8FFFFFFFFFFFFF9F9F9E9E9E9E9E9E9EAEAEAE7E7E7E7E7E7E5E5 - E5C4C4C4D5D5D5F5F5F5F3F3F3F3F3F3F7F7F7F8F8F8F9F9F9FFFFFFFFFFFFFB - FBFBE9E9E9E4E4E4E6E6E6CBCBCBD2D2D2FFFFFFFDFDFDCECECEFFFFFFFFFFFF - D1D1D1E1E1E1F5F5F5F6F6F6F8F8F8F8F8F8F8F8F8FFFFFFFFFFFFFFFFFFFFFF - FFFCFCFCFFFFFFFFFFFFFFFFFFF9F9F9ECECECE7E7E7E8E8E8E9E9E9E8E8E8D7 - D7D7FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9E9E9D7D7D7B5B5B5D6D6D6 - F1F1F1F4F4F4F9F9F9F9F9F9FDFDFDFEFEFEFEFEFEFFFFFFFFFFFFE7E7E7E6E6 - E6E7E7E7E8E8E8E8E8E8E8E8E8E8E8E8E4E4E4E1E1E1E6E6E6DEDEDED0D0D0DC - DCDCEAEAEADFDFDFE1E1E1EDEDEDECECECEBEBEBEBEBEBE9E9E9E7E7E7E9E9E9 - D8D8D8AFAFAFD1D1D1F5F5F5E4E4E4FFFFFFFFFFFFE9E9E9E4E4E4E7E7E7E8E8 - E8E7E7E7E2E2E2DBDBDBB8B8B8D4D4D4F8F8F8FAFAFAF9F9F9FFFFFFFEFEFEF6 - F6F6F1F1F1F1F1F1FFFFFFFFFFFFE8E8E8E7E7E7E7E7E7B7B7B7C6C6C6FFFFFF - FFFFFFE6E6E6E6E6E6E2E2E2DDDDDDE3E3E3E9E9E9E9E9E9EAEAEAEAEAEAEAEA - EAEAEAEAE8E8E8E7E7E7E6E6E6E6E6E6E8E8E8E9E9E9E9E9E9E9E9E9E9E9E9FF - FFFFFCFCFCFCFCFCFDFDFDE8E8E8CCCCCC929292ABABABE0E0E0F8F8F8FDFDFD - FFFFFFFFFFFFFFFFFFF0F0F0EDEDEDEDEDEDE1E1E1C8C8C8DEDEDEF5F5F5F5F5 - F5F5F5F5F6F6F6F7F7F7F7F7F7F6F6F6F7F7F7F9F9F9FAFAFAF8F8F8F9F9F9FB - FBFBFBFBFBFBFBFBFBFBFBFBFBFBFFFFFFFFFFFFE4E4E4E3E3E3E3E3E3E3E3E3 - E6E6E6ECECECECECECECECECD0D0D0CCCCCCE3E3E3F1F1F1F7F7F7F7F7F7F8F8 - F8F9F9F9F8F8F8F8F8F8F8F8F8F8F8F8F9F9F9F6F6F6FFFFFFFAFAFAE5E5E5E5 - E5E5E7E7E7E6E6E6E4E4E4E7E7E7EFEFEFF1F1F1F4F4F4F6F6F6FFFFFFFFFFFF - FFFFFFFDFDFDF4F4F4C6C6C6A8A8A8AAAAAA8B8B8BA5A5A5DCDCDCF0F0F0F3F3 - F3F8F8F8F7F7F7F7F7F7FBFBFBFDFDFDFFFFFFFFFFFFFBFBFBF9F9F9FFFFFFFF - FFFFFFFFFFECECECEAEAEAE8E8E8E6E6E6E7E7E7E9E9E9EAEAEAE8E8E8E9E9E9 - E9E9E9EAEAEAF0F0F0EFEFEFEAEAEAECECECEEEEEEECECECE9E9E9E7E7E7E7E7 - E7E9E9E9E9E9E9EAEAEAEAEAEAEAEAEAEDEDEDECECECE8E8E8BABABACACACAF3 - F3F3F5F5F5F8F8F8F8F8F8F9F9F9F9F9F9F9F9F9FDFDFDF9F9F9F4F4F4FFFFFF - FFFFFFE6E6E6E5E5E5E5E5E5E7E7E7E6E6E6E6E6E6E6E6E6E7E7E7E8E8E8ECEC - ECEAEAEAE5E5E5E5E5E5E3E3E3E3E3E3DDDDDDDADADAE1E1E1E3E3E3E4E4E4E4 - E4E4E4E4E4D7D7D7C8C8C8C9C9C9DADADAFBFBFBEFEFEFFBFBFBFFFFFFF4F4F4 - F6F6F6F6F6F6FFFFFFFFFFFFF8F8F8E9E9E9E9E9E9ECECECEAEAEAE7E7E7E4E4 - E4C7C7C7D6D6D6F5F5F5F4F4F4F4F4F4F7F7F7F8F8F8FAFAFAFFFFFFFFFFFFEC - ECECEAEAEAE4E4E4D5D5D5B7B7B7D1D1D1FFFFFFFFFFFFCECECEFFFFFFFFFFFF - E3E3E3E2E2E2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFF9F9F9EAEAEAEAEAEAE8E8E8EAEAEAE8E8E8E9E9E9EC - ECECFEFEFEFBFBFBFFFFFFFFFFFFFFFFFFFBFBFBEAEAEACACACAC6C6C6E7E7E7 - F3F3F3F7F7F7F8F8F8F8F8F8FBFBFBFCFCFCF8F8F8FFFFFFF8F8F8E7E7E7E8E8 - E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E4E4E4E3E3E3E9E9E9DFDFDFDADADAF3 - F3F3EAEAEAC4C4C4EAEAEAF7F7F7EAEAEAEAEAEADCDCDCCBCBCBCACACACCCCCC - B4B4B4BFBFBFF5F5F5FFFFFFE9E9E9FFFFFFFFFFFFECECECEAEAEAEAEAEAE8E8 - E8E8E8E8E5E5E5CBCBCBBFBFBFE1E1E1F8F8F8FAFAFAFAFAFAFFFFFFFAFAFAF3 - F3F3F1F1F1F1F1F1FFFFFFF9F9F9E8E8E8E7E7E7D2D2D29A9A9AC6C6C6FFFFFF - FBFBFBE4E4E4E3E3E3E1E1E1E1E1E1E6E6E6E9E9E9E9E9E9EAEAEAE9E9E9E9E9 - E9E9E9E9E8E8E8E6E6E6E6E6E6E6E6E6E8E8E8E9E9E9E9E9E9E9E9E9E9E9E9FF - FFFFFCFCFCFCFCFCFDFDFDFAFAFAB2B2B2AAAAAADFDFDFF6F6F6FAFAFAFEFEFE - FFFFFFFFFFFFFFFFFFF1F1F1D3D3D3D5D5D5C8C8C8D2D2D2EAEAEAF5F5F5F5F5 - F5F5F5F5F4F4F4F5F5F5F8F8F8F7F7F7F8F8F8F9F9F9FAFAFAF8F8F8F9F9F9FB - FBFBFBFBFBFBFBFBFBFBFBFCFCFCFFFFFFFFFFFFE6E6E6E3E3E3E4E4E4E6E6E6 - E6E6E6E8E8E8EAEAEAE9E9E9CECECEDADADAF1F1F1F3F3F3F7F7F7F7F7F7F7F7 - F7F8F8F8F8F8F8F8F8F8F7F7F7F8F8F8F8F8F8F7F7F7FFFFFFF9F9F9E4E4E4E6 - E6E6E7E7E7E6E6E6E7E7E7EAEAEAECECECECECECF0F0F0F2F2F2FFFFFFFFFFFF - E4E4E4DCDCDCF7F7F7B3B3B3A6A6A6C4C4C4C4C4C4DEDEDEF7F7F7F7F7F7F7F7 - F7FCFCFCFDFDFDF9F9F9FDFDFDFFFFFFFEFEFEFCFCFCF9F9F9FFFFFFFFFFFFFF - FFFFEFEFEFEAEAEAE9E9E9E6E6E6E6E6E6E6E6E6E7E7E7E9E9E9E8E8E8E9E9E9 - EAEAEAEAEAEAEEEEEEEDEDEDEBEBEBEDEDEDEEEEEEEBEBEBE9E9E9E9E9E9E6E6 - E6E7E7E7E7E7E7E8E8E8E9E9E9E9E9E9EAEAEAE9E9E9E4E4E4B6B6B6C9C9C9F4 - F4F4F7F7F7F8F8F8F8F8F8F9F9F9F8F8F8F9F9F9FAFAFAF8F8F8F5F5F5FFFFFF - F8F8F8E5E5E5E4E4E4E5E5E5E6E6E6E4E4E4E5E5E5E7E7E7E7E7E7E9E9E9EDED - EDE9E9E9E5E5E5E5E5E5E3E3E3E2E2E2DCDCDCDDDDDDE1E1E1D5D5D5C9C9C9CA - CACAD8D8D8CACACAC7C7C7E4E4E4FFFFFFFDFDFDF0F0F0FCFCFCE5E5E5E1E1E1 - F5F5F5F6F6F6FFFFFFFFFFFFF9F9F9EAEAEAEAEAEAEAEAEAE9E9E9E9E9E9E7E7 - E7C8C8C8D6D6D6F5F5F5F5F5F5F4F4F4F5F5F5F9F9F9FBFBFBFFFFFFFFFFFFFC - FCFCE6E6E6D0D0D0B1B1B1C0C0C0E1E1E1FFFFFFFDFDFDCECECEFFFFFFFFFFFF - E3E3E3E2E2E2F9F9F9FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEE9E9E9E8E8 - E8F8F8F8FFFFFFFBFBFBE8E8E8E9E9E9EAEAEAE9E9E9E9E9E9E8E8E8EAEAEAEA - EAEAEAEAEAEAEAEAFFFFFFFFFFFFFCFCFCEAEAEAEAEAEAC8C8C8D5D5D5F4F4F4 - F5F5F5F6F6F6F7F7F7F9F9F9FEFEFEFCFCFCF8F8F8FCFCFCFFFFFFF5F5F5E8E8 - E8E7E7E7E7E7E7E8E8E8E8E8E8E8E8E8E3E3E3E1E1E1E7E7E7DADADACCCCCCF3 - F3F3DFDFDFCFCFCFF5F5F5EBEBEBD1D1D1D0D0D0BEBEBEC9C9C9D7D7D7D7D7D7 - D5D5D5E4E4E4FFFFFFFFFFFFE9E9E9FFFFFFFFFFFFE7E7E7E9E9E9E9E9E9E9E9 - E9E7E7E7E6E6E6C7C7C7D1D1D1F3F3F3F9F9F9FBFBFBFBFBFBFEFEFEF8F8F8F3 - F3F3F1F1F1EDEDEDECECECEFEFEFD2D2D2BBBBBB9E9E9EACACACDFDFDFFBFBFB - F9F9F9E6E6E6E4E4E4E3E3E3E2E2E2E3E3E3E8E8E8E9E9E9E9E9E9EAEAEAEAEA - EAE9E9E9E7E7E7E6E6E6E7E7E7E7E7E7E9E9E9EAEAEAEAEAEAEAEAEAEAEAEAFF - FFFFFCFCFCFCFCFCFDFDFDFCFCFCE4E4E4E2E2E2F7F7F7F8F8F8FBFBFBFCFCFC - FFFFFFFDFDFDFFFFFFEEEEEED1D1D1E0E0E0DEDEDEEAEAEAF5F5F5F5F5F5F5F5 - F5F5F5F5F3F3F3F4F4F4F6F6F6F6F6F6F8F8F8F7F7F7F8F8F8F8F8F8FAFAFAFB - FBFBFBFBFBFBFBFBFBFBFBFDFDFDFFFFFFFFFFFFEAEAEAE5E5E5E5E5E5E7E7E7 - E7E7E7E7E7E7E8E8E8E8E8E8C9C9C9D7D7D7F3F3F3F4F4F4F7F7F7F6F6F6F6F6 - F6F7F7F7F7F7F7F7F7F7F7F7F7F8F8F8F8F8F8F7F7F7F5F5F5FFFFFFF1F1F1E3 - E3E3E7E7E7E8E8E8E9E9E9EAEAEAEAEAEAEBEBEBEAEAEAEAEAEAECECECECECEC - D7D7D7E2E2E2FCFCFCE4E4E4DFDFDFF8F8F8F8F8F8F8F8F8F8F8F8F8F8F8FDFD - FDFFFFFFFFFFFFFDFDFDFEFEFEFDFDFDFBFBFBF9F9F9F8F8F8FFFFFFFFFFFFFF - FFFFEBEBEBE8E8E8E5E5E5E1E1E1E1E1E1E0E0E0E4E4E4E9E9E9E9E9E9E9E9E9 - EAEAEAEAEAEAECECECECECECEAEAEAEAEAEAEBEBEBE9E9E9E6E6E6E6E6E6E4E4 - E4E5E5E5E2E2E2E4E4E4DDDDDDD3D3D3CDCDCDC8C8C8BDBDBDA1A1A1CCCCCCF5 - F5F5F8F8F8F8F8F8F8F8F8F9F9F9F8F8F8F8F8F8F7F7F7F7F7F7F5F5F5F4F4F4 - F4F4F4E5E5E5E5E5E5E5E5E5E4E4E4E5E5E5E6E6E6E7E7E7E8E8E8EAEAEAEAEA - EAE7E7E7E5E5E5E4E4E4E2E2E2DEDEDED7D7D7CCCCCCC4C4C4BABABACACACADA - DADAF3F3F3DEDEDEDBDBDBFFFFFFF9F9F9DFDFDFC8C8C8D3D3D3BCBCBCCCCCCC - F4F4F4FFFFFFFFFFFFFFFFFFECECECEAEAEAEAEAEAEAEAEAEAEAEAECECECE7E7 - E7C9C9C9D8D8D8F4F4F4F5F5F5F3F3F3F4F4F4F7F7F7FBFBFBFEFEFEFFFFFFFF - FFFFD1D1D1ACACACBEBEBEE1E1E1F3F3F3F8F8F8FBFBFBCECECEFDFDFDFFFFFF - E0E0E0E2E2E2EAEAEAEDEDEDFBFBFBFEFEFEF3F3F3EEEEEEE9E9E9E9E9E9E7E7 - E7E7E7E7E6E6E6E7E7E7E7E7E7E9E9E9EAEAEAE9E9E9E7E7E7E9E9E9EDEDEDEB - EBEBECECECECECECEDEDEDECECECE8E8E8E9E9E9D7D7D7B5B5B5D4D4D4F2F2F2 - F5F5F5F5F5F5F8F8F8FCFCFCFEFEFEFCFCFCF8F8F8F8F8F8FFFFFFFFFFFFE7E7 - E7E7E7E7E7E7E7E8E8E8E6E6E6E3E3E3CBCBCBBABABAC2C2C2BABABAC6C6C6E7 - E7E7EAEAEAE9E9E9F5F5F5E9E9E9DCDCDCDBDBDBDADADAE7E7E7F5F5F5F5F5F5 - F5F5F5F5F5F5FFFFFFFFFFFFF7F7F7F9F9F9F7F7F7E3E3E3E6E6E6E9E9E9E8E8 - E8E7E7E7E8E8E8DCDCDCFBFBFBFFFFFFFFFFFFFCFCFCFBFBFBFBFBFBF5F5F5F3 - F3F3EFEFEFECECECECECECF1F1F1DADADAC5C5C5C4C4C4DCDCDCF7F7F7FAFAFA - F8F8F8F8F8F8D7D7D7C1C1C1D1D1D1E4E4E4E8E8E8E9E9E9E9E9E9EAEAEAE9E9 - E9E7E7E7E8E8E8E6E6E6E7E7E7E9E9E9EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAFF - FFFFFEFEFEFEFEFEFEFEFEFCFCFCFBFBFBF9F9F9F8F8F8F8F8F8F8F8F8F9F9F9 - FCFCFCFCFCFCFFFFFFE0E0E0DEDEDEF5F5F5F3F3F3F3F3F3F3F3F3F3F3F3F3F3 - F3F3F3F3F1F1F1F5F5F5F7F7F7F7F7F7F8F8F8F7F7F7F7F7F7FAFAFAFAFAFAFA - FAFAFBFBFBFBFBFBFBFBFBFFFFFFFFFFFFFFFFFFEBEBEBE6E6E6E6E6E6E7E7E7 - E7E7E7E7E7E7E7E7E7E7E7E7D7D7D7E6E6E6F5F5F5F5F5F5F5F5F5F6F6F6F5F5 - F5F7F7F7F7F7F7F7F7F7F7F7F7F9F9F9F8F8F8F7F7F7F7F7F7FFFFFFFFFFFFEA - EAEAECECECEBEBEBEBEBEBEAEAEAEAEAEAEAEAEAEDEDEDEDEDEDEDEDEDEDEDED - EDEDEDD3D3D3EAEAEAFCFCFCF7F7F7F8F8F8F8F8F8F8F8F8F8F8F8FFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFBFBFBFDFDFDFBFBFBF9F9F9F8F8F8F8F8F8FBFBFBD7 - D7D7D0D0D0E3E3E3CCCCCCB4B4B4B8B8B8C0C0C0D6D6D6E9E9E9EAEAEAE9E9E9 - EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAECECECECECECEAEAEAE8E8E8E8E8E8E6E6 - E6E1E1E1D7D7D7D1D1D1C8C8C8CDCDCDD1D1D1D2D2D2D0D0D0D0D0D0E4E4E4F8 - F8F8F9F9F9F9F9F9F9F9F9FAFAFAF8F8F8F7F7F7F7F7F7F6F6F6F5F5F5F4F4F4 - F4F4F4FFFFFFF3F3F3E4E4E4E5E5E5E6E6E6E7E7E7E7E7E7E9E9E9E9E9E9E9E9 - E9E7E7E7E4E4E4E2E2E2DEDEDED7D7D7C8C8C8AFAFAFC5C5C5DADADAEAEAEAFF - FFFFFFFFFFECECECDCDCDCF5F5F5E8E8E8D9D9D9D2D2D2DFDFDFBBBBBBCCCCCC - F4F4F4FFFFFFFFFFFFFAFAFAECECECEAEAEAEAEAEAEBEBEBEDEDEDEEEEEEE9E9 - E9CBCBCBD7D7D7F3F3F3F3F3F3F1F1F1F4F4F4F7F7F7F9F9F9F9F9F9FFFFFFE5 - E5E5A8A8A8B8B8B8E1E1E1F3F3F3F7F7F7FAFAFAFDFDFDEEEEEEFCFCFCECECEC - D1D1D1E1E1E1E9E9E9EBEBEBEAEAEAF0F0F0EFEFEFEAEAEAE9E9E9E9E9E9E7E7 - E7E7E7E7E3E3E3E2E2E2E7E7E7E9E9E9EAEAEAE9E9E9EAEAEAEDEDEDEFEFEFEF - EFEFEEEEEEECECECE9E9E9E9E9E9E4E4E4E2E2E2C2C2C2C1C1C1E4E4E4F4F4F4 - F7F7F7F7F7F7F8F8F8FBFBFBFCFCFCFBFBFBF8F8F8F8F8F8FFFFFFEAEAEAD2D2 - D2E4E4E4E4E4E4E2E2E2DEDEDEDFDFDFB8B8B8BABABAD7D7D7DCDCDCE4E4E4F4 - F4F4F7F7F7F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F3F3F3F3F3F3F3F3F3 - F2F2F2F3F3F3F5F5F5FFFFFFF7F7F7ECECECE6E6E6E2E2E2E6E6E6E8E8E8E7E7 - E7E9E9E9EAEAEAEDEDEDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF6F6F6F5 - F5F5F3F3F3F1F1F1F5F5F5F6F6F6F3F3F3F1F1F1F4F4F4F8F8F8FDFDFDFCFCFC - F8F8F8F9F9F9E7E7E7D1D1D1F0F0F0F7F7F7E9E9E9E9E9E9E9E9E9E9E9E9E7E7 - E7E8E8E8E8E8E8E5E5E5E7E7E7E9E9E9E9E9E9E9E9E9E9E9E9EAEAEAEAEAEAFF - FFFFFEFEFEFEFEFEFDFDFDFCFCFCFCFCFCFBFBFBF9F9F9F9F9F9F8F8F8FBFBFB - FDFDFDFCFCFCFFFFFFFDFDFDECECECF7F7F7F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F9F9F9F8F8F8F8F8F8F5F5F5F6F6F6F8F8F8F9F9F9F9F9F9F9 - F9F9FBFBFBFBFBFBFDFDFDFFFFFFFFFFFFFFFFFFEBEBEBE9E9E9E9E9E9EBEBEB - E9E9E9E7E7E7E7E7E7E7E7E7E7E7E7D7D7D7E4E4E4F4F4F4F3F3F3F4F4F4F6F6 - F6F6F6F6F7F7F7F7F7F7F7F7F7F9F9F9F8F8F8F7F7F7F7F7F7FFFFFFFDFDFDF0 - F0F0EFEFEFECECECECECECEAEAEAE9E9E9EAEAEAEAEAEAEAEAEAEAEAEAEAEAEA - EAEAEABDBDBDD1D1D1F9F9F9F5F5F5F7F7F7F8F8F8F8F8F8FDFDFDFFFFFFFFFF - FFFFFFFFFFFFFFF7F7F7F9F9F9FBFBFBF9F9F9FAFAFAF9F9F9F8F8F8F8F8F8E5 - E5E5DDDDDDCBCBCB989898AFAFAFCCCCCCD3D3D3E6E6E6EAEAEAEAEAEAE8E8E8 - E9E9E9EAEAEAEAEAEAE9E9E9E9E9E9ECECECECECECEAEAEAE9E9E9EAEAEAE8E8 - E8E1E1E1D0D0D0D0D0D0DBDBDBE7E7E7EFEFEFF2F2F2F5F5F5F5F5F5FFFFFFFF - FFFFFFFFFFFFFFFFF9F9F9F8F8F8F8F8F8F7F7F7F6F6F6F6F6F6F5F5F5F5F5F5 - F1F1F1FEFEFEF5F5F5E5E5E5E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E8E8E8E6E6 - E6E5E5E5E2E2E2DFDFDFD9D9D9C8C8C8ADADADC1C1C1E5E5E5F5F5F5F5F5F5FF - FFFFFFFFFFECECECE9E9E9F5F5F5F4F4F4F3F3F3F2F2F2F0F0F0DCDCDCDCDCDC - F1F1F1FFFFFFFFFFFFFCFCFCECECECECECECEDEDEDEFEFEFEEEEEEEDEDEDEAEA - EADBDBDBE7E7E7F4F4F4F4F4F4F5F5F5F7F7F7F7F7F7F9F9F9F7F7F7F3F3F3DC - DCDCCBCBCBDDDDDDF1F1F1F6F6F6F8F8F8FBFBFBFEFEFEFCFCFCFBFBFBE7E7E7 - E2E2E2D9D9D9DCDCDCEAEAEAEAEAEAEFEFEFEDEDEDE8E8E8E9E9E9E8E8E8E7E7 - E7E6E6E6DFDFDFE2E2E2E7E7E7E7E7E7E8E8E8E8E8E8EAEAEAEDEDEDEEEEEEED - EDEDECECECE8E8E8E7E7E7E6E6E6E1E1E1D1D1D1B4B4B4D3D3D3F6F6F6FAFAFA - F9F9F9F8F8F8F8F8F8F9F9F9F9F9F9F9F9F9F8F8F8F8F8F8F9F9F9E8E8E8F8F8 - F8F9F9F9E3E3E3E1E1E1E1E1E1E5E5E5C3C3C3D5D5D5FBFBFBFDFDFDF8F8F8F4 - F4F4F9F9F9F7F7F7F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F2F2F2F3F3F3F1F1F1 - F0F0F0F4F4F4F5F5F5FFFFFFFFFFFFEBEBEBE3E3E3E3E3E3E7E7E7E7E7E7E8E8 - E8EAEAEAEAEAEAECECECEFEFEFF1F1F1F0F0F0FFFFFFFFFFFFF7F7F7F6F6F6F7 - F7F7F4F4F4F5F5F5F8F8F8F8F8F8F8F8F8F8F8F8F9F9F9FAFAFAF9F9F9F6F6F6 - F5F5F5F7F7F7F8F8F8F6F6F6FFFFFFEBEBEBCBCBCBCCCCCCCCCCCCCCCCCCCBCB - CBCCCCCCDADADAD3D3D3D6D6D6EAEAEAEAEAEAEAEAEAEBEBEBEAEAEAEAEAEAFF - FFFFFFFFFFFEFEFEFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9FFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F5F5F7F7F7F7F7F7F6F6F6F6F6 - F6F7F7F7F8F8F8FAFAFAF8F8F8F5F5F5F7F7F7FBFBFBFBFBFBF8F8F8F9F9F9F9 - F9F9FCFCFCFEFEFEFFFFFFFFFFFFFFFFFFFEFEFEEAEAEAE9E9E9EAEAEAEDEDED - EAEAEAE7E7E7E7E7E7E9E9E9E9E9E9D7D7D7E2E2E2F3F3F3F2F2F2F2F2F2F5F5 - F5F4F4F4F4F4F4F7F7F7F7F7F7F7F7F7F8F8F8F7F7F7F7F7F7F9F9F9FFFFFFF8 - F8F8ECECECECECECEBEBEBE9E9E9E9E9E9E9E9E9E8E8E8E7E7E7E7E7E7E7E7E7 - E7E7E7BBBBBBCECECEF7F7F7F5F5F5F8F8F8FAFAFAFAFAFAFFFFFFFFFFFFFFFF - FFF7F7F7EAEAEAEAEAEAEDEDEDFFFFFFFEFEFEFFFFFFFFFFFFFFFFFFF9F9F9F9 - F9F9F6F6F6E0E0E0C9C9C9DFDFDFF4F4F4F6F6F6F6F6F6F7F7F7EBEBEBE7E7E7 - E9E9E9EAEAEAE8E8E8E9E9E9E9E9E9EBEBEBEAEAEAEAEAEAE9E9E9EAEAEAEAEA - EAE6E6E6D7D7D7DFDFDFF1F1F1F5F5F5F5F5F5F5F5F5F5F5F5FFFFFFFFFFFFFF - FFFFFFFFFFECECECE7E7E7F7F7F7F7F7F7F6F6F6F5F5F5F5F5F5F5F5F5F5F5F5 - F4F4F4FFFFFFFFFFFFFBFBFBECECECE8E8E8E7E7E7E7E7E7E7E7E7E7E7E7E6E6 - E6E5E5E5DFDFDFDBDBDBDBDBDBBFBFBFC0C0C0E4E4E4F6F6F6F6F6F6F5F5F5FF - FFFFFFFFFFECECECECECECF4F4F4F1F1F1EFEFEFEEEEEEEEEEEEECECECEFEFEF - F2F2F2FFFFFFFFFFFFFBFBFBEAEAEAEBEBEBEEEEEEEFEFEFECECECEAEAEAE9E9 - E9E9E9E9E7E7E7F3F3F3F4F4F4F4F4F4F3F3F3F3F3F3F7F7F7F2F2F2F0F0F0F0 - F0F0F1F1F1F4F4F4F5F5F5F7F7F7F8F8F8FAFAFAFDFDFDFAFAFAF7F7F7F5F5F5 - F4F4F4E5E5E5E4E4E4D9D9D9DADADAECECECECECECE8E8E8E8E8E8E7E7E7E4E4 - E4E1E1E1E1E1E1E3E3E3E4E4E4E2E2E2E7E7E7E8E8E8EAEAEAEDEDEDECECECED - EDEDEEEEEEEAEAEAE7E7E7E6E6E6D1D1D1B1B1B1C1C1C1E3E3E3F8F8F8FFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F8F8F8F9F9F9FBFBFBFBFBFBFFFF - FFFBFBFBE5E5E5E4E4E4E8E8E8EAEAEAC8C8C8D7D7D7FBFBFBFDFDFDF7F7F7F4 - F4F4FBFBFBF9F9F9F5F5F5F5F5F5F5F5F5F6F6F6F5F5F5FDFDFDFFFFFFF4F4F4 - F1F1F1F5F5F5F7F7F7FFFFFFFFFFFFEBEBEBE7E7E7E6E6E6E7E7E7E7E7E7E9E9 - E9EAEAEAEBEBEBEDEDEDEFEFEFF1F1F1EEEEEEECECECEAEAEAD3D3D3E4E4E4F7 - F7F7F4F4F4F7F7F7F9F9F9F8F8F8F8F8F8F8F8F8F9F9F9F9F9F9F7F7F7F5F5F5 - F5F5F5F7F7F7F7F7F7F7F7F7F7F7F7E7E7E7D7D7D7D7D7D7D7D7D7D7D7D7D6D6 - D6D6D6D6E2E2E2C4C4C4D7D7D7DEDEDEDCDCDCE7E7E7E7E7E7E9E9E9E8E8E8FF - FFFFFFFFFFFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFBFBFBFCFCFCF9F9F9FFFFFFFFFFFFF7F7F7F5F5F5F7F7 - F7F7F7F7F9F9F9FAFAFAF8F8F8F7F7F7F8F8F8FCFCFCFBFBFBFDFDFDFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBEBEBEAEAEAE9E9E9E8E8E8ECECEC - EAEAEAE7E7E7E7E7E7E9E9E9E9E9E9E7E7E7D4D4D4E2E2E2F2F2F2F1F1F1F3F3 - F3F4F4F4F5F5F5F7F7F7F7F7F7F8F8F8F9F9F9F7F7F7F7F7F7F7F7F7FFFFFFEA - EAEAD0D0D0CCCCCCDBDBDBE9E9E9EAEAEAE9E9E9E7E7E7E7E7E7E7E7E7E7E7E7 - E7E7E7BCBCBCD1D1D1FAFAFAF7F7F7F8F8F8F9F9F9F9F9F9FFFFFFFFFFFFF8F8 - F8EAEAEAEAEAEADFDFDFD1D1D1DADADADADADAF6F6F6F8F8F8D7D7D7E5E5E5F8 - F8F8F8F8F8F7F7F7F8F8F8F8F8F8F8F8F8F8F8F8F7F7F7F8F8F8FFFFFFF7F7F7 - ECECECEAEAEAE9E9E9EAEAEAEBEBEBEBEBEBEBEBEBEAEAEAEAEAEAEAEAEAE9E9 - E9EAEAEAE4E4E4E8E8E8F2F2F2F5F5F5F5F5F5F5F5F5FFFFFFFFFFFFFFFFFFF8 - F8F8EAEAEAD9D9D9E6E6E6F6F6F6F7F7F7F5F5F5F4F4F4F3F3F3F3F3F3F4F4F4 - F4F4F4FFFFFFFFFFFFFEFEFEEEEEEEE8E8E8E7E7E7E7E7E7E7E7E7E7E7E7E7E7 - E7E4E4E4E1E1E1DEDEDEE2E2E2C2C2C2D0D0D0F3F3F3F6F6F6F7F7F7F7F7F7FF - FFFFFFFFFFECECECDEDEDECECECEE0E0E0EEEEEEF0F0F0F1F1F1F1F1F1F4F4F4 - F7F7F7F8F8F8FFFFFFFDFDFDECECECEEEEEEEDEDEDEAEAEAE9E9E9E9E9E9E9E9 - E9E8E8E8E4E4E4E6E6E6FFFFFFFFFFFFF4F4F4F3F3F3F5F5F5F4F4F4F4F4F4F5 - F5F5F5F5F5F7F7F7F7F7F7FAFAFAFCFCFCFCFCFCFDFDFDFAFAFAF7F7F7F7F7F7 - F7F7F7F4F4F4F3F3F3E6E6E6E7E7E7DBDBDBDADADAE7E7E7E6E6E6E4E4E4E2E2 - E2CFCFCFB9B9B9B2B2B2AFAFAFB3B3B3D3D3D3EBEBEBEFEFEFF0F0F0EDEDEDF1 - F1F1F0F0F0EAEAEAE5E5E5E3E3E3BFBFBFBCBCBCDFDFDFF5F5F5FFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8F8F7F7 - F7F7F7F7DADADAC8C8C8CACACAD9D9D9C8C8C8D7D7D7F8F8F8F9F9F9F6F6F6F4 - F4F4F9F9F9F7F7F7F5F5F5F5F5F5F6F6F6FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1 - F1F1F1F5F5F5F7F7F7FFFFFFFFFFFFE9E9E9E4E4E4E3E3E3E6E6E6E6E6E6E9E9 - E9EBEBEBEDEDEDEEEEEEF1F1F1EEEEEEEAEAEAE9E9E9E9E9E9D5D5D5E2E2E2F5 - F5F5F5F5F5F7F7F7F5F5F5F6F6F6F8F8F8F8F8F8F9F9F9F8F8F8F7F7F7F9F9F9 - F7F7F7F7F7F7F7F7F7F8F8F8F7F7F7F8F8F8F7F7F7F3F3F3F4F4F4F1F1F1F0F0 - F0F0F0F0F0F0F0E1E1E1E6E6E6EAEAEAE6E6E6D6D6D6C8C8C8C8C8C8C5C5C5FF - FFFFFBFBFBFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7E4E4E4E5E5E5F9F9F9F9F9F9 - E4E4E4E6E6E6E8E8E8E8E8E8E9E9E9E7E7E7F7F7F7E9E9E9E5E5E5F4F4F4F7F7 - F7FAFAFAFBFBFBFAFAFAF9F9F9F8F8F8F8F8F8FFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFECECECEEEEEEFFFFFFFFFFFFD9D9D9C6C6C6C5C5C5C2C2C2C1C1C1D7D7D7 - EAEAEAE9E9E9E7E7E7EAEAEAEAEAEAE6E6E6D2D2D2E1E1E1EFEFEFF0F0F0F4F4 - F4F6F6F6F8F8F8F8F8F8F9F9F9FCFCFCFAFAFAF7F7F7F7F7F7F6F6F6F5F5F5E9 - E9E9DDDDDDDCDCDCF9F9F9FAFAFAEDEDEDEAEAEAE7E7E7E7E7E7E7E7E7E4E4E4 - DFDFDFB7B7B7D0D0D0F5F5F5F3F3F3F7F7F7F9F9F9F9F9F9FFFFFFFFFFFFEAEA - EAEAEAEAE9E9E9DADADAD3D3D3D5D5D5D8D8D8E6E6E6E2E2E2CFCFCFE2E2E2F8 - F8F8F8F8F8FAFAFAFDFDFDFBFBFBF8F8F8F7F7F7F7F7F7FAFAFAFFFFFFFFFFFF - ECECECE9E9E9E9E9E9EBEBEBEBEBEBEBEBEBEBEBEBECECECECECECEAEAEAE9E9 - E9ECECECEAEAEAD7D7D7E2E2E2F4F4F4F5F5F5F5F5F5FFFFFFFFFFFFF8F8F8EC - ECECEBEBEBEAEAEADADADAE6E6E6F5F5F5F5F5F5F2F2F2F3F3F3F5F5F5F8F8F8 - FFFFFFFFFFFFFFFFFFF0F0F0EDEDEDE9E9E9E8E8E8E7E7E7E7E7E7E6E6E6E3E3 - E3E2E2E2E3E3E3E6E6E6E7E7E7C3C3C3D3D3D3F5F5F5F7F7F7F7F7F7F6F6F6FF - FFFFFBFBFBEDEDEDDFDFDFE9E9E9F1F1F1F1F1F1F5F5F5F5F5F5F6F6F6F7F7F7 - F8F8F8F8F8F8FFFFFFFDFDFDEDEDEDEDEDEDEAEAEAE9E9E9E8E8E8E9E9E9E8E8 - E8E8E8E8E6E6E6E7E7E7F7F7F7FAFAFAF1F1F1F3F3F3F7F7F7F7F7F7F7F7F7F8 - F8F8FAFAFAFCFCFCFAFAFAFAFAFAFCFCFCFBFBFBFAFAFAF8F8F8F7F7F7F7F7F7 - F7F7F7F7F7F7F4F4F4F3F3F3F0F0F0E1E1E1E0E0E0D3D3D3D5D5D5E4E4E4CCCC - CC9E9E9EA9A9A9BBBBBBC6C6C6CECECEECECECF1F1F1F1F1F1F0F0F0EEEEEEF0 - F0F0EAEAEAE4E4E4E2E2E2E2E2E2CFCFCFDEDEDEF4F4F4FFFFFFFFFFFFFFFFFF - F9F9F9E9E9E9E9E9E9EAEAEAFCFCFCFFFFFFFFFFFFFFFFFFFCFCFCF9F9F9FAFA - FAFBFBFBEBEBEBD8D8D8D7D7D7E6E6E6CCCCCCD9D9D9F7F7F7F8F8F8F7F7F7F6 - F6F6F7F7F7F9F9F9F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7DADADA - E6E6E6F7F7F7F8F8F8FFFFFFFAFAFAE0E0E0DFDFDFE3E3E3E6E6E6ECECECF1F1 - F1F0F0F0EFEFEFF1F1F1EFEFEFEAEAEAE8E8E8E9E9E9E8E8E8D5D5D5BEBEBEE1 - E1E1F4F4F4F3F3F3F5F5F5F6F6F6F8F8F8F8F8F8F8F8F8F7F7F7F6F6F6F5F5F5 - F3F3F3F3F3F3F4F4F4F7F7F7F8F8F8F8F8F8F5F5F5F3F3F3F4F4F4F0F0F0EFEF - EFEEEEEEF0F0F0F0F0F0F4F4F4F7F7F7F5F5F5E5E5E5D7D7D7D6D6D6D3D3D3FF - FFFFF9F9F9FFFFFFFFFFFFFFFFFFE6E6E6E4E4E4E4E4E4E2E2E2CACACA989898 - C9C9C9D9D9D9D9D9D9E8E8E8E9E9E9E7E7E7E5E5E5D3D3D3F3F3F3FFFFFFF9F9 - F9FCFCFCFBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9 - F9F9D1D1D1FBFBFBFFFFFFFFFFFFC1C1C1BEBEBECFCFCFD0D0D0D1D1D1F6F6F6 - FDFDFDE9E9E9E6E6E6E9E9E9E7E7E7E2E2E2E1E1E1D4D4D4E0E0E0F1F1F1F6F6 - F6F7F7F7F7F7F7F8F8F8FBFBFBFCFCFCF9F9F9F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F8F8F8FBFBFBFFFFFFFDFDFDEEEEEEE9E9E9E5E5E5E6E6E6E3E3E3DCDCDC - D0D0D0AEAEAED1D1D1F4F4F4F4F4F4F7F7F7FAFAFAFCFCFCFFFFFFFFFFFFEAEA - EAE8E8E8E4E4E4D7D7D7CECECEE7E7E7F4F4F4FFFFFFFFFFFFF1F1F1F5F5F5F9 - F9F9F9F9F9FDFDFDFFFFFFFCFCFCF9F9F9F7F7F7F8F8F8F7F7F7FFFFFFFFFFFF - ECECECE7E7E7E8E8E8EBEBEBEAEAEAE9E9E9EAEAEAEDEDEDEAEAEAE8E8E8EAEA - EAEDEDEDEAEAEADADADAF7F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1 - F1F1EDEDEDEAEAEAC8C8C8D3D3D3F3F3F3F6F6F6F3F3F3F5F5F5F9F9F9FDFDFD - FFFFFFFFFFFFFFFFFFEDEDEDEAEAEAE9E9E9E7E7E7E6E6E6E4E4E4E2E2E2E1E1 - E1E4E4E4E7E7E7E9E9E9E9E9E9C5C5C5D4D4D4F6F6F6F8F8F8F8F8F8F6F6F6F6 - F6F6FFFFFFFFFFFFF4F4F4FEFEFEE8E8E8E5E5E5F7F7F7F5F5F5F7F7F7F8F8F8 - F8F8F8F8F8F8F8F8F8FFFFFFFFFFFFEDEDEDE9E9E9E6E6E6E6E6E6E7E7E7E7E7 - E7E7E7E7E7E7E7E6E6E6EAEAEAEDEDEDD5D5D5E3E3E3F9F9F9F9F9F9F9F9F9FC - FCFCFEFEFEFFFFFFFFFFFFFFFFFFFAFAFAF7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F5F5F5F3F3F3F2F2F2F3F3F3F1F1F1F0F0F0F2F2F2E4E4E4E0E0E0CCCCCC9C9C - 9CB0B0B0D8D8D8EEEEEEF9F9F9FDFDFDFFFFFFFFFFFFF4F4F4F0F0F0ECECECE9 - E9E9E3E3E3E3E3E3E5E5E5E5E5E5E2E2E2DCDCDCECECECFFFFFFFFFFFFFDFDFD - E8E8E8E4E4E4E6E6E6EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAF7F7 - F7FAFAFAF9F9F9F7F7F7F7F7F7F7F7F7E9E9E9E9E9E9F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFF8F8F8EDEDEDECECECCFCFCF - DCDCDCF9F9F9FBFBFBFCFCFCF6F6F6E4E4E4E4E4E4E8E8E8E9E9E9F0F0F0F1F1 - F1EBEBEBECECECEEEEEEEAEAEAE8E8E8E8E8E8E9E9E9D2D2D2A5A5A5B5B5B5DF - DFDFF3F3F3F5F5F5F7F7F7F8F8F8F8F8F8F8F8F8F7F7F7F7F7F7F5F5F5F3F3F3 - F0F0F0F1F1F1F3F3F3F6F6F6F7F7F7F7F7F7F5F5F5F5F5F5F2F2F2EEEEEEEEEE - EEF1F1F1F3F3F3F4F4F4F8F8F8F8F8F8F6F6F6F6F6F6F5F5F5F4F4F4F4F4F4FF - FFFFFFFFFFFFFFFFFFFFFFE9E9E9E4E4E4E3E3E3E1E1E1C9C9C9959595AFAFAF - E4E4E4EDEDEDF9F9F9F9F9F9E9E9E9E7E7E7E5E5E5E4E4E4F6F6F6FAFAFAFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F5F5E4E4E4EAEAEAEA - EAEAE7E7E7FBFBFBFFFFFFF8F8F8C2C2C2D2D2D2F1F1F1F3F3F3F5F5F5FFFFFF - F0F0F0DCDCDCE6E6E6E7E7E7E4E4E4E0E0E0D1D1D1AFAFAFCECECEF1F1F1F6F6 - F6F7F7F7F7F7F7F8F8F8FAFAFAF9F9F9F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F9F9F9FAFAFAFFFFFFFFFFFFFAFAFAECECECECECECE6E6E6E1E1E1E2E2E2 - D9D9D9D5D5D5E4E4E4F9F9F9FBFBFBFBFBFBFDFDFDFEFEFEFFFFFFFFFFFFE9E9 - E9E5E5E5D7D7D7C3C3C3D2D2D2EAEAEAF5F5F5FFFFFFF7F7F7E6E6E6F5F5F5F9 - F9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F6F6F9F9F9F4F4F4FEFEFEF8F8F8 - EAEAEAE6E6E6E8E8E8EBEBEBE9E9E9DCDCDCDEDEDEECECECE9E9E9EAEAEAE9E9 - E9EAEAEAE7E7E7E6E6E6F6F6F6FFFFFFF6F6F6FFFFFFFFFFFFFCFCFCEEEEEEEE - EEEEE9E9E9E9E9E9C6C6C6D2D2D2F5F5F5F7F7F7F5F5F5FFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFECECECEAEAEAEAEAEAE6E6E6E2E2E2E2E2E2E1E1E1E1E1E1E5E5 - E5E8E8E8E9E9E9E9E9E9E9E9E9C5C5C5D3D3D3F4F4F4F7F7F7F8F8F8F6F6F6FF - FFFFFFFFFFFFFFFFF3F3F3EEEEEEC5C5C5D3D3D3F7F7F7F5F5F5F4F4F4F4F4F4 - F4F4F4F5F5F5F8F8F8FFFFFFFFFFFFEAEAEAE4E4E4E2E2E2E6E6E6E7E7E7E7E7 - E7E7E7E7E7E7E7E4E4E4E7E7E7E9E9E9C0C0C0D2D2D2F8F8F8FAFAFAFCFCFCFF - FFFFFFFFFFFFFFFFFFFFFFF0F0F0E7E7E7F3F3F3F5F5F5F7F7F7F6F6F6F6F6F6 - F3F3F3F4F4F4F5F5F5F7F7F7F5F5F5F5F5F5F9F9F9F9F9F9F5F5F5E1E1E1CBCB - CBDEDEDEF3F3F3F8F8F8FDFDFDFDFDFDFFFFFFFFFFFFFFFFFFE1E1E1CBCBCBC8 - C8C8D6D6D6E7E7E7E7E7E7E5E5E5E6E6E6DDDDDDE6E6E6FFFFFFFFFFFFEFEFEF - E6E6E6E4E4E4E6E6E6E9E9E9EAEAEAEDEDEDEDEDEDEDEDEDEBEBEBE6E6E6D9D9 - D9EAEAEAF7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F5F5F5F7F7F7F9 - F9F9FFFFFFFFFFFFFFFFFFFFFFFFFBFBFBEEEEEEEBEBEBECECECECECECD0D0D0 - DEDEDEFAFAFAFBFBFBF9F9F9F7F7F7F5F5F5E9E9E9E9E9E9E9E9E9EEEEEEECEC - ECE4E4E4E9E9E9ECECECE8E8E8E8E8E8E8E8E8D3D3D3A4A4A4B3B3B3DDDDDDF1 - F1F1F4F4F4F7F7F7F9F9F9F9F9F9F8F8F8F7F7F7F5F5F5F4F4F4F3F3F3F1F1F1 - F4F4F4F7F7F7F8F8F8F8F8F8F8F8F8F7F7F7F5F5F5F6F6F6F4F4F4F2F2F2F2F2 - F2F4F4F4F7F7F7F7F7F7F9F9F9F9F9F9F8F8F8F8F8F8F6F6F6F4F4F4F4F4F4FF - FFFFFFFFFFFFFFFFFFFFFFE9E9E9E4E4E4E2E2E2CACACA9C9C9CABABABDEDEDE - F9F9F9FDFDFDFFFFFFF8F8F8E4E4E4E5E5E5E3E3E3E3E3E3E7E7E7EAEAEAFCFC - FCFFFFFFFFFFFFFFFFFFF9F9F9ECECECE9E9E9E9E9E9E9E9E9E8E8E8ECECECE9 - E9E9E6E6E6E7E7E7E8E8E8E5E5E5D3D3D3F8F8F8FFFFFFF3F3F3F7F7F7FFFFFF - FFFFFFEDEDEDE9E9E9DADADAC8C8C8C7C7C7B0B0B0B8B8B8DDDDDDF2F2F2F6F6 - F6F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F8 - F8F8F9F9F9FAFAFAFFFFFFFFFFFFFDFDFDF4F4F4F1F1F1EAEAEAE7E7E7E8E8E8 - E9E9E9D5D5D5E3E3E3FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8E8 - E8DCDCDCC3C3C3CFCFCFE9E9E9F4F4F4F4F4F4FFFFFFD9D9D9D6D6D6F3F3F3F5 - F5F5FFFFFFFFFFFFFFFFFFFFFFFFF8F8F8F4F4F4F6F6F6F3F3F3F2F2F2F4F4F4 - DADADAC8C8C8DBDBDBEEEEEEDEDEDEC0C0C0EAEAEAF9F9F9EBEBEBEBEBEBE9E9 - E9EAEAEAE4E4E4D1D1D1CACACADCDCDCDFDFDFF8F8F8FDFDFDE9E9E9E9E9E9E8 - E8E8E7E7E7E7E7E7C5C5C5D2D2D2F6F6F6F9F9F9FFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFCFCFCEAEAEAEAEAEAEAEAEAE7E7E7E5E5E5E5E5E5E5E5E5E6E6E6E9E9 - E9EAEAEAEAEAEAE9E9E9E9E9E9C5C5C5D3D3D3F4F4F4F5F5F5F7F7F7F6F6F6FF - FFFFFFFFFFFCFCFCE9E9E9E6E6E6D1D1D1E4E4E4F8F8F8F7F7F7F7F7F7F8F8F8 - F9F9F9FAFAFAFBFBFBFFFFFFFDFDFDD0D0D0B5B5B5BABABAD3D3D3E7E7E7E7E7 - E7E7E7E7E7E7E7E7E7E7E7E7E7D8D8D8B2B2B2D7D7D7FBFBFBFCFCFCFCFCFCFF - FFFFFFFFFFFFFFFFFFFFFFDDDDDDE0E0E0F0F0F0F3F3F3F3F3F3F1F1F1F5F5F5 - F3F3F3F6F6F6F8F8F8F7F7F7F5F5F5F6F6F6FBFBFBFBFBFBFBFBFBFBFBFBF8F8 - F8FAFAFAFBFBFBFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECECECD5D5D5D3 - D3D3E5E5E5E9E9E9E7E7E7E7E7E7E9E9E9E9E9E9E9E9E9FFFFFFFFFFFFEDEDED - E7E7E7E5E5E5E6E6E6E9E9E9EAEAEAECECECECECECEBEBEBEAEAEAD7D7D7BABA - BADADADAF7F7F7F7F7F7F7F7F7F8F8F8F9F9F9FBFBFBFBFBFBF9F9F9FFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFAFAFAEEEEEEE9E9E9E9E9E9E1E1E1D5D5D5C3C3C3 - DEDEDEF8F8F8F8F8F8F8F8F8F7F7F7F6F6F6F5F5F5E8E8E8E8E8E8ECECECE7E7 - E7E2E2E2E4E4E4E6E6E6E4E4E4E4E4E4D1D1D1A5A5A5B4B4B4DADADAEEEEEEEF - EFEFF1F1F1F1F1F1F5F5F5F2F2F2EDEDEDEEEEEEEEEEEEEDEDEDF2F2F2F6F6F6 - F8F8F8FAFAFAFAFAFAFAFAFAFBFBFBFBFBFBF8F8F8F6F6F6F5F5F5F5F5F5F4F4 - F4F5F5F5F7F7F7F7F7F7F9F9F9F9F9F9F7F7F7F7F7F7F6F6F6F4F4F4F4F4F4FF - FFFFFFFFFFFDFDFDE9E9E9E6E6E6E2E2E2DEDEDEB6B6B6B3B3B3DADADAF3F3F3 - FAFAFAFDFDFDFEFEFEF7F7F7E4E4E4DEDEDEDEDEDEE1E1E1E4E4E4E7E7E7EBEB - EBECECECEBEBEBEAEAEAEAEAEAE8E8E8E8E8E8E9E9E9E9E9E9E7E7E7E8E8E8E7 - E7E7E2E2E2E1E1E1E3E3E3E1E1E1E1E1E1F4F4F4F5F5F5FFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFE6E6E6D3D3D3D3D3D3C8C8C8D9D9D9F0F0F0F4F4F4F7F7 - F7F7F7F7F8F8F8F8F8F8F9F9F9F9F9F9F7F7F7F7F7F7F8F8F8F7F7F7F7F7F7F9 - F9F9FFFFFFFFFFFFFFFFFFFFFFFFF8F8F8F3F3F3EDEDEDE9E9E9E7E7E7E6E6E6 - E6E6E6C5C5C5D5D5D5F9F9F9FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEE5E5E5D1D1 - D1C6C6C6CACACAE4E4E4F1F1F1F1F1F1F2F2F2F3F3F3E6E6E6E6E6E6F3F3F3F7 - F7F7FFFFFFFCFCFCEEEEEEE9E9E9E6E6E6E4E4E4F0F0F0EFEFEFF0F0F0F2F2F2 - E5E5E5D5D5D5E6E6E6DCDCDCB8B8B8C3C3C3FFFFFFFFFFFFEBEBEBEBEBEBEBEB - EBEAEAEAD5D5D5AEAEAEC8C8C8E7E7E7E6E6E6EFEFEFF0F0F0E9E9E9E7E7E7E7 - E7E7E8E8E8E7E7E7BFBFBFD0D0D0F8F8F8FFFFFFFFFFFFFFFFFFFFFFFFEEEEEE - EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEA - EAECECECEBEBEBE9E9E9E9E9E9D7D7D7F4F4F4FFFFFFF7F7F7F8F8F8FFFFFFFF - FFFFFFFFFFE6E6E6E6E6E6E3E3E3E2E2E2D5D5D5E7E7E7FAFAFAFAFAFAFAFAFA - FCFCFCFCFCFCFBFBFBFCFCFCF9F9F9DFDFDFCACACACDCDCDE2E2E2E7E7E7E7E7 - E7E7E7E7E7E7E7E8E8E8E4E4E4C8C8C8C6C6C6E7E7E7FAFAFAFAFAFAF8F8F8FF - FFFFFFFFFFFEFEFEEDEDEDE7E7E7CCCCCCDADADAF0F0F0F2F2F2F4F4F4F9F9F9 - F8F8F8F9F9F9FBFBFBFBFBFBF9F9F9F9F9F9FCFCFCFCFCFCFCFCFCFCFCFCFCFC - FCFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8F8F4F4F4F3 - F3F3F4F4F4F3F3F3E7E7E7E9E9E9EAEAEAE9E9E9ECECECFBFBFBFBFBFBEDEDED - EAEAEAE7E7E7E7E7E7EAEAEAEAEAEAEAEAEAE9E9E9E7E7E7E3E3E3C3C3C3C7C7 - C7E9E9E9F7F7F7F7F7F7F9F9F9FAFAFAFAFAFAFCFCFCFBFBFBFFFFFFFFFFFFFF - FFFFFFFFFFFCFCFCECECECEBEBEBEAEAEAE5E5E5DDDDDDCBCBCBCECECED9D9D9 - E9E9E9F7F7F7F7F7F7F8F8F8F7F7F7F8F8F8F8F8F8FFFFFFF7F7F7E9E9E9E7E7 - E7E4E4E4E6E6E6E5E5E5D3D3D3BFBFBFAAAAAAB9B9B9DEDEDEF1F1F1F3F3F3F4 - F4F4F5F5F5F4F4F4F7F7F7EDEDEDECECECF3F3F3F3F3F3F4F4F4F9F9F9FCFCFC - FAFAFAFAFAFAFBFBFBFDFDFDFCFCFCFDFDFDFAFAFAF7F7F7F7F7F7F5F5F5F5F5 - F5F7F7F7F8F8F8F7F7F7F9F9F9F9F9F9F5F5F5F5F5F5F5F5F5F4F4F4F4F4F4FF - FFFFE9E9E9E9E9E9E6E6E6E4E4E4CFCFCFBABABAA4A4A4CACACAF1F1F1F5F5F5 - FBFBFBFFFFFFFEFEFEFAFAFAF3F3F3E4E4E4E5E5E5E6E6E6E7E7E7E9E9E9ECEC - ECECECECE9E9E9E9E9E9E9E9E9E8E8E8E8E8E8E9E9E9E8E8E8E7E7E7E9E9E9EA - EAEAE7E7E7E5E5E5E9E9E9E4E4E4E1E1E1E4E4E4E6E6E6FDFDFDFFFFFFFFFFFF - FDFDFDF6F6F6FFFFFFF0F0F0E2E2E2F5F5F5FEFEFEFBFBFBF8F8F8F9F9F9F8F8 - F8F8F8F8F8F8F8F8F8F8FBFBFBFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFDFDFDF0F0F0ECECECE7E7E7E6E6E6E6E6E6E7E7E7 - E7E7E7C7C7C7E7E7E7FFFFFFFFFFFFFFFFFFEBEBEBEAEAEAD7D7D7C0C0C0D1D1 - D1DCDCDCE6E6E6F4F4F4F4F4F4F3F3F3F4F4F4F4F4F4F4F4F4F5F5F5F5F5F5F8 - F8F8F8F8F8FFFFFFFBFBFBE8E8E8E6E6E6E1E1E1CDCDCDDCDCDCEEEEEEF1F1F1 - F3F3F3F1F1F1F3F3F3E5E5E5D0D0D0E0E0E0FFFFFFFFFFFFEBEBEBEBEBEBEBEB - EBE9E9E9C4C4C4BEBEBEE4E4E4FFFFFFFFFFFFFCFCFCEFEFEFE8E8E8E7E7E7E7 - E7E7E8E8E8E4E4E4BEBEBED2D2D2F9F9F9FFFFFFFFFFFFFDFDFDECECECEBEBEB - EAEAEAEAEAEAEBEBEBEBEBEBEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAECECECEEEE - EEEEEEEEEBEBEBE9E9E9E9E9E9E7E7E7F5F5F5F7F7F7FFFFFFFFFFFFFFFFFFFF - FFFFFCFCFCE6E6E6E5E5E5E1E1E1D0D0D0AAAAAACECECEF7F7F7F5F5F5F7F7F7 - F9F9F9F9F9F9FBFBFBFCFCFCFDFDFDF8F8F8F6F6F6F4F4F4F5F5F5FFFFFFF7F7 - F7E7E7E7E7E7E7E7E7E7E1E1E1C6C6C6D6D6D6F4F4F4F7F7F7F5F5F5F7F7F7FF - FFFFFFFFFFECECECE6E6E6E2E2E2B5B5B5CACACAF4F4F4F7F7F7FAFAFAFFFFFF - FDFDFDFDFDFDFEFEFEFDFDFDFEFEFEFDFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFC - FCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF6F6F6F5F5F5F5 - F5F5F5F5F5F4F4F4FFFFFFF7F7F7E9E9E9E8E8E8E9E9E9EBEBEBEBEBEBEBEBEB - EBEBEBE8E8E8EAEAEAEDEDEDECECECEAEAEAE9E9E9E7E7E7D5D5D5BABABADADA - DAF7F7F7F7F7F7F9F9F9FBFBFBF9F9F9F8F8F8F9F9F9FFFFFFFFFFFFFFFFFFFB - FBFBEAEAEAEAEAEAEAEAEAEAEAEAE9E9E9DADADAC9C9C9D1D1D1E5E5E5F1F1F1 - F4F4F4F7F7F7F7F7F7F8F8F8F8F8F8F7F7F7F8F8F8FFFFFFE6E6E6D9D9D9E9E9 - E9E7E7E7D6D6D6C2C2C2AEAEAEBFBFBFD3D3D3E4E4E4F3F3F3F5F5F5F5F5F5F8 - F8F8FBFBFBFBFBFBFBFBFBF5F5F5F5F5F5FBFBFBFBFBFBFBFBFBFEFEFEFDFDFD - FAFAFAFAFAFAFBFBFBFDFDFDFCFCFCFCFCFCF9F9F9F7F7F7F7F7F7F7F7F7F7F7 - F7F8F8F8F9F9F9F8F8F8F9F9F9F8F8F8F6F6F6F6F6F6F5F5F5F5F5F5F4F4F4FF - FFFFE7E7E7E7E7E7E6E6E6E2E2E2BCBCBCBABABACDCDCDE1E1E1F4F4F4F6F6F6 - FDFDFDFFFFFFFBFBFBF9F9F9F6F6F6F4F4F4EDEDEDEDEDEDE9E9E9E9E9E9EEEE - EEECECECE9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E7E7E7E7E7E7E9E9E9EA - EAEAEAEAEAEAEAEAEDEDEDE5E5E5E4E4E4E9E9E9E9E9E9EAEAEAEAEAEAE8E8E8 - E8E8E8E7E7E7E6E6E6E4E4E4DFDFDFE4E4E4F5F5F5EDEDEDEDEDEDF9F9F9F8F8 - F8F9F9F9F8F8F8F9F9F9FCFCFCF9F9F9FFFFFFFFFFFFFFFFFFFDFDFDFFFFFFFF - FFFFFFFFFFFFFFFFE9E9E9E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E8E8E8E8E8E8 - E7E7E7C6C6C6E7E7E7FBFBFBFBFBFBFBFBFBE9E9E9E7E7E7C6C6C6C7C7C7E7E7 - E7F3F3F3F5F5F5F8F8F8F8F8F8F7F7F7F7F7F7F6F6F6F4F4F4F5F5F5F6F6F6F5 - F5F5F5F5F5FFFFFFE9E9E9D8D8D8E6E6E6DEDEDEB6B6B6CBCBCBF1F1F1F4F4F4 - F4F4F4F4F4F4F5F5F5F5F5F5F4F4F4F4F4F4FFFFFFEDEDEDDCDCDCDADADACACA - CAC7C7C7B0B0B0D0D0D0F3F3F3FFFFFFFFFFFFFCFCFCEEEEEEE8E8E8E8E8E8E8 - E8E8E8E8E8E4E4E4BFBFBFD3D3D3FBFBFBFFFFFFFFFFFFF0F0F0EDEDEDEBEBEB - EAEAEAEAEAEAEAEAEAECECECEAEAEAEAEAEAEAEAEAEAEAEAEDEDEDEFEFEFEFEF - EFECECECEAEAEAEAEAEAE9E9E9E6E6E6E6E6E6E8E8E8FBFBFBFFFFFFFFFFFFFC - FCFCE5E5E5E1E1E1E0E0E0DEDEDEBABABAB5B5B5DFDFDFF4F4F4F5F5F5F6F6F6 - FBFBFBFBFBFBFDFDFDFEFEFEFFFFFFFBFBFBF8F8F8F5F5F5F6F6F6FFFFFFFDFD - FDEEEEEEEBEBEBEAEAEAE6E6E6C9C9C9D9D9D9F5F5F5F6F6F6F5F5F5FFFFFFFF - FFFFFFFFFFE9E9E9E7E7E7E5E5E5B8B8B8CECECEF9F9F9F9F9F9FDFDFDFFFFFF - FEFEFEFFFFFFFFFFFFFEFEFEFDFDFDFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEFFFF - FFFFFFFFFFFFFFE2E2E2EDEDEDFCFCFCFCFCFCFCFCFCF8F8F8F5F5F5F5F5F5F5 - F5F5F5F5F5F7F7F7FFFFFFFFFFFFECECECE9E9E9EAEAEAEBEBEBEBEBEBEBEBEB - EBEBEBEAEAEAECECECECECECECECECE9E9E9E9E9E9E9E9E9C8C8C8C8C8C8EAEA - EAF7F7F7FAFAFAFBFBFBF9F9F9F8F8F8F7F7F7F7F7F7FFFFFFFFFFFFF9F9F9EA - EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEACECECECFCFCFE6E6E6F1F1F1F3F3F3 - F4F4F4F7F7F7F7F7F7F7F7F7F7F7F7F5F5F5F4F4F4F1F1F1DEDEDEDFDFDFD1D1 - D1C0C0C0AFAFAFBFBFBFD3D3D3E6E6E6F7F7F7F6F6F6F5F5F5F7F7F7F5F5F5F5 - F5F5FAFAFAFBFBFBFBFBFBF9F9F9F9F9F9FCFCFCFBFBFBFDFDFDFFFFFFFDFDFD - FAFAFAFBFBFBFDFDFDFEFEFEFCFCFCFCFCFCFBFBFBF8F8F8F7F7F7F7F7F7F8F8 - F8F9F9F9F9F9F9F7F7F7F8F8F8F7F7F7F5F5F5F5F5F5F5F5F5F4F4F4F3F3F3FF - FFFFE7E7E7E7E7E7E4E4E4DEDEDED1D1D1F0F0F0FFFFFFFFFFFFF9F9F9F9F9F9 - FDFDFDFDFDFDF8F8F8F6F6F6F5F5F5F4F4F4FDFDFDF6F6F6EAEAEAEAEAEAEEEE - EEDEDEDECACACAC8C8C8D8D8D8E7E7E7E7E7E7E7E7E7E7E7E7E9E9E9EAEAEAEA - EAEAE9E9E9EAEAEAEAEAEAE7E7E7E7E7E7E9E9E9E9E9E9E9E9E9E8E8E8E7E7E7 - E8E8E8E8E8E8E7E7E7E4E4E4DCDCDCDCDCDCF7F7F7EFEFEFFBFBFBFFFFFFFFFF - FFFFFFFFFCFCFCFBFBFBFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F0F0F0FDFDFDFD - FDFDF4F4F4EFEFEFE7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E6E6E6E6E6E6E6E6E6 - E7E7E7C3C3C3D2D2D2E6E6E6F7F7F7FAFAFAEAEAEAE9E9E9C9C9C9D6D6D6F3F3 - F3F5F5F5F7F7F7F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F7F7F7F7F7F7F5F5F5F3 - F3F3F3F3F3F1F1F1E1E1E1E6E6E6E5E5E5DEDEDEB7B7B7CFCFCFF4F4F4F5F5F5 - F6F6F6F5F5F5F5F5F5F7F7F7F7F7F7F8F8F8F8F8F8F9F9F9FFFFFFDCDCDCC5C5 - C5D4D4D4D2D2D2E2E2E2F6F6F6F9F9F9FFFFFFFFFFFFEEEEEEE8E8E8E8E8E8E8 - E8E8E8E8E8E3E3E3BFBFBFD5D5D5FAFAFAFFFFFFFFFFFFECECECEBEBEBE9E9E9 - E9E9E9EAEAEAEAEAEAECECECECECECEAEAEAEAEAEAEDEDEDF0F0F0EEEEEEEAEA - EAE9E9E9E9E9E9E7E7E7E8E8E8E6E6E6E7E7E7EAEAEAEBEBEBEDEDEDECECECEA - EAEAE3E3E3DFDFDFDFDFDFCBCBCBA7A7A7CFCFCFF4F4F4F7F7F7F7F7F7F7F7F7 - FBFBFBFCFCFCFDFDFDFEFEFEFDFDFDFBFBFBF8F8F8F7F7F7F7F7F7FFFFFFFFFF - FFFFFFFFE9E9E9D6D6D6C1C1C1B1B1B1D5D5D5F4F4F4F4F4F4F4F4F4FFFFFFFF - FFFFF8F8F8EAEAEAEAEAEAE9E9E9C1C1C1DADADAFEFEFEFBFBFBFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8F8FBFBFBFFFFFFFFFFFFFFFF - FFFFFFFFF0F0F0D5D5D5E6E6E6F7F7F7F8F8F8F8F8F8F7F7F7F4F4F4F3F3F3F3 - F3F3F3F3F3F5F5F5FFFFFFFFFFFFEDEDEDEBEBEBEBEBEBE9E9E9E8E8E8E8E8E8 - E9E9E9EBEBEBEBEBEBEEEEEEECECECE9E9E9E9E9E9E7E7E7C6C6C6D5D5D5F5F5 - F5F6F6F6F8F8F8F8F8F8F7F7F7F7F7F7F6F6F6F5F5F5F5F5F5FFFFFFF8F8F8EA - EAEAEAEAEAEAEAEAEAEAEAEAEAEADBDBDBBBBBBBD6D6D6F0F0F0F3F3F3F3F3F3 - F4F4F4F7F7F7F7F7F7F4F4F4F1F1F1F2F2F2F2F2F2F0F0F0F0F0F0F1F1F1E2E2 - E2D3D3D3D4D4D4E6E6E6F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F5F5F5F4F4F4F5 - F5F5F9F9F9FBFBFBFBFBFBF9F9F9FBFBFBFEFEFEFFFFFFFFFFFFFFFFFFFDFDFD - FBFBFBFDFDFDFFFFFFFEFEFEFDFDFDFDFDFDFBFBFBF8F8F8F7F7F7F8F8F8F9F9 - F9F9F9F9F7F7F7F7F7F7F9F9F9F8F8F8F5F5F5F5F5F5F4F4F4F1F1F1F1F1F1FF - FFFFE7E7E7D4D4D4BDBDBDD1D1D1E7E7E7F8F8F8FFFFFFFDFDFDF7F7F7F9F9F9 - FBFBFBF9F9F9F6F6F6F4F4F4F3F3F3F3F3F3FFFFFFFFFFFFF0F0F0F3F3F3F6F6 - F6E0E0E0E6E6E6E6E6E6F3F3F3F7F7F7E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E8 - E8E8D3D3D3D5D5D5EAEAEAE9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E7E7E7E7E7E7 - E9E9E9E9E9E9D5D5D5BABABABFBFBFCACACAEBEBEBF9F9F9FCFCFCFFFFFFFFFF - FFFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBEDEDEDECECECEFEFEFED - EDEDEDEDEDE7E7E7E2E2E2E6E6E6E7E7E7E6E6E6E6E6E6E5E5E5E4E4E4D0D0D0 - BCBCBCA9A9A9D1D1D1F7F7F7FFFFFFFFFFFFECECECEBEBEBDBDBDBE6E6E6F5F5 - F5F5F5F5F6F6F6F8F8F8F9F9F9FAFAFAF9F9F9F9F9F9F8F8F8F7F7F7F5F5F5F4 - F4F4F4F4F4F2F2F2F2F2F2F5F5F5F3F3F3DFDFDFD1D1D1F7F7F7FFFFFFFFFFFF - FFFFFFF6F6F6F7F7F7F7F7F7F9F9F9FAFAFAF8F8F8FFFFFFFFFFFFDCDCDCD5D5 - D5F5F5F5F5F5F5F5F5F5FBFBFBFFFFFFFFFFFFFFFFFFEEEEEEE8E8E8E8E8E8E8 - E8E8E6E6E6E1E1E1C1C1C1E4E4E4FFFFFFFFFFFFFFFFFFEDEDEDEDEDEDE9E9E9 - E9E9E9EBEBEBECECECEDEDEDECECECEAEAEAEBEBEBEEEEEEEEEEEEEAEAEAE8E8 - E8E8E8E8E8E8E8E6E6E6E7E7E7E6E6E6E7E7E7EAEAEAEAEAEAECECECECECECEA - EAEAE7E7E7E5E5E5D3D3D3ABABABBEBEBEE6E6E6F7F7F7F7F7F7F7F7F7F7F7F7 - F8F8F8F8F8F8FBFBFBFDFDFDFDFDFDFAFAFAFFFFFFFFFFFFFFFFFFFFFFFFF7F7 - F7CECECEB6B6B6A0A0A0B3B3B3CCCCCCE0E0E0F1F1F1F3F3F3F4F4F4FFFFFFFF - FFFFECECECEAEAEAE9E9E9E8E8E8D7D7D7F0F0F0FFFFFFFDFDFDFFFFFFFFFFFF - FFFFFFFFFFFFFEFEFEF9F9F9FFFFFFF8F8F8F5F5F5F7F7F7FAFAFAFDFDFDFDFD - FDFDFDFDF5F5F5F0F0F0F5F5F5F7F7F7F7F7F7F7F7F7F5F5F5F4F4F4F4F4F4F4 - F4F4F4F4F4F5F5F5FEFEFEE7E7E7DADADAE5E5E5E6E6E6E5E5E5E6E6E6E8E8E8 - E9E9E9EAEAEAEBEBEBF2F2F2F0F0F0EAEAEAE8E8E8D4D4D4B1B1B1D5D5D5F5F5 - F5F5F5F5F5F5F5F5F5F5F6F6F6F5F5F5F4F4F4F3F3F3F5F5F5FFFFFFFFFFFFEA - EAEAEAEAEAE8E8E8E8E8E8EBEBEBDFDFDFD9D9D9E6E6E6F3F3F3F5F5F5F4F4F4 - F6F6F6F4F4F4F1F1F1EEEEEEF1F1F1F5F5F5F3F3F3F2F2F2F5F5F5F8F8F8FAFA - FAFCFCFCFCFCFCF9F9F9F8F8F8F9F9F9F9F9F9F9F9F9F9F9F9F5F5F5F5F5F5F7 - F7F7F9F9F9FBFBFBFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE - FEFEFEFFFFFFFFFFFFFEFEFEFDFDFDFCFCFCF8F8F8F7F7F7F8F8F8F9F9F9FBFB - FBFCFCFCFBFBFBFBFBFBF8F8F8F7F7F7F6F6F6F6F6F6F4F4F4F3F3F3F3F3F3FF - FFFFE6E6E6D1D1D1DEDEDEFFFFFFF8F8F8EAEAEAEDEDEDE7E7E7E5E5E5F5F5F5 - F9F9F9F7F7F7F4F4F4F4F4F4F3F3F3F3F3F3FEFEFEF8F8F8F4F4F4F7F7F7F3F3 - F3EEEEEEEAEAEADADADAFFFFFFFFFFFFEAEAEAEAEAEAEAEAEAE9E9E9E7E7E7D2 - D2D2A1A1A1CECECEEAEAEAEAEAEAE9E9E9E9E9E9E9E9E9E8E8E8E7E7E7E9E9E9 - EAEAEAEAEAEAC0C0C0BABABAD5D5D5D9D9D9F9F9F9FFFFFFF0F0F0EDEDEDEDED - EDECECECF8F8F8F8F8F8FFFFFFFFFFFFF0F0F0EDEDEDEDEDEDEFEFEFEFEFEFEC - ECECEAEAEAE7E7E7E4E4E4E6E6E6E2E2E2E1E1E1E2E2E2D0D0D0B7B7B79F9F9F - B9B9B9D1D1D1E4E4E4F9F9F9FFFFFFFFFFFFEBEBEBE9E9E9E9E9E9E8E8E8FFFF - FFFFFFFFF8F8F8FAFAFAFAFAFAF9F9F9F8F8F8F8F8F8F7F7F7F6F6F6F5F5F5F5 - F5F5F5F5F5F4F4F4F5F5F5F7F7F7F5F5F5FFFFFFFCFCFCFFFFFFFDFDFDFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDCDCDCD4D4 - D4F7F7F7F7F7F7F8F8F8FDFDFDFFFFFFFFFFFFFFFFFFEEEEEEE8E8E8E8E8E8E8 - E8E8E3E3E3DFDFDFC4C4C4F0F0F0FFFFFFFFFFFFF9F9F9F0F0F0EEEEEEEBEBEB - EBEBEBEDEDEDEEEEEEECECECEAEAEAEAEAEAECECECEDEDEDEAEAEAE8E8E8E9E9 - E9E9E9E9E9E9E9E9E9E9E7E7E7E5E5E5E7E7E7EAEAEAEAEAEAECECECECECECEA - EAEAEAEAEAEAEAEAC3C3C3BBBBBBE3E3E3F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFFFFFFF0F0 - F0C8C8C8C8C8C8C8C8C8DDDDDDEFEFEFF1F1F1F3F3F3F5F5F5F6F6F6FFFFFFFF - FFFFEAEAEAE8E8E8E9E9E9E9E9E9EAEAEAEEEEEEF8F8F8FAFAFAFFFFFFFFFFFF - FFFFFFFEFEFEEBEBEBE6E6E6E7E7E7EAEAEAEAEAEAF6F6F6F5F5F5F5F5F5F4F4 - F4F4F4F4F1F1F1F1F1F1F5F5F5F7F7F7F7F7F7F7F7F7F6F6F6F5F5F5F7F7F7F7 - F7F7F7F7F7F7F7F7F5F5F5E7E7E7E6E6E6DADADACDCDCDCCCCCCDADADAEAEAEA - EBEBEBEEEEEEEDEDEDF3F3F3F1F1F1E9E9E9E7E7E7C3C3C3BFBFBFE5E5E5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F4F4F4F3F3F3F5F5F5FFFFFFFFFFFFEC - ECECECECECE8E8E8E9E9E9EDEDEDEDEDEDEAEAEAFFFFFFFFFFFFFFFFFFF6F6F6 - F5F5F5F0F0F0F1F1F1F3F3F3F5F5F5F9F9F9F8F8F8F8F8F8F9F9F9F9F9F9FBFB - FBFEFEFEFCFCFCFBFBFBFBFBFBFBFBFBF9F9F9F8F8F8F8F8F8F7F7F7F6F6F6F6 - F6F6F7F7F7FAFAFAFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFBFBFBF8F8F8F8F8F8F9F9F9F9F9F9FBFBFBFEFE - FEFCFCFCFAFAFAF7F7F7F6F6F6F6F6F6F6F6F6F6F6F6F5F5F5F4F4F4F4F4F4FF - FFFFD0D0D0CCCCCCF4F4F4FFFFFFF8F8F8EDEDEDF0F0F0EDEDEDECECECE7E7E7 - EEEEEEF3F3F3F1F1F1F2F2F2F1F1F1F2F2F2F4F4F4FEFEFEFEFEFEF3F3F3ECEC - ECDADADAB8B8B8C4C4C4F3F3F3E9E9E9CACACADADADAE8E8E8D5D5D5BEBEBEA1 - A1A1B5B5B5E6E6E6FEFEFEEEEEEEE9E9E9E9E9E9E8E8E8E7E7E7E7E7E7E9E9E9 - EAEAEAD8D8D8ABABABD0D0D0F5F5F5F4F4F4FFFFFFFFFFFFEEEEEEECECECEBEB - EBEBEBEBECECECDEDEDEDDDDDDDDDDDDDEDEDEEDEDEDF0F0F0EEEEEEECECECEA - EAEAEAEAEAEAEAEAEAEAEAE9E9E9E6E6E6E4E4E4D3D3D3A4A4A4AFAFAFC8C8C8 - E4E4E4F8F8F8F7F7F7F9F9F9FFFFFFEAEAEAD9D9D9E9E9E9E9E9E9E9E9E9FBFB - FBE9E9E9E7E7E7F7F7F7F7F7F7F7F7F7F7F7F7F8F8F8F7F7F7F4F4F4F5F5F5F5 - F5F5F5F5F5F5F5F5F6F6F6F7F7F7FFFFFFFFFFFFFFFFFFF0F0F0EAEAEAFEFEFE - FEFEFEFDFDFDFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD5D5D5D1D1 - D1F5F5F5F7F7F7F7F7F7FAFAFAFCFCFCFAFAFAFBFBFBD9D9D9C1C1C1C1C1C1C1 - C1C1BEBEBEC1C1C1B3B3B3E1E1E1F8F8F8ECECECECECECEFEFEFEEEEEEEBEBEB - EBEBEBEDEDEDEFEFEFEDEDEDEBEBEBECECECECECECEAEAEAEAEAEAEAEAEAEAEA - EAE9E9E9EAEAEAECECECEAEAEAECECECEDEDEDECECECEBEBEBEBEBEBEBEBEBEA - EAEAE9E9E9E9E9E9C0C0C0CECECEF6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBE8E8E8E5E5E5CFCF - CFE1E1E1F4F4F4F4F4F4F4F4F4F4F4F4F5F5F5F5F5F5F8F8F8FFFFFFFFFFFFFF - FFFFEAEAEAE9E9E9EAEAEAEBEBEBEBEBEBEBEBEBECECECFFFFFFFFFFFFFFFFFF - EEEEEEEAEAEAE6E6E6E4E4E4E7E7E7EAEAEAEAEAEAEAEAEAF4F4F4F4F4F4F4F4 - F4F4F4F4F3F3F3F2F2F2F4F4F4F5F5F5F4F4F4F4F4F4F4F4F4F5F5F5F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F6F6F6F5F5F5E9E9E9DBDBDBDBDBDBE9E9E9DFDFDF - D1D1D1E2E2E2EEEEEEF4F4F4F1F1F1E9E9E9E9E9E9D7D7D7E3E3E3F4F4F4F5F5 - F5F5F5F5F4F4F4F5F5F5F6F6F6F5F5F5F5F5F5F5F5F5F7F7F7FFFFFFFFFFFFF3 - F3F3EEEEEEEAEAEAEAEAEAEEEEEEEBEBEBE7E7E7F8F8F8FFFFFFF6F6F6F3F3F3 - EFEFEFECECECF2F2F2F7F7F7F9F9F9FBFBFBF9F9F9F9F9F9FBFBFBFBFBFBFBFB - FBFDFDFDFBFBFBFCFCFCFCFCFCF9F9F9FFFFFFFFFFFFF6F6F6F4F4F4F1F1F1F0 - F0F0F4F4F4F9F9F9FAFAFAFFFFFFFFFFFFF0F0F0EAEAEAEDEDEDFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFCFCFCFFFFFFFFFFFFFCFCFCFDFDFDFDFDFDFEFEFEFDFD - FDFAFAFAF7F7F7F7F7F7F7F7F7F7F7F7F6F6F6F6F6F6F4F4F4F4F4F4F5F5F5FF - FFFFDFDFDFDFDFDFE7E7E7EAEAEAEAEAEAEDEDEDEAEAEAE7E7E7E7E7E7DCDCDC - E4E4E4ECECECEEEEEEF0F0F0F0F0F0F1F1F1F4F4F4FFFFFFFFFFFFF1F1F1EAEA - EADADADAD6D6D6E6E6E6F4F4F4E5E5E5D6D6D6E6E6E6D8D8D8AFAFAFB7B7B7CA - CACAE4E4E4FBFBFBFFFFFFFFFFFFFBFBFBE9E9E9E7E7E7E7E7E7E9E9E9DFDFDF - D1D1D1B2B2B2B8B8B8DFDFDFF5F5F5F7F7F7FFFFFFFFFFFFEEEEEEEDEDEDECEC - ECEAEAEAE9E9E9CFCFCFCCCCCCDADADAF7F7F7FCFCFCEFEFEFECECECEAEAEAEA - EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAD7D7D7ADADADB7B7B7DCDCDCF4F4F4 - F9F9F9F8F8F8F8F8F8F8F8F8F9F9F9E7E7E7F7F7F7FBFBFBE9E9E9E9E9E9E9E9 - E9C5C5C5D4D4D4F5F5F5F7F7F7F8F8F8F9F9F9FAFAFAF7F7F7F5F5F5F7F7F7F7 - F7F7F7F7F7F7F7F7F5F5F5F7F7F7FFFFFFFFFFFFFFFFFFEAEAEAE7E7E7E9E9E9 - EAEAEAECECECECECECFEFEFEFFFFFFFFFFFFFEFEFEECECECE6E6E6D3D3D3E2E2 - E2F5F5F5F7F7F7F7F7F7F9F9F9F9F9F9F8F8F8F7F7F7E8E8E8D3D3D3D1D1D1D1 - D1D1D1D1D1D1D1D1D4D4D4E5E5E5F6F6F6EDEDEDEDEDEDEFEFEFEDEDEDEBEBEB - EBEBEBEEEEEEEFEFEFECECECEAEAEAE9E9E9D9D9D9C7C7C7DADADAEAEAEAE9E9 - E9E8E8E8EBEBEBEDEDEDEEEEEEEEEEEEE9E9E9EAEAEAEAEAEAEAEAEAECECECEA - EAEAE9E9E9EAEAEAC1C1C1D1D1D1F8F8F8FBFBFBF9F9F9F7F7F7F7F7F7F7F7F7 - F9F9F9FFFFFFFFFFFFFDFDFDECECECEAEAEAECECECE6E6E6D0D0D0A9A9A9B8B8 - B8E0E0E0F4F4F4F5F5F5F6F6F6F7F7F7F7F7F7F8F8F8FFFFFFFFFFFFFFFFFFF7 - F7F7EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBDDDDDDCFCFCFF0F0F0FFFFFFFDFDFD - EAEAEAE8E8E8E8E8E8E7E7E7E9E9E9EAEAEAEAEAEAEAEAEADBDBDBE6E6E6F1F1 - F1F0F0F0F0F0F0F1F1F1F3F3F3F4F4F4F5F5F5F5F5F5F5F5F5F8F8F8FAFAFAF9 - F9F9F7F7F7F7F7F7F7F7F7F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6EAEAEA - DBDBDBF7F7F7F9F9F9F2F2F2ECECECE7E7E7E9E9E9D4D4D4BCBCBCE1E1E1F5F5 - F5F5F5F5F3F3F3F5F5F5F7F7F7F5F5F5F5F5F5F5F5F5FFFFFFFFFFFFFFFFFFF1 - F1F1EEEEEEEBEBEBEBEBEBEDEDEDEBEBEBE7E7E7E7E7E7E6E6E6E6E6E6E6E6E6 - ECECECEDEDEDF5F5F5F9F9F9FBFBFBFBFBFBF9F9F9F9F9F9FBFBFBFCFCFCFCFC - FCFDFDFDFCFCFCFCFCFCFAFAFAFFFFFFFFFFFFFFFFFFF5F5F5F4F4F4F2F2F2F1 - F1F1F5F5F5F9F9F9FBFBFBFCFCFCFFFFFFFFFFFFEAEAEAEAEAEAEAEAEAEAEAEA - EAEAEAEAEAEAEAEAEAEBEBEBF9F9F9FAFAFAFFFFFFFFFFFFFBFBFBFCFCFCF9F9 - F9F7F7F7F7F7F7F6F6F6F5F5F5F4F4F4F5F5F5F5F5F5F2F2F2F2F2F2F4F4F4FF - FFFFF5F5F5F5F5F5FFFFFFFCFCFCEAEAEAEAEAEAE7E7E7E4E4E4E4E4E4E4E4E4 - E4E4E4EDEDEDEEEEEEF0F0F0F0F0F0F3F3F3F6F6F6FFFFFFFFFFFFEEEEEEEAEA - EAE9E9E9D9D9D9E3E3E3F3F3F3F3F3F3F4F4F4F5F5F5E1E1E1D0D0D0E1E1E1F5 - F5F5FAFAFAFEFEFEFFFFFFFFFFFFDEDEDEC8C8C8C7C7C7D9D9D9DADADAC1C1C1 - C1C1C1C7C7C7DFDFDFF5F5F5F9F9F9FBFBFBFFFFFFFFFFFFEEEEEEECECECEBEB - EBE9E9E9DCDCDCC2C2C2DBDBDBF5F5F5FFFFFFFAFAFAEEEEEEEAEAEAE9E9E9EA - EAEAEAEAEAEAEAEAEAEAEAEAEAEAE9E9E9C1C1C1BBBBBBE0E0E0F2F2F2F6F6F6 - FAFAFAFBFBFBFBFBFBF9F9F9FAFAFAF9F9F9FFFFFFFBFBFBE9E9E9EAEAEAEAEA - EAD7D7D7E4E4E4F7F7F7F8F8F8F8F8F8F9F9F9F9F9F9F5F5F5F5F5F5F7F7F7F7 - F7F7F6F6F6F5F5F5F5F5F5F7F7F7FFFFFFE8E8E8D2D2D2E7E7E7E7E7E7E7E7E7 - E7E7E7EAEAEAEAEAEAEDEDEDEDEDEDECECECEAEAEAE8E8E8E6E6E6E0E0E0D6D6 - D6E8E8E8F7F7F7F7F7F7F7F7F7F6F6F6F7F7F7F7F7F7F9F9F9F5F5F5F1F1F1F3 - F3F3F3F3F3F0F0F0F2F2F2F4F4F4F5F5F5FFFFFFFAFAFAEEEEEEEDEDEDECECEC - EBEBEBEEEEEEEEEEEEEBEBEBE7E7E7D7D7D7B6B6B6C3C3C3E5E5E5EAEAEAE8E8 - E8E7E7E7EDEDEDF0F0F0ECECECE7E7E7E5E5E5E6E6E6E9E9E9EBEBEBECECECEA - EAEAEAEAEAEAEAEAC1C1C1D1D1D1F8F8F8FBFBFBF9F9F9F7F7F7F7F7F7F7F7F7 - FFFFFFFFFFFFFFFFFFECECECEAEAEAEAEAEAEAEAEAE7E7E7C3C3C3BFBFBFE2E2 - E2F3F3F3F3F3F3F5F5F5F8F8F8F8F8F8F8F8F8FBFBFBFFFFFFFFFFFFF7F7F7EB - EBEBEBEBEBEBEBEBEBEBEBE9E9E9DADADAB8B8B8C1C1C1F8F8F8FFFFFFEDEDED - EAEAEAE9E9E9E8E8E8E8E8E8E6E6E6E7E7E7EAEAEAEAEAEACACACAD2D2D2EEEE - EEF1F1F1F4F4F4F5F5F5F5F5F5F6F6F6F7F7F7F8F8F8F9F9F9FCFCFCFDFDFDFA - FAFAF7F7F7F7F7F7F7F7F7F6F6F6F6F6F6F7F7F7F7F7F7F6F6F6F5F5F5F7F7F7 - F5F5F5FFFFFFECECECE1E1E1D8D8D8D9D9D9EAEAEABCBCBCB7B7B7E2E2E2F5F5 - F5F5F5F5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9EC - ECECEAEAEAEAEAEAECECECECECECECECECEAEAEAE9E9E9E7E7E7E6E6E6E6E6E6 - D1D1D1E1E1E1F9F9F9FAFAFAFCFCFCFBFBFBF9F9F9F9F9F9FCFCFCFCFCFCFCFC - FCFCFCFCFBFBFBFBFBFBF8F8F8FFFFFFFFFFFFF6F6F6E9E9E9F4F4F4F3F3F3F4 - F4F4F5F5F5F8F8F8FBFBFBFBFBFBFFFFFFFFFFFFEAEAEAEBEBEBEBEBEBEAEAEA - EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAF9F9F9FBFBFBF6F6F6F8F8F8F6F6 - F6F6F6F6F5F5F5FCFCFCFFFFFFF9F9F9F0F0F0F0F0F0F0F0F0F3F3F3F5F5F5FF - FFFFFAFAFAF8F8F8FFFFFFFFFFFFEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE9E9E9 - E6E6E6E6E6E6EAEAEAEDEDEDEFEFEFF2F2F2F4F4F4FFFFFFF8F8F8D7D7D7C6C6 - C6C4C4C4B2B2B2D2D2D2F3F3F3F4F4F4F5F5F5F5F5F5F3F3F3F4F4F4FFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFF2F2F2D7D7D7D3D3D3D5D5D5E5E5E5CACACAC2C2C2 - D9D9D9EAEAEAF4F4F4FBFBFBFEFEFEFFFFFFFFFFFFFFFFFFFCFCFCECECECEBEB - EBDEDEDEC5C5C5D0D0D0E9E9E9F6F6F6F7F7F7FFFFFFFBFBFBEBEBEBE9E9E9EA - EAEAEDEDEDEDEDEDEAEAEAEAEAEAD7D7D7ADADADD0D0D0F4F4F4F5F5F5F8F8F8 - FDFDFDFFFFFFFEFEFEFAFAFAFBFBFBFAFAFAF8F8F8F8F8F8D9D9D9C8C8C8C5C5 - C5C3C3C3C6C6C6E4E4E4F5F5F5F4F4F4F5F5F5F5F5F5F3F3F3F4F4F4F6F6F6F5 - F5F5F5F5F5F6F6F6F7F7F7F8F8F8F8F8F8E3E3E3F5F5F5F9F9F9E7E7E7E7E7E7 - E7E7E7E6E6E6E6E6E6E9E9E9EAEAEAE8E8E8E8E8E8E8E8E8E4E4E4DDDDDDC4C4 - C4D9D9D9F7F7F7F7F7F7F5F5F5F5F5F5F7F7F7F7F7F7F7F7F7F5F5F5F4F4F4F4 - F4F4F4F4F4F3F3F3F3F3F3F3F3F3F5F5F5FFFFFFFFFFFFEDEDEDEEEEEEEDEDED - ECECECEFEFEFEEEEEEEBEBEBE7E7E7C7C7C7C5C5C5E3E3E3F3F3F3F4F4F4E9E9 - E9E8E8E8EDEDEDECECECE7E7E7E2E2E2E1E1E1E2E2E2E3E3E3E7E7E7EAEAEAE8 - E8E8E8E8E8E8E8E8BDBDBDD0D0D0F8F8F8F8F8F8F8F8F8F5F5F5F4F4F4F5F5F5 - FFFFFFFFFFFFF9F9F9EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAC6C6C6D2D2D2F3F3 - F3F4F4F4F5F5F5FAFAFAFBFBFBF8F8F8F9F9F9FFFFFFFFFFFFFFFFFFEFEFEFED - EDEDEBEBEBEBEBEBE9E9E9D8D8D8B7B7B7BEBEBEDCDCDCFFFFFFF9F9F9E8E8E8 - E6E6E6E6E6E6E7E7E7E8E8E8E6E6E6EAEAEAECECECEAEAEAC7C7C7D0D0D0F0F0 - F0F3F3F3F5F5F5F5F5F5F4F4F4F4F4F4F7F7F7F8F8F8FBFBFBFEFEFEFFFFFFFD - FDFDFBFBFBFBFBFBF9F9F9F7F7F7F5F5F5F7F7F7F7F7F7F6F6F6F6F6F6F5F5F5 - F1F1F1F1F1F1EAEAEAEAEAEACCCCCCDADADAEAEAEABDBDBDCECECEF5F5F5F5F5 - F5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBFFFFFFFFFFFFFBFBFBEAEAEAEA - EAEAEAEAEAEBEBEBEDEDEDECECECEDEDEDEBEBEBEAEAEAE8E8E8E5E5E5E7E7E7 - C2C2C2D1D1D1F8F8F8F8F8F8F9F9F9F9F9F9F8F8F8F9F9F9FBFBFBFBFBFBFCFC - FCFCFCFCF9F9F9F9F9F9F8F8F8FFFFFFEBEBEBCBCBCBCCCCCCCDCDCDE5E5E5F2 - F2F2F3F3F3F7F7F7F9F9F9FBFBFBFFFFFFFFFFFFF0F0F0F1F1F1F0F0F0F0F0F0 - F0F0F0EFEFEFEDEDEDECECECECECECEAEAEAEAEAEAEAEAEAE1E1E1EBEBEBF5F5 - F5F5F5F5F5F5F5FBFBFBF4F4F4DFDFDFE2E2E2EFEFEFF4F4F4F6F6F6F8F8F8FF - FFFFFCFCFCFBFBFBFFFFFFFFFFFFEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE8E8E8 - E6E6E6E4E4E4D9D9D9E2E2E2EEEEEEF3F3F3F4F4F4F5F5F5F1F1F1C1C1C1BFBF - BFD4D4D4D5D5D5E6E6E6F5F5F5F5F5F5F4F4F4F5F5F5F6F6F6FFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F3F3F2F2F2F3F3F3F1F1F1E1E1E1E1E1E1 - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDEDEDEDECEC - ECD3D3D3D1D1D1E9E9E9F7F7F7F7F7F7F6F6F6FFFFFFFFFFFFEEEEEEECECECF0 - F0F0F4F4F4EEEEEEEDEDEDECECECC3C3C3BCBCBCE3E3E3F6F6F6F5F5F5F8F8F8 - FEFEFEFFFFFFFCFCFCFAFAFAFAFAFAF9F9F9F8F8F8F7F7F7E6E6E6D3D3D3D1D1 - D1D0D0D0D1D1D1E2E2E2F4F4F4F3F3F3F3F3F3F5F5F5F5F5F5F5F5F5F6F6F6F6 - F6F6F7F7F7F8F8F8F8F8F8F8F8F8F8F8F8F9F9F9FFFFFFFFFFFFE2E2E2DEDEDE - DFDFDFE2E2E2E6E6E6E9E9E9E9E9E9E7E7E7E8E8E8E8E8E8E3E3E3DFDFDFC7C7 - C7D9D9D9F7F7F7F6F6F6F4F4F4F5F5F5F7F7F7F7F7F7F7F7F7F7F7F7F9F9F9FA - FAFAF9F9F9F8F8F8F5F5F5F6F6F6F8F8F8FFFFFFFFFFFFEDEDEDEFEFEFEEEEEE - EDEDEDEEEEEEECECECE8E8E8E4E4E4C8C8C8D4D4D4EEEEEEF3F3F3F3F3F3F3F3 - F3DBDBDBDEDEDEEAEAEAE4E4E4DFDFDFDFDFDFE2E2E2DEDEDEE2E2E2E7E7E7E8 - E8E8E9E9E9D6D6D6A6A6A6D1D1D1F8F8F8F7F7F7F8F8F8F7F7F7F4F4F4F6F6F6 - FBFBFBFFFFFFF9F9F9EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAD2D2D2DFDFDFF3F3 - F3F6F6F6F8F8F8FCFCFCFDFDFDFBFBFBFEFEFEFFFFFFFFFFFFF8F8F8F0F0F0ED - EDEDDDDDDDD1D1D1CCCCCCB7B7B7C0C0C0DEDEDEF2F2F2F7F7F7F8F8F8E7E7E7 - E5E5E5E6E6E6E7E7E7E8E8E8E8E8E8EAEAEAEAEAEAEAEAEAC6C6C6D1D1D1F3F3 - F3F5F5F5F5F5F5F5F5F5F4F4F4F5F5F5F8F8F8F9F9F9FCFCFCFFFFFFFFFFFFFF - FFFFFBFBFBFCFCFCFCFCFCFCFCFCF9F9F9FFFFFFFFFFFFF6F6F6F6F6F6F3F3F3 - F3F3F3F6F6F6FBFBFBFAFAFAEAEAEAE8E8E8F4F4F4BABABACACACAF3F3F3F4F4 - F4FFFFFFFFFFFFFCFCFCE9E9E9E9E9E9E9E9E9F7F7F7FBFBFBECECECE9E9E9EA - EAEAECECECEBEBEBEDEDEDEDEDEDEAEAEAEBEBEBEAEAEAE6E6E6E7E7E7EAEAEA - C3C3C3D2D2D2F7F7F7F8F8F8F8F8F8F9F9F9F9F9F9F9F9F9FAFAFAF9F9F9FAFA - FAFAFAFAF8F8F8F8F8F8F8F8F8F7F7F7E8E8E8D9D9D9D9D9D9D9D9D9E6E6E6F4 - F4F4F8F8F8FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2F0F0F0EFEFEFEEEEEE - EEEEEEEDEDEDEDEDEDEDEDEDECECECE9E9E9E9E9E9E9E9E9D3D3D3DEDEDEF3F3 - F3F2F2F2F2F2F2F1F1F1E6E6E6D7D7D7E2E2E2F4F4F4F8F8F8F8F8F8F8F8F8FF - FFFFFCFCFCFEFEFEFFFFFFFFFFFFEAEAEAEAEAEAEAEAEAEAEAEAE9E9E9E7E7E7 - E7E7E7E4E4E4DDDDDDE4E4E4EDEDEDF5F5F5F5F5F5F7F7F7F4F4F4E2E2E2E6E6 - E6F7F7F7F7F7F7F7F7F7F7F7F7F6F6F6F5F5F5F7F7F7F7F7F7FFFFFFFFFFFFFF - FFFFEBEBEBFBFBFBFFFFFFECECECE4E4E4F4F4F4F4F4F4F3F3F3F1F1F1F4F4F4 - FFFFFFFAFAFADADADAFFFFFFFFFFFFFFFFFFFFFFFFF3F3F3EFEFEFEBEBEBDFDF - DFC6C6C6DDDDDDF4F4F4F5F5F5F5F5F5F4F4F4FFFFFFFCFCFCEFEFEFECECECEE - EEEEEFEFEFEAEAEAEBEBEBEAEAEAD7D7D7E3E3E3F6F6F6F8F8F8F9F9F9FBFBFB - FDFDFDFDFDFDFAFAFAFAFAFAF8F8F8F8F8F8F7F7F7F6F6F6F7F7F7F6F6F6F4F4 - F4F4F4F4F5F5F5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7F7F7F7F7F7F7F8 - F8F8F8F8F8F8F8F8F9F9F9FBFBFBFBFBFBFFFFFFFFFFFFFFFFFFE9E9E9E1E1E1 - D0D0D0BEBEBED3D3D3E9E9E9E9E9E9E7E7E7E7E7E7E7E7E7E3E3E3E0E0E0C8C8 - C8D9D9D9F7F7F7F5F5F5F5F5F5F7F7F7F7F7F7F8F8F8FAFAFAFCFCFCFCFCFCFD - FDFDFAFAFAF7F7F7F8F8F8FFFFFFFFFFFFFFFFFFFFFFFFEDEDEDEFEFEFEEEEEE - EDEDEDEDEDEDE9E9E9E7E7E7DBDBDBBABABAD1D1D1F0F0F0F5F5F5F7F7F7F6F6 - F6E8E8E8F7F7F7F6F6F6E3E3E3E1E1E1E1E1E1E1E1E1DCDCDCE0E0E0E8E8E8EA - EAEAEAEAEAD5D5D5CBCBCBE7E7E7F8F8F8F8F8F8F9F9F9F8F8F8F7F7F7F8F8F8 - F8F8F8FFFFFFFFFFFFEAEAEAEAEAEAEAEAEAEAEAEAEAEAEADFDFDFD5D5D5E9E9 - E9F6F6F6F9F9F9FBFBFBFCFCFCFEFEFEFFFFFFFDFDFDF9F9F9F6F6F6E4E4E4D6 - D6D6C7C7C7CECECED2D2D2D0D0D0E1E1E1F3F3F3F7F7F7F8F8F8F8F8F8FFFFFF - FEFEFEE8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E6E6E6C1C1C1D1D1D1F5F5 - F5F7F7F7F7F7F7F7F7F7F5F5F5F6F6F6F9F9F9FAFAFAFDFDFDFFFFFFFFFFFFF9 - F9F9EAEAEAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F6F6F7F7F7F5F5F5 - F7F7F7F9F9F9FCFCFCFBFBFBF9F9F9F7F7F7F5F5F5E1E1E1E0E0E0F4F4F4F5F5 - F5FFFFFFFFFFFFE9E9E9E9E9E9E9E9E9E7E7E7E6E6E6E9E9E9E8E8E8E8E8E8EA - EAEAEAEAEAECECECEEEEEEEDEDEDEAEAEAECECECEAEAEAE6E6E6E9E9E9D8D8D8 - AFAFAFD3D3D3F6F6F6F8F8F8F9F9F9F9F9F9FAFAFAFAFAFAF9F9F9FAFAFAFBFB - FBFCFCFCF9F9F9F7F7F7F7F7F7F7F7F7F6F6F6F5F5F5F6F6F6F6F6F6F5F5F5FF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECECECEAEAEAE9E9E9E8E8E8 - E8E8E8E8E8E8EAEAEAE7E7E7E7E7E7E7E7E7E8E8E8E9E9E9D3D3D3DDDDDDF1F1 - F1F2F2F2F0F0F0ECECECE8E8E8ECECECF2F2F2F6F6F6F8F8F8FFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFEAEAEAEAEAEAEAEAEAE9E9E9E7E7E7E8E8E8 - E8E8E8E7E7E7EDEDEDEEEEEEF5F5F5F7F7F7F8F8F8FFFFFFFFFFFFF6F6F6F8F8 - F8F8F8F8F7F7F7F6F6F6F7F7F7F7F7F7F7F7F7F8F8F8FFFFFFFFFFFFFFFFFFEE - EEEEEAEAEAE5E5E5D3D3D3B2B2B2D5D5D5F6F6F6F7F7F7F7F7F7F6F6F6F6F6F6 - F7F7F7E7E7E7D5D5D5FFFFFFFFFFFFEFEFEFEDEDEDEDEDEDEAEAEAEAEAEACECE - CECECECEE9E9E9F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4FFFFFFFDFDFDEBEBEBE9 - E9E9E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E9E9E9F8F8F8F9F9F9FAFAFAFAFAFA - FDFDFDFCFCFCFAFAFAF9F9F9F8F8F8F8F8F8F8F8F8F7F7F7F7F7F7F6F6F6F4F4 - F4F5F5F5F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFEBEBEBE6E6E6F7F7F7F8F8F8F8 - F8F8F8F8F8F9F9F9FCFCFCFBFBFBFAFAFAFFFFFFFFFFFFFAFAFAE7E7E7D5D5D5 - B3B3B3C1C1C1E5E5E5E9E9E9E9E9E9E9E9E9E8E8E8E8E8E8E4E4E4E3E3E3D9D9 - D9E9E9E9F6F6F6F4F4F4F5F5F5F7F7F7F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFFB - FBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBEDEDEDEEEEEEECECEC - ECECECEAEAEAE8E8E8E8E8E8D2D2D2C8C8C8E2E2E2F5F5F5F7F7F7F9F9F9F8F8 - F8F7F7F7FFFFFFF8F8F8E5E5E5E4E4E4E2E2E2E2E2E2DEDEDEE2E2E2E9E9E9EA - EAEAE8E8E8E2E2E2E3E3E3F9F9F9F8F8F8F8F8F8FAFAFAF8F8F8F8F8F8F8F8F8 - F7F7F7FFFFFFF9F9F9EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE2E2E2DADADAF6F6 - F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF8F8F8F7F7F7F5F5F5EAEAEADF - DFDFDFDFDFE4E4E4EDEDEDEDEDEDF0F0F0F5F5F5F7F7F7F8F8F8F9F9F9FFFFFF - FEFEFEE9E9E9E9E9E9E9E9E9E9E9E9E8E8E8E8E8E8D1D1D1A9A9A9D2D2D2F7F7 - F7F7F7F7F7F7F7F5F5F5F5F5F5F7F7F7F9F9F9FBFBFBFEFEFEFCFCFCFFFFFFE1 - E1E1DDDDDDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF0F0F0F9F9F9F6F6F6 - F7F7F7FBFBFBFDFDFDFCFCFCFBFBFBF9F9F9FAFAFAFAFAFAF7F7F7F5F5F5F4F4 - F4FFFFFFF9F9F9E8E8E8E7E7E7E6E6E6E5E5E5E7E7E7E7E7E7E4E4E4E7E7E7E9 - E9E9E9E9E9EBEBEBECECECEAEAEAE7E7E7E7E7E7E8E8E8E9E9E9D9D9D9B2B2B2 - BFBFBFE4E4E4F5F5F5F7F7F7F7F7F7F9F9F9F9F9F9F8F8F8F9F9F9FBFBFBFAFA - FAFDFDFDFBFBFBF7F7F7F9F9F9F9F9F9F8F8F8F7F7F7F8F8F8F6F6F6F7F7F7FF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F0F0ECECECEAEAEAE9E9E9E7E7E7E7E7E7 - E7E7E7E8E8E8E6E6E6E1E1E1E3E3E3E5E5E5E8E8E8E9E9E9D3D3D3DCDCDCF2F2 - F2F0F0F0EAEAEAEBEBEBEFEFEFF3F3F3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFECECECEAEAEAEAEAEAE8E8E8E8E8E8EAEAEA - E9E9E9E9E9E9EDEDEDF0F0F0DADADAE6E6E6F7F7F7FFFFFFF8F8F8E9E9E9F8F8 - F8F9F9F9F7F7F7F6F6F6F5F5F5F5F5F5F5F5F5F6F6F6FFFFFFFFFFFFFCFCFCEC - ECECE6E6E6E0E0E0D0D0D0D2D2D2E7E7E7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F6F6F6F3F3F3F2F2F2FFFFFFFFFFFFEAEAEAE8E8E8E8E8E8E8E8E8E6E6E6DADA - DAE7E7E7F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFEAEAEAE7 - E7E7E7E7E7E7E7E7E7E7E7E7E7E7E4E4E4E2E2E2D5D5D5E6E6E6F8F8F8F8F8F8 - F9F9F9F9F9F9F9F9F9F8F8F8FAFAFAFCFCFCFBFBFBF7F7F7F6F6F6F5F5F5F4F4 - F4F5F5F5F6F6F6FFFFFFFFFFFFEDEDEDECECECC6C6C6D5D5D5F8F8F8F9F9F9F9 - F9F9F9F9F9FBFBFBFCFCFCF9F9F9FFFFFFFFFFFFFFFFFFF0F0F0ECECECE0E0E0 - DADADAE7E7E7F7F7F7FFFFFFFCFCFCE9E9E9E8E8E8E7E7E7E7E7E7E5E5E5E6E6 - E6DBDBDBE6E6E6F5F5F5F7F7F7F7F7F7F7F7F7FFFFFFFFFFFFFFFFFFF9F9F9FF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8F8EDEDEDEAEAEAE9E9E9E9E9E9E2E2E2 - D9D9D9D5D5D5D4D4D4D4D4D4C8C8C8D7D7D7EFEFEFF5F5F5F8F8F8F9F9F9F8F8 - F8F7F7F7F9F9F9FFFFFFFBFBFBE9E9E9E5E5E5E4E4E4E0E0E0E1E1E1E8E8E8E8 - E8E8E3E3E3E4E4E4E7E7E7DEDEDEE9E9E9F7F7F7F9F9F9F7F7F7F5F5F5F7F7F7 - F8F8F8F8F8F8F8F8F8D7D7D7D7D7D7EAEAEAEAEAEAEAEAEAE8E8E8E6E6E6F8F8 - F8FFFFFFFFFFFFFFFFFFF3F3F3EFEFEFF8F8F8F7F7F7F7F7F7F5F5F5F5F5F5F4 - F4F4F3F3F3EDEDEDF0F0F0EFEFEFF0F0F0F6F6F6F8F8F8F9F9F9FAFAFAFBFBFB - FBFBFBE9E9E9E7E7E7E9E9E9E8E8E8E7E7E7E8E8E8BCBCBCB8B8B8E4E4E4F6F6 - F6F6F6F6F5F5F5F5F5F5F6F6F6F8F8F8F9F9F9FBFBFBFDFDFDF9F9F9FFFFFFFE - FEFEFDFDFDFFFFFFFFFFFFECECECECECECECECECECECECEFEFEFEEEEEEF7F7F7 - F8F8F8F9F9F9FCFCFCFCFCFCFAFAFAFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F0F0 - F0F1F1F1F4F4F4E5E5E5E4E4E4E3E3E3E4E4E4E6E6E6E7E7E7E7E7E7E7E7E7E9 - E9E9E9E9E9E9E9E9E9E9E9E7E7E7E6E6E6E6E6E6D6D6D6C4C4C4B1B1B1C1C1C1 - E6E6E6F6F6F6F7F7F7F7F7F7F7F7F7F9F9F9F8F8F8F7F7F7F9F9F9FAFAFAFAFA - FAFFFFFFFCFCFCF8F8F8FBFBFBF9F9F9F8F8F8F7F7F7F7F7F7F6F6F6F6F6F6FF - FFFFFFFFFFECECECEDEDEDEDEDEDECECECEAEAEAE9E9E9E7E7E7E6E6E6E6E6E6 - E7E7E7E4E4E4E0E0E0E1E1E1E2E2E2E6E6E6E9E9E9E9E9E9D3D3D3DCDCDCF0F0 - F0EAEAEAEBEBEBF2F2F2F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFEFEFEFFFFFFFFFFFFECECECD7D7D7E9E9E9E7E7E7E7E7E7E9E9E9EAEAEA - E9E9E9E9E9E9EBEBEBEBEBEBD8D8D8F5F5F5FFFFFFFFFFFFF1F1F1ECECECFFFF - FFF8F8F8F8F8F8F8F8F8F7F7F7F5F5F5F5F5F5F5F5F5F8F8F8FFFFFFFDFDFDEC - ECECE4E4E4E0E0E0E2E2E2D9D9D9E8E8E8F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F4F4F4F0F0F0F2F2F2FFFFFFF9F9F9E8E8E8E8E8E8E8E8E8E8E8E8E6E6E6E7E7 - E7E9E9E9F4F4F4F3F3F3F3F3F3F3F3F3F4F4F4F4F4F4FFFFFFFFFFFFE8E8E8E7 - E7E7E7E7E7E7E7E7E7E7E7E7E7E7E4E4E4E0E0E0BEBEBED3D3D3F8F8F8F8F8F8 - F8F8F8F8F8F8F9F9F9F8F8F8FAFAFAF7F7F7F5F5F5F4F4F4F5F5F5F5F5F5F7F7 - F7F7F7F7F7F7F7FFFFFFFFFFFFEDEDEDEAEAEAC4C4C4D4D4D4F8F8F8FAFAFAFA - FAFAFAFAFAFBFBFBF9F9F9F9F9F9FFFFFFFFFFFFFFFFFFF1F1F1F0F0F0F1F1F1 - DEDEDEE7E7E7F7F7F7FFFFFFFFFFFFE9E9E9E6E6E6E4E4E4E4E4E4E4E4E4E5E5 - E5C9C9C9D7D7D7F5F5F5F7F7F7F7F7F7F7F7F7FFFFFFFFFFFFEFEFEFF1F1F1FE - FEFEFFFFFFFDFDFDF0F0F0EDEDEDEAEAEADDDDDDD1D1D1D6D6D6DADADAD3D3D3 - D7D7D7DEDEDEDEDEDEDEDEDEDCDCDCE2E2E2EEEEEEF5F5F5F9F9F9FAFAFAF7F7 - F7F7F7F7F9F9F9FFFFFFFBFBFBE9E9E9E4E4E4E2E2E2DEDEDEE2E2E2E8E8E8E8 - E8E8E7E7E7E9E9E9EBEBEBCECECED7D7D7F7F7F7F9F9F9F8F8F8F7F7F7F8F8F8 - F8F8F8F8F8F8F8F8F8E9E9E9E7E7E7EAEAEAEAEAEAEAEAEAEAEAEAE2E2E2E6E6 - E6F1F1F1F5F5F5F1F1F1DFDFDFEAEAEAF5F5F5F5F5F5F5F5F5F5F5F5F4F4F4F3 - F3F3F2F2F2EEEEEEF1F1F1EEEEEEF1F1F1F7F7F7F9F9F9FAFAFAFAFAFAFBFBFB - FEFEFEFFFFFFFEFEFEE8E8E8E7E7E7E7E7E7D1D1D1A1A1A1CCCCCCF4F4F4F5F5 - F5F6F6F6F5F5F5F4F4F4F7F7F7F7F7F7F9F9F9FCFCFCFCFCFCFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFBFBFBEDEDEDECECECEAEAEAEAEAEAEAEAEAEAEAEAEDEDED - F8F8F8FAFAFAFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECECECE2E2E2F2F2 - F2F4F4F4F6F6F6F9F9F9E5E5E5E3E3E3E5E5E5E6E6E6E4E4E4E5E5E5E7E7E7E8 - E8E8E9E9E9E9E9E9E9E9E9E7E7E7E6E6E6D5D5D5AFAFAFC0C0C0D4D4D4E7E7E7 - F7F7F7F8F8F8FAFAFAFAFAFAFAFAFAFAFAFAF8F8F8F8F8F8FCFCFCFDFDFDFEFE - FEFFFFFFFDFDFDFBFBFBFCFCFCF9F9F9F7F7F7F6F6F6F5F5F5F5F5F5F5F5F5FF - FFFFFFFFFFEAEAEAEAEAEAECECECEBEBEBE9E9E9E7E7E7E6E6E6E4E4E4E6E6E6 - E7E7E7DCDCDCCACACABFBFBFC3C3C3D6D6D6E8E8E8E9E9E9DFDFDFF3F3F3F8F8 - F8ECECECF2F2F2F7F7F7F7F7F7FFFFFFFFFFFFFFFFFFF1F1F1F0F0F0EFEFEFFF - FFFFDFDFDFCCCCCCC3C3C3AFAFAFE2E2E2F7F7F7E5E5E5E7E7E7EAEAEAEAEAEA - E9E9E9E9E9E9EBEBEBEBEBEBEBEBEBF9F9F9FFFFFFFFFFFFF0F0F0FFFFFFFBFB - FBECECECF9F9F9F8F8F8F6F6F6F7F7F7F7F7F7F7F7F7F9F9F9FFFFFFFFFFFFE8 - E8E8E1E1E1E2E2E2E5E5E5CBCBCBDCDCDCF8F8F8F7F7F7F7F7F7FFFFFFFFFFFF - F4F4F4F1F1F1F5F5F5F7F7F7F8F8F8E9E9E9E8E8E8E8E8E8E8E8E8E6E6E6E2E2 - E2E7E7E7DCDCDCE5E5E5F1F1F1F4F4F4F4F4F4F3F3F3FFFFFFFFFFFFE7E7E7E7 - E7E7E7E7E7E7E7E7E7E7E7E7E7E7E6E6E6CECECEA7A7A7D3D3D3F8F8F8F8F8F8 - F8F8F8F8F8F8F8F8F8F8F8F8FFFFFFFFFFFFF3F3F3F5F5F5F5F5F5F7F7F7F8F8 - F8F8F8F8F7F7F7FFFFFFFDFDFDDADADAC5C5C5AFAFAFD3D3D3F8F8F8F8F8F8F8 - F8F8F9F9F9FAFAFAF8F8F8F8F8F8FFFFFFFEFEFEEFEFEFEBEBEBDEDEDED0D0D0 - BBBBBBDBDBDBFAFAFAFCFCFCFFFFFFFCFCFCE6E6E6E4E4E4E4E4E4E6E6E6E5E5 - E5C6C6C6D5D5D5F7F7F7F7F7F7F7F7F7F7F7F7FFFFFFFFFFFFF3F3F3F4F4F4F4 - F4F4F1F1F1EEEEEEEDEDEDEAEAEAD9D9D9BFBFBFCECECEE2E2E2E3E3E3E2E2E2 - EAEAEAF1F1F1F1F1F1F0F0F0F1F1F1EFEFEFF1F1F1F5F5F5F7F7F7F8F8F8F8F8 - F8F8F8F8F9F9F9F8F8F8F5F5F5D6D6D6D3D3D3E0E0E0E1E1E1E6E6E6EAEAEAEA - EAEAEAEAEAEEEEEEEDEDEDCCCCCCD7D7D7F7F7F7F9F9F9F9F9F9F9F9F9F9F9F9 - FBFBFBF9F9F9F8F8F8FBFBFBF9F9F9F7F7F7D7D7D7D7D7D7EAEAEAE3E3E3EAEA - EAF5F5F5F3F3F3EEEEEEECECECDFDFDFE7E7E7F4F4F4F6F6F6F6F6F6F4F4F4F4 - F4F4F4F4F4F2F2F2F4F4F4F0F0F0F4F4F4F8F8F8F9F9F9FBFBFBFBFBFBFFFFFF - FFFFFFFFFFFFF4F4F4C7C7C7C6C6C6C1C1C1A1A1A1B4B4B4E2E2E2F6F6F6F7F7 - F7F8F8F8F7F7F7F6F6F6F7F7F7F9F9F9FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFD - FDFDF0F0F0F2F2F2F0F0F0ECECECEAEAEAEAEAEAEAEAEAEAEAEAEBEBEBEDEDED - ECECECFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F0F0DEDEDEE7E7E7F5F5 - F5F8F8F8F9F9F9FDFDFDF9F9F9D0D0D0D0D0D0E6E6E6E2E2E2E2E2E2E7E7E7E8 - E8E8E6E6E6E8E8E8E7E7E7D1D1D1BCBCBCAAAAAABCBCBCE6E6E6F8F8F8F8F8F8 - F8F8F8F8F8F8F9F9F9F9F9F9FDFDFDFDFDFDFAFAFAFCFCFCFFFFFFFFFFFFFFFF - FFFFFFFFFEFEFEFCFCFCFAFAFAF7F7F7F5F5F5F5F5F5F5F5F5F5F5F5FFFFFFFF - FFFFFFFFFFEAEAEAEAEAEAEEEEEEEDEDEDE8E8E8E7E7E7E6E6E6E6E6E6E6E6E6 - D0D0D0B0B0B0A9A9A9C2C2C2D4D4D4F3F3F3FAFAFAEEEEEEECECECF8F8F8F7F7 - F7F4F4F4F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFF5F5F5F0F0F0ECECECEBEBEBFF - FFFFBABABAB1B1B1C5C5C5D4D4D4F7F7F7F9F9F9E6E6E6EAEAEAEAEAEAE9E9E9 - E8E8E8E9E9E9EBEBEBEBEBEBEBEBEBE9E9E9ECECECEEEEEEE8E8E8F9F9F9E4E4 - E4DFDFDFFBFBFBF8F8F8F5F5F5F7F7F7F5F5F5F5F5F5F7F7F7FFFFFFFDFDFDEA - EAEAE5E5E5E7E7E7E8E8E8DCDCDCEAEAEAF5F5F5F5F5F5FFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFF9F9F9FBFBFBFAFAFAD2D2D2D1D1D1E6E6E6E1E1E1E2E2 - E2E7E7E7DBDBDBE4E4E4F1F1F1F3F3F3F2F2F2F4F4F4FFFFFFFFFFFFEBEBEBE7 - E7E7E7E7E7E7E7E7E7E7E7E7E7E7E6E6E6CDCDCDCACACAE4E4E4F8F8F8F8F8F8 - F8F8F8F5F5F5F3F3F3F5F5F5FFFFFFEAEAEAE8E8E8F7F7F7F7F7F7F7F7F7F9F9 - F9F8F8F8F7F7F7F9F9F9F7F7F7C8C8C8BEBEBED1D1D1E6E6E6F7F7F7F8F8F8F9 - F9F9F9F9F9F9F9F9F7F7F7FBFBFBFEFEFEF9F9F9E5E5E5D5D5D5C1C1C1C9C9C9 - D8D8D8EAEAEAF8F8F8FCFCFCFFFFFFFFFFFFE6E6E6E5E5E5E4E4E4E4E4E4D1D1 - D1AAAAAAD3D3D3F7F7F7F7F7F7F7F7F7F7F7F7FFFFFFFFFFFFF7F7F7F6F6F6F3 - F3F3EEEEEEEAEAEAE8E8E8E5E5E5CACACACACACAEAEAEAF7F7F7F6F6F6F4F4F4 - F4F4F4F3F3F3F1F1F1F1F1F1F1F1F1F0F0F0F0F0F0F4F4F4F6F6F6F5F5F5F7F7 - F7F8F8F8F8F8F8F5F5F5F3F3F3E1E1E1E2E2E2D3D3D3D5D5D5E9E9E9E9E9E9EC - ECECECECECECECECECECECDDDDDDF7F7F7FFFFFFF9F9F9F9F9F9F9F9F9FBFBFB - FDFDFDFBFBFBF8F8F8FAFAFAFAFAFAF8F8F8F5F5F5FFFFFFF9F9F9E5E5E5E8E8 - E8EAEAEAEAEAEAECECECECECECDEDEDEE7E7E7F4F4F4F6F6F6F5F5F5F4F4F4F5 - F5F5F5F5F5F5F5F5F3F3F3F1F1F1F6F6F6F9F9F9F9F9F9FCFCFCFEFEFEFFFFFF - FFFFFFFFFFFFE9E9E9D4D4D4D0D0D0C5C5C5C5C5C5E1E1E1F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F8F8F8FCFCFCFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBEE - EEEEEDEDEDEDEDEDEDEDEDECECECEAEAEAEAEAEAEAEAEAEBEBEBECECECEBEBEB - E9E9E9F9F9F9FFFFFFFFFFFFFCFCFCF0F0F0EEEEEEECECECEAEAEAD7D7D7E4E4 - E4F8F8F8FDFDFDFEFEFEFBFBFBE3E3E3E2E2E2E4E4E4DFDFDFE2E2E2E7E7E7E8 - E8E8E4E4E4E5E5E5D2D2D2A9A9A9BABABACCCCCCE2E2E2F7F7F7F5F5F5F6F6F6 - F8F8F8F8F8F8F8F8F8F8F8F8FEFEFEF8F8F8F5F5F5FCFCFCFDFDFDFDFDFDFFFF - FFFFFFFFFDFDFDFCFCFCF8F8F8F6F6F6F6F6F6FFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFF8F8F8EAEAEAECECECEEEEEEEBEBEBE8E8E8E7E7E7E7E7E7E7E7E7E6E6E6 - B5B5B5B2B2B2D3D3D3E9E9E9F8F8F8FFFFFFFFFFFFF0F0F0ECECECEEEEEEF0F0 - F0EDEDEDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEEEEEEEAEAEAEBEBEBEEEEEEFF - FFFFC2C2C2DBDBDBEBEBEBF7F7F7F7F7F7F7F7F7EAEAEAEAEAEAE8E8E8E9E9E9 - E9E9E9EAEAEAEBEBEBEBEBEBEBEBEBE9E9E9EBEBEBECECECE9E9E9EDEDEDE1E1 - E1F5F5F5FFFFFFFFFFFFF7F7F7F7F7F7F4F4F4F5F5F5F8F8F8FBFBFBFFFFFFF9 - F9F9EAEAEAEAEAEAE9E9E9E6E6E6DCDCDCE7E7E7F5F5F5FFFFFFFFFFFFFCFCFC - FAFAFAFFFFFFEBEBEBEDEDEDFBFBFBF9F9F9E4E4E4E5E5E5D2D2D2CFCFCFE7E7 - E7EAEAEAEAEAEAD9D9D9E1E1E1F1F1F1F3F3F3FFFFFFFFFFFFFFFFFFEEEEEEE7 - E7E7E7E7E7E7E7E7E7E7E7E7E7E7E4E4E4CCCCCCBABABAE4E4E4F8F8F8F8F8F8 - F5F5F5F0F0F0F0F0F0F6F6F6F7F7F7E7E7E7E7E7E7F7F7F7F7F7F7F7F7F7F9F9 - F9F8F8F8F7F7F7F7F7F7F6F6F6E3E3E3E2E2E2F6F6F6F9F9F9F8F8F8FBFBFBFC - FCFCFBFBFBFAFAFAFBFBFBFEFEFEFDFDFDF7F7F7ECECECDEDEDED7D7D7E5E5E5 - F4F4F4F5F5F5F5F5F5FFFFFFFFFFFFFFFFFFE5E5E5E3E3E3E1E1E1E0E0E0BABA - BABABABAE4E4E4F7F7F7F7F7F7F7F7F7F7F7F7FFFFFFFFFFFFF3F3F3F1F1F1EE - EEEEE8E8E8E7E7E7E8E8E8E8E8E8DBDBDBE7E7E7F7F7F7F8F8F8F9F9F9F8F8F8 - F5F5F5F4F4F4F3F3F3F3F3F3F2F2F2F0F0F0F0F0F0F3F3F3F5F5F5F5F5F5F6F6 - F6F5F5F5F4F4F4F5F5F5F3F3F3F1F1F1F3F3F3E5E5E5E7E7E7EAEAEAE9E9E9EB - EBEBEAEAEAECECECEDEDEDEDEDEDFEFEFEFFFFFFFFFFFFFFFFFFFBFBFBFDFDFD - FCFCFCF9F9F9F9F9F9FBFBFBFBFBFBF8F8F8FFFFFFFFFFFFF5F5F5E3E3E3E3E3 - E3E4E4E4ECECECEEEEEEECECECEBEBEBDEDEDEE9E9E9F4F4F4F2F2F2F2F2F2F4 - F4F4F3F3F3F3F3F3F0F0F0F0F0F0F5F5F5F9F9F9FCFCFCFFFFFFFFFFFFFFFFFF - FFFFFFF9F9F9F4F4F4F2F2F2E9E9E9E6E6E6EEEEEEF5F5F5F5F5F5F8F8F8F8F8 - F8F8F8F8F9F9F9FBFBFBFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFF8F8F8EAEAEAEA - EAEAE9E9E9EAEAEAECECECECECECEAEAEAEAEAEAEAEAEAEBEBEBEBEBEBE9E9E9 - E7E7E7E9E9E9ECECECEBEBEBECECECEFEFEFEEEEEEECECECECECECD8D8D8E5E5 - E5FBFBFBFEFEFEFCFCFCF9F9F9F8F8F8F8F8F8F4F4F4E2E2E2E6E6E6E8E8E8E8 - E8E8E4E4E4E1E1E1CCCCCCCBCBCBE2E2E2F4F4F4F7F7F7F9F9F9F7F7F7FAFAFA - FBFBFBF9F9F9F9F9F9F8F8F8FBFBFBF1F1F1F0F0F0F6F6F6FAFAFAFCFCFCFEFE - FEFFFFFFFEFEFEFAFAFAF7F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7 - F7F7EAEAEAEAEAEAEBEBEBECECECEAEAEAE8E8E8E8E8E8E4E4E4E4E4E4CCCCCC - 9E9E9ECECECEF8F8F8F8F8F8F9F9F9FFFFFFFFFFFFEEEEEEEBEBEBEEEEEEEEEE - EEECECECFFFFFFFFFFFFFFFFFFF0F0F0EAEAEAE7E7E7E6E6E6E9E9E9ECECECFF - FFFFEDEDEDFDFDFDFBFBFBF8F8F8F7F7F7F7F7F7F5F5F5DEDEDECDCDCDCCCCCC - DBDBDBEAEAEAEBEBEBEBEBEBEBEBEBE9E9E9EAEAEAECECECE9E9E9E9E9E9EBEB - EBF7F7F7FFFFFFF9F9F9F1F1F1EEEEEEF0F0F0F4F4F4F9F9F9FCFCFCFFFFFFFD - FDFDECECECEAEAEAE8E8E8D9D9D9C1C1C1DBDBDBF3F3F3FFFFFFFEFEFEF1F1F1 - EDEDEDECECECDFDFDFF1F1F1FEFEFEFAFAFAFBFBFBFBFBFBE5E5E5E5E5E5ECEC - ECEAEAEAEAEAEADADADAE1E1E1F0F0F0FFFFFFFFFFFFFFFFFFFDFDFDE9E9E9E8 - E8E8E7E7E7E7E7E7E7E7E7E7E7E7E1E1E1B8B8B8B7B7B7E4E4E4F8F8F8F7F7F7 - F1F1F1F0F0F0F3F3F3F8F8F8F9F9F9F7F7F7F8F8F8F8F8F8F7F7F7F7F7F7F9F9 - F9F8F8F8F7F7F7F6F6F6F6F6F6F5F5F5F5F5F5F8F8F8F8F8F8F7F7F7FBFBFBFB - FBFBF9F9F9F9F9F9FBFBFBFBFBFBF7F7F7F2F2F2F1F1F1F0F0F0F1F1F1F4F4F4 - F5F5F5F5F5F5F5F5F5FFFFFFFFFFFFF7F7F7E4E4E4E1E1E1DFDFDFDFDFDFBABA - BACECECEF7F7F7F7F7F7F7F7F7F7F7F7FAFAFAFFFFFFFFFFFFFDFDFDECECECE8 - E8E8E3E3E3E5E5E5EAEAEAE9E9E9E9E9E9EBEBEBF7F7F7F8F8F8F9F9F9F9F9F9 - F5F5F5F4F4F4F4F4F4F3F3F3F2F2F2F1F1F1F1F1F1F4F4F4F5F5F5F5F5F5F5F5 - F5F4F4F4F5F5F5F4F4F4F3F3F3F5F5F5F7F7F7F7F7F7F8F8F8FFFFFFFBFBFBE9 - E9E9E9E9E9EBEBEBEBEBEBECECECEFEFEFF0F0F0FEFEFEFEFEFEFDFDFDFCFCFC - F9F9F9F8F8F8FAFAFAFAFAFAFAFAFAF8F8F8F7F7F7FFFFFFF0F0F0E9E9E9EBEB - EBEDEDEDF4F4F4F1F1F1EDEDEDECECECD1D1D1DCDCDCF1F1F1F0F0F0F2F2F2F3 - F3F3EEEEEEF4F4F4F1F1F1F1F1F1F8F8F8F9F9F9FDFDFDFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFF1F1F1EAEAEAEDEDEDF5F5F5F6F6F6F7F7F7F8F8F8F8F8 - F8F8F8F8FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCEDEDEDECECECEAEAEAE9 - E9E9E9E9E9EBEBEBEDEDEDECECECEAEAEAEAEAEAEAEAEAEDEDEDECECECEAEAEA - E7E7E7E9E9E9EAEAEAE8E8E8E9E9E9ECECECECECECECECECEDEDEDEEEEEEEEEE - EEFBFBFBFBFBFBF8F8F8F8F8F8F8F8F8F8F8F8F7F7F7F7F7F7E8E8E8E8E8E8E6 - E6E6DFDFDFD9D9D9DEDEDED7D7D7F4F4F4FFFFFFF9F9F9FAFAFAFCFCFCFFFFFF - FCFCFCFAFAFAFBFBFBF9F9F9F8F8F8F5F5F5F4F4F4F5F5F5FBFBFBFBFBFBFDFD - FDFFFFFFFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9EAEAEAE9E9E9E8 - E8E8E9E9E9EAEAEAEBEBEBECECECEBEBEBEAEAEAE6E6E6E2E2E2E4E4E4BBBBBB - B6B6B6E3E3E3F7F7F7F7F7F7FFFFFFFFFFFFFFFFFFEEEEEEEBEBEBEDEDEDEAEA - EAE9E9E9F1F1F1F3F3F3ECECECE8E8E8E6E6E6E5E5E5E6E6E6E6E6E6E6E6E6FF - FFFFF8F8F8FFFFFFFFFFFFF7F7F7F6F6F6F6F6F6F5F5F5E7E7E7D4D4D4D2D2D2 - E2E2E2D8D8D8C8C8C8DADADAEBEBEBEAEAEAECECECEDEDEDEBEBEBEDEDEDEEEE - EEEDEDEDEDEDEDEDEDEDD5D5D5E0E0E0F4F4F4FBFBFBFDFDFDFCFCFCFDFDFDFF - FFFFF9F9F9ECECECEEEEEED1D1D1CACACAE5E5E5F2F2F2F4F4F4F8F8F8EDEDED - EAEAEAECECECEDEDEDE4E4E4EEEEEEFAFAFAFBFBFBFBFBFBF8F8F8FCFCFCFAFA - FAEAEAEAEAEAEAD7D7D7BEBEBEF3F3F3FFFFFFFFFFFFFFFFFFEBEBEBE7E7E7E9 - E9E9E7E7E7E7E7E7E7E7E7D1D1D1B5B5B5A5A5A5CECECEF5F5F5F8F8F8F4F4F4 - EEEEEEF1F1F1F4F4F4F4F4F4F4F4F4FBFBFBFDFDFDF8F8F8F7F7F7F7F7F7F9F9 - F9F8F8F8F6F6F6F4F4F4F5F5F5F5F5F5F6F6F6F7F7F7F8F8F8F7F7F7F7F7F7F8 - F8F8F7F7F7F7F7F7F7F7F7F7F7F7F5F5F5F3F3F3F3F3F3F3F3F3F4F4F4F5F5F5 - F5F5F5F5F5F5F5F5F5FFFFFFFFFFFFE8E8E8E3E3E3E1E1E1E1E1E1E0E0E0BCBC - BCD1D1D1F7F7F7F8F8F8F7F7F7F8F8F8FDFDFDFEFEFEFFFFFFFFFFFFE4E4E4E3 - E3E3E1E1E1E3E3E3E7E7E7E5E5E5E8E8E8ECECECECECECF8F8F8FBFBFBF8F8F8 - F5F5F5FFFFFFFFFFFFFFFFFFFDFDFDF1F1F1F1F1F1F4F4F4F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F7F7F7F8F8F8F7F7F7F8F8F8FFFFFFFDFDFDE9 - E9E9E9E9E9EAEAEAEAEAEAECECECECECECEAEAEAEAEAEAECECECEEEEEEFBFBFB - F9F9F9F8F8F8FAFAFAF9F9F9F9F9F9F8F8F8F7F7F7FFFFFFF8F8F8F0F0F0F1F1 - F1EDEDEDF1F1F1F1F1F1EFEFEFEDEDEDE1E1E1EAEAEAF1F1F1F2F2F2F5F5F5F5 - F5F5F3F3F3F9F9F9F5F5F5F5F5F5FDFDFDFDFDFDFDFDFDFFFFFFFFFFFFEDEDED - FFFFFFFFFFFFE5E5E5DEDEDEE6E6E6EEEEEEF5F5F5F7F7F7F8F8F8F8F8F8F8F8 - F8FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCECECECECECECEAEAEAE7E7E7E7 - E7E7E9E9E9EDEDEDEDEDEDEBEBEBEAEAEAEAEAEAEAEAEAECECECECECECE9E9E9 - E7E7E7EAEAEAE9E9E9E4E4E4E6E6E6E9E9E9EAEAEAEBEBEBEDEDEDF0F0F0EDED - EDECECECF8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8FFFFFFFFFFFFF9F9F9E2 - E2E2DCDCDCDEDEDEE7E7E7CECECEF7F7F7FBFBFBECECECFBFBFBFFFFFFFFFFFF - FBFBFBFAFAFAFAFAFAF7F7F7F7F7F7F8F8F8F7F7F7F7F7F7F9F9F9F9F9F9FBFB - FBFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFF8F8F8E7E7E7E6E6E6E4E4E4E6E6E6E6 - E6E6E8E8E8EAEAEAECECECEDEDEDEDEDEDEBEBEBE8E8E8E6E6E6E7E7E7D3D3D3 - E2E2E2F6F6F6F7F7F7FFFFFFFFFFFFFFFFFFFCFCFCECECECE9E9E9E9E9E9EAEA - EAEAEAEAF2F2F2F0F0F0E7E7E7E6E6E6E5E5E5E5E5E5E6E6E6E6E6E6E6E6E6FF - FFFFF1F1F1FDFDFDF9F9F9F3F3F3F4F4F4F5F5F5F5F5F5F2F2F2EDEDEDEDEDED - F0F0F0E4E4E4D7D7D7E8E8E8ECECECEBEBEBECECECEDEDEDECECECEEEEEEEEEE - EEEDEDEDEEEEEEEEEEEEC6C6C6D5D5D5FBFBFBFEFEFEFDFDFDFCFCFCFEFEFEFF - FFFFFFFFFFF1F1F1F1F1F1DEDEDEE4E4E4F0F0F0F4F4F4F5F5F5F5F5F5F4F4F4 - EBEBEBE9E9E9DCDCDCC5C5C5DCDCDCF7F7F7FBFBFBFDFDFDFBFBFBFBFBFBF7F7 - F7F1F1F1D3D3D3ABABABBCBCBCFFFFFFFFFFFFFFFFFFECECECE9E9E9E7E7E7E7 - E7E7E6E6E6E7E7E7D5D5D5A4A4A4B3B3B3CFCFCFE2E2E2F6F6F6F8F8F8F1F1F1 - EEEEEEF4F4F4F4F4F4F5F5F5F8F8F8FFFFFFFFFFFFF8F8F8F8F8F8F9F9F9F9F9 - F9F8F8F8F5F5F5F4F4F4F5F5F5F5F5F5F5F5F5F5F5F5F9F9F9F8F8F8F5F5F5F7 - F7F7F7F7F7F5F5F5F5F5F5F5F5F5F4F4F4F3F3F3F4F4F4F4F4F4F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5FFFFFFFFFFFFEBEBEBE6E6E6E4E4E4E2E2E2E2E2E2C1C1 - C1D4D4D4F8F8F8F8F8F8F9F9F9FAFAFAFCFCFCF8F8F8FDFDFDE2E2E2D4D4D4E4 - E4E4E2E2E2E4E4E4E9E9E9EBEBEBECECECEFEFEFEDEDEDEDEDEDFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFF5F5F5FEFEFEFFFFFFFFFFFFF5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F6F6F6F3F3F3F5F5F5F7F7F7F7F7F7FCFCFCFFFFFFFFFFFFF8 - F8F8DCDCDCDCDCDCEAEAEAEAEAEAE9E9E9E8E8E8E9E9E9E9E9E9EAEAEAECECEC - F8F8F8F8F8F8FAFAFAF9F9F9F9F9F9F8F8F8F7F7F7F8F8F8F8F8F8E6E6E6E3E3 - E3EBEBEBECECECEEEEEEEDEDEDEEEEEEF0F0F0DEDEDEE2E2E2F2F2F2F6F6F6F6 - F6F6F7F7F7FDFDFDF7F7F7F5F5F5FFFFFFFFFFFFF8F8F8FFFFFFFFFFFFD5D5D5 - EEEEEEE7E7E7A8A8A8BCBCBCE2E2E2ECECECF3F3F3F6F6F6F8F8F8F9F9F9FBFB - FBFFFFFFFFFFFFFFFFFFFEFEFEEDEDEDEAEAEAEAEAEAE9E9E9D5D5D5D2D2D2E6 - E6E6EAEAEAECECECEAEAEAEAEAEAE9E9E9E8E8E8E5E5E5D4D4D4C0C0C0BDBDBD - BEBEBEC1C1C1C0C0C0C1C1C1C6C6C6DCDCDCECECECECECECEEEEEEEEEEEEEBEB - EBE9E9E9DADADAE8E8E8F8F8F8F9F9F9F7F7F7FFFFFFFFFFFFFFFFFFFBFBFBE4 - E4E4E2E2E2E6E6E6ECECECDEDEDEFFFFFFEEEEEEDADADAF8F8F8FEFEFEFBFBFB - F7F7F7F9F9F9F8F8F8F5F5F5F6F6F6F8F8F8F7F7F7F7F7F7F9F9F9FAFAFAFBFB - FBFFFFFFFFFFFFFFFFFFFAFAFAEBEBEBE9E9E9E6E6E6E4E4E4E6E6E6E5E5E5E7 - E7E7EAEAEAEBEBEBECECECEDEDEDECECECEAEAEAE9E9E9E9E9E9E7E7E7E7E7E7 - E7E7E7F7F7F7F9F9F9FFFFFFFFFFFFFBFBFBEBEBEBEAEAEAE7E7E7E9E9E9DADA - DADBDBDBEEEEEEECECECE7E7E7E6E6E6E6E6E6E6E6E6E5E5E5E5E5E5E5E5E5FF - FFFFE7E7E7E7E7E7E6E6E6D5D5D5E4E4E4F5F5F5F3F3F3F0F0F0EEEEEEEEEEEE - F1F1F1F7F7F7F8F8F8F9F9F9F8F8F8E9E9E9E6E6E6E9E9E9EBEBEBECECECEAEA - EAE9E9E9ECECECD8D8D8AEAEAED5D5D5FBFBFBFCFCFCFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFEEEEEEECECECE7E7E7D0D0D0DCDCDCF3F3F3F4F4F4F5F5F5F7F7F7 - F7F7F7E1E1E1C9C9C9D3D3D3E9E9E9F5F5F5FBFBFBFCFCFCF8F8F8F8F8F8F5F5 - F5F0F0F0E1E1E1D1D1D1E6E6E6FFFFFFFFFFFFEEEEEEE8E8E8E8E8E8E7E7E7E6 - E6E6E7E7E7D7D7D7ACACACB5B5B5DFDFDFF7F7F7F5F5F5F6F6F6F8F8F8F1F1F1 - F3F3F3F9F9F9F8F8F8FCFCFCFFFFFFFFFFFFFFFFFFFAFAFAF9F9F9F9F9F9F8F8 - F8F7F7F7F4F4F4F4F4F4F5F5F5F6F6F6F6F6F6F8F8F8FAFAFAF7F7F7F5F5F5F6 - F6F6F5F5F5F5F5F5F5F5F5F5F5F5F4F4F4F3F3F3F3F3F3F4F4F4F5F5F5F3F3F3 - F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFE9E9E9E5E5E5E4E4E4E5E5E5E6E6E6C4C4 - C4D5D5D5F8F8F8F8F8F8F9F9F9F8F8F8F9F9F9F5F5F5F1F1F1E5E5E5E6E6E6D9 - D9D9D7D7D7EAEAEAEDEDEDEDEDEDEDEDEDEDEDEDEAEAEAE9E9E9F4F4F4E9E9E9 - FEFEFEFFFFFFF7F7F7EAEAEAEAEAEAF7F7F7FFFFFFF5F5F5F2F2F2F5F5F5F5F5 - F5F5F5F5F3F3F3F0F0F0EEEEEEF2F2F2F6F6F6FAFAFAFFFFFFFFFFFFFFFFFFED - EDEDBCBCBCD7D7D7EAEAEAEAEAEAE9E9E9E8E8E8E9E9E9E8E8E8E7E7E7EBEBEB - DCDCDCE9E9E9F9F9F9F9F9F9F9F9F9F7F7F7F6F6F6F6F6F6F6F6F6E9E9E9E9E9 - E9EBEBEBECECECEDEDEDECECECEDEDEDEFEFEFDCDCDCE1E1E1F1F1F1F5F5F5F5 - F5F5F6F6F6FDFDFDF9F9F9F8F8F8FFFFFFFCFCFCE7E7E7FFFFFFFFFFFFD0D0D0 - D3D3D3D6D6D6B8B8B8CCCCCCEBEBEBF3F3F3F5F5F5F9F9F9F9F9F9FAFAFAFAFA - FAFFFFFFFFFFFFFFFFFFF0F0F0EBEBEBE9E9E9D3D3D3BABABAA7A7A7DCDCDCF9 - F9F9EDEDEDEBEBEBEAEAEAEBEBEBEAEAEAE8E8E8E1E1E1C3C3C3C0C0C0CFCFCF - CFCFCFD0D0D0D1D1D1D3D3D3D7D7D7E9E9E9DCDCDCDCDCDCF0F0F0EDEDEDE9E9 - E9E8E8E8C5C5C5D4D4D4F8F8F8F9F9F9F7F7F7FFFFFFFFFFFFFDFDFDEAEAEAE9 - E9E9E6E6E6E8E8E8ECECECEEEEEEFDFDFDEDEDEDEBEBEBFCFCFCFFFFFFFCFCFC - F7F7F7F8F8F8F7F7F7F7F7F7F8F8F8F7F7F7F5F5F5F7F7F7FAFAFAFAFAFAFAFA - FAFFFFFFFFFFFFF9F9F9E6E6E6E6E6E6E6E6E6E4E4E4E6E6E6E7E7E7E6E6E6D5 - D5D5C3C3C3D8D8D8ECECECEDEDEDEBEBEBE9E9E9E9E9E9E8E8E8E7E7E7E9E9E9 - E8E8E8EAEAEAF9F9F9FFFFFFFFFFFFE7E7E7E9E9E9DADADAC9C9C9CCCCCCBBBB - BBDADADAEFEFEFEEEEEEEAEAEAE6E6E6E6E6E6E4E4E4E4E4E4E5E5E5E5E5E5FF - FFFFE6E6E6E6E6E6E5E5E5D3D3D3E1E1E1F4F4F4F3F3F3F1F1F1F0F0F0EFEFEF - F6F6F6FBFBFBFCFCFCFDFDFDFEFEFEFFFFFFF9F9F9EFEFEFEDEDEDEBEBEBE9E9 - E9EAEAEAECECECC3C3C3BFBFBFE9E9E9FBFBFBFCFCFCFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFE9E9E9E8E8E8E6E6E6BCBCBCCCCCCCF3F3F3F5F5F5F7F7F7F7F7F7 - F9F9F9EFEFEFE6E6E6EFEFEFF8F8F8F6F6F6F7F7F7F7F7F7F5F5F5F5F5F5F5F5 - F5F4F4F4F5F5F5F8F8F8F8F8F8FFFFFFFFFFFFEEEEEEE8E8E8E9E9E9E9E9E9E6 - E6E6E7E7E7C4C4C4BBBBBBDEDEDEF3F3F3F7F7F7F7F7F7F7F7F7F7F7F7F1F1F1 - F4F4F4FBFBFBFBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFF5F5F5F5F5F5F5F5F5F6F6F6F8F8F8F8F8F8FAFAFAF9F9F9F7F7F7F5F5F5F5 - F5F5F6F6F6F7F7F7F7F7F7F5F5F5F5F5F5F4F4F4F5F5F5F6F6F6F3F3F3EEEEEE - F0F0F0F0F0F0F0F0F0FFFFFFF7F7F7E9E9E9E7E7E7E7E7E7E9E9E9E8E8E8C3C3 - C3D4D4D4F8F8F8F8F8F8F8F8F8F9F9F9F9F9F9F4F4F4F3F3F3F3F3F3F1F1F1E5 - E5E5E7E7E7EDEDEDEDEDEDEAEAEAEAEAEAEAEAEAE7E7E7E6E6E6E9E9E9DDDDDD - FFFFFFFFFFFFEAEAEAEAEAEAEAEAEAEAEAEAECECECE7E7E7E7E7E7F5F5F5F5F5 - F5F5F5F5F3F3F3F4F4F4F4F4F4F4F4F4F7F7F7FCFCFCFFFFFFFFFFFFEDEDEDDA - DADAD6D6D6E6E6E6F7F7F7EBEBEBE9E9E9E7E7E7E6E6E6E7E7E7E7E7E7E9E9E9 - DBDBDBF7F7F7FFFFFFFAFAFAF9F9F9F8F8F8F6F6F6F5F5F5F5F5F5F3F3F3F4F4 - F4FFFFFFF9F9F9ECECECEBEBEBEEEEEEF0F0F0EAEAEAE9E9E9FFFFFFFFFFFFF7 - F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECECECD6D6D6FFFFFFE9E9E9B7B7B7 - CCCCCCE1E1E1E1E1E1EBEBEBF7F7F7F9F9F9F9F9F9FCFCFCFCFCFCFBFBFBF9F9 - F9FFFFFFFFFFFFF0F0F0EDEDEDEBEBEBE9E9E9C1C1C1BFBFBFD5D5D5FBFBFBFF - FFFFEEEEEEECECECEBEBEBECECECEAEAEAE7E7E7E3E3E3C8C8C8D7D7D7F5F5F5 - F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7E8E8E8E9E9E9EEEEEEECECECE7E7 - E7E7E7E7C1C1C1CFCFCFF3F3F3F8F8F8FFFFFFFFFFFFFFFFFFECECECEAEAEAEA - EAEAE8E8E8EAEAEAEBEBEBEDEDEDECECECEBEBEBE0E0E0EEEEEEFDFDFDFBFBFB - F9F9F9F9F9F9F8F8F8F8F8F8F8F8F8F7F7F7F7F7F7F8F8F8FBFBFBF9F9F9F8F8 - F8FFFFFFFFFFFFE7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E8E8E8E7E7E7D3D3D3AD - ADADBFBFBFE6E6E6EDEDEDEEEEEEEBEBEBE9E9E9E8E8E8E7E7E7E7E7E7E9E9E9 - EAEAEAE9E9E9D7D7D7F6F6F6E8E8E8C6C6C6CACACABABABAC8C8C8DBDBDBDBDB - DBEDEDEDFFFFFFFDFDFDEBEBEBE6E6E6E4E4E4E4E4E4E5E5E5E6E6E6E6E6E6FF - FFFFE4E4E4E5E5E5E5E5E5D0D0D0C2C2C2E5E5E5F5F5F5F2F2F2F1F1F1F4F4F4 - FBFBFBFFFFFFFFFFFFFFFFFFFDFDFDFFFFFFF0F0F0E2E2E2EDEDEDEBEBEBEBEB - EBECECECDBDBDBAFAFAFD5D5D5FBFBFBFBFBFBFDFDFDFFFFFFFFFFFFFFFFFFFF - FFFFF9F9F9E8E8E8E9E9E9E7E7E7BCBCBCCECECEF4F4F4F5F5F5F7F7F7F7F7F7 - F9F9F9FBFBFBFBFBFBFBFBFBF7F7F7F4F4F4F5F5F5F7F7F7F7F7F7F6F6F6F5F5 - F5F5F5F5F7F7F7F8F8F8F9F9F9FFFFFFFFFFFFEDEDEDE7E7E7E7E7E7E5E5E5E4 - E4E4D7D7D7B0B0B0D0D0D0F3F3F3F5F5F5F7F7F7F9F9F9FCFCFCF8F8F8F5F5F5 - F8F8F8FAFAFAFBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFD - FDF7F7F7F5F5F5F5F5F5F6F6F6F8F8F8F8F8F8F9F9F9F8F8F8F7F7F7F8F8F8F7 - F7F7F8F8F8F9F9F9F7F7F7F5F5F5F4F4F4F4F4F4F4F4F4F0F0F0EDEDEDEDEDED - F0F0F0F1F1F1F2F2F2F4F4F4F7F7F7EAEAEAEAEAEAEAEAEAEAEAEAE9E9E9C3C3 - C3D3D3D3F8F8F8F8F8F8F8F8F8F9F9F9F7F7F7F3F3F3F1F1F1F0F0F0F2F2F2F6 - F6F6F8F8F8FFFFFFFEFEFEEAEAEAE9E9E9E8E8E8E5E5E5E6E6E6E9E9E9E9E9E9 - FBFBFBFAFAFAEAEAEAEAEAEAEAEAEAEAEAEAEBEBEBE7E7E7E6E6E6DFDFDFEAEA - EAF2F2F2EEEEEEF1F1F1F1F1F1F6F6F6FBFBFBFFFFFFFFFFFFFFFFFFD0D0D0DC - DCDCF0F0F0F4F4F4F8F8F8FFFFFFF4F4F4E5E5E5E4E4E4E6E6E6E7E7E7E8E8E8 - EBEBEBFBFBFBFDFDFDFAFAFAF9F9F9F7F7F7F7F7F7F7F7F7F5F5F5F3F3F3F4F4 - F4FFFFFFE7E7E7DADADAEAEAEAEFEFEFEFEFEFEAEAEAEAEAEAFCFCFCFCFCFCFF - FFFFFFFFFFFFFFFFFFFFFFF9F9F9FFFFFFFDFDFDE7E7E7F5F5F5E6E6E6D5D5D5 - DCDCDCECECECF3F3F3F8F8F8FAFAFAFAFAFAFAFAFAFCFCFCFCFCFCFAFAFAFAFA - FAFFFFFFFFFFFFEEEEEEEBEBEBE9E9E9E8E8E8C6C6C6D2D2D2F8F8F8FFFFFFFF - FFFFFAFAFAEEEEEEEBEBEBEBEBEBEAEAEAE6E6E6D3D3D3B2B2B2D3D3D3F2F2F2 - F5F5F5F7F7F7F7F7F7F7F7F7F8F8F8F8F8F8F7F7F7F7F7F7FAFAFAE7E7E7E3E3 - E3D3D3D3ABABABCCCCCCF3F3F3FFFFFFFFFFFFFFFFFFFFFFFFECECECEAEAEAEA - EAEAEAEAEAEAEAEAEBEBEBEBEBEBECECECEDEDEDE2E2E2EDEDEDF9F9F9F8F8F8 - F8F8F8F7F7F7F5F5F5F4F4F4F5F5F5F5F5F5F6F6F6F9F9F9F9F9F9F8F8F8F7F7 - F7FFFFFFEBEBEBD8D8D8EAEAEAEAEAEAEAEAEAEAEAEAE8E8E8E6E6E6C2C2C2C1 - C1C1E7E7E7F8F8F8FAFAFAECECECEAEAEAE8E8E8E7E7E7E7E7E7E9E9E9EAEAEA - EAEAEAE7E7E7C3C3C3D5D5D5E8E8E8D7D7D7DBDBDBDEDEDEECECECFCFCFCFDFD - FDFEFEFEFFFFFFFFFFFFECECECE7E7E7E3E3E3DFDFDFCECECEBFBFBFBFBFBFFF - FFFFD1D1D1D1D1D1D1D1D1ACACACC0C0C0E6E6E6F3F3F3EEEEEEF0F0F0F6F6F6 - FBFBFBFEFEFEFFFFFFFEFEFEF8F8F8F5F5F5E7E7E7E6E6E6EAEAEAEBEBEBEBEB - EBE9E9E9C1C1C1BCBCBCE7E7E7FBFBFBFCFCFCFDFDFDFFFFFFFFFFFFFFFFFFFB - FBFBEAEAEAE8E8E8E9E9E9E7E7E7BCBCBCCCCCCCF2F2F2F4F4F4F4F4F4F6F6F6 - F9F9F9FBFBFBF9F9F9F8F8F8F5F5F5F4F4F4F7F7F7F8F8F8F7F7F7FFFFFFFFFF - FFFFFFFFFFFFFFF7F7F7F9F9F9FFFFFFFFFFFFEAEAEAE6E6E6E4E4E4E4E4E4E4 - E4E4C5C5C5BFBFBFE2E2E2F5F5F5F6F6F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCE9E9E9EAEA - EAD2D2D2DFDFDFF3F3F3F4F4F4F8F8F8FFFFFFFFFFFFF8F8F8F7F7F7F8F8F8F7 - F7F7F8F8F8F7F7F7F5F5F5F4F4F4F3F3F3F1F1F1EDEDEDEDEDEDF0F0F0F0F0F0 - F3F3F3F4F4F4F7F7F7F9F9F9F9F9F9FFFFFFFDFDFDEAEAEAEAEAEAEAEAEAC2C2 - C2D2D2D2F7F7F7F7F7F7F7F7F7F7F7F7F5F5F5F4F4F4F3F3F3F4F4F4F7F7F7F9 - F9F9FFFFFFFFFFFFFFFFFFE9E9E9E8E8E8E6E6E6E6E6E6E7E7E7E9E9E9EAEAEA - EEEEEEEDEDEDEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE7E7E7E6E6E6CECECED7D7 - D7ECECECEEEEEEF1F1F1F1F1F1F6F6F6F6F6F6FFFFFFFFFFFFF7F7F7DCDCDCF0 - F0F0F9F9F9F4F4F4FFFFFFFFFFFFFCFCFCE4E4E4E5E5E5E6E6E6E4E4E4E6E6E6 - EAEAEAECECECEEEEEEEEEEEEF5F5F5F4F4F4F5F5F5F4F4F4F3F3F3F5F5F5F8F8 - F8F9F9F9E9E9E9E9E9E9ECECECEEEEEEEEEEEEEAEAEAE8E8E8E8E8E8E9E9E9FE - FEFEFFFFFFFFFFFFEEEEEEEDEDEDFEFEFEFDFDFDE7E7E7F1F1F1FBFBFBF9F9F9 - EDEDEDF3F3F3FAFAFAFBFBFBFBFBFBFBFBFBFAFAFAFBFBFBFBFBFBF8F8F8F9F9 - F9FFFFFFFFFFFFECECECE9E9E9E9E9E9E7E7E7D6D6D6E0E0E0F8F8F8FFFFFFFF - FFFFFFFFFFF0F0F0EBEBEBEBEBEBE8E8E8D4D4D4B1B1B1BDBDBDE2E2E2F4F4F4 - F7F7F7F7F7F7F7F7F7F8F8F8F8F8F8F8F8F8F7F7F7F7F7F7F9F9F9F2F2F2D5D5 - D5AFAFAFB9B9B9DEDEDEF5F5F5FFFFFFFFFFFFFCFCFCEEEEEEEAEAEAEAEAEAEA - EAEAEAEAEAEAEAEAEBEBEBEEEEEEF0F0F0F3F3F3F4F4F4F4F4F4FCFCFCF9F9F9 - F8F8F8F5F5F5F4F4F4F4F4F4F6F6F6F7F7F7FAFAFAFCFCFCF9F9F9F8F8F8F7F7 - F7F8F8F8E9E9E9F8F8F8FBFBFBEAEAEAEAEAEAEAEAEAE7E7E7E6E6E6C7C7C7D7 - D7D7F8F8F8F8F8F8FAFAFAFAFAFAE9E9E9E7E7E7E7E7E7E9E9E9EAEAEAE6E6E6 - E4E4E4D3D3D3AFAFAFD6D6D6F8F8F8F7F7F7FCFCFCFCFCFCF9F9F9FBFBFBFBFB - FBFAFAFAFFFFFFFFFFFFECECECE9E9E9E2E2E2CFCFCFA9A9A9B5B5B5C8C8C8FF - FFFFAFAFAFD0D0D0C3C3C3C0C0C0E4E4E4F5F5F5F3F3F3F1F1F1F3F3F3F7F7F7 - FAFAFAFEFEFEFCFCFCF8F8F8F5F5F5F5F5F5F5F5F5F4F4F4F7F7F7E1E1E1D3D3 - D3C8C8C8A9A9A9CFCFCFF8F8F8FBFBFBFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFEC - ECECE9E9E9E9E9E9E7E7E7E6E6E6BABABAC6C6C6F1F1F1F5F5F5F5F5F5F8F8F8 - FBFBFBFEFEFEFCFCFCF9F9F9F6F6F6F4F4F4F5F5F5F7F7F7FFFFFFFFFFFFFFFF - FFFFFFFFE4E4E4E1E1E1F8F8F8F8F8F8FFFFFFFAFAFAE4E4E4E4E4E4E4E4E4E5 - E5E5D6D6D6F1F1F1FFFFFFFFFFFFFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFFFFFFFEFEFEE9E9E9E7E7E7E7E7 - E7B5B5B5C5C5C5F0F0F0F7F7F7F9F9F9FFFFFFFBFBFBE6E6E6F4F4F4F6F6F6F6 - F6F6F4F4F4F1F1F1EEEEEEF0F0F0F2F2F2EDEDEDECECECFEFEFEFEFEFEF0F0F0 - F4F4F4F7F7F7F9F9F9FAFAFAF9F9F9FFFFFFFCFCFCE7E7E7E7E7E7D5D5D5AAAA - AAD0D0D0F6F6F6F7F7F7F8F8F8F6F6F6F8F8F8F7F7F7F6F6F6F7F7F7F9F9F9FC - FCFCFFFFFFFFFFFFFAFAFAE7E7E7E6E6E6E5E5E5E6E6E6E9E9E9EAEAEAECECEC - EEEEEEEDEDEDEAEAEAEAEAEAEAEAEAE9E9E9E8E8E8E9E9E9E7E7E7CACACAD5D5 - D5F0F0F0F3F3F3F7F7F7F7F7F7F7F7F7F4F4F4FFFFFFFFFFFFE6E6E6E6E6E6F2 - F2F2F4F4F4FBFBFBFFFFFFFFFFFFF3F3F3E4E4E4D5D5D5C1C1C1BCBCBCC4C4C4 - CACACADCDCDCEDEDEDEAEAEADADADAE6E6E6F5F5F5F4F4F4F4F4F4F8F8F8F9F9 - F9FAFAFAF9F9F9F9F9F9F8F8F8DCDCDCDADADAE9E9E9E8E8E8E8E8E8E8E8E8EA - EAEAEAEAEAEDEDEDEDEDEDEBEBEBEBEBEBE9E9E9DEDEDECACACAF4F4F4FDFDFD - ECECECF2F2F2FAFAFAFBFBFBFBFBFBFBFBFBFAFAFAFAFAFAFAFAFAFBFBFBF9F9 - F9FFFFFFEAEAEAD6D6D6E9E9E9E8E8E8E7E7E7D4D4D4C1C1C1E7E7E7FCFCFCFF - FFFFFFFFFFF0F0F0EBEBEBEBEBEBE6E6E6C5C5C5C1C1C1E2E2E2F6F6F6F9F9F9 - F9F9F9FBFBFBF9F9F9F8F8F8F9F9F9F9F9F9F8F8F8F7F7F7F8F8F8F6F6F6E7E7 - E7D3D3D3DEDEDEF1F1F1F7F7F7FFFFFFFFFFFFEAEAEAEAEAEAE9E9E9EAEAEAEA - EAEAEAEAEAEAEAEAECECECEEEEEEEFEFEFF1F1F1F1F1F1F0F0F0EEEEEEFDFDFD - FFFFFFF9F9F9F4F4F4F4F4F4F5F5F5F7F7F7FBFBFBFBFBFBF9F9F9F7F7F7F7F7 - F7F7F7F7F8F8F8FFFFFFFFFFFFE9E9E9E8E8E8E7E7E7E6E6E6E7E7E7C8C8C8D7 - D7D7F8F8F8F8F8F8FAFAFAFBFBFBF8F8F8E4E4E4E1E1E1E2E2E2E2E2E2CECECE - C5C5C5B4B4B4C0C0C0E7E7E7F9F9F9FBFBFBFEFEFEFCFCFCF9F9F9F9F9F9F9F9 - F9FFFFFFFFFFFFFFFFFFEBEBEBE8E8E8E6E6E6C3C3C3B7B7B7DEDEDEEEEEEEFF - FFFFC1C1C1E5E5E5E4E4E4E6E6E6F5F5F5F4F4F4F3F3F3F0F0F0F4F4F4F7F7F7 - FBFBFBFCFCFCF9F9F9F7F7F7F6F6F6F6F6F6F5F5F5F5F5F5F8F8F8E9E9E9D7D7 - D7C9C9C9C8C8C8E5E5E5F9F9F9FBFBFBFDFDFDFFFFFFFEFEFEFFFFFFFFFFFFEB - EBEBE9E9E9E8E8E8E7E7E7EAEAEAD1D1D1DEDEDEF7F7F7F9F9F9F8F8F8FCFCFC - FFFFFFFFFFFFFCFCFCF8F8F8F7F7F7F5F5F5F5F5F5FFFFFFFFFFFFFFFFFFF9F9 - F9E6E6E6B2B2B2C6C6C6F7F7F7F9F9F9FFFFFFFFFFFFE2E2E2E0E0E0E2E2E2E3 - E3E3E6E6E6F8F8F8FFFFFFFDFDFDFFFFFFFFFFFFFFFFFFEAEAEAEBEBEBECECEC - EBEBEBEDEDEDEDEDEDEBEBEBE9E9E9EAEAEAEEEEEEEDEDEDE9E9E9E7E7E7E7E7 - E7B4B4B4C9C9C9F8F8F8FCFCFCFBFBFBFFFFFFDADADAD5D5D5F5F5F5F7F7F7F5 - F5F5F4F4F4F1F1F1F0F0F0F3F3F3F0F0F0EAEAEAEEEEEEFFFFFFE7E7E7E5E5E5 - F7F7F7F8F8F8F9F9F9FBFBFBFBFBFBFAFAFAFBFBFBD6D6D6C4C4C4AEAEAEBDBD - BDE5E5E5F7F7F7F8F8F8F9F9F9F8F8F8FBFBFBFBFBFBFBFBFBFDFDFDFFFFFFFF - FFFFFFFFFFFFFFFFEAEAEAE7E7E7E4E4E4E5E5E5E9E9E9EAEAEAECECECEDEDED - F0F0F0EDEDEDEAEAEAEAEAEAE8E8E8E9E9E9E9E9E9EAEAEAD7D7D7B5B5B5D6D6 - D6F5F5F5F5F5F5F7F7F7F7F7F7F7F7F7F7F7F7FFFFFFFFFFFFE7E7E7E6E6E6E9 - E9E9EAEAEAF3F3F3FCFCFCF5F5F5EAEAEAE6E6E6C3C3C3B8B8B8CECECED8D8D8 - DADADAE8E8E8DDDDDDCACACABABABAD9D9D9F8F8F8F7F7F7F8F8F8F9F9F9F9F9 - F9F9F9F9F9F9F9FBFBFBFBFBFBE7E7E7F5F5F5F9F9F9EAEAEAE8E8E8E8E8E8E9 - E9E9E9E9E9E9E9E9E9E9E9E7E7E7E6E6E6E4E4E4C9C9C9BCBCBCFBFBFBFFFFFF - ECECECF6F6F6FAFAFAFBFBFBFBFBFBFBFBFBFBFBFBFAFAFAFAFAFAFCFCFCFAFA - FAF8F8F8E6E6E6E5E5E5E8E8E8E8E8E8D0D0D0A7A7A7BDBDBDF4F4F4FFFFFFFF - FFFFFFFFFFEFEFEFECECECE9E9E9E6E6E6C7C7C7D5D5D5F4F4F4F9F9F9FBFBFB - FBFBFBFBFBFBFCFCFCF9F9F9F9F9F9FAFAFAF8F8F8F7F7F7F7F7F7F7F7F7F5F5 - F5F3F3F3F2F2F2F3F3F3F6F6F6FFFFFFFFFFFFE9E9E9E9E9E9E9E9E9E9E9E9E7 - E7E7E8E8E8EBEBEBECECECECECECECECECEDEDEDECECECEAEAEAE9E9E9ECECEC - FFFFFFFFFFFFF4F4F4F5F5F5F9F9F9FBFBFBFDFDFDFEFEFEF9F9F9F7F7F7F7F7 - F7F7F7F7F7F7F7FFFFFFFFFFFFE9E9E9E7E7E7E7E7E7E9E9E9E9E9E9C8C8C8D7 - D7D7F8F8F8F9F9F9FCFCFCFBFBFBF8F8F8F4F4F4D7D7D7C6C6C6C6C6C6B4B4B4 - C8C8C8D6D6D6E7E7E7FBFBFBFCFCFCFCFCFCFBFBFBF9F9F9F8F8F8FAFAFAFFFF - FFFFFFFFFFFFFFFBFBFBEBEBEBE7E7E7E7E7E7C1C1C1CACACAF2F2F2F7F7F7FF - FFFFE6E6E6F6F6F6F5F5F5F6F6F6F5F5F5F4F4F4F1F1F1F0F0F0F4F4F4F7F7F7 - F9F9F9F9F9F9F7F7F7F4F4F4F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F1F1F1EAEA - EADFDFDFE8E8E8F8F8F8FCFCFCFDFDFDFFFFFFFDFDFDFBFBFBFFFFFFFCFCFCEB - EBEBEAEAEAEAEAEAECECECEEEEEEE9E9E9EAEAEAFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFF8F8F8F7F7F7F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFFAFAFAE6E6 - E6E4E4E4B0B0B0C6C6C6F7F7F7F8F8F8FFFFFFFBFBFBD1D1D1BDBDBDC4C4C4C6 - C6C6D7D7D7E9E9E9EBEBEBE9E9E9F4F4F4FFFFFFF3F3F3E7E7E7EAEAEAEAEAEA - EBEBEBEBEBEBEAEAEAE9E9E9E9E9E9EAEAEAEDEDEDECECECE8E8E8E7E7E7D1D1 - D19B9B9BCCCCCCFBFBFBFBFBFBF9F9F9F8F8F8E8E8E8E8E8E8F8F8F8F8F8F8F7 - F7F7F8F8F8F8F8F8F7F7F7F7F7F7F4F4F4EEEEEEF1F1F1F4F4F4E6E6E6E7E7E7 - F8F8F8F9F9F9FBFBFBFFFFFFFFFFFFFDFDFDFEFEFEE8E8E8D7D7D7D7D7D7E6E6 - E6F8F8F8F8F8F8FAFAFAFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFBFBFBEAEAEAE7E7E7E6E6E6E8E8E8EAEAEAECECECECECECEEEEEE - EEEEEEEBEBEBE9E9E9E8E8E8E9E9E9EAEAEAE9E9E9D8D8D8B2B2B2C2C2C2E7E7 - E7F7F7F7F8F8F8F7F7F7F5F5F5F6F6F6F7F7F7FFFFFFFCFCFCE8E8E8E7E7E7E9 - E9E9E9E9E9EAEAEAECECECECECECEAEAEAE7E7E7C3C3C3CFCFCFF4F4F4FCFCFC - FCFCFCF9F9F9E9E9E9D9D9D9D8D8D8E9E9E9F8F8F8F8F8F8F8F8F8F9F9F9F9F9 - F9F9F9F9F7F7F7F8F8F8FBFBFBF8F8F8FFFFFFFFFFFFEDEDEDE8E8E8E8E8E8E9 - E9E9E7E7E7E7E7E7E9E9E9E4E4E4D1D1D1C1C1C1A9A9A9DDDDDDFFFFFFF9F9F9 - F4F4F4F4F4F4FBFBFBFBFBFBFBFBFBFCFCFCFCFCFCFAFAFAFAFAFAFAFAFAFDFD - FDFCFCFCF8F8F8F8F8F8F8F8F8D3D3D3A0A0A0D0D0D0FFFFFFFFFFFFFFFFFFFF - FFFFFBFBFBECECECE5E5E5E6E6E6E7E7E7C9C9C9D5D5D5F4F4F4F9F9F9FBFBFB - FBFBFBFBFBFBFDFDFDFDFDFDFBFBFBFBFBFBF9F9F9F7F7F7F7F7F7F7F7F7F7F7 - F7F5F5F5F5F5F5F5F5F5F7F7F7FFFFFFFFFFFFECECECEBEBEBEBEBEBEAEAEAE6 - E6E6E9E9E9ECECECEBEBEBECECECEDEDEDEAEAEAE9E9E9E8E8E8E8E8E8E4E4E4 - F1F1F1E4E4E4E4E4E4F6F6F6FAFAFAFDFDFDFFFFFFFFFFFFFCFCFCF8F8F8F8F8 - F8F8F8F8F8F8F8FFFFFFFFFFFFEDEDEDEAEAEAEBEBEBECECECDCDCDCB7B7B7D7 - D7D7FAFAFAFCFCFCFCFCFCFAFAFAF8F8F8F7F7F7E9E9E9DADADAD9D9D9DADADA - EBEBEBF9F9F9FBFBFBFBFBFBF9F9F9F8F8F8F7F7F7F7F7F7F7F7F7FFFFFFFFFF - FFFFFFFFFBFBFBEAEAEAE9E9E9E7E7E7E9E9E9C0C0C0CFCFCFF7F7F7F8F8F8FF - FFFFF9F9F9F8F8F8F6F6F6F5F5F5F4F4F4F5F5F5F1F1F1F2F2F2F6F6F6F7F7F7 - F7F7F7F7F7F7F5F5F5F4F4F4F5F5F5F7F7F7F5F5F5F5F5F5F5F5F5EDEDEDE4E4 - E4E6E6E6F0F0F0F9F9F9FEFEFEFFFFFFFDFDFDFBFBFBFAFAFAF9F9F9F4F4F4E8 - E8E8EAEAEAEDEDEDEFEFEFEDEDEDE9E9E9E9E9E9FEFEFEFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9E9E9E9E5E5 - E5CECECE929292C2C2C2F5F5F5F8F8F8F9F9F9F8F8F8C7C7C7C1C1C1D8D8D8D7 - D7D7E6E6E6ECECECECECECEAEAEAE8E8E8E9E9E9E6E6E6DCDCDCDFDFDFEAEAEA - E9E9E9E7E7E7D6D6D6C1C1C1BFBFBFC3C3C3C8C8C8D8D8D8E7E7E7D4D4D4A0A0 - A0AEAEAEE0E0E0F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8 - F8F8FAFAFAF9F9F9F7F7F7F7F7F7F7F7F7F7F7F7F5F5F5F7F7F7F9F9F9F7F7F7 - FBFBFBFFFFFFFFFFFFFFFFFFFDFDFDFCFCFCFBFBFBF8F8F8F8F8F8F7F7F7F6F6 - F6F8F8F8FAFAFAFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4 - F4F4E4E4E4E9E9E9E8E8E8E7E7E7E7E7E7E9E9E9EBEBEBECECECECECECEDEDED - EDEDEDEAEAEAE9E9E9E9E9E9EAEAEAEBEBEBD8D8D8B7B7B7C3C3C3E5E5E5F8F8 - F8F8F8F8F8F8F8F7F7F7F7F7F7F8F8F8F7F7F7F8F8F8F6F6F6DBDBDBDCDCDCE9 - E9E9E9E9E9EAEAEAEAEAEAEAEAEAE9E9E9DADADAB2B2B2D4D4D4F8F8F8FCFCFC - FCFCFCF9F9F9F7F7F7F6F6F6F5F5F5F6F6F6F8F8F8F8F8F8F8F8F8F7F7F7F8F8 - F8F9F9F9F6F6F6F9F9F9FDFDFDF9F9F9FFFFFFFFFFFFF2F2F2EAEAEAE8E8E8E8 - E8E8E7E7E7E6E6E6E4E4E4DFDFDFBEBEBEBABABAC7C7C7EFEFEFFCFCFCEDEDED - F0F0F0EDEDEDDCDCDCEDEDEDFBFBFBFDFDFDFCFCFCFAFAFAFAFAFAFDFDFDFFFF - FFFEFEFEF8F8F8F8F8F8F8F8F8F8F8F8F6F6F6FFFFFFFFFFFFFFFFFFF9F9F9E8 - E8E8E8E8E8E8E8E8DFDFDFE0E0E0DBDBDBBFBFBFD7D7D7F4F4F4F9F9F9FBFBFB - FBFBFBFCFCFCFDFDFDFDFDFDFBFBFBFAFAFAF9F9F9F7F7F7F7F7F7F7F7F7F7F7 - F7F8F8F8F9F9F9F9F9F9FBFBFBFFFFFFFBFBFBDEDEDEECECECECECECEAEAEAE9 - E9E9EBEBEBEBEBEBEBEBEBECECECEAEAEAE9E9E9E8E8E8E8E8E8E8E8E8E4E4E4 - E7E7E7DADADAE2E2E2F5F5F5FBFBFBFDFDFDFEFEFEFFFFFFFDFDFDF9F9F9F8F8 - F8F8F8F8F8F8F8FFFFFFFFFFFFF0F0F0ECECECECECECECECECDCDCDCD5D5D5E9 - E9E9FDFDFDFCFCFCFAFAFAF8F8F8F7F7F7F7F7F7F7F7F7F6F6F6F6F6F6F8F8F8 - FBFBFBFBFBFBF9F9F9F8F8F8F7F7F7F7F7F7F7F7F7F7F7F7FFFFFFFFFFFFFFFF - FFFDFDFDEDEDEDE9E9E9E9E9E9E8E8E8D5D5D5A9A9A9D1D1D1F8F8F8F8F8F8FF - FFFFF7F7F7F7F7F7F5F5F5F3F3F3F4F4F4F4F4F4EEEEEEF2F2F2F7F7F7F7F7F7 - F7F7F7F8F8F8F7F7F7F5F5F5F6F6F6F6F6F6F5F5F5F4F4F4F1F1F1E4E4E4E9E9 - E9F4F4F4FBFBFBFFFFFFFFFFFFFFFFFFFCFCFCFBFBFBF9F9F9F8F8F8F5F5F5F6 - F6F6ECECECF1F1F1EEEEEEE9E9E9E7E7E7E7E7E7E7E7E7E6E6E6F7F7F7FFFFFF - FFFFFFF7F7F7FDFDFDFFFFFFFFFFFFFFFFFFF9F9F9EAEAEAE7E7E7E7E7E7D1D1 - D19A9A9AA7A7A7D9D9D9F8F8F8FBFBFBF9F9F9FBFBFBEAEAEAE7E7E7F8F8F8F7 - F7F7F6F6F6FFFFFFF9F9F9E9E9E9E8E8E8E8E8E8E4E4E4D1D1D1E7E7E7F6F6F6 - EBEBEBDADADAB5B5B5BCBCBCCECECED5D5D5D5D5D5E4E4E4D4D4D4A6A6A6AFAF - AFDCDCDCF7F7F7F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8 - F8F8F8F8F8F9F9F9F8F8F8F7F7F7F7F7F7F5F5F5F6F6F6F8F8F8F8F8F8F3F3F3 - FDFDFDFFFFFFFCFCFCFCFCFCFBFBFBF9F9F9F7F7F7F7F7F7F7F7F7F4F4F4F7F7 - F7FBFBFBFCFCFCFFFFFFFFFFFFFFFFFFFEFEFEEAEAEAE8E8E8E5E5E5E5E5E5E2 - E2E2E6E6E6EAEAEAE9E9E9E8E8E8E7E7E7E9E9E9EBEBEBEBEBEBECECECECECEC - ECECECEBEBEBEBEBEBEBEBEBEBEBEBE9E9E9C7C7C7C6C6C6E6E6E6F6F6F6F8F8 - F8F8F8F8F8F8F8F8F8F8F8F8F8F6F6F6F4F4F4F5F5F5F4F4F4E9E9E9E7E7E7EA - EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAC8C8C8C0C0C0E6E6E6F9F9F9FCFCFC - FBFBFBF9F9F9F8F8F8F6F6F6F6F6F6F7F7F7F8F8F8F8F8F8F8F8F8F7F7F7F9F9 - F9FCFCFCF9F9F9FAFAFAFEFEFEFAFAFAFFFFFFF1F1F1E0E0E0EAEAEAE8E8E8E8 - E8E8E8E8E8E6E6E6E2E2E2E2E2E2C1C1C1CCCCCCEDEDEDF6F6F6FEFEFEF0F0F0 - E9E9E9D7D7D7B9B9B9DEDEDEFCFCFCFCFCFCFCFCFCFFFFFFFFFFFFFFFFFFFFFF - FFFCFCFCF9F9F9F9F9F9F9F9F9FFFFFFFFFFFFFFFFFFFEFEFEE9E9E9E8E8E8E8 - E8E8E8E8E8E6E6E6DCDCDCD4D4D4C6C6C6CDCDCDE4E4E4F5F5F5FBFBFBFCFCFC - FCFCFCFDFDFDFDFDFDFBFBFBFCFCFCFCFCFCFAFAFAF8F8F8F7F7F7F7F7F7F7F7 - F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF5F5F5F9F9F9EBEBEBE9E9E9E9 - E9E9EAEAEAECECECECECECEAEAEAE9E9E9E7E7E7E6E6E6E7E7E7E8E8E8E4E4E4 - E6E6E6D6D6D6C2C2C2E5E5E5F9F9F9FBFBFBFCFCFCFDFDFDFBFBFBF8F8F8F9F9 - F9FAFAFAFAFAFAFFFFFFFFFFFFF0F0F0ECECECECECECECECECDCDCDCCCCCCCE9 - E9E9FAFAFAF9F9F9FFFFFFFFFFFFFFFFFFFFFFFFF7F7F7F6F6F6F6F6F6F8F8F8 - FBFBFBF9F9F9F7F7F7F7F7F7F7F7F7F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFFCFC - FCEFEFEFECECECEAEAEAEAEAEAD7D7D7ACACACBBBBBBE4E4E4F8F8F8F8F8F8FF - FFFFF5F5F5F4F4F4F3F3F3F1F1F1F4F4F4F1F1F1F0F0F0F4F4F4FFFFFFFFFFFF - F6F6F6F7F7F7F7F7F7F6F6F6F5F5F5F5F5F5F4F4F4F3F3F3EDEDEDEAEAEAF5F5 - F5FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBF8F8F8F8F8F8F8F8F8F8F8F8F9 - F9F9FFFFFFFFFFFFEDEDEDE7E7E7E7E7E7E7E7E7E6E6E6E6E6E6E7E7E7E8E8E8 - E8E8E8E8E8E8ECECECECECECE9E9E9EAEAEAEAEAEAE8E8E8E7E7E7E7E7E7D3D3 - D3C7C7C7D8D8D8F3F3F3FCFCFCF8F8F8F7F7F7F9F9F9F7F7F7F6F6F6F8F8F8F8 - F8F8F7F7F7FFFFFFE7E7E7D7D7D7E4E4E4D8D8D8CCCCCCC5C5C5E6E6E6F5F5F5 - DCDCDCB7B7B7BABABADDDDDDF5F5F5F9F9F9F7F7F7F5F5F5E2E2E2CACACADADA - DAF2F2F2F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8 - F8F8F8F8F8F9F9F9F8F8F8F7F7F7F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6F5F5F5 - FEFEFEFFFFFFFAFAFAFCFCFCFBFBFBF9F9F9F8F8F8F8F8F8F7F7F7F6F6F6F9F9 - F9FAFAFAF9F9F9FFFFFFFFFFFFFEFEFEE7E7E7E7E7E7E7E7E7E4E4E4E1E1E1E4 - E4E4E8E8E8EAEAEAEAEAEAEAEAEAEBEBEBEDEDEDEDEDEDECECECEBEBEBECECEC - ECECECEBEBEBEBEBEBEBEBEBEAEAEAD9D9D9B7B7B7D7D7D7F7F7F7FAFAFAFAFA - FAF8F8F8F8F8F8F8F8F8F8F8F8F7F7F7F7F7F7F8F8F8FAFAFAF9F9F9FCFCFCFF - FFFFF7F7F7ECECECECECECECECECDADADAB2B2B2D3D3D3F6F6F6F8F8F8FBFBFB - FAFAFAF9F9F9F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8FBFB - FBFDFDFDF9F9F9FAFAFAFDFDFDFDFDFDFDFDFDECECECFAFAFAFBFBFBE6E6E6E4 - E4E4E4E4E4E3E3E3E2E2E2E4E4E4C7C7C7D3D3D3F4F4F4F8F8F8FFFFFFE5E5E5 - E0E0E0CDCDCDC7C7C7ECECECFDFDFDFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBEBEBEAEAEAE8E8E8E8E8E8E8 - E8E8E8E8E8E1E1E1DADADACACACACFCFCFE4E4E4EFEFEFF2F2F2F9F9F9FDFDFD - FCFCFCFDFDFDFDFDFDFCFCFCFFFFFFFEFEFEFAFAFAF7F7F7F6F6F6F6F6F6F6F6 - F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBF8F8F8FAFAFADFDFDFD0D0D0CE - CECEDDDDDDECECECECECECEAEAEAE9E9E9E7E7E7E6E6E6E9E9E9E9E9E9E4E4E4 - E6E6E6C3C3C3BEBEBEE4E4E4F5F5F5F8F8F8FBFBFBFAFAFAF8F8F8F8F8F8F8F8 - F8F9F9F9FFFFFFFFFFFFFFFFFFF2F2F2ECECECECECECECECECCDCDCDC8C8C8E8 - E8E8F8F8F8FFFFFFFFFFFFFFFFFFFFFFFFE9E9E9E4E4E4F6F6F6F6F6F6F8F8F8 - F9F9F9F7F7F7F5F5F5F7F7F7F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFFCFCFCEEEE - EEEDEDEDECECECE9E9E9E8E8E8C3C3C3BDBDBDE4E4E4F8F8F8FBFBFBFBFBFBFF - FFFFF1F1F1ECECECEDEDEDEFEFEFF0F0F0F1F1F1F3F3F3F5F5F5FFFFFFFAFAFA - E0E0E0F5F5F5F5F5F5F4F4F4F3F3F3F3F3F3F2F2F2EEEEEEEAEAEAF0F0F0F9F9 - F9FCFCFCFCFCFCFBFBFBFFFFFFFFFFFFDADADAE5E5E5F7F7F7F7F7F7F9F9F9FA - FAFAFFFFFFFFFFFFE9E9E9E7E7E7E7E7E7E7E7E7E6E6E6E4E4E4E3E3E3D5D5D5 - D8D8D8E8E8E8E8E8E8E8E8E8E9E9E9EAEAEAE9E9E9E7E7E7E7E7E7E7E7E7E7E7 - E7CCCCCCD8D8D8F4F4F4FAFAFAF8F8F8FAFAFAFBFBFBF7F7F7F7F7F7F8F8F8F8 - F8F8F8F8F8F5F5F5E3E3E3E2E2E2D8D8D8C1C1C1CDCDCDD9D9D9E6E6E6F2F2F2 - CACACABCBCBCDADADAEFEFEFF6F6F6F8F8F8F9F9F9F8F8F8F5F5F5F1F1F1EEEE - EEF4F4F4F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8 - F8F8F8F8F8F8F8F8F8F8F8F7F7F7F5F5F5F7F7F7F7F7F7F8F8F8FBFBFBF9F9F9 - FFFFFFFFFFFFFCFCFCFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBF9F9F9F8F8F8F7F7 - F7F7F7F7F7F7F7FFFFFFFFFFFFEDEDEDE7E7E7E7E7E7E4E4E4DEDEDEE0E0E0E4 - E4E4E9E9E9EAEAEAEAEAEAEAEAEAEDEDEDECECECEBEBEBECECECEBEBEBE9E9E9 - EAEAEAECECECEAEAEAE9E9E9E9E9E9CBCBCBC9C9C9E9E9E9F8F8F8FAFAFAF9F9 - F9FAFAFAFCFCFCFCFCFCFAFAFAF8F8F8F9F9F9FBFBFBFCFCFCFBFBFBFCFCFCFF - FFFFF6F6F6ECECECECECECDADADAB2B2B2C0C0C0E5E5E5F5F5F5F7F7F7F9F9F9 - F9F9F9F7F7F7F7F7F7F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8FAFA - FAF8F8F8F7F7F7F9F9F9FDFDFDFDFDFDFDFDFDFAFAFAFFFFFFFBFBFBE6E6E6E3 - E3E3E3E3E3E2E2E2E2E2E2E7E7E7DADADAE1E1E1F8F8F8FDFDFDFCFCFCEAEAEA - F2F2F2D3D3D3D8D8D8FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECECECECEC - ECFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEEAEAEAE9E9E9E8E8E8E8E8E8E8 - E8E8E7E7E7E1E1E1DFDFDFD0D0D0DCDCDCEFEFEFF0F0F0F4F4F4FBFBFBFAFAFA - FAFAFAFCFCFCFCFCFCFEFEFEFEFEFEFCFCFCF7F7F7F5F5F5F5F5F5F6F6F6F6F6 - F6FFFFFFFFFFFFE9E9E9ECECECEDEDEDEAEAEAE9E9E9F0F0F0D5D5D5CBCBCBDA - DADAF5F5F5F7F7F7EAEAEAEAEAEAEAEAEAE7E7E7E7E7E7E9E9E9E7E7E7E4E4E4 - E7E7E7C5C5C5D1D1D1F5F5F5F8F8F8FBFBFBFBFBFBFBFBFBFBFBFBF9F9F9F9F9 - F9FBFBFBFFFFFFFFFFFFFFFFFFF0F0F0EDEDEDEDEDEDECECECCCCCCCD7D7D7F5 - F5F5F8F8F8FFFFFFFFFFFFFCFCFCE5E5E5CECECEE1E1E1F6F6F6F6F6F6F8F8F8 - F8F8F8F6F6F6F7F7F7F8F8F8FFFFFFFFFFFFFFFFFFFBFBFBEEEEEEF1F1F1EEEE - EEEDEDEDECECECEAEAEAE8E8E8C7C7C7D6D6D6F8F8F8FAFAFAFBFBFBFAFAFAFF - FFFFE6E6E6E9E9E9EEEEEEF1F1F1F4F4F4F5F5F5FFFFFFFFFFFFFFFFFFFBFBFB - F6F6F6FFFFFFF6F6F6F5F5F5F4F4F4F5F5F5F0F0F0ECECECEEEEEEF2F2F2F7F7 - F7F9F9F9F9F9F9FFFFFFFFFFFFFFFFFFDBDBDBE7E7E7F7F7F7F8F8F8FAFAFAFF - FFFFFFFFFFFFFFFFE7E7E7E7E7E7E7E7E7E7E7E7D4D4D4C1C1C1C3C3C3B2B2B2 - DFDFDFF4F4F4E8E8E8E8E8E8E9E9E9E9E9E9E8E8E8E7E7E7E7E7E7E7E7E7E7E7 - E7B9B9B9C9C9C9F8F8F8FBFBFBFBFBFBFCFCFCFBFBFBF8F8F8F8F8F8F8F8F8F8 - F8F8F7F7F7F4F4F4F2F2F2F1F1F1E6E6E6D6D6D6DFDFDFEBEBEBECECECECECEC - D9D9D9D9D9D9EEEEEEF5F5F5F8F8F8F8F8F8FBFBFBF9F9F9F7F7F7F4F4F4F4F4 - F4F6F6F6F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8 - F8F8F8F8F8F8F8F8F8F8F8F4F4F4F4F4F4F8F8F8F8F8F8F8F8F8FAFAFAFAFAFA - FDFDFDFEFEFEFAFAFAFAFAFAFBFBFBFBFBFBF9F9F9F8F8F8F7F7F7F5F5F5F5F5 - F5F7F7F7F7F7F7FFFFFFFFFFFFECECECE7E7E7E6E6E6DFDFDFE1E1E1E5E5E5E8 - E8E8EAEAEAEAEAEAE9E9E9E9E9E9EBEBEBDCDCDCCBCBCBCDCDCDD9D9D9E5E5E5 - EAEAEAEDEDEDECECECEAEAEAEAEAEADDDDDDE7E7E7F6F6F6F8F8F8F9F9F9F8F8 - F8F9F9F9FBFBFBFAFAFAF9F9F9F9F9F9F8F8F8F9F9F9FBFBFBF9F9F9F9F9F9FB - FBFBFFFFFFF6F6F6DCDCDCB3B3B3C2C2C2E5E5E5F6F6F6F8F8F8F9F9F9FBFBFB - F8F8F8F5F5F5F7F7F7F7F7F7F5F5F5F7F7F7F8F8F8F8F8F8F8F8F8F9F9F9FAFA - FAF7F7F7F7F7F7F8F8F8F9F9F9F9F9F9FAFAFAF7F7F7F6F6F6FFFFFFE9E9E9C3 - C3C3D5D5D5E7E7E7E8E8E8D8D8D8C5C5C5C3C3C3E7E7E7FCFCFCFAFAFAF7F7F7 - FFFFFFEEEEEEE9E9E9FEFEFEFFFFFFFFFFFFFFFFFFFEFEFEECECECEAEAEAEAEA - EAEAEAEAEAEAEAECECECEFEFEFEEEEEEECECECEAEAEAE9E9E9E8E8E8E8E8E8E7 - E7E7E6E6E6E2E2E2E3E3E3D1D1D1DEDEDEF0F0F0F2F2F2F7F7F7FAFAFAF9F9F9 - FBFBFBFDFDFDFDFDFDFCFCFCFBFBFBF9F9F9F7F7F7F6F6F6F7F7F7F8F8F8F9F9 - F9FFFFFFFEFEFEEAEAEAEEEEEEECECECE8E8E8E8E8E8EEEEEED2D2D2D7D7D7FE - FEFEFFFFFFFFFFFFECECECEBEBEBE8E8E8E4E4E4E7E7E7E7E7E7E5E5E5E4E4E4 - EAEAEADADADAFBFBFBFFFFFFFFFFFFFFFFFFFDFDFDFCFCFCF9F9F9F8F8F8FBFB - FBFFFFFFFFFFFFFFFFFFEFEFEFECECECECECECECECECEBEBEBC8C8C8D2D2D2F2 - F2F2F5F5F5FFFFFFFFFFFFE7E7E7E2E2E2E1E1E1D4D4D4E5E5E5F6F6F6F8F8F8 - F8F8F8F8F8F8F9F9F9F8F8F8FFFFFFFFFFFFFCFCFCEFEFEFF1F1F1F0F0F0EEEE - EEEDEDEDECECECEAEAEAE9E9E9CDCDCDD6D6D6F5F5F5FAFAFAFAFAFAF9F9F9FF - FFFFEEEEEEF2F2F2F6F6F6F8F8F8F8F8F8F8F8F8FFFFFFFFFFFFFFFFFFFDFDFD - FDFDFDFBFBFBF5F5F5F7F7F7F6F6F6F4F4F4F1F1F1F2F2F2F4F4F4F6F6F6F8F8 - F8F9F9F9F9F9F9FFFFFFFFFFFFD9D9D9C1C1C1BDBDBDE4E4E4F8F8F8FFFFFFFF - FFFFFFFFFFFFFFFFE7E7E7E7E7E7E7E7E7D6D6D6B0B0B0BCBCBCCECECECFCFCF - F2F2F2F7F7F7E4E4E4E1E1E1E6E6E6E7E7E7E7E7E7E6E6E6E6E6E6E7E7E7E7E7 - E7D2D2D2DEDEDEF5F5F5F9F9F9FBFBFBFCFCFCFCFCFCF9F9F9F7F7F7F7F7F7F7 - F7F7F4F4F4F1F1F1EFEFEFF0F0F0F2F2F2F0F0F0ECECECEBEBEBE9E9E9EAEAEA - E7E7E7EBEBEBF1F1F1F5F5F5F8F8F8F9F9F9FCFCFCF9F9F9F7F7F7F7F7F7F4F4 - F4F6F6F6F8F8F8F8F8F8F7F7F7F6F6F6F6F6F6F8F8F8F8F8F8F8F8F8F8F8F8F8 - F8F8F8F8F8F7F7F7F3F3F3F0F0F0F8F8F8FCFCFCF8F8F8F9F9F9FCFCFCFBFBFB - FBFBFBFAFAFAF9F9F9FAFAFAF9F9F9F8F8F8F6F6F6FFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFBFBFBE9E9E9E4E4E4DFDFDFE0E0E0E6E6E6E8E8E8E9 - E9E9EAEAEAE9E9E9E9E9E9D6D6D6D9D9D9CCCCCCC6C6C6D9D9D9E4E4E4DDDDDD - E2E2E2EFEFEFEDEDEDEDEDEDEEEEEEEBEBEBDDDDDDEAEAEAF7F7F7FAFAFAFAFA - FAFAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFE4E4E4B9B9B9C3C3C3E7E7E7F6F6F6F8F8F8FBFBFBFBFBFBFBFBFB - F9F9F9F8F8F8FBFBFBF9F9F9F7F7F7F8F8F8F8F8F8F8F8F8F9F9F9FAFAFAFAFA - FAF9F9F9F8F8F8FBFBFBFBFBFBF8F8F8FAFAFAFAFAFAF9F9F9FFFFFFD9D9D9C4 - C4C4F9F9F9FBFBFBEAEAEAD9D9D9E6E6E6F8F8F8FBFBFBFBFBFBF8F8F8F7F7F7 - FBFBFBF7F7F7F7F7F7FFFFFFFFFFFFFFFFFFEBEBEBECECECECECECEAEAEAEAEA - EAEAEAEAEAEAEAEFEFEFF1F1F1EEEEEEEBEBEBEAEAEAEAEAEAE9E9E9E9E9E9E6 - E6E6E6E6E6E6E6E6E7E7E7DDDDDDF5F5F5FFFFFFFFFFFFFFFFFFFCFCFCFAFAFA - FAFAFAFBFBFBFBFBFBF9F9F9FBFBFBFBFBFBF9F9F9F9F9F9F9F9F9F8F8F8F9F9 - F9FCFCFCFFFFFFFCFCFCEDEDEDEAEAEAE8E8E8E8E8E8EAEAEACDCDCDD5D5D5FC - FCFCFBFBFBEDEDEDE9E9E9EAEAEAE6E6E6E5E5E5E9E9E9E7E7E7E8E8E8ECECEC - F1F1F1EEEEEEFFFFFFE7E7E7FFFFFFFDFDFDE4E4E4F5F5F5F5F5F5F7F7F7FAFA - FAFFFFFFFFFFFFFCFCFCEBEBEBEAEAEAEAEAEAEAEAEAE7E7E7C3C3C3D2D2D2F4 - F4F4F8F8F8FFFFFFFDFDFDE6E6E6E2E2E2E5E5E5D7D7D7E7E7E7F8F8F8F9F9F9 - F8F8F8F8F8F8F8F8F8FFFFFFFFFFFFFFFFFFF0F0F0F2F2F2F1F1F1EFEFEFEDED - EDECECECEBEBEBEAEAEADCDCDCBFBFBFD7D7D7F8F8F8FEFEFEFEFEFEFEFEFEFF - FFFFFAFAFAFAFAFAFAFAFAFAFAFAFBFBFBFFFFFFFFFFFFFFFFFFE9E9E9E9E9E9 - E7E7E7E6E6E6E5E5E5F5F5F5F4F4F4F4F4F4F4F4F4F4F4F4F3F3F3F6F6F6F8F8 - F8F8F8F8F9F9F9F9F9F9E9E9E9D3D3D3CFCFCFCECECEE4E4E4F9F9F9FFFFFFFF - FFFFFFFFFFE9E9E9E7E7E7E7E7E7E7E7E7D3D3D3CECECEDEDEDEEEEEEEF1F1F1 - F9F9F9FFFFFFF4F4F4E6E6E6EAEAEAE9E9E9E5E5E5E7E7E7E8E8E8E7E7E7E7E7 - E7E4E4E4CCCCCCE1E1E1F8F8F8FAFAFAFBFBFBFDFDFDFCFCFCF8F8F8F7F7F7F5 - F5F5F4F4F4F2F2F2F1F1F1F3F3F3F6F6F6F5F5F5F4F4F4F1F1F1EFEFEFF1F1F1 - EEEEEEF0F0F0F2F2F2F4F4F4F7F7F7F9F9F9F9F9F9F8F8F8F7F7F7F7F7F7F4F4 - F4F6F6F6F8F8F8F7F7F7F7F7F7F6F6F6F7F7F7F9F9F9F8F8F8F8F8F8F8F8F8F8 - F8F8F8F8F8F4F4F4F1F1F1F4F4F4FBFBFBFDFDFDFAFAFAFFFFFFFFFFFFF9F9F9 - F8F8F8F9F9F9F8F8F8F7F7F7F7F7F7F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFECECECEAEAEAF7F7F7D9D9D9D6D6D6E3E3E3E5E5E5E9E9E9E8E8E8E8 - E8E8E9E9E9E8E8E8D5D5D5ABABABD6D6D6C9C9C9D3D3D3F6F6F6F5F5F5EAEAEA - F8F8F8F9F9F9ECECECECECECEDEDEDEBEBEBDFDFDFF8F8F8FFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFE8E8E8D1D1D1D7D7D7E8E8E8F8F8F8F6F6F6F8F8F8FBFBFBFBFBFBFBFBFB - FBFBFBFBFBFBFCFCFCFBFBFBF9F9F9FBFBFBFBFBFBF8F8F8F9F9F9F9F9F9F9F9 - F9F9F9F9F8F8F8F9F9F9F9F9F9FCFCFCFFFFFFFCFCFCFCFCFCFDFDFDEBEBEBED - EDEDFFFFFFFFFFFFEAEAEAEAEAEAFBFBFBFCFCFCDEDEDEE6E6E6F4F4F4F7F7F7 - F7F7F7F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFEEEEEEEDEDEDECECECEAEAEAEAEA - EAEAEAEAEBEBEBF0F0F0EFEFEFEBEBEBE9E9E9E8E8E8E8E8E8E9E9E9E8E8E8E6 - E6E6E7E7E7E9E9E9E9E9E9EAEAEAF9F9F9FFFFFFFFFFFFFFFFFFFBFBFBF5F5F5 - F5F5F5F9F9F9FAFAFAFBFBFBFDFDFDFCFCFCFAFAFAF9F9F9F7F7F7F7F7F7F9F9 - F9FAFAFAFFFFFFFFFFFFEAEAEAE8E8E8E8E8E8E8E8E8E8E8E8CCCCCCD0D0D0F0 - F0F0EDEDEDEAEAEAEAEAEAECECECE9E9E9E6E6E6E9E9E9E9E9E9E9E9E9EDEDED - EFEFEFECECECEBEBEBD3D3D3FFFFFFEAEAEACFCFCFF5F5F5F5F5F5F7F7F7FFFF - FFFFFFFFFFFFFFECECECEAEAEAEAEAEAE9E9E9E6E6E6D3D3D3ACACACD3D3D3F8 - F8F8FCFCFCFCFCFCFDFDFDEAEAEAE4E4E4E9E9E9E9E9E9EBEBEBF8F8F8F7F7F7 - F8F8F8F9F9F9F9F9F9FFFFFFFFFFFFFEFEFEF2F2F2F1F1F1EEEEEEECECECEBEB - EBEAEAEAEAEAEAEAEAEADCDCDCD8D8D8E7E7E7F8F8F8FBFBFBFBFBFBFBFBFBFF - FFFFFAFAFAFAFAFAFAFAFAFBFBFBFFFFFFFFFFFFFFFFFFFDFDFDE9E9E9E8E8E8 - E6E6E6E5E5E5E4E4E4E7E7E7F4F4F4F5F5F5F5F5F5F4F4F4F1F1F1F4F4F4F7F7 - F7F8F8F8F9F9F9FAFAFAFDFDFDFBFBFBF8F8F8F9F9F9FAFAFAFFFFFFFFFFFFFF - FFFFFAFAFAE7E7E7E6E6E6E6E6E6E4E4E4D2D2D2C8C8C8E4E4E4F3F3F3F6F6F6 - F9F9F9FFFFFFFFFFFFEFEFEFEFEFEFECECECE7E7E7E9E9E9E9E9E9E7E7E7E6E6 - E6D0D0D0A8A8A8D0D0D0F5F5F5F8F8F8FBFBFBFDFDFDFBFBFBF9F9F9F8F8F8F6 - F6F6F6F6F6F6F6F6F6F6F6F7F7F7F8F8F8F8F8F8F7F7F7F5F5F5F5F5F5F8F8F8 - F5F5F5F2F2F2F5F5F5F5F5F5F6F6F6F8F8F8F9F9F9F8F8F8F8F8F8F9F9F9FBFB - FBFFFFFFFFFFFFF9F9F9F7F7F7F6F6F6F8F8F8F9F9F9F8F8F8F8F8F8F8F8F8F8 - F8F8F8F8F8F3F3F3F2F2F2F8F8F8F9F9F9FEFEFEFCFCFCFFFFFFEAEAEAE2E2E2 - F7F7F7F7F7F7F5F5F5F5F5F5F4F4F4F2F2F2F5F5F5FFFFFFFFFFFFF6F6F6ECEC - ECE7E7E7D2D2D2DDDDDDF7F7F7E7E7E7E8E8E8EAEAEAE9E9E9EAEAEAE8E8E8E8 - E8E8E9E9E9D5D5D5A9A9A9BCBCBCE9E9E9E8E8E8E6E6E6F5F5F5F5F5F5F5F5F5 - FFFFFFF8F8F8ECECECEBEBEBEBEBEBEBEBEBECECECF9F9F9FBFBFBFFFFFFFFFF - FFFFFFFFFFFFFFFCFCFCFDFDFDFEFEFEF0F0F0EFEFEFFEFEFEFFFFFFF0F0F0D8 - D8D8B0B0B0D3D3D3F5F5F5F8F8F8F7F7F7F6F6F6F8F8F8FBFBFBFBFBFBFBFBFB - FBFBFBFBFBFBFBFBFBFBFBFBF9F9F9FBFBFBFBFBFBF9F9F9F9F9F9F9F9F9F9F9 - F9F8F8F8F7F7F7F8F8F8FBFBFBFDFDFDFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFEAEAEAEAEAEAD9D9D9B2B2B2C1C1C1E2E2E2F2F2F2F5F5F5 - F8F8F8FFFFFFFFFFFFFFFFFFFFFFFFF0F0F0EAEAEAEAEAEAEAEAEAEAEAEAEBEB - EBEBEBEBECECECF0F0F0EDEDEDE9E9E9E7E7E7E7E7E7E8E8E8E9E9E9E7E7E7E7 - E7E7E9E9E9EAEAEAE9E9E9E9E9E9EDEDEDF1F1F1F4F4F4F1F1F1F0F0F0FFFFFF - FFFFFFF8F8F8FBFBFBFDFDFDFDFDFDFAFAFAF8F8F8F7F7F7F5F5F5F6F6F6FAFA - FAFCFCFCFFFFFFFFFFFFEEEEEEEBEBEBE9E9E9E9E9E9E8E8E8DADADAEDEDEDFF - FFFFFFFFFFF5F5F5FDFDFDF5F5F5DADADAC6C6C6C7C7C7C6C6C6CACACADCDCDC - EDEDEDEAEAEAE8E8E8E7E7E7E6E6E6BCBCBCCDCDCDF4F4F4F5F5F5FFFFFFFFFF - FFFFFFFFFAFAFAEAEAEAE9E9E9E9E9E9DADADAC9C9C9ADADADBFBFBFE7E7E7F9 - F9F9FBFBFBFCFCFCFBFBFBFFFFFFF7F7F7E9E9E9E9E9E9EBEBEBECECECF7F7F7 - F8F8F8F9F9F9F9F9F9FFFFFFFFFFFFF1F1F1F1F1F1EFEFEFECECECEAEAEAEBEB - EBECECECECECECEAEAEADADADACDCDCDE7E7E7F5F5F5F6F6F6F6F6F6F4F4F4FF - FFFFFFFFFFFDFDFDFEFEFEFFFFFFFFFFFFFFFFFFFEFEFEE7E7E7E9E9E9E7E7E7 - E4E4E4E4E4E4E2E2E2E5E5E5E7E7E7FFFFFFFFFFFFF2F2F2F1F1F1F5F5F5F9F9 - F9FAFAFAFBFBFBFBFBFBFCFCFCFAFAFAF9F9F9FBFBFBFEFEFEFFFFFFFFFFFFFE - FEFEE8E8E8E7E7E7E7E7E7E7E7E7E3E3E3C8C8C8C8C8C8E7E7E7F4F4F4F5F5F5 - FFFFFFFFFFFFFFFFFFF0F0F0EEEEEEECECECE9E9E9E9E9E9E9E9E9E4E4E4DFDF - DFBBBBBBBCBCBCE2E2E2F3F3F3F7F7F7F9F9F9FBFBFBF9F9F9F9F9F9F8F8F8F8 - F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F7F7F7F8F8F8F8F8F8FFFFFF - FFFFFFF2F2F2F3F3F3F4F4F4F7F7F7F8F8F8FCFCFCFAFAFAF9F9F9FFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFF8F8F8F9F9F9F9F9F9FAFAFAFBFBFBFAFAFAFA - FAFAFAFAFAF3F3F3F4F4F4F9F9F9FAFAFAFEFEFEFCFCFCF8F8F8E1E1E1E1E1E1 - F5F5F5F5F5F5F4F4F4F3F3F3F3F3F3F3F3F3F5F5F5FEFEFEFAFAFAF2F2F2E9E9 - E9E5E5E5D0D0D0DDDDDDF7F7F7F7F7F7F8F8F8FFFFFFF8F8F8E9E9E9E7E7E7D5 - D5D5C4C4C4ACACACBCBCBCE7E7E7FBFBFBFCFCFCF9F9F9F8F8F8F5F5F5F5F5F5 - F5F5F5FFFFFFF8F8F8EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBF0F0F0FFFFFFFFFF - FFECECECE9E9E9E8E8E8E7E7E7E7E7E7E7E7E7E7E7E7E6E6E6E4E4E4E6E6E6CE - CECECECECEE6E6E6F7F7F7F8F8F8F6F6F6F5F5F5F8F8F8FBFBFBFBFBFBFBFBFB - FBFBFBFBFBFBFBFBFBFBFBFBFDFDFDFBFBFBFCFCFCF9F9F9F9F9F9FAFAFAF9F9 - F9F8F8F8F9F9F9FAFAFAFCFCFCFAFAFAFFFFFFFFFFFFFFFFFFFFFFFFF5F5F5F8 - F8F8FFFFFFF9F9F9EAEAEAEAEAEAD9D9D9E6E6E6F9F9F9FCFCFCF9F9F9F8F8F8 - FCFCFCFFFFFFFFFFFFFFFFFFEEEEEEE7E7E7E3E3E3E6E6E6E9E9E9EAEAEAEBEB - EBEBEBEBEBEBEBEFEFEFEDEDEDE8E8E8E7E7E7E7E7E7E9E9E9E9E9E9E6E6E6E6 - E6E6E7E7E7E8E8E8E7E7E7E8E8E8ECECECEEEEEEEEEEEEEDEDEDECECECF8F8F8 - E8E8E8E7E7E7F9F9F9F9F9F9F9F9F9F7F7F7F7F7F7F6F6F6F6F6F6F9F9F9FEFE - FEFEFEFEFFFFFFFFFFFFEFEFEFECECECE9E9E9E8E8E8E8E8E8E8E8E8F3F3F3FC - FCFCECECECECECECFCFCFCE6E6E6B7B7B7C3C3C3D7D7D7D8D8D8DADADAE9E9E9 - DEDEDEC2C2C2B9B9B9B7B7B79D9D9DAEAEAEDDDDDDF3F3F3F4F4F4FFFFFFFFFF - FFF9F9F9EAEAEAEAEAEAECECECDDDDDDBDBDBDC3C3C3CECECEE6E6E6F9F9F9FA - FAFAFDFDFDFDFDFDFFFFFFFFFFFFFFFFFFECECECECECECEEEEEEEBEBEBEEEEEE - FAFAFAF9F9F9F8F8F8FFFFFFFCFCFCF0F0F0F0F0F0EDEDEDEBEBEBEBEBEBEDED - EDECECECECECECE9E9E9CCCCCCCACACAE6E6E6F4F4F4F5F5F5F4F4F4F3F3F3FF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEE7E7E7E7E7E7E7E7E7E6E6E6 - E4E4E4E2E2E2E4E4E4E7E7E7E9E9E9FDFDFDFCFCFCF2F2F2F3F3F3F9F9F9FDFD - FDFDFDFDFCFCFCFCFCFCFCFCFCF9F9F9F9F9F9F9F9F9FBFBFBFFFFFFF1F1F1DF - DFDFE9E9E9E6E6E6E4E4E4E4E4E4E2E2E2D7D7D7F1F1F1FFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFEFEFEFEEEEEEECECECE9E9E9E7E7E7E5E5E5D5D5D5C6C6 - C6B6B6B6D5D5D5F4F4F4F4F4F4F6F6F6F7F7F7F8F8F8F8F8F8F8F8F8F9F9F9F8 - F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFF8F8F8F7F7F7FBFBFBFFFFFFFDFDFDFFFFFFFFFFFFFFFF - FFFFFFFFFDFDFDFDFDFDFBFBFBFFFFFFFFFFFFFCFCFCFDFDFDFDFDFDFDFDFDFE - FEFEFDFDFDF8F8F8F9F9F9FAFAFAFBFBFBFCFCFCFBFBFBF5F5F5F1F1F1F3F3F3 - F3F3F3F3F3F3F3F3F3F4F4F4F5F5F5F5F5F5F7F7F7F5F5F5F6F6F6EDEDEDE4E4 - E4E5E5E5DDDDDDE9E9E9F7F7F7F7F7F7F7F7F7FFFFFFFBFBFBEAEAEAE7E7E7C3 - C3C3C0C0C0CFCFCFE4E4E4FAFAFAFCFCFCFEFEFEFBFBFBF8F8F8F8F8F8F1F1F1 - EDEDEDFDFDFDEBEBEBD0D0D0D0D0D0D0D0D0D0D0D0DEDEDEF3F3F3F3F3F3ECEC - ECE9E9E9E9E9E9E9E9E9E8E8E8E7E7E7EAEAEAE9E9E9E4E4E4E4E4E4E5E5E5CA - CACAB5B5B5E4E4E4F8F8F8F8F8F8F6F6F6F5F5F5F8F8F8FAFAFAFBFBFBFCFCFC - FCFCFCFCFCFCFCFCFCFDFDFDFEFEFEFCFCFCFBFBFBF9F9F9FAFAFAFBFBFBF8F8 - F8F8F8F8FAFAFAFBFBFBF9F9F9FFFFFFFFFFFFFFFFFFFCFCFCE5E5E5D5D5D5F5 - F5F5F9F9F9EBEBEBEAEAEAEAEAEAEAEAEAFCFCFCFEFEFEFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFEDEDEDE7E7E7E4E4E4E1E1E1E5E5E5E9E9E9E9E9E9E9E9 - E9E9E9E9E9E9E9EDEDEDEDEDEDE8E8E8E7E7E7E7E7E7E9E9E9E7E7E7E5E5E5E2 - E2E2E2E2E2E5E5E5E6E6E6E9E9E9EBEBEBEAEAEAE9E9E9E9E9E9E7E7E7E7E7E7 - C0C0C0D1D1D1F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F9F9F9FFFF - FFFFFFFFFFFFFFFFFFFFEEEEEEE9E9E9E8E8E8E9E9E9E7E7E7E7E7E7E6E6E6E6 - E6E6DCDCDCE9E9E9F3F3F3DEDEDED0D0D0E7E7E7FAFAFAFBFBFBFBFBFBFCFCFC - E7E7E7CCCCCCC6C6C6C1C1C1BFBFBFD8D8D8F4F4F4F8F8F8F9F9F9FFFFFFFFFF - FFEBEBEBEEEEEEEDEDEDF0F0F0DEDEDED9D9D9E2E2E2F1F1F1F8F8F8F9F9F9FB - FBFBFEFEFEFEFEFEFFFFFFFFFFFFFDFDFDF0F0F0F1F1F1EDEDEDEBEBEBECECEC - EBEBEBF8F8F8F8F8F8F8F8F8FFFFFFFDFDFDF0F0F0ECECECEAEAEAEBEBEBEAEA - EAE9E9E9E7E7E7D4D4D4B5B5B5D3D3D3F0F0F0F3F3F3F4F4F4F3F3F3F2F2F2FF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDE5E5E5E2E2E2E3E3E3E3E3E3E4E4E4 - E2E2E2E3E3E3E7E7E7E9E9E9E9E9E9EAEAEAE9E9E9E5E5E5F7F7F7FBFBFBFEFE - FEFFFFFFFCFCFCFCFCFCFBFBFBF9F9F9FCFCFCFCFCFCFCFCFCFCFCFCEAEAEAE7 - E7E7E7E7E7D5D5D5C8C8C8D9D9D9E4E4E4E6E6E6F5F5F5FFFFFFFFFFFFFFFFFF - FFFFFFFDFDFDEFEFEFEDEDEDEDEDEDEBEBEBE9E9E9E5E5E5D7D7D7BCBCBCCACA - CAD9D9D9E7E7E7FFFFFFFFFFFFFFFFFFF7F7F7F8F8F8F8F8F8F8F8F8FAFAFAF9 - F9F9F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FCFCFCFAFAFAFEFEFEF4F4F4F4F4F4FDFDFDFDFDFDFFFFFFFFFFFFFFFFFFFCFC - FCF0F0F0ECECECE7E7E7E7E7E7FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE - FEFEF9F9F9F9F9F9F9F9F9FAFAFAFBFBFBFCFCFCFCFCFCFBFBFBF8F8F8F7F7F7 - F7F7F7F4F4F4F4F4F4F7F7F7F8F8F8F8F8F8F9F9F9FBFBFBF9F9F9FAFAFAEAEA - EAE8E8E8ECECECE0E0E0EAEAEAF7F7F7F7F7F7F9F9F9FFFFFFFAFAFAD7D7D7B2 - B2B2D7D7D7F5F5F5F9F9F9FFFFFFFFFFFFFDFDFDFAFAFAF8F8F8F7F7F7F0F0F0 - EDEDEDF3F3F3E6E6E6D5D5D5D8D8D8DADADADADADAE8E8E8F3F3F3F0F0F0E8E8 - E8E9E9E9E9E9E9E7E7E7E7E7E7E7E7E7E9E9E9E7E7E7DFDFDFCACACAB6B6B695 - 9595ADADADE2E2E2F6F6F6F5F5F5F3F3F3F4F4F4F7F7F7F9F9F9FBFBFBFCFCFC - FDFDFDFCFCFCFCFCFCFEFEFEFDFDFDFBFBFBFBFBFBFCFCFCFBFBFBF9F9F9F8F8 - F8F7F7F7FAFAFAF9F9F9F7F7F7FFFFFFFFFFFFFBFBFBECECECE6E6E6E6E6E6F9 - F9F9F9F9F9ECECECECECECECECECEDEDEDF0F0F0F0F0F0FCFCFCFFFFFFFFFFFF - FFFFFFFFFFFFFBFBFBE7E7E7CCCCCCB2B2B2B1B1B1BABABABDBDBDBCBCBCD4D4 - D4E9E9E9E9E9E9EAEAEAEBEBEBE9E9E9E7E7E7E7E7E7E8E8E8E6E6E6E1E1E1DC - DCDCE1E1E1E6E6E6E7E7E7E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E7E7E7E4E4E4 - B8B8B8CDCDCDF7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F9F9F9FFFF - FFFFFFFFFFFFFFFFFFFFE9E9E9E7E7E7E7E7E7E7E7E7E6E6E6E7E7E7E6E6E6E7 - E7E7E7E7E7F0F0F0F9F9F9ECECECEFEFEFFAFAFAFBFBFBFBFBFBFCFCFCFCFCFC - F8F8F8F3F3F3F3F3F3EFEFEFF0F0F0F4F4F4F8F8F8FFFFFFFFFFFFFFFFFFFFFF - FFECECECEFEFEFEDEDEDECECECE9E9E9E3E3E3FDFDFDFFFFFFFFFFFFFFFFFFFC - FCFCFEFEFEFFFFFFFFFFFFFFFFFFEEEEEEF1F1F1EFEFEFECECECE9E9E9E8E8E8 - E8E8E8E3E3E3F2F2F2F5F5F5FFFFFFFBFBFBEEEEEEEAEAEAE9E9E9E9E9E9E8E8 - E8E7E7E7D4D4D4AFAFAFC1C1C1E4E4E4F3F3F3F5F5F5F3F3F3F0F0F0F0F0F0FF - FFFFF8F8F8F5F5F5E3E3E3ECECECEBEBEBE6E6E6E3E3E3E4E4E4E2E2E2E4E4E4 - E4E4E4E7E7E7EAEAEAE9E9E9E9E9E9E9E9E9E7E7E7E8E8E8E6E6E6FAFAFAFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFCFCFCF8F8F8F4 - F4F4F1F1F1C9C9C9C7C7C7E5E5E5E7E7E7E7E7E7E9E9E9EAEAEAEAEAEAEAEAEA - EAEAEAEAEAEAECECECECECECEBEBEBEBEBEBEBEBEBD9D9D9BCBCBCCBCBCBE7E7 - E7F4F4F4FFFFFFFFFFFFFFFFFFF8F8F8F6F6F6F8F8F8F9F9F9FAFAFAFBFBFBF9 - F9F9F8F8F8F8F8F8F8F8F8FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F3F3F3F2F2F2 - EDEDEDEBEBEBECECECE7E7E7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF0F0 - F0EEEEEEEAEAEAE7E7E7E7E7E7E7E7E7E4E4E4F8F8F8FEFEFEFCFCFCFCFCFCF9 - F9F9F7F7F7F9F9F9F9F9F9F8F8F8FEFEFEFFFFFFFFFFFFFEFEFEFCFCFCFAFAFA - F9F9F9F8F8F8F8F8F8F8F8F8F8F8F8F9F9F9FDFDFDFFFFFFFFFFFFFFFFFFFFFF - FFF6F6F6EEEEEEE0E0E0EAEAEAF7F7F7F7F7F7F9F9F9FFFFFFE9E9E9B2B2B2C1 - C1C1E7E7E7F8F8F8FCFCFCFEFEFEFCFCFCFBFBFBF9F9F9F8F8F8F5F5F5F3F3F3 - F5F5F5FAFAFAF8F8F8F3F3F3F4F4F4F3F3F3F0F0F0F0F0F0F5F5F5ECECECE8E8 - E8E9E9E9E7E7E7E6E6E6E7E7E7D5D5D5C3C3C3C3C3C3B6B6B69D9D9DB0B0B0C3 - C3C3DCDCDCF4F4F4F4F4F4F4F4F4F5F5F5F8F8F8FAFAFAFBFBFBFBFBFBFEFEFE - FDFDFDFAFAFAFCFCFCFCFCFCFBFBFBF9F9F9FCFCFCFCFCFCF9F9F9F8F8F8F7F7 - F7F5F5F5FAFAFAF9F9F9FFFFFFFFFFFFFFFFFFE9E9E9E6E6E6E4E4E4E4E4E4E7 - E7E7E9E9E9EBEBEBECECECEDEDEDF1F1F1F1F1F1EEEEEEECECECECECECECECEC - E9E9E9E6E6E6D3D3D3BCBCBC9D9D9DACACACC7C7C7CCCCCCCCCCCCCFCFCFF9F9 - F9FDFDFDE9E9E9E9E9E9EDEDEDEAEAEAE7E7E7E7E7E7E7E7E7E5E5E5CECECEBA - BABAD3D3D3E6E6E6E4E4E4E5E5E5E6E6E6E4E4E4E6E6E6E8E8E8E7E7E7CFCFCF - A5A5A5CFCFCFF5F5F5F5F5F5F6F6F6F7F7F7F7F7F7F7F7F7F9F9F9FFFFFFFFFF - FFFFFFFFF1F1F1E9E9E9E5E5E5E5E5E5E9E9E9E9E9E9E6E6E6E7E7E7E7E7E7E9 - E9E9EBEBEBF0F0F0EFEFEFFFFFFFFFFFFFFCFCFCFCFCFCFBFBFBFDFDFDFCFCFC - F8F8F8F8F8F8F8F8F8F7F7F7F9F9F9FBFBFBFBFBFBFFFFFFFFFFFFFFFFFFFAFA - FAEAEAEAEDEDEDEAEAEAE7E7E7E6E6E6E1E1E1F0F0F0FFFFFFFFFFFFFDFDFDFF - FFFFFFFFFFFFFFFFFFFFFFFCFCFCEEEEEEEFEFEFEDEDEDE9E9E9E8E8E8E7E7E7 - E7E7E7CECECEC0C0C0E2E2E2F3F3F3F5F5F5DCDCDCDADADAE9E9E9E9E9E9D9D9 - D9C6C6C6B0B0B0C1C1C1E6E6E6F7F7F7F7F7F7F7F7F7F5F5F5F3F3F3F3F3F3FF - FFFFFFFFFFFFFFFFE6E6E6E9E9E9E7E7E7E7E7E7E9E9E9E9E9E9E9E9E9E9E9E9 - E7E7E7E9E9E9E9E9E9E7E7E7E7E7E7E7E7E7E6E6E6E8E8E8E6E6E6D6D6D6EDED - EDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBF8F8F8F7F7F7F5F5F5F4 - F4F4F4F4F4E4E4E4E4E4E4FFFFFFFFFFFFF5F5F5EBEBEBEAEAEAEAEAEAEAEAEA - EBEBEBEBEBEBEDEDEDEEEEEEECECECEAEAEAEAEAEAC8C8C8C6C6C6E7E7E7F4F4 - F4FFFFFFFFFFFFFFFFFFF7F7F7E7E7E7E6E6E6FFFFFFFFFFFFFFFFFFFBFBFBFC - FCFCFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1EEEEEE - EBEBEBEAEAEAEAEAEAEAEAEAFDFDFDFFFFFFFFFFFFFFFFFFFDFDFDEFEFEFEDED - EDEAEAEAE7E7E7E7E7E7E7E7E7E6E6E6E2E2E2E4E4E4E6E6E6D9D9D9E7E7E7F8 - F8F8F8F8F8F8F8F8F8F8F8F5F5F5F8F8F8FCFCFCFCFCFCFCFCFCFBFBFBFBFBFB - FCFCFCFBFBFBF9F9F9FBFBFBFBFBFBFBFBFBFFFFFFFFFFFFFDFDFDFBFBFBFFFF - FFFBFBFBEFEFEFEEEEEEE1E1E1EAEAEAF7F7F7F9F9F9FFFFFFFFFFFFE8E8E8E5 - E5E5F6F6F6F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F5F5F5F4F4F4F3F3F3F4F4F4 - F9F9F9FCFCFCFCFCFCF8F8F8F7F7F7F4F4F4F4F4F4F4F4F4F5F5F5FFFFFFF9F9 - F9D7D7D7C4C4C4C4C4C4C5C5C5B1B1B1C0C0C0D0D0D0C8C8C8C8C8C8DEDEDEF1 - F1F1F1F1F1F3F3F3F6F6F6F8F8F8F9F9F9FBFBFBFCFCFCFBFBFBFDFDFDFFFFFF - FDFDFDFBFBFBFDFDFDFDFDFDFCFCFCFCFCFCFDFDFDFBFBFBF8F8F8F8F8F8FAFA - FAF8F8F8FCFCFCFFFFFFFFFFFFFFFFFFF8F8F8E6E6E6E5E5E5E2E2E2D1D1D1C6 - C6C6D9D9D9EBEBEBEAEAEAEDEDEDF0F0F0ECECECE9E9E9E6E6E6E6E6E6D1D1D1 - B7B7B7B8B8B8A4A4A4B6B6B6CACACADFDFDFF7F7F7F7F7F7F7F7F7FFFFFFFFFF - FFFFFFFFE9E9E9E9E9E9ECECECEAEAEAE7E7E7E6E6E6E6E6E6D2D2D2A6A6A6B7 - B7B7E1E1E1E8E8E8E7E7E7E7E7E7E7E7E7E6E6E6E7E7E7E6E6E6D0D0D09F9F9F - B3B3B3E1E1E1F3F3F3F3F3F3F5F5F5F7F7F7F7F7F7FFFFFFFFFFFFFFFFFFFFFF - FFFDFDFDEEEEEEE8E8E8E5E5E5E5E5E5E7E7E7E6E6E6E5E5E5E5E5E5E7E7E7E9 - E9E9EAEAEAEBEBEBE9E9E9F9F9F9F9F9F9FFFFFFFFFFFFFBFBFBFCFCFCFBFBFB - F9F9F9FAFAFAF9F9F9F9F9F9FBFBFBFDFDFDFFFFFFFFFFFFFFFFFFFDFDFDEAEA - EAE9E9E9EAEAEAE7E7E7E4E4E4E4E4E4E1E1E1E1E1E1E7E7E7EBEBEBECECECFD - FDFDFFFFFFFFFFFFFDFDFDEEEEEEEEEEEEEDEDEDEAEAEAE8E8E8E7E7E7E7E7E7 - E6E6E6BABABAB8B8B8E3E3E3F3F3F3F4F4F4E5E5E5E8E8E8D9D9D9C5C5C5B2B2 - B2C1C1C1D3D3D3E7E7E7F8F8F8F8F8F8F8F8F8F7F7F7F7F7F7F7F7F7F7F7F7FF - FFFFFFFFFFFFFFFFE9E9E9E9E9E9E9E9E9E9E9E9E9E9E9EAEAEAEAEAEAEAEAEA - EAEAEAEBEBEBE9E9E9E9E9E9E7E7E7E7E7E7E8E8E8E9E9E9E9E9E9D4D4D4FBFB - FBFFFFFFFFFFFFFFFFFFFEFEFEF1F1F1EFEFEFEEEEEEE2E2E2EAEAEAF3F3F3F0 - F0F0F0F0F0F1F1F1F3F3F3FFFFFFFFFFFFF7F7F7ECECECEAEAEAEAEAEAEBEBEB - ECECECECECECF0F0F0EEEEEEEAEAEAE9E9E9E8E8E8C6C6C6D3D3D3F4F4F4FFFF - FFFFFFFFFFFFFFF7F7F7E6E6E6E7E7E7E4E4E4F8F8F8FFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEEFEFEFF1F1F1F0F0F0EEEEEEECECEC - EAEAEAEAEAEAEAEAEAEAEAEAECECECEEEEEEF0F0F0EFEFEFEFEFEFEDEDEDEAEA - EAE7E7E7E7E7E7E5E5E5E3E3E3E2E2E2E1E1E1E4E4E4D5D5D5B0B0B0D1D1D1F5 - F5F5F5F5F5F5F5F5F5F5F5F3F3F3F5F5F5F5F5F5F7F7F7FDFDFDFEFEFEFCFCFC - FCFCFCFDFDFDFCFCFCFEFEFEFDFDFDFFFFFFFFFFFFFFFFFFFBFBFBFFFFFFFFFF - FFFFFFFFF6F6F6EDEDEDDEDEDEEAEAEAF8F8F8F9F9F9FFFFFFFFFFFFFBFBFBFF - FFFFFFFFFFF7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F5F5F5F7F7F7F5F5F5F6F6F6 - FBFBFBFFFFFFFCFCFCFBFBFBF9F9F9F7F7F7F9F9F9F7F7F7F8F8F8FFFFFFE8E8 - E8ADADADBFBFBFD3D3D3D3D3D3D3D3D3E2E2E2EDEDEDEBEBEBEEEEEEF1F1F1F3 - F3F3F3F3F3F5F5F5F9F9F9FAFAFAFAFAFAFBFBFBFBFBFBFBFBFBFFFFFFFFFFFF - FDFDFDFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8F8F8F8F8FCFC - FCFBFBFBFFFFFFFFFFFFFFFFFFF8F8F8E9E9E9E6E6E6E4E4E4D3D3D3B4B4B4C6 - C6C6F9F9F9FCFCFCEEEEEEF3F3F3EEEEEEE9E9E9E8E8E8E6E6E6CFCFCF9B9B9B - B2B2B2CCCCCCD0D0D0E2E2E2F4F4F4F7F7F7F9F9F9FAFAFAFFFFFFFFFFFFFFFF - FFFDFDFDE9E9E9E9E9E9E9E9E9E9E9E9E7E7E7E2E2E2DEDEDEBABABAB5B5B5DA - DADAF1F1F1FFFFFFF9F9F9EAEAEAEAEAEAEAEAEAD5D5D5BDBDBDA0A0A0A9A9A9 - D7D7D7F1F1F1F3F3F3F4F4F4F7F7F7F9F9F9F7F7F7FFFFFFFFFFFFFFFFFFF2F2 - F2E1E1E1D9D9D9D2D2D2DFDFDFE5E5E5E5E5E5E2E2E2E4E4E4E6E6E6E6E6E6E9 - E9E9EBEBEBE9E9E9E8E8E8E7E7E7E7E7E7FBFBFBFBFBFBFFFFFFFFFFFFFAFAFA - FAFAFAF9F9F9F8F8F8FAFAFAFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDECEC - ECECECECEAEAEAE8E8E8E6E6E6E6E6E6E2E2E2E2E2E2E7E7E7EAEAEAEAEAEAEB - EBEBECECECECECECEDEDEDEDEDEDECECECEAEAEAE9E9E9E8E8E8E7E7E7D3D3D3 - BABABA9F9F9FCBCBCBF5F5F5F4F4F4F5F5F5F7F7F7F8F8F8E5E5E5D1D1D1D4D4 - D4E4E4E4F6F6F6F8F8F8F8F8F8F8F8F8F8F8F8F7F7F7F8F8F8F8F8F8F7F7F7FF - FFFFFFFFFFFFFFFFECECECEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEA - ECECECECECECEAEAEAE9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E8E8E8FDFD - FDFFFFFFFFFFFFFFFFFFF0F0F0F1F1F1F0F0F0EEEEEEE4E4E4EAEAEAEEEEEEF0 - F0F0F2F2F2F4F4F4F3F3F3F3F3F3FFFFFFF7F7F7EAEAEAEAEAEAEAEAEAEAEAEA - ECECECEEEEEEEDEDEDEAEAEAEAEAEAE9E9E9E9E9E9C6C6C6D2D2D2F4F4F4FFFF - FFFFFFFFF4F4F4E6E6E6E4E4E4E4E4E4E3E3E3E6E6E6EAEAEAEDEDEDFDFDFDFF - FFFFFFFFFFFFFFFFFFFFFFF2F2F2EEEEEEEEEEEEF0F0F0EDEDEDEBEBEBEAEAEA - EAEAEAEAEAEAEAEAEAEBEBEBEDEDEDEDEDEDF0F0F0EEEEEEECECECEAEAEAE8E8 - E8E6E6E6E1E1E1DDDDDDE1E1E1E2E2E2E3E3E3E6E6E6C3C3C3BCBCBCE2E2E2F4 - F4F4F6F6F6F7F7F7F5F5F5F5F5F5F6F6F6F4F4F4F6F6F6FBFBFBFDFDFDFBFBFB - FCFCFCFCFCFCFBFBFBFDFDFDFBFBFBFFFFFFFFFFFFFDFDFDFFFFFFFFFFFFFFFF - FFFFFFFFF5F5F5ECECECEAEAEAE1E1E1ECECECF9F9F9FFFFFFFDFDFDE9E9E9F9 - F9F9F9F9F9F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F9F9F9F9F9F9FBFBFB - FFFFFFFFFFFFFCFCFCFBFBFBF9F9F9F7F7F7FBFBFBF7F7F7F8F8F8F8F8F8E4E4 - E4D1D1D1E4E4E4F4F4F4F4F4F4F4F4F4F1F1F1ECECECEEEEEEF3F3F3F4F4F4F5 - F5F5F5F5F5F7F7F7FAFAFAFAFAFAFAFAFAFBFBFBFAFAFAFDFDFDFFFFFFFDFDFD - FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFFFFFFFFFFFFFDFD - FDFAFAFAFFFFFFFFFFFFF8F8F8E7E7E7E5E5E5E0E0E0CFCFCFB2B2B2C5C5C5E6 - E6E6FFFFFFEDEDEDE0E0E0EDEDEDE9E9E9E7E7E7E6E6E6E3E3E3B2B2B2B0B0B0 - E2E2E2F9F9F9F9F9F9F9F9F9FAFAFAFBFBFBFAFAFAFBFBFBFFFFFFFFFFFFFDFD - FDE9E9E9E9E9E9E9E9E9E9E9E9E9E9E9EAEAEAE0E0E0DFDFDFD4D4D4DDDDDDEF - EFEFF3F3F3FFFFFFF9F9F9D6D6D6C1C1C1C0C0C0A6A6A6B6B6B6C8C8C8DCDCDC - F4F4F4F7F7F7F8F8F8F7F7F7F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFECECECDFDF - DFD8D8D8C9C9C9D6D6D6E7E7E7E9E9E9E5E5E5E4E4E4E3E3E3E4E4E4E2E2E2E6 - E6E6E5E5E5E4E4E4E6E6E6E7E7E7E7E7E7E6E6E6E3E3E3F8F8F8FCFCFCFFFFFF - FFFFFFF9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9EDEDEDEEEE - EEEDEDEDE8E8E8E8E8E8E9E9E9E7E7E7E4E4E4E5E5E5E8E8E8EAEAEAEAEAEAEA - EAEAECECECEDEDEDEEEEEEEEEEEEEBEBEBE8E8E8E7E7E7D5D5D5BCBCBC9F9F9F - B2B2B2CACACAE2E2E2F7F7F7F4F4F4F7F7F7F9F9F9F9F9F9F8F8F8F7F7F7F9F9 - F9F8F8F8F7F7F7F9F9F9F8F8F8F8F8F8F8F8F8F9F9F9FAFAFAF8F8F8F7F7F7FF - FFFFFFFFFFFFFFFFF0F0F0EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEBEBEB - ECECECEAEAEAE9E9E9E9E9E9E7E7E7D2D2D2D2D2D2E6E6E6E8E8E8EAEAEAEDED - EDECECECF0F0F0F2F2F2F1F1F1F1F1F1F2F2F2EFEFEFE1E1E1CECECEE3E3E3F4 - F4F4F5F5F5F6F6F6F5F5F5F5F5F5FFFFFFFFFFFFECECECEAEAEAEAEAEAEDEDED - F0F0F0EEEEEEECECECECECECECECECE9E9E9EAEAEAC4C4C4D3D3D3F5F5F5FFFF - FFFFFFFFE1E1E1E5E5E5E2E2E2E4E4E4E6E6E6E8E8E8EAEAEAECECECE9E9E9EA - EAEAE9E9E9E9E9E9EBEBEBECECECEBEBEBEDEDEDEDEDEDEBEBEBEAEAEAEAEAEA - EAEAEAEAEAEAEAEAEAEDEDEDEEEEEEEDEDEDEEEEEEECECECE8E8E8E8E8E8E6E6 - E6D1D1D1BABABAC1C1C1D6D6D6E5E5E5E4E4E4E2E2E2BDBDBDCECECEF4F4F4F6 - F6F6F7F7F7F8F8F8F5F5F5F4F4F4F4F4F4F1F1F1F2F2F2F7F7F7F9F9F9F8F8F8 - FBFBFBFBFBFBF8F8F8FAFAFAF9F9F9FFFFFFF3F3F3DCDCDCF1F1F1FCFCFCF4F4 - F4EDEDEDF0F0F0EEEEEEEDEDEDE2E2E2EEEEEEF8F8F8FFFFFFFFFFFFF9F9F9E6 - E6E6E7E7E7E7E7E7F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFB - FEFEFEFDFDFDFBFBFBFAFAFAF8F8F8F7F7F7F9F9F9F8F8F8F7F7F7FFFFFFFFFF - FFF5F5F5F5F5F5F7F7F7F6F6F6F4F4F4F1F1F1EDEDEDF0F0F0F3F3F3F4F4F4F6 - F6F6F5F5F5F7F7F7FAFAFAFAFAFAFAFAFAFBFBFBFDFDFDFFFFFFFFFFFFFCFCFC - FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDECECECEDEDEDEEEEEEFDFDFDFEFEFEFBFB - FBFFFFFFFFFFFFFFFFFFE7E7E7D0D0D0D0D0D0C0C0C0B1B1B1C4C4C4E4E4E4F4 - F4F4F7F7F7EAEAEAE9E9E9ECECECE9E9E9E6E6E6E2E2E2CDCDCDA1A1A1CFCFCF - F9F9F9FAFAFAFAFAFAFAFAFAFBFBFBFAFAFAF9F9F9FAFAFAFFFFFFFFFFFFE9E9 - E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9EAEAEAE3E3E3E4E4E4EAEAEAD4D4D4E1 - E1E1F5F5F5F6F6F6F8F8F8C3C3C3B9B9B9CCCCCCCBCBCBDEDEDEF3F3F3F7F7F7 - FCFCFCFCFCFCFBFBFBFBFBFBF9F9F9FDFDFDFFFFFFFFFFFFFEFEFEECECECE6E6 - E6DADADADBDBDBEBEBEBF8F8F8EDEDEDE5E5E5E3E3E3E0E0E0CECECEB9B9B9BF - BFBFD1D1D1E0E0E0E0E0E0E1E1E1E0E0E0E1E1E1E1E1E1E5E5E5E9E9E9FFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9E9E9EAEAEAEBEBEBECEC - ECEAEAEAE4E4E4E6E6E6E7E7E7E2E2E2E2E2E2E4E4E4E9E9E9E9E9E9D9D9D9C8 - C8C8DDDDDDEEEEEEECECECECECECE9E9E9E7E7E7E6E6E6BFBFBFB9B9B9CCCCCC - E1E1E1F5F5F5F7F7F7F7F7F7F5F5F5F7F7F7F9F9F9F9F9F9F9F9F9F9F9F9FBFB - FBF9F9F9F8F8F8FAFAFAF9F9F9F8F8F8F9F9F9FAFAFAFAFAFAF9F9F9F9F9F9FF - FFFFFFFFFFFFFFFFF0F0F0EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEBEBEB - D7D7D7D5D5D5E9E9E9E9E9E9D2D2D2A9A9A9D0D0D0E8E8E8EAEAEAEDEDEDECEC - ECEBEBEBEDEDEDECECECEEEEEEF1F1F1F1F1F1EBEBEBDEDEDED7D7D7E3E3E3F1 - F1F1F2F2F2F5F5F5F7F7F7F7F7F7FFFFFFFFFFFFECECECECECECEDEDEDF0F0F0 - EFEFEFEDEDEDECECECEAEAEAE9E9E9E7E7E7D7D7D7A7A7A7CECECEF7F7F7FFFF - FFFFFFFFE0E0E0E4E4E4E2E2E2D5D5D5D7D7D7E9E9E9EAEAEAEBEBEBEAEAEAE7 - E7E7E5E5E5E7E7E7E9E9E9E9E9E9EAEAEAEDEDEDEEEEEEEDEDEDECECECECECEC - EDEDEDEDEDEDEDEDEDEEEEEEEDEDEDE9E9E9E9E9E9E9E9E9D8D8D8C5C5C5C0C0 - C0A9A9A9B7B7B7D3D3D3E6E6E6E7E7E7E2E2E2D3D3D3B2B2B2D3D3D3F6F6F6F7 - F7F7F9F9F9F7F7F7F4F4F4F4F4F4F1F1F1EFEFEFF3F3F3F6F6F6F8F8F8F8F8F8 - F8F8F8F8F8F8F7F7F7FAFAFAF9F9F9FCFCFCEEEEEEE6E6E6E7E7E7E8E8E8EAEA - EAEEEEEEEFEFEFEDEDEDEAEAEAEEEEEEF0F0F0F5F5F5FFFFFFFFFFFFF9F9F9E6 - E6E6E6E6E6E4E4E4E5E5E5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9 - FBFBFBFBFBFBF9F9F9F8F8F8F7F7F7F7F7F7F9F9F9FFFFFFFFFFFFFFFFFFFEFE - FEE8E8E8F5F5F5F8F8F8F6F6F6F2F2F2EDEDEDE9E9E9EEEEEEF4F4F4F5F5F5F5 - F5F5F6F6F6F9F9F9FAFAFAFAFAFAFAFAFAFBFBFBFFFFFFFFFFFFFFFFFFFDFDFD - FFFFFFFFFFFFF9F9F9E9E9E9EAEAEAECECECEDEDEDEBEBEBEAEAEAEBEBEBDADA - DAFFFFFFFFFFFFFBFBFBC6C6C6CECECEC7C7C7C4C4C4D5D5D5E3E3E3F3F3F3F7 - F7F7F9F9F9FBFBFBFDFDFDFFFFFFFCFCFCE8E8E8E3E3E3BDBDBDBBBBBBE4E4E4 - F7F7F7F9F9F9FAFAFAFAFAFAFAFAFAFAFAFAF9F9F9F9F9F9FFFFFFFFFFFFE8E8 - E8E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E6E6E6E7E7E7DADADAB1B1B1D2 - D2D2F4F4F4F7F7F7F7F7F7E2E2E2E0E0E0F4F4F4F5F5F5F5F5F5F8F8F8FAFAFA - FCFCFCFCFCFCFCFCFCFDFDFDFAFAFAFFFFFFFFFFFFFFFFFFF0F0F0E9E9E9E7E7 - E7DEDEDEE6E6E6F4F4F4FFFFFFFFFFFFF6F6F6E2E2E2CACACA969696A5A5A5C6 - C6C6D7D7D7DFDFDFE5E5E5E5E5E5E2E2E2E3E3E3E4E4E4E6E6E6E9E9E9EAEAEA - ECECECFFFFFFFFFFFFFFFFFFFFFFFFFAFAFAF8F8F8E9E9E9EAEAEAEBEBEBEAEA - EAE6E6E6E3E3E3E4E4E4D1D1D1BABABABCBCBCC2C2C2C7C7C7D9D9D9CBCBCBDA - DADAFFFFFFFCFCFCE9E9E9E9E9E9E8E8E8E8E8E8D7D7D7B0B0B0D3D3D3F8F8F8 - F8F8F8F8F8F8F8F8F8F7F7F7F4F4F4F5F5F5F8F8F8F9F9F9F9F9F9F9F9F9FAFA - FAF9F9F9F9F9F9FBFBFBF9F9F9F8F8F8FAFAFAFBFBFBFAFAFAF9F9F9F8F8F8FF - FFFFFFFFFFFFFFFFEFEFEFEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEBEBEBECECEC - C1C1C1E4E4E4FCFCFCE9E9E9D5D5D5E4E4E4F8F8F8FFFFFFFDFDFDEAEAEAEBEB - EBEAEAEAE8E8E8E6E6E6E9E9E9EDEDEDECECECE7E7E7E7E7E7D7D7D7DEDEDEF1 - F1F1F4F4F4F9F9F9F8F8F8F5F5F5FFFFFFE9E9E9D9D9D9EBEBEBEEEEEEEEEEEE - EBEBEBEBEBEBEAEAEAE7E7E7E7E7E7D0D0D0A1A1A1A9A9A9DEDEDEFFFFFFFFFF - FFFCFCFCDADADACECECEBDBDBDADADADD3D3D3E9E9E9E8E8E8EAEAEAE7E7E7E3 - E3E3E4E4E4E8E8E8E9E9E9E9E9E9EAEAEAECECECECECECECECECEAEAEAEDEDED - EEEEEEECECECEAEAEAEBEBEBDDDDDDC8C8C8CACACAC8C8C8B1B1B1B7B7B7C4C4 - C4C2C2C2D9D9D9F0F0F0F3F3F3F4F4F4DBDBDBBEBEBEC8C8C8E7E7E7F8F8F8F8 - F8F8F9F9F9F6F6F6F2F2F2F3F3F3F0F0F0F1F1F1F6F6F6F8F8F8F7F7F7F7F7F7 - F7F7F7F5F5F5F7F7F7F9F9F9F8F8F8FBFBFBFAFAFAF5F5F5F2F2F2EAEAEAE9E9 - E9EEEEEEEDEDEDEAEAEAE7E7E7EDEDEDEEEEEEEDEDEDFFFFFFFFFFFFE6E6E6E5 - E5E5E5E5E5E2E2E2E1E1E1F7F7F7FBFBFBFCFCFCFBFBFBFFFFFFFDFDFDE7E7E7 - F4F4F4F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F9F9F9FFFFFFFFFFFFFFFFFFDADA - DAD2D2D2F4F4F4F6F6F6F4F4F4F1F1F1ECECECECECECF3F3F3F6F6F6F7F7F7F8 - F8F8F8F8F8FAFAFAFAFAFAFAFAFAFBFBFBFEFEFEFFFFFFFFFFFFFFFFFFFAFAFA - FFFFFFECECECCACACADADADAECECECEBEBEBE9E9E9E8E8E8E7E7E7E9E9E9C6C6 - C6F7F7F7FFFFFFC8C8C8C1C1C1E5E5E5E8E8E8E5E5E5F0F0F0F0F0F0F5F5F5F9 - F9F9F9F9F9FDFDFDFFFFFFFFFFFFFFFFFFE7E7E7E4E4E4C1C1C1D3D3D3F6F6F6 - F7F7F7F9F9F9FAFAFAFAFAFAFAFAFAFBFBFBFCFCFCFBFBFBFFFFFFFFFFFFE9E9 - E9E9E9E9E8E8E8E9E9E9E9E9E9E9E9E9E9E9E9E6E6E6E7E7E7C8C8C8C0C0C0E3 - E3E3F5F5F5F4F4F4F4F4F4F3F3F3F4F4F4F7F7F7F7F7F7F8F8F8FBFBFBFCFCFC - FDFDFDFCFCFCFDFDFDFCFCFCF9F9F9FEFEFEFFFFFFEFEFEFE4E4E4EAEAEAEAEA - EADFDFDFF0F0F0FFFFFFFFFFFFFFFFFFF7F7F7E3E3E3AFAFAF9F9F9FD1D1D1ED - EDEDF0F0F0F2F2F2D5D5D5D7D7D7E9E9E9E9E9E9E8E8E8E8E8E8E8E8E8E9E9E9 - E9E9E9E9E9E9E9E9E9E8E8E8E7E7E7E6E6E6D6D6D6D9D9D9E9E9E9EAEAEAE8E8 - E8E3E3E3D0D0D0B8B8B8A3A3A3B7B7B7D0D0D0D5D5D5D7D7D7E8E8E8CDCDCDE8 - E8E8FFFFFFFBFBFBE9E9E9E9E9E9E7E7E7E5E5E5C6C6C6C1C1C1E7E7E7FBFBFB - F9F9F9F8F8F8F8F8F8F7F7F7F4F4F4F6F6F6F9F9F9F9F9F9F9F9F9F9F9F9F9F9 - F9FAFAFAFBFBFBF9F9F9F8F8F8F9F9F9FCFCFCFAFAFAFAFAFAFAFAFAF9F9F9FF - FFFFFFFFFFF6F6F6E7E7E7EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE9E9E9 - BFBFBFF8F8F8FFFFFFECECECECECECF8F8F8E9E9E9F8F8F8EBEBEBDADADAEAEA - EAEAEAEAE6E6E6E6E6E6E9E9E9E9E9E9EAEAEAE6E6E6D6D6D6B7B7B7D6D6D6F6 - F6F6F8F8F8FCFCFCF9F9F9F5F5F5F7F7F7E5E5E5E5E5E5D9D9D9DADADAD5D5D5 - D1D1D1E7E7E7E5E5E5CECECEB7B7B79B9B9BB1B1B1DADADAF3F3F3FFFFFFFFFF - FFECECECE0E0E0C0C0C0BBBBBBD3D3D3E7E7E7F7F7F7EAEAEAEAEAEAE8E8E8E6 - E6E6E8E8E8E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9EAEAEAEAEAEAECECEC - ECECECE9E9E9E7E7E7ECECECCCCCCCBEBEBECECECED0D0D0CACACAD7D7D7E7E7 - E7EAEAEAEEEEEEF3F3F3F5F5F5F8F8F8EEEEEEDFDFDFE8E8E8F6F6F6F8F8F8F7 - F7F7F5F5F5F4F4F4F3F3F3F4F4F4F4F4F4F5F5F5F8F8F8F8F8F8F7F7F7F6F6F6 - F7F7F7F5F5F5F4F4F4F7F7F7F8F8F8F9F9F9F8F8F8F7F7F7F4F4F4ECECECE3E3 - E3EAEAEAECECECEAEAEAE7E7E7EDEDEDEDEDEDEBEBEBFDFDFDF9F9F9E4E4E4E4 - E4E4E3E3E3E1E1E1E2E2E2E8E8E8EBEBEBE9E9E9E9E9E9EDEDEDECECECE3E3E3 - D1D1D1E4E4E4F7F7F7F7F7F7F7F7F7F7F7F7FFFFFFFFFFFFFFFFFFEBEBEBC1C1 - C1CFCFCFF4F4F4F5F5F5F3F3F3F0F0F0EDEDEDF0F0F0F7F7F7F8F8F8F9F9F9FB - FBFBFAFAFAFCFCFCFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBF8F8F8 - F6F6F6E7E7E7D5D5D5E5E5E5EBEBEBEAEAEAE7E7E7E7E7E7E6E6E6E7E7E7C7C7 - C7EAEAEAF0F0F0BABABAD7D7D7F7F7F7F7F7F7F5F5F5F3F3F3F7F7F7FCFCFCFD - FDFDFBFBFBFFFFFFFFFFFFFFFFFFF7F7F7E7E7E7E7E7E7D3D3D3E3E3E3F8F8F8 - F8F8F8F9F9F9FBFBFBFBFBFBFBFBFBFCFCFCFCFCFCFBFBFBFFFFFFFDFDFDEAEA - EAE9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E6E6E6D7D7D7B5B5B5D2D2D2F4 - F4F4F4F4F4F5F5F5F7F7F7F7F7F7F8F8F8F8F8F8F8F8F8FAFAFAFCFCFCFDFDFD - FDFDFDFEFEFEFDFDFDFBFBFBF9F9F9FDFDFDFBFBFBEDEDEDECECECE4E4E4DCDC - DCE1E1E1FFFFFFFFFFFFFFFFFFFCFCFCE7E7E7D1D1D1919191BABABAF1F1F1F8 - F8F8FBFBFBF9F9F9E6E6E6E6E6E6E9E9E9E9E9E9EAEAEAEBEBEBEAEAEAEAEAEA - EBEBEBEAEAEAE9E9E9E7E7E7E6E6E6D6D6D6BABABAE4E4E4F5F5F5E7E7E7E4E4 - E4D0D0D0A2A2A2B2B2B2CECECEE4E4E4F8F8F8F9F9F9FBFBFBFBFBFBE9E9E9E5 - E5E5F7F7F7ECECECE9E9E9E9E9E9E4E4E4E4E4E4C9C9C9D5D5D5F5F5F5F9F9F9 - F8F8F8F8F8F8F8F8F8F7F7F7F4F4F4F7F7F7F9F9F9F9F9F9F9F9F9F9F9F9FAFA - FAFBFBFBFAFAFAF9F9F9FAFAFAFAFAFAFBFBFBF9F9F9F8F8F8F7F7F7F5F5F5FF - FFFFFBFBFBF0F0F0F8F8F8F9F9F9ECECECEAEAEAEAEAEADADADAC6C6C6BFBFBF - A8A8A8F9F9F9FFFFFFEEEEEEEDEDEDD4D4D4ACACACD5D5D5E7E7E7E8E8E8F0F0 - F0EDEDEDE6E6E6E6E6E6E7E7E7E7E7E7E6E6E6D4D4D4B6B6B6C8C8C8E8E8E8F8 - F8F8FAFAFAFDFDFDFCFCFCF9F9F9F9F9F9F7F7F7F5F5F5E6E6E6E6E6E6C1C1C1 - CECECED3D3D3BBBBBB9E9E9EB2B2B2CACACAE0E0E0F4F4F4F5F5F5FFFFFFFFFF - FFE9E9E9EDEDEDDBDBDBF7F7F7FFFFFFFFFFFFFFFFFFFFFFFFFBFBFBE9E9E9E9 - E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9EAEAEAEAEAEAECECECECECECEBEBEB - E9E9E9EAEAEAD7D7D7C3C3C3AFAFAFCACACAEDEDEDF1F1F1F0F0F0EEEEEEEEEE - EEF2F2F2F6F6F6F8F8F8FAFAFAFFFFFFFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFF5 - F5F5F5F5F5F7F7F7F7F7F7F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F7F7F7F7F7F7 - F6F6F6F3F3F3F4F4F4F7F7F7F8F8F8F9F9F9F9F9F9F8F8F8F5F5F5F0F0F0FEFE - FEF9F9F9EDEDEDEBEBEBE8E8E8EDEDEDEDEDEDE9E9E9EDEDEDE9E9E9E4E4E4E4 - E4E4E2E2E2E1E1E1E2E2E2E6E6E6E8E8E8E7E7E7E8E8E8EAEAEAEAEAEAE3E3E3 - C3C3C3D7D7D7F7F7F7F7F7F7F7F7F7F7F7F7FFFFFFFFFFFFF9F9F9E7E7E7C1C1 - C1CECECEF4F4F4F5F5F5F1F1F1F0F0F0F1F1F1F3F3F3F8F8F8F8F8F8F9F9F9F9 - F9F9FBFBFBFCFCFCFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF8F8F8F6F6F6 - F4F4F4F4F4F4F3F3F3F4F4F4FFFFFFF7F7F7E9E9E9E9E9E9E6E6E6E7E7E7CACA - CADEDEDEEDEDEDD9D9D9E7E7E7F9F9F9F9F9F9F6F6F6F5F5F5F9F9F9FCFCFCFC - FCFCFBFBFBFFFFFFFFFFFFFAFAFAEAEAEAEAEAEAE7E7E7D3D3D3CACACAE9E9E9 - F7F7F7F8F8F8FAFAFAFAFAFAFCFCFCFCFCFCFBFBFBF9F9F9F9F9F9F9F9F9EAEA - EAE9E9E9E8E8E8E9E9E9E9E9E9E9E9E9E9E9E9E7E7E7C6C6C6C3C3C3E4E4E4F4 - F4F4F4F4F4F7F7F7F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FDFDFDFEFEFEFEFEFE - FEFEFEFFFFFFFEFEFEFCFCFCFCFCFCFFFFFFFCFCFCF9F9F9F9F9F9F1F1F1F4F4 - F4FFFFFFFFFFFFFFFFFFF1F1F1ECECECE6E6E6B3B3B39D9D9DD7D7D7F9F9F9FC - FCFCFCFCFCFBFBFBFBFBFBFCFCFCFFFFFFFDFDFDEDEDEDECECECECECECEBEBEB - ECECECE9E9E9E7E7E7E6E6E6E4E4E4CACACACACACAFFFFFFFFFFFFDBDBDBC8C8 - C8A9A9A9B4B4B4DFDFDFF8F8F8F9F9F9F9F9F9FBFBFBFEFEFEFDFDFDFAFAFAF9 - F9F9FAFAFAF5F5F5D7D7D7C8C8C8C3C3C3C7C7C7BDBDBDD9D9D9F5F5F5F7F7F7 - F7F7F7F7F7F7F8F8F8F8F8F8F4F4F4F5F5F5F8F8F8F8F8F8F9F9F9F9F9F9FBFB - FBFBFBFBF9F9F9FBFBFBFBFBFBF9F9F9F8F8F8F7F7F7F6F6F6F5F5F5F4F4F4FF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFECECECEAEAEAEDEDEDCFCFCFD8D8D8E9E9E9 - ECECECFFFFFFFFFFFFECECECEAEAEABABABAB8B8B8E6E6E6F7F7F7F9F9F9FFFF - FFFBFBFBE3E3E3E5E5E5E7E7E7E7E7E7E4E4E4C6C6C6C6C6C6E7E7E7F7F7F7F7 - F7F7FCFCFCFEFEFEF9F9F9F7F7F7F7F7F7F5F5F5F5F5F5F7F7F7F7F7F7E6E6E6 - E6E6E6E5E5E5D0D0D0CECECEE2E2E2F5F5F5F5F5F5F6F6F6F8F8F8FFFFFFFFFF - FFEEEEEEF0F0F0ECECECFBFBFBE9E9E9FFFFFFFFFFFFFFFFFFFBFBFBE9E9E9E9 - E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9EAEAEAECECECECECECECECECE9E9E9 - E9E9E9EBEBEBC1C1C1BBBBBBD1D1D1E2E2E2F5F5F5F7F7F7F4F4F4F1F1F1F3F3 - F3F4F4F4F8F8F8FBFBFBFEFEFEFFFFFFFEFEFEFFFFFFFFFFFFFFFFFFF9F9F9F5 - F5F5F7F7F7F8F8F8F8F8F8F9F9F9F9F9F9F8F8F8F8F8F8F8F8F8F7F7F7F4F4F4 - F2F2F2F3F3F3F6F6F6F9F9F9F9F9F9F9F9F9FBFBFBF9F9F9F7F7F7F7F7F7FFFF - FFFFFFFFEEEEEEEAEAEAE8E8E8EBEBEBEBEBEBE9E9E9EDEDEDEAEAEAE5E5E5E4 - E4E4E2E2E2E1E1E1E3E3E3E6E6E6E8E8E8E7E7E7E8E8E8E9E9E9E9E9E9D3D3D3 - B2B2B2D4D4D4F4F4F4F7F7F7F7F7F7FFFFFFFFFFFFFFFFFFE7E7E7D6D6D6AAAA - AACECECEF4F4F4F5F5F5F1F1F1F2F2F2F6F6F6F7F7F7F8F8F8F9F9F9FBFBFBFA - FAFAFBFBFBFAFAFAFAFAFAFAFAFAFBFBFBFEFEFEFDFDFDF9F9F9F7F7F7F5F5F5 - F4F4F4F4F4F4F2F2F2F4F4F4FFFFFFF5F5F5E9E9E9E9E9E9E5E5E5E6E6E6CCCC - CCDBDBDBF7F7F7F5F5F5F5F5F5F6F6F6F3F3F3F3F3F3F4F4F4F7F7F7F9F9F9F9 - F9F9FFFFFFFFFFFFFFFFFFEBEBEBEAEAEAEAEAEAD8D8D8BABABAC8C8C8E8E8E8 - F6F6F6F8F8F8F8F8F8F9F9F9FBFBFBFBFBFBF9F9F9F9F9F9F9F9F9F9F9F9FFFF - FFFCFCFCE7E7E7E8E8E8EAEAEAE9E9E9E9E9E9E9E9E9C5C5C5D4D4D4F3F3F3F1 - F1F1F3F3F3F7F7F7F9F9F9FBFBFBFCFCFCFDFDFDFEFEFEFFFFFFFFFFFFFDFDFD - FDFDFDFDFDFDFCFCFCFBFBFBFBFBFBFCFCFCFAFAFAFAFAFAFAFAFAFBFBFBFFFF - FFFFFFFFFFFFFFF1F1F1EAEAEAEAEAEAE5E5E5ACACACBDBDBDF3F3F3FCFCFCFC - FCFCFCFCFCFBFBFBFBFBFBFFFFFFFFFFFFFFFFFFEEEEEEEBEBEBEBEBEBEAEAEA - EAEAEAE8E8E8E7E7E7E6E6E6E6E6E6D9D9D9F3F3F3FFFFFFFFFFFFCBCBCBBEBE - BECACACAE1E1E1F8F8F8F9F9F9F9F9F9F9F9F9FCFCFCFEFEFEFBFBFBFAFAFAF9 - F9F9F8F8F8F4F4F4E5E5E5D3D3D3CECECED2D2D2D9D9D9E8E8E8F5F5F5F7F7F7 - F9F9F9F8F8F8F7F7F7F8F8F8F3F3F3F3F3F3F8F8F8FFFFFFFFFFFFFBFBFBFCFC - FCFAFAFAFAFAFAFBFBFBF9F9F9F9F9F9F9F9F9F6F6F6F5F5F5F4F4F4F4F4F4FF - FFFFFFFFFFF8F8F8FFFFFFFFFFFFEAEAEAEAEAEADEDEDEB7B7B7F9F9F9FDFDFD - FFFFFFFFFFFFFFFFFFE9E9E9E8E8E8B7B7B7C9C9C9F7F7F7F7F7F7F7F7F7FFFF - FFFDFDFDE6E6E6E6E6E6E7E7E7E6E6E6E6E6E6CACACAD7D7D7F5F5F5F7F7F7F7 - F7F7F9F9F9F9F9F9F5F5F5F5F5F5F7F7F7F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F6F6F6F5F5F5F8F8F8FCFCFCFCFCFCFFFFFFFDFD - FDEDEDEDECECECEAEAEAE9E9E9D6D6D6FFFFFFFFFFFFD1D1D1D2D2D2E9E9E9E9 - E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9EAEAEAEBEBEBEAEAEAEBEBEBEAEAEA - EAEAEAEBEBEBD5D5D5F7F7F7FFFFFFF9F9F9F7F7F7F7F7F7F5F5F5F3F3F3F7F7 - F7F7F7F7F9F9F9FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEEEEEEEEEEEED9 - D9D9E6E6E6F7F7F7F8F8F8F9F9F9FCFCFCFAFAFAF8F8F8F8F8F8F7F7F7F5F5F5 - F5F5F5F5F5F5F9F9F9FBFBFBFBFBFBFDFDFDFCFCFCFAFAFAF8F8F8F7F7F7FDFD - FDFCFCFCECECECEAEAEAE8E8E8E9E9E9EBEBEBEBEBEBECECECEDEDEDE7E7E7E5 - E5E5E4E4E4E3E3E3E6E6E6E7E7E7D5D5D5C0C0C0C6C6C6CBCBCBD7D7D7C5C5C5 - C1C1C1E0E0E0F3F3F3F7F7F7FFFFFFFFFFFFFFFFFFFEFEFED6D6D6AFAFAFBABA - BAE1E1E1F5F5F5F5F5F5F1F1F1F3F3F3F7F7F7F7F7F7F8F8F8FBFBFBFAFAFAFA - FAFAFBFBFBF9F9F9F8F8F8F9F9F9FEFEFEFEFEFEF9F9F9F7F7F7F6F6F6F7F7F7 - F5F5F5FFFFFFFFFFFFF7F7F7F1F1F1EEEEEEEAEAEAEBEBEBE6E6E6E7E7E7DBDB - DBE7E7E7F5F5F5F5F5F5F5F5F5F3F3F3F0F0F0F1F1F1F4F4F4F6F6F6F8F8F8F9 - F9F9FFFFFFFFFFFFFCFCFCE9E9E9EAEAEADCDCDCBFBFBFC9C9C9E6E6E6F5F5F5 - F7F7F7F7F7F7F7F7F7F7F7F7F8F8F8F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FFFF - FFFFFFFFE9E9E9EAEAEAEAEAEAEAEAEAE8E8E8D5D5D5ADADADD1D1D1F1F1F1F0 - F0F0F4F4F4F8F8F8F9F9F9FCFCFCFEFEFEFFFFFFFEFEFEFDFDFDFCFCFCFBFBFB - FBFBFBFBFBFBF9F9F9F9F9F9FAFAFAFBFBFBFAFAFAFCFCFCFFFFFFFFFFFFFFFF - FFFFFFFFEEEEEEEAEAEAE8E8E8E8E8E8E4E4E4B1B1B1CACACAFBFBFBFDFDFDFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEEEEEEEBEBEBEBEBEBEBEBEB - EAEAEAEAEAEAE9E9E9E9E9E9E8E8E8E7E7E7F9F9F9FFFFFFF8F8F8C6C6C6CDCD - CDEEEEEEF6F6F6F9F9F9F9F9F9F9F9F9FBFBFBFEFEFEFDFDFDFAFAFAFAFAFAF8 - F8F8F7F7F7F7F7F7F7F7F7F4F4F4F2F2F2F4F4F4F5F5F5F6F6F6F5F5F5F6F6F6 - FFFFFFFFFFFFFFFFFFF5F5F5F0F0F0F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFDFDFDFBFBFBFBFBFBF9F9F9F7F7F7F6F6F6F5F5F5F5F5F5FF - FFFFF8F8F8EAEAEAF7F7F7F7F7F7EAEAEAEBEBEBCCCCCCC3C3C3FFFFFFF8F8F8 - FFFFFFFFFFFFE9E9E9E7E7E7E6E6E6CECECEE1E1E1F7F7F7F7F7F7F7F7F7FFFF - FFFFFFFFF9F9F9EAEAEAEAEAEAE9E9E9E8E8E8CCCCCCD7D7D7F5F5F5F7F7F7F7 - F7F7F7F7F7F7F7F7F6F6F6F8F8F8F9F9F9F8F8F8F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F6F6F6F7F7F7FAFAFAFFFFFFFFFFFFF9F9F9FFFF - FFFAFAFAEBEBEBEAEAEAE9E9E9E7E7E7FBFBFBF7F7F7B6B6B6E4E4E4FDFDFDE8 - E8E8D4D4D4D5D5D5E9E9E9E9E9E9E9E9E9EAEAEAEAEAEAEBEBEBEAEAEAE9E9E9 - E9E9E9E9E9E9E7E7E7FCFCFCFFFFFFF9F9F9F9F9F9F9F9F9F5F5F5F6F6F6F9F9 - F9FBFBFBFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF5F5F5F2F2F2DD - DDDDE8E8E8F9F9F9F9F9F9FBFBFBFEFEFEFDFDFDF8F8F8F8F8F8F8F8F8F8F8F8 - F4F4F4F6F6F6FBFBFBFEFEFEFFFFFFFFFFFFFEFEFEFAFAFAF8F8F8F8F8F8FEFE - FEFCFCFCF4F4F4EAEAEAE8E8E8E9E9E9ECECECECECECECECECEDEDEDE8E8E8E6 - E6E6E5E5E5E4E4E4E7E7E7E5E5E5BDBDBDBABABAD4D4D4D6D6D6E4E4E4CCCCCC - D3D3D3F1F1F1F5F5F5FFFFFFFFFFFFFFFFFFFFFFFFEDEDEDD6D6D6D1D1D1E2E2 - E2F5F5F5F6F6F6F5F5F5F3F3F3F5F5F5F7F7F7F7F7F7F8F8F8F8F8F8F8F8F8F8 - F8F8F8F8F8FAFAFAFDFDFDFFFFFFFFFFFFFCFCFCF8F8F8F7F7F7FFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFBFBFBEBEBEBF3F3F3D5D5D5C0C0C0D4D4D4D9D9 - D9CCCCCCE7E7E7F5F5F5F5F5F5F3F3F3F1F1F1F1F1F1F4F4F4F7F7F7F8F8F8FB - FBFBFFFFFFFFFFFFEAEAEAE9E9E9DCDCDCC0C0C0CACACAE4E4E4F3F3F3F6F6F6 - F5F5F5F4F4F4F5F5F5F3F3F3F5F5F5F8F8F8F8F8F8F9F9F9F9F9F9FFFFFFFFFF - FFFFFFFFEBEBEBEBEBEBEBEBEBE9E9E9E4E4E4C1C1C1BFBFBFE1E1E1EFEFEFF0 - F0F0F7F7F7F9F9F9FAFAFAFEFEFEFFFFFFFCFCFCFAFAFAF9F9F9F9F9F9F8F8F8 - F8F8F8F8F8F8F8F8F8F9F9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFF9F9F9E9E9E9E7E7E7E7E7E7E6E6E6E1E1E1B2B2B2CCCCCCFFFFFFFFFFFFFF - FFFFFFFFFFFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFEEEEEEEBEBEBEBEBEBEBEBEB - EBEBEBEAEAEAEAEAEAE9E9E9E8E8E8E9E9E9EDEDEDEDEDEDD9D9D9B1B1B1D0D0 - D0F4F4F4F8F8F8F8F8F8F8F8F8F9F9F9FDFDFDFEFEFEFCFCFCFBFBFBF9F9F9F8 - F8F8F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F8F8F8F8F8F8F6F6F6 - FFFFFFFFFFFFECECECF4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFAF8F8F8F7F7F7F3F3F3F0F0F0F0F0F0FF - FFFFEAEAEAEAEAEAEBEBEBEAEAEAECECECEAEAEACACACAD5D5D5FFFFFFE6E6E6 - D3D3D3E7E7E7E7E7E7E5E5E5E5E5E5E6E6E6CFCFCFDFDFDFF7F7F7F8F8F8FFFF - FFFFFFFFF9F9F9EBEBEBEBEBEBE9E9E9E8E8E8DADADAE3E3E3F4F4F4F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFF7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F8F8F8FFFFFFFFFFFFFEFEFEE7E7E7FFFF - FFFFFFFFEBEBEBEBEBEBE7E7E7E6E6E6E6E6E6D0D0D0A1A1A1E5E5E5ECECECBE - BEBEA7A7A7D1D1D1D5D5D5D5D5D5E9E9E9EAEAEAE9E9E9ECECECEAEAEAE7E7E7 - E7E7E7E7E7E7E7E7E7EAEAEAECECECEAEAEAFFFFFFFFFFFFF7F7F7F6F6F6F8F8 - F8FBFBFBFCFCFCFCFCFCFFFFFFFEFEFEFFFFFFFFFFFFFCFCFCF7F7F7EFEFEFDA - DADAC8C8C8E9E9E9FBFBFBFEFEFEFFFFFFFDFDFDF8F8F8F8F8F8F8F8F8F8F8F8 - F2F2F2F5F5F5FDFDFDFFFFFFFFFFFFFFFFFFFDFDFDFAFAFAFAFAFAFDFDFDFFFF - FFFBFBFBF5F5F5F3F3F3EAEAEAEAEAEAEBEBEBECECECEBEBEBEAEAEAE9E9E9EA - EAEAE7E7E7E6E6E6E7E7E7D3D3D3A7A7A7CCCCCCF4F4F4F6F6F6F3F3F3E4E4E4 - E0E0E0F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1EAEAEAE7E7E7E7E7E7F4F4 - F4F5F5F5F6F6F6F5F5F5F5F5F5F3F3F3F5F5F5F7F7F7F7F7F7F7F7F7F9F9F9FC - FCFCFCFCFCFEFEFEFDFDFDFCFCFCFAFAFAF7F7F7F5F5F5F5F5F5FFFFFFFFFFFF - FFFFFFFFFFFFF8F8F8F8F8F8F4F4F4F0F0F0F2F2F2E8E8E8E9E9E9FFFFFFEAEA - EAD8D8D8E7E7E7F5F5F5F5F5F5F4F4F4F4F4F4F2F2F2F5F5F5F8F8F8F9F9F9FE - FEFEFFFFFFFFFFFFEAEAEADDDDDDC0C0C0CCCCCCE6E6E6F2F2F2F3F3F3F4F4F4 - F4F4F4F3F3F3F2F2F2F3F3F3F7F7F7F9F9F9FBFBFBFCFCFCFFFFFFFFFFFFFFFF - FFFFFFFFEBEBEBEBEBEBEAEAEAE8E8E8D5D5D5B5B5B5D3D3D3F0F0F0F0F0F0F4 - F4F4F8F8F8F9F9F9FBFBFBFFFFFFFFFFFFFCFCFCFBFBFBF8F8F8F7F7F7F7F7F7 - F8F8F8F8F8F8F9F9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBE8E8 - E8E7E7E7E7E7E7E7E7E7E7E7E7E3E3E3DEDEDEB7B7B7CFCFCFFBFBFBFCFCFCFB - FBFBF9F9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEDEDEDEBEBEBDEDEDED0D0D0 - D0D0D0D0D0D0CDCDCDCDCDCDDADADADADADACDCDCDCCCCCCB5B5B5C1C1C1E2E2 - E2F7F7F7F9F9F9F8F8F8FAFAFAFCFCFCFFFFFFFEFEFEFBFBFBF9F9F9F8F8F8F7 - F7F7F7F7F7F5F5F5F8F8F8F9F9F9F7F7F7F7F7F7F7F7F7F9F9F9FFFFFFFFFFFF - FFFFFFFFFFFFDEDEDEFFFFFFFFFFFFFDFDFDFFFFFFFFFFFFF4F4F4FCFCFCFDFD - FDFAFAFAF7F7F7FFFFFFF9F9F9F6F6F6F8F8F8F7F7F7F5F5F5F8F8F8FBFBFBFF - FFFFEAEAEAEAEAEAECECECEBEBEBE9E9E9D9D9D9B7B7B7D4D4D4F3F3F3DFDFDF - D0D0D0F6F6F6F8F8F8E6E6E6E6E6E6E7E7E7D0D0D0E1E1E1F7F7F7F8F8F8FFFF - FFFFFFFFEBEBEBE9E9E9E9E9E9E8E8E8E8E8E8E7E7E7D9D9D9E7E7E7F7F7F7F7 - F7F7F7F7F7F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFFBFBFBF7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7FAFAFAFFFFFFFFFFFFEDEDEDE6E6E6FFFF - FFFFFFFFEAEAEAEBEBEBE9E9E9E8E8E8D6D6D6ABABABBABABAE5E5E5E6E6E6D0 - D0D0D1D1D1E5E5E5E4E4E4E5E5E5D5D5D5D5D5D5EAEAEAEDEDEDEAEAEAE7E7E7 - E7E7E7E7E7E7E9E9E9EAEAEAE9E9E9E8E8E8F9F9F9EAEAEAE1E1E1F2F2F2F6F6 - F6F8F8F8F8F8F8F8F8F8FCFCFCFCFCFCFFFFFFFFFFFFFBFBFBEFEFEFE9E9E9C3 - C3C3BFBFBFE9E9E9FDFDFDFFFFFFFFFFFFFAFAFAF8F8F8F8F8F8F8F8F8F8F8F8 - F2F2F2F5F5F5FFFFFFFFFFFFFFFFFFFDFDFDFAFAFAFBFBFBFEFEFEFFFFFFFCFC - FCF6F6F6F4F4F4F4F4F4FFFFFFF6F6F6EBEBEBEDEDEDECECECEAEAEAEAEAEAEC - ECECEAEAEAE9E9E9E9E9E9D5D5D5CBCBCBE1E1E1FAFAFAFBFBFBF6F6F6F2F2F2 - F0F0F0F4F4F4FFFFFFFFFFFFFCFCFCF1F1F1EEEEEEE8E8E8E7E7E7E7E7E7E7E7 - E7F5F5F5F6F6F6F6F6F6F7F7F7F4F4F4F5F5F5F7F7F7F7F7F7F7F7F7F9F9F9FB - FBFBF9F9F9F9F9F9F8F8F8F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5FFFFFFFFFFFF - F8F8F8EAEAEAEAEAEAEAEAEAEAEAEAD2D2D2E2E2E2FDFDFDFFFFFFFFFFFFF8F8 - F8DCDCDCE7E7E7F5F5F5F5F5F5F5F5F5F4F4F4F2F2F2F7F7F7F9F9F9F8F8F8FC - FCFCFFFFFFFFFFFFDDDDDDC0C0C0CCCCCCE7E7E7F3F3F3F3F3F3F1F1F1F2F2F2 - F3F3F3F2F2F2F4F4F4F7F7F7F9F9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFECECECEBEBEBEAEAEAE8E8E8E6E6E6C9C9C9C5C5C5E4E4E4F4F4F4F4F4F4F7 - F7F7F9F9F9FAFAFAFDFDFDFFFFFFFCFCFCFBFBFBF8F8F8F5F5F5F5F5F5F7F7F7 - F7F7F7F9F9F9FCFCFCFFFFFFFFFFFFFCFCFCE6E6E6E4E4E4D2D2D2BCBCBCBCBC - BCBCBCBCD2D2D2D2D2D2BABABACACACACDCDCDA7A7A7D0D0D0F7F7F7F8F8F8F9 - F9F9FAFAFAFFFFFFFFFFFFFFFFFFFDFDFDEDEDEDDDDDDDCECECEBFBFBFCACACA - D5D5D5D2D2D2D1D1D1D1D1D1DEDEDEC8C8C8C6C6C6D4D4D4D2D2D2E4E4E4F6F6 - F6F8F8F8F9F9F9F9F9F9FBFBFBFEFEFEFFFFFFFEFEFEFBFBFBF9F9F9F9F9F9F8 - F8F8F6F6F6F5F5F5F6F6F6F4F4F4F3F3F3F4F4F4F4F4F4F7F7F7FFFFFFFFFFFF - FFFFFFF9F9F9ECECECFAFAFAFCFCFCF0F0F0FFFFFFFFFFFFFDFDFDFEFEFEF5F5 - F5EDEDEDEAEAEAE6E6E6E4E4E4E4E4E4F4F4F4F8F8F8F9F9F9FDFDFDFFFFFFFF - FFFFEEEEEEEFEFEFEEEEEEEDEDEDEAEAEAC9C9C9C5C5C5E2E2E2F0F0F0F0F0F0 - F3F3F3FFFFFFFFFFFFE7E7E7E7E7E7E7E7E7E7E7E7D0D0D0E2E2E2FFFFFFFFFF - FFFFFFFFF1F1F1ECECECE9E9E9E9E9E9E7E7E7E6E6E6DCDCDCF5F5F5FFFFFFF7 - F7F7FFFFFFFFFFFFFFFFFFFFFFFFFAFAFAEDEDEDEDEDEDECECECF7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F9F9F9FFFFFFFFFFFFFFFFFFEBEBEBE9E9E9FFFF - FFFFFFFFECECECECECECEBEBEBEBEBEBC8C8C8C1C1C1E7E7E7FBFBFBFBFBFBFA - FAFAF9F9F9F7F7F7F8F8F8F8F8F8E4E4E4F8F8F8FDFDFDEDEDEDEAEAEAE7E7E7 - E7E7E7E7E7E7E9E9E9E9E9E9E7E7E7E7E7E7E7E7E7D4D4D4DFDFDFF1F1F1F6F6 - F6F8F8F8F8F8F8F8F8F8FAFAFAF9F9F9FFFFFFFFFFFFF2F2F2E9E9E9E6E6E6C0 - C0C0D1D1D1F8F8F8FEFEFEFFFFFFFAFAFAF8F8F8F8F8F8F8F8F8F8F8F8F5F5F5 - F0F0F0F7F7F7FFFFFFFFFFFFFCFCFCF9F9F9F8F8F8FBFBFBFEFEFEFCFCFCF7F7 - F7F4F4F4F4F4F4F4F4F4FEFEFEF7F7F7EBEBEBEDEDEDECECECEAEAEAEAEAEAEC - ECECEBEBEBE8E8E8E8E8E8D3D3D3BABABAE2E2E2FCFCFCFAFAFAFAFAFAF8F8F8 - F5F5F5F8F8F8F8F8F8F7F7F7EAEAEAEDEDEDEAEAEAE7E7E7E8E8E8E7E7E7E6E6 - E6D8D8D8E6E6E6F5F5F5F6F6F6F5F5F5F3F3F3F5F5F5F7F7F7F7F7F7F7F7F7F7 - F7F7F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5FFFFFFFFFFFF - F9F9F9EAEAEAEAEAEAEAEAEAE9E9E9D5D5D5FBFBFBFFFFFFFFFFFFFFFFFFEAEA - EADDDDDDF5F5F5FFFFFFF5F5F5F5F5F5F4F4F4F4F4F4F7F7F7F7F7F7F6F6F6F9 - F9F9FFFFFFEDEDEDC0C0C0CCCCCCE7E7E7F4F4F4F4F4F4F4F4F4F1F1F1F3F3F3 - F4F4F4F3F3F3F5F5F5FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDE9E9 - E9E9E9E9E6E6E6E6E6E6E6E6E6D7D7D7BDBDBDD7D7D7F4F4F4F8F8F8F5F5F5F7 - F7F7FAFAFAFEFEFEFFFFFFFFFFFFFDFDFDFBFBFBF5F5F5F4F4F4F5F5F5F7F7F7 - F8F8F8FBFBFBFFFFFFFFFFFFFFFFFFE6E6E6CFCFCFB7B7B7A1A1A1B2B2B2C8C8 - C8C8C8C8DCDCDCB7B7B7AFAFAFDCDCDCBDBDBDBCBCBCE4E4E4FCFCFCFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFEBEBEBEBEBEBEBEBEBCFCFCFCBCBCBD9D9D9E3E3E3 - EAEAEAEDEDEDF0F0F0F0F0F0F0F0F0E6E6E6E6E6E6F2F2F2F2F2F2F5F5F5F7F7 - F7F6F6F6F8F8F8F9F9F9FBFBFBFFFFFFFFFFFFFFFFFFF8F8F8F8F8F8F8F8F8F6 - F6F6F3F3F3F1F1F1F3F3F3F3F3F3F4F4F4F5F5F5F6F6F6F6F6F6FFFFFFFFFFFF - EDEDEDECECECECECECEDEDEDEDEDEDEEEEEEF4F4F4F8F8F8F8F8F8F3F3F3ECEC - ECE8E8E8E8E8E8E4E4E4E4E4E4DEDEDED3D3D3E6E6E6F4F4F4F5F5F5F5F5F5FF - FFFFEDEDEDEDEDEDECECECECECECEAEAEADADADAE4E4E4EEEEEEF1F1F1F3F3F3 - F2F2F2FFFFFFF8F8F8E9E9E9E7E7E7E7E7E7E7E7E7B2B2B2DFDFDFFFFFFFFFFF - FFFFFFFFEDEDEDE8E8E8E7E7E7E9E9E9E7E7E7E7E7E7E9E9E9F8F8F8EDEDEDEB - EBEBFFFFFFFFFFFFFFFFFFFBFBFBEDEDEDEDEDEDECECECEBEBEBEDEDEDF8F8F8 - F7F7F7F7F7F7F7F7F7F7F7F7FFFFFFFFFFFFFFFFFFFAFAFAECECECEAEAEAF9F9 - F9F8F8F8ECECECECECECEAEAEAD9D9D9B5B5B5D4D4D4F6F6F6F9F9F9F9F9F9F9 - F9F9F9F9F9F8F8F8F8F8F8F8F8F8F8F8F8FFFFFFFFFFFFEFEFEFEBEBEBE7E7E7 - E7E7E7E7E7E7E9E9E9E7E7E7E7E7E7E7E7E7E7E7E7E6E6E6D3D3D3DFDFDFF3F3 - F3F7F7F7F8F8F8F8F8F8F8F8F8F8F8F8FFFFFFFFFFFFECECECE7E7E7E7E7E7BC - BCBCCECECEF8F8F8FAFAFAFAFAFAF8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F3F3F3 - F3F3F3F9F9F9FFFFFFFCFCFCF8F8F8F7F7F7F7F7F7FBFBFBFCFCFCF8F8F8F5F5 - F5F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4DEDEDEDFDFDFECECECEAEAEAEAEAEAEC - ECECEAEAEAE8E8E8E8E8E8BFBFBFB6B6B6E5E5E5FCFCFCFDFDFDFDFDFDF9F9F9 - F7F7F7F9F9F9F8F8F8FFFFFFFFFFFFFDFDFDF0F0F0ECECECEAEAEAE9E9E9E7E7 - E7D5D5D5E2E2E2F4F4F4F4F4F4F3F3F3F3F3F3F5F5F5F7F7F7F7F7F7F7F7F7F6 - F6F6F7F7F7F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5FFFFFFFCFCFC - EDEDEDEBEBEBEBEBEBEBEBEBEBEBEBECECECFFFFFFFFFFFFFFFFFFFAFAFAE6E6 - E6E8E8E8F7F7F7F8F8F8F7F7F7F8F8F8F7F7F7F6F6F6F5F5F5F4F4F4F6F6F6F8 - F8F8F8F8F8ECECECD9D9D9E6E6E6F4F4F4F4F4F4F4F4F4F4F4F4F1F1F1F4F4F4 - F5F5F5F5F5F5FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFEBEBEBE9E9E9E9E9E9E9E9 - E9E9E9E9E2E2E2E1E1E1D3D3D3B5B5B5CACACAE8E8E8F6F6F6FFFFFFFFFFFFF7 - F7F7FBFBFBFFFFFFFFFFFFFEFEFEF9F9F9F7F7F7F4F4F4F3F3F3F4F4F4F7F7F7 - F8F8F8FFFFFFFFFFFFFFFFFFFBFBFBE1E1E1B6B6B6B4B4B4CACACADEDEDEF3F3 - F3F3F3F3F3F3F3E0E0E0DFDFDFF4F4F4E4E4E4E4E4E4F7F7F7FFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFCFCFCDCDCDCCCCCCCDCDCDCCFCFCFD9D9D9F2F2F2ECECEC - EEEEEEF5F5F5F8F8F8F8F8F8F8F8F8F8F8F8F7F7F7F7F7F7F8F8F8F9F9F9F8F8 - F8F5F5F5F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFEEEEEEE7E7E7F4F4F4F4F4F4F2 - F2F2F1F1F1F2F2F2F5F5F5F8F8F8F9F9F9F8F8F8F8F8F8F7F7F7FFFFFFFFFFFF - EDEDEDEBEBEBEBEBEBECECECEDEDEDEDEDEDF2F2F2F0F0F0EEEEEEECECECE8E8 - E8E6E6E6E4E4E4E1E1E1E1E1E1CECECEB1B1B1D7D7D7F5F5F5F5F5F5F5F5F5FF - FFFFEAEAEAE7E7E7E4E4E4E4E4E4D1D1D1BEBEBEBFBFBFE1E1E1F4F4F4F4F4F4 - F0F0F0EDEDEDF1F1F1E5E5E5CBCBCBB4B4B4B2B2B28C8C8CE1E1E1FFFFFFFFFF - FFE7E7E7E6E6E6E4E4E4E6E6E6E9E9E9E7E7E7E6E6E6E9E9E9EBEBEBCFCFCFD3 - D3D3FDFDFDFCFCFCEEEEEEEDEDEDEDEDEDECECECECECECEDEDEDEEEEEEEDEDED - F7F7F7F7F7F7F7F7F7F7F7F7FFFFFFFFFFFFF8F8F8EBEBEBEAEAEAEAEAEAE9E9 - E9E9E9E9EBEBEBEAEAEAE8E8E8C8C8C8C3C3C3E5E5E5F6F6F6F7F7F7F8F8F8F8 - F8F8F8F8F8F8F8F8F8F8F8F8F8F8F9F9F9FFFFFFFFFFFFF0F0F0EBEBEBE9E9E9 - E7E7E7E7E7E7E7E7E7E8E8E8E7E7E7E6E6E6E6E6E6E4E4E40000FFC9C9C9EFEF - EFF6F6F6F8F8F8F8F8F8F6F6F6F7F7F7FFFFFFFFFFFFEAEAEAE7E7E7E7E7E7D0 - D0D0E2E2E2F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F5F5F5F3F3F3F1F1F1 - F5F5F5FCFCFCFEFEFEFBFBFBF8F8F8F8F8F8F8F8F8FCFCFCFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFF3F3F3F2F2F2F2F2F2E2E2E2E1E1E1E9E9E9EBEBEBEAEAEAEB - EBEBE9E9E9E8E8E8D8D8D8AEAEAECECECEF8F8F8FFFFFFFEFEFEFDFDFDFBFBFB - F8F8F8F9F9F9F8F8F8FFFFFFFFFFFFFFFFFFF2F2F2ECECECEAEAEAE8E8E8E7E7 - E7E4E4E4E5E5E5FFFFFFFFFFFFF4F4F4F5F5F5F5F5F5F4F4F4F6F6F6F4F4F4F4 - F4F4F6F6F6F6F6F6F1F1F1F1F1F1F3F3F3F3F3F3F3F3F3F4F4F4F5F5F5FFFFFF - FCFCFCECECECEBEBEBEBEBEBEBEBEBEBEBEBE9E9E9E7E7E7E7E7E7E6E6E6E5E5 - E5E7E7E7EAEAEAEAEAEAECECECF7F7F7F6F6F6F4F4F4F3F3F3F1F1F1F1F1F1F5 - F5F5F9F9F9F8F8F8F5F5F5F4F4F4F3F3F3F3F3F3F4F4F4F4F4F4FFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEAEAEAE9E9E9EAEAEAECECECECEC - ECEAEAEAE1E1E1D0D0D0B3B3B3C6C6C6EBEBEBFFFFFFFFFFFFFFFFFFFFFFFFF9 - F9F9FDFDFDFFFFFFFCFCFCF7F7F7F4F4F4F4F4F4F3F3F3F2F2F2F5F5F5F7F7F7 - F7F7F7FFFFFFFFFFFFFBFBFBE4E4E4DEDEDEB7B7B7CCCCCCF1F1F1F4F4F4F7F7 - F7F7F7F7F7F7F7F7F7F7F4F4F4F4F4F4F5F5F5F5F5F5F5F5F5FFFFFFFFFFFFF7 - F7F7EBEBEBEBEBEBEBEBEBCCCCCCC8C8C8F6F6F6EEEEEEE9E9E9F1F1F1F1F1F1 - F5F5F5F8F8F8F7F7F7F7F7F7F8F8F8F8F8F8F9F9F9FCFCFCFCFCFCFCFCFCF9F9 - F9FAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9E8E8E8F6F6F6F5F5F5F5 - F5F5F3F3F3F4F4F4F8F8F8F9F9F9F9F9F9FBFBFBFBFBFBF8F8F8FFFFFFFFFFFF - EDEDEDEBEBEBEBEBEBECECECEDEDEDEFEFEFF1F1F1EDEDEDEAEAEAEAEAEAE6E6 - E6E1E1E1E1E1E1E1E1E1D3D3D3ACACACBFBFBFE9E9E9F9F9F9F9F9F9F9F9F9FF - FFFFC7C7C7C5C5C5BFBFBFC0C0C0AAAAAABABABAD1D1D1E5E5E5F4F4F4F0F0F0 - EBEBEBEEEEEEF3F3F3F5F5F5B3B3B3B0B0B0C3C3C3C1C1C1FCFCFCFFFFFFFDFD - FDE5E5E5E3E3E3E1E1E1E4E4E4E6E6E6E6E6E6E6E6E6E8E8E8EBEBEBD8D8D8DE - DEDEF0F0F0F8F8F8EDEDEDEDEDEDECECECEAEAEAEBEBEBEDEDEDEDEDEDECECEC - DEDEDEEAEAEAF7F7F7FFFFFFFFFFFFFFFFFFECECECECECECEDEDEDECECECE7E7 - E7E9E9E9EBEBEBE9E9E9D9D9D9BABABAD7D7D7F6F6F6F8F8F8F8F8F8F8F8F8F8 - F8F8F8F8F8F8F8F8F8F8F8F8F8F8FAFAFAF9F9F9FFFFFFFFFFFFE8E8E8E7E7E7 - E6E6E6E7E7E7E7E7E7E9E9E9E7E7E7E4E4E4E5E5E5E5E5E50000FF0000FFEEEE - EEF6F6F6F8F8F8F5F5F5F5F5F5F7F7F7FFFFFFFFFFFFE8E8E8E8E8E8E6E6E6E3 - E3E3E6E6E6F8F8F8F7F7F7F7F7F7F5F5F5F3F3F3F3F3F3F1F1F1F3F3F3F5F5F5 - F8F8F8FDFDFDFDFDFDF9F9F9F8F8F8F8F8F8F9F9F9FEFEFEFFFFFFFFFFFFF7F7 - F7FFFFFFF7F7F7DFDFDFEEEEEEF0F0F0EAEAEAECECECF4F4F4DADADAC8C8C8C8 - C8C8C6C6C6C4C4C4B3B3B3BDBDBDE2E2E2FBFBFBFEFEFEFEFEFEFEFEFEFCFCFC - FAFAFAFBFBFBFFFFFFFFFFFFFFFFFFF4F4F4EDEDEDE9E9E9E9E9E9E8E8E8E7E7 - E7E5E5E5E6E6E6F6F6F6F7F7F7F4F4F4F3F3F3EDEDEDEEEEEEF3F3F3F3F3F3F4 - F4F4F4F4F4F3F3F3EFEFEFEEEEEEEDEDEDECECECEEEEEEF4F4F4F5F5F5FFFFFF - FFFFFFEBEBEBE9E9E9E9E9E9E9E9E9E9E9E9E7E7E7E9E9E9EAEAEAE9E9E9E7E7 - E7E9E9E9EAEAEAEAEAEAE9E9E9DDDDDDE8E8E8F0F0F0EEEEEEEEEEEEF1F1F1F5 - F5F5F9F9F9F8F8F8F7F7F7F9F9F9F6F6F6F5F5F5F5F5F5FFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDEBEBEBE9E9E9E9E9E9EAEAEAECECECEAEA - EAE6E6E6CFCFCFADADADC2C2C2E9E9E9FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDD9 - D9D9EAEAEAFFFFFFFBFBFBF6F6F6F5F5F5F4F4F4F4F4F4F4F4F4F7F7F7F7F7F7 - F7F7F7FFFFFFFFFFFFE7E7E7E2E2E2DEDEDEBEBEBED1D1D1F4F4F4F5F5F5F7F7 - F7F7F7F7F5F5F5F1F1F1EFEFEFF1F1F1F4F4F4F7F7F7F6F6F6F7F7F7F5F5F5D7 - D7D7C5C5C5C5C5C5C5C5C5B6B6B6E9E9E9FFFFFFFFFFFFF1F1F1F7F7F7F3F3F3 - F5F5F5F7F7F7F5F5F5F7F7F7F8F8F8F8F8F8F9F9F9FCFCFCFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF7F7F7F8F8F8F7F7F7F4 - F4F4F3F3F3F5F5F5F9F9F9F9F9F9F9F9F9FCFCFCFDFDFDF9F9F9FFFFFFFFFFFF - ECECECEBEBEBEBEBEBEDEDEDEDEDEDEFEFEFEEEEEEEBEBEBE9E9E9E9E9E9E3E3 - E3DFDFDFE2E2E2E6E6E6C2C2C2BABABAE2E2E2F8F8F8F9F9F9F9F9F9F9F9F9FF - FFFFD5D5D5D3D3D3D1D1D1D2D2D2D3D3D3E5E5E5F7F7F7F7F7F7F4F4F4EEEEEE - EFEFEFF7F7F7FCFCFCFBFBFBE4E4E4E4E4E4F6F6F6FAFAFAFFFFFFFFFFFFFDFD - FDE3E3E3DFDFDFE1E1E1E5E5E5E4E4E4E4E4E4E6E6E6E9E9E9EBEBEBD6D6D6C8 - C8C8E7E7E7F7F7F7F7F7F7ECECECECECECEBEBEBF0F0F0F2F2F2F0F0F0F0F0F0 - DFDFDFF4F4F4FFFFFFFFFFFFFFFFFFFEFEFEECECECEDEDEDEEEEEEECECECE8E8 - E8E8E8E8EAEAEAEAEAEACCCCCCC8C8C8E7E7E7F7F7F7F8F8F8F8F8F8F8F8F8F8 - F8F8F8F8F8F8F8F8F8F8F8F8F8F8F9F9F9F8F8F8FFFFFFFFFFFFE7E7E7E6E6E6 - E6E6E6E7E7E7E7E7E7E7E7E7E6E6E6E6E6E6E6E6E6E4E4E40000FF0000FFF0F0 - F0F5F5F5F6F6F6F6F6F6F7F7F7FFFFFFFFFFFFFFFFFFE8E8E8E8E8E8E4E4E4E4 - E4E4E8E8E8D5D5D5E1E1E1F3F3F3F0F0F0F2F2F2F5F5F5F5F5F5F8F8F8F9F9F9 - FBFBFBFFFFFFFDFDFDF8F8F8F8F8F8F8F8F8F9F9F9FFFFFFFFFFFFFFFFFFEAEA - EAFBFBFBD6D6D6CCCCCCF0F0F0F0F0F0EAEAEAF0F0F0F7F7F7E7E7E7D5D5D5D5 - D5D5D3D3D3D3D3D3D5D5D5E1E1E1F3F3F3FAFAFAFCFCFCFEFEFEFEFEFEFCFCFC - FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFEEEEEEE9E9E9E7E7E7E9E9E9E8E8E8E6E6 - E6E4E4E4E6E6E6E8E8E8EAEAEADCDCDCE2E2E2EAEAEAEEEEEEF3F3F3F4F4F4F2 - F2F2F4F4F4F5F5F5F5F5F5F5F5F5F4F4F4F2F2F2F4F4F4F6F6F6F7F7F7FFFFFF - FFFFFFECECECE9E9E9E9E9E9E9E9E9E9E9E9E7E7E7E9E9E9EAEAEAE8E8E8E8E8 - E8EAEAEAEAEAEAEAEAEAE9E9E9CFCFCFD7D7D7E9E9E9ECECECF0F0F0F4F4F4F8 - F8F8FAFAFAF8F8F8F9F9F9FDFDFDFBFBFBF8F8F8FFFFFFFFFFFFFFFFFFF8F8F8 - E9E9E9E8E8E8E8E8E8E9E9E9EAEAEAE9E9E9E8E8E8E9E9E9E9E9E9EAEAEAE4E4 - E4E1E1E1BCBCBCB7B7B7E4E4E4F8F8F8FFFFFFFFFFFFFFFFFFEEEEEEEAEAEAC6 - C6C6D9D9D9FFFFFFFBFBFBF7F7F7F5F5F5F5F5F5F5F5F5F7F7F7F7F7F7F9F9F9 - FFFFFFFFFFFFFFFFFFE9E9E9E3E3E3E2E2E2C6C6C6D7D7D7F5F5F5F5F5F5F7F7 - F7F3F3F3F0F0F0EEEEEEF1F1F1F5F5F5F8F8F8F7F7F7F7F7F7F8F8F8FFFFFFFF - FFFFE9E9E9D8D8D8E8E8E8FDFDFDFFFFFFFFFFFFFFFFFFF2F2F2ECECECFFFFFF - FFFFFFF7F7F7F7F7F7F8F8F8F9F9F9F8F8F8FAFAFAFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFCFCFCEEEEEEEDEDEDEEEEEEEDEDEDF6F6F6F5F5F5F3 - F3F3F3F3F3F7F7F7F8F8F8F9F9F9F9F9F9FBFBFBFBFBFBF9F9F9FFFFFFFFFFFF - F9F9F9EDEDEDECECECEDEDEDEEEEEEEFEFEFECECECE9E9E9E9E9E9E7E7E7E2E2 - E2D6D6D6CACACAC6C6C6ACACACCECECEF4F4F4F9F9F9F9F9F9F9F9F9F9F9F9FF - FFFFF4F4F4F4F4F4F5F5F5F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F4F4F4F2F2F2 - F7F7F7FBFBFBFCFCFCFBFBFBFAFAFAFCFCFCFDFDFDFFFFFFFFFFFFFFFFFFE7E7 - E7E5E5E5E4E4E4E5E5E5E6E6E6E4E4E4E5E5E5E8E8E8E8E8E8EAEAEAC7C7C7C6 - C6C6E9E9E9F7F7F7F8F8F8FFFFFFFCFCFCEEEEEEF4F4F4F2F2F2EFEFEFEDEDED - EAEAEAF5F5F5FFFFFFFFFFFFFFFFFFEFEFEFECECECECECECECECECEAEAEAE7E7 - E7E7E7E7E9E9E9EAEAEAC9C9C9D5D5D5F5F5F5F7F7F7F7F7F7F8F8F8F6F6F6F7 - F7F7F8F8F8F8F8F8F8F8F8F8F8F8F9F9F9F9F9F9FFFFFFFDFDFDE7E7E7E6E6E6 - E7E7E7E7E7E7E6E6E6E7E7E7E7E7E7E6E6E6E4E4E4D1D1D10000FF0000FF0000 - FFF6F6F6F7F7F7F9F9F9FFFFFFFFFFFFFFFFFFFFFFFFEAEAEAE8E8E8E4E4E4E6 - E6E6E9E9E9D5D5D5E2E2E2F4F4F4F4F4F4F8F8F8FBFBFBF9F9F9F9F9F9FBFBFB - FFFFFFFFFFFFFCFCFCF9F9F9F8F8F8F9F9F9FBFBFBFFFFFFFFFFFFF8F8F8EAEA - EAEAEAEAC3C3C3CDCDCDF2F2F2FFFFFFFEFEFEFFFFFFFFFFFFFFFFFFF6F6F6F5 - F5F5F4F4F4F5F5F5F7F7F7F4F4F4F7F7F7FBFBFBFBFBFBFDFDFDFEFEFEFFFFFF - FFFFFFFFFFFFFFFFFFFCFCFCEAEAEAE9E9E9E7E7E7E7E7E7E9E9E9E7E7E7E5E5 - E5E4E4E4E6E6E6E9E9E9E8E8E8CCCCCCD1D1D1EAEAEAEEEEEEF4F4F4F4F4F4F4 - F4F4F7F7F7FAFAFAFBFBFBF9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFCFCFCFFFFFF - FFFFFFECECECE9E9E9E9E9E9E9E9E9E9E9E9E7E7E7E9E9E9EAEAEAE8E8E8E9E9 - E9EAEAEAEAEAEAE9E9E9E8E8E8CACACAD0D0D0E9E9E9EFEFEFF4F4F4F7F7F7FB - FBFBFCFCFCFCFCFCFCFCFCFDFDFDF9F9F9F6F6F6FFFFFFFFFFFFF9F9F9E8E8E8 - E6E6E6E6E6E6E7E7E7E9E9E9EAEAEAE9E9E9E9E9E9E8E8E8E6E6E6E7E7E7E5E5 - E5CECECEA3A3A3CCCCCCF5F5F5F9F9F9FCFCFCFDFDFDEFEFEFEAEAEAD7D7D7B3 - B3B3D8D8D8FBFBFBF9F9F9F7F7F7F7F7F7F7F7F7F8F8F8F7F7F7F7F7F7FBFBFB - FFFFFFFFFFFFFBFBFBEAEAEAE7E7E7E7E7E7D9D9D9E4E4E4F4F4F4F5F5F5F7F7 - F7F4F4F4F3F3F3F4F4F4F8F8F8FAFAFAFAFAFAF9F9F9FBFBFBF9F9F9FFFFFFFF - FFFFFFFFFFFBFBFBFFFFFFFFFFFFFFFFFFFFFFFFEDEDEDECECECE8E8E8E5E5E5 - D1D1D1E2E2E2F6F6F6F9F9F9FAFAFAF9F9F9FCFCFCFFFFFFFFFFFFFBFBFBECEC - ECEAEAEAEAEAEAECECECEDEDEDEEEEEEEEEEEEEEEEEEEBEBEBDEDEDEE8E8E8F4 - F4F4F5F5F5F7F7F7F7F7F7F8F8F8F9F9F9FBFBFBFEFEFEFCFCFCFFFFFFFFFFFF - F8F8F8EBEBEBEAEAEAEDEDEDEDEDEDEDEDEDEBEBEBE9E9E9E7E7E7D7D7D7C6C6 - C6B8B8B8C1C1C1CDCDCDD0D0D0E4E4E4F8F8F8F9F9F9F9F9F9F9F9F9F9F9F9FF - FFFFF4F4F4F6F6F6F5F5F5F4F4F4F6F6F6F7F7F7F7F7F7F7F7F7F5F5F5F7F7F7 - F8F8F8FDFDFDFFFFFFFFFFFFFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7 - E7E7E7E7E7E7E7E6E6E6E4E4E4E2E2E2E6E6E6E8E8E8E7E7E7E9E9E9C8C8C8D7 - D7D7F7F7F7FAFAFAFBFBFBFFFFFFFFFFFFEEEEEEF1F1F1EDEDEDE9E9E9E7E7E7 - E7E7E7E6E6E6EAEAEAF0F0F0F0F0F0EDEDEDEBEBEBEBEBEBEBEBEBE9E9E9E6E6 - E6E5E5E5E7E7E7E7E7E7C8C8C8D8D8D8F7F7F7F7F7F7F8F8F8F9F9F9F7F7F7F8 - F8F8F9F9F9F8F8F8F9F9F9FAFAFAFBFBFBFAFAFAFAFAFAFFFFFFFBFBFBE6E6E6 - E4E4E4D3D3D3C2C2C2C3C3C3BCBCBCBDBDBDC1C1C1AFAFAF0000FF0000FF0000 - FF0000FFF9F9F9FFFFFFFFFFFFFFFFFFFFFFFFEEEEEEECECECE8E8E8E6E6E6E7 - E7E7E9E9E9E9E9E9E9E9E9F5F5F5F8F8F8FCFCFCFBFBFBF9F9F9FBFBFBFFFFFF - FFFFFFFDFDFDFAFAFAF8F8F8F8F8F8FBFBFBFCFCFCFCFCFCFCFCFCDADADADADA - DAEAEAEAD4D4D4DFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF5F5F5F5 - F5F5F7F7F7F7F7F7F8F8F8F7F7F7F9F9F9FCFCFCFDFDFDFEFEFEFEFEFEFFFFFF - FFFFFFFFFFFFFCFCFCE7E7E7E3E3E3E4E4E4E7E7E7E7E7E7E8E8E8E7E7E7E4E4 - E4E4E4E4E6E6E6E7E7E7E5E5E5CBCBCBD1D1D1ECECECF0F0F0F5F5F5F5F5F5F5 - F5F5F9F9F9FBFBFBF9F9F9F8F8F8F9F9F9F9F9F9FBFBFBFFFFFFFFFFFFFFFFFF - FFFFFFE9E9E9E7E7E7E7E7E7E7E7E7E8E8E8E7E7E7E9E9E9EAEAEAE8E8E8E9E9 - E9EAEAEAE8E8E8E8E8E8D9D9D9B7B7B7D3D3D3F0F0F0F3F3F3F5F5F5F7F7F7F8 - F8F8FBFBFBFBFBFBFBFBFBFAFAFAF7F7F7F7F7F7FFFFFFFFFFFFFBFBFBE8E8E8 - E6E6E6E6E6E6E9E9E9EAEAEAEAEAEAE9E9E9E8E8E8E7E7E7E7E7E7E7E7E7E5E5 - E5BCBCBCBABABAE5E5E5FAFAFAFCFCFCFDFDFDFBFBFBFFFFFFFBFBFBC6C6C6C1 - C1C1E5E5E5F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F8F8F8F7F7F7F7F7F7FDFDFD - FFFFFFFFFFFFE8E8E8E9E9E9E8E8E8E9E9E9E7E7E7E9E9E9F2F2F2F4F4F4F7F7 - F7F7F7F7FFFFFFFFFFFFFFFFFFFBFBFBFBFBFBFDFDFDFFFFFFFBFBFBFFFFFFFF - FFFFEDEDEDEDEDEDFFFFFFFFFFFFF0F0F0ECECECEAEAEAEAEAEAE4E4E4D0D0D0 - C8C8C8DFDFDFF7F7F7F8F8F8F8F8F8F9F9F9F9F9F9FDFDFDFFFFFFF9F9F9EBEB - EBE9E9E9E9E9E9EAEAEAEBEBEBECECECECECECEDEDEDEDEDEDE1E1E1EAEAEAF3 - F3F3F1F1F1F3F3F3F6F6F6F8F8F8F9F9F9FDFDFDFEFEFEFCFCFCFFFFFFFCFCFC - F4F4F4E1E1E1D7D7D7E1E1E1ECECECECECECEAEAEAE8E8E8E4E4E4C7C7C7BFBF - BFD2D2D2E1E1E1EEEEEEF3F3F3F7F7F7F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FF - FFFFF4F4F4F6F6F6F5F5F5F5F5F5F7F7F7F5F5F5F5F5F5F6F6F6F7F7F7FFFFFF - FFFFFFFCFCFCFDFDFDFDFDFDFDFDFDFEFEFEFCFCFCFCFCFCFFFFFFFFFFFFE9E9 - E9E6E6E6E4E4E4E3E3E3E2E2E2E4E4E4E8E8E8E7E7E7E7E7E7EAEAEACACACAD8 - D8D8F8F8F8FBFBFBFBFBFBFFFFFFFFFFFFEEEEEEF0F0F0ECECECE8E8E8E7E7E7 - E6E6E6E3E3E3E5E5E5EBEBEBECECECE9E9E9D9D9D9C8C8C8C8C8C8C8C8C8C5C5 - C5CACACACECECECFCFCFC1C1C1E0E0E0FCFCFCFFFFFFFFFFFFF7F7F7F7F7F7F8 - F8F8FAFAFAFAFAFAFBFBFBFAFAFAF9F9F9F9F9F9FAFAFAFFFFFFFFFFFFDFDFDF - CECECEA8A8A8B5B5B5CCCCCCC6C6C6CFCFCFD1D1D1CACACA0000FF0000FF0000 - FF0000FFFFFFFFFFFFFFFFFFFFFFFFFFEEEEEEEFEFEFECECECE8E8E8E8E8E8E6 - E6E6E8E8E8E8E8E8D1D1D1B8B8B8E4E4E4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FDFDFDF9F9F9F8F8F8F8F8F8F9F9F9FBFBFBFBFBFBFCFCFCFDFDFDE9E9E9E6E6 - E6E7E7E7E3E3E3E4E4E4FFFFFFFFFFFFF8F8F8FDFDFDFFFFFFEDEDEDD9D9D9E8 - E8E8F8F8F8F8F8F8F9F9F9F8F8F8F8F8F8F9F9F9FAFAFAFBFBFBFDFDFDFFFFFF - FFFFFFDADADAC6C6C6C0C0C0C1C1C1D7D7D7E7E7E7E7E7E7E7E7E7E4E4E4E1E1 - E1E3E3E3E7E7E7E9E9E9E6E6E6C8C8C8CECECEECECECF3F3F3F5F5F5F4F4F4F5 - F5F5F9F9F9FAFAFAFAFAFAFBFBFBFBFBFBFBFBFBFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFE9E9E9E9E9E9E9E9E9E9E9E9EBEBEBEBEBEBEBEBEBEAEAEAE9E9E9E9E9 - E9E9E9E9E9E9E9E9E9E9CACACAC4C4C4E3E3E3F3F3F3F5F5F5F8F8F8F7F7F7F9 - F9F9FBFBFBF8F8F8F7F7F7F8F8F8F6F6F6F5F5F5FFFFFFFFFFFFF9F9F9E8E8E8 - E6E6E6E2E2E2E7E7E7EAEAEAE9E9E9E7E7E7E8E8E8E8E8E8E8E8E8E8E8E8D5D5 - D5A9A9A9CECECEF7F7F7F9F9F9FCFCFCFBFBFBF9F9F9FFFFFFEFEFEFB6B6B6D5 - D5D5F6F6F6F5F5F5F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F8F8F8FBFBFBFFFFFF - FFFFFFFFFFFFEAEAEAEAEAEAE8E8E8EAEAEAE9E9E9E9E9E9EAEAEAFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFEDEDEDEDEDEDFDFDFDFFFFFFEDEDEDE9E9E9E9E9E9E7E7E7E2E2E2E2E2E2 - CDCDCDDFDFDFF8F8F8F8F8F8F9F9F9F8F8F8F8F8F8FCFCFCFFFFFFFFFFFFEBEB - EBE9E9E9E9E9E9EAEAEAEAEAEAEAEAEAECECECEDEDEDEDEDEDEDEDEDEBEBEBF1 - F1F1ECECECF1F1F1F7F7F7FBFBFBFDFDFDFFFFFFFEFEFEFEFEFEFFFFFFFAFAFA - F5F5F5EAEAEADFDFDFE9E9E9EAEAEAECECECE9E9E9D9D9D9C6C6C6B4B4B4D3D3 - D3F3F3F3F6F6F6F5F5F5F6F6F6F8F8F8F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FF - FFFFF7F7F7F8F8F8F8F8F8F8F8F8F8F8F8F6F6F6F5F5F5F7F7F7FFFFFFFFFFFF - FFFFFFF9F9F9FBFBFBFAFAFAF9F9F9FAFAFAFBFBFBFCFCFCFFFFFFFAFAFAEAEA - EAE9E9E9E7E7E7E6E6E6E6E6E6E8E8E8E8E8E8E7E7E7E7E7E7E9E9E9C9C9C9D7 - D7D7F7F7F7F8F8F8F8F8F8FFFFFFECECECDFDFDFEDEDEDE9E9E9E6E6E6E6E6E6 - E4E4E4E0E0E0E2E2E2E9E9E9E9E9E9D5D5D5AFAFAFC0C0C0D3D3D3D5D5D5D6D6 - D6DFDFDFDFDFDFE2E2E2E0E0E0FCFCFCFFFFFFFFFFFFFCFCFCE4E4E4F7F7F7F8 - F8F8F8F8F8F9F9F9FBFBFBFBFBFBFBFBFBFDFDFDFFFFFFFFFFFFFFFFFFD1D1D1 - B0B0B0B8B8B8DCDCDCF1F1F1EFEFEFF5F5F5F5F5F50000FF0000FF0000FF0000 - FF0000FF0000FFFFFFFFFFFFFFEDEDEDECECECEEEEEEE9E9E9E4E4E4E4E4E4E3 - E3E3E5E5E5D2D2D2A3A3A3B9B9B9E7E7E7FFFFFFFFFFFFFFFFFFF0F0F0EBEBEB - FAFAFAF7F7F7F7F7F7F7F7F7F7F7F7F8F8F8FAFAFAFCFCFCFCFCFCF8F8F8F4F4 - F4F3F3F3E6E6E6E6E6E6F8F8F8F6F6F6E7E7E7F1F1F1F1F1F1E7E7E7C6C6C6EB - EBEBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7F7F7F7F8F8F8F9F9F9FFFFFF - E9E9E9B1B1B1BBBBBBCFCFCFD5D5D5F3F3F3F7F7F7E4E4E4E1E1E1DFDFDFCECE - CEBFBFBFD5D5D5E7E7E7D4D4D4AFAFAFCECECEF0F0F0F5F5F5F4F4F4F5F5F5F7 - F7F7FAFAFAFBFBFBFCFCFCFCFCFCFCFCFCFFFFFFFFFFFFFFFFFFFEFEFEFFFFFF - FFFFFFEAEAEAEAEAEAEAEAEAEAEAEAEDEDEDEDEDEDEAEAEAEAEAEAEAEAEAEAEA - EAEAEAEAEAEAEAE9E9E9C9C9C9D5D5D5F3F3F3F4F4F4F6F6F6F8F8F8F8F8F8FB - FBFBFBFBFBF4F4F4F1F1F1F2F2F2F1F1F1F0F0F0F2F2F2FFFFFFF9F9F9E8E8E8 - E4E4E4E4E4E4E7E7E7EAEAEAE8E8E8E8E8E8EAEAEAE9E9E9E9E9E9D7D7D7AFAF - AFBDBDBDE5E5E5F8F8F8FBFBFBFCFCFCFCFCFCF9F9F9FCFCFCECECECD6D6D6E6 - E6E6F7F7F7F7F7F7F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F8F8F8F9F9F9FBFBFB - FFFFFFF6F6F6ECECECEBEBEBEAEAEAEBEBEBE9E9E9E8E8E8EAEAEAF9F9F9FFFF - FFFFFFFFFFFFFFFEFEFEEEEEEEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE - FEFEEEEEEEEDEDEDEEEEEEF0F0F0EDEDEDE9E9E9E7E7E7E5E5E5E3E3E3E2E2E2 - CDCDCDE1E1E1F8F8F8F7F7F7F9F9F9F9F9F9F8F8F8FDFDFDFFFFFFF8F8F8EAEA - EAE9E9E9E9E9E9E9E9E9E9E9E9EAEAEAEBEBEBECECECEAEAEAEAEAEAE8E8E8D3 - D3D3DEDEDEF4F4F4FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF7F7F7 - F5F5F5F4F4F4F4F4F4F4F4F4F4F4F4DCDCDCCACACABABABAC1C1C1D1D1D1E7E7 - E7F7F7F7F7F7F7F5F5F5F7F7F7F8F8F8F9F9F9FAFAFAF9F9F9F9F9F9F9F9F9FF - FFFFF9F9F9F9F9F9FBFBFBF9F9F9F8F8F8F7F7F7F8F8F8FBFBFBFFFFFFFFFFFF - E9E9E9C4C4C4E6E6E6F8F8F8F8F8F8F9F9F9FCFCFCFAFAFAF8F8F8F7F7F7DBDB - DBDCDCDCE9E9E9E8E8E8E9E9E9E9E9E9E7E7E7E7E7E7E9E9E9E9E9E9CACACAD7 - D7D7F5F5F5F8F8F8F9F9F9F9F9F9E7E7E7E9E9E9D7D7D7BFBFBFBDBDBDCFCFCF - E0E0E0E0E0E0E4E4E4E9E9E9E9E9E9C1C1C1BABABAE2E2E2F6F6F6F7F7F7F7F7 - F7FBFBFBF8F8F8F9F9F9FFFFFFFFFFFFFFFFFFFFFFFFEAEAEAE5E5E5F7F7F7F8 - F8F8F9F9F9FAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBEBEBBABABA - C5C5C5E2E2E2F7F7F7FAFAFAF7F7F7F8F8F8F8F8F80000FF0000FF0000FF0000 - FF0000FF0000FF0000FFF0F0F0EDEDEDEDEDEDECECECE8E8E8E5E5E5E4E4E4E4 - E4E4D1D1D1A5A5A5BABABAFCFCFCFFFFFFFFFFFFFFFFFFE8E8E8D4D4D4E4E4E4 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F8F8F8FCFCFCFCFCFCF9F9F9F6F6F6F4F4 - F4F4F4F4FFFFFFF7F7F7E8E8E8E4E4E4E5E5E5ECECECECECECE5E5E5C6C6C6EB - EBEBFFFFFFFFFFFFFFFFFFFFFFFFEAEAEAE5E5E5F7F7F7F7F7F7F7F7F7F8F8F8 - E3E3E3D0D0D0E2E2E2F3F3F3F7F7F7FFFFFFFFFFFFE7E7E7E4E4E4D0D0D0A6A6 - A6BABABADEDEDED2D2D2ACACACBFBFBFE6E6E6F5F5F5F5F5F5F3F3F3F7F7F7F9 - F9F9FBFBFBFBFBFBFBFBFBFCFCFCFFFFFFFFFFFFFFFFFFFDFDFDFCFCFCFFFFFF - FFFFFFEAEAEAEAEAEAEAEAEAEAEAEAEBEBEBEAEAEAE7E7E7E7E7E7E8E8E8EAEA - EAEAEAEAEAEAEAE9E9E9CCCCCCDADADAF6F6F6F7F7F7F8F8F8FBFBFBFBFBFBF9 - F9F9F8F8F8F2F2F2F0F0F0F0F0F0F0F0F0F1F1F1F2F2F2FFFFFFFFFFFFE7E7E7 - E7E7E7E6E6E6E8E8E8E8E8E8E7E7E7E9E9E9EAEAEAE8E8E8D7D7D7ACACACBBBB - BBE2E2E2F5F5F5F8F8F8FAFAFAFCFCFCFBFBFBF9F9F9FCFCFCFCFCFCF7F7F7F5 - F5F5F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F8F8F8F5F5F5 - F2F2F2EDEDEDD7D7D7DBDBDBEAEAEAEBEBEBE9E9E9EAEAEAEAEAEAE9E9E9EAEA - EAECECECEDEDEDEDEDEDEDEDEDECECECECECECECECECECECECECECECEDEDEDEC - ECECEBEBEBEDEDEDEDEDEDECECECEAEAEAE7E7E7E6E6E6E6E6E6E5E5E5E2E2E2 - E3E3E3E7E7E7F8F8F8F7F7F7F8F8F8F8F8F8F8F8F8FEFEFEFEFEFEFFFFFFF7F7 - F7E9E9E9E8E8E8E9E9E9E9E9E9E9E9E9E9E9E9EAEAEAE9E9E9E9E9E9D2D2D2AC - ACACCFCFCFF7F7F7FCFCFCFFFFFFFDFDFDFDFDFDFDFDFDFAFAFAF7F7F7F6F6F6 - F6F6F6F5F5F5F5F5F5F5F5F5F5F5F5E7E7E7D6D6D6D4D4D4E0E0E0F1F1F1F8F8 - F8FBFBFBF9F9F9F7F7F7F6F6F6F7F7F7FBFBFBFCFCFCFDFDFDFFFFFFFFFFFFFF - FFFFF9F9F9FBFBFBFDFDFDFBFBFBF8F8F8F9F9F9F9F9F9FBFBFBFFFFFFEBEBEB - AEAEAEBCBCBCE0E0E0F4F4F4F7F7F7F9F9F9F9F9F9F7F7F7F7F7F7F7F7F7E7E7 - E7E7E7E7D9D9D9DADADAEAEAEAE8E8E8E7E7E7E9E9E9EAEAEAE7E7E7C8C8C8D6 - D6D6F4F4F4F8F8F8F7F7F7F6F6F6F5F5F5F7F7F7E6E6E6D1D1D1D0D0D0E1E1E1 - E2E2E2E3E3E3E6E6E6E9E9E9D7D7D7A7A7A7CECECEF8F8F8F9F9F9F9F9F9F8F8 - F8F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFCFCFCEDEDEDE9E9E9E9E9E9FFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8F8CACACAC9C9C9 - E7E7E7F4F4F4F8F8F8FAFAFAF8F8F8FBFBFBFAFAFA0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FFEEEEEEEDEDEDEBEBEBEAEAEAE9E9E9E8E8E8E7 - E7E7BFBFBFBBBBBBE5E5E5FFFFFFFFFFFFFFFFFFFDFDFDE7E7E7E7E7E7D1D1D1 - E0E0E0F2F2F2F3F3F3F6F6F6F8F8F8FBFBFBFBFBFBFBFBFBF9F9F9F5F5F5F4F4 - F4FFFFFFFFFFFFFFFFFFE7E7E7E4E4E4E6E6E6E9E9E9E7E7E7D4D4D4B4B4B4D9 - D9D9FFFFFFFBFBFBEAEAEAEBEBEBC5C5C5D1D1D1F5F5F5F7F7F7F6F6F6F7F7F7 - F4F4F4F6F6F6F7F7F7F5F5F5F8F8F8FFFFFFFFFFFFEAEAEAD8D8D8ADADADBBBB - BBE0E0E0EEEEEEE2E2E2D3D3D3E6E6E6F7F7F7F5F5F5F3F3F3F4F4F4F8F8F8F9 - F9F9F9F9F9FBFBFBFCFCFCFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9FAFAFAFFFFFF - FFFFFFEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE9E9E9E7E7E7E7E7E7E9E9E9E9E9 - E9EAEAEAE8E8E8DADADAC0C0C0D9D9D9F5F5F5F8F8F8FAFAFAFCFCFCFBFBFBF8 - F8F8F8F8F8F7F7F7F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6FFFFFFFFFFFFE9E9E9 - E7E7E7E3E3E3E4E4E4E8E8E8E9E9E9E9E9E9E8E8E8D6D6D6AFAFAFBBBBBBE2E2 - E2F6F6F6F6F6F6F7F7F7F9F9F9F9F9F9FCFCFCFDFDFDFFFFFFFFFFFFFFFFFFF5 - F5F5F8F8F8F8F8F8F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F1F1F1 - EDEDEDEDEDEDE1E1E1E7E7E7DBDBDBCECECECACACAC8C8C8CACACAD9D9D9EAEA - EAECECECECECECEDEDEDEFEFEFF0F0F0F0F0F0F0F0F0EDEDEDEAEAEAEAEAEAEA - EAEAE9E9E9ECECECECECECE7E7E7E8E8E8E7E7E7E4E4E4E6E6E6E4E4E4E6E6E6 - EBEBEBEBEBEBEAEAEAF7F7F7F7F7F7F9F9F9F8F8F8FEFEFEFFFFFFFFFFFFFFFF - FFECECECE6E6E6E5E5E5E6E6E6E6E6E6E6E6E6E7E7E7E6E6E6D3D3D3A6A6A6BC - BCBCE1E1E1F7F7F7FBFBFBF9F9F9F8F8F8F7F7F7F7F7F7F5F5F5F5F5F5F7F7F7 - F7F7F7F5F5F5F5F5F5F5F5F5F5F5F5F3F3F3F0F0F0F0F0F0F1F1F1F4F4F4F9F9 - F9FAFAFAF9F9F9FFFFFFFFFFFFF8F8F8FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFCFCFCFDFDFDFCFCFCF9F9F9F8F8F8F9F9F9F8F8F8F9F9F9F8F8F8E4E4E4 - D0D0D0DFDFDFF2F2F2F5F5F5F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F6F6F6F5F5 - F5F5F5F5E5E5E5E8E8E8EAEAEAEAEAEAE9E9E9EBEBEBDADADAC7C7C7B5B5B5D3 - D3D3F4F4F4F7F7F7F5F5F5F5F5F5F7F7F7F7F7F7F8F8F8F7F7F7F7F7F7F7F7F7 - F4F4F4D5D5D5C3C3C3C3C3C3ADADADB6B6B6E2E2E2F9F9F9F9F9F9F9F9F9FDFD - FDFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7E9E9E9E8E8E8E7E7E7E7E7E7F9F9F9FF - FFFFFDFDFDFFFFFFFFFFFFFFFFFFFBFBFBE9E9E9E9E9E9E7E7E7CBCBCBDADADA - F5F5F5F5F5F5F6F6F6F5F5F5F3F3F3F8F8F8F8F8F80000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FFECECECEAEAEAEAEAEAEAEAEAE8E8E8E7 - E7E7C1C1C1D1D1D1F7F7F7F9F9F9FFFFFFF9F9F9E8E8E8E7E7E7E6E6E6BCBCBC - CCCCCCF1F1F1F3F3F3F7F7F7FAFAFAFBFBFBFAFAFAFAFAFAF8F8F8F5F5F5FFFF - FFFFFFFFFFFFFFF7F7F7E6E6E6E4E4E4E2E2E2E6E6E6D7D7D7B5B5B5C5C5C5EA - EAEAFFFFFFEAEAEAD4D4D4E4E4E4C0C0C0D0D0D0F5F5F5F5F5F5F5F5F5F7F7F7 - F6F6F6F8F8F8F5F5F5F3F3F3F7F7F7FFFFFFF7F7F7CECECEB5B5B5BBBBBBE1E1 - E1F3F3F3F4F4F4F8F8F8FAFAFAF7F7F7F4F4F4F4F4F4F3F3F3F7F7F7F9F9F9F9 - F9F9FBFBFBFDFDFDFDFDFDFDFDFDFFFFFFFDFDFDF8F8F8F6F6F6F8F8F8FFFFFF - F5F5F5EAEAEAE9E9E9E8E8E8E9E9E9D7D7D7BEBEBEBABABABEBEBED6D6D6E8E8 - E8EBEBEBE9E9E9CECECECBCBCBE6E6E6F5F5F5F9F9F9F9F9F9F9F9F9F8F8F8F9 - F9F9FAFAFAF8F8F8F7F7F7F7F7F7F7F7F7F7F7F7F8F8F8FFFFFFFBFBFBE8E8E8 - E7E7E7E6E6E6E7E7E7E9E9E9EAEAEAE9E9E9D3D3D3A8A8A8B9B9B9DEDEDEF5F5 - F5FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7F4 - F4F4F8F8F8F8F8F8F7F7F7F6F6F6F6F6F6F6F6F6F4F4F4F4F4F4F4F4F4F1F1F1 - F2F2F2F5F5F5F6F6F6F7F7F7E9E9E9DBDBDBD6D6D6D5D5D5D4D4D4E2E2E2D9D9 - D9DBDBDBECECECEDEDEDF3F3F3F0F0F0EDEDEDEDEDEDEAEAEAEAEAEAEAEAEAE9 - E9E9E7E7E7E9E9E9E7E7E7E3E3E3E4E4E4CCCCCCB3B3B3D1D1D1E8E8E8EBEBEB - EDEDEDEAEAEAE9E9E9D4D4D4E4E4E4FAFAFAF9F9F9FEFEFEFFFFFFFFFFFFFEFE - FEEDEDEDEAEAEAE7E7E7E4E4E4E2E2E2E2E2E2E4E4E4D3D3D3AFAFAFBEBEBEE4 - E4E4F5F5F5F9F9F9F9F9F9F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6F8F8F8 - F7F7F7F5F5F5F5F5F5F5F5F5F3F3F3F0F0F0F0F0F0F3F3F3F5F5F5F5F5F5F8F8 - F8FFFFFFFFFFFFFFFFFFFFFFFFF6F6F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFEFEFEFDFDFDFBFBFBFAFAFAF9F9F9F9F9F9FCFCFCFFFFFFFDFDFDFBFBFB - F4F4F4F2F2F2F5F5F5F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F5F5F5F5F5 - F5F5F5F5F5F5F5F7F7F7FFFFFFFFFFFFF0F0F0EFEFEFDEDEDED4D4D4D1D1D1E5 - E5E5F5F5F5F7F7F7F6F6F6F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7E6E6E6D3D3D3D3D3D3D0D0D0DEDEDEF4F4F4F9F9F9F8F8F8F8F8F8FFFF - FFFFFFFFFFFFFFFFFFFFF9F9F9E9E9E9E8E8E8E7E7E7E6E6E6E6E6E6E6E6E6E8 - E8E8E9E9E9F9F9F9F9F9F9ECECECE7E7E7E5E5E5E7E7E7E4E4E4CCCCCCDADADA - F4F4F4F4F4F4F4F4F4F3F3F3F0F0F0FFFFFFFFFFFF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FFE9E9E9E9E9E9E9E9E9E9E9E9E8E8E8E7 - E7E7C2C2C2D2D2D2F7F7F7F8F8F8FFFFFFFDFDFDE9E9E9E7E7E7E4E4E4B9B9B9 - CCCCCCF5F5F5F7F7F7F8F8F8F9F9F9F8F8F8F7F7F7F8F8F8F6F6F6FFFFFFFFFF - FFFFFFFFF8F8F8E7E7E7E4E4E4E0E0E0E1E1E1E6E6E6C9C9C9C6C6C6E9E9E9F9 - F9F9F9F9F9E7E7E7F2F2F2F5F5F5C4C4C4D1D1D1F3F3F3F4F4F4F6F6F6F8F8F8 - F7F7F7F7F7F7F4F4F4F3F3F3F5F5F5FFFFFFD8D8D8C2C2C2CACACADFDFDFF7F7 - F7F5F5F5F7F7F7FAFAFAFAFAFAF9F9F9F9F9F9FAFAFAF8F8F8F9F9F9FCFCFCFB - FBFBFCFCFCFCFCFCFBFBFBFAFAFAFDFDFDFBFBFBF6F6F6F6F6F6F6F6F6F4F4F4 - F3F3F3EAEAEAEAEAEAE9E9E9D7D7D7ACACACB5B5B5CACACAD1D1D1E2E2E2E4E4 - E4E8E8E8EAEAEACCCCCCD8D8D8F4F4F4F6F6F6F7F7F7F5F5F5F6F6F6F8F8F8F9 - F9F9F9F9F9F8F8F8F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7FFFFFFFBFBFB - E9E9E9E9E9E9E7E7E7E7E7E7E9E9E9D3D3D3A5A5A5B8B8B8E2E2E2F5F5F5F8F8 - F8FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFFFFFFFFFFFFFFFFFFFBFBFBE4E4E4DA - DADAE9E9E9F6F6F6F5F5F5F5F5F5F6F6F6F6F6F6F5F5F5F6F6F6F4F4F4F5F5F5 - F7F7F7F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F7F7F7F7F7F7F3F3F3F3F3F3E6E6 - E6F6F6F6FBFBFBEEEEEEF2F2F2EDEDEDE7E7E7E7E7E7E6E6E6E2E2E2E6E6E6E7 - E7E7E7E7E7E7E7E7CFCFCFB5B5B5B5B5B5999999AEAEAEE6E6E6EBEBEBE8E8E8 - EAEAEAE8E8E8E6E6E6D1D1D1E5E5E5FCFCFCFCFCFCFFFFFFFFFFFFFFFFFFF7F7 - F7EDEDEDEDEDEDECECECEAEAEAE7E7E7E6E6E6E6E6E6C8C8C8C1C1C1E5E5E5F7 - F7F7F7F7F7FCFCFCFAFAFAF5F5F5F6F6F6F7F7F7F7F7F7F7F7F7F8F8F8F7F7F7 - F6F6F6F5F5F5F5F5F5F4F4F4F1F1F1F1F1F1F2F2F2F5F5F5F7F7F7F7F7F7F9F9 - F9FFFFFFFFFFFFFFFFFFF3F3F3E7E7E7FFFFFFFFFFFFFCFCFCEDEDEDEEEEEEFF - FFFFFDFDFDFCFCFCFCFCFCFCFCFCFAFAFAFFFFFFFFFFFFFFFFFFFBFBFBF9F9F9 - F4F4F4F4F4F4F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F5F5F5F5F5 - F5F7F7F7F7F7F7F7F7F7FFFFFFFFFFFFF0F0F0EDEDEDECECECD4D4D4DFDFDFF4 - F4F4F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F4F4F4F1F1F1F6F6F6F9F9F9F8F8F8F9F9F9FFFF - FFFFFFFFFFFFFFE4E4E4E7E7E7E6E6E6E6E6E6E6E6E6E5E5E5E7E7E7E7E7E7E8 - E8E8E8E8E8E8E8E8E8E8E8E9E9E9E6E6E6E4E4E4E6E6E6E7E7E7CDCDCDDADADA - F3F3F3F5F5F5F5F5F5F5F5F5F5F5F5FFFFFFFFFFFF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FFE9E9E9E8E8E8E9E9E9E8E8E8E8 - E8E8C4C4C4D4D4D4F8F8F8F8F8F8FAFAFAFFFFFFFDFDFDE6E6E6E1E1E1BBBBBB - D0D0D0F6F6F6F6F6F6F7F7F7F8F8F8FAFAFAF8F8F8FFFFFFFFFFFFFFFFFFFFFF - FFF7F7F7EAEAEAE9E9E9E3E3E3E2E2E2E7E7E7E9E9E9CACACAD6D6D6F6F6F6F7 - F7F7F9F9F9F8F8F8FFFFFFEDEDEDB5B5B5D2D2D2F3F3F3F5F5F5F7F7F7F5F5F5 - F4F4F4F3F3F3F2F2F2F2F2F2F1F1F1EFEFEFDADADADCDCDCEDEDEDF2F2F2F8F8 - F8F7F7F7F7F7F7FAFAFAFBFBFBFCFCFCFEFEFEFFFFFFFFFFFFFCFCFCFBFBFBF7 - F7F7F9F9F9FAFAFAF9F9F9F8F8F8FCFCFCFBFBFBF8F8F8F8F8F8F6F6F6F6F6F6 - F5F5F5FFFFFFF9F9F9DADADAB2B2B2BEBEBEDFDFDFF4F4F4FAFAFAF7F7F7F8F8 - F8ECECECEAEAEAD9D9D9E2E2E2F4F4F4F5F5F5F5F5F5F5F5F5F8F8F8F9F9F9FB - FBFBF9F9F9F7F7F7F8F8F8F8F8F8F7F7F7F7F7F7F7F7F7F7F7F7FFFFFFFFFFFF - E9E9E9E6E6E6E3E3E3D1D1D1BEBEBEA5A5A5B7B7B7E2E2E2F8F8F8F9F9F9FBFB - FBFBFBFBFBFBFBFAFAFAFAFAFAFAFAFAFFFFFFFFFFFFEEEEEEECECECD7D7D7B9 - B9B9D9D9D9F4F4F4F5F5F5F7F7F7F8F8F8F8F8F8F8F8F8F8F8F8F7F7F7F7F7F7 - F9F9F9FBFBFBFBFBFBFBFBFBFCFCFCFAFAFAF8F8F8F8F8F8F7F7F7F7F7F7F7F7 - F7FFFFFFEAEAEADDDDDDF1F1F1ECECECE7E7E7E7E7E7E2E2E2DFDFDFE4E4E4E8 - E8E8E9E9E9D3D3D3A1A1A1B5B5B5CECECECECECEE3E3E3FFFFFFFFFFFFFCFCFC - EAEAEAE8E8E8E4E4E4D4D4D4C8C8C8ECECECFAFAFAFFFFFFFFFFFFFFFFFFEEEE - EEEDEDEDEDEDEDEDEDEDEDEDEDECECECEBEBEBEBEBEBD0D0D0DADADAF5F5F5F7 - F7F7F9F9F9FEFEFEFAFAFAF5F5F5F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFF6F6F6 - F5F5F5F5F5F5F5F5F5F3F3F3F1F1F1F1F1F1F4F4F4F6F6F6F7F7F7F7F7F7F9F9 - F9FFFFFFEAEAEADBDBDBE9E9E9E9E9E9FAFAFAFCFCFCECECECE9E9E9ECECECFF - FFFFF9F9F9F9F9F9F9F9F9F9F9F9F8F8F8FFFFFFFFFFFFFCFCFCF3F3F3F1F1F1 - EFEFEFF2F2F2F5F5F5F6F6F6F7F7F7F7F7F7F6F6F6F5F5F5F5F5F5F4F4F4F5F5 - F5F7F7F7F6F6F6F5F5F5FFFFFFFFFFFFECECECEAEAEAEAEAEAD6D6D6E3E3E3F6 - F6F6F8F8F8F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F6F6F6F4F4F4F3F3F3F5F5F5F8F8F8F9F9F9FAFAFAFFFFFFFFFF - FFFFFFFFF9F9F9E2E2E2E1E1E1E2E2E2E4E4E4E6E6E6E6E6E6E7E7E7E7E7E7E8 - E8E8E7E7E7E8E8E8E8E8E8E8E8E8E7E7E7E6E6E6E6E6E6E9E9E9CFCFCFDADADA - F4F4F4F5F5F5F5F5F5FFFFFFFFFFFFFFFFFFFFFFFF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FFE9E9E9E9E9E9E9E9E9E9E9E9E8 - E8E8C2C2C2D3D3D3F9F9F9FAFAFAFBFBFBFFFFFFFFFFFFE7E7E7E5E5E5D4D4D4 - E5E5E5F7F7F7F7F7F7F8F8F8FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7 - F7EAEAEAEAEAEAE9E9E9E7E7E7E6E6E6E7E7E7DADADABBBBBBD5D5D5F4F4F4F6 - F6F6F8F8F8F7F7F7F7F7F7E6E6E6D2D2D2E4E4E4F6F6F6F7F7F7F8F8F8F7F7F7 - F4F4F4F3F3F3F4F4F4F4F4F4F3F3F3F4F4F4F0F0F0F2F2F2F5F5F5F7F7F7F7F7 - F7F7F7F7F8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDE7E7E7F7F7F7F5 - F5F5F8F8F8F9F9F9F7F7F7F7F7F7FCFCFCFAFAFAF8F8F8F4F4F4F4F4F4F6F6F6 - FFFFFFFFFFFFFFFFFFDBDBDBD1D1D1E3E3E3F5F5F5F7F7F7FAFAFAFAFAFAFFFF - FFFFFFFFF1F1F1E4E4E4E4E4E4FFFFFFFFFFFFF6F6F6FFFFFFFFFFFFFFFFFFFF - FFFFFCFCFCF9F9F9FBFBFBF9F9F9F7F7F7F8F8F8F8F8F8F7F7F7FFFFFFFFFFFF - E4E4E4E1E1E1E2E2E2BCBCBCB7B7B7CECECEE3E3E3F8F8F8FAFAFAFCFCFCFCFC - FCFCFCFCFCFCFCFAFAFAFAFAFAFDFDFDFFFFFFFFFFFFEDEDEDDDDDDDB8B8B8C6 - C6C6E8E8E8F5F5F5F7F7F7F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F9F9F9 - FEFEFEFFFFFFFDFDFDFAFAFAFBFBFBF9F9F9F8F8F8F8F8F8F8F8F8F8F8F8F7F7 - F7F8F8F8E6E6E6E6E6E6ECECECE9E9E9E6E6E6E6E6E6E1E1E1E1E1E1E7E7E7EA - EAEAD5D5D5A4A4A4B7B7B7E6E6E6FAFAFAFBFBFBFDFDFDFFFFFFFFFFFFECECEC - EAEAEAE6E6E6D1D1D1ADADADBCBCBCE5E5E5F7F7F7F9F9F9FFFFFFFDFDFDEDED - EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDD5D5D5DEDEDEF8F8F8FA - FAFAFEFEFEFCFCFCF8F8F8F5F5F5F6F6F6FFFFFFFFFFFFFFFFFFECECECE9E9E9 - F5F5F5F5F5F5F5F5F5F3F3F3F1F1F1F3F3F3F6F6F6F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7E7E7E7E8E8E8DEDEDEDEDEDEECECECEEEEEEECECECEBEBEBECECECFF - FFFFF7F7F7F9F9F9F9F9F9FFFFFFFFFFFFFFFFFFFFFFFFEDEDEDDADADAE3E3E3 - F2F2F2F4F4F4F5F5F5FAFAFAFAFAFAF7F7F7F6F6F6F7F7F7F6F6F6F5F5F5F7F7 - F7F6F6F6F5F5F5F4F4F4FFFFFFFFFFFFEAEAEAE7E7E7E7E7E7E7E7E7CFCFCFE2 - E2E2F9F9F9F9F9F9F9F9F9F9F9F9F8F8F8F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F6F6F6F5F5F5F4F4F4F5F5F5F7F7F7F8F8F8FBFBFBFDFDFDFFFFFFFFFF - FFFEFEFEE3E3E3E2E2E2E2E2E2E5E5E5E7E7E7E8E8E8E7E7E7E8E8E8E9E9E9E9 - E9E9E7E7E7E9E9E9E9E9E9E9E9E9E9E9E9E7E7E7E7E7E7EAEAEACFCFCFDADADA - F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFE9E9E9EAEAEAE9E9E9E8 - E8E8C3C3C3D3D3D3F9F9F9F9F9F9F8F8F8FFFFFFFFFFFFEAEAEAEAEAEAE9E9E9 - D8D8D8E6E6E6F8F8F8F8F8F8FBFBFBFFFFFFFFFFFFFFFFFFF9F9F9EAEAEAEAEA - EAEAEAEAEAEAEAE9E9E9E8E8E8E7E7E7E6E6E6D9D9D9D6D6D6E6E6E6F5F5F5F8 - F8F8F6F6F6F5F5F5F5F5F5F3F3F3F1F1F1F5F5F5F7F7F7F7F7F7F9F9F9F6F6F6 - F4F4F4F6F6F6F7F7F7F7F7F7F8F8F8F9F9F9FBFBFBF9F9F9F7F7F7F7F7F7F7F7 - F7F7F7F7F8F8F8FBFBFBFEFEFEFFFFFFFFFFFFFFFFFFD5D5D5CBCBCBF2F2F2F5 - F5F5F9F9F9F9F9F9F8F8F8F8F8F8FAFAFAF7F7F7FFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFCFCFCECECECD7D7D7E5E5E5F8F8F8F8F8F8FCFCFCFEFEFEFFFF - FFFFFFFFFFFFFFF7F7F7EBEBEBFFFFFFFCFCFCFFFFFFFFFFFFFFFFFFFDFDFDFB - FBFBF8F8F8F9F9F9FCFCFCF9F9F9F7F7F7FFFFFFFFFFFFF7F7F7FFFFFFFFFFFF - E6E6E6E6E6E6E6E6E6C3C3C3D1D1D1F5F5F5F7F7F7FAFAFAFCFCFCFCFCFCFCFC - FCFDFDFDFCFCFCFAFAFAFDFDFDFFFFFFFFFFFFFFFFFFDEDEDEBABABAC4C4C4E4 - E4E4F7F7F7F8F8F8F9F9F9F9F9F9F8F8F8F8F8F8F8F8F8F8F8F8FBFBFBFFFFFF - FFFFFFFFFFFFFEFEFEF9F9F9F7F7F7F7F7F7F7F7F7FAFAFAFBFBFBF8F8F8F8F8 - F8F9F9F9F6F6F6F5F5F5F7F7F7D7D7D7D1D1D1E0E0E0DEDEDEE2E2E2E9E9E9EA - EAEABFBFBFB8B8B8E6E6E6FBFBFBFCFCFCFFFFFFFEFEFEFFFFFFE9E9E9DDDDDD - D2D2D2BFBFBFAAAAAAB8B8B8DFDFDFF3F3F3F5F5F5F7F7F7FFFFFFF7F7F7EFEF - EFEFEFEFEFEFEFEEEEEEEEEEEEEDEDEDEDEDEDEDEDEDD5D5D5DEDEDEF6F6F6FB - FBFBFCFCFCF8F8F8F5F5F5F5F5F5F5F5F5F7F7F7FFFFFFEAEAEAC4C4C4DCDCDC - F5F5F5F5F5F5F4F4F4F3F3F3F1F1F1F4F4F4F7F7F7F7F7F7F7F7F7F7F7F7F8F8 - F8F8F8F8F6F6F6F5F5F5E9E9E9F5F5F5F7F7F7ECECECEDEDEDECECECEDEDEDFF - FFFFF7F7F7F8F8F8F9F9F9FFFFFFFFFFFFFFFFFFFDFDFDECECECCACACAD1D1D1 - F4F4F4F7F7F7F7F7F7FEFEFEFCFCFCF9F9F9F9F9F9F7F7F7F8F8F8F7F7F7F7F7 - F7F6F6F6F5F5F5F8F8F8FFFFFFFFFFFFE9E9E9E6E6E6E6E6E6E6E6E6D0D0D0E1 - E1E1F8F8F8F8F8F8F8F8F8F8F8F8F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F6F6F6F5F5F5F6F6F6F7F7F7F8F8F8F8F8F8F9F9F9FBFBFBFFFFFFFFFF - FFE2E2E2E2E2E2E6E6E6E7E7E7E8E8E8E9E9E9E9E9E9E7E7E7E9E9E9E9E9E9E9 - E9E9E7E7E7E9E9E9EAEAEAEAEAEAEAEAEAE8E8E8E9E9E9EAEAEACCCCCCD5D5D5 - FFFFFFFFFFFFFFFFFFFFFFFFFAFAFAE7E7E7E6E6E60000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFEEEEEEEAEAEAE9 - E9E9D8D8D8E8E8E8FAFAFAF9F9F9FCFCFCFFFFFFFFFFFFECECECEAEAEAE9E9E9 - C3C3C3D3D3D3F7F7F7F7F7F7F9F9F9FFFFFFFFFFFFECECECEBEBEBEAEAEAEAEA - EAEAEAEAE8E8E8E9E9E9E9E9E9E9E9E9E9E9E9E7E7E7DEDEDEEAEAEAF5F5F5F7 - F7F7F7F7F7FFFFFFFFFFFFFFFFFFF3F3F3F5F5F5F7F7F7F8F8F8F8F8F8F4F4F4 - F4F4F4F7F7F7F8F8F8F8F8F8F9F9F9FBFBFBFFFFFFFEFEFEF9F9F9F9F9F9F8F8 - F8F7F7F7F7F7F7FBFBFBFFFFFFFFFFFFFFFFFFFDFDFDB8B8B8C8C8C8F5F5F5F8 - F8F8FBFBFBF9F9F9F9F9F9F9F9F9FCFCFCFAFAFAFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFBFBFBECECECEBEBEBD9D9D9E6E6E6F8F8F8F8F8F8FBFBFBFDFDFDFFFF - FFFFFFFFFFFFFFFBFBFBEDEDEDEFEFEFEBEBEBF7F7F7FFFFFFF9F9F9EBEBEBEB - EBEBF4F4F4F7F7F7F9F9F9F8F8F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - ECECECECECECE9E9E9C8C8C8D4D4D4F5F5F5F7F7F7F9F9F9FBFBFBFBFBFBFDFD - FDFDFDFDFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFC9C9C9E8E8E8F9 - F9F9FCFCFCFBFBFBF9F9F9FBFBFBFBFBFBFAFAFAFCFCFCFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFF0F0F0F1F1F1F4F4F4F5F5F5F7F7F7F8F8F8F6F6F6F7F7 - F7F7F7F7F7F7F7F8F8F8F9F9F9E9E9E9E2E2E2D1D1D1C0C0C0D6D6D6D8D8D8C6 - C6C6AEAEAED7D7D7FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F6F6F1F1F1 - E3E3E3CECECECBCBCBE0E0E0F4F4F4F5F5F5F6F6F6F8F8F8F7F7F7F7F7F7EFEF - EFF1F1F1F1F1F1F0F0F0EEEEEEEEEEEEEEEEEEEDEDEDD5D5D5DEDEDEF5F5F5F7 - F7F7F7F7F7F5F5F5F5F5F5F5F5F5F4F4F4F3F3F3FEFEFEDDDDDDDBDBDBF4F4F4 - F5F5F5F5F5F5F3F3F3F3F3F3F2F2F2F4F4F4F7F7F7F7F7F7F7F7F7F8F8F8F8F8 - F8F7F7F7F5F5F5F4F4F4F5F5F5FFFFFFF6F6F6ECECECEDEDEDECECECEDEDEDFF - FFFFF5F5F5F6F6F6F8F8F8FFFFFFFFFFFFEEEEEEEBEBEBE9E9E9C6C6C6CECECE - F3F3F3F8F8F8F8F8F8FEFEFEFAFAFAF5F5F5F4F4F4F4F4F4F7F7F7F5F5F5F7F7 - F7F6F6F6F6F6F6F8F8F8FFFFFFFFFFFFE9E9E9E6E6E6E6E6E6E6E6E6E6E6E6E6 - E6E6F6F6F6F7F7F7F7F7F7F6F6F6F5F5F5F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F4F4F4F4F4F4F7F7F7F7F7F7F7F7F7F8F8F8F8F8F8F8F8F8FFFFFFECEC - ECD3D3D3E6E6E6E7E7E7E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9EAEAEAEA - EAEAE8E8E8E9E9E9EAEAEAEAEAEAEAEAEAE8E8E8D8D8D8C8C8C8B7B7B7D3D3D3 - FFFFFFFFFFFFFFFFFFECECECE6E6E6E6E6E6E6E6E60000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFEAEAEAE8 - E8E8ECECECEDEDEDFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFECECECEAEAEAD7D7D7 - AFAFAFD3D3D3F7F7F7F7F7F7F8F8F8FFFFFFFAFAFAEBEBEBE9E9E9E9E9E9E8E8 - E8E7E7E7E9E9E9EAEAEAEBEBEBEBEBEBEBEBEBE8E8E8DEDEDEE9E9E9F2F2F2F4 - F4F4F8F8F8FFFFFFFFFFFFF9F9F9F0F0F0F3F3F3F8F8F8F7F7F7F8F8F8F8F8F8 - F8F8F8F9F9F9F9F9F9FCFCFCFEFEFEFFFFFFFFFFFFFEFEFEF9F9F9F7F7F7F6F6 - F6F7F7F7FBFBFBFFFFFFFFFFFFFFFFFFF8F8F8CCCCCC979797CACACAF7F7F7FB - FBFBFDFDFDF9F9F9F9F9F9F9F9F9FDFDFDFFFFFFFFFFFFFFFFFFE6E6E6E3E3E3 - E6E6E6E9E9E9E9E9E9E9E9E9E9E9E9D8D8D8E7E7E7F8F8F8FAFAFAFAFAFAFFFF - FFFFFFFFFFFFFFEEEEEEEBEBEBE9E9E9E8E8E8E8E8E8EAEAEAEBEBEBEBEBEBE9 - E9E9DADADAE7E7E7F6F6F6FFFFFFFFFFFFFFFFFFFAFAFAF6F6F6FFFFFFFCFCFC - EDEDEDECECECE9E9E9DADADAE4E4E4F1F1F1F7F7F7FBFBFBFCFCFCFBFBFBFDFD - FDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBDFDFDFECECECFCFCFCFE - FEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFF2F2F2E5E5E5EAEAEAF3F3F3F4F4F4F7F7F7F7F7F7F4F4F4F5F5 - F5F7F7F7F8F8F8F9F9F9F9F9F9FBFBFBFBFBFBE6E6E6D2D2D2E4E4E4C3C3C3BE - BEBED3D3D3EBEBEBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF7F7F7F9F9F9 - F9F9F9F5F5F5F1F1F1F3F3F3F5F5F5F6F6F6F8F8F8F8F8F8F7F7F7F6F6F6F8F8 - F8F1F1F1F0F0F0EDEDEDEDEDEDEDEDEDECECECECECECD5D5D5DEDEDEF5F5F5F5 - F5F5F5F5F5F4F4F4F3F3F3F1F1F1EFEFEFEEEEEEEDEDEDDFDFDFECECECE9E9E9 - E9E9E9F4F4F4F3F3F3F4F4F4F4F4F4F7F7F7F9F9F9F9F9F9F9F9F9FBFBFBF9F9 - F9F5F5F5F4F4F4F5F5F5F5F5F5F4F4F4FFFFFFFBFBFBF0F0F0EDEDEDEEEEEEFF - FFFFF5F5F5F6F6F6F7F7F7FFFFFFFFFFFFEEEEEEEEEEEEEEEEEEDCDCDCE2E2E2 - F5F5F5FBFBFBFBFBFBFFFFFFFBFBFBF5F5F5F3F3F3F5F5F5F7F7F7F6F6F6F6F6 - F6F6F6F6F6F6F6F8F8F8F8F8F8FAFAFAE9E9E9E6E6E6E6E6E6E6E6E6E6E6E6E5 - E5E5CFCFCFE2E2E2F7F7F7F7F7F7F7F7F7F8F8F8F8F8F8F7F7F7F7F7F7F7F7F7 - F7F7F7F5F5F5F6F6F6F7F7F7F7F7F7F9F9F9F9F9F9F8F8F8F9F9F9FCFCFCEAEA - EAE6E6E6EAEAEAE9E9E9EAEAEAEAEAEAEBEBEBE9E9E9E9E9E9E9E9E9EAEAEAE9 - E9E9ECECECECECECEAEAEAEAEAEAE9E9E9D7D7D7B2B2B2C4C4C4D6D6D6E6E6E6 - FFFFFFFFFFFFECECECE7E7E7E6E6E6E6E6E6E6E6E60000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFE9E9E9E9 - E9E9EAEAEAEAEAEAEEEEEEFFFFFFFFFFFFFFFFFFFFFFFFEAEAEAEAEAEAC3C3C3 - BFBFBFE6E6E6F6F6F6F7F7F7F7F7F7F8F8F8F7F7F7DEDEDECFCFCFD9D9D9D9D9 - D9DCDCDCEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBE9E9E9E9E9E9ECECECF2F2F2F3 - F3F3FFFFFFFFFFFFFFFFFFE9E9E9D3D3D3E1E1E1F7F7F7F5F5F5F8F8F8F9F9F9 - F7F7F7FAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBF6F6 - F6F7F7F7FEFEFEFFFFFFFFFFFFFFFFFFD1D1D19D9D9DB1B1B1E1E1E1F8F8F8FC - FCFCFDFDFDF9F9F9F9F9F9F9F9F9FDFDFDFFFFFFFFFFFFF8F8F8E3E3E3E2E2E2 - E6E6E6E9E9E9E9E9E9E8E8E8E6E6E6C3C3C3D4D4D4F8F8F8FBFBFBFFFFFFFFFF - FFFFFFFFFAFAFAEEEEEEECECECEAEAEAE9E9E9E7E7E7E7E7E7E7E7E7E7E7E7E7 - E7E7CBCBCBE7E7E7FFFFFFFFFFFFFFFFFFF8F8F8E8E8E8E5E5E5E9E9E9EDEDED - EBEBEBEBEBEBEBEBEBEAEAEADBDBDBE6E6E6F7F7F7FBFBFBFDFDFDFCFCFCFFFF - FFFFFFFFFFFFFFFCFCFCFFFFFFFFFFFFFBFBFBEEEEEEEEEEEEEFEFEFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBECECEC - EAEAEAE8E8E8D3D3D3BCBCBCDCDCDCF1F1F1F3F3F3F7F7F7F7F7F7F4F4F4F5F5 - F5F9F9F9F9F9F9FBFBFBFCFCFCFEFEFEFDFDFDF7F7F7F4F4F4F6F6F6E2E2E2E1 - E1E1F7F7F7FBFBFBFFFFFFFFFFFFFFFFFFEBEBEBE4E4E4E2E2E2D3D3D3E7E7E7 - F9F9F9F6F6F6F3F3F3F5F5F5F6F6F6F7F7F7F8F8F8F8F8F8F8F8F8F8F8F8F8F8 - F8FAFAFAEAEAEAE6E6E6E7E7E7E9E9E9E9E9E9DFDFDFC6C6C6DBDBDBF3F3F3F3 - F3F3F3F3F3F0F0F0F0F0F0F1F1F1F0F0F0EDEDEDEDEDEDEFEFEFF4F4F4EEEEEE - ECECECF5F5F5F5F5F5F5F5F5F7F7F7F8F8F8FFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFF4F4F4F4F4F4F5F5F5F6F6F6F6F6F6FFFFFFFFFFFFF3F3F3F0F0F0F0F0F0FF - FFFFF5F5F5F5F5F5F5F5F5FFFFFFFFFFFFEFEFEFEDEDEDECECECEAEAEAD3D3D3 - E3E3E3FBFBFBFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2F4F4F4F7F7F7F5F5 - F5F5F5F5F6F6F6F8F8F8F8F8F8F9F9F9F8F8F8E6E6E6E5E5E5E6E6E6E6E6E6E5 - E5E5B9B9B9CFCFCFF8F8F8F7F7F7F7F7F7F7F7F7F8F8F8F8F8F8F8F8F8F7F7F7 - F7F7F7F7F7F7F8F8F8F9F9F9F9F9F9F9F9F9F8F8F8F7F7F7FAFAFAFAFAFAF9F9 - F9FBFBFBFFFFFFF9F9F9EDEDEDECECECEAEAEAE9E9E9E9E9E9E9E9E9E9E9E9EA - EAEAEDEDEDECECECECECECEFEFEFDADADAB2B2B2C3C3C3E7E7E7F6F6F6F6F6F6 - F9F9F9FFFFFFFAFAFAE7E7E7E7E7E7E6E6E6E6E6E60000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFEF - EFEFEFEFEFECECECEAEAEAEBEBEBE9E9E9EAEAEADADADADADADADADADAB1B1B1 - D1D1D1F4F4F4F5F5F5F8F8F8F8F8F8F9F9F9F8F8F8ECECECDDDDDDE6E6E6D1D1 - D1DEDEDEECECECEBEBEBEBEBEBEBEBEBEBEBEBE9E9E9E7E7E7E7E7E7E1E1E1E9 - E9E9FFFFFFFFFFFFF7F7F7D5D5D5ABABABD0D0D0F5F5F5F7F7F7F7F7F7F8F8F8 - F8F8F8FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFF6F6F6FCFCFCFFFFFFF4F4F4D7D7D7ADADADB6B6B6E1E1E1F9F9F9FCFCFCFE - FEFEFDFDFDF9F9F9F9F9F9F9F9F9FDFDFDFFFFFFFFFFFFE6E6E6E4E4E4E4E4E4 - E8E8E8E9E9E9E9E9E9E6E6E6D2D2D2B5B5B5D7D7D7F6F6F6FFFFFFFFFFFFFFFF - FFFCFCFCEDEDEDEEEEEEECECECEAEAEAE9E9E9E9E9E9E9E9E9E9E9E9DADADACB - CBCBBCBCBCF6F6F6FFFFFFFFFFFFF8F8F8E8E8E8E8E8E8E6E6E6E5E5E5E9E9E9 - EBEBEBECECECECECECE9E9E9CECECED9D9D9F6F6F6FAFAFAFCFCFCFCFCFCFDFD - FDFFFFFFFCFCFCFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1EEEEEEEFEFEFFEFEFEFF - FFFFFFFFFFFFFFFFFFFFFFF8F8F8CFCFCFE1E1E1FCFCFCECECECE7E7E7E7E7E7 - E6E6E6D5D5D5AFAFAFBABABADFDFDFF3F3F3F5F5F5F7F7F7F7F7F7F5F5F5F7F7 - F7FCFCFCFFFFFFFFFFFFFEFEFEFDFDFDFBFBFBF5F5F5F4F4F4F7F7F7F3F3F3F2 - F2F2F7F7F7FBFBFBFFFFFFFFFFFFEDEDEDE7E7E7E0E0E0E2E2E2C1C1C1D5D5D5 - F8F8F8F0F0F0F0F0F0F4F4F4F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F7F7F7F7F7 - F7F7F7F7F4F4F4D3D3D3D3D3D3D2D2D2C3C3C3BEBEBECBCBCBE7E7E7F3F3F3F2 - F2F2F2F2F2F1F1F1F3F3F3F5F5F5F2F2F2F1F1F1F4F4F4F9F9F9FFFFFFFFFFFF - FFFFFFF6F6F6F6F6F6F6F6F6F8F8F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEAEA - EAE3E3E3F2F2F2F5F5F5F7F7F7FFFFFFFFFFFFFFFFFFF1F1F1EEEEEEEDEDEDFF - FFFFF5F5F5F5F5F5F5F5F5FFFFFFFEFEFEEDEDEDE9E9E9E7E7E7D1D1D1A4A4A4 - CFCFCFF8F8F8FAFAFAFFFFFFFFFFFFFFFFFFF9F9F9FDFDFDFFFFFFF6F6F6F4F4 - F4F3F3F3F6F6F6F8F8F8F8F8F8F9F9F9FAFAFAFAFAFAE8E8E8E6E6E6E6E6E6E3 - E3E3CFCFCFE3E3E3F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F8F8F8F8F8F8 - F8F8F8F7F7F7F7F7F7F7F7F7F7F7F7F6F6F6F4F4F4F8F8F8FBFBFBF9F9F9F9F9 - F9FDFDFDFFFFFFFFFFFFEDEDEDEAEAEAE8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8 - E8E8EAEAEAE6E6E6E1E1E1D6D6D6ACACACBEBEBEE7E7E7F7F7F7F7F7F7F7F7F7 - F9F9F9FFFFFFFFFFFFE7E7E7E7E7E7E6E6E60000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FFE5E5E5E3E3E3E4E4E4C3C3C3C2C2C2D7D7D7D7D7D7E6E6E6C6C6C6BBBBBB - DCDCDCF1F1F1F6F6F6F8F8F8F8F8F8F9F9F9FBFBFBFDFDFDF9F9F9F5F5F5EAEA - EAEAEAEAF5F5F5ECECECEBEBEBEBEBEBEBEBEBE8E8E8DADADAD2D2D2D7D7D7F7 - F7F7FFFFFFFFFFFFEAEAEABEBEBEB7B7B7DFDFDFF4F4F4F7F7F7F8F8F8FAFAFA - FAFAFAF9F9F9FBFBFBFAFAFAFFFFFFFFFFFFFFFFFFFFFFFFE2E2E2D0D0D0D3D3 - D3E6E6E6F8F8F8F7F7F7E3E3E3D4D4D4D2D2D2E0E0E0F5F5F5FEFEFEFEFEFEFE - FEFEFCFCFCFBFBFBFDFDFDFDFDFDFFFFFFFFFFFFFFFFFFEAEAEAE9E9E9E9E9E9 - E9E9E9E9E9E9E7E7E7D3D3D3B2B2B2C6C6C6E6E6E6F4F4F4FFFFFFFFFFFFFCFC - FCEDEDEDEDEDEDEEEEEEECECECEAEAEAEAEAEAD7D7D7C3C3C3C3C3C3B4B4B4C4 - C4C4D7D7D7FFFFFFFFFFFFECECECE8E8E8E8E8E8E8E8E8E3E3E3E2E2E2E7E7E7 - E9E9E9ECECECEDEDEDECECECDBDBDBE6E6E6F6F6F6F8F8F8FCFCFCFAFAFAFAFA - FAFCFCFCFBFBFBFFFFFFFFFFFFFDFDFDEEEEEEEEEEEEECECECF0F0F0F3F3F3F2 - F2F2ECECECE6E6E6D6D6D6ABABABB7B7B7EEEEEEF9F9F9E9E9E9E6E6E6E2E2E2 - D1D1D1B1B1B1BDBDBDDADADAEFEFEFF4F4F4F3F3F3F3F3F3F3F3F3F4F4F4F4F4 - F4FDFDFDFFFFFFFFFFFFFBFBFBF8F8F8F7F7F7F4F4F4F4F4F4F5F5F5F3F3F3F5 - F5F5F8F8F8FBFBFBFFFFFFFFFFFFEAEAEAE2E2E2DEDEDEE2E2E2D7D7D7E6E6E6 - F1F1F1EDEDEDF2F2F2FAFAFAFBFBFBF9F9F9F8F8F8F8F8F8F8F8F8F7F7F7F6F6 - F6F7F7F7F4F4F4DDDDDDE1E1E1C0C0C0C1C1C1D6D6D6E4E4E4F4F4F4F4F4F4F5 - F5F5F5F5F5F5F5F5F7F7F7F5F5F5F0F0F0F3F3F3F8F8F8FBFBFBFFFFFFFFFFFF - E4E4E4EAEAEAF8F8F8FFFFFFFFFFFFFFFFFFFFFFFFF9F9F9EAEAEAEAEAEAD7D7 - D7E1E1E1F1F1F1F5F5F5FFFFFFFFFFFFFFFFFFFEFEFEECECECEAEAEAE9E9E9FF - FFFFFBFBFBFBFBFBFBFBFBFFFFFFFFFFFFFBFBFBD7D7D7C4C4C4A6A6A6B7B7B7 - E3E3E3F7F7F7F9F9F9FFFFFFFFFFFFF9F9F9ECECECF7F7F7E9E9E9E6E6E6F4F4 - F4F5F5F5F7F7F7F8F8F8F8F8F8F9F9F9FBFBFBFEFEFEF9F9F9E6E6E6E5E5E5E4 - E4E4E4E4E4E6E6E6FFFFFFFFFFFFF8F8F8F9F9F9F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F6F6F6F5F5F5F7F7F7F6F6F6F7F7F7FCFCFCFDFDFDFAFAFAFBFB - FBFFFFFFFFFFFFFFFFFFECECECE8E8E8E8E8E8E8E8E8E8E8E8E7E7E7E6E6E6E6 - E6E6EAEAEAE1E1E1DFDFDFD2D2D2CDCDCDE3E3E3F8F8F8F9F9F9F9F9F9F9F9F9 - FBFBFBFFFFFFFFFFFFE8E8E8E7E7E7E5E5E50000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FFB5B5B5B8B8B8BABABAAAAAAAD1D1D1F5F5F5F5F5F5F5F5F5E1E1E1DEDEDE - EDEDEDF3F3F3F7F7F7F7F7F7F8F8F8F8F8F8FDFDFDFCFCFCF7F7F7F5F5F5F5F5 - F5F5F5F5F5F5F5FFFFFFF5F5F5E9E9E9EBEBEBE9E9E9DEDEDEE8E8E8FFFFFFFF - FFFFFFFFFFFAFAFAEAEAEABCBCBCCBCBCBF0F0F0F4F4F4F9F9F9F8F8F8F9F9F9 - F8F8F8F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFE8E8E8E4E4E4C2C2C2BEBEBED1D1 - D1E6E6E6F9F9F9F7F7F7F3F3F3F3F3F3F4F4F4F3F3F3F7F7F7FCFCFCFCFCFCFB - FBFBFBFBFBFEFEFEFEFEFEFDFDFDFCFCFCFFFFFFFFFFFFEAEAEAEAEAEAE9E9E9 - E9E9E9E8E8E8D7D7D7B2B2B2C2C2C2E7E7E7F5F5F5F5F5F5FFFFFFFFFFFFECEC - ECECECECECECECECECECEAEAEAD5D5D5C1C1C1ACACACBDBDBDD2D2D2D5D5D5E6 - E6E6F4F4F4FFFFFFFFFFFFECECECE8E8E8E6E6E6E3E3E3E1E1E1E5E5E5EAEAEA - E9E9E9ECECECEDEDEDEAEAEAE9E9E9DCDCDCE9E9E9F9F9F9FCFCFCF9F9F9F9F9 - F9FCFCFCFCFCFCFFFFFFFFFFFFECECECECECECEDEDEDEDEDEDEEEEEEEFEFEFEC - ECECE9E9E9E7E7E7C4C4C4B5B5B5DEDEDEFEFEFEE4E4E4D9D9D9E8E8E8D3D3D3 - B5B5B5C6C6C6E0E0E0EDEDEDF3F3F3F5F5F5F6F6F6F6F6F6F6F6F6FBFBFBFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFF5F5F5F5F5F5F3F3F3F4F4F4F4F4F4F6F6F6F9 - F9F9FAFAFAF9F9F9FFFFFFFFFFFFE8E8E8E0E0E0DFDFDFE6E6E6E9E9E9D5D5D5 - E2E2E2F5F5F5FAFAFAFFFFFFFDFDFDFBFBFBF9F9F9F8F8F8F8F8F8F7F7F7F7F7 - F7F5F5F5EEEEEEF0F0F0F6F6F6E7E7E7E8E8E8F7F7F7F8F8F8F8F8F8F6F6F6F7 - F7F7F7F7F7F7F7F7F7F7F7F4F4F4F2F2F2F5F5F5F9F9F9F8F8F8FDFDFDF0F0F0 - DEDEDEECECECFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7E7E7E7E8E8E8E9E9E9E4E4 - E4E0E0E0FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFF0F0F0EBEBEBE9E9E9E9E9E9FF - FFFFEFEFEFF5F5F5F3F3F3FFFFFFF9F9F9D5D5D5AFAFAFBCBCBCC9C9C9DFDFDF - F7F7F7F7F7F7FFFFFFFFFFFFFFFFFFECECECECECECEBEBEBDBDBDBE5E5E5F3F3 - F3F6F6F6F8F8F8F8F8F8F8F8F8F9F9F9FAFAFAFCFCFCF9F9F9F4F4F4D5D5D5C0 - C0C0D4D4D4E7E7E7F9F9F9FAFAFAFFFFFFFFFFFFF7F7F7F7F7F7F7F7F7F7F7F7 - F5F5F5F5F5F5F6F6F6F6F6F6F8F8F8F9F9F9F9F9F9FEFEFEFDFDFDF9F9F9FAFA - FAFFFFFFFFFFFFFCFCFCEAEAEAE8E8E8E8E8E8E8E8E8E8E8E8E6E6E6E4E4E4E6 - E6E6E7E7E7E1E1E1E3E3E3EAEAEADCDCDCE7E7E7F9F9F9FAFAFAF8F8F8F9F9F9 - F9F9F9FFFFFFFFFFFFE8E8E8E6E6E6E6E6E60000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FFCACACACCCCCCCECECEE4E4E4F5F5F5F5F5F5F5F5F5F1F1F1EDEDED - EEEEEEF6F6F6F9F9F9FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFF5F5F5F5F5F5F5F5 - F5F3F3F3F0F0F0FFFFFFF3F3F3DCDCDCEDEDEDEBEBEBDCDCDCECECECFFFFFFFF - FFFFF3F3F3ECECECEAEAEABCBCBCCACACAF4F4F4F9F9F9FCFCFCFCFCFCF9F9F9 - F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFBFBFBE7E7E7E7E7E7D7D7D7E4E4E4F5F5 - F5F9F9F9F9F9F9F7F7F7F6F6F6F6F6F6F6F6F6F4F4F4F6F6F6FAFAFAF9F9F9F9 - F9F9FBFBFBFBFBFBFBFBFBF8F8F8F8F8F8FFFFFFFCFCFCEAEAEAEAEAEAE9E9E9 - E8E8E8E6E6E6C7C7C7C2C2C2E4E4E4F6F6F6F7F7F7F7F7F7FFFFFFFFFFFFF0F0 - F0EDEDEDEBEBEBE9E9E9D7D7D7ACACACBDBDBDD1D1D1E4E4E4F8F8F8F8F8F8F8 - F8F8F9F9F9FFFFFFF8F8F8E9E9E9E6E6E6CECECECFCFCFE2E2E2E7E7E7EAEAEA - EAEAEAEAEAEAEAEAEAE8E8E8E9E9E9CCCCCCDCDCDCFFFFFFFFFFFFFFFFFFF5F5 - F5F9F9F9F9F9F9FFFFFFFFFFFFEBEBEBEBEBEBECECECECECECECECECECECECEB - EBEBEAEAEAD7D7D7ABABABCACACAF3F3F3F4F4F4E6E6E6E7E7E7DADADABABABA - C9C9C9E8E8E8F2F2F2F1F1F1F6F6F6F8F8F8F9F9F9F9F9F9FCFCFCFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFF9F9F9F5F5F5F5F5F5F3F3F3F5F5F5F5F5F5F7F7F7FA - FAFAFAFAFAFAFAFAFDFDFDFEFEFEE6E6E6E1E1E1E1E1E1E3E3E3E4E4E4C1C1C1 - D4D4D4F6F6F6FCFCFCFFFFFFFDFDFDFAFAFAF8F8F8F8F8F8F8F8F8F7F7F7F8F8 - F8F3F3F3F0F0F0F6F6F6FBFBFBFBFBFBFBFBFBFCFCFCFEFEFEFFFFFFFCFCFCF8 - F8F8F7F7F7F7F7F7F7F7F7F7F7F7F4F4F4F7F7F7F9F9F9F8F8F8FAFAFAFFFFFF - FCFCFCF6F6F6FFFFFFFFFFFFF4F4F4E3E3E3E1E1E1E1E1E1E2E2E2E4E4E4CFCF - CFBEBEBED9D9D9FBFBFBFFFFFFFCFCFCEFEFEFEFEFEFECECECE9E9E9E9E9E9FF - FFFFEAEAEAEEEEEEF0F0F0EFEFEFE1E1E1CFCFCFCECECEDEDEDEEDEDEDF1F1F1 - F7F7F7FFFFFFFFFFFFFFFFFFFCFCFCECECECECECECECECECEAEAEAD9D9D9E6E6 - E6F7F7F7F8F8F8F8F8F8F8F8F8F9F9F9F9F9F9FBFBFBF9F9F9F5F5F5E3E3E3D1 - D1D1F4F4F4F8F8F8E8E8E8E8E8E8F7F7F7F7F7F7F3F3F3F4F4F4F6F6F6F7F7F7 - F5F5F5F5F5F5F5F5F5F6F6F6F8F8F8F8F8F8F9F9F9FBFBFBFAFAFAF8F8F8FFFF - FFFFFFFFFFFFFFECECECE8E8E8E8E8E8E8E8E8E6E6E6E4E4E4E2E2E2E4E4E4E6 - E6E6E6E6E6E2E2E2E6E6E6EAEAEACCCCCCD9D9D9F7F7F7F7F7F7F5F5F5F6F6F6 - F6F6F6FFFFFFF8F8F8E6E6E6E6E6E6E5E5E50000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FFEFEFEFF0F0F0F3F3F3F1F1F1F1F1F1F1F1F1EDEDEDEAEAEA - F0F0F0F8F8F8FAFAFAFCFCFCFFFFFFFFFFFFFFFFFFFCFCFCF5F5F5F4F4F4F5F5 - F5F0F0F0EFEFEFFFFFFFD8D8D8DBDBDBE2E2E2D1D1D1C1C1C1ECECECFFFFFFF4 - F4F4EDEDEDEAEAEAE9E9E9D3D3D3E2E2E2F9F9F9FBFBFBFDFDFDFFFFFFFFFFFF - FDFDFDFFFFFFFFFFFFFFFFFFFDFDFDE9E9E9E7E7E7E7E7E7E7E7E7D7D7D7E9E9 - E9FDFDFDFDFDFDFCFCFCFCFCFCFAFAFAF8F8F8F6F6F6F8F8F8FAFAFAF8F8F8F9 - F9F9FAFAFAF8F8F8F8F8F8F8F8F8F8F8F8F8F8F8FFFFFFFCFCFCECECECEFEFEF - EDEDEDDADADABABABAD5D5D5F4F4F4F7F7F7F7F7F7FFFFFFFFFFFFFFFFFFF1F1 - F1EDEDEDEBEBEBD9D9D9B0B0B0C0C0C0E6E6E6F8F8F8F8F8F8F9F9F9F8F8F8F7 - F7F7FBFBFBF7F7F7F0F0F0D5D5D5BEBEBEA5A5A5CACACAD4D4D4C3C3C3D5D5D5 - E8E8E8EAEAEAEAEAEAE9E9E9EBEBEBCACACADADADAFFFFFFFFFFFFCCCCCCDCDC - DCF4F4F4F4F4F4FFFFFFFFFFFFEBEBEBEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEA - EAEAEAEAEAC1C1C1BABABAE4E4E4F8F8F8F9F9F9FBFBFBF9F9F9ECECECDCDCDC - E7E7E7F5F5F5F2F2F2EFEFEFF4F4F4F8F8F8F8F8F8F7F7F7FFFFFFFFFFFFFFFF - FFFCFCFCE9E9E9E8E8E8E7E7E7D1D1D1DCDCDCF0F0F0F5F5F5F8F8F8FAFAFAFD - FDFDFDFDFDFDFDFDFEFEFEFDFDFDFFFFFFFBFBFBE4E4E4E4E4E4E3E3E3C2C2C2 - D3D3D3F5F5F5FCFCFCFEFEFEFAFAFAF8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F7F7 - F7F4F4F4F6F6F6FAFAFAFBFBFBFBFBFBFCFCFCFEFEFEFFFFFFFFFFFFFEFEFEFB - FBFBF9F9F9F8F8F8F7F7F7F7F7F7F3F3F3F5F5F5F9F9F9F8F8F8F9F9F9FEFEFE - F4F4F4EEEEEEFFFFFFFFFFFFF4F4F4E4E4E4E3E3E3E4E4E4D5D5D5C5C5C5AFAF - AFC3C3C3DEDEDEF7F7F7F8F8F8EDEDEDECECECEEEEEEE7E7E7E2E2E2E2E2E2FF - FFFFF1F1F1F2F2F2F3F3F3F3F3F3F3F3F3F3F3F3F1F1F1F0F0F0F0F0F0F3F3F3 - F7F7F7FFFFFFFFFFFFFFFFFFEEEEEEECECECECECECECECECEAEAEAC5C5C5D5D5 - D5F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F9F9F9FCFCFCF9F9F9F5F5F5F5F5F5F4 - F4F4FFFFFFFFFFFFE7E7E7E7E7E7E6E6E6E7E7E7D7D7D7E2E2E2F5F5F5F6F6F6 - F4F4F4F4F4F4F5F5F5F7F7F7F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8FFFF - FFFFFFFFFEFEFEEAEAEAE8E8E8E8E8E8E6E6E6E2E2E2E2E2E2E2E2E2E4E4E4E7 - E7E7E7E7E7E6E6E6E8E8E8EAEAEACCCCCCD9D9D9F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F4F4F4D8D8D8C4C4C4D0D0D00000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FFF6F6F6F8F8F8F7F7F7F2F2F2F3F3F3F3F3F3F0F0F0EEEEEE - F4F4F4FAFAFAFAFAFAFBFBFBFFFFFFFFFFFFEEEEEEEDEDEDEBEBEBF4F4F4F5F5 - F5F0F0F0F0F0F0F5F5F5E6E6E6EDEDEDFEFEFEFBFBFBF7F7F7FFFFFFFFFFFFEE - EEEEEAEAEAE9E9E9E9E9E9D4D4D4BCBCBCE2E2E2FAFAFAFEFEFEFFFFFFFDFDFD - FBFBFBFFFFFFFFFFFFFFFFFFECECECE9E9E9E7E7E7E7E7E7D6D6D6B5B5B5D7D7 - D7FBFBFBF9F9F9F9F9F9FAFAFAF9F9F9F7F7F7F7F7F7F8F8F8FAFAFAF9F9F9F8 - F8F8F8F8F8F8F8F8F8F8F8F8F8F8FFFFFFFFFFFFFFFFFFFFFFFFEFEFEFF0F0F0 - EAEAEAC7C7C7C6C6C6E6E6E6F5F5F5F7F7F7F8F8F8FFFFFFFFFFFFFEFEFEEEEE - EEE9E9E9D9D9D9B5B5B5C2C2C2E7E7E7F8F8F8F8F8F8F9F9F9FAFAFAF8F8F8F7 - F7F7FBFBFBF3F3F3EEEEEEDEDEDEC6C6C6C3C3C3DADADAE0E0E0D2D2D2E4E4E4 - D6D6D6C3C3C3C3C3C3C3C3C3C6C6C6B2B2B2D5D5D5FFFFFFF8F8F8C8C8C8DDDD - DDF3F3F3F4F4F4FFFFFFFFFFFFEAEAEAEAEAEAEBEBEBEAEAEAEAEAEAEAEAEAEA - EAEAEAEAEAC1C1C1D0D0D0F8F8F8F9F9F9FAFAFAFDFDFDFFFFFFFFFFFFFFFFFF - F5F5F5F5F5F5F0F0F0EEEEEEF4F4F4F7F7F7F7F7F7F8F8F8FFFFFFFFFFFFFDFD - FDE8E8E8E7E7E7E7E7E7D3D3D3A4A4A4C8C8C8F0F0F0F5F5F5F9F9F9FAFAFAFD - FDFDFEFEFEFDFDFDFDFDFDFEFEFEFFFFFFFFFFFFE6E6E6E6E6E6E1E1E1C1C1C1 - D5D5D5F7F7F7F9F9F9FCFCFCFAFAFAF9F9F9F8F8F8F8F8F8F8F8F8F8F8F8F7F7 - F7F8F8F8F8F8F8FBFBFBFCFCFCFCFCFCFEFEFEFFFFFFFFFFFFFEFEFEFFFFFFFF - FFFFFFFFFFFFFFFFFBFBFBF9F9F9F6F6F6F6F6F6F8F8F8F6F6F6F7F7F7F9F9F9 - F3F3F3F9F9F9FFFFFFFFFFFFF7F7F7EAEAEAEAEAEADADADAB7B7B7C3C3C3D3D3 - D3E9E9E9F9F9F9FFFFFFF9F9F9EDEDEDECECECEEEEEED3D3D3BEBEBEBBBBBBFF - FFFFF0F0F0EFEFEFEFEFEFF1F1F1F1F1F1F0F0F0F0F0F0F0F0F0F1F1F1F5F5F5 - FFFFFFFFFFFFFFFFFFF1F1F1EDEDEDEAEAEAEAEAEAE9E9E9E7E7E7C1C1C1D3D3 - D3F7F7F7F7F7F7F8F8F8F8F8F8F8F8F8FBFBFBFCFCFCF8F8F8F6F6F6F6F6F6F5 - F5F5FFFFFFFFFFFFE7E7E7E7E7E7E7E7E7E5E5E5C3C3C3D2D2D2F4F4F4F4F4F4 - F4F4F4F3F3F3F5F5F5F7F7F7F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8FFFF - FFFFFFFFECECECE8E8E8E8E8E8D5D5D5BFBFBFBEBEBEC0C0C0C6C6C6CACACADA - DADAE9E9E9E9E9E9EAEAEAEAEAEACDCDCDD8D8D8F5F5F5F6F6F6F5F5F5F5F5F5 - F5F5F5F5F5F5F6F6F6E6E6E6D1D1D1DEDEDE0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FFFCFCFCF8F8F8F5F5F5F7F7F7F6F6F6F5F5F5F3F3F3 - F7F7F7FAFAFAFAFAFAFDFDFDFFFFFFFFFFFFECECECEBEBEBEAEAEADBDBDBE4E4 - E4EBEBEBEFEFEFF5F5F5F9F9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBEC - ECECE8E8E8E7E7E7D6D6D6A7A7A7B6B6B6E2E2E2FBFBFBFEFEFEFCFCFCFBFBFB - FFFFFFFFFFFFFFFFFFEEEEEEECECECEAEAEAE9E9E9E8E8E8C6C6C6C3C3C3E8E8 - E8FAFAFAF9F9F9F9F9F9F8F8F8F7F7F7F7F7F7F7F7F7F7F7F7F8F8F8F8F8F8F9 - F9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEEDEDEDE9E9E9 - E2E2E2D2D2D2E1E1E1F4F4F4F5F5F5F7F7F7F8F8F8FFFFFFFFFFFFF0F0F0EEEE - EEE6E6E6CACACAC5C5C5E4E4E4F8F8F8F8F8F8F9F9F9FAFAFAF9F9F9F8F8F8F7 - F7F7FFFFFFFFFFFFF3F3F3EDEDEDEBEBEBF0F0F0F3F3F3F5F5F5F7F7F7F5F5F5 - E3E3E3D3D3D3D2D2D2D1D1D1D3D3D3D1D1D1E4E4E4FFFFFFE4E4E4B5B5B5DDDD - DDF5F5F5FBFBFBFFFFFFFFFFFFEAEAEAEBEBEBECECECECECECECECECECECECEB - EBEBEAEAEAC1C1C1D3D3D3F9F9F9FAFAFAFCFCFCFEFEFEFFFFFFFFFFFFFFFFFF - F5F5F5F3F3F3ECECECF0F0F0F7F7F7F7F7F7F8F8F8F9F9F9FFFFFFFFFFFFE9E9 - E9D5D5D5C1C1C1C1C1C1A8A8A8B1B1B1DFDFDFF4F4F4F7F7F7FBFBFBFBFBFBFE - FEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFAE6E6E6DFDFDFD4D4D4 - E9E9E9F9F9F9F7F7F7F8F8F8F8F8F8F8F8F8F8F8F8F9F9F9F9F9F9F9F9F9F9F9 - F9FAFAFAF9F9F9FAFAFAFEFEFEFDFDFDFFFFFFFFFFFFFEFEFEFCFCFCFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7F6F6F6F8F8F8F9F9F9 - F9F9F9FFFFFFFFFFFFFFFFFFEAEAEAEAEAEAEAEAEAC8C8C8C3C3C3E5E5E5F4F4 - F4F8F8F8F7F7F7F7F7F7F7F7F7E2E2E2D4D4D4D0D0D0B5B5B5BABABAD2D2D2FF - FFFFF4F4F4F2F2F2F2F2F2F4F4F4F3F3F3F3F3F3F4F4F4F4F4F4FFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFF0F0F0ECECECE9E9E9E8E8E8E8E8E8E7E7E7C1C1C1D3D3 - D3F7F7F7F8F8F8F8F8F8F8F8F8F8F8F8FBFBFBFCFCFCF8F8F8F7F7F7F7F7F7F5 - F5F5FFFFFFFFFFFFE9E9E9E9E9E9E7E7E7E3E3E3BEBEBED0D0D0F1F1F1F2F2F2 - F2F2F2F4F4F4F6F6F6F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8FFFF - FFFDFDFDEAEAEAE8E8E8D6D6D6ABABABB9B9B9CECECED1D1D1D7D7D7D7D7D7E3 - E3E3D6D6D6C5C5C5C5C5C5C8C8C8BABABAD6D6D6F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F4F4F4F1F1F1EFEFEFF0F0F00000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FFF9F9F9FAFAFAFAFAFAF8F8F8F8F8F8F7F7F7 - F8F8F8FCFCFCFEFEFEFFFFFFFFFFFFFFFFFFECECECEAEAEAEAEAEACCCCCCD1D1 - D1EDEDEDF3F3F3F7F7F7FEFEFEFFFFFFFFFFFFF8F8F8E3E3E3E7E7E7E9E9E9E9 - E9E9E6E6E6D5D5D5ACACACB7B7B7DFDFDFF4F4F4F7F7F7FBFBFBFBFBFBFBFBFB - FFFFFFFFFFFFFDFDFDEBEBEBECECECEBEBEBE9E9E9E8E8E8C7C7C7D5D5D5F8F8 - F8FBFBFBFAFAFAF9F9F9F8F8F8F7F7F7F7F7F7F7F7F7F9F9F9FBFBFBFDFDFDFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF0F0F0F4F4F4EEEEEEE6E6E6 - E3E3E3E3E3E3DADADAE7E7E7F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFF1F1F1EEEE - EEDDDDDDC3C3C3DBDBDBF6F6F6FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7F7 - F7F7FFFFFFFBFBFBE1E1E1EEEEEEF1F1F1FAFAFAFBFBFBFAFAFAFAFAFAF8F8F8 - F8F8F8F8F8F8F7F7F7F8F8F8F8F8F8F7F7F7F7F7F7F7F7F7E1E1E1C9C9C9DDDD - DDF5F5F5FAFAFAFFFFFFFFFFFFE9E9E9EAEAEAEAEAEAEAEAEAECECECECECECEB - EBEBEAEAEAC4C4C4D6D6D6FCFCFCFDFDFDFEFEFEFFFFFFFFFFFFFFFFFFEEEEEE - EFEFEFF4F4F4EEEEEEF3F3F3F7F7F7F7F7F7F8F8F8FAFAFAFFFFFFEAEAEABFBF - BFA9A9A9B7B7B7CBCBCBC6C6C6DADADAF3F3F3F7F7F7F9F9F9FBFBFBFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE2E2E2E1E1E1E1E1E1 - E9E9E9FFFFFFFFFFFFF8F8F8F7F7F7F7F7F7F8F8F8F9F9F9FAFAFAFBFBFBFBFB - FBFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFFFFFFFEFEFEFBFBFBFFFFFFFFFFFFFF - FFFFFFFFFFF9F9F9FCFCFCFFFFFFFFFFFFE4E4E4D9D9D9F5F5F5FBFBFBFBFBFB - FCFCFCFFFFFFFFFFFFFFFFFFEAEAEAEAEAEAE7E7E7C5C5C5D5D5D5F7F7F7F7F7 - F7F8F8F8F9F9F9F8F8F8F7F7F7EAEAEAD9D9D9D7D7D7D3D3D3E6E6E6FCFCFCFF - FFFFFCFCFCF9F9F9F7F7F7F8F8F8F8F8F8F9F9F9FFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFDFDFDEFEFEFEDEDEDE9E9E9E8E8E8E8E8E8E8E8E8E8E8E8D2D2D2E2E2 - E2F7F7F7F9F9F9F9F9F9F8F8F8F9F9F9FCFCFCFCFCFCF8F8F8F7F7F7FFFFFFFF - FFFFFFFFFFFFFFFFEAEAEAE8E8E8E6E6E6D0D0D0A6A6A6CECECEF0F0F0F3F3F3 - F5F5F5F7F7F7F8F8F8F8F8F8F8F8F8F7F7F7F7F7F7F8F8F8F8F8F8F8F8F8F8F8 - F8F9F9F9D8D8D8C0C0C0A9A9A9B6B6B6DFDFDFF4F4F4F5F5F5F7F7F7F5F5F5F1 - F1F1E1E1E1D1D1D1D4D4D4D6D6D6D7D7D7E5E5E5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F3F3F3F0F0F0F0F0F0F2F2F2F3F3F30000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FFFCFCFCFBFBFBF8F8F8F8F8F8F8F8F8 - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBEBEBEAEAEAEAEAEADCDCDCDFDF - DFECECECF1F1F1F7F7F7FEFEFEFFFFFFFFFFFFF6F6F6E1E1E1E4E4E4E7E7E7E7 - E7E7D1D1D1ABABABB6B6B6DCDCDCF0F0F0F4F4F4F7F7F7F9F9F9FAFAFAFBFBFB - FFFFFFFFFFFFFEFEFEF1F1F1EDEDEDEAEAEAE9E9E9E9E9E9C8C8C8D7D7D7F7F7 - F7F8F8F8F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7FBFBFBFCFCFCFFFFFFFF - FFFFFFFFFFFDFDFDF1F1F1EFEFEFEDEDEDEEEEEEF1F1F1F9F9F9F4F4F4EAEAEA - E7E7E7E7E7E7DADADAE7E7E7F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFEEEEEEEDED - EDDFDFDFD9D9D9F5F5F5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFCFCFCF7F7F7FFFFFFF2F2F2F9F9F9F9F9F9F9F9F9F9F9F9FBFBFB - FBFBFBFCFCFCFCFCFCFCFCFCFBFBFBF8F8F8F8F8F8F9F9F9F8F8F8F6F6F6F5F5 - F5F7F7F7F9F9F9FBFBFBFFFFFFFDFDFDEAEAEAEBEBEBEAEAEAEAEAEAEAEAEAEA - EAEAEAEAEAC7C7C7D7D7D7FAFAFAFCFCFCFCFCFCFFFFFFFFFFFFFFFFFFE9E9E9 - ECECECD3D3D3DEDEDEF5F5F5F7F7F7F7F7F7F9F9F9F9F9F9F8F8F8E3E3E3D0D0 - D0CACACADCDCDCF0F0F0EFEFEFF1F1F1F5F5F5F7F7F7F8F8F8FAFAFAFFFFFFFF - FFFFFFFFFFFFFFFFFDFDFDFFFFFFFFFFFFFFFFFFF8F8F8E4E4E4E4E4E4E0E0E0 - E1E1E1E6E6E6DDDDDDEAEAEAF8F8F8F9F9F9F9F9F9F9F9F9F9F9F9FFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC - FCFCE7E7E7E3E3E3E3E3E3E5E5E5CACACA898989BABABAF3F3F3FBFBFBFCFCFC - FCFCFCFFFFFFFFFFFFFFFFFFEBEBEBE6E6E6D5D5D5B7B7B7D8D8D8F7F7F7F7F7 - F7F9F9F9FAFAFAF7F7F7F5F5F5F4F4F4F2F2F2F1F1F1F2F2F2F7F7F7FCFCFCFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFB - F0F0F0EDEDEDDEDEDECCCCCCDADADAE8E8E8E8E8E8E8E8E8E6E6E6CECECEC0C0 - C0E7E7E7F8F8F8FAFAFAFBFBFBFCFCFCFDFDFDFDFDFDF9F9F9FFFFFFFFFFFFFF - FFFFFFFFFFFCFCFCE9E9E9E7E7E7E7E7E7BBBBBBB4B4B4DEDEDEF3F3F3F7F7F7 - F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F7F7F7F8F8F8F7F7F7F7F7F7F8F8F8F8F8 - F8FAFAFAE9E9E9CDCDCDCCCCCCE1E1E1F4F4F4F7F7F7F7F7F7F7F7F7F6F6F6F3 - F3F3F3F3F3F5F5F5F7F7F7F8F8F8F7F7F7F7F7F7F5F5F5F5F5F5F5F5F5F4F4F4 - F1F1F1F1F1F1F0F0F0F3F3F3F7F7F7F7F7F70000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FFFEFEFEFAFAFAFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEEDEDEDEAEAEAEAEAEAEAEAEAD9D9D9BCBC - BCDBDBDBF3F3F3F9F9F9FFFFFFFFFFFFFFFFFFF8F8F8E4E4E4E4E4E4E7E7E7CF - CFCFA1A1A1B6B6B6DCDCDCF1F1F1F6F6F6F8F8F8FAFAFAFAFAFAFAFAFAFAFAFA - FFFFFFFFFFFFFFFFFFF2F2F2EDEDEDE9E9E9E8E8E8D7D7D7B4B4B4D2D2D2F4F4 - F4F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7FCFCFCFFFFFFFFFFFFFF - FFFFF9F9F9EDEDEDEDEDEDEEEEEEEEEEEEEEEEEEF4F4F4F8F8F8F3F3F3EAEAEA - EAEAEAEAEAEAE9E9E9EAEAEAF5F5F5FFFFFFFFFFFFFFFFFFF8F8F8ECECECEDED - EDEDEDEDE9E9E9FFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF2F2F2F8F8F8FFFFFFFF - FFFFFFFFFFFCFCFCFBFBFBF7F7F7F6F6F6F9F9F9F9F9F9FAFAFAFBFBFBFCFCFC - FBFBFBFFFFFFFFFFFFFCFCFCFBFBFBF9F9F9F9F9F9F9F9F9F8F8F8F7F7F7F5F5 - F5F7F7F7FAFAFAFBFBFBFFFFFFFFFFFFEDEDEDEEEEEEEAEAEAEAEAEAEBEBEBEB - EBEBEAEAEAD9D9D9E6E6E6F8F8F8F9F9F9FAFAFAFFFFFFFFFFFFF3F3F3E5E5E5 - E4E4E4B7B7B7CBCBCBF7F7F7F8F8F8F9F9F9F9F9F9F8F8F8F7F7F7F7F7F7F7F7 - F7F3F3F3F3F3F3F5F5F5F3F3F3F2F2F2EFEFEFF6F6F6FAFAFAFEFEFEFFFFFFFF - FFFFFDFDFDF0F0F0EDEDEDFCFCFCFFFFFFFAFAFAE7E7E7E6E6E6E3E3E3DCDCDC - D1D1D1BFBFBFCECECEE9E9E9F8F8F8FAFAFAFAFAFAFAFAFAFAFAFAFFFFFFFFFF - FFFFFFFFF9F9F9F0F0F0F0F0F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEE8 - E8E8E6E6E6E4E4E4E3E3E3E1E1E1A8A8A8A2A2A2D9D9D9F9F9F9FCFCFCFDFDFD - FFFFFFFFFFFFFFFFFFF1F1F1ECECECE1E1E1C6C6C6CACACAE9E9E9F7F7F7F7F7 - F7F9F9F9F9F9F9F6F6F6F5F5F5F3F3F3F1F1F1F1F1F1F4F4F4F7F7F7FBFBFBFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBF0F0F0EEEEEE - EDEDEDEBEBEBCFCFCFCACACAE7E7E7D9D9D9C5C5C5D3D3D3E1E1E1D0D0D0E2E2 - E2F7F7F7FBFBFBFEFEFEFEFEFEFCFCFCFDFDFDFBFBFBFAFAFAFFFFFFFFFFFFFF - FFFFECECECE8E8E8E5E5E5D0D0D0B7B7B79A9A9AC6C6C6F3F3F3F7F7F7F8F8F8 - F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F7F7F7F8F8F8F8F8F8F8F8 - F8F9F9F9F9F9F9F5F5F5F4F4F4F7F7F7F8F8F8F8F8F8F7F7F7F7F7F7F4F4F4F3 - F3F3F5F5F5F8F8F8F8F8F8F8F8F8F9F9F9F8F8F8F7F7F7F4F4F4F3F3F3F1F1F1 - F1F1F1F2F2F2F4F4F4F7F7F7F7F7F7F6F6F60000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FFFDFDFDFFFFFFFFFFFFFFFFFF - FFFFFFF9F9F9EAEAEAEBEBEBEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAC4C4C4B7B7 - B7DFDFDFF7F7F7FFFFFFFFFFFFFFFFFFFFFFFFE6E6E6E4E4E4E4E4E4CECECE9D - 9D9DB6B6B6E3E3E3F6F6F6F9F9F9FAFAFAFAFAFAFBFBFBFBFBFBFBFBFBFCFCFC - FFFFFFFFFFFFFEFEFEEFEFEFEAEAEAD7D7D7C4C4C4B2B2B2C1C1C1E2E2E2F4F4 - F4F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F9F9F9FBFBFBFEFEFEFFFFFFFFFFFFF9 - F9F9ECECECEAEAEAEBEBEBEDEDEDEDEDEDF3F3F3F7F7F7F3F3F3EBEBEBE7E7E7 - E8E8E8E9E9E9E9E9E9E9E9E9DCDCDCFCFCFCFFFFFFEBEBEBEBEBEBEDEDEDEEEE - EEEEEEEEEEEEEEFCFCFCFBFBFBF0F0F0F1F1F1EEEEEEEFEFEFF5F5F5F3F3F3ED - EDEDE9E9E9E7E7E7E7E7E7E7E7E7E4E4E4F7F7F7FAFAFAFBFBFBFBFBFBFDFDFD - FFFFFFFFFFFFFFFFFFFCFCFCFAFAFAF9F9F9F8F8F8F7F7F7F7F7F7F5F5F5F5F5 - F5F7F7F7F7F7F7F9F9F9FBFBFBFCFCFCEFEFEFEEEEEEEDEDEDEDEDEDEDEDEDEC - ECECEAEAEAEAEAEAD9D9D9E7E7E7F8F8F8F8F8F8FFFFFFFFFFFFE4E4E4DDDDDD - DFDFDFCBCBCBF1F1F1FFFFFFFFFFFFFBFBFBF8F8F8F7F7F7F7F7F7F6F6F6F5F5 - F5F4F4F4F4F4F4F4F4F4F5F5F5F1F1F1F4F4F4FEFEFEFEFEFEFFFFFFFFFFFFFF - FFFFEDEDEDEAEAEAEAEAEAECECECF0F0F0EDEDEDD7D7D7C3C3C3BEBEBEBCBCBC - B7B7B7CDCDCDE9E9E9F3F3F3F4F4F4F8F8F8F8F8F8F8F8F8F9F9F9FFFFFFFFFF - FFEDEDEDEEEEEEF0F0F0F0F0F0F1F1F1F2F2F2EEEEEEEBEBEBEAEAEAEAEAEAE8 - E8E8E6E6E6E4E4E4E2E2E2CACACA929292C6C6C6F7F7F7FAFAFAFBFBFBFFFFFF - FFFFFFFFFFFFFFFFFFEDEDEDE9E9E9D4D4D4BEBEBEDEDEDEF7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F6F6F6F5F5F5F4F4F4F7F7F7F5F5F5F8F8F8FFFFFFFFFFFFFF - FFFFFBFBFBF8F8F8F5F5F5F6F6F6F0F0F0EBEBEBEBEBEBEBEBEBEBEBEBE9E9E9 - E8E8E8DCDCDCC1C1C1D9D9D9F4F4F4E6E6E6E2E2E2FEFEFEF4F4F4E7E7E7FAFA - FAFCFCFCF9F9F9FEFEFEFDFDFDF9F9F9F9F9F9FAFAFAFAFAFAFFFFFFFFFFFFED - EDEDE9E9E9E4E4E4E1E1E1B6B6B6AFAFAFC7C7C7DFDFDFF7F7F7F8F8F8F8F8F8 - F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F9F9F9F8F8 - F8F9F9F9FAFAFAF8F8F8F9F9F9FBFBFBFCFCFCF8F8F8F5F5F5F7F7F7F4F4F4F5 - F5F5F7F7F7F8F8F8F8F8F8F8F8F8F9F9F9F9F9F9F7F7F7F5F5F5F4F4F4F4F4F4 - F4F4F4F7F7F7F7F7F7F7F7F7F7F7F7F7F7F70000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFFFFFFFFFFFFFFF - EBEBEBE9E9E9E9E9E9EAEAEAEAEAEAD9D9D9C6C6C6C6C6C6C4C4C4ABABABCBCB - CBF5F5F5FFFFFFFFFFFFFFFFFFFFFFFFF8F8F8E6E6E6E5E5E5CDCDCD9C9C9CB6 - B6B6E6E6E6FBFBFBFBFBFBFBFBFBFAFAFAFAFAFAFDFDFDFCFCFCFCFCFCFEFEFE - FFFFFFFFFFFFFCFCFCF9F9F9D7D7D7AFAFAFC0C0C0D4D4D4E5E5E5F5F5F5F5F5 - F5F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFEA - EAEAEAEAEAECECECECECECEBEBEBEBEBEBEEEEEEF0F0F0F0F0F0EEEEEEEDEDED - E9E9E9E7E7E7E9E9E9E9E9E9CACACAE1E1E1E6E6E6DBDBDBECECECEFEFEFEEEE - EEECECECECECECEBEBEBE9E9E9EAEAEAECECECEAEAEAECECECF2F2F2EEEEEEE9 - E9E9E9E9E9E7E7E7E7E7E7E6E6E6D0D0D0BBBBBBE7E7E7FDFDFDFFFFFFFFFFFF - FFFFFFFFFFFFF4F4F4EDEDEDF8F8F8F8F8F8F8F8F8F9F9F9FBFBFBF8F8F8F6F6 - F6F7F7F7F8F8F8F9F9F9FCFCFCFEFEFEFFFFFFFFFFFFF0F0F0EDEDEDEAEAEAE8 - E8E8E9E9E9E5E5E5CFCFCFE2E2E2F7F7F7F9F9F9FFFFFFF0F0F0DADADAD4D4D4 - D1D1D1E0E0E0F9F9F9FFFFFFFFFFFFF9F9F9F8F8F8F8F8F8F7F7F7F4F4F4F4F4 - F4F3F3F3F4F4F4F3F3F3F3F3F3F0F0F0F8F8F8FFFFFFFCFCFCFFFFFFFFFFFFFF - FFFFE7E7E7EAEAEAEAEAEAE8E8E8EBEBEBE7E7E7BFBFBFB7B7B7CACACACECECE - D7D7D7E6E6E6F3F3F3F2F2F2F2F2F2F4F4F4F4F4F4F4F4F4F5F5F5FFFFFFF8F8 - F8EDEDEDEEEEEEEEEEEEECECECECECECEEEEEEECECECE9E9E9E9E9E9E9E9E9E7 - E7E7E6E6E6E4E4E4CECECEA0A0A0B3B3B3E1E1E1F7F7F7F8F8F8F8F8F8FBFBFB - FDFDFDFFFFFFFFFFFFF1F1F1EDEDEDCBCBCBD0D0D0EDEDEDF7F7F7F7F7F7F7F7 - F7F7F7F7F8F8F8F5F5F5F3F3F3F3F3F3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFF5F5F5F0F0F0ECECECECECECEAEAEAEAEAEAE9E9E9E9E9E9ECECECEAEAEA - D9D9D9C1C1C1CECECEE6E6E6F4F4F4F6F6F6FFFFFFFFFFFFF8F8F8EAEAEAEAEA - EAEAEAEADEDEDEECECECF9F9F9F7F7F7F7F7F7F9F9F9FFFFFFFFFFFFFFFFFFE7 - E7E7E2E2E2DDDDDDDEDEDEB4B4B4C6C6C6F3F3F3F7F7F7F9F9F9FAFAFAFAFAFA - FAFAFAFAFAFAF9F9F9F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F9F9F9F8F8 - F8F9F9F9FAFAFAF8F8F8FBFBFBFCFCFCFAFAFAF7F7F7F5F5F5F6F6F6F4F4F4F5 - F5F5F7F7F7F8F8F8F9F9F9F9F9F9FBFBFBFBFBFBF8F8F8F7F7F7F7F7F7F7F7F7 - FFFFFFFFFFFFFFFFFFF7F7F7F7F7F70000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFFFEEEEEE - EAEAEAE9E9E9EAEAEAEAEAEAD9D9D9B2B2B2C1C1C1D2D2D2D0D0D0D0D0D0E1E1 - E1FFFFFFFFFFFFFFFFFFFFFFFFF9F9F9E9E9E9E7E7E7E6E6E6B5B5B5B3B3B3E6 - E6E6FBFBFBFBFBFBFBFBFBFCFCFCFCFCFCFDFDFDFFFFFFFDFDFDFCFCFCFEFEFE - FFFFFFFEFEFEFCFCFCF8F8F8E4E4E4D1D1D1E4E4E4F5F5F5F5F5F5F5F5F5F5F5 - F5F3F3F3F4F4F4F7F7F7F7F7F7F7F7F7F9F9F9FFFFFFFFFFFFFFFFFFF9F9F9EA - EAEAECECECECECECEAEAEAE9E9E9E9E9E9E9E9E9E9E9E9ECECECF0F0F0EEEEEE - EAEAEAE9E9E9E9E9E9E9E9E9C8C8C8E6E6E6FFFFFFFFFFFFFDFDFDEFEFEFEDED - EDEAEAEAE9E9E9E8E8E8E8E8E8EAEAEAEAEAEAE8E8E8EBEBEBF2F2F2EEEEEEE9 - E9E9E9E9E9E7E7E7E7E7E7E4E4E4CECECEC8C8C8EBEBEBFFFFFFFFFFFFFFFFFF - FFFFFFFDFDFDD0D0D0DADADAF6F6F6F8F8F8F8F8F8FBFBFBFBFBFBF7F7F7F9F9 - F9F9F9F9F6F6F6F8F8F8FCFCFCFEFEFEFFFFFFFFFFFFEBEBEBE4E4E4E2E2E2E4 - E4E4E3E3E3D0D0D0D4D4D4DBDBDBEAEAEAF9F9F9F7F7F7E9E9E9E6E6E6D1D1D1 - D9D9D9EAEAEAEAEAEADDDDDDDDDDDDDADADAEAEAEAF7F7F7F3F3F3F2F2F2F4F4 - F4F5F5F5F5F5F5F4F4F4F5F5F5F6F6F6FAFAFAFEFEFEFAFAFAFFFFFFFFFFFFF5 - F5F5E4E4E4E8E8E8E8E8E8E7E7E7E7E7E7D2D2D2A8A8A8C9C9C9EBEBEBEFEFEF - F3F3F3F5F5F5F5F5F5F3F3F3F3F3F3F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6F5F5 - F5E1E1E1E2E2E2ECECECDFDFDFD5D5D5D5D5D5D0D0D0D8D8D8E7E7E7E7E7E7E6 - E6E6E5E5E5E5E5E5BCBCBCB8B8B8E2E2E2F6F6F6F8F8F8F8F8F8F8F8F8F8F8F8 - FBFBFBFFFFFFFBFBFBE5E5E5ECECECCACACADCDCDCF9F9F9F7F7F7F7F7F7F7F7 - F7F7F7F7F5F5F5F3F3F3F2F2F2F2F2F2FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFF - FFFFECECECEAEAEAEAEAEAEAEAEAEAEAEAEBEBEBEDEDEDDCDCDCDFDFDFDFDFDF - C1C1C1D3D3D3ECECECF3F3F3F5F5F5F5F5F5F0F0F0EEEEEED4D4D4C4C4C4C9C9 - C9CDCDCDBEBEBEDADADAF6F6F6F5F5F5F7F7F7F7F7F7FFFFFFFFFFFFF6F6F6E3 - E3E3E1E1E1C8C8C8AFAFAF999999CBCBCBF9F9F9FCFCFCFDFDFDFDFDFDFDFDFD - FFFFFFFFFFFFFDFDFDF9F9F9F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F9F9 - F9FAFAFAFAFAFAF8F8F8FBFBFBFFFFFFFFFFFFFFFFFFFEFEFEF2F2F2F4F4F4F4 - F4F4F6F6F6F9F9F9FAFAFAFAFAFAFBFBFBF9F9F9F7F7F7F7F7F7F7F7F7FFFFFF - FFFFFFFFFFFFFFFFFFF9F9F9F6F6F60000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFFFECECEC - E9E9E9E9E9E9E8E8E8D6D6D6B1B1B1C1C1C1E4E4E4F3F3F3F4F4F4F4F4F4F6F6 - F6FFFFFFFFFFFFFFFFFFF9F9F9E8E8E8E5E5E5E5E5E5CECECE9B9B9BCECECEFB - FBFBFBFBFBFBFBFBFDFDFDFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFFFFFF - FEFEFEFBFBFBF8F8F8F7F7F7F5F5F5F6F6F6F6F6F6F5F5F5F5F5F5FFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFF9F9F9F7F7F7FCFCFCFFFFFFFFFFFFFCFCFCECECECEB - EBEBECECECEAEAEAEAEAEAECECECDDDDDDCCCCCCCACACACBCBCBDBDBDBEBEBEB - EAEAEAE6E6E6D5D5D5C5C5C5B5B5B5E7E7E7FCFCFCFCFCFCFCFCFCEDEDEDEDED - EDE9E9E9E7E7E7E7E7E7E9E9E9EAEAEAE9E9E9E9E9E9EBEBEBF0F0F0EDEDEDE9 - E9E9E9E9E9E7E7E7E7E7E7E2E2E2E0E0E0E3E3E3FFFFFFFFFFFFFFFFFFFFFFFF - EBEBEBDBDBDBBFBFBFDADADAF6F6F6F8F8F8F8F8F8F9F9F9F8F8F8F5F5F5F5F5 - F5F3F3F3F4F4F4F7F7F7FBFBFBFCFCFCFFFFFFE9E9E9C0C0C0BABABABABABABD - BDBDBDBDBDB5B5B5D5D5D5CECECEDADADAF5F5F5F3F3F3F0F0F0F3F3F3EAEAEA - F3F3F3FDFDFDE9E9E9C9C9C9E8E8E8E7E7E7E7E7E7F2F2F2EFEFEFF3F3F3F5F5 - F5F4F4F4F4F4F4F3F3F3F7F7F7F7F7F7FBFBFBFFFFFFFAFAFAF8F8F8F9F9F9E5 - E5E5E1E1E1E6E6E6E6E6E6E4E4E4E6E6E6BFBFBFBBBBBBE4E4E4F4F4F4F5F5F5 - F5F5F5F4F4F4F4F4F4F3F3F3F2F2F2F2F2F2F4F4F4F4F4F4F4F4F4F6F6F6F7F7 - F7EAEAEAEAEAEAE1E1E1C9C9C9D1D1D1DCDCDCD7D7D7E2E2E2E8E8E8E6E6E6E6 - E6E6E7E7E7E7E7E7C1C1C1D0D0D0F6F6F6F7F7F7F8F8F8F8F8F8F8F8F8F8F8F8 - FFFFFFFFFFFFF1F1F1E2E2E2E6E6E6C6C6C6E0E0E0FBFBFBF9F9F9F9F9F9F8F8 - F8F5F5F5F1F1F1F4F4F4F3F3F3F5F5F5FFFFFFFFFFFFEEEEEEEBEBEBE8E8E8FF - FFFFEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEBEBEBECECECC9C9C9D6D6D6CECECE - CCCCCCECECECF7F7F7F4F4F4F5F5F5F5F5F5EEEEEEEEEEEEE3E3E3D5D5D5DBDB - DBDDDDDDD9D9D9E6E6E6F4F4F4F4F4F4F5F5F5F5F5F5F4F4F4F1F1F1D9D9D9C5 - C5C5BABABA969696ACACACC8C8C8E4E4E4FCFCFCFBFBFBFBFBFBFAFAFAFCFCFC - FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFAFAFAF8F8F8F8F8F8F8F8F8F9F9F9FCFC - FCFBFBFBF9F9F9F8F8F8FBFBFBFFFFFFFFFFFFFFFFFFE4E4E4E2E2E2F4F4F4F5 - F5F5F8F8F8FAFAFAFAFAFAFAFAFAF9F9F9F7F7F7F7F7F7F7F7F7F8F8F8FFFFFF - FFFFFFFFFFFFF0F0F0E9E9E9F2F2F20000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFEBEBEB - E9E9E9E7E7E7E1E1E1BCBCBCBFBFBFE5E5E5F4F4F4F4F4F4F5F5F5F7F7F7F9F9 - F9FFFFFFFFFFFFE7E7E7E7E7E7E6E6E6E3E3E3E2E2E2B5B5B5B3B3B3E6E6E6FB - FBFBFBFBFBFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFDFDFDFCFCFCFBFBFB - F9F9F9F7F7F7F8F8F8F7F7F7F5F5F5F7F7F7F7F7F7F5F5F5F5F5F5FFFFFFFFFF - FFFFFFFFFFFFFFFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEDEDEDE9E9E9EA - EAEAEAEAEAE9E9E9ECECECEDEDEDCACACAC1C1C1D3D3D3D5D5D5E4E4E4D9D9D9 - C0C0C0B7B7B7A7A7A7BFBFBFD5D5D5E7E7E7E9E9E9F9F9F9FDFDFDEEEEEEECEC - ECE7E7E7E7E7E7E9E9E9EAEAEAEAEAEAE9E9E9E9E9E9DEDEDED3D3D3CFCFCFDB - DBDBE9E9E9E7E7E7E7E7E7E2E2E2E1E1E1E5E5E5F9F9F9FFFFFFFBFBFBEAEAEA - D8D8D8B5B5B5C8C8C8EAEAEAF7F7F7F8F8F8F8F8F8F8F8F8F6F6F6F3F3F3EEEE - EEEDEDEDF3F3F3F7F7F7F9F9F9F9F9F9F4F4F4E3E3E3D2D2D2CFCFCFCFCFCFD1 - D1D1D3D3D3D6D6D6E5E5E5E5E5E5E8E8E8F5F5F5F4F4F4F4F4F4F6F6F6F8F8F8 - FDFDFDF9F9F9EAEAEADDDDDDFDFDFDFFFFFFEBEBEBEFEFEFEFEFEFF4F4F4F6F6 - F6F3F3F3F3F3F3F5F5F5F8F8F8F9F9F9FDFDFDFEFEFEF9F9F9F8F8F8FAFAFAF5 - F5F5E7E7E7E6E6E6E4E4E4E6E6E6D6D6D6A9A9A9D3D3D3FBFBFBF9F9F9F8F8F8 - F7F7F7F5F5F5F5F5F5F4F4F4F1F1F1F2F2F2F5F5F5F1F1F1F2F2F2F7F7F7F7F7 - F7F7F7F7F5F5F5ECECECDFDFDFEBEBEBF5F5F5F4F4F4F3F3F3FFFFFFF6F6F6E9 - E9E9EAEAEAEAEAEAC3C3C3D2D2D2F7F7F7F8F8F8F8F8F8F8F8F8F9F9F9F8F8F8 - FFFFFFFFFFFFEFEFEFEDEDEDF1F1F1E2E2E2F1F1F1FFFFFFFFFFFFFFFFFFFFFF - FFF1F1F1F0F0F0F4F4F4F4F4F4F8F8F8FFFFFFFFFFFFE9E9E9E7E7E7E7E7E7FF - FFFFEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEADADADAB2B2B2D3D3D3E8E8E8 - EAEAEAF7F7F7F5F5F5F5F5F5F5F5F5F2F2F2EDEDEDF1F1F1F8F8F8F8F8F8FAFA - FAF7F7F7F0F0F0F0F0F0F1F1F1F1F1F1F1F1F1F0F0F0EDEDEDE9E9E9DBDBDBC3 - C3C3C2C2C2C8C8C8E1E1E1F9F9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFEEEEEEEDEDEDFBFBFBFAFAFAF8F8F8FAFAFAFBFB - FBF9F9F9F8F8F8F7F7F7F9F9F9F8F8F8F4F4F4DADADAB6B6B6D5D5D5F4F4F4F6 - F6F6F9F9F9FAFAFAFAFAFAF9F9F9F8F8F8F8F8F8F8F8F8F9F9F9F8F8F8FFFFFF - FFFFFFEDEDEDE9E9E9D2D2D2C1C1C10000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - E7E7E7E6E6E6CACACAA1A1A1D0D0D0F5F5F5F3F3F3F4F4F4F7F7F7F8F8F8FFFF - FFFFFFFFFFFFFFE6E6E6E5E5E5E5E5E5E2E2E2E2E2E2D1D1D1F9F9F9FFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8F8F8F8F6F6F6F6F6F6 - F7F7F7F7F7F7F9F9F9F8F8F8F6F6F6F8F8F8F7F7F7F5F5F5F8F8F8FFFFFFFFFF - FFEBEBEBEAEAEAEAEAEAF7F7F7FFFFFFFFFFFFFFFFFFF9F9F9ECECECEAEAEAEA - EAEAEAEAEAE9E9E9EAEAEAE8E8E8C1C1C1D0D0D0F3F3F3F3F3F3F1F1F1DEDEDE - C0C0C0C2C2C2CCCCCCE4E4E4F8F8F8F9F9F9FAFAFAFFFFFFFFFFFFEBEBEBE8E8 - E8E4E4E4E7E7E7EAEAEAE9E9E9E9E9E9E8E8E8D9D9D9BEBEBECACACAD8D8D8F7 - F7F7F8F8F8E7E7E7E7E7E7E5E5E5E4E4E4E7E7E7EAEAEAEBEBEBEBEBEBE7E7E7 - C3C3C3C1C1C1E7E7E7F9F9F9F7F7F7F8F8F8F9F9F9F8F8F8F6F6F6F2F2F2EEEE - EEF1F1F1F5F5F5F6F6F6F8F8F8F8F8F8F5F5F5F6F6F6F8F8F8F5F5F5FFFFFFFF - FFFFF7F7F7F7F7F7F5F5F5F4F4F4F5F5F5F5F5F5F5F5F5F6F6F6F7F7F7F9F9F9 - FCFCFCF7F7F7F1F1F1F0F0F0FFFFFFFFFFFFEAEAEAE6E6E6EBEBEBF0F0F0F5F5 - F5F3F3F3F5F5F5F8F8F8F9F9F9FBFBFBFDFDFDFDFDFDF9F9F9F8F8F8FAFAFAFA - FAFAF7F7F7EAEAEADBDBDBCDCDCDCCCCCCD4D4D4ECECECFFFFFFF9F9F9F8F8F8 - F8F8F8F8F8F8F8F8F8F7F7F7F5F5F5F6F6F6F7F7F7F3F3F3F4F4F4F7F7F7F4F4 - F4F4F4F4F5F5F5F7F7F7F5F5F5F6F6F6F6F6F6F1F1F1EDEDEDFEFEFEEBEBEBDC - DCDCEAEAEAD7D7D7AFAFAFD3D3D3F7F7F7F8F8F8F8F8F8F8F8F8F9F9F9FFFFFF - FFFFFFFFFFFFEBEBEBECECECFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEDED - EDE1E1E1F1F1F1F7F7F7F7F7F7F8F8F8FFFFFFFFFFFFE7E7E7E7E7E7E7E7E7FF - FFFFEAEAEAEBEBEBECECECEBEBEBEAEAEAEAEAEAC8C8C8C1C1C1E6E6E6FBFBFB - FFFFFFFAFAFAF7F7F7F5F5F5F3F3F3EEEEEEEEEEEEF3F3F3F7F7F7F5F5F5F7F7 - F7F5F5F5F0F0F0EFEFEFF0F0F0F0F0F0F0F0F0EBEBEBE8E8E8E7E7E7E9E9E9EA - EAEAEEEEEEF7F7F7FAFAFAFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFF8F8F8EAEAEADDDDDDE9E9E9F9F9F9F8F8F8F9F9F9FCFCFCFBFB - FBF9F9F9F8F8F8F7F7F7F7F7F7F7F7F7F2F2F2DFDFDFD2D2D2E5E5E5F5F5F5F7 - F7F7F9F9F9FBFBFBFBFBFBF9F9F9F9F9F9F8F8F8F8F8F8F8F8F8F7F7F7FFFFFF - ECECECCDCDCDC9C9C9B3B3B3C0C0C00000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - B4B4B4B2B2B2939393AFAFAFE1E1E1F3F3F3F4F4F4F5F5F5F8F8F8F9F9F9FFFF - FFFFFFFFFDFDFDE7E7E7E6E6E6E6E6E6E4E4E4E6E6E6EAEAEAFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8F8F7F7F7F7F7F7F8F8F8F5F5F5F5F5F5 - F7F7F7F9F9F9FBFBFBF9F9F9F8F8F8F8F8F8F7F7F7F8F8F8FFFFFFFFFFFFFFFF - FFEDEDEDEAEAEAE9E9E9EAEAEAEBEBEBECECECEBEBEBD9D9D9C6C6C6C3C3C3D9 - D9D9ECECECE9E9E9E9E9E9E6E6E6C3C3C3D8D8D8F7F7F7F0F0F0ECECECE9E9E9 - E7E7E7EEEEEEF5F5F5F8F8F8F9F9F9FCFCFCFDFDFDFFFFFFFDFDFDE9E9E9E7E7 - E7E7E7E7E8E8E8E8E8E8E9E9E9D9D9D9C8C8C8B7B7B7C8C8C8E5E5E5F4F4F4FF - FFFFFFFFFFEBEBEBE9E9E9E7E7E7E2E2E2E5E5E5EAEAEAEBEBEBDEDEDECCCCCC - B6B6B6D8D8D8F9F9F9FBFBFBF8F8F8F7F7F7F8F8F8F5F5F5F4F4F4F4F4F4F0F0 - F0F4F4F4F5F5F5F7F7F7F7F7F7F6F6F6F5F5F5F7F7F7F8F8F8FFFFFFFFFFFFFF - FFFFF7F7F7F7F7F7F6F6F6F5F5F5F6F6F6F6F6F6F7F7F7F8F8F8F9F9F9FDFDFD - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEAEAEAE4E4E4CFCFCFE0E0E0F4F4 - F4F4F4F4F7F7F7F9F9F9FAFAFAFCFCFCFDFDFDFCFCFCF9F9F9F8F8F8FAFAFAF8 - F8F8F5F5F5F8F8F8D5D5D5DFDFDFFFFFFFFDFDFDFCFCFCFCFCFCF9F9F9F8F8F8 - F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F7F7F7F7F7F7F4F4F4F7F7F7F7F7F7F6F6 - F6F5F5F5F7F7F7F9F9F9F7F7F7F7F7F7F5F5F5F1F1F1F0F0F0F7F7F7EBEBEBE4 - E4E4E7E7E7C4C4C4C0C0C0E6E6E6F8F8F8F8F8F8F6F6F6F4F4F4F6F6F6FFFFFF - FFFFFFFDFDFDEBEBEBEBEBEBF9F9F9FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1DCDC - DCE1E1E1F2F2F2F8F8F8F8F8F8F9F9F9FFFFFFFFFFFFE7E7E7E7E7E7E7E7E7FF - FFFFEBEBEBEDEDEDEDEDEDEAEAEAEAEAEADADADAB4B4B4D3D3D3F5F5F5FBFBFB - FBFBFBF6F6F6F4F4F4F2F2F2EFEFEFEDEDEDF1F1F1F5F5F5F6F6F6F6F6F6F6F6 - F6F8F8F8F4F4F4F0F0F0F1F1F1F0F0F0EDEDEDE9E9E9ECECECF1F1F1F4F4F4F7 - F7F7F9F9F9F9F9F9FAFAFAFDFDFDFFFFFFFFFFFFFFFFFFE7E7E7E9E9E9EDEDED - EBEBEBEBEBEBEBEBEBECECECECECECEAEAEAF4F4F4F6F6F6F8F8F8FBFBFBFAFA - FAF8F8F8F8F8F8F7F7F7F7F7F7F7F7F7F3F3F3F0F0F0F2F2F2F4F4F4F6F6F6F8 - F8F8F9F9F9FBFBFBFAFAFAF8F8F8F8F8F8F7F7F7F7F7F7F8F8F8F8F8F8F8F8F8 - EAEAEADADADAD7D7D7D7D7D7E5E5E50000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FFC4C4C4C3C3C3DCDCDCF4F4F4F5F5F5F7F7F7F8F8F8F9F9F9F9F9F9FDFD - FDFBFBFBE8E8E8E7E7E7E6E6E6E6E6E6E4E4E4E6E6E6EAEAEAEEEEEEF0F0F0FF - FFFFFFFFFFECECECECECECEAEAEAEAEAEAFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9 - FBFBFBFFFFFFFFFFFFF9F9F9F9F9F9F8F8F8F6F6F6F7F7F7FFFFFFFFFFFFF9F9 - F9ECECECEAEAEAE9E9E9E9E9E9EAEAEAE9E9E9E7E7E7C1C1C1BFBFBFD3D3D3ED - EDEDDADADAD5D5D5EAEAEAE9E9E9C6C6C6E9E9E9FEFEFEE7E7E7EBEBEBEDEDED - F1F1F1F7F7F7F9F9F9FBFBFBFBFBFBFCFCFCFCFCFCF7F7F7FFFFFFF9F9F9EDED - EDECECECEAEAEAEAEAEAECECECDCDCDCD7D7D7D7D7D7E7E7E7F5F5F5F9F9F9FF - FFFFFFFFFFE9E9E9E6E6E6E6E6E6DFDFDFE1E1E1E9E9E9EBEBEBD1D1D1C7C7C7 - D5D5D5EAEAEAFBFBFBF9F9F9F7F7F7F7F7F7F7F7F7F4F4F4F3F3F3F3F3F3F1F1 - F1F3F3F3F5F5F5F7F7F7F7F7F7F6F6F6F6F6F6F8F8F8FAFAFAFFFFFFFFFFFFFE - FEFEEDEDEDF7F7F7F6F6F6F6F6F6F8F8F8F8F8F8F8F8F8F9F9F9FCFCFCFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9E7E7E7E3E3E3C0C0C0D2D2D2F4F4 - F4F5F5F5F9F9F9FAFAFAFBFBFBFCFCFCFCFCFCFCFCFCF9F9F9F8F8F8F9F9F9F5 - F5F5F7F7F7FAFAFAEBEBEBFFFFFFFFFFFFFEFEFEEDEDEDFFFFFFFFFFFFF9F9F9 - F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F6F6F6F7F7F7F9F9F9F9F9 - F9F9F9F9F8F8F8FCFCFCFCFCFCF8F8F8F7F7F7F6F6F6F5F5F5FEFEFEFFFFFFFE - FEFEF7F7F7CBCBCBD6D6D6F8F8F8F8F8F8F8F8F8F4F4F4F4F4F4F8F8F8FFFFFF - FFFFFFF0F0F0EBEBEBEDEDEDF0F0F0F3F3F3F5F5F5F0F0F0E9E9E9E7E7E7E6E6 - E6E2E2E2F3F3F3F8F8F8F8F8F8F9F9F9FFFFFFFDFDFDE7E7E7E7E7E7E7E7E7FF - FFFFEDEDEDEEEEEEEBEBEBE9E9E9D8D8D8B4B4B4C1C1C1E5E5E5F7F7F7F9F9F9 - F9F9F9F5F5F5F4F4F4F0F0F0ECECECEFEFEFF3F3F3F5F5F5F6F6F6F6F6F6F7F7 - F7F9F9F9F7F7F7F4F4F4F4F4F4F0F0F0EEEEEEF1F1F1F5F5F5F9F9F9F8F8F8F9 - F9F9FAFAFAFAFAFAFAFAFAFFFFFFFFFFFFFFFFFFFDFDFDE6E6E6E8E8E8EBEBEB - ECECECECECECEBEBEBECECECECECECE9E9E9E9E9E9F4F4F4F6F6F6F8F8F8F8F8 - F8F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F5F5F5F5F5F5F5F5F5F7F7F7F8 - F8F8FBFBFBFFFFFFFFFFFFFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFAFAFAF7F7F7 - F5F5F5F5F5F5F5F5F5F6F6F6F5F5F50000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FFF4F4F4F6F6F6F7F7F7F8F8F8F9F9F9F9F9F9F9F9F9F9F9F9FAFA - FAFAFAFAF8F8F8E4E4E4DFDFDFE1E1E1E2E2E2E5E5E5EAEAEAEDEDEDEFEFEFEE - EEEEEDEDEDECECECEBEBEBE9E9E9EBEBEBFBFBFBFFFFFFFEFEFEFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF8F8F8FFFFFFFFFFFFF8F8 - F8EBEBEBE9E9E9E8E8E8E9E9E9E9E9E9EAEAEAE9E9E9D7D7D7E9E9E9FCFCFCFF - FFFFEBEBEBE6E6E6D6D6D6C0C0C0ABABABE2E2E2DEDEDED9D9D9F2F2F2F3F3F3 - F5F5F5F9F9F9FAFAFAFBFBFBFBFBFBFEFEFEFDFDFDF7F7F7FFFFFFFFFFFFECEC - ECE7E7E7E7E7E7E9E9E9EAEAEAEAEAEAEAEAEAF9F9F9FBFBFBF9F9F9FEFEFEFF - FFFFFFFFFFE9E9E9E6E6E6E6E6E6E4E4E4E9E9E9EDEDEDEBEBEBD1D1D1D5D5D5 - F1F1F1F7F7F7F8F8F8F7F7F7F7F7F7F7F7F7F7F7F7F6F6F6F4F4F4F3F3F3F3F3 - F3F5F5F5F7F7F7F8F8F8F8F8F8F8F8F8F8F8F8FAFAFAFFFFFFFFFFFFFFFFFFF1 - F1F1EEEEEEF1F1F1FBFBFBFAFAFAFAFAFAFBFBFBFBFBFBFCFCFCFFFFFFFFFFFF - FFFFFFFFFFFFFDFDFDEEEEEEEAEAEAE7E7E7E4E4E4E2E2E2C1C1C1D3D3D3F4F4 - F4F5F5F5FAFAFAFBFBFBFBFBFBFCFCFCFBFBFBFBFBFBF9F9F9F8F8F8F8F8F8F7 - F7F7F8F8F8F7F7F7F5F5F5FFFFFFFCFCFCEEEEEEECECECFDFDFDF0F0F0EAEAEA - F7F7F7F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F7F7F7F8F8F8FAFAFAFAFA - FAF9F9F9FBFBFBFFFFFFFFFFFFF8F8F8F7F7F7F6F6F6F5F5F5FFFFFFFFFFFFF8 - F8F8ECECECE9E9E9E7E7E7F8F8F8F8F8F8F6F6F6F2F2F2F5F5F5F8F8F8FFFFFF - FFFFFFF0F0F0EDEDEDF0F0F0F0F0F0F1F1F1F0F0F0ECECECE7E7E7E5E5E5E6E6 - E6E4E4E4D3D3D3E5E5E5F8F8F8F9F9F9FDFDFDFBFBFBEAEAEAE2E2E2DEDEDEFF - FFFFEDEDEDEDEDEDD8D8D8C1C1C1AFAFAFC1C1C1E5E5E5F7F7F7F8F8F8FBFBFB - FDFDFDF7F7F7F3F3F3F0F0F0EEEEEEF2F2F2F5F5F5F4F4F4F4F4F4F7F7F7F8F8 - F8FAFAFAF8F8F8F6F6F6F7F7F7F4F4F4F5F5F5F9F9F9F9F9F9F9F9F9F8F8F8F9 - F9F9FAFAFAFAFAFAFBFBFBFFFFFFFFFFFFF8F8F8F7F7F7E5E5E5E6E6E6E8E8E8 - E8E8E8E9E9E9EBEBEBEEEEEEEBEBEBE9E9E9E9E9E9DBDBDBE5E5E5F4F4F4F6F6 - F6F7F7F7F7F7F7F7F7F7F8F8F8F9F9F9F8F8F8F7F7F7F6F6F6F6F6F6F8F8F8F8 - F8F8FFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F8F8F8F7F7F7F5F5F5 - F4F4F4F4F4F4F5F5F5F6F6F6F6F6F60000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FFF8F8F8F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F8F8F8F7F7F7F7F7 - F7F9F9F9F9F9F9F2F2F2D3D3D3C8C8C8C6C6C6D7D7D7EAEAEAEDEDEDEFEFEFEC - ECECEBEBEBEAEAEAEBEBEBE9E9E9EBEBEBEBEBEBEBEBEBEDEDEDF5F5F5FFFFFF - FFFFFFFFFFFFF8F8F8F7F7F7FFFFFFFFFFFFF8F8F8FFFFFFFFFFFFFFFFFFF9F9 - F9EBEBEBE8E8E8E4E4E4E6E6E6E9E9E9E9E9E9E9E9E9DADADACFCFCFEDEDEDFF - FFFFFEFEFEF9F9F9E5E5E5D1D1D1D1D1D1E5E5E5E2E2E2E2E2E2F7F7F7F4F4F4 - F5F5F5F8F8F8F9F9F9FBFBFBFBFBFBFEFEFEFDFDFDF8F8F8FFFFFFEEEEEED7D7 - D7E3E3E3E7E7E7E9E9E9E9E9E9E9E9E9EAEAEADEDEDEE8E8E8F8F8F8FFFFFFFF - FFFFFFFFFFECECECE8E8E8E6E6E6E7E7E7EAEAEAEBEBEBEDEDEDD1D1D1D2D2D2 - F1F1F1F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F5F5F5F4F4F4F4F4 - F4F5F5F5F7F7F7F7F7F7F8F8F8F8F8F8F9F9F9FFFFFFFFFFFFFFFFFFFFFFFFF0 - F0F0EFEFEFF2F2F2F3F3F3FAFAFAFDFDFDFEFEFEFEFEFEFFFFFFFFFFFFFFFFFF - FFFFFFFCFCFCEAEAEAE7E7E7E6E6E6E4E4E4E4E4E4E0E0E0C0C0C0D2D2D2F4F4 - F4F7F7F7FBFBFBFAFAFAFCFCFCFCFCFCFBFBFBFBFBFBFAFAFAF7F7F7F7F7F7F7 - F7F7F8F8F8F8F8F8F8F8F8FBFBFBF9F9F9DEDEDECECECEDCDCDCCDCDCDD3D3D3 - F4F4F4F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F7F7F7F9F9F9FAFA - FAFAFAFAFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEA - EAEAE7E7E7F5F5F5F5F5F5F7F7F7F8F8F8F7F7F7F5F5F5F7F7F7F9F9F9FFFFFF - FFFFFFEEEEEEEEEEEEEEEEEEEDEDEDEDEDEDECECECE9E9E9E6E6E6E5E5E5E6E6 - E6E5E5E5B7B7B7CECECEF9F9F9FBFBFBFDFDFDFCFCFCF7F7F7D5D5D5BCBCBCFF - FFFFEAEAEAEAEAEAC3C3C3BCBCBCD3D3D3E6E6E6F7F7F7F8F8F8FBFBFBFDFDFD - F9F9F9F3F3F3F1F1F1F1F1F1F2F2F2F4F4F4F4F4F4F4F4F4F5F5F5F8F8F8F9F9 - F9F9F9F9F8F8F8F7F7F7F7F7F7F7F7F7F8F8F8F9F9F9F9F9F9F9F9F9F9F9F9F9 - F9F9FAFAFAFAFAFAFBFBFBFFFFFFFDFDFDF8F8F8F8F8F8F7F7F7E9E9E9E9E9E9 - E7E7E7E7E7E7EAEAEAECECECEAEAEAE8E8E8E9E9E9DADADAE4E4E4F2F2F2F3F3 - F3F7F7F7F8F8F8F9F9F9F9F9F9F9F9F9F8F8F8F9F9F9F8F8F8F8F8F8FFFFFFFF - FFFFFFFFFFFFFFFFF7F7F7F2F2F2F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F2F2F2F4F4F4F6F6F6F6F6F6F6F6F60000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FFF9F9F9F9F9F9F9F9F9F9F9F9F8F8F8F6F6F6F5F5F5F8F8 - F8FAFAFAFBFBFBF8F8F8E7E7E7DADADAD7D7D7E6E6E6DCDCDCDFDFDFECECECE7 - E7E7E6E6E6E6E6E6E7E7E7E6E6E6E7E7E7E5E5E5E4E4E4E4E4E4DEDEDEE2E2E2 - EAEAEAEBEBEBEBEBEBEDEDEDEFEFEFF1F1F1F4F4F4FEFEFEFFFFFFF8F8F8E8E8 - E8E7E7E7E5E5E5E2E2E2E6E6E6E7E7E7E7E7E7D9D9D9B8B8B8C8C8C8EAEAEAFD - FDFDFCFCFCF9F9F9F8F8F8F8F8F8F8F8F8FAFAFAF7F7F7F6F6F6F7F7F7F3F3F3 - F5F5F5F9F9F9FCFCFCFBFBFBFBFBFBFEFEFEFCFCFCF7F7F7F7F7F7E6E6E6F2F2 - F2F8F8F8EDEDEDEEEEEEEEEEEEEEEEEEEFEFEFD0D0D0DCDCDCFAFAFAFFFFFFFF - FFFFFEFEFEEAEAEAE7E7E7E3E3E3E4E4E4E6E6E6E7E7E7EAEAEACACACAD1D1D1 - F3F3F3F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F6F6F6F4F4F4F5F5F5F7F7 - F7F5F5F5F6F6F6F8F8F8F8F8F8F9F9F9FFFFFFFFFFFFFFFFFFFFFFFFF4F4F4F1 - F1F1F0F0F0F0F0F0F0F0F0E3E3E3F0F0F0FBFBFBF9F9F9FDFDFDFFFFFFFFFFFF - F1F1F1E9E9E9E7E7E7E7E7E7E6E6E6E4E4E4E1E1E1CFCFCFAEAEAED3D3D3F5F5 - F5F7F7F7F9F9F9F9F9F9FBFBFBFBFBFBFAFAFAFCFCFCFBFBFBF7F7F7F7F7F7F8 - F8F8F8F8F8F9F9F9F9F9F9FBFBFBF9F9F9E9E9E9DADADAE7E7E7CDCDCDD0D0D0 - F0F0F0F9F9F9F9F9F9F9F9F9FAFAFAFAFAFAF9F9F9F8F8F8F6F6F6F7F7F7FAFA - FAFAFAFAFFFFFFFFFFFFFFFFFFF8F8F8FFFFFFFFFFFFFFFFFFFFFFFFF9F9F9EA - EAEADFDFDFE8E8E8F4F4F4F4F4F4F6F6F6F8F8F8F6F6F6F8F8F8FCFCFCFFFFFF - FFFFFFFBFBFBEDEDEDECECECEBEBEBECECECEAEAEAE7E7E7E5E5E5E6E6E6E7E7 - E7E6E6E6B4B4B4CBCBCBF9F9F9FBFBFBFCFCFCFCFCFCF7F7F7E6E6E6D4D4D4FF - FFFFE7E7E7E7E7E7BFBFBFCFCFCFF7F7F7F8F8F8F8F8F8FCFCFCFEFEFEFCFCFC - F7F7F7F4F4F4F3F3F3F4F4F4F4F4F4F1F1F1F1F1F1F4F4F4F7F7F7F9F9F9F9F9 - F9FAFAFAFBFBFBFAFAFAF8F8F8F8F8F8F9F9F9F9F9F9FFFFFFFFFFFFFFFFFFFF - FFFFF9F9F9FBFBFBFCFCFCFEFEFEFDFDFDF8F8F8F7F7F7F8F8F8FFFFFFFCFCFC - E7E7E7E6E6E6E7E7E7E8E8E8E8E8E8E6E6E6E5E5E5E8E8E8DBDBDBE1E1E1F1F1 - F1F7F7F7F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFCFCFCE7E7E7F1F1F1F3F3F3F5F5F5F8F8F8F7F7F7F4F4F4F3F3F3 - F1F1F1F3F3F3F6F6F6F6F6F6F6F6F60000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FFF9F9F9FAFAFAF9F9F9F8F8F8F7F7F7F7F7F7FAFA - FAFBFBFBFCFCFCFBFBFBF9F9F9F8F8F8F6F6F6F6F6F6E7E7E7E6E6E6D3D3D3D2 - D2D2E6E6E6E6E6E6E6E6E6E1E1E1DFDFDFDCDCDCE2E2E2E1E1E1E0E0E0E6E6E6 - EAEAEAE9E9E9EAEAEAEDEDEDF0F0F0F2F2F2F1F1F1EEEEEEEEEEEEEBEBEBE6E6 - E6E6E6E6E6E6E6E4E4E4E5E5E5E6E6E6E6E6E6C8C8C8C7C7C7E6E6E6F5F5F5F7 - F7F7F9F9F9F8F8F8F8F8F8F8F8F8F8F8F8F9F9F9F7F7F7F7F7F7F5F5F5F4F4F4 - F7F7F7FBFBFBFCFCFCFBFBFBFBFBFBFDFDFDFBFBFBFAFAFAFFFFFFFFFFFFFFFF - FFFFFFFFEDEDEDEDEDEDEEEEEEEEEEEEEFEFEFDFDFDFEBEBEBFFFFFFFFFFFFFF - FFFFECECECE7E7E7E4E4E4E2E2E2E1E1E1E5E5E5E7E7E7E7E7E7C0C0C0CFCFCF - F5F5F5F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F6F6F6F4F4F4F5F5F5F7F7F7F7F7 - F7F6F6F6F8F8F8FCFCFCFBFBFBFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2F1F1F1F1 - F1F1EEEEEEECECECECECECE0E0E0EAEAEAF6F6F6F8F8F8FBFBFBFFFFFFFFFFFF - ECECECE7E7E7E6E6E6E6E6E6E4E4E4E4E4E4E2E2E2C1C1C1BFBFBFE4E4E4F4F4 - F4F5F5F5F9F9F9FAFAFAFAFAFAFAFAFAFCFCFCFDFDFDFBFBFBF8F8F8F8F8F8F8 - F8F8F8F8F8F8F8F8F9F9F9FBFBFBF9F9F9F7F7F7F5F5F5F5F5F5E7E7E7E1E1E1 - F2F2F2F8F8F8F8F8F8F9F9F9FAFAFAF9F9F9F8F8F8F8F8F8F7F7F7FBFBFBFEFE - FEFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEEEEEEEDEDEDEAEAEAEAEAEAECECECDC - DCDCC1C1C1DBDBDBF4F4F4F4F4F4F4F4F4F4F4F4F5F5F5F8F8F8FCFCFCFFFFFF - FFFFFFF0F0F0E1E1E1ECECECEBEBEBEAEAEAE9E9E9E9E9E9E7E7E7E6E6E6E4E4 - E4E3E3E3B7B7B7CDCDCDFBFBFBFCFCFCFCFCFCFBFBFBF8F8F8F7F7F7F4F4F4FF - FFFFE6E6E6E6E6E6BDBDBDCFCFCFF8F8F8F8F8F8F9F9F9FEFEFEFEFEFEFCFCFC - F8F8F8F4F4F4F3F3F3F3F3F3F1F1F1EDEDEDF1F1F1F5F5F5F8F8F8F9F9F9F9F9 - F9FBFBFBFBFBFBF9F9F9F9F9F9F9F9F9F9F9F9FBFBFBFFFFFFFFFFFFFFFFFFFE - FEFEFFFFFFFFFFFFFBFBFBFDFDFDFEFEFEFAFAFAF7F7F7F9F9F9FFFFFFECECEC - D1D1D1E2E2E2E6E6E6E6E6E6E4E4E4E3E3E3E4E4E4E6E6E6CACACAD0D0D0F0F0 - F0F7F7F7F9F9F9F9F9F9F9F9F9F8F8F8F8F8F8FFFFFFFFFFFFFFFFFFFFFFFFFC - FCFCEAEAEAEAEAEAE8E8E8ECECECFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFF4F4F4 - F1F1F1F2F2F2F5F5F5F6F6F6F6F6F60000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FFFAFAFAFBFBFBFAFAFAF9F9F9F7F7F7F8F8F8FAFA - FAFBFBFBFDFDFDFCFCFCFCFCFCFCFCFCF8F8F8F5F5F5F5F5F5F3F3F3DFDFDFE0 - E0E0D1D1D1BBBBBBBABABAB5B5B5B8B8B8CECECEE2E2E2E2E2E2E4E4E4E8E8E8 - E9E9E9E8E8E8EAEAEAEDEDEDEEEEEEEEEEEEECECECEAEAEAEAEAEADDDDDDC8C8 - C8C3C3C3D5D5D5E4E4E4E4E4E4E8E8E8E7E7E7C8C8C8D7D7D7F3F3F3F4F4F4F6 - F6F6F6F6F6FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBF7F7F7F6F6F6F7F7F7 - F9F9F9FAFAFAFAFAFAFAFAFAFBFBFBFDFDFDFEFEFEFFFFFFFFFFFFFFFFFFFFFF - FFF8F8F8EAEAEAEAEAEAEAEAEAEAEAEAECECECEDEDEDEBEBEBFFFFFFFFFFFFFD - FDFDEAEAEAE6E6E6E2E2E2E1E1E1E0E0E0E2E2E2E6E6E6D0D0D0A3A3A3CECECE - F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F6F6F6F4F4F4F5F5F5F7F7F7F7F7F7F7F7 - F7F7F7F7FAFAFAFCFCFCFCFCFCFFFFFFFFFFFFFFFFFFF7F7F7EAEAEAECECECEC - ECECEBEBEBE9E9E9E9E9E9E9E9E9DCDCDCE7E7E7F6F6F6FFFFFFFFFFFFFFFFFF - E9E9E9E6E6E6E4E4E4E4E4E4E4E4E4E5E5E5E4E4E4C3C3C3D0D0D0F3F3F3F5F5 - F5F9F9F9FBFBFBFBFBFBFBFBFBFCFCFCFDFDFDFBFBFBF9F9F9F8F8F8F8F8F8F8 - F8F8F8F8F8F9F9F9FAFAFAF9F9F9F8F8F8F6F6F6F5F5F5F5F5F5F4F4F4EEEEEE - EFEFEFF5F5F5F5F5F5F8F8F8F9F9F9F8F8F8F9F9F9F8F8F8F9F9F9FDFDFDFFFF - FFFFFFFFFFFFFFFFFFFFF0F0F0EEEEEEECECECE7E7E7E5E5E5E8E8E8E5E5E5C8 - C8C8C9C9C9E6E6E6F3F3F3F4F4F4F4F4F4F5F5F5FBFBFBFBFBFBFBFBFBFCFCFC - FBFBFBEFEFEFEDEDEDE2E2E2DFDFDFEAEAEAE9E9E9EAEAEAE7E7E7E5E5E5E5E5 - E5D5D5D5ACACACCFCFCFF7F7F7FCFCFCFBFBFBF9F9F9F8F8F8F8F8F8F4F4F4FF - FFFFE5E5E5E6E6E6D4D4D4E6E6E6FAFAFAFAFAFAFCFCFCFEFEFEFEFEFEF9F9F9 - F5F5F5F1F1F1EFEFEFF3F3F3F0F0F0F0F0F0F4F4F4F7F7F7F9F9F9FCFCFCFBFB - FBFBFBFBF9F9F9F8F8F8F8F8F8F9F9F9FBFBFBFFFFFFFFFFFFFFFFFFEBEBEBE9 - E9E9FDFDFDEBEBEBE7E7E7FCFCFCFDFDFDF9F9F9F7F7F7F9F9F9FCFCFCE5E5E5 - DCDCDCD2D2D2C8C8C8C7C7C7C6C6C6D7D7D7D9D9D9C9C9C9B9B9B9D0D0D0EFEF - EFF7F7F7F9F9F9F8F8F8F8F8F8F7F7F7FFFFFFFFFFFFFFFFFFFCFCFCEAEAEAEA - EAEAEAEAEAEAEAEAEAEAEAEDEDEDF9F9F9FFFFFFFFFFFFFFFFFFF5F5F5F2F2F2 - ECECECEDEDEDF4F4F4F6F6F6F6F6F60000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FFFCFCFCFBFBFBFAFAFAF7F7F7F8F8F8FBFB - FBFCFCFCFFFFFFFEFEFEFCFCFCFBFBFBF5F5F5F3F3F3F1F1F1F1F1F1F0F0F0F1 - F1F1E0E0E0CACACAC8C8C8C8C8C8CCCCCCE1E1E1D6D6D6D7D7D7E7E7E7E7E7E7 - E8E8E8E8E8E8E9E9E9EAEAEAEAEAEAECECECEAEAEAEAEAEADADADABABABABBBB - BBCACACADEDEDECECECED3D3D3E9E9E9E7E7E7DADADAE8E8E8F3F3F3F4F4F4F5 - F5F5F5F5F5F9F9F9FDFDFDFDFDFDFEFEFEFDFDFDF5F5F5F4F4F4F7F7F7F7F7F7 - F8F8F8FAFAFAFAFAFAFBFBFBFDFDFDFEFEFEFFFFFFFFFFFFFFFFFFF9F9F9EAEA - EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEEEEEEEEEEEEEDEDEDFEFEFEFDFDFDEC - ECECE9E9E9E4E4E4E2E2E2E2E2E2DEDEDECCCCCCB9B9B99C9C9CB2B2B2E2E2E2 - F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F4F4F4F4F4F4F5F5F5F6F6F6F6F6F6F7F7 - F7F7F7F7F8F8F8FAFAFAFFFFFFFFFFFFFFFFFFEDEDEDEAEAEAE7E7E7E9E9E9E9 - E9E9E9E9E9E9E9E9E8E8E8E8E8E8CECECED8D8D8F3F3F3FFFFFFFFFFFFF8F8F8 - E9E9E9E5E5E5E4E4E4E4E4E4E6E6E6E7E7E7E4E4E4C2C2C2D0D0D0F3F3F3F7F7 - F7F9F9F9F9F9F9FDFDFDFCFCFCFFFFFFFFFFFFFFFFFFF9F9F9F8F8F8F8F8F8F8 - F8F8F8F8F8FAFAFAFAFAFAF8F8F8FAFAFAF9F9F9F5F5F5F3F3F3F1F1F1ECECEC - EEEEEEF4F4F4F6F6F6F9F9F9FAFAFAF9F9F9FAFAFAF9F9F9F9F9F9FFFFFFFFFF - FFFFFFFFFFFFFFECECECEEEEEEEBEBEBE7E7E7E3E3E3E4E4E4E4E4E4D3D3D3BD - BDBDD9D9D9F3F3F3F3F3F3F4F4F4F4F4F4F5F5F5F8F8F8F7F7F7F8F8F8FCFCFC - FDFDFDFEFEFEFAFAFAEBEBEBEDEDEDECECECEAEAEAE9E9E9E6E6E6E4E4E4D8D8 - D8B7B7B7BDBDBDDCDCDCF3F3F3F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F5F5F5FF - FFFFE7E7E7E8E8E8E9E9E9DADADAE9E9E9F9F9F9FBFBFBFCFCFCFAFAFAF5F5F5 - F3F3F3EAEAEAEDEDEDF4F4F4F1F1F1F4F4F4F7F7F7F7F7F7FFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFF8F8F8F8F8F8F9F9F9F9F9F9FFFFFFFFFFFFFCFCFCE7E7E7E7 - E7E7D4D4D4A8A8A8D1D1D1FCFCFCFCFCFCF8F8F8F7F7F7F8F8F8F9F9F9F3F3F3 - F1F1F1E4E4E4D7D7D7D5D5D5D4D4D4E4E4E4CDCDCDC8C8C8D5D5D5E2E2E2F2F2 - F2F7F7F7F8F8F8F7F7F7F6F6F6F7F7F7FFFFFFFFFFFFFDFDFDEAEAEAE9E9E9EA - EAEAEAEAEAEAEAEAEBEBEBEFEFEFEEEEEEEEEEEEECECECE9E9E9E6E6E6D1D1D1 - DBDBDBEFEFEFF5F5F5F7F7F70000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FFF9F9F9F8F8F8F7F7F7F9F9F9FBFB - FBFDFDFDFFFFFFFFFFFFFDFDFDFAFAFAF8F8F8F7F7F7F6F6F6F4F4F4F3F3F3F5 - F5F5F4F4F4F2F2F2F1F1F1F3F3F3F4F4F4F5F5F5E7E7E7F5F5F5F8F8F8E9E9E9 - ECECECE9E9E9EAEAEAEBEBEBEAEAEAEBEBEBEBEBEBEAEAEAC8C8C8BCBCBCDADA - DAECECECEFEFEFE0E0E0F4F4F4F8F8F8E7E7E7E9E9E9E9E9E9FFFFFFFFFFFFFF - FFFFF5F5F5F5F5F5F5F5F5F5F5F5F6F6F6F4F4F4EDEDEDF0F0F0F6F6F6F6F6F6 - F8F8F8F9F9F9FBFBFBFDFDFDFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFEAEAEAEAEA - EAEAEAEAEAEAEAEBEBEBEAEAEAECECECF1F1F1EFEFEFEAEAEAEDEDEDECECECE9 - E9E9E5E5E5DFDFDFE1E1E1DFDFDFC6C6C6959595ABABABC2C2C2DEDEDEF5F5F5 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F4F4F4F4F4F4F6F6F6F6F6F6F7F7F7F8F8 - F8F8F8F8F8F8F8FFFFFFFFFFFFFFFFFFFCFCFCEBEBEBEAEAEAE7E7E7E8E8E8E9 - E9E9E9E9E9E8E8E8E7E7E7E8E8E8DBDBDBF1F1F1FFFFFFFFFFFFFFFFFFEAEAEA - E9E9E9E7E7E7E5E5E5E3E3E3E4E4E4E4E4E4E1E1E1C6C6C6D3D3D3F3F3F3F7F7 - F7F7F7F7F7F7F7FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8F8F8 - F8F8F8F8F8F9F9F9F9F9F9F9F9F9FCFCFCFBFBFBF4F4F4F0F0F0EEEEEEECECEC - F1F1F1F6F6F6F7F7F7FAFAFAFBFBFBF9F9F9F8F8F8F8F8F8F8F8F8FFFFFFFFFF - FFFEFEFEECECECEDEDEDEEEEEEEAEAEAE7E7E7E6E6E6E6E6E6D4D4D4BABABACA - CACAE6E6E6F4F4F4F5F5F5F5F5F5F5F5F5F5F5F5F4F4F4F3F3F3F4F4F4FAFAFA - FCFCFCFAFAFAF8F8F8F6F6F6F8F8F8F4F4F4D7D7D7D7D7D7D9D9D9C8C8C8BABA - BAC2C2C2DFDFDFEDEDEDF3F3F3F7F7F7F8F8F8F8F8F8F8F8F8F8F8F8F7F7F7FF - FFFFE7E7E7E9E9E9E9E9E9D7D7D7E5E5E5F7F7F7F7F7F7F8F8F8F7F7F7F4F4F4 - F1F1F1E6E6E6ECECECF5F5F5F1F1F1F5F5F5F9F9F9FFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFBFBFBF7F7F7F8F8F8F8F8F8F8F8F8F8F8F8FFFFFFFCFCFCE8E8E8D1 - D1D1A2A2A2B9B9B9E7E7E7FDFDFDFBFBFBF7F7F7F8F8F8F8F8F8F7F7F7F4F4F4 - F4F4F4F7F7F7F7F7F7F5F5F5F1F1F1F2F2F2E6E6E6E4E4E4F2F2F2F3F3F3F4F4 - F4F7F7F7F7F7F7F6F6F6F6F6F6F8F8F8FFFFFFFFFFFFECECECE9E9E9E9E9E9EA - EAEAEAEAEAEAEAEAECECECEDEDEDEAEAEAE8E8E8E9E9E9E8E8E8D3D3D3AAAAAA - CFCFCFF5F5F5F8F8F8FCFCFC0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FFF8F8F8F8F8F8F8F8F8F9F9 - F9FBFBFBFFFFFFF4F4F4EAEAEAF5F5F5F5F5F5F4F4F4F4F4F4F3F3F3F5F5F5F8 - F8F8F7F7F7F5F5F5F5F5F5F5F5F5F6F6F6F7F7F7F7F7F7FFFFFFFBFBFBEDEDED - EDEDEDDBDBDBDFDFDFEDEDEDECECECECECECEBEBEBE9E9E9C3C3C3CECECEF0F0 - F0F4F4F4F4F4F4F4F4F4FFFFFFFDFDFDEBEBEBE7E7E7E7E7E7F8F8F8FFFFFFEC - ECECE7E7E7F5F5F5F5F5F5F5F5F5F5F5F5F2F2F2EAEAEAF0F0F0F7F7F7F7F7F7 - F8F8F8F9F9F9FBFBFBFEFEFEFEFEFEFDFDFDFFFFFFFFFFFFFDFDFDEAEAEAEAEA - EAEAEAEAEAEAEAEDEDEDEBEBEBEDEDEDF1F1F1ECECECE7E7E7E9E9E9E7E7E7D0 - D0D0CDCDCDCACACACECECEC8C8C8959595AAAAAADADADAF3F3F3F7F7F7F9F9F9 - F9F9F9F9F9F9F7F7F7F5F5F5F5F5F5F3F3F3F5F5F5F7F7F7F7F7F7F8F8F8F9F9 - F9FBFBFBFFFFFFFFFFFFFFFFFFFEFEFEEAEAEAECECECEBEBEBE7E7E7E7E7E7E9 - E9E9E7E7E7D6D6D6C6C6C6D9D9D9E9E9E9F5F5F5FFFFFFFFFFFFF5F5F5E7E7E7 - E9E9E9E7E7E7E4E4E4E4E4E4E6E6E6E6E6E6E5E5E5DADADADFDFDFF1F1F1F8F8 - F8F7F7F7F8F8F8FCFCFCFFFFFFFFFFFFFFFFFFFBFBFBFCFCFCECECECE8E8E8F8 - F8F8F8F8F8F9F9F9FBFBFBFAFAFAFCFCFCF9F9F9EFEFEFEFEFEFEFEFEFEFEFEF - F4F4F4F7F7F7F8F8F8FAFAFAFBFBFBF8F8F8F8F8F8F9F9F9F9F9F9FFFFFFFFFF - FFECECECEAEAEAECECECEDEDEDE9E9E9E7E7E7E7E7E7E6E6E6C4C4C4C4C4C4E4 - E4E4F3F3F3F6F6F6F4F4F4F4F4F4F7F7F7F7F7F7F5F5F5F4F4F4F4F4F4F9F9F9 - F9F9F9F6F6F6F6F6F6F6F6F6F6F6F6F4F4F4E3E3E3E3E3E3C8C8C8C4C4C4D6D6 - D6E6E6E6F3F3F3F4F4F4F5F5F5F8F8F8F8F8F8F9F9F9F9F9F9F8F8F8F8F8F8FF - FFFFE6E6E6E7E7E7E7E7E7D6D6D6C7C7C7E6E6E6F5F5F5F5F5F5F6F6F6F2F2F2 - ECECECE7E7E7EEEEEEF5F5F5F4F4F4FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFDFD - FDEDEDEDE9E9E9DADADAE9E9E9F8F8F8F8F8F8F8F8F8FFFFFFEAEAEABEBEBE9F - 9F9FB6B6B6E6E6E6FCFCFCFEFEFEFBFBFBF8F8F8FAFAFAF9F9F9F7F7F7F7F7F7 - F6F6F6F7F7F7F7F7F7F7F7F7F5F5F5F7F7F7F7F7F7F4F4F4FFFFFFFFFFFFF7F7 - F7FAFAFAF8F8F8F6F6F6F6F6F6F7F7F7FFFFFFF8F8F8EAEAEAEAEAEAEAEAEAEA - EAEAEAEAEAEAEAEAEBEBEBEBEBEBE6E6E6E9E9E9EAEAEAE8E8E8C3C3C3BABABA - E4E4E4F9F9F9FFFFFFFFFFFF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFF8F8F8F7F7F7F9F9 - F9FAFAFAFFFFFFFFFFFFF7F7F7F5F5F5F4F4F4F2F2F2F1F1F1F2F2F2F5F5F5F8 - F8F8F7F7F7F7F7F7F7F7F7F5F5F5F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFFCFCFC - E9E9E9CDCDCDEAEAEAF8F8F8EAEAEAEAEAEAEBEBEBECECECC6C6C6D1D1D1F4F4 - F4F6F6F6F7F7F7F6F6F6F7F7F7FFFFFFFCFCFCE8E8E8E7E7E7E7E7E7E8E8E8D9 - D9D9E6E6E6F5F5F5F5F5F5F5F5F5F5F5F5EFEFEFEDEDEDF3F3F3F7F7F7F8F8F8 - F9F9F9FBFBFBFCFCFCFDFDFDFCFCFCFFFFFFFFFFFFFFFFFFECECECEDEDEDEAEA - EAECECECEEEEEEF1F1F1ECECECEEEEEEF0F0F0EAEAEAE7E7E7E7E7E7D1D1D1A3 - A3A3DCDCDCCFCFCFCECECEB7B7B7B2B2B2DCDCDCF2F2F2F9F9F9FAFAFAFAFAFA - FDFDFDFCFCFCF6F6F6F5F5F5F5F5F5F4F4F4F5F5F5F7F7F7F6F6F6F8F8F8F9F9 - F9FEFEFEFFFFFFFFFFFFFDFDFDE9E9E9E7E7E7E6E6E6E6E6E6E6E6E6E4E4E4E4 - E4E4E6E6E6D7D7D7E4E4E4FFFFFFF7F7F7E9E9E9EAEAEAE9E9E9E6E6E6E7E7E7 - E6E6E6E4E4E4E3E3E3E5E5E5E7E7E7E8E8E8E9E9E9E9E9E9D3D3D3E2E2E2F8F8 - F8F8F8F8FBFBFBFFFFFFFFFFFFFFFFFFEAEAEAE8E8E8E8E8E8D6D6D6F7F7F7FF - FFFFFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFF8F8F8F0F0F0F2F2F2F2F2F2F4F4F4 - F7F7F7F8F8F8F8F8F8FCFCFCFDFDFDF9F9F9F9F9F9F9F9F9F8F8F8FFFFFFECEC - ECCCCCCCDCDCDCEEEEEEEDEDEDEAEAEAE9E9E9E7E7E7E4E4E4C1C1C1CECECEF1 - F1F1F6F6F6F9F9F9F8F8F8F7F7F7F8F8F8F7F7F7F5F5F5F5F5F5F5F5F5F8F8F8 - F8F8F8F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F4F4F4F4F4F4E7E7E7E6E6E6F6F6 - F6F8F8F8F8F8F8F9F9F9F8F8F8F7F7F7F8F8F8F9F9F9F8F8F8F9F9F9FAFAFAFF - FFFFE6E6E6E7E7E7E7E7E7C6C6C6C3C3C3E6E6E6F5F5F5F5F5F5F5F5F5F2F2F2 - EAEAEAE9E9E9F0F0F0F4F4F4F7F7F7FCFCFCFFFFFFFFFFFFFEFEFEEBEBEBEBEB - EBEBEBEBE9E9E9DADADAE8E8E8F9F9F9FAFAFAF9F9F9F8F8F8E2E2E2C7C7C7CA - CACAE6E6E6FCFCFCFEFEFEFFFFFFFCFCFCFAFAFAFBFBFBF9F9F9F8F8F8F8F8F8 - F7F7F7F7F7F7F5F5F5F6F6F6F9F9F9FBFBFBF8F8F8FFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFF4F4F4F4F4F4F6F6F6F5F5F5F5F5F5F5F5F5DEDEDECECECECDCDCDCB - CBCBDADADAEAEAEAEBEBEBEBEBEBE9E9E9ECECECECECECD7D7D7AFAFAFCFCFCF - F4F4F4F9F9F9FFFFFFFFFFFF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFF7F7F7F7F7F7F9F9 - F9F8F8F8FFFFFFFDFDFDD9D9D9E2E2E2F0F0F0F1F1F1F2F2F2F5F5F5F7F7F7F9 - F9F9F8F8F8F7F7F7F7F7F7F5F5F5F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFFCFCFC - E9E9E9D2D2D2F7F7F7FFFFFFE7E7E7E6E6E6EAEAEAECECECD6D6D6E2E2E2F5F5 - F5F8F8F8F8F8F8F8F8F8F8F8F8FFFFFFFCFCFCE7E7E7E7E7E7E7E7E7E7E7E7E7 - E7E7E6E6E6F5F5F5F5F5F5F5F5F5F5F5F5EEEEEEEFEFEFF4F4F4F5F5F5F6F6F6 - F9F9F9F9F9F9FBFBFBFBFBFBFBFBFBFFFFFFFFFFFFFFFFFFF0F0F0EEEEEEE9E9 - E9EEEEEEEFEFEFEDEDEDEBEBEBEAEAEAECECECD4D4D4BBBBBBBBBBBBA4A4A4B7 - B7B7F3F3F3D7D7D7D3D3D3DFDFDFE1E1E1F1F1F1F2F2F2F9F9F9FAFAFAFAFAFA - FDFDFDFCFCFCF7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F8F8F8F9F9 - F9FCFCFCFFFFFFFAFAFACCCCCCC5C5C5C3C3C3C1C1C1D6D6D6E7E7E7E6E6E6E5 - E5E5E8E8E8EAEAEAF8F8F8FFFFFFF8F8F8E9E9E9E9E9E9E7E7E7E7E7E7E8E8E8 - E7E7E7E7E7E7E7E7E7E7E7E7E9E9E9ECECECECECECE9E9E9C7C7C7D7D7D7F9F9 - F9FAFAFAFDFDFDFFFFFFFFFFFFFBFBFBE9E9E9E8E8E8E8E8E8E8E8E8FBFBFBFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4F4F4F6F6F6 - F8F8F8F8F8F8FAFAFAFFFFFFFFFFFFFFFFFFF9F9F9F8F8F8F7F7F7F7F7F7E9E9 - E9D9D9D9F7F7F7FEFEFEEDEDEDE9E9E9E7E7E7E5E5E5E4E4E4BFBFBFCCCCCCF3 - F3F3F8F8F8F9F9F9F8F8F8F7F7F7F9F9F9F8F8F8F5F5F5F5F5F5F5F5F5F6F6F6 - F5F5F5F5F5F5F6F6F6F5F5F5F4F4F4F4F4F4F4F4F4F5F5F5F7F7F7F6F6F6F7F7 - F7F8F8F8FFFFFFFFFFFFFFFFFFFFFFFFF8F8F8F8F8F8F8F8F8F9F9F9FAFAFAFF - FFFFBFBFBFC1C1C1C0C0C0AFAFAFD3D3D3F3F3F3F3F3F3F3F3F3F3F3F3F2F2F2 - ECECECEEEEEEF4F4F4F7F7F7F9F9F9FFFFFFFFFFFFFFFFFFEBEBEBEBEBEBEBEB - EBEBEBEBE9E9E9E9E9E9DEDEDEF0F0F0FFFFFFFFFFFFFFFFFFF3F3F3F1F1F1F7 - F7F7FDFDFDFDFDFDFFFFFFFFFFFFFCFCFCFAFAFAF9F9F9F8F8F8F9F9F9F8F8F8 - F7F7F7F7F7F7F7F7F7F6F6F6F8F8F8F8F8F8F5F5F5FFFFFFFFFFFFF9F9F9F4F4 - F4EAEAEAE3E3E3F1F1F1F5F5F5F4F4F4F6F6F6F6F6F6E6E6E6D5D5D5D4D4D4D3 - D3D3E4E4E4EAEAEAEBEBEBEBEBEBE9E9E9EAEAEAEAEAEAC5C5C5BFBFBFE4E4E4 - F7F7F7FCFCFCFFFFFFFFFFFF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFF8F8F8F8F8 - F8F8F8F8FCFCFCEAEAEAD5D5D5E4E4E4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECECECEEEEEEEDEDED - ECECECE1E1E1FFFFFFFFFFFFEAEAEAE9E9E9E8E8E8E8E8E8E6E6E6D3D3D3E5E5 - E5F8F8F8F8F8F8F8F8F8F8F8F8FAFAFAF7F7F7EDEDEDECECECE7E7E7E7E7E7E7 - E7E7D3D3D3BDBDBDDDDDDDEFEFEFEEEEEEEAEAEAF0F0F0F4F4F4F4F4F4F7F7F7 - F8F8F8F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFEDEDEDEBEBEBE9E9 - E9ECECECECECECEAEAEAE9E9E9E9E9E9EAEAEABCBCBCB2B2B2C9C9C9CACACADE - DEDEF3F3F3E3E3E3E1E1E1EEEEEEF3F3F3F1F1F1F3F3F3F9F9F9FAFAFAFAFAFA - FDFDFDFFFFFFFBFBFBF7F7F7F7F7F7F7F7F7FBFBFBFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFEEEEEEC8C8C8D2D2D2D2D2D2D3D3D3F7F7F7FBFBFBE9E9E9E6 - E6E6E6E6E6E7E7E7E9E9E9EAEAEAEAEAEAEAEAEAE8E8E8E4E4E4E2E2E2E6E6E6 - E9E9E9E9E9E9EAEAEAEAEAEAEAEAEAEDEDEDEAEAEAE9E9E9C9C9C9D6D6D6F8F8 - F8F8F8F8F8F8F8FAFAFAFFFFFFF9F9F9E8E8E8E8E8E8E8E8E8E8E8E8E9E9E9EB - EBEBFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9FFFFFFFFFFFFF5F5F5F8F8F8 - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFAF7F7F7F7F7F7F6F6F6F5F5F5F6F6 - F6F7F7F7FFFFFFFCFCFCEBEBEBE9E9E9E8E8E8E6E6E6E5E5E5C1C1C1CFCFCFF5 - F5F5F8F8F8F9F9F9F8F8F8F7F7F7F9F9F9FAFAFAF7F7F7F5F5F5F5F5F5F5F5F5 - F4F4F4F4F4F4F5F5F5F4F4F4F4F4F4F5F5F5F5F5F5F6F6F6F7F7F7F6F6F6F5F5 - F5F9F9F9FFFFFFFFFFFFFFFFFFF7F7F7F4F4F4F9F9F9FFFFFFFFFFFFFFFFFFFF - FFFFD0D0D0D1D1D1CECECED2D2D2E4E4E4F1F1F1F3F3F3F3F3F3F2F2F2F0F0F0 - EEEEEEF2F2F2F5F5F5F7F7F7F9F9F9FFFFFFFFFFFFFDFDFDEBEBEBEAEAEAE9E9 - E9E9E9E9E7E7E7DCDCDCC4C4C4E1E1E1FFFFFFFFFFFFEDEDEDE9E9E9F8F8F8FC - FCFCFCFCFCFFFFFFFFFFFFFFFFFFFAFAFAF8F8F8F8F8F8F8F8F8F9F9F9F8F8F8 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F5F5F5FFFFFFFFFFFFE8E8E8E7E7 - E7DCDCDCF4F4F4FFFFFFF5F5F5F5F5F5F8F8F8F6F6F6F4F4F4F3F3F3F3F3F3F1 - F1F1F5F5F5F6F6F6EAEAEAEAEAEAE9E9E9DADADACACACAB4B4B4D3D3D3F5F5F5 - F7F7F7F9F9F9FFFFFFFFFFFF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFF9F9 - F9F8F8F8FAFAFAF8F8F8F5F5F5F5F5F5FFFFFFE9E9E9F5F5F5FFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFF9F9F9FFFFFFFFFFFFFAFAFAEBEBEBECECECECECEC - EDEDEDECECECF8F8F8F8F8F8EEEEEEECECECEBEBEBEAEAEAE8E8E8D5D5D5E3E3 - E3F6F6F6F7F7F7F7F7F7F8F8F8F8F8F8F7F7F7FCFCFCE9E9E9DFDFDFE4E4E4E2 - E2E2B7B7B7B0B0B0DCDCDCF1F1F1F0F0F0F0F0F0F4F4F4F4F4F4F5F5F5F9F9F9 - FBFBFBFBFBFBFBFBFBFDFDFDFFFFFFFFFFFFFFFFFFECECECDBDBDBEAEAEAEAEA - EAEAEAEAEAEAEAEAEAEAE9E9E9E8E8E8E9E9E9BCBCBCCCCCCCF4F4F4F4F4F4F3 - F3F3F5F5F5F2F2F2F1F1F1F3F3F3F4F4F4F0F0F0F4F4F4F9F9F9F9F9F9FDFDFD - FFFFFFFFFFFFFCFCFCF9F9F9FBFBFBFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFF3F3F3FBFBFBE0E0E0DADADAF3F3F3F3F3F3F4F4F4FFFFFFF9F9F9E9E9E9E2 - E2E2E0E0E0E4E4E4E9E9E9E9E9E9EAEAEAE9E9E9D9D9D9C8C8C8C9C9C9DDDDDD - EAEAEAE9E9E9EAEAEAEAEAEAEAEAEAEEEEEEEDEDEDECECECCBCBCBD5D5D5F5F5 - F5F5F5F5F5F5F5F8F8F8FFFFFFF7F7F7E4E4E4E4E4E4E4E4E4E4E4E4E8E8E8EA - EAEAE7E7E7E6E6E6E6E6E6E6E6E6E4E4E4E2E2E2F3F3F3F5F5F5E8E8E8FFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFBFBFBE9E9E9DADADAE6E6E6F3F3F3F2F2F2F3F3 - F3F5F5F5F7F7F7F9F9F9EBEBEBE9E9E9E8E8E8E4E4E4D3D3D3AFAFAFD0D0D0F4 - F4F4F7F7F7F9F9F9F9F9F9F8F8F8FBFBFBFEFEFEF8F8F8F5F5F5F5F5F5F4F4F4 - F3F3F3F3F3F3F4F4F4F4F4F4F6F6F6F7F7F7F7F7F7F6F6F6F6F6F6F7F7F7F7F7 - F7FFFFFFFFFFFFFFFFFFEAEAEAEBEBEBEAEAEAF5F5F5FBFBFBFDFDFDFDFDFDFF - FFFFF8F8F8F8F8F8F7F7F7F8F8F8F7F7F7F5F5F5F5F5F5F2F2F2F1F1F1F1F1F1 - F2F2F2F3F3F3F3F3F3F7F7F7FFFFFFFFFFFFFFFFFFEBEBEBE8E8E8E7E7E7E9E9 - E9E9E9E9E8E8E8D3D3D3D0D0D0EBEBEBFFFFFFFFFFFFDEDEDEF8F8F8FFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7F8F8F8F9F9F9F9F9F9FAFAFAF8F8F8 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7FFFFFFFFFFFFE9E9E9EAEA - EAECECECF8F8F8F7F7F7F6F6F6F6F6F6F8F8F8F7F7F7F7F7F7F8F8F8F9F9F9F9 - F9F9FBFBFBFAFAFAF7F7F7DCDCDCCCCCCCBABABAC6C6C6D5D5D5E4E4E4F4F4F4 - F4F4F4F5F5F5FFFFFFFFFFFF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFF8F8 - F8F7F7F7F8F8F8F9F9F9F9F9F9F9F9F9F9F9F9E9E9E9F9F9F9FFFFFFFFFFFFF0 - F0F0EAEAEAE9E9E9E6E6E6E7E7E7F9F9F9FBFBFBECECECECECECECECECEDEDED - EDEDEDEBEBEBEBEBEBEDEDEDEDEDEDEAEAEAEAEAEAEAEAEAE8E8E8E8E8E8D1D1 - D1E2E2E2F7F7F7F8F8F8FAFAFAFAFAFAFAFAFAFBFBFBF5F5F5D5D5D5C4C4C4BA - BABAA1A1A1CDCDCDF4F4F4F7F7F7F5F5F5F6F6F6F6F6F6F3F3F3F6F6F6FAFAFA - FBFBFBFBFBFBFCFCFCFEFEFEFFFFFFFDFDFDF7F7F7E7E7E7F7F7F7F8F8F8EAEA - EAE9E9E9E8E8E8E8E8E8E7E7E7E8E8E8E9E9E9D4D4D4E3E3E3F7F7F7F7F7F7F7 - F7F7F6F6F6F4F4F4F4F4F4F6F6F6F5F5F5F2F2F2F5F5F5F8F8F8FBFBFBFFFFFF - FFFFFFFFFFFFFAFAFAFCFCFCFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9EAEA - EADBDBDBE7E7E7E8E8E8E8E8E8F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFF9F9F9E4 - E4E4E1E1E1E4E4E4E9E9E9E8E8E8E9E9E9E7E7E7D9D9D9E1E1E1F4F4F4FFFFFF - FDFDFDEDEDEDECECECEBEBEBEDEDEDF1F1F1EEEEEEEAEAEAC8C8C8D2D2D2F3F3 - F3F5F5F5F5F5F5F8F8F8F7F7F7F4F4F4E6E6E6E4E4E4E5E5E5E6E6E6EBEBEBEA - EAEAE6E6E6E7E7E7E5E5E5E5E5E5E4E4E4E4E4E4E9E9E9EAEAEAE7E7E7FCFCFC - FFFFFFFEFEFEE8E8E8E9E9E9E9E9E9E7E7E7BFBFBFCECECEF0F0F0F3F3F3F5F5 - F5F7F7F7F7F7F7FFFFFFFFFFFFF7F7F7E6E6E6E4E4E4D4D4D4D2D2D2E3E3E3F6 - F6F6F8F8F8F9F9F9F9F9F9F7F7F7FAFAFAFBFBFBF5F5F5F1F1F1F0F0F0F1F1F1 - F0F0F0F2F2F2F4F4F4F7F7F7F8F8F8F8F8F8F7F7F7F5F5F5F5F5F5F5F5F5F4F4 - F4FFFFFFFFFFFFF9F9F9EAEAEAEAEAEAE9E9E9E9E9E9F1F1F1FCFCFCFDFDFDFF - FFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F8F8F8F7F7F7F4F4F4F3F3F3F4F4F4 - F3F3F3F3F3F3F4F4F4F9F9F9FFFFFFFFFFFFFBFBFBEAEAEAE9E9E9E9E9E9EBEB - EBEAEAEAEAEAEAD6D6D6DDDDDDF5F5F5FFFFFFFFFFFFEFEFEFFEFEFEFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFCFCFCECECECF7F7F7FAFAFAFBFBFBFAFAFAF9F9F9 - F8F8F8F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7FFFFFFFDFDFDE9E9E9E9E9 - E9E9E9E9E9E9E9E9E9E9E9E9E9F7F7F7F9F9F9F9F9F9F8F8F8F9F9F9FAFAFAF9 - F9F9F9F9F9F9F9F9F7F7F7E9E9E9D9D9D9D7D7D7E5E5E5F4F4F4F4F4F4F4F4F4 - F4F4F4F5F5F5FFFFFFFFFFFF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FFF6F6F6F8F8F8FBFBFBF9F9F9F8F8F8FAFAFAFBFBFBFFFFFFFFFFFFFFFFFFEE - EEEEE9E9E9E9E9E9E7E7E7E6E6E6E8E8E8EAEAEAEBEBEBECECECEDEDEDEDEDED - ECECECEBEBEBEBEBEBEDEDEDECECECEAEAEAE9E9E9E9E9E9E6E6E6E4E4E4D0D0 - D0E2E2E2F8F8F8F8F8F8F9F9F9FAFAFAFBFBFBFBFBFBFBFBFBEBEBEBD8D8D8D0 - D0D0CFCFCFE6E6E6F7F7F7F6F6F6F6F6F6F4F4F4F5F5F5F4F4F4F7F7F7FAFAFA - FBFBFBFBFBFBFDFDFDFDFDFDFDFDFDFDFDFDF5F5F5F1F1F1FFFFFFF7F7F7E9E9 - E9E8E8E8E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7D1D1D1BABABADFDFDFF4F4F4F5 - F5F5F5F5F5F6F6F6F6F6F6F6F6F6F5F5F5F2F2F2F6F6F6FAFAFAFEFEFEFFFFFF - FFFFFFEEEEEEE8E8E8F9F9F9FDFDFDFFFFFFFFFFFFFFFFFFECECECEAEAEAEAEA - EAEAEAEAECECECF6F6F6F5F5F5F5F5F5F5F5F5F5F5F5FFFFFFFFFFFFF8F8F8E5 - E5E5DEDEDEE2E2E2E9E9E9E7E7E7E7E7E7E5E5E5E5E5E5F4F4F4FFFFFFFFFFFF - FEFEFEEFEFEFEDEDEDEEEEEEEEEEEEF0F0F0EBEBEBE7E7E7D7D7D7E1E1E1F0F0 - F0F4F4F4F5F5F5F6F6F6F6F6F6F6F6F6FFFFFFF5F5F5EAEAEAEAEAEAEDEDEDEB - EBEBE7E7E7E7E7E7E6E6E6E6E6E6E6E6E6E6E6E6E7E7E7E7E7E7E6E6E6D1D1D1 - D3D3D3E6E6E6CECECEBCBCBCD4D4D4D1D1D1A9A9A9CFCFCFF4F4F4F7F7F7F8F8 - F8FBFBFBFFFFFFFFFFFFFFFFFFF7F7F7E9E9E9E9E9E9E8E8E8E6E6E6F3F3F3F7 - F7F7F8F8F8FBFBFBFCFCFCFBFBFBFCFCFCFCFCFCF5F5F5F3F3F3F3F3F3F3F3F3 - F4F4F4F5F5F5F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFF6F6F6F7F7F7F7F7F7F5F5 - F5FBFBFBFFFFFFF9F9F9EBEBEBECECECEBEBEBE7E7E7EAEAEAFFFFFFFEFEFEFF - FFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F8F8F8F5F5F5F4F4F4F4F4F4 - F3F3F3F4F4F4F7F7F7FFFFFFFFFFFFFFFFFFF0F0F0EEEEEEECECECECECECECEC - ECDFDFDFD3D3D3C8C8C8DCDCDCF4F4F4FFFFFFFFFFFFF0F0F0F2F2F2F2F2F2F1 - F1F1F3F3F3F0F0F0EBEBEBEBEBEBEBEBEBEAEAEAFBFBFBFDFDFDFAFAFAFAFAFA - F9F9F9F9F9F9F8F8F8F7F7F7F7F7F7F7F7F7F7F7F7FCFCFCFFFFFFF7F7F7E9E9 - E9E7E7E7E7E7E7E6E6E6E6E6E6E7E7E7F6F6F6F8F8F8F7F7F7F8F8F8F8F8F8F7 - F7F7F8F8F8F7F7F7F6F6F6F6F6F6F5F5F5F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4 - F4F4F4F5F5F5FFFFFFFFFFFF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FFF9F9F9FCFCFCFBFBFBF9F9F9FBFBFBFBFBFBFCFCFCFFFFFFFFFFFFEC - ECECE9E9E9E9E9E9E7E7E7E5E5E5E7E7E7EAEAEAEAEAEAEAEAEAECECECEDEDED - EDEDEDECECECECECECECECECEAEAEAE9E9E9E9E9E9E9E9E9E8E8E8E6E6E6E6E6 - E6D4D4D4E4E4E4F8F8F8F9F9F9FAFAFAFAFAFAFAFAFAFBFBFBF9F9F9F8F8F8F5 - F5F5F5F5F5F7F7F7F5F5F5F6F6F6F5F5F5F5F5F5F7F7F7F7F7F7F9F9F9FAFAFA - FBFBFBFBFBFBFDFDFDFFFFFFFFFFFFFDFDFDF5F5F5F1F1F1F2F2F2F1F1F1CFCF - CFD1D1D1E6E6E6E7E7E7E7E7E7E7E7E7E6E6E6CECECEC9C9C9DFDFDFF4F4F4F6 - F6F6F7F7F7F8F8F8F8F8F8F8F8F8F5F5F5F4F4F4F7F7F7F9F9F9FDFDFDFFFFFF - FFFFFFCACACAD5D5D5F7F7F7F9F9F9FFFFFFFFFFFFF8F8F8EBEBEBEAEAEAEAEA - EAEBEBEBECECECEAEAEAF5F5F5F5F5F5F5F5F5F5F5F5FFFFFFFFFFFFE5E5E5E2 - E2E2DCDCDCE2E2E2E8E8E8E7E7E7E6E6E6E6E6E6E7E7E7ECECECEFEFEFEDEDED - F1F1F1EFEFEFECECECECECECECECECECECECE9E9E9E7E7E7E7E7E7D1D1D1DFDF - DFF2F2F2F3F3F3F6F6F6F8F8F8F8F8F8FFFFFFFFFFFFEBEBEBEBEBEBEAEAEAE6 - E6E6E4E4E4E6E6E6E6E6E6E4E4E4E4E4E4E5E5E5E5E5E5E6E6E6D0D0D09C9C9C - CACACACECECE9A9A9AB8B8B8F7F7F7D6D6D6BDBDBDE5E5E5F8F8F8F8F8F8F8F8 - F8FFFFFFFFFFFFFFFFFFFFFFFFE8E8E8E9E9E9E9E9E9E6E6E6E3E3E3E5E5E5FF - FFFFFFFFFFF8F8F8FAFAFAF9F9F9F8F8F8F8F8F8F5F5F5F1F1F1F5F5F5F7F7F7 - F7F7F7F8F8F8FFFFFFFFFFFFFFFFFFFFFFFFFAFAFAF6F6F6F7F7F7F7F7F7F7F7 - F7FFFFFFFFFFFFFFFFFFE9E9E9EAEAEAEAEAEAE7E7E7E9E9E9F5F5F5F7F7F7FF - FFFFF9F9F9F9F9F9F8F8F8F8F8F8F8F8F8F8F8F8F9F9F9F7F7F7F5F5F5F5F5F5 - F6F6F6F7F7F7F8F8F8FFFFFFFFFFFFFEFEFEEEEEEEEBEBEBEAEAEAECECECDEDE - DEC2C2C2CCCCCCD9D9D9E4E4E4F2F2F2FFFFFFFFFFFFECECECECECECECECECEB - EBEBEBEBEBEAEAEAE9E9E9E9E9E9E9E9E9E9E9E9ECECECF8F8F8F9F9F9FBFBFB - F9F9F9F7F7F7F5F5F5F7F7F7F7F7F7F6F6F6F6F6F6F7F7F7FFFFFFF8F8F8E9E9 - E9E7E7E7E7E7E7E4E4E4E4E4E4E6E6E6DDDDDDE9E9E9F6F6F6F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F6F6F6F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 - F4F4F4F5F5F5FFFFFFFFFFFF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FFF9F9F9FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFAFAFAFFFFFFFFFFFFE9 - E9E9E7E7E7E7E7E7E6E6E6E5E5E5E7E7E7EAEAEAEAEAEAEBEBEBEDEDEDECECEC - ECECECEAEAEAEAEAEAEAEAEAE8E8E8E7E7E7E8E8E8EAEAEAE9E9E9E8E8E8E9E9 - E9C1C1C1D0D0D0F8F8F8FAFAFAFAFAFAFAFAFAF9F9F9F9F9F9F8F8F8F5F5F5F4 - F4F4F5F5F5F7F7F7F6F6F6F4F4F4F5F5F5F7F7F7F8F8F8F7F7F7F9F9F9FAFAFA - FBFBFBFDFDFDFFFFFFFFFFFFFEFEFEF8F8F8F1F1F1EFEFEFF2F2F2F1F1F1DEDE - DEE2E2E2E6E6E6E4E4E4E4E4E4E4E4E4E1E1E1DDDDDDE1E1E1F3F3F3F7F7F7F8 - F8F8F8F8F8F8F8F8F8F8F8F8F8F8F7F7F7F7F7F7F9F9F9FBFBFBFEFEFEFFFFFF - FCFCFCCBCBCBD1D1D1F5F5F5FFFFFFFFFFFFFFFFFFEAEAEAEAEAEAEAEAEAEAEA - EAEBEBEBEBEBEBEAEAEADADADAE6E6E6F5F5F5F5F5F5FFFFFFF8F8F8E4E4E4E2 - E2E2E1E1E1E5E5E5E8E8E8E7E7E7E7E7E7E8E8E8EAEAEAECECECEDEDEDEDEDED - F1F1F1EFEFEFEAEAEAEBEBEBEBEBEBEAEAEAE9E9E9E7E7E7E6E6E6BFBFBFD0D0 - D0F0F0F0F3F3F3F7F7F7F8F8F8FFFFFFFFFFFFFFFFFFEAEAEAE9E9E9D7D7D7C5 - C5C5C6C6C6D3D3D3DEDEDEDEDEDECECECED0D0D0D0D0D0BBBBBB9D9D9DAFAFAF - E0E0E0E2E2E2CCCCCCFAFAFAFFFFFFFDFDFDE3E3E3FFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFF7F7F7E7E7E7E6E6E6E7E7E7E4E4E4E2E2E2E5E5E5F7 - F7F7F8F8F8FFFFFFFFFFFFF3F3F3F1F1F1F2F2F2F1F1F1F0F0F0F4F4F4F8F8F8 - F9F9F9FFFFFFFFFFFFFFFFFFFDFDFDEBEBEBE9E9E9E7E7E7F3F3F3F4F4F4F5F5 - F5FFFFFFFFFFFFF8F8F8E6E6E6E7E7E7E7E7E7E4E4E4E7E7E7E8E8E8EDEDEDFF - FFFFF9F9F9F8F8F8F7F7F7F8F8F8F9F9F9F9F9F9F9F9F9F9F9F9F7F7F7F8F8F8 - F8F8F8F8F8F8F8F8F8FFFFFFFFFFFFF1F1F1EFEFEFE8E8E8DADADACECECEBEBE - BECCCCCCE7E7E7F2F2F2F4F4F4F9F9F9FFFFFFF9F9F9E9E9E9E9E9E9E9E9E9E9 - E9E9E9E9E9E8E8E8E7E7E7E7E7E7E8E8E8E9E9E9E9E9E9DADADAE7E7E7F8F8F8 - F7F7F7F5F5F5F4F4F4F5F5F5F6F6F6F5F5F5F6F6F6F7F7F7F7F7F7FFFFFFF9F9 - F9E5E5E5E4E4E4E2E2E2E3E3E3E8E8E8CCCCCCD8D8D8F4F4F4F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F3F3F3 - F3F3F3F3F3F3FFFFFFF8F8F80000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FFF8F8F8F9F9F9F8F8F8F9F9F9FBFBFBFBFBFBFFFFFFFBFBFBE6 - E6E6E6E6E6E8E8E8E6E6E6E4E4E4E7E7E7EAEAEAEAEAEAECECECECECECEAEAEA - EAEAEAE9E9E9E8E8E8E7E7E7E6E6E6E6E6E6E9E9E9EAEAEAE7E7E7E6E6E6D5D5 - D5AAAAAAD1D1D1F9F9F9FAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F8F8F8F5F5F5F4 - F4F4F5F5F5F5F5F5F3F3F3F4F4F4F7F7F7F8F8F8F7F7F7F8F8F8F9F9F9FBFBFB - FEFEFEFFFFFFFEFEFEFDFDFDF7F7F7F1F1F1EFEFEFF1F1F1F5F5F5F6F6F6F7F7 - F7F9F9F9F9F9F9E6E6E6E1E1E1E1E1E1DEDEDEDEDEDEE1E1E1D9D9D9E5E5E5F5 - F5F5F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8FBFBFBFDFDFDFEFEFEFEFEFE - FCFCFCE4E4E4E1E1E1F7F7F7FFFFFFFFFFFFF9F9F9ECECECEBEBEBECECECEBEB - EBEDEDEDEEEEEEEEEEEEDBDBDBE6E6E6F5F5F5F5F5F5F5F5F5FFFFFFF6F6F6E3 - E3E3E1E1E1E4E4E4E8E8E8E7E7E7E7E7E7E7E7E7E8E8E8DDDDDDDFDFDFECECEC - EEEEEEEDEDEDEAEAEAEBEBEBD9D9D9C2C2C2BDBDBDBBBBBBBCBCBCA5A5A5CCCC - CCEEEEEEF3F3F3F8F8F8F7F7F7FFFFFFFFFFFFF7F7F7E9E9E9D9D9D9B5B5B5C4 - C4C4E6E6E6FDFDFDF0F0F0D6D6D6B2B2B2CECECEBABABAB2B2B2C6C6C6E1E1E1 - F8F8F8F9F9F9F9F9F9FFFFFFFFFFFFFDFDFDE8E8E8FFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFF7F7F7EDEDEDEAEAEAEAEAEAEAEAEAE6E6E6E6E6E6EAEAEAEC - ECECEAEAEAF8F8F8EAEAEAE4E4E4F1F1F1F5F5F5F5F5F5F7F7F7F9F9F9FAFAFA - FCFCFCFFFFFFFFFFFFFFFFFFEBEBEBE9E9E9E7E7E7E5E5E5E4E4E4F5F5F5FFFF - FFFFFFFFFFFFFFE7E7E7E7E7E7E9E9E9DBDBDBC9C9C9C5C5C5C9C9C9CCCCCCFF - FFFFF8F8F8F7F7F7F8F8F8F9F9F9FAFAFAFAFAFAFAFAFAF9F9F9F9F9F9F7F7F7 - F7F7F7F8F8F8F8F8F8FFFFFFFFFFFFF7F7F7F0F0F0E8E8E8CCCCCCCACACADADA - DAEBEBEBF7F7F7F7F7F7F9F9F9F9F9F9F8F8F8FFFFFFF3F3F3E9E9E9E9E9E9E9 - E9E9E8E8E8E7E7E7E7E7E7E8E8E8D7D7D7D8D8D8DDDDDDBCBCBCDADADAF8F8F8 - F5F5F5F4F4F4F3F3F3F5F5F5F6F6F6F6F6F6F8F8F8F5F5F5F2F2F2FFFFFFFBFB - FBE7E7E7E4E4E4E4E4E4E6E6E6E9E9E9D8D8D8E3E3E3F4F4F4F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F4F4F4F3F3F3F3F3F3F3F3F3F3F3F3F2F2F2F0F0F0 - EEEEEEECECECEDEDEDFBFBFB0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FFF8F8F8F9F9F9FCFCFCFCFCFCFBFBFBF9F9F9F7F7F7E5 - E5E5E6E6E6E8E8E8E4E4E4E6E6E6E9E9E9EAEAEAEAEAEADDDDDDCCCCCCC8C8C8 - C6C6C6C4C4C4D6D6D6E6E6E6E8E8E8E9E9E9EAEAEAE9E9E9E6E6E6D4D4D4ACAC - ACBBBBBBE4E4E4F7F7F7F8F8F8F7F7F7F8F8F8F8F8F8F9F9F9F7F7F7F3F3F3F3 - F3F3F4F4F4F4F4F4F3F3F3F6F6F6F8F8F8F7F7F7F8F8F8F9F9F9FAFAFAFBFBFB - FFFFFFFFFFFFFAFAFAF8F8F8F7F7F7F3F3F3F3F3F3F5F5F5F8F8F8F7F7F7F9F9 - F9FBFBFBFBFBFBF8F8F8E6E6E6E4E4E4E1E1E1E4E4E4E7E7E7DADADAE4E4E4F4 - F4F4F8F8F8F8F8F8F8F8F8F9F9F9F9F9F9F9F9F9FBFBFBFDFDFDFEFEFEFCFCFC - F8F8F8F4F4F4F3F3F3FFFFFFFFFFFFFFFFFFF0F0F0ECECECECECECECECECEDED - EDEEEEEEEEEEEEECECECEAEAEAE8E8E8F5F5F5F5F5F5F5F5F5FFFFFFFFFFFFE4 - E4E4E3E3E3E6E6E6E7E7E7E8E8E8E6E6E6D9D9D9CDCDCDBFBFBFDCDCDCDFDFDF - D0D0D0CFCFCFDCDCDCD9D9D9B1B1B1BEBEBECECECECECECECECECECCCCCCE0E0 - E0F3F3F3F5F5F5F7F7F7F7F7F7F3F3F3FFFFFFE6E6E6C5C5C5B3B3B3C1C1C1E3 - E3E3FFFFFFF7F7F7DEDEDEBDBDBDBFBFBFDCDCDCDEDEDEE1E1E1F5F5F5F9F9F9 - FAFAFAFCFCFCFDFDFDFFFFFFFFFFFFEAEAEAEAEAEAFDFDFDFCFCFCECECECEDED - EDEBEBEBEBEBEBECECECECECECEBEBEBEDEDEDECECECE6E6E6E4E4E4E5E5E5E5 - E5E5E6E6E6E7E7E7DADADAE2E2E2F2F2F2F8F8F8FAFAFAF9F9F9F9F9F9F9F9F9 - FFFFFFFFFFFFFFFFFFEEEEEEE9E9E9E7E7E7E5E5E5E4E4E4E6E6E6EDEDEDFFFF - FFFFFFFFFCFCFCE9E9E9E8E8E8E9E9E9CCCCCCBFBFBFD2D2D2DADADADCDCDCFF - FFFFF7F7F7F8F8F8F9F9F9FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAF8F8F8 - F8F8F8F7F7F7F7F7F7FFFFFFFFFFFFECECECE2E2E2E2E2E2C9C9C9DADADAF8F8 - F8F9F9F9F7F7F7F7F7F7F7F7F7F9F9F9F8F8F8FFFFFFFFFFFFEEEEEEE9E9E9E9 - E9E9E7E7E7E7E7E7E7E7E7CCCCCC9A9A9ACACACACCCCCCC3C3C3E9E9E9F5F5F5 - F1F1F1F1F1F1F1F1F1F4F4F4F4F4F4F5F5F5F5F5F5F1F1F1F1F1F1F6F6F6F5F5 - F5D0D0D0D3D3D3E7E7E7E6E6E6E7E7E7E4E4E4E7E7E7F4F4F4F5F5F5F6F6F6F6 - F6F6F6F6F6F5F5F5F3F3F3F1F1F1EFEFEFECECECEAEAEAEBEBEBEBEBEBECECEC - EAEAEAEDEDEDF0F0F00000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FFFAFAFAFBFBFBFAFAFAF8F8F8F7F7F70000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FFF2F2F2F0F0F0F3F3F3F3F3F3F3F3 - F3F6F6F6F7F7F7F7F7F7F7F7F7F5F5F5FFFFFFD2D2D2BCBCBCCFCFCFE1E1E1F2 - F2F2F4F4F4E8E8E8DADADAD2D2D2DADADAEEEEEEF4F4F4F8F8F8FAFAFAFAFAFA - FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFEAEAEAECECECEAEAEAE9E9E9E9E9E9EAEA - EAEBEBEBE9E9E9E9E9E9EBEBEBE9E9E9EAEAEAE9E9E9E7E7E7E4E4E4E4E4E4E3 - E3E3E2E2E2E6E6E6E7E7E7D7D7D7E5E5E5F9F9F9F9F9F9F8F8F8F7F7F7F7F7F7 - FFFFFFFFFFFFFEFEFEEBEBEBE8E8E8E4E4E4E3E3E3E4E4E4E8E8E8EAEAEAFBFB - FBFBFBFBEBEBEBEAEAEAE9E9E9E9E9E9C8C8C8D2D2D2F3F3F3FBFBFBF9F9F9FF - FFFFF9F9F9F9F9F9FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA - FBFBFBF9F9F9FFFFFFFFFFFFFFFFFFE5E5E5E2E2E2E2E2E2CCCCCCDADADAF7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFEDEDEDE7E7E7E7 - E7E7E7E7E7E7E7E7CDCDCD8F8F8FA9A9A9E4E4E4E7E7E7DFDFDFF3F3F3EFEFEF - EEEEEEEFEFEFEDEDEDF0F0F0F3F3F3F3F3F3F3F3F3F1F1F1F5F5F5F9F9F9F7F7 - F7E2E2E2E5E5E5E7E7E7E7E7E7E7E7E7E7E7E7E9E9E9EAEAEAFFFFFFFFFFFFFF - FFFFFFFFFFF3F3F3EFEFEFEDEDEDECECECEAEAEAEAEAEAEDEDEDECECECEEEEEE - F0F0F0F4F4F4F8F8F80000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FFF8F8F8F8F8F8F7F7F7F7F7F70000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FFF1F1F1F3F3F3F9F9F9F6F6F6F4F4 - F4F8F8F8F8F8F8F7F7F7F7F7F7F7F7F7F6F6F6E2E2E2E2E2E2F3F3F3F4F4F4F5 - F5F5F3F3F3FFFFFFFFFFFFFBFBFBECECECF4F4F4F7F7F7FAFAFAFBFBFBFBFBFB - FEFEFEFFFFFFFFFFFFFFFFFFFEFEFEEBEBEBEBEBEBECECECE9E9E9E7E7E7D9D9 - D9C8C8C8C5C5C5CACACADBDBDBDFDFDFD6D6D6E1E1E1EBEBEBE9E9E9E9E9E9E8 - E8E8E7E7E7E7E7E7E9E9E9DADADAF7F7F7FFFFFFF8F8F8F6F6F6F6F6F6F8F8F8 - FFFFFFFFFFFFEAEAEAE9E9E9E5E5E5E1E1E1E2E2E2E7E7E7E9E9E9E8E8E8EAEA - EAEAEAEAE9E9E9E9E9E9DCDCDCCDCDCDB8B8B8D9D9D9FBFBFBFFFFFFFFFFFFFF - FFFFFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFAFAFAFAFAFA - FBFBFBFBFBFBFFFFFFFFFFFFFEFEFEE8E8E8E8E8E8E8E8E8CCCCCCD8D8D8F4F4 - F4F9F9F9F9F9F9F7F7F7F9F9F9FFFFFFFFFFFFFFFFFFF7F7F7F0F0F0ECECECE9 - E9E9E8E8E8E7E7E7B2B2B2A9A9A9E4E4E4FEFEFEFDFDFDF7F7F7F0F0F0E9E9E9 - E9E9E9E9E9E9EBEBEBF3F3F3F3F3F3F5F5F5F8F8F8F8F8F8F8F8F8FAFAFAFAFA - FAFAFAFAFAFAFAF8F8F8E8E8E8E7E7E7E9E9E9EAEAEAEAEAEAF7F7F7FFFFFFFF - FFFFF7F7F7EFEFEFEEEEEEECECECECECECEEEEEEF2F2F2F5F5F5F4F4F4F6F6F6 - F7F7F7F8F8F8F7F7F70000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FFF7F7F7F7F7F7F7F7F7F7F7F70000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FFF4F4F4F9F9F9FDFDFDFBFBFBF9F9 - F9FDFDFDFBFBFBF7F7F7F7F7F7F7F7F7F6F6F6F5F5F5F7F7F7F7F7F7F8F8F8F9 - F9F9FFFFFFFFFFFFFFFFFFF5F5F5F3F3F3F7F7F7F9F9F9FBFBFBFBFBFBFCFCFC - FFFFFFFFFFFFFFFFFFFEFEFEF8F8F8ECECECEAEAEAEBEBEBD9D9D9C4C4C4B1B1 - B1C1C1C1D3D3D3D8D8D8E7E7E7D2D2D2CACACAE1E1E1DFDFDFDFDFDFE8E8E8E8 - E8E8E6E6E6E5E5E5E9E9E9DCDCDCDDDDDDDEDEDEE9E9E9F6F6F6F6F6F6FFFFFF - FFFFFFFFFFFFE7E7E7E7E7E7E3E3E3E1E1E1E6E6E6EAEAEAE9E9E9E9E9E9EAEA - EAEAEAEAE9E9E9E9E9E9DCDCDCE4E4E4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFCFCFCFBFBFBFCFCFCFCFCFCFCFCFCFDFDFDFEFEFEFEFEFEFCFCFCFBFBFB - FCFCFCFFFFFFFFFFFFFFFFFFECECECE8E8E8E7E7E7E6E6E6C8C8C8D3D3D3F1F1 - F1F7F7F7F8F8F8F9F9F9FFFFFFFFFFFFFFFFFFEDEDEDF0F0F0F8F8F8F1F1F1EA - EAEAE9E9E9E9E9E9D0D0D0E5E5E5FFFFFFFFFFFFFFFFFFFFFFFFF7F7F7F0F0F0 - EEEEEEEDEDEDF0F0F0F5F5F5F5F5F5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFAFAFAFAFAFAFAFAFAF9F9F9EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEA - EAEAE9E9E9E4E4E4EDEDEDEBEBEBEFEFEFF5F5F5F7F7F7F9F9F9F9F9F9F9F9F9 - F9F9F9F8F8F8F7F7F70000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FFFCFCFCF8F8F8F7F7F70000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FFF7F7F7FBFBFBFDFDFDFCFCFCFDFD - FDFFFFFFFBFBFBF7F7F7F7F7F7F7F7F7F6F6F6F6F6F6F8F8F8F8F8F8F8F8F8F9 - F9F9FFFFFFFFFFFFFDFDFDEBEBEBDBDBDBEDEDEDFCFCFCFAFAFAFCFCFCFFFFFF - FFFFFFFFFFFFFFFFFFF9F9F9F7F7F7F2F2F2DCDCDCCECECEB1B1B1B7B7B7D0D0 - D0E6E6E6F6F6F6F8F8F8F8F8F8E9E9E9E2E2E2EDEDEDE7E7E7E5E5E5D9D9D9CC - CCCCD7D7D7DADADAD1D1D1BEBEBEC6C6C6D8D8D8E7E7E7F6F6F6F6F6F6FFFFFF - FFFFFFF9F9F9E7E7E7E7E7E7E6E6E6E3E3E3E7E7E7D8D8D8C3C3C3C5C5C5D8D8 - D8E9E9E9EBEBEBEBEBEBEBEBEBF7F7F7FFFFFFFFFFFFFFFFFFFFFFFFF8F8F8FF - FFFFFBFBFBFBFBFBFCFCFCFDFDFDFDFDFDFEFEFEFEFEFEFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFEAEAEAE9E9E9E5E5E5D6D6D6BCBCBCD5D5D5F1F1 - F1F5F5F5F5F5F5FFFFFFFFFFFFFFFFFFF7F7F7F0F0F0F7F7F7F7F7F7EFEFEFEA - EAEAEAEAEAE9E9E9EAEAEAD7D7D7EAEAEAFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9 - F7F7F7F5F5F5F5F5F5F6F6F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEAEA - EAE4E4E4FAFAFAFAFAFAFAFAFAFDFDFDF0F0F0ECECECEBEBEBEAEAEAEAEAEAEA - EAEAEAEAEAE7E7E7D7D7D7E0E0E0F4F4F4F9F9F9FAFAFAFAFAFAFAFAFAFAFAFA - FCFCFCFDFDFDF9F9F90000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFF5F5F5F7F7F70000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FFF7F7F7F9F9F9FAFAFAFAFAFAFBFB - FBFDFDFDFBFBFBF9F9F9F8F8F8F7F7F7F6F6F6F6F6F6F8F8F8F8F8F8F8F8F8F8 - F8F8FFFFFFFCFCFCEBEBEBEBEBEBDCDCDCEAEAEAF9F9F9FDFDFDFFFFFFFFFFFF - FFFFFFFFFFFFFBFBFBF5F5F5F4F4F4F1F1F1E5E5E5D0D0D0C9C9C9DCDCDCF3F3 - F3F8F8F8F8F8F8F8F8F8F8F8F8F9F9F9F8F8F8F7F7F7F7F7F7F2F2F2E4E4E4D7 - D7D7E4E4E4D1D1D1CCCCCCD0D0D0E2E2E2F4F4F4F3F3F3F4F4F4F5F5F5FFFFFF - FFFFFFE7E7E7E7E7E7E7E7E7E7E7E7E3E3E3E7E7E7C1C1C1BABABAE2E2E2FFFF - FFFBFBFBEDEDEDEBEBEBE9E9E9E9E9E9EEEEEEF6F6F6F5F5F5ECECECE6E6E6FF - FFFFFAFAFAFBFBFBFEFEFEFEFEFEFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFEBEBEBE8E8E8E7E7E7D9D9D9BDBDBDC8C8C8E2E2E2F0F0 - F0F4F4F4FFFFFFFFFFFFFFFFFFFEFEFEF6F6F6F9F9F9F7F7F7F1F1F1EAEAEAE9 - E9E9EAEAEAE8E8E8E9E9E9C1C1C1D2D2D2FFFFFFFFFFFFFDFDFDFCFCFCFAFAFA - F6F6F6F4F4F4F4F4F4F7F7F7FFFFFFFFFFFFFFFFFFEAEAEAE8E8E8E9E9E9D1D1 - D1E3E3E3FAFAFAFBFBFBFDFDFDFFFFFFFFFFFFF1F1F1EDEDEDEAEAEAEAEAEAEA - EAEAEAEAEAE9E9E9D8D8D8E3E3E3F7F7F7FAFAFAFAFAFAFAFAFAFAFAFAFFFFFF - FFFFFFFFFFFFFFFFFF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFE4E4E4F6F6F6F7F7F7F7 - F7F7F4F4F4F4F4F4F5F5F5F8F8F8F7F7F7F5F5F5F5F5F5F7F7F7F7F7F7F7F7F7 - F8F8F8F8F8F8F9F9F9F8F8F8F8F8F8FFFFFFFCFCFCC4C4C4D4D4D4F4F4F4F6F6 - F6FCFCFCFBFBFBF6F6F6F6F6F6F5F5F5F4F4F4F5F5F5F5F5F5F8F8F8F8F8F8F8 - F8F8FCFCFCFEFEFEFBFBFBF8F8F8F7F7F7F8F8F8FBFBFBFCFCFCFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEAEAEAC9C9C9D9D9 - D9EDEDEDEDEDEDF1F1F1F6F6F6F5F5F5FFFFFFFCFCFCF1F1F1EDEDEDEBEBEBEA - EAEAE8E8E8E6E6E6E5E5E5E5E5E5E4E4E4E3E3E3E6E6E6C8C8C8D3D3D3F3F3F3 - F5F5F5F4F4F4F4F4F4FFFFFFFFFFFFEBEBEBF6F6F6FFFFFFF6F6F6F8F8F8FFFF - FFFFFFFFE6E6E6E4E4E4E2E2E2DFDFDFD8D8D8F5F5F5FFFFFFFFFFFFFCFCFCEC - ECECE9E9E9EAEAEAE6E6E6C1C1C1D1D1D1F4F4F4F3F3F3F0F0F0EFEFEFF1F1F1 - F2F2F2F5F5F5F7F7F7F7F7F7F7F7F7F8F8F8F8F8F8F8F8F8FAFAFAFCFCFCFCFC - FCFFFFFFFFFFFFFFFFFFF9F9F9F8F8F8F7F7F7F7F7F7F8F8F8F8F8F8F8F8F8F8 - F8F8F9F9F9FFFFFFFBFBFBEBEBEBEBEBEBEAEAEAF7F7F7FBFBFBFFFFFFFFFFFF - FFFFFFFCFCFCF7F7F7F4F4F4F4F4F4F1F1F1F0F0F0ECECECE8E8E8F1F1F1F6F6 - F6F7F7F7F8F8F8F8F8F8F8F8F8F9F9F9F7F7F7F6F6F6F7F7F7F7F7F7F1F1F1F1 - F1F1F3F3F3E4E4E4DDDDDDEAEAEAF0F0F0F1F1F1F2F2F2F4F4F4F4F4F4FFFFFF - FFFFFFE7E7E7E7E7E7E7E7E7E7E7E7E6E6E6E7E7E7BFBFBFCECECEFFFFFFFFFF - FFFDFDFDEBEBEBDBDBDBCDCDCDD1D1D1D5D5D5E2E2E2E8E8E8E2E2E2E1E1E1FF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBE9E9E9 - E9E9E9EAEAEAEBEBEBEAEAEAE7E7E7E7E7E7DCDCDCD6D6D6E2E2E2F1F1F1F2F2 - F2F3F3F3FFFFFFFFFFFFF9F9F9F4F4F4F4F4F4F3F3F3F0F0F0ECECECE9E9E9E9 - E9E9EAEAEAE8E8E8E9E9E9C5C5C5D1D1D1F9F9F9FDFDFDFCFCFCFAFAFAF8F8F8 - F7F7F7F6F6F6F7F7F7FAFAFAFFFFFFFFFFFFECECECE8E8E8E6E6E6E7E7E7E7E7 - E7E7E7E7FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFF8F8F8ECECECE9E9E9E9E9E9E9 - E9E9E8E8E8E9E9E9E6E6E6E9E9E9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFEEEEEEF3F3F3F4 - F4F4F3F3F3F5F5F5F8F8F8FBFBFBF9F9F9F7F7F7F7F7F7F8F8F8F9F9F9F9F9F9 - FAFAFAFBFBFBF9F9F9F7F7F7F7F7F7FFFFFFFDFDFDD8D8D8F8F8F8FFFFFFFFFF - FFFFFFFFFEFEFEF7F7F7FAFAFAF7F7F7F5F5F5F9F9F9FAFAFAFBFBFBF9F9F9F9 - F9F9FCFCFCFEFEFEFAFAFAF7F7F7F5F5F5F7F7F7FBFBFBFBFBFBFFFFFFFFFFFF - FFFFFFF0F0F0FCFCFCFEFEFEFFFFFFFFFFFFFFFFFFEDEDEDD7D7D7D1D1D1E4E4 - E4EDEDEDEEEEEEEEEEEEF1F1F1F3F3F3FFFFFFFFFFFFEEEEEEEAEAEAE8E8E8E7 - E7E7E6E6E6E4E4E4E1E1E1E0E0E0E2E2E2E3E3E3E5E5E5C6C6C6D3D3D3F2F2F2 - F1F1F1F2F2F2F3F3F3FFFFFFF9F9F9DCDCDCDCDCDCDADADAE6E6E6F5F5F5FFFF - FFF7F7F7E6E6E6E6E6E6D3D3D3D3D3D3D9D9D9EEEEEEFFFFFFFEFEFEEDEDEDEB - EBEBEAEAEAECECECE9E9E9D5D5D5E3E3E3F1F1F1F0F0F0EFEFEFF1F1F1F5F5F5 - F7F7F7F8F8F8F8F8F8F8F8F8F8F8F8FBFBFBFBFBFBFBFBFBFDFDFDFCFCFCFFFF - FFFFFFFFFFFFFFFCFCFCF7F7F7F9F9F9F9F9F9F7F7F7F8F8F8F8F8F8F9F9F9F9 - F9F9FDFDFDFFFFFFFEFEFEEBEBEBECECECEDEDEDEEEEEEFBFBFBFFFFFFFCFCFC - F9F9F9F7F7F7F4F4F4F4F4F4F3F3F3F0F0F0EFEFEFEDEDEDEFEFEFF4F4F4F7F7 - F7F7F7F7F7F7F7F7F7F7F8F8F8F8F8F8F7F7F7F6F6F6F4F4F4F4F4F4F3F3F3F3 - F3F3F0F0F0EAEAEAECECECF1F1F1F1F1F1F1F1F1F5F5F5F7F7F7F5F5F5FFFFFF - FAFAFAE7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7BCBCBCCFCFCFF9F9F9F9F9 - F9DCDCDCCCCCCCBFBFBFCDCDCDDCDCDCDCDCDCF5F5F5F4F4F4E5E5E5DEDEDEFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBE9E9E9EAEAEAEAEAEA - EAEAEAEBEBEBEAEAEAE9E9E9E7E7E7E9E9E9E9E9E9D7D7D7F0F0F0FFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFE9E9E9EBEBEBEBEBEBE9E9E9E9E9E9E9E9E9E8E8E8EB - EBEBEAEAEADADADACACACAB4B4B4D1D1D1F7F7F7FBFBFBFBFBFBFAFAFAF9F9F9 - F9F9F9FBFBFBFDFDFDFFFFFFFFFFFFFFFFFFEBEBEBE8E8E8E7E7E7E7E7E7E6E6 - E6E6E6E6DCDCDCEFEFEFFFFFFFFCFCFCF8F8F8F5F5F5F4F4F4D9D9D9C8C8C8C6 - C6C6C3C3C3D5D5D5E4E4E4EDEDEDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFF1F1F1ECECEC0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFF2F2F2F4 - F4F4F5F5F5F7F7F7F8F8F8FAFAFAF9F9F9F8F8F8F8F8F8FAFAFAFCFCFCFBFBFB - F8F8F8F8F8F8F7F7F7F6F6F6F7F7F7F9F9F9FFFFFFFAFAFAFBFBFBFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFBFBFBF9F9F9F9F9F9FBFBFBFCFCFCFBFBFBF9F9F9FB - FBFBFFFFFFFFFFFFFAFAFAF7F7F7F3F3F3F5F5F5F9F9F9F8F8F8FFFFFFFFFFFF - EDEDEDEDEDEDEEEEEEEDEDEDF8F8F8FFFFFFFCFCFCEAEAEAD1D1D1DADADAEDED - EDEDEDEDEBEBEBEBEBEBEEEEEEEEEEEEFFFFFFFFFFFFECECECE8E8E8E7E7E7E7 - E7E7E7E7E7E4E4E4E1E1E1E3E3E3E9E9E9EAEAEAEAEAEADCDCDCE6E6E6EFEFEF - F0F0F0F1F1F1F4F4F4F4F4F4E4E4E4D6D6D6D8D8D8D5D5D5E1E1E1F2F2F2F3F3 - F3F3F3F3E6E6E6E6E6E6D5D5D5F1F1F1EFEFEFFDFDFDFEFEFEEDEDEDECECECEB - EBEBEAEAEAEAEAEAEAEAEAE8E8E8D2D2D2DCDCDCF0F0F0F3F3F3F5F5F5F7F7F7 - F7F7F7F8F8F8F9F9F9F8F8F8FAFAFAFFFFFFFDFDFDFCFCFCFCFCFCF7F7F7FFFF - FFFFFFFFF7F7F7E4E4E4E7E7E7FFFFFFFFFFFFFFFFFFF9F9F9F8F8F8FAFAFAF9 - F9F9FCFCFCFDFDFDF8F8F8EBEBEBEDEDEDEDEDEDEEEEEEEEEEEEFFFFFFFFFFFF - FFFFFFF5F5F5F4F4F4F3F3F3F0F0F0EEEEEEEEEEEEF1F1F1F4F4F4F7F7F7F7F7 - F7F5F5F5F6F6F6F7F7F7F8F8F8F8F8F8F8F8F8F7F7F7F5F5F5F6F6F6F5F5F5F5 - F5F5F2F2F2F0F0F0F4F4F4F6F6F6F3F3F3F4F4F4F7F7F7F5F5F5F4F4F4F6F6F6 - FFFFFFFCFCFCE7E7E7E7E7E7E7E7E7E7E7E7E7E7E7BABABAD3D3D3FFFFFFFDFD - FDEEEEEEDEDEDEDCDCDCE9E9E9F5F5F5F4F4F4FFFFFFEAEAEADCDCDCD9D9D9FF - FFFFFFFFFFFFFFFFFFFFFFFDFDFDFFFFFFEAEAEAC6C6C6DADADAE9E9E9EAEAEA - EBEBEBEBEBEBEAEAEAE8E8E8E7E7E7E9E9E9E9E9E9DADADAFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFF8F8F8EAEAEAE9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E7E7E7E9 - E9E9E9E9E9C8C8C8C4C4C4D4D4D4E6E6E6F6F6F6F9F9F9FAFAFAFAFAFAFBFBFB - FCFCFCFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFE8E8E8E5E5E5E6E6E6E5E5E5E5E5 - E5E6E6E6C6C6C6D4D4D4F7F7F7F7F7F7F7F7F7F7F7F7F6F6F6E6E6E6D4D4D4CE - CECECECECEE3E3E3D8D8D8E1E1E1F3F3F3F4F4F4F3F3F3EAEAEAE7E7E7E7E7E7 - E7E7E7E7E7E7E7E7E70000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFF9F9F9F8 - F8F8F8F8F8F8F8F8F9F9F9FBFBFBFBFBFBF9F9F9F9F9F9FDFDFDFCFCFCF8F8F8 - F6F6F6F6F6F6F6F6F6F5F5F5F5F5F5F9F9F9FFFFFFFBFBFBEAEAEAEAEAEAECEC - ECFDFDFDFFFFFFFCFCFCFFFFFFFFFFFFFFFFFFFBFBFBFBFBFBFBFBFB80000080 - 0000800000800000800000800000800000800000F8F8F8F7F7F7FFFFFFFEFEFE - EBEBEBDEDEDEDFDFDFDFDFDFD0D0D0DFDFDFE9E9E9D4D4D4BFBFBFD9D9D9EBEB - EBECECECE9E9E9EDEDEDF3F3F3F3F3F3FFFFFFFFFFFFECECECE8E8E880000080 - 0000800000800000800000E7E7E7ECECECEBEBEBE9E9E9D7D7D7C2C2C20000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FFF4F4F4DFDFDFD0D0D0F0F0F0FFFFFFFEFEFEFBFBFBEBEBEBEDEDEDEC - ECECEAEAEAEBEBEBEAEAEAE6E6E6BABABAC9C9C9F2F2F20000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFF5F5F5F3F3F3F5F5 - F5FFFFFFF3F3F3E3E3E3E7E7E7F9F9F9FFFFFFEAEAEAE7E7E7F8F8F8F8F8F8F8 - F8F8F9F9F9F8F8F8F5F5F5F5F5F5EDEDEDEFEFEFEDEDEDECECECF8F8F8FFFFFF - EBEBEBE6E6E6F2F2F2EFEFEFEEEEEEEEEEEEF1F1F1F5F5F5F7F7F7F7F7F7F7F7 - F7F6F6F6F7F7F7F8F8F8F8F8F8F8F8F8F8F8F8F7F7F7F7F7F7F7F7F7F5F5F5F6 - F6F6F6F6F6F6F6F6F7F7F7F7F7F7F5F5F5F7F7F7F7F7F7F7F7F7F7F7F7FBFBFB - FFFFFFFFFFFFE7E7E7E7E7E7E7E7E7E7E7E7E7E7E7BDBDBDD0D0D0FBFBFBF9F9 - F9FCFCFCFCFCFCF7F7F7F6F6F6F4F4F4F4F4F4F5F5F5E7E7E7E6E6E6CCCCCCFF - FFFFF7F7F7FFFFFFF8F8F8EFEFEFF0F0F0C3C3C3BDBDBDF1F1F1F4F4F4E9E9E9 - EAEAEAE9E9E9E9E9E9E8E8E8E9E9E9EAEAEAEAEAEAEAEAEAFAFAFAFBFBFBEDED - EDEDEDEDEDEDEDEBEBEBE9E9E9E9E9E9E9E9E9D3D3D3BDBDBDD5D5D5E6E6E6EB - EBEBECECECDDDDDDE8E8E8F4F4F4F4F4F4F4F4F4F6F6F6F9F9F9FAFAFAFBFBFB - FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFE8E8E8E6E6E6E2E2E2E3E3E3E4E4E4E5E5 - E5E7E7E7C6C6C6D3D3D3F5F5F5F7F7F7F7F7F7F7F7F7F7F7F7F5F5F5F2F2F2EF - EFEFF3F3F3F9F9F9EAEAEAFEFEFEFFFFFFF1F1F1EDEDEDE7E7E7E7E7E7E7E7E7 - E7E7E7E7E7E7E7E7E70000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FFFBFBFB0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFF - FFFFFFFFFFF9F9F9FBFBFBFBFBFBFBFBFBFBFBFB800000800000800000800000 - 800000F7F7F7F8F8F8F7F7F7F6F6F6FFFFFFFFFFFFFFFFFFFCFCFCEAEAEAEAEA - EAECECECEDEDEDEDEDEDFCFCFCFFFFFF80000080000080000080000080000080 - 0000800000800000800000800000800000800000800000800000800000FFFFFF - E6E6E6C5C5C5DDDDDDD1D1D1CCCCCCE7E7E7DBDBDBBDBDBDCCCCCCE4E4E4ECEC - ECEEEEEEEDEDEDF1F1F1F8F8F8FFFFFFFFFFFFFFFFFFECECECE9E9E980000080 - 0000800000800000800000E7E7E7EAEAEAD7D7D7C1C1C1ACACACBCBCBCE0E0E0 - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FFEFEFEFDEDEDEF7F7F7FCFCFCEDEDEDECECECEDEDEDEEEEEEEB - EBEBEBEBEBEBEBEBEAEAEAE5E5E5BABABACCCCCCF4F4F4F6F6F60000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFF5F5F5F3F3 - F3FFFFFFF8F8F8E7E7E7E8E8E8E9E9E9E9E9E9DADADAF9F9F9FFFFFFFFFFFFFE - FEFEFDFDFDFCFCFCFCFCFCFFFFFFFFFFFFFBFBFBECECECEBEBEBEAEAEAEAEAEA - DCDCDCE2E2E2EDEDEDEDEDEDF0F0F0F4F4F4F5F5F5F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F8F8F8F7F7F7F7F7F7F8F8F8F7F7F7F6F6F6F5F5F5F5F5F5F8 - F8F8F7F7F7F8F8F8F8F8F8F7F7F7F7F7F7F4F4F4F5F5F5F4F4F4F7F7F7FBFBFB - FFFFFFFFFFFFE4E4E4E2E2E2DFDFDFDEDEDEDEDEDEB7B7B7CACACAF3F3F3F5F5 - F5F8F8F8F9F9F9F7F7F7F7F7F7F5F5F5F4F4F4F5F5F5F5F5F5F2F2F2E2E2E2FF - FFFFCECECECFCFCFCDCDCDCCCCCCC8C8C8A9A9A9CCCCCCFEFEFEE9E9E9DDDDDD - E9E9E9E7E7E7E8E8E8E9E9E9EAEAEAEBEBEBEDEDEDECECECEDEDEDEEEEEEEEEE - EEECECECEAEAEAEAEAEAE7E7E7E8E8E8E8E8E8BABABABABABAFAFAFAFDFDFDF3 - F3F3EFEFEFF1F1F1DCDCDCE2E2E2F3F3F3F4F4F4F5F5F5F7F7F7FAFAFAFCFCFC - FEFEFEFEFEFEFFFFFFFFFFFFEAEAEAE6E6E6E2E2E2E4E4E4E5E5E5E6E6E6E6E6 - E6E9E9E9C8C8C8D4D4D4F5F5F5F7F7F7F7F7F7F7F7F7F7F7F7F5F5F5F3F3F3F4 - F4F4F9F9F9FDFDFDFDFDFDFFFFFFFFFFFFF0F0F0EDEDEDE7E7E7E7E7E7E7E7E7 - E7E7E7E7E7E7E7E7E70000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FFFCFCFCF9F9F90000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFF - FFFFF8F8F8FFFFFFFFFFFFFFFFFFFCFCFCFEFEFE800000800000800000800000 - 800000800000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBEAEAEAE9E9 - E9EAEAEAEBEBEBEBEBEBEBEBEBEBEBEB80000080000080000080000080000080 - 0000800000800000800000800000800000800000800000800000800000800000 - 800000DCDCDCE9E9E9E8E8E8E7E7E7F4F4F4E8E8E8DADADAE6E6E6EFEFEFFCFC - FCFFFFFFFDFDFDF1F1F1FFFFFFFFFFFFFFFFFFFDFDFDEAEAEAE9E9E9E8E8E880 - 0000800000800000800000800000EAEAEAC4C4C4BFBFBFD3D3D3E6E6E6F6F6F6 - F7F7F70000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FFF7F7F7FFFFFFFFFFFFF0F0F0F0F0F0EEEEEEECECECEB - EBEBEBEBEBEBEBEBEAEAEAE6E6E6BCBCBCD0D0D0F5F5F5F8F8F80000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFF6F6F6F4F4 - F4F5F5F5FFFFFFF4F4F4E9E9E9E9E9E9E7E7E7E9E9E9FBFBFBFFFFFFEDEDEDEB - EBEBFAFAFAF7F7F7F8F8F8FFFFFFFFFFFFF9F9F9EBEBEBE9E9E9E9E9E9E9E9E9 - DADADAC4C4C4DFDFDFF1F1F1F4F4F4F7F7F7F7F7F7F7F7F7FFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7F3F3F3F1F1F1F1F1F1F5F5F5F8 - F8F8F9F9F9FAFAFAF9F9F9F7F7F7F7F7F7F4F4F4F5F5F5F6F6F6F8F8F8FFFFFF - FFFFFFFFFFFFE7E7E7E1E1E1DEDEDEE0E0E0D1D1D1ACACACCFCFCFF4F4F4F6F6 - F6F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F6F6F6F6F6F6F3F3F3EEEEEEECECECFF - FFFFD9D9D9D8D8D8D6D6D6D5D5D5D1D1D1CFCFCFE0E0E0F7F7F7F7F7F7FFFFFF - F7F7F7E7E7E7E9E9E9E9E9E9E9E9E9ECECECECECECEBEBEBEBEBEBECECECEBEB - EBEAEAEAE9E9E9E9E9E9E7E7E7E8E8E8E7E7E7BDBDBDD4D4D4FFFFFFFFFFFFF1 - F1F1EEEEEEEEEEEEC3C3C3CECECEF4F4F4F3F3F3F4F4F4F5F5F5F9F9F9FBFBFB - FCFCFCFCFCFCFFFFFFFFFFFFE9E9E9E4E4E4E4E4E4E6E6E6E4E4E4E4E4E4E6E6 - E6D9D9D9B7B7B7D4D4D4F5F5F5F7F7F7F7F7F7F7F7F7F7F7F7F5F5F5F4F4F4F6 - F6F6FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFEDEDEDE9E9E9E6E6E6E6E6E6E7E7E7 - E7E7E7E7E7E70000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFFFF7F7F7F7F7F70000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FFE9E9E9FDFDFDFFFFFFFEFEFEFFFFFFFFFFFFFFFFFF800000800000800000 - 800000800000800000FFFFFFFFFFFFFFFFFFFEFEFEEDEDEDEAEAEAE9E9E9E9E9 - E9EAEAEAEBEBEBEBEBEBEBEBEB80000080000080000080000080000080000080 - 0000800000800000800000800000800000800000800000800000800000800000 - 800000800000800000F3F3F3F2F2F2F3F3F3F0F0F0EDEDEDEEEEEEFEFEFEFFFF - FFFFFFFFF5F5F5FFFFFFFFFFFFFFFFFFFBFBFBECECECEAEAEAE9E9E9E9E9E980 - 0000800000800000800000800000800000C4C4C4D3D3D3F7F7F7F9F9F9F9F9F9 - F8F8F8F8F8F80000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FFFFFFFFFFFFFFF1F1F1EFEFEFEAEAEAE8E8E8E8 - E8E8E8E8E8E8E8E8E8E8E8E2E2E2BCBCBCD0D0D0F5F5F5FBFBFBFEFEFE0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFF0F0F0F1F1 - F1F4F4F4FFFFFFEDEDEDCCCCCCC9C9C9D6D6D6E9E9E9ECECECEBEBEBD9D9D9E5 - E5E5F4F4F4F3F3F3F7F7F7FFFFFFFFFFFFFCFCFCEEEEEEECECECECECECE9E9E9 - C8C8C8BFBFBFE2E2E2F4F4F4F5F5F5F6F6F6F7F7F7FFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBFFFFFFFFFFFFF4F4F4F8F8F8FBFBFBFC - FCFCFBFBFBFBFBFBFBFBFBFAFAFAF8F8F8F9F9F9FBFBFBFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFE9E9E9E6E6E6E6E6E6E9E9E9CACACAC4C4C4E6E6E6F6F6F6F8F8 - F8F9F9F9F9F9F9F9F9F9F8F8F8F8F8F8F7F7F7F6F6F6F2F2F2EEEEEEEFEFEFFF - FFFFF1F1F1F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F2F2F2F6F6F6FFFFFFFFFFFF - E8E8E8C7C7C7C7C7C7D8D8D8EAEAEAECECECEEEEEEEDEDEDEBEBEBE9E9E9E9E9 - E9E9E9E9E9E9E9E9E9E9E7E7E7E8E8E8E7E7E7C1C1C1D5D5D5FFFFFFEDEDEDD9 - D9D9EBEBEBE9E9E9BDBDBDCCCCCCF3F3F3F1F1F1F1F1F1F4F4F4F7F7F7F9F9F9 - F9F9F9FBFBFBFFFFFFFDFDFDDCDCDCCACACACACACACDCDCDD9D9D9E4E4E4DCDC - DCBDBDBDC5C5C5E5E5E5F5F5F5F6F6F6F7F7F7F6F6F6F4F4F4F3F3F3F3F3F3F6 - F6F6FBFBFBFDFDFDFCFCFCFFFFFFFDFDFDEAEAEAE8E8E8E4E4E4E4E4E4E2E2E2 - E2E2E2E4E4E40000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FFEAEAEAE6E6E6F7F7F70000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FFEAEAEAEAEAEAEAEAEAF8F8F8FFFFFFFFFFFFFFFFFF800000800000 - 800000800000800000800000ECECECECECECEBEBEBEBEBEBEAEAEAEAEAEAEAEA - EAEAEAEAEBEBEBEBEBEB80000080000080000080000080000080000080000080 - 0000800000800000800000800000800000800000800000800000800000800000 - 800000800000800000800000800000800000EDEDEDF1F1F1FFFFFFFFFFFFFFFF - FFFEFEFEECECECFBFBFBFFFFFFFBFBFBE9E9E9E9E9E9EAEAEAEAEAEAECECECEA - EAEA800000800000800000800000800000800000D5D5D5F8F8F8F9F9F9F8F8F8 - F7F7F7F7F7F7F5F5F50000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FFFCFCFCEDEDEDECECECE6E6E6E6E6E6E7 - E7E7E7E7E7E7E7E7E7E7E7E2E2E2BFBFBFD1D1D1F8F8F8FCFCFCFEFEFE0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFF2F2F2F4F4 - F4F7F7F7F8F8F8EAEAEAD8D8D8D2D2D2E0E0E0D5D5D5DEDEDEF1F1F1ECECECEA - EAEAFFFFFFFFFFFFF8F8F8FFFFFFFFFFFFFEFEFEF0F0F0EDEDEDECECECECECEC - C7C7C7D0D0D0F1F1F1F5F5F5F5F5F5F6F6F6FFFFFFFFFFFFFFFFFFFFFFFFEDED - EDE9E9E9E8E8E8EAEAEAEAEAEAE7E7E7FDFDFDFAFAFAF9F9F9FEFEFEFEFEFEFF - FFFFFEFEFEFDFDFDFEFEFEFCFCFCFBFBFBFDFDFDFDFDFDFFFFFFFFFFFFFFFFFF - FDFDFDE8E8E8E9E9E9E7E7E7E8E8E8EAEAEADBDBDBE6E6E6F5F5F5F7F7F7F8F8 - F8F8F8F8F8F8F8F6F6F6F7F7F7F8F8F8F7F7F7F5F5F5F4F4F4F4F4F4F6F6F6FF - FFFFF3F3F3F0F0F0EEEEEEEEEEEEEEEEEEF1F1F1F6F6F6F8F8F8F6F6F6F3F3F3 - C7C7C7C4C4C4D5D5D5E7E7E7ECECECF1F1F1F2F2F2EDEDEDEAEAEAE9E9E9E9E9 - E9E9E9E9E9E9E9E7E7E7E6E6E6E8E8E8E7E7E7D6D6D6F8F8F8FFFFFFE7E7E7FB - FBFBFDFDFDE6E6E6BBBBBBCACACAF1F1F1F0F0F0F1F1F1F4F4F4F6F6F6F6F6F6 - F8F8F8FBFBFBFDFDFDFCFCFCEAEAEAD4D4D4D5D5D5D9D9D9E2E2E2D9D9D9BFBF - BFC2C2C2E0E0E0F4F4F4F4F4F4F5F5F5F7F7F7F5F5F5F4F4F4F6F6F6F8F8F8F9 - F9F9FCFCFCFAFAFAF9F9F9FEFEFEFFFFFFF7F7F7EAEAEAE8E8E8E7E7E7E6E6E6 - D2D2D2D7D7D70000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FFD8D8D8F8F8F8FFFFFFF7F7F7 - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FFE9E9E9EAEAEAE9E9E9EAEAEAEBEBEBECECECF2F2F2800000 - 800000800000800000800000E9E9E9E9E9E9EBEBEBECECECEAEAEAE9E9E9EAEA - EAE9E9E9EAEAEA80000080000080000080000080000080000080000080000080 - 0000800000E6E6E6D1D1D1DFDFDFF5F5F5FBFBFBFBFBFB800000800000800000 - 800000800000800000800000800000800000800000FFFFFFFFFFFFFFFFFFFCFC - FCEEEEEEEAEAEAE8E8E8E8E8E8E6E6E6E6E6E6E8E8E8E9E9E9E9E9E9EBEBEBE9 - E9E9E7E7E7800000800000800000800000800000800000F9F9F9FAFAFAF8F8F8 - F7F7F7F4F4F4F2F2F2F1F1F10000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FFCACACAC3C3C3BFBFBFD5D5D5E7 - E7E7E9E9E9E9E9E9E7E7E7D4D4D4AFAFAFD3D3D3F9F9F9FBFBFBFBFBFBFCFCFC - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFAFA - FAFAFAFAFBFBFBF4F4F4EFEFEFEDEDEDEEEEEEDEDEDEFAFAFAFFFFFFE9E9E9E7 - E7E7F3F3F3F5F5F5FFFFFFFFFFFFFFFFFFEFEFEFEDEDEDEAEAEAE9E9E9E9E9E9 - C0C0C0CCCCCCF3F3F3F4F4F4F5F5F5F7F7F7FFFFFFFFFFFFFFFFFFF1F1F1E9E9 - E9E8E8E8E8E8E8E9E9E9E7E7E7E4E4E4D1D1D1BABABABEBEBEE7E7E7FEFEFEFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBFBFBFBFFFFFFFFFFFFE6E6E6 - E6E6E6E7E7E7E9E9E9E7E7E7E9E9E9EBEBEBECECECEAEAEAFFFFFFFFFFFFFFFF - FFF7F7F7F7F7F7F7F7F7F8F8F8F7F7F7F5F5F5F3F3F3F4F4F4F6F6F6F7F7F7FF - FFFFF5F5F5EEEEEEF0F0F0F2F2F2F3F3F3F7F7F7FCFCFCFFFFFFFFFFFFFCFCFC - E2E2E2E7E7E7F7F7F7F7F7F7F9F9F9F3F3F3EFEFEFE7E7E7E4E4E4E3E3E3E6E6 - E6E8E8E8E7E7E7E6E6E6E7E7E7E9E9E9E7E7E7E9E9E9FDFDFDFEFEFEF9F9F9FF - FFFFFFFFFFD0D0D0A0A0A0C8C8C8F1F1F1F2F2F2F2F2F2F2F2F2F1F1F1F2F2F2 - F6F6F6F9F9F9FBFBFBFCFCFCF8F8F8F1F1F1F1F1F1F0F0F0ECECECDFDFDFD3D3 - D3DFDFDFF0F0F0F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6F7F7F7FAFAFAFAFAFAF9 - F9F9F9F9F9FBFBFBFEFEFEFEFEFEFFFFFFFFFFFFEAEAEAEAEAEAEAEAEAEAEAEA - CBCBCBE7E7E70000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FFEAEAEAFCFCFCEAEAEAE5E5E5 - F5F5F50000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FFE9E9E9EAEAEAE7E7E7E8E8E8E9E9E9EAEAEAEFEFEFF2F2F2 - 800000800000800000800000800000E7E7E7E9E9E9EAEAEAE9E9E9E9E9E9E9E9 - E9E9E9E9E9E9E9800000800000800000800000800000800000800000800000EB - EBEBE9E9E9E4E4E4E5E5E5E6E6E6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFF800000800000800000800000800000800000800000FFFFFFFAFAFAEDED - EDEAEAEAEAEAEAE8E8E8E7E7E7E4E4E4E4E4E4D3D3D3B9B9B9D0D0D0ECECECE9 - E9E9E6E6E6800000800000800000800000800000800000F8F8F8F8F8F8F8F8F8 - F7F7F7F1F1F1F2F2F2F6F6F6F7F7F70000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFD1D1D1D1D1D1E1E1E1D6 - D6D6D7D7D7E7E7E7E6E6E6C3C3C3BCBCBCE2E2E2F8F8F8F8F8F8F9F9F9F9F9F9 - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFAFA - FAFAFAFAFBFBFBF9F9F9F4F4F4F4F4F4F3F3F3F3F3F3FFFFFFFFFFFFECECECE6 - E6E6E2E2E2E6E6E6F8F8F8FFFFFFFBFBFBEAEAEAEAEAEAE9E9E9E7E7E7E6E6E6 - BABABACACACAF0F0F0F0F0F0F1F1F1F5F5F5FFFFFFFFFFFFF2F2F2ECECECE7E7 - E7E8E8E8E7E7E7E4E4E4CACACAB5B5B5A1A1A1B5B5B5CDCDCDE4E4E4FBFBFBFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6E6E6 - E6E6E6E9E9E9E9E9E9E8E8E8EAEAEAECECECEAEAEAECECECFDFDFDFFFFFFECEC - ECE6E6E6F7F7F7F8F8F8F8F8F8F7F7F7F5F5F5F4F4F4F7F7F7F8F8F8F8F8F8FF - FFFFF3F3F3F0F0F0F4F4F4F7F7F7F8F8F8FCFCFCFFFFFFFFFFFFFFFFFFE7E7E7 - E6E6E6F7F7F7F7F7F7F7F7F7F9F9F9FFFFFFFDFDFDE6E6E6E1E1E1E0E0E0E4E4 - E4E6E6E6E5E5E5E5E5E5E7E7E7E7E7E7E7E7E7E9E9E9ECECECEAEAEAD3D3D3F8 - F8F8E7E7E7A1A1A1B1B1B1DEDEDEF3F3F3F3F3F3F2F2F2EFEFEFEFEFEFF3F3F3 - F9F9F9FAFAFAF9F9F9F9F9F9FAFAFAF8F8F8F4F4F4F2F2F2F0F0F0EEEEEEECEC - ECEFEFEFF1F1F1F3F3F3F5F5F5F4F4F4F5F5F5F7F7F7F7F7F7FFFFFFFFFFFFFF - FFFFF9F9F9FEFEFEFEFEFEFAFAFAFFFFFFFFFFFFE8E8E8EAEAEAEBEBEBEAEAEA - CFCFCFF4F4F40000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FFEAEAEAEBEBEBD8D8D8F4F4F4 - FFFFFF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FFE6E6E6E5E5E5E7E7E7E9E9E9EAEAEAEAEAEAEEEEEE - 800000800000800000800000800000E6E6E6E7E7E7E8E8E8E6E6E6E7E7E7E9E9 - E9E8E8E8E9E9E9800000800000800000800000800000800000800000EEEEEEE8 - E8E8E6E6E6E4E4E4E3E3E3E5E5E5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FCFCFCF9F9F9F5F5F5800000800000800000800000800000800000EFEFEFEDED - EDECECECEBEBEBE9E9E9E6E6E6E2E2E2CCCCCC9E9E9EAFAFAFE1E1E1ECECECE9 - E9E9E7E7E7E4E4E4800000800000800000800000800000800000F9F9F9F8F8F8 - F5F5F5F0F0F0F4F4F4FAFAFAFAFAFAFEFEFE0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFF6F6F6F5F5F5E6 - E6E6E6E6E6E7E7E7E8E8E8D9D9D9F5F5F5FFFFFFF7F7F7F7F7F7F6F6F6F7F7F7 - F8F8F80000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFAFA - FAFBFBFBFCFCFCFCFCFCF9F9F9F8F8F8F7F7F7F8F8F8FCFCFCFFFFFFFDFDFDDF - DFDFDFDFDFE3E3E3E8E8E8EBEBEBEAEAEAE9E9E9E9E9E9E7E7E7E7E7E7E6E6E6 - BABABACACACAEFEFEFF0F0F0F5F5F5F8F8F8FFFFFFFFFFFFEFEFEFEBEBEBE6E6 - E6E6E6E6E3E3E3E0E0E0B1B1B1B1B1B1CECECEE2E2E2F7F7F7F8F8F8F9F9F9FF - FFFFFFFFFFFFFFFFFBFBFBF4F4F4F4F4F4F4F4F4FFFFFFFFFFFFF4F4F4E2E2E2 - E4E4E4EAEAEAE9E9E9E9E9E9ECECECEDEDEDEBEBEBECECECEEEEEEEEEEEEDBDB - DBF9F9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8F8F9F9F9F9F9F9F9F9F9FF - FFFFF3F3F3F3F3F3F5F5F5F5F5F5F7F7F7F9F9F9FFFFFFFFFFFFFDFDFDDFDFDF - E8E8E8F7F7F7F7F7F7F7F7F7F8F8F8FFFFFFF4F4F4DEDEDEDBDBDBDDDDDDE4E4 - E4E6E6E6E5E5E5E5E5E5E8E8E8E9E9E9E9E9E9E9E9E9EBEBEBE9E9E9BFBFBFD2 - D2D2E2E2E2CCCCCCE0E0E0F4F4F4F5F5F5F4F4F4F3F3F3F0F0F0F3F3F3F9F9F9 - FBFBFBFEFEFEFCFCFCF9F9F9FCFCFCF9F9F9F6F6F6F5F5F5F4F4F4F0F0F0ECEC - ECEDEDEDEEEEEEF3F3F3F4F4F4F1F1F1F1F1F1F5F5F5F7F7F7FFFFFFFFFFFFF7 - F7F7FAFAFAFDFDFDF8F8F8FFFFFFFFFFFFFFFFFFE9E9E9ECECECEDEDEDECECEC - DFDFDFFFFFFF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FFE9E9E9EAEAEAE9E9E9F7F7F7 - F9F9F9FFFFFF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FFE7E7E7E7E7E7E8E8E8E8E8E8DCDCDCDBDBDB - E9E9E9800000800000800000800000800000E6E6E6E6E6E6E4E4E4E6E6E6E9E9 - E9E7E7E7E7E7E7EAEAEA800000800000800000800000800000800000EDEDEDE8 - E8E8E7E7E7E5E5E5E2E2E2E1E1E1E6E6E6E8E8E8F7F7F7EFEFEFF2F2F2F9F9F9 - F5F5F5F7F7F7F4F4F4F0F0F0EDEDED8000008000008000008000008000008000 - 00EAEAEAEAEAEAE9E9E9D0D0D0B4B4B49B9B9BB4B4B4E2E2E2F8F8F8FBFBFBEA - EAEAE7E7E7E4E4E4E4E4E4800000800000800000800000800000800000F6F6F6 - F1F1F1EDEDEDF3F3F3F9F9F9FAFAFAFEFEFEFDFDFD0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFDFD - FDFDFDFDFCFCFCFBFBFBF8F8F8F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFF0F0F0CD - CDCDDFDFDFE3E3E3E6E6E6E7E7E7E9E9E9E7E7E7E7E7E7E7E7E7E7E7E7E2E2E2 - B7B7B7C8C8C8EEEEEEF3F3F3F8F8F8F9F9F9FFFFFFFFFFFFEDEDEDEAEAEAE6E6 - E6E5E5E5CCCCCCB2B2B29C9C9CCBCBCBF7F7F7F7F7F7F7F7F7F9F9F9F9F9F9FF - FFFFFFFFFFEAEAEAE6E6E6E2E2E2E3E3E3E6E6E6E7E7E7E9E9E9E7E7E7D5D5D5 - DBDBDBECECECE9E9E9EAEAEAECECECECECECEAEAEAEBEBEBEDEDEDECECECEBEB - EBFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFAFAFAFFFFFFFFFFFFF8F8F8F9F9F9FF - FFFFF4F4F4F5F5F5F5F5F5F5F5F5F6F6F6FFFFFFFFFFFFFFFFFFF0F0F0EAEAEA - E9E9E9F6F6F6F7F7F7F7F7F7F7F7F7F5F5F5F1F1F1CECECECCCCCCCFCFCFD4D4 - D4E7E7E7E3E3E3E3E3E3E9E9E9E9E9E9E8E8E8E9E9E9EAEAEAE9E9E9C2C2C2D3 - D3D3F6F6F6F4F4F4F4F4F4F5F5F5F5F5F5F3F3F3F0F0F0F0F0F0F4F4F4F9F9F9 - FBFBFBFFFFFFFEFEFEFBFBFBFFFFFFFFFFFFF9F9F9F5F5F5F1F1F1ECECECE9E9 - E9EEEEEEF3F3F3F5F5F5F5F5F5F4F4F4F5F5F5F7F7F7F7F7F7F7F7F7FFFFFFF9 - F9F9EAEAEAFFFFFFFFFFFFFFFFFFFFFFFFF8F8F8ECECECEDEDEDEEEEEEEDEDED - EEEEEEFAFAFA0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FFEAEAEAEAEAEAEAEAEAE9E9E9 - E9E9E9F5F5F5F7F7F70000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FFE9E9E9EAEAEAECECECD5D5D5E4E4E4 - FFFFFFF4F4F4800000800000800000800000800000E3E3E3E4E4E4E7E7E7E9E9 - E9E7E7E7E7E7E7E8E8E8800000800000800000800000800000800000ECECECE9 - E9E9E7E7E7E4E4E4E2E2E2E0E0E0E5E5E5E8E8E8E7E7E7CECECED7D7D7F1F1F1 - F0F0F0F3F3F3F4F4F4F2F2F2EDEDEDEEEEEE8000008000008000008000008000 - 00800000EAEAEAE8E8E8B6B6B6AFAFAFCBCBCBE4E4E4FAFAFAFAFAFAFFFFFFFF - FFFFFFFFFFE8E8E8E8E8E8800000800000800000800000800000800000F2F2F2 - ECECECEEEEEEF6F6F6FAFAFAFAFAFAFEFEFEFFFFFFFFFFFF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FFFCFCFCFCFCFCFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFF1F1F1F4 - F4F4F5F5F5E8E8E8E8E8E8E9E9E9E8E8E8E6E6E6E6E6E6E2E2E2DFDFDFDCDCDC - B9B9B9CACACAEEEEEEF5F5F5F9F9F9FAFAFAFFFFFFFFFFFFECECECE9E9E9E6E6 - E6D2D2D29E9E9EB2B2B2CCCCCCE1E1E1F6F6F6F6F6F6F7F7F7F8F8F8F8F8F8FF - FFFFFDFDFDE8E8E8E5E5E5E3E3E3E6E6E6E9E9E9EAEAEAEAEAEAE9E9E9CACACA - D8D8D8EAEAEAE8E8E8EAEAEAEAEAEAEAEAEAEAEAEAEBEBEBECECECEAEAEAE9E9 - E9E9E9E9E8E8E8E9E9E9EAEAEAEDEDEDE8E8E8F8F8F8FCFCFCFFFFFFFFFFFFFF - FFFFF7F7F7F8F8F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFE9E9E9 - E7E7E7DADADAE8E8E8F7F7F7F7F7F7F7F7F7F7F7F7E5E5E5E3E3E3C5C5C5D3D3 - D3D5D5D5BFBFBFC6C6C6C9C9C9D9D9D9E9E9E9EAEAEAEAEAEAEAEAEAD7D7D7E6 - E6E6F7F7F7F6F6F6F5F5F5F5F5F5F5F5F5F3F3F3F0F0F0F3F3F3F6F6F6F9F9F9 - FCFCFCFFFFFFFFFFFFFDFDFDFFFFFFFFFFFFFBFBFBF5F5F5F0F0F0EAEAEAECEC - ECF2F2F2F7F7F7F8F8F8F7F7F7F9F9F9F9F9F9F8F8F8F7F7F7F7F7F7FFFFFFFF - FFFFE7E7E7F4F4F4FFFFFFFFFFFFFCFCFCEEEEEEEDEDEDEDEDEDEEEEEEEDEDED - EBEBEBEAEAEA0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FFEAEAEAECECECECECECEAEAEA - E9E9E9E7E7E7E9E9E90000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FFEDEDEDEFEFEFE2E2E2FFFFFF - FFFFFFF3F3F3800000800000800000800000800000800000E7E7E7E7E7E7E7E7 - E7E4E4E4E4E4E4E4E4E4E8E8E8800000800000800000800000800000EDEDEDEA - EAEAE5E5E5E3E3E3E4E4E4E3E3E3E6E6E6E7E7E7DBDBDBB9B9B9D2D2D2F1F1F1 - F3F3F3F4F4F4F5F5F5EEEEEEE7E7E7EBEBEBF0F0F08000008000008000008000 - 00800000800000B7B7B7999999CBCBCBF9F9F9FAFAFAF9F9F9FCFCFCFFFFFFFF - FFFFFFFFFFE9E9E9E7E7E7E7E7E7800000800000800000800000800000800000 - F1F1F1F5F5F5F9F9F9FBFBFBFBFBFBFFFFFFFFFFFFFFFFFFFFFFFF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FFF9F9F9F9F9F9F8F8F8F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFE9E9E9E9E9E9E7E7E7E4E4E4E3E3E3E1E1E1DEDEDEE1E1E1E2E2E2 - D4D4D4EFEFEFFFFFFFF8F8F8FBFBFBFBFBFBFFFFFFFFFFFFEAEAEAE7E7E7D1D1 - D1A5A5A5B5B5B5E1E1E1F6F6F6F5F5F5F6F6F6F7F7F7F8F8F8F8F8F8F7F7F7FC - FCFCFAFAFAE9E9E9E7E7E7E7E7E7E9E9E9EAEAEAEAEAEAEAEAEAE9E9E9C8C8C8 - D3D3D3F1F1F1DADADACCCCCCDEDEDEECECECEBEBEBECECECEBEBEBE9E9E9E9E9 - E9E9E9E9E8E8E8E8E8E8E9E9E9EAEAEAE4E4E4EAEAEAF0F0F0FFFFFFFFFFFFFF - FFFFFAFAFAF9F9F9FFFFFFEDEDEDFFFFFFFFFFFFFFFFFFF3F3F3EEEEEEE9E9E9 - E7E7E7DCDCDCE9E9E9F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6F7F7F7E6E6E6E4E4 - E4E2E2E2D0D0D0D1D1D1D6D6D6F7F7F7FBFBFBECECECECECECEAEAEAE9E9E9D7 - D7D7E5E5E5F4F4F4F5F5F5F5F5F5F4F4F4F1F1F1F1F1F1F7F7F7FAFAFAFAFAFA - FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF1F1F1ECECECEFEF - EFF6F6F6F8F8F8F8F8F8F7F7F7F9F9F9F8F8F8F7F7F7F7F7F7F8F8F8FFFFFFFF - FFFFE4E4E4E5E5E5E6E6E6E9E9E9ECECECECECECEDEDEDECECECEDEDEDECECEC - E9E9E9E9E9E90000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FFEAEAEAECECECECECECEAEAEA - E9E9E9E9E9E9E9E9E9EAEAEA0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FFF1F1F1F0F0F0ECECECFCFCFC - FDFDFDECECECE9E9E9800000800000800000800000800000D3D3D3BCBCBCCFCF - CFD0D0D0BFBFBFC1C1C1C6C6C6800000800000800000800000800000EEEEEEEA - EAEAE4E4E4E4E4E4E6E6E6E3E3E3D3D3D3C6C6C6B6B6B6BEBEBEE2E2E2F6F6F6 - F6F6F6F6F6F6F3F3F3E7E7E7E8E8E8EEEEEEF4F4F4F9F9F98000008000008000 - 00800000800000800000CACACAE4E4E4FBFBFBFBFBFBFBFBFBFFFFFFFFFFFFFF - FFFFEDEDEDE7E7E7E6E6E6E7E7E7E3E3E3800000800000800000800000800000 - 800000FAFAFAF9F9F9FBFBFBFDFDFDFFFFFFFFFFFFFFFFFFECECECEAEAEA0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FFF8F8F8F8F8F8F8F8F8F9F9F9F9F9F9FBFBFBFDFDFDFFFFFFFFFFFFFFFFFFFF - FFFFF8F8F8E9E9E9E9E9E9E6E6E6E4E4E4E6E6E6E6E6E6E7E7E7EBEBEBEBEBEB - EAEAEAF8F8F8F9F9F9F8F8F8FAFAFAFBFBFBFFFFFFFFFFFFEAEAEAE6E6E6BCBC - BCBABABAE3E3E3F7F7F7F6F6F6F6F6F6F9F9F9FAFAFAF9F9F9F8F8F8F8F8F8FC - FCFCF9F9F9F4F4F4EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAC9C9C9 - D3D3D3F2F2F2E6E6E6DADADAFBFBFBFDFDFDECECECEBEBEBEAEAEAE9E9E9E9E9 - E9E8E8E8E6E6E6E6E6E6E5E5E5E4E4E4E2E2E2E7E7E7ECECECEFEFEFF1F1F1FF - FFFFFCFCFCFAFAFAF8F8F8EDEDEDFFFFFFFFFFFFF4F4F4F1F1F1ECECECE8E8E8 - E9E9E9EAEAEAEAEAEAFFFFFFFFFFFFF5F5F5F5F5F5F6F6F6F5F5F5F4F4F4F4F4 - F4F5F5F5F2F2F2F3F3F3F7F7F7FFFFFFFCFCFCEDEDEDECECECEAEAEAE9E9E9D7 - D7D7E5E5E5F5F5F5F6F6F6F6F6F6F5F5F5F4F4F4F5F5F5F9F9F9FBFBFBFBFBFB - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7F4F4F4FCFCFCF8F8F8F1F1 - F1F9F9F9FAFAFAFAFAFAFAFAFAFAFAFAF8F8F8F7F7F7F7F7F7FFFFFFFFFFFFFF - FFFFE3E3E3E4E4E4E2E2E2E1E1E1E9E9E9EAEAEAEAEAEAECECECECECECEAEAEA - E9E9E9EAEAEA0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FFEAEAEAEBEBEBEBEBEBEAEAEA - E9E9E9E7E7E7E5E5E5E8E8E8EDEDED0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFEDEDEDEBEBEBEEEEEE - EEEEEEEDEDEDECECECE9E9E9800000800000800000800000800000B9B9B9E1E1 - E1C3C3C3C1C1C1D4D4D4D5D5D5D5D5D5800000800000800000800000800000EB - EBEBE6E6E6E4E4E4E4E4E4E2E2E2C1C1C1BCBCBCD1D1D1E2E2E2F2F2F2F5F5F5 - F6F6F6F6F6F6F1F1F1ECECECF0F0F0F4F4F4F7F7F7FAFAFAFBFBFB8000008000 - 00800000800000800000F8F8F8FBFBFBFCFCFCFDFDFDFFFFFFFFFFFFFFFFFFFF - FFFFEDEDEDE7E7E7E3E3E3DFDFDFDCDCDCD2D2D2800000800000800000800000 - 800000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEAEAEAEAEAEAE8E8 - E80000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FFF9F9F9FBFBFBFAFAFAF9F9F9FBFBFBFEFEFEFFFFFFFFFFFFFFFFFFFF - FFFFE9E9E9E7E7E7E6E6E6E4E4E4E5E5E5E9E9E9EBEBEBECECECEDEDEDEDEDED - EBEBEBEBEBEBECECECD9D9D9E8E8E8FBFBFBFFFFFFFFFFFFEAEAEAE6E6E6C3C3 - C3D5D5D5F7F7F7F7F7F7F7F7F7F8F8F8FAFAFAF9F9F9F9F9F9FAFAFAFBFBFBFD - FDFDF7F7F7F0F0F0FFFFFFF9F9F9EBEBEBECECECEDEDEDEFEFEFEEEEEEDCDCDC - E5E5E5F7F7F7F8F8F8FBFBFBFFFFFFFFFFFFEBEBEBE9E9E9E9E9E9E9E9E9E8E8 - E8E7E7E7E1E1E1E2E2E2E1E1E1E2E2E2E7E7E7E9E9E9EBEBEBEFEFEFEEEEEEFF - FFFFFEFEFEFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2DCDCDCC2C2C2BEBEBE - D3D3D3E7E7E7EAEAEAFBFBFBFCFCFCF9F9F9F8F8F8F7F7F7F7F7F7F5F5F5F5F5 - F5F4F4F4F1F1F1F5F5F5F9F9F9F9F9F9FFFFFFFAFAFAEBEBEBEAEAEAEAEAEAEB - EBEBDCDCDCE7E7E7F5F5F5F7F7F7F8F8F8F8F8F8F8F8F8FCFCFCFBFBFBFAFAFA - FFFFFFFFFFFFFEFEFEEBEBEBF8F8F8F8F8F8EBEBEBE8E8E8F4F4F4E4E4E4E6E6 - E6FBFBFBFBFBFBFCFCFCFBFBFBF8F8F8F8F8F8F8F8F8F9F9F9FFFFFFFFFFFFF8 - F8F8E6E6E6E6E6E6E1E1E1E2E2E2EAEAEAECECECEBEBEBEBEBEBECECECEDEDED - ECECECEEEEEE0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FFEBEBEBEBEBEBECECECEAEAEA - E8E8E8E7E7E7E7E7E7DADADACCCCCC0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFEBEBEBEAEAEAEBEBEB - ECECECECECECEBEBEBE9E9E9800000800000800000800000800000800000F8F8 - F8E8E8E8E8E8E8F8F8F8F8F8F8F8F8F8800000800000800000800000800000EA - EAEAE7E7E7E4E4E4E5E5E5E4E4E4C6C6C6D5D5D5F4F4F4F7F7F7F5F5F5F6F6F6 - F8F8F8F8F8F8F2F2F2F2F2F2F6F6F6F8F8F8FAFAFAFCFCFCFEFEFE8000008000 - 00800000800000800000800000FCFCFCFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFDF - DFDFC9C9C9C1C1C1BEBEBEBFBFBFC5C5C5BCBCBCCACACA800000800000800000 - 800000800000FFFFFFFFFFFFFFFFFFF1F1F1FCFCFCF8F8F8E8E8E8E8E8E8E7E7 - E7E4E4E40000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FFF9F9F9FBFBFBFAFAFAF9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFEAEAEAE4E4E4E6E6E6E7E7E7E7E7E7EAEAEAEAEAEAEBEBEBEDEDEDEDEDED - EAEAEAEBEBEBECECECD9D9D9EAEAEAFFFFFFFFFFFFFFFFFFE8E8E8E4E4E4D6D6 - D6E5E5E5F9F9F9F8F8F8F7F7F7F8F8F8F8F8F8F9F9F9FDFDFDFDFDFDFBFBFBFB - FBFBF5F5F5F3F3F3FFFFFFFFFFFFEFEFEFEFEFEFF1F1F1F0F0F0EEEEEEECECEC - DADADAE6E6E6F8F8F8FBFBFBFDFDFDF9F9F9EAEAEAEAEAEAEAEAEAE9E9E9E8E8 - E8E8E8E8CFCFCFC5C5C5C3C3C3DADADAF1F1F1EEEEEEECECECF1F1F1EDEDEDFF - FFFFFFFFFFFEFEFEFFFFFFFFFFFFFFFFFFFEFEFEEDEDEDD8D8D8D0D0D0CECECE - E4E4E4ECECECECECECEAEAEAECECECEDEDEDFBFBFBFEFEFEFCFCFCF8F8F8F7F7 - F7F3F3F3F3F3F3F8F8F8F9F9F9F9F9F9FFFFFFFFFFFFEFEFEFEBEBEBECECECEC - ECECDBDBDBF2F2F2FFFFFFF7F7F7F8F8F8F8F8F8F8F8F8F9F9F9F9F9F9F7F7F7 - FBFBFBFFFFFFFCFCFCEBEBEBEBEBEBEBEBEBE9E9E9E6E6E6E9E9E9CECECEDEDE - DEFDFDFDFBFBFBF9F9F9F8F8F8F6F6F6F7F7F7F8F8F8FFFFFFFFFFFFFFFFFFEA - EAEAEAEAEAE8E8E8E1E1E1D9D9D9D7D7D7E2E2E2EDEDEDECECECEDEDEDEDEDED - EEEEEEEDEDED0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FFEBEBEBEAEAEAEAEAEAEAEAEA - E7E7E7E8E8E8E8E8E8C7C7C7C4C4C4D3D3D30000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFEAEAEAECECEC - EDEDEDEDEDEDEBEBEBECECECECECEC8000008000008000008000008000008000 - 00F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8FFFFFFFDFDFDECECECEBEBEBECECECE9 - E9E9E6E6E6E4E4E4E5E5E5E2E2E2C3C3C3D0D0D0F2F2F2F5F5F5F5F5F5F7F7F7 - F8F8F8F8F8F8F4F4F4F5F5F5F8F8F8FAFAFAFBFBFBFDFDFDFFFFFF8000008000 - 00800000800000800000800000800000FFFFFFFFFFFFFFFFFFFEFEFEFBFBFBE7 - E7E7D5D5D5D0D0D0D0D0D0D3D3D3D8D8D8DADADAE6E6E6800000800000800000 - 800000800000800000E1E1E1C1C1C1C5C5C5F3F3F3F7F7F7E9E9E9E8E8E8E6E6 - E6E6E6E6E8E8E80000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FFF8F8F8FBFBFBF9F9F9FDFDFDFFFFFFFDFDFDFFFFFFFFFFFFFA - FAFAE9E9E9E6E6E6E9E9E9EAEAEAEAEAEAECECECECECECEEEEEEEFEFEFEDEDED - EAEAEAEBEBEBECECECEAEAEADDDDDDEDEDEDFFFFFFFFFFFFE9E9E9E6E6E6E6E6 - E6E9E9E9FFFFFFFFFFFFF5F5F5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8 - F8F8FFFFFFFFFFFFFFFFFFFFFFFFF0F0F0EEEEEEEEEEEEECECECEAEAEAE9E9E9 - C3C3C3D1D1D1F7F7F7FBFBFBFCFCFCFAFAFAFFFFFFFBFBFBECECECEAEAEAE9E9 - E9E9E9E9C1C1C1C2C2C2D7D7D7EAEAEAF2F2F2EAEAEAE9E9E9F0F0F0EAEAEAFF - FFFFFCFCFCF9F9F9F7F7F7F9F9F9F1F1F1DDDDDDDADADAD6D6D6C0C0C0E2E2E2 - FFFFFFFFFFFFFCFCFCEAEAEAEAEAEADCDCDCD0D0D0EBEBEBF4F4F4F3F3F3F7F7 - F7F4F4F4F6F6F6F9F9F9F9F9F9F9F9F9FFFFFFFFFFFFEFEFEFEBEBEBEAEAEAEA - EAEAE9E9E9F5F5F5E6E6E6E8E8E8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F5F5F5 - F8F8F8FFFFFFFBFBFBE8E8E8E9E9E9EBEBEBE8E8E8E7E7E7DCDCDCC2C2C2DEDE - DEF9F9F9F8F8F8F7F7F7F8F8F8F7F7F7F7F7F7FFFFFFFFFFFFFFFFFFF9F9F9EC - ECECE9E9E9E7E7E7D3D3D3C0C0C0D2D2D2E6E6E6DDDDDDE0E0E0EDEDEDECECEC - ECECEC0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FFEAEAEAEAEAEAEAEAEAEAEAEA - E9E9E9E8E8E8E7E7E7C6C6C6D3D3D3F4F4F4F8F8F80000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFEBEBEB - ECECECECECECEAEAEAEEEEEEEDEDEDECECEC8000008000008000008000008000 - 00F6F6F6F5F5F5F5F5F5F7F7F7F8F8F8F8F8F8E9E9E9F9F9F9FBFBFBEAEAEAE9 - E9E9E6E6E6D0D0D0BCBCBCBCBCBCAFAFAFD1D1D1F5F5F5F8F8F8F7F7F7F8F8F8 - F8F8F8F8F8F8F7F7F7F4F4F4F8F8F8FBFBFBFFFFFFFFFFFFFFFFFF8000008000 - 00800000800000800000800000800000FEFEFEFFFFFFFFFFFFFBFBFBFAFAFAF8 - F8F8F6F6F6F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4F3F3F3F5F5F5800000800000 - 800000800000800000E2E2E2C5C5C5D9D9D9FFFFFFFFFFFFEDEDEDEAEAEAE9E9 - E9E9E9E9EAEAEAEBEBEB0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FFF9F9F9FDFDFDF9F9F9FBFBFBFDFDFDF7F7F7FFFFFFFFFFFFEB - EBEBE9E9E9E9E9E9EAEAEAEAEAEAEAEAEAECECECEEEEEEEFEFEFEEEEEEECECEC - EBEBEBEAEAEAEBEBEBE8E8E8C7C7C7DBDBDBFFFFFFFFFFFFFBFBFBEAEAEAE9E9 - E9E9E9E9F8F8F8E9E9E9EFEFEFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFF7F7F7FF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFEEEEEEECECECEAEAEAE9E9E9E8E8E8E8E8E8 - BFBFBFD0D0D0F9F9F9FCFCFCFDFDFDFBFBFBFFFFFFFFFFFFECECECE9E9E9EBEB - EBEAEAEAC1C1C1D0D0D0F7F7F7F9F9F9F8F8F8D9D9D9C7C7C7CCCCCCC5C5C5FF - FFFFFFFFFFFFFFFFF5F5F5F6F6F6F5F5F5C7C7C7D0D0D0BDBDBDBABABAE4E4E4 - FFFFFFFFFFFFECECECEAEAEAE9E9E9CFCFCFC8C8C8E7E7E7F1F1F1F4F4F4FEFE - FEFAFAFAF5F5F5F8F8F8F9F9F9F9F9F9FDFDFDFFFFFFFDFDFDEAEAEAECECECEA - EAEAEAEAEAE9E9E9D5D5D5E4E4E4F7F7F7F8F8F8F8F8F8F8F8F8F8F8F8F5F5F5 - F7F7F7FBFBFBFFFFFFF8F8F8ECECECEBEBEBE6E6E6D9D9D9C0C0C0CCCCCCE7E7 - E7F5F5F5F6F6F6F8F8F8F8F8F8FFFFFFFFFFFFFFFFFFFFFFFFF9F9F9EAEAEAEE - EEEEEAEAEAE7E7E7C8C8C8C9C9C9E6E6E6F1F1F1E7E7E7EAEAEADEDEDED1D1D1 - D1D1D10000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FFEAEAEAEAEAEAEBEBEBECECEC - EBEBEBE9E9E9E9E9E9DADADAE4E4E4F5F5F5FFFFFF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - EDEDEDECECECE9E9E9EEEEEEECECECE9E9E9E7E7E78000008000008000008000 - 00800000F4F4F4F8F8F8FCFCFCF9F9F9F8F8F8FFFFFFFFFFFFFFFFFFE9E9E9E6 - E6E6D1D1D1A4A4A4BABABAD1D1D1D6D6D6FBFBFBFFFFFFFFFFFFF7F7F7F7F7F7 - F8F8F8F8F8F8F7F7F7F6F6F6FCFCFCFFFFFFFFFFFF8000008000008000008000 - 00800000800000800000800000800000E1E1E1F6F6F6FEFEFEF9F9F9F9F9F9F8 - F8F8F6F6F6F4F4F4F5F5F5F5F5F5F5F5F5F5F5F5F6F6F6FFFFFFFFFFFF800000 - 800000800000800000800000BFBFBFD0D0D0FEFEFEF8F8F8EDEDEDECECECEBEB - EBEBEBEBECECECEBEBEBEBEBEBEBEBEB0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FFF7F7F7FCFCFCFAFAFAFAFAFA - F8F8F8FBFBFBFAFAFA0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FFFDFDFDFCFCFCF7F7F7F7F7F7F5F5F5F2F2F2FFFFFFFFFFFFEB - EBEBEBEBEBECECECEBEBEBEAEAEAEDEDEDF0F0F0F1F1F1F0F0F0EFEFEFECECEC - E9E9E9E7E7E7D5D5D5C1C1C1B5B5B5DADADAFEFEFEFFFFFFFDFDFDE9E9E9E4E4 - E4DCDCDCD0D0D0BCBCBCDEDEDEFFFFFFEEEEEEC9C9C9FFFFFFFFFFFFE6E6E6F9 - F9F9FFFFFFFAFAFAEEEEEEEEEEEEECECECE9E9E9E8E8E8E8E8E8E8E8E8E8E8E8 - CDCDCDDEDEDEF9F9F9FAFAFAFAFAFAF9F9F9FFFFFFFAFAFAEAEAEAE9E9E9EBEB - EBEAEAEAD5D5D5E4E4E4F8F8F8F8F8F8F9F9F9E9E9E9D7D7D7D7D7D7D4D4D4FF - FFFFF5F5F5EAEAEAE5E5E5F1F1F1F0F0F0DBDBDBD9D9D9DDDDDDE4E4E4F9F9F9 - FBFBFBEBEBEBE8E8E8DDDDDDCCCCCCBFBFBFD5D5D5F7F7F7F8F8F8FCFCFCFFFF - FFF8F8F8F4F4F4F6F6F6FAFAFAFAFAFAFFFFFFFFFFFFFFFFFFEBEBEBECECECEA - EAEAEAEAEAE9E9E9D1D1D1BFBFBFE6E6E6F8F8F8F8F8F8F7F7F7F5F5F5F4F4F4 - F7F7F7FBFBFBFFFFFFEDEDEDDFDFDFDEDEDECCCCCCBBBBBBCCCCCCE7E7E7F1F1 - F1F3F3F3F5F5F5F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFF9F9F9EAEAEAEEEEEEED - EDEDEAEAEAE8E8E8C9C9C9D6D6D6F2F2F2F3F3F3F6F6F6F6F6F6E9E9E9DDDDDD - D9D9D90000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFFFF8F8F8EDEDEDECECEC - EAEAEAE8E8E8E9E9E9EAEAEAE9E9E9FFFFFFFFFFFFFFFFFF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - EBEBEBEAEAEAE9E9E9EEEEEEEAEAEAE4E4E4E3E3E3E4E4E48000008000008000 - 00800000800000FCFCFCFDFDFDF9F9F9FFFFFFFFFFFFFFFFFFFBFBFBD5D5D5C0 - C0C0A5A5A5B7B7B7E4E4E4F8F8F8FFFFFFFFFFFFFFFFFFF8F8F8F3F3F3F7F7F7 - F9F9F9F8F8F8F8F8F8F9F9F9FCFCFC8000008000008000008000008000008000 - 00800000800000800000800000800000DEDEDEE4E4E4EAEAEAE9E9E9F4F4F4F5 - F5F5F5F5F5F5F5F5F5F5F5F6F6F6F6F6F6F5F5F5F7F7F7FFFFFFFBFBFB800000 - 800000800000800000800000800000CCCCCCF4F4F4F5F5F5EDEDEDECECECECEC - ECECECECECECECEFEFEFEDEDEDECECECFCFCFC0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFF9F9F9F9F9F9F8F8F8 - F7F7F7F9F9F9F9F9F90000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FFFCFCFCF7F7F7F5F5F5F5F5F5F0F0F0F2F2F2FFFFFFFFFFFFEB - EBEBECECECEFEFEFEFEFEFEFEFEFF4F4F4F3F3F3F0F0F0EEEEEEEDEDEDE8E8E8 - D2D2D2BFBFBFACACACBFBFBFD7D7D7EAEAEAFBFBFBFFFFFFFAFAFADDDDDDCDCD - CDC2C2C2C7C7C7D1D1D1E5E5E5F6F6F6EEEEEEF9F9F9FFFFFFF3F3F3E6E6E6E9 - E9E9E9E9E9ECECECEDEDEDECECECE9E9E9E8E8E8E8E8E8E8E8E8E8E8E8E6E6E6 - DCDCDCD7D7D7ECECECF7F7F7F8F8F8F8F8F8FFFFFFFFFFFFF7F7F7E9E9E9E8E8 - E8E7E7E7E6E6E6D3D3D3E4E4E4F8F8F8FBFBFBF9F9F9F8F8F8F8F8F8F8F8F8FF - FFFFE6E6E6E4E4E4DFDFDFEDEDEDECECECEAEAEAEFEFEFF5F5F5F8F8F8F9F9F9 - FCFCFCFBFBFBF8F8F8EAEAEAD9D9D9D5D5D5E3E3E3F8F8F8FFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCEAEAEAEAEAEAE9 - E9E9EAEAEAEAEAEAD1D1D1CFCFCFE7E7E7F8F8F8F8F8F8F5F5F5F5F5F5F7F7F7 - F8F8F8F9F9F9FBFBFBECECECEBEBEBD2D2D2C5C5C5D6D6D6E9E9E9F4F4F4F1F1 - F1F4F4F4F8F8F8FFFFFFFFFFFFFFFFFFFAFAFAEBEBEBE9E9E9ECECECEDEDEDEA - EAEAE9E9E9E9E9E9D9D9D9E4E4E4F1F1F1F2F2F2F5F5F5F5F5F5F5F5F5F5F5F5 - F2F2F20000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFFFFFFFFFECECECEAEAEA - E8E8E8E7E7E7E9E9E9E9E9E9EAEAEAFDFDFDFFFFFFFFFFFF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FFEAEAEAE6E6E6E9E9E9E6E6E6E3E3E3E4E4E4E5E5E58000008000008000 - 00800000800000FAFAFAFBFBFBFFFFFFFFFFFFFFFFFFFFFFFFE6E6E6BEBEBEB7 - B7B7CECECEE6E6E6FBFBFBFCFCFCFFFFFFFFFFFFECECECCBCBCBCECECEE9E9E9 - F8F8F8F8F8F88000008000008000008000008000008000008000008000008000 - 00800000800000800000800000E6E6E6E3E3E3E7E7E7EAEAEAE9E9E9DBDBDBE7 - E7E7F5F5F5F5F5F5F4F4F4F4F4F4F4F4F4F4F4F4F5F5F5F5F5F5EBEBEBE9E9E9 - 800000800000800000800000800000D0D0D0F7F7F7F7F7F7F7F7F7DFDFDFD0D0 - D0D2D2D2D5D5D5D7D7D7E1E1E1ECECECEDEDEDEEEEEE0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFF7F7F7F5F5F5 - F5F5F5F6F6F6F7F7F7F7F7F70000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FFF5F5F5F4F4F4F2F2F2EEEEEEF2F2F2FFFFFFFFFFFFED - EDEDEDEDEDF0F0F0EDEDEDEEEEEEF1F1F1EDEDEDE9E9E9E9E9E9E7E7E7CECECE - A1A1A1BABABAD3D3D3E7E7E7F8F8F8FAFAFAFCFCFCFEFEFEF9F9F9E7E7E7DADA - DADADADAE2E2E2EDEDEDF4F4F4F7F7F7FFFFFFFFFFFFF7F7F7E8E8E8E7E7E7E9 - E9E9E9E9E9ECECECECECECE9E9E9E8E8E8E8E8E8E8E8E8E8E8E8E6E6E6E1E1E1 - DADADAC6C6C6DDDDDDF8F8F8F9F9F9FFFFFFFFFFFFFFFFFFFBFBFBEAEAEAE7E7 - E7E7E7E7E4E4E4BCBCBCD0D0D0F9F9F9FAFAFAF8F8F8F8F8F8F8F8F8F8F8F8FF - FFFFDADADAE0E0E0EAEAEAECECECF0F0F0F4F4F4F8F8F8F9F9F9F9F9F9F9F9F9 - FDFDFDFCFCFCF9F9F9F7F7F7F4F4F4F4F4F4F5F5F5F8F8F8FFFFFFFFFFFFFFFF - FFFFFFFFFDFDFDFFFFFFFCFCFCFFFFFFFFFFFFFEFEFEEAEAEAEAEAEAEAEAEAEA - EAEAECECECECECECE6E6E6D5D5D5E7E7E7F7F7F7F5F5F5F4F4F4F7F7F7F9F9F9 - F9F9F9F9F9F9FCFCFCFDFDFDFBFBFBEBEBEBE6E6E6F3F3F3F7F7F7F5F5F5F5F5 - F5F7F7F7FCFCFCFFFFFFFFFFFFF9F9F9EBEBEBEBEBEBE9E9E9ECECECECECECEB - EBEBEBEBEBE9E9E9E9E9E9D5D5D5DFDFDFF3F3F3F7F7F7F7F7F7F7F7F7F7F7F7 - F4F4F40000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFFFFFFFFFEAEAEAEAEAEA - E8E8E8E7E7E7E7E7E7DCDCDCD0D0D0DFDFDFEDEDEDEDEDEDECECEC0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FFD6D6D6D7D7D7D5D5D5D3D3D3DEDEDED2D2D2B3B3B38000008000 - 00800000800000800000FCFCFCFFFFFFFFFFFFFFFFFFF0F0F0E8E8E8C6C6C6D3 - D3D3F7F7F7FCFCFCFEFEFEFFFFFFFDFDFDF9F9F9D1D1D1CACACAD8D8D8E9E9E9 - 8000008000008000008000008000008000008000008000008000008000008000 - 00800000800000800000800000F6F6F6EAEAEAEAEAEAEAEAEAEAEAEADCDCDCE7 - E7E7F5F5F5F5F5F5F3F3F3F3F3F3F4F4F4F3F3F3F5F5F5F6F6F6F5F5F5F5F5F5 - FFFFFF800000800000800000800000800000F5F5F5F7F7F7F7F7F7EAEAEADDDD - DDDFDFDFDEDEDEDBDBDBE9E9E9EDEDEDEFEFEFECECECEAEAEA0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFFF - F5F5F5F6F6F6F7F7F7F7F7F70000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FFF2F2F2F0F0F0EEEEEEF1F1F1FFFFFFFFFFFFFFFFFFEF - EFEFEFEFEFF1F1F1EEEEEEEEEEEEEDEDEDE9E9E9E7E7E7D0D0D0B5B5B59A9A9A - B5B5B5E4E4E4F8F8F8F9F9F9F8F8F8FAFAFAFCFCFCFEFEFEFBFBFBF4F4F4F3F3 - F3F4F4F4F3F3F3F5F5F5F6F6F6F4F4F4FCFCFCE8E8E8E0E0E0EAEAEAEAEAEAE9 - E9E9E9E9E9ECECECECECECE8E8E8E8E8E8E4E4E4E1E1E1E1E1E1DFDFDFDBDBDB - DCDCDCD7D7D7F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFF9F9F9EDEDEDE8E8E8E3E3 - E3E3E3E3D0D0D0A7A7A7D1D1D1F9F9F9F8F8F8F9F9F9FAFAFAFBFBFBFBFBFBFF - FFFFCACACACDCDCDE9E9E9F1F1F1F5F5F5F7F7F7F8F8F8F8F8F8F9F9F9F9F9F9 - FDFDFDFCFCFCF8F8F8F7F7F7F6F6F6F7F7F7F7F7F7F7F7F7FFFFFFFFFFFFEAEA - EAE8E8E8DFDFDFE8E8E8ECECECF9F9F9FDFDFDF0F0F0ECECECEAEAEAEAEAEAEA - EAEAECECECEBEBEBE4E4E4D0D0D0E4E4E4F7F7F7F7F7F7F7F7F7F8F8F8F9F9F9 - F9F9F9FBFBFBFDFDFDFDFDFDFBFBFBF8F8F8F7F7F7F8F8F8F8F8F8F7F7F7F8F8 - F8F8F8F8FBFBFBFFFFFFFFFFFFEAEAEAEBEBEBEBEBEBEAEAEAEEEEEEEDEDEDEB - EBEBEAEAEAE7E7E7E9E9E9C3C3C3CECECEF4F4F4F7F7F7F7F7F7F7F7F7F7F7F7 - F6F6F60000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFFFFFFFFFEAEAEADADADA - D7D7D7D9D9D9CDCDCDBFBFBFCECECEEAEAEAE0E0E0DFDFDFECECECEAEAEA0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FFDBDBDBD2D2D2D5D5D5D9D9D9BFBFBFBDBDBDD2D2D28000 - 00800000800000800000800000FFFFFFFFFFFFECECECEAEAEAE9E9E9CBCBCBDD - DDDDFFFFFFFFFFFFFFFFFFFEFEFEF9F9F9F7F7F7EAEAEA800000800000800000 - 8000008000008000008000008000008000008000008000008000008000008000 - 00800000800000F3F3F3F6F6F6F8F8F8FFFFFFFDFDFDD9D9D9DADADAD9D9D9C7 - C7C7E4E4E4F3F3F3F3F3F3F5F5F5F7F7F7F6F6F6F8F8F8F8F8F8F5F5F5F3F3F3 - FEFEFE800000800000800000800000800000800000F5F5F5F7F7F7F7F7F7F7F7 - F7F7F7F7F5F5F5F4F4F4F7F7F7FFFFFFFDFDFDECECECEAEAEAEAEAEAEAEAEA00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - E3E3E3F4F4F4F7F7F7F7F7F7F7F7F70000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FFF4F4F4F5F5F5F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFED - EDEDECECECEFEFEFEEEEEEECECECECECECE9E9E9E7E7E7B6B6B6AFAFAFCACACA - E2E2E2F8F8F8F9F9F9F9F9F9F8F8F8FCFCFCFDFDFDFFFFFFFCFCFCF6F6F6F4F4 - F4F4F4F4F4F4F4F6F6F6F6F6F6F1F1F1F1F1F1F4F4F4FEFEFEF7F7F7EBEBEBEA - EAEAEAEAEAECECECECECECE8E8E8E4E4E4CCCCCCBBBBBBD1D1D1E0E0E0E0E0E0 - E4E4E4EAEAEAF8F8F8FFFFFFFFFFFFFFFFFFFBFBFBEEEEEEEDEDEDEAEAEAE2E2 - E2D0D0D0A9A9A9BABABAE4E4E4F7F7F7F9F9F9FCFCFCFCFCFCFAFAFAF9F9F9FF - FFFFC7C7C7CCCCCCEEEEEEF5F5F5F7F7F7F8F8F8F9F9F9FAFAFAFBFBFBF9F9F9 - FDFDFDFCFCFCF8F8F8F8F8F8F8F8F8F8F8F8F7F7F7F8F8F8FFFFFFFFFFFFEAEA - EAE5E5E5DDDDDDE2E2E2E8E8E8E8E8E8EDEDEDEEEEEEEAEAEAE7E7E7EAEAEAEA - EAEAEDEDEDECECECE2E2E2E2E2E2E9E9E9F8F8F8F8F8F8F9F9F9F9F9F9FBFBFB - FCFCFCFDFDFDFCFCFCFCFCFCFFFFFFFFFFFFFDFDFDFEFEFEFBFBFBF8F8F8F8F8 - F8FBFBFBFDFDFDFFFFFFFFFFFFEAEAEAECECECECECECEEEEEEEDEDEDEDEDEDEB - EBEBE8E8E8E6E6E6E5E5E5BEBEBEC9C9C9F2F2F2F7F7F7F6F6F6F6F6F6F7F7F7 - F7F7F7F8F8F8F8F8F8F7F7F7F7F7F7F7F7F7F9F9F9FAFAFAF8F8F8F4F4F4F3F3 - F3F4F4F4FFFFFFFFFFFFF7F7F7E9E9E9E7E7E7E7E7E7E9E9E9E7E7E7E7E7E7E7 - E7E7DDDDDDE6E6E6F5F5F5FEFEFEFFFFFFFFFFFFFFFFFFFAFAFAE9E9E9C7C7C7 - D3D3D3CCCCCCC8C8C8D9D9D9E9E9E9F5F5F5E8E8E8E9E9E9ECECECEBEBEBEAEA - EA0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FFF7F7F7F4F4F4F4F4F4DBDBDBDDDDDDEAEAEA8000 - 00800000800000800000800000800000FFFFFFEAEAEAE7E7E7E8E8E8D8D8D8E7 - E7E7FCFCFCFEFEFEFCFCFCF9F9F9F7F7F7F5F5F5800000800000800000800000 - 8000008000008000008000008000008000008000008000008000008000008000 - 00800000800000F3F3F3F5F5F5F8F8F8FFFFFFEAEAEAAFAFAFD2D2D2C3C3C3BF - BFBFE4E4E4F4F4F4F3F3F3F5F5F5F5F5F5F4F4F4F4F4F4F4F4F4F2F2F2F2F2F2 - F4F4F4F3F3F3800000800000800000800000800000800000F8F8F8F9F9F9F8F8 - F8F7F7F7F7F7F7F7F7F7F9F9F9FFFFFFFAFAFAEAEAEAEAEAEAEAEAEAEAEAEACA - CACA0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FFF3F3F3F7F7F7F7F7F7F7F7F70000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FFE9E9E9F6F6F6FFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEA - EAEAE9E9E9ECECECECECECE9E9E9E9E9E9D1D1D1B6B6B6989898C9C9C9F9F9F9 - F9F9F9F8F8F8F9F9F9FAFAFAFAFAFAFDFDFDFCFCFCFDFDFDFCFCFCF7F7F7F5F5 - F5F4F4F4F3F3F3F1F1F1F0F0F0EBEBEBF0F0F0FCFCFCF0F0F0D7D7D7DBDBDBEA - EAEAEAEAEAEAEAEAE8E8E8E6E6E6D0D0D0A6A6A6BEBEBEF4F4F4F7F7F7DADADA - DCDCDCEAEAEAECECECEDEDEDEDEDEDF0F0F0F0F0F0EDEDEDECECECDBDBDBC6C6 - C6B2B2B2C1C1C1E5E5E5F7F7F7F7F7F7F9F9F9FAFAFAF9F9F9F7F7F7F7F7F7FF - FFFFAFAFAFD0D0D0EFEFEFF4F4F4F8F8F8F9F9F9FAFAFAFDFDFDFEFEFEFCFCFC - FEFEFEFDFDFDF8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F9F9F9FFFFFFFFFFFFEAEA - EAD1D1D1B2B2B2C2C2C2D9D9D9E7E7E7ECECECECECECE9E9E9EBEBEBECECECED - EDEDF0F0F0ECECECE2E2E2E4E4E4EAEAEAECECECFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBFCFCFCF8F8F8F9F9F9F9F9 - F9FAFAFAFEFEFEFFFFFFFFFFFFEBEBEBEDEDEDEFEFEFEDEDEDECECECEBEBEBEA - EAEAE7E7E7D0D0D0B9B9B9A1A1A1CACACAF4F4F4F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F8F8F8F8F8F8F7F7F7F7F7F7F8F8F8F9F9F9FAFAFAF8F8F8F5F5F5F4F4 - F4F4F4F4FFFFFFFFFFFFF8F8F8ECECECEAEAEAEAEAEAEAEAEAE9E9E9E9E9E9E9 - E9E9DDDDDDE5E5E5F4F4F4FFFFFFFFFFFFFCFCFCF3F3F3F0F0F0EAEAEAC8C8C8 - D5D5D5E9E9E9E7E7E7F4F4F4F5F5F5F5F5F5F4F4F4F5F5F5F5F5F5EBEBEBEAEA - EA0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFEDEDED0000FF - 0000FF0000FF0000FF0000FFFAFAFAFFFFFFF8F8F8E9E9E9F0F0F0F3F3F3F9F9 - F9800000800000800000800000800000FFFFFFEBEBEBE8E8E8E9E9E9D9D9D9CE - CECEEAEAEAF7F7F7F7F7F7F7F7F7F5F5F5F2F2F2800000800000800000800000 - 800000800000800000800000800000800000800000800000800000800000EEEE - EEF3F3F3F6F6F6F7F7F7F8F8F8F9F9F9FAFAFAE7E7E7D3D3D3E5E5E5E4E4E4E3 - E3E3F5F5F5F6F6F6F5F5F5F5F5F5F4F4F4F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F3F3F3F0F0F0E2E2E2800000800000800000800000800000800000F9F9F9F8F8 - F8F7F7F7F7F7F7F7F7F7F8F8F8FFFFFFFFFFFFF9F9F9EAEAEAEAEAEAEAEAEADA - DADAE6E6E60000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FFF7F7F7F7F7F7F7F7F70000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FFFFFFFFFFFFFFFFFFFFFDFDFDEDEDEDECECECE9 - E9E9EAEAEAEEEEEEF0F0F0ECECECD3D3D39A9A9AAFAFAFCACACAE2E2E2F9F9F9 - F9F9F9F8F8F8F8F8F8FAFAFAFAFAFAFBFBFBF8F8F8F9F9F9F8F8F8F3F3F3F1F1 - F1F1F1F1EEEEEEEEEEEEEEEEEEEEEEEEF1F1F1F1F1F1E1E1E1D2D2D2E3E3E3D6 - D6D6D9D9D9EAEAEAE8E8E8E4E4E4CDCDCDCCCCCCE6E6E6FFFFFFF8F8F8CBCBCB - E2E2E2F5F5F5ECECECEDEDEDEDEDEDF0F0F0EEEEEEEAEAEAE9E9E9C9C9C9C5C5 - C5D7D7D7E8E8E8F7F7F7F7F7F7F7F7F7F9F9F9F8F8F8F7F7F7F7F7F7F7F7F7FF - FFFFD3D3D3E5E5E5F3F3F3F8F8F8FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD - FDFDFDFBFBFBF8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8FFFFFFEAEAEABCBC - BC9E9E9EAAAAAAD0D0D0E2E2E2D5D5D5DCDCDCECECECEBEBEBEEEEEEEDEDEDEC - ECECEAEAEAE6E6E6DFDFDFE1E1E1E9E9E9ECECECFBFBFBFFFFFFFFFFFFFDFDFD - FFFFFFFFFFFFF5F5F5F5F5F5FFFFFFF7F7F7F2F2F2F5F5F5F4F4F4F5F5F5F7F7 - F7FAFAFAFFFFFFFFFFFFFFFFFFEDEDEDEEEEEEEDEDEDECECECE9E9E9EAEAEAE8 - E8E8E7E7E7B7B7B7B0B0B0CBCBCBE2E2E2F7F7F7F7F7F7F8F8F8F7F7F7F7F7F7 - F8F8F8F8F8F8F7F7F7F8F8F8F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFAFAFAEEEEEEECECECECECECECECECEAEAEAEAEAEAEA - EAEAE9E9E9DBDBDBE4E4E4FFFFFFFFFFFFF2F2F2EEEEEEEDEDEDEAEAEAC9C9C9 - D8D8D8F8F8F8F7F7F7F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5EBEB - EBEEEEEE0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFEA - EAEAF3F3F30000FF0000FF0000FF0000FF0000FF0000FFFFFFFFF9F9F90000FF - 0000FF0000FF0000FF0000FF0000FFFEFEFEF7F7F7E9E9E9F3F3F3F7F7F7FDFD - FDFFFFFF800000800000800000800000800000EAEAEAE6E6E6E6E6E6CCCCCCCA - CACAEAEAEAF7F7F7F6F6F6F4F4F4F2F2F2800000800000800000800000800000 - 800000800000800000800000800000800000800000800000F5F5F5EEEEEEEFEF - EFF5F5F5F8F8F8F9F9F9F9F9F9F9F9F9FDFDFDFBFBFBF9F9F9F8F8F8F7F7F7F7 - F7F7F6F6F6F7F7F7F6F6F6F5F5F5F5F5F5F3F3F3F4F4F4F5F5F5F5F5F5F3F3F3 - F2F2F2F3F3F3F3F3F3F1F1F1800000800000800000800000800000F8F8F8F7F7 - F7F7F7F7F8F8F8F9F9F9FFFFFFFFFFFFFFFFFFFBFBFBEAEAEAD7D7D7C1C1C1C0 - C0C0C0C0C0EDEDED0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FFF7F7F7F7F7F7F6F6F60000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FFFFFFFFFFFFFFFDFDFDEDEDEDEAEAEAE9E9E9E9 - E9E9EAEAEAEEEEEEF0F0F0ECECECBABABAB4B4B4E3E3E3F8F8F8F8F8F8F8F8F8 - F9F9F9FAFAFAFAFAFAFBFBFBF9F9F9F9F9F9FBFBFBF8F8F8F6F6F6F4F4F4F3F3 - F3F0F0F0EEEEEEF1F1F1F3F3F3F2F2F2F2F2F2F3F3F3F3F3F3F3F3F3F4F4F4E6 - E6E6E6E6E6E8E8E8E6E6E6E2E2E2E1E1E1D6D6D6E7E7E7F6F6F6F3F3F3CCCCCC - E9E9E9F1F1F1D6D6D6D5D5D5D6D6D6E4E4E4ECECECD9D9D9CACACABABABAD9D9 - D9F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F9F9F9F8F8F8F7F7F7F7F7F7F7F7F7FF - FFFFF7F7F7F7F7F7F7F7F7F8F8F8FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1EBEBEB - F9F9F9F9F9F9F9F9F9F8F8F8F8F8F8F7F7F7F7F7F7F7F7F7F7F7F7E4E4E4CACA - CAC3C3C3D9D9D9F2F2F2F3F3F3E4E4E4E9E9E9DADADAC8C8C8DCDCDCECECECE7 - E7E7E5E5E5E1E1E1DFDFDFE4E4E4EAEAEAEDEDEDEEEEEEF1F1F1F1F1F1F3F3F3 - FFFFFFFFFFFFD5D5D5E0E0E0FAFAFAF0F0F0F2F2F2F5F5F5F5F5F5F4F4F4F5F5 - F5FFFFFFFFFFFFFFFFFFFBFBFBEAEAEAECECECECECECE9E9E9E8E8E8E9E9E9E7 - E7E7E6E6E6B7B7B7CCCCCCF9F9F9F9F9F9F8F8F8F9F9F9F9F9F9F7F7F7F6F6F6 - F7F7F7F8F8F8F8F8F8F9F9F9F9F9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFBFBFBEFEFEFF0F0F0EEEEEEEDEDEDECECECEAEAEAEAEAEAEA - EAEAEAEAEACDCDCDD6D6D6F9F9F9FBFBFBF1F1F1EEEEEEEDEDEDEBEBEBDBDBDB - E7E7E7F7F7F7F1F1F1ECECECEEEEEEF1F1F1F3F3F3F3F3F3F4F4F4F5F5F5FFFF - FFFFFFFFEEEEEE0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FFF6F6F6FBFBFBFCFCFC0000FF0000FF0000FFFFFFFFFDFDFDFCFCFC0000FF - 0000FF0000FF0000FF0000FF0000FF0000FFF5F5F5EBEBEBF3F3F3F5F5F5FBFB - FBFFFFFF800000800000800000800000800000800000E6E6E6D8D8D8BABABAD6 - D6D6F5F5F5F7F7F7F4F4F4F3F3F3F3F3F3800000800000800000800000800000 - 800000800000800000800000F9F9F9F7F7F7FFFFFFFFFFFFFFFFFFFBFBFBF0F0 - F0F5F5F5F8F8F8F9F9F9F9F9F9FBFBFBFFFFFFFFFFFFF9F9F9F9F9F9F8F8F8F7 - F7F7F7F7F7F8F8F8F7F7F7F4F4F4F4F4F4F4F4F4F5F5F5F6F6F6F4F4F4F2F2F2 - F4F4F4F6F6F6F5F5F5F6F6F6F7F7F7800000800000800000800000800000F7F7 - F7F8F8F8F9F9F9F9F9F9FFFFFFFFFFFFF9F9F9E9E9E9D6D6D6ACACACBBBBBBD0 - D0D0D0D0D0DEDEDEE1E1E10000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FFF6F6F6F4F4F40000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FFEDEDEDECECECEAEAEAE9E9E9E8E8E8E9 - E9E9EBEBEBECECECECECECD6D6D6A2A2A2C9C9C9F5F5F5F8F8F8F8F8F8F9F9F9 - FBFBFBFAFAFAFBFBFBFCFCFCFBFBFBFCFCFCFBFBFBF8F8F8FBFBFBFFFFFFFCFC - FCF5F5F5F3F3F3F4F4F4F4F4F4F2F2F2F2F2F2F4F4F4F5F5F5F6F6F6F8F8F8F8 - F8F8F8F8F8FFFFFFF7F7F7E5E5E5E6E6E6C9C9C9D7D7D7F5F5F5F6F6F6EAEAEA - EEEEEEECECECD9D9D9D7D7D7D9D9D9E3E3E3D9D9D9BCBCBCCACACADBDBDBEBEB - EBF7F7F7F8F8F8F8F8F8F7F7F7F7F7F7F8F8F8F8F8F8F7F7F7F7F7F7F7F7F7FF - FFFFF6F6F6F5F5F5F5F5F5F4F4F4FFFFFFF9F9F9DCDCDCCACACAB9B9B9D8D8D8 - F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1EFEFEFF3F3F3F6F6F6F3F3 - F3F0F0F0F3F3F3F8F8F8F9F9F9F8F8F8F6F6F6E6E6E6D5D5D5E6E6E6EAEAEAE8 - E8E8E6E6E6E4E4E4E5E5E5E9E9E9EDEDEDEDEDEDEEEEEEEFEFEFEEEEEEF1F1F1 - FFFFFFFFFFFFCACACADBDBDBF8F8F8F1F1F1F5F5F5F8F8F8F5F5F5FFFFFFFFFF - FFFFFFFFFFFFFFF9F9F9ECECECE9E9E9E9E9E9E8E8E8E5E5E5E4E4E4E6E6E6E4 - E4E4DFDFDFB3B3B3CACACAF7F7F7F8F8F8F7F7F7F6F6F6F6F6F6F3F3F3F4F4F4 - F7F7F7F7F7F7F7F7F7F8F8F8F9F9F9FFFFFFFFFFFFFDFDFDF1F1F1EDEDEDEDED - EDEEEEEEF0F0F0EFEFEFEFEFEFEEEEEEECECECECECECEAEAEAEAEAEAEAEAEAEA - EAEAEAEAEACACACAD3D3D3F2F2F2FFFFFFFDFDFDEEEEEEEDEDEDEFEFEFEFEFEF - EDEDEDF6F6F6EBEBEBEAEAEAF1F1F1F1F1F1EEEEEEEEEEEEF1F1F1F2F2F2FFFF - FFFCFCFCEDEDED0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FFFFFFFFFFFFFFFFFFFF0000FF0000FFFDFDFDF9F9F9FBFBFB0000FF - 0000FF0000FF0000FF0000FF0000FF0000FFE2E2E2EEEEEEF4F4F4FFFFFFFFFF - FFFFFFFFFFFFFF800000800000800000800000800000800000C8C8C8C5C5C5E5 - E5E5F6F6F6F6F6F6F3F3F3F3F3F3F4F4F4800000800000800000800000800000 - 800000800000FFFFFFFAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F4F4 - F4F5F5F5F9F9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6E6E6F8F8F8F8F8F8F7 - F7F7F7F7F7F9F9F9F8F8F8F5F5F5F4F4F4F5F5F5F5F5F5F4F4F4F3F3F3F4F4F4 - F5F5F5F4F4F4F3F3F3F4F4F4F5F5F58000008000008000008000008000008000 - 00F9F9F9F9F9F9F7F7F7FFFFFFFFFFFFDADADADBDBDBC6C6C6BFBFBFE3E3E3F5 - F5F5F3F3F3F4F4F4F4F4F4F1F1F1ECECEC0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FFF4F4F40000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FFEAEAEAE9E9E9E8E8E8E9E9E9E9E9E9EB - EBEBECECECECECECEEEEEEBEBEBEB0B0B0D9D9D9F3F3F3F8F8F8F9F9F9FBFBFB - FAFAFAFAFAFAFCFCFCFBFBFBF9F9F9F9F9F9F8F8F8F7F7F7FCFCFCFFFFFFFFFF - FFFFFFFFFBFBFBF0F0F0F1F1F1F1F1F1F2F2F2F4F4F4F6F6F6F6F6F6F8F8F8FA - FAFAFBFBFBFFFFFFFFFFFFE9E9E9E9E9E9DADADAE7E7E7F7F7F7F8F8F8F8F8F8 - F8F8F8F5F5F5F3F3F3F4F4F4F3F3F3F1F1F1E7E7E7DCDCDCE9E9E9F9F9F9FCFC - FCFAFAFAFFFFFFFFFFFFF7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7FF - FFFFF4F4F4F4F4F4F4F4F4F3F3F3F3F3F3E6E6E6D7D7D7D5D5D5D4D4D4E6E6E6 - FFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF0F0F0F1F1F1F3F3F3F6F6F6F5F5F5F4F4 - F4F4F4F4F5F5F5F6F6F6F7F7F7F5F5F5F3F3F3F5F5F5F5F5F5F6F6F6F7F7F7EC - ECECEAEAEAE9E9E9EAEAEAEBEBEBECECECECECECEDEDEDEFEFEFEDEDEDEDEDED - EDEDEDECECECD5D5D5F6F6F6FFFFFFF4F4F4F8F8F8F9F9F9FFFFFFFFFFFFFFFF - FFFFFFFFF9F9F9EAEAEAE9E9E9E9E9E9E7E7E7E5E5E5E3E3E3E3E3E3E6E6E6E1 - E1E1DEDEDEBCBCBCD2D2D2F8F8F8F9F9F9F7F7F7F5F5F5F5F5F5F4F4F4F5F5F5 - F7F7F7F7F7F7F7F7F7F7F7F7FBFBFBFFFFFFFFFFFFF9F9F9EEEEEEEBEBEBECEC - ECEEEEEEEFEFEFEEEEEEEDEDEDEAEAEAEAEAEAEAEAEAEAEAEAEAEAEADBDBDBCC - CCCCCACACAB6B6B6D0D0D0EEEEEEFFFFFFFBFBFBEFEFEFEFEFEFF1F1F1EEEEEE - EBEBEBE9E9E9ECECECF0F0F0F9F9F9F6F6F6F2F2F2F3F3F3F3F3F3F4F4F4F7F7 - F7FFFFFFFDFDFDEAEAEA0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FFFFFFFFFFFFFFFFFFFFFBFBFBF8F8F8F8F8F8FBFBFB0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FFFEFEFEFEFEFEFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFF800000800000800000800000800000B5B5B5D3D3D3F5 - F5F5F7F7F7F6F6F6F4F4F4F4F4F4F6F6F6F7F7F7800000800000800000800000 - 800000800000FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDEEEEEEE9E9E9D7D7 - D7E6E6E6F9F9F9FFFFFFFFFFFFFFFFFFFFFFFFECECECE4E4E4F7F7F7F7F7F7F7 - F7F7F7F7F7F8F8F8F7F7F7F4F4F4F5F5F5F7F7F7F6F6F6F3F3F3F5F5F5F7F7F7 - F5F5F5F1F1F1F3F3F3F4F4F4F3F3F3F4F4F48000008000008000008000008000 - 00F9F9F9F7F7F7F7F7F7FFFFFFEEEEEEBEBEBEE5E5E5D9D9D9D7D7D7F5F5F5F6 - F6F6F5F5F5F7F7F7F8F8F8F7F7F7F5F5F5F5F5F50000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FFE8E8E8E7E7E7E9E9E9EAEAEAEAEAEAEA - EAEAE9E9E9ECECECD7D7D79E9E9EC2C2C2EDEDEDF3F3F3F7F7F7F8F8F8F9F9F9 - FAFAFAFCFCFCFBFBFBF8F8F8F7F7F7F8F8F8F9F9F9F9F9F9FFFFFFFFFFFFFFFF - FFFFFFFFF1F1F1EDEDEDEDEDEDF1F1F1F4F4F4F7F7F7F8F8F8F8F8F8FCFCFCFD - FDFDFAFAFAFFFFFFFFFFFFEBEBEBE9E9E9EAEAEAEAEAEAF5F5F5F7F7F7F8F8F8 - F8F8F8F8F8F8FAFAFAF9F9F9F7F7F7F8F8F8FAFAFAF9F9F9F9F9F9FCFCFCFCFC - FCF7F7F7FFFFFFFCFCFCE8E8E8F7F7F7F8F8F8F8F8F8F8F8F8F7F7F7F7F7F7FF - FFFFF3F3F3F5F5F5F6F6F6F5F5F5F4F4F4F7F7F7F7F7F7F4F4F4F5F5F5F8F8F8 - FFFFFFFFFFFFFFFFFFEEEEEEE7E7E7C8C8C8DDDDDDFAFAFAFBFBFBF9F9F9F8F8 - F8F4F4F4F6F6F6F6F6F6F7F7F7F5F5F5F4F4F4FBFBFBFAFAFAF8F8F8FAFAFAFF - FFFFFDFDFDECECECEDEDEDEDEDEDEAEAEAEAEAEAEEEEEEF0F0F0EDEDEDEAEAEA - E9E9E9E8E8E8E4E4E4F6F6F6F8F8F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8 - F8E7E7E7E6E6E6E6E6E6E6E6E6E6E6E6E4E4E4E4E4E4E2E2E2E3E3E3E5E5E5E2 - E2E2DFDFDFC5C5C5D7D7D7F7F7F7F7F7F7F5F5F5F6F6F6F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7FBFBFBFBFBFBFFFFFFF7F7F7EEEEEEEDEDEDEDED - EDEEEEEEEDEDEDECECECEAEAEAE9E9E9EAEAEAEAEAEAEAEAEADBDBDBBABABAC3 - C3C3D1D1D1D1D1D1DDDDDDECECECF1F1F1F2F2F2EAEAEAEFEFEFEFEFEFEAEAEA - E7E7E7E8E8E8CCCCCCDEDEDEF9F9F9F9F9F9F8F8F8F9F9F9F8F8F8F9F9F9FBFB - FBFFFFFFF9F9F9E8E8E80000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FFF8F8F8FAFAFAF6F6F6F8F8F8F8F8F8FAFAFAFFFFFFFFFFFF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFAFAFAF0F0F0E9E9 - E9E7E7E7E2E2E2E4E4E4E9E9E9800000800000800000800000800000E2E2E2F6 - F6F6F8F8F8F7F7F7F5F5F5F5F5F5F7F7F7F8F8F8800000800000800000800000 - 800000800000ECECECFCFCFCFFFFFFF9F9F9EAEAEADBDBDBC3C3C3C0C0C0B2B2 - B2D6D6D6F9F9F9FFFFFFFFFFFFEFEFEFEEEEEEE7E7E7D3D3D3E5E5E5F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F5F5F5F5F5F5F6F6F6F5F5F5F5F5F5F7F7F7F8F8F8 - F3F3F3F2F2F2F5F5F5F7F7F7F7F7F7F8F8F88000008000008000008000008000 - 00800000F5F5F5F5F5F5F5F5F5E7E7E7D7D7D7F4F4F4DCDCDCD8D8D8F6F6F6F8 - F8F8F6F6F6F8F8F8F8F8F8F8F8F8F9F9F9FAFAFAFAFAFA0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FFE7E7E7E9E9E9EAEAEAEAEAEAEAEAEAEA - EAEAE9E9E9D6D6D6A2A2A2ABABABD7D7D7F0F0F0F4F4F4F7F7F7F9F9F9F9F9F9 - FCFCFCFDFDFDFBFBFBF9F9F9FBFBFBFAFAFAFAFAFAFFFFFFFFFFFFFFFFFFF9F9 - F9EAEAEAEAEAEAD3D3D3DFDFDFF4F4F4F7F7F7F9F9F9FBFBFBFDFDFDFFFFFFFD - FDFDFFFFFFFFFFFFFFFFFFEBEBEBE9E9E9EAEAEAE8E8E8DADADAE9E9E9F8F8F8 - F8F8F8F8F8F8F9F9F9F8F8F8F5F5F5F7F7F7F8F8F8F8F8F8F8F8F8F8F8F8F4F4 - F4F1F1F1FFFFFFD9D9D9D3D3D3F2F2F2F4F4F4F4F4F4F5F5F5F7F7F7F5F5F5FF - FFFFF3F3F3F5F5F5F7F7F7F5F5F5F6F6F6F7F7F7F8F8F8F7F7F7F9F9F9FEFEFE - FFFFFFFFFFFFF6F6F6E8E8E8E4E4E4AAAAAAC5C5C5FBFBFBFBFBFBFCFCFCFDFD - FDFBFBFBFBFBFBFAFAFAFBFBFBF8F8F8F7F7F7FCFCFCFCFCFCFBFBFBFDFDFDFF - FFFFFEFEFEEDEDEDEEEEEEEDEDEDEAEAEAEDEDEDF0F0F0EEEEEEEBEBEBE9E9E9 - E8E8E8E8E8E8E6E6E6E9E9E9ECECECFBFBFBFFFFFFFFFFFFFFFFFFF8F8F8E7E7 - E7E5E5E5E2E2E2E2E2E2E2E2E2E3E3E3E5E5E5E4E4E4E6E6E6E7E7E7E8E8E8E4 - E4E4E1E1E1C6C6C6D4D4D4F3F3F3F5F5F5F5F5F5F6F6F6F5F5F5F5F5F5F5F5F5 - F5F5F5F6F6F6F7F7F7F7F7F7F8F8F8F8F8F8F5F5F5F1F1F1E1E1E1D1D1D1DCDC - DCEDEDEDECECECEDEDEDEBEBEBEAEAEAEAEAEADADADACACACAB8B8B8C1C1C1DE - DEDEF0F0F0F0F0F0EBEBEBEEEEEEF3F3F3F1F1F1FFFFFFFFFFFFECECECE7E7E7 - E6E6E6E6E6E6B4B4B4C9C9C9F9F9F9F9F9F9F8F8F8F8F8F8FAFAFAFBFBFBF9F9 - F9F6F6F6F5F5F5D3D3D3BABABA0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FFE7E7E7E7E7E7E4E4E4E5E5E5F3F3F3F6F6F6F8F8F8FFFFFFFFFFFF - FFFFFF0000FF0000FF0000FF0000FF0000FF0000FF0000FFEFEFEFE8E8E8E7E7 - E7E6E6E6E2E2E2D5D5D5C8C8C8D9D9D9800000800000800000800000F2F2F2F7 - F7F7F8F8F8F7F7F7F5F5F5F4F4F4F6F6F6F8F8F8F8F8F8800000800000800000 - 800000800000EAEAEAEAEAEAEAEAEAE7E7E7D9D9D9B4B4B4B9B9B9D1D1D1D7D7 - D7E8E8E8F9F9F9FFFFFFFFFFFFEDEDEDEBEBEBE7E7E7C2C2C280000080000080 - 0000800000800000800000F4F4F4F4F4F4F5F5F5F6F6F6F7F7F7F8F8F8F5F5F5 - F1F1F1F4F4F4F7F7F7F8F8F8FAFAFAFBFBFBFBFBFB8000008000008000008000 - 00800000800000F4F4F4F3F3F3F4F4F4F4F4F4F5F5F5E8E8E8E7E7E7F7F7F7F8 - F8F8F5F5F5F7F7F7F8F8F8FAFAFAFBFBFBFBFBFBFCFCFCFEFEFE0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FFEAEAEAEAEAEAEAEAEAE9E9E9EA - EAEAE7E7E7BCBCBCB3B3B3DADADAF0F0F0F4F4F4F6F6F6F8F8F8F9F9F9FBFBFB - FDFDFDFDFDFDFAFAFAF8F8F8F8F8F8F8F8F8F7F7F7FFFFFFFFFFFFFBFBFBEBEB - EBEAEAEAEAEAEAC1C1C1D1D1D1F8F8F8F9F9F9F9F9F9FDFDFDFEFEFEFDFDFDFF - FFFFFFFFFFFFFFFFFDFDFDEBEBEBECECECECECECE9E9E9CCCCCCDADADAF8F8F8 - F8F8F8F9F9F9FAFAFAF8F8F8F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F4F4 - F4F3F3F3F3F3F3E2E2E2E1E1E1F0F0F0F4F4F4F1F1F1F5F5F5F8F8F8F4F4F4FF - FFFFF7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F8F8F8F8F8F8F8F8F8F9F9F9FFFFFF - FFFFFFFFFFFFEDEDEDE6E6E6E2E2E2B2B2B2CCCCCCFBFBFBFCFCFCFEFEFEFFFF - FFFDFDFDFDFDFDFCFCFCFCFCFCF8F8F8F7F7F7FBFBFBFCFCFCFCFCFCFDFDFDFE - FEFEFFFFFFFCFCFCEEEEEEECECECEBEBEBE3E3E3D8D8D8D1D1D1DADADAE7E7E7 - E8E8E8E6E6E6E6E6E6E9E9E9EAEAEAEAEAEAECECECEAEAEAE8E8E8E8E8E8E7E7 - E7E6E6E6E4E4E4E3E3E3E2E2E2E6E6E6E9E9E9E9E9E9EAEAEAEBEBEBEAEAEAE9 - E9E9E8E8E8CCCCCCD9D9D9F5F5F5F7F7F7F7F7F7F7F7F7F7F7F7F5F5F5F5F5F5 - F5F5F5F5F5F5F4F4F4F4F4F4F4F4F4F5F5F5F1F1F1EDEDEDE2E2E2D4D4D4E4E4 - E4DCDCDCDCDCDCECECECEBEBEBE9E9E9E9E9E9C8C8C8C1C1C1D2D2D2E0E0E0F1 - F1F1F4F4F4F0F0F0EDEDEDF3F3F3F5F5F5F8F8F8FFFFFFFFFFFFE8E8E8E4E4E4 - E3E3E3E3E3E3B4B4B4CCCCCCFBFBFBFAFAFAF8F8F8F9F9F9FBFBFBFAFAFAF9F9 - F9F9F9F9F9F9F9E4E4E4CBCBCBDADADA0000FF0000FF0000FF0000FF0000FF00 - 00FFE7E7E7E7E7E7E4E4E4DFDFDFDFDFDFD9D9D9E6E6E6F2F2F2FFFFFFFFFFFF - ECECECD7D7D7D6D6D6EAEAEAF4F4F40000FF0000FF0000FF0000FFE6E6E6D3D3 - D3D3D3D3D3D3D3B2B2B2C4C4C4E6E6E6800000800000800000800000800000F9 - F9F9FAFAFAF8F8F8F7F7F7F5F5F5F7F7F7FBFBFBFFFFFF800000800000800000 - 800000800000E9E9E9E9E9E9E9E9E9E6E6E6C3C3C3B9B9B9DFDFDFF6F6F6F8F8 - F8F9F9F9FAFAFAFFFFFFFFFFFFEDEDEDECECECE9E9E9C8C8C8D6D6D680000080 - 0000800000800000800000F4F4F4F5F5F5F8F8F8F8F8F8F8F8F8F7F7F7F3F3F3 - F3F3F3F7F7F7F9F9F9FBFBFBFCFCFCFDFDFDFFFFFFFFFFFF8000008000008000 - 00800000800000F5F5F5F6F6F6F7F7F7F7F7F7F7F7F7F5F5F5F6F6F6F8F8F8F8 - F8F8F7F7F7F7F7F7F9F9F9F9F9F9FAFAFAFCFCFCFDFDFDFFFFFFFFFFFFFFFFFF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FFE9E9E9E9E9E9E9E9E9E7E7E7E9 - E9E9E5E5E5BABABACACACAF0F0F0F4F4F4F7F7F7F7F7F7F7F7F7FFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFF5F5F5F5F5F5F5F5F5FFFFFFFFFFFFFFFFFFEAEAEAEAEA - EAE8E8E8E8E8E8BFBFBFCECECEF7F7F7F8F8F8F8F8F8FDFDFDFDFDFDFFFFFFFF - FFFFFFFFFFFDFDFDECECECEBEBEBEBEBEBEAEAEAE9E9E9CECECEDCDCDCF9F9F9 - F9F9F9FAFAFAF9F9F9F8F8F8F7F7F7F7F7F7F7F7F7F7F7F7F8F8F8F7F7F7F5F5 - F5F4F4F4F4F4F4F3F3F3F1F1F1F3F3F3F7F7F7F5F5F5F9F9F9F7F7F7F0F0F0FF - FFFFF9F9F9FBFBFBF9F9F9F8F8F8F8F8F8F9F9F9FAFAFAFAFAFAFDFDFDFFFFFF - FFFFFFFFFFFFE6E6E6E5E5E5E2E2E2B8B8B8CDCDCDF9F9F9FEFEFEFEFEFEFDFD - FDFCFCFCFCFCFCFBFBFBFBFBFBF7F7F7F9F9F9FDFDFDFFFFFFFCFCFCFEFEFEFD - FDFDFFFFFFFCFCFCEDEDEDECECECE1E1E1CCCCCCD2D2D2D9D9D9F3F3F3F6F6F6 - E8E8E8E4E4E4E6E6E6E9E9E9E6E6E6E4E4E4E4E4E4E6E6E6E8E8E8E8E8E8E8E8 - E8E8E8E8E5E5E5E2E2E2E2E2E2E9E9E9ECECECECECECEBEBEBEAEAEAEBEBEBEC - ECECEEEEEEE1E1E1F9F9F9FFFFFFFCFCFCF8F8F8F7F7F7F7F7F7F7F7F7F7F7F7 - F6F6F6F5F5F5F4F4F4F2F2F2F4F4F4F4F4F4F2F2F2F1F1F1F2F2F2F2F2F2F4F4 - F4E6E6E6E6E6E6DADADAD7D7D7E5E5E5E7E7E7C5C5C5D1D1D1F3F3F3F4F4F4F3 - F3F3F1F1F1EDEDEDF1F1F1F7F7F7F8F8F8FBFBFBFFFFFFFFFFFFF9F9F9E4E4E4 - E5E5E5E5E5E5B9B9B9CECECEFCFCFCFBFBFBFAFAFAFBFBFBFEFEFEFCFCFCFBFB - FBF9F9F9F8F8F8FAFAFAF5F5F5F4F4F40000FF0000FF0000FF0000FF0000FFE1 - E1E1E4E4E4E4E4E4E1E1E1E1E1E1E0E0E0C9C9C9D2D2D2EFEFEFFFFFFFFFFFFF - EDEDEDE2E2E2E9E9E9F3F3F3F5F5F5F4F4F40000FF0000FF0000FF0000FFACAC - ACCFCFCFC4C4C4C1C1C1E6E6E6F5F5F5E6E6E680000080000080000080000080 - 0000F8F8F8F8F8F8F8F8F8F7F7F7F7F7F7FFFFFFFFFFFFFFFFFF800000800000 - 800000800000800000E9E9E9E7E7E7D3D3D3A8A8A8CECECEF6F6F6F9F9F9F8F8 - F8F9F9F9FBFBFBFFFFFFFFFFFFEEEEEEEEEEEEEEEEEECBCBCBD5D5D580000080 - 0000800000800000800000F3F3F3F4F4F4F8F8F8F8F8F8F7F7F7F7F7F7F5F5F5 - F7F7F7FBFBFBFBFBFBFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8000008000 - 00800000800000800000F7F7F7F7F7F7F8F8F8F8F8F8F7F7F7F7F7F7F8F8F8F8 - F8F8F8F8F8F8F8F8F7F7F7F8F8F8FCFCFCFEFEFEFFFFFFFFFFFFFFFFFFFDFDFD - F9F9F90000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FFE7E7E7E9E9E9E7E7E7E6E6E6E9 - E9E9D0D0D09D9D9DC8C8C8F1F1F1F5F5F5F8F8F8F8F8F8FFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFBFBFBF5F5F5F5F5F5F5F5F5FFFFFFFFFFFFF9F9F9EAEAEAEAEA - EAE7E7E7D7D7D7AAAAAACCCCCCF5F5F5F8F8F8F9F9F9FFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFEDEDEDEAEAEAE9E9E9EAEAEAEAEAEAE8E8E8CECECEDCDCDCF8F8F8 - F8F8F8F8F8F8F8F8F8F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F4F4F4F4F4 - F4F4F4F4F4F4F4F3F3F3F4F4F4F7F7F7F8F8F8F9F9F9F9F9F9F7F7F7F4F4F4FF - FFFFFDFDFDFEFEFEFDFDFDFAFAFAFAFAFAFBFBFBFAFAFAFBFBFBFFFFFFFFFFFF - FFFFFFFAFAFAE5E5E5E2E2E2DFDFDFB6B6B6CCCCCCF6F6F6FEFEFEFFFFFFFFFF - FFFDFDFDFCFCFCFCFCFCFBFBFBF9F9F9FBFBFBFEFEFEFEFEFEFCFCFCFCFCFCFC - FCFCFBFBFBFBFBFBDFDFDFD3D3D3CECECED6D6D6EAEAEAF4F4F4FFFFFFFFFFFF - EBEBEBE6E6E6E7E7E7E9E9E9E6E6E6E5E5E5E7E7E7EBEBEBEAEAEAE8E8E8E8E8 - E8E8E8E8E4E4E4E2E2E2E7E7E7EBEBEBEDEDEDECECECEBEBEBEBEBEBEDEDEDED - EDEDEEEEEEEEEEEEFDFDFDFFFFFFF7F7F7F2F2F2F7F7F7F7F7F7F7F7F7F7F7F7 - F6F6F6F5F5F5F3F3F3F4F4F4F7F7F7F6F6F6F8F8F8F8F8F8F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7EAEAEAF5F5F5F7F7F7EAEAEAC6C6C6D4D4D4F5F5F5F3F3F3F0 - F0F0F1F1F1F1F1F1F5F5F5F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFE9E9E9BFBFBF - C0C0C0BFBFBFA6A6A6D1D1D1FBFBFBFAFAFAFBFBFBFDFDFDFEFEFEFDFDFDF9F9 - F9F9F9F9F8F8F8FAFAFAF8F8F8F7F7F7FFFFFF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FFCECECEEDEDEDFCFCFCF6F6F6 - EDEDED0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFD1D1 - D1E7E7E7E7E7E7E6E6E6F6F6F6F6F6F6F5F5F580000080000080000080000080 - 0000800000F8F8F8F7F7F7F7F7F7F9F9F9FFFFFFFFFFFFFFFFFFECECEC800000 - 800000800000800000800000E8E8E8BFBFBFB9B9B9E5E5E5F9F9F9F9F9F9F8F8 - F8FAFAFAFFFFFFFFFFFFFFFFFFEEEEEEEFEFEFEDEDEDDADADAE6E6E680000080 - 0000800000800000800000F1F1F1F3F3F3F9F9F9FAFAFAF9F9F9F8F8F8F7F7F7 - FBFBFBFDFDFDFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8000008000 - 00800000800000800000800000F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8 - F8F8F8F8F8F7F7F7F3F3F3F9F9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFC - F8F8F8F7F7F70000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFE7E7E7E7E7E7E6E6E6D1 - D1D1989898ADADADDCDCDCF3F3F3F7F7F7F8F8F8FFFFFFFFFFFFFFFFFFFFFFFF - EDEDEDECECECE9E9E9E9E9E9F5F5F5F5F5F5FFFFFFFFFFFFEAEAEAEAEAEAEAEA - EAD2D2D2AAAAAAB5B5B5E0E0E0F9F9F9FCFCFCFCFCFCFFFFFFFFFFFFFFFFFFFF - FFFFEAEAEAE7E7E7E6E6E6E9E9E9EAEAEAE9E9E9D9D9D9BEBEBEDADADAF5F5F5 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F6F6F6F5F5F5F5F5F5F7F7 - F7F7F7F7F5F5F5F5F5F5F7F7F7F7F7F7F9F9F9FAFAFAFAFAFAFAFAFAFAFAFAFF - FFFFFCFCFCFDFDFDFBFBFBF9F9F9F9F9F9F9F9F9FBFBFBFFFFFFFFFFFFFFFFFF - FDFDFDE6E6E6E1E1E1DFDFDFCACACAA3A3A3CECECEF6F6F6FBFBFBFEFEFEFEFE - FEFDFDFDFEFEFEFEFEFEFFFFFFFFFFFFFDFDFDFAFAFAFAFAFAF9F9F9FBFBFBFA - FAFAF9F9F9FBFBFBECECECDFDFDFDCDCDCE6E6E6F3F3F3F3F3F3FFFFFFF7F7F7 - ECECECE7E7E7E6E6E6E9E9E9E8E8E8E7E7E7EAEAEAEDEDEDEAEAEAE8E8E8E8E8 - E8E8E8E8E6E6E6E7E7E7EAEAEAEEEEEEEDEDEDECECECECECECEDEDEDEEEEEEEE - EEEEF1F1F1F1F1F1F4F4F4F7F7F7EEEEEEF5F5F5F9F9F9F8F8F8F7F7F7F7F7F7 - F6F6F6F3F3F3F4F4F4F6F6F6F8F8F8F9F9F9FCFCFCFAFAFAF7F7F7F7F7F7F8F8 - F8F9F9F9F9F9F9FBFBFBFFFFFFFFFFFFE9E9E9C7C7C7D6D6D6F2F2F2F1F1F1F3 - F3F3F6F6F6F5F5F5F8F8F8FBFBFBFBFBFBFDFDFDFEFEFEFBFBFBE5E5E5D1D1D1 - D3D3D3D1D1D1D0D0D0E7E7E7FAFAFAF8F8F8FAFAFAFCFCFCFCFCFCFAFAFAF8F8 - F8F8F8F8F8F8F8F8F8F8F8F8F8F7F7F7FFFFFFFCFCFC0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFEDEDEDF0F0F0FFFFFF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FFF8F8F8F7F7F7F5F5F5F5F5F5F5F5F5F4F4F4F4F4F480000080000080000080 - 0000800000800000F7F7F7F7F7F7F9F9F9FFFFFFFFFFFFFFFFFFECECECE9E9E9 - 800000800000800000800000800000800000E4E4E4F9F9F9FCFCFCFDFDFDFEFE - FEFFFFFFFFFFFFFFFFFFFFFFFFECECECEDEDEDECECECEAEAEAE9E9E980000080 - 0000800000800000800000800000F8F8F8FDFDFDFDFDFDFAFAFAF8F8F8F9F9F9 - FAFAFAFCFCFCFDFDFDFFFFFFFFFFFFFFFFFFEEEEEEEBEBEBD4D4D4A9A9A98000 - 00800000800000800000800000800000F9F9F9F8F8F8F8F8F8F8F8F8F7F7F7F5 - F5F5F3F3F3F3F3F3F2F2F2FCFCFCFFFFFFFDFDFDFFFFFFFFFFFFFAFAFAF8F8F8 - F7F7F7F7F7F7F7F7F70000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFDFDFDFE3E3E3E0E0E0AF - AFAFAEAEAEDEDEDEF4F4F4F7F7F7FCFCFCFFFFFFFFFFFFFFFFFFFBFBFBECECEC - EAEAEAE7E7E7D1D1D1BFBFBFC2C2C2E2E2E2FFFFFFFFFFFFEAEAEAEAEAEAD8D8 - D8A7A7A7B7B7B7E1E1E1F7F7F7FCFCFCFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFEE - EEEEE8E8E8E6E6E6D9D9D9CCCCCCCACACAC8C8C8BABABACACACAE8E8E8F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F6F6F6F5F5F5F5F5F5F5F5F5F7F7 - F7F5F5F5F5F5F5F7F7F7F8F8F8F8F8F8F9F9F9FAFAFAFAFAFAFDFDFDFDFDFDFF - FFFFF8F8F8F8F8F8F8F8F8F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFCFCFCF9F9F9 - F5F5F5E4E4E4E2E2E2D2D2D2ABABABBABABAE3E3E3F8F8F8F9F9F9FAFAFAF9F9 - F9F9F9F9FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFBFBFBFBFBFBFBFBFBF9 - F9F9F9F9F9FCFCFCFBFBFBF9F9F9F5F5F5F3F3F3F4F4F4F4F4F4F4F4F4F4F4F4 - EAEAEAE6E6E6E5E5E5E7E7E7E7E7E7E7E7E7E8E8E8E9E9E9E9E9E9E9E9E9E8E8 - E8E8E8E8E8E8E8E8E8E8ECECECECECECEEEEEEEEEEEEECECECEDEDEDEDEDEDEE - EEEEF3F3F3F5F5F5F7F7F7F7F7F7F0F0F0ECECECF9F9F9F8F8F8F7F7F7F7F7F7 - F7F7F7F4F4F4F5F5F5F9F9F9FAFAFAFDFDFDFEFEFEFAFAFAF7F7F7F8F8F8F9F9 - F9F9F9F9F8F8F8F9F9F9FFFFFFEAEAEACACACABABABAD2D2D2EFEFEFF4F4F4F7 - F7F7F8F8F8F7F7F7FBFBFBFBFBFBFCFCFCFCFCFCFBFBFBF9F9F9F8F8F8F8F8F8 - FAFAFAF9F9F9F8F8F8F8F8F8F8F8F8F8F8F8F9F9F9F7F7F7F8F8F8F7F7F7F7F7 - F7F7F7F7F8F8F8F8F8F8F8F8F8FAFAFAFCFCFCFFFFFF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFF5F5F5F8F8F8FFFFFF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FFFFFFFFFFFFFFFFFFFFFFFFFFF5F5F5F5F5F5FFFFFF80000080000080 - 0000800000800000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBECECECE9E9E9 - E9E9E9800000800000800000800000800000800000800000FEFEFEFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFEBEBEBE9E9E9ECECECEDEDEDEAEAEA80000080000080 - 0000800000800000800000800000FFFFFFFFFFFFFDFDFDF9F9F9F9F9F9FBFBFB - FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFEEEEEEECECECE7E7E7BFBFBFBFBFBFD0D0 - D0800000800000800000800000800000800000F8F8F8F8F8F8F8F8F8F5F5F5F0 - F0F0F0F0F0F4F4F4F6F6F6FEFEFEFFFFFFFBFBFBFBFBFBF8F8F8F6F6F6F7F7F7 - F7F7F7F6F6F6F5F5F5FFFFFF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFC0C0C0C5C5C5B9B9B9A2 - A2A2D1D1D1F7F7F7F7F7F7F8F8F8FBFBFBFFFFFFFFFFFFFAFAFAEBEBEBEAEAEA - E8E8E8D1D1D1A1A1A1B6B6B6CECECEE1E1E1FFFFFFFFFFFFEAEAEAEAEAEAC6C6 - C6B7B7B7DFDFDFF9F9F9FAFAFAFAFAFAFBFBFBFFFFFFFFFFFFFFFFFFFDFDFDEC - ECECD7D7D7C5C5C5B8B8B8C5C5C5D5D5D5D5D5D5D7D7D7E8E8E8F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F6F6F6F5F5F5F7F7F7F9F9F9FAFAFAFCFCFCFEFEFEFFFFFFFFFFFFFEFEFEFF - FFFFFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFF7F7F7C7C7C7BABABAE1E1E1F6F6F6F8F8F8F8F8F8F8F8F8FAFA - FAFDFDFDFFFFFFFFFFFFFFFFFFFEFEFEFCFCFCF7F7F7F8F8F8FAFAFAF9F9F9F9 - F9F9F9F9F9FBFBFBFAFAFAF9F9F9F9F9F9F8F8F8F7F7F7F5F5F5F5F5F5F4F4F4 - FFFFFFF5F5F5D6D6D6D8D8D8E9E9E9E8E8E8E7E7E7E9E9E9E7E7E7E4E4E4E4E4 - E4E6E6E6E8E8E8E8E8E8EAEAEAEAEAEAECECECEDEDEDEEEEEEF0F0F0EFEFEFF1 - F1F1F6F6F6F6F6F6F4F4F4F0F0F0E9E9E9D5D5D5C8C8C8E7E7E7F5F5F5F7F7F7 - F7F7F7F5F5F5F7F7F7F9F9F9FCFCFCFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9 - F9F7F7F7F7F7F7F7F7F7F7F7F7E6E6E6DADADAD8D8D8DEDEDEEFEFEFF7F7F7F8 - F8F8F8F8F8F8F8F8FBFBFBFCFCFCFDFDFDFDFDFDFAFAFAF8F8F8F8F8F8F8F8F8 - FAFAFAF9F9F9F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F7F7F7F7F7F7F7F7F7F5F5 - F5F7F7F7F8F8F8F8F8F8F8F8F8FCFCFCFEFEFEFFFFFFFFFFFF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFFFFFFFFF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FFFFFFFFFDFDFDFFFFFFFBFBFBFFFFFFFFFFFFFFFFFFFFFFFF80000080 - 0000800000800000800000FFFFFFFFFFFFFFFFFFFBFBFBECECECEAEAEAE9E9E9 - E9E9E9E9E9E98000008000008000008000008000008000008000008000008000 - 00FFFFFFFFFFFFECECECE9E9E9E9E9E9EAEAEA80000080000080000080000080 - 0000800000800000800000800000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF800000 - 8000008000008000008000008000008000008000008000008000008000008000 - 0080000080000080000080000080000080000080000080000080000080000080 - 0000800000800000800000800000800000800000F9F9F9F8F8F8F7F7F7F6F6F6 - F5F5F5F4F4F4F4F4F4FFFFFFFCFCFC0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFC6C6C6D7D7D7D1D1D1D0 - D0D0E7E7E7F7F7F7F7F7F7F7F7F7F9F9F9F6F6F6FFFFFFF9F9F9E9E9E9E9E9E9 - D1D1D19D9D9DB2B2B2E1E1E1F4F4F4F6F6F6FFFFFFFFFFFFEAEAEAEAEAEAC3C3 - C3CBCBCBF3F3F3FAFAFAFBFBFBFDFDFDFFFFFFFFFFFFFFFFFFEEEEEEEBEBEBDA - DADAB5B5B5BFBFBFD1D1D1E2E2E2F1F1F1F4F4F4F4F4F4F5F5F5F6F6F6F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F8F8F8F9F9 - F9F8F8F8F8F8F8F9F9F9FBFBFBFBFBFBFDFDFDFFFFFFFFFFFFFFFFFFFEFEFEFF - FFFFFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFFFFFFFFFFFF - FFFFFFFFFFFFF5F5F5C3C3C3CCCCCCF3F3F3F8F8F8F8F8F8FBFBFBFDFDFDFFFF - FFFFFFFFFEFEFEFDFDFDF8F8F8F5F5F5F3F3F3F2F2F2F1F1F1F5F5F5F8F8F8F8 - F8F8F9F9F9FBFBFBFAFAFAF9F9F9F9F9F9F9F9F9F7F7F7F7F7F7F3F3F3F1F1F1 - FFFFFFE3E3E3B0B0B0D3D3D3D7D7D7D3D3D3E4E4E4E7E7E7E6E6E6E6E6E6E6E6 - E6E7E7E7E8E8E8E8E8E8E9E9E9E9E9E9E8E8E8E9E9E9EDEDEDEDEDEDEAEAEAEC - ECECF0F0F0F4F4F4EFEFEFE9E9E9E7E7E7C3C3C3C0C0C0E4E4E4F4F4F4F7F7F7 - F8F8F8F9F9F9F8F8F8FBFBFBFFFFFFFEFEFEFBFBFBF9F9F9F9F9F9F8F8F8F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F8F8F8F9F9F9F5F5F5EDEDEDF0F0F0F7F7F7F9 - F9F9FAFAFAFAFAFAFCFCFCFCFCFCFBFBFBFAFAFAF9F9F9FAFAFAFCFCFCFBFBFB - FBFBFBF9F9F9F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F7F7 - F7F8F8F8F8F8F8F7F7F7F5F5F5F8F8F8FDFDFDFFFFFFFFFFFFEDEDED0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFFF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FFFFFFFFFFFFFFF5F5F5F4F4F4FFFFFFFFFFFFF9F9F980000080 - 0000800000800000800000E7E7E7EAEAEAECECECECECECEAEAEAEAEAEAEAEAEA - E9E9E9E9E9E9E9E9E9E9E9E98000008000008000008000008000008000008000 - 0080000080000080000080000080000080000080000080000080000080000080 - 0000800000800000800000800000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - 8000008000008000008000008000008000008000008000008000008000008000 - 0080000080000080000080000080000080000080000080000080000080000080 - 0000800000800000800000800000800000800000800000F7F7F7F6F6F6F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F5F5F5D0D0D0AFAFAF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFECECECFCFCFCF9F9F9F5 - F5F5F6F6F6F7F7F7F7F7F7F7F7F7F8F8F8F5F5F5FFFFFFF5F5F5D0D0D0B5B5B5 - 989898ADADADDFDFDFF6F6F6F7F7F7F8F8F8FFFFFFE7E7E7BEBEBEBCBCBCA4A4 - A4CBCBCBF3F3F3FAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFEAEAEAE7E7E7CB - CBCBC1C1C1E0E0E0F1F1F1F1F1F1F2F2F2F3F3F3F3F3F3F5F5F5F6F6F6F8F8F8 - F8F8F8F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F5F5F5F7F7F7F8F8F8F8F8 - F8F8F8F8F8F8F8F9F9F9F9F9F9FBFBFBFDFDFDFDFDFDFDFDFDFFFFFFFBFBFBFF - FFFFF7F7F7FFFFFFFFFFFFFFFFFFFCFCFCEAEAEAE7E7E7E9E9E9FBFBFBF9F9F9 - E6E6E6E6E6E6E6E6E6C1C1C1D0D0D0F8F8F8FAFAFAFBFBFBFFFFFFFDFDFDFCFC - FCFBFBFBF8F8F8F7F7F7F3F3F3F2F2F2F3F3F3F2F2F2ECECECF0F0F0F8F8F8F8 - F8F8F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAF9F9F9F8F8F8F7F7F7F5F5F5F3F3F3 - F1F1F1E1E1E1D2D2D2E5E5E5E5E5E5EFEFEFF7F7F7ECECECE9E9E9EBEBEBEAEA - EAE9E9E9E9E9E9E6E6E6E7E7E7E7E7E7E6E6E6E3E3E3E5E5E5D2D2D2C2C2C2C7 - C7C7DFDFDFF2F2F2ECECECE7E7E7E7E7E7D4D4D4E1E1E1F4F4F4F5F5F5F5F5F5 - F8F8F8F8F8F8F8F8F8FBFBFBFFFFFFFEFEFEFBFBFBF8F8F8F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F9F9F9F9F9F9F7F7F7F1F1F1FFFFFFFFFFFFF8 - F8F8F9F9F9FAFAFAFBFBFBFAFAFAF8F8F8F7F7F7F7F7F7F9F9F9FDFDFDFEFEFE - FDFDFDFAFAFAF8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8 - F8F8F8F8F8F8F8F5F5F5F5F5F5F9F9F9FEFEFEFFFFFFEDEDEDCFCFCF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FFFFFFFFF4F4F4E4E4E4E6E6E6E9E9E9E8E8E8E7E7E780 - 0000800000800000800000800000E7E7E7E9E9E9EAEAEAEAEAEAEAEAEAEAEAEA - E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9ECECEC8000008000008000008000008000 - 0080000080000080000080000080000080000080000080000080000080000080 - 0000800000800000800000FFFFFFFCFCFCE8E8E8F5F5F5FFFFFFFFFFFFFFFFFF - F7F7F78000008000008000008000008000008000008000008000008000008000 - 0080000080000080000080000080000080000080000080000080000080000080 - 0000800000800000800000800000800000800000800000800000F6F6F6F4F4F4 - F4F4F4F4F4F4F3F3F3F0F0F0EDEDEDD6D6D6C3C3C3CACACA0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFFFFFFFFFFF - FFFFF8F8F8F8F8F8F7F7F7F7F7F7F6F6F6F3F3F3F1F1F1F0F0F0AFAFAFACACAC - C8C8C8DFDFDFF6F6F6F9F9F9F9F9F9F8F8F8F7F7F7E4E4E4CECECECECECECFCF - CFE4E4E4F8F8F8FCFCFCFCFCFCFBFBFBFEFEFEFFFFFFFFFFFFF4F4F4DADADABC - BCBCD1D1D1EEEEEEF2F2F2F4F4F4F4F4F4F8F8F8F9F9F9FBFBFBFBFBFBFAFAFA - F8F8F8F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F5F5F5F6F6 - F6F6F6F6F7F7F7F8F8F8F9F9F9FBFBFBFCFCFCFAFAFAFCFCFCFCFCFCF8F8F8FF - FFFFFFFFFFFFFFFFFFFFFFF8F8F8E7E7E7E6E6E6E3E3E3E5E5E5EAEAEAEAEAEA - E8E8E8E9E9E9EBEBEBD7D7D7E7E7E7FCFCFCF9F9F9F8F8F8F9F9F9F8F8F8F8F8 - F8F8F8F8F6F6F6F5F5F5F3F3F3F3F3F3F4F4F4F0F0F0E8E8E8EEEEEEF8F8F8F7 - F7F7F7F7F7F8F8F8F8F8F8F9F9F9FBFBFBF9F9F9F8F8F8F8F8F8F8F8F8F7F7F7 - F5F5F5F3F3F3F4F4F4F4F4F4F4F4F4FFFFFFF1F1F1DFDFDFE9E9E9ECECECE8E8 - E8E8E8E8EAEAEAE5E5E5E5E5E5E5E5E5CDCDCDB6B6B6BCBCBCA5A5A5BBBBBBD5 - D5D5EBEBEBF3F3F3EDEDEDE6E6E6E4E4E4E1E1E1D3D3D3E5E5E5F5F5F5F6F6F6 - F7F7F7F9F9F9FBFBFBFDFDFDFEFEFEFDFDFDFAFAFAFAFAFAFCFCFCF9F9F9F7F7 - F7F7F7F7F7F7F7F5F5F5F3F3F3F5F5F5F5F5F5F2F2F2EEEEEEFFFFFFF7F7F7E6 - E6E6F9F9F9FAFAFAF9F9F9F8F8F8F7F7F7F7F7F7F7F7F7F9F9F9FBFBFBF8F8F8 - F4F4F4F5F5F5F6F6F6F8F8F8F8F8F8F9F9F9F9F9F9F9F9F9F8F8F8F8F8F8F8F8 - F8F8F8F8F8F8F8F5F5F5F7F7F7FDFDFDFFFFFFFBFBFBE9E9E9D7D7D7D1D1D100 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FFE7E7E7E7E7E7E9E9E9EAEAEAE7E7E7E6E6E6E6 - E6E6800000800000800000800000800000E9E9E9EAEAEAEAEAEAEAEAEAEAEAEA - EAEAEAE9E9E9E9E9E9E9E9E9EAEAEAEEEEEEECECECE8E8E8E9E9E98000008000 - 0080000080000080000080000080000080000080000080000080000080000080 - 0000800000800000800000EAEAEAEAEAEAE8E8E8E9E9E9EBEBEBECECECEBEBEB - EBEBEB8000008000008000008000008000008000008000008000008000008000 - 0080000080000080000080000080000080000080000080000080000080000080 - 0000800000800000800000800000800000800000800000800000800000F0F0F0 - F1F1F1F1F1F1EFEFEFEEEEEEEDEDEDEEEEEEF3F3F3F4F4F4F3F3F30000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFFFFFFFFFEB - EBEBE8E8E8F6F6F6F5F5F5F4F4F4F1F1F1EEEEEEEEEEEEEAEAEAD9D9D9E1E1E1 - F9F9F9F9F9F9FBFBFBFDFDFDFBFBFBF8F8F8F8F8F8F8F8F8F5F5F5F8F8F8FCFC - FCFCFCFCFDFDFDFCFCFCF9F9F9F8F8F8FEFEFEFFFFFFFFFFFFE8E8E8BFBFBFC5 - C5C5DCDCDCEEEEEEF3F3F3F5F5F5F8F8F8FBFBFBFCFCFCFDFDFDFBFBFBFAFAFA - F9F9F9F9F9F9F9F9F9F8F8F8F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F8F8F8FAFAFAFBFBFBFBFBFBF8F8F8FCFCFCFAFAFAF5F5F5FF - FFFFFFFFFFFFFFFFF8F8F8E6E6E6E4E4E4D0D0D0CECECEE4E4E4E8E8E8E8E8E8 - E8E8E8E8E8E8EAEAEAE8E8E8EDEDEDFFFFFFFFFFFFF5F5F5F5F5F5F8F8F8F9F9 - F9F7F7F7F5F5F5F4F4F4F4F4F4F4F4F4F3F3F3EEEEEEE9E9E9F0F0F0F8F8F8F7 - F7F7F8F8F8F8F8F8F8F8F8FAFAFAFAFAFAF8F8F8F8F8F8F9F9F9F7F7F7F7F7F7 - F6F6F6F4F4F4F4F4F4F3F3F3F5F5F5F7F7F7ECECECE8E8E8DFDFDFD2D2D2CCCC - CCCECECECCCCCCC5C5C5C2C2C2BFBFBFA1A1A1B6B6B6D1D1D1CECECEE3E3E3F9 - F9F9F9F9F9FCFCFCE7E7E7DFDFDFDFDFDFDEDEDED3D3D3E4E4E4F4F4F4F5F5F5 - F7F7F7F8F8F8F8F8F8FBFBFBFBFBFBF8F8F8F7F7F7F9F9F9FFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFF5F5F5F2F2F2F5F5F5F1F1F1EAEAEAE8E8E8F9F9F9D0D0D0D3 - D3D3F8F8F8F8F8F8F7F7F7F7F7F7F7F7F7F7F7F7F8F8F8F9F9F9FAFAFAF5F5F5 - F3F3F3F3F3F3F5F5F5F8F8F8F9F9F9FBFBFBFAFAFAF8F8F8F8F8F8F8F8F8F8F8 - F8F8F8F8F8F8F8F6F6F6FAFAFAFFFFFFFFFFFFF9F9F9F7F7F7F1F1F1F1F1F100 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FFE9E9E9E9E9E9EAEAEAE7E7E7E7E7E7E6 - E6E6800000800000800000800000800000800000EAEAEAEAEAEAEAEAEAEBEBEB - EBEBEBE9E9E9E9E9E9E9E9E9ECECECEDEDEDEAEAEAE9E9E9EAEAEAE9E9E9E7E7 - E780000080000080000080000080000080000080000080000080000080000080 - 0000800000FBFBFBE8E8E8E9E9E9E9E9E9E7E7E7E9E9E9EBEBEBEBEBEBEAEAEA - ECECECECECEC8000008000008000008000008000008000008000008000008000 - 0080000080000080000080000080000080000080000080000080000080000080 - 0000800000800000800000800000800000800000800000800000800000800000 - F1F1F1F1F1F1F0F0F0F0F0F0F1F1F1F4F4F4F5F5F5F2F2F2F2F2F2F4F4F40000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFFFFFFFFFDB - DBDBE4E4E4F3F3F3EFEFEFEDEDEDECECECEEEEEEF2F2F2F1F1F1F5F5F5FAFAFA - F9F9F9F9F9F9FCFCFCFFFFFFFCFCFCF8F8F8F8F8F8F8F8F8F7F7F7FBFBFBFCFC - FCFBFBFBFBFBFBF9F9F9F8F8F8F8F8F8FCFCFCF8F8F8F5F5F5E4E4E4D4D4D4DE - DEDEEDEDEDF3F3F3F4F4F4F5F5F5F8F8F8F8F8F8F8F8F8F9F9F9FAFAFAF9F9F9 - FAFAFAFBFBFBFCFCFCFBFBFBF9F9F9F8F8F8F7F7F7F7F7F7F8F8F8F7F7F7F7F7 - F7F5F5F5F6F6F6F8F8F8F8F8F8FAFAFAF9F9F9F8F8F8FCFCFCFAFAFAF5F5F5FF - FFFFF7F7F7F8F8F8E6E6E6E2E2E2D1D1D1A5A5A5C8C8C8D1D1D1D2D2D2E3E3E3 - E6E6E6E8E8E8E8E8E8E7E7E7EAEAEAF8F8F8E9E9E9E6E6E6F7F7F7F8F8F8F7F7 - F7F5F5F5F4F4F4F4F4F4F3F3F3F2F2F2F0F0F0EDEDEDEAEAEAF1F1F1F8F8F8F8 - F8F8F8F8F8F9F9F9FAFAFAFBFBFBF9F9F9F8F8F8F8F8F8F8F8F8F7F7F7F7F7F7 - F5F5F5F5F5F5F6F6F6F6F6F6F7F7F7F9F9F9F8F8F8F7F7F7ECECECDBDBDBD5D5 - D5D5D5D5D3D3D3D2D2D2D3D3D3D1D1D1CFCFCFE4E4E4F8F8F8F5F5F5F7F7F7F9 - F9F9FAFAFAF9F9F9FFFFFFF4F4F4E3E3E3E6E6E6E6E6E6E9E9E9F3F3F3FFFFFF - FFFFFFF4F4F4F4F4F4F7F7F7F7F7F7F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFF1F1F1EEEEEEF3F3F3F0F0F0EEEEEEF0F0F0F0F0F0E2E2E2E3 - E3E3F7F7F7F8F8F8F8F8F8F8F8F8F8F8F8F9F9F9FAFAFAFBFBFBFCFCFCF7F7F7 - F4F4F4FFFFFFFFFFFFFFFFFFFEFEFEFFFFFFFCFCFCFBFBFBF8F8F8F8F8F8F8F8 - F8F8F8F8F8F8F8F8F8F8FBFBFBFEFEFEFCFCFCF8F8F8F9F9F9F7F7F7F4F4F4F7 - F7F70000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FFE9E9E9E9E9E9E9E9E9E7E7E7E7E7E7E6 - E6E6E4E4E4E1E1E1E3E3E3E6E6E6E9E9E9EAEAEAEAEAEAEAEAEAEBEBEBEDEDED - EEEEEEECECECEAEAEAE9E9E9ECECECECECECE8E8E8E9E9E9E9E9E9E8E8E8E7E7 - E7E7E7E7E7E7E7E7E7E7800000800000800000800000800000800000F0F0F0F5 - F5F5F7F7F7FFFFFFF9F9F9E9E9E9E8E8E8E8E8E8EAEAEAEBEBEBEAEAEAEAEAEA - EAEAEAEAEAEAEBEBEBEBEBEBECECECEDEDEDECECECEAEAEAD8D8D8E6E6E6F7F7 - F7F7F7F7F7F7F7FFFFFFDEDEDED5D5D5FFFFFFD5D5D5BFBFBFE1E1E1F4F4F4F8 - F8F8FAFAFAFCFCFCFEFEFEFCFCFCFBFBFBF8F8F8F5F5F5F7F7F7F7F7F7F6F6F6 - F6F6F6F5F5F5F3F3F3F2F2F2F4F4F4F4F4F4F3F3F3F3F3F3F4F4F4F5F5F5F5F5 - F5E5E5E5E4E4E4E9E9E9EBEBEBEDEDEDFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEE5 - E5E5D7D7D7E2E2E2EDEDEDF0F0F0F1F1F1F4F4F4F8F8F8F8F8F8F8F8F8F9F9F9 - F9F9F9FAFAFAFDFDFDFFFFFFFDFDFDFAFAFAFAFAFAFAFAFAFAFAFAFBFBFBF9F9 - F9F7F7F7F5F5F5F5F5F5F5F5F5F5F5F5F7F7F7F7F7F7F5F5F5F2F2F2F0F0F0F0 - F0F0F3F3F3F7F7F7F6F6F6F6F6F6FAFAFAFBFBFBFAFAFAFCFCFCFCFCFCFBFBFB - FDFDFDFDFDFDFDFDFDFAFAFAF7F7F7F5F5F5F7F7F7F7F7F7F7F7F7F3F3F3F2F2 - F2F1F1F1F4F4F4F5F5F5F6F6F6FAFAFAF9F9F9F7F7F7FCFCFCFAFAFAF5F5F5FF - FFFFE6E6E6E4E4E4E1E1E1E1E1E1BDBDBDB9B9B9DFDFDFE5E5E5F4F4F4F7F7F7 - E9E9E9E9E9E9E9E9E9E9E9E9EAEAEAE6E6E6C9C9C9D9D9D9F5F5F5F7F7F7F4F4 - F4F2F2F2F2F2F2F2F2F2F1F1F1F1F1F1F0F0F0EDEDEDEDEDEDF3F3F3F8F8F8F8 - F8F8F8F8F8F8F8F8F9F9F9F9F9F9F8F8F8F8F8F8F8F8F8F8F8F8FFFFFFFFFFFF - FFFFFFF5F5F5F7F7F7F7F7F7F7F7F7F9F9F9F9F9F9F7F7F7F4F4F4F0F0F0EEEE - EEF0F0F0F3F3F3F4F4F4F6F6F6F7F7F7F8F8F8F8F8F8F8F8F8F7F7F7F8F8F8FC - FCFCFEFEFEFFFFFFFFFFFFFFFFFFEAEAEAEBEBEBEAEAEAEAEAEAEAEAEAFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBE7E7 - E7EBEBEBE6E6E6D6D6D6E3E3E3F3F3F3F6F6F6F5F5F5F6F6F6F8F8F8F9F9F9F6 - F6F6F7F7F7F8F8F8F8F8F8F8F8F8F9F9F9F9F9F9F8F8F8F8F8F8F7F7F7F3F3F3 - F3F3F3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBF8F8F8F8F8F8F7F7F7F7F7 - F7F8F8F8F8F8F8F9F9F9FFFFFFFFFFFFFFFFFFF8F8F8F9F9F9F5F5F5F4F4F4F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F8F8F8FFFFFFFFFFFF - EAEAEAEDEDEDEDEDEDECECECEAEAEAE9E9E9D9D9D9B5B5B5D1D1D1EDEDEDEBEB - EBEDEDEDF0F0F0F1F1F1FFFFFFFFFFFFE9E9E9E9E9E9E9E9E9E7E7E7E6E6E6E6 - E6E6E2E2E2E2E2E2E6E6E6E7E7E7E9E9E9EAEAEAEAEAEAEAEAEAEAEAEAEEEEEE - EEEEEEECECECE8E8E8E8E8E8EAEAEAE8E8E8E4E4E4E7E7E7E7E7E7E7E7E7E7E7 - E7E7E7E7E6E6E6E7E7E7E7E7E7E7E7E7D6D6D6B5B5B5D5D5D5F0F0F0F3F3F3F7 - F7F7F7F7F7FFFFFFFBFBFBEAEAEAEAEAEAEAEAEAEAEAEAEBEBEBEDEDEDEDEDED - EAEAEAEAEAEAEBEBEBEAEAEAEAEAEAEBEBEBEBEBEBEAEAEAD8D8D8C6C6C6E6E6 - E6F7F7F7F7F7F7F7F7F7E7E7E7E4E4E4F3F3F3E4E4E4E4E4E4F3F3F3F5F5F5F9 - F9F9F7F7F7F9F9F9FBFBFBFBFBFBFAFAFAF8F8F8F7F7F7F7F7F7F7F7F7F7F7F7 - F9F9F9F8F8F8F4F4F4F3F3F3F4F4F4F5F5F5F2F2F2F4F4F4F7F7F7F6F6F6F8F8 - F8F9F9F9FFFFFFFFFFFFFFFFFFECECECEFEFEFF0F0F0F0F0F0F1F1F1EAEAEAE1 - E1E1D6D6D6E3E3E3F0F0F0F4F4F4F4F4F4F6F6F6F8F8F8F8F8F8F9F9F9FBFBFB - FBFBFBFDFDFDFEFEFEFFFFFFFDFDFDF9F9F9F9F9F9FBFBFBFBFBFBF8F8F8F7F7 - F7F5F5F5F5F5F5F7F7F7F7F7F7F5F5F5F7F7F7F7F7F7F8F8F8F8F8F8F9F9F9F8 - F8F8F5F5F5F9F9F9FBFBFBFAFAFAFEFEFEFCFCFCFCFCFCFDFDFDFBFBFBFDFDFD - FFFFFFFDFDFDFAFAFAF6F6F6F2F2F2F2F2F2F5F5F5F7F7F7F4F4F4F1F1F1F1F1 - F1F3F3F3F6F6F6F8F8F8F9F9F9FCFCFCFBFBFBF8F8F8F9F9F9FFFFFFFFFFFFFF - FFFFE3E3E3DFDFDFDFDFDFCFCFCFAEAEAED1D1D1F6F6F6FFFFFFFFFFFFFFFFFF - ECECECEAEAEAE9E9E9EAEAEAEAEAEAE7E7E7CACACAD9D9D9F4F4F4F5F5F5F3F3 - F3F2F2F2F3F3F3F1F1F1F0F0F0F0F0F0EEEEEEEEEEEEF0F0F0F5F5F5F8F8F8F8 - F8F8F8F8F8F9F9F9F9F9F9F8F8F8F8F8F8F9F9F9F9F9F9F9F9F9FFFFFFFFFFFF - E7E7E7E1E1E1F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F5F5F5F3F3F3F2F2F2F3F3 - F3F5F5F5F7F7F7F7F7F7F8F8F8FBFBFBFAFAFAFBFBFBFAFAFAF8F8F8F9F9F9FC - FCFCFCFCFCFFFFFFFFFFFFFBFBFBEAEAEAEBEBEBE9E9E9E8E8E8EAEAEAF9F9F9 - F8F8F8E9E9E9EBEBEBEDEDEDDCDCDCFFFFFFFFFFFFFFFFFFFBFBFBE9E9E9E4E4 - E4E5E5E5E2E2E2D9D9D9E0E0E0F2F2F2F9F9F9F6F6F6F7F7F7F9F9F9FBFBFBFA - FAFAFCFCFCFBFBFBF8F8F8FAFAFAFBFBFBFBFBFBF9F9F9FFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFEDEDEDF0F0F0FFFFFFFFFFFFF5F5F5F6F6F6F5F5F5F7F7 - F7F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFF0F0F0EDEDEDF8F8F8F5F5F5F4F4F4F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7FFFFFFFFFFFFFFFFFF - ECECECEDEDEDEDEDEDECECECEAEAEAE9E9E9C8C8C8BFBFBFDCDCDCECECECEEEE - EEF3F3F3F7F7F7F8F8F8FFFFFFFCFCFCE8E8E8E7E7E7E9E9E9E7E7E7E6E6E6E6 - E6E6E2E2E2E6E6E6E9E9E9E8E8E8E9E9E9EAEAEAEAEAEAEAEAEAEDEDEDEFEFEF - ECECECE8E8E8E4E4E4E6E6E6E9E9E9E8E8E8E6E6E6E7E7E7E6E6E6E6E6E6E7E7 - E7E6E6E6E6E6E6E8E8E8E7E7E7E7E7E7C7C7C7C1C1C1E2E2E2F0F0F0F3F3F3F7 - F7F7F7F7F7F7F7F7FFFFFFFBFBFBEAEAEAEAEAEAEBEBEBEDEDEDF0F0F0EDEDED - EAEAEAECECECECECECEBEBEBEBEBEBECECECECECECD9D9D9B1B1B1C1C1C1E6E6 - E6F7F7F7F7F7F7F7F7F7F7F7F7F3F3F3F5F5F5F8F8F8F7F7F7F3F3F3F5F5F5F9 - F9F9F6F6F6F7F7F7FAFAFAFAFAFAF9F9F9F9F9F9F9F9F9F8F8F8F7F7F7F7F7F7 - F8F8F8F5F5F5F3F3F3F3F3F3F4F4F4F5F5F5F2F2F2F4F4F4F6F6F6F5F5F5F9F9 - F9FBFBFBFFFFFFFFFFFFFFFFFFEDEDEDF0F0F0F1F1F1EDEDEDEDEDEDE9E9E9D3 - D3D3C8C8C8C8C8C8E4E4E4F4F4F4F5F5F5F8F8F8FAFAFAFBFBFBFCFCFCFDFDFD - FDFDFDFEFEFEFEFEFEFFFFFFFDFDFDFBFBFBFCFCFCFEFEFEFBFBFBF9F9F9FAFA - FAF8F8F8F8F8F8F8F8F8F8F8F8F6F6F6F8F8F8F7F7F7FCFCFCFBFBFBFEFEFEFB - FBFBF9F9F9FDFDFDFBFBFBF8F8F8FBFBFBF9F9F9F7F7F7F8F8F8F7F7F7FCFCFC - FBFBFBF7F7F7F4F4F4F3F3F3EEEEEEF1F1F1F6F6F6F7F7F7F5F5F5F1F1F1F3F3 - F3F7F7F7F9F9F9FBFBFBFCFCFCFFFFFFFDFDFDF8F8F8FFFFFFFFFFFFFFFFFFFF - FFFFE0E0E0E2E2E2D1D1D1AEAEAEC2C2C2E6E6E6F7F7F7FFFFFFFFFFFFFBFBFB - EBEBEBEAEAEAECECECEAEAEAE9E9E9E8E8E8C6C6C6D5D5D5F4F4F4F4F4F4F4F4 - F4F4F4F4F3F3F3F0F0F0EFEFEFF0F0F0EEEEEEF1F1F1F3F3F3F7F7F7F8F8F8F9 - F9F9FFFFFFFFFFFFFFFFFFF8F8F8F9F9F9F9F9F9F7F7F7F8F8F8FFFFFFFFFFFF - D0D0D0E1E1E1F7F7F7F5F5F5F2F2F2F3F3F3F3F3F3F1F1F1F3F3F3F5F5F5F7F7 - F7F7F7F7F7F7F7F8F8F8FCFCFCFDFDFDFCFCFCFBFBFBF9F9F9FAFAFAFBFBFBF9 - F9F9F9F9F9FBFBFBF8F8F8E9E9E9E9E9E9E9E9E9E7E7E7D7D7D7C8C8C8DBDBDB - DADADAB5B5B5CACACADADADAD9D9D9FFFFFFFFFFFFEDEDEDECECECEAEAEAE6E6 - E6E5E5E5E7E7E7E7E7E7D3D3D3E3E3E3F9F9F9F8F8F8F9F9F9FBFBFBFCFCFCFC - FCFCFFFFFFFEFEFEFAFAFAFCFCFCFAFAFAF8F8F8F8F8F8FFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFCFCFCEBEBEBEAEAEAF7F7F7F7F7F7F4F4F4F7F7F7F5F5F5F9F9 - F9FEFEFEFCFCFCFFFFFFFFFFFFFCFCFCC8C8C8DFDFDFF8F8F8F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F5F5F5F6F6F6F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFFBFBFB - EEEEEEEDEDEDEAEAEAEAEAEAEAEAEAD9D9D9B2B2B2CCCCCCECECECEEEEEEF4F4 - F4F7F7F7F8F8F8F8F8F8FFFFFFFFFFFFFCFCFCEAEAEAEAEAEAE6E6E6E4E4E4E3 - E3E3E4E4E4E8E8E8E9E9E9E8E8E8EAEAEAEAEAEAEAEAEAEBEBEBEEEEEEEEEEEE - EAEAEAE6E6E6D1D1D1D4D4D4E7E7E7E7E7E7E8E8E8E9E9E9E8E8E8E7E7E7E7E7 - E7E7E7E7E7E7E7E9E9E9E8E8E8E8E8E8D7D7D7DFDFDFF0F0F0F0F0F0F3F3F3F7 - F7F7F5F5F5F7F7F7FFFFFFFFFFFFEAEAEAEAEAEAECECECEDEDEDEDEDEDEAEAEA - E7E7E7E8E8E8E9E9E9E9E9E9EBEBEBEDEDEDDADADAB2B2B2C1C1C1E6E6E6F7F7 - F7F7F7F7F8F8F8F9F9F9F7F7F7F4F4F4F6F6F6F8F8F8F5F5F5F4F4F4F7F7F7F9 - F9F9F6F6F6F7F7F7FAFAFAFAFAFAFCFCFCFAFAFAF9F9F9F7F7F7F8F8F8F8F8F8 - F7F7F7F5F5F5F4F4F4F4F4F4F4F4F4F3F3F3F3F3F3F5F5F5F7F7F7F6F6F6F9F9 - F9FBFBFBFBFBFBFDFDFDEDEDEDEDEDEDEFEFEFEDEDEDEAEAEAEAEAEAE9E9E9C1 - C1C1BABABACECECEE1E1E1F5F5F5F8F8F8FBFBFBFBFBFBFCFCFCFEFEFEFFFFFF - FEFEFEFFFFFFFFFFFFFFFFFFFDFDFDFCFCFCFCFCFCFCFCFCF9F9F9F8F8F8F7F7 - F7F7F7F7F6F6F6F7F7F7F8F8F8F8F8F8FAFAFAFBFBFBFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFAFAFAF8F8F8F5F5F5F7F7F7F9F9F9F8F8F8F8F8F8FAFAFAFBFBFB - F7F7F7F3F3F3F2F2F2F3F3F3EFEFEFF1F1F1F5F5F5F7F7F7F7F7F7F3F3F3F5F5 - F5F9F9F9FBFBFBFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBFF - FFFFE4E4E4E7E7E7D1D1D1CFCFCFF3F3F3FFFFFFFFFFFFFFFFFFFFFFFFEEEEEE - ECECECECECECEDEDEDE9E9E9E2E2E2D1D1D1ACACACD1D1D1F4F4F4F4F4F4F3F3 - F3F3F3F3F0F0F0F1F1F1F1F1F1F2F2F2F4F4F4F5F5F5F7F7F7F5F5F5F8F8F8FC - FCFCFFFFFFFFFFFFEFEFEFEAEAEAF8F8F8F8F8F8F8F8F8FFFFFFFFFFFFFFFFFF - E6E6E6CECECEE0E0E0F3F3F3F3F3F3F6F6F6F6F6F6F6F6F6F7F7F7F8F8F8F8F8 - F8F7F7F7F8F8F8FAFAFAFDFDFDFCFCFCF9F9F9F9F9F9F9F9F9FCFCFCFCFCFCFB - FBFBFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9E7E7E7D9D9D9B4B4B4C3C3C3E6E6E6 - C7C7C7C1C1C1E7E7E7F5F5F5FFFFFFFFFFFFFFFFFFECECECECECECEAEAEAE4E4 - E4E4E4E4E6E6E6E7E7E7D7D7D7FBFBFBFFFFFFFEFEFEFDFDFDFFFFFFFFFFFFFF - FFFFFFFFFFFEFEFEFBFBFBFCFCFCFAFAFAF8F8F8FFFFFFFFFFFFFFFFFFE9E9E9 - E9E9E9EBEBEBEBEBEBEAEAEAEAEAEAEAEAEAE9E9E9E9E9E9F3F3F3FEFEFEFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFEDEDEDDDDDDDE9E9E9F5F5F5F3F3F3F3F3F3F4 - F4F4F5F5F5F5F5F5F5F5F5F6F6F6FFFFFFFFFFFFFFFFFFFFFFFFFAFAFAF0F0F0 - F0F0F0EEEEEEEBEBEBEBEBEBD9D9D9B1B1B1B9B9B9DBDBDBEDEDEDF3F3F3F7F7 - F7F8F8F8F8F8F8F8F8F8FFFFFFFFFFFFFDFDFDEBEBEBE7E7E7E3E3E3E2E2E2E4 - E4E4E7E7E7E9E9E9E7E7E7E9E9E9E9E9E9E9E9E9EAEAEAEAEAEAECECECE8E8E8 - E4E4E4E2E2E2C0C0C0CFCFCFE6E6E6E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9 - E9EAEAEAE9E9E9E9E9E9E9E9E9E8E8E8E4E4E4D3D3D3E2E2E2F1F1F1F4F4F4F6 - F6F6F5F5F5F7F7F7FFFFFFFFFFFFEAEAEAEAEAEAEBEBEBECECECEBEBEBE8E8E8 - E7E7E7E7E7E7E9E9E9EAEAEAECECECEBEBEBC6C6C6C3C3C3E7E7E7F7F7F7F7F7 - F7F9F9F9F8F8F8F9F9F9F7F7F7F5F5F5F7F7F7F8F8F8F5F5F5F7F7F7F9F9F9F9 - F9F9F6F6F6F7F7F7FAFAFAFAFAFAFDFDFDFCFCFCFAFAFAF9F9F9F9F9F9F9F9F9 - F9F9F9F8F8F8F5F5F5F4F4F4F2F2F2F1F1F1F4F4F4F7F7F7F7F7F7F7F7F7FBFB - FBFBFBFBFBFBFBFCFCFCFFFFFFFFFFFFEFEFEFEEEEEEEBEBEBEBEBEBE5E5E5B5 - B5B5C2C2C2EDEDEDF3F3F3F8F8F8FBFBFBFBFBFBFBFBFBFEFEFEFFFFFFFFFFFF - FDFDFDFDFDFDFDFDFDFBFBFBFBFBFBFBFBFBFCFCFCF9F9F9F5F5F5F5F5F5F1F1 - F1F0F0F0F3F3F3F5F5F5F9F9F9FAFAFAFBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFF9F9F9F7F7F7F5F5F5F7F7F7F9F9F9F8F8F8F8F8F8F9F9F9F8F8F8F7F7F7 - F4F4F4F4F4F4F3F3F3F3F3F3EEEEEEEDEDEDF2F2F2F5F5F5F7F7F7F5F5F5F7F7 - F7FCFCFCFEFEFEFFFFFFFFFFFFFFFFFFFEFEFEFFFFFFFFFFFFFFFFFFF0F0F0FF - FFFFE8E8E8E8E8E8E0E0E0E2E2E2FFFFFFFFFFFFFFFFFFFFFFFFF9F9F9ECECEC - ECECECECECECEBEBEBE6E6E6E0E0E0C3C3C3BCBCBCE0E0E0F4F4F4F4F4F4F3F3 - F3F4F4F4F3F3F3F3F3F3F1F1F1F4F4F4F7F7F7F7F7F7F7F7F7F4F4F4F8F8F8FB - FBFBFFFFFFFFFFFFCECECED8D8D8F7F7F7F9F9F9F9F9F9FFFFFFFFFFFFFCFCFC - E6E6E6B3B3B3C8C8C8F3F3F3F6F6F6FBFBFBFBFBFBFAFAFAFAFAFAF9F9F9F9F9 - F9F8F8F8F9F9F9F8F8F8FBFBFBF9F9F9F7F7F7F5F5F5F7F7F7FCFCFCFDFDFDFF - FFFFFFFFFFFFFFFFF9F9F9FBFBFBE8E8E8C6C6C6B6B6B6C1C1C1E6E6E6F6F6F6 - E6E6E6E6E6E6F7F7F7FFFFFFFFFFFFFFFFFFFAFAFAEAEAEAEAEAEAE8E8E8E2E2 - E2E1E1E1E5E5E5E7E7E7E7E7E7FCFCFCFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFD - FDFDFFFFFFFCFCFCFBFBFBFCFCFCFBFBFBFAFAFAFFFFFFFFFFFFF8F8F8E9E9E9 - E9E9E9E9E9E9E9E9E9E9E9E9EAEAEAECECECECECECEAEAEAE1E1E1FFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFCFCFCEDEDEDDFDFDFE9E9E9F3F3F3F1F1F1F3F3F3F4 - F4F4F5F5F5F6F6F6F7F7F7F7F7F7FFFFFFFFFFFFF8F8F8EDEDEDEFEFEFF0F0F0 - EEEEEEEDEDEDECECECEBEBEBCACACABABABADADADAEDEDEDEDEDEDEEEEEEF0F0 - F0F1F1F1F5F5F5F8F8F8FFFFFFFFFFFFFCFCFCEAEAEAE6E6E6E4E4E4E6E6E6E7 - E7E7E9E9E9E9E9E9E7E7E7E6E6E6E6E6E6E9E9E9E8E8E8E7E7E7D9D9D9C8C8C8 - C5C5C5C3C3C3B0B0B0CCCCCCF0F0F0E8E8E8EAEAEAEAEAEAE9E9E9E9E9E9ECEC - ECEEEEEEEAEAEAE8E8E8E8E8E8E7E7E7E3E3E3C4C4C4D5D5D5F3F3F3F3F3F3F4 - F4F4F6F6F6F8F8F8FFFFFFFFFFFFEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE7E7E7 - E7E7E7E8E8E8E8E8E8E8E8E8EAEAEADBDBDBB6B6B6D7D7D7F8F8F8F7F7F7F8F8 - F8FAFAFAF9F9F9FBFBFBF7F7F7F4F4F4F6F6F6F8F8F8F8F8F8F7F7F7F8F8F8F8 - F8F8F5F5F5F7F7F7FAFAFAFBFBFBFEFEFEFCFCFCFBFBFBFBFBFBFCFCFCFDFDFD - FDFDFDF7F7F7F3F3F3F2F2F2F0F0F0F2F2F2F6F6F6F7F7F7F7F7F7F9F9F9FBFB - FBFCFCFCFCFCFCFFFFFFFFFFFFFFFFFFF1F1F1EFEFEFEBEBEBE9E9E9E2E2E2B7 - B7B7CACACAF4F4F4F7F7F7FAFAFAFBFBFBFBFBFBFBFBFBFEFEFEFEFEFEFEFEFE - FBFBFBF9F9F9F9F9F9F9F9F9FBFBFBFCFCFCFEFEFEFCFCFCF8F8F8F7F7F7F4F4 - F4F3F3F3F5F5F5F8F8F8FBFBFBFBFBFBFEFEFEFFFFFFFFFFFFFFFFFFFCFCFCEC - ECECECECECEAEAEAF3F3F3F5F5F5F7F7F7F5F5F5F4F4F4F4F4F4F3F3F3F2F2F2 - F2F2F2F3F3F3F0F0F0F0F0F0EAEAEAEBEBEBF2F2F2F5F5F5F7F7F7F7F7F7F7F7 - F7FBFBFBFDFDFDFFFFFFFFFFFFFEFEFEFFFFFFFFFFFFFFFFFFF1F1F1E9E9E9FF - FFFFE8E8E8E6E6E6DEDEDEE1E1E1F5F5F5F7F7F7ECECECECECECEBEBEBECECEC - EAEAEAEAEAEAE9E9E9E6E6E6E6E6E6CBCBCBD3D3D3F0F0F0F4F4F4F4F4F4F4F4 - F4F5F5F5F4F4F4F4F4F4F4F4F4F6F6F6F7F7F7F7F7F7F7F7F7F4F4F4F7F7F7F7 - F7F7FFFFFFE9E9E9BABABAD3D3D3F4F4F4F8F8F8F8F8F8F9F9F9F8F8F8D1D1D1 - B8B8B89A9A9AC9C9C9F4F4F4F7F7F7FBFBFBFCFCFCFCFCFCFBFBFBFBFBFBFBFB - FBF9F9F9F8F8F8F9F9F9FBFBFBF9F9F9F7F7F7F6F6F6F8F8F8FBFBFBFAFAFAFF - FFFFFFFFFFF8F8F8C6C6C6D4D4D4C9C9C9C5C5C5D7D7D7E6E6E6F7F7F7F8F8F8 - F8F8F8F8F8F8F8F8F8FFFFFFFFFFFFFCFCFCEDEDEDEAEAEAE9E9E9E5E5E5DFDF - DFDEDEDEE4E4E4E7E7E7E7E7E7E6E6E6E7E7E7FCFCFCECECECE9E9E9FCFCFCFB - FBFBFEFEFEFCFCFCFBFBFBFCFCFCFBFBFBFBFBFBFFFFFFFFFFFFFAFAFAEAEAEA - E9E9E9E9E9E9E9E9E9E9E9E9EAEAEAEAEAEAECECECEBEBEBE0E0E0FFFFFFFFFF - FFF0F0F0F0F0F0F1F1F1EFEFEFECECECD3D3D3DADADAF1F1F1F2F2F2F5F5F5F6 - F6F6F6F6F6F7F7F7F7F7F7F7F7F7FFFFFFFBFBFBEEEEEEEDEDEDEFEFEFEFEFEF - EDEDEDECECECECECECDCDCDCB7B7B7D0D0D0F0F0F0EFEFEFE9E9E9EFEFEFF3F3 - F3F3F3F3F6F6F6F7F7F7FFFFFFFFFFFFFCFCFCE9E9E9E5E5E5D9D9D9CCCCCCCB - CBCBDADADAE9E9E9E6E6E6E2E2E2E4E4E4E6E6E6E4E4E4D8D8D8BDBDBDC8C8C8 - D4D4D4D3D3D3D1D1D1DEDEDEEFEFEFF5F5F5E4E4E4E5E5E5EAEAEAE9E9E9ECEC - ECECECECE9E9E9E7E7E7E7E7E7E7E7E7E4E4E4D5D5D5EFEFEFFFFFFFF4F4F4F4 - F4F4F6F6F6F8F8F8FFFFFFFDFDFDEBEBEBEAEAEAEAEAEAE9E9E9E9E9E9E7E7E7 - E6E6E6E5E5E5E4E4E4E5E5E5E7E7E7CACACAC3C3C3E7E7E7F9F9F9F7F7F7F8F8 - F8F9F9F9F7F7F7F5F5F5F2F2F2F1F1F1F5F5F5F7F7F7F7F7F7F6F6F6F8F8F8F8 - F8F8F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFCFCFCFFFFFFFFFFFFFDFDFDFAFAFA - F8F8F8EDEDEDE6E6E6E9E9E9EFEFEFF4F4F4F7F7F7F7F7F7F9F9F9FAFAFAFBFB - FBFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFF0F0F0EDEDEDE9E9E9E8E8E8E5E5E5B7 - B7B7CECECEF7F7F7F8F8F8FBFBFBFBFBFBFBFBFBFCFCFCFDFDFDFDFDFDFEFEFE - FBFBFBF8F8F8F9F9F9FBFBFBFCFCFCFEFEFEFFFFFFFBFBFBF7F7F7F7F7F7F8F8 - F8F5F5F5FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCEAEAEAE9 - E9E9EAEAEAE9E9E9EAEAEAF6F6F6F5F5F5F4F4F4F4F4F4F4F4F4F4F4F4F3F3F3 - F3F3F3F3F3F3EDEDEDE9E9E9E8E8E8EFEFEFF5F5F5F7F7F7F7F7F7F7F7F7F7F7 - F7F9F9F9FCFCFCFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCEDEDEDEAEAEAFF - FFFFE9E9E9E4E4E4DFDFDFE3E3E3E9E9E9ECECECECECECECECECECECECECECEC - ECECECEAEAEAE8E8E8E6E6E6D6D6D6B8B8B8CECECEF0F0F0F7F7F7F6F6F6F4F4 - F4F4F4F4F3F3F3F5F5F5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F0F0F1F1F1F3 - F3F3F3F3F3E7E7E7D7D7D7E3E3E3F4F4F4F7F7F7F5F5F5F7F7F7F8F8F8DEDEDE - C8C8C8C9C9C9E1E1E1F7F7F7FAFAFAFDFDFDFCFCFCFCFCFCFBFBFBFCFCFCFEFE - FEFBFBFBF8F8F8F9F9F9F9F9F9F8F8F8F9F9F9F9F9F9F9F9F9F9F9F9F6F6F6FF - FFFFFDFDFDE9E9E9DADADAE7E7E7EAEAEAE9E9E9F8F8F8F9F9F9F9F9F9F8F8F8 - F8F8F8F8F8F8F8F8F8F8F8F8FFFFFFFCFCFCECECECE6E6E6E3E3E3E2E2E2DEDE - DEE1E1E1E5E5E5E6E6E6E6E6E6E4E4E4E4E4E4E6E6E6BDBDBDCFCFCFF8F8F8F9 - F9F9FBFBFBFBFBFBFDFDFDFCFCFCFCFCFCFEFEFEFFFFFFFFFFFFF9F9F9EAEAEA - EBEBEBEAEAEAE9E9E9EAEAEAEAEAEAE9E9E9EAEAEAE8E8E8E8E8E8F7F7F7F7F7 - F7EAEAEAEBEBEBECECECECECECDCDCDCBCBCBCD5D5D5F0F0F0F4F4F4F5F5F5F7 - F7F7F8F8F8F8F8F8F8F8F8F8F8F8F7F7F7F9F9F9EEEEEEEDEDEDEEEEEEEEEEEE - EDEDEDEAEAEAD9D9D9B8B8B8C3C3C3E4E4E4F4F4F4EEEEEEEFEFEFF8F8F8FBFB - FBFBFBFBF9F9F9FCFCFCFFFFFFFFFFFFF4F4F4DEDEDED0D0D0C1C1C1CBCBCBD6 - D6D6E4E4E4DADADAD4D4D4DFDFDFD7D7D7CCCCCCCCCCCCBFBFBFCCCCCCE6E6E6 - F1F1F1EFEFEFEEEEEEEEEEEEF1F1F1F6F6F6F4F4F4D9D9D9DADADAECECECEDED - EDEDEDEDE9E9E9E7E7E7E7E7E7E7E7E7E6E6E6E2E2E2F2F2F2F7F7F7FFFFFFFF - FFFFF7F7F7F9F9F9FAFAFAF9F9F9E9E9E9E6E6E6E5E5E5E6E6E6E7E7E7E8E8E8 - E8E8E8E7E7E7D9D9D9CCCCCCCCCCCCBCBCBCD5D5D5F4F4F4F8F8F8F7F7F7F7F7 - F7F7F7F7F4F4F4F3F3F3F3F3F3F4F4F4F8F8F8FBFBFBF9F9F9F6F6F6FAFAFAFE - FEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F4F4F4 - EFEFEFE4E4E4E7E7E7F1F1F1F5F5F5F7F7F7F8F8F8F9F9F9FAFAFAFBFBFBFCFC - FCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F0F0EDEDEDE7E7E7E7E7E7E4E4E4B5 - B5B5CDCDCDF8F8F8F9F9F9FBFBFBFBFBFBFCFCFCFDFDFDFDFDFDFEFEFEFEFEFE - FAFAFAF9F9F9FBFBFBFBFBFBFCFCFCFFFFFFFEFEFEF8F8F8F5F5F5F6F6F6F5F5 - F5F5F5F5FAFAFAFEFEFEFDFDFDFFFFFFFFFFFFFFFFFFFCFCFCECECECEAEAEAEA - EAEAEAEAEAEAEAEAEDEDEDEEEEEEF3F3F3EEEEEEECECECEAEAEAECECECECECEC - EFEFEFF2F2F2EAEAEAEAEAEAF0F0F0F4F4F4F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F8F8F8FBFBFBFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFFF - FFFFE5E5E5E2E2E2E1E1E1E4E4E4EAEAEAEBEBEBEBEBEBECECECECECECECECEC - ECECECEAEAEAE9E9E9D9D9D9BABABAC7C7C7E3E3E3F4F4F4FCFCFCF9F9F9F4F4 - F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9E9E9E2E2E2F4F4F4F7 - F7F7F9F9F9FAFAFAF8F8F8F7F7F7F7F7F7F7F7F7F6F6F6F8F8F8F8F8F8F3F3F3 - F4F4F4F6F6F6F7F7F7F8F8F8FBFBFBFDFDFDFDFDFDFDFDFDFDFDFDFEFEFEFEFE - FEFBFBFBF8F8F8F8F8F8F9F9F9FBFBFBFBFBFBF9F9F9F7F7F7F5F5F5F3F3F3FD - FDFDF5F5F5ECECECDEDEDED1D1D1ECECECF8F8F8F9F9F9FBFBFBFAFAFAF9F9F9 - FBFBFBFAFAFAF9F9F9F8F8F8FFFFFFEAEAEAC4C4C4D2D2D2E2E2E2CCCCCCB4B4 - B4B6B6B6CDCDCDE1E1E1CFCFCFB9B9B9BBBBBBD4D4D4D3D3D3E2E2E2F7F7F7F8 - F8F8F8F8F8FAFAFAFCFCFCFCFCFCFDFDFDFEFEFEFFFFFFFFFFFFF8F8F8EAEAEA - EAEAEAEAEAEAEBEBEBEDEDEDECECECEAEAEAE9E9E9E6E6E6D7D7D7DADADADADA - DADADADAEAEAEAEAEAEAEAEAEACACACAC1C1C1E1E1E1F3F3F3F5F5F5F7F7F7F8 - F8F8F8F8F8F8F8F8F9F9F9F8F8F8F7F7F7F7F7F7FAFAFAEFEFEFECECECEEEEEE - ECECECDADADABABABAC6C6C6E6E6E6F5F5F5F6F6F6F3F3F3F7F7F7FCFCFCFCFC - FCFCFCFCFDFDFDFFFFFFFCFCFCFFFFFFEBEBEBC6C6C6D0D0D0DCDCDCE9E9E9F3 - F3F3F3F3F3E5E5E5E1E1E1D9D9D9C1C1C1CCCCCCD9D9D9D9D9D9E6E6E6F1F1F1 - EFEFEFEFEFEFF1F1F1F1F1F1F1F1F1F5F5F5F8F8F8EAEAEAFEFEFEFFFFFFF1F1 - F1EFEFEFEAEAEAE7E7E7E7E7E7E7E7E7E4E4E4DFDFDFE4E4E4E9E9E9F8F8F8E9 - E9E9EBEBEBFBFBFBF8F8F8F8F8F8F5F5F5DBDBDBDADADAE8E8E8EBEBEBEBEBEB - E9E9E9DDDDDDC1C1C1CBCBCBDBDBDBDADADAE6E6E6F7F7F7F9F9F9F8F8F8F7F7 - F7F8F8F8F6F6F6F4F4F4F5F5F5F5F5F5F9F9F9FCFCFCF8F8F8F7F7F7F9F9F9FC - FCFCFCFCFCFCFCFCFFFFFFFFFFFFF6F6F6FFFFFFFFFFFFFCFCFCD6D6D6DFDFDF - ECECECEEEEEEF5F5F5FBFBFBFBFBFBFBFBFBFAFAFAFAFAFAFBFBFBFAFAFAFCFC - FCFDFDFDFDFDFDFEFEFEFFFFFFFFFFFFF0F0F0EBEBEBE7E7E7E7E7E7D2D2D2A5 - A5A5D5D5D5FBFBFBFAFAFAFBFBFBFCFCFCFDFDFDFDFDFDFCFCFCFDFDFDFDFDFD - FBFBFBFBFBFBFBFBFBFBFBFBFCFCFCFDFDFDFBFBFBFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCECECECEBEBEBEAEAEAEB - EBEBEBEBEBEAEAEAEDEDEDEBEBEBD9D9D9DDDDDDECECECEEEEEEF2F2F2FFFFFF - FFFFFFFFFFFFF8F8F8EEEEEEF7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F8F8F8F9F9 - F9F9F9F9FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFF8F8F8EDEDEDEFEFEFF0F0F0FF - FFFFE2E2E2E1E1E1E0E0E0E4E4E4EAEAEAEAEAEAEAEAEAECECECECECECECECEC - EAEAEAEAEAEAEBEBEBCECECECACACAE8E8E8F7F7F7F9F9F9FEFEFEFBFBFBF4F4 - F4F5F5F5FFFFFFFFFFFFFFFFFFF8F8F8EBEBEBEAEAEACCCCCCD7D7D7F9F9F9FB - FBFBFDFDFDFBFBFBF9F9F9F8F8F8F9F9F9F8F8F8F7F7F7F7F7F7F7F7F7F5F5F5 - F7F7F7F8F8F8F8F8F8F8F8F8F9F9F9FCFCFCFCFCFCFCFCFCFDFDFDFDFDFDFDFD - FDFCFCFCF9F9F9F8F8F8FBFBFBFEFEFEFCFCFCF8F8F8F3F3F3F2F2F2F1F1F1F4 - F4F4FEFEFEF6F6F6DFDFDFDCDCDCE9E9E9FAFAFAFDFDFDFDFDFDFBFBFBF9F9F9 - F9F9F9F9F9F9F8F8F8F9F9F9FBFBFBE8E8E8D3D3D3E4E4E4D5D5D5A9A9A9B5B5 - B5CACACADEDEDECFCFCFA4A4A4B5B5B5CECECEE6E6E6E8E8E8E6E6E6FFFFFFFF - FFFFFFFFFFF8F8F8FBFBFBFFFFFFFFFFFFFDFDFDFFFFFFFFFFFFFAFAFAEAEAEA - E9E9E9E7E7E7E9E9E9ECECECEBEBEBE8E8E8E9E9E9E6E6E6C3C3C3D5D5D5C7C7 - C7D7D7D7DDDDDDC9C9C9C6C6C6B2B2B2CECECEF0F0F0F4F4F4F7F7F7F8F8F8F9 - F9F9F8F8F8F8F8F8F9F9F9F8F8F8F7F7F7F7F7F7F9F9F9F7F7F7E2E2E2D9D9D9 - D3D3D3C3C3C3C8C8C8E6E6E6F7F7F7F5F5F5F7F7F7F8F8F8F9F9F9FEFEFEFDFD - FDFDFDFDFDFDFDFCFCFCF9F9F9F7F7F7EAEAEAE2E2E2ECECECF4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F3F3F3E9E9E9D9D9D9E6E6E6F2F2F2F0F0F0F0F0F0EEEEEE - F0F0F0F3F3F3F4F4F4F5F5F5F5F5F5F9F9F9FFFFFFFFFFFFFFFFFFFFFFFFEEEE - EEEBEBEBE9E9E9E7E7E7E7E7E7E7E7E7E2E2E2DFDFDFE5E5E5E9E9E9EAEAEADA - DADAE9E9E9F6F6F6F5F5F5F7F7F7F7F7F7EDEDEDECECECECECECEEEEEEECECEC - E1E1E1CACACACECECEE7E7E7F6F6F6F6F6F6F5F5F5F8F8F8F9F9F9F7F7F7FAFA - FAFBFBFBF4F4F4F4F4F4F5F5F5F4F4F4FAFAFAFBFBFBF5F5F5F3F3F3F4F4F4F7 - F7F7F7F7F7F9F9F9FFFFFFFFFFFFEDEDEDECECECECECECD9D9D9ACACACCACACA - F1F1F1F8F8F8F9F9F9FBFBFBFCFCFCFDFDFDFDFDFDFCFCFCFCFCFCFCFCFCFEFE - FEFCFCFCFBFBFBFFFFFFFFFFFFFFFFFFEDEDEDE9E9E9E6E6E6E6E6E6BDBDBDBC - BCBCE9E9E9FBFBFBFAFAFAFBFBFBFCFCFCFCFCFCFCFCFCFBFBFBFDFDFDFDFDFD - FCFCFCFDFDFDFBFBFBFBFBFBFBFBFBFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9EBEBEBEAEAEAEAEAEAEAEAEAEA - EAEAEAEAEAEAEAEAEAEAEAE8E8E8C4C4C4D0D0D0F3F3F3FFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFF3F3F3F3F3F3F7F7F7F7F7F7F8F8F8F9F9F9F9F9F9F9F9F9F9F9 - F9F8F8F8FCFCFCFFFFFFFFFFFFFFFFFFEAEAEAEAEAEAEAEAEAEBEBEBECECECFF - FFFFE6E6E6E3E3E3D3D3D3D9D9D9ECECECEAEAEAEAEAEAECECECECECECEAEAEA - EAEAEAECECECDFDFDFBFBFBFD9D9D9F5F5F5F7F7F7F8F8F8FEFEFEFBFBFBF5F5 - F5FFFFFFFFFFFFFFFFFFF8F8F8EBEBEBE8E8E8DBDBDBBCBCBCD9D9D9F9F9F9FB - FBFBFBFBFBFAFAFAFAFAFAF8F8F8F8F8F8F7F7F7F6F6F6F7F7F7F7F7F7F6F6F6 - F8F8F8F8F8F8F7F7F7F8F8F8F9F9F9FAFAFAF8F8F8F8F8F8F9F9F9FAFAFAFCFC - FCFAFAFAF8F8F8F8F8F8FAFAFAFBFBFBF9F9F9F6F6F6F3F3F3F3F3F3F3F3F3F4 - F4F4FFFFFFFFFFFFEEEEEEECECECF6F6F6F9F9F9FBFBFBFBFBFBF9F9F9F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F8F8F8F7F7F7F5F5F5F8F8F8E6E6E6D3D3D3E6E6 - E6F7F7F7F7F7F7E4E4E4D1D1D1E4E4E4F8F8F8F8F8F8FFFFFFF8F8F8F9F9F9FF - FFFFEEEEEEEEEEEEFFFFFFFFFFFFFDFDFDF8F8F8F6F6F6F5F5F5DCDCDCDCDCDC - EAEAEAE8E8E8E9E9E9EAEAEAE9E9E9E7E7E7E7E7E7D3D3D3ABABABD2D2D2E2E2 - E2E5E5E5E4E4E4CFCFCFD1D1D1D2D2D2E2E2E2F4F4F4F7F7F7F7F7F7F8F8F8F9 - F9F9F9F9F9F8F8F8F8F8F8F8F8F8F7F7F7F5F5F5F7F7F7F7F7F7E9E9E9DDDDDD - DCDCDCD9D9D9E3E3E3F4F4F4F7F7F7F8F8F8F9F9F9FAFAFAF9F9F9FBFBFBFAFA - FAFBFBFBFCFCFCFBFBFBFDFDFDFCFCFCFCFCFCFFFFFFFCFCFCF4F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4F4F4F4F4F4EFEFEFF0F0F0F1F1F1F1F1F1F1F1F1F1F1F1 - F2F2F2F4F4F4F5F5F5F8F8F8F9F9F9FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFE9E9 - E9E9E9E9E7E7E7E3E3E3E1E1E1E1E1E1DEDEDEE0E0E0E8E8E8EAEAEAE9E9E9DB - DBDBD3D3D3E6E6E6F2F2F2F7F7F7F7F7F7FCFCFCFFFFFFFFFFFFFCFCFCEDEDED - DCDCDCD6D6D6EAEAEAF8F8F8FAFAFAFAFAFAF8F8F8FBFBFBFBFBFBF9F9F9FFFF - FFFFFFFFEFEFEFF3F3F3F4F4F4F4F4F4FBFBFBFFFFFFFFFFFFFFFFFFF4F4F4F7 - F7F7F7F7F7FBFBFBFFFFFFEEEEEED7D7D7D0D0D0CCCCCCB2B2B2BABABADADADA - F4F4F4F9F9F9F9F9F9FCFCFCFDFDFDFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFE - FEFCFCFCF9F9F9FFFFFFFFFFFFFDFDFDEBEBEBE7E7E7E6E6E6D3D3D3ABABABD1 - D1D1F8F8F8F7F7F7F7F7F7FCFCFCFEFEFEFDFDFDFDFDFDFDFDFDFFFFFFFDFDFD - FDFDFDFFFFFFFBFBFBFAFAFAFCFCFCFCFCFCFFFFFFFFFFFFFDFDFDEEEEEEF0F0 - F0EEEEEEEDEDEDEEEEEEEEEEEEE9E9E9E8E8E8EAEAEAEAEAEADBDBDBCDCDCDDB - DBDBD9D9D9C8C8C8C7C7C7C9C9C9B4B4B4D3D3D3F5F5F5FFFFFFFFFFFFFFFFFF - FCFCFCECECECEAEAEAD9D9D9E7E7E7F8F8F8F9F9F9F9F9F9F8F8F8F8F8F8F7F7 - F7F7F7F7FBFBFBFFFFFFFFFFFFF9F9F9EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAFF - FFFFD3D3D3E2E2E2C7C7C7E8E8E8F9F9F9E9E9E9E9E9E9ECECECEBEBEBEAEAEA - DFDFDFD1D1D1BFBFBFCACACAE7E7E7F7F7F7F8F8F8F9F9F9FEFEFEFCFCFCFFFF - FFFFFFFFFFFFFFF5F5F5EAEAEAEAEAEAE8E8E8CCCCCCC8C8C8E7E7E7F8F8F8F9 - F9F9F9F9F9FAFAFAF9F9F9F8F8F8F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F9F9F9FBFBFBFCFCFCF9F9F9F9F9F9F8F8F8F7F7F7F8F8F8FAFAFAFBFB - FBF9F9F9F8F8F8F8F8F8F9F9F9F8F8F8F7F7F7F3F3F3F1F1F1F4F4F4F4F4F4FE - FEFEFFFFFFFFFFFFF0F0F0EDEDEDEEEEEEFFFFFFFFFFFFF7F7F7F5F5F5F6F6F6 - F9F9F9F8F8F8F6F6F6F5F5F5F8F8F8F5F5F5F5F5F5F8F8F8F7F7F7F6F6F6F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F8F8F8FAFAFAF7F7F7FFFFFFFFFFFFEAEAEAEA - EAEADADADAF6F6F6FFFFFFFFFFFFFFFFFFF4F4F4F3F3F3F3F3F3E6E6E6E6E6E6 - D5D5D5C1C1C1D6D6D6E9E9E9E8E8E8E7E7E7E3E3E3BABABABABABAE5E5E5F3F3 - F3F4F4F4F5F5F5F1F1F1F4F4F4F6F6F6F6F6F6F8F8F8F9F9F9F8F8F8F8F8F8FA - FAFAFAFAFAF8F8F8F8F8F8F8F8F8F7F7F7F6F6F6F7F7F7F8F8F8F5F5F5F4F4F4 - F3F3F3F0F0F0EFEFEFF4F4F4F7F7F7F8F8F8F9F9F9F9F9F9F9F9F9F9F9F9F9F9 - F9F9F9F9FCFCFCFDFDFDFDFDFDFDFDFDFCFCFCFFFFFFFDFDFDF5F5F5F4F4F4F4 - F4F4F4F4F4F7F7F7F5F5F5F3F3F3EFEFEFEEEEEEF1F1F1F1F1F1F2F2F2F2F2F2 - F5F5F5F6F6F6F7F7F7F9F9F9F9F9F9FBFBFBFFFFFFFFFFFFFFFFFFF2F2F2E7E7 - E7E7E7E7E6E6E6DFDFDFDFDFDFE2E2E2E2E2E2E4E4E4E9E9E9E9E9E9E6E6E6CD - CDCDCDCDCDE2E2E2F1F1F1F7F7F7F7F7F7FCFCFCFFFFFFFFFFFFFCFCFCEDEDED - DADADADEDEDEF2F2F2F7F7F7F9F9F9F8F8F8F5F5F5FAFAFAF9F9F9FEFEFEFFFF - FFF2F2F2E2E2E2F3F3F3F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFE9E9E9E5E5E5F7 - F7F7F7F7F7F9F9F9F5F5F5E9E9E9DFDFDFD9D9D9D5D5D5D1D1D1DFDFDFF1F1F1 - F8F8F8FBFBFBFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFCFCFCFBFBFBF9F9 - F9F9F9F9F8F8F8FDFDFDFCFCFCF7F7F7DADADAC8C8C8C6C6C6AFAFAFBDBDBDE4 - E4E4F8F8F8F7F7F7F7F7F7FBFBFBFBFBFBFAFAFAFDFDFDFDFDFDFDFDFDFCFCFC - FFFFFFFFFFFFFCFCFCFBFBFBFEFEFEFFFFFFFFFFFFFFFFFFF1F1F1EFEFEFEDED - EDEBEBEBE9E9E9EAEAEAE9E9E9E6E6E6D7D7D7CACACAC8C8C8B8B8B8C3C3C3DE - DEDEC2C2C2C1C1C1D3D3D3D3D3D3D2D2D2E4E4E4FFFFFFFFFFFFFFFFFFE9E9E9 - E5E5E5E3E3E3E7E7E7C4C4C4D5D5D5F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F8F8 - F8F7F7F7F9F9F9FFFFFFFFFFFFEFEFEFEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAFF - FFFFE2E2E2D6D6D6B6B6B6F5F5F5F8F8F8CBCBCBCFCFCFDFDFDFDEDEDED1D1D1 - C3C3C3CACACAD7D7D7E7E7E7F7F7F7F8F8F8F8F8F8F9F9F9FEFEFEFFFFFFFFFF - FFFFFFFFF5F5F5E9E9E9E9E9E9EAEAEAE8E8E8CACACAD5D5D5F4F4F4F8F8F8F8 - F8F8F9F9F9F9F9F9F8F8F8F7F7F7F7F7F7F7F7F7F9F9F9F8F8F8F7F7F7F7F7F7 - F7F7F7FBFBFBFCFCFCF9F9F9F7F7F7F6F6F6F5F5F5F5F5F5F7F7F7F9F9F9F9F9 - F9F9F9F9F8F8F8F8F8F8F9F9F9F9F9F9F9F9F9F6F6F6F7F7F7F7F7F7F4F4F4FF - FFFFFFFFFFFFFFFFF0F0F0EEEEEEEDEDEDF8F8F8F8F8F8FFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFBFBFBF8F8F8F8F8F8FBFBFBF8F8F8F5F5F5F7F7 - F7F7F7F7F7F7F7F7F7F7F6F6F6F7F7F7F8F8F8FFFFFFFFFFFFFFFFFFEAEAEAEA - EAEAE8E8E8F2F2F2FFFFFFF8F8F8DFDFDFE7E7E7F3F3F3F4F4F4F3F3F3F2F2F2 - E1E1E1D0D0D0E2E2E2E4E4E4E2E2E2DFDFDFDADADABABABAD1D1D1F6F6F6F4F4 - F4F7F7F7F8F8F8F7F7F7F8F8F8F8F8F8F9F9F9FAFAFAF9F9F9F9F9F9FAFAFAFB - FBFBF9F9F9F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F9F9F9FBFBFBF9F9F9 - F5F5F5F2F2F2F3F3F3F4F4F4F6F6F6F8F8F8F8F8F8F9F9F9FAFAFAF9F9F9F9F9 - F9F8F8F8F8F8F8FBFBFBFCFCFCFBFBFBF9F9F9FFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F3F3F3F5F5F5 - F7F7F7F8F8F8F8F8F8F9F9F9F8F8F8F8F8F8FFFFFFFFFFFFF3F3F3EAEAEAE7E7 - E7E6E6E6E3E3E3DEDEDEE2E2E2E7E7E7E5E5E5E3E3E3D9D9D9CDCDCDCBCBCBC1 - C1C1DADADAEEEEEEF2F2F2F7F7F7F9F9F9FEFEFEFFFFFFFFFFFFEFEFEFEDEDED - D9D9D9DDDDDDF1F1F1F3F3F3F5F5F5F3F3F3F3F3F3F7F7F7FDFDFDFFFFFFFFFF - FFE9E9E9E7E7E7F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFF8F8F8C8C8C8D5D5D5F3 - F3F3F6F6F6F9F9F9F7F7F7F4F4F4F4F4F4F4F4F4F4F4F4F1F1F1F4F4F4F8F8F8 - FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFCFCFCF9F9F9F8F8F8F8F8 - F8F8F8F8F8F8F8FDFDFDFCFCFCF7F7F7E6E6E6D3D3D3CECECECECECEE2E2E2F5 - F5F5F8F8F8F7F7F7F7F7F7F8F8F8F7F7F7F9F9F9FCFCFCFBFBFBFBFBFBFFFFFF - FFFFFFFEFEFEFBFBFBFEFEFEFCFCFCFFFFFFFFFFFFFFFFFFEFEFEFECECECE9E9 - E9EBEBEBEAEAEAE6E6E6D5D5D5C3C3C3B0B0B0C1C1C1D3D3D3D3D3D3E0E0E0EE - EEEEE3E3E3E6E6E6F5F5F5F4F4F4F3F3F3F7F7F7FFFFFFFFFFFFF9F9F9E7E7E7 - E4E4E4E4E4E4E7E7E7C4C4C4D5D5D5F9F9F9F9F9F9FBFBFBFAFAFAF8F8F8F4F4 - F4F3F3F3F6F6F6FFFFFFFFFFFFECECECEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAFF - FFFFFFFFFFFFFFFFEBEBEBFFFFFFEBEBEBC0C0C0D1D1D1E2E2E2CCCCCCCACACA - D7D7D7E4E4E4F4F4F4F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7FDFDFDFFFFFFFFFF - FFF6F6F6EBEBEBEBEBEBE9E9E9E8E8E8D7D7D7B6B6B6D4D4D4F5F5F5F8F8F8F8 - F8F8F9F9F9F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F8F8F8F7F7F7F6F6F6F7F7F7 - F9F9F9FDFDFDF9F9F9F5F5F5F3F3F3F0F0F0F3F3F3F4F4F4F5F5F5F7F7F7F8F8 - F8F9F9F9F9F9F9F9F9F9FBFBFBFBFBFBF9F9F9F7F7F7F4F4F4EDEDEDEDEDEDFF - FFFFFFFFFFF2F2F2EBEBEBEDEDEDECECECECECECECECECF9F9F9FFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFEEEEEEF9F9F9FFFFFFF8F8F8FBFBFBF8F8F8F5F5F5F7F7 - F7F9F9F9F9F9F9F8F8F8F8F8F8F9F9F9FDFDFDFFFFFFFFFFFFFDFDFDEAEAEAEA - EAEAE8E8E8E6E6E6ECECECD7D7D7D0D0D0E8E8E8F4F4F4F3F3F3F4F4F4F4F4F4 - F3F3F3F4F4F4F1F1F1F1F1F1CFCFCFCBCBCBD9D9D9C6C6C6D8D8D8F4F4F4F5F5 - F5F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFF8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F9F9F9F9F9F9F8F8F8 - F7F7F7F5F5F5F5F5F5F6F6F6F6F6F6F8F8F8F9F9F9FFFFFFFFFFFFFFFFFFF8F8 - F8F4F4F4F5F5F5F9F9F9FBFBFBFBFBFBF9F9F9FFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F4F4F4F6F6F6F8F8F8 - F8F8F8F8F8F8F9F9F9FAFAFAF8F8F8F7F7F7FFFFFFEEEEEEDCDCDCE6E6E6E2E2 - E2E2E2E2DCDCDCDADADAE1E1E1D8D8D8C9C9C9C9C9C9BDBDBDC4C4C4D0D0D0D2 - D2D2E1E1E1EDEDEDF1F1F1F7F7F7F9F9F9FAFAFAFFFFFFFFFFFFEEEEEEEDEDED - E4E4E4E9E9E9F1F1F1F4F4F4F5F5F5F0F0F0F0F0F0F5F5F5FFFFFFFFFFFFF6F6 - F6ECECECEDEDEDF8F8F8FFFFFFFFFFFFFFFFFFE7E7E7E7E7E7CBCBCBD5D5D5F1 - F1F1F4F4F4F8F8F8F8F8F8F8F8F8F8F8F8F7F7F7F5F5F5F4F4F4F7F7F7F9F9F9 - FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF8F8F8F8F8F8F8F8F8F8F8F8F8F8 - F8F8F8F8F8F8F8FDFDFDFBFBFBF7F7F7F4F4F4F2F2F2EFEFEFF1F1F1F4F4F4F7 - F7F7F8F8F8F7F7F7F7F7F7F8F8F8F8F8F8F9F9F9F8F8F8F9F9F9FDFDFDFFFFFF - FFFFFFFEFEFEFEFEFEFDFDFDFFFFFFFFFFFFFFFFFFF2F2F2ECECECE9E9E9E6E6 - E6E7E7E7E6E6E6D1D1D1B0B0B0BEBEBECCCCCCE2E2E2F3F3F3F2F2F2F4F4F4F6 - F6F6F8F8F8F7F7F7F7F7F7F7F7F7F6F6F6F8F8F8FFFFFFF8F8F8E4E4E4E5E5E5 - E3E3E3E5E5E5E9E9E9D6D6D6E7E7E7FAFAFAFBFBFBFAFAFAF7F7F7F5F5F5F1F1 - F1F2F2F2F6F6F6FFFFFFFFFFFFEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFE8E8E8CACACAEFEFEFF2F2F2E5E5E5E4E4E4 - F3F3F3F5F5F5F7F7F7F7F7F7F5F5F5F6F6F6F7F7F7F8F8F8FAFAFAFFFFFFF9F9 - F9ECECECE9E9E9E8E8E8E6E6E6D9D9D9B5B5B5BFBFBFE2E2E2F6F6F6F8F8F8F8 - F8F8F8F8F8F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F6F6F6F6F6F6F7F7F7F7F7F7 - FBFBFBFCFCFCF7F7F7F3F3F3F0F0F0EFEFEFF4F4F4F5F5F5F5F5F5F7F7F7F8F8 - F8F9F9F9FAFAFAFAFAFAFBFBFBF9F9F9F8F8F8F5F5F5EEEEEEF0F0F0FFFFFFFF - FFFFFFFFFFEDEDEDE8E8E8EAEAEAE7E7E7E7E7E7EBEBEBEDEDEDECECECEDEDED - EFEFEFF0F0F0ECECECDEDEDEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF5F5 - F5F8F8F8F8F8F8F7F7F7F8F8F8FBFBFBFFFFFFFFFFFFFCFCFCECECECEAEAEAEA - EAEAE8E8E8EAEAEAF0F0F0D4D4D4D9D9D9F4F4F4F4F4F4F3F3F3F4F4F4F4F4F4 - F3F3F3F1F1F1F3F3F3F7F7F7E6E6E6E1E1E1D9D9D9C1C1C1D8D8D8F1F1F1F6F6 - F6FCFCFCFDFDFDFDFDFDFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFEFEFEF9F9F9F8F8F8F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F8F8F8F8F8F8 - F5F5F5F4F4F4F5F5F5F6F6F6F6F6F6F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFF7F7 - F7F3F3F3F7F7F7FAFAFAFCFCFCFBFBFBFBFBFBFFFFFFFFFFFFFFFFFFFFFFFFE6 - E6E6E6E6E6E6E6E6E7E7E7E7E7E7E7E7E7EAEAEAEAEAEAD9D9D9E8E8E8F8F8F8 - F8F8F8F9F9F9FBFBFBFBFBFBF8F8F8F7F7F7F8F8F8E9E9E9E7E7E7D4D4D4BDBD - BDBCBCBCBABABAC0C0C0C8C8C8BABABAC3C3C3D2D2D2D2D2D2DFDFDFEEEEEEED - EDEDEDEDEDEEEEEEEFEFEFF3F3F3F5F5F5F7F7F7FFFFFFFFFFFFECECECEAEAEA - ECECECDFDFDFE5E5E5EFEFEFEEEEEEE9E9E9EEEEEEF4F4F4FFFFFFFDFDFDEDED - EDECECECEDEDEDEEEEEEFFFFFFFFFFFFF2F2F2E7E7E7E7E7E7DADADAE2E2E2EC - ECECEEEEEEF5F5F5F7F7F7F7F7F7F7F7F7FFFFFFFFFFFFF8F8F8F7F7F7F9F9F9 - FBFBFBFBFBFBFDFDFDFFFFFFFFFFFFFDFDFDF9F9F9F8F8F8F7F7F7F6F6F6F5F5 - F5F6F6F6F8F8F8FCFCFCF9F9F9F7F7F7F6F6F6F5F5F5F5F5F5F6F6F6F7F7F7F7 - F7F7F8F8F8F7F7F7F8F8F8F8F8F8F8F8F8F8F8F8F7F7F7FBFBFBFEFEFEFFFFFF - FFFFFFFDFDFDFCFCFCF9F9F9FFFFFFFFFFFFFFFFFFECECECE8E8E8E5E5E5E4E4 - E4E5E5E5DEDEDEBBBBBBBFBFBFE1E1E1EFEFEFF4F4F4F4F4F4F4F4F4F7F7F7F8 - F8F8F8F8F8F7F7F7F8F8F8F8F8F8F8F8F8FAFAFAFFFFFFFFFFFFF6F6F6E6E6E6 - E5E5E5E7E7E7E9E9E9E7E7E7DBDBDBEBEBEBF9F9F9FAFAFAF8F8F8F6F6F6F3F3 - F3F7F7F7FCFCFCFFFFFFFFFFFFEDEDEDEBEBEBEAEAEAE9E9E9EAEAEAEAEAEAFF - FFFFFFFFFFFFFFFFF1F1F1FEFEFECBCBCBC6C6C6F4F4F4F7F7F7F7F7F7F7F7F7 - F8F8F8FAFAFAFFFFFFFFFFFFFFFFFFF7F7F7F7F7F7F5F5F5F5F5F5FAFAFAFFFF - FFF7F7F7EBEBEBEAEAEAE9E9E9C7C7C7BFBFBFE2E2E2F5F5F5F8F8F8F8F8F8F9 - F9F9F8F8F8F8F8F8F8F8F8F7F7F7F7F7F7F5F5F5F7F7F7F8F8F8FCFCFCFBFBFB - FBFBFBF9F9F9F3F3F3EEEEEEEFEFEFF3F3F3F5F5F5F4F4F4F5F5F5F7F7F7F7F7 - F7F9F9F9F9F9F9F8F8F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFEFEFEEDEDEDE9E9E9E9E9E9E6E6E6E7E7E7EAEAEAECECECEDEDEDEDEDED - EEEEEEEDEDEDEBEBEBEBEBEBF8F8F8F8F8F8F8F8F8FFFFFFFFFFFFE6E6E6E6E6 - E6F8F8F8F8F8F8F8F8F8F9F9F9FBFBFBFDFDFDF7F7F7FFFFFFFBFBFBE7E7E7E8 - E8E8E7E7E7EBEBEBEEEEEECCCCCCD5D5D5F4F4F4F3F3F3F2F2F2F4F4F4F3F3F3 - F1F1F1F3F3F3F6F6F6FAFAFAF9F9F9F7F7F7EAEAEADCDCDCE6E6E6F3F3F3F9F9 - F9FEFEFEFDFDFDFBFBFBFFFFFFFFFFFFFFFFFFF8F8F8EAEAEAE9E9E9EAEAEAED - EDEDEDEDEDE9E9E9F7F7F7F7F7F7F6F6F6F7F7F7F7F7F7F9F9F9FBFBFBF8F8F8 - F7F7F7F5F5F5F6F6F6F4F4F4F5F5F5F8F8F8FFFFFFFFFFFFFFFFFFE9E9E9CACA - CADADADAF5F5F5F9F9F9FBFBFBFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4 - E4E4E1E1E1E3E3E3E5E5E5E4E4E4E3E3E3E6E6E6E7E7E7D9D9D9E8E8E8F8F8F8 - F9F9F9FBFBFBFAFAFAFAFAFAF8F8F8F7F7F7F7F7F7F7F7F7F5F5F5E5E5E5D2D2 - D2D1D1D1D1D1D1D5D5D5D8D8D8D7D7D7E2E2E2F0F0F0F0F0F0F3F3F3F6F6F6F5 - F5F5F6F6F6F6F6F6F5F5F5F5F5F5F7F7F7F4F4F4FFFFFFFFFFFFECECECEAEAEA - EAEAEACECECED3D3D3E9E9E9ECECECEBEBEBF0F0F0FFFFFFFFFFFFFCFCFCEDED - EDEDEDEDEEEEEEF1F1F1FFFFFFFFFFFFEEEEEEE7E7E7E7E7E7E4E4E4D5D5D5DA - DADAECECECF4F4F4F5F5F5F5F5F5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7 - F9F9F9FAFAFAFDFDFDFDFDFDFBFBFBFAFAFAF8F8F8F8F8F8F5F5F5F3F3F3F4F4 - F4F5F5F5F8F8F8F9F9F9F9F9F9F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F5F5F5F6F6F6F7F7F7F7F7F7F8F8F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFF9F9F9F6F6F6F5F5F5FFFFFFFFFFFFE9E9E9E5E5E5E3E3E3E0E0E0E3E3 - E3E2E2E2DCDCDCBFBFBFD4D4D4F1F1F1F1F1F1F4F4F4F4F4F4F6F6F6F8F8F8F8 - F8F8F8F8F8F8F8F8F8F8F8F8F8F8FBFBFBFFFFFFFFFFFFFFFFFFF9F9F9E9E9E9 - E6E6E6E4E4E4E7E7E7E8E8E8DADADAE6E6E6F9F9F9FAFAFAF8F8F8F7F7F7F8F8 - F8FFFFFFFFFFFFFFFFFFFFFFFFF0F0F0ECECECEAEAEAECECECEAEAEAE9E9E9FF - FFFFFFFFFFFFFFFFE7E7E7E6E6E6C6C6C6D7D7D7F7F7F7F9F9F9F9F9F9FAFAFA - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBF5F5F5F5F5F5F7F7F7FCFCFCFFFF - FFFFFFFFEEEEEEEDEDEDEBEBEBC6C6C6D3D3D3F7F7F7F9F9F9F9F9F9FBFBFBFB - FBFBF8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F7F7F7F8F8F8F9F9F9FFFFFFFFFFFF - F7F7F7F5F5F5EEEEEEF0F0F0F4F4F4F5F5F5F4F4F4F5F5F5F7F7F7F8F8F8F9F9 - F9FAFAFAFAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFF4F4F4EEEEEEEAEAEAE9E9E9E8E8E8E6E6E6E8E8E8ECECECEBEBEBECECEC - EDEDEDEDEDEDEBEBEBEAEAEAEBEBEBECECECECECECEBEBEBECECECDDDDDDE9E9 - E9F9F9F9FAFAFAFBFBFBFBFBFBFDFDFDFCFCFCF8F8F8FFFFFFE7E7E7BDBDBDC1 - C1C1D5D5D5EDEDEDEEEEEEDADADAE4E4E4F4F4F4F1F1F1F3F3F3F6F6F6F4F4F4 - F3F3F3F6F6F6F9F9F9FBFBFBFAFAFAF7F7F7F7F7F7F7F7F7F5F5F5F6F6F6F9F9 - F9FBFBFBF9F9F9F9F9F9FFFFFFFFFFFFFFFFFFEAEAEAECECECEAEAEAECECECEE - EEEEEBEBEBE6E6E6D4D4D4E6E6E6F8F8F8FAFAFAFAFAFAFCFCFCFBFBFBF8F8F8 - F7F7F7F7F7F7F6F6F6F4F4F4F5F5F5F8F8F8FFFFFFFFFFFFFFFFFFE4E4E4AAAA - AAC1C1C1F3F3F3F6F6F6F9F9F9FCFCFCFFFFFFFDFDFDFFFFFFFFFFFFF6F6F6E6 - E6E6E5E5E5E6E6E6E6E6E6E4E4E4E6E6E6E7E7E7E7E7E7EAEAEAEAEAEAFFFFFF - FFFFFFFAFAFAF9F9F9FAFAFAF8F8F8F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F6F6 - F6F7F7F7F6F6F6F5F5F5F6F6F6F6F6F6F6F6F6F7F7F7F7F7F7F8F8F8F7F7F7F6 - F6F6F8F8F8F9F9F9F9F9F9F8F8F8F6F6F6F4F4F4FFFFFFFFFFFFECECECEAEAEA - EAEAEACACACAD3D3D3EEEEEEF0F0F0F0F0F0F6F6F6FFFFFFFFFFFFF7F7F7EFEF - EFF0F0F0F0F0F0F0F0F0F0F0F0EFEFEFECECECE5E5E5E2E2E2DEDEDEC9C9C9CF - CFCFEDEDEDF5F5F5F5F5F5FFFFFFFFFFFFFFFFFFFAFAFAF8F8F8F8F8F8F7F7F7 - F8F8F8F8F8F8FBFBFBF9F9F9F5F5F5F5F5F5F5F5F5F2F2F2F0F0F0F2F2F2F4F4 - F4F9F9F9FBFBFBFAFAFAFAFAFAF9F9F9F8F8F8F7F7F7F7F7F7F7F7F7F8F8F8F8 - F8F8F7F7F7F9F9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FBFBFBF5F5F5F4F4F4F3F3F3FFFFFFF9F9F9E5E5E5E2E2E2E0E0E0E0E0E0E1E1 - E1DEDEDED9D9D9C2C2C2D5D5D5F0F0F0F1F1F1F3F3F3F5F5F5F6F6F6F7F7F7F8 - F8F8F8F8F8F8F8F8F8F8F8F7F7F7F9F9F9FFFFFFF9F9F9D9D9D9D7D7D7E6E6E6 - E6E6E6E6E6E6E8E8E8EAEAEAE9E9E9EAEAEAFFFFFFFFFFFFFFFFFFFEFEFEFFFF - FFFFFFFFFFFFFFFFFFFFFBFBFBEEEEEEECECECECECECECECECEAEAEAE7E7E7FF - FFFFFFFFFFFFFFFFE5E5E5E3E3E3D9D9D9DCDCDCF9F9F9FEFEFEFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFF9F9F9EAEAEAD7D7D7E2E2E2F7F7F7F9F9F9FBFBFBFFFF - FFFFFFFFEFEFEFEEEEEEECECECDADADAE8E8E8F8F8F8F8F8F8F8F8F8FCFCFCFB - FBFBF8F8F8F8F8F8F8F8F8F8F8F8F8F8F8FFFFFFFFFFFFFFFFFFFFFFFFFBFBFB - E6E6E6F4F4F4F2F2F2F3F3F3F4F4F4F3F3F3F4F4F4F6F6F6F8F8F8FAFAFAFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDEDEDEDEDEDEDEDEDEDF0F0F0F3F3F3F5 - F5F5F1F1F1ECECECE9E9E9E8E8E8E7E7E7E6E6E6E7E7E7EAEAEAEAEAEAECECEC - EDEDEDEDEDEDEAEAEAE9E9E9ECECECECECECECECECEAEAEAECECECEDEDEDEDED - EDFAFAFAFCFCFCFEFEFEFEFEFEFCFCFCFBFBFBF9F9F9F7F7F7E1E1E1CFCFCFD7 - D7D7F8F8F8FFFFFFF3F3F3EBEBEBE9E9E9FFFFFFFFFFFFF4F4F4F5F5F5F2F2F2 - F5F5F5F8F8F8F9F9F9FBFBFBF9F9F9F7F7F7F7F7F7F7F7F7F5F5F5F5F5F5F7F7 - F7F8F8F8F9F9F9FBFBFBFFFFFFFFFFFFFFFFFFEBEBEBEDEDEDECECECEDEDEDED - EDEDE9E9E9E6E6E6BEBEBECFCFCFF7F7F7F9F9F9FAFAFAFBFBFBF9F9F9F7F7F7 - F7F7F7F7F7F7F4F4F4F4F4F4F6F6F6F8F8F8FFFFFFFFFFFFE2E2E2C5C5C58686 - 86BFBFBFF2F2F2F6F6F6FBFBFBFDFDFDFEFEFEFAFAFAFFFFFFFFFFFFE9E9E9E8 - E8E8E7E7E7E7E7E7E7E7E7E8E8E8E8E8E8E7E7E7E7E7E7EAEAEAE9E9E9FBFBFB - FDFDFDF8F8F8F8F8F8F9F9F9F8F8F8F7F7F7F7F7F7F4F4F4F1F1F1F3F3F3F5F5 - F5F7F7F7F7F7F7F8F8F8F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F8F8F8F7F7F7F7 - F7F7F9F9F9F9F9F9F9F9F9F8F8F8F9F9F9FBFBFBFFFFFFFFFFFFFCFCFCEAEAEA - EAEAEAC8C8C8D0D0D0EFEFEFF1F1F1F0F0F0FFFFFFFFFFFFFFFFFFF0F0F0EEEE - EEEEEEEEEEEEEEEEEEEEEFEFEFEFEFEFECECECE6E6E6E4E4E4E3E3E3DADADAE1 - E1E1F1F1F1F5F5F5F5F5F5FFFFFFFFFFFFFAFAFAE7E7E7E7E7E7E7E7E7E7E7E7 - F5F5F5F8F8F8FBFBFBF8F8F8F5F5F5F5F5F5F5F5F5F1F1F1EFEFEFF4F4F4F9F9 - F9FEFEFEFDFDFDFCFCFCFCFCFCFCFCFCF9F9F9F7F7F7F8F8F8FBFBFBFBFBFBFB - FBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDEEEEEEEEEEEEEEEEEE - DFDFDFE7E7E7F3F3F3F0F0F0F0F0F0F2F2F2E4E4E4E1E1E1E0E0E0DEDEDEDCDC - DCD9D9D9CBCBCBB6B6B6D5D5D5F1F1F1F3F3F3F3F3F3F5F5F5F7F7F7F7F7F7F8 - F8F8F8F8F8F8F8F8F8F8F8F7F7F7FFFFFFFFFFFFFFFFFFF9F9F9FFFFFFE9E9E9 - C3C3C3C2C2C2D7D7D7ECECECEBEBEBE6E6E6F5F5F5FFFFFFFFFFFFF7F7F7FFFF - FFFFFFFFF6F6F6ECECECEEEEEEEDEDEDECECECEAEAEAEAEAEAEBEBEBEAEAEAFF - FFFFE6E6E6E5E5E5E4E4E4E4E4E4DADADADEDEDED7D7D7EAEAEAFFFFFFFFFFFF - FFFFFFFEFEFEEDEDEDE9E9E9E6E6E6C5C5C5D4D4D4F8F8F8F9F9F9FBFBFBFFFF - FFFFFFFFF0F0F0EEEEEEEEEEEEF0F0F0DDDDDDE9E9E9FAFAFAFBFBFBFDFDFDFB - FBFBF8F8F8F8F8F8F8F8F8F8F8F8F9F9F9FFFFFFFFFFFFFFFFFFFFFFFFEDEDED - E4E4E4F4F4F4F5F5F5F2F2F2F3F3F3F5F5F5F5F5F5F8F8F8FFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFBFBFBECECECECECECEDEDEDF0F0F0F1F1F1F3F3F3EF - EFEFEAEAEAE7E7E7E7E7E7E7E7E7E6E6E6E7E7E7E6E6E6E7E7E7DCDCDCDEDEDE - E9E9E9EBEBEBEAEAEAEBEBEBECECECECECECECECECECECECECECECF0F0F0F4F4 - F4E4E4E4F1F1F1FFFFFFFCFCFCF9F9F9F9F9F9F8F8F8F6F6F6F6F6F6FAFAFAFF - FFFFFFFFFFFFFFFFF2F2F2E9E9E9E8E8E8F5F5F5F7F7F7F6F6F6F5F5F5F5F5F5 - F6F6F6F9F9F9FBFBFBFBFBFBF8F8F8F7F7F7F7F7F7F6F6F6F4F4F4F5F5F5F7F7 - F7F8F8F8F8F8F8FAFAFAFFFFFFFFFFFFFBFBFBEAEAEAECECECEBEBEBE9E9E9E9 - E9E9E7E7E7D4D4D4A7A7A7CDCDCDF7F7F7F9F9F9FAFAFAF9F9F9F8F8F8F7F7F7 - F7F7F7F6F6F6F4F4F4F4F4F4F5F5F5F7F7F7F8F8F8F8F8F8CCCCCC919191A7A7 - A7D9D9D9F4F4F4FAFAFAFDFDFDFCFCFCFBFBFBF9F9F9FFFFFFFFFFFFEAEAEAE9 - E9E9E9E9E9E8E8E8E9E9E9EAEAEAEAEAEAE9E9E9E9E9E9EAEAEAE9E9E9ECECEC - ECECECE9E9E9FFFFFFFFFFFFFFFFFFF9F9F9F7F7F7F1F1F1F3F3F3FAFAFAF9F9 - F9F9F9F9F9F9F9F8F8F8F8F8F8F8F8F8F8F8F8FBFBFBFAFAFAF7F7F7F7F7F7F8 - F8F8F9F9F9FAFAFAFAFAFAF9F9F9FBFBFBFEFEFEFFFFFFFFFFFFFFFFFFEAEAEA - D7D7D7AFAFAFCFCFCFF1F1F1F3F3F3F3F3F3FFFFFFFFFFFFFFFFFFF3F3F3F0F0 - F0EEEEEEF1F1F1F2F2F2F0F0F0EDEDEDEBEBEBE7E7E7E6E6E6E7E7E7E7E7E7E6 - E6E6F7F7F7FCFCFCFFFFFFFFFFFFFFFFFFE8E8E8E7E7E7E7E7E7E6E6E6E5E5E5 - D5D5D5E6E6E6F8F8F8F7F7F7F5F5F5F5F5F5F5F5F5F3F3F3F2F2F2F7F7F7FBFB - FBFDFDFDFEFEFEFEFEFEFEFEFEFDFDFDFBFBFBFBFBFBFBFBFBFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFBFBFBEDEDEDECECECEBEBEBEBEBEBEBEBEBEBEBEB - D0D0D0D7D7D7EDEDEDEEEEEEEEEEEEF3F3F3F2F2F2CECECEB7B7B7B7B7B7CBCB - CBDBDBDBC2C2C2C5C5C5E4E4E4F3F3F3F3F3F3F3F3F3F5F5F5F7F7F7F7F7F7F8 - F8F8F8F8F8F8F8F8F8F8F8F3F3F3FFFFFFFFFFFFFFFFFFFEFEFEEEEEEEC7C7C7 - C1C1C1D2D2D2FAFAFAFDFDFDE9E9E9E1E1E1E3E3E3E8E8E8E7E7E7E7E7E7F4F4 - F4F7F7F7EDEDEDEEEEEEEEEEEEEDEDEDECECECDCDCDCD1D1D1D1D1D1D0D0D0FF - FFFFE3E3E3E2E2E2E4E4E4E0E0E0D7D7D7DEDEDED3D3D3F7F7F7FFFFFFFFFFFF - EFEFEFEEEEEEEDEDEDECECECEAEAEACCCCCCD9D9D9F8F8F8FBFBFBFFFFFFFFFF - FFFFFFFFF1F1F1F0F0F0F1F1F1F3F3F3DEDEDEEAEAEAFBFBFBFBFBFBFDFDFDFB - FBFBF8F8F8F8F8F8F8F8F8F8F8F8FFFFFFFFFFFFFFFFFFEBEBEBECECECEAEAEA - E8E8E8F4F4F4F4F4F4F3F3F3F6F6F6F8F8F8F8F8F8FFFFFFFFFFFFFFFFFFFFFF - FFFCFCFCEBEBEBEAEAEAEAEAEAEAEAEAECECECF0F0F0F1F1F1EDEDEDECECECE9 - E9E9E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E7E7E7E4E4E4D7D7D7BEBEBED9D9D9 - EBEBEBECECECEBEBEBEAEAEAECECECECECECEEEEEEEFEFEFEFEFEFF5F5F5F8F8 - F8E6E6E6EEEEEEFCFCFCF9F9F9F8F8F8F9F9F9F9F9F9F8F8F8F8F8F8FEFEFEFF - FFFFFFFFFFFFFFFFF0F0F0E6E6E6E2E2E2E4E4E4E7E7E7EAEAEAF7F7F7F7F7F7 - F8F8F8FAFAFAFCFCFCF9F9F9F7F7F7F7F7F7F7F7F7F5F5F5F5F5F5F7F7F7F7F7 - F7F7F7F7F7F7F7FBFBFBFFFFFFFFFFFFECECECE9E9E9EBEBEBEBEBEBE9E9E9E9 - E9E9E7E7E7C1C1C1B8B8B8E2E2E2F8F8F8F8F8F8F8F8F8F8F8F8F7F7F7F7F7F7 - F7F7F7F7F7F7F6F6F6F7F7F7F8F8F8F8F8F8F9F9F9F9F9F9E1E1E1C8C8C8DFDF - DFF5F5F5F9F9F9FDFDFDFCFCFCF9F9F9F8F8F8FAFAFAFFFFFFFFFFFFECECECEA - EAEAE9E9E9E9E9E9EAEAEAECECECECECECEAEAEAECECECEEEEEEEEEEEEEEEEEE - ECECECE9E9E9FCFCFCFFFFFFFDFDFDFFFFFFFFFFFFF1F1F1F9F9F9FFFFFFFCFC - FCFAFAFAF9F9F9F8F8F8F7F7F7F9F9F9FCFCFCFEFEFEFAFAFAF8F8F8F9F9F9F8 - F8F8FBFBFBFBFBFBF9F9F9F9F9F9FBFBFBFFFFFFFFFFFFFFFFFFFCFCFCD8D8D8 - AEAEAEBFBFBFE5E5E5F7F7F7F7F7F7FFFFFFFFFFFFFFFFFFF5F5F5F0F0F0EDED - EDF0F0F0F2F2F2EEEEEEE9E9E9E9E9E9E9E9E9E5E5E5E4E4E4E7E7E7E6E6E6E2 - E2E2EEEEEEE9E9E9FFFFFFFFFFFFFFFFFFE7E7E7E7E7E7E7E7E7E6E6E6D2D2D2 - AEAEAED3D3D3F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F4F4F4F7F7F7FBFB - FBFCFCFCFEFEFEFEFEFEFDFDFDFEFEFEFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFF9F9F9EAEAEAE8E8E8E9E9E9EAEAEAEAEAEAEAEAEAEBEBEBEAEAEA - D0D0D0D4D4D4EDEDEDF2F2F2F4F4F4F5F5F5F4F4F4E0E0E0CDCDCDD0D0D0EBEB - EBEEEEEECACACAD9D9D9F1F1F1F3F3F3F3F3F3F4F4F4F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F4F4F4F0F0F0EDEDEDFFFFFFECECECD9D9D9CACACAC3C3C3D4D4D4 - E6E6E6F6F6F6FFFFFFE7E7E7CECECEDBDBDBE1E1E1D5D5D5D6D6D6E7E7E7EBEB - EBEDEDEDEEEEEEEEEEEEEDEDEDECECECECECECCDCDCDC9C9C9D8D8D8D6D6D6FF - FFFFE2E2E2E4E4E4E5E5E5DDDDDDDCDCDCE4E4E4E7E7E7FCFCFCFFFFFFFDFDFD - EEEEEEEDEDEDECECECECECECDEDEDEC0C0C0DBDBDBF8F8F8FBFBFBFFFFFFFFFF - FFFFFFFFF1F1F1F0F0F0F2F2F2F1F1F1EEEEEED9D9D9E9E9E9FCFCFCFDFDFDFB - FBFBF8F8F8F8F8F8F8F8F8FBFBFBFFFFFFFFFFFFFCFCFCEAEAEAEAEAEAE9E9E9 - D8D8D8C4C4C4E1E1E1F5F5F5F8F8F8F8F8F8F8F8F8FFFFFFFFFFFFFFFFFFEEEE - EEECECECEAEAEAEAEAEAEAEAEAEBEBEBEEEEEEF0F0F0EDEDEDEAEAEAECECECE9 - E9E9E6E6E6E4E4E4E2E2E2E4E4E4E6E6E6E7E7E7D5D5D5B6B6B6C7C7C7E8E8E8 - F5F5F5EBEBEBEAEAEAE9E9E9E9E9E9ECECECEDEDEDEEEEEEEEEEEEF3F3F3F5F5 - F5EFEFEFDADADAE7E7E7F7F7F7F7F7F7F8F8F8F7F7F7F8F8F8F8F8F8FCFCFCFF - FFFFFFFFFFFFFFFFFDFDFDE6E6E6E5E5E5E6E6E6E9E9E9E9E9E9EAEAEAF7F7F7 - F7F7F7FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7F6F6F6F7F7F7F7F7 - F7F7F7F7F8F8F8FFFFFFFFFFFFFFFFFFECECECEAEAEAEAEAEAEAEAEAE8E8E8E7 - E7E7E6E6E6C0C0C0CECECEF4F4F4F8F8F8F7F7F7F8F8F8F8F8F8F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F8F8F8F9F9F9F9F9F9F7F7F7F5F5F5F9F9 - F9F9F9F9F9F9F9FBFBFBF9F9F9F8F8F8F8F8F8FCFCFCFFFFFFFFFFFFEFEFEFEB - EBEBEAEAEAEAEAEAEAEAEAEBEBEBECECECECECECEDEDEDEDEDEDECECECECECEC - E6E6E6E5E5E5E8E8E8E9E9E9EAEAEAF9F9F9F9F9F9F1F1F1F5F5F5FBFBFBF8F8 - F8F8F8F8FAFAFAFCFCFCFFFFFFFFFFFFFDFDFDFBFBFBF8F8F8F6F6F6F8F8F8F8 - F8F8F9F9F9F9F9F9FBFBFBFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFD7D7D7ACACAC - BBBBBBE2E2E2F4F4F4F5F5F5F7F7F7FFFFFFFFFFFFFFFFFFEBEBEBE8E8E8E8E8 - E8EAEAEAECECECE9E9E9E7E7E7E9E9E9E9E9E9E6E6E6E4E4E4E2E2E2E1E1E1E2 - E2E2E9E9E9E1E1E1FFFFFFFFFFFFF3F3F3E7E7E7E7E7E7E6E6E6D1D1D1AAAAAA - BCBCBCE4E4E4F5F5F5F5F5F5F6F6F6F6F6F6F5F5F5F5F5F5F4F4F4F5F5F5F7F7 - F7FCFCFCFEFEFEFDFDFDFDFDFDFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFAFAFAED - EDEDECECECEAEAEAE9E9E9EAEAEAEAEAEAEBEBEBECECECEDEDEDEDEDEDEBEBEB - CECECED2D2D2F0F0F0F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7FFFF - FFFFFFFFD0D0D0DBDBDBF2F2F2F4F4F4F5F5F5F7F7F7F7F7F7F7F7F7F7F7F7F6 - F6F6F3F3F3EDEDEDF0F0F0F3F3F3F7F7F7EDEDEDFBFBFBEDEDEDEAEAEAF9F9F9 - F7F7F7F6F6F6F7F7F7E2E2E2DDDDDDCECECEC1C1C1B2B2B2D5D5D5DCDCDCDCDC - DCEBEBEBEDEDEDECECECECECECEAEAEAD9D9D9B5B5B5D3D3D3EFEFEFF0F0F0FF - FFFFE6E6E6E7E7E7E3E3E3DBDBDBE0E0E0E6E6E6D6D6D6CCCCCCD2D2D2D4D4D4 - D7D7D7D8D8D8D5D5D5D2D2D2C4C4C4CCCCCCE9E9E9F8F8F8F8F8F8FBFBFBFFFF - FFFFFFFFEEEEEEEEEEEEEEEEEEEDEDEDECECECD7D7D7E7E7E7FBFBFBFBFBFBF9 - F9F9F8F8F8F8F8F8F9F9F9FFFFFFFFFFFFFFFFFFEBEBEBEAEAEAEBEBEBE9E9E9 - C8C8C8BEBEBEE1E1E1F6F6F6F8F8F8F8F8F8F8F8F8FFFFFFFDFDFDEEEEEEEDED - EDEAEAEAE9E9E9EAEAEAE9E9E9EAEAEAEBEBEBEAEAEAE9E9E9EBEBEBEBEBEBE7 - E7E7E6E6E6E3E3E3E2E2E2E5E5E5E4E4E4E2E2E2BFBFBFC0C0C0E5E5E5F6F6F6 - F5F5F5F3F3F3E9E9E9E9E9E9E7E7E7E5E5E5E9E9E9EEEEEEF1F1F1F4F4F4F3F3 - F3ECECECC3C3C3D2D2D2F6F6F6F6F6F6F8F8F8F7F7F7F8F8F8FBFBFBFDFDFDFE - FEFEFFFFFFFFFFFFFBFBFBE7E7E7E6E6E6E6E6E6E7E7E7E8E8E8EBEBEBECECEC - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2EAEAEAF4F4F4F7F7F7F7F7 - F7F7F7F7F9F9F9FFFFFFFFFFFFFCFCFCEAEAEAE9E9E9E8E8E8E7E7E7E7E7E7E6 - E6E6E5E5E5C3C3C3D5D5D5F7F7F7F8F8F8FAFAFAFBFBFBFCFCFCFDFDFDFAFAFA - FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7F9F9F9F9F9F9F8F8F8F6F6F6FFFF - FFFFFFFFF7F7F7F8F8F8F8F8F8F8F8F8F8F8F8FAFAFAFFFFFFFEFEFEF0F0F0E9 - E9E9E9E9E9D5D5D5C2C2C2C2C2C2C8C8C8DDDDDDEEEEEEECECECE9E9E9E4E4E4 - DFDFDFE2E2E2E7E7E7E9E9E9E7E7E7E6E6E6E8E8E8D1D1D1E2E2E2FFFFFFFDFD - FDFAFAFAFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F5F5F5F4F4F4F3F3F3F4F4F4F5 - F5F5F7F7F7F9F9F9FBFBFBFCFCFCFFFFFFFFFFFFFFFFFFFBFBFBD7D7D7CDCDCD - E1E1E1F5F5F5F5F5F5F6F6F6F8F8F8FFFFFFFFFFFFEAEAEAE2E2E2E4E4E4E6E6 - E6E7E7E7E9E9E9E9E9E9D3D3D3BDBDBDBFBFBFBCBCBCBBBBBBC0C0C0D4D4D4D7 - D7D7DBDBDBECECECFAFAFAFFFFFFF2F2F2E7E7E7D5D5D5BFBFBFA9A9A9BABABA - E1E1E1F4F4F4F5F5F5F6F6F6F8F8F8F6F6F6F6F6F6F6F6F6F4F4F4F5F5F5F6F6 - F6F9F9F9FCFCFCFCFCFCFBFBFBFFFFFFFFFFFFFFFFFFFAFAFAECECECECECECEA - EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAECECECEDEDEDEDEDEDEAEAEA - CACACAD3D3D3F3F3F3F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7FFFFFFFFFF - FFFFFFFFE0E0E0EAEAEAF7F7F7F8F8F8F9F9F9F9F9F9F8F8F8F7F7F7F7F7F7F6 - F6F6EEEEEEF0F0F0F7F7F7FBFBFBFDFDFDFFFFFFFFFFFFFFFFFFF0F0F0F7F7F7 - F5F5F5F7F7F7F7F7F7F5F5F5F4F4F4E4E4E4D4D4D4D3D3D3E7E7E7E8E8E8E7E7 - E7EEEEEEEEEEEEEDEDEDECECECD9D9D9B6B6B6C3C3C3E6E6E6F5F5F5F5F5F5FF - FFFFE6E6E6E4E4E4DFDFDFCACACABABABABDBDBDB2B2B2C8C8C8DDDDDDDEDEDE - E0E0E0DEDEDED9D9D9DCDCDCDEDEDEE9E9E9F7F7F7F9F9F9F9F9F9FCFCFCFFFF - FFFFFFFFEDEDEDEEEEEEECECECEDEDEDEEEEEEECECECD6D6D6E4E4E4F8F8F8F8 - F8F8F8F8F8F8F8F8FFFFFFFFFFFFFFFFFFFDFDFDECECECEAEAEAEAEAEAE9E9E9 - C4C4C4CACACAF0F0F0F8F8F8F8F8F8F8F8F8F8F8F8FFFFFFFFFFFFFFFFFFEDED - EDE9E9E9E9E9E9E9E9E9D5D5D5C0C0C0C0C0C0D8D8D8EBEBEBECECECE9E9E9E6 - E6E6E6E6E6E3E3E3E2E2E2E4E4E4E1E1E1D1D1D1AEAEAED5D5D5F7F7F7F5F5F5 - F6F6F6F5F5F5FDFDFDF4F4F4E6E6E6E5E5E5EAEAEAF0F0F0F2F2F2F1F1F1EEEE - EEEAEAEAC1C1C1D1D1D1F7F7F7F7F7F7F9F9F9F8F8F8F9F9F9FAFAFAFBFBFBFC - FCFCFFFFFFFFFFFFE7E7E7E4E4E4E2E2E2E3E3E3E7E7E7EAEAEAECECECEDEDED - FEFEFEFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFDEDEDEE7E7E7F4F4F4F7F7F7F8F8 - F8F7F7F7F8F8F8FFFFFFFFFFFFEBEBEBEAEAEAE8E8E8E7E7E7E7E7E7E7E7E7E6 - E6E6E1E1E1D1D1D1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFBFBFBFAFAFAFBFBFBF9F9F9F6F6F6F7F7F7FFFF - FFFFFFFFF8F8F8FAFAFAFAFAFAF8F8F8F8F8F8F8F8F8F7F7F7FFFFFFF7F7F7E7 - E7E7D4D4D4ACACACBEBEBED1D1D1D7D7D7F9F9F9FDFDFDECECECE8E8E8E6E6E6 - E4E4E4E4E4E4E6E6E6E7E7E7E5E5E5E6E6E6EAEAEAD9D9D9F0F0F0FFFFFFFFFF - FFFDFDFDFFFFFFFFFFFFFFFFFFFBFBFBEDEDEDF5F5F5F4F4F4F4F4F4F4F4F4F4 - F4F4F7F7F7FBFBFBFBFBFBFFFFFFFFFFFFFFFFFFFDFDFDEAEAEAE9E9E9D1D1D1 - E2E2E2F8F8F8F8F8F8F8F8F8F9F9F9FFFFFFFFFFFFE5E5E5E2E2E2E4E4E4E7E7 - E7E8E8E8E9E9E9E9E9E9BABABAB6B6B6CECECECECECED0D0D0D5D5D5E8E8E8D0 - D0D0DADADAEDEDEDF3F3F3F7F7F7EEEEEED5D5D5AAAAAAB9B9B9CDCDCDE1E1E1 - F4F4F4F7F7F7F9F9F9F8F8F8F7F7F7F6F6F6F6F6F6F5F5F5F5F5F5F5F5F5F6F6 - F6F7F7F7F8F8F8F9F9F9FBFBFBFFFFFFFFFFFFFDFDFDECECECECECECEDEDEDEC - ECECEAEAEAEAEAEAEAEAEAEAEAEAE9E9E9E9E9E9EBEBEBEDEDEDEDEDEDEBEBEB - C8C8C8D6D6D6F7F7F7F9F9F9F8F8F8F6F6F6F7F7F7F7F7F7FFFFFFFFFFFFFFFF - FFF9F9F9EDEDEDEEEEEEF7F7F7F8F8F8F8F8F8F8F8F8F7F7F7F7F7F7F7F7F7F4 - F4F4EEEEEEF3F3F3FBFBFBFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFEBEBEBD8D8D8 - E7E7E7F8F8F8F6F6F6F3F3F3F3F3F3F5F5F5F6F6F6F6F6F6F7F7F7F7F7F7F7F7 - F7FFFFFFFDFDFDEDEDEDECECECC8C8C8C4C4C4E8E8E8F7F7F7F8F8F8F8F8F8FF - FFFFE5E5E5E3E3E3DFDFDFCFCFCFD0D0D0D3D3D3DADADAEEEEEEFBFBFBFAFAFA - F8F8F8F4F4F4F2F2F2F6F6F6F7F7F7F6F6F6F8F8F8F9F9F9FAFAFAFFFFFFFFFF - FFFFFFFFEEEEEEEEEEEEECECECEEEEEEECECECEAEAEABDBDBDCFCFCFF8F8F8F8 - F8F8F9F9F9FDFDFDFFFFFFFFFFFFFEFEFEECECECEAEAEAE7E7E7E8E8E8D8D8D8 - ABABABCACACAF4F4F4F8F8F8F8F8F8F8F8F8F8F8F8FFFFFFFFFFFFFFFFFFEDED - EDEAEAEAEAEAEAE8E8E8C1C1C1BABABAD1D1D1FCFCFCFDFDFDEAEAEAE7E7E7E6 - E6E6E5E5E5E1E1E1DFDFDFDFDFDFE1E1E1C1C1C1BFBFBFE9E9E9F9F9F9F7F7F7 - F7F7F7F5F5F5FDFDFDF4F4F4E6E6E6E7E7E7E9E9E9EDEDEDEFEFEFECECECE9E9 - E9E8E8E8C1C1C1D1D1D1F8F8F8F9F9F9FAFAFAFAFAFAF9F9F9F8F8F8FFFFFFFF - FFFFFFFFFFFFFFFFE7E7E7E5E5E5E3E3E3E6E6E6E9E9E9EAEAEAEAEAEAECECEC - EEEEEEF3F3F3F2F2F2ECECECE9E9E9E9E9E9E4E4E4E4E4E4F5F5F5F9F9F9FBFB - FBF9F9F9FFFFFFFFFFFFFFFFFFEEEEEEEDEDEDE9E9E9E9E9E9E9E9E9E8E8E8E4 - E4E4D1D1D1D3D3D3F5F5F5FFFFFFFFFFFFFFFFFFFFFFFFF8F8F8FFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFF2F2F2EFEFEFF7F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFDFDFDFEFEFEFFBFBFBF8F8F8F8F8F8F8F8F8F8F8F8FFFFFFECECECD0 - D0D0B4B4B4C0C0C0E7E7E7F9F9F9FAFAFAFFFFFFFFFFFFEAEAEAE6E6E6E6E6E6 - E3E3E3E2E2E2E2E2E2E6E6E6E6E6E6EAEAEAEEEEEEEEEEEEF4F4F4FFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFDFDFDECECECEDEDEDEEEEEEF5F5F5F6F6F6F5F5F5F7 - F7F7F9F9F9FBFBFBF9F9F9FFFFFFFFFFFFFDFDFDEAEAEAE7E7E7E7E7E7BDBDBD - D1D1D1FAFAFAF9F9F9F8F8F8F8F8F8FFFFFFF9F9F9E1E1E1E1E1E1E3E3E3E6E6 - E6E7E7E7E8E8E8D3D3D39E9E9ECACACAF5F5F5F8F8F8F9F9F9F9F9F9FBFBFBEC - ECECEAEAEAF8F8F8E4E4E4D1D1D1C9C9C9ACACACB9B9B9DEDEDEF1F1F1F4F4F4 - F6F6F6FBFBFBFCFCFCF8F8F8F6F6F6F5F5F5F5F5F5F4F4F4F4F4F4F5F5F5F6F6 - F6F6F6F6F8F8F8F9F9F9FFFFFFFFFFFFFFFFFFF1F1F1ECECECEDEDEDEDEDEDEA - EAEAE9E9E9E9E9E9EAEAEAEAEAEAEAEAEAEAEAEAEDEDEDEEEEEEEDEDEDDBDBDB - B7B7B7D5D5D5F7F7F7F8F8F8F6F6F6F5F5F5F7F7F7F7F7F7FFFFFFFFFFFFF9F9 - F9EDEDEDEDEDEDEDEDEDEEEEEEF7F7F7F7F7F7F6F6F6F4F4F4F4F4F4F4F4F4F3 - F3F3F0F0F0F5F5F5FDFDFDFFFFFFFFFFFFFFFFFFFCFCFCFFFFFFF9F9F9D9D9D9 - F6F6F6FFFFFFF2F2F2EFEFEFF2F2F2F7F7F7F8F8F8F8F8F8F8F8F8F8F8F8F8F8 - F8FFFFFFFCFCFCEDEDEDEDEDEDC9C9C9D5D5D5F8F8F8F8F8F8F8F8F8F8F8F8FF - FFFFE4E4E4E4E4E4E1E1E1D2D2D2C3C3C3EAEAEAFCFCFCFDFDFDFCFCFCFBFBFB - F9F9F9F7F7F7F7F7F7F9F9F9F8F8F8F7F7F7F7F7F7F7F7F7F8F8F8FFFFFFFFFF - FFFBFBFBEFEFEFEDEDEDEAEAEAEAEAEAE6E6E6E2E2E2B8B8B8CDCDCDF7F7F7FA - FAFAFFFFFFFFFFFFFFFFFFFFFFFFECECECE9E9E9E7E7E7D7D7D7D8D8D8C6C6C6 - BABABAE2E2E2F9F9F9F9F9F9F8F8F8F8F8F8F8F8F8FFFFFFFFFFFFEDEDEDEAEA - EAE9E9E9E7E7E7E6E6E6D5D5D5E2E2E2F7F7F7FFFFFFFFFFFFEAEAEAE6E6E6E5 - E5E5E1E1E1DEDEDEDDDDDDE2E2E2D3D3D3AFAFAFD3D3D3FBFBFBFCFCFCF8F8F8 - F7F7F7F4F4F4FDFDFDFFFFFFF4F4F4E8E8E8D9D9D9DCDCDCEEEEEEECECECE8E8 - E8E6E6E6BFBFBFD1D1D1F7F7F7F7F7F7F7F7F7F8F8F8F7F7F7FFFFFFFFFFFFFF - FFFFFFFFFFFBFBFBEDEDEDECECECE9E9E9E9E9E9E9E9E9E9E9E9E9E9E9EAEAEA - EDEDEDF0F0F0ECECECE9E9E9E6E6E6E3E3E3E0E0E0DFDFDFE4E4E4FFFFFFFFFF - FFF7F7F7FFFFFFFBFBFBD7D7D7DADADAECECECEAEAEAE9E9E9E7E7E7D4D4D4BF - BFBFB1B1B1E2E2E2F8F8F8EBEBEBE8E8E8E9E9E9EBEBEBECECECF9F9F9F8F8F8 - EAEAEAEDEDEDEDEDEDEBEBEBECECECF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFDEDEDEEDEDEDF7F7F7F5F5F5F9F9F9F9F9F9F8F8F8F8F8F8E9E9E9D7 - D7D7D6D6D6E9E9E9FAFAFAFBFBFBFCFCFCFFFFFFFFFFFFE6E6E6E5E5E5E2E2E2 - E1E1E1E3E3E3E4E4E4E8E8E8E9E9E9ECECECEEEEEEEAEAEAE9E9E9F9F9F9FFFF - FFFFFFFFFFFFFFFCFCFCEDEDEDECECECEBEBEBE9E9E9DDDDDDF8F8F8FFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECECECE9E9E9E7E7E7E3E3E3BBBBBB - D2D2D2FBFBFBFBFBFBF8F8F8F8F8F8F9F9F9F5F5F5E2E2E2E1E1E1E2E2E2E5E5 - E5E6E6E6E8E8E8D3D3D3CCCCCCE4E4E4F9F9F9FDFDFDFDFDFDFBFBFBFBFBFBFA - FAFAF8F8F8F7F7F7EBEBEBD7D7D7D4D4D4D0D0D0DDDDDDF0F0F0F2F2F2F4F4F4 - F6F6F6F9F9F9F8F8F8F6F6F6F5F5F5F5F5F5F5F5F5F3F3F3F3F3F3F5F5F5F4F4 - F4F5F5F5F7F7F7FFFFFFFFFFFFFFFFFFFCFCFCEEEEEEEDEDEDEFEFEFEEEEEEE9 - E9E9E7E7E7E9E9E9EAEAEAEAEAEAEAEAEAEAEAEAEFEFEFF1F1F1F0F0F0E0E0E0 - D3D3D3E1E1E1F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7FFFFFFFFFFFFEEEE - EEEEEEEEEEEEEEEEEEEEEDEDEDEEEEEEF6F6F6F5F5F5F4F4F4F2F2F2F4F4F4F6 - F6F6F5F5F5FAFAFAFFFFFFFFFFFFFEFEFEF9F9F9F8F8F8FFFFFFFBFBFBEAEAEA - F9F9F9F3F3F3EDEDEDECECECF4F4F4F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8 - F8FFFFFFFFFFFFFFFFFFF5F5F5CECECED7D7D7FAFAFAFCFCFCFCFCFCFCFCFCFF - FFFFE4E4E4E3E3E3CECECEA8A8A8BDBDBDE7E7E7F9F9F9FAFAFAFBFBFBFAFAFA - F8F8F8F9F9F9FCFCFCFCFCFCF9F9F9F6F6F6F5F5F5F7F7F7FFFFFFFFFFFFFFFF - FFEDEDEDEEEEEEECECECEAEAEAE9E9E9E6E6E6E0E0E0BFBFBFD0D0D0F5F5F5FE - FEFEFFFFFFF9F9F9FAFAFAEDEDEDCECECECCCCCCCBCBCBB5B5B5D1D1D1C4C4C4 - D0D0D0F5F5F5FAFAFAF8F8F8F8F8F8F8F8F8F8F8F8F9F9F9FFFFFFFCFCFCE6E6 - E6E6E6E6E4E4E4E2E2E2E6E6E6E6E6E6F9F9F9FCFCFCFAFAFAE8E8E8E5E5E5E4 - E4E4E1E1E1DEDEDEE2E2E2E7E7E7D5D5D5D7D7D7EEEEEEFFFFFFFFFFFFF9F9F9 - F5F5F5F4F4F4FDFDFDF4F4F4EBEBEBDADADAB8B8B8EAEAEAFDFDFDE9E9E9E6E6 - E6E2E2E2BEBEBED3D3D3F5F5F5F3F3F3F5F5F5F5F5F5F3F3F3FFFFFFFFFFFFFC - FCFCECECECECECECECECECEAEAEAE9E9E9E9E9E9E9E9E9E9E9E9E9E9E9ECECEC - F0F0F0EEEEEEE9E9E9E9E9E9E4E4E4E2E2E2E0E0E0DEDEDEDFDFDFF4F4F4EBEB - EBE4E4E4F1F1F1E2E2E2CFCFCFF7F7F7FFFFFFEEEEEEE9E9E9E6E6E6D1D1D1DE - DEDEF1F1F1FFFFFFFFFFFFEAEAEAE8E8E8E7E7E7E7E7E7E9E9E9E9E9E9E9E9E9 - E9E9E9EBEBEBECECECEBEBEBEAEAEAEBEBEBD7D7D7C1C1C1BDBDBDD7D7D7F6F6 - F6F2F2F2EAEAEAD9D9D9E2E2E2F4F4F4F8F8F8F8F8F8F7F7F7F5F5F5F0F0F0F1 - F1F1F7F7F7FBFBFBFBFBFBFCFCFCFFFFFFFFFFFFFFFFFFE7E7E7E6E6E6E5E5E5 - E6E6E6E9E9E9E9E9E9EAEAEAEAEAEAEEEEEEEEEEEEEAEAEAE9E9E9E8E8E8E9E9 - E9E9E9E9E9E9E9ECECECECECECEAEAEAE9E9E9E8E8E8D9D9D9FFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9EAEAEAE9E9E9E8E8E8E6E6E6DADADA - EAEAEAF9F9F9F9F9F9F7F7F7F6F6F6F7F7F7F8F8F8FFFFFFF9F9F9E7E7E7E7E7 - E7E9E9E9E9E9E9E9E9E9E9E9E9FCFCFCFEFEFEFDFDFDFBFBFBFAFAFAFBFBFBF9 - F9F9F8F8F8F7F7F7F7F7F7F5F5F5F4F4F4EFEFEFEEEEEEF1F1F1F3F3F3F5F5F5 - F6F6F6F7F7F7F8F8F8F6F6F6F5F5F5F5F5F5F5F5F5F4F4F4F5F5F5F5F5F5F5F5 - F5F6F6F6FFFFFFFFFFFFFFFFFFFFFFFFF4F4F4F0F0F0F0F0F0F0F0F0EEEEEEEA - EAEAE9E9E9EAEAEAEAEAEAEAEAEAEAEAEAEEEEEEF3F3F3F1F1F1EDEDEDEDEDED - D0D0D0DEDEDEF7F7F7F6F6F6F6F6F6F6F6F6F7F7F7F8F8F8FFFFFFFFFFFFEFEF - EFEFEFEFF0F0F0F0F0F0EEEEEEEDEDEDE0E0E0E6E6E6F0F0F0F4F4F4F7F7F7F8 - F8F8F9F9F9FDFDFDFFFFFFFEFEFEF8F8F8F7F7F7F7F7F7F7F7F7F7F7F7D9D9D9 - DADADAE4E4E4D1D1D1E3E3E3F8F8F8FDFDFDFBFBFBF8F8F8F8F8F8F8F8F8FCFC - FCFFFFFFFFFFFFFFFFFFF3F3F3DDDDDDE8E8E8FFFFFFFFFFFFFCFCFCFCFCFCFF - FFFFE6E6E6E2E2E2BDBDBDBABABAE7E7E7F9F9F9F9F9F9FBFBFBFBFBFBFAFAFA - F8F8F8FBFBFBFCFCFCF9F9F9F7F7F7F4F4F4F4F4F4F7F7F7FFFFFFFFFFFFFCFC - FCEDEDEDEDEDEDEBEBEBE9E9E9E7E7E7E4E4E4E2E2E2D5D5D5E5E5E5FCFCFCFF - FFFFFFFFFFEDEDEDE9E9E9E9E9E9DADADAD7D7D7D4D4D4CECECEE1E1E1E4E4E4 - E4E4E4F7F7F7F7F7F7F7F7F7F8F8F8F8F8F8F8F8F8F9F9F9FFFFFFFFFFFFE8E8 - E8E4E4E4E2E2E2E2E2E2E5E5E5E7E7E7D5D5D5E5E5E5F7F7F7FFFFFFF5F5F5E6 - E6E6E3E3E3E2E2E2E7E7E7EAEAEAE8E8E8ECECECFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFF2F2F2F4F4F4E6E6E6E9E9E9FFFFFFFFFFFFE7E7E7E3E3 - E3DEDEDEC2C2C2D7D7D7F5F5F5F4F4F4F8F8F8F7F7F7FFFFFFFFFFFFFFFFFFEB - EBEBE9E9E9EAEAEAEAEAEAE9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9EEEEEE - EEEEEEE9E9E9E7E7E7E7E7E7E6E6E6E4E4E4E1E1E1E1E1E1E5E5E5EAEAEADEDE - DEE4E4E4F1F1F1F3F3F3F5F5F5FFFFFFFFFFFFF1F1F1E6E6E6E5E5E5E1E1E1F3 - F3F3FFFFFFFFFFFFF7F7F7E8E8E8E6E6E6E5E5E5E7E7E7E8E8E8E9E9E9E9E9E9 - EAEAEAECECECEDEDEDECECECEAEAEAEBEBEBC0C0C0BABABAC8C8C8FEFEFEFFFF - FFE9E9E9E4E4E4D4D4D4E2E2E2F5F5F5F8F8F8F7F7F7F7F7F7F3F3F3F2F2F2F7 - F7F7FBFBFBFCFCFCFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFE9E9E9E7E7E7E7E7E7 - E8E8E8EAEAEAEAEAEAECECECECECECEFEFEFEDEDEDE9E9E9E8E8E8E7E7E7E7E7 - E7E8E8E8E9E9E9ECECECECECECEAEAEAE9E9E9E7E7E7E6E6E6F8F8F8F7F7F7E6 - E6E6E9E9E9EAEAEAE9E9E9E9E9E9E5E5E5E3E3E3E7E7E7EBEBEBF0F0F0F4F4F4 - F2F2F2FFFFFFFFFFFFF5F5F5F8F8F8F8F8F8F8F8F8FFFFFFFCFCFCEAEAEAEAEA - EAEAEAEAEAEAEAEAEAEAE9E9E9EAEAEAFFFFFFFFFFFFFFFFFFFAFAFAFBFBFBF9 - F9F9F7F7F7F7F7F7F7F7F7F7F7F7F5F5F5F2F2F2F3F3F3F5F5F5F5F5F5F7F7F7 - F7F7F7F8F8F8F9F9F9F5F5F5F3F3F3F3F3F3F5F5F5F6F6F6F7F7F7F9F9F9FFFF - FFFFFFFFFFFFFFFFFFFFFEFEFEF3F3F3F2F2F2EDEDEDEDEDEDEEEEEEEBEBEBE8 - E8E8E8E8E8E7E7E7E9E9E9EBEBEBECECECEFEFEFEFEFEFEAEAEAE6E6E6E3E3E3 - B2B2B2C9C9C9F4F4F4F3F3F3F5F5F5F6F6F6F7F7F7F7F7F7FFFFFFFFFFFFEFEF - EFEEEEEEEFEFEFEEEEEEE9E9E9DCDCDCBFBFBFD3D3D3F1F1F1F7F7F7F8F8F8F9 - F9F9FCFCFCFDFDFDFEFEFEFFFFFFFCFCFCF7F7F7F7F7F7F7F7F7F7F7F7E5E5E5 - E3E3E3CECECEAAAAAAD3D3D3F9F9F9FAFAFAFBFBFBFAFAFAFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFF2F2F2EEEEEEE9E9E9EAEAEAFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFE5E5E5E7E7E7C1C1C1D3D3D3FAFAFAFBFBFBF9F9F9FBFBFBFBFBFBFAFAFA - FBFBFBFDFDFDF9F9F9F5F5F5F5F5F5F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFEEEE - EEEDEDEDEAEAEAE9E9E9E7E7E7E6E6E6CFCFCFB7B7B7C3C3C3D1D1D1F5F5F5FF - FFFFF2F2F2E9E9E9F4F4F4F4F4F4F3F3F3F1F1F1EDEDEDEEEEEEF3F3F3F4F4F4 - F5F5F5F6F6F6F5F5F5F6F6F6F8F8F8F8F8F8F8F8F8F9F9F9FFFFFFFFFFFFE7E7 - E7E4E4E4E2E2E2E4E4E4E6E6E6E6E6E6BBBBBBCCCCCCF7F7F7FFFFFFF7F7F7E7 - E7E7E7E7E7E6E6E6E9E9E9EAEAEAEAEAEAE9E9E9F7F7F7FFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFF5F5F5FFFFFFFFFFFFFAFAFAFFFFFFF8F8F8E9E9E9E6E6 - E6E5E5E5CBCBCBDADADAF5F5F5F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFCFCFCE9 - E9E9E9E9E9EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE9E9E9E9E9E9EAEAEAEFEFEF - ECECECE7E7E7E7E7E7E7E7E7E6E6E6E2E2E2E1E1E1E3E3E3E7E7E7EAEAEAECEC - ECE9E9E9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEEEEEEE5E5E5E5E5E5E3E3E3E7 - E7E7E9E9E9E6E6E6E8E8E8E7E7E7DFDFDFDCDCDCE2E2E2E6E6E6E9E9E9EBEBEB - EBEBEBECECECECECECEBEBEBEAEAEADADADAACACACD0D0D0F3F3F3FFFFFFFFFF - FFE3E3E3E2E2E2E3E3E3D3D3D3E4E4E4F8F8F8F8F8F8F8F8F8F3F3F3F5F5F5FB - FBFBFCFCFCFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFECECECE9E9E9E9E9E9E9E9E9 - E9E9E9EBEBEBEBEBEBECECECEDEDEDEEEEEEECECECE9E9E9E8E8E8E8E8E8E8E8 - E8E9E9E9EAEAEAECECECECECECEAEAEAE7E7E7E6E6E6E4E4E4E4E4E4E0E0E0DD - DDDDE5E5E5D7D7D7C2C2C2C4C4C4C1C1C1C7C7C7DFDFDFF0F0F0F0F0F0F0F0F0 - EEEEEEFEFEFEE6E6E6E4E4E4FBFBFBF9F9F9FAFAFAF9F9F9F8F8F8D7D7D7C3C3 - C3D7D7D7EAEAEAEAEAEAE9E9E9E9E9E9FCFCFCFFFFFFFEFEFEFCFCFCFEFEFEFA - FAFAF7F7F7F7F7F7F7F7F7F5F5F5F5F5F5F6F6F6F7F7F7F8F8F8F8F8F8F8F8F8 - F8F8F8F9F9F9F8F8F8F5F5F5F4F4F4F3F3F3F4F4F4F4F4F4FFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFDFDFDEAEAEAEAEAEAEAEAEAE7E7E7E9E9E9EAEAEAE9E9E9E7 - E7E7E6E6E6E4E4E4E7E7E7EBEBEBEBEBEBEDEDEDE9E9E9E6E6E6E4E4E4DFDFDF - B4B4B4C9C9C9F1F1F1F3F3F3F7F7F7F8F8F8F8F8F8F7F7F7FFFFFFFEFEFEEEEE - EEECECECECECECE9E9E9E7E7E7CBCBCBC8C8C8E5E5E5F5F5F5F8F8F8F9F9F9FC - FCFCFCFCFCFEFEFEFFFFFFFFFFFFFFFFFFF9F9F9FAFAFAF7F7F7F7F7F7F5F5F5 - F4F4F4DCDCDCCCCCCCE5E5E5F9F9F9F9F9F9FBFBFBFBFBFBFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFF0F0F0ECECECE9E9E9E9E9E9FBFBFBFAFAFAFBFBFBFFFFFFFF - FFFFE9E9E9EAEAEABFBFBFD1D1D1F9F9F9F9F9F9F8F8F8FAFAFAFBFBFBFAFAFA - FDFDFDFCFCFCF7F7F7F5F5F5F5F5F5F5F5F5FFFFFFFFFFFFFFFFFFFCFCFCECEC - ECECECECE9E9E9E8E8E8E7E7E7D1D1D1A0A0A0B7B7B7D9D9D9DADADAEAEAEAF9 - F9F9E8E8E8E7E7E7F4F4F4F3F3F3F1F1F1EEEEEEEDEDEDF1F1F1F4F4F4F5F5F5 - F7F7F7F6F6F6F5F5F5F7F7F7F8F8F8F8F8F8F8F8F8F8F8F8FBFBFBFFFFFFF7F7 - F7E6E6E6E5E5E5E6E6E6E7E7E7E5E5E5BBBBBBCACACAF1F1F1F5F5F5F4F4F4E9 - E9E9E9E9E9E9E9E9E9E9E9EAEAEAEAEAEAEAEAEAEAEAEAEEEEEEF0F0F0EDEDED - ECECECECECECEDEDEDEEEEEEFAFAFAF9F9F9ECECECEBEBEBEBEBEBEBEBEBEBEB - EBEBEBEBDEDEDEE6E6E6F4F4F4F1F1F1F2F2F2F4F4F4F5F5F5F5F5F5E9E9E9E7 - E7E7E9E9E9ECECECEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE9E9E9ECECECEEEEEE - EAEAEAE7E7E7E7E7E7E7E7E7E4E4E4E2E2E2E3E3E3E4E4E4E7E7E7EAEAEAEAEA - EAE9E9E9FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFECECECE6E6E6E6E6E6E5E5E5E7 - E7E7E7E7E7CFCFCFD0D0D0E2E2E2D9D9D9D0D0D0DCDCDCEAEAEAE9E9E9EBEBEB - EBEBEBEBEBEBEBEBEBEAEAEADADADAB5B5B5BDBDBDE1E1E1F7F7F7FDFDFDFCFC - FCE1E1E1DEDEDEE2E2E2D3D3D3F7F7F7FFFFFFFFFFFFFFFFFFF4F4F4F5F5F5FB - FBFBFDFDFDFDFDFDFEFEFEFEFEFEFFFFFFFFFFFFECECECEAEAEAEAEAEAEBEBEB - EBEBEBECECECECECECECECECEDEDEDEEEEEEECECECEAEAEAE9E9E9E8E8E8E8E8 - E8E9E9E9EBEBEBECECECEBEBEBEAEAEAEAEAEAE9E9E9E4E4E4E3E3E3DDDDDDDE - DEDEE7E7E7C3C3C3BCBCBCD3D3D3D5D5D5DADADAFEFEFEFFFFFFF5F5F5EEEEEE - E9E9E9E7E7E7B5B5B5CACACAF9F9F9F9F9F9FBFBFBFCFCFCF9F9F9E7E7E7E9E9 - E9FFFFFFFDFDFDEEEEEEEBEBEBEAEAEAEBEBEBEAEAEAE9E9E9ECECECFBFBFBF9 - F9F9F5F5F5F5F5F5F5F5F5F5F5F5F7F7F7F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8 - F9F9F9FAFAFAF8F8F8F7F7F7F7F7F7F5F5F5F5F5F5FFFFFFFFFFFFFFFFFFFFFF - FFFCFCFCECECECE8E8E8E6E6E6E6E6E6E8E8E8E8E8E8E7E7E7E6E6E6E7E7E7E6 - E6E6E6E6E6E7E7E7E7E7E7E9E9E9E9E9E9EAEAEAE9E9E9E6E6E6E2E2E2E1E1E1 - B8B8B8CCCCCCF4F4F4F7F7F7F9F9F9F9F9F9F8F8F8F8F8F8F9F9F9FFFFFFFCFC - FCEAEAEAEAEAEAE9E9E9D7D7D7B3B3B3D5D5D5F7F7F7F8F8F8F8F8F8FAFAFAFC - FCFCFBFBFBFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8F8 - F6F6F6F0F0F0F2F2F2FBFBFBFDFDFDFCFCFCFDFDFDFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFF3F3F3ECECECECECECEEEEEEECECECE9E9E9E9E9E9EAEAEAEBEBEBFF - FFFFE9E9E9E7E7E7D1D1D1E4E4E4F8F8F8F8F8F8F8F8F8FAFAFAFBFBFBFAFAFA - FDFDFDF9F9F9F5F5F5F5F5F5F5F5F5FFFFFFFFFFFFFFFFFFECECECEAEAEAEAEA - EAE9E9E9E7E7E7D9D9D9CDCDCDACACACB7B7B7E6E6E6FCFCFCFEFEFEFFFFFFFF - FFFFFFFFFFF4F4F4F4F4F4F3F3F3F0F0F0EEEEEEEFEFEFF3F3F3F5F5F5F7F7F7 - F7F7F7F5F5F5F6F6F6F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F9F9F9FFFFFFFFFF - FFE9E9E9E7E7E7E6E6E6E6E6E6D1D1D1A1A1A1C6C6C6F0F0F0F6F6F6F3F3F3F1 - F1F1EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAECECECEEEEEEEDEDED - ECECECECECECEEEEEEEEEEEEEDEDEDEDEDEDEAEAEAEAEAEAEBEBEBEBEBEBEBEB - EBEBEBEBECECECDEDEDEE7E7E7F4F4F4F7F7F7F7F7F7F7F7F7F5F5F5F4F4F4D7 - D7D7D9D9D9EBEBEBEAEAEAE9E9E9EAEAEAEAEAEAEAEAEAECECECEFEFEFECECEC - E8E8E8E7E7E7E7E7E7E6E6E6E2E2E2E3E3E3E5E5E5E7E7E7EAEAEAEAEAEAEAEA - EAEAEAEAEDEDEDEEEEEEF2F2F2F4F4F4EDEDEDE8E8E8E7E7E7E6E6E6E4E4E4E5 - E5E5E4E4E4B6B6B6CBCBCBD2D2D2BEBEBEBCBCBCDFDFDFECECECEAEAEAECECEC - ECECECEBEBEBEBEBEBDBDBDBB5B5B5C3C3C3E2E2E2F3F3F3F7F7F7F8F8F8F9F9 - F9F5F5F5E2E2E2E6E6E6E8E8E8FBFBFBFFFFFFFFFFFFFCFCFCF5F5F5F6F6F6FC - FCFCFEFEFEFDFDFDFDFDFDFDFDFDFFFFFFFEFEFEEBEBEBE8E8E8DCDCDCDADADA - E7E7E7E9E9E9EAEAEAEBEBEBECECECECECECEAEAEAE9E9E9E8E8E8E7E7E7E7E7 - E7E8E8E8E9E9E9EAEAEAEAEAEAEAEAEAEAEAEAE9E9E9E3E3E3E1E1E1DCDCDCE1 - E1E1E9E9E9C1C1C1D2D2D2F7F7F7F9F9F9FFFFFFFFFFFFFFFFFFF5F5F5EDEDED - EAEAEAE9E9E9B3B3B3CACACAFDFDFDFCFCFCFDFDFDFCFCFCFAFAFAFCFCFCFFFF - FFFEFEFEEDEDEDEEEEEEECECECEAEAEAEAEAEAE9E9E9E8E8E8E7E7E7E8E8E8FF - FFFFFFFFFFF4F4F4F5F5F5F7F7F7F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8 - F9F9F9F8F8F8F7F7F7F5F5F5F5F5F5F4F4F4F4F4F4FFFFFFFFFFFFFBFBFBEEEE - EEEDEDEDE8E8E8E4E4E4E3E3E3E4E4E4E6E6E6E6E6E6E4E4E4E7E7E7E9E9E9E7 - E7E7E7E7E7E8E8E8E8E8E8E8E8E8E9E9E9EAEAEAE8E8E8E7E7E7E6E6E6E4E4E4 - BCBCBCD0D0D0F9F9F9F9F9F9F9F9F9FBFBFBFCFCFCF9F9F9F9F9F9FFFFFFFFFF - FFEAEAEAEAEAEAE9E9E9C1C1C1BEBEBEE6E6E6F8F8F8F8F8F8F8F8F8FAFAFAFB - FBFBFAFAFAFDFDFDFFFFFFFFFFFFF8F8F8F8F8F8FFFFFFFFFFFFFEFEFEFFFFFF - FFFFFFF5F5F5F7F7F7FDFDFDFEFEFEFCFCFCFBFBFBFFFFFFFFFFFFFEFEFEEDED - EDF0F0F0EEEEEEECECECEFEFEFEEEEEEEAEAEAECECECEEEEEEECECECECECECFF - FFFFE7E7E7E4E4E4E6E6E6D3D3D3E4E4E4F8F8F8F8F8F8F9F9F9FAFAFAFAFAFA - FDFDFDF9F9F9F5F5F5F5F5F5FFFFFFFFFFFFFFFFFFFBFBFBEAEAEAEAEAEAE9E9 - E9D9D9D9CACACAB7B7B7C0C0C0C3C3C3DDDDDDFBFBFBFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFF1F1F1EDEDEDEEEEEEF3F3F3F7F7F7F7F7F7F6F6F6 - F5F5F5F5F5F5F7F7F7F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F9F9F9FFFFFFFFFF - FFEAEAEAE7E7E7E6E6E6E5E5E5B8B8B8AEAEAED9D9D9F3F3F3F5F5F5F3F3F3F3 - F3F3F6F6F6EBEBEBEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAECECEC - EBEBEBEEEEEEF2F2F2EEEEEEEDEDEDEDEDEDEAEAEAEAEAEAEBEBEBEBEBEBEBEB - EBEBEBEBEEEEEEE2E2E2F7F7F7FFFFFFF6F6F6F6F6F6F8F8F8F8F8F8F7F7F7E5 - E5E5E5E5E5E9E9E9EAEAEAE9E9E9E8E8E8E7E7E7E8E8E8EEEEEEEEEEEEEAEAEA - E8E8E8E7E7E7E6E6E6E4E4E4E3E3E3E6E6E6E6E6E6E7E7E7EAEAEAEAEAEAEAEA - EAEBEBEBEEEEEEEFEFEFF0F0F0F0F0F0EAEAEAE7E7E7E7E7E7E6E6E6E5E5E5E6 - E6E6E4E4E4B6B6B6CDCDCDE6E6E6D6D6D6DBDBDBF8F8F8FFFFFFFEFEFEF3F3F3 - EEEEEEEBEBEBEBEBEBCACACAC6C6C6E7E7E7F3F3F3F5F5F5F9F9F9F9F9F9FBFB - FBF9F9F9FFFFFFFCFCFCE9E9E9E9E9E9E9E9E9E9E9E9EBEBEBD4D4D4E6E6E6FC - FCFCFCFCFCFDFDFDFCFCFCFEFEFEFFFFFFFDFDFDF5F5F5DEDEDEC2C2C2D6D6D6 - DADADAC9C9C9C8C8C8C8C8C8C7C7C7C4C4C4D9D9D9EAEAEAE8E8E8E7E7E7E7E7 - E7E7E7E7E7E7E7E9E9E9E9E9E9E9E9E9E7E7E7E4E4E4DEDEDEDADADADCDCDCCF - CFCFC1C1C1ADADADD2D2D2F8F8F8FFFFFFFFFFFFFFFFFFFFFFFFEDEDEDE8E8E8 - E8E8E8E8E8E8B5B5B5CECECEFFFFFFFDFDFDFCFCFCFCFCFCFCFCFCFCFCFCFBFB - FBE8E8E8F7F7F7FBFBFBE9E9E9E8E8E8E8E8E8E8E8E8E8E8E8E7E7E7E6E6E6F5 - F5F5F8F8F8F0F0F0F2F2F2F7F7F7F7F7F7F7F7F7F8F8F8F8F8F8F8F8F8F8F8F8 - F8F8F8FFFFFFFFFFFFFFFFFFF5F5F5F3F3F3F5F5F5FFFFFFFFFFFFE9E9E9EAEA - EAE8E8E8E2E2E2E2E2E2E4E4E4E2E2E2E4E4E4E6E6E6E6E6E6E4E4E4E6E6E6E8 - E8E8E6E6E6E6E6E6E8E8E8E6E6E6E5E5E5E8E8E8E9E9E9E9E9E9E8E8E8E7E7E7 - D4D4D4FAFAFAFFFFFFFFFFFFFFFFFFFDFDFDFCFCFCF9F9F9FBFBFBFFFFFFFFFF - FFEAEAEAEAEAEAE9E9E9D5D5D5E3E3E3F7F7F7F8F8F8F9F9F9FAFAFAFCFCFCFC - FCFCFBFBFBFDFDFDFFFFFFF9F9F9E8E8E8E8E8E8E8E8E8E9E9E9E8E8E8F9F9F9 - FBFBFBFFFFFFFFFFFFFFFFFFFEFEFEFBFBFBFAFAFAFDFDFDFFFFFFFFFFFFF3F3 - F3F3F3F3EEEEEEECECECEEEEEEEAEAEAE7E7E7E9E9E9E9E9E9E5E5E5E9E9E9FF - FFFFE7E7E7E6E6E6E4E4E4BABABACECECEF7F7F7F8F8F8F8F8F8F9F9F9F9F9F9 - FAFAFAF7F7F7F5F5F5FFFFFFFFFFFFFFFFFFFCFCFCECECECEAEAEAE9E9E9D9D9 - D9BABABAC6C6C6CFCFCFDEDEDEEDEDEDF3F3F3FDFDFDFFFFFFFFFFFFFFFFFFFF - FFFFFAFAFAF7F7F7E9E9E9E1E1E1EDEDEDF1F1F1F5F5F5F7F7F7F6F6F6F5F5F5 - F6F6F6F7F7F7F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F9F9F9FFFFFFFBFB - FBEAEAEAE9E9E9E8E8E8D3D3D3A4A4A4C7C7C7F3F3F3F8F8F8F8F8F8F8F8F8F9 - F9F9F8F8F8F8F8F8DADADAC3C3C3C1C1C1D7D7D7EAEAEAEBEBEBECECECECECEC - E9E9E9ECECECF3F3F3F0F0F0F0F0F0F0F0F0EBEBEBEAEAEAEBEBEBEBEBEBEBEB - EBECECECF0F0F0EEEEEEF8F8F8E7E7E7E6E6E6F5F5F5F7F7F7F7F7F7F5F5F5F3 - F3F3F4F4F4F5F5F5E9E9E9E9E9E9E7E7E7E7E7E7EAEAEAEEEEEEEDEDEDE8E8E8 - E8E8E8E7E7E7E6E6E6E4E4E4E3E3E3E5E5E5E4E4E4E7E7E7EAEAEAEAEAEAEAEA - EAEBEBEBEEEEEEEEEEEEF0F0F0F0F0F0EAEAEAE7E7E7E7E7E7E7E7E7E6E6E6E4 - E4E4E0E0E0B3B3B3CDCDCDF8F8F8F8F8F8F8F8F8FFFFFFFFFFFFFFFFFFF4F4F4 - EEEEEEEBEBEBEBEBEBCACACAD7D7D7F7F7F7F5F5F5F8F8F8FAFAFAFBFBFBFCFC - FCFAFAFAFFFFFFFFFFFFE6E6E6E7E7E7E9E9E9E9E9E9EAEAEAD6D6D6E6E6E6FA - FAFAFCFCFCFFFFFFFEFEFEFFFFFFFEFEFEF9F9F9F6F6F6EAEAEADADADAE5E5E5 - E6E6E6D8D8D8D7D7D7D6D6D6D5D5D5D3D3D3E7E7E7EBEBEBE9E9E9E7E7E7E7E7 - E7E7E7E7E7E7E7E9E9E9E8E8E8E7E7E7E6E6E6E4E4E4C8C8C8B1B1B1B8B8B8A9 - A9A9BDBDBDD4D4D4E7E7E7FCFCFCFFFFFFFFFFFFFFFFFFEDEDEDE8E8E8E7E7E7 - E7E7E7E4E4E4B0B0B0CACACAFBFBFBF9F9F9FBFBFBFCFCFCFCFCFCFAFAFAF9F9 - F9F8F8F8FFFFFFFFFFFFECECECEAEAEAE8E8E8E8E8E8E8E8E8E7E7E7E5E5E5E7 - E7E7E8E8E8D1D1D1E0E0E0F7F7F7F7F7F7F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8 - F8F8F8FFFFFFFFFFFFE7E7E7E4E4E4F7F7F7F9F9F9FFFFFFFFFFFFE8E8E8E8E8 - E8E7E7E7D1D1D1C1C1C1D4D4D4E4E4E4E7E7E7E9E9E9E9E9E9E6E6E6ECECECF0 - F0F0EAEAEAE7E7E7E6E6E6E3E3E3E4E4E4E6E6E6D3D3D3D1D1D1D1D1D1D5D5D5 - E9E9E9FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFFFFFFFEFE - FEEBEBEBEAEAEAE9E9E9E9E9E9D9D9D9E9E9E9FAFAFAFBFBFBFAFAFAFBFBFBFC - FCFCFCFCFCFCFCFCF7F7F7FFFFFFF8F8F8E8E8E8E8E8E8E9E9E9E7E7E7E7E7E7 - E8E8E8F9F9F9FCFCFCFCFCFCFDFDFDFCFCFCFDFDFDFFFFFFFFFFFFFFFFFFF4F4 - F4F2F2F2ECECECEDEDEDEDEDEDE9E9E9E7E7E7E4E4E4DFDFDFE0E0E0E4E4E4FF - FFFFE6E6E6E4E4E4E2E2E2B7B7B7CCCCCCF5F5F5F6F6F6F8F8F8F8F8F8F9F9F9 - F8F8F8F7F7F7F5F5F5FFFFFFFFFFFFFBFBFBECECECEAEAEAE9E9E9E7E7E7C7C7 - C7C3C3C3E0E0E0EEEEEEF4F4F4FBFBFBFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFF9 - F9F9EAEAEAE7E7E7D7D7D7EEEEEEFCFCFCF7F7F7F9F9F9F7F7F7F7F7F7F8F8F8 - F9F9F9F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F9F9F9F8F8F8F7F7 - F7EAEAEAE8E8E8D5D5D5AEAEAEB9B9B9DFDFDFF8F8F8FBFBFBFBFBFBFBFBFBFB - FBFBFBFBFBFBFBFBE9E9E9D4D4D4D0D0D0E4E4E4EBEBEBECECECEBEBEBEAEAEA - E7E7E7E9E9E9EEEEEEE7E7E7EAEAEAE7E7E7E6E6E6EAEAEAEAEAEAEAEAEAEBEB - EBEDEDEDEDEDEDECECECE8E8E8C9C9C9D7D7D7F5F5F5F6F6F6F5F5F5F4F4F4F3 - F3F3F5F5F5F6F6F6FFFFFFFAFAFAE9E9E9EAEAEAEBEBEBF1F1F1EEEEEEE8E8E8 - E8E8E8E8E8E8E4E4E4DFDFDFDFDFDFE4E4E4E7E7E7E9E9E9EAEAEAEAEAEAEAEA - EAECECECEDEDEDEEEEEEF0F0F0EDEDEDE8E8E8E7E7E7E7E7E7E6E6E6E4E4E4E2 - E2E2DEDEDEB7B7B7CFCFCFF8F8F8F8F8F8F8F8F8FFFFFFFFFFFFF8F8F8F1F1F1 - ECECECEBEBEBDEDEDEBDBDBDD9D9D9F7F7F7F7F7F7F8F8F8F8F8F8FBFBFBFCFC - FCFBFBFBFFFFFFFFFFFFE8E8E8EBEBEBECECECE9E9E9EAEAEAD6D6D6BFBFBFE5 - E5E5FFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF9F9F9F7F7F7F6F6F6F5F5F5F4F4F4 - F5F5F5F7F7F7F8F8F8F7F7F7F8F8F8F6F6F6F7F7F7FFFFFFFBFBFBE7E7E7E7E7 - E7E7E7E7E7E7E7E9E9E9E8E8E8E7E7E7E7E7E7D0D0D0989898B2B2B2D1D1D1D3 - D3D3E7E7E7FAFAFAFCFCFCFFFFFFFFFFFFFFFFFFEAEAEAE8E8E8E7E7E7E7E7E7 - E4E4E4CACACA979797CBCBCBFAFAFAFCFCFCFCFCFCFCFCFCFAFAFAF8F8F8F8F8 - F8F7F7F7FFFFFFFCFCFCECECECEAEAEAE8E8E8E8E8E8E8E8E8E6E6E6E4E4E4E5 - E5E5D1D1D1A8A8A8D2D2D2F8F8F8F8F8F8F8F8F8F8F8F8F7F7F7F7F7F7F8F8F8 - F8F8F8FFFFFFE9E9E9AFAFAFCFCFCFF1F1F1F4F4F4FFFFFFFFFFFFE8E8E8EAEA - EAE9E9E9D5D5D5D6D6D6F6F6F6F8F8F8EAEAEAEBEBEBEBEBEBEBEBEBF0F0F0F3 - F3F3EDEDEDE9E9E9E8E8E8E6E6E6E6E6E6D1D1D1A8A8A8CDCDCDC5C5C5E7E7E7 - FBFBFBEAEAEAEAEAEAEAEAEAEBEBEBFDFDFDFFFFFFFDFDFDFFFFFFFFFFFFFFFF - FFF9F9F9EAEAEAE9E9E9E9E9E9DADADAE9E9E9FCFCFCFCFCFCFBFBFBFFFFFFFF - FFFFFFFFFFFFFFFFF1F1F1FFFFFFE2E2E2D3D3D3E7E7E7E8E8E8E8E8E8E7E7E7 - E7E7E7E8E8E8E7E7E7E9E9E9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF0F0 - F0EDEDEDEAEAEAECECECEAEAEAE5E5E5E2E2E2DEDEDEDEDEDEE4E4E4E7E7E7FF - FFFFE2E2E2E5E5E5E3E3E3D0D0D0E1E1E1F5F5F5F7F7F7F9F9F9F8F8F8F8F8F8 - F9F9F9F8F8F8FFFFFFFFFFFFFFFFFFEDEDEDEAEAEAECECECEAEAEAE8E8E8CCCC - CCDADADAF4F4F4F4F4F4F8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEE7 - E7E7E7E7E7E6E6E6E6E6E6F0F0F0F3F3F3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFF8F8F8F8F8F8F8F8F8F8F8F8F9F9F9F9F9F9FAFAFAF8F8F8F7F7 - F7F8F8F8DADADAB2B2B2C1C1C1F1F1F1FFFFFFFBFBFBFCFCFCFBFBFBFBFBFBFB - FBFBFBFBFBFCFCFCFCFCFCFBFBFBF9F9F9F9F9F9FAFAFAD7D7D7D6D6D6E9E9E9 - D7D7D7C8C8C8D7D7D7E1E1E1E5E5E5E6E6E6E6E6E6EAEAEAE7E7E7E9E9E9EBEB - EBECECECECECECEAEAEAE8E8E8CCCCCCD8D8D8F5F5F5F5F5F5F6F6F6F4F4F4F4 - F4F4F6F6F6F8F8F8FFFFFFFFFFFFEBEBEBEBEBEBEBEBEBF2F2F2EEEEEEE8E8E8 - E6E6E6D3D3D3BFBFBFC0C0C0C8C8C8DBDBDBE9E9E9E8E8E8D6D6D6C4C4C4D8D8 - D8EBEBEBECECECECECECECECECE9E9E9E6E6E6E6E6E6E4E4E4E3E3E3E2E2E2E1 - E1E1E1E1E1C3C3C3D9D9D9FBFBFBFAFAFAFCFCFCFFFFFFFFFFFFF5F5F5EFEFEF - ECECECECECECCFCFCFCACACAE7E7E7F8F8F8F9F9F9F9F9F9F8F8F8F8F8F8F9F9 - F9FBFBFBFFFFFFFFFFFFEAEAEAE9E9E9E7E7E7D3D3D3D7D7D7BFBFBFBABABAE6 - E6E6FFFFFFFFFFFFFBFBFBFAFAFAF9F9F9F7F7F7F5F5F5F6F6F6F5F5F5F5F5F5 - F7F7F7F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F7F7F7FFFFFFFFFFFFEAEAEAE9E9 - E9E9E9E9E9E9E9E9E9E9E7E7E7E6E6E6CECECE949494ADADADE1E1E1F8F8F8F9 - F9F9FAFAFAFCFCFCFFFFFFFFFFFFFFFFFFF9F9F9E7E7E7E7E7E7E7E7E7E6E6E6 - CECECE9D9D9DB6B6B6E8E8E8FEFEFEFFFFFFFFFFFFFCFCFCF8F8F8F7F7F7F7F7 - F7F7F7F7F6F6F6F7F7F7E9E9E9EBEBEBEAEAEAE8E8E8E6E6E6E3E3E3E6E6E6E6 - E6E6BDBDBDBBBBBBE4E4E4F5F5F5F5F5F5F7F7F7F8F8F8F7F7F7F8F8F8F7F7F7 - F5F5F5F5F5F5E6E6E6D2D2D2E2E2E2F4F4F4F6F6F6FFFFFFFCFCFCE7E7E7E9E9 - E9E8E8E8E9E9E9DEDEDEFFFFFFFFFFFFE9E9E9EBEBEBEBEBEBEBEBEBEEEEEEEF - EFEFECECECE9E9E9E9E9E9E9E9E9E4E4E4BCBCBCBCBCBCE8E8E8ECECECFFFFFF - FFFFFFEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEBEBEBECECECFDFDFDEEEEEEF1F1 - F1F6F6F6E8E8E8E8E8E8E9E9E9E9E9E9ECECECFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFC8C8C8DDDDDDF2F2F2DEDEDEF5F5F5FAFAFAE8E8E8E8E8E8E7E7E7 - E8E8E8E9E9E9E9E9E9E9E9E9F8F8F8FBFBFBFBFBFBFFFFFFFFFFFFEDEDEDF0F0 - F0EFEFEFEBEBEBEAEAEAE8E8E8E2E2E2E0E0E0E0E0E0E4E4E4E8E8E8EAEAEAFF - FFFFF3F3F3EAEAEAE6E6E6E8E8E8D1D1D1E2E2E2F8F8F8F8F8F8F7F7F7F9F9F9 - FBFBFBFCFCFCFFFFFFFFFFFFFBFBFBECECECEAEAEAEBEBEBEAEAEAE8E8E8CCCC - CCD5D5D5F1F1F1F5F5F5FAFAFAFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFECECECE6 - E6E6E6E6E6E5E5E5E6E6E6E3E3E3E0E0E0F3F3F3FFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAF9F9F9F8F8F8F9F9F9F9F9 - F9FAFAFAEAEAEAD4D4D4E6E6E6FFFFFFFAFAFAEEEEEEFCFCFCFBFBFBFBFBFBFB - FBFBFCFCFCFDFDFDFCFCFCFCFCFCFCFCFCFDFDFDFBFBFBE6E6E6E6E6E6E5E5E5 - C0C0C0C0C0C0E1E1E1EBEBEBECECECEAEAEAEAEAEAEAEAEAE7E7E7E8E8E8EAEA - EAE9E9E9EAEAEADDDDDDD0D0D0C1C1C1D9D9D9F6F6F6F9F9F9F7F7F7F5F5F5F4 - F4F4F7F7F7F9F9F9FFFFFFFFFFFFEBEBEBEBEBEBEBEBEBF0F0F0EDEDEDE7E7E7 - E2E2E2C2C2C2BFBFBFD0D0D0D9D9D9E6E6E6D7D7D7C6C6C6B1B1B1C1C1C1E6E6 - E6D7D7D7C3C3C3C0C0C0D5D5D5E7E7E7E6E6E6E4E4E4E0E0E0DFDFDFE0E0E0E1 - E1E1E3E3E3C9C9C9D9D9D9F9F9F9F8F8F8FDFDFDFEFEFEF9F9F9EDEDEDECECEC - EBEBEBDDDDDDBEBEBED7D7D7F3F3F3F7F7F7F8F8F8F8F8F8F7F7F7F8F8F8F9F9 - F9FBFBFBFFFFFFFFFFFFE9E9E9E6E6E6E5E5E5C2C2C2E4E4E4D1D1D1D0D0D0F8 - F8F8FDFDFDFBFBFBF7F7F7F8F8F8F8F8F8F8F8F8F6F6F6F5F5F5F6F6F6F5F5F5 - F8F8F8F9F9F9F9F9F9F8F8F8F8F8F8F8F8F8F8F8F8FFFFFFFFFFFFEDEDEDE7E7 - E7E8E8E8E9E9E9E6E6E6CDCDCDB4B4B4939393ACACACE1E1E1F8F8F8F8F8F8F9 - F9F9F9F9F9FDFDFDFFFFFFFFFFFFFBFBFBE7E7E7E7E7E7E7E7E7E6E6E6D0D0D0 - 9F9F9FB5B5B5E6E6E6FEFEFEFFFFFFFFFFFFFDFDFDF8F8F8F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7EAEAEAE8E8E8E6E6E6E4E4E4E4E4E4D5D5D5BD - BDBDA8A8A8D1D1D1F5F5F5F5F5F5F5F5F5F7F7F7F6F6F6F4F4F4F5F5F5F4F4F4 - F1F1F1F4F4F4F7F7F7F3F3F3F6F6F6FAFAFAFAFAFAFDFDFDFAFAFAD5D5D5D5D5 - D5D9D9D9C8C8C8B4B4B4DFDFDFE2E2E2CCCCCCCCCCCCDADADAEBEBEBEFEFEFEF - EFEFEBEBEBE9E9E9E9E9E9E4E4E4CCCCCCACACACD5D5D5F9F9F9FAFAFAFFFFFF - FFFFFFEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE9E9E9DBDBDBCCCCCCB0B0B0CDCD - CDF2F2F2E8E8E8E8E8E8E9E9E9E9E9E9E9E9E9F9F9F9FFFFFFFFFFFFFFFFFFFF - FFFFC9C9C9AFAFAFE2E2E2F7F7F7F5F5F5FFFFFFFDFDFDEAEAEAE9E9E9E8E8E8 - E9E9E9EAEAEAEAEAEAE9E9E9EAEAEAE8E8E8E9E9E9FFFFFFFFFFFFEEEEEEF3F3 - F3F1F1F1EEEEEEECECECE9E9E9E6E6E6E4E4E4E7E7E7EAEAEAEAEAEAEBEBEBFF - FFFFF9F9F9FFFFFFF3F3F3E6E6E6CFCFCFE0E0E0F7F7F7F8F8F8F9F9F9FAFAFA - FAFAFAFBFBFBFFFFFFFFFFFFECECECEAEAEAEAEAEAEAEAEAEAEAEAE8E8E8C8C8 - C8D3D3D3F1F1F1F7F7F7FCFCFCFBFBFBFFFFFFFFFFFFFFFFFFF9F9F9E7E7E7E4 - E4E4E4E4E4E6E6E6E7E7E7E4E4E4DEDEDEE7E7E7EEEEEEEDEDEDEEEEEEEEEEEE - EEEEEEEEEEEEE6E6E6F3F3F3FDFDFDFAFAFAFAFAFAFBFBFBFAFAFAFCFCFCF9F9 - F9FAFAFAF9F9F9F4F4F4F9F9F9FFFFFFEFEFEFE1E1E1FEFEFEFFFFFFFFFFFFFE - FEFEFEFEFEFDFDFDFCFCFCFDFDFDFCFCFCFDFDFDFBFBFBF9F9F9F7F7F7F3F3F3 - C5C5C5D3D3D3F4F4F4F8F8F8EDEDEDEAEAEAEAEAEAEAEAEAE7E7E7E8E8E8DEDE - DED1D1D1D0D0D0C5C5C5DBDBDBE6E6E6E8E8E8F5F5F5F8F8F8F6F6F6F8F8F8F7 - F7F7F7F7F7FFFFFFFFFFFFFFFFFFEBEBEBEBEBEBEBEBEBEDEDEDECECECE6E6E6 - E1E1E1C3C3C3D2D2D2F1F1F1F4F4F4F2F2F2E1E1E1D4D4D4D6D6D6E7E7E7F7F7 - F7E4E4E4D2D2D2D1D1D1E4E4E4D4D4D4B8B8B8B5B5B5B5B5B5B9B9B9BCBCBCD1 - D1D1E5E5E5DADADAE7E7E7F4F4F4F5F5F5FAFAFAF7F7F7F1F1F1FFFFFFECECEC - C9C9C9B7B7B7C3C3C3DFDFDFF4F4F4F7F7F7F5F5F5F7F7F7F8F8F8F8F8F8F8F8 - F8FFFFFFFFFFFFFFFFFFEFEFEFF0F0F0EDEDEDC9C9C9E7E7E7D8D8D8D4D4D4F9 - F9F9FDFDFDFBFBFBF8F8F8F9F9F9F8F8F8FFFFFFFFFFFFFFFFFFFFFFFFFEFEFE - FEFEFEFCFCFCF8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F9F9F9D1D1D1B5B5 - B5D0D0D0CACACAA9A9A9888888A5A5A5C2C2C2DFDFDFFAFAFAFCFCFCFBFBFBFA - FAFAF8F8F8FFFFFFFFFFFFFFFFFFE9E9E9E7E7E7E7E7E7E6E6E6E4E4E4B7B7B7 - B2B2B2DFDFDFF7F7F7FDFDFDFCFCFCF9F9F9F7F7F7F5F5F5F5F5F5F8F8F8F8F8 - F8F7F7F7F7F7F7F7F7F7F7F7F7FFFFFFF9F9F9E7E7E7E5E5E5D3D3D3AAAAAAB7 - B7B7CFCFCFE5E5E5F6F6F6F7F7F7F7F7F7F8F8F8F7F7F7F5F5F5F7F7F7F7F7F7 - F6F6F6F9F9F9FCFCFCF5F5F5F6F6F6F9F9F9F9F9F9FCFCFCFBFBFBE4E4E4E3E3 - E3C9C9C9BCBCBCCECECEE1E1E1E2E2E2DADADAEAEAEAFFFFFFFBFBFBF0F0F0EE - EEEEEAEAEAE9E9E9E8E8E8CFCFCFAAAAAABFBFBFE9E9E9F9F9F9F8F8F8FFFFFF - FFFFFFECECECEAEAEAEAEAEAEAEAEAEAEAEADADADABDBDBDC2C2C2D0D0D0E0E0 - E0F0F0F0EFEFEFE4E4E4E9E9E9E9E9E9E9E9E9ECECECF3F3F3F1F1F1FAFAFAE5 - E5E59F9F9FCACACAF9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFCFCFCE9E9E9E9E9E9 - EBEBEBEDEDEDEEEEEEEAEAEAE7E7E7E7E7E7E7E7E7F7F7F7E9E9E9CACACADCDC - DCEDEDEDEEEEEEEDEDEDECECECECECECEAEAEAE9E9E9EAEAEAEAEAEAEBEBEBFF - FFFFF7F7F7FFFFFFFEFEFEE6E6E6E2E2E2CECECEE2E2E2F9F9F9F9F9F9F8F8F8 - F9F9F9FAFAFAFFFFFFFFFFFFEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAD9D9D9B7B7 - B7D5D5D5F5F5F5FBFBFBFCFCFCFFFFFFFFFFFFFFFFFFE7E7E7E7E7E7E4E4E4E2 - E2E2E6E6E6E8E8E8E9E9E9E6E6E6E1E1E1E7E7E7EDEDEDEDEDEDE2E2E2D7D7D7 - D9D9D9DADADAD1D1D1E6E6E6F9F9F9F7F7F7FAFAFAFBFBFBF9F9F9F9F9F9F8F8 - F8F8F8F8F8F8F8F7F7F7FBFBFBFFFFFFE6E6E6DFDFDFFAFAFAFDFDFDFCFCFCFE - FEFEFDFDFDFCFCFCFFFFFFFFFFFFFBFBFBFBFBFBFCFCFCFAFAFAF7F7F7F8F8F8 - E9E9E9E8E8E8F7F7F7F9F9F9FFFFFFF9F9F9EAEAEAEAEAEAE7E7E7E7E7E7D2D2 - D2CDCDCDDADADADFDFDFFFFFFFFFFFFFFFFFFFFFFFFFF4F4F4F4F4F4F6F6F6F5 - F5F5FFFFFFFFFFFFFFFFFFFFFFFFEDEDEDEBEBEBEBEBEBEBEBEBEBEBEBE7E7E7 - E2E2E2C7C7C7D8D8D8F6F6F6F6F6F6F3F3F3F3F3F3F7F7F7F8F8F8F7F7F7F5F5 - F5F7F7F7F8F8F8F8F8F8F8F8F8E4E4E4CCCCCCCBCBCBCBCBCBCCCCCCCCCCCCE2 - E2E2DBDBDBDCDCDCEAEAEAF4F4F4F4F4F4FBFBFBF5F5F5F3F3F3FFFFFFD6D6D6 - BCBCBCD1D1D1DEDEDEE9E9E9F0F0F0EEEEEEEFEFEFF7F7F7F7F7F7F6F6F6FFFF - FFFFFFFFFFFFFFFDFDFDF3F3F3F2F2F2D9D9D9B5B5B5D7D7D7E6E6E6E7E7E7F7 - F7F7FBFBFBF7F7F7F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFC - FEFEFEFBFBFBF7F7F7F7F7F7F7F7F7F8F8F8F7F7F7F5F5F5F3F3F3DBDBDBC1C1 - C1D8D8D8A3A3A39F9F9FBFBFBFDDDDDDF7F7F7F9F9F9FEFEFEFDFDFDFAFAFAF8 - F8F8FBFBFBFFFFFFFFFFFFF9F9F9E6E6E6E6E6E6E5E5E5E3E3E3CCCCCC9B9B9B - C8C8C8F3F3F3F7F7F7FDFDFDF9F9F9F5F5F5F5F5F5F5F5F5F5F5F5F3F3F3F4F4 - F4F7F7F7F7F7F7F7F7F7F7F7F7FFFFFFFCFCFCE9E9E9E8E8E8C1C1C1BABABAE1 - E1E1F7F7F7F8F8F8F8F8F8F9F9F9FAFAFAFCFCFCFCFCFCFBFBFBFCFCFCFBFBFB - FBFBFBFBFBFBFDFDFDF7F7F7F6F6F6F8F8F8F9F9F9F9F9F9FBFBFBF7F7F7F4F4 - F4E5E5E5DFDFDFF0F0F0F5F5F5F7F7F7FFFFFFFFFFFFFFFFFFFDFDFDF0F0F0EC - ECECE7E7E7E7E7E7D3D3D3A6A6A6BABABAE6E6E6FBFBFBFCFCFCFCFCFCFFFFFF - FFFFFFEBEBEBEAEAEAEAEAEAEAEAEADBDBDBBCBCBCCACACAE1E1E1EFEFEFEDED - EDEDEDEDF1F1F1F7F7F7DCDCDCDADADAE9E9E9E9E9E9ECECECEAEAEAD3D3D3AC - ACACB2B2B2DEDEDEF9F9F9F9F9F9FAFAFAFDFDFDFFFFFFFBFBFBE9E9E9EAEAEA - EBEBEBEEEEEEEDEDEDE7E7E7E7E7E7E5E5E5E4E4E4E1E1E1C3C3C3C3C3C3E2E2 - E2EAEAEAECECECEFEFEFEFEFEFEDEDEDEBEBEBEEEEEEEDEDEDEAEAEAEAEAEAFF - FFFFF4F4F4FDFDFDF6F6F6E7E7E7D0D0D0A3A3A3CDCDCDF8F8F8F8F8F8F8F8F8 - F9F9F9F9F9F9FFFFFFF1F1F1DEDEDEEAEAEAEAEAEADDDDDDCFCFCFB8B8B8C6C6 - C6E9E9E9F8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFBFBFBE7E7E7E6E6E6E4E4E4E3 - E3E3E7E7E7E9E9E9E5E5E5D3D3D3C3C3C3CCCCCCD3D3D3D3D3D3C6C6C6D2D2D2 - E4E4E4E4E4E4E2E2E2ECECECF4F4F4F4F4F4F7F7F7F8F8F8F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F7F7F7F7F7F7F5F5F5E9E9E9E4E4E4F3F3F3F7F7F7F7F7F7F8 - F8F8FCFCFCFFFFFFFFFFFFFEFEFEFDFDFDFFFFFFFFFFFFFDFDFDF8F8F8F9F9F9 - F7F7F7F6F6F6F7F7F7F9F9F9FFFFFFF6F6F6E7E7E7E7E7E7E4E4E4DADADAC5C5 - C5D9D9D9F2F2F2FFFFFFFFFFFFFFFFFFFCFCFCF8F8F8FFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFECECECEBEBEBECECECEDEDEDEBEBEBEBEBEBE9E9E9 - D8D8D8B9B9B9D8D8D8F3F3F3F1F1F1F0F0F0F3F3F3F5F5F5F7F7F7F7F7F7F6F6 - F6F7F7F7F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F4F4F4F1F1F1F0F0F0F3 - F3F3E6E6E6F1F1F1F7F7F7D9D9D9DFDFDFEFEFEFEFEFEFF3F3F3F9F9F9E2E2E2 - DEDEDEF0F0F0EBEBEBECECECF2F2F2F1F1F1F7F7F7F9F9F9FCFCFCFFFFFFFFFF - FFFFFFFFFBFBFBECECECEDEDEDECECECC3C3C3C5C5C5FCFCFCFFFFFFF7F7F7F8 - F8F8FBFBFBF7F7F7F5F5F5FFFFFFFFFFFFFFFFFFFBFBFBEBEBEBE9E9E9EAEAEA - FFFFFFFFFFFFFFFFFFFFFFFFF7F7F7F8F8F8F5F5F5F4F4F4F1F1F1F1F1F1F0F0 - F0F0F0F0DADADADEDEDEF9F9F9FCFCFCFEFEFEFFFFFFFFFFFFFCFCFCF8F8F8F7 - F7F7FFFFFFFFFFFFFFFFFFE8E8E8E6E6E6E6E6E6E6E6E6E3E3E3B6B6B6B2B2B2 - DEDEDEF4F4F4FBFBFBFEFEFEFBFBFBF6F6F6F6F6F6F5F5F5F5F5F5F0F0F0F0F0 - F0F5F5F5F7F7F7F7F7F7F7F7F7F9F9F9F5F5F5E7E7E7D6D6D6ABABABCECECEF5 - F5F5F7F7F7F7F7F7F8F8F8F9F9F9F9F9F9FEFEFEFCFCFCF9F9F9FCFCFCFCFCFC - F9F9F9F9F9F9FCFCFCF8F8F8F7F7F7FAFAFAFBFBFBFBFBFBFFFFFFFBFBFBFAFA - FAF9F9F9F5F5F5F5F5F5F7F7F7F5F5F5FFFFFFFFFFFFFCFCFCECECECEDEDEDE8 - E8E8D7D7D7C6C6C6A8A8A8B6B6B6E2E2E2F7F7F7FCFCFCFCFCFCFCFCFCFFFFFF - FFFFFFEAEAEAE9E9E9E7E7E7E7E7E7CACACAC9C9C9E7E7E7EEEEEEEFEFEFF0F0 - F0F2F2F2F9F9F9FDFDFDF3F3F3EAEAEAE9E9E9E9E9E9EAEAEAD5D5D5AFAFAFBC - BCBCDCDCDCF4F4F4FAFAFAF9F9F9F9F9F9F9F9F9F8F8F8F8F8F8EAEAEAE9E9E9 - E9E9E9EDEDEDEAEAEAE5E5E5E2E2E2E0E0E0E1E1E1E2E2E2C7C7C7D4D4D4F1F1 - F1F7F7F7F4F4F4F8F8F8EFEFEFEAEAEAEAEAEAECECECEBEBEBEEEEEEF2F2F2FF - FFFFF4F4F4F4F4F4F5F5F5E6E6E6C0C0C0BCBCBCE6E6E6FAFAFAF9F9F9FAFAFA - F9F9F9F9F9F9FFFFFFF0F0F0ECECECDEDEDECDCDCDBDBDBDC8C8C8D1D1D1E5E5 - E5F7F7F7F7F7F7FFFFFFFFFFFFFFFFFFFCFCFCE9E9E9E3E3E3E2E2E2E2E2E2E6 - E6E6E9E9E9D8D8D8BFBFBFB1B1B1C1C1C1D3D3D3DADADADBDBDBDCDCDCEDEDED - FBFBFBF8F8F8F5F5F5F5F5F5F5F5F5F3F3F3F4F4F4F6F6F6F6F6F6F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F5F5F5F5F5F5F1F1F1EFEFEFF4F4F4F7F7F7F7F7F7F7 - F7F7FBFBFBFEFEFEFFFFFFFCFCFCFCFCFCFDFDFDFDFDFDF8F8F8F3F3F3F2F2F2 - F0F0F0EEEEEEF1F1F1F6F6F6F5F5F5F4F4F4DADADACCCCCCCCCCCCC1C1C1CDCD - CDF2F2F2FFFFFFFFFFFFFFFFFFFCFCFCEDEDEDE9E9E9F7F7F7FFFFFFFFFFFFFF - FFFFFFFFFFF8F8F8E7E7E7E7E7E7E5E5E5E9E9E9EAEAEAE9E9E9DEDEDED0D0D0 - BBBBBBC6C6C6E6E6E6F0F0F0EEEEEEF1F1F1F5F5F5F6F6F6F7F7F7F7F7F7F8F8 - F8FAFAFAFBFBFBFBFBFBF9F9F9F8F8F8F8F8F8F5F5F5F4F4F4F1F1F1F4F4F4F7 - F7F7F7F7F7FFFFFFFFFFFFC7C7C7E4E4E4FFFFFFF1F1F1F5F5F5FCFCFCF3F3F3 - EBEBEBECECECEDEDEDF4F4F4F9F9F9FAFAFAFDFDFDFFFFFFFFFFFFFFFFFFFFFF - FFF8F8F8EBEBEBEAEAEAD7D7D7C3C3C3B0B0B0E7E7E7FFFFFFF8F8F8E4E4E4F9 - F9F9FAFAFAF9F9F9FFFFFFFFFFFFFFFFFFEBEBEBECECECE9E9E9E6E6E6E6E6E6 - F3F3F3FEFEFEFFFFFFE4E4E4E5E5E5F7F7F7F4F4F4F2F2F2F4F4F4F7F7F7F6F6 - F6F8F8F8FBFBFBFCFCFCFCFCFCFEFEFEFFFFFFFFFFFFFFFFFFFAFAFAF8F8F8F9 - F9F9FFFFFFFFFFFFF8F8F8E6E6E6E6E6E6E7E7E7E4E4E4DFDFDFB7B7B7CACACA - EFEFEFF5F5F5FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4F4F4F1F1F1F3F3 - F3F6F6F6F7F7F7F7F7F7F7F7F7F6F6F6F4F4F4F4F4F4BFBFBFBABABAE1E1E1F5 - F5F5F7F7F7F7F7F7F8F8F8F8F8F8FAFAFAFEFEFEFCFCFCFBFBFBFDFDFDFBFBFB - FBFBFBFBFBFBFCFCFCF8F8F8F7F7F7F9F9F9FCFCFCFFFFFFFFFFFFFEFEFEFBFB - FBFBFBFBF8F8F8F8F8F8F8F8F8F7F7F7FFFFFFFFFFFFFCFCFCEAEAEAEDEDEDDB - DBDBB7B7B7B9B9B9C8C8C8E2E2E2F7F7F7F9F9F9FDFDFDFDFDFDFBFBFBFFFFFF - FFFFFFEAEAEAEAEAEAE7E7E7DADADAC0C0C0D8D8D8F0F0F0EBEBEBF0F0F0F1F1 - F1F5F5F5FCFCFCFFFFFFFFFFFFFDFDFDF3F3F3D9D9D9C8C8C8B2B2B2C1C1C1E1 - E1E1F0F0F0F7F7F7FAFAFAF9F9F9FBFBFBF9F9F9F9F9F9F8F8F8F7F7F7D5D5D5 - C6C6C6D9D9D9E7E7E7E2E2E2DBDBDBD9D9D9D0D0D0C3C3C3B0B0B0D4D4D4F4F4 - F4F8F8F8FFFFFFFFFFFFECECECEBEBEBEAEAEAEAEAEAEAEAEAEEEEEEF3F3F3FF - FFFFF0F0F0F0F0F0F0F0F0EEEEEEC1C1C1D3D3D3F5F5F5F5F5F5F8F8F8FBFBFB - F9F9F9FBFBFBFFFFFFFCFCFCF9F9F9EAEAEAD8D8D8D6D6D6E5E5E5F1F1F1F5F5 - F5F8F8F8F8F8F8FFFFFFFFFFFFF8F8F8EAEAEAE5E5E5E2E2E2E4E4E4E6E6E6E8 - E8E8E9E9E9C3C3C3BABABAD3D3D3E6E6E6F1F1F1F4F4F4F5F5F5F9F9F9FFFFFF - FFFFFFFFFFFFF5F5F5F5F5F5F5F5F5F2F2F2F3F3F3F4F4F4F5F5F5F6F6F6F6F6 - F6F6F6F6F6F6F6F6F6F6F6F6F6F5F5F5F2F2F2F3F3F3F6F6F6F6F6F6F6F6F6F7 - F7F7F8F8F8F8F8F8F9F9F9FAFAFAF8F8F8F8F8F8F7F7F7F0F0F0F1F1F1F3F3F3 - F2F2F2F3F3F3F5F5F5F7F7F7F5F5F5F5F5F5E9E9E9D9D9D9D8D8D8D9D9D9E6E6 - E6FFFFFFFFFFFFFFFFFFFBFBFBEDEDEDEAEAEAE7E7E7EAEAEAF0F0F0F1F1F1ED - EDEDE7E7E7E6E6E6E6E6E6E6E6E6E2E2E2E4E4E4E6E6E6E8E8E8D0D0D0CCCCCC - D5D5D5E5E5E5F7F7F7F4F4F4F4F4F4F7F7F7F9F9F9F9F9F9F9F9F9F9F9F9FAFA - FAFFFFFFFFFFFFFFFFFFF8F8F8F8F8F8F7F7F7F5F5F5F5F5F5F4F4F4F8F8F8FB - FBFBFEFEFEFFFFFFFFFFFFC9C9C9FAFAFAFBFBFBE6E6E6F7F7F7FFFFFFFFFFFF - EBEBEBF0F0F0F4F4F4FAFAFAFBFBFBFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFF5F5 - F5ECECECEAEAEAD6D6D6ADADADBEBEBED3D3D3FFFFFFFFFFFFD2D2D2D0D0D0F9 - F9F9F8F8F8FFFFFFFFFFFFFFFFFFF9F9F9E9E9E9ECECECEAEAEAE7E7E7E6E6E6 - E4E4E4E7E7E7DADADAB2B2B2D1D1D1F6F6F6F7F7F7F5F5F5F7F7F7F8F8F8F7F7 - F7FAFAFAFCFCFCFCFCFCFCFCFCFEFEFEFFFFFFFFFFFFFFFFFFF8F8F8F9F9F9F9 - F9F9FFFFFFFFFFFFE0E0E0DFDFDFE1E1E1E1E1E1DFDFDFD1D1D1A7A7A7CECECE - F3F3F3F7F7F7FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFECECECE6E6E6F1F1F1F1F1 - F1F4F4F4F7F7F7F7F7F7F6F6F6F5F5F5F6F6F6F6F6F6E4E4E4E4E4E4F6F6F6F7 - F7F7F7F7F7F7F7F7F8F8F8F8F8F8FCFCFCFCFCFCFAFAFAFBFBFBFDFDFDFDFDFD - FBFBFBFAFAFAFCFCFCFAFAFAF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFDFDFDF8F8 - F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8FFFFFFFFFFFFFCFCFCEAEAEADEDEDEBA - BABABCBCBCDBDBDBEFEFEFF7F7F7F9F9F9F9F9F9FEFEFEFEFEFEF9F9F9FFFFFF - F8F8F8EAEAEAE9E9E9E6E6E6CDCDCDCCCCCCE2E2E2EAEAEAECECECF1F1F1F0F0 - F0F5F5F5FCFCFCFFFFFFFFFFFFFBFBFBF5F5F5E5E5E5D3D3D3D3D3D3E6E6E6F3 - F3F3F3F3F3F8F8F8F9F9F9F9F9F9FBFBFBFBFBFBFBFBFBFAFAFAF7F7F7E4E4E4 - D5D5D5E5E5E5D4D4D4B7B7B7B3B3B3B7B7B7ABABABBABABACCCCCCE2E2E2F4F4 - F4F7F7F7FFFFFFFFFFFFE9E9E9EAEAEAE9E9E9E9E9E9E9E9E9E9E9E9E9E9E9FF - FFFFF2F2F2F2F2F2F0F0F0EDEDEDDFDFDFE4E4E4F4F4F4F3F3F3F7F7F7FBFBFB - FBFBFBFEFEFEFFFFFFFFFFFFFDFDFDF8F8F8F4F4F4F4F4F4F5F5F5F5F5F5F7F7 - F7F8F8F8F8F8F8FFFFFFFFFFFFEAEAEAE9E9E9E7E7E7E7E7E7E8E8E8E9E9E9E9 - E9E9D6D6D6AAAAAACFCFCFF5F5F5F6F6F6F5F5F5F7F7F7FAFAFAFFFFFFFFFFFF - FFFFFFFCFCFCF5F5F5F5F5F5F4F4F4F0F0F0F1F1F1F2F2F2F3F3F3F3F3F3F2F2 - F2F4F4F4F5F5F5F6F6F6F6F6F6F4F4F4F4F4F4F5F5F5F6F6F6F5F5F5F7F7F7F7 - F7F7F7F7F7F7F7F7FBFBFBFBFBFBF8F8F8F8F8F8F3F3F3F1F1F1F6F6F6F8F8F8 - F9F9F9FAFAFAFBFBFBFBFBFBFBFBFBF8F8F8F6F6F6F4F4F4F4F4F4F4F4F4FFFF - FFFFFFFFFFFFFFECECECE9E9E9E9E9E9E8E8E8E7E7E7EAEAEAEDEDEDECECECE9 - E9E9E6E6E6E6E6E6E4E4E4E4E4E4E2E2E2E2E2E2E4E4E4DADADAC1C1C1DADADA - F0F0F0F2F2F2F7F7F7F5F5F5F7F7F7F7F7F7F8F8F8F8F8F8F8F8F8F9F9F9FBFB - FBFFFFFFFFFFFFE8E8E8E2E2E2F7F7F7F6F6F6F6F6F6F7F7F7F7F7F7F9F9F9FC - FCFCFFFFFFFFFFFFFFFFFFCCCCCCFBFBFBE9E9E9D3D3D3F8F8F8FFFFFFDDDDDD - D9D9D9F4F4F4F8F8F8FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECECECEAEA - EAE9E9E9D5D5D5A9A9A9BDBDBDE6E6E6F7F7F7FFFFFFF9F9F9D5D5D5E6E6E6FA - FAFAFFFFFFFFFFFFFFFFFFFBFBFBEAEAEAE8E8E8E9E9E9EAEAEAE9E9E9E7E7E7 - E7E7E7E7E7E7DADADACCCCCCDFDFDFF7F7F7F9F9F9F5F5F5F7F7F7F8F8F8F8F8 - F8FCFCFCFCFCFCFCFCFCFDFDFDFFFFFFFFFFFFFFFFFFFCFCFCF9F9F9F9F9F9F7 - F7F7FFFFFFF5F5F5E1E1E1E2E2E2E5E5E5D7D7D7C4C4C4AFAFAFBBBBBBE2E2E2 - F8F8F8FAFAFAFEFEFEFFFFFFFFFFFFEDEDEDEDEDEDE0E0E0F2F2F2FDFDFDF4F4 - F4F3F3F3F5F5F5F7F7F7F5F5F5F6F6F6F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F7 - F7F7F5F5F5F7F7F7F8F8F8FAFAFAFDFDFDFAFAFAF7F7F7F7F7F7F8F8F8FAFAFA - F9F9F9FAFAFAFDFDFDFCFCFCFBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBFBFB - FBFAFAFAF8F8F8F8F8F8F8F8F8F8F8F8FFFFFFFFFFFFECECECE9E9E9CDCDCDC0 - C0C0DADADAEEEEEEF4F4F4F8F8F8F9F9F9FBFBFBFFFFFFFDFDFDF7F7F7F7F7F7 - F7F7F7DBDBDBD8D8D8D3D3D3B9B9B9D1D1D1E7E7E7EBEBEBF0F0F0F6F6F6F5F5 - F5FAFAFAFDFDFDFCFCFCFAFAFAF9F9F9F5F5F5F3F3F3F4F4F4F4F4F4F5F5F5F4 - F4F4F5F5F5F7F7F7F8F8F8F9F9F9FFFFFFFFFFFFFFFFFFF8F8F8F7F7F7F5F5F5 - F7F7F7F5F5F5E1E1E1CBCBCBCACACACACACACCCCCCE1E1E1F1F1F1F3F3F3F6F6 - F6F8F8F8FEFEFEFFFFFFDADADAD7D7D7E9E9E9E6E6E6E6E6E6E6E6E6E6E6E6FF - FFFFF6F6F6F3F3F3F0F0F0EFEFEFF3F3F3F6F6F6F7F7F7F5F5F5FDFDFDFFFFFF - FEFEFEFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8F7F7F7F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F5F5FFFFFFFFFFFFE9E9E9E8E8E8E8E8E8E9E9E9EAEAEAE9E9E9D7 - D7D7ADADADBCBCBCE5E5E5F7F7F7F5F5F5F6F6F6F8F8F8FAFAFAFFFFFFFFFFFF - FDFDFDE9E9E9E6E6E6FEFEFEFDFDFDF1F1F1F2F2F2F1F1F1F3F3F3F3F3F3F2F2 - F2F4F4F4F5F5F5F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F5F5F5F5F5F5F7F7F7F8 - F8F8F7F7F7F9F9F9FEFEFEFAFAFAF9F9F9F9F9F9F5F5F5F4F4F4F8F8F8F9F9F9 - F9F9F9FAFAFAFBFBFBFEFEFEFEFEFEFBFBFBF7F7F7F6F6F6F5F5F5F7F7F7FFFF - FFFFFFFFF8F8F8E9E9E9E9E9E9E9E9E9E7E7E7E7E7E7EAEAEAEAEAEAEAEAEAE6 - E6E6E2E2E2E3E3E3E4E4E4E4E4E4E2E2E2E2E2E2D7D7D7BDBDBDCCCCCCE8E8E8 - F0F0F0F2F2F2F7F7F7F6F6F6F7F7F7F7F7F7F8F8F8F7F7F7F8F8F8F8F8F8FFFF - FFFFFFFFFFFFFFBABABACBCBCBF6F6F6F7F7F7F7F7F7F8F8F8F9F9F9FBFBFBFF - FFFFFFFFFFFFFFFFFFFFFFDBDBDBF9F9F9FBFBFBF8F8F8FFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEAEAEAEAEAEAE7E7 - E7D4D4D4ABABABBCBCBCE6E6E6F7F7F7F7F7F7F7F7F7F7F7F7D5D5D5C2C2C2E6 - E6E6FFFFFFFFFFFFFCFCFCEDEDEDEAEAEAEAEAEAE9E9E9EDEDEDEDEDEDE9E9E9 - E8E8E8E7E7E7E7E7E7D0D0D0E0E0E0F8F8F8F8F8F8F5F5F5F5F5F5F7F7F7F9F9 - F9FCFCFCFCFCFCFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F8F8F8F7F7F7F5 - F5F5F5F5F5FFFFFFF7F7F7EAEAEAEAEAEACACACAC1C1C1D0D0D0E1E1E1F4F4F4 - F7F7F7F9F9F9FCFCFCFFFFFFFFFFFFEBEBEBEBEBEBEBEBEBF5F5F5E8E8E8E6E6 - E6F3F3F3F5F5F5F7F7F7F7F7F7F7F7F7F8F8F8F8F8F8F8F8F8F8F8F8F7F7F7F5 - F5F5F6F6F6F7F7F7F8F8F8FCFCFCFCFCFCF8F8F8F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F8F8F8FAFAFAF9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7F8F8 - F8F9F9F9F9F9F9F8F8F8F8F8F8F6F6F6FFFFFFECECECCCCCCCCCCCCCB8B8B8CE - CECEECECECF1F1F1F6F6F6F9F9F9FAFAFAFDFDFDFFFFFFFBFBFBF7F7F7F7F7F7 - F7F7F7E6E6E6E2E2E2C6C6C6C5C5C5E2E2E2EFEFEFF2F2F2F5F5F5FAFAFAF9F9 - F9FAFAFAFBFBFBFAFAFAF9F9F9F8F8F8F6F6F6F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F5F5F5F8F8F8FFFFFFFFFFFFFFFFFFFFFFFFF7F7F7F3F3F3F4F4F4F5F5F5 - F6F6F6F5F5F5F5F5F5F1F1F1EFEFEFEEEEEEF1F1F1F4F4F4F2F2F2F3F3F3F8F8 - F8FCFCFCFFFFFFFFFFFFE6E6E6DFDFDFCECECED0D0D0CFCFCFCFCFCFCFCFCFFF - FFFFFFFFFFF1F1F1F0F0F0F3F3F3F6F6F6F7F7F7F9F9F9F9F9F9FDFDFDFEFEFE - FEFEFEFDFDFDFCFCFCF9F9F9F8F8F8F8F8F8F6F6F6F5F5F5F3F3F3F3F3F3F3F3 - F3F4F4F4F5F5F5FFFFFFFFFFFFDADADACCCCCCCDCDCDCECECECFCFCFCECECEB6 - B6B6BCBCBCE2E2E2F7F7F7F6F6F6F5F5F5F7F7F7F8F8F8F8F8F8FFFFFFFFFFFF - E7E7E7E4E4E4E2E2E2EAEAEAE5E5E5E2E2E2EEEEEEF0F0F0F4F4F4F7F7F7F6F6 - F6F8F8F8FBFBFBF7F7F7F5F5F5F5F5F5F4F4F4F5F5F5F7F7F7F7F7F7F8F8F8F8 - F8F8F9F9F9FDFDFDFCFCFCF7F7F7F7F7F7F7F7F7F9F9F9F4F4F4F5F5F5F9F9F9 - F9F9F9FAFAFAFDFDFDFEFEFEFCFCFCF9F9F9F8F8F8F5F5F5F5F5F5F6F6F6F9F9 - F9FFFFFFF8F8F8E9E9E9E9E9E9E8E8E8E7E7E7E8E8E8E8E8E8E9E9E9E7E7E7E5 - E5E5E5E5E5E5E5E5E6E6E6E4E4E4E2E2E2D0D0D0B1B1B1C3C3C3E6E6E6F5F5F5 - F3F3F3F7F7F7F9F9F9F7F7F7F7F7F7F6F6F6F8F8F8F8F8F8FAFAFAFCFCFCFFFF - FFFFFFFFF8F8F8B9B9B9CACACAF5F5F5F5F5F5F7F7F7FAFAFAFBFBFBFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFD7D7D7F7F7F7FFFFFFF8F8F8FFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEDEDEDEBEBEBEAEAEAEAEAEAD7D7 - D7AFAFAFC0C0C0E6E6E6F9F9F9F9F9F9F8F8F8F7F7F7F7F7F7E5E5E5D1D1D1E6 - E6E6FFFFFFFBFBFBEDEDEDECECECEBEBEBEBEBEBEAEAEAEDEDEDECECECE7E7E7 - E7E7E7E6E6E6E4E4E4C0C0C0D4D4D4FAFAFAF9F9F9F7F7F7F6F6F6F6F6F6F9F9 - F9FCFCFCFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFAFAFAF7F7F7F7F7F7F7F7F7F5 - F5F5F5F5F5FFFFFFFCFCFCEDEDEDEBEBEBC8C8C8D1D1D1F1F1F1F5F5F5F7F7F7 - F8F8F8FAFAFAFCFCFCFFFFFFFFFFFFEAEAEAEBEBEBE9E9E9E7E7E7DCDCDCF7F7 - F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8F8F8F8F8F7F7F7F7F7F7F5F5F5F6 - F6F6F7F7F7F8F8F8FAFAFAFDFDFDFCFCFCF9F9F9F9F9F9F8F8F8F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFE8E8E8D6D6D6E4E4 - E4F5F5F5F5F5F5F7F7F7F7F7F7F6F6F6F7F7F7E7E7E7D8D8D8D3D3D3CDCDCDDE - DEDEEFEFEFF4F4F4F9F9F9F9F9F9FDFDFDFFFFFFFCFCFCF9F9F9F7F7F7F7F7F7 - F6F6F6F3F3F3F3F3F3E6E6E6E7E7E7F7F7F7F8F8F8F7F7F7F7F7F7F9F9F9F9F9 - F9F9F9F9F7F7F7F7F7F7F7F7F7F7F7F7F8F8F8F8F8F8F6F6F6F3F3F3F3F3F3F4 - F4F4F5F5F5F7F7F7FFFFFFFFFFFFFFFFFFFBFBFBE4E4E4E6E6E6F4F4F4F5F5F5 - F7F7F7F7F7F7F7F7F7F5F5F5F3F3F3F3F3F3F5F5F5F4F4F4F3F3F3F7F7F7FCFC - FCFFFFFFFFFFFFFCFCFCF5F5F5F2F2F2DDDDDDDEDEDEB0B0B0C6C6C6B0B0B0FF - FFFFF7F7F7F0F0F0F1F1F1F5F5F5F7F7F7F7F7F7F9F9F9F9F9F9F9F9F9F9F9F9 - F7F7F7F6F6F6F7F7F7F8F8F8F8F8F8F8F8F8F8F8F8F5F5F5F4F4F4F4F4F4F4F4 - F4F7F7F7F7F7F7FFFFFFFFFFFFCCCCCCC7C7C7D6D6D6D9D9D9D9D9D9D5D5D5CD - CDCDDEDEDEF4F4F4F7F7F7F5F5F5F6F6F6F8F8F8F8F8F8F8F8F8FFFFFFFFFFFF - E1E1E1DFDFDFD9D9D9D1D1D1C6C6C6D7D7D7FDFDFDFFFFFFF6F6F6F8F8F8FCFC - FCFFFFFFFFFFFFF9F9F9F7F7F7F5F5F5F5F5F5F7F7F7F7F7F7F7F7F7F8F8F8F8 - F8F8F9F9F9F9F9F9F7F7F7F5F5F5F5F5F5F5F5F5F7F7F7ECECECF0F0F0F9F9F9 - F9F9F9FAFAFAFDFDFDFDFDFDFBFBFBF9F9F9F9F9F9F7F7F7F5F5F5F7F7F7F8F8 - F8FFFFFFFFFFFFE9E9E9E9E9E9E7E7E7E7E7E7E7E7E7E8E8E8E9E9E9DADADADD - DDDDEBEBEBE7E7E7E2E2E2E1E1E1CCCCCCA6A6A6BDBDBDE1E1E1F6F6F6F7F7F7 - F5F5F5F7F7F7F7F7F7F7F7F7F7F7F7F6F6F6F8F8F8FAFAFAFCFCFCFFFFFFFFFF - FFFFFFFFD4D4D4A4A4A4CACACAF5F5F5F6F6F6F8F8F8FDFDFDFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFF9F9F9C5C5C5F5F5F5FFFFFFE2E2E2E6E6E6E6E6E6E5E5E5 - E9E9E9ECECECEAEAEAEBEBEBEAEAEAE9E9E9E9E9E9E9E9E9E8E8E8E9E9E9C3C3 - C3BFBFBFE7E7E7F7F7F7F8F8F8F9F9F9F8F8F8F7F7F7F7F7F7F7F7F7F7F7F7F9 - F9F9F9F9F9F9F9F9E4E4E4D7D7D7D7D7D7D5D5D5DEDEDEE9E9E9EAEAEAE8E8E8 - E8E8E8E7E7E7E6E6E6D5D5D5E7E7E7FAFAFAF8F8F8F9F9F9F6F6F6F4F4F4F9F9 - F9FEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFEFEFEF9F9F9F7F7F7F7F7F7F7F7F7F4 - F4F4F4F4F4F7F7F7FFFFFFF7F7F7E7E7E7C6C6C6D3D3D3F5F5F5F7F7F7F7F7F7 - FAFAFAFBFBFBFDFDFDFFFFFFFFFFFFECECECEAEAEAE6E6E6E7E7E7EDEDEDFEFE - FEFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8F7F7F7F5F5F5F6F6F6F7F7F7F7 - F7F7F8F8F8FAFAFAFDFDFDFDFDFDFAFAFAF8F8F8F8F8F8F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F8F8F8FFFFFFFFFFFFFFFFFFFEFEFEE9E9E9E6E6E6C5C5C5D5D5 - D5F2F2F2F1F1F1F5F5F5F7F7F7F6F6F6F8F8F8F9F9F9F7F7F7F3F3F3EFEFEFF1 - F1F1F4F4F4F7F7F7F9F9F9FAFAFAFFFFFFFFFFFFF9F9F9F9F9F9F8F8F8F6F6F6 - F4F4F4F4F4F4F5F5F5F7F7F7F7F7F7F8F8F8F7F7F7F7F7F7F8F8F8F9F9F9FBFB - FBFFFFFFFFFFFFFFFFFFF5F5F5F5F5F5F7F7F7F7F7F7F6F6F6F7F7F7F5F5F5F7 - F7F7F7F7F7FFFFFFFFFFFFFFFFFFE8E8E8E3E3E3E1E1E1E6E6E6DADADAE7E7E7 - F8F8F8F8F8F8F8F8F8F8F8F8F7F7F7F5F5F5F4F4F4F3F3F3F6F6F6FDFDFDFEFE - FEFFFFFFFFFFFFF9F9F9F7F7F7F7F7F7F4F4F4F3F3F3DCDCDCDEDEDEDFDFDFFF - FFFFECECECE8E8E8F4F4F4F6F6F6F7F7F7F7F7F7F9F9F9F8F8F8F7F7F7F7F7F7 - F4F4F4F6F6F6F9F9F9F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F7F7F7F7F7F7F5F5 - F5F7F7F7FFFFFFFFFFFFFFFFFFCCCCCCD7D7D7F3F3F3F4F4F4F2F2F2EDEDEDE9 - E9E9F0F0F0F6F6F6F5F5F5F5F5F5F7F7F7F8F8F8F9F9F9FFFFFFFFFFFFFFFFFF - D9D9D9C6C6C6BCBCBCD8D8D8C9C9C9D3D3D3FFFFFFFDFDFDF1F1F1FFFFFFFFFF - FFFFFFFFFBFBFBF6F6F6F5F5F5F5F5F5F5F5F5F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F5F5F5F5F5F5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9 - F9F9F9FBFBFBFDFDFDFCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBFBFB - FBFFFFFFFFFFFFE9E9E9E8E8E8E7E7E7E7E7E7E8E8E8EAEAEAEAEAEACFCFCFDB - DBDBDCDCDCC6C6C6C3C3C3C1C1C1A5A5A5B7B7B7E1E1E1F4F4F4FCFCFCFBFBFB - F6F6F6F6F6F6F6F6F6F6F6F6F9F9F9FBFBFBFCFCFCFDFDFDFEFEFEFCFCFCFFFF - FFE3E3E3A5A5A5B1B1B1DDDDDDF5F5F5F7F7F7F8F8F8FCFCFCFFFFFFFFFFFFFF - FFFFFFFFFFF9F9F9E9E9E9D7D7D7FFFFFFFFFFFFE4E4E4E9E9E9E9E9E9E8E8E8 - EAEAEAEAEAEAE7E7E7E9E9E9E9E9E9E7E7E7E7E7E7E7E7E7E7E7E7EAEAEAC2C2 - C2D1D1D1F7F7F7F7F7F7F8F8F8F8F8F8F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F8 - F8F8F8F8F8F9F9F9EAEAEADDDDDDE0E0E0DEDEDEE7E7E7DEDEDEE0E0E0EBEBEB - EAEAEAEAEAEAE9E9E9E9E9E9EBEBEBF8F8F8F8F8F8F8F8F8F3F3F3F3F3F3FDFD - FDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFAF9F9F9F8F8F8F7F7F7F4 - F4F4F5F5F5F8F8F8FFFFFFEAEAEACACACAB8B8B8D7D7D7F7F7F7F8F8F8F8F8F8 - F8F8F8F8F8F8FFFFFFFFFFFFFFFFFFECECECEAEAEAEBEBEBEEEEEEF3F3F3F3F3 - F3F1F1F1EEEEEEEEEEEEEEEEEEECECECEBEBEBF7F7F7F7F7F7F7F7F7F8F8F8F8 - F8F8FAFAFAFDFDFDFCFCFCFBFBFBF8F8F8F7F7F7F7F7F7F6F6F6F6F6F6F7F7F7 - F7F7F7F7F7F7F8F8F8FFFFFFFFFFFFFCFCFCE8E8E8E7E7E7E7E7E7C3C3C3D3D3 - D3F3F3F3F2F2F2F5F5F5F5F5F5F5F5F5F8F8F8F9F9F9F9F9F9F9F9F9F8F8F8F7 - F7F7F9F9F9FEFEFEFDFDFDFDFDFDFFFFFFFCFCFCF7F7F7F8F8F8F7F7F7F4F4F4 - F4F4F4F4F4F4F6F6F6F7F7F7F7F7F7F8F8F8F7F7F7F7F7F7FBFBFBFBFBFBFCFC - FCFFFFFFFFFFFFE9E9E9E2E2E2F3F3F3F5F5F5F6F6F6F8F8F8FBFBFBF9F9F9F9 - F9F9FBFBFBFFFFFFFFFFFFF7F7F7DEDEDEDCDCDCDEDEDEE4E4E4CACACAD9D9D9 - F7F7F7F7F7F7F8F8F8F8F8F8F7F7F7F4F4F4F4F4F4F7F7F7FBFBFBFEFEFEFEFE - FEFCFCFCFCFCFCF9F9F9F7F7F7F6F6F6F4F4F4F4F4F4F6F6F6F7F7F7F8F8F8FF - FFFFEAEAEAEAEAEAD9D9D9E6E6E6F7F7F7F7F7F7F9F9F9F9F9F9F8F8F8F7F7F7 - F5F5F5F6F6F6F5F5F5F7F7F7F8F8F8F8F8F8F8F8F8F7F7F7F6F6F6F5F5F5F5F5 - F5F5F5F5FFFFFFFFFFFFECECECBDBDBDD8D8D8F5F5F5F5F5F5F4F4F4EEEEEEEE - EEEEF3F3F3F5F5F5F5F5F5F7F7F7F9F9F9F9F9F9FFFFFFFFFFFFFFFFFFDFDFDF - B2B2B2A1A1A1C5C5C5D6D6D6BABABAD0D0D0FFFFFFDFDFDFDEDEDEFDFDFDFDFD - FDF9F9F9F6F6F6F5F5F5F5F5F5F5F5F5F5F5F5F7F7F7F6F6F6F6F6F6F7F7F7F7 - F7F7F8F8F8F7F7F7F9F9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9FBFBFB - FAFAFAFAFAFAFBFBFBFBFBFBFBFBFBF9F9F9FAFAFAFBFBFBFDFDFDFDFDFDFCFC - FCFFFFFFFFFFFFE8E8E8E7E7E7E7E7E7E7E7E7E9E9E9EAEAEAEAEAEACFCFCFDA - DADAE4E4E4D1D1D1D1D1D1CECECECCCCCCE1E1E1F6F6F6FCFCFCFFFFFFFDFDFD - F7F7F7F6F6F6F6F6F6F6F6F6F7F7F7F9F9F9F9F9F9F9F9F9F9F9F9F7F7F7FFFF - FFE8E8E8C5C5C5DEDEDEF3F3F3F7F7F7F7F7F7F8F8F8F9F9F9FFFFFFFFFFFFFF - FFFFE8E8E8E6E6E6E6E6E6E7E7E7F8F8F8F3F3F3E1E1E1E7E7E7E8E8E8E8E8E8 - E9E9E9E9E9E9E9E9E9E9E9E9E8E8E8E7E7E7E7E7E7E9E9E9EAEAEAE9E9E9D7D7 - D7F7F7F7FFFFFFF7F7F7F8F8F8F8F8F8F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7 - F7F7F8F8F8F7F7F7F4F4F4F6F6F6F6F6F6F4F4F4F5F5F5EAEAEAEAEAEADEDEDE - E1E1E1EEEEEEEDEDEDE9E9E9E7E7E7D5D5D5E1E1E1F6F6F6F4F4F4F8F8F8FEFE - FEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF8F8F8F8F8F8F7F7F7F7F7F7F5 - F5F5F7F7F7F7F7F7F3F3F3E3E3E3D5D5D5D7D7D7E9E9E9F8F8F8F8F8F8F8F8F8 - F7F7F7F7F7F7FFFFFFFFFFFFFDFDFDECECECECECECEFEFEFF1F1F1F1F1F1F0F0 - F0EDEDEDEAEAEAE9E9E9E9E9E9E9E9E9E9E9E9E8E8E8F1F1F1F1F1F1F3F3F3F6 - F6F6FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7FFFFFFFBFBFBE9E9E9E7E7E7E3E3E3C0C0C0D2D2 - D2F4F4F4F3F3F3F2F2F2F3F3F3F4F4F4F8F8F8F9F9F9F9F9F9FBFBFBFAFAFAF9 - F9F9FDFDFDFFFFFFFDFDFDFFFFFFFFFFFFF9F9F9F6F6F6F7F7F7F6F6F6F4F4F4 - F4F4F4F5F5F5F7F7F7F7F7F7F8F8F8F8F8F8F8F8F8F9F9F9FBFBFBFBFBFBFCFC - FCFCFCFCFCFCFCC6C6C6CECECEF3F3F3F7F7F7F9F9F9F9F9F9FCFCFCFCFCFCFC - FCFCFFFFFFFFFFFFFFFFFFE1E1E1DCDCDCE0E0E0E6E6E6E8E8E8DBDBDBE9E9E9 - F7F7F7F9F9F9F9F9F9F8F8F8F7F7F7F7F7F7F7F7F7FAFAFAFCFCFCFDFDFDFBFB - FBF9F9F9F8F8F8F7F7F7F5F5F5F5F5F5F4F4F4F4F4F4F7F7F7F8F8F8F8F8F8FF - FFFFE9E9E9DADADAB4B4B4D4D4D4F7F7F7F7F7F7F9F9F9F9F9F9F7F7F7F6F6F6 - F5F5F5F5F5F5F4F4F4F3F3F3F7F7F7F8F8F8F7F7F7F5F5F5F4F4F4F6F6F6F7F7 - F7F8F8F8FFFFFFFFFFFFEDEDEDE7E7E7F4F4F4F4F4F4F5F5F5F5F5F5F1F1F1F1 - F1F1F5F5F5F6F6F6F7F7F7F9F9F9FFFFFFFFFFFFFFFFFFFFFFFFE7E7E7A3A3A3 - B6B6B6CFCFCFE2E2E2E8E8E8D5D5D5E4E4E4F8F8F8EAEAEAF0F0F0FDFDFDFFFF - FFFFFFFFF5F5F5F6F6F6F5F5F5F4F4F4F5F5F5F4F4F4F4F4F4F5F5F5F6F6F6F7 - F7F7F7F7F7F7F7F7F8F8F8FFFFFFFFFFFFFBFBFBEEEEEEEBEBEBECECECECECEC - FAFAFAFBFBFBFCFCFCFCFCFCFBFBFBF9F9F9FBFBFBFEFEFEFDFDFDFCFCFCFDFD - FDFFFFFFFFFFFFE9E9E9E7E7E7E9E9E9EAEAEAEAEAEAEAEAEAEAEAEACECECED8 - D8D8F0F0F0EFEFEFEDEDEDECECECF0F0F0F5F5F5F9F9F9FFFFFFFFFFFFFFFFFF - FFFFFFF5F5F5F5F5F5F4F4F4F3F3F3F4F4F4F5F5F5F6F6F6F6F6F6FDFDFDFFFF - FFEFEFEFE9E9E9FBFBFBF8F8F8F8F8F8F9F9F9F9F9F9F9F9F9FFFFFFFFFFFFEC - ECECE7E7E7E4E4E4E4E4E4E2E2E2E4E4E4DEDEDEDBDBDBE6E6E6E7E7E7E6E6E6 - E5E5E5E5E5E5D5D5D5D7D7D7E8E8E8E8E8E8E9E9E9EAEAEAE9E9E9E7E7E7E7E7 - E7F8F8F8FDFDFDF9F9F9F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F8 - F8F8F9F9F9F8F8F8F7F7F7FBFBFBFAFAFAF6F6F6F6F6F6F6F6F6F4F4F4E7E7E7 - EAEAEAF0F0F0EDEDEDE2E2E2E2E2E2D1D1D1F1F1F1FFFFFFF7F7F7FBFBFBFCFC - FCFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF7F7F7F5F5F5F7F7F7F8F8F8F7F7F7F5 - F5F5F5F5F5F4F4F4EEEEEEF1F1F1F5F5F5F5F5F5F7F7F7F7F7F7F8F8F8F8F8F8 - F6F6F6F3F3F3FFFFFFFFFFFFFFFFFFEEEEEEF0F0F0F3F3F3F2F2F2EFEFEFEEEE - EEEBEBEBE9E9E9E9E9E9E9E9E9E9E9E9E7E7E7E2E2E2CFCFCFE1E1E1F6F6F6FC - FCFCFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFFFFFF - FFFFFFF7F7F7F7F7F7F7F7F7FFFFFFEAEAEAC7C7C7C2C2C2D0D0D0D3D3D3F2F2 - F2FFFFFFFFFFFFF0F0F0F2F2F2F4F4F4F8F8F8F9F9F9F9F9F9FBFBFBFBFBFBFB - FBFBFFFFFFFEFEFEF8F8F8F9F9F9FAFAFAF7F7F7F5F5F5F6F6F6F5F5F5F4F4F4 - F5F5F5F7F7F7F9F9F9F9F9F9F8F8F8F8F8F8F8F8F8F9F9F9FBFBFBFCFCFCFEFE - FEFFFFFFFFFFFFE4E4E4DFDFDFF5F5F5F9F9F9FAFAFAF9F9F9FDFDFDFFFFFFFF - FFFFFFFFFFFFFFFFF2F2F2DFDFDFDEDEDEE6E6E6ECECECEBEBEBEBEBEBECECEC - F8F8F8FFFFFFFFFFFFFFFFFFFFFFFFF9F9F9FAFAFAFCFCFCFBFBFBFBFBFBF9F9 - F9F8F8F8F7F7F7F5F5F5F4F4F4F4F4F4F3F3F3F4F4F4F7F7F7F8F8F8F8F8F8FF - FFFFDADADABABABAC1C1C1E3E3E3F7F7F7F7F7F7F8F8F8F8F8F8F7F7F7F5F5F5 - F5F5F5F5F5F5F5F5F5F1F1F1F3F3F3F7F7F7F5F5F5F3F3F3F6F6F6F8F8F8FBFB - FBFBFBFBFFFFFFFFFFFFFAFAFAF8F8F8EAEAEAE7E7E7F5F5F5F5F5F5F1F1F1F1 - F1F1F7F7F7F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFF7F7F7BCBCBCBCBCBC - E3E3E3F5F5F5F7F7F7F8F8F8F4F4F4F6F6F6FBFBFBFCFCFCFFFFFFFFFFFFFFFF - FFF9F9F9E6E6E6F4F4F4F4F4F4F2F2F2F2F2F2F3F3F3F4F4F4F5F5F5F7F7F7F7 - F7F7F6F6F6F6F6F6F6F6F6FFFFFFFFFFFFEBEBEBEBEBEBEAEAEAEAEAEAD3D3D3 - BDBDBDE5E5E5F9F9F9FCFCFCFBFBFBF9F9F9FDFDFDFEFEFEFAFAFAFCFCFCFFFF - FFFFFFFFFFFFFFECECECE9E9E9EAEAEAEAEAEAE9E9E9E9E9E9E9E9E9CECECED7 - D7D7F1F1F1F1F1F1EDEDEDF0F0F0F5F5F5F8F8F8FFFFFFFFFFFFFFFFFFFFFFFF - F8F8F8F5F5F5F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F8F8F8F5F5F5FFFFFFFFFF - FFE4E4E4DFDFDFFDFDFDF9F9F9F9F9F9F9F9F9F8F8F8F7F7F7FFFFFFFFFFFFE7 - E7E7E5E5E5E3E3E3E2E2E2E0E0E0DCDCDCBFBFBFACACACBABABABABABABABABA - BFBFBFBFBFBFACACACCDCDCDD3D3D3D3D3D3E7E7E7E9E9E9E7E7E7E7E7E7E4E4 - E4E4E4E4E9E9E9E9E9E9FFFFFFFFFFFFF7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F9 - F9F9F9F9F9F7F7F7F9F9F9FDFDFDFBFBFBF7F7F7F7F7F7F6F6F6F4F4F4F4F4F4 - F4F4F4FFFFFFF7F7F7DADADAE0E0E0E4E4E4F4F4F4E9E9E9E7E7E7F8F8F8F9F9 - F9FCFCFCFEFEFEFEFEFEFDFDFDF8F8F8F5F5F5F7F7F7FAFAFAF9F9F9F8F8F8FF - FFFFFFFFFFFFFFFFFFFFFFF7F7F7FAFAFAF9F9F9F9F9F9F9F9F9F8F8F8F7F7F7 - F4F4F4F7F7F7FFFFFFFFFFFFFFFFFFF2F2F2F1F1F1F2F2F2EFEFEFEDEDEDEBEB - EBE9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E7E7E7CDCDCDA4A4A4D3D3D3FBFBFBFF - FFFFFFFFFFFFFFFFFFFFFFEDEDEDEEEEEEEDEDEDE9E9E9E6E6E6E6E6E6F6F6F6 - E1E1E1E1E1E1F7F7F7F7F7F7F7F7F7E6E6E6D5D5D5E7E7E7FFFFFFF5F5F5F9F9 - F9FFFFFFF7F7F7F0F0F0F3F3F3F5F5F5F8F8F8FBFBFBFBFBFBFCFCFCFCFCFCFC - FCFCFFFFFFFCFCFCF7F7F7F7F7F7F7F7F7F5F5F5F1F1F1F3F3F3F3F3F3F4F4F4 - F8F8F8F8F8F8F9F9F9F9F9F9F8F8F8F8F8F8F8F8F8F8F8F8FBFBFBFCFCFCFEFE - FEFFFFFFEAEAEADFDFDFF0F0F0F5F5F5F7F7F7F7F7F7F6F6F6FBFBFBFFFFFFFF - FFFFFFFFFFFFFFFFDFDFDFD4D4D4DCDCDCE9E9E9ECECECEBEBEBEBEBEBECECEC - EDEDEDFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9FAFAFAFBFBFBFAFAFAFBFBFBFBFB - FBF8F8F8F7F7F7F6F6F6F4F4F4F2F2F2F1F1F1F4F4F4F7F7F7F8F8F8F8F8F8FF - FFFFBABABAC7C7C7E2E2E2F2F2F2F6F6F6F5F5F5F5F5F5F8F8F8F7F7F7F5F5F5 - F5F5F5F5F5F5F6F6F6F4F4F4F7F7F7F9F9F9F5F5F5F5F5F5F9F9F9FBFBFBFEFE - FEFFFFFFFFFFFFFFFFFFECECECECECECDEDEDEF7F7F7FFFFFFFFFFFFFFFFFFF5 - F5F5F8F8F8F9F9F9F9F9F9FFFFFFFFFFFFFFFFFFE3E3E3DCDCDCB5B5B5CECECE - F5F5F5F8F8F8F9F9F9F9F9F9F7F7F7F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFF - FFFAFAFAE7E7E7F5F5F5F4F4F4F1F1F1F2F2F2F5F5F5F5F5F5F7F7F7F9F9F9F8 - F8F8F8F8F8F7F7F7F8F8F8FFFFFFFFFFFFEBEBEBECECECEAEAEAE9E9E9D3D3D3 - E6E6E6F8F8F8F9F9F9FDFDFDFCFCFCF9F9F9FDFDFDFCFCFCF8F8F8FDFDFDFFFF - FFFFFFFFFFFFFFEDEDEDEAEAEAEAEAEAEAEAEAE9E9E9EAEAEAEAEAEAD0D0D0D8 - D8D8F3F3F3F0F0F0EDEDEDF4F4F4F8F8F8FAFAFAFFFFFFFFFFFFFFFFFFECECEC - E9E9E9DEDEDEE7E7E7F3F3F3F4F4F4F3F3F3F4F4F4F8F8F8FDFDFDFFFFFFFFFF - FFEAEAEAF8F8F8FFFFFFFFFFFFFCFCFCFAFAFAF7F7F7FFFFFFFFFFFFFFFFFFE4 - E4E4E3E3E3E1E1E1DEDEDEDCDCDCC1C1C18D8D8DB0B0B0D1D1D1D0D0D0D2D2D2 - D5D5D5D4D4D4D5D5D5E4E4E4E2E2E2E3E3E3E7E7E7E7E7E7E4E4E4E4E4E4E2E2 - E2E4E4E4E7E7E7E6E6E6F9F9F9FDFDFDFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9 - F9F9F8F8F8F7F7F7FBFBFBFCFCFCFFFFFFFCFCFCF6F6F6F5F5F5F4F4F4F4F4F4 - F4F4F4FFFFFFFFFFFFDEDEDEE2E2E2E6E6E6E4E4E4D7D7D7E6E6E6F8F8F8FCFC - FCFDFDFDFCFCFCFEFEFEFBFBFBF7F7F7F7F7F7FAFAFAF9F9F9FFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFF9F9F9FAFAFAFAFAFAFAFAFAFAFAFAF9F9F9F6F6F6 - F4F4F4FAFAFAFFFFFFFFFFFFF1F1F1F1F1F1EFEFEFEDEDEDECECECECECECEAEA - EAEAEAEAEAEAEAE9E9E9E9E9E9E9E9E9E7E7E7B8B8B8B6B6B6E7E7E7FCFCFCFF - FFFFFFFFFFFFFFFFFFFFFFECECECECECECEAEAEAE6E6E6E6E6E6E6E6E6D9D9D9 - B3B3B3D1D1D1F7F7F7F7F7F7F7F7F7F6F6F6F6F6F6FFFFFFFFFFFFF5F5F5EAEA - EAEAEAEAE6E6E6D2D2D2E4E4E4F4F4F4F7F7F7FDFDFDFCFCFCFCFCFCFBFBFBFC - FCFCFDFDFDF9F9F9F7F7F7F7F7F7F7F7F7F4F4F4F2F2F2F4F4F4F6F6F6F7F7F7 - F8F8F8F8F8F8F9F9F9F8F8F8FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFBFBFBFCFC - FCFAFAFAE1E1E1E0E0E0F2F2F2F2F2F2F5F5F5F6F6F6F7F7F7FFFFFFFFFFFFFF - FFFFEDEDEDDCDCDCC3C3C3BFBFBFDCDCDCEBEBEBEBEBEBEAEAEAEBEBEBEDEDED - EEEEEEFEFEFEFEFEFEF1F1F1F0F0F0F0F0F0FBFBFBFAFAFAF8F8F8FAFAFAFBFB - FBF7F7F7F7F7F7F5F5F5F3F3F3F1F1F1F2F2F2F4F4F4F7F7F7F8F8F8F8F8F8FF - FFFFD7D7D7E7E7E7F0F0F0F2F2F2F5F5F5F5F5F5F5F5F5FAFAFAF9F9F9F6F6F6 - F5F5F5F6F6F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFDFDFDFDFDFDFFFF - FFFFFFFFFFFFFFFEFEFEECECECECECECECECECFAFAFAFFFFFFFFFFFFFBFBFBFF - FFFFFFFFFFFCFCFCFCFCFCFFFFFFFFFFFFF7F7F7DFDFDFC3C3C3999999CFCFCF - F8F8F8F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFDFDFDFFFFFFFFFFFFFCFCFCFFFF - FFFFFFFFD9D9D9F5F5F5FFFFFFF3F3F3F5F5F5F7F7F7F7F7F7F9F9F9FAFAFAF8 - F8F8F8F8F8F8F8F8F8F8F8FFFFFFFFFFFFEBEBEBECECECECECECEAEAEAEAEAEA - ECECECD7D7D7E8E8E8FEFEFEFCFCFCF9F9F9FCFCFCFCFCFCF8F8F8FEFEFEFFFF - FFFFFFFFFFFFFFECECECEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEADADADAE1 - E1E1F0F0F0EBEBEBEEEEEEF7F7F7F9F9F9FAFAFAFFFFFFFFFFFFE7E7E7E1E1E1 - D7D7D7C3C3C3DBDBDBF4F4F4F4F4F4F3F3F3FFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFF1F1F1FAFAFAFFFFFFFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9E4 - E4E4E2E2E2DFDFDFDEDEDED8D8D8A4A4A4ADADADE7E7E7FDFDFDFCFCFCFDFDFD - FCFCFCFCFCFCFBFBFBFBFBFBF9F9F9FBFBFBFDFDFDE8E8E8E4E4E4E5E5E5E5E5 - E5E7E7E7E8E8E8E8E8E8E8E8E8E6E6E6F8F8F8FBFBFBFAFAFAFBFBFBFAFAFAF9 - F9F9F7F7F7F7F7F7FCFCFCFFFFFFFFFFFFFFFFFFFEFEFEFCFCFCF4F4F4F4F4F4 - F4F4F4FFFFFFFFFFFFE5E5E5E7E7E7E6E6E6E6E6E6E6E6E6D6D6D6E9E9E9FDFD - FDF7F7F7F7F7F7F7F7F7F3F3F3F3F3F3F5F5F5F7F7F7F7F7F7FFFFFFFFFFFFFF - FFFFF9F9F9EFEFEFDADADACBCBCBF0F0F0FDFDFDFBFBFBFAFAFAFAFAFAF9F9F9 - F7F7F7FBFBFBFDFDFDF9F9F9EDEDEDECECECECECECECECECECECECEBEBEBEAEA - EAEAEAEAEAEAEAE8E8E8E7E7E7E7E7E7D1D1D19F9F9FCBCBCBF9F9F9FEFEFEFF - FFFFFFFFFFFFFFFFFFFFFFEDEDEDECECECEBEBEBE6E6E6E3E3E3DEDEDED3D3D3 - BBBBBBD4D4D4F5F5F5F7F7F7F6F6F6F5F5F5F6F6F6F6F6F6FFFFFFF8F8F8EBEB - EBEAEAEAE4E4E4C0C0C0D3D3D3F5F5F5F9F9F9FEFEFEFCFCFCF9F9F9F9F9F9FA - FAFAFAFAFAF8F8F8F7F7F7F7F7F7F7F7F7F4F4F4F4F4F4F7F7F7F8F8F8F8F8F8 - F8F8F8F8F8F8FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFFFFFFFFFFFFFFFF - FFFFFFFFF0F0F0F0F0F0F4F4F4F3F3F3F7F7F7F9F9F9FBFBFBFFFFFFFFFFFFED - EDEDD1D1D1DFDFDFD1D1D1D6D6D6F4F4F4FFFFFFF1F1F1EBEBEBEDEDEDEEEEEE - EFEFEFEEEEEEEDEDEDEFEFEFF0F0F0EEEEEEECECECF7F7F7F8F8F8FAFAFAFBFB - FBF7F7F7F7F7F7F5F5F5F3F3F3F2F2F2F4F4F4F6F6F6F8F8F8F8F8F8F8F8F8FF - FFFFF1F1F1F1F1F1EEEEEEF1F1F1F4F4F4F5F5F5F6F6F6F9F9F9F9F9F9F7F7F7 - F5F5F5F6F6F6FFFFFFFFFFFFFFFFFFFFFFFFFBFBFBFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFEFEFEECECECEAEAEAEAEAEAEBEBEBECECECEBEBEBEBEBEBEBEBEBF8 - F8F8ECECECECECECFBFBFBFFFFFFEBEBEBCECECEC8C8C8989898B3B3B3E6E6E6 - F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FDFDFDFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFD9D9D9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8F8F8F8F8F8F8F8F7 - F7F7F7F7F7F8F8F8F9F9F9FFFFFFFFFFFFEDEDEDECECECEBEBEBEAEAEAEAEAEA - C1C1C1BABABAE6E6E6FBFBFBFBFBFBF9F9F9FCFCFCFDFDFDF9F9F9FFFFFFFFFF - FFFFFFFFFBFBFBE9E9E9E9E9E9EAEAEAEAEAEAEAEAEAEAEAEAE9E9E9E6E6E6DC - DCDCE2E2E2EDEDEDF4F4F4FAFAFAF9F9F9F9F9F9FFFFFFFBFBFBD1D1D1C7C7C7 - C1C1C1CCCCCCE7E7E7F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFF4F4 - F4ECECECEEEEEEF0F0F0F0F0F0FDFDFDFFFFFFFBFBFBFFFFFFFFFFFFE7E7E7E7 - E7E7E5E5E5E0E0E0DADADAC3C3C3949494CCCCCCFCFCFCFEFEFEFDFDFDFDFDFD - FFFFFFFFFFFFFFFFFFFCFCFCFBFBFBFDFDFDFEFEFEFFFFFFF7F7F7E5E5E5E3E3 - E3E2E2E2E3E3E3E4E4E4E2E2E2E2E2E2E5E5E5E9E9E9EDEDEDF8F8F8F8F8F8F7 - F7F7F8F8F8F9F9F9FFFFFFFFFFFFFFFFFFFAFAFAF9F9F9EEEEEEEBEBEBF2F2F2 - F3F3F3FFFFFFFFFFFFE7E7E7E7E7E7E4E4E4E5E5E5E4E4E4D4D4D4E9E9E9FAFA - FAF4F4F4F3F3F3F4F4F4F3F3F3F3F3F3F6F6F6F8F8F8FFFFFFFFFFFFFFFFFFE8 - E8E8E7E7E7E7E7E7C1C1C1C1C1C1E7E7E7F8F8F8F9F9F9FAFAFAFAFAFAFAFAFA - FBFBFBFEFEFEFDFDFDFBFBFBFFFFFFFBFBFBEBEBEBECECECEBEBEBE9E9E9E9E9 - E9E9E9E9E8E8E8E7E7E7E8E8E8E9E9E9BCBCBCB5B5B5E2E2E2FBFBFBFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFEDEDEDEBEBEBE9E9E9E4E4E4DEDEDED7D7D7C7C7C7 - AFAFAFD6D6D6F5F5F5F6F6F6F5F5F5F6F6F6F8F8F8F8F8F8FFFFFFFFFFFFEEEE - EEEDEDEDE7E7E7D6D6D6F7F7F7FFFFFFFBFBFBFDFDFDFDFDFDF9F9F9F8F8F8FB - FBFBFDFDFDF9F9F9F7F7F7F7F7F7F7F7F7F4F4F4F4F4F4F8F8F8F8F8F8F8F8F8 - F8F8F8F8F8F8FBFBFBFFFFFFFEFEFED7D7D7D2D2D2E9E9E9FCFCFCFFFFFFFFFF - FFE8E8E8DCDCDCF0F0F0F4F4F4F6F6F6FAFAFAF8F8F8FBFBFBFFFFFFFFFFFFD9 - D9D9DADADAF0F0F0E1E1E1E6E6E6FBFBFBFBFBFBF0F0F0EDEDEDEEEEEEEDEDED - EDEDEDEDEDEDECECECEEEEEEEBEBEBE8E8E8E6E6E6DCDCDCEDEDEDFDFDFDFCFC - FCF8F8F8F8F8F8F5F5F5F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFF5F5F5F4F4F4F2F2F2F2F2F2F4F4F4F4F4F4F5F5F5F7F7F7F8F8F8F6F6F6 - F5F5F5F6F6F6FFFFFFFFFFFFE9E9E9EAEAEAE9E9E9FCFCFCFFFFFFFFFFFFFFFF - FFFDFDFDEAEAEAE9E9E9D7D7D7C7C7C7CACACADADADAE8E8E8E9E9E9E9E9E9E9 - E9E9CACACAD8D8D8F5F5F5F6F6F6E3E3E3DDDDDDBABABAB6B6B6E2E2E2F9F9F9 - F9F9F9F8F8F8F8F8F8F9F9F9F9F9F9FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFCFCFCEBEBEBF9F9F9F8F8F8F5F5F5FFFFFFFBFBFBF7F7F7F6F6F6F8F8F8F8 - F8F8F9F9F9FAFAFAFBFBFBFFFFFFFFFFFFEEEEEEEDEDEDECECECE9E9E9D3D3D3 - A7A7A7D0D0D0F8F8F8FBFBFBFCFCFCFCFCFCFDFDFDFDFDFDF9F9F9FCFCFCFFFF - FFFFFFFFEDEDEDE9E9E9E9E9E9EAEAEAEAEAEAEAEAEAEAEAEAE9E9E9D5D5D5B5 - B5B5D1D1D1F1F1F1F8F8F8FCFCFCFDFDFDFFFFFFFFFFFFFAFAFAE3E3E3DADADA - DADADAE6E6E6F3F3F3F5F5F5F7F7F7FFFFFFFFFFFFFFFFFFEAEAEAEAEAEAECEC - ECEBEBEBEDEDEDEDEDEDEDEDEDEAEAEAE7E7E7E5E5E5F8F8F8F8F8F8E6E6E6E3 - E3E3E0E0E0C8C8C8B3B3B39E9E9EB2B2B2E5E5E5FCFCFCFDFDFDFEFEFEFFFFFF - FFFFFFFFFFFFFFFFFFFEFEFEFDFDFDFFFFFFFDFDFDFFFFFFFCFCFCE5E5E5E3E3 - E3E2E2E2E5E5E5E5E5E5E2E2E2E4E4E4E7E7E7E9E9E9EAEAEADCDCDCE7E7E7F6 - F6F6F7F7F7F8F8F8FFFFFFFFFFFFF8F8F8EEEEEEEDEDEDE4E4E4E7E7E7EEEEEE - FDFDFDFFFFFFFFFFFFE9E9E9E6E6E6E4E4E4E6E6E6E7E7E7D9D9D9CCCCCCEAEA - EAF8F8F8F7F7F7F8F8F8F8F8F8F9F9F9FEFEFEFFFFFFFFFFFFFFFFFFF7F7F7E7 - E7E7E7E7E7E7E7E7D5D5D5E1E1E1EFEFEFF1F1F1F8F8F8F9F9F9FCFCFCFDFDFD - FFFFFFFFFFFFFCFCFCFDFDFDFFFFFFFBFBFBECECECEAEAEAE9E9E9E7E7E7E7E7 - E7E6E6E6E4E4E4E4E4E4E9E9E9EAEAEAD6D6D6E5E5E5F9F9F9FCFCFCFFFFFFFF - FFFFFFFFFFFFFFFFFEFEFEEAEAEAE8E8E8E6E6E6E2E2E2DCDCDCC9C9C9ACACAC - C1C1C1E2E2E2F0F0F0F2F2F2F3F3F3F4F4F4F7F7F7F8F8F8FFFFFFFFFFFFEDED - EDEBEBEBE7E7E7E7E7E7FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F6F6FC - FCFCFDFDFDF9F9F9F7F7F7F7F7F7F7F7F7F4F4F4F5F5F5F8F8F8F8F8F8F8F8F8 - F8F8F8F8F8F8F9F9F9F8F8F8E6E6E6D0D0D0E1E1E1D4D4D4D4D4D4D3D3D3C0C0 - C0ACACACCECECEF3F3F3F6F6F6F7F7F7FAFAFAF8F8F8FDFDFDFFFFFFFFFFFFC7 - C7C7D7D7D7F2F2F2E9E9E9ECECECF7F7F7F3F3F3EBEBEBECECECECECECEDEDED - EDEDEDEDEDEDECECECECECECEAEAEAE9E9E9E9E9E9DCDCDCEAEAEAFBFBFBFBFB - FBF8F8F8F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFF9F9F9F4F4F4F1F1F1F4F4F4F6F6F6F7F7F7F8F8F8F8F8F8F7F7F7 - F1F1F1F3F3F3FFFFFFFFFFFFE9E9E9EAEAEAE6E6E6E7E7E7E9E9E9E8E8E8E8E8 - E8ECECECECECECD9D9D9B4B4B4C3C3C3D5D5D5F3F3F3F8F8F8EAEAEAE9E9E9E9 - E9E9C9C9C9D5D5D5F3F3F3F4F4F4F2F2F2EDEDEDDFDFDFE2E2E2F7F7F7F9F9F9 - F9F9F9F8F8F8FAFAFAFBFBFBF9F9F9FDFDFDFFFFFFFFFFFFFEFEFEFFFFFFFFFF - FFEEEEEEECECECEAEAEAEAEAEAE8E8E8ECECECECECECD5D5D5E3E3E3F8F8F8F9 - F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFF1F1F1F2F2F2EFEFEFECECECD5D5D5 - D3D3D3E7E7E7F7F7F7F9F9F9FBFBFBFBFBFBFBFBFBFBFBFBF9F9F9F8F8F8FFFF - FFFFFFFFE9E9E9E2E2E2E6E6E6E9E9E9EAEAEAEAEAEAEAEAEAE9E9E9D7D7D7D7 - D7D7EAEAEAF9F9F9FBFBFBFFFFFFFFFFFFFFFFFFFDFDFDFAFAFAF7F7F7F4F4F4 - F3F3F3F3F3F3F4F4F4F7F7F7FFFFFFFFFFFFFFFFFFF8F8F8E7E7E7E7E7E7E9E9 - E9EAEAEAEAEAEAEAEAEAE9E9E9E7E7E7E5E5E5E5E5E5E5E5E5E2E2E2DFDFDFDC - DCDCCACACAA3A3A3B7B7B7CCCCCCE0E0E0F9F9F9FFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFEFEFEFDFDFDFDFDFDFCFCFCFEFEFEFDFDFDECECECE7E7 - E7E6E6E6E9E9E9E9E9E9E7E7E7E8E8E8E9E9E9EAEAEAE7E7E7CACACAD9D9D9F4 - F4F4F4F4F4F5F5F5F4F4F4F5F5F5EBEBEBECECECEDEDEDEDEDEDE0E0E0F4F4F4 - FFFFFFFFFFFFFCFCFCECECECE7E7E7E6E6E6E9E9E9E9E9E9D9D9D9D3D3D3E6E6 - E6F7F7F7F8F8F8F9F9F9F8F8F8FFFFFFFFFFFFFFFFFFFFFFFFF8F8F8E7E7E7E7 - E7E7E7E7E7E7E7E7D4D4D4BBBBBBDADADAEEEEEEF5F5F5F8F8F8FAFAFAFDFDFD - FDFDFDFCFCFCFBFBFBFDFDFDFCFCFCFFFFFFFAFAFAEAEAEAE8E8E8E7E7E7E9E9 - E9E6E6E6E5E5E5E7E7E7DADADAC6C6C6C6C6C6C6C6C6E9E9E9FCFCFCFFFFFFFF - FFFFFFFFFFFFFFFFEDEDEDE9E9E9E6E6E6E6E6E6E1E1E1DADADACCCCCCD0D0D0 - E4E4E4F2F2F2F3F3F3F5F5F5F6F6F6F5F5F5F9F9F9F9F9F9FFFFFFFFFFFFEDED - EDEBEBEBE7E7E7E8E8E8EFEFEFF3F3F3FDFDFDFFFFFFFFFFFFFAFAFAFFFFFFFF - FFFFFFFFFFF7F7F7F7F7F7F7F7F7F6F6F6F4F4F4F6F6F6F8F8F8F7F7F7F7F7F7 - F8F8F8F8F8F8F8F8F8F8F8F8F9F9F9F8F8F8F7F7F7E5E5E5F4F4F4E6E6E6DDDD - DDDFDFDFE5E5E5F6F6F6F7F7F7F8F8F8FAFAFAFAFAFAFBFBFBFFFFFFFEFEFEB4 - B4B4D7D7D7F8F8F8F6F6F6F9F9F9FFFFFFFFFFFFFFFFFFECECECD1D1D1DFDFDF - EDEDEDEDEDEDECECECECECECECECECECECECECECECE9E9E9E4E4E4F0F0F0F9F9 - F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9EBEBEBECECECEEEEEEFF - FFFFFCFCFCFFFFFFFCFCFCF5F5F5F7F7F7F8F8F8F8F8F8F8F8F8F8F8F8F7F7F7 - F4F4F4F3F3F3FFFFFFF7F7F7E9E9E9E7E7E7E5E5E5E6E6E6E7E7E7E6E6E6E7E7 - E7E9E9E9E7E7E7C4C4C4C0C0C0E5E5E5F5F5F5FFFFFFE8E8E8D9D9D9DADADAC9 - C9C9B5B5B5D3D3D3F2F2F2F3F3F3F0F0F0F0F0F0F4F4F4F6F6F6F8F8F8FCFCFC - FBFBFBF9F9F9FBFBFBFBFBFBF9F9F9FDFDFDFFFFFFFFFFFFECECECFBFBFBFDFD - FDF0F0F0EDEDEDEEEEEEEBEBEBE9E9E9EAEAEAE9E9E9BFBFBFD0D0D0F8F8F8F9 - F9F9FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEEEEEEEDEDEDD7D7D7C0C0C0 - C2C2C2E6E6E6F7F7F7F8F8F8F8F8F8F8F8F8F8F8F8FAFAFAF9F9F9F8F8F8FFFF - FFFCFCFCE6E6E6E2E2E2E5E5E5D7D7D7C3C3C3C1C1C1C1C1C1C1C1C1C2C2C2C8 - C8C8EBEBEBFAFAFAFCFCFCFFFFFFFEFEFEF9F9F9F6F6F6F5F5F5F4F4F4F4F4F4 - F4F4F4F4F4F4F4F4F4FFFFFFFFFFFFFFFFFFF5F5F5E7E7E7E6E6E6E7E7E7E8E8 - E8E8E8E8E8E8E8E8E8E8E6E6E6E1E1E1E2E2E2E3E3E3E1E1E1DFDFDFE1E1E1E2 - E2E2BFBFBFBFBFBFE4E4E4F1F1F1F4F4F4FBFBFBFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFDFDFDFDFDFDFBFBFBFAFAFAFBFBFBFCFCFCFEFEFEFEFEFEF7F7F7E9E9 - E9E9E9E9EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE8E8E8E2E2E2CCCCCCDCDCDCF2 - F2F2F3F3F3F4F4F4F4F4F4F3F3F3F2F2F2EDEDEDEDEDEDEDEDEDD7D7D7F9F9F9 - FFFFFFFFFFFFEEEEEEEBEBEBE8E8E8E8E8E8E9E9E9E9E9E9E7E7E7D5D5D5E4E4 - E4F7F7F7F7F7F7F8F8F8FBFBFBFFFFFFFFFFFFFFFFFFF9F9F9E9E9E9E7E7E7E7 - E7E7E7E7E7D5D5D5A6A6A6B1B1B1DADADAF1F1F1F4F4F4F7F7F7F9F9F9FBFBFB - F9F9F9F8F8F8FCFCFCFDFDFDFAFAFAFFFFFFFBFBFBE9E9E9E6E6E6E6E6E6E7E7 - E7E5E5E5E9E9E9EDEDEDDEDEDEEAEAEAF9F9F9E7E7E7E9E9E9FFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFEDEDEDE8E8E8E7E7E7E7E7E7DFDFDFDEDEDEE1E1E1E7E7E7 - FFFFFFFFFFFFF8F8F8F9F9F9F9F9F9F9F9F9FFFFFFFFFFFFFFFFFFFFFFFFECEC - ECEBEBEBE9E9E9E9E9E9DADADADEDEDEEDEDEDEDEDEDEAEAEAE9E9E9FCFCFCFF - FFFFFDFDFDFFFFFFFFFFFFF7F7F7F6F6F6F7F7F7F8F8F8FFFFFFFFFFFFFFFFFF - FFFFFFF8F8F8F8F8F8F8F8F8F9F9F9F8F8F8F7F7F7F7F7F7FFFFFFFFFFFFF0F0 - F0E9E9E9EAEAEAF7F7F7F8F8F8F9F9F9FBFBFBFFFFFFFFFFFFFFFFFFEEEEEEC1 - C1C1E6E6E6F9F9F9F8F8F8FFFFFFFFFFFFFFFFFFFFFFFFF0F0F0DEDEDEEBEBEB - EDEDEDE9E9E9EAEAEAECECECECECECECECECECECECECECECE4E4E4F4F4F4FFFF - FFFFFFFFFFFFFFFFFFFFFBFBFBECECECE8E8E8D9D9D9CCCCCCD0D0D0D4D4D4FF - FFFFECECECF7F7F7FAFAFAFFFFFFFFFFFFFBFBFBF8F8F8F8F8F8F7F7F7F5F5F5 - F3F3F3F1F1F1F4F4F4FFFFFFF8F8F8CFCFCFB5B5B5B7B7B7CFCFCFE6E6E6E7E7 - E7E7E7E7E6E6E6C4C4C4D4D4D4F5F5F5F7F7F7F7F7F7E6E6E6E5E5E5C6C6C6C0 - C0C0D0D0D0E1E1E1F4F4F4F3F3F3EEEEEEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFBFBFBFAFAFAFBFBFBFFFFFFFFFFFFFFFFFFEBEBEBEDEDEDF2F2 - F2F4F4F4F1F1F1EEEEEEEAEAEAE6E6E6E7E7E7E7E7E7BDBDBDD0D0D0F9F9F9FB - FBFBFFFFFFFFFFFFFFFFFFFFFFFFEEEEEEEAEAEAEAEAEAEAEAEAC1C1C1B7B7B7 - D1D1D1E6E6E6F7F7F7F8F8F8F8F8F8F8F8F8F9F9F9FBFBFBF9F9F9F8F8F8F8F8 - F8F8F8F8D9D9D9C5C5C5C5C5C5B0B0B0BCBCBCD0D0D0D1D1D1D3D3D3D4D4D4D7 - D7D7E8E8E8F7F7F7F8F8F8FFFFFFFFFFFFF6F6F6F5F5F5F5F5F5F4F4F4F4F4F4 - F3F3F3F3F3F3F3F3F3FFFFFFFFFFFFF4F4F4E6E6E6E7E7E7E7E7E7E8E8E8E9E9 - E9E9E9E9E9E9E9E6E6E6D0D0D0D1D1D1E6E6E6E1E1E1E1E1E1E5E5E5E7E7E7D8 - D8D8B3B3B3D5D5D5F6F6F6F3F3F3F7F7F7FBFBFBFBFBFBFBFBFBFBFBFBFBFBFB - FBFBFBFAFAFAFAFAFAFBFBFBFDFDFDFCFCFCFDFDFDFDFDFDFAFAFAF9F9F9FFFF - FFF8F8F8EDEDEDEDEDEDEBEBEBEAEAEAEAEAEAE5E5E5E4E4E4D2D2D2DFDFDFF2 - F2F2F3F3F3F4F4F4F5F5F5F4F4F4F5F5F5F8F8F8E3E3E3D8D8D8CDCDCDF1F1F1 - F5F5F5E4E4E4EBEBEBEAEAEAE8E8E8E9E9E9E9E9E9E9E9E9E9E9E9CACACADCDC - DCF9F9F9F7F7F7F9F9F9FFFFFFFFFFFFFFFFFFEDEDEDECECECE9E9E9E7E7E7E7 - E7E7E7E7E7D1D1D1C6C6C6DCDCDCF2F2F2F5F5F5F7F7F7F8F8F8F9F9F9FBFBFB - F9F9F9F8F8F8FCFCFCFCFCFCF8F8F8F7F7F7FFFFFFF8F8F8E8E8E8E8E8E8E8E8 - E8E8E8E8ECECECEFEFEFF2F2F2FFFFFFFFFFFFFCFCFCF7F7F7FCFCFCFEFEFEFD - FDFDFFFFFFFFFFFFEAEAEAE7E7E7E7E7E7E7E7E7DFDFDFDFDFDFE4E4E4E9E9E9 - FCFCFCEBEBEBE9E9E9F9F9F9F9F9F9F9F9F9FFFFFFFFFFFFFFFFFFFCFCFCEAEA - EAEAEAEAE9E9E9E9E9E9DBDBDBFFFFFFFFFFFFE7E7E7E6E6E6E7E7E7E9E9E9EA - EAEAEAEAEAF9F9F9EAEAEAE7E7E7F7F7F7F8F8F8FFFFFFFFFFFFFFFFFFFFFFFF - FCFCFCF8F8F8F8F8F8F8F8F8F8F8F8FAFAFAF8F8F8FFFFFFFFFFFFFFFFFFE3E3 - E3D9D9D9E9E9E9F8F8F8F9F9F9FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFEDEDEDD5 - D5D5F6F6F6FCFCFCFFFFFFFFFFFFFFFFFFFDFDFDF2F2F2DCDCDCC9C9C9EAEAEA - F8F8F8DEDEDED3D3D3E1E1E1EEEEEEEEEEEEECECECECECECEAEAEAF4F4F4FFFF - FFFFFFFFFDFDFDF4F4F4EEEEEEEAEAEAD8D8D8BDBDBDCBCBCBD8D8D8DEDEDEFF - FFFFEDEDEDEDEDEDEFEFEFFCFCFCFCFCFCFFFFFFFFFFFFF8F8F8F5F5F5F2F2F2 - F4F4F4F4F4F4FFFFFFFFFFFFF8F8F89D9D9DB2B2B2CACACAE0E0E0D2D2D2D2D2 - D2E7E7E7D4D4D4AEAEAED2D2D2F5F5F5F7F7F7F7F7F7F6F6F6F4F4F4E4E4E4E2 - E2E2EEEEEEF2F2F2F3F3F3EEEEEEF0F0F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFEDEDEDECECECFCFCFCFCFCFCFFFFFFFFFFFFFDFDFDEDEDEDEDEDEDF4F4 - F4F3F3F3EDEDEDEAEAEAE7E7E7E3E3E3E4E4E4D3D3D3A5A5A5CECECEF8F8F8FD - FDFDFFFFFFFFFFFFFFFFFFEEEEEEEAEAEAEAEAEAEAEAEAEAEAEABDBDBDC8C8C8 - F6F6F6F7F7F7F5F5F5F5F5F5F7F7F7F8F8F8F9F9F9F9F9F9F8F8F8F8F8F8F9F9 - F9FAFAFAEAEAEAD5D5D5D3D3D3D2D2D2E2E2E2F5F5F5F8F8F8F9F9F9FAFAFAF9 - F9F9F9F9F9F7F7F7F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFF5F5F5F5F5F5F5F5F5 - F4F4F4F5F5F5FFFFFFFFFFFFFFFFFFE6E6E6E6E6E6E7E7E7E7E7E7E8E8E8E9E9 - E9E9E9E9E7E7E7E2E2E2BFBFBFD4D4D4DCDCDCC7C7C7D8D8D8E9E9E9E7E7E7D9 - D9D9D5D5D5E6E6E6F5F5F5F5F5F5F6F6F6F8F8F8F9F9F9F9F9F9F9F9F9F9F9F9 - F9F9F9FBFBFBFCFCFCFDFDFDFDFDFDFCFCFCFCFCFCFBFBFBF8F8F8FAFAFAFFFF - FFF8F8F8EBEBEBECECECE8E8E8E6E6E6E6E6E6E5E5E5E7E7E7E1E1E1E9E9E9F0 - F0F0F1F1F1F3F3F3F3F3F3F2F2F2F6F6F6F9F9F9EFEFEFE7E7E7E4E4E4EEEEEE - EEEEEEECECECE2E2E2DFDFDFEAEAEAEAEAEAE9E9E9E9E9E9E9E9E9CFCFCFD7D7 - D7F1F1F1F5F5F5F8F8F8FFFFFFFFFFFFFBFBFBECECECEBEBEBE9E9E9E5E5E5E3 - E3E3E3E3E3DFDFDFD1D1D1E4E4E4F5F5F5F6F6F6F9F9F9FBFBFBFBFBFBFDFDFD - FDFDFDFCFCFCFDFDFDFCFCFCF8F8F8F7F7F7FFFFFFFFFFFFEBEBEBEBEBEBEBEB - EBECECECEEEEEEEEEEEEF0F0F0EEEEEEECECECD5D5D5C4C4C4E6E6E6F4F4F4F4 - F4F4FFFFFFFFFFFFE9E9E9E7E7E7E7E7E7E6E6E6DFDFDFE0E0E0E9E9E9ECECEC - EDEDEDDCDCDCF9F9F9FFFFFFFBFBFBFBFBFBFFFFFFFFFFFFEBEBEBECECECEBEB - EBEAEAEAD6D6D6C3C3C3C8C8C8DCDCDCEAEAEAE7E7E7E7E7E7E7E7E7E6E6E6E7 - E7E7E7E7E7DADADAB7B7B7D3D3D3F5F5F5F6F6F6FFFFFFFFFFFFFCFCFCEDEDED - EDEDEDDFDFDFEDEDEDFAFAFAF8F8F8FAFAFAFFFFFFFFFFFFFFFFFFFBFBFBE9E9 - E9E6E6E6E3E3E3F1F1F1FCFCFCFDFDFDFFFFFFFFFFFFFBFBFBE7E7E7CECECED6 - D6D6F6F6F6FFFFFFFFFFFFFFFFFFFBFBFBE7E7E7E8E8E8BCBCBCBCBCBCEAEAEA - F8F8F8EBEBEBE0E0E0FAFAFAFFFFFFEFEFEFEDEDEDEEEEEEECECECEDEDEDF3F3 - F3F4F4F4F3F3F3EEEEEEEBEBEBD7D7D7B6B6B6C4C4C4E1E1E1EDEDEDEEEEEEFF - FFFFEAEAEAECECECECECECEDEDEDEDEDEDF8F8F8F8F8F8FFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFE9E9E9CDCDCDFAFAFAFFFFFFF8F8F8E7E7E7E4E4 - E4D2D2D2A8A8A8BCBCBCE1E1E1F4F4F4F7F7F7F6F6F6F4F4F4F4F4F4F5F5F5F5 - F5F5F3F3F3F4F4F4F5F5F5F3F3F3F5F5F5FFFFFFFFFFFFFEFEFEFCFCFCEAEAEA - E7E7E7CCCCCCDBDBDBF9F9F9FCFCFCFEFEFEFCFCFCFFFFFFFCFCFCF1F1F1F6F6 - F6F0F0F0EAEAEAE9E9E9E6E6E6E2E2E2CCCCCC9D9D9DAFAFAFE1E1E1F9F9F9FF - FFFFFFFFFFFFFFFFEFEFEFEAEAEAEAEAEAEAEAEAEAEAEAD4D4D49F9F9FCACACA - F7F7F7F7F7F7F7F7F7F7F7F7F8F8F8F7F7F7F7F7F7F8F8F8F8F8F8F8F8F8F9F9 - F9F9F9F9F9F9F9F7F7F7F5F5F5F5F5F5F4F4F4F6F6F6F8F8F8F9F9F9F9F9F9F9 - F9F9F8F8F8F9F9F9F9F9F9FFFFFFFFFFFFFAFAFAFBFBFBFFFFFFFFFFFFF5F5F5 - F5F5F5F6F6F6FFFFFFFFFFFFF1F1F1D1D1D1BFBFBFBCBCBCBABABABABABABBBB - BBBCBCBCBBBBBBBABABAACACACD5D5D5E5E5E5D2D2D2E3E3E3E9E9E9DADADADC - DCDCDCDCDCE6E6E6F6F6F6F7F7F7F6F6F6F8F8F8F9F9F9F9F9F9F9F9F9F9F9F9 - FAFAFAFDFDFDFCFCFCFBFBFBFBFBFBFAFAFAF9F9F9F8F8F8F8F8F8F9F9F9F9F9 - F9F1F1F1E9E9E9EEEEEEECECECECECECEBEBEBEAEAEAECECECEDEDEDE1E1E1E7 - E7E7F2F2F2F3F3F3F3F3F3F5F5F5F8F8F8FBFBFBFDFDFDFCFCFCF7F7F7F5F5F5 - F4F4F4F4F4F4E8E8E8E7E7E7ECECECEAEAEAE9E9E9EAEAEAEAEAEADCDCDCECEC - ECF6F6F6F1F1F1F4F4F4FFFFFFECECECDBDBDBEBEBEBE9E9E9E8E8E8E7E7E7E4 - E4E4E4E4E4E4E4E4D6D6D6F2F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FEFEFEFCFCFCFCFCFCFAFAFAF7F7F7F7F7F7FFFFFFFFFFFFEDEDEDECECECEDED - EDEDEDEDEEEEEEEFEFEFEFEFEFECECECD6D6D6AEAEAEC0C0C0E4E4E4F3F3F3F4 - F4F4FFFFFFFAFAFAE8E8E8E7E7E7E7E7E7E4E4E4DFDFDFE4E4E4ECECECECECEC - EBEBEBECECECFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBEBEBEAEAEAE9E9 - E9D5D5D5A8A8A8BBBBBBD3D3D3D3D3D3E4E4E4E7E7E7E6E6E6E6E6E6E6E6E6E7 - E7E7E7E7E7CBCBCBC4C4C4E4E4E4F5F5F5F5F5F5FFFFFFFFFFFFEDEDEDEAEAEA - EDEDEDD0D0D0DDDDDDF9F9F9FAFAFAFCFCFCFFFFFFFFFFFFFCFCFCEBEBEBE6E6 - E6D3D3D3C8C8C8E5E5E5FAFAFAFAFAFAFFFFFFEFEFEFCBCBCBB6B6B6C6C6C6E3 - E3E3F4F4F4FEFEFEFFFFFFFFFFFFE7E7E7E7E7E7E7E7E7B9B9B9CCCCCCF8F8F8 - F8F8F8F8F8F8FFFFFFFFFFFFFFFFFFECECECECECECECECECEDEDEDEFEFEFF1F1 - F1F1F1F1EEEEEEECECECD8D8D8AFAFAFBFBFBFDFDFDFEDEDEDF2F2F2F3F3F3FF - FFFFEAEAEAECECECECECECEDEDEDECECECEBEBEBEAEAEAFAFAFAFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFEAEAEAE8E8E8FFFFFFFFFFFFFAFAFAFBFBFBF9F9 - F9E4E4E4D1D1D1E4E4E4F4F4F4F7F7F7F8F8F8F5F5F5F5F5F5F5F5F5F5F5F5F5 - F5F5F6F6F6F7F7F7F7F7F7F7F7F7F7F7F7FFFFFFFFFFFFEDEDEDEAEAEAEAEAEA - DADADABCBCBCD5D5D5F5F5F5FCFCFCFEFEFEFAFAFAFFFFFFFBFBFBF2F2F2F3F3 - F3EDEDEDEAEAEAE8E8E8E5E5E5E2E2E2B1B1B1B0B0B0E1E1E1F7F7F7FCFCFCFF - FFFFFFFFFFFFFFFFEAEAEAEAEAEAEAEAEAEAEAEAD4D4D4A1A1A1B4B4B4E4E4E4 - FAFAFAF9F9F9F8F8F8F8F8F8F7F7F7F6F6F6F7F7F7F8F8F8F9F9F9F9F9F9FBFB - FBFAFAFAF9F9F9F7F7F7F5F5F5F7F7F7F6F6F6F8F8F8F9F9F9F9F9F9F9F9F9F8 - F8F8F8F8F8F8F8F8F8F8F8FFFFFFFFFFFFE9E9E9E9E9E9FBFBFBF9F9F9F4F4F4 - F3F3F3F2F2F2FCFCFCDEDEDEBCBCBCA8A8A8B7B7B7C6C6C6C6C6C6C9C9C9CCCC - CCCECECECDCDCDCECECED1D1D1E5E5E5F4F4F4F2F2F2F4F4F4F4F4F4CCCCCCD7 - D7D7CACACAD8D8D8F5F5F5F9F9F9F9F9F9F8F8F8FCFCFCFDFDFDFBFBFBF9F9F9 - FBFBFBFDFDFDFBFBFBF9F9F9FBFBFBF9F9F9F8F8F8F9F9F9F9F9F9F8F8F8F7F7 - F7F3F3F3F6F6F6DFDFDFDADADAE7E7E7EAEAEAEDEDEDEDEDEDEDEDEDE4E4E4F6 - F6F6FFFFFFF5F5F5F8F8F8FBFBFBFCFCFCFBFBFBFBFBFBF7F7F7F5F5F5F5F5F5 - F4F4F4F4F4F4F3F3F3F3F3F3FDFDFDF7F7F7ECECECECECECEBEBEBEBEBEBF3F3 - F3E1E1E1E2E2E2F4F4F4F7F7F7E6E6E6F9F9F9FCFCFCE9E9E9E9E9E9E9E9E9E8 - E8E8E7E7E7E8E8E8E6E6E6F8F8F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFF8F8F8F7F7F7F7F7F7F7F7F7FFFFFFFFFFFFF0F0F0EDEDEDEDED - EDEEEEEEF0F0F0EEEEEEF0F0F0ECECECC1C1C1B8B8B8DFDFDFF0F0F0F0F0F0F2 - F2F2F5F5F5FFFFFFF7F7F7E7E7E7E7E7E7E3E3E3E2E2E2E7E7E7EAEAEAEDEDED - EBEBEBECECECF3F3F3F9F9F9FFFFFFFFFFFFFFFFFFFDFDFDEAEAEAEAEAEAE9E9 - E9BDBDBDB7B7B7E3E3E3F8F8F8F9F9F9F9F9F9FFFFFFFAFAFAE7E7E7E8E8E8E6 - E6E6E6E6E6CACACAD5D5D5F1F1F1F5F5F5F7F7F7FFFFFFEDEDEDCBCBCBDADADA - DFDFDFC0C0C0DBDBDBF7F7F7F8F8F8FAFAFAFFFFFFFCFCFCCACACAC8C8C8C3C3 - C3BABABAD0D0D0ECECECF7F7F7F7F7F7F7F7F7EAEAEAD9D9D9D5D5D5E9E9E9F5 - F5F5F7F7F7FDFDFDFFFFFFFFFFFFE7E7E7E7E7E7E7E7E7BBBBBBCDCDCDF8F8F8 - FFFFFFFFFFFFFFFFFFFFFFFFFBFBFBEAEAEAEAEAEAEBEBEBECECECEEEEEEEEEE - EEEDEDEDECECECEBEBEBC6C6C6BEBEBEE4E4E4F4F4F4F8F8F8FCFCFCFDFDFDFF - FFFFEDEDEDEFEFEFECECECEBEBEBEAEAEAE8E8E8D9D9D9DBDBDBEEEEEEF1F1F1 - F0F0F0EEEEEEF0F0F0EEEEEEEAEAEAE7E7E7FFFFFFFFFFFFD7D7D7E6E6E6F9F9 - F9F7F7F7F5F5F5F8F8F8FFFFFFFFFFFFFFFFFFF5F5F5F6F6F6F6F6F6F5F5F5F7 - F7F7F8F8F8F8F8F8F8F8F8F7F7F7F7F7F7FFFFFFFEFEFEECECECEAEAEAE9E9E9 - CACACAC8C8C8E4E4E4F7F7F7FDFDFDFCFCFCF9F9F9F7F7F7F7F7F7F0F0F0EEEE - EEEAEAEAE9E9E9E6E6E6E4E4E4E2E2E2B1B1B1CCCCCCFBFBFBFCFCFCFDFDFDFF - FFFFFFFFFFF1F1F1EAEAEAEAEAEAEAEAEAEAEAEABEBEBEB7B7B7E4E4E4F9F9F9 - FAFAFAF9F9F9F9F9F9F9F9F9F8F8F8F8F8F8FAFAFAFCFCFCFBFBFBFBFBFBFBFB - FBF9F9F9F8F8F8F5F5F5F5F5F5F7F7F7F7F7F7F8F8F8F8F8F8F9F9F9F8F8F8F7 - F7F7F7F7F7F7F7F7F6F6F6FFFFFFFCFCFCEDEDEDE8E8E8E9E9E9E8E8E8D2D2D2 - E1E1E1F4F4F4F1F1F1E2E2E2D2D2D2D1D1D1E4E4E4F0F0F0F1F1F1F5F5F5F7F7 - F7F7F7F7F4F4F4F5F5F5F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7E7E7E7E6 - E6E6E6E6E6E7E7E7F5F5F5F8F8F8F8F8F8FBFBFBFFFFFFFEFEFEFAFAFAFBFBFB - FDFDFDFCFCFCFAFAFAFBFBFBFAFAFAF9F9F9FAFAFAFCFCFCFAFAFAF9F9F9F9F9 - F9F9F9F9F8F8F8E9E9E9E5E5E5D9D9D9DFDFDFEDEDEDEBEBEBECECECEDEDEDF7 - F7F7E8E8E8EAEAEAF9F9F9F9F9F9FCFCFCFDFDFDFBFBFBFBFBFBF5F5F5F0F0F0 - F0F0F0F2F2F2F4F4F4F5F5F5FFFFFFFFFFFFF0F0F0EEEEEEEDEDEDEBEBEBE9E9 - E9C6C6C6D3D3D3F5F5F5F9F9F9F8F8F8FFFFFFFFFFFFEAEAEAEAEAEAEAEAEAE8 - E8E8E7E7E7E9E9E9E7E7E7EFEFEFF3F3F3F0F0F0EFEFEFEBEBEBE9E9E9E8E8E8 - F9F9F9E4E4E4DEDEDEF4F4F4F7F7F7F7F7F7FFFFFFFFFFFFF0F0F0EEEEEEEEEE - EEEFEFEFEFEFEFEEEEEEEFEFEFEAEAEAB7B7B7C8C8C8F1F1F1F1F1F1F1F1F1F3 - F3F3F6F6F6FFFFFFFFFFFFE5E5E5E3E3E3E1E1E1E5E5E5E9E9E9EDEDEDEFEFEF - EEEEEEF1F1F1FCFCFCFCFCFCF7F7F7F0F0F0EDEDEDEEEEEEEDEDEDEDEDEDEDED - EDBFBFBFCFCFCFF9F9F9FCFCFCFBFBFBFAFAFAFFFFFFEDEDEDD8D8D8E8E8E8D7 - D7D7C6C6C6B9B9B9D5D5D5F1F1F1F4F4F4F7F7F7F7F7F7E7E7E7D9D9D9E7E7E7 - CFCFCFCCCCCCE9E9E9F7F7F7F7F7F7F7F7F7FFFFFFDCDCDCC6C6C6D6D6D6D8D8 - D8DEDEDEEDEDEDF7F7F7F7F7F7F7F7F7F7F7F7F6F6F6F6F6F6F2F2F2F2F2F2F5 - F5F5F7F7F7F9F9F9FFFFFFF4F4F4D0D0D0C0C0C0BCBCBCA0A0A0CCCCCCF7F7F7 - FFFFFFFFFFFFFFFFFFFCFCFCE9E9E9EAEAEAE9E9E9EAEAEAEBEBEBECECECECEC - ECEBEBEBEBEBEBEBEBEBC7C7C7D1D1D1F6F6F6F9F9F9FBFBFBFDFDFDFDFDFDFF - FFFFEDEDEDEFEFEFEEEEEEEAEAEADBDBDBCCCCCCBCBCBCD9D9D9EFEFEFF0F0F0 - EDEDEDEAEAEAEAEAEAEAEAEAE8E8E8E8E8E8EAEAEAE6E6E6D3D3D3E6E6E6F8F8 - F8F6F6F6F7F7F7F8F8F8FFFFFFFFFFFFFAFAFAF3F3F3F4F4F4F5F5F5F5F5F5F8 - F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8FCFCFCFDFDFDE0E0E0D0D0D0CECECE - BCBCBCD8D8D8F5F5F5F5F5F5F8F8F8F8F8F8F7F7F7F7F7F7F7F7F7F8F8F8EEEE - EEEBEBEBE7E7E7E4E4E4E2E2E2CACACA989898CDCDCDFCFCFCFDFDFDFEFEFEFF - FFFFFFFFFFFFFFFFEAEAEAEAEAEAEAEAEAD8D8D8A9A9A9CECECEF7F7F7F9F9F9 - FAFAFAFAFAFAF9F9F9FAFAFAFBFBFBFBFBFBFBFBFBFCFCFCFBFBFBFAFAFAF8F8 - F8F7F7F7F5F5F5F4F4F4F5F5F5F7F7F7F7F7F7F7F7F7F6F6F6F7F7F7F7F7F7F6 - F6F6F6F6F6F5F5F5F7F7F7F6F6F6FFFFFFFCFCFCE9E9E9E9E9E9E6E6E6BDBDBD - D0D0D0F5F5F5F3F3F3F0F0F0F3F3F3F7F7F7F8F8F8F5F5F5F4F4F4F7F7F7F8F8 - F8F8F8F8F5F5F5F7F7F7F8F8F8F7F7F7F7F7F7F7F7F7F7F7F7F8F8F8F8F8F8F7 - F7F7F6F6F6F5F5F5F5F5F5F5F5F5F5F5F5F8F8F8FCFCFCF5F5F5F5F5F5FAFAFA - FCFCFCFBFBFBFBFBFBFBFBFBFCFCFCFEFEFEFEFEFEFDFDFDFFFFFFFFFFFFFFFF - FFFFFFFFF8F8F8FAFAFAF8F8F8EAEAEAECECECEDEDEDEBEBEBEBEBEBEBEBEBE9 - E9E9DEDEDEFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F2F2F2EDEDED - F1F1F1F3F3F3F3F3F3F4F4F4FFFFFFFFFFFFF3F3F3EEEEEEEBEBEBE9E9E9E8E8 - E8BFBFBFCECECEF5F5F5F9F9F9F9F9F9FFFFFFFFFFFFEBEBEBE9E9E9E7E7E7E6 - E6E6E6E6E6E9E9E9ECECECF1F1F1EEEEEEE8E8E8E7E7E7E7E7E7E7E7E7E6E6E6 - E4E4E4B3B3B3C7C7C7F5F5F5F5F5F5F5F5F5FFFFFFFFFFFFF0F0F0F0F0F0EEEE - EEEDEDEDF0F0F0EDEDEDECECECD1D1D19E9E9ECDCDCDF7F7F7F7F7F7F5F5F5F6 - F6F6F7F7F7FFFFFFF9F9F9E6E6E6E3E3E3E4E4E4E9E9E9EBEBEBEDEDEDEEEEEE - EFEFEFF1F1F1F5F5F5F1F1F1EAEAEAE9E9E9EAEAEAEDEDEDEEEEEEEEEEEEEDED - EDBCBCBCCECECEFAFAFAFEFEFEFCFCFCF9F9F9F8F8F8E9E9E9E6E6E6D5D5D5B2 - B2B2BFBFBFD3D3D3E5E5E5F2F2F2F5F5F5F7F7F7F6F6F6F5F5F5F7F7F7F6F6F6 - E8E8E8E9E9E9F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7E8E8E8E8E8E8F7F7F7FBFB - FBFAFAFAF7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F4F4F4F5F5F5F3F3F3F1F1F1F3 - F3F3F1F1F1EEEEEEEEEEEEEBEBEBC1C1C1BBBBBBC5C5C5C7C7C7E1E1E1F7F7F7 - FFFFFFFCFCFCE8E8E8E8E8E8E8E8E8E4E4E4E7E7E7EAEAEAEBEBEBEBEBEBEBEB - EBEBEBEBEBEBEBEBEBEBC7C7C7D0D0D0F5F5F5F9F9F9F9F9F9F9F9F9F9F9F9FF - FFFFEEEEEEF0F0F0EDEDEDDEDEDEC1C1C1CCCCCCDADADAE7E7E7F7F7F7EDEDED - EBEBEBE8E8E8E7E7E7E8E8E8E8E8E8E8E8E8E8E8E8E6E6E6E6E6E6D4D4D4E2E2 - E2F5F5F5F7F7F7F9F9F9F7F7F7FFFFFFF9F9F9CECECEDFDFDFF4F4F4F6F6F6F7 - F7F7F7F7F7F9F9F9F8F8F8F9F9F9F8F8F8FCFCFCFEFEFEECECECD9D9D9D8D8D8 - D5D5D5E6E6E6F5F5F5F4F4F4F3F3F3F4F4F4F6F6F6F5F5F5F6F6F6F6F6F6F8F8 - F8D7D7D7CFCFCFDFDFDFC8C8C89C9C9CAFAFAFE2E2E2FCFCFCFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFEFEFEFEDEDEDEAEAEAD8D8D8CDCDCDE2E2E2F9F9F9FAFAFA - FBFBFBFBFBFBFBFBFBFCFCFCFBFBFBFBFBFBFCFCFCFEFEFEFDFDFDFAFAFAF8F8 - F8F7F7F7F5F5F5F5F5F5F7F7F7F7F7F7F6F6F6F5F5F5F5F5F5F5F5F5F3F3F3F1 - F1F1F1F1F1F5F5F5F5F5F5F4F4F4FFFFFFE9E9E9C1C1C1D4D4D4E6E6E6BEBEBE - D0D0D0F1F1F1ECECECEEEEEEF4F4F4F7F7F7F7F7F7F4F4F4F5F5F5F9F9F9F9F9 - F9F8F8F8F7F7F7FAFAFAF8F8F8F5F5F5F5F5F5F6F6F6F7F7F7F7F7F7F7F7F7F7 - F7F7F7F7F7F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F1F1F1F3F3F3F8F8F8 - F9F9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFCFCFCFFFFFFFFFFFFF9F9F9F7F7F7F7F7F7FFFFFFFBFBFBEBEBEBEBEBEBEB - EBEBEDEDEDFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBF5F5F5F5F5F5EEEEEEF0F0F0 - F7F7F7F7F7F7F5F5F5F7F7F7FFFFFFFEFEFEF5F5F5EDEDEDE9E9E9E9E9E9E7E7 - E7D1D1D1EEEEEEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECECECE7E7E7E5E5E5E5 - E5E5E5E5E5E9E9E9E0E0E0E1E1E1EAEAEAE7E7E7E7E7E7E7E7E7E7E7E7E7E7E7 - D1D1D19C9C9CCACACAF8F8F8F7F7F7F8F8F8FFFFFFFFFFFFEEEEEEEDEDEDECEC - ECEDEDEDEDEDEDEAEAEAE6E6E6B7B7B7B5B5B5E4E4E4F8F8F8F8F8F8F7F7F7F7 - F7F7F7F7F7F8F8F8FFFFFFF8F8F8EAEAEAEAEAEAECECECEBEBEBECECECEDEDED - ECECECEBEBEBEAEAEAE9E9E9E7E7E7E6E6E6E7E7E7E9E9E9EBEBEBECECECEDED - EDD5D5D5E8E8E8FEFEFEFFFFFFFCFCFCF8F8F8F7F7F7F9F9F9F8F8F8E3E3E3D0 - D0D0E0E0E0F0F0F0F3F3F3F2F2F2F1F1F1F5F5F5F6F6F6F6F6F6F7F7F7F5F5F5 - F6F6F6F8F8F8F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7FBFBFBFFFF - FFFBFBFBF7F7F7F8F8F8F7F7F7F7F7F7F5F5F5F1F1F1F3F3F3F4F4F4F4F4F4F5 - F5F5F3F3F3F1F1F1F0F0F0EEEEEEE2E2E2E2E2E2EDEDEDF3F3F3F8F8F8F8F8F8 - F7F7F7FFFFFFFCFCFCE8E8E8E7E7E7E2E2E2E4E4E4E9E9E9EAEAEAEBEBEBEBEB - EBEBEBEBEBEBEBECECECDBDBDBE5E5E5F7F7F7F9F9F9F9F9F9F9F9F9F9F9F9FF - FFFFF0F0F0EFEFEFEDEDEDD2D2D2CFCFCFEAEAEAF6F6F6F4F4F4F5F5F5F7F7F7 - E8E8E8E5E5E5E7E7E7EBEBEBEAEAEAE8E8E8E8E8E8E8E8E8E4E4E4BABABACECE - CEF7F7F7F9F9F9F9F9F9FAFAFAFFFFFFF7F7F79D9D9DCACACAF4F4F4F5F5F5F5 - F5F5F7F7F7FAFAFAF9F9F9F9F9F9F9F9F9FCFCFCFDFDFDF7F7F7F1F1F1F1F1F1 - EFEFEFF2F2F2F5F5F5F4F4F4F1F1F1F2F2F2F4F4F4F5F5F5F6F6F6F5F5F5F5F5 - F5E1E1E1DCDCDCCCCCCCA0A0A0B6B6B6DFDFDFF8F8F8FFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFF1F1F1EEEEEEEAEAEAEAEAEAEAEAEAD3D3D3E6E6E6FBFBFBFCFCFC - FEFEFEFEFEFEFEFEFEFCFCFCFCFCFCFDFDFDFFFFFFFEFEFEFEFEFEFCFCFCF8F8 - F8F8F8F8F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F5F5F5F1F1F1F2 - F2F2F4F4F4F7F7F7F6F6F6F6F6F6F5F5F5E4E4E4D1D1D1E2E2E2E7E7E7BFBFBF - D0D0D0F3F3F3F1F1F1F5F5F5F7F7F7F8F8F8F6F6F6F6F6F6F8F8F8FCFCFCFBFB - FBF9F9F9F9F9F9FAFAFAF9F9F9F6F6F6F5F5F5F6F6F6F5F5F5F5F5F5F6F6F6F6 - F6F6F6F6F6F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F3F3F3F5F5F5FFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBE9E9 - E9E9E9E9FDFDFDFDFDFDF7F7F7F7F7F7F7F7F7FFFFFFFFFFFFE9E9E9EBEBEBEB - EBEBEDEDEDF1F1F1F0F0F0EBEBEBEAEAEAEAEAEAEAEAEAF2F2F2ECECECF1F1F1 - F7F7F7F7F7F7F8F8F8FDFDFDFFFFFFFFFFFFFFFFFFECECECEBEBEBEAEAEAEAEA - EAE7E7E7F0F0F0FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDECECECEAEAEAE9E9E9E9 - E9E9E9E9E9EAEAEAD3D3D3E7E7E7F5F5F5E8E8E8E8E8E8E8E8E8E7E7E7E6E6E6 - B9B9B9ABABABDCDCDCF8F8F8F9F9F9FBFBFBFFFFFFFFFFFFEAEAEAEBEBEBEBEB - EBEBEBEBE8E8E8E4E4E4CECECE9D9D9DC9C9C9F5F5F5F8F8F8F7F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7FFFFFFF8F8F8EAEAEAEAEAEAECECECEAEAEAE9E9E9EAEAEA - E9E9E9E8E8E8E7E7E7E7E7E7E7E7E7E6E6E6E7E7E7E8E8E8E9E9E9EAEAEAECEC - ECEEEEEEEEEEEEFEFEFEFCFCFCFBFBFBF8F8F8F8F8F8FAFAFAF9F9F9F5F5F5F4 - F4F4F4F4F4F4F4F4F3F3F3EEEEEEF1F1F1F5F5F5F6F6F6F6F6F6F7F7F7F6F6F6 - F7F7F7F8F8F8F8F8F8F6F6F6F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFDFDFDFDFDFDFAFAFAF8F8F8F4F4F4F2F2F2F4F4F4F6F6F6F5F5F5F7 - F7F7F5F5F5F4F4F4F3F3F3F3F3F3F4F4F4F4F4F4F4F4F4F6F6F6F9F9F9F7F7F7 - F7F7F7FFFFFFFFFFFFE7E7E7E4E4E4E1E1E1E4E4E4E8E8E8EAEAEAEBEBEBEBEB - EBEBEBEBECECECEEEEEEEFEFEFEEEEEEFBFBFBFCFCFCFBFBFBF9F9F9F9F9F9FF - FFFFEEEEEEEDEDEDDFDFDFC3C3C3DDDDDDF6F6F6F4F4F4F5F5F5F7F7F7F7F7F7 - FFFFFFF7F7F7E9E9E9EBEBEBEAEAEAE8E8E8E9E9E9E9E9E9E6E6E6B7B7B7CCCC - CCF8F8F8F9F9F9FCFCFCFCFCFCFFFFFFD1D1D1B2B2B2E0E0E0F5F5F5F4F4F4F6 - F6F6F7F7F7F9F9F9F8F8F8F9F9F9F9F9F9FBFBFBFBFBFBF5F5F5F2F2F2F2F2F2 - F1F1F1F3F3F3F5F5F5F3F3F3EFEFEFF1F1F1F5F5F5F7F7F7F6F6F6F4F4F4F3F3 - F3F3F3F3F3F3F3E2E2E2D1D1D1E5E5E5F5F5F5FDFDFDFFFFFFFFFFFFFFFFFFFF - FFFFF0F0F0EDEDEDE7E7E7E7E7E7E7E7E7E7E7E7C2C2C2E9E9E9FFFFFFFFFFFF - FEFEFEFEFEFEFEFEFEFBFBFBFCFCFCFDFDFDFDFDFDFBFBFBFCFCFCFBFBFBF9F9 - F9F8F8F8F8F8F8F8F8F8F7F7F7F7F7F7F8F8F8F7F7F7F7F7F7F3F3F3F1F1F1F7 - F7F7FAFAFAFBFBFBFBFBFBF9F9F9F8F8F8F7F7F7F6F6F6F7F7F7F5F5F5BFBFBF - D0D0D0FFFFFFFFFFFFFFFFFFF8F8F8F8F8F8F7F7F7F8F8F8FCFCFCFDFDFDFDFD - FDFCFCFCFAFAFAFBFBFBFBFBFBF6F6F6F5F5F5F5F5F5F4F4F4F3F3F3F5F5F5F8 - F8F8F7F7F7F7F7F7F6F6F6F5F5F5F5F5F5F5F5F5F5F5F5F3F3F3F7F7F7FFFFFF - FFFFFFFFFFFFFFFFFFEDEDEDEEEEEEF1F1F1F4F4F4EEEEEEE9E9E9E9E9E9E9E9 - E9E9E9E9E7E7E7E6E6E6E7E7E7F7F7F7FAFAFAFFFFFFFFFFFFECECECECECECEA - EAEAEEEEEEF3F3F3F0F0F0EAEAEAEAEAEAEAEAEAE9E9E9E5E5E5F1F1F1F4F4F4 - F7F7F7FAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFCFCFCEAEAEAEBEBEBE9E9E9E6E6 - E6E2E2E2DADADAE1E1E1EDEDEDEEEEEEEEEEEEEDEDEDEDEDEDEDEDEDECECECDF - DFDFD0D0D0D3D3D3C9C9C9F7F7F7FFFFFFEAEAEAE9E9E9EAEAEAE9E9E9E6E6E6 - B7B7B7C4C4C4F2F2F2F8F8F8F7F7F7F9F9F9FFFFFFFAFAFAE7E7E7E9E9E9EAEA - EAE7E7E7E6E6E6E3E3E3B5B5B5B1B1B1E1E1E1F8F8F8F9F9F9F7F7F7F7F7F7F7 - F7F7F6F6F6F7F7F7F7F7F7FFFFFFFBFBFBEBEBEBEBEBEBE9E9E9E9E9E9E9E9E9 - E7E7E7E7E7E7E7E7E7E7E7E7E6E6E6D0D0D0D2D2D2E8E8E8E9E9E9EAEAEAEAEA - EAEAEAEAE9E9E9E7E7E7FFFFFFFFFFFFFBFBFBFAFAFAFBFBFBF9F9F9F7F7F7F9 - F9F9F8F8F8F5F5F5F1F1F1F0F0F0F4F4F4F7F7F7F7F7F7F7F7F7F7F7F7F6F6F6 - F6F6F6F8F8F8F7F7F7F9F9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFF1F1F1F0F0F0FCFCFCFFFFFFFFFFFFF9F9F9F6F6F6F7F7F7F6F6F6F4F4F4F4 - F4F4F3F3F3F3F3F3F3F3F3F3F3F3F5F5F5F6F6F6F6F6F6F7F7F7F8F8F8F8F8F8 - F8F8F8FFFFFFECECECD3D3D3E1E1E1E4E4E4E6E6E6E8E8E8E9E9E9EAEAEAEBEB - EBECECECEDEDEDEEEEEEEEEEEEEEEEEEEDEDEDFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFEEEEEEEEEEEED1D1D1CECECEE9E9E9F4F4F4F5F5F5F4F4F4F1F1F1F0F0F0 - FFFFFFF7F7F7EAEAEAEAEAEAEAEAEAEAEAEAE9E9E9E9E9E9E7E7E7B5B5B5CBCB - CBFAFAFAFDFDFDFFFFFFFDFDFDFBFBFBE4E4E4E0E0E0F5F5F5F4F4F4F6F6F6F7 - F7F7F8F8F8F8F8F8F9F9F9FAFAFAF8F8F8F9F9F9FBFBFBF6F6F6F4F4F4F3F3F3 - F3F3F3F4F4F4F4F4F4F1F1F1F1F1F1F3F3F3F5F5F5F6F6F6F3F3F3F4F4F4F5F5 - F5F6F6F6F7F7F7F8F8F8F8F8F8F8F8F8F8F8F8FFFFFFFFFFFFFFFFFFFEFEFEEB - EBEBEAEAEAE8E8E8E6E6E6E7E7E7E4E4E4E3E3E3C3C3C3F9F9F9FFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFBFBFBFBFBFBFCFCFCFDFDFDFBFBFBFBFB - FBFBFBFBFBFBFBFBFBFBFCFCFCFCFCFCFAFAFAF9F9F9F8F8F8F5F5F5F9F9F9FD - FDFDFFFFFFFEFEFEFFFFFFFDFDFDF8F8F8F8F8F8F8F8F8F7F7F7F7F7F7F2F2F2 - FFFFFFFFFFFFFFFFFFF8F8F8FFFFFFFFFFFFFFFFFFF9F9F9FBFBFBFCFCFCFDFD - FDFCFCFCF9F9F9FAFAFAF9F9F9F3F3F3F4F4F4F6F6F6F5F5F5F5F5F5F9F9F9FB - FBFBF8F8F8F8F8F8F7F7F7F5F5F5F5F5F5F5F5F5F4F4F4F1F1F1FFFFFFFFFFFF - FFFFFFF5F5F5F3F3F3ECECECECECECF3F3F3F3F3F3ECECECEAEAEAEDEDEDEDED - EDEBEBEBE8E8E8E6E6E6E4E4E4E1E1E1FFFFFFFFFFFFFFFFFFEFEFEFECECECEB - EBEBF0F0F0F3F3F3EEEEEEEAEAEAE9E9E9E9E9E9E9E9E9E8E8E8EAEAEAFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBEBEBEBEAEAEAE8E8E8E4E4E4E1E1 - E1DBDBDBD6D6D6E1E1E1ECECECEDEDEDEDEDEDEDEDEDEEEEEEECECECEBEBEBD0 - D0D0CECECEECECECEEEEEEFFFFFFFFFFFFECECECEAEAEAEBEBEBE9E9E9E6E6E6 - B7B7B7C9C9C9F8F8F8FCFCFCFBFBFBFCFCFCFCFCFCF7F7F7E7E7E7E6E6E6E7E7 - E7E6E6E6E5E5E5CECECE9F9F9FCDCDCDF8F8F8FCFCFCFBFBFBF8F8F8F7F7F7F6 - F6F6F6F6F6F7F7F7F7F7F7FFFFFFFCFCFCEEEEEEECECECECECECEDEDEDEBEBEB - E9E9E9E7E7E7D7D7D7C4C4C4BDBDBDA5A5A5CFCFCFE8E8E8E9E9E9E8E8E8EAEA - EAE9E9E9E6E6E6E6E6E6FBFBFBFDFDFDF8F8F8F8F8F8F8F8F8F7F7F7F7F7F7F9 - F9F9F5F5F5F0F0F0ECECECF0F0F0F4F4F4F7F7F7F8F8F8F7F7F7F6F6F6F6F6F6 - F8F8F8F8F8F8F7F7F7F9F9F9FFFFFFFFFFFFFEFEFEEDEDEDECECECECECECEBEB - EBD6D6D6DEDEDEF3F3F3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8F8F6F6F6F6 - F6F6F8F8F8F9F9F9F7F7F7F7F7F7F8F8F8F8F8F8F7F7F7F8F8F8FAFAFAFBFBFB - FAFAFAF8F8F8E7E7E7EFEFEFF3F3F3E6E6E6E6E6E6E9E9E9E9E9E9E9E9E9E9E9 - E9EBEBEBEAEAEAEBEBEBEDEDEDECECECEAEAEAFEFEFEFFFFFFFFFFFFFFFFFFFF - FFFFEDEDEDECECECD0D0D0DCDCDCF4F4F4F5F5F5F7F7F7F3F3F3F0F0F0F2F2F2 - F3F3F3FFFFFFFDFDFDECECECECECECE9E9E9E9E9E9E9E9E9E7E7E7B7B7B7CCCC - CCFBFBFBFEFEFEFEFEFEFCFCFCFBFBFBFBFBFBF8F8F8F5F5F5F6F6F6F7F7F7F8 - F8F8F8F8F8F9F9F9FCFCFCFBFBFBF8F8F8F9F9F9FAFAFAF7F7F7F4F4F4F3F3F3 - F3F3F3F4F4F4F3F3F3F1F1F1F1F1F1F3F3F3F5F5F5F4F4F4F4F4F4F7F7F7F8F8 - F8F8F8F8F9F9F9FAFAFAFAFAFAFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFEAEAEAE9 - E9E9EAEAEAE7E7E7E4E4E4E2E2E2DFDFDFD1D1D1C3C3C3FFFFFFFFFFFFEFEFEF - FEFEFEFFFFFFFFFFFFE9E9E9E6E6E6F9F9F9FCFCFCFEFEFEFEFEFEFDFDFDFDFD - FDFCFCFCFDFDFDFEFEFEFEFEFEFBFBFBFBFBFBF9F9F9F8F8F8FAFAFAFDFDFDFE - FEFEFDFDFDFEFEFEFDFDFDFBFBFBF8F8F8F9F9F9F8F8F8F7F7F7F8F8F8FFFFFF - FFFFFFFFFFFFF8F8F8EAEAEAFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFCFC - FCF9F9F9F7F7F7F7F7F7F3F3F3F3F3F3F4F4F4F5F5F5F7F7F7F8F8F8FDFDFDFD - FDFDF8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F7F7F7F3F3F3F0F0F0FFFFFFFFFFFF - F7F7F7EEEEEEEEEEEEEBEBEBEBEBEBF3F3F3F1F1F1EAEAEAEDEDEDECECECEAEA - EAE9E9E9E4E4E4E4E4E4E3E3E3DCDCDCF0F0F0FFFFFFFAFAFAF1F1F1EDEDEDEC - ECECF3F3F3F3F3F3EDEDEDE9E9E9E9E9E9E9E9E9E8E8E8E9E9E9EBEBEBFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFF9F9F9E8E8E8E9E9E9E7E7E7E6E6E6E2E2E2DCDC - DCD9D9D9DDDDDDE6E6E6ECECECEDEDEDEDEDEDEDEDEDEDEDEDECECECDFDFDFC3 - C3C3DCDCDCFFFFFFF0F0F0FFFFFFFFFFFFECECECEBEBEBEAEAEAE7E7E7CECECE - 999999CCCCCCF8F8F8FEFEFEFCFCFCFEFEFEFDFDFDF8F8F8F8F8F8E7E7E7E6E6 - E6E4E4E4E2E2E2B8B8B8B7B7B7E6E6E6FBFBFBFCFCFCFBFBFBF8F8F8F7F7F7F8 - F8F8F8F8F8F8F8F8F8F8F8F8F8F8FFFFFFFCFCFCEAEAEAEAEAEAEAEAEAE9E9E9 - E7E7E7E4E4E4C3C3C3B9B9B9C8C8C8CCCCCCE2E2E2F3F3F3E6E6E6E8E8E8E9E9 - E9E8E8E8E6E6E6E6E6E6E3E3E3E4E4E4D1D1D1E3E3E3F7F7F7F6F6F6F7F7F7F7 - F7F7F4F4F4F2F2F2F1F1F1F3F3F3F5F5F5F8F8F8F8F8F8F7F7F7F7F7F7F9F9F9 - F9F9F9F8F8F8F8F8F8FFFFFFFFFFFFFFFFFFEDEDEDECECECEDEDEDEDEDEDEDED - EDE4E4E4F5F5F5FFFFFFFFFFFFFEFEFEF5F5F5FFFFFFFBFBFBF8F8F8F5F5F5F8 - F8F8FDFDFDFCFCFCF9F9F9F8F8F8F8F8F8F8F8F8F7F7F7F8F8F8FBFBFBFCFCFC - FAFAFAF9F9F9FBFBFBFFFFFFFFFFFFE9E9E9D7D7D7DADADAE8E8E8E5E5E5E8E8 - E8ECECECE9E9E9ECECECEDEDEDEBEBEBE9E9E9EBEBEBEBEBEBEBEBEBE9E9E9FF - FFFFDFDFDFDFDFDFC3C3C3DADADAF5F5F5F7F7F7F5F5F5F0F0F0F3F3F3F7F7F7 - F9F9F9FFFFFFFFFFFFEDEDEDECECECEEEEEEECECECE8E8E8E7E7E7BABABACACA - CAF9F9F9FDFDFDFEFEFEFDFDFDFBFBFBFBFBFBF9F9F9F7F7F7F7F7F7F8F8F8F8 - F8F8F8F8F8FBFBFBFCFCFCFAFAFAF8F8F8F8F8F8F8F8F8F7F7F7F4F4F4F5F5F5 - F3F3F3F3F3F3F3F3F3F0F0F0F1F1F1F3F3F3F1F1F1EFEFEFF3F3F3F8F8F8F8F8 - F8F9F9F9FBFBFBFAFAFAFBFBFBFFFFFFFFFFFFFFFFFFFDFDFDECECECE7E7E7D3 - D3D3D3D3D3D0D0D0B8B8B8B7B7B7BABABAACACACD2D2D2FDFDFDFEFEFEECECEC - E9E9E9E7E7E7E6E6E6BEBEBED0D0D0F7F7F7F8F8F8FAFAFAFBFBFBFCFCFCFEFE - FEFEFEFEFFFFFFFCFCFCF9F9F9F7F7F7F7F7F7F6F6F6F9F9F9FCFCFCFEFEFEFB - FBFBFBFBFBFCFCFCF9F9F9F8F8F8F8F8F8F9F9F9F8F8F8F7F7F7F8F8F8FFFFFF - FFFFFFEAEAEAEAEAEAEAEAEAEDEDEDF0F0F0EEEEEEFEFEFEF4F4F4EFEFEFF9F9 - F9F8F8F8F7F7F7F4F4F4F3F3F3F3F3F3F5F5F5F7F7F7F8F8F8F8F8F8FDFDFDFD - FDFDF9F9F9F8F8F8F9F9F9F9F9F9F7F7F7F5F5F5F0F0F0EEEEEEF3F3F3F4F4F4 - E8E8E8ECECECEDEDEDEAEAEAEAEAEAF0F0F0EDEDEDECECECEAEAEAE8E8E8E6E6 - E6E3E3E3DDDDDDDEDEDEDFDFDFDDDDDDE3E3E3EAEAEAEFEFEFF0F0F0EDEDEDF0 - F0F0F8F8F8F3F3F3EBEBEBE8E8E8E7E7E7E7E7E7E7E7E7E9E9E9EBEBEBEDEDED - EDEDEDE9E9E9E6E6E6E3E3E3E4E4E4E7E7E7E8E8E8E7E7E7D2D2D2BABABAC8C8 - C8DDDDDDE3E3E3E9E9E9ECECECECECECEDEDEDEDEDEDEDEDEDDFDFDFC2C2C2CD - CDCDE8E8E8F6F6F6FCFCFCFFFFFFFFFFFFE9E9E9EBEBEBEAEAEAE7E7E7B3B3B3 - AEAEAEE2E2E2F8F8F8FBFBFBFBFBFBFBFBFBFCFCFCF9F9F9F9F9F9F7F7F7D5D5 - D5C1C1C1C1C1C1A8A8A8D0D0D0FCFCFCFEFEFEFDFDFDFBFBFBF8F8F8F8F8F8FA - FAFAF9F9F9F9F9F9FAFAFAFBFBFBFFFFFFFFFFFFE8E8E8E8E8E8E8E8E8E6E6E6 - E3E3E3D5D5D5B3B3B3CDCDCDEAEAEAEFEFEFF2F2F2F3F3F3F5F5F5E7E7E7E6E6 - E6E6E6E6E2E2E2E1E1E1E1E1E1E3E3E3B8B8B8CBCBCBF4F4F4F7F7F7F8F8F8F8 - F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F9F9F9F8F8F8F7F7F7F8F8F8 - F8F8F8FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFEBEBEBECECECEDEDEDEBEBEBEAEA - EADFDFDFDCDCDCF2F2F2FFFFFFF3F3F3E9E9E9E9E9E9EAEAEAECECECFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFF8F8F8F7F7F7F7F7F7F8F8F8F9F9F9FEFEFEFEFEFE - FBFBFBF9F9F9FBFBFBFFFFFFE8E8E8C6C6C6B2B2B2D5D5D5D7D7D7C7C7C7CDCD - CDDCDCDCE7E7E7EAEAEAECECECEAEAEAEAEAEAEAEAEAEAEAEAE9E9E9E7E7E7FF - FFFFDCDCDCD5D5D5D0D0D0E8E8E8F5F5F5F7F7F7F2F2F2F1F1F1F6F6F6F8F8F8 - FFFFFFFFFFFFFFFFFFEBEBEBE9E9E9EDEDEDD7D7D7D3D3D3D1D1D1A3A3A3CCCC - CCFBFBFBFEFEFEFEFEFEFDFDFDFBFBFBFBFBFBF9F9F9F8F8F8F8F8F8F8F8F8F8 - F8F8F8F8F8FCFCFCFBFBFBF8F8F8F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F5F5F5 - F2F2F2F3F3F3F3F3F3F1F1F1F3F3F3F1F1F1F0F0F0F0F0F0F8F8F8FCFCFCFAFA - FAFCFCFCFCFCFCFBFBFBFFFFFFFFFFFFFFFFFFFBFBFBE9E9E9E9E9E9D9D9D9AE - AEAED0D0D0BDBDBDB8B8B8CCCCCCD1D1D1D4D4D4F8F8F8FFFFFFFBFBFBE8E8E8 - E7E7E7E4E4E4E1E1E1BDBDBDD2D2D2F7F7F7F7F7F7F8F8F8F9F9F9FBFBFBFDFD - FDFDFDFDFAFAFAF7F7F7F5F5F5F6F6F6F6F6F6F6F6F6F9F9F9FBFBFBFFFFFFFF - FFFFFBFBFBF9F9F9F7F7F7F7F7F7F8F8F8F8F8F8F8F8F8F7F7F7F7F7F7FFFFFF - FFFFFFEAEAEAEAEAEAE9E9E9EAEAEAEBEBEBEBEBEBEDEDEDE1E1E1EAEAEAF8F8 - F8F8F8F8F5F5F5F2F2F2F2F2F2F5F5F5F8F8F8F9F9F9F9F9F9F9F9F9FBFBFBFB - FBFBFBFBFBFCFCFCFAFAFAFFFFFFFFFFFFF3F3F3EDEDEDEEEEEEF3F3F3F6F6F6 - F6F6F6F1F1F1F0F0F0ECECECEBEBEBEBEBEBF0F0F0EDEDEDE7E7E7E5E5E5E4E4 - E4DFDFDFD9D9D9D9D9D9DDDDDDE1E1E1E5E5E5E9E9E9ECECECEEEEEEECECECF4 - F4F4F5F5F5EDEDEDE8E8E8E7E7E7E9E9E9E9E9E9E9E9E9EAEAEAE9E9E9EAEAEA - E9E9E9E6E6E6E2E2E2DCDCDCE1E1E1E6E6E6CCCCCCB2B2B29E9E9EB5B5B5DDDD - DDE6E6E6E9E9E9ECECECEDEDEDECECECECECECEDEDEDDFDFDFC0C0C0CCCCCCE8 - E8E8F6F6F6FFFFFFFFFFFFFFFFFFF9F9F9E8E8E8EBEBEBEAEAEAE4E4E4AFAFAF - CACACAF9F9F9F8F8F8F8F8F8F8F8F8F8F8F8F9F9F9F8F8F8F5F5F5F6F6F6E3E3 - E3CECECECECECECECECEE5E5E5FDFDFDFDFDFDFBFBFBF9F9F9F8F8F8F8F8F8FA - FAFAFAFAFAFBFBFBFCFCFCFFFFFFFFFFFFFFFFFFEAEAEAECECECEAEAEAE8E8E8 - E6E6E6C8C8C8BDBDBDDADADAEDEDEDF1F1F1F4F4F4F5F5F5F8F8F8FFFFFFF9F9 - F9E5E5E5E1E1E1E2E2E2E3E3E3E4E4E4B5B5B5C9C9C9F5F5F5F7F7F7F8F8F8F8 - F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8FBFBFBFBFBFBFBFBFBFCFCFC - FCFCFCFEFEFEFFFFFFFFFFFFFFFFFFF9F9F9ECECECEDEDEDEEEEEEECECECEAEA - EADFDFDFE7E7E7FBFBFBF4F4F4E7E7E7E7E7E7E7E7E7E9E9E9ECECECFEFEFEFF - FFFFFFFFFFFFFFFFE9E9E9E1E1E1F7F7F7F8F8F8F9F9F9FCFCFCFFFFFFFEFEFE - FAFAFAF8F8F8F7F7F7F4F4F4E2E2E2D2D2D2D0D0D0E6E6E6E5E5E5D7D7D7DBDB - DBF5F5F5F7F7F7EBEBEBECECECE6E6E6E4E4E4E1E1E1D1D1D1BEBEBEB9B9B9FF - FFFFEDEDEDEEEEEEEDEDEDF5F5F5F6F6F6F5F5F5F2F2F2F5F5F5F9F9F9FFFFFF - FFFFFFFFFFFFFFFFFFEAEAEADCDCDCD0D0D0B4B4B4D3D3D3BDBDBDB7B7B7E3E3 - E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F8F8F8F8F8F8F8F8F8F9 - F9F9FBFBFBFDFDFDFAFAFAF7F7F7F7F7F7F8F8F8F9F9F9F9F9F9F7F7F7F5F5F5 - F3F3F3F4F4F4F4F4F4F3F3F3F3F3F3EEEEEEF2F2F2F8F8F8FFFFFFFFFFFFFBFB - FBFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEAEAEAD0D0D0BABABABC - BCBCDFDFDFE2E2E2E1E1E1F0F0F0F2F2F2F5F5F5FFFFFFFCFCFCD9D9D9D6D6D6 - E6E6E6E0E0E0CDCDCDAFAFAFD3D3D3F5F5F5F8F8F8FBFBFBFCFCFCFCFCFCFCFC - FCF9F9F9F6F6F6F5F5F5F7F7F7F7F7F7F7F7F7F7F7F7F9F9F9FCFCFCFFFFFFFF - FFFFFDFDFDFEFEFEF7F7F7F7F7F7F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8FFFFFF - FFFFFFEAEAEAE9E9E9E9E9E9EAEAEAEBEBEBEBEBEBEBEBEBEBEBEBE9E9E9F3F3 - F3F4F4F4F2F2F2F1F1F1F4F4F4F7F7F7F8F8F8F8F8F8F8F8F8F9F9F9FDFDFDFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7E2E2E2E9E9E9ECECECF3F3F3F6F6F6 - F7F7F7FFFFFFFFFFFFECECECDADADAC6C6C6CACACABCBCBCAFAFAFA9A9A9A3A3 - A3BBBBBBD6D6D6DADADAE1E1E1E7E7E7E7E7E7E9E9E9EDEDEDF2F2F2F2F2F2F5 - F5F5F0F0F0E8E8E8E7E7E7E7E7E7E9E9E9E9E9E9E8E8E8E8E8E8E7E7E7E8E8E8 - E6E6E6CDCDCDAFAFAFB0B0B0B5B5B5B2B2B28C8C8CACACACCECECEE4E4E4F8F8 - F8FFFFFFFDFDFDF1F1F1EEEEEEEDEDEDEDEDEDECECECD0D0D0CCCCCCE6E6E6F1 - F1F1F4F4F4FFFFFFFFFFFFFDFDFDEAEAEAE8E8E8E9E9E9E7E7E7DFDFDFB5B5B5 - E2E2E2FFFFFFF7F7F7FFFFFFFFFFFFFFFFFFF8F8F8F7F7F7F6F6F6F9F9F9F5F5 - F5F4F4F4F5F5F5F6F6F6FAFAFAFDFDFDFBFBFBF8F8F8F8F8F8F8F8F8F8F8F8FA - FAFAFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFF8F8F8EAEAEAEAEAEAEAEAEAE9E9E9 - E9E9E9C5C5C5C8C8C8EAEAEAF0F0F0F5F5F5F5F5F5F6F6F6F7F7F7FFFFFFFFFF - FFE6E6E6E5E5E5E7E7E7D0D0D0B6B6B69D9D9DCCCCCCF7F7F7F8F8F8F9F9F9F8 - F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8FCFCFCFDFDFDFEFEFEFDFDFD - FBFBFBFCFCFCFFFFFFFFFFFFFEFEFEF0F0F0EEEEEEEFEFEFEDEDEDEDEDEDEDED - EDEDEDEDF6F6F6FEFEFEF4F4F4E7E7E7E6E6E6E7E7E7EAEAEAEAEAEAECECECEE - EEEEEFEFEFECECECBABABACBCBCBF7F7F7F9F9F9FCFCFCFEFEFEFFFFFFFEFEFE - FAFAFAF8F8F8F7F7F7F7F7F7F4F4F4F3F3F3F4F4F4F7F7F7F8F8F8F8F8F8F9F9 - F9FFFFFFFCFCFCEEEEEEECECECE7E7E7E4E4E4D4D4D4B2B2B2BCBCBCC8C8C8FF - FFFFF8F8F8F7F7F7F6F6F6F5F5F5F1F1F1F2F2F2F4F4F4F8F8F8FFFFFFFFFFFF - FFFFFFFFFFFFEDEDEDDCDCDCC1C1C1C8C8C8D3D3D3E5E5E5E2E2E2E3E3E3F7F7 - F7FFFFFFFBFBFBFFFFFFFFFFFFEDEDEDE9E9E9F8F8F8F9F9F9F8F8F8F9F9F9FC - FCFCFCFCFCFBFBFBF8F8F8F7F7F7F7F7F7FFFFFFFFFFFFFDFDFDF9F9F9F7F7F7 - F6F6F6F6F6F6F5F5F5F3F3F3F0F0F0EEEEEEF4F4F4FCFCFCFFFFFFFDFDFDFBFB - FBFEFEFEFFFFFFFEFEFEFBFBFBF9F9F9FFFFFFF8F8F8D0D0D0CACACAD1D1D1D9 - D9D9ECECECF3F3F3F1F1F1EFEFEFF3F3F3F5F5F5F8F8F8EAEAEAD7D7D7E6E6E6 - EAEAEADFDFDFBCBCBCC5C5C5E7E7E7F5F5F5FBFBFBFDFDFDFBFBFBFBFBFBF9F9 - F9F6F6F6F5F5F5F6F6F6F7F7F7F5F5F5F5F5F5F7F7F7F9F9F9F9F9F9FFFFFFFF - FFFFF5F5F5E7E7E7E9E9E9F6F6F6F7F7F7F8F8F8F8F8F8F9F9F9F8F8F8FFFFFF - FFFFFFF6F6F6E9E9E9E9E9E9EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBE9E9E9DCDC - DCE6E6E6F2F2F2F3F3F3F5F5F5F7F7F7F8F8F8F9F9F9FAFAFAFEFEFEFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFECECECDEDEDEE9E9E9F0F0F0F6F6F6F8F8F8 - F9F9F9FFFFFFEDEDEDC8C8C8B3B3B3BFBFBFD0D0D0CBCBCBC6C6C6BFBFBFBABA - BAD3D3D3DCDCDCDFDFDFE6E6E6E9E9E9E7E7E7EBEBEBEFEFEFF1F1F1F0F0F0F0 - F0F0ECECECE7E7E7E7E7E7E7E7E7E9E9E9E8E8E8E7E7E7E7E7E7E7E7E7E4E4E4 - CCCCCC9B9B9BACACACC1C1C1BFBFBFBEBEBEC1C1C1E1E1E1FCFCFCF9F9F9FBFB - FBFFFFFFFFFFFFF1F1F1EFEFEFECECECECECECECECECCECECED7D7D7EFEFEFF1 - F1F1F5F5F5F5F5F5FFFFFFFBFBFBE8E8E8E8E8E8E6E6E6E3E3E3DEDEDECDCDCD - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFDFDFDF8F8 - F8F7F7F7FBFBFBFAFAFAFCFCFCFDFDFDFBFBFBF9F9F9F9F9F9F8F8F8F9F9F9FD - FDFDFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9E9E9E9E9E9E9EAEAEAD8D8D8C3C3C3 - C1C1C1A9A9A9CCCCCCF1F1F1F4F4F4F4F4F4F6F6F6F5F5F5F5F5F5FFFFFFF9F9 - F9E7E7E7E7E7E7E4E4E4B4B4B4B2B2B2CCCCCCE3E3E3F8F8F8F9F9F9F9F9F9F8 - F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8FCFCFCFFFFFFFEFEFEF9F9F9 - F7F7F7F9F9F9FFFFFFFFFFFFF0F0F0EDEDEDECECECECECECECECECEBEBEBEAEA - EAE8E8E8E6E6E6E6E6E6E7E7E7E7E7E7E6E6E6E7E7E7EAEAEAE9E9E9EAEAEAEC - ECECECECECE9E9E9BABABACACACAF6F6F6FAFAFAFBFBFBFEFEFEFFFFFFFCFCFC - F8F8F8F7F7F7F6F6F6F4F4F4F3F3F3F5F5F5F7F7F7F8F8F8FAFAFAFBFBFBFBFB - FBFFFFFFFFFFFFF8F8F8ECECECEBEBEBDEDEDEBFBFBFC8C8C8E6E6E6F5F5F5FF - FFFFF6F6F6F5F5F5F5F5F5F4F4F4EDEDEDEFEFEFF5F5F5FFFFFFFFFFFFFFFFFF - FFFFFFEEEEEEECECECD2D2D2D0D0D0E6E6E6F4F4F4F7F7F7F7F7F7F7F7F7F7F7 - F7FFFFFFEAEAEAF8F8F8FFFFFFC7C7C7D6D6D6F8F8F8FAFAFAFBFBFBFCFCFCFC - FCFCFAFAFAF8F8F8F7F7F7F7F7F7F8F8F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - F7F7F7F6F6F6F4F4F4F3F3F3F0F0F0F2F2F2F8F8F8F9F9F9FAFAFAFAFAFAFCFC - FCFFFFFFFEFEFEF8F8F8F8F8F8F7F7F7F5F5F5EAEAEAD9D9D9E4E4E4ECECECEA - EAEAF0F0F0F1F1F1F3F3F3F6F6F6F9F9F9F9F9F9FBFBFBFCFCFCF9F9F9F8F8F8 - FFFFFFE4E4E4B7B7B7DCDCDCF8F8F8F5F5F5FBFBFBFBFBFBF9F9F9F7F7F7F6F6 - F6F5F5F5F5F5F5F6F6F6F6F6F6F4F4F4F5F5F5F8F8F8F7F7F7F5F5F5FFFFFFFC - FCFCEAEAEADCDCDCE6E6E6F4F4F4F6F6F6F8F8F8F8F8F8F9F9F9F8F8F8FFFFFF - FFFFFFFFFFFFE9E9E9E9E9E9EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBCDCD - CDD2D2D2EEEEEEEFEFEFEEEEEEF0F0F0F2F2F2F7F7F7FCFCFCFFFFFFFFFFFFFF - FFFFFFFFFFFBFBFBEDEDEDEDEDEDD8D8D8BEBEBEDEDEDEF4F4F4F8F8F8F9F9F9 - F9F9F9FCFCFCEDEDEDD8D8D8D3D3D3E4E4E4F5F5F5F7F7F7F7F7F7F2F2F2F0F0 - F0F4F4F4F8F8F8E7E7E7E9E9E9EBEBEBEAEAEAEBEBEBECECECEAEAEAE9E9E9EA - EAEAE9E9E9E4E4E4E3E3E3E3E3E3E7E7E7E8E8E8E7E7E7E7E7E7E4E4E4D8D8D8 - B2B2B2B5B5B5DCDCDCEAEAEAECECECF1F1F1F7F7F7FAFAFAFCFCFCFFFFFFFFFF - FFFFFFFFFFFFFFF2F2F2EEEEEEEAEAEAEBEBEBECECECCDCDCDD3D3D3F1F1F1F8 - F8F8F9F9F9F8F8F8FFFFFFFBFBFBEAEAEAE4E4E4E0E0E0E1E1E1E1E1E1E5E5E5 - FAFAFAFBFBFBFDFDFDFFFFFFFFFFFFFAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFF7F7F7F9F9F9F8F8F8F9F9F9FBFBFBFAFAFAF9F9F9F9F9F9F9F9F9FBFBFBFF - FFFFFFFFFFFFFFFFFFFFFFEAEAEAEAEAEAEAEAEAD7D7D7C3C3C3AFAFAFBCBCBC - D0D0D0D0D0D0E3E3E3F6F6F6F5F5F5F6F6F6F7F7F7F6F6F6F7F7F7FCFCFCFFFF - FFFCFCFCE9E9E9E0E0E0B9B9B9D0D0D0F8F8F8F7F7F7F8F8F8FBFBFBF9F9F9F8 - F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F9F9F9FFFFFFFFFFFFFBFBFBF6F6F6 - F7F7F7FFFFFFFFFFFFFFFFFFECECECE9E9E9E9E9E9EAEAEAE9E9E9EAEAEAE8E8 - E8E6E6E6E4E4E4E4E4E4E7E7E7E7E7E7E7E7E7E6E6E6E8E8E8E7E7E7EAEAEAED - EDEDEAEAEAE5E5E5BCBCBCCACACAF4F4F4FAFAFAFAFAFAFEFEFEFFFFFFFAFAFA - F6F6F6F4F4F4F4F4F4F4F4F4F5F5F5F7F7F7F8F8F8F8F8F8FAFAFAFBFBFBF9F9 - F9FFFFFFFFFFFFF8F8F8EDEDEDEDEDEDD0D0D0C9C9C9E6E6E6F6F6F6F8F8F8FF - FFFFF6F6F6F7F7F7F6F6F6F5F5F5EFEFEFF2F2F2FFFFFFFFFFFFFFFFFFFFFFFF - EFEFEFECECECECECECD5D5D5DCDCDCF3F3F3F6F6F6F7F7F7F9F9F9F8F8F8FFFF - FFFFFFFFFEFEFEFFFFFFFFFFFFDBDBDBE7E7E7F8F8F8F8F8F8F9F9F9FAFAFAF9 - F9F9F8F8F8F7F7F7F7F7F7F7F7F7FFFFFFFFFFFFFFFFFFF8F8F8FFFFFFF4F4F4 - F6F6F6F4F4F4F4F4F4F5F5F5F2F2F2F5F5F5F9F9F9FAFAFAFFFFFFFEFEFEFDFD - FDFFFFFFFBFBFBF5F5F5F9F9F9F4F4F4F1F1F1F4F4F4F0F0F0F1F1F1F0F0F0F0 - F0F0F1F1F1F3F3F3F7F7F7F9F9F9FAFAFAFAFAFAFAFAFAFFFFFFFCFCFCF7F7F7 - FFFFFFEBEBEBC8C8C8EBEBEBF8F8F8F5F5F5F8F8F8F9F9F9F7F7F7F6F6F6F5F5 - F5F5F5F5F5F5F5F7F7F7F6F6F6F5F5F5F8F8F8F9F9F9F7F7F7F5F5F5FFFFFFFD - FDFDEDEDEDEBEBEBDADADAE7E7E7F6F6F6F8F8F8F8F8F8F9F9F9F8F8F8FEFEFE - FFFFFFFFFFFFE9E9E9E9E9E9EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBCACA - CACFCFCFEDEDEDEEEEEEF1F1F1F5F5F5F5F5F5FDFDFDFEFEFEFFFFFFFFFFFFFF - FFFFFAFAFAF0F0F0EEEEEEEDEDEDDADADAD0D0D0E1E1E1F4F4F4F8F8F8F9F9F9 - FBFBFBFFFFFFFEFEFEF7F7F7F3F3F3F5F5F5F8F8F8F8F8F8F4F4F4EFEFEFF3F3 - F3F9F9F9FBFBFBFBFBFBEAEAEAECECECEBEBEBEAEAEAEAEAEAE8E8E8E8E8E8E9 - E9E9E4E4E4E0E0E0E3E3E3E4E4E4E7E7E7E4E4E4E4E4E4E7E7E7E1E1E1C7C7C7 - ACACACD3D3D3F2F2F2EDEDEDF1F1F1F9F9F9FBFBFBFCFCFCFDFDFDFFFFFFFFFF - FFFFFFFFFFFFFFEFEFEFEDEDEDE6E6E6E8E8E8ECECECC8C8C8CFCFCFF4F4F4F9 - F9F9F9F9F9F9F9F9F9F9F9FFFFFFFDFDFDE8E8E8E5E5E5E6E6E6E7E7E7E9E9E9 - EAEAEAEAEAEAEBEBEBF4F4F4F5F5F5F3F3F3F0F0F0EAEAEAFBFBFBFFFFFFE1E1 - E1E2E2E2FEFEFEFCFCFCFCFCFCFDFDFDF9F9F9F8F8F8F8F8F8F8F8F8F9F9F9FF - FFFFFFFFFFFFFFFFF9F9F9EAEAEAEAEAEADADADAB1B1B1BFBFBFD3D3D3E4E4E4 - F5F5F5F5F5F5F6F6F6F8F8F8F7F7F7F7F7F7F8F8F8F8F8F8F9F9F9FCFCFCFFFF - FFEEEEEED8D8D8D3D3D3AFAFAFD8D8D8FBFBFBF9F9F9FAFAFAFBFBFBF9F9F9F8 - F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8FAFAFAFFFFFFFEFEFEF8F8F8F5F5F5 - F8F8F8FFFFFFFFFFFFF9F9F9E9E9E9E9E9E9E9E9E9E9E9E9EAEAEAECECECE9E9 - E9E6E6E6E5E5E5E5E5E5E8E8E8E8E8E8E7E7E7E5E5E5E7E7E7E7E7E7EAEAEAEA - EAEAE7E7E7D0D0D0A3A3A3C8C8C8F4F4F4FAFAFAFAFAFAFEFEFEFFFFFFF9F9F9 - F5F5F5F5F5F5F5F5F5F7F7F7F7F7F7F8F8F8F8F8F8F8F8F8FAFAFAFBFBFBF8F8 - F8FFFFFFFFFFFFEDEDEDEDEDEDEDEDEDCECECED9D9D9F6F6F6F8F8F8F8F8F8FF - FFFFF4F4F4F5F5F5F5F5F5F4F4F4EEEEEEEAEAEAFFFFFFFFFFFFF9F9F9EFEFEF - ECECECECECECECECECD5D5D5D9D9D9F0F0F0F7F7F7F8F8F8F9F9F9F8F8F8FFFF - FFFFFFFFE9E9E9E9E9E9F9F9F9D5D5D5C1C1C1E1E1E1F4F4F4F5F5F5F7F7F7F7 - F7F7F7F7F7F7F7F7F7F7F7F7F7F7FFFFFFFFFFFFF9F9F9E9E9E9E2E2E2D7D7D7 - D0D0D0E9E9E9F5F5F5F6F6F6F3F3F3F5F5F5F9F9F9FAFAFAFCFCFCFDFDFDFCFC - FCFCFCFCF8F8F8F5F5F5F9F9F9F3F3F3EFEFEFF4F4F4F3F3F3F3F3F3F0F0F0EA - EAEAEEEEEEF5F5F5F9F9F9FAFAFAFAFAFAFAFAFAFAFAFAFFFFFFFFFFFFF7F7F7 - FFFFFFEEEEEED6D6D6F7F7F7F8F8F8F5F5F5F6F6F6F6F6F6F6F6F6F5F5F5F5F5 - F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F7F7F7F7F7F7F5F5F5F4F4F4FFFFFFFC - FCFCEAEAEAE6E6E6CACACAD9D9D9F6F6F6F8F8F8F8F8F8F9F9F9F8F8F8FEFEFE - FFFFFFFFFFFFE9E9E9E9E9E9EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBCACA - CACFCFCFF0F0F0F1F1F1F7F7F7FDFDFDFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFEB - EBEBE6E6E6E9E9E9E8E8E8E6E6E6D5D5D5C1C1C1E1E1E1F4F4F4F8F8F8F9F9F9 - FBFBFBFEFEFEFCFCFCF6F6F6F5F5F5F7F7F7F8F8F8F8F8F8F4F4F4F3F3F3F8F8 - F8FBFBFBFBFBFBFFFFFFFFFFFFFFFFFFECECECEAEAEAEAEAEAE8E8E8E8E8E8E9 - E9E9E7E7E7E4E4E4E8E8E8E9E9E9ECECECECECECECECECEAEAEAE1E1E1CACACA - D0D0D0E9E9E9F5F5F5EFEFEFF2F2F2FAFAFAFCFCFCFCFCFCFDFDFDFFFFFFFFFF - FFFFFFFFFFFFFFE6E6E6E7E7E7E2E2E2E4E4E4EBEBEBC8C8C8D4D4D4F7F7F7F9 - F9F9F9F9F9F9F9F9F9F9F9FFFFFFFFFFFFEDEDEDECECECEAEAEAEAEAEAEBEBEB - EAEAEAEAEAEAEBEBEBF5F5F5F0F0F0E8E8E8E8E8E8E7E7E7E2E2E2E3E3E3AFAF - AFCACACAFAFAFAF6F6F6F7F7F7F9F9F9F7F7F7F6F6F6F8F8F8F8F8F8F8F8F8FF - FFFFFFFFFFEAEAEAEAEAEAEAEAEAEAEAEADADADAD1D1D1E3E3E3F7F7F7F7F7F7 - F7F7F7F7F7F7F7F7F7F8F8F8F7F7F7F7F7F7F8F8F8F8F8F8F8F8F8F9F9F9FFFF - FFFFFFFFFFFFFFE9E9E9D4D4D4EBEBEBFDFDFDFAFAFAFAFAFAFBFBFBF9F9F9F8 - F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8FAFAFAFFFFFFFDFDFDF7F7F7F5F5F5 - F8F8F8FFFFFFFFFFFFE9E9E9E7E7E7E7E7E7E7E7E7E7E7E7E9E9E9EAEAEAE6E6 - E6E4E4E4E4E4E4E6E6E6E9E9E9E9E9E9E7E7E7E4E4E4E5E5E5E7E7E7EAEAEAEC - ECECEAEAEAD5D5D5CDCDCDE2E2E2F7F7F7FAFAFAFAFAFAFEFEFEFFFFFFF8F8F8 - F5F5F5F7F7F7F7F7F7F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8FAFAFAFBFBFBF8F8 - F8FFFFFFFFFFFFEDEDEDEDEDEDEDEDEDCECECEDADADAF8F8F8F8F8F8F8F8F8FF - FFFF} - end - object Bevel1: TBevel - Left = 16 - Top = 16 - Width = 297 - Height = 217 - Shape = bsFrame - end - object Label1: TLabel - Left = 128 - Top = 200 - Width = 353 - Height = 13 - Caption = 'Department of Veterans Affairs Veterans Health Administration' - Color = clWhite - Font.Charset = DEFAULT_CHARSET - Font.Color = clBlack - Font.Height = -11 - Font.Name = 'MS Sans Serif' - Font.Style = [fsBold] - ParentColor = False - ParentFont = False - Transparent = True - end - object Label2: TLabel - Left = 258 - Top = 75 - Width = 17 - Height = 12 - AutoSize = False - Caption = 'TM' - Color = clWhite - Font.Charset = DEFAULT_CHARSET - Font.Color = clNavy - Font.Height = -7 - Font.Name = 'Small Fonts' - Font.Style = [fsBold] - ParentColor = False - ParentFont = False - Transparent = True - end - end -end diff --git a/BDK32/Source/Splvista.pas b/BDK32/Source/Splvista.pas deleted file mode 100644 index 9f29477..0000000 --- a/BDK32/Source/Splvista.pas +++ /dev/null @@ -1,93 +0,0 @@ -{ ************************************************************** - Package: XWB - Kernel RPCBroker - Date Created: Sept 18, 1997 (Version 1.1) - Site Name: Oakland, OI Field Office, Dept of Veteran Affairs - Developers: Danila Manapsal, Don Craven, Joel Ivey - Description: Displays VistA splash screen. - Current Release: Version 1.1 Patch 40 (January 7, 2005)) -*************************************************************** } - -unit Splvista; - -{ 1.1*14 Modified the tick types so that code will work with D3, D4, - D5. -- DPC 3/30/00 - - 1.1*11 Changed - from: var StartTick: longint; - to: var StartTick: longword - from: procedure SplashClose(TimeOut: longint); - to: procedure SplashClose(TimeOut: longword); - [Warning] Splvista.pas(53): Combining signed and unsigned types - widened both operands - In Delphi 5 (ver130), GetTickCount's result is of type DWORD, longword - danila - 9/27/99} - -interface - -uses - SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls, - Forms, Dialogs, ExtCtrls, StdCtrls; - -type - TfrmVistaSplash = class(TForm) - Panel1: TPanel; - Image1: TImage; - Bevel1: TBevel; - Label1: TLabel; - Label2: TLabel; - procedure FormCreate(Sender: TObject); - private - { Private declarations } - public - { Public declarations } - end; - -var - frmVistaSplash: TfrmVistaSplash; - StartTick: longword; - -procedure SplashOpen; - - procedure SplashClose(TimeOut: longword); - -implementation - -{$R *.DFM} - - - -procedure SplashOpen; -begin - StartTick := GetTickCount; - try - frmVistaSplash := TfrmVistaSplash.Create(Application); - frmVistaSplash.Show; - except - frmVistaSplash.Release; - frmVistaSplash := nil; - end; -end; - - - - procedure SplashClose(TimeOut: longword); -begin - try - while (GetTickCount - StartTick) < TimeOut do Application.ProcessMessages; - frmVistaSplash.Release; - frmVistaSplash := nil; - except - end; -end; - - -procedure TfrmVistaSplash.FormCreate(Sender: TObject); -begin - {This positions the label correctly in the lower right-hand corner regardless - of the resolution of font size.} - Label1.Caption := 'Department of Veterans Affairs' + #13 + - 'Veterans Health Administration'; - Label1.Left := Width - 25 - Label1.Width; //offset 25 pixels from right - Label1.Top := Height - 25 - Label1.Height; //offset 25 pixels from bottom -end; - -end. diff --git a/BDK32/Source/Trpcb.pas b/BDK32/Source/Trpcb.pas deleted file mode 100644 index 44033de..0000000 --- a/BDK32/Source/Trpcb.pas +++ /dev/null @@ -1,1619 +0,0 @@ -{ ************************************************************** - Package: XWB - Kernel RPCBroker - Date Created: Sept 18, 1997 (Version 1.1) - Site Name: Oakland, OI Field Office, Dept of Veteran Affairs - Developers: Danila Manapsal, Don Craven, Joel Ivey - Description: Contains TRPCBroker and related components. - Current Release: Version 1.1 Patch 40 (January 7, 2005)) -*************************************************************** } - -{************************************************** -This is the hierarchy of things: - TRPCBroker contains - TParams, which contains - array of TParamRecord each of which contains - TMult - -v1.1*4 Silent Login changes (DCM) 10/22/98 - -1.1*6 Polling to support terminating arphaned server jobs. (P6) - == DPC 4/99 - -1.1*8 Check for Multi-Division users. (P8) - REM 7/13/99 - -1.1*13 More silent login code; deleted obsolete lines (DCM) 9/10/99 // p13 -LAST UPDATED: 5/24/2001 // p13 JLI - -1.1*31 Added new read only property BrokerVersion to TRPCBroker which - should contain the version number for the RPCBroker - (or SharedRPCBroker) in use. -**************************************************} -unit Trpcb; - -interface - -{$I IISBase.inc} - -uses - {Delphi standard} - Classes, Controls, Dialogs, {DsgnIntf,} Forms, Graphics, Messages, SysUtils, - WinProcs, WinTypes, Windows, - extctrls, {P6} - {VA} - XWBut1, {RpcbEdtr,} MFunStr, Hash; //P14 -- pack split - -const - NoMore: boolean = False; - MIN_RPCTIMELIMIT: integer = 30; - CURRENT_RPC_VERSION: String = 'XWB*1.1*40'; - -type - -TParamType = (literal, reference, list, global, empty, stream, undefined); // 030107 JLI Modified for new message protocol - -//P14 -- pack split -- Types moved from RpcbEdtr.pas. -TAccessVerifyCodes = string[255]; //to use TAccessVerifyCodesProperty editor use this type -TRemoteProc = string[100]; //to use TRemoteProcProperty editor use this type -TServer = string[255]; //to use TServerProperty editor use this type -TRpcVersion = string[255]; //to use TRpcVersionProperty editor use this type - -TRPCBroker = class; -TVistaLogin = class; -// p13 -TLoginMode = (lmAVCodes, lmAppHandle, lmNTToken); -TShowErrorMsgs = (semRaise, semQuiet); // p13 -TOnLoginFailure = procedure (VistaLogin: TVistaLogin) of object; //p13 -TOnRPCBFailure = procedure (RPCBroker: TRPCBroker) of object; //p13 -TOnPulseError = procedure(RPCBroker: TRPCBroker; ErrorText: String) of object; -// TOnRPCCall = procedure (RPCBroker: TRPCBroker; SetNum: Integer; RemoteProcedure: TRemoteProc; CurrentContext: String; RpcVersion: TRpcVersion; Param: TParams; RPCTimeLimit: Integer; Results, Sec, App: PChar; DateTime: TDateTime) of object; - -{------ EBrokerError ------} -EBrokerError = class(Exception) -public - Action: string; - Code: integer; - Mnemonic: string; -end; - -{------ TString ------} - -TString = class(TObject) - Str: string; -end; - -{------ TMult ------} -{:This component defines the multiple field of a parameter. The multiple - field is used to pass string-subscripted array of data in a parameter.} - -TMult = class(TComponent) -private - FMultiple: TStringList; - procedure ClearAll; - function GetCount: Word; - function GetFirst: string; - function GetLast: string; - function GetFMultiple(Index: string): string; - function GetSorted: boolean; - procedure SetFMultiple(Index: string; value: string); - procedure SetSorted(Value: boolean); -protected -public - constructor Create(AOwner: TComponent); override; {1.1T8} - destructor Destroy; override; - procedure Assign(Source: TPersistent); override; - function Order(const StartSubscript: string; Direction: integer): string; - function Position(const Subscript: string): longint; - function Subscript(const Position: longint): string; - property Count: Word read GetCount; - property First: string read GetFirst; - property Last: string read GetLast; - property MultArray[I: string]: string - read GetFMultiple write SetFMultiple; default; - property Sorted: boolean read GetSorted write SetSorted; -end; - -{------ TParamRecord ------} -{:This component defines all the fields that comprise a parameter.} - -TParamRecord = class(TComponent) -private - FMult: TMult; - FValue: string; - FPType: TParamType; -protected -public - constructor Create(AOwner: TComponent); override; - destructor Destroy; override; - property Value: string read FValue write FValue; - property PType: TParamType read FPType write FPType; - property Mult: TMult read FMult write FMult; -end; - -{------ TParams ------} -{:This component is really a collection of parameters. Simple inclusion - of this component in the Broker component provides access to all of the - parameters that may be needed when calling a remote procedure.} - -TParams = class(TComponent) -private - FParameters: TList; - function GetCount: Word; - function GetParameter(Index: integer): TParamRecord; - procedure SetParameter(Index: integer; Parameter: TParamRecord); -public - constructor Create(AOwner: TComponent); override; - destructor Destroy; override; - procedure Assign(Source: TPersistent); override; - procedure Clear; - property Count: Word read GetCount; - property ParamArray[I: integer]: TParamRecord - read GetParameter write SetParameter; default; -end; - - -{------ TVistaLogin ------} //p13 -TVistaLogin = class(TPersistent) -private - FLogInHandle : string; - FNTToken : string; - FAccessCode : string; - FVerifyCode : string; - FDivision : string; - FMode: TLoginMode; - FDivLst: TStrings; - FOnFailedLogin: TOnLoginFailure; - FMultiDivision : boolean; - FDUZ: string; - FErrorText : string; - FPromptDiv : boolean; - FIsProductionAccount: Boolean; - FDomainName: string; - procedure SetAccessCode(const Value: String); - procedure SetLogInHandle(const Value: String); - procedure SetNTToken(const Value: String); - procedure SetVerifyCode(const Value: String); - procedure SetDivision(const Value: String); - //procedure SetWorkstationIPAddress(const Value: String); - procedure SetMode(const Value: TLoginMode); - procedure SetMultiDivision(Value: Boolean); - procedure SetDuz(const Value: string); - procedure SetErrorText(const Value: string); - procedure SetPromptDiv(const Value: boolean); -protected - procedure FailedLogin(Sender: TObject); dynamic; -public - constructor Create(AOwner: TComponent); virtual; - destructor Destroy; override; - property LogInHandle: String read FLogInHandle write SetLogInHandle; //for use by a 2ndary DHCP login OR ESSO login - property NTToken: String read FNTToken write SetNTToken; - property DivList: TStrings read FDivLst; - property OnFailedLogin: TOnLoginFailure read FOnFailedLogin write FOnFailedLogin; - property MultiDivision: Boolean read FMultiDivision write SetMultiDivision; - property DUZ: string read FDUZ write SetDuz; - property ErrorText: string read FErrorText write SetErrorText; - property IsProductionAccount: Boolean read FIsProductionAccount write - FIsProductionAccount; - property DomainName: string read FDomainName write FDomainName; -published - property AccessCode: String read FAccessCode write SetAccessCode; - property VerifyCode: String read FVerifyCode write SetVerifyCode; - property Mode: TLoginMode read FMode write SetMode; - property Division: String read FDivision write SetDivision; - property PromptDivision: boolean read FPromptDiv write SetPromptDiv; - -end; - -{------ TVistaUser ------} //holds 'generic' user attributes {p13} -TVistaUser = class(TObject) -private - FDUZ: string; - FName: string; - FStandardName: string; - FDivision: String; - FVerifyCodeChngd: Boolean; - FTitle: string; - FServiceSection: string; - FLanguage: string; - FDtime: string; - FVpid: String; - procedure SetDivision(const Value: String); - procedure SetDUZ(const Value: String); - procedure SetName(const Value: String); - procedure SetVerifyCodeChngd(const Value: Boolean); - procedure SetStandardName(const Value: String); - procedure SetTitle(const Value: string); - procedure SetDTime(const Value: string); - procedure SetLanguage(const Value: string); - procedure SetServiceSection(const Value: string); -public - property DUZ: String read FDUZ write SetDUZ; - property Name: String read FName write SetName; - property StandardName: String read FStandardName write SetStandardName; - property Division: String read FDivision write SetDivision; - property VerifyCodeChngd: Boolean read FVerifyCodeChngd write SetVerifyCodeChngd; - property Title: string read FTitle write SetTitle; - property ServiceSection: string read FServiceSection write SetServiceSection; - property Language: string read FLanguage write SetLanguage; - property DTime: string read FDTime write SetDTime; - property Vpid: string read FVpid write FVpid; -end; - -{------ TRPCBroker ------} -{:This component, when placed on a form, allows design-time and run-time - connection to the server by simply toggling the Connected property. - Once connected you can access server data.} - -TRPCBroker = class(TComponent) -//private -private - FBrokerVersion: String; - FIsBackwardCompatibleConnection: Boolean; - FIsNewStyleConnection: Boolean; - FOldConnectionOnly: Boolean; -protected - FAccessVerifyCodes: TAccessVerifyCodes; - FClearParameters: Boolean; - FClearResults: Boolean; - FConnected: Boolean; - FConnecting: Boolean; - FCurrentContext: String; - FDebugMode: Boolean; - FListenerPort: integer; - FParams: TParams; - FResults: TStrings; - FRemoteProcedure: TRemoteProc; - FRpcVersion: TRpcVersion; - FServer: TServer; - FSocket: integer; - FRPCTimeLimit : integer; //for adjusting client RPC duration timeouts - FPulse : TTimer; //P6 - FKernelLogIn : Boolean; //p13 - FLogIn: TVistaLogIn; //p13 - FUser: TVistaUser; //p13 - FOnRPCBFailure: TOnRPCBFailure; - FShowErrorMsgs: TShowErrorMsgs; - FRPCBError: String; - FOnPulseError: TOnPulseError; -protected - procedure SetClearParameters(Value: Boolean); virtual; - procedure SetClearResults(Value: Boolean); virtual; - procedure SetConnected(Value: Boolean); virtual; - procedure SetResults(Value: TStrings); virtual; - procedure SetServer(Value: TServer); virtual; - procedure SetRPCTimeLimit(Value: integer); virtual; //Screen changes to timeout. - procedure DoPulseOnTimer(Sender: TObject); virtual; //p6 - procedure SetKernelLogIn(const Value: Boolean); virtual; -// procedure SetLogIn(const Value: TVistaLogIn); virtual; - procedure SetUser(const Value: TVistaUser); virtual; -public - XWBWinsock: TObject; - property AccessVerifyCodes: TAccessVerifyCodes read FAccessVerifyCodes write FAccessVerifyCodes; - property Param: TParams read FParams write FParams; - property Socket: integer read FSocket; - property RPCTimeLimit : integer read FRPCTimeLimit write SetRPCTimeLimit; - destructor Destroy; override; - procedure Call; virtual; - procedure Loaded; override; - procedure lstCall(OutputBuffer: TStrings); virtual; - function pchCall: PChar; virtual; - function strCall: string; virtual; - function CreateContext(strContext: string): boolean; virtual; - property CurrentContext: String read FCurrentContext; - property User: TVistaUser read FUser write SetUser; - property OnRPCBFailure: TOnRPCBFailure read FOnRPCBFailure write FOnRPCBFailure; - property RPCBError: String read FRPCBError write FRPCBError; - property OnPulseError: TOnPulseError read FOnPulseError write FOnPulseError; - property BrokerVersion: String read FBrokerVersion; - property IsNewStyleConnection: Boolean read FIsNewStyleConnection; -published - constructor Create(AOwner: TComponent); override; - property ClearParameters: boolean read FClearParameters - write SetClearParameters; - property ClearResults: boolean read FClearResults write SetClearResults; - property Connected: boolean read FConnected write SetConnected; - property DebugMode: boolean read FDebugMode write FDebugMode default False; - property ListenerPort: integer read FListenerPort write FListenerPort; - property Results: TStrings read FResults write SetResults; - property RemoteProcedure: TRemoteProc read FRemoteProcedure - write FRemoteProcedure; - property RpcVersion: TRpcVersion read FRpcVersion write FRpcVersion; - property Server: TServer read FServer write SetServer; - property KernelLogIn: Boolean read FKernelLogIn write SetKernelLogIn; - property ShowErrorMsgs: TShowErrorMsgs read FShowErrorMsgs write FShowErrorMsgs default semRaise; - property LogIn: TVistaLogIn read FLogIn write FLogin; // SetLogIn; - property IsBackwardCompatibleConnection: Boolean read - FIsBackwardCompatibleConnection write FIsBackwardCompatibleConnection - default True; - property OldConnectionOnly: Boolean read FOldConnectionOnly write - FOldConnectionOnly; - end; - -{procedure Register;} //P14 --pack split -procedure StoreConnection(Broker: TRPCBroker); -function RemoveConnection(Broker: TRPCBroker): boolean; -function DisconnectAll(Server: string; ListenerPort: integer): boolean; -function ExistingSocket(Broker: TRPCBroker): integer; -procedure AuthenticateUser(ConnectingBroker: TRPCBroker); -procedure GetBrokerInfo(ConnectedBroker : TRPCBroker); //P6 -function NoSignOnNeeded : Boolean; -function ProcessExecute(Command: string; cShow: Word): Integer; -function GetAppHandle(ConnectedBroker : TRPCBroker): String; -function ShowApplicationAndFocusOK(anApplication: TApplication): boolean; - - -var - DebugData: string; - BrokerConnections: TStringList; {this list stores all connections by socket number} - BrokerAllConnections: TStringList; {this list stores all connections to all of - the servers, by an application. It's used in DisconnectAll} - -implementation - -uses - Loginfrm, RpcbErr, SelDiv{p8}, RpcSLogin{p13}, fRPCBErrMsg, Wsockc; - -const - DEFAULT_PULSE : integer = 81000; //P6 default = 45% of 3 minutes. - MINIMUM_TIMEOUT : integer = 14; //P6 shortest allowable timeout in secs. - PULSE_PERCENTAGE : integer = 45; //P6 % of timeout for pulse frequency. - -{-------------------------- TMult.Create -------------------------- -------------------------------------------------------------------} -constructor TMult.Create(AOwner: TComponent); -begin - inherited Create(AOwner); - FMultiple := TStringList.Create; -end; - -{------------------------- TMult.Destroy -------------------------- -------------------------------------------------------------------} -destructor TMult.Destroy; -begin - ClearAll; - FMultiple.Free; - FMultiple := nil; - inherited Destroy; -end; - -{-------------------------- TMult.Assign -------------------------- -All of the items from source object are copied one by one into the -target. So if the source is later destroyed, target object will continue -to hold the copy of all elements, completely unaffected. -------------------------------------------------------------------} -procedure TMult.Assign(Source: TPersistent); -var - I: integer; - SourceStrings: TStrings; - S: TString; - SourceMult: TMult; -begin - ClearAll; - if Source is TMult then begin - SourceMult := Source as TMult; - try - for I := 0 to SourceMult.FMultiple.Count - 1 do begin - S := TString.Create; - S.Str := (SourceMult.FMultiple.Objects[I] as TString).Str; - Self.FMultiple.AddObject(SourceMult.FMultiple[I], S); - end; - except - end; - end - - else begin - SourceStrings := Source as TStrings; - for I := 0 to SourceStrings.Count - 1 do - Self[IntToStr(I)] := SourceStrings[I]; - end; -end; - -{------------------------- TMult.ClearAll ------------------------- -One by one, all Mult items are freed. -------------------------------------------------------------------} -procedure TMult.ClearAll; -var - I: integer; -begin - for I := 0 to FMultiple.Count - 1 do begin - FMultiple.Objects[I].Free; - FMultiple.Objects[I] := nil; - end; - FMultiple.Clear; -end; - -{------------------------- TMult.GetCount ------------------------- -Returns the number of elements in the multiple -------------------------------------------------------------------} -function TMult.GetCount: Word; -begin - Result := FMultiple.Count; -end; - -{------------------------- TMult.GetFirst ------------------------- -Returns the subscript of the first element in the multiple -------------------------------------------------------------------} -function TMult.GetFirst: string; -begin - if FMultiple.Count > 0 then Result := FMultiple[0] - else Result := ''; -end; - -{------------------------- TMult.GetLast -------------------------- -Returns the subscript of the last element in the multiple -------------------------------------------------------------------} -function TMult.GetLast: string; -begin - if FMultiple.Count > 0 then Result := FMultiple[FMultiple.Count - 1] - else Result := ''; -end; - -{---------------------- TMult.GetFMultiple ------------------------ -Returns the VALUE of the element whose subscript is passed. -------------------------------------------------------------------} -function TMult.GetFMultiple(Index: string): string; -var - S: TString; - BrokerComponent,ParamRecord: TComponent; - I: integer; - strError: string; -begin - try - S := TString(FMultiple.Objects[FMultiple.IndexOf(Index)]); - except - on EListError do begin - {build appropriate error message} - strError := iff(Self.Name <> '', Self.Name, 'TMult_instance'); - strError := strError + '[' + Index + ']' + #13#10 + 'is undefined'; - try - ParamRecord := Self.Owner; - BrokerComponent := Self.Owner.Owner.Owner; - if (ParamRecord is TParamRecord) and (BrokerComponent is TRPCBroker) then begin - I := 0; - {if there is an easier way to figure out which array element points - to this instance of a multiple, use it} // p13 - while TRPCBroker(BrokerComponent).Param[I] <> ParamRecord do inc(I); - strError := '.Param[' + IntToStr(I) + '].' + strError; - strError := iff(BrokerComponent.Name <> '', BrokerComponent.Name, - 'TRPCBroker_instance') + strError; - end; - except - end; - raise Exception.Create(strError); - end; - end; - Result := S.Str; -end; - -{---------------------- TMult.SetGetSorted ------------------------ -------------------------------------------------------------------} -function TMult.GetSorted: boolean; -begin - Result := FMultiple.Sorted; -end; - -{---------------------- TMult.SetFMultiple ------------------------ -Stores a new element in the multiple. FMultiple (TStringList) is the -structure, which is used to hold the subscript and value pair. Subscript -is stored as the String, value is stored as an object of the string. -------------------------------------------------------------------} -procedure TMult.SetFMultiple(Index: string; Value: string); -var - S: TString; - Pos: integer; -begin - Pos := FMultiple.IndexOf(Index); {see if this subscript already exists} - if Pos = -1 then begin {if subscript is new} - S := TString.Create; {create string object} - S.Str := Value; {put value in it} - FMultiple.AddObject(Index, S); {add it} - end - else - TString(FMultiple.Objects[Pos]).Str := Value; { otherwise replace the value} -end; - -{---------------------- TMult.SetSorted ------------------------ -------------------------------------------------------------------} -procedure TMult.SetSorted(Value: boolean); -begin - FMultiple.Sorted := Value; -end; - -{-------------------------- TMult.Order -------------------------- -Returns the subscript string of the next or previous element from the -StartSubscript. This is very similar to the $O function available in M. -Null string ('') is returned when reaching beyong the first or last -element, or when list is empty. -Note: A major difference between the M $O and this function is that - in this function StartSubscript must identify a valid subscript - in the list. -------------------------------------------------------------------} -function TMult.Order(const StartSubscript: string; Direction: integer): string; -var - Index: longint; -begin - Result := ''; - if StartSubscript = '' then - if Direction > 0 then Result := First - else Result := Last - else begin - Index := Position(StartSubscript); - if Index > -1 then - if (Index < (Count - 1)) and (Direction > 0) then - Result := FMultiple[Index + 1] - else if (Index > 0) and (Direction < 0) then - Result := FMultiple[Index - 1]; - end -end; - -{------------------------- TMult.Position ------------------------- -Returns the long integer value which is the index position of the -element in the list. Opposite of TMult.Subscript(). Remember that -the list is 0 based! -------------------------------------------------------------------} -function TMult.Position(const Subscript: string): longint; -begin - Result := FMultiple.IndexOf(Subscript); -end; - -{------------------------ TMult.Subscript ------------------------- -Returns the string subscript of the element whose position in the list -is passed in. Opposite of TMult.Position(). Remember that the list is 0 based! -------------------------------------------------------------------} -function TMult.Subscript(const Position: longint): string; -begin - Result := ''; - if (Position > -1) and (Position < Count) then - Result := FMultiple[Position]; -end; - -{---------------------- TParamRecord.Create ----------------------- -Creates TParamRecord instance and automatically creates TMult. The -name of Mult is also set in case it may be need if exception will be raised. -------------------------------------------------------------------} -constructor TParamRecord.Create(AOwner: TComponent); -begin - inherited Create(AOwner); - FMult := TMult.Create(Self); - FMult.Name := 'Mult'; - {note: FMult is destroyed in the SetClearParameters method} -end; - -destructor TParamRecord.Destroy; -begin - FMult.Free; - FMult := nil; - inherited; -end; - -{------------------------- TParams.Create ------------------------- -------------------------------------------------------------------} -constructor TParams.Create(AOwner: TComponent); -begin - inherited Create(AOwner); - FParameters := TList.Create; {for now, empty list} -end; - -{------------------------ TParams.Destroy ------------------------- -------------------------------------------------------------------} -destructor TParams.Destroy; -begin - Clear; {clear the Multiple first!} - FParameters.Free; - FParameters := nil; - inherited Destroy; -end; - -{------------------------- TParams.Assign ------------------------- -------------------------------------------------------------------} -procedure TParams.Assign(Source: TPersistent); -var - I: integer; - SourceParams: TParams; -begin - Self.Clear; - SourceParams := Source as TParams; - for I := 0 to SourceParams.Count - 1 do begin - Self[I].Value := SourceParams[I].Value; - Self[I].PType := SourceParams[I].PType; - Self[I].Mult.Assign(SourceParams[I].Mult); - end -end; - -{------------------------- TParams.Clear -------------------------- -------------------------------------------------------------------} -procedure TParams.Clear; -var - ParamRecord: TParamRecord; - I: integer; -begin - if FParameters <> nil then begin - for I := 0 to FParameters.Count - 1 do begin - ParamRecord := TParamRecord(FParameters.Items[I]); - if ParamRecord <> nil then begin //could be nil if params were skipped by developer - ParamRecord.FMult.Free; - ParamRecord.FMult := nil; - ParamRecord.Free; - end; - end; - FParameters.Clear; {release FParameters TList} - end; -end; - -{------------------------ TParams.GetCount ------------------------ -------------------------------------------------------------------} -function TParams.GetCount: Word; -begin - if FParameters = nil then Result := 0 - else Result := FParameters.Count; -end; - -{---------------------- TParams.GetParameter ---------------------- -------------------------------------------------------------------} -function TParams.GetParameter(Index: integer): TParamRecord; -begin - if Index >= FParameters.Count then {if element out of bounds,} - while FParameters.Count <= Index do - FParameters.Add(nil); {setup place holders} - if FParameters.Items[Index] = nil then begin {if just a place holder,} - {point it to new memory block} - FParameters.Items[Index] := TParamRecord.Create(Self); - TParamRecord(FParameters.Items[Index]).PType := undefined; {initialize} - end; - Result := FParameters.Items[Index]; {return requested parameter} -end; - -{---------------------- TParams.SetParameter ---------------------- -------------------------------------------------------------------} -procedure TParams.SetParameter(Index: integer; Parameter: TParamRecord); -begin - if Index >= FParameters.Count then {if element out of bounds,} - while FParameters.Count <= Index do - FParameters.Add(nil); {setup place holders} - if FParameters.Items[Index] = nil then {if just a place holder,} - FParameters.Items[Index] := Parameter; {point it to passed parameter} -end; - -{------------------------ TRPCBroker.Create ----------------------- -------------------------------------------------------------------} -constructor TRPCBroker.Create(AOwner: TComponent); -begin - inherited Create(AOwner); - {set defaults} - -// This constant defined in the interface section needs to be updated for each release - FBrokerVersion := CURRENT_RPC_VERSION; - - FClearParameters := boolean(StrToInt - (ReadRegDataDefault(HKLM,REG_BROKER,'ClearParameters','1'))); - FClearResults := boolean(StrToInt - (ReadRegDataDefault(HKLM,REG_BROKER,'ClearResults','1'))); - FDebugMode := False; - FParams := TParams.Create(Self); - FResults := TStringList.Create; - FServer := ReadRegDataDefault(HKLM,REG_BROKER,'Server','BROKERSERVER'); - FPulse := TTimer.Create(Self); //P6 - FListenerPort := StrToInt - (ReadRegDataDefault(HKLM,REG_BROKER,'ListenerPort','9200')); - FRpcVersion := '0'; - FRPCTimeLimit := MIN_RPCTIMELIMIT; - with FPulse do ///P6 - begin - Enabled := False; //P6 - Interval := DEFAULT_PULSE; //P6 - OnTimer := DoPulseOnTimer; //P6 - end; - FLogin := TVistaLogin.Create(Self); //p13 - FKernelLogin := True; //p13 - FUser := TVistaUser.Create; //p13 - FShowErrorMsgs := semRaise; //p13 - XWBWinsock := TXWBWinsock.Create; - - FIsBackwardCompatibleConnection := True; // default - Application.ProcessMessages; -end; - -{----------------------- TRPCBroker.Destroy ----------------------- -------------------------------------------------------------------} -destructor TRPCBroker.Destroy; -begin - Connected := False; - TXWBWinsock(XWBWinsock).Free; - FParams.Free; - FParams := nil; - FResults.Free; - FResults := nil; - FPulse.Free; //P6 - FPulse := nil; - FUser.Free; - FUser := nil; - FLogin.Free; - FLogin := nil; - inherited Destroy; -end; - -{--------------------- TRPCBroker.CreateContext ------------------- -This function is part of the overall Broker security. -The passed context string is essentially a Client/Server type option -on the server. The server sets up MenuMan environment variables for this -context which will later be used to screen RPCs. Only those RPCs which are -in the multiple field of this context option will be permitted to run. -------------------------------------------------------------------} -function TRPCBroker.CreateContext(strContext: string): boolean; -var - InternalBroker: TRPCBroker; {use separate component} - Str: String; -begin - Result := False; - Connected := True; - InternalBroker := nil; - try - InternalBroker := TRPCBroker.Create(Self); - InternalBroker.FSocket := Self.Socket; // p13 -- permits multiple broker connections to same server/port - with InternalBroker do - begin -{ - TXWBWinsock(InternalBroker.XWBWinsock).IsBackwardsCompatible := TXWBWinsock(Self.XWBWinsock).IsBackwardsCompatible; - TXWBWinsock(InternalBroker.XWBWinsock).OriginalConnectionOnly := TXWBWinsock(Self.XWBWinsock).OriginalConnectionOnly; -} - Tag := 1234; - ShowErrorMsgs := Self.ShowerrorMsgs; - Server := Self.Server; {inherit application server} - ListenerPort := Self.ListenerPort; {inherit listener port} - DebugMode := Self.DebugMode; {inherit debug mode property} - RemoteProcedure := 'XWB CREATE CONTEXT'; {set up RPC} - Param[0].PType := literal; - Param[0].Value := Encrypt(strContext); - try - Str := strCall; - if Str = '1' then - begin // make the call // p13 - Result := True; // p13 - self.FCurrentContext := strContext; // p13 - end // p13 - else - begin - Result := False; - self.FCurrentContext := ''; - end; - except // Code added to return False if User doesn't have access - on e: EBrokerError do - begin - self.FCurrentContext := ''; - if Pos('does not have access to option',e.Message) > 0 then - begin - Result := False - end - else - Raise; - end; - end; - if RPCBError <> '' then - self.RPCBError := RPCBError; - end; - finally - InternalBroker.XWBWinsock := nil; - InternalBroker.Free; {release memory} - end; -end; - -{------------------------ TRPCBroker.Loaded ----------------------- -------------------------------------------------------------------} -procedure TRPCBroker.Loaded; -begin - inherited Loaded; -end; - -{------------------------- TRPCBroker.Call ------------------------ -------------------------------------------------------------------} -procedure TRPCBroker.Call; -var - ResultBuffer: TStrings; -begin - ResultBuffer := TStringList.Create; - try - if ClearResults then ClearResults := True; - lstCall(ResultBuffer); - Self.Results.AddStrings(ResultBuffer); - finally - ResultBuffer.Clear; - ResultBuffer.Free; - end; -end; - -{----------------------- TRPCBroker.lstCall ----------------------- -------------------------------------------------------------------} -procedure TRPCBroker.lstCall(OutputBuffer: TStrings); -var - ManyStrings: PChar; -begin - ManyStrings := pchCall; {make the call} - OutputBuffer.SetText(ManyStrings); {parse result of call, format as list} - StrDispose(ManyStrings); {raw result no longer needed, get back mem} -end; - -{----------------------- TRPCBroker.strCall ----------------------- -------------------------------------------------------------------} -function TRPCBroker.strCall: string; -var - ResultString: PChar; -begin - ResultString := pchCall; {make the call} - Result := StrPas(ResultString); {convert and present as Pascal string} - StrDispose(ResultString); {raw result no longer needed, get back mem} -end; - -{--------------------- TRPCBroker.SetConnected -------------------- -------------------------------------------------------------------} -procedure TRPCBroker.SetConnected(Value: Boolean); -var - BrokerDir, Str1, Str2, Str3 :string; -begin - RPCBError := ''; - Login.ErrorText := ''; - if (Connected <> Value) and not(csReading in ComponentState) then begin - if Value and (FConnecting <> Value) then begin {connect} - FSocket := ExistingSocket(Self); - FConnecting := True; // FConnected := True; - try - if FSocket = 0 then - begin - {Execute Client Agent from directory in Registry.} - BrokerDir := ReadRegData(HKLM, REG_BROKER, 'BrokerDr'); - if BrokerDir <> '' then - ProcessExecute(BrokerDir + '\ClAgent.Exe', sw_ShowNoActivate) - else - ProcessExecute('ClAgent.Exe', sw_ShowNoActivate); - if DebugMode and (not OldConnectionOnly) then - begin - Str1 := 'Control of debugging has been moved from the client to the server. To start a Debug session, do the following:'+#13#10#13#10; - Str2 := '1. On the server, set initial breakpoints where desired.'+#13#10+'2. DO DEBUG^XWBTCPM.'+#13#10+'3. Enter a unique Listener port number (i.e., a port number not in general use).'+#13#10; - Str3 := '4. Connect the client application using the port number entered in Step #3.'; - ShowMessage(Str1 + Str2 + Str3); - end; - TXWBWinsock(XWBWinsock).IsBackwardsCompatible := FIsBackwardCompatibleConnection; - TXWBWinsock(XWBWinsock).OldConnectionOnly := FOldConnectionOnly; - FSocket := TXWBWinsock(XWBWinsock).NetworkConnect(DebugMode, FServer, - ListenerPort, FRPCTimeLimit); - AuthenticateUser(Self); - FPulse.Enabled := True; //P6 Start heartbeat. - StoreConnection(Self); //MUST store connection before CreateContext() - CreateContext(''); //Closes XUS SIGNON context. - end - else - begin //p13 - StoreConnection(Self); - FPulse.Enabled := True; //p13 - end; //p13 - FConnected := True; // jli mod 12/17/01 - FConnecting := False; - except - on E: EBrokerError do begin - if E.Code = XWB_BadSignOn then - TXWBWinsock(XWBWinsock).NetworkDisconnect(FSocket); - FSocket := 0; - FConnected := False; - FConnecting := False; - FRPCBError := E.Message; // p13 handle errors as specified - if Login.ErrorText <> '' then - FRPCBError := E.Message + chr(10) + Login.ErrorText; - if Assigned(FOnRPCBFailure) then // p13 - FOnRPCBFailure(Self) // p13 - else if ShowErrorMsgs = semRaise then - Raise; // p13 -// raise; {this is where I would do OnNetError} - end{on}; - end{try}; - end{if} - else if not Value then - begin //p13 - FConnected := False; //p13 - FPulse.Enabled := False; //p13 - if RemoveConnection(Self) = NoMore then begin - {FPulse.Enabled := False; ///P6;p13 } - TXWBWinsock(XWBWinsock).NetworkDisconnect(Socket); {actually disconnect from server} - FSocket := 0; {store internal} - //FConnected := False; //p13 - end{if}; - end; {else} - end{if}; -end; - -{----------------- TRPCBroker.SetClearParameters ------------------ -------------------------------------------------------------------} -procedure TRPCBroker.SetClearParameters(Value: Boolean); -begin - if Value then FParams.Clear; - FClearParameters := Value; -end; - -{------------------- TRPCBroker.SetClearResults ------------------- -------------------------------------------------------------------} -procedure TRPCBroker.SetClearResults(Value: Boolean); -begin - if Value then begin {if True} - FResults.Clear; - end; - FClearResults := Value; -end; - -{---------------------- TRPCBroker.SetResults --------------------- -------------------------------------------------------------------} -procedure TRPCBroker.SetResults(Value: TStrings); -begin - FResults.Assign(Value); -end; - -{----------------------- TRPCBroker.SetRPCTimeLimit ----------------- -------------------------------------------------------------------} -procedure TRPCBroker.SetRPCTimeLimit(Value: integer); -begin - if Value <> FRPCTimeLimit then - if Value > MIN_RPCTIMELIMIT then - FRPCTimeLimit := Value - else - FRPCTimeLimit := MIN_RPCTIMELIMIT; -end; - -{----------------------- TRPCBroker.SetServer --------------------- -------------------------------------------------------------------} -procedure TRPCBroker.SetServer(Value: TServer); -begin - {if changing the name of the server, make sure to disconnect first} - if (Value <> FServer) and Connected then begin - Connected := False; - end; - FServer := Value; -end; - -{--------------------- TRPCBroker.pchCall ---------------------- -Lowest level remote procedure call that a TRPCBroker component can make. -1. Returns PChar. -2. Converts Remote Procedure to PChar internally. -------------------------------------------------------------------} -function TRPCBroker.pchCall: PChar; -var - Value, Sec, App: PChar; - BrokerError: EBrokerError; - blnRestartPulse : boolean; //P6 -begin - RPCBError := ''; - Connected := True; - BrokerError := nil; - Value := nil; - blnRestartPulse := False; //P6 - - Sec := StrAlloc(255); - App := StrAlloc(255); - - try - if FPulse.Enabled then ///P6 If Broker was sending pulse, - begin - FPulse.Enabled := False; /// Stop pulse & - blnRestartPulse := True; // Set flag to restart pulse after RPC. - end; -{ - if Assigned(FOnRPCCall) then - begin - FOnRPCCall(Self, 1, RemoteProcedure, CurrentContext, RpcVersion, Param, FRPCTimeLimit, '', '', '', Now); - end; -} - try - Value := TXWBWinsock(XWBWinsock).tCall(Socket, RemoteProcedure, RpcVersion, Param, - Sec, App,FRPCTimeLimit); -{ - if Assigned(FOnRPCCall) then - begin - FOnRPCCall(Self, 2, RemoteProcedure, CurrentContext, RpcVersion, Param, FRPCTimeLimit, Result, Sec, App, Now); - end; -} - if (StrLen(Sec) > 0) then - begin - BrokerError := EBrokerError.Create(StrPas(Sec)); - BrokerError.Code := 0; - BrokerError.Action := 'Error Returned'; - end; - except - on Etemp: EBrokerError do - with Etemp do - begin //save copy of error - BrokerError := EBrokerError.Create(message); //field by field - BrokerError.Action := Action; - BrokerError.Code := Code; - BrokerError.Mnemonic := Mnemonic; - if Value <> nil then - StrDispose(Value); - Value := StrNew(''); - {if severe error, mark connection as closed. Per Enrique, we should - replace this check with some function, yet to be developed, which - will test the link.} - if ((Code >= 10050)and(Code <=10058))or(Action = 'connection lost') then - begin - Connected := False; - blnRestartPulse := False; //P6 - end; - end; - end; - finally - StrDispose(Sec); {do something with these} - Sec := nil; - StrDispose(App); - App := nil; - if ClearParameters then ClearParameters := True; //prepare for next call - end; - Result := Value; - if Result = nil then Result := StrNew(''); //return empty string - if blnRestartPulse then FPulse.Enabled := True; //Restart pulse. (P6) - if BrokerError <> nil then - begin - FRPCBError := BrokerError.Message; // p13 handle errors as specified - if Login.ErrorText <> '' then - FRPCBError := BrokerError.Message + chr(10) + Login.ErrorText; - if Assigned(FOnRPCBFailure) then // p13 - begin - FOnRPCBFailure(Self); - StrDispose(Result); - end - else if FShowErrorMsgs = semRaise then - begin - StrDispose(Result); // return memory we won't use - caused a memory leak - Raise BrokerError; // p13 - end - else // silent, just return error message in FRPCBError - BrokerError.Free; // return memory in BrokerError - otherwise is a memory leak -// raise; {this is where I would do OnNetError} - end; // if BrokerError <> nil -end; - - -{-------------------------- DisconnectAll ------------------------- -Find all connections in BrokerAllConnections list for the passed in -server:listenerport combination and disconnect them. If at least one -connection to the server:listenerport is found, then it and all other -Brokers to the same server:listenerport will be disconnected; True -will be returned. Otherwise False will return. -------------------------------------------------------------------} -function DisconnectAll(Server: string; ListenerPort: integer): boolean; -var - Index: integer; -begin - Result := False; - while (Assigned(BrokerAllConnections) and - (BrokerAllConnections.Find(Server + ':' + IntToStr(ListenerPort), Index))) do begin - Result := True; - TRPCBroker(BrokerAllConnections.Objects[Index]).Connected := False; - {if the call above disconnected the last connection in the list, then - the whole list will be destroyed, making it necessary to check if it's - still assigned.} - end; -end; - -{------------------------- StoreConnection ------------------------ -Each broker connection is stored in BrokerConnections list. -------------------------------------------------------------------} -procedure StoreConnection(Broker: TRPCBroker); -begin - if BrokerConnections = nil then {list is created when 1st entry is added} - try - BrokerConnections := TStringList.Create; - BrokerConnections.Sorted := True; - BrokerConnections.Duplicates := dupAccept; {store every connection} - BrokerAllConnections := TStringList.Create; - BrokerAllConnections.Sorted := True; - BrokerAllConnections.Duplicates := dupAccept; - except - TXWBWinsock(Broker.XWBWinsock).NetError('store connection',XWB_BldConnectList) - end; - BrokerAllConnections.AddObject(Broker.Server + ':' + - IntToStr(Broker.ListenerPort), Broker); - BrokerConnections.AddObject(IntToStr(Broker.Socket), Broker); -end; - -{------------------------ RemoveConnection ------------------------ -Result of this function will be False, if there are no more connections -to the same server:listenerport as the passed in Broker. If at least -one other connection is found to the same server:listenerport, then Result -will be True. -------------------------------------------------------------------} -function RemoveConnection(Broker: TRPCBroker): boolean; -var - Index: integer; -begin - Result := False; - if Assigned(BrokerConnections) then begin - {remove connection record of passed in Broker component} - BrokerConnections.Delete(BrokerConnections.IndexOfObject(Broker)); - {look for one other connection to the same server:port} -// Result := BrokerConnections.Find(Broker.Server + ':' + IntToStr(Broker.ListenerPort), Index); - Result := BrokerConnections.Find(IntToStr(Broker.Socket), Index); - if BrokerConnections.Count = 0 then begin {if last entry removed,} - BrokerConnections.Free; {destroy whole list structure} - BrokerConnections := nil; - end; - end; // if Assigned(BrokerConnections) - if Assigned(BrokerAllConnections) then begin - BrokerAllConnections.Delete(BrokerAllConnections.IndexOfObject(Broker)); - if BrokerAllConnections.Count = 0 then begin - BrokerAllConnections.Free; - BrokerAllConnections := nil; - end; - end; // if Assigned(BrokerAllConnections) -end; - -{------------------------- ExistingSocket ------------------------- -------------------------------------------------------------------} -function ExistingSocket(Broker: TRPCBroker): integer; -// var -// Index: integer; -begin - Result := Broker.Socket; -{ Result := 0; // p13 to permit multiple Broker connections - - if Assigned(BrokerConnections) and - BrokerConnections.Find(Broker.Server + ':' + IntToStr(Broker.ListenerPort), Index) then - Result := TRPCBroker(BrokerConnections.Objects[Index]).Socket; -} -end; - -{------------------------ AuthenticateUser ------------------------ -------------------------------------------------------------------} -procedure AuthenticateUser(ConnectingBroker: TRPCBroker); -var - SaveClearParmeters, SaveClearResults: boolean; - SaveParam: TParams; - SaveRemoteProcedure, SaveRpcVersion: string; - SaveResults: TStrings; - blnSignedOn: boolean; - SaveKernelLogin: boolean; - SaveVistaLogin: TVistaLogin; - OldExceptionHandler: TExceptionEvent; - OldHandle: THandle; -begin - With ConnectingBroker do - begin - SaveParam := TParams.Create(nil); - SaveParam.Assign(Param); //save off settings - SaveRemoteProcedure := RemoteProcedure; - SaveRpcVersion := RpcVersion; - SaveResults := Results; - SaveClearParmeters := ClearParameters; - SaveClearResults := ClearResults; - ClearParameters := True; //set'em as I need'em - ClearResults := True; - SaveKernelLogin := FKernelLogin; // p13 - SaveVistaLogin := FLogin; // p13 - end; - - blnSignedOn := False; //initialize to bad sign-on - - if ConnectingBroker.AccessVerifyCodes <> '' then // p13 handle as AVCode single signon - begin - ConnectingBroker.Login.AccessCode := Piece(ConnectingBroker.AccessVerifyCodes, ';', 1); - ConnectingBroker.Login.VerifyCode := Piece(ConnectingBroker.AccessVerifyCodes, ';', 2); - ConnectingBroker.Login.Mode := lmAVCodes; - ConnectingBroker.FKernelLogIn := False; - end; - - if ConnectingBroker.FKernelLogIn then - begin //p13 - if Assigned(Application.OnException) then - OldExceptionHandler := Application.OnException - else - OldExceptionHandler := nil; - Application.OnException := TfrmErrMsg.RPCBShowException; - frmSignon := TfrmSignon.Create(Application); - try - - // ShowApplicationAndFocusOK(Application); - OldHandle := GetForegroundWindow; - SetForegroundWindow(frmSignon.Handle); - PrepareSignonForm(ConnectingBroker); - if SetUpSignOn then //SetUpSignOn in loginfrm unit. - begin //True if signon needed - { // p13 handle as AVCode single signon - if ConnectingBroker.AccessVerifyCodes <> '' then - begin {do non interactive logon - frmSignon.accessCode.Text := Piece(ConnectingBroker.AccessVerifyCodes, ';', 1); - frmSignon.verifyCode.Text := Piece(ConnectingBroker.AccessVerifyCodes, ';', 2); - //Application.ProcessMessages; - frmSignon.btnOk.Click; - end - else frmSignOn.ShowModal; //do interactive logon - } - // ShowApplicationAndFocusOK(Application); - // SetForegroundWindow(frmSignOn.Handle); - if frmSignOn.lblServer.Caption <> '' then - begin - frmSignOn.ShowModal; //do interactive logon // p13 - if frmSignOn.Tag = 1 then //Tag=1 for good logon - blnSignedOn := True; //Successfull logon - end - end - else //False when no logon needed - blnSignedOn := NoSignOnNeeded; //Returns True always (for now!) - if blnSignedOn then //P6 If logged on, retrieve user info. - begin - GetBrokerInfo(ConnectingBroker); - if not SelDiv.ChooseDiv('',ConnectingBroker) then - begin - blnSignedOn := False;//P8 - {Select division if multi-division user. First parameter is 'userid' - (DUZ or username) for future use. (P8)} - ConnectingBroker.Login.ErrorText := 'Failed to select Division'; // p13 set some text indicating problem - end; - end; - SetForegroundWindow(OldHandle); - finally - frmSignon.Free; -// frmSignon.Release; //get rid of signon form - -// if ConnectingBroker.Owner is TForm then -// SetForegroundWindow(TForm(ConnectingBroker.Owner).Handle) -// else -// SetForegroundWindow(ActiveWindow); - ShowApplicationAndFocusOK(Application); - end ; //try - if Assigned(OldExceptionHandler) then - Application.OnException := OldExceptionHandler; - end; //if kernellogin - // p13 following section for silent signon - if not ConnectingBroker.FKernelLogIn then - if ConnectingBroker.FLogin <> nil then //the user. vistalogin contains login info - blnsignedon := SilentLogin(ConnectingBroker); // RpcSLogin unit - if not blnsignedon then - begin - ConnectingBroker.FLogin.FailedLogin(ConnectingBroker.FLogin); - TXWBWinsock(ConnectingBroker.XWBWinsock).NetworkDisconnect(ConnectingBroker.FSocket); - end - else - GetBrokerInfo(ConnectingBroker); - - //reset the Broker - with ConnectingBroker do - begin - ClearParameters := SaveClearParmeters; - ClearResults := SaveClearResults; - Param.Assign(SaveParam); //restore settings - SaveParam.Free; - RemoteProcedure := SaveRemoteProcedure; - RpcVersion := SaveRpcVersion; - Results := SaveResults; - FKernelLogin := SaveKernelLogin; // p13 - FLogin := SaveVistaLogin; // p13 - end; - - if not blnSignedOn then //Flag for unsuccessful signon. - TXWBWinsock(ConnectingBroker.XWBWinsock).NetError('',XWB_BadSignOn); //Will raise error. - -end; - -{------------------------ GetBrokerInfo ------------------------ -P6 Retrieve information about user with XWB GET BROKER INFO - RPC. For now, only Timeout value is retrieved in Results[0]. -------------------------------------------------------------------} -procedure GetBrokerInfo(ConnectedBroker: TRPCBroker); -begin - GetUserInfo(ConnectedBroker); // p13 Get User info into User property (TVistaUser object) - With ConnectedBroker do //(dcm) Use one of objects below - begin // and skip this RPC? or make this and - RemoteProcedure := 'XWB GET BROKER INFO'; // others below as components - try - Call; - if Results.Count > 0 then - if StrToInt(Results[0]) > MINIMUM_TIMEOUT then - FPulse.Interval := (StrToInt(Results[0]) * 10 * PULSE_PERCENTAGE); - except - On e: EBrokerError do - ShowMessage('A problem was encountered getting Broker information. '+e.Message); //TODO - end; - end; -end; - -{------------------------ NoSignOnNeeded ------------------------ -------------------------------------------------------------------} -{Currently a placeholder for actions that may be needed in connection -with authenticating a user who needn't sign on (Single Sign on feature). -Returns True if no signon is needed - False if signon is needed.} -function NoSignOnNeeded : Boolean; -begin - Result := True; -end; - -{------------------------- ProcessExecute ------------------------- -This function is borrowed from "Delphi 2 Developer's Guide" by Pacheco & Teixera. -See chapter 11, page 406. It encapsulates and simplifies use of -Windows CreateProcess function. -------------------------------------------------------------------} -function ProcessExecute(Command: string; cShow: Word): Integer; -{ This method encapsulates the call to CreateProcess() which creates - a new process and its primary thread. This is the method used in - Win32 to execute another application, This method requires the use - of the TStartInfo and TProcessInformation structures. These structures - are not documented as part of the Delphi 2.0 online help but rather - the Win32 help as STARTUPINFO and PROCESS_INFORMATION. - - The CommandLine paremeter specifies the pathname of the file to - execute. - - The cShow paremeter specifies one of the SW_XXXX constants which - specifies how to display the window. This value is assigned to the - sShowWindow field of the TStartupInfo structure. } -var - Rslt: LongBool; - StartUpInfo: TStartUpInfo; // documented as STARTUPINFO - ProcessInfo: TProcessInformation; // documented as PROCESS_INFORMATION -begin - { Clear the StartupInfo structure } - FillChar(StartupInfo, SizeOf(TStartupInfo), 0); - { Initialize the StartupInfo structure with required data. - Here, we assign the SW_XXXX constant to the wShowWindow field - of StartupInfo. When specifing a value to this field the - STARTF_USESSHOWWINDOW flag must be set in the dwFlags field. - Additional information on the TStartupInfo is provided in the Win32 - online help under STARTUPINFO. } - with StartupInfo do begin - cb := SizeOf(TStartupInfo); // Specify size of structure - dwFlags := STARTF_USESHOWWINDOW or STARTF_FORCEONFEEDBACK; - wShowWindow := cShow - end; - - { Create the process by calling CreateProcess(). This function - fills the ProcessInfo structure with information about the new - process and its primary thread. Detailed information is provided - in the Win32 online help for the TProcessInfo structure under - PROCESS_INFORMATION. } - Rslt := CreateProcess(PChar(Command), nil, nil, nil, False, - NORMAL_PRIORITY_CLASS, nil, nil, StartupInfo, ProcessInfo); - { If Rslt is true, then the CreateProcess call was successful. - Otherwise, GetLastError will return an error code representing the - error which occurred. } - if Rslt then - with ProcessInfo do begin - { Wait until the process is in idle. } - WaitForInputIdle(hProcess, INFINITE); - CloseHandle(hThread); // Free the hThread handle - CloseHandle(hProcess);// Free the hProcess handle - Result := 0; // Set Result to 0, meaning successful - end - else Result := GetLastError; // Set result to the error code. -end; - - -{----------------------- GetAppHandle -------------------------- -Library function to return an Application Handle from the server -which can be passed as a command line argument to an application -the current application is starting. The new application can use -this AppHandle to perform a silent login via the lmAppHandle mode -----------------------------------------------------------------} -function GetAppHandle(ConnectedBroker : TRPCBroker): String; // p13 -begin - Result := ''; - with ConnectedBroker do - begin - RemoteProcedure := 'XUS GET TOKEN'; - Call; - Result := Results[0]; - end; -end; - -{----------------------- TRPCBroker.DoPulseOnTimer----------------- -Called from the OnTimer event of the Pulse property. -Broker environment should be the same after the procedure as before. -Note: Results is not changed by strCall; so, Results needn't be saved. -------------------------------------------------------------------} -procedure TRPCBroker.DoPulseOnTimer(Sender: TObject); //P6 -var - SaveClearParameters : Boolean; - SaveParam : TParams; - SaveRemoteProcedure, SaveRPCVersion : string; -begin - SaveClearParameters := ClearParameters; //Save existing properties - SaveParam := TParams.Create(nil); - SaveParam.Assign(Param); - SaveRemoteProcedure := RemoteProcedure; - SaveRPCVersion := RPCVersion; - RemoteProcedure := 'XWB IM HERE'; //Set Properties for IM HERE - ClearParameters := True; //Erase existing PARAMs - RPCVersion := '1.106'; - try - try - strCall; //Make the call - except on e: EBrokerError do - begin -// Connected := False; // set the connection as disconnected - if Assigned(FOnPulseError) then - FOnPulseError(Self, e.Message) - else - raise e; - end; - end; - finally - ClearParameters := SaveClearParameters; //Restore pre-existing properties. - Param.Assign(SaveParam); - SaveParam.Free; - RemoteProcedure := SaveRemoteProcedure; - RPCVersion := SaveRPCVersion; - end; - -end; - -procedure TRPCBroker.SetKernelLogIn(const Value: Boolean); // p13 -begin - FKernelLogIn := Value; -end; -{ -procedure TRPCBroker.SetLogIn(const Value: TVistaLogIn); // p13 -begin - FLogIn := Value; -end; -} -procedure TRPCBroker.SetUser(const Value: TVistaUser); // p13 -begin - FUser := Value; -end; - - -{*****TVistaLogin***** p13} - -constructor TVistaLogin.Create(AOwner: TComponent); // p13 -begin - inherited create; - FDivLst := TStringList.Create; -end; - -destructor TVistaLogin.Destroy; // p13 -begin - FDivLst.Free; - FDivLst := nil; - inherited; -end; - -procedure TVistaLogin.FailedLogin(Sender: TObject); // p13 -begin - if Assigned(FOnFailedLogin) then FOnFailedLogin(Self) - else TXWBWinsock(TRPCBroker(Sender).XWBWinsock).NetError('',XWB_BadSignOn); -end; - -procedure TVistaLogin.SetAccessCode(const Value: String); // p13 -begin - FAccessCode := Value; -end; - -procedure TVistaLogin.SetDivision(const Value: String); // p13 -begin - FDivision := Value; -end; - -procedure TVistaLogin.SetDuz(const Value: string); // p13 -begin - FDUZ := Value; -end; - -procedure TVistaLogin.SetErrorText(const Value: string); // p13 -begin - FErrorText := Value; -end; - -procedure TVistaLogin.SetLogInHandle(const Value: String); // p13 -begin - FLogInHandle := Value; -end; - -procedure TVistaLogin.SetMode(const Value: TLoginMode); // p13 -begin - FMode := Value; -end; - -procedure TVistaLogin.SetMultiDivision(Value: Boolean); // p13 -begin - FMultiDivision := Value; -end; - -procedure TVistaLogin.SetNTToken(const Value: String); // p13 -begin -end; - -procedure TVistaLogin.SetPromptDiv(const Value: boolean); // p13 -begin - FPromptDiv := Value; -end; - -procedure TVistaLogin.SetVerifyCode(const Value: String); // p13 -begin - FVerifyCode := Value; -end; - -{***** TVistaUser ***** p13 } - -procedure TVistaUser.SetDivision(const Value: String); // p13 -begin - FDivision := Value; -end; - -procedure TVistaUser.SetDTime(const Value: string); // p13 -begin - FDTime := Value; -end; - -procedure TVistaUser.SetDUZ(const Value: String); // p13 -begin - FDUZ := Value; -end; - -procedure TVistaUser.SetLanguage(const Value: string); // p13 -begin - FLanguage := Value; -end; - -procedure TVistaUser.SetName(const Value: String); // p13 -begin - FName := Value; -end; - -procedure TVistaUser.SetServiceSection(const Value: string); // p13 -begin - FServiceSection := Value; -end; - -procedure TVistaUser.SetStandardName(const Value: String); // p13 -begin - FStandardName := Value; -end; - -procedure TVistaUser.SetTitle(const Value: string); // p13 -begin - FTitle := Value; -end; - -procedure TVistaUser.SetVerifyCodeChngd(const Value: Boolean); // p13 -begin - FVerifyCodeChngd := Value; -end; - -Function ShowApplicationAndFocusOK(anApplication: TApplication): boolean; -var - j: integer; - Stat2: set of (sWinVisForm,sWinVisApp,sIconized); - hFGWnd: THandle; -begin - Stat2 := []; {sWinVisForm,sWinVisApp,sIconized} - - If anApplication.MainForm <> nil then - If IsWindowVisible(anApplication.MainForm.Handle) - then Stat2 := Stat2 + [sWinVisForm]; - - If IsWindowVisible(anApplication.Handle) - then Stat2 := Stat2 + [sWinVisApp]; - - If IsIconic(anApplication.Handle) - then Stat2 := Stat2 + [sIconized]; - - Result := true; - If sIconized in Stat2 then begin {A} - j := SendMessage(anApplication.Handle,WM_SYSCOMMAND,SC_RESTORE,0); - Result := j<>0; - end; - If Stat2 * [sWinVisForm,sIconized] = [] then begin {S} - if anApplication.MainForm <> nil then - anApplication.MainForm.Show; - end; - If (Stat2 * [sWinVisForm,sIconized] <> []) or - (sWinVisApp in Stat2) then begin {G} -{$IFNDEF D6_OR_HIGHER} - hFGWnd := GetForegroundWindow; - try - AttachThreadInput( - GetWindowThreadProcessId(hFGWnd, nil), - GetCurrentThreadId,True); - Result := SetForegroundWindow(anApplication.Handle); - finally - AttachThreadInput( - GetWindowThreadProcessId(hFGWnd, nil), - GetCurrentThreadId, False); - end; -{$ENDIF} - end; -end; - -end. - diff --git a/BDK32/Source/UnitTestBroker.dof b/BDK32/Source/UnitTestBroker.dof deleted file mode 100644 index b071e7d..0000000 --- a/BDK32/Source/UnitTestBroker.dof +++ /dev/null @@ -1,84 +0,0 @@ -[Compiler] -A=1 -B=0 -C=1 -D=1 -E=0 -F=0 -G=1 -H=1 -I=1 -J=1 -K=0 -L=1 -M=0 -N=1 -O=1 -P=1 -Q=0 -R=0 -S=0 -T=0 -U=0 -V=1 -W=0 -X=1 -Y=1 -Z=1 -ShowHints=1 -ShowWarnings=1 -UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; -[Linker] -MapFile=0 -OutputObjs=0 -ConsoleApp=1 -DebugInfo=0 -RemoteSymbols=0 -MinStackSize=16384 -MaxStackSize=1048576 -ImageBase=4194304 -ExeDescription= -[Directories] -OutputDir= -UnitOutputDir= -PackageDLLOutputDir= -PackageDCPOutputDir= -SearchPath= -Packages=Vcl50;Vclx50;Vcldb50;Vclbde50;VclSmp50;vclado50;ibevnt50;vcldbx50;Qrpt50;TeeUI50;TeeDB50;Tee50;Dss50;TeeQR50;VCLIB50;Vclmid50;vclie50;Inetdb50;Inet50;NMFast50;webmid50;dclocx50;dclaxserver50;JLITestFDE;Rz252N50;Rz252D50;CS20Comps50;CSP20I50;gmunitsd5;gmctrlsd5;gmchrtedd5;gmdaouid5;GMDaod5;gmdbgend5;gmdbctrld5;gmadouid5;GMAdod5;democomponentsd5;Indy50;XWB_R50;SharedBroker_D50;CPRSctrls;ZipMasterD5;ICSDEL50;TCynthesisAppUpdateD5 -Conditionals= -DebugSourceDirs= -UsePackages=0 -[Parameters] -RunParams= -HostApplication= -[Language] -ActiveLang= -ProjectLang=$00000409 -RootDir= -[Version Info] -IncludeVerInfo=0 -AutoIncBuild=0 -MajorVer=1 -MinorVer=0 -Release=0 -Build=0 -Debug=0 -PreRelease=0 -Special=0 -Private=0 -DLL=0 -Locale=1033 -CodePage=1252 -[Version Info Keys] -CompanyName= -FileDescription= -FileVersion=1.0.0.0 -InternalName= -LegalCopyright= -LegalTrademarks= -OriginalFilename= -ProductName= -ProductVersion=1.0.0.0 -Comments= -[Excluded Packages] -D:\PROGRA~1\Borland\Delphi5\Projects\Bpl\Fmdc_R50.bpl=VistA Fileman Delphi Components diff --git a/BDK32/Source/UnitTestBroker.dpr b/BDK32/Source/UnitTestBroker.dpr deleted file mode 100644 index ab90e72..0000000 --- a/BDK32/Source/UnitTestBroker.dpr +++ /dev/null @@ -1,14 +0,0 @@ -program UnitTestBroker; - -uses - Forms, - TestFramework, - GuiTestRunner, - uUnitTestBroker in 'uUnitTestBroker.pas'; - -{$R *.RES} - -begin - Application.Initialize; - GuiTestRunner.RunRegisteredTests; -end. diff --git a/BDK32/Source/UnitTestBroker.exe b/BDK32/Source/UnitTestBroker.exe deleted file mode 100644 index 7baa3d6..0000000 Binary files a/BDK32/Source/UnitTestBroker.exe and /dev/null differ diff --git a/BDK32/Source/UnitTestBroker.res b/BDK32/Source/UnitTestBroker.res deleted file mode 100644 index 55f8742..0000000 Binary files a/BDK32/Source/UnitTestBroker.res and /dev/null differ diff --git a/BDK32/Source/UnitTestMFunStr.dof b/BDK32/Source/UnitTestMFunStr.dof deleted file mode 100644 index b071e7d..0000000 --- a/BDK32/Source/UnitTestMFunStr.dof +++ /dev/null @@ -1,84 +0,0 @@ -[Compiler] -A=1 -B=0 -C=1 -D=1 -E=0 -F=0 -G=1 -H=1 -I=1 -J=1 -K=0 -L=1 -M=0 -N=1 -O=1 -P=1 -Q=0 -R=0 -S=0 -T=0 -U=0 -V=1 -W=0 -X=1 -Y=1 -Z=1 -ShowHints=1 -ShowWarnings=1 -UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; -[Linker] -MapFile=0 -OutputObjs=0 -ConsoleApp=1 -DebugInfo=0 -RemoteSymbols=0 -MinStackSize=16384 -MaxStackSize=1048576 -ImageBase=4194304 -ExeDescription= -[Directories] -OutputDir= -UnitOutputDir= -PackageDLLOutputDir= -PackageDCPOutputDir= -SearchPath= -Packages=Vcl50;Vclx50;Vcldb50;Vclbde50;VclSmp50;vclado50;ibevnt50;vcldbx50;Qrpt50;TeeUI50;TeeDB50;Tee50;Dss50;TeeQR50;VCLIB50;Vclmid50;vclie50;Inetdb50;Inet50;NMFast50;webmid50;dclocx50;dclaxserver50;JLITestFDE;Rz252N50;Rz252D50;CS20Comps50;CSP20I50;gmunitsd5;gmctrlsd5;gmchrtedd5;gmdaouid5;GMDaod5;gmdbgend5;gmdbctrld5;gmadouid5;GMAdod5;democomponentsd5;Indy50;XWB_R50;SharedBroker_D50;CPRSctrls;ZipMasterD5;ICSDEL50;TCynthesisAppUpdateD5 -Conditionals= -DebugSourceDirs= -UsePackages=0 -[Parameters] -RunParams= -HostApplication= -[Language] -ActiveLang= -ProjectLang=$00000409 -RootDir= -[Version Info] -IncludeVerInfo=0 -AutoIncBuild=0 -MajorVer=1 -MinorVer=0 -Release=0 -Build=0 -Debug=0 -PreRelease=0 -Special=0 -Private=0 -DLL=0 -Locale=1033 -CodePage=1252 -[Version Info Keys] -CompanyName= -FileDescription= -FileVersion=1.0.0.0 -InternalName= -LegalCopyright= -LegalTrademarks= -OriginalFilename= -ProductName= -ProductVersion=1.0.0.0 -Comments= -[Excluded Packages] -D:\PROGRA~1\Borland\Delphi5\Projects\Bpl\Fmdc_R50.bpl=VistA Fileman Delphi Components diff --git a/BDK32/Source/UnitTestMFunStr.dpr b/BDK32/Source/UnitTestMFunStr.dpr deleted file mode 100644 index 796550d..0000000 --- a/BDK32/Source/UnitTestMFunStr.dpr +++ /dev/null @@ -1,14 +0,0 @@ -program UnitTestMFunStr; - -uses - Forms, - TestFramework, - GuiTestRunner, - uUnitTestMFunStr in 'uUnitTestMFunStr.pas'; - -{$R *.RES} - -begin - Application.Initialize; - GuiTestRunner.RunRegisteredTests; -end. diff --git a/BDK32/Source/UnitTestMFunStr.exe b/BDK32/Source/UnitTestMFunStr.exe deleted file mode 100644 index e2eddb8..0000000 Binary files a/BDK32/Source/UnitTestMFunStr.exe and /dev/null differ diff --git a/BDK32/Source/UnitTestMFunStr.res b/BDK32/Source/UnitTestMFunStr.res deleted file mode 100644 index 55f8742..0000000 Binary files a/BDK32/Source/UnitTestMFunStr.res and /dev/null differ diff --git a/BDK32/Source/VCEdit.dfm b/BDK32/Source/VCEdit.dfm deleted file mode 100644 index 5c2c844..0000000 --- a/BDK32/Source/VCEdit.dfm +++ /dev/null @@ -1,152 +0,0 @@ -object frmVCEdit: TfrmVCEdit - Left = 197 - Top = 197 - Width = 411 - Height = 166 - Caption = 'Change VISTA Verify Code' - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'MS Sans Serif' - Font.Style = [] - OldCreateOrder = True - PixelsPerInch = 96 - TextHeight = 13 - object lblOldVC: TLabel - Left = 16 - Top = 24 - Width = 74 - Height = 13 - Caption = '&Old verify code:' - FocusControl = edtOldVC - end - object lblNewVC: TLabel - Left = 16 - Top = 64 - Width = 80 - Height = 13 - Caption = '&New verify code:' - FocusControl = edtNewVC - end - object lblConfirmVC: TLabel - Left = 16 - Top = 104 - Width = 116 - Height = 13 - Caption = 'Con&firm new verify code:' - FocusControl = edtConfirmVC - end - object edtOldVC: TEdit - Left = 144 - Top = 16 - Width = 121 - Height = 21 - PasswordChar = '*' - TabOrder = 0 - OnChange = edtOldVCChange - end - object edtNewVC: TEdit - Left = 144 - Top = 56 - Width = 121 - Height = 21 - PasswordChar = '*' - TabOrder = 1 - OnChange = edtOldVCChange - OnExit = edtNewVCExit - end - object edtConfirmVC: TEdit - Left = 144 - Top = 96 - Width = 121 - Height = 21 - PasswordChar = '*' - TabOrder = 2 - OnChange = edtOldVCChange - end - object btnOK: TBitBtn - Left = 312 - Top = 16 - Width = 75 - Height = 25 - Caption = '&OK' - TabOrder = 3 - OnClick = btnOKClick - Glyph.Data = { - BE060000424DBE06000000000000360400002800000024000000120000000100 - 0800000000008802000000000000000000000001000000010000000000000000 - 80000080000000808000800000008000800080800000C0C0C000C0DCC000F0CA - A600000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000F0FBFF00A4A0A000808080000000 - FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00030303030303 - 0303030303030303030303030303030303030303030303030303030303030303 - 03030303030303030303030303030303030303030303FF030303030303030303 - 03030303030303040403030303030303030303030303030303F8F8FF03030303 - 03030303030303030303040202040303030303030303030303030303F80303F8 - FF030303030303030303030303040202020204030303030303030303030303F8 - 03030303F8FF0303030303030303030304020202020202040303030303030303 - 0303F8030303030303F8FF030303030303030304020202FA0202020204030303 - 0303030303F8FF0303F8FF030303F8FF03030303030303020202FA03FA020202 - 040303030303030303F8FF03F803F8FF0303F8FF03030303030303FA02FA0303 - 03FA0202020403030303030303F8FFF8030303F8FF0303F8FF03030303030303 - FA0303030303FA0202020403030303030303F80303030303F8FF0303F8FF0303 - 0303030303030303030303FA0202020403030303030303030303030303F8FF03 - 03F8FF03030303030303030303030303FA020202040303030303030303030303 - 0303F8FF0303F8FF03030303030303030303030303FA02020204030303030303 - 03030303030303F8FF0303F8FF03030303030303030303030303FA0202020403 - 030303030303030303030303F8FF0303F8FF03030303030303030303030303FA - 0202040303030303030303030303030303F8FF03F8FF03030303030303030303 - 03030303FA0202030303030303030303030303030303F8FFF803030303030303 - 030303030303030303FA0303030303030303030303030303030303F803030303 - 0303030303030303030303030303030303030303030303030303030303030303 - 0303} - NumGlyphs = 2 - end - object btnCancel: TBitBtn - Left = 312 - Top = 56 - Width = 75 - Height = 25 - Caption = '&Cancel' - TabOrder = 4 - Kind = bkCancel - end - object btnHelp: TBitBtn - Left = 312 - Top = 96 - Width = 75 - Height = 25 - TabOrder = 5 - OnClick = btnHelpClick - Kind = bkHelp - end -end diff --git a/BDK32/Source/VCEdit.pas b/BDK32/Source/VCEdit.pas deleted file mode 100644 index f90999a..0000000 --- a/BDK32/Source/VCEdit.pas +++ /dev/null @@ -1,301 +0,0 @@ -{ ************************************************************** - Package: XWB - Kernel RPCBroker - Date Created: Sept 18, 1997 (Version 1.1) - Site Name: Oakland, OI Field Office, Dept of Veteran Affairs - Developers: Danila Manapsal, Don Craven, Joel Ivey - Description: Verify Code edit dialog. - Current Release: Version 1.1 Patch 40 (January 7, 2005)) -*************************************************************** } - -unit VCEdit; - -interface - -uses - Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, - StdCtrls, Buttons, - {Broker units} - Trpcb, Hash; - -type - TVCEdit = class(TComponent) - private - FRPCBroker : TRPCBroker; - FOldVC : string; - FConfirmFailCnt : integer; //counts failed confirms. - FHelp : string; - FOldVCSet: Boolean; // Shows whether old code was passed in, even if NULL - procedure NoChange(reason : string); - protected - public - constructor Create(AOwner: TComponent); override; - destructor Destroy; override; - function ChangeVCKnowOldVC(strOldVC : string) : Boolean; - function ChangeVC : Boolean; - published - property RPCBroker : TRPCBroker read FRPCBroker write FRPCBroker; - end; - - - - TfrmVCEdit = class(TForm) - lblOldVC: TLabel; - lblNewVC: TLabel; - lblConfirmVC: TLabel; - edtOldVC: TEdit; - edtNewVC: TEdit; - edtConfirmVC: TEdit; - btnOK: TBitBtn; - btnCancel: TBitBtn; - btnHelp: TBitBtn; - procedure btnOKClick(Sender: TObject); - procedure btnHelpClick(Sender: TObject); - procedure edtNewVCExit(Sender: TObject); - procedure edtOldVCChange(Sender: TObject); - protected - { Private declarations } - FVCEdit : TVCEdit; //Links form to instance of VCEdit. - public - { Public declarations } - end; - -function ChangeVerify(RPCBroker: TRPCBroker): Boolean; -function SilentChangeVerify(RPCBroker: TRPCBroker; OldVerify, NewVerify1, NewVerify2: String; var Reason: String): Boolean; - -var - frmVCEdit: TfrmVCEdit; - -const - MAX_CONFIRM_FAIL : integer = 3; - U = '^'; - -{procedure Register;} - -implementation - -{$R *.DFM} - -function ChangeVerify(RPCBroker: TRPCBroker): Boolean; -var - VCEdit1: TVCEdit; -begin -// Str := ''; - VCEdit1 := TVCEdit.Create(Application); - try - VCEdit1.RPCBroker := RPCBroker; - if VCEdit1.ChangeVC then //invoke VCEdit form. //VC changed. - Result := True - else - Result := False; - finally - VCEdit1.Free; - end; -end; - -function SilentChangeVerify(RPCBroker: TRPCBroker; OldVerify, NewVerify1, NewVerify2: String; var Reason: String): Boolean; -var - OrigContext: String; -begin - Result := False; - Reason := ''; - if UpperCase(OldVerify) = UpperCase(NewVerify1) then - Reason := 'The new code is the same as the current one.' - else - if UpperCase(NewVerify1) <> UpperCase(NewVerify2) then - Reason := 'The confirmation code does not match.'; - if Reason = '' then - try - with RPCBroker do - begin - OrigContext := CurrentContext; - CreateContext('XUS SIGNON'); - RemoteProcedure := 'XUS CVC'; - Param[0].PType := literal; - Param[0].Value := Encrypt(UpperCase(OldVerify)) - + U + Encrypt(UpperCase(NewVerify1)) - + U + Encrypt(UpperCase(NewVerify2)) ; - Call; - Reason := ''; - if Results[0] = '0' then - Result := True - else if Results.Count > 1 then - Reason := Results[1]; - CreateContext(OrigContext); - end; - except - on E: Exception do - begin - RPCBroker.RPCBError := E.Message; - if Assigned(RPCBroker.OnRPCBFailure) then - RPCBroker.OnRPCBFailure(RPCBroker) - else if RPCBroker.ShowErrorMsgs = semRaise then - Raise; - end; - end; -end; - -{------------------TVCEdit component------------------------------------} - -constructor TVCEDit.Create(AOwner: TComponent); -begin - inherited Create(AOwner); - FOldVCSet := False; -end; - -destructor TVCEDit.Destroy; -begin - inherited Destroy; -end; - - -function TVCEdit.ChangeVCKnowOldVC(strOldVC : string) : Boolean; -begin - FOldVC := strOldVC; - FOldVCSet := True; - Result := ChangeVC; - FOldVCSet := False; // set it back to false in case we come in again -end; - -{--------------------------ChangeVC function---------------------------} -function TVCEdit.ChangeVC : Boolean; -var - OldHandle: THandle; -begin - Result := False; - try - frmVCEDit := TfrmVCEDit.Create(application); - with frmVCEDit do - begin - FVCEdit := Self; //To link form to VCEdit instance. - if FOldVCSet then //If old VC known, stuff it & disable editing. - begin - edtOldVC.Color := clBtnFace; - edtOldVC.Enabled := False; - edtOldVC.Text := FOldVC; - end{if}; -// ShowApplicationAndFocusOK(Application); - OldHandle := GetForegroundWindow; - SetForegroundWindow(frmVCEdit.Handle); - if ShowModal = mrOK then //outcome of form. - Result := True; - SetForegroundWindow(OldHandle); - end{with}; - frmVCEDit.Free; - except - on E: Exception do - begin - FRPCBroker.RPCBError := E.Message; - if Assigned(FRPCBroker.OnRPCBFailure) then - FRPCBroker.OnRPCBFailure(FRPCBroker) - else if FRPCBroker.ShowErrorMsgs = semRaise then - Raise; - end; - end{except}; -end; - -{------------------TVCEdit.NoChange------------------------------------- ------------Displays error messages when change fails.-------------------} -procedure TVCEdit.NoChange(reason : string); -begin - ShowMessage('Your VERIFY code was not changed.' + #13 + - reason + #13 ); -end; - - -{-------------------------TfrmVCEdit methods-------------------------------} -procedure TfrmVCEdit.btnOKClick(Sender: TObject); -begin - with FVCEdit do - begin - if edtOldVC.Text = edtNewVC.Text then - begin - NoChange('The new code is the same as the current one.'); - edtNewVC.Text := ''; - edtConfirmVC.Text := ''; - edtNewVC.SetFocus; - end - else - if edtNewVC.Text <> edtConfirmVC.Text then - begin - inc(FConfirmFailCnt); - if FConfirmFailCnt > MAX_CONFIRM_FAIL then - begin - edtNewVC.Text := ''; - edtConfirmVC.Text := ''; - NoChange('The confirmation code does not match.'); - edtNewVC.SetFocus; - end - else - begin - edtConfirmVC.text := ''; - NoChange('The confirmation code does not match. Try again.'); - edtConfirmVC.SetFocus; - end; - end - else - with FRPCBroker do - begin - RemoteProcedure := 'XUS CVC'; - Param[0].PType := literal; - Param[0].Value := Encrypt(UpperCase(edtOldVC.Text)) - + U + Encrypt(UpperCase(edtNewVC.Text)) - + U + Encrypt(UpperCase(edtConfirmVC.Text)) ; - Call; - if Results[0] = '0' then - begin - ShowMessage('Your VERIFY CODE has been changed'); - ModalResult := mrOK; //Close form. - end - else - begin - if Results.Count > 1 then - NoChange(Results[1]) - else - NoChange(''); - edtNewVC.Text := ''; - edtConfirmVC.Text := ''; - edtNewVC.SetFocus; - end; - end; - end{with}; -end; - -procedure TfrmVCEdit.btnHelpClick(Sender: TObject); -begin - with FVCEdit do - begin - if FHelp = '' then - begin - with FRPCBroker do - begin - RemoteProcedure := 'XUS AV HELP'; - Call; - if Results.Count > 0 then - FHelp := Results[0]; - FHelp := 'Enter a new verify code and then confirm it.' - + #13#13 + FHelp; - if FOldVC = '' then - FHelp := 'Enter your current verify code first.' + #13#10 + FHelp; - end{with}; - end{if}; - ShowMessage(FHelp); - end{with}; -end; - -procedure TfrmVCEdit.edtNewVCExit(Sender: TObject); -begin - if edtNewVC.Modified then - begin - FVCEdit.FConfirmFailCnt := 0; //Reset counter. - edtNewVC.Modified := False; - end; -end; - -procedure TfrmVCEdit.edtOldVCChange(Sender: TObject); //Also NewVC and ConfirmVC -begin - btnOk.Default := ((edtNewVC.Text <> '') and //Update status of OK btn. - (edtOldVC.Text <> '') and - (edtConfirmVC.Text <> '') ); -end; - -end. diff --git a/BDK32/Source/VERGENCECONTEXTORLib_TLB.dcr b/BDK32/Source/VERGENCECONTEXTORLib_TLB.dcr deleted file mode 100644 index 1d7ceec..0000000 Binary files a/BDK32/Source/VERGENCECONTEXTORLib_TLB.dcr and /dev/null differ diff --git a/BDK32/Source/VERGENCECONTEXTORLib_TLB.pas b/BDK32/Source/VERGENCECONTEXTORLib_TLB.pas deleted file mode 100644 index de0a00a..0000000 --- a/BDK32/Source/VERGENCECONTEXTORLib_TLB.pas +++ /dev/null @@ -1,1749 +0,0 @@ -unit VERGENCECONTEXTORLib_TLB; - -// ************************************************************************ // -// WARNING -// ------- -// The types declared in this file were generated from data read from a -// Type Library. If this type library is explicitly or indirectly (via -// another type library referring to this type library) re-imported, or the -// 'Refresh' command of the Type Library Editor activated while editing the -// Type Library, the contents of this file will be regenerated and all -// manual modifications will be lost. -// ************************************************************************ // - -// PASTLWTR : $Revision: 1.88.1.0.1.0 $ -// File generated on 2/9/2004 9:12:53 AM from Type Library described below. - -// *************************************************************************// -// NOTE: -// Items guarded by $IFDEF_LIVE_SERVER_AT_DESIGN_TIME are used by properties -// which return objects that may need to be explicitly created via a function -// call prior to any access via the property. These items have been disabled -// in order to prevent accidental use from within the object inspector. You -// may enable them by defining LIVE_SERVER_AT_DESIGN_TIME or by selectively -// removing them from the $IFDEF blocks. However, such items must still be -// programmatically created via a method of the appropriate CoClass before -// they can be used. -// ************************************************************************ // -// Type Lib: D:\Development\BDK32_p40\Source\VergenceContextor.dll (1) -// IID\LCID: {30AFBABD-5FD3-11D3-8727-0060B0B5E137}\0 -// Helpfile: -// DepndLst: -// (1) v2.0 stdole, (C:\WINNT\System32\stdole2.tlb) -// (2) v4.0 StdVCL, (C:\WINNT\System32\STDVCL40.DLL) -// Errors: -// Hint: Member 'Set' of 'IResponseDialogAccessor' changed to 'Set_' -// Error creating palette bitmap of (TContextor) : Invalid GUID format -// Error creating palette bitmap of (TContextItemCollection) : Invalid GUID format -// Error creating palette bitmap of (TContextItem) : Invalid GUID format -// Error creating palette bitmap of (TResponseDialog) : Invalid GUID format -// Error creating palette bitmap of (TContextorParticipant) : Invalid GUID format -// ************************************************************************ // -{$TYPEDADDRESS OFF} // Unit must be compiled without type-checked pointers. -interface - -uses Windows, ActiveX, Classes, Graphics, OleServer, OleCtrls, StdVCL; - -// *********************************************************************// -// GUIDS declared in the TypeLibrary. Following prefixes are used: -// Type Libraries : LIBID_xxxx -// CoClasses : CLASS_xxxx -// DISPInterfaces : DIID_xxxx -// Non-DISP interfaces: IID_xxxx -// *********************************************************************// -const - // TypeLibrary Major and minor versions - VERGENCECONTEXTORLibMajorVersion = 1; - VERGENCECONTEXTORLibMinorVersion = 0; - - LIBID_VERGENCECONTEXTORLib: TGUID = '{30AFBABD-5FD3-11D3-8727-0060B0B5E137}'; - - DIID__IContextChangesSink: TGUID = '{6BED8971-B3DD-11D3-8736-0060B0B5E137}'; - IID_IContextor: TGUID = '{8D879F5D-5FE6-11D3-8727-0060B0B5E137}'; - IID_IContextParticipant: TGUID = '{3E3DD272-998E-11D0-808D-00A0240943E4}'; - IID_IContextItemCollection: TGUID = '{AC4C0271-615A-11D3-84B5-0000861FDD4F}'; - IID_IContextItem: TGUID = '{AC4C0273-615A-11D3-84B5-0000861FDD4F}'; - IID_IResponseContextChange: TGUID = '{CBC6D968-9F6D-416A-8AA7-99172E588DF0}'; - IID_IResponseDialogAccessor: TGUID = '{86592071-F3BA-11D3-8181-005004A0F801}'; - IID_IContextChangesSink: TGUID = '{0B437E31-620E-11D3-84B6-0000861FDD4F}'; - IID_IResponseDialog: TGUID = '{9D33ECF1-8277-11D3-8525-0000861FDD4F}'; - CLASS_Contextor: TGUID = '{D5C9CC98-5FDB-11D3-8727-0060B0B5E137}'; - CLASS_ContextorControl: TGUID = '{8778ACF7-5CA9-11D3-8727-0060B0B5E137}'; - CLASS_ContextItemCollection: TGUID = '{AC4C0272-615A-11D3-84B5-0000861FDD4F}'; - CLASS_ContextItem: TGUID = '{AC4C0274-615A-11D3-84B5-0000861FDD4F}'; - CLASS_ResponseDialog: TGUID = '{9D33ECF2-8277-11D3-8525-0000861FDD4F}'; - IID_ISetHook: TGUID = '{8D879FDD-5FE6-11D3-8727-0060B0B5E137}'; - CLASS_ContextorParticipant: TGUID = '{4BA034A2-D0FA-11D3-818B-0050049598B2}'; - -// *********************************************************************// -// Declaration of Enumerations defined in Type Library -// *********************************************************************// -// Constants for enum __MIDL___MIDL_itf_VergenceContextor_0000_0002 -type - __MIDL___MIDL_itf_VergenceContextor_0000_0002 = TOleEnum; -const - CsNotRunning = $00000001; - CsParticipating = $00000002; - CsSuspended = $00000003; - -// Constants for enum __MIDL___MIDL_itf_VergenceContextor_0000_0001 -type - __MIDL___MIDL_itf_VergenceContextor_0000_0001 = TOleEnum; -const - ApNone = $00000001; - ApGet = $00000002; - ApSet = $00000003; - -// Constants for enum __MIDL___MIDL_itf_VergenceContextor_0000_0003 -type - __MIDL___MIDL_itf_VergenceContextor_0000_0003 = TOleEnum; -const - UrCommit = $00000001; - UrCancel = $00000002; - UrBreak = $00000003; - -type - -// *********************************************************************// -// Forward declaration of types defined in TypeLibrary -// *********************************************************************// - _IContextChangesSink = dispinterface; - IContextor = interface; - IContextorDisp = dispinterface; - IContextParticipant = interface; - IContextParticipantDisp = dispinterface; - IContextItemCollection = interface; - IContextItemCollectionDisp = dispinterface; - IContextItem = interface; - IContextItemDisp = dispinterface; - IResponseContextChange = interface; - IResponseContextChangeDisp = dispinterface; - IResponseDialogAccessor = interface; - IResponseDialogAccessorDisp = dispinterface; - IContextChangesSink = interface; - IContextChangesSinkDisp = dispinterface; - IResponseDialog = interface; - IResponseDialogDisp = dispinterface; - ISetHook = interface; - ISetHookDisp = dispinterface; - -// *********************************************************************// -// Declaration of CoClasses defined in Type Library -// (NOTE: Here we map each CoClass to its Default Interface) -// *********************************************************************// - Contextor = IContextor; - ContextorControl = IContextor; - ContextItemCollection = IContextItemCollection; - ContextItem = IContextItem; - ResponseDialog = IResponseDialog; - ContextorParticipant = IContextParticipant; - - -// *********************************************************************// -// Declaration of structures, unions and aliases. -// *********************************************************************// - - ContextorState = __MIDL___MIDL_itf_VergenceContextor_0000_0002; - AccessPrivilege = __MIDL___MIDL_itf_VergenceContextor_0000_0001; - UserResponse = __MIDL___MIDL_itf_VergenceContextor_0000_0003; - -// *********************************************************************// -// DispIntf: _IContextChangesSink -// Flags: (4096) Dispatchable -// GUID: {6BED8971-B3DD-11D3-8736-0060B0B5E137} -// *********************************************************************// - _IContextChangesSink = dispinterface - ['{6BED8971-B3DD-11D3-8736-0060B0B5E137}'] - procedure Pending(const aContextItemCollection: IDispatch); dispid 1; - procedure Committed; dispid 2; - procedure Canceled; dispid 3; - end; - -// *********************************************************************// -// Interface: IContextor -// Flags: (4416) Dual OleAutomation Dispatchable -// GUID: {8D879F5D-5FE6-11D3-8727-0060B0B5E137} -// *********************************************************************// - IContextor = interface(IDispatch) - ['{8D879F5D-5FE6-11D3-8727-0060B0B5E137}'] - procedure Run(const applicationLabel: WideString; const passcode: WideString; survey: WordBool; - const initialNotificationFilter: WideString); safecall; - procedure Suspend; safecall; - procedure Resume; safecall; - function Get_State: ContextorState; safecall; - function GetPrivilege(const subj: WideString): AccessPrivilege; safecall; - function Get_CurrentContext: IContextItemCollection; safecall; - procedure StartContextChange; safecall; - function EndContextChange(commit: WordBool; - const aContextItemCollection: IContextItemCollection): UserResponse; safecall; - procedure SetSurveyResponse(const reason: WideString); safecall; - function Get_NotificationFilter: WideString; safecall; - procedure Set_NotificationFilter(const filter: WideString); safecall; - function Get_Name: WideString; safecall; - property State: ContextorState read Get_State; - property CurrentContext: IContextItemCollection read Get_CurrentContext; - property NotificationFilter: WideString read Get_NotificationFilter write Set_NotificationFilter; - property Name: WideString read Get_Name; - end; - -// *********************************************************************// -// DispIntf: IContextorDisp -// Flags: (4416) Dual OleAutomation Dispatchable -// GUID: {8D879F5D-5FE6-11D3-8727-0060B0B5E137} -// *********************************************************************// - IContextorDisp = dispinterface - ['{8D879F5D-5FE6-11D3-8727-0060B0B5E137}'] - procedure Run(const applicationLabel: WideString; const passcode: WideString; survey: WordBool; - const initialNotificationFilter: WideString); dispid 1; - procedure Suspend; dispid 2; - procedure Resume; dispid 3; - property State: ContextorState readonly dispid 4; - function GetPrivilege(const subj: WideString): AccessPrivilege; dispid 5; - property CurrentContext: IContextItemCollection readonly dispid 6; - procedure StartContextChange; dispid 7; - function EndContextChange(commit: WordBool; - const aContextItemCollection: IContextItemCollection): UserResponse; dispid 8; - procedure SetSurveyResponse(const reason: WideString); dispid 9; - property NotificationFilter: WideString dispid 10; - property Name: WideString readonly dispid 11; - end; - -// *********************************************************************// -// Interface: IContextParticipant -// Flags: (4416) Dual OleAutomation Dispatchable -// GUID: {3E3DD272-998E-11D0-808D-00A0240943E4} -// *********************************************************************// - IContextParticipant = interface(IDispatch) - ['{3E3DD272-998E-11D0-808D-00A0240943E4}'] - function ContextChangesPending(contextCoupon: Integer; var reason: WideString): WideString; safecall; - procedure ContextChangesAccepted(contextCoupon: Integer); safecall; - procedure ContextChangesCanceled(contextCoupon: Integer); safecall; - procedure CommonContextTerminated; safecall; - procedure Ping; safecall; - end; - -// *********************************************************************// -// DispIntf: IContextParticipantDisp -// Flags: (4416) Dual OleAutomation Dispatchable -// GUID: {3E3DD272-998E-11D0-808D-00A0240943E4} -// *********************************************************************// - IContextParticipantDisp = dispinterface - ['{3E3DD272-998E-11D0-808D-00A0240943E4}'] - function ContextChangesPending(contextCoupon: Integer; var reason: WideString): WideString; dispid 1610743808; - procedure ContextChangesAccepted(contextCoupon: Integer); dispid 1610743809; - procedure ContextChangesCanceled(contextCoupon: Integer); dispid 1610743810; - procedure CommonContextTerminated; dispid 1610743811; - procedure Ping; dispid 1610743812; - end; - -// *********************************************************************// -// Interface: IContextItemCollection -// Flags: (4416) Dual OleAutomation Dispatchable -// GUID: {AC4C0271-615A-11D3-84B5-0000861FDD4F} -// *********************************************************************// - IContextItemCollection = interface(IDispatch) - ['{AC4C0271-615A-11D3-84B5-0000861FDD4F}'] - function Count: Integer; safecall; - procedure Add(const aContextItem: IContextItem); safecall; - procedure Remove(const contextItemName: WideString); safecall; - procedure RemoveAll; safecall; - function Present(key: OleVariant): IContextItem; safecall; - function Get__NewEnum: IUnknown; safecall; - function Item(key: OleVariant): IContextItem; safecall; - property _NewEnum: IUnknown read Get__NewEnum; - end; - -// *********************************************************************// -// DispIntf: IContextItemCollectionDisp -// Flags: (4416) Dual OleAutomation Dispatchable -// GUID: {AC4C0271-615A-11D3-84B5-0000861FDD4F} -// *********************************************************************// - IContextItemCollectionDisp = dispinterface - ['{AC4C0271-615A-11D3-84B5-0000861FDD4F}'] - function Count: Integer; dispid 1; - procedure Add(const aContextItem: IContextItem); dispid 2; - procedure Remove(const contextItemName: WideString); dispid 3; - procedure RemoveAll; dispid 4; - function Present(key: OleVariant): IContextItem; dispid 5; - property _NewEnum: IUnknown readonly dispid -4; - function Item(key: OleVariant): IContextItem; dispid 0; - end; - -// *********************************************************************// -// Interface: IContextItem -// Flags: (4416) Dual OleAutomation Dispatchable -// GUID: {AC4C0273-615A-11D3-84B5-0000861FDD4F} -// *********************************************************************// - IContextItem = interface(IDispatch) - ['{AC4C0273-615A-11D3-84B5-0000861FDD4F}'] - function Get_Subject: WideString; safecall; - procedure Set_Subject(const pVal: WideString); safecall; - function Get_Role: WideString; safecall; - procedure Set_Role(const pVal: WideString); safecall; - function Get_Prefix: WideString; safecall; - procedure Set_Prefix(const pVal: WideString); safecall; - function Get_Suffix: WideString; safecall; - procedure Set_Suffix(const pVal: WideString); safecall; - function Get_Name: WideString; safecall; - procedure Set_Name(const pVal: WideString); safecall; - function Get_Value: WideString; safecall; - procedure Set_Value(const pVal: WideString); safecall; - function Clone: IContextItem; safecall; - property Subject: WideString read Get_Subject write Set_Subject; - property Role: WideString read Get_Role write Set_Role; - property Prefix: WideString read Get_Prefix write Set_Prefix; - property Suffix: WideString read Get_Suffix write Set_Suffix; - property Name: WideString read Get_Name write Set_Name; - property Value: WideString read Get_Value write Set_Value; - end; - -// *********************************************************************// -// DispIntf: IContextItemDisp -// Flags: (4416) Dual OleAutomation Dispatchable -// GUID: {AC4C0273-615A-11D3-84B5-0000861FDD4F} -// *********************************************************************// - IContextItemDisp = dispinterface - ['{AC4C0273-615A-11D3-84B5-0000861FDD4F}'] - property Subject: WideString dispid 1; - property Role: WideString dispid 2; - property Prefix: WideString dispid 3; - property Suffix: WideString dispid 4; - property Name: WideString dispid 5; - property Value: WideString dispid 6; - function Clone: IContextItem; dispid 7; - end; - -// *********************************************************************// -// Interface: IResponseContextChange -// Flags: (4416) Dual OleAutomation Dispatchable -// GUID: {CBC6D968-9F6D-416A-8AA7-99172E588DF0} -// *********************************************************************// - IResponseContextChange = interface(IDispatch) - ['{CBC6D968-9F6D-416A-8AA7-99172E588DF0}'] - procedure StartResponseContextChange; safecall; - function EndResponseContextChange(commit: WordBool; - const aContextItemCollection: IContextItemCollection; - var noContinue: WordBool): OleVariant; safecall; - procedure CommitContextChange; safecall; - procedure CancelContextChange; safecall; - end; - -// *********************************************************************// -// DispIntf: IResponseContextChangeDisp -// Flags: (4416) Dual OleAutomation Dispatchable -// GUID: {CBC6D968-9F6D-416A-8AA7-99172E588DF0} -// *********************************************************************// - IResponseContextChangeDisp = dispinterface - ['{CBC6D968-9F6D-416A-8AA7-99172E588DF0}'] - procedure StartResponseContextChange; dispid 1; - function EndResponseContextChange(commit: WordBool; - const aContextItemCollection: IContextItemCollection; - var noContinue: WordBool): OleVariant; dispid 2; - procedure CommitContextChange; dispid 3; - procedure CancelContextChange; dispid 4; - end; - -// *********************************************************************// -// Interface: IResponseDialogAccessor -// Flags: (4432) Hidden Dual OleAutomation Dispatchable -// GUID: {86592071-F3BA-11D3-8181-005004A0F801} -// *********************************************************************// - IResponseDialogAccessor = interface(IDispatch) - ['{86592071-F3BA-11D3-8181-005004A0F801}'] - procedure Reset; safecall; - procedure Set_(const aResponseDialog: IResponseDialog); safecall; - end; - -// *********************************************************************// -// DispIntf: IResponseDialogAccessorDisp -// Flags: (4432) Hidden Dual OleAutomation Dispatchable -// GUID: {86592071-F3BA-11D3-8181-005004A0F801} -// *********************************************************************// - IResponseDialogAccessorDisp = dispinterface - ['{86592071-F3BA-11D3-8181-005004A0F801}'] - procedure Reset; dispid 1; - procedure Set_(const aResponseDialog: IResponseDialog); dispid 2; - end; - -// *********************************************************************// -// Interface: IContextChangesSink -// Flags: (4416) Dual OleAutomation Dispatchable -// GUID: {0B437E31-620E-11D3-84B6-0000861FDD4F} -// *********************************************************************// - IContextChangesSink = interface(IDispatch) - ['{0B437E31-620E-11D3-84B6-0000861FDD4F}'] - procedure Pending(const aContextItemCollection: IDispatch); safecall; - procedure Committed; safecall; - procedure Canceled; safecall; - end; - -// *********************************************************************// -// DispIntf: IContextChangesSinkDisp -// Flags: (4416) Dual OleAutomation Dispatchable -// GUID: {0B437E31-620E-11D3-84B6-0000861FDD4F} -// *********************************************************************// - IContextChangesSinkDisp = dispinterface - ['{0B437E31-620E-11D3-84B6-0000861FDD4F}'] - procedure Pending(const aContextItemCollection: IDispatch); dispid 1; - procedure Committed; dispid 2; - procedure Canceled; dispid 3; - end; - -// *********************************************************************// -// Interface: IResponseDialog -// Flags: (4416) Dual OleAutomation Dispatchable -// GUID: {9D33ECF1-8277-11D3-8525-0000861FDD4F} -// *********************************************************************// - IResponseDialog = interface(IDispatch) - ['{9D33ECF1-8277-11D3-8525-0000861FDD4F}'] - function ProcessSurveyResults(responses: OleVariant; noContinue: WordBool): UserResponse; safecall; - end; - -// *********************************************************************// -// DispIntf: IResponseDialogDisp -// Flags: (4416) Dual OleAutomation Dispatchable -// GUID: {9D33ECF1-8277-11D3-8525-0000861FDD4F} -// *********************************************************************// - IResponseDialogDisp = dispinterface - ['{9D33ECF1-8277-11D3-8525-0000861FDD4F}'] - function ProcessSurveyResults(responses: OleVariant; noContinue: WordBool): UserResponse; dispid 1; - end; - -// *********************************************************************// -// Interface: ISetHook -// Flags: (4432) Hidden Dual OleAutomation Dispatchable -// GUID: {8D879FDD-5FE6-11D3-8727-0060B0B5E137} -// *********************************************************************// - ISetHook = interface(IDispatch) - ['{8D879FDD-5FE6-11D3-8727-0060B0B5E137}'] - procedure SetParticipant(const aContextParticipant: IContextParticipant); safecall; - end; - -// *********************************************************************// -// DispIntf: ISetHookDisp -// Flags: (4432) Hidden Dual OleAutomation Dispatchable -// GUID: {8D879FDD-5FE6-11D3-8727-0060B0B5E137} -// *********************************************************************// - ISetHookDisp = dispinterface - ['{8D879FDD-5FE6-11D3-8727-0060B0B5E137}'] - procedure SetParticipant(const aContextParticipant: IContextParticipant); dispid 1; - end; - -// *********************************************************************// -// The Class CoContextor provides a Create and CreateRemote method to -// create instances of the default interface IContextor exposed by -// the CoClass Contextor. The functions are intended to be used by -// clients wishing to automate the CoClass objects exposed by the -// server of this typelibrary. -// *********************************************************************// - CoContextor = class - class function Create: IContextor; - class function CreateRemote(const MachineName: string): IContextor; - end; - - TContextorPending = procedure(Sender: TObject; var aContextItemCollection: OleVariant) of object; - - -// *********************************************************************// -// OLE Server Proxy class declaration -// Server Object : TContextor -// Help String : Vergence Contextor -// Default Interface: IContextor -// Def. Intf. DISP? : No -// Event Interface: _IContextChangesSink -// TypeFlags : (2) CanCreate -// *********************************************************************// -{$IFDEF LIVE_SERVER_AT_DESIGN_TIME} - TContextorProperties= class; -{$ENDIF} - TContextor = class(TOleServer) - private - FOnPending: TContextorPending; - FOnCommitted: TNotifyEvent; - FOnCanceled: TNotifyEvent; - FIntf: IContextor; -{$IFDEF LIVE_SERVER_AT_DESIGN_TIME} - FProps: TContextorProperties; - function GetServerProperties: TContextorProperties; -{$ENDIF} - function GetDefaultInterface: IContextor; - protected - procedure InitServerData; override; - procedure InvokeEvent(DispID: TDispID; var Params: TVariantArray); override; - function Get_State: ContextorState; - function Get_CurrentContext: IContextItemCollection; - function Get_NotificationFilter: WideString; - procedure Set_NotificationFilter(const filter: WideString); - function Get_Name: WideString; - public - constructor Create(AOwner: TComponent); override; - destructor Destroy; override; - procedure Connect; override; - procedure ConnectTo(svrIntf: IContextor); - procedure Disconnect; override; - procedure Run(const applicationLabel: WideString; const passcode: WideString; survey: WordBool; - const initialNotificationFilter: WideString); - procedure Suspend; - procedure Resume; - function GetPrivilege(const subj: WideString): AccessPrivilege; - procedure StartContextChange; - function EndContextChange(commit: WordBool; - const aContextItemCollection: IContextItemCollection): UserResponse; - procedure SetSurveyResponse(const reason: WideString); - property DefaultInterface: IContextor read GetDefaultInterface; - property State: ContextorState read Get_State; - property CurrentContext: IContextItemCollection read Get_CurrentContext; - property Name: WideString read Get_Name; - property NotificationFilter: WideString read Get_NotificationFilter write Set_NotificationFilter; - published -{$IFDEF LIVE_SERVER_AT_DESIGN_TIME} - property Server: TContextorProperties read GetServerProperties; -{$ENDIF} - property OnPending: TContextorPending read FOnPending write FOnPending; - property OnCommitted: TNotifyEvent read FOnCommitted write FOnCommitted; - property OnCanceled: TNotifyEvent read FOnCanceled write FOnCanceled; - end; - -{$IFDEF LIVE_SERVER_AT_DESIGN_TIME} -// *********************************************************************// -// OLE Server Properties Proxy Class -// Server Object : TContextor -// (This object is used by the IDE's Property Inspector to allow editing -// of the properties of this server) -// *********************************************************************// - TContextorProperties = class(TPersistent) - private - FServer: TContextor; - function GetDefaultInterface: IContextor; - constructor Create(AServer: TContextor); - protected - function Get_State: ContextorState; - function Get_CurrentContext: IContextItemCollection; - function Get_NotificationFilter: WideString; - procedure Set_NotificationFilter(const filter: WideString); - function Get_Name: WideString; - public - property DefaultInterface: IContextor read GetDefaultInterface; - published - property NotificationFilter: WideString read Get_NotificationFilter write Set_NotificationFilter; - end; -{$ENDIF} - - - -// *********************************************************************// -// OLE Control Proxy class declaration -// Control Name : TContextorControl -// Help String : Vergence ContextorControl -// Default Interface: IContextor -// Def. Intf. DISP? : No -// Event Interface: _IContextChangesSink -// TypeFlags : (2) CanCreate -// *********************************************************************// - TContextorControlPending = procedure(Sender: TObject; const aContextItemCollection: IDispatch) of object; - - TContextorControl = class(TOleControl) - private - FOnPending: TContextorControlPending; - FOnCommitted: TNotifyEvent; - FOnCanceled: TNotifyEvent; - FIntf: IContextor; - function GetControlInterface: IContextor; - protected - procedure CreateControl; - procedure InitControlData; override; - function Get_CurrentContext: IContextItemCollection; - public - procedure Run(const applicationLabel: WideString; const passcode: WideString; survey: WordBool; - const initialNotificationFilter: WideString); - procedure Suspend; - procedure Resume; - function GetPrivilege(const subj: WideString): AccessPrivilege; - procedure StartContextChange; - function EndContextChange(commit: WordBool; - const aContextItemCollection: IContextItemCollection): UserResponse; - procedure SetSurveyResponse(const reason: WideString); - property ControlInterface: IContextor read GetControlInterface; - property DefaultInterface: IContextor read GetControlInterface; - property State: TOleEnum index 4 read GetTOleEnumProp; - property CurrentContext: IContextItemCollection read Get_CurrentContext; - property Name: WideString index 11 read GetWideStringProp; - published - property NotificationFilter: WideString index 10 read GetWideStringProp write SetWideStringProp stored False; - property OnPending: TContextorControlPending read FOnPending write FOnPending; - property OnCommitted: TNotifyEvent read FOnCommitted write FOnCommitted; - property OnCanceled: TNotifyEvent read FOnCanceled write FOnCanceled; - end; - -// *********************************************************************// -// The Class CoContextItemCollection provides a Create and CreateRemote method to -// create instances of the default interface IContextItemCollection exposed by -// the CoClass ContextItemCollection. The functions are intended to be used by -// clients wishing to automate the CoClass objects exposed by the -// server of this typelibrary. -// *********************************************************************// - CoContextItemCollection = class - class function Create: IContextItemCollection; - class function CreateRemote(const MachineName: string): IContextItemCollection; - end; - - -// *********************************************************************// -// OLE Server Proxy class declaration -// Server Object : TContextItemCollection -// Help String : Vergence ContextItemCollection -// Default Interface: IContextItemCollection -// Def. Intf. DISP? : No -// Event Interface: -// TypeFlags : (2) CanCreate -// *********************************************************************// -{$IFDEF LIVE_SERVER_AT_DESIGN_TIME} - TContextItemCollectionProperties= class; -{$ENDIF} - TContextItemCollection = class(TOleServer) - private - FIntf: IContextItemCollection; -{$IFDEF LIVE_SERVER_AT_DESIGN_TIME} - FProps: TContextItemCollectionProperties; - function GetServerProperties: TContextItemCollectionProperties; -{$ENDIF} - function GetDefaultInterface: IContextItemCollection; - protected - procedure InitServerData; override; - function Get__NewEnum: IUnknown; - public - constructor Create(AOwner: TComponent); override; - destructor Destroy; override; - procedure Connect; override; - procedure ConnectTo(svrIntf: IContextItemCollection); - procedure Disconnect; override; - function Count: Integer; - procedure Add(const aContextItem: IContextItem); - procedure Remove(const contextItemName: WideString); - procedure RemoveAll; - function Present(key: OleVariant): IContextItem; - function Item(key: OleVariant): IContextItem; - property DefaultInterface: IContextItemCollection read GetDefaultInterface; - property _NewEnum: IUnknown read Get__NewEnum; - published -{$IFDEF LIVE_SERVER_AT_DESIGN_TIME} - property Server: TContextItemCollectionProperties read GetServerProperties; -{$ENDIF} - end; - -{$IFDEF LIVE_SERVER_AT_DESIGN_TIME} -// *********************************************************************// -// OLE Server Properties Proxy Class -// Server Object : TContextItemCollection -// (This object is used by the IDE's Property Inspector to allow editing -// of the properties of this server) -// *********************************************************************// - TContextItemCollectionProperties = class(TPersistent) - private - FServer: TContextItemCollection; - function GetDefaultInterface: IContextItemCollection; - constructor Create(AServer: TContextItemCollection); - protected - function Get__NewEnum: IUnknown; - public - property DefaultInterface: IContextItemCollection read GetDefaultInterface; - published - end; -{$ENDIF} - - -// *********************************************************************// -// The Class CoContextItem provides a Create and CreateRemote method to -// create instances of the default interface IContextItem exposed by -// the CoClass ContextItem. The functions are intended to be used by -// clients wishing to automate the CoClass objects exposed by the -// server of this typelibrary. -// *********************************************************************// - CoContextItem = class - class function Create: IContextItem; - class function CreateRemote(const MachineName: string): IContextItem; - end; - - -// *********************************************************************// -// OLE Server Proxy class declaration -// Server Object : TContextItem -// Help String : Vergence ContextItem -// Default Interface: IContextItem -// Def. Intf. DISP? : No -// Event Interface: -// TypeFlags : (2) CanCreate -// *********************************************************************// -{$IFDEF LIVE_SERVER_AT_DESIGN_TIME} - TContextItemProperties= class; -{$ENDIF} - TContextItem = class(TOleServer) - private - FIntf: IContextItem; -{$IFDEF LIVE_SERVER_AT_DESIGN_TIME} - FProps: TContextItemProperties; - function GetServerProperties: TContextItemProperties; -{$ENDIF} - function GetDefaultInterface: IContextItem; - protected - procedure InitServerData; override; - function Get_Subject: WideString; - procedure Set_Subject(const pVal: WideString); - function Get_Role: WideString; - procedure Set_Role(const pVal: WideString); - function Get_Prefix: WideString; - procedure Set_Prefix(const pVal: WideString); - function Get_Suffix: WideString; - procedure Set_Suffix(const pVal: WideString); - function Get_Name: WideString; - procedure Set_Name(const pVal: WideString); - function Get_Value: WideString; - procedure Set_Value(const pVal: WideString); - public - constructor Create(AOwner: TComponent); override; - destructor Destroy; override; - procedure Connect; override; - procedure ConnectTo(svrIntf: IContextItem); - procedure Disconnect; override; - function Clone: IContextItem; - property DefaultInterface: IContextItem read GetDefaultInterface; - property Subject: WideString read Get_Subject write Set_Subject; - property Role: WideString read Get_Role write Set_Role; - property Prefix: WideString read Get_Prefix write Set_Prefix; - property Suffix: WideString read Get_Suffix write Set_Suffix; - property Name: WideString read Get_Name write Set_Name; - property Value: WideString read Get_Value write Set_Value; - published -{$IFDEF LIVE_SERVER_AT_DESIGN_TIME} - property Server: TContextItemProperties read GetServerProperties; -{$ENDIF} - end; - -{$IFDEF LIVE_SERVER_AT_DESIGN_TIME} -// *********************************************************************// -// OLE Server Properties Proxy Class -// Server Object : TContextItem -// (This object is used by the IDE's Property Inspector to allow editing -// of the properties of this server) -// *********************************************************************// - TContextItemProperties = class(TPersistent) - private - FServer: TContextItem; - function GetDefaultInterface: IContextItem; - constructor Create(AServer: TContextItem); - protected - function Get_Subject: WideString; - procedure Set_Subject(const pVal: WideString); - function Get_Role: WideString; - procedure Set_Role(const pVal: WideString); - function Get_Prefix: WideString; - procedure Set_Prefix(const pVal: WideString); - function Get_Suffix: WideString; - procedure Set_Suffix(const pVal: WideString); - function Get_Name: WideString; - procedure Set_Name(const pVal: WideString); - function Get_Value: WideString; - procedure Set_Value(const pVal: WideString); - public - property DefaultInterface: IContextItem read GetDefaultInterface; - published - property Subject: WideString read Get_Subject write Set_Subject; - property Role: WideString read Get_Role write Set_Role; - property Prefix: WideString read Get_Prefix write Set_Prefix; - property Suffix: WideString read Get_Suffix write Set_Suffix; - property Name: WideString read Get_Name write Set_Name; - property Value: WideString read Get_Value write Set_Value; - end; -{$ENDIF} - - -// *********************************************************************// -// The Class CoResponseDialog provides a Create and CreateRemote method to -// create instances of the default interface IResponseDialog exposed by -// the CoClass ResponseDialog. The functions are intended to be used by -// clients wishing to automate the CoClass objects exposed by the -// server of this typelibrary. -// *********************************************************************// - CoResponseDialog = class - class function Create: IResponseDialog; - class function CreateRemote(const MachineName: string): IResponseDialog; - end; - - -// *********************************************************************// -// OLE Server Proxy class declaration -// Server Object : TResponseDialog -// Help String : Vergence ResponseDialog -// Default Interface: IResponseDialog -// Def. Intf. DISP? : No -// Event Interface: -// TypeFlags : (2) CanCreate -// *********************************************************************// -{$IFDEF LIVE_SERVER_AT_DESIGN_TIME} - TResponseDialogProperties= class; -{$ENDIF} - TResponseDialog = class(TOleServer) - private - FIntf: IResponseDialog; -{$IFDEF LIVE_SERVER_AT_DESIGN_TIME} - FProps: TResponseDialogProperties; - function GetServerProperties: TResponseDialogProperties; -{$ENDIF} - function GetDefaultInterface: IResponseDialog; - protected - procedure InitServerData; override; - public - constructor Create(AOwner: TComponent); override; - destructor Destroy; override; - procedure Connect; override; - procedure ConnectTo(svrIntf: IResponseDialog); - procedure Disconnect; override; - function ProcessSurveyResults(responses: OleVariant; noContinue: WordBool): UserResponse; - property DefaultInterface: IResponseDialog read GetDefaultInterface; - published -{$IFDEF LIVE_SERVER_AT_DESIGN_TIME} - property Server: TResponseDialogProperties read GetServerProperties; -{$ENDIF} - end; - -{$IFDEF LIVE_SERVER_AT_DESIGN_TIME} -// *********************************************************************// -// OLE Server Properties Proxy Class -// Server Object : TResponseDialog -// (This object is used by the IDE's Property Inspector to allow editing -// of the properties of this server) -// *********************************************************************// - TResponseDialogProperties = class(TPersistent) - private - FServer: TResponseDialog; - function GetDefaultInterface: IResponseDialog; - constructor Create(AServer: TResponseDialog); - protected - public - property DefaultInterface: IResponseDialog read GetDefaultInterface; - published - end; -{$ENDIF} - - -// *********************************************************************// -// The Class CoContextorParticipant provides a Create and CreateRemote method to -// create instances of the default interface IContextParticipant exposed by -// the CoClass ContextorParticipant. The functions are intended to be used by -// clients wishing to automate the CoClass objects exposed by the -// server of this typelibrary. -// *********************************************************************// - CoContextorParticipant = class - class function Create: IContextParticipant; - class function CreateRemote(const MachineName: string): IContextParticipant; - end; - - -// *********************************************************************// -// OLE Server Proxy class declaration -// Server Object : TContextorParticipant -// Help String : ContextorParticipant Class -// Default Interface: IContextParticipant -// Def. Intf. DISP? : No -// Event Interface: -// TypeFlags : (2) CanCreate -// *********************************************************************// -{$IFDEF LIVE_SERVER_AT_DESIGN_TIME} - TContextorParticipantProperties= class; -{$ENDIF} - TContextorParticipant = class(TOleServer) - private - FIntf: IContextParticipant; -{$IFDEF LIVE_SERVER_AT_DESIGN_TIME} - FProps: TContextorParticipantProperties; - function GetServerProperties: TContextorParticipantProperties; -{$ENDIF} - function GetDefaultInterface: IContextParticipant; - protected - procedure InitServerData; override; - public - constructor Create(AOwner: TComponent); override; - destructor Destroy; override; - procedure Connect; override; - procedure ConnectTo(svrIntf: IContextParticipant); - procedure Disconnect; override; - function ContextChangesPending(contextCoupon: Integer; var reason: WideString): WideString; - procedure ContextChangesAccepted(contextCoupon: Integer); - procedure ContextChangesCanceled(contextCoupon: Integer); - procedure CommonContextTerminated; - procedure Ping; - property DefaultInterface: IContextParticipant read GetDefaultInterface; - published -{$IFDEF LIVE_SERVER_AT_DESIGN_TIME} - property Server: TContextorParticipantProperties read GetServerProperties; -{$ENDIF} - end; - -{$IFDEF LIVE_SERVER_AT_DESIGN_TIME} -// *********************************************************************// -// OLE Server Properties Proxy Class -// Server Object : TContextorParticipant -// (This object is used by the IDE's Property Inspector to allow editing -// of the properties of this server) -// *********************************************************************// - TContextorParticipantProperties = class(TPersistent) - private - FServer: TContextorParticipant; - function GetDefaultInterface: IContextParticipant; - constructor Create(AServer: TContextorParticipant); - protected - public - property DefaultInterface: IContextParticipant read GetDefaultInterface; - published - end; -{$ENDIF} - -{ -procedure Register; -} -implementation - -uses ComObj; - -class function CoContextor.Create: IContextor; -begin - Result := CreateComObject(CLASS_Contextor) as IContextor; -end; - -class function CoContextor.CreateRemote(const MachineName: string): IContextor; -begin - Result := CreateRemoteComObject(MachineName, CLASS_Contextor) as IContextor; -end; - -procedure TContextor.InitServerData; -const - CServerData: TServerData = ( - ClassID: '{D5C9CC98-5FDB-11D3-8727-0060B0B5E137}'; - IntfIID: '{8D879F5D-5FE6-11D3-8727-0060B0B5E137}'; - EventIID: '{6BED8971-B3DD-11D3-8736-0060B0B5E137}'; - LicenseKey: nil; - Version: 500); -begin - ServerData := @CServerData; -end; - -procedure TContextor.Connect; -var - punk: IUnknown; -begin - if FIntf = nil then - begin - punk := GetServer; - ConnectEvents(punk); - Fintf:= punk as IContextor; - end; -end; - -procedure TContextor.ConnectTo(svrIntf: IContextor); -begin - Disconnect; - FIntf := svrIntf; - ConnectEvents(FIntf); -end; - -procedure TContextor.DisConnect; -begin - if Fintf <> nil then - begin - DisconnectEvents(FIntf); - FIntf := nil; - end; -end; - -function TContextor.GetDefaultInterface: IContextor; -begin - if FIntf = nil then - Connect; - Assert(FIntf <> nil, 'DefaultInterface is NULL. Component is not connected to Server. You must call ''Connect'' or ''ConnectTo'' before this operation'); - Result := FIntf; -end; - -constructor TContextor.Create(AOwner: TComponent); -begin - inherited Create(AOwner); -{$IFDEF LIVE_SERVER_AT_DESIGN_TIME} - FProps := TContextorProperties.Create(Self); -{$ENDIF} -end; - -destructor TContextor.Destroy; -begin -{$IFDEF LIVE_SERVER_AT_DESIGN_TIME} - FProps.Free; -{$ENDIF} - inherited Destroy; -end; - -{$IFDEF LIVE_SERVER_AT_DESIGN_TIME} -function TContextor.GetServerProperties: TContextorProperties; -begin - Result := FProps; -end; -{$ENDIF} - -procedure TContextor.InvokeEvent(DispID: TDispID; var Params: TVariantArray); -begin - case DispID of - -1: Exit; // DISPID_UNKNOWN - 1: if Assigned(FOnPending) then - FOnPending(Self, Params[0] {const IDispatch}); - 2: if Assigned(FOnCommitted) then - FOnCommitted(Self); - 3: if Assigned(FOnCanceled) then - FOnCanceled(Self); - end; {case DispID} -end; - -function TContextor.Get_State: ContextorState; -begin - Result := DefaultInterface.Get_State; -end; - -function TContextor.Get_CurrentContext: IContextItemCollection; -begin - Result := DefaultInterface.Get_CurrentContext; -end; - -function TContextor.Get_NotificationFilter: WideString; -begin - Result := DefaultInterface.Get_NotificationFilter; -end; - -procedure TContextor.Set_NotificationFilter(const filter: WideString); -begin - DefaultInterface.Set_NotificationFilter(filter); -end; - -function TContextor.Get_Name: WideString; -begin - Result := DefaultInterface.Get_Name; -end; - -procedure TContextor.Run(const applicationLabel: WideString; const passcode: WideString; - survey: WordBool; const initialNotificationFilter: WideString); -begin - DefaultInterface.Run(applicationLabel, passcode, survey, initialNotificationFilter); -end; - -procedure TContextor.Suspend; -begin - DefaultInterface.Suspend; -end; - -procedure TContextor.Resume; -begin - DefaultInterface.Resume; -end; - -function TContextor.GetPrivilege(const subj: WideString): AccessPrivilege; -begin - Result := DefaultInterface.GetPrivilege(subj); -end; - -procedure TContextor.StartContextChange; -begin - DefaultInterface.StartContextChange; -end; - -function TContextor.EndContextChange(commit: WordBool; - const aContextItemCollection: IContextItemCollection): UserResponse; -begin - Result := DefaultInterface.EndContextChange(commit, aContextItemCollection); -end; - -procedure TContextor.SetSurveyResponse(const reason: WideString); -begin - DefaultInterface.SetSurveyResponse(reason); -end; - -{$IFDEF LIVE_SERVER_AT_DESIGN_TIME} -constructor TContextorProperties.Create(AServer: TContextor); -begin - inherited Create; - FServer := AServer; -end; - -function TContextorProperties.GetDefaultInterface: IContextor; -begin - Result := FServer.DefaultInterface; -end; - -function TContextorProperties.Get_State: ContextorState; -begin - Result := DefaultInterface.Get_State; -end; - -function TContextorProperties.Get_CurrentContext: IContextItemCollection; -begin - Result := DefaultInterface.Get_CurrentContext; -end; - -function TContextorProperties.Get_NotificationFilter: WideString; -begin - Result := DefaultInterface.Get_NotificationFilter; -end; - -procedure TContextorProperties.Set_NotificationFilter(const filter: WideString); -begin - DefaultInterface.Set_NotificationFilter(filter); -end; - -function TContextorProperties.Get_Name: WideString; -begin - Result := DefaultInterface.Get_Name; -end; - -{$ENDIF} - -procedure TContextorControl.InitControlData; -const - CEventDispIDs: array [0..2] of DWORD = ( - $00000001, $00000002, $00000003); - CControlData: TControlData2 = ( - ClassID: '{8778ACF7-5CA9-11D3-8727-0060B0B5E137}'; - EventIID: '{6BED8971-B3DD-11D3-8736-0060B0B5E137}'; - EventCount: 3; - EventDispIDs: @CEventDispIDs; - LicenseKey: nil (*HR:$80004002*); - Flags: $00000000; - Version: 401); -begin - ControlData := @CControlData; - TControlData2(CControlData).FirstEventOfs := Cardinal(@@FOnPending) - Cardinal(Self); -end; - -procedure TContextorControl.CreateControl; - - procedure DoCreate; - begin - FIntf := IUnknown(OleObject) as IContextor; - end; - -begin - if FIntf = nil then DoCreate; -end; - -function TContextorControl.GetControlInterface: IContextor; -begin - CreateControl; - Result := FIntf; -end; - -function TContextorControl.Get_CurrentContext: IContextItemCollection; -begin - Result := DefaultInterface.Get_CurrentContext; -end; - -procedure TContextorControl.Run(const applicationLabel: WideString; const passcode: WideString; - survey: WordBool; const initialNotificationFilter: WideString); -begin - DefaultInterface.Run(applicationLabel, passcode, survey, initialNotificationFilter); -end; - -procedure TContextorControl.Suspend; -begin - DefaultInterface.Suspend; -end; - -procedure TContextorControl.Resume; -begin - DefaultInterface.Resume; -end; - -function TContextorControl.GetPrivilege(const subj: WideString): AccessPrivilege; -begin - Result := DefaultInterface.GetPrivilege(subj); -end; - -procedure TContextorControl.StartContextChange; -begin - DefaultInterface.StartContextChange; -end; - -function TContextorControl.EndContextChange(commit: WordBool; - const aContextItemCollection: IContextItemCollection): UserResponse; -begin - Result := DefaultInterface.EndContextChange(commit, aContextItemCollection); -end; - -procedure TContextorControl.SetSurveyResponse(const reason: WideString); -begin - DefaultInterface.SetSurveyResponse(reason); -end; - -class function CoContextItemCollection.Create: IContextItemCollection; -begin - Result := CreateComObject(CLASS_ContextItemCollection) as IContextItemCollection; -end; - -class function CoContextItemCollection.CreateRemote(const MachineName: string): IContextItemCollection; -begin - Result := CreateRemoteComObject(MachineName, CLASS_ContextItemCollection) as IContextItemCollection; -end; - -procedure TContextItemCollection.InitServerData; -const - CServerData: TServerData = ( - ClassID: '{AC4C0272-615A-11D3-84B5-0000861FDD4F}'; - IntfIID: '{AC4C0271-615A-11D3-84B5-0000861FDD4F}'; - EventIID: ''; - LicenseKey: nil; - Version: 500); -begin - ServerData := @CServerData; -end; - -procedure TContextItemCollection.Connect; -var - punk: IUnknown; -begin - if FIntf = nil then - begin - punk := GetServer; - Fintf:= punk as IContextItemCollection; - end; -end; - -procedure TContextItemCollection.ConnectTo(svrIntf: IContextItemCollection); -begin - Disconnect; - FIntf := svrIntf; -end; - -procedure TContextItemCollection.DisConnect; -begin - if Fintf <> nil then - begin - FIntf := nil; - end; -end; - -function TContextItemCollection.GetDefaultInterface: IContextItemCollection; -begin - if FIntf = nil then - Connect; - Assert(FIntf <> nil, 'DefaultInterface is NULL. Component is not connected to Server. You must call ''Connect'' or ''ConnectTo'' before this operation'); - Result := FIntf; -end; - -constructor TContextItemCollection.Create(AOwner: TComponent); -begin - inherited Create(AOwner); -{$IFDEF LIVE_SERVER_AT_DESIGN_TIME} - FProps := TContextItemCollectionProperties.Create(Self); -{$ENDIF} -end; - -destructor TContextItemCollection.Destroy; -begin -{$IFDEF LIVE_SERVER_AT_DESIGN_TIME} - FProps.Free; -{$ENDIF} - inherited Destroy; -end; - -{$IFDEF LIVE_SERVER_AT_DESIGN_TIME} -function TContextItemCollection.GetServerProperties: TContextItemCollectionProperties; -begin - Result := FProps; -end; -{$ENDIF} - -function TContextItemCollection.Get__NewEnum: IUnknown; -begin - Result := DefaultInterface.Get__NewEnum; -end; - -function TContextItemCollection.Count: Integer; -begin - Result := DefaultInterface.Count; -end; - -procedure TContextItemCollection.Add(const aContextItem: IContextItem); -begin - DefaultInterface.Add(aContextItem); -end; - -procedure TContextItemCollection.Remove(const contextItemName: WideString); -begin - DefaultInterface.Remove(contextItemName); -end; - -procedure TContextItemCollection.RemoveAll; -begin - DefaultInterface.RemoveAll; -end; - -function TContextItemCollection.Present(key: OleVariant): IContextItem; -begin - Result := DefaultInterface.Present(key); -end; - -function TContextItemCollection.Item(key: OleVariant): IContextItem; -begin - Result := DefaultInterface.Item(key); -end; - -{$IFDEF LIVE_SERVER_AT_DESIGN_TIME} -constructor TContextItemCollectionProperties.Create(AServer: TContextItemCollection); -begin - inherited Create; - FServer := AServer; -end; - -function TContextItemCollectionProperties.GetDefaultInterface: IContextItemCollection; -begin - Result := FServer.DefaultInterface; -end; - -function TContextItemCollectionProperties.Get__NewEnum: IUnknown; -begin - Result := DefaultInterface.Get__NewEnum; -end; - -{$ENDIF} - -class function CoContextItem.Create: IContextItem; -begin - Result := CreateComObject(CLASS_ContextItem) as IContextItem; -end; - -class function CoContextItem.CreateRemote(const MachineName: string): IContextItem; -begin - Result := CreateRemoteComObject(MachineName, CLASS_ContextItem) as IContextItem; -end; - -procedure TContextItem.InitServerData; -const - CServerData: TServerData = ( - ClassID: '{AC4C0274-615A-11D3-84B5-0000861FDD4F}'; - IntfIID: '{AC4C0273-615A-11D3-84B5-0000861FDD4F}'; - EventIID: ''; - LicenseKey: nil; - Version: 500); -begin - ServerData := @CServerData; -end; - -procedure TContextItem.Connect; -var - punk: IUnknown; -begin - if FIntf = nil then - begin - punk := GetServer; - Fintf:= punk as IContextItem; - end; -end; - -procedure TContextItem.ConnectTo(svrIntf: IContextItem); -begin - Disconnect; - FIntf := svrIntf; -end; - -procedure TContextItem.DisConnect; -begin - if Fintf <> nil then - begin - FIntf := nil; - end; -end; - -function TContextItem.GetDefaultInterface: IContextItem; -begin - if FIntf = nil then - Connect; - Assert(FIntf <> nil, 'DefaultInterface is NULL. Component is not connected to Server. You must call ''Connect'' or ''ConnectTo'' before this operation'); - Result := FIntf; -end; - -constructor TContextItem.Create(AOwner: TComponent); -begin - inherited Create(AOwner); -{$IFDEF LIVE_SERVER_AT_DESIGN_TIME} - FProps := TContextItemProperties.Create(Self); -{$ENDIF} -end; - -destructor TContextItem.Destroy; -begin -{$IFDEF LIVE_SERVER_AT_DESIGN_TIME} - FProps.Free; -{$ENDIF} - inherited Destroy; -end; - -{$IFDEF LIVE_SERVER_AT_DESIGN_TIME} -function TContextItem.GetServerProperties: TContextItemProperties; -begin - Result := FProps; -end; -{$ENDIF} - -function TContextItem.Get_Subject: WideString; -begin - Result := DefaultInterface.Get_Subject; -end; - -procedure TContextItem.Set_Subject(const pVal: WideString); -begin - DefaultInterface.Set_Subject(pVal); -end; - -function TContextItem.Get_Role: WideString; -begin - Result := DefaultInterface.Get_Role; -end; - -procedure TContextItem.Set_Role(const pVal: WideString); -begin - DefaultInterface.Set_Role(pVal); -end; - -function TContextItem.Get_Prefix: WideString; -begin - Result := DefaultInterface.Get_Prefix; -end; - -procedure TContextItem.Set_Prefix(const pVal: WideString); -begin - DefaultInterface.Set_Prefix(pVal); -end; - -function TContextItem.Get_Suffix: WideString; -begin - Result := DefaultInterface.Get_Suffix; -end; - -procedure TContextItem.Set_Suffix(const pVal: WideString); -begin - DefaultInterface.Set_Suffix(pVal); -end; - -function TContextItem.Get_Name: WideString; -begin - Result := DefaultInterface.Get_Name; -end; - -procedure TContextItem.Set_Name(const pVal: WideString); -begin - DefaultInterface.Set_Name(pVal); -end; - -function TContextItem.Get_Value: WideString; -begin - Result := DefaultInterface.Get_Value; -end; - -procedure TContextItem.Set_Value(const pVal: WideString); -begin - DefaultInterface.Set_Value(pVal); -end; - -function TContextItem.Clone: IContextItem; -begin - Result := DefaultInterface.Clone; -end; - -{$IFDEF LIVE_SERVER_AT_DESIGN_TIME} -constructor TContextItemProperties.Create(AServer: TContextItem); -begin - inherited Create; - FServer := AServer; -end; - -function TContextItemProperties.GetDefaultInterface: IContextItem; -begin - Result := FServer.DefaultInterface; -end; - -function TContextItemProperties.Get_Subject: WideString; -begin - Result := DefaultInterface.Get_Subject; -end; - -procedure TContextItemProperties.Set_Subject(const pVal: WideString); -begin - DefaultInterface.Set_Subject(pVal); -end; - -function TContextItemProperties.Get_Role: WideString; -begin - Result := DefaultInterface.Get_Role; -end; - -procedure TContextItemProperties.Set_Role(const pVal: WideString); -begin - DefaultInterface.Set_Role(pVal); -end; - -function TContextItemProperties.Get_Prefix: WideString; -begin - Result := DefaultInterface.Get_Prefix; -end; - -procedure TContextItemProperties.Set_Prefix(const pVal: WideString); -begin - DefaultInterface.Set_Prefix(pVal); -end; - -function TContextItemProperties.Get_Suffix: WideString; -begin - Result := DefaultInterface.Get_Suffix; -end; - -procedure TContextItemProperties.Set_Suffix(const pVal: WideString); -begin - DefaultInterface.Set_Suffix(pVal); -end; - -function TContextItemProperties.Get_Name: WideString; -begin - Result := DefaultInterface.Get_Name; -end; - -procedure TContextItemProperties.Set_Name(const pVal: WideString); -begin - DefaultInterface.Set_Name(pVal); -end; - -function TContextItemProperties.Get_Value: WideString; -begin - Result := DefaultInterface.Get_Value; -end; - -procedure TContextItemProperties.Set_Value(const pVal: WideString); -begin - DefaultInterface.Set_Value(pVal); -end; - -{$ENDIF} - -class function CoResponseDialog.Create: IResponseDialog; -begin - Result := CreateComObject(CLASS_ResponseDialog) as IResponseDialog; -end; - -class function CoResponseDialog.CreateRemote(const MachineName: string): IResponseDialog; -begin - Result := CreateRemoteComObject(MachineName, CLASS_ResponseDialog) as IResponseDialog; -end; - -procedure TResponseDialog.InitServerData; -const - CServerData: TServerData = ( - ClassID: '{9D33ECF2-8277-11D3-8525-0000861FDD4F}'; - IntfIID: '{9D33ECF1-8277-11D3-8525-0000861FDD4F}'; - EventIID: ''; - LicenseKey: nil; - Version: 500); -begin - ServerData := @CServerData; -end; - -procedure TResponseDialog.Connect; -var - punk: IUnknown; -begin - if FIntf = nil then - begin - punk := GetServer; - Fintf:= punk as IResponseDialog; - end; -end; - -procedure TResponseDialog.ConnectTo(svrIntf: IResponseDialog); -begin - Disconnect; - FIntf := svrIntf; -end; - -procedure TResponseDialog.DisConnect; -begin - if Fintf <> nil then - begin - FIntf := nil; - end; -end; - -function TResponseDialog.GetDefaultInterface: IResponseDialog; -begin - if FIntf = nil then - Connect; - Assert(FIntf <> nil, 'DefaultInterface is NULL. Component is not connected to Server. You must call ''Connect'' or ''ConnectTo'' before this operation'); - Result := FIntf; -end; - -constructor TResponseDialog.Create(AOwner: TComponent); -begin - inherited Create(AOwner); -{$IFDEF LIVE_SERVER_AT_DESIGN_TIME} - FProps := TResponseDialogProperties.Create(Self); -{$ENDIF} -end; - -destructor TResponseDialog.Destroy; -begin -{$IFDEF LIVE_SERVER_AT_DESIGN_TIME} - FProps.Free; -{$ENDIF} - inherited Destroy; -end; - -{$IFDEF LIVE_SERVER_AT_DESIGN_TIME} -function TResponseDialog.GetServerProperties: TResponseDialogProperties; -begin - Result := FProps; -end; -{$ENDIF} - -function TResponseDialog.ProcessSurveyResults(responses: OleVariant; noContinue: WordBool): UserResponse; -begin - Result := DefaultInterface.ProcessSurveyResults(responses, noContinue); -end; - -{$IFDEF LIVE_SERVER_AT_DESIGN_TIME} -constructor TResponseDialogProperties.Create(AServer: TResponseDialog); -begin - inherited Create; - FServer := AServer; -end; - -function TResponseDialogProperties.GetDefaultInterface: IResponseDialog; -begin - Result := FServer.DefaultInterface; -end; - -{$ENDIF} - -class function CoContextorParticipant.Create: IContextParticipant; -begin - Result := CreateComObject(CLASS_ContextorParticipant) as IContextParticipant; -end; - -class function CoContextorParticipant.CreateRemote(const MachineName: string): IContextParticipant; -begin - Result := CreateRemoteComObject(MachineName, CLASS_ContextorParticipant) as IContextParticipant; -end; - -procedure TContextorParticipant.InitServerData; -const - CServerData: TServerData = ( - ClassID: '{4BA034A2-D0FA-11D3-818B-0050049598B2}'; - IntfIID: '{3E3DD272-998E-11D0-808D-00A0240943E4}'; - EventIID: ''; - LicenseKey: nil; - Version: 500); -begin - ServerData := @CServerData; -end; - -procedure TContextorParticipant.Connect; -var - punk: IUnknown; -begin - if FIntf = nil then - begin - punk := GetServer; - Fintf:= punk as IContextParticipant; - end; -end; - -procedure TContextorParticipant.ConnectTo(svrIntf: IContextParticipant); -begin - Disconnect; - FIntf := svrIntf; -end; - -procedure TContextorParticipant.DisConnect; -begin - if Fintf <> nil then - begin - FIntf := nil; - end; -end; - -function TContextorParticipant.GetDefaultInterface: IContextParticipant; -begin - if FIntf = nil then - Connect; - Assert(FIntf <> nil, 'DefaultInterface is NULL. Component is not connected to Server. You must call ''Connect'' or ''ConnectTo'' before this operation'); - Result := FIntf; -end; - -constructor TContextorParticipant.Create(AOwner: TComponent); -begin - inherited Create(AOwner); -{$IFDEF LIVE_SERVER_AT_DESIGN_TIME} - FProps := TContextorParticipantProperties.Create(Self); -{$ENDIF} -end; - -destructor TContextorParticipant.Destroy; -begin -{$IFDEF LIVE_SERVER_AT_DESIGN_TIME} - FProps.Free; -{$ENDIF} - inherited Destroy; -end; - -{$IFDEF LIVE_SERVER_AT_DESIGN_TIME} -function TContextorParticipant.GetServerProperties: TContextorParticipantProperties; -begin - Result := FProps; -end; -{$ENDIF} - -function TContextorParticipant.ContextChangesPending(contextCoupon: Integer; var reason: WideString): WideString; -begin - Result := DefaultInterface.ContextChangesPending(contextCoupon, reason); -end; - -procedure TContextorParticipant.ContextChangesAccepted(contextCoupon: Integer); -begin - DefaultInterface.ContextChangesAccepted(contextCoupon); -end; - -procedure TContextorParticipant.ContextChangesCanceled(contextCoupon: Integer); -begin - DefaultInterface.ContextChangesCanceled(contextCoupon); -end; - -procedure TContextorParticipant.CommonContextTerminated; -begin - DefaultInterface.CommonContextTerminated; -end; - -procedure TContextorParticipant.Ping; -begin - DefaultInterface.Ping; -end; - -{$IFDEF LIVE_SERVER_AT_DESIGN_TIME} -constructor TContextorParticipantProperties.Create(AServer: TContextorParticipant); -begin - inherited Create; - FServer := AServer; -end; - -function TContextorParticipantProperties.GetDefaultInterface: IContextParticipant; -begin - Result := FServer.DefaultInterface; -end; - -{$ENDIF} -{ -procedure Register; -begin - RegisterComponents('Kernel',[TContextorControl]); - RegisterComponents('Kernel',[TContextor, TContextItemCollection, TContextItem, TResponseDialog, - TContextorParticipant]); -end; -} -end. diff --git a/BDK32/Source/VergenceContextor.dll b/BDK32/Source/VergenceContextor.dll deleted file mode 100644 index d7da147..0000000 Binary files a/BDK32/Source/VergenceContextor.dll and /dev/null differ diff --git a/BDK32/Source/Wsockc.pas b/BDK32/Source/Wsockc.pas deleted file mode 100644 index a936237..0000000 --- a/BDK32/Source/Wsockc.pas +++ /dev/null @@ -1,1585 +0,0 @@ -{ ************************************************************** - Package: XWB - Kernel RPCBroker - Date Created: Sept 18, 1997 (Version 1.1) - Site Name: Oakland, OI Field Office, Dept of Veteran Affairs - Developers: Danila Manapsal, Don Craven, Joel Ivey - Description: manages Winsock connections and creates/parses - messages - Current Release: Version 1.1 Patch 40 (Sept. 22, 2004) -*************************************************************** } - -unit Wsockc; -{ - Changes in v1.1.13 (JLI -- 8/23/00) -- XWB*1.1*13 - Made changes to cursor dependent on current cursor being crDefault so - that the application can set it to a different cursor for long or - repeated processes without the cursor 'flashing' repeatedly. - - Changes in v1.1.8 (REM -- 6/18/99) -- XWB*1.1*8 - Update version 'BrokerVer'. - - Changes in v1.1.6 (DPC -- 6/7/99) -- XWB*1.1*6 - In tCall function, made changing cursor to hourglass conditional: - don't do it if XWB IM HERE RPC is being invoked. - - Changes in V1.1.4 (DCM - 9/18/98)-XWB*1.1*4 - 1. Changed the ff line in NetStart from: - if inet_addr(PChar(Server)) <> INADDR_NONE then - to - if inet_addr(PChar(Server)) <> longint(INADDR_NONE) then - Reason: true 64 bit types in Delphi 4 - 2. Changed the ff line in NetStart from: - $else - hSocket := accept(hSocketListen, DHCPHost, AddrLen);{ -- returns new socket - to - $else - hSocket := accept(hSocketListen, @DHCPHost, @AddrLen);{ -- returns new socket - Reason: Incompatible types when recompiling - 3. In NetStop, if socket <= 0, restore the default cursor. - Reason: Gave the impression of a busy process after the Kernel login - process timesout. - - Changes in V1.1T3 [Feb 5, 1997] - 1. Connect string now includes workstation name. This is used by kernel - security. - 2. Code is 32bit compliant for Delphi 2.0 - 3. A great majority of PChars changed to default string (ansi-string) - 4. Reading is done in 32k chunks during a loop. Intermediate data is - buffered into a string. At the end, a PChar is allocated and - returned to maintain compatibility with the original broker interface. - It is expected that shortly this will change once the broker component - changes its usage of tcall to expect a string return. Total read - can now exceed 32K up to workstation OS limits. - 5. Creation of Hostent and Address structures has been streamlined. - - Changes in V1.0T12 - 1. Inclusion of hSocket as a parameter on most API calls - - - Changes in V1.0T11 - 1. Reference parameter type is included. i.e. $J will be evaluated rather - than sending "$J". - 2. Fully integrated with the TRPCB component interface. - 3. This low level module is now called from an intermediate DLL. - - Changes in V1.0T10 - 1. Fixed various memory leaks. - - Changes in V1.0T9 - 1. Supports word processing fields. - 2. Added a new exception type EBrokerError. This is raised when errors occur - in NetCall, NetworkConnect, and NetworkDisconnect - - Changes in V1.0T8 - 1. Fix a problem in BuildPar in the case of a single list parameter with many - entries. - 2. List parameters (arrays) can be large up to 65520 bytes - 3. Introduction of sCallV and tCallV which use the Delphi Pascal open array - syntax (sCallFV and tCallV developed by Kevin Meldrum) - 4. A new brokerDataRec type, null has been introduced to represent M calls - with no parameters, i.e. D FUN^LIB(). - 5. If you want to send a null parameter "", i.e. D FUN^LIB(""), Value - should be set to ''. - 6. Fixed bug where a single ^ passed to sCall would generate error (confused - as a global reference. - 7. Fixed a bug where a first position dot (.) in a literal parameter would - cause an error at the server end. - 8. Fixed a bug where null strings (as white space in a memo box for example) - would not be correctly received at the server. - - Changes in V1.0T7 - 1. Procedure NetworkConnect has been changed to Function NetworkConnect - returning BOOL - 2. global variable IsConnected (BOOL) can be used to determine connection - state - 3. Function cRight has been fixed to preserve head pointer to input PChar - string - 4. New message format which includes length calculations for input parameters - - ******************************************************************* - A 32-bit high level interface to the Winsock API in Delphi Pascal. - - This implementation allows communications between Delphi forms and - DHCP back end servers through the use of the DHCP Request Broker. - - Usage: Put wsock in your Uses clause of your Delphi form. See additional - specs for Request Broker message formats, etc. - Programmer: Enrique Gomez - VA San Francisco ISC - April 1995 -} - - -interface - -Uses -SysUtils, winsock, xwbut1, WinProcs, Wintypes, -classes, dialogs, forms, controls, -stdctrls, ClipBrd, Trpcb, RpcbErr; - -type - TXWBWinsock = class(TObject) - private - FCountWidth: Integer; - FIsBackwardsCompatible: Boolean; - FOldConnectionOnly: Boolean; - public - XNetCallPending, xFlush: boolean; - SocketError, XHookTimeOut: integer; - XNetTimerStart: TDateTime; - BROKERSERVER: string; - SecuritySegment, ApplicationSegment: string; - IsConnected: Boolean; -// NetBlockingHookVar: Function(): Bool; export; - function NetCall(hSocket: integer; imsg: string): PChar; - function tCall(hSocket: integer; api, apVer: String; Parameters: TParams; - var Sec, App: PChar; TimeOut: integer): PChar; - function cRight( z: PChar; n: longint): PChar; - function cLeft( z: PChar; n: longint): PChar; - function BuildApi ( n,p: string; f: longint): string; - function BuildHdr ( wkid: string; winh: string; prch: string; - wish: string): string; - function BuildPar(hSocket: integer; api, RPCVer: string; - const Parameters: TParams): string; - function StrPack ( n: string; p: integer): string; - function VarPack(n: string): string; - function NetStart(ForegroundM: boolean; Server: string; ListenerPort: integer; - var hSocket: integer): integer; - function NetworkConnect(ForegroundM: boolean; Server: string; ListenerPort, - TimeOut: integer): Integer; - function libSynGetHostIP(s: string): string; - function libNetCreate (lpWSData : TWSAData) : integer; - function libNetDestroy: integer; - function GetServerPacket(hSocket: integer): string; -// function NetBlockingHook: BOOL; export; - - procedure NetworkDisconnect(hSocket: integer); - procedure NetStop(hSocket: integer); - procedure CloseSockSystem(hSocket: integer; s: string); - constructor Create; - - procedure NetError(Action: string; ErrType: integer); -function NetStart1(ForegroundM: boolean; Server: string; ListenerPort: integer; - var hSocket: integer): Integer; virtual; - function BuildPar1(hSocket: integer; api, RPCVer: string; const Parameters: - TParams): String; virtual; - property CountWidth: Integer read FCountWidth write FCountWidth; - property IsBackwardsCompatible: Boolean read FIsBackwardsCompatible write - FIsBackwardsCompatible; - property OldConnectionOnly: Boolean read FOldConnectionOnly write - FOldConnectionOnly; - end; - -function LPack(Str: String; NDigits: Integer): String; - -function SPack(Str: String): String; - -function NetBlockingHook: BOOL; export; - -var - HookTimeOut: Integer; - NetCallPending: Boolean; - NetTimerStart: TDateTime; - -Const - WINSOCK1_1 = $0101; - DHCP_NAME = 'BROKERSERVER'; - M_DEBUG = True; - M_NORMAL = False; - BrokerVer = '1.108'; - Buffer64K = 65520; - Buffer32K = 32767; - Buffer24K = 24576; - Buffer16K = 16384; - Buffer8K = 8192; - Buffer4K = 4096; - DefBuffer = 256; - DebugOn: boolean = False; - XWBBASEERR = {WSABASEERR + 1} 20000; - -{Broker Application Error Constants} - XWB_NO_HEAP = XWBBASEERR + 1; - XWB_M_REJECT = XWBBASEERR + 2; - XWB_BadSignOn = XWBBASEERR + 4; - XWB_BadReads = XWBBASEERR + 8; - XWB_ExeNoMem = XWBBASEERR + 100; - XWB_ExeNoFile = XWB_ExeNoMem + 2; - XWB_ExeNoPath = XWB_ExeNoMem + 3; - XWB_ExeShare = XWB_ExeNoMem + 5; - XWB_ExeSepSeg = XWB_ExeNoMem + 6; - XWB_ExeLoMem = XWB_ExeNoMem + 8; - XWB_ExeWinVer = XWB_ExeNoMem + 10; - XWB_ExeBadExe = XWB_ExeNoMem + 11; - XWB_ExeDifOS = XWB_ExeNoMem + 12; - XWB_RpcNotReg = XWBBASEERR + 201; - -implementation - - uses fDebugInfo; {P36} //, TRPCB; - -var - Prefix: String; - -{ - function LPack - Prepends the length of the string in NDigits characters to the value of Str - - e.g., LPack('DataValue',4) - returns '0009DataValue' -} -function LPack(Str: String; NDigits: Integer): String; -Var - r: Integer; - t: String; - Width: Integer; - Ex1: Exception; -begin - r := Length(Str); - // check for enough space in NDigits characters - t := IntToStr(r); - Width := Length(t); - if NDigits < Width then - begin - Ex1 := Exception.Create('In generation of message to server, call to LPack where Length of string of '+IntToStr(Width)+' chars exceeds number of chars for output length ('+IntToStr(NDigits)+')'); - Raise Ex1; - end; - t := '000000000' + IntToStr(r); {eg 11-1-96} - Result := Copy(t, length(t)-(NDigits-1),length(t)) + Str; -end; - -{ - function SPack - Prepends the length of the string in one byte to the value of Str, thus Str must be less than 256 characters. - - e.g., SPack('DataValue') - returns #9 + 'DataValue' -} -function SPack(Str: String): String; -Var - r: Integer; - Ex1: Exception; -begin - r := Length(Str); - // check for enough space in one byte - if r > 255 then - begin - Ex1 := Exception.Create('In generation of message to server, call to SPack with Length of string of '+IntToStr(r)+' chars which exceeds max of 255 chars'); - Raise Ex1; - end; -// t := Byte(r); - Result := Char(r) + Str; -end; - - -function TXWBWinsock.libNetCreate (lpWSData : TWSAData) : integer; -begin - Result := WSAStartup(WINSOCK1_1, lpWSData); {hard coded for Winsock - version 1.1} -end; - -function TXWBWinsock.libNetDestroy :integer; -begin - WSAUnhookBlockingHook; { -- restore the default mechanism}; - WSACleanup; { -- shutdown TCP API}; - Result := 1; -end; - -function TXWBWinsock.libSynGetHostIP(s: string): string; -var - HostName: PChar; - HostAddr: TSockAddr; - TCPResult: PHostEnt; - test: longint; - ChangeCursor: Boolean; -begin - { -- set up a hook for blocking calls so there is no automatic DoEvents - in the background } - xFlush := False; - NetTimerStart := Now; - NetCallPending := True; - HookTimeOut := XHookTimeOut; - WSASetBlockingHook(@NetBlockingHook); - - if Screen.Cursor = crDefault then - ChangeCursor := True - else - ChangeCursor := False; - if ChangeCursor then - Screen.Cursor := crHourGlass; - HostName := StrNew(PChar(s)); - test := inet_addr(HostName); - if test > INADDR_ANY then - begin - Result := s; - StrDispose(Hostname); - if ChangeCursor then - Screen.Cursor := crDefault; - exit; - end; - - try - begin - TCPResult := gethostbyname(HostName); - if TCPResult = nil then - begin - if ChangeCursor then - Screen.Cursor := crDefault; - WSAUnhookBlockingHook; - Result := ''; - StrDispose(HostName); - exit; - end; - - HostAddr.sin_addr.S_addr := longint(plongint(TCPResult^.h_addr_list^)^); - - end; - except on EInvalidPointer do - begin - Result := ''; - Screen.Cursor := crDefault; - StrDispose(HostName); - exit; - end; - end; - if ChangeCursor then - Screen.Cursor := crDefault; - WSAUnhookBlockingHook; - Result := StrPas(inet_ntoa(HostAddr.sin_addr)); - StrDispose(HostName); -end; - -function TXWBWinsock.cRight; -var - i,t: longint; -begin - t := strlen(z); - if n < t then - begin - for i := 0 to n do - z[i] := z[t-n+i]; - z[n] := chr(0); - end; - cRight := z; -end; - -function TXWBWinsock.cLeft; -var - t: longint; -begin - t := strlen(z); - if n > t then n := t; - z[n] := chr(0); - cLeft := z; -end; - -function TXWBWinsock.BuildApi ( n,p: string; f: longint): string; -Var - x,s: string; -begin - str(f,x); - s := StrPack(p,5); - result := StrPack(x + n + '^' + s,5); -end; - -function TXWBWinsock.NetworkConnect(ForegroundM: boolean; Server: string; - ListenerPort, TimeOut: integer): Integer; -var - status: integer; - hSocket: integer; - BrokerError: EBrokerError; -begin - Prefix := '[XWB]'; - xFlush := False; - IsConnected := False; - XHookTimeOut := TimeOut; - if not OldConnectionOnly then - try - status := NetStart(ForeGroundM, server, ListenerPort, hSocket); - except - on E: EBrokerError do - begin - if IsBackwardsCompatible then // remove DSM specific error message, and just go with any error - begin - status := NetStart1(ForeGroundM, server, ListenerPort, hSocket); - end - else if ((Pos('connection lost',E.Message) > 0) // DSM - or ((Pos('recv',E.Message) > 0) and (Pos('WSAECONNRESET',E.Message) > 0))) then // Cache - begin - BrokerError := EBrokerError.Create('Broker requires a UCX or single connection protocol and this port uses the callback protocol.'+' The application is specified to be non-backwards compatible. Installing patch XWB*1.1*35 and activating this port number for UCX connections will correct the problem.'); - raise BrokerError; - end - else - raise; - end; - end - else // OldConnectionOnly - status := NetStart1(ForeGroundM, server, ListenerPort, hSocket); - - if status = 0 then IsConnected := True; - Result := hSocket; {return the newly established socket} -end; - -procedure TXWBWinsock.NetworkDisconnect(hSocket: integer); -begin - xFlush := False; - if IsConnected then - try - NetStop(hSocket); - except on EBrokerError do - begin - SocketError := WSAUnhookBlockingHook; { -- rest deflt mechanism} - SocketError := WSACleanup; { -- shutdown TCP API} - end; - end; - -end; - -function TXWBWinsock.BuildHdr ( wkid: string; winh: string; prch: string; - wish: string): string; -Var - t: string; -begin - t := wkid + ';' + winh + ';' + prch + ';' + wish + ';'; - Result := StrPack(t,3); -end; - -function TXWBWinsock.BuildPar(hSocket: integer; api, RPCVer: string; - const Parameters: TParams): string; -var - i,ParamCount: integer; - param: string; - tResult: string; - subscript: string; - IsSeen: Boolean; - BrokerError: EBrokerError; - Str: String; -begin - param := '5'; - if Parameters = nil then ParamCount := 0 - else ParamCount := Parameters.Count; - for i := 0 to ParamCount - 1 do - begin - if Parameters[i].PType <> undefined then - begin - // Make sure that new parameter types are only used with non-callback server. - if IsBackwardsCompatible and ((Parameters[i].PType = global) or (Parameters[i].PType = empty) or (Parameters[i].PType = stream)) then - begin - if Parameters[i].PType = global then - Str := 'global' - else if Parameters[i].PType = empty then - Str := 'empty' - else - Str := 'stream'; - BrokerError := EBrokerError.Create('Use of ' + Str + ' parameter type requires setting the TRPCBroker IsBackwardsCompatible property to FALSE'); - raise BrokerError; - end; - with Parameters[i] do - begin -// if PType= null then -// param:=''; - - if PType = literal then - param := param + '0'+LPack(Value,CountWidth)+'f'; // 030107 new message protocol - - if PType = reference then - param := param + '1'+LPack(Value,CountWidth)+'f'; // 030107 new message protocol - - if PType = empty then - param := param + '4f'; - - if (PType = list) or (PType = global) then - begin - if PType = list then // 030107 new message protocol - param := param + '2' - else - param := param + '3'; - IsSeen := False; - subscript := Mult.First; - while subscript <> '' do - begin - if IsSeen then - param := param + 't'; - if Mult[subscript] = '' then - Mult[subscript] := #1; - param := param + LPack(subscript,CountWidth)+LPack(Mult[subscript],CountWidth); - IsSeen := True; - subscript := Mult.Order(subscript,1); - end; // while subscript <> '' - if not IsSeen then // 040922 added to take care of list/global parameters with no values - param := param + LPack('',CountWidth); - param := param + 'f'; - end; - if PType = stream then - begin - param := param + '5' + LPack(Value,CountWidth) + 'f'; - end; - end; // with Parameters[i] do - end; // if Parameters[i].PType <> undefined - end; // for i := 0 - if param = '5' then - param := param + '4f'; - - tresult := Prefix + '11' + IntToStr(CountWidth) + '0' + '2' + SPack(RPCVer) + SPack(api) + param + #4; - -// Application.ProcessMessages; // removed 040716 jli not needed and may impact some programs - - Result := tresult; -end; -{ // previous message protocol - sin := TStringList.Create; - sin.clear; - x := ''; - param := ''; - arr := 0; - if Parameters = nil then ParamCount := 0 - else ParamCount := Parameters.Count; - for i := 0 to ParamCount - 1 do - if Parameters[i].PType <> undefined then begin - with Parameters[i] do begin - -// if PType= null then -// param:=''; - - if PType = literal then - param := param + strpack('0' + Value,3); - if PType = reference then - param := param + strpack('1' + Value,3); - if (PType = list) or (PType = global) then begin - Value := '.x'; - param := param + strpack('2' + Value,3); - if Pos('.',Value) >0 then - x := Copy(Value,2,length(Value)); -// if PType = wordproc then dec(last); - subscript := Mult.First; - while subscript <> '' do begin - if Mult[subscript] = '' then Mult[subscript] := #1; - sin.Add(StrPack(subscript,3) + StrPack(Mult[subscript],3)); - subscript := Mult.Order(subscript,1); - end; // while - sin.Add('000'); - arr := 1; - end; // if - end; // with - end; // if - -param := Copy(param,1,Length(param)); -tsize := 0; - -tResult := ''; -tout := ''; - -hdr := BuildHdr('XWB','','',''); -strout := strpack(hdr + BuildApi(api,param,arr),5); -num :=0; - -RPCVersion := ''; -RPCVersion := VarPack(RPCVer); - -if sin.Count-1 > 0 then num := sin.Count-1; - -if num > 0 then - begin - for i := 0 to num do - tsize := tsize + length(sin.strings[i]); - x := '00000' + IntToStr(tsize + length(strout)+ length(RPCVersion)); - end; -if num = 0 then - begin - x := '00000' + IntToStr(length(strout)+ length(RPCVersion)); - end; - -psize := x; -psize := Copy(psize,length(psize)-5,5); -tResult := psize; -tResult := ConCat(tResult, RPCVersion); -tout := strout; -tResult := ConCat(tResult, tout); - -if num > 0 then - begin - for i := 0 to num do - tResult := ConCat(tResult, sin.strings[i]); - end; - -sin.free; - -frmBrokerExample.Edit1.Text := tResult; - -Result := tResult; // return result -end; -} - -function TXWBWinsock.StrPack(n: string; p: integer): String; -Var - s,l: integer; - t,x,zero: shortstring; - y: string; -begin - - s := Length(n); - fillchar(zero,p+1, '0'); - SetLength(zero, p); - str(s,x); - t := zero + x; - l := length(x)+1; - y := Copy(t, l , p); - y := y + n; - Result := y; -end; - -function TXWBWinsock.VarPack(n: string): string; -var - s: integer; -begin - if n = '' then - n := '0'; - s := Length(n); - SetLength(Result, s+2); - Result := '|' + chr(s) + n; -end; - -const - OneSecond = 0.000011574; - -function NetBlockingHook: BOOL; -var - TimeOut: double; - //TimeOut = 30 * OneSecond; - -begin - if HookTimeOut > 0 then - TimeOut := HookTimeOut * OneSecond - else - TimeOut := OneSecond / 20; - Result := False; - if NetCallPending then - if Now > (NetTimerStart + TimeOut) then WSACancelBlockingCall; -end; - -function TXWBWinsock.NetCall(hSocket: integer; imsg: string): PChar; -var - BufSend, BufRecv, BufPtr: PChar; - sBuf: string; - OldTimeOut: integer; - BytesRead, BytesLeft, BytesTotal: longint; - TryNumber: Integer; - BadXfer: Boolean; - xString: String; -begin - - { -- clear receive buffer prior to sending rpc } - if xFlush = True then begin - OldTimeOut := HookTimeOut; - HookTimeOut := 0; - WSASetBlockingHook(@NetBlockingHook); - NetCallPending := True; - BufRecv := StrAlloc(Buffer32k); - NetTimerStart := Now; - BytesRead := recv(hSocket, BufRecv^, Buffer32k, 0); - if BytesRead > 0 then - while BufRecv[BytesRead-1] <> #4 do begin - BytesRead := recv(hSocket, BufRecv^, Buffer32k, 0); - end; - StrDispose(BufRecv); - xFlush := False; - //Buf := nil; //P14 - HookTimeOut := OldTimeOut; - end; - { -- provide variables for blocking hook } - - TryNumber := 0; - BadXfer := True; - - - { -- send message length + message to server } - - //BytesTotal := length(Prefix) + length(imsg) + 1 // p14 - //Buf := StrAlloc(BytesTotal); - //Buf[0] := #0; - - if Prefix = '[XWB]' then - BufSend := StrNew(PChar({Prefix +} imsg)) //; //moved in P14 - else - BufSend := StrNew(PChar({Prefix +} imsg)); - BufRecv := StrAlloc(Buffer32k); - Result := PChar(''); -// try - while BadXfer and (TryNumber < 4) do - begin - NetCallPending := True; - NetTimerStart := Now; - TryNumber := TryNumber + 1; - BadXfer := False; - {Clipboard.SetTextBuf(buf); - ShowMessage('In Clipboard');} - SocketError := send(hSocket, BufSend^, StrLen(BufSend), 0); - if SocketError = SOCKET_ERROR then - NetError('send', 0); -{ - finally - StrDispose(Buf); - //Buf := nil; //P14 - end; -} - BufRecv[0] := #0; - try - BufPtr := BufRecv; - BytesLeft := Buffer32k; - BytesTotal := 0; - - {Get Security and Application packets} - SecuritySegment := GetServerPacket(hSocket); - ApplicationSegment := GetServerPacket(hSocket); - sBuf := ''; - { -- loop reading TCP buffer until server is finished sending reply } - - repeat - BytesRead := recv(hSocket, BufPtr^, BytesLeft, 0); - - if BytesRead > 0 then begin - if BufPtr[BytesRead-1] = #4 then - begin - sBuf := ConCat(sBuf, BufPtr); - end - else - begin - BufPtr[BytesRead] := #0; - sBuf := ConCat(sBuf, BufPtr); - end; - Inc(BytesTotal, BytesRead); - end; - - if BytesRead <= 0 then - begin - if BytesRead = SOCKET_ERROR then - NetError('recv', 0) - else - NetError('connection lost', 0); - break; - end; - until BufPtr[BytesRead-1] = #4; - sBuf := Copy(sBuf, 1, BytesTotal - 1); - StrDispose(BufRecv); - BufRecv := StrAlloc(BytesTotal+1); // cause of many memory leaks - StrCopy(BufRecv, PChar(sBuf)); - Result := BufRecv; - if ApplicationSegment = 'U411' then - BadXfer := True; - NetCallPending := False; - finally - sBuf := ''; - end; - end; - - if BadXfer then - begin - StrDispose(BufRecv); - NetError(StrPas('Repeated Incomplete Reads on the server'), XWB_BadReads); - Result := StrNew(''); - end; - - { -- if there was on error on the server, display the error code } - - if Result[0] = #24 then - begin - xString := StrPas(@Result[1]); - StrDispose(BufRecv); - NetError(xString, XWB_M_REJECT); -// NetCall := #0; - Result := StrNew(''); - end; -end; - -function TXWBWinsock.tCall(hSocket: integer; api, apVer: String; Parameters: TParams; - var Sec , App: PChar; TimeOut: integer ): PChar; -var - tmp: string; - ChangeCursor: Boolean; -begin - HookTimeOut := TimeOut; - if (string(Api) <> 'XWB IM HERE') and (Screen.Cursor = crDefault) then - ChangeCursor := True - else - ChangeCursor := False; - if ChangeCursor then - Screen.Cursor := crHourGlass; //P6 - - if Prefix = '[XWB]' then - tmp := BuildPar(hSocket, api, apVer, Parameters) - else - tmp := BuildPar1(hSocket, api, apVer, Parameters); - -// xFlush := True; // Have it clear input buffers prior to call - Result := NetCall(hSocket, tmp); - StrPCopy(Sec, SecuritySegment); - StrPCopy(App, ApplicationSegment); - if ChangeCursor then - Screen.Cursor := crDefault; -end; - - -function TXWBWinsock.NetStart (ForegroundM: boolean; Server: string; - ListenerPort: integer; var hSocket: integer): integer; -Var - WinSockData: TWSADATA; - LocalHost, DHCPHost: TSockAddr; - LocalName, workstation, pDHCPName: string; - y, tmp, upArrow, rAccept, rLost: string; - tmpPchar: PChar; - pLocalname: array [0..255] of char; - r: integer; - HostBuf,DHCPBuf: PHostEnt; - lin: TLinger; - s_lin: array [0..3] of char absolute lin; - ChangeCursor: Boolean; -begin -{ ForegroundM is a boolean value, TRUE means the M handling process is - running interactively a pointer rather than passing address length - by value) } - - { -- initialize Windows Sockets API for this task } - if Screen.Cursor = crDefault then - ChangeCursor := True - else - ChangeCursor := False; - if ChangeCursor then - Screen.Cursor := crHourGlass; - upArrow := string('^'); - rAccept := string('accept'); - rLost := string('(connection lost)'); - - SocketError := WSAStartup(WINSOCK1_1, WinSockData); - If SocketError >0 Then - NetError( 'WSAStartup',0); - - { -- set up a hook for blocking calls so there is no automatic DoEvents - in the background } - NetCallPending := False; - if ForeGroundM = False then if WSASetBlockingHook(@NetBlockingHook) = nil - then NetError('WSASetBlockingHook',0); - - { -- establish HostEnt and Address structure for local machine} - SocketError := gethostname(pLocalName, 255); { -- name of local system} - If SocketError >0 Then - NetError ('gethostname (local)',0); - HostBuf := gethostbyname(pLocalName); { -- info for local name} - If HostBuf = nil Then - NetError( 'gethostbyname',0); - LocalHost.sin_addr.S_addr := longint(plongint(HostBuf^.h_addr_list^)^); - LocalName := inet_ntoa(LocalHost.sin_addr); - workstation := string(HostBuf.h_name); - - { -- establish HostEnt and Address structure for remote machine } - if inet_addr(PChar(Server)) <> longint(INADDR_NONE) then - begin - DHCPHost.sin_addr.S_addr := inet_addr(PChar(Server)); - DHCPBuf := gethostbyaddr(@DHCPHost.sin_addr.S_addr,sizeof(DHCPHost),PF_INET); - end - else - DHCPBuf := gethostbyname(PChar(Server)); { -- info for DHCP system} - - If DHCPBuf = nil Then - begin - { modification to take care of problems with 10-dot addresses that weren't registered - solution found by Shawn Hardenbrook } -// NetError ('Error Identifying Remote Host ' + Server,0); -// NetStart := 10001; -// exit; - DHCPHost.sin_addr.S_addr := inet_addr(PChar(Server)); - pDHCPName := 'UNKNOWN'; - end - else - begin; - DHCPHost.sin_addr.S_addr := longint(plongint(DHCPBuf^.h_addr_list^)^); - pDHCPName := inet_ntoa(DHCPHost.sin_addr); - end; - DHCPHost.sin_family := PF_INET; { -- internet address type} - DHCPHost.sin_port := htons(ListenerPort); { -- port to connect to} - - { -- make connection to DHCP } - hSocket := socket(PF_INET, SOCK_STREAM, IPPROTO_TCP); - If hSocket = INVALID_SOCKET Then - NetError( 'socket',0); - - SocketError := connect(hSocket, DHCPHost, SizeOf(DHCPHost)); - If SocketError = SOCKET_ERROR Then - NetError( 'connect',0); - HookTimeOut := 30; - - { -- remove setup of hSocketListen - -// establish local IP now that connection is done - AddrLen := SizeOf(LocalHost); - SocketError := getsockname(hSocket, LocalHost, AddrLen); - if SocketError = SOCKET_ERROR then - NetError ('getsockname',0); - LocalName := inet_ntoa(LocalHost.sin_addr); - -// -- set up listening socket for DHCP return connect - hSocketListen := socket(PF_INET, SOCK_STREAM, IPPROTO_TCP); // -- new socket - If hSocketListen = INVALID_SOCKET Then - NetError ('socket (listening)',0); - - LocalHost.sin_family := PF_INET; // -- internet address type - LocalHost.sin_port := 0; // -- local listening port - SocketError := bind(hSocketListen, LocalHost, - SizeOf(LocalHost)); // -- bind socket to address - If SocketError = SOCKET_ERROR Then - NetError( 'bind',0); - - AddrLen := sizeof(LocalHost); - SocketError := getsockname(hSocketListen, LocalHost, - AddrLen); // -- get listening port # - If SocketError = SOCKET_ERROR Then - NetError( 'getsockname',0); - LocalPort := ntohs(LocalHost.sin_port); // -- put in proper byte order - - SocketError := listen(hSocketListen, 1); // -- put socket in listen mode - If SocketError = SOCKET_ERROR Then - NetError( 'listen',0); -} - { -- send IP address + port + workstation name and wait for OK : eg 1-30-97} -{ - RPCVersion := VarPack(BrokerVer); // eg 11-1-96 - x := string('TCPconnect^'); - x := ConCat(x, LocalName, upArrow); // local ip address - t := IntToStr(LocalPort); // callback port - x := ConCat(x, t, upArrow, workstation, upArrow); // workstation name - r := length(x) + length(RPCVersion) + 5; - t := string('00000') + IntToStr(r); // eg 11-1-96 - y := Copy(t, length(t)-4,length(t)); - y := ConCat(y, RPCVersion, StrPack(x,5)); // rpc version -} - { new protocol 030107 } - -// y := '[XWB]10' +IntToStr(CountWidth)+ '0' + '4'+#$A+'TCPConnect50'+ LPack(LocalName,CountWidth)+'f0'+LPack(IntToStr(LocalPort),CountWidth)+'f0'+LPack(workstation,CountWidth)+'f'+#4; - y := Prefix + '10' +IntToStr(CountWidth)+ '0' + '4'+#$A +'TCPConnect50'+ LPack(LocalName,CountWidth)+'f0'+LPack(IntToStr(0),CountWidth)+'f0'+LPack(workstation,CountWidth)+'f'+#4; - -{ // need to remove selecting port etc from client, since it will now be handled on the server P36 - - if ForeGroundM = True then - begin - if ChangeCursor then - Screen.Cursor := crDefault; - t := 'Start M job D EN^XWBTCP' + #13 + #10 + 'Addr = ' + - LocalName + #13 + #10 + 'Port = ' + IntToStr(LocalPort); - - frmDebugInfo := TfrmDebugInfo.Create(Application.MainForm); - try - frmDebugInfo.lblDebugInfo.Caption := t; - ShowApplicationAndFocusOK(Application); - frmDebugInfo.ShowModal; - finally - frmDebugInfo.Free - end; - -// ShowMessage(t); //TODO - end; -} // remove debug mode from client - - tmpPChar := NetCall(hSocket, PChar(y)); {eg 11-1-96} - tmp := tmpPchar; - StrDispose(tmpPchar); - if CompareStr(tmp, rlost) = 0 then - begin - lin.l_onoff := 1; - lin.l_linger := 0; - - SocketError := setsockopt(hSocket, SOL_SOCKET, SO_LINGER, - s_lin, sizeof(lin)); - If SocketError = SOCKET_ERROR Then - NetError( 'setsockopt (connect)',0); - - closesocket(hSocket); - WSACleanup; - Result := 10002; - exit; - end; - r := CompareStr(tmp, rAccept); - If r <> 0 Then - NetError ('NetCall',XWB_M_REJECT); -{ // JLI 021217 remove disconnect and reconnect code -- use UCX connection directly. - lin.l_onoff := 1; - lin.l_linger := 0; - - SocketError := setsockopt(hSocket, SOL_SOCKET, SO_LINGER, - s_lin, sizeof(lin)); - If SocketError = SOCKET_ERROR Then - NetError( 'setsockopt (connect)',0); - SocketError := closesocket(hSocket); { -- done with this socket - If SocketError > 0 Then - NetError( 'closesocket',0); - - { -- wait for connect from DHCP and accept it - (uses blocking call) - AddrLen := SizeOf(DHCPHost); - hSocket := accept(hSocketListen, @DHCPHost, @AddrLen);{ -- returns new socket - If hSocket = INVALID_SOCKET Then - begin - NetError( 'accept',0); - end; - - lin.l_onoff := 1; - lin.l_linger := 0; - - SocketError := setsockopt(hSocketListen, SOL_SOCKET, SO_LINGER, - s_lin, sizeof(lin)); - If SocketError = SOCKET_ERROR Then - NetError( 'setsockopt (connect)',0); - - SocketError := closesocket(hSocketListen); // -- done with listen skt - - If SocketError > 0 Then - begin - NetError ('closesocket (listening)',0); - end; -} // JLI 12/17/02 end of section commented out - - if ChangeCursor then - Screen.Cursor := crDefault; - NetStart := 0; -{ -- connection established, socket handle now in: hSocket - ifrmWinSock.txtStatus := 'socket obtained' *** } -end; - -function TXWBWinsock.NetStart1(ForegroundM: boolean; Server: string; - ListenerPort: integer; var hSocket: integer): Integer; -Var - WinSockData: TWSADATA; - LocalHost, DHCPHost: TSockAddr; - LocalName, t, workstation, pDHCPName: string; - x, y, tmp,RPCVersion, upArrow, rAccept, rLost: string; - tmpPchar: PChar; - pLocalname: array [0..255] of char; - LocalPort, AddrLen, hSocketListen,r: integer; - HostBuf,DHCPBuf: PHostEnt; - lin: TLinger; - s_lin: array [0..3] of char absolute lin; - ChangeCursor: Boolean; -begin - Prefix := '{XWB}'; -{ ForegroundM is a boolean value, TRUE means the M handling process is - running interactively a pointer rather than passing address length - by value) } - - { -- initialize Windows Sockets API for this task } - if Screen.Cursor = crDefault then - ChangeCursor := True - else - ChangeCursor := False; - if ChangeCursor then - Screen.Cursor := crHourGlass; - upArrow := string('^'); - rAccept := string('accept'); - rLost := string('(connection lost)'); - - SocketError := WSAStartup(WINSOCK1_1, WinSockData); - If SocketError >0 Then - NetError( 'WSAStartup',0); - - { -- set up a hook for blocking calls so there is no automatic DoEvents - in the background } - NetCallPending := False; - if ForeGroundM = False then if WSASetBlockingHook(@NetBlockingHook) = nil - then NetError('WSASetBlockingHook',0); - - { -- establish HostEnt and Address structure for local machine} - SocketError := gethostname(pLocalName, 255); { -- name of local system} - If SocketError >0 Then - NetError ('gethostname (local)',0); - HostBuf := gethostbyname(pLocalName); { -- info for local name} - If HostBuf = nil Then - NetError( 'gethostbyname',0); - LocalHost.sin_addr.S_addr := longint(plongint(HostBuf^.h_addr_list^)^); - LocalName := inet_ntoa(LocalHost.sin_addr); - workstation := string(HostBuf.h_name); - - { -- establish HostEnt and Address structure for remote machine } - if inet_addr(PChar(Server)) <> longint(INADDR_NONE) then - begin - DHCPHost.sin_addr.S_addr := inet_addr(PChar(Server)); - DHCPBuf := gethostbyaddr(@DHCPHost.sin_addr.S_addr,sizeof(DHCPHost),PF_INET); - end - else - DHCPBuf := gethostbyname(PChar(Server)); { -- info for DHCP system} - - If DHCPBuf = nil Then - begin - { modification to take care of problems with 10-dot addresses that weren't registered - solution found by Shawn Hardenbrook } -// NetError ('Error Identifying Remote Host ' + Server,0); -// NetStart := 10001; -// exit; - DHCPHost.sin_addr.S_addr := inet_addr(PChar(Server)); - pDHCPName := 'UNKNOWN'; - end - else - begin; - DHCPHost.sin_addr.S_addr := longint(plongint(DHCPBuf^.h_addr_list^)^); - pDHCPName := inet_ntoa(DHCPHost.sin_addr); - end; - DHCPHost.sin_family := PF_INET; { -- internet address type} - DHCPHost.sin_port := htons(ListenerPort); { -- port to connect to} - - { -- make connection to DHCP } - hSocket := socket(PF_INET, SOCK_STREAM, IPPROTO_TCP); - If hSocket = INVALID_SOCKET Then - NetError( 'socket',0); - - SocketError := connect(hSocket, DHCPHost, SizeOf(DHCPHost)); - If SocketError = SOCKET_ERROR Then - NetError( 'connect',0); - - {establish local IP now that connection is done} - AddrLen := SizeOf(LocalHost); - SocketError := getsockname(hSocket, LocalHost, AddrLen); - if SocketError = SOCKET_ERROR then - NetError ('getsockname',0); - LocalName := inet_ntoa(LocalHost.sin_addr); - -// { -- set up listening socket for DHCP return connect } - hSocketListen := socket(PF_INET, SOCK_STREAM, IPPROTO_TCP); // -- new socket - If hSocketListen = INVALID_SOCKET Then - NetError ('socket (listening)',0); - - LocalHost.sin_family := PF_INET; // -- internet address type - LocalHost.sin_port := 0; // -- local listening port - SocketError := bind(hSocketListen, LocalHost, - SizeOf(LocalHost)); // -- bind socket to address - If SocketError = SOCKET_ERROR Then - NetError( 'bind',0); - - AddrLen := sizeof(LocalHost); - SocketError := getsockname(hSocketListen, LocalHost, - AddrLen); // -- get listening port # - If SocketError = SOCKET_ERROR Then - NetError( 'getsockname',0); - LocalPort := ntohs(LocalHost.sin_port); // -- put in proper byte order - - SocketError := listen(hSocketListen, 1); // -- put socket in listen mode - If SocketError = SOCKET_ERROR Then - NetError( 'listen',0); - - { -- send IP address + port + workstation name and wait for OK : eg 1-30-97} - - RPCVersion := VarPack(BrokerVer); // eg 11-1-96 - x := string('TCPconnect^'); - x := ConCat(x, LocalName, upArrow); // local ip address - t := IntToStr(LocalPort); // callback port - x := ConCat(x, t, upArrow, workstation, upArrow); // workstation name - r := length(x) + length(RPCVersion) + 5; - t := string('00000') + IntToStr(r); // eg 11-1-96 - y := Copy(t, length(t)-4,length(t)); - y := ConCat(y, RPCVersion, StrPack(x,5)); // rpc version - y := Prefix + y; - { new protocol 030107 } - -// y := '[XWB]10' +IntToStr(CountWidth)+ '0' + '4'+#$A+'TCPConnect50'+ LPack(LocalName,CountWidth)+'f0'+LPack(IntToStr(LocalPort),CountWidth)+'f0'+LPack(workstation,CountWidth)+'f'+#4; -// y := '[XWB]10' +IntToStr(CountWidth)+ '0' + '4'+#$A+'TCPConnect50'+ LPack(LocalName,CountWidth)+'f0'+LPack(IntToStr(0),CountWidth)+'f0'+LPack(workstation,CountWidth)+'f'+#4; - - // need to remove selecting port etc from client, since it will now be handled on the server P36 - - if ForeGroundM = True then - begin - if ChangeCursor then - Screen.Cursor := crDefault; - t := 'Start M job D EN^XWBTCP' + #13 + #10 + 'Addr = ' + - LocalName + #13 + #10 + 'Port = ' + IntToStr(LocalPort); - - frmDebugInfo := TfrmDebugInfo.Create(Application.MainForm); - try - frmDebugInfo.lblDebugInfo.Caption := t; - ShowApplicationAndFocusOK(Application); - frmDebugInfo.ShowModal; - finally - frmDebugInfo.Free - end; - -// ShowMessage(t); //TODO - end; - // remove debug mode from client - - tmpPChar := NetCall(hSocket, PChar(y)); {eg 11-1-96} - tmp := tmpPchar; - StrDispose(tmpPchar); - if CompareStr(tmp, rlost) = 0 then - begin - lin.l_onoff := 1; - lin.l_linger := 0; - - SocketError := setsockopt(hSocket, SOL_SOCKET, SO_LINGER, - s_lin, sizeof(lin)); - If SocketError = SOCKET_ERROR Then - NetError( 'setsockopt (connect)',0); - - closesocket(hSocket); - WSACleanup; - Result := 10002; - exit; - end; - r := CompareStr(tmp, rAccept); - If r <> 0 Then - NetError ('NetCall',XWB_M_REJECT); - // JLI 021217 remove disconnect and reconnect code -- use UCX connection directly. - lin.l_onoff := 1; - lin.l_linger := 0; - - SocketError := setsockopt(hSocket, SOL_SOCKET, SO_LINGER, - s_lin, sizeof(lin)); - If SocketError = SOCKET_ERROR Then - NetError( 'setsockopt (connect)',0); - SocketError := closesocket(hSocket); // -- done with this socket - If SocketError > 0 Then - NetError( 'closesocket',0); - - // -- wait for connect from DHCP and accept it - (uses blocking call) - AddrLen := SizeOf(DHCPHost); - hSocket := accept(hSocketListen, @DHCPHost, @AddrLen); // -- returns new socket - If hSocket = INVALID_SOCKET Then - begin - NetError( 'accept',0); - end; - - lin.l_onoff := 1; - lin.l_linger := 0; - - SocketError := setsockopt(hSocketListen, SOL_SOCKET, SO_LINGER, - s_lin, sizeof(lin)); - If SocketError = SOCKET_ERROR Then - NetError( 'setsockopt (connect)',0); - - SocketError := closesocket(hSocketListen); // -- done with listen skt - - If SocketError > 0 Then - begin - NetError ('closesocket (listening)',0); - end; - // JLI 12/17/02 end of section commented out - - if ChangeCursor then - Screen.Cursor := crDefault; - NetStart1 := 0; -{ -- connection established, socket handle now in: hSocket - ifrmWinSock.txtStatus := 'socket obtained' *** } -end; - - -procedure TXWBWinsock.NetStop(hSocket: integer); -Var - tmp: string; - lin: TLinger; - s_lin: array [0..3] of char absolute lin; - ChangeCursor: Boolean; - tmpPChar: PChar; - Str: String; - x: array [0..15] of Char; -begin - if not IsConnected then exit; - if Screen.Cursor = crDefault then - ChangeCursor := True - else - ChangeCursor := False; - if ChangeCursor then - Screen.Cursor := crHourGlass; - if hSocket <= 0 then - begin - if ChangeCursor then - screen.cursor := crDefault; - exit; - end; - - StrPcopy(x, StrPack(StrPack('#BYE#',5),5)); - - { convert to new message protocol 030107 } - if Prefix = '[XWB]' then - Str := Prefix + '10'+IntToStr(CountWidth)+'0' +'4'+#5+'#BYE#'+#4 - else - Str := Prefix + x; - If hSocket <> INVALID_SOCKET Then - begin - tmpPChar := NetCall(hSocket,Str); -// tmpPChar := NetCall(hSocket, x); - tmp := tmpPChar; - StrDispose(tmpPChar); - lin.l_onoff := 1; { -- shut down the M handler}; - lin.l_linger := 0; - - SocketError := setsockopt(hSocket, SOL_SOCKET, SO_LINGER, - s_lin, sizeof(lin)); - If SocketError = SOCKET_ERROR Then - NetError( 'setsockopt (connect)',0); - - SocketError := closesocket(hSocket); { -- close the socket} - end; - - SocketError := WSAUnhookBlockingHook; { -- restore the default mechanism} - SocketError := WSACleanup; { -- shutdown TCP API} - If SocketError > 0 Then - NetError( 'WSACleanup',0); { -- check blocking calls, etc.} - if ChangeCursor then - Screen.Cursor := crDefault; - IsConnected := False; -end; - - -procedure TXWBWinsock.CloseSockSystem(hSocket: integer; s: string); -var - lin: TLinger; - s_lin: array [0..3] of char absolute lin; -begin - lin.l_onoff := 1; - lin.l_linger := 0; - - SocketError := setsockopt(hSocket, SOL_SOCKET, SO_LINGER, - s_lin, sizeof(lin)); - If SocketError = SOCKET_ERROR Then - NetError( 'setsockopt (connect)',0); - - closesocket(hSocket); - WSACleanup; - ShowMessage(s); //TODO - halt(1); -end; - -function TXWBWinsock.GetServerPacket(hSocket: integer): string; -var - s,sb: PChar; - buflen: integer; -begin - s := StrAlloc(1); - s[0] := #0; - buflen := recv(hSocket, s^, 1, 0); {get length of segment} - if buflen = SOCKET_ERROR Then // 040720 code added to check for the timing problem if initial attempt to read during connection fails - begin - sleep(100); - buflen := recv(hSocket, s^, 1, 0); - end; - if buflen = SOCKET_ERROR then - NetError( 'recv',0); - buflen := ord(s[0]); - sb := StrAlloc(buflen+1); - sb[0] := #0; - buflen := recv(hSocket, sb^, buflen, 0); {get security segment} - if buflen = SOCKET_ERROR Then - NetError( 'recv',0); - sb[buflen] := #0; - Result := StrPas(sb); - StrDispose(sb); - StrDispose(s); -end; - -constructor TXWBWinsock.Create; -begin - inherited; -// NetBlockingHookVar := NetBlockingHook; - CountWidth := 3; -end; - -procedure TXWBWinsock.NetError(Action: string; ErrType: integer); -var - x,s: string; - r: integer; - BrokerError: EBrokerError; - TimeOut: Double; -begin - Screen.Cursor := crDefault; - r := 0; - if ErrType > 0 then r := ErrType; - if ErrType = 0 then - begin - // P36 - // code added to indicate WSAETIMEDOUT error instead of WSAEINTR - // when time out period exceeded. WSAEINTR error is misleading - // since the server is still active, but took too long - if NetcallPending then - begin - if HookTimeOut > 0 then - begin - TimeOut := HookTimeOut * OneSecond; - if Now > (NetTimerStart + TimeOut) then - r := WSAETIMEDOUT; - end; - end; - if r = 0 then - r := WSAGetLastError; - if (r = WSAEINTR) or (r = WSAETIMEDOUT) then xFlush := True; - if WSAIsBlocking = True then WSACancelBlockingCall; // JLI 021210 - end; - Case r of - WSAEINTR : x := 'WSAEINTR'; - WSAEBADF : x := 'WSAEINTR'; - WSAEFAULT : x := 'WSAEFAULT'; - WSAEINVAL : x := 'WSAEINVAL'; - WSAEMFILE : x := 'WSAEMFILE'; - WSAEWOULDBLOCK : x := 'WSAEWOULDBLOCK'; - WSAEINPROGRESS : x := 'WSAEINPROGRESS'; - WSAEALREADY : x := 'WSAEALREADY'; - WSAENOTSOCK : x := 'WSAENOTSOCK'; - WSAEDESTADDRREQ : x := 'WSAEDESTADDRREQ'; - WSAEMSGSIZE : x := 'WSAEMSGSIZE'; - WSAEPROTOTYPE : x := 'WSAEPROTOTYPE'; - WSAENOPROTOOPT : x := 'WSAENOPROTOOPT'; - WSAEPROTONOSUPPORT : x := 'WSAEPROTONOSUPPORT'; - WSAESOCKTNOSUPPORT : x := 'WSAESOCKTNOSUPPORT'; - WSAEOPNOTSUPP : x := 'WSAEOPNOTSUPP'; - WSAEPFNOSUPPORT : x := 'WSAEPFNOSUPPORT'; - WSAEAFNOSUPPORT : x := 'WSAEAFNOSUPPORT'; - WSAEADDRINUSE : x := 'WSAEADDRINUSE'; - WSAEADDRNOTAVAIL : x := 'WSAEADDRNOTAVAIL'; - WSAENETDOWN : x := 'WSAENETDOWN'; - WSAENETUNREACH : x := 'WSAENETUNREACH'; - WSAENETRESET : x := 'WSAENETRESET'; - WSAECONNABORTED : x := 'WSAECONNABORTED'; - WSAECONNRESET : x := 'WSAECONNRESET'; - WSAENOBUFS : x := 'WSAENOBUFS'; - WSAEISCONN : x := 'WSAEISCONN'; - WSAENOTCONN : x := 'WSAENOTCONN'; - WSAESHUTDOWN : x := 'WSAESHUTDOWN'; - WSAETOOMANYREFS : x := 'WSAETOOMANYREFS'; - WSAETIMEDOUT : x := 'WSAETIMEDOUT'; - WSAECONNREFUSED : x := 'WSAECONNREFUSED'; - WSAELOOP : x := 'WSAELOOP'; - WSAENAMETOOLONG : x := 'WSAENAMETOOLONG'; - WSAEHOSTDOWN : x := 'WSAEHOSTDOWN'; - WSAEHOSTUNREACH : x := 'WSAEHOSTUNREACH'; - WSAENOTEMPTY : x := 'WSAENOTEMPTY'; - WSAEPROCLIM : x := 'WSAEPROCLIM'; - WSAEUSERS : x := 'WSAEUSERS'; - WSAEDQUOT : x := 'WSAEDQUOT'; - WSAESTALE : x := 'WSAESTALE'; - WSAEREMOTE : x := 'WSAEREMOTE'; - WSASYSNOTREADY : x := 'WSASYSNOTREADY'; - WSAVERNOTSUPPORTED : x := 'WSAVERNOTSUPPORTED'; - WSANOTINITIALISED : x := 'WSANOTINITIALISED'; - WSAHOST_NOT_FOUND : x := 'WSAHOST_NOT_FOUND'; - WSATRY_AGAIN : x := 'WSATRY_AGAIN'; - WSANO_RECOVERY : x := 'WSANO_RECOVERY'; - WSANO_DATA : x := 'WSANO_DATA'; - - XWB_NO_HEAP : x := 'Insufficient Heap'; - XWB_M_REJECT : x := 'M Error - Use ^XTER'; - XWB_BadReads : x := 'Server unable to read input data correctly.'; - XWB_BadSignOn : x := 'Sign-on was not completed.'; - XWB_ExeNoMem : x := 'System was out of memory, executable file was corrupt, or relocations were invalid.'; - XWB_ExeNoFile : x := 'File was not found.'; - XWB_ExeNoPath : x := 'Path was not found.'; - XWB_ExeShare : x := 'Attempt was made to dynamically link to a task,' + - ' or there was a sharing or network-protection error.'; - XWB_ExeSepSeg : x := 'Library required separate data segments for each task.'; - XWB_ExeLoMem : x := 'There was insufficient memory to start the application.'; - XWB_ExeWinVer : x := 'Windows version was incorrect.'; - XWB_ExeBadExe : x := 'Executable file was invalid.' + - ' Either it was not a Windows application or there was an error in the .EXE image.'; - XWB_ExeDifOS : x := 'Application was designed for a different operating system.'; - XWB_RpcNotReg : X := 'Remote procedure not registered to application.'; - XWB_BldConnectList : x := 'BrokerConnections list could not be created'; - XWB_NullRpcVer : x := 'RpcVersion cannot be empty.' + #13 + 'Default is 0 (zero).'; - else x := IntToStr(r); - end; - s := 'Error encountered.' + chr(13)+chr(10) + 'Function was: ' + Action + chr(13)+chr(10) + 'Error was: ' + x; - BrokerError := EBrokerError.Create(s); - BrokerError.Action := Action; - BrokerError.Code := r; - BrokerError.Mnemonic := x; - raise BrokerError; -end; - -function TXWBWinsock.BuildPar1(hSocket: integer; api, RPCVer: string; const - Parameters: TParams): String; -var - i,ParamCount: integer; - num: integer; - tsize: longint; - arr: LongInt; - param,x,hdr,strout: string; - tout,psize,tResult,RPCVersion: string; - sin: TStringList; - subscript: string; -begin - sin := TStringList.Create; - sin.clear; - x := ''; - param := ''; - arr := 0; - if Parameters = nil then ParamCount := 0 - else ParamCount := Parameters.Count; - for i := 0 to ParamCount - 1 do - if Parameters[i].PType <> undefined then begin - with Parameters[i] do begin - - {if PType= null then - param:='';} - - if PType = literal then - param := param + strpack('0' + Value,3); - - if PType = reference then - param := param + strpack('1' + Value,3); - - if (PType = list) {or (PType = wordproc)} then begin - Value := '.x'; - param := param + strpack('2' + Value,3); - if Pos('.',Value) >0 then - x := Copy(Value,2,length(Value)); - {if PType = wordproc then dec(last);} - subscript := Mult.First; - while subscript <> '' do begin - if Mult[subscript] = '' then Mult[subscript] := #1; - sin.Add(StrPack(subscript,3) + StrPack(Mult[subscript],3)); - subscript := Mult.Order(subscript,1); - end{while}; - sin.Add('000'); - arr := 1; - end{if}; - end{with}; - end{if}; - - param := Copy(param,1,Length(param)); - tsize := 0; - - tResult := ''; - tout := ''; - - hdr := BuildHdr('XWB','','',''); - strout := strpack(hdr + BuildApi(api,param,arr),5); -// num :=0; // JLI 040608 to correct handling of empty arrays - - RPCVersion := ''; - RPCVersion := VarPack(RPCVer); - - {if sin.Count-1 > 0 then} num := sin.Count-1; // JLI 040608 to correct handling of empty arrays -// if sin.Count-1 > 0 then num := sin.Count-1; - - - if {num} sin.Count > 0 then // JLI 040608 to correct handling of empty arrays -// if num > 0 then - begin - for i := 0 to num do - tsize := tsize + length(sin.strings[i]); - x := '00000' + IntToStr(tsize + length(strout)+ length(RPCVersion)); - end; - if {num} sin.Count = 0 then // JLI 040608 to correct handling of empty arrays -// if num = 0 then - begin - x := '00000' + IntToStr(length(strout)+ length(RPCVersion)); - end; - - psize := x; - psize := Copy(psize,length(psize)-5,5); - tResult := psize; - tResult := ConCat(tResult, RPCVersion); - tout := strout; - tResult := ConCat(tResult, tout); - - if {num} sin.Count > 0 then // JLI 040608 to correct handling of empty arrays -// if num > 0 then - begin - for i := 0 to num do - tResult := ConCat(tResult, sin.strings[i]); - end; - - sin.free; - - Result := Prefix + tResult; {return result} - -end; - -end. - - - diff --git a/BDK32/Source/XWBReg.pas b/BDK32/Source/XWBReg.pas deleted file mode 100644 index 61dea37..0000000 --- a/BDK32/Source/XWBReg.pas +++ /dev/null @@ -1,46 +0,0 @@ -{ ************************************************************** - Package: XWB - Kernel RPCBroker - Date Created: Sept 18, 1997 (Version 1.1) - Site Name: Oakland, OI Field Office, Dept of Veteran Affairs - Developers: Danila Manapsal, Don Craven, Joel Ivey - Description: Registers components and property editors. - Current Release: Version 1.1 Patch 40 (January 7, 2005)) -*************************************************************** } - -unit XWBReg; - -{$I IISBase.inc} - -interface - -procedure Register; - -implementation - -uses Classes, - {$IFDEF D6_OR_HIGHER} - DesignIntf, DesignEditors, DesignMenus, - {$ELSE} - DsgnIntf, - {$ENDIF} - ExptIntf, //Delphi units - Trpcb, CCOWRPCBroker, - RpcbEdtr, XWBRich20, //Broker units -//{$IFDEF VER130} -// VERGENCECONTEXTORLib_TLB_D50; -//{$ENDIF} -//{$IFDEF VER140} -// VERGENCECONTEXTORLib_TLB_D60; //CCOW -//ENDIF} - VergenceContextorLib_TLB; - -procedure Register; -begin - RegisterComponents('Kernel',[TRPCBroker, TCCOWRPCBroker, TXWBRichEdit, TContextorControl]); - - RegisterPropertyEditor(TypeInfo(TRemoteProc),nil,'',TRemoteProcProperty); - RegisterPropertyEditor(TypeInfo(TServer),nil,'',TServerProperty); - RegisterPropertyEditor(TypeInfo(TRpcVersion),nil,'',TRpcVersionProperty); -end; - -end. diff --git a/BDK32/Source/XWBRich20.PAS b/BDK32/Source/XWBRich20.PAS deleted file mode 100644 index 5b3f380..0000000 --- a/BDK32/Source/XWBRich20.PAS +++ /dev/null @@ -1,1678 +0,0 @@ -{ ************************************************************** - Package: XWB - Kernel RPCBroker - Date Created: Sept 18, 1997 (Version 1.1) - Site Name: Oakland, OI Field Office, Dept of Veteran Affairs - Developers: Joel Ivey - Description: Provides a RichEdit Component with ability - to recognize a URL within the RichEdit control. - Current Release: Version 1.1 Patch 40 (January 7, 2005)) -*************************************************************** } -{: Unit XWBRich20 - Based on the article "Detect URLS in the RichEdit Control" by - Elias J. Ongpoy in 'Delphi Developer Newsletter', May 2001 - which incorporates the functionality of the Microsoft Rich Edit - Control 2.0 from RichEd20.DLL which incorporates the ability to - recognize a URL within the RichEdit control. -} - -unit XWBRich20; -interface -uses Messages, Windows, SysUtils, Classes, Controls, Forms, - Menus, Graphics, StdCtrls, RichEdit, ToolWin, ImgList, ExtCtrls, ComCtrls; - -type - TXWBCustomRichEdit = class; - - TAttributeType = (atSelected, atDefaultText); - TConsistentAttribute = (caBold, caColor, caFace, caItalic, - caSize, caStrikeOut, caUnderline, caProtected); - TConsistentAttributes = set of TConsistentAttribute; - - TXWBTextAttributes = class(TPersistent) - private - RichEdit: TXWBCustomRichEdit; - FType: TAttributeType; - procedure GetAttributes(var Format: TCharFormat); - function GetCharset: TFontCharset; - function GetColor: TColor; - function GetConsistentAttributes: TConsistentAttributes; - function GetHeight: Integer; - function GetName: TFontName; - function GetPitch: TFontPitch; - function GetProtected: Boolean; - function GetSize: Integer; - function GetStyle: TFontStyles; - procedure SetAttributes(var Format: TCharFormat); - procedure SetCharset(Value: TFontCharset); - procedure SetColor(Value: TColor); - procedure SetHeight(Value: Integer); - procedure SetName(Value: TFontName); - procedure SetPitch(Value: TFontPitch); - procedure SetProtected(Value: Boolean); - procedure SetSize(Value: Integer); - procedure SetStyle(Value: TFontStyles); - protected - procedure InitFormat(var Format: TCharFormat); - procedure AssignTo(Dest: TPersistent); override; - public - constructor Create(AOwner: TXWBCustomRichEdit; AttributeType: TAttributeType); - procedure Assign(Source: TPersistent); override; - property Charset: TFontCharset read GetCharset write SetCharset; - property Color: TColor read GetColor write SetColor; - property ConsistentAttributes: TConsistentAttributes read GetConsistentAttributes; - property Name: TFontName read GetName write SetName; - property Pitch: TFontPitch read GetPitch write SetPitch; - property Protected: Boolean read GetProtected write SetProtected; - property Size: Integer read GetSize write SetSize; - property Style: TFontStyles read GetStyle write SetStyle; - property Height: Integer read GetHeight write SetHeight; - end; - -{ TParaAttributes } - - TNumberingStyle = (nsNone, nsBullet); - - TParaAttributes = class(TPersistent) - private - RichEdit: TXWBCustomRichEdit; - procedure GetAttributes(var Paragraph: TParaFormat); - function GetAlignment: TAlignment; - function GetFirstIndent: Longint; - function GetLeftIndent: Longint; - function GetRightIndent: Longint; - function GetNumbering: TNumberingStyle; - function GetTab(Index: Byte): Longint; - function GetTabCount: Integer; - procedure InitPara(var Paragraph: TParaFormat); - procedure SetAlignment(Value: TAlignment); - procedure SetAttributes(var Paragraph: TParaFormat); - procedure SetFirstIndent(Value: Longint); - procedure SetLeftIndent(Value: Longint); - procedure SetRightIndent(Value: Longint); - procedure SetNumbering(Value: TNumberingStyle); - procedure SetTab(Index: Byte; Value: Longint); - procedure SetTabCount(Value: Integer); - public - constructor Create(AOwner: TXWBCustomRichEdit); - procedure Assign(Source: TPersistent); override; - property Alignment: TAlignment read GetAlignment write SetAlignment; - property FirstIndent: Longint read GetFirstIndent write SetFirstIndent; - property LeftIndent: Longint read GetLeftIndent write SetLeftIndent; - property Numbering: TNumberingStyle read GetNumbering write SetNumbering; - property RightIndent: Longint read GetRightIndent write SetRightIndent; - property Tab[Index: Byte]: Longint read GetTab write SetTab; - property TabCount: Integer read GetTabCount write SetTabCount; - end; - -{ TXWBCustomRichEdit } - - TRichEditResizeEvent = procedure(Sender: TObject; Rect: TRect) of object; - TRichEditProtectChange = procedure(Sender: TObject; - StartPos, EndPos: Integer; var AllowChange: Boolean) of object; - TRichEditSaveClipboard = procedure(Sender: TObject; - NumObjects, NumChars: Integer; var SaveClipboard: Boolean) of object; - TSearchType = (stWholeWord, stMatchCase); - TSearchTypes = set of TSearchType; - - TConversion = class(TObject) - public - function ConvertReadStream(Stream: TStream; Buffer: PChar; BufSize: Integer): Integer; virtual; - function ConvertWriteStream(Stream: TStream; Buffer: PChar; BufSize: Integer): Integer; virtual; - end; - - TConversionClass = class of TConversion; - - PConversionFormat = ^TConversionFormat; - TConversionFormat = record - ConversionClass: TConversionClass; - Extension: string; - Next: PConversionFormat; - end; - - PRichEditStreamInfo = ^TRichEditStreamInfo; - TRichEditStreamInfo = record - Converter: TConversion; - Stream: TStream; - end; - - TXWBCustomRichEdit = class(TCustomMemo) - private - FHideScrollBars: Boolean; - FSelAttributes: TXWBTextAttributes; - FDefAttributes: TXWBTextAttributes; - FParagraph: TParaAttributes; - FOldParaAlignment: TAlignment; - FScreenLogPixels: Integer; - FRichEditStrings: TStrings; - FMemStream: TMemoryStream; - FOnSelChange: TNotifyEvent; - - FHideSelection: Boolean; - FURLDetect: Boolean; // for URL Detect Property - - FModified: Boolean; - FDefaultConverter: TConversionClass; - FOnResizeRequest: TRichEditResizeEvent; - FOnProtectChange: TRichEditProtectChange; - FOnSaveClipboard: TRichEditSaveClipboard; - FPageRect: TRect; - - procedure CMBiDiModeChanged(var Message: TMessage); message CM_BIDIMODECHANGED; - procedure CMColorChanged(var Message: TMessage); message CM_COLORCHANGED; - procedure CMFontChanged(var Message: TMessage); message CM_FONTCHANGED; - procedure CNNotify(var Message: TWMNotify); message CN_NOTIFY; - function GetPlainText: Boolean; - function ProtectChange(StartPos, EndPos: Integer): Boolean; - function SaveClipboard(NumObj, NumChars: Integer): Boolean; - procedure SetHideScrollBars(Value: Boolean); - procedure SetHideSelection(Value: Boolean); - procedure SetURLDetect(Value: boolean); - - procedure SetPlainText(Value: Boolean); - procedure SetRichEditStrings(Value: TStrings); - procedure SetDefAttributes(Value: TXWBTextAttributes); - procedure SetSelAttributes(Value: TXWBTextAttributes); - procedure WMNCDestroy(var Message: TWMNCDestroy); message WM_NCDESTROY; - procedure WMSetCursor(var Message: TWMSetCursor); message WM_SETCURSOR; - procedure WMPaint(var Message: TWMPaint); message WM_PAINT; - procedure WMSetFont(var Message: TWMSetFont); message WM_SETFONT; - procedure WMRButtonUp(var Message: TWMRButtonUp); message WM_RBUTTONUP; - - protected - procedure CreateParams(var Params: TCreateParams); override; - procedure CreateWnd; override; - procedure DestroyWnd; override; - procedure RequestSize(const Rect: TRect); virtual; - procedure SelectionChange; dynamic; - procedure DoSetMaxLength(Value: Integer); override; - function GetCaretPos: TPoint; override; - function GetSelLength: Integer; override; - function GetSelStart: Integer; override; - function GetSelText: string; override; - procedure SetSelLength(Value: Integer); override; - procedure SetSelStart(Value: Integer); override; - property HideSelection: Boolean read FHideSelection write SetHideSelection default True; - -// New Property - URL Detect - property URLDetect : boolean read FURLDetect write SetURLDetect default FALSE; - - property HideScrollBars: Boolean read FHideScrollBars - write SetHideScrollBars default True; - property Lines: TStrings read FRichEditStrings write SetRichEditStrings; - property OnSaveClipboard: TRichEditSaveClipboard read FOnSaveClipboard - write FOnSaveClipboard; - property OnSelectionChange: TNotifyEvent read FOnSelChange write FOnSelChange; - property OnProtectChange: TRichEditProtectChange read FOnProtectChange - write FOnProtectChange; - property OnResizeRequest: TRichEditResizeEvent read FOnResizeRequest - write FOnResizeRequest; - property PlainText: Boolean read GetPlainText write SetPlainText default False; - - public - constructor Create(AOwner: TComponent); override; - destructor Destroy; override; - procedure Clear; override; - function FindText(const SearchStr: string; - StartPos, Length: Integer; Options: TSearchTypes): Integer; - function GetSelTextBuf(Buffer: PChar; BufSize: Integer): Integer; override; - procedure Print(const Caption: string); virtual; - class procedure RegisterConversionFormat(const AExtension: string; - AConversionClass: TConversionClass); - property DefaultConverter: TConversionClass - read FDefaultConverter write FDefaultConverter; - property DefAttributes: TXWBTextAttributes read FDefAttributes write SetDefAttributes; - property SelAttributes: TXWBTextAttributes read FSelAttributes write SetSelAttributes; - property PageRect: TRect read FPageRect write FPageRect; - property Paragraph: TParaAttributes read FParagraph; - end; - - TXWBRichEdit = class(TXWBCustomRichEdit) - published - property Align; - property Alignment; - property Anchors; - property BiDiMode; - property BorderStyle; - property BorderWidth; - property Color; - property Ctl3D; - property DragCursor; - property DragKind; - property DragMode; - property Enabled; - property Font; - property HideSelection; - property URLDetect; // New URL Detect property - property HideScrollBars; - property ImeMode; - property ImeName; - property Constraints; - property Lines; - property MaxLength; - property ParentBiDiMode; - property ParentColor; - property ParentCtl3D; - property ParentFont; - property ParentShowHint; - property PlainText; - property PopupMenu; - property ReadOnly; - property ScrollBars; - property ShowHint; - property TabOrder; - property TabStop default True; - - property Visible; - property WantTabs; - property WantReturns; - property WordWrap; - property OnChange; -// property OnContextPopup; - property OnDragDrop; - property OnDragOver; - property OnEndDock; - property OnEndDrag; - property OnEnter; - property OnExit; - property OnKeyDown; - property OnKeyPress; - property OnKeyUp; - property OnMouseDown; - property OnMouseMove; - property OnMouseUp; - property OnMouseWheel; - property OnMouseWheelDown; - property OnMouseWheelUp; - property OnProtectChange; - property OnResizeRequest; - property OnSaveClipboard; - property OnSelectionChange; - property OnStartDock; - property OnStartDrag; - end; - -implementation - -uses Printers, Consts, ComStrs, ActnList, StdActns, ShellAPI; - -type - PFontHandles = ^TFontHandles; - TFontHandles = record - OurFont, - StockFont: Integer; - end; - - const - SectionSizeArea = 8; - RTFConversionFormat: TConversionFormat = ( - ConversionClass: TConversion; - Extension: 'rtf'; - Next: nil); - TextConversionFormat: TConversionFormat = ( - ConversionClass: TConversion; - Extension: 'txt'; - Next: @RTFConversionFormat); - -var - ConversionFormatList: PConversionFormat = @TextConversionFormat; - FRichEditModule: THandle; - -{ TXWBTextAttributes } - -constructor TXWBTextAttributes.Create(AOwner: TXWBCustomRichEdit; - AttributeType: TAttributeType); -begin - inherited Create; - RichEdit := AOwner; - FType := AttributeType; -end; - -procedure TXWBTextAttributes.InitFormat(var Format: TCharFormat); -begin - FillChar(Format, SizeOf(TCharFormat), 0); - Format.cbSize := SizeOf(TCharFormat); -end; - -function TXWBTextAttributes.GetConsistentAttributes: TConsistentAttributes; -var - Format: TCharFormat; -begin - Result := []; - if RichEdit.HandleAllocated and (FType = atSelected) then - begin - InitFormat(Format); - SendMessage(RichEdit.Handle, EM_GETCHARFORMAT, - WPARAM(FType = atSelected), LPARAM(@Format)); - with Format do - begin - if (dwMask and CFM_BOLD) <> 0 then Include(Result, caBold); - if (dwMask and CFM_COLOR) <> 0 then Include(Result, caColor); - if (dwMask and CFM_FACE) <> 0 then Include(Result, caFace); - if (dwMask and CFM_ITALIC) <> 0 then Include(Result, caItalic); - if (dwMask and CFM_SIZE) <> 0 then Include(Result, caSize); - if (dwMask and CFM_STRIKEOUT) <> 0 then Include(Result, caStrikeOut); - if (dwMask and CFM_UNDERLINE) <> 0 then Include(Result, caUnderline); - if (dwMask and CFM_PROTECTED) <> 0 then Include(Result, caProtected); - end; - end; -end; - -procedure TXWBTextAttributes.GetAttributes(var Format: TCharFormat); -begin - InitFormat(Format); - if RichEdit.HandleAllocated then - SendMessage(RichEdit.Handle, EM_GETCHARFORMAT, - WPARAM(FType = atSelected), LPARAM(@Format)); -end; - -procedure TXWBTextAttributes.SetAttributes(var Format: TCharFormat); -var - Flag: Longint; -begin - if FType = atSelected then Flag := SCF_SELECTION - else Flag := 0; - if RichEdit.HandleAllocated then - SendMessage(RichEdit.Handle, EM_SETCHARFORMAT, Flag, LPARAM(@Format)) -end; - -function TXWBTextAttributes.GetCharset: TFontCharset; -var - Format: TCharFormat; -begin - GetAttributes(Format); - Result := Format.bCharset; -end; - -procedure TXWBTextAttributes.SetCharset(Value: TFontCharset); -var - Format: TCharFormat; -begin - InitFormat(Format); - with Format do - begin - dwMask := CFM_CHARSET; - bCharSet := Value; - end; - SetAttributes(Format); -end; - -function TXWBTextAttributes.GetProtected: Boolean; -var - Format: TCharFormat; -begin - GetAttributes(Format); - with Format do - if (dwEffects and CFE_PROTECTED) <> 0 then - Result := True else - Result := False; -end; - -procedure TXWBTextAttributes.SetProtected(Value: Boolean); -var - Format: TCharFormat; -begin - InitFormat(Format); - with Format do - begin - dwMask := CFM_PROTECTED; - if Value then dwEffects := CFE_PROTECTED; - end; - SetAttributes(Format); -end; - -function TXWBTextAttributes.GetColor: TColor; -var - Format: TCharFormat; -begin - GetAttributes(Format); - with Format do - if (dwEffects and CFE_AUTOCOLOR) <> 0 then - Result := clWindowText else - Result := crTextColor; -end; - -procedure TXWBTextAttributes.SetColor(Value: TColor); -var - Format: TCharFormat; -begin - InitFormat(Format); - with Format do - begin - dwMask := CFM_COLOR; - if Value = clWindowText then - dwEffects := CFE_AUTOCOLOR else - crTextColor := ColorToRGB(Value); - end; - SetAttributes(Format); -end; - -function TXWBTextAttributes.GetName: TFontName; -var - Format: TCharFormat; -begin - GetAttributes(Format); - Result := Format.szFaceName; -end; - -procedure TXWBTextAttributes.SetName(Value: TFontName); -var - Format: TCharFormat; -begin - InitFormat(Format); - with Format do - begin - dwMask := CFM_FACE; - StrPLCopy(szFaceName, Value, SizeOf(szFaceName)); - end; - SetAttributes(Format); -end; - -function TXWBTextAttributes.GetStyle: TFontStyles; -var - Format: TCharFormat; -begin - Result := []; - GetAttributes(Format); - with Format do - begin - if (dwEffects and CFE_BOLD) <> 0 then Include(Result, fsBold); - if (dwEffects and CFE_ITALIC) <> 0 then Include(Result, fsItalic); - if (dwEffects and CFE_UNDERLINE) <> 0 then Include(Result, fsUnderline); - if (dwEffects and CFE_STRIKEOUT) <> 0 then Include(Result, fsStrikeOut); - end; -end; - -procedure TXWBTextAttributes.SetStyle(Value: TFontStyles); -var - Format: TCharFormat; -begin - InitFormat(Format); - with Format do - begin - dwMask := CFM_BOLD or CFM_ITALIC or CFM_UNDERLINE or CFM_STRIKEOUT; - if fsBold in Value then dwEffects := dwEffects or CFE_BOLD; - if fsItalic in Value then dwEffects := dwEffects or CFE_ITALIC; - if fsUnderline in Value then dwEffects := dwEffects or CFE_UNDERLINE; - if fsStrikeOut in Value then dwEffects := dwEffects or CFE_STRIKEOUT; - end; - - SetAttributes(Format); -end; - -function TXWBTextAttributes.GetSize: Integer; -var - Format: TCharFormat; -begin - GetAttributes(Format); - Result := Format.yHeight div 20; -end; - -procedure TXWBTextAttributes.SetSize(Value: Integer); -var - Format: TCharFormat; -begin - InitFormat(Format); - with Format do - begin - dwMask := Integer(CFM_SIZE); - yHeight := Value * 20; - end; - SetAttributes(Format); -end; - -function TXWBTextAttributes.GetHeight: Integer; -begin - Result := MulDiv(Size, RichEdit.FScreenLogPixels, 72); -end; - -procedure TXWBTextAttributes.SetHeight(Value: Integer); -begin - Size := MulDiv(Value, 72, RichEdit.FScreenLogPixels); -end; - -function TXWBTextAttributes.GetPitch: TFontPitch; -var - Format: TCharFormat; -begin - GetAttributes(Format); - case (Format.bPitchAndFamily and $03) of - DEFAULT_PITCH: Result := fpDefault; - VARIABLE_PITCH: Result := fpVariable; - FIXED_PITCH: Result := fpFixed; - else - Result := fpDefault; - end; -end; - -procedure TXWBTextAttributes.SetPitch(Value: TFontPitch); -var - Format: TCharFormat; -begin - InitFormat(Format); - with Format do - begin - case Value of - fpVariable: Format.bPitchAndFamily := VARIABLE_PITCH; - fpFixed: Format.bPitchAndFamily := FIXED_PITCH; - else - Format.bPitchAndFamily := DEFAULT_PITCH; - end; - end; - SetAttributes(Format); -end; - -procedure TXWBTextAttributes.Assign(Source: TPersistent); -begin - if Source is TFont then - begin - Color := TFont(Source).Color; - Name := TFont(Source).Name; - Charset := TFont(Source).Charset; - Style := TFont(Source).Style; - Size := TFont(Source).Size; - Pitch := TFont(Source).Pitch; - end - else if Source is TXWBTextAttributes then - begin - Color := TXWBTextAttributes(Source).Color; - Name := TXWBTextAttributes(Source).Name; - Charset := TXWBTextAttributes(Source).Charset; - Style := TXWBTextAttributes(Source).Style; - Pitch := TXWBTextAttributes(Source).Pitch; - end - else inherited Assign(Source); -end; - -procedure TXWBTextAttributes.AssignTo(Dest: TPersistent); -begin - if Dest is TFont then - begin - TFont(Dest).Color := Color; - TFont(Dest).Name := Name; - TFont(Dest).Charset := Charset; - TFont(Dest).Style := Style; - TFont(Dest).Size := Size; - TFont(Dest).Pitch := Pitch; - end - else if Dest is TXWBTextAttributes then - begin - TXWBTextAttributes(Dest).Color := Color; - TXWBTextAttributes(Dest).Name := Name; - TXWBTextAttributes(Dest).Charset := Charset; - TXWBTextAttributes(Dest).Style := Style; - TXWBTextAttributes(Dest).Pitch := Pitch; - end - else inherited AssignTo(Dest); -end; - -{ TParaAttributes } - -constructor TParaAttributes.Create(AOwner: TXWBCustomRichEdit); -begin - inherited Create; - RichEdit := AOwner; -end; - -procedure TParaAttributes.InitPara(var Paragraph: TParaFormat); -begin - FillChar(Paragraph, SizeOf(TParaFormat), 0); - Paragraph.cbSize := SizeOf(TParaFormat); -end; - -procedure TParaAttributes.GetAttributes(var Paragraph: TParaFormat); -begin - InitPara(Paragraph); - if RichEdit.HandleAllocated then - SendMessage(RichEdit.Handle, EM_GETPARAFORMAT, 0, LPARAM(@Paragraph)); -end; - -procedure TParaAttributes.SetAttributes(var Paragraph: TParaFormat); -begin - RichEdit.HandleNeeded; { we REALLY need the handle for BiDi } - if RichEdit.HandleAllocated then - begin - if RichEdit.UseRightToLeftAlignment then - if Paragraph.wAlignment = PFA_LEFT then - Paragraph.wAlignment := PFA_RIGHT - else if Paragraph.wAlignment = PFA_RIGHT then - Paragraph.wAlignment := PFA_LEFT; - SendMessage(RichEdit.Handle, EM_SETPARAFORMAT, 0, LPARAM(@Paragraph)); - end; -end; - -function TParaAttributes.GetAlignment: TAlignment; -var - Paragraph: TParaFormat; -begin - GetAttributes(Paragraph); - Result := TAlignment(Paragraph.wAlignment - 1); -end; - -procedure TParaAttributes.SetAlignment(Value: TAlignment); -var - Paragraph: TParaFormat; -begin - InitPara(Paragraph); - with Paragraph do - begin - dwMask := PFM_ALIGNMENT; - wAlignment := Ord(Value) + 1; - end; - SetAttributes(Paragraph); -end; - -function TParaAttributes.GetNumbering: TNumberingStyle; -var - Paragraph: TParaFormat; -begin - GetAttributes(Paragraph); - Result := TNumberingStyle(Paragraph.wNumbering); -end; - -procedure TParaAttributes.SetNumbering(Value: TNumberingStyle); -var - Paragraph: TParaFormat; -begin - case Value of - nsBullet: if LeftIndent < 10 then LeftIndent := 10; - nsNone: LeftIndent := 0; - end; - InitPara(Paragraph); - with Paragraph do - begin - dwMask := PFM_NUMBERING; - wNumbering := Ord(Value); - end; - SetAttributes(Paragraph); -end; - -function TParaAttributes.GetFirstIndent: Longint; -var - Paragraph: TParaFormat; -begin - GetAttributes(Paragraph); - Result := Paragraph.dxStartIndent div 20 -end; - -procedure TParaAttributes.SetFirstIndent(Value: Longint); -var - Paragraph: TParaFormat; -begin - InitPara(Paragraph); - with Paragraph do - begin - dwMask := PFM_STARTINDENT; - dxStartIndent := Value * 20; - end; - SetAttributes(Paragraph); -end; - -function TParaAttributes.GetLeftIndent: Longint; -var - Paragraph: TParaFormat; -begin - GetAttributes(Paragraph); - Result := Paragraph.dxOffset div 20; -end; - -procedure TParaAttributes.SetLeftIndent(Value: Longint); -var - Paragraph: TParaFormat; -begin - InitPara(Paragraph); - with Paragraph do - begin - dwMask := PFM_OFFSET; - dxOffset := Value * 20; - end; - SetAttributes(Paragraph); -end; - -function TParaAttributes.GetRightIndent: Longint; -var - Paragraph: TParaFormat; -begin - GetAttributes(Paragraph); - Result := Paragraph.dxRightIndent div 20; -end; - -procedure TParaAttributes.SetRightIndent(Value: Longint); -var - Paragraph: TParaFormat; -begin - InitPara(Paragraph); - with Paragraph do - begin - dwMask := PFM_RIGHTINDENT; - dxRightIndent := Value * 20; - end; - SetAttributes(Paragraph); -end; - -function TParaAttributes.GetTab(Index: Byte): Longint; -var - Paragraph: TParaFormat; -begin - GetAttributes(Paragraph); - Result := Paragraph.rgxTabs[Index] div 20; -end; - -procedure TParaAttributes.SetTab(Index: Byte; Value: Longint); -var - Paragraph: TParaFormat; -begin - GetAttributes(Paragraph); - with Paragraph do - begin - rgxTabs[Index] := Value * 20; - dwMask := PFM_TABSTOPS; - if cTabCount < Index then cTabCount := Index; - SetAttributes(Paragraph); - end; -end; - -function TParaAttributes.GetTabCount: Integer; -var - Paragraph: TParaFormat; -begin - GetAttributes(Paragraph); - Result := Paragraph.cTabCount; -end; - -procedure TParaAttributes.SetTabCount(Value: Integer); -var - Paragraph: TParaFormat; -begin - GetAttributes(Paragraph); - with Paragraph do - begin - dwMask := PFM_TABSTOPS; - cTabCount := Value; - SetAttributes(Paragraph); - end; -end; - -procedure TParaAttributes.Assign(Source: TPersistent); -var - I: Integer; -begin - if Source is TParaAttributes then - begin - Alignment := TParaAttributes(Source).Alignment; - FirstIndent := TParaAttributes(Source).FirstIndent; - LeftIndent := TParaAttributes(Source).LeftIndent; - RightIndent := TParaAttributes(Source).RightIndent; - Numbering := TParaAttributes(Source).Numbering; - for I := 0 to MAX_TAB_STOPS - 1 do - Tab[I] := TParaAttributes(Source).Tab[I]; - end - else inherited Assign(Source); -end; - -{ TConversion } - -function TConversion.ConvertReadStream(Stream: TStream; Buffer: PChar; BufSize: Integer): Integer; -begin - Result := Stream.Read(Buffer^, BufSize); -end; - -function TConversion.ConvertWriteStream(Stream: TStream; Buffer: PChar; BufSize: Integer): Integer; -begin - Result := Stream.Write(Buffer^, BufSize); -end; - -{ TRichEditStrings } - -const - ReadError = $0001; - WriteError = $0002; - NoError = $0000; - -type - TSelection = record - StartPos, EndPos: Integer; - end; - - TRichEditStrings = class(TStrings) - private - RichEdit: TXWBCustomRichEdit; - FPlainText: Boolean; - FConverter: TConversion; - procedure EnableChange(const Value: Boolean); - protected - function Get(Index: Integer): string; override; - function GetCount: Integer; override; - procedure Put(Index: Integer; const S: string); override; - procedure SetUpdateState(Updating: Boolean); override; - procedure SetTextStr(const Value: string); override; - public - destructor Destroy; override; - procedure Clear; override; - procedure AddStrings(Strings: TStrings); override; - procedure Delete(Index: Integer); override; - procedure Insert(Index: Integer; const S: string); override; - procedure LoadFromFile(const FileName: string); override; - procedure LoadFromStream(Stream: TStream); override; - procedure SaveToFile(const FileName: string); override; - procedure SaveToStream(Stream: TStream); override; - property PlainText: Boolean read FPlainText write FPlainText; - end; - -destructor TRichEditStrings.Destroy; -begin - FConverter.Free; - inherited Destroy; -end; - -procedure TRichEditStrings.AddStrings(Strings: TStrings); -var - SelChange: TNotifyEvent; -begin - SelChange := RichEdit.OnSelectionChange; - RichEdit.OnSelectionChange := nil; - try - inherited AddStrings(Strings); - finally - RichEdit.OnSelectionChange := SelChange; - end; -end; - -function TRichEditStrings.GetCount: Integer; -begin - Result := SendMessage(RichEdit.Handle, EM_GETLINECOUNT, 0, 0); - if SendMessage(RichEdit.Handle, EM_LINELENGTH, SendMessage(RichEdit.Handle, - EM_LINEINDEX, Result - 1, 0), 0) = 0 then Dec(Result); -end; - -function TRichEditStrings.Get(Index: Integer): string; -var - Text: array[0..4095] of Char; - L: Integer; -begin - Word((@Text)^) := SizeOf(Text); - L := SendMessage(RichEdit.Handle, EM_GETLINE, Index, Longint(@Text)); - if (Text[L - 2] = #13) and (Text[L - 1] = #10) then Dec(L, 2); - SetString(Result, Text, L); -end; - -procedure TRichEditStrings.Put(Index: Integer; const S: string); -var - Selection: TCharRange; -begin - if Index >= 0 then - begin - Selection.cpMin := SendMessage(RichEdit.Handle, EM_LINEINDEX, Index, 0); - if Selection.cpMin <> -1 then - begin - Selection.cpMax := Selection.cpMin + - SendMessage(RichEdit.Handle, EM_LINELENGTH, Selection.cpMin, 0); - SendMessage(RichEdit.Handle, EM_EXSETSEL, 0, Longint(@Selection)); - SendMessage(RichEdit.Handle, EM_REPLACESEL, 0, Longint(PChar(S))); - end; - end; -end; - -procedure TRichEditStrings.Insert(Index: Integer; const S: string); -var - L: Integer; - Selection: TCharRange; - Fmt: PChar; - Str: string; -begin - if Index >= 0 then - begin - Selection.cpMin := SendMessage(RichEdit.Handle, EM_LINEINDEX, Index, 0); - if Selection.cpMin >= 0 then Fmt := '%s'#13#10 - else begin - Selection.cpMin := - SendMessage(RichEdit.Handle, EM_LINEINDEX, Index - 1, 0); - if Selection.cpMin < 0 then Exit; - L := SendMessage(RichEdit.Handle, EM_LINELENGTH, Selection.cpMin, 0); - if L = 0 then Exit; - Inc(Selection.cpMin, L); - Fmt := #13#10'%s'; - end; - - Selection.cpMax := Selection.cpMin; - SendMessage(RichEdit.Handle, EM_EXSETSEL, 0, Longint(@Selection)); - - Str := Format(Fmt, [S]); - SendMessage(RichEdit.Handle, EM_REPLACESEL, 0, LongInt(PChar(Str))); -{ - if RichEdit.SelStart <> (Selection.cpMax + Length(Str)) then - raise EOutOfResources.Create(sRichEditInsertError); -} - end; -end; - -procedure TRichEditStrings.Delete(Index: Integer); -const - Empty: PChar = ''; -var - Selection: TCharRange; -begin - if Index < 0 then Exit; - Selection.cpMin := SendMessage(RichEdit.Handle, EM_LINEINDEX, Index, 0); - if Selection.cpMin <> -1 then - begin - Selection.cpMax := SendMessage(RichEdit.Handle, EM_LINEINDEX, Index + 1, 0); - if Selection.cpMax = -1 then - Selection.cpMax := Selection.cpMin + - SendMessage(RichEdit.Handle, EM_LINELENGTH, Selection.cpMin, 0); - SendMessage(RichEdit.Handle, EM_EXSETSEL, 0, Longint(@Selection)); - SendMessage(RichEdit.Handle, EM_REPLACESEL, 0, Longint(Empty)); - end; -end; - -procedure TRichEditStrings.Clear; -begin - RichEdit.Clear; -end; - -procedure TRichEditStrings.SetUpdateState(Updating: Boolean); -begin - if RichEdit.Showing then - SendMessage(RichEdit.Handle, WM_SETREDRAW, Ord(not Updating), 0); - if not Updating then begin - RichEdit.Refresh; - RichEdit.Perform(CM_TEXTCHANGED, 0, 0); - end; -end; - -procedure TRichEditStrings.EnableChange(const Value: Boolean); -var - EventMask: Longint; -begin - with RichEdit do - begin - if Value then - EventMask := SendMessage(Handle, EM_GETEVENTMASK, 0, 0) or ENM_CHANGE - else - EventMask := SendMessage(Handle, EM_GETEVENTMASK, 0, 0) and not ENM_CHANGE; - SendMessage(Handle, EM_SETEVENTMASK, 0, EventMask); - end; -end; - -procedure TRichEditStrings.SetTextStr(const Value: string); -begin - EnableChange(False); - try - inherited SetTextStr(Value); - finally - EnableChange(True); - end; -end; - -function AdjustLineBreaks(Dest, Source: PChar): Integer; assembler; -asm - PUSH ESI - PUSH EDI - MOV EDI,EAX - MOV ESI,EDX - MOV EDX,EAX - CLD -@@1: LODSB -@@2: OR AL,AL - JE @@4 - CMP AL,0AH - JE @@3 - STOSB - CMP AL,0DH - JNE @@1 - MOV AL,0AH - STOSB - LODSB - CMP AL,0AH - JE @@1 - JMP @@2 -@@3: MOV EAX,0A0DH - STOSW - JMP @@1 -@@4: STOSB - LEA EAX,[EDI-1] - SUB EAX,EDX - POP EDI - POP ESI -end; - -function StreamSave(dwCookie: Longint; pbBuff: PByte; - cb: Longint; var pcb: Longint): Longint; stdcall; -var - StreamInfo: PRichEditStreamInfo; -begin - Result := NoError; - StreamInfo := PRichEditStreamInfo(Pointer(dwCookie)); - try - pcb := 0; - if StreamInfo^.Converter <> nil then - pcb := StreamInfo^.Converter.ConvertWriteStream(StreamInfo^.Stream, PChar(pbBuff), cb); - except - Result := WriteError; - end; -end; - -function StreamLoad(dwCookie: Longint; pbBuff: PByte; - cb: Longint; var pcb: Longint): Longint; stdcall; -var - Buffer, pBuff: PChar; - StreamInfo: PRichEditStreamInfo; -begin - Result := NoError; - StreamInfo := PRichEditStreamInfo(Pointer(dwCookie)); - Buffer := StrAlloc(cb + 1); - try - cb := cb div 2; - pcb := 0; - pBuff := Buffer + cb; - try - if StreamInfo^.Converter <> nil then - pcb := StreamInfo^.Converter.ConvertReadStream(StreamInfo^.Stream, pBuff, cb); - if pcb > 0 then - begin - pBuff[pcb] := #0; - if pBuff[pcb - 1] = #13 then pBuff[pcb - 1] := #0; - pcb := AdjustLineBreaks(Buffer, pBuff); - Move(Buffer^, pbBuff^, pcb); - end; - except - Result := ReadError; - end; - finally - StrDispose(Buffer); - end; -end; - -procedure TRichEditStrings.LoadFromStream(Stream: TStream); -var - EditStream: TEditStream; - Position: Longint; - TextType: Longint; - StreamInfo: TRichEditStreamInfo; - Converter: TConversion; -begin - StreamInfo.Stream := Stream; - if FConverter <> nil then Converter := FConverter - else Converter := RichEdit.DefaultConverter.Create; - StreamInfo.Converter := Converter; - try - with EditStream do - begin - dwCookie := LongInt(Pointer(@StreamInfo)); - pfnCallBack := @StreamLoad; - dwError := 0; - end; - Position := Stream.Position; - - if PlainText then TextType := SF_TEXT - else TextType := SF_RTF; - SendMessage(RichEdit.Handle, EM_STREAMIN, TextType, Longint(@EditStream)); - - if (TextType = SF_RTF) and (EditStream.dwError <> 0) then - begin - Stream.Position := Position; - if PlainText then TextType := SF_RTF - else TextType := SF_TEXT; - SendMessage(RichEdit.Handle, EM_STREAMIN, TextType, Longint(@EditStream)); - if EditStream.dwError <> 0 then - raise EOutOfResources.Create(sRichEditLoadFail); - end; - - finally - if FConverter = nil then Converter.Free; - end; -end; - -procedure TRichEditStrings.SaveToStream(Stream: TStream); -var - EditStream: TEditStream; - TextType: Longint; - StreamInfo: TRichEditStreamInfo; - Converter: TConversion; -begin - if FConverter <> nil then Converter := FConverter - else Converter := RichEdit.DefaultConverter.Create; - StreamInfo.Stream := Stream; - StreamInfo.Converter := Converter; - try - with EditStream do - begin - dwCookie := LongInt(Pointer(@StreamInfo)); - pfnCallBack := @StreamSave; - dwError := 0; - end; - if PlainText then TextType := SF_TEXT - else TextType := SF_RTF; - SendMessage(RichEdit.Handle, EM_STREAMOUT, TextType, Longint(@EditStream)); - if EditStream.dwError <> 0 then - raise EOutOfResources.Create(sRichEditSaveFail); - finally - if FConverter = nil then Converter.Free; - end; -end; - -procedure TRichEditStrings.LoadFromFile(const FileName: string); -var - Ext: string; - Convert: PConversionFormat; -begin - Ext := AnsiLowerCaseFileName(ExtractFileExt(Filename)); - System.Delete(Ext, 1, 1); - Convert := ConversionFormatList; - while Convert <> nil do - with Convert^ do - if Extension <> Ext then Convert := Next - else Break; - if Convert = nil then - Convert := @TextConversionFormat; - if FConverter = nil then FConverter := Convert^.ConversionClass.Create; - try - inherited LoadFromFile(FileName); - except - FConverter.Free; - FConverter := nil; - raise; - end; - RichEdit.DoSetMaxLength($7FFFFFF0); -end; - -procedure TRichEditStrings.SaveToFile(const FileName: string); -var - Ext: string; - Convert: PConversionFormat; -begin - Ext := AnsiLowerCaseFileName(ExtractFileExt(Filename)); - System.Delete(Ext, 1, 1); - Convert := ConversionFormatList; - while Convert <> nil do - with Convert^ do - if Extension <> Ext then Convert := Next - else Break; - if Convert = nil then - Convert := @TextConversionFormat; - if FConverter = nil then FConverter := Convert^.ConversionClass.Create; - try - inherited SaveToFile(FileName); - except - FConverter.Free; - FConverter := nil; - raise; - end; -end; - -{ TRichEdit } - -constructor TXWBCustomRichEdit.Create(AOwner: TComponent); -var - DC: HDC; -begin - inherited Create(AOwner); - FSelAttributes := TXWBTextAttributes.Create(Self, atSelected); - FDefAttributes := TXWBTextAttributes.Create(Self, atDefaultText); - FParagraph := TParaAttributes.Create(Self); - FRichEditStrings := TRichEditStrings.Create; - TRichEditStrings(FRichEditStrings).RichEdit := Self; - TabStop := True; - Width := 185; - Height := 89; - AutoSize := False; - DoubleBuffered := False; - FHideSelection := True; - FURLDetect:= FALSE; - HideScrollBars := True; - - DC := GetDC(0); - FScreenLogPixels := GetDeviceCaps(DC, LOGPIXELSY); - DefaultConverter := TConversion; - ReleaseDC(0, DC); - FOldParaAlignment := Alignment; - Perform(CM_PARENTBIDIMODECHANGED, 0, 0); -end; - -destructor TXWBCustomRichEdit.Destroy; -begin - FSelAttributes.Free; - FDefAttributes.Free; - FParagraph.Free; - FRichEditStrings.Free; - FMemStream.Free; - inherited Destroy; -end; - -procedure TXWBCustomRichEdit.Clear; -begin - inherited Clear; - Modified := False; -end; - -procedure TXWBCustomRichEdit.CreateParams(var Params: TCreateParams); -const -// Use version 2.0 of RichEdit, previously RICHED32.DLL - RichEditModuleName = 'RICHED20.DLL'; - - HideScrollBar : array[Boolean] of DWORD = (ES_DISABLENOSCROLL, 0); - HideSelections: array[Boolean] of DWORD = (ES_NOHIDESEL, 0); - -begin - if FRichEditModule = 0 then - begin - FRichEditModule := LoadLibrary(RichEditModuleName); - if FRichEditModule <= HINSTANCE_ERROR then FRichEditModule := 0; - end; - - inherited CreateParams(Params); - -// USE RICHEDIT_CLASSA use ANSI version not Unicode - CreateSubClass(Params, RICHEDIT_CLASSA); - - with Params do - begin - Style := Style or HideScrollBar[HideScrollBars] or - HideSelections[HideSelection]; - WindowClass.style := WindowClass.style and not (CS_HREDRAW or CS_VREDRAW); - end; -end; - -procedure TXWBCustomRichEdit.CreateWnd; -var - Plain, DesignMode, WasModified: Boolean; - -begin - WasModified := inherited Modified; - - inherited CreateWnd; - if (SysLocale.FarEast) and not (SysLocale.PriLangID = LANG_JAPANESE) then - Font.Charset := GetDefFontCharSet; - SendMessage(Handle, EM_SETEVENTMASK, 0, - ENM_CHANGE or ENM_SELCHANGE or ENM_REQUESTRESIZE or - ENM_PROTECTED or ENM_LINK); // Added the ENM_LINK to receive EN_LINK message - - SendMessage(Handle, EM_AUTOURLDETECT, Ord(FURLDetect), 0); // Start the URL Detect - - SendMessage(Handle, EM_SETBKGNDCOLOR, 0, ColorToRGB(Color)); - if FMemStream <> nil then - begin - Plain := PlainText; - FMemStream.ReadBuffer(DesignMode, sizeof(DesignMode)); - PlainText := DesignMode; - try - Lines.LoadFromStream(FMemStream); - FMemStream.Free; - FMemStream := nil; - finally - PlainText := Plain; - end; - end; - - Modified := WasModified; -end; - -procedure TXWBCustomRichEdit.DestroyWnd; -var - Plain, DesignMode: Boolean; -begin - FModified := Modified; - FMemStream := TMemoryStream.Create; - Plain := PlainText; - DesignMode := (csDesigning in ComponentState); - PlainText := DesignMode; - FMemStream.WriteBuffer(DesignMode, sizeof(DesignMode)); - try - Lines.SaveToStream(FMemStream); - FMemStream.Position := 0; - finally - PlainText := Plain; - end; - - inherited DestroyWnd; -end; - -procedure TXWBCustomRichEdit.WMNCDestroy(var Message: TWMNCDestroy); -begin - inherited; -end; - -procedure TXWBCustomRichEdit.WMSetFont(var Message: TWMSetFont); -begin - FDefAttributes.Assign(Font); -end; - -procedure TXWBCustomRichEdit.WMRButtonUp(var Message: TWMRButtonUp); -begin - // RichEd20 does not pass the WM_RBUTTONUP message to defwndproc, - // so we get no WM_CONTEXTMENU message. Simulate message here. - if Win32MajorVersion < 5 then - Perform(WM_CONTEXTMENU, Handle, LParam(PointToSmallPoint( - ClientToScreen(SmallPointToPoint(Message.Pos))))); - inherited; -end; - -procedure TXWBCustomRichEdit.CMFontChanged(var Message: TMessage); -begin - FDefAttributes.Assign(Font); -end; - -procedure TXWBCustomRichEdit.DoSetMaxLength(Value: Integer); -begin - SendMessage(Handle, EM_EXLIMITTEXT, 0, Value); -end; - -function TXWBCustomRichEdit.GetCaretPos; -var - CharRange: TCharRange; -begin - SendMessage(Handle, EM_EXGETSEL, 0, LongInt(@CharRange)); - Result.X := CharRange.cpMax; - Result.Y := SendMessage(Handle, EM_EXLINEFROMCHAR, 0, Result.X); - Result.X := Result.X - SendMessage(Handle, EM_LINEINDEX, -1, 0); -end; - -function TXWBCustomRichEdit.GetSelLength: Integer; -var - CharRange: TCharRange; -begin - SendMessage(Handle, EM_EXGETSEL, 0, Longint(@CharRange)); - Result := CharRange.cpMax - CharRange.cpMin; -end; - -function TXWBCustomRichEdit.GetSelStart: Integer; -var - CharRange: TCharRange; -begin - SendMessage(Handle, EM_EXGETSEL, 0, Longint(@CharRange)); - Result := CharRange.cpMin; -end; - -function TXWBCustomRichEdit.GetSelTextBuf(Buffer: PChar; BufSize: Integer): Integer; -var - S: string; -begin - S := GetSelText; - Result := Length(S); - if BufSize < Length(S) then Result := BufSize; - StrPLCopy(Buffer, S, Result); -end; - -function TXWBCustomRichEdit.GetSelText: string; -var - Length: Integer; -begin - SetLength(Result, GetSelLength + 1); - Length := SendMessage(Handle, EM_GETSELTEXT, 0, Longint(PChar(Result))); - SetLength(Result, Length); -end; - -procedure TXWBCustomRichEdit.CMBiDiModeChanged(var Message: TMessage); -var - AParagraph: TParaFormat; -begin - HandleNeeded; { we REALLY need the handle for BiDi } - inherited; - Paragraph.GetAttributes(AParagraph); - AParagraph.dwMask := PFM_ALIGNMENT; - AParagraph.wAlignment := Ord(Alignment) + 1; - Paragraph.SetAttributes(AParagraph); -end; - -procedure TXWBCustomRichEdit.SetHideScrollBars(Value: Boolean); -begin - if HideScrollBars <> Value then - begin - FHideScrollBars := value; - RecreateWnd; - end; -end; - -procedure TXWBCustomRichEdit.SetHideSelection(Value: Boolean); -begin - if HideSelection <> Value then - begin - FHideSelection := Value; - SendMessage(Handle, EM_HIDESELECTION, Ord(HideSelection), LongInt(True)); - end; -end; - -procedure TXWBCustomRichEdit.SetURLDetect(Value: boolean); -begin - if URLDetect <> Value then - begin - FURLDetect:= Value; - RecreateWnd; - end; -end; - -procedure TXWBCustomRichEdit.SetSelAttributes(Value: TXWBTextAttributes); -begin - SelAttributes.Assign(Value); -end; - -procedure TXWBCustomRichEdit.SetSelLength(Value: Integer); -var - CharRange: TCharRange; -begin - SendMessage(Handle, EM_EXGETSEL, 0, Longint(@CharRange)); - CharRange.cpMax := CharRange.cpMin + Value; - SendMessage(Handle, EM_EXSETSEL, 0, Longint(@CharRange)); - SendMessage(Handle, EM_SCROLLCARET, 0, 0); -end; - -procedure TXWBCustomRichEdit.SetDefAttributes(Value: TXWBTextAttributes); -begin - DefAttributes.Assign(Value); -end; - -function TXWBCustomRichEdit.GetPlainText: Boolean; -begin - Result := TRichEditStrings(Lines).PlainText; -end; - -procedure TXWBCustomRichEdit.SetPlainText(Value: Boolean); -begin - TRichEditStrings(Lines).PlainText := Value; -end; - -procedure TXWBCustomRichEdit.CMColorChanged(var Message: TMessage); -begin - inherited; - SendMessage(Handle, EM_SETBKGNDCOLOR, 0, ColorToRGB(Color)) -end; - -procedure TXWBCustomRichEdit.SetRichEditStrings(Value: TStrings); -begin - FRichEditStrings.Assign(Value); -end; - -procedure TXWBCustomRichEdit.SetSelStart(Value: Integer); -var - CharRange: TCharRange; -begin - CharRange.cpMin := Value; - CharRange.cpMax := Value; - SendMessage(Handle, EM_EXSETSEL, 0, Longint(@CharRange)); -end; - -procedure TXWBCustomRichEdit.Print(const Caption: string); -var - Range: TFormatRange; - LastChar, MaxLen, LogX, LogY, OldMap: Integer; - SaveRect: TRect; -begin - FillChar(Range, SizeOf(TFormatRange), 0); - with Printer, Range do - begin - Title := Caption; - BeginDoc; - hdc := Handle; - hdcTarget := hdc; - LogX := GetDeviceCaps(Handle, LOGPIXELSX); - LogY := GetDeviceCaps(Handle, LOGPIXELSY); - if IsRectEmpty(PageRect) then - begin - rc.right := PageWidth * 1440 div LogX; - rc.bottom := PageHeight * 1440 div LogY; - end - else begin - rc.left := PageRect.Left * 1440 div LogX; - rc.top := PageRect.Top * 1440 div LogY; - rc.right := PageRect.Right * 1440 div LogX; - rc.bottom := PageRect.Bottom * 1440 div LogY; - end; - rcPage := rc; - SaveRect := rc; - LastChar := 0; - MaxLen := GetTextLen; - chrg.cpMax := -1; - // ensure printer DC is in text map mode - OldMap := SetMapMode(hdc, MM_TEXT); - SendMessage(Self.Handle, EM_FORMATRANGE, 0, 0); // flush buffer - try - repeat - rc := SaveRect; - chrg.cpMin := LastChar; - LastChar := SendMessage(Self.Handle, EM_FORMATRANGE, 1, Longint(@Range)); - if (LastChar < MaxLen) and (LastChar <> -1) then NewPage; - until (LastChar >= MaxLen) or (LastChar = -1); - EndDoc; - finally - SendMessage(Self.Handle, EM_FORMATRANGE, 0, 0); // flush buffer - SetMapMode(hdc, OldMap); // restore previous map mode - end; - end; -end; - -var - Painting: Boolean = False; - -procedure TXWBCustomRichEdit.WMPaint(var Message: TWMPaint); -var - R, R1: TRect; -begin - if GetUpdateRect(Handle, R, True) then - begin - with ClientRect do R1 := Rect(Right - 3, Top, Right, Bottom); - if IntersectRect(R, R, R1) then InvalidateRect(Handle, @R1, True); - end; - if Painting then - Invalidate - else begin - Painting := True; - try - inherited; - finally - Painting := False; - end; - end; -end; - -procedure TXWBCustomRichEdit.WMSetCursor(var Message: TWMSetCursor); -var - P: TPoint; -begin - inherited; - if Message.Result = 0 then - begin - Message.Result := 1; - GetCursorPos(P); - with PointToSmallPoint(P) do - case Perform(WM_NCHITTEST, 0, MakeLong(X, Y)) of - HTVSCROLL, - HTHSCROLL: - Windows.SetCursor(Screen.Cursors[crArrow]); - HTCLIENT: - Windows.SetCursor(Screen.Cursors[crIBeam]); - end; - end; -end; - -procedure TXWBCustomRichEdit.CNNotify(var Message: TWMNotify); -type - PENLink = ^TENLink; - -begin - with Message do - case NMHdr^.code of - EN_SELCHANGE: SelectionChange; - EN_REQUESTRESIZE: RequestSize(PReqSize(NMHdr)^.rc); - EN_SAVECLIPBOARD: - with PENSaveClipboard(NMHdr)^ do - if not SaveClipboard(cObjectCount, cch) then Result := 1; - EN_PROTECTED: - with PENProtected(NMHdr)^.chrg do - if not ProtectChange(cpMin, cpMax) then Result := 1; - -// EN_LINK message being received to respond to it - EN_LINK: - begin - Windows.SetCursor(Screen.Cursors[crHandPoint]); - if PEnLink(NMHdr)^.msg = WM_LBUTTONDOWN then - begin -// set the selection - SendMessage(Handle, EM_EXSETSEL, 0, Longint(@PEnLink(NMHdr)^.chrg)); -// send it to windows to open - ShellExecute(handle, 'open', PChar(GetSelText), nil, nil, SW_SHOWNORMAL); - end; - end; - end; -end; - -function TXWBCustomRichEdit.SaveClipboard(NumObj, NumChars: Integer): Boolean; -begin - Result := True; - if Assigned(OnSaveClipboard) then OnSaveClipboard(Self, NumObj, NumChars, Result); -end; - -function TXWBCustomRichEdit.ProtectChange(StartPos, EndPos: Integer): Boolean; -begin - Result := False; - if Assigned(OnProtectChange) then OnProtectChange(Self, StartPos, EndPos, Result); -end; - -procedure TXWBCustomRichEdit.SelectionChange; -begin - if Assigned(OnSelectionChange) then OnSelectionChange(Self); -end; - -procedure TXWBCustomRichEdit.RequestSize(const Rect: TRect); -begin - if Assigned(OnResizeRequest) then OnResizeRequest(Self, Rect); -end; - -function TXWBCustomRichEdit.FindText(const SearchStr: string; - StartPos, Length: Integer; Options: TSearchTypes): Integer; -var - Find: TFindText; - Flags: Integer; -begin - with Find.chrg do - begin - cpMin := StartPos; - cpMax := cpMin + Length; - end; - Flags := 0; - if stWholeWord in Options then Flags := Flags or FT_WHOLEWORD; - if stMatchCase in Options then Flags := Flags or FT_MATCHCASE; - Find.lpstrText := PChar(SearchStr); - Result := SendMessage(Handle, EM_FINDTEXT, Flags, LongInt(@Find)); -end; - -procedure AppendConversionFormat(const Ext: string; AClass: TConversionClass); -var - NewRec: PConversionFormat; -begin - New(NewRec); - with NewRec^ do - begin - Extension := AnsiLowerCaseFileName(Ext); - ConversionClass := AClass; - Next := ConversionFormatList; - end; - ConversionFormatList := NewRec; -end; - -class procedure TXWBCustomRichEdit.RegisterConversionFormat(const AExtension: string; - AConversionClass: TConversionClass); -begin - AppendConversionFormat(AExtension, AConversionClass); -end; - -end. - diff --git a/BDK32/Source/XWB_D50.dcr b/BDK32/Source/XWB_D50.dcr deleted file mode 100644 index ebc6f4f..0000000 Binary files a/BDK32/Source/XWB_D50.dcr and /dev/null differ diff --git a/BDK32/Source/XWB_D50.dof b/BDK32/Source/XWB_D50.dof deleted file mode 100644 index be4ec75..0000000 --- a/BDK32/Source/XWB_D50.dof +++ /dev/null @@ -1,86 +0,0 @@ -[Compiler] -A=1 -B=0 -C=0 -D=0 -E=0 -F=0 -G=1 -H=1 -I=1 -J=1 -K=0 -L=0 -M=0 -N=1 -O=1 -P=1 -Q=0 -R=0 -S=0 -T=0 -U=0 -V=1 -W=0 -X=1 -Y=0 -Z=1 -ShowHints=1 -ShowWarnings=1 -UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; -[Linker] -MapFile=0 -OutputObjs=0 -ConsoleApp=1 -DebugInfo=0 -RemoteSymbols=0 -MinStackSize=16384 -MaxStackSize=1048576 -ImageBase=4194304 -ExeDescription=VistA RPC Broker -[Directories] -OutputDir= -UnitOutputDir=..\D5 -PackageDLLOutputDir= -PackageDCPOutputDir= -SearchPath= -Packages=Vcl50;Vclx50;Vcldb50; -Conditionals= -DebugSourceDirs= -UsePackages=0 -[Parameters] -RunParams= -HostApplication= -[Version Info] -IncludeVerInfo=1 -AutoIncBuild=1 -MajorVer=1 -MinorVer=1 -Release=40 -Build=11 -Debug=0 -PreRelease=0 -Special=0 -Private=0 -DLL=0 -Locale=1033 -CodePage=1252 -[Version Info Keys] -CompanyName=Dept of Veterans Affairs, VHA, OI, SD&D -FileDescription=TRPCBroker Component -FileVersion=1.1.40.11 -InternalName=XWB*1.1*40 -LegalCopyright=(c) 1996-2004 -LegalTrademarks= -OriginalFilename= -ProductName=TRPCBroker -ProductVersion=1.1.40.0 -Comments= -[Excluded Packages] -$(DELPHI)\Bin\dclite50.bpl=Borland Integrated Translation Environment -[HistoryLists\hlUnitAliases] -Count=1 -Item0=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; -[HistoryLists\hlUnitOutputDirectory] -Count=1 -Item0=..\D5 diff --git a/BDK32/Source/XWB_D50.dpk b/BDK32/Source/XWB_D50.dpk deleted file mode 100644 index c063f94..0000000 --- a/BDK32/Source/XWB_D50.dpk +++ /dev/null @@ -1,38 +0,0 @@ -package XWB_D50; - -{$R *.RES} -{$R 'XWB_D50.DCR'} -{$ALIGN ON} -{$ASSERTIONS OFF} -{$BOOLEVAL OFF} -{$DEBUGINFO OFF} -{$EXTENDEDSYNTAX ON} -{$IMPORTEDDATA ON} -{$IOCHECKS ON} -{$LOCALSYMBOLS OFF} -{$LONGSTRINGS ON} -{$OPENSTRINGS ON} -{$OPTIMIZATION ON} -{$OVERFLOWCHECKS OFF} -{$RANGECHECKS OFF} -{$REFERENCEINFO OFF} -{$SAFEDIVIDE OFF} -{$STACKFRAMES OFF} -{$TYPEDADDRESS OFF} -{$VARSTRINGCHECKS ON} -{$WRITEABLECONST ON} -{$MINENUMSIZE 1} -{$IMAGEBASE $400000} -{$DESCRIPTION 'VistA RPC Broker'} -{$DESIGNONLY} -{$IMPLICITBUILD ON} - -requires - XWB_R50, - Vcl50; - -contains - RpcbEdtr in 'RpcbEdtr.pas' {in 'Rpcbedtr.pas'}, - XWBReg in 'XWBReg.pas' {in 'XWBReg.pas'}; - -end. diff --git a/BDK32/Source/XWB_D50.res b/BDK32/Source/XWB_D50.res deleted file mode 100644 index cce87da..0000000 Binary files a/BDK32/Source/XWB_D50.res and /dev/null differ diff --git a/BDK32/Source/XWB_D60.dcr b/BDK32/Source/XWB_D60.dcr deleted file mode 100644 index ebc6f4f..0000000 Binary files a/BDK32/Source/XWB_D60.dcr and /dev/null differ diff --git a/BDK32/Source/XWB_D60.dof b/BDK32/Source/XWB_D60.dof deleted file mode 100644 index 6174e28..0000000 --- a/BDK32/Source/XWB_D60.dof +++ /dev/null @@ -1,94 +0,0 @@ -[FileVersion] -Version=6.0 -[Compiler] -A=8 -B=0 -C=0 -D=0 -E=0 -F=0 -G=1 -H=1 -I=1 -J=1 -K=0 -L=0 -M=0 -N=1 -O=1 -P=1 -Q=0 -R=0 -S=0 -T=0 -U=0 -V=1 -W=0 -X=1 -Y=0 -Z=1 -ShowHints=1 -ShowWarnings=1 -UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; -[Linker] -MapFile=0 -OutputObjs=0 -ConsoleApp=1 -DebugInfo=0 -RemoteSymbols=0 -MinStackSize=16384 -MaxStackSize=1048576 -ImageBase=4194304 -ExeDescription=VistA RPC Broker -[Directories] -OutputDir= -UnitOutputDir=..\D6 -PackageDLLOutputDir= -PackageDCPOutputDir= -SearchPath= -Packages=Vcl50;Vclx50;Vcldb50; -Conditionals= -DebugSourceDirs= -UsePackages=0 -[Parameters] -RunParams= -HostApplication= -Launcher= -UseLauncher=0 -DebugCWD= -[Language] -ActiveLang= -ProjectLang=$00000409 -RootDir= -[Version Info] -IncludeVerInfo=1 -AutoIncBuild=1 -MajorVer=1 -MinorVer=1 -Release=40 -Build=11 -Debug=0 -PreRelease=0 -Special=0 -Private=0 -DLL=0 -Locale=1033 -CodePage=1252 -[Version Info Keys] -CompanyName=Dept of Veterans Affairs, VHA, OI, SD&D -FileDescription=TRPCBroker Component -FileVersion=1.1.40.11 -InternalName= -LegalCopyright= -LegalTrademarks= -OriginalFilename= -ProductName=TRPCBroker -ProductVersion=1.1.40.0 -Comments= -[HistoryLists\hlUnitAliases] -Count=1 -Item0=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; -[HistoryLists\hlUnitOutputDirectory] -Count=2 -Item0=..\D6 -Item1=..\D5 diff --git a/BDK32/Source/XWB_D60.dpk b/BDK32/Source/XWB_D60.dpk deleted file mode 100644 index 42c0e3b..0000000 --- a/BDK32/Source/XWB_D60.dpk +++ /dev/null @@ -1,39 +0,0 @@ -package XWB_D60; - -{$R *.res} -{$R 'XWB_D60.dcr'} -{$ALIGN 8} -{$ASSERTIONS OFF} -{$BOOLEVAL OFF} -{$DEBUGINFO OFF} -{$EXTENDEDSYNTAX ON} -{$IMPORTEDDATA ON} -{$IOCHECKS ON} -{$LOCALSYMBOLS OFF} -{$LONGSTRINGS ON} -{$OPENSTRINGS ON} -{$OPTIMIZATION ON} -{$OVERFLOWCHECKS OFF} -{$RANGECHECKS OFF} -{$REFERENCEINFO OFF} -{$SAFEDIVIDE OFF} -{$STACKFRAMES OFF} -{$TYPEDADDRESS OFF} -{$VARSTRINGCHECKS ON} -{$WRITEABLECONST ON} -{$MINENUMSIZE 1} -{$IMAGEBASE $400000} -{$DESCRIPTION 'VistA RPC Broker'} -{$DESIGNONLY} -{$IMPLICITBUILD ON} - -requires - XWB_R60, - vcl, - designide; - -contains - RpcbEdtr in 'RpcbEdtr.pas' {in 'Rpcbedtr.pas'}, - XWBReg in 'XWBReg.pas' {in 'XWBReg.pas'}; - -end. diff --git a/BDK32/Source/XWB_D60.res b/BDK32/Source/XWB_D60.res deleted file mode 100644 index ed6de07..0000000 Binary files a/BDK32/Source/XWB_D60.res and /dev/null differ diff --git a/BDK32/Source/XWB_D70.dcr b/BDK32/Source/XWB_D70.dcr deleted file mode 100644 index ebc6f4f..0000000 Binary files a/BDK32/Source/XWB_D70.dcr and /dev/null differ diff --git a/BDK32/Source/XWB_D70.dof b/BDK32/Source/XWB_D70.dof deleted file mode 100644 index 3b1bbe2..0000000 --- a/BDK32/Source/XWB_D70.dof +++ /dev/null @@ -1,144 +0,0 @@ -[FileVersion] -Version=7.0 -[Compiler] -A=8 -B=0 -C=0 -D=0 -E=0 -F=0 -G=1 -H=1 -I=1 -J=1 -K=0 -L=0 -M=0 -N=1 -O=1 -P=1 -Q=0 -R=0 -S=0 -T=0 -U=0 -V=1 -W=0 -X=1 -Y=0 -Z=1 -ShowHints=1 -ShowWarnings=1 -UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; -NamespacePrefix= -SymbolDeprecated=1 -SymbolLibrary=1 -SymbolPlatform=1 -UnitLibrary=1 -UnitPlatform=1 -UnitDeprecated=1 -HResultCompat=1 -HidingMember=1 -HiddenVirtual=1 -Garbage=1 -BoundsError=1 -ZeroNilCompat=1 -StringConstTruncated=1 -ForLoopVarVarPar=1 -TypedConstVarPar=1 -AsgToTypedConst=1 -CaseLabelRange=1 -ForVariable=1 -ConstructingAbstract=1 -ComparisonFalse=1 -ComparisonTrue=1 -ComparingSignedUnsigned=1 -CombiningSignedUnsigned=1 -UnsupportedConstruct=1 -FileOpen=1 -FileOpenUnitSrc=1 -BadGlobalSymbol=1 -DuplicateConstructorDestructor=1 -InvalidDirective=1 -PackageNoLink=1 -PackageThreadVar=1 -ImplicitImport=1 -HPPEMITIgnored=1 -NoRetVal=1 -UseBeforeDef=1 -ForLoopVarUndef=1 -UnitNameMismatch=1 -NoCFGFileFound=1 -MessageDirective=1 -ImplicitVariants=1 -UnicodeToLocale=1 -LocaleToUnicode=1 -ImagebaseMultiple=1 -SuspiciousTypecast=1 -PrivatePropAccessor=1 -UnsafeType=1 -UnsafeCode=1 -UnsafeCast=1 -[Linker] -MapFile=0 -OutputObjs=0 -ConsoleApp=1 -DebugInfo=0 -RemoteSymbols=0 -MinStackSize=16384 -MaxStackSize=1048576 -ImageBase=4194304 -ExeDescription=VistA RPC Broker -[Directories] -OutputDir= -UnitOutputDir=..\D7 -PackageDLLOutputDir= -PackageDCPOutputDir= -SearchPath= -Packages=Vcl50;Vclx50;Vcldb50; -Conditionals= -DebugSourceDirs= -UsePackages=0 -[Parameters] -RunParams= -HostApplication= -Launcher= -UseLauncher=0 -DebugCWD= -[Language] -ActiveLang= -ProjectLang=$00000409 -RootDir= -[Version Info] -IncludeVerInfo=1 -AutoIncBuild=1 -MajorVer=1 -MinorVer=1 -Release=40 -Build=11 -Debug=0 -PreRelease=0 -Special=0 -Private=0 -DLL=0 -Locale=1033 -CodePage=1252 -[Version Info Keys] -CompanyName=Dept of Veterans Affairs, VHA, OI, SD&D -FileDescription=TRPCBroker Component -FileVersion=1.1.40.11 -InternalName= -LegalCopyright= -LegalTrademarks= -OriginalFilename= -ProductName=TRPCBroker -ProductVersion=1.1.40.0 -Comments= -[HistoryLists\hlUnitAliases] -Count=1 -Item0=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; -[HistoryLists\hlUnitOutputDirectory] -Count=3 -Item0=..\D7 -Item1=..\D6 -Item2=..\D5 diff --git a/BDK32/Source/XWB_D70.dpk b/BDK32/Source/XWB_D70.dpk deleted file mode 100644 index 429213c..0000000 --- a/BDK32/Source/XWB_D70.dpk +++ /dev/null @@ -1,39 +0,0 @@ -package XWB_D70; - -{$R *.res} -{$R 'XWB_D70.dcr'} -{$ALIGN 8} -{$ASSERTIONS OFF} -{$BOOLEVAL OFF} -{$DEBUGINFO OFF} -{$EXTENDEDSYNTAX ON} -{$IMPORTEDDATA ON} -{$IOCHECKS ON} -{$LOCALSYMBOLS OFF} -{$LONGSTRINGS ON} -{$OPENSTRINGS ON} -{$OPTIMIZATION ON} -{$OVERFLOWCHECKS OFF} -{$RANGECHECKS OFF} -{$REFERENCEINFO OFF} -{$SAFEDIVIDE OFF} -{$STACKFRAMES OFF} -{$TYPEDADDRESS OFF} -{$VARSTRINGCHECKS ON} -{$WRITEABLECONST ON} -{$MINENUMSIZE 1} -{$IMAGEBASE $400000} -{$DESCRIPTION 'VistA RPC Broker'} -{$DESIGNONLY} -{$IMPLICITBUILD ON} - -requires - XWB_R70, - vcl, - designide; - -contains - RpcbEdtr in 'RpcbEdtr.pas' {in 'Rpcbedtr.pas'}, - XWBReg in 'XWBReg.pas' {in 'XWBReg.pas'}; - -end. diff --git a/BDK32/Source/XWB_D70.res b/BDK32/Source/XWB_D70.res deleted file mode 100644 index ed6de07..0000000 Binary files a/BDK32/Source/XWB_D70.res and /dev/null differ diff --git a/BDK32/Source/XWB_R50.dof b/BDK32/Source/XWB_R50.dof deleted file mode 100644 index 010e754..0000000 --- a/BDK32/Source/XWB_R50.dof +++ /dev/null @@ -1,86 +0,0 @@ -[Compiler] -A=1 -B=0 -C=0 -D=0 -E=0 -F=0 -G=1 -H=1 -I=1 -J=1 -K=0 -L=0 -M=0 -N=1 -O=1 -P=1 -Q=0 -R=0 -S=0 -T=0 -U=0 -V=1 -W=0 -X=1 -Y=0 -Z=1 -ShowHints=1 -ShowWarnings=1 -UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; -[Linker] -MapFile=0 -OutputObjs=0 -ConsoleApp=1 -DebugInfo=0 -RemoteSymbols=0 -MinStackSize=16384 -MaxStackSize=1048576 -ImageBase=4194304 -ExeDescription=VistA RPC Broker Runtime Package -[Directories] -OutputDir= -UnitOutputDir=..\D5 -PackageDLLOutputDir= -PackageDCPOutputDir= -SearchPath= -Packages=Vcl50;Vclx50;Vcldb50; -Conditionals= -DebugSourceDirs= -UsePackages=0 -[Parameters] -RunParams= -HostApplication= -[Version Info] -IncludeVerInfo=1 -AutoIncBuild=1 -MajorVer=1 -MinorVer=1 -Release=40 -Build=11 -Debug=0 -PreRelease=0 -Special=0 -Private=0 -DLL=0 -Locale=1033 -CodePage=1252 -[Version Info Keys] -CompanyName=Dept of Veterans Affairs, VHA, OI, SD&D -FileDescription=TRPCBroker component -FileVersion=1.1.40.11 -InternalName=XWB*1.1*40 -LegalCopyright= -LegalTrademarks= -OriginalFilename= -ProductName=TRPCBroker -ProductVersion=1.1.40.0 -Comments= -[Excluded Packages] -$(DELPHI)\Bin\dclite50.bpl=Borland Integrated Translation Environment -[HistoryLists\hlUnitAliases] -Count=1 -Item0=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; -[HistoryLists\hlUnitOutputDirectory] -Count=1 -Item0=..\D5 diff --git a/BDK32/Source/XWB_R50.dpk b/BDK32/Source/XWB_R50.dpk deleted file mode 100644 index 8383438..0000000 --- a/BDK32/Source/XWB_R50.dpk +++ /dev/null @@ -1,57 +0,0 @@ -package XWB_R50; - -{$R *.RES} -{$ALIGN ON} -{$ASSERTIONS OFF} -{$BOOLEVAL OFF} -{$DEBUGINFO OFF} -{$EXTENDEDSYNTAX ON} -{$IMPORTEDDATA ON} -{$IOCHECKS ON} -{$LOCALSYMBOLS OFF} -{$LONGSTRINGS ON} -{$OPENSTRINGS ON} -{$OPTIMIZATION ON} -{$OVERFLOWCHECKS OFF} -{$RANGECHECKS OFF} -{$REFERENCEINFO OFF} -{$SAFEDIVIDE OFF} -{$STACKFRAMES OFF} -{$TYPEDADDRESS OFF} -{$VARSTRINGCHECKS ON} -{$WRITEABLECONST ON} -{$MINENUMSIZE 1} -{$IMAGEBASE $400000} -{$DESCRIPTION 'VistA RPC Broker Runtime Package'} -{$RUNONLY} -{$IMPLICITBUILD OFF} - -requires - vcl50; - -contains - Xwbut1 in 'Xwbut1.pas' {in 'Xwbut1.pas'}, - Hash in 'Hash.pas' {in 'Hash.pas'}, - Loginfrm in 'Loginfrm.pas' {in 'Loginfrm.pas'}, - MFunStr in 'MFunStr.pas' {in 'Mfunstr.pas'}, - Rpcberr in 'Rpcberr.pas' {in 'Rpcberr.pas'}, - Rpcconf1 in 'Rpcconf1.pas' {in 'Rpcconf1.pas'}, - RpcNet in 'RpcNet.pas' {in 'Rpcnet.pas'}, - seldiv in 'seldiv.pas' {in 'SelDiv.pas'}, - Sgnoncnf in 'Sgnoncnf.pas' {in 'Sgnoncnf.pas'}, - Splvista in 'Splvista.pas' {in 'Splvista.pas'}, - Trpcb in 'Trpcb.pas' {in 'Trpcb.pas'}, - VCEdit in 'VCEdit.pas' {in 'Vcedit.pas'}, - WSockc in 'WSockc.pas' {in 'WSockc.pas'}, - frmSignonMessage in 'frmSignonMessage.pas' {frmSignonMsg}, - RpcSLogin in 'RpcSLogin.pas' {in 'Rpcslogin.pas'}, - XWBRich20 in 'XWBRich20.PAS', - AddServer in 'AddServer.pas' {frmAddServer}, - fRPCBErrMsg in 'fRPCBErrMsg.pas' {frmErrMsg}, - fDebugInfo in 'fDebugInfo.pas' {frmDebugInfo}, - fSgnonDlg in 'fSgnonDlg.pas' {frmSignonDialog}, - CCOWRPCBroker in 'CCOWRPCBroker.pas', - CCOW_const in 'CCOW_const.pas', - VERGENCECONTEXTORLib_TLB in 'VERGENCECONTEXTORLib_TLB.pas'; - -end. diff --git a/BDK32/Source/XWB_R50.res b/BDK32/Source/XWB_R50.res deleted file mode 100644 index 0de7611..0000000 Binary files a/BDK32/Source/XWB_R50.res and /dev/null differ diff --git a/BDK32/Source/XWB_R60.dof b/BDK32/Source/XWB_R60.dof deleted file mode 100644 index 047ca95..0000000 --- a/BDK32/Source/XWB_R60.dof +++ /dev/null @@ -1,94 +0,0 @@ -[FileVersion] -Version=6.0 -[Compiler] -A=8 -B=0 -C=0 -D=0 -E=0 -F=0 -G=1 -H=1 -I=1 -J=1 -K=0 -L=0 -M=0 -N=1 -O=1 -P=1 -Q=0 -R=0 -S=0 -T=0 -U=0 -V=1 -W=0 -X=1 -Y=0 -Z=1 -ShowHints=1 -ShowWarnings=1 -UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; -[Linker] -MapFile=0 -OutputObjs=0 -ConsoleApp=1 -DebugInfo=0 -RemoteSymbols=0 -MinStackSize=16384 -MaxStackSize=1048576 -ImageBase=4194304 -ExeDescription=VistA RPC Broker Runtime Package -[Directories] -OutputDir= -UnitOutputDir=..\D6 -PackageDLLOutputDir= -PackageDCPOutputDir= -SearchPath= -Packages=Vcl50;Vclx50;Vcldb50; -Conditionals= -DebugSourceDirs= -UsePackages=0 -[Parameters] -RunParams= -HostApplication= -Launcher= -UseLauncher=0 -DebugCWD= -[Language] -ActiveLang= -ProjectLang=$00000409 -RootDir= -[Version Info] -IncludeVerInfo=1 -AutoIncBuild=1 -MajorVer=1 -MinorVer=1 -Release=40 -Build=11 -Debug=0 -PreRelease=0 -Special=0 -Private=0 -DLL=0 -Locale=1033 -CodePage=1252 -[Version Info Keys] -CompanyName=Dept of Veterans Affairs, VHA, OI, SD&D -FileDescription=TRPCBroker component -FileVersion=1.1.40.11 -InternalName= -LegalCopyright=(c) 1996-2004 -LegalTrademarks= -OriginalFilename= -ProductName=TRPCBroker -ProductVersion=1.1.40.0 -Comments= -[HistoryLists\hlUnitAliases] -Count=1 -Item0=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; -[HistoryLists\hlUnitOutputDirectory] -Count=2 -Item0=..\D6 -Item1=..\D5 diff --git a/BDK32/Source/XWB_R60.dpk b/BDK32/Source/XWB_R60.dpk deleted file mode 100644 index db03763..0000000 --- a/BDK32/Source/XWB_R60.dpk +++ /dev/null @@ -1,57 +0,0 @@ -package XWB_R60; - -{$R *.res} -{$ALIGN 8} -{$ASSERTIONS OFF} -{$BOOLEVAL OFF} -{$DEBUGINFO OFF} -{$EXTENDEDSYNTAX ON} -{$IMPORTEDDATA ON} -{$IOCHECKS ON} -{$LOCALSYMBOLS OFF} -{$LONGSTRINGS ON} -{$OPENSTRINGS ON} -{$OPTIMIZATION ON} -{$OVERFLOWCHECKS OFF} -{$RANGECHECKS OFF} -{$REFERENCEINFO OFF} -{$SAFEDIVIDE OFF} -{$STACKFRAMES OFF} -{$TYPEDADDRESS OFF} -{$VARSTRINGCHECKS ON} -{$WRITEABLECONST ON} -{$MINENUMSIZE 1} -{$IMAGEBASE $400000} -{$DESCRIPTION 'VistA RPC Broker Runtime Package'} -{$RUNONLY} -{$IMPLICITBUILD ON} - -requires - vcl; - -contains - Xwbut1 in 'Xwbut1.pas' {in 'Xwbut1.pas'}, - Hash in 'Hash.pas' {in 'Hash.pas'}, - Loginfrm in 'Loginfrm.pas' {in 'Loginfrm.pas'}, - MFunStr in 'MFunStr.pas' {in 'Mfunstr.pas'}, - Rpcberr in 'Rpcberr.pas' {in 'Rpcberr.pas'}, - Rpcconf1 in 'Rpcconf1.pas' {in 'Rpcconf1.pas'}, - RpcNet in 'RpcNet.pas' {in 'Rpcnet.pas'}, - seldiv in 'seldiv.pas' {in 'SelDiv.pas'}, - Sgnoncnf in 'Sgnoncnf.pas' {in 'Sgnoncnf.pas'}, - Splvista in 'Splvista.pas' {in 'Splvista.pas'}, - Trpcb in 'Trpcb.pas' {in 'Trpcb.pas'}, - VCEdit in 'VCEdit.pas' {in 'Vcedit.pas'}, - WSockc in 'WSockc.pas' {in 'WSockc.pas'}, - frmSignonMessage in 'frmSignonMessage.pas' {in 'frmSignonMessage.pas'}, - RpcSLogin in 'RpcSLogin.pas' {in 'Rpcslogin.pas'}, - XWBRich20 in 'XWBRich20.PAS', - AddServer in 'AddServer.pas' {frmAddServer}, - fRPCBErrMsg in 'fRPCBErrMsg.pas' {frmErrMsg}, - fSgnonDlg in 'fSgnonDlg.pas' {frmSignonDialog}, - fDebugInfo in 'fDebugInfo.pas' {frmDebugInfo}, - CCOWRPCBroker in 'CCOWRPCBroker.pas', - CCOW_const in 'CCOW_const.pas', - VERGENCECONTEXTORLib_TLB in 'VERGENCECONTEXTORLib_TLB.pas'; - -end. diff --git a/BDK32/Source/XWB_R60.res b/BDK32/Source/XWB_R60.res deleted file mode 100644 index 08f5564..0000000 Binary files a/BDK32/Source/XWB_R60.res and /dev/null differ diff --git a/BDK32/Source/XWB_R70.dof b/BDK32/Source/XWB_R70.dof deleted file mode 100644 index bd9825e..0000000 --- a/BDK32/Source/XWB_R70.dof +++ /dev/null @@ -1,144 +0,0 @@ -[FileVersion] -Version=7.0 -[Compiler] -A=8 -B=0 -C=0 -D=0 -E=0 -F=0 -G=1 -H=1 -I=1 -J=1 -K=0 -L=0 -M=0 -N=1 -O=1 -P=1 -Q=0 -R=0 -S=0 -T=0 -U=0 -V=1 -W=0 -X=1 -Y=0 -Z=1 -ShowHints=1 -ShowWarnings=1 -UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; -NamespacePrefix= -SymbolDeprecated=1 -SymbolLibrary=1 -SymbolPlatform=1 -UnitLibrary=1 -UnitPlatform=1 -UnitDeprecated=1 -HResultCompat=1 -HidingMember=1 -HiddenVirtual=1 -Garbage=1 -BoundsError=1 -ZeroNilCompat=1 -StringConstTruncated=1 -ForLoopVarVarPar=1 -TypedConstVarPar=1 -AsgToTypedConst=1 -CaseLabelRange=1 -ForVariable=1 -ConstructingAbstract=1 -ComparisonFalse=1 -ComparisonTrue=1 -ComparingSignedUnsigned=1 -CombiningSignedUnsigned=1 -UnsupportedConstruct=1 -FileOpen=1 -FileOpenUnitSrc=1 -BadGlobalSymbol=1 -DuplicateConstructorDestructor=1 -InvalidDirective=1 -PackageNoLink=1 -PackageThreadVar=1 -ImplicitImport=1 -HPPEMITIgnored=1 -NoRetVal=1 -UseBeforeDef=1 -ForLoopVarUndef=1 -UnitNameMismatch=1 -NoCFGFileFound=1 -MessageDirective=1 -ImplicitVariants=1 -UnicodeToLocale=1 -LocaleToUnicode=1 -ImagebaseMultiple=1 -SuspiciousTypecast=1 -PrivatePropAccessor=1 -UnsafeType=1 -UnsafeCode=1 -UnsafeCast=1 -[Linker] -MapFile=0 -OutputObjs=0 -ConsoleApp=1 -DebugInfo=0 -RemoteSymbols=0 -MinStackSize=16384 -MaxStackSize=1048576 -ImageBase=4194304 -ExeDescription=VistA RPC Broker Runtime Package -[Directories] -OutputDir= -UnitOutputDir=..\D7 -PackageDLLOutputDir= -PackageDCPOutputDir= -SearchPath= -Packages=Vcl50;Vclx50;Vcldb50; -Conditionals= -DebugSourceDirs= -UsePackages=0 -[Parameters] -RunParams= -HostApplication= -Launcher= -UseLauncher=0 -DebugCWD= -[Language] -ActiveLang= -ProjectLang= -RootDir= -[Version Info] -IncludeVerInfo=1 -AutoIncBuild=1 -MajorVer=1 -MinorVer=1 -Release=40 -Build=11 -Debug=0 -PreRelease=0 -Special=0 -Private=0 -DLL=0 -Locale=1033 -CodePage=1252 -[Version Info Keys] -CompanyName=Dept of Veterans Affairs, VHA, OI, SD&D -FileDescription=TRPCBroker component -FileVersion=1.1.40.11 -InternalName= -LegalCopyright=(c) 1996-2004 -LegalTrademarks= -OriginalFilename= -ProductName=TRPCBroker -ProductVersion=1.1.40.0 -Comments= -[HistoryLists\hlUnitAliases] -Count=1 -Item0=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; -[HistoryLists\hlUnitOutputDirectory] -Count=3 -Item0=..\D7 -Item1=..\D6 -Item2=..\D5 diff --git a/BDK32/Source/XWB_R70.dpk b/BDK32/Source/XWB_R70.dpk deleted file mode 100644 index 3e4c9e6..0000000 --- a/BDK32/Source/XWB_R70.dpk +++ /dev/null @@ -1,58 +0,0 @@ -package XWB_R70; - -{$R *.res} -{$ALIGN 8} -{$ASSERTIONS OFF} -{$BOOLEVAL OFF} -{$DEBUGINFO OFF} -{$EXTENDEDSYNTAX ON} -{$IMPORTEDDATA ON} -{$IOCHECKS ON} -{$LOCALSYMBOLS OFF} -{$LONGSTRINGS ON} -{$OPENSTRINGS ON} -{$OPTIMIZATION ON} -{$OVERFLOWCHECKS OFF} -{$RANGECHECKS OFF} -{$REFERENCEINFO OFF} -{$SAFEDIVIDE OFF} -{$STACKFRAMES OFF} -{$TYPEDADDRESS OFF} -{$VARSTRINGCHECKS ON} -{$WRITEABLECONST ON} -{$MINENUMSIZE 1} -{$IMAGEBASE $400000} -{$DESCRIPTION 'VistA RPC Broker Runtime Package'} -{$RUNONLY} -{$IMPLICITBUILD ON} - -requires - vcl, - rtl; - -contains - Xwbut1 in 'Xwbut1.pas' {in 'Xwbut1.pas'}, - Hash in 'Hash.pas' {in 'Hash.pas'}, - Loginfrm in 'Loginfrm.pas' {in 'Loginfrm.pas'}, - MFunStr in 'MFunStr.pas' {in 'Mfunstr.pas'}, - Rpcberr in 'Rpcberr.pas' {in 'Rpcberr.pas'}, - Rpcconf1 in 'Rpcconf1.pas' {in 'Rpcconf1.pas'}, - RpcNet in 'RpcNet.pas' {in 'Rpcnet.pas'}, - seldiv in 'seldiv.pas' {in 'SelDiv.pas'}, - Sgnoncnf in 'Sgnoncnf.pas' {in 'Sgnoncnf.pas'}, - Splvista in 'Splvista.pas' {in 'Splvista.pas'}, - Trpcb in 'Trpcb.pas' {in 'Trpcb.pas'}, - VCEdit in 'VCEdit.pas' {in 'Vcedit.pas'}, - WSockc in 'WSockc.pas' {in 'WSockc.pas'}, - frmSignonMessage in 'frmSignonMessage.pas' {in 'frmSignonMessage.pas'}, - RpcSLogin in 'RpcSLogin.pas' {in 'Rpcslogin.pas'}, - XWBRich20 in 'XWBRich20.PAS', - AddServer in 'AddServer.pas' {frmAddServer}, - fRPCBErrMsg in 'fRPCBErrMsg.pas' {frmErrMsg}, - fDebugInfo in 'fDebugInfo.pas' {frmDebugInfo}, - fSgnonDlg in 'fSgnonDlg.pas' {frmSignonDialog}, - CCOWRPCBroker in 'CCOWRPCBroker.pas', - CCOW_const in 'CCOW_const.pas', - VERGENCECONTEXTORLib_TLB in 'VERGENCECONTEXTORLib_TLB.pas'; - -end. diff --git a/BDK32/Source/XWB_R70.res b/BDK32/Source/XWB_R70.res deleted file mode 100644 index 08f5564..0000000 Binary files a/BDK32/Source/XWB_R70.res and /dev/null differ diff --git a/BDK32/Source/Xwbut1.pas b/BDK32/Source/Xwbut1.pas deleted file mode 100644 index c43a630..0000000 --- a/BDK32/Source/Xwbut1.pas +++ /dev/null @@ -1,319 +0,0 @@ -{ ************************************************************** - Package: XWB - Kernel RPCBroker - Date Created: Sept 18, 1997 (Version 1.1) - Site Name: Oakland, OI Field Office, Dept of Veteran Affairs - Developers: Danila Manapsal, Don Craven, Joel Ivey - Description: Contains utilities used by the BDK. - Current Release: Version 1.1 Patch 40 (January 7, 2005)) -*************************************************************** } - -unit Xwbut1; - -interface - -Uses -Sysutils, Classes, Messages, WinProcs, IniFiles, -Dialogs, Registry; - -const - xwb_ConnectAction = wm_User + 200; - IniFile = 'VISTA.INI'; - BrokerSection = 'RPCBroker'; - BrokerServerSection = 'RPCBroker_Servers'; - TAB = #9; - {For Registry interaction} - {Roots} - HKCR = HKEY_CLASSES_ROOT; - HKCU = HKEY_CURRENT_USER; - HKLM = HKEY_LOCAL_MACHINE; - HKU = HKEY_USERS; - HKCC = HKEY_CURRENT_CONFIG; - HKDD = HKEY_DYN_DATA; - {Keys} - REG_BROKER = 'Software\Vista\Broker'; - REG_VISTA = 'Software\Vista'; - REG_SIGNON = 'Software\Vista\Signon'; - REG_SERVERS = 'Software\Vista\Broker\Servers'; - -var - RetryLimit: integer; - - -function BuildSect(s1: string; s2: string): string; -procedure GetHostList(HostList: TStrings); -function GetHostsPath : String; -function GetIniValue(Value, Default: string): string; -function Iff(Condition: boolean; strTrue, strFalse: string): string; -function Sizer (s1: string; s2: string): string; -function ReadRegData(Root : HKEY; Key, Name : string) : string; -procedure WriteRegData(Root: HKEY; Key, Name, Value : string); -procedure DeleteRegData(Root: HKEY; Key, Name : string); -function ReadRegDataDefault(Root: HKEY; Key, Name, Default : string) : string; -procedure ReadRegValues(Root: HKEY; Key : string; var RegValues : TStringList); -procedure ReadRegValueNames(Root:HKEY; Key : string; var RegNames : TStringlist); - -implementation - - - -{---------------------------- BuildSect --------------------------- -------------------------------------------------------------------} -Function BuildSect(s1: string; s2: string): string; -var - s, x: string[100]; -begin - if s2 <> '' then - s := s1 + s2 - else - s := s1; - - x := IntToStr(length(s)); - if length(x) = 1 then x := '00' + x; - if length(x) = 2 then x := '0' + x; - Result := x + s; -end; - - - -{--------------------------- GetHostList -------------------------- -Reads HOSTS file and fills the passed HostList with all -entries from that file. -------------------------------------------------------------------} -procedure GetHostList(HostList: TStrings); -var - I, SpacePos: integer; - IP, HostName: string; - S : string; //Individual line from Hosts file. - WholeList: TStringList; -begin - - HostList.Clear; - WholeList := nil; - try - WholeList := TStringList.Create; {create temp buffer} - WholeList.LoadFromFile(GetHostsPath + '\HOSTS'); {read in the file} - for I := 0 to WholeList.Count - 1 do - begin - S := WholeList[I]; - {ignore lines that start with '#' and empty lines} - if (Copy(S,1,1) <> '#') and (Length(S) > 0) then - begin - while Pos(TAB, S) > 0 do //Convert tabs to spaces - S[Pos(TAB, S)] := ' '; - IP := Copy(S,1,pos(' ', S)-1); {get IP addr} - {parse out Host name} - SpacePos := Length(IP) + 1; - while Copy(S,SpacePos,1) = ' ' do inc(SpacePos); - HostName := Copy(S,SpacePos,255); - if pos(' ',HostName) > 0 then - HostName := Copy(HostName,1,pos(' ',HostName)-1); - if pos('#',HostName) > 0 then - HostName := Copy(HostName,1,pos('#',HostName)-1); - HostList.Add(HostName+' [' + IP + ']'); - end{if}; - end{for}; - finally - WholeList.Free; - end{try}; -end; - -{GetHostsPath returns path to host file without terminating '\'. -If path in VISTA.INI that is used. Otherwise, path is determined based -on default windows directory and Windows OS.} -function GetHostsPath : String; -var - OsInfo : TOSVersionInfo; //Type for OS info - HostsPath : String; - WinDir : PChar; -begin - Result := ''; - OSInfo.dwOSVersionInfoSize := SizeOf(OsInfo); - GetVersionEx(OSInfo); // Retrieve OS info - WinDir := StrAlloc(MAX_PATH + 1); - GetWindowsDirectory(WinDir, MAX_PATH); //Retieve windows directory - HostsPath := StrPas(WinDir); - StrDispose(WinDir); - {Now check OS. VER_PLATFORM_WIN32_WINDOWS indicates Windows 95. - If Windows 95, hosts default directory is windows directory. - Else assume NT and append NT's directory for hosts to windows directory.} - if OSInfo.dwPlatformID <> VER_PLATFORM_WIN32_WINDOWS then - HostsPath := HostsPath + '\system32\drivers\etc'; - HostsPath := GetIniValue('HostsPath',HostsPath); - if Copy(HostsPath, Length(HostsPath), 1) = '\' then //Strip terminating '\' - HostsPath := Copy(HostsPath, 1, Length(HostsPath)-1); - Result := HostsPath; -end; - - -{-------------------------- GetIniValue -------------------------- -------------------------------------------------------------------} -function GetIniValue(Value, Default: string): string; -var - DhcpIni: TIniFile; - pchWinDir: array[0..100] of char; -begin - GetWindowsDirectory(pchWinDir, SizeOf(pchWinDir)); - DhcpIni := TIniFile.Create(IniFile); - Result := DhcpIni.ReadString(BrokerSection, Value, 'Could not find!'); - if Result = 'Could not find!' then begin - if ((Value <> 'Installing') and (GetIniValue('Installing','0') <> '1')) then - {during Broker install Installing=1 so warnings should not display} - begin - DhcpIni.WriteString(BrokerSection, Value, Default); {Creates vista.ini - if necessary} - end; - Result := Default; - end; - DhcpIni.Free; -end; - - - -{------------------------------ Iff ------------------------------ -------------------------------------------------------------------} -function Iff(Condition: boolean; strTrue, strFalse: string): string; -begin - if Condition then Result := strTrue else Result := strFalse; -end; - - -{------------------------------ Sizer ----------------------------- -This function is used in conjunction with the ListSetUp function. It returns -the number of characters found in the string passed in. The string is -returned with a leading 0 for the 3 character number format required by the -broker call. -------------------------------------------------------------------} -function Sizer (s1: string; s2: string): string; -var - x: integer; - st: string; -begin - st := s1 + s2; - x := Length(st); - st := IntToStr(x); - if length(st) < 3 then - Result := '0' + st - else - Result := st; -end; - -{Function to retrieve a data value from the Windows Registry. -If Key or Name does not exist, null returned.} -function ReadRegData(Root: HKEY; Key, Name : string) : string; -var - Registry: TRegistry; -begin - Result := ''; - Registry := TRegistry.Create; - try - Registry.RootKey := Root; - if Registry.OpenKeyReadOnly(Key) then - begin - Result := Registry.ReadString(Name); - Registry.CloseKey; - end; - finally - Registry.Free; - end; -end; - -{Function to set a data value into the Windows Registry. -If Key or Name does not exist, it is created.} -procedure WriteRegData(Root: HKEY; Key, Name, Value : string); -var - Registry: TRegistry; -begin - Registry := TRegistry.Create; - try - Registry.RootKey := Root; - if Registry.OpenKey(Key, True) then - begin - Registry.WriteString(Name, Value); - Registry.CloseKey; - end; - finally - Registry.Free; - end; -end; - -{Procedure to delete a data value into the Windows Registry.} -procedure DeleteRegData(Root: HKEY; Key, Name : string); -var - Registry: TRegistry; -begin - Registry := TRegistry.Create; - try - Registry.RootKey := Root; - if Registry.OpenKey(Key, True) then - begin - Registry.DeleteValue(Name); - Registry.CloseKey; - end; - finally - Registry.Free; - end; -end; - - -{Returns string value from registry. If value is '', then Default -value is filed in Registry and Default is returned.} -function ReadRegDataDefault(Root: HKEY; Key, Name, Default : string) : string; -begin - Result := ReadRegData(Root, Key, Name); - if Result = '' then - begin - WriteRegData(Root, Key, Name, Default); - Result := Default; - end; -end; - -{Returns name=value pairs for a key. Format returned same as found in .ini -files. Useful with the Values method of TStringList.} -procedure ReadRegValues(Root: HKEY; Key : string; var RegValues : TStringList); -var - RegNames : TStringList; - Registry : TRegistry; - i : integer; -begin - RegNames := TStringlist.Create; - Registry := TRegistry.Create; - try - Registry.RootKey := Root; - if Registry.OpenKeyReadOnly(Key) then - begin - Registry.GetValueNames(RegNames); - for i := 0 to (RegNames.Count - 1) do - RegValues.Add(RegNames.Strings[i] + '=' - + Registry.ReadString(RegNames.Strings[i])); - end - else - RegValues.Add(''); - finally - Registry.Free; - RegNames.Free; - end; -end; - -procedure ReadRegValueNames(Root:HKEY; Key : string; var RegNames : TStringlist); -var - Registry : TRegistry; - ReturnedNames : TStringList; -begin - RegNames.Clear; - Registry := TRegistry.Create; - ReturnedNames := TStringList.Create; - try - Registry.RootKey := Root; - if Registry.OpenKeyReadOnly(Key) then - begin - Registry.GetValueNames(ReturnedNames); - RegNames.Assign(ReturnedNames); - end; - finally - Registry.Free; - ReturnedNames.Free; - end; -end; - -end. - diff --git a/BDK32/Source/dunit.ini b/BDK32/Source/dunit.ini deleted file mode 100644 index 845f92e..0000000 --- a/BDK32/Source/dunit.ini +++ /dev/null @@ -1,62 +0,0 @@ -[Tests] -Unit Tests=1 -[Tests.Unit Tests] -type of suite=1 -ReadRegistry=1 -Test Piece=1 -Test Translate=1 -[Tests.Unit Tests.type of suite] -TTestType=1 -[GUITestRunner Config] -AutoSave=1 -Left=22 -Top=22 -Width=827 -Height=602 -ResultsPanel.Height=191 -ErrorMessage.Height=44 -ErrorMessage.Visible=1 -FailureList.ColumnWidth[0]=180 -FailureList.ColumnWidth[1]=100 -AutoFocus=1 -HideTestNodesOnOpen=0 -BreakOnFailures=0 -[Tests.Unit Tests.ReadRegistry] -TTestSgnoncnf=1 -[Tests.Unit Tests.ReadRegistry.TTestSgnoncnf] -TestReadRegistry=1 -TestShowModal=1 -TestShowModal1=1 -TestShowModal2=1 -[Tests.Unit Tests.Test Piece] -TTestMFunStr=1 -TTestMFunStr1=1 -[Tests.Unit Tests.Test Piece.TTestMFunStr] -TestPiece=1 -TestPiece1=1 -Setup=1 -TestPiece2=1 -TestPiece3=1 -TestPiece4=1 -TestPiece5=1 -TestPiece6=1 -TestPiece7=1 -TestPiece8=1 -TestPiece9=1 -[Tests.Unit Tests.Test Piece.TTestMFunStr1] -TestPiece1=1 -TestPiece2=1 -TestPiece3=1 -TestPiece4=1 -TestPiece5=1 -TestPiece6=1 -TestPiece7=1 -TestPiece8=1 -TestPiece9=1 -[Tests.Unit Tests.Test Translate] -TTestMFunStr2=1 -[Tests.Unit Tests.Test Translate.TTestMFunStr2] -TestTran1=1 -TestTran2=1 -TestTran3=1 -TestTran4=1 diff --git a/BDK32/Source/fDebugInfo.dfm b/BDK32/Source/fDebugInfo.dfm deleted file mode 100644 index 78ae8d2..0000000 --- a/BDK32/Source/fDebugInfo.dfm +++ /dev/null @@ -1,34 +0,0 @@ -object frmDebugInfo: TfrmDebugInfo - Left = 255 - Top = 107 - Width = 329 - Height = 217 - Caption = 'RPCBroker Debug Info' - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'MS Sans Serif' - Font.Style = [] - FormStyle = fsStayOnTop - OldCreateOrder = False - PixelsPerInch = 96 - TextHeight = 13 - object lblDebugInfo: TLabel - Left = 44 - Top = 16 - Width = 233 - Height = 105 - AutoSize = False - end - object btnOK: TButton - Left = 123 - Top = 144 - Width = 75 - Height = 25 - Caption = '&OK' - Default = True - ModalResult = 1 - TabOrder = 0 - end -end diff --git a/BDK32/Source/fDebugInfo.pas b/BDK32/Source/fDebugInfo.pas deleted file mode 100644 index 9d5b215..0000000 --- a/BDK32/Source/fDebugInfo.pas +++ /dev/null @@ -1,35 +0,0 @@ -{ ************************************************************** - Package: XWB - Kernel RPCBroker - Date Created: Sept 18, 1997 (Version 1.1) - Site Name: Oakland, OI Field Office, Dept of Veteran Affairs - Developers: Joel Ivey - Description: Displays Information for Debug Mode. - Current Release: Version 1.1 Patch 40 (January 7, 2005)) -*************************************************************** } - -unit fDebugInfo; - -interface - -uses - Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, - StdCtrls; - -type - TfrmDebugInfo = class(TForm) - lblDebugInfo: TLabel; - btnOK: TButton; - private - { Private declarations } - public - { Public declarations } - end; - -var - frmDebugInfo: TfrmDebugInfo; - -implementation - -{$R *.DFM} - -end. diff --git a/BDK32/Source/fRPCBErrMsg.dfm b/BDK32/Source/fRPCBErrMsg.dfm deleted file mode 100644 index 3e47ce3..0000000 --- a/BDK32/Source/fRPCBErrMsg.dfm +++ /dev/null @@ -1,42 +0,0 @@ -object frmErrMsg: TfrmErrMsg - Left = 325 - Top = 293 - Width = 376 - Height = 215 - Caption = 'Error Encountered' - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'MS Sans Serif' - Font.Style = [] - FormStyle = fsStayOnTop - OldCreateOrder = False - PixelsPerInch = 96 - TextHeight = 13 - object Button1: TButton - Left = 146 - Top = 152 - Width = 75 - Height = 25 - Caption = 'OK' - ModalResult = 1 - TabOrder = 0 - end - object mmoErrorMessage: TMemo - Left = 8 - Top = 16 - Width = 345 - Height = 129 - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'Fixedsys' - Font.Style = [] - Lines.Strings = ( - '') - ParentFont = False - ScrollBars = ssVertical - TabOrder = 1 - end -end diff --git a/BDK32/Source/fRPCBErrMsg.pas b/BDK32/Source/fRPCBErrMsg.pas deleted file mode 100644 index 32186d9..0000000 --- a/BDK32/Source/fRPCBErrMsg.pas +++ /dev/null @@ -1,55 +0,0 @@ -{ ************************************************************** - Package: XWB - Kernel RPCBroker - Date Created: Sept 18, 1997 (Version 1.1) - Site Name: Oakland, OI Field Office, Dept of Veteran Affairs - Developers: Joel Ivey - Description: Error Display to permit application control over - bringing it to the front. - Current Release: Version 1.1 Patch 40 (January 7, 2005)) -*************************************************************** } - -unit fRPCBErrMsg; - -interface - -uses - Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, - StdCtrls; - -type - TfrmErrMsg = class(TForm) - Button1: TButton; - mmoErrorMessage: TMemo; - private - { Private declarations } - public - { Public declarations } - class procedure RPCBShowException(Sender: TObject; E: Exception); - end; - -procedure RPCBShowErrMsg(ErrorText: String); - -var - frmErrMsg: TfrmErrMsg; - -implementation - -{$R *.DFM} - -procedure RPCBShowErrMsg(ErrorText: String); -begin - frmErrMsg := TfrmErrMsg.Create(Application); - frmErrMsg.mmoErrorMessage.Lines.Add(ErrorText); - frmErrMsg.ShowModal; - frmErrMsg.Free; -end; - -class procedure TfrmErrMsg.RPCBShowException(Sender: TObject; E: Exception); -begin - frmErrMsg := TfrmErrMsg.Create(Application); - frmErrMsg.mmoErrorMessage.Lines.Add(E.Message); - frmErrMsg.ShowModal; - frmErrMsg.Free; -end; - -end. diff --git a/BDK32/Source/fRPCSharedBrokerSessionMgr1.dfm b/BDK32/Source/fRPCSharedBrokerSessionMgr1.dfm deleted file mode 100644 index 1f2bbce..0000000 --- a/BDK32/Source/fRPCSharedBrokerSessionMgr1.dfm +++ /dev/null @@ -1,16 +0,0 @@ -object Form1: TForm1 - Left = 215 - Top = 111 - Width = 696 - Height = 480 - Caption = 'Form1' - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'MS Sans Serif' - Font.Style = [] - OldCreateOrder = False - PixelsPerInch = 96 - TextHeight = 13 -end diff --git a/BDK32/Source/fRPCSharedBrokerSessionMgr1.pas b/BDK32/Source/fRPCSharedBrokerSessionMgr1.pas deleted file mode 100644 index 7479d2b..0000000 --- a/BDK32/Source/fRPCSharedBrokerSessionMgr1.pas +++ /dev/null @@ -1,32 +0,0 @@ -{ ************************************************************** - Package: XWB - Kernel RPCBroker - Date Created: Sept 18, 1997 (Version 1.1) - Site Name: Oakland, OI Field Office, Dept of Veteran Affairs - Developers: Kevin Meldrum, Travis Hilton, Joel Ivey - Description: form file for RPCSharedBrokerSessionMgr1. - Current Release: Version 1.1 Patch 40 (January 7, 2005)) -*************************************************************** } - -unit fRPCSharedBrokerSessionMgr1; - -interface - -uses - Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs; - -type - TForm1 = class(TForm) - private - { Private declarations } - public - { Public declarations } - end; - -var - Form1: TForm1; - -implementation - -{$R *.DFM} - -end. diff --git a/BDK32/Source/fSgnonDlg.dfm b/BDK32/Source/fSgnonDlg.dfm deleted file mode 100644 index e781598..0000000 --- a/BDK32/Source/fSgnonDlg.dfm +++ /dev/null @@ -1,126 +0,0 @@ -object frmSignonDialog: TfrmSignonDialog - Left = 212 - Top = 111 - Width = 326 - Height = 188 - Caption = 'Configuration Selection Question' - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'MS Sans Serif' - Font.Style = [] - FormStyle = fsStayOnTop - OldCreateOrder = False - PixelsPerInch = 96 - TextHeight = 13 - object Label1: TLabel - Left = 32 - Top = 8 - Width = 220 - Height = 96 - Caption = 'Do you want to use the standard Windows Window Background Color?' - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -19 - Font.Name = 'MS Sans Serif' - Font.Style = [fsBold] - ParentFont = False - WordWrap = True - end - object btnOK: TBitBtn - Left = 48 - Top = 120 - Width = 75 - Height = 25 - Caption = 'OK' - Default = True - ModalResult = 1 - TabOrder = 0 - Glyph.Data = { - BE060000424DBE06000000000000360400002800000024000000120000000100 - 0800000000008802000000000000000000000001000000010000000000000000 - 80000080000000808000800000008000800080800000C0C0C000C0DCC000F0C8 - A400000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000F0FBFF00A4A0A000808080000000 - FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00030303030303 - 0303030303030303030303030303030303030303030303030303030303030303 - 03030303030303030303030303030303030303030303FF030303030303030303 - 03030303030303040403030303030303030303030303030303F8F8FF03030303 - 03030303030303030303040202040303030303030303030303030303F80303F8 - FF030303030303030303030303040202020204030303030303030303030303F8 - 03030303F8FF0303030303030303030304020202020202040303030303030303 - 0303F8030303030303F8FF030303030303030304020202FA0202020204030303 - 0303030303F8FF0303F8FF030303F8FF03030303030303020202FA03FA020202 - 040303030303030303F8FF03F803F8FF0303F8FF03030303030303FA02FA0303 - 03FA0202020403030303030303F8FFF8030303F8FF0303F8FF03030303030303 - FA0303030303FA0202020403030303030303F80303030303F8FF0303F8FF0303 - 0303030303030303030303FA0202020403030303030303030303030303F8FF03 - 03F8FF03030303030303030303030303FA020202040303030303030303030303 - 0303F8FF0303F8FF03030303030303030303030303FA02020204030303030303 - 03030303030303F8FF0303F8FF03030303030303030303030303FA0202020403 - 030303030303030303030303F8FF0303F8FF03030303030303030303030303FA - 0202040303030303030303030303030303F8FF03F8FF03030303030303030303 - 03030303FA0202030303030303030303030303030303F8FFF803030303030303 - 030303030303030303FA0303030303030303030303030303030303F803030303 - 0303030303030303030303030303030303030303030303030303030303030303 - 0303} - NumGlyphs = 2 - end - object btnNO: TBitBtn - Left = 160 - Top = 120 - Width = 75 - Height = 25 - Cancel = True - Caption = 'NO' - ModalResult = 2 - TabOrder = 1 - Glyph.Data = { - DE010000424DDE01000000000000760000002800000024000000120000000100 - 0400000000006801000000000000000000001000000000000000000000000000 - 80000080000000808000800000008000800080800000C0C0C000808080000000 - FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00333333333333 - 333333333333333333333333000033338833333333333333333F333333333333 - 0000333911833333983333333388F333333F3333000033391118333911833333 - 38F38F333F88F33300003339111183911118333338F338F3F8338F3300003333 - 911118111118333338F3338F833338F3000033333911111111833333338F3338 - 3333F8330000333333911111183333333338F333333F83330000333333311111 - 8333333333338F3333383333000033333339111183333333333338F333833333 - 00003333339111118333333333333833338F3333000033333911181118333333 - 33338333338F333300003333911183911183333333383338F338F33300003333 - 9118333911183333338F33838F338F33000033333913333391113333338FF833 - 38F338F300003333333333333919333333388333338FFF830000333333333333 - 3333333333333333333888330000333333333333333333333333333333333333 - 0000} - NumGlyphs = 2 - end -end diff --git a/BDK32/Source/fSgnonDlg.pas b/BDK32/Source/fSgnonDlg.pas deleted file mode 100644 index bbdf26a..0000000 --- a/BDK32/Source/fSgnonDlg.pas +++ /dev/null @@ -1,36 +0,0 @@ -{ ************************************************************** - Package: XWB - Kernel RPCBroker - Date Created: Sept 18, 1997 (Version 1.1) - Site Name: Oakland, OI Field Office, Dept of Veteran Affairs - Developers: Joel Ivey - Description: Signon Dialog for Initial ESSO Signon. - Current Release: Version 1.1 Patch 40 (January 7, 2005)) -*************************************************************** } - -unit fSgnonDlg; - -interface - -uses - Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, - StdCtrls, Buttons; - -type - TfrmSignonDialog = class(TForm) - btnOK: TBitBtn; - btnNO: TBitBtn; - Label1: TLabel; - private - { Private declarations } - public - { Public declarations } - end; - -var - frmSignonDialog: TfrmSignonDialog; - -implementation - -{$R *.DFM} - -end. diff --git a/BDK32/Source/fSignonConfigColor.dfm b/BDK32/Source/fSignonConfigColor.dfm deleted file mode 100644 index d1a4358..0000000 --- a/BDK32/Source/fSignonConfigColor.dfm +++ /dev/null @@ -1,126 +0,0 @@ -object frmColorSelectDialog: TfrmColorSelectDialog - Left = 205 - Top = 106 - Width = 326 - Height = 188 - Caption = 'Configuration Selection Question' - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'MS Sans Serif' - Font.Style = [] - FormStyle = fsStayOnTop - OldCreateOrder = False - PixelsPerInch = 96 - TextHeight = 13 - object Label1: TLabel - Left = 32 - Top = 8 - Width = 220 - Height = 96 - Caption = 'Do you want to use the standard Windows Window Background Color?' - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -19 - Font.Name = 'MS Sans Serif' - Font.Style = [fsBold] - ParentFont = False - WordWrap = True - end - object btnOK: TBitBtn - Left = 48 - Top = 120 - Width = 75 - Height = 25 - Caption = 'OK' - Default = True - ModalResult = 1 - TabOrder = 0 - Glyph.Data = { - BE060000424DBE06000000000000360400002800000024000000120000000100 - 0800000000008802000000000000000000000001000000010000000000000000 - 80000080000000808000800000008000800080800000C0C0C000C0DCC000F0C8 - A400000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 000000000000000000000000000000000000F0FBFF00A4A0A000808080000000 - FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00030303030303 - 0303030303030303030303030303030303030303030303030303030303030303 - 03030303030303030303030303030303030303030303FF030303030303030303 - 03030303030303040403030303030303030303030303030303F8F8FF03030303 - 03030303030303030303040202040303030303030303030303030303F80303F8 - FF030303030303030303030303040202020204030303030303030303030303F8 - 03030303F8FF0303030303030303030304020202020202040303030303030303 - 0303F8030303030303F8FF030303030303030304020202FA0202020204030303 - 0303030303F8FF0303F8FF030303F8FF03030303030303020202FA03FA020202 - 040303030303030303F8FF03F803F8FF0303F8FF03030303030303FA02FA0303 - 03FA0202020403030303030303F8FFF8030303F8FF0303F8FF03030303030303 - FA0303030303FA0202020403030303030303F80303030303F8FF0303F8FF0303 - 0303030303030303030303FA0202020403030303030303030303030303F8FF03 - 03F8FF03030303030303030303030303FA020202040303030303030303030303 - 0303F8FF0303F8FF03030303030303030303030303FA02020204030303030303 - 03030303030303F8FF0303F8FF03030303030303030303030303FA0202020403 - 030303030303030303030303F8FF0303F8FF03030303030303030303030303FA - 0202040303030303030303030303030303F8FF03F8FF03030303030303030303 - 03030303FA0202030303030303030303030303030303F8FFF803030303030303 - 030303030303030303FA0303030303030303030303030303030303F803030303 - 0303030303030303030303030303030303030303030303030303030303030303 - 0303} - NumGlyphs = 2 - end - object btnNO: TBitBtn - Left = 160 - Top = 120 - Width = 75 - Height = 25 - Cancel = True - Caption = 'NO' - ModalResult = 2 - TabOrder = 1 - Glyph.Data = { - DE010000424DDE01000000000000760000002800000024000000120000000100 - 0400000000006801000000000000000000001000000000000000000000000000 - 80000080000000808000800000008000800080800000C0C0C000808080000000 - FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00333333333333 - 333333333333333333333333000033338833333333333333333F333333333333 - 0000333911833333983333333388F333333F3333000033391118333911833333 - 38F38F333F88F33300003339111183911118333338F338F3F8338F3300003333 - 911118111118333338F3338F833338F3000033333911111111833333338F3338 - 3333F8330000333333911111183333333338F333333F83330000333333311111 - 8333333333338F3333383333000033333339111183333333333338F333833333 - 00003333339111118333333333333833338F3333000033333911181118333333 - 33338333338F333300003333911183911183333333383338F338F33300003333 - 9118333911183333338F33838F338F33000033333913333391113333338FF833 - 38F338F300003333333333333919333333388333338FFF830000333333333333 - 3333333333333333333888330000333333333333333333333333333333333333 - 0000} - NumGlyphs = 2 - end -end diff --git a/BDK32/Source/fSignonConfigColor.pas b/BDK32/Source/fSignonConfigColor.pas deleted file mode 100644 index d3bcee4..0000000 --- a/BDK32/Source/fSignonConfigColor.pas +++ /dev/null @@ -1,36 +0,0 @@ -{ ************************************************************** - Package: XWB - Kernel RPCBroker - Date Created: Sept 18, 1997 (Version 1.1) - Site Name: Oakland, OI Field Office, Dept of Veteran Affairs - Developers: Joel Ivey - Description: Color selection for signon form. - Current Release: Version 1.1 Patch 40 (January 7, 2005)) -*************************************************************** } - -unit fSignonConfigColor; - -interface - -uses - Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, - StdCtrls, Buttons; - -type - TfrmColorSelectDialog = class(TForm) - btnOK: TBitBtn; - btnNO: TBitBtn; - Label1: TLabel; - private - { Private declarations } - public - { Public declarations } - end; - -var - frmColorSelectDialog: TfrmColorSelectDialog; - -implementation - -{$R *.DFM} - -end. diff --git a/BDK32/Source/fVistaBar.dfm b/BDK32/Source/fVistaBar.dfm deleted file mode 100644 index 82cfb89..0000000 --- a/BDK32/Source/fVistaBar.dfm +++ /dev/null @@ -1,30 +0,0 @@ -object frmVistABar: TfrmVistABar - Left = 200 - Top = 200 - BorderIcons = [biSystemMenu] - BorderStyle = bsNone - ClientHeight = 213 - ClientWidth = 104 - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'MS Sans Serif' - Font.Style = [] - FormStyle = fsStayOnTop - OldCreateOrder = False - WindowState = wsMinimized - OnActivate = FormActivate - OnCreate = FormCreate - OnDestroy = FormDestroy - PixelsPerInch = 96 - TextHeight = 13 - object pmnSysTray: TPopupMenu - Left = 24 - Top = 32 - object About1: TMenuItem - Caption = '&About' - OnClick = About1Click - end - end -end diff --git a/BDK32/Source/fVistaBar.pas b/BDK32/Source/fVistaBar.pas deleted file mode 100644 index 4c6d7dd..0000000 --- a/BDK32/Source/fVistaBar.pas +++ /dev/null @@ -1,168 +0,0 @@ -{ ************************************************************** - Package: XWB - Kernel RPCBroker - Date Created: Sept 18, 1997 (Version 1.1) - Site Name: Oakland, OI Field Office, Dept of Veteran Affairs - Developers: Kevin Meldrum, Travis Hilton, Joel Ivey - Description: Basic form for RPCSharedBrokerSessionMgr1.exe. - Current Release: Version 1.1 Patch 40 (January 7, 2005)) -*************************************************************** } - -unit fVistaBar; - -interface - -uses - Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, - Buttons, StdCtrls, ExtCtrls, Menus, ShellAPI; - -const - {Support SysTray} - wm_IconNotification = wm_User + 100; //System Tray Msg Handle - ICON_OFF = 100; //IconId for not connected icon - ICON_ON = 101; //IconId for connected icon - ICON_OFF_TIP = 'RPCSharedBrokerSessionMgr: no connections'; //Tip when not connected - ICON_ON_TIP = 'RPCSharedBrokerSessionMgr'; //Tip when connected - - - -type - TfrmVistABar = class(TForm) - pmnSysTray: TPopupMenu; - About1: TMenuItem; - - procedure FormActivate(Sender: TObject); - procedure FormCreate(Sender: TObject); - function AddTrayIcon(iconId : UINT; icon : THandle; tip : string) - : Boolean; - function DeleteTrayIcon(iconId : UINT) : Boolean; - procedure FormDestroy(Sender: TObject); - procedure Exit1Click(Sender: TObject); - procedure About1Click(Sender: TObject); - private - { Private declarations } - NotifyIconData : TNOTIFYICONDATA; - TrayIconId : UINT; - TrayIcon : HICON; - TrayTip : string; - protected - procedure WMIconNotification(var Msg : TMessage); - message wm_IconNotification; - procedure wmQueryEndSession(var Msg : TMessage); - message wm_QueryEndSession; - public - { Public declarations } - end; - -var - frmVistABar: TfrmVistABar; - -implementation - -uses uSharedBroker1, frmVistAAbout; - -{$R *.DFM} -{$R *.RES} - -procedure TfrmVistABar.FormActivate(Sender: TObject); -begin - ShowWindow(Application.Handle, SW_HIDE); - Top := 0; - Left := (Screen.Width - Width) div 2; - - // Is there a better way to hide this window? - // Visible := false; // doesn't work - // TODO - // Find a way to make the main form non visible - Width := 0; - Height := 0; - -end; - -procedure TfrmVistABar.FormCreate(Sender: TObject); -var - I: Integer; -begin - for I := 1 to ParamCount do // Iterate - if UpperCase(ParamStr(I)) = 'REGISTER' then - Halt; - {Setup NotifyIconData fields that won't change} - NotifyIconData.cbSize := SizeOf(TNOTIFYICONDATA); - NotifyIconData.Wnd := Handle; - NotifyIconData.uFlags := NIF_MESSAGE or NIF_ICON or NIF_TIP; - NotifyIconData.uCallbackMessage := wm_IconNotification; - - {Setup initial icon (= NotConnected) and add it!} - TrayIconId := ICON_ON; - TrayIcon := LoadIcon(HInstance, 'ICON_ON'); //Loads icon from resource. - TrayTip := ICON_ON_TIP; - AddTrayIcon(TrayIconId, TrayIcon, TrayTip); - SetWindowLong(Application.Handle, GWL_EXSTYLE, WS_EX_TOOLWINDOW); - //ShowWindow(Application.Handle, SW_HIDE); -end; - -function TfrmVistaBar.AddTrayIcon(iconId : UINT; icon : THandle; tip : string) - : Boolean; -begin - NotifyIconData.uID := IconID; - NotifyIconData.HIcon := icon; - if tip <> '' then - StrLCopy(NotifyIconData.szTip, PChar(tip), SizeOf(NotifyIconData.szTip)) - else - NotifyIconData.szTip := #0; - Result := Shell_NotifyIcon(NIM_ADD, @NotifyIconData); -end; - -{Processes messages to the icon in the System Tray.} -procedure TfrmVistaBar.WMIconNotification(var Msg : TMessage); -var - MouseMsg : LongInt; - Pt: TPoint; -begin - MouseMsg := Msg.LParam; - - case MouseMsg of - wm_LButtonDown : - ; - wm_RButtonUp : - begin - GetCursorPos(Pt); //Used to locate pop-up menu - pmnSysTray.PopUp(Pt.X, Pt.Y); //Displays menu - end; - wm_LButtonDblClk : //DoubleClick displays form. -// mitShowClick(Self); - end; -end; - -{Event handler sets flag used in FormCloseQuery so that user is } -procedure TfrmVistaBar.wmQueryEndSession(var Msg : TMessage); -begin -// CanAutoClose := True; - Msg.Result := 1; -end; - -function TfrmVistaBar.DeleteTrayIcon(iconId : UINT) : Boolean; -begin - NotifyIconData.uID := IconID; - Result := Shell_NotifyIcon(NIM_DELETE, @ NotifyIconData); - Application.ProcessMessages; -end; - - - -procedure TfrmVistABar.FormDestroy(Sender: TObject); -begin - DeleteTrayIcon(TrayIconId); -end; - -procedure TfrmVistABar.Exit1Click(Sender: TObject); -begin - ShowMessage('If the system warns against closing this Application - DON''T CLOSE IT.#13#10Closing this when it shouldn''t be will cause any applications using it to crash'); - Halt; -end; - -procedure TfrmVistABar.About1Click(Sender: TObject); -begin - ShowAboutBox; -end; - -end. diff --git a/BDK32/Source/fVistaBar.res b/BDK32/Source/fVistaBar.res deleted file mode 100644 index 74787ae..0000000 Binary files a/BDK32/Source/fVistaBar.res and /dev/null differ diff --git a/BDK32/Source/frmSignonMessage.dfm b/BDK32/Source/frmSignonMessage.dfm deleted file mode 100644 index 6af372b..0000000 --- a/BDK32/Source/frmSignonMessage.dfm +++ /dev/null @@ -1,134 +0,0 @@ -object frmSignonMsg: TfrmSignonMsg - Left = 194 - Top = 16 - Width = 766 - Height = 630 - Caption = 'Signon Message' - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'MS Sans Serif' - Font.Style = [] - OldCreateOrder = True - Position = poScreenCenter - PixelsPerInch = 96 - TextHeight = 13 - object Panel1: TPanel - Left = 0 - Top = 0 - Width = 758 - Height = 562 - Align = alClient - BevelInner = bvLowered - BevelOuter = bvNone - BorderWidth = 3 - Caption = 'Panel1' - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'Courier New' - Font.Style = [fsBold] - ParentFont = False - TabOrder = 1 - object mmoMsg: TXWBRichEdit - Left = 4 - Top = 4 - Width = 750 - Height = 554 - Align = alClient - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'Fixedsys' - Font.Style = [fsBold] - URLDetect = True - HideScrollBars = False - Lines.Strings = ( - - '1234567891123456789212345678931234567894123456789512345678961234' + - '5678971234567898 '#13) - ParentFont = False - ReadOnly = True - ScrollBars = ssVertical - TabOrder = 0 - end - end - object Panel2: TPanel - Left = 0 - Top = 562 - Width = 758 - Height = 41 - Align = alBottom - BevelOuter = bvNone - TabOrder = 0 - OnResize = Panel2Resize - object BitBtn1: TBitBtn - Left = 342 - Top = 8 - Width = 75 - Height = 25 - Caption = '&Close' - Default = True - TabOrder = 0 - OnClick = BitBtn1Click - Glyph.Data = { - BE060000424DBE06000000000000360400002800000024000000120000000100 - 0800000000008802000000000000000000000001000000010000000000000000 - 80000080000000808000800000008000800080800000C0C0C000C0DCC000F0CA - A600F0FBFF00A4A0A000808080000000FF0000FF000000FFFF00FF000000FF00 - FF00FFFF0000FFFFFF0000000000000080000080000000808000800000008000 - 800080800000C0C0C000C0DCC000F0CAA600F0FBFF00A4A0A000808080000000 - FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00000000000000 - 80000080000000808000800000008000800080800000C0C0C000C0DCC000F0CA - A600F0FBFF00A4A0A000808080000000FF0000FF000000FFFF00FF000000FF00 - FF00FFFF0000FFFFFF0000000000000080000080000000808000800000008000 - 800080800000C0C0C000C0DCC000F0CAA600F0FBFF00A4A0A000808080000000 - FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00000000000000 - 80000080000000808000800000008000800080800000C0C0C000C0DCC000F0CA - A600F0FBFF00A4A0A000808080000000FF0000FF000000FFFF00FF000000FF00 - FF00FFFF0000FFFFFF0000000000000080000080000000808000800000008000 - 800080800000C0C0C000C0DCC000F0CAA600F0FBFF00A4A0A000808080000000 - FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00000000000000 - 80000080000000808000800000008000800080800000C0C0C000C0DCC000F0CA - A600F0FBFF00A4A0A000808080000000FF0000FF000000FFFF00FF000000FF00 - FF00FFFF0000FFFFFF0000000000000080000080000000808000800000008000 - 800080800000C0C0C000C0DCC000F0CAA600F0FBFF00A4A0A000808080000000 - FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00000000000000 - 80000080000000808000800000008000800080800000C0C0C000C0DCC000F0CA - A600F0FBFF00A4A0A000808080000000FF0000FF000000FFFF00FF000000FF00 - FF00FFFF0000FFFFFF0000000000000080000080000000808000800000008000 - 800080800000C0C0C000C0DCC000F0CAA600F0FBFF00A4A0A000808080000000 - FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00000000000000 - 80000080000000808000800000008000800080800000C0C0C000C0DCC000F0CA - A600F0FBFF00A4A0A000808080000000FF0000FF000000FFFF00FF000000FF00 - FF00FFFF0000FFFFFF0000000000000080000080000000808000800000008000 - 800080800000C0C0C000C0DCC000F0CAA600F0FBFF00A4A0A000808080000000 - FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00000000000000 - 800000800000008080008000000080008000F0FBFF00A4A0A000808080000000 - FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00030C0C0C0C0C - 0C0C0C0C0707130713070C07130C0C0C0C0C0C0C0C0C0C030303030303130404 - 04040400000C0C0C13131304040404040C0C0C0C0C0C0C0C0C0C130303031313 - 0C130303030304110500000713131304030303030C0C0C0C0C0C0C0C0C0C0303 - 030C0C0C0C13030303030405110500131313130403030303030303030C130C0C - 0C130303030C1303031303030303041105110013131313040303030303030303 - 0C0C070C0C130303030C13030313030303030405110500131213120403030303 - 030303030C130C070C130303030C130303130303030304110511001313131304 - 03030303030303030C0C070C0C130303030C1303031303030303040511050013 - 1213120403030303030303030C130C070C130303030C13030313030303030411 - 051100131313130403030303030303030C0C070C0C130303030C130303130303 - 03030405110500131213120403030303030303030C130C070C130303030C1303 - 0313030303030411051100121312130403030303030303030C0C070C0C130303 - 030C13030313030303030405110500131213120403030303030303030C130C07 - 0C130303030C1303031303030303041105110012131213040303030303030303 - 0C0C070C0C130303030C13030313030303030404040404040404040403030303 - 030303030C130C130C131313130C130303130303030303030303030303030303 - 03030303030303030C0C0C0C0C0C0C0C0C0C0303031303030303030300000000 - 0000030303030303030303030303031313131313130303030313030303030303 - 000E0E0E0E000303030303030303030303030C0C0C0C0C0C1303030303130303 - 030303030000000000000303030303030303030303030C131313130C13030303 - 0313} - NumGlyphs = 2 - end - end -end diff --git a/BDK32/Source/frmSignonMessage.pas b/BDK32/Source/frmSignonMessage.pas deleted file mode 100644 index 1883304..0000000 --- a/BDK32/Source/frmSignonMessage.pas +++ /dev/null @@ -1,49 +0,0 @@ -{ ************************************************************** - Package: XWB - Kernel RPCBroker - Date Created: Sept 18, 1997 (Version 1.1) - Site Name: Oakland, OI Field Office, Dept of Veteran Affairs - Developers: Danila Manapsal, Don Craven, Joel Ivey - Description: Displays message from server after user signon. - Current Release: Version 1.1 Patch 40 (January 7, 2005)) -*************************************************************** } - -unit frmSignonMessage; - -interface - -uses - Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, - StdCtrls, Buttons, ExtCtrls, XWBRich20; - -type - TfrmSignonMsg = class(TForm) - Panel1: TPanel; - Panel2: TPanel; - BitBtn1: TBitBtn; - mmoMsg: TXWBRichEdit; - procedure Panel2Resize(Sender: TObject); - procedure BitBtn1Click(Sender: TObject); - private - { Private declarations } - public - { Public declarations } - end; - -var - frmSignonMsg: TfrmSignonMsg; - -implementation - -{$R *.DFM} - -procedure TfrmSignonMsg.Panel2Resize(Sender: TObject); -begin - BitBtn1.Left := (Panel2.Width - BitBtn1.Width) div 2; -end; - -procedure TfrmSignonMsg.BitBtn1Click(Sender: TObject); -begin - Close; -end; - -end. diff --git a/BDK32/Source/frmVistAAbout.dfm b/BDK32/Source/frmVistAAbout.dfm deleted file mode 100644 index 9966ef6..0000000 --- a/BDK32/Source/frmVistAAbout.dfm +++ /dev/null @@ -1,1201 +0,0 @@ -object frmVistAAbout: TfrmVistAAbout - Left = 279 - Top = 106 - BorderStyle = bsDialog - Caption = 'About' - ClientHeight = 236 - ClientWidth = 353 - Color = clBtnFace - Font.Charset = DEFAULT_CHARSET - Font.Color = clWindowText - Font.Height = -11 - Font.Name = 'MS Sans Serif' - Font.Style = [] - OldCreateOrder = True - Position = poScreenCenter - OnCreate = FormCreate - PixelsPerInch = 96 - TextHeight = 13 - object Panel1: TPanel - Left = 8 - Top = 8 - Width = 337 - Height = 185 - BevelInner = bvRaised - BevelOuter = bvLowered - ParentColor = True - TabOrder = 0 - object VistaLogo: TImage - Left = 8 - Top = 8 - Width = 153 - Height = 73 - Center = True - Picture.Data = { - 07544269746D61702A880000424D2A8800000000000036000000280000009600 - 00004D0000000100180000000000F48700000000000000000000000000000000 - 0000C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C00000C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C00000C0C0C0C0C0C0DDDDDDFFFFFFDDDDDDCCCCCCB2B2B2CC - CCCCF1F1F1DDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1DDDDDDCCCCCCCCCCCCC0C0C0C0C0C0DDDDDDF1F1F1F1F1F1DDDDDDCCCC - CCFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1FF - FFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFDDDDDD - DDDDDDDDDDDDF1F1F1FFFFFFFFFFFFFFFFFFDDDDDDF1F1F1F1F1F1F1F1F1FFFF - FFFFFFFFFFFFFFDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1CCCCCCF1F1F1F1F1F1F1F1F1 - F1F1F1C0C0C0FFFFFFC0C0C0DDDDDDDDDDDDF1F1F1F1F1F1FFFFFFFFFFFFFFFF - FFDDDDDDDDDDDDCCCCCCF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1 - F1F1F1F1F1F1F1F1F1F1F1DDDDDDCCCCCCC0C0C0F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDDDDDF1F1F1DDDDDDF1F1 - F1FFFFFFF1F1F1DDDDDD999999CCCCCCF1F1F1CCCCCCCCCCCCF1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1DDDDDDCCCCCCF1F1F1F1F1F1DDDDDDCCCCCCB2B2B2 - CCCCCCC0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0F1F1F1FFFFFFF1F1F1DDDDDD - FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1CCCCCCB2B2B2CCCCCCF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1 - F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1DDDDDDDDDDDDDDDDDDDDDDDDF1F1F1F1F1F1F1F1F1DDDDDDCCCCCCF1F1F1F1 - F1F1FFFFFFFFFFFFDDDDDDC0C0C0F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1FFFFFFF1F1 - F1F1F1F1DDDDDDCCCCCCF1F1F1DDDDDDFFFFFFF1F1F1F1F1F1FFFFFFFFFFFFFF - FFFFFFFFFFF1F1F1DDDDDDCCCCCCF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1DDDDDDC0C0C0DDDDDDF1F1F1F1F1F1FFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1FF - FFFFFFFFFFF1F1F1DDDDDDC0C0C0CCCCCCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDDDDDDDCCCCCCFFFFFFDDDDDDB2B2B2C0C0 - C0FFFFFFFFFFFFC0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0FFFFFFFFFFFFF1F1 - F1F1F1F1CCCCCCFFFFFFCCCCCCF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1CCCCCCFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1FFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFF1F1F1DDDDDDF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1 - F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1DDDDDDDDDDDDDDDDDDDDDDDDCCCCCCC0C0C0CCCCCCC0C0C0DDDDDD - F1F1F1FFFFFFFFFFFFFFFFFFB2B2B2C0C0C0F1F1F1F1F1F1F1F1F1F1F1F1FFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1FFFFFFFFFFFFF1 - F1F1F1F1F1F1F1F1DDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFF - FFFFFFFFFFFFF1F1F1DDDDDDC0C0C0DDDDDDF1F1F1F1F1F1F1F1F1FFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1CCCCCCCCCCCCF1F1F1F1F1F1FF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFF1F1F1F1F1F1DDDDDDC0C0C0FFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFC0C0C0F1 - F1F1F1F1F1FFFFFFFFFFFFC0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0FFFFFFFF - FFFFF1F1F1F1F1F1DDDDDDFFFFFFC0C0C0FFFFFFF1F1F1CCCCCCF1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDDDDDDDDDDDDDC0C0C0CCCCCCCCCCCCCCCC - CCF1F1F1F1F1F1FFFFFFFFFFFFF1F1F1CCCCCCDDDDDDF1F1F1F1F1F1F1F1F1F1 - F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFF1F1F1CCCCCCCCCCCCDDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1 - F1FFFFFFFFFFFFFFFFFFF1F1F1C0C0C0CCCCCCF1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1C0C0C0DDDDDDF1F1F1 - F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDDDDDDDC0C0C0FFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDD - C0C0C0F1F1F1FFFFFFFFFFFFFFFFFFC0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0 - F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1CCCCCCC0C0C0DDDDDDCCCCCCDDDDDDDDDD - DDCCCCCCF1F1F1F1F1F1DDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1DDDDDDF1 - F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1C0C0C0F1F1F1FFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1CCCCCCCCCCCCFFFFFFFF - FFFFF1F1F1F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1DDDDDDDDDDDDF1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1FFFFFFFFFF - FFF1F1F1F1F1F1F1F1F1DDDDDDFFFFFFFFFFFFFFFFFFDDDDDDF1F1F1F1F1F1F1 - F1F1F1F1F1FFFFFFFFFFFFFFFFFFC0C0C0DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1DDDDDDC0C0C0F1F1 - F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1FFFFFFFFFFFFFF - FFFFDDDDDDCCCCCCC0C0C0C0C0C0CCCCCCC0C0C0CCCCCCB2B2B2F1F1F1FFFFFF - FFFFFFFFFFFFFFFFFFF1F1F1DDDDDDC0C0C0CCCCCCCCCCCCCCCCCCDDDDDDC0C0 - C0CCCCCCDDDDDDFFFFFFFFFFFFFFFFFFFFFFFFC0C0C0C0C0C0C0C0C00000C0C0 - C0C0C0C0F1F1F1FFFFFFF1F1F1F1F1F1DDDDDDC0C0C0F1F1F1FFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDDDDDDDF1F1F1DDDDDDDDDDDDDDDDDD - CCCCCCF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDC0C0C0FFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFF1 - F1F1F1F1F1F1F1F1F1F1F1DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1C0C0C0C0C0C0 - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1DDDDDDDDDD - DDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FF - FFFFFFFFFFF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFDDDDDDF1F1F1F1F1F1 - FFFFFFF1F1F1F1F1F1F1F1F1FFFFFFF1F1F1DDDDDDF1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1DDDDDDCCCCCCC0C0C0F1 - F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFF - FFFFFFFFFFFFC0C0C0CCCCCCDDDDDDF1F1F1F1F1F1DDDDDDDDDDDDDDDDDDFFFF - FFFFFFFFFFFFFFFFFFFFDDDDDDDDDDDDCCCCCCF1F1F1F1F1F1F1F1F1FFFFFFFF - FFFFF1F1F1FFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFC0C0C0C0C0C0C0C0C0 - 0000C0C0C0C0C0C0F1F1F1DDDDDDF1F1F1F1F1F1C0C0C0CCCCCCFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDDDDDDDDDDDDDDDDDDDDDDDDDDD - DDDDDDDD0000FFF1F1F1FFFFFFF1F1F1F1F1F1FFFFFFF1F1F1DDDDDDDDDDDDFF - FFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFF1F1F1F1F1F1DDDDDDF1F1F1F1F1F1F1F1F1CCCCCCCCCCCCC0C0C0C0C0 - C0DDDDDDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1DD - DDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1DDDDDDF1F1F1F1F1F1DDDDDDF1F1 - F1F1F1F1DDDDDDF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1FF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1DDDDDDCCCCCCC0C0C0 - F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1FFFFFFDDDDDDDDDDDDC0C0C0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1C0C0C0C0C0C0C0C0C0FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1 - F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0C0C0C0C0 - C0C0C0C00000C0C0C0C0C0C0F1F1F1F1F1F1F1F1F1F1F1F1CCCCCCDDDDDDFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDDDDDDDDDDDDDDDDDDD - DDDDDDDDDDDDDDDD0000FFF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1DDDDDD - DDDDDDCCCCCCF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFF1F1F1CCCCCCCCCCCCF1F1F1F1F1F1F1F1F1CCCCCCCCCCCCCC - CCCCDDDDDDF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDD - F1F1F1DDDDDDDDDDDDF1F1F1DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1DDDDDDF1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1CCCCCCF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDC0C0 - C0DDDDDDFFFFFFFFFFFFF1F1F1F1F1F1DDDDDDFFFFFFF1F1F1F1F1F1F1F1F1F1 - F1F1FFFFFFFFFFFFF1F1F1DDDDDDC0C0C0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - FFFFFFF1F1F1FFFFFFFFFFFFF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1FFFF - FFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1C0 - C0C0C0C0C0C0C0C00000C0C0C0C0C0C0F1F1F1DDDDDDDDDDDDDDDDDDDDDDDDF1 - F1F1FFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDDDDDDDDDDD - C0C0C0C0C0C0C0C0C0B2B2B20000FF0000FFFFFFFFFFFFFFFFFFFFFFFFFFF1F1 - F1DDDDDDDDDDDDF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFDDDDDDDDDDDDCCCCCCDDDDDDFFFFFFFFFFFFFFFFFFF1F1F1 - F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDDDDDDDDD - DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDCCCCCCF1F1F1F1F1F1F1F1F1FFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDDDDDDDDDDDDDF1F1F1 - F1F1F1F1F1F1F1F1F1DDDDDDC0C0C0F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFF - FFF1F1F1FFFFFFFFFFFFF1F1F1DDDDDDF1F1F1F1F1F1F1F1F1DDDDDDDDDDDDC0 - C0C0C0C0C0FFFFFFFFFFFFFFFFFFFFFFFFC0C0C0DDDDDDF1F1F1F1F1F1F1F1F1 - FFFFFFF1F1F1FFFFFFFFFFFFF1F1F1F1F1F1DDDDDDF1F1F1F1F1F1F1F1F1FFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFF1F1F1F1F1F1DD - DDDDCCCCCCDDDDDDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1 - F1F1F1C0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0CCCCCCCCCCCCDDDDDDDDDDDD - FFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCCCC - CCC0C0C0DDDDDDF1F1F1F1F1F10000FF0000FF0000FF0000FFFFFFFFF1F1F1F1 - F1F1F1F1F1DDDDDDDDDDDDCCCCCCC0C0C0DDDDDDFFFFFFFFFFFFF1F1F1F1F1F1 - F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1DDDDDDDDDDDDF1F1F1F1F1F1F1F1 - F1C0C0C0F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFC0C0C0C0C0C0CC - CCCCF1F1F1DDDDDDDDDDDDCCCCCCCCCCCCCCCCCCB2B2B2F1F1F1F1F1F1F1F1F1 - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1CCCCCCCCCCCCF1F1F1F1F1F1FFFFFFFFFFFFF1 - F1F1F1F1F1F1F1F1F1F1F1FFFFFFF1F1F1DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1 - CCCCCCC0C0C0DDDDDDFFFFFFFFFFFFFFFFFFF1F1F1CCCCCCF1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFF - FFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1 - DDDDDDDDDDDDCCCCCCDDDDDDF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1 - F1F1F1F1F1F1F1C0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0F1F1F1F1F1F1FFFF - FFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFC0C0C0C0C0C0F1F1F1F1F1F1FFFFFF0000FF0000FF0000FF0000FF0000FF - F1F1F1F1F1F1F1F1F1DDDDDDDDDDDDB2B2B2FFFFFFFFFFFFFFFFFFF1F1F1DDDD - DDF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1FFFFFFF1F1F1DDDDDDF1 - F1F1F1F1F1C0C0C0F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1FFFFFFCCCCCC - DDDDDDF1F1F1FFFFFFDDDDDDCCCCCCB2B2B2DDDDDDB2B2B2C0C0C0F1F1F1F1F1 - F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1 - F1F1F1F1F1DDDDDDF1F1F1F1F1F1F1F1F1CCCCCCDDDDDDF1F1F1FFFFFFFFFFFF - FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFDDDDDDDDDDDDF1F1F1DDDDDDF1F1 - F1F1F1F1B2B2B2DDDDDDF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1FFFFFFF1F1F1F1F1F1DDDDDDF1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1 - F1F1F1F1F1F1F1F1F1F1F1C0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0FFFFFFFF - FFFFFFFFFFFFFFFFF1F1F1F1F1F1DDDDDDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - F1F1F1DDDDDDDDDDDDF1F1F1F1F1F1F1F1F1FFFFFF0000FF0000FF0000FF0000 - FF0000FF0000FFF1F1F1F1F1F1F1F1F1DDDDDDCCCCCCFFFFFFFFFFFFF1F1F1DD - DDDDC0C0C0F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFF1F1F1 - DDDDDDDDDDDDCCCCCCC0C0C0F1F1F1F1F1F1DDDDDDC0C0C0F1F1F1F1F1F1F1F1 - F1FFFFFFF1F1F1F1F1F1F1F1F1CCCCCCC0C0C0DDDDDDF1F1F1FFFFFFF1F1F1F1 - F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1 - F1F1F1F1F1F1C0C0C0C0C0C0CCCCCCF1F1F1F1F1F1CCCCCCDDDDDDFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1FFFFFFFFFFFFF1F1F1DDDDDDF1F1F1F1 - F1F1CCCCCCB2B2B2DDDDDDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1 - FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1CCCC - CCCCCCCCDDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDDD - DDDDDDDDDDCCCCCCC0C0C0F1F1F1F1F1F1F1F1F1CCCCCCDDDDDDFFFFFFFFFFFF - FFFFFFF1F1F1F1F1F1DDDDDDDDDDDDC0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0 - FFFFFFFFFFFFFFFFFFDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDF1F1F1F1F1F1F1F1 - F1DDDDDDDDDDDDDDDDDDDDDDDDF1F1F1F1F1F1F1F1F1FFFFFF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FFF1F1F1F1F1F1F1F1F1CCCCCCFFFFFFFFFFFF - FFFFFFDDDDDDC0C0C0F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1 - F1F1F1F1DDDDDDF1F1F1CCCCCCF1F1F1F1F1F1FFFFFFF1F1F1C0C0C0F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDDDDDDDF1F1F1FFFFFFF1F1F1FFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1 - F1FFFFFFFFFFFFC0C0C0DDDDDDF1F1F1F1F1F1FFFFFFF1F1F1DDDDDDF1F1F1F1 - F1F1F1F1F1FFFFFFFFFFFFF1F1F1FFFFFFF1F1F1F1F1F1FFFFFFFFFFFFDDDDDD - CCCCCCC0C0C0C0C0C0DDDDDDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1 - F1CCCCCCDDDDDDF1F1F1F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1FFFFFFFFFFFFFF - FFFFFFFFFFF1F1F1F1F1F1FFFFFFF1F1F1F1F1F1DDDDDDDDDDDDDDDDDDDDDDDD - F1F1F1B2B2B2C0C0C0CCCCCCDDDDDDFFFFFFF1F1F1F1F1F1CCCCCCCCCCCCFFFF - FFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1C0C0C0C0C0C0C0C0C00000C0C0 - C0C0C0C0FFFFFFFFFFFFFFFFFFDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDF1F1F1F1 - F1F1F1F1F1DDDDDDDDDDDDF1F1F1DDDDDDF1F1F1F1F1F1FFFFFFFFFFFF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FFF1F1F1F1F1F1F1F1F1CCCCCCFFFF - FFFFFFFFFFFFFFDDDDDDCCCCCCF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1 - F1F1F1F1F1F1F1F1DDDDDDDDDDDDC0C0C0F1F1F1F1F1F1F1F1F1DDDDDDCCCCCC - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFF1F1F1FFFFFFFFFFFFF1 - F1F1F1F1F1FFFFFFFFFFFFCCCCCCF1F1F1F1F1F1FFFFFFFFFFFFF1F1F1DDDDDD - FFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFDDDDDDC0C0C0C0C0C0DDDDDDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFDDDDDDC0C0C0F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDDDDDF1F1F1DDDDDDDDDDDDDDDD - DDDDDDDDCCCCCCC0C0C0DDDDDDFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDB2B2B2C0 - C0C0F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1C0C0C0C0C0C0C0C0C0 - 0000C0C0C0C0C0C0FFFFFFFFFFFFDDDDDDDDDDDDF1F1F1F1F1F1DDDDDDF1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1CCCCCCFFFFFFFFFFFFFFFFFFDDDD - DD0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFF1F1F1F1F1F1F1 - F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1CCCCCCF1F1F1FFFFFFFFFFFFF1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDDDDDDDF1F1F1F1F1F1FFFFFFFFFF - FFF1F1F1F1F1F1FFFFFFF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFF1F1F1FFFFFFFFFFFFFFFFFFC0C0C0F1F1F1FFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFF1F1F1F1F1F1F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFF1F1F1CCCCCCCCCCCCF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFCCCCCCF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFF1F1F1F1F1F1F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1FFFFFFDDDDDDCC - CCCCCCCCCCDDDDDDB2B2B2FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDCCCCCC - DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1C0C0C0C0C0 - C0C0C0C00000C0C0C0C0C0C0FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1C0C0C0C0C0C0DDDDDDFFFFFFF1F1F1DD - DDDDDDDDDD0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFF1F1F1 - F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1C0C0C0DDDDDDF1F1F1F1F1F1FFFF - FFDDDDDDDDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FF - FFFFF1F1F1CCCCCCF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFF1F1F1FFFFFFFFFFFFFFFFFF999999C0C0C0FFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFDDDDDDDDDDDDF1F1F1F1F1F1DDDDDDCCCCCCFFFFFFFFFFFFFF - FFFFFFFFFFF1F1F1F1F1F1DDDDDDDDDDDDDDDDDDCCCCCCDDDDDDFFFFFFFFFFFF - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDF1F1F1FFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFF1F1F1F1F1F1C0C0C0DDDDDDF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFF - FFFFFFF1F1F1F1F1F1DDDDDDF1F1F1FFFFFFFFFFFFF1F1F1DDDDDDCCCCCCFFFF - FFF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDF1F1F1C0 - C0C0C0C0C0C0C0C00000C0C0C0C0C0C0FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1DDDDDDDDDDDDB2B2B2DDDDDDF1F1F1F1F1F1FFFFFF - FFFFFFDDDDDDDDDDDD0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FFDDDDDDC0C0C0C0C0C0CCCCCCDDDDDDC0C0C0F1F1F1F1F1F1FF - FFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDCCCCCC - F1F1F1FFFFFFC0C0C0C0C0C0F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFCCCCCCCCCCCCFFFFFFDDDDDDCCCCCCDDDDDDF1F1F1FFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1DDDDDDC0C0C0DDDDDDF1F1F1 - FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1CCCCCCC0C0C0C0C0C0CCCCCCFFFFFFF1F1 - F1F1F1F1F1F1F1DDDDDDDDDDDDF1F1F1F1F1F1DDDDDDF1F1F1FFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1DDDDDDB2B2B2F1F1F1 - FFFFFFDDDDDDDDDDDDC0C0C0DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFF - FFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFDDDDDDDDDDDDCC - CCCCF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1DDDDDD - C0C0C0C0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0FFFFFFFFFFFFFFFFFFFFFFFF - F1F1F1F1F1F1F1F1F1DDDDDDDDDDDDDDDDDDDDDDDDCCCCCCFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFDDDDDDDDDDDD0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FFC0C0C0B2B2B2CCCCCCF1F1F1F1F1F1DDDDDDF1F1F1 - F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1FFFFFFF1F1F1F1F1F1DDDD - DDFFFFFFFFFFFFFFFFFFC0C0C0CCCCCCF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFF1F1F1DDDDDDC0C0C0CCCCCCFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1CCCCCCC0C0C0F1F1 - F1F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1CCCCCCB2B2B2C0C0C0CCCCCCF1F1F1FF - FFFFF1F1F1DDDDDDDDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDC0C0 - C0FFFFFFDDDDDDF1F1F1CCCCCCC0C0C0F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFF - FFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFDDDDDD - DDDDDDF1F1F1DDDDDDF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1C0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0FFFFFFFFFFFFFFFF - FFF1F1F1F1F1F1F1F1F1DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDCCCCCCF1F1F1F1 - F1F1F1F1F1F1F1F1FFFFFFDDDDDDDDDDDD0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FFF1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1FFFFFFDDDDDDCC - CCCCC0C0C0FFFFFFF1F1F1F1F1F1CCCCCCDDDDDDFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFDDDDDDDDDDDDCCCCCCF1F1F1FFFFFFFFFFFFFFFFFFF1F1F1FFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1DDDDDDC0C0C0F1 - F1F1F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1C0C0C0C0C0C0FFFFFFFFFFFFFFFFFF - FFFFFFF1F1F1CCCCCCB2B2B2CCCCCCC0C0C0CCCCCCF1F1F1F1F1F1F1F1F1DDDD - DDFFFFFFCCCCCCF1F1F1F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1C0 - C0C0DDDDDDFFFFFFFFFFFFF1F1F1DDDDDDF1F1F1F1F1F1F1F1F1FFFFFFFFFFFF - FFFFFFFFFFFFF1F1F1DDDDDDDDDDDDF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFDDDDDDDDDDDDCCCCCCF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1 - F1F1F1F1F1FFFFFFFFFFFFC0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0FFFFFFFF - FFFFF1F1F1F1F1F1CCCCCCC0C0C0C0C0C0CCCCCCDDDDDDF1F1F1F1F1F1CCCCCC - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1CCCCCCDDDDDD0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFFFFFFFFFF1F1F1F1 - F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDDDDDDDF1F1F1F1F1F1 - FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDB2B2B2C0C0C0FFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1C0C0C0F1F1F1FFFFFFFFFFFFF1F1F1F1 - F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1CCCCCC - DDDDDDF1F1F1FFFFFFFFFFFFF1F1F1F1F1F1CCCCCCDDDDDDFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1CCCCCCCCCCCCCC - CCCCDDDDDDFFFFFFC0C0C0F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1C0C0C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1FFFF - FFFFFFFFFFFFFFCCCCCCC0C0C0B2B2B2DDDDDDF1F1F1FFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFDDDDDDF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0 - FFFFFFFFFFFFF1F1F1F1F1F1B2B2B2C0C0C0CCCCCCCCCCCCDDDDDDC0C0C0C0C0 - C0C0C0C0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F10000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFFF - FFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1CCCCCCCCCCCCF1F1 - F1F1F1F1FFFFFFFFFFFFDDDDDDF1F1F1F1F1F1CCCCCCC0C0C0DDDDDDF1F1F1FF - FFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1CCCCCCFFFFFFFFFFFFFFFFFF - F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1DDDD - DDDDDDDDDDDDDDF1F1F1F1F1F1FFFFFFF1F1F1F1F1F1C0C0C0F1F1F1FFFFFFFF - FFFFFFFFFFF1F1F1FFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFF1F1F1F1F1F1CCCCCCF1F1F1FFFFFFFFFFFFF1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1C0C0C0FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1 - F1F1FFFFFFFFFFFFF1F1F1B2B2B2C0C0C0C0C0C0F1F1F1F1F1F1FFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDDDDDF1F1F1FFFFFFFFFFFFF1F1F1FFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0C0C0C0C0C0C0C0C00000C0C0 - C0C0C0C0F1F1F1FFFFFFF1F1F1CCCCCCDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F10000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1DDDDDDC0 - C0C0F1F1F1FFFFFFFFFFFFFFFFFFDDDDDDDDDDDDCCCCCCC0C0C0F1F1F1F1F1F1 - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1CCCCCCCCCCCCF1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1FFFFFF - FFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1 - F1F1F1F1F1F1F1F1F1F1F1DDDDDDFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDC0C0C0 - F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFF - FFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFDDDDDDDDDDDDCCCCCCC0C0C0F1F1F1FF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFC0C0C0C0C0C0C0C0C0 - 0000C0C0C0C0C0C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1 - F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F10000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1DDDDDDC0C0C0 - B2B2B2CCCCCCFFFFFFFFFFFFFFFFFFDDDDDDDDDDDD999999C0C0C0FFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCCCCCCC0C0C0CCCCCCF1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1DDDDDDF1F1F1CCCCCCDDDDDDDDDDDDF1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDDDDDDDC0C0C0DDDDDDFF - FFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFF - FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1DDDDDDDDDDDDFFFFFFFFFFFFDDDDDDCCCC - CCDDDDDDFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFF - FFFFFFFFFFFFFFFFDDDDDDF1F1F1F1F1F1DDDDDDC0C0C0CCCCCCCCCCCCDDDDDD - F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1C0C0C0C0C0 - C0C0C0C00000C0C0C0C0C0C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1 - F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1FFFFFFFFFFFFF1 - F1F10000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FFF1F1F1F1F1F1F1F1F1DDDDDDC0C0 - C0CCCCCCCCCCCCDDDDDDFFFFFFFFFFFFFFFFFFDDDDDDDDDDDDC0C0C0DDDDDDFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDDDDDDDDDDDF1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1CCCCCCFFFFFFFFFFFFF1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDDDDDDDCCCCCC - F1F1F1FFFFFFFFFFFFFFFFFFDDDDDDF1F1F1FFFFFFFFFFFFF1F1F1FFFFFFF1F1 - F1FFFFFFFFFFFFFFFFFFDDDDDDDDDDDDDDDDDDCCCCCCDDDDDDFFFFFFF1F1F1DD - DDDDCCCCCCF1F1F1DDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - FFFFFFFFFFFFFFFFFFFFFFFFDDDDDDF1F1F1DDDDDDCCCCCCB2B2B2F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDDDDDDDDDDDDDCCCCCCC0 - C0C0C0C0C0C0C0C00000C0C0C0C0C0C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFDDDDDDF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1FFFFFFFFFFFF - F1F1F1F1F1F10000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFF1F1F1DDDDDDDDDDDDC0 - C0C0DDDDDDF1F1F1F1F1F1FFFFFFFFFFFFDDDDDDDDDDDDDDDDDDC0C0C0DDDDDD - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFF1F1F1F1F1 - F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1 - F1F1F1F1F1CCCCCCCCCCCCDDDDDDDDDDDDC0C0C0B2B2B2CCCCCCF1F1F1FFFFFF - F1F1F1F1F1F1DDDDDDF1F1F1F1F1F1F1F1F1DDDDDDCCCCCCF1F1F1DDDDDDDDDD - DDDDDDDDFFFFFFFFFFFFF1F1F1C0C0C0F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1F1 - F1F1F1F1F1FFFFFFFFFFFFDDDDDDCCCCCCCCCCCCCCCCCCCCCCCCDDDDDDF1F1F1 - F1F1F1F1F1F1FFFFFFFFFFFFDDDDDDFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDDDDDDDDDDDDDDDDDB2B2B2CCCCCCFF - FFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDD - F1F1F1C0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0FFFFFFFFFFFFFFFFFFF1F1F1 - F1F1F1F1F1F1CCCCCCF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFF1F1F1CCCCCCC0C0C00000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFC0C0C0 - 999999DDDDDDF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFDDDDDDDDDDDDDDDDDDF1F1 - F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFF1F1F1FFFFFFFFFFFFFF - FFFFF1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1DDDDDDC0C0C0 - F1F1F1F1F1F1DDDDDDC0C0C0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFF - FFFFFFFFF1F1F1DDDDDDF1F1F1F1F1F1DDDDDDC0C0C0CCCCCCF1F1F1FFFFFFF1 - F1F1DDDDDDDDDDDDF1F1F1DDDDDDCCCCCCDDDDDDFFFFFFFFFFFFFFFFFFF1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1CCCCCCDDDDDDF1 - F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1CCCCCCDDDDDDFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1C0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0F1F1F1FFFFFFF1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFF1F1F1F1F1F1F1F1F1F1F1F10000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FFF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDDDDDDDDDDDDD - DDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1CCCC - CCFFFFFFF1F1F1DDDDDDC0C0C0B2B2B2DDDDDDF1F1F1F1F1F1FFFFFFFFFFFFFF - FFFFFFFFFFF1F1F1FFFFFFF1F1F1DDDDDDF1F1F1F1F1F1FFFFFFFFFFFFFFFFFF - FFFFFFF1F1F1DDDDDDF1F1F1F1F1F1CCCCCCCCCCCCF1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1 - F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1DDDDDDC0C0C0 - CCCCCCF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1FFFF - FFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFF1F1F1C0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0DDDDDDF1 - F1F1F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F10000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1FFFFFFF1F1F1 - CCCCCCCCCCCCF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDF1F1F1F1 - F1F1DDDDDDF1F1F1FFFFFFFFFFFFCCCCCCCCCCCCDDDDDDF1F1F1F1F1F1FFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1CCCCCCDDDDDDF1F1F1F1F1F1DDDDDDF1F1 - F1FFFFFFFFFFFFF1F1F1DDDDDDF1F1F1F1F1F1CCCCCCCCCCCCF1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDDDDDDDDDDDDDDD - DDC0C0C0CCCCCCF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1FFFFFFFF - FFFFFFFFFFDDDDDDCCCCCCCCCCCCF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1 - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0 - DDDDDDF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDDD - DDF1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F10000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFF - FFFFFFFFFFFFFFF1F1F1DDDDDDCCCCCCCCCCCCDDDDDDDDDDDDDDDDDDDDDDDDDD - DDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDDDDDDDDDDDDD - DDDDDDCCCCCCC0C0C0F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1 - F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1DD - DDDDF1F1F1FFFFFFF1F1F1DDDDDDDDDDDDDDDDDDDDDDDDC0C0C0CCCCCCF1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1 - F1F1F1F1F1F1F1F1F1F1DDDDDDF1F1F1FFFFFFFFFFFFFFFFFFDDDDDDDDDDDDDD - DDDDDDDDDDC0C0C0DDDDDDF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1DDDDDDF1F1F1FFFFFFFFFFFFFFFFFFFFFF - FFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1C0C0C0C0C0C0C0C0C00000C0C0 - C0C0C0C0C0C0C0F1F1F1FFFFFFFFFFFFF1F1F1FFFFFFFFFFFFF1F1F1F1F1F1F1 - F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F10000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1CCCCCCCCCCCCCCCCCC - CCCCCCCCCCCCDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1C0C0C0C0C0C0DDDD - DDCCCCCCF1F1F1DDDDDDF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1 - F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1FFFFFFF1F1F1DDDDDDDDDDDDCCCCCCC0C0C0C0C0C0DDDD - DDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1 - F1F1DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1DDDDDDF1F1F1FFFFFFFFFFFFDDDDDD - DDDDDDDDDDDDDDDDDDCCCCCCF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDC0C0C0C0C0C0C0C0C0 - 0000C0C0C0C0C0C0CCCCCCF1F1F1FFFFFFF1F1F1F1F1F1FFFFFFFFFFFFF1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1CCCCCCDDDDDDF1F1F10000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1C0C0C0DD - DDDDF1F1F1F1F1F1FFFFFFF1F1F1F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDDDDDDDDDDDDD999999B2B2B2DD - DDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFF - FFFFFFF1F1F1DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFF1F1 - F1DDDDDDDDDDDDDDDDDDDDDDDDCCCCCCF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1 - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1DDDDDDC0C0C0C0C0 - C0C0C0C00000C0C0C0C0C0C0FFFFFFF1F1F1FFFFFFF1F1F1F1F1F1FFFFFFF1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDF1F1F1F1F1F1C0C0C0DDDDDDFFFFFF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FFF1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFF1 - F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFCCCCCCF1F1F1F1F1F1F1F1F1F1F1F1 - CCCCCCF1F1F1F1F1F1F1F1F1FFFFFFF1F1F1DDDDDDF1F1F1DDDDDDF1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDCCCCCCDDDDDDCCCCCCC0C0C0DDDDDD - F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFF - FFFFFFFFF1F1F1DDDDDDDDDDDDDDDDDDDDDDDDCCCCCCFFFFFFF1F1F1F1F1F1DD - DDDDDDDDDDDDDDDDDDDDDDDDDDDDF1F1F1CCCCCCDDDDDDFFFFFFFFFFFFFFFFFF - F1F1F1F1F1F1CCCCCCF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1 - F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCCCCCCDDDDDDF1F1F1F1F1F1C0 - C0C0C0C0C0C0C0C00000C0C0C0C0C0C0FFFFFFF1F1F1DDDDDDF1F1F1F1F1F1F1 - F1F1DDDDDDCCCCCCCCCCCCF1F1F1F1F1F1F1F1F1F1F1F1C0C0C0DDDDDDF1F1F1 - FFFFFF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1DDDDDDFFFFFFF1F1F1F1F1 - F1F1F1F1CCCCCCDDDDDDFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1DDDDDDCCCCCCC0 - C0C0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1C0C0C0C0C0C0CCCCCCF1F1F1DDDDDDF1F1 - F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFCCCCCCCCCCCCCCCCCCFFFFFFF1F1F1DDDDDDDDDDDDF1F1F1F1F1F1 - F1F1F1DDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1CCCCCCCCCCCCFFFFFFFFFF - FFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1 - F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFF1F1F1 - F1F1F1C0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0FFFFFFDDDDDDF1F1F1FFFFFF - F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1CCCCCCC0C0C0F1F1 - F1F1F1F1FFFFFF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1 - F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1FFFFFFF1 - F1F1F1F1F1F1F1F1CCCCCCDDDDDDF1F1F1FFFFFFFFFFFFFFFFFFF1F1F1DDDDDD - C0C0C0C0C0C0F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1C0C0C0CCCCCCF1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFF1F1F1FFFFFFDDDDDDF1F1F1F1F1F1FFFFFFF1F1F1DDDDDDDDDDDDF1F1 - F1F1F1F1DDDDDDCCCCCCDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1CCCCCCCCCCCCF1 - F1F1F1F1F1FFFFFFDDDDDDDDDDDDDDDDDDF1F1F1DDDDDDDDDDDDDDDDDDDDDDDD - F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFDDDDDDF1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1C0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0FFFFFFF1F1F1F1F1 - F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDDDDDDDF1 - F1F1F1F1F1F1F1F1FFFFFF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFF1F1F1F1F1F1DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDCCCCCCFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFDDDDDDCCCCCCDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFF - FFFFF1F1F1F1F1F1F1F1F1F1F1F1DDDDDDDDDDDDDDDDDDCCCCCCC0C0C0F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFF - FFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFDDDDDDDD - DDDDDDDDDDDDDDDDDDDDDDFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1CCCCCC - DDDDDDF1F1F1F1F1F1F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1DDDDDDDDDDDDDDDD - DDDDDDDDDDDDDDDDDDDDCCCCCCDDDDDDC0C0C0CCCCCCB2B2B2F1F1F1F1F1F1FF - FFFFFFFFFFFFFFFFF1F1F1C0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0FFFFFFF1 - F1F1DDDDDDDDDDDDDDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1FFFFFF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDDDDDDDDDDDDDF1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1CCCCCCFFFFFFFFFFFFFF - FFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD - DDF1F1F1FFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFCCCCCCF1F1F1FF - FFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1DDDDDDDDDDDDF1F1F1FFFFFFDDDDDD - DDDDDDDDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1DDDDDDC0C0C0F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1CCCCCCC0C0C0DD - DDDDDDDDDDCCCCCCCCCCCC999999DDDDDDDDDDDDFFFFFFFFFFFFDDDDDDFFFFFF - FFFFFFFFFFFFFFFFFFF1F1F1DDDDDDC0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0 - F1F1F1FFFFFFDDDDDDDDDDDDF1F1F1CCCCCCF1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDDDDDF1F1F1DDDDDDDDDDDDF1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1DDDDDDF1F1F1F1F1F1DDDDDDCCCCCCCCCCCCFFFFFF - FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFF - FFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFDDDDDDDDDDDDDD - DDDDDDDDDDDDDDDDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDDDDD - F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1DDDDDDDDDDDDF1F1F1FFFF - FFF1F1F1DDDDDDDDDDDDDDDDDDDDDDDDF1F1F1DDDDDDF1F1F1F1F1F1F1F1F1DD - DDDDC0C0C0C0C0C0B2B2B2F1F1F1F1F1F1F1F1F1FFFFFFF1F1F1DDDDDDC0C0C0 - DDDDDDF1F1F1CCCCCCCCCCCCC0C0C0C0C0C0FFFFFFFFFFFFFFFFFFFFFFFFF1F1 - F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1C0C0C0C0C0C0C0C0C00000C0C0 - C0C0C0C0F1F1F1F1F1F1CCCCCCDDDDDDDDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F10000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FFFFFFFFFFFFFFFFFFFF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFCCCCCCCCCC - CCDDDDDDF1F1F1DDDDDDCCCCCCF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1C0C0C0C0C0C0C0C0C0 - 0000C0C0C0C0C0C0FFFFFFFFFFFFFFFFFFFFFFFFDDDDDDF1F1F1F1F1F1FFFFFF - FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F10000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FFF1F1F1F1F1F10000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1 - F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFF1F1F1DDDDDDC0C0C0C0C0C0CCCCCCDDDDDDCCCCCCC0C0C0C0C0 - C0C0C0C00000C0C0C0C0C0C0FFFFFFF1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1 - F1F1F1F1F1F1F1DDDDDDCCCCCCF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFF1F1F10000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFF - FFFFFFFFF1F1F1F1F1F1DDDDDDCCCCCCDDDDDDFFFFFFFFFFFFFFFFFFFFFFFFC0 - C0C0C0C0C0C0C0C00000C0C0C0C0C0C0F1F1F1CCCCCCFFFFFFFFFFFFFFFFFFFF - FFFFF1F1F1F1F1F1F1F1F1F1F1F1DDDDDDF1F1F1FFFFFFFFFFFFFFFFFFFFFFFF - FFFFFF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFDDDDDDF1F1F1 - F1F1F1F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFF - FFC0C0C0F1F1F1F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFF - FFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - CCCCCCDDDDDDF1F1F1F1F1F1F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1DDDDDDDDDD - DDDDDDDDDDDDDDCCCCCCF1F1F1F1F1F1FFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFF - FFFFDDDDDDDDDDDDDDDDDDF1F1F1FFFFFFFFFFFFF1F1F1F1F1F1C0C0C0F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1FF - FFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFF - F1F1F1C0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0DDDDDDDDDDDDDDDDDDF1F1F1 - FFFFFFFFFFFFF1F1F1CCCCCCC0C0C0CCCCCCDDDDDDFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFF1F1F10000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FFF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1 - F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1FFFFFFFFFF - FFF1F1F1DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFF1F1F1DDDDDDDDDDDDDD - DDDDDDDDDDF1F1F1F1F1F1DDDDDDF1F1F1F1F1F1F1F1F1DDDDDDDDDDDDCCCCCC - F1F1F1F1F1F1DDDDDDCCCCCCF1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1DDDDDDF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1FF - FFFFF1F1F1DDDDDDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1 - F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1FFFFFFFFFFFFC0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0DDDDDDDDDDDDC0C0 - C0CCCCCCF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFF1F1F1FFFFFFF1F1F1DD - DDDDDDDDDDDDDDDDDDDDDD0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFFF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FFFFFFFFFFFFFFFFFFFFFFFFFF800000800000800000F1F1F1 - FFFFFFF1F1F1FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1FFFFFFFFFFFF8000008000 - 00800000800000800000800000800000800000800000FFFFFFC0C0C0DDDDDDCC - CCCCDDDDDDC0C0C0DDDDDDF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1800000 - 800000800000DDDDDDCCCCCCC0C0C0C0C0C0DDDDDD0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FFDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1DDDDDDCCCCCCF1F1F10000FF0000FF0000FF0000FF0000FF0000FF0000FF - F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1DDDDDDFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFF1F1F1F1F1F1DDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1FFFFFFC0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0DDDDDDDD - DDDDCCCCCCCCCCCCF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFF - F1F1F1DDDDDDDDDDDDDDDDDDDDDDDD0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFFFFF - FFFF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FFFFFFFFFFFFFFFFFFFFFFFFFF8000008000008000 - 00800000FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F180 - 0000800000800000800000800000800000800000800000800000800000DDDDDD - F1F1F1DDDDDDF1F1F1DDDDDDF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1 - F1F1F1F1800000800000800000C0C0C0C0C0C0DDDDDDF1F1F10000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FFF1F1F1FFFFFFF1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1DDDDDDCCCCCCF1F1F10000FF0000FF0000FF0000FF0000FF0000 - FF0000FFF1F1F1F1F1F1FFFFFFF1F1F1DDDDDDF1F1F1FFFFFFF1F1F1FFFFFFFF - FFFFFFFFFFFFFFFFF1F1F1F1F1F1DDDDDDC0C0C0F1F1F1F1F1F1F1F1F1FFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1C0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0 - DDDDDDDDDDDDC0C0C0DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFF - FFFFFFFFF1F1F1DDDDDDDDDDDDDDDDDD0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - F1F1F1DDDDDD0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FFF1F1F1F1F1F1FFFFFFFFFFFFFF - FFFF800000800000800000F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1800000 - 8000008000008000008000008000008000008000008000008000008000008000 - 00800000800000800000F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1FFFFFFFFFFFFF1 - F1F1F1F1F1F1F1F1800000800000800000800000CCCCCCFFFFFFFFFFFFF1F1F1 - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFF1F1F1DDDD - DDDDDDDDDDDDDDDDDDDDDDDDDDCCCCCCFFFFFFFFFFFF0000FF0000FF0000FF00 - 00FF0000FF0000FFF1F1F1F1F1F1FFFFFFDDDDDDDDDDDDCCCCCCF1F1F1F1F1F1 - FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1C0C0C0CCCCCCF1F1F1F1F1F1FFFF - FFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1FFFFFFC0C0C0C0C0C0C0C0C00000C0C0 - C0C0C0C0F1F1F1CCCCCCF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1CCCCCC0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FFF1F1F1FFFFFFDDDDDD0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFF1F1F1DDDDDD - F1F1F1F1F1F1F1F1F1800000800000800000F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1800000800000800000800000800000F1F1F1DDDDDDDDDDDDFFFFFFFFFFFFFF - FFFFFFFFFF800000800000800000800000800000FFFFFFF1F1F1F1F1F1DDDDDD - DDDDDDCCCCCCC0C0C0F1F1F1DDDDDD800000800000800000800000FFFFFFFFFF - FFF1F1F1F1F1F1F1F1F10000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FFCCCCCCDDDDDDCCCCCCDDDDDDC0C0C0DDDDDDFFFFFFFFFFFFFFFFFF0000FF - 0000FF0000FF0000FF0000FF0000FFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1FFFF - FFF1F1F1DDDDDDFFFFFFFFFFFFF1F1F1F1F1F1DDDDDDC0C0C0CCCCCCF1F1F1F1 - F1F1FFFFFFF1F1F1F1F1F1F1F1F1DDDDDDCCCCCCB2B2B2C0C0C0C0C0C0C0C0C0 - 0000C0C0C0C0C0C0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1CCCCCC0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FFF1F1F1F1F1F1F1F1F10000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFDDDD - DDDDDDDDF1F1F1F1F1F1F1F1F1800000800000800000DDDDDDF1F1F1DDDDDDF1 - F1F1F1F1F1800000800000800000800000F1F1F1DDDDDDDDDDDDDDDDDDFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1800000800000800000F1F1F1F1F1F1F1F1 - F1DDDDDDDDDDDD999999B2B2B2F1F1F1DDDDDDDDDDDD800000800000800000FF - FFFFFFFFFFF1F1F1FFFFFFFFFFFF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FFF1F1F1F1F1F1DDDDDDDDDDDDDDDDDDFFFFFFF1F1F1F1F1F1F1F1 - F10000FF0000FF0000FF0000FF0000FF0000FFFFFFFFFFFFFFFFFFFFF1F1F1FF - FFFFFFFFFFFFFFFFDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1DDDDDDC0C0C0CCCCCC - F1F1F1F1F1F1FFFFFFF1F1F1F1F1F1DDDDDDDDDDDDC0C0C0CCCCCCC0C0C0C0C0 - C0C0C0C00000C0C0C0C0C0C0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F10000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F10000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FFF1F1F1F1F1F1DDDDDDF1F1F1800000800000800000DDDDDD - DDDDDDF1F1F1DDDDDD800000800000800000800000F1F1F1DDDDDDDDDDDDDDDD - DDDDDDDDDDDDDDCCCCCCF1F1F1F1F1F1F1F1F1F1F1F180000080000080000080 - 0000F1F1F1C0C0C0B2B2B2DDDDDDFFFFFFFFFFFFFFFFFFF1F1F1800000800000 - 800000800000F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1DDDDDDDDDDDDDDDDDDC0C0 - C0CCCCCCF1F1F1FFFFFFFFFFFFF1F1F1F1F1F1CCCCCC999999CCCCCCF1F1F1C0 - C0C0C0C0C0C0C0C00000C0C0C0C0C0C0F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFF - FFFFF1F1F1FFFFFFFFFFFFDDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F100 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FFF1F1F1F1F1F1FFFFFFF1F1F1F1F1F18000008000 - 00800000C0C0C0CCCCCCC0C0C0C0C0C0800000800000800000F1F1F1DDDDDDDD - DDDDDDDDDDCCCCCCC0C0C0DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFF - 800000800000800000CCCCCCDDDDDDFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDDDDD - DD800000800000800000800000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F100 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDDDDDDDDDDDDDF1 - F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDC0C0C0DDDDDDF1F1F1 - FFFFFFC0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0F1F1F1DDDDDDFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F10000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FFF1F1F1F1F1F1F1F1F1DDDDDD - DDDDDDCCCCCC0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FFF1F1F1F1F1F1F1F1F1F1F1F180 - 0000800000800000800000FFFFFFF1F1F1FFFFFFFFFFFF800000800000800000 - DDDDDDDDDDDDDDDDDDC0C0C0F1F1F1F1F1F1F1F1F1FFFFFFF1F1F1F1F1F1FFFF - FFFFFFFF800000800000800000800000FFFFFFFFFFFFFFFFFFFFFFFFCCCCCCC0 - C0C0C0C0C0C0C0C0CCCCCC800000800000800000FFFFFFFFFFFFFFFFFFFFFFFF - F1F1F1DDDDDD0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDDDDDDDF1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDF1F1F1FFFFFFF1F1F1DDDDDDDDDDDDFFFF - FFF1F1F1FFFFFFC0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0F1F1F1DDDDDDFFFF - FFFFFFFFF1F1F1F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1DDDDDDCCCCCCF1F1F1F1 - F1F1F1F1F1F1F1F10000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFF1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1C0C0C0CCCCCC0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFF1F1F1F1F1F1 - F1F1F1F1F1F1800000800000800000800000FFFFFFFFFFFFFFFFFFFFFFFFF1F1 - F1F1F1F1DDDDDDDDDDDDDDDDDDC0C0C0F1F1F1F1F1F1F1F1F1FFFFFFF1F1F1FF - FFFFFFFFFFFFFFFF800000800000800000800000800000FFFFFFFFFFFFFFFFFF - CCCCCCCCCCCCCCCCCCDDDDDDDDDDDD800000800000800000DDDDDDC0C0C0F1F1 - F1F1F1F1F1F1F1DDDDDDF1F1F10000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDFFFFFFF1F1F1DDDDDDF1 - F1F1FFFFFFF1F1F1FFFFFFC0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0C0C0C0DD - DDDDF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1DDDDDDCCCCCCDDDDDD - DDDDDDF1F1F1CCCCCCCCCCCC0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFF1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1DDDDDDF1F1F10000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FFF1F1F1F1F1F1F1F1F1DDDDDD800000800000800000F1F1F1FFFFFFFFFFFFFF - FFFFFFFFFFF1F1F1CCCCCCB2B2B2CCCCCCCCCCCCFFFFFFF1F1F1F1F1F1FFFFFF - F1F1F1FFFFFFFFFFFF800000800000800000800000800000800000F1F1F1FFFF - FFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFF800000800000800000C0 - C0C0FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F10000FF0000FF0000FF - 0000FF0000FF0000FF0000FFF1F1F1FFFFFFFFFFFFFFFFFF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FFFFFFFFF1F1F1F1F1F1FFFFFFFFFFFFF1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDC0C0C0C0C0C0FFFFFFFFFFFF - F1F1F1DDDDDDCCCCCCDDDDDDF1F1F1C0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0 - F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1DDDD - DDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F10000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - FFFFFFFFFFFFF1F1F1DDDDDDF1F1F1F1F1F1FFFFFFFFFFFF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FFF1F1F1DDDDDDDDDDDDDDDDDDDDDDDD800000800000800000FFFFFF - FFFFFFFFFFFFFFFFFFC0C0C0CCCCCCDDDDDDFFFFFFFFFFFFF1F1F1CCCCCCF1F1 - F1FFFFFF800000800000800000800000800000800000800000800000DDDDDDDD - DDDDF1F1F1DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1800000 - 800000800000F1F1F1F1F1F1DDDDDDCCCCCCCCCCCCDDDDDDF1F1F1F1F1F10000 - FF0000FF0000FF0000FF0000FF0000FF0000FFF1F1F1F1F1F1F1F1F1F1F1F100 - 00FF0000FF0000FF0000FF0000FF0000FFF1F1F1F1F1F1F1F1F1FFFFFFFFFFFF - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDB2B2B2C0C0C0DDDDDDFFFFFFFFFF - FFFFFFFFDDDDDDDDDDDDDDDDDDF1F1F1FFFFFFC0C0C0C0C0C0C0C0C00000C0C0 - C0C0C0C0F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1DDDDDDF1F1F1F1F1F1F1F1F1F1F1F10000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FFFFFFFFFFFFFFF1F1F1DDDDDDDDDDDDCCCCCCDDDDDDF1F1F10000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FFCCCCCCCCCCCCDDDDDDCCCCCC8000008000008000 - 00FFFFFFFFFFFFFFFFFFF1F1F1C0C0C0F1F1F1FFFFFFFFFFFFFFFFFFCCCCCCDD - DDDDF1F1F1800000800000800000800000800000800000800000800000800000 - F1F1F1F1F1F1F1F1F1DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1800000800000800000F1F1F1F1F1F1F1F1F1DDDDDDDDDDDDF1F1F1F1F1F1F1 - F1F10000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFFFFF1F1F1 - F1F1F10000FF0000FF0000FF0000FF0000FF0000FFF1F1F1F1F1F1F1F1F1FFFF - FFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1DDDDDDC0C0C0C0C0C0DDDDDDFFFFFFFF - FFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFC0C0C0C0C0C0C0C0C0 - 0000C0C0C0C0C0C0FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1DDDDDDDDDDDDCCCCCCF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFF1F1F1F1F1 - F1FFFFFFFFFFFFF1F1F1FFFFFFFFFFFFF1F1F1DDDDDDF1F1F1DDDDDDDDDDDDDD - DDDDFFFFFFFFFFFFFFFFFFFFFFFFC0C0C0CCCCCCCCCCCCF1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F10000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FFF1F1F1F1F1F1DDDDDDF1F1F180 - 0000800000800000800000F1F1F1DDDDDDDDDDDDFFFFFFFFFFFFFFFFFFF1F1F1 - 8000008000008000008000008000008000008000008000008000008000008000 - 00F1F1F1FFFFFFF1F1F1B2B2B2C0C0C0DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1800000800000800000800000FFFFFFF1F1F1F1F1F1FFFFFF - FFFFFFF1F1F1F1F1F1F1F1F10000FF0000FF0000FF0000FF0000FF0000FF0000 - FFF1F1F1F1F1F1F1F1F10000FF0000FF0000FF0000FF0000FFF1F1F1FFFFFFFF - FFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1CCCCCCC0C0C0CCCCCCFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1C0C0C0C0C0 - C0C0C0C00000C0C0C0C0C0C0F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1C0C0C0C0C0C0DDDDDDF1F1F1FFFFFFF1F1F1FFFFFFF1F1F1FF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1DDDDDDFFFFFFFFFFFFF1F1F1F1F1F1CCCCCCFFFFFFF1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F10000FF0000FF0000FF0000FF0000FF0000FFF1F1F100 - 00FF0000FF0000FF0000FFFFFFFF0000FF0000FF0000FF0000FFF1F1F1F1F1F1 - F1F1F1FFFFFF800000800000800000F1F1F1DDDDDDCCCCCCF1F1F1F1F1F1F1F1 - F1F1F1F1800000800000800000800000800000800000800000800000F1F1F1F1 - F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1800000800000800000FFFFFFF1F1F1FFFF - FFFFFFFFFFFFFFFFFFFFCCCCCCC0C0C0C0C0C0F1F1F10000FF0000FF0000FF00 - 00FF0000FF0000FFF1F1F1F1F1F10000FF0000FF0000FF0000FF0000FF0000FF - FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1C0C0C0DDDDDDFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1C0 - C0C0C0C0C0C0C0C00000C0C0C0C0C0C0F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1F1 - F1F1F1F1F1F1F1F1DDDDDDC0C0C0CCCCCCFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1 - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1CCCCCCFFFFFFFFFFFFF1F1F1F1F1F1DDDDDDF1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1FFFFFFF1F1F10000FF0000FF0000FF0000FF0000FF - 0000FFFFFFFF0000FF0000FFFFFFFFFFFFFF0000FF0000FF0000FF0000FFF1F1 - F1F1F1F1F1F1F1FFFFFF800000800000800000800000DDDDDDC0C0C0F1F1F1F1 - F1F1F1F1F1F1F1F1800000800000800000800000800000FFFFFFFFFFFFFFFFFF - FFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFF1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1800000800000800000FF - FFFFFFFFFFFFFFFFFFFFFFF1F1F1B2B2B2C0C0C0CCCCCCDDDDDD0000FF0000FF - 0000FF0000FF0000FF0000FF0000FFF1F1F10000FF0000FF0000FF0000FF0000 - FF0000FFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1CCCCCCCCCCCCF1F1F1FF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1 - F1F1F1C0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0FFFFFFFFFFFFFFFFFFF1F1F1 - F1F1F1DDDDDDDDDDDDDDDDDDDDDDDDC0C0C0CCCCCCFFFFFFF1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1DDDDDDCCCCCCC0C0C0F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFF1F1F10000FF0000FF0000 - FF0000FF0000FF0000FFFFFFFFFFFFFFFFFFFFFFFFFF0000FF0000FF0000FF00 - 00FF0000FFFFFFFFFFFFFFFFFFFFFFFFFF800000800000800000800000CCCCCC - F1F1F1F1F1F1F1F1F1F1F1F1800000800000800000800000FFFFFFFFFFFFFFFF - FFFFFFFFF1F1F1CCCCCCFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDF1F1F1F1F1F1FF - FFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1800000800000 - 800000FFFFFFF1F1F1FFFFFFF1F1F1DDDDDDCCCCCCF1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F10000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FF0000FFF1F1F1DDDDDDF1F1F1F1F1F1F1F1F1CCCCCC999999F1F1F1 - F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFF1F1 - F1F1F1F1F1F1F1C0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0FFFFFFDDDDDDDDDD - DDDDDDDDDDDDDDDDDDDDDDDDDDF1F1F1DDDDDDC0C0C0CCCCCCF1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1DDDDDDDDDDDDF1F1F1F1F1F1 - F1F1F1F1F1F1CCCCCCC0C0C0DDDDDDF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFDDDD - DDDDDDDDC0C0C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1CCCCCC0000FF00 - 00FF0000FF0000FF0000FFDDDDDDDDDDDDDDDDDDF1F1F1FFFFFFFFFFFF0000FF - 0000FF0000FF0000FF0000FFF1F1F1DDDDDDDDDDDDCCCCCCDDDDDD8000008000 - 00F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1FFFFFF800000800000800000F1F1F1F1 - F1F1DDDDDDC0C0C0CCCCCCCCCCCCFFFFFFFFFFFFF1F1F1DDDDDDC0C0C0800000 - 800000800000F1F1F1F1F1F1F1F1F1FFFFFFF1F1F1F1F1F1FFFFFFFFFFFFFFFF - FF800000800000800000800000F1F1F1F1F1F1F1F1F1DDDDDDF1F1F1F1F1F1F1 - F1F1FFFFFFFFFFFFFFFFFF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FF0000FF0000FFF1F1F1F1F1F1F1F1F1DDDDDDC0C0C0DDDD - DDF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFF1 - F1F1F1F1F1CCCCCCFFFFFFC0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0F1F1F1F1 - F1F1DDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDFFFFFFFFFFFF - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDD - DDDDDDDDDDDDDDDDDDDDCCCCCCF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFF - FFFFDDDDDDDDDDDDC0C0C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - F1F1F10000FF0000FF0000FFDDDDDDDDDDDDDDDDDDDDDDDDCCCCCCF1F1F1FFFF - FFDDDDDDF1F1F1F1F1F10000FF0000FF0000FFB2B2B2C0C0C0DDDDDDF1F1F180 - 0000800000800000FFFFFFFFFFFFF1F1F1F1F1F1FFFFFF800000800000800000 - 800000DDDDDDB2B2B2CCCCCCFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1CCCC - CC800000800000800000F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1FFFFFFFFFFFFFF - FFFFFFFFFFFFFFFF800000800000800000F1F1F1F1F1F1FFFFFFF1F1F1FFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FFDDDDDDDDDDDDDDDDDDCCCCCCCC - CCCCF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1FFFFFFFFFFFF - F1F1F1DDDDDDCCCCCCCCCCCCFFFFFFC0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0 - F1F1F1F1F1F1DDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFF - FFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFF1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1CCCCCCF1F1F1F1F1F1F1F1F1FFFFFFFFFFFF - FFFFFFFFFFFFC0C0C0C0C0C0B2B2B2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFF1F1F10000FF0000FF0000FF0000FF0000FF0000FF0000FFCCCCCCF1 - F1F1F1F1F10000FF0000FF0000FF0000FF0000FF0000FFCCCCCCDDDDDDF1F1F1 - F1F1F1800000800000800000800000FFFFFFF1F1F1FFFFFFFFFFFFF1F1F18000 - 00800000800000F1F1F1C0C0C0DDDDDDFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1 - F1F1DDDDDD800000800000800000F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1FFFFFF - FFFFFFFFFFFFFFFFFFFFFFFF800000800000800000800000FFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F10000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFDDDDDDDDDDDD - 999999DDDDDDF1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFF - FFF1F1F1F1F1F1CCCCCCB2B2B2DDDDDDFFFFFFC0C0C0C0C0C0C0C0C00000C0C0 - C0C0C0C0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFF - F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1CCCCCCCCCCCCF1F1F1F1F1F1F1F1F1FFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1 - F1F1FFFFFFFFFFFFFFFFFFFFFFFF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FFF1F1F1FFFFFF0000FF0000FF0000FF0000FF0000FF0000FF0000FFFFFF - FFFFFFFFFFFFFFF1F1F1FFFFFF800000800000800000FFFFFFFFFFFFFFFFFFF1 - F1F1F1F1F1800000800000800000800000800000FFFFFFFFFFFFFFFFFFF1F1F1 - F1F1F1F1F1F1F1F1F1800000800000800000800000FFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDC0C0C0800000800000800000800000FF - FFFFFFFFFFF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1 - FFFFFF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FFC0C0 - C0C0C0C0CCCCCCF1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1CCCCCCC0C0C0CC - CCCCFFFFFFF1F1F1F1F1F1C0C0C0DDDDDDFFFFFFFFFFFFC0C0C0C0C0C0C0C0C0 - 0000C0C0C0C0C0C0DDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1DDDDDDC0C0C0DDDDDDF1F1F1FFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1FFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFF1F1F1FFFFFFF1F1F1FFFFFFFFFFFFFFFFFF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FFFFFFFF0000FF0000FF0000FF0000FF0000FF0000FF00 - 00FF0000FFFFFFFFF1F1F1FFFFFFFFFFFF800000800000800000DDDDDDF1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F18000008000008000008000008000008000 - 00800000800000800000800000800000800000800000800000FFFFFFFFFFFFFF - FFFFFFFFFF800000800000800000800000800000800000800000800000800000 - 800000800000800000800000800000800000800000800000800000F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1B2B2B20000FF0000FF0000FF0000FF0000FF0000FF00 - 00FFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFCCCCCC999999B2B2B2 - F1F1F1F1F1F1FFFFFFC0C0C0C0C0C0CCCCCCF1F1F1FFFFFFFFFFFFC0C0C0C0C0 - C0C0C0C00000C0C0C0C0C0C0F1F1F1F1F1F1F1F1F1DDDDDDDDDDDDDDDDDDDDDD - DDC0C0C0C0C0C0F1F1F1F1F1F1DDDDDDDDDDDDF1F1F1F1F1F1FFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1FFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFF1F1F10000FF0000FF00 - 00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF - 0000FF0000FF0000FFFFFFFFF1F1F1DDDDDDF1F1F1DDDDDD8000008000008000 - 00DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F180000080000080000080 - 0000800000800000800000800000800000800000800000800000FFFFFFF1F1F1 - F1F1F1FFFFFFFFFFFF8000008000008000008000008000008000008000008000 - 00800000800000800000800000800000800000800000800000800000800000F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1C0C0C00000FF0000FF0000FF0000FF0000FF - 0000FF0000FFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1B2B2B2CCCC - CCDDDDDDFFFFFFFFFFFFF1F1F1CCCCCCCCCCCCDDDDDDFFFFFFFFFFFFFFFFFFC0 - C0C0C0C0C0C0C0C00000C0C0C0C0C0C0DDDDDDCCCCCCCCCCCCC0C0C0C0C0C0B2 - B2B2CCCCCCDDDDDDFFFFFFFFFFFFDDDDDDDDDDDDCCCCCCDDDDDDF1F1F1F1F1F1 - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1 - F1CCCCCCCCCCCCFFFFFFF1F1F1F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1FF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFF1F1F1F1F1F1 - 0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 - FF0000FF0000FF0000FF0000FF0000FF0000FFF1F1F1F1F1F1DDDDDD80000080 - 0000800000800000F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1DDDDDD800000800000800000800000800000800000800000FFFFFFF1F1 - F1DDDDDDF1F1F1F1F1F1F1F1F1F1F1F180000080000080000080000080000080 - 0000800000800000800000800000800000800000800000800000800000800000 - 800000800000800000F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F10000FF0000 - FF0000FF0000FF0000FFFFFFFFFFFFFFDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFC0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1FFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDDDDDDDDDDDCCCCCCF1F1F1F1 - F1F1F1F1F1FFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1F1 - F1F1DDDDDDC0C0C0F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1DDDDDD - DDDDDDDDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDD - DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDC0C0C0CCCCCCF1F1F1F1F1F1FF - FFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - C0C0C0F1F1F1F1F1F1DDDDDDDDDDDDDDDDDDF1F1F1F1F1F1F1F1F1FFFFFFFFFF - FFFFFFFFF1F1F1F1F1F1F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FF - FFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1CCCCCCF1F1F1F1F1F1F1F1F1 - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1 - F1F1F1F1F1F1F1C0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0F1F1F1F1F1F1F1F1 - F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1 - F1F1FFFFFFFFFFFFF1F1F1DDDDDDFFFFFFFFFFFFFFFFFFDDDDDDDDDDDDDDDDDD - F1F1F1FFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFF1F1F1FFFFFFF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1 - F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1 - F1F1F1F1F1F1CCCCCCC0C0C0F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFDDDDDDF1F1 - F1DDDDDDDDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDF1 - F1F1DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDC0C0C0DDDDDDF1F1F1 - F1F1F1F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1DDDDDDC0C0C0F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1 - F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1CCCCCCDDDDDDF1F1 - F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFC0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0F1F1F1FF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - DDDDDDC0C0C0DDDDDDC0C0C0DDDDDDFFFFFFFFFFFFF1F1F1F1F1F1DDDDDDDDDD - DDDDDDDDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFF - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1 - F1F1F1F1F1F1F1DDDDDDC0C0C0DDDDDDF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1 - F1F1DDDDDDDDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDD - C0C0C0DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1CCCCCCDDDD - DDF1F1F1F1F1F1F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1DDDDDDF1F1F1F1 - F1F1C0C0C0C0C0C0F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1FFFFFFF1F1F1FFFFFF - F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1DDDDDDC0C0C0F1 - F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1 - F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFC0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0 - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFC0C0 - C0CCCCCCCCCCCCDDDDDDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1DD - DDDDDDDDDDDDDDDDDDDDDDDDDDDDF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFF1F1 - F1F1F1F1F1F1F1DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFF1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1C0C0C0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFF - FFFFFFF1F1F1DDDDDDCCCCCCDDDDDDF1F1F1DDDDDDDDDDDDDDDDDDC0C0C0CCCC - CCCCCCCCCCCCCCF1F1F1DDDDDDDDDDDDF1F1F1F1F1F1F1F1F1DDDDDDDDDDDDCC - CCCCF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1DDDDDDDDDDDD - DDDDDDDDDDDDC0C0C0DDDDDDF1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1 - F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1DDDDDD - CCCCCCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFC0C0C0C0C0C0C0C0C00000C0C0 - C0C0C0C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1FFFFFFF1 - F1F1DDDDDDF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1CCCCCC - DDDDDDC0C0C0CCCCCCDDDDDDC0C0C0C0C0C0CCCCCCF1F1F1FFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDDDDDDDDDD - DDDDF1F1F1F1F1F1CCCCCCDDDDDDF1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1 - FFFFFFF1F1F1F1F1F1DDDDDDC0C0C0DDDDDDF1F1F1F1F1F1FFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFC0C0C0CCCCCCF1F1F1F1F1F1DDDDDDDDDDDDC0C0C0DDDDDDDD - DDDDF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFF1F1F1FFFFFFF1F1F1F1F1F1DDDDDD - DDDDDDDDDDDDDDDDDDFFFFFFF1F1F1FFFFFFFFFFFFDDDDDDDDDDDDF1F1F1F1F1 - F1DDDDDDCCCCCCDDDDDDDDDDDDF1F1F1FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1FF - FFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCCCCCCDDDDDDF1F1F1 - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1DDDD - DDCCCCCCCCCCCCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0C0C0C0C0C0C0C0C0 - 0000C0C0C0C0C0C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1 - F1F1F1F1F1F1DDDDDDF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1 - F1DDDDDDCCCCCCC0C0C0DDDDDDCCCCCCC0C0C0CCCCCCF1F1F1FFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1DDDDDDF1F1F1F1F1F1F1F1F1DDDDDD - CCCCCCC0C0C0DDDDDDCCCCCCC0C0C0F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFF - FFF1F1F1FFFFFFF1F1F1DDDDDDC0C0C0CCCCCCF1F1F1F1F1F1FFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFF1F1F1DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1DDDDDD - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1F1F1 - F1DDDDDDDDDDDDDDDDDDDDDDDDF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1CCCCCCDDDDDDF1F1F1F1F1F1FFFFFFF1F1F1FFFFFFF1F1F1F1F1F1 - F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1B2B2B2CCCC - CCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1 - F1F1DDDDDDC0C0C0F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0C0C0C0C0 - C0C0C0C00000C0C0C0C0C0C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1 - F1F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1FFFFFFF1F1F1F1F1F1FFFFFFF1F1F1FF - FFFFF1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1 - F1F1F1F1F1F1FFFFFFFFFFFFF1F1F1F1F1F1DDDDDDC0C0C0CCCCCCF1F1F1DDDD - DDC0C0C0DDDDDDF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFF1F1F1F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1 - F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFF1F1F1DD - DDDDDDDDDDDDDDDDDDDDDDDDDDDDF1F1F1DDDDDDCCCCCCDDDDDDF1F1F1FFFFFF - FFFFFFFFFFFFF1F1F1DDDDDDF1F1F1FFFFFFF1F1F1FFFFFFFFFFFFF1F1F1DDDD - DDF1F1F1FFFFFFFFFFFFF1F1F1DDDDDDF1F1F1FFFFFFF1F1F1DDDDDDCCCCCCDD - DDDDF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - DDDDDDCCCCCCB2B2B2C0C0C0FFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1CCCCCCC0 - C0C0C0C0C0C0C0C00000C0C0C0C0C0C0F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFF1F1F1F1F1F1FFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFF1F1F1F1F1F1DDDDDDCCCCCCCCCCCCF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1CC - CCCCCCCCCCC0C0C0F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1F1F1F1FFFF - FFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1 - DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDCCCCCCC0C0C0CCCCCCDDDDDDF1F1F1F1F1 - F1FFFFFFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1FFFFFFF1 - F1F1F1F1F1FFFFFFFFFFFFDDDDDDCCCCCCCCCCCCF1F1F1FFFFFFFFFFFFF1F1F1 - F1F1F1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - FFFFFFFFF1F1F1F1F1F1F1F1F1F1F1F1FFFFFFF1F1F1FFFFFFFFFFFFFFFFFFFF - FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F1F1F1DDDDDDDDDDDDC0C0C0 - CCCCCCC0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C00000C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 - C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C00000} - Stretch = True - IsControl = True - end - object lblProductName: TLabel - Left = 5 - Top = 80 - Width = 68 - Height = 13 - Alignment = taCenter - Caption = 'Product Name' - IsControl = True - end - object lblVersion: TLabel - Left = 8 - Top = 160 - Width = 74 - Height = 13 - Caption = 'Version: 1.1.1.1' - IsControl = True - end - object lblGovStatement: TLabel - Left = 5 - Top = 96 - Width = 231 - Height = 13 - Alignment = taCenter - Caption = 'Developed by the Department of Veterans Affairs' - IsControl = True - end - object lblCRC: TLabel - Left = 232 - Top = 160 - Width = 92 - Height = 13 - Caption = 'CRC: DDDDDDDD' - end - object lblDate: TLabel - Left = 97 - Top = 160 - Width = 82 - Height = 13 - Alignment = taCenter - Caption = 'January 30, 2000' - end - object ProgramIcon: TImage - Left = 176 - Top = 8 - Width = 145 - Height = 73 - end - object Memo1: TMemo - Left = 8 - Top = 112 - Width = 321 - Height = 49 - BorderStyle = bsNone - Lines.Strings = ( - 'Unauthorized access or use of this system and/or its data is a ' - - 'federal crime. Use of all data must be in accordance with VA po' + - 'licy ' - 'on security and privacy.') - ParentColor = True - TabOrder = 0 - end - end - object OKButton: TButton - Left = 139 - Top = 204 - Width = 75 - Height = 25 - Caption = 'OK' - Default = True - ModalResult = 1 - TabOrder = 1 - end -end diff --git a/BDK32/Source/frmVistAAbout.pas b/BDK32/Source/frmVistAAbout.pas deleted file mode 100644 index 51a2141..0000000 --- a/BDK32/Source/frmVistAAbout.pas +++ /dev/null @@ -1,278 +0,0 @@ -{ ************************************************************** - Package: XWB - Kernel RPCBroker - Date Created: Sept 18, 1997 (Version 1.1) - Site Name: Oakland, OI Field Office, Dept of Veteran Affairs - Developers: Wally Fort, Joel Ivey - Description: Generic About form, simply call ShowAboutBox. - Includes display of date, CRC32, and info from - Program Info. - Current Release: Version 1.1 Patch 40 (January 7, 2005)) -*************************************************************** } - -unit frmVistAAbout; - -interface - -uses Windows, SysUtils, Classes, Graphics, Forms, Controls, StdCtrls, - Buttons, ExtCtrls, jpeg, jconsts, Dialogs; - -TYPE - TInteger8 = Int64; - -type - TfrmVistAAbout = class(TForm) - Panel1: TPanel; - VistaLogo: TImage; - lblProductName: TLabel; - lblVersion: TLabel; - lblGovStatement: TLabel; - OKButton: TButton; - lblCRC: TLabel; - Memo1: TMemo; - lblDate: TLabel; - ProgramIcon: TImage; - procedure FormCreate(Sender: TObject); - private - { Private declarations } - public - { Public declarations } - procedure getfileinfo(var Version: String; var ProductName: String); virtual; - end; - -procedure ShowAboutBox; - -implementation - -{$R *.DFM} - - CONST - table: ARRAY[0..255] OF DWORD = - ($00000000, $77073096, $EE0E612C, $990951BA, - $076DC419, $706AF48F, $E963A535, $9E6495A3, - $0EDB8832, $79DCB8A4, $E0D5E91E, $97D2D988, - $09B64C2B, $7EB17CBD, $E7B82D07, $90BF1D91, - $1DB71064, $6AB020F2, $F3B97148, $84BE41DE, - $1ADAD47D, $6DDDE4EB, $F4D4B551, $83D385C7, - $136C9856, $646BA8C0, $FD62F97A, $8A65C9EC, - $14015C4F, $63066CD9, $FA0F3D63, $8D080DF5, - $3B6E20C8, $4C69105E, $D56041E4, $A2677172, - $3C03E4D1, $4B04D447, $D20D85FD, $A50AB56B, - $35B5A8FA, $42B2986C, $DBBBC9D6, $ACBCF940, - $32D86CE3, $45DF5C75, $DCD60DCF, $ABD13D59, - $26D930AC, $51DE003A, $C8D75180, $BFD06116, - $21B4F4B5, $56B3C423, $CFBA9599, $B8BDA50F, - $2802B89E, $5F058808, $C60CD9B2, $B10BE924, - $2F6F7C87, $58684C11, $C1611DAB, $B6662D3D, - - $76DC4190, $01DB7106, $98D220BC, $EFD5102A, - $71B18589, $06B6B51F, $9FBFE4A5, $E8B8D433, - $7807C9A2, $0F00F934, $9609A88E, $E10E9818, - $7F6A0DBB, $086D3D2D, $91646C97, $E6635C01, - $6B6B51F4, $1C6C6162, $856530D8, $F262004E, - $6C0695ED, $1B01A57B, $8208F4C1, $F50FC457, - $65B0D9C6, $12B7E950, $8BBEB8EA, $FCB9887C, - $62DD1DDF, $15DA2D49, $8CD37CF3, $FBD44C65, - $4DB26158, $3AB551CE, $A3BC0074, $D4BB30E2, - $4ADFA541, $3DD895D7, $A4D1C46D, $D3D6F4FB, - $4369E96A, $346ED9FC, $AD678846, $DA60B8D0, - $44042D73, $33031DE5, $AA0A4C5F, $DD0D7CC9, - $5005713C, $270241AA, $BE0B1010, $C90C2086, - $5768B525, $206F85B3, $B966D409, $CE61E49F, - $5EDEF90E, $29D9C998, $B0D09822, $C7D7A8B4, - $59B33D17, $2EB40D81, $B7BD5C3B, $C0BA6CAD, - - $EDB88320, $9ABFB3B6, $03B6E20C, $74B1D29A, - $EAD54739, $9DD277AF, $04DB2615, $73DC1683, - $E3630B12, $94643B84, $0D6D6A3E, $7A6A5AA8, - $E40ECF0B, $9309FF9D, $0A00AE27, $7D079EB1, - $F00F9344, $8708A3D2, $1E01F268, $6906C2FE, - $F762575D, $806567CB, $196C3671, $6E6B06E7, - $FED41B76, $89D32BE0, $10DA7A5A, $67DD4ACC, - $F9B9DF6F, $8EBEEFF9, $17B7BE43, $60B08ED5, - $D6D6A3E8, $A1D1937E, $38D8C2C4, $4FDFF252, - $D1BB67F1, $A6BC5767, $3FB506DD, $48B2364B, - $D80D2BDA, $AF0A1B4C, $36034AF6, $41047A60, - $DF60EFC3, $A867DF55, $316E8EEF, $4669BE79, - $CB61B38C, $BC66831A, $256FD2A0, $5268E236, - $CC0C7795, $BB0B4703, $220216B9, $5505262F, - $C5BA3BBE, $B2BD0B28, $2BB45A92, $5CB36A04, - $C2D7FFA7, $B5D0CF31, $2CD99E8B, $5BDEAE1D, - - $9B64C2B0, $EC63F226, $756AA39C, $026D930A, - $9C0906A9, $EB0E363F, $72076785, $05005713, - $95BF4A82, $E2B87A14, $7BB12BAE, $0CB61B38, - $92D28E9B, $E5D5BE0D, $7CDCEFB7, $0BDBDF21, - $86D3D2D4, $F1D4E242, $68DDB3F8, $1FDA836E, - $81BE16CD, $F6B9265B, $6FB077E1, $18B74777, - $88085AE6, $FF0F6A70, $66063BCA, $11010B5C, - $8F659EFF, $F862AE69, $616BFFD3, $166CCF45, - $A00AE278, $D70DD2EE, $4E048354, $3903B3C2, - $A7672661, $D06016F7, $4969474D, $3E6E77DB, - $AED16A4A, $D9D65ADC, $40DF0B66, $37D83BF0, - $A9BCAE53, $DEBB9EC5, $47B2CF7F, $30B5FFE9, - $BDBDF21C, $CABAC28A, $53B39330, $24B4A3A6, - $BAD03605, $CDD70693, $54DE5729, $23D967BF, - $B3667A2E, $C4614AB8, $5D681B02, $2A6F2B94, - $B40BBE37, $C30C8EA1, $5A05DF1B, $2D02EF8D); - - // Use CalcCRC32 as a procedure so CRCValue can be passed in but - // also returned. This allows multiple calls to CalcCRC32 for - // the "same" CRC-32 calculation. - PROCEDURE CalcCRC32 (p: pointer; ByteCount: DWORD; VAR CRCValue: DWORD); - // The following is a little cryptic (but executes very quickly). - // The algorithm is as follows: - // 1. exclusive-or the input byte with the low-order byte of - // the CRC register to get an INDEX - // 2. shift the CRC register eight bits to the right - // 3. exclusive-or the CRC register with the contents of - // Table[INDEX] - // 4. repeat steps 1 through 3 for all bytes - - VAR - i: DWORD; - q: ^BYTE; - BEGIN - q := p; - FOR i := 0 TO ByteCount-1 DO BEGIN - CRCvalue := (CRCvalue SHR 8) XOR - Table[ q^ XOR (CRCvalue AND $000000FF) ]; - INC(q) - END - END {CalcCRC32}; - - - // The CRC-32 value calculated here matches the one from the PKZIP program. - // Use MemoryStream to read file in binary mode. - PROCEDURE CalcFileCRC32 (FromName: STRING; VAR CRCvalue: DWORD; - VAR TotalBytes: TInteger8; - VAR error: WORD); - VAR - Stream: TMemoryStream; - BEGIN - error := 0; - CRCValue := $FFFFFFFF; - Stream := TMemoryStream.Create; - TRY - TRY - Stream.LoadFromFile(FromName); - IF Stream.Size > 0 - THEN CalcCRC32 (Stream.Memory, Stream.Size, CRCvalue) - EXCEPT - ON E: EReadError DO - error := 1 - END; - - CRCvalue := NOT CRCvalue; - TotalBytes := Stream.Size - FINALLY - Stream.Free - END; - END {CalcFileCRC32}; - -procedure TfrmVistAAbout.FormCreate(Sender: TObject); -var - CRC32: DWord; - TotalBytes: Int64; - Error: Word; - Text: String; - Version: String; - ProductName: String; -begin - CalcFileCRC32(Application.ExeName, CRC32, TotalBytes, Error); - lblCRC.Caption := 'CRC: ' + IntToHex(CRC32,8); - Text := Application.ExeName; - while pos('\',Text) > 0 do - begin - Text := copy(Text,pos('\',Text)+1,Length(Text)); - end; // while - Text := copy(Text,1,Length(Text)-4); - Caption := 'About ' + Text; - getfileinfo(Version, ProductName); - lblProductName.Caption := ProductName; - lblVersion.Caption := 'Version: ' + Version; - lblProductName.Width := Panel1.Width-10; - lblGovStatement.Width := Panel1.Width-10; - if ProgramIcon.Picture.Graphic = nil then - begin - VistALogo.Left := (Panel1.Width - VistALogo.Width) div 2; - end; -end; - -procedure TfrmVistAAbout.GetFileInfo(var Version: String; var ProductName: String); -var - VerInfoSize: DWORD; // holds the size of the version info resource - GetInfoSizeJunk: DWORD; // a junk variable, its value is ignored - VersionInfo: Pointer; // points to the version info resource - Translation: Pointer; // holds version info translation table - InfoPointer: Pointer; // a pointer to version information - - VersionInfoSize: UINT; // holds the size of version information - VersionValue: string; // holds the version info request string - SearchRec: TSearchRec; - DateTimeVal: TDateTime; - WriteTime: Integer; -begin - {retrieve the size of the version information resource, if one exists} - VerInfoSize := GetFileVersionInfoSize(PChar(Application.ExeName), - GetInfoSizeJunk); - - {if there was a version information resource available...} - - if VerInfoSize>0 then - begin - {retrieve enough memory to hold the version resource} - GetMem(VersionInfo, VerInfoSize); - - {retrieve the version resource for the selected file} - GetFileVersionInfo(PChar(Application.ExeName), 0, - VerInfoSize, VersionInfo); - - {retrieve a pointer to the translation table} - VerQueryValue(VersionInfo, '\\VarFileInfo\\Translation', - Translation, VersionInfoSize); - - {initialize the version value request string} - VersionValue :='\\StringFileInfo\\'+ - IntToHex(LoWord(LongInt(Translation^)),4)+ - IntToHex(HiWord(LongInt(Translation^)),4)+ - '\\'; - - {retrieve and display the file version} - VerQueryValue(VersionInfo, PChar(VersionValue+'FileVersion'), InfoPointer, - VersionInfoSize); - Version := string(PChar(InfoPointer)); - - {retrieve and display the product name} - VerQueryValue(VersionInfo, PChar(VersionValue+'ProductName'), InfoPointer, - VersionInfoSize); - ProductName := string(PChar(InfoPointer)); - - {free the version resource memory} - FreeMem(VersionInfo, VerInfoSize); - end - else - begin - Version := 'Not in File'; - ProductName := 'Not Identified In File'; - end; - if findfirst(Application.ExeName, faAnyFile, SearchRec) = 0 then - begin - WriteTime := SearchRec.Time; - DateTimeVal := FileDateToDateTime(WriteTime); - lblDate.Caption := FormatDateTime('mmmm dd, yyyy hh:nn',DateTimeVal); - end; -end; - -procedure ShowAboutBox; -begin - with TfrmVistAAbout.Create(Application) do - try - ShowModal; - finally - free; - end; -end; - -end. - - \ No newline at end of file diff --git a/BDK32/Source/uSharedBroker1.dof b/BDK32/Source/uSharedBroker1.dof deleted file mode 100644 index bb349d5..0000000 --- a/BDK32/Source/uSharedBroker1.dof +++ /dev/null @@ -1,82 +0,0 @@ -[Compiler] -A=1 -B=0 -C=1 -D=1 -E=0 -F=0 -G=1 -H=1 -I=1 -J=1 -K=0 -L=1 -M=0 -N=1 -O=1 -P=1 -Q=0 -R=0 -S=0 -T=0 -U=0 -V=1 -W=0 -X=1 -Y=1 -Z=1 -ShowHints=1 -ShowWarnings=1 -UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; -[Linker] -MapFile=0 -OutputObjs=0 -ConsoleApp=1 -DebugInfo=0 -RemoteSymbols=0 -MinStackSize=16384 -MaxStackSize=1048576 -ImageBase=4194304 -ExeDescription=VistA SharedBroker2 test -[Directories] -OutputDir= -UnitOutputDir= -PackageDLLOutputDir= -PackageDCPOutputDir= -SearchPath= -Packages=Vcl50;Vclx50;Vcldb50;Vclbde50;VclSmp50;vclado50;ibevnt50;vcldbx50;Qrpt50;TeeUI50;TeeDB50;Tee50;Dss50;TeeQR50;VCLIB50;Vclmid50;vclie50;Inetdb50;Inet50;NMFast50;webmid50;dclocx50;dclaxserver50;JLITestFDE;Rz252N50;Rz252D50;CS20Comps50;CSP20I50;gmunitsd5;gmctrlsd5;gmchrtedd5;gmdaouid5;GMDaod5;gmdbgend5;gmdbctrld5;gmadouid5;GMAdod5;democomponentsd5;XUtilsR50;XUDT_R50;XU_R50;Indy50;XWB_R50 -Conditionals= -DebugSourceDirs= -UsePackages=0 -[Parameters] -RunParams= -HostApplication= -[Language] -ActiveLang= -ProjectLang=$00000409 -RootDir= -[Version Info] -IncludeVerInfo=1 -AutoIncBuild=0 -MajorVer=1 -MinorVer=0 -Release=0 -Build=0 -Debug=0 -PreRelease=0 -Special=0 -Private=0 -DLL=0 -Locale=1033 -CodePage=1252 -[Version Info Keys] -CompanyName= -FileDescription= -FileVersion=1.0.0.0 -InternalName= -LegalCopyright= -LegalTrademarks= -OriginalFilename= -ProductName= -ProductVersion=1.0.0.0 -Comments= diff --git a/BDK32/Source/uSharedBroker1.dpk b/BDK32/Source/uSharedBroker1.dpk deleted file mode 100644 index 70f312c..0000000 --- a/BDK32/Source/uSharedBroker1.dpk +++ /dev/null @@ -1,34 +0,0 @@ -package uSharedBroker1; - -{$R *.RES} -{$ALIGN ON} -{$ASSERTIONS ON} -{$BOOLEVAL OFF} -{$DEBUGINFO ON} -{$EXTENDEDSYNTAX ON} -{$IMPORTEDDATA ON} -{$IOCHECKS ON} -{$LOCALSYMBOLS ON} -{$LONGSTRINGS ON} -{$OPENSTRINGS ON} -{$OPTIMIZATION ON} -{$OVERFLOWCHECKS OFF} -{$RANGECHECKS OFF} -{$REFERENCEINFO ON} -{$SAFEDIVIDE OFF} -{$STACKFRAMES OFF} -{$TYPEDADDRESS OFF} -{$VARSTRINGCHECKS ON} -{$WRITEABLECONST ON} -{$MINENUMSIZE 1} -{$IMAGEBASE $400000} -{$DESCRIPTION 'VistA SharedBroker2 test'} -{$IMPLICITBUILD OFF} - -requires - vcl50; - -contains - uSharedBroker1 in 'uSharedBroker1.pas'; - -end. diff --git a/BDK32/Source/uSharedBroker1.pas b/BDK32/Source/uSharedBroker1.pas deleted file mode 100644 index b20b93b..0000000 --- a/BDK32/Source/uSharedBroker1.pas +++ /dev/null @@ -1,2127 +0,0 @@ -{ ************************************************************** - Package: XWB - Kernel RPCBroker - Date Created: Sept 18, 1997 (Version 1.1) - Site Name: Oakland, OI Field Office, Dept of Veteran Affairs - Developers: Kevin Meldrum, Travis Hilton, Joel Ivey - Description: SharedBroker functionality for the - RPCSharedBrokerSessionMgr1. - Current Release: Version 1.1 Patch 40 (January 7, 2005)) -*************************************************************** } - -unit uSharedBroker1; - -interface - -uses - Windows, ComObj, ActiveX, AxCtrls, Classes, RPCSharedBrokerSessionMgr1_TLB, StdVcl, - Trpcb; - -const - kMilliSecondScale: double = 1000; - kCloseAllClientsWaitTimeDefault: double = 10 * 1000; // In milliseconds - kMillisecondTicksPerSecond: Extended = 1000; - -type - // RPCCallHistoryEntry contains the call name, params, results and other - // info regarding a single rpc call. It is using in passing rpc info - // around the history - RPCCallHistoryEntry = class - private - FBrokerContext: WideString; // Context in which the RPC call was made - FRpcName: WideString; // M name of the RPC call - FParams: WideString; // M parameters to the RPC call - FResults: WideString; // results of the call - FStartDateTime: Double; // time/date just before the call was made - FDurationInMS: Longword; // duration of the RPC in milliseconds - FUniqueRPCCallId: Longword; // Unique RPC call id - FUniqueClientId: Integer; // The client that made the RPC - - public - constructor Create; overload; - constructor Create(context:WideString; - name:WideString; - params:WideString; - results:WideString; - startDateTime:Double; - durationInMS:Longword; - clientId:Integer); overload; - - property CallContext:WideString read FBrokerContext write FBrokerContext; - property CallName:WideString read FRpcName write FRpcName; - property CallParams:WideString read FParams write FParams; - property CallResults:WideString read FResults write FResults; - property CallStartDateTime:Double read FStartDateTime write FStartDateTime; - property CallDurationInMS:Longword read FDurationInMS write FDurationInMS; - property UniqueRPCCallId:longword read FUniqueRPCCallId write FUniqueRPCCallId; - property BrokerUniqueClientId:Integer read FUniqueClientId write FUniqueClientId; - end; - - RPCCallHistoryEntryPointer = ^RPCCallHistoryEntry; - - // RPCCallHistory keeps track of RPCs and their Results. The end data/time and - // duration of the call in milliseconds is recorded. The uniqueRPCId of the - // call is recorded as well. - RPCCallHistory = class(TList) - constructor Create; overload; - private - FEnabled: boolean; - - public - function Add(entry: RPCCallHistoryEntry): Integer; reintroduce; overload; - property Enabled: boolean read FEnabled write FEnabled; - function GetRPCCallEntryPtr(uniqueRpcId:Longword; - out rpcEntryPtr:RPCCallHistoryEntryPointer) - : ISharedBrokerErrorCode; - function GetRPCCallEntryPtrFromIndex(rpcCallIndex:Integer; - out rpcEntryPtr:RPCCallHistoryEntryPointer) - : ISharedBrokerErrorCode; - function GetRPCCallClientId(uniqueRpcId:Integer; - out uniqueClientId:Integer) - : ISharedBrokerErrorCode; - end; - - // Every TSharedBroker contains a reference to a TBrokerConnection. - // The TBrokerConnection contains an actual instance to to a TRPCBroker - // This is where the connection sharing takes place - TBrokerConnection = class - private - FBroker: TRPCBroker; - FShared: Boolean; - FServerIP: string; - FServer: string; - FPort: Integer; - FRefCount: Integer; - FLastContext: WideString; - FConnectionIndex: Integer; - end; - - TSharedBroker = class(TAutoObject, IConnectionPointContainer, ISharedBroker) - private - { Private declarations } - FConnectionPoints: TConnectionPoints; -// FConnectionPoint: TConnectionPoint; -// FSinkList: TList; - FEvents: ISharedBrokerEvents; - - FBrokerConnection: TBrokerConnection; - FBrokerContext: WideString; - FClientName: WideString; - FUniqueClientId: Longword; - FRpcCallHistory: RPCCallHistory; - FConnectType: ISharedBrokerClient; - FInGeneralClientList: Boolean; -// FShowErrorMsgs: ISharedBrokerShowErrorMsgs; - - procedure DoDisconnect; - - public - Destructor Destroy; override; - procedure Initialize; override; - function GetEnumerator: IEnumConnections; - function GetConnectionIndex: Integer; - public - { Protected declarations } - property ConnectionPoints: TConnectionPoints read FConnectionPoints - implements IConnectionPointContainer; - procedure EventSinkChanged(const EventSink: IUnknown); override; - function BrokerConnect(const ClientName: WideString; - ConnectionType: ISharedBrokerClient; const ServerPort: WideString; - WantDebug, AllowShared, KernelLoginVal: WordBool; - ShowErrMsgs: ISharedBrokerShowErrorMsgs; RpcTimeLim: SYSINT; - var LoginStr: WideString; out UniqueClientIId: SYSINT; - out ErrorMsg: WideString): ISharedBrokerErrorCode; safecall; - function BrokerCall(const RpcName, RpcParams: WideString; - RpcTimeLimit: Integer; out RpcResults: WideString; - out UniqueRpcCallId: Integer): ISharedBrokerErrorCode; safecall; - function BrokerDisconnect: ISharedBrokerErrorCode; safecall; - function BrokerSetContext( - const OptionName: WideString): ISharedBrokerErrorCode; safecall; - function ReadRegDataDefault(Root: IRegistryRootEnum; const Key, Name, - Default: WideString; - out RegResult: WideString): ISharedBrokerErrorCode; safecall; - function Get_PerClientRpcHistoryLimit: Integer; safecall; - function Get_RpcHistoryEnabled: WordBool; safecall; - function Get_RpcVersion: WideString; safecall; - procedure Set_PerClientRpcHistoryLimit(limit: Integer); safecall; - procedure Set_RpcHistoryEnabled(enabled: WordBool); safecall; - procedure Set_RpcVersion(const version: WideString); safecall; - function GetActiveBrokerConnectionIndexCount( - out connectionIndexCount: Integer): ISharedBrokerErrorCode; safecall; - function GetActiveBrokerConnectionIndexFromUniqueClientId( - uniqueClientId: Integer; - out connectionIndex: Integer): ISharedBrokerErrorCode; safecall; - function GetActiveBrokerConnectionInfo(connectionIndex: Integer; - out connectedServerIp: WideString; out connectedServerPort: Integer; - out lastContext: WideString): ISharedBrokerErrorCode; safecall; - function GetClientIdAndNameFromIndex(clientIndex: Integer; - out uniqueClientId: Integer; - out clientName: WideString): ISharedBrokerErrorCode; safecall; - function GetClientNameFromUniqueClientId(uniqueClientId: Integer; - out clientName: WideString): ISharedBrokerErrorCode; safecall; - function GetRpcHistoryCountForClient(uniqueClientId: Integer; - out rpcHistoryCount: Integer): ISharedBrokerErrorCode; safecall; - function LogoutConnectedClients( - logoutTimeLimit: Integer): ISharedBrokerErrorCode; safecall; - function GetRpcCallFromHistoryIndex(uniqueClientId, rpcCallIndex: Integer; - out uniqueRpcId: Integer; out brokerContext, rpcName, rpcParams, - rpcResult: WideString; out rpcStartDateTime: Double; - out rpcDuration: Integer): ISharedBrokerErrorCode; safecall; - function GetRpcClientIdFromHistory(uniqueRpcId: Integer; - out uniqueClientId: Integer; - out clientName: WideString): ISharedBrokerErrorCode; safecall; - function GetConnectedClientCount( - out connectedClientCount: Integer): ISharedBrokerErrorCode; safecall; - function GetRpcCallFromHistory(uniqueRpcId: Integer; - out uniqueClientId: Integer; out brokerContext, rpcName, rpcParams, - rpcResult: WideString; out rpcStartDateTime: Double; - out rpcDuration: Integer): ISharedBrokerErrorCode; safecall; - function Get_CurrentContext: WideString; safecall; - function Get_KernelLogin: WordBool; safecall; - function Get_Login: WideString; safecall; - function Get_RpcbError: WideString; safecall; - function Get_ShowErrorMsgs: ISharedBrokerShowErrorMsgs; safecall; - function Get_Socket: Integer; safecall; - function Get_User: WideString; safecall; - procedure Set_KernelLogin(Value: WordBool); safecall; - procedure Set_Login(const Value: WideString); safecall; - procedure Set_ShowErrorMsgs(Value: ISharedBrokerShowErrorMsgs); safecall; - - property ClientName: WideString read FClientName write FClientName; - property BrokerUniqueClientId: Longword read FUniqueClientId write FUniqueClientId; - property RpcHistory: RPCCallHistory read FRpcCallHistory ; - property ConnectType: ISharedBrokerClient read FConnectType write FConnectType; - property BrokerConnectionIndex: Integer read GetConnectionIndex; - end; - - // TSharedBrokerClientMgr is used as a global container to manage all of the clients of the shared broker - // There is a single global instance of this class allocated below called ClientMgr; - // Other classes within the RPCSharedBrokerSessionMgr can get at the client information through ClientMgr; - // All new Send event methods should be implemented here. - TSharedBrokerClientMgr = class - private - FAllConnections: TList; // The list of unique ServerPort/Shared actual connections - FAllConnectedClients: TList; // All Clients connected through a broker connection - // are added to this list - FAllClients: TList; // Any TSharedBroker is added to this list - FNextRpcUniqueId: Longword; - FRpcCallHistoryEnabled: boolean; - FPerClientRpcHistoryLimit: integer; - FNoClientsHaveConnectedYet: boolean; - FInProcessOfLoggingOutClients: boolean; - FCloseAllClientsWaitTime : Double; - FKillClientsStartedTime : Int64; - FKillClientsCountdownStarted : boolean; - - procedure SetRpcCallHistoryEnabled(enabled: boolean); - - public - constructor Create; - destructor Destroy; override; - - // event procedures - // SendOnLogout sends the OnLogout event to all attached event controllers. - // Messages are sent to both DebuggerClient and BrokerClient types - procedure SendOnLogout; - - // SendOnRpcCallRecorded is only sent to DebuggerClient type connections - // when any RPC call completes. The unique RPC id of the RPC is sent - // as a parameter - procedure SendOnRpcCallRecorded(uniqueRpcId: Longword); - - // SendOnClientConnect is only sent to DebuggerClient type connections - // when any client successfully connects. The unique Id of that - // client is passed as a parameter - procedure SendOnClientConnect(uniqueClientId: Integer; connection: ISharedBrokerConnection); - - // SendOnClientDisconnect is only sent to DebuggerClient type connections - // when any client disconnects. The unique Id of that - // client is passed as a parameter - procedure SendOnClientDisconnect(uniqueClientId: Integer); - - // SendOnContextChanged calls the OnContextChanged event handlers on DebbugerClient type - // connections. - procedure SendOnContextChanged(connectionIndex: Integer; newContext: WideString); - - // SendOnConnectionDropped (or other WSA___ error) calls the OnConnectionDropped event - // handlers for DebuggerClient type and for BrokerClient types on the connection that encountered the error. - procedure SendOnConnectionDropped(RPCBroker: TRPCBroker; ErrorText: String); - - // Connected Client management mmethods - procedure CloseAllClients(maxWaitTime: Integer); // Wait time is in seconds - procedure CheckDisconnectWaitTimeAndShutdownClients; - procedure ListAllConnectedClients(AList: TStrings); - procedure AddConnectedBrokerClient(broker: TSharedBroker); - procedure RemoveConnectedBrokerClient(broker: TSharedBroker); - function ConnectedClientCount : integer; - - // General Client management methods - procedure AddToGeneralClientList(broker: TSharedBroker); - procedure RemoveFromGeneralClientList(broker: TSharedBroker); - function GeneralClientCount:Integer; - - property AllConnections: TList read FAllConnections write FAllConnections; - property NoClientsHaveConnectedYet: Boolean read FNoClientsHaveConnectedYet write FNoClientsHaveConnectedYet; - - // General Methods - function Piece(const S: string; Delim: char; PieceNum: Integer): string; - - // Methods for RPC history - function GetNextRpcUniqueId: Longword; - property RpcCallHistoryEnabled: boolean read FRpcCallHistoryEnabled write SetRpcCallHistoryEnabled; - property PerClientRpcHistoryLimit: integer read FPerClientRpcHistoryLimit write FPerClientRpcHistoryLimit; - - function GetRpcCallEntryPtrFromHistory(uniqueRpcId: Longword; - out rpcEntryPtr: RPCCallHistoryEntryPointer) - : ISharedBrokerErrorCode; - - function GetRpcCallEntryPtrFromHistoryIndex(uniqueClientId: Longword; - rpcCallIndex: Integer; - out rpcEntryPtr: RPCCallHistoryEntryPointer) - : ISharedBrokerErrorCode; - - function GetRpcClientIdFromHistory(uniqueRpcId: Integer; - out uniqueClientId: Integer; - out clientName: WideString) - : ISharedBrokerErrorCode; - - function GetRpcHistoryCountForClient(uniqueClientId: Integer; - out rpcCount: Integer) - : ISharedBrokerErrorCode; - - function GetClientIdAndNameFromIndex(clientIndex: Integer; - out uniqueClientId: Integer; - out clientName: WideString) - : ISharedBrokerErrorCode; - - function GetClientNameFromUniqueClientId(uniqueClientId: Integer; - out clientName: WideString) - : ISharedBrokerErrorCode; - - function GetActiveBrokerConnectionIndexFromUniqueClientId(uniqueClientId: Integer; - out connectionIndex: Integer) - : ISharedBrokerErrorCode; - - procedure OnIdleEventHandler(Sender: TObject; var Done: Boolean); - - property InProcessOfLoggingOutClients: boolean read FInProcessOfLoggingOutClients write FInProcessOfLoggingOutClients; - property CloseAllClientsWaitTime: Double read FCloseAllClientsWaitTime write FCloseAllClientsWaitTime; - - end; - - function GetPerformanceCounterTimeInMS: Int64; - - -var - ClientMgr: TSharedBrokerClientMgr; - -implementation - -//uses ComServ; -uses Messages, ComServ, SysUtils, Forms, {lmdnonvs,} Math, XWBut1, - syncobjs, Rpcconf1, MfunStr; - -const - kUniqueClientIdDefault: Longword = 0; - kClientNameDefault: string = 'UNNAMED'; - kNextRpcUniqueIdInitialValue: Longword = 1; // Start numbering at 1 - kRpcCallHistoryEnabledDefault: boolean = false; - kPerClientRpcHistoryLimitDefault: integer = 10; - kUnassignedString: string = 'UNASSIGNED'; - kNoneString: string = 'NONE'; - -procedure SetBrokerLogin(Str: String; Broker: TRPCBroker); -const - SEP_FS = #28; - SEP_GS = #29; -var - StrFS, StrGS: String; - DivLst: String; - ModeVal: String; - - function TorF(Value: String): Boolean; - begin - Result := False; - if Value = '1' then - Result := True; - end; - -begin - with Broker.Login do - begin - StrFS := SEP_FS; - StrGS := SEP_GS; - LoginHandle := Piece(Str,StrFS,1); - NTToken := Piece(Str,StrFS,2); - AccessCode := Piece(Str,StrFS,3); - VerifyCode := Piece(Str,StrFS,4); - Division := Piece(Str,StrFS,5); - ModeVal := Piece(Str,StrFS,6); - DivLst := Piece(Str,StrFS,7); - MultiDivision := TorF(Piece(Str,StrFS,8)); - DUZ := Piece(Str,StrFS,9); - PromptDivision := TorF(Piece(Str,StrFS,10)); - ErrorText := Piece(Str,StrFS,11); - if ModeVal = '1' then - Mode := lmAVCodes - else if ModeVal = '2' then - Mode := lmAppHandle - else if ModeVal = '3' then - Mode := lmNTToken; - end; // with -end; - -function GetBrokerLogin(Broker: TRPCBroker): WideString; - - function TorF1(Value: Boolean): String; - begin - Result := '0'; - if Value then - Result := '1'; - end; - -const - SEP_FS = #28; - SEP_GS = #29; -var - I: Integer; - Str: String; - ModeVal: String; - DivLst: String; - MultiDiv: String; - PromptDiv: String; - StrFS, StrGS: String; -begin - Str := ''; - with Broker.Login do - begin - StrFS := SEP_FS; - StrGS := SEP_GS; - ModeVal := ''; - if Mode = lmAVCodes then - ModeVal := '1' - else if Mode = lmAppHandle then - ModeVal := '2' - else if Mode = lmNTToken then - ModeVal := '3'; - DivLst := ''; - for i := 0 to Pred(DivList.Count) do - DivLst := DivLst + DivList[i] + SEP_GS; - MultiDiv := TorF1(MultiDivision); - PromptDiv := TorF1(PromptDivision); - Str := LoginHandle + StrFS + NTToken + StrFS + AccessCode + StrFS; - Str := Str + VerifyCode + StrFS + Division + StrFS + ModeVal + StrFS; - Str := Str + DivLst + StrFS + MultiDiv + StrFS + DUZ + StrFS; - Str := Str + PromptDiv + StrFS + ErrorText + StrFS; - end; // with - Result := Str; -end; - - -function GetPerformanceCounterTimeInMS: Int64; -var - frequency: Int64; - performanceCount: Int64; - useNonPerformanceCounter: boolean; -begin - useNonPerformanceCounter := false; - Result := 0; - - if QueryPerformanceFrequency(frequency) then - begin - if frequency >= kMillisecondTicksPerSecond then - begin - if QueryPerformanceCounter(performanceCount) then - begin - Result := Trunc((performanceCount* kMillisecondTicksPerSecond)/frequency); - end else - begin - useNonPerformanceCounter := true; - end; - end else - begin - useNonPerformanceCounter := true; - end; - end else - begin - useNonPerformanceCounter := true; - end; - - if useNonPerformanceCounter = true then - Result := GetTickCount; -end; - - -procedure TSharedBroker.EventSinkChanged(const EventSink: IUnknown); -begin - FEvents := EventSink as ISharedBrokerEvents; -end; - -function TSharedBroker.GetEnumerator: IEnumConnections; -var - Container: IConnectionPointContainer; - ConnectionPoint: IConnectionPoint; -begin - OleCheck(QueryInterface(IConnectionPointContainer,Container)); - OleCheck(Container.FindConnectionPoint(AutoFactory.EventIID,ConnectionPoint)); - ConnectionPoint.EnumConnections(Result); -end; - -procedure TSharedBroker.Initialize; -begin - inherited Initialize; - FConnectionPoints := TConnectionPoints.Create(Self); - FUniqueClientId := kUniqueClientIdDefault; - FClientName := kClientNameDefault; - FRpcCallHistory := RPCCallHistory.Create(); - - // Use this for multiple client connections to this server - if AutoFactory.EventTypeInfo <> nil then - FConnectionPoints.CreateConnectionPoint( - AutoFactory.EventIID, ckMulti, EventConnect); - - // add both connected and non connected clients to the general client list - ClientMgr.AddToGeneralClientList(self); - FInGeneralClientList := true; - -end; - - -destructor TSharedBroker.Destroy; -begin - DoDisconnect; - - FRpcCallHistory.Free; - FRpcCallHistory := nil; - - inherited Destroy; - - // Remove self from the general client list - if FInGeneralClientList = true then - begin - ClientMgr.RemoveFromGeneralClientList(self); - FInGeneralClientList := False; - end; -end; - -{ -function TSharedBroker.BrokerConnect(const clientName: WideString; - connectionType: ISharedBrokerClient; const serverPort: WideString; - wantDebug, allowShared: WordBool; rpcTimeLimit: SYSINT; - out uniqueClientIId: SYSINT): ISharedBrokerErrorCode; -} -function TSharedBroker.BrokerConnect(const ClientName: WideString; - ConnectionType: ISharedBrokerClient; const ServerPort: WideString; - WantDebug, AllowShared, KernelLoginVal: WordBool; - ShowErrMsgs: ISharedBrokerShowErrorMsgs; RpcTimeLim: SYSINT; - var LoginStr: WideString; out UniqueClientIId: SYSINT; - out ErrorMsg: WideString): ISharedBrokerErrorCode; -safecall; -var - aBrokerConnection: TBrokerConnection; - i: Integer; - connectMessage : ISharedBrokerConnection; - serverIP,serverStr: string; - port: Integer; -begin - Result := CouldNotConnect; - ErrorMsg := ''; - connectMessage := Failed; - - if connectionType = BrokerClient then - begin - // First separate out the server/port param into server and port strings - // next look up the serverIP from the server name. - // If valid proceed otherwise error. - serverStr := ClientMgr.Piece(serverPort, ':', 1); - // use a default for the port in case it is not sent in - port := StrToIntDef(ClientMgr.Piece(ServerPort, ':', 2), 9200); - - serverIP := GetServerIP(serverStr); - - aBrokerConnection := nil; - if AllowShared then - for i := 0 to Pred(ClientMgr.AllConnections.Count) do - // Compare against the server IP and the port since a server name - // is not unique. - if (TBrokerConnection(ClientMgr.AllConnections.Items[i]).FServerIP = serverIP) and -// if (TBrokerConnection(ClientMgr.AllConnections.Items[i]).FServerIP = serverStr) and - (TBrokerConnection(ClientMgr.AllConnections.Items[i]).FPort = port) and - TBrokerConnection(ClientMgr.AllConnections.Items[i]).FShared then - aBrokerConnection := TBrokerConnection(ClientMgr.AllConnections.Items[i]); - - if aBrokerConnection = nil then - begin - - aBrokerConnection := TBrokerConnection.Create; - aBrokerConnection.FBroker := TRPCBroker.Create(Application); - ConnectType := BrokerClient; - - with aBrokerConnection.FBroker do - begin - ClearParameters := True; - ClearResults := True; - DebugMode := wantDebug; -// Server := serverIP; - Server := serverStr; - ListenerPort := port; - RPCTimeLimit := rpcTimeLim; - KernelLogin := KernelLoginVal; - OnPulseError := ClientMgr.SendOnConnectionDropped; - SetBrokerLogin(LoginStr, aBrokerConnection.FBroker); - if ShowErrMsgs = isemRaise then - ShowErrorMsgs := semRaise - else - ShowErrorMsgs := semQuiet; - try - Connected := True; - ErrorMsg := RPCBError; - except - ErrorMsg := RPCBError; - end; - end; - - LoginStr := GetBrokerLogin(aBrokerConnection.FBroker); - aBrokerConnection.FShared := allowShared; - aBrokerConnection.FServer := serverStr; - aBrokerConnection.FPort := port; - aBrokerConnection.FServerIP := serverIP; - aBrokerConnection.FConnectionIndex := ClientMgr.AllConnections.Count; - - if aBrokerConnection.FBroker.Connected = true then - begin - ClientMgr.AllConnections.Add(aBrokerConnection); - if aBrokerConnection.FShared then // Set up for cleaning between RPC calls - begin - aBrokerConnection.FBroker.RemoteProcedure := 'XUS SET SHARED'; - aBrokerConnection.FBroker.Param.Clear; - aBrokerConnection.FBroker.Call; - end; - end; - - connectMessage := New; - end else - begin - connectMessage := Shared; - end; - - if aBrokerConnection.FBroker.Connected then - begin - Result := Success; - Inc(aBrokerConnection.FRefCount); - FBrokerConnection := aBrokerConnection; - end else - begin - connectMessage := Failed; - Result := CouldNotConnect; - end; - Set_RpcHistoryEnabled(ClientMgr.RpcCallHistoryEnabled); - end - else if connectionType = DebuggerClient then - begin - ConnectType := DebuggerClient; - - // Debugger clients enable RPC history for Al clients by default - Set_RpcHistoryEnabled(true); - - connectMessage := Debug; - Result := Success; - end; - - FBrokerContext := ''; - - - FClientName := clientName; // The name passed in should be the name - // of the executable - BrokerUniqueClientId := Longword(self); // The self pointer is unique and could - // be dereference later on so use it. - // store it locally for quick access - uniqueClientIId := BrokerUniqueClientId;// Put the unique client id back in - // the out param as well. - - // Only add connected clients to the connected broker client list - if (Result = Success) and (ConnectType <> DebuggerClient)then - begin - ClientMgr.AddConnectedBrokerClient(self); - - // Be sure to send the OnClientConnect message to any - // debugger clients - ClientMgr.SendOnClientConnect(BrokerUniqueClientId,connectMessage); - end; -end; - -function TSharedBroker.BrokerSetContext( - const optionName: WideString): ISharedBrokerErrorCode; -begin - // So don't set the context if it is already the same on - // on the current connection. Also store the new context - // in the connection. - Result := Success; - if FBrokerConnection.FLastContext <> optionName then - begin - if FBrokerConnection.FBroker.CreateContext(optionName) then - begin - FBrokerConnection.FLastContext := optionName; - FBrokerContext := optionName; - Result := Success; - ClientMgr.SendOnContextChanged(FBrokerConnection.FConnectionIndex,optionName); - end else - begin - Result := CouldNotSetContext; - FBrokerConnection.FLastContext := ''; - FBrokerContext := ''; - end; - end; -end; - -function TSharedBroker.BrokerCall(const rpcName, rpcParams: WideString; - rpcTimeLimit: Integer; out rpcResults: WideString; - out uniqueRpcCallId: Integer): ISharedBrokerErrorCode; -const - SEP_FS = #28; - SEP_GS = #29; - SEP_US = #30; - SEP_RS = #31; -var - i, curStart, lengthOfrpcParams, endOfSegment: Integer; - aRef, aVal: string; - startTimeMS, timeElapsedMS: Int64; - currentDateTime: TDateTime; - rpcEntry: RPCCallHistoryEntry; - - function PosNext(aChar: WideChar; startPos: Integer): Integer; - begin - Result := 0; - while (Result = 0) and (StartPos <= lengthOfrpcParams) do - begin - if rpcParams[StartPos] = aChar then Result := startPos; - Inc(startPos); - end; - end; - -begin - Result := Success; - rpcResults := ''; - startTimeMS := 0; - currentDateTime := 0; - - BrokerSetContext(FBrokerContext); - - if Result <> Success then Exit; - - // setup and make the RPC call - FBrokerConnection.FBroker.ClearParameters := True; - FBrokerConnection.FBroker.RemoteProcedure := rpcName; - - // Set RPC timeout - FBrokerConnection.FBroker.RPCTimeLimit := rpcTimeLimit; - - curStart := 1; - i := 0; - lengthOfrpcParams := Length(rpcParams); - while curStart < lengthOfrpcParams do - begin - case rpcParams[curStart] of - 'L': FBrokerConnection.FBroker.Param[i].PType := literal; - 'R': FBrokerConnection.FBroker.Param[i].PType := reference; - 'M': FBrokerConnection.FBroker.Param[i].PType := list; - else FBrokerConnection.FBroker.Param[i].PType := undefined; - end; - Inc(curStart, 2); - if FBrokerConnection.FBroker.Param[i].PType = list then - begin -// endOfSegment := 0; - while rpcParams[curStart] <> SEP_GS do - begin - endOfSegment := PosNext(SEP_US, curStart); - aRef := Copy(rpcParams, curStart, endOfSegment - curStart); - curStart := endOfSegment + 1; - endOfSegment := PosNext(SEP_RS, curStart); - aVal := Copy(rpcParams, curStart, endOfSegment - curStart); - curStart := endOfSegment + 1; - FBrokerConnection.FBroker.Param[i].Mult[aRef] := aVal; - end; {while rpcParams} - {if endOfSegment = 0 then} endOfSegment := PosNext(SEP_GS, curStart); - curStart := endOfSegment + 1; - end else - begin - endOfSegment := PosNext(SEP_GS, curStart); - FBrokerConnection.FBroker.Param[i].Value := - Copy(rpcParams, curStart, endOfSegment - curStart); - curStart := endOfSegment + 1; - end; {if Param[i].PType ... else} - Inc(i); - end; {while curStart} - - if Get_RpcHistoryEnabled = true then - begin - // Get the current time and date of this call - // start the millisecond counter - startTimeMS := GetPerformanceCounterTimeInMS; - currentDateTime := Date; - end; - - FBrokerConnection.FBroker.Call; - - RPCResults := FBrokerConnection.FBroker.Results.Text; - - if FBrokerConnection.FBroker.RPCBError <> '' then - Result := GeneralFailure; - - if ClientMgr.RpcCallHistoryEnabled then - begin - timeElapsedMS := GetPerformanceCounterTimeInMS - startTimeMS; - - rpcEntry := RPCCallHistoryEntry.Create( - FBrokerContext, - rpcName, - rpcParams, - RPCResults, - Double(currentDateTime), - Longword(timeElapsedMS), - BrokerUniqueClientId - ); - - RpcHistory.Add(rpcEntry); - - // Now fire the event so any debugger connected can - // read it - ClientMgr.SendOnRpcCallRecorded(rpcEntry.UniqueRPCCallId); - end; -end; - -procedure TSharedBroker.DoDisconnect; -begin - if FBrokerConnection<>nil then - begin - Dec(FBrokerConnection.FRefCount); - if FBrokerConnection.FRefCount = 0 then - begin - if ConnectType = BrokerClient then - FBrokerConnection.FBroker.Destroy; - - if ClientMgr <> nil then - ClientMgr.AllConnections.Remove(FBrokerConnection); - - FBrokerConnection.Free; - end; - - FBrokerConnection := nil; - FBrokerContext := ''; - - if ConnectType <> DebuggerClient then - begin - ClientMgr.RemoveConnectedBrokerClient(Self); - // Send a message to all debugger clients that - // a non-debugger client has disconnected - ClientMgr.SendOnClientDisconnect(BrokerUniqueClientId); - end; - end; -end; - -function TSharedBroker.BrokerDisconnect: ISharedBrokerErrorCode; -begin - DoDisconnect; - Result := Success; -end; - -function TSharedBroker.ReadRegDataDefault(Root: IRegistryRootEnum; - const Key, Name, Default: WideString; - out RegResult: WideString): ISharedBrokerErrorCode; -var - marshalledRoot: LongWord; -begin - // do a little data marshaling here - case Root of - IRegistryRootEnum(HKCR) : marshalledRoot := HKCR; - IRegistryRootEnum(HKCU) : marshalledRoot := HKCU; - IRegistryRootEnum(HKLM) : marshalledRoot := HKLM; - IRegistryRootEnum(HKU) : marshalledRoot := HKU; - IRegistryRootEnum(HKCC) : marshalledRoot := HKCC; - else - marshalledRoot := HKDD; - end; - - regResult := XWBut1.ReadRegDataDefault(marshalledRoot,key,name,default); - Result := Success; -end; - -function TSharedBroker.Get_RpcVersion: WideString; -begin - if FBrokerConnection <> nil then - begin - Result := FBrokerConnection.FBroker.RpcVersion; - end else - begin - // Don't know what else to make this if we don't actually have a TRPCBroker to ask - Result := '0'; - end; -end; - -procedure TSharedBroker.Set_RpcVersion(const version: WideString); -begin - if FBrokerConnection <> nil then - begin - FBrokerConnection.FBroker.RpcVersion := version; - end -end; - -function TSharedBroker.Get_PerClientRpcHistoryLimit: Integer; -begin - Result := ClientMgr.PerClientRpcHistoryLimit; -end; - -function TSharedBroker.Get_RpcHistoryEnabled: WordBool; -begin - // If debugger client then operate on all of the clients - // else just operate on this one - if ConnectType = DebuggerClient then - Result := ClientMgr.RpcCallHistoryEnabled - else - Result := RpcHistory.Enabled; -end; - -function TSharedBroker.GetConnectedClientCount( - out connectedClientCount: Integer): ISharedBrokerErrorCode; -begin - connectedClientCount := ClientMgr.ConnectedClientCount; - - Result := Success; -end; - -function TSharedBroker.GetRpcCallFromHistory(uniqueRpcId: Integer; - out uniqueClientId: Integer; out brokerContext, rpcName, rpcParams, - rpcResult: WideString; out rpcStartDateTime: Double; - out rpcDuration: Integer): ISharedBrokerErrorCode; -var - rpcEntryPtr: RPCCallHistoryEntryPointer; -begin - Result := ClientMgr.GetRPCCallEntryPtrFromHistory(uniqueRpcId,rpcEntryPtr); - - if Result = Success then - begin - uniqueClientId := rpcEntryPtr^.BrokerUniqueClientId; - brokerContext := rpcEntryPtr^.CallContext; - rpcName := rpcEntryPtr^.CallName; - rpcParams := rpcEntryPtr^.CallParams; - rpcResult := rpcEntryPtr^.CallResults; - rpcStartDateTime := rpcEntryPtr^.CallStartDateTime; - rpcDuration := rpcEntryPtr^.CallDurationInMS; - end else - begin - uniqueClientId := 0; - brokerContext := ''; - rpcName := ''; - rpcParams := ''; - rpcResult := ''; - rpcStartDateTime := 0; - rpcDuration := 0; - end; -end; - -function TSharedBroker.GetRpcCallFromHistoryIndex(uniqueClientId, - rpcCallIndex: Integer; out uniqueRpcId: Integer; out brokerContext, - rpcName, rpcParams, rpcResult: WideString; out rpcStartDateTime: Double; - out rpcDuration: Integer): ISharedBrokerErrorCode; -var - rpcEntryPtr: RPCCallHistoryEntryPointer; -begin - Result := ClientMgr.GetRPCCallEntryPtrFromHistoryIndex(uniqueClientId,rpcCallIndex,rpcEntryPtr); - - if Result = Success then - begin - uniqueRpcId := rpcEntryPtr^.UniqueRPCCallId; - brokerContext := rpcEntryPtr^.CallContext; - rpcName := rpcEntryPtr^.CallName; - rpcParams := rpcEntryPtr^.CallParams; - rpcResult := rpcEntryPtr^.CallResults; - rpcStartDateTime := rpcEntryPtr^.CallStartDateTime; - rpcDuration := rpcEntryPtr^.CallDurationInMS; - end else - begin - uniqueRpcId := 0; - brokerContext := ''; - rpcName := ''; - rpcParams := ''; - rpcResult := ''; - rpcStartDateTime := 0; - rpcDuration := 0; - end; -end; - - -function TSharedBroker.GetClientIdAndNameFromIndex(clientIndex: Integer; - out uniqueClientId: Integer; - out clientName: WideString): ISharedBrokerErrorCode; -begin - Result := ClientMgr.GetClientIdAndNameFromIndex(clientIndex,uniqueClientId,clientName); - // Failure defaults are taken care of by ClientMgr. -end; - -function TSharedBroker.GetRpcClientIdFromHistory(uniqueRpcId: Integer; - out uniqueClientId: Integer; - out clientName: WideString): ISharedBrokerErrorCode; -begin - Result := ClientMgr.GetRPCClientIdFromHistory(uniqueRpcId,uniqueClientId,clientName); - - if Result <> Success then - begin - uniqueClientId := 0; - clientName := ''; - end; -end; - -function TSharedBroker.GetRpcHistoryCountForClient(uniqueClientId: Integer; - out rpcHistoryCount: Integer): ISharedBrokerErrorCode; -begin - Result := ClientMgr.GetRpcHistoryCountForClient(uniqueClientId,rpcHistoryCount); - - if Result <> Success then - rpcHistoryCount := 0; -end; - -procedure TSharedBroker.Set_PerClientRpcHistoryLimit(limit: Integer); -begin - ClientMgr.PerClientRpcHistoryLimit := limit; -end; - -procedure TSharedBroker.Set_RpcHistoryEnabled(enabled: WordBool); -begin - // If debugger client then operate on all of the clients - // else just operate on this one - if ConnectType = DebuggerClient then - ClientMgr.RpcCallHistoryEnabled := enabled - else - RpcHistory.Enabled := enabled; -end; - -function TSharedBroker.LogoutConnectedClients( - logoutTimeLimit: Integer): ISharedBrokerErrorCode; -begin - ClientMgr.CloseAllClients(logoutTimeLimit); - ClientMgr.InProcessOfLoggingOutClients := true; - Result := Success; -end; - -function TSharedBroker.GetClientNameFromUniqueClientId( - uniqueClientId: Integer; - out clientName: WideString): ISharedBrokerErrorCode; -begin - Result := ClientMgr.GetClientNameFromUniqueClientId(uniqueClientId,clientName); -end; - -function TSharedBroker.GetActiveBrokerConnectionIndexCount( - out connectionIndexCount: Integer): ISharedBrokerErrorCode; -begin - connectionIndexCount := ClientMgr.AllConnections.Count; - Result := Success; -end; - -function TSharedBroker.GetActiveBrokerConnectionIndexFromUniqueClientId( - uniqueClientId: Integer; - out connectionIndex: Integer): ISharedBrokerErrorCode; -begin - Result := ClientMgr.GetActiveBrokerConnectionIndexFromUniqueClientId(uniqueClientId,connectionIndex); -end; - -function TSharedBroker.GetActiveBrokerConnectionInfo(connectionIndex: Integer; - out connectedServerIp: WideString; out connectedServerPort: Integer; - out lastContext: WideString): ISharedBrokerErrorCode; -begin - Result := ConnectionIndexOutOfRange; - - if (connectionIndex >= 0) and (connectionIndex < ClientMgr.AllConnections.Count) then - begin - with TBrokerConnection(ClientMgr.AllConnections.Items[connectionIndex]) do - begin - connectedServerIp := FServerIP; - connectedServerPort := FPort; - lastContext := FLastContext; - Result := Success; - end; - end; -end; - -function TSharedBroker.GetConnectionIndex: Integer; -begin - Result := FBrokerConnection.FConnectionIndex; -end; - -constructor TSharedBrokerClientMgr.Create; -begin - inherited; - FAllConnections := TList.Create; - FAllConnectedClients := TList.Create; - FAllClients := TList.Create; - FNoClientsHaveConnectedYet := True; - - FNextRpcUniqueId := kNextRpcUniqueIdInitialValue; - RpcCallHistoryEnabled := kRpcCallHistoryEnabledDefault; - PerClientRpcHistoryLimit := kPerClientRpcHistoryLimitDefault; - InProcessOfLoggingOutClients := false; - CloseAllClientsWaitTime := kCloseAllClientsWaitTimeDefault; - - FKillClientsStartedTime := 0; - FKillClientsCountdownStarted := false; -end; - -destructor TSharedBrokerClientMgr.Destroy; -begin - FAllConnections.Free; - FAllConnectedClients.Free; - FAllClients.Free; - inherited; -end; - -procedure TSharedBrokerClientMgr.SendOnLogout; -var - Enum: IEnumConnections; - ConnectData: TConnectData; - Fetched: Cardinal; - aBrokerClient: TSharedBroker; - i: Integer; -begin - for i := Pred(FAllClients.Count) downto 0 do - begin - aBrokerClient := TSharedBroker(FAllClients.Items[i]); - if aBrokerClient <> nil then - begin - Enum := aBrokerClient.GetEnumerator; - if Enum <> nil then - begin - - while Enum.Next(1,ConnectData, @Fetched) = S_OK do - begin - if ConnectData.pUnk <> nil then - try - (ConnectData.pUnk as ISharedBrokerEvents).OnLogout; - except - end; - end; - end; - end; - end; -end; - -procedure TSharedBrokerClientMgr.SendOnRpcCallRecorded(uniqueRpcId: Longword); -var - Enum: IEnumConnections; - ConnectData: TConnectData; - Fetched: Cardinal; - aBrokerClient: TSharedBroker; - i: Integer; - -begin - for i := Pred(FAllClients.Count) downto 0 do - begin - aBrokerClient := TSharedBroker(FAllClients.Items[i]); - if aBrokerClient <> nil then - begin - // only send these events to Debugger type clients - if aBrokerClient.ConnectType = DebuggerClient then - begin - Enum := aBrokerClient.GetEnumerator; - if Enum <> nil then - begin - while Enum.Next(1,ConnectData, @Fetched) = S_OK do - if ConnectData.pUnk <> nil then - try - (ConnectData.pUnk as ISharedBrokerEvents).OnRpcCallRecorded(uniqueRpcId); - except - end; - end; - end; - end; - end; -end; - -procedure TSharedBrokerClientMgr.SendOnClientConnect(uniqueClientId: Integer;connection: ISharedBrokerConnection); -var - Enum: IEnumConnections; - ConnectData: TConnectData; - Fetched: Cardinal; - aBrokerClient: TSharedBroker; - i: Integer; - -begin - for i := Pred(FAllClients.Count) downto 0 do - begin - aBrokerClient := TSharedBroker(FAllClients.Items[i]); - if aBrokerClient <> nil then - begin - // only send these events to Debugger type clients - if aBrokerClient.ConnectType = DebuggerClient then - begin - Enum := aBrokerClient.GetEnumerator; - if Enum <> nil then - begin - while Enum.Next(1,ConnectData, @Fetched) = S_OK do - if ConnectData.pUnk <> nil then - try - (ConnectData.pUnk as ISharedBrokerEvents).OnClientConnect(uniqueClientId,connection); - except - end; - end; - end; - end; - end; -end; - -procedure TSharedBrokerClientMgr.SendOnClientDisconnect(uniqueClientId: Integer); -var - Enum: IEnumConnections; - ConnectData: TConnectData; - Fetched: Cardinal; - aBrokerClient: TSharedBroker; - i: Integer; - -begin - if FAllClients <> nil then - for i := Pred(FAllClients.Count) downto 0 do - begin - aBrokerClient := TSharedBroker(FAllClients.Items[i]); - if aBrokerClient <> nil then - begin - // only send these events to Debugger type clients - if aBrokerClient.ConnectType = DebuggerClient then - begin - Enum := aBrokerClient.GetEnumerator; - if Enum <> nil then - begin - while Enum.Next(1,ConnectData, @Fetched) = S_OK do - if ConnectData.pUnk <> nil then - try - (ConnectData.pUnk as ISharedBrokerEvents).OnClientDisconnect(uniqueClientId); - except - end; - end; - end; - end; - end; -end; - -procedure TSharedBrokerClientMgr.SendOnContextChanged(connectionIndex: Integer; newContext: WideString); -var - Enum: IEnumConnections; - ConnectData: TConnectData; - Fetched: Cardinal; - aBrokerClient: TSharedBroker; - i: Integer; - -begin - if FAllClients <> nil then - for i := Pred(FAllClients.Count) downto 0 do - begin - aBrokerClient := TSharedBroker(FAllClients.Items[i]); - if aBrokerClient <> nil then - begin - // only send these events to Debugger type clients - if aBrokerClient.ConnectType = DebuggerClient then - begin - Enum := aBrokerClient.GetEnumerator; - if Enum <> nil then - begin - while Enum.Next(1,ConnectData, @Fetched) = S_OK do - if ConnectData.pUnk <> nil then - try - (ConnectData.pUnk as ISharedBrokerEvents).OnContextChanged(connectionIndex,newContext); - except - end; - end; - end; - end; - end; -end; - -procedure TSharedBrokerClientMgr.SendOnConnectionDropped(RPCBroker: TRPCBroker; ErrorText: String); -var - Enum: IEnumConnections; - ConnectData: TConnectData; - Fetched: Cardinal; - aBrokerClient: TSharedBroker; - i: Integer; - IsRightConnection: Boolean; - ConnectionIndex: Integer; -begin - ConnectionIndex := 0; - // first pass -- get BrokerClients and identify ConnectionIndex's - if FAllClients <> nil then - for i := Pred(FAllClients.Count) downto 0 do - begin - aBrokerClient := TSharedBroker(FAllClients.Items[i]); - if aBrokerClient <> nil then - begin - IsRightConnection := False; - if ABrokerClient.ConnectType <> DebuggerClient then - begin - if ABrokerClient.FBrokerConnection.FBroker = RPCBroker then - begin - IsRightConnection := True; - ConnectionIndex := ABrokerClient.FBrokerConnection.FConnectionIndex; - end; - if IsRightConnection then - begin - Enum := aBrokerClient.GetEnumerator; - if Enum <> nil then - begin - while Enum.Next(1,ConnectData, @Fetched) = S_OK do - if ConnectData.pUnk <> nil then - try - (ConnectData.pUnk as ISharedBrokerEvents).OnConnectionDropped(ConnectionIndex,ErrorText); - except - end; - end; - end; - end; - end; - end; - // Now get Debuggers - if FAllClients <> nil then - for i := Pred(FAllClients.Count) downto 0 do - begin - aBrokerClient := TSharedBroker(FAllClients.Items[i]); - if aBrokerClient <> nil then - begin - // only send these events to Debugger type clients - if aBrokerClient.ConnectType = DebuggerClient then - begin - Enum := aBrokerClient.GetEnumerator; - if Enum <> nil then - begin - while Enum.Next(1,ConnectData, @Fetched) = S_OK do - if ConnectData.pUnk <> nil then - try - (ConnectData.pUnk as ISharedBrokerEvents).OnConnectionDropped(ConnectionIndex,ErrorText); - except - end; - end; - end; - end; - end; -end; - - -procedure TSharedBrokerClientMgr.CloseAllClients(maxWaitTime: Integer); -begin - if maxWaitTime > 0 then - // Since maxWaitTime is in seconds we need to scale by 1000ms/sec - CloseAllClientsWaitTime := maxWaitTime * kMilliSecondScale - else - CloseAllClientsWaitTime := kCloseAllClientsWaitTimeDefault; - - // Be sure to send the OnLogout message to all clients - ClientMgr.SendOnLogout; - FKillClientsCountdownStarted := true; - FKillClientsStartedTime := GetTickCount; // use MS calculations -end; - -procedure TSharedBrokerClientMgr.CheckDisconnectWaitTimeAndShutdownClients; -var - ABrokerClient: TSharedBroker; - i: Integer; - timeElapsedMS: Double; -begin - if FKillClientsCountdownStarted = true then - begin - if FAllClients.Count > 0 then - begin - timeElapsedMS := GetTickCount - FKillClientsStartedTime; - if timeElapsedMS > CloseAllClientsWaitTime then - begin - // Put up a warning dialog that all RPC connections will now be terminated - Application.MessageBox('All client connections will now be terminated!','RPCSharedBrokerSessionMgr Warning',MB_ICONWARNING); - for i := Pred(FAllClients.Count) downto 0 do - begin - ABrokerClient := TSharedBroker(FAllClients.Items[i]); - if ABrokerClient <> nil then ABrokerClient.DoDisconnect; - end; - end; - end; - end; -end; - -procedure TSharedBrokerClientMgr.ListAllConnectedClients(AList: TStrings); -var - aBrokerClient: TSharedBroker; - i: Integer; -begin - for i := 0 to Pred(ConnectedClientCount) do - begin - aBrokerClient := TSharedBroker(FAllConnectedClients.Items[i]); - AList.Add(ABrokerClient.FBrokerConnection.FServer+':'+ - ABrokerClient.FBrokerConnection.FServerIP+':'+ - IntToStr(ABrokerClient.FBrokerConnection.FPort)+'> <'+ - ABrokerClient.ClientName+'> '+ - ABrokerClient.FBrokerContext); - end; -end; - -procedure TSharedBrokerClientMgr.AddConnectedBrokerClient(broker: TSharedBroker); -begin - if broker <> nil then - FAllConnectedClients.Add(broker); -end; - -procedure TSharedBrokerClientMgr.RemoveConnectedBrokerClient(broker: TSharedBroker); -begin - if broker <> nil then - FAllConnectedClients.Remove(broker); -end; - -procedure TSharedBrokerClientMgr.AddToGeneralClientList(broker: TSharedBroker); -begin - if broker <> nil then - begin - FAllClients.Add(broker); - NoClientsHaveConnectedYet := false; - end; -end; - -procedure TSharedBrokerClientMgr.RemoveFromGeneralClientList(broker: TSharedBroker); -begin - if broker <> nil then - FAllClients.Remove(broker); -end; - -function TSharedBrokerClientMgr.ConnectedClientCount : integer; -begin - Result := FAllConnectedClients.Count; -end; - -function TSharedBrokerClientMgr.GetNextRpcUniqueId: Longword; -begin - FNextRpcUniqueId := FNextRpcUniqueId + 1; // Let this wrap it should be ok. - Result := FNextRpcUniqueId; -end; - -function TSharedBrokerClientMgr.GetRPCCallEntryPtrFromHistory(uniqueRpcId: Longword; - out rpcEntryPtr: RPCCallHistoryEntryPointer) - : ISharedBrokerErrorCode; -var - aBrokerClient: TSharedBroker; - i,count: Integer; - -begin - count := Pred(ConnectedClientCount); - - Result := UniqueRPCIdDoesNotExist; - - for i := count downto 0 do - begin - aBrokerClient := TSharedBroker(FAllConnectedClients.Items[i]); - if aBrokerClient <> nil then - begin - Result := aBrokerClient.RpcHistory.GetRPCCallEntryPtr(uniqueRpcId,rpcEntryPtr); - if Result = Success then - Exit; - end; - end; -end; - -function TSharedBrokerClientMgr.GetRPCCallEntryPtrFromHistoryIndex(uniqueClientId:Longword; - rpcCallIndex: Integer; - out rpcEntryPtr: RPCCallHistoryEntryPointer) - : ISharedBrokerErrorCode; -var - aBrokerClient: TSharedBroker; - i,count: Integer; - -begin - count := Pred(ConnectedClientCount); - - Result := UniqueClientIdDoesNotExist; - - for i := count downto 0 do - begin - aBrokerClient := TSharedBroker(FAllConnectedClients.Items[i]); - - if aBrokerClient <> nil then - begin - if (aBrokerClient.BrokerUniqueClientId = uniqueClientId) then - begin - Result := aBrokerClient.RpcHistory.GetRPCCallEntryPtrFromIndex(rpcCallIndex,rpcEntryPtr); - Exit; - end; - end; - end; -end; - -function TSharedBrokerClientMgr.GetRPCClientIdFromHistory(uniqueRpcId: Integer; - out uniqueClientId: Integer; - out clientName: WideString) - : ISharedBrokerErrorCode; -var - aBrokerClient: TSharedBroker; - i,count: Integer; - -begin - count := Pred(ConnectedClientCount); - - Result := UniqueRPCIdDoesNotExist; - - for i := count downto 0 do - begin - aBrokerClient := TSharedBroker(FAllConnectedClients.Items[i]); - - if aBrokerClient <> nil then - begin - Result := aBrokerClient.RpcHistory.GetRPCCallClientId(uniqueRpcId,uniqueClientId); - if Result = Success then - begin - clientName := aBrokerClient.ClientName; - Exit; - end; - end; - end; -end; - -function TSharedBrokerClientMgr.GetRPCHistoryCountForClient(uniqueClientId: Integer; - out rpcCount: Integer) - : ISharedBrokerErrorCode; -var - aBrokerClient: TSharedBroker; - i,count: Integer; - -begin - count := Pred(ConnectedClientCount); - - Result := UniqueClientIdDoesNotExist; - - for i := count downto 0 do - begin - aBrokerClient := TSharedBroker(FAllConnectedClients.Items[i]); - - if aBrokerClient <> nil then - begin - if Integer(aBrokerClient.BrokerUniqueClientId) = Integer(uniqueClientId) then - begin - rpcCount := aBrokerClient.RpcHistory.Count; - Result := Success; - Exit; - end; - end; - end; -end; - -function TSharedBrokerClientMgr.GetClientIdAndNameFromIndex(clientIndex: Integer; - out uniqueClientId: Integer; - out clientName: WideString) - : ISharedBrokerErrorCode; -var - aBrokerClient: TSharedBroker; -begin - if (clientIndex >= 0) and (clientIndex < FAllConnectedClients.Count) then - begin - aBrokerClient := TSharedBroker(FAllConnectedClients.Items[clientIndex]); - if aBrokerClient <> nil then - begin - uniqueClientId := aBrokerClient.BrokerUniqueClientId; - clientName := aBrokerClient.ClientName; - Result := Success; - end else - Result := NilClientPointer; - end else - Result := ClientIndexOutOfRange; - - if Result <> Success then - begin - uniqueClientId := 0; - clientName := ''; - end; -end; - -function TSharedBrokerClientMgr.GetClientNameFromUniqueClientId(uniqueClientId: Integer; - out clientName: WideString) - : ISharedBrokerErrorCode; -var - aBrokerClient: TSharedBroker; - i,count: Integer; - -begin - count := Pred(ConnectedClientCount); - - Result := UniqueClientIdDoesNotExist; - - for i := count downto 0 do - begin - aBrokerClient := TSharedBroker(FAllConnectedClients.Items[i]); - - if aBrokerClient <> nil then - begin - if Integer(aBrokerClient.BrokerUniqueClientId) = Integer(uniqueClientId) then - begin - clientName := aBrokerClient.ClientName; - Result := Success; - Exit; - end; - end; - end; -end; - -function TSharedBrokerClientMgr.GetActiveBrokerConnectionIndexFromUniqueClientId(uniqueClientId: Integer; - out connectionIndex: Integer) - : ISharedBrokerErrorCode; - -var - aBrokerClient: TSharedBroker; - i,count: Integer; -begin - count := Pred(ConnectedClientCount); - Result := UniqueClientIdDoesNotExist; - for i := count downto 0 do - begin - aBrokerClient := TSharedBroker(FAllConnectedClients.Items[i]); - - if aBrokerClient <> nil then - begin - if Integer(aBrokerClient.BrokerUniqueClientId) = Integer(uniqueClientId) then - begin - connectionIndex := aBrokerClient.BrokerConnectionIndex; - Result := Success; - Exit; - end; - end; - end; -end; - -procedure TSharedBrokerClientMgr.SetRpcCallHistoryEnabled(enabled: boolean); - -var - aBrokerClient: TSharedBroker; - i,count: Integer; - -begin - // be sure to set the local state - FRpcCallHistoryEnabled := enabled; - - count := Pred(ConnectedClientCount); - - for i := count downto 0 do - begin - aBrokerClient := TSharedBroker(FAllConnectedClients.Items[i]); - if aBrokerClient <> nil then - begin - // Set the RpcCallHistory for all of the broker connections - aBrokerClient.RpcHistory.Enabled := enabled; - end; - end; - -end; - -function TSharedBrokerClientMgr.GeneralClientCount:Integer; -begin - if FAllClients <> nil then - Result:= FAllClients.Count - else - Result:= 0; -end; - -procedure TSharedBrokerClientMgr.OnIdleEventHandler(Sender: TObject; var Done: Boolean); -begin - // Shut me down any time the client count goes to zero - // Since this server is non visual it has to be able to shut - // down automatically. - // It is started up automatically any time a client tries - // to connect - if (ClientMgr.InProcessOfLoggingOutClients = true) then - ClientMgr.CheckDisconnectWaitTimeAndShutdownClients; - - if (GeneralClientCount = 0) and (NoClientsHaveConnectedYet = false)then - begin - Application.Terminate; -// SendMessage(Application.MainForm.Handle,WM_CLOSE,0,0); - end; -end; - -// Global Function Implementation -function TSharedBrokerClientMgr.Piece(const S: string; Delim: char; PieceNum: Integer): string; -{ returns the Nth piece (PieceNum) of a string delimited by Delim } -var - i: Integer; - Strt, Next: PChar; -begin - i := 1; - Strt := PChar(S); - Next := StrScan(Strt, Delim); - while (i < PieceNum) and (Next <> nil) do - begin - Inc(i); - Strt := Next + 1; - Next := StrScan(Strt, Delim); - end; - if Next = nil then Next := StrEnd(Strt); - if i < PieceNum then Result := '' else SetString(Result, Strt, Next - Strt); -end; - -constructor RPCCallHistoryEntry.Create; -begin - CallName := kNoneString; - CallParams := kNoneString; - CallResults := kNoneString; - CallStartDateTime := 0; - CallDurationInMS := 0; -end; - - -constructor RPCCallHistoryEntry.Create(context:WideString; - name:WideString; - params:WideString; - results:WideString; - startDateTime:Double; - durationInMS:Longword; - clientId:Integer); -begin; - CallContext := context; - CallName := name; - CallParams := params; - CallResults := results; - CallStartDateTime := startDateTime; - CallDurationInMS := durationInMS; - - UniqueRPCCallId := ClientMgr.GetNextRpcUniqueId; - - BrokerUniqueClientId := clientId; -end; - -constructor RPCCallHistory.Create; -begin - inherited; - FEnabled := kRpcCallHistoryEnabledDefault; -end; - -function RPCCallHistory.Add(entry: RPCCallHistoryEntry): Integer; -var - diff,i,limit: integer; -begin - // Don't put critical sections around these ClientMgr accesses since - // this call is most often nested - Result := -1; - if (Enabled = True) then - begin - limit := ClientMgr.PerClientRpcHistoryLimit; - if (Count > limit ) then - begin - // This could happen since a client may reduce the max number - // of history entries on the fly and it may be less than what is - // already recorded. - diff := ClientMgr.PerClientRpcHistoryLimit - Count; - for i:=1 to diff do Delete(Count-1); // Delete the extras - end else if (Count <= limit) then - begin - // If the history is full then delete the first one. - // The latest is added to the back - if (Count = limit) and (limit > 0) then Delete(0); - - Result := Add(Pointer(entry)); - Assert(Result <> -1); - end; - end; -end; - -function RPCCallHistory.GetRPCCallEntryPtr(uniqueRpcId:Longword; - out rpcEntryPtr:RPCCallHistoryEntryPointer) - : ISharedBrokerErrorCode; -var - i,entryCount:integer; - item: RPCCallHistoryEntry; -begin - Result := UniqueRPCIdDoesNotExist; - rpcEntryPtr := nil; - - entryCount := Pred(Count); - - for i:=0 to entryCount do - begin - item := RPCCallHistoryEntry(self[i]); - if item <> nil then - begin - if item.UniqueRPCCallId = uniqueRpcId then - begin - rpcEntryPtr := @item; - Result := Success; - // We found one so exit the routine - Exit; - end; - end; - end; -end; - -function RPCCallHistory.GetRPCCallEntryPtrFromIndex(rpcCallIndex:Integer; - out rpcEntryPtr:RPCCallHistoryEntryPointer) - : ISharedBrokerErrorCode; -begin - rpcEntryPtr := nil; - Result := RPCHistoryIndexOutOfRange; - - if (rpcCallIndex > 0) and (rpcCallIndex <= Count) then - begin - rpcEntryPtr := self[rpcCallIndex]; - Result := Success; - end; -end; - -function RPCCallHistory.GetRPCCallClientId(uniqueRpcId:Integer; - out uniqueClientId:Integer) - : ISharedBrokerErrorCode; -var - rpcEntryPtr : RPCCallHistoryEntryPointer; -begin - Result := GetRPCCallEntryPtr(uniqueRpcId,rpcEntryPtr); - if (Result = Success) and (rpcEntryPtr <> nil)then - uniqueClientId := rpcEntryPtr^.BrokerUniqueClientId - else - uniqueClientId := 0; -end; - - -{ -procedure TSharedBroker.EventSinkChanged(const EventSink: IUnknown); -begin - FEvents := EventSink as ISharedBrokerEvents; - if FConnectionPoint <> nil then - FSinkList := FConnectionPoint.SinkList; -end; - -procedure TSharedBroker.Initialize; -begin - inherited Initialize; - FConnectionPoints := TConnectionPoints.Create(Self); - if AutoFactory.EventTypeInfo <> nil then - FConnectionPoint := FConnectionPoints.CreateConnectionPoint( - AutoFactory.EventIID, ckSingle, EventConnect) - else FConnectionPoint := nil; -end; - - -function TSharedBroker.BrokerConnect(const ClientName: WideString; - ConnectionType: ISharedBrokerClient; const ServerPort: WideString; - WantDebug, AllowShared: WordBool; RpcTimeLimit: SYSINT; - out UniqueClientId: SYSINT): ISharedBrokerErrorCode; -begin - -end; - -function TSharedBroker.BrokerCall(const RpcName, RpcParams: WideString; - RpcTimeLimit: Integer; out RpcResults: WideString; - out UniqueRpcCallId: Integer): ISharedBrokerErrorCode; -begin - -end; - -function TSharedBroker.BrokerDisconnect: ISharedBrokerErrorCode; -begin - -end; - -function TSharedBroker.BrokerSetContext( - const OptionName: WideString): ISharedBrokerErrorCode; -begin - -end; - -function TSharedBroker.ReadRegDataDefault(const Root, Key, Name, - Default: WideString; out RegResult: WideString): ISharedBrokerErrorCode; -begin - -end; - -function TSharedBroker.Get_PerClientRpcHistoryLimit: Integer; -begin - -end; - -function TSharedBroker.Get_RpcHistoryEnabled: WordBool; -begin - -end; - -function TSharedBroker.Get_RpcVersion: WideString; -begin - -end; - -procedure TSharedBroker.Set_PerClientRpcHistoryLimit(limit: Integer); -begin - -end; - -procedure TSharedBroker.Set_RpcHistoryEnabled(enabled: WordBool); -begin - -end; - -procedure TSharedBroker.Set_RpcVersion(const version: WideString); -begin - -end; - -function TSharedBroker.GetActiveBrokerConnectionIndexCount( - out connectionIndexCount: Integer): ISharedBrokerErrorCode; -begin - -end; - -function TSharedBroker.GetActiveBrokerConnectionIndexFromUniqueClientId( - uniqueClientId: Integer; - out connectionIndex: Integer): ISharedBrokerErrorCode; -begin - -end; - -function TSharedBroker.GetActiveBrokerConnectionInfo( - connectionIndex: Integer; out connectedServerIp: WideString; - out connectedServerPort: Integer; - out lastContext: WideString): ISharedBrokerErrorCode; -begin - -end; - -function TSharedBroker.GetClientIdAndNameFromIndex(clientIndex: Integer; - out uniqueClientId: Integer; - out clientName: WideString): ISharedBrokerErrorCode; -begin - -end; - -function TSharedBroker.GetClientNameFromUniqueClientId( - uniqueClientId: Integer; - out clientName: WideString): ISharedBrokerErrorCode; -begin - -end; - -function TSharedBroker.GetRpcHistoryCountForClient(uniqueClientId: Integer; - out rpcHistoryCount: Integer): ISharedBrokerErrorCode; -begin - -end; - -function TSharedBroker.LogoutConnectedClients( - logoutTimeLimit: Integer): ISharedBrokerErrorCode; -begin - -end; - -function TSharedBroker.GetRpcCallFromHistoryIndex(uniqueClientId, - rpcCallIndex: Integer; out uniqueRpcId: Integer; out brokerContext, - rpcName, rpcParams, rpcResult: WideString; out rpcStartDateTime: Double; - out rpcDuration: Integer): ISharedBrokerErrorCode; -begin - -end; - -function TSharedBroker.GetRpcClientIdFromHistory(uniqueRpcId: Integer; - out uniqueClientId: Integer; - out clientName: WideString): ISharedBrokerErrorCode; -begin - -end; - -function TSharedBroker.GetConnectedClientCount( - out connectedClientCount: Integer): ISharedBrokerErrorCode; -begin - -end; -} - -{ -function TSharedBroker.GetRpcCallFromHistory(uniqueRpcId: Integer; - out uniqueClientId: Integer; out brokerContext, rpcName, rpcParams, - rpcResult: WideString; out rpcStartDateTime: Double; - out rpcDuration: Integer): ISharedBrokerErrorCode; -begin - // -end; -} -function TSharedBroker.Get_CurrentContext: WideString; -begin - if FBrokerConnection <> nil then - begin - Result := FBrokerConnection.FBroker.CurrentContext; - end else - begin - // Don't know what else to make this if we don't actually have a TRPCBroker to ask - Result := ''; - end; -end; - -function TSharedBroker.Get_KernelLogin: WordBool; -begin - if FBrokerConnection <> nil then - begin - Result := FBrokerConnection.FBroker.KernelLogin; - end else - begin - // Don't know what else to make this if we don't actually have a TRPCBroker to ask - Result := True; - end; -end; - -function TSharedBroker.Get_Login: WideString; - - function TorF1(Value: Boolean): String; - begin - Result := '0'; - if Value then - Result := '1'; - end; - -const - SEP_FS = #28; - SEP_GS = #29; -var - I: Integer; - Str: String; - ModeVal: String; - DivLst: String; - MultiDiv: String; - PromptDiv: String; - StrFS, StrGS: String; -begin - //TODO - if FBrokerConnection <> nil then - with FBrokerConnection.FBroker.Login do - begin - StrFS := SEP_FS; - StrGS := SEP_GS; - ModeVal := ''; - if Mode = lmAVCodes then - ModeVal := '1' - else if Mode = lmAppHandle then - ModeVal := '2' - else if Mode = lmNTToken then - ModeVal := '3'; - DivLst := ''; - for i := 0 to Pred(DivList.Count) do - DivLst := DivLst + DivList[i] + SEP_GS; - MultiDiv := TorF1(MultiDivision); - PromptDiv := TorF1(PromptDivision); - Str := LoginHandle + StrFS + NTToken + StrFS + AccessCode + StrFS; - Str := Str + VerifyCode + StrFS + Division + StrFS + ModeVal + StrFS; - Str := Str + DivLst + StrFS + MultiDiv + StrFS + DUZ + StrFS; - Str := Str + PromptDiv + StrFS; - end; // with -end; - -function TSharedBroker.Get_RpcbError: WideString; -begin - if FBrokerConnection <> nil then - begin - Result := FBrokerConnection.FBroker.RPCBError; - end else - begin - // Don't know what else to make this if we don't actually have a TRPCBroker to ask - Result := ''; - end; -end; - -function TSharedBroker.Get_ShowErrorMsgs: ISharedBrokerShowErrorMsgs; -begin - Result := isemRaise; - if FBrokerConnection <> nil then - if FBrokerConnection.FBroker.ShowErrorMsgs = semQuiet then - Result := isemQuiet; -end; - -function TSharedBroker.Get_Socket: Integer; -begin - Result := 0; - if FBrokerConnection <> nil then - Result := FBrokerConnection.FBroker.Socket; -end; - -function TSharedBroker.Get_User: WideString; -const - SEP_FS = #28; -var - Str: String; -begin - Str := ''; - if FBrokerConnection <> nil then - begin - with FBrokerConnection.FBroker.User do - begin - Str := DUZ + SEP_FS + Name + SEP_FS + StandardName + SEP_FS; - Str := Str + Division + SEP_FS; - if VerifyCodeChngd then - Str := Str + '1' + SEP_FS - else - Str := Str + '0' + SEP_FS; - Str := Str + Title + SEP_FS + ServiceSection + SEP_FS; - Str := Str + Language + SEP_FS + DTime + SEP_FS; - end; // with - end; - Result := WideString(Str); -end; - -procedure TSharedBroker.Set_KernelLogin(Value: WordBool); -begin - if FBrokerConnection <> nil then - FBrokerConnection.FBroker.KernelLogin := Value; -end; - -procedure TSharedBroker.Set_Login(const Value: WideString); -const - SEP_FS = #28; - SEP_GS = #29; -var - Str: String; - StrFS, StrGS: String; - DivLst: String; - ModeVal: String; - - function TorF(Value: String): Boolean; - begin - Result := False; - if Value = '1' then - Result := True; - end; - -begin - Str := Value; - if FBrokerConnection <> nil then - with FBrokerConnection.FBroker.Login do - begin - StrFS := SEP_FS; - StrGS := SEP_GS; - LoginHandle := Piece(Str,StrFS,1); - NTToken := Piece(Str,StrFS,2); - AccessCode := Piece(Str,StrFS,3); - VerifyCode := Piece(Str,StrFS,4); - Division := Piece(Str,StrFS,5); - ModeVal := Piece(Str,StrFS,6); - DivLst := Piece(Str,StrFS,7); - MultiDivision := TorF(Piece(Str,StrFS,8)); - DUZ := Piece(Str,StrFS,9); - PromptDivision := TorF(Piece(Str,StrFS,10)); - if ModeVal = '1' then - Mode := lmAVCodes - else if ModeVal = '2' then - Mode := lmAppHandle - else if ModeVal = '3' then - Mode := lmNTToken; - end; // with -end; - -procedure TSharedBroker.Set_ShowErrorMsgs( - Value: ISharedBrokerShowErrorMsgs); -begin - if FBrokerConnection <> nil then - begin - if Value = isemRaise then - FBrokerConnection.FBroker.ShowErrorMsgs := semRaise - else - FBrokerConnection.FBroker.ShowErrorMsgs := semQuiet; - end; -end; - - -initialization - TAutoObjectFactory.Create(ComServer, TSharedBroker, Class_SharedBroker, - ciMultiInstance, tmApartment); - ClientMgr := TSharedBrokerClientMgr.Create(); - Application.OnIdle := ClientMgr.OnIdleEventHandler; - -finalization - ClientMgr.Free; - ClientMgr := nil; -end. diff --git a/BDK32/Source/uSharedBroker1.res b/BDK32/Source/uSharedBroker1.res deleted file mode 100644 index 22eb4e7..0000000 Binary files a/BDK32/Source/uSharedBroker1.res and /dev/null differ diff --git a/BDK32/Source/uUnitTestBroker.pas b/BDK32/Source/uUnitTestBroker.pas deleted file mode 100644 index 9fb9796..0000000 --- a/BDK32/Source/uUnitTestBroker.pas +++ /dev/null @@ -1,226 +0,0 @@ -{ ************************************************************** - Package: XWB - Kernel RPCBroker - Date Created: Sept 18, 1997 (Version 1.1) - Site Name: Oakland, OI Field Office, Dept of Veteran Affairs - Developers: Joel Ivey - Description: Unit tests for RPCBroker functionality - requires - dUnit to run unit tests. - Current Release: Version 1.1 Patch 40 (January 7, 2005)) -*************************************************************** } - -unit uUnitTestBroker; - -interface - -uses - TestFramework, Sgnoncnf, Classes, Graphics, SysUtils, Forms; - -type - TTestType = class(TTestCase) - private - // any private fields needed for processing - protected - // procedure SetUp; override; - // procedure TearDown; override; - published - // procedure TestName1; - // procedure TestName2; - end; - - TTestSgnoncnf = class(TTestCase) - private - FSignonConfiguration: TSignonConfiguration; - FRegValues: TStringList; - protected - procedure SetUp; override; - procedure TearDown; override; - published - procedure TestReadRegistry; - procedure TestShowModal1; - procedure TestShowModal2; - end; - - TTestMFunStr = class(TTestCase) - private - protected - procedure Setup; override; - public - published - procedure TestPiece1; - procedure TestPiece2; - procedure TestPiece3; - procedure TestPiece4; - procedure TestPiece5; - procedure TestPiece6; - procedure TestPiece7; - procedure TestPiece8; - procedure TestPiece9; - end; - -implementation - -uses - XWBut1, Dialogs, MFunStr, LoginFrm; - -var - Str: String; - Val: String; - - -procedure TTestSgnoncnf.SetUp; -begin -{ setup as would be done in loginfrm.pas } - - FSignonConfiguration := TSignonConfiguration.Create; -{ - // if any data currently in registry then save it - FRegValues := TStringList.Create; - ReadRegValues(HKCU,'Software\Vista\Signon',FRegValues); - // Now delete current data - DeleteRegData(HKCU,'Software\Vista\Signon'); - - // Test for reading without registry data - FOriginalValues := TSignonValues.Create; -} - with SignonDefaults do - begin - Position := '0'; - Size := '0'; - IntroFont := 'Courier New^11'; - IntroFontStyles := 'B'; - TextColor := clWindowText; - BackColor := clWindow; - end; // with FSignonConfiguration.SignonDefaults - frmSignon := TfrmSignon.Create(Application); -end; - -procedure TTestSgnoncnf.TearDown; -begin - FSignonConfiguration.Free; - frmSignon.Free; -end; - -procedure TTestSgnoncnf.TestReadRegistry; -begin - FSignonConfiguration.ReadRegistrySettings; - with InitialValues do - begin - Check(Position = '0', 'ReadRegistry Error in Position value-'+Position); - Check(Size = '0', 'ReadRegistry Error in Size value-'+Size); - Check(IntroFont = 'Courier New^11', 'ReadRegistry Error in IntroFont-'+IntroFont); - Check(IntroFontStyles = 'B', 'ReadRegistry Error in IntroFontStyles value-'+IntroFontStyles); - Check(BackColor = clWindow, 'ReadRegistry Error in BackColor = '+IntToStr(BackColor)); - Check(TextColor = clWindowText, 'ReadRegistry Error in TextColor = '+IntToStr(TextColor)); - end; // with -end; - -procedure TTestSgnoncnf.TestShowModal1; -begin - ShowMessage('Click on Default Button'); - InitialValues.TextColor := clWindow; - FSignonConfiguration.ShowModal; - with InitialValues do - begin - Check(TextColor = clWindowText, 'TestShowModal bad TextColor on restore'); - end; // with -end; - -procedure TTestSgnoncnf.TestShowModal2; -begin - ShowMessage('Click on ''Select New'' Background Color then select OK (Standard) on next form Then click OK on Main Form'); - InitialValues.TextColor := clWindowText; - FSignonConfiguration.ShowModal; - with InitialValues do - begin - Check(BackColor = clWindow, 'TestShowModal bad TextColor on restore'); - end; // with -end; - -procedure TTestMFunStr.TestPiece1; -begin - Val := Piece(Str,'^'); - Check(Val = 'Piece1','Failed Piece not specified'); -end; - -procedure TTestMFunStr.Setup; -begin - Str := 'Piece1^Piece2^Piece3'; -end; - -procedure TTestMFunStr.TestPiece2; -begin - Val := Piece(Str,'^',2); - Check(Val = 'Piece2', 'Failed Piece specified as 2'); -end; - -procedure TTestMFunStr.TestPiece3; -begin - Val := Piece(Str,'^',3); - Check(Val = 'Piece3', 'Failed Piece specifed as 3'); -end; - -procedure TTestMFunStr.TestPiece4; -begin - Val := Piece(Str,'^',4); - Check(Val = '','Failed piece specifed as 4'); -end; - -procedure TTestMFunStr.TestPiece5; -begin - Val := Piece(Str,'^',1,2); - Check(Val = 'Piece1^Piece2','Failed Piece 1,2'); -end; - -procedure TTestMFunStr.TestPiece6; -begin - Val := Piece(Str,'^',2,3); - Check(Val = 'Piece2^Piece3','Failed Piece 2,3'); -end; - -procedure TTestMFunStr.TestPiece7; -begin - Val := Piece(Str,'^',2,4); - Check(Val = 'Piece2^Piece3', 'Failed on Piece 2,4'); -end; - -procedure TTestMFunStr.TestPiece8; -begin - Val := Piece(Str,'^',3,5); - Check(Val = 'Piece3','Failed on Piece 3,5'); -end; - -procedure TTestMFunStr.TestPiece9; -begin - Val := Piece(Str,'^',4,6); - Check(Val = '','Failed on Piece 4,6'); -end; - -{ // used with second method of registering tests -function UnitTests: ITestSuite; -var - ATestSuite: TTestSuite; -begin - ATestSuite := TTestSuite.create('Some trivial tests'); -// add each test suite to be tested - ATestSuite.addSuite(TTestType.Suite); -// ATestSuite.addSuite(TTestStringlist.Suite); - Result := ATestSuite; -end; -} - - -{ -procedure TTestType.TestName1; -begin -// Check( Boolean true for success, String comment for failed test) - Check(1+1=2,'Comment on Failure') -end; -} - -initialization -// one entry per testclass - TestFramework.RegisterTest('ReadRegistry',TTestSgnoncnf.Suite); - TestFramework.RegisterTest('Test Piece',TTestMFunStr.Suite); -// or -// TestFramework.RegisterTest('SimpleTest',UnitTests); -end. diff --git a/BDK32/Source/uUnitTestMFunStr.pas b/BDK32/Source/uUnitTestMFunStr.pas deleted file mode 100644 index 60ac3c2..0000000 --- a/BDK32/Source/uUnitTestMFunStr.pas +++ /dev/null @@ -1,182 +0,0 @@ -{ ************************************************************** - Package: XWB - Kernel RPCBroker - Date Created: Sept 18, 1997 (Version 1.1) - Site Name: Oakland, OI Field Office, Dept of Veteran Affairs - Developers: Joel Ivey - Description: Unit testing MFunStr code - requires dUnit for - unit testing. - Current Release: Version 1.1 Patch 40 (January 7, 2005)) -*************************************************************** } - -unit uUniTTestMFunStr; - -interface - -uses - TestFramework, Sgnoncnf, Classes, Graphics, SysUtils, Forms; - -type - TTestType = class(TTestCase) - private - // any private fields needed for processing - protected - // procedure SetUp; override; - // procedure TearDown; override; - published - // procedure TestName1; - // procedure TestName2; - end; - - TTestMFunStr1 = class(TTestCase) - private - protected - procedure Setup; override; - public - published - procedure TestPiece1; - procedure TestPiece2; - procedure TestPiece3; - procedure TestPiece4; - procedure TestPiece5; - procedure TestPiece6; - procedure TestPiece7; - procedure TestPiece8; - procedure TestPiece9; - end; - - TTestMFunStr2 = class(TTestCase) - protected - procedure Setup; override; - published - procedure TestTran1; - procedure TestTran2; - procedure TestTran3; - procedure TestTran4; - end; - -implementation - -uses - MFunStr_1; - -var - Str: String; - Val: String; - -procedure TTestMFunStr1.TestPiece1; -begin - Val := Piece(Str,'^'); - Check(Val = 'Piece1','Failed Piece not specified'); -end; - -procedure TTestMFunStr1.Setup; -begin - Str := 'Piece1^Piece2^Piece3'; -end; - -procedure TTestMFunStr1.TestPiece2; -begin - Val := Piece(Str,'^',2); - Check(Val = 'Piece2', 'Failed Piece specified as 2'); -end; - -procedure TTestMFunStr1.TestPiece3; -begin - Val := Piece(Str,'^',3); - Check(Val = 'Piece3', 'Failed Piece specifed as 3'); -end; - -procedure TTestMFunStr1.TestPiece4; -begin - Val := Piece(Str,'^',4); - Check(Val = '','Failed piece specifed as 4'); -end; - -procedure TTestMFunStr1.TestPiece5; -begin - Val := Piece(Str,'^',1,2); - Check(Val = 'Piece1^Piece2','Failed Piece 1,2'); -end; - -procedure TTestMFunStr1.TestPiece6; -begin - Val := Piece(Str,'^',2,3); - Check(Val = 'Piece2^Piece3','Failed Piece 2,3'); -end; - -procedure TTestMFunStr1.TestPiece7; -begin - Val := Piece(Str,'^',2,4); - Check(Val = 'Piece2^Piece3', 'Failed on Piece 2,4'); -end; - -procedure TTestMFunStr1.TestPiece8; -begin - Val := Piece(Str,'^',3,5); - Check(Val = 'Piece3','Failed on Piece 3,5'); -end; - -procedure TTestMFunStr1.TestPiece9; -begin - Val := Piece(Str,'^',4,6); - Check(Val = '','Failed on Piece 4,6'); -end; - -procedure TTestMFunStr2.Setup; -begin - Str := 'ABCDEFGHABCDE'; -end; - -procedure TTestMFunStr2.TestTran1; -begin - Val := Translate(Str,'ABCDEFGH','abcdefgh'); - Check(Val = 'abcdefghabcde','Failed upper to lower case'); -end; - -procedure TTestMFunStr2.TestTran2; -begin - Val := Translate(Str,'ABCD','abcde'); - Check(Val = 'abcdEFGHabcdE', 'Failed Partial'); -end; - -procedure TTestMFunStr2.TestTran3; -begin - Val := Translate(Str,'ABCDEABC','abcdefgh'); - Check(Val = 'abcdeFGHabcde', 'Failed repeat chars'); -end; - -procedure TTestMFunStr2.TestTran4; -begin - Val := Translate(Str,'ABCDEFGH','abcdeabc'); - Check(Val = 'abcdeabcabcde', 'Failed in assignment'); -end; - -{ // used with second method of registering tests -function UnitTests: ITestSuite; -var - ATestSuite: TTestSuite; -begin - ATestSuite := TTestSuite.create('Some trivial tests'); -// add each test suite to be tested - ATestSuite.addSuite(TTestType.Suite); -// ATestSuite.addSuite(TTestStringlist.Suite); - Result := ATestSuite; -end; -} - - -{ -procedure TTestType.TestName1; -begin -// Check( Boolean true for success, String comment for failed test) - Check(1+1=2,'Comment on Failure') -end; -} - -initialization -// one entry per testclass - TestFramework.RegisterTest('Test Piece',TTestMFunStr1.Suite); - TestFramework.RegisterTest('Test Translate',TTestMFunStr2.Suite); -// or -// TestFramework.RegisterTest('SimpleTest',UnitTests); -end. diff --git a/BDK32/UNWISE.EXE b/BDK32/UNWISE.EXE deleted file mode 100644 index 696a32c..0000000 Binary files a/BDK32/UNWISE.EXE and /dev/null differ