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: |
c6e0ad17ef0ba73a1c8dbfa40bf36173 |
User & Date: | MCO 2014-07-28 14:24:11.133 |
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 | 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 | > > > > > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > | | | | > | > > | 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 | 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 |
︙ | ︙ | |||
934 935 936 937 938 939 940 | Width = 115 Height = 34 Action = dmMain.actActivityEdit Anchors = [akTop, akRight] Images = dmMain.imlMain TabOrder = 2 end | | > > > > > > > > > > > > > | > | 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 | 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.
1 2 3 4 5 6 7 8 9 10 11 12 | unit F_Activities; interface uses 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; | | | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 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 | unit F_Activities; interface uses 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 | 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 | > > | > | > | > | > | > | | 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 | 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:' |
︙ | ︙ | |||
997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 | 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] | > | 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 | 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 | lblCode: TLabel; edtCode: TEdit; edtName: TEdit; lblName: TLabel; imgPhoto: TImage; lblOrganisation: TLabel; cbxOrganisation: TComboBoxEx; | | | | | | | 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 | 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 } |
︙ | ︙ | |||
46 47 48 49 50 51 52 | {$R *.dfm} { ---------------------------------------------------------------------------- } procedure TfrmContact.edtEmailRightButtonClick(Sender: TObject); var URL: string; begin | | | 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | {$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 | Height = 343 Align = alClient BevelOuter = bvNone TabOrder = 0 DesignSize = ( 494 343) | | | | | | | | | | | > | | 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 | 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 object mmoDescription: TMemo Left = 104 Top = 32 Width = 382 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 |
︙ | ︙ | |||
1033 1034 1035 1036 1037 1038 1039 | Images = dmMain.imlMain TabOrder = 2 end object lvwPhases: TListView Left = 3 Top = 3 Width = 343 | | | 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 | 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 |
︙ | ︙ | |||
1086 1087 1088 1089 1090 1091 1092 | DesignSize = ( 470 130) object lvwContacts: TListView Left = 3 Top = 3 Width = 343 | | | 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 | 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 |
︙ | ︙ | |||
1152 1153 1154 1155 1156 1157 1158 | ImageIndex = 1629 end object tshStats: TTabSheet Caption = 'S&tats' ImageIndex = 348 end end | | | | 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 | 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.
1 2 3 4 5 6 7 8 9 10 11 12 | unit F_Project; interface uses 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; | | | | | | | | | | > | 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 | unit F_Project; interface uses 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; btnEditPhase: TButton; btnDeletePhase: TButton; lvwPhases: TListView; 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 |
︙ | ︙ | |||
83 84 85 86 87 88 89 | mi: TMenuItem; i: Integer; Page: TTabSheet; begin cbxParent.ItemIndex := 0; pnlParent.Visible := False; | | | > | 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 | 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); |
︙ | ︙ | |||
135 136 137 138 139 140 141 | var Form: TfrmProject; Item: TComboExItem; begin Form := TfrmProject.Create(Self); try Item := Form.cbxParent.ItemsEx.Add; | | | | | | | | | | | > | > > > > > > > > > > | 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 | 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; Key := 0; end; end {TfrmProject.mmoDescriptionKeyDown}; { ---------------------------------------------------------------------------- } 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.
1 2 3 4 5 6 7 8 9 | object dmMain: TdmMain OldCreateOrder = False Height = 150 Width = 215 object imlMain: TImageList ColorDepth = cd32Bit Left = 8 Top = 8 Bitmap = { | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | object dmMain: TdmMain OldCreateOrder = False Height = 150 Width = 215 object imlMain: TImageList ColorDepth = cd32Bit Left = 8 Top = 8 Bitmap = { 494C01011A082808240010001000FFFFFFFF2110FFFFFFFFFFFFFFFF424D3600 0000000000003600000028000000400000007020000001002000000000000070 2000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 |
︙ | ︙ | |||
68557 68558 68559 68560 68561 68562 68563 68564 68565 68566 68567 68568 68569 68570 68571 | 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 | > > > > > > > > > > > > > > > > > > > > > > > | > > > > > | 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 | 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 | 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 | > > > > > > > > > | > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 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 | 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 Filter := dlgOpenPicture.Filter.Split(['|'])[(dlgOpenPicture.FilterIndex - 1) * 2 + 1]; 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 | program Olam; uses Vcl.Forms, M_Main in 'M_Main.pas' {dmMain: TDataModule}, F_Projects {frmProjects}, | | < | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 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); |
︙ | ︙ |
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> |
︙ | ︙ |