diff --git a/components/gridprinter/examples/multi-language/main.lfm b/components/gridprinter/examples/multi-language/main.lfm index 492c27307..db3e860fa 100644 --- a/components/gridprinter/examples/multi-language/main.lfm +++ b/components/gridprinter/examples/multi-language/main.lfm @@ -99,6 +99,7 @@ object MainForm: TMainForm 'ppoHeaderFooterBtn' 'ppoPrintOrderBtns ' 'ppoCenterBtns' + 'ppoScalePrinterBtn' 'ppoPageSetupBtn' 'ppoPageInfo' 'ppoZoomInfo' @@ -155,7 +156,7 @@ object MainForm: TMainForm Top = 96 end object GridPrintPreviewDialog1: TGridPrintPreviewDialog - FormParams.Width = 640 + FormParams.Width = 700 FormParams.Height = 800 FormParams.Position = poDesigned FormParams.PixelsPerInch = 96 diff --git a/components/gridprinter/examples/multi-language/main.pas b/components/gridprinter/examples/multi-language/main.pas index e7b8bca76..5dc7007cd 100644 --- a/components/gridprinter/examples/multi-language/main.pas +++ b/components/gridprinter/examples/multi-language/main.pas @@ -66,6 +66,7 @@ resourcestring RSHeaderFooterButton = 'Header/footer button'; RSPrintOrderButtons = 'Print order: colums first or rows first'; RSCenterButtons = 'Buttons for centering grid on page'; + RSScalePrinterButton = 'Scale printer button'; RSPageSetupButton = 'Page setup dropdown-menu'; RSPageNumberInfoPanel = 'Page number info'; RSZoomLevelInfoPanel = 'Zoom level info'; @@ -97,9 +98,10 @@ begin if ccbPreviewOptions.Checked[5] then Include(optns, ppoHeaderFooterBtn); if ccbPreviewOptions.Checked[6] then Include(optns, ppoPrintOrderBtns); if ccbPreviewOptions.Checked[7] then Include(optns, ppoCenterBtns); - if ccbPreviewOptions.Checked[8] then Include(optns, ppoPageSetupBtn); - if ccbPreviewOptions.Checked[9] then Include(optns, ppoPageNumberInfo); - if ccbPreviewOptions.Checked[10] then Include(optns, ppoZoomLevelInfo); + if ccbPreviewOptions.Checked[8] then Include(optns, ppoScalePrinterBtn); + if ccbPreviewOptions.Checked[9] then Include(optns, ppoPageSetupBtn); + if ccbPreviewOptions.Checked[10] then Include(optns, ppoPageNumberInfo); + if ccbPreviewOptions.Checked[11] then Include(optns, ppoZoomLevelInfo); GridPrintPreviewDialog1.Options := optns; end; @@ -110,7 +112,7 @@ end; procedure TMainForm.FormCreate(Sender: TObject); const - NUM_ROWS = 100; + NUM_ROWS = 80; NUM_COLS = 15; var i, r, c: Integer; @@ -224,9 +226,10 @@ begin ccbPreviewOptions.Items[5] := RSHeaderFooterButton; ccbPreviewOptions.Items[6] := RSPrintOrderButtons; ccbPreviewOptions.Items[7] := RSCenterButtons; - ccbPreviewOptions.Items[8] := RSPageSetupButton; - ccbPreviewOptions.Items[9] := RSPageNumberInfoPanel; - ccbPreviewOptions.Items[10] := RSZoomLevelInfoPanel; + ccbPreviewOptions.Items[8] := RSScalePrinterButton; + ccbPreviewOptions.Items[9] := RSPageSetupButton; + ccbPreviewOptions.Items[10] := RSPageNumberInfoPanel; + ccbPreviewOptions.Items[11] := RSZoomLevelInfoPanel; ccbPreviewOptions.ItemIndex := idx2; end; diff --git a/components/gridprinter/gridprinterpkg.lpk b/components/gridprinter/gridprinterpkg.lpk index a6a9680c7..01b713351 100644 --- a/components/gridprinter/gridprinterpkg.lpk +++ b/components/gridprinter/gridprinterpkg.lpk @@ -16,7 +16,7 @@ - + @@ -46,6 +46,10 @@ + + + + diff --git a/components/gridprinter/gridprinterpkg.pas b/components/gridprinter/gridprinterpkg.pas index 14363ac95..fe6df3604 100644 --- a/components/gridprinter/gridprinterpkg.pas +++ b/components/gridprinter/gridprinterpkg.pas @@ -9,7 +9,8 @@ interface uses GridPrnHeaderFooterForm, GridPrn, GridPrnPreviewForm, GridPrnReg, - GridPrnPreviewDlg, GridPrnStrings, GridPrnActions, LazarusPackageIntf; + GridPrnPreviewDlg, GridPrnStrings, GridPrnActions, GridPrnScalingForm, + LazarusPackageIntf; implementation diff --git a/components/gridprinter/languages/gridprnstrings.de.po b/components/gridprinter/languages/gridprnstrings.de.po index 0b852650d..0748ec518 100644 --- a/components/gridprinter/languages/gridprnstrings.de.po +++ b/components/gridprinter/languages/gridprnstrings.de.po @@ -109,6 +109,10 @@ msgstr "Linienfarbe" msgid "Line width (mm)" msgstr "Linienbreite (mm)" +#: gridprnstrings.rsmanualscalefactor +msgid "Manual scale factor" +msgstr "Manueller Skalierungsfaktor" + #: gridprnstrings.rsoriginalsize msgid "Original size (100%)" msgstr "Originalgröße (100%)" @@ -140,6 +144,10 @@ msgstr "Einstellung der Seitenränder" msgid "Show/hide page margins" msgstr "Seitenränder anzeigen/verbergen" +#: gridprnstrings.rspages +msgid "page(s)" +msgstr "Seite(n)" + #: gridprnstrings.rspagesetuphint msgid "Page setup options" msgstr "Seiteneinrichtungs-Optionen" @@ -180,6 +188,10 @@ msgstr "Drucken..." msgid "Print grid" msgstr "Tabelle drucken" +#: gridprnstrings.rsprintingscalefactor +msgid "Printer Scale Factor" +msgstr "Skalierungsfaktor für die Druckausgabe" + #: gridprnstrings.rsprintpreview msgid "Print Preview" msgstr "Druckvorschau" @@ -207,6 +219,31 @@ msgstr "" msgid "Right margin" msgstr "Rechter Rand" +#: gridprnstrings.rsscalefactorinfo +#, object-pascal-format +msgid "Current scaling factor: %.2f" +msgstr "Aktueller Skalierungsfaktor: %.2f" + +#: gridprnstrings.rsscalegridtoheightof +msgid "Scale grid to height of" +msgstr "Tabelle skalieren auf die Höhe von" + +#: gridprnstrings.rsscalegridtowidthof +msgid "Scale grid to width of" +msgstr "Tabelle skalieren auf die Breite von" + +#: gridprnstrings.rsscaleprinter +msgid "Scale printout..." +msgstr "Ausdruck skalieren..." + +#: gridprnstrings.rsscaleprinterhint +msgid "Scaling of print output" +msgstr "Skalieren der Druckausgabe" + +#: gridprnstrings.rsselectscalefactorforprinting +msgid "Select the scale factor for printing" +msgstr "Skalierungsfaktor für den Drucker bestimmen" + #: gridprnstrings.rsshow msgid "Show" msgstr "Anzeigen" diff --git a/components/gridprinter/languages/gridprnstrings.en.po b/components/gridprinter/languages/gridprnstrings.en.po index 6162af57d..4d4b734ba 100644 --- a/components/gridprinter/languages/gridprnstrings.en.po +++ b/components/gridprinter/languages/gridprnstrings.en.po @@ -109,6 +109,10 @@ msgstr "Line color" msgid "Line width (mm)" msgstr "Line width (mm)" +#: gridprnstrings.rsmanualscalefactor +msgid "Manual scale factor" +msgstr "Manual scale factor" + #: gridprnstrings.rsoriginalsize msgid "Original size (100%)" msgstr "Original size (100%)" @@ -137,10 +141,13 @@ msgid "Page margins configuration" msgstr "Page margins configuration" #: gridprnstrings.rspagemarginshint -#| msgid "Page margins" msgid "Show/hide page margins" msgstr "Show/hide page margins" +#: gridprnstrings.rspages +msgid "page(s)" +msgstr "page(s)" + #: gridprnstrings.rspagesetuphint msgid "Page setup options" msgstr "Page setup options" @@ -181,6 +188,10 @@ msgstr "Print..." msgid "Print grid" msgstr "Print grid" +#: gridprnstrings.rsprintingscalefactor +msgid "Printer Scale Factor" +msgstr "Printer Scale Factor" + #: gridprnstrings.rsprintpreview msgid "Print Preview" msgstr "Print Preview" @@ -208,6 +219,32 @@ msgstr "" msgid "Right margin" msgstr "Right margin" +#: gridprnstrings.rsscalefactorinfo +#, object-pascal-format +msgid "Current scaling factor: %.2f" +msgstr "Current scaling factor: %.2f" + +#: gridprnstrings.rsscalegridtoheightof +msgid "Scale grid to height of" +msgstr "Scale grid to height of" + +#: gridprnstrings.rsscalegridtowidthof +msgid "Scale grid to width of" +msgstr "Scale grid to width of" + +#: gridprnstrings.rsscaleprinter +#| msgid "Scale printout" +msgid "Scale printout..." +msgstr "Scale printout..." + +#: gridprnstrings.rsscaleprinterhint +msgid "Scaling of print output" +msgstr "Scaling of print output" + +#: gridprnstrings.rsselectscalefactorforprinting +msgid "Select the scale factor for printing" +msgstr "Select the scale factor for printing" + #: gridprnstrings.rsshow msgid "Show" msgstr "Show" diff --git a/components/gridprinter/languages/gridprnstrings.pot b/components/gridprinter/languages/gridprnstrings.pot index a7312f912..9ab84849f 100644 --- a/components/gridprinter/languages/gridprnstrings.pot +++ b/components/gridprinter/languages/gridprnstrings.pot @@ -91,6 +91,10 @@ msgstr "" msgid "Line width (mm)" msgstr "" +#: gridprnstrings.rsmanualscalefactor +msgid "Manual scale factor" +msgstr "" + #: gridprnstrings.rsoriginalsize msgid "Original size (100%)" msgstr "" @@ -122,6 +126,10 @@ msgstr "" msgid "Show/hide page margins" msgstr "" +#: gridprnstrings.rspages +msgid "page(s)" +msgstr "" + #: gridprnstrings.rspagesetuphint msgid "Page setup options" msgstr "" @@ -160,6 +168,10 @@ msgstr "" msgid "Print grid" msgstr "" +#: gridprnstrings.rsprintingscalefactor +msgid "Printer Scale Factor" +msgstr "" + #: gridprnstrings.rsprintpreview msgid "Print Preview" msgstr "" @@ -185,6 +197,31 @@ msgstr "" msgid "Right margin" msgstr "" +#: gridprnstrings.rsscalefactorinfo +#, object-pascal-format +msgid "Current scaling factor: %.2f" +msgstr "" + +#: gridprnstrings.rsscalegridtoheightof +msgid "Scale grid to height of" +msgstr "" + +#: gridprnstrings.rsscalegridtowidthof +msgid "Scale grid to width of" +msgstr "" + +#: gridprnstrings.rsscaleprinter +msgid "Scale printout..." +msgstr "" + +#: gridprnstrings.rsscaleprinterhint +msgid "Scaling of print output" +msgstr "" + +#: gridprnstrings.rsselectscalefactorforprinting +msgid "Select the scale factor for printing" +msgstr "" + #: gridprnstrings.rsshow msgid "Show" msgstr "" diff --git a/components/gridprinter/languages/multilanguage_demo.de.po b/components/gridprinter/languages/multilanguage_demo.de.po index 49a806abd..a1e00f03c 100644 --- a/components/gridprinter/languages/multilanguage_demo.de.po +++ b/components/gridprinter/languages/multilanguage_demo.de.po @@ -64,6 +64,10 @@ msgstr "Druckereinrichtungsdialog" msgid "Print order: colums first or rows first" msgstr "Druckreihenfolge: Spalten oder Zeilen zuerst" +#: main.rsscaleprinterbutton +msgid "Scale printer button" +msgstr "Schalter für Druck-Skalierung" + #: main.rszoombuttons msgid "Zoom buttons" msgstr "Schalter für Vergrößerung" diff --git a/components/gridprinter/languages/multilanguage_demo.en.po b/components/gridprinter/languages/multilanguage_demo.en.po index 4b82e0d63..97153a192 100644 --- a/components/gridprinter/languages/multilanguage_demo.en.po +++ b/components/gridprinter/languages/multilanguage_demo.en.po @@ -64,6 +64,10 @@ msgstr "Printer setup dialog" msgid "Print order: colums first or rows first" msgstr "Print order: colums first or rows first" +#: main.rsscaleprinterbutton +msgid "Scale printer button" +msgstr "Scale printer button" + #: main.rszoombuttons msgid "Zoom buttons" msgstr "Zoom buttons" diff --git a/components/gridprinter/languages/multilanguage_demo.pot b/components/gridprinter/languages/multilanguage_demo.pot index 2e22c3844..4764af7be 100644 --- a/components/gridprinter/languages/multilanguage_demo.pot +++ b/components/gridprinter/languages/multilanguage_demo.pot @@ -54,6 +54,10 @@ msgstr "" msgid "Print order: colums first or rows first" msgstr "" +#: main.rsscaleprinterbutton +msgid "Scale printer button" +msgstr "" + #: main.rszoombuttons msgid "Zoom buttons" msgstr "" diff --git a/components/gridprinter/source/gridprn.pas b/components/gridprinter/source/gridprn.pas index fe68758e1..117debebe 100644 --- a/components/gridprinter/source/gridprn.pas +++ b/components/gridprinter/source/gridprn.pas @@ -30,6 +30,8 @@ type TGridPrnOutputDevice = (odPrinter, odPreview); + TGridPrnScalingMode = (smManual, smFitToWidth, smFitToHeight, smFitAll); + TGridPrnMargins = class(TPersistent) private FMargins: array[0..5] of Double; @@ -121,7 +123,12 @@ type FPadding: Integer; FPageHeight: Integer; FPageWidth: Integer; + FPreviewPercent: Integer; // Scaling factor for preview bitmap FPrintOrder: TGridPrnOrder; + FPrintScaleFactor: Double; // Scaling factor for printing + FPrintScaleToNumHorPages: Integer; + FPrintScaleToNumVertPages: Integer; + FPrintScalingMode: TGridPrnScalingMode; FShowPrintDialog: TGridPrnDialog; FToPage: Integer; FOnAfterPrint: TNotifyEvent; @@ -179,8 +186,6 @@ type FPixelsPerInchY: Integer; FPreviewBitmap: TBitmap; // Bitmap to which the preview image is printed FPreviewPage: Integer; // Page request for the preview bitmap - FPreviewPercent: Integer; // Scaling factor for preview bitmap - FPrintScaleFactor: Double; // Scaling factor for printing FColCount: Integer; FRowCount: Integer; FFixedCols: Integer; @@ -236,6 +241,9 @@ type property PixelsPerInchY: Integer read FPixelsPerInchY; property PageCount: Integer read GetPageCount; property PageNumber: Integer read FPageNumber; + property PrintScaleToNumHorPages: Integer read FPrintScaleToNumHorPages write FPrintScaleToNumHorPages; + property PrintScaleToNumVertPages: Integer read FPrintScaleToNumVertPages write FPrintScaleToNumVertPages; + property PrintScalingMode: TGridPrnScalingMode read FPrintScalingMode write FPrintScalingMode; published property Grid: TCustomGrid read FGrid write SetGrid; property BorderLineColor: TColor read FBorderLineColor write SetBorderLineColor default clDefault; @@ -591,6 +599,8 @@ begin FPrintOrder := poRowsFirst; FPrintScaleFactor := 1.0; + FPrintScaleToNumHorPages := 1; + FPrintScaleToNumVertPages := 1; FBorderLineColor := clDefault; FFixedLineColor := clDefault; FGridLineColor := clDefault; @@ -879,7 +889,7 @@ begin for col := FFixedCols to FColCount-1 do begin totalWidth := totalWidth + FColWidths[col]; - if totalWidth >= FPageRect.Right then + if (totalWidth - FPageRect.Right) >= 1 then // allow 1 pixel for rounding error begin inc(n); FPageBreakCols[n] := col; @@ -1694,23 +1704,53 @@ var hTotal, wTotal: Double; hFactor, wFactor: Double; begin - if (FGrid = nil) or (NumHor <= 0) or (NumVert <= 0) then + if (FGrid = nil) or (Printer = nil) then exit; FPrintScaleFactor := 1.0; Measure(Printer.PageWidth, Printer.PageHeight, Printer.XDPI, Printer.YDPI); - wFixed := FFixedColPos - FLeftmargin; - hFixed := FFixedRowPos - FTopMargin; - wTotal := NumHor * wFixed; - for i := FFixedCols to FColCount-1 do - wTotal := wTotal + FColWidths[i]; - hTotal := NumVert * hFixed; - for i := FFixedRows to FRowCount-1 do - hTotal := hTotal + FRowHeights[i]; - wFactor := (NumHor * FPageRect.Width) / wTotal; - hFactor := (NumVert * FPageRect.Height) / hTotal; + + if NumHor > 0 then + begin + FPrintScaleToNumHorPages := NumHor; + wFixed := FFixedColPos - FLeftmargin; + wTotal := NumHor * wFixed; + for i := FFixedCols to FColCount-1 do + wTotal := wTotal + FColWidths[i]; + wFactor := (NumHor * FPageRect.Width) / wTotal; + end else + begin + wFactor := 1.0; + FPrintScaleToNumHorPages := -1; + end; + + if NumVert > 0 then + begin + FPrintScaleToNumVertPages := NumVert; + hFixed := FFixedRowPos - FTopMargin; + hTotal := NumVert * hFixed; + for i := FFixedRows to FRowCount-1 do + hTotal := hTotal + FRowHeights[i]; + hFactor := (NumVert * FPageRect.Height) / hTotal; + end else + begin + hFactor := 1.0; + FPrintScaleToNumVertPages := -1; + end; + + if (NumHor > 0) and (NumVert > 0) then + FPrintScalingMode := smFitAll + else if (NumHor > 0) then + FPrintScalingMode := smFitToWidth + else if (NumVert > 0) then + FPrintScalingMode := smFitToHeight + else + FPrintScalingMode := smManual; + FPrintScaleFactor := Min(wFactor, hFactor); - if FPrintScaleFactor > 1.0 then FPrintScalefactor := 1.0; // do not magnify + + if FPrintScaleFactor > 1.0 then + FPrintScalefactor := 1.0; // do not magnify end; function TGridPrinter.ScaleX(AValue: Integer): Integer; diff --git a/components/gridprinter/source/gridprnpreviewform.lfm b/components/gridprinter/source/gridprnpreviewform.lfm index efa2b9046..77e88a860 100644 --- a/components/gridprinter/source/gridprnpreviewform.lfm +++ b/components/gridprinter/source/gridprnpreviewform.lfm @@ -2,10 +2,10 @@ object GridPrintPreviewForm: TGridPrintPreviewForm Left = 375 Height = 649 Top = 136 - Width = 840 + Width = 901 Caption = 'Print Preview' ClientHeight = 649 - ClientWidth = 840 + ClientWidth = 901 OnActivate = FormActivate Position = poMainFormCenter ShowHint = True @@ -14,7 +14,7 @@ object GridPrintPreviewForm: TGridPrintPreviewForm Left = 0 Height = 26 Top = 0 - Width = 840 + Width = 901 AutoSize = True ButtonHeight = 26 ButtonWidth = 28 @@ -31,7 +31,7 @@ object GridPrintPreviewForm: TGridPrintPreviewForm Action = acPrint end object tbClose: TToolButton - Left = 619 + Left = 647 Top = 0 Action = acClose end @@ -94,7 +94,7 @@ object GridPrintPreviewForm: TGridPrintPreviewForm ShowCaption = False end object InfoPanel: TPanel - Left = 672 + Left = 824 Height = 26 Top = -1 Width = 68 @@ -170,7 +170,7 @@ object GridPrintPreviewForm: TGridPrintPreviewForm Visible = False end object tbPageSetup: TToolButton - Left = 576 + Left = 604 Top = 0 Caption = 'tbPageSetup' DropdownMenu = PageSetupPopup @@ -207,14 +207,14 @@ object GridPrintPreviewForm: TGridPrintPreviewForm Visible = False end object tbDivider6: TToolButton - Left = 571 + Left = 599 Height = 26 Top = 0 Caption = 'tbDivider6' Style = tbsDivider end object tbDivider7: TToolButton - Left = 614 + Left = 642 Height = 26 Top = 0 Caption = 'tbDivider7' @@ -248,19 +248,25 @@ object GridPrintPreviewForm: TGridPrintPreviewForm Text = 'edPageNumber' end end + object tbScalePrinter: TToolButton + Left = 571 + Top = 0 + Action = acScalePrinter + ShowCaption = False + end end object ScrollBox: TScrollBox Left = 0 Height = 623 Top = 26 - Width = 840 + Width = 901 HorzScrollBar.Page = 98 HorzScrollBar.Tracking = True VertScrollBar.Page = 98 VertScrollBar.Tracking = True Align = alClient ClientHeight = 619 - ClientWidth = 836 + ClientWidth = 897 Color = clAppWorkspace ParentColor = False TabOrder = 1 @@ -284,323 +290,332 @@ object GridPrintPreviewForm: TGridPrintPreviewForm Left = 248 Top = 56 Bitmap = { - 4C7A1500000010000000100000005B0700000000000078DAED5C496C1C4514FD + 4C7A150000001000000010000000710700000000000078DAED5C496C1C4514FD 8030706493301C584F5C38800411041002895D8845700185C00121B8B1078908 - 14084BE016842276057B7A6680D8C20708E204048C586C8F1DE03052100212F0 - 28D812B1603CFC57AE766ACA55DD555D3DE3B1DD87AFEEAEAE57F5EB2FD5BFB6 - 6EB55AD4CA8926226AB95012DEA58EB477E325DAACD78934577CB7EBE7B4469A - 6C0C326EE8F5FAF0AF5C1BAE7A3350C3A5CEB4B6AC143CE7AD4B4C3DC7FA83E4 - DFCAD17F75AA95E929900F662CA2CB6A119D20DBF7194894C5697867AD2BA23E - AEEB5DD1AE32DDAFE39186779CEF9D6F5EA3A30DB2DCC934CF7EF64414D1513A - 1E695CC693C8837A54EC78996E96653FA695B9885FCCCBE523EF64896E52F2ED - 61AAB536D3916978C14744534C9FE3F9C7F7E824C19356B70D2F78886813A737 - C776D2F1B50A5D28F9B97609BE4C778096A497E806D12755E88218CF32B9C655 - C72CAFEB63FCD4FB7422F8E7321F75B62B6EAB6C736C277BB84DE3BAFC4C24E5 - 57E3FC5F2AE5DD2AFBD8871CEB6E41E787D3E9087E2E41A65CEEC3263E44BDDC - 46E481ADE9EFEB6FD2B1B28C16DA8272205310EBE011F02C6CBB44033F8FD031 - 093E771BE7FB5AC8F4B09FE3FE2BC6DEE22AE36F233A99FD6D1D08F79DEC277A - 89584EDFB19C7618F47E2EFBC8A58E7DF2A8D6A7ADE3B4832EFDAD8E57B04DE6 - 61830F5EC1A25FBBCFE39B323A354067C4F53276A3E73729181FCA7F1EF2CBA8 - BF20FB29A8F7887577E3DE013A35630CB445C606DBB36299F6FD10D1995EFD58 - 899E89B1E38374B6677B1FC88ACD032F638FA76519BF7079E784C83E8BFCF2D0 - 5F1EF65350F709BA82CE02F4BD5DC6C45BB2E061ABB0D9903226AB747A3CDEE4 - 325ECC52067C57E1E3C16EE2DBF88FE8856ECA2F547FA1F653D0F2116234C46A - 86EFE90EC4760EF11FE6630E2266D4D2475DE67A10A3CA31625B19AE78F9CDBA - 5B96311BCF99F8E0E53CC5C6980FE94F5DC3ABFCC73173B7E417AABF50FB59E9 - 3456A5B33876BB57CC75F015CF2E38398F5566FA8D716F316D15573C4714E17D - 0AF62760BE88E838F51D9E9997E7F1DE5606CA677A4E9B23BB538B47B7229FB1 - BDCC23E66F92E6F9051F9C4F97879015B7D3659D00F998AF7B345F799C7DED59 - C5F697CCF3C6E35EE443FECCF597E86DBDFEB8FDBADC6DED37C5E162DE8B7594 - 247FE6FB554E1B36E94FCE215AF52FBFE7F38C3FC4745D820D45C2DEB89D42DF - B846F43BEAE5EB21294F6B19BAFD4356717B9987AB19FB8F2C632E4B7C807A35 - 3EAE0A2C6338E337F24A604DF319ABC5FF0DBEE7E5FF3AF9FABF8587AEF9BF65 - 4EC1D9FF6DED77F57F434C50F8FF0AF0FF786DD3B6FE99C7FA78CADAAA0BD5F3 - AEBFC017F85562BFF58CEF92F62134B98FBF3C446E4C7F709F7945563C632F49 - 2A43DDD7A2EF358AAF4965A4E075D934B3E8263136B7D49FD49EA2FEDEAB7F19 - F96FF4CABEA18CEBF6ABA2FF497AE7D2FF38CAA663FD8FE0137B8206E9BCC577 - 7C8F34173CF4C4EDDBAFE6C73DD2621DA6F8CFBF363BE0D8F7BF4ED71FD0FEBA - 87FCEBBD3AFF67896352FDCF614F46A2FFA5E1D3FC2FD63D6C44E7D5C5FF2607 - E922D888AC6B3F9EBDFC4FDA88C06BF653C4C80EFD4FA0FC92F4E7CAA3CD7E42 - FADA6EE31DC7218DE2FBBBACDFDF7A276D42EEDDDB8D792A8B3EE7D8CE3FC11A - BD09CFF79F629F2CF664DBF66A631F34CAB0E0313FD6071FC4FE1FD547E367EC - 81453E0BBE15F7096DE9FAB3C73DF3FA912FC6A41747CC5C2CBB58D74AFD7587 - F6EF867C13E51FD126BE7EACDB28E68AA157E82649FFC06AFA2FFCBF47E2EF02 - 5FE0D7CAF8DF93EFA62DB6CF3A0EF1C5EB7D4816BDA96578E21BDABA60732D9D - BFEB51FC74C0F9BDE95573EEA64C77E96922C629D3CB5246D3B8B79D7DB2EC57 - 7985D377B19D9FC2B14A3FDF0FA10C8F3E710658654F6A3FE3FF0EE9936DF652 - E0971D3F9F9486B81871B3EC37FBF4B3441C6FCFC23ED43DC0B01FA5AC0AD387 - D26F71AD68F60F3B1F064E62B1E7609B1AB3AB783DB697E3816D4C7F321D607E - 5ED2F388B8BF4CAFDBC6052BF87CCE068F3E7336A91F71D897DEAFEB26CBFE70 - E829107F20003B0CFB68B39D85BE72D6417E33BA6D49DBDDA5F6959EDFC1E9AC - 5889FFCB052FF7245775FB97FC0FA9FE6B229C1BE771F107188BABF6A37CA766 - 5CED907979C3B79DB6FA3DF764573BE5FF8EB178C3655CE23A9F92373EAFFF8F - 78CC07D54CEB4AA9F3518C01561F0BB850AD4CEBD53108CE9AF3F3AFAEF58B73 - 7D38E7BEB02F6FBD692C9274AFF1DCD67E57F9C7ED5FEBF69333BE91D7D89FF3 - 4DC47A95BA9AF0EAABE43AACF80F82B2F6EA5B06EC3A099BE7FF6BB2DCE7810F - A582FF207CC7FEBF23ED775F56DB0FF11F5FFF2DE6FF7B73FD0FFFEFC1FF64C6 - 223A1F847BE33F7D2C789C1DC69901F9CFA129DC9BCE13EB78AEE776E4E3F411 - FC2BE7FB884E03C97F258DE01DF224E0C7C5D906CE2FD723AB18338BB5294E13 - EFF0CF1F0B1E6D653DED95E3B50A8F6F2E96FA4319FD78873CAE786065AC5376 - C11BF8AF48AC13FFA1F2CBA0BF86E9DC8887FDF484FFB7F151E2365417E6067C - F6FF2A6943F1BFAE7CF6FF1AF0CEFE6FC2FBEE3FB5E1D5FFCE65C4777CFF6A1E - F5AF707C232D5EE8A5F5BFFF01B62C9E9F + 14084BE016842276057B7AC64062E103047102428C586C8F1DE0305210021270 + 2BD812B6F078F8AF52E594CB5DDD555D3DE3B1D387AFEEAEAE57F5EB2FD5BFB6 + 6EB55AD42A88C6226AB9501ADEA58EAC77A315DA68D68934577CA7EBE7B4384B + 3609328ECD7A7DF8D7AEB1ABDE122876A933AB2D2B05CF791B12D328B0FE20F9 + B70AF45F93EA557A06E4831989E88A7A4427C9F67D011265711ADE59EB8AA887 + EB7A5FB4AB4A0F9A78A4E11DE77BEFDB37E8D804596E679A673F7B2A8AE81813 + 8F342EE369E4413D3A76B44AB7CAB29F30CA5CC02FE4E5F29177BC42B768F976 + 33D55B1BE9E82CBCE023A209A62FF1FCD307748AE0C9A8DB86173C44B481D39B + 23DBE9C47A8D2E96FC5CBF045FA5BB404BD22B7493E8936A7491C2B34CAE73D5 + 31CBEB46859FF8904E06FF5CE6E3CE76C56D956D5676B29BDB346ACA2F89A4FC + EA9CFF6BADBCDB651FFB8863DD2DE8FC703A1DC5CF15C894CB7D34890F512FB7 + 1179606BE6FBC6DB74BC2CA385B6A01CC814C43A780C3C0BDBAE50DF2F43745C + 8ACFDDC1F9F608991EF673DC7FC3D8DB5C65FC5D44A7B2BFAD01E1BE9DFD4437 + 11CBE97B96D3B604BD9FCF3E72B9639F3C6CF4696B38EDA04B7F6BE2356C9379 + 58E783D7B0E8D71EF0F8A60C4FF4D159AA5EC6AEF7FC2605E343F92F427E39F5 + 17643F25751FB1EE6EDEDB47A7E78C8136C9D8606B5E2CD3BE1F233ADBAB1FAB + D0730A3BDA4FE77AB6F7A1BCD822F032F6785696F12B97775E88ECF3C8AF08FD + 15613F25759EA02BE82C40DF5B654CBC290F1EB60A9B0D29637C80CE54E34D2E + E3E53C65C077353E1EEE247E11FF11BDD449F985EA2FD47E4A5A3E428C86582D + E17BBA0DB19D43FC87F9988388198DF46197B91EC4A8728CB8A80C57BCFC66DD + 2BCB985673263E78394FB15EF121FDA963789D7F1533774A7EA1FA0BB59F954E + 2303740EC76EF78BB90EBEE2D90527E7B1AA4CBF33EE1DA6CDE28AE78822BCCF + C0FE0CCC57119DA0BFC333F3F222DEDBCA40F94C2F187364771BF1E866E44B6C + 2FF388F99BB4797EC107E733E52164C5ED745927403EE6EB3EC3579E645F7B5E + B3FD25F3BC6ADC8B7CC89FBBFE0ABD6BD6AFDA6FCADDD6FEA4385CCC7BB18ED2 + E4CF7CBFCE698349FA93738856FDCBEFF93CE367986E48B1A148D81BB753E81B + D788FE40BD7C9D91F2B49661DA3F64A5DACB3C5CCBD87F6519B379E203D46BF0 + 714D60198339BF9157039B349FB15AFC3FC1F7BCFCDF245FFFB7F0D031FFB7CC + 2938FBBFADFDAEFE9F101394FEBF02FC5FAD6DDAD63F8B581FCF585B75A146D1 + F597F812BF4AECB791F35DDA3E8426F7F15786C88DE94FEE33AFCA8B67EC6569 + 65E8FB5ACCBD46EA9A564606DE944D338F6E5263734BFD69ED29EBEFBEFA9791 + FFB85BF60DE55CB75F15FD4FDA3B97FEC751366DEB7F049FD813D44F172CBCE3 + 7BA4B9E0A1276EDF7E3D3FEE91A67498E13FFFD9EC8063DFB976D71FD0FE8687 + FC1BDD3AFF67896332FDCF614F46AAFF65E1B3FC4FE91E3662F2EAE27FE3FD74 + 096C44D6B51FCF5EFE276D44E00DFB29636487FE27507E69FA73E5D1663F217D + 6DA7F18EE390B8FCFE2EEBF7B7D14E9B907BF776619ECAA2CF59B6F3CFB0469F + 84E7FBCFB14F167BB26D7BB5B10F1A6558F0981FEB810F62FF8FEEA3EA197B60 + 91CF826FA93E6151BAF9EC71CFBC7EE28B49D28B236656C94EE95AABBFE1D0FE + 5D906FAAFC23DAC0D74F4D1BC55C31F40ADDA4E91F5843FFA5FF7749FC5DE24B + FC9132FEF7E4BB698BEDF38E437CF1661F92476F7A199EF8D858176C1E49E7EF + BA143F19707E6F72D59CBBA9D23D669A8871AAF4AA94D124EE6D679F2CFB555E + E3F41D6CE7A771ACD2CBF73B5186479F3805ACB627B597F1FF84F4C9367B29F1 + CB8E9F4F4B435C8CB859F69B3DE659228EB7A7611FFA1E60D88F56568DE963E9 + B7B8D60CFB879D0F0227B1D873B0458FD975BC19DBCBF1C016A6BF980E303FAF + 987944DC5FA5376DE382157C3E679D479F399DD68F38EC4BEF357593677F38F4 + 14883F10801D847D2CB29D437DE5B483FCA64CDB92B6BB43EF2B3DBF839379B1 + 12FFB70B5EEE491E30ED5FF2BF53F7DF24C2B9711E177F84B1B86E3FDA776ACA + D50E9997B77CDB69ABDF734FF640BBFCDF31168F5DC625AEF32945E38BFAFF88 + C77C503D695D29733E8A31C09A630117AA5769AD3E06C159737EFECDB57E71AE + 0FE7DC0FEDCB5B9B341649BB37785ED47E57F9ABF61FE9F653303E2E6AECCFF9 + C6945EA5AEC6BCFA2AB90E2BFE83A0ADBDFA9601BB4EC316F9FF9A3CF745E043 + A9E43F08DFB6FFEF48FBDD97D7F643FCC7D77FCBF9FFEE5CFFC3FF7BF03F9991 + 882E04E13EF19F3E163CCE0EE3CC80FCE7D004EE93CE139B78AEE74EE4E3F421 + FC2BE78788CE00C97F250DE11DF2A4E047C5D906CE2FD723073066166B539C26 + DEE19F3F163CDACA7ADA2BC76B351EDF5C2AF587327AF10E795CF1C0CA58A7EA + 824FE0BF26B14EFC87CA2F87FEE2A473231EF653FAFFCA59FF6BEBFE01636E66 + 4EAD19C36FA43FCD4A9DCCB9CCEB993257630E97B816675D74BD19E395992CBC + FA6F871A6FE8E315FD9F1EEDC20BFE359E8DB1D34C2EF9C9320CF9C549670CB2 + F4F73F38269A49 } BitmapAdv = { - 4C69020000004C7A150000001800000018000000700E00000000000078DAED5D - 6B901547156E7CC4175A9AF8282D254663197E68458D5A3E4A0BCA8A518C29CB - 125F41FD63241A8DD1248A8F888A294C41AC8AFA23958AD124C0DEB9BB988862 - 69884802092021ECDE7D106043C00A6CAA209100054BD85DCFD773FAD20C3D33 - DD333D77F7EEF68F537777BAE7EB9ED3A74F9FEE3E7D7A6C6C4C8CB592168AE7 - F54662B408D1EBD3F2F0A3483C9FF28E11FDBD51133FB221E4C53BA89B2D7E23 - 12D7D97E736F5D5C5F14BF2F12676551597CE6552A95C527FEDE984553853F94 - 3EA8BF57843F1A0D1AF0F17C3DE5FD7551F9ECADC977D7ABEF4AE2537D169695 - 7F60E8F8D4468FE7F1B82869D8ABE9DB7EE09580A9CAA2EFF3AD274F6BF3298C - 4F72368FF5BF6AD79D3EF107568837939C2C228CC520FAFB6B2DE74F85F25975 - FF1A6BB5FD305E44BA8BBEF74E90CD38E24A843B43E3EB8C7278621AC9C05761 - DBA8BA42CE153EFE56DF24ED1FCA6B635B817A968957297B09D4DF21DE9D868F - 345DC61FFDB378650E0FCEA6FEFE48930F75713BC69B347CA4218FC6B72DA85F - 2A4F22B18AF39EA06FFE62520F9CC11F55AFBAF8B27C274EBFD7C42BE80DAD1E - 5F32E999347CB6032ED7F4CD57F4B42DB78A17AA7E4C75B92B4D8F65E1B3CE59 - AEEC87B56BC50B9A65D7C5C55CEF933D5DE22D45F11B1DE2AD943E22E5A2263E - A6D90EBF659B615D961ECEC367AC07D956F98DF66C2DD77F512AFE4A710EE579 - 0E84BF33F4F262AEEB7D1AFE00F3FE1B59F24BDFFC1150CE7876257F679F86DF - C7655E597A5CA9896F317EAF86BF86F97353597C92D3258CF5CFE433AAFFC3A5 - F109836DCD254D9D13898FF2378DF6748A0B0A63778899CA9638AD9DE239E90E - 2EE39EC2BC8FC45F18E3B1A48EA076F96CB37F531B15E0FB77B4B9C36772FAF7 - 08F23BF0FC6AD56FE9BDBBD3F26D59255E4A791ED0EAF13792830B53F579A778 - 973E5650DE7F3F14899764D505E9DA7728DA4AF5BA85FADFF741F81BCF127996 - EDBE43BCD87ABCAD8BCBE89D6E0B3B671BB5D7A525C6F50F13C6CFC12BFADD4C - B4899EFD15CF08F74353C67E0AE4D6DF3BC53BA91F7C17365115F8247FFB5917 - DD965A8715E24D946729E59955005FF59F55A6F4EE489C47694F709E833EF113 - D8D2F6F4850FDB3C31A75ABFFD5EF1721FF8BEB04DF83EB14DF8BADD8E3182CA - 9A5E523E5B8A5F357FAA6EDF56C8672BFA9747FD50A97EAB5A3F070A14687C48 - AE45D4C5CD7973F982F381F349E7FC97F5DAFE0AB14BCD6553D66776FB1C83DB - 1D9BED9286867D3FE6C85EE70115E357CD9FC9544695FDAB15FAA115FA2D50A0 - 40ED43D001D005597B2E5ED69948A741B755807F8FA68FBD97C16BDE6B4219D6 - 65DCAF95D1DD2EF855F2A75DB15BD1BFAAD60F55EBB74081028D0F61ED156BB0 - 588B2DE027310B6BBF5803CEC8735BD17918D6ACF9DD27B0969D926795EE47EC - 88BF5AD3CBC632CAE0F3B8F22FAD8CBDF0EFF1856F534659FCBC327CE0B31C4E - D7FD2288FED32EF806FEEC513E6015B4EF1EDDBFCCB37CEE49FAAE4DE4FE55B9 - 7EA858BF55AD9F034DEA717B7A5F5D7C9BE72DFBD8B716BF6BF0BCCCBA2DC9DB - 1708E729E9CF5717BF68D4C5A77A22F101FC92BCFF12E70788861A3531B7800F - 1ECE8A1D87FF9EEE3FAB139EF3B71DA7DF050EEBFC9F67EC59269FB894FE8D32 - 3E67397E3C65F23B947D3412C74CFBD8EC73B8BFFB4EF1B21C5F3A7CEF0E134F - B6AF106F808EC1AF895794B62BCF1F52CA09B5A5292D0B9FBF6F91EEAB9A3607 - 857CA8FFB746E235184B2491EC001FBFEA19D235FC4F53FA9339F8C384FFC1A6 - 7F23F13BC7E7F0986A73BC87F773F0F755597FF842A3EF14E27F5DFC8AD2FF91 - 239F57A15FBACA0FFCE2E5B9BABAF8A685FC0F414E9DE43FF68BDD9727FFDC57 - E63AF6DFAF4B3FDD480C50DBBCC7D2677501CA40BF4CD33FE089EECFCBF44C6F - 8778AFA58E9BCB6B32BB64DBD5C4A55206E997DB72979437F6892F5206F8893E - 8F7E09D9837CE357FE4F6D8974F04462162CC36A6D283E9F723071A6E97F7D9D - E2FDED54067862E0D5C1B43EE9AB8C2263A845198A57077CD6BFD91E5DE2F5A8 - 377E83FDD31EF64FC6FCA6B4FD6371E6A294FD93453EEC1F8B6F2F67FF18A8AD - EC1F0FF5CFB27F2CC6EC52F64FE61A8807FBC7E25C5069FB27A5FF06FB27D83F - C1FE99A0F68F69BD3FE3CCEFDE22FEFF8D4E7191859FFD4505D757BDE3E33B3D - C44DD89BC54BF47BEEFB63DB22314FFD9F46DBE2F81863EA7F9B366B57FE07FC - 801FF003FE78E157AD9FAB1E5F2659FB7AB74F304772E4F57A97B51AB6192FCF - 9319255F3417D8E1728EC196E72A6F772466C397C0F68CA82B3EF222E60F97B1 - 21AF0C1D3F2BDE5E322F9781D80A1B76DE2D5EE10D5F6BABDE2E318BE6810334 - 6FDBEC893F4379752853FF227DCDA5FE65F15DF55AA87FA87FA8FFD4A97FDBF2 - C7727C37918A01E7D13E31D150F0412A7C56C189FFD837A8C23E54730A199BAA - 02FB50C939C77AF46E1FEAFDA8A87DE8D24F8BD887AE7A408B5DF940597C6AE3 - 77E4E9BAB2FA0D65A4C9D544185F5A81CFEBED4F9A7C643936CC3E7DBFC569FC - 3AB55FB03463AFE9467D2FC4059F64EDA4831E3AE98C1FEF7D9FA0FADD90315E - 613FEE04CD8BAE2DC27F1EEF8633F87F0279CAC84F96FF73326D02C8E75EDBF5 - 7B9F7B31810AAFC5AD2FEAABA3AF25FA5AFF715D9F735DFF49F8349EED7BFD47 - 1B4B2F61BD75934D5FB41DDF35EC638C3F4CFAE55A1B5BCC66FDA7E94B43981C - 2F187E41474D3AA8C8FA8FEE4BAABE3F2F9E6A89BD4E675D17F0037EBBE3ABBE - AAF0B3EC8722F8ECE7B954CEAF6AE2A769F64F617CDD4FA52E9ED3ED275FFC47 - 19B02949977EAFAAF6ADC2BE6A257EDEF85E64FDC7D35EE150D8FF9AF8FB5F2E - 75F1BDBED10EFB5F9361FDC195D0B6D4277E52157E19F9EFAF894FB20C0EE7E8 - 8C611903BF2E3E618B4F63CD1CE9EB1F891BE08B9BA943299DB07F86729265A4 - E1A37F02BBF92CED7E1FED39DF63B6C912FFB88AF52FE3D144E2507FA778DB19 - 716AB4E7C88FF72CF14FAD3BD5C5CDCADF448D43C6E70659B5C11F8BEFD11953 - BE2CF26F79EEFED4735FF8729DB279A6BF1AFC53EB2DFEF13DF2E7B87E57047C - 84959C24E2291C2C283F9BD1675CE45FDE5F11898DB9E37BA7B800FDB0379E6B - 2FB4E9BF8C3D8CB9BAC598F12C624170199B24AFB2F5CF7179C74C4D7CDCC087 - 41C7FBCFB6BADA3F7C47E3E25C8A6397E30CC3834EF60FF1D8216F8DCF9E6DB0 - B67FDCF017F2BD3727ACED1F477C9675AB329CF1E3733FF23E3DDC8B83F6409B - 7BC21F2C64FF58E2A7EC372C0CF8013FE007FC805F11BE3666B8927C371B7FD0 - 83FFCF60D8DF739AF3FAE039E4E211931DE7641316B015CBCA7C9EADE811DF68 - 2BFAC437D98ADEF00DB622D1A39EF03365B02C7E96AE0BF8017FCAE39718D3F3 - C67A8E27305611ED0A6378FB11D6F448FEE6C38F04714D10D32237A64424CECB - DBEB25DBE02CBE8B7B242127BBF3E231607D1C7727E7C4F4F83DDFAFBC14F710 - E23E5EF6B7D9013FC72CDFB63CDB5ADD2DAEDF0BDDFCF62EF146AC9D53DA1F0A - E3C7B18DB0A63723650CAE133D5D183F122BE3F433EF8E67FEAE6C64D72FAFFE - 213DA487F4099A4E695D0DC7FEDFDF25CE55F7DDEBF832C65A2466EB584A7FE1 - 9D94F23B1B09FD45CFEE203A8CBD4785CF31A5BAA0C7F53B333026F1B8B134C5 - 57FB505F5DDC7E9A5E5E295ECBF7D71DA5B1E14FAC5FA107474DF7D3D35CF677 - 6AFC40D9F06DE47D1DC4AC7B2619DF5B96BD5CBC8ED2FA784E87B16C342DCE15 - C63FBE3B7E24B18FF338D1FB52DB96CA68C431F590F72A9BB198F25D21EFAA8F - C41C9BB85E3DCB88BF3971BC02A593BCD3AEA02D4E6DD5D157130B4CF2A58DDF - F35836CBD8E3239071C86105719DCE65BF42F4AD5B2A5B0F8BFD0846D262D67B - FA0EF4B32BAAC097B1D7E239DD7595C4F68CF515F0E7789F93C67A7627F4559A - 4E810C234E1ED9CB1D0EF21FB17D7B087AD6A40BE5DC21D6CF230565FF698C0F - 697D8CE72590DD2569635899F954DAD8E569AD60BE6C73075F61C73E773DF05D - 7CFD937D0A73238C63C6FA23366CDCE72E29C45FB2516047601C3695019B82EF - A4DF81B95A211EC4FE2CCF12CE7653EC3ACC5F31C76419AE4B99761D0B3AC4AD - ECA732649AABE219F808592EBD36E3188BD62616A8B2AD5CE37C5AC6A9EDAA02 - 9B75CBEC349BD00F89695963BBC733F64316F867F848996249259FD9FA869B7C - BC6C9E59FBFE4F02FC326455FF2E314F9E1D61B27AD6957DF6BA2AFEC04EC13A - 9D6F7C60029BFA760FD6BAD5BDE53EF80F2C8EADD0833926EE01C5DEA7F48F2E - C97FB60F71C768BF8ABF3AB0529CC3FBB70F95E50F7C0F8105CCE6DCA5427C13 - 7FCA50923FA6F62D2BFF7AFB562D9F41FF8CAFFE9994F8D58EEF43AD8CFDD3D4 - E19A5D8FBF55DFF460FB614F6A35F01E5B2E5ECD6799B6E2CE03BDDF97B28D63 - 7DB20E7A91699DD257BE08BE24D0DF2097B3F49E623AA5B6B7491E9331495DFF - D7E5D5187323D1575CFFD79F4D06FCAA29A95B7CB4AF16632AB46F68DF89DDBE - D5EAB74AF5B3CBF8C2B6FDC3AEB15AC6737CAC7A7CF7699F84F35FE1FCD78438 - FF9572FEB2F4F98548FC58EDF157828FB39B75F1C732FC9131276BE21ACADBDB - E8103379DD7D26FE47BC11A497C1E73BF0B047B011EDCBEFE11EBE8DF279C63D - 6B96F8B364CCA7D85FED08B7E961FEFF68D6FD5869F89227542FBCABF6A1C113 - E2C7F918ABF0CB3C1A95E9A803E54FF22A0D9FF97D48D62F5E879FAF74B73CBF - CBFBD5BCCF35CAF90EE13D2B7C6A3BF057FA35729BF23EA9BAEBE8A03A8F8B74 - DEAF437BF4DAE0F3B7A30D8FE0DD9DABC58B8049F5FE21D6AB58EE0FC8EF89B1 - 8FA0ED555D6CDA97F740A0F32FEC8EC4DBE59DB4AC6BD439023C473AFE36EDCF - 66D59FFD814FAB3FEA2DB1E3384185EB6FE47FEC977940DD35457DF76203FFFB - CAC80FF40CE447E99BA4FC24E3078D97FC67F4DFC3CC9F23D6FD37DD57FC1AD8 - 3BF23B58FF4066592FDFD7D43F19F70CE6D827C770F61FDF0CBE9AF427EA90A3 - 3F83FD636B7318E605A4D346FBBBC43C1FF68F695E43F80706F89ECBB2F64FCA - 9AE790B299CBDA3F16F8A5CEBFE7E1973D1F6A8BAFC7E4A9025F9FFB4E357CE7 - F8FF8EF8C97595463CE65E9D16133BB46FC0CFD2CF26F9D1F7751CF1875CD791 - C2F977F7F3EFFF0757DF14454C7A150000002000000020000000231100000000 - 000078DAED5D7B8C1E55153F45041554A8A08848D0A0A0FF18D00828082A5A63 - D4189EF2507906250AC8A3C404A5FE212A504489C082B180B4DD6FBE6D2B20C5 - 444CC12DA5401FEEBB1B8C404B8B641B9BB4425F6ED7FB9B3DB3BD3B3B8F3B73 - EF9DF976F7FC71B2DFCEDC99DF997BCF3D8FFB3877646484468426506F40232E - 69B2E2BBAAC7A9805FA6AEA712BEB4FFD46D7F55A6D385DE30D4639DA6FACE97 - 1ECFAB6F5FF2D76AF869ED5E11D589ED54CE6CE552F0057F2AE1A7F4EDCEE982 - 3FD9DA7F9ADA804E8975CB515F4007F634E8B720FCAE1A5FE15E15B5237ED780 - 3F47C39FE3AD9F36E93B3D013DDEDFA06F9AE2A32C9EC1B365710717D021EA1D - 4BB4BEF21F537C948DEE29D9583CB098DE5350B60E53CFF6E97D55F1F257537C - 948DF5F35EBCD3107BA62A3FA83DBBA7AF49BF5911D0DB4DF15116CFE059AD1E - D675CFA783B3F169862AFB270D7B676F83CE2C2B7F0AF32C757F97DE1699321D - D0A5FA77F734E90C5BF9671EF47AB828A9DC8B4B697F757FBDF6CEDB5DF53F55 - 87BFD6BEEB65C5C37E09FDEC32ADCCA6787BDBE0AF7A8CDEA1CABDA6C9F2A509 - F6F8C931FC265DE35AFFA83AF8515A5F6299DFCDEDF3BF9E05F43ED7F8FD8BE8 - FDAAEC303FB36BED123A48D3579FD3EAFE39A37EDAA49BC7644AFD36D2D901AD - D6E4F064AD6E2ED7F0E719E27F11751592FA6D68331ED6EAEC124DF6666BF8BF - 30D593DD1D742CC8D89634E8571AFEF51A5FD76BB2F74B8F36F3F6241957F577 - 85C6D71FBCD9D2063D3886AFDA5C93FF93B5BEB1DAA3CFBD36C2E90EE8A431FD - 10D0BBB5BEB1DBA4FF95F0D70E8BFA38B05E7C98DE15E3ED6F45F44F61FC265D - A7C9F89309B27189767F63D74374804B5F153A5D6BFBEFA6E8E80D9A7EB8D58B - DC07F44A9A6D81BFA6DBDF34DB5F10FB1CDDFEAAFF2F4C2D3F87F651651ED378 - D881E74B6307746EE8C3EC7DDF23F071326DE5685FD0FD2FF48BB9681F535CC8 - 0EDBFC61ED3D0371994F7D7E111D019F31E643AE57DF7303FCE2B4E7D6047428 - EBF20DFAB34A96BAD72DA4C38BD41D7C45F5ECD284987538D4234D7A40F5A9DB - 42D952BF59B70CC7CB2BEC3FEBB6B6441B7E7B5CDF31A74D8ABF0B1CF5DFFD38 - 0E7A3A264F71DAA9CA3E059E937C3C1704D982BD870E814E0BF59AE24DE17DA1 - 888C0A0909B53EB15FB245D11AD5C78FAC619C764B119F04364EE9A6FBE1CF29 - DD748AE371E23603DBFD9C6E33ABC24FC0AE0C3F057BBB8A6B4FF78DCFD82B63 - E576F434E96B1EE609DAAAC4CEC2AF023B0D3FEC6309EDADFADD2CCFF3346D1C - 27DC540576ABE2D75DFF19F2B7B30AF9AB928792FA676715FAA715F46F2BD81F - CFF6B756FFA36EFF4B4848484848A8A5F7AB8CCEEFFEBD27A0AB2B5F0BD4A4DB - C6F929EDF489DAB02BC44FC4F6387F1AF38B6E4918FF9E2BD85ED7BCDD3A617E - 45C94025FD5BC9745DD8AD805F77FD6B7DFEE7097DFE0EE1A1161E6AD3BFAD60 - 7F5AC1FEB682FF21242424242434A5D72228DB0A1BABFCE06B2BB7EF31FFBF6A - BF5BE20FF1FD2743FCE172DDF064883F5A6DFCADAAFA97F137197FAB73FCAD6A - BB53B7FF212424242424D4E279318EC45A35AC59D3F7F85AF8B8A7846BE902FA - 3DD6F715F491B63858FFB75EDF9B9DC703D6283ACEDFB63EE67765F2E01A5FF9 - 3C5F0AD7161BF2E01A3FE4A1495F56EDFA662C1FC66AECDBAF02BF080FBEF04D - 79F089CFF35CB392E421DA5BEA1B3F958726DD341DF0EBAC7FC85F1CBB2AF933 - C1F6A97F4CB0A7A2FEADDBFED46D7FEBF63FEAF6BF848484EA269AD1DF4EC723 - 9F44B8CE48117EE35A5E3E11DB9C398AEE443E9A8C9C131B916BC46DCE1E9AC1 - 7944FECBB95B3A91A30979B2A29C4FDD019D8A7C24EADE72E663DB684E27BBFA - 0873D705D4CEEF7C46D5F18906FEC167C6F6003668E14BF3E86D16DFBD20DAEB - B6AA8DDE6AFAECB265B42FD6FEF1B3CD32F5A0E5E1BACB4266EEE6F1F9EB4AE4 - 67DA863AC7B764F8BF3F01A5EE015475C66DB1AD884CB29CEFC96B6F556E1528 - C747FF6CB1F9D830EFE146937CAC26F8EC073DA3CABD6A22073D1DF4A9784E34 - 6B7C96A5511D95EB635DC039C14E7586DFA0CF737F3CCF604E2FCCFFD6DF411F - 89CB5A8417912AF70668C2F5984C7605748C693F887283E11957F8D0913C1F7C - AD415D9D17B67F934E7355FF618EA0D138E9DCDC5C4F017D92CBDEE05AFEFA3A - E8B802FD6FB9B3EF0F6805F26099EAE12847276C892D7E94CF2F2F87E8B83EA0 - 7465A833037A36CBEE18EADFE7156DED5A4CEF2D38B77E3DF7D9DF59C48BF322 - 1B98149F1BC8C1FCB2F6B7BB41F7C5F7BFC7754A1EC177800FC1CFAFCC9307AD - BD9F4FF2CF60038AF2807AE0B6D8C6EF591EF627A55323FF2BD4AF0DBA91E51C - 65B62AEA70C703CBA4B2A1F17C7231C2BDB99035CEE3BADE250F517D408F847A - 92FD6FFC1ED52DE3FB37308095C2EB6B3DEDF431DFF182F060C4C3FAE2FAC131 - 0F4DBAB28AF83195878AF0231E627DF3E52AEA3FA627672AFBF67D50D5D812FF - 4BFC2FF1BF7DFC9F47BEE37F435FDE5BFC5FC00FF612FF179525D7F17F8136F0 - 12FFA75155F1BF29BEAFF8BFC0BC9997F8BFA8FCB98EFF0BE8132FF1BF21B6B7 - F8DF50FF4AFC2FF1BFC4FF127B4BFC2FF1FFA48DFF710E47D13826C1AF1BB4B0 - 65B9394F4DD6424D267C9C53E2F1BCCB01431FA44D5B47D6AFFD5F94FAA33A04 - 158DAFA663FB0BBEE00BBEE00BBEE00BBEE00BFEF4C2AFDBFFAE3BFE10F9AB37 - FE8E9DBD599476E9E7EA5AD479BF85ACE3BCF62BAA6E73ADBF3E17F210D00FEA - C0D7CEE329C5832D7E3807A2F3D0A41FDAE0E7C95C5A5F030F98CB09CFB16FD0 - 5555E397E5C1257E9C0793B628DBFEEAFBEECDE3B5A749BB7DE1F775D00926FA - C157FDBBB205B63667AAE1DBFA1C52FF52FF52FF52FF52FF52FF822FF2E731FE - 6C73E47F0E7A1C7F19745DAF42538B64FC47C67F5A69FCA7AC7E7735FE63635F - 5C8CFFD8DA3719FFB11BFF99EEFE77ABE02B5D76B4BAFE52D67E0EDCE33247BB - C467EC0DC83D893D78A96B3CD53DCE4FB921CE4359FC818574147FD39B26E7D9 - 8307DE37388E078BF86357697FA041BB6CF1FBF6EE2B1CEC1DDD5F90ED07A04C - 63D487C1B3F6ED1FEE05B837DADB1804F496D4E7E7D03EBD4D7A80DF310FFF3B - 917FBC37DAD7D1A4D906FB17C7613BE9FFEA7DCA7EFC187A364B07A34C1C5BF4 - 5F217CAB395F5F6BB185A66D3C385065FC97B31EC67BFC67DBBF6DE33F5B7CDB - F8CF857EB389FF74424E67F58E57945DBBAFAAF84FC78EF6F6A9E747F2CEB575 - 15FFC5B0F7B04CFD3B7C47060FAEE2BFB0CF05F47484C7E779CD8BF851DF71A1 - CFF88FDFF5B0A2EFE9F698652150DF70B6CFF8CF973F50762D98E00BBEE00BBE - E057875FC6FE38C52F617F5DE297F13F5CB77F51FFCB87FC8107850DFFF3FEBA - E4BFEAF107C12F1D7FB679F23F07AA9CFF97F95F99FF95F95F99FF95F95F997F - 753CFF7036727BD685EFAAFFC3FF866E8B9F43684278067D11F91ECBE0476D88 - 5C4688518ADA487E6623FBD4F716C1E7EF463EC73FBEB894F62F3DA6AB9E1DCB - 3197909B320D9FEBFC551BEC7139E602DA84F8A2C0FA8337517F0979E26E51E5 - 9FCCC82397789FEBE08D02DF3FE13AF21B66ED43CABA9FA60F8AE087672104F4 - 5A1A7ED67D17F8267A2D03C70B3E9F51F2425DF8C0860F5A177EDDF53F55DB3F - 59FF846B3E2ED3F5CB84F68FDD2FAB7FD887DC583EB7F7F81CE3AC179E31FE7E - CE918C3AB0E121C48E728C37E95B26F1A7C23C8779B887EF6FE2FA2B1AA3CEE7 - 6761C3EF2E107FCFD7E4E07CD8AD32FE079F9DB43CE9BB35FC4E8BF87F381A37 - B5F4BF6C688F4D5EC7B2E7A68EC3B798F7B6C66FD0E5363CD8E2B3DD2FCD830B - 7C1B1E5CE197E5C1253EEBFF2B231E90F7B302F9CFD40F1EF13B8BEC87738DEF - EABD822FF8822FF8822FF8822FF8825F0FBE2F72E5C796A44ED7F52A34E9F777 - F894B7DCF120DFFD2D6F3CC8B7BEC98BFFBDE3E78C4154A16FB378A84ADFA7F1 - 50A5BD49E2A16A7B171F0FAA40FE33F58347FC4E9776D977FD08BEE00BBEE00B - 7EE5F87B2AF041D37D53BFFEB7C48342421E295CCFA87C6A5E1FB30584DFF0AD - CBAC55E475F32B8DD6D40674A4C2599DBADE5ADD43191FE364BC86672DAF6559 - D7D3A433D62EA18340F88D6BFCAE3528EB1A1FEBE9B96C1FF66925AD7B8FD67C - FB98FFEF6B84EBBC105F7F3DA37DBEC1EF7BC1C33865183B257D7B2C7F82D1BC - BBAF71DA1279F2055FF0055FF0055FF00B97EB7A880E00A5958BDF778DAFAEFD - 13B9177B16D207E3E5700DF75026EFBD597906712F03FF09BED7B5EE117A6754 - 8E7F77F1FF4FA4E2376833CAE0BCF2B43203EDF451F67D8612F7CC07D4C3387F - D1FCD147A333E0BAE7D3C1193ED3435C6E6E469EC33B18FFC1A4FBDD8BE8C3EA - FEEB093EF1EBB897D5AEFDED74BC2AB73B6DEE8AC7CCE17BEDEEEBA0E3D2DED3 - 1DD049AACC760D7B3BAE19F581265DA33DD7A5EAE44EA66ECDB7BFDAC0473E67 - AC3CAF612FB45F8FF78AC568A3E2E32CE3F734E8165099D86AD932DA57617D05 - DF1AE6C268D02C5C93B85348C8CB98E84AE7638CCA9E40A767E94AAFF87B6937 - F46A95F5093B0D3B0A5B16C5EB65F307D9126C59A4BFEBD2A191FF019D5E073E - 6CA8A9ED9C8AF863FE9FB2A3D341FED0FF425F75D45F1C66D93B2B6F5C13638B - E1F85E63EFFA0417FA27AFDD31561B8DA93AD4BF4326FA1763D5DA58723FC635 - B3C6169DCBE6E8BA94702CB94ADCD8FE56E42839A3A6BE89B983118C9F4F767C - C4D7AA1DFF8538332BD68BC9FE0A57F50F7C8EB34359CE8BF9B4B82E943FCC1D - D8F2B06E211DAEF5A7CDCAEE9F52A4FF61EEC0B61FA8771CA8DEF518BF734756 - DE114DFFACF139E79C170B42FF62BE26DCC7EE56FF1AE13BB6F7E3EB3FA0F3AB - C2FE47401FD0DA3257FE5C5299FEE71ABFA8FE11729A07D0FADCC18C3C80F09F - 070A5C779AF79BF346DC57E07A9BE04F5AFCCAF6FD24E187F2ACBE691C8D7EA7 - F175EE13D2FE69B662111D91B44EC7373E3081ADEE213E5B11F7F57CE26BB995 - 87781DCD9E380FBEE45FCF2D1DE5C444BE56E6615564AF7DC83FCF4D3D9B94CB - 3ACE83EBFACFC2D66290AB9987A75CE3EB39C53362A0DAF079CE6B4C0E5DE3C3 - 27641E3026726316B62FF94FE221ABFFF9D0FFF1FE57B7FEA95BFF8AFF23FE8F - B4BFE0B760FC596BFC9D349E19DA8A8CB5D43C6E3784B2AEC72390F371CC6E25 - F8109AEFB2C2458ECAB471A5241F22C97FF039B6A5F3502576920F5135768C87 - A74036D8DA3E85CA49C3EECF38CFC2F7F54279755D5F17FC96C0AF9B44FE055F - E45FE45FF0EBC1AF4DFEEAF6BF6CFC4FF8E1A09A7CDF5AFCEFF83876D2D87D55 - D86963F73EB0EB8E3FAB8ABF25FFBFE4FF97FCFF92FFDF57BE378FF892FF3FBF - 7E3A7DE087393F46ED5F6F57401F8AAD271D543661CE9A800EF521FF582FACEF - B354988B35FCC55ADBEF50FDF14CD7F8FDED7422CF3DDC119D0FA4FE5E078ACE - F989F6ABA2AC6B7CECA550E5B7AAFA5FA2B06662ADA7F6CD98DB9D897B2863B2 - EFC2041F758E6FC1FB0617D02138970F58EAD60CF5FBE3FD0D3A1D84DFB8C67C - BC8AB27806CFA6ADF3CEC3C73BB4F6DECAD8C3EAEF451963BC17711994DD1AED - C7C5BB8AE2ABB69C1DB537D72B7CB28BF57DBF907790DEDECCC350F80CCB83FA - 7D4361FC80FA22B942DBC6EEFD2C96CF0C76E7E6585DCCD4CEB1EA2D8A3FB090 - 8ED2FAD590EAEFC768FB9D61631EC7BC3AAF6D5A1AF2D0412784653AE8D8483E - F10EBCABB49EE4765072741AAFA39813AEF3D0E6F479BFFD48540728CB6D37DB - 5A4FA7E047FBFE35FDE7143F56FF9B51A79A1E42DB2F050FFCED4FB0DC7F3A9C - 3B526D8536B3A97FC80C7FD33D71F9C3774E90BF807E3A41FEA013397753517C - F49909FD4FEBFB9035F01112CB1DF37671BCFF25B543ABEB9FBAF5AF81FD19D2 - DA7FB30FFB936A7F59AEC6D95FE8BA12F6D78076AA3AFE2A7C8AD0B7C8F73FB6 - 9BEC6D2A107F87F8633239AA8FFAF43E8DDFE8AFE83349B226F1BFC4FFB97174 - FE3A94477DC6FF19E3D3D159D84B7CC6FF39E7718FDDF315FFDBE0BB88FF8BE2 - BB8EFF0BE07B89FF4DF17DC5FF65F1C3FC3D4D5A50177EC2B9D4823F79F1ADD7 - FD5AE2A7EAFF8C7BFDD2FE822FF8823FC9F5CFA08B75DF32FF21E7FF25CDFFFC - 1FC55A38D7 + 4C69020000004C7A150000001800000018000000970E00000000000078DAED5D + 7D8C5D45159FFA815FD528F8118D16518CF40F0D2A6AFC88A68D41B48031C6A2 + 40D17FC4A2F881025A51A85A49252D26A87F108228D076DF7DBB15ACD628C55A + 68A1ADA574F7EDB6A5ED525A43BB242D58DAA6DDB6BBEBF9CD3DF33ABD9D7BEF + CCBD73DFEEDB9D3F4EDEEE9DB9BF997BE6CC99333367CE8C8C8C889156D25CF1 + 92DE480C17217A7D521E7E14899752DE11A2BF376AE2273684BC780775B3C56F + 44E206DB6FEEAD8B1B8BE2F745E28C2C2A8BCFBC4AA5B2F8C4DF5BB368A2F087 + D2FBF5F78AF047A37E033E9EAFA6BCBF2E2A9FBD35F9EE6AF55D497CAACFDCB2 + F20F0C1D9FDAE8E93C1E17250D7B397DDB8FBC12305559F47DBEF5E4296D3E81 + F149CE66B1FE57EDBADD27FE9625E29D2427F308633E88FEFE7ACBF953A17C56 + DDBF465A6D3F8C1691EEA2EFBD1764338EB812E14ED1F83AA51C9E984432F035 + D836AAAE9073858FBFD53749FB87F2DAD856A09E45E20DCA5E026DEE101F4CC3 + 479A2EE34FFE59BC3E870767527F7FA2C987BAB81BE34D1A3ED29047E3DB06D4 + 2F95279158C6798FD1377F35A9074EE38FAA575D5C21DF89D31F34F10A7A43AB + C7E5263D9386CF76C0959ABEB94A4FDB70A778B9EAC75497FBD2F458163EEB9C + C5CA7E58B952BCAC59765D5CC8F53ED1D325DE5514BFD121DE4DE943522E6AE2 + 339AEDF05BB6195665E9E13C7CC67A946D95DF68CF5672FDE7A5E22F1567519E + E320FC9DA197E7735D1FD2F0B730EFBF9925BFF4CD9F02E58C67D7F077F669F8 + 7D5CE635A5C7959AF836E3F76AF82B983FB795C527395DC058FF4C3EA3FA3F5E + 1A9F30D8D65CD0D43991F8347FD3704FA738AF30768798AA6C8953DA299E936E + E3321E28CCFB48FC85319E4AEA086A972F35FB37B55101BE7F579B3B7C31A77F + 0F21BF03CFBFA7FA2DBD777F5ABE0DCBC4AB29CF235A3DFE4672707EAA3EEF14 + 1FD0C70ACAFBEFC722F1AAACBA205DFB0E451BA95E7750FFFB21087FE35922CF + A29DF788575A8FB775F1057AA7DBC2CED944ED75498971FD9384F173F08A7ED7 + 13ADA3677FC533C2FDC484B19F02B9F5F74EF17EEA07DF874D54053EC9DF5ED6 + 4577A5D661897807E5594879A615C057FD679929BD3B12E750DA339C67BF4FFC + 04B6B43D7DE1C3364FCCA9566F7D50BCD607BE2F6C13BE4F6C13BE6EB7638CA0 + B2269794CF96E257CD9FAADBB715F2D98AFEE5513F54AADFAAD6CF8102051A1D + 926B1175717BDE5CBEE07CE05CD239FF65BDB6B742EC5273D994F5999D3EC7E0 + 76C766BBA4A1613F8C39B2D77940C5F855F3673C955165FF6A857E68857E0B14 + 2850FB1074007441D69E8B977526D269D06D15E03FA0E963EF65F09AF78A5086 + 75190F6B6574B70B7E95FC6957EC56F4AFAAF543D5FA2D50A040A343587BC51A + 2CD6620BF8494CC3DA2FD68033F2DC55741E86356B7EF719AC65A7E459A6FB11 + 3BE22FD7F4B2B18C32F83CAEFC4B2B6337FC7B7CE1DB9451163FAF0C1FF82C87 + 9375BF08A2FFB40BBE813FBB940F5805EDBB4BF72FF32C9FBB92BE6B63B97F55 + AE1F2AD66F55EBE740E37ADC9EDC5717DFE179CB1EF6ADC5EF0A3C2FB36E4BF2 + F615C2794EFAF3D5C52F1A7571714F243E865F92F75FE2FC00D140A3266616F0 + C1C359B1A3F0DFD3FD6775C273FEB6A3F43BC7619DFF32C69E66F2894BE9DF28 + E3CB96E3C77326BF43D9472371C4B48FCD3E877BBBEF15AFC9F1A5C3F76E33F1 + 64EB12F136E818FC9A7845693BF2FC21A59C505B9AD2B2F0F9FBE6E9BEAA6973 + 50C887FA7F6324DE84B14412C90EF0F1AB9E215DC3BF94D29FCDC11F24FC8F37 + FD1B89DF393E8747549BE33DBC9F83BFA7CAFAC3171A7DA710FFEBE25794FE8F + 1CF9BC16FDD2557EE0172FCFD5D5C5B72CE47F0072EA24FFB15FEC9E3CF9E7BE + 32D3B1FF7E43FAE946620BB5CD872C7D56E7A00CF4CB34FD039EE8FEBC4C2FF4 + 76880F5BEAB899BC26B343B65D4D5C2265907EB92D774879639FF82265809FE8 + F3E897903DC8377EE5FFD49648074F2466C132ACD686E2F329FB13679AFED7D7 + 293EDA4E658027065EED4FEB93BECA2832865A94A178B5CF67FD9BEDD125DE8A + 7AE337D83FED61FF64CC6F4ADB3F16672E4AD93F59E4C3FEB1F8F672F68F81DA + CAFEF150FF2CFBC762CC2E65FF64AE8178B07F2CCE0595B67F52FA6FB07F82FD + 13EC9F316AFF98D6FB33CEFCEE2EE2FFDFE8141758F8D95F50707DD53B3EBED3 + 43DC84DD59BC44BFE7BE3FB22912B3D4FF69B4298E8F31A2FEB769B376E57FC0 + 0FF8013FE08F167ED5FAB9EAF1659CB5AF77FB047324475EAF7659AB619BF1CA + 3C9951F24573816D2EE7186C79AEF27647623A7C096CCF88BAE2232F62FE7019 + 6BF2CAD0F1B3E2ED25F3721988ADB066FBFDE275DEF0B5B6EAED12D3681EB885 + E66DEB3DF16720AF0E65EA5FA4AFB9D4BF2CBEAB5E0BF50FF50FF59F38F56F5B + FE588EEF265231E03CDA27261A083E4885CF2A38F11FFB0655D8876A4E216353 + 55601F2A39E7588FDEED43BD1F15B50F5DFA6911FBD0550F68B12B1F298B4F6D + FCBE3C5D5756BFA18C34B91A0BE34B2BF079BDFD59938F2CC786D9A3EFB7388D + 5F27F70B1666EC35DDAAEF85B8E093AC9D70D043279CF1E3BDEF6354BF9B33C6 + 2BECC71DA379D1F545F8CFE3DD6006FF8F214F19F9C9F27F4EA68D01F9DC6DBB + 7EEF732F2650E1B5B8D5457D75F4B5445FEB3FAEEB73AEEB3F099FC6337DAFFF + 6863E945ACB76EB3E98BB6E3BB867D84F10749BF5C6F638BD9ACFF347D690893 + E305C32FE8B049071559FFD17D49D5F7E7C5532DB1D7E9ACEB027EC06F777CD5 + 57157E96FD50049FFD3C17CAF9554DFC2CCDFE298CAFFBA9D4C571DD7EF2C57F + 94019B9274E90FAA6ADF2AECAB56E2E78DEF45D67F3CED150E84FDAFB1BFFFE5 + 5217DFEB1BEDB0FF351ED61F5C096D4B7DE2A755E19791FFCD35F17996C1C11C + 9D312863E0D7C5E76CF169AC99217DFD2371337C71337528A513F62D28275946 + 1A3EFA27B09BCFD2EEF7D19EF33D66EB2CF18FAA58FF321E4D240E6CEE14EF39 + 2D4E8DF61CF9F19E25FEC975A7BAB85DF99BA871C8F8DC20AB36F823F13D3A23 + CA9745FE2DCFDD9F7CEE0B5FAE5336CFF457837F72BDC53FBE47FE1CD5EF8A80 + 8FB09293443C85FD05E5673DFA8C8BFCCBFB2B22B136777CEF14E7A11FF6C673 + EDB936FD97B1073157B718335E442C082E639DE455B6FE392AEF98A989CF1AF8 + D0EF78FFD94657FB87EF689C9F4B71EC729C6178D4C9FE211E3BE4ADF1D9B335 + D6F68F1BFE5CBEF7E698B5FDE388CFB26E5586337E7CEE47DEA7877B71D01E68 + 734FF8FD85EC1F4BFC94FD86B9013FE007FC801FF02BC2D7C60C5792EF66E3F7 + 7BF0FFE90FFB7B4E735E1F3C875C3C61B2E39C6CC202B6625999CFB3153DE21B + 6D459FF8265BD11BBEC156247AD2137EA60C96C5CFD275013FE04F78FC12637A + DE58CFF104462AA21D610C6F3FC29A1EC9DF6CF89120AE09625AE4C69488C439 + 797BBD641B9CC177710F25E464675E3C06AC8FE3EEE49C981EBFE7FB9517E21E + 42DCC7CBFE36DBE0E798E5DB96675BABBBC5F57BA19BDFDE25DE8EB5734AFB43 + 61FC38B611D6F4A6A48CC175A2E70BE34762699C7EFADDF1CCDFA58DECFAE5D5 + 3FA487F4903E46D329ADABE1D8FF377789B3D57DF73ABE8CB11689E93A96D25F + 7827A5FCCE46427FD1B37B880E62EF51E1734CA92EE871FDCE0C8C493C6E2C4C + F1D53ED05717779FA297978A37F3FD7587696CF813EB57E8C161D3FDF43497FD + 9D1A3F50367C1B795F0731EB5E48C6F796652F166FA1B43E9ED3612C1B4E8B73 + 85F18FEF8E1F4AECE33C4DF491D4B6A5321A714C3DE4BDD6662CA67C57CBBBEA + 2331C326AE57CF22E26F4E1CAF40E924EFB42B688B535B75F4D5C41C937C69E3 + F72C96CD32F6F810641C7258415CA7B3D9AF107DEB8ECAD6C3623F82A1B498F5 + 9EBE03FDECEA2AF065ECB5784E774325B13D637D05FC19DEE7A4B19EDD0E7D95 + A65320C3889347F6728783FC476CDF1E809E35E942397788F5F35041D97F1EE3 + 435A1FE37909647741DA1856663E953676795A2B982DDBDCC157D8B1CFDD087C + 175FFF649FC2DC08E398B1FE880D1BF7B98B0AF1976C14D81118874D65C0A6E0 + 3BE9B761AE568807B13FCB8B84B3D514BB0EF357CC315986EB52A65DC7820E71 + 27FBA90C98E6AA78063E42964BAFCD38C6A2B58905AA6C2BD7389F96716ABBAA + C066DD323DCD26F4436252D6D8EEF18CFD8005FE693E52A65852C967B6BEE126 + 1F2F9B67D6BEFFE300BF0C59D5BF4BCC92674798AC9E75659FBDAE8A3FB053B0 + 4EE71B1F98C0A6BEDD83B56E756FB90FFE038B632BF4608E897B40B1F729FDA3 + 4BF29FED43DC31BA59C55FDDB2549CC5FBB78F95E50F7C0F8105CCE6DCA5427C + 137FCA50923FA6F62D2BFF7AFB562D9F41FF8CAEFE1997F8D58EEF03AD8CFDD3 + D4E19A5D8FBF55DFF460FB614F6A39F09E5A2CDEC8679936E2CE03BDDF97B28D + 637DB20A7A916995D257BE08BE24D0DF2097B3F49E623AA5B6B7491E9331495D + FFD7E5D5187323D1575CFFD79F8D07FCAA29A95B7CB4AF16632AB46F68DFB1DD + BED5EAB74AF5B3CBF8C2B6FDE3AEB15A46737CAC7A7CF7699F84F35FE1FCD798 + 38FF9572FEB2F4F98548DCA4F6F82BC1C7D9CDBAF86319FEC8989335711DE5ED + 6D7488A9BCEE3E15FF23DE08D2CBE0F31D78D823588BF6E5F7700FDF5AF93CE3 + 9E354BFC6932E653ECAF7688DBF420FF7F38EB7EAC347CC913AA17DE55FBD0E0 + 09F1E35C8C55F8651E0DCB74D481F227799586CFFC3E20EB17AFC3CF56BA5B9E + DFE5FD6ADEE71AE67C07F09E153EB51DF82BFD1AB94D799F54DD75B45F9DC745 + 3AEFD7A13D7A6DF0F9DBD18687F0EEF6E5E215C0A47AFF18EB552CF7FBE4F7C4 + D887D0F6AA2E36EDCB7B20D0F9E77747E2BDF24E5AD635EA1C019E231D7F9BF6 + 67B3EACFFEC0A7D41FF596D8719CA0C2F537F23FF6CBDCA7EE9AA2BE7BA181FF + 7D65E4077A06F2A3F44D527E92F183464BFE33FAEF41E6CF21EBFE9BEE2B7E1D + EC1DF91DAC7F20B3AC971F6AEA9F8C7B0673EC932338FB8F6F065F4DFA1375C8 + D19F21FE4F88FF13E2FF4C54FC9CF8B1A3195F48B3614F24CE55DE94B46F9371 + 8F5DF0F9DDE32AEEB1DE9FF0B7EC0F341EAB7A14C16FC4F7980E927EBBCAF07D + 97F17DB9B714C6C77E0EE3E865E8CF5CE2CF24E7108A27BC468218D197933D77 + 851EAF1979F4B6292A3FC096E74A88F0B7EF9890BEF1ABE64FD5ED5B5A3E53C6 + F7661CAA72FD6B20EFDE3357FDF07F2693349E4C7A1500000020000000200000 + 000C1200000000000078DAED5D7B8C1E55153F45141554A8A08848D0A080FF18 + D00828082A8A316A0C4F79A83C8312E44D8909CA9A202A50448DD02DC602D276 + BFF9B6AD8814133105B794027DB8AF6FBB8108B4B4086D6CD20A7DB15DEF6FBE + 335FEFCECEE3CECCBD33DFEE9E3F4EF6DB993BF33B73EFB9E7711FE78E8E8ED2 + A8D0381AF068D4264D547C5BF53819F0F3D4F564C297F69FBCEDAFCAF4D8D01B + 867AACC754DFB9D2E369F5ED4AFEDA0D3FAEDD4BA22AB1ADCA5951B9147CC19F + 4CF8317DBB67AAE04FB4F69FA236A04762DD7C34E8D17EFD35FA2D08BFCBC657 + B85705ED88DF15E07768F81DCEFA699DBED7EFD1A38D1A7DDB141F65F10C9ECD + 8B3B3C8F0E54EF58A4F595FF9AE2A36C704FC9C6C2A185F4FE8CB275B07A7650 + EFAB8A97BF9BE2A36CA89F0FE09D86D8D355F961EDD9DD8375FACD328FDE658A + 8FB27806CF6AF5B0A66F2E1D908C4FD354D93F6BD83B066A74465EF9539867AA + FB3BF5B64894698F2ED1BFBBBF4EA717957FE641AF870BA3CA3DBF98F651F7D7 + 6AEFBCD356FF5375F86BEDBB5E523CBC23A29F5DAA95D9106EEF22F82B1EA177 + AB72AF6AB27C49843D7EBC855FA76B6CEB1F5507D7C6F52596F95DDC3E6FF5CF + A30FDAC66F2CA00FA9B223FCCCCED58B687F4D5F7D41ABFB678CFA699D6E69C9 + 94FA6DA4B33D5AA9C9E1895ADD5CA6E1CF31C4FF32EACA27F5DBD0663CA4D5D9 + C59AECCDD0F07F61AA27FBBAE92890B12DA9D1AF34FC1B34BE6ED064EF970E6D + E69D5132AEEAEF728DAF3F3AB3A5357AA085AFDA5C93FF13B5BEB1D2A1CFBD3A + C0E9F3E884967EF0E87D5ADFD865D2FF72F86B07077D1C58CF3F44EF0DF1F68F + 2CFA27337E9DAED764FCF108D9B858BBBFBEF741DAD7A6AF0A9DAEB5FDF76374 + F43A4D3FDCEE44EE3D7A39CEB6C05FD3ED6F9CEDCF887DB66E7FD5FF17C496EF + A0BD549947341EB6E3F9DCD81E9DE3FB307BDEF7307C9C445BD9EC0BBAFF857E + 3113ED638A0BD9619B3FA2BD67282CF3B1CF2FA043E133867CC8B5EA7B6E845F + 1CF7DC2A8F0E625DBE4E7F56C952DF9AF9744896BA83AFA89E5D1C11B38EF87A + A44EF7AB3E75872F5BEA37EB9691707985FD57DDD6E668C3EF8EE93BE6B441F1 + 77BEA5FEFB0E8E839E0CC9539876A8B24F80E7281FCF0641B660EFA143A0D37C + BDA67853785FCA22A3424242ED4FEC976C56B44AF5F1C32A18A7DD9CC527818D + 53BAE93EF8734A379D64799CB8D3C0763FA3DBCCB2F023B04BC38FC1DEA6E2DA + 535DE333F6F250B9EDFD75FA86837982CE32B193F0CBC08EC3F7FB58447BAB7E + 779AE3799A4E8E136E2E03BB5DF1ABAEFF04F9DB5186FC95C9434EFDB3A30CFD + D30EFAB71DEC8F63FB5BA9FF51B5FF252424242424D4D6FB559AF3BBFFECF7E8 + EAD2D702D5E98E317E4A177DAA32EC12F123B11DCE9F86FCA2DB22C6BF670AB6 + D3356FB78F9B5F5132504AFF56325D15763BE0575DFF5A9FFF79449FBF4B78A8 + 8487CAF46F3BD89F76B0BFEDE07F0809090909094DEAB508CAB6C2C62A3FF8BA + D2ED7BC8FF2FDBEF96F8437CFF89107FD85C373C11E28F761B7F2BABFE65FC4D + C6DFAA1C7F2BDBEE54ED7F080909090909B5795E8CC3B0560D6BD6F43DBE057C + DC93FCB5741EFD01EBFB32FA489B2DACFF5BABEFCD4EE3016B142DE76F5B1BF2 + BB1279B08DAF7C9EAFF86B8B0D79B08DEFF350A7AFAA767D33940F6325F6ED97 + 819F850757F8A63CB8C4E779AED3A2E421D85BEA1A3F96873ADD3C15F0ABAC7F + C85F18BB2CF933C176A97F4CB027A3FEADDAFE546D7FABF63FAAF6BF848484AA + 269AD6E8A263914FC25F67A408BF712D2D9F48D19C398AEE463E9A849C13EB91 + 6BC46ECE1E9AC67944FEC7B95B7A90A30979B2829C4F7D1E9D8C7C24EADE52E6 + 636B33A753B1FAF073D779D4C5EF7C4AD5F1F106FEC1E75A7B006B34FFC539F4 + CE02DF3D2FD8EBB6A293DE6EFAEC9225B437D6FEF1B3F53CF5A0E5E1FA5D0199 + B987C7E7AFCF919F692BEA1CDF92E0FFFE0414BB0750D519B7C5D62C32C972BE + 3BADBD55B915A0141FFDF3D9E663FDBC87EB4DF2B19AE0B31FF4942AF78A891C + F477D367C239D10AE3B32C357554AA8F753EE7043BD91A7E8DBEC8FDF15C8339 + 3D3FFF5BA39B3E1E96B5002F2055EE0DD0B8EB2199ECF5E848D37E10E406C333 + B6F0A123793EF83A83BA3AD76FFF3A9D62ABFEFD1C41CD38E99CD45C4F1E7D9A + CBDE685BFE06BBE9980CFD6FA9B5EFF76819F26099EAE12047276C4951FC209F + 5F5A0ED1317D40E94A5F677AF47492DD31D4BFCF2ADAD2BB903E90716EFD06EE + B3BF2F102FCE096C60547C6E200773F3DADFBE1ACD0EEF7F0FEB943482EF001F + 829F5F9E260F5A7B3F1BE59FC10664E501F5C06DB195DFB3D4EF4F4AA706FE97 + AF5F6B7413CB39CA6C51D46D8F0796496543C3F9E442847B33216B9CC775AD4D + 1E82FA801EF1F524FBDFF8DDD42D63FB37308015C3EBABFD5D74B4EB78417830 + E2616D76FD6099873A5D5146FC18CB4349F8010FA1BEF95219F51FD293D3957D + FB21A86C6C89FF25FE97F8BF78FC9F46AEE37F435FDE59FC9FC10F7612FF6795 + 25DBF17F86367012FFC75159F1BF29BEABF83FC3BC9993F83FABFCD98EFF33E8 + 1327F1BF21B6B3F8DF50FF4AFC2FF1BFC4FF127B4BFC2FF1FF848DFF710E47D6 + 3826C2AF1B2E60CB52739E9AAC859A48F838A7C4E1799743863E48A7B68EACA1 + FD9F951A411D82B2C65753B1FD055FF0055FF0055FF0055FF0057F6AE157ED7F + 571D7F88FC551B7F87CEDECC4A3BF573750BD479A380ACE3BCF6CBCB6E73ADBF + 3EE3F3E0D19555E06BE7F1E4E2A128BE3F07A2F350A71F15C14F93B9B8BE061E + 3097E39F635FA3ABCAC6CFCB834DFC300F266D91B7FDD5F7CD4AE3B5BF4EBB5C + E10F76D37126FAC155FDDBB205456DCE64C32FEA7348FD4BFD4BFD4BFD4BFD4B + FD0BBEC89FC3F8B3D392FF39EC70FC65D876BD0A4D2E92F11F19FF69A7F19FBC + FADDD6F84F11FB6263FCA7A87D93F19F62E33F53DDFF6E177CA5CB8E50D75F4C + DACF817B5CE6089BF88CBD0EB927B1072F768DA7BAC7F929D78579C88B3F349F + 0EE76F7AD3E43C7BF0C0FB06C7F05020FED899DB1FA8D1CEA2F8837BF6150E0F + 34F71724FB0128536BFA3078B678FBFB7B0166057B1B3D8FDE16FB7C07ED3550 + A7FBF91D73F0BF15F9C77B837D1D759A61B07F710CB695FEAFDEA7ECC78FA167 + 937430CA84B145FF65C22F34E7EB6A2DB6D0948D0787CA8CFF52D6C3388FFF8A + F6EFA2F15F51FCA2F19F0DFD5624FED309399DD53B5E56766D7659F19F8E1DEC + ED53CF8FA69D6B6B2BFE0B61EF6699FA8FFF8E041E6CC57F7E9FF3E8C9008FCF + F39A13F0A3BEE30297F11FBFEB21453FD0ED31CB82A7BEE12C97F19F2B7F20EF + 5A30C1177CC1177CC12F0F3F8FFDB18A9FC3FEDAC4CFE37FD86EFFACFE970BF9 + 030F0A1BFEE77D55C97FD9E30F829F3BFEEC74E47F0E9539FF2FF3BF32FF2BF3 + BF32FF2BF3BF32FF6A79FEE12CE4F6AC0ADF56FF87FF0DDD163E87D084F00CFA + 22F23DE6C10FDA10B98C10A364B591FCCC7AF6A96765C1E7EF463EC73F3DBF98 + F6C93DA6AB9E6DE5988BC84D1987CF75FE4A11EC3139E63CDA80F822C3FA8337 + 517F1179E26E53E51F4FC82317799FEBE08D0CDF3FEE3AF21B26ED434ABA1FA7 + 0FB2E0FB672178F46A1C7ED27D1BF8267A2D01C7093E9F51F25C55F8C0860F5A + 157ED5F53F59DB3F5AFFF86B3E2ED5F5CBB8F60FDDCFAB7FD8875C9F3FB7F7D8 + 1CE3AC179E32FE7ECE918C3A28C2838F1DE418AFD3774CE24F857936F3702FDF + DFC0F59735469DCBCFC286DF9321FE9EABC9C179B05B79FC0F3E3B6969D4776B + F83D05E2FF9160DCB4A0FF55847617C9EB98F7DCD431F805E6BD0BE3D7E8B222 + 3C14C567BB9F9B071BF84578B0859F97079BF8ACFFAF087840DECF12E43F513F + 38C4EFC9B21FCE36BEADF70ABEE00BBEE00BBEE00BBEE00B7E35F8AEC8961F9B + 937A6CD7ABD084DFDFE152DE52C7835CF7B7B4F120D7FA262DFE778E9F320651 + 86BE4DE2A12C7D1FC74399F6268A87B2ED5D783CA804F94FD40F0EF17B6CDA65 + D7F523F8822FF8822FF8A5E3EF2EC1078DF74DDDFADF120F0A0939247F3DA3F2 + A9797DCC66107EC3B7CEB35691D7CD2F375A53EBD1610A6765EC7A6B750F655C + 8C93F11A9ED5BC96654D7F9D4E5FBD88F607E137AEF1BB56A1AC6D7CACA7E7B2 + 83D8A715B5EE3D58F3ED62FE7FB0E6AFF3427CFDCD84F6F916BFEF3907E3947E + EC14F5EDA1FC0946F3EEAEC66973E4C9177CC1177CC1177CC1CF5CAEF741DA17 + 14572E7CDF36BEBAF602722FF6CFA78F84CBE11AEEA14CDA7B93F20CE25E02FE + 637CAF77CDC3F49EA01CFFEEE5FF1F8BC5AFD12694C179E5716586BAE813ECFB + 6C8CDC33EF513FE3FC4DF347FF129C01D737970E48F0991EE4723313F21CDEC5 + F80F44DDEF5B401F53F75F8BF0895FC3BDA4766D74D1B1AADCAEB8B92B1E3387 + EFB56BB09B8E897B4F9F4727A832DB34EC6DB866D407EA748DF65CAFAA93BB99 + FA34DFFE6A031FF9EC56795EC39E69BF1EEF150BD17AC5C799C6EFA9D16DA03C + B1D59225B4B7C2FA1ABED5CF8551A3D3704DE24E21212763A2CBAD8F312A7B02 + 9D9EA42B9DE2EFA15DD0AB65D627EC34EC286C5910AFE7CD1F549460CB02FD5D + 950E0DFC0FE8F42AF061434D6DE764C46FF97FCA8E4E05F943FFF37DD5A6BF38 + C2B27766DAB826C616FDF1BDDA9EF50936F44F5ABB63AC361853B5A87F379AE8 + 5F8C556B63C90D8C6B268D2D5A97CDE6BA147F2CB94CDCD0FE56E42839BDA2BE + 89B983518C9F4F747CC4D7AA1DFF8D383329D60BC9FE325BF50F7C8EB37D594E + 8BF9B4B8CE973FCC1D14E561CD7C3A44EB4F9B94DD3F294BFFC3DC41D17EA0DE + B19F7AD723FCCEED49794734FDB3CAE59C735A2C08FD8BF91A7F1FBB5DFD6B84 + 6FD9DE8FAD7F8FCE2B0BFB5F1E7D586BCB54F9B34979FA9F6DFCACFA47C86A1E + C0C2E70E26E40184FF3C94E1BAD5BCDF9C37627686EB9D823F61F14BDBF71385 + EFCBB3FAA631D4FC4EE3EBDC27A4FDE36CC5023A346A9D8E6B7C60025BDD437C + B62CECEBB9C4D7722B6FE47534BBC33CB8927F3DB774901313F95A99871581BD + 7621FF3C37F574542EEB300FB6EB3F095B8B41AE661E9EB08DAFE7144F88812A + C3E739AF961CDAC6874FC83C604CE4A6246C57F21FC54352FF73A1FFC3FDAF6A + FD53B5FE15FF47FC1F697FC16FC3F8B3D2F83B6A3CD3B715096BA979DC6E23CA + DA1E8F40CEC796DD8AF02134DF65998D1C9571E34A513E4494FFE0726C4BE7A1 + 4CEC281FA26CEC100F4F808A606BFB144A270DBB91709E85EBEB99F2EADABE2E + F86D815F3589FC0BBEC8BFC8BFE057835F99FC55ED7F15F13FE187832AF27D2B + F1BFC3E3D85163F76561C78DDDBBC0AE3AFE2C2BFE96FCFF92FF5FF2FF4BFE7F + 57F9DE1CE24BFEFFF4FAE97181EFE7FC68DABF815E8F3E1A5A4F3AAC6C42C72A + 8F0E7221FF582FACEFB354980B35FC855ADB6F57FDF10CDBF88D2E3A9EE71EEE + 0ACE07527FAF0705E7FC04FB5551D6363EF652A8F25B54FD2F5258D3B1D653FB + 66CCED4EC73D9431D97761828F3AC7B7E07DC3F3E8409CCB072C756B9AFAFDC9 + 468D4E05E137AE311FAFA02C9EC1B371EBBCD3F0F10EADBDB730F688FA7B61C2 + 18EF855C0665B704FB71F1AEACF8AA2D6704EDCDF50A9FEC227DDF2FE41DA4B7 + 37F3B0D17F86E541FDBE3133BE4783815CA16D43F77E16CA6706BB734BA82EA6 + 6BE7580D64C51F9A4F876BFD6AA3EAEF476AFB9D61631EC5BC3AAF6D5AECF3D0 + 4DC7F965BAE9A8403EF10EBC2BB79EE4765072740AAFA3E8F0D7796873FABCDF + 7E34A80394E5B69B51584FC7E007FBFE35FD67153F54FF9B50A79A1E42DB2F06 + 0FFCED8FB1DC7FD69F3B526D85362B52FF9019FEA67BC3F287EF1C277F1EFD74 + 9CFC412772EEA6ACF8E833E3FA9FD6F7216BE0C327963BE6EDA270FF8B6A8776 + D73F55EB5F03FBB3516BFF4D2EEC4FACFD65B91A637FA1EB72D85F03DAA1EAF8 + EBF0297CDF22DDFFD866B2B72943FCEDE3B764B2A98F06F53E8DDFE8AFE83351 + B2E660DDC14EC43C16FCE4468EB3151B9ACDBBBC207EEEF3D771F626EBBD2BAB + C0E7BC77CBF3F260E3FCF9313CE48BFF0BE1073CB4C60A799D7199F87979B089 + 1FE6C1A42DF2E2E33CF134FDA0F4DF2E57F8B0F526FAC1157EDEF611FC72F0D9 + 5F7DAB2AFCFE2E3A3AEABCFBB2F05DE93FF82111F36AAF23DF586BEE42FDC6B5 + 281FC6027E30EE3DAC08EB803B15D6AD7AFE34FCC6355F0651A6B6C7C7B181AF + 745F8379989F94B76DB483F6527EDAFD2D7E2DE10F74FB6754CF4AE441C7F668 + 0ED7D5A8A5FAEF449C11CB4308DBFF3FE3F9E709B1D5EB68DBE6FF113C4460F3 + 73B7E2D9A2F87EAE007E67EB5B51BFCDD8E30E50183B28179567C04AFF57EF56 + DF76BBAA836B41F83D06DBB5FE2911BFEAFA1F237F91B216DD2F6CC95FAB7C8C + 9CC7F50B5BFD8FDF393B1E3B9A8760CF86A5EF1F4EC68EE4E18504FCC4F813BE + 04ECB923FB63127F8F04B9248ADADFFF03EE51025C } end object ActionList: TActionList @@ -694,11 +709,11 @@ object GridPrintPreviewForm: TGridPrintPreviewForm ImageIndex = 18 OnExecute = acCenterVertExecute end - object acScalePrintToPages: TAction + object acScalePrinter: TAction AutoCheck = True - Caption = 'Reduce print to 1 page' + Caption = 'Printer scaling factor...' ImageIndex = 20 - OnExecute = acScalePrintToPagesExecute + OnExecute = acScalePrinterExecute end end object PageSetupPopup: TPopupMenu @@ -753,7 +768,7 @@ object GridPrintPreviewForm: TGridPrintPreviewForm Caption = '-' end object MenuItem1: TMenuItem - Action = acScalePrintToPages + Action = acScalePrinter AutoCheck = True end end diff --git a/components/gridprinter/source/gridprnpreviewform.lrj b/components/gridprinter/source/gridprnpreviewform.lrj index 32d6e3005..b1f334541 100644 --- a/components/gridprinter/source/gridprnpreviewform.lrj +++ b/components/gridprinter/source/gridprnpreviewform.lrj @@ -10,5 +10,5 @@ {"hash":13109990,"name":"tgridprintpreviewform.tbdivider6.caption","sourcebytes":[116,98,68,105,118,105,100,101,114,54],"value":"tbDivider6"}, {"hash":13109991,"name":"tgridprintpreviewform.tbdivider7.caption","sourcebytes":[116,98,68,105,118,105,100,101,114,55],"value":"tbDivider7"}, {"hash":14901026,"name":"tgridprintpreviewform.edpagenumber.text","sourcebytes":[101,100,80,97,103,101,78,117,109,98,101,114],"value":"edPageNumber"}, -{"hash":116646133,"name":"tgridprintpreviewform.acscaleprinttopages.caption","sourcebytes":[82,101,100,117,99,101,32,112,114,105,110,116,32,116,111,32,49,32,112,97,103,101],"value":"Reduce print to 1 page"} +{"hash":118944718,"name":"tgridprintpreviewform.acscaleprinter.caption","sourcebytes":[80,114,105,110,116,101,114,32,115,99,97,108,105,110,103,32,102,97,99,116,111,114,46,46,46],"value":"Printer scaling factor..."} ]} diff --git a/components/gridprinter/source/gridprnpreviewform.pas b/components/gridprinter/source/gridprnpreviewform.pas index 89d0b3cdd..fb55710d7 100644 --- a/components/gridprinter/source/gridprnpreviewform.pas +++ b/components/gridprinter/source/gridprnpreviewform.pas @@ -15,7 +15,7 @@ type TGridPrintPreviewOption = (ppoNavigationBtns, ppoNavigationEdit, ppoZoomBtns, ppoPageOrientationBtns, ppoMarginsBtn, ppoHeaderFooterBtn, - ppoPrintOrderBtns, ppoCenterBtns, + ppoPrintOrderBtns, ppoCenterBtns, ppoScalePrinterBtn, ppoPageSetupBtn, ppoPageNumberInfo, ppoZoomLevelInfo @@ -27,7 +27,7 @@ const ppoNavigationBtns, ppoNavigationEdit, ppoZoomBtns, // ppoPageOrientationBtns, ppoMarginsBtn, ppoHeaderFooterBtn, - // ppoPrintOrderBtns, ppoCenterBtns, + // ppoPrintOrderBtns, ppoCenterBtns, ppoScalePrinterBtn, ppoPageSetupBtn, ppoPageNumberInfo, ppoZoomLevelInfo @@ -51,7 +51,7 @@ type acPrintRowsFirst: TAction; acCenterHor: TAction; acCenterVert: TAction; - acScalePrintToPages: TAction; + acScalePrinter: TAction; acZoom100: TAction; acZoomToFitWidth: TAction; acZoomToFitHeight: TAction; @@ -106,6 +106,7 @@ type tbCenterVert: TToolButton; tbDivider6: TToolButton; tbDivider7: TToolButton; + tbScalePrinter: TToolButton; procedure acCenterHorExecute(Sender: TObject); procedure acCenterVertExecute(Sender: TObject); procedure acCloseExecute(Sender: TObject); @@ -120,7 +121,7 @@ type procedure acPrintColsFirstExecute(Sender: TObject); procedure acPrintExecute(Sender: TObject); procedure acPrintRowsFirstExecute(Sender: TObject); - procedure acScalePrintToPagesExecute(Sender: TObject); + procedure acScalePrinterExecute(Sender: TObject); procedure ActionListUpdate({%H-}AAction: TBasicAction; var {%H-}Handled: Boolean); procedure acZoom100Execute(Sender: TObject); procedure acZoomInZoomOutExecute(Sender: TObject); @@ -196,7 +197,8 @@ implementation {$R *.lfm} uses - LCLIntf, LCLType, Printers, GridPrnStrings, GridPrnHeaderFooterForm; + LCLIntf, LCLType, Printers, + GridPrnStrings, GridPrnHeaderFooterForm, GridPrnScalingForm; const ZOOM_MULTIPLIER = 1.05; @@ -293,6 +295,7 @@ begin F := TGridPrintHeaderFooterForm.Create(nil); try F.GridPrinter := FGridPrinter; + F.Position := poMainFormCenter; if F.ShowModal = mrOK then ShowPage(FPageNumber, FZoom); finally @@ -385,18 +388,20 @@ begin end; end; -procedure TGridPrintPreviewForm.acScalePrintToPagesExecute(Sender: TObject); +procedure TGridPrintPreviewForm.acScalePrinterExecute(Sender: TObject); +var + F: TGridPrinterScalingForm; begin if FGridPrinter <> nil then begin - if acScalePrintToPages.Checked then - begin - FGridPrinter.ScaleToPages(1, 1); - ShowPage(1); - end else - begin - FGridPrinter.PrintScaleFactor := 1.0; - ShowPage(1); + F := TGridPrinterScalingForm.Create(nil); + try + F.GridPrinter := FGridPrinter; + F.Position := poMainFormCenter; + if F.ShowModal = mrOK then + ShowPage(1); + finally + F.Free; end; end; end; @@ -967,7 +972,7 @@ begin tbPrintRowsFirst.Visible := tbPrintRowsFirst.Action <> nil; tbDivider4.Visible := tbPrintColsFirst.Visible; - // Page centering + // Page centering, scaling if ppoCenterBtns in FOptions then begin tbCenterHor.Action := acCenterHor; @@ -977,9 +982,14 @@ begin tbCenterHor.Action := nil; tbCenterVert.Action := nil; end; + if ppoScalePrinterBtn in FOptions then + tbScalePrinter.Action := acScalePrinter + else + tbScalePrinter.Action := nil; tbCenterHor.Visible := tbCenterHor.Action <> nil; tbCenterVert.Visible := tbCenterVert.Action <> nil; - tbDivider5.Visible := tbCenterHor.Action <> nil; + tbScalePrinter.Visible := tbScalePrinter.Action <> nil; + tbDivider5.Visible := (tbCenterHor.Action <> nil) or (tbScalePrinter.Action <> nil); // Page setup dropdown button tbPageSetup.Visible := ppoPageSetupBtn in FOptions; @@ -1089,6 +1099,7 @@ begin acPrintRowsFirst.Caption := RSPrintRowsFirst; acCenterHor.Caption := RSCenterHor; acCenterVert.Caption := RSCenterVert; + acScalePrinter.Caption := RSScalePrinter; // Toolbar hints acPrint.Hint := RSPrint; @@ -1111,6 +1122,7 @@ begin acPrintRowsFirst.Hint := RSPrintRowsFirstHint; acCenterHor.Hint := RSCenterHorHint; acCenterVert.Hint := RSCenterVertHint; + acScalePrinter.Hint := RSScalePrinterHint; tbPageSetup.Hint := RSPageSetupHint; end; diff --git a/components/gridprinter/source/gridprnscalingform.lfm b/components/gridprinter/source/gridprnscalingform.lfm new file mode 100644 index 000000000..07519e3f4 --- /dev/null +++ b/components/gridprinter/source/gridprnscalingform.lfm @@ -0,0 +1,174 @@ +object GridPrinterScalingForm: TGridPrinterScalingForm + Left = 331 + Height = 251 + Top = 131 + Width = 358 + BorderStyle = bsDialog + ClientHeight = 251 + ClientWidth = 358 + OnActivate = FormActivate + OnCreate = FormCreate + LCLVersion = '2.3.0.0' + object ButtonPanel: TButtonPanel + Left = 6 + Height = 34 + Top = 211 + Width = 346 + AutoSize = False + OKButton.Name = 'OKButton' + OKButton.DefaultCaption = True + OKButton.OnClick = OKButtonClick + HelpButton.Name = 'HelpButton' + HelpButton.DefaultCaption = True + CloseButton.Name = 'CloseButton' + CloseButton.DefaultCaption = True + CancelButton.Name = 'CancelButton' + CancelButton.DefaultCaption = True + TabOrder = 6 + ShowButtons = [pbOK, pbCancel] + end + object rbManualScaleFactor: TRadioButton + AnchorSideLeft.Control = Owner + AnchorSideTop.Control = lblScaleFactorInfo + AnchorSideTop.Side = asrBottom + Left = 32 + Height = 19 + Top = 78 + Width = 127 + BorderSpacing.Left = 32 + BorderSpacing.Top = 24 + Caption = 'rsManualScaleFactor' + Checked = True + OnChange = rbManualScaleFactorChange + TabOrder = 0 + TabStop = True + end + object seNumPagesHor: TSpinEdit + AnchorSideLeft.Control = seNumPagesVert + AnchorSideTop.Control = cbScaleToWidth + AnchorSideTop.Side = asrCenter + AnchorSideRight.Control = seNumPagesVert + AnchorSideRight.Side = asrBottom + Left = 176 + Height = 23 + Top = 107 + Width = 63 + Alignment = taRightJustify + Anchors = [akTop, akLeft, akRight] + MaxValue = 1000 + MinValue = 1 + TabOrder = 3 + Value = 1 + end + object lblPagesHor: TLabel + AnchorSideLeft.Control = seNumPagesHor + AnchorSideLeft.Side = asrBottom + AnchorSideTop.Control = cbScaleToWidth + AnchorSideTop.Side = asrCenter + Left = 251 + Height = 15 + Top = 111 + Width = 64 + BorderSpacing.Left = 12 + Caption = 'lblPagesHor' + end + object seNumPagesVert: TSpinEdit + AnchorSideLeft.Control = cbScaleToHeight + AnchorSideLeft.Side = asrBottom + AnchorSideTop.Control = cbScaleToHeight + AnchorSideTop.Side = asrCenter + AnchorSideRight.Control = fseScalingFactor + Left = 176 + Height = 23 + Top = 138 + Width = 63 + Alignment = taRightJustify + BorderSpacing.Left = 24 + MaxValue = 1000 + MinValue = 1 + TabOrder = 5 + Value = 1 + end + object lblPagesVert: TLabel + AnchorSideLeft.Control = seNumPagesVert + AnchorSideLeft.Side = asrBottom + AnchorSideTop.Control = cbScaleToHeight + AnchorSideTop.Side = asrCenter + Left = 251 + Height = 15 + Top = 142 + Width = 64 + BorderSpacing.Left = 12 + BorderSpacing.Right = 32 + BorderSpacing.Bottom = 32 + Caption = 'lblPagesVert' + end + object fseScalingFactor: TFloatSpinEdit + AnchorSideLeft.Control = seNumPagesVert + AnchorSideTop.Control = rbManualScaleFactor + AnchorSideTop.Side = asrCenter + AnchorSideRight.Control = seNumPagesVert + AnchorSideRight.Side = asrBottom + Left = 176 + Height = 23 + Top = 76 + Width = 63 + Alignment = taRightJustify + Anchors = [akTop, akLeft, akRight] + Increment = 0.1 + MaxValue = 1E308 + MinValue = 0.01 + TabOrder = 1 + Value = 1 + end + object lblInfo: TLabel + AnchorSideLeft.Control = Owner + AnchorSideTop.Control = Owner + Left = 24 + Height = 15 + Top = 24 + Width = 36 + BorderSpacing.Left = 24 + BorderSpacing.Top = 24 + Caption = 'lblInfo' + Font.Style = [fsBold] + ParentFont = False + end + object lblScaleFactorInfo: TLabel + AnchorSideLeft.Control = lblInfo + AnchorSideTop.Control = lblInfo + AnchorSideTop.Side = asrBottom + Left = 24 + Height = 15 + Top = 39 + Width = 94 + Caption = 'lblScaleFactorInfo' + end + object cbScaleToWidth: TCheckBox + AnchorSideLeft.Control = rbManualScaleFactor + AnchorSideTop.Control = rbManualScaleFactor + AnchorSideTop.Side = asrBottom + Left = 32 + Height = 19 + Top = 109 + Width = 116 + BorderSpacing.Top = 12 + Caption = 'cbScaleToWidthOf' + OnChange = cbScaleToWidthOrHeightChange + TabOrder = 2 + end + object cbScaleToHeight: TCheckBox + AnchorSideLeft.Control = rbManualScaleFactor + AnchorSideTop.Control = cbScaleToWidth + AnchorSideTop.Side = asrBottom + Left = 32 + Height = 19 + Top = 140 + Width = 120 + BorderSpacing.Top = 12 + BorderSpacing.Bottom = 32 + Caption = 'cbScaleToHeightOf' + OnChange = cbScaleToWidthOrHeightChange + TabOrder = 4 + end +end diff --git a/components/gridprinter/source/gridprnscalingform.lrj b/components/gridprinter/source/gridprnscalingform.lrj new file mode 100644 index 000000000..d6de31a5f --- /dev/null +++ b/components/gridprinter/source/gridprnscalingform.lrj @@ -0,0 +1,9 @@ +{"version":1,"strings":[ +{"hash":106805890,"name":"tgridprinterscalingform.rbmanualscalefactor.caption","sourcebytes":[114,115,77,97,110,117,97,108,83,99,97,108,101,70,97,99,116,111,114],"value":"rsManualScaleFactor"}, +{"hash":128905218,"name":"tgridprinterscalingform.lblpageshor.caption","sourcebytes":[108,98,108,80,97,103,101,115,72,111,114],"value":"lblPagesHor"}, +{"hash":182573796,"name":"tgridprinterscalingform.lblpagesvert.caption","sourcebytes":[108,98,108,80,97,103,101,115,86,101,114,116],"value":"lblPagesVert"}, +{"hash":43058367,"name":"tgridprinterscalingform.lblinfo.caption","sourcebytes":[108,98,108,73,110,102,111],"value":"lblInfo"}, +{"hash":208026367,"name":"tgridprinterscalingform.lblscalefactorinfo.caption","sourcebytes":[108,98,108,83,99,97,108,101,70,97,99,116,111,114,73,110,102,111],"value":"lblScaleFactorInfo"}, +{"hash":75469702,"name":"tgridprinterscalingform.cbscaletowidth.caption","sourcebytes":[99,98,83,99,97,108,101,84,111,87,105,100,116,104,79,102],"value":"cbScaleToWidthOf"}, +{"hash":62788390,"name":"tgridprinterscalingform.cbscaletoheight.caption","sourcebytes":[99,98,83,99,97,108,101,84,111,72,101,105,103,104,116,79,102],"value":"cbScaleToHeightOf"} +]} diff --git a/components/gridprinter/source/gridprnscalingform.pas b/components/gridprinter/source/gridprnscalingform.pas new file mode 100644 index 000000000..d994b4c26 --- /dev/null +++ b/components/gridprinter/source/gridprnscalingform.pas @@ -0,0 +1,139 @@ +unit GridPrnScalingForm; + +{$mode ObjFPC}{$H+} + +interface + +uses + Classes, SysUtils, Forms, Controls, Graphics, Dialogs, ButtonPanel, StdCtrls, + Spin, + GridPrn; + +type + + { TGridPrinterScalingForm } + + TGridPrinterScalingForm = class(TForm) + ButtonPanel: TButtonPanel; + fseScalingFactor: TFloatSpinEdit; + lblPagesHor: TLabel; + lblPagesVert: TLabel; + lblInfo: TLabel; + lblScaleFactorInfo: TLabel; + rbManualScaleFactor: TRadioButton; + cbScaleToHeight: TCheckBox; + cbScaleToWidth: TCheckBox; + seNumPagesHor: TSpinEdit; + seNumPagesVert: TSpinEdit; + procedure cbScaleToWidthOrHeightChange(Sender: TObject); + procedure FormActivate(Sender: TObject); + procedure FormCreate(Sender: TObject); + procedure OKButtonClick(Sender: TObject); + procedure rbManualScaleFactorChange(Sender: TObject); + private + FGridPrinter: TGridPrinter; + FScalingModeLock: Integer; + procedure SetGridPrinter(AValue: TGridPrinter); + + public + procedure UpdateStrings; + property GridPrinter: TGridPrinter read FGridPrinter write SetGridPrinter; + + end; + +var + GridPrinterScalingForm: TGridPrinterScalingForm; + +implementation + +{$R *.lfm} + +uses + Math, GridPrnStrings; + +procedure TGridPrinterScalingForm.cbScaleToWidthOrHeightChange(Sender: TObject); +begin + if FScalingModeLock > 0 then + exit; + inc(FScalingModeLock); + rbManualScaleFactor.Checked := not (cbScaleToWidth.Checked or cbScaletoHeight.Checked); + dec(FScalingModeLock); +end; + +procedure TGridPrinterScalingForm.FormActivate(Sender: TObject); +begin + Constraints.MinHeight := cbScaleToHeight.Top + cbScaleToHeight.Height + + cbScaleToHeight.BorderSpacing.Bottom + ButtonPanel.Height; + Constraints.MinWidth := lblPagesVert.Left + lblPagesVert.Width + + lblPagesVert.BorderSpacing.Right; + Width := 0; // enforce constraints + Height := 0; +end; + +procedure TGridPrinterScalingForm.FormCreate(Sender: TObject); +begin + UpdateStrings; +end; + +procedure TGridPrinterScalingForm.OKButtonClick(Sender: TObject); +var + nhor, nvert: Integer; +begin + if rbManualScaleFactor.Checked then + begin + FGridPrinter.PrintScalingMode := smManual; + FGridPrinter.PrintScaleFactor := fseScalingFactor.Value; + end else + begin + nhor := IfThen(cbScaleToWidth.Checked, seNumPagesHor.Value, -1); + nvert := IfThen(cbScaletoHeight.Checked, seNumPagesVert.Value, -1); + FGridPrinter.ScaleToPages(nhor, nvert); + end; +end; + +procedure TGridPrinterScalingForm.rbManualScaleFactorChange(Sender: TObject); +begin + if FScalingModeLock > 0 then + exit; + if rbManualScaleFactor.Checked then + begin + inc(FScalingModeLock); + cbScaleToWidth.Checked := false; + cbScaleToHeight.Checked := false; + dec(FScalingModeLock); + end; +end; + +procedure TGridPrinterScalingForm.SetGridPrinter(AValue: TGridPrinter); +begin + FGridPrinter := AValue; + if FGridPrinter <> nil then + begin + lblScaleFactorInfo.Caption := Format(RSScaleFactorInfo, [FGridPrinter.PrintScaleFactor]); + cbScaleToWidth.Checked := (FGridPrinter.PrintScalingMode in [smFitToWidth, smFitAll]) and + (FGridPrinter.PrintScaleToNumHorPages > 0); + cbScaleToHeight.Checked := (FGridPrinter.PrintScalingMode in [smFitToHeight, smFitAll]) and + (FGridPrinter.PrintScaleToNumVertPages > 0); + rbManualScaleFactor.Checked := FGridPrinter.PrintScalingMode = smManual; + if FGridPrinter.PrintScalingMode = smManual then + fseScalingFactor.Value := FGridPrinter.PrintScaleFactor; + seNumPagesHor.Value := FGridPrinter.PrintScaleToNumHorPages; + seNumPagesVert.Value := FGridPrinter.PrintScaleToNumVertPages; + end else + raise Exception.Create('No GridPrinter specified in TGridPrinterScalingForm.'); +end; + +procedure TGridPrinterScalingForm.UpdateStrings; +begin + Caption := RSPrintingScaleFactor; + lblInfo.Caption := RSSelectScaleFactorForPrinting; + lblScaleFactorInfo.Caption := RSScaleFactorInfo; + rbManualScaleFactor.Caption := RSManualScaleFactor; + cbScaleToWidth.Caption := RSScaleGridToWidthOf; + cbScaleToHeight.Caption := RSScaleGridToHeightOf; + lblPagesHor.Caption := RSPages; + lblPagesVert.Caption := RSPages; +end; + +end. + diff --git a/components/gridprinter/source/gridprnstrings.pas b/components/gridprinter/source/gridprnstrings.pas index 0ee01750f..227677901 100644 --- a/components/gridprinter/source/gridprnstrings.pas +++ b/components/gridprinter/source/gridprnstrings.pas @@ -41,6 +41,8 @@ resourcestring RSCenterHorHint = 'Center grid in page horizontally'; RSCenterVert = 'Center vertically'; RSCenterVertHint = 'Center grid in page vertically'; + RSScalePrinter = 'Scale printout...'; + RSScalePrinterHint = 'Scaling of print output'; RSPageSetupHint = 'Page setup options'; RSPageInfoPanel = 'Page numbers'; RSZoomInfoPanel = 'Zoom level'; @@ -77,6 +79,15 @@ resourcestring RSTextInCenteredSection = 'Text in centered section'; RSTextInRightAlignedSection = 'Text in right-aligned section'; + // Printer scale factor + RSPrintingScaleFactor = 'Printer Scale Factor'; + RSSelectScaleFactorForPrinting = 'Select the scale factor for printing'; + RSScaleFactorInfo = 'Current scaling factor: %.2f'; + RSManualScaleFactor = 'Manual scale factor'; + RSScaleGridToWidthOf = 'Scale grid to width of'; + RSScaleGridToHeightOf = 'Scale grid to height of'; + RSPages = 'page(s)'; + // Actions RSPrintEllipsis = 'Print...'; RSPrintPreviewEllipsis = 'Preview...';