fix error messages in structure compare

This commit is contained in:
Dark Byte 2020-02-09 21:17:18 +01:00
parent 5dd13bb0ce
commit b3027fc812
4 changed files with 681 additions and 33 deletions

View File

@ -27,30 +27,36 @@ type
implementation implementation
uses symbolhandler; uses symbolhandler, newkernelhandler, ProcessHandlerUnit;
function TAddressEdit.getAddress: ptruint; function TAddressEdit.getAddress: ptruint;
var var
a: ptruint; a: ptruint;
b: byte;
br: ptruint;
begin begin
a:=symhandler.getAddressFromName(Text, false, finvalidaddress); a:=symhandler.getAddressFromName(Text, false, finvalidaddress);
if finvalidaddress=false then if finvalidaddress=false then
result:=a begin
result:=a;
finvalidaddress:=not readprocessmemory(processhandle, pointer(a),@b,1,br);
end
else else
result:=0; result:=0;
end;
procedure TAddressEdit.change;
begin
//get the string in the editbox and parse it. On error, indicate with red text
symhandler.getAddressFromName(Text, false, finvalidaddress);
if finvalidaddress then if finvalidaddress then
Font.Color:=invalidColor Font.Color:=invalidColor
else else
Font.Color:=clDefault; Font.Color:=clDefault;
end;
procedure TAddressEdit.change;
begin
//get the string in the editbox and parse it. On error, indicate with red text
getAddress;
inherited change; inherited change;
end; end;

View File

@ -13,7 +13,7 @@ object frmStructureCompare: TfrmStructureCompare
OnDestroy = FormDestroy OnDestroy = FormDestroy
OnShow = FormShow OnShow = FormShow
Position = poScreenCenter Position = poScreenCenter
LCLVersion = '2.0.2.0' LCLVersion = '2.0.6.0'
object Panel2: TPanel object Panel2: TPanel
Left = 0 Left = 0
Height = 412 Height = 412
@ -118,7 +118,7 @@ object frmStructureCompare: TfrmStructureCompare
Left = 0 Left = 0
Height = 19 Height = 19
Top = 38 Top = 38
Width = 89 Width = 88
Caption = 'Hexadecimal' Caption = 'Hexadecimal'
OnChange = cbHexadecimalChange OnChange = cbHexadecimalChange
TabOrder = 1 TabOrder = 1
@ -419,7 +419,7 @@ object frmStructureCompare: TfrmStructureCompare
Left = 0 Left = 0
Height = 15 Height = 15
Top = 0 Top = 0
Width = 53 Width = 52
Caption = 'Max Level' Caption = 'Max Level'
ParentColor = False ParentColor = False
end end
@ -455,13 +455,13 @@ object frmStructureCompare: TfrmStructureCompare
DefaultExt = '.sptr' DefaultExt = '.sptr'
Filter = 'Structure pointer (*.sptr)|*.sptr' Filter = 'Structure pointer (*.sptr)|*.sptr'
Options = [ofOverwritePrompt, ofEnableSizing, ofViewDetail] Options = [ofOverwritePrompt, ofEnableSizing, ofViewDetail]
left = 480 Left = 480
top = 64 Top = 64
end end
object MainMenu1: TMainMenu object MainMenu1: TMainMenu
Images = scImageList Images = scImageList
left = 197 Left = 197
top = 168 Top = 168
object MenuItem1: TMenuItem object MenuItem1: TMenuItem
Caption = 'File' Caption = 'File'
object MenuItem7: TMenuItem object MenuItem7: TMenuItem
@ -495,20 +495,20 @@ object frmStructureCompare: TfrmStructureCompare
object OpenDialog1: TOpenDialog object OpenDialog1: TOpenDialog
DefaultExt = '.sptr' DefaultExt = '.sptr'
Filter = 'Structure pointer (*.sptr)|*.sptr' Filter = 'Structure pointer (*.sptr)|*.sptr'
left = 552 Left = 552
top = 64 Top = 64
end end
object statusupdater: TTimer object statusupdater: TTimer
Enabled = False Enabled = False
Interval = 500 Interval = 500
OnTimer = statusupdaterTimer OnTimer = statusupdaterTimer
left = 464 Left = 464
top = 208 Top = 208
end end
object pmPointerfile: TPopupMenu object pmPointerfile: TPopupMenu
Images = scImageList Images = scImageList
left = 400 Left = 400
top = 112 Top = 112
object miClearCache: TMenuItem object miClearCache: TMenuItem
Caption = 'Clear pointer cache' Caption = 'Clear pointer cache'
ImageIndex = 6 ImageIndex = 6
@ -538,14 +538,14 @@ object frmStructureCompare: TfrmStructureCompare
object FindDialog1: TFindDialog object FindDialog1: TFindDialog
Options = [frDown, frHideWholeWord, frHideUpDown, frDisableUpDown, frHideEntireScope, frHidePromptOnReplace] Options = [frDown, frHideWholeWord, frHideUpDown, frDisableUpDown, frHideEntireScope, frHidePromptOnReplace]
OnFind = FindDialog1Find OnFind = FindDialog1Find
left = 268 Left = 268
top = 243 Top = 243
end end
object pmAddressPopup: TPopupMenu object pmAddressPopup: TPopupMenu
Images = scImageList Images = scImageList
OnPopup = pmAddressPopupPopup OnPopup = pmAddressPopupPopup
left = 304 Left = 304
top = 24 Top = 24
object miCut: TMenuItem object miCut: TMenuItem
Caption = 'Cut' Caption = 'Cut'
ImageIndex = 5 ImageIndex = 5
@ -581,12 +581,13 @@ object frmStructureCompare: TfrmStructureCompare
end end
object tRefresher: TTimer object tRefresher: TTimer
OnTimer = tRefresherTimer OnTimer = tRefresherTimer
left = 325 Left = 325
top = 190 Top = 190
end end
object scImageList: TImageList object scImageList: TImageList
left = 99 Scaled = True
top = 277 Left = 99
Top = 277
Bitmap = { Bitmap = {
4C690A0000001000000010000000C47B27FFE08D2CFFE08D2CFFE08D2CFFE08D 4C690A0000001000000010000000C47B27FFE08D2CFFE08D2CFFE08D2CFFE08D
2CFFE08D2CFFE08D2CFFE08D2CFFE08D2CFFE0872CFFE0832CFFE0892CFFE082 2CFFE08D2CFFE08D2CFFE08D2CFFE08D2CFFE0872CFFE0832CFFE0892CFFE082
@ -910,5 +911,631 @@ object frmStructureCompare: TfrmStructureCompare
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00 FF00FFFFFF00FFFFFF00FFFFFF00
} }
BitmapAdv = {
4C69020000004C7A0A0000004000000040000000411E00000000000078DAED9D
09741455BAC79374800081040324814002092464212189849D0404822C5101C1
05020410D98220E0804024FA041161181C401CD6719B41C0D163DC0632A3C880
B8CDE000479EF13C14181550018D12B9EFFECBBE3D45A73B5DD5A9AEAEAEFAEE
39FFC392EEAAFBFBEADE6FB9B7AA929F12CECA6E89B5A4F2EDEC6C478E2525EC
60C8FEAD77A14DB29F6F71F3992DB2CF6C72F3996D01C05FEE424FC87EFE7B37
9FF9BDEC334FB8F9CC1F889FF8899FF80DCCFF0717DA26FBF976379FD92EFBCC
36379F0984F8A777FC7F2E9FB18F365B436075E67F7138B34C032BF1133FF113
3FF113BF9EFCD76A18FBFE8C6BE16766E707E7E61CD7C2CF889FF8899FF8899F
F8899FF8899FF8899FF889DF58FC1F6E63ECE569EAB5B7D83D3F7EE6CD31D117
BDF90F94B9E7D05BE80BF1133FF113BF5EFCC7F7FE7A5EB57A63A17B0EFCCC9B
63A22F14FF899FF8899FF8899FF8899FF8899FF8899FF889DF48FC4668C44FFC
C44FFCC44FFC82FF8F3D197B7D9A3504567AFEE9BA67C0ADFAFC3B6F41241289
442291483ED399A309ECE8E6B23A85CF9895FFE8E67C8FF7B2E033C44FFCC44F
FCC44FFCC44FFCC44FFCC44FFCC44FFCC44FFCC4AFF79A55BE267A79DA5C8FFC
F88C56E7D3622D0D6B724679CE4BADD077E2277EE2277EE2277EE2A7FC87F25F
E2277EE2277EE2277EE2277EE2277EE2277EE2277EE2277EE2A7FBDF49241289
4422910CA3CACACAD0A0A0A07DF9F9F93759919F733FDD38C9C6826C4197CBCA
CAD22DC6FE6058071BCB79A715EBF85073C6C7C1393E1EE22CC23EB1415408EB
F6464BD6E358B4A4B8194D618313DC069126672F0C69125C93B1FB0607BB50AB
DB1AC30607B90DC2CCC8CEE7782EE67ACAD32D6AB143791FB76611BD1BC206BB
4DE8EB1330C73B3EDCDC25BBD08D475AB3A6A9A18C8F937526626F89B91D37BB
699DEC42D9952D59A37636D860AE09D8C331A75BDFDE5811BB50E6CB510C3E92
DB607480E737BB5B0C6824CD6D35FC50EACE160CBE92DBA04F80FAFA0DE15D1B
48735A2DBB50A72722A4FC88DB3225C0D81F407E83B9EC2DBB50C2E26688095F
701BC40408FB38CC5DCCE1FAB20BB52969021B1C833F31387B3EE66CDAB33768
C62E14353C0C36F81BFC8AAB73F3C6BCD031ADC6156A187EBCCB5185612C91C7
7967612EAB99F7CEDF479D101A198C3E3FEF8E7FD8995F542961CA1C9177D7DB
06BCADE4DAEE46BB1BB5B129E6C767F11D77C7731513BCE177B2419C0F73DF04
B5FCF88E4AFB7BC50F755EB842D4A02956E487521F7AC2673608047EB90D50AB
59911FEAB6F159166CB35D461CE77DC857A83EE8AF3BC15F050A3F94BDE54FEC
869EFD152B323B8F358E8B77ABB0D8B6CC0BFFEF106CAC27BFD62A38FC996A7E
7C07DF857D899FF8899FF8899FF8899FF889DF7BFE1E2FEED75DA829B02698BA
AD852249FBA3FC3BF86EB3B44C692FC4530DA2843FEF85375850B3162C38BD87
6914D4211517FF1B25FCB1456359C8A40759E84BA74DA390BB1680FF694FFC83
4F5C60218D9B32DBF60F4CC51FD43611FEE1264FFC698FAC67C179434CC56E5B
F79A58B30AF5C4DF3C3593853CB8DD54FCC1B7CF71EC95D7C5DFBBE2080B8A6C
C542F77C6EAEB11F138FB1DFC7137FFCC4192C78D40C338EFD2F3CC5FFA15557
5868F308667BB2D2B463BF2E7E693D93C74933B13B8FFDBAF8A3FA0E6421739E
30F5D877C75F70E4331614D684D9769F32F5D877C79F54BA98050FB9DB7C63BF
55DC7563DF15FFCDA77F6261316D99EDB197CC35F61FDD536BECBBE2EFFECCAB
2CA87D67D35DFBE0112518FB2B3DF1C70C1BC5424A969B6FEC47C560EC67D5C5
3FE8D8572C24BC39B3EDFAA719C7FE294FEB1F5D963EC6827BDD6CD6B1FFB027
FEF0E43416B27C9765C6BE9CBFD72BEF4A9F335BAD53D7D897F3B71F3F4DCA0F
AC34F6053F6A1D5B93A6CCB6E590B9F8F958AE6BEC0BFEAE6BB7B2E0AE7D4C77
ED43563C57E7D817FC582B0FB9FF49F38DFD417760EC9779E20F6ADADC74B58E
34F69BB5C0D84FF2C41F7C73B159C7FE474AF67FB0166CA6BD0D697FA3751CC6
FE0A05F7D8DD62D76D5C13CD24AB3C1B492291BC7EDE0CFBE07E6BFE7E460B7D
F0F21918ADE4D7E7B7053F8F95C89574556262A2B0C15BEE9E4FD28B1FFDD1BB
1D3F7E9C356D2A3DC3EFB76797FDC98F565151C16C369BB0C114ABF1A3AD5DBB
56CC033CB79B6F357EB492921261836FB82F48B21AFFD5AB5759FFFEFDE53121
DC4AFC685F7FFDB53C26BCA6474C3012BF8B98B0D26AFC68BB76ED1263A0D28A
FC070E1C207EE2277EE20F28FEAAAA2A4DF4DC73CF09FE7FD4F57CB09362FCCD
EFE77584CBDE3C7F5E17FF952B57D8F7DF7FAF58A22FF1F1F1BA2A3A3A5A9CFB
9CDA7772D4C5BF63C70EB661C306C512FC7AB74B972EB19C9C1C71FEA36A6A07
5F5C7F7FB4B367CFCAC7C1F3FE9CFFFE6AEFBDF71E6BD4A891A81DCAACC6EF54
3B287A0F9CD9F8D1962C59228F0959DEF2EFD9B347F2814A65147EB4A2A222D1
9F3ADF815617FFB973E7D8175F7CA15846E2474CC8CCCC74E451EEDE8F6AC6F1
2FDAE9D3A71D3181F3DD6D357EB4E2E262C13F91F8D5F1BFFBEEBBECADB7DE52
2CE2A7F14FFCC46F16FECF3EFB4CDA8F502AB3F16B95FF228F54E347BDD5871F
7E68C8F17FFEFC7976E4C8119FEBE4C99334FF899FF80DC6FFEDB7DF5A7AFEA3
0EDDBB77AFCF75F0E0411AFFC44FFC5EF063AD0C9FAD8FDCF1D7D4D4A8DA47F1
563FFEF8A3D7FC5ACAB9C12FABD947F356FBF6ED53CD5F595999A5D5F3368138
FEB514F1133FF107B95C4751B38EE0ADDE78E30D43F2232EA9D947F3565867A0
F14FFCC44FFCC44FFCC44FFCFEE0C7FDDB46D190214374E737A274E2AF34AA38
7F2163F4BE0392A6635DABF959690426DC2BAB624E7D3B72D448766FE9BDF512
8E8163A998C7593EE4CF6FD73E882D7AC0B3F039ADF8D59C53C9EF34A90F7F72
4A10DBB6C3B3F039ADF8D59C93F8895F4FFE9229AE1513AB1D3F8EE5EE3CFEE6
477C1A5E3CAC96A2A26F60C95D92596E5E6EBD8463E058AECE81731B81FF283B
5C4B65DB96B269655334118EE5EA1C46E6D743C44FFCC44FFCC44FFCC44FFCC4
1FB8FC2F57ED532D9C7BF59AFFAA63A2F44CFB380FEF41893322BF9E6BFDDC46
138DCAEFCBF7A0B46DDB56FE1EC93E46E4D76BBFCFFE2E9804ABF1E33D92BD7B
F716E73BA6F25D3001CF8F8677C1603ED8CFF98AD2F7489A851F0DCF02AA7D8F
A499F8D1F04C8C2C26DC6D357EB4F2F27271EE6A05EF82311D3FDAC0810315DD
0360567EA5F7C0103FF1133FF113BF3EFC78BFA29AF76B28D599336702821FCF
85FBE23D189F7CF2098D7FE2277E83F3E3992D5F3C070C1F40D79FF889DFD8FC
7867812FDE0383E76DB5E45FBE6D69BDE58AFFF2E5CB3EE1FFFCF3CF35E3EFDD
471B05EAF8D74AC45F9BDF57EF45717E0F8A51F9F15E405FBC07C0F93D5034FE
95F3FB7A6FDAECCF401AF1D950E2277EE2277E23F09BFD19704FFC667F069C19
F8D9707A069C4422914824128944229148B235F0743C2F80DF238CDF9D299EA5
E1FA88EB69FEF3716A9E29F1A7D04FDEDF964A3FCBF9B64784D95869DFD6ECCD
7B3AB1AA25E98CADC961A79766B0437392D9EA11716C60A766D2EF55E5365AA7
F6774DEB74FDB087F147AE6F1A350866114D6CD2BDFFA8FF799FA7BBFA3DA076
F683456911ECE2C39912B310FE0D3B5CFA9F2CC7FF7DFA9B34569C1BC56C2192
1DEE3708771267782D3A2294AD1E17C7AAD6F06BB72347D2C58D99ECB97B3BB0
FE29E1B0C529E7DF93CE19360CEB12C1AEAECE96F87E5CD58D2D1F1CCBE25B34
94AE35D7E7B021FE7D4FCF96ECC3795DA4CFE1CFCC368DF199D7FC3527F87923
79FF1F0F6B105CB3FC9658F6E3D3DD1CDCAEB46572BCB86E7DECDF6F19161A5C
7DB6ACABE37AA7C584494CDC4E7D9C6C9CC5BFF730FCC1D8AC160CDF81ADEECA
BE413C6B16A9237728EFCB148CF3B1792DD8E9B5197572CBF5F27D89B0C1B7FC
18719C6934AEBD18DB18D7983F0A6CBE21BA59A8E417F0BD923CE97B07953E6B
A6C11CFF2827A1097B7B49B2626EA16D53E259D34621E8EF2CFCFE8F4503621C
E3BE51683053EAD7F04C5578C3909AE38BD2A4B9D33F315CF1B3665E5EF304FC
6E77CC718C63B5DC8796A530D80C63553C47CEFF7C50F0C3CF61AEABE913FC1F
7C00F8F17D3E976AE08BB48E639877DC9F572F1A1623F93335DC981B77F594E6
E837F618102A1B4BA387243797F8319FF12E422FD6B6DFD9362E5E3AC6A201D2
EF5BDEA4153BC618F290619911ECD3C7D25471C317968F6AC3E01BEDF13AD2C5
5C8AC19817F10D3E9EFF5F0F95F3711CC6BE6C0C5DAEAF1F408CC2EFED4EE6BE
F8CD859D548F75C4BBF8960D851F4FF170FD5E595B1427F5BFBCB08DF41D957D
6D89BC49F8D0C4A846F003D3BD1CEB31521EC6F396DF8D6FC7AE6ECB56C5FD61
7917799C1FAEB0FF3DD0FFAF57644A3ED0DEFF596A6270D386210E7EE48EC9AD
A418FA8E73AE51C731C2F8391F406CBEA7A0A5EA39FEF5864C56D24FCAC9BE85
4F523BFE10CFE007E0C7FEB52095C1AF23BE2AB4DFE8DE1DC2AFCB1B711C8C29
D81575435D31859F6734AED7C0D466EC5F8FA4AAE2C6F8583DAE2D8B6C62ABF1
741E4FF647FC467E276C60CFFF9EAFEB98C8211033FE3CA1E375FC42185338A6
FDBA3C20CFBF516BF1EFBE95D8BA11DB3B2751F51CAFB83F89E1BBF67196A541
9C69099F833A00FE10B9A0BDEFA81FB6E33A23B6D9DF33825CF041C414E4CAAE
D8E5823DE123EDF3F24EFEDD4DB8668F8E69EB316775D6F195696C4846732956
E37D285AC75A5C73F880B767253BE2E2A3C3DA32CC0F8C0928B97598942B8A5A
408930AE6EEE22F59B15F7896267D77755C50D9F307F68B4743D387799AB5A4E
C3B88BDF6776AE283D921D98D15931A33B099F9897D894BD8770A4728E6F2C6E
CFA2C243A5DC1C734EAFF503F8528C3351FB6D1CD55E6239706F67B67752A254
27E6C43561F3FB47D7AA9D45AD8CFAA26D8B066CD73D09AAE7F881DF746699ED
A51AF3A8733DA6737D9DCB75BF7D6D41DC53F00A6A4FFEFFB760CE4435E579F9
9878699CC316C8AB51672C191923CDF14B4F65B1FB86C6B249F96DD83F9675A9
931BF5FBA8DC4869EDC9DBF7F9F8C1467D709DD2A2C3186A43D4A5F275886903
DBB27EF903D8A0214359A70E712EFD1E6C047BF19CF527D4527AD6D45AF163BC
BAAA4B87756F2FB1432929C9B5FC1FE6076ABB5E094D5147198A1F39A29BF1BF
CE31FEC37FAD4BDDE5AC7F999BC43A76ECC852BAA4B2BBFAC65E5797C22F62DD
05BE45D411A3BAFA77FC5FE7FF782D81BC147EF8C0039D252167C19A136A6AC4
252539EBD74F66B2D3EB7E5DABC1F5471C448EF8BB5BDB39D6DFE442ECB1AFB1
E9EAFF1CF12F3B526255EBB795D4A5118D6D6C66EF562EE38673DE80B803FFEA
EBF867CF7F76A3EE147318D709791A722E8C032839364CBA76A8B7D4B0FF7956
472967B5050739C6BA52C14E88B3BECA7FE06B82B10E9E1D21F9618C678C798F
F9EF2DB11EB951D7C8EAD2B1C87F516321AF44CDA9C60E586F432EAA65FEEBA8
7F38AFA8A3EDEB07CAEA1F7E5DDDD5A5761BBAAF7F78AE8D5C4A6D4E59313549
AAD5B5A87FA4FA978F6FF86E5CABF0462AEBDF4EE1B572D6B577C689FD1765F5
6FA766529DA4C606F00DAB47F0FAB7B1F7F52F621B6217AE157C13AEBBEAF50F
9EE70976AC5725C7D463FD83E7D99E7CA2AB3ABBA4BB77EB1FD2FA17BF56E83B
FCB257EB5FFC3A0B7EF8B77AAF7FD51113EB12EA51599D3D5C41DF63B04F087F
87BEE3DA7BB5FE9912EEC8DB355DFF6C15A63A4E40CFDDDD41ACDFD4B9FE29AD
7FF3792FE29CD7EBDF537EDD8F5834CC47EBDFBC86442DA9C606882BE543DB88
B5BC0D6ED6BF1FC49E82ECDAA9DFFF68D758F277F83ED6DA7DB6FF111A5C8D9A
52AD6FC0FEBD7D8FD2D5FE4799E087EFC35C50B5FFC5E304D6A3C08F39A0CBFE
57B35FEB6CB573E2D09C1469ADC269FF6B34F65684EF424EA778FF93D76A622D
076BCFBAEF7F7216B146A746D8ABC27A3DF63FA5FDEF06C1D5A21645CE97D656
C1FE37AFEDF11D8C19FBDEDA477EDBFFCE6A218D71A5FC2F97FC77FFDB71FF03
1F03A26E15F5893DFFAB76DCFF60AF0145CE8F3F31F70D71FF4368700DD6E23C
E5D29837F2FB1FAEBBFF85E7FDCE352CFE0DBF26E223847D48CC1343DEFFC27D
03EE5312F72E89BA09F1509617E4BABDFF89E731A5835B4B399C58BB42BD7E68
69B2745F0DF66802E6FEA7D060B1FF54E7FD4F2EEE7FC31C7FC74AF7BF914824
128944229148241289442291482412894422C975F4300B9F3A9E8DD3EB7C3817
CE6914F6EC64F60E17E3FD9AAB03FB5C9C0BE7F4B70DE4EC42BEB4818C9DF9DB
06AED87D690317EC7EB3415DECBEB0411DECBADB4009BB963650C0AEAB0DE07B
15F6A7DE3650C12ECE354EA7F833D7D736D0E31C46B581D1D97DD9CF4061F745
7F038D5DCB7E072ABB16FD0F74F6FA709885DD5B1B9889DD97360814765FD820
D0D8B5B441A0B26B61834067AF8F0DCCC26E757E2B8F7F2BFB3F2BC73F2BE73F
56CE7FAD5CFF58B9FEB5F2FA8795D7BFACBCFE69E5F56F2BEF7F587DFFCBEAFB
9F56DFFFA6FB1FE8FE17BAFF89EE7F239148241289442291482457BA70E14270
797979CACA952B670F1B366C45BBB876DBA156AD5AAF5FB56AD502FEFFC3CF9E
3DDBD06CDC274E9C0C1F39B268566E4EEEFF8EBA75D4B539B34BD982F90BAFD3
FDF316B0891326B182FC0197A35B47EF78EAA9A7D2CCC03E674EE95DBD7AF6FE
BF19F7CEACC55C97460C1F59DDB76FDF272B2A2A220391FBFDF7DF6F3C66CC98
1DE3EF9A704D0DB75C736695B2EC6ED9FFB762C58ADC4062AFAAAA6A99D73DEF
00FAEF2DBB5C430B6FBEBA74E9D2C181C07EFEFCF966858585FB4B67CFD5845D
68C8E02117B66EDD3AC0E8FCDCCFFD7EC674F7737DDEDCF9AC6844D1D5AE195D
0F4E183F61F9EAD5AB1765A467EC28E85F70F19E69D3DD7E0FFEB1678F9E55AF
BFFE7A5BA3B2DF71C71D43EFBCE32EB7F39DFBF76BFDFAF57BF1D5575FADF55E
ECEFBEFBAED1EC59B3EFBF69E0A08B6075F5FDFB4AE7B18484840A23B21F3F7E
BCD9C0828127DDB18F1B7BC72FD3A64E9BE7E9385BB66CE9D223AFE729773698
543CF9DAF4E9D347188DBF6C79D91C77E3BE78C2C46B23468C98ADF458870E1D
8AEFD7B7DF97EE6C3978F090F74E9D3A65983CE9CC9933E163468FF9C8555FE1
070B87143EFFFDF7DF375073CC9D3B77DE3A76CCB8AB2EED39BEB8E6D1471F1D
6614FECD9B370FC63576D5D7010503CE1C3C783041ED31FFF39FFF84F031B0CB
551C997FDF7CD8F4856FBEF926D808FC0B172CDC04BFEE326E0D1952EEED715F
AB782D63E488A28BAE8E7BF3D0615FF2396088F74EF3FCF603577DE47DFFE5F9
E75F88AFCFB179DCDFEDCA174E185F7C6DDE7DF3FA1A81FFD65B6EAB76C59FDC
39F9AFF53D36AF836EBD676AEDBC60EE9CFB5859D943CBFDCDBE68D1A2F613EE
2EBEE62A77FFED6F7F3BADBEC73F7CF870433E067E7065DFA291451B6A6A6AFC
CA5F5EFEF09819D367D4EADBE8DB46FFB27FFF7E4D72B5F4F48CBFBAE24F4B4D
7BA9BABADAAF3E90D76625B367CDA91DA3070DBEF0C30F3F68F27BC978EDB3C2
157F9FDE7D3EFCE9A79F6C7ECE7B1E70D5B79CECDC8357AE5CD1E477802C5FBE
7CDAEC99B36B9DA3207FC009CE1F6A44FEDBC7DCBEEBE79F7FD6646C2E5EBC38
AF64D29480E22F5F51FE3BADCE317FFEFCC4491327133FF1133FF1133FF1133F
F113BF8EFC13162E7DAAC3F4E53F3AABE3D4253F274E9C7FCD591D4A1EA871F5
796F94306D69B5AB73244E5EF80BFF79B5F3E7A3878EAB3AFEE9A9582DF9A7AC
5CBF356FEF3116084A5AF0C4979CBF0DF1133FF1133FF113BF11F93337BCCCD2
1ED9CE6EFCD30796E2CF58F327D63EEB46969AD28965A6A7B08E49892C71EA6F
58F717FF697AFEAC4DAFB1A48C4CD6F3C66EAC57F76C87B232525952C942D3F3
27DE3A81E5E5645EC72E949C9DCBB2FFB0DFB4FCB97F3CC4927BF471C92EC640
FA233B4CCB9FB3E36D967A639E5BFEDCAC0CD6A5F411535FFF941EBDDDF277EB
9AC6D2CBB79A77FEEFF9174B2CBA9BE5E566B99EFF99592C6BF3EBA6F67F5DD7
BFC492D2D26BF9FFECCC7496547C9F25E27FE2CC32766376D7EBF83BF62AB044
FC873ACF7FACD61CE8D4BBC032F95F677EFD7B38F377EF691DFE3B67D4E24FC9
EDCE729F3F6A09FE4E85B7D6F27FE9D9D9526E6C09FE7E37D5CEFDBA65B2F455
CF9A9EBFFBEE8F59A75EFD6BE77ED999ACCBF2CDA6E7CFD9F90E4BEDDEA3163F
E26197C5EB2DC07F90D7FA8B59C7C90BAED7A4FB59FAEA1768FD8BF8899FF889
DF60FC3366CEDC3168D0E06B81A0ACACECAF4E9E3CD94ED3FBDC172EDAAAE5F3
8CBED4C811455F727E4DAFFFBDD3EF5D92D7BDC74781A02E295D2A387F14BD73
A0FEE28D05806AF2F3F30B2DCC0F5DAEACAC4CF115BF51DBD5AB57F18C9DB0C1
296E839656E247BB74E9124B4E4E1636E026A80CB5123FDAA79F7ECAA2A2A2A4
BE725FF0B4D5F8D10E1C38C06C369BB0C15CABF1A36DD9B245D3981068FC6833
67CED42C2604223F62C2C08103E53121D24AFC68172F5E94C784B7BC8D0981CA
8F76FCF87116111121FCE126ABF1A3BDF9E69BF29830DD28FC274E9C907CF5AC
59B358616121EBDEBD3BEBD0A1036BD7AE9DF4F7418306B1A953A7B28D1B37B2
8F3FFEB85EE7C231444CF027FF77DF7DC7366CD8C07AF5EAC5DAB469A34AD9D9
D96CD5AA55ECABAFBEF2EADC320EDDF9AF5CB9C2D6AC59C35252521C3CF8FBF4
E9D3D9D6AD5BD9E1C387D9E9D3A7A5CF41F8FBFBEFBFCF76EEDCC9E6CE9DCBD2
D2D21CDFC31859B66C9964CB40E07FF7DD77A5F12CFA3F6AD428F6CA2BAFB0EA
EA6AC5C7A8A9A99172BB091326388E039B545454189A1F631DF319FDEDDBB72F
FBFBDFFF5EEF398471317CF870871D56AC5821D9C768FC18A3A28FF8BB9AEBAD
643C3CFEF8E30EDBC24F7AB2819EFC821DFD7BE185177C1ADB9292921C363002
FFB3CF3EEB60C73CF7753B72E488C306880FFEE43F76EC98E49FD117F875BD1A
FCA0986BF0B7FEE2471E833E20AEE9DDE007716EC41A57BEC6D7FC98E7222EA9
8DCD5A3430F7ECD953EAC3BA75EB74E717E7464EEBAF26E601722BE731E04B7E
F8619C37333353D338E74D43DD80BE3CF3CC33BAF1A386C1391193FDDD9033A3
2F454545BAF023EF10793DD660FDDDCE9F3F2FC55E48EE877CC58F9827FCAE51
9AC88FE5F581AFF885DFF7947FE9D944FE298F03BEE247CEE529F7F2970F40ED
EC6B7E9CC395BFF567DBBF7FBFD4A7DB6FBF5D377E5FD639DEAC3988B506E2F7
2DFF92254BA473618DD1286DDFBE7DB57CB2AFF8C18D73C10E4669587712EB2E
BEE617B9AF73BEE5CF86EBEE5C83FB8AFFC2850B8E7559ACDD1AA1A10E419F90
9BE991FF8BBA5F8FF51E4F0D6BE9A216D3ABFE419E8573627DDADF6DD1A24552
5F162F5EAC1B3FF664C45AAC7CCCE9DDD00FB1FEE6DC0F5FAF7F949696FA7D0C
886B2F8FFB7AF163CF4AD81E3141EF867D1131065DED97EAB1FE29FC00D600CF
9C39A31B3BE28ED853759EF77AF2632D047900FA8198A0473CC43951E7E09CB0
81BB73EAB5FF011F24E22F6CE14B1B805DE43AD0DE3D7BDC7E56CFFD2FAC8309
1B14141448BEC117BE5E8C35A18E0909EC03EE07FCCD2F6C20F6BDB13EA8657D
88752D615F67B9B3813FF6BF718DC4DC14F3C1DDFE949206BF7EE79D773A8E97
9191A1D806FEBCFF03EB51F27B3F3027102B94AC1763EE604F45BEE78F388BEF
4BF37FF2644536F0273F1AD6A29DEF8111B112F90AD65150AF621F0F7FC77596
DFF702619F179F71BE0768CAA4896E6D70F2DF9F18825F34EC0FBDF8E28BD21E
A9B32D5C09CCC829B1BE58572CA96583D858D62E3C8CE5C445B353278E1B86DF
B955555549F922FC23D652B07681BFE3FF708F9C9AE6B0819D3DBE419024D820
D4A0FC9AAF7D4C9E741DBB505C689064036681FB3F1F9A575A8B5FD8E0D0DFD4
DD0F1EA8F7BFBAB301D739353608E4FB7FB5B041A0DFFF5C5F1B043ABF021B84
9B9D1FAD45884B7EB67645598215F8C1E0C206BB99799E7F55A4B103F31FE6DC
9F736DE7633FD46AFC8C9E692791482492FCF7F89495A570E55B54293C366E4F
8E6DC4FAA7845B4A60063BB46D0A4F8577E4584A6026FE5FF94BFAB594FE6D25
81D9CE3FC5FEE75F902717243663C5B951A6D4DDD937B0B0D06070FF5BB0CB63
01DE1D12DD2C949D7E3083B1D539A6D2D555D96C544624D80F5656BA5FFB800D
925B85B1B3CBBA9A8AFF9E1E2D3DB2CB6CB0CE4C3628EDD31AEC9F2861379B0D
ECEC27387B8CDADC30D06D501FF640B78116EC721B64C63666971EC9B21CBBCC
069B7A273435BC0DD68E8CD39C1DC27B84F871771BD90676F673BCAF09BEA895
8D6C03197B8A2FD70B8C6803BDD88D6803BDD99D6D50941621E5D6FE60DF785B
7BBFB0CB6D101C14F457D4157ADBE0CFE33B325B88FFD8653608475DA1A70DEC
EC97794CEE638435543D6D6034763D6D6054765736B01ABBB30D90836BC5FEE6
B44E01C12EB3412472702D6CF0F68C6416DE30A42650D8653688A9AF0D64ECA3
03716F4DD8606C660B563628569596710532BBB30DF253C259D92DB18A543AB8
B5786FE96893ECB196814BE9DE4CD59A74F09F36D11EB337FC9F133FF1133FF1
133FF1133FF1133FF1133FF1133FF1137F60F1176547B28B1B332DC98F3D3ACE
B32FA2898D2DE7E3C0931DCCC62F1B07594AEC60567E991D9270FF6D64135BCD
FCA1D1ECECFAAE96E277B6435883E01AACF90A3B5885DF9D1D0E2D4BB614BF93
1D36858604555B915FBE67C26DD1839E4F23914824DFE9FF01393A52F64C7A0A
00000080000000800000008D2F00000000000078DAED9D097415659EE8C32208
8124909004084948086109241096808D0928200A248A2BA8098B0BA81097EE69
DB1632ADFDDA376ECCD3F746DC881E5FBFD16901B1B1F5CD7B92997EDDB68E23
69C5B67B661C398EF699D6EEC362BB2BDFABEF722B568ABAF756DD5B55A9AAEF
F79DF33B76872C75EBF7AF6FF97F4B656565892C501AF1583D2808FEF18F7FFC
732FF00F36B9CD013B12FC8EBF72F03BFE2AC1EFD891F9B5E01FFFF8C73F5EF1
0FF807FC03FE01FF807FC03FE01F4CF7DD2E3B13FC8E871CFC8E8712FC8E9D99
5F0BFE99FFC13FFEB917F807FCF7F0C2958212B1229DE21FFFF8C73FFEF18F7F
FCE31FFFF8C73FFEF18F7FFCE31FFFF8C73FFEF14FC13F05FF14FC53F01FE6F2
F93121DE7FD519F267F01F8D227DEE70B85E56FE0CFEF18F7FFCE31FFFF8C73F
FEF18F7FFCE31FFFF8C73FFEF18F7FFCE31FFFF8C73FFEF18F7FFCE31FFFF8C7
3FFEF18F7FFCE31FFFF8C73FFEF18F7FFCE31FFFF8C73FFEF18F7FFCE31FFFAA
F83FF6BE10AFEEF097FDDB9CFB973FE3F775CA7B1375FFE93C8BAAE0659D837F
FCE31FFFF8C73FFEF18F7FFCE31FFFF8C73FFEF18F7FFCE31FFFF8C7BF97FED3
398B33535EFFB17317F267FCBE4E2FCF1C65FE97F95FFCE31FFFF8C73FFEF18F
7FFCE31FFFF8C73FFEF18F7FFCE31FFFF8C73FFEF18F7FFCE31FFFF8C73FFEF1
8F7FFCE31FFFF8C73FFEF18F7FFCE31FFFF8C73FFEF18F7FFCE31FFFF8C73FFE
29F8A7E09F827F0AFE29F8A7E09F827F0AFE29F8A7E09F827F0AFE29F8A704C3
FFD32B84E8DE0151423AB5EB1F9400FFF8C73FFEB9176AFB0775D14A16000000
000000000000000000000000004020D951DFE1F8DCAF93E9E05EE21FF00FF807
FC03FE01FF807FC03FE01FF00FF807FC03FE01FF807FC03FE01FF00FF807FC03
FE01FF807FC03FE01FF00FF807FC03FE01FF807FC03FE01FF00FF807FC03FE03
789F8348970BFEBB02FBF982E35F401F807FFCE31FFFF8C73FFEF18F7FFCE31F
FFF8C73FFEF18F7FFCE31FFFF8C73FFEF18F7FFCE31FFFF8C73FEB3F58FFC1FA
2FD67FE11FFFF8C73FFEF18F7FFCE31FFFF8C73FFEF18F7FFCE31FFFF8E75EE2
1FF00FF807FC03FE01FF807FC03FE01FF00FF807FC03FE01FF807FC03FE01FF0
0FF807FC03FE01FF807FC03FE01FF00FF8070000000000000000000000000000
00008080A1953C8D431A75DC0F25DD776B88F87FF3B82F4AF9D7DD0B624039F7
9DD2F98061FD44E5ED39B1FFC663A093FB1379F7DBF5677EE25FE78986834562
DA4FF28DF50031105DF76DBA67F9DC4BF73AF2FF1B62A09DFB155DF7259BB27B
B94F10036DDCB7C8B8AFCBEA9F754C7A1DD53CC4D2BD8EFC77430C3471FF22E0
BE5FD651E973C4A2C149DD9F1403277E8EDC4098C7F8FDB3DE952E87560F14B3
5E2AB4E55F22BFDF1003E5DCCFF0E6779CBA97C8EFEF8901720361F4DFA58FF1
E5F8CE897B9D192F14187303DDDCD7F0E577D275AF237F9EFC50A8DC77241AE3
A7CB949D23C80F853CBF9329E40602EFBE45F7537CE95057DDEB94FDC5706220
E063FC54F99D4C31E587C80D04C87DCEAC419EBA273F14AD317EBAF4CA0D9C88
0172037DE87EF09801BEB9273F1418FF7BDC1AE3BB941B203FE4737E47D257EE
C90F4527BF9329721D91614CB01D4FE1CBEF901F0ABCFB26FDFE7A3DC64F17B9
AE881808777EC7B5DCC089F546E40632775FAEBB97E3AD20BBD791EB8CC80F85
37BFE36A6EE0C4FAA33C879F5BF8C491A0B65346F7727C1516F76EE4877CF41F
D8BE8A718C2FF37B32B7EF042FE600E5EF74720DF2BA0DF7B8CBA9FF737EFFB5
A7945C78792063C0E83E5DBC980B92BF33C3EBEA0C92FFA0C6407CAC972EED3E
F86FCFE0FAF282E43FC8F5402679028FFD3779FC197CF56F1103EDF857CBBF64
FC86CDA15FE788FFCCA8BDF7D150C700FED58E01FCAB1D03F8573B06F0EF690C
74057D9D1BFEDDA7E1272F8A8139B9A158EB887F6F58F0F7FF6C8E810E8F680F
41FE4F39FF16311068FA28FFDF1165FF7A0C54DDB8D533641E327F5E63DAE44C
ADC5BFC2C8BE8AD7FEE5DF30FE4D19B7F8C73FFEF18F7FFCE31FFFF8C73FFEF1
8F7FFCE31FFFF8C73FFEF18F7FFCE31FFFF8C73FFEF18F7FFCE31FFFF8C73FFE
F18F7FFCE31FFF6EFAF772BD6ED028B9B0B5E7CC20791EA39BE8E7F9C8BF61FC
9B23E7351AF747B9B107C235FFA6FD5B1022DCF05FB47465EC77F59BBB44F4BF
F87A0828FD6A1A74EF7BDCF2BFE8E5B77B6269C0432F8981CFFC0704947EE3A7
F49CBFE4967FBD5F229F7DEE717091CFA6A1DECF73CBFF9092B2D8EFE9BFF91E
EE738091F5BF5EF7BBD5FFD7C741594387738F034E566149AFB3F7DCF0AF9FE7
D67FC57AEE7190EBFEEDCFF7AAFBDDF0BFE4B77FFAA6DFA7FD7EEE7380EB7EED
F9349FAF93A9FF297F79CF897E9FD6A7E41E87A6EE6F71CB7FCE945AFA7D61AA
FBFBF53BEA56FE579ECFA0FFFCC01FBFC97D0E59DD9FA97FBDDFD76FD105DCE3
10D6FD99FA1F38FCC4F93C037EF814F73884757F26FE7BE67AB4B8E21E87B3EE
CFC47F7E7C1E52E693B8C7E1ACFBD3F5CF5C4F34EAFE74FD33D7138DBA3F5DFF
FA5CCF809B1FE61E87B8EE4FC77FFDA3BB98EB8948DD9F8E7FE67AA253F73BF5
DF6BAE877E5FE8EB7EA7FE99EB8956DDEFD43F6B7CA255F73BF1DF33D723FB7D
CCF504BFEED73CA5AAFB9DF867AE274475BF362EB753F7DBF52FFB7DCCF58468
7DB7F68CDA7D8F961DFFCCF584B6EE6F72C37FCF5CCFFA6DDCDFB0D4FD595987
DCD8FF699CEBA1DF17AABA7FBB1BFEF5F73433D713BABABFCE0DFFCCF544B7EE
4FE5BF67AE877E5F24EBFE54FEF5FDDCCCF544B3EE4FE69F353ED1AFFB93F9EF
99EBA969E0FE46B4EE4FE69FB99EE8D7FD89FCF7DACFCD983FB2757F22FFCCF5
A851F75BF9EF35D7C37EEE48D7FD56FE99EB51A7EEB7F2DFB39F9BB99EC8D7FD
66FFCCF5840CCD512675BFD97FCF5C0FFDBE70ACF1DB7C4F4675BFD97F4FBF8F
B99E70D4FD73976454F71BFD33D713C2BAFF9BB3BCEA32F5DF33D7C37EEEB0D5
FDDD6E9CFFCE5C4F68EBFE76B7FC33D713CABABFDC2DFFCCF5A855F7F7F2CF7E
6EE5EAFE5EFEB57E3FEF4608076ED5FD56FD3F080DFFE9D2FB9F3A2DF8DBF8FB
8520B8B4BBE11F000000000000000000A28DE279F44EFC2B3F97D2867FE569C2
BFD21CC9641D6D94FCAB50EEBDF75EAB18E8D6DF8B8CFFE897D6D656AB18D883
7F754A6D6DAD550C6CC7BF1AE5F0E1C3A2ACAC4CE93181CAFE653970E080C8CD
CDB58A813AFCAB5176EFDE9D684C508E7F358AAA6302FCAB3D26C0BFDA6302FC
AB3D26C0BFDA6302FCAB3D26C0BFDA6302FCAB3D26C07FDA638276FC2B3D26E8
C0BF3A65DBB66DF8C73FFEF18F7FFCE31FFFF8C73FFEF18F7FFCE31FFFF8C73F
FEF18F7FFCE33F83B27FFFFEC061310F2CCFCA6DF28072D5FD2BBE17D9D7F525
F80F245DF8579ECEA0FA3F76EC9878EFBDF73CC37C4D8D8D8D91A7AFD69CA7E3
7FD7AE5DE2FEFBEFF70C15C72449D69C37E15F8D22C7197E9F4D1386FA5FA5B2
73E74E5FC70461E8FFA95612AC39EFC2BF3A45F609FD1813E03F98C5AF7DA8F8
577B4C80FF6017AFF7A1E23FF8C5CB7DA8F80FF598604F5FF87FF9E597633920
AFC0BF75F1E26C1AF27F6A8F09D2B9D76FBDF556AC0EF00AFCA73526A813B4FF
8C09F0AFF298600FFE951E1374E15F9D62315F8C7FFCE31FFFF8C73FEB7FF04F
FE0FFFF8C73FF53FFEE9FFE11FFFF8C73FFEF18F7FFCE31FFFF8C73FFE59FF89
FF50E7FFBCCE49F9CD679F7DC6F31FA098F41B798F69FFED5FD3BE7DFB22E5BF
BBBB1BFFB4FFF8C73FFE29F8A7E09F827F0AFE29F8A7E0DF507EFEF39F93FF51
D83FF95FB5FDBFFDF6DB9E9E49E1371F7EF821FE69FFF18F7FFC53F04FC13F05
FF144FFD07E15D8BF8EF3BFF41C44E61FDA7DAFEC9FFA9ED9FF59F69FBEF0A20
B4FF3EB5FF827792E31FFFF8C73FFEF18F7FFCE31FFFF8C73FFE43E4DFEB3DE9
7E23D7B3E19FFC2FFE59FF897F0AFE29F8A7E09F827F0AFE29F8C73FFEF18F7F
FCE31FFFF8C73FFEF18F7FFCE31FFFF8C73FFEF18F7FFCE31FFF61F5BF6DDB36
B0A0B5B55509FF601BFCE31FFFF80FBBFF0E488BB628F807000080E810EFA304
B5EFDC8123FC438FAB260FC627B1B3FD66CD9D25366ED91808E4B5E863670F3E
6F13CFEAC904D43F758A85FFEA4959A2B9C51DE4EF0AAA7F2F3E6714FCCBCFB3
F3317790BF2BA8FEBDF89CF8C73FFEF18F7FFCE31FFFF8C73FFEF18F7FFC47C1
BFCC733821BF20B8FEE5B539FD3CAAFB573DFF8BFF13ECD8FF37B658DE7A4E60
D74ECA6BB3FB39F0DFDBFFABE2655B5CB96D4360FDCB6BB3FB39F09F9EFFA880
7FFCE31FFFF8C73FFEF18F7FFCE31FFFF8C73FFEF18F7FFCE31FFFF8C73FFEF1
8F7FFCE31FFFF8C73FFEF18F7FFCE31FFFF8C73FFEF18F7FFCE33F73ECAEDFCF
14FD73FFC5CDD69CF6AD9E7BD3193F472B13EAF0EFECB98C206DF857DAFF11BF
EB01FC073206F2F06FDF7F63636368A9ADADB58A816EBF62200AFEC35E2CDEEF
14EB53E25F0DFF870F1F4E540F74E03FFAFEF518C8CDCDF57D4C80FFE0940307
0E58C580A76302FC07ABECDCB9D3D73101FE8357E43B3FFD1A13E03F98A5B9B9
D9973101FED51E13E03FB8E59D77DE49342668C1BF1AEF8D9763022FE709F01F
DA31C12137FA83F80F47D9B2658B550CECC1BF1AFE138C09BAF0AF8EFFFDFBF7
E31FFFF8C73FFEF18F7FFCE31FFFF8C73FFEF18F7FFCE31FFFF8C73FFEF18F7F
FCE31FFF4AFB7FEBADB7C4AE5DBB42C3871F7E887F17FDBFFCF2CBE2FEFBEF0F
0DEFBDF71EFE5DF4FFD9679FC5EE695890D78B7FDA7FFCE31FFFF8C73FFEF18F
7FFCE31FFF8CFFF18F7FFC53FFE31FFFF8C73FFEF18F7FFCE31FFFF8C73FFE19
FFE3FF9BD2DDDD1D2AFF415EFF35B3716620A0FEEF1BFF4105FFDEFA4FF4FEAB
BE02FFFEFA0F1AF8C73FFEF18F7FFCA7F27FECD831D6FF2BEC9FFC8FDAFED9FF
47FB4FFB8F7FFC27F71F66F08F7FFCAB03FEF18F7FFCE31FFFF8C73FFEF18F7F
FCE31FFFF8C73FFEF18F7FFCE35F0DFFDBB66D5382D6D656FC5BF85718FCE31F
FFF857CD7F07C46853D13F000000000000000000000000000000000000000000
000000000080827B2BEBE27B0BF7C8FDA51ADD86FDA687E25FEB8A7F4F8B4639
F72DF4CECB35B66B1C49731F7277FCE7EBB89F9E3C8F4D1A791EFCEEBCB8B71E
97B9A70E10ADB3F3C5BDCDE3C4FE4D136388BBEB631CB86172ECFFEFBCB85C6C
5B325A34560E4F140BEC4B4EFF396C8FD7AF899E45590777CA7B9C494CC4E3EA
90FE7BA5CBDD6B2B7B5CDBE5F0ED75B19F933163719DC4813D174D71E727F92E
2B18241A27593E67A25FBFACA3F1582877EA3EFEB3A26CC4A05ECF7826C85890
F582AC434CF541139E133EEFBDBC37CFCC133B37948B77EE9E26C463F527B1FF
E689625BCBE8585CE83FD3BF5FD631D91F73EABE76CC9098333B6EF5B64022DB
8134E2603BCE7BB5BBBDDEBBD2FAADFC84CE132163C1543774A56A13F4FE7C2A
F7D2B3ACD365FD90A8DF27FF4D7E8FEC0F58FD2EF9B5E69A3C735D50AEB8FB36
FDF98BB5BB9A3FA7DECDDCBB7A9CC81D32C0788FF312FCED0EBD8F97C8FD3BB7
4C4BD6AFD3C77E87CCFFAEF71BE5CF9B7FA7EC1FE87541FCB3D729DAC6771BDB
75F9FC66E2DDC881DB26A78C01AD9D7857FEBB7C5EADDCCBAF9BEA6CD9B76849
F1993A4C3982581C98E34BC685AC730CED559B426DFC9E9EE74473249F57B7BC
1B39FC3775C618E8325D478B5E6727AAEF4DED48791AF1DD69AC0FCC7166D11E
3445BD8D8FC77A4F1B2F1D79E13E413DD06EB89ED8387FCB8242CB76DAF0DC77
BA59CFC9BAC0FCF7F4B16254DB0259B7E975ADDEC64B2F5E7A37D601B5A54374
9747F476401F67588DF5645FDD3066CF73E91EF4F46FADFA9A7A5B108F81BC28
8EE3651BBF7B73A52FDE25725C6878F6F5F65BF71FFB9A55FFCCD0C76F73F97E
B418C79AE63A478F81B09F6319AFEB3B8D6DBC74E197771963C67C403C069B4C
D778E2AC748BFEBEE11C754FF2D77A0C98DB029947305C735B48DD7718C773E9
8CE3D345FE1DE3F83F7E1D6D09AED3D2BFA1DFD7E5E13D6AD1FFBE39C7ACB73D
616B07E29FE990B18D77733C97AA8DDFB2A4D03C3EEF4876FFF4F90473FDEF87
FF54B90743FBD31192F9B85E6DBCCCD7FA55D79B723D223EB62CB771DD5D56CF
9F5FFE8DB947F9CC5B5D4390EB00ABB952D9C67B3D9E33E67A4D6DBCA3799544
E33FAFDB7F8BFE71AA3AA02D80EEDB8D6DBC9CA3F1B38D977FCFD4C6B7A7DB06
5BE57F0CF7BEC9877B79C82A0729D71BE8711DB0F15C4F1B2FC7D57EB6F1B27E
31B5F1DBD3AD1FE3F557ECF798E7EF0C73F79D7EF497ADC602B23E307CCE3C55
72B656C8FE84A98DEF7263DE4C1FA3A6188795FBD106C83926733D64C80734F5
65CED6F8CCC97EB69F6DBC693EF750B2F99734FBAE967920C39C5F970FF7D872
2C6ACA0BB78B90CFCB3A69E365DEC0D4C67778F439BBAC9E3F633FD0EB7B9FC8
BFAC874CEB0D3C5F3BE4F5BCAC9D363E51CED6C3B6CD321763E883795607EBF5
BF391F6CBE0ED33CF41EB7DBA5F87D085ACEB6CEAF9CA53E0E33B7035ECFCDC5
D7B7C6E68153AD219363552739AE20CFCB1AE7678D6D7C7C9EB0AD0FFA3A96EB
C04CF3325ECC091D4AB606C5AA4D30AE47CAE47EF5F5BCACB18DD7D76CF6D558
47D67F7A7FC7DC179031605ACFED4A9B6467FD5922645B65EA1B74D96DA3AC72
B60198972D0F422EDB3837677662581790746EC949BD6FD5EF7082C5BAE284F7
32D1BC6C5872B63ECE63255CA72173F3A6E7EE50DC655E3AB914ABF547E9EC33
30D64F56E3A5B0CCCB06654ECBB81FC46A7DBFC573A7C7B3BE0FB4C9C449EB42
65BFDE8D7D26C6D834AD5596B1F9A330CDCB0629068C7DA344AE64BFCDD43F4C
49A275E16E21AF696CEE29BDD7A36B75BD9FF3B25EE56CFB20FFB9C7B82730D1
5E1F59071BF7819AD1F78578E93DD138D1EF36DEB0DE52AF8342BDAED93CDFE9
F5F39B2EE63C5118E76503BE6FA1B3D7DEC49ABC8CFAEE6EB6FBC636A82F72B6
6ECDCB8664BDD31EAB7D7F3216EC8EE365FD219F57D936D8CDFD58FD0EE3FE91
BE9897EDAB9C6D50CE0831B60BC678905E653B2CFB0346E4D7ADF690CAE7D7EE
BE737D3F7154E76543BACF61BB797C67833DE61892CF73B2BE85794FA2D5BCAC
8C03E948D6056EE673FD9C978D403CB4C4C7BA665ACC75E4497939CDAF7CBE8D
6D89796C9F28672B7D0F193450E4E60C1763C68C15D943878819E37332AE1BFC
9E9755F86CA32E633B72E78A925EB9BD64F3B2D2B1743FB566BA58BC74590F32
0EEA2B723CDB4B039EE4A0DF8DCF8B09BBF3B2775C342EE6DAE85EB2F08C33C5
602D2E9C8C052DE665DFE3FC22FFFD3B9997BD7A7189A8A89C70927F4949D108
5B63428B7959FC87642F4DB2E73FB6C631C5F36FDE4B23FBA23B2E284B7B9E99
FE5FC2FE5F9317F3B256EDBF749FAAFD37CFCB5A8D4513CC33D3FFFBA6BE7667
FC9761CE56B61343079FE8FF8F18393269FFDF3C2F6B75468939DF946A9E59B5
33622DF33FF1330AE5336C467EDDD49F767D2F8D3EFE9758F51BAC72B63257E5
E4EC3B8B79E61685DAE83D66DFB2CF24C74A76EB6CF9ECC9F656C6435FCECB4A
8FE9CE65C9BAC2A26F5017E1E7BDD37C36A59FEBE6DC9C9775EB9C53AB5C74D4
E67F4E9AFFF571ED94DBF3B2B28D777BDD91D55C5414E67FE3FDF22E3BE37059
EFCBBA556FE3CDC89849768EAD1F7B69ACD6B47A3D171DD6F51FC6F55FC9E655
A553D37A97D4EBBF3CAE3F2CE665C5B041FDD39E674EB76F601A2F8666FD57AF
F59FDA7DB47AE62DE6439CAFFF7479AE3EC1BCECF77BEDD97730CFECC55AB4A0
AFFF94AE06F4EFF7913E2633F7E72DD6B067B6FE7B49A1EB7B696CADFFF6710D
9BF90CE5A0AEFFEEB5FF43BB9F56CFBC27FB3F32184338D94B63679ED9EBBE81
DFFB99D3DAFFA5D5A1E6E7CBD887767DFF97E6CF69AE37937959AB79663FD731
3AD9B3E4FBFE4F539D6F3A3FD6BBFD9F3673406EEE973D69FF6792F5ED5EF40D
8CB9E4BEDCFF697C0ECDFD72BD5DF57CFFB756BFF4C55E1ACBFDDF3E8C13BDD8
CF9CF1F90FA676D89423F7F6FC07AD8E71FB8CC38CCE7F88F70DFC6A1312EC67
AEF3C17F97D5F327EB01DFCF7FB1A8EBFDDE2F7BD2F92F2EBE0F2BCDF7657936
CFDCEBFC2753BD6F6863FD3BFFC9E4DFD4F6F4EDF94F19CC13A5335EF4639EB9
E7FC37D3584F3E77BE9FFF661A73480CFDCEE09CFFE6609ED8A3FDCC2D6E3F77
E6FC9E2197E2DFF98FA61894FDBDC09EFFE8D11C929FB9E49EF35FB5F6D5FCDC
19DA5CFFCE7F358DFF649F2FF0E7BFFA9C4B76739EB9E7FC6753FED5D8EFF3ED
FC678BFC8F2106837FFE738A3D4B419C67EE39FFDD34E693F97DDFCF7F37EDE7
D0AF2174E7BFFB9C4BCE649EB9E7FD0FA67EBF5FFE93E57E0DCF7EF8DEFFA08D
17FD9C674EF76CCC44632E3FFCF77AFF4B829C53E8DFFFA2F5DB833CCF9CC8BF
D7ED7FB23946D3B8331AEF7F0AE83C73A2BC8F977DAF5EEF7F33E57B4DF34CD1
7AFF5B3072C94D56FD3FAB35F786BCBF27EF7F94B91E739BAFBB8FF4FB1F8331
CF9C976CFC67F1DE6077DFFF6AB1AEC4EB39C6C0BDFFD5E77966C338C1F8FED7
84F91F533FD09DF73F5B9CBF67B1AE44ADF73FFB30CF2CE3CC5007B45BBEFF3D
C1DA0B8B330CD37BFFBBC5BE7DD9EFD0EBFCF83D5165FF946FB964D37BBCBBD2
597F65DE2369CA3774C53964FE77F93B13ADF396633E3DAEA25AE7F7F53CB3E9
B9EF4ED4A74AB4EECB6A2E5EFAB4DABB69DE0728EB0DABDF6551DF7787ED4CD4
30CC339B7242DD29F20075C63199DD7598FAFEDA447B6C6DBCD7663B7BE713CF
33A79337B0982FEEB2339632EFF770731FB685F76ECECF48DA37E8329FB19AEC
DC64E95C8EF38CE37D7D2D691A79EC5EE7A4A7B32E5F3A973F67DC8F61E82F70
7E4E1A7903ABB335ADFE2DFE0CA7BD96DC6A4E4BEFC7C9F978BDBE37F609E4FF
37EEFBB4B8AE6EBC67541FB4C763E148827ED7A1B8F336177375E5F13838E4F0
3C17A3F3ED2AF6EB7D9A6F6CF22B471AFF7BEDF118EB328DED8D63407DDF6739
9E00000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000FC6566B5C8E3B329EBBE4EE388465B
043F5B5BFCB3F11E9CE4EE459CB688B9D73F173190DA7D6462C0E49E18B0EF3E
F43190C03D3160DF7D686320857BE563C081FBD0C5804DF7CAC6401AEE431303
0EDD2B170319B80F7C0CA4E95E991870C17D60632043F7918F0117DD072E065C
721FD918F0C07D6062C065F7918B0199F3F6C87D9FC78047EE8D319017C1FC67
2462208A9F89FB857BEE1BEEB97FB82706704F0CE05EF518C0BDBA31807B7563
00F7EAC600EED58D01DCAB1B03B857370670AF6E0CE05EDD18C0BDF231807B62
00F7C400EE8901DC1303B82706704F0CE09E18C03D31807B6200F7C400EE8901
DCE31FFFD4FFC400FD3F6280F11F3140FE871820FF4B0C30FF430C30FF4B0CB0
FE831860FD1731C0FA4F6280F5DFC400FB3F8801F67F1103ECFF2406D8FF4D0C
70FE0331C0F92FC400E73F11039CFFC6D97F9CFFC8D99F9CFFCAD9BF9CFFCCD9
DF9CFFCED9FFBCFFA10DF7BCFF05F7BCFF2922EE79FF1BEF7FE3FD8FBC0394F7
BFF20E60DEFFCC3BC079FFBBA2EE5D8881B6888E7594719F410CB44574BCAB9C
FB3462A02DA2390F65DD3B8881B688E6BD94776F2306DA229AFBC47DEA18688B
D0676BC3BDA318688BE0676BC3BDBDF9023E1B00000000000000000000000000
00000000000000000000805A68658246930585DC9FE8F0C20B2F0CD49C4E1E36
6CD8F7F247E6BF9C9393F3416161E1E1D2D2D2CFE7CF3B4D98195732EEE351A3
461DD6BEEFFD828282AEECEC61D73FF2C823C5DCCB70515C5C9C939B9BBB5DE3
BDB2D2B22F162D5C242EBFAC555CDF7E83F8F68DDF49C9F55B6E106B565F1A8B
8931A3C77C3272E4C87FCDCFCFFF4B2D9646707F83CBFAF51B668E183162AFC6
474B172F159B365E63CB772AAE587FA598D7304FE4E5E61D1D3E3C67C79A356B
0AB8DFC1E1D1471F2D1B3162E443E3CBC71F5DB97CE5F11BDA6F74C5BB15A72F
683CAED52FEF670FCDFEF6830F3E388CFBDF77BCF9E69B83070E1CB8BEB8A8F8
C3254B967EDDBEF97ACFBC1BB946AB57E6CF9BFF95D6577873E0C0531A7FF7BB
DFF5C787FF141616EDAE9E58FDE586751B7CF16E66F5256B44C9D8922FB47EC6
FD9F7FFEF9009CF8C3AC59B326666767FFDB198BCEEC13EF46649D336DDAF42F
B53E4777434303ED81C7687DAFA5797979FF72C94597F4B97B23672F3B4768D7
F5D2D5575D3D094FDE70EBAD5B5715E417FCEBA5DAD8ECA61BBE1D28FF9295CB
9B8F6B31F00F5BB76EE54C179779E08107CE292929F9DDA56B2E3B1E34EF3A37
5E7F9358B9A2F9ABC2C2C2171F7FFCF17ABCB9C373CF3D377BF4E8D16F9C7FDE
F922A8EE8D3170E6198B8F8F2E1EBDF7C5175F9C80BF8CC77863478F1EB3EFEC
B3CEFECA0D3F6BB43EFB9CD9738F978E2BFD735151D1619DAA09559F362E6814
EBDAD667FC3764FEA1616E831C17DCF1DBDFFE36178FE9A38DB1EF9A3B7BEED7
99F8D878D526B1E0B4055F1514141CD1EAE6FF3D6CD8B0558B162D2A32FE9DC6
C6C6095A1FFEDA5105A35E292E2AFEF392C54BC475D76E4EFB6FCA1C724D4DCD
E75A6CADF9E4934FC80FA4C1A4EA49F32A2A2A3E4B37AF231D9CB574D971ADCF
F807AD5FB6F557BFFA95ADFCFD2F7EF18B12EDD97DBCB8B8F863ADCDF95AD6E9
E9E68DC78E1D7B242B2B6B343E9D3163C68C61C3870FFFF7F56BD3CBED5CBBE9
3A31AD66FAE73939394FDD7DF73D69B5C377DE79E73CED1AFEDFE90B4E4F3BB7
D8D27CAE9079429C3AE38C33CEF86BAD3DFE229D7BBEE5BA76A13DF34756AD5A
756BA6D7B16EDDBA215A7BF1C8C4AA897F4E77CC39AD66DA170B172EBC0AAFF6
B8ECB2CB668D193DE65FA447A7F77AC3BA2B843656F8B4B6B676B59BD7347366
FD6D5ADFE0CB74EA81CDD76E115A3DF28BF3CF3F7F287E5373E18517FEF8FC55
177CEDF479BB72C35542EBD77F595458D4ECC5759595957D7FF2A42969B505DA
98F023AD2EB91DBFC9B9E5965B164E9F36FDE0A6ABAF71DCD79B3163E6179AFB
2BFEF0873F9CE2D5F58D1B37EEA1C6C626C763D1756BD71FD7C617CFDD78E38D
63F09C98EF7EF7BB3F6C59D9F285D3677F61D3A2E35A5FEFE1575E79A5C8CBEB
7BE9A597266BEDCB6BE79DBBCA719FA4A9B1E9E35BBF7FEB2D784E98E3ADD7EA
D77FD49E1547F7F6B235978BCA8ACA034F3FFD74831FD7F9D4934FADD4EAA83F
5D79C5558EAEF3A20B2FFE5A8BD147EEBBEF3ED60F59A0DD974DDA73FC8593F1
F675D75C27736D9FDC73CF3DD7FA759D4F3CF144F629A79CF2A3258B977EE5E4
5AAFD978AD98DF30FFFD871F7E7815BE7BB36FDFBEE29292710F9C7FDE058E72
7D975C74C9F1ECECECFF75C71D77F8BA76FBAEBBEE3A5DEB0FBED2D6BAD6D17C
D4E233177F3570E0C01BF6EEDD3B10EF86399E7DCF2DA89F51FFEF575FB9D1D1
B86A5EC3FCFFBCE9A69BAEE88B6BDEB265CB8F969D75F6A74ED61B5E7EE9E5A2
7A62F5EEE79F7FBE12EFDFF0D39FFEF49C6F9DF6AD4F9D3C4BEBD76D383E78F0
E07D1B376E1CD217D7DCDE7EFDB4A2A2E25F5D75C5D5B6EB80CDD76D1173E6CC
F9BDE6BF11EF2778EDB5D786E5E5E67D5FEBF73BEDF31F59BD7AF50D7D79EDE7
B69CDBB9EADCF31D8D57B438FF42EB3F5CF0FAEBAF332FA4F1C61B6F946AFDFE
17B5B6D491FF214386FC7AD9B265D97D79EDAB56AD9A3BB16AE23B4EFA815ABC
C879A1BB0E1E3CC8FB7F345EFFF5EB53B5F1D4073287637BEDEDC5ABE573F444
10AE7FFAF4E9AFC9BEBD931CF59429535EF9CD6F7E538E7FCDFFEBAF4FAFAB9B
E1A8EDAFABADFB42BB87B38370FDF3E7CFFFCEC2C6855F39C9554E9B3AED8337
DF7C93B5A21AA70E3EF542AD2DFFD2897FB98F3328D73F71E2C4B123478EFCB3
93EBD7EABB8F35FF53F02FB2B287665FB1FC9C154EF268B2FD7C21489F213F3F
FF7D27F395B3EA677F3A70E0C086A3478F2AEFBF627CE5DE4B575F66FBDE3535
2E14DABDBB3C489F61DCB8D2872F76B02761F9D92BC4D0A143D769FE95DF3754
593961EF5A077DFFAAAAAA4FFEF8C73F062A873E78F0E0D317362DC4BF0FFEC7
8F1FFFA70F3FFC303F689F63EAD4A91FD9FD0CE7369F2BF70EDEFDD1471F0D52
DE7F45E5BFD91D3FAD6D5D27CACBC7BFAA3DFFB9018CE32376FDCB78AFA8A87C
46F37FAAEAFE27544EF8BD93BE9FD6D63EADF91F1640FF6FCB3548F8F7CEFF8A
E52B4576F6B0AB3EF8E0835382F639AA264CDCB7AE6D1DFE3DF47FD6D265B2DF
1448FFE5E5E5FF53E676F1EF9DFF39B3E77CDCDDDD3D23889F63D8B0619B56AE
68C63FFEF18F7FFCE31FFFF8C73FFEF18F7FFCE31FFFF8C73FFEF18F7FFCE31F
FFF8C73FFEF18F7FFCE31FFFF8C73FFEF18F7FFCE31FFFF80F154FEDDA73F6A9
63CAFE23BB62CA61BBE415167F993732FF6B3BE4E48DF83ABBB4EA9893DFEF17
4347977E6CF7734872478FFB2C7BFCE423767EF790D2AAA3A78E29FF875D3F7D
6E6690FDFFDD9EBD2B4A5B6F3C3C77F74101EE31E3E11745F1CAD67FDAFDB317
66E11FFFF8C73FFEF18F7FFCE31FFFF8C73FFEF18F7FFCE31FFFF8C73FFEF18F
7FFCE31FFFF8C73FFEF18FFF8362CE4F7E2DA6DDFBB4A858F71D5172D60562C2
75B76BF7F7FF8A39BBDEC07FC4FD4FB8F607E2D49C3C51505828C69796884955
15B1FFE68E1821868F2915536EDB89FF08FA9FF9D8CF457EFD0251545428E6D4
D78AF973669EC4ACBA1A91935F204A9A2F17B3FFF655FC47C47FFD13BF14A34E
3F5B548C2F130DB3EA2CDDEBCCD562636C498918BD7C8D98FDD46BF88F80FFF2
CBAF171595159ADBE4EE8DF5404955B5A86AFF11FE43EEBFE6BF3C2E4AEA668B
DA9AC9B6DCEB4CAEAE1263179F17EB17E23FBCFE276CFEA1282B2B150DB36738
F22FDB818A293562D2F7EEC77F48FDCFECFC47517E5E9B98523DC1917B9D8A8A
72316153476CBC88FFF0F9AFBDEF19513EBF49CC983E252DFF53275589096BAE
8DF51FF11F4EFF15A72D12F5B553D3F23F6D4AB518BFEC02EDDEFF1FFC2BE8BF
B6669218BFF01C51F7C0F3F857D03FF57FC8FB7F3BBB4479F3A569F7FF26548E
179557DC2C663FF9CFF80FA17FD96FAFDCB84D54565638762FC77F65151562E2
4D7731FE0BF1F87FCA6D8F8892E933C58C69CEC600355ADFAF64C11251FBDF9E
C17F88FDCFF9BB03A2E4FC2B457979A9EDFCEFEC99D345A9F6EC575CF13DF2BF
11C8FFCF78E8EF45C19C85A24A6BCFE7A5C803CE9D5527C68F2F1725CB5733FF
13A1F9DFBAFFB14FE4564F1753B43E7D32FFD5559562D4DC85CCFF4670FD47D1
E9678BD929DA80C9355345C5DA9B58FF1141FFA31A16696D7B6DF231BFE67F5C
F3E5F88FA2FF59A78BD933A6279FFBD7E2A3B86939FEA358FFCF4BFDFCCFD2FA
FEA3E62FC67FC4FC4FBF6FAF28993147CCB1E1BFF834FC47D17F597D432CAF87
7FF5FC577FFB6E5131BD3636BE4FE67F8EE67FDCCC062D5E9EC57F84FC575DF7
03515D5B9772FDAF6C1FCA67CDC77FC4FC975E74B5983AADC656FEAF6ADA7431
71F3EDF88F90FF929636515B372D65EE5FD60FD57533F01F31FF63CEBE58D44E
4BBD0E44D60F536A6A44D9259BF01FA5E77FF96A513BDDDE3AA0DADA6962DC79
EBF01FA1FD5F6316AED09E7F7B6B00A66BDF37F69CD5F88F88FFDA075E10E39B
9689FADA1A7BCFBF564F8C5B7929FE23E27FFAF65DA27CFE42DBFEEBA4FF25E7
69F5C64BF88F80FFC9B7FC773162C254313CBF40E48C2A4CC9B091F9227FCE42
51B7E305FC73FE0BFEF18F7FFCE31FFFF8C73FFEF18F7FFCE31FFFF8C73FFEF1
8F7FFCE35FE3274F3FBD2A6FE4C8CF0A8B8ABE06F7C82F28389E975F70E899BD
CF2E0CB2FF5D4FEF5AD1787AD3E144EFBD87F4D878D54631AB7EF63F3DFBECB3
B3F08F7FFCE33FA8FE67D6CD3C7CF185170B708F95CB578A2993A706DEFFEEDD
BBAB478D1AF55F8B8A8A3BC15D0A0A46DDF0CC337B4707D93F00A8835604B8C6
118D3AFC2BCD218D3CFC2B4D37FE95A7338CFE29CECBE1C387456D6DAD550CB4
E35F8DF2CE3BEF88DCDC5CAB1868C1BF1AE5C08103A11B13E0DFDDB273E7CE50
8D09F0EF7ED9B2654B68C604F8F7A634373787624C807FB5C704F8577B4C807F
B5C704F8577B4C807FB5C704F8F7AF343636066E4C807FB5C704F8F7BF3F9860
4CD0847F35CAFEFDFB033326C07FA0C604DD7E8F09F0DF77A5B5B5D52A06BAF0
CF9800FFCA8F09DAF0CF9800FFC9CBC18307C5934F3E29EEBAEB2EB176ED5AB1
6AD5AA1873E6CC1163C68C89515D5DDDF37589FCDE071F7C50FCF297BF0CFC98
00FF27FB96FEA447DD6FA69C79E69962EBD6AD7D1E0F566302FC0BF1EEBBEFC6
FC189F69AF907585CCD5CB38EB8B82FF6F8A7C1EDD7CCE9D22E34DB62DF80FAE
77BD6D37B6E912E3F32BFFB7FE75BDAF60EE2304250E54F62F3DD9F12EBF47BA
76A38E966D8B742BFB8E76E2C0EB3E82AAFEE53399EADE4BE7D29757E5E8D1A3
B1584815833256E4F7E2DF9D675EF6BF933DEB7DD12F97D725FB81C9DA1D2FAE
4B25FFF25993F731D1982C08E37359DF24AB0F64BD857FF7EA7B190FB29E0F5A
91B198A8BFE8667BA082FF44F5AA7CCEBC6CDFDDE81F24BA76595FB9110351F7
9FE8FEB95D8FF645BBE5460C44D9BF957B791FFDCEB1B8D53FF42206A2EA3F91
FBBECAB3BAD51E588D5DE4D7F0DFBBBE8C9AFB543120E31DFF27EAC9A8BA4F15
03E98C63A2E45FDE17AB315390E6DDDDCC1358F5079CC67994FC5BE5D48338B6
F7B2AE73DA17888AFF9FFDEC67967992A81719DF998C6DA3E2DF5CEFCBFFEFD5
9C49D08A55BED86E5E2B0AFEAD72BB516CF39DF405ECD67D61F72F9FF1743F7B
944ABACF40D8FD5B7DEE20E7F4BD2CE63650B60B51F76F7EF6D3CD8344A158E5
BD523D0B61F69FCEE755AD0E48F53C84D9BF3907A6F2B39FE89990F56314FDCB
E73CD3DC57148B557F38D97C6758FD9BF31E99CC8145AD98E73E938D87C2EADF
9CF388729E37D35C68B236208CFE651D47DDEF6C5C9428171046FFF2B39873BD
94DEC53C1796684E208CFECD391FFAFDA9FB4789724161F46F8E6DDAFED47564
A23E4018FD9BC7FD2ACDF53829E63E5254FC9B3F972AF3BC99E602AD9E93B0F9
B7EAFB53EC8D91A3E0DFDCAE91F7B19F07B2EA2785DDBF9D394E558B799C6435
06C43FFEF18F7FFCE31FFFF8A7FF4FFF9FF13FE37FF27FE4FF04F9FF5097A8E6
FF99FF73DE4F8AD2FC1FF3FFA94B94E7FF59FFE3BC8E8CD2FA1FD6FFA52E515E
FF6735B6A10FF04D89FAFA5FABF68D362071DE278AEBFFD9FF93B86D5461FF8F
551E8071803AFBFFAC3E2BFB7FD5DAFF6BD5CF65FFBF3AFBFFAD72419CFFA1D6
F91F9CFF93F83950E1FC9F4C3E7B548ACAE77F25AAFB38FFEF5DA5FC9BE70438
FF5328E55F16CEFF55F7FC5FBD2FA8CAF9DF89DE07A2F2F9DF899E09CEFF57C7
7FA23C08EFFF50C7BF2C2ABDFF47D2B27C39FE6DC64094DEFF65E4B4D9B3F06F
2306A2F2FE3F376280F77F86F3FD9F6EC500EFFF0DE6FB7FE51AAE44EFFF7533
0678FF77B8DEFFED760CA8E45FEF4725EA43EB6D425FC481BCAE6475BD8CDBD5
AB57BB1E03AAF94FD51E18E78F64BBE065FF40B6EFB24E4AF5BC1BDFF7DE74DA
7C57634055FF4EEA5A595FC85870237720FFA6746E3557611583567591F4E956
0CA8EC5F2FF21EDB6D73653D2CBF77EBD6ADB198903FAB63ACCBF5AF49D7B2AE
913F63770C27BDA7CA51B81503F84F2F0EBC40D6334E72538E636074B1B8EA92
0BF16FA38E96CF7726E32FBBC83A41F6FBD26D5B6CC780E6BE74C829A2EC942C
71C3BA56FC3BE897CB7ADECD7A413EE732BEDC1A67A48C01837B1D3D06F0EF3C
1EF4365DF6E1645C488C634A596FE85F97DF23BF57EF2B785512C680857B630C
E03F3AE5A41848E25E277F00FE23190336DC5BC500FEC35F9AE635D8766F8E01
FC47A3C8B6DD897F3D06F0AF760C6874E29F18C03F31807F6200FFC400FE8901
FC1303F82706F0AF7C0CD4E13F3A45E6FC1CFA6FC27F748A74E03006F01F31FF
0E62A09BF63F9AFE6DC440B7469EDBFE2158C83EBE57EEF11F7CA423CD75BB46
579C4EB7DCE33F1CFE858FF3BFA0967F00000000000000000000000008365A29
D7E8002591EE9B9837559626DD7F59C120B1AD65342880746DF6DF3869B8108F
D5830248D7F8C73FFEF18F7FFCE31FFFB94306C4BE0ED147BA36FB0765C7FF79
8638D0B943FF9EA5D53962FFD51321843CBB7682A8CC1F1CF3D8AF5FD6C7DA7F
37983CE725C90BB7E931D03A2B5F883BEB21441CFE419DA81D3344777F54FB6F
5D1A73033D3170EFCA71DC5785DC5BC5C0CE8BCAB9BF21A0B162B82BEE8981F0
21DB6A37DD1B62A093180887FB01FDFB7DE4A67B62203CEEE3B479B85E841850
D43D31807B6200F7C400EE8901DC1303B8B78A81DDAD95B852C8BD3906724F1D
200E5C3F19670AB92706BC43B6A961706F88812E62404DF771FF724D493731E0
AAFB8E90ED2B2406DC73DF19D2BDA5C480A2EE8901DC1303B82706704F0CE09E
18C0BD550C948D18145BAF8C7B35DC5BC5805CABAE5A0CC8FD39AABA37C6C0C0
FEFDDE502D06649B27DB3E95DD1B62A02EBE565D8918C0BDBA316072DF9D6CFF
253150877B6200F7C400EE8901DC1303B8270670AF780CE05EED1808F25944B8
F73606FAF7CB3A16D418309EB9837BCF62A029886792E1DED71808D4B9741667
6DE15E911870F39C3508570CE05EDD18C07D3063C02F860DEA8F7BC56300F7C1
8D01AFDE9BB0FFE69E357B5FE13E9031E097FF57B9DF4AFBEFE27EE31FF00FF8
07FC03FE01FF807FC03FE01FF00FF807FC03FE01FF807FC03FE01FF00FF807FC
03FE01FF807FC03FE01FF00FF807FC03FE01FF807FC03FE01FACFD374E1A1E73
857FE5FC771ACFE8723B0EF01F8A1828F72A0EF0AF761CE05FED38C07FA8E340
BE6FBA437F87841E07BB3757E25FC138D0DF27137B077DC120B1734339FE8983
A471807FB5E300FF6AC701FED58E03FCAB1D07B94306E05FCD3868D3C68DEF1A
7208F8573316E43B263AE47FB91F000000000000000000001064FE3F180E59AD
}
end end
end end

View File

@ -2124,6 +2124,8 @@ var baseaddress: ptruint;
i,j: integer; i,j: integer;
LF: array of TAddressWithShadow; LF: array of TAddressWithShadow;
NLF: array of TAddressWithShadow; NLF: array of TAddressWithShadow;
s: string;
begin begin
if pointerfilereader<>nil then if pointerfilereader<>nil then
@ -2151,7 +2153,7 @@ begin
if TAddressEdit(edtLF[i]).invalidAddress then raise exception.create(Format(rsInvalidGroup, [1, inttostr(i+1), TAddressEdit(edtLF[i]).text])); if TAddressEdit(edtLF[i]).invalidAddress then raise exception.create(Format(rsInvalidGroup, [1, inttostr(i+1), TAddressEdit(edtLF[i]).text]));
for j:=0 to i-1 do for j:=0 to i-1 do
if (lf[j].address=lf[i].address) and (lf[i].shadow=lf[j].shadow) then raise exception.create(Format(rsSameAddress, [TAddressEdit(edtLF[i])])); if (lf[j].address=lf[i].address) and (lf[i].shadow=lf[j].shadow) then raise exception.create(Format(rsSameAddress, [TAddressEdit(edtLF[i]).text]));
end; end;
setlength(NLF, edtNLF.count); setlength(NLF, edtNLF.count);
@ -2172,10 +2174,22 @@ begin
if TAddressEdit(edtNLF[i]).invalidAddress then raise exception.create(Format(rsInvalidGroup, [2, inttostr(i+1), TAddressEdit(edtNLF[i]).text])); if TAddressEdit(edtNLF[i]).invalidAddress then raise exception.create(Format(rsInvalidGroup, [2, inttostr(i+1), TAddressEdit(edtNLF[i]).text]));
for j:=0 to i-1 do for j:=0 to i-1 do
if (nlf[j].address=nlf[i].address) and (nlf[i].shadow=nlf[j].shadow) then raise exception.create(Format(rsSameAddress, [TAddressEdit(edtLF[i])])); begin
if (nlf[j].address=nlf[i].address) and (nlf[i].shadow=nlf[j].shadow) then
begin
s:=TAddressEdit(edtNLF[i]).text;
raise exception.create(Format(rsSameAddress, [s]));
end;
end;
for j:=0 to length(lf)-1 do for j:=0 to length(lf)-1 do
if (lf[j].address=nlf[i].address) and (lf[i].shadow=nlf[j].shadow) then raise exception.create(Format(rsSameAddress, [TAddressEdit(edtLF[i])])); begin
if (lf[j].address=nlf[i].address) and (lf[i].shadow=nlf[j].shadow) then
begin
s:=TAddressEdit(edtNLF[i]).text;
raise exception.create(Format(rsSameAddress, [s]));
end;
end;
end; end;
maxlevel:=strtoint(edtMaxLevel.text); maxlevel:=strtoint(edtMaxLevel.text);

View File

@ -30,6 +30,7 @@ Hexview: Fixed changing the address when pressing a non char key
Hexview: Fixed changing the address when doubleclicking and then canceling Hexview: Fixed changing the address when doubleclicking and then canceling
alloc with a prefered base is now more aggressive in getting the range you want alloc with a prefered base is now more aggressive in getting the range you want
fixed mono symbol lookup while dlls are still being loaded fixed mono symbol lookup while dlls are still being loaded
fixed the structure compare not giving a proper errormessage
lua: lua: