Check-in [c6e0ad17ef]
Not logged in

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Overview
Comment:Added activity form, including attachment handling. Added date range selection to list of activities. Renamed controls to English. Added button on projects list to view activities and reports. Disabled platform warnings.
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA1: c6e0ad17ef0ba73a1c8dbfa40bf361731ad10e5d
User & Date: MCO 2014-07-28 14:24:11
Context
2014-07-28
14:49
Updated dislpay of duration. check-in: 73d0f24a3d user: MCO tags: trunk
14:24
Added activity form, including attachment handling. Added date range selection to list of activities. Renamed controls to English. Added button on projects list to view activities and reports. Disabled platform warnings. check-in: c6e0ad17ef user: MCO tags: trunk
2014-07-09
17:18
Kept a reference to M_Main in the DPR, to prevent errors in the IDE. Added prototype for database-persistence of a class. check-in: ca9a02c2ab user: MCO tags: trunk
Changes

Changes to Olam/src/F_Activities.dfm.

844
845
846
847
848
849
850

851
852
853
854
855
856
857
858
859
860






861
862































863
864
865
866
867
868
869

870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901

902
903
904
905
906

907
908
909
910

911
912
913
914
915
916
917
...
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951













952

    000000070000E000000000070000E000000000070000E000000000070000E000
    000000070000E000000000070000E000000000070000E000000000070000E000
    000000070000E000000000070000E000000000070000E000000000070000E000
    000000070000E000000000070000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFF
    FFFFFFFF0000}
  OldCreateOrder = False
  Position = poOwnerFormCenter

  PixelsPerInch = 96
  TextHeight = 13
  object pnlFilter: TPanel
    Left = 0
    Top = 0
    Width = 634
    Height = 41
    Align = alTop
    BevelOuter = bvNone
    TabOrder = 0






  end
  object Panel1: TPanel































    Left = 0
    Top = 41
    Width = 634
    Height = 469
    Align = alClient
    BevelOuter = bvNone
    TabOrder = 1

    DesignSize = (
      634
      469)
    object lvwActivities: TListView
      Left = 8
      Top = 0
      Width = 497
      Height = 457
      Anchors = [akLeft, akTop, akRight, akBottom]
      Columns = <
        item
          Caption = 'Start'
          ImageIndex = 1813
          Width = 75
        end
        item
          Alignment = taRightJustify
          Caption = 'Finish'
          ImageIndex = 1814
          Width = 70
        end
        item
          Caption = 'Project'
          ImageIndex = 125
          Width = 100
        end
        item
          Caption = 'Description'
          ImageIndex = 1659
          Width = 250
        end
        item

          Caption = 'Phase'
          ImageIndex = 100
          Width = 75
        end
        item

          Caption = 'Duration'
          ImageIndex = 1810
          Width = 75
        end>

      MultiSelect = True
      GroupHeaderImages = dmMain.imlMain
      GroupView = True
      ReadOnly = True
      RowSelect = True
      SmallImages = dmMain.imlMain
      StateImages = dmMain.imlMain
................................................................................
      Width = 115
      Height = 34
      Action = dmMain.actActivityEdit
      Anchors = [akTop, akRight]
      Images = dmMain.imlMain
      TabOrder = 2
    end
    object Button1: TButton
      Left = 511
      Top = 79
      Width = 115
      Height = 34
      Action = dmMain.actActivityDelete
      Anchors = [akTop, akRight]
      Images = dmMain.imlMain
      TabOrder = 3
    end
  end













end








>










>
>
>
>
>
>
|
<
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>







>













|



|

|









|


>


|


>




>







 







|










>
>
>
>
>
>
>
>
>
>
>
>
>
|
>
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868

869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
...
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
    000000070000E000000000070000E000000000070000E000000000070000E000
    000000070000E000000000070000E000000000070000E000000000070000E000
    000000070000E000000000070000E000000000070000E000000000070000E000
    000000070000E000000000070000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFF
    FFFFFFFF0000}
  OldCreateOrder = False
  Position = poOwnerFormCenter
  OnCreate = FormCreate
  PixelsPerInch = 96
  TextHeight = 13
  object pnlFilter: TPanel
    Left = 0
    Top = 0
    Width = 634
    Height = 41
    Align = alTop
    BevelOuter = bvNone
    TabOrder = 0
    object lblFrom: TLabel
      Left = 10
      Top = 14
      Width = 88
      Height = 13
      Caption = 'Activities between'
    end

    object lblUntil: TLabel
      Left = 239
      Top = 14
      Width = 24
      Height = 13
      Caption = ' and '
    end
    object dtpFrom: TDateTimePicker
      Left = 104
      Top = 8
      Width = 129
      Height = 21
      Date = 41848.000000000000000000
      Time = 41848.000000000000000000
      ShowCheckbox = True
      TabOrder = 0
      OnEnter = dtpFromEnter
    end
    object dtpUntil: TDateTimePicker
      Left = 269
      Top = 8
      Width = 124
      Height = 21
      Date = 41848.000000000000000000
      Time = 41848.000000000000000000
      ShowCheckbox = True
      TabOrder = 1
      OnEnter = dtpUntilEnter
    end
  end
  object pnlList: TPanel
    Left = 0
    Top = 41
    Width = 634
    Height = 469
    Align = alClient
    BevelOuter = bvNone
    TabOrder = 1
    ExplicitTop = 35
    DesignSize = (
      634
      469)
    object lvwActivities: TListView
      Left = 8
      Top = 0
      Width = 497
      Height = 457
      Anchors = [akLeft, akTop, akRight, akBottom]
      Columns = <
        item
          Caption = 'Start'
          ImageIndex = 1813
          Width = 65
        end
        item
          Alignment = taRightJustify
          Caption = 'Stop'
          ImageIndex = 1814
          Width = 65
        end
        item
          Caption = 'Project'
          ImageIndex = 125
          Width = 100
        end
        item
          Caption = 'Description'
          ImageIndex = 1659
          Width = 175
        end
        item
          Alignment = taCenter
          Caption = 'Phase'
          ImageIndex = 100
          Width = 70
        end
        item
          Alignment = taRightJustify
          Caption = 'Duration'
          ImageIndex = 1810
          Width = 75
        end>
      ColumnClick = False
      MultiSelect = True
      GroupHeaderImages = dmMain.imlMain
      GroupView = True
      ReadOnly = True
      RowSelect = True
      SmallImages = dmMain.imlMain
      StateImages = dmMain.imlMain
................................................................................
      Width = 115
      Height = 34
      Action = dmMain.actActivityEdit
      Anchors = [akTop, akRight]
      Images = dmMain.imlMain
      TabOrder = 2
    end
    object btnDelete: TButton
      Left = 511
      Top = 79
      Width = 115
      Height = 34
      Action = dmMain.actActivityDelete
      Anchors = [akTop, akRight]
      Images = dmMain.imlMain
      TabOrder = 3
    end
  end
  object calWeek: TMonthCalendar
    Left = 104
    Top = 33
    Width = 191
    Height = 160
    BorderWidth = 1
    Date = 41848.533148935190000000
    TabOrder = 2
    TabStop = True
    Visible = False
    WeekNumbers = True
    OnExit = calWeekExit
    OnGetMonthInfo = calWeekGetMonthInfo
  end
end

Changes to Olam/src/F_Activities.pas.

6
7
8
9
10
11
12
13
14
15
16
17











18
19
20
21
22
23
24
25
26
27


28
29
30















































































































































31
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs,
  M_Main, Vcl.StdCtrls, Vcl.ComCtrls, Vcl.ExtCtrls;

type
  TfrmActivities = class(TForm)
    pnlFilter: TPanel;
    Panel1: TPanel;
    lvwActivities: TListView;
    btnAdd: TButton;
    btnEdit: TButton;
    Button1: TButton;











  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  frmActivities: TfrmActivities;

implementation



{$R *.dfm}
















































































































































end.







|



|
>
>
>
>
>
>
>
>
>
>
>










>
>



>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>

6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs,
  M_Main, Vcl.StdCtrls, Vcl.ComCtrls, Vcl.ExtCtrls;

