logicthought
asked on
Using Threads
I need a quick and dirty example of sticking/converting
a loop based analysis function into a thread based one.
Examples will be appreciated with extra 500 points . ;)
and an A mark on the answer (if it works and clear and all...)
Delphi 7.0 (Windows XP)
Thanks.
lt.
a loop based analysis function into a thread based one.
Examples will be appreciated with extra 500 points . ;)
and an A mark on the answer (if it works and clear and all...)
Delphi 7.0 (Windows XP)
Thanks.
lt.
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
You should check this...: http://delphi.about.com/cs/kbthread/
Have you looked at the Threads demo in %delphi%\demos\threads?
Can your analysis function be decomposed qualitatively (e.g., as is done in the Sort demo with different algorithms operating on the same data) or quantitatively (as might be done with a single algorithm applied to large amounts of data, say as in an image processing application)?
Can your analysis function be decomposed qualitatively (e.g., as is done in the Sort demo with different algorithms operating on the same data) or quantitatively (as might be done with a single algorithm applied to large amounts of data, say as in an image processing application)?
Are you looking for something like this?
Begin test program source -----------------
unit TestBarberMain;
interface
uses Windows, Classes, Graphics, Forms, Controls, Menus,
Dialogs, StdCtrls, Buttons, ExtCtrls, ComCtrls, ImgList, StdActns,
ActnList, ToolWin, Barber;
type
TTestBarber = class(TForm)
OpenDialog: TOpenDialog;
SaveDialog: TSaveDialog;
ActionList1: TActionList;
FileNew1: TAction;
FileOpen1: TAction;
FileSave1: TAction;
FileSaveAs1: TAction;
FileSend1: TAction;
FileExit1: TAction;
EditCut1: TEditCut;
EditCopy1: TEditCopy;
EditPaste1: TEditPaste;
HelpAbout1: TAction;
StatusBar: TStatusBar;
ImageList1: TImageList;
RichEdit1: TRichEdit;
MainMenu1: TMainMenu;
File1: TMenuItem;
FileNewItem: TMenuItem;
FileOpenItem: TMenuItem;
FileSaveItem: TMenuItem;
FileSaveAsItem: TMenuItem;
N1: TMenuItem;
FileSendItem: TMenuItem;
N2: TMenuItem;
FileExitItem: TMenuItem;
Edit1: TMenuItem;
CutItem: TMenuItem;
CopyItem: TMenuItem;
PasteItem: TMenuItem;
Help1: TMenuItem;
HelpAboutItem: TMenuItem;
SaveDialog1: TSaveDialog;
ToolBar1: TToolBar;
ToolButton1: TToolButton;
ToolButton2: TToolButton;
ToolButton3: TToolButton;
ToolButton4: TToolButton;
ToolButton5: TToolButton;
ToolButton6: TToolButton;
ToolButton7: TToolButton;
ToolButton8: TToolButton;
ToolButton9: TToolButton;
PopupMenu1: TPopupMenu;
Cut1: TMenuItem;
Copy1: TMenuItem;
Paste1: TMenuItem;
ButtonRun: TButton;
procedure FileNew1Execute(Sender: TObject);
procedure FileOpen1Execute(Sender: TObject);
procedure FileSave1Execute(Sender: TObject);
procedure FileSaveAs1Execute(Sender: TObject);
procedure FileSend1Execute(Sender: TObject);
procedure FileExit1Execute(Sender: TObject);
procedure HelpAbout1Execute(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure DoButtonRunClick(Sender: TObject);
private
FFileName: String;
public
{ Public declarations }
end;
var
TestBarber: TTestBarber;
implementation
uses
SysUtils, Mapi, about, SHFolder;
{$R *.dfm}
resourcestring
SUntitled = 'Untitled';
SOverwrite = 'OK to overwrite %s';
SSendError = 'Error sending mail';
function DefaultSaveLocation: string;
var
P: PChar;
begin
{
returns the location of 'My Documents' if it exists, otherwise it returns
the current directory.
}
P := nil;
try
P := AllocMem(MAX_PATH);
if SHGetFolderPath(0, CSIDL_PERSONAL, 0, 0, P) = S_OK then
Result := P
else
Result := GetCurrentDir;
finally
FreeMem(P);
end;
end;
procedure TTestBarber.FileNew1Execut e(Sender: TObject);
begin
SaveDialog.InitialDir := DefaultSaveLocation;
FFileName := SUntitled;
RichEdit1.Lines.Clear;
RichEdit1.Modified := False;
end;
procedure TTestBarber.FileOpen1Execu te(Sender: TObject);
begin
if OpenDialog.Execute then
begin
RichEdit1.Lines.LoadFromFi le(OpenDia log.FileNa me);
FFileName := OpenDialog.FileName;
RichEdit1.SetFocus;
RichEdit1.Modified := False;
RichEdit1.ReadOnly := ofReadOnly in OpenDialog.Options;
end;
end;
procedure TTestBarber.FileSave1Execu te(Sender: TObject);
begin
if (FFileName = SUntitled) or (FFileName = '') then
FileSaveAs1Execute(Sender)
else
begin
RichEdit1.Lines.SaveToFile (FFileName );
RichEdit1.Modified := False;
end;
end;
procedure TTestBarber.FileSaveAs1Exe cute(Sende r: TObject);
begin
with SaveDialog do
begin
FileName := FFileName;
if Execute then
begin
if FileExists(FileName) then
if MessageDlg(Format(SOverwri te, [FileName]),
mtConfirmation, mbYesNoCancel, 0) <> idYes then Exit;
RichEdit1.Lines.SaveToFile (FileName) ;
FFileName := FileName;
RichEdit1.Modified := False;
end;
end;
end;
procedure TTestBarber.FileSend1Execu te(Sender: TObject);
var
MapiMessage: TMapiMessage;
MError: Cardinal;
begin
with MapiMessage do
begin
ulReserved := 0;
lpszSubject := nil;
lpszNoteText := PChar(RichEdit1.Lines.Text );
lpszMessageType := nil;
lpszDateReceived := nil;
lpszConversationID := nil;
flFlags := 0;
lpOriginator := nil;
nRecipCount := 0;
lpRecips := nil;
nFileCount := 0;
lpFiles := nil;
end;
MError := MapiSendMail(0, Application.Handle, MapiMessage,
MAPI_DIALOG or MAPI_LOGON_UI or MAPI_NEW_SESSION, 0);
if MError <> 0 then MessageDlg(SSendError, mtError, [mbOK], 0);
end;
procedure TTestBarber.FileExit1Execu te(Sender: TObject);
begin
Close;
end;
procedure TTestBarber.HelpAbout1Exec ute(Sender : TObject);
begin
AboutBox.ShowModal;
end;
procedure TTestBarber.FormCreate(Sen der: TObject);
begin
FileNew1.Execute; { sets the default file name and clears the RichEdit Control }
end;
{========================= ========== ========== ========== ========== ========== ===}
PROCEDURE DoRand;
VAR
i,j,k : INTEGER;
BEGIN
k := 0;
i := Random(65535);
FOR j := 1 TO 100000*i DO
INC(k);
END;
{========================= ========== ========== ========== ========== ========== ===}
PROCEDURE Par1;
VAR
par1Par : RazorPar;
BEGIN
par1Par := RazorPar.Create;
par1Par.RunParallel('6 Rands',[DoRand,DoRand,DoRa nd,DoRand, DoRand,DoR and]);
TestBarber.RichEdit1.Lines .Add(DateT imeToStr(N ow)+' 6 Rands completed');
END;
{========================= ========== ========== ========== ========== ========== ===}
PROCEDURE Par2;
VAR
par2Par : RazorPar;
BEGIN
par2Par := RazorPar.Create;
par2Par.RunParallel('4 Rands',[DoRand,DoRand,DoRa nd,DoRand] );
TestBarber.RichEdit1.Lines .Add(DateT imeToStr(N ow)+' 4 Rands completed');
END;
{========================= ========== ========== ========== ========== ========== ===}
procedure TTestBarber.DoButtonRunCli ck(Sender: TObject);
VAR
myPar : RazorPar;
begin
Randomize;
myPar := RazorPar.Create;
myPar.RunParallel('Test Par',[Par1,Par2]);
TestBarber.RichEdit1.Lines .Add(DateT imeToStr(N ow)+' Test Par completed');
end;
{========================= ========== ========== ========== ========== ========== ===}
end.
End test program source -------------------------- --------
Begin "Barber" unit source -------------------------- --------
{========================= ========== ========== ========== ========== ========== ===}
{ Copyright (C) 2002-2004, Alan P. Burke, permission is granted for unlimited use of }
{ this source code provided the copyright notice is included }
{========================= ========== ========== ========== ========== ========== ===}
unit Barber;
{========================= ========== ========== ========== ========== ========== ===}
interface
{========================= ========== ========== ========== ========== ========== ===}
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, ComCtrls;
{========================= ========== ========== ========== ========== ========== ===}
CONST
RazorMaxPars = 100;
{========================= ========== ========== ========== ========== ========== ===}
TYPE
{ Debugging form to display RunParallel stats }
TBarberForm = class(TForm)
StatusPanelBarber: TStatusBar;
PanelBarber: TPanel;
LabeledEditParName: TLabeledEdit;
LabeledEditParCount: TLabeledEdit;
LabeledEditParsRunning: TLabeledEdit;
private
{ Private declarations }
public
{ Public declarations }
end;
RazorParProc = PROCEDURE;
RazorParThread = CLASS;
RazorPar = CLASS;
RazorParThread = class(TThread)
parent : RazorPar;
threadIndex : INTEGER;
PROCEDURE Execute; override;
END {RazorParThread};
RazorPar = CLASS(TObject)
PRIVATE
fParName : STRING;
fParCount : INTEGER;
fParsRunning : INTEGER;
procList : ARRAY [0..RazorMaxPars-1] OF RazorParProc;
threadList : ARRAY [0..RazorMaxPars-1] OF RazorParThread;
PUBLIC
PROCEDURE RunParallel(CONST ParName : STRING;
razorParProcArray : ARRAY OF RazorParProc);
END {RazorPar};
{========================= ========== ========== ========== ========== ========== ===}
implementation
{========================= ========== ========== ========== ========== ========== ===}
{$R *.dfm}
{========================= ========== ========== ========== ========== ========== ===}
procedure RazorParThread.Execute;
VAR
whichThread : INTEGER;
begin {RazorParThread.Execute}
whichThread := threadIndex;
parent.procList[whichThrea d]; {Execute the user's (possibly non-ending) proc }
DEC(parent.fParsRunning);
end {RazorParThread.Execute};
{========================= ========== ========== ========== ========== ========== ===}
PROCEDURE RazorPar.RunParallel(CONST ParName : STRING;
razorParProcArray : ARRAY OF RazorParProc);
VAR
i,j : INTEGER;
BarberForm: TBarberForm;
BEGIN {RazorPar.RunParallel}
BarberForm := TBarberForm.Create(NIL);
BarberForm.Caption := ParName;
BarberForm.Visible := TRUE;
fParName := ParName;
fParCount := HIGH(razorParProcArray) - LOW(razorParProcArray) + 1;
fParsRunning := 0;
IF BarberForm.Visible THEN WITH BarberForm DO
BEGIN
LabeledEditParName.Text := fParName;
LabeledEditParCount.Text := IntToStr(fParCount);
LabeledEditParsRunning.Tex t := IntToStr(fParsRunning);
BarberForm.Repaint;
END;
FOR i := 0 TO fParCount-1 DO
BEGIN
procList[i] := razorParProcArray[i];
threadList[i] := RazorParThread.Create(TRUE ); { Create a thread }
{threadList[i].Priority := tpLower;}
threadList[i].parent := SELF;
threadList[i].threadIndex := i;
END {FOR};
FOR i := 0 TO fParCount-1 DO
BEGIN
threadList[i].Resume; { Run the thread }
INC(fParsRunning);
IF BarberForm.Visible
THEN BEGIN
BarberForm.LabeledEditPars Running.Te xt := IntToStr(fParsRunning);
BarberForm.Repaint;
END;
END {FOR};
FOR i := 0 TO fParCount-1 DO
BEGIN { Synchronize completion }
j := threadList[i].WaitFor;
IF BarberForm.Visible
THEN BEGIN
BarberForm.LabeledEditPars Running.Te xt := IntToStr(fParsRunning);
BarberForm.Repaint;
END;
END {FOR};
FOR i := 0 TO fParCount-1 DO
BEGIN { Synchronize completion }
threadList[i].Free;
END {FOR};
BarberForm.Release;
END {RazorPar.RunParallel};
{========================= ========== ========== ========== ========== ========== ===}
end.
End "Barber" unit source -----------------------
Begin "Barber" form -----------------------
object BarberForm: TBarberForm
Left = 23
Top = 377
Width = 123
Height = 175
Caption = 'Barber - Occam'#39's Razor'
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
OldCreateOrder = False
Position = poDefaultPosOnly
PixelsPerInch = 96
TextHeight = 13
object StatusPanelBarber: TStatusBar
Left = 0
Top = 129
Width = 98
Height = 19
Panels = <>
SimplePanel = False
end
object PanelBarber: TPanel
Left = 0
Top = 0
Width = 98
Height = 129
Align = alTop
TabOrder = 1
object LabeledEditParName: TLabeledEdit
Left = 8
Top = 16
Width = 65
Height = 21
EditLabel.Width = 47
EditLabel.Height = 13
EditLabel.Caption = 'Par Name'
LabelPosition = lpAbove
LabelSpacing = 3
TabOrder = 0
end
object LabeledEditParCount: TLabeledEdit
Left = 8
Top = 56
Width = 65
Height = 21
EditLabel.Width = 47
EditLabel.Height = 13
EditLabel.Caption = 'Par Count'
LabelPosition = lpAbove
LabelSpacing = 3
TabOrder = 1
end
object LabeledEditParsRunning: TLabeledEdit
Left = 8
Top = 96
Width = 65
Height = 21
EditLabel.Width = 64
EditLabel.Height = 13
EditLabel.Caption = 'Pars Running'
LabelPosition = lpAbove
LabelSpacing = 3
TabOrder = 2
end
end
end
End "Barber" form -------------------------
Begin TestBarber form ---------------------
object TestBarber: TTestBarber
Left = 195
Top = 159
Width = 413
Height = 279
Caption = 'Test Barber RunParallel'
Color = clBtnFace
ParentFont = True
Icon.Data = {
00000100010020201000000000 00E8020000 1600000028 0000002000 00004000
00000100040000000000800200 0000000000 0000000000 0000000000 00000000
00000000800000800000008080 0080000000 8000800080 800000C0C0 C0008080
80000000FF0000FF000000FFFF 00FF000000 FF00FF00FF FF0000FFFF FF000000
00000000000000000000000080 000FF7F7F7 F7F7F7F7F7 F7F7F7F7F0 80000F7F
7F7F7F7F888888888888888088 880FF7F7F7 F7F0000000 0000000000 00080F7F
7F7F7FF0FFFFFFFFFFFFFFFFFF 080FF7F7F7 F7F0FFFF70 0000F70000 0F080F7F
7F7F7FF0FFFF7FFFF0F7FFFF0F 080FF7F7F7 F7F0FFFF77 7777F77777 7F080F7F
7F7F7FF0FFFFFFFFFFFFFFFFFF 080FF7F7F7 F7F0FFFFFF FFFFFFFFFF FF080F7F
7F7F7FF0FFFFFFFFFFFFFFFFFF 080FF7F7F7 F7F0FFFFFF FFFFFFFFFF FF080F7F
7F7F7FF0000000000000000000 080FF7F7F7 F7F0CCCCCC CCCCCC0707 07080F7F
7F7F7FF0000000000000000000 000FFFFFFF FFFFFFFFFF FFFFFFFFF0 80000000
00000000000000000000000080 000F7F7F7F 7F7F7F7F7F 7F7F7F7F70 80000F00
07F000F70007F7F7F7F7F7F080 000FFFFFFF FFFFFFFFFF FFFFFFFFF0 83B30000
0000000000000000000000008B 000CCCCCCC CCCCCCCCCC CCC0707070 80000000
00000000000000000000000080 0000000000 00000000C4 C4C0000000 00020000
0000000000004C4C4C0000000A 2A00000000 00000000C4 C400000002 A2A20000
0000000000004C00000000002A 2A00000000 0000000000 0000000000 02A20000
00000000000000000091900000 2A00000000 0000000000 0019191900 00020000
00000000000000919191919000 0000000000 0000000019 1919191919 00000000
00070000000700000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000010000 00070000
00070000000700000007000000 0000000000 0000000000 000000FFFF 0000FFFF
0000FFFF0000FFFF0000FFFF00 00FFFF0000 FFFF0000FF FF0000FFFF 0000}
Menu = MainMenu1
OldCreateOrder = False
OnCreate = FormCreate
PixelsPerInch = 96
TextHeight = 13
object StatusBar: TStatusBar
Left = 0
Top = 206
Width = 405
Height = 19
AutoHint = True
Panels = <>
SimplePanel = True
end
object RichEdit1: TRichEdit
Left = 0
Top = 40
Width = 405
Height = 166
Align = alBottom
TabOrder = 1
end
object ToolBar1: TToolBar
Left = 0
Top = 0
Width = 405
Height = 24
AutoSize = True
Caption = 'ToolBar1'
Flat = True
Images = ImageList1
TabOrder = 2
object ToolButton1: TToolButton
Left = 0
Top = 0
Action = FileNew1
ParentShowHint = False
ShowHint = True
end
object ToolButton2: TToolButton
Left = 23
Top = 0
Action = FileOpen1
ParentShowHint = False
ShowHint = True
end
object ToolButton3: TToolButton
Left = 46
Top = 0
Action = FileSave1
ParentShowHint = False
ShowHint = True
end
object ToolButton4: TToolButton
Left = 69
Top = 0
Width = 8
Caption = 'ToolButton4'
ImageIndex = 3
Style = tbsSeparator
end
object ToolButton5: TToolButton
Left = 77
Top = 0
Action = FileSend1
ParentShowHint = False
ShowHint = True
end
object ToolButton6: TToolButton
Left = 100
Top = 0
Width = 8
Caption = 'ToolButton6'
ImageIndex = 16
Style = tbsSeparator
end
object ToolButton7: TToolButton
Left = 108
Top = 0
Action = EditCut1
ParentShowHint = False
ShowHint = True
end
object ToolButton8: TToolButton
Left = 131
Top = 0
Action = EditCopy1
ParentShowHint = False
ShowHint = True
end
object ToolButton9: TToolButton
Left = 154
Top = 0
Action = EditPaste1
ParentShowHint = False
ShowHint = True
end
object ButtonRun: TButton
Left = 177
Top = 0
Width = 32
Height = 22
Caption = 'Run'
TabOrder = 0
OnClick = DoButtonRunClick
end
end
object MainMenu1: TMainMenu
Images = ImageList1
Left = 8
Top = 176
object File1: TMenuItem
Caption = '&File'
Hint = 'File related commands'
object FileNewItem: TMenuItem
Action = FileNew1
end
object FileOpenItem: TMenuItem
Action = FileOpen1
end
object FileSaveItem: TMenuItem
Action = FileSave1
end
object FileSaveAsItem: TMenuItem
Action = FileSaveAs1
end
object N1: TMenuItem
Caption = '-'
end
object FileSendItem: TMenuItem
Action = FileSend1
end
object N2: TMenuItem
Caption = '-'
end
object FileExitItem: TMenuItem
Action = FileExit1
end
end
object Edit1: TMenuItem
Caption = '&Edit'
Hint = 'Edit commands'
object CutItem: TMenuItem
Action = EditCut1
end
object CopyItem: TMenuItem
Action = EditCopy1
end
object PasteItem: TMenuItem
Action = EditPaste1
end
end
object Help1: TMenuItem
Caption = '&Help'
Hint = 'Help topics'
object HelpAboutItem: TMenuItem
Action = HelpAbout1
end
end
end
object ActionList1: TActionList
Images = ImageList1
Left = 40
Top = 176
object FileNew1: TAction
Category = 'File'
Caption = '&New'
Hint = 'New|Create a new file'
ImageIndex = 6
ShortCut = 16462
OnExecute = FileNew1Execute
end
object FileOpen1: TAction
Category = 'File'
Caption = '&Open'
Hint = 'Open|Open a file'
ImageIndex = 7
ShortCut = 16463
OnExecute = FileOpen1Execute
end
object FileSave1: TAction
Category = 'File'
Caption = '&Save'
Hint = 'Save|Save current file'
ImageIndex = 8
ShortCut = 16467
OnExecute = FileSave1Execute
end
object FileSaveAs1: TAction
Category = 'File'
Caption = 'Save &As...'
Hint = 'Save As|Save current file with different name'
OnExecute = FileSaveAs1Execute
end
object FileSend1: TAction
Category = 'File'
Caption = 'Sen&d'
Hint = 'Send|Send current file through electronic mail'
ImageIndex = 15
OnExecute = FileSend1Execute
end
object FileExit1: TAction
Category = 'File'
Caption = 'E&xit'
Hint = 'Exit|Exit application'
OnExecute = FileExit1Execute
end
object EditCut1: TEditCut
Category = 'Edit'
Caption = 'Cu&t'
Hint = 'Cut|Cuts the selection and puts it on the Clipboard'
ImageIndex = 0
ShortCut = 16472
end
object EditCopy1: TEditCopy
Category = 'Edit'
Caption = '&Copy'
Hint = 'Copy|Copies the selection and puts it on the Clipboard'
ImageIndex = 1
ShortCut = 16451
end
object EditPaste1: TEditPaste
Category = 'Edit'
Caption = '&Paste'
Hint = 'Paste|Inserts Clipboard contents'
ImageIndex = 2
ShortCut = 16470
end
object HelpAbout1: TAction
Category = 'Help'
Caption = '&About...'
Hint =
'About|Displays program information, version number, and copyrigh' +
't'
OnExecute = HelpAbout1Execute
end
end
object ImageList1: TImageList
Left = 72
Top = 176
Bitmap = {
494C0101100014000400100010 00FFFFFFFF FF10FFFFFF FFFFFFFFFF 424D3600
00000000000036000000280000 0040000000 5000000001 0020000000 00000050
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00008400000084000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00008400
0000C6C6C60084000000840000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 8400000084 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000008400 0000C6C6
C6008400000084000000840000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0084000000 8400000084 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 000000C6C6 C600C6C6
C600C6C6C600C6C6C600C6C6C6 00C6C6C600 C6C6C600C6 C6C600C6C6 C6000000
0000C6C6C60000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000084 000000C6C6 C6008400
00008400000084000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000840000 0084000000 8400000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
000000000000C6C6C600000000 0000000000 0000000084 8484008484 84008484
84008484840084848400848484 0084848400 8484840084 8484008484 84008484
84008484840084848400000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 84000000C6 C6C6008400 00008400
00008400000000000000000000 0000000000 0000000000 0000008484 8400C6C6
C600FFFFFF0084848400000000 0084000000 0000000000 0000000000 00000000
00000000840000000000000000 0000000000 00000000C6 C6C600C6C6 C600C6C6
C600C6C6C600C6C6C600C6C6C6 0000FFFF00 00FFFF0000 FFFF00C6C6 C600C6C6
C6000000000000000000000000 0000000000 0000000084 84840000FF FF000000
000000FFFF000000000000FFFF 0000000000 00FFFF0000 00000000FF FF000000
000000FFFF0084848400000000 0000000000 0000000000 0000000000 00000000
0000C6C6C600C6C6C600C6C6C6 00FFFFFF00 8484840084 0000008400 00008400
00000000000000000000000000 0000000000 0000000084 848400C6C6 C600C6C6
C600C6C6C600FFFFFF00848484 0000000000 0000000000 0000000000 00000000
84000000840000000000000000 0000000000 00000000C6 C6C600C6C6 C600C6C6
C600C6C6C600C6C6C600C6C6C6 0084848400 8484840084 848400C6C6 C600C6C6
C60000000000C6C6C600000000 0000000000 0000000084 8484000000 000000FF
FF000000000000FFFF00000000 0000FFFF00 0000000000 FFFF000000 000000FF
FF000000000084848400000000 0000000000 0000000000 0000008484 8400C6C6
C600C6C6C600C6C6C600C6C6C6 00C6C6C600 FFFFFF0084 8484000000 00000000
00000000000000000000000000 0000000000 00000000C6 C6C600C6C6 C600C6C6
C600C6C6C600C6C6C600FFFFFF 0000000000 0000000000 0000000000 84000000
84000000840000008400000084 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
000000000000C6C6C600C6C6C6 0000000000 0000000084 84840000FF FF000000
000000FFFF000000000000FFFF 0000000000 00FFFF0000 00000000FF FF000000
000000FFFF0084848400000000 0000000000 0000000000 000000C6C6 C600C6C6
C600C6C6C600C6C6C600C6C6C6 00C6C6C600 C6C6C600FF FFFF000000 00000000
00000000000000000000000000 0000000000 00000000C6 C6C600FFFF FF00FFFF
0000C6C6C600C6C6C600C6C6C6 0000000000 0000000000 0000000000 00000000
84000000840000000000000000 0000008400 00000000C6 C6C600C6C6 C600C6C6
C600C6C6C600C6C6C600C6C6C6 00C6C6C600 C6C6C600C6 C6C600C6C6 C6000000
0000C6C6C60000000000C6C6C6 0000000000 0000000084 848400FFFF FF0000FF
FF000000000000FFFF00000000 0000FFFF00 0000000000 FFFF000000 000000FF
FF000000000084848400000000 0000000000 00000000C6 C6C600C6C6 C600C6C6
C600C6C6C600C6C6C600C6C6C6 00C6C6C600 C6C6C600C6 C6C600C6C6 C6000000
00000000000000000000000000 0000000000 0000000084 848400FFFF FF00FFFF
FF00C6C6C600C6C6C600848484 0000000000 0000000000 0000000000 00000000
00000000840000000000000000 0000008400 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 0000C6C6
C60000000000C6C6C600000000 0000000000 0000000084 84840000FF FF000000
000000FFFF000000000000FFFF 0000000000 00FFFF0000 00000000FF FF000000
000000FFFF0084848400000000 0000000000 00000000C6 C6C600C6C6 C600C6C6
C600C6C6C600C6C6C600C6C6C6 00C6C6C600 C6C6C600C6 C6C600C6C6 C6000000
00000000000000000000000000 0000000000 0000000000 0000008484 8400C6C6
C600C6C6C60084848400000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000008400 0000000000 0000000000 0000FFFF
FF00FFFFFF00FFFFFF00FFFFFF 00FFFFFF00 FFFFFF00FF FFFF00FFFF FF000000
0000C6C6C60000000000C6C6C6 0000000000 0000000084 848400FFFF FF0000FF
FF000000000000FFFF00000000 0000FFFF00 0000000000 FFFF000000 000000FF
FF000000000084848400000000 0000000000 00000000C6 C6C600FFFF FF00FFFF
0000C6C6C600C6C6C600C6C6C6 00C6C6C600 C6C6C600C6 C6C600C6C6 C6000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0084000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
0000FFFFFF0000000000000000 0000000000 0000000000 000000FFFF FF000000
00000000000000000000000000 0000000000 0000000084 84840000FF FF000000
000000FFFF000000000000FFFF 0000000000 00FFFF0000 00000000FF FF000000
000000FFFF0084848400000000 0000000000 00000000C6 C6C600FFFF FF00FFFF
0000C6C6C600C6C6C600C6C6C6 00C6C6C600 C6C6C600C6 C6C600C6C6 C6000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0084000000 00000000
00000000840000000000000000 0000000000 0000000000 0000000000 00000000
0000FFFFFF00FFFFFF00FFFFFF 00FFFFFF00 FFFFFF00FF FFFF00FFFF FF00FFFF
FF000000000000000000000000 0000000000 0000000084 8484000000 000000FF
FF00FFFFFF0000FFFF00FFFFFF 0000FFFF00 FFFFFF0000 FFFF00FFFF FF0000FF
FF000000000084848400000000 0000000000 0000000000 000000FFFF FF00FFFF
FF00FFFF0000FFFF0000C6C6C6 00C6C6C600 C6C6C600C6 C6C6000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0084000000 00000000
00000000840000008400000000 0000000000 0000000000 0000000000 00000000
000000000000FFFFFF00000000 0000000000 0000000000 0000000000 0000FFFF
FF000000000000000000000000 0000000000 0000000084 8484008484 84008484
84008484840084848400848484 0084848400 8484840084 8484008484 84008484
84008484840084848400000000 0000000000 0000000000 0000008484 8400FFFF
FF00FFFFFF00FFFFFF00C6C6C6 00C6C6C600 C6C6C60084 8484000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 84000000
84000000840000008400000084 0000000000 0000000000 0000000000 00000000
000000000000FFFFFF00FFFFFF 00FFFFFF00 FFFFFF00FF FFFF00FFFF FF00FFFF
FF00FFFFFF0000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
0000C6C6C600C6C6C600C6C6C6 00C6C6C600 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000840000008400000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000840000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000084 84000084
84000000000000000000000000 0000000000 0000000000 000000C6C6 C600C6C6
C6000000000000848400000000 0000000000 00000000FF FFFF00FFFF FF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF 00FFFFFF00 FFFFFF00FF FFFF00FFFF FF000000
00000000000000000000000000 0000000000 00000000FF FFFF00FFFF FF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF 00FFFFFF00 FFFFFF00FF FFFF00FFFF FF000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000084 84000084
84000000000000000000000000 0000000000 0000000000 000000C6C6 C600C6C6
C6000000000000848400000000 0000000000 00000000FF FFFF00FFFF FF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF 00FFFFFF00 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 00000000FF FFFF000000 00000000
0000FFFFFF0000000000000000 0000000000 0000000000 000000FFFF FF000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000008400 00008400
00008400000000000000000000 0000000000 0000000000 0000000084 84000084
84000000000000000000000000 0000000000 0000000000 000000C6C6 C600C6C6
C6000000000000848400000000 0000000000 00000000FF FFFF00FFFF FF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF 0000000000 84848400C6 C6C600C6C6 C6008484
84000000000000000000000000 0000000000 00000000FF FFFF00FFFF FF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF 00FFFFFF00 FFFFFF00FF FFFF00FFFF FF000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000008400 00008400
00008400000000000000000000 0000000000 0000000000 0000000084 84000084
84000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000848400000000 0000000000 00000000FF FFFF00FFFF FF00FFFF
FF00FFFFFF00FFFFFF00000000 0084848400 C6C6C600C6 C6C600FFFF 00008484
84008484840000000000000000 0000000000 00000000FF FFFF000000 00000000
0000FFFFFF0000000000000000 0000000000 0000000000 000000FFFF FF000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000084 84000084
84000084840000848400008484 0000848400 0084840000 8484000084 84000084
84000084840000848400000000 0000000000 00000000FF FFFF00FFFF FF00FFFF
FF00FFFFFF00FFFFFF00000000 00C6C6C600 C6C6C600C6 C6C600C6C6 C6008484
8400C6C6C60000000000000000 0000000000 00000000FF FFFF00FFFF FF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF 00FFFFFF00 FFFFFF00FF FFFF00FFFF FF000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000008400 00008400
00008400000000000000000000 0000000000 0000000000 0000000084 84000084
84000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000084840000848400000000 0000000000 00000000FF FFFF00FFFF FF00FFFF
FF00FFFFFF00FFFFFF00000000 00C6C6C600 FFFF0000C6 C6C600C6C6 C6008484
8400C6C6C60000000000000000 0000000000 00000000FF FFFF00FFFF FF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF 00FFFFFF00 00000000FF FFFF00FFFF FF000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000008400 00008400
00008400000000000000000000 0000000000 0000000000 0000000084 84000000
0000C6C6C600C6C6C600C6C6C6 00C6C6C600 C6C6C600C6 C6C600C6C6 C600C6C6
C6000000000000848400000000 0000000000 00000000FF FFFF00FFFF FF00FFFF
FF00FFFFFF00FFFFFF00000000 0084848400 FFFF0000FF FF0000C6C6 C6008484
84008484840000000000000000 0000000000 00000000FF FFFF000000 00000000
0000FFFFFF00FFFFFF00FFFFFF 0000000000 C6C6C60000 000000FFFF FF000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00008400
00008400000084000000000000 0000000000 0000000000 0000000084 84000000
0000C6C6C600C6C6C600C6C6C6 00C6C6C600 C6C6C600C6 C6C600C6C6 C600C6C6
C6000000000000848400000000 0000000000 00000000FF FFFF00FFFF FF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF 0000000000 84848400C6 C6C600C6C6 C6008484
84000000000000000000000000 0000000000 00000000FF FFFF000000 0000C6C6
C60000000000FFFFFF00000000 00C6C6C600 00000000C6 C6C6000000 00000000
00000000000000000000840000 0084000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00008400000084000000840000 0000000000 0000000000 0000000084 84000000
0000C6C6C600C6C6C600C6C6C6 00C6C6C600 C6C6C600C6 C6C600C6C6 C600C6C6
C6000000000000848400000000 0000000000 00000000FF FFFF00FFFF FF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF 00FFFFFF00 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 00000000FF FFFF00FFFF FF000000
0000C6C6C60000000000C6C6C6 0000000000 C6C6C60000 000000C6C6 C600C6C6
C600C6C6C60000000000840000 0084000000 0000000000 0000000000 00000000
00000000000000000000000000 0084000000 8400000084 0000000000 00000000
00000000000084000000840000 0084000000 0000000000 0000000084 84000000
0000C6C6C600C6C6C600C6C6C6 00C6C6C600 C6C6C600C6 C6C600C6C6 C600C6C6
C6000000000000848400000000 0000000000 00000000FF FFFF00FFFF FF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF 00FFFFFF00 FFFFFF00FF FFFF00FFFF FF000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
000000000000C6C6C600000000 00C6C6C600 00000000C6 C6C600C6C6 C600C6C6
C600C6C6C600C6C6C600840000 0084000000 0000000000 0000000000 00000000
00000000000000000000000000 0084000000 8400000084 0000000000 00000000
00000000000084000000840000 0084000000 0000000000 0000000084 84000000
0000C6C6C600C6C6C600C6C6C6 00C6C6C600 C6C6C600C6 C6C600C6C6 C600C6C6
C6000000000000000000000000 0000000000 00000000FF FFFF00FFFF FF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF 00FFFFFF00 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000C6C6C6 0000000000 C6C6C600C6 C6C600C6C6 C600C6C6
C600C6C6C600C6C6C600840000 0084000000 0000000000 0000000000 00000000
00000000000000000000000000 0084000000 8400000084 0000000000 00000000
00000000000084000000840000 0084000000 0000000000 0000000084 84000000
0000C6C6C600C6C6C600C6C6C6 00C6C6C600 C6C6C600C6 C6C600C6C6 C600C6C6
C60000000000C6C6C600000000 0000000000 00000000FF FFFF00FFFF FF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF 00FFFFFF00 00000000C6 C6C6000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 00C6C6C600 C6C6C600C6 C6C600C6C6 C600C6C6
C600C6C6C60000000000840000 0084000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 8400000084 0000008400 00008400
00008400000084000000840000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 00000000FF FFFF00FFFF FF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF 00FFFFFF00 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000840000 0084000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000084 0000008400 00008400
00008400000084000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 0000FFFF
FF00FFFFFF00FFFFFF00FFFFFF 00FFFFFF00 FFFFFF00FF FFFF00FFFF FF00FFFF
FF000000000000000000000000 0000000000 0000000000 0000000084 84000084
84000084840000848400008484 0000848400 0084840000 8484000084 84000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 0000FFFF
FF00FFFFFF00FFFFFF00FFFFFF 00FFFFFF00 FFFFFF00FF FFFF00FFFF FF00FFFF
FF000000000000000000000000 0000000000 0000000000 FFFF000000 00000084
84000084840000848400008484 0000848400 0084840000 8484000084 84000084
84000000000000000000000000 0000000000 0000000000 0000000000 00008400
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 0000FFFF
FF00FFFFFF00FFFFFF00FFFFFF 00FFFFFF00 FFFFFF00FF FFFF00FFFF FF00FFFF
FF000000000000000000000000 0000000000 00000000FF FFFF0000FF FF000000
00000084840000848400008484 0000848400 0084840000 8484000084 84000084
84000084840000000000000000 0000000000 0000000000 0000000000 00008400
00000000000000000000000000 0000000000 0000000084 0000008400 00008400
00008400000084000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 0000FFFF
FF00FFFFFF00FFFFFF00FFFFFF 00FFFFFF00 FFFFFF00FF FFFF00FFFF FF00FFFF
FF000000000000000000000000 0000000000 0000000000 FFFF00FFFF FF0000FF
FF000000000000848400008484 0000848400 0084840000 8484000084 84000084
84000084840000848400000000 0000000000 0000000000 0000008400 00000000
00000000000000000000000000 0000000000 0000000000 0000008400 00008400
00008400000084000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 0000FFFF
FF00FFFFFF00FFFFFF00FFFFFF 00FFFFFF00 FFFFFF00FF FFFF00FFFF FF00FFFF
FF000000000000000000000000 0000000000 00000000FF FFFF0000FF FF00FFFF
FF0000FFFF0000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000008400 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00008400
00008400000084000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 0000FFFF
FF00FFFFFF00FFFFFF00FFFFFF 00FFFFFF00 FFFFFF00FF FFFF00FFFF FF00FFFF
FF000000000000000000000000 0000000000 0000000000 FFFF00FFFF FF0000FF
FF00FFFFFF0000FFFF00FFFFFF 0000FFFF00 FFFFFF0000 FFFF000000 00000000
00000000000000000000000000 0000000000 0000000000 0000008400 00000000
00000000000000000000000000 0000000000 0000000000 0000008400 00000000
00008400000084000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 0000FFFF
FF00FFFFFF00FFFFFF00FFFFFF 00FFFFFF00 FFFFFF00FF FFFF00FFFF FF00FFFF
FF000000000000000000000000 0000000000 00000000FF FFFF0000FF FF00FFFF
FF0000FFFF00FFFFFF0000FFFF 00FFFFFF00 00FFFF00FF FFFF000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00008400
00000000000000000000000000 0000000000 8400000084 0000000000 00000000
00000000000084000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 0000FFFF
FF00FFFFFF00FFFFFF00FFFFFF 00FFFFFF00 FFFFFF00FF FFFF00FFFF FF00FFFF
FF000000000000000000000000 0000000000 0000000000 FFFF00FFFF FF0000FF
FF000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00008400000084000000840000 0084000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 0000FFFF
FF00FFFFFF00FFFFFF00FFFFFF 00FFFFFF00 FFFFFF0000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 0000FFFF
FF00FFFFFF00FFFFFF00FFFFFF 00FFFFFF00 FFFFFF0000 000000FFFF FF000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 0000FFFF
FF00FFFFFF00FFFFFF00FFFFFF 00FFFFFF00 FFFFFF0000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000084000000840000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000840000 0084000000 8400000084 0000008400 00008400
00008400000084000000840000 0084000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00008400000000000000000000 0084000000 0000000000 0000008400 00008400
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0084000000 8400000084 0000008400 00008400
00008400000084000000840000 0084000000 0000000000 0000000000 00000000
00000000000000000000840000 00FFFFFF00 FFFFFF00FF FFFF00FFFF FF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF 0084000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00008400000000000000000000 0084000000 0000000084 0000000000 00000000
00008400000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0084000000 FFFFFF00FF FFFF00FFFF FF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF 0084000000 0000000084 8484000084 84008484
84000084840084848400840000 00FFFFFF00 0000000000 0000000000 00000000
00000000000000000000FFFFFF 0084000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00008400000000000000000000 0084000000 0000000084 0000000000 00000000
00008400000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0084000000 FFFFFF0000 0000000000 00000000
00000000000000000000FFFFFF 0084000000 0000000000 8484008484 84000084
84008484840000848400840000 00FFFFFF00 FFFFFF00FF FFFF00FFFF FF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF 0084000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000084000000840000 0084000000 0000000084 0000000000 00000000
00008400000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0084000000 FFFFFF00FF FFFF00FFFF FF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF 0084000000 0000000084 8484000084 84008484
84000084840084848400840000 00FFFFFF00 0000000000 0000000000 0000FFFF
FF008400000084000000840000 0084000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00008400000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0084000000 0000000084 0000008400 00008400
00000000000000000000000000 0000000000 0000000000 000000FFFF FF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF 0084000000 FFFFFF0000 0000000000 00000000
00000000000000000000FFFFFF 0084000000 0000000000 8484008484 84000084
84008484840000848400840000 00FFFFFF00 FFFFFF00FF FFFF00FFFF FF00FFFF
FF0084000000FFFFFF00840000 0000000000 0000000000 0000008400 00008400
00008400000084000000840000 0000000000 0000000000 0000000000 00000000
00008400000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0084000000 0000000084 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 000000FFFF FF000000
00000000000000000000000000 0084000000 FFFFFF00FF FFFF00FFFF FF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF 0084000000 0000000084 8484000084 84008484
84000084840084848400840000 00FFFFFF00 FFFFFF00FF FFFF00FFFF FF00FFFF
FF008400000084000000000000 0000000000 0000000000 0000008400 00008400
00008400000084000000000000 0000000000 0000000000 0000000000 00000000
00000000000084000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 000000FFFF FF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF 0084000000 FFFFFF0000 0000000000 0000FFFF
FF008400000084000000840000 0084000000 0000000000 8484008484 84000084
84008484840000848400840000 0084000000 8400000084 0000008400 00008400
00008400000000000000000000 0000000000 0000000000 0000008400 00008400
00008400000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000084000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 000000FFFF FF000000
00000000000000000000000000 0084000000 FFFFFF00FF FFFF00FFFF FF00FFFF
FF0084000000FFFFFF00840000 0000000000 0000000084 8484000084 84008484
84000084840084848400008484 0084848400 0084840084 8484000084 84008484
84000084840000000000000000 0000000000 0000000000 0000008400 00008400
00000000000084000000000000 0000000000 0000000000 0000000000 00000000
00000000000084000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 000000FFFF FF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF 0084000000 FFFFFF00FF FFFF00FFFF FF00FFFF
FF008400000084000000000000 0000000000 0000000000 8484008484 84000000
00000000000000000000000000 0000000000 0000000000 0000000000 00008484
84008484840000000000000000 0000000000 0000000000 0000008400 00000000
00000000000000000000840000 0084000000 0000000000 0000000000 00000000
00008400000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 000000FFFF FF000000
000000000000FFFFFF00000000 0084000000 8400000084 0000008400 00008400
00008400000000000000000000 0000000000 0000000084 8484008484 84000000
0000C6C6C600C6C6C600C6C6C6 00C6C6C600 C6C6C600C6 C6C6000000 00008484
84000084840000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 8400000084 0000008400 00008400
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 000000FFFF FF00FFFF
FF00FFFFFF00FFFFFF00000000 00FFFFFF00 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 8484008484 84000084
84000000000000FFFF00000000 0000000000 00FFFF0000 0000008484 84000084
84008484840000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 000000FFFF FF00FFFF
FF00FFFFFF00FFFFFF00000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
0000000000000000000000FFFF 0000FFFF00 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 424D3E0000 0000000000 3E000000
28000000400000005000000001 0001000000 0000800200 0000000000 00000000
000000000000000000000000FF FFFF000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 0000000000 0000000000 0000000000 00000000
00000000000000000000000000 000000FFF3 FFFFFFFFFF FFFFE1FF3F C007FFFF
FFC1FE3F8003C001FF83C07F00 018001F007 80F7000195 51C00F00E7 00018AA1
801F00C100008441801F00E600 008009000F 00F6800091 11000F81FE C0008289
000FC3BFE0018541000FFFB7E0 078001801F FFB3F00780 03801FFFC1 F003FFFF
C03FFFF3F803FFFFF0FFFFF7FF FFFFFFFFFF FFFFFFFFFF FFC001000C 000FF9FF
80010008000FF9FF8001000100 0FF3C78001 0003000F73 C780010003 000F27FF
80010003000F07C78001000300 0F00C78001 0003000F01 E380010007 000403F1
8001000F000006388001000F00 000E388001 000FF8001E 388001001F FC003F01
8001003FFE047F83FFFF007FFF FFFFFFFFFF FFFFFFFFFF FFFFFFFFFF FFFFFFFF
FFFFEFFDC007001FFFFFC7FFC0 07000FFFFF C3FBC00700 07EFFFE3F7 C0070003
EF83F1E7C0070001DFC3F8CFC0 070000DFE3 FC1FC00700 1FDFD3FE3F C007001F
EF3BFC1FC007001FF0FFF8CFC0 078FF1FFFF E1E7C00FFF F9FFFFC3F3 C01FFF75
FFFFC7FDC03FFF8FFFFFFFFFFF FFFFFFFFFF FFFFFFFFFF FFF9FFFFFF FC00FFFF
F6CFFE008000FFFFF6B7FE0000 00FFFFF6B7 FE000000FF FFF8B78000 0000FFF7
FE8F80000001C1F7FE3F800000 03C3FBFF7F 80000003C7 FBFE3F8001 0003CBFB
FEBF80030003DCF7FC9F800700 03FF0FFDDF 807F0003FF FFFDDF80FF 8007FFFF
FDDF81FFF87FFFFFFFFFFFFFFF FFFFFF0000 0000000000 0000000000 00000000
000000000000}
end
object OpenDialog: TOpenDialog
DefaultExt = 'rtf'
Filter = 'All Files (*.*)|*.*'
Left = 104
Top = 176
end
object SaveDialog: TSaveDialog
DefaultExt = 'rtf'
Filter = 'All Files (*.*)|*.*'
Left = 136
Top = 176
end
object SaveDialog1: TSaveDialog
DefaultExt = 'rtf'
Filter = 'All Files (*.*)|*.*'
Left = 136
Top = 176
end
object PopupMenu1: TPopupMenu
Images = ImageList1
Left = 168
Top = 176
object Cut1: TMenuItem
Action = EditCut1
end
object Copy1: TMenuItem
Action = EditCopy1
end
object Paste1: TMenuItem
Action = EditPaste1
end
end
end
End TestBarber form -------------------
Begin test program source -----------------
unit TestBarberMain;
interface
uses Windows, Classes, Graphics, Forms, Controls, Menus,
Dialogs, StdCtrls, Buttons, ExtCtrls, ComCtrls, ImgList, StdActns,
ActnList, ToolWin, Barber;
type
TTestBarber = class(TForm)
OpenDialog: TOpenDialog;
SaveDialog: TSaveDialog;
ActionList1: TActionList;
FileNew1: TAction;
FileOpen1: TAction;
FileSave1: TAction;
FileSaveAs1: TAction;
FileSend1: TAction;
FileExit1: TAction;
EditCut1: TEditCut;
EditCopy1: TEditCopy;
EditPaste1: TEditPaste;
HelpAbout1: TAction;
StatusBar: TStatusBar;
ImageList1: TImageList;
RichEdit1: TRichEdit;
MainMenu1: TMainMenu;
File1: TMenuItem;
FileNewItem: TMenuItem;
FileOpenItem: TMenuItem;
FileSaveItem: TMenuItem;
FileSaveAsItem: TMenuItem;
N1: TMenuItem;
FileSendItem: TMenuItem;
N2: TMenuItem;
FileExitItem: TMenuItem;
Edit1: TMenuItem;
CutItem: TMenuItem;
CopyItem: TMenuItem;
PasteItem: TMenuItem;
Help1: TMenuItem;
HelpAboutItem: TMenuItem;
SaveDialog1: TSaveDialog;
ToolBar1: TToolBar;
ToolButton1: TToolButton;
ToolButton2: TToolButton;
ToolButton3: TToolButton;
ToolButton4: TToolButton;
ToolButton5: TToolButton;
ToolButton6: TToolButton;
ToolButton7: TToolButton;
ToolButton8: TToolButton;
ToolButton9: TToolButton;
PopupMenu1: TPopupMenu;
Cut1: TMenuItem;
Copy1: TMenuItem;
Paste1: TMenuItem;
ButtonRun: TButton;
procedure FileNew1Execute(Sender: TObject);
procedure FileOpen1Execute(Sender: TObject);
procedure FileSave1Execute(Sender: TObject);
procedure FileSaveAs1Execute(Sender:
procedure FileSend1Execute(Sender: TObject);
procedure FileExit1Execute(Sender: TObject);
procedure HelpAbout1Execute(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure DoButtonRunClick(Sender: TObject);
private
FFileName: String;
public
{ Public declarations }
end;
var
TestBarber: TTestBarber;
implementation
uses
SysUtils, Mapi, about, SHFolder;
{$R *.dfm}
resourcestring
SUntitled = 'Untitled';
SOverwrite = 'OK to overwrite %s';
SSendError = 'Error sending mail';
function DefaultSaveLocation: string;
var
P: PChar;
begin
{
returns the location of 'My Documents' if it exists, otherwise it returns
the current directory.
}
P := nil;
try
P := AllocMem(MAX_PATH);
if SHGetFolderPath(0, CSIDL_PERSONAL, 0, 0, P) = S_OK then
Result := P
else
Result := GetCurrentDir;
finally
FreeMem(P);
end;
end;
procedure TTestBarber.FileNew1Execut
begin
SaveDialog.InitialDir := DefaultSaveLocation;
FFileName := SUntitled;
RichEdit1.Lines.Clear;
RichEdit1.Modified := False;
end;
procedure TTestBarber.FileOpen1Execu
begin
if OpenDialog.Execute then
begin
RichEdit1.Lines.LoadFromFi
FFileName := OpenDialog.FileName;
RichEdit1.SetFocus;
RichEdit1.Modified := False;
RichEdit1.ReadOnly := ofReadOnly in OpenDialog.Options;
end;
end;
procedure TTestBarber.FileSave1Execu
begin
if (FFileName = SUntitled) or (FFileName = '') then
FileSaveAs1Execute(Sender)
else
begin
RichEdit1.Lines.SaveToFile
RichEdit1.Modified := False;
end;
end;
procedure TTestBarber.FileSaveAs1Exe
begin
with SaveDialog do
begin
FileName := FFileName;
if Execute then
begin
if FileExists(FileName) then
if MessageDlg(Format(SOverwri
mtConfirmation, mbYesNoCancel, 0) <> idYes then Exit;
RichEdit1.Lines.SaveToFile
FFileName := FileName;
RichEdit1.Modified := False;
end;
end;
end;
procedure TTestBarber.FileSend1Execu
var
MapiMessage: TMapiMessage;
MError: Cardinal;
begin
with MapiMessage do
begin
ulReserved := 0;
lpszSubject := nil;
lpszNoteText := PChar(RichEdit1.Lines.Text
lpszMessageType := nil;
lpszDateReceived := nil;
lpszConversationID := nil;
flFlags := 0;
lpOriginator := nil;
nRecipCount := 0;
lpRecips := nil;
nFileCount := 0;
lpFiles := nil;
end;
MError := MapiSendMail(0, Application.Handle, MapiMessage,
MAPI_DIALOG or MAPI_LOGON_UI or MAPI_NEW_SESSION, 0);
if MError <> 0 then MessageDlg(SSendError, mtError, [mbOK], 0);
end;
procedure TTestBarber.FileExit1Execu
begin
Close;
end;
procedure TTestBarber.HelpAbout1Exec
begin
AboutBox.ShowModal;
end;
procedure TTestBarber.FormCreate(Sen
begin
FileNew1.Execute; { sets the default file name and clears the RichEdit Control }
end;
{=========================
PROCEDURE DoRand;
VAR
i,j,k : INTEGER;
BEGIN
k := 0;
i := Random(65535);
FOR j := 1 TO 100000*i DO
INC(k);
END;
{=========================
PROCEDURE Par1;
VAR
par1Par : RazorPar;
BEGIN
par1Par := RazorPar.Create;
par1Par.RunParallel('6 Rands',[DoRand,DoRand,DoRa
TestBarber.RichEdit1.Lines
END;
{=========================
PROCEDURE Par2;
VAR
par2Par : RazorPar;
BEGIN
par2Par := RazorPar.Create;
par2Par.RunParallel('4 Rands',[DoRand,DoRand,DoRa
TestBarber.RichEdit1.Lines
END;
{=========================
procedure TTestBarber.DoButtonRunCli
VAR
myPar : RazorPar;
begin
Randomize;
myPar := RazorPar.Create;
myPar.RunParallel('Test Par',[Par1,Par2]);
TestBarber.RichEdit1.Lines
end;
{=========================
end.
End test program source --------------------------
Begin "Barber" unit source --------------------------
{=========================
{ Copyright (C) 2002-2004, Alan P. Burke, permission is granted for unlimited use of }
{ this source code provided the copyright notice is included }
{=========================
unit Barber;
{=========================
interface
{=========================
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, ComCtrls;
{=========================
CONST
RazorMaxPars = 100;
{=========================
TYPE
{ Debugging form to display RunParallel stats }
TBarberForm = class(TForm)
StatusPanelBarber: TStatusBar;
PanelBarber: TPanel;
LabeledEditParName: TLabeledEdit;
LabeledEditParCount: TLabeledEdit;
LabeledEditParsRunning: TLabeledEdit;
private
{ Private declarations }
public
{ Public declarations }
end;
RazorParProc = PROCEDURE;
RazorParThread = CLASS;
RazorPar = CLASS;
RazorParThread = class(TThread)
parent : RazorPar;
threadIndex : INTEGER;
PROCEDURE Execute; override;
END {RazorParThread};
RazorPar = CLASS(TObject)
PRIVATE
fParName : STRING;
fParCount : INTEGER;
fParsRunning : INTEGER;
procList : ARRAY [0..RazorMaxPars-1] OF RazorParProc;
threadList : ARRAY [0..RazorMaxPars-1] OF RazorParThread;
PUBLIC
PROCEDURE RunParallel(CONST ParName : STRING;
razorParProcArray : ARRAY OF RazorParProc);
END {RazorPar};
{=========================
implementation
{=========================
{$R *.dfm}
{=========================
procedure RazorParThread.Execute;
VAR
whichThread : INTEGER;
begin {RazorParThread.Execute}
whichThread := threadIndex;
parent.procList[whichThrea
DEC(parent.fParsRunning);
end {RazorParThread.Execute};
{=========================
PROCEDURE RazorPar.RunParallel(CONST
razorParProcArray : ARRAY OF RazorParProc);
VAR
i,j : INTEGER;
BarberForm: TBarberForm;
BEGIN {RazorPar.RunParallel}
BarberForm := TBarberForm.Create(NIL);
BarberForm.Caption := ParName;
BarberForm.Visible := TRUE;
fParName := ParName;
fParCount := HIGH(razorParProcArray) - LOW(razorParProcArray) + 1;
fParsRunning := 0;
IF BarberForm.Visible THEN WITH BarberForm DO
BEGIN
LabeledEditParName.Text := fParName;
LabeledEditParCount.Text := IntToStr(fParCount);
LabeledEditParsRunning.Tex
BarberForm.Repaint;
END;
FOR i := 0 TO fParCount-1 DO
BEGIN
procList[i] := razorParProcArray[i];
threadList[i] := RazorParThread.Create(TRUE
{threadList[i].Priority := tpLower;}
threadList[i].parent := SELF;
threadList[i].threadIndex := i;
END {FOR};
FOR i := 0 TO fParCount-1 DO
BEGIN
threadList[i].Resume; { Run the thread }
INC(fParsRunning);
IF BarberForm.Visible
THEN BEGIN
BarberForm.LabeledEditPars
BarberForm.Repaint;
END;
END {FOR};
FOR i := 0 TO fParCount-1 DO
BEGIN { Synchronize completion }
j := threadList[i].WaitFor;
IF BarberForm.Visible
THEN BEGIN
BarberForm.LabeledEditPars
BarberForm.Repaint;
END;
END {FOR};
FOR i := 0 TO fParCount-1 DO
BEGIN { Synchronize completion }
threadList[i].Free;
END {FOR};
BarberForm.Release;
END {RazorPar.RunParallel};
{=========================
end.
End "Barber" unit source -----------------------
Begin "Barber" form -----------------------
object BarberForm: TBarberForm
Left = 23
Top = 377
Width = 123
Height = 175
Caption = 'Barber - Occam'#39's Razor'
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
OldCreateOrder = False
Position = poDefaultPosOnly
PixelsPerInch = 96
TextHeight = 13
object StatusPanelBarber: TStatusBar
Left = 0
Top = 129
Width = 98
Height = 19
Panels = <>
SimplePanel = False
end
object PanelBarber: TPanel
Left = 0
Top = 0
Width = 98
Height = 129
Align = alTop
TabOrder = 1
object LabeledEditParName: TLabeledEdit
Left = 8
Top = 16
Width = 65
Height = 21
EditLabel.Width = 47
EditLabel.Height = 13
EditLabel.Caption = 'Par Name'
LabelPosition = lpAbove
LabelSpacing = 3
TabOrder = 0
end
object LabeledEditParCount: TLabeledEdit
Left = 8
Top = 56
Width = 65
Height = 21
EditLabel.Width = 47
EditLabel.Height = 13
EditLabel.Caption = 'Par Count'
LabelPosition = lpAbove
LabelSpacing = 3
TabOrder = 1
end
object LabeledEditParsRunning: TLabeledEdit
Left = 8
Top = 96
Width = 65
Height = 21
EditLabel.Width = 64
EditLabel.Height = 13
EditLabel.Caption = 'Pars Running'
LabelPosition = lpAbove
LabelSpacing = 3
TabOrder = 2
end
end
end
End "Barber" form -------------------------
Begin TestBarber form ---------------------
object TestBarber: TTestBarber
Left = 195
Top = 159
Width = 413
Height = 279
Caption = 'Test Barber RunParallel'
Color = clBtnFace
ParentFont = True
Icon.Data = {
00000100010020201000000000
00000100040000000000800200
00000000800000800000008080
80000000FF0000FF000000FFFF
00000000000000000000000080
7F7F7F7F888888888888888088
7F7F7FF0FFFFFFFFFFFFFFFFFF
7F7F7FF0FFFF7FFFF0F7FFFF0F
7F7F7FF0FFFFFFFFFFFFFFFFFF
7F7F7FF0FFFFFFFFFFFFFFFFFF
7F7F7FF0000000000000000000
7F7F7FF0000000000000000000
00000000000000000000000080
07F000F70007F7F7F7F7F7F080
0000000000000000000000008B
00000000000000000000000080
0000000000004C4C4C0000000A
0000000000004C00000000002A
00000000000000000091900000
00000000000000919191919000
00070000000700000000000000
00000000000000000000000000
00070000000700000007000000
0000FFFF0000FFFF0000FFFF00
Menu = MainMenu1
OldCreateOrder = False
OnCreate = FormCreate
PixelsPerInch = 96
TextHeight = 13
object StatusBar: TStatusBar
Left = 0
Top = 206
Width = 405
Height = 19
AutoHint = True
Panels = <>
SimplePanel = True
end
object RichEdit1: TRichEdit
Left = 0
Top = 40
Width = 405
Height = 166
Align = alBottom
TabOrder = 1
end
object ToolBar1: TToolBar
Left = 0
Top = 0
Width = 405
Height = 24
AutoSize = True
Caption = 'ToolBar1'
Flat = True
Images = ImageList1
TabOrder = 2
object ToolButton1: TToolButton
Left = 0
Top = 0
Action = FileNew1
ParentShowHint = False
ShowHint = True
end
object ToolButton2: TToolButton
Left = 23
Top = 0
Action = FileOpen1
ParentShowHint = False
ShowHint = True
end
object ToolButton3: TToolButton
Left = 46
Top = 0
Action = FileSave1
ParentShowHint = False
ShowHint = True
end
object ToolButton4: TToolButton
Left = 69
Top = 0
Width = 8
Caption = 'ToolButton4'
ImageIndex = 3
Style = tbsSeparator
end
object ToolButton5: TToolButton
Left = 77
Top = 0
Action = FileSend1
ParentShowHint = False
ShowHint = True
end
object ToolButton6: TToolButton
Left = 100
Top = 0
Width = 8
Caption = 'ToolButton6'
ImageIndex = 16
Style = tbsSeparator
end
object ToolButton7: TToolButton
Left = 108
Top = 0
Action = EditCut1
ParentShowHint = False
ShowHint = True
end
object ToolButton8: TToolButton
Left = 131
Top = 0
Action = EditCopy1
ParentShowHint = False
ShowHint = True
end
object ToolButton9: TToolButton
Left = 154
Top = 0
Action = EditPaste1
ParentShowHint = False
ShowHint = True
end
object ButtonRun: TButton
Left = 177
Top = 0
Width = 32
Height = 22
Caption = 'Run'
TabOrder = 0
OnClick = DoButtonRunClick
end
end
object MainMenu1: TMainMenu
Images = ImageList1
Left = 8
Top = 176
object File1: TMenuItem
Caption = '&File'
Hint = 'File related commands'
object FileNewItem: TMenuItem
Action = FileNew1
end
object FileOpenItem: TMenuItem
Action = FileOpen1
end
object FileSaveItem: TMenuItem
Action = FileSave1
end
object FileSaveAsItem: TMenuItem
Action = FileSaveAs1
end
object N1: TMenuItem
Caption = '-'
end
object FileSendItem: TMenuItem
Action = FileSend1
end
object N2: TMenuItem
Caption = '-'
end
object FileExitItem: TMenuItem
Action = FileExit1
end
end
object Edit1: TMenuItem
Caption = '&Edit'
Hint = 'Edit commands'
object CutItem: TMenuItem
Action = EditCut1
end
object CopyItem: TMenuItem
Action = EditCopy1
end
object PasteItem: TMenuItem
Action = EditPaste1
end
end
object Help1: TMenuItem
Caption = '&Help'
Hint = 'Help topics'
object HelpAboutItem: TMenuItem
Action = HelpAbout1
end
end
end
object ActionList1: TActionList
Images = ImageList1
Left = 40
Top = 176
object FileNew1: TAction
Category = 'File'
Caption = '&New'
Hint = 'New|Create a new file'
ImageIndex = 6
ShortCut = 16462
OnExecute = FileNew1Execute
end
object FileOpen1: TAction
Category = 'File'
Caption = '&Open'
Hint = 'Open|Open a file'
ImageIndex = 7
ShortCut = 16463
OnExecute = FileOpen1Execute
end
object FileSave1: TAction
Category = 'File'
Caption = '&Save'
Hint = 'Save|Save current file'
ImageIndex = 8
ShortCut = 16467
OnExecute = FileSave1Execute
end
object FileSaveAs1: TAction
Category = 'File'
Caption = 'Save &As...'
Hint = 'Save As|Save current file with different name'
OnExecute = FileSaveAs1Execute
end
object FileSend1: TAction
Category = 'File'
Caption = 'Sen&d'
Hint = 'Send|Send current file through electronic mail'
ImageIndex = 15
OnExecute = FileSend1Execute
end
object FileExit1: TAction
Category = 'File'
Caption = 'E&xit'
Hint = 'Exit|Exit application'
OnExecute = FileExit1Execute
end
object EditCut1: TEditCut
Category = 'Edit'
Caption = 'Cu&t'
Hint = 'Cut|Cuts the selection and puts it on the Clipboard'
ImageIndex = 0
ShortCut = 16472
end
object EditCopy1: TEditCopy
Category = 'Edit'
Caption = '&Copy'
Hint = 'Copy|Copies the selection and puts it on the Clipboard'
ImageIndex = 1
ShortCut = 16451
end
object EditPaste1: TEditPaste
Category = 'Edit'
Caption = '&Paste'
Hint = 'Paste|Inserts Clipboard contents'
ImageIndex = 2
ShortCut = 16470
end
object HelpAbout1: TAction
Category = 'Help'
Caption = '&About...'
Hint =
'About|Displays program information, version number, and copyrigh' +
't'
OnExecute = HelpAbout1Execute
end
end
object ImageList1: TImageList
Left = 72
Top = 176
Bitmap = {
494C0101100014000400100010
00000000000036000000280000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00008400000084000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
0000C6C6C60084000000840000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
C6008400000084000000840000
00000000000000000000000000
00000000000000000000000000
C600C6C6C600C6C6C600C6C6C6
0000C6C6C60000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00008400000084000000000000
00000000000000000000840000
00000000000000000000000000
00000000000000000000000000
000000000000C6C6C600000000
84008484840084848400848484
84008484840084848400000000
00000000000000000000000000
00008400000000000000000000
C600FFFFFF0084848400000000
00000000840000000000000000
C600C6C6C600C6C6C600C6C6C6
C6000000000000000000000000
000000FFFF000000000000FFFF
000000FFFF0084848400000000
0000C6C6C600C6C6C600C6C6C6
00000000000000000000000000
C600C6C6C600FFFFFF00848484
84000000840000000000000000
C600C6C6C600C6C6C600C6C6C6
C60000000000C6C6C600000000
FF000000000000FFFF00000000
FF000000000084848400000000
C600C6C6C600C6C6C600C6C6C6
00000000000000000000000000
C600C6C6C600C6C6C600FFFFFF
84000000840000008400000084
00000000000000000000000000
000000000000C6C6C600C6C6C6
000000FFFF000000000000FFFF
000000FFFF0084848400000000
C600C6C6C600C6C6C600C6C6C6
00000000000000000000000000
0000C6C6C600C6C6C600C6C6C6
84000000840000000000000000
C600C6C6C600C6C6C600C6C6C6
0000C6C6C60000000000C6C6C6
FF000000000000FFFF00000000
FF000000000084848400000000
C600C6C6C600C6C6C600C6C6C6
00000000000000000000000000
FF00C6C6C600C6C6C600848484
00000000840000000000000000
00000000000000000000000000
C60000000000C6C6C600000000
000000FFFF000000000000FFFF
000000FFFF0084848400000000
C600C6C6C600C6C6C600C6C6C6
00000000000000000000000000
C600C6C6C60084848400000000
00000000000000000000000000
FF00FFFFFF00FFFFFF00FFFFFF
0000C6C6C60000000000C6C6C6
FF000000000000FFFF00000000
FF000000000084848400000000
0000C6C6C600C6C6C600C6C6C6
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
0000FFFFFF0000000000000000
00000000000000000000000000
000000FFFF000000000000FFFF
000000FFFF0084848400000000
0000C6C6C600C6C6C600C6C6C6
00000000000000000000000000
00000000000000000000000000
00000000840000000000000000
0000FFFFFF00FFFFFF00FFFFFF
FF000000000000000000000000
FF00FFFFFF0000FFFF00FFFFFF
FF000000000084848400000000
FF00FFFF0000FFFF0000C6C6C6
00000000000000000000000000
00000000000000000000000000
00000000840000008400000000
000000000000FFFFFF00000000
FF000000000000000000000000
84008484840084848400848484
84008484840084848400000000
FF00FFFFFF00FFFFFF00C6C6C6
00000000000000000000000000
00000000000000000000000000
84000000840000008400000084
000000000000FFFFFF00FFFFFF
FF00FFFFFF0000000000000000
00000000000000000000000000
00000000000000000000000000
0000C6C6C600C6C6C600C6C6C6
00000000000000000000000000
00000000000000000000000000
00000000840000008400000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000840000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
84000000000000000000000000
C6000000000000848400000000
FF00FFFFFF00FFFFFF00FFFFFF
00000000000000000000000000
FF00FFFFFF00FFFFFF00FFFFFF
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
84000000000000000000000000
C6000000000000848400000000
FF00FFFFFF00FFFFFF00FFFFFF
00000000000000000000000000
0000FFFFFF0000000000000000
00000000000000000000000000
00000000000000000000000000
00008400000000000000000000
84000000000000000000000000
C6000000000000848400000000
FF00FFFFFF00FFFFFF00FFFFFF
84000000000000000000000000
FF00FFFFFF00FFFFFF00FFFFFF
00000000000000000000000000
00000000000000000000000000
00008400000000000000000000
84000000000000000000000000
00000000000000848400000000
FF00FFFFFF00FFFFFF00000000
84008484840000000000000000
0000FFFFFF0000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
84000084840000848400008484
84000084840000848400000000
FF00FFFFFF00FFFFFF00000000
8400C6C6C60000000000000000
FF00FFFFFF00FFFFFF00FFFFFF
00000000000000000000000000
00000000000000000000000000
00008400000000000000000000
84000000000000000000000000
00000084840000848400000000
FF00FFFFFF00FFFFFF00000000
8400C6C6C60000000000000000
FF00FFFFFF00FFFFFF00FFFFFF
00000000000000000000000000
00000000000000000000000000
00008400000000000000000000
0000C6C6C600C6C6C600C6C6C6
C6000000000000848400000000
FF00FFFFFF00FFFFFF00000000
84008484840000000000000000
0000FFFFFF00FFFFFF00FFFFFF
00000000000000000000000000
00000000000000000000000000
00008400000084000000000000
0000C6C6C600C6C6C600C6C6C6
C6000000000000848400000000
FF00FFFFFF00FFFFFF00FFFFFF
84000000000000000000000000
C60000000000FFFFFF00000000
00000000000000000000840000
00000000000000000000000000
00008400000084000000840000
0000C6C6C600C6C6C600C6C6C6
C6000000000000848400000000
FF00FFFFFF00FFFFFF00FFFFFF
00000000000000000000000000
0000C6C6C60000000000C6C6C6
C600C6C6C60000000000840000
00000000000000000000000000
00000000000084000000840000
0000C6C6C600C6C6C600C6C6C6
C6000000000000848400000000
FF00FFFFFF00FFFFFF00FFFFFF
00000000000000000000000000
000000000000C6C6C600000000
C600C6C6C600C6C6C600840000
00000000000000000000000000
00000000000084000000840000
0000C6C6C600C6C6C600C6C6C6
C6000000000000000000000000
FF00FFFFFF00FFFFFF00FFFFFF
00000000000000000000000000
00000000000000000000C6C6C6
C600C6C6C600C6C6C600840000
00000000000000000000000000
00000000000084000000840000
0000C6C6C600C6C6C600C6C6C6
C60000000000C6C6C600000000
FF00FFFFFF00FFFFFF00FFFFFF
00000000000000000000000000
00000000000000000000000000
C600C6C6C60000000000840000
00000000000000000000000000
00008400000084000000840000
00000000000000000000000000
00000000000000000000000000
FF00FFFFFF00FFFFFF00FFFFFF
00000000000000000000000000
00000000000000000000000000
00000000000000000000840000
00000000000000000000000000
00008400000084000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
FF00FFFFFF00FFFFFF00FFFFFF
FF000000000000000000000000
84000084840000848400008484
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
FF00FFFFFF00FFFFFF00FFFFFF
FF000000000000000000000000
84000084840000848400008484
84000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
FF00FFFFFF00FFFFFF00FFFFFF
FF000000000000000000000000
00000084840000848400008484
84000084840000000000000000
00000000000000000000000000
00008400000084000000000000
00000000000000000000000000
00000000000000000000000000
FF00FFFFFF00FFFFFF00FFFFFF
FF000000000000000000000000
FF000000000000848400008484
84000084840000848400000000
00000000000000000000000000
00008400000084000000000000
00000000000000000000000000
00000000000000000000000000
FF00FFFFFF00FFFFFF00FFFFFF
FF000000000000000000000000
FF0000FFFF0000000000000000
00000000000000000000000000
00000000000000000000000000
00008400000084000000000000
00000000000000000000000000
00000000000000000000000000
FF00FFFFFF00FFFFFF00FFFFFF
FF000000000000000000000000
FF00FFFFFF0000FFFF00FFFFFF
00000000000000000000000000
00000000000000000000000000
00008400000084000000000000
00000000000000000000000000
00000000000000000000000000
FF00FFFFFF00FFFFFF00FFFFFF
FF000000000000000000000000
FF0000FFFF00FFFFFF0000FFFF
00000000000000000000000000
00000000000000000000000000
00000000000084000000000000
00000000000000000000000000
00000000000000000000000000
FF00FFFFFF00FFFFFF00FFFFFF
FF000000000000000000000000
FF000000000000000000000000
00000000000000000000000000
00008400000084000000840000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
FF00FFFFFF00FFFFFF00FFFFFF
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
FF00FFFFFF00FFFFFF00FFFFFF
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
FF00FFFFFF00FFFFFF00FFFFFF
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000084000000840000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000840000
00008400000084000000840000
00000000000000000000000000
00000000000000000000000000
00008400000000000000000000
00000000000000000000000000
00000000000000000000000000
00008400000084000000840000
00000000000000000000840000
FF00FFFFFF00FFFFFF00FFFFFF
00000000000000000000000000
00000000000000000000000000
00008400000000000000000000
00008400000000000000000000
00000000000000000000000000
FF00FFFFFF00FFFFFF00FFFFFF
84000084840084848400840000
00000000000000000000FFFFFF
00000000000000000000000000
00000000000000000000000000
00008400000000000000000000
00008400000000000000000000
00000000000000000000000000
00000000000000000000FFFFFF
84008484840000848400840000
FF00FFFFFF00FFFFFF00FFFFFF
00000000000000000000000000
00000000000000000000000000
00000000000084000000840000
00008400000000000000000000
00000000000000000000000000
FF00FFFFFF00FFFFFF00FFFFFF
84000084840084848400840000
FF008400000084000000840000
00000000000000000000000000
00008400000000000000000000
00000000000000000000000000
00000000000000000000000000
FF00FFFFFF00FFFFFF00FFFFFF
00000000000000000000FFFFFF
84008484840000848400840000
FF0084000000FFFFFF00840000
00008400000084000000840000
00008400000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
FF00FFFFFF00FFFFFF00FFFFFF
84000084840084848400840000
FF008400000084000000000000
00008400000084000000000000
00000000000084000000000000
00000000000000000000000000
00000000000000000000000000
FF00FFFFFF00FFFFFF00FFFFFF
FF008400000084000000840000
84008484840000848400840000
00008400000000000000000000
00008400000000000000000000
00000000000084000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
FF0084000000FFFFFF00840000
84000084840084848400008484
84000084840000000000000000
00000000000084000000000000
00000000000084000000000000
00000000000000000000000000
00000000000000000000000000
FF00FFFFFF00FFFFFF00FFFFFF
FF008400000084000000000000
00000000000000000000000000
84008484840000000000000000
00000000000000000000840000
00008400000000000000000000
00000000000000000000000000
00000000000000000000000000
000000000000FFFFFF00000000
00008400000000000000000000
0000C6C6C600C6C6C600C6C6C6
84000084840000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
FF00FFFFFF00FFFFFF00000000
00000000000000000000000000
84000000000000FFFF00000000
84008484840000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
FF00FFFFFF00FFFFFF00000000
00000000000000000000000000
0000000000000000000000FFFF
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
28000000400000005000000001
000000000000000000000000FF
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
00000000000000000000000000
FFC1FE3F8003C001FF83C07F00
801F00C100008441801F00E600
000FC3BFE0018541000FFFB7E0
C03FFFF3F803FFFFF0FFFFF7FF
80010008000FF9FF8001000100
80010003000F07C78001000300
8001000F000006388001000F00
8001003FFE047F83FFFF007FFF
FFFFEFFDC007001FFFFFC7FFC0
EF83F1E7C0070001DFC3F8CFC0
EF3BFC1FC007001FF0FFF8CFC0
FFFFC7FDC03FFF8FFFFFFFFFFF
F6CFFE008000FFFFF6B7FE0000
FE8F80000001C1F7FE3F800000
FEBF80030003DCF7FC9F800700
FDDF81FFF87FFFFFFFFFFFFFFF
000000000000}
end
object OpenDialog: TOpenDialog
DefaultExt = 'rtf'
Filter = 'All Files (*.*)|*.*'
Left = 104
Top = 176
end
object SaveDialog: TSaveDialog
DefaultExt = 'rtf'
Filter = 'All Files (*.*)|*.*'
Left = 136
Top = 176
end
object SaveDialog1: TSaveDialog
DefaultExt = 'rtf'
Filter = 'All Files (*.*)|*.*'
Left = 136
Top = 176
end
object PopupMenu1: TPopupMenu
Images = ImageList1
Left = 168
Top = 176
object Cut1: TMenuItem
Action = EditCut1
end
object Copy1: TMenuItem
Action = EditCopy1
end
object Paste1: TMenuItem
Action = EditPaste1
end
end
end
End TestBarber form -------------------
Please note that "Barber" breaks the rules about using "Synchronize". If I were going to do something "real" with this, that's the first thing I'd fix (blush).
Alan
Alan
ASKER
Checking the code will comment / accept soon.
Thank you very much
Thank you very much
ASKER
thanks allot for the extra 500 points look for a new question by me Using Threads, Payment
Shane