Converting ClipBoardViewer from HotBasic to PureBasic

Just starting out? Need help? Post your questions and find answers here.
vmars316
Enthusiast
Enthusiast
Posts: 464
Joined: Fri Jun 29, 2012 12:24 am
Contact:

Converting ClipBoardViewer from HotBasic to PureBasic

Post by vmars316 »

Hello & Thanks ,
A while back I wrote a clipboard viewer + in hotbasic for win32 .
ClipLog/ClipFindv1.0.0 here: http://www.portablefreeware.com/index.php?id=2333 free sourcecode

I am currently rewriting ClipFind in PureBasic .
ClipLog seems to run ok on win10 , but I want to rewrite ClipLog (it also saves clips to disk) also .
But I have heard horror stories about clipboard viewer in win10 .
Anyone know how to program clipboard viewer in win10 .

Below is the source code for my hotBasic version .
I am wondering if the same api's are still valid for win10 ?
Namely:

Code: Select all

DECLARE FUNCTION SetClipboardViewer LIB "USER32" _
       (hWndNewViewerVm AS LONG) AS LONG
DECLARE FUNCTION ChangeClipboardChain LIB "USER32" _
       (hWndNewViewerVm AS LONG, hWndNextViewerVm AS LONG) AS LONG
DECLARE FUNCTION SendMessageA LIB "USER32" _
       (hwnd AS LONG, wMsg AS LONG, wParam AS LONG, lParam AS LONG) AS LONG

I had edited out the following code, thinking it was too much .
But after the response I got from DrGolf ,
I think it is appropriate .
So here is the original hb code:

Code: Select all

' hbClipLog.bas  Author: vmars ,  vmars316    08/10/2012
$APPTYPE GUI: $TYPECHECK ON
'showConsole 
'
$DEFINE WM_CHANGECBCHAIN &H30D
$DEFINE WM_DRAWCLIPBOARD &H308
'$include "instance.inc"
'OneInstance("ClipLog")
CONST SC_CLOSE     = &HF060
CONST SC_MAXIMIZE   = &HF030
CONST SC_MINIMIZE   = &HF020
CONST WM_SYSCOMMAND   = &H112 
' 
Deflng ReturnFromGetLocalTime
Defstr ClipLogName$="****": Defstr line$, ClipMsgCnt
Defstr d$, dd$, mm$, OpenClipLogName$="00000000" 
deflng hwndNextViewer, hwndMyViewer, SendDRAWMsgRet, SendCHAINMsgRet
defint MyLoopCnt: Defint ClipLogPosition: Defdbl ClipboardSequenceNumber=0 
Defint ToggleTray=0: Defint FirstTimeHere=0: Defint GetDateCnt=0
deflng My_hWnd, My_uMsg, My_wParam, My_lParam, My_nCode, ChangeChainReturn
Defstr dtTIme$, dtHour$, dtMin$, dtSec$, StartClipFind$ = "ClipFind.exe"
Defstr ClipLogDocs$="http://www.quickerthanaspark.com/ClipLog/ClipLogDocs.html"
Defstr HotBasicLabel$=(" ClipLog  "+"Wip ") 
Defstr ShellExec$, FolderPath$ 
'
DIM ClipLog As FILE
DIM dt as DATE
DIM FilesOpenNames$ as STRING
DIM FirstLine$  as STRING
DIM clipString$ as STRING
'
DECLARE FUNCTION SetClipboardViewer LIB "USER32" _
       (hWndNewViewerVm AS LONG) AS LONG
DECLARE FUNCTION ChangeClipboardChain LIB "USER32" _
       (hWndNewViewerVm AS LONG, hWndNextViewerVm AS LONG) AS LONG
DECLARE FUNCTION SendMessageA LIB "USER32" _
       (hwnd AS LONG, wMsg AS LONG, wParam AS LONG, lParam AS LONG) AS LONG
'
DECLARE SUB GetDate
DECLARE SUB SetClipViewer
DECLARE SUB Sendto_TaskTray
DECLARE SUB LogSomething
DECLARE SUB case_WM_DrawClipboard
DECLARE SUB case_WM_ChangeCbChain
DECLARE SUB ShellExec
DECLARE SUB ShellExecuteA lib "shell32" _
  (hForm as long, lpOp as long, lpFile as long,_
   lpParam as long, lpDir as long, nShow as long) as Long 
' 
dim font18 As font
font18.Name="Tahoma"
font18.Height=18 
font18.Weight=400
'
create form1 as FORM
'  Center
  left=400: top=10
  width=552: height=143
  icon="ClipLog.ico"
  onClose=AppTerminate
  onMessage=MyLoop
  color=&H919191
  caption="ClipLog 2.1"
' 
Create tray as SYSTRAY
  DblCLick = true  'restore window on double click
  Tip = "DoubleClick to Show Window" 
  Enabled = false  'optionally disables SYSTRAY Object 
end create  ' tray
'
create button1 as BUTTON
  left=12: top=14
  width=146: height=28
  caption="SEND To TaskTray"
  font=font18
  onclick=Sendto_TaskTray
end create  ' button1
'
create button4 as BUTTON
  left=button1.left+button1.width+12
  top=button1.top
  width=80: height=28
  onclick=StartClipFind
  caption="FIND"
  font=font18
end create  ' button4
'
create button3 as BUTTON
  left=button4.left+button4.width+12
  top=button1.top
  width=80: height=28
  onclick=ShowHelp
  caption="HELP"
  font=font18
end create  ' button3
'
create button2 as BUTTON
  left=button3.left+button3.width+12 
  top=button1.top
  width=170: height=28
  onclick=AppTerminate
  caption="EXIT Program"
  font=font18
end create  ' button2
' 
create button5 as BUTTON
  left=button1.left+button1.width+12 
  top=button1.top+button1.height+12
  width=170  ' 418: 
  height=28
  caption="SHOW Files Folder"
  font=font18
  onclick=ShowFilesFolder
end create  ' button5
'
end create ' form1
' ParseThisLineHold$
hwndMyViewer = form1.Handle
 dt.UPDATE
 dd$ = str$(dt.Day): IF LEN(dd$) = 1 Then dd$ = ("0"+dd$)
 mm$ = (str$(dt.Month): IF LEN(mm$) = 1 Then mm$ = ("0"+mm$) 
 d$ = mm$+dd$+str$(dt.Year)) 
 clipboard.open
 IF clipboard.HasFormat(&H1) THEN
     clipboard.clear: clipboard.close: clipString$.clear
 END IF
   hwndNextViewer = SetClipboardViewer(hwndMyViewer) 
 FolderPath$ =  CurDir$   
Sendto_TaskTray 
'
form1.showmodal

END
'
SUB GetDate 
INC(GetDateCnt)
 dt.UPDATE
 dd$ = str$(dt.Day): IF LEN(dd$) = 1 Then dd$ = ("0"+dd$)
 mm$ = (str$(dt.Month): IF LEN(mm$) = 1 Then mm$ = ("0"+mm$) 
 d$ = str$(dt.Year)+mm$+dd$) 
 dtHour$=str$(dt.Hour): IF LEN(dtHour$) = 1 Then dtHour$ = ("0"+dtHour$) 
 dtMin$=str$(dt.Minute): IF LEN(dtMin$) = 1 Then dtMin$ = ("0"+dtMin$)
 dtSec$=str$(dt.Second): IF LEN(dtSec$) = 1 Then dtSec$ = ("0"+dtSec$) 
 dtTIme$ = dtHour$ + dtMin$ + dtSec$+" "
' cant use with OneInstance:  form1.caption=(HotBasicLabel$+d$+".txt")
END SUB  ' GetDate
'
SUB Sendto_TaskTray
'  showmessage("tray.Enabled = true: tray.SendTo")
  tray.Enabled = true: tray.SendTo
END SUB  ' Sendto_TaskTray
'
MyLoop:  
  My_uMsg=uMsg: My_hWnd=hWnd: My_wParam=wParam: 
  My_lParam=lParam: My_nCode=nCode    
  inc(MyLoopCnt)
  SELECT CASE My_uMsg  
        case WM_DRAWCLIPBOARD             ' Clipboard changed
                  case_WM_DrawClipboard 
        case WM_CHANGECBCHAIN  ' # of Viewer Windows changed
                  case_WM_ChangeCbChain 
  END SELECT 
  RETVAL zero
Return  ' MyLoop:
'
SUB SetClipViewer  ' already did this in Initialization 
  hwndNextViewer = SetClipboardViewer(hwndMyViewer)
END SUB  ' SetClipViewer 
'
SUB case_WM_ChangeCbChain 
  IF hwndNextViewer <> 0 THEN 
      SendCHAINMsgRet = SendMessageA(hwndNextViewer, WM_CHANGECBCHAIN, My_wParam, My_lParam)
  END IF 
END SUB  ' case_WM_ChangeCbChain
'
SUB LogSomething 
GetDate
IF d$ <> OpenClipLogName$ THEN  ' file could have been closed but Exists 
'  IF ClipLog.Handle THEN ClipLog.Close  ' close yesterday's ClipLog file 
     ClipLogName$ = (d$ + ".txt") 
     IF FILEEXISTS(ClipLogName$) THEN 
         OpenClipLogName$ = ClipLogName$
         Goto WriteHere   ' and open
     ELSE  ' file does not exist
        ClipLog.OPEN(ClipLogName$,65535) 
        OpenClipLogName$ = ClipLogName$
        ClipLog.Close  
     END IF  ' IF FILEEXISTS
END IF  ' IF d$ <> OpenClipLogName$ 
WriteHere: 
    ClipLog.Open(ClipLogName$,1) 
    ClipLog.position = ClipLog.size 
    ClipLog.Write(dtTIme$): ClipLog.Write(clipString$): ClipLog.Close 
END SUB  ' LogSomething
'
SUB case_WM_DrawClipboard  ' clipboard changed, the system sends a WM_DRAWCLIPboard 
'  PRINT("clipboard changed ")
  clipboard.open
  IF ClipBoard.HasFormat(&H1) THEN 
      clipString$.additems (clipboard.text) 
'      PRINT(clipboard.text)
      LogSomething 
      clipString$.clear
'      clipboard.clear  ' don't do, else can't Paste
  END IF 
  clipboard.close 
'
  IF hwndNextViewer <> 0 THEN  ' pass msg along to hwndNextViewer
      SendDRAWMsgRet = SendMessageA(hwndNextViewer, WM_DRAWCLIPBOARD, My_wParam, My_lParam)
  END IF
END SUB ' case_WM_DrawClipboard 
'
StartClipFind:  
'  ShellExecuteA 0,0,@StartClipFind$,0,0,1
  ShellExec$ = StartClipFind$
  ShellExec
Return
'
ShowFilesFolder:
  ShellExec$ = FolderPath$
  ShellExec
Return
'
ShowHelp:
'  ShellExecuteA 0,0,@ClipLogDocs$,0,0,1
  ShellExec$ = ClipLogDocs$
  ShellExec
Return  ' ShowHelp
'
SUB ShellExec
  ShellExecuteA 0,0,@ShellExec$,0,0,1
END SUB  ' ShellExec
'
AppTerminate:
  ChangeChainReturn = ChangeClipboardChain(hwndMyViewer, hwndNextViewer) 
  App.Terminate
Return
'
END
Last edited by vmars316 on Mon Jul 18, 2016 4:34 pm, edited 2 times in total.
vmars.us Win11 x64 , Martin Guitar 000-16 (1995)
"All things in moderation , except for love and forgiveness."
infratec
Always Here
Always Here
Posts: 6817
Joined: Sun Sep 07, 2008 12:45 pm
Location: Germany

Re: Converting ClipBoardViewer from HotBasic to PureBasic

Post by infratec »

Convert it to PB and if you run into problems someone will help you.

Bernd
vmars316
Enthusiast
Enthusiast
Posts: 464
Joined: Fri Jun 29, 2012 12:24 am
Contact:

Re: Converting ClipBoardViewer from HotBasic to PureBasic

Post by vmars316 »

Figuring out the winApi with hotbasic was a long and painful process .
Let me ask a more specific question:
I see this in pbHelp:
ClearClipboard
GetClipboardImage
GetClipboardText
SetClipboardImage
SetClipboardText
Example
Clipboard.pb
Supported OS

But how would my myClipboard.pb know when a new entry has been posted to the clipboard ?

Thanks
vmars.us Win11 x64 , Martin Guitar 000-16 (1995)
"All things in moderation , except for love and forgiveness."
User avatar
Lunasole
Addict
Addict
Posts: 1091
Joined: Mon Oct 26, 2015 2:55 am
Location: UA
Contact:

Re: Converting ClipBoardViewer from HotBasic to PureBasic

Post by Lunasole »

vmars316 wrote:Figuring out the winApi with hotbasic was a long and painful process .
But how would my myClipboard.pb know when a new entry has been posted to the clipboard ?
Thanks
It doesn't know. You can constantly call GetClipboardText() and store local result, comparing it with data received.
That of course not a perfect way to monitor clipboard, but else you need use WinAPI anyway.

I was writing similar code (see "ElDiablo" on my site, at the source code of one of DLL plugin it uses) but used SetClipboardViewer API for that, don't know how it works on Win10 (and don't want to install it to test ^^). You can try if it works fine if have windows 10.
"W̷i̷s̷h̷i̷n̷g o̷n a s̷t̷a̷r"
drgolf
User
User
Posts: 90
Joined: Tue Mar 03, 2009 3:40 pm
Location: france

Re: Converting ClipBoardViewer from HotBasic to PureBasic

Post by drgolf »

Here is the code for PB 5.5 Beta 1.

The datasection is for the trayicon.

Code: Select all

;by DrGolf - 07/2016
;PB 5.50 beta 1 - x64
; hbClipLog.bas  Author: vmars ,  vmars316    08/10/2012
;
EnableExplicit
;{- Enumerations / DataSections
;{ Windows
Enumeration
  #Window_0
EndEnumeration
;}
;{ Gadgets
Enumeration
  #Button_1
  #Button_2
  #Editor_3
  #Button_4
  #Button_5
EndEnumeration
#trayicon=0
#systrayicon=0
;}
Global ClipboardViewerNext.i
Global clipstring$,d$,getdatecnt,dttime$
Global ClipLogName$="****",OpenClipLogName$="00000000"
;}
Procedure GetDate()
GetDateCnt+1
   d$=FormatDate("%yyyy_%mm_%dd",Date())
   dttime$=FormatDate("%hh:%ii:%ss",Date())
 SetWindowTitle(#Window_0, "ClipLog "+d$+".txt") 
EndProcedure  ; GetDate

Procedure LogSomething()
GetDate()
If d$ <> OpenClipLogName$ ; file could have been closed but Exists
     ClipLogName$ = (d$ + ".txt")
         OpenClipLogName$ = ClipLogName$
EndIf  ; IF d$ <> OpenClipLogName$
;
If OpenFile(0,cliplogname$,#PB_File_Append |#PB_Ascii)
WriteStringN(0,dttime$, #PB_Ascii)
WriteStringN(0,clipstring$, #PB_Ascii)
CloseFile(0)
EndIf
EndProcedure ; LogSomething

Procedure CallBack(hWnd, Msg, wParam, lParam)
  Protected result
  Result = #PB_ProcessPureBasicEvents
  Select Msg
    Case #WM_DRAWCLIPBOARD
      If IsClipboardFormatAvailable_(#CF_TEXT)
       ; OpenClipboard_(hWnd)
          ;clipstring$ = GetClipboardData_(#CF_TEXT)
        clipstring$=GetClipboardText()
        SetGadgetText(#Editor_3,clipstring$)
        LogSomething()
        clipString$=""
       ; CloseClipboard_()       
      EndIf
      SendMessage_(ClipboardViewerNext, Msg, wParam, lParam)
    Case #WM_CHANGECBCHAIN
      If wParam = ClipboardViewerNext
        ClipboardViewerNext = lParam
      Else
        SendMessage_(ClipboardViewerNext, Msg, wParam, lParam)
      EndIf
  EndSelect
  ProcedureReturn Result
EndProcedure

Procedure OpenWindow_Window_0()
  If OpenWindow(#Window_0, 471, 273, 448, 233, "ClipLog", #PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_TitleBar|#PB_Window_ScreenCentered)
    ButtonGadget(#Button_1, 12, 20, 146, 28, "SendTo TaskTRAY")
    ButtonGadget(#Button_2, 350, 20, 80, 28, "EXIT")
    EditorGadget(#Editor_3, 12, 80, 420, 130)
    ButtonGadget(#Button_4, 170, 20, 80, 28, "FIND")
    ButtonGadget(#Button_5, 260, 20, 80, 28, "HELP")
    ;
    
  EndIf
EndProcedure

Procedure CloseWindow_window_0()
 ChangeClipboardChain_(WindowID(#Window_0), ClipboardViewerNext)
 CloseWindow(#Window_0) 
EndProcedure
;
;-begin
OpenWindow_Window_0()
If IsClipboardFormatAvailable_(#CF_TEXT) 
   ClearClipboard()
   clipString$=""
 EndIf

SetWindowCallback(@callback())
ClipboardViewerNext = SetClipboardViewer_(WindowID(#Window_0))
;

;{- Event loop
Repeat
  Select WaitWindowEvent()
    ; ///////////////////
    Case #PB_Event_Gadget
      Select EventGadget()
      Case #Button_1
       CatchImage(#trayicon,?trayicon)
       AddSysTrayIcon(#SysTrayIcon, WindowID(#Window_0), ImageID(#trayicon))   
       SysTrayIconToolTip(#systrayicon,"DoubleClick To Show Window")
      Case #Button_2
        CloseWindow_window_0()
        Break
      Case #Button_4
        RunProgram("ClipFind.exe")
      Case #Button_5
        RunProgram("http://www.quickerthanaspark.com/ClipLog/ClipLogDocs.html")
      EndSelect
    ; ////////////////////////
    Case #PB_Event_SysTray
      If EventGadget()=#systrayicon        
        If EventType()=#PB_EventType_LeftDoubleClick 
          HideWindow(#Window_0,#False)
          EndIf
      EndIf
      
    Case #PB_Event_CloseWindow
      If EventWindow()= #Window_0
        If IsSysTrayIcon(#systrayicon)=#False
          CloseWindow_Window_0()
        Break
      Else
        HideWindow(#Window_0,#True)
        EndIf
      EndIf
  EndSelect
ForEver
;

;
  DataSection
  trayicon:
    ; size : 15086 bytes
    Data.q $3030000300010000,$25A8002000010000,$2020000000360000,$10A8002000010000,$1010000025DE0000
    Data.q $0468002000010000,$0028000036860000,$0060000000300000,$0000002000010000,$0000000025800000
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $0000030000000100,$0000090000000600,$00000C0000000B00,$00000C0000000C00,$00000C0000000C00
    Data.q $00000C0000000C00,$00000C0000000C00,$00000C0000000C00,$00000C0000000C00,$00000C0000000C00
    Data.q $00000C0000000C00,$00000C0000000C00,$00000C0000000C00,$00000C0000000C00,$00000C0000000C00
    Data.q $0000090000000B00,$0000030000000600,$0000000000000100,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000010000000000,$00000B0000000500
    Data.q $00001F0000001500,$0000270000002400,$0000280000002800,$0000280000002800,$0000280000002800
    Data.q $0000280000002800,$0000280000002800,$0000280000002800,$0000280000002800,$0000280000002800
    Data.q $0000280000002800,$0000280000002800,$0000280000002800,$0000270000002800,$00001F0000002400
    Data.q $00000B0000001500,$0000010000000500,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$0000030000000000,$00001A0000000B00,$0000460000003100
    Data.q $0000580000005200,$00005A0000005900,$00005A0000005A00,$00005A0000005A00,$00005A0000005A00
    Data.q $00005A0000005A00,$00005A0000005A00,$00005A0000005A00,$00005A0000005A00,$00005A0000005A00
    Data.q $00005A0000005A00,$00005A0000005A00,$0000580000005900,$0000460000005200,$00001A0000003100
    Data.q $0000030000000B00,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$0000050000000100,$270A68481C071200,$280AFF68280AEF64,$280AFF68280AFF68
    Data.q $280AFF68280AFF68,$280AFF68280AFF68,$280AFF68280AFF68,$280AFF68280AFF68,$280AFF68280AFF68
    Data.q $280AFF68280AFF68,$280AFF68280AFF68,$280AFF68280AFF68,$280AFF68280AFF68,$280AFF68280AFF68
    Data.q $280AFF68280AFF68,$280AFF68280AFF68,$270AFF68280AFF68,$000068481C07EF64,$0000050000001200
    Data.q $0000000000000100,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $0000060000000100,$7248EA66270A1600,$683DFFA76E42FFA3,$683DFFA4683DFFA4,$683DFFA4683DFFA4
    Data.q $683DFFA4683DFFA4,$683DFFA4683DFFA4,$683DFFA4683DFFA4,$683DFFA4683DFFA4,$683DFFA4683DFFA4
    Data.q $683DFFA4683DFFA4,$683DFFA4683DFFA4,$683DFFA4683DFFA4,$683DFFA4683DFFA4,$683DFFA4683DFFA4
    Data.q $683DFFA4683DFFA4,$7248FFA76E42FFA4,$0000EA66270AFFA3,$0000060000001600,$0000000000000100
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000050000000100
    Data.q $7044FF69290B1200,$4019FF8D431CFFA8,$4019FF8B4019FF8B,$4019FF8B4019FF8B,$4019FF8B4019FF8B
    Data.q $4019FF8B4019FF8B,$4019FF8B4019FF8B,$4019FF8B4019FF8B,$4019FF8B4019FF8B,$4019FF8B4019FF8B
    Data.q $4019FF8B4019FF8B,$4019FF8B4019FF8B,$4019FF8B4019FF8B,$4019FF8B4019FF8B,$4019FF8B4019FF8B
    Data.q $7044FF8D431CFF8B,$0000FF69290BFFA8,$0000050000001200,$0000000000000100,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000030000000000,$6C40FF6A2A0B0B00
    Data.q $D6D6FF8D421AFFA6,$D6D6FFD6D6D6FFD6,$D6D6FFD6D6D6FFD6,$D6D6FFD6D6D6FFD6,$D6D6FFD6D6D6FFD6
    Data.q $D6D6FFD6D6D6FFD6,$D6D6FFD6D6D6FFD6,$D6D6FFD6D6D6FFD6,$D6D6FFD6D6D6FFD6,$D6D6FFD6D6D6FFD6
    Data.q $D6D6FFD6D6D6FFD6,$D6D6FFD6D6D6FFD6,$D6D6FFD6D6D6FFD6,$D6D6FFD6D6D6FFD6,$6C40FF8D421AFFD6
    Data.q $0000FF6A2A0BFFA6,$0000030000000B00,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$0000010000000000,$6E40FF6B2B0C0500,$D7D7FF8F451BFFA8
    Data.q $F8F8FFF8F8F8FFD7,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8
    Data.q $F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8
    Data.q $F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$D7D7FFF8F8F8FFF8,$6E40FF8F451BFFD7,$0000FF6B2B0CFFA8
    Data.q $0000010000000500,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$6F42FF6C2C0C0100,$D7D7FF92471DFFAA,$F8F8FFF8F8F8FFD7
    Data.q $F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8
    Data.q $F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8
    Data.q $F8F8FFF8F8F8FFF8,$D7D7FFF8F8F8FFF8,$6F42FF92471DFFD7,$0000FF6C2C0CFFAA,$0000000000000100
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$7243FF6D2C0D0000,$D7D7FF944A1EFFAB,$F8F8FFF8F8F8FFD7,$F8F8FFF8F8F8FFF8
    Data.q $F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8
    Data.q $F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8
    Data.q $D7D7FFF8F8F8FFF8,$7243FF944A1EFFD7,$0000FF6D2C0DFFAB,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $7344FF6E2D0D0000,$D8D8FF964C20FFAD,$F8F8FFF8F8F8FFD8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8
    Data.q $F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8
    Data.q $F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$D8D8FFF8F8F8FFF8
    Data.q $7344FF964C20FFD8,$0000FF6E2D0DFFAD,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$7646FF6F2E0E0000
    Data.q $D8D8FF994F22FFAF,$F8F8FFF8F8F8FFD8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8
    Data.q $F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8
    Data.q $F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$D8D8FFF8F8F8FFF8,$7646FF994F22FFD8
    Data.q $0000FF6F2E0EFFAF,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$7848FF70300F0000,$D9D9FF9B5224FFB1
    Data.q $F8F8FFF8F8F8FFD9,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8
    Data.q $F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8
    Data.q $F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$D9D9FFF8F8F8FFF8,$7848FF9B5224FFD9,$0000FF70300FFFB1
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$7A49FF71310F0000,$D9D9FF9E5425FFB3,$F8F8FFF8F8F8FFD9
    Data.q $F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8
    Data.q $F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8
    Data.q $F8F8FFF8F8F8FFF8,$D9D9FFF8F8F8FFF8,$7A49FF9E5425FFD9,$0000FF71310FFFB3,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$7C4AFF7232100000,$D9D9FFA05727FFB5,$F8F8FFF8F8F8FFD9,$F8F8FFF8F8F8FFF8
    Data.q $F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8
    Data.q $F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8
    Data.q $D9D9FFF8F8F8FFF8,$7C4AFFA05727FFD9,$0000FF723210FFB5,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $7D4BFF7333100000,$DADAFFA25928FFB6,$F8F8FFF8F8F8FFDA,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8
    Data.q $F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8
    Data.q $F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$DADAFFF8F8F8FFF8
    Data.q $7D4BFFA25928FFDA,$0000FF733310FFB6,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$7F4CFF7434110000
    Data.q $DADAFFA45B29FFB8,$F8F8FFF8F8F8FFDA,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8
    Data.q $F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8
    Data.q $F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$DADAFFF8F8F8FFF8,$7F4CFFA45B29FFDA
    Data.q $0000FF743411FFB8,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$814EFF7535120000,$DBDBFFA65D2BFFBA
    Data.q $F8F8FFF8F8F8FFDB,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8
    Data.q $F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8
    Data.q $F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$DBDBFFF8F8F8FFF8,$814EFFA65D2BFFDB,$0000FF753512FFBA
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$824EFF7636130000,$DBDBFFA75F2CFFBA,$F8F8FFF8F8F8FFDB
    Data.q $F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8
    Data.q $F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8
    Data.q $F8F8FFF8F8F8FFF8,$DBDBFFF8F8F8FFF8,$824EFFA75F2CFFDB,$0000FF763613FFBA,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$8450FF7838130000,$DCDCFFA9612EFFBC,$F8F8FFF8F8F8FFDC,$F8F8FFF8F8F8FFF8
    Data.q $F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8
    Data.q $F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8
    Data.q $DCDCFFF8F8F8FFF8,$8450FFA9612EFFDC,$0000FF783813FFBC,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $8550FF7939140000,$DCDCFFAB632EFFBD,$F8F8FFF8F8F8FFDC,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8
    Data.q $F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8
    Data.q $F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$DCDCFFF8F8F8FFF8
    Data.q $8550FFAB632EFFDC,$0000FF793914FFBD,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$8652FF7A3A150000
    Data.q $DDDDFFAC6430FFBE,$F8F8FFF8F8F8FFDD,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8
    Data.q $F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8
    Data.q $F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$DDDDFFF8F8F8FFF8,$8652FFAC6430FFDD
    Data.q $0000FF7A3A15FFBE,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$8853FF7B3B150000,$DDDDFFAD6631FFBF
    Data.q $F8F8FFF8F8F8FFDD,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8
    Data.q $F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8
    Data.q $F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$DDDDFFF8F8F8FFF8,$8853FFAD6631FFDD,$0000FF7B3B15FFBF
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$8854FF7C3D160000,$DEDEFFAE6732FFC0,$F8F8FFF8F8F8FFDE
    Data.q $F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8
    Data.q $F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8
    Data.q $F8F8FFF8F8F8FFF8,$DEDEFFF8F8F8FFF8,$8854FFAE6732FFDE,$0000FF7C3D16FFC0,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$8954FF7D3E170000,$DFDFFFAF6833FFC1,$F8F8FFF8F8F8FFDF,$F8F8FFF8F8F8FFF8
    Data.q $F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8
    Data.q $F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8
    Data.q $DFDFFFF8F8F8FFF8,$8954FFAF6833FFDF,$0000FF7D3E17FFC1,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $8A55FF7F3F180000,$DFDFFFAF6934FFC1,$F8F8FFF8F8F8FFDF,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8
    Data.q $F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8
    Data.q $F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$DFDFFFF8F8F8FFF8
    Data.q $8A55FFAF6934FFDF,$0000FF7F3F18FFC1,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$8A56FF8040180000
    Data.q $E0E0FFB06935FFC1,$F8F8FFF8F8F8FFE0,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8
    Data.q $F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8
    Data.q $F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$E0E0FFF8F8F8FFF8,$8A56FFB06935FFE0
    Data.q $0000FF804018FFC1,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$8B56FF8141190000,$E0E0FFB06A35FFC1
    Data.q $F8F8FFF8F8F8FFE0,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8
    Data.q $F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8
    Data.q $F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$E0E0FFF8F8F8FFF8,$8B56FFB06A35FFE0,$0000FF814119FFC1
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$8B56FF82431A0000,$E1E1FFB06A35FFC1,$F8F8FFF8F8F8FFE1
    Data.q $F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8
    Data.q $F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8
    Data.q $F8F8FFF8F8F8FFF8,$E1E1FFF8F8F8FFF8,$8B56FFB06A35FFE1,$0000FF82431AFFC1,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$8B56FF83441A0000,$E1E1FFB06A35FFC1,$F8F8FFF8F8F8FFE1,$F8F8FFF8F8F8FFF8
    Data.q $F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8
    Data.q $F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8
    Data.q $E1E1FFF8F8F8FFF8,$8B56FFB06A35FFE1,$0000FF83441AFFC1,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $8B57FF84451B0000,$E1E1FFB06A36FFC1,$F8F8FFF8F8F8FFE1,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8
    Data.q $F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8
    Data.q $F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$E1E1FFF8F8F8FFF8
    Data.q $8B57FFB06A36FFE1,$0000FF84451BFFC1,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$8B56FF85461C0000
    Data.q $E2E2FFB06A35FFC1,$F8F8FFF8F8F8FFE2,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8
    Data.q $F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8
    Data.q $F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$E2E2FFF8F8F8FFF8,$8B56FFB06A35FFE2
    Data.q $0000FF85461CFFC1,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$8B56FF86471C0000,$E2E2FFB06A35FFC1
    Data.q $F8F8FFF8F8F8FFE2,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8
    Data.q $F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8
    Data.q $F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$E2E2FFF8F8F8FFF8,$8B56FFB06A35FFE2,$0000FF86471CFFC1
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$8A56FF87481D0000,$E3E3FFB06935FFC1,$F8F8FFF8F8F8FFE3
    Data.q $F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8
    Data.q $F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8
    Data.q $F8F8FFF8F8F8FFF8,$E3E3FFF8F8F8FFF8,$8A56FFB06935FFE3,$0000FF87481DFFC1,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$8A55FF88491D0000,$E3E3FFB06934FFC1,$F8F8FFF8F8F8FFE3,$F8F8FFF8F8F8FFF8
    Data.q $F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8
    Data.q $F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8
    Data.q $E3E3FFF8F8F8FFF8,$8A55FFB06934FFE3,$0000FF88491DFFC1,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $8A55FF894A1E0000,$E4E4FFAF6934FFC1,$F8F8FFF8F8F8FFE4,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8
    Data.q $F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8
    Data.q $F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$E4E4FFF8F8F8FFF8
    Data.q $8A55FFAF6934FFE4,$0000FF894A1EFFC1,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$8954FF8A4B1E0000
    Data.q $E4E4FFAF6833FFC1,$F8F8FFF8F8F8FFE4,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8
    Data.q $F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8
    Data.q $F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$E4E4FFF8F8F8FFF8,$8954FFAF6833FFE4
    Data.q $0000FF8A4B1EFFC1,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$8854FF8B4C1F0000,$E4E4FFAF6733FFC1
    Data.q $F8F8FFF8F8F8FFE4,$C9C9FFF8F8F8FFF8,$5353FF636363FFC9,$5353FF535353FF53,$5353FF535353FF53
    Data.q $5353FF535353FF53,$5353FF535353FF53,$5353FF535353FF53,$5353FF535353FF53,$5353FF535353FF53
    Data.q $C9C9FF636363FF53,$F8F8FFF8F8F8FFC9,$E4E4FFF8F8F8FFF8,$8854FFAF6733FFE4,$0000FF8B4C1FFFC1
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$8854FF8C4C1F0000,$E5E5FFAE6732FFC0,$F8F8FFF8F8F8FFE5
    Data.q $6E6EFFF8F8F8FFF8,$8787FF7A7A7AFF6E,$8787FF878787FF87,$8787FF878787FF87,$8787FF878787FF87
    Data.q $8787FF878787FF87,$8787FF878787FF87,$8787FF878787FF87,$8787FF878787FF87,$6E6EFF7A7A7AFF87
    Data.q $F8F8FFF8F8F8FF6E,$E5E5FFF8F8F8FFF8,$8854FFAE6732FFE5,$0000FF8C4C1FFFC0,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$8D58FF8C4D200000,$E5E5FFB06934FFC3,$E5E5FFE5E5E5FFE5,$6B6BFFE5E5E5FFE5
    Data.q $9393FF939393FF6B,$9393FF939393FF93,$9393FF939393FF93,$9393FF939393FF93,$9393FF939393FF93
    Data.q $9393FF939393FF93,$9393FF939393FF93,$9393FF939393FF93,$6B6BFF939393FF93,$E5E5FFE5E5E5FF6B
    Data.q $E5E5FFE5E5E5FFE5,$8D58FFB06934FFE5,$0000FF8C4D20FFC3,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $8A57E78D4E200000,$8853FFC28D58FFBA,$8853FFBF8853FFBF,$7777FFBF8853FFBF,$A0A0FFA0A0A0FF77
    Data.q $A0A0FFA0A0A0FFA0,$A0A0FFA0A0A0FFA0,$A0A0FFA0A0A0FFA0,$A0A0FFA0A0A0FFA0,$A0A0FFA0A0A0FFA0
    Data.q $A0A0FFA0A0A0FFA0,$A0A0FFA0A0A0FFA0,$7777FFA0A0A0FFA0,$8853FFBF8853FF77,$8853FFBF8853FFBF
    Data.q $8A57FFC28D58FFBF,$0000E78D4E20FFBA,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$4E213F8D4E210000
    Data.q $4E21FF8D4E21C98D,$4E21FF8D4E21FF8D,$8484FF8D4E21FF8D,$ADADFFADADADFF84,$ADADFFADADADFFAD
    Data.q $ADADFFADADADFFAD,$ADADFFADADADFFAD,$ADADFFADADADFFAD,$ADADFFADADADFFAD,$ADADFFADADADFFAD
    Data.q $ADADFFADADADFFAD,$8484FFADADADFFAD,$4E21FF8D4E21FF84,$4E21FF8D4E21FF8D,$4E21FF8D4E21FF8D
    Data.q $00003F8D4E21C98D,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$8F8F000000000000,$BBBBFFB7B7B7FF8F,$C9C9FFC1C1C1FFBB,$D9D9FFD1D1D1FFC9
    Data.q $E6E6FFE1E1E1FFD9,$E9E9FFE9E9E9FFE6,$E1E1FFE6E6E6FFE9,$D1D1FFD9D9D9FFE1,$C1C1FFC9C9C9FFD1
    Data.q $8F8FFFBBBBBBFFC1,$000000000000FF8F,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $9898000000000000,$9898FF989898FF98,$9898FF989898FF98,$9898FF989898FF98,$9898FF989898FF98
    Data.q $9898FF989898FF98,$9898FF989898FF98,$9898FF989898FF98,$9898FF989898FF98,$9898FF989898FF98
    Data.q $000000000000FF98,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$9B9B000000000000,$C8C8FFC8C8C8FF9B,$C8C8FFC8C8C8FFC8,$C8C8FFC8C8C8FFC8
    Data.q $C8C8FFC8C8C8FFC8,$9B9BFFC8C8C8FFC8,$000000000000FF9B,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $9D9D000000000000,$9D9DFF9D9D9DFF9D,$9D9DFF9D9D9DFF9D,$9D9DFF9D9D9DFF9D,$9D9DFF9D9D9DFF9D
    Data.q $9D9DFF9D9D9DFF9D,$000000000000FF9D,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$00FC000000000000,$00F800007F000000
    Data.q $00F800003F000000,$00F000003F000000,$00F000001F000000,$00F000001F000000,$00F800001F000000
    Data.q $00F800003F000000,$00FC00003F000000,$00FE00007F000000,$00FE0000FF000000,$00FE0000FF000000
    Data.q $00FE0000FF000000,$00FE0000FF000000,$00FE0000FF000000,$00FE0000FF000000,$00FE0000FF000000
    Data.q $00FE0000FF000000,$00FE0000FF000000,$00FE0000FF000000,$00FE0000FF000000,$00FE0000FF000000
    Data.q $00FE0000FF000000,$00FE0000FF000000,$00FE0000FF000000,$00FE0000FF000000,$00FE0000FF000000
    Data.q $00FE0000FF000000,$00FE0000FF000000,$00FE0000FF000000,$00FE0000FF000000,$00FE0000FF000000
    Data.q $00FE0000FF000000,$00FE0000FF000000,$00FE0000FF000000,$00FE0000FF000000,$00FE0000FF000000
    Data.q $00FE0000FF000000,$00FE0000FF000000,$00FE0000FF000000,$00FE0000FF000000,$00FE0000FF000000
    Data.q $FCFF0000FF000000,$FCFF0000FF7F0000,$FFFF0000FF7F0000,$FFFF0000FFFF07C0,$FFFF0000FFFF07C0
    Data.q $FFFF0000FFFFFFFF,$00280000FFFFFFFF,$0040000000200000,$0000002000010000,$0000000010800000
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$3A2B000000000000,$0000093E2B200353
    Data.q $0000140000001100,$0000150000001500,$0000150000001500,$0000150000001500,$0000150000001500
    Data.q $0000150000001500,$0000150000001500,$0000150000001500,$0000150000001500,$34270C2A1E171200
    Data.q $0000015F4231044A,$0000000000000000,$0000000000000000,$0000000000000000,$100C016648350000
    Data.q $0000210000000D16,$0000460000003C00,$0000490000004800,$0000490000004900,$0000490000004900
    Data.q $0000490000004900,$0000490000004900,$0000490000004900,$0000490000004900,$0000480000004900
    Data.q $08062D0000003F00,$000004533D30110B,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $0A02037253400000,$3E1CD46C35173E1B,$3D1BFF7C3D1BFF7C,$3D1BFF7C3D1BFF7C,$3D1BFF7C3D1BFF7C
    Data.q $3D1BFF7C3D1BFF7C,$3D1BFF7C3D1BFF7C,$3D1BFF7C3D1BFF7C,$3D1BFF7C3D1BFF7C,$3D1BFF7C3D1BFF7C
    Data.q $3E1BFF7C3D1BFF7C,$1505F77A3F1EFF7C,$00000A503D326836,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$0D03037A5A470000,$5027FC9158315F22,$4D25FF934D25FF94,$4D25FF934D25FF93
    Data.q $4D25FF934D25FF93,$4D25FF934D25FF93,$4D25FF934D25FF93,$4D25FF934D25FF93,$4D25FF934D25FF93
    Data.q $4D25FF934D25FF93,$4E26FF934D25FF93,$1A07FFA0663BFF94,$00000A564237AB45,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$27180181614E0000,$7459FF92562E5B42,$E1E1FFDDDDDDFFA5
    Data.q $E1E1FFE1E1E1FFE1,$E1E1FFE1E1E1FFE1,$E1E1FFE1E1E1FFE1,$E1E1FFE1E1E1FFE1,$E1E1FFE1E1E1FFE1
    Data.q $E1E1FFE1E1E1FFE1,$E1E1FFE1E1E1FFE1,$A597FFE1E1E1FFE1,$2912FF9E5E33FFBE,$0000046B5548AD56
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$5A44000000000000,$765AFF94582F5683
    Data.q $F8F8FFEDEDEDFFA8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8
    Data.q $F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$A698FFF8F8F8FFF8,$452AFFA16135FFBF
    Data.q $000001907363AA78,$0000000000000000,$0000000000000000,$0000000000000000,$634D000000000000
    Data.q $795CFF965B31558D,$F8F8FFEDEDEDFFAA,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8
    Data.q $F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$A899FFF8F8F8FFF8
    Data.q $4A2FFFA46537FFC1,$000000000000AA7F,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $6E56000000000000,$7C5EFF995D325599,$F8F8FFEDEDEDFFAD,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8
    Data.q $F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8
    Data.q $AA9BFFF8F8F8FFF8,$5034FFA66839FFC2,$000000000000AA85,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$7961000000000000,$7F60FF9B603555A3,$F8F8FFEDEDEDFFB0,$F8F8FFF8F8F8FFF8
    Data.q $F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8
    Data.q $F8F8FFF8F8F8FFF8,$AC9CFFF8F8F8FFF8,$573BFFAA6C3CFFC4,$000000000000AA8B,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$8069000000000000,$8161FF9E623655A9,$F8F8FFEDEDEDFFB2
    Data.q $F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8
    Data.q $F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$AD9DFFF8F8F8FFF8,$5C40FFAD6E3DFFC5,$000000000000AA8F
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$856D000000000000,$8463FFA0643755AD
    Data.q $F8F8FFEEEEEEFFB5,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8
    Data.q $F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$AF9EFFF8F8F8FFF8,$5F42FFB0713FFFC7
    Data.q $000000000000AA92,$0000000000000000,$0000000000000000,$0000000000000000,$866D000000000000
    Data.q $8665FFA2673955AE,$F8F8FFEEEEEEFFB7,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8
    Data.q $F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$B09FFFF8F8F8FFF8
    Data.q $6043FFB27441FFC8,$000000000000AA93,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $876F000000000000,$8866FFA4693A55AF,$F8F8FFEEEEEEFFB8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8
    Data.q $F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8
    Data.q $B2A1FFF8F8F8FFF8,$6244FFB47743FFCA,$000000000000AA94,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$896F000000000000,$8A68FFA66B3B55B0,$F8F8FFEEEEEEFFBA,$F8F8FFF8F8F8FFF8
    Data.q $F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8
    Data.q $F8F8FFF8F8F8FFF8,$B3A2FFF8F8F8FFF8,$6445FFB67944FFCB,$000000000000AA96,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$8A70000000000000,$8C69FFA76D3D55B2,$F8F8FFEFEFEFFFBC
    Data.q $F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8
    Data.q $F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$B4A3FFF8F8F8FFF8,$6546FFB87B47FFCC,$000000000000AA97
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$8B71000000000000,$8E6BFFA96E3F55B3
    Data.q $F8F8FFEFEFEFFFBD,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8
    Data.q $F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$B6A4FFF8F8F8FFF8,$6647FFB97C48FFCD
    Data.q $000000000000AA99,$0000000000000000,$0000000000000000,$0000000000000000,$8D72000000000000
    Data.q $8F6CFFAA704055B4,$F8F8FFEFEFEFFFBF,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8
    Data.q $F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$B7A5FFF8F8F8FFF8
    Data.q $6848FFBB7E49FFCF,$000000000000AA9A,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $8D72000000000000,$906DFFAB714155B5,$F8F8FFEFEFEFFFBF,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8
    Data.q $F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8
    Data.q $B8A6FFF8F8F8FFF8,$6949FFBB7F4AFFCF,$000000000000AA9C,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$8E73000000000000,$916EFFAB724155B6,$F8F8FFF0F0F0FFC0,$F8F8FFF8F8F8FFF8
    Data.q $F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8
    Data.q $F8F8FFF8F8F8FFF8,$B8A7FFF8F8F8FFF8,$6B4AFFBB804BFFD0,$000000000000AA9D,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$8F74000000000000,$916EFFAC734255B6,$F8F8FFF0F0F0FFC0
    Data.q $F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8
    Data.q $F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$B9A7FFF8F8F8FFF8,$6C4AFFBB804BFFD0,$000000000000AA9E
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$9074000000000000,$916EFFAC734255B7
    Data.q $F8F8FFF0F0F0FFC0,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8
    Data.q $F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$B9A8FFF8F8F8FFF8,$6D4BFFBB804BFFD0
    Data.q $000000000000AA9F,$0000000000000000,$0000000000000000,$0000000000000000,$9174000000000000
    Data.q $926EFFAD744255B8,$F8F8FFF0F0F0FFC0,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8
    Data.q $F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$BAA8FFF8F8F8FFF8
    Data.q $6D4BFFBB804BFFD1,$000000000000AA9F,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $8E6F000000000000,$916EFFAD744255B6,$F8F8FFF1F1F1FFC1,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8
    Data.q $F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8
    Data.q $BAA8FFF8F8F8FFF8,$6C49FFBB7F4AFFD2,$000000000000AA9F,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$8B6C000000000000,$916EFFAE744255B4,$F8F8FFF1F1F1FFC0,$F8F8FFF8F8F8FFF8
    Data.q $F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8
    Data.q $F8F8FFF8F8F8FFF8,$BAA9FFF8F8F8FFF8,$6B47FFBB7F4AFFD2,$000000000000AA9F,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$8A6B000000000000,$916EFFAE744255B5,$F8F8FFF1F1F1FFC0
    Data.q $C4C4FFEDEDEDFFF8,$C1C1FFC1C1C1FFC4,$C1C1FFC1C1C1FFC1,$C1C1FFC1C1C1FFC1,$C1C1FFC1C1C1FFC1
    Data.q $C2C2FFC1C1C1FFC1,$F8F8FFDDDDDDFFC2,$BAA9FFF8F8F8FFF8,$6C47FFBB7D49FFD2,$000000000000AA9F
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$8A6A000000000000,$906DFFAE744255B5
    Data.q $F8F8FFF1F1F1FFC0,$7373FFB0B0B0FFF8,$7575FF757575FF73,$7575FF757575FF75,$7575FF757575FF75
    Data.q $7575FF757575FF75,$7474FF757575FF75,$F8F8FF838383FF74,$BAA9FFF8F8F8FFF8,$6C46FFBA7D48FFD2
    Data.q $000000000000AA9F,$0000000000000000,$0000000000000000,$0000000000000000,$8968000000000000
    Data.q $9066FCAE774552B4,$C6B4FFD8C6B4FFC1,$9797FF928C86FFD8,$9797FF979797FF97,$9797FF979797FF97
    Data.q $9797FF979797FF97,$9797FF979797FF97,$9797FF979797FF97,$C6B4FF7C7C7CFF97,$AB8DFFD8C6B4FFD8
    Data.q $6C46FFBC844FFFCC,$000000000000A49F,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $8866000000000000,$6232B9975B2C27B3,$6131FF9D6131FF9E,$A8A8FF897565FF9D,$A8A8FFA8A8A8FFA8
    Data.q $A8A8FFA8A8A8FFA8,$A8A8FFA8A8A8FFA8,$A8A8FFA8A8A8FFA8,$A8A8FFA8A8A8FFA8,$6131FF8D8D8DFFA8
    Data.q $6132FF9D6131FF9D,$6B45E79C6233FF9E,$0000000000004F9F,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$ADADAA9E99950000
    Data.q $BABAFFB2B2B2FFAD,$C9C9FFC1C1C1FFBA,$CDCDFFCDCDCDFFC9,$C1C1FFC9C9C9FFCD,$B2B2FFBABABAFFC1
    Data.q $0000FF9B9B9BFFB2,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $9E9838A99E950000,$A4A455A6A19D55A6,$B8B8FFB8B8B8FFA4,$B8B8FFB8B8B8FFB8,$AEAEFFB8B8B8FFB8
    Data.q $A19D8DA2A09FFFAE,$000055A69E9855A6,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$9F9E000000000000,$9F9FAAA09F9EAAA0,$9F9FAA9F9F9FAA9F
    Data.q $9F9EAA9F9F9FAA9F,$000038A4A09DAAA0,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$0000000000000000,$00F0000000000000,$00E00F0000E00F00
    Data.q $00E00F0000E00F00,$00F00F0000F00F00,$00F01F0000F01F00,$00F01F0000F01F00,$00F01F0000F01F00
    Data.q $00F01F0000F01F00,$00F01F0000F01F00,$00F01F0000F01F00,$00F01F0000F01F00,$00F01F0000F01F00
    Data.q $00F01F0000F01F00,$00F01F0000F01F00,$80FF1F0000F01F00,$F0FFFF0380FFFF03,$0028FFFFFFFFFF0F
    Data.q $0020000000100000,$0000002000010000,$0000000004400000,$0000000000000000,$0000000000000000
    Data.q $1D16000000000000,$00002A0000000E2A,$00002F0000002F00,$00002F0000002F00,$00002F0000002F00
    Data.q $07052E0000002F00,$000006422F24230A,$0000000000000000,$291302714F3B0000,$4520FF8846209B4E
    Data.q $4520FF874520FF87,$4520FF874520FF87,$4520FF874520FF87,$4C26FF874520FF87,$00004A482C1DFD8A
    Data.q $0000000000000000,$4C2E000000000000,$ECECFFC6AD9FAB7B,$ECECFFECECECFFEC,$ECECFFECECECFFEC
    Data.q $ECECFFECECECFFEC,$8366FFECECECFFEC,$000057724D3AFFAF,$0000000000000000,$6241000000000000
    Data.q $F8F8FFCCB4A5AA95,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$8769FFF8F8F8FFF8
    Data.q $000055956B54FFB3,$0000000000000000,$6F4D000000000000,$F8F8FFCFB7A7AAA1,$F8F8FFF8F8F8FFF8
    Data.q $F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$8D6DFFF8F8F8FFF8,$000055A88068FFB8,$0000000000000000
    Data.q $7653000000000000,$F8F8FFD2B9A9AAA7,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8
    Data.q $9170FFF8F8F8FFF8,$000055AF8971FFBC,$0000000000000000,$7955000000000000,$F8F8FFD4BCABAAAA
    Data.q $F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$9572FFF8F8F8FFF8,$000055B28B73FFC0
    Data.q $0000000000000000,$7C57000000000000,$F8F8FFD6BEACAAAD,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8
    Data.q $F8F8FFF8F8F8FFF8,$9875FFF8F8F8FFF8,$000055B48E74FFC3,$0000000000000000,$7F59000000000000
    Data.q $F8F8FFD7C0AEAAAF,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$9B78FFF8F8F8FFF8
    Data.q $000055B69076FFC5,$0000000000000000,$815A000000000000,$F8F8FFD8C0AFAAB1,$F8F8FFF8F8F8FFF8
    Data.q $F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$9C79FFF8F8F8FFF8,$000055B89277FFC5,$0000000000000000
    Data.q $825B000000000000,$F8F8FFD8C1AFAAB2,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8
    Data.q $9C79FFF8F8F8FFF8,$000055B99377FFC6,$0000000000000000,$8058000000000000,$F8F8FFD9C1AFAAB1
    Data.q $F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$F8F8FFF8F8F8FFF8,$9C79FFF8F8F8FFF8,$000055B68E70FFC6
    Data.q $0000000000000000,$7F56000000000000,$E3E3FFD9C1AFAAB2,$9B9BFF9B9B9BFFE3,$9B9BFF9B9B9BFF9B
    Data.q $A6A6FF9B9B9BFF9B,$9C79FFF8F8F8FFA6,$000055B48B6DFFC6,$0000000000000000,$7950000000000000
    Data.q $8A74FFB5865F8CAB,$A0A0FFA0A0A0FFA4,$A0A0FFA0A0A0FFA0,$9292FFA0A0A0FFA0,$7C50FFBB9373FF92
    Data.q $00003DB3896AF9B1,$0000000000000000,$0000000000000000,$A096000000000000,$B6B6AAABA7A538AC
    Data.q $C1C1FFC1C1C1FFB6,$A3A0E2B3B2B2FFC1,$000000000000AAA6,$0000000000000000,$0000000000000000
    Data.q $0000000000000000,$0000000000000000,$A2A0000000000000,$A3A255A3A2A255A4,$000038A5A2A055A3
    Data.q $0000000000000000,$0000000000000000,$03C0000000000000,$03C0000003800000,$03C0000003C00000
    Data.q $03C0000003C00000,$03C0000003C00000,$03C0000003C00000,$03C0000003C00000,$1FF0000003C00000
    Data.b $00,$00,$FC,$3F,$00,$00
  trayicon_end:
EndDataSection

User avatar
netmaestro
PureBasic Bullfrog
PureBasic Bullfrog
Posts: 8425
Joined: Wed Jul 06, 2005 5:42 am
Location: Fort Nelson, BC, Canada

Re: Converting ClipBoardViewer from HotBasic to PureBasic

Post by netmaestro »

Code: Select all

; Yet another useless program
; By netmaestro July 2016
;
; Demo monitoring clipboard changes
;
; Creating a clipboard viewer window with SetClipboardViewer_() is deprecated and only works for backward compatibility.
; The current (and simpler) way to monitor clipboard changes is to call AddClipboardFormatListener.
;
; Usage: Run this program and then cruise around in your desktop or programs copying things to the clipboard. 
;        Each time you copy something you should see a new line in your little sticky window.

#WM_CLIPBOARDUPDATE     =         $031D

Declare Winproc(hwnd, msg, wParam, lParam)

OpenLibrary(0, "user32.dll")
Prototype AddClipboardFormatListener(hwnd)
Global AddClipboardFormatListener_.AddClipboardFormatListener = GetFunction(0, "AddClipboardFormatListener")

OpenWindow(0,0,0,320,240,"",#PB_Window_ScreenCentered|#PB_Window_SystemMenu)
ListViewGadget(0,10,10,200,200)
SetWindowCallback(@WinProc())
StickyWindow(0,1)
AddClipboardFormatListener_(WindowID(0))

Repeat
  EventID = WaitWindowEvent()
Until EventID = #PB_Event_CloseWindow

CloseLibrary(0)

;---------------------------------------------
;        End of Main Loop Code
;---------------------------------------------

Procedure WinProc(hwnd, msg, wParam, lParam)
  result = #PB_ProcessPureBasicEvents
  Select msg
    Case #WM_CLIPBOARDUPDATE
     AddGadgetItem(0, -1, "Clipboard updated!")
  EndSelect
  ProcedureReturn result
EndProcedure
BERESHEIT
vmars316
Enthusiast
Enthusiast
Posts: 464
Joined: Fri Jun 29, 2012 12:24 am
Contact:

Re: Converting ClipBoardViewer from HotBasic to PureBasic

Post by vmars316 »

;by DrGolf - 07/2016
;PB 5.50 beta 1 - x64
DrGolf ;
I am learning a whole lot from your code .
Thank You very much !!!
vmars.us Win11 x64 , Martin Guitar 000-16 (1995)
"All things in moderation , except for love and forgiveness."
vmars316
Enthusiast
Enthusiast
Posts: 464
Joined: Fri Jun 29, 2012 12:24 am
Contact:

Re: Converting ClipBoardViewer from HotBasic to PureBasic

Post by vmars316 »

netmaestro
; Yet another useless program
; By netmaestro July 2016
Not at all .
This is very valuable to me .

Thank You very much !!!
vmars.us Win11 x64 , Martin Guitar 000-16 (1995)
"All things in moderation , except for love and forgiveness."
vmars316
Enthusiast
Enthusiast
Posts: 464
Joined: Fri Jun 29, 2012 12:24 am
Contact:

Re: Converting ClipBoardViewer from HotBasic to PureBasic

Post by vmars316 »

vmars.us Win11 x64 , Martin Guitar 000-16 (1995)
"All things in moderation , except for love and forgiveness."
Post Reply