type
  TfrmActivities = class(TForm)
    pnlFilter: TPanel;
    pnlList: TPanel;
    lvwActivities: TListView;
    btnAdd: TButton;
    btnEdit: TButton;
    btnDelete: TButton;
    lblFrom: TLabel;
    dtpFrom: TDateTimePicker;
    lblUntil: TLabel;
    dtpUntil: TDateTimePicker;
    calWeek: TMonthCalendar;
    procedure FormCreate(Sender: TObject);
    procedure dtpFromEnter(Sender: TObject);
    procedure dtpUntilEnter(Sender: TObject);
    procedure calWeekGetMonthInfo(Sender: TObject; Month: Cardinal;
      var MonthBoldInfo: Cardinal);
    procedure calWeekExit(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  frmActivities: TfrmActivities;

implementation
uses
  CommCtrl, DateUtils;

{$R *.dfm}

{ ---------------------------------------------------------------------------- }
procedure TfrmActivities.FormCreate(Sender: TObject);
const
  DTM_GETMCSTYLE = (DTM_FIRST + 12);
  DTM_SETMCSTYLE = (DTM_FIRST + 11);
  MCS_NOTRAILINGDATES = $0040;
  MCS_SHORTDAYSOFWEEK = $0080;
  MCS_NOSELCHANGEONNAV = $0100;
var
  style{, prevstyle}: LResult;
var
  Item: TListItem;
  i: Integer;
begin
  // Adjust the TDateTimePickers so they also show week numbers
  style := SendMessage(dtpFrom.Handle, DTM_GETMCSTYLE, 0, 0);
  style := style or {MCS_DAYSTATE or} MCS_WEEKNUMBERS or MCS_NOSELCHANGEONNAV;
  {prevstyle := }SendMessage(dtpFrom.Handle, DTM_SETMCSTYLE, 0, style);
  style := SendMessage(dtpUntil.Handle, DTM_GETMCSTYLE, 0, 0);
  style := style or {MCS_DAYSTATE or} MCS_WEEKNUMBERS or MCS_NOSELCHANGEONNAV;
  {prevstyle := }SendMessage(dtpUntil.Handle, DTM_SETMCSTYLE, 0, style);

  dtpFrom.MaxDate := Date;
  dtpFrom.Date := Date;
  dtpUntil.MinDate := Date;
  dtpUntil.MaxDate := Date;
  dtpUntil.Date := Date;


  // TODO: add a week combo, which drops down a TMonthCalendar (with the current
  //  week highlighted, or in bold)


  // TODO: TEMP
  // TODO: move this to a PopulateList method; which gets called on first show,
  //  then consequently after each update of the date range
  lvwActivities.GroupView := dtpFrom.Date <> dtpUntil.Date;
  for i := Trunc(dtpUntil.Date) downto Trunc(dtpFrom.Date) do
    lvwActivities.Groups.Add.Header := FormatDateTime('dddd d mmmm yyyy', i);

  Item := lvwActivities.Items.Add;
  Item.GroupID := lvwActivities.Groups[0].GroupID;
  Item.ImageIndex := -1;
  Item.Caption := '7:58';
  Item.SubItems.Add('9:15');
  Item.SubItems.Add('(intern)');
//  Item.SubItemImages[1] := 0;
  Item.SubItems.Add('Uren bijwerken');
  Item.SubItems.Add('INTERN.00');
  Item.SubItems.Add('00:17');

  Item := lvwActivities.Items.Add;
  Item.GroupID := lvwActivities.Groups[0].GroupID;
  Item.ImageIndex := -1;
  Item.Caption := '9:15';
  Item.SubItems.Add('...');
  Item.SubItems.Add('WS-VEL');
//  Item.SubItemImages[1] := 30;
  Item.SubItems.Add('Import XML V3');
  Item.SubItems.Add('20131129.02');
  Item.SubItems.Add(FormatDateTime('hh:nn', Now - (Date + EncodeTime(9, 15, 0, 0))));

  for i := 0 to lvwActivities.Columns.Count - 1 do
    lvwActivities.Column[i].Width := -2;
  // TODO: TEMP
end {TfrmActivities.FormCreate};

{ ---------------------------------------------------------------------------- }
procedure TfrmActivities.calWeekExit(Sender: TObject);
begin
//  TODO: btnWeek.Caption := 'Week ' + IntToStr(WeekOf(calWeek.Date));
  calWeek.Visible := False;
end {TfrmActivities.calWeekExit};

{ ---------------------------------------------------------------------------- }
procedure TfrmActivities.calWeekGetMonthInfo(Sender: TObject; Month: Cardinal;
  var MonthBoldInfo: Cardinal);
var
  Days: array of Cardinal;
  Year: Word;
  WeekYear, WeekMonth: Word;
  d: Integer;
  DayCount: Integer;
begin

  // TODO: test this code thoroughly!

  Year := YearOf(calWeek.Date);

  WeekOfTheYear(Date, WeekYear);
  WeekMonth := MonthOf(Date);

  DayCount := 0;
  if (Year = WeekYear) and (Month = WeekMonth) then begin
    SetLength(Days, 7);
    for d := Trunc(StartOfTheWeek(Date)) to Trunc(EndOfTheWeek(Date)) do begin
      if MonthOf(d) = Month then begin
        Days[DayCount] := DayOf(d);
        Inc(DayCount);
      end;
    end;
  end;
  if DayCount > 0 then begin
    SetLength(Days, DayCount);
    calWeek.BoldDays(Days, MonthBoldInfo);
  end else begin
    MonthBoldInfo := 0;
  end;
end {TfrmActivities.calWeekGetMonthInfo};

{ ---------------------------------------------------------------------------- }
procedure TfrmActivities.dtpFromEnter(Sender: TObject);
var
  style, prevstyle: LResult;
begin
  if dtpUntil.Checked and (dtpUntil.Date < Date) then begin
    dtpFrom.MaxDate := dtpUntil.Date
  end else begin
    dtpFrom.MaxDate := Date;
  end;
  if dtpFrom.Date > dtpFrom.MaxDate then
    dtpFrom.Date := Trunc(dtpFrom.MaxDate);

  prevstyle := SendMessage(dtpFrom.Handle, DTM_GETMCSTYLE, 0, 0);
  if (dtpFrom.MaxDate < Date) then
    style := prevstyle or MCS_NOTODAY
  else
    style := prevstyle and not MCS_NOTODAY;
  if style <> prevstyle then
    {prevstyle := }SendMessage(dtpFrom.Handle, DTM_SETMCSTYLE, 0, style);
end {TfrmActivities.dtpFromEnter};

{ ---------------------------------------------------------------------------- }
procedure TfrmActivities.dtpUntilEnter(Sender: TObject);
begin
  if dtpFrom.Checked then
    dtpUntil.MinDate := dtpFrom.Date
  else
    dtpUntil.MinDate := 0;
  if dtpUntil.Date < dtpUntil.MinDate then
    dtpUntil.Date := dtpUntil.MinDate;
end {TfrmActivities.dtpUntilEnter};

end.

Added Olam/src/F_Activity.dfm.

































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
object frmActivity: TfrmActivity
  Left = 0
  Top = 0
  Caption = 'Activity'
  ClientHeight = 348
  ClientWidth = 457
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'Tahoma'
  Font.Style = []
  Icon.Data = {
    000001000800101000000100080068050000860000001818000001000800C806
    0000EE0500002020000001000800A8080000B60C00003030000001000800A80E
    00005E1500001010000001002000680400000624000018180000010020008809
    00006E2800002020000001002000A8100000F63100003030000001002000A825
    00009E4200002800000010000000200000000100080000000000400100000000
    000000000000000000000000000000000000FFFFFF003B83B300B3ADAD005FC5
    FF0068686800FFD3D3003399FF008D8D8D007A7A7A00FFEAEA0048AEFF00B398
    98002B72B3007171710096969600FFDFDF0054BAFF003DA3FF00B3A2A2008282
    8200FFF3F30087878700FFF9F900FFD9D9004EB4FF00FFE5E500389EFF0043A9
    FF0059BFFF00B39D9D00B3A7A7006C6C6C00919191002F77B300FFEFEF007474
    7400777777007D7D7D008A8A8A00FFFCFC00FFE2E200FFDCDC0051B7FF005CC2
    FF003980B3006A6A6A006E6E6E007F7F7F00858585008F8F8F0093939300FFF7
    F700FFEDED00FFD7D700FFD5D500369CFF003AA0FF003FA5FF0045ABFF004AB0
    FF004CB2FF0056BCFF00B39A9A00B39F9F00B3A4A400B3ABAB002C74B3002E75
    B300696969006B6B6B006D6D6D006F6F6F00707070008E8E8E00909090009292
    92009494940095959500FFFBFB00FFF2F200FFF0F000FFE3E300FFE0E000FFDE
    DE00FFDDDD00FFDBDB00FFDADA00349AFF00FFD8D8003CA2FF0047ADFF003A82
    B3004DB3FF0050B6FF0057BDFF005AC0FF005DC3FF00B3999900B39C9C00B39E
    9E00B3A0A000B3A1A100B3A5A500B3A8A800B3ACAC0000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    000000000000000000000000000000000000000000000000000000000000000E
    4949482F2F472020462E45450500002410101063552A56180C36370646000025
    292929645310542A625936372F0000091A1A1A65522953543F5759360E000026
    13131366666540641E3F620C24000030605F112D5D3C5B1C0D39380725000014
    2C1D3E2D193D0B1C435A1B070900003161603E5C5E5D0B3B44121B5826000016
    042C5F022B193C5B223A39383000002703036942681F67416665646314000008
    171734695023350A131A29103100004B284F17031551350A131A291016000033
    012817031551350A131A29102700000F0F4E4D33334C21214B32324A08000000
    0000000000000000000000000000FFFF00008001000080010000800100008001
    0000800100008001000080010000800100008001000080010000800100008001
    00008001000080010000FFFF0000280000001800000030000000010008000000
    0000A00200000000000000000000000000000000000000000000FFFFFF004084
    A90063C9FF00A9A9A90069696900FDD1D100379CFD0082859800FFE8E8007C7B
    7B00A99393004CB2FF00899AA6002E72A900939393008786860099A2A900FFDC
    DC00FFF4F40057BDFF00A99E9E007273730041A7FF009899A0008590A000888D
    9100828080003A7DA900FDE2E200706D6D00FFEEEE005DC3FF00989898007777
    770083898D00FDFAFA0096909900FFD7D7003CA2FF0046ACFF0051B7FF00A999
    9900A9A3A3008B8B8B008F8F8F00838A9C008795A400989EA50098949C007E7E
    7E0084838300FFF7F700FFF1F100FFEBEB00FFE5E500FFDFDF00FFD4D40049AF
    FF0054BAFF00707070005AC0FF0060C6FF00767474006C6B6B003E81A900FFFC
    FC00FDDADA007979790089888800868B8F0095959500FCE0E0006D6D6D008692
    A200A8A1A1003AA0FF00399EFD003074A9003EA4FF0043A9FF004EB4FF003C7F
    A900A9959500A997970083889A00A99B9B00858E9E0098969E00989CA300FDFD
    FD00FFF9F900FDF6F600FDEFEF00FDECEC00FFE3E300FDE4E400FFE1E100FFD9
    D900FDD8D800FDD5D500FDD3D300747272007E7C7C00807F7F0086848400848C
    9D00898A8B008794A2008797A50099A0A8009AA4A900FDE8E800727070007977
    77006B6A6A006E6E6E00716F6F00717272007573730073747400757575007676
    7600787878007A7878007B7A7A0081818100838282008585850088878700848A
    8E008C8C8C00878C90008E8E8E00898E92009090900094949400969696009797
    970099999900A8A8A8008898A600FFFEFE00FFFDFD00FFFBFB00FDFCFC00FFF6
    F600FFF5F500FFF3F300FFF2F200FFF0F000FFEFEF00FFEDED00FFECEC00FFEA
    EA00FFE9E900389DFD00FFE7E7002F73A900FFE6E6003BA1FF00FFE4E4003DA3
    FF00FDE5E5003FA5FF00FFE2E20040A6FF00FDE3E300FFE0E00042A8FF00FFDE
    DE0044AAFF0045ABFF00FFDADA004AB0FF004BB1FF003F83A9004FB5FF0050B6
    FF0052B8FF0053B9FF0055BBFF0056BCFF0058BEFF0059BFFF005BC1FF005CC2
    FF005EC4FF005FC5FF0061C7FF0062C8FF007C7C7C0080808000848484008989
    89008A8A8A00A99C9C00A9A4A4003073A900399DFD00707071004083A9007776
    76007A7979007B7B7B007F7E7E007F7F7F008180800083838300878787008888
    880092939300A9A1A1008796A4008899A6009AA2A9009AA3A900000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000C0337F1BCF68CD670A7D7C72CA3F776671751E0500000000
    69379F9D9D9D2A9F9F375FA5A80B12622639060500000000109B9A363636C49A
    9B099D375F533812AD2665730000000081981F979797151F98999A099F54A538
    12AD644000000000459695959494D49535971F999B2AA1A53812634900000000
    C31393923434C5929394359798569DA161AA4374000000006B6D8DD60D0D0DD6
    8DD52F6C4A19576A2E55083C0000000023B3B5B6B7B71CB63B29B10C3A0E50A6
    A24C07C80000000082B514B8B9B952B8B63B2951AE9EAB174FA09C7600000000
    46143DBABBBC41B9B7B5B3B1AFC6ACA94FA0C7160000000084B7B9BBBDBEC920
    3DB6B4B10C4EACA9A4274D78000000001AB7B9BCBE0302203DB6B4B20C4E28A9
    A4274D79000000008614B9BB3EBDB0BAB8B6B4B10C4EACA9A4A04D7A00000000
    D3D8D86F6F6F6FD8D8D8D7116E30591858312522000000008801010101010401
    0101010142C51335989B607B0000000047010101010104010101018E42C51396
    9909A744000000008A010101010104010101018E90C594969909A7CB00000000
    210101010101040101018E8F5B2B951F369D1DCC000000008B5A5A5A5A5A8C5A
    5A5A91245C4B5D5E70A348BF000000008947880F872D85832CC3C2D2D180C1D0
    7ECE32C000000000000000000000000000000000000000000000000000000000
    00000000000000000000000000000000000000000000FFFFFF00FFFFFF00C000
    0300C0000300C0000300C0000300C0000300C0000300C0000300C0000300C000
    0300C0000300C0000300C0000300C0000300C0000300C0000300C0000300C000
    0300C0000300C0000300C0000300FFFFFF00FFFFFF0028000000200000004000
    0000010008000000000080040000000000000000000000000000000000000000
    0000FFFFFF000067D2009E98920059C5FF0064666600FFD4D4002CA1FF00807F
    7F008499AB00FFEAEA0044B1FF00737272008C8C8C007C8D9D00A9A29B003CA2
    FF00FFDFDF00FDF6F40049BFFF0066CCFF009294940054BBFF006D6C6A009C9C
    9C0078797900878684008897A2000061C9004DB4FF00A49C9800A2A0A0003EAB
    FF0034A0FF008194A300FDE5E300FFF0EF005FCAFF00FFFBFA00FFDADA0053C1
    FF00979898000369CD0044AAFF0059BFFF0071706C00909090004CBAFF007C7C
    7C0074767600869AA60040A6FF008384840067696900898989000060CE0048B5
    FF005EC4FF0039A6FF004EC1FF00A59F9B00FDE7E7006D6E6E00FFD7D700399F
    FF0051B7FF00FFF7F700FDEDEC004FBDFF008D898800FFE2E2007673700061C7
    FF008F8E8B0099979500A19E9D008496A200899AA300FFF2F200FDDFDC0037A2
    FF004BB1FF005CC8FF005BC2FF00A49D9500FDFDFD0073726E006A6B6B00706F
    6F00959595009A9999003DA8FF0041ACFF0047B2FF0056C2FF00878787008F8E
    8E000167CE007072720075747400787777004FBAFF00797B7B0057BDFF008181
    8100FFE5E500FDE1DF00FFDDDD00FDDDDA0067676700329EFF003EA4FF0042A8
    FF004AB7FF0064CBFF0092929200FFFCFC00FFE8E800FDE3E100757878007E7D
    7D0083828200858585008C8B89009F9F9E008898A400FFF5F500FDF7F500FDF3
    F300FFEEEE00FDF0F000FFECEC00FDEBEB002EA0FF0073706D004DB8FF0051BE
    FF004FB6FF0054BFFF0052B9FF005BC6FF0062C9FF00908E8D00A79F9A008394
    A2008696A100FFFCFA00FFEEEC00FDEEEE0032A0FF00757472007374740039A4
    FF003BA6FF003BA8FF007F8181008B898800A49D9800A29B9800A0A0A0006567
    670068686800696A6A006B6C6C006C6D6D006F6E6E0074736F00727373007978
    78007A7A7A005AC0FF007B7B7B0060C6FF007A7C7C005DC3FF00888585008988
    88008A8A8A008D8C8A008D8D8D008F8F8F0091919100A39C9700969696009B9A
    9A00FFFEFE00FFFDFD00FFFBFB00FFF8F800FFF6F600FFF4F4000268CD00FFF3
    F300FCF5F300FFF1F100FFEDED00FFEBEB00FFE9E900FFE7E700FFE6E600FFE4
    E400FFE3E300FFE3E100FFE1E100FFE0E000FFDEDE00FFDCDC00FFDBDB00FFD9
    D900FFD8D800FFD6D600339FFF0033A1FF0072716E003AA0FF003BA1FF003DA3
    FF00737373003FA5FF007575750041A7FF0043A9FF0045ABFF0046B3FF004BB6
    FF004CB2FF004EBCFF007C7D7D0052C0FF0054C2FF0055C1FF008080800057C3
    FF0055BBFF0056BCFF008182820058BEFF005CC3FF005BC1FE005FC5FF0065CB
    FF00858686008E8D8A009E97930092939300A49C9600A39D960092959500A5A0
    9C009B9B9B008695A2008295A3008798A5000060CD000061CA000067D1000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    EB9B7830ABA96619A96464DB97D9A7A7620C3E58A4A357A235A1A2A200000000
    687EC38181242424811FBE248183C40AC5815AC46946CCCC6BCF466D00000000
    0824C6757575C50A3DF981C6C6C769C846C6F7C86BCFD0D1D206CF0500000000
    E7C00A0AC4C4C4C484B84E0AC575C6C769C515C7116BCF27D1D2CDA000000000
    68BE83C38181818194F9BEC383C40AC5C6C31575CB116BCFD03FCDA100000000
    6842242424C2C2C282F9422481C383C40A24150AC9CB116BCFD0CCA100000000
    79BB4E4EC0C0BE7E8018BB4EC22424C383C2F4C369C9CB116BCFC9A100000000
    34B97EBDBC4242BCBD18B942BDC04E4E247E59C2C5C7C846CDCEC8A200000000
    AF2680127F7F7F7FC14B921280808282434E4A933D23766A4F6CCAA400000000
    1A32919191911B1B4D0E4D91914CFA4C4C7D0EFC4C90FB222222091700000000
    B013E288E428E6E688020444442F7138DF71370B209A3A50216E07A500000000
    9C44E967EC2CAAAA2C61EFEAE98B4189E1891C512B70DAD8D740952D00000000
    45E4672CAA535339EE2A8DECEA168B891D411CE12B70336FD740D48600000000
    7B28ECAA53EFEFACAEBF8D2C67E98B891D8B1C1DDEDD336F1040D4D500000000
    B2E42C53AEEF488DAC6114AAECEA8B41898B1C1DDEDDDC6F10D6955600000000
    F2E52C5339AC72144861F053ECEA1641898B1C1DDEDDDC6F10D695A600000000
    49282CED39AC8D72AC611453ECEA1641898BFE1DDEDDDC6F10D6954700000000
    603BE6E8045252258CFF255E8A886587E087FD5D5C5B999850D3856300000000
    8EF89DB6B6B69EB63CF33CB69D1E1E1E1E8F038FF6F6B654F5B60F9600000000
    2E01010101010101017C0101010101010101B7017426BDC02481C0DB00000000
    600101010101010155F9010101010101B90173B9BE4E2483C5C6C39700000000
    B40101010101010155F9010101010101B901F4B9BEC22483C5C781DB00000000
    2E0101010101010155F9010101010101B901F4017EC28183C5C7833100000000
    730101010101010155F90101010101010101F4BAC02481C475C7C37700000000
    B50101010101010155F90101010101B97401F4744E24C30A7569C46400000000
    730101010101010155F901010101B9BABB01F4BBC224830AC6C8C4A800000000
    5901010101010101019F0101010101010101290126BCBEC024834EAD00000000
    B7B773B52EB460B3600D0DB136B05FF17A34EB7968E7E77830ABE37800000000
    0000000000000000000000000000000000000000000000000000000000000000
    000000000000000000000000000000000000000000000000000000000000FFFF
    FFFFFFFFFFFFC0000003C0000003C0000003C0000003C0000003C0000003C000
    0003C0000003C0000003C0000003C0000003C0000003C0000003C0000003C000
    0003C0000003C0000003C0000003C0000003C0000003C0000003C0000003C000
    0003C0000003C0000003C0000003C0000003C0000003FFFFFFFFFFFFFFFF2800
    000030000000600000000100080000000000800A000000000000000000000000
    00000000000000000000FFFFFF000067D4009E99940059C7FF0064666600E6C9
    C9002CA1FF007E7F7F008499AB00FFEAEA0043B1FF00737272008C8C8C007C8D
    9D00CAAAAA003CA2FF00FFDFDF00FDF6F40049BFFF0066CCFF009294940054BB
    FF00706C67009D9C9C0078797900898380008897A2000061C9004EB4FF00A49C
    9800A2A0A0003EABFE00369EFF008194A300EFE3E300FFF0F0005ECDFF00FFFA
    FA00FFDADA0053C2FF0097989800056BCF0044AAFF0058C0FF00736F69009090
    90004CBBFF007B7C7C0074767600869AA60040A6FF0083848400676969008989
    89000060CE0048B6FF005EC4FF0037A6FF0050C1FF00A59F9B00EEE8E8006C6F
    6F00FFD7D7003F96E90058B0EF00FFF7F700F4EDED004FBDFE008E888400FFE2
    E2007673700061C7FF008F8E8B0099979500A19E9D008496A200899AA300FFF2
    F200E4DEDE0035A4FF004AB0FF005BCAFF005CC2FF00A49D9500FDFDFD007372
    6E00696C6C006E707000979494009B9998003DA9FC0041ACFF0048AEFF0055C4
    FF00878787008E8E8E000066CC006F72720075747400787777004FBAFF007A7B
    7B0057BEFF0081818100FFE5E500EFE0E000FFDDDD00E6D9D90067676700319E
    FF003EA4FF0042A8FF004AB8FF0064CAFF0094919200FFFCFC00FFE8E800F2E2
    E200767878007E7D7D0084838200858585008C8B89009D9E9E008898A400FFF5
    F500F9F7F700FAF2F200FFEEEE00F6F0F000FFECEC00F6EAEA002D9EFF007470
    6B004DB8FF0051BEFC0050B6FF0054BFFB0052B9FF0059C8FF0063C9FF00928F
    8D00A79F9A008394A2008696A100FFFCFA00FFEEEC00F3EEEE0032A1FF007574
    72007374740039A4FF003BA6FF003AA9FF007F8181008B898800A49D9800A29B
    9800A0A0A0006568680068686800686B6B006A6D6D006B6E6E006F6E6E007473
    6F0071747400797878007A7A7A005AC0FF007B7B7B0060C6FF00797C7C005DC3
    FF008C858100888888008A8B8B008D8C8A008D8D8D008F8F8F0091919100A39C
    9700969696009D9A9900FFFEFE00FFFDFD00FFFBFB00FDF9F900FFF6F600FFF4
    F4000167CC00FFF3F300F8F4F400FFF1F100FFEDED00FFEBEB00FFE9E900FFE7
    E700FFE6E600FFE4E400FFE3E300FFE3E100FFE1E100FFE0E000FFDEDE00FFDC
    DC00FFDBDB00FFD9D900FFD8D800FFD6D600359DFF0034A3FF00727170003AA0
    FF003BA1FF003DA3FF00737373003FA5FF007475750041A7FF0043A9FF0046AC
    FF0045B5FF004BB6FF004CB2FF004EBCFF007C7E7E0052C0FF0054C2FF0055C0
    F9007F80800056C5FF005DB2EC0059B9F9008182820058BEFF005CC3FF0063B1
    E5005FC5FF0065CBFF00868686008E8D8A009D98950093939300A49C9600A39D
    960092959500A5A09C009B9B9B008695A2008295A3008798A5000060CD000061
    CA000067D1000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    00000000000000000000000000000000000000000000000000B1683030663066
    1966771977777797DB9797A79762A76262623E3E3E3EA4A3A357A3A25735A2A0
    35A2190000000000009B0606060606060606060606066C597606060606060606
    0606066A736C06060606060606060606060FA400000000000008067569C7C7C7
    C7C6C6C6C675435A24C669C7C869C9C846CBCC3DF36A6BCECF27D0D13FD20606
    0606A2000000000000E706C76969C7C7C7C7C7C7C7C7435A82696969C8C8C946
    46CBCC3DF36ACECF27D0D13FD20606060606570000000000000806C5C6C67575
    757575757575825A82C6C6C7C76969C8C9C9463DF36ACD6BCECF27D03FD20606
    D20657000000000000E706C4C5C5C50A0A0A0A0A0A0A825A82C5C57575C6C7C7
    69C8C984F36A11CD6BCECF27D0D1D2063F06A3000000000000E706C30AC4C483
    83838383838382B882C4C40A0AC575C6C6C769845A76CBCC11CDCECF27D03FD2
    D106A300000000000034062483C3C3C381818181818182B880C38383C4C40AC5
    75C6C7845A2346CBCC11CD6BCF27D03FD006A4000000000000346C2481242424
    24242424242482B8C1248181C38383C40AC575435A23C8C946CC11CD6BCF27D0
    2706A3000000000000346C4E2424C2C2C24E4E4E4E4EC1B8C1C224242481C383
    83C40A435A2369C8C946CC11CDCECF27CF063E000000000000346CBE4E4EC0C0
    C0BEBEBEBEBEC118C14E4EC2C2242481C383C4435A3DC669C8C946CC11CDCECF
    CE06A40000000000007A6CBDC0BEBE7E7E7EBDBDBDBDC118C1BEBEC04E4EC224
    2481C3945A3D75C669C8C9CBCC116BCE6B0658000000000000346C427EBDBD42
    424242424242C1187FBD7E7EBEC04EC224248194B83DC575C669C8C9CBCCCD6B
    CD063E0000000000007A4FBC42BCBCBCBCBCBCBCBCBCC118C1BC42BDBD7EBEC0
    4EC22480B83D4EC575C669C846CB11CD110662000000000000795AF3F3F3F3F3
    F3F3F3F3F3F303F3F3F3F3F3F3F3F3F3F303F3F3F303F3F3F3F3030303030303
    F38E170000000000001A412F2FE2E24444888888882844025EE22F2F71713838
    DF0B0B380220205B9A3A3A50D4956E858540170000000000001A418B8B16E9EA
    6767ECECEC2C882AAEE9168B8B41891D1D515189615BDEDD7033DAD810D64040
    2140170000000000001AE98BE9EA67ECEC2C2C2C2C53882A39EAE9168B8B8989
    1DE15189615BDE2B70DCDA6F10D74040D34017000000000000AFE916EA67EC2C
    AA5353535339882A48EC67E9168B41891D1D5189615B5D2BDDDC336FD8D7D640
    214017000000000000AFE91667EC2CAA5353AEAEAEAC8A2A8D2CECEAE9168B41
    891DE18BBF5B5DDEDD7033DAD810D64021402D000000000000AFEEEAEC2CAA53
    AE39EFEFEF488A2A8DAA2C67EA168B41891D1D41615B51DEDD7033DAD810D640
    21401700000000000045EE8AECAA53AE39EFAC488D8D8A2A72532CECEAE98B8B
    89891D41612051DE2B70DCDA6F10D640214017000000000000AFEE672CAA5339
    EFAC8D8D8D728A2AF0AEAAEC67E9168B89891D8B612051DE2B70DCDA6F10D740
    40408600000000000045EE2C2C535339AC4872F0F0F0E62AF053AA2C67E9168B
    41891D8B612051DE2B70DCDA6F10D74040402D00000000000045EE2C2C535339
    EF488DF08DF0E62AF053AA2C67E9168B41891D8B612051DE2B70DCDA6F10D740
    40408600000000000045EE672CAA53AEEFAC488D8D728A2AF053AAEC67E9168B
    89891D8B612051DE2B70DCDA6F10D74040408600000000000045EA3B285EE804
    8C5252525225880225E828288844E22F71383871029A0B20209A9A3A50D49595
    854086000000000000B2295A5A5A5A5A5A5A5A5A5A5A5A5AB85A5A5A5A5A5A5A
    5A5A5AB85AB85A5A5A5A5A5A5A5A5A5A5A73D50000000000000D3D0101010101
    0101010101017F7CBC010101010101010101B97F1882427EC0C22481830A75C7
    7506770000000000000D3D01010101010101010101017F7CBC01010101010101
    0101B97F1882427EC0C22481830A75C77506770000000000000D3D0101010101
    0101010101017F7CBC010101010101010101B97F1882427EC0C22481830A75C7
    750619000000000000B43D01010101010101010101017F7CBC01010101010101
    0101B97F1882427EC0C22481830A75C77506190000000000002E3D0101010101
    0101010101017F7CBC010101010101010101017F1882BD7EC0C22481830A75C7
    7506190000000000002E3D01010101010101010101017F7CBC01010101010101
    01B9BA7F1882BDBEC0C224C3C40A75C7C606190000000000002E3D0101010101
    0101010101017F7CBC0101010101010101B9BA7F1894BDBE4E2424C3C4C575C7
    C60619000000000000B53D01010101010101010101017F7CBC01010101010101
    01B9747F18947EBE4E2481C3C4C5C669C60666000000000000B53D0101010101
    0101010101017F7CBC01010101010101B9BABB7F18437EC0C22481830AC5C669
    C70666000000000000733D01010101010101010101017F7CBC010101010101B9
    B974267F1843BE4EC224C3C40A75C769C706AD000000000000733D0101010101
    0101010101017F7CBC010101010101B9BABB267F1843C04E2481C3C4C575C7C8
    6906AD000000000000733D01010101010101010101017F7CBC01010101010101
    BA74747F1894BEBEC22424830AC5C669C606E3000000000000596C8294949494
    9494824343433D5AC1434343434343843D3D3DC129236A6A6A6C6C6C6C6C0606
    0606080000000000001859F47360B460606060B3B30D0D0DB0B0B05FB0F15FF1
    F1343434EBEB686868E79B089BE3E33030E3B100000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    000000000000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000E000
    000000070000E000000000070000E000000000070000E000000000070000E000
    000000070000E000000000070000E000000000070000E000000000070000E000
    000000070000E000000000070000E000000000070000E000000000070000E000
    000000070000E000000000070000E000000000070000E000000000070000E000
    000000070000E000000000070000E000000000070000E000000000070000E000
    000000070000E000000000070000E000000000070000E000000000070000E000
    000000070000E000000000070000E000000000070000E000000000070000E000
    000000070000E000000000070000E000000000070000E000000000070000E000
    000000070000E000000000070000E000000000070000E000000000070000E000
    000000070000E000000000070000E000000000070000E000000000070000E000
    000000070000E000000000070000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFF
    FFFFFFFF00002800000010000000200000000100200000000000400400000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    000000000000000000000000000000000000717171FF707070FF707070FF6F6F
    6FFF6E6E6EFF6E6E6EFF6D6D6DFF6C6C6CFF6C6C6CFF6B6B6BFF6A6A6AFF6969
    69FF696969FF686868FF0000000000000000747474FFFFDFDFFFFFDFDFFFFFDF
    DFFFB39C9CFFFFDDDDFFFFDCDCFFFFDBDBFFFFD9D9FFB39898FFFFD7D7FFFFD5
    D5FFFFD3D3FF6B6B6BFF0000000000000000777777FFFFE2E2FFFFE2E2FFFFE2
    E2FFB39E9EFFFFE0E0FFFFDFDFFFFFDEDEFFFFDCDCFFB39999FFFFD8D8FFFFD7
    D7FFFFD5D5FF6E6E6EFF00000000000000007A7A7AFFFFE5E5FFFFE5E5FFFFE5
    E5FFB3A0A0FFFFE3E3FFFFE2E2FFFFE0E0FFFFDEDEFFB39A9AFFFFDADAFFFFD8
    D8FFFFD7D7FF717171FF00000000000000007D7D7DFFB3A2A2FFB3A2A2FFB3A2
    A2FFB3A1A1FFB3A1A1FFB3A0A0FFB39F9FFFB39E9EFFB39D9DFFB39A9AFFB399
    99FFB39898FF747474FF00000000000000007F7F7FFF5AC0FFFF57BDFFFF54BA
    FFFF3980B3FF4DB3FFFF4AB0FFFF47ADFFFF43A9FFFF2B72B3FF3AA0FFFF369C
    FFFF3399FFFF777777FF0000000000000000828282FF5CC2FFFF59BFFFFF56BC
    FFFF3980B3FF4EB4FFFF4CB2FFFF48AEFFFF43A9FFFF2C74B3FF3CA2FFFF389E
    FFFF3399FFFF7A7A7AFF0000000000000000858585FF5DC3FFFF5AC0FFFF56BC
    FFFF3A82B3FF50B6FFFF4DB3FFFF48AEFFFF45ABFFFF2E75B3FF3DA3FFFF389E
    FFFF349AFFFF7D7D7DFF0000000000000000878787FF5FC5FFFF5CC2FFFF57BD
    FFFF3B83B3FF51B7FFFF4EB4FFFF4AB0FFFF47ADFFFF2F77B3FF3FA5FFFF3AA0
    FFFF369CFFFF7F7F7FFF00000000000000008A8A8AFFB3ADADFFB3ADADFFB3AC
    ACFFB3ABABFFB3A8A8FFB3A7A7FFB3A5A5FFB3A4A4FFB3A1A1FFB3A0A0FFB39E
    9EFFB39C9CFF828282FF00000000000000008D8D8DFFFFF9F9FFFFF9F9FFFFF7
    F7FFB3ACACFFFFF2F2FFFFEFEFFFFFEDEDFFFFEAEAFFB3A2A2FFFFE5E5FFFFE2
    E2FFFFDFDFFF858585FF0000000000000000909090FFFFFCFCFFFFFBFBFFFFF9
    F9FFB3ADADFFFFF3F3FFFFF0F0FFFFEDEDFFFFEAEAFFB3A2A2FFFFE5E5FFFFE2
    E2FFFFDFDFFF878787FF0000000000000000939393FFFFFFFFFFFFFCFCFFFFF9
    F9FFB3ADADFFFFF3F3FFFFF0F0FFFFEDEDFFFFEAEAFFB3A2A2FFFFE5E5FFFFE2
    E2FFFFDFDFFF8A8A8AFF0000000000000000969696FF969696FF959595FF9494
    94FF939393FF939393FF929292FF919191FF919191FF909090FF8F8F8FFF8F8F
    8FFF8E8E8EFF8D8D8DFF00000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000FFFF00008001000080010000800100008001
    0000800100008001000080010000800100008001000080010000800100008001
    00008001000080010000FFFF0000280000001800000030000000010020000000
    0000600900000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000008181
    81FB858484FC848383FC838181FC828080FC807F7FFC7F7E7EFC7E7C7CFC7C7B
    7BFC7B7A7AFC7A7878FC797777FC777676FC767474FC757373FC747272FC7270
    70FC716F6FFC706D6DFC666666EE000000000000000000000000000000008886
    86FEFFE5E5FFFFE6E6FFFFE7E7FFFFE7E7FFFFE7E7FFA99999FFFFE6E6FFFFE6
    E6FFFFE5E5FFFFE3E3FFFFE2E2FFFFE0E0FFA99393FFFFDCDCFFFFD9D9FFFFD7
    D7FFFFD4D4FFFDD1D1FF676767F1000000000000000000000000000000008988
    88FEFFE9E9FFFFEAEAFFFFEBEBFFFFEBEBFFFFEBEBFFA99C9CFFFFEAEAFFFFE9
    E9FFFFE8E8FFFFE7E7FFFFE5E5FFFFE3E3FFA99595FFFFDFDFFFFFDCDCFFFFDA
    DAFFFFD7D7FFFDD3D3FF696868F1000000000000000000000000000000008A89
    89FEFFEDEDFFFFEEEEFFFFEFEFFFFFEFEFFFFFEFEFFFA99E9EFFFFEEEEFFFFED
    EDFFFFECECFFFFEAEAFFFFE8E8FFFFE6E6FFA99797FFFFE2E2FFFFDFDFFFFFDC
    DCFFFFDADAFFFDD5D5FF6A6969F1000000000000000000000000000000008B8A
    8AFEFFF0F0FFFFF2F2FFFFF2F2FFFFF3F3FFFFF3F3FFA9A1A1FFFFF2F2FFFFF1
    F1FFFFEFEFFFFFEEEEFFFFECECFFFFE9E9FFA99999FFFFE4E4FFFFE2E2FFFFDF
    DFFFFFDCDCFFFDD8D8FF6B6B6BF1000000000000000000000000000000008C8C
    8CFEFFF4F4FFFFF5F5FFFFF6F6FFFFF7F7FFFFF7F7FFA9A4A4FFFFF6F6FFFFF5
    F5FFFFF3F3FFFFF1F1FFFFEFEFFFFFEDEDFFA99B9BFFFFE7E7FFFFE4E4FFFFE1
    E1FFFFDEDEFFFDDADAFF6C6C6CF1000000000000000000000000000000008B8C
    8DFE8797A5FF8898A6FF8899A6FF899AA6FF899AA6FF899AA6FF8899A6FF8898
    A6FF8796A4FF8795A4FF8794A2FF8692A2FF8590A0FF858E9EFF848C9DFF838A
    9CFF83889AFF828598FF6E6E6EF100000000000000000000000000000000858B
    8FFE52B8FFFF55BBFFFF56BCFFFF58BEFFFF58BEFFFF3A7DA9FF56BCFFFF54BA
    FFFF51B7FFFF4FB5FFFF4CB2FFFF49AFFFFF2E72A9FF43A9FFFF40A6FFFF3DA3
    FFFF3AA0FFFF379CFDFF6E6E6FF100000000000000000000000000000000868C
    90FE55BBFFFF57BDFFFF59BFFFFF5BC1FFFF5BC1FFFF3C7FA9FF59BFFFFF56BC
    FFFF54BAFFFF51B7FFFF4EB4FFFF4AB0FFFF2F73A9FF44AAFFFF41A7FFFF3EA4
    FFFF3BA1FFFF389DFDFF6F7070F100000000000000000000000000000000888D
    91FE57BDFFFF5AC0FFFF5CC2FFFF5EC4FFFF5FC5FFFF3E81A9FF5BC1FFFF58BE
    FFFF55BBFFFF52B8FFFF4FB5FFFF4BB1FFFF3073A9FF45ABFFFF42A8FFFF3EA4
    FFFF3BA1FFFF399DFDFF707171F100000000000000000000000000000000898E
    92FE58BEFFFF5BC1FFFF5EC4FFFF61C7FFFF62C8FFFF4083A9FF5DC3FFFF5AC0
    FFFF56BCFFFF53B9FFFF4FB5FFFF4CB2FFFF3074A9FF45ABFFFF42A8FFFF3FA5
    FFFF3CA2FFFF399EFDFF717272F1000000000000000000000000000000008A8F
    93FE58BEFFFF5BC1FFFF5FC5FFFF62C8FFFF63C9FFFF4084A9FF5DC3FFFF5AC0
    FFFF56BCFFFF53B9FFFF50B6FFFF4CB2FFFF3074A9FF46ACFFFF42A8FFFF3FA5
    FFFF3CA2FFFF399EFDFF737373F1000000000000000000000000000000008B90
    94FE57BDFFFF5BC1FFFF5EC4FFFF60C6FFFF61C7FFFF3F83A9FF5CC2FFFF59BF
    FFFF56BCFFFF53B9FFFF4FB5FFFF4CB2FFFF3074A9FF45ABFFFF42A8FFFF3FA5
    FFFF3BA1FFFF399EFDFF747474F1000000000000000000000000000000009495
    95FE9AA3A9FF9AA3A9FF9AA4A9FF9AA4A9FF9AA4A9FF9AA4A9FF9AA3A9FF9AA3
    A9FF9AA3A9FF9AA2A9FF99A2A9FF99A0A8FF989EA5FF989CA3FF9899A0FF9896
    9EFF98949CFF969099FF757575F1000000000000000000000000000000009696
    96FEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA9A9A9FFFFFFFFFFFFFF
    FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFFA9A4A4FFFFF4F4FFFFF1F1FFFFED
    EDFFFFE9E9FFFDE4E4FF767676F1000000000000000000000000000000009797
    97FEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA9A9A9FFFFFFFFFFFFFF
    FFFFFFFFFFFFFFFFFFFFFFFEFEFFFFFCFCFFA9A4A4FFFFF4F4FFFFF0F0FFFFEC
    ECFFFFE8E8FFFDE3E3FF777777F1000000000000000000000000000000009999
    99FEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA9A9A9FFFFFFFFFFFFFF
    FFFFFFFFFFFFFFFFFFFFFFFEFEFFFFFBFBFFA9A4A4FFFFF3F3FFFFF0F0FFFFEC
    ECFFFFE8E8FFFDE3E3FF797878F1000000000000000000000000000000009A9A
    9AFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA9A9A9FFFFFFFFFFFFFF
    FFFFFFFFFFFFFFFEFEFFFFFDFDFFFFF9F9FFA9A3A3FFFFF2F2FFFFEEEEFFFFEB
    EBFFFFE7E7FFFDE2E2FF7A7A7AF1000000000000000000000000000000009B9B
    9BFEFDFDFDFFFDFDFDFFFDFDFDFFFDFDFDFFFDFDFDFFA8A8A8FFFDFDFDFFFDFD
    FDFFFDFDFDFFFDFCFCFFFDFAFAFFFDF6F6FFA8A1A1FFFDEFEFFFFDECECFFFDE8
    E8FFFDE5E5FFFCE0E0FF7B7B7BF1000000000000000000000000000000009696
    96F0959595F1949494F1939393F1909090F18F8F8FF18E8E8EF18C8C8CF18B8B
    8BF18A8A8AF1888888F1878787F1868686F1848484F1838383F1828282F18080
    80F17E7E7EF17D7D7DF17C7C7CE4000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    00000000000000000000000000000000000000000000FFFFFF00FFFFFF00C000
    0300C0000300C0000300C0000300C0000300C0000300C0000300C0000300C000
    0300C0000300C0000300C0000300C0000300C0000300C0000300C0000300C000
    0300C0000300C0000300C0000300FFFFFF00FFFFFF0028000000200000004000
    0000010020000000000080100000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000007E7F7FE87D7F7FF07C7B7BF07A7A7AF0797979F0787878F07779
    79F0767777F0777878F0757575F0767575F0727373F0717272F0707171F06F70
    70F06E7070F06D6F6FF0706F6FF06A6B6BF06D6C6CF0696A6AF0686969F06768
    68F0666767F0646666F0656565F0666767F0646565E800000000000000000000
    0000000000007F8080F6FFF5F5FFFFEDEDFFFFEEEEFFFFEEEEFFFFF0F0FFFFEF
    EFFFFFF0F0FFFFEEEEFFA2A0A0FFFFF4F4FFFFEFEFFFFFEEEEFFFFECECFFFFEB
    EBFFFFEAEAFFFFE9E9FFFFEEEEFF9A9999FFFFEBEBFFFFE5E5FFFFE2E2FFFFE0
    E0FFFFE0E0FFFFDDDDFFFFDBDBFFFFE2E2FF656565F600000000000000000000
    0000000000007F7E7EF6FFEFEFFFFFE7E7FFFFE8E8FFFFE8E8FFFFE8E8FFFFE9
    E9FFFFEAEAFFFDE7E7FF9B9B9BFFFFEEEEFFFFE7E7FFFFE7E7FFFFE6E6FFFFE5
    E5FFFFE4E4FFFFE2E2FFFFE7E7FF929595FFFFE4E4FFFFDDDDFFFFDBDBFFFFD9
    D9FFFFD8D8FFFFD6D6FFFFD4D4FFFFDBDBFF626464F600000000000000000000
    0000000000007F7F7FF6FFF3F3FFFFEAEAFFFFEAEAFFFFEBEBFFFFEBEBFFFFEB
    EBFFFFEBEBFFFDEBEBFF9B9A9AFFFFF2F2FFFFEAEAFFFFE9E9FFFFE8E8FFFFE7
    E7FFFFE6E6FFFFE5E5FFFFE9E9FF929494FFFFE6E6FFFFDFDFFFFFDDDDFFFFDB
    DBFFFFDADAFFFFD8D8FFFFD6D6FFFFDEDEFF636565F600000000000000000000
    000000000000808080F6FFF4F4FFFFECECFFFFEDEDFFFFEEEEFFFFEEEEFFFFEE
    EEFFFFEEEEFFFDEEEEFF9B9B9BFFFFF4F4FFFFEDEDFFFFECECFFFFEBEBFFFFEA
    EAFFFFE9E9FFFFE7E7FFFFEDEDFF929494FFFFE8E8FFFFE1E1FFFFDFDFFFFFDD
    DDFFFFDBDBFFFFD9D9FFFFD7D7FFFFDEDEFF666666F600000000000000000000
    000000000000818181F6FFF7F7FFFFEFEFFFFFF0F0FFFFF0F0FFFFF1F1FFFFF1
    F1FFFFF1F1FFFDF0F0FF9B9B9BFFFFF7F7FFFFEFEFFFFFEEEEFFFFEDEDFFFFEC
    ECFFFFEBEBFFFFEAEAFFFFEFEFFF929494FFFFEAEAFFFFE3E3FFFFE1E1FFFFDF
    DFFFFFDDDDFFFFDBDBFFFFD9D9FFFFE0E0FF676767F600000000000000000000
    000000000000838282F6FFFBFBFFFFF2F2FFFFF2F2FFFFF3F3FFFFF3F3FFFFF4
    F4FFFFF5F5FFFDF3F3FF9B9C9CFFFFFBFBFFFFF2F2FFFFF1F1FFFFF0F0FFFFEF
    EFFFFFEDEDFFFFECECFFFFF1F1FF929393FFFFEDEDFFFFE5E5FFFFE3E3FFFFE1
    E1FFFFDFDFFFFFDDDDFFFFDBDBFFFFE3E3FF676767F600000000000000000000
    000000000000828484F6FFFEFEFFFFF5F5FFFFF6F6FFFFF8F8FFFFF7F7FFFFF7
    F7FFFFF8F8FFFFF6F6FF9C9C9CFFFFFEFEFFFFF7F7FFFFF6F6FFFFF3F3FFFFF2
    F2FFFFF2F2FFFFEFEFFFFFF5F5FF949595FFFFF1F1FFFFE9E9FFFFE6E6FFFFE4
    E4FFFFE2E2FFFFDEDEFFFFDCDCFFFFE4E4FF686969F600000000000000000000
    000000000000888585F6FFFBFAFFFDF4F3FFFDF5F4FFFDF7F5FFFDF6F5FFFDF6
    F5FFFDF7F5FFFCF5F3FFA19E9DFFFFFCFAFFFDF6F4FFFDF4F3FFFDF3F2FFFDF0
    EFFFFDF0EFFFFDEDECFFFFF2F1FF999795FFFFEEECFFFDE7E6FFFDE5E3FFFDE3
    E1FFFDE1DFFFFDDFDCFFFDDDDAFFFFE3E1FF6B6C6CF600000000000000000000
    000000000000878684F6869AA6FF8796A1FF8697A1FF8697A1FF8697A1FF8897
    A1FF8897A2FF8999A3FF7C8D9DFF899AA3FF8696A1FF8796A1FF8596A2FF8695
    A2FF8496A2FF8596A2FF8898A4FF7C8D9DFF8798A5FF8396A2FF8394A2FF8295
    A3FF8294A3FF8194A3FF8195A3FF8499ABFF6C6B69F600000000000000000000
    000000000000898888F649BFFFFF4EBCFFFF51BEFFFF52BFFFFF53C0FFFF55C1
    FFFF55C1FFFF51BEFFFF0067D2FF58C5FFFF4FBDFFFF4FBCFFFF4CBAFFFF4AB7
    FFFF48B5FFFF46B3FFFF49B7FFFF0060CEFF44B1FFFF3EABFFFF3BA8FFFF39A6
    FFFF36A2FFFF34A0FFFF329EFFFF2CA1FFFF6E6D6DF600000000000000000000
    0000000000008B8988F64FBDFFFF55BBFFFF57BDFFFF58BEFFFF59BFFFFF5AC0
    FFFF5AC0FFFF59BFFEFF0167CDFF5FC5FFFF56BCFFFF55BBFFFF53B9FFFF51B7
    FFFF4FB5FFFF4CB2FFFF50B6FFFF0061C9FF4BB1FFFF44AAFFFF42A8FFFF3FA5
    FFFF3DA3FFFF3BA1FFFF399FFFFF32A0FFFF706F6BF600000000000000000000
    0000000000008D8988F652C0FFFF57BDFFFF59BFFFFF5AC0FFFF5CC2FFFF5CC2
    FFFF5EC4FFFF5BC1FEFF0369CDFF62C8FFFF58BEFFFF56BCFFFF54BAFFFF52B8
    FFFF50B6FFFF4DB3FFFF51B7FFFF0061C9FF4CB2FFFF44AAFFFF42A8FFFF40A6
    FFFF3EA4FFFF3BA1FFFF399FFFFF33A1FFFF726F6CF600000000000000000000
    0000000000008C8B89F653C1FFFF58BEFFFF5AC0FFFF5CC2FFFF5FC5FFFF5FC5
    FFFF60C6FFFF5DC3FEFF0268CDFF62C8FFFF59BFFFFF57BDFFFF55BBFFFF53B9
    FFFF50B6FFFF4EB4FFFF53B9FFFF0061C9FF4EB4FFFF45ABFFFF43A9FFFF40A6
    FFFF3EA4FFFF3CA2FFFF399FFFFF33A1FFFF71706DF600000000000000000000
    0000000000008D8C8AF652C0FFFF59BFFFFF5BC1FFFF5DC3FFFF5FC5FFFF61C7
    FFFF62C8FFFF60C6FEFF0167CDFF66CCFFFF5AC0FFFF58BEFFFF56BCFFFF53B9
    FFFF51B7FFFF4FB5FFFF52B8FFFF0061C9FF4DB3FFFF45ABFFFF43A9FFFF41A7
    FFFF3EA4FFFF3CA2FFFF3AA0FFFF32A0FFFF72716DF600000000000000000000
    0000000000008E8D8AF654C2FFFF59BFFFFF5CC2FFFF5EC4FFFF60C6FFFF64CA
    FFFF66CCFFFF61C7FEFF0167CDFF65CBFFFF5BC1FFFF58BEFFFF56BCFFFF54BA
    FFFF51B7FFFF4FB5FFFF52B8FFFF0061C9FF4DB3FFFF45ABFFFF43A9FFFF41A7
    FFFF3EA4FFFF3CA2FFFF3AA0FFFF32A0FFFF73726EF600000000000000000000
    0000000000008F8E8BF653C2FFFF59BFFFFF5CC3FFFF5EC4FFFF60C6FFFF62C9
    FFFF64CBFFFF60C7FFFF0167CEFF65CCFFFF5BC2FFFF58BEFFFF56BCFFFF54BB
    FFFF51B7FFFF4FB6FFFF52B9FFFF0061CAFF4DB4FFFF45ABFFFF43A9FFFF41A7
    FFFF3EA4FFFF3CA2FFFF3AA0FFFF32A0FFFF75726FF600000000000000000000
    0000000000008F8E8EF64EC1FFFF55C1FFFF57C3FFFF59C5FFFF5CC7FFFF5CC8
    FFFF5FCAFFFF5BC6FFFF0067D1FF5ECAFFFF56C2FFFF54BFFFFF51BEFFFF4FBA
    FFFF4DB8FFFF4BB6FFFF4DB8FFFF0060CDFF47B2FFFF41ACFFFF3DA8FFFF3BA6
    FFFF39A4FFFF37A2FFFF339FFFFF2EA0FFFF747373F600000000000000000000
    000000000000908E8DF6A5A09CFFA49D98FFA39C98FFA39C98FFA39C98FFA29B
    98FFA39C98FFA59F9AFF9E9793FFA59F9BFFA39C98FFA49D98FFA49B98FFA49C
    98FFA49C98FFA49C98FFA79F9AFF9E9892FFA69F9AFFA39D96FFA39D96FFA39C
    97FFA49D95FFA49C96FFA49C97FFA9A29BFF747371F600000000000000000000
    000000000000909090F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
    FFFFFFFFFFFFFFFFFFFF9F9F9EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
    FFFFFFFFFFFFFFFFFFFFFFFFFFFF969695FFFFFFFFFFFFFCFCFFFFFAFAFFFFF6
    F6FFFFF3F3FFFFF0EFFFFFEEEEFFFFF3F3FF737474F600000000000000000000
    0000000000008E8E8EF6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
    FFFFFFFFFFFFFDFDFDFF9B9B9BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
    FFFFFFFFFFFFFFFEFEFFFFFFFFFF929292FFFFFEFEFFFFF4F4FFFFF2F2FFFFEF
    EFFFFFECECFFFFE9E9FFFFE7E7FFFFEDEDFF727373F600000000000000000000
    0000000000008F8F8FF6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
    FFFFFFFFFFFFFDFDFDFF9B9B9BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
    FFFFFFFFFFFFFFFEFEFFFFFFFFFF929393FFFFFEFEFFFFF4F4FFFFF1F1FFFFEF
    EFFFFFECECFFFFE9E9FFFFE6E6FFFFEEEEFF747474F600000000000000000000
    000000000000909090F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
    FFFFFFFFFFFFFDFDFDFF9B9B9BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
    FFFFFFFFFFFFFFFEFEFFFFFFFFFF929393FFFFFFFFFFFFF5F5FFFFF1F1FFFFEE
    EEFFFFECECFFFFE9E9FFFFE6E6FFFFECECFF737575F600000000000000000000
    000000000000929292F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
    FFFFFFFFFFFFFDFDFDFF9B9B9BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
    FFFFFFFFFFFFFFFFFFFFFFFFFFFF929393FFFFFDFDFFFFF3F3FFFFF0F0FFFFEE
    EEFFFFEBEBFFFFE8E8FFFFE6E6FFFFEDEDFF747777F600000000000000000000
    000000000000919191F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
    FFFFFFFFFFFFFDFDFDFF9B9B9BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
    FFFFFFFEFEFFFFFCFCFFFFFFFFFF929393FFFFFCFCFFFFF2F2FFFFF0F0FFFFED
    EDFFFFEAEAFFFFE8E8FFFFE5E5FFFFEBEBFF767676F600000000000000000000
    000000000000929292F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
    FFFFFFFFFFFFFDFDFDFF9B9B9BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE
    FEFFFFFDFDFFFFFBFBFFFFFFFFFF929393FFFFFBFBFFFFF1F1FFFFEFEFFFFFEC
    ECFFFFEAEAFFFFE7E7FFFFE4E4FFFFEBEBFF787777F600000000000000000000
    000000000000959595F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
    FFFFFFFFFFFFFFFFFFFFA0A0A0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
    FFFFFFFFFFFFFFFFFFFFFFFFFFFF979898FFFFFFFFFFFFFAFAFFFFF8F8FFFFF4
    F4FFFFF3F3FFFFEFEFFFFFECECFFFFF2F2FF797B7BF600000000000000000000
    000000000000969696EE969696F6929292F6919191F6909090F68F8F8FF68E8E
    8EF68D8D8DF68E8E8EF68C8C8CF68C8C8CF68A8A8AF6898989F6888888F68787
    87F6858686F6858585F6838484F6818282F6828282F67F8080F67F7F7FF67E7F
    7FF67C7C7CF67B7B7BF67A7A7AF67B7C7CF67B7B7BEE00000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    000000000000000000000000000000000000000000000000000000000000FFFF
    FFFFFFFFFFFFC0000003C0000003C0000003C0000003C0000003C0000003C000
    0003C0000003C0000003C0000003C0000003C0000003C0000003C0000003C000
    0003C0000003C0000003C0000003C0000003C0000003C0000003C0000003C000
    0003C0000003C0000003C0000003C0000003C0000003FFFFFFFFFFFFFFFF2800
    0000300000006000000001002000000000008025000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000007E8080BF7A7B7BDD747676DD7476
    76DD737474DD747575DD727474DD717373DD727474DD6F7272DD717373DD6E71
    71DD6F7272DD6D7171DD6B6D6DDD6C6D6DDD6A6C6CDD6B6C6CDD696C6CDD6A6C
    6CDD676B6BDD696B6BDD666A6ADD656969DD656969DD646666DD646666DD6365
    65DD636565DD626565DD606464DD606464DD5F6363DD5F6464DD5E6262DD5E63
    63DD5D6060DD5D6262DD5B5E5EDD5C5F5FDD5E6262DD646464B6000000000000
    000000000000000000000000000000000000797C7CDCD2BFBFFFEFD3D3FFECD3
    D3FFEAD3D3FFEBD3D3FFEBD3D3FFEBD3D3FFEBD3D3FFEBD3D3FFEBD3D3FFEAD3
    D3FFEAD2D2FFE7D9D9FF989292FFF1E2E2FFEAD1D1FFEAD1D1FFE9D2D2FFE9D0
    D0FFE9D1D1FFE9CFCFFFE9CECEFFE9CFCFFFEACDCDFFE8CCCCFFF1E0E0FF9791
    91FFE6D5D5FFE8C9C9FFE8C8C8FFE9C7C7FFE7C6C6FFE7C5C5FFE7C4C4FFE8C3
    C3FFE8C2C2FFE8C1C1FFE8C0C0FFEBC1C1FFCAAAAAFF5E6262D2000000000000
    000000000000000000000000000000000000787979DCE3CECEFFFFE8E8FFFFE5
    E5FFFFE6E6FFFFE6E6FFFFE6E6FFFFE6E6FFFFE7E7FFFFE7E7FFFFE7E7FFFFE7
    E7FFFFE8E8FFF7EDEDFF9D9797FFFFEFEFFFFFE7E7FFFFE5E5FFFFE6E6FFFFE4
    E4FFFFE5E5FFFFE3E3FFFFE4E4FFFFE2E2FFFFE1E1FFFFE0E0FFFAE9E9FF9D96
    96FFF2E0E0FFFFDDDDFFFFDCDCFFFFDBDBFFFFDADAFFFFD9D9FFFFD8D8FFFFD7
    D7FFFFD6D6FFFFD4D4FFFFD3D3FFFFD5D5FFDFB9B9FF5B5E5ED2000000000000
    000000000000000000000000000000000000787A7ADCE3CDCDFFFFE6E6FFFFE5
    E5FFFFE5E5FFFFE6E6FFFFE6E6FFFFE6E6FFFFE6E6FFFFE6E6FFFFE6E6FFFFE6
    E6FFFFE6E6FFF7EDEDFF9D9797FFFAEFEFFFFFE5E5FFFFE5E5FFFFE5E5FFFFE4
    E4FFFFE4E4FFFFE3E3FFFFE2E2FFFFE2E2FFFFE1E1FFFFE0E0FFFAE9E9FF9D95
    95FFF2E0E0FFFFDCDCFFFFDBDBFFFFDADAFFFFD9D9FFFFD8D8FFFFD7D7FFFFD6
    D6FFFFD5D5FFFFD4D4FFFFD2D2FFFFD4D4FFDDB8B8FF5C5F5FD2000000000000
    000000000000000000000000000000000000787979DCE3D0D0FFFFE9E9FFFFE7
    E7FFFFE7E7FFFFE8E8FFFFE8E8FFFFE8E8FFFFE8E8FFFFE8E8FFFFE8E8FFFFE8
    E8FFFFE8E8FFF7EFEFFF9D9898FFFAF0F0FFFFE7E7FFFFE7E7FFFFE6E6FFFFE6
    E6FFFFE5E5FFFFE5E5FFFFE4E4FFFFE3E3FFFFE3E3FFFFE2E2FFFAE9E9FF9D96
    96FFF2E0E0FFFFDEDEFFFFDDDDFFFFDCDCFFFFDBDBFFFFDADAFFFFD9D9FFFFD7
    D7FFFFD6D6FFFFD5D5FFFFD4D4FFFFD6D6FFDDB9B9FF5C5F5FD2000000000000
    000000000000000000000000000000000000797A7ADCE3D0D0FFFFEBEBFFFFE9
    E9FFFFE9E9FFFFE9E9FFFFEAEAFFFFEAEAFFFFEAEAFFFFEAEAFFFFEAEAFFFFEA
    EAFFFFEAEAFFF7EFEFFF9D9898FFFAF0F0FFFFE9E9FFFFE9E9FFFFE8E8FFFFE8
    E8FFFFE7E7FFFFE6E6FFFFE6E6FFFFE5E5FFFFE4E4FFFFE3E3FFFAEAEAFF9D96
    96FFF2E1E1FFFFDFDFFFFFDEDEFFFFDDDDFFFFDCDCFFFFDBDBFFFFDADAFFFFD9
    D9FFFFD8D8FFFFD6D6FFFFD5D5FFFFD7D7FFDDBBBBFF5D6161D2000000000000
    000000000000000000000000000000000000787A7ADCE3D3D3FFFFEDEDFFFFEA
    EAFFFFEBEBFFFFEBEBFFFFECECFFFFECECFFFFECECFFFFECECFFFFECECFFFFEC
    ECFFFFECECFFF7F0F0FF9D9999FFFAF1F1FFFFEBEBFFFFEBEBFFFFEAEAFFFFEA
    EAFFFFE9E9FFFFE8E8FFFFE7E7FFFFE7E7FFFFE6E6FFFFE5E5FFFAEBEBFF9D97
    97FFF2E2E2FFFFE1E1FFFFE0E0FFFFDFDFFFFFDEDEFFFFDCDCFFFFDBDBFFFFDA
    DAFFFFD9D9FFFFD7D7FFFFD6D6FFFFD8D8FFDDBCBCFF5D6161D2000000000000
    0000000000000000000000000000000000007C7D7DDCE3D3D3FFFFEFEFFFFFEC
    ECFFFFEDEDFFFFEDEDFFFFEDEDFFFFEEEEFFFFEEEEFFFFEEEEFFFFEEEEFFFFEE
    EEFFFFEEEEFFF7F1F1FF9D9999FFFAF2F2FFFFEDEDFFFFECECFFFFECECFFFFEB
    EBFFFFEBEBFFFFEAEAFFFFE9E9FFFFE8E8FFFFE7E7FFFFE6E6FFFAEBEBFF9D97
    97FFF2E3E3FFFFE2E2FFFFE1E1FFFFE0E0FFFFDFDFFFFFDEDEFFFFDDDDFFFFDB
    DBFFFFDADAFFFFD9D9FFFFD7D7FFFFD9D9FFDEBDBDFF5E6262D2000000000000
    0000000000000000000000000000000000007C7D7DDCE3D6D6FFFFF0F0FFFFEE
    EEFFFFEFEFFFFFEFEFFFFFEFEFFFFFF0F0FFFFF0F0FFFFF0F0FFFFF0F0FFFFF0
    F0FFFFF0F0FFF7F1F1FF9D9A9AFFFAF3F3FFFFEFEFFFFFEEEEFFFFEEEEFFFFED
    EDFFFFECECFFFFECECFFFFEBEBFFFFEAEAFFFFE9E9FFFFE8E8FFFAECECFF9D97
    97FFF2E4E4FFFFE4E4FFFFE3E3FFFFE2E2FFFFE0E0FFFFDFDFFFFFDEDEFFFFDD
    DDFFFFDBDBFFFFDADAFFFFD9D9FFFFDADAFFDEBEBEFF5D6161D2000000000000
    0000000000000000000000000000000000007D7E7EDCE4D7D7FFFFF2F2FFFFF0
    F0FFFFF0F0FFFFF1F1FFFFF1F1FFFFF1F1FFFFF2F2FFFFF2F2FFFFF2F2FFFFF2
    F2FFFFF2F2FFF7F2F2FF9D9A9AFFFAF4F4FFFFF1F1FFFFF0F0FFFFEFEFFFFFEF
    EFFFFFEEEEFFFFEDEDFFFFECECFFFFECECFFFFEBEBFFFFEAEAFFFAEDEDFF9D98
    98FFF2E4E4FFFFE5E5FFFFE4E4FFFFE3E3FFFFE2E2FFFFE0E0FFFFDFDFFFFFDE
    DEFFFFDCDCFFFFDBDBFFFFDADAFFFFDBDBFFDEBFBFFF5F6363D2000000000000
    0000000000000000000000000000000000007D7E7EDCE4D7D7FFFFF4F4FFFFF2
    F2FFFFF2F2FFFFF3F3FFFFF3F3FFFFF3F3FFFFF4F4FFFFF4F4FFFFF4F4FFFFF4
    F4FFFFF4F4FFF7F2F2FF9D9B9BFFFAF4F4FFFFF2F2FFFFF2F2FFFFF1F1FFFFF1
    F1FFFFF0F0FFFFEFEFFFFFEEEEFFFFEDEDFFFFECECFFFFEBEBFFFAEDEDFF9D98
    98FFF2E6E6FFFFE7E7FFFFE5E5FFFFE4E4FFFFE3E3FFFFE2E2FFFFE0E0FFFFDF
    DFFFFFDEDEFFFFDCDCFFFFDBDBFFFFDCDCFFDEC0C0FF5E6262D2000000000000
    0000000000000000000000000000000000007E7F7FDCE4DADAFFFFF6F6FFFFF3
    F3FFFFF4F4FFFFF4F4FFFFF5F5FFFFF5F5FFFFF5F5FFFFF6F6FFFFF6F6FFFFF6
    F6FFFFF6F6FFF7F3F3FF9D9B9BFFFAF5F5FFFFF4F4FFFFF4F4FFFFF3F3FFFFF2
    F2FFFFF2F2FFFFF1F1FFFFF0F0FFFFEFEFFFFFEEEEFFFFEDEDFFFAEEEEFF9D98
    98FFF2E6E6FFFFE8E8FFFFE7E7FFFFE5E5FFFFE4E4FFFFE3E3FFFFE1E1FFFFE0
    E0FFFFDFDFFFFFDDDDFFFFDCDCFFFFDDDDFFDEC1C1FF626464D2000000000000
    0000000000000000000000000000000000007E7E7EDCE4DBDBFFFFF7F7FFFFF5
    F5FFFFF6F6FFFFF6F6FFFFF7F7FFFFF7F7FFFFF7F7FFFFF7F7FFFFF7F7FFFFF7
    F7FFFFF7F7FFF7F4F4FF9D9C9CFFFAF7F7FFFFF6F6FFFFF5F5FFFFF5F5FFFFF4
    F4FFFFF3F3FFFFF2F2FFFFF1F1FFFFF0F0FFFFEFEFFFFFEEEEFFFAEEEEFF9D99
    99FFF2E8E8FFFFE9E9FFFFE8E8FFFFE7E7FFFFE5E5FFFFE4E4FFFFE3E3FFFFE1
    E1FFFFE0E0FFFFDEDEFFFFDDDDFFFFDEDEFFDEC2C2FF616363D2000000000000
    0000000000000000000000000000000000007F7F7FDCE4DEDEFFFFF9F9FFFFF7
    F7FFFFF8F8FFFFF8F8FFFFF9F9FFFFF9F9FFFFF9F9FFFFF9F9FFFFF9F9FFFFF9
    F9FFFFF9F9FFF7F5F5FF9D9C9CFFFAF5F5FFFFF8F8FFFFF7F7FFFFF6F6FFFFF6
    F6FFFFF5F5FFFFF4F4FFFFF3F3FFFFF2F2FFFFF1F1FFFFF0F0FFFAF2F2FF9D99
    99FFF2E8E8FFFFF2F2FFFFE9E9FFFFE8E8FFFFE7E7FFFFE5E5FFFFE4E4FFFFE2
    E2FFFFE1E1FFFFDFDFFFFFDEDEFFFFDFDFFFDEC4C4FF636666D2000000000000
    000000000000000000000000000000000000858483FA9A9999FF9C9895FF9C98
    94FF9C9894FF9C9894FF9D9794FF9D9794FF9D9794FF9C9794FF9C9794FF9C97
    94FF9D9895FF9D9994FF9D9894FF9D9995FF9C9894FF9C9894FF9C9894FF9C98
    94FF9C9894FF9C9894FF9C9894FF9C9894FF9C9994FF9D9794FF9E9995FF9E99
    95FF9F9A94FF9E9895FF9D9894FF9D9894FF9D9894FF9E9994FF9D9994FF9D99
    94FF9D9994FF9D9994FF9D9994FF9E9A96FF928F8DFF6B6968F7000000000000
    000000000000000000000000000000000000898480FA58ACEAFF4ABBFFFF4CBB
    FFFF4DBCFFFF4EBCFFFF4FBDFFFF4FBEFFFF50BEFFFF50BFFFFF50BFFFFF50BF
    FFFF53C2FFFF4EBDFDFF006AD6FF55C3FFFF4EBCFFFF4DBBFFFF4CBAFFFF4BB8
    FFFF4AB7FFFF49B6FFFF46B5FFFF45B5FFFF44B2FFFF43B1FFFF46B5FFFF0064
    D3FF3DABFEFF3EADFFFF3CA9FFFF39A9FFFF38A6FFFF37A5FFFF35A3FFFF34A2
    FFFF32A1FFFF319EFFFF2E9EFFFF2D9DFFFF3C90E4FF6E6A65F7000000000000
    0000000000000000000000000000000000008A837FFA5EADE5FF51B9FFFF53B9
    FFFF54BAFFFF55BBFFFF56BCFFFF57BDFFFF57BDFFFF58BEFFFF58BEFFFF58BE
    FFFF59BFFFFF51BDF9FF056BCFFF5DC3FFFF55BBFFFF54BAFFFF53B9FFFF52B8
    FFFF51B7FFFF4FB5FFFF4EB4FFFF4DB3FFFF4BB1FFFF4AB0FFFF50B6FFFF0066
    CCFF3DA8FAFF45ACFFFF43A9FFFF42A8FFFF40A6FFFF3FA5FFFF3DA3FFFF3CA2
    FFFF3AA0FFFF399FFFFF379DFFFF359EFFFF4291DFFF6F6A64F7000000000000
    0000000000000000000000000000000000008B8580FA5FAEE5FF52BAFFFF55BB
    FFFF56BCFFFF57BDFFFF58BEFFFF58BEFFFF59BFFFFF59BFFFFF59BFFFFF59BF
    FFFF5BC1FFFF52BDF9FF056BCFFF5EC4FFFF56BCFFFF55BBFFFF54BAFFFF53B9
    FFFF52B8FFFF50B6FFFF4FB5FFFF4EB4FFFF4CB2FFFF4BB1FFFF4FB5FFFF0066
    CCFF3DA8FAFF47ADFFFF44AAFFFF42A8FFFF41A7FFFF3FA5FFFF3EA4FFFF3CA2
    FFFF3BA1FFFF399FFFFF389EFFFF359DFFFF4391DFFF706C66F7000000000000
    0000000000000000000000000000000000008B8480FA60AEE5FF53BBFFFF56BC
    FFFF57BDFFFF58BEFFFF59BFFFFF5AC0FFFF5BC1FFFF5BC1FFFF5BC1FFFF5BC1
    FFFF5EC4FFFF52BEF9FF046ACFFF61C7FFFF58BEFFFF57BDFFFF55BBFFFF54BA
    FFFF53B9FFFF51B7FFFF50B6FFFF4EB4FFFF4DB3FFFF4BB1FFFF50B6FFFF0065
    CCFF3EA9FAFF48AEFFFF44AAFFFF43A9FFFF41A7FFFF40A6FFFF3EA4FFFF3DA3
    FFFF3BA1FFFF3AA0FFFF389EFFFF369FFFFF4392DFFF706B65F7000000000000
    0000000000000000000000000000000000008D8783FA61AFE5FF54BCFFFF57BD
    FFFF58BEFFFF59BFFFFF5AC0FFFF5BC1FFFF5CC2FFFF5DC3FFFF5DC3FFFF5DC3
    FFFF60C6FFFF53BEF9FF056BCFFF62C8FFFF59BFFFFF58BEFFFF56BCFFFF55BB
    FFFF54BAFFFF52B8FFFF51B7FFFF4FB5FFFF4EB4FFFF4CB2FFFF52B8FFFF0167
    CCFF3EA9FAFF48AEFFFF45ABFFFF43A9FFFF42A8FFFF40A6FFFF3FA5FFFF3DA3
    FFFF3CA2FFFF3AA0FFFF389EFFFF369EFFFF4492DFFF716D67F7000000000000
    0000000000000000000000000000000000008D8682FA62B0E4FF55BDFFFF58BE
    FFFF59BFFFFF5AC0FFFF5CC2FFFF5DC3FFFF5EC4FFFF5FC5FFFF5FC5FFFF5FC5
    FFFF61C7FFFF54BFF9FF056BCFFF63C9FFFF5AC0FFFF59BFFFFF57BDFFFF56BC
    FFFF54BAFFFF53B9FFFF51B7FFFF50B6FFFF4EB4FFFF4DB3FFFF51B7FFFF0066
    CCFF3EA9FAFF49AFFFFF45ABFFFF43A9FFFF42A8FFFF40A6FFFF3FA5FFFF3DA3
    FFFF3CA2FFFF3AA0FFFF399FFFFF369EFFFF4492E0FF716C66F7000000000000
    0000000000000000000000000000000000008E8884FA62B1E4FF56BFFFFF58BE
    FFFF5AC0FFFF5BC1FFFF5DC3FFFF5EC4FFFF5FC5FFFF60C6FFFF61C7FFFF62C8
    FFFF63C9FFFF54BFF9FF056BCFFF64CAFFFF5BC1FFFF59BFFFFF58BEFFFF56BC
    FFFF55BBFFFF53B9FFFF52B8FFFF50B6FFFF4FB5FFFF4DB3FFFF51B7FFFF0066
    CCFF3FA9FAFF49AFFFFF45ABFFFF44AAFFFF42A8FFFF41A7FFFF3FA5FFFF3EA4
    FFFF3CA2FFFF3AA0FFFF399FFFFF369EFFFF4493E0FF716C66F7000000000000
    0000000000000000000000000000000000008E8783FA63B1E6FF56BEFFFF59BF
    FFFF5AC0FFFF5CC2FFFF5EC4FFFF5FC5FFFF60C6FFFF62C8FFFF62C8FFFF62C8
    FFFF64CAFFFF54BFF9FF056BCFFF65CBFFFF5DC3FFFF5AC0FFFF58BEFFFF57BD
    FFFF55BBFFFF54BAFFFF52B8FFFF50B6FFFF4FB5FFFF4DB3FFFF53B9FFFF0066
    CCFF3FA9FAFF49AFFFFF45ABFFFF44AAFFFF42A8FFFF41A7FFFF3FA5FFFF3EA4
    FFFF3CA2FFFF3BA1FFFF399FFFFF379FFFFF4493E0FF746F69F7000000000000
    0000000000000000000000000000000000008F8985FA63B1E5FF57C0FFFF59BF
    FFFF5BC1FFFF5CC2FFFF5EC4FFFF60C6FFFF61C7FFFF64CAFFFF65CBFFFF65CB
    FFFF65CBFFFF55C0F9FF046ACFFF65CBFFFF5CC2FFFF5AC0FFFF59BFFFFF57BD
    FFFF55BBFFFF54BAFFFF52B8FFFF51B7FFFF4FB5FFFF4DB3FFFF52B8FFFF0066
    CCFF3FA9FAFF49AFFFFF45ABFFFF44AAFFFF42A8FFFF41A7FFFF3FA5FFFF3EA4
    FFFF3CA2FFFF3BA1FFFF399FFFFF379FFFFF4593E0FF736F68F7000000000000
    0000000000000000000000000000000000008F8884FA63B2E5FF57C0FFFF59BF
    FFFF5BC1FFFF5CC2FFFF5EC4FFFF5FC5FFFF61C7FFFF62C8FFFF65CBFFFF63C9
    FFFF65CBFFFF55C0F9FF046ACFFF65CBFFFF5CC2FFFF5AC0FFFF59BFFFFF57BD
    FFFF55BBFFFF54BAFFFF52B8FFFF51B7FFFF4FB5FFFF4DB3FFFF52B8FFFF0066
    CCFF3FA9FAFF49AFFFFF45ABFFFF44AAFFFF42A8FFFF41A7FFFF3FA5FFFF3EA4
    FFFF3CA2FFFF3BA1FFFF399FFFFF379FFFFF4593E0FF756F6AF7000000000000
    000000000000000000000000000000000000908A85FA63B2E5FF56BEFFFF59BF
    FFFF5AC0FFFF5CC2FFFF5DC3FFFF5FC5FFFF60C6FFFF61C7FFFF62C8FFFF62C8
    FFFF64CAFFFF54BFF9FF056BCFFF65CBFFFF5BC1FFFF5AC0FFFF58BEFFFF57BD
    FFFF55BBFFFF54BAFFFF52B8FFFF50B6FFFF4FB5FFFF4DB3FFFF53B9FFFF0066
    CCFF3FA9FAFF49AFFFFF45ABFFFF44AAFFFF42A8FFFF41A7FFFF3FA5FFFF3EA4
    FFFF3CA2FFFF3BA1FFFF399FFFFF379FFFFF4593DFFF746F69F7000000000000
    000000000000000000000000000000000000908B88FA5FB3ECFF50C1FFFF52C1
    FFFF55C4FFFF56C5FFFF59C7FFFF59C8FFFF5AC9FFFF5CCAFFFF5CCAFFFF5CCA
    FFFF5ECDFFFF51BFFCFF006AD5FF5DCDFFFF56C5FFFF53C2FFFF53C2FFFF50BF
    FFFF4FBEFFFF4DBCFFFF4CBBFFFF4AB9FFFF48B6FFFF47B6FFFF4AB9FFFF0065
    D3FF3BA9FEFF42B0FFFF3EADFFFF3DACFFFF3AA9FFFF3AA9FFFF37A6FFFF35A4
    FFFF34A3FFFF32A1FFFF31A0FFFF2D9EFFFF3F93E6FF74706CF7000000000000
    0000000000000000000000000000000000008E8D8BFA969898FF9A9998FF9A98
    97FF9A9897FF9A9897FF9A9997FF9A9997FF999997FF999997FF999997FF9999
    97FF9A9A98FF9C9998FF9A9998FF9C9B98FF9A9897FF9A9897FF9A9897FF9A98
    97FF9B9997FF999997FF9A9997FF9A9997FF9A9A97FF9A9897FF9C9A98FF9A99
    98FF9C9A98FF9A9998FF9A9997FF9A9997FF9A9A97FF9A9897FF9A9897FF9A99
    97FF9B9997FF9B9997FF9A9997FF9A9A99FF929192FF72706FF7000000000000
    000000000000000000000000000000000000868686DCE6E6E6FFFFFFFFFFFFFF
    FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
    FFFFFFFFFFFFF7F7F7FF9D9E9EFFFAF9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
    FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFFAF8F8FF9D9C
    9CFFF2EFEFFFFFF7F7FFFFF5F5FFFFF3F3FFFFF1F1FFFFEFEFFFFFEEEEFFFFEC
    ECFFFFEAEAFFFFE8E8FFFFE6E6FFFFE8E8FFE1CBCBFF6C6E6ED2000000000000
    000000000000000000000000000000000000888888DCE6E6E6FFFFFFFFFFFFFF
    FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
    FFFFFFFFFFFFF7F7F7FF9D9E9EFFFAF9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
    FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFFAF8F8FF9D9C
    9CFFF2EFEFFFFFF7F7FFFFF5F5FFFFF3F3FFFFF1F1FFFFEFEFFFFFEEEEFFFFEC
    ECFFFFEAEAFFFFE8E8FFFFE6E6FFFFE8E8FFE0CBCBFF6C6D6DD2000000000000
    000000000000000000000000000000000000878787DCE6E6E6FFFFFFFFFFFFFF
    FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
    FFFFFFFFFFFFF7F7F7FF9D9E9EFFFAF9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
    FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFFAF8F8FF9D9C
    9CFFF2EFEFFFFFF7F7FFFFF5F5FFFFF3F3FFFFF1F1FFFFEFEFFFFFEEEEFFFFEC
    ECFFFFEAEAFFFFE8E8FFFFE6E6FFFFE8E8FFE0CBCBFF6E6F6FD2000000000000
    0000000000000000000000000000000000008B8B8BDCE6E6E6FFFFFFFFFFFFFF
    FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
    FFFFFFFFFFFFF7F7F7FF9D9E9EFFFAF9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
    FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFFAF8F8FF9D9C
    9CFFF2EFEFFFFFF7F7FFFFF5F5FFFFF3F3FFFFF1F1FFFFEFEFFFFFEEEEFFFFEC
    ECFFFFEAEAFFFFE8E8FFFFE6E6FFFFE8E8FFE0CACAFF6E6F6FD2000000000000
    0000000000000000000000000000000000008C8C8CDCE6E6E6FFFFFFFFFFFFFF
    FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
    FFFFFFFFFFFFF7F7F7FF9D9E9EFFFAF9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
    FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAF8F8FF9D9C
    9CFFF2EFEFFFFFF6F6FFFFF5F5FFFFF3F3FFFFF1F1FFFFEFEFFFFFEEEEFFFFEC
    ECFFFFEAEAFFFFE8E8FFFFE6E6FFFFE8E8FFE0CACAFF6E6F6FD2000000000000
    0000000000000000000000000000000000008C8C8CDCE7E7E7FFFFFFFFFFFFFF
    FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
    FFFFFFFFFFFFF7F7F7FF9D9E9EFFFAF9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
    FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFFFFDFDFFFAF7F7FF9D9C
    9CFFF2EFEFFFFFF6F6FFFFF4F4FFFFF3F3FFFFF1F1FFFFEFEFFFFFEDEDFFFFEB
    EBFFFFEAEAFFFFE8E8FFFFE6E6FFFFE7E7FFE2CACAFF6E7070D2000000000000
    0000000000000000000000000000000000008C8C8CDCE7E7E7FFFFFFFFFFFFFF
    FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
    FFFFFFFFFFFFF7F7F7FF9D9E9EFFFAF9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
    FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFFFFDFDFFFAF7F7FF9D9C
    9CFFF2EEEEFFFFF6F6FFFFF4F4FFFFF2F2FFFFF0F0FFFFEFEFFFFFEDEDFFFFEB
    EBFFFFE9E9FFFFE8E8FFFFE6E6FFFFE7E7FFE1CACAFF6E7070D2000000000000
    0000000000000000000000000000000000008D8D8DDCE7E7E7FFFFFFFFFFFFFF
    FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
    FFFFFFFFFFFFF7F7F7FF9D9E9EFFFAF9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
    FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFFFFCFCFFFAF7F7FF9D9C
    9CFFF2EEEEFFFFF5F5FFFFF4F4FFFFF2F2FFFFF0F0FFFFEEEEFFFFEDEDFFFFEB
    EBFFFFE9E9FFFFE7E7FFFFE5E5FFFFE7E7FFE1CACAFF6F7272D2000000000000
    0000000000000000000000000000000000008D8D8DDCE7E7E7FFFFFFFFFFFFFF
    FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
    FFFFFFFFFFFFF7F7F7FF9D9E9EFFFAF9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
    FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFFFFDFDFFFFFBFBFFFAF7F7FF9D9C
    9CFFF2EDEDFFFFF5F5FFFFF3F3FFFFF1F1FFFFEFEFFFFFEEEEFFFFECECFFFFEA
    EAFFFFE9E9FFFFE7E7FFFFE5E5FFFFE6E6FFE1CACAFF6F7272D2000000000000
    0000000000000000000000000000000000008E8E8EDCE7E7E7FFFFFFFFFFFFFF
    FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
    FFFFFFFFFFFFF7F7F7FF9D9E9EFFFAF9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
    FFFFFFFFFFFFFFFFFFFFFFFEFEFFFFFEFEFFFFFCFCFFFFFAFAFFFAF7F7FF9D9C
    9CFFF2EDEDFFFFF4F4FFFFF2F2FFFFF1F1FFFFEFEFFFFFEDEDFFFFEBEBFFFFEA
    EAFFFFE8E8FFFFE6E6FFFFE5E5FFFFE6E6FFE1CACAFF707373D2000000000000
    0000000000000000000000000000000000008E8E8EDCE6E6E6FFFFFFFFFFFFFF
    FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
    FFFFFFFFFFFFF7F7F7FF9D9E9EFFFAF9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
    FFFFFFFFFFFFFFFFFFFFFFFEFEFFFFFDFDFFFFFBFBFFFFFAFAFFFAF6F6FF9D9B
    9BFFF2EDEDFFFFF3F3FFFFF2F2FFFFF0F0FFFFEEEEFFFFEDEDFFFFEBEBFFFFE9
    E9FFFFE8E8FFFFE6E6FFFFE4E4FFFFE5E5FFE1CBCBFF707373D2000000000000
    0000000000000000000000000000000000008E8E8EDCE8E8E8FFFFFFFFFFFFFF
    FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
    FFFFFFFFFFFFF7F7F7FF9D9E9EFFFAF9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
    FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFFFFFCFCFFFFFCFCFFFAF7F7FF9D9C
    9CFFF2EEEEFFFFF4F4FFFFF4F4FFFFF1F1FFFFEFEFFFFFEFEFFFFFECECFFFFEA
    EAFFFFE9E9FFFFE7E7FFFFE5E5FFFFE7E7FFE3CBCBFF727474D2000000000000
    000000000000000000000000000000000000929292DCDADADAFFF0F0F0FFEEEE
    EEFFEEEEEEFFEEEEEEFFEEEEEEFFEEEEEEFFEEEEEEFFEFEFEFFFEDEDEDFFEDED
    EDFFEDEDEDFFE8E8E8FF999999FFF6F5F5FFEDEDEDFFEDEDEDFFEDEDEDFFEDED
    EDFFEDEDEDFFEDECECFFEDEAEAFFEDE9E9FFECE7E7FFECE7E7FFF5F2F2FF9897
    97FFE8E3E3FFECE0E0FFEDDFDFFFEBDFDFFFEBDCDCFFEBDCDCFFEBD9D9FFEBD8
    D8FFEBD7D7FFEBD5D5FFECD4D4FFEDD4D4FFD2BDBDFF747777D2000000000000
    000000000000000000000000000000000000989898BF929292DD909090DD8F8F
    8FDD8B8B8BDD8C8C8CDD8A8A8ADD8A8A8ADD8A8A8ADD8A8A8ADD898989DD8989
    89DD888888DD878787DD878787DD848484DD848484DD838383DD828282DD8383
    83DD818181DD828282DD808181DD818181DD7E8080DD7D7E7EDD7E7E7EDD7B7C
    7CDD7B7C7CDD7B7B7BDD7B7B7BDD7A7B7BDD797A7ADD797B7BDD787979DD787A
    7ADD767878DD767979DD747676DD747676DD767979DD7B7C7CB6000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    000000000000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000E000
    000000070000E000000000070000E000000000070000E000000000070000E000
    000000070000E000000000070000E000000000070000E000000000070000E000
    000000070000E000000000070000E000000000070000E000000000070000E000
    000000070000E000000000070000E000000000070000E000000000070000E000
    000000070000E000000000070000E000000000070000E000000000070000E000
    000000070000E000000000070000E000000000070000E000000000070000E000
    000000070000E000000000070000E000000000070000E000000000070000E000
    000000070000E000000000070000E000000000070000E000000000070000E000
    000000070000E000000000070000E000000000070000E000000000070000E000
    000000070000E000000000070000E000000000070000E000000000070000E000
    000000070000E000000000070000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFF
    FFFFFFFF0000}
  OldCreateOrder = False
  Position = poOwnerFormCenter
  OnCreate = FormCreate
  OnHide = FormHide
  DesignSize = (
    457
    348)
  PixelsPerInch = 96
  TextHeight = 13
  object lblProject: TLabel
    Left = 9
    Top = 11
    Width = 38
    Height = 13
    Caption = 'Project:'
    FocusControl = cbxProject
  end
  object lblPhase: TLabel
    Left = 9
    Top = 39
    Width = 33
    Height = 13
    Caption = 'Phase:'
    FocusControl = cbxPhase
  end
  object lblType: TLabel
    Left = 8
    Top = 67
    Width = 28
    Height = 13
    Caption = 'Type:'
  end
  object lblDescription: TLabel
    Left = 8
    Top = 96
    Width = 57
    Height = 13
    Caption = 'Description:'
  end
  object lblAttachments: TLabel
    Left = 8
    Top = 184
    Width = 65
    Height = 13
    Caption = 'Attachments:'
  end
  object lblTimes: TLabel
    Left = 8
    Top = 252
    Width = 31
    Height = 13
    Caption = 'Times:'
  end
  object lblUntil: TLabel
    Left = 248
    Top = 252
    Width = 10
    Height = 13
    Caption = 'to'
  end
  object lblDuration: TLabel
    Left = 8
    Top = 277
    Width = 45
    Height = 13
    Caption = 'Duration:'
  end
  object lblAdjusted: TLabel
    Left = 248
    Top = 277
    Width = 47
    Height = 13
    Caption = 'Adjusted:'
  end
  object cbxProject: TComboBoxEx
    Left = 84
    Top = 8
    Width = 325
    Height = 22
    AutoCompleteOptions = [acoAutoSuggest, acoAutoAppend, acoUpDownKeyDropsList]
    ItemsEx = <>
    Style = csExDropDownList
    Anchors = [akLeft, akTop, akRight]
    TabOrder = 0
    Images = dmMain.imlMain
    DropDownCount = 16
  end
  object cbxPhase: TComboBoxEx
    Left = 84
    Top = 36
    Width = 325
    Height = 22
    AutoCompleteOptions = [acoAutoSuggest, acoAutoAppend, acoUpDownKeyDropsList]
    ItemsEx = <
      item
        Caption = '(none yet)'
        ImageIndex = 500
        SelectedImageIndex = 500
      end>
    Style = csExDropDownList
    Anchors = [akLeft, akTop, akRight]
    TabOrder = 2
    Images = dmMain.imlMain
    DropDownCount = 16
  end
  object cbxType: TComboBox
    Left = 84
    Top = 64
    Width = 365
    Height = 21
    Style = csDropDownList
    Anchors = [akLeft, akTop, akRight]
    TabOrder = 4
    ExplicitWidth = 326
  end
  object mmoDescription: TMemo
    Left = 84
    Top = 91
    Width = 365
    Height = 89
    Anchors = [akLeft, akTop, akRight]
    ScrollBars = ssVertical
    TabOrder = 5
  end
  object lvwAttachments: TListView
    Left = 84
    Top = 186
    Width = 365
    Height = 55
    Anchors = [akLeft, akTop, akRight]
    Columns = <>
    MultiSelect = True
    ReadOnly = True
    PopupMenu = pumAttachments
    SmallImages = dmMain.imlFileTypes
    TabOrder = 6
    ViewStyle = vsSmallIcon
    OnDblClick = lvwAttachmentsDblClick
    OnDeletion = lvwAttachmentsDeletion
    ExplicitWidth = 326
  end
  object dtpFromDate: TDateTimePicker
    Left = 84
    Top = 247
    Width = 93
    Height = 21
    Date = 41848.000000000000000000
    Time = 41848.000000000000000000
    TabOrder = 7
  end
  object dtpFromTime: TDateTimePicker
    Left = 183
    Top = 247
    Width = 59
    Height = 21
    Date = 36892.568868645830000000
    Format = 'H:mm'
    Time = 36892.568868645830000000
    Kind = dtkTime
    TabOrder = 8
  end
  object dtpUntilDate: TDateTimePicker
    Left = 264
    Top = 247
    Width = 117
    Height = 21
    Date = 41848.000000000000000000
    Time = 41848.000000000000000000
    ShowCheckbox = True
    TabOrder = 9
    OnClick = dtpUntilDateClick
    OnEnter = dtpUntilDateEnter
  end
  object dtpUntilTime: TDateTimePicker
    Left = 387
    Top = 247
    Width = 62
    Height = 21
    Date = 36892.568868645830000000
    Format = 'H:mm'
    Time = 36892.568868645830000000
    Checked = False
    Enabled = False
    Kind = dtkTime
    TabOrder = 10
  end
  object edtDuration: TEdit
    Left = 84
    Top = 274
    Width = 158
    Height = 21
    Color = clBtnFace
    ReadOnly = True
    TabOrder = 11
  end
  object dtpAdjusted: TDateTimePicker
    Left = 301
    Top = 274
    Width = 148
    Height = 21
    Date = 36892.000000000000000000
    Format = 'H:mm'
    Time = 36892.000000000000000000
    ShowCheckbox = True
    Checked = False
    Kind = dtkTime
    TabOrder = 12
  end
  object btnProjectList: TButton
    Left = 415
    Top = 8
    Width = 34
    Height = 22
    Anchors = [akTop, akRight]
    ImageAlignment = iaCenter
    ImageIndex = 125
    Images = dmMain.imlMain
    TabOrder = 1
  end
  object btnPhaseList: TButton
    Left = 415
    Top = 36
    Width = 34
    Height = 22
    Anchors = [akTop, akRight]
    ImageAlignment = iaCenter
    ImageIndex = 956
    Images = dmMain.imlMain
    TabOrder = 3
  end
  object btnOK: TButton
    Left = 293
    Top = 315
    Width = 75
    Height = 25
    Anchors = [akRight, akBottom]
    Caption = 'OK'
    Default = True
    ModalResult = 1
    TabOrder = 13
    OnClick = btnOKClick
    ExplicitTop = 336
  end
  object btnCancel: TButton
    Left = 374
    Top = 315
    Width = 75
    Height = 25
    Anchors = [akRight, akBottom]
    Cancel = True
    Caption = 'Cancel'
    ModalResult = 2
    TabOrder = 14
    ExplicitTop = 336
  end
  object pumAttachments: TPopupMenu
    Images = dmMain.imlMain
    Left = 120
    Top = 192
    object Addfile1: TMenuItem
      Action = actAddFile
    end
    object actOpenAttachment1: TMenuItem
      Action = actOpenAttachment
    end
    object Remove1: TMenuItem
      Action = actRemoveAttachment
    end
    object miSep1: TMenuItem
      Caption = '-'
    end
    object SelectAll1: TMenuItem
      Action = actSelectAll
    end
  end
  object aclActivity: TActionList
    Images = dmMain.imlMain
    Left = 408
    Top = 192
    object actAddFile: TAction
      Category = 'Attachments'
      Caption = 'Add file...'
      ImageIndex = 1480
      OnExecute = actAddFileExecute
    end
    object actOpenAttachment: TAction
      Category = 'Attachments'
      Caption = 'Open...'
      ImageIndex = 1480
      OnExecute = actOpenAttachmentExecute
      OnUpdate = actOpenAttachmentUpdate
    end
    object actRemoveAttachment: TAction
      Category = 'Attachments'
      Caption = 'Remove'
      ImageIndex = 1481
      OnExecute = actRemoveAttachmentExecute
      OnUpdate = actRemoveAttachmentUpdate
    end
    object actSelectAll: TAction
      Category = 'Attachments'
      Caption = 'Select all'
      ShortCut = 16449
      OnExecute = actSelectAllExecute
      OnUpdate = actSelectAllUpdate
    end
  end
  object BalloonHint: TBalloonHint
    Images = dmMain.imlMain
    HideAfter = 10000
    Left = 24
    Top = 296
  end
  object tmrDuration: TTimer
    Interval = 60000
    OnTimer = tmrDurationTimer
    Left = 96
    Top = 296
  end
end

Added Olam/src/F_Activity.pas.













































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
unit F_Activity;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ComCtrls,
  M_Main, Vcl.Menus, System.Actions, Vcl.ActnList, Vcl.StdActns, Vcl.ExtCtrls;

type
  TfrmActivity = class(TForm)
    cbxProject: TComboBoxEx;
    lblProject: TLabel;
    lblPhase: TLabel;
    cbxPhase: TComboBoxEx;
    lblType: TLabel;
    cbxType: TComboBox;
    lblDescription: TLabel;
    mmoDescription: TMemo;
    lvwAttachments: TListView;
    lblAttachments: TLabel;
    lblTimes: TLabel;
    dtpFromDate: TDateTimePicker;
    lblUntil: TLabel;
    dtpFromTime: TDateTimePicker;
    dtpUntilDate: TDateTimePicker;
    dtpUntilTime: TDateTimePicker;
    lblDuration: TLabel;
    edtDuration: TEdit;
    lblAdjusted: TLabel;
    dtpAdjusted: TDateTimePicker;
    btnProjectList: TButton;
    btnPhaseList: TButton;
    btnOK: TButton;
    btnCancel: TButton;
    pumAttachments: TPopupMenu;
    aclActivity: TActionList;
    actAddFile: TAction;
    actRemoveAttachment: TAction;
    actOpenAttachment: TAction;
    Addfile1: TMenuItem;
    actOpenAttachment1: TMenuItem;
    Remove1: TMenuItem;
    miSep1: TMenuItem;
    SelectAll1: TMenuItem;
    actSelectAll: TAction;
    BalloonHint: TBalloonHint;
    tmrDuration: TTimer;
    procedure dtpUntilDateClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure lvwAttachmentsDblClick(Sender: TObject);
    procedure lvwAttachmentsDeletion(Sender: TObject; Item: TListItem);
    procedure actAddFileExecute(Sender: TObject);
    procedure actOpenAttachmentExecute(Sender: TObject);
    procedure actRemoveAttachmentExecute(Sender: TObject);
    procedure actSelectAllExecute(Sender: TObject);
    procedure actSelectAllUpdate(Sender: TObject);
    procedure actOpenAttachmentUpdate(Sender: TObject);
    procedure actRemoveAttachmentUpdate(Sender: TObject);
    procedure btnOKClick(Sender: TObject);
    procedure FormHide(Sender: TObject);
    procedure dtpUntilDateEnter(Sender: TObject);
    procedure tmrDurationTimer(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    procedure UpdateDuration;
  end;

var
  frmActivity: TfrmActivity;

implementation
uses
  DateUtils,
  ShellAPI;

{$R *.dfm}

{ ---------------------------------------------------------------------------- }
procedure TfrmActivity.FormCreate(Sender: TObject);
begin
  cbxPhase.ItemIndex := 0;
  actAddFile.ShortCut := VK_INSERT;
  actRemoveAttachment.ShortCut := VK_DELETE;
  dtpFromDate.Date := Date;
  dtpFromTime.Time := Now;
  dtpUntilDate.Date := Date;
  dtpUntilDate.Checked := False;
  dtpUntilTime.Time := Now;
end {TfrmActivity.FormCreate};

{ ---------------------------------------------------------------------------- }
procedure TfrmActivity.FormHide(Sender: TObject);
begin
  BalloonHint.HideHint;
end {TfrmActivity.FormHide};

{ ---------------------------------------------------------------------------- }
procedure TfrmActivity.lvwAttachmentsDblClick(Sender: TObject);
begin
  if Assigned(lvwAttachments.Selected) then
    actOpenAttachment.Execute
  else
    actAddFile.Execute;
end {TfrmActivity.lvwAttachmentsDblClick};

{ ---------------------------------------------------------------------------- }
procedure TfrmActivity.lvwAttachmentsDeletion(Sender: TObject; Item: TListItem);
begin
  if Assigned(Item.Data) and TObject(Item.Data).InheritsFrom(TObject) then
    TObject(Item.Data).Free;
end {TfrmActivity.lvwAttachmentsDeletion};

{ ---------------------------------------------------------------------------- }
procedure TfrmActivity.tmrDurationTimer(Sender: TObject);
begin
  UpdateDuration;
end;

{ ---------------------------------------------------------------------------- }
procedure TfrmActivity.UpdateDuration;
var
  dtStart, dtStop: TDateTime;
begin
  dtStart := Trunc(dtpFromDate.Date) + Frac(dtpFromTime.Time);
  if not dtpUntilDate.Checked then begin
    dtStop := Now;
  end else begin
    dtStop := Trunc(dtpUntilDate.Date) + Frac(dtpUntilTime.Time);
  end;
  edtDuration.Text := IntToStr(MinutesBetween(dtStop, dtStart));
end {TfrmActivity.UpdateDuration};

{ ---------------------------------------------------------------------------- }
procedure TfrmActivity.actAddFileExecute(Sender: TObject);
var
  FileName: string;
  Item: TListItem;
begin
  if dmMain.dlgOpenFile.Execute then begin
    for FileName in dmMain.dlgOpenFile.Files do begin
      Item := lvwAttachments.Items.Add;
      Item.Caption := ExtractFileName(FileName);
      Item.ImageIndex := dmMain.ImageIndexOfFileType(FileName);
      try
        Item.Data := TFileStream.Create(FileName, fmOpenRead or fmShareDenyNone);
      except
        Item.Delete;
        raise;
      end;
    end;
  end;
end {TfrmActivity.actAddFileExecute};

{ ---------------------------------------------------------------------------- }
procedure TfrmActivity.actOpenAttachmentExecute(Sender: TObject);
var
  i: Integer;
begin
  for i := lvwAttachments.Items.Count - 1 downto 0 do begin
    if lvwAttachments.Items[i].Selected and (TObject(lvwAttachments.Items[i].Data) is TFileStream) then begin
      ShellExecute(Application.Handle, nil, PChar(TFileStream(lvwAttachments.Items[i].Data).FileName), nil, nil, SW_SHOWDEFAULT);
    end;
  end;
end {TfrmActivity.actOpenAttachmentExecute};

{ ---------------------------------------------------------------------------- }
procedure TfrmActivity.actOpenAttachmentUpdate(Sender: TObject);
begin
  actOpenAttachment.Enabled := Assigned(lvwAttachments.Selected);
end {TfrmActivity.actOpenAttachmentUpdate};

{ ---------------------------------------------------------------------------- }
procedure TfrmActivity.actRemoveAttachmentExecute(Sender: TObject);
var
  i: Integer;
begin
  lvwAttachments.Items.BeginUpdate;
  try
    for i := lvwAttachments.Items.Count - 1 downto 0 do begin
      if lvwAttachments.Items[i].Selected then
        lvwAttachments.Items[i].Delete;
    end;
  finally
    lvwAttachments.Items.EndUpdate;
  end;
end {TfrmActivity.actRemoveAttachmentExecute};

{ ---------------------------------------------------------------------------- }
procedure TfrmActivity.actRemoveAttachmentUpdate(Sender: TObject);
begin
  actRemoveAttachment.Enabled := Assigned(lvwAttachments.Selected);
end {TfrmActivity.actRemoveAttachmentUpdate};

{ ---------------------------------------------------------------------------- }
procedure TfrmActivity.actSelectAllExecute(Sender: TObject);
begin
  lvwAttachments.SelectAll;
end {TfrmActivity.actSelectAllExecute};

{ ---------------------------------------------------------------------------- }
procedure TfrmActivity.actSelectAllUpdate(Sender: TObject);
begin
  actSelectAll.Enabled := lvwAttachments.Items.Count > 0;
end {TfrmActivity.actSelectAllUpdate};

{ ---------------------------------------------------------------------------- }
procedure TfrmActivity.btnOKClick(Sender: TObject);
var
  ErrorControl: TControl;
  ErrorMsg: string;
begin
  BalloonHint.HideHint;

  ErrorControl := btnOK;
  if cbxProject.ItemIndex = -1 then begin
    ErrorControl := cbxProject;
    ErrorMsg := 'Please choose a project, or create a new one.';
  end;
  if ErrorMsg <> '' then begin
    BalloonHint.Title := 'Cannot save activity';
    BalloonHint.Description := ErrorMsg + sLineBreak;
    BalloonHint.ImageIndex := 2005; // warning
    BalloonHint.Delay := 0;
    BalloonHint.ShowHint(ErrorControl);
    ModalResult := mrNone;
  end else begin
    ModalResult := mrOk;
  end;
end {TfrmActivity.btnOKClick};

{ ---------------------------------------------------------------------------- }
procedure TfrmActivity.dtpUntilDateClick(Sender: TObject);
begin
  dtpUntilTime.Enabled := dtpUntilDate.Checked;
end {TfrmActivity.dtpUntilDateClick};

{ ---------------------------------------------------------------------------- }
procedure TfrmActivity.dtpUntilDateEnter(Sender: TObject);
begin
  dtpUntilDate.MinDate := dtpFromDate.Date;
end {TfrmActivity.dtpUntilDateEnter};

end.

Changes to Olam/src/F_Contact.dfm.

857
858
859
860
861
862
863

864
865
866
867
868
869
870

871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889

890
891

892
893
894
895
896

897
898

899
900
901
902
903

904
905

906
907
908
909
910

911
912

913
914
915
916
917

918
919

920
921
922
923
924
925
926
...
997
998
999
1000
1001
1002
1003

1004
1005
1006
1007
1008
1009
1010
  TextHeight = 13
  object lblCode: TLabel
    Left = 8
    Top = 11
    Width = 29
    Height = 13
    Caption = 'Code:'

  end
  object lblName: TLabel
    Left = 8
    Top = 38
    Width = 31
    Height = 13
    Caption = 'Name:'

  end
  object imgPhoto: TImage
    Left = 305
    Top = 169
    Width = 105
    Height = 105
    Anchors = [akRight, akBottom]
    Center = True
    Proportional = True
    Stretch = True
    Transparent = True
    OnClick = imgPhotoClick
  end
  object lblOrganisation: TLabel
    Left = 8
    Top = 65
    Width = 65
    Height = 13
    Caption = 'Organisation:'

  end
  object Label1: TLabel

    Left = 8
    Top = 93
    Width = 32
    Height = 13
    Caption = 'E-mail:'

  end
  object Label2: TLabel

    Left = 8
    Top = 120
    Width = 34
    Height = 13
    Caption = 'Phone:'

  end
  object Label3: TLabel

    Left = 8
    Top = 147
    Width = 34
    Height = 13
    Caption = 'Mobile:'

  end
  object Label4: TLabel

    Left = 8
    Top = 171
    Width = 45
    Height = 13
    Caption = 'Remarks:'

  end
  object Label5: TLabel

    Left = 267
    Top = 171
    Width = 32
    Height = 13
    Alignment = taRightJustify
    Anchors = [akTop, akRight]
    Caption = 'Photo:'
................................................................................
    Visible = False
    object lblRole: TLabel
      Left = 0
      Top = 14
      Width = 25
      Height = 13
      Caption = '&Role:'

    end
    object cbxRole: TComboBoxEx
      Left = 31
      Top = 11
      Width = 202
      Height = 22
      AutoCompleteOptions = [acoAutoSuggest, acoAutoAppend, acoUpDownKeyDropsList]







>







>






|












>

<
>





>

<
>





>

<
>





>

<
>





>

<
>







 







>







857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893

894
895
896
897
898
899
900
901

902
903
904
905
906
907
908
909

910
911
912
913
914
915
916
917

918
919
920
921
922
923
924
925

926
927
928
929
930
931
932
933
....
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
  TextHeight = 13
  object lblCode: TLabel
    Left = 8
    Top = 11
    Width = 29
    Height = 13
    Caption = 'Code:'
    FocusControl = edtCode
  end
  object lblName: TLabel
    Left = 8
    Top = 38
    Width = 31
    Height = 13
    Caption = 'Name:'
    FocusControl = edtName
  end
  object imgPhoto: TImage
    Left = 305
    Top = 169
    Width = 105
    Height = 105
    Anchors = [akTop, akRight, akBottom]
    Center = True
    Proportional = True
    Stretch = True
    Transparent = True
    OnClick = imgPhotoClick
  end
  object lblOrganisation: TLabel
    Left = 8
    Top = 65
    Width = 65
    Height = 13
    Caption = 'Organisation:'
    FocusControl = cbxOrganisation
  end

  object lblEmail: TLabel
    Left = 8
    Top = 93
    Width = 32
    Height = 13
    Caption = 'E-mail:'
    FocusControl = edtEmail
  end

  object lblPhone: TLabel
    Left = 8
    Top = 120
    Width = 34
    Height = 13
    Caption = 'Phone:'
    FocusControl = edtPhone
  end

  object lblMobile: TLabel
    Left = 8
    Top = 147
    Width = 34
    Height = 13
    Caption = 'Mobile:'
    FocusControl = edtMobile
  end

  object lblRemarks: TLabel
    Left = 8
    Top = 171
    Width = 45
    Height = 13
    Caption = 'Remarks:'
    FocusControl = mmoRemarks
  end

  object lblPhoto: TLabel
    Left = 267
    Top = 171
    Width = 32
    Height = 13
    Alignment = taRightJustify
    Anchors = [akTop, akRight]
    Caption = 'Photo:'
................................................................................
    Visible = False
    object lblRole: TLabel
      Left = 0
      Top = 14
      Width = 25
      Height = 13
      Caption = '&Role:'
      FocusControl = cbxRole
    end
    object cbxRole: TComboBoxEx
      Left = 31
      Top = 11
      Width = 202
      Height = 22
      AutoCompleteOptions = [acoAutoSuggest, acoAutoAppend, acoUpDownKeyDropsList]

Changes to Olam/src/F_Contact.pas.

12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
..
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
    lblCode: TLabel;
    edtCode: TEdit;
    edtName: TEdit;
    lblName: TLabel;
    imgPhoto: TImage;
    lblOrganisation: TLabel;
    cbxOrganisation: TComboBoxEx;
    Label1: TLabel;
    edtEmail: TButtonedEdit;
    Label2: TLabel;
    edtPhone: TEdit;
    Label3: TLabel;
    edtMobile: TEdit;
    Label4: TLabel;
    mmoRemarks: TMemo;
    pnlRole: TPanel;
    lblRole: TLabel;
    cbxRole: TComboBoxEx;
    Label5: TLabel;
    procedure imgPhotoClick(Sender: TObject);
    procedure edtEmailRightButtonClick(Sender: TObject);
    procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
  private
    { Private declarations }
  public
    { Public declarations }
................................................................................
{$R *.dfm}

{ ---------------------------------------------------------------------------- }
procedure TfrmContact.edtEmailRightButtonClick(Sender: TObject);
var
  URL: string;
begin
  URL := 'mailto:' + TIdURI.ParamsEncode(Trim(edtEmail.Text));
  ShellExecute(Handle, nil, PChar(URL), nil, nil, SW_SHOWDEFAULT);
end {TfrmContact.edtEmailRightButtonClick};

{ ---------------------------------------------------------------------------- }
procedure TfrmContact.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin







|

|

|

|




|







 







|







12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
..
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
    lblCode: TLabel;
    edtCode: TEdit;
    edtName: TEdit;
    lblName: TLabel;
    imgPhoto: TImage;
    lblOrganisation: TLabel;
    cbxOrganisation: TComboBoxEx;
    lblEmail: TLabel;
    edtEmail: TButtonedEdit;
    lblPhone: TLabel;
    edtPhone: TEdit;
    lblMobile: TLabel;
    edtMobile: TEdit;
    lblRemarks: TLabel;
    mmoRemarks: TMemo;
    pnlRole: TPanel;
    lblRole: TLabel;
    cbxRole: TComboBoxEx;
    lblPhoto: TLabel;
    procedure imgPhotoClick(Sender: TObject);
    procedure edtEmailRightButtonClick(Sender: TObject);
    procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
  private
    { Private declarations }
  public
    { Public declarations }
................................................................................
{$R *.dfm}

{ ---------------------------------------------------------------------------- }
procedure TfrmContact.edtEmailRightButtonClick(Sender: TObject);
var
  URL: string;
begin
  URL := 'mailto:' + TIdURI.PathEncode(Trim(edtEmail.Text));
  ShellExecute(Handle, nil, PChar(URL), nil, nil, SW_SHOWDEFAULT);
end {TfrmContact.edtEmailRightButtonClick};

{ ---------------------------------------------------------------------------- }
procedure TfrmContact.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin

Changes to Olam/src/F_Project.dfm.

860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
...
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939

940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
....
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
....
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
....
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
    Height = 343
    Align = alClient
    BevelOuter = bvNone
    TabOrder = 0
    DesignSize = (
      494
      343)
    object lblNaam: TLabel
      Left = 8
      Top = 8
      Width = 31
      Height = 13
      Caption = '&Name:'
      FocusControl = edtNaam
    end
    object lblDescription: TLabel
      Left = 8
      Top = 32
      Width = 57
      Height = 13
      Caption = '&Description:'
      FocusControl = mmoDescription
    end
    object lblVerantwoordelijke: TLabel
      Left = 8
      Top = 128
      Width = 27
      Height = 13
      Caption = '&Lead:'
      FocusControl = edtVerantwoordelijke
    end
    object lblContacten: TLabel
      Left = 8
      Top = 152
      Width = 47
      Height = 13
      Caption = 'Contacts:'
      FocusControl = lnkContacten
    end
    object edtNaam: TEdit
      Left = 104
      Top = 5
      Width = 382
      Height = 21
      Anchors = [akLeft, akTop, akRight]
      TabOrder = 0
    end
................................................................................
      Height = 89
      Anchors = [akLeft, akTop, akRight]
      ScrollBars = ssVertical
      TabOrder = 1
      OnKeyDown = mmoDescriptionKeyDown
      OnKeyUp = mmoDescriptionKeyUp
    end
    object edtVerantwoordelijke: TButtonedEdit
      Left = 104
      Top = 127
      Width = 382
      Height = 21
      Anchors = [akLeft, akTop, akRight]
      Images = dmMain.imlMain
      LeftButton.ImageIndex = 1787
      RightButton.ImageIndex = 1964
      RightButton.Visible = True
      TabOrder = 2
      OnRightButtonClick = edtVerantwoordelijkeRightButtonClick
    end
    object pgcLijsten: TPageControl
      Left = 8
      Top = 176
      Width = 478
      Height = 159
      ActivePage = tshSubprojecten
      Anchors = [akLeft, akTop, akRight, akBottom]
      Images = dmMain.imlMain
      TabOrder = 4

      object tshSubprojecten: TTabSheet
        Caption = '&Subprojects'
        ImageIndex = 125
        DesignSize = (
          470
          130)
        object tvwSubprojects: TTreeView
          Left = 3
          Top = 3
          Width = 343
          Height = 118
          Anchors = [akLeft, akTop, akRight, akBottom]
          Indent = 19
          TabOrder = 0
          OnClick = tvwSubprojectsClick
          OnDblClick = tvwSubprojectsDblClick
        end
        object btnAddProject: TButton
................................................................................
          Images = dmMain.imlMain
          TabOrder = 2
        end
        object lvwPhases: TListView
          Left = 3
          Top = 3
          Width = 343
          Height = 118
          Anchors = [akLeft, akTop, akRight, akBottom]
          Columns = <
            item
              Caption = 'N'#176
              Width = 100
            end
            item
................................................................................
        DesignSize = (
          470
          130)
        object lvwContacts: TListView
          Left = 3
          Top = 3
          Width = 343
          Height = 118
          Anchors = [akLeft, akTop, akRight, akBottom]
          Columns = <
            item
              Caption = 'Name'
              Width = 150
            end
            item
................................................................................
        ImageIndex = 1629
      end
      object tshStats: TTabSheet
        Caption = 'S&tats'
        ImageIndex = 348
      end
    end
    object lnkContacten: TLinkLabel
      Left = 104
      Top = 152
      Width = 382
      Height = 17
      Anchors = [akLeft, akTop, akRight]
      AutoSize = False
      Caption = '(none)'
      TabOrder = 3
      OnLinkClick = lnkContactenLinkClick
    end
  end
  object pnlParent: TPanel
    Left = 0
    Top = 0
    Width = 494
    Height = 41







|





|









|





|

|





|

|







 







|










|

|








>










|







 







|







 







|







 







|








|







860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
...
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
....
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
....
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
....
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
    Height = 343
    Align = alClient
    BevelOuter = bvNone
    TabOrder = 0
    DesignSize = (
      494
      343)
    object lblName: TLabel
      Left = 8
      Top = 8
      Width = 31
      Height = 13
      Caption = '&Name:'
      FocusControl = edtName
    end
    object lblDescription: TLabel
      Left = 8
      Top = 32
      Width = 57
      Height = 13
      Caption = '&Description:'
      FocusControl = mmoDescription
    end
    object lblLead: TLabel
      Left = 8
      Top = 128
      Width = 27
      Height = 13
      Caption = '&Lead:'
      FocusControl = edtLead
    end
    object lblContacts: TLabel
      Left = 8
      Top = 152
      Width = 47
      Height = 13
      Caption = 'Contacts:'
      FocusControl = lnkContacts
    end
    object edtName: TEdit
      Left = 104
      Top = 5
      Width = 382
      Height = 21
      Anchors = [akLeft, akTop, akRight]
      TabOrder = 0
    end
................................................................................
      Height = 89
      Anchors = [akLeft, akTop, akRight]
      ScrollBars = ssVertical
      TabOrder = 1
      OnKeyDown = mmoDescriptionKeyDown
      OnKeyUp = mmoDescriptionKeyUp
    end
    object edtLead: TButtonedEdit
      Left = 104
      Top = 127
      Width = 382
      Height = 21
      Anchors = [akLeft, akTop, akRight]
      Images = dmMain.imlMain
      LeftButton.ImageIndex = 1787
      RightButton.ImageIndex = 1964
      RightButton.Visible = True
      TabOrder = 2
      OnRightButtonClick = edtLeadRightButtonClick
    end
    object pgcLists: TPageControl
      Left = 8
      Top = 176
      Width = 478
      Height = 159
      ActivePage = tshSubprojecten
      Anchors = [akLeft, akTop, akRight, akBottom]
      Images = dmMain.imlMain
      TabOrder = 4
      OnChange = pgcListsChange
      object tshSubprojecten: TTabSheet
        Caption = '&Subprojects'
        ImageIndex = 125
        DesignSize = (
          470
          130)
        object tvwSubprojects: TTreeView
          Left = 3
          Top = 3
          Width = 343
          Height = 116
          Anchors = [akLeft, akTop, akRight, akBottom]
          Indent = 19
          TabOrder = 0
          OnClick = tvwSubprojectsClick
          OnDblClick = tvwSubprojectsDblClick
        end
        object btnAddProject: TButton
................................................................................
          Images = dmMain.imlMain
          TabOrder = 2
        end
        object lvwPhases: TListView
          Left = 3
          Top = 3
          Width = 343
          Height = 116
          Anchors = [akLeft, akTop, akRight, akBottom]
          Columns = <
            item
              Caption = 'N'#176
              Width = 100
            end
            item
................................................................................
        DesignSize = (
          470
          130)
        object lvwContacts: TListView
          Left = 3
          Top = 3
          Width = 343
          Height = 116
          Anchors = [akLeft, akTop, akRight, akBottom]
          Columns = <
            item
              Caption = 'Name'
              Width = 150
            end
            item
................................................................................
        ImageIndex = 1629
      end
      object tshStats: TTabSheet
        Caption = 'S&tats'
        ImageIndex = 348
      end
    end
    object lnkContacts: TLinkLabel
      Left = 104
      Top = 152
      Width = 382
      Height = 17
      Anchors = [akLeft, akTop, akRight]
      AutoSize = False
      Caption = '(none)'
      TabOrder = 3
      OnLinkClick = lnkContactsLinkClick
    end
  end
  object pnlParent: TPanel
    Left = 0
    Top = 0
    Width = 494
    Height = 41

Changes to Olam/src/F_Project.pas.

6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
..
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67

68
69
70
71
72
73
74
..
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97

98
99
100
101
102
103
104
...
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
...
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207

208
209
210
211
212
213
214
...
220
221
222
223
224
225
226










227
228
229
230
231
232
233
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls,
  M_Main, Vcl.ComCtrls, Vcl.Menus, System.Actions, Vcl.ActnList, Vcl.StdActns;

type
  TfrmProject = class(TForm)
    pnlContents: TPanel;
    lblNaam: TLabel;
    lblDescription: TLabel;
    lblVerantwoordelijke: TLabel;
    lblContacten: TLabel;
    edtNaam: TEdit;
    mmoDescription: TMemo;
    edtVerantwoordelijke: TButtonedEdit;
    pgcLijsten: TPageControl;
    tshSubprojecten: TTabSheet;
    tvwSubprojects: TTreeView;
    btnAddProject: TButton;
    btnDeleteProject: TButton;
    btnEditProject: TButton;
    tshPhases: TTabSheet;
    btnAddPhase: TButton;
................................................................................
    tshContacts: TTabSheet;
    lvwContacts: TListView;
    btnAddContact: TButton;
    btnEditContact: TButton;
    btnDeleteContact: TButton;
    tshActivities: TTabSheet;
    tshStats: TTabSheet;
    lnkContacten: TLinkLabel;
    pnlParent: TPanel;
    lblParent: TLabel;
    cbxParent: TComboBoxEx;
    mmProject: TMainMenu;
    mnuProject: TMenuItem;
    mnuView: TMenuItem;
    miViewPage: TMenuItem;
    miProjectSave: TMenuItem;
    miProjectClose: TMenuItem;
    aclProject: TActionList;
    actWindowClose: TAction;
    actProjectSave: TAction;
    miProjectN1: TMenuItem;
    procedure lnkContactenLinkClick(Sender: TObject; const Link: string;
      LinkType: TSysLinkType);
    procedure FormCreate(Sender: TObject);
    procedure btnAddProjectClick(Sender: TObject);
    procedure miViewPageClick(Sender: TObject);
    procedure actWindowCloseExecute(Sender: TObject);
    procedure mmoDescriptionKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure mmoDescriptionKeyUp(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure btnAddContactClick(Sender: TObject);
    procedure edtVerantwoordelijkeRightButtonClick(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure tvwSubprojectsClick(Sender: TObject);
    procedure btnEditProjectClick(Sender: TObject);
    procedure tvwSubprojectsDblClick(Sender: TObject);

  private
    { Private declarations }
  public
    { Public declarations }
  end;

implementation
................................................................................
  mi: TMenuItem;
  i: Integer;
  Page: TTabSheet;
begin
  cbxParent.ItemIndex := 0;
  pnlParent.Visible := False;

  for i := 0 to pgcLijsten.PageCount - 1 do begin
    mi := TMenuItem.Create(mnuView);
    Page := pgcLijsten.Pages[i];
    mi.Caption := Page.Caption;
    mi.ImageIndex := Page.ImageIndex;
    mi.Hint := Page.Hint;
    mi.Tag := Page.TabIndex;
    mi.OnClick := miViewPageClick;

    mi.Visible := Page.TabVisible;
    mnuView.Insert(mnuView.IndexOf(miViewPage), mi);
  end;
end {TfrmProject.FormCreate};

{ ---------------------------------------------------------------------------- }
procedure TfrmProject.FormShow(Sender: TObject);
................................................................................
var
  Form: TfrmProject;
  Item: TComboExItem;
begin
  Form := TfrmProject.Create(Self);
  try
    Item := Form.cbxParent.ItemsEx.Add;
    Item.Caption := edtNaam.Text; // TODO?
    Item.ImageIndex := tshSubprojecten.ImageIndex;
    Form.cbxParent.ItemIndex := Item.Index;
    Form.pnlParent.Visible := True;
    Form.Position := poDefaultPosOnly;
    if Form.ShowModal = mrOk then begin
      // TODO: refresh subproject list
    end;
    tvwSubprojects.Items.Add(nil, Form.edtNaam.Text);
  finally
    Form.Free;
  end;
end {TfrmProject.btnAddProjectClick};

{ ---------------------------------------------------------------------------- }
procedure TfrmProject.btnEditProjectClick(Sender: TObject);
................................................................................
var
  Form: TfrmProject;
  Item: TComboExItem;
begin
  Form := TfrmProject.Create(Self);
  try
    Item := Form.cbxParent.ItemsEx.Add;
    Item.Caption := edtNaam.Text; // TODO?
    Item.ImageIndex := tshSubprojecten.ImageIndex;
    Form.cbxParent.ItemIndex := Item.Index;
    Form.pnlParent.Visible := True;
    Form.Position := poDefaultPosOnly;
    Form.edtNaam.Text := tvwSubprojects.Selected.Text;
    if Form.ShowModal = mrOk then begin
      // TODO: refresh subproject list
    end;
    tvwSubprojects.Selected.Text := Form.edtNaam.Text;
  finally
    Form.Free;
  end;
end {TfrmProject.btnEditProjectClick};

{ ---------------------------------------------------------------------------- }
procedure TfrmProject.edtVerantwoordelijkeRightButtonClick(Sender: TObject);
begin
  // TODO: open list of contacts to choose from (which includes the possibility of adding one)
end;

{ ---------------------------------------------------------------------------- }
procedure TfrmProject.lnkContactenLinkClick(Sender: TObject; const Link: string;
  LinkType: TSysLinkType);
var
  ID: Int64;
begin
  case LinkType of
    sltURL: ShellExecute(Handle, nil, PChar(Link), nil, nil, SW_SHOWDEFAULT);
    sltID: begin
      if TryStrToInt64(Link, ID) then begin
        // TODO: open contact form, and load contact identified by ID
        // TODO: use ShowModal
      end;
    end;
  end;
end {TfrmProject.lnkContactenLinkClick};

{ ---------------------------------------------------------------------------- }
procedure TfrmProject.miViewPageClick(Sender: TObject);
begin
  pgcLijsten.ActivePageIndex := TMenuItem(Sender).Tag;
end;


{ ---------------------------------------------------------------------------- }
procedure TfrmProject.mmoDescriptionKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if (Shift = [ssCtrl]) and (Key = Ord('A')) then begin
    mmoDescription.SelectAll;
................................................................................
procedure TfrmProject.mmoDescriptionKeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if (Shift = [ssCtrl]) and (Key = Ord('A')) then begin
    Key := 0;
  end;
end {TfrmProject.mmoDescriptionKeyUp};











{ ---------------------------------------------------------------------------- }
procedure TfrmProject.tvwSubprojectsClick(Sender: TObject);
begin
  btnEditProject.Enabled := Assigned(tvwSubprojects.Selected);
  btnDeleteProject.Enabled := Assigned(tvwSubprojects.Selected);
end {TfrmProject.tvwSubprojectsClick};







|

|
|
|

|
|







 







|













|










|




>







 







|

|





>







 







|







|







 







|




|



|






|


|


|













|




|
|
>







 







>
>
>
>
>
>
>
>
>
>







6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
..
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
..
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
...
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
...
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
...
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls,
  M_Main, Vcl.ComCtrls, Vcl.Menus, System.Actions, Vcl.ActnList, Vcl.StdActns;

type
  TfrmProject = class(TForm)
    pnlContents: TPanel;
    lblName: TLabel;
    lblDescription: TLabel;
    lblLead: TLabel;
    lblContacts: TLabel;
    edtName: TEdit;
    mmoDescription: TMemo;
    edtLead: TButtonedEdit;
    pgcLists: TPageControl;
    tshSubprojecten: TTabSheet;
    tvwSubprojects: TTreeView;
    btnAddProject: TButton;
    btnDeleteProject: TButton;
    btnEditProject: TButton;
    tshPhases: TTabSheet;
    btnAddPhase: TButton;
................................................................................
    tshContacts: TTabSheet;
    lvwContacts: TListView;
    btnAddContact: TButton;
    btnEditContact: TButton;
    btnDeleteContact: TButton;
    tshActivities: TTabSheet;
    tshStats: TTabSheet;
    lnkContacts: TLinkLabel;
    pnlParent: TPanel;
    lblParent: TLabel;
    cbxParent: TComboBoxEx;
    mmProject: TMainMenu;
    mnuProject: TMenuItem;
    mnuView: TMenuItem;
    miViewPage: TMenuItem;
    miProjectSave: TMenuItem;
    miProjectClose: TMenuItem;
    aclProject: TActionList;
    actWindowClose: TAction;
    actProjectSave: TAction;
    miProjectN1: TMenuItem;
    procedure lnkContactsLinkClick(Sender: TObject; const Link: string;
      LinkType: TSysLinkType);
    procedure FormCreate(Sender: TObject);
    procedure btnAddProjectClick(Sender: TObject);
    procedure miViewPageClick(Sender: TObject);
    procedure actWindowCloseExecute(Sender: TObject);
    procedure mmoDescriptionKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure mmoDescriptionKeyUp(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure btnAddContactClick(Sender: TObject);
    procedure edtLeadRightButtonClick(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure tvwSubprojectsClick(Sender: TObject);
    procedure btnEditProjectClick(Sender: TObject);
    procedure tvwSubprojectsDblClick(Sender: TObject);
    procedure pgcListsChange(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

implementation
................................................................................
  mi: TMenuItem;
  i: Integer;
  Page: TTabSheet;
begin
  cbxParent.ItemIndex := 0;
  pnlParent.Visible := False;

  for i := 0 to pgcLists.PageCount - 1 do begin
    mi := TMenuItem.Create(mnuView);
    Page := pgcLists.Pages[i];
    mi.Caption := Page.Caption;
    mi.ImageIndex := Page.ImageIndex;
    mi.Hint := Page.Hint;
    mi.Tag := Page.TabIndex;
    mi.OnClick := miViewPageClick;
    mi.Default := (Page = pgcLists.ActivePage);
    mi.Visible := Page.TabVisible;
    mnuView.Insert(mnuView.IndexOf(miViewPage), mi);
  end;
end {TfrmProject.FormCreate};

{ ---------------------------------------------------------------------------- }
procedure TfrmProject.FormShow(Sender: TObject);
................................................................................
var
  Form: TfrmProject;
  Item: TComboExItem;
begin
  Form := TfrmProject.Create(Self);
  try
    Item := Form.cbxParent.ItemsEx.Add;
    Item.Caption := edtName.Text; // TODO?
    Item.ImageIndex := tshSubprojecten.ImageIndex;
    Form.cbxParent.ItemIndex := Item.Index;
    Form.pnlParent.Visible := True;
    Form.Position := poDefaultPosOnly;
    if Form.ShowModal = mrOk then begin
      // TODO: refresh subproject list
    end;
    tvwSubprojects.Items.Add(nil, Form.edtName.Text);
  finally
    Form.Free;
  end;
end {TfrmProject.btnAddProjectClick};

{ ---------------------------------------------------------------------------- }
procedure TfrmProject.btnEditProjectClick(Sender: TObject);
................................................................................
var
  Form: TfrmProject;
  Item: TComboExItem;
begin
  Form := TfrmProject.Create(Self);
  try
    Item := Form.cbxParent.ItemsEx.Add;
    Item.Caption := edtName.Text; // TODO?
    Item.ImageIndex := tshSubprojecten.ImageIndex;
    Form.cbxParent.ItemIndex := Item.Index;
    Form.pnlParent.Visible := True;
    Form.Position := poDefaultPosOnly;
    Form.edtName.Text := tvwSubprojects.Selected.Text;
    if Form.ShowModal = mrOk then begin
      // TODO: refresh subproject list
    end;
    tvwSubprojects.Selected.Text := Form.edtName.Text;
  finally
    Form.Free;
  end;
end {TfrmProject.btnEditProjectClick};

{ ---------------------------------------------------------------------------- }
procedure TfrmProject.edtLeadRightButtonClick(Sender: TObject);
begin
  // TODO: open list of contacts to choose from (which includes the possibility of adding one)
end {TfrmProject.edtLeadRightButtonClick};

{ ---------------------------------------------------------------------------- }
procedure TfrmProject.lnkContactsLinkClick(Sender: TObject; const Link: string;
  LinkType: TSysLinkType);
var
  ID: Int64;
begin
  case LinkType of
    sltURL: ShellExecute(Handle, nil, PChar(Link), nil, nil, SW_SHOWDEFAULT);
    sltID: begin
      if TryStrToInt64(Link, ID) then begin
        // TODO: open contact form, and load contact identified by ID
        // TODO: use ShowModal
      end;
    end;
  end;
end {TfrmProject.lnkContactsLinkClick};

{ ---------------------------------------------------------------------------- }
procedure TfrmProject.miViewPageClick(Sender: TObject);
begin
  pgcLists.ActivePageIndex := TMenuItem(Sender).Tag;
  TMenuItem(Sender).Default := True;
end {TfrmProject.miViewPageClick};

{ ---------------------------------------------------------------------------- }
procedure TfrmProject.mmoDescriptionKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if (Shift = [ssCtrl]) and (Key = Ord('A')) then begin
    mmoDescription.SelectAll;
................................................................................
procedure TfrmProject.mmoDescriptionKeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if (Shift = [ssCtrl]) and (Key = Ord('A')) then begin
    Key := 0;
  end;
end {TfrmProject.mmoDescriptionKeyUp};

{ ---------------------------------------------------------------------------- }
procedure TfrmProject.pgcListsChange(Sender: TObject);
var
  mi: TMenuItem;
begin
  for mi in mnuView do begin
    mi.Default := (mi.Tag = pgcLists.ActivePageIndex);
  end;
end {TfrmProject.pgcLijstenChange};

{ ---------------------------------------------------------------------------- }
procedure TfrmProject.tvwSubprojectsClick(Sender: TObject);
begin
  btnEditProject.Enabled := Assigned(tvwSubprojects.Selected);
  btnDeleteProject.Enabled := Assigned(tvwSubprojects.Selected);
end {TfrmProject.tvwSubprojectsClick};

Changes to Olam/src/F_Projects.dfm.

922
923
924
925
926
927
928
929








930










    Top = 144
    Width = 115
    Height = 33
    Action = dmMain.actProjectAddActivity
    Anchors = [akTop, akRight]
    Images = dmMain.imlMain
    TabOrder = 4
  end








end


















>
>
>
>
>
>
>
>
|
>
>
>
>
>
>
>
>
>
>
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
    Top = 144
    Width = 115
    Height = 33
    Action = dmMain.actProjectAddActivity
    Anchors = [akTop, akRight]
    Images = dmMain.imlMain
    TabOrder = 4
  end
  object btnActivities: TButton
    Left = 512
    Top = 183
    Width = 114
    Height = 33
    Action = dmMain.actProjectViewActivities
    Images = dmMain.imlMain
    TabOrder = 5
  end
  object btnReports: TButton
    Left = 512
    Top = 222
    Width = 114
    Height = 33
    Action = dmMain.actProjectViewReports
    Images = dmMain.imlMain
    TabOrder = 6
  end
end

Changes to Olam/src/F_Projects.pas.

10
11
12
13
14
15
16


17
18
19
20
21
22
23
type
  TfrmProjects = class(TForm)
    lvwProjects: TListView;
    btnAdd: TButton;
    btnEdit: TButton;
    btnDelete: TButton;
    btnAddActivity: TButton;


  private
    { Private declarations }
  public
    { Public declarations }
  end;

var







>
>







10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
type
  TfrmProjects = class(TForm)
    lvwProjects: TListView;
    btnAdd: TButton;
    btnEdit: TButton;
    btnDelete: TButton;
    btnAddActivity: TButton;
    btnActivities: TButton;
    btnReports: TButton;
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var

Added Olam/src/FileIcon.pas.































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
unit FileIcon;

interface
  uses
    Graphics;

  function GetFileIcon(const AFile: string; const ALarge: Boolean): THandle;
  function GetSmallIcon(const AFile : String): TIcon;
  function GetLargeIcon(const AFile : String): TIcon;

implementation
  uses
    ShellAPI;

  //////////////////////////////////////////////////////////////////////////////////////////////////
  function GetFileIcon(const AFile: string; const ALarge: Boolean): THandle;
  var
    Info : TSHFileInfo;
    InfoSize : Integer;
    ShGFIFlag: Cardinal;
  begin
    if ALarge then begin
      ShGFIFlag := SHGFI_LARGEICON;
    end else begin
      ShGFIFlag := SHGFI_SMALLICON;
    end;
    InfoSize := SizeOf(TSHFileInfo);
    FillChar(Info, InfoSize, 0);
    SHGetFileInfo(PChar(AFile), 0, Info, InfoSize, SHGFI_ICON or ShGFIFlag or SHGFI_USEFILEATTRIBUTES);
    Result := Info.hIcon;
  end;

  //////////////////////////////////////////////////////////////////////////////////////////////////
  function GetSmallIcon(const AFile : String): TIcon;
  begin
    Result := TIcon.Create;
    Result.Handle := GetFileIcon(AFile, False);
  end;

  //////////////////////////////////////////////////////////////////////////////////////////////////
  function GetLargeIcon(const AFile : String): TIcon;
  begin
    Result := TIcon.Create;
    Result.Handle := GetFileIcon(AFile, True);
  end;
end.

Changes to Olam/src/M_Main.dfm.

3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
.....
68557
68558
68559
68560
68561
68562
68563












68564
68565
68566
68567
68568
68569
68570
68571






68572










  Height = 150
  Width = 215
  object imlMain: TImageList
    ColorDepth = cd32Bit
    Left = 8
    Top = 8
    Bitmap = {
      494C01011A082808200010001000FFFFFFFF2110FFFFFFFFFFFFFFFF424D3600
      0000000000003600000028000000400000007020000001002000000000000070
      2000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
................................................................................
      Caption = 'Delete activity'
      ImageIndex = 1633
    end
    object actProjectAddActivity: TAction
      Category = 'Project'
      Caption = '&Start activity...'
      ImageIndex = 1631












    end
  end
  object dlgOpenPicture: TOpenPictureDialog
    DefaultExt = '.jpg'
    OnTypeChange = dlgOpenPictureTypeChange
    Left = 144
    Top = 8
  end






end

















|







 







>
>
>
>
>
>
>
>
>
>
>
>








>
>
>
>
>
>
|
>
>
>
>
>
>
>
>
>
>
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
.....
68557
68558
68559
68560
68561
68562
68563
68564
68565
68566
68567
68568
68569
68570
68571
68572
68573
68574
68575
68576
68577
68578
68579
68580
68581
68582
68583
68584
68585
68586
68587
68588
68589
68590
68591
68592
68593
68594
68595
68596
68597
68598
68599
68600
  Height = 150
  Width = 215
  object imlMain: TImageList
    ColorDepth = cd32Bit
    Left = 8
    Top = 8
    Bitmap = {
      494C01011A082808240010001000FFFFFFFF2110FFFFFFFFFFFFFFFF424D3600
      0000000000003600000028000000400000007020000001002000000000000070
      2000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
      0000000000000000000000000000000000000000000000000000000000000000
................................................................................
      Caption = 'Delete activity'
      ImageIndex = 1633
    end
    object actProjectAddActivity: TAction
      Category = 'Project'
      Caption = '&Start activity...'
      ImageIndex = 1631
      OnExecute = actProjectAddActivityExecute
    end
    object actProjectViewReports: TAction
      Category = 'Project'
      Caption = 'View reports...'
      ImageIndex = 1221
    end
    object actProjectViewActivities: TAction
      Category = 'Project'
      Caption = 'View activities...'
      ImageIndex = 1635
      OnExecute = actProjectViewActivitiesExecute
    end
  end
  object dlgOpenPicture: TOpenPictureDialog
    DefaultExt = '.jpg'
    OnTypeChange = dlgOpenPictureTypeChange
    Left = 144
    Top = 8
  end
  object dlgOpenFile: TFileOpenDialog
    FavoriteLinks = <>
    FileTypes = <
      item
        DisplayName = 'All files'
        FileMask = '*'
      end>
    OkButtonLabel = 'OK'
    Options = [fdoAllowMultiSelect, fdoPathMustExist, fdoFileMustExist]
    Left = 144
    Top = 64
  end
  object imlFileTypes: TImageList
    Left = 64
    Top = 8
  end
end

Changes to Olam/src/M_Main.pas.

14
15
16
17
18
19
20




21
22


23
24
25

26
27


28
29
30
31
32
33
34
35
36

37
38
39
40
41







42
43
44
45
46
47






48
49
50
51
52
53
54
..
56
57
58
59
60
61
62
63
































64
    actProjectEdit: TAction;
    actProjectDelete: TAction;
    actActivityAdd: TAction;
    actActivityEdit: TAction;
    actActivityDelete: TAction;
    actProjectAddActivity: TAction;
    dlgOpenPicture: TOpenPictureDialog;




    procedure actProjectAddExecute(Sender: TObject);
    procedure dlgOpenPictureTypeChange(Sender: TObject);


  private
    { Private declarations }
    FProject: TObject;  // TODO: actual project object

  public
    { Public declarations }


    property SelectedProject: TObject read FProject write FProject;
  end;

var
  dmMain: TdmMain;

implementation
uses
  Vcl.Forms,

  F_Project;

{%CLASSGROUP 'Vcl.Controls.TControl'}

{$R *.dfm}








{ ---------------------------------------------------------------------------- }
procedure TdmMain.actProjectAddExecute(Sender: TObject);
begin
  TfrmProject.Create(Application).Show;
end {TdmMain.actProjectAddExecute};







{ ---------------------------------------------------------------------------- }
procedure TdmMain.dlgOpenPictureTypeChange(Sender: TObject);
var
  Filter: string;
  CharPos: Integer;
begin
................................................................................
  CharPos := Pos('.', Filter);
  if (Pos(TFormatSettings.Create.ListSeparator, Filter) > 0) or (CharPos = 0) then begin
    dlgOpenPicture.DefaultExt := '';
  end else begin
    dlgOpenPicture.DefaultExt := Copy(Filter, CharPos);
  end;
end {TdmMain.dlgOpenPictureTypeChange};

































end.







>
>
>
>


>
>



>


>
>








|
>
|




>
>
>
>
>
>
>






>
>
>
>
>
>







 








>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>

14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
..
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
    actProjectEdit: TAction;
    actProjectDelete: TAction;
    actActivityAdd: TAction;
    actActivityEdit: TAction;
    actActivityDelete: TAction;
    actProjectAddActivity: TAction;
    dlgOpenPicture: TOpenPictureDialog;
    actProjectViewReports: TAction;
    actProjectViewActivities: TAction;
    dlgOpenFile: TFileOpenDialog;
    imlFileTypes: TImageList;
    procedure actProjectAddExecute(Sender: TObject);
    procedure dlgOpenPictureTypeChange(Sender: TObject);
    procedure actProjectViewActivitiesExecute(Sender: TObject);
    procedure actProjectAddActivityExecute(Sender: TObject);
  private
    { Private declarations }
    FProject: TObject;  // TODO: actual project object
    FImageTypes: TStringList;
  public
    { Public declarations }
    function ImageIndexOfFileType(const FileType: string): Integer;

    property SelectedProject: TObject read FProject write FProject;
  end;

var
  dmMain: TdmMain;

implementation
uses
  Vcl.Forms, Vcl.Graphics,
  FileIcon,
  F_Project, F_Activities, F_Activity;

{%CLASSGROUP 'Vcl.Controls.TControl'}

{$R *.dfm}

{ ---------------------------------------------------------------------------- }
procedure TdmMain.actProjectAddActivityExecute(Sender: TObject);
begin
  // TODO: Prefill the selected project
  TfrmActivity.Create(Application).ShowModal;
end {TdmMain.actProjectAddActivityExecute};

{ ---------------------------------------------------------------------------- }
procedure TdmMain.actProjectAddExecute(Sender: TObject);
begin
  TfrmProject.Create(Application).Show;
end {TdmMain.actProjectAddExecute};

{ ---------------------------------------------------------------------------- }
procedure TdmMain.actProjectViewActivitiesExecute(Sender: TObject);
begin
  frmActivities.Show;
end {TdmMain.actProjectViewActivitiesExecute};

{ ---------------------------------------------------------------------------- }
procedure TdmMain.dlgOpenPictureTypeChange(Sender: TObject);
var
  Filter: string;
  CharPos: Integer;
begin
................................................................................
  CharPos := Pos('.', Filter);
  if (Pos(TFormatSettings.Create.ListSeparator, Filter) > 0) or (CharPos = 0) then begin
    dlgOpenPicture.DefaultExt := '';
  end else begin
    dlgOpenPicture.DefaultExt := Copy(Filter, CharPos);
  end;
end {TdmMain.dlgOpenPictureTypeChange};

{ ---------------------------------------------------------------------------- }
function TdmMain.ImageIndexOfFileType(const FileType: string): Integer;
var
  Ext: string;
  Index: Integer;
  Icon: TIcon;
begin
  if not Assigned(FImageTypes) then begin
    // FImageTypes contains the extensions, and the accompanying object is an
    //  Integer representing the ImageIndex of that icon in the ImageList
    //  named imlFileTypes.
    FImageTypes := TStringList.Create;
    FImageTypes.CaseSensitive := False;
  end;

  // check if we already have this image type
  Ext := ExtractFileExt(FileType);
  Index := FImageTypes.IndexOf(Ext);
  if Index <> -1 then begin
    Result := Integer(FImageTypes.Objects[Index]);
  end else begin
    // fetch the relevant icon, add it to the image list, and return its index
    Icon := FileIcon.GetSmallIcon(Ext);
    try
      Result := imlFileTypes.AddIcon(Icon);
      FImageTypes.AddObject(Ext, TObject(Result));
    finally
      Icon.Free;
    end;
  end;
end {TdmMain.ImageIndexOfFileType};

end.

Changes to Olam/src/Olam.dpr.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
program Olam;

uses
  Vcl.Forms,
  M_Main in 'M_Main.pas' {dmMain: TDataModule},
  F_Projects {frmProjects},
  F_Activities {frmActivities}{,
  U_AutoDB in 'U_AutoDB.pas'};

{$R *.res}

begin
  Application.Initialize;
//  Application.MainFormOnTaskbar := True;
  Application.CreateForm(TfrmProjects, frmProjects);
  Application.CreateForm(TdmMain, dmMain);
  Application.CreateForm(TfrmActivities, frmActivities);
  Application.Run;
end.






|
<











1
2
3
4
5
6
7

8
9
10
11
12
13
14
15
16
17
18
program Olam;

uses
  Vcl.Forms,
  M_Main in 'M_Main.pas' {dmMain: TDataModule},
  F_Projects {frmProjects},
  F_Activities {frmActivities};


{$R *.res}

begin
  Application.Initialize;
//  Application.MainFormOnTaskbar := True;
  Application.CreateForm(TfrmProjects, frmProjects);
  Application.CreateForm(TdmMain, dmMain);
  Application.CreateForm(TfrmActivities, frmActivities);
  Application.Run;
end.

Changes to Olam/src/Olam.dproj.

36
37
38
39
40
41
42


43
44
45
46
47
48
49
    </PropertyGroup>
    <PropertyGroup Condition="'$(Config)'=='Release' or '$(Cfg_2)'!=''">
        <Cfg_2>true</Cfg_2>
        <CfgParent>Base</CfgParent>
        <Base>true</Base>
    </PropertyGroup>
    <PropertyGroup Condition="'$(Base)'!=''">


        <VerInfo_Locale>1043</VerInfo_Locale>
        <Icon_MainIcon>$(BDS)\bin\delphi_PROJECTICON.ico</Icon_MainIcon>
        <SanitizedProjectName>Olam</SanitizedProjectName>
        <Manifest_File>$(BDS)\bin\default_app.manifest</Manifest_File>
        <DCC_Namespace>System;Xml;Data;Datasnap;Web;Soap;Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;$(DCC_Namespace)</DCC_Namespace>
        <VerInfo_Keys>CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments=</VerInfo_Keys>
        <DCC_DcuOutput>..\out\DCU\$(Platform)\$(Config)</DCC_DcuOutput>







>
>







36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
    </PropertyGroup>
    <PropertyGroup Condition="'$(Config)'=='Release' or '$(Cfg_2)'!=''">
        <Cfg_2>true</Cfg_2>
        <CfgParent>Base</CfgParent>
        <Base>true</Base>
    </PropertyGroup>
    <PropertyGroup Condition="'$(Base)'!=''">
        <DCC_UNIT_PLATFORM>false</DCC_UNIT_PLATFORM>
        <DCC_SYMBOL_PLATFORM>false</DCC_SYMBOL_PLATFORM>
        <VerInfo_Locale>1043</VerInfo_Locale>
        <Icon_MainIcon>$(BDS)\bin\delphi_PROJECTICON.ico</Icon_MainIcon>
        <SanitizedProjectName>Olam</SanitizedProjectName>
        <Manifest_File>$(BDS)\bin\default_app.manifest</Manifest_File>
        <DCC_Namespace>System;Xml;Data;Datasnap;Web;Soap;Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;$(DCC_Namespace)</DCC_Namespace>
        <VerInfo_Keys>CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments=</VerInfo_Keys>
        <DCC_DcuOutput>..\out\DCU\$(Platform)\$(Config)</DCC_DcuOutput>