LazMapViewer: Implement MapViewEnabled for MultiMapsPlugin. Extend dragmarker_demo to show enabling of specific maps.

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@9555 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
wp_xxyyzz 2024-12-29 17:31:14 +00:00
parent 44cbf67019
commit b96869c8fc
10 changed files with 1184 additions and 266 deletions

View File

@ -0,0 +1,83 @@
<?xml version="1.0" encoding="UTF-8"?>
<CONFIG>
<ProjectOptions>
<Version Value="12"/>
<PathDelim Value="\"/>
<General>
<SessionStorage Value="InProjectDir"/>
<Title Value="dragmarker_demo"/>
<Scaled Value="True"/>
<ResourceType Value="res"/>
<UseXPManifest Value="True"/>
<XPManifest>
<DpiAware Value="True"/>
</XPManifest>
</General>
<BuildModes>
<Item Name="Default" Default="True"/>
</BuildModes>
<PublishOptions>
<Version Value="2"/>
<UseFileFilters Value="True"/>
</PublishOptions>
<RunParams>
<FormatVersion Value="2"/>
</RunParams>
<RequiredPackages>
<Item>
<PackageName Value="lazMapViewerPkg"/>
</Item>
<Item>
<PackageName Value="LCL"/>
</Item>
</RequiredPackages>
<Units>
<Unit>
<Filename Value="dragmarker_demo.lpr"/>
<IsPartOfProject Value="True"/>
</Unit>
<Unit>
<Filename Value="main.pas"/>
<IsPartOfProject Value="True"/>
<ComponentName Value="MainForm"/>
<HasResources Value="True"/>
<ResourceBaseClass Value="Form"/>
<UnitName Value="Main"/>
</Unit>
</Units>
</ProjectOptions>
<CompilerOptions>
<Version Value="11"/>
<PathDelim Value="\"/>
<Target>
<Filename Value="dragmarker_demo"/>
</Target>
<SearchPaths>
<IncludeFiles Value="$(ProjOutDir)"/>
<UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/>
</SearchPaths>
<Linking>
<Debugging>
<DebugInfoType Value="dsDwarf3"/>
</Debugging>
<Options>
<Win32>
<GraphicApplication Value="True"/>
</Win32>
</Options>
</Linking>
</CompilerOptions>
<Debugging>
<Exceptions>
<Item>
<Name Value="EAbort"/>
</Item>
<Item>
<Name Value="ECodetoolError"/>
</Item>
<Item>
<Name Value="EFOpenError"/>
</Item>
</Exceptions>
</Debugging>
</CONFIG>

View File

@ -1,4 +1,4 @@
program project1;
program dragmarker_demo;
{$mode objfpc}{$H+}
@ -10,14 +10,17 @@ uses
athreads,
{$ENDIF}
Interfaces, // this includes the LCL widgetset
Forms, unit1, lazmapviewerpkg
Forms, main
{ you can add units after this };
{$R *.res}
begin
RequireDerivedFormResource:=True;
Application.Scaled:=True;
RequireDerivedFormResource := True;
Application.Scaled := True;
{$PUSH}{$WARN 5044 OFF}
Application.MainFormOnTaskbar := True;
{$POP}
Application.Initialize;
Application.CreateForm(TMainForm, MainForm);
Application.Run;

View File

@ -0,0 +1,935 @@
object MainForm: TMainForm
Left = 314
Height = 496
Top = 130
Width = 1122
Caption = 'Draggable Markers Demo'
ClientHeight = 496
ClientWidth = 1122
LCLVersion = '4.99.0.0'
OnCreate = FormCreate
object MapView_left: TMapView
AnchorSideLeft.Control = Owner
AnchorSideTop.Control = Owner
AnchorSideRight.Control = Bevel1
AnchorSideBottom.Control = gbDragging
Left = 0
Height = 388
Top = 0
Width = 558
Anchors = [akTop, akLeft, akRight, akBottom]
Cyclic = True
DownloadEngine = MapView_left.BuiltInDLE
DrawingEngine = MapView_left.BuiltInDE
Layers = <>
Font.Color = clBlack
MapProvider = 'Open Topo Map'
PluginManager = PluginManager
POIImages = POI_Images
end
object MapView_right: TMapView
AnchorSideLeft.Control = Bevel1
AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = Owner
AnchorSideRight.Control = Owner
AnchorSideRight.Side = asrBottom
AnchorSideBottom.Control = gbDragging
Left = 564
Height = 388
Top = 0
Width = 558
Anchors = [akTop, akLeft, akRight, akBottom]
Cyclic = True
DownloadEngine = MapView_left.BuiltInDLE
DrawingEngine = MapView_left.BuiltInDE
Layers = <>
Font.Color = clBlack
MapProvider = 'Maps For Free'
PluginManager = PluginManager
POIImages = POI_Images
end
object Bevel1: TBevel
AnchorSideLeft.Control = Owner
AnchorSideLeft.Side = asrCenter
Left = 558
Height = 50
Top = 108
Width = 6
Shape = bsSpacer
end
object gbDragging: TGroupBox
AnchorSideLeft.Control = Owner
AnchorSideLeft.Side = asrCenter
AnchorSideBottom.Control = Owner
AnchorSideBottom.Side = asrBottom
Left = 381
Height = 84
Top = 400
Width = 360
Anchors = [akLeft, akBottom]
AutoSize = True
BorderSpacing.Around = 12
Caption = 'Dragging of markers'
ClientHeight = 64
ClientWidth = 356
TabOrder = 2
object cbGlobalEnabled: TCheckBox
AnchorSideLeft.Control = gbDragging
AnchorSideLeft.Side = asrCenter
AnchorSideTop.Control = gbDragging
Left = 126
Height = 19
Top = 8
Width = 105
BorderSpacing.Top = 8
BorderSpacing.Bottom = 6
Caption = 'Enabled globally'
Checked = True
State = cbChecked
TabOrder = 0
OnChange = cbGlobalEnabledChange
end
object cbLeftEnabled: TCheckBox
AnchorSideLeft.Control = gbDragging
AnchorSideTop.Control = cbGlobalEnabled
AnchorSideTop.Side = asrBottom
AnchorSideBottom.Side = asrBottom
Left = 16
Height = 19
Top = 33
Width = 146
BorderSpacing.Left = 16
BorderSpacing.Bottom = 8
Caption = 'Enabled in left map only'
Checked = True
State = cbChecked
TabOrder = 1
OnChange = cbLeftEnabledChange
end
object cbRightEnabled: TCheckBox
AnchorSideLeft.Control = cbLeftEnabled
AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = cbGlobalEnabled
AnchorSideTop.Side = asrBottom
AnchorSideRight.Side = asrBottom
AnchorSideBottom.Side = asrBottom
Left = 186
Height = 19
Top = 33
Width = 154
Alignment = taLeftJustify
BorderSpacing.Left = 24
BorderSpacing.Right = 16
BorderSpacing.Bottom = 12
Caption = 'Enabled in right map only'
Checked = True
State = cbChecked
TabOrder = 2
OnChange = cbRightEnabledChange
end
end
object PluginManager: TMvPluginManager
Left = 401
Top = 74
object DraggableMarkerPlugin: TDraggableMarkerPlugin
end
end
object POI_Images: TImageList
Height = 32
Width = 32
Left = 400
Top = 136
Bitmap = {
4C7A040000002000000020000000561200000000000078DAED5A79705475B6EE
48081036C10559C232421C35382A8E5B40517928628133DAECB8B0C9631188D1
19140866028253F050648FC0AB889A6030060859D8970441084B0221819090AD
97A4D34B7A5FBE77CEEFD7DD848755D381249655FEF155DFBEF7F6EFFB9D73BE
73EEFDAA1A8002BF13B85CAEDE56ABF59F7575759946A3B18260F7A282CFF135
B7DBDDABB179794D93C9F42DF1B84D0603CC67CFC2BA6307ECF1F1B06FDC086B
6222CCA74E81AF897B4CA6EFE9373D1B83DB66B38DA5354D26AD16F684047826
4C005E7E19183204183C18888C049E7A0A78EC31785E7A09F655AB6052AB417B
30D16FC7DD0E37E5F303E286E5C40978264D025E7F5D62C408E0D55781A14381
175E907B78F249E0D14781871E8287BE5BF6EFE75C80D688BAC5B8C789DF6765
01A34703A346C94FC69B6FCA7D0C1F2EF7C07978F659E0892780FEFD81071E00
FAF685F5BBEFC41E1A9A07AE1DE78FE316BC63C6001327026FBD25317E3C40B5
C0B163C09123C0860DC0A041B20E9C83071F04EEBF1FE8DD1B96BD7B452D1AA2
4BBAFD3BAEB767F264C9CFDC9CFFA95381295324B7C502242703494980D90C50
DDF1CC33C0E38F030F3F2CE247CF9EF0D07E4C2A15EFE1DB0063EFCD1A66AD89
1C73BE3FFA08387912208D233717703A817FFF5B5EE37B162C001C0EE0E04180
EB959E2EEBD28B42BEEF3ED8962D137D41FDDB2B00CDFD93FBC8C331FBF857AF
060500A4A5497CF925C0B959B204888901468E043EF904D8BA15A09E446D2DF0
FEFB22FFCCEF214DF09AB4F63FFE133FCF11EE6FD163AC73D6DA175F00151532
F75C83F9F301AA8FA801E79EF22B6AC47DC01ABC72E53A7FD7AE40E7CE301F3F
0E5A3BE33FF1F32CE3D922FA9B7B8C73B07225505E7E5D7FF9F9404E8ED4E5DF
FF2E35F8CB2FD77BC0C7EFCD3F3A758275D326AE417900FC763BDD2B7A8A6BC8
3DF6F9E74059D9F5FEE3FA73CD39EFBCC7A82859FFA79F96FA63FED9B385FED0
A58BE0B753AD78ED00F81D76EE27CE25CF16DEC3D2A5C0B56BD7E74F6525F0F5
D7D767D0BA75727FBE1974F932306B16D0A30770EFBD40C78EB0C7C531BF2300
FE729EE7A297790F9C87D858A0B41418364CE2B3CF640EA8B785DEF9F8E38F65
EC3C7F987FC60CA05B37E0EEBB81F6ED61A5E74420F9678D984F9F16F35CC4C3
355DB4082829015E7C11A0192F3EB9BEA9A9404A0A306D1A306000F0C82372F6
141501D3A7CBDA93F6D0B6AD4F7F7B02E8BF8F78667A587F9C4BD613EB9D7B8A
7BCB07D608C524661FE77FCD1AD9A73C876A6AE49EEEB947E4DE131EEE7B167C
18C8ECA57B5D765E8B9E25229FACB38C0C99EBFAC8CC94E06B7BF6C8D9B07BB7
CC0BCF42D21DC76E93DA73D1DA6181CC40B3D9BC8D9FA11E9EE9FC2CE19CF24C
E5BD708E197CCCE7F81ADFE39DF7E8DE5D6A9EF34E75F7F4EB27E62FADF94D03
DE73C268BF460BCF535E97C1F39CF228B8187C4C6B8B6B7DFAC85E63BDB1DEBD
DC0C0BE587D7A2357B36F0F93B463C3BD7AF977DC4EBF33CE118197CCCE7F81A
F3B2D6B8DE9C73E66ED30636D282F7F93BE616DF3F96F1EF1D73E6C8B89883C1
33953F39CF7C9E7B8C6326AD71BDD1BA351CF47CF06A6EF9ADBEFF783C9E3BA8
67769A743AB85E7945C6C6602EDF317372BCCC4B312324042ED28D897A807EBB
9BD7B89D7730FA7D0783C170A18EFADFC3750F0D955C0C3E66CE56AD80962D81
162DE0A19AD4151773EC17F9B78DF10EEA743AFBD27A35667EE674A025838325
880F7750784141749742ECC79C9DCDEF1A3AFA4DBFC67C0777381CFFC532B66E
DB769DAF3EE89C95DE59F81EBEB729FC0769690E6BCACEB3FEFFF1DB69467AF5
36B7293D10CD917823BDCB3879267AB99DF49EE2F51E9B9BDA8391A64248D747
79A6B96906BA2322C47CA373C7E85AAB66F281F752ACD7EAE83DA82E2F8FF556
46E7BA34A717257D3FCE1681C1C7BF851F26DEE718F81D79F8DFBBFF37180D38
AA3D8AB5E56B1173350631C531585BBA1647D547C1D79ACAFF5719AA10531683
EEF9DDA138A380E234E117C209420EE1A8023D727A6061E14254E9AB1AD5FFA7
69D3D0BD8078F389278F709E708E907BF31E1407691F477A20AD22AD51FCFF16
D516B4BCD8128A02C5755C54C8BDD4DFC3CF846CC261C2010582F7066373F1E6
DBF2FF1C77F0C560282ED19A4584CB5E142A10AD8E4692210949FA2444974743
71F2C61C28F6D11E328391569E764BFE9FEB2D725EE0E52E269410AE2A30A37A
060C6E03E2AAE310A78913C7334B67CA1C1C231C22EC2764522DF6F5804ADF70
FFCF5A133926FEF0D270249A1391644942B22519368F0D2F57BE2CF7467A185A
3C549C4BD62523A93A0989DA44841F0F87228BAEEF5120263FA641FE9FFBA847
7E0FA935E2505629A1756B116B881518AE1E8E56575A6148D9100C29198256E7
5B61F8E5E188ADA0EBE5B1D03AB550E629FDFC615961A23703F5FFC7B4C7648F
9D975A53562A91EFC817B9E71AF42BEB876267B1C83BA3D85E8C7EF9FD641F90
06F3CDF937F02B762970ACF258C0FE9F678BE8EF7352E7CA72E2B7E7FBF5B7D7
B21749C624845C0C41485E08B6EBB723CB98E5EF815FE35F57B82E60FFCF734D
F454AEDC83B2CCCBEFED3FAEF5C09281B23E6715185434489C531C97FA13FCE7
95427F827F2769E07C4CC0FE7F51F122994BEF1E94A5C46FCB977C948F227B11
E655CD13DC7C3DAA3C0A85B6427FFFF9F933E87B1A21D5CF1F90FFE7792ED6F2
EE4159ECE53F2BE31D5D3A1A768F1D09BA0424D42488E35185A364EF1DF6F29F
23FE74FABE5BF2AFBBB42E60FF9FADC996732447CE35E565E2B712FF29851F83
0A0661836683C0C0FC8192FB889C3D82FFACD25F7B458A0239953901FB7FEE95
B0E361720FA42765A1121AA7060BCB176261C542F9C928F3E21AA194709550BC
101A8706CA334A7FEC3DF7F46CB0FFFFB4F0533947299FE1A7C2C54CE1D97213
B45E68086A89C42A9A3F87C285EE143F29107B3EB6C1FE9F6766D8D130F12C11
FB38E47DB6D4C721EFB50372DE8B7EF3696E97E40EDB1326E6EFADF8FFF48A74
F11C136BEFF7E28017BEEF7C6DAF9CF5426FF5B883538291712DE3B6FCFF8AC2
1532A64C6F7CF591E98D37DDDBE7BB15FE9C2B7E5460C585158DE2FF279D9E24
E3DAF32B48F3F2EE925A13DC3B1478E7F83B8DE6FF6B0C35883C1C2963DB550F
3BBD9CA9B2C73866E68EDC1709FE4D63FAFFAB3557D133BDA7E4A90F2FA72299
F003E96D57188AAB9BC6FF675766A3ED8F6D058F1FDBBD485220343914D9154D
EBFFB7156D43D0F620C1571F41494148286A1EFFFF71EEC737F1CF3FDD7CFE9F
E7F3C8C323FDDC230E8FF0798F66F3FFAA5A15FAA7F747C49E08F0F16FE1FFF3
35F9C853FFE1FFFFF0FFCDE8FF0D46E4141811BF5F8FCF7EAAC5D2141D36EDAB
45CE453DF85A53F97F55B511CB771A11F189019D67EAD169462DEEFCEF1A749C
AE4587696AB49B5285F0E82AC4FEA005DFDB98FE3FEBAC098F2C34E1EEF7BD98
6DC45DB3781F37EF21745205FACE2B47FA695DA3F8FF6F8F99D02DAA0EF7CEB5
F871CF1CB3D8C75DB3EBEDE13D2DDA4F55A1EDE44A84BE5B8676934AB1F540F5
6DF9FFAC73267425EE2EF32CE81265C37D1F10E8B3CB3C2B16FFE4C04FB94EA4
9C7660D10E0BEE9C5E4D39D07873508E36EF5C43BB774B907EAAE696FC3FD790
73CEF13277D76807BA7DE844B76827E6EF70C16805FE27D389951976711CFDBD
191DDED378735021F85BBD55823EB34B480F8606FBFF65A435CE31F3472EB323
F58C073BCF0169E701BB1318BBD121AEF13D6FAE318B73A9B976FCF88B0DC927
AC78647E155ABF5D82900957109BA46AA0FF37A2FF02839F7FEAFF3A505307AC
DAEB11786BB30BBDFE6187729D1D6FACB1A2DB5C03C6ACADC3E7BB2D58BEAB0E
D52637C6AFA996FC138B2907E4D5A51603F2FFC72F19458FB1CE596B53B63A70
4905917BAE41E43227AED540E49D515AEDC6133106D1079CFF8B95CE1BF883C7
1721FB822E60FFCFB385FB9B7B8C7330658B9DF83D427BACC123851EAA870BDD
3F30A3DB3C13E9D08183171DFE1EF835FEF5E9EA80FDFFD214D953DC5BDC6393
375B05BFAFFFB8D6AF7D61953D487B7C75A5499CF3E9CFC7CFFAE3FA078F2BC2
A7895501FBFF253FEA442E7D7B98F4B50505556EFFFC29D67AB06087CD3F8316
245B7045ED427BEF0CBA58E1E3BF8A9682BF108B132B03F6FF3CCF799EF9F6F0
6E7C9DE0EF3C4B4F9C7ACA87190E179078C281C49FEDE2F8ED8D06FFFC61FE71
5F6929F7C43FFE325A8C2D0C38FFAC91E3057A1187D803D5F4ED4D46C1DF6986
CE8F612B8CD872C4862D87AD78F9F35AC1DD8E671FCD1EC9AFA1DCCBDAB7187B
0939527F01FA7F231EA06709EF81D77D6B83015A93074B52CD37208EF1539DC0
BF524C88FDD188D81D06688C6E8C5DAD96B153EE7BCF2C6AB0FF5FB2432B9E25
9CCFC73ED122F9A49566CB8DD8C138E98385E60EC38CED3FD7E1E1E86B42771C
FBBF922A1BEEFF69FEF68B2A17CF12CE29CF54DECB8DA810D7F81E9EB7ADDF2E
159A139AF7E6BD17C5CEF3F756FC7F66AE4E3CC7786D01DE8B176DBC9CD77965
AFB7F4731722645C01324E55DF96FF5FB54B2362E2F5799ED4079F13F14EBC2A
B4C6F5F6E5FC8E310558995AD528FE7FEA864A1117E79563F483BEF379C1CB31
93D604F7E88B78F7ABD2C6F3FFB5463CBFB844C4C63C7EF077C159E88F3988B8
23175C01FFA651FD7FA5017D665D161C2DC616884F3F883368F4052846E5236C
7A018A2BF44DE3FF2FD4A0DD44E21A754180F904948C3C844EB880ECFC9AA6F5
FF07D5C49D27F8EA83CF251C50358FFFFFA6FC26FEF90965CDE8FF8D18B9BCD8
CF3DE233F97ED3ACFE9F665AFFA8424410545AC36FE3FFAFD6228FF087FFFFC3
FF37A7FF3F7FDE84D45413B66E35E1EBAF8DF8E1072372738D4DEAFFB55A13BE
278F376D9A057FFB9B05234698316C581D860C31E1F9E78D78FA69035E79458F
D5AB0D50AB1BD7FF9F3A5587D9B3AD9830C186F1E36D183BD606A5D28AD75FB7
60F870B3D8C373CF19F1D453063CFA682D060FD6E1C00143A3F8FF0307EA3069
921D93273B30658A437CBEF38E5DEC65D428B907CEC38B2F9A101969C4134FE8
1111518B3FFFB9068989FADBF2FF1C37734F9DEAC08C194ECC9AE5C4CC994EBC
F79E93D676E1F87137B2B35DD8BCD981A143EBFC39F8CB5F6AF1C0033AF4ED5B
8D7DFB0CB7E4FFB9DE9C738E97B9E7CE75213ADA8D0F3E7063FB7637E515D8B9
D385941497F81BFA9A3576BCF08209CF3E6BC0E38FEBF1D0433AFCE94FD51830
A0DAA78706F97FD61AE798731E1BEBC29933C039F2FF7979F2EFCE5F7DE5127B
633DC4C5D9C5DFBF8F1C7162FF7E2732331DA40B03EEBFBF06DDBB6BB17CB9AE
61FE9FFA8875CE6B33477CBC8B9E2FA05C82D6E7BF7E7B281F4EAC5CE9C4B265
0ED2A395F668C337DFD8A927EDA8ADF5202AAA8EF25F831E3DB4540FADE8CD40
FD3FF737F718EB9CB5B661834BFCC59F73CF3558BAD42DFEE2CC7967A8D51EB1
5FEE8381038D282E76DFC07FF7DD1AD28A2160FFCFB385FB9B7B8C6BB076AD53
FCE59DB5C71ABC74C9839327DD941B3B264EB4090DE6E6BAF0D24BB207987FDE
BC1BF9E3E36B03F6FF5BB698444F716F718F7DF9A50315151E7F0F72FD972C71
60DC381BDE7CD38AF9F36DA2FE83079BF0CC3306C13F776E1DE94FD6FFAEBBD4
94335DC0FE9F672AE792670BEF61C50A07CACB3D420F9C0F95CA838404A77F06
C5C7DBC5F541838C78F24903AE5C7163CE1C13FAF4A946D7AE5A74EEACA6FDEA
02F6FF3CCF79A6F21E380FCB96D95156E6C11B6F5844BC2B57DA450E0E1E74D1
7C7289E3C58BAD22F60103F4827FF66C137AF6AC46972E1ADC79A71A9B36D506
ECFFCF9C91F39CE709CFB5B8381B4A4B3D221FAFBD26F1E18756ECDEEDC4AE5D
0ED28459F4FD5FFFAA17B3E7F2653769C52472CFB56FDF5E45FAD337E8FFFFC3
86E9C52C633D2D5A64855EEF11BD551F5BB6D8A917ED149B0DEBD7B34EADF4FC
B1526F78307DBA51C4DEA9939A66A1BAC1FE7FED5AF92CE179AE549A9095E5A0
FE97F3853F251CD8BBD721AE656438909EEE405A9A9DE6A29DF6AD13BAE3D897
2EAD69B0FFD7688C344F75E259C239E599CAB5E5FD30F898CFF1B588081D3D6F
74A2DF7AF5AA46B76E5ADC738F061D3BAA101EAE26BD1A6FC9FF1F3A6410CF31
7E96F03C7FF861B91F09798E79FBF5AB11B39EF5C67A97DC6A74E8A0A259ACBF
2DFFBF71A31EBD7B578BF5799E738C3E707F738F312F6B8DEBCD39E7B84343AB
B06A95AE51FCFFBC793A9153E6E079E6037FE778999775CE5AE37AB7695345B3
4ADB68FE5FA7E37E90738C797CE0EF3C5BB8BF993734548590902A9A436AEA81
C6F5FF2525463CF8A01AEDDAA9FC68DB5672B66E5D25785BB4A8A45A54D1FC35
3489FFCFC9D1536DABD0B26525828325EEB8A31241419550282A682F95F42CD2
37ADFFDFA623BE0AC1571F7C2E2141D73CFEFFE3EA9BF8E7CFAF6E3EFF4FEF32
23476AFCDC2346687CDEA3F9FC3FCDB4FEFD5534875462BEFD26FE3FDF40EFA3
863FFCFF6DACF17FEE1168FB
}
BitmapAdv = {
4C69020000004C7A0400000030000000300000002E1F00000000000078DAED5D
07785465D69E68901294A660D4C50AA258575758A31814A5A828F64693483310
2020CA6631EA02022A888A652D888AFE8A08127A573A020B2105026940FA645A
6692497BFFEFFDBEFBCDDC49C2EEFE2484F0FCDCE7394F666E99FB9E73DE53BE
7BCF03002C382B5A82BC5E6F47217D85440A996448A4B1AF6303C47C4E4949C9
032E976BBED3E9CC1582FF2039E2DCAF852EF7F3DAD369EBA2A2A2E7059E84AA
185DF9F9701F3800F7CE9D70EFD801F7FEFD725F0DBA1C72BBDDCFF3B7EA137B
7979794761C3CD3E1C0E073CDBB7A3F49D775031600070EFBDC03DF70077DD05
FCF5AFC01D7700B7DF8E8ABE7D513A79323C9B36C96B4C7AFCCEDFAC0FECC25E
4F3AD526EF5DBC7A352A468C00FAF4017AF7067AF604EE17D4B8EF3E203C1CB8
FB6EE0CE3B812E5D80DB6E036EBE19E8DC1915E2BCE29F7FF6FB4C6C1E8FE7C9
53895DFCFE6871AF4ADEAF282D0DE5AFBD063CF2885F847DF1D0434A17EAD1A3
07D0BDBB5F07FAE1CF7F066EBA09B8FE7AA06347943FF30C8A0E1DD27A548A7B
8C3A45D823B4AD3CBB76A1B27F7FE0F1C781279EF0CB638F018F3EAAF478F041
A0572FE50BAD03B9F497BF00B7DE0ADC7003D0A91370CD35A8143EF1AC5BE7F3
85F0F14B75895DE48A6EE277CB25F62D5B80A79F069E7C52FD15F6C3B3CFAABF
7A3FF5A03FB40EF403B9141616C823C307B8F24AA987272E4EEB502672DADD75
14AB2D04358F49BBC4C72BACC448BCCF8BD4413F68E1771E8F8A027EF801F8FE
7BE0BBEF80F9F301C675B76E35FBE0EAAB81CB2F973AB8451E30E2E118EF5D07
BC99237F2F2F0F95C386299E68EC0307028307032FBEA8FEF2FB2841DF820254
DB727315DFB40F741C5C771DD0A10370C515C0A597A2521C73E5E4681ECDA925
F62BC4EF94F2B7BC1F7F0CF4EBA76CFFDC73CA9EC4FD92A0EAD0A14A468E0444
5CCB6DF162E08D3700912FF1E38F6ADFC183C0030F005DBBCA7C5A8D437FFA13
70F1C5F0BEFAAA8F47C5C5C597D72257CED1B946C62579FDD453CAF6E408312E
5D0A2C5B0608EE223959E114F95DEA485DA93373D28A15EAD8DEBDC0E79F039F
7D067CF209F0C107AA4E5C7595C21F1A0A5C72098A84AEB5F1414545C5798283
56FE46E9471F010F3F1C885FE4EE1AB78404E5179EC373790DAF652CEFDE5DF3
35B367AB1868DF5E62C74517C1FBCA2BDA07566239899CD34BF2DE6E4725F30A
6D68E6CFA245EADE0B170273E62879EF3D80B58C71F0FAEBC037DF00F3E601E3
C7AB3CC4BA30668CF25D6424306B96FA0DFA40C7B081BF5270CA65B3491D0496
074E823B33A4FFFEF8437196F6634E640C327EB5FD67CEF4F39FB1F0F2CBC0BE
7DD56D2C7A21793DFB0A5DCB787E4DF8DBB6055AB5829B7D86E2D0F4FF2B7E71
DD1A5E5BC2DCC7FCCDDE803CD03EA0DDB9BDFD76600ED2D819ABC4F5FEFB4052
92DA2772A3CCA1C4CF1C7A22FCC2FEC45F226C637068D549E04F97DC9F3245F5
63F401FD4F1B92D33AA7F0B8CEFFCC371A3B7DC4F3588B298989EA1873306B00
F34F4444207E13FFD1B2254AC5B906FEB493C0EFE2B5E5D1D1AA76D207E4B0E6
11EB133762D635F8DB6FFD78740D66DCF0BA1933FCC7740DD6F8193BE6FC73E1
85127F99F80D03BFF324F05748FC8C47F62EEC61D8CB681D162C50F7667ED7FD
CFD75FFBF168ECE41DAF9B3EDD7F4CF771E49CDEC7FC7FD96532FFA34D1BA045
0B948B7B19F8CB4F027F91C43F7AB4E2ABD6817E606FA96D3D6992BFFF9C3041
ED23DFF99DBA927714E6556EC44CEEDC728B8A176E8C11725FD45FB46B07B46E
0D5C7001CAC56F18F88B4E027F9AE43FED4B7F6B1DC825F6F68C6B6E1327AAB8
A04F28CC33DCC877E626DA5D63DFBC59C5ADEE1D060DF2E77F33F745ECE2FCF3
512A729A813FF5A4F30F6B25B94A9F33EE582B990399D7B9313EB48D29CC4FCC
33553762671E30AD61640FC28D754073C7E03E4242CCF967F549F43ED364EEDD
B64DDD8FF7A5EDD8BBD0175F7EA9EECD7A445E51888F7FE9A3E1C3810F3F54F1
3A6488D29FBF41DEB0EF64DFF6C20BEA3758F774DE37B88366CD7CF95F609972
12F5F77EBDB6AD64CEA60EEC79C95D62A15FB4EDD8B79985314FFC14D635E619
F29E7CA1CD759FADF3EDBBEF06DABE7973548A78708ADA6FD4DF1E27D1F737D2
FD8F97399EFEBEF146653FF297FD685D6D8C11F2DE647BAFC805C63AC04A2C27
D93FBF27FBCF9414859D3ED77A300FB1AF630FF9E9A7D585FBA92365EE5C752E
F9C45CC97CC398256F889DB16CE44CDA9E7F8B442F6BF40EEFD662ED75B9F80D
AFF4C19B6FAA75C6B5D7FAF5208FA90BEF4F7E69E177EEE7719EC7F3791DAF67
9DE25A85B58A9C67BED4BC1139074D9BC22BFA3D236EBD0243FB5A3E2F9925FD
28D64F958C4BD679E2E09A43EBC2354855E17EAE0D791ECFE775AC51CCF3CC35
ACB31ABB912FC99B4AA12FEF65C4EDEC3A58FF9E2F7E2BD3D78B1233ED473B12
9358B34A7C5A278D97FB799CE769DCB4396B146395B9869CD17617D865CF69AC
7F794F71EF0BEA620D5F52527227D772F27915FB36DA8F585873888BFA10A359
B88FC7780ECF276E6D731DAB66EC4D9AA058AC174CCF1FEEACE3E73F2FEBE733
DEB7DE5236247F898BF8AA0AF753780ECFD5B86973F245C72AB1376E6C5EF332
66234FD133AC8F754D28630E271EF280D828C4A9B152788CE790E366DCB4B9A8
AF8C559C771ECAC4BA423F0F15F7F8E7297C6E1B2CF2F14619CF3939A8603F41
4CE402F19985FB283C4E9E30AF9B710B9BA3512354881CE5CACA323FC76D748A
9F3D5FA8D73645A22FAB24CF894D0BEDAB3F132F3942CCE4890937CE3D1795C2
2F45F1F11A7BBAF8EDB6F5F10CBAB8B8F846DD5F7B56AE5458898D18B5F03B45
C4A5C42C7882E060891B4141F2B3E979A15BC4EBCDF5F90E40C4583FFD2CBA84
F59436AD2A1AAFC66CB1F8A444D45EFDCC59FCD613A7E31D8CB8EF649D334AD9
A311A31613D6AA522AFA38DFB36C8FE7F5D3F90E4960F849C6736121CAD9A7FE
1BDC94F2B030B8AC56DD9B2DAAEF774735C4733381E55F124F5A1A2A59AF4E80
9DC75CA9A91AFBFE8A8A8A9086F00ED2E8F3E4BB47D67F9973AAE21739C8BD75
ABE64D3EAF6948EF5145FEB84B3FAB2EE6B309730C88CFA6DE80E7746B88EFAF
CDEF98BC31313EFCDE4993CCF13ABC21BF8317F83EF0F518622D5FD6B7AFB937
F8B0A1CF10B0C71058D7E91E43BF4B11F1BA9EC7CE84390881B38DC07CC4F47E
FA08F79D49B31C02EF0D02B783C2CF67E23C8AC07D31E5EC5CCED9F99FFF4FF3
3FB98E5CECCCDF89B5B96BA5F073AE3DB7C1CEFF389C0E2CCF5B8E21A943704D
FC3508DA1D04CB1F1658760AD921649B05415B83D06157074424466045D60A79
4D4398FF99973D0F9D933BC3B25FE0DC27E45F42F60AD963513AECF2EB60D922
E477219B2CE8B0BD03E665CC3B6DF33F89B644743BDC0D960316BFC45B02F5F8
773A6C14B2DE826EBBBA21A920A95EE77F56E4AF40ABA456B0240A0C4926E1F7
04931E661DC8A5ED42B60AD92CE43743877516B4DED01ACB8E2DAB97F99F4579
8BD038B1B1C29B2CE4A049920D3D120C7F9C4807138FE803CB5A0B1AAF698C9F
337F3EA5F33F9BAD9BD12CA999C248BC8784A408396CFC3DA4F67738D20193F3
2623362F16B1B9B1989C3D191D123AF87964F6C106E503CB1A0B42D684E0F7EC
DF4FC9FC4F96230B571EBC32103B711F11926A88F81C9A168ACCB2CC6AAF2832
4B3311BA2F54F9A08638207ECB2A0BAEDA7015B26DD9753EFF139911A978916C
C24ECC69423284A45BD02CBD19FE28F943E29D6A9D8A1E193DD023BD07A6E64D
95FB76BB77236477883F0EAA70C8B25AC80A0B46ED1B55A7F33FCC358D0E3452
F169E00F4D0F458C2D06B176C1118792F5C5EB25CECF9D9F2B1D93FCF1FC99F5
33796CA37323628F89F38F0AC98C454C7A0C42B784FAF1AFB4A0D1F24648CA4F
AAB3F99FC8F44895534CF68FB1C6D4F82A6BB56735828F042BFCC97EFCC1FB82
B15ABE06ADBEC5A4C6A81830F05B96091FEC1D5527F33F36A70D17C55FE4C79F
A4F0C75A63D5EBDFC268F4C8EB21A57B6E7734496F22E3A06B665744E745233A
271A5D8E749135A1C9DE26E87EB03B7A248BF3137B203A2D5AFE466C5AAC2F86
25FEE516B45DD556DEBBB6F33FEBF2D6A97ABADFC889892A7E35FEF0EC70C97D
190322165AA4B7C032F7B26A365EE65C8616FB5AA83C6AD4B2F0F8F013E2B72C
B560FDB1F5B59EFF99923145E5EF7D96001FC41618F8B3C203F28FC6BEC5B305
03B20660C0B101D8E2DE22F7C539E2026AF17FC23F25614AADE77F06A40C8065
B7A59A0F62F30DFCC7C27D35A0EBD1AE3EECC1C9C17EEEEF0FC656F75679AC4B
62175F0DA8867F7520FE41BB06D57AFEA757622FE5F33D462D3574606D92F833
C37DF5977CE746BB4B9E996AF0C08C81F2D8B8CC71BEFC19807F6D60FC127FEF
2DBD6B3DFFD32DBE9BAA395574605D95F8D3C37DFD4F74AEC23FF0F8403FF67D
CA7703D30DFC19E37CF52B7CBF813FD5C0BF4AE57F89FF570BEED9744FADE77F
7A1EE8A9FCBD2B5087D81C037F5AB8AFFF649E91FC117C0F8E0FF6F5D28DF634
C2B6A26DF2D81D07EEF0F50FE1FB4CF88DFA2BB913A7F0F7DADCABD6F33F0393
062A7B55D12136DBC07F245CD9D99038679CDC4FBE9333B4BBC6BED4B6546137
7A8700FC55B86F5922F8BF7350ADE77FA6A64E55F7D33A185C8ACD32F0A784AB
D836A4C5FE1632CF54DD88BDC5CE1601BD67F8BF0CFC476203B943FC8B2D9876
605AADE77FD6E5AC53F7DB62F42CDB951EB1C70DFC07C3557E328BD0AF4B5217
19ABE4BBE48CEED94CBD7FF85E13FE9581DC21FE0DC736D47AFEC7EEB4A3EDD6
B64A87CD860E020B7B186EECEBC292C20225D19004430E088917B2CF90BD42F6
8421F260A4C27F3836D0F6823BED96B593F7AE8BF99FA8A428D527FE66E820EC
1893195367E33F318762AAD97EEC9EB17536FFC3F569E38D8D55AF6EE811BA43
F49F1931B2873CA16498243D56E67929225EC9194A4C8AE83FD785FAB10BDB37
5ED218C9F9753BFF139510A5FAF40D96003D24AF6A92DF0CD9649CBFC1D4E7EB
5CA9396FE28DE5170BC6EC1953E7F33F39F61C5CBDF96A55E7B51E665DAACAC6
2AB8D7FD17D8056FAE59798DEF59575DCFFF6CCDD98AA66B9B2A0C6B0D4C5A9F
9A4463D6B8579B6AACE6BB097BD3254DB12D6BDB299DFFF93AED6B04AD0A5258
561BB8D698709AF19A316B9BEB3C53057BD0A2207C9DF275BDCCFF4C3C3051E1
5869C25693AC34615E5EC5E6BFFAF96E5964C184BD13EA6DFE87CF2E1FDEF1B0
1FD38A13C87213C7ABE25EECC7DEE7B73EBEE7A1F535FFC3671C9DD77756B8B4
2C33618D33613E016ECBCF165CBFF27A64D94ECFFC4F7C5E3C2E5C7EA1C25693
2C3161AE82DBB2D082D64B5A233EF7F4CEFF2CCF5C8E468B1B296C8BAB60FDA5
0A6603B7E527B1265B188CB8F48631FF332B71961F5F5559E8C72CE54725EF1D
6858F33F43B60FF163FCA93A5EB30CDAD6F0E67F0A1D85E8B6AE5B8D78CD12B6
360C5647C39CFF49B3A6A1FDD2F627C4CE63A9050D7BFE677BD676345FD4BC1A
F6904521D87AFCCC98FF59707801827E0AF261E7E76F52CEACF99F98BD313EFC
93F69E79F33FEC07FAFDD60F7D37F535F70667D4FC4F8E2D47CAD9F99FB3F33F
67E77FCECEFF9C9DFFF92FE77FAC4EFC91E2C0C60342E21DF233F735DCF91F27
D6EC7362F47C076E7BDD86D6230BD17284152D8617A0C5B07C5C303457480E6E
9E948B97BFCCC7AABD36794D4398FF59B0C589B07F38D0265249EB97ED426C68
55830EE7BF9483E611D90819721C37BD9A856F37594FDBFC4FF251271E9EEDC2
85A3848C36FE8E72A20DC5D0A3D5489BD4A165551D866421E4C5E3683AF828EE
9F9A85E40C7BBDCEFFACDDEF4287575DB828AA4888DB2445862E860E917E1DE8
870B86E509FCB9860FB2D06CF031341D9489D0919958B1DB5A2FF33F71BB5DB8
34BA086D05DEB6633C6827A558FEE5F7B6263DDA8CD27ED05CA20FF20C1EF97D
D06460062E18928E5FB65B4FE9FCCFF6832EB41F2FB08F71A3DD58817B6C312E
1E57E2137EA7749D528CE9CB4B3163B957FC2DC1B4B862DC1E6BF7F1E8FCA1D5
7DD064403A5A45A4637342E12999FFC92E70E2B6375C9227D2EEC41CED456874
A94FF8FDA6582F8ED92AABBDA3385658814EAFDA8C38C8F3C541B317895FF9A0
71FF34741A978EEC7C479DCFFF4CFCC1898B466BDBD3EE0AFB25E3CB70C98472
29574F2AC3BEA30AFBEC356578626E091EFFC88359ABBC72DFBF32C479515613
87B225879A191C6A2C7C70DE0BA918332FAB4EE77F986B2E1EA3F12BDEDCFC86
17335656E0DDD59578778D922D8795ADBFDB5121CF91B160C4F3FC2D4A87CD87
4A316DA91B537F2D12E2C29BBF3871D5D82C341D98A9F0F74F45C8C023483272
525DCCFFBCF283436230E39FBEA2BCC677599B0E55E2B2095E855F9CCB6B786D
DBD176AC4F2AABF19A3717397C3140FC8D9E3F82A8AF8ED7CDFC8FDD898E13ED
32AFD396B429B1BDB34AE17F7369259EF9A792273FADC095AF95C938E8F3BE17
B14B4A3179B1173DDF75CB3C141A65C3C3B39C7864B61D7D67D930E947A7FA27
60169BF1A749FC978C3822EF5DDBF99F4D071CB29E329F3327EAF89DB952D9F2
F18FCB7DFC672C5C1B538AB549D5E377F581325C1E2D6AC170ABAF96F57EC75A
0D7F63037FF07329D8B0CF5AEBF99F7797A91AC45AE4E790DB87FFB1B9650139
4863DF995A81C86F4BF0B2909DA9CA57ABE24BFDF85FAA19FF7926FCD37ECEAE
F5FCCFF0AF542F13E88322CC5C51AAF07F54EACBFF0FBE5FEAC37EC938A38E09
9DDB45397C3ADC37DDEEABC3BD67D6843FD5877FF0DCA3B59EFF79FC7D553B95
0E765953A9C30C037FBF0F4B7C35387689F249E4775E530D76CAEB46CE77CB63
7F5B58E4CB9F66FC4D4CF9A7D1F38725FE07A765D47AFEA7CFCC02D9BB281D14
8FE807D6566E8F7E50ECEB7F5E5FAC74226F34F63691AA1F1D39BF48FD733B3F
15A93E2E82F8D5BF73F70F899FF93F4DE67F85FF10BABF915EEBF99F7EB354CD
6F69D641D8937D01B747E6787C3D68AF77DD067FCA717194EADF88BDEDA842B1
4FF9E6DE6985BE1EAED78C2AF8FB13FF1189FFDC670FA1CFD4F45ACFFF0CFBA2
40DA8B3AF8FD5088E9CB8AE5BDFBBEEFF6F5FE14E619AD033943D1D857ECF706
F4D03EFCBFD8FDDC7941719FF85FF4F3FFA4E77F662EB5CAFB55D5E1ED388FBC
37D700ADA54F945C116D9779A6EA46EC9745E505AC617A4DCF37E1377347E07F
E620DE5E9455EBF99F8DF176793FDE977D237307F59866E07F48D4A356F4C988
429F50BF1ED31D3256C9F77BA7D9AAACBF54DFD6737A9EFC8DB77EB1A9BC49DB
1BDC39E799646CDC6FADFDFC8FC3892BC664CB7E5DEB412CEC61B84DF8A1083D
67DAA5F432FEFA64860D0F4829C403D3ADB8FF6DA1D7DB05E8312D1FF74DCDC3
B86F6D0AFF225BA0ED9F3D88D0A187E4BDEB62FE67C2B7F9B24FA4DDB40E6F2D
76D5D9FC4FECC242C3F6293EDB8F9B77ACCEE67F92331D68F5D231E973F2967A
7488CE953AB087FCB7B2C485294B9C4A163B65AE67BE21E7C91B62BF3C32C397
3369FBA62F248B35B1AD4EE77FC67F9327D7195C2F493D0C7F489F48C9364996
EF98ECEFC5F96A9D7554D559DDEB9BF2A5E60D6D3FF6AB63753FFF23D65F9D27
A8B59ED2C3AF4B33EA524534669E67C6DD6460BACA352257066257BCE9187518
B9058E5332FFB33D49F4421119068E0C43974C039FD067D051DF678D3910B7EA
2F759E0FC47E1021FD93B12DB1F094CEFF7CBBA940F45969120BFB2DADCB8944
6236E1963637F2A4D9EEE70A99BF3EB75EE67F262DC85158841097940155C4D8
AF30FB716B9BEB5825F6A0A793F0CAFC63F538FFE3C4A3EF1C957D2E319D2725
B58A68BC0A7320EE43B2BE6AEC0F4E4D83C3E1ACDFF99F7C076E7E25CDC074D8
87D12CEA588A8F2766DCE708DC414F27E2FAB129C8CA739C96F99F036936B41B
7AD88F4D48B0E9B392837ECC3EDC429E4A449B1793109F6A3BADF33F2BFE2840
E3E793FDF8AACAD381982D94271310FC4C02E276E63788F99FD94BB325B6A0A7
924C92E8138D59C90129EF2DC96A58F33F73334C1803B15695411FA637BCF91F
9B13DDFE7EF88498B584FD2D05569BB361CEFF64D9D17E44F209B1F358EA717B
C39EFF49B2A279FFC46AD8435E48C4D644EB9931FFB32957C4AD9FFFFCFCCD86
9C336BFEE7BB633EFC93BE3D7A06CEFF38D16F462AFABE9D6AEE0DCEACF91FD1
C7E718BDFCD9F99FB3F33F67E77FCECEFF9C9DFFF9CFF33FF9F94E242438B16B
970B3B778A75CE01B5AFC1CEFF88FAB473A70B73E61461E850371E7AC88D5EBD
8A70FFFD2EDC7BAF0BDDBA3971D75D0E3CF184036FBEE9C0EFBF3B7D35ED74CF
FFAC5B578471E33C78F2C96281CF83C71EF3E0D1473D78F86137FAF429C2030F
14E1BEFB5CB8E71E27EEBCD3813BEEB0E3D65BED42471B7EF9C571DAE67F3232
5C78E30D0F9E7FBE44CA73CF95E0D9678BF1F4D3D4A358EAD1B7AF1B0F3EE846
CF9E453E3FFCF5AF0EFCE52F76DC728B0D9D3B17E285176C484971D6EBFCCF9E
3D451836AC0403077A3168905F060C281178A847099E7ACAAF83F643F7EE2EC1
2327BA7471E0B6DBECB8E9261BAEBBAE10B7DF6E157E74D4CBFCCFF6ED4578F1
C5120C1EECC59021A578E925BFF03BF7530FFAC3AC43EFDE45E8D1C3CF23B30F
3A76B4A253A7022C5B663FA5F33F09092E444428ECC43B7C7829468E2CF3C9F0
E165227E4BF1DA6BA5F8F9E7722C5C58861F7F2CC3F7DF73BFC7C7A3BBEF76A2
6B57BF0F3A752AC4D5572B1D76EC709C92F99FFC7C17C68E2D963C898828C588
1165888C2C43545439C68C29977F478D2A17D8CB515858FD1D457E7EA5881377
800F6EBFDD8E9B6FB6E1FAEB0BD1A18315975F5E20E2A3003939CE3A9FFFF9E2
0B37FAF72F11DCF10AEE97E2E597CB24EEE8E80A4C985081F1E32BF0EAAB15C8
34FEE9A265CB2A30736619A64D2B157946BD7B4F49A9105C621C381116A67391
9F43575E59804B2FCDC7A44985753AFF939EEE1271592CF10F19E295BC898929
C78A159558B3A6126BD742CA6163FE67EBD64AA92375653C3327AD59A374D8B7
AF1CF3E679F1E5975EFCF39F25983BB75870CA8E6BAFB5E2AAAB0A70D965F942
F270F0A0A3CEE67F3EFBCC8D679E09C41F175751E3BB2CFED747F40BCFE1B9BC
86D73296F7EEADF99A0F3E2816DC57F8FFF4A77C5C7C719EF065619DCCFFD8ED
4EC1798FB4216DA9F9437EC87F5326AE52700B523EFDB412132756883828C3F4
E965F89FFF29C78205E5F8FBDFBD78FC718F9489138B05DF3C2296DCA25EAB77
F8F4818AE102B46FAFF077EA94079BADF6F33F7BF6B8643D657D659D62FC32F7
68FBCF9D5B29B9CF18602C307E1312AACFFFECDE5D21FCA0FA0AD663E6A09123
DD27C4DFA64D2E7EFBCD5EEBF99F050B5C327FD3769A43F4C1AFBF2AFC73E654
04E4208D3D25A552F0BB0C9F7C52263865CC04ED2C0FC8A181F8ADD5F0BFF34E
61ADE77F66CC70C97EAC5F3FE503D6A50103BC58BCB8DCF8AF73CA7DF97FE6CC
721FF68808C57DF614D43B3959E93B7AB4C75787CDF875FC6AFE13FFF0E105B5
9EFF79ED3597AC9DF4016B29E3903A2C5AA4B03247EAFAFBD34F6A1FED5EB506
BFFFBE9AB7F9E4132FC2C355FE1C3142CDD47CF451B12F7F32FFB46B9787D6AD
7385CFF36B3DFF1315E592BD0B7B18B30EACADDC98DF75FFF3C30F0AFFA79F96
49EC8C79F2EE91473C98354BE1FFF8E3125F1F376C98C2FFE1871E59BFAEB842
E5FFB66DF3D0AA55AEB05B7EADE77FA2A39D92AFE42D7B49AD03FB0239BBF096
5762656C4F9EAC301E3A54297943EC8CFD471F75232949F167C408B7B43D7BB8
A1438B8CFCE9C135D7A8FA7BC925F9B8E8A23CB46C992BAECBAFF5FCCF5B6F39
65BD67CED07E606FFFFDF76A46E6F5D7BD322EB430CF7023DFC919DA5D63DFBA
B55CC62D6DCFDE2122C2E5C3AFB91F1A9A870B2FCC458B1639C23F05B59EFFF9
EA2BC555FA9C7EE09A8A39F0BBEF14FEBFFDADC4B0B192E79EF3887563F5D956
62EFDDDBE55BC3FCF9CF7651DF5C460EF348EE98B97FFEF939E6FC73D2F33F3B
7638E5FD785FDA2E3CDC257D317FBEE20AEB117D426E51F899F11E15E591B14A
BE9333D49FBFA17B7FF66D830629FCB3677B64DE0C0DF573272424079B36D96B
3DFFC3756A8F1E76D9AFB3E70D0B734A2CEC6154EC79452DF504C898311E899F
B93232D22DF3E4F0E16EC977DA7CF06097C8AD4EFCE31F2A7FCE9AE59671AB6D
7FC10539C21F39B2F6D7C5FCCFF4E9AA4F2467EFB8C321F9CBDEABAEB69933DD
06EF95ED9B37CFC12BAF14D4D9FCCFE1C34EC1579BF439794B3DFAF4710A7E94
E0F3CF957CF18512FD9D421D3FFBAC44E4D362716EB1AC53CCF58C57729EBC21
F65B6FB5CA9CA979DFB2658EB9FFAC93F99F2953EC729D71E38D4A0FFA833CA6
2EE4168571A23F733F75E5793CFFC61B0BE5F5ACB3CC95AC55E43CF32579C37A
CB9C43DE8F1F5F50E7F33F79798C8342D96711C70D37285DB8FE233EAE65B5F0
BBC26C93E7F17C5EC71ACB7522730D73A519BBE6CD0D37E42237D7794AE67F76
EF7688B59255D64ADA9198F8FC80F8B886D2C2EF1A33CFE3F9DAE6AC51CC93CC
35E48C197BEBD639D8BEDD7E4AE77F162EB44B1C14F68BC4457C14DA97A2F1D2
D6AC4B1AB7B639FB33E649F29D9C21F666CDB2F1CD3785F532FF33658A4DDA90
78888B424E9885FBDAB7579879AEC6AD6DCEFE8679927C6FD2245BACB70AEA6F
FE47D484FEFDAD120F79406CCCDF66E13E1EE339E438EDAD71D3E6CC33B479E3
C6D9A2A7CAABF7F91F3EE3080BCB97BD0AB151685B8AFECE63C44C9E90E37EDC
CAE6E79D972D623C075959CED332FF9390E010FC262E85AFAA102F3942CC9AE3
1A77707096D02F1BF1F18ED33AFFB36A95DD97B7AB0AF1366DAA3093278D1A65
E1DC73B310149425F1C7C5D91AC4FCCF9C3985121BEDAA85DF29C449CCE79C93
058BE5B84FDE7BCFDAA0E67F2222F2855D8F078819AF59060DCA6B78F33F85EC
4B734F88594B58580EACD6063AFF93E610393FFB84D8792C35D5D1B0E77F44FD
6FDE3CAB1AF690902CB106B39F19F33F0B0A658ED1D8F9D9D41B9C19F33F3105
3EFC9326159C79F33FA21FE8D72F4FF406B967EEFC4F8ED3F72EE5ECFCCFD9F9
9F8638FFF3BF3ED4672A4C7A0400000040000000400000009D30000000000000
78DAED7D079854D519F622082845A90A2662624142898825126B420231561450
407A5910040B2A8ADD20044B8C3DB6E44FF4890B48930E5297DE617B05B6EFCE
4E9FDD9D9D99EFFFDE73EEB9F7CCEC2CF8FFD9657761C7E77D76E6DE3B33E7FD
FAF9EE7C484431D48846D412028140FBCACACA1BCACBCBC7B85CAE7718EB18A9
0C1BA3C280CD388673EFF0B5A3F11EBCB701F3BED4E7F3C5BADDEE0DCC298B11
60D04F04AECDE4F7AE2F2B2B9B8CCF6A20BC9B30E79B1C0EC75BBC7E4F346E6E
BB9D3C3939E4494D254F5212791213E5F39327C5B96AE4E1733A9DEFB12C6EAE
AFDC83C1601B5EDF74E88D110CE35C5A4ABE6DDBA8E2F3CFA9F2851728306D1A
05C78EA5E0C891141C3E5CFC0D4C9840954F3E49151F7C40BE1F7F24B7CD1629
037C66267FC7347C577DE11D0A859AB2AFF6E3B51D0AE35C5444BE5DBBA872DE
3CA2214388FEF847A23FFC81E8F7BF27FADDEF88EEBC93E8F6DB897EFB5BA25B
6E21BA99557BC30D447DFB12FDFAD744B7DD4695CF3E4BBE8D1BC99D97176E43
6EF701C407FEEE6675CD9FED7D18AF29495F9FF7E851AA7CED350A8D1841F4E7
3F13DD7D37D19FFE443470A094C38001E132B8F5564B06FDFA4919F4E943D4B3
27857EF31B0A4C9A44DEFDFB23659082EFAE43BDB7E2EF9FAAC735CF8913E47F
FF7DA2A14389EEBF5FE2BEFB24EEBD97E89E7BA42C060DB2E470D75D4477DC61
C9E0A69BA41D5C779D94C1AF7E4574EDB544BD7B93FFB9E7C893911116271163
B1963AD0FB54236F499D1F3B4681575F257AF041A2C183C381630F3C20E51029
03F80364A07C81F54D37DE4874FDF5D20F7AF522EAD183E89A6B88AEBA8A02A3
469177EF5E5D0636C8E00CEABD197FDF50A577B7C341BEDDBB89785DF4D04344
0F3F2CFD1D36A080D73807592839C02FE013CA0E942FF4EF2F65001B800C0C3F
A0EEDD89AEBE9AE88A2BC431DFBA757ABE087A3C9E47108B6A9B3FE20E7C4FC9
1FDC8353A6487EE03A8C5DF29147881E7DD4025EE338E410290365072A1EE87E
8058106903BFFC2551B76E14625BF1AD5DABDB4132D656DB398EB91FD46DDED4
BBE28D98C7F98C1E7BCC025E739E13E739EFD19B6F122D5840347F3ED15B6F11
FDE52F44B3674B99283F402C841FA8588838001BB8F24AA25FFC82E8673F1376
E165F9EB7981D7D8B6B6F873EE7D5C8F75018EF1A6DE1577F01D3D9A68CC180B
788DE338BF74295159195579F87C44DF7E5BD506541C800F200EC2076003975F
4ED4B52B05F87B3DE9E9A60C5083A00EAB8578779351DB88EF11711E710DFE0E
DD2BEEE03B6E1C11D73302E3C7CBD7132712FDFBDF16DFFC7CA2DC5C22AE0589
F3BBF9F8FBDF653C401C50F910B940F980E2CF3E206CA04B17F2CF9CA9FB4106
AFF5C69AE6CF35ED7C55D721BF0B9DC397E1D3D03D6C1C7A56DC3967D3E4C912
E0FEE187441C2BC5232D8D8873193DF514D18C19125C0B8B07D77DF4D24B562E
503511E73FE1038801F001C5FFD24B454CD4724290D73AAFA6F732AA9E771716
CA3C87DC0EFE9003621C74FFC413441F7F4CF4D967445CEBD2175F48FCF39F96
CDA7A410CD9A256506D9C186E0F79011E48A07AE455C78F1451917B80EA4679E
9172825D701E1479E0E73F17FAA7CE9DA992E38B56277A79CD97D4A0DF4F36E3
3DD7B421C4B268FC972D230A85A8DA87D74B04D9E15ABC47D990CA05D3D975DD
EEEADF1F0C127DF491E48F1868C400F00F716CF46AF980D73CB1A6F6EFD887AA
CFAD44CCC65AB1E648FE7BF6C875969713151484836314BDF79E8C0F91FC214B
950BA16FE495E3C725B2B325203B3C56AF963140E77F09ABBA4307AA8C8DD573
C13ACE87ED6A22DFABB8877D9C5833EA37F087EDEAFE8F3A088F8404A237DE90
790EB90D7F9F7F5EC604F0E77845DF7C43C4FB3CE2FD0D7DFDB5CC8BE08F3D02
3E4FC949E5CD9D3B4FCB1FC7B57D6306AFFDFAFF957F7979F92855EBF9B66F97
B50AEA36D4F3A86354EEC73A15FF7DFBA43FABF807DE888953A712AD59133DFF
41BF8B174BB9A21EE6FD9FF0755507AD5F7F6AFE1D3B125D7C31F9F8BCDA1B60
EDFF2B7FA367253EB302B10C7B58E80875BCF20165031C1BC48363B1C803C87D
2A0F420EC8FDF0613C2A2A88323389783F239E2BFFFED7BFA48CFF5FF943FFCC
BF82ED4ECB850B6A80FF3AD5B741EF42EC57B03EF80064001B507140D928E240
640D84BC00BD83E38103521EB01DBC1FE721B34040DAC12BAF583590DA0B71BD
FF53F857B21EE0A706FF3535C05FD4FAE859A16F23EA74D427F0551507C00175
D08E1D728DF083C81A58F9066219F23EB8ABDC0739421EB0053C1013545F241A
7F15FF91FF22F807D8363DFC1D6A4F5003FCC51E173D3AF4AC447D0A19C00620
03950B2083F878B946F841E41E48E5B5458B2CEE88FB6A3F0C9F424CC4037592
AAFF54FD13C93F22FF53FBF644175D4441969B87E3AFC1BFA406F85708FE8989
A24F27F62790016C40C5422503C51F7610B907F6FBE5B92FBFB4B82386AA5E00
E20A72BB8A0DFA1E10F52FE77693BF5EFF45F2677BF11C3CA8F897D7007FBFE0
CF320D428FB04BC800315AC502E50BDBB6C935420E917D10D4FA786CD820F51F
D907C15FE406E523917D10C57FD52A6BFF73D965B2FEEDD489A81DA7FAB66D29
C8F6A2F1AFA801FE76C19FEB56A17FE805B1093D2BC840D901D6BF75AB5C23F2
A4EA7BA93E18D68D475191AC0522FB60880938A77C24B20FA6F357BE0FFE5AEE
13FC797D1EAE9F0CFEF61AE09F2CF89F3C297AD4C227950C942FA898B8658B5C
23EC00FCE0170A889DA8E7F0F078A4AD83336AA10F3EB0E2037222F692AAFFA3
FA1FCA3656AE94BEAFDBBE11FBA8756B0AB03C3DFC3D06FFA41ACB7F9C532AB1
56AC4BC940F98292C1E6CD728DB003C433003A56711275A08A03C875A827B1DF
C373E5F7B00D7C36B843F7D8F761EFAFF387EF43F7E00FDB87EFB3EEC1BF92E3
8E96FFD6FEAFFCB98E5EA0EA8972E80CB1183109F6091F459C56B6B069935C23
E480D8009BD08163D823E27C71B1940500BB47CE837DC1E755CC53BD3FF43D10
F7F0F8E187F0BC07DB377C9F2EBC90CA59C65AFD33BF06EADF9166FD8B7A1DF6
0819C00EB056C840D902CEE30139C02600C40805750CBE815A18BA461F00F531
EC4771573D2FD5F340DF4BE7AFF6FD2AEE1BB60FFE5AFD5BC96B1F5E03FB9FEB
B197109FC93560087AC6DAA01FD828E4005B804F40872AFFC387552F50411DC3
5E41EF8B223FA27E52BD51951B558F187EA462CB8A15D175DFAA1585D82F5C56
4F389DD7DEB706F85F843AD2DCFF4267B049C800B600194067D01D729B8A6FD8
EF02A8E914D4B148A01FA4836B2D01F44A80642EE3F8BB4DFE2AE721EE71CEA7
366D882EB880FC6C479AEDAFC1DA6BA8FF31D1EC7FB01ED07B16BD28D8A79203
6C163D1FB5BFA98D073EFBDD77AD981FA17B2FD7885AFF637C0DF6BD3BF267BA
451EC8CFA74AF4FB1193E09BB0052507F8F0D34FCBFE167A5600FC5B411D0370
0D80BE16DE835CF8E493321F2246A217849C893881EFC3FE00FB497C9FB27BE8
DEF0FB4AF621ADFFE5E635D7E86F27BC5EEF3C1507BDD8BF41E7E8452236410E
B007250BE42CC843D9860E751CD7E05ABC07EF5571CEB8CF256A3C55E3AB5CA7
7CDEA87585DD33771CD3FB9FBCD6B9B570DF07F7B8D3CDFE37F6C25827F6A24A
0ECA26942C943C74A8E3B846DDDB04F019F82C757F03395ED5B88ABBCAF588F7
E0CE760FFE7EB615ADEF9586B5D6D23DCF58F3FE07D76901ECDBA123E80AEBC6
FA23E5110D38A7748DEB2147C51B9F07DEC87188F32ACF45EA1DDC39E605385F
44DCFF985A1BF73F8C5E682BFE8E7DE6FD2FF801EC18BAC2DA2107250B7052F6
1109750ED7E17AC51B9F037BAF8EBBAE77E60E9BD0EF7F31F6F21A5BD7F2FDCF
BEFC3D89663E58BE9C4288FD5833F4060E00F8805775507CF11EC519B6AE782B
7B57713E42EF217E9F8FF7491AF7849AC8F73FE5F72EEC0743F8FB42C2DF4A4A
A81CF7ACB06E003C007002B768C0399DB3F271E5E74AE7D570A7162DA8FCAF7F
2537D7D006F7D099BAFFADE58317F5DF78F991C3C009BA03C045C9241A145FA5
6B7086BE95AD2BDEC6BE46C4F9962DC573FFC489BADEBD584B1DFCFEA53D7FEF
3FCD78C8F55A00F52B3800E003805B34A8F38A3374AD781B7B793DC643E7D4BC
3905781F85DFCD9931C8EBFD0FAFA5435DFC06C8EFF7B7E47CB3C5F485AC2C0A
621F000EE0024E0A8AA302CEEB7C1567A56F65EBD039F3A666CD28C8B9558BF5
F8CEEDBC860BEAF2F75F15151537B30CCCDF7FF9962C11F7E284ED028A5B24D4
799DB3B27365EBD0F9F9E70BEE21F62D5F5C5CD8EFBF787FD7BF3EFC069065D0
1FBD563307A37F057D2B4E006C19D08F41C7CABE95AE0D3B17BC9B72383BEF3C
71AEEC9B6F749F2FC577D6A7DF7FDAEDF667118BD46FA2FCA8E58D7D595480AB
E2AB73665D9BBC9B3411AFFD5CFFE333D56F611D0EC7EC7AF87BE7E66C9373CC
58C07B11AC5B7002C04F71540057C557E71C1363C23F6102B97372F43CF70A7F
578BFAFA1B60BD57805815C45E07BCA2015C23F8EA888877F0F9F5B5F9FBA61A
B2835FB28E7E34F3D38E1D5206D570AC963B7EDBB57DBBC99D3F73133EBB21FC
0E9EF720D82B3ACCDF47E2BE2FECFDA7F2679FF02D5EACFBBC8B3FF3C686C05D
DB2B3EC8CB2E307BC7EFBC23E3E1E9B8F335E50B16E8365FC49FF570439BFFE0
9AAC25AF7BB6C9233797FCB1B1A7E58FDA16D79AF584CFF7027FD6050D8DBFB6
4FF842DD437495968AFBD322F64572E763A86DB57B177ECE735F37F4F927AE4F
BB31978D663CDCB9336A3C0CF6EA45DEF878BDC6D9CCB2BBE26C980163197451
BFA31032D8B38742D8FB18DCF11C72D17B58FC9E9F9D4D73705CAB0F665EF966
3CC46FE18CBA1FB151E39ECFB5ED4367E32C20E730F44DCAD5EF89CAE7CFA7F2
B973759F2FE778F7C8593C0BD98C397E68CE4E14160AA8BE35EBFE135C7336CF
8372FDDA8E6BB92F2367FCF8D81738772ECCC432CFCB58D7C99ACF27E3D8B934
17CC7CFBB2CE9703787E2ECE46E3BE22D03827DE88C6F9FFC6F9FF7361FEBFD4
554A59F62C3A6A3B4A074A0E08E0398E953A4BCFCAF9FF6257312D2B58462F66
BF48F7A5DC47B725DC467D8FF4A55E877B51AF43BDA8EFA1BE74DBE1DBE8BEA3
F7D18B692FD2F2BCE554E22C69D0F3FF79CE3C5A59B49246648CA00E473B50CC
C11889038CFD8C7D8CBD8C3D8CDD8C9D8C1D8CED8C6D31D47147471A797424AD
C85D4139F69C0635FF1F5F124FF766DC4B9D133A53CC11E673D8C0214D06074E
2F83982D31D4617B07BAE7E03DB4A36047BD9FFF4FB1A7D0B8EC71D42AA115C5
1C8B09C7D1184B16BA1C4E2783CD8C4D31D46A732B1A7F743CA5DA52EBE5FC7F
BC2D9E06660CA4988418894403EA7534394493C12E837FBCC17FAB21831F63A8
C9C6263468DFA0485BA8D3F97FBBCB4E3F14FF401D933B4ABE490692352469F2
5072A84E06BB2364B055FA016C003288D91043ED7F6C4F2B4EAE10DF5DD7F3FF
E07E55CA55929BE29B1205BA1C124E2103DD0FA2D800F8C7AC8FA12BB75E49CB
4F2EAFD3F9FF1DB61DD43EA9BDC51D3C53196906D2B5E7A9F27CBBD47634E8F8
201A7272080D39C138CEC81E4283D20751BB43EDAAFA81160B850D6C3464B08E
63E3C60E149F1F5F27F3FF887583320645E70EDE191AD22D19CCB5CD25CEE455
7EDA8A63730BE65A36B02BC206B644D800F38F591B4383760FA2D492D4333EFF
3F3E7B3C35496862F9BAE20EBE998C2C0DFCBA45660B9A563CCDE49BE64FA3E4
8A6481B48A34F3F8B413D3A8C5FE16561C88376C40F7818DD207C0BFC9EA2634
FEC0F8333AFF8FFC2E725C82E1D3299ADE15F76CC671E32FBFBEBFF07ECA0BC8
7FE76067D94EEA9BD5977A67F6A6DEE9BDA96F5A5FDAE995B393F9FE7C1A9C3E
B8AA0F6C8DF081F5860DACE6DCB8A615ED2AD87546E6FF739DB9744FC63D327E
E9B6CFFC3B6777A6C18583694831FB748985312563C8159236BFAD6C1B5D937D
8D7C4F92150BAF4EBE9AB678E46FFCDD41378DCD1C4B43D2F8FD298C6446D210
1A9C30983AC7779636A0F8AF61AC8AA17B77DD4BB9F6DC5A9FFF474DDB29A153
55FEACFBD74B5FA72055FFFB777BD04EFD72FA495B513941CB05FD52FA913D60
AFFEE7EFFCDFEBD9AF87C78035D2063AADED442B4FACACF5F9FF91192365DE3A
66AC5DD37F9C274EC632D67572657218E2CBB93E2A1868C543C53F313C170E4C
1F48F19E784A2E4BB6E04B26AE36C467C715C585E541C53F66650C8DDA37AA56
E7FF4B5C25D4F1684799B3157FCDFFE3DC92FFBAB275D43B8F7D3B9F5120FF76
CBE9464DB39A0AFE97675F4EB38A67D1978E2FE90BFB17F44CC1337479D2E5E2
739B1E6C4ADD8E76A3DEC7F87D47198719877AD33AFBBAD3F2870DD89CB537FF
BFBC60B9AC550E1B75ACEE03A916FF85DE85516360DBACB6F48EE39DA8F9CF19
74D2DBC56F539BC36DE4FE706FF87E6061F1C2D3F28F5911433F1CFFA1D6E6FF
E764CF91FC0FC5583E9068D980C9DFB3B04A0E6C99D5925EB5BF4A0192B37EBE
908F0E941D10C0733112C8FFBD92FF0AB53CD0B2CA7EE8A7F27FE9E84BB532FF
8FBE0D7A17A24E8D66032C833897C63FA2061A5A3054E8BD92FF5BE959495DD3
BB9ABE7F59F265B4CAB54A9C831D0CC91852A50E8ECA7F5D55FEF7EFBC5FEF23
D5D8FC3FFA53E8DB08DB3C106103C67ECFE4EF5E58A506FECEFD9D3877B0FC20
F5C8EC61ED038CFDE0AF927F4587CA0E896BFE5BFADF2A7BC19FCAFFF6ADB753
962DABC6E7FFD1A343CF4AD4A7BA0D683288736AFC23F63FC5816271EE8D9237
C2F74047AD9EC09B056F8A6B8A2B8BC3F781DB23F86FAC9AFF637E90FCFBFED8
978E161DADF1F9FFFD25FBA9E7E19E322E55230393BF6B61953D705948FE9B27
4F143C11953B3E6B46CE0CF9CF1FF1B561F5FFA9F8AF0EE7DF6B432F3A5070A0
C6E7FF05FF433DA55D5623833887C1DFB9B04A1F04753E1E5FD9BFA2E609CDAB
706F71B0057D6DFB5A5C93549654A50F62F22F8CB362DFDA08FECB63A8E7869E
B4BF607F8DCFFF1FB11DA1EB0E5D27ED329A0C0E45F08FE87F7D6CFB589C3BEE
3F4E7764DC51A50F7667EA9D74C27F425CF361C18755FA6055F8AFD3F81BBE0F
FED7FD781D1D293A52E3F3FF887FB71FBE5DAE2B9A0C18717683BF63A1E51706
FAA4F6A184F2045907738D3B2D671ADD9A762BDD9A7A2B4D3F31DDAC7B8FF98E
519FC37DAAF4C0C2F82BDD2BDF57FC9771FCDB723B65DBB26B7CFE1F7515FAF3
625DD164B03F82FF2143BF46EFB7D9E166F470D6C3661C40AECBAFCC17C073E5
F70FA53E444D77350DDFF7F2BE6F615135FC575AB60FFEF7C787E5BF1A9DFF7F
25FD15B92625835DE172882B35F8DB175A3DEE08F44FE94F0B4B17528E3F87CA
43E502781E678BA35B8EDD1216F3CC3DEF668D7F415CD4BC27F82F8DA1D78EBC
566BF3FF2BF256487B5432D8112E03933FF3533651057CBCEDC1B6D43FA93FDD
977A9F40FF84FED4764FDB70EE7ADF6F5304FFB555E33E740FFE2B8FAFACB5F9
7FD4809D7774B664101F6E0BD0211E6B9C6BA8FB91EED4FD68141CD1709871C8
C041C601C67EC63EC65EC61EC66EC6AEEEB4C6B6C6E25F8DEE2F597909D99DB5
3BFF3FFAD8686993DB0CC45B7250FC1D01071DF11DF969F04681A72A1C950E8B
FFEAAA7E1FB32486C6EE1E5BEBF3FFABF35653E7ED9DA55D6E3560D8C3EB274F
DDFFF89FC7FFD1FF487F3D3CE66BBA5F7B626DADCFFFE73A72E981430FC83EDC
66233E1932E8BCBB330D4E1A2CFB550A2911D0CF2569483490C038C6386AE008
E330E3D0101A7C703075DED8399CBBE1F70FC63F4879F63333FFBFAB7017B5DE
DC5AEE4374396C89B0895361AB16DFB75871CEECEF6ED06ADCC85C1F11F35A2F
6F4D7BF2F79CD1F9FFC9C7268BFB7162BDBA1CA2C922125BAAE1FDFFC1BDC992
263465DF94333EFF9F664BA33FEFFBB35CEB0663DDBA2C3645C864B3C6755314
CE91BC558E3F0577C4BC7BB6DD43E9257533FF0F3F68F7633BB9665D0EBA2CAA
83CE59F18ED4F9EA53736FB7A21DEDCEABDBF9FFB8E37174E9A64B2D9DADD7B0
E114581F85B3CE5BE53815EB22B85FBAF2528ACB8CABF3F9FF626731BD95F296
5CB7E2B02E26BA3CD6479C8BE45D9DCE9787738FF93E86E61D9B47C58EFA33FF
3FE9D0246ABEA6B9A5BB353F01AB35ACD2F4ADF3D6B933EFE64B9AD3B8DDE3EA
DDFC7F7249320DD83140F250587D0AE8D745F28ED4B9C11DB86BD35D94589458
2FE7FF336D99D4E3C71E9287C2CA6AA05FB3A21A7D2FB1EC3D66710C755FDD5D
8FF5F572FE7F61D642EABAB6ABC5E974D039EBFAD678035D5774A5EF32BE6B10
F3FFFFCDFC2F5DB0E2028B5375581AC1778965E782F7228996DFB7A46FD21ACE
FCBFC3E5A069FBA751B3A5CD24A7A551B0A41ACE8AF74289A68B9AD2943D53C4
6736A4F97FEC4526EE9968713A151685738E89B33061D704CA296D98F3FF8855
BDD6F4B2F845C3C2E8BC811EAB7A84D5B60D71FE7F47EE0EEAB3A64F156EA743
CFD53D697B6EC39FFF87DF2ECD5A4AE72F3AFF27736FB6A8192DCE5CACFB7C83
9FFF7FE7D83BD4E6FB36A7E58E6B161C3DFBE6FF734B73297677EC69F94FDC3D
515C7B36CEFFE3BEC4C04D03E9BC85E755E18D6303360DD0EF5D9C95F3FF3BF3
76468D87C813F1B9E7C6FCFF9EBC3DD4795967933B9E432EE7D2FCFF7B09EF51
DBEFDB52EBEF5B8BD878AECDFFE33ECDFCA3F369EE91B9BACF9F53F3FF858E42
81C6F9FFC6F9FFC6F9FFC6F9FF4634A271FEBF71FEFFAC9EFF77B8283BDF4509
D94E3A9421718C9FE318CE9D8DF3FF25A52E5A75C0496F2C71D0F08FECF4A7B7
4BE9B6376DF49BD718AF96D0ADAF17D3C0F9C534EC83127A6D918D56EEB38BF7
34E4F9FFFC1217AD3BECA2C95F39E9AA671DD4FE713BB59F6AA776534BA9DD94
52BA788A8D2E8E2DA18B628BE9A2C9C5D4765221B5995848AD27E653EBF1F9D4
6D463E8DFFAC8865514A3945AE0635FFBF3BC545233E71D1B5B39DD4613A639A
93DA4F7348B01CDA3D2EE500195C64C8A0EDE422430605D47A423EB51A9FC7C8
A59F4FCFA5C1EF15D0AE647BBD9FFF4FCB75D113FF76D3E54FBBA9E3F448B858
0E2E298BC70D39B03D483BB045D88194416BC8605C2E5D3836873A4E3E49B15F
1452DA4967BD9CFF87CE877EE4A64E33004F0498FF1300F39FEEB2ECA11A3B68
33097EA0EC80F98FCBA10BC69EA40BC79CA0FB16E4D1CE247BFD99FF77483FEF
FE82E4DA7986973ACF047C06BCE25827E0098F9403DB83E91761765062D84091
B08136130AA8D504CB062E1873925A8E3E4E5DA61CE7B86013DF5DD7F3FF6B0F
B9E9C6D73D829FC9FB491F5DF2649901F95AC90232923270091944B50396419B
8858A06CA025DB0064D0E39913F4C35E5B9DCEFFEF4975D335B315779FE02A38
3F554E9746401C9F594657CFF6D1B04FCB69FC5765340EF8D24763BFF4D2C3EC
3BBF781A7660D800FCC0CC07BA0D48FE2D4665B11D64D38E447B9DCCFF23D60D
FB48FA3AF4AAB80BBE4F5754C125860CDEDF50499EF2AABF6D75F3B177D79499
3650351F587140F2CFA6168F65D13DF37338263ACEF8FCFF8CFFB8D9AFDD86BF
5BDCBB30D72E4FFBA9EB3395025D04FCD4ED393FBDF07DC0E49B591CA2B44220
C8CFADDF0C3FFB1DCB72BA2D2C0E98F9906D00FCA50D48FE2D1ECBA4C99FE59E
D1F97FC4FA6ECF58BA17FE6EE81DDCC1B9EBAC80864A1AFB75800A9D92E3BEEC
10FD7E4139DD31BF8C6E9FE7A5BBE67B686F96944D8133448F7DE692B96092CC
05220E9A3E7052F3816C6ACEFC2F1E9F49BB934BCFC8FC7F5EB18B86736D8318
2EF95BBAEFFD8A9F26FC2B4093FF1DA4C9FF099998F95D50D8371EBB3243F4DB
B72A644C147941E6831B5F77D38E342903F8C7D47FB969F43F5C34EA33278DFA
D4418F7D6AE7DAD94657CCCC33F380E2DF7C64063DB8E024E516396B7DFE7FED
21CE755CD745E3FFEEFA000543D5FF7EDDE1231AF89EDF88875A3E10F591937E
37DFCDD754FF01F8EC79CB5D51F9778DCDA455FB4A6A7DFE7FF2D7B2A6B5F8CB
D8074ECB0F054DFDA51785636F36D1F02F02321E1AB110B253FC452EE4BA1079
60774680520BC2E12E9372F97EAF4FF21F739C5A9AFC33E9FC11E934F6E39CDA
9DFFB7BBE8EAE71CA26E91FC8DF817C17F4B2AFBF7BB41FAFD7B210341BA696E
807EFE6CA5E07FC31B15F4DAF24AFA665780BED95949AF2CADA05FBFEC16FC3B
4DB7539F171DD4FF0DC6EBA5740BF688AF95D0C6848AE8FC390F2AFE5D6233C8
6677D5DAFC3FF6B0621FC7350BEA17D4319DB4F8AFF8AF381C12314F8F818889
D7BCE8A74FB758B1202CFF95117DB8B19C2E7FCA2EF6871799B5A0CC814BF695
45E5DF42E3DF6C781AD74425B536FFFFE65287D8C3823FF632A8E751D30A1F98
19CE1F39AF8B9103812B9EF7D33BEB821430525D999FE8C8C9201D6694A9FF25
309F9BF703C792277E3AFFE611FC5FFE6F5EEDCCFF73AD3DFC6359A7C206E003
1D4C1B9032587E2860F00F56A97F26FF9F4AA17770DC9018A43E2FFBCC5AB8F7
4B6E5A9F5029CEB9D8CFC77CEEAE520757CB5FF37FF07F70C109BD8F5463F3FF
E84FA16F03DBC4FE1DBEAAE280F283E507257FD84164FDBBCCB08D63B921BAF5
AD326D3F24F7C5FDDF74D3B11C79CDE27D1555F27F15FEA375FE1926FF3B5FCD
A6EC3C678DCFFFA35F879E15EA536503C20F442E9076B04CE32FF740D63EC8E6
9136FEEE5A7FD85ED0DC0FB33CDF592339DADCA12AF55F38FF1355F25F3383FF
0DCF67D2B14C7B8DCFFF1FCC70D26F5E957B542903BBE607D20E961DAC34F807
AAEC83CBE529AE812BB47DB0C51D36357BA1CF8C0DB2FED7F8EF95FC17EFA9CA
FF7CC13F8DF9A7529F59997420CD5EE3F3FF07D39D74F32B46BFCE94816607CC
43F1C7DFC83E08EA7C3CBEDDC5F1F0A970BDE3332E7DC24EDFEE94392E253F60
7037F67FCCFFFB08FE2D461BB11FFC4718FC1F4DA5DECF64D0FEB4D21A9FFF3F
96E5A4DFBE2E7B5490017A56BA1D80C7B20316FFC8FED757DB6490CF290DD17D
EF7BABF4C1EEFD9B8BCF4919FD635399D50F35FA603A7F7DFFA7FB7E53E6DFEF
B94C3A6AD97F8DCDFF1FE7F83768BECC47B0CD483B80FD2E3D2039420ECA2F14
EE78CB43C9F941B30E7E2EAE8CEE7ED74D77BFE3E2E73EB3EE4DCC0BD02D5CF7
80BBB47DD907B5F87BCDFDBFB27DC93F55F0BFEBD52C8ED5CE9A9FFFE7BA6AD8
07C5625D90816507860C382F58FCFD866E2D747EC24163BEF09A71A0924551C8
7B3DA052D5047C6E24EF75DAC51656D9F722EE99FCF5BA07FC87A75353F07F24
851E58904DA5560D58A3F3FF6F7E5F22FC116B33ED60B2B283125ABA5FFA2FE4
206CC2B00BD5EF0606BEED12E7F3EC41AA60BE009E2FD9574E03E69586F5BDCC
BECFB89C30FE2DA2E43DE8FE3CE6FF7A5C5EADCDFFAFDA6F17F726B036D19F84
0C261932602C51FCF9AFB40969173A70FCF2274BE98F7F75D0231FBB184EFAC3
7C3B5D36837D6BA2C65DD8BDECFBA1EFB558E7FF589616F715FF14E69F4CABAC
FAB7E6E7FFB9AEBA62A6B449B146C840C9816D61C97E59D86F48F0D38DAFD84F
8152BA0178B994FABD6C9378A944E0FA39C5D4774E11F57DB190AE035E28A0EB
66E7D3BAA396FF87FBBDA5FB2E9352F59E70ADCCFF4FFCBC48C4A3D6860C509B
0919B0EE60C3E2DF32E358969013382D8E0954568F93805FC069C4C7C5BB3D96
DF9B714FEA7EDC47276A7DFE7FDD413B5D312357F825E480FEBCB4857C9AFF83
E794FD8FFF79FE9F3FFB2F4BED11762FE31E74BF767F49ADCFFFA3FF35ECFD02
E193F04D29873C610FBF7CAA50EC91467D7A7A3CA6E393521A097C6C3331E2A3
1281E11F16338A0486BE5F483F7B3C5BEADDA87794EE0773DCCFB3FA5FB53AFF
BF3BC5419D624FCA7B526172C835EE5BE689F8D55AD94618F2CCD8A6EE71AA18
2FFAFBAABF89FD9DAA738C5C6FC67BE6DE54B3FBB6A353688FD6FF3C13F3FFD3
BE2AE4F59E107BB12A72D0313E2F02E1E7156FD9D7B57ABBD5730FB7FBA68F26
D3D47F9C3CE3F3FFE9394E7AE0ED3CB9D63127C4BA85EE842C4E4A5EA78271AD
D27798CE8DDA5EE5B968DC11EFA1FB7BE765F35A1C7532FFBF3B85F72D538E9B
FA021417A9CB53E184C55BBD5FE83B5BE3ADC579B1BFB3F40EEE1DC6A5E87DFF
3A99FF5FB483EB99E9B21EC7DA715F469787D06924B4F352D786BE95ADABFCAE
E2BCE9EF96DEBB4E4EA5B8ED45753FFF5FEAA2BF2E2D126B96F7A3B20C3E122D
AB81754D5698BE9B1BBCA17355DFA838AFF47EDEB0249AF77D9EF8EEFA32FF3F
E50B8EEB63324DFD8541E956D36F1814E7083F577B3A15E78116239268FCC7C7
EBDDFC7FCA09070D9C7B42F422C0A3B989CC28C8D0F46CE91AFB38C93BCDE4AD
EBBC09E377AF665052B6BD7ECEFFE739A8F73359325609A45BDC22A0FC5AC535
A1EB307D87F36E323491AE9D91AAC7FA7A39FFBF28BE982E9F2AEB72A5CBEA91
6AF876AA95CF4DDEE1DCBB4E4EA6EFB6153588F9FFEFB61553EBD186FD9E06E7
69BE0D34519C87250ADE314313A8E58844FA667361C399FF77BA68FA9739D47C
447218B72A1816A967A96BC53B664802351D964053FE715C7C66839AFFE7BDC8
A44F4F483D0A2485EB5641E76B708E1972CCC4048EF53985CE8639FFCFB1AAD7
5369CC2B51A089F157604842141C0B438F992961B56D839CFF4FB4519FA753AB
703B1D7A3E994ADB8FD91AFEFC3FFBEDD29D4574FE23093F997B33BE76717CA1
EEF30D7FFE7F591EB51995785AEEB866C192DCB36FFE9F63582CC7C3D3F19FF8
C971FD774C67D7FCBFC34503DFC8A0F38656F5051C1BF05A867EEFFEEC9CFF47
3C7CA66A3CECF5542AC527D8CE8DF9FFE452EA3C21C9E48EE790CB3935FFBF3C
8FDA72AC6BFD58A2888DE7DCFC3FFBF9FCEF7369EEA25CDDE7CFADF9FF12A740
E3FC7FE3FC7FE3FC7FE3FC7F231AD138FFDF38FF7F36CFFFDBED2ECAC971515A
9A9B9293DD949484E72E3A79529E3B1BE7FF4B4B5DB463879BFEF94F0FBDFAAA
879E7EDA43B1B16E1A3FDE4D63C7BAF8AF8BA64C71D1B3CFBAE8E38F5DB479B3
8B6CB6863DFF5F54E4A63D7BDCF4DE7B5E1A35CA470F3CE0A3FBEFF7D1BDF77A
E9CF7FF6D29FFEE4A181033D3460809BEEBACB4D77DCE1A25B6F75D12DB738E9
A69B1CF4BBDF39E885179CB469938BF2F31BD6FC7F42829BE6CDF3D184096534
7468190D19E2A3871EF2D1E0C1520EF7DDE7A57BEEF1D2DD777BE88F7F0C97C1
6F7FEBA4DFFCC64937DCE0A0BE7D1D74DB6D769A3AD541FBF7BBEAFDFCFFC993
6EFAF4531FDB74398D1821317C78393DFA68393DF28894C5C30F979972802DDC
7DB797060DB26470FBED90818B6EBE59CAE0BAEBECD4BBB79DFAF52B657BB053
4686AB5ECEFF27264A9D3FF658B9C0A85116468EB464316C989443A40C941DDC
79A78B756EF9C1F5D73BE8D7BFB653CF9EA5D4A347298D1B67A77DFB5CF566FE
DFE170F37A3C1CBFC0B582752F316E5C05C735F917AF478FAE10E72107D80364
F0D043659A0C643CF8FDEF2103B78805BA1FC0067EF5AB52BAFA6A1BCBC446EB
D73BF57C5167F3FF7BF7229E97D1983192EB84097E9A38D14F932659C031C842
CA41DAC3A38F86DB01E20162E21FFE60F941FFFED206FAF5B36CA07B771B5D79
A58D63858DD6AD73D6E9FC3F6C3E36B65C701F3F5EF29E3CD9CFB650C931CB02
5EE338CE4F9BE6A7B7DFAEA4BFFFBD92FEF6373FBDFB6E05BFAEE0BC08DFF09A
3941E503D8C08D375A71E0DA6BA50DFCE217252C9312CE31CE3A99FF47AC83BF
C3A6A177708B8DF5D3E38F5732C74A9A3EBD929E7822C090AF2187D8D84A5AB5
2A486565557FDBEAF311C5C5F90D1BF0081BD0E340DFBE76EAD347FAC035D7D8
E897BF2CA1CB2F2F617FB285C5C43335FF8F388F38079B867D43BFE03E7D7A80
66CE0CD0534F054DC8D701E667CDF9171612E7F510E5E585A8A0C0FAD1F0279F
54703CF070FEB7F2217241B80F94B20F9450B76E25F4B39F15F367DBCEE8FC3F
F23B729CE20FDDC3C6A167707DFAE900CD9A15E47A2E28FE3EF34C90BEFC3248
4E63FE3F2383E8B5D72A69CE1C3FCD9E5D41CF3F5F4129295206A5A5217AE38D
723317DC7AAB550FC0077AF52A153E70D55536BAE20AC9FFCA2B8B390E39CFC8
FC3FEA3AD83DE238721B6C1F310EF6FDC20B01FAFAEB20FDFBDF21FAE69B107D
FB2D09C4C585A8DC98F94D4F27F6F54A6133909D8C85E5EC27E52C57691FF08F
B7DF2EE7EBCAE8E597CBE8C5177D2C232FCBD5CB3271883CA862C0CF7F5E4C5D
BA14F3E794B02DB96A7DFE7FCF1E8FA8EB147FC475C57FCD9A10854EF1FB77F8
F8820501712DDE03D9E13350172017CC9A554E1ECF297EFFCEE2F9F4D332330F
2206807FD7AEC52C9362CE078E5A9FFF473D8FB562CD91FA3F70409287AE8B8B
C3919D4DF4D967411113157FC80E9F0159AA5C883C909818E4F81AA413278274
FCB884D72B65B076AD3F22064AFE9D3B17F1E7DA6A75FE1FFBB8D1A37DA29E87
CDC27655FC83FF2BFEA9A9C4720AD1FBEF93C0DFFE16A2BFFC45C601E4853973
2A69D1A2206DDB16A42D5B82EC23C80FE5662D30668C8FE3A9973FD7CBCF3D2C
230FEDDE1D30F92306823F6220F85F7699E4DFBD7BB1BE6FACF1F97FEC61B13E
EC6550CF436FA8EBA047C4FFFDFB25FF43874870D5632062E2F3CF07E8C71F43
D5E6BF65CB2AB906F019FB22B7C801AA0EDAB8B1F2B4FC3B7428641F74D4DAFC
FFBFFEE5117B58E8C9F2810A330758FC435572E0AC59015ABD3A247C180FBF1F
3E1112A8A8B0FCFBDB6FFDFC1D5E510756C75FD97F34FE6FBE595A2BF3FFA8B5
D1BB40AD0E1BC03E0E7B196903320EECDD2BC9C10F900B51FBC0DF61F35F7D25
EB1E703C7224C432F19BFB01EC1D0E1C088A73F0F3B973CBCD3A18355075FC23
FDBF7DFB42F6CB12E1A7353DFF8F9E15FA36E85D60FFAE6C40C501F881E20F3B
88AC81956D9C381112791F3533EA87E1C3E53E60C68C72CACA92D76CDE5C69EE
87554F2492BF8AFF91FC070D2A669B72D5F8FC7F7ABA5BF4AC509F62AF021BB0
64502664B07BB7E4BF6F5F50C4447D0FA4F2DAF2E5018DBBDC0FC3961E7CD027
EA5F313FE70C897DA0DE0FD9B041F25FB3C62FF23FEA1F3DFF77EA24F9DF765B
11D711CE1A9FFF4F4A72B38DBBC5FE04F149F901F6B0CA0E14FF3D7B8255F6C0
95C6DCEF7FFE1330B923860E1922F31E7CFEF3CF6520403CD0F780A87F75FE91
F59FE45F48EDDA15F2B54574F0A0B3C6E7FF13135DAC3797B04BF42AD0B35032
5076B073A7E40F39C01EF41E086A7DF16FE370BEC36BE85D71C7673CF8A0D7E4
88BC2F6B5F69FBD8FFAD5FEF37F857187BE012C11FB1EFD24B8BA863C742BAF8
E242DE2B85F1AFB1F9FFD45417EBD125F40219A0671529831D3B648EDEB52B28
EC013A567DB0F5EBE5B99212D4FE1555FA60B36797719D2465B474A9DFE88339
CD3E98E2BF7A758519FBB0FF81EF5F72898CFDE0DFBF7F111D3BE6ACF1F97FC4
BFA9535DC227950CA41DC8788098181F2F39EED8111435126C4261D6AC0AAEE9
243FC482CF3FC7DEA79C9E7BAE8C6BDA0A333E6465C177BC62DFA3748F1ED8BA
75167F65FBD2F78BCCD8D7B66D01FB6731D78BAE1A9FFF474E99354BDAA42E03
C403C444E485EDDB257FC801F10CFA55803C162CA810795FFC5B3F01B9D70302
C63F8B07BFC77E07B6AFFC1EFB5EECFD75FEE8FFA8BD2F6C1FB10FBE0FFE4387
16EBF9AF46E7FF3FFB4CEA047609FBC43A11A791AB2187AD5B2511C801360D9B
D08163B3669589F3252521210B0076BF6913F2A4CFCCF737DFEC10BA577D0FE4
3D3C56ADAA10715FCF7BB0FD8B2E2AA0D6AD0BB8CEB6D5DAFCFF962D2ED18B41
3E428F1A6B45AF52D9C2962D327E6DDB16103601DF408C9090AF71FCA187BC5C
1FFAE8A597CAB81628E35A09E7AD5A47F5BC54EF177D2FC47D3C56AEAC8888FB
96EDB76A55C0F6E1A8B5F97FD480030638443C826DC216E00FB005F804EA163C
F6EE0D70ACF472EE0B078E01F0EF3163BC5C3379C5DE66E4480FC74A0FC74C0F
E70537C74637FB8C8B63A38B6DC6C9BEE564995AFCD59E578F7BD07DB76E057A
4FB856E6FFE7CC718A7E3464A06C013A831C60C32ABE6566064F8B8C0C0BE9E9
16D2D28000E71C89949400EF6765ECFCE1878A2A7E0FDBBFF0C202AEB38A6B7D
FE7FEB5627DBBC5DF4A2609FBA1CBEFAAADCDCDFD4CAFC7F107B699FB07BDDEF
DBB429609F28E01CE9A8F5F9FF820217EF67E4FD08F8266C01311AFE3A68908B
F399975E78C12B7A56C09C3916D43100D7CC9EED157D2DBCE7D967111BBD628F
01CC9CE9E13D819BBFCBCDF1C12D72EFA4492E8E8525C2EE51EF40F7E00EBF47
DCD7FA5FB53AFF7FF0A08BF55E2AF6E14A0EB007C46AC80236017900B00D1DEA
38AE51B90DEF9571AED4BCCF851A07791E758E8A77CAE775BB07F74E9D0AC2FA
9F6762FEFFA597EC629DD88B2939204FE9B2807F00E009A8D73A67BC07EFC567
E0B350DBEBDC91E755BC533E8F78AFEC1EFCA74F2F39E3F3FF59592EDEE3D9C5
3E14F538D6AD64811E357409809F0E70C5715CA338438ED75E6BABA273DCDF88
D43BB8AB787FE185F95C671573CC74D6C9FC3FFCA06F5F793F0E72C0FA716F02
B250B6A164A2B82A48CEF27E9EE28DCF416DA36A5B95E323B943EFE0DEA54B41
D8FDAFBA98FF5FB102FE2CD70DBD615F062E9087924924701CD748CE25A6BE61
EBA8EB94CE61EF88F32AD6A91A0FDC91EB172DB2D7F9FC7F49898B3EFCD02EF4
057B05077051F250325150C7949E156FA56FF0D6758E1CA7B82BBDB76C994F7F
FDAB8DEBE6FA33FF3F6B56297391BD48F0001F2993E8507C71BDE45C64EA3B1A
6FC4B90B2EC8E7E7F991754EBD98FFC76FD81E7ED8263800D0217801E0A8A08E
E13C806BA16B9DB7F2F348EE2D5AE4F35EAB8892929CF572FE1F7DC75B6E2916
FE0A2E007845833C5F28AE559C95BEB197917E6EF13EFFFC3C8E9B051CEB5DF5
7AFE7FE952DC9F94F5093801E0A7A08E29BED03300CE8AB7D237FCBC79F37C6A
D62C8FFD259FE2E2EC0D62FE7FD12207EB58E629C52B12380728BE886B8AB3D2
37789F775E1E1FCFA36FBE296D38F3FF0E97F84D0278C286C14F078EE97C1567
E85AE7DDA4897C3E654AB1F8CC0635FF9F87DFB49630A73CC10BFC1447792CCF
E40A346DAA38E7524C8C8509138A44EFB141CEFF735DDAA74F81E0160970553A
8E89C90BE3ACD0A34741586DDB20E7FF7738840CA2F13B157AF62CA0EDDB1D0D
7FFEDF819C60675BFFE9DC9B35CBA5C58B4B759F6FF8F3FFEFD838DEE79D963B
AE59B0C076F6CDFFE7BA2836B6F8B4FC274E2C16D79E95F3FFA52E1A38B050C4
BD48DE38366040917EEFE2EC9CFFDF193D1EF6EA5540F1F18E7363FE7F0FEAC3
7C933B9E432EE7D4FCFF7BA80FF3B8FECD13B1F19C9BFFB7BB68FE7C1BCD9D1B
F67B9D736BFEBF50A271FEBF71FEBF71FEBF71FEBF2EF07F018F069DDA
}
end
end

View File

@ -0,0 +1,113 @@
unit Main;
{$mode objfpc}{$H+}
interface
uses
SysUtils, Classes, Math,
Graphics, Forms, Controls, StdCtrls, ExtCtrls,
mvDLEFpc, mvMapViewer, mvPluginCore, mvPlugins, mvGPSObj;
type
{ TMainForm }
TMainForm = class(TForm)
Bevel1: TBevel;
cbGlobalEnabled: TCheckBox;
cbLeftEnabled: TCheckBox;
cbRightEnabled: TCheckBox;
gbDragging: TGroupBox;
POI_Images: TImageList;
MapView_left: TMapView;
MapView_right: TMapView;
PluginManager: TMvPluginManager;
DraggableMarkerPlugin: TDraggableMarkerPlugin;
procedure cbGlobalEnabledChange(Sender: TObject);
procedure cbLeftEnabledChange(Sender: TObject);
procedure cbRightEnabledChange(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
public
end;
var
MainForm: TMainForm;
implementation
{$R *.lfm}
procedure TMainForm.FormCreate(Sender: TObject);
procedure AddTraditionalMarker(AMapView: TMapView; const ALon, ALat: Double;
ACaption: String);
const
IMG_INDEX: Integer = 0;
var
gpsPt: TGpsPointOfInterest;
begin
gpsPt := TGpsPointOfInterest.Create(ALon,ALat);
try
gpsPt.Name := ACaption;
if AMapView = MapView_left then
gpsPt.ImageIndex := -1
else
begin
gpsPt.ImageIndex := IMG_INDEX;
IMG_INDEX := (IMG_INDEX + 1) mod POI_Images.Count;
end;
AMapView.GPSItems.Add(gpsPt, 100);
gpsPt := Nil;
finally
if Assigned(gpsPt) then
gpsPt.Free;
end;
end;
begin
MapView_left.Active := true;
AddTraditionalMarker(MapView_left, 0.0000000, 51.4825766, 'Greenwich');
AddTraditionalMarker(MapView_left, 2.2945500, 48.8582300, 'Tour d´Eiffel, Paris');
AddTraditionalMarker(MapView_left, -79.3884000, 43.6439500, 'CN Tower, Toronto');
AddTraditionalMarker(MapView_left, -157.7739800, 21.2716900, 'Kahala Avenue, Honolulu');
AddTraditionalMarker(MapView_left, 114.1497900, 22.2708100, 'The Peak, Hong Kong');
AddTraditionalMarker(MapView_left, 13.377778, 52.5163890, 'Brandenburger Tor, Berlin');
AddTraditionalMarker(MapView_left, -58.3722400, -34.6084700, 'Pirámide de Mayo, Buenos Aires');
AddTraditionalMarker(MapView_left, 151.2082800, -33.8707000, 'Sydney Tower Skywalk, Sydney');
AddTraditionalMarker(MapView_left, 139.7021800, 35.6787500, 'Meiji Jingu Shrine, Tokyo');
MapView_right.Active := true;
AddTraditionalMarker(MapView_right, 0.0000000, 51.4825766, 'Greenwich');
AddTraditionalMarker(MapView_right, 2.2945500, 48.8582300, 'Tour d´Eiffel, Paris');
AddTraditionalMarker(MapView_right, -79.3884000, 43.6439500, 'CN Tower, Toronto');
AddTraditionalMarker(MapView_right, -157.7739800, 21.2716900, 'Kahala Avenue, Honolulu');
AddTraditionalMarker(MapView_right, 114.1497900, 22.2708100, 'The Peak, Hong Kong');
AddTraditionalMarker(MapView_right, 13.377778, 52.5163890, 'Brandenburger Tor, Berlin');
AddTraditionalMarker(MapView_right, -58.3722400, -34.6084700, 'Pirámide de Mayo, Buenos Aires');
AddTraditionalMarker(MapView_right, 151.2082800, -33.8707000, 'Sydney Tower Skywalk, Sydney');
AddTraditionalMarker(MapView_right, 139.7021800, 35.6787500, 'Meiji Jingu Shrine, Tokyo');
end;
procedure TMainForm.cbGlobalEnabledChange(Sender: TObject);
begin
DraggableMarkerPlugin.Enabled := cbGlobalEnabled.Checked;
cbLeftEnabled.Enabled := cbGlobalEnabled.Checked;
cbRightEnabled.Enabled := cbGlobalEnabled.Checked;
end;
procedure TMainForm.cbLeftEnabledChange(Sender: TObject);
begin
DraggableMarkerPlugin.MapViewEnabled[MapView_left] := cbLeftEnabled.Checked;
end;
procedure TMainForm.cbRightEnabledChange(Sender: TObject);
begin
DraggableMarkerPlugin.MapViewEnabled[MapView_right] := cbRightEnabled.Checked;
end;
end.

View File

@ -1,154 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<CONFIG>
<ProjectOptions>
<Version Value="12"/>
<PathDelim Value="\"/>
<General>
<SessionStorage Value="InProjectDir"/>
<Title Value="project1"/>
<Scaled Value="True"/>
<ResourceType Value="res"/>
<UseXPManifest Value="True"/>
<XPManifest>
<DpiAware Value="True"/>
</XPManifest>
</General>
<BuildModes>
<Item Name="Default" Default="True"/>
<Item Name="Debug">
<CompilerOptions>
<Version Value="11"/>
<PathDelim Value="\"/>
<Target>
<Filename Value="project1"/>
</Target>
<SearchPaths>
<IncludeFiles Value="$(ProjOutDir)"/>
<UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/>
</SearchPaths>
<Parsing>
<SyntaxOptions>
<IncludeAssertionCode Value="True"/>
</SyntaxOptions>
</Parsing>
<CodeGeneration>
<Checks>
<IOChecks Value="True"/>
<RangeChecks Value="True"/>
<OverflowChecks Value="True"/>
<StackChecks Value="True"/>
</Checks>
<VerifyObjMethodCallValidity Value="True"/>
</CodeGeneration>
<Linking>
<Debugging>
<DebugInfoType Value="dsDwarf3"/>
<UseHeaptrc Value="True"/>
<TrashVariables Value="True"/>
<UseExternalDbgSyms Value="True"/>
</Debugging>
<Options>
<Win32>
<GraphicApplication Value="True"/>
</Win32>
</Options>
</Linking>
</CompilerOptions>
</Item>
<Item Name="Release">
<CompilerOptions>
<Version Value="11"/>
<PathDelim Value="\"/>
<Target>
<Filename Value="project1"/>
</Target>
<SearchPaths>
<IncludeFiles Value="$(ProjOutDir)"/>
<UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/>
</SearchPaths>
<CodeGeneration>
<SmartLinkUnit Value="True"/>
<Optimizations>
<OptimizationLevel Value="3"/>
</Optimizations>
</CodeGeneration>
<Linking>
<Debugging>
<GenerateDebugInfo Value="False"/>
<RunWithoutDebug Value="True"/>
</Debugging>
<LinkSmart Value="True"/>
<Options>
<Win32>
<GraphicApplication Value="True"/>
</Win32>
</Options>
</Linking>
</CompilerOptions>
</Item>
</BuildModes>
<PublishOptions>
<Version Value="2"/>
<UseFileFilters Value="True"/>
</PublishOptions>
<RunParams>
<FormatVersion Value="2"/>
</RunParams>
<RequiredPackages>
<Item>
<PackageName Value="lazMapViewerPkg"/>
</Item>
<Item>
<PackageName Value="LCL"/>
</Item>
</RequiredPackages>
<Units>
<Unit>
<Filename Value="project1.lpr"/>
<IsPartOfProject Value="True"/>
</Unit>
<Unit>
<Filename Value="unit1.pas"/>
<IsPartOfProject Value="True"/>
<ComponentName Value="MainForm"/>
<HasResources Value="True"/>
<ResourceBaseClass Value="Form"/>
<UnitName Value="Unit1"/>
</Unit>
</Units>
</ProjectOptions>
<CompilerOptions>
<Version Value="11"/>
<PathDelim Value="\"/>
<Target>
<Filename Value="project1"/>
</Target>
<SearchPaths>
<IncludeFiles Value="$(ProjOutDir)"/>
<UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/>
</SearchPaths>
<Linking>
<Debugging>
<DebugInfoType Value="dsDwarf3"/>
</Debugging>
<Options>
<Win32>
<GraphicApplication Value="True"/>
</Win32>
</Options>
</Linking>
</CompilerOptions>
<Debugging>
<Exceptions>
<Item>
<Name Value="EAbort"/>
</Item>
<Item>
<Name Value="ECodetoolError"/>
</Item>
<Item>
<Name Value="EFOpenError"/>
</Item>
</Exceptions>
</Debugging>
</CONFIG>

View File

@ -1,33 +0,0 @@
object MainForm: TMainForm
Left = 324
Height = 473
Top = 118
Width = 669
Caption = 'Draggable Marker Demo'
ClientHeight = 473
ClientWidth = 669
LCLVersion = '4.99.0.0'
OnCreate = FormCreate
object MapView: TMapView
Left = 0
Height = 473
Top = 0
Width = 669
Align = alClient
DownloadEngine = MapView.BuiltInDLE
DrawingEngine = MapView.BuiltInDE
Layers = <>
Font.Color = clBlack
MapProvider = 'OpenStreetMap Mapnik'
PluginManager = PluginManager
end
object PluginManager: TMvPluginManager
Left = 427
Top = 141
object LegalNoticePlugin: TLegalNoticePlugin
LegalNotice = '[https://www.openstreetmap.org (c) OpenStreetMap and contributors]'
end
object DraggableMarkerPlugin: TDraggableMarkerPlugin
end
end
end

View File

@ -1,72 +0,0 @@
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, Forms, Controls, Graphics, Dialogs,
mvMapViewer, mvPluginCore, mvPlugins,
mvGPSObj;
type
{ TMainForm }
TMainForm = class(TForm)
MapView: TMapView;
PluginManager: TMvPluginManager;
MvPluginManager1DraggableMarkerPlugin1: TDraggableMarkerPlugin;
MvPluginManager1LegalNoticePlugin1: TLegalNoticePlugin;
DraggableMarkerPlugin: TDraggableMarkerPlugin;
LegalNoticePlugin: TLegalNoticePlugin;
procedure FormCreate(Sender: TObject);
private
public
end;
var
MainForm: TMainForm;
implementation
{$R *.lfm}
{ TMainForm }
procedure TMainForm.FormCreate(Sender: TObject);
procedure AddTraditionalMarker(const ALon, ALat : Double; ACaption : String);
var
gpsPt: TGpsPointOfInterest;
begin
gpsPt := TGpsPointOfInterest.Create(ALon,ALat);
try
gpsPt.Name := ACaption;
gpsPt.ImageIndex := 0;
MapView.GPSItems.Add(gpsPt, 100);
gpsPt := Nil;
finally
if Assigned(gpsPt) then
gpsPt.Free;
end;
end;
begin
MapView.Active := true;
AddTraditionalMarker(0.0, 51.4825766,'Greenwich');
AddTraditionalMarker(2.2945500,48.8582300,'Tour d´Eiffel, Paris');
AddTraditionalMarker(-79.3884000,43.6439500,'CN Tower, Toronto');
AddTraditionalMarker(-157.7739800,21.2716900,'Kahala Avenue, Honolulu');
AddTraditionalMarker(114.1497900,22.2708100,'The Peak, Hong Kong');
AddTraditionalMarker(13.377778,52.516389,'Brandenburger Tor, Berlin');
AddTraditionalMarker(-58.3722400,-34.6084700,'Pirámide de Mayo, Buenos Aires');
AddTraditionalMarker(151.2082800,-33.8707000,'Sydney Tower Skywalk, Sydney');
AddTraditionalMarker(139.7021800,35.6787500,'Meiji Jingu Shrine, Tokyo');
end;
end.

View File

@ -769,6 +769,7 @@ var
lDraggableMarkerData : TDraggableMarkerData;
begin
if Handled then Exit;
if not MapViewEnabled[AMapView] then Exit;
if FDragMouseButton <> Button then Exit;
lDraggableMarkerData.FDraggedMarker := GetFirstMarkerAtMousePos(AMapView,X,Y);
if Assigned(lDraggableMarkerData.FDraggedMarker) then
@ -791,6 +792,7 @@ var
cnt : Integer;
begin
cnt := GetMapViewData(AMapView,lDraggableMarkerData,SizeOf(lDraggableMarkerData));
if not MapViewEnabled[AMapView] then Exit;
if (cnt >= SizeOf(lDraggableMarkerData)) and
Assigned(lDraggableMarkerData.FDraggedMarker) then
begin
@ -820,6 +822,7 @@ procedure TDraggableMarkerPlugin.MouseUp(AMapView: TMapView; Button: TMouseButto
var
lpDraggableMarkerData : PDraggableMarkerData;
begin
if not MapViewEnabled[AMapView] then Exit;
if FDragMouseButton <> Button then Exit;
lpDraggableMarkerData := MapViewDataPtr[AMapView];
if Assigned(lpDraggableMarkerData) and Assigned(lpDraggableMarkerData^.FDraggedMarker) then

View File

@ -27,8 +27,9 @@ interface
uses
Classes, SysUtils, Types, fgl, FPImage,
LazFileUtils, GraphType, IntfGraphics, Graphics,
Forms, Controls, ImgList, ExtCtrls, LCLVersion,
LazFileUtils, GraphType,
Controls, Graphics, IntfGraphics,
Forms, ImgList, LCLVersion,
mvTypes, mvGeoMath, mvGPSObj, mvDragObj, mvCache, mvExtraData,
mvEngine, mvMapProvider, mvDownloadEngine, mvDrawingEngine;

View File

@ -120,18 +120,24 @@ type
end;
{ TMvMultiMapsPluginData }
const
DefaultMultiMapsMapViewEnabled = True;
type
TMvMultiMapsPluginData = class(TObject)
private
FMapView : TMapView;
FEnabled : Boolean;
FData : array of Byte;
function GetDataSize : Integer;
public
property Enabled : Boolean read FEnabled write FEnabled;
property DataSize : Integer read GetDataSize;
procedure SetData(const AData; const ADataSize : Integer);
function GetData(out AData; const AMaxDataSize : Integer) : Integer;
function GetDataPtr : Pointer;
property MapView : TMapView read FMapView write FMapView;
constructor Create;
end;
{ TMvMultiMapsPlugin }
@ -143,10 +149,14 @@ type
function GetMapViewDataSize(Value : TMapView) : Integer;
function GetMapViewDataItem(Value : TMapView) : TMvMultiMapsPluginData;
function GetMapViewDataPtr(Value : TMapView) : Pointer;
function GetMapViewEnabled(Value : TMapView) : Boolean;
procedure SetMapViewEnabled(AIndex : TMapView; Value : Boolean);
protected
function CreateMultiMapsPluginData : TMvMultiMapsPluginData;virtual;
property MapDataList : TObjectList read FMapDataList;
public
property MapViewEnabled[AIndex : TMapView] : Boolean read GetMapViewEnabled write SetMapViewEnabled;
property MapViewDataIndex[AIndex : TMapView] : Integer read GetMapViewDataIndex;
property MapViewDataSize[AIndex : TMapView] : Integer read GetMapViewDataSize;
property MapViewDataItem[AIndex : TMapView] : TMvMultiMapsPluginData read GetMapViewDataItem;
@ -158,7 +168,6 @@ type
destructor Destroy;override;
published
property Enabled;
property MapView;
end;
{ TMvMultiMapsDrawPlugin }
@ -619,6 +628,12 @@ begin
Result := @FData[0];
end;
constructor TMvMultiMapsPluginData.Create;
begin
inherited;
FEnabled := DefaultMultiMapsMapViewEnabled;
end;
{ TMvMultiMapsPlugin }
function TMvMultiMapsPlugin.GetMapViewDataIndex(Value: TMapView): Integer;
@ -662,6 +677,30 @@ begin
Result := di.GetDataPtr;
end;
function TMvMultiMapsPlugin.GetMapViewEnabled(Value: TMapView): Boolean;
var
di : TMvMultiMapsPluginData;
begin
Result := DefaultMultiMapsMapViewEnabled;
di := GetMapViewDataItem(Value);
if not Assigned(di) then Exit;
Result := di.Enabled;
end;
procedure TMvMultiMapsPlugin.SetMapViewEnabled(AIndex: TMapView; Value: Boolean);
var
di : TMvMultiMapsPluginData;
begin
di := GetMapViewDataItem(AIndex);
if not Assigned(di) then
begin
di := CreateMultiMapsPluginData;
di.MapView := AIndex;
FMapDataList.Add(di);
end;
di.Enabled := Value;
end;
function TMvMultiMapsPlugin.CreateMultiMapsPluginData: TMvMultiMapsPluginData;
begin
Result := TMvMultiMapsPluginData.Create